summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/devices/bus/a2bus/a2bus.h8
-rw-r--r--src/devices/bus/acorn/system/vib.cpp149
-rw-r--r--src/devices/bus/acorn/system/vib.h9
-rw-r--r--src/devices/bus/amiga/keyboard/a1200.cpp16
-rw-r--r--src/devices/bus/amiga/keyboard/a1200.h3
-rw-r--r--src/devices/bus/bbc/rom/slot.h2
-rw-r--r--src/devices/bus/bml3/bml3mp1802.cpp4
-rw-r--r--src/devices/bus/cbmiec/c1541.cpp16
-rw-r--r--src/devices/bus/centronics/nec_p72.cpp2
-rw-r--r--src/devices/bus/ecbbus/grip.cpp24
-rw-r--r--src/devices/bus/einstein/pipe/tk02.cpp2
-rw-r--r--src/devices/bus/hp_dio/hp98543.cpp10
-rw-r--r--src/devices/bus/interpro/sr/gt.cpp12
-rw-r--r--src/devices/bus/isa/ega.cpp60
-rw-r--r--src/devices/bus/isa/isa_cards.cpp5
-rw-r--r--src/devices/bus/isa/mda.cpp607
-rw-r--r--src/devices/bus/isa/mda.h83
-rw-r--r--src/devices/bus/isa/pcmidi.cpp262
-rw-r--r--src/devices/bus/isa/pcmidi.h47
-rw-r--r--src/devices/bus/isa/sb16.cpp12
-rw-r--r--src/devices/bus/isa/stereo_fx.cpp2
-rw-r--r--src/devices/bus/megadrive/md_slot.h4
-rw-r--r--src/devices/bus/megadrive/svp.cpp4
-rw-r--r--src/devices/bus/rs232/ie15.cpp76
-rw-r--r--src/devices/bus/rs232/ie15.h22
-rw-r--r--src/devices/bus/rs232/rs232.cpp17
-rw-r--r--src/devices/bus/rs232/rs232.h1
-rw-r--r--src/devices/bus/sat_ctrl/multitap.cpp36
-rw-r--r--src/devices/bus/sat_ctrl/multitap.h9
-rw-r--r--src/devices/bus/sat_ctrl/segatap.cpp35
-rw-r--r--src/devices/bus/sat_ctrl/segatap.h8
-rw-r--r--src/devices/bus/ss50/dc5.cpp26
-rw-r--r--src/devices/bus/ss50/mps2.cpp8
-rw-r--r--src/devices/bus/vme/vme_fcisio.cpp2
-rw-r--r--src/devices/bus/vme/vme_fcscsi.cpp2
-rw-r--r--src/devices/bus/vme/vme_hcpu30.cpp2
-rw-r--r--src/devices/bus/vme/vme_mvme350.cpp4
-rw-r--r--src/devices/bus/wangpc/rtc.cpp24
-rw-r--r--src/devices/cpu/alto2/alto2cpu.cpp4
-rw-r--r--src/devices/cpu/dsp56156/dsp56156.cpp2
-rw-r--r--src/devices/cpu/h8/h83337.cpp4
-rw-r--r--src/devices/cpu/i386/i386segs.hxx2
-rw-r--r--src/devices/cpu/i8089/i8089.cpp2
-rw-r--r--src/devices/cpu/i86/i186.cpp4
-rw-r--r--src/devices/cpu/i86/i286.cpp2
-rw-r--r--src/devices/cpu/i86/i86.cpp4
-rw-r--r--src/devices/cpu/lc8670/lc8670.h6
-rw-r--r--src/devices/cpu/m6502/n2a03.cpp2
-rw-r--r--src/devices/cpu/m6800/m6800.cpp6
-rw-r--r--src/devices/cpu/m6800/m6801.cpp54
-rw-r--r--src/devices/cpu/m6805/m68hc05.h10
-rw-r--r--src/devices/cpu/mcs51/mcs51.cpp2
-rw-r--r--src/devices/cpu/sh/sh2.cpp6
-rw-r--r--src/devices/cpu/sh/sh7604_bus.cpp2
-rw-r--r--src/devices/cpu/sh/sh7604_wdt.cpp8
-rw-r--r--src/devices/cpu/tlcs90/tlcs90.cpp4
-rw-r--r--src/devices/cpu/tms32051/tms32051.cpp4
-rw-r--r--src/devices/cpu/unsp/unsp.cpp1
-rw-r--r--src/devices/cpu/unsp/unsp_fxxx.cpp10
-rw-r--r--src/devices/cpu/unsp/unspdrc.cpp7
-rw-r--r--src/devices/cpu/unsp/unspfe.cpp3
-rw-r--r--src/devices/cpu/upd7810/upd7810.cpp6
-rw-r--r--src/devices/imagedev/cassette.cpp18
-rw-r--r--src/devices/imagedev/cassette.h11
-rw-r--r--src/devices/machine/adc0804.cpp263
-rw-r--r--src/devices/machine/adc0804.h108
-rw-r--r--src/devices/machine/atmel_arm_aic.h2
-rw-r--r--src/devices/machine/cxd1095.h2
-rw-r--r--src/devices/machine/i80130.cpp6
-rw-r--r--src/devices/machine/i8251.cpp96
-rw-r--r--src/devices/machine/i8257.cpp43
-rw-r--r--src/devices/machine/ie15.cpp84
-rw-r--r--src/devices/machine/ie15.h28
-rw-r--r--src/devices/machine/ins8250.cpp7
-rw-r--r--src/devices/machine/mb14241.cpp12
-rw-r--r--src/devices/machine/mb14241.h13
-rw-r--r--src/devices/machine/mb8421.cpp2
-rw-r--r--src/devices/machine/mos6530n.h2
-rw-r--r--src/devices/machine/netlist.cpp37
-rw-r--r--src/devices/machine/netlist.h10
-rw-r--r--src/devices/machine/nvram.cpp2
-rw-r--r--src/devices/machine/pit8253.cpp44
-rw-r--r--src/devices/machine/sega_scu.cpp22
-rw-r--r--src/devices/machine/smpc.cpp2
-rw-r--r--src/devices/machine/vrender0.cpp2
-rw-r--r--src/devices/machine/wtl3132.cpp13
-rw-r--r--src/devices/sound/c140.cpp7
-rw-r--r--src/devices/sound/wave.cpp16
-rw-r--r--src/devices/sound/ymf262.cpp9
-rw-r--r--src/devices/sound/ymf278b.cpp8
-rw-r--r--src/devices/video/imagetek_i4100.cpp2
-rw-r--r--src/devices/video/mb90082.cpp4
-rw-r--r--src/devices/video/mc6845.cpp47
-rw-r--r--src/devices/video/mc6845.h1
-rw-r--r--src/devices/video/ppu2c0x.cpp2
-rw-r--r--src/devices/video/sed1330.cpp7
-rw-r--r--src/devices/video/snes_ppu.cpp634
-rw-r--r--src/devices/video/snes_ppu.h30
-rw-r--r--src/devices/video/sprite.cpp4
-rw-r--r--src/devices/video/sprite.h4
-rw-r--r--src/emu/addrmap.cpp2
-rw-r--r--src/emu/attotime.h2
-rw-r--r--src/emu/devfind.h30
-rw-r--r--src/emu/device.h295
-rw-r--r--src/emu/disound.cpp34
-rw-r--r--src/emu/distate.cpp2
-rw-r--r--src/emu/driver.cpp10
-rw-r--r--src/emu/driver.h18
-rw-r--r--src/emu/emucore.h2
-rw-r--r--src/emu/render.cpp13
-rw-r--r--src/emu/render.h5
-rw-r--r--src/emu/screen.cpp9
-rw-r--r--src/emu/screen.h196
-rw-r--r--src/emu/xtal.cpp5
-rw-r--r--src/frontend/mame/ui/videoopt.h2
-rw-r--r--src/lib/netlist/analog/nld_mosfet.cpp2
-rw-r--r--src/lib/netlist/build/makefile6
-rw-r--r--src/lib/netlist/devices/net_lib.cpp4
-rw-r--r--src/lib/netlist/devices/nld_4020.cpp2
-rw-r--r--src/lib/netlist/devices/nld_74107.cpp2
-rw-r--r--src/lib/netlist/devices/nld_74107.h2
-rw-r--r--src/lib/netlist/devices/nld_74123.cpp2
-rw-r--r--src/lib/netlist/devices/nld_7448.cpp6
-rw-r--r--src/lib/netlist/devices/nld_7448.h2
-rw-r--r--src/lib/netlist/devices/nld_7490.cpp2
-rw-r--r--src/lib/netlist/devices/nld_7497.cpp2
-rw-r--r--src/lib/netlist/devices/nld_74ls629.cpp10
-rw-r--r--src/lib/netlist/devices/nld_am2847.cpp2
-rw-r--r--src/lib/netlist/devices/nld_system.cpp2
-rw-r--r--src/lib/netlist/devices/nlid_proxy.cpp2
-rw-r--r--src/lib/netlist/devices/nlid_system.h2
-rw-r--r--src/lib/netlist/devices/nlid_truthtable.cpp4
-rw-r--r--src/lib/netlist/macro/nlm_ttl74xx.cpp16
-rw-r--r--src/lib/netlist/macro/nlm_ttl74xx.h6
-rw-r--r--src/lib/netlist/nl_base.cpp1622
-rw-r--r--src/lib/netlist/nl_base.h456
-rw-r--r--src/lib/netlist/nl_config.h22
-rw-r--r--src/lib/netlist/nl_errstr.h7
-rw-r--r--src/lib/netlist/nl_factory.cpp4
-rw-r--r--src/lib/netlist/nl_factory.h8
-rw-r--r--src/lib/netlist/nl_lists.h358
-rw-r--r--src/lib/netlist/nl_parser.cpp8
-rw-r--r--src/lib/netlist/nl_setup.cpp100
-rw-r--r--src/lib/netlist/nl_setup.h91
-rw-r--r--src/lib/netlist/nltypes.h15
-rw-r--r--src/lib/netlist/plib/gmres.h115
-rw-r--r--src/lib/netlist/plib/mat_cr.h591
-rw-r--r--src/lib/netlist/plib/palloc.h66
-rw-r--r--src/lib/netlist/plib/parray.h69
-rw-r--r--src/lib/netlist/plib/pchrono.h424
-rw-r--r--src/lib/netlist/plib/pconfig.h73
-rw-r--r--src/lib/netlist/plib/pdynlib.h2
-rw-r--r--src/lib/netlist/plib/pfmtlog.cpp7
-rw-r--r--src/lib/netlist/plib/pfmtlog.h14
-rw-r--r--src/lib/netlist/plib/pfunction.cpp3
-rw-r--r--src/lib/netlist/plib/plists.h628
-rw-r--r--src/lib/netlist/plib/pmempool.h10
-rw-r--r--src/lib/netlist/plib/pomp.h10
-rw-r--r--src/lib/netlist/plib/poptions.cpp1
-rw-r--r--src/lib/netlist/plib/poptions.h2
-rw-r--r--src/lib/netlist/plib/pparser.cpp133
-rw-r--r--src/lib/netlist/plib/pparser.h83
-rw-r--r--src/lib/netlist/plib/ppmf.h76
-rw-r--r--src/lib/netlist/plib/pstream.h1
-rw-r--r--src/lib/netlist/plib/pstring.cpp2
-rw-r--r--src/lib/netlist/plib/pstring.h187
-rw-r--r--src/lib/netlist/plib/pstrutil.h228
-rw-r--r--src/lib/netlist/plib/ptypes.h15
-rw-r--r--src/lib/netlist/plib/putil.cpp35
-rw-r--r--src/lib/netlist/plib/putil.h125
-rw-r--r--src/lib/netlist/prg/nltool.cpp58
-rw-r--r--src/lib/netlist/solver/nld_matrix_solver.cpp49
-rw-r--r--src/lib/netlist/solver/nld_matrix_solver.h94
-rw-r--r--src/lib/netlist/solver/nld_ms_direct.h6
-rw-r--r--src/lib/netlist/solver/nld_ms_gcr.h79
-rw-r--r--src/lib/netlist/solver/nld_ms_gmres.h5
-rw-r--r--src/lib/netlist/solver/nld_ms_sor.h2
-rw-r--r--src/lib/netlist/solver/nld_ms_sor_mat.h2
-rw-r--r--src/lib/netlist/solver/nld_solver.cpp71
-rw-r--r--src/lib/netlist/tools/nl_convert.cpp2
-rw-r--r--src/mame/audio/8080bw.cpp65
-rw-r--r--src/mame/audio/flower.cpp2
-rw-r--r--src/mame/audio/leland.cpp92
-rw-r--r--src/mame/audio/mw8080bw.cpp5375
-rw-r--r--src/mame/audio/mw8080bw.h314
-rw-r--r--src/mame/audio/nl_1942.cpp93
-rw-r--r--src/mame/audio/nl_1942.h6
-rw-r--r--src/mame/audio/nl_cheekyms.cpp1
-rw-r--r--src/mame/audio/nl_cocoloco.cpp53
-rw-r--r--src/mame/audio/nl_cocoloco.h6
-rw-r--r--src/mame/audio/nl_gamemachine.cpp88
-rw-r--r--src/mame/audio/nl_gamemachine.h7
-rw-r--r--src/mame/audio/nl_kidniki.cpp10
-rw-r--r--src/mame/audio/nl_popeye.cpp93
-rw-r--r--src/mame/audio/nl_popeye.h6
-rw-r--r--src/mame/audio/nl_zac1b11142.cpp2
-rw-r--r--src/mame/drivers/1942.cpp82
-rw-r--r--src/mame/drivers/20pacgal.cpp4
-rw-r--r--src/mame/drivers/40love.cpp2
-rw-r--r--src/mame/drivers/4dpi.cpp28
-rw-r--r--src/mame/drivers/4enlinea.cpp4
-rw-r--r--src/mame/drivers/4enraya.cpp2
-rw-r--r--src/mame/drivers/4roses.cpp4
-rw-r--r--src/mame/drivers/8080bw.cpp82
-rw-r--r--src/mame/drivers/a5105.cpp4
-rw-r--r--src/mame/drivers/a7800.cpp3
-rw-r--r--src/mame/drivers/acesp.cpp4
-rw-r--r--src/mame/drivers/airraid.cpp13
-rw-r--r--src/mame/drivers/akaiax80.cpp6
-rw-r--r--src/mame/drivers/alesis.cpp2
-rw-r--r--src/mame/drivers/alesis_qs.cpp2
-rw-r--r--src/mame/drivers/alpha68k_n.cpp10
-rw-r--r--src/mame/drivers/alphatpx.cpp8
-rw-r--r--src/mame/drivers/alphatro.cpp2
-rw-r--r--src/mame/drivers/altair.cpp2
-rw-r--r--src/mame/drivers/altos486.cpp8
-rw-r--r--src/mame/drivers/altos5.cpp2
-rw-r--r--src/mame/drivers/amaticmg.cpp12
-rw-r--r--src/mame/drivers/amico2k.cpp2
-rw-r--r--src/mame/drivers/ampoker2.cpp2
-rw-r--r--src/mame/drivers/amspdwy.cpp4
-rw-r--r--src/mame/drivers/anes.cpp4
-rw-r--r--src/mame/drivers/apc.cpp12
-rw-r--r--src/mame/drivers/apogee.cpp2
-rw-r--r--src/mame/drivers/apollo.cpp28
-rw-r--r--src/mame/drivers/apple2e.cpp4
-rw-r--r--src/mame/drivers/applix.cpp2
-rw-r--r--src/mame/drivers/apricotf.cpp2
-rw-r--r--src/mame/drivers/aquarius.cpp2
-rw-r--r--src/mame/drivers/argox.cpp2
-rw-r--r--src/mame/drivers/armedf.cpp10
-rw-r--r--src/mame/drivers/arsystems.cpp2
-rw-r--r--src/mame/drivers/artmagic.cpp2
-rw-r--r--src/mame/drivers/astrohome.cpp2
-rw-r--r--src/mame/drivers/at.cpp2346
-rw-r--r--src/mame/drivers/atarig1.cpp2
-rw-r--r--src/mame/drivers/atarist.cpp76
-rw-r--r--src/mame/drivers/atlantis.cpp24
-rw-r--r--src/mame/drivers/atom.cpp4
-rw-r--r--src/mame/drivers/atvtrack.cpp2
-rw-r--r--src/mame/drivers/avt.cpp2
-rw-r--r--src/mame/drivers/badlandsbl.cpp2
-rw-r--r--src/mame/drivers/bagman.cpp2
-rw-r--r--src/mame/drivers/basic52.cpp10
-rw-r--r--src/mame/drivers/bebox.cpp2
-rw-r--r--src/mame/drivers/beezer.cpp4
-rw-r--r--src/mame/drivers/besta.cpp14
-rw-r--r--src/mame/drivers/bfcobra.cpp10
-rw-r--r--src/mame/drivers/bfm_sc2.cpp2
-rw-r--r--src/mame/drivers/bigbord2.cpp2
-rw-r--r--src/mame/drivers/bigstrkb.cpp2
-rw-r--r--src/mame/drivers/bingoman.cpp2
-rw-r--r--src/mame/drivers/bingor.cpp2
-rw-r--r--src/mame/drivers/bitgraph.cpp2
-rw-r--r--src/mame/drivers/bking.cpp4
-rw-r--r--src/mame/drivers/bloodbro.cpp2
-rw-r--r--src/mame/drivers/bmjr.cpp8
-rw-r--r--src/mame/drivers/bml3.cpp12
-rw-r--r--src/mame/drivers/bpmmicro.cpp2
-rw-r--r--src/mame/drivers/buggychl.cpp6
-rw-r--r--src/mame/drivers/buster.cpp2
-rw-r--r--src/mame/drivers/by35.cpp4
-rw-r--r--src/mame/drivers/c128.cpp21
-rw-r--r--src/mame/drivers/c64.cpp30
-rw-r--r--src/mame/drivers/c65.cpp2
-rw-r--r--src/mame/drivers/calchase.cpp4
-rw-r--r--src/mame/drivers/calcune.cpp2
-rw-r--r--src/mame/drivers/camplynx.cpp8
-rw-r--r--src/mame/drivers/candela.cpp2
-rw-r--r--src/mame/drivers/capr1.cpp8
-rw-r--r--src/mame/drivers/casloopy.cpp4
-rw-r--r--src/mame/drivers/cave.cpp627
-rw-r--r--src/mame/drivers/cbm2.cpp18
-rw-r--r--src/mame/drivers/cclimber.cpp2
-rw-r--r--src/mame/drivers/cd2650.cpp2
-rw-r--r--src/mame/drivers/cdi.cpp24
-rw-r--r--src/mame/drivers/cesclass.cpp4
-rw-r--r--src/mame/drivers/cfx9850.cpp6
-rw-r--r--src/mame/drivers/cgc7900.cpp36
-rw-r--r--src/mame/drivers/champbas.cpp2
-rw-r--r--src/mame/drivers/chessmst.cpp2
-rw-r--r--src/mame/drivers/chinagat.cpp16
-rw-r--r--src/mame/drivers/chsuper.cpp2
-rw-r--r--src/mame/drivers/cischeat.cpp19
-rw-r--r--src/mame/drivers/clayshoo.cpp6
-rw-r--r--src/mame/drivers/cmi.cpp8
-rw-r--r--src/mame/drivers/cmmb.cpp2
-rw-r--r--src/mame/drivers/cntsteer.cpp2
-rw-r--r--src/mame/drivers/cobra.cpp2
-rw-r--r--src/mame/drivers/cocoloco.cpp46
-rw-r--r--src/mame/drivers/codata.cpp6
-rw-r--r--src/mame/drivers/coinmstr.cpp2
-rw-r--r--src/mame/drivers/coinmvga.cpp32
-rw-r--r--src/mame/drivers/combatsc.cpp2
-rw-r--r--src/mame/drivers/concept.cpp2
-rw-r--r--src/mame/drivers/cosmicos.cpp6
-rw-r--r--src/mame/drivers/crgolf.cpp2
-rw-r--r--src/mame/drivers/crvision.cpp4
-rw-r--r--src/mame/drivers/cswat.cpp4
-rw-r--r--src/mame/drivers/cubeqst.cpp22
-rw-r--r--src/mame/drivers/cupidon.cpp7
-rw-r--r--src/mame/drivers/cv1k.cpp4
-rw-r--r--src/mame/drivers/cybiko.cpp2
-rw-r--r--src/mame/drivers/cyclemb.cpp10
-rw-r--r--src/mame/drivers/d9final.cpp4
-rw-r--r--src/mame/drivers/dai.cpp2
-rw-r--r--src/mame/drivers/darkmist.cpp4
-rw-r--r--src/mame/drivers/daruma.cpp4
-rw-r--r--src/mame/drivers/dblewing.cpp2
-rw-r--r--src/mame/drivers/dbox.cpp4
-rw-r--r--src/mame/drivers/dccons.cpp48
-rw-r--r--src/mame/drivers/dday.cpp18
-rw-r--r--src/mame/drivers/ddenlovr.cpp20
-rw-r--r--src/mame/drivers/dec8.cpp62
-rw-r--r--src/mame/drivers/deco_ld.cpp2
-rw-r--r--src/mame/drivers/dectalk.cpp2
-rw-r--r--src/mame/drivers/deshoros.cpp8
-rw-r--r--src/mame/drivers/dg680.cpp4
-rw-r--r--src/mame/drivers/digel804.cpp22
-rw-r--r--src/mame/drivers/dim68k.cpp2
-rw-r--r--src/mame/drivers/diverboy.cpp8
-rw-r--r--src/mame/drivers/dlair2.cpp10
-rw-r--r--src/mame/drivers/dm7000.cpp2
-rw-r--r--src/mame/drivers/dmax8000.cpp6
-rw-r--r--src/mame/drivers/dps1.cpp8
-rw-r--r--src/mame/drivers/dreambal.cpp2
-rw-r--r--src/mame/drivers/dsb46.cpp10
-rw-r--r--src/mame/drivers/dunhuang.cpp2
-rw-r--r--src/mame/drivers/dynax.cpp52
-rw-r--r--src/mame/drivers/ec184x.cpp2
-rw-r--r--src/mame/drivers/ecoinf2.cpp4
-rw-r--r--src/mame/drivers/ecoinfr.cpp2
-rw-r--r--src/mame/drivers/eispc.cpp959
-rw-r--r--src/mame/drivers/elan_eu3a05.cpp3
-rw-r--r--src/mame/drivers/ep64.cpp2
-rw-r--r--src/mame/drivers/eprom.cpp2
-rw-r--r--src/mame/drivers/eurocom2.cpp2
-rw-r--r--src/mame/drivers/exedexes.cpp12
-rw-r--r--src/mame/drivers/exp85.cpp2
-rw-r--r--src/mame/drivers/exterm.cpp2
-rw-r--r--src/mame/drivers/fastfred.cpp2
-rw-r--r--src/mame/drivers/fastinvaders.cpp8
-rw-r--r--src/mame/drivers/fb01.cpp2
-rw-r--r--src/mame/drivers/fc100.cpp4
-rw-r--r--src/mame/drivers/fccpu30.cpp10
-rw-r--r--src/mame/drivers/fcrash.cpp12
-rw-r--r--src/mame/drivers/feversoc.cpp2
-rw-r--r--src/mame/drivers/fgoal.cpp8
-rw-r--r--src/mame/drivers/finalizr.cpp2
-rw-r--r--src/mame/drivers/firetrap.cpp8
-rw-r--r--src/mame/drivers/fitfight.cpp2
-rw-r--r--src/mame/drivers/flstory.cpp14
-rw-r--r--src/mame/drivers/fm7.cpp10
-rw-r--r--src/mame/drivers/fmtowns.cpp108
-rw-r--r--src/mame/drivers/force68k.cpp6
-rw-r--r--src/mame/drivers/forte2.cpp4
-rw-r--r--src/mame/drivers/fortecar.cpp2
-rw-r--r--src/mame/drivers/fp1100.cpp116
-rw-r--r--src/mame/drivers/fresh.cpp25
-rw-r--r--src/mame/drivers/funkball.cpp6
-rw-r--r--src/mame/drivers/gaelco.cpp12
-rw-r--r--src/mame/drivers/gaelco2.cpp2
-rw-r--r--src/mame/drivers/gaiden.cpp10
-rw-r--r--src/mame/drivers/gal3.cpp32
-rw-r--r--src/mame/drivers/galaxian.cpp33
-rw-r--r--src/mame/drivers/galaxold.cpp30
-rw-r--r--src/mame/drivers/gambl186.cpp4
-rw-r--r--src/mame/drivers/gameking.cpp4
-rw-r--r--src/mame/drivers/gamemachine.cpp88
-rw-r--r--src/mame/drivers/gamepock.cpp2
-rw-r--r--src/mame/drivers/gamtor.cpp6
-rw-r--r--src/mame/drivers/gaplus.cpp2
-rw-r--r--src/mame/drivers/gba.cpp2
-rw-r--r--src/mame/drivers/geniusiq.cpp4
-rw-r--r--src/mame/drivers/gimix.cpp6
-rw-r--r--src/mame/drivers/gladiatr.cpp4
-rw-r--r--src/mame/drivers/glass.cpp4
-rw-r--r--src/mame/drivers/gmaster.cpp2
-rw-r--r--src/mame/drivers/go2000.cpp6
-rw-r--r--src/mame/drivers/gokidetor.cpp2
-rw-r--r--src/mame/drivers/goldnpkr.cpp6
-rw-r--r--src/mame/drivers/goldstar.cpp54
-rw-r--r--src/mame/drivers/good.cpp2
-rw-r--r--src/mame/drivers/gottlieb.cpp4
-rw-r--r--src/mame/drivers/gpworld.cpp4
-rw-r--r--src/mame/drivers/gridcomp.cpp4
-rw-r--r--src/mame/drivers/gsword.cpp2
-rw-r--r--src/mame/drivers/gts80a.cpp12
-rw-r--r--src/mame/drivers/gunpey.cpp6
-rw-r--r--src/mame/drivers/h89.cpp14
-rw-r--r--src/mame/drivers/hh_sm510.cpp1304
-rw-r--r--src/mame/drivers/hideseek.cpp2
-rw-r--r--src/mame/drivers/highvdeo.cpp8
-rw-r--r--src/mame/drivers/hitme.cpp4
-rw-r--r--src/mame/drivers/hitpoker.cpp2
-rw-r--r--src/mame/drivers/hk68v10.cpp4
-rw-r--r--src/mame/drivers/hotstuff.cpp2
-rw-r--r--src/mame/drivers/hp9k.cpp2
-rw-r--r--src/mame/drivers/ht68k.cpp4
-rw-r--r--src/mame/drivers/huebler.cpp6
-rw-r--r--src/mame/drivers/hvyunit.cpp4
-rw-r--r--src/mame/drivers/hyhoo.cpp4
-rw-r--r--src/mame/drivers/i7000.cpp32
-rw-r--r--src/mame/drivers/ibm3153.cpp4
-rw-r--r--src/mame/drivers/icatel.cpp2
-rw-r--r--src/mame/drivers/ie15.cpp18
-rw-r--r--src/mame/drivers/if800.cpp2
-rw-r--r--src/mame/drivers/igs017.cpp2
-rw-r--r--src/mame/drivers/imolagp.cpp2
-rw-r--r--src/mame/drivers/instantm.cpp18
-rw-r--r--src/mame/drivers/interact.cpp4
-rw-r--r--src/mame/drivers/intrscti.cpp4
-rw-r--r--src/mame/drivers/intv.cpp2
-rw-r--r--src/mame/drivers/inufuku.cpp4
-rw-r--r--src/mame/drivers/isbc.cpp2
-rw-r--r--src/mame/drivers/isbc8010.cpp4
-rw-r--r--src/mame/drivers/istellar.cpp10
-rw-r--r--src/mame/drivers/itech32.cpp4
-rw-r--r--src/mame/drivers/jangou.cpp4
-rw-r--r--src/mame/drivers/jclub2.cpp38
-rw-r--r--src/mame/drivers/jokrwild.cpp2
-rw-r--r--src/mame/drivers/joystand.cpp4
-rw-r--r--src/mame/drivers/jpmimpct.cpp24
-rw-r--r--src/mame/drivers/jpmmps.cpp12
-rw-r--r--src/mame/drivers/jpms80.cpp4
-rw-r--r--src/mame/drivers/jupiter.cpp24
-rw-r--r--src/mame/drivers/jvh.cpp50
-rw-r--r--src/mame/drivers/kaneko16.cpp4
-rw-r--r--src/mame/drivers/karnov.cpp18
-rw-r--r--src/mame/drivers/kingdrby.cpp2
-rw-r--r--src/mame/drivers/kingpin.cpp12
-rw-r--r--src/mame/drivers/kyocera.cpp14
-rw-r--r--src/mame/drivers/lbeach.cpp8
-rw-r--r--src/mame/drivers/leapster.cpp2
-rw-r--r--src/mame/drivers/lethalj.cpp2
-rw-r--r--src/mame/drivers/lgp.cpp6
-rw-r--r--src/mame/drivers/liberate.cpp2
-rw-r--r--src/mame/drivers/liberatr.cpp2
-rw-r--r--src/mame/drivers/ltd.cpp2
-rw-r--r--src/mame/drivers/luckgrln.cpp5
-rw-r--r--src/mame/drivers/lvcards.cpp2
-rw-r--r--src/mame/drivers/lwings.cpp13
-rw-r--r--src/mame/drivers/lwriter.cpp2
-rw-r--r--src/mame/drivers/m24.cpp16
-rw-r--r--src/mame/drivers/m5.cpp6
-rw-r--r--src/mame/drivers/m72.cpp152
-rw-r--r--src/mame/drivers/m79152pc.cpp2
-rw-r--r--src/mame/drivers/m90.cpp242
-rw-r--r--src/mame/drivers/mac.cpp2
-rw-r--r--src/mame/drivers/macs.cpp20
-rw-r--r--src/mame/drivers/magic10.cpp4
-rw-r--r--src/mame/drivers/magicard.cpp4
-rw-r--r--src/mame/drivers/magictg.cpp2
-rw-r--r--src/mame/drivers/mattelchess.cpp4
-rw-r--r--src/mame/drivers/maygay1b.cpp6
-rw-r--r--src/mame/drivers/mazerbla.cpp2
-rw-r--r--src/mame/drivers/mbee.cpp8
-rw-r--r--src/mame/drivers/mcatadv.cpp62
-rw-r--r--src/mame/drivers/megaplay.cpp4
-rw-r--r--src/mame/drivers/megasys1.cpp60
-rw-r--r--src/mame/drivers/megatech.cpp6
-rw-r--r--src/mame/drivers/mephisto_modular.cpp18
-rw-r--r--src/mame/drivers/mephistp.cpp2
-rw-r--r--src/mame/drivers/metlclsh.cpp4
-rw-r--r--src/mame/drivers/metlfrzr.cpp4
-rw-r--r--src/mame/drivers/meyc8080.cpp2
-rw-r--r--src/mame/drivers/mgames.cpp2
-rw-r--r--src/mame/drivers/mgavegas.cpp4
-rw-r--r--src/mame/drivers/mhavoc.cpp4
-rw-r--r--src/mame/drivers/micral.cpp2
-rw-r--r--src/mame/drivers/microdec.cpp20
-rw-r--r--src/mame/drivers/midtunit.cpp2
-rw-r--r--src/mame/drivers/midvunit.cpp2
-rw-r--r--src/mame/drivers/mini2440.cpp2
-rw-r--r--src/mame/drivers/miniforce.cpp10
-rw-r--r--src/mame/drivers/mirax.cpp2
-rw-r--r--src/mame/drivers/missb2.cpp2
-rw-r--r--src/mame/drivers/mk90.cpp14
-rw-r--r--src/mame/drivers/mkit09.cpp111
-rw-r--r--src/mame/drivers/model2.cpp46
-rw-r--r--src/mame/drivers/molecular.cpp2
-rw-r--r--src/mame/drivers/monty.cpp4
-rw-r--r--src/mame/drivers/mpu3.cpp8
-rw-r--r--src/mame/drivers/mpu4dealem.cpp2
-rw-r--r--src/mame/drivers/mpu4vid.cpp22
-rw-r--r--src/mame/drivers/ms32.cpp32
-rw-r--r--src/mame/drivers/msisaac.cpp8
-rw-r--r--src/mame/drivers/mstation.cpp2
-rw-r--r--src/mame/drivers/multfish.cpp4
-rw-r--r--src/mame/drivers/multi8.cpp6
-rw-r--r--src/mame/drivers/murogmbl.cpp2
-rw-r--r--src/mame/drivers/mustache.cpp28
-rw-r--r--src/mame/drivers/mvme147.cpp10
-rw-r--r--src/mame/drivers/mw8080bw.cpp899
-rw-r--r--src/mame/drivers/myb3k.cpp2
-rw-r--r--src/mame/drivers/myvision.cpp2
-rw-r--r--src/mame/drivers/mz2000.cpp2
-rw-r--r--src/mame/drivers/mz2500.cpp14
-rw-r--r--src/mame/drivers/mz3500.cpp18
-rw-r--r--src/mame/drivers/mz6500.cpp40
-rw-r--r--src/mame/drivers/mzr8105.cpp4
-rw-r--r--src/mame/drivers/namcos23.cpp2
-rw-r--r--src/mame/drivers/nanos.cpp4
-rw-r--r--src/mame/drivers/naomi.cpp111
-rw-r--r--src/mame/drivers/nbmj8688.cpp34
-rw-r--r--src/mame/drivers/nbmj8891.cpp36
-rw-r--r--src/mame/drivers/nbmj8991.cpp12
-rw-r--r--src/mame/drivers/nemesis.cpp39
-rw-r--r--src/mame/drivers/neogeocd.cpp2
-rw-r--r--src/mame/drivers/neoprint.cpp26
-rw-r--r--src/mame/drivers/nes_vt.cpp44
-rw-r--r--src/mame/drivers/next.cpp32
-rw-r--r--src/mame/drivers/nexus3d.cpp2
-rw-r--r--src/mame/drivers/nforcepc.cpp2
-rw-r--r--src/mame/drivers/ngen.cpp14
-rw-r--r--src/mame/drivers/nmk16.cpp16
-rw-r--r--src/mame/drivers/norautp.cpp10
-rw-r--r--src/mame/drivers/notetaker.cpp4
-rw-r--r--src/mame/drivers/novag_savant.cpp8
-rw-r--r--src/mame/drivers/ob68k1a.cpp4
-rw-r--r--src/mame/drivers/okean240.cpp20
-rw-r--r--src/mame/drivers/olyboss.cpp4
-rw-r--r--src/mame/drivers/ondra.cpp4
-rw-r--r--src/mame/drivers/osborne1.cpp2
-rw-r--r--src/mame/drivers/othunder.cpp2
-rw-r--r--src/mame/drivers/overdriv.cpp9
-rw-r--r--src/mame/drivers/p8k.cpp14
-rw-r--r--src/mame/drivers/pacman.cpp18
-rw-r--r--src/mame/drivers/pandoras.cpp2
-rw-r--r--src/mame/drivers/paso1600.cpp2
-rw-r--r--src/mame/drivers/pasopia.cpp263
-rw-r--r--src/mame/drivers/pasopia7.cpp238
-rw-r--r--src/mame/drivers/pastelg.cpp2
-rw-r--r--src/mame/drivers/pb1000.cpp4
-rw-r--r--src/mame/drivers/pc.cpp52
-rw-r--r--src/mame/drivers/pc100.cpp2
-rw-r--r--src/mame/drivers/pc1512.cpp2
-rw-r--r--src/mame/drivers/pc6001.cpp32
-rw-r--r--src/mame/drivers/pc8001.cpp78
-rw-r--r--src/mame/drivers/pc8401a.cpp20
-rw-r--r--src/mame/drivers/pc8801.cpp24
-rw-r--r--src/mame/drivers/pc88va.cpp74
-rw-r--r--src/mame/drivers/pc9801.cpp76
-rw-r--r--src/mame/drivers/pcd.cpp2
-rw-r--r--src/mame/drivers/pcfx.cpp4
-rw-r--r--src/mame/drivers/pcm.cpp6
-rw-r--r--src/mame/drivers/pcxt.cpp2
-rw-r--r--src/mame/drivers/pda600.cpp6
-rw-r--r--src/mame/drivers/pegasus.cpp4
-rw-r--r--src/mame/drivers/pencil2.cpp2
-rw-r--r--src/mame/drivers/pgm2.cpp18
-rw-r--r--src/mame/drivers/photoply.cpp8
-rw-r--r--src/mame/drivers/picno.cpp2
-rw-r--r--src/mame/drivers/pinkiri8.cpp4
-rw-r--r--src/mame/drivers/pipbug.cpp2
-rw-r--r--src/mame/drivers/pirates.cpp8
-rw-r--r--src/mame/drivers/pitnrun.cpp6
-rw-r--r--src/mame/drivers/pktgaldx.cpp2
-rw-r--r--src/mame/drivers/playmark.cpp8
-rw-r--r--src/mame/drivers/poisk1.cpp2
-rw-r--r--src/mame/drivers/pokechmp.cpp2
-rw-r--r--src/mame/drivers/polepos.cpp13
-rw-r--r--src/mame/drivers/pong.cpp19
-rw-r--r--src/mame/drivers/popeye.cpp91
-rw-r--r--src/mame/drivers/popobear.cpp8
-rw-r--r--src/mame/drivers/proconn.cpp2
-rw-r--r--src/mame/drivers/prof80.cpp16
-rw-r--r--src/mame/drivers/progolf.cpp2
-rw-r--r--src/mame/drivers/puckpkmn.cpp6
-rw-r--r--src/mame/drivers/pv1000.cpp2
-rw-r--r--src/mame/drivers/pv2000.cpp4
-rw-r--r--src/mame/drivers/pv9234.cpp14
-rw-r--r--src/mame/drivers/pve500.cpp2
-rw-r--r--src/mame/drivers/px8.cpp6
-rw-r--r--src/mame/drivers/quakeat.cpp10
-rw-r--r--src/mame/drivers/qvt70.cpp28
-rw-r--r--src/mame/drivers/r9751.cpp4
-rw-r--r--src/mame/drivers/radio86.cpp6
-rw-r--r--src/mame/drivers/rainbow.cpp6
-rw-r--r--src/mame/drivers/rbmk.cpp2
-rw-r--r--src/mame/drivers/rc759.cpp16
-rw-r--r--src/mame/drivers/riscpc.cpp18
-rw-r--r--src/mame/drivers/rm380z.cpp24
-rw-r--r--src/mame/drivers/royalmah.cpp4
-rw-r--r--src/mame/drivers/rx78.cpp6
-rw-r--r--src/mame/drivers/sage2.cpp12
-rw-r--r--src/mame/drivers/saitek_mark5.cpp8
-rw-r--r--src/mame/drivers/saitek_ssystem3.cpp4
-rw-r--r--src/mame/drivers/samcoupe.cpp8
-rw-r--r--src/mame/drivers/sapi1.cpp8
-rw-r--r--src/mame/drivers/saturn.cpp8
-rw-r--r--src/mame/drivers/savquest.cpp4
-rw-r--r--src/mame/drivers/scobra.cpp4
-rw-r--r--src/mame/drivers/scopus.cpp2
-rw-r--r--src/mame/drivers/scramble.cpp2
-rw-r--r--src/mame/drivers/scyclone.cpp4
-rw-r--r--src/mame/drivers/seattlecmp.cpp6
-rw-r--r--src/mame/drivers/segae.cpp51
-rw-r--r--src/mame/drivers/segag80v.cpp2
-rw-r--r--src/mame/drivers/segahang.cpp21
-rw-r--r--src/mame/drivers/segaorun.cpp31
-rw-r--r--src/mame/drivers/segas16a.cpp39
-rw-r--r--src/mame/drivers/segas16b.cpp191
-rw-r--r--src/mame/drivers/segas32.cpp102
-rw-r--r--src/mame/drivers/segasp.cpp12
-rw-r--r--src/mame/drivers/segaufo.cpp4
-rw-r--r--src/mame/drivers/segaxbd.cpp33
-rw-r--r--src/mame/drivers/segaybd.cpp2
-rw-r--r--src/mame/drivers/seibuspi.cpp4
-rw-r--r--src/mame/drivers/seicupbl.cpp2
-rw-r--r--src/mame/drivers/selz80.cpp2
-rw-r--r--src/mame/drivers/sengokmj.cpp6
-rw-r--r--src/mame/drivers/senjyo.cpp10
-rw-r--r--src/mame/drivers/seta.cpp24
-rw-r--r--src/mame/drivers/seta2.cpp6
-rw-r--r--src/mame/drivers/sf.cpp4
-rw-r--r--src/mame/drivers/sfcbox.cpp10
-rw-r--r--src/mame/drivers/sigmab52.cpp2
-rw-r--r--src/mame/drivers/sigmab98.cpp6
-rw-r--r--src/mame/drivers/skimaxx.cpp6
-rw-r--r--src/mame/drivers/skyfox.cpp4
-rw-r--r--src/mame/drivers/sm1800.cpp6
-rw-r--r--src/mame/drivers/sms_bootleg.cpp6
-rw-r--r--src/mame/drivers/snes.cpp4
-rw-r--r--src/mame/drivers/snk.cpp4
-rw-r--r--src/mame/drivers/snowbros.cpp9
-rw-r--r--src/mame/drivers/socrates.cpp14
-rw-r--r--src/mame/drivers/sorcerer.cpp4
-rw-r--r--src/mame/drivers/spdodgeb.cpp8
-rw-r--r--src/mame/drivers/speglsht.cpp20
-rw-r--r--src/mame/drivers/spirit76.cpp2
-rw-r--r--src/mame/drivers/spoker.cpp4
-rw-r--r--src/mame/drivers/spool99.cpp2
-rw-r--r--src/mame/drivers/spyhuntertec.cpp4
-rw-r--r--src/mame/drivers/srmp5.cpp8
-rw-r--r--src/mame/drivers/srmp6.cpp10
-rw-r--r--src/mame/drivers/ssingles.cpp12
-rw-r--r--src/mame/drivers/ssozumo.cpp2
-rw-r--r--src/mame/drivers/ssv.cpp46
-rw-r--r--src/mame/drivers/st_mp200.cpp4
-rw-r--r--src/mame/drivers/stactics.cpp2
-rw-r--r--src/mame/drivers/stfight.cpp12
-rw-r--r--src/mame/drivers/stv.cpp4
-rw-r--r--src/mame/drivers/subhuntr.cpp4
-rw-r--r--src/mame/drivers/subs.cpp2
-rw-r--r--src/mame/drivers/subsino.cpp24
-rw-r--r--src/mame/drivers/summit.cpp6
-rw-r--r--src/mame/drivers/sun2.cpp10
-rw-r--r--src/mame/drivers/suna8.cpp2
-rw-r--r--src/mame/drivers/super6.cpp4
-rw-r--r--src/mame/drivers/supercrd.cpp6
-rw-r--r--src/mame/drivers/superqix.cpp4
-rw-r--r--src/mame/drivers/supracan.cpp698
-rw-r--r--src/mame/drivers/sv8000.cpp2
-rw-r--r--src/mame/drivers/svision.cpp2
-rw-r--r--src/mame/drivers/swtpc8212.cpp124
-rw-r--r--src/mame/drivers/symbolics.cpp10
-rw-r--r--src/mame/drivers/sys9002.cpp4
-rw-r--r--src/mame/drivers/taito_f2.cpp16
-rw-r--r--src/mame/drivers/taito_l.cpp2
-rw-r--r--src/mame/drivers/taitowlf.cpp2
-rw-r--r--src/mame/drivers/tandy2k.cpp6
-rw-r--r--src/mame/drivers/tankbust.cpp2
-rw-r--r--src/mame/drivers/targeth.cpp4
-rw-r--r--src/mame/drivers/tatsumi.cpp4
-rw-r--r--src/mame/drivers/taxidriv.cpp2
-rw-r--r--src/mame/drivers/tbowl.cpp14
-rw-r--r--src/mame/drivers/tdv2324.cpp22
-rw-r--r--src/mame/drivers/tec1.cpp4
-rw-r--r--src/mame/drivers/tecmosys.cpp2
-rw-r--r--src/mame/drivers/tek405x.cpp10
-rw-r--r--src/mame/drivers/terminal.cpp11
-rw-r--r--src/mame/drivers/tg100.cpp2
-rw-r--r--src/mame/drivers/thomson.cpp165
-rw-r--r--src/mame/drivers/thoop2.cpp4
-rw-r--r--src/mame/drivers/ti85.cpp2
-rw-r--r--src/mame/drivers/ti990_10.cpp8
-rw-r--r--src/mame/drivers/tigeroad.cpp2
-rw-r--r--src/mame/drivers/tim011.cpp6
-rw-r--r--src/mame/drivers/tk635.cpp212
-rw-r--r--src/mame/drivers/tk80.cpp2
-rw-r--r--src/mame/drivers/tk80bs.cpp2
-rw-r--r--src/mame/drivers/tmc600.cpp2
-rw-r--r--src/mame/drivers/tmmjprd.cpp10
-rw-r--r--src/mame/drivers/tmnt.cpp156
-rw-r--r--src/mame/drivers/tp84.cpp2
-rw-r--r--src/mame/drivers/tr175.cpp2
-rw-r--r--src/mame/drivers/trackfld.cpp6
-rw-r--r--src/mame/drivers/triforce.cpp2
-rw-r--r--src/mame/drivers/trs80dt1.cpp2
-rw-r--r--src/mame/drivers/trs80m2.cpp8
-rw-r--r--src/mame/drivers/ts802.cpp4
-rw-r--r--src/mame/drivers/ts816.cpp2
-rw-r--r--src/mame/drivers/tugboat.cpp2
-rw-r--r--src/mame/drivers/tumbleb.cpp4
-rw-r--r--src/mame/drivers/twin16.cpp6
-rw-r--r--src/mame/drivers/twinkle.cpp1
-rw-r--r--src/mame/drivers/tx1.cpp109
-rw-r--r--src/mame/drivers/uchroma68.cpp497
-rw-r--r--src/mame/drivers/umipoker.cpp4
-rw-r--r--src/mame/drivers/undrfire.cpp4
-rw-r--r--src/mame/drivers/vboy.cpp12
-rw-r--r--src/mame/drivers/vcombat.cpp76
-rw-r--r--src/mame/drivers/vegas.cpp4
-rw-r--r--src/mame/drivers/vicdual.cpp2
-rw-r--r--src/mame/drivers/vigilant.cpp2
-rw-r--r--src/mame/drivers/vii.cpp105
-rw-r--r--src/mame/drivers/viper.cpp4
-rw-r--r--src/mame/drivers/vixen.cpp2
-rw-r--r--src/mame/drivers/vk100.cpp20
-rw-r--r--src/mame/drivers/voyager.cpp36
-rw-r--r--src/mame/drivers/vt100.cpp2
-rw-r--r--src/mame/drivers/wallc.cpp14
-rw-r--r--src/mame/drivers/wangpc.cpp2
-rw-r--r--src/mame/drivers/wardner.cpp120
-rw-r--r--src/mame/drivers/warriorb.cpp4
-rw-r--r--src/mame/drivers/wecleman.cpp24
-rw-r--r--src/mame/drivers/wico.cpp24
-rw-r--r--src/mame/drivers/wink.cpp2
-rw-r--r--src/mame/drivers/wiz.cpp2
-rw-r--r--src/mame/drivers/x1.cpp4
-rw-r--r--src/mame/drivers/x68k.cpp6
-rw-r--r--src/mame/drivers/xavix.cpp12
-rw-r--r--src/mame/drivers/xexex.cpp2
-rw-r--r--src/mame/drivers/z100.cpp38
-rw-r--r--src/mame/drivers/zn.cpp2
-rw-r--r--src/mame/drivers/zsbc3.cpp2
-rw-r--r--src/mame/etc/korgm1.cpp2
-rw-r--r--src/mame/includes/8080bw.h18
-rw-r--r--src/mame/includes/cave.h28
-rw-r--r--src/mame/includes/cischeat.h4
-rw-r--r--src/mame/includes/cps1.h1
-rw-r--r--src/mame/includes/dday.h2
-rw-r--r--src/mame/includes/goldstar.h3
-rw-r--r--src/mame/includes/hh_sm510.h40
-rw-r--r--src/mame/includes/lwings.h9
-rw-r--r--src/mame/includes/mcatadv.h27
-rw-r--r--src/mame/includes/megasys1.h6
-rw-r--r--src/mame/includes/model2.h1
-rw-r--r--src/mame/includes/mustache.h1
-rw-r--r--src/mame/includes/mw8080bw.h403
-rw-r--r--src/mame/includes/nemesis.h6
-rw-r--r--src/mame/includes/pasopia.h137
-rw-r--r--src/mame/includes/polepos.h5
-rw-r--r--src/mame/includes/qix.h6
-rw-r--r--src/mame/includes/segahang.h8
-rw-r--r--src/mame/includes/segaorun.h4
-rw-r--r--src/mame/includes/segas16a.h2
-rw-r--r--src/mame/includes/segas16b.h2
-rw-r--r--src/mame/includes/segas32.h71
-rw-r--r--src/mame/includes/segaxbd.h3
-rw-r--r--src/mame/includes/thomson.h2
-rw-r--r--src/mame/includes/tmnt.h93
-rw-r--r--src/mame/includes/wecleman.h2
-rw-r--r--src/mame/includes/xavix.h1
-rw-r--r--src/mame/layout/cashcatnz.lay2
-rw-r--r--src/mame/layout/seawolf.lay157
-rw-r--r--src/mame/layout/spcenctr.lay50
-rw-r--r--src/mame/machine/6883sam.cpp2
-rw-r--r--src/mame/machine/dc-ctrl.h9
-rw-r--r--src/mame/machine/decopincpu.cpp4
-rw-r--r--src/mame/machine/eispc_kb.cpp412
-rw-r--r--src/mame/machine/eispc_kb.h43
-rw-r--r--src/mame/machine/gaelco2.cpp4
-rw-r--r--src/mame/machine/hec2hrp.cpp8
-rw-r--r--src/mame/machine/hng64_net.cpp22
-rw-r--r--src/mame/machine/jvs13551.h8
-rw-r--r--src/mame/machine/mc8123.cpp9
-rw-r--r--src/mame/machine/megacd.cpp8
-rw-r--r--src/mame/machine/megadriv.cpp2
-rw-r--r--src/mame/machine/mie.h9
-rw-r--r--src/mame/machine/mpu4.cpp2
-rw-r--r--src/mame/machine/mw8080bw.cpp2
-rw-r--r--src/mame/machine/namco_c139.cpp6
-rw-r--r--src/mame/machine/nl_breakout.cpp2857
-rw-r--r--src/mame/machine/nl_pongdoubles.cpp (renamed from src/mame/machine/nl_pongd.cpp)0
-rw-r--r--src/mame/machine/nl_pongdoubles.h (renamed from src/mame/machine/nl_pongd.h)0
-rw-r--r--src/mame/machine/nl_pongf.cpp (renamed from src/mame/machine/nl_pong.cpp)10
-rw-r--r--src/mame/machine/nl_pongf.h (renamed from src/mame/machine/nl_pong.h)2
-rw-r--r--src/mame/machine/nl_rebound.cpp27
-rw-r--r--src/mame/machine/nl_rebound.h2
-rw-r--r--src/mame/machine/nmk004.cpp2
-rw-r--r--src/mame/machine/qix.cpp19
-rw-r--r--src/mame/machine/segacrp2_device.cpp545
-rw-r--r--src/mame/machine/segacrp2_device.h3
-rw-r--r--src/mame/machine/snes.cpp2
-rw-r--r--src/mame/machine/sorcerer.cpp2
-rw-r--r--src/mame/machine/taitocchip.cpp2
-rw-r--r--src/mame/machine/thomson.cpp98
-rw-r--r--src/mame/machine/wangpckb.cpp2
-rw-r--r--src/mame/machine/wrally.cpp4
-rw-r--r--src/mame/mame.lst126
-rw-r--r--src/mame/mess.flt4
-rw-r--r--src/mame/video/cave.cpp275
-rw-r--r--src/mame/video/cischeat.cpp4
-rw-r--r--src/mame/video/cps1.cpp5
-rw-r--r--src/mame/video/legionna.cpp8
-rw-r--r--src/mame/video/mcatadv.cpp126
-rw-r--r--src/mame/video/mw8080bw.cpp119
-rw-r--r--src/mame/video/pc8401a.cpp4
-rw-r--r--src/mame/video/qix.cpp2
-rw-r--r--src/mame/video/segas16b.cpp5
-rw-r--r--src/mame/video/segas32.cpp22
-rw-r--r--src/mame/video/sgi_ge5.cpp31
-rw-r--r--src/mame/video/sgi_ge5.h8
-rw-r--r--src/mame/video/sgi_gr1.cpp149
-rw-r--r--src/mame/video/sgi_gr1.h35
-rw-r--r--src/mame/video/sgi_re2.cpp13
-rw-r--r--src/mame/video/sgi_xmap2.cpp4
-rw-r--r--src/mame/video/tmap038.cpp266
-rw-r--r--src/mame/video/tmap038.h106
-rw-r--r--src/mame/video/tmnt.cpp78
-rw-r--r--src/osd/modules/debugger/win/consolewininfo.cpp6
-rw-r--r--src/osd/modules/file/posixptty.cpp7
-rw-r--r--src/osd/modules/input/input_x11.cpp24
-rw-r--r--src/osd/modules/lib/osdlib_unix.cpp6
-rw-r--r--src/osd/modules/render/bgfx/chain.cpp32
-rw-r--r--src/osd/modules/render/bgfx/chain.h6
-rw-r--r--src/osd/modules/render/bgfx/chainentry.h4
-rw-r--r--src/osd/modules/render/bgfx/chainentryreader.cpp2
-rw-r--r--src/osd/modules/render/bgfx/chainmanager.cpp89
-rw-r--r--src/osd/modules/render/bgfx/chainmanager.h5
-rw-r--r--src/osd/modules/render/bgfx/effect.cpp8
-rw-r--r--src/osd/modules/render/bgfx/entryuniform.h4
-rw-r--r--src/osd/modules/render/bgfx/inputpair.cpp14
-rw-r--r--src/osd/modules/render/bgfx/shaders/chains/hlsl/fs_chroma.sc9
-rw-r--r--src/osd/modules/render/bgfx/shaders/chains/misc/fs_blit_palette16.sc19
-rw-r--r--src/osd/modules/render/bgfx/shaders/chains/misc/fs_blit_rgb32.sc14
-rw-r--r--src/osd/modules/render/bgfx/shaders/chains/misc/fs_blit_yuy16.sc37
-rw-r--r--src/osd/modules/render/bgfx/shaders/makefile27
-rw-r--r--src/osd/modules/render/bgfx/shaders/shader.mk8
-rw-r--r--src/osd/modules/render/bgfx/suppressorreader.cpp1
-rw-r--r--src/osd/modules/render/bgfx/texture.cpp10
-rw-r--r--src/osd/modules/render/bgfx/texture.h4
-rw-r--r--src/osd/modules/render/bgfx/texturemanager.cpp20
-rw-r--r--src/osd/modules/render/bgfx/uniform.cpp6
-rw-r--r--src/osd/modules/render/bgfx/uniformreader.cpp2
-rw-r--r--src/osd/modules/render/bgfx/vertex.h2
-rw-r--r--src/osd/modules/render/bgfxutil.cpp62
-rw-r--r--src/osd/modules/render/bgfxutil.h2
-rw-r--r--src/osd/modules/render/drawbgfx.cpp17
-rw-r--r--src/osd/osdcore.h495
842 files changed, 23014 insertions, 15746 deletions
diff --git a/src/devices/bus/a2bus/a2bus.h b/src/devices/bus/a2bus/a2bus.h
index 502ff72e854..3e63104f86c 100644
--- a/src/devices/bus/a2bus/a2bus.h
+++ b/src/devices/bus/a2bus/a2bus.h
@@ -140,12 +140,12 @@ public:
// construction/destruction
virtual ~device_a2bus_card_interface();
- virtual uint8_t read_c0nx(uint8_t offset) { m_device.logerror("a2bus: unhandled read at C0n%x\n", offset); return 0; } // C0nX - /DEVSEL
- virtual void write_c0nx(uint8_t offset, uint8_t data) { m_device.logerror("a2bus: unhandled write %02x to C0n%x\n", data, offset); }
+ virtual uint8_t read_c0nx(uint8_t offset) { device().logerror("a2bus: unhandled read at C0n%x\n", offset); return 0; } // C0nX - /DEVSEL
+ virtual void write_c0nx(uint8_t offset, uint8_t data) { device().logerror("a2bus: unhandled write %02x to C0n%x\n", data, offset); }
virtual uint8_t read_cnxx(uint8_t offset) { return 0; } // CnXX - /IOSEL
- virtual void write_cnxx(uint8_t offset, uint8_t data) { m_device.logerror("a2bus: unhandled write %02x to Cn%02x\n", data, offset); }
+ virtual void write_cnxx(uint8_t offset, uint8_t data) { device().logerror("a2bus: unhandled write %02x to Cn%02x\n", data, offset); }
virtual uint8_t read_c800(uint16_t offset) { return 0; } // C800 - /IOSTB
- virtual void write_c800(uint16_t offset, uint8_t data) {m_device.logerror("a2bus: unhandled write %02x to %04x\n", data, offset + 0xc800); }
+ virtual void write_c800(uint16_t offset, uint8_t data) {device().logerror("a2bus: unhandled write %02x to %04x\n", data, offset + 0xc800); }
virtual bool take_c800() { return true; } // override and return false if your card doesn't take over the c800 space
virtual uint8_t read_inh_rom(uint16_t offset) { return 0; }
virtual void write_inh_rom(uint16_t offset, uint8_t data) { }
diff --git a/src/devices/bus/acorn/system/vib.cpp b/src/devices/bus/acorn/system/vib.cpp
index 48e08bd4088..a204cbb038c 100644
--- a/src/devices/bus/acorn/system/vib.cpp
+++ b/src/devices/bus/acorn/system/vib.cpp
@@ -21,42 +21,6 @@
DEFINE_DEVICE_TYPE(ACORN_VIB, acorn_vib_device, "acorn_vib", "Acorn Versatile Interface Board")
-
-//-------------------------------------------------
-// device_add_mconfig - add device configuration
-//-------------------------------------------------
-
-void acorn_vib_device::device_add_mconfig(machine_config &config)
-{
- INPUT_MERGER_ANY_HIGH(config, m_irqs).output_handler().set(FUNC(acorn_vib_device::irq_w));
-
- VIA6522(config, m_via6522, XTAL(1'000'000));
- m_via6522->writepa_handler().set("cent_data_out", FUNC(output_latch_device::bus_w));
- m_via6522->ca2_handler().set(m_centronics, FUNC(centronics_device::write_strobe));
- m_via6522->irq_handler().set(m_irqs, FUNC(input_merger_device::in_w<0>));
-
- CENTRONICS(config, m_centronics, centronics_devices, "printer");
- m_centronics->ack_handler().set(m_via6522, FUNC(via6522_device::write_ca1));
- m_centronics->busy_handler().set(m_via6522, FUNC(via6522_device::write_pa7));
- output_latch_device &cent_data_out(OUTPUT_LATCH(config, "cent_data_out"));
- m_centronics->set_output_latch(cent_data_out);
-
- I8255(config, m_ppi8255, 0);
-
- ACIA6850(config, m_acia, 0);
- m_acia->txd_handler().set(m_rs232, FUNC(rs232_port_device::write_txd));
- m_acia->rts_handler().set(m_rs232, FUNC(rs232_port_device::write_rts));
- m_acia->irq_handler().set(m_irqs, FUNC(input_merger_device::in_w<1>));
-
- RS232_PORT(config, m_rs232, default_rs232_devices, nullptr);
- m_rs232->rxd_handler().set(m_acia, FUNC(acia6850_device::write_rxd));
- m_rs232->cts_handler().set(m_acia, FUNC(acia6850_device::write_cts));
- m_rs232->dcd_handler().set(m_acia, FUNC(acia6850_device::write_dcd));
-
- CLOCK(config, m_acia_clock, 1.8432_MHz_XTAL);
- m_acia_clock->signal_handler().set(FUNC(acorn_vib_device::write_acia_clock));
-}
-
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
@@ -71,20 +35,72 @@ acorn_vib_device::acorn_vib_device(const machine_config &mconfig, const char *ta
, m_ppi8255(*this, "ppi8255")
, m_via6522(*this, "via6522")
, m_acia(*this, "acia6850")
- , m_acia_clock(*this, "acia_clock")
+ , m_mc14411(*this, "mc14411")
, m_centronics(*this, "centronics")
, m_rs232(*this, "rs232")
, m_irqs(*this, "irqs")
+ , m_txc(*this, "TXC")
+ , m_rxc(*this, "RXC")
{
}
+static INPUT_PORTS_START(acorn_vib)
+ PORT_START("TXC")
+ PORT_CONFNAME(0x0f, mc14411_device::TIMER_F1, "Transmit Rate")
+ PORT_CONFSETTING(mc14411_device::TIMER_F1, "9600")
+ PORT_CONFSETTING(mc14411_device::TIMER_F2, "7200")
+ PORT_CONFSETTING(mc14411_device::TIMER_F3, "4800")
+ PORT_CONFSETTING(mc14411_device::TIMER_F4, "3600")
+ PORT_CONFSETTING(mc14411_device::TIMER_F5, "2400")
+ PORT_CONFSETTING(mc14411_device::TIMER_F6, "1800")
+ PORT_CONFSETTING(mc14411_device::TIMER_F7, "1200")
+ PORT_CONFSETTING(mc14411_device::TIMER_F8, "600")
+ PORT_CONFSETTING(mc14411_device::TIMER_F9, "300")
+ PORT_CONFSETTING(mc14411_device::TIMER_F10, "200")
+ PORT_CONFSETTING(mc14411_device::TIMER_F11, "150")
+ PORT_CONFSETTING(mc14411_device::TIMER_F12, "134.5")
+ PORT_CONFSETTING(mc14411_device::TIMER_F13, "110")
+ PORT_CONFSETTING(mc14411_device::TIMER_F14, "75")
+
+ PORT_START("RXC")
+ PORT_CONFNAME(0x0f, mc14411_device::TIMER_F1, "Receive Rate")
+ PORT_CONFSETTING(mc14411_device::TIMER_F1, "9600")
+ PORT_CONFSETTING(mc14411_device::TIMER_F2, "7200")
+ PORT_CONFSETTING(mc14411_device::TIMER_F3, "4800")
+ PORT_CONFSETTING(mc14411_device::TIMER_F4, "3600")
+ PORT_CONFSETTING(mc14411_device::TIMER_F5, "2400")
+ PORT_CONFSETTING(mc14411_device::TIMER_F6, "1800")
+ PORT_CONFSETTING(mc14411_device::TIMER_F7, "1200")
+ PORT_CONFSETTING(mc14411_device::TIMER_F8, "600")
+ PORT_CONFSETTING(mc14411_device::TIMER_F9, "300")
+ PORT_CONFSETTING(mc14411_device::TIMER_F10, "200")
+ PORT_CONFSETTING(mc14411_device::TIMER_F11, "150")
+ PORT_CONFSETTING(mc14411_device::TIMER_F12, "134.5")
+ PORT_CONFSETTING(mc14411_device::TIMER_F13, "110")
+ PORT_CONFSETTING(mc14411_device::TIMER_F14, "75")
+INPUT_PORTS_END
+
+//-------------------------------------------------
+// input_ports - return a pointer to the implicit
+// input ports description for this device
+//-------------------------------------------------
+
+ioport_constructor acorn_vib_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME(acorn_vib);
+}
+
+
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void acorn_vib_device::device_start()
{
+ m_acia->write_dcd(0);
+ m_mc14411->rsa_w(1);
+ m_mc14411->rsb_w(1);
}
//-------------------------------------------------
@@ -99,6 +115,10 @@ void acorn_vib_device::device_reset()
space.install_device(0x0c10, 0x0c1f, *m_via6522, &via6522_device::map);
space.install_readwrite_handler(0x0c20, 0x0c21, 0, 0x1e, 0, read8sm_delegate(FUNC(acia6850_device::read), m_acia.target()), write8sm_delegate(FUNC(acia6850_device::write), m_acia.target()));
space.install_readwrite_handler(0x0c40, 0x0c43, 0, 0x1c, 0, read8sm_delegate(FUNC(i8255_device::read), m_ppi8255.target()), write8sm_delegate(FUNC(i8255_device::write), m_ppi8255.target()));
+
+ m_mc14411->timer_disable_all();
+ m_mc14411->timer_enable(mc14411_device::timer_id(m_txc->read()), true);
+ m_mc14411->timer_enable(mc14411_device::timer_id(m_rxc->read()), true);
}
@@ -106,13 +126,64 @@ void acorn_vib_device::device_reset()
// IMPLEMENTATION
//**************************************************************************
+template<mc14411_device::timer_id T>
WRITE_LINE_MEMBER(acorn_vib_device::write_acia_clock)
{
- m_acia->write_txc(state);
- m_acia->write_rxc(state);
+ if (T == m_txc->read())
+ m_acia->write_txc(state);
+ if (T == m_rxc->read())
+ m_acia->write_rxc(state);
}
WRITE_LINE_MEMBER(acorn_vib_device::irq_w)
{
m_bus->irq_w(state);
}
+
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void acorn_vib_device::device_add_mconfig(machine_config &config)
+{
+ INPUT_MERGER_ANY_HIGH(config, m_irqs).output_handler().set(FUNC(acorn_vib_device::irq_w));
+
+ VIA6522(config, m_via6522, 1'000'000); // TODO: derive clock from bus (pin 29 = ϕ2)
+ m_via6522->writepa_handler().set("cent_data_out", FUNC(output_latch_device::bus_w));
+ m_via6522->ca2_handler().set(m_centronics, FUNC(centronics_device::write_strobe));
+ m_via6522->irq_handler().set(m_irqs, FUNC(input_merger_device::in_w<0>));
+
+ CENTRONICS(config, m_centronics, centronics_devices, "printer");
+ m_centronics->ack_handler().set(m_via6522, FUNC(via6522_device::write_ca1));
+ m_centronics->busy_handler().set(m_via6522, FUNC(via6522_device::write_pa7));
+ output_latch_device &cent_data_out(OUTPUT_LATCH(config, "cent_data_out"));
+ m_centronics->set_output_latch(cent_data_out);
+
+ I8255(config, m_ppi8255);
+
+ ACIA6850(config, m_acia);
+ m_acia->txd_handler().set(m_rs232, FUNC(rs232_port_device::write_txd));
+ m_acia->rts_handler().set(m_rs232, FUNC(rs232_port_device::write_rts));
+ m_acia->irq_handler().set(m_irqs, FUNC(input_merger_device::in_w<1>));
+
+ RS232_PORT(config, m_rs232, default_rs232_devices, nullptr);
+ m_rs232->rxd_handler().set(m_acia, FUNC(acia6850_device::write_rxd));
+ m_rs232->cts_handler().set(m_acia, FUNC(acia6850_device::write_cts));
+
+ MC14411(config, m_mc14411, 1.8432_MHz_XTAL);
+ m_mc14411->out_f<1>().set(FUNC(acorn_vib_device::write_acia_clock<mc14411_device::TIMER_F1>));
+ m_mc14411->out_f<2>().set(FUNC(acorn_vib_device::write_acia_clock<mc14411_device::TIMER_F2>));
+ m_mc14411->out_f<3>().set(FUNC(acorn_vib_device::write_acia_clock<mc14411_device::TIMER_F3>));
+ m_mc14411->out_f<4>().set(FUNC(acorn_vib_device::write_acia_clock<mc14411_device::TIMER_F4>));
+ m_mc14411->out_f<5>().set(FUNC(acorn_vib_device::write_acia_clock<mc14411_device::TIMER_F5>));
+ m_mc14411->out_f<6>().set(FUNC(acorn_vib_device::write_acia_clock<mc14411_device::TIMER_F6>));
+ m_mc14411->out_f<7>().set(FUNC(acorn_vib_device::write_acia_clock<mc14411_device::TIMER_F7>));
+ m_mc14411->out_f<8>().set(FUNC(acorn_vib_device::write_acia_clock<mc14411_device::TIMER_F8>));
+ m_mc14411->out_f<9>().set(FUNC(acorn_vib_device::write_acia_clock<mc14411_device::TIMER_F9>));
+ m_mc14411->out_f<10>().set(FUNC(acorn_vib_device::write_acia_clock<mc14411_device::TIMER_F10>));
+ m_mc14411->out_f<11>().set(FUNC(acorn_vib_device::write_acia_clock<mc14411_device::TIMER_F11>));
+ m_mc14411->out_f<12>().set(FUNC(acorn_vib_device::write_acia_clock<mc14411_device::TIMER_F12>));
+ m_mc14411->out_f<13>().set(FUNC(acorn_vib_device::write_acia_clock<mc14411_device::TIMER_F13>));
+ m_mc14411->out_f<14>().set(FUNC(acorn_vib_device::write_acia_clock<mc14411_device::TIMER_F14>));
+}
diff --git a/src/devices/bus/acorn/system/vib.h b/src/devices/bus/acorn/system/vib.h
index d4d710a3256..bd4d886e281 100644
--- a/src/devices/bus/acorn/system/vib.h
+++ b/src/devices/bus/acorn/system/vib.h
@@ -20,7 +20,7 @@
#include "machine/i8255.h"
#include "machine/6522via.h"
#include "machine/6850acia.h"
-#include "machine/clock.h"
+#include "machine/mc14411.h"
#include "machine/input_merger.h"
//**************************************************************************
@@ -41,19 +41,22 @@ protected:
virtual void device_reset() override;
// optional information overrides
+ virtual ioport_constructor device_input_ports() const override;
virtual void device_add_mconfig(machine_config &config) override;
private:
- DECLARE_WRITE_LINE_MEMBER(write_acia_clock);
+ template<mc14411_device::timer_id T> DECLARE_WRITE_LINE_MEMBER(write_acia_clock);
DECLARE_WRITE_LINE_MEMBER(irq_w);
required_device<i8255_device> m_ppi8255;
required_device<via6522_device> m_via6522;
required_device<acia6850_device> m_acia;
- required_device<clock_device> m_acia_clock;
+ required_device<mc14411_device> m_mc14411;
required_device<centronics_device> m_centronics;
required_device<rs232_port_device> m_rs232;
required_device<input_merger_device> m_irqs;
+ required_ioport m_txc;
+ required_ioport m_rxc;
};
diff --git a/src/devices/bus/amiga/keyboard/a1200.cpp b/src/devices/bus/amiga/keyboard/a1200.cpp
index 5534e07c15d..9067d932a4b 100644
--- a/src/devices/bus/amiga/keyboard/a1200.cpp
+++ b/src/devices/bus/amiga/keyboard/a1200.cpp
@@ -47,6 +47,8 @@
#include "a1200.h"
#include "matrix.h"
+#include "cpu/m6805/m68hc05.h"
+
//#define VERBOSE 1
#include "logmacro.h"
@@ -171,13 +173,13 @@ WRITE_LINE_MEMBER(a1200_kbd_device::mpu_tcmp)
void a1200_kbd_device::device_add_mconfig(machine_config &config)
{
- M68HC705C8A(config, m_mpu, XTAL(3'000'000));
- m_mpu->port_r<1>().set(FUNC(a1200_kbd_device::mpu_portb_r));
- m_mpu->port_r<3>().set_ioport("MOD");
- m_mpu->port_w<0>().set(FUNC(a1200_kbd_device::mpu_porta_w));
- m_mpu->port_w<1>().set(FUNC(a1200_kbd_device::mpu_portb_w));
- m_mpu->port_w<2>().set(FUNC(a1200_kbd_device::mpu_portc_w));
- m_mpu->tcmp().set(FUNC(a1200_kbd_device::mpu_tcmp));
+ m68hc705c8a_device &mpu(M68HC705C8A(config, m_mpu, XTAL(3'000'000)));
+ mpu.portb_r().set(FUNC(a1200_kbd_device::mpu_portb_r));
+ mpu.portd_r().set_ioport("MOD");
+ mpu.porta_w().set(FUNC(a1200_kbd_device::mpu_porta_w));
+ mpu.portb_w().set(FUNC(a1200_kbd_device::mpu_portb_w));
+ mpu.portc_w().set(FUNC(a1200_kbd_device::mpu_portc_w));
+ mpu.tcmp().set(FUNC(a1200_kbd_device::mpu_tcmp));
}
tiny_rom_entry const *a1200_kbd_device::device_rom_region() const
diff --git a/src/devices/bus/amiga/keyboard/a1200.h b/src/devices/bus/amiga/keyboard/a1200.h
index ece885835ae..70df7caa0ae 100644
--- a/src/devices/bus/amiga/keyboard/a1200.h
+++ b/src/devices/bus/amiga/keyboard/a1200.h
@@ -11,7 +11,6 @@
#pragma once
-#include "cpu/m6805/m68hc05.h"
#include "keyboard.h"
@@ -49,7 +48,7 @@ protected:
private:
required_ioport_array<15> m_rows;
- required_device<m68hc705c8a_device> m_mpu;
+ required_device<cpu_device> m_mpu;
u16 m_row_drive;
bool m_host_kdat, m_mpu_kdat;
diff --git a/src/devices/bus/bbc/rom/slot.h b/src/devices/bus/bbc/rom/slot.h
index 40818d9e619..bb60c90d600 100644
--- a/src/devices/bus/bbc/rom/slot.h
+++ b/src/devices/bus/bbc/rom/slot.h
@@ -117,7 +117,7 @@ public:
// reading and writing
virtual uint8_t read(offs_t offset) { return 0xff; }
- virtual void write(offs_t offset, uint8_t data) { m_device.logerror("unhandled ROM write to %04X = %02X\n", offset | 0x8000, data); }
+ virtual void write(offs_t offset, uint8_t data) { device().logerror("unhandled ROM write to %04X = %02X\n", offset | 0x8000, data); }
void rom_alloc(uint32_t size, const char *tag);
void ram_alloc(uint32_t size);
diff --git a/src/devices/bus/bml3/bml3mp1802.cpp b/src/devices/bus/bml3/bml3mp1802.cpp
index 85668d01f39..18fd6702871 100644
--- a/src/devices/bus/bml3/bml3mp1802.cpp
+++ b/src/devices/bus/bml3/bml3mp1802.cpp
@@ -56,7 +56,9 @@ ROM_END
void bml3bus_mp1802_device::device_add_mconfig(machine_config &config)
{
- MB8866(config, m_fdc, 1_MHz_XTAL);
+ constexpr auto CLK16M = 32.256_MHz_XTAL / 2;
+
+ MB8866(config, m_fdc, CLK16M / 16); // 16MCLK divided by IC628 (HD74LS93P)
m_fdc->intrq_wr_callback().set(FUNC(bml3bus_mp1802_device::bml3_wd17xx_intrq_w));
FLOPPY_CONNECTOR(config, m_floppy0, mp1802_floppies, "dd", floppy_image_device::default_floppy_formats);
diff --git a/src/devices/bus/cbmiec/c1541.cpp b/src/devices/bus/cbmiec/c1541.cpp
index 925014ac803..af5d0e7f213 100644
--- a/src/devices/bus/cbmiec/c1541.cpp
+++ b/src/devices/bus/cbmiec/c1541.cpp
@@ -698,14 +698,14 @@ void c1541_base_t::c1541pd_mem(address_map &map)
void c1541_prologic_dos_classic_t::c1541pdc_mem(address_map &map)
{
map(0x0000, 0xffff).rw(FUNC(c1541_prologic_dos_classic_t::read), FUNC(c1541_prologic_dos_classic_t::write));
-/* AM_RANGE(0x0000, 0x07ff) AM_MIRROR(0x6000) AM_RAM AM_SHARE("share1")
- AM_RANGE(0x1800, 0x180f) AM_MIRROR(0x63f0) AM_DEVREADWRITE(M6522_0_TAG, via6522_device, read, write)
- AM_RANGE(0x1c00, 0x1c0f) AM_MIRROR(0x63f0) AM_DEVREADWRITE(M6522_1_TAG, via6522_device, read, write)
- AM_RANGE(0x8000, 0x87ff) AM_RAM AM_SHARE("share1")
- AM_RANGE(0x8800, 0x9fff) AM_RAM
- AM_RANGE(0xa000, 0xb7ff) AM_ROM AM_REGION(M6502_TAG, 0x0000)
- AM_RANGE(0xb800, 0xb80f) AM_READWRITE(pia_r, pia_w)
- AM_RANGE(0xf000, 0xffff) AM_ROM AM_REGION(M6502_TAG, 0x2000)*/
+/* map(0x0000, 0x07ff).mirror(0x6000).ram().share("share1");
+ map(0x1800, 0x180f).mirror(0x63f0).rw(M6522_0_TAG, FUNC(via6522_device::read), FUNC(via6522_device::write));
+ map(0x1c00, 0x1c0f).mirror(0x63f0).rw(M6522_1_TAG, FUNC(via6522_device::read), FUNC(via6522_device::write));
+ map(0x8000, 0x87ff).ram().share("share1");
+ map(0x8800, 0x9fff).ram();
+ map(0xa000, 0xb7ff).rom().region(M6502_TAG, 0x0000);
+ map(0xb800, 0xb80f).rw(FUNC(c1541_prologic_dos_classic_t::pia_r), FUNC(c1541_prologic_dos_classic_t::pia_w));
+ map(0xf000, 0xffff).rom().region(M6502_TAG, 0x2000);*/
}
diff --git a/src/devices/bus/centronics/nec_p72.cpp b/src/devices/bus/centronics/nec_p72.cpp
index c3a9ddd2ab2..fe03bb93d34 100644
--- a/src/devices/bus/centronics/nec_p72.cpp
+++ b/src/devices/bus/centronics/nec_p72.cpp
@@ -39,7 +39,7 @@ const tiny_rom_entry *nec_p72_device::device_rom_region() const
void nec_p72_device::p72_mem(address_map &map)
{
map(0x000000, 0x0fffff).rom(); /* 1Mbyte firmware */
- //AM_RANGE(0x100000, 0x1fffff) AM_RAM /* 1Mbyte external RAM */ /* TODO might be 2x1Mbit */
+ //map(0x100000, 0x1fffff).ram(); /* 1Mbyte external RAM */ /* TODO might be 2x1Mbit */
// [RH] 29 August 2016: Commented out because the NEC V33 only has 20 address lines, and
// the V40 has more, but we don't have an NEC V40 implemented yet.
}
diff --git a/src/devices/bus/ecbbus/grip.cpp b/src/devices/bus/ecbbus/grip.cpp
index 6312a32547f..f7abc75aac5 100644
--- a/src/devices/bus/ecbbus/grip.cpp
+++ b/src/devices/bus/ecbbus/grip.cpp
@@ -140,12 +140,12 @@ void ecb_grip21_device::grip_io(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x00).rw(FUNC(ecb_grip21_device::cxstb_r), FUNC(ecb_grip21_device::cxstb_w));
-// AM_RANGE(0x10, 0x10) AM_WRITE(ccon_w)
+// map(0x10, 0x10).w(FUNC(ecb_grip21_device::ccon_w));
map(0x11, 0x11).w(FUNC(ecb_grip21_device::vol0_w));
-// AM_RANGE(0x12, 0x12) AM_WRITE(rts_w)
+// map(0x12, 0x12).w(FUNC(ecb_grip21_device::rts_w));
map(0x13, 0x13).w(FUNC(ecb_grip21_device::page_w));
-// AM_RANGE(0x14, 0x14) AM_WRITE(cc1_w)
-// AM_RANGE(0x15, 0x15) AM_WRITE(cc2_w)
+// map(0x14, 0x14).w(FUNC(ecb_grip21_device::cc1_w));
+// map(0x15, 0x15).w(FUNC(ecb_grip21_device::cc2_w));
map(0x16, 0x16).w(FUNC(ecb_grip21_device::flash_w));
map(0x17, 0x17).w(FUNC(ecb_grip21_device::vol1_w));
map(0x20, 0x2f).rw(m_sti, FUNC(z80sti_device::read), FUNC(z80sti_device::write));
@@ -156,14 +156,14 @@ void ecb_grip21_device::grip_io(address_map &map)
map(0x53, 0x53).r(MC6845_TAG, FUNC(mc6845_device::register_r));
map(0x60, 0x60).w("cent_data_out", FUNC(output_latch_device::bus_w));
map(0x70, 0x73).rw(I8255A_TAG, FUNC(i8255_device::read), FUNC(i8255_device::write));
-// AM_RANGE(0x80, 0x80) AM_WRITE(bl2out_w)
-// AM_RANGE(0x90, 0x90) AM_WRITE(gr2out_w)
-// AM_RANGE(0xa0, 0xa0) AM_WRITE(rd2out_w)
-// AM_RANGE(0xb0, 0xb0) AM_WRITE(clrg2_w)
-// AM_RANGE(0xc0, 0xc0) AM_WRITE(bluout_w)
-// AM_RANGE(0xd0, 0xd0) AM_WRITE(grnout_w)
-// AM_RANGE(0xe0, 0xe0) AM_WRITE(redout_w)
-// AM_RANGE(0xf0, 0xf0) AM_WRITE(clrg1_w)
+// map(0x80, 0x80).w(FUNC(ecb_grip21_device::bl2out_w));
+// map(0x90, 0x90).w(FUNC(ecb_grip21_device::gr2out_w));
+// map(0xa0, 0xa0).w(FUNC(ecb_grip21_device::rd2out_w));
+// map(0xb0, 0xb0).w(FUNC(ecb_grip21_device::clrg2_w));
+// map(0xc0, 0xc0).w(FUNC(ecb_grip21_device::bluout_w));
+// map(0xd0, 0xd0).w(FUNC(ecb_grip21_device::grnout_w));
+// map(0xe0, 0xe0).w(FUNC(ecb_grip21_device::redout_w));
+// map(0xf0, 0xf0).w(FUNC(ecb_grip21_device::clrg1_w));
}
diff --git a/src/devices/bus/einstein/pipe/tk02.cpp b/src/devices/bus/einstein/pipe/tk02.cpp
index 311c3099011..0564a5eaaad 100644
--- a/src/devices/bus/einstein/pipe/tk02.cpp
+++ b/src/devices/bus/einstein/pipe/tk02.cpp
@@ -23,7 +23,7 @@ DEFINE_DEVICE_TYPE(TK02_80COL, tk02_device, "tk02", "TK02 80 Column Monochrome U
void tk02_device::map(address_map &map)
{
-// AM_RANGE(0x00, 0x07) AM_SELECT(0xff00) AM_READWRITE(ram_r, ram_w) // no AM_SELECT (or AM_MASK) support here
+// map(0x00, 0x07).select(0xff00).rw(FUNC(tk02_device::ram_r), FUNC(tk02_device::ram_w)); // no select() (or mask()) support here
map(0x08, 0x08).mirror(0xff00).w(m_crtc, FUNC(mc6845_device::address_w));
map(0x09, 0x09).mirror(0xff00).w(m_crtc, FUNC(mc6845_device::register_w));
map(0x0c, 0x0c).mirror(0xff00).r(FUNC(tk02_device::status_r));
diff --git a/src/devices/bus/hp_dio/hp98543.cpp b/src/devices/bus/hp_dio/hp98543.cpp
index a3bf039f35a..31251039ea6 100644
--- a/src/devices/bus/hp_dio/hp98543.cpp
+++ b/src/devices/bus/hp_dio/hp98543.cpp
@@ -31,27 +31,27 @@ void dio16_98543_device::device_add_mconfig(machine_config &config)
screen_device &screen(SCREEN(config, HP98543_SCREEN_NAME, SCREEN_TYPE_RASTER));
screen.set_screen_update(FUNC(dio16_98543_device::screen_update));
screen.screen_vblank().set(FUNC(dio16_98543_device::vblank_w));
- screen.set_raw(XTAL(39'504'000), 1408, 0, 1024, 425, 0, 400);
+ screen.set_raw(35.904_MHz_XTAL, 1408, 0, 1024, 425, 0, 400);
- topcat_device &topcat0(TOPCAT(config, "topcat0", XTAL(35904000)));
+ topcat_device &topcat0(TOPCAT(config, "topcat0", 35.904_MHz_XTAL));
topcat0.set_fb_width(1024);
topcat0.set_fb_height(400);
topcat0.set_planemask(1);
topcat0.irq_out_cb().set(FUNC(dio16_98543_device::int0_w));
- topcat_device &topcat1(TOPCAT(config, "topcat1", XTAL(35904000)));
+ topcat_device &topcat1(TOPCAT(config, "topcat1", 35.904_MHz_XTAL));
topcat1.set_fb_width(1024);
topcat1.set_fb_height(400);
topcat1.set_planemask(2);
topcat1.irq_out_cb().set(FUNC(dio16_98543_device::int1_w));
- topcat_device &topcat2(TOPCAT(config, "topcat2", XTAL(35904000)));
+ topcat_device &topcat2(TOPCAT(config, "topcat2", 35.904_MHz_XTAL));
topcat2.set_fb_width(1024);
topcat2.set_fb_height(400);
topcat2.set_planemask(4);
topcat2.irq_out_cb().set(FUNC(dio16_98543_device::int2_w));
- topcat_device &topcat3(TOPCAT(config, "topcat3", XTAL(35904000)));
+ topcat_device &topcat3(TOPCAT(config, "topcat3", 35.904_MHz_XTAL));
topcat3.set_fb_width(1024);
topcat3.set_fb_height(400);
topcat3.set_planemask(8);
diff --git a/src/devices/bus/interpro/sr/gt.cpp b/src/devices/bus/interpro/sr/gt.cpp
index d3a7d99d2c7..7f598144fd1 100644
--- a/src/devices/bus/interpro/sr/gt.cpp
+++ b/src/devices/bus/interpro/sr/gt.cpp
@@ -182,18 +182,18 @@ void gt_device_base::map(address_map &map)
map(0x16c, 0x16f).w(FUNC(gt_device_base::ri_control_w)); // mask 1ff?
- //AM_RANGE(0x174, 0x177) AM_READWRITE(ri_xfer_r, ri_xfer_w)
- //AM_RANGE(0x178, 0x17b) AM_READWRITE(ri_xfer_r, ri_xfer_w)
+ //map(0x174, 0x177).rw(FUNC(gt_device_base::ri_xfer_r), FUNC(gt_device_base::ri_xfer_w));
+ //map(0x178, 0x17b).rw(FUNC(gt_device_base::ri_xfer_r), FUNC(gt_device_base::ri_xfer_w));
map(0x17c, 0x17f).w(FUNC(gt_device_base::ri_xfer_w));
map(0x1a4, 0x1ab).w(FUNC(gt_device_base::bsga_float_w));
map(0x1b0, 0x1b3).nopr(); //?
- //AM_RANGE(0x1c0, 0x1c3)
- //AM_RANGE(0x1c4, 0x1c7)
- //AM_RANGE(0x1c8, 0x1cb)
- //AM_RANGE(0x1cc, 0x1cf) // write32 - float conversion control (inhibit/enable overflow detection?)
+ //map(0x1c0, 0x1c3)
+ //map(0x1c4, 0x1c7)
+ //map(0x1c8, 0x1cb)
+ //map(0x1cc, 0x1cf) // write32 - float conversion control (inhibit/enable overflow detection?)
/*
* Don't know where/how these fifos come into play yet:
diff --git a/src/devices/bus/isa/ega.cpp b/src/devices/bus/isa/ega.cpp
index 5da3c263384..32175304f20 100644
--- a/src/devices/bus/isa/ega.cpp
+++ b/src/devices/bus/isa/ega.cpp
@@ -448,22 +448,31 @@ located at I/O port 0x3CE, and a data register located at I/O port 0x3CF.
#include "screen.h"
+#define LOG_READ (1U << 1)
+#define LOG_SETUP (1U << 2)
+#define LOG_MODE (1U << 3)
-#define VERBOSE_EGA 1
+//#define VERBOSE (LOG_GENERAL | LOG_SETUP | LOG_MODE)
+//#define LOG_OUTPUT_STREAM std::cout
+
+#include "logmacro.h"
+
+#define LOGR(...) LOGMASKED(LOG_READ, __VA_ARGS__)
+#define LOGSETUP(...) LOGMASKED(LOG_SETUP, __VA_ARGS__)
+#define LOGMODE(...) LOGMASKED(LOG_MODE, __VA_ARGS__)
+
+#ifdef _MSC_VER
+#define FUNCNAME __func__
+#else
+#define FUNCNAME __PRETTY_FUNCTION__
+#endif
#define EGA_SCREEN_NAME "ega_screen"
#define EGA_CRTC_NAME "crtc_ega_ega"
-
#define EGA_MODE_GRAPHICS 1
#define EGA_MODE_TEXT 2
-
-/*
- Prototypes
-*/
-
-
ROM_START( ega )
ROM_REGION(0x4000, "user1", 0)
ROM_DEFAULT_BIOS("ega")
@@ -776,7 +785,7 @@ CRTC_EGA_ROW_UPDATE( isa8_ega_device::pc_ega_graphics )
{
uint16_t *p = &bitmap.pix16(y);
-// logerror( "pc_ega_graphics: y = %d, x_count = %d, ma = %d, ra = %d\n", y, x_count, ma, ra );
+ LOG("%s: y = %d, x_count = %d, ma = %d, ra = %d\n", FUNCNAME, y, x_count, ma, ra );
if ( m_graphics_controller.data[5] & 0x10 )
{
@@ -838,7 +847,7 @@ CRTC_EGA_ROW_UPDATE( isa8_ega_device::pc_ega_text )
uint16_t *p = &bitmap.pix16(y);
int i;
-// logerror( "pc_ega_text: y = %d, x_count = %d, ma = %d, ra = %d\n", y, x_count, ma, ra );
+ LOG("%s: y = %d, x_count = %d, ma = %d, ra = %d\n", FUNCNAME, y, x_count, ma, ra );
for ( i = 0; i < x_count; i++ )
{
@@ -901,10 +910,7 @@ void isa8_ega_device::change_mode()
! ( m_sequencer.data[0x04] & 0x01 ) &&
( m_graphics_controller.data[0x06] & 0x01 ) )
{
- if ( VERBOSE_EGA )
- {
- logerror("change_mode(): Switch to graphics mode\n");
- }
+ LOGMODE("%s: Switch to graphics mode\n", FUNCNAME);
m_video_mode = EGA_MODE_GRAPHICS;
}
@@ -914,10 +920,7 @@ void isa8_ega_device::change_mode()
( m_sequencer.data[0x04] & 0x01 ) &&
! ( m_graphics_controller.data[0x06] & 0x01 ) )
{
- if ( VERBOSE_EGA )
- {
- logerror("chnage_mode(): Switching to text mode\n");
- }
+ LOGMODE("%s: Switching to text mode\n", FUNCNAME);
m_video_mode = EGA_MODE_TEXT;
@@ -1195,10 +1198,7 @@ READ8_MEMBER( isa8_ega_device::pc_ega8_3X0_r )
WRITE8_MEMBER( isa8_ega_device::pc_ega8_3X0_w )
{
- if ( VERBOSE_EGA )
- {
-// logerror("pc_ega_3X0_w: offset = %02x, data = %02x\n", offset, data );
- }
+ LOGSETUP("%s: offset = %02x, data = %02x\n", FUNCNAME, offset, data );
switch ( offset )
{
@@ -1263,10 +1263,7 @@ READ8_MEMBER(isa8_ega_device::pc_ega8_3c0_r )
{
int data = 0xff;
- if ( VERBOSE_EGA )
- {
-// logerror("pc_ega_3c0_r: offset = %02x\n", offset );
- }
+ LOGR("%s: offset = %02x\n", FUNCNAME, offset );
switch ( offset )
{
@@ -1322,10 +1319,7 @@ WRITE8_MEMBER(isa8_ega_device::pc_ega8_3c0_w )
};
int index;
- if ( VERBOSE_EGA )
- {
-// logerror("pc_ega_3c0_w: offset = %02x, data = %02x\n", offset, data );
- }
+ LOGSETUP("%s: offset = %02x, data = %02x\n", FUNCNAME, offset, data );
switch ( offset )
{
@@ -1339,7 +1333,7 @@ WRITE8_MEMBER(isa8_ega_device::pc_ega8_3c0_w )
{
index = m_attribute.index & 0x1F;
- logerror("AR%02X = 0x%02x\n", index, data );
+ LOGSETUP(" - AR%02X = 0x%02x\n", index, data );
/* Clear unused bits */
m_attribute.data[ index ] = data & ar_reg_mask[ index ];
@@ -1368,7 +1362,7 @@ WRITE8_MEMBER(isa8_ega_device::pc_ega8_3c0_w )
case 5:
index = m_sequencer.index & 0x07;
- logerror("SR%02X = 0x%02x\n", index & 0x07, data );
+ LOGSETUP(" - SR%02X = 0x%02x\n", index & 0x07, data );
/* Clear unused bits */
m_sequencer.data[ index ] = data & sr_reg_mask[ index ];
@@ -1390,7 +1384,7 @@ WRITE8_MEMBER(isa8_ega_device::pc_ega8_3c0_w )
case 15:
index = m_graphics_controller.index & 0x0F;
- logerror("GR%02X = 0x%02x\n", index, data );
+ LOGSETUP(" - GR%02X = 0x%02x\n", index, data );
/* Clear unused bits */
m_graphics_controller.data[ index ] = data & gr_reg_mask[ index ];
diff --git a/src/devices/bus/isa/isa_cards.cpp b/src/devices/bus/isa/isa_cards.cpp
index c97866bdf5e..33973211c7d 100644
--- a/src/devices/bus/isa/isa_cards.cpp
+++ b/src/devices/bus/isa/isa_cards.cpp
@@ -53,6 +53,7 @@
#include "gus.h"
#include "ibm_mfc.h"
#include "mpu401.h"
+#include "pcmidi.h"
#include "sblaster.h"
#include "ssi2001.h"
#include "stereo_fx.h"
@@ -114,6 +115,7 @@ void pc_isa8_cards(device_slot_interface &device)
device.option_add("stereo_fx", ISA8_STEREO_FX);
device.option_add("ssi2001", ISA8_SSI2001);
device.option_add("mpu401", ISA8_MPU401);
+ device.option_add("pcmidi", ISA8_PCMIDI);
device.option_add("ne1000", NE1000);
device.option_add("3c503", EL2_3C503);
device.option_add("lpt", ISA8_LPT);
@@ -126,6 +128,7 @@ void pc_isa8_cards(device_slot_interface &device)
device.option_add("chessmdr", ISA8_CHESSMDR);
device.option_add("chessmsr", ISA8_CHESSMSR);
device.option_add("finalchs", ISA8_FINALCHS);
+ device.option_add("epc_mda", ISA8_EPC_MDA);
}
void pc_isa16_cards(device_slot_interface &device)
@@ -157,6 +160,7 @@ void pc_isa16_cards(device_slot_interface &device)
device.option_add("ne1000", NE1000);
device.option_add("3c503", EL2_3C503);
device.option_add("mpu401", ISA8_MPU401);
+ device.option_add("pcmidi", ISA8_PCMIDI);
device.option_add("lpt", ISA8_LPT);
device.option_add("ibm_mfc", ISA8_IBM_MFC);
device.option_add("fdcsmc", ISA8_FDC_SMC);
@@ -166,6 +170,7 @@ void pc_isa16_cards(device_slot_interface &device)
device.option_add("chessmdr", ISA8_CHESSMDR);
device.option_add("chessmsr", ISA8_CHESSMSR);
device.option_add("finalchs", ISA8_FINALCHS);
+ device.option_add("epc_mda", ISA8_EPC_MDA);
// 16-bit
device.option_add("ide", ISA16_IDE);
device.option_add("ne2000", NE2000);
diff --git a/src/devices/bus/isa/mda.cpp b/src/devices/bus/isa/mda.cpp
index 823ff040676..f660b48a1dd 100644
--- a/src/devices/bus/isa/mda.cpp
+++ b/src/devices/bus/isa/mda.cpp
@@ -12,6 +12,31 @@
#include "screen.h"
+#define LOG_READ (1U << 1)
+#define LOG_SETUP (1U << 2)
+#define LOG_ROW (1U << 3)
+#define LOG_MODE (1U << 4)
+#define LOG_CHRG (1U << 5)
+#define LOG_STAT (1U << 6)
+
+//#define VERBOSE (LOG_MODE|LOG_SETUP|LOG_ROW)
+//#define LOG_OUTPUT_STREAM std::cout
+
+#include "logmacro.h"
+
+#define LOGR(...) LOGMASKED(LOG_READ, __VA_ARGS__)
+#define LOGSETUP(...) LOGMASKED(LOG_SETUP, __VA_ARGS__)
+#define LOGROW(...) LOGMASKED(LOG_ROW, __VA_ARGS__)
+#define LOGMODE(...) LOGMASKED(LOG_MODE, __VA_ARGS__)
+#define LOGCHRG(...) LOGMASKED(LOG_CHRG, __VA_ARGS__)
+#define LOGSTAT(...) LOGMASKED(LOG_STAT, __VA_ARGS__)
+
+#ifdef _MSC_VER
+#define FUNCNAME __func__
+#else
+#define FUNCNAME __PRETTY_FUNCTION__
+#endif
+
#define MDA_SCREEN_NAME "mda_screen"
#define MC6845_NAME "mc6845"
@@ -19,20 +44,7 @@
Hercules video card
*/
#define HERCULES_SCREEN_NAME "hercules_screen"
-
-#define VERBOSE_MDA 0 /* MDA (Monochrome Display Adapter) */
-
-#define MDA_CLOCK 16.257_MHz_XTAL
-
-#define MDA_LOG(N,M,A) \
- do { \
- if(VERBOSE_MDA>=N) \
- { \
- if( M ) \
- logerror("%11.6f: %-24s",machine().time().as_double(),(char*)M ); \
- logerror A; \
- } \
- } while (0)
+#define MDA_CLOCK XTAL(16'257'000)
static const unsigned char mda_palette[4][3] =
{
@@ -84,7 +96,7 @@ static GFXDECODE_START( gfx_pcmda )
GFXDECODE_END
-WRITE_LINE_MEMBER(isa8_mda_device::pc_cpu_line)
+WRITE_LINE_MEMBER( isa8_mda_device::pc_cpu_line )
{
m_isa->irq7_w(state);
}
@@ -211,7 +223,6 @@ void isa8_mda_device::device_reset()
The character cell size is 9x15. Column 9 is column 8 repeated for
character codes 176 to 223.
***************************************************************************/
-
MC6845_UPDATE_ROW( isa8_mda_device::mda_text_inten_update_row )
{
const rgb_t *palette = m_palette->palette()->entry_list_raw();
@@ -219,7 +230,7 @@ MC6845_UPDATE_ROW( isa8_mda_device::mda_text_inten_update_row )
uint16_t chr_base = ( ra & 0x08 ) ? 0x800 | ( ra & 0x07 ) : ra;
int i;
- if ( y == 0 ) MDA_LOG(1,"mda_text_inten_update_row",("\n"));
+ if ( y == 0 ) LOGROW("%11.6f: %-24s\n", machine().time().as_double(), FUNCNAME);
for ( i = 0; i < x_count; i++ )
{
uint16_t offset = ( ( ma + i ) << 1 ) & 0x0FFF;
@@ -292,7 +303,7 @@ MC6845_UPDATE_ROW( isa8_mda_device::mda_text_blink_update_row )
uint16_t chr_base = ( ra & 0x08 ) ? 0x800 | ( ra & 0x07 ) : ra;
int i;
- if ( y == 0 ) MDA_LOG(1,"mda_text_blink_update_row",("\n"));
+ if ( y == 0 ) LOGROW("%11.6f: %-24s\n", machine().time().as_double(), FUNCNAME);
for ( i = 0; i < x_count; i++ )
{
uint16_t offset = ( ( ma + i ) << 1 ) & 0x0FFF;
@@ -360,7 +371,6 @@ MC6845_UPDATE_ROW( isa8_mda_device::mda_text_blink_update_row )
}
}
-
MC6845_UPDATE_ROW( isa8_mda_device::crtc_update_row )
{
if (m_update_row_type == -1)
@@ -443,7 +453,7 @@ WRITE8_MEMBER( isa8_mda_device::mode_control_w )
* 2-1 reserved
* 0 horizontal drive enable
*/
-READ8_MEMBER( isa8_mda_device::status_r)
+READ8_MEMBER( isa8_mda_device::status_r )
{
// Faking pixel stream here
m_pixel++;
@@ -458,42 +468,42 @@ READ8_MEMBER( isa8_mda_device::status_r)
* monochrome display adapter
*
*************************************************************************/
-WRITE8_MEMBER( isa8_mda_device::io_write)
+WRITE8_MEMBER( isa8_mda_device::io_write )
{
switch( offset )
{
- case 0: case 2: case 4: case 6:
+ case 0x00: case 0x02: case 0x04: case 0x06:
m_crtc->address_w(data);
break;
- case 1: case 3: case 5: case 7:
+ case 0x01: case 0x03: case 0x05: case 0x07:
m_crtc->register_w(data);
break;
- case 8:
+ case 0x08:
mode_control_w(space, offset, data);
break;
- case 12: case 13: case 14:
- m_lpt->write(space, offset - 12, data);
+ case 0x0c: case 0x0d: case 0x0e:
+ m_lpt->write(space, offset - 0x0c, data);
break;
}
}
-READ8_MEMBER( isa8_mda_device::io_read)
+READ8_MEMBER( isa8_mda_device::io_read )
{
int data = 0xff;
switch( offset )
{
- case 0: case 2: case 4: case 6:
+ case 0x00: case 0x02: case 0x04: case 0x06:
/* return last written mc6845 address value here? */
break;
- case 1: case 3: case 5: case 7:
+ case 0x01: case 0x03: case 0x05: case 0x07:
data = m_crtc->register_r();
break;
- case 10:
+ case 0x0a:
data = status_r(space, offset);
break;
- /* 12, 13, 14 are the LPT ports */
- case 12: case 13: case 14:
- data = m_lpt->read(space, offset - 12);
+ /* LPT ports */
+ case 0x0c: case 0x0d: case 0x0e:
+ data = m_lpt->read(space, offset - 0x0c);
break;
}
return data;
@@ -624,7 +634,7 @@ MC6845_UPDATE_ROW( isa8_hercules_device::hercules_gfx_update_row )
uint32_t *p = &bitmap.pix32(y);
uint16_t gfx_base = ( ( m_mode_control & 0x80 ) ? 0x8000 : 0x0000 ) | ( ( ra & 0x03 ) << 13 );
int i;
- if ( y == 0 ) MDA_LOG(1,"hercules_gfx_update_row",("\n"));
+ if ( y == 0 ) LOGROW("%11.6f: %-24s\n", machine().time().as_double(), FUNCNAME);
for ( i = 0; i < x_count; i++ )
{
uint8_t data = m_videoram[ gfx_base + ( ( ma + i ) << 1 ) ];
@@ -681,19 +691,19 @@ WRITE8_MEMBER( isa8_hercules_device::io_write )
{
switch( offset )
{
- case 0: case 2: case 4: case 6:
+ case 0x00: case 0x02: case 0x04: case 0x06:
m_crtc->address_w(data);
break;
- case 1: case 3: case 5: case 7:
+ case 0x01: case 0x03: case 0x05: case 0x07:
m_crtc->register_w(data);
break;
- case 8:
+ case 0x08:
mode_control_w(space, offset, data);
break;
- case 12: case 13: case 14:
+ case 0x0c: case 0x0d: case 0x0e:
m_lpt->write(space, offset - 12, data);
break;
- case 15:
+ case 0x0f:
m_configuration_switch = data;
break;
}
@@ -725,18 +735,18 @@ READ8_MEMBER( isa8_hercules_device::io_read )
int data = 0xff;
switch( offset )
{
- case 0: case 2: case 4: case 6:
+ case 0x00: case 0x02: case 0x04: case 0x06:
/* return last written mc6845 address value here? */
break;
- case 1: case 3: case 5: case 7:
+ case 0x01: case 0x03: case 0x05: case 0x07:
data = m_crtc->register_r();
break;
- case 10:
+ case 0x0a:
data = status_r(space, offset);
break;
- /* 12, 13, 14 are the LPT ports */
- case 12: case 13: case 14:
- data = m_lpt->read(space, offset - 12);
+ /* LPT ports */
+ case 0xc: case 0xd: case 0xe:
+ data = m_lpt->read(space, offset - 0x0c);
break;
}
return data;
@@ -809,7 +819,7 @@ MC6845_UPDATE_ROW( isa8_ec1840_0002_device::mda_lowres_text_inten_update_row )
uint16_t chr_base = ra;
int i;
- if ( y == 0 ) MDA_LOG(1,"mda_lowres_text_inten_update_row",("\n"));
+ if ( y == 0 ) LOGROW("%11.6f: %-24s\n", machine().time().as_double(), FUNCNAME);
for ( i = 0; i < x_count; i++ )
{
uint16_t offset = ( ( ma + i ) << 1 ) & 0x0FFF;
@@ -873,7 +883,7 @@ MC6845_UPDATE_ROW( isa8_ec1840_0002_device::mda_lowres_text_blink_update_row )
uint16_t chr_base = ra;
int i;
- if ( y == 0 ) MDA_LOG(1,"mda_lowres_text_blink_update_row",("\n"));
+ if ( y == 0 ) LOGROW("%11.6f: %-24s\n", machine().time().as_double(), FUNCNAME);
for ( i = 0; i < x_count; i++ )
{
uint16_t offset = ( ( ma + i ) << 1 ) & 0x0FFF;
@@ -965,3 +975,506 @@ MC6845_UPDATE_ROW( isa8_ec1840_0002_device::crtc_update_row )
break;
}
}
+
+/*****************************************************************************
+
+ Ericsson PC Monochrome HR Graphics Board 1070
+
+******************************************************************************/
+
+/* PCB layouts and assembly years from online pictures and physical unit.
+ Ericsson - marked SPVT02 8301 60 53-10, assembled in 1985 indicated by chip dates
+ +--------------------------------------------------------------------------------------+ ___
+ | IC1 IC2 IC3 IC4 IC5 +-IC15--EPROM-+ IC6 IC7 IC8 S1 ||
+ | |8363 65 14-80| ||
+ | IC9 IC10 IC11 IC12 IC13 IC14|CG 50821 A64 |+------------------++-IC24 EPROM--+ ||
+ | +-------------+| CRTC HD46505SP-1 ||10-40VP | ||
+ | IC16 IC17 IC18 IC19 IC20 IC21 IC22 | IC23 HD68A45SP ||402 28 A19 | J4|| not
+ | +------------------++-------------+ || mounted
+ | IC25 IC26 IC27 IC28 IC29 IC30 IC31 IC32 IC33 IC34 ||
+ | O-|__
+ | IC35 IC36 IC37 IC38 IC39 IC40 IC41 IC42 IC43 IC44 || |
+ | ||DB15
+ | IC45 IC46 IC47 IC48 IC49 IC50 IC51 IC52 IC53 IC54 || |
+ | ||__|
+ | IC55 IC56 IC57 IC58 IC59 IC60 IC61 IC62 IC63 IC64 O-|
+ | J1A ||
+ | IC65 IC66 IC67 IC68 IC69 IC70 IC71 IC72 +--------------------------------------------+|
+ +-----------------------------------------+ ||||||||| ||||||||||||||||||||||||| |
+ I85565 A85571 (labels) |
+ |
+
+ IC's (from photos)
+ ------------------------------------------------------------------------------
+ IC1 74F109 IC26 74F86 IC51 TMS4416-15NL 4 x 16Kbits DRAM
+ IC2 74LS393 IC27 74LS08 IC52 74ALS574
+ IC3 74F64 IC28 74F153 IC53 74LS138
+ IC4 74ALS299 IC29 74LS174 IC54 74F86
+ IC5 74LS375 IC30 74LS374 IC55 74F109
+ IC6 74LS151 IC31 74LS374 IC56 74F32
+ IC7 74LS153 IC32 74ALS574 IC57 74F109
+ IC8 74LS389? IC33 74LS08 IC58 74F00?
+ IC9 74F02 IC34 74LS245 IC59 74LS244
+ IC10 74ALS109 IC35 74F10? IC60 TMS4416-15NL 4 x 16Kbits DRAM
+ IC11 Crystal 17.040MHz IC36 74LS02 IC61 TMS4416-15NL 4 x 16Kbits DRAM
+ IC12 74F64 IC37 74LS00 IC62 74ALS574
+ IC13 74ALS299 IC38 74F374 IC63 74LS138
+ IC14 PAL? 10-70ART40101 IC39 74LS125 IC64 74LS245
+ IC15 EPROM 8363 65 14-80 CG 50821 A64 IC40 74LS244 IC65 74LS00
+ IC16 Crystal 19.170MHz IC41 74LS244 IC66 74LS02
+ IC17 74LS10 IC42 74LS574 IC67 74LS51
+ IC18 74F08 IC43 74LS32 IC68 74LS04
+ IC19 74ALS574 IC44 MC10124 - TTL to MECL converter IC69 74LS153
+ IC20 74LS299 IC45 74LS109 IC70 74LS109
+ IC21 74LS273 IC46 74LS00 IC71 74LS138
+ IC22 74ALS574 IC47 74F194 IC72 74LS139
+ IC23 CRTC HD46505SP,HD68A45SP IC48 74F04
+ IC24 EPROM 2764, 10-40 VP 402 28 A19 IC49 74LS174
+ IC25 74ALS109 IC50 TMS4416-15NL 4 x 16Kbits DRAM
+
+ General description
+ -------------------
+ The PCB has a 2 bit DIP switch S1 and a DB15 non standard video connector. There is also an unsoldered J4 connector
+ above the DB15 but no hole prepared for a connector in the plate. Above the J4 connector there is a two pin PCB connector
+ that probably receives the power for the monitor for the DB15 from the PSU.
+
+ Just below IC65 and IC66 there are two labels saying "I 85565" and "A E85571" respectively
+
+ Video cable, card DB15 <---> monitor DB25
+ ---------------------------------------------------
+ Ericsson 2 +VS 4 Ericsson
+ Monochrome 3 VS return 2 Monochrome HR
+ HR Graphics 10 +VS 17 Monitors 3111 (Amber) or
+ Board 1070 11 VS return 15 3712/3715 (Black & White)
+ 4 VSYNC 6
+ 12 VSYNC 19
+ 5 HSYNC 7
+ 13 HSYNC 20
+ 6 High intensity 8
+ 14 High intensity 21
+ 7 Video 9
+ 15 Video 22
+ 8 GND 11
+
+ This board is normaly used with an Ericsson monitor due to the non standard connector.
+ Trivia: https://www.pinterest.se/pin/203084264425177097/
+ */
+
+#define EPC_MDA_SCREEN "epc_mda_screen" // TODO: use a device finder reference instead
+
+ROM_START( epc )
+ ROM_REGION(0x2000,"chargen", 0)
+ ROM_LOAD("8363_65_14_80_cg_50821_a64.bin", 0x00000, 0x2000, CRC(be709786) SHA1(38ab26224bbe66bbe2bb2ccac29b41cbf78bdbf8))
+ //ROM_LOAD("10_40_vp_402_28_ic_24_a19.bin", 0x00000, 0x2000, CRC(2aa53b92) SHA1(87051a037249eb631d7d2191bc0e925125c60f39))
+ROM_END
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+DEFINE_DEVICE_TYPE(ISA8_EPC_MDA, isa8_epc_mda_device, "isa_epc_mda", "Ericsson PC Monochrome HR Graphics Board 1070")
+
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+/* There are two crystals on the board: 19.170Mhz and 17.040MHz TODO: verify use */
+/* Text modes uses 720x400 base resolution and the Graphics modes 320/640x200/400 */
+/* This matches the difference between the crystals so we assume this for now */
+void isa8_epc_mda_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, EPC_MDA_SCREEN, SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(19'170'000) / 4, 720, 0, 720, 400, 0, 400);
+ //screen.set_screen_update(MC6845_NAME, FUNC(h46505_device::screen_update));
+ screen.set_screen_update(MC6845_NAME, FUNC(mc6845_device::screen_update));
+
+ PALETTE(config, m_palette).set_entries(4);
+
+ HD6845S(config, m_crtc, XTAL(19'170'000) / 16); // clock and divider are guesswork
+ m_crtc->set_screen(EPC_MDA_SCREEN);
+ m_crtc->set_show_border_area(false);
+ m_crtc->set_char_width(8);
+
+ m_crtc->set_update_row_callback(FUNC(isa8_epc_mda_device::crtc_update_row), this);
+ m_crtc->out_hsync_callback().set(FUNC(isa8_epc_mda_device::hsync_changed));
+ m_crtc->out_vsync_callback().set(FUNC(isa8_epc_mda_device::vsync_changed));
+
+ //MCFG_GFXDECODE_ADD("gfxdecode", "palette", pcepc)
+}
+
+//-------------------------------------------------
+// rom_region - device-specific ROM region
+//-------------------------------------------------
+
+const tiny_rom_entry *isa8_epc_mda_device::device_rom_region() const
+{
+ return ROM_NAME( epc );
+}
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// isa8_epc_mda_device - constructor
+//-------------------------------------------------
+
+isa8_epc_mda_device::isa8_epc_mda_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ isa8_mda_device(mconfig, ISA8_EPC_MDA, tag, owner, clock),
+ m_soft_chr_gen(nullptr),
+ m_s1(*this, "S1"),
+ m_color_mode(0),
+ m_mode_control2(0),
+ m_screen(*this, EPC_MDA_SCREEN),
+ m_io_monitor(*this, "MONITOR"),
+ m_chargen(*this, "chargen"),
+ m_installed(false)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void isa8_epc_mda_device::device_start()
+{
+ if (m_palette != nullptr && !m_palette->started())
+ throw device_missing_dependencies();
+
+ /* Palette for use with the Ericsson Amber Monochrome HR CRT monitor 3111, P3 phospor 602nm 255,183, 0 */
+ m_3111_pal[0] = rgb_t( 0, 0, 0); // black
+ m_3111_pal[1] = rgb_t( 143, 103, 0); // dim
+ m_3111_pal[2] = rgb_t( 191, 137, 0); // normal
+ m_3111_pal[3] = rgb_t( 255, 183, 0); // bright
+
+ /* Palette for use with the Ericsson B&W Monochrome HR CRT monitor 3712/3715 */
+ m_371x_pal[0] = rgb_t( 0, 0, 0); // black
+ m_371x_pal[1] = rgb_t( 143, 143, 143); // dim
+ m_371x_pal[2] = rgb_t( 191, 191, 191); // normal
+ m_371x_pal[3] = rgb_t( 255, 255, 255); // bright
+
+ /* Init a default palette */
+ m_pal = &m_3111_pal; // In case screen starts rendering before device_reset where we read the settings
+
+ m_videoram.resize(0x8000);
+ set_isa_device();
+ m_installed = false;
+ m_hd6845s = subdevice<hd6845s_device>(MC6845_NAME);
+}
+
+void isa8_epc_mda_device::device_reset()
+{
+ m_framecnt = 0;
+ m_mode_control = 0;
+ m_vsync = 0;
+ m_hsync = 0;
+
+ m_color_mode = m_s1->read();
+ LOGSETUP("%s: m_color_mode:%02x\n", FUNCNAME, m_color_mode);
+ m_pal = (m_io_monitor-> read() & 1) == 1 ? &m_371x_pal : &m_3111_pal;
+ m_vmode = 0;
+
+ if (m_installed == false)
+ {
+ m_isa->install_device(0x3b0, 0x3bf, read8_delegate( FUNC(isa8_epc_mda_device::io_read), this ), write8_delegate( FUNC(isa8_epc_mda_device::io_write), this ) );
+ m_isa->install_bank(0xb0000, 0xb7fff, "bank_epc", &m_videoram[0]); // Monochrome emulation mode VRAM address
+
+ // This check allows a color monitor adapter to be installed at this address range if color emulation is disabled
+ if (m_color_mode & 1)
+ {
+ m_isa->install_device(0x3d0, 0x3df, read8_delegate( FUNC(isa8_epc_mda_device::io_read), this ), write8_delegate( FUNC(isa8_epc_mda_device::io_write), this ) );
+ m_isa->install_bank(0xb8000, 0xbffff, "bank_epc", &m_videoram[0]); // Color emulation mode VRAM address, but same 32KB areas as there are only this amount on the board
+ }
+ m_installed = true;
+ }
+}
+
+/*
+ * Register Address table from the manual
+ * Ericsson name MDA mode CGA mode Standard name
+ *-------------------------------------------------------------------------------
+ * 6845 Address Registers 0x3b4 0x3d4 wo CRT Index reg
+ * 6845 Data Registers 0x3b5 0x3d5 wo CRT Data reg
+ * Mode Register 1 0x3b8 0x3d8 rw MDA/CGA mode reg (bit 0,1 & 4 incompatible)
+ * Mode Register 2 0x3bf 0x3df rw CRT/CPU page reg (incompatible w PCjr only)
+ * Status Register 0x3ba 0x3da r CGA/MDA status reg (incompatible)
+ * w EGA/VGA feature ccontrol reg (not used by this board)
+ */
+WRITE8_MEMBER(isa8_epc_mda_device::io_write )
+{
+ LOG("%s: %04x <- %02x\n", FUNCNAME, offset, data);
+ switch( offset )
+ {
+ case 0x04:
+ //LOGSETUP(" - HD6845S address write\n");
+ m_hd6845s->address_w( data );
+ break;
+ case 0x05:
+ //LOGSETUP(" - HD6845S register write\n");
+ m_hd6845s->register_w( data );
+ break;
+ case 0x08: // Mode 1 reg
+ LOGMODE(" - Mode register 1 write: %02x\n", data);
+ LOGMODE(" MSB attribute: %s\n", (data & 0x20) == 0 ? "intensity" : "blink");
+ LOGMODE(" Horizontal px: %s\n", (data & 0x10) == 0 ? "320/LR" : "640/HR");
+ LOGMODE(" Video : %s\n", (data & 0x08) == 0 ? "Disabled" : "Enabled");
+ LOGMODE(" Mode : %s\n", (data & 0x02) == 0 ? "Text" : "Graphics");
+ LOGMODE(" Text columns : %d\n", (data & 0x01) == 0 ? 40 : 80);
+ m_mode_control = data;
+ m_vmode &= ~(VM_GRAPH | VM_COLS80 | VM_HOR640);
+ m_vmode |= ((m_mode_control & 0x01) ? VM_COLS80 : 0);
+ m_vmode |= ((m_mode_control & 0x02) ? VM_GRAPH : 0);
+ m_vmode |= ((m_mode_control & 0x10) ? VM_HOR640 : 0);
+ m_update_row_type = ((data & 0x20) == 0 ? MDA_LOWRES_TEXT_INTEN : MDA_LOWRES_TEXT_BLINK);
+ {
+ rectangle rect(0, get_xres() - 1, 0, get_yres() -1);
+ m_screen->configure(get_xres(), get_yres(), rect, HZ_TO_ATTOSECONDS(50));
+ }
+ LOGMODE("Video Mode:%02x\n\n", m_vmode);
+ break;
+ case 0x0f: // Mode 2 reg
+ LOGMODE(" - Mode register 2 write: %02x\n", data);
+ LOGMODE(" Vertical px : %s\n", (data & MR2_VER400) == 0 ? "200" : "400");
+ LOGMODE(" Character set: %s\n", (data & MR2_CHRSET) == 0 ? "0" : "1");
+ LOGMODE(" Emulated : %s\n", (data & MR2_COLEMU) == 0 ? "Color" : "Monochrome");
+ m_mode_control2 = data;
+ m_vmode &= ~(VM_MONO | VM_VER400);
+ m_vmode |= ((m_mode_control2 & 0x04) ? VM_MONO : 0);
+ m_vmode |= ((m_mode_control2 & 0x80) ? VM_VER400 : 0);
+ {
+ rectangle rect(0, get_xres() - 1, 0, get_yres() -1);
+ m_screen->configure(get_xres(), get_yres(), rect, HZ_TO_ATTOSECONDS(50));
+ }
+ LOGMODE("Video Mode:%02x\n\n", m_vmode);
+ break;
+ default:
+ LOG("EPC MDA: io_write at wrong offset:%02x\n", offset);
+ }
+}
+
+READ8_MEMBER( isa8_epc_mda_device::io_read )
+{
+ LOG("%s: %04x <- ???\n", FUNCNAME, offset);
+ int data = 0xff;
+ switch( offset )
+ {
+ case 0x04:
+ LOGR(" - hd6845s address read\n");
+ break;
+ case 0x05:
+ LOGR(" - hd6845s register read\n");
+ data = m_hd6845s->register_r();
+ break;
+ case 0x08: // Mode 1 reg
+ data = m_mode_control;
+ LOGMODE(" - Mode register 1 read: %02x\n", data);
+ break;
+ case 0x0a: // Status reg: b7-6=00 board ID; b3 vert retrace; b0 horiz retrace; b5,4,2,1 unused
+ data = (m_vsync != 0 ? 0x08 : 0x00) | (m_hsync != 0 ? 0x01 : 0x00);
+ LOGSTAT(" - Status register read: %02x\n", data);
+ break;
+ case 0x0f: // Mode 2 reg
+ data = m_mode_control2;
+ LOGMODE(" - Mode register 2 read: %02x\n", data);
+ break;
+ default:
+ LOG("EPC MDA: io_read at wrong offset:%02x\n", offset);
+ logerror("EPC MDA: io_read at wrong offset:%02x\n", offset);
+ }
+ LOG(" !!!: %04x <- %02x\n", offset, data);
+ return data;
+}
+
+inline int isa8_epc_mda_device::get_xres()
+{
+ return (m_vmode & VM_GRAPH) ? ( (m_vmode & VM_HOR640) ? 640 : 320 ) : 720;
+}
+
+inline int isa8_epc_mda_device::get_yres()
+{
+ return (m_vmode & VM_GRAPH) ? ( (m_vmode & VM_VER400) ? 400 : 200 ) : 400;
+}
+
+MC6845_UPDATE_ROW(isa8_epc_mda_device::crtc_update_row)
+{
+ uint32_t *p = &bitmap.pix32(y);
+ uint16_t chr_base = ra;
+ int i;
+
+ // Get som debug data from a couple of rows now and then
+ if ( y < (16 * 0 + 0x20) && (m_framecnt & 0xff) == 0 )
+ {
+ LOGROW("%11.6f %s\n - y:%d chr_base:%d ra:%d ma:%d x_count:%d\n", machine().time().as_double(), FUNCNAME,
+ y, y % 16, ra, ma, x_count);
+ }
+
+ // Video Off handling
+ if ((m_mode_control & MR1_VIDEO) == 0)
+ {
+ for (int i = 0; i < get_xres(); i++)
+ {
+ bitmap.pix32(y, i) = rgb_t::black();
+ }
+ }
+
+ // Graphic modes using only pixeldata, soft fonts are 8x8 or 8x16 but this is transparant to the code
+ else if ((m_vmode & VM_GRAPH) != 0)
+ {
+ logerror("EPC MDA: graphic modes not supported yet\n");
+ }
+
+ // Text modes using one of two 9x16 fonts in character rom
+ else
+ {
+ // Adjust row pointer if in monochrome text mode as we insert two scanlines per row of characters (see below)
+ if (m_vmode & VM_MONO)
+ {
+ p = &bitmap.pix32((y / 14) * 16 + y % 14);
+ }
+
+ // Loop over each character in a row
+ for ( i = 0; i < x_count; i++ )
+ {
+ uint16_t offset = ( ( ma + i ) << 1 ) & 0x0FFF;
+ uint8_t chr = m_videoram[ offset ];
+ uint8_t attr = m_videoram[ offset + 1 ];
+ uint8_t data = m_chargen[ ((m_mode_control2 & MR2_CHRSET) ? 0x1000 : 0) + chr_base + chr * 16];
+
+ // Default to light text on dark background
+ uint8_t fg = 2;
+ uint8_t bg = 0;
+
+ if (y == 0 && i == 0) LOGCHRG(" - Offset: %04x Chr: '%c'[%02x] Attr: %02x Chr_base: %04x\n", offset, chr, chr, attr, chr_base);
+
+ // Prepare some special monochrome emulation cases
+ if ( m_vmode & VM_MONO)
+ {
+ // Handle invisible characters
+ if ( (attr & (ATTR_FOREG | ATTR_BACKG)) == 0 )
+ {
+ data = 0x00;
+ }
+ // Handle reversed characters
+ else if ( (attr & (ATTR_BACKG)) == ATTR_BACKG )
+ {
+ fg = 0;
+ bg = 2;
+ }
+ }
+ else // prepare some special color emulation cases
+ {
+ // Handle invisible characters
+ if ( (attr & (ATTR_FOREG)) == ((attr & ATTR_BACKG) >> 4))
+ {
+ data = 0x00;
+ }
+ // Handle reversed characters
+ else if ( (attr & ATTR_BACKG) == ATTR_BACKG ||
+ (attr & ATTR_FOREG) == 0 )
+ {
+ fg = 0;
+ bg = 2;
+ }
+ }
+
+ // Handle intense foreground
+ if ((attr & ATTR_INTEN) != 0 && fg == 2)
+ {
+ fg = 3;
+ }
+
+ // Handle intense background if blinking is disabled
+ if ((m_mode_control & MR1_BLINK) == 0 &&
+ (attr & ATTR_BLINK) != 0 && bg == 2)
+ {
+ bg = 3;
+ }
+
+ // Handle cursor and blinks
+ if ( i == (cursor_x))
+ {
+ if ( m_framecnt & 0x08 )
+ {
+ data = 0xFF;
+ }
+ }
+ else
+ {
+ if ( (m_mode_control & MR1_BLINK) &&
+ ( attr & ATTR_BLINK ) && ( m_framecnt & 0x10 ) )
+ {
+ data = 0x00;
+ }
+ }
+
+ *p = (*m_pal)[( data & 0x80 ) ? fg : bg]; p++;
+ *p = (*m_pal)[( data & 0x40 ) ? fg : bg]; p++;
+ *p = (*m_pal)[( data & 0x20 ) ? fg : bg]; p++;
+ *p = (*m_pal)[( data & 0x10 ) ? fg : bg]; p++;
+ *p = (*m_pal)[( data & 0x08 ) ? fg : bg]; p++;
+ *p = (*m_pal)[( data & 0x04 ) ? fg : bg]; p++;
+ *p = (*m_pal)[( data & 0x02 ) ? fg : bg]; p++;
+ *p = (*m_pal)[( data & 0x01 ) ? fg : bg]; p++;
+ if (chr >= 0xc0 && chr <= 0xdf)
+ *p = (*m_pal)[( data & 0x01 ) ? fg : bg]; // 9th pixel col is a copy of col 8
+ else
+ *p = (*m_pal)[bg]; // 9th pixel col is just background
+ p++;
+
+ // Insert two extra scanlines in monochrome text mode to get 400 lines and support underline, needs verification on actual hardware.
+ // The technical manual says that the character box is 9x16 pixels in 80x25 character mode which equals 720x400 resolution but the
+ // CRTC calls back for only 350 lines. Assumption is that there is hardware adding these lines and that handles underlining. In color
+ // emulation text mode all 400 lines are called for in 80x25 and this mode does not support underlining according to the technical manual
+ if ( ra == 13 && (m_vmode & VM_MONO) )
+ {
+ uint16_t row = ra + (y / 14) * 16; // Calculate correct row number including the extra 2 lines per each row of characters
+ for ( int j = 0; j < 9; j++)
+ {
+ if (chr >= 0xb3 && chr <= 0xdf) // Handle the meta graphics characters
+ {
+ bitmap.pix32(row + 1, j + i * 9) = (*m_pal)[( data & (0x80 >> j) ) || (j == 8 && (data & 0x01)) ? fg : bg];
+ bitmap.pix32(row + 2, j + i * 9) = (*m_pal)[( data & (0x80 >> j) ) || (j == 8 && (data & 0x01)) ? fg : bg];
+ }
+ else
+ {
+ // Handle underline
+ bitmap.pix32(row + 1, j + i * 9) =(*m_pal)[( attr & ATTR_FOREG ) == ATTR_ULINE ? fg : bg];
+ bitmap.pix32(row + 2, j + i * 9) = (*m_pal)[bg];
+ }
+ }
+ }
+ }
+ }
+}
+
+//--------------------------------------------------------------------
+// Port definitions
+//--------------------------------------------------------------------
+static INPUT_PORTS_START( epc_mda )
+ PORT_START( "S1" )
+ PORT_DIPNAME( 0x01, 0x00, "Color emulation") PORT_DIPLOCATION("S1:1")
+ PORT_DIPSETTING( 0x00, "Disabled" )
+ PORT_DIPSETTING( 0x01, "Enabled" )
+ PORT_DIPUNUSED_DIPLOC(0x02, 0x02, "S1:2")
+
+ PORT_START( "MONITOR" )
+ PORT_CONFNAME( 0x01, 0x00, "Ericsson Monochrome HR Monitors") PORT_CHANGED_MEMBER( DEVICE_SELF, isa8_epc_mda_device, monitor_changed, 0 )
+ PORT_CONFSETTING( 0x00, "Amber 3111")
+ PORT_CONFSETTING( 0x01, "B&W 3712/3715")
+INPUT_PORTS_END
+
+INPUT_CHANGED_MEMBER( isa8_epc_mda_device::monitor_changed )
+{
+ if ((m_io_monitor->read() & 1) == 1)
+ {
+ m_pal = &m_371x_pal;
+ }
+ else
+ {
+ m_pal = &m_3111_pal;
+ }
+}
+
+ioport_constructor isa8_epc_mda_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( epc_mda );
+}
diff --git a/src/devices/bus/isa/mda.h b/src/devices/bus/isa/mda.h
index c8b259f1fb3..70daf9981ee 100644
--- a/src/devices/bus/isa/mda.h
+++ b/src/devices/bus/isa/mda.h
@@ -9,6 +9,7 @@
#include "machine/pc_lpt.h"
#include "video/mc6845.h"
#include "emupal.h"
+#include "screen.h"
//**************************************************************************
// TYPE DEFINITIONS
@@ -137,4 +138,86 @@ private:
// device type definition
DECLARE_DEVICE_TYPE(ISA8_EC1840_0002, isa8_ec1840_0002_device)
+// ======================> isa8_epc_mda_device
+
+class isa8_epc_mda_device :
+ public isa8_mda_device
+{
+public:
+ // construction/destruction
+ isa8_epc_mda_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ virtual DECLARE_READ8_MEMBER(io_read) override;
+ virtual DECLARE_WRITE8_MEMBER(io_write) override;
+
+ /* Monitor */
+ DECLARE_INPUT_CHANGED_MEMBER(monitor_changed);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+ virtual ioport_constructor device_input_ports() const override;
+
+private:
+ inline int get_xres();
+ inline int get_yres();
+ //virtual DECLARE_WRITE8_MEMBER(mode_control_w) override;
+
+ enum {
+ VM_COLS80 = 0x01,
+ VM_GRAPH = 0x02,
+ VM_HOR640 = 0x04,
+ VM_MONO = 0x08,
+ VM_VER400 = 0x10
+ };
+
+ enum {
+ MR1_COLS80 = 0x01,
+ MR1_GRAPH = 0x02,
+ MR1_VIDEO = 0x08,
+ MR1_HOR640 = 0x10,
+ MR1_BLINK = 0x20
+ };
+
+ enum {
+ MR2_COLEMU = 0x04,
+ MR2_CHRSET = 0x40,
+ MR2_VER400 = 0x80
+ };
+
+ enum {
+ ATTR_BLINK = 0x80,
+ ATTR_BACKG = 0x70,
+ ATTR_INTEN = 0x08,
+ ATTR_FOREG = 0x07,
+ ATTR_ULINE = 0x01,
+ };
+ virtual MC6845_UPDATE_ROW( crtc_update_row ) override;
+ //MC6845_UPDATE_ROW( mda_lowres_text_inten_update_row );
+ //MC6845_UPDATE_ROW( mda_lowres_text_blink_update_row );
+
+ std::unique_ptr<uint8_t[]> m_soft_chr_gen;
+ required_ioport m_s1;
+ uint8_t m_color_mode;
+ uint8_t m_mode_control2;
+ required_device<screen_device> m_screen;
+ required_ioport m_io_monitor;
+ required_region_ptr<uint8_t> m_chargen;
+
+ uint8_t m_vmode;
+ rgb_t (*m_pal)[4];
+ rgb_t m_3111_pal[4];
+ rgb_t m_371x_pal[4];
+ bool m_installed;
+ hd6845s_device *m_hd6845s;
+};
+
+// device type definition
+DECLARE_DEVICE_TYPE(ISA8_EPC_MDA, isa8_epc_mda_device)
+
#endif // MAME_BUS_ISA_MDA_H
diff --git a/src/devices/bus/isa/pcmidi.cpp b/src/devices/bus/isa/pcmidi.cpp
new file mode 100644
index 00000000000..ffd5c9cc33b
--- /dev/null
+++ b/src/devices/bus/isa/pcmidi.cpp
@@ -0,0 +1,262 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ PC MIDI Card
+ Copyright (C) 1989 Music Quest, Inc.
+ FCC ID: IH9MQ9
+
+ This is one of several Z8681-based MIDI cards by Music Quest. Its
+ interface is more or less compatible with the Roland MPU401.
+
+****************************************************************************
+
+Music Quest PC MIDI CARD IH9MQ9 component list:
+
+C1 : 2.2uf 50v electrolytic capacitor
+C2 : 100nf tantalum capacitor
+C3 : 100nf tantalum capacitor
+C4 : 100nf tantalum capacitor
+C5 : 100nf tantalum capacitor
+C6 : 100nf tantalum capacitor
+C7 : 100nf tantalum capacitor
+C9 : 100nf tantalum capacitor
+
+D1 : diode (IN4148 ?)
+Y1 : 12,000 MHz crystal 2 pin
+
+R1 : 15K ohm resistor +-5%
+R2 : 390 ohm resistor +-5%
+
+RP1 : 10K ohm Commoned (?) resistor network 2% SIP package (code used A103GA)
+RP2 : 220 ohm Commoned (?) resistor network 2% SIP package (code used B221GA)
+
+
+
+U1 : 74LS374N
+U2 : Zilog Z8 ROMLESS MCU Z0868112PSC
+U3 : 74LS139N
+U4 : 74LS74AN
+U5 : PAL-16L8-25N - read protected , unknown code
+U6 : OTP firmware rom chip compatible with 27C512 eproms/eeproms , 64kbyte
+U7 : HYUNDAI HY611ALP-10 or compatible 2K x8bits CMOS SRAM IC
+U8 : 74LS125AN
+U9 : 74LS374N
+U10 : 74LS374N
+U11 : SHARP PC900V or compatible photocoupler
+
+***************************************************************************/
+
+#include "emu.h"
+#include "pcmidi.h"
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(ISA8_PCMIDI, isa8_pcmidi_device, "isa_pcmidi", "Music Quest PC MIDI Card (IHQMQ9)")
+
+
+//**************************************************************************
+// DEVICE SETUP
+//**************************************************************************
+
+//-------------------------------------------------
+// isa8_pcmidi_device - constructor
+//-------------------------------------------------
+
+isa8_pcmidi_device::isa8_pcmidi_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, ISA8_PCMIDI, tag, owner, clock)
+ , device_isa8_card_interface(mconfig, *this)
+ , m_mpu(*this, "mpu")
+ , m_cmdlatch(*this, "cmdlatch")
+ , m_statlatch(*this, "statlatch")
+ , m_midiout(*this, "midiout")
+ , m_config(*this, "CONFIG")
+ , m_mpu_p3(0)
+ , m_host_irq(false)
+{
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void isa8_pcmidi_device::device_start()
+{
+ set_isa_device();
+
+ save_item(NAME(m_mpu_p3));
+ save_item(NAME(m_host_irq));
+}
+
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void isa8_pcmidi_device::device_reset()
+{
+ offs_t ioaddr = BIT(m_config->read(), 0) ? 0x300 : 0x330;
+ m_isa->install_device(ioaddr, ioaddr + 1,
+ read8sm_delegate(FUNC(isa8_pcmidi_device::host_r), this),
+ write8sm_delegate(FUNC(isa8_pcmidi_device::host_w), this));
+
+ set_host_irq(false);
+}
+
+
+//**************************************************************************
+// LATCHES AND IRQS
+//**************************************************************************
+
+//-------------------------------------------------
+// set_host_irq - update the host IRQ level
+//-------------------------------------------------
+
+void isa8_pcmidi_device::set_host_irq(bool state)
+{
+ if (m_host_irq != state)
+ {
+ m_host_irq = state;
+
+ ioport_value config = m_config->read();
+ if (!BIT(config, 1))
+ m_isa->irq3_w(state);
+ if (!BIT(config, 2))
+ m_isa->irq5_w(state);
+ if (!BIT(config, 3))
+ m_isa->irq7_w(state);
+ if (!BIT(config, 4))
+ m_isa->irq2_w(state);
+ }
+}
+
+
+//-------------------------------------------------
+// host_r - read from data or status port
+//-------------------------------------------------
+
+u8 isa8_pcmidi_device::host_r(offs_t offset)
+{
+ if (!machine().side_effects_disabled())
+ {
+ set_host_irq(false);
+ m_mpu->set_input_line(INPUT_LINE_IRQ1, ASSERT_LINE);
+ }
+ return m_statlatch->read();
+}
+
+
+//-------------------------------------------------
+// host_w - write to data or command port
+//-------------------------------------------------
+
+void isa8_pcmidi_device::host_w(offs_t offset, u8 data)
+{
+ m_cmdlatch->write(data);
+
+ // IRQs are latched and acknowledged internally
+ m_mpu->pulse_input_line(offset ? INPUT_LINE_IRQ0 : INPUT_LINE_IRQ2, attotime::zero);
+}
+
+
+//-------------------------------------------------
+// status_w - mailbox write from local processor
+//-------------------------------------------------
+
+void isa8_pcmidi_device::status_w(u8 data)
+{
+ m_statlatch->write(data);
+ if (!BIT(m_mpu_p3, 5))
+ {
+ set_host_irq(true);
+ m_mpu->set_input_line(INPUT_LINE_IRQ1, CLEAR_LINE);
+ }
+}
+
+
+//-------------------------------------------------
+// mpu_p3_w - write to output port
+//-------------------------------------------------
+
+void isa8_pcmidi_device::mpu_p3_w(u8 data)
+{
+ m_midiout->write_txd(BIT(data, 7));
+
+ // P36 = error LED output?
+
+ if (BIT(m_mpu_p3, 5) && !BIT(data, 5))
+ set_host_irq(false);
+
+ m_mpu_p3 = data;
+}
+
+
+//-------------------------------------------------
+// mpu_map - Z8681 address map
+//-------------------------------------------------
+
+void isa8_pcmidi_device::mpu_map(address_map &map)
+{
+ map(0x0000, 0x1fff).rom().region("microcode", 0);
+ map(0x6000, 0x7fff).rom().mirror(0x8000).region("microcode", 0);
+ map(0xa000, 0xa7ff).ram();
+ map(0xc000, 0xc000).mirror(0xff).r(m_cmdlatch, FUNC(generic_latch_8_device::read)).w(FUNC(isa8_pcmidi_device::status_w));
+}
+
+
+//**************************************************************************
+// DEVICE CONFIGURATION
+//**************************************************************************
+
+static INPUT_PORTS_START(isa_pcmidi)
+ PORT_START("CONFIG") // dual inline block of jumpers with idiosyncratic numbering
+ PORT_DIPNAME(0x01, 0x00, "I/O Address (P)") PORT_DIPLOCATION("J1:1")
+ PORT_DIPSETTING(0x01, "300")
+ PORT_DIPSETTING(0x00, "330")
+ PORT_DIPNAME(0x1e, 0x0e, "Interrupt") PORT_DIPLOCATION("J1:2,3,4,5")
+ PORT_DIPSETTING(0x0e, "IRQ2")
+ PORT_DIPSETTING(0x1c, "IRQ3")
+ PORT_DIPSETTING(0x1a, "IRQ5")
+ PORT_DIPSETTING(0x16, "IRQ7")
+INPUT_PORTS_END
+
+ioport_constructor isa8_pcmidi_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME(isa_pcmidi);
+}
+
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void isa8_pcmidi_device::device_add_mconfig(machine_config &config)
+{
+ Z8681(config, m_mpu, 12_MHz_XTAL);
+ m_mpu->set_addrmap(AS_PROGRAM, &isa8_pcmidi_device::mpu_map);
+ m_mpu->p3_out_cb().set(FUNC(isa8_pcmidi_device::mpu_p3_w));
+
+ GENERIC_LATCH_8(config, m_cmdlatch);
+ GENERIC_LATCH_8(config, m_statlatch);
+
+ MIDI_PORT(config, m_midiout, midiout_slot, "midiout");
+ MIDI_PORT(config, "midiin", midiin_slot, "midiin").rxd_handler().set_inputline(m_mpu, INPUT_LINE_IRQ3).invert();
+}
+
+
+//**************************************************************************
+// ROM DEFINITION
+//**************************************************************************
+
+ROM_START(isa_pcmidi)
+ ROM_REGION(0x10000, "microcode", 0)
+ ROM_LOAD("ih9mq9_firmware_v010.bin", 0x00000, 0x10000, CRC(d4cab098) SHA1(9446c4939de557f839a74ca6fe7f41df46752e25))
+ROM_END
+
+const tiny_rom_entry *isa8_pcmidi_device::device_rom_region() const
+{
+ return ROM_NAME(isa_pcmidi);
+}
diff --git a/src/devices/bus/isa/pcmidi.h b/src/devices/bus/isa/pcmidi.h
new file mode 100644
index 00000000000..90bca2b5752
--- /dev/null
+++ b/src/devices/bus/isa/pcmidi.h
@@ -0,0 +1,47 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+
+#ifndef MAME_BUS_ISA_PCMIDI_H
+#define MAME_BUS_ISA_PCMIDI_H
+
+#pragma once
+
+#include "isa.h"
+#include "bus/midi/midi.h"
+#include "cpu/z8/z8.h"
+#include "machine/gen_latch.h"
+
+class isa8_pcmidi_device : public device_t, public device_isa8_card_interface
+{
+public:
+ isa8_pcmidi_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ virtual void device_start() override;
+ virtual void device_reset() override;
+ virtual ioport_constructor device_input_ports() const override;
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+private:
+ void set_host_irq(bool state);
+ u8 host_r(offs_t offset);
+ void host_w(offs_t offset, u8 data);
+ void status_w(u8 data);
+ void mpu_p3_w(u8 data);
+
+ void mpu_map(address_map &map);
+
+ required_device<z8_device> m_mpu;
+ required_device<generic_latch_8_device> m_cmdlatch;
+ required_device<generic_latch_8_device> m_statlatch;
+ required_device<midi_port_device> m_midiout;
+ required_ioport m_config;
+
+ u8 m_mpu_p3;
+ bool m_host_irq;
+};
+
+DECLARE_DEVICE_TYPE(ISA8_PCMIDI, isa8_pcmidi_device)
+
+#endif // MAME_BUS_ISA_PCMIDI_H
diff --git a/src/devices/bus/isa/sb16.cpp b/src/devices/bus/isa/sb16.cpp
index 6bce4b4198c..f48cda320da 100644
--- a/src/devices/bus/isa/sb16.cpp
+++ b/src/devices/bus/isa/sb16.cpp
@@ -376,12 +376,12 @@ ROM_END
void sb16_lle_device::sb16_io(address_map &map)
{
map(0x0000, 0x0000).mirror(0xff00).rw(FUNC(sb16_lle_device::dsp_data_r), FUNC(sb16_lle_device::dsp_data_w));
-// AM_RANGE(0x0001, 0x0001) // MIDI related?
-// AM_RANGE(0x0002, 0x0002)
+// map(0x0001, 0x0001) // MIDI related?
+// map(0x0002, 0x0002)
map(0x0004, 0x0004).mirror(0xff00).rw(FUNC(sb16_lle_device::mode_r), FUNC(sb16_lle_device::mode_w));
map(0x0005, 0x0005).mirror(0xff00).rw(FUNC(sb16_lle_device::dac_ctrl_r), FUNC(sb16_lle_device::dac_ctrl_w));
map(0x0006, 0x0006).mirror(0xff00).r(FUNC(sb16_lle_device::dma_stat_r));
-// AM_RANGE(0x0007, 0x0007) // unknown
+// map(0x0007, 0x0007) // unknown
map(0x0008, 0x0008).mirror(0xff00).rw(FUNC(sb16_lle_device::ctrl8_r), FUNC(sb16_lle_device::ctrl8_w));
map(0x0009, 0x0009).mirror(0xff00).w(FUNC(sb16_lle_device::rate_w));
map(0x000A, 0x000A).mirror(0xff00).r(FUNC(sb16_lle_device::dma8_cnt_lo_r));
@@ -399,9 +399,9 @@ void sb16_lle_device::sb16_io(address_map &map)
map(0x001B, 0x001B).mirror(0xff00).r(FUNC(sb16_lle_device::adc_data_r));
map(0x001D, 0x001D).mirror(0xff00).w(FUNC(sb16_lle_device::dma8_w));
map(0x001F, 0x001F).mirror(0xff00).r(FUNC(sb16_lle_device::dma8_r));
-// AM_RANGE(0x0080, 0x0080) // ASP comms
-// AM_RANGE(0x0081, 0x0081)
-// AM_RANGE(0x0082, 0x0082)
+// map(0x0080, 0x0080) // ASP comms
+// map(0x0081, 0x0081)
+// map(0x0082, 0x0082)
}
const tiny_rom_entry *sb16_lle_device::device_rom_region() const
diff --git a/src/devices/bus/isa/stereo_fx.cpp b/src/devices/bus/isa/stereo_fx.cpp
index b23a0dbe454..71ea8dfbe25 100644
--- a/src/devices/bus/isa/stereo_fx.cpp
+++ b/src/devices/bus/isa/stereo_fx.cpp
@@ -98,7 +98,7 @@ void stereo_fx_device::stereo_fx_io(address_map &map)
map(0xFF00, 0xFF00).w(FUNC(stereo_fx_device::port00_w));
map(0xFF10, 0xFF10).w("rdac", FUNC(dac_byte_interface::data_w));
map(0xFF20, 0xFF20).w(FUNC(stereo_fx_device::port20_w));
- //AM_RANGE(0xFF30, 0xFF30) AM_WRITE() // used only on reset and undocumented cmd 0xc4
+ //map(0xFF30, 0xFF30).w(FUNC(stereo_fx_device::)); // used only on reset and undocumented cmd 0xc4
map(0xFF40, 0xFF40).rw(FUNC(stereo_fx_device::dev_dsp_data_r), FUNC(stereo_fx_device::dev_dsp_data_w));
map(0xFF50, 0xFF50).w(FUNC(stereo_fx_device::raise_drq_w));
map(0xFF60, 0xFF60).w(FUNC(stereo_fx_device::dev_host_irq_w));
diff --git a/src/devices/bus/megadrive/md_slot.h b/src/devices/bus/megadrive/md_slot.h
index 42fd2503f76..e891e5a1edb 100644
--- a/src/devices/bus/megadrive/md_slot.h
+++ b/src/devices/bus/megadrive/md_slot.h
@@ -106,8 +106,8 @@ public:
virtual int read_test() { return 0; } // used by Virtua Racing test
- /* this probably should do more, like make Genesis V2 'die' if the SEGA string is not written promptly */
- virtual DECLARE_WRITE16_MEMBER(write_tmss_bank) { m_device.logerror("Write to TMSS bank: offset %x data %x\n", 0xa14000 + (offset << 1), data); };
+ // this probably should do more, like make Genesis V2 'die' if the SEGA string is not written promptly
+ virtual DECLARE_WRITE16_MEMBER(write_tmss_bank) { device().logerror("Write to TMSS bank: offset %x data %x\n", 0xa14000 + (offset << 1), data); };
virtual void rom_alloc(size_t size, const char *tag);
virtual void nvram_alloc(size_t size);
diff --git a/src/devices/bus/megadrive/svp.cpp b/src/devices/bus/megadrive/svp.cpp
index fe4ae33536e..2070b27a9b7 100644
--- a/src/devices/bus/megadrive/svp.cpp
+++ b/src/devices/bus/megadrive/svp.cpp
@@ -320,8 +320,8 @@ INPUT_PORTS_END
void md_rom_svp_device::md_svp_ssp_map(address_map &map)
{
-// AM_RANGE(0x0000, 0x03ff) AM_READ(rom_read1)
-// AM_RANGE(0x0400, 0xffff) AM_READ(rom_read2)
+// map(0x0000, 0x03ff).r(FUNC(md_rom_svp_device::rom_read1));
+// map(0x0400, 0xffff).r(FUNC(md_rom_svp_device::rom_read2));
map(0x0000, 0x03ff).bankr("iram_svp");
map(0x0400, 0xffff).bankr("cart_svp");
}
diff --git a/src/devices/bus/rs232/ie15.cpp b/src/devices/bus/rs232/ie15.cpp
index 72520f87dea..a4f3ddcaceb 100644
--- a/src/devices/bus/rs232/ie15.cpp
+++ b/src/devices/bus/rs232/ie15.cpp
@@ -5,86 +5,46 @@
#include "ie15.h"
ie15_terminal_device::ie15_terminal_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : ie15_device(mconfig, SERIAL_TERMINAL_IE15, tag, owner, clock)
+ : device_t(mconfig, SERIAL_TERMINAL_IE15, tag, owner, clock)
, device_rs232_port_interface(mconfig, *this)
- , m_rs232_txbaud(*this, "RS232_TXBAUD")
- , m_rs232_rxbaud(*this, "RS232_RXBAUD")
- , m_rs232_startbits(*this, "RS232_STARTBITS")
- , m_rs232_databits(*this, "RS232_DATABITS")
- , m_rs232_parity(*this, "RS232_PARITY")
- , m_rs232_stopbits(*this, "RS232_STOPBITS")
+ , m_ie15(*this, "ie15")
{
}
-static INPUT_PORTS_START(ie15_terminal)
- PORT_INCLUDE(ie15)
-
- PORT_RS232_BAUD("RS232_TXBAUD", RS232_BAUD_9600, "TX Baud", ie15_terminal_device, update_serial)
- PORT_RS232_BAUD("RS232_RXBAUD", RS232_BAUD_9600, "RX Baud", ie15_terminal_device, update_serial)
- PORT_RS232_STARTBITS("RS232_STARTBITS", RS232_STARTBITS_1, "Start Bits", ie15_terminal_device, update_serial)
- PORT_RS232_DATABITS("RS232_DATABITS", RS232_DATABITS_8, "Data Bits", ie15_terminal_device, update_serial)
- PORT_RS232_PARITY("RS232_PARITY", RS232_PARITY_NONE, "Parity", ie15_terminal_device, update_serial)
- PORT_RS232_STOPBITS("RS232_STOPBITS", RS232_STOPBITS_1, "Stop Bits", ie15_terminal_device, update_serial)
-INPUT_PORTS_END
-
-ioport_constructor ie15_terminal_device::device_input_ports() const
-{
- return INPUT_PORTS_NAME(ie15_terminal);
-}
-
-WRITE_LINE_MEMBER(ie15_terminal_device::update_serial)
+void ie15_terminal_device::device_add_mconfig(machine_config &config)
{
- int startbits = convert_startbits(m_rs232_startbits->read());
- int databits = convert_databits(m_rs232_databits->read());
- parity_t parity = convert_parity(m_rs232_parity->read());
- stop_bits_t stopbits = convert_stopbits(m_rs232_stopbits->read());
+ IE15(config, m_ie15, 0);
- set_data_frame(startbits, databits, parity, stopbits);
-
- int txbaud = convert_baud(m_rs232_txbaud->read());
- set_tra_rate(txbaud);
-
- int rxbaud = convert_baud(m_rs232_rxbaud->read());
- set_rcv_rate(rxbaud);
-
- output_rxd(1);
-
- // TODO: make this configurable
- output_dcd(0);
- output_dsr(0);
- output_cts(0);
+ m_ie15->rs232_conn_txd_handler().set(FUNC(ie15_terminal_device::output_rxd));
+ //m_ie15->rs232_conn_rts_handler().set(FUNC(ie15_terminal_device::route_term_rts));
+ //m_ie15->rs232_conn_dtr_handler().set(FUNC(ie15_terminal_device::route_term_dtr));
}
-void ie15_terminal_device::tra_callback()
-{
- output_rxd(transmit_register_get_data_bit());
-}
+INPUT_PORTS_START(ie15_terminal)
+INPUT_PORTS_END
-void ie15_terminal_device::tra_complete()
+ioport_constructor ie15_terminal_device::device_input_ports() const
{
- ie15_device::tra_complete();
+ return INPUT_PORTS_NAME(ie15_terminal);
}
-void ie15_terminal_device::rcv_complete()
+WRITE_LINE_MEMBER(ie15_terminal_device::input_txd)
{
- receive_register_extract();
- term_write(get_received_char());
+ m_ie15->rs232_conn_rxd_w(state);
}
void ie15_terminal_device::device_start()
{
- ie15_device::device_start();
}
void ie15_terminal_device::device_reset()
{
- update_serial(0);
- ie15_device::device_reset();
-}
+ output_rxd(1);
-void ie15_terminal_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
-{
- ie15_device::device_timer(timer, id, param, ptr);
+ // TODO: make this configurable
+ output_dcd(0);
+ output_dsr(0);
+ output_cts(0);
}
DEFINE_DEVICE_TYPE(SERIAL_TERMINAL_IE15, ie15_terminal_device, "ie15_terminal", "IE15 Terminal")
diff --git a/src/devices/bus/rs232/ie15.h b/src/devices/bus/rs232/ie15.h
index c5c7ba3f6de..049a04c5a4e 100644
--- a/src/devices/bus/rs232/ie15.h
+++ b/src/devices/bus/rs232/ie15.h
@@ -10,33 +10,21 @@
#include "machine/ie15.h"
-class ie15_terminal_device : public ie15_device,
- public device_rs232_port_interface
+class ie15_terminal_device : public device_t, public device_rs232_port_interface
{
public:
ie15_terminal_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE_LINE_MEMBER( input_txd ) override { ie15_device::serial_rx_callback(state); }
-
- DECLARE_WRITE_LINE_MEMBER(update_serial);
+ virtual DECLARE_WRITE_LINE_MEMBER( input_txd ) override;
protected:
- virtual ioport_constructor device_input_ports() const override;
virtual void device_start() override;
virtual void device_reset() override;
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
-
- virtual void tra_callback() override;
- virtual void tra_complete() override;
- virtual void rcv_complete() override;
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual ioport_constructor device_input_ports() const override;
private:
- required_ioport m_rs232_txbaud;
- required_ioport m_rs232_rxbaud;
- required_ioport m_rs232_startbits;
- required_ioport m_rs232_databits;
- required_ioport m_rs232_parity;
- required_ioport m_rs232_stopbits;
+ required_device<ie15_device> m_ie15;
};
DECLARE_DEVICE_TYPE(SERIAL_TERMINAL_IE15, ie15_terminal_device)
diff --git a/src/devices/bus/rs232/rs232.cpp b/src/devices/bus/rs232/rs232.cpp
index 1db03002775..1c71fc9afca 100644
--- a/src/devices/bus/rs232/rs232.cpp
+++ b/src/devices/bus/rs232/rs232.cpp
@@ -93,6 +93,16 @@ void rs232_port_device::device_resolve_objects()
m_txc_handler.resolve_safe();
}
+void rs232_port_device::device_reset()
+{
+ m_rxd_handler(m_rxd);
+ m_dcd_handler(m_dcd);
+ m_dsr_handler(m_dsr);
+ m_ri_handler(m_ri);
+ m_si_handler(m_si);
+ m_cts_handler(m_cts);
+}
+
void rs232_port_device::device_start()
{
save_item(NAME(m_rxd));
@@ -110,13 +120,6 @@ void rs232_port_device::device_start()
m_ri = 1;
m_si = 1;
m_cts = 1;
-
- m_rxd_handler(1);
- m_dcd_handler(1);
- m_dsr_handler(1);
- m_ri_handler(1);
- m_si_handler(1);
- m_cts_handler(1);
}
WRITE_LINE_MEMBER( rs232_port_device::write_txd )
diff --git a/src/devices/bus/rs232/rs232.h b/src/devices/bus/rs232/rs232.h
index 781fb95d072..907afbf3091 100644
--- a/src/devices/bus/rs232/rs232.h
+++ b/src/devices/bus/rs232/rs232.h
@@ -141,6 +141,7 @@ protected:
rs232_port_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_resolve_objects() override;
+ virtual void device_reset() override;
virtual void device_start() override;
virtual void device_config_complete() override;
diff --git a/src/devices/bus/sat_ctrl/multitap.cpp b/src/devices/bus/sat_ctrl/multitap.cpp
index 76fd4c3094a..71eacdf0053 100644
--- a/src/devices/bus/sat_ctrl/multitap.cpp
+++ b/src/devices/bus/sat_ctrl/multitap.cpp
@@ -22,10 +22,6 @@ DEFINE_DEVICE_TYPE(SATURN_MULTITAP, saturn_multitap_device, "saturn_multitap", "
// LIVE DEVICE
//**************************************************************************
-//-------------------------------------------------
-// saturn_multitap_device - constructor
-//-------------------------------------------------
-
saturn_multitap_device::saturn_multitap_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, SATURN_MULTITAP, tag, owner, clock)
, device_saturn_control_port_interface(mconfig, *this)
@@ -34,49 +30,23 @@ saturn_multitap_device::saturn_multitap_device(const machine_config &mconfig, co
}
-//-------------------------------------------------
-// device_start - device-specific startup
-//-------------------------------------------------
-
void saturn_multitap_device::device_start()
{
- for (int i = 0; i < 6; i++)
- m_subctrl_port[i]->device_start();
}
-//-------------------------------------------------
-// device_reset - device-specific reset
-//-------------------------------------------------
-
-void saturn_multitap_device::device_reset()
+void saturn_multitap_device::device_add_mconfig(machine_config &config)
{
+ for (auto &port : m_subctrl_port)
+ SATURN_CONTROL_PORT(config, port, saturn_joys, "joypad");
}
-//-------------------------------------------------
-// read_ctrl
-//-------------------------------------------------
uint8_t saturn_multitap_device::read_ctrl(uint8_t offset)
{
return m_subctrl_port[offset < 12 ? (offset >> 1) : 0]->read_ctrl(offset & 1);
}
-//-------------------------------------------------
-// read_id
-//-------------------------------------------------
-
uint8_t saturn_multitap_device::read_id(int idx)
{
return m_subctrl_port[idx < 6 ? idx : 0]->read_id(0);
}
-
-
-void saturn_multitap_device::device_add_mconfig(machine_config &config)
-{
- SATURN_CONTROL_PORT(config, m_subctrl_port[0], saturn_joys, "joypad");
- SATURN_CONTROL_PORT(config, m_subctrl_port[1], saturn_joys, "joypad");
- SATURN_CONTROL_PORT(config, m_subctrl_port[2], saturn_joys, "joypad");
- SATURN_CONTROL_PORT(config, m_subctrl_port[3], saturn_joys, "joypad");
- SATURN_CONTROL_PORT(config, m_subctrl_port[4], saturn_joys, "joypad");
- SATURN_CONTROL_PORT(config, m_subctrl_port[5], saturn_joys, "joypad");
-}
diff --git a/src/devices/bus/sat_ctrl/multitap.h b/src/devices/bus/sat_ctrl/multitap.h
index c90b559d96c..5aa98dacf3b 100644
--- a/src/devices/bus/sat_ctrl/multitap.h
+++ b/src/devices/bus/sat_ctrl/multitap.h
@@ -15,15 +15,11 @@
#include "ctrl.h"
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
-// ======================> saturn_multitap_device
-
-class saturn_multitap_device : public device_t,
- public device_saturn_control_port_interface
+class saturn_multitap_device : public device_t, public device_saturn_control_port_interface
{
public:
// construction/destruction
@@ -32,9 +28,6 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
- virtual void device_reset() override;
-
- // optional information overrides
virtual void device_add_mconfig(machine_config &config) override;
// device_saturn_control_port_interface overrides
diff --git a/src/devices/bus/sat_ctrl/segatap.cpp b/src/devices/bus/sat_ctrl/segatap.cpp
index e36400125fe..baaa52071ed 100644
--- a/src/devices/bus/sat_ctrl/segatap.cpp
+++ b/src/devices/bus/sat_ctrl/segatap.cpp
@@ -10,7 +10,6 @@
#include "segatap.h"
-
//**************************************************************************
// DEVICE DEFINITIONS
//**************************************************************************
@@ -22,10 +21,6 @@ DEFINE_DEVICE_TYPE(SATURN_SEGATAP, saturn_segatap_device, "saturn_segatap", "sat
// LIVE DEVICE
//**************************************************************************
-//-------------------------------------------------
-// saturn_segatap_device - constructor
-//-------------------------------------------------
-
saturn_segatap_device::saturn_segatap_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, SATURN_SEGATAP, tag, owner, clock)
, device_saturn_control_port_interface(mconfig, *this)
@@ -34,47 +29,23 @@ saturn_segatap_device::saturn_segatap_device(const machine_config &mconfig, cons
}
-//-------------------------------------------------
-// device_start - device-specific startup
-//-------------------------------------------------
-
void saturn_segatap_device::device_start()
{
- for (int i = 0; i < 4; i++)
- m_subctrl_port[i]->device_start();
}
-//-------------------------------------------------
-// device_reset - device-specific reset
-//-------------------------------------------------
-
-void saturn_segatap_device::device_reset()
+void saturn_segatap_device::device_add_mconfig(machine_config &config)
{
+ for (auto &port : m_subctrl_port)
+ SATURN_CONTROL_PORT(config, port, saturn_joys, "joypad");
}
-//-------------------------------------------------
-// read_ctrl
-//-------------------------------------------------
uint8_t saturn_segatap_device::read_ctrl(uint8_t offset)
{
return m_subctrl_port[offset < 8 ? (offset >> 1) : 0]->read_ctrl(offset & 1);
}
-//-------------------------------------------------
-// read_id
-//-------------------------------------------------
-
uint8_t saturn_segatap_device::read_id(int idx)
{
return m_subctrl_port[idx < 4 ? idx : 0]->read_id(0);
}
-
-
-void saturn_segatap_device::device_add_mconfig(machine_config &config)
-{
- SATURN_CONTROL_PORT(config, m_subctrl_port[0], saturn_joys, "joypad");
- SATURN_CONTROL_PORT(config, m_subctrl_port[1], saturn_joys, "joypad");
- SATURN_CONTROL_PORT(config, m_subctrl_port[2], saturn_joys, "joypad");
- SATURN_CONTROL_PORT(config, m_subctrl_port[3], saturn_joys, "joypad");
-}
diff --git a/src/devices/bus/sat_ctrl/segatap.h b/src/devices/bus/sat_ctrl/segatap.h
index 987699e0a5a..799d4d8356a 100644
--- a/src/devices/bus/sat_ctrl/segatap.h
+++ b/src/devices/bus/sat_ctrl/segatap.h
@@ -20,10 +20,7 @@
// TYPE DEFINITIONS
//**************************************************************************
-// ======================> saturn_segatap_device
-
-class saturn_segatap_device : public device_t,
- public device_saturn_control_port_interface
+class saturn_segatap_device : public device_t, public device_saturn_control_port_interface
{
public:
// construction/destruction
@@ -32,9 +29,6 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
- virtual void device_reset() override;
-
- // optional information overrides
virtual void device_add_mconfig(machine_config &config) override;
// device_saturn_control_port_interface overrides
diff --git a/src/devices/bus/ss50/dc5.cpp b/src/devices/bus/ss50/dc5.cpp
index 52bf89a9976..149e99967ed 100644
--- a/src/devices/bus/ss50/dc5.cpp
+++ b/src/devices/bus/ss50/dc5.cpp
@@ -132,12 +132,12 @@ static INPUT_PORTS_START( dc5 )
// 3.5" HD - 2.0MHz
// 8" 360rpm - 2.4MHz
PORT_START("expected_clock")
- PORT_CONFNAME(0xffffff, 0, "FDC expected clock rate")
+ PORT_CONFNAME(0xf, 0, "FDC expected clock rate")
PORT_CONFSETTING(0, "-")
- PORT_CONFSETTING(1000000, "1.0 MHz")
- PORT_CONFSETTING(1200000, "1.2 MHz")
- PORT_CONFSETTING(2000000, "2.0 MHz")
- PORT_CONFSETTING(2400000, "2.4 MHz")
+ PORT_CONFSETTING(12, "1.0 MHz")
+ PORT_CONFSETTING(10, "1.2 MHz")
+ PORT_CONFSETTING(6, "2.0 MHz")
+ PORT_CONFSETTING(5, "2.4 MHz")
// It is not uncommon to see drivers using bit 7 of the control
// register as a side selection. This conflicts with the DC5, and
@@ -235,7 +235,7 @@ static void flex_floppies(device_slot_interface &device)
void ss50_dc5_device::device_add_mconfig(machine_config &config)
{
- WD2797(config, m_fdc, 1_MHz_XTAL);
+ WD2797(config, m_fdc, 12_MHz_XTAL / 12); // divider is selectable
FLOPPY_CONNECTOR(config, "fdc:0", flex_floppies, "sssd35", ss50_dc5_device::floppy_formats).enable_sound(true);
FLOPPY_CONNECTOR(config, "fdc:1", flex_floppies, "sssd35", ss50_dc5_device::floppy_formats).enable_sound(true);
FLOPPY_CONNECTOR(config, "fdc:2", flex_floppies, "sssd35", ss50_dc5_device::floppy_formats).enable_sound(true);
@@ -250,7 +250,7 @@ void ss50_dc5_device::device_reset()
{
// Initialize to the expected rate if any, otherwise to 1MHz.
uint32_t clock = m_expected_clock->read();
- clock = clock ? clock : 1000000;
+ clock = (12_MHz_XTAL / (clock ? clock : 12)).value();
m_fdc->set_unscaled_clock(clock);
m_fdc_clock = clock;
@@ -661,7 +661,7 @@ void ss50_dc5_device::register_write(offs_t offset, uint8_t data)
// Osc20 and osc12 control a clock divider.
uint8_t osc12 = BIT(data, 2);
uint8_t osc20 = BIT(data, 3);
- uint32_t clock = 1000000;
+ uint32_t clock = 12'000'000 / 12;
// Note: supporting 2.4MHz is here is an extension to
// the published DC5 design, and appears necessary to
@@ -676,17 +676,17 @@ void ss50_dc5_device::register_write(offs_t offset, uint8_t data)
// 8" drives run at 300rpm; is there an error in the
// rates elsewhere?
if (osc20 && osc12)
- clock = 2400000;
+ clock = 12'000'000 / 5;
else if (osc20)
- clock = 2000000;
+ clock = 12'000'000 / 6;
else if (osc12)
- clock = 1200000;
+ clock = 12'000'000 / 10;
// Compare to the expected clock rate if any.
uint32_t expected_clock = m_expected_clock->read();
- if (expected_clock && clock != expected_clock)
+ if (expected_clock && clock != 12'000'000 / expected_clock)
{
- logerror("%s Unexpected clock rate of %dHz expected %dHz.\n", machine().describe_context(), clock, expected_clock);
+ logerror("%s Unexpected clock rate of %dHz expected %dHz.\n", machine().describe_context(), clock, 12'000'000 / expected_clock);
clock = expected_clock;
}
diff --git a/src/devices/bus/ss50/mps2.cpp b/src/devices/bus/ss50/mps2.cpp
index 7211aea1e3e..30bdd9e5a64 100644
--- a/src/devices/bus/ss50/mps2.cpp
+++ b/src/devices/bus/ss50/mps2.cpp
@@ -134,20 +134,24 @@ void ss50_mps2_device::device_add_mconfig(machine_config &config)
{
ACIA6850(config, m_acia_upper, 0);
m_acia_upper->txd_handler().set("rs232_upper", FUNC(rs232_port_device::write_txd));
- //m_acia_upper->rts_handler().set(FUNC(ss50_mps2_device::reader_control_w));
+ m_acia_upper->rts_handler().set("rs232_upper", FUNC(rs232_port_device::write_rts));
m_acia_upper->irq_handler().set("irq", FUNC(input_merger_device::in_w<0>));
rs232_port_device &rs232_upper(RS232_PORT(config, "rs232_upper", default_rs232_devices, "terminal"));
rs232_upper.rxd_handler().set(m_acia_upper, FUNC(acia6850_device::write_rxd));
+ rs232_upper.cts_handler().set(m_acia_upper, FUNC(acia6850_device::write_cts));
+ rs232_upper.dcd_handler().set(m_acia_upper, FUNC(acia6850_device::write_dcd));
rs232_upper.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal_upper));
ACIA6850(config, m_acia_lower, 0);
m_acia_lower->txd_handler().set("rs232_lower", FUNC(rs232_port_device::write_txd));
- //m_acia_lower->rts_handler().set(FUNC(ss50_mps2_device::reader_control_w));
+ m_acia_lower->rts_handler().set("rs232_lower", FUNC(rs232_port_device::write_rts));
m_acia_lower->irq_handler().set("irq", FUNC(input_merger_device::in_w<1>));
rs232_port_device &rs232_lower(RS232_PORT(config, "rs232_lower", default_rs232_devices, "terminal"));
rs232_lower.rxd_handler().set(m_acia_lower, FUNC(acia6850_device::write_rxd));
+ rs232_lower.cts_handler().set(m_acia_lower, FUNC(acia6850_device::write_cts));
+ rs232_lower.dcd_handler().set(m_acia_lower, FUNC(acia6850_device::write_dcd));
rs232_lower.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal_lower));
INPUT_MERGER_ANY_HIGH(config, "irq").output_handler().set(FUNC(ss50_mps2_device::write_irq));
diff --git a/src/devices/bus/vme/vme_fcisio.cpp b/src/devices/bus/vme/vme_fcisio.cpp
index 711231b7901..ff13b51fd07 100644
--- a/src/devices/bus/vme/vme_fcisio.cpp
+++ b/src/devices/bus/vme/vme_fcisio.cpp
@@ -172,7 +172,7 @@ void vme_fcisio1_card_device::fcisio1_mem(address_map &map)
map(0xe60000, 0xe601ff).rw("duscc3", FUNC(duscc68562_device::read), FUNC(duscc68562_device::write)).umask16(0x00ff);
map(0xe80000, 0xe80dff).rw("pit", FUNC(pit68230_device::read), FUNC(pit68230_device::write)).umask16(0x00ff);
map(0xf00000, 0xf7ffff).rom(); /* System EPROM Area 32Kb DEBUGGER supplied */
-// AM_RANGE (0xc40000, 0xc800ff) AM_READWRITE8 (not_implemented_r, not_implemented_w, 0xffff) /* Dummy mapping af address area to display message */
+// map(0xc40000, 0xc800ff).rw(FUNC(vme_fcisio1_card_device::not_implemented_r), FUNC(vme_fcisio1_card_device::not_implemented_w)); /* Dummy mapping af address area to display message */
}
/* ROM definitions */
diff --git a/src/devices/bus/vme/vme_fcscsi.cpp b/src/devices/bus/vme/vme_fcscsi.cpp
index 7c76080caea..47fcd376ce2 100644
--- a/src/devices/bus/vme/vme_fcscsi.cpp
+++ b/src/devices/bus/vme/vme_fcscsi.cpp
@@ -193,7 +193,7 @@ void vme_fcscsi1_card_device::fcscsi1_mem(address_map &map)
map(0x002000, 0x01ffff).ram(); /* Dual Ported RAM */
map(0xe00000, 0xe7ffff).rom(); /* System EPROM Area 32Kb DEBUGGER supplied */
map(0xd00000, 0xd0003f).rw("pit", FUNC(pit68230_device::read), FUNC(pit68230_device::write)).umask16(0x00ff);
-// AM_RANGE (0xc40000, 0xc4001f) AM_DEVREADWRITE8("scsi", ncr5386_device, read, write, 0x00ff) /* SCSI Controller interface - device support not yet available*/
+// map(0xc40000, 0xc4001f).rw("scsi", FUNC(ncr5386_device::read), FUNC(ncr5386_device::write)).umask16(0x00ff); /* SCSI Controller interface - device support not yet available*/
map(0xc40000, 0xc4001f).rw(FUNC(vme_fcscsi1_card_device::scsi_r), FUNC(vme_fcscsi1_card_device::scsi_w)).umask16(0x00ff);
map(0xc80000, 0xc800ff).rw("mc68450", FUNC(hd63450_device::read), FUNC(hd63450_device::write)); /* DMA Controller interface */
map(0xcc0000, 0xcc0007).rw("fdc", FUNC(wd1772_device::read), FUNC(wd1772_device::write)).umask16(0x00ff); /* Floppy Controller interface */
diff --git a/src/devices/bus/vme/vme_hcpu30.cpp b/src/devices/bus/vme/vme_hcpu30.cpp
index 57994820f7c..c101c53fbe4 100644
--- a/src/devices/bus/vme/vme_hcpu30.cpp
+++ b/src/devices/bus/vme/vme_hcpu30.cpp
@@ -58,7 +58,7 @@ void vme_hcpu30_card_device::hcpu30_mem(address_map &map)
map(0x00000000, 0x00000007).ram().w(FUNC(vme_hcpu30_card_device::bootvect_w)); /* After first write we act as RAM */
map(0x00000000, 0x00000007).rom().r(FUNC(vme_hcpu30_card_device::bootvect_r)); /* ROM mirror just during reset */
map(0x00000008, 0x001fffff).ram(); // local bus DRAM, 4MB
- map(0x00200000, 0x00201fff).ram(); // AM_SHARE("iocpu")
+ map(0x00200000, 0x00201fff).ram(); // .share("iocpu");
map(0xff000000, 0xff007fff).rom().mirror(0x8000).region("user1", 0);
map(0xff020000, 0xff027fff).ram().mirror(0x8000); // SRAM 32KB
map(0xffff8000, 0xffff8fff).unmaprw(); // shared memory with iocpu
diff --git a/src/devices/bus/vme/vme_mvme350.cpp b/src/devices/bus/vme/vme_mvme350.cpp
index b433620b6fe..7241680c4cc 100644
--- a/src/devices/bus/vme/vme_mvme350.cpp
+++ b/src/devices/bus/vme/vme_mvme350.cpp
@@ -175,8 +175,8 @@ void vme_mvme350_card_device::mvme350_mem(address_map &map)
map(0x060000, 0x06001f).ram(); /* Area is cleared on start */
map(0x080000, 0x080035).rw("pit", FUNC(pit68230_device::read), FUNC(pit68230_device::write)).umask16(0x00ff); /* PIT ?*/
#endif
-//AM_RANGE(0x100000, 0xfeffff) AM_READWRITE(vme_a24_r, vme_a24_w) /* VMEbus Rev B addresses (24 bits) - not verified */
-//AM_RANGE(0xff0000, 0xffffff) AM_READWRITE(vme_a16_r, vme_a16_w) /* VMEbus Rev B addresses (16 bits) - not verified */
+//map(0x100000, 0xfeffff).rw(FUNC(vme_mvme350_card_device::vme_a24_r), FUNC(vme_mvme350_card_device::vme_a24_w)); /* VMEbus Rev B addresses (24 bits) - not verified */
+//map(0xff0000, 0xffffff).rw(FUNC(vme_mvme350_card_device::vme_a16_r), FUNC(vme_mvme350_card_device::vme_a16_w)); /* VMEbus Rev B addresses (16 bits) - not verified */
}
ROM_START( mvme350 )
diff --git a/src/devices/bus/wangpc/rtc.cpp b/src/devices/bus/wangpc/rtc.cpp
index 4512939003f..21e395d031b 100644
--- a/src/devices/bus/wangpc/rtc.cpp
+++ b/src/devices/bus/wangpc/rtc.cpp
@@ -73,19 +73,19 @@ void wangpc_rtc_device::wangpc_rtc_io(address_map &map)
map(0x00, 0x03).rw(m_sio, FUNC(z80sio0_device::cd_ba_r), FUNC(z80sio0_device::cd_ba_w));
map(0x10, 0x1f).rw(AM9517A_TAG, FUNC(am9517a_device::read), FUNC(am9517a_device::write));
map(0x20, 0x23).rw(m_ctc0, FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
- map(0x30, 0x30); //AM_WRITE(clear_char_w)
- map(0x31, 0x31); //AM_WRITE(set_char_w)
- map(0x40, 0x40).portr("SW1"); //AM_WRITE(control_w)
- map(0x44, 0x44); //AM_READ(i8086_status_r) AM_WRITE(reset_w)
- map(0x48, 0x48); //AM_WRITE(dte_ready_w)
- map(0x4c, 0x4c); //AM_READWRITE(8232_acu_r, 8232_acu_w)
- map(0x50, 0x50); //AM_READ(outbound_data_r)
- map(0x51, 0x52); //AM_WRITE(status_w)
- map(0x54, 0x54); //AM_WRITE(enable_inbound_data_w)
- map(0x51, 0x52); //AM_WRITE(inbound_data_w)
+ map(0x30, 0x30); //.w(FUNC(wangpc_rtc_device::clear_char_w));
+ map(0x31, 0x31); //.w(FUNC(wangpc_rtc_device::set_char_w));
+ map(0x40, 0x40).portr("SW1"); //.w(FUNC(wangpc_rtc_device::control_w));
+ map(0x44, 0x44); //.rw(FUNC(wangpc_rtc_device::i8086_status_r), FUNC(wangpc_rtc_device::reset_w));
+ map(0x48, 0x48); //.w(FUNC(wangpc_rtc_device::dte_ready_w));
+ map(0x4c, 0x4c); //.rw(FUNC(wangpc_rtc_device::8232_acu_r), FUNC(wangpc_rtc_device::8232_acu_w));
+ map(0x50, 0x50); //.r(FUNC(wangpc_rtc_device::outbound_data_r));
+ map(0x51, 0x52); //.w(FUNC(wangpc_rtc_device::status_w));
+ map(0x54, 0x54); //.w(FUNC(wangpc_rtc_device::enable_inbound_data_w));
+ map(0x51, 0x52); //.w(FUNC(wangpc_rtc_device::inbound_data_w));
map(0x60, 0x63).rw(m_ctc1, FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
- map(0x70, 0x70); //AM_READWRITE(led_toggle_r, odd_parity_w)
- map(0x71, 0x71); //AM_WRITE(even_parity_w)
+ map(0x70, 0x70); //.rw(FUNC(wangpc_rtc_device::led_toggle_r), FUNC(wangpc_rtc_device::odd_parity_w));
+ map(0x71, 0x71); //.w(FUNC(wangpc_rtc_device::even_parity_w));
}
diff --git a/src/devices/cpu/alto2/alto2cpu.cpp b/src/devices/cpu/alto2/alto2cpu.cpp
index 5b7f58e0aca..57ed58ddc03 100644
--- a/src/devices/cpu/alto2/alto2cpu.cpp
+++ b/src/devices/cpu/alto2/alto2cpu.cpp
@@ -95,10 +95,10 @@ void alto2_cpu_device::iomem_map(address_map &map)
map(0177205, 0177233).rw(FUNC(alto2_cpu_device::noop_r), FUNC(alto2_cpu_device::noop_w)); // UNUSED RANGE
map(0177234, 0177237).rw(FUNC(alto2_cpu_device::noop_r), FUNC(alto2_cpu_device::noop_w)); // { Experimental cursor control }
map(0177240, 0177257).rw(FUNC(alto2_cpu_device::noop_r), FUNC(alto2_cpu_device::noop_w)); // { Alto-II debugger }
-// AM_RANGE(0177244, 0177247) AM_READWRITE( noop_r, noop_w ) // { Graphics keyboard }
+// map(0177244, 0177247).rw(FUNC(alto2_cpu_device::noop_r), FUNC(alto2_cpu_device::noop_w)); // { Graphics keyboard }
map(0177260, 0177377).rw(FUNC(alto2_cpu_device::noop_r), FUNC(alto2_cpu_device::noop_w)); // UNUSED RANGE
// page 0377
-// AM_RANGE(0177400, 0177405) AM_READWRITE( noop_r, noop_w ) // { Maxc2 maintenance interface }
+// map(0177400, 0177405).rw(FUNC(alto2_cpu_device::noop_r), FUNC(alto2_cpu_device::noop_w)); // { Maxc2 maintenance interface }
map(0177400, 0177400).rw(FUNC(alto2_cpu_device::noop_r), FUNC(alto2_cpu_device::noop_w)); // { Alto DLS input }
map(0177401, 0177417).rw(FUNC(alto2_cpu_device::noop_r), FUNC(alto2_cpu_device::noop_w)); // UNUSED RANGE
map(0177420, 0177420).rw(FUNC(alto2_cpu_device::noop_r), FUNC(alto2_cpu_device::noop_w)); // { "" }
diff --git a/src/devices/cpu/dsp56156/dsp56156.cpp b/src/devices/cpu/dsp56156/dsp56156.cpp
index a308e5329bc..b6c5b4fd672 100644
--- a/src/devices/cpu/dsp56156/dsp56156.cpp
+++ b/src/devices/cpu/dsp56156/dsp56156.cpp
@@ -112,7 +112,7 @@ enum
void dsp56156_device::dsp56156_program_map(address_map &map)
{
map(0x0000, 0x07ff).ram().share("dsk56156_program_ram"); /* 1-5 */
-// AM_RANGE(0x2f00,0x2fff) AM_ROM /* 1-5 PROM reserved memory. Is this the right spot for it? */
+// map(0x2f00, 0x2fff).rom(); /* 1-5 PROM reserved memory. Is this the right spot for it? */
}
void dsp56156_device::dsp56156_x_data_map(address_map &map)
diff --git a/src/devices/cpu/h8/h83337.cpp b/src/devices/cpu/h8/h83337.cpp
index 554242297d0..b3a386835f3 100644
--- a/src/devices/cpu/h8/h83337.cpp
+++ b/src/devices/cpu/h8/h83337.cpp
@@ -61,9 +61,9 @@ void h83337_device::map(address_map &map)
map(0xff90, 0xff90).rw("timer16:0", FUNC(h8_timer16_channel_device::tier_r), FUNC(h8_timer16_channel_device::tier_w));
map(0xff91, 0xff91).rw("timer16:0", FUNC(h8_timer16_channel_device::tsr_r), FUNC(h8_timer16_channel_device::tsr_w));
map(0xff92, 0xff93).rw("timer16:0", FUNC(h8_timer16_channel_device::tcnt_r), FUNC(h8_timer16_channel_device::tcnt_w));
-// AM_RANGE(0xff94, 0xff95) AM_DEVREADWRITE( "timer16:0", h8_timer16_channel_device, ocr_r, ocr_w )
+// map(0xff94, 0xff95).rw("timer16:0", FUNC(h8_timer16_channel_device::ocr_r, FUNC(h8_timer16_channel_device:ocr_w));
map(0xff96, 0xff96).rw("timer16:0", FUNC(h8_timer16_channel_device::tcr_r), FUNC(h8_timer16_channel_device::tcr_w));
-// AM_RANGE(0xff96, 0xff97) AM_DEVREADWRITE8("timer16:0", h8_timer16_channel_device, tocr_r, tocr_w, 0x00ff)
+// map(0xff97, 0xff97).rw("timer16:0", FUNC(h8_timer16_channel_device::tocr_r, FUNC(h8_timer16_channel_device:tocr_w));
map(0xff98, 0xff9f).r("timer16:0", FUNC(h8_timer16_channel_device::tgr_r));
map(0xffa8, 0xffa9).rw("watchdog", FUNC(h8_watchdog_device::wd_r), FUNC(h8_watchdog_device::wd_w));
diff --git a/src/devices/cpu/i386/i386segs.hxx b/src/devices/cpu/i386/i386segs.hxx
index 0b01df58520..c4f3f351ae4 100644
--- a/src/devices/cpu/i386/i386segs.hxx
+++ b/src/devices/cpu/i386/i386segs.hxx
@@ -401,6 +401,8 @@ void i386_device::i386_trap(int irq, int irq_gate, int trap_level)
int SetRPL;
m_lock = false;
+ m_cycles -= 4; // TODO: subtract correct number of cycles
+
if( !(PROTECTED_MODE) )
{
/* 16-bit */
diff --git a/src/devices/cpu/i8089/i8089.cpp b/src/devices/cpu/i8089/i8089.cpp
index 7e9371de36c..7cc3420a619 100644
--- a/src/devices/cpu/i8089/i8089.cpp
+++ b/src/devices/cpu/i8089/i8089.cpp
@@ -23,7 +23,7 @@
// DEVICE DEFINITIONS
//**************************************************************************
-DEFINE_DEVICE_TYPE(I8089, i8089_device, "i8089", "Intel I8089")
+DEFINE_DEVICE_TYPE(I8089, i8089_device, "i8089", "Intel 8089 I/O Processor")
//**************************************************************************
diff --git a/src/devices/cpu/i86/i186.cpp b/src/devices/cpu/i86/i186.cpp
index e20db304930..4145ceb06b4 100644
--- a/src/devices/cpu/i86/i186.cpp
+++ b/src/devices/cpu/i86/i186.cpp
@@ -118,8 +118,8 @@ const uint8_t i80186_cpu_device::m_i80186_timing[] =
33, /* (80186) BOUND */
};
-DEFINE_DEVICE_TYPE(I80186, i80186_cpu_device, "i80186", "Intel I80186")
-DEFINE_DEVICE_TYPE(I80188, i80188_cpu_device, "i80188", "Intel I80188")
+DEFINE_DEVICE_TYPE(I80186, i80186_cpu_device, "i80186", "Intel 80186")
+DEFINE_DEVICE_TYPE(I80188, i80188_cpu_device, "i80188", "Intel 80188")
i80188_cpu_device::i80188_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: i80186_cpu_device(mconfig, I80188, tag, owner, clock, 8)
diff --git a/src/devices/cpu/i86/i286.cpp b/src/devices/cpu/i86/i286.cpp
index 5ef63380888..4bf1adcc008 100644
--- a/src/devices/cpu/i86/i286.cpp
+++ b/src/devices/cpu/i86/i286.cpp
@@ -165,7 +165,7 @@ const uint8_t i80286_cpu_device::m_i80286_timing[] =
13, /* (80186) BOUND */
};
-DEFINE_DEVICE_TYPE(I80286, i80286_cpu_device, "i80286", "Intel I80286")
+DEFINE_DEVICE_TYPE(I80286, i80286_cpu_device, "i80286", "Intel 80286")
i80286_cpu_device::i80286_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: i8086_common_cpu_device(mconfig, I80286, tag, owner, clock)
diff --git a/src/devices/cpu/i86/i86.cpp b/src/devices/cpu/i86/i86.cpp
index 1733406d8f5..619171b9cef 100644
--- a/src/devices/cpu/i86/i86.cpp
+++ b/src/devices/cpu/i86/i86.cpp
@@ -88,8 +88,8 @@ const uint8_t i8086_cpu_device::m_i8086_timing[] =
/***************************************************************************/
-DEFINE_DEVICE_TYPE(I8086, i8086_cpu_device, "i8086", "Intel I8086")
-DEFINE_DEVICE_TYPE(I8088, i8088_cpu_device, "i8088", "Intel I8088")
+DEFINE_DEVICE_TYPE(I8086, i8086_cpu_device, "i8086", "Intel 8086")
+DEFINE_DEVICE_TYPE(I8088, i8088_cpu_device, "i8088", "Intel 8088")
i8088_cpu_device::i8088_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: i8086_cpu_device(mconfig, I8088, tag, owner, clock, 8)
diff --git a/src/devices/cpu/lc8670/lc8670.h b/src/devices/cpu/lc8670/lc8670.h
index c7d440d93bb..82b78fee058 100644
--- a/src/devices/cpu/lc8670/lc8670.h
+++ b/src/devices/cpu/lc8670/lc8670.h
@@ -73,9 +73,9 @@ public:
template <typename T, typename U, typename V>
void set_clock_sources(T &&sub_clock, U &&rc_clock, V &&cf_clock)
{
- set_cpu_clock(lc8670_cpu_device::clock_source::SUB, sub_clock);
- set_cpu_clock(lc8670_cpu_device::clock_source::RC, rc_clock);
- set_cpu_clock(lc8670_cpu_device::clock_source::CF, cf_clock);
+ set_cpu_clock(lc8670_cpu_device::clock_source::SUB, std::forward<T>(sub_clock));
+ set_cpu_clock(lc8670_cpu_device::clock_source::RC, std::forward<U>(rc_clock));
+ set_cpu_clock(lc8670_cpu_device::clock_source::CF, std::forward<V>(cf_clock));
}
auto bank_cb() { return m_bankswitch_func.bind(); }
diff --git a/src/devices/cpu/m6502/n2a03.cpp b/src/devices/cpu/m6502/n2a03.cpp
index 6bfbc2edc98..0eb94cd52f3 100644
--- a/src/devices/cpu/m6502/n2a03.cpp
+++ b/src/devices/cpu/m6502/n2a03.cpp
@@ -43,7 +43,7 @@ WRITE8_MEMBER(n2a03_device::psg1_4017_w)
void n2a03_device::n2a03_map(address_map &map)
{
map(0x4000, 0x4013).rw("nesapu", FUNC(nesapu_device::read), FUNC(nesapu_device::write));
- map(0x4014, 0x4014).r(FUNC(n2a03_device::psg1_4014_r)); // AM_WRITE(sprite_dma_0_w)
+ map(0x4014, 0x4014).r(FUNC(n2a03_device::psg1_4014_r)); // .w(FUNC(nesapu_device::sprite_dma_0_w));
map(0x4015, 0x4015).rw(FUNC(n2a03_device::psg1_4015_r), FUNC(n2a03_device::psg1_4015_w)); /* PSG status / first control register */
//map(0x4016, 0x4016).rw(FUNC(n2a03_device::vsnes_in0_r), FUNC(n2a03_device::vsnes_in0_w));
map(0x4017, 0x4017) /*.r(FUNC(n2a03_device::vsnes_in1_r))*/ .w(FUNC(n2a03_device::psg1_4017_w));
diff --git a/src/devices/cpu/m6800/m6800.cpp b/src/devices/cpu/m6800/m6800.cpp
index c5e26e43564..86b14810771 100644
--- a/src/devices/cpu/m6800/m6800.cpp
+++ b/src/devices/cpu/m6800/m6800.cpp
@@ -322,9 +322,9 @@ const uint8_t m6800_cpu_device::cycles_nsc8105[256] =
#undef XX // /invalid opcode unknown cc
-DEFINE_DEVICE_TYPE(M6800, m6800_cpu_device, "m6800", "Motorola M6800")
-DEFINE_DEVICE_TYPE(M6802, m6802_cpu_device, "m6802", "Motorola M6802")
-DEFINE_DEVICE_TYPE(M6808, m6808_cpu_device, "m6808", "Motorola M6808")
+DEFINE_DEVICE_TYPE(M6800, m6800_cpu_device, "m6800", "Motorola MC6800")
+DEFINE_DEVICE_TYPE(M6802, m6802_cpu_device, "m6802", "Motorola MC6802")
+DEFINE_DEVICE_TYPE(M6808, m6808_cpu_device, "m6808", "Motorola MC6808")
DEFINE_DEVICE_TYPE(NSC8105, nsc8105_cpu_device, "nsc8105", "NSC8105")
diff --git a/src/devices/cpu/m6800/m6801.cpp b/src/devices/cpu/m6800/m6801.cpp
index 28339b33005..3cafae3e1e8 100644
--- a/src/devices/cpu/m6800/m6801.cpp
+++ b/src/devices/cpu/m6800/m6801.cpp
@@ -10,8 +10,10 @@
#define LOG_RX (1U << 3)
#define LOG_RXTICK (1U << 4)
#define LOG_PORT (1U << 5)
+#define LOG_SER (1U << 6)
-//#define VERBOSE (LOG_GENERAL | LOG_TX | LOG_RX | LOG_PORT)
+//#define VERBOSE (LOG_SER)
+//#define LOG_OUTPUT_STREAM std::cout
//#define LOG_OUTPUT_STREAM std::cerr
#include "logmacro.h"
@@ -20,6 +22,7 @@
#define LOGRX(...) LOGMASKED(LOG_RX, __VA_ARGS__)
#define LOGRXTICK(...) LOGMASKED(LOG_RXTICK, __VA_ARGS__)
#define LOGPORT(...) LOGMASKED(LOG_PORT, __VA_ARGS__)
+#define LOGSER(...) LOGMASKED(LOG_SER, __VA_ARGS__)
#define CT m_counter.w.l
@@ -262,8 +265,8 @@ void m6801_cpu_device::m6803_mem(address_map &map)
}
-DEFINE_DEVICE_TYPE(M6801, m6801_cpu_device, "m6801", "Motorola M6801")
-DEFINE_DEVICE_TYPE(M6803, m6803_cpu_device, "m6803", "Motorola M6803")
+DEFINE_DEVICE_TYPE(M6801, m6801_cpu_device, "m6801", "Motorola MC6801")
+DEFINE_DEVICE_TYPE(M6803, m6803_cpu_device, "m6803", "Motorola MC6803")
DEFINE_DEVICE_TYPE(HD6301, hd6301_cpu_device, "hd6301", "Hitachi HD6301")
DEFINE_DEVICE_TYPE(HD63701, hd63701_cpu_device, "hd63701", "Hitachi HD63701")
DEFINE_DEVICE_TYPE(HD6303R, hd6303r_cpu_device, "hd6303r", "Hitachi HD6303R")
@@ -413,11 +416,13 @@ void m6801_cpu_device::set_rmcr(uint8_t data)
switch ((m_rmcr & M6801_RMCR_CC_MASK) >> 2)
{
case 0:
+ LOGSER("6801: Using external serial clock: false\n");
m_sci_timer->enable(false);
m_use_ext_serclock = false;
break;
case 3: // external clock
+ LOGSER("6801: Using external serial clock: true\n");
m_use_ext_serclock = true;
m_sci_timer->enable(false);
break;
@@ -427,7 +432,7 @@ void m6801_cpu_device::set_rmcr(uint8_t data)
{
int divisor = M6801_RMCR_SS[m_rmcr & M6801_RMCR_SS_MASK];
attotime period = cycles_to_attotime(divisor);
-
+ LOGSER("6801: Setting serial rate, Divisor: %d Hz: %d\n", divisor, period.as_hz());
m_sci_timer->adjust(period, 0, period);
m_use_ext_serclock = false;
}
@@ -442,10 +447,12 @@ int m6801_cpu_device::m6800_rx()
void m6801_cpu_device::serial_transmit()
{
- LOGTXTICK("Tx Tick\n");
+ LOGTXTICK("6801 Tx Tick presenting: %d\n", m_tx);
if (m_trcsr & M6801_TRCSR_TE)
{
+ int old_m_tx = m_tx; // Detect line change
+
// force Port 2 bit 4 as output
m_port_ddr[1] |= M6801_PORT2_IO4;
@@ -486,7 +493,7 @@ void m6801_cpu_device::serial_transmit()
m_txbits++;
- LOGTX("Transmit START Data %02x\n", m_tsr);
+ LOGTX("6801 Transmit START Data %02x\n", m_tsr);
}
break;
@@ -498,7 +505,7 @@ void m6801_cpu_device::serial_transmit()
m_txbits = M6801_SERIAL_START;
- LOGTX("Transmit STOP\n");
+ LOGTX("6801 Transmit STOP\n");
break;
default:
@@ -508,7 +515,7 @@ void m6801_cpu_device::serial_transmit()
// shift transmit register
m_tsr >>= 1;
- LOGTX("Transmit Bit %u: %u\n", m_txbits, m_tx);
+ LOGTX("6801 Tx Present Bit %u: %u\n", m_txbits, m_tx);
m_txbits++;
break;
@@ -516,7 +523,10 @@ void m6801_cpu_device::serial_transmit()
break;
}
- m_out_sertx_func((m_tx == 1) ? ASSERT_LINE : CLEAR_LINE);
+ if (old_m_tx != m_tx) // call callback only if line has changed
+ {
+ m_out_sertx_func((m_tx == 1) ? ASSERT_LINE : CLEAR_LINE);
+ }
m_port2_written = 1;
write_port2();
}
@@ -524,7 +534,7 @@ void m6801_cpu_device::serial_transmit()
void m6801_cpu_device::serial_receive()
{
- LOGRXTICK("Rx Tick TRCSR %02x bits %u check %02x\n", m_trcsr, m_rxbits, m_trcsr & M6801_TRCSR_RE);
+ LOGRXTICK("6801 Rx Tick TRCSR %02x bits %u check %02x\n", m_trcsr, m_rxbits, m_trcsr & M6801_TRCSR_RE);
if (m_trcsr & M6801_TRCSR_RE)
{
@@ -535,11 +545,11 @@ void m6801_cpu_device::serial_receive()
{
m_rxbits++;
- LOGRX("Received WAKE UP bit %u\n", m_rxbits);
+ LOGRX("6801 Received WAKE UP bit %u\n", m_rxbits);
if (m_rxbits == 10)
{
- LOGRX("Receiver Wake Up\n");
+ LOGRX("6801 Receiver Wake Up\n");
m_trcsr &= ~M6801_TRCSR_WU;
m_rxbits = M6801_SERIAL_START;
@@ -547,7 +557,7 @@ void m6801_cpu_device::serial_receive()
}
else
{
- LOGRX("Receiver Wake Up interrupted\n");
+ LOGRX("6801 Receiver Wake Up interrupted\n");
m_rxbits = M6801_SERIAL_START;
}
@@ -563,21 +573,21 @@ void m6801_cpu_device::serial_receive()
// start bit found
m_rxbits++;
- LOGRX("Received START bit\n");
+ LOGRX("6801 Received START bit\n");
}
break;
case M6801_SERIAL_STOP:
if (m6800_rx() == 1)
{
- LOGRX("Received STOP bit\n");
+ LOGRX("6801 Received STOP bit\n");
if (m_trcsr & M6801_TRCSR_RDRF)
{
// overrun error
m_trcsr |= M6801_TRCSR_ORFE;
- LOGRX("Receive Overrun Error\n");
+ LOGRX("6801 Receive Overrun Error\n");
CHECK_IRQ_LINES();
}
@@ -588,7 +598,7 @@ void m6801_cpu_device::serial_receive()
// transfer data into receive register
m_rdr = m_rsr;
- LOGRX("Receive Data Register: %02x\n", m_rdr);
+ LOGRX("6801 Receive Data Register: %02x\n", m_rdr);
// set RDRF flag
m_trcsr |= M6801_TRCSR_RDRF;
@@ -609,7 +619,7 @@ void m6801_cpu_device::serial_receive()
m_trcsr |= M6801_TRCSR_ORFE;
m_trcsr &= ~M6801_TRCSR_RDRF;
- LOGRX("Receive Framing Error\n");
+ LOGRX("6801 Receive Framing Error\n");
CHECK_IRQ_LINES();
}
@@ -624,7 +634,7 @@ void m6801_cpu_device::serial_receive()
// receive bit into register
m_rsr |= (m6800_rx() << 7);
- LOGRX("Received DATA bit %u: %u\n", m_rxbits, BIT(m_rsr, 7));
+ LOGRX("6801 RX sampled DATA bit %u: %u\n", m_rxbits, BIT(m_rsr, 7));
m_rxbits++;
break;
@@ -1192,13 +1202,13 @@ WRITE8_MEMBER( m6801_cpu_device::m6801_io_w )
break;
case IO_RMCR:
- LOG("Rate and Mode Control Register: %02x\n", data);
+ LOGSER("Rate and Mode Control Register: %02x\n", data);
set_rmcr(data);
break;
case IO_TRCSR:
- LOG("Transmit/Receive Control and Status Register: %02x\n", data);
+ LOGSER("Transmit/Receive Control and Status Register: %02x\n", data);
if ((data & M6801_TRCSR_TE) && !(m_trcsr & M6801_TRCSR_TE))
{
@@ -1216,7 +1226,7 @@ WRITE8_MEMBER( m6801_cpu_device::m6801_io_w )
break;
case IO_TDR:
- LOGTX("Transmit Data Register: %02x\n", data);
+ LOGSER("6801 Transmit Data Register: $%02x/%d\n", data, data);
if (m_trcsr_read_tdre)
{
diff --git a/src/devices/cpu/m6805/m68hc05.h b/src/devices/cpu/m6805/m68hc05.h
index df051782fe8..a11abd9f3e8 100644
--- a/src/devices/cpu/m6805/m68hc05.h
+++ b/src/devices/cpu/m6805/m68hc05.h
@@ -32,8 +32,14 @@ class m68hc05_device : public m6805_base_device
{
public:
// configuration helpers
- template <std::size_t N> auto port_r() { return m_port_cb_r[N].bind(); }
- template <std::size_t N> auto port_w() { return m_port_cb_w[N].bind(); }
+ auto porta_r() { return m_port_cb_r[0].bind(); }
+ auto portb_r() { return m_port_cb_r[1].bind(); }
+ auto portc_r() { return m_port_cb_r[2].bind(); }
+ auto portd_r() { return m_port_cb_r[3].bind(); }
+ auto porta_w() { return m_port_cb_w[0].bind(); }
+ auto portb_w() { return m_port_cb_w[1].bind(); }
+ auto portc_w() { return m_port_cb_w[2].bind(); }
+ auto portd_w() { return m_port_cb_w[3].bind(); }
auto tcmp() { return m_tcmp_cb.bind(); }
protected:
diff --git a/src/devices/cpu/mcs51/mcs51.cpp b/src/devices/cpu/mcs51/mcs51.cpp
index 21f64953a45..11e497fe391 100644
--- a/src/devices/cpu/mcs51/mcs51.cpp
+++ b/src/devices/cpu/mcs51/mcs51.cpp
@@ -776,7 +776,7 @@ uint8_t mcs51_cpu_device::r_psw() { return SFR_A(ADDR_PSW); }
assume that most hardware will use port 2 for 8bit access as well.
On configurations where 8 bit access in conjunction with other ports is used,
- it is up to the driver to use AM_MIRROR to mask out the high level address and
+ it is up to the driver to use mirror() to mask out the high level address and
provide it's own mapping.
*/
diff --git a/src/devices/cpu/sh/sh2.cpp b/src/devices/cpu/sh/sh2.cpp
index c0fab41f9b0..8feb977bbec 100644
--- a/src/devices/cpu/sh/sh2.cpp
+++ b/src/devices/cpu/sh/sh2.cpp
@@ -129,7 +129,7 @@ void sh2_device::sh7604_map(address_map &map)
map(0x40000000, 0xbfffffff).r(FUNC(sh2_device::sh2_internal_a5));
// TODO: cps3boot breaks with this enabled. Needs callback
-// AM_RANGE(0xc0000000, 0xc0000fff) AM_RAM // cache data array
+// map(0xc0000000, 0xc0000fff).ram(); // cache data array
// map(0xe0000000, 0xe00001ff).mirror(0x1ffffe00).rw(FUNC(sh2_device::sh7604_r), FUNC(sh2_device::sh7604_w));
// TODO: internal map takes way too much resources if mirrored with 0x1ffffe00
@@ -223,8 +223,8 @@ void sh2a_device::sh7021_map(address_map &map)
map(0x05ffff48, 0x05ffff49).rw(FUNC(sh2a_device::dmaor_r), FUNC(sh2a_device::dmaor_w));
map(0x05ffff4a, 0x05ffff4b).rw(FUNC(sh2a_device::dma_tcr0_r), FUNC(sh2a_device::dma_tcr0_w));
map(0x05ffff4e, 0x05ffff4f).rw(FUNC(sh2a_device::dma_chcr0_r), FUNC(sh2a_device::dma_chcr0_w));
-// AM_RANGE(0x07000000, 0x070003ff) AM_RAM AM_SHARE("oram")// on-chip RAM, actually at 0xf000000 (1 kb)
-// AM_RANGE(0x0f000000, 0x0f0003ff) AM_RAM AM_SHARE("oram")// on-chip RAM, actually at 0xf000000 (1 kb)
+// map(0x07000000, 0x070003ff).ram().share("oram"); // on-chip RAM, actually at 0xf000000 (1 kb)
+// map(0x0f000000, 0x0f0003ff).ram().share("oram"); // on-chip RAM, actually at 0xf000000 (1 kb)
}
void sh1_device::sh7032_map(address_map &map)
diff --git a/src/devices/cpu/sh/sh7604_bus.cpp b/src/devices/cpu/sh/sh7604_bus.cpp
index 4a98ab6130a..6175fd9a5b2 100644
--- a/src/devices/cpu/sh/sh7604_bus.cpp
+++ b/src/devices/cpu/sh/sh7604_bus.cpp
@@ -102,7 +102,7 @@ void sh7604_bus_device::bus_regs(address_map &map)
map(0x08, 0x09).rw(FUNC(sh7604_bus_device::refresh_timer_status_r), FUNC(sh7604_bus_device::refresh_timer_control_w));
map(0x0a, 0x0b).rw(FUNC(sh7604_bus_device::refresh_timer_counter_r), FUNC(sh7604_bus_device::refresh_timer_counter_w));
map(0x0c, 0x0d).rw(FUNC(sh7604_bus_device::refresh_timer_constant_r), FUNC(sh7604_bus_device::refresh_timer_constant_w));
-// AM_RANGE(0x0e, 0x0f) unmapped, mirror?
+// map(0x0e, 0x0f) unmapped, mirror?
}
//-------------------------------------------------
diff --git a/src/devices/cpu/sh/sh7604_wdt.cpp b/src/devices/cpu/sh/sh7604_wdt.cpp
index 6dbd27dc3ce..f18ca8ad501 100644
--- a/src/devices/cpu/sh/sh7604_wdt.cpp
+++ b/src/devices/cpu/sh/sh7604_wdt.cpp
@@ -29,10 +29,10 @@ DEFINE_DEVICE_TYPE(SH7604_WDT, sh7604_wdt_device, "sh7604wdt", "SH7604 Watchdog
void sh7604_wdt_device::wdt_regs(address_map &map)
{
-// AM_RANGE(0x00, 0x00) timer control/status
-// AM_RANGE(0x01, 0x01) timer counter
-// AM_RANGE(0x02, 0x02) write only, reset control register
-// AM_RANGE(0x03, 0x03) read status register, write reset status register
+// map(0x00, 0x00) timer control/status
+// map(0x01, 0x01) timer counter
+// map(0x02, 0x02) write only, reset control register
+// map(0x03, 0x03) read status register, write reset status register
}
//-------------------------------------------------
diff --git a/src/devices/cpu/tlcs90/tlcs90.cpp b/src/devices/cpu/tlcs90/tlcs90.cpp
index 3bacad6c144..81c28407bd7 100644
--- a/src/devices/cpu/tlcs90/tlcs90.cpp
+++ b/src/devices/cpu/tlcs90/tlcs90.cpp
@@ -50,7 +50,7 @@ void tlcs90_device::tmp90840_mem(address_map &map)
void tlcs90_device::tmp90841_mem(address_map &map)
{
-// AM_RANGE( 0x0000, 0x1fff ) AM_ROM // rom-less
+// map(0x0000, 0x1fff).rom(); // rom-less
map(0xfec0, 0xffbf).ram(); // 256b RAM (internal)
map(T90_IOBASE, T90_IOBASE+47).rw(FUNC(tlcs90_device::t90_internal_registers_r), FUNC(tlcs90_device::t90_internal_registers_w));
}
@@ -64,7 +64,7 @@ void tlcs90_device::tmp91640_mem(address_map &map)
void tlcs90_device::tmp91641_mem(address_map &map)
{
-// AM_RANGE( 0x0000, 0x3fff ) AM_ROM // rom-less
+// map(0x0000, 0x3fff).rom(); // rom-less
map(0xfdc0, 0xffbf).ram(); // 512b RAM (internal)
map(T90_IOBASE, T90_IOBASE+47).rw(FUNC(tlcs90_device::t90_internal_registers_r), FUNC(tlcs90_device::t90_internal_registers_w));
}
diff --git a/src/devices/cpu/tms32051/tms32051.cpp b/src/devices/cpu/tms32051/tms32051.cpp
index d1a1c566f83..ebcc1d216e5 100644
--- a/src/devices/cpu/tms32051/tms32051.cpp
+++ b/src/devices/cpu/tms32051/tms32051.cpp
@@ -57,7 +57,7 @@ DEFINE_DEVICE_TYPE(TMS32053, tms32053_device, "tms32053", "Texas Instruments TMS
void tms32051_device::tms32051_internal_pgm(address_map &map)
{
-// AM_RANGE(0x0000, 0x1fff) AM_ROM // ROM TODO: is off-chip if MP/_MC = 0
+// map(0x0000, 0x1fff).rom(); // ROM TODO: is off-chip if MP/_MC = 0
map(0x2000, 0x23ff).ram().share("saram"); // SARAM TODO: is off-chip if RAM bit = 0
map(0xfe00, 0xffff).ram().share("daram_b0"); // DARAM B0 TODO: is off-chip if CNF = 0
}
@@ -101,7 +101,7 @@ device_memory_interface::space_config_vector tms32051_device::memory_space_confi
void tms32053_device::tms32053_internal_pgm(address_map &map)
{
-// AM_RANGE(0x0000, 0x3fff) AM_ROM // ROM TODO: is off-chip if MP/_MC = 0
+// map(0x0000, 0x3fff).rom(); // ROM TODO: is off-chip if MP/_MC = 0
map(0x4000, 0x4bff).ram().share("saram"); // SARAM TODO: is off-chip if RAM bit = 0
map(0xfe00, 0xffff).ram().share("daram_b0"); // DARAM B0 TODO: is off-chip if CNF = 0
}
diff --git a/src/devices/cpu/unsp/unsp.cpp b/src/devices/cpu/unsp/unsp.cpp
index 2805d3a80e0..e7938572d08 100644
--- a/src/devices/cpu/unsp/unsp.cpp
+++ b/src/devices/cpu/unsp/unsp.cpp
@@ -59,6 +59,7 @@ unsp_device::unsp_device(const machine_config &mconfig, device_type type, const
, m_mem_write(nullptr)
, m_enable_drc(false)
{
+ m_iso = 10;
}
unsp_device::unsp_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
diff --git a/src/devices/cpu/unsp/unsp_fxxx.cpp b/src/devices/cpu/unsp/unsp_fxxx.cpp
index 2c98161e847..c50344f7b81 100644
--- a/src/devices/cpu/unsp/unsp_fxxx.cpp
+++ b/src/devices/cpu/unsp/unsp_fxxx.cpp
@@ -341,6 +341,16 @@ void unsp_device::execute_fxxx_101_group(uint16_t op)
m_core->m_enable_fiq = 1;
return;
+ case 0xf144: case 0xf344: case 0xf544: case 0xf744: case 0xf944: case 0xfb44: case 0xfd44: case 0xff44:
+ logerror("fir_mov on (shouldn't exist on 1.0, is this 1.2 or does it act as a NOP?)\n");
+ //unimplemented_opcode(op); // jak_care triggers this, which again strongly suggests that everything we have is 1.2 or above even if most new features are unused
+ return;
+
+ case 0xf145: case 0xf345: case 0xf545: case 0xf745: case 0xf945: case 0xfb45: case 0xfd45: case 0xff45:
+ logerror("fir_mov off (shouldn't exist on 1.0, is this 1.2 or does it act as a NOP?)\n");
+ //unimplemented_opcode(op); // jak_care triggers this, see above
+ return;
+
case 0xf160: case 0xf360: case 0xf560: case 0xf760: case 0xf960: case 0xfb60: case 0xfd60: case 0xff60:
case 0xf168: case 0xf368: case 0xf568: case 0xf768: case 0xf968: case 0xfb68: case 0xfd68: case 0xff68:
case 0xf170: case 0xf370: case 0xf570: case 0xf770: case 0xf970: case 0xfb70: case 0xfd70: case 0xff70:
diff --git a/src/devices/cpu/unsp/unspdrc.cpp b/src/devices/cpu/unsp/unspdrc.cpp
index a34d20f8a7e..3b0b1e6db59 100644
--- a/src/devices/cpu/unsp/unspdrc.cpp
+++ b/src/devices/cpu/unsp/unspdrc.cpp
@@ -990,7 +990,14 @@ bool unsp_device::generate_opcode(drcuml_block &block, compiler_state &compiler,
// nop
break;
+ case 4: // should be 1.2 only but jak_care triggers, see notes in non-drc
+ break;
+
+ case 5: // ^^
+ break;
+
default:
+ logerror("unsp drc interrupt flags %02x\n", op & 0x3f);
return false;
}
return true;
diff --git a/src/devices/cpu/unsp/unspfe.cpp b/src/devices/cpu/unsp/unspfe.cpp
index 3d2cd6f6855..8e2cef76111 100644
--- a/src/devices/cpu/unsp/unspfe.cpp
+++ b/src/devices/cpu/unsp/unspfe.cpp
@@ -191,6 +191,9 @@ bool unsp_frontend::describe(opcode_desc &desc, const opcode_desc *prev)
case 12:
case 14:
case 37:
+
+ case 4: // should be 1.2 only but jak_care triggers, see notes in non-drc
+ case 5: // ^^
return true;
}
return false;
diff --git a/src/devices/cpu/upd7810/upd7810.cpp b/src/devices/cpu/upd7810/upd7810.cpp
index 54bc5e3757e..e88b33d91aa 100644
--- a/src/devices/cpu/upd7810/upd7810.cpp
+++ b/src/devices/cpu/upd7810/upd7810.cpp
@@ -2005,19 +2005,19 @@ void upd7801_device::execute_set_input(int irqline, int state)
/* Check if the ES bit is set then check for rising edge, otherwise falling edge */
if ( MKL & 0x20 )
{
- if ( m_int2 == CLEAR_LINE && state == ASSERT_LINE )
+ if ( m_int2 != CLEAR_LINE && state == ASSERT_LINE )
{
IRR |= INTF2;
}
}
else
{
- if ( m_int2 == ASSERT_LINE && state == CLEAR_LINE )
+ if ( m_int2 != ASSERT_LINE && state == CLEAR_LINE )
{
IRR |= INTF2;
}
}
- m_int2 = state;
+ m_int2 = !state;
break;
}
}
diff --git a/src/devices/imagedev/cassette.cpp b/src/devices/imagedev/cassette.cpp
index 3007ea752f5..ee618b33c79 100644
--- a/src/devices/imagedev/cassette.cpp
+++ b/src/devices/imagedev/cassette.cpp
@@ -92,26 +92,26 @@ void cassette_image_device::update()
{
double new_position = m_position + (cur_time - m_position_time)*m_speed*m_direction;
- switch(m_state & CASSETTE_MASK_UISTATE)
+ switch (int(m_state & CASSETTE_MASK_UISTATE)) // cast to int to suppress unhandled enum value warning
{
case CASSETTE_RECORD:
cassette_put_sample(m_cassette, m_channel, m_position, new_position - m_position, m_value);
break;
case CASSETTE_PLAY:
- if ( m_cassette )
+ if (m_cassette)
{
cassette_get_sample(m_cassette, m_channel, new_position, 0.0, &m_value);
- /* See if reached end of tape */
+ // See if reached end of tape
double length = get_length();
if (new_position > length)
{
- m_state = (cassette_state)(( m_state & ~CASSETTE_MASK_UISTATE ) | CASSETTE_STOPPED);
+ m_state = (m_state & ~CASSETTE_MASK_UISTATE) | CASSETTE_STOPPED;
new_position = length;
}
else if (new_position < 0)
{
- m_state = (cassette_state)(( m_state & ~CASSETTE_MASK_UISTATE ) | CASSETTE_STOPPED);
+ m_state = (m_state & ~CASSETTE_MASK_UISTATE) | CASSETTE_STOPPED;
new_position = 0;
}
}
@@ -124,9 +124,7 @@ void cassette_image_device::update()
void cassette_image_device::change_state(cassette_state state, cassette_state mask)
{
- cassette_state new_state = m_state;
- new_state = (cassette_state)(new_state & ~mask);
- new_state = (cassette_state)(new_state | (state & mask));
+ cassette_state new_state = (m_state & ~mask) | (state & mask);
if ((m_state ^ new_state) & (CASSETTE_MASK_UISTATE | CASSETTE_MASK_MOTOR))
m_position_time = machine().time().as_double();
m_state = new_state;
@@ -138,7 +136,7 @@ double cassette_image_device::input()
{
update();
int32_t sample = m_value;
- double double_value = sample / ((double) 0x7FFFFFFF);
+ double double_value = sample / double(0x7FFFFFFF);
LOGMASKED(LOG_DETAIL, "cassette_input(): time_index=%g value=%g\n", m_position, double_value);
@@ -366,7 +364,7 @@ std::string cassette_image_device::call_display()
// figure out where we are in the cassette
double position = get_position();
double length = get_length();
- cassette_state uistate = cassette_state(get_state() & CASSETTE_MASK_UISTATE);
+ cassette_state uistate = get_state() & CASSETTE_MASK_UISTATE;
// choose which frame of the animation we are at
int n = (int(position) / ANIMATION_FPS) % ARRAY_LENGTH(shapes);
diff --git a/src/devices/imagedev/cassette.h b/src/devices/imagedev/cassette.h
index aac43869d2a..f639d58bfe6 100644
--- a/src/devices/imagedev/cassette.h
+++ b/src/devices/imagedev/cassette.h
@@ -17,24 +17,26 @@
enum cassette_state
{
- /* this part of the state is controlled by the UI */
+ // this part of the state is controlled by the UI
CASSETTE_STOPPED = 0,
CASSETTE_PLAY = 1,
CASSETTE_RECORD = 2,
- /* this part of the state is controlled by drivers */
+ // this part of the state is controlled by drivers
CASSETTE_MOTOR_ENABLED = 0,
CASSETTE_MOTOR_DISABLED = 4,
CASSETTE_SPEAKER_ENABLED = 0,
CASSETTE_SPEAKER_MUTED = 8,
- /* masks */
+ // masks
CASSETTE_MASK_UISTATE = 3,
CASSETTE_MASK_MOTOR = 4,
CASSETTE_MASK_SPEAKER = 8,
CASSETTE_MASK_DRVSTATE = 12
};
+DECLARE_ENUM_BITWISE_OPERATORS(cassette_state)
+
/***************************************************************************
TYPE DEFINITIONS
@@ -54,7 +56,6 @@ public:
void set_formats(const struct CassetteFormat* const *formats) { m_formats = formats; }
void set_create_opts(const struct CassetteOptions *create_opts) { m_create_opts = create_opts; }
void set_default_state(cassette_state default_state) { m_default_state = default_state; }
- void set_default_state(int default_state) { m_default_state = (cassette_state)default_state; }
void set_interface(const char *interface) { m_interface = interface; }
// image-level overrides
@@ -76,7 +77,7 @@ public:
// specific implementation
cassette_state get_state() { return m_state; }
- void set_state(cassette_state state) { change_state(state, (cassette_state)(~0)); }
+ void set_state(cassette_state state) { change_state(state, cassette_state(~0)); }
void change_state(cassette_state state, cassette_state mask);
double input();
diff --git a/src/devices/machine/adc0804.cpp b/src/devices/machine/adc0804.cpp
new file mode 100644
index 00000000000..aad5b88ffb3
--- /dev/null
+++ b/src/devices/machine/adc0804.cpp
@@ -0,0 +1,263 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/**********************************************************************
+
+ National Semiconductor ADC0804 8-bit µP Compatible A/D Converter
+
+ The ADC0804 is the most widely used member of a family of five
+ CMOS 8-bit ADCs with microprocessor-compatible interfaces, which
+ differ from each other only in error specifications:
+
+ ADC0801 ±¼ LSB Full-scale adjusted
+ ADC0802 ±½ LSB Vref/2 = 2.500 Vdc
+ ADC0803 ±½ LSB Full-scale adjusted
+ ADC0804 ±1 LSB Vref/2 = 2.500 Vdc
+ ADC0805 ±1 LSB Vref/2 = NC
+
+ Though these devices are designed to convert differential analog
+ inputs, single-phase conversion can be achieved by tying pin 7
+ (negative Vin) to pin 8 (analog GND). A CD4051B or other analog
+ switch IC is often used to multiplex several input sources.
+
+ Pin 4 should be connected to either an externally generated clock
+ signal (640 kHz typical, 1460 kHz maximum) or a timing capacitor
+ plus a resistor bridged to pin 19. The resistor is typically 10 kΩ
+ but higher values may be needed due to loading conditions when
+ multiple other devices are also clocked through pin 19, which
+ yields the output of the internal Schmitt trigger clock circuit.
+
+ The ADC0804's INTR semaphore output reflects not the actual busy
+ state of the converter (as EOC does on the ADC0808) but an
+ internal flip-flop attached to it. This flip-flop is reset by
+ pulling either RD or WR active low; therefore, INTR will never
+ toggle if RD is tied to GND to keep the data outputs continuously
+ active.
+
+**********************************************************************/
+
+#include "emu.h"
+#include "adc0804.h"
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(ADC0804, adc0804_device, "adc0804", "ADC0804 A/D Converter")
+
+ALLOW_SAVE_TYPE(adc0804_device::read_mode);
+
+
+//**************************************************************************
+// DEVICE CONSTRUCTION AND INITIALIZATION
+//**************************************************************************
+
+//-------------------------------------------------
+// adc0804_device - constructor
+//-------------------------------------------------
+
+adc0804_device::adc0804_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, ADC0804, tag, owner, clock)
+ , m_vin_callback(*this)
+ , m_intr_callback(*this)
+ , m_res(0.0)
+ , m_cap(0.0)
+ , m_fclk_rc(attotime::zero)
+ , m_timer(nullptr)
+ , m_rd_mode(RD_STROBED)
+ , m_rd_active(false)
+ , m_wr_active(false)
+ , m_result(0)
+ , m_intr_active(false)
+{
+}
+
+
+//-------------------------------------------------
+// device_resolve_objects - resolve objects that
+// may be needed for other devices to set
+// initial conditions at start time
+//-------------------------------------------------
+
+void adc0804_device::device_resolve_objects()
+{
+ m_vin_callback.resolve_safe(0);
+ m_intr_callback.resolve_safe();
+
+ if (m_rd_mode == RD_GROUNDED)
+ m_rd_active = true;
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void adc0804_device::device_start()
+{
+ // calculate RC timing
+ if (m_res == 0.0 || m_cap == 0.0)
+ m_fclk_rc = attotime::zero;
+ else
+ m_fclk_rc = attotime::from_double(m_res * m_cap / 1.1);
+
+ // create timer
+ m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(adc0804_device::conversion_done), this));
+
+ // save state
+ if (m_rd_mode == RD_BITBANGED)
+ save_item(NAME(m_rd_active));
+ save_item(NAME(m_wr_active));
+ save_item(NAME(m_result));
+ save_item(NAME(m_intr_active));
+}
+
+
+//**************************************************************************
+// CONVERSION SEQUENCE
+//**************************************************************************
+
+// Conversion occurs over a busy period of 66–73 cycles, after 1–8 cycles of latency
+const int adc0804_device::s_conversion_cycles = 74;
+
+
+//-------------------------------------------------
+// set_interrupt - set or clear INTR output
+//-------------------------------------------------
+
+void adc0804_device::set_interrupt(bool state)
+{
+ if (m_intr_active != state)
+ {
+ m_intr_active = state;
+ m_intr_callback(state ? ASSERT_LINE : CLEAR_LINE);
+ }
+}
+
+
+//-------------------------------------------------
+// conversion_start - begin the busy period
+//-------------------------------------------------
+
+void adc0804_device::conversion_start()
+{
+ if (!m_timer->enabled())
+ m_timer->adjust(m_fclk_rc != attotime::zero ? m_fclk_rc * s_conversion_cycles : clocks_to_attotime(s_conversion_cycles));
+ else
+ logerror("%s: Tried to start conversion when already in progress\n", machine().describe_context());
+}
+
+
+//-------------------------------------------------
+// conversion_done - load result and signal
+// interrupt
+//-------------------------------------------------
+
+TIMER_CALLBACK_MEMBER(adc0804_device::conversion_done)
+{
+ m_result = m_vin_callback();
+
+ if (!m_rd_active && !m_wr_active)
+ set_interrupt(true);
+}
+
+
+//**************************************************************************
+// BUS INTERFACE
+//**************************************************************************
+
+//-------------------------------------------------
+// read - read the 8-bit conversion result
+//-------------------------------------------------
+
+u8 adc0804_device::read()
+{
+ switch (m_rd_mode)
+ {
+ case RD_STROBED:
+ if (!machine().side_effects_disabled())
+ set_interrupt(false);
+ break;
+
+ case RD_BITBANGED:
+ if (!m_rd_active)
+ return 0xff; // open bus
+ break;
+
+ case RD_GROUNDED:
+ break;
+ }
+
+ return m_result;
+}
+
+
+//-------------------------------------------------
+// write - begin a new conversion
+//-------------------------------------------------
+
+void adc0804_device::write(u8 data)
+{
+ // data is ignored
+ set_interrupt(false);
+ conversion_start();
+}
+
+
+//-------------------------------------------------
+// read_and_write - read the result of the last
+// conversion and begin a new one
+//-------------------------------------------------
+
+u8 adc0804_device::read_and_write()
+{
+ if (!machine().side_effects_disabled())
+ {
+ set_interrupt(false);
+ conversion_start();
+ }
+
+ if (m_rd_mode == RD_BITBANGED && !m_rd_active)
+ return 0xff; // open bus
+ else
+ return m_result;
+}
+
+
+//-------------------------------------------------
+// rd_w - enable data bus by line write
+//-------------------------------------------------
+
+WRITE_LINE_MEMBER(adc0804_device::rd_w)
+{
+ assert(m_rd_mode == RD_BITBANGED);
+
+ // RD input is active low
+ if (!state && !m_rd_active)
+ {
+ m_rd_active = true;
+ set_interrupt(false);
+ }
+ else if (state && m_rd_active)
+ m_rd_active = false;
+}
+
+
+//-------------------------------------------------
+// wr_w - begin conversion by line write
+//-------------------------------------------------
+
+WRITE_LINE_MEMBER(adc0804_device::wr_w)
+{
+ // WR input is active low
+ if (!state && !m_wr_active)
+ {
+ m_wr_active = true;
+ set_interrupt(false);
+ }
+ else if (state && m_wr_active)
+ {
+ m_wr_active = false;
+ conversion_start();
+ }
+}
diff --git a/src/devices/machine/adc0804.h b/src/devices/machine/adc0804.h
new file mode 100644
index 00000000000..50e59ad5615
--- /dev/null
+++ b/src/devices/machine/adc0804.h
@@ -0,0 +1,108 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/**********************************************************************
+
+ National Semiconductor ADC0804 8-bit µP Compatible A/D Converter
+
+***********************************************************************
+ ____ ____
+ /CS 1 |* \_/ | 20 Vcc (or Vref)
+ /RD 2 | | 19 CLK R
+ /WR 3 | | 18 DB0
+ CLK IN 4 | ADC0801 | 17 DB1
+ /INTR 5 | ADC0802 | 16 DB2
+ Vin(+) 6 | ADC0803 | 15 DB3
+ Vin(-) 7 | ADC0804 | 14 DB4
+ A GND 8 | ADC0805 | 13 DB5
+ Vref/2 9 | | 12 DB6
+ GND 10 |___________| 11 DB7
+
+**********************************************************************/
+
+#ifndef MAME_MACHINE_ADC0804_H
+#define MAME_MACHINE_ADC0804_H
+
+#pragma once
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> adc0804_device
+
+class adc0804_device : public device_t
+{
+ static const int s_conversion_cycles;
+
+public:
+ enum read_mode {
+ RD_STROBED = 0,
+ RD_BITBANGED,
+ RD_GROUNDED
+ };
+
+ // device type constructors
+ adc0804_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+ adc0804_device(const machine_config &mconfig, const char *tag, device_t *owner, double r, double c)
+ : adc0804_device(mconfig, tag, owner, 0U)
+ {
+ set_rc(r, c);
+ }
+
+ // callback configuration
+ auto vin_callback() { return m_vin_callback.bind(); }
+ auto intr_callback() { return m_intr_callback.bind(); }
+
+ // misc. configuration
+ void set_rc(double res, double cap) { assert(!configured()); m_res = res; m_cap = cap; }
+ void set_rd_mode(read_mode mode) { assert(!configured()); m_rd_mode = mode; }
+
+ // data bus interface
+ u8 read();
+ u8 read_and_write();
+ void write(u8 data = 0);
+
+ // control line interface
+ DECLARE_WRITE_LINE_MEMBER(rd_w);
+ DECLARE_WRITE_LINE_MEMBER(wr_w);
+
+ // status line interface
+ DECLARE_READ_LINE_MEMBER(intr_r) { return m_intr_active ? 0 : 1; }
+
+protected:
+ // device-level overrides
+ virtual void device_resolve_objects() override;
+ virtual void device_start() override;
+
+private:
+ // internal helpers
+ void set_interrupt(bool state);
+ void conversion_start();
+ TIMER_CALLBACK_MEMBER(conversion_done);
+
+ // callback objects
+ devcb_read8 m_vin_callback;
+ devcb_write_line m_intr_callback;
+
+ // timing parameters
+ double m_res;
+ double m_cap;
+ attotime m_fclk_rc;
+
+ // conversion timer
+ emu_timer *m_timer;
+
+ // inputs
+ read_mode m_rd_mode;
+ bool m_rd_active;
+ bool m_wr_active;
+
+ // internal state
+ u8 m_result;
+ bool m_intr_active;
+};
+
+// device type declarations
+DECLARE_DEVICE_TYPE(ADC0804, adc0804_device)
+
+#endif // MAME_MACHINE_ADC0804_H
diff --git a/src/devices/machine/atmel_arm_aic.h b/src/devices/machine/atmel_arm_aic.h
index 5c766e8319e..0e9e2fcdd21 100644
--- a/src/devices/machine/atmel_arm_aic.h
+++ b/src/devices/machine/atmel_arm_aic.h
@@ -60,7 +60,7 @@ private:
DECLARE_READ32_MEMBER(aic_imr_r) { return m_irqs_enabled; };
DECLARE_READ32_MEMBER(aic_ffsr_r) { return m_fast_irqs; };
- // can't use AM_RAM and AM_SHARE in device submaps
+ // can't use ram() and share() in device submaps
DECLARE_READ32_MEMBER(aic_smr_r) { return m_aic_smr[offset]; };
DECLARE_READ32_MEMBER(aic_svr_r) { return m_aic_svr[offset]; };
DECLARE_WRITE32_MEMBER(aic_smr_w) { COMBINE_DATA(&m_aic_smr[offset]); };
diff --git a/src/devices/machine/cxd1095.h b/src/devices/machine/cxd1095.h
index ec7466e5b4b..8327d99c1f7 100644
--- a/src/devices/machine/cxd1095.h
+++ b/src/devices/machine/cxd1095.h
@@ -48,7 +48,7 @@ class cxd1095_device : public device_t
{
public:
// construction/destruction
- cxd1095_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+ cxd1095_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
// configuration
template <std::size_t Port> auto in_port_cb() { static_assert(Port >= 0 && Port < 5, "invalid port"); return m_input_cb[Port].bind(); }
diff --git a/src/devices/machine/i80130.cpp b/src/devices/machine/i80130.cpp
index 7242e783592..ac27c755020 100644
--- a/src/devices/machine/i80130.cpp
+++ b/src/devices/machine/i80130.cpp
@@ -21,14 +21,14 @@ DEFINE_DEVICE_TYPE(I80130, i80130_device, "i80130", "I80130")
void i80130_device::rom_map(address_map &map)
{
- //AM_RANGE(0x0000, 0x3fff) AM_ROM AM_REGION("rom", 0)
+ //map(0x0000, 0x3fff).rom().region("rom", 0);
}
void i80130_device::io_map(address_map &map)
{
map(0x00, 0x0f).rw(FUNC(i80130_device::io_r), FUNC(i80130_device::io_w));
- //AM_RANGE(0x00, 0x01) AM_MIRROR(0x2) AM_DEVREADWRITE8("pic", pic8259_device, read, write, 0x00ff)
- //AM_RANGE(0x08, 0x0f) AM_DEVREADWRITE8("pit", pit8254_device, read, write, 0x00ff)
+ //map(0x00, 0x01).mirror(0x2).rw("pic", FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff);
+ //map(0x08, 0x0f).rw("pit", FUNC(pit8254_device::read), FUNC(pit8254_device::write)).umask16(0x00ff);
}
READ16_MEMBER( i80130_device::io_r )
diff --git a/src/devices/machine/i8251.cpp b/src/devices/machine/i8251.cpp
index 1712796e64d..5c1638acffd 100644
--- a/src/devices/machine/i8251.cpp
+++ b/src/devices/machine/i8251.cpp
@@ -23,9 +23,20 @@ To Do:
#include "emu.h"
#include "i8251.h"
-//#define VERBOSE 1
+#define LOG_STAT (1U << 1)
+#define LOG_COM (1U << 2)
+#define LOG_MODE (1U << 3)
+#define LOG_BITS (1U << 4)
+
+//#define VERBOSE (LOG_BITS|LOG_GENERAL)
+//#define LOG_OUTPUT_STREAM std::cout
+
#include "logmacro.h"
+#define LOGSTAT(...) LOGMASKED(LOG_STAT, __VA_ARGS__)
+#define LOGCOM(...) LOGMASKED(LOG_COM, __VA_ARGS__)
+#define LOGMODE(...) LOGMASKED(LOG_MODE, __VA_ARGS__)
+#define LOGBITS(...) LOGMASKED(LOG_BITS, __VA_ARGS__)
//**************************************************************************
// DEVICE DEFINITIONS
@@ -153,6 +164,7 @@ void i8251_device::receive_clock()
//logerror("I8251\n");
/* get bit received from other side and update receive register */
+ //LOGBITS("8251: Rx Sampled %d\n", m_rxd);
receive_register_update_bit(m_rxd);
if (is_receive_register_synchronized())
m_rxc_count = sync ? m_br_factor : (3 * m_br_factor / 2);
@@ -316,7 +328,9 @@ bool i8251_device::is_tx_enabled() const
void i8251_device::check_for_tx_start()
{
if (is_tx_enabled() && (m_status & (I8251_STATUS_TX_EMPTY | I8251_STATUS_TX_READY)) == I8251_STATUS_TX_EMPTY)
+ {
start_tx();
+ }
}
/*-------------------------------------------------
@@ -357,6 +371,7 @@ void i8251_device::transmit_clock()
if (!is_transmit_register_empty())
{
uint8_t data = transmit_register_get_data_bit();
+ LOGBITS("8251: Tx Present a %d\n", data);
m_txd_handler(data);
}
}
@@ -454,6 +469,7 @@ void i8251_device::device_reset()
/* no character to read by cpu */
/* transmitter is ready and is empty */
m_status = I8251_STATUS_TX_EMPTY | I8251_STATUS_TX_READY;
+ LOGSTAT("status is reset to %02x\n", m_status);
m_mode_byte = 0;
m_command = 0;
m_rx_data = 0;
@@ -478,67 +494,26 @@ void i8251_device::device_reset()
void i8251_device::command_w(uint8_t data)
{
/* command */
- LOG("I8251: Command byte\n");
-
m_command = data;
- LOG("Command byte: %02x\n", data);
-
- if (BIT(data, 7))
- LOG("hunt mode\n");
-
- if (BIT(data, 5))
- LOG("/rts set to 0\n");
- else
- LOG("/rts set to 1\n");
-
- if (BIT(data, 2))
- LOG("receive enable\n");
- else
- LOG("receive disable\n");
-
- if (BIT(data, 1))
- LOG("/dtr set to 0\n");
- else
- LOG("/dtr set to 1\n");
-
- if (BIT(data, 0))
- LOG("transmit enable\n");
- else
- LOG("transmit disable\n");
-
-
- /* bit 7:
- 0 = normal operation
- 1 = hunt mode
- bit 6:
- 0 = normal operation
- 1 = internal reset
- bit 5:
- 0 = /RTS set to 1
- 1 = /RTS set to 0
- bit 4:
- 0 = normal operation
- 1 = reset error flag
- bit 3:
- 0 = normal operation
- 1 = send break character
- bit 2:
- 0 = receive disable
- 1 = receive enable
- bit 1:
- 0 = /DTR set to 1
- 1 = /DTR set to 0
- bit 0:
- 0 = transmit disable
- 1 = transmit enable
- */
+ LOG("I8251: Command byte: %02x\n", data);
+ LOGCOM(" Tx enable: %d\n", data & 0x01 ? 1 : 0); // bit 0: 0 = transmit disable 1 = transmit enable
+ LOGCOM(" DTR : %d\n", data & 0x02 ? 1 : 0); // bit 1: 0 = /DTR set to 1 1 = /DTR set to 0
+ LOGCOM(" Rx enable: %d\n", data & 0x04 ? 1 : 0); // bit 2: 0 = receive disable 1 = receive enable
+ LOGCOM(" Send BRK : %d\n", data & 0x08 ? 1 : 0); // bit 3: 0 = normal operation 1 = send break character
+ LOGCOM(" Err reset: %d\n", data & 0x10 ? 1 : 0); // bit 4: 0 = normal operation 1 = reset error flag
+ LOGCOM(" RTS : %d\n", data & 0x20 ? 1 : 0); // bit 5: 0 = /RTS set to 1 1 = /RTS set to 0
+ LOGCOM(" Reset : %d\n", data & 0x40 ? 1 : 0); // bit 6: 0 = normal operation 1 = internal reset
+ LOGCOM(" Hunt mode: %d\n", data & 0x80 ? 1 : 0); // bit 7: 0 = normal operation 1 = hunt mode
m_rts_handler(!BIT(data, 5));
m_dtr_handler(!BIT(data, 1));
if (BIT(data, 4))
+ {
+ LOGSTAT("status errors are reset\n");
m_status &= ~(I8251_STATUS_PARITY_ERROR | I8251_STATUS_OVERRUN_ERROR | I8251_STATUS_FRAMING_ERROR);
+ }
if (BIT(data, 6))
{
@@ -596,7 +571,6 @@ void i8251_device::mode_w(uint8_t data)
3 = x64
Synchronous
-
bit 7: Number of sync characters
0 = 1 character
1 = 2 character
@@ -746,6 +720,7 @@ uint8_t i8251_device::status_r()
// Syndet always goes off after status read
update_syndet(false);
+
return status;
}
@@ -763,6 +738,7 @@ void i8251_device::data_w(uint8_t data)
/* writing clears */
m_status &=~I8251_STATUS_TX_READY;
+ LOGSTAT("8251: status cleared TX_READY by data_w\n");
update_tx_ready();
// Store state of tx enable when writing to DB buffer
@@ -788,11 +764,17 @@ void i8251_device::receive_character(uint8_t ch)
m_rx_data = ch;
+ LOGSTAT("status RX READY test %02x\n", m_status);
/* char has not been read and another has arrived! */
if (m_status & I8251_STATUS_RX_READY)
+ {
m_status |= I8251_STATUS_OVERRUN_ERROR;
+ LOGSTAT("status overrun set\n");
+ }
+ LOGSTAT("status pre RX READY set %02x\n", m_status);
m_status |= I8251_STATUS_RX_READY;
+ LOGSTAT("status post RX READY set %02x\n", m_status);
update_rx_ready();
}
@@ -810,6 +792,7 @@ uint8_t i8251_device::data_r()
if (!machine().side_effects_disabled())
{
m_status &= ~I8251_STATUS_RX_READY;
+ LOGSTAT("status RX_READY cleared\n");
update_rx_ready();
}
return m_rx_data;
@@ -836,7 +819,8 @@ void i8251_device::write(offs_t offset, uint8_t data)
WRITE_LINE_MEMBER(i8251_device::write_rxd)
{
m_rxd = state;
-// device_serial_interface::rx_w(state);
+ LOGBITS("8251: Presented a %d\n", m_rxd);
+ // device_serial_interface::rx_w(state);
}
WRITE_LINE_MEMBER(i8251_device::write_cts)
diff --git a/src/devices/machine/i8257.cpp b/src/devices/machine/i8257.cpp
index fb3c1a692ed..c51de689087 100644
--- a/src/devices/machine/i8257.cpp
+++ b/src/devices/machine/i8257.cpp
@@ -82,7 +82,7 @@ enum
inline void i8257_device::dma_request(int channel, int state)
{
- LOG("I8257 Channel %u DMA Request: %u\n", channel, state);
+ LOG("I8257 Channel %u DMA Request: %u (%sabled)\n", channel, state, MODE_CHAN_ENABLE(channel) ? "en" : "dis");
if (state)
m_request |= 1 << channel;
@@ -114,6 +114,7 @@ inline void i8257_device::set_hreq(int state)
{
m_out_hrq_cb(state);
m_hreq = state;
+ abort_timeslice();
}
}
@@ -212,13 +213,13 @@ inline void i8257_device::dma_write()
inline void i8257_device::advance()
{
LOG("%s\n", FUNCNAME);
- bool tc = (m_channel[m_current_channel].m_count == 0);
+ bool tc = m_tc;
bool al = (MODE_AUTOLOAD && (m_current_channel == 2));
+ set_tc(0);
if(tc)
{
m_status |= 1 << m_current_channel;
- set_tc(1);
if(al)
{
@@ -337,7 +338,6 @@ void i8257_device::device_reset()
m_state = STATE_SI;
m_transfer_mode = 0;
m_status = 0;
- m_request = 0;
m_msb = 0;
m_current_channel = -1;
m_last_channel = 3;
@@ -400,8 +400,8 @@ void i8257_device::execute_run()
m_state = STATE_S0;
else
{
- suspend_until_trigger(1, true);
m_icount = 0;
+ suspend_until_trigger(1, true);
}
break;
@@ -414,8 +414,8 @@ void i8257_device::execute_run()
}
else
{
- suspend_until_trigger(1, true);
m_icount = 0;
+ suspend_until_trigger(1, true);
}
break;
@@ -437,11 +437,23 @@ void i8257_device::execute_run()
dma_write();
}
- m_state = m_ready ? STATE_S4 : STATE_SW;
+ if (m_ready)
+ {
+ m_state = STATE_S4;
+ if (m_channel[m_current_channel].m_count == 0)
+ set_tc(1);
+ }
+ else
+ m_state = STATE_SW;
break;
case STATE_SW:
- m_state = m_ready ? STATE_S4 : STATE_SW;
+ if (m_ready)
+ {
+ m_state = STATE_S4;
+ if (m_channel[m_current_channel].m_count == 0)
+ set_tc(1);
+ }
break;
case STATE_S4:
@@ -451,7 +463,7 @@ void i8257_device::execute_run()
}
advance();
- if(next_channel())
+ if(m_hack && next_channel())
m_state = STATE_S1;
else
{
@@ -509,14 +521,16 @@ READ8_MEMBER( i8257_device::read )
break;
}
- m_msb = !m_msb;
+ if (!machine().side_effects_disabled())
+ m_msb = !m_msb;
}
else if(offset == REGISTER_STATUS)
{
data = m_status;
// clear TC bits
- m_status &= 0xf0;
+ if (!machine().side_effects_disabled())
+ m_status &= 0xf0;
}
return data;
@@ -585,7 +599,12 @@ WRITE8_MEMBER( i8257_device::write )
LOGSETUP("I8257 Command Register: %02x\n", m_transfer_mode);
}
- trigger(1);
+
+ if ((m_transfer_mode & m_request & 0x0f) != 0)
+ {
+ machine().scheduler().eat_all_cycles();
+ trigger(1);
+ }
}
diff --git a/src/devices/machine/ie15.cpp b/src/devices/machine/ie15.cpp
index 65a71ae23c3..851c06e2872 100644
--- a/src/devices/machine/ie15.cpp
+++ b/src/devices/machine/ie15.cpp
@@ -39,10 +39,18 @@ ie15_device::ie15_device(const machine_config &mconfig, device_type type, const
, m_p_videoram(*this, "video")
, m_p_chargen(*this, "chargen")
, m_beeper(*this, "beeper")
- , m_rs232(*this, "rs232")
, m_screen(*this, "screen")
, m_keyboard(*this, "keyboard")
, m_io_keyboard(*this, "io_keyboard")
+ , m_rs232_conn_txd_handler(*this)
+ , m_rs232_conn_dtr_handler(*this)
+ , m_rs232_conn_rts_handler(*this)
+ // Until the UART is implemented
+ , m_rs232_txbaud(*this, "RS232_TXBAUD")
+ , m_rs232_rxbaud(*this, "RS232_RXBAUD")
+ , m_rs232_databits(*this, "RS232_DATABITS")
+ , m_rs232_parity(*this, "RS232_PARITY")
+ , m_rs232_stopbits(*this, "RS232_STOPBITS")
{
}
@@ -228,7 +236,7 @@ void ie15_device::device_timer(emu_timer &timer, device_timer_id id, int param,
}
}
-WRITE_LINE_MEMBER(ie15_device::serial_rx_callback)
+WRITE_LINE_MEMBER(ie15_device::rs232_conn_rxd_w)
{
device_serial_interface::rx_w(state);
}
@@ -243,7 +251,7 @@ void ie15_device::rcv_complete()
void ie15_device::tra_callback()
{
uint8_t bit = transmit_register_get_data_bit();
- m_rs232->write_txd(bit);
+ m_rs232_conn_txd_handler(bit);
}
void ie15_device::tra_complete()
@@ -284,6 +292,24 @@ WRITE8_MEMBER(ie15_device::serial_speed_w)
return;
}
+WRITE_LINE_MEMBER(ie15_device::update_serial)
+{
+ int startbits = 1;
+ int databits = m_rs232_databits->read();
+ parity_t parity_table[] = { PARITY_NONE, PARITY_ODD, PARITY_EVEN, PARITY_MARK, PARITY_SPACE };
+ parity_t parity = parity_table[m_rs232_parity->read()];
+ stop_bits_t stopbits_table[] = { STOP_BITS_1, STOP_BITS_2 };
+ stop_bits_t stopbits = stopbits_table[m_rs232_stopbits->read()];
+
+ set_data_frame(startbits, databits, parity, stopbits);
+
+ int txbaud = m_rs232_txbaud->read();
+ set_tra_rate(txbaud);
+
+ int rxbaud = m_rs232_rxbaud->read();
+ set_rcv_rate(rxbaud);
+}
+
READ8_MEMBER(ie15_device::flag_r)
{
switch (offset)
@@ -375,6 +401,46 @@ INPUT_PORTS_START( ie15 )
PORT_DIPNAME(ie15_keyboard_device::IE_KB_LIN, ie15_keyboard_device::IE_KB_LIN, "LIN (Online)")
PORT_DIPSETTING(0x00, "Off")
PORT_DIPSETTING(ie15_keyboard_device::IE_KB_LIN, "On")
+
+ // Until the UART is implemented
+ PORT_START("RS232_RXBAUD")
+ PORT_CONFNAME(0xffff, 9600, "RX Baud") PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF, ie15_device, update_serial)
+ PORT_CONFSETTING(300, "300")
+ PORT_CONFSETTING(600, "600")
+ PORT_CONFSETTING(1200, "1200")
+ PORT_CONFSETTING(2400, "2400")
+ PORT_CONFSETTING(4800, "4800")
+ PORT_CONFSETTING(9600, "9600")
+ PORT_CONFSETTING(19200, "19200")
+
+ PORT_START("RS232_TXBAUD")
+ PORT_CONFNAME(0xffff, 9600, "TX Baud") PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF, ie15_device, update_serial)
+ PORT_CONFSETTING(300, "300")
+ PORT_CONFSETTING(600, "600")
+ PORT_CONFSETTING(1200, "1200")
+ PORT_CONFSETTING(2400, "2400")
+ PORT_CONFSETTING(4800, "4800")
+ PORT_CONFSETTING(9600, "9600")
+ PORT_CONFSETTING(19200, "19200")
+
+ PORT_START("RS232_DATABITS")
+ PORT_CONFNAME(0xf, 8, "Data Bits") PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF, ie15_device, update_serial)
+ PORT_CONFSETTING(7, "7")
+ PORT_CONFSETTING(8, "8")
+
+ PORT_START("RS232_PARITY")
+ PORT_CONFNAME(0x7, 0, "Parity") PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF, ie15_device, update_serial)
+ PORT_CONFSETTING(0, "None")
+ PORT_CONFSETTING(1, "Odd")
+ PORT_CONFSETTING(2, "Even")
+ PORT_CONFSETTING(3, "Mark")
+ PORT_CONFSETTING(4, "Space")
+
+ PORT_START("RS232_STOPBITS")
+ PORT_CONFNAME(0x3, 1, "Stop Bits") PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF, ie15_device, update_serial)
+ PORT_CONFSETTING(1, "1")
+ PORT_CONFSETTING(2, "2")
+
INPUT_PORTS_END
WRITE16_MEMBER( ie15_device::kbd_put )
@@ -390,6 +456,13 @@ WRITE16_MEMBER( ie15_device::kbd_put )
}
}
+void ie15_device::device_resolve_objects()
+{
+ //m_rs232_conn_dtr_handler.resolve_safe();
+ //m_rs232_conn_rts_handler.resolve_safe();
+ m_rs232_conn_txd_handler.resolve_safe();
+}
+
void ie15_device::device_start()
{
m_hblank_timer = timer_alloc(TIMER_HBLANK);
@@ -402,6 +475,8 @@ void ie15_device::device_start()
void ie15_device::device_reset()
{
+ update_serial(0);
+
memset(&m_video, 0, sizeof(m_video));
m_kb_ruslat = m_long_beep = m_kb_control = m_kb_data = m_kb_flag0 = 0;
m_kb_flag = IE_TRUE;
@@ -580,9 +655,6 @@ void ie15_device::ie15core(machine_config &config)
/* Devices */
IE15_KEYBOARD(config, m_keyboard, 0).keyboard_cb().set(FUNC(ie15_device::kbd_put));
- RS232_PORT(config, m_rs232, default_rs232_devices, "null_modem");
- m_rs232->rxd_handler().set(FUNC(ie15_device::serial_rx_callback));
-
SPEAKER(config, "mono").front_center();
BEEP(config, m_beeper, 2400);
m_beeper->add_route(ALL_OUTPUTS, "mono", 0.15);
diff --git a/src/devices/machine/ie15.h b/src/devices/machine/ie15.h
index 7390fb5fea5..025c3940f9e 100644
--- a/src/devices/machine/ie15.h
+++ b/src/devices/machine/ie15.h
@@ -6,7 +6,6 @@
#pragma once
-#include "bus/rs232/rs232.h"
#include "cpu/ie15/ie15.h"
#include "machine/ie15_kbd.h"
#include "sound/beep.h"
@@ -39,13 +38,22 @@ class ie15_device : public device_t, public device_serial_interface
public:
ie15_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- DECLARE_WRITE8_MEMBER(write) { term_write(data); }
+ // Interface to a RS232 connection.
+ auto rs232_conn_txd_handler() { return m_rs232_conn_txd_handler.bind(); }
+ auto rs232_conn_dtr_handler() { return m_rs232_conn_dtr_handler.bind(); }
+ auto rs232_conn_rts_handler() { return m_rs232_conn_rts_handler.bind(); }
+ DECLARE_WRITE_LINE_MEMBER(rs232_conn_dcd_w);
+ DECLARE_WRITE_LINE_MEMBER(rs232_conn_dsr_w);
+ DECLARE_WRITE_LINE_MEMBER(rs232_conn_ri_w);
+ DECLARE_WRITE_LINE_MEMBER(rs232_conn_cts_w);
+ DECLARE_WRITE_LINE_MEMBER(rs232_conn_rxd_w);
- DECLARE_WRITE_LINE_MEMBER(serial_rx_callback);
+ DECLARE_WRITE_LINE_MEMBER(update_serial);
protected:
ie15_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+ virtual void device_resolve_objects() override;
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
@@ -58,8 +66,6 @@ protected:
virtual void tra_callback() override;
virtual void tra_complete() override;
- void term_write(uint8_t data) { m_serial_rx_char = data; m_serial_rx_ready = IE_FALSE; }
-
private:
static const device_timer_id TIMER_HBLANK = 0;
void scanline_callback();
@@ -129,10 +135,20 @@ private:
required_region_ptr<u8> m_p_videoram;
required_region_ptr<u8> m_p_chargen;
required_device<beep_device> m_beeper;
- required_device<rs232_port_device> m_rs232;
required_device<screen_device> m_screen;
required_device<ie15_keyboard_device> m_keyboard;
required_ioport m_io_keyboard;
+
+ devcb_write_line m_rs232_conn_txd_handler;
+ devcb_write_line m_rs232_conn_dtr_handler;
+ devcb_write_line m_rs232_conn_rts_handler;
+
+ // Until the UART is implemented
+ required_ioport m_rs232_txbaud;
+ required_ioport m_rs232_rxbaud;
+ required_ioport m_rs232_databits;
+ required_ioport m_rs232_parity;
+ required_ioport m_rs232_stopbits;
};
DECLARE_DEVICE_TYPE(IE15, ie15_device)
diff --git a/src/devices/machine/ins8250.cpp b/src/devices/machine/ins8250.cpp
index d586816c511..ec5d8e041d7 100644
--- a/src/devices/machine/ins8250.cpp
+++ b/src/devices/machine/ins8250.cpp
@@ -434,8 +434,11 @@ u8 ins8250_uart_device::ins8250_r(offs_t offset)
data = m_regs.iir;
/* The documentation says that reading this register will
clear the int if this is the source of the int */
- if (!machine().side_effects_disabled() && (m_regs.ier & COM_INT_PENDING_TRANSMITTER_HOLDING_REGISTER_EMPTY))
- clear_int(COM_INT_PENDING_TRANSMITTER_HOLDING_REGISTER_EMPTY);
+ if (!machine().side_effects_disabled())
+ {
+ if (m_regs.iir == 0x02)
+ clear_int(COM_INT_PENDING_TRANSMITTER_HOLDING_REGISTER_EMPTY);
+ }
break;
case 3:
data = m_regs.lcr;
diff --git a/src/devices/machine/mb14241.cpp b/src/devices/machine/mb14241.cpp
index 31a209e44cd..c9d08eb503e 100644
--- a/src/devices/machine/mb14241.cpp
+++ b/src/devices/machine/mb14241.cpp
@@ -17,7 +17,7 @@
DEFINE_DEVICE_TYPE(MB14241, mb14241_device, "mb14241", "MB14241 Data Shifter")
-mb14241_device::mb14241_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+mb14241_device::mb14241_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, MB14241, tag, owner, clock), m_shift_data(0), m_shift_count(0)
{
}
@@ -47,17 +47,17 @@ void mb14241_device::device_reset()
IMPLEMENTATION
*****************************************************************************/
-WRITE8_MEMBER( mb14241_device::shift_count_w )
+void mb14241_device::shift_count_w(u8 data)
{
m_shift_count = ~data & 0x07;
}
-WRITE8_MEMBER( mb14241_device::shift_data_w )
+void mb14241_device::shift_data_w(u8 data)
{
- m_shift_data = (m_shift_data >> 8) | ((uint16_t)data << 7);
+ m_shift_data = (m_shift_data >> 8) | (u16(data) << 7);
}
-READ8_MEMBER( mb14241_device::shift_result_r )
+u8 mb14241_device::shift_result_r()
{
- return m_shift_data >> m_shift_count;
+ return u8((m_shift_data >> m_shift_count) & 0x00ff);
}
diff --git a/src/devices/machine/mb14241.h b/src/devices/machine/mb14241.h
index 378c3c75b7d..00bc2a55949 100644
--- a/src/devices/machine/mb14241.h
+++ b/src/devices/machine/mb14241.h
@@ -14,11 +14,11 @@
class mb14241_device : public device_t
{
public:
- mb14241_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+ mb14241_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
- DECLARE_WRITE8_MEMBER( shift_count_w );
- DECLARE_WRITE8_MEMBER( shift_data_w );
- DECLARE_READ8_MEMBER( shift_result_r );
+ void shift_count_w(u8 data);
+ void shift_data_w(u8 data);
+ u8 shift_result_r();
protected:
// device-level overrides
@@ -27,9 +27,8 @@ protected:
private:
// internal state
-
- uint16_t m_shift_data; /* 15 bits only */
- uint8_t m_shift_count; /* 3 bits */
+ u16 m_shift_data; // 15 bits only
+ u8 m_shift_count; // 3 bits
};
DECLARE_DEVICE_TYPE(MB14241, mb14241_device)
diff --git a/src/devices/machine/mb8421.cpp b/src/devices/machine/mb8421.cpp
index e6344843f92..087c84d8595 100644
--- a/src/devices/machine/mb8421.cpp
+++ b/src/devices/machine/mb8421.cpp
@@ -5,7 +5,7 @@
Fujitsu MB8421/22/31/32-90/-90L/-90LL/-12/-12L/-12LL
CMOS 16K-bit (2KB) dual-port SRAM
- MB84x2 lacks interrupt pins, it's basically as simple as AM_RAM AM_SHARE("x")
+ MB84x2 lacks interrupt pins, it's basically as simple as ram().share("x")
MB843x is same as MB842x, except that it supports slave mode for 16-bit or
32-bit expansion. It makes sure there are no clashes with the _BUSY pin.
diff --git a/src/devices/machine/mos6530n.h b/src/devices/machine/mos6530n.h
index 0042a73e429..5de5bba9338 100644
--- a/src/devices/machine/mos6530n.h
+++ b/src/devices/machine/mos6530n.h
@@ -224,7 +224,7 @@ public:
virtual void ram_map(address_map &map);
virtual void io_map(address_map &map);
- // is there a better way to access the memory map when not using AM_DEVICE?
+ // is there a better way to access the memory map when not using m()?
DECLARE_READ8_MEMBER(io_r);
DECLARE_WRITE8_MEMBER(io_w);
diff --git a/src/devices/machine/netlist.cpp b/src/devices/machine/netlist.cpp
index 2c5b9cc85a1..2d0ba8244b4 100644
--- a/src/devices/machine/netlist.cpp
+++ b/src/devices/machine/netlist.cpp
@@ -286,13 +286,13 @@ public:
: netlist::nl_exception(plib::pfmt(fmt)(std::forward<Args>(args)...)) { }
};
-class netlist_source_memregion_t : public netlist::source_t
+class netlist_source_memregion_t : public netlist::source_netlist_t
{
public:
netlist_source_memregion_t(device_t &dev, pstring name)
- : netlist::source_t(), m_dev(dev), m_name(name)
+ : netlist::source_netlist_t(), m_dev(dev), m_name(name)
{
}
@@ -302,7 +302,7 @@ private:
pstring m_name;
};
-class netlist_data_memregions_t : public netlist::source_t
+class netlist_data_memregions_t : public netlist::source_data_t
{
public:
netlist_data_memregions_t(const device_t &dev);
@@ -333,7 +333,7 @@ plib::unique_ptr<std::istream> netlist_source_memregion_t::stream(const pstring
}
netlist_data_memregions_t::netlist_data_memregions_t(const device_t &dev)
- : netlist::source_t(netlist::source_t::DATA), m_dev(dev)
+ : netlist::source_data_t(), m_dev(dev)
{
}
@@ -499,9 +499,9 @@ public:
for (int i = 0; i < MAX_INPUT_CHANNELS; i++)
{
- m_channels[i].m_param_name = netlist::pool().make_poolptr<netlist::param_str_t>(*this, plib::pfmt("CHAN{1}")(i), "");
- m_channels[i].m_param_mult = netlist::pool().make_poolptr<netlist::param_double_t>(*this, plib::pfmt("MULT{1}")(i), 1.0);
- m_channels[i].m_param_offset = netlist::pool().make_poolptr<netlist::param_double_t>(*this, plib::pfmt("OFFSET{1}")(i), 0.0);
+ m_channels[i].m_param_name = netlist::pool().make_unique<netlist::param_str_t>(*this, plib::pfmt("CHAN{1}")(i), "");
+ m_channels[i].m_param_mult = netlist::pool().make_unique<netlist::param_double_t>(*this, plib::pfmt("MULT{1}")(i), 1.0);
+ m_channels[i].m_param_offset = netlist::pool().make_unique<netlist::param_double_t>(*this, plib::pfmt("OFFSET{1}")(i), 0.0);
}
}
@@ -548,11 +548,11 @@ public:
struct channel
{
- netlist::pool_owned_ptr<netlist::param_str_t> m_param_name;
+ netlist::unique_pool_ptr<netlist::param_str_t> m_param_name;
netlist::param_double_t *m_param;
stream_sample_t *m_buffer;
- netlist::pool_owned_ptr<netlist::param_double_t> m_param_mult;
- netlist::pool_owned_ptr<netlist::param_double_t> m_param_offset;
+ netlist::unique_pool_ptr<netlist::param_double_t> m_param_mult;
+ netlist::unique_pool_ptr<netlist::param_double_t> m_param_offset;
};
channel m_channels[MAX_INPUT_CHANNELS];
netlist::netlist_time m_inc;
@@ -732,10 +732,10 @@ void netlist_mame_analog_output_device::custom_netlist_additions(netlist::netlis
if (owner()->has_running_machine())
m_delegate.bind_relative_to(owner()->machine().root_device());
- auto dev = netlist::pool().make_poolptr<NETLIB_NAME(analog_callback)>(nlstate, dfqn);
+ auto dev = netlist::pool().make_unique<NETLIB_NAME(analog_callback)>(nlstate, dfqn);
//static_cast<NETLIB_NAME(analog_callback) *>(dev.get())->register_callback(std::move(m_delegate));
dev->register_callback(std::move(m_delegate));
- nlstate.add_dev(dfqn, std::move(dev));
+ nlstate.register_device(dfqn, std::move(dev));
nlstate.setup().register_link(dname + ".IN", pin);
}
@@ -772,9 +772,9 @@ void netlist_mame_logic_output_device::custom_netlist_additions(netlist::netlist
if (owner()->has_running_machine())
m_delegate.bind_relative_to(owner()->machine().root_device());
- auto dev = netlist::pool().make_poolptr<NETLIB_NAME(logic_callback)>(nlstate, dfqn);
+ auto dev = netlist::pool().make_unique<NETLIB_NAME(logic_callback)>(nlstate, dfqn);
dev->register_callback(std::move(m_delegate));
- nlstate.add_dev(dfqn, std::move(dev));
+ nlstate.register_device(dfqn, std::move(dev));
nlstate.setup().register_link(dname + ".IN", pin);
}
@@ -1084,7 +1084,7 @@ plib::unique_ptr<netlist::netlist_t> netlist_mame_device::base_validity_check(va
//netlist_mame_t lnetlist(*this, "netlist", plib::make_unique<netlist_validate_callbacks_t>());
auto lnetlist = plib::make_unique<netlist::netlist_t>("netlist", plib::make_unique<netlist_validate_callbacks_t>());
// enable validation mode
- lnetlist->nlstate().setup().enable_validation();
+ lnetlist->nlstate().setup().set_extended_validation(false);
common_dev_start(lnetlist.get());
for (device_t &d : subdevices())
@@ -1101,6 +1101,7 @@ plib::unique_ptr<netlist::netlist_t> netlist_mame_device::base_validity_check(va
}
catch (memregion_not_set &err)
{
+ // Do not report an error. Validity check has no access to ROM area.
osd_printf_verbose("%s\n", err.what());
}
catch (emu_fatalerror &err)
@@ -1126,7 +1127,7 @@ void netlist_mame_device::device_start()
{
LOGDEVCALLS("device_start entry\n");
- m_netlist = netlist::pool().make_poolptr<netlist_mame_t>(*this, "netlist");
+ m_netlist = netlist::pool().make_unique<netlist_mame_t>(*this, "netlist");
if (!machine().options().verbose())
{
m_netlist->nlstate().log().verbose.set_enabled(false);
@@ -1183,7 +1184,7 @@ ATTR_COLD void netlist_mame_device::device_pre_save()
netlist().run_state_manager().pre_save();
}
-void netlist_mame_device::update_icount(netlist::netlist_time time)
+void netlist_mame_device::update_icount(netlist::netlist_time time) noexcept
{
const netlist::netlist_time newt(time);
const netlist::netlist_time delta(newt - m_old + m_rem);
@@ -1193,7 +1194,7 @@ void netlist_mame_device::update_icount(netlist::netlist_time time)
m_icount -= d;
}
-void netlist_mame_device::check_mame_abort_slice()
+void netlist_mame_device::check_mame_abort_slice() noexcept
{
if (m_icount <= 0)
netlist().abort_current_queue_slice();
diff --git a/src/devices/machine/netlist.h b/src/devices/machine/netlist.h
index 946d1322ddc..52d7602248a 100644
--- a/src/devices/machine/netlist.h
+++ b/src/devices/machine/netlist.h
@@ -72,11 +72,11 @@ public:
void set_setup_func(func_type &&func) { m_setup_func = std::move(func); }
- ATTR_HOT inline netlist::setup_t &setup();
- ATTR_HOT inline netlist_mame_t &netlist() { return *m_netlist; }
+ netlist::setup_t &setup();
+ netlist_mame_t &netlist() noexcept { return *m_netlist; }
- ATTR_HOT void update_icount(netlist::netlist_time time);
- ATTR_HOT void check_mame_abort_slice();
+ void update_icount(netlist::netlist_time time) noexcept;
+ void check_mame_abort_slice() noexcept;
static void register_memregion_source(netlist::nlparse_t &setup, device_t &dev, const char *name);
@@ -111,7 +111,7 @@ private:
netlist::netlist_time m_rem;
netlist::netlist_time m_old;
- netlist::pool_owned_ptr<netlist_mame_t> m_netlist;
+ netlist::unique_pool_ptr<netlist_mame_t> m_netlist;
func_type m_setup_func;
};
diff --git a/src/devices/machine/nvram.cpp b/src/devices/machine/nvram.cpp
index b2949c1e837..6d7c2302ae8 100644
--- a/src/devices/machine/nvram.cpp
+++ b/src/devices/machine/nvram.cpp
@@ -134,7 +134,7 @@ void nvram_device::determine_final_base()
{
memory_share *share = owner()->memshare(tag());
if (share == nullptr)
- throw emu_fatalerror("NVRAM device '%s' has no corresponding AM_SHARE region", tag());
+ throw emu_fatalerror("NVRAM device '%s' has no corresponding share() region", tag());
m_base = share->ptr();
m_length = share->bytes();
}
diff --git a/src/devices/machine/pit8253.cpp b/src/devices/machine/pit8253.cpp
index 28173bad237..ddf63ff00fb 100644
--- a/src/devices/machine/pit8253.cpp
+++ b/src/devices/machine/pit8253.cpp
@@ -30,10 +30,16 @@
***************************************************************************/
-#define VERBOSE 0
+#define LOG_1 (1U << 1)
+#define LOG_2 (1U << 2)
-#define LOG1(msg) do { if (VERBOSE >= 1) logerror msg; } while (0)
-#define LOG2(msg) do { if (VERBOSE >= 2) logerror msg; } while (0)
+//#define VERBOSE (LOG_1 | LOG_2)
+//#define LOG_OUTPUT_STREAM std::cout
+
+#include "logmacro.h"
+
+#define LOG1(...) LOGMASKED(LOG_1, __VA_ARGS__)
+#define LOG2(...) LOGMASKED(LOG_2, __VA_ARGS__)
DEFINE_DEVICE_TYPE(PIT_COUNTER, pit_counter_device, "pit_counter", "PIT Counter")
DEFINE_DEVICE_TYPE(PIT8253, pit8253_device, "pit8253", "Intel 8253 PIT")
@@ -288,7 +294,7 @@ void pit_counter_device::set_output(int output)
if (output != m_output)
{
m_output = output;
- LOG2(("set_output(): %s\n", output ? "low to high" : "high to low"));
+ LOG2("set_output() timer %d: %s\n", m_index, output ? "low to high" : "high to low");
downcast<pit8253_device *>(owner())->m_out_handler[m_index](output);
}
@@ -305,8 +311,8 @@ void pit_counter_device::simulate(int64_t elapsed_cycles)
static const uint32_t CYCLES_NEVER = (0xffffffff);
uint32_t cycles_to_output = 0;
- LOG2(("simulate(): simulating %d cycles in mode %d, bcd = %d, phase = %d, gate = %d, output %d, value = 0x%04x\n",
- (int)elapsed_cycles, mode, bcd, m_phase, m_gate, m_output, m_value));
+ LOG2("simulate(): simulating %d cycles in mode %d, bcd = %d, phase = %d, gate = %d, output %d, value = 0x%04x\n",
+ (int)elapsed_cycles, mode, bcd, m_phase, m_gate, m_output, m_value);
switch (mode)
{
@@ -688,8 +694,8 @@ void pit_counter_device::simulate(int64_t elapsed_cycles)
m_updatetimer->adjust(next_fire_time - machine().time());
}
- LOG2(("simulate(): simulating %d cycles in mode %d, bcd = %d, phase = %d, gate = %d, output %d, value = 0x%04x, cycles_to_output = %04x\n",
- (int)elapsed_cycles, mode, bcd, m_phase, m_gate, m_output, m_value, cycles_to_output));
+ LOG2("simulate(): simulating %d cycles in mode %d, bcd = %d, phase = %d, gate = %d, output %d, value = 0x%04x, cycles_to_output = %04x\n",
+ (int)elapsed_cycles, mode, bcd, m_phase, m_gate, m_output, m_value, cycles_to_output);
}
/* This brings timer "timer" up to date */
@@ -701,7 +707,7 @@ void pit_counter_device::update()
attotime elapsed_time = now - m_last_updated;
int64_t elapsed_cycles = elapsed_time.as_double() * m_clockin;
- LOG2(("update(): %d elapsed_cycles\n", elapsed_cycles));
+ LOG2("update(): %d elapsed_cycles\n", elapsed_cycles);
if (m_clockin)
m_last_updated += elapsed_cycles * attotime::from_hz(m_clockin);
@@ -799,7 +805,7 @@ uint8_t pit_counter_device::read()
}
}
- LOG2(("read(): data=0x%02x\n", data));
+ LOG2("read(): data=0x%02x\n", data);
return data;
}
@@ -807,7 +813,7 @@ uint8_t pit8253_device::read(offs_t offset)
{
offset &= 3;
- LOG2(("read(): offset %d\n", offset));
+ LOG2("read(): offset %d\n", offset);
if (offset == 3)
{
@@ -824,7 +830,7 @@ uint8_t pit8253_device::read(offs_t offset)
void pit_counter_device::load_count(uint16_t newcount)
{
int mode = CTRL_MODE(m_control);
- LOG1(("load_count(): %04x\n", newcount));
+ LOG1("load_count(): %04x\n", newcount);
if (newcount == 1)
{
@@ -910,7 +916,7 @@ void pit8253_device::readback_command(uint8_t data)
void pit8254_device::readback_command(uint8_t data)
{
- LOG1(("write(): readback %02x\n", data & 0x3f));
+ LOG1("write(): readback %02x\n", data & 0x3f);
/* Bit 0 of data must be 0. Todo: find out what the hardware does if it isn't. */
int read_command = (data >> 4) & 3;
@@ -930,7 +936,7 @@ void pit_counter_device::control_w(uint8_t data)
if (CTRL_ACCESS(data) == 0)
{
- LOG1(("write(): readback\n"));
+ LOG1("write(): readback\n");
/* Latch current timer value */
/* Experimentally verified: this command does not affect the mode control register */
@@ -938,7 +944,7 @@ void pit_counter_device::control_w(uint8_t data)
}
else
{
- LOG1(("write(): bytes=%d mode=%d bcd=%d\n", (data >> 4) & 3, (data >> 1) & 7, data & 1));
+ LOG1("write(): bytes=%d mode=%d bcd=%d\n", (data >> 4) & 3, (data >> 1) & 7, data & 1);
m_control = (data & 0x3f);
m_null_count = 1;
@@ -1021,7 +1027,7 @@ void pit8253_device::write(offs_t offset, uint8_t data)
{
offset &= 3;
- LOG2(("write(): offset=%d data=0x%02x\n", offset, data));
+ LOG2("write(): offset=%d data=0x%02x\n", offset, data);
if (offset == 3)
{
@@ -1038,7 +1044,7 @@ void pit8253_device::write(offs_t offset, uint8_t data)
void pit_counter_device::gate_w(int state)
{
- LOG2(("gate_w(): state=%d\n", state));
+ LOG2("gate_w(): state=%d\n", state);
if (state != m_gate)
{
@@ -1059,7 +1065,7 @@ void pit_counter_device::gate_w(int state)
void pit_counter_device::set_clockin(double new_clockin)
{
- LOG2(("set_clockin(): clockin = %f\n", new_clockin));
+ LOG2("set_clockin(): clockin = %f\n", new_clockin);
update();
m_clockin = new_clockin;
@@ -1069,7 +1075,7 @@ void pit_counter_device::set_clockin(double new_clockin)
void pit_counter_device::set_clock_signal(int state)
{
- LOG2(("set_clock_signal(): state = %d\n", state));
+ LOG2("set_clock_signal(): state = %d\n", state);
/* Trigger on low to high transition */
if (!m_clock_signal && state)
diff --git a/src/devices/machine/sega_scu.cpp b/src/devices/machine/sega_scu.cpp
index 54b46c57114..468a0b686a5 100644
--- a/src/devices/machine/sega_scu.cpp
+++ b/src/devices/machine/sega_scu.cpp
@@ -109,12 +109,12 @@ DEFINE_DEVICE_TYPE(SEGA_SCU, sega_scu_device, "sega_scu", "Sega System Control U
// LIVE DEVICE
//**************************************************************************
-//AM_RANGE(0x0000, 0x0003) src
-//AM_RANGE(0x0004, 0x0007) dst
-//AM_RANGE(0x0008, 0x000b) size
-//AM_RANGE(0x000c, 0x000f) src/dst add values
-//AM_RANGE(0x0010, 0x0013) DMA enable
-//AM_RANGE(0x0014, 0x0017) DMA start factor
+//map(0x0000, 0x0003) src
+//map(0x0004, 0x0007) dst
+//map(0x0008, 0x000b) size
+//map(0x000c, 0x000f) src/dst add values
+//map(0x0010, 0x0013) DMA enable
+//map(0x0014, 0x0017) DMA start factor
void sega_scu_device::regs_map(address_map &map)
{
@@ -123,7 +123,7 @@ void sega_scu_device::regs_map(address_map &map)
map(0x0040, 0x0057).rw(FUNC(sega_scu_device::dma_lv2_r), FUNC(sega_scu_device::dma_lv2_w));
// Super Major League and Shin Megami Tensei - Akuma Zensho reads from there (undocumented), DMA status mirror?
map(0x005c, 0x005f).r(FUNC(sega_scu_device::dma_status_r));
-// AM_RANGE(0x0060, 0x0063) AM_WRITE(dma_force_stop_w)
+// map(0x0060, 0x0063).w(FUNC(sega_scu_device::dma_force_stop_w));
map(0x007c, 0x007f).r(FUNC(sega_scu_device::dma_status_r));
map(0x0080, 0x0083).rw(m_scudsp, FUNC(scudsp_cpu_device::program_control_r), FUNC(scudsp_cpu_device::program_control_w));
map(0x0084, 0x0087).w(m_scudsp, FUNC(scudsp_cpu_device::program_w));
@@ -134,10 +134,10 @@ void sega_scu_device::regs_map(address_map &map)
map(0x009a, 0x009b).w(FUNC(sega_scu_device::t1_mode_w));
map(0x00a0, 0x00a3).rw(FUNC(sega_scu_device::irq_mask_r), FUNC(sega_scu_device::irq_mask_w));
map(0x00a4, 0x00a7).rw(FUNC(sega_scu_device::irq_status_r), FUNC(sega_scu_device::irq_status_w));
-// AM_RANGE(0x00a8, 0x00ab) AM_WRITE(abus_irqack_w)
-// AM_RANGE(0x00b0, 0x00b7) AM_READWRITE(abus_set_r,abus_set_w)
-// AM_RANGE(0x00b8, 0x00bb) AM_READWRITE(abus_refresh_r,abus_refresh_w)
-// AM_RANGE(0x00c4, 0x00c7) AM_READWRITE(sdram_r,sdram_w)
+// map(0x00a8, 0x00ab).w(FUNC(sega_scu_device::abus_irqack_w));
+// map(0x00b0, 0x00b7).rw(FUNC(sega_scu_device::abus_set_r), FUNC(sega_scu_device::abus_set_w));
+// map(0x00b8, 0x00bb).rw(FUNC(sega_scu_device::abus_refresh_r), FUNC(sega_scu_device::abus_refresh_w));
+// map(0x00c4, 0x00c7).rw(FUNC(sega_scu_device::sdram_r), FUNC(sega_scu_device::sdram_w));
map(0x00c8, 0x00cb).r(FUNC(sega_scu_device::version_r));
}
diff --git a/src/devices/machine/smpc.cpp b/src/devices/machine/smpc.cpp
index c62e65e1703..440f8e06f78 100644
--- a/src/devices/machine/smpc.cpp
+++ b/src/devices/machine/smpc.cpp
@@ -180,7 +180,7 @@ DEFINE_DEVICE_TYPE(SMPC_HLE, smpc_hle_device, "smpc_hle", "Sega Saturn SMPC HLE
// "uplift_submaps unhandled case: range straddling slots."
void smpc_hle_device::smpc_regs(address_map &map)
{
-// ADDRESS_MAP_UNMAP_HIGH
+// map.unmap_value_high();
map(0x00, 0x0d).w(FUNC(smpc_hle_device::ireg_w));
map(0x1f, 0x1f).w(FUNC(smpc_hle_device::command_register_w));
map(0x20, 0x5f).r(FUNC(smpc_hle_device::oreg_r));
diff --git a/src/devices/machine/vrender0.cpp b/src/devices/machine/vrender0.cpp
index c60a8908207..76442866a6d 100644
--- a/src/devices/machine/vrender0.cpp
+++ b/src/devices/machine/vrender0.cpp
@@ -115,7 +115,7 @@ void vrender0soc_device::device_add_mconfig(machine_config &config)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
// evolution soccer defaults
- m_screen->set_raw((XTAL(14'318'180)*2)/4, 455, 0, 320, 262, 0, 240);
+ m_screen->set_raw((XTAL(14'318'181)*2)/4, 455, 0, 320, 262, 0, 240);
m_screen->set_screen_update(FUNC(vrender0soc_device::screen_update));
m_screen->screen_vblank().set(FUNC(vrender0soc_device::screen_vblank));
m_screen->set_palette(m_palette);
diff --git a/src/devices/machine/wtl3132.cpp b/src/devices/machine/wtl3132.cpp
index 7fdfc61a8b3..64bd5a7942f 100644
--- a/src/devices/machine/wtl3132.cpp
+++ b/src/devices/machine/wtl3132.cpp
@@ -323,6 +323,19 @@ void wtl3132_device::stage3(unsigned const index)
m_cr = (m_aa_in[1].v & 0xff000000) && (~m_aa_in[1].v & 0xff000000);
m_a_out = i32_to_f32(m_aa_in[1].v);
+
+ /*
+ * HACK: documentation specifies that the float instruction sets
+ * the condition register when ENCN=1, M1=1 and the operand sign
+ * bits are inconsistent. It does not say what should happen for
+ * other values of ENCN, however setting the condition register to
+ * indicate the result is less than zero like other ALU operations
+ * appears to be required by the SGI GR1 DMA microcode (and some
+ * other assumptions made there).
+ */
+ if (OPF(code, ENCN) == 2)
+ m_cr = f32_lt(m_a_out, i32_to_f32(0));
+
LOG("slot %d stage 3 float 0x%08x == %f\n", index, m_aa_in[1].v, u2f(m_a_out.v));
break;
case MF_FIX:
diff --git a/src/devices/sound/c140.cpp b/src/devices/sound/c140.cpp
index cb3288e4fd6..ca3bdc90977 100644
--- a/src/devices/sound/c140.cpp
+++ b/src/devices/sound/c140.cpp
@@ -10,12 +10,7 @@ This chip controls 24 channels (C140) or 16 (219) of PCM.
16 bytes are associated with each channel.
Channels can be 8 bit signed PCM, or 12 bit signed PCM.
-Timer behavior is not yet handled.
-
-Unmapped registers:
- 0x1f8:timer interval? (Nx0.1 ms)
- 0x1fa:irq ack? timer restart?
- 0x1fe:timer switch?(0:off 1:on)
+TODO: What does the INT0 pin do? Normally Namco tied it to VOL0 (with VOL1 = VCC).
--------------
diff --git a/src/devices/sound/wave.cpp b/src/devices/sound/wave.cpp
index ac564f70226..6506ef41d13 100644
--- a/src/devices/sound/wave.cpp
+++ b/src/devices/sound/wave.cpp
@@ -54,33 +54,27 @@ void wave_device::device_start()
void wave_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
{
- cassette_state state;
- double time_index;
- double duration;
stream_sample_t *left_buffer = outputs[0];
stream_sample_t *right_buffer = nullptr;
- int i;
speaker_device_iterator spkiter(*owner());
int speakers = spkiter.count();
- if (speakers>1)
+ if (speakers > 1)
right_buffer = outputs[1];
- state = m_cass->get_state();
-
- state = (cassette_state)(state & (CASSETTE_MASK_UISTATE | CASSETTE_MASK_MOTOR | CASSETTE_MASK_SPEAKER));
+ cassette_state state = m_cass->get_state() & (CASSETTE_MASK_UISTATE | CASSETTE_MASK_MOTOR | CASSETTE_MASK_SPEAKER);
if (m_cass->exists() && (ALWAYS_PLAY_SOUND || (state == (CASSETTE_PLAY | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED))))
{
cassette_image *cassette = m_cass->get_image();
- time_index = m_cass->get_position();
- duration = ((double) samples) / m_cass->machine().sample_rate();
+ double time_index = m_cass->get_position();
+ double duration = double(samples) / m_cass->machine().sample_rate();
cassette_get_samples(cassette, 0, time_index, duration, samples, 2, left_buffer, CASSETTE_WAVEFORM_16BIT);
if (speakers > 1)
cassette_get_samples(cassette, 1, time_index, duration, samples, 2, right_buffer, CASSETTE_WAVEFORM_16BIT);
- for (i = samples - 1; i >= 0; i--)
+ for (int i = samples - 1; i >= 0; i--)
{
left_buffer[i] = ((int16_t *) left_buffer)[i];
if (speakers > 1)
diff --git a/src/devices/sound/ymf262.cpp b/src/devices/sound/ymf262.cpp
index 563f7016513..4fbf030cfb9 100644
--- a/src/devices/sound/ymf262.cpp
+++ b/src/devices/sound/ymf262.cpp
@@ -2615,16 +2615,15 @@ void ymf262_update_one(void *_chip, OPL3SAMPLE **buffers, int length)
signed int *chanout = chip->chanout;
uint8_t rhythm = chip->rhythm&0x20;
- OPL3SAMPLE *ch_a = buffers[0];
- OPL3SAMPLE *ch_b = buffers[1];
- OPL3SAMPLE *ch_c = buffers[2];
- OPL3SAMPLE *ch_d = buffers[3];
+ OPL3SAMPLE *ch_a = buffers[0]; // DO2 (mixed) left output for OPL4
+ OPL3SAMPLE *ch_b = buffers[1]; // DO2 (mixed) right output for OPL4
+ OPL3SAMPLE *ch_c = buffers[2]; // DO0 (FM only) left output for OPL4
+ OPL3SAMPLE *ch_d = buffers[3]; // DO0 (FM only) right output for OPL4
for( i=0; i < length ; i++ )
{
int a,b,c,d;
-
advance_lfo(chip);
/* clear channel outputs */
diff --git a/src/devices/sound/ymf278b.cpp b/src/devices/sound/ymf278b.cpp
index dc0c4693aab..ada4a5544c7 100644
--- a/src/devices/sound/ymf278b.cpp
+++ b/src/devices/sound/ymf278b.cpp
@@ -225,6 +225,14 @@ void ymf278b_device::sound_stream_update(sound_stream &stream, stream_sample_t *
{
// TODO : FM only output is DO0, DO2 is actually mixed FM+PCM outputs
ymf262_update_one(m_ymf262, outputs, samples);
+ vl = m_mix_level[m_fm_l];
+ vr = m_mix_level[m_fm_r];
+ for (i = 0; i < samples; i++)
+ {
+ // DO2 mixing
+ outputs[0][i] = (outputs[0][i] * vl) >> 16;
+ outputs[1][i] = (outputs[1][i] * vr) >> 16;
+ }
return;
}
diff --git a/src/devices/video/imagetek_i4100.cpp b/src/devices/video/imagetek_i4100.cpp
index 1bb7c5fde56..e9ea5322c2a 100644
--- a/src/devices/video/imagetek_i4100.cpp
+++ b/src/devices/video/imagetek_i4100.cpp
@@ -196,7 +196,7 @@ void imagetek_i4220_device::v2_map(address_map &map)
// repeated here in Puzzlet compatibility mode
map(0x78800, 0x78801).rw(FUNC(imagetek_i4220_device::sprite_count_r), FUNC(imagetek_i4220_device::sprite_count_w));
// ... this one breaks Blazing Tornado tho
-// AM_RANGE(0x78802, 0x78803) AM_READWRITE(sprite_priority_r, sprite_priority_w)
+// map(0x78802, 0x78803).rw(FUNC(imagetek_i4220_device::sprite_priority_r), FUNC(imagetek_i4220_device::sprite_priority_w));
map(0x78804, 0x78805).rw(FUNC(imagetek_i4220_device::sprite_yoffset_r), FUNC(imagetek_i4220_device::sprite_yoffset_w));
map(0x78806, 0x78807).rw(FUNC(imagetek_i4220_device::sprite_xoffset_r), FUNC(imagetek_i4220_device::sprite_xoffset_w));
map(0x78808, 0x78809).rw(FUNC(imagetek_i4220_device::sprite_color_code_r), FUNC(imagetek_i4220_device::sprite_color_code_w));
diff --git a/src/devices/video/mb90082.cpp b/src/devices/video/mb90082.cpp
index 957669fb48b..8744011bc31 100644
--- a/src/devices/video/mb90082.cpp
+++ b/src/devices/video/mb90082.cpp
@@ -29,8 +29,8 @@ void mb90082_device::mb90082_vram(address_map &map)
{
map(0x0000, 0x023f).ram(); // main screen vram
map(0x0400, 0x063f).ram(); // main screen attr
-// AM_RANGE(0x0800, 0x0a3f) AM_RAM // sub screen vram
-// AM_RANGE(0x0c00, 0x0e3f) AM_RAM // sub screen attr
+// map(0x0800, 0x0a3f).ram(); // sub screen vram
+// map(0x0c00, 0x0e3f).ram(); // sub screen attr
}
}
diff --git a/src/devices/video/mc6845.cpp b/src/devices/video/mc6845.cpp
index 1c0862f1564..4ce9ed843a3 100644
--- a/src/devices/video/mc6845.cpp
+++ b/src/devices/video/mc6845.cpp
@@ -45,12 +45,18 @@
#include "screen.h"
-#define LOG_REGS (1 << 0U)
-#define LOG_CONFIG (1 << 1U)
-#define VERBOSE (0)
+#define LOG_SETUP (1 << 1U)
+#define LOG_REGS (1 << 2U)
+#define LOG_CONF (1 << 3U)
+
+//#define VERBOSE (LOG_SETUP|LOG_CONF|LOG_REGS)
+//#define LOG_OUTPUT_STREAM std::cout
#include "logmacro.h"
+#define LOGSETUP(...) LOGMASKED(LOG_SETUP, __VA_ARGS__)
+#define LOGREGS(...) LOGMASKED(LOG_REGS, __VA_ARGS__)
+#define LOGCONF(...) LOGMASKED(LOG_CONF, __VA_ARGS__)
DEFINE_DEVICE_TYPE(MC6845, mc6845_device, "mc6845", "Motorola MC6845 CRTC")
DEFINE_DEVICE_TYPE(MC6845_1, mc6845_1_device, "mc6845_1", "Motorola MC6845-1 CRTC")
@@ -213,7 +219,19 @@ uint8_t mc6845_device::register_r()
void mc6845_device::register_w(uint8_t data)
{
- LOGMASKED(LOG_REGS, "%s:M6845 reg 0x%02x = 0x%02x\n", machine().describe_context(), m_register_address_latch, data);
+ LOGREGS("%s:M6845 reg 0x%02x = 0x%02x\n", machine().describe_context(), m_register_address_latch, data);
+
+ /* Omits LOGSETUP logs of cursor registers as they tend to be spammy */
+ if (m_register_address_latch < 0x0e &&
+ m_register_address_latch != 0x0a &&
+ m_register_address_latch != 0x0b) LOGSETUP(" * %02x <= %3u [%02x] %s\n", m_register_address_latch,
+ data, data, std::array<char const *, 16>
+ {{ "R0 - Horizontal Total", "R1 - Horizontal Displayed", "R2 - Horizontal Sync Position",
+ "R3 - Sync Width", "R4 - Vertical Total", "R5 - Vertical Total Adjust",
+ "R6 - Vertical Displayed", "R7 - Vertical Sync Position", "R8 - Interlace & Skew",
+ "R9 - Maximum Raster Address", "R10 - Cursor Start Address", "R11 - Cursor End Address",
+ "R12 - Start Address (H)", "R13 - Start Address (L)", "R14 - Cursor (H)",
+ "R15 - Cursor (L)" }}[(m_register_address_latch & 0x0f)]);
switch (m_register_address_latch)
{
@@ -342,7 +360,7 @@ uint8_t mos8563_device::register_r()
void mos8563_device::register_w(uint8_t data)
{
- LOGMASKED(LOG_REGS, "%s:MOS8563 reg 0x%02x = 0x%02x\n", machine().describe_context(), m_register_address_latch, data);
+ LOGREGS("%s:MOS8563 reg 0x%02x = 0x%02x\n", machine().describe_context(), m_register_address_latch, data);
switch (m_register_address_latch)
{
@@ -429,7 +447,7 @@ uint8_t hd6345_device::register_r()
void hd6345_device::register_w(uint8_t data)
{
- LOGMASKED(LOG_REGS, "%s:HD6345 reg 0x%02x = 0x%02x\n", machine().describe_context(), m_register_address_latch, data);
+ LOGREGS("%s:HD6345 reg 0x%02x = 0x%02x\n", machine().describe_context(), m_register_address_latch, data);
switch (m_register_address_latch)
{
@@ -571,8 +589,8 @@ void mc6845_device::recompute_parameters(bool postload)
else
visarea.set(0 + m_visarea_adjust_min_x, max_visible_x + m_visarea_adjust_max_x, 0 + m_visarea_adjust_min_y, max_visible_y + m_visarea_adjust_max_y);
- LOGMASKED(LOG_CONFIG, "M6845 config screen: HTOTAL: %d VTOTAL: %d MAX_X: %d MAX_Y: %d HSYNC: %d-%d VSYNC: %d-%d Freq: %ffps\n",
- horiz_pix_total, vert_pix_total, max_visible_x, max_visible_y, hsync_on_pos, hsync_off_pos - 1, vsync_on_pos, vsync_off_pos - 1, refresh.as_hz());
+ LOGCONF("M6845 config screen: HTOTAL: %d VTOTAL: %d MAX_X: %d MAX_Y: %d HSYNC: %d-%d VSYNC: %d-%d Freq: %ffps\n",
+ horiz_pix_total, vert_pix_total, max_visible_x, max_visible_y, hsync_on_pos, hsync_off_pos - 1, vsync_on_pos, vsync_off_pos - 1, refresh.as_hz());
if (has_screen())
screen().configure(horiz_pix_total, vert_pix_total, visarea, refresh.as_attoseconds());
@@ -1073,6 +1091,12 @@ uint32_t mc6845_device::screen_update(screen_device &screen, bitmap_rgb32 &bitma
{
assert(!m_update_row_cb.isnull());
+ if (m_display_disabled_msg_shown == true)
+ {
+ logerror("M6845: Valid screen parameters - display reenabled!!!\n");
+ m_display_disabled_msg_shown = false;
+ }
+
/* call the set up function if any */
if (!m_begin_update_cb.isnull())
m_begin_update_cb(bitmap, cliprect);
@@ -1095,7 +1119,11 @@ uint32_t mc6845_device::screen_update(screen_device &screen, bitmap_rgb32 &bitma
}
else
{
- LOGMASKED(LOG_CONFIG, "M6845: Invalid screen parameters - display disabled!!!\n");
+ if (m_display_disabled_msg_shown == false)
+ {
+ logerror("M6845: Invalid screen parameters - display disabled!!!\n");
+ m_display_disabled_msg_shown = true;
+ }
}
return 0;
@@ -1143,6 +1171,7 @@ void mc6845_device::device_start()
m_supports_status_reg_d7 = false;
m_supports_transparent = false;
m_has_valid_parameters = false;
+ m_display_disabled_msg_shown = false;
m_line_enable_ff = false;
m_vsync_ff = 0;
m_raster_counter = 0;
diff --git a/src/devices/video/mc6845.h b/src/devices/video/mc6845.h
index d124dc6fde6..f20b83e5eff 100644
--- a/src/devices/video/mc6845.h
+++ b/src/devices/video/mc6845.h
@@ -219,6 +219,7 @@ protected:
uint16_t m_vsync_on_pos;
uint16_t m_vsync_off_pos;
bool m_has_valid_parameters;
+ bool m_display_disabled_msg_shown;
uint16_t m_current_disp_addr; /* the display address currently drawn (used only in mc6845_update) */
diff --git a/src/devices/video/ppu2c0x.cpp b/src/devices/video/ppu2c0x.cpp
index c4ac3898b4d..f0b20856c57 100644
--- a/src/devices/video/ppu2c0x.cpp
+++ b/src/devices/video/ppu2c0x.cpp
@@ -93,7 +93,7 @@ void ppu2c0x_device::ppu2c0x(address_map &map)
{
map(0x0000, 0x3eff).ram();
map(0x3f00, 0x3fff).rw(FUNC(ppu2c0x_device::palette_read), FUNC(ppu2c0x_device::palette_write));
-// AM_RANGE(0x0000, 0x3fff) AM_RAM
+// map(0x0000, 0x3fff).ram();
}
}
diff --git a/src/devices/video/sed1330.cpp b/src/devices/video/sed1330.cpp
index 862c0ba675b..40027444684 100644
--- a/src/devices/video/sed1330.cpp
+++ b/src/devices/video/sed1330.cpp
@@ -8,6 +8,7 @@
#include "emu.h"
#include "sed1330.h"
+#include "screen.h"
//#define VERBOSE 1
#include "logmacro.h"
@@ -383,6 +384,12 @@ WRITE8_MEMBER( sed1330_device::data_w )
case 5:
m_lf = data + 1;
LOG("SED1330 Frame Height: %u\n", m_lf);
+ if (clock() != 0)
+ {
+ attotime fr = clocks_to_attotime(m_tcr * m_lf * 9);
+ screen().configure(m_tcr * m_fx, m_lf, screen().visible_area(), fr.as_attoseconds());
+ LOG("SED1330 Frame Rate: %.1f Hz\n", fr.as_hz());
+ }
break;
case 6:
diff --git a/src/devices/video/snes_ppu.cpp b/src/devices/video/snes_ppu.cpp
index 4549c8292be..0890a3d3df2 100644
--- a/src/devices/video/snes_ppu.cpp
+++ b/src/devices/video/snes_ppu.cpp
@@ -75,6 +75,12 @@
#include "emu.h"
#include "video/snes_ppu.h"
+#define KEYPRESS_DEBUG_PRINTS (1)
+
+#if KEYPRESS_DEBUG_PRINTS
+static bool s_debug_prints = false;
+#endif
+
#define SNES_MAINSCREEN 0
#define SNES_SUBSCREEN 1
#define SNES_CLIP_NEVER 0
@@ -82,7 +88,7 @@
#define SNES_CLIP_OUT 2
#define SNES_CLIP_ALWAYS 3
-#define SNES_VRAM_SIZE 0x20000 /* 128kb of video ram */
+#define SNES_VRAM_SIZE 0x10000 /* 128kb of video ram */
#define SNES_CGRAM_SIZE 0x202 /* 256 16-bit colours + 1 tacked on 16-bit colour for fixed colour */
#define SNES_OAM_SIZE 0x440 /* 1088 bytes of Object Attribute Memory */
#define FIXED_COLOUR 256 /* Position in cgram for fixed colour */
@@ -177,7 +183,9 @@ enum
{
SNES_COLOR_DEPTH_2BPP = 0,
SNES_COLOR_DEPTH_4BPP,
- SNES_COLOR_DEPTH_8BPP
+ SNES_COLOR_DEPTH_8BPP,
+ SNES_COLOR_DEPTH_NONE,
+ SNES_COLOR_DEPTH_MODE7
};
@@ -247,6 +255,7 @@ void snes_ppu_device::device_start()
save_item(NAME(m_layer[i].tilemap), i);
save_item(NAME(m_layer[i].tilemap_size), i);
save_item(NAME(m_layer[i].tile_size), i);
+ save_item(NAME(m_layer[i].tile_mode), i);
save_item(NAME(m_layer[i].mosaic_enabled), i);
save_item(NAME(m_layer[i].main_window_enabled), i);
save_item(NAME(m_layer[i].sub_window_enabled), i);
@@ -254,6 +263,10 @@ void snes_ppu_device::device_start()
save_item(NAME(m_layer[i].sub_bg_enabled), i);
save_item(NAME(m_layer[i].hoffs), i);
save_item(NAME(m_layer[i].voffs), i);
+ save_item(NAME(m_layer[i].priority[0]), i);
+ save_item(NAME(m_layer[i].priority[1]), i);
+ save_item(NAME(m_layer[i].mosaic_counter), i);
+ save_item(NAME(m_layer[i].mosaic_offset), i);
save_item(NAME(m_clipmasks[i]), i);
}
@@ -319,7 +332,7 @@ void snes_ppu_device::device_start()
save_item(NAME(m_clip_to_black));
save_item(NAME(m_prevent_color_math));
save_item(NAME(m_sub_add_mode));
- save_item(NAME(m_bg3_priority_bit));
+ save_item(NAME(m_bg_priority));
save_item(NAME(m_direct_color));
save_item(NAME(m_ppu_last_scroll));
save_item(NAME(m_mode7_last_scroll));
@@ -535,10 +548,7 @@ inline void snes_ppu_device::set_scanline_pixel( int screen, int16_t x, uint16_t
inline void snes_ppu_device::draw_bgtile_lores( uint8_t layer, int16_t ii, uint8_t colour, uint16_t pal, uint8_t direct_colors, uint8_t priority )
{
- int screen;
- uint16_t c;
-
- for (screen = SNES_MAINSCREEN; screen <= SNES_SUBSCREEN; screen++)
+ for (int screen = SNES_MAINSCREEN; screen <= SNES_SUBSCREEN; screen++)
{
if (ii >= 0 && ii < SNES_SCR_WIDTH && m_scanlines[screen].enable)
{
@@ -559,7 +569,7 @@ inline void snes_ppu_device::draw_bgtile_lores( uint8_t layer, int16_t ii, uint8
/* Only draw if we have a colour (0 == transparent) */
if (clr)
{
- c = get_bgcolor(direct_colors, pal, clr);
+ uint16_t c = get_bgcolor(direct_colors, pal, clr);
set_scanline_pixel(screen, ii, c, priority, layer, 0);
}
}
@@ -569,10 +579,7 @@ inline void snes_ppu_device::draw_bgtile_lores( uint8_t layer, int16_t ii, uint8
inline void snes_ppu_device::draw_bgtile_hires( uint8_t layer, int16_t ii, uint8_t colour, uint16_t pal, uint8_t direct_colors, uint8_t priority )
{
- int screen;
- uint16_t c;
-
- for (screen = SNES_MAINSCREEN; screen <= SNES_SUBSCREEN; screen++)
+ for (int screen = SNES_MAINSCREEN; screen <= SNES_SUBSCREEN; screen++)
{
// odd pixels to main screen, even pixels to sub screen
if (ii >= 0 && ii < (SNES_SCR_WIDTH << 1) && ((ii & 1) ^ screen) && m_scanlines[screen].enable)
@@ -594,7 +601,7 @@ inline void snes_ppu_device::draw_bgtile_hires( uint8_t layer, int16_t ii, uint8
/* Only draw if we have a colour (0 == transparent) */
if (clr)
{
- c = get_bgcolor(direct_colors, pal, clr);
+ uint16_t c = get_bgcolor(direct_colors, pal, clr);
set_scanline_pixel(screen, ii >> 1, c, priority, layer, 0);
}
}
@@ -604,12 +611,9 @@ inline void snes_ppu_device::draw_bgtile_hires( uint8_t layer, int16_t ii, uint8
inline void snes_ppu_device::draw_oamtile( int16_t ii, uint8_t colour, uint16_t pal, uint8_t priority )
{
- int screen;
- int blend;
- uint16_t c;
int16_t pos = ii & 0x1ff;
- for (screen = SNES_MAINSCREEN; screen <= SNES_SUBSCREEN; screen++)
+ for (int screen = SNES_MAINSCREEN; screen <= SNES_SUBSCREEN; screen++)
{
if (pos >= 0 && pos < SNES_SCR_WIDTH && m_scanlines[screen].enable)
{
@@ -628,8 +632,8 @@ inline void snes_ppu_device::draw_oamtile( int16_t ii, uint8_t colour, uint16_t
/* Only draw if we have a colour (0 == transparent) */
if (clr)
{
- c = m_cgram[(pal + clr) % FIXED_COLOUR];
- blend = (pal + clr < 192) ? 1 : 0;
+ uint16_t c = m_cgram[(pal + clr) % FIXED_COLOUR];
+ int blend = (pal + clr < 192) ? 1 : 0;
set_scanline_pixel(screen, pos, c, priority, SNES_OAM, blend);
}
}
@@ -722,13 +726,30 @@ inline void snes_ppu_device::draw_tile( uint8_t planes, uint8_t layer, uint32_t
* but in general it works as described.
*************************************************************************************************/
+inline uint32_t snes_ppu_device::get_tile( uint8_t layer_idx, uint32_t hoffset, uint32_t voffset )
+{
+ layer_t &self = m_layer[layer_idx];
+ bool hires = m_mode == 5 || m_mode == 6;
+ uint32_t tile_height = 3 + self.tile_size;
+ uint32_t tile_width = !hires ? tile_height : 4;
+ uint32_t screenx = self.tilemap_size & 1 ? 32 << 5 : 0;
+ uint32_t screeny = self.tilemap_size & 2 ? 32 << (5 + (self.tilemap_size & 1)) : 0;
+ uint32_t tilex = hoffset >> tile_width;
+ uint32_t tiley = voffset >> tile_height;
+ uint32_t offset = (tiley & 0x1f) << 5 | (tilex & 0x1f);
+ if (tilex & 0x20) offset += screenx;
+ if (tiley & 0x20) offset += screeny;
+ uint32_t addr = ((self.tilemap + offset) & 0x7fff) << 1;
+ return m_vram[addr] | (m_vram[addr + 1] << 8);
+}
+
/*********************************************
* get_tmap_addr()
*
* Find the address in VRAM of the tile (x,y)
*********************************************/
-inline uint32_t snes_ppu_device::get_tmap_addr( uint8_t layer, uint8_t tile_size, uint32_t base, uint32_t x, uint32_t y )
+inline uint32_t snes_ppu_device::get_tmap_addr( uint8_t layer, uint8_t hires, uint8_t tile_size, uint32_t base, uint32_t x, uint32_t y )
{
uint32_t res = base;
x >>= (3 + tile_size);
@@ -751,177 +772,199 @@ inline uint32_t snes_ppu_device::get_tmap_addr( uint8_t layer, uint8_t tile_size
* Update an entire line of tiles.
*********************************************/
-inline void snes_ppu_device::update_line( uint16_t curline, uint8_t layer, uint8_t priority_b, uint8_t priority_a, uint8_t color_depth, uint8_t hires, uint8_t offset_per_tile, uint8_t direct_colors )
+inline void snes_ppu_device::update_line( uint16_t curline, uint8_t layer_idx, uint8_t direct_colors )
{
- uint32_t tmap, tile, xoff, yoff, charaddr, addr;
- uint16_t ii = 0, vflip, hflip, pal, pal_direct, tilemap;
- uint8_t xscroll, priority;
- int8_t yscroll;
- int tile_incr = 0;
- uint16_t opt_bit = (layer == SNES_BG1) ? 13 : (layer == SNES_BG2) ? 14 : 0;
- uint8_t tile_size;
- /* variables depending on color_depth */
- uint8_t color_planes = 2 << color_depth;
- /* below we cheat to simplify the code: 8BPP should have 0 pal offset, not 0x100 (but we take care of this by later using pal % FIXED_COLOUR) */
- uint8_t color_shift = 2 << color_depth;
+ layer_t &layer = m_layer[layer_idx];
-#if SNES_LAYER_DEBUG
- if (m_debug_options.bg_disabled[layer])
- return;
-#endif /* SNES_LAYER_DEBUG */
-
- m_scanlines[SNES_MAINSCREEN].enable = m_layer[layer].main_bg_enabled;
- m_scanlines[SNES_SUBSCREEN].enable = m_layer[layer].sub_bg_enabled;
- m_scanlines[SNES_MAINSCREEN].clip = m_layer[layer].main_window_enabled;
- m_scanlines[SNES_SUBSCREEN].clip = m_layer[layer].sub_window_enabled;
+ m_scanlines[SNES_MAINSCREEN].enable = layer.main_bg_enabled;
+ m_scanlines[SNES_SUBSCREEN].enable = layer.sub_bg_enabled;
+ m_scanlines[SNES_MAINSCREEN].clip = layer.main_window_enabled;
+ m_scanlines[SNES_SUBSCREEN].clip = layer.sub_window_enabled;
if (!m_scanlines[SNES_MAINSCREEN].enable && !m_scanlines[SNES_SUBSCREEN].enable)
+ {
+#if KEYPRESS_DEBUG_PRINTS
+ if (s_debug_prints) printf("DA\n");
+#endif
return;
+ }
- /* Handle Mosaic effects */
- if (m_layer[layer].mosaic_enabled)
- curline -= (curline % (m_mosaic_size + 1));
-
- if ((m_interlace == 2) && !hires && !m_pseudo_hires)
- curline /= 2;
+ bool hires = m_mode == 5 || m_mode == 6;
+ bool opt_mode = m_mode == 2 || m_mode == 4 || m_mode == 6;
+ bool direct_color_mode = direct_colors && layer_idx == SNES_BG1 && (m_mode == 3 || m_mode == 4);
+ uint32_t color_shift = 3 + layer.tile_mode;
+ int width = 256 << hires;
- /* Find the size of the tiles (8x8 or 16x16) */
- tile_size = m_layer[layer].tile_size;
+ uint32_t tile_height = 3 + layer.tile_size;
+ uint32_t tile_width = !hires ? tile_height : 4;
+ uint32_t tile_mask = 0x0fff >> layer.tile_mode;
+ uint32_t tiledata_index = layer.charmap >> (3 + layer.tile_mode);
- /* Find scroll info */
- xoff = m_layer[layer].hoffs;
- yoff = m_layer[layer].voffs;
+ uint32_t palette_base = m_mode == 0 ? layer_idx << 5 : 0;
+ uint32_t palette_shift = 2 << layer.tile_mode;
- xscroll = xoff & ((1 << (3 + tile_size)) - 1);
+ uint32_t hscroll = layer.hoffs;
+ uint32_t vscroll = layer.voffs;
+ uint32_t hmask = (width << layer.tile_size << !!(layer.tilemap_size & 1)) - 1;
+ uint32_t vmask = (width << layer.tile_size << !!(layer.tilemap_size & 2)) - 1;
- /* Jump to base map address */
- tmap = m_layer[layer].tilemap << 9;
- charaddr = m_layer[layer].charmap << 13;
+ uint32_t y = layer.mosaic_enabled ? layer.mosaic_offset : curline;
- while (ii < 256 + (8 << tile_size))
+ if (hires)
{
- // determine the horizontal position (Bishojo Janshi Suchi Pai & Desert Figther have tile_size & hires == 1)
- uint32_t xpos = xoff + (ii << (tile_size * hires));
- uint32_t ypos = yoff + curline;
+ hscroll <<= 1;
+ if (m_interlace) y = y << 1 | (m_stat78 >> 7);
+ }
- if (offset_per_tile != SNES_OPT_NONE)
- {
- int opt_x = ii + (xoff & 7);
- uint32_t haddr, vaddr;
- uint16_t hval, vval;
+ uint32_t mosaic_counter = 1;
+ uint32_t mosaic_palette = 0;
+ uint32_t mosaic_priority = 0;
+ uint32_t mosaic_color = 0;
- if (opt_x >= 8)
+ int x = 0 - (hscroll & 7);
+ while (x < width)
+ {
+ uint32_t hoffset = x + hscroll;
+ uint32_t voffset = y + vscroll;
+ if (opt_mode)
+ {
+ uint32_t valid_bit = 0x2000 << layer_idx;
+ uint32_t offset_x = x + (hscroll & 7);
+ if (offset_x >= 8) // first column is exempt
{
- switch (offset_per_tile)
+ uint32_t hlookup = get_tile(SNES_BG3, (offset_x - 8) + (m_layer[SNES_BG3].hoffs & ~7), m_layer[SNES_BG3].voffs);
+ if (m_mode == 4)
{
- case SNES_OPT_MODE2:
- case SNES_OPT_MODE6:
- haddr = get_tmap_addr(SNES_BG3, m_layer[SNES_BG3].tile_size, m_layer[SNES_BG3].tilemap << 9, (opt_x - 8) + ((m_layer[SNES_BG3].hoffs & 0x3ff) & ~7), (m_layer[SNES_BG3].voffs & 0x3ff));
- vaddr = get_tmap_addr(SNES_BG3, m_layer[SNES_BG3].tile_size, m_layer[SNES_BG3].tilemap << 9, (opt_x - 8) + ((m_layer[SNES_BG3].hoffs & 0x3ff) & ~7), (m_layer[SNES_BG3].voffs & 0x3ff) + 8);
- hval = m_vram[haddr % SNES_VRAM_SIZE] | (m_vram[(haddr + 1) % SNES_VRAM_SIZE] << 8);
- vval = m_vram[vaddr % SNES_VRAM_SIZE] | (m_vram[(vaddr + 1) % SNES_VRAM_SIZE] << 8);
- if (BIT(hval, opt_bit))
- xpos = opt_x + (hval & ~7);
- if (BIT(vval, opt_bit))
- ypos = curline + vval;
- break;
- case SNES_OPT_MODE4:
- haddr = get_tmap_addr(SNES_BG3, m_layer[SNES_BG3].tile_size, m_layer[SNES_BG3].tilemap << 9, (opt_x - 8) + ((m_layer[SNES_BG3].hoffs & 0x3ff) & ~7), (m_layer[SNES_BG3].voffs & 0x3ff));
- hval = m_vram[haddr % SNES_VRAM_SIZE] | (m_vram[(haddr + 1) % SNES_VRAM_SIZE] << 8);
- if (BIT(hval, opt_bit))
+ if (hlookup & valid_bit)
{
- if (!BIT(hval, 15))
- xpos = opt_x + (hval & ~7);
+ if (!(hlookup & 0x8000))
+ {
+ hoffset = offset_x + (hlookup & ~7);
+ }
else
- ypos = curline + hval;
+ {
+ voffset = y + hlookup;
+ }
+ }
+ }
+ else
+ {
+ uint32_t vlookup = get_tile(SNES_BG3, (offset_x - 8) + (m_layer[SNES_BG3].hoffs & ~7), m_layer[SNES_BG3].voffs + 8);
+ if (hlookup & valid_bit)
+ {
+ hoffset = offset_x + (hlookup & ~7);
+ }
+ if (vlookup & valid_bit)
+ {
+ voffset = y + vlookup;
}
- break;
}
}
}
- addr = get_tmap_addr(layer, tile_size, tmap, xpos, ypos);
-
- /*
- Tilemap format
- vhopppcc cccccccc
-
- v/h = Vertical/Horizontal flip this tile.
- o = Tile priority.
- ppp = Tile palette. The number of entries in the palette depends on the Mode and the BG.
- cccccccccc = Tile number.
- */
- tilemap = m_vram[addr % SNES_VRAM_SIZE] | (m_vram[(addr + 1) % SNES_VRAM_SIZE] << 8);
- vflip = BIT(tilemap, 15);
- hflip = BIT(tilemap, 14);
- priority = BIT(tilemap, 13) ? priority_a : priority_b;
- pal_direct = ((tilemap & 0x1c00) >> 8);
- tile = tilemap & 0x03ff;
-
- pal = ((pal_direct >> 2) << color_shift);
-
- /* Mode 0 palettes are layer specific */
- if (m_mode == 0)
- {
- pal += (layer << 5);
- }
-
-#if SNES_LAYER_DEBUG
- /* if we want to draw only one of the priorities of this layer */
- if (((m_debug_options.select_pri[layer] & 0x01) && (priority == priority_a)) ||
- ((m_debug_options.select_pri[layer] & 0x02) && (priority == priority_b)))
+ hoffset &= hmask;
+ voffset &= vmask;
+
+ uint32_t tile_number = get_tile(layer_idx, hoffset, voffset);
+ uint32_t mirrory = tile_number & 0x8000 ? 7 : 0;
+ uint32_t mirrorx = tile_number & 0x4000 ? 7 : 0;
+ uint8_t tile_priority = layer.priority[BIT(tile_number, 13)];
+ uint32_t palette_number = tile_number >> 10 & 7;
+ uint32_t palette_index = (palette_base + (palette_number << palette_shift)) & 0xff;
+
+ if (tile_width == 4 && (bool(hoffset & 8) ^ bool(mirrorx))) tile_number += 1;
+ if (tile_height == 4 && (bool(voffset & 8) ^ bool(mirrory))) tile_number += 16;
+ tile_number = ((tile_number & 0x03ff) + tiledata_index) & tile_mask;
+
+ uint16_t address = (((tile_number << color_shift) + ((voffset & 7) ^ mirrory)) & 0x7fff) << 1;
+
+ uint64_t data;
+ data = (uint64_t)m_vram[address + 0] << 0;
+ data |= (uint64_t)m_vram[address + 1] << 8;
+ data |= (uint64_t)m_vram[address + 16] << 16;
+ data |= (uint64_t)m_vram[address + 17] << 24;
+ data |= (uint64_t)m_vram[address + 32] << 32;
+ data |= (uint64_t)m_vram[address + 33] << 40;
+ data |= (uint64_t)m_vram[address + 48] << 48;
+ data |= (uint64_t)m_vram[address + 49] << 56;
+
+ for (uint32_t tilex = 0; tilex < 8; tilex++, x++)
{
- if (!hires && tile_size)
- ii += 16;
- else
- ii += 8;
- continue;
- }
-#endif /* SNES_LAYER_DEBUG */
-
- /* figure out which line to draw */
- yscroll = ypos & ((8 << tile_size) - 1);
-
- if (tile_size)
- if (BIT(yscroll, 3) != vflip)
- tile += 16;
-
- if (yscroll > 7)
- yscroll &= 7;
-
- if (vflip)
- yscroll = 7 - yscroll;
+ if (x & width) continue;
+ if (!layer.mosaic_enabled || --mosaic_counter == 0)
+ {
+ uint32_t color, shift = mirrorx ? tilex : 7 - tilex;
+ {
+ color = data >> (shift + 0) & 0x01;
+ color |= data >> (shift + 7) & 0x02;
+ }
+ if (layer.tile_mode >= SNES_COLOR_DEPTH_4BPP)
+ {
+ color |= data >> (shift + 14) & 0x04;
+ color |= data >> (shift + 21) & 0x08;
+ }
+ if (layer.tile_mode >= SNES_COLOR_DEPTH_8BPP)
+ {
+ color |= data >> (shift + 28) & 0x10;
+ color |= data >> (shift + 35) & 0x20;
+ color |= data >> (shift + 42) & 0x40;
+ color |= data >> (shift + 49) & 0x80;
+ }
- yscroll <<= 1;
+ mosaic_counter = 1 + m_mosaic_size;
+ mosaic_palette = color;
+ mosaic_priority = tile_priority;
+ if (direct_color_mode)
+ {
+ mosaic_color = direct_color(palette_number, mosaic_palette);
+ }
+ else
+ {
+ mosaic_color = m_cgram[palette_index + mosaic_palette];
+ }
+ }
+ if (!mosaic_palette) continue;
- /* if we have to draw 16 pixels, set tile_incr and adjust tile for horizontal flip */
- if (tile_size || hires)
- {
- if (hflip)
+ if (!hires)
{
- tile += 1;
- tile_incr = -1; // next 8 pixels from previous tile (because of hflip)
+ if (layer.main_bg_enabled && mosaic_priority > m_scanlines[SNES_MAINSCREEN].priority[x])
+ {
+ if (!m_scanlines[SNES_MAINSCREEN].clip || m_clipmasks[layer_idx][x])
+ {
+ set_scanline_pixel(SNES_MAINSCREEN, x, mosaic_color, mosaic_priority, layer_idx, 0);
+ }
+ }
+ if (layer.sub_bg_enabled && mosaic_priority > m_scanlines[SNES_SUBSCREEN].priority[x])
+ {
+ if (!m_scanlines[SNES_SUBSCREEN].clip || m_clipmasks[layer_idx][x])
+ {
+ set_scanline_pixel(SNES_SUBSCREEN, x, mosaic_color, mosaic_priority, layer_idx, 0);
+ }
+ }
}
else
- tile_incr = 1; // next 8 pixels from next tile
- }
-
- if (hires)
- {
- /* draw 16 pixels (the routine will automatically send half of them to the mainscreen scanline and half to the subscreen one) */
- draw_tile(color_planes, layer, charaddr + (((tile + 0) & 0x3ff) * 8 * color_planes) + yscroll, (ii - xscroll) * 2, priority, hflip, direct_colors, direct_colors ? pal_direct : pal, hires);
- draw_tile(color_planes, layer, charaddr + (((tile + tile_incr) & 0x3ff) * 8 * color_planes) + yscroll, (ii - xscroll) * 2 + 8, priority, hflip, direct_colors, direct_colors ? pal_direct : pal, hires);
- ii += 8;
- }
- else
- {
- draw_tile(color_planes, layer, charaddr + ((tile & 0x3ff) * 8 * color_planes) + yscroll, ii - xscroll, priority, hflip, direct_colors, direct_colors ? pal_direct : pal, hires);
- ii += 8;
-
- if (tile_size)
{
- draw_tile(color_planes, layer, charaddr + (((tile + tile_incr) & 0x3ff) * 8 * color_planes) + yscroll, ii - xscroll, priority, hflip, direct_colors, direct_colors ? pal_direct : pal, hires);
- ii += 8;
+ uint32_t _x = x >> 1;
+ if (x & 1)
+ {
+ if (layer.main_bg_enabled && mosaic_priority > m_scanlines[SNES_MAINSCREEN].priority[_x])
+ {
+ if (!m_scanlines[SNES_MAINSCREEN].clip || m_clipmasks[layer_idx][_x])
+ {
+ set_scanline_pixel(SNES_MAINSCREEN, _x, mosaic_color, mosaic_priority, layer_idx, 0);
+ }
+ }
+ }
+ else
+ {
+ if (layer.sub_bg_enabled && mosaic_priority > m_scanlines[SNES_SUBSCREEN].priority[_x])
+ {
+ if (!m_scanlines[SNES_SUBSCREEN].clip || m_clipmasks[layer_idx][_x])
+ {
+ set_scanline_pixel(SNES_SUBSCREEN, _x, mosaic_color, mosaic_priority, layer_idx, 0);
+ }
+ }
+ }
}
}
}
@@ -936,8 +979,10 @@ inline void snes_ppu_device::update_line( uint16_t curline, uint8_t layer, uint8
#define MODE7_CLIP(x) (((x) & 0x2000) ? ((x) | ~0x03ff) : ((x) & 0x03ff))
-void snes_ppu_device::update_line_mode7( uint16_t curline, uint8_t layer, uint8_t priority_b, uint8_t priority_a )
+void snes_ppu_device::update_line_mode7( uint16_t curline, uint8_t layer )
{
+ uint8_t priority_a = m_layer[layer].priority[0];
+ uint8_t priority_b = m_layer[layer].priority[1];
uint32_t tiled;
int16_t ma, mb, mc, md;
int32_t xc, yc, tx, ty, sx, sy, hs, vs, xpos, xdir, x0, y0;
@@ -1455,10 +1500,10 @@ void snes_ppu_device::update_mode_0( uint16_t curline )
#endif /* SNES_LAYER_DEBUG */
update_objects(3, 6, 9, 12);
- update_line(curline, SNES_BG1, 8, 11, SNES_COLOR_DEPTH_2BPP, 0, SNES_OPT_NONE, 0);
- update_line(curline, SNES_BG2, 7, 10, SNES_COLOR_DEPTH_2BPP, 0, SNES_OPT_NONE, 0);
- update_line(curline, SNES_BG3, 2, 5, SNES_COLOR_DEPTH_2BPP, 0, SNES_OPT_NONE, 0);
- update_line(curline, SNES_BG4, 1, 4, SNES_COLOR_DEPTH_2BPP, 0, SNES_OPT_NONE, 0);
+ update_line(curline, SNES_BG1, 0);
+ update_line(curline, SNES_BG2, 0);
+ update_line(curline, SNES_BG3, 0);
+ update_line(curline, SNES_BG4, 0);
}
void snes_ppu_device::update_mode_1( uint16_t curline )
@@ -1468,19 +1513,19 @@ void snes_ppu_device::update_mode_1( uint16_t curline )
return;
#endif /* SNES_LAYER_DEBUG */
- if (!m_bg3_priority_bit)
+ if (!m_bg_priority)
{
update_objects(2, 4, 7, 10);
- update_line(curline, SNES_BG1, 6, 9, SNES_COLOR_DEPTH_4BPP, 0, SNES_OPT_NONE, 0);
- update_line(curline, SNES_BG2, 5, 8, SNES_COLOR_DEPTH_4BPP, 0, SNES_OPT_NONE, 0);
- update_line(curline, SNES_BG3, 1, 3, SNES_COLOR_DEPTH_2BPP, 0, SNES_OPT_NONE, 0);
+ update_line(curline, SNES_BG1, 0);
+ update_line(curline, SNES_BG2, 0);
+ update_line(curline, SNES_BG3, 0);
}
else
{
update_objects(2, 3, 6, 9);
- update_line(curline, SNES_BG1, 5, 8, SNES_COLOR_DEPTH_4BPP, 0, SNES_OPT_NONE, 0);
- update_line(curline, SNES_BG2, 4, 7, SNES_COLOR_DEPTH_4BPP, 0, SNES_OPT_NONE, 0);
- update_line(curline, SNES_BG3, 1, 10, SNES_COLOR_DEPTH_2BPP, 0, SNES_OPT_NONE, 0);
+ update_line(curline, SNES_BG1, 0);
+ update_line(curline, SNES_BG2, 0);
+ update_line(curline, SNES_BG3, 0);
}
}
@@ -1492,8 +1537,8 @@ void snes_ppu_device::update_mode_2( uint16_t curline )
#endif /* SNES_LAYER_DEBUG */
update_objects(2, 4, 6, 8);
- update_line(curline, SNES_BG1, 3, 7, SNES_COLOR_DEPTH_4BPP, 0, SNES_OPT_MODE2, 0);
- update_line(curline, SNES_BG2, 1, 5, SNES_COLOR_DEPTH_4BPP, 0, SNES_OPT_MODE2, 0);
+ update_line(curline, SNES_BG1, 0);
+ update_line(curline, SNES_BG2, 0);
}
void snes_ppu_device::update_mode_3( uint16_t curline )
@@ -1504,8 +1549,8 @@ void snes_ppu_device::update_mode_3( uint16_t curline )
#endif /* SNES_LAYER_DEBUG */
update_objects(2, 4, 6, 8);
- update_line(curline, SNES_BG1, 3, 7, SNES_COLOR_DEPTH_8BPP, 0, SNES_OPT_NONE, m_direct_color);
- update_line(curline, SNES_BG2, 1, 5, SNES_COLOR_DEPTH_4BPP, 0, SNES_OPT_NONE, 0);
+ update_line(curline, SNES_BG1, m_direct_color);
+ update_line(curline, SNES_BG2, 0);
}
void snes_ppu_device::update_mode_4( uint16_t curline )
@@ -1516,8 +1561,8 @@ void snes_ppu_device::update_mode_4( uint16_t curline )
#endif /* SNES_LAYER_DEBUG */
update_objects(2, 4, 6, 8);
- update_line(curline, SNES_BG1, 3, 7, SNES_COLOR_DEPTH_8BPP, 0, SNES_OPT_MODE4, m_direct_color);
- update_line(curline, SNES_BG2, 1, 5, SNES_COLOR_DEPTH_2BPP, 0, SNES_OPT_MODE4, 0);
+ update_line(curline, SNES_BG1, m_direct_color);
+ update_line(curline, SNES_BG2, 0);
}
void snes_ppu_device::update_mode_5( uint16_t curline )
@@ -1528,8 +1573,8 @@ void snes_ppu_device::update_mode_5( uint16_t curline )
#endif /* SNES_LAYER_DEBUG */
update_objects(2, 4, 6, 8);
- update_line(curline, SNES_BG1, 3, 7, SNES_COLOR_DEPTH_4BPP, 1, SNES_OPT_NONE, 0);
- update_line(curline, SNES_BG2, 1, 5, SNES_COLOR_DEPTH_2BPP, 1, SNES_OPT_NONE, 0);
+ update_line(curline, SNES_BG1, 0);
+ update_line(curline, SNES_BG2, 0);
}
void snes_ppu_device::update_mode_6( uint16_t curline )
@@ -1540,7 +1585,7 @@ void snes_ppu_device::update_mode_6( uint16_t curline )
#endif /* SNES_LAYER_DEBUG */
update_objects(1, 3, 4, 6);
- update_line(curline, SNES_BG1, 2, 5, SNES_COLOR_DEPTH_4BPP, 1, SNES_OPT_MODE6, 0);
+ update_line(curline, SNES_BG1, 0);
}
void snes_ppu_device::update_mode_7( uint16_t curline )
@@ -1553,13 +1598,13 @@ void snes_ppu_device::update_mode_7( uint16_t curline )
if (!m_mode7.extbg)
{
update_objects(1, 3, 4, 5);
- update_line_mode7(curline, SNES_BG1, 2, 2);
+ update_line_mode7(curline, SNES_BG1);
}
else
{
update_objects(2, 4, 6, 7);
- update_line_mode7(curline, SNES_BG1, 3, 3);
- update_line_mode7(curline, SNES_BG2, 1, 5);
+ update_line_mode7(curline, SNES_BG1);
+ update_line_mode7(curline, SNES_BG2);
}
}
@@ -1571,6 +1616,8 @@ void snes_ppu_device::update_mode_7( uint16_t curline )
void snes_ppu_device::draw_screens( uint16_t curline )
{
+ if (s_debug_prints) printf("M:%d ", m_mode);
+
switch (m_mode)
{
case 0: update_mode_0(curline); break; /* Mode 0 */
@@ -1599,19 +1646,17 @@ void snes_ppu_device::draw_screens( uint16_t curline )
void snes_ppu_device::update_windowmasks( void )
{
- uint16_t ii, jj;
- int8_t w1, w2;
-
m_update_windows = 0; /* reset the flag */
- for (ii = 0; ii < SNES_SCR_WIDTH; ii++)
+ for (uint16_t ii = 0; ii < SNES_SCR_WIDTH; ii++)
{
- /* update bg 1, 2, 3, 4, obj & color windows */
+ /* update obj & color windows */
/* jj = layer */
- for (jj = 0; jj < 6; jj++)
+ for (uint16_t jj = 0; jj < 6; jj++)
{
m_clipmasks[jj][ii] = 0xff; /* let's start from un-masked */
- w1 = w2 = -1;
+ int8_t w1 = -1;
+ int8_t w2 = -1;
if (m_layer[jj].window1_enabled)
{
@@ -1818,18 +1863,16 @@ inline void snes_ppu_device::draw_blend( uint16_t offset, uint16_t *colour, uint
void snes_ppu_device::refresh_scanline( bitmap_rgb32 &bitmap, uint16_t curline )
{
- uint16_t ii;
- int x;
- int fade;
- struct SNES_SCANLINE *scanline1, *scanline2;
- uint16_t c;
- uint16_t prev_colour = 0;
- int blurring = m_options.read_safe(0) & 0x01;
+#if KEYPRESS_DEBUG_PRINTS
+ s_debug_prints = machine().input().code_pressed(KEYCODE_Q);
+#endif
+
+ bool blurring = m_options.read_safe(0) & 0x01;
g_profiler.start(PROFILER_VIDEO);
if (m_screen_disabled) /* screen is forced blank */
- for (x = 0; x < SNES_SCR_WIDTH * 2; x++)
+ for (int x = 0; x < SNES_SCR_WIDTH * 2; x++)
bitmap.pix32(curline, x) = rgb_t::black();
else
{
@@ -1853,7 +1896,7 @@ void snes_ppu_device::refresh_scanline( bitmap_rgb32 &bitmap, uint16_t curline )
memset(m_scanlines[SNES_SUBSCREEN].blend_exception, 0, SNES_SCR_WIDTH);
/* Draw back colour */
- for (ii = 0; ii < SNES_SCR_WIDTH; ii++)
+ for (uint16_t ii = 0; ii < SNES_SCR_WIDTH; ii++)
{
if (m_mode == 5 || m_mode == 6 || m_pseudo_hires)
m_scanlines[SNES_SUBSCREEN].buffer[ii] = m_cgram[0];
@@ -1866,11 +1909,15 @@ void snes_ppu_device::refresh_scanline( bitmap_rgb32 &bitmap, uint16_t curline )
/* Prepare OAM for this scanline */
update_objects_rto(curline);
+ cache_background();
+
/* Draw scanline */
draw_screens(curline);
update_obsel();
+ struct SNES_SCANLINE *scanline1 = &m_scanlines[SNES_MAINSCREEN];
+ struct SNES_SCANLINE *scanline2 = &m_scanlines[SNES_SUBSCREEN];
#if SNES_LAYER_DEBUG
if (dbg_video(curline))
{
@@ -1884,35 +1931,29 @@ void snes_ppu_device::refresh_scanline( bitmap_rgb32 &bitmap, uint16_t curline )
scanline1 = &m_scanlines[SNES_SUBSCREEN];
scanline2 = &m_scanlines[SNES_MAINSCREEN];
}
- else
-#endif /* SNES_LAYER_DEBUG */
- {
- scanline1 = &m_scanlines[SNES_MAINSCREEN];
- scanline2 = &m_scanlines[SNES_SUBSCREEN];
- }
+#endif
/* Draw the scanline to screen */
- fade = m_screen_brightness;
+ int fade = m_screen_brightness;
+ uint16_t prev_colour = 0;
- for (x = 0; x < SNES_SCR_WIDTH; x++)
+ for (int x = 0; x < SNES_SCR_WIDTH; x++)
{
- int r, g, b, hires;
- uint16_t tmp_col[2];
- hires = (m_mode != 5 && m_mode != 6 && !m_pseudo_hires) ? 0 : 1;
+ const bool hires = (m_mode != 5 && m_mode != 6 && !m_pseudo_hires) ? false : true;
/* in hires, the first pixel (of 512) is subscreen pixel, then the first mainscreen pixel follows, and so on... */
if (!hires)
{
- c = scanline1->buffer[x];
+ uint16_t c = scanline1->buffer[x];
/* perform color math if the layer wants it (except if it's an object > 192) */
if (!scanline1->blend_exception[x] && m_layer[scanline1->layer[x]].color_math)
draw_blend(x, &c, m_prevent_color_math, m_clip_to_black, 0);
- r = ((c & 0x1f) * fade) >> 4;
- g = (((c & 0x3e0) >> 5) * fade) >> 4;
- b = (((c & 0x7c00) >> 10) * fade) >> 4;
+ int r = ((c & 0x1f) * fade) >> 4;
+ int g = (((c & 0x3e0) >> 5) * fade) >> 4;
+ int b = (((c & 0x7c00) >> 10) * fade) >> 4;
bitmap.pix32(curline, x * 2 + 0) = rgb_t(pal5bit(r), pal5bit(g), pal5bit(b));
bitmap.pix32(curline, x * 2 + 1) = rgb_t(pal5bit(r), pal5bit(g), pal5bit(b));
@@ -1920,13 +1961,13 @@ void snes_ppu_device::refresh_scanline( bitmap_rgb32 &bitmap, uint16_t curline )
else
{
/* prepare the pixel from main screen */
- c = scanline1->buffer[x];
+ uint16_t c = scanline1->buffer[x];
/* perform color math if the layer wants it (except if it's an object > 192) */
if (!scanline1->blend_exception[x] && m_layer[scanline1->layer[x]].color_math)
draw_blend(x, &c, m_prevent_color_math, m_clip_to_black, 0);
- tmp_col[1] = c;
+ uint16_t tmp_col1 = c;
/* prepare the pixel from sub screen */
c = scanline2->buffer[x];
@@ -1941,33 +1982,33 @@ void snes_ppu_device::refresh_scanline( bitmap_rgb32 &bitmap, uint16_t curline )
else if (x > 0 && !scanline1->blend_exception[x - 1] && m_layer[scanline1->layer[x - 1]].color_math)
draw_blend(x, &c, m_prevent_color_math, m_clip_to_black, 1);
- tmp_col[0] = c;
+ uint16_t tmp_col0 = c;
/* average the first pixel if required, or draw it directly*/
if (blurring)
- c = (prev_colour + tmp_col[0] - ((prev_colour ^ tmp_col[0]) & 0x0421)) >> 1; // Hack code to mimic TV pixel blurring
+ c = (prev_colour + tmp_col0 - ((prev_colour ^ tmp_col0) & 0x0421)) >> 1; // Hack code to mimic TV pixel blurring
else
- c = tmp_col[0];
+ c = tmp_col0;
- r = ((c & 0x1f) * fade) >> 4;
- g = (((c & 0x3e0) >> 5) * fade) >> 4;
- b = (((c & 0x7c00) >> 10) * fade) >> 4;
+ int r = ((c & 0x1f) * fade) >> 4;
+ int g = (((c & 0x3e0) >> 5) * fade) >> 4;
+ int b = (((c & 0x7c00) >> 10) * fade) >> 4;
bitmap.pix32(curline, x * 2 + 0) = rgb_t(pal5bit(r), pal5bit(g), pal5bit(b));
- prev_colour = tmp_col[0];
+ prev_colour = tmp_col0;
/* average the second pixel if required, or draw it directly*/
if (blurring)
- c = (prev_colour + tmp_col[1] - ((prev_colour ^ tmp_col[1]) & 0x0421)) >> 1; // Hack code to mimic TV pixel blurring
+ c = (prev_colour + tmp_col1 - ((prev_colour ^ tmp_col1) & 0x0421)) >> 1; // Hack code to mimic TV pixel blurring
else
- c = tmp_col[1];
+ c = tmp_col1;
r = ((c & 0x1f) * fade) >> 4;
g = (((c & 0x3e0) >> 5) * fade) >> 4;
b = (((c & 0x7c00) >> 10) * fade) >> 4;
bitmap.pix32(curline, x * 2 + 1) = rgb_t(pal5bit(r), pal5bit(g), pal5bit(b));
- prev_colour = tmp_col[1];
+ prev_colour = tmp_col1;
}
}
}
@@ -2264,6 +2305,126 @@ WRITE8_MEMBER( snes_ppu_device::cgram_write )
((uint8_t *)m_cgram.get())[offset] = data;
}
+uint16_t snes_ppu_device::direct_color(uint16_t palette, uint16_t group)
+{
+ //palette = -------- BBGGGRRR
+ //group = -------- -----bgr
+ //output = 0BBb00GG Gg0RRRr0
+ return (palette << 7 & 0x6000) + (group << 10 & 0x1000)
+ + (palette << 4 & 0x0380) + (group << 5 & 0x0040)
+ + (palette << 2 & 0x001c) + (group << 1 & 0x0002);
+}
+
+void snes_ppu_device::cache_background()
+{
+ for (int i = SNES_BG1; i <= SNES_BG4; i++)
+ {
+ if (m_beam.current_vert == 0)
+ {
+ m_layer[i].mosaic_counter = m_mosaic_size + 1;
+ m_layer[i].mosaic_offset = 1;
+ }
+ else if (--m_layer[i].mosaic_counter == 0)
+ {
+ m_layer[i].mosaic_counter = m_mosaic_size + 1;
+ m_layer[i].mosaic_offset += m_mosaic_size + 1;
+ }
+ }
+}
+
+void snes_ppu_device::update_video_mode()
+{
+ switch (m_mode)
+ {
+ case 0:
+ m_layer[SNES_BG1].tile_mode = SNES_COLOR_DEPTH_2BPP;
+ m_layer[SNES_BG2].tile_mode = SNES_COLOR_DEPTH_2BPP;
+ m_layer[SNES_BG3].tile_mode = SNES_COLOR_DEPTH_2BPP;
+ m_layer[SNES_BG4].tile_mode = SNES_COLOR_DEPTH_2BPP;
+ m_layer[SNES_BG1].priority[0] = 8; m_layer[SNES_BG1].priority[1] = 11;
+ m_layer[SNES_BG2].priority[0] = 7; m_layer[SNES_BG2].priority[1] = 10;
+ m_layer[SNES_BG3].priority[0] = 2; m_layer[SNES_BG3].priority[1] = 5;
+ m_layer[SNES_BG4].priority[0] = 1; m_layer[SNES_BG4].priority[1] = 4;
+ break;
+ case 1:
+ m_layer[SNES_BG1].tile_mode = SNES_COLOR_DEPTH_4BPP;
+ m_layer[SNES_BG2].tile_mode = SNES_COLOR_DEPTH_4BPP;
+ m_layer[SNES_BG3].tile_mode = SNES_COLOR_DEPTH_2BPP;
+ m_layer[SNES_BG4].tile_mode = SNES_COLOR_DEPTH_NONE;
+ if (m_bg_priority)
+ {
+ m_layer[SNES_BG1].priority[0] = 5; m_layer[SNES_BG1].priority[1] = 8;
+ m_layer[SNES_BG2].priority[0] = 4; m_layer[SNES_BG2].priority[1] = 7;
+ m_layer[SNES_BG3].priority[0] = 1; m_layer[SNES_BG3].priority[1] = 10;
+ }
+ else
+ {
+ m_layer[SNES_BG1].priority[0] = 6; m_layer[SNES_BG1].priority[1] = 9;
+ m_layer[SNES_BG2].priority[0] = 5; m_layer[SNES_BG2].priority[1] = 8;
+ m_layer[SNES_BG3].priority[0] = 1; m_layer[SNES_BG3].priority[1] = 3;
+ }
+ break;
+ case 2:
+ m_layer[SNES_BG1].tile_mode = SNES_COLOR_DEPTH_4BPP;
+ m_layer[SNES_BG2].tile_mode = SNES_COLOR_DEPTH_4BPP;
+ m_layer[SNES_BG3].tile_mode = SNES_COLOR_DEPTH_NONE;
+ m_layer[SNES_BG4].tile_mode = SNES_COLOR_DEPTH_NONE;
+ m_layer[SNES_BG1].priority[0] = 3; m_layer[SNES_BG1].priority[1] = 7;
+ m_layer[SNES_BG2].priority[0] = 1; m_layer[SNES_BG2].priority[1] = 5;
+ break;
+ case 3:
+ m_layer[SNES_BG1].tile_mode = SNES_COLOR_DEPTH_8BPP;
+ m_layer[SNES_BG2].tile_mode = SNES_COLOR_DEPTH_4BPP;
+ m_layer[SNES_BG3].tile_mode = SNES_COLOR_DEPTH_NONE;
+ m_layer[SNES_BG4].tile_mode = SNES_COLOR_DEPTH_NONE;
+ m_layer[SNES_BG1].priority[0] = 3; m_layer[SNES_BG1].priority[1] = 7;
+ m_layer[SNES_BG2].priority[0] = 1; m_layer[SNES_BG2].priority[1] = 5;
+ break;
+ case 4:
+ m_layer[SNES_BG1].tile_mode = SNES_COLOR_DEPTH_8BPP;
+ m_layer[SNES_BG2].tile_mode = SNES_COLOR_DEPTH_2BPP;
+ m_layer[SNES_BG3].tile_mode = SNES_COLOR_DEPTH_NONE;
+ m_layer[SNES_BG4].tile_mode = SNES_COLOR_DEPTH_NONE;
+ m_layer[SNES_BG1].priority[0] = 3; m_layer[SNES_BG1].priority[1] = 7;
+ m_layer[SNES_BG2].priority[0] = 1; m_layer[SNES_BG2].priority[1] = 5;
+ break;
+ case 5:
+ m_layer[SNES_BG1].tile_mode = SNES_COLOR_DEPTH_4BPP;
+ m_layer[SNES_BG2].tile_mode = SNES_COLOR_DEPTH_2BPP;
+ m_layer[SNES_BG3].tile_mode = SNES_COLOR_DEPTH_NONE;
+ m_layer[SNES_BG4].tile_mode = SNES_COLOR_DEPTH_NONE;
+ m_layer[SNES_BG1].priority[0] = 3; m_layer[SNES_BG1].priority[1] = 7;
+ m_layer[SNES_BG2].priority[0] = 1; m_layer[SNES_BG2].priority[1] = 5;
+ break;
+ case 6:
+ m_layer[SNES_BG1].tile_mode = SNES_COLOR_DEPTH_4BPP;
+ m_layer[SNES_BG2].tile_mode = SNES_COLOR_DEPTH_NONE;
+ m_layer[SNES_BG3].tile_mode = SNES_COLOR_DEPTH_NONE;
+ m_layer[SNES_BG4].tile_mode = SNES_COLOR_DEPTH_NONE;
+ m_layer[SNES_BG1].priority[0] = 2; m_layer[SNES_BG1].priority[1] = 5;
+ break;
+ case 7:
+ if (m_mode7.extbg)
+ {
+ m_layer[SNES_BG1].tile_mode = SNES_COLOR_DEPTH_MODE7;
+ m_layer[SNES_BG2].tile_mode = SNES_COLOR_DEPTH_NONE;
+ m_layer[SNES_BG3].tile_mode = SNES_COLOR_DEPTH_NONE;
+ m_layer[SNES_BG4].tile_mode = SNES_COLOR_DEPTH_NONE;
+ m_layer[SNES_BG1].priority[0] = 2; m_layer[SNES_BG1].priority[1] = 2;
+ }
+ else
+ {
+ m_layer[SNES_BG1].tile_mode = SNES_COLOR_DEPTH_MODE7;
+ m_layer[SNES_BG2].tile_mode = SNES_COLOR_DEPTH_MODE7;
+ m_layer[SNES_BG3].tile_mode = SNES_COLOR_DEPTH_NONE;
+ m_layer[SNES_BG4].tile_mode = SNES_COLOR_DEPTH_NONE;
+ m_layer[SNES_BG1].priority[0] = 3; m_layer[SNES_BG1].priority[1] = 3;
+ m_layer[SNES_BG2].priority[0] = 1; m_layer[SNES_BG2].priority[1] = 5;
+ }
+ break;
+ }
+}
+
uint8_t snes_ppu_device::read(address_space &space, uint32_t offset, uint8_t wrio_bit7)
{
uint8_t value;
@@ -2474,12 +2635,12 @@ void snes_ppu_device::write(address_space &space, uint32_t offset, uint8_t data)
case BGMODE: /* BG mode and character size settings */
m_mode = data & 0x07;
dynamic_res_change();
- m_bg3_priority_bit = BIT(data, 3);
+ m_bg_priority = BIT(data, 3);
m_layer[SNES_BG1].tile_size = BIT(data, 4);
m_layer[SNES_BG2].tile_size = BIT(data, 5);
m_layer[SNES_BG3].tile_size = BIT(data, 6);
m_layer[SNES_BG4].tile_size = BIT(data, 7);
- m_update_offsets = 1;
+ update_video_mode();
break;
case MOSAIC: /* Size and screen designation for mosaic */
m_mosaic_size = (data & 0xf0) >> 4;
@@ -2492,16 +2653,16 @@ void snes_ppu_device::write(address_space &space, uint32_t offset, uint8_t data)
case BG2SC: /* Address for storing SC data BG2 SC size designation */
case BG3SC: /* Address for storing SC data BG3 SC size designation */
case BG4SC: /* Address for storing SC data BG4 SC size designation */
- m_layer[offset - BG1SC].tilemap = data & 0xfc;
+ m_layer[offset - BG1SC].tilemap = data << 8 & 0x7c00;
m_layer[offset - BG1SC].tilemap_size = data & 0x3;
break;
case BG12NBA: /* Address for BG 1 and 2 character data */
- m_layer[SNES_BG1].charmap = (data & 0x0f);
- m_layer[SNES_BG2].charmap = (data & 0xf0) >> 4;
+ m_layer[SNES_BG1].charmap = data << 12 & 0x7000;
+ m_layer[SNES_BG2].charmap = data << 8 & 0x7000;
break;
case BG34NBA: /* Address for BG 3 and 4 character data */
- m_layer[SNES_BG3].charmap = (data & 0x0f);
- m_layer[SNES_BG4].charmap = (data & 0xf0) >> 4;
+ m_layer[SNES_BG3].charmap = data << 12 & 0x7000;
+ m_layer[SNES_BG4].charmap = data << 8 & 0x7000;
break;
// Anomie says "H Current = (Byte<<8) | (Prev&~7) | ((Current>>8)&7); V Current = (Current<<8) | Prev;" and Prev is shared by all scrolls but in Mode 7!
@@ -2811,6 +2972,7 @@ void snes_ppu_device::write(address_space &space, uint32_t offset, uint8_t data)
if ((data & 0x8) != (PPU_REG(SETINI) & 0x8))
osd_printf_debug("Pseudo 512 mode: %s\n", (data & 0x8) ? "on" : "off");
#endif
+ update_video_mode();
break;
}
@@ -2954,4 +3116,4 @@ uint8_t snes_ppu_device::dbg_video( uint16_t curline )
return 0;
}
-#endif /* SNES_LAYER_DEBUG */
+#endif /* SNES_LAYER_DEBUG */ \ No newline at end of file
diff --git a/src/devices/video/snes_ppu.h b/src/devices/video/snes_ppu.h
index baab1e264b1..91563fbdb78 100644
--- a/src/devices/video/snes_ppu.h
+++ b/src/devices/video/snes_ppu.h
@@ -111,7 +111,7 @@ protected:
SNES_SCANLINE m_scanlines[2];
- struct
+ struct layer_t
{
/* clipmasks */
uint8_t window1_enabled, window1_invert;
@@ -120,11 +120,12 @@ protected:
/* color math enabled */
uint8_t color_math;
- uint8_t charmap;
- uint8_t tilemap;
+ uint16_t charmap;
+ uint16_t tilemap;
uint8_t tilemap_size;
uint8_t tile_size;
+ uint8_t tile_mode;
uint8_t mosaic_enabled; // actually used only for layers 0->3!
uint8_t main_window_enabled;
@@ -134,7 +135,14 @@ protected:
uint16_t hoffs;
uint16_t voffs;
- } m_layer[6]; // this is for the BG1 - BG2 - BG3 - BG4 - OBJ - color layers
+
+ uint8_t priority[2];
+
+ uint16_t mosaic_counter;
+ uint16_t mosaic_offset;
+ };
+
+ layer_t m_layer[6]; // this is for the BG1 - BG2 - BG3 - BG4 - OBJ - color layers
struct
{
@@ -219,7 +227,7 @@ protected:
uint8_t m_clip_to_black;
uint8_t m_prevent_color_math;
uint8_t m_sub_add_mode;
- uint8_t m_bg3_priority_bit;
+ uint8_t m_bg_priority;
uint8_t m_direct_color;
uint8_t m_ppu_last_scroll; /* as per Anomie's doc and Theme Park, all scroll regs shares (but mode 7 ones) the same
'previous' scroll value */
@@ -262,9 +270,10 @@ protected:
inline void draw_bgtile_hires(uint8_t layer, int16_t ii, uint8_t colour, uint16_t pal, uint8_t direct_colors, uint8_t priority);
inline void draw_oamtile(int16_t ii, uint8_t colour, uint16_t pal, uint8_t priority);
inline void draw_tile(uint8_t planes, uint8_t layer, uint32_t tileaddr, int16_t x, uint8_t priority, uint8_t flip, uint8_t direct_colors, uint16_t pal, uint8_t hires);
- inline uint32_t get_tmap_addr(uint8_t layer, uint8_t tile_size, uint32_t base, uint32_t x, uint32_t y);
- inline void update_line(uint16_t curline, uint8_t layer, uint8_t priority_b, uint8_t priority_a, uint8_t color_depth, uint8_t hires, uint8_t offset_per_tile, uint8_t direct_colors);
- void update_line_mode7(uint16_t curline, uint8_t layer, uint8_t priority_b, uint8_t priority_a);
+ inline uint32_t get_tmap_addr(uint8_t layer, uint8_t hires, uint8_t tile_size, uint32_t base, uint32_t x, uint32_t y);
+ inline uint32_t get_tile(uint8_t layer_idx, uint32_t hoffset, uint32_t voffset);
+ inline void update_line(uint16_t curline, uint8_t layer, uint8_t direct_colors);
+ void update_line_mode7(uint16_t curline, uint8_t layer);
void update_obsel(void);
void oam_list_build(void);
int is_sprite_on_scanline(uint16_t curline, uint8_t sprite);
@@ -281,6 +290,9 @@ protected:
void draw_screens(uint16_t curline);
void update_windowmasks(void);
void update_offsets(void);
+ void update_video_mode(void);
+ void cache_background(void);
+ uint16_t direct_color(uint16_t palette, uint16_t group);
inline void draw_blend(uint16_t offset, uint16_t *colour, uint8_t prevent_color_math, uint8_t black_pen_clip, int switch_screens);
void dynamic_res_change();
@@ -314,4 +326,4 @@ private:
DECLARE_DEVICE_TYPE(SNES_PPU, snes_ppu_device)
-#endif // MAME_VIDEO_SNES_PPU_H
+#endif // MAME_VIDEO_SNES_PPU_H \ No newline at end of file
diff --git a/src/devices/video/sprite.cpp b/src/devices/video/sprite.cpp
index 32911a7bc18..de62b3fea7d 100644
--- a/src/devices/video/sprite.cpp
+++ b/src/devices/video/sprite.cpp
@@ -98,7 +98,7 @@ sparse_dirty_rect *sparse_dirty_bitmap::first_dirty_rect(const rectangle &clipre
{
// if what we have is valid, just return it again
if (m_rect_list_bounds == cliprect)
- return m_rect_list.first();
+ return m_rect_list.empty() ? nullptr : m_rect_list.first();
// reclaim the dirty list and start over
m_rect_allocator.reclaim_all(m_rect_list);
@@ -153,5 +153,5 @@ sparse_dirty_rect *sparse_dirty_bitmap::first_dirty_rect(const rectangle &clipre
// mark the list as valid
m_rect_list_bounds = cliprect;
- return m_rect_list.first();
+ return m_rect_list.empty() ? nullptr : m_rect_list.first();
}
diff --git a/src/devices/video/sprite.h b/src/devices/video/sprite.h
index 93cd38190a6..2ef3234b9d9 100644
--- a/src/devices/video/sprite.h
+++ b/src/devices/video/sprite.h
@@ -105,13 +105,13 @@ public:
_SpriteRAMType *buffer() { return &m_buffer[0]; }
// configuration
- void set_spriteram(_SpriteRAMType *base, uint32_t bytes) { m_spriteram = base; m_spriteram_bytes = bytes; m_buffer.resize(m_spriteram_bytes / sizeof(_SpriteRAMType)); }
+ void set_spriteram(_SpriteRAMType *base, uint32_t bytes) { assert(base != nullptr && bytes != 0); m_spriteram = base; m_spriteram_bytes = bytes; m_buffer.resize(m_spriteram_bytes / sizeof(_SpriteRAMType)); }
void set_origin(int32_t xorigin = 0, int32_t yorigin = 0) { m_xorigin = xorigin; m_yorigin = yorigin; }
void set_xorigin(int32_t xorigin) { m_xorigin = xorigin; }
void set_yorigin(int32_t yorigin) { m_yorigin = yorigin; }
// buffering
- void copy_to_buffer() { memcpy(m_buffer, m_spriteram, m_spriteram_bytes); }
+ void copy_to_buffer() { assert(m_spriteram != nullptr); memcpy(m_buffer, m_spriteram, m_spriteram_bytes); }
// clearing
void clear() { clear(m_bitmap.cliprect()); }
diff --git a/src/emu/addrmap.cpp b/src/emu/addrmap.cpp
index 968b32e85c6..eca9457e76e 100644
--- a/src/emu/addrmap.cpp
+++ b/src/emu/addrmap.cpp
@@ -1111,7 +1111,7 @@ void address_map::map_validity_check(validity_checker &valid, int spacenum) cons
{
// address map entries that reference regions but are NOPs are pointless
if (entry.m_read.m_type == AMH_NONE && entry.m_write.m_type == AMH_NONE)
- osd_printf_error("%s space references memory region %s, but is AM_NOP\n", spaceconfig.m_name, entry.m_region);
+ osd_printf_error("%s space references memory region %s, but is noprw()\n", spaceconfig.m_name, entry.m_region);
// make sure we can resolve the full path to the region
bool found = false;
diff --git a/src/emu/attotime.h b/src/emu/attotime.h
index c3efeca4ad5..cad95177724 100644
--- a/src/emu/attotime.h
+++ b/src/emu/attotime.h
@@ -369,4 +369,4 @@ inline attotime attotime::from_double(double _time)
}
-#endif // MAME_EMU_ATTOTIME_H
+#endif // MAME_EMU_ATTOTIME_H
diff --git a/src/emu/devfind.h b/src/emu/devfind.h
index 2428e1a7325..b2993bf6361 100644
--- a/src/emu/devfind.h
+++ b/src/emu/devfind.h
@@ -1,13 +1,9 @@
// license:BSD-3-Clause
// copyright-holders:Aaron Giles, Vas Crabb
-/**
- * \file devfind.h
- * Object auto-discovery helpers
- * \defgroup devfind
- * \{
- * Object auto-discovery helpers
- */
-
+/// \file
+/// \brief Object auto-discovery helpers
+/// \defgroup devfind Object auto-discovery helpers
+/// \{
#ifndef __EMU_H__
#error Dont include this file directly; include emu.h instead.
#endif
@@ -100,8 +96,8 @@ public:
/// int argument.
/// \param [in] start Number to add to element index when
/// calculating values for string format argument.
- /// \arg [in] Optional additional constructor argument(s) passed to
- /// all elements.
+ /// \param [in] arg Optional additional constructor argument(s) passed
+ /// to all elements.
/// \sa util::string_format
template <typename F, typename... Param>
object_array_finder(device_t &base, F const &fmt, unsigned start, Param const &... arg)
@@ -117,8 +113,8 @@ public:
/// \param [in] tags Tags to search for, e.g. { "player", "dips" }.
/// The tags are not copied, it is the caller's responsibility to
/// ensure the pointers remain valid until resolution time.
- /// \arg [in] Optional additional constructor argument(s) passed to
- /// all elements.
+ /// \param [in] arg Optional additional constructor argument(s) passed
+ /// to all elements.
template <typename... Param>
object_array_finder(device_t &base, std::array<char const *, Count> const &tags, Param const &... arg)
: object_array_finder(base, tags, std::make_integer_sequence<unsigned, Count>(), arg...)
@@ -368,9 +364,9 @@ protected:
/// with the requested tag is found, but it doesn't match the
/// desired width.
/// \param [in] width Desired memory share width in bits.
- /// \param [out] bytes Set to memoyr share length in bytes if a
+ /// \param [out] bytes Set to memory share length in bytes if a
/// matching memory share is found, otherwise left unchanged.
- /// \param [in] required. Whether warning message should be printed
+ /// \param [in] required Whether warning message should be printed
/// if a memory share with matching tag of incorrect width is
/// found.
/// \return Pointer to base of memory share if a matching memory
@@ -387,7 +383,7 @@ protected:
/// or a space with the designated number.
/// \param [in] spacenum Address space number.
/// \param [in] width Specific data width, or 0.
- /// \param [in] required. Whether warning message should be printed
+ /// \param [in] required Whether warning message should be printed
/// if a device with no memory interface or space of that number
/// is found.
/// \return Pointer to address space if a matching address space
@@ -400,7 +396,7 @@ protected:
/// found, or false otherwise.
/// \param [in] spacenum Address space number.
/// \param [in] width Specific data width, or 0.
- /// \param [in] required. Whether warning message should be printed
+ /// \param [in] required Whether warning message should be printed
/// if a device with no memory interface or space of that number
/// is found.
/// \return True if the space is optional, or if the space is
@@ -1212,4 +1208,4 @@ extern template class shared_ptr_finder<s64, false>;
extern template class shared_ptr_finder<s64, true>;
#endif // MAME_EMU_DEVFIND_H
-/** \} */
+/// \}
diff --git a/src/emu/device.h b/src/emu/device.h
index fc8da68f65c..257311deb7f 100644
--- a/src/emu/device.h
+++ b/src/emu/device.h
@@ -489,7 +489,34 @@ public:
// device flags
using feature = emu::detail::device_feature;
using feature_type = emu::detail::device_feature::type;
+
+ /// \brief Report unemulated features
+ ///
+ /// Implement this member in a derived class to declare features
+ /// that are not emulated. This will propagate to all other devices
+ /// and systems that use the device. Unemulated features are shown
+ /// in the system selection UI, and cause a red warning to be
+ /// displayed on starting a system.
+ /// \return Bitwise or of the feature constants for unemulated
+ /// features of the device.
+ /// \sa imperfect_features
static constexpr feature_type unemulated_features() { return feature::NONE; }
+
+ /// \brief Report imperfectly emulated features
+ ///
+ /// Implement this member in a derived class to declare features
+ /// that are imperfectly emulated. This will propagate to all other
+ /// devices and systems that use the device. Imperfectly emulated
+ /// features are shown in the system selection UI, and cause a
+ /// yellow warning to be displayed on starting a system (provided
+ /// there are no unemulated features, which take precedence and
+ /// cause the warning to be red).
+ ///
+ /// An exception is imperfectly emulated protection, which results
+ /// in a red warning being displayed when starting a system.
+ /// \return Bitwise or of the feature constants for imperfectly
+ /// emulated features of the device.
+ /// \sa unemulated_features
static constexpr feature_type imperfect_features() { return feature::NONE; }
virtual ~device_t();
@@ -616,15 +643,132 @@ protected:
virtual const tiny_rom_entry *device_rom_region() const;
virtual void device_add_mconfig(machine_config &config);
virtual ioport_constructor device_input_ports() const;
+
+ /// \brief Finalise device configuration
+ ///
+ /// Perform any final configuration tasks after all devices in the
+ /// system have added machine configuration. This is called after
+ /// any #device_interface mix-in interface_config_complete members
+ /// have completed.
+ ///
+ /// Note that automatic object finders will not have been resolved
+ /// at the time this member is called.
virtual void device_config_complete();
+
+ /// \brief Additional device validity checks
+ ///
+ /// Implement this member to provide additional validity checks.
+ /// Report errors using #osd_printf_error and report warnings using
+ /// #osd_printf_warning. The system being validated, device type
+ /// and device tag are collected automatically. Do not throw
+ /// exceptions to report errors.
+ ///
+ /// This provides an opportunity to check that the device has been
+ /// configured correctly. Systems are validated on start, and also
+ /// when the user manually runs a validity check. Validity checks
+ /// are only run for devices configured in runnable systems, not
+ /// when checking that a device can be instantiated in isolation.
+ /// \param [in] valid Reference to the validity checker object
+ /// performing validation (provides some helper member functions).
+ /// \sa device_interface::interface_validity_check
virtual void device_validity_check(validity_checker &valid) const ATTR_COLD;
+
+ /// \brief Resolve objects that may be needed while starting
+ ///
+ /// Implement this member to complete object resolution before any
+ /// devices are started. For example it may be necessary to resolve
+ /// callbacks before any devices start so initial input conditions
+ /// can be set. This is called after all registerd automatic object
+ /// finders are resolved.
virtual void device_resolve_objects() ATTR_COLD;
+
+ /// \brief Device start handler
+ ///
+ /// Implement this member to set up the initial state of the device
+ /// on start. This will be called after all #device_interface
+ // /mix-in interface_pre_start members have completed successfully.
+ /// If the device can't start until another device has completed
+ /// starting, throw a #device_missing_dependencies exception.
+ /// Starting will be postponed until additional devices have been
+ /// started.
+ ///
+ /// If a device's base class is not device_t, it's good practice to
+ /// check start order dependencies (and throw
+ /// #device_missing_dependencies if necessary) before calling the
+ /// base implementation. This will ensure that the base
+ /// implementation won't be called twice if starting needs to be
+ /// postponed.
+ ///
+ /// This is the correct place to register for save states.
+ /// \sa device_reset device_stop
+ /// device_interface::interface_pre_start
+ /// device_interface::interface_post_start
virtual void device_start() ATTR_COLD = 0;
+
+ /// \brief Device stop handler
+ ///
+ /// Implement this member to perform additional tasks on ending an
+ /// emulation session. You may deallocate memory here. This is
+ /// called after interface_pre_stop is called for all
+ /// #device_interface mix-ins, and before interface_post_stop is
+ /// called for any #device_interface mix-ins.
+ /// \sa device_interface::interface_pre_stop
+ /// device_interface::interface_post_stop
virtual void device_stop() ATTR_COLD;
+
+ /// \brief Device reset handler
+ ///
+ /// Implement this member to provide reset behaviour. This is
+ /// called after all #device_interface mix-in interface_pre_reset
+ /// members have completed, and before any child devices are reset.
+ /// All devices are reset at the beginning of an emulation session
+ /// (after all devices have been started), and also when the user
+ /// requests a soft reset (by pressing F3 by default, and also
+ /// available from the debugger).
+ ///
+ /// Note that child devices are reset automatically when a device is
+ /// reset. You should not reset child devices manually from this
+ /// member. If you need to provide additional behaviour after child
+ /// devices are reset, implement #device_reset_after_children.
+ ///
+ /// Only implement warm reset behaviour in this member. Initial
+ /// cold reset conditions should be set up in #device_start.
+ /// \sa device_reset_after_children device_start
+ /// device_interface::interface_pre_reset
+ /// device_interface::interface_post_reset
virtual void device_reset() ATTR_COLD;
+
+ /// \brief Additional reset behaviour after child device reset
+ ///
+ /// Implement this member to provide additional reset behaviour
+ /// after child devices are reset. This is called when resetting a
+ /// device after #device_reset has been called and all child devices
+ /// have been reset, and before any #device_interface mix-in
+ /// interface_post_reset members are called.
+ /// \sa device_reset device_interface::interface_pre_reset
+ /// device_interface::interface_post_reset
virtual void device_reset_after_children() ATTR_COLD;
+
+ /// \brief Prepare for a save state to be written
+ ///
+ /// Implement this member to perform any tasks necessary before any
+ /// registered save state items are recorded. For example it may be
+ /// necessary to flush caches, serialise self-referencing members or
+ /// pointers into data structures. This is called after all
+ /// #device_interface mix-in interface_pre_save members are called.
+ /// \sa device_post_load device_interface::interface_pre_save
virtual void device_pre_save() ATTR_COLD;
+
+ /// \brief Complete save state loading
+ ///
+ /// Implement this member to perform any tasks necessary after
+ /// registered save state items are loaded. For example it may be
+ /// necessary to update or invalidate caches, or de-serialise
+ /// pointers into data structures. This is called after all
+ /// #device_interface mix-in interface_post_load members are called.
+ /// \sa device_pre_save device_interface::interface_post_load
virtual void device_post_load() ATTR_COLD;
+
virtual void device_clock_changed();
virtual void device_debug_setup();
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
@@ -677,9 +821,12 @@ private:
};
-// ======================> device_interface
-
-// device_interface represents runtime information for a particular device interface
+/// \brief Device mix-in base
+///
+/// Provides a base for #device_t mix-ins that integrate with the device
+/// lifecycle. Derived classes are used to implement a number of
+/// standard concepts and interfaces, and integrate with the scheduler,
+/// debugger and user interface.
class device_interface
{
DISABLE_COPYING(device_interface);
@@ -701,24 +848,138 @@ public:
device_interface *interface_next() const { return m_interface_next; }
// optional operation overrides
- //
- // WARNING: interface_pre_start must be callable multiple times in
- // case another interface throws a missing dependency. In
- // particular, state saving registrations should be done in post.
+
+ /// \brief Finalise mix-in configuration
+ ///
+ /// Perform any final configuration tasks after all devices in the
+ /// system have added machine configuration. This is called before
+ /// device_config_complete is called for the device.
+ ///
+ /// Note that automatic object finders will not have been resolved
+ /// at this time.
+ /// \sa device_t::device_config_complete
virtual void interface_config_complete();
- virtual void interface_validity_check(validity_checker &valid) const;
- virtual void interface_pre_start();
- virtual void interface_post_start();
- virtual void interface_pre_reset();
- virtual void interface_post_reset();
- virtual void interface_pre_stop();
- virtual void interface_post_stop();
- virtual void interface_pre_save();
- virtual void interface_post_load();
+
+ /// \brief Additional mix-in validity checks
+ ///
+ /// Implement this member to provide additional validity checks.
+ /// Report errors using #osd_printf_error and report warnings using
+ /// #osd_printf_warning. The system being validated, device type
+ /// and device tag are collected automatically. Do not throw
+ /// exceptions to report errors.
+ ///
+ /// This provides an opportunity to check that the mix-in has been
+ /// configured correctly. Systems are validated on start, and also
+ /// when the user manually runs a validity check. Validity checks
+ /// are only run for devices configured in runnable systems, not
+ /// when checking that a device can be instantiated in isolation.
+ /// \param [in] valid Reference to the validity checker object
+ /// performing validation (provides some helper member functions).
+ /// \sa device_t::device_validity_check
+ virtual void interface_validity_check(validity_checker &valid) const ATTR_COLD;
+
+ /// \brief Mix-in start handler
+ ///
+ /// Implement this member to set up the initial state of the mix-in
+ /// on start. This is called before the device_start member is
+ /// called for the device. If the mix-in can't be started until
+ /// another device has started, throw a #device_missing_dependencies
+ /// exception. Starting will be postponed until additional devices
+ /// have been started.
+ ///
+ /// Note that this member may be called multiple times if another
+ /// device_interface mix-in throws a #device_missing_dependencies
+ /// exception from its interface_pre_start member, or if the device
+ /// throws a #device_missing_dependencies exception from its
+ /// device_start member. You must check to ensure that operations
+ /// like resource allocation are not performed multiple times, or
+ /// postpone them until #interface_post_start is called.
+ ///
+ /// It's simpler to register for save states when
+ /// #interface_post_start is called.
+ /// \sa interface_post_start device_t::device_start
+ virtual void interface_pre_start() ATTR_COLD;
+
+ /// \brief Mix-in start completion handler
+ ///
+ /// Implement this member to complete mix-in start-up. This is
+ /// called after #interface_pre_start is called for all
+ /// device_interface mix-ins, and after device_start is called for
+ /// the device. This member will only be called once, it will not
+ /// be called multiple times if device starting is postponed.
+ ///
+ /// This member must not throw #device_missing_dependencies (start
+ /// order dependencies should be checked in #interface_pre_start).
+ /// This is the appropriate place to allocate resources like
+ /// timers and register for save states.
+ /// \sa interface_pre_start device_t::device_start
+ virtual void interface_post_start() ATTR_COLD;
+
+ /// \brief Mix-in reset handler
+ ///
+ /// Implement this member to provide reset behaviour. This is
+ /// called before device_reset is called for the device, and before
+ /// any child devices are reset. Only implement warm reset
+ /// behaviour in this member. Initial cold reset conditions should
+ /// be set up in #interface_pre_start and/or #interface_post_start.
+ /// If you need to provide additional behaviour after child devices
+ /// are reset, implement #interface_post_reset.
+ /// \sa interface_post_reset device_t::device_reset
+ virtual void interface_pre_reset() ATTR_COLD;
+
+ /// \brief Mix-in reset completion handler
+ ///
+ /// Implement this member to provide additional reset behaviour
+ /// after child devices are reset. This is called after
+ /// device_reset_after_children has been called for the device.
+ /// \sa interface_pre_reset device_t::device_reset
+ /// device_t::device_reset_after_children
+ virtual void interface_post_reset() ATTR_COLD;
+
+ /// \brief Mix-in stop handler
+ ///
+ /// Implement this member to perform additional tasks on ending an
+ /// emulation session. Do not deallocate anything that may need to
+ /// be referenced from another device_interface mix-in's
+ /// interface_pre_stop member or from the device's device_stop
+ /// member. This is called before device_stop is called for the
+ /// device.
+ /// \sa interface_post_stop device_t::device_stop
+ virtual void interface_pre_stop() ATTR_COLD;
+
+ /// \brief Mix-in stop completion handler
+ ///
+ /// Implement this member to perform additional tasks on ending an
+ /// emulation session after the device is stopped. You can
+ /// deallocate memory here. This is called after device_stop is
+ /// called for the device.
+ /// \sa interface_pre_stop device_t::device_stop
+ virtual void interface_post_stop() ATTR_COLD;
+
+ /// \brief Prepare for a save state to be written
+ ///
+ /// Implement this member to perform any tasks necessary before any
+ /// registered save state items are recorded. For example it may be
+ /// necessary to flush caches, serialise self-referencing members or
+ /// pointers into data structures. This is called before
+ /// device_pre_save is called for the device.
+ /// \sa interface_post_load device_t::device_pre_save
+ virtual void interface_pre_save() ATTR_COLD;
+
+ /// \brief Complete save state loading
+ ///
+ /// Implement this member to perform any tasks necessary after
+ /// registered save state items are loaded. For example it may be
+ /// necessary to update or invalidate caches, or de-serialise
+ /// pointers into data structures. This is called before
+ /// device_post_load is called for the device.
+ /// \sa interface_pre_save device_t::device_post_load
+ virtual void interface_post_load() ATTR_COLD;
+
virtual void interface_clock_changed();
virtual void interface_debug_setup();
-protected:
+private:
// internal state
device_interface * m_interface_next;
device_t & m_device;
diff --git a/src/emu/disound.cpp b/src/emu/disound.cpp
index f3ab6b236f7..a8a0a55ad38 100644
--- a/src/emu/disound.cpp
+++ b/src/emu/disound.cpp
@@ -85,8 +85,8 @@ int device_sound_interface::inputs() const
{
// scan the list counting streams we own and summing their inputs
int inputs = 0;
- for (auto &stream : m_device.machine().sound().streams())
- if (&stream->device() == &m_device)
+ for (auto &stream : device().machine().sound().streams())
+ if (&stream->device() == &device())
inputs += stream->input_count();
return inputs;
}
@@ -101,8 +101,8 @@ int device_sound_interface::outputs() const
{
// scan the list counting streams we own and summing their outputs
int outputs = 0;
- for (auto &stream : m_device.machine().sound().streams())
- if (&stream->device() == &m_device)
+ for (auto &stream : device().machine().sound().streams())
+ if (&stream->device() == &device())
outputs += stream->output_count();
return outputs;
}
@@ -119,8 +119,8 @@ sound_stream *device_sound_interface::input_to_stream_input(int inputnum, int &s
assert(inputnum >= 0);
// scan the list looking for streams owned by this device
- for (auto &stream : m_device.machine().sound().streams())
- if (&stream->device() == &m_device)
+ for (auto &stream : device().machine().sound().streams())
+ if (&stream->device() == &device())
{
if (inputnum < stream->input_count())
{
@@ -146,7 +146,7 @@ sound_stream *device_sound_interface::output_to_stream_output(int outputnum, int
assert(outputnum >= 0);
// scan the list looking for streams owned by this device
- for (auto &stream : m_device.machine().sound().streams())
+ for (auto &stream : device().machine().sound().streams())
if (&stream->device() == &device())
{
if (outputnum < stream->output_count())
@@ -212,7 +212,7 @@ void device_sound_interface::set_output_gain(int outputnum, float gain)
// handle ALL_OUTPUTS as a special case
if (outputnum == ALL_OUTPUTS)
{
- for (auto &stream : m_device.machine().sound().streams())
+ for (auto &stream : device().machine().sound().streams())
if (&stream->device() == &device())
for (int num = 0; num < stream->output_count(); num++)
stream->set_output_gain(num, gain);
@@ -237,7 +237,7 @@ void device_sound_interface::set_output_gain(int outputnum, float gain)
int device_sound_interface::inputnum_from_device(device_t &source_device, int outputnum) const
{
int overall = 0;
- for (auto &stream : m_device.machine().sound().streams())
+ for (auto &stream : device().machine().sound().streams())
if (&stream->device() == &device())
for (int inputnum = 0; inputnum < stream->input_count(); inputnum++, overall++)
if (stream->input_source_device(inputnum) == &source_device && stream->input_source_outputnum(inputnum) == outputnum)
@@ -278,7 +278,7 @@ void device_sound_interface::interface_validity_check(validity_checker &valid) c
void device_sound_interface::interface_pre_start()
{
// scan all the sound devices
- sound_interface_iterator iter(m_device.machine().root_device());
+ sound_interface_iterator iter(device().machine().root_device());
for (device_sound_interface const &sound : iter)
{
// scan each route on the device
@@ -286,7 +286,7 @@ void device_sound_interface::interface_pre_start()
{
// see if we are the target of this route; if we are, make sure the source device is started
device_t *const target_device = route.m_base.get().subdevice(route.m_target.c_str());
- if ((target_device == &m_device) && !sound.device().started())
+ if ((target_device == &device()) && !sound.device().started())
throw device_missing_dependencies();
}
}
@@ -300,7 +300,7 @@ void device_sound_interface::interface_pre_start()
{
// see if we are the target of this route
device_t *const target_device = route.m_base.get().subdevice(route.m_target.c_str());
- if ((target_device == &m_device) && (route.m_input == AUTO_ALLOC_INPUT))
+ if ((target_device == &device()) && (route.m_input == AUTO_ALLOC_INPUT))
{
route.m_input = m_auto_allocated_inputs;
m_auto_allocated_inputs += (route.m_output == ALL_OUTPUTS) ? sound.outputs() : 1;
@@ -318,14 +318,14 @@ void device_sound_interface::interface_pre_start()
void device_sound_interface::interface_post_start()
{
// iterate over all the sound devices
- for (device_sound_interface &sound : sound_interface_iterator(m_device.machine().root_device()))
+ for (device_sound_interface &sound : sound_interface_iterator(device().machine().root_device()))
{
// scan each route on the device
for (sound_route const &route : sound.routes())
{
// if we are the target of this route, hook it up
device_t *const target_device = route.m_base.get().subdevice(route.m_target.c_str());
- if (target_device == &m_device)
+ if (target_device == &device())
{
// iterate over all outputs, matching any that apply
int inputnum = route.m_input;
@@ -343,7 +343,7 @@ void device_sound_interface::interface_post_start()
int streaminputnum;
sound_stream *const inputstream = input_to_stream_input(inputnum++, streaminputnum);
if (!inputstream)
- fatalerror("Sound device '%s' targeted output #%d to nonexistent device '%s' input %d\n", sound.device().tag(), outputnum, m_device.tag(), inputnum - 1);
+ fatalerror("Sound device '%s' targeted output #%d to nonexistent device '%s' input %d\n", sound.device().tag(), outputnum, device().tag(), inputnum - 1);
// set the input
inputstream->set_input(streaminputnum, outputstream, streamoutputnum, route.m_gain);
@@ -362,7 +362,7 @@ void device_sound_interface::interface_post_start()
void device_sound_interface::interface_pre_reset()
{
// update all streams on this device prior to reset
- for (auto &stream : m_device.machine().sound().streams())
+ for (auto &stream : device().machine().sound().streams())
if (&stream->device() == &device())
stream->update();
}
@@ -415,7 +415,7 @@ void device_mixer_interface::interface_pre_start()
m_outputmap.resize(m_auto_allocated_inputs);
// iterate through all routes that point to us and note their mixer output
- for (device_sound_interface const &sound : sound_interface_iterator(m_device.machine().root_device()))
+ for (device_sound_interface const &sound : sound_interface_iterator(device().machine().root_device()))
{
for (sound_route const &route : sound.routes())
{
diff --git a/src/emu/distate.cpp b/src/emu/distate.cpp
index 2dcf4301ac4..b96d3c6aad3 100644
--- a/src/emu/distate.cpp
+++ b/src/emu/distate.cpp
@@ -624,7 +624,7 @@ void device_state_interface::interface_post_start()
{
// make sure we got something during startup
if (m_state_list.size() == 0)
- throw emu_fatalerror("No state registered for device '%s' that supports it!", m_device.tag());
+ throw emu_fatalerror("No state registered for device '%s' that supports it!", device().tag());
}
diff --git a/src/emu/driver.cpp b/src/emu/driver.cpp
index 8dde7622da6..d13a4899136 100644
--- a/src/emu/driver.cpp
+++ b/src/emu/driver.cpp
@@ -236,10 +236,7 @@ void driver_device::device_start()
else
machine_start();
- if (!m_callbacks[CB_SOUND_START].isnull())
- m_callbacks[CB_SOUND_START]();
- else
- sound_start();
+ sound_start();
if (!m_callbacks[CB_VIDEO_START].isnull())
m_callbacks[CB_VIDEO_START]();
@@ -268,10 +265,7 @@ void driver_device::device_reset_after_children()
else
machine_reset();
- if (!m_callbacks[CB_SOUND_RESET].isnull())
- m_callbacks[CB_SOUND_RESET]();
- else
- sound_reset();
+ sound_reset();
if (!m_callbacks[CB_VIDEO_RESET].isnull())
m_callbacks[CB_VIDEO_RESET]();
diff --git a/src/emu/driver.h b/src/emu/driver.h
index 4f6576aa737..0a92151d07c 100644
--- a/src/emu/driver.h
+++ b/src/emu/driver.h
@@ -32,13 +32,6 @@
#define MCFG_MACHINE_RESET_REMOVE() \
driver_device::static_set_callback(config.root_device(), driver_device::CB_MACHINE_RESET, driver_callback_delegate());
-// core sound callbacks
-#define MCFG_SOUND_START_OVERRIDE(_class, _func) \
- driver_device::static_set_callback(config.root_device(), driver_device::CB_SOUND_START, driver_callback_delegate(&_class::SOUND_START_NAME(_func), this));
-
-#define MCFG_SOUND_RESET_OVERRIDE(_class, _func) \
- driver_device::static_set_callback(config.root_device(), driver_device::CB_SOUND_RESET, driver_callback_delegate(&_class::SOUND_RESET_NAME(_func), this));
-
// core video callbacks
#define MCFG_VIDEO_START_OVERRIDE(_class, _func) \
@@ -63,15 +56,6 @@
#define DECLARE_MACHINE_RESET(name) void MACHINE_RESET_NAME(name)()
#define MACHINE_RESET_MEMBER(cls,name) void cls::MACHINE_RESET_NAME(name)()
-#define SOUND_START_NAME(name) sound_start_##name
-#define DECLARE_SOUND_START(name) void SOUND_START_NAME(name)() ATTR_COLD
-#define SOUND_START_MEMBER(cls,name) void cls::SOUND_START_NAME(name)()
-
-#define SOUND_RESET_NAME(name) sound_reset_##name
-#define SOUND_RESET_CALL_MEMBER(name) SOUND_RESET_NAME(name)()
-#define DECLARE_SOUND_RESET(name) void SOUND_RESET_NAME(name)()
-#define SOUND_RESET_MEMBER(cls,name) void cls::SOUND_RESET_NAME(name)()
-
#define VIDEO_START_NAME(name) video_start_##name
#define VIDEO_START_CALL_MEMBER(name) VIDEO_START_NAME(name)()
#define DECLARE_VIDEO_START(name) void VIDEO_START_NAME(name)() ATTR_COLD
@@ -110,8 +94,6 @@ public:
{
CB_MACHINE_START,
CB_MACHINE_RESET,
- CB_SOUND_START,
- CB_SOUND_RESET,
CB_VIDEO_START,
CB_VIDEO_RESET,
CB_COUNT
diff --git a/src/emu/emucore.h b/src/emu/emucore.h
index 4c8b9c96056..92135e7ae84 100644
--- a/src/emu/emucore.h
+++ b/src/emu/emucore.h
@@ -373,4 +373,4 @@ inline u64 d2u(double d)
return u.vv;
}
-#endif /* MAME_EMU_EMUCORE_H */
+#endif // MAME_EMU_EMUCORE_H
diff --git a/src/emu/render.cpp b/src/emu/render.cpp
index 58d2c2961c9..0c598345ea1 100644
--- a/src/emu/render.cpp
+++ b/src/emu/render.cpp
@@ -496,7 +496,7 @@ void render_texture::get_scaled(u32 dwidth, u32 dheight, render_texinfo &texinfo
// palette for a texture
//-------------------------------------------------
-const rgb_t *render_texture::get_adjusted_palette(render_container &container)
+const rgb_t *render_texture::get_adjusted_palette(render_container &container, u32 &out_length)
{
// override the palette with our adjusted palette
switch (m_format)
@@ -506,7 +506,7 @@ const rgb_t *render_texture::get_adjusted_palette(render_container &container)
assert(m_bitmap->palette() != nullptr);
// return our adjusted palette
- return container.bcg_lookup_table(m_format, m_bitmap->palette());
+ return container.bcg_lookup_table(m_format, out_length, m_bitmap->palette());
case TEXFORMAT_RGB32:
case TEXFORMAT_ARGB32:
@@ -515,7 +515,7 @@ const rgb_t *render_texture::get_adjusted_palette(render_container &container)
// if no adjustment necessary, return nullptr
if (!container.has_brightness_contrast_gamma_changes())
return nullptr;
- return container.bcg_lookup_table(m_format);
+ return container.bcg_lookup_table(m_format, out_length);
default:
assert(false);
@@ -679,7 +679,7 @@ float render_container::apply_brightness_contrast_gamma_fp(float value)
// given texture mode
//-------------------------------------------------
-const rgb_t *render_container::bcg_lookup_table(int texformat, palette_t *palette)
+const rgb_t *render_container::bcg_lookup_table(int texformat, u32 &out_length, palette_t *palette)
{
switch (texformat)
{
@@ -691,14 +691,17 @@ const rgb_t *render_container::bcg_lookup_table(int texformat, palette_t *palett
recompute_lookups();
}
assert (palette == &m_palclient->palette());
+ out_length = palette->max_index();
return &m_bcglookup[0];
case TEXFORMAT_RGB32:
case TEXFORMAT_ARGB32:
case TEXFORMAT_YUY16:
+ out_length = 256;
return m_bcglookup256;
default:
+ out_length = 0;
return nullptr;
}
}
@@ -2267,7 +2270,7 @@ void render_target::add_container_primitives(render_primitive_list &list, const
curitem.texture()->get_scaled(width, height, prim->texture, list, curitem.flags());
// set the palette
- prim->texture.palette = curitem.texture()->get_adjusted_palette(container);
+ prim->texture.palette = curitem.texture()->get_adjusted_palette(container, prim->texture.palette_length);
// determine UV coordinates
prim->texcoords = oriented_texcoords[finalorient];
diff --git a/src/emu/render.h b/src/emu/render.h
index 0d70dc7684b..b9706907aed 100644
--- a/src/emu/render.h
+++ b/src/emu/render.h
@@ -218,6 +218,7 @@ struct render_texinfo
u64 unique_id; // unique identifier to pass to osd
u64 old_id; // previously allocated id, if applicable
const rgb_t * palette; // palette for PALETTE16 textures, bcg lookup table for RGB32/YUY16
+ u32 palette_length;
};
@@ -436,7 +437,7 @@ public:
private:
// internal helpers
void get_scaled(u32 dwidth, u32 dheight, render_texinfo &texinfo, render_primitive_list &primlist, u32 flags = 0);
- const rgb_t *get_adjusted_palette(render_container &container);
+ const rgb_t *get_adjusted_palette(render_container &container, u32 &out_length);
static const int MAX_TEXTURE_SCALES = 16;
@@ -527,7 +528,7 @@ public:
bool has_brightness_contrast_gamma_changes() const { return (m_user.m_brightness != 1.0f || m_user.m_contrast != 1.0f || m_user.m_gamma != 1.0f); }
u8 apply_brightness_contrast_gamma(u8 value);
float apply_brightness_contrast_gamma_fp(float value);
- const rgb_t *bcg_lookup_table(int texformat, palette_t *palette = nullptr);
+ const rgb_t *bcg_lookup_table(int texformat, u32 &out_length, palette_t *palette = nullptr);
private:
// an item describes a high level primitive that is added to a container
diff --git a/src/emu/screen.cpp b/src/emu/screen.cpp
index 835e12995f5..db6f7c91ad4 100644
--- a/src/emu/screen.cpp
+++ b/src/emu/screen.cpp
@@ -546,7 +546,7 @@ screen_device::screen_device(const machine_config &mconfig, const char *tag, dev
, m_scanline_cb(*this)
, m_palette(*this, finder_base::DUMMY_TAG)
, m_video_attributes(0)
- , m_svg_region(tag)
+ , m_svg_region(*this, DEVICE_SELF)
, m_container(nullptr)
, m_width(100)
, m_height(100)
@@ -717,10 +717,9 @@ void screen_device::device_start()
if (m_type == SCREEN_TYPE_SVG)
{
- memory_region *reg = owner()->memregion(m_svg_region);
- if (!reg)
- fatalerror("%s: SVG region \"%s\" does not exist\n", tag(), m_svg_region);
- m_svg = std::make_unique<svg_renderer>(reg);
+ if (!m_svg_region)
+ fatalerror("%s: SVG region \"%s\" does not exist\n", tag(), m_svg_region.finder_tag());
+ m_svg = std::make_unique<svg_renderer>(m_svg_region);
machine().output().set_notifier(nullptr, svg_renderer::output_notifier, m_svg.get());
// don't do this - SVG units are arbitrary and interpreting them as pixels causes bad things to happen
diff --git a/src/emu/screen.h b/src/emu/screen.h
index 0ae11f85b9b..6754d66f071 100644
--- a/src/emu/screen.h
+++ b/src/emu/screen.h
@@ -207,7 +207,24 @@ public:
void set_orientation(int orientation) { assert(!configured()); m_orientation = orientation; }
void set_physical_aspect(unsigned x, unsigned y) { assert(!configured()); m_phys_aspect = std::make_pair(x, y); }
void set_native_aspect() { assert(!configured()); m_phys_aspect = std::make_pair(~0U, ~0U); }
- void set_raw(u32 pixclock, u16 htotal, u16 hbend, u16 hbstart, u16 vtotal, u16 vbend, u16 vbstart)
+
+ /// \brief Configure screen parameters
+ ///
+ /// \param [in] pixclock Pixel clock frequency in Hertz.
+ /// \param [in] htotal Total pixel clocks per line, including
+ /// horizontal blanking period.
+ /// \param [in] hbend Index of first visible pixel after horizontal
+ /// blanking period ends.
+ /// \param [in] hbstart Index of first pixel in horzontal blanking
+ /// period after visible pixels.
+ /// \param [in] vtotal Total lines per frame, including vertical
+ /// blanking period.
+ /// \param [in] vbend Index of first visible line after vertical
+ /// blanking period ends.
+ /// \param [in] vbstart Index of first line in vertical blanking
+ /// period after visible lines.
+ /// \return Reference to device for method chaining.
+ screen_device &set_raw(u32 pixclock, u16 htotal, u16 hbend, u16 hbstart, u16 vtotal, u16 vbend, u16 vbstart)
{
assert(pixclock != 0);
m_clock = pixclock;
@@ -216,15 +233,101 @@ public:
m_width = htotal;
m_height = vtotal;
m_visarea.set(hbend, hbstart - 1, vbend, vbstart - 1);
+ return *this;
+ }
+ screen_device &set_raw(const XTAL &xtal, u16 htotal, u16 hbend, u16 hbstart, u16 vtotal, u16 vbend, u16 vbstart)
+ {
+ xtal.validate(std::string("Configuring screen ") + tag());
+ return set_raw(xtal.value(), htotal, hbend, hbstart, vtotal, vbend, vbstart);
}
- void set_raw(const XTAL &xtal, u16 htotal, u16 hbend, u16 hbstart, u16 vtotal, u16 vbend, u16 vbstart) { set_raw(xtal.value(), htotal, hbend, hbstart, vtotal, vbend, vbstart); }
void set_refresh(attoseconds_t rate) { m_refresh = rate; }
- template <typename T> void set_refresh_hz(T &&hz) { set_refresh(HZ_TO_ATTOSECONDS(std::forward<T>(hz))); }
- void set_vblank_time(attoseconds_t time) { m_vblank = time; m_oldstyle_vblank_supplied = true; }
- void set_size(u16 width, u16 height) { m_width = width; m_height = height; }
- void set_visarea(s16 minx, s16 maxx, s16 miny, s16 maxy) { m_visarea.set(minx, maxx, miny, maxy); }
- void set_visarea_full() { m_visarea.set(0, m_width - 1, 0, m_height - 1); } // call after set_size
- void set_default_position(double xscale, double xoffs, double yscale, double yoffs) {
+
+ /// \brief Set refresh rate in Hertz
+ ///
+ /// Sets refresh rate in Hertz (frames per second). Used in
+ /// conjunction with #set_vblank_time, #set_size and #set_visarea.
+ /// For raster displays, please use #set_raw to configure screen
+ /// parameters in terms of pixel clock.
+ /// \param [in] hz Desired refresh rate.
+ /// \return Reference to device for method chaining.
+ template <typename T> screen_device &set_refresh_hz(T &&hz)
+ {
+ set_refresh(HZ_TO_ATTOSECONDS(std::forward<T>(hz)));
+ return *this;
+ }
+
+ /// \brief Set vertical blanking interval time
+ ///
+ /// Sets vertical blanking interval period. Used in conjunction
+ /// with #set_refresh_hz, #set_size and #set_visarea. For raster
+ /// displays, please use #set_raw to configure screen parameters in
+ /// terms of pixel clock.
+ /// \param [in] time Length of vertical blanking interval.
+ /// \return Reference to device for method chaining.
+ screen_device &set_vblank_time(attoseconds_t time)
+ {
+ m_vblank = time;
+ m_oldstyle_vblank_supplied = true;
+ return *this;
+ }
+
+ /// \brief Set total screen size
+ ///
+ /// Set the total screen size in pixels, including blanking areas if
+ /// applicable. This sets the size of the screen bitmap. Used in
+ /// conjunction with #set_refresh_hz, #set_vblank_time and
+ /// #set_visarea. For raster displays, please use #set_raw to
+ /// configure screen parameters in terms of pixel clock.
+ /// \param [in] width Total width in pixels, including horizontal
+ /// blanking period if applicable.
+ /// \param [in] height Total height in lines, including vertical
+ /// blanking period if applicable.
+ /// \return Reference to device for method chaining.
+ screen_device &set_size(u16 width, u16 height)
+ {
+ m_width = width;
+ m_height = height;
+ return *this;
+ }
+
+ /// \brief Set visible screen area
+ ///
+ /// Set visible screen area. This should fit within the total
+ /// screen area. Used in conjunction with #set_refresh_hz,
+ /// #set_vblank_time and #set_size. For raster displays, please
+ /// use #set_raw to configure screen parameters in terms of pixel
+ /// clock.
+ /// \param [in] minx First visible pixel index after horizontal
+ /// blanking period ends.
+ /// \param [in] maxx Last visible pixel index before horizontal
+ /// blanking period starts.
+ /// \param [in] miny First visible line index after vertical
+ /// blanking period ends.
+ /// \param [in] maxy Last visible line index before vertical
+ /// blanking period starts.
+ /// \return Reference to device for method chaining.
+ screen_device &set_visarea(s16 minx, s16 maxx, s16 miny, s16 maxy)
+ {
+ m_visarea.set(minx, maxx, miny, maxy);
+ return *this;
+ }
+
+ /// \brief Set visible area to full area
+ ///
+ /// Set visible screen area to the full screen area (i.e. noi
+ /// horizontal or vertical blanking period). This is generally not
+ /// possible for raster displays, but is useful for other display
+ /// simulations. Must be called after calling #set_size.
+ /// \return Reference to device for method chaining.
+ /// \sa set_visarea
+ screen_device &set_visarea_full()
+ {
+ m_visarea.set(0, m_width - 1, 0, m_height - 1);
+ return *this;
+ }
+
+ void set_default_position(double xscale, double xoffs, double yscale, double yoffs)
+ {
m_xscale = xscale;
m_xoffset = xoffs;
m_yscale = yscale;
@@ -265,10 +368,11 @@ public:
auto screen_vblank() { return m_screen_vblank.bind(); }
auto scanline() { m_video_attributes |= VIDEO_UPDATE_SCANLINE; return m_scanline_cb.bind(); }
- template<typename T> void set_palette(T &&tag) { m_palette.set_tag(std::forward<T>(tag)); }
- void set_video_attributes(u32 flags) { m_video_attributes = flags; }
- void set_color(rgb_t color) { m_color = color; }
- void set_svg_region(const char *region) { m_svg_region = region; } // default region is device tag
+ template <typename T> screen_device &set_palette(T &&tag) { m_palette.set_tag(std::forward<T>(tag)); return *this; }
+ screen_device &set_no_palette() { m_palette.set_tag(finder_base::DUMMY_TAG); return *this; }
+ screen_device &set_video_attributes(u32 flags) { m_video_attributes = flags; return *this; }
+ screen_device &set_color(rgb_t color) { m_color = color; return *this; }
+ template <typename T> screen_device &set_svg_region(T &&tag) { m_svg_region.set_tag(std::forward<T>(tag)); return *this; } // default region is device tag
// information getters
render_container &container() const { assert(m_container != nullptr); return *m_container; }
@@ -365,7 +469,7 @@ private:
devcb_write32 m_scanline_cb; // screen scanline callback
optional_device<device_palette_interface> m_palette; // our palette
u32 m_video_attributes; // flags describing the video system
- const char * m_svg_region; // the region in which the svg data is in
+ optional_memory_region m_svg_region; // the region in which the svg data is in
// internal state
render_container * m_container; // pointer to our container
@@ -445,72 +549,6 @@ typedef device_type_iterator<screen_device> screen_device_iterator;
@def set_type
Modify the screen device type
@see screen_type_enum
-
- @def set_raw
- Configures screen parameters for the given screen.
- @remark It's better than using @see set_refresh_hz and @see set_vblank_time but still not enough.
-
- @param _pixclock
- Pixel Clock frequency value
-
- @param _htotal
- Total number of horizontal pixels, including hblank period.
-
- @param _hbend
- Horizontal pixel position for HBlank end event, also first pixel where screen rectangle is visible.
-
- @param _hbstart
- Horizontal pixel position for HBlank start event, also last pixel where screen rectangle is visible.
-
- @param _vtotal
- Total number of vertical pixels, including vblank period.
-
- @param _vbend
- Vertical pixel position for VBlank end event, also first pixel where screen rectangle is visible.
-
- @param _vbstart
- Vertical pixel position for VBlank start event, also last pixel where screen rectangle is visible.
-
- @def set_refresh_hz
- Sets the number of Frames Per Second for this screen
- @remarks Please use @see set_raw instead. Gives imprecise timings.
-
- @param _rate
- FPS number
-
- @def set_vblank_time
- Sets the vblank time of the given screen
- @remarks Please use @see MCFG_SCREEN_RAW_PARAMS instead. Gives imprecise timings.
-
- @param _time
- Time parameter, in attotime value
-
- @def set_size
- Sets total screen size, including H/V-Blanks
- @remarks Please use @see set_raw instead. Gives imprecise timings.
-
- @param _width
- Screen horizontal size
-
- @param _height
- Screen vertical size
-
- @def set_visarea
- Sets screen visible area
- @remarks Please use @see set_raw instead. Gives imprecise timings.
-
- @param _minx
- Screen left border
-
- @param _maxx
- Screen right border, must be in N-1 format
-
- @param _miny
- Screen top border
-
- @param _maxx
- Screen bottom border, must be in N-1 format
-
@}
*/
diff --git a/src/emu/xtal.cpp b/src/emu/xtal.cpp
index 172b032fe4d..c83af7fb2c5 100644
--- a/src/emu/xtal.cpp
+++ b/src/emu/xtal.cpp
@@ -243,6 +243,7 @@ const double XTAL::known_xtals[] = {
16'934'400, /* 16.9344_MHz_XTAL Usually used to drive 90's Yamaha OPL/FM chips (44100 * 384) */
17'010'000, /* 17.01_MHz_XTAL Epic 14E */
17'064'000, /* 17.064_MHz_XTAL Memorex 1377 */
+ 17'074'800, /* 17.0748_MHz_XTAL SWTPC 8212 */
17'350'000, /* 17.35_MHz_XTAL ITT Courier 1700 */
17'360'000, /* 17.36_MHz_XTAL OMTI Series 10 SCSI controller */
17'430'000, /* 17.43_MHz_XTAL Videx Videoterm */
@@ -259,6 +260,7 @@ const double XTAL::known_xtals[] = {
18'720'000, /* 18.72_MHz_XTAL Nokia MikroMikko 1 */
18'867'000, /* 18.867_MHz_XTAL Decision Data IS-482 */
18'869'600, /* 18.8696_MHz_XTAL Memorex 2178 */
+ 19'170'000, /* 19.17_MHz_XTAL Ericsson ISA8 Monochrome HR Graphics Board */
19'339'600, /* 19.3396_MHz_XTAL TeleVideo TVI-955 80-column display clock */
19'584'000, /* 19.584_MHz_XTAL ADM-42 */
19'600'000, /* 19.6_MHz_XTAL Universal Mr. Do - Model 8021 PCB */
@@ -331,9 +333,11 @@ const double XTAL::known_xtals[] = {
29'491'200, /* 29.4912_MHz_XTAL Xerox Alto-II system clock (tagged 29.4MHz in the schematics) */
30'000'000, /* 30_MHz_XTAL Impera Magic Card */
30'209'800, /* 30.2098_MHz_XTAL Philips CD-i NTSC (1920x NTSC line rate) */
+ 30'240'000, /* 30.24_MHz_XTAL Macintosh IIci RBV, 12- or 13-inch display */
30'476'180, /* 30.47618_MHz_XTAL Taito F3, JC, Under Fire */
30'800'000, /* 30.8_MHz_XTAL 15IE-00-013 */
31'279'500, /* 31.2795_MHz_XTAL Wyse WY-30+ */
+ 31'334'400, /* 31.3344_MHz_XTAL Macintosh II */
31'684'000, /* 31.684_MHz_XTAL TeleVideo TVI-955 132-column display clock */
31'948'800, /* 31.9488_MHz_XTAL NEC PC-88xx, PC-98xx */
32'000'000, /* 32_MHz_XTAL - */
@@ -395,6 +399,7 @@ const double XTAL::known_xtals[] = {
54'000'000, /* 54_MHz_XTAL Taito JC */
55'000'000, /* 55_MHz_XTAL Eolith Vega */
57'272'727, /* 57.272727_MHz_XTAL Psikyo SH2 with /2 divider (16x NTSC subcarrier)*/
+ 57'283'200, /* 57.2832_MHz_XTAL Macintosh IIci RBV, 15-inch portrait display */
58'000'000, /* 58_MHz_XTAL Magic Reel (Play System) */
59'292'000, /* 59.292_MHz_XTAL Data General D461 */
60'000'000, /* 60_MHz_XTAL ARM610 */
diff --git a/src/frontend/mame/ui/videoopt.h b/src/frontend/mame/ui/videoopt.h
index c26281ffd1b..6e07e14a029 100644
--- a/src/frontend/mame/ui/videoopt.h
+++ b/src/frontend/mame/ui/videoopt.h
@@ -34,7 +34,7 @@ public:
virtual ~menu_video_options() override;
private:
- enum {
+ enum : uint32_t {
VIDEO_ITEM_ROTATE = 0x80000000,
VIDEO_ITEM_ZOOM,
VIDEO_ITEM_VIEW
diff --git a/src/lib/netlist/analog/nld_mosfet.cpp b/src/lib/netlist/analog/nld_mosfet.cpp
index c66cec291f6..21157086353 100644
--- a/src/lib/netlist/analog/nld_mosfet.cpp
+++ b/src/lib/netlist/analog/nld_mosfet.cpp
@@ -476,7 +476,7 @@ namespace analog
const nl_double Vctrl = (is_forward ? Vgs : Vgd) - Vth;
- nl_double Ids, gm, gds, gmb;
+ nl_double Ids(0), gm(0), gds(0), gmb(0);
const nl_double absVds = std::abs(Vds);
if (Vctrl <= 0.0)
diff --git a/src/lib/netlist/build/makefile b/src/lib/netlist/build/makefile
index 9918c90c48a..189a486aff6 100644
--- a/src/lib/netlist/build/makefile
+++ b/src/lib/netlist/build/makefile
@@ -23,7 +23,9 @@ TIDY_FLAGSX += -cppcoreguidelines-avoid-magic-numbers,
TIDY_FLAGSX += -cppcoreguidelines-macro-usage,
TIDY_FLAGSX += -cppcoreguidelines-non-private-member-variables-in-classes,-misc-non-private-member-variables-in-classes,
TIDY_FLAGSX += -bugprone-macro-parentheses,-misc-macro-parentheses,
-TIDY_FLAGSX += -modernize-use-trailing-return-type
+TIDY_FLAGSX += -bugprone-too-small-loop-variable,
+TIDY_FLAGSX += -modernize-use-trailing-return-type,
+TIDY_FLAGSX += -cppcoreguidelines-pro-bounds-array-to-pointer-decay
space :=
space +=
@@ -57,7 +59,7 @@ LD = @g++
MD = @mkdir
RM = @rm
DOXYGEN = @doxygen
-CLANG_TIDY = clang-tidy-10
+CLANG_TIDY = clang-tidy-9
TARGETS = nltool nlwav
diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp
index d13f3271135..a1c9eb36bbf 100644
--- a/src/lib/netlist/devices/net_lib.cpp
+++ b/src/lib/netlist/devices/net_lib.cpp
@@ -66,7 +66,7 @@ namespace devices
LIB_ENTRY(2102A_dip)
LIB_ENTRY(2716)
LIB_ENTRY(2716_dip)
-#if !(USE_TRUTHTABLE_7448)
+#if !(NL_USE_TRUTHTABLE_7448)
LIB_ENTRY(7448)
LIB_ENTRY(7448_dip)
#endif
@@ -92,7 +92,7 @@ namespace devices
LIB_ENTRY(7493_dip)
LIB_ENTRY(7497)
LIB_ENTRY(7497_dip)
-#if (!USE_TRUTHTABLE_74107)
+#if (!NL_USE_TRUTHTABLE_74107)
LIB_ENTRY(74107)
LIB_ENTRY(74107_dip)
#endif
diff --git a/src/lib/netlist/devices/nld_4020.cpp b/src/lib/netlist/devices/nld_4020.cpp
index d0e35f502b7..97161071306 100644
--- a/src/lib/netlist/devices/nld_4020.cpp
+++ b/src/lib/netlist/devices/nld_4020.cpp
@@ -34,7 +34,7 @@ namespace netlist
NETLIB_UPDATEI();
public:
- void update_outputs(const unsigned cnt);
+ void update_outputs(const unsigned cnt) NL_NOEXCEPT;
logic_input_t m_IP;
object_array_t<logic_output_t, 14> m_Q;
diff --git a/src/lib/netlist/devices/nld_74107.cpp b/src/lib/netlist/devices/nld_74107.cpp
index c0978cb0128..53279f7df3a 100644
--- a/src/lib/netlist/devices/nld_74107.cpp
+++ b/src/lib/netlist/devices/nld_74107.cpp
@@ -145,7 +145,7 @@ namespace netlist
m_clk.activate_hl();
}
-#if (!USE_TRUTHTABLE_74107)
+#if (!NL_USE_TRUTHTABLE_74107)
NETLIB_DEVICE_IMPL(74107, "TTL_74107", "+CLK,+J,+K,+CLRQ,@VCC,@GND")
NETLIB_DEVICE_IMPL(74107_dip, "TTL_74107_DIP", "")
#endif
diff --git a/src/lib/netlist/devices/nld_74107.h b/src/lib/netlist/devices/nld_74107.h
index ae1adf33546..306ae8b1174 100644
--- a/src/lib/netlist/devices/nld_74107.h
+++ b/src/lib/netlist/devices/nld_74107.h
@@ -75,7 +75,7 @@
NET_CONNECT(name, K, cK) \
NET_CONNECT(name, CLRQ, cCLRQ)
-#if (!USE_TRUTHTABLE_74107)
+#if (!NL_USE_TRUTHTABLE_74107)
#define TTL_74107(name, cCLK, cJ, cK, cCLRQ) \
TTL_74107A(name, cCLK, cJ, cK, cCLRQ)
diff --git a/src/lib/netlist/devices/nld_74123.cpp b/src/lib/netlist/devices/nld_74123.cpp
index 889ba019f78..2e1e34949da 100644
--- a/src/lib/netlist/devices/nld_74123.cpp
+++ b/src/lib/netlist/devices/nld_74123.cpp
@@ -182,7 +182,7 @@ namespace netlist
NETLIB_UPDATE(74123)
{
- netlist_sig_t m_trig;
+ netlist_sig_t m_trig(0);
netlist_sig_t res = !m_CLRQ();
netlist_time t_AB_to_Q = NLTIME_FROM_NS(10);
netlist_time t_C_to_Q = NLTIME_FROM_NS(10);
diff --git a/src/lib/netlist/devices/nld_7448.cpp b/src/lib/netlist/devices/nld_7448.cpp
index 23daf983174..cc24e402cfa 100644
--- a/src/lib/netlist/devices/nld_7448.cpp
+++ b/src/lib/netlist/devices/nld_7448.cpp
@@ -15,7 +15,7 @@ namespace netlist
{
namespace devices
{
- #if !(USE_TRUTHTABLE_7448)
+ #if !(NL_USE_TRUTHTABLE_7448)
NETLIB_OBJECT(7448)
{
NETLIB_CONSTRUCTOR(7448)
@@ -36,7 +36,7 @@ namespace netlist
NETLIB_UPDATEI();
public:
- void update_outputs(unsigned v);
+ void update_outputs(unsigned v) NL_NOEXCEPT;
logic_input_t m_A;
logic_input_t m_B;
@@ -79,7 +79,7 @@ namespace netlist
#endif
- #if !(USE_TRUTHTABLE_7448)
+ #if !(NL_USE_TRUTHTABLE_7448)
#define BITS7(b6,b5,b4,b3,b2,b1,b0) ((b6)<<6) | ((b5)<<5) | ((b4)<<4) | ((b3)<<3) | ((b2)<<2) | ((b1)<<1) | ((b0)<<0)
diff --git a/src/lib/netlist/devices/nld_7448.h b/src/lib/netlist/devices/nld_7448.h
index 55ebfd8d6e4..8fd4e13c734 100644
--- a/src/lib/netlist/devices/nld_7448.h
+++ b/src/lib/netlist/devices/nld_7448.h
@@ -27,7 +27,7 @@
#include "netlist/nl_setup.h"
#ifndef NL_AUTO_DEVICES
-#if !(USE_TRUTHTABLE_7448)
+#if !(NL_USE_TRUTHTABLE_7448)
#define TTL_7448(name, cA0, cA1, cA2, cA3, cLTQ, cBIQ, cRBIQ) \
NET_REGISTER_DEV(TTL_7448, name) \
NET_CONNECT(name, VCC, VCC) \
diff --git a/src/lib/netlist/devices/nld_7490.cpp b/src/lib/netlist/devices/nld_7490.cpp
index 157563f5f0c..497547c3630 100644
--- a/src/lib/netlist/devices/nld_7490.cpp
+++ b/src/lib/netlist/devices/nld_7490.cpp
@@ -34,7 +34,7 @@ namespace netlist
NETLIB_UPDATEI();
NETLIB_RESETI();
- void update_outputs();
+ void update_outputs() NL_NOEXCEPT;
logic_input_t m_A;
logic_input_t m_B;
diff --git a/src/lib/netlist/devices/nld_7497.cpp b/src/lib/netlist/devices/nld_7497.cpp
index 2c54d63bf09..cfbab15157e 100644
--- a/src/lib/netlist/devices/nld_7497.cpp
+++ b/src/lib/netlist/devices/nld_7497.cpp
@@ -172,7 +172,7 @@ namespace netlist
};
- NETLIB_DEVICE_IMPL(7497, "TTL_7497", "+CLK,+STRBQ,+ENQ,+UNITYQ,+CLR,+B0,+B1,+B2,+B3,+B4,+B5, @VCC, @GND")
+ NETLIB_DEVICE_IMPL(7497, "TTL_7497", "+CLK,+STRBQ,+ENQ,+UNITYQ,+CLR,+B0,+B1,+B2,+B3,+B4,+B5,@VCC,@GND")
NETLIB_DEVICE_IMPL(7497_dip, "TTL_7497_DIP", "")
} //namespace devices
diff --git a/src/lib/netlist/devices/nld_74ls629.cpp b/src/lib/netlist/devices/nld_74ls629.cpp
index 20798f7da69..fd8f424fa32 100644
--- a/src/lib/netlist/devices/nld_74ls629.cpp
+++ b/src/lib/netlist/devices/nld_74ls629.cpp
@@ -175,8 +175,6 @@ namespace netlist
{
{
// recompute
- nl_double freq;
- nl_double v_freq_2, v_freq_3, v_freq_4;
nl_double v_freq = m_FC();
nl_double v_rng = m_RNG();
@@ -196,10 +194,10 @@ namespace netlist
/* Polyfunctional3D_model created by zunzun.com using sum of squared absolute error */
- v_freq_2 = v_freq * v_freq;
- v_freq_3 = v_freq_2 * v_freq;
- v_freq_4 = v_freq_3 * v_freq;
- freq = k1;
+ nl_double v_freq_2 = v_freq * v_freq;
+ nl_double v_freq_3 = v_freq_2 * v_freq;
+ nl_double v_freq_4 = v_freq_3 * v_freq;
+ nl_double freq = k1;
freq += k2 * v_freq;
freq += k3 * v_freq_2;
freq += k4 * v_freq_3;
diff --git a/src/lib/netlist/devices/nld_am2847.cpp b/src/lib/netlist/devices/nld_am2847.cpp
index d4a7cbe53b7..8153274e523 100644
--- a/src/lib/netlist/devices/nld_am2847.cpp
+++ b/src/lib/netlist/devices/nld_am2847.cpp
@@ -27,7 +27,7 @@ namespace netlist
NETLIB_UPDATEI();
public:
- void shift();
+ void shift() NL_NOEXCEPT;
logic_input_t m_RC;
logic_input_t m_IN;
diff --git a/src/lib/netlist/devices/nld_system.cpp b/src/lib/netlist/devices/nld_system.cpp
index 5a1868bb775..d75dd7d0fe9 100644
--- a/src/lib/netlist/devices/nld_system.cpp
+++ b/src/lib/netlist/devices/nld_system.cpp
@@ -111,7 +111,7 @@ namespace netlist
NETLIB_DEVICE_IMPL(clock, "CLOCK", "FREQ")
NETLIB_DEVICE_IMPL(varclock, "VARCLOCK", "FUNC")
NETLIB_DEVICE_IMPL(extclock, "EXTCLOCK", "FREQ,PATTERN")
- NETLIB_DEVICE_IMPL(res_sw, "RES_SWITCH", "+IN,+P1,+P2")
+ NETLIB_DEVICE_IMPL(res_sw, "RES_SWITCH", "+I,+1,+2")
NETLIB_DEVICE_IMPL(mainclock, "MAINCLOCK", "FREQ")
NETLIB_DEVICE_IMPL(gnd, "GND", "")
NETLIB_DEVICE_IMPL(netlistparams, "PARAMETER", "")
diff --git a/src/lib/netlist/devices/nlid_proxy.cpp b/src/lib/netlist/devices/nlid_proxy.cpp
index 2a9fccd1dc6..fe42f5e8582 100644
--- a/src/lib/netlist/devices/nlid_proxy.cpp
+++ b/src/lib/netlist/devices/nlid_proxy.cpp
@@ -126,7 +126,7 @@ namespace netlist
else
{
log().verbose("D/A Proxy: Found power terminals on device {1}", out_proxied->device().name());
- if (setup().is_validation())
+ if (setup().is_extended_validation())
{
// During validation, don't connect to terminals found
// This will cause terminals not connected to a rail net to
diff --git a/src/lib/netlist/devices/nlid_system.h b/src/lib/netlist/devices/nlid_system.h
index 8d9c4f86039..bed4c2bb8d2 100644
--- a/src/lib/netlist/devices/nlid_system.h
+++ b/src/lib/netlist/devices/nlid_system.h
@@ -438,7 +438,7 @@ namespace devices
nld_power_pins(device_t &owner, const pstring &sVCC = "VCC",
const pstring &sGND = "GND", bool force_analog_input = false)
{
- if (owner.setup().is_validation() || force_analog_input)
+ if (owner.setup().is_extended_validation() || force_analog_input)
{
m_GND = plib::make_unique<analog_input_t>(owner, sGND, NETLIB_DELEGATE(power_pins, noop));
m_VCC = plib::make_unique<analog_input_t>(owner, sVCC, NETLIB_DELEGATE(power_pins, noop));
diff --git a/src/lib/netlist/devices/nlid_truthtable.cpp b/src/lib/netlist/devices/nlid_truthtable.cpp
index c62c67da3c1..cd8e9e1ed1b 100644
--- a/src/lib/netlist/devices/nlid_truthtable.cpp
+++ b/src/lib/netlist/devices/nlid_truthtable.cpp
@@ -223,7 +223,7 @@ namespace netlist
: netlist_base_factory_truthtable_t(name, classname, def_param, sourcefile)
{ }
- pool_owned_ptr<device_t> Create(netlist_state_t &anetlist, const pstring &name) override
+ unique_pool_ptr<device_t> Create(netlist_state_t &anetlist, const pstring &name) override
{
using tt_type = nld_truthtable_t<m_NI, m_NO>;
truthtable_parser desc_s(m_NO, m_NI, &m_ttbl.m_initialized,
@@ -239,7 +239,7 @@ namespace netlist
if (m_family_desc == nullptr)
throw nl_exception("family description not found for {1}", m_family_name);
- return pool().make_poolptr<tt_type>(anetlist, name, m_family_desc, m_ttbl, m_desc);
+ return pool().make_unique<tt_type>(anetlist, name, m_family_desc, m_ttbl, m_desc);
}
private:
typename nld_truthtable_t<m_NI, m_NO>::truthtable_t m_ttbl;
diff --git a/src/lib/netlist/macro/nlm_ttl74xx.cpp b/src/lib/netlist/macro/nlm_ttl74xx.cpp
index fb175ae0c18..e30800abdf2 100644
--- a/src/lib/netlist/macro/nlm_ttl74xx.cpp
+++ b/src/lib/netlist/macro/nlm_ttl74xx.cpp
@@ -604,7 +604,7 @@ static NETLIST_START(TTL_7486_DIP)
)
NETLIST_END()
-#if (USE_TRUTHTABLE_74107)
+#if (NL_USE_TRUTHTABLE_74107)
#ifndef __PLIB_PREPROCESSOR__
#define TTL_74107_TT(name) \
NET_REGISTER_DEV(TTL_74107, name)
@@ -827,7 +827,7 @@ NETLIST_END()
#ifndef __PLIB_PREPROCESSOR__
#define DM9312_TT(name) \
- NET_REGISTER_DEV(DM9312_TT, name)
+ NET_REGISTER_DEV(DM9312, name)
#endif
static NETLIST_START(DM9312_DIP)
@@ -846,7 +846,7 @@ static NETLIST_START(DM9312_DIP)
)
NETLIST_END()
-#if (USE_TRUTHTABLE_7448)
+#if (NL_USE_TRUTHTABLE_7448)
/*
* DM7448: BCD to 7-Segment decoders/drivers
@@ -1115,7 +1115,7 @@ NETLIST_START(TTL74XX_lib)
TT_FAMILY("74XX")
TRUTHTABLE_END()
-#if (USE_TRUTHTABLE_7448)
+#if (NL_USE_TRUTHTABLE_7448)
TRUTHTABLE_START(TTL_7448, 7, 7, "+A,+B,+C,+D,+LTQ,+BIQ,+RBIQ,@VCC,@GND")
TT_HEAD(" LTQ,BIQ,RBIQ, A , B , C , D | a, b, c, d, e, f, g")
@@ -1207,7 +1207,7 @@ NETLIST_START(TTL74XX_lib)
TT_FAMILY("74XX")
TRUTHTABLE_END()
-#if (USE_TRUTHTABLE_74107)
+#if (NL_USE_TRUTHTABLE_74107)
/*
* +-----+-----+-----+---++---+-----+
* | CLRQ| CLK | J | K || Q | QQ |
@@ -1340,7 +1340,7 @@ NETLIST_START(TTL74XX_lib)
TT_FAMILY("74XX")
TRUTHTABLE_END()
- TRUTHTABLE_START(DM9312_TT, 12, 2, "+A,+B,+C,+G,+D0,+D1,+D2,+D3,+D4,+D5,+D6,+D7,@VCC,@GND")
+ TRUTHTABLE_START(DM9312, 12, 2, "+A,+B,+C,+G,+D0,+D1,+D2,+D3,+D4,+D5,+D6,+D7,@VCC,@GND")
TT_HEAD(" C, B, A, G,D0,D1,D2,D3,D4,D5,D6,D7| Y,YQ")
TT_LINE(" X, X, X, 1, X, X, X, X, X, X, X, X| 0, 1|33,19")
TT_LINE(" 0, 0, 0, 0, 0, X, X, X, X, X, X, X| 0, 1|33,28")
@@ -1379,11 +1379,11 @@ NETLIST_START(TTL74XX_lib)
LOCAL_LIB_ENTRY(TTL_7430_DIP)
LOCAL_LIB_ENTRY(TTL_7432_DIP)
LOCAL_LIB_ENTRY(TTL_7437_DIP)
-#if (USE_TRUTHTABLE_7448)
+#if (NL_USE_TRUTHTABLE_7448)
LOCAL_LIB_ENTRY(TTL_7448_DIP)
#endif
LOCAL_LIB_ENTRY(TTL_7486_DIP)
-#if (USE_TRUTHTABLE_74107)
+#if (NL_USE_TRUTHTABLE_74107)
LOCAL_LIB_ENTRY(TTL_74107_DIP)
#endif
LOCAL_LIB_ENTRY(TTL_74155_DIP)
diff --git a/src/lib/netlist/macro/nlm_ttl74xx.h b/src/lib/netlist/macro/nlm_ttl74xx.h
index 8afc465490d..e612ac2b601 100644
--- a/src/lib/netlist/macro/nlm_ttl74xx.h
+++ b/src/lib/netlist/macro/nlm_ttl74xx.h
@@ -209,7 +209,7 @@
NET_REGISTER_DEV(TTL_7437_DIP, name)
-#if (USE_TRUTHTABLE_7448)
+#if (NL_USE_TRUTHTABLE_7448)
#define TTL_7448(name, cA0, cA1, cA2, cA3, cLTQ, cBIQ, cRBIQ) \
NET_REGISTER_DEV(TTL_7448, name) \
NET_CONNECT(name, VCC, VCC) \
@@ -240,7 +240,7 @@
#define TTL_7486_DIP(name) \
NET_REGISTER_DEV(TTL_7486_DIP, name)
-#if (USE_TRUTHTABLE_74107)
+#if (NL_USE_TRUTHTABLE_74107)
#define TTL_74107(name, cCLK, cJ, cK, cCLRQ) \
NET_REGISTER_DEV(TTL_74107, name) \
NET_CONNECT(name, GND, GND) \
@@ -281,7 +281,7 @@
NET_REGISTER_DEV(TTL_74279_DIP, name)
#define DM9312(name, cA, cB, cC, cSTROBE, cD0, cD1, cD2, cD3, cD4, cD5, cD6, cD7) \
- NET_REGISTER_DEV(DM9312_TT, name) \
+ NET_REGISTER_DEV(DM9312, name) \
NET_CONNECT(name, VCC, VCC) \
NET_CONNECT(name, GND, GND) \
NET_CONNECT(name, A, cA) \
diff --git a/src/lib/netlist/nl_base.cpp b/src/lib/netlist/nl_base.cpp
index 1210c6a4d41..d69f61df2db 100644
--- a/src/lib/netlist/nl_base.cpp
+++ b/src/lib/netlist/nl_base.cpp
@@ -26,1015 +26,927 @@
namespace netlist
{
-// ----------------------------------------------------------------------------------------
-// logic_family_ttl_t
-// ----------------------------------------------------------------------------------------
+ // ----------------------------------------------------------------------------------------
+ // logic_family_ttl_t
+ // ----------------------------------------------------------------------------------------
-// NOLINTNEXTLINE(cppcoreguidelines-pro-type-member-init, modernize-use-equals-default)
-logic_family_desc_t::logic_family_desc_t()
-{
-}
+ // NOLINTNEXTLINE(cppcoreguidelines-pro-type-member-init, modernize-use-equals-default)
+ logic_family_desc_t::logic_family_desc_t()
+ {
+ }
-class logic_family_ttl_t : public logic_family_desc_t
-{
-public:
- logic_family_ttl_t() : logic_family_desc_t()
- {
- m_fixed_V = 5.0;
- m_low_thresh_PCNT = 0.8 / 5.0;
- m_high_thresh_PCNT = 2.0 / 5.0;
- // m_low_V - these depend on sinked/sourced current. Values should be suitable for typical applications.
- m_low_VO = 0.1;
- m_high_VO = 1.0; // 4.0
- m_R_low = 1.0;
- m_R_high = 130.0;
- }
- pool_owned_ptr<devices::nld_base_d_to_a_proxy> create_d_a_proxy(netlist_state_t &anetlist, const pstring &name, logic_output_t *proxied) const override;
- pool_owned_ptr<devices::nld_base_a_to_d_proxy> create_a_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *proxied) const override;
-};
-
-pool_owned_ptr<devices::nld_base_d_to_a_proxy> logic_family_ttl_t::create_d_a_proxy(netlist_state_t &anetlist, const pstring &name, logic_output_t *proxied) const
-{
- return pool().make_poolptr<devices::nld_d_to_a_proxy>(anetlist, name, proxied);
-}
-pool_owned_ptr<devices::nld_base_a_to_d_proxy> logic_family_ttl_t::create_a_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *proxied) const
-{
- return pool().make_poolptr<devices::nld_a_to_d_proxy>(anetlist, name, proxied);
-}
+ class logic_family_ttl_t : public logic_family_desc_t
+ {
+ public:
+ logic_family_ttl_t() : logic_family_desc_t()
+ {
+ m_fixed_V = 5.0;
+ m_low_thresh_PCNT = 0.8 / 5.0;
+ m_high_thresh_PCNT = 2.0 / 5.0;
+ // m_low_V - these depend on sinked/sourced current. Values should be suitable for typical applications.
+ m_low_VO = 0.1;
+ m_high_VO = 1.0; // 4.0
+ m_R_low = 1.0;
+ m_R_high = 130.0;
+ }
+ unique_pool_ptr<devices::nld_base_d_to_a_proxy> create_d_a_proxy(netlist_state_t &anetlist, const pstring &name, logic_output_t *proxied) const override;
+ unique_pool_ptr<devices::nld_base_a_to_d_proxy> create_a_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *proxied) const override;
+ };
-class logic_family_cd4xxx_t : public logic_family_desc_t
-{
-public:
- logic_family_cd4xxx_t() : logic_family_desc_t()
- {
- m_fixed_V = 0.0;
- m_low_thresh_PCNT = 1.5 / 5.0;
- m_high_thresh_PCNT = 3.5 / 5.0;
- // m_low_V - these depend on sinked/sourced current. Values should be suitable for typical applications.
- m_low_VO = 0.05;
- m_high_VO = 0.05; // 4.95
- m_R_low = 10.0;
- m_R_high = 10.0;
- }
- pool_owned_ptr<devices::nld_base_d_to_a_proxy> create_d_a_proxy(netlist_state_t &anetlist, const pstring &name, logic_output_t *proxied) const override;
- pool_owned_ptr<devices::nld_base_a_to_d_proxy> create_a_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *proxied) const override;
-};
-
-pool_owned_ptr<devices::nld_base_d_to_a_proxy> logic_family_cd4xxx_t::create_d_a_proxy(netlist_state_t &anetlist, const pstring &name, logic_output_t *proxied) const
-{
- return pool().make_poolptr<devices::nld_d_to_a_proxy>(anetlist, name, proxied);
-}
+ unique_pool_ptr<devices::nld_base_d_to_a_proxy> logic_family_ttl_t::create_d_a_proxy(netlist_state_t &anetlist, const pstring &name, logic_output_t *proxied) const
+ {
+ return pool().make_unique<devices::nld_d_to_a_proxy>(anetlist, name, proxied);
+ }
+ unique_pool_ptr<devices::nld_base_a_to_d_proxy> logic_family_ttl_t::create_a_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *proxied) const
+ {
+ return pool().make_unique<devices::nld_a_to_d_proxy>(anetlist, name, proxied);
+ }
-pool_owned_ptr<devices::nld_base_a_to_d_proxy> logic_family_cd4xxx_t::create_a_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *proxied) const
-{
- return pool().make_poolptr<devices::nld_a_to_d_proxy>(anetlist, name, proxied);
-}
+ class logic_family_cd4xxx_t : public logic_family_desc_t
+ {
+ public:
+ logic_family_cd4xxx_t() : logic_family_desc_t()
+ {
+ m_fixed_V = 0.0;
+ m_low_thresh_PCNT = 1.5 / 5.0;
+ m_high_thresh_PCNT = 3.5 / 5.0;
+ // m_low_V - these depend on sinked/sourced current. Values should be suitable for typical applications.
+ m_low_VO = 0.05;
+ m_high_VO = 0.05; // 4.95
+ m_R_low = 10.0;
+ m_R_high = 10.0;
+ }
+ unique_pool_ptr<devices::nld_base_d_to_a_proxy> create_d_a_proxy(netlist_state_t &anetlist, const pstring &name, logic_output_t *proxied) const override;
+ unique_pool_ptr<devices::nld_base_a_to_d_proxy> create_a_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *proxied) const override;
+ };
-const logic_family_desc_t *family_TTL()
-{
- static logic_family_ttl_t obj;
- return &obj;
-}
-const logic_family_desc_t *family_CD4XXX()
-{
- static logic_family_cd4xxx_t obj;
- return &obj;
-}
+ unique_pool_ptr<devices::nld_base_d_to_a_proxy> logic_family_cd4xxx_t::create_d_a_proxy(netlist_state_t &anetlist, const pstring &name, logic_output_t *proxied) const
+ {
+ return pool().make_unique<devices::nld_d_to_a_proxy>(anetlist, name, proxied);
+ }
+ unique_pool_ptr<devices::nld_base_a_to_d_proxy> logic_family_cd4xxx_t::create_a_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *proxied) const
+ {
+ return pool().make_unique<devices::nld_a_to_d_proxy>(anetlist, name, proxied);
+ }
-// ----------------------------------------------------------------------------------------
-// queue_t
-// ----------------------------------------------------------------------------------------
+ const logic_family_desc_t *family_TTL()
+ {
+ static logic_family_ttl_t obj;
+ return &obj;
+ }
+ const logic_family_desc_t *family_CD4XXX()
+ {
+ static logic_family_cd4xxx_t obj;
+ return &obj;
+ }
-detail::queue_t::queue_t(netlist_state_t &nl)
- : timed_queue<pqentry_t<net_t *, netlist_time>, false, true>(512)
- , netlist_ref(nl)
- , m_qsize(0)
- , m_times(512)
- , m_net_ids(512)
-{
-}
-void detail::queue_t::register_state(plib::state_manager_t &manager, const pstring &module)
-{
- //state().log().debug("register_state\n");
- manager.save_item(this, m_qsize, module + "." + "qsize");
- manager.save_item(this, &m_times[0], module + "." + "times", m_times.size());
- manager.save_item(this, &m_net_ids[0], module + "." + "names", m_net_ids.size());
-}
+ // ----------------------------------------------------------------------------------------
+ // queue_t
+ // ----------------------------------------------------------------------------------------
-void detail::queue_t::on_pre_save(plib::state_manager_t &manager)
-{
- plib::unused_var(manager);
- m_qsize = this->size();
- for (std::size_t i = 0; i < m_qsize; i++ )
+ detail::queue_t::queue_t(netlist_state_t &nl)
+ : timed_queue<plib::pqentry_t<net_t *, netlist_time>, false>(512)
+ , netlist_ref(nl)
+ , m_qsize(0)
+ , m_times(512)
+ , m_net_ids(512)
{
- m_times[i] = this->listptr()[i].m_exec_time.as_raw();
- m_net_ids[i] = state().find_net_id(this->listptr()[i].m_object);
}
-}
-
-void detail::queue_t::on_post_load(plib::state_manager_t &manager)
-{
- plib::unused_var(manager);
- this->clear();
- for (std::size_t i = 0; i < m_qsize; i++ )
+ void detail::queue_t::register_state(plib::state_manager_t &manager, const pstring &module)
{
- detail::net_t *n = state().nets()[m_net_ids[i]].get();
- this->push(queue_t::entry_t(netlist_time::from_raw(m_times[i]),n));
+ //state().log().debug("register_state\n");
+ manager.save_item(this, m_qsize, module + "." + "qsize");
+ manager.save_item(this, &m_times[0], module + "." + "times", m_times.size());
+ manager.save_item(this, &m_net_ids[0], module + "." + "names", m_net_ids.size());
}
-}
-// ----------------------------------------------------------------------------------------
-// netlist_ref_t
-// ----------------------------------------------------------------------------------------
+ void detail::queue_t::on_pre_save(plib::state_manager_t &manager)
+ {
+ plib::unused_var(manager);
+ m_qsize = this->size();
+ for (std::size_t i = 0; i < m_qsize; i++ )
+ {
+ m_times[i] = this->listptr()[i].m_exec_time.as_raw();
+ m_net_ids[i] = state().find_net_id(this->listptr()[i].m_object);
+ }
+ }
-detail::netlist_ref::netlist_ref(netlist_state_t &nl)
-: m_netlist(nl.exec()) { }
-// ----------------------------------------------------------------------------------------
-// device_object_t
-// ----------------------------------------------------------------------------------------
+ void detail::queue_t::on_post_load(plib::state_manager_t &manager)
+ {
+ plib::unused_var(manager);
+ this->clear();
+ for (std::size_t i = 0; i < m_qsize; i++ )
+ {
+ detail::net_t *n = state().nets()[m_net_ids[i]].get();
+ this->push<false>(queue_t::entry_t(netlist_time::from_raw(m_times[i]),n));
+ }
+ }
-detail::device_object_t::device_object_t(core_device_t &dev, const pstring &aname)
-: object_t(aname)
-, m_device(dev)
-{
-}
+ // ----------------------------------------------------------------------------------------
+ // netlist_ref_t
+ // ----------------------------------------------------------------------------------------
-detail::terminal_type detail::core_terminal_t::type() const
-{
- if (dynamic_cast<const terminal_t *>(this) != nullptr)
- return terminal_type::TERMINAL;
- else if (dynamic_cast<const logic_input_t *>(this) != nullptr
- || dynamic_cast<const analog_input_t *>(this) != nullptr)
- return terminal_type::INPUT;
- else if (dynamic_cast<const logic_output_t *>(this) != nullptr
- || dynamic_cast<const analog_output_t *>(this) != nullptr)
- return terminal_type::OUTPUT;
- else
- {
- state().log().fatal(MF_UNKNOWN_TYPE_FOR_OBJECT(name()));
- return terminal_type::TERMINAL; // please compiler
- }
-}
-
-// ----------------------------------------------------------------------------------------
-// netlist_t
-// ----------------------------------------------------------------------------------------
-
-netlist_t::netlist_t(const pstring &aname, plib::unique_ptr<callbacks_t> callbacks)
- : m_state(plib::make_unique<netlist_state_t>(aname, *this, std::move(callbacks)))
- , m_solver(nullptr)
- , m_time(netlist_time::zero())
- , m_mainclock(nullptr)
- , m_queue(*m_state)
- , m_use_stats(false)
-{
- devices::initialize_factory(nlstate().setup().factory());
- NETLIST_NAME(base)(nlstate().setup());
- run_state_manager().save_item(this, static_cast<plib::state_manager_t::callback_t &>(m_queue), "m_queue");
- run_state_manager().save_item(this, m_time, "m_time");
-}
-
-// ----------------------------------------------------------------------------------------
-// netlist_t
-// ----------------------------------------------------------------------------------------
-
-netlist_state_t::netlist_state_t(const pstring &aname,
- netlist_t & anetlist,
- plib::unique_ptr<callbacks_t> &&callbacks)
-: m_name(aname)
-, m_netlist(anetlist)
-, m_state()
-, m_callbacks(std::move(callbacks)) // Order is important here
-, m_log(*m_callbacks)
-, m_setup(plib::make_unique<setup_t>(*this))
-{
- pstring libpath = plib::util::environment("NL_BOOSTLIB", plib::util::buildpath({".", "nlboost.so"}));
- m_lib = plib::make_unique<plib::dynlib>(libpath);
-}
+ detail::netlist_ref::netlist_ref(netlist_state_t &nl)
+ : m_netlist(nl.exec()) { }
+ // ----------------------------------------------------------------------------------------
+ // device_object_t
+ // ----------------------------------------------------------------------------------------
-void netlist_t::stop()
-{
- log().debug("Printing statistics ...\n");
- print_stats();
- log().debug("Stopping solver device ...\n");
- if (m_solver != nullptr)
- m_solver->stop();
-}
-
-detail::net_t *netlist_state_t::find_net(const pstring &name) const
-{
- for (auto & net : m_nets)
- if (net->name() == name)
- return net.get();
+ detail::device_object_t::device_object_t(core_device_t &dev, const pstring &aname)
+ : object_t(aname)
+ , m_device(dev)
+ {
+ }
- return nullptr;
-}
+ detail::terminal_type detail::core_terminal_t::type() const
+ {
+ if (dynamic_cast<const terminal_t *>(this) != nullptr)
+ return terminal_type::TERMINAL;
+ else if (dynamic_cast<const logic_input_t *>(this) != nullptr
+ || dynamic_cast<const analog_input_t *>(this) != nullptr)
+ return terminal_type::INPUT;
+ else if (dynamic_cast<const logic_output_t *>(this) != nullptr
+ || dynamic_cast<const analog_output_t *>(this) != nullptr)
+ return terminal_type::OUTPUT;
+ else
+ {
+ state().log().fatal(MF_UNKNOWN_TYPE_FOR_OBJECT(name()));
+ return terminal_type::TERMINAL; // please compiler
+ }
+ }
-std::size_t netlist_state_t::find_net_id(const detail::net_t *net) const
-{
- for (std::size_t i = 0; i < m_nets.size(); i++)
- if (m_nets[i].get() == net)
- return i;
- return std::numeric_limits<std::size_t>::max();
-}
+ // ----------------------------------------------------------------------------------------
+ // netlist_t
+ // ----------------------------------------------------------------------------------------
+
+ netlist_t::netlist_t(const pstring &aname, plib::unique_ptr<callbacks_t> callbacks)
+ : m_state(plib::make_unique<netlist_state_t>(aname, *this, std::move(callbacks)))
+ , m_solver(nullptr)
+ , m_time(netlist_time::zero())
+ , m_mainclock(nullptr)
+ , m_queue(*m_state)
+ , m_use_stats(false)
+ {
+ devices::initialize_factory(nlstate().setup().factory());
+ NETLIST_NAME(base)(nlstate().setup());
+ run_state_manager().save_item(this, static_cast<plib::state_manager_t::callback_t &>(m_queue), "m_queue");
+ run_state_manager().save_item(this, m_time, "m_time");
+ }
+ // ----------------------------------------------------------------------------------------
+ // netlist_t
+ // ----------------------------------------------------------------------------------------
+
+ netlist_state_t::netlist_state_t(const pstring &aname,
+ netlist_t & anetlist,
+ plib::unique_ptr<callbacks_t> &&callbacks)
+ : m_name(aname)
+ , m_netlist(anetlist)
+ , m_state()
+ , m_callbacks(std::move(callbacks)) // Order is important here
+ , m_log(*m_callbacks)
+ , m_setup(plib::make_unique<setup_t>(*this))
+ {
+ pstring libpath = plib::util::environment("NL_BOOSTLIB", plib::util::buildpath({".", "nlboost.so"}));
+ m_lib = plib::make_unique<plib::dynlib>(libpath);
+ }
-void netlist_state_t::rebuild_lists()
-{
- for (auto & net : m_nets)
- net->rebuild_list();
-}
+ void netlist_t::stop()
+ {
+ log().debug("Printing statistics ...\n");
+ print_stats();
+ log().debug("Stopping solver device ...\n");
+ if (m_solver != nullptr)
+ m_solver->stop();
+ }
+ detail::net_t *netlist_state_t::find_net(const pstring &name) const
+ {
+ for (auto & net : m_nets)
+ if (net->name() == name)
+ return net.get();
-void netlist_state_t::compile_defines(std::vector<std::pair<pstring, pstring>> &defs)
-{
-//#define ENTRY(x) { #x, PSTRINGIFY(x) }
-#define ENTRY(x) std::pair<pstring, pstring>(#x, PSTRINGIFY(x))
- defs.emplace_back(ENTRY(PHAS_RDTSCP));
- defs.emplace_back(ENTRY(PUSE_ACCURATE_STATS));
- defs.emplace_back(ENTRY(PHAS_INT128));
- defs.emplace_back(ENTRY(USE_ALIGNED_OPTIMIZATIONS));
- defs.emplace_back(ENTRY(NVCCBUILD));
- defs.emplace_back(ENTRY(USE_MEMPOOL));
- defs.emplace_back(ENTRY(USE_QUEUE_STATS));
- defs.emplace_back(ENTRY(USE_COPY_INSTEAD_OF_REFERENCE));
- defs.emplace_back(ENTRY(USE_TRUTHTABLE_7448));
- defs.emplace_back(ENTRY(NL_DEBUG));
- defs.emplace_back(ENTRY(HAS_OPENMP));
- defs.emplace_back(ENTRY(USE_OPENMP));
-
- defs.emplace_back(ENTRY(PPMF_TYPE));
- defs.emplace_back(ENTRY(PHAS_PMF_INTERNAL));
-
-#undef ENTRY
-}
-
-void netlist_t::reset()
-{
- log().debug("Searching for mainclock\n");
- m_mainclock = m_state->get_single_device<devices::NETLIB_NAME(mainclock)>("mainclock");
+ return nullptr;
+ }
- log().debug("Searching for solver\n");
- m_solver = m_state->get_single_device<devices::NETLIB_NAME(solver)>("solver");
+ std::size_t netlist_state_t::find_net_id(const detail::net_t *net) const
+ {
+ for (std::size_t i = 0; i < m_nets.size(); i++)
+ if (m_nets[i].get() == net)
+ return i;
+ return std::numeric_limits<std::size_t>::max();
+ }
- m_time = netlist_time::zero();
- m_queue.clear();
- if (m_mainclock != nullptr)
- m_mainclock->m_Q.net().set_next_scheduled_time(netlist_time::zero());
- //if (m_solver != nullptr)
- // m_solver->reset();
- m_state->reset();
-}
-void netlist_state_t::reset()
-{
- //FIXME: never used ???
- std::unordered_map<core_device_t *, bool> m;
-
- // Reset all nets once !
- log().verbose("Call reset on all nets:");
- for (auto & n : nets())
- n->reset();
-
- // Reset all devices once !
- log().verbose("Call reset on all devices:");
- for (auto & dev : m_devices)
- dev.second->reset();
-
- // Make sure everything depending on parameters is set
- // Currently analog input and logic input also
- // push their outputs to queue.
-
- log().verbose("Call update_param on all devices:");
- for (auto & dev : m_devices)
- dev.second->update_param();
-
- // Step all devices once !
- /*
- * INFO: The order here affects power up of e.g. breakout. However, such
- * variations are explicitly stated in the breakout manual.
- */
+ void netlist_state_t::rebuild_lists()
+ {
+ for (auto & net : m_nets)
+ net->rebuild_list();
+ }
- auto *netlist_params = get_single_device<devices::NETLIB_NAME(netlistparams)>("parameter");
- switch (netlist_params->m_startup_strategy())
+ void netlist_state_t::compile_defines(std::vector<std::pair<pstring, pstring>> &defs)
{
- case 0:
- {
- std::vector<core_device_t *> d;
- std::vector<nldelegate *> t;
- log().verbose("Using default startup strategy");
- for (auto &n : m_nets)
- for (auto & term : n->core_terms())
- if (term->m_delegate.has_object())
- {
- if (!plib::container::contains(t, &term->m_delegate))
- {
- t.push_back(&term->m_delegate);
- term->m_delegate();
- }
- auto *dev = reinterpret_cast<core_device_t *>(term->m_delegate.object());
- if (!plib::container::contains(d, dev))
- d.push_back(dev);
- }
- log().verbose("Devices not yet updated:");
- for (auto &dev : m_devices)
- if (!plib::container::contains(d, dev.second.get()))
- {
- log().verbose("\t ...{1}", dev.second->name());
- dev.second->update();
- }
- }
- break;
- case 1: // brute force backward
- {
- log().verbose("Using brute force backward startup strategy");
+ #define ENTRY(x) if (pstring(#x) != PSTRINGIFY(x)) defs.emplace_back(std::pair<pstring, pstring>(#x, PSTRINGIFY(x)));
+ ENTRY(PHAS_RDTSCP)
+ ENTRY(PUSE_ACCURATE_STATS)
+ ENTRY(PHAS_INT128)
+ ENTRY(PUSE_ALIGNED_OPTIMIZATIONS)
+ ENTRY(PHAS_OPENMP)
+ ENTRY(PUSE_OPENMP)
+ ENTRY(PPMF_TYPE)
+ ENTRY(PHAS_PMF_INTERNAL)
+ ENTRY(NL_USE_MEMPOOL)
+ ENTRY(NL_USE_QUEUE_STATS)
+ ENTRY(NL_USE_COPY_INSTEAD_OF_REFERENCE)
+ ENTRY(NL_USE_TRUTHTABLE_7448)
+ ENTRY(NL_AUTO_DEVICES)
+ ENTRY(NL_DEBUG)
+ ENTRY(NVCCBUILD)
+
+ ENTRY(__cplusplus)
+ ENTRY(__VERSION__)
+
+ ENTRY(__GNUC__)
+ ENTRY(__GNUC_MINOR__)
+ ENTRY(__GNUC_PATCHLEVEL__)
+
+ ENTRY(__clang__)
+ ENTRY(__clang_major__)
+ ENTRY(__clang_minor__)
+ ENTRY(__clang_patchlevel__)
+ ENTRY(__clang_version__)
+
+ ENTRY(OPENMP )
+ ENTRY(_OPENMP )
+
+ ENTRY(__x86_64__ )
+ ENTRY(__i386__)
+ ENTRY(_WIN32)
+ ENTRY(_MSC_VER)
+ ENTRY(__APPLE__)
+ ENTRY(__unix__)
+ ENTRY(__linux__)
+
+ #undef ENTRY
+ }
- for (auto &n : m_nets) // only used if USE_COPY_INSTEAD_OF_REFERENCE == 1
- n->update_inputs();
+ void netlist_t::reset()
+ {
+ log().debug("Searching for mainclock\n");
+ m_mainclock = m_state->get_single_device<devices::NETLIB_NAME(mainclock)>("mainclock");
- std::size_t i = m_devices.size();
- while (i>0)
- m_devices[--i].second->update();
+ log().debug("Searching for solver\n");
+ m_solver = m_state->get_single_device<devices::NETLIB_NAME(solver)>("solver");
- for (auto &n : m_nets) // only used if USE_COPY_INSTEAD_OF_REFERENCE == 1
- n->update_inputs();
+ m_time = netlist_time::zero();
+ m_queue.clear();
+ if (m_mainclock != nullptr)
+ m_mainclock->m_Q.net().set_next_scheduled_time(netlist_time::zero());
+ //if (m_solver != nullptr)
+ // m_solver->reset();
- }
- break;
- case 2: // brute force forward
- {
- log().verbose("Using brute force forward startup strategy");
- for (auto &d : m_devices)
- d.second->update();
- }
- break;
+ m_state->reset();
}
-#if 1
- /* the above may screw up m_active and the list */
- rebuild_lists();
-#endif
-}
-
-void netlist_t::process_queue(const netlist_time delta) NL_NOEXCEPT
-{
- if (!m_use_stats)
- process_queue_stats<false>(delta);
- else
+ void netlist_state_t::reset()
{
- auto sm_guard(m_stat_mainloop.guard());
- process_queue_stats<true>(delta);
- }
-}
+ //FIXME: never used ???
+ std::unordered_map<core_device_t *, bool> m;
-template <bool KEEP_STATS>
-void netlist_t::process_queue_stats(const netlist_time delta) NL_NOEXCEPT
-{
- netlist_time stop(m_time + delta);
+ // Reset all nets once !
+ log().verbose("Call reset on all nets:");
+ for (auto & n : nets())
+ n->reset();
- qpush(detail::queue_t::entry_t(stop, nullptr));
+ // Reset all devices once !
+ log().verbose("Call reset on all devices:");
+ for (auto & dev : m_devices)
+ dev.second->reset();
- if (m_mainclock == nullptr)
- {
- detail::queue_t::entry_t e(m_queue.pop());
- m_time = e.m_exec_time;
- while (e.m_object != nullptr)
- {
- e.m_object->template update_devs<KEEP_STATS>();
- if (KEEP_STATS) m_perf_out_processed.inc();
- e = m_queue.pop();
- m_time = e.m_exec_time;
- }
- }
- else
- {
- logic_net_t &mc_net(m_mainclock->m_Q.net());
- const netlist_time inc(m_mainclock->m_inc);
- netlist_time mc_time(mc_net.next_scheduled_time());
+ // Make sure everything depending on parameters is set
+ // Currently analog input and logic input also
+ // push their outputs to queue.
+
+ log().verbose("Call update_param on all devices:");
+ for (auto & dev : m_devices)
+ dev.second->update_param();
+
+ // Step all devices once !
+ /*
+ * INFO: The order here affects power up of e.g. breakout. However, such
+ * variations are explicitly stated in the breakout manual.
+ */
- do
+ auto *netlist_params = get_single_device<devices::NETLIB_NAME(netlistparams)>("parameter");
+
+ switch (netlist_params->m_startup_strategy())
{
- while (m_queue.top().m_exec_time > mc_time)
+ case 0:
{
- m_time = mc_time;
- mc_net.toggle_new_Q();
- mc_net.update_devs<KEEP_STATS>();
- mc_time += inc;
+ std::vector<core_device_t *> d;
+ std::vector<nldelegate *> t;
+ log().verbose("Using default startup strategy");
+ for (auto &n : m_nets)
+ for (auto & term : n->core_terms())
+ if (term->m_delegate.has_object())
+ {
+ if (!plib::container::contains(t, &term->m_delegate))
+ {
+ t.push_back(&term->m_delegate);
+ term->m_delegate();
+ }
+ auto *dev = reinterpret_cast<core_device_t *>(term->m_delegate.object());
+ if (!plib::container::contains(d, dev))
+ d.push_back(dev);
+ }
+ log().verbose("Devices not yet updated:");
+ for (auto &dev : m_devices)
+ if (!plib::container::contains(d, dev.second.get()))
+ {
+ log().verbose("\t ...{1}", dev.second->name());
+ dev.second->update();
+ }
}
+ break;
+ case 1: // brute force backward
+ {
+ log().verbose("Using brute force backward startup strategy");
- detail::queue_t::entry_t e(m_queue.pop());
- m_time = e.m_exec_time;
- if (e.m_object != nullptr)
+ for (auto &n : m_nets) // only used if USE_COPY_INSTEAD_OF_REFERENCE == 1
+ n->update_inputs();
+
+ std::size_t i = m_devices.size();
+ while (i>0)
+ m_devices[--i].second->update();
+
+ for (auto &n : m_nets) // only used if USE_COPY_INSTEAD_OF_REFERENCE == 1
+ n->update_inputs();
+
+ }
+ break;
+ case 2: // brute force forward
{
- e.m_object->template update_devs<KEEP_STATS>();
- if (KEEP_STATS) m_perf_out_processed.inc();
+ log().verbose("Using brute force forward startup strategy");
+ for (auto &d : m_devices)
+ d.second->update();
}
- else
- break;
- } while (true); //while (e.m_object != nullptr);
- mc_net.set_next_scheduled_time(mc_time);
+ break;
+ }
+
+ #if 1
+ /* the above may screw up m_active and the list */
+ rebuild_lists();
+ #endif
}
-}
-void netlist_t::print_stats() const
-{
- if (m_use_stats)
+
+ void netlist_t::print_stats() const NL_NOEXCEPT
{
- std::vector<size_t> index;
- for (size_t i=0; i < m_state->m_devices.size(); i++)
- index.push_back(i);
+ if (m_use_stats)
+ {
+ std::vector<size_t> index;
+ for (size_t i=0; i < m_state->m_devices.size(); i++)
+ index.push_back(i);
- std::sort(index.begin(), index.end(),
- [&](size_t i1, size_t i2) { return m_state->m_devices[i1].second->m_stats->m_stat_total_time.total() < m_state->m_devices[i2].second->m_stats->m_stat_total_time.total(); });
+ std::sort(index.begin(), index.end(),
+ [&](size_t i1, size_t i2) { return m_state->m_devices[i1].second->m_stats->m_stat_total_time.total() < m_state->m_devices[i2].second->m_stats->m_stat_total_time.total(); });
- nperftime_t<true>::type total_time(0);
- nperftime_t<true>::ctype total_count(0);
+ plib::pperftime_t<true>::type total_time(0);
+ plib::pperftime_t<true>::ctype total_count(0);
- for (auto & j : index)
- {
- auto entry = m_state->m_devices[j].second.get();
- auto stats = m_state->m_devices[j].second.get()->m_stats.get();
- log().verbose("Device {1:20} : {2:12} {3:12} {4:15} {5:12}", entry->name(),
- stats->m_stat_call_count(), stats->m_stat_total_time.count(),
- stats->m_stat_total_time.total(), stats->m_stat_inc_active());
- total_time += stats->m_stat_total_time.total();
- total_count += stats->m_stat_total_time.count();
- }
+ for (auto & j : index)
+ {
+ auto entry = m_state->m_devices[j].second.get();
+ auto stats = m_state->m_devices[j].second.get()->m_stats.get();
+ log().verbose("Device {1:20} : {2:12} {3:12} {4:15} {5:12}", entry->name(),
+ stats->m_stat_call_count(), stats->m_stat_total_time.count(),
+ stats->m_stat_total_time.total(), stats->m_stat_inc_active());
+ total_time += stats->m_stat_total_time.total();
+ total_count += stats->m_stat_total_time.count();
+ }
- log().verbose("Total calls : {1:12} {2:12} {3:12}", total_count,
- total_time, total_time / static_cast<decltype(total_time)>(total_count ? total_count : 1));
+ log().verbose("Total calls : {1:12} {2:12} {3:12}", total_count,
+ total_time, total_time / static_cast<decltype(total_time)>(total_count ? total_count : 1));
- log().verbose("Total loop {1:15}", m_stat_mainloop());
- log().verbose("Total time {1:15}", total_time);
+ log().verbose("Total loop {1:15}", m_stat_mainloop());
+ log().verbose("Total time {1:15}", total_time);
- // FIXME: clang complains about unreachable code without
- const auto clang_workaround_unreachable_code = USE_QUEUE_STATS;
- if (clang_workaround_unreachable_code)
- {
- /* Only one serialization should be counted in total time */
- /* But two are contained in m_stat_mainloop */
- nperftime_t<true> overhead;
- nperftime_t<true> test;
+ // FIXME: clang complains about unreachable code without
+ const auto clang_workaround_unreachable_code = NL_USE_QUEUE_STATS;
+ if (clang_workaround_unreachable_code)
{
- auto overhead_guard(overhead.guard());
- for (int j=0; j<100000;j++)
+ /* Only one serialization should be counted in total time */
+ /* But two are contained in m_stat_mainloop */
+ plib::pperftime_t<true> overhead;
+ plib::pperftime_t<true> test;
{
- auto test_guard(test.guard());
+ auto overhead_guard(overhead.guard());
+ for (int j=0; j<100000;j++)
+ {
+ auto test_guard(test.guard());
+ }
}
- }
- nperftime_t<true>::type total_overhead = overhead()
- * static_cast<nperftime_t<true>::type>(total_count)
- / static_cast<nperftime_t<true>::type>(200000);
-
- log().verbose("Queue Pushes {1:15}", m_queue.m_prof_call());
- log().verbose("Queue Moves {1:15}", m_queue.m_prof_sortmove());
- log().verbose("Queue Removes {1:15}", m_queue.m_prof_remove());
- log().verbose("Queue Retimes {1:15}", m_queue.m_prof_retime());
- log().verbose("");
-
- log().verbose("Take the next lines with a grain of salt. They depend on the measurement implementation.");
- log().verbose("Total overhead {1:15}", total_overhead);
- nperftime_t<true>::type overhead_per_pop = (m_stat_mainloop()-2*total_overhead - (total_time - total_overhead))
- / static_cast<nperftime_t<true>::type>(m_queue.m_prof_call());
- log().verbose("Overhead per pop {1:11}", overhead_per_pop );
- log().verbose("");
- }
+ plib::pperftime_t<true>::type total_overhead = overhead()
+ * static_cast<plib::pperftime_t<true>::type>(total_count)
+ / static_cast<plib::pperftime_t<true>::type>(200000);
+
+ log().verbose("Queue Pushes {1:15}", m_queue.m_prof_call());
+ log().verbose("Queue Moves {1:15}", m_queue.m_prof_sortmove());
+ log().verbose("Queue Removes {1:15}", m_queue.m_prof_remove());
+ log().verbose("Queue Retimes {1:15}", m_queue.m_prof_retime());
+ log().verbose("");
+
+ log().verbose("Take the next lines with a grain of salt. They depend on the measurement implementation.");
+ log().verbose("Total overhead {1:15}", total_overhead);
+ plib::pperftime_t<true>::type overhead_per_pop = (m_stat_mainloop()-2*total_overhead - (total_time - total_overhead))
+ / static_cast<plib::pperftime_t<true>::type>(m_queue.m_prof_call());
+ log().verbose("Overhead per pop {1:11}", overhead_per_pop );
+ log().verbose("");
+ }
- auto trigger = total_count * 200 / 1000000; // 200 ppm
- for (auto &entry : m_state->m_devices)
- {
- auto ep = entry.second.get();
- auto stats = ep->m_stats.get();
- // Factor of 3 offers best performace increase
- if (stats->m_stat_inc_active() > 3 * stats->m_stat_total_time.count()
- && stats->m_stat_inc_active() > trigger)
- log().verbose("HINT({}, NO_DEACTIVATE) // {} {} {}", ep->name(),
- static_cast<double>(stats->m_stat_inc_active()) / static_cast<double>(stats->m_stat_total_time.count()),
- stats->m_stat_inc_active(), stats->m_stat_total_time.count());
+ auto trigger = total_count * 200 / 1000000; // 200 ppm
+ for (auto &entry : m_state->m_devices)
+ {
+ auto ep = entry.second.get();
+ auto stats = ep->m_stats.get();
+ // Factor of 3 offers best performace increase
+ if (stats->m_stat_inc_active() > 3 * stats->m_stat_total_time.count()
+ && stats->m_stat_inc_active() > trigger)
+ log().verbose("HINT({}, NO_DEACTIVATE) // {} {} {}", ep->name(),
+ static_cast<double>(stats->m_stat_inc_active()) / static_cast<double>(stats->m_stat_total_time.count()),
+ stats->m_stat_inc_active(), stats->m_stat_total_time.count());
+ }
}
}
-}
-core_device_t *netlist_state_t::get_single_device(const pstring &classname, bool (*cc)(core_device_t *)) const
-{
- core_device_t *ret = nullptr;
- for (auto &d : m_devices)
+ core_device_t *netlist_state_t::get_single_device(const pstring &classname, bool (*cc)(core_device_t *)) const
{
- if (cc(d.second.get()))
+ core_device_t *ret = nullptr;
+ for (auto &d : m_devices)
{
- if (ret != nullptr)
- m_log.fatal(MF_MORE_THAN_ONE_1_DEVICE_FOUND(classname));
- else
- ret = d.second.get();
+ if (cc(d.second.get()))
+ {
+ if (ret != nullptr)
+ m_log.fatal(MF_MORE_THAN_ONE_1_DEVICE_FOUND(classname));
+ else
+ ret = d.second.get();
+ }
}
+ return ret;
}
- return ret;
-}
-// ----------------------------------------------------------------------------------------
-// core_device_t
-// ----------------------------------------------------------------------------------------
+ // ----------------------------------------------------------------------------------------
+ // core_device_t
+ // ----------------------------------------------------------------------------------------
-core_device_t::core_device_t(netlist_state_t &owner, const pstring &name)
- : object_t(name)
- , logic_family_t()
- , netlist_ref(owner)
- , m_hint_deactivate(false)
- , m_active_outputs(*this, "m_active_outputs", 1)
-{
- if (logic_family() == nullptr)
- set_logic_family(family_TTL());
- if (exec().stats_enabled())
- m_stats = pool().make_unique<stats_t>();
-}
-
-core_device_t::core_device_t(core_device_t &owner, const pstring &name)
- : object_t(owner.name() + "." + name)
- , logic_family_t()
- , netlist_ref(owner.state())
- , m_hint_deactivate(false)
- , m_active_outputs(*this, "m_active_outputs", 1)
-{
- set_logic_family(owner.logic_family());
- if (logic_family() == nullptr)
- set_logic_family(family_TTL());
- state().add_dev(this->name(), pool_owned_ptr<core_device_t>(this, false));
- if (exec().stats_enabled())
- m_stats = pool().make_unique<stats_t>();
-}
-
-void core_device_t::set_default_delegate(detail::core_terminal_t &term)
-{
- if (!term.m_delegate.is_set())
- term.m_delegate.set(&core_device_t::update, this);
-}
-
-log_type & core_device_t::log()
-{
- return state().log();
-}
-
-// ----------------------------------------------------------------------------------------
-// device_t
-// ----------------------------------------------------------------------------------------
+ core_device_t::core_device_t(netlist_state_t &owner, const pstring &name)
+ : object_t(name)
+ , logic_family_t()
+ , netlist_ref(owner)
+ , m_hint_deactivate(false)
+ , m_active_outputs(*this, "m_active_outputs", 1)
+ {
+ if (logic_family() == nullptr)
+ set_logic_family(family_TTL());
+ if (exec().stats_enabled())
+ m_stats = pool().make_unique<stats_t>();
+ }
-device_t::device_t(netlist_state_t &owner, const pstring &name)
-: core_device_t(owner, name)
-{
-}
+ core_device_t::core_device_t(core_device_t &owner, const pstring &name)
+ : object_t(owner.name() + "." + name)
+ , logic_family_t()
+ , netlist_ref(owner.state())
+ , m_hint_deactivate(false)
+ , m_active_outputs(*this, "m_active_outputs", 1)
+ {
+ set_logic_family(owner.logic_family());
+ if (logic_family() == nullptr)
+ set_logic_family(family_TTL());
+ state().register_device(this->name(), owned_pool_ptr<core_device_t>(this, false));
+ if (exec().stats_enabled())
+ m_stats = pool().make_unique<stats_t>();
+ }
-device_t::device_t(core_device_t &owner, const pstring &name)
-: core_device_t(owner, name)
-{
-}
+ void core_device_t::set_default_delegate(detail::core_terminal_t &term)
+ {
+ if (!term.m_delegate.is_set())
+ term.m_delegate.set(&core_device_t::update, this);
+ }
-setup_t &device_t::setup()
-{
- return state().setup();
-}
+ log_type & core_device_t::log()
+ {
+ return state().log();
+ }
-const setup_t &device_t::setup() const
-{
- return state().setup();
-}
+ // ----------------------------------------------------------------------------------------
+ // device_t
+ // ----------------------------------------------------------------------------------------
-void device_t::register_subalias(const pstring &name, detail::core_terminal_t &term)
-{
- pstring alias = this->name() + "." + name;
+ device_t::device_t(netlist_state_t &owner, const pstring &name)
+ : core_device_t(owner, name)
+ {
+ }
- // everything already fully qualified
- setup().register_alias_nofqn(alias, term.name());
-}
+ device_t::device_t(core_device_t &owner, const pstring &name)
+ : core_device_t(owner, name)
+ {
+ }
-void device_t::register_subalias(const pstring &name, const pstring &aliased)
-{
- pstring alias = this->name() + "." + name;
- pstring aliased_fqn = this->name() + "." + aliased;
+ setup_t &device_t::setup() noexcept
+ {
+ return state().setup();
+ }
- // everything already fully qualified
- setup().register_alias_nofqn(alias, aliased_fqn);
-}
+ const setup_t &device_t::setup() const noexcept
+ {
+ return state().setup();
+ }
-void device_t::connect(detail::core_terminal_t &t1, detail::core_terminal_t &t2)
-{
- setup().register_link_fqn(t1.name(), t2.name());
-}
+ void device_t::register_subalias(const pstring &name, detail::core_terminal_t &term)
+ {
+ pstring alias = this->name() + "." + name;
-void device_t::connect(const pstring &t1, const pstring &t2)
-{
- setup().register_link_fqn(name() + "." + t1, name() + "." + t2);
-}
+ // everything already fully qualified
+ setup().register_alias_nofqn(alias, term.name());
+ }
-/* FIXME: this is only used by solver code since matrix solvers are started in
- * post_start.
- */
-void device_t::connect_post_start(detail::core_terminal_t &t1, detail::core_terminal_t &t2)
-{
- if (!setup().connect(t1, t2))
- log().fatal(MF_ERROR_CONNECTING_1_TO_2(t1.name(), t2.name()));
-}
+ void device_t::register_subalias(const pstring &name, const pstring &aliased)
+ {
+ pstring alias = this->name() + "." + name;
+ pstring aliased_fqn = this->name() + "." + aliased;
+ // everything already fully qualified
+ setup().register_alias_nofqn(alias, aliased_fqn);
+ }
-// -----------------------------------------------------------------------------
-// family_setter_t
-// -----------------------------------------------------------------------------
+ void device_t::connect(detail::core_terminal_t &t1, detail::core_terminal_t &t2)
+ {
+ setup().register_link_fqn(t1.name(), t2.name());
+ }
-// NOLINTNEXTLINE(modernize-use-equals-default)
-detail::family_setter_t::family_setter_t()
-{
-}
+ void device_t::connect(const pstring &t1, const pstring &t2)
+ {
+ setup().register_link_fqn(name() + "." + t1, name() + "." + t2);
+ }
-detail::family_setter_t::family_setter_t(core_device_t &dev, const pstring &desc)
-{
- dev.set_logic_family(dev.setup().family_from_model(desc));
-}
+ /* FIXME: this is only used by solver code since matrix solvers are started in
+ * post_start.
+ */
+ void device_t::connect_post_start(detail::core_terminal_t &t1, detail::core_terminal_t &t2)
+ {
+ if (!setup().connect(t1, t2))
+ log().fatal(MF_ERROR_CONNECTING_1_TO_2(t1.name(), t2.name()));
+ }
-detail::family_setter_t::family_setter_t(core_device_t &dev, const logic_family_desc_t *desc)
-{
- dev.set_logic_family(desc);
-}
-// ----------------------------------------------------------------------------------------
-// net_t
-// ----------------------------------------------------------------------------------------
+ // -----------------------------------------------------------------------------
+ // family_setter_t
+ // -----------------------------------------------------------------------------
-detail::net_t::net_t(netlist_state_t &nl, const pstring &aname, core_terminal_t *mr)
- : object_t(aname)
- , netlist_ref(nl)
- , m_new_Q(*this, "m_new_Q", 0)
- , m_cur_Q (*this, "m_cur_Q", 0)
- , m_in_queue(*this, "m_in_queue", queue_status::DELIVERED)
- , m_next_scheduled_time(*this, "m_time", netlist_time::zero())
- , m_railterminal(mr)
-{
-}
+ // NOLINTNEXTLINE(modernize-use-equals-default)
+ detail::family_setter_t::family_setter_t()
+ {
+ }
-void detail::net_t::rebuild_list()
-{
- /* rebuild m_list */
+ detail::family_setter_t::family_setter_t(core_device_t &dev, const pstring &desc)
+ {
+ dev.set_logic_family(dev.setup().family_from_model(desc));
+ }
- m_list_active.clear();
- for (auto & term : m_core_terms)
- if (term->terminal_state() != logic_t::STATE_INP_PASSIVE)
- {
- m_list_active.push_back(term);
- term->set_copied_input(m_cur_Q);
- }
-}
+ detail::family_setter_t::family_setter_t(core_device_t &dev, const logic_family_desc_t *desc)
+ {
+ dev.set_logic_family(desc);
+ }
-template <bool KEEP_STATS, typename T>
-void detail::net_t::process(const T mask, netlist_sig_t sig)
-{
- m_cur_Q = sig;
+ // ----------------------------------------------------------------------------------------
+ // net_t
+ // ----------------------------------------------------------------------------------------
+
+ detail::net_t::net_t(netlist_state_t &nl, const pstring &aname, core_terminal_t *mr)
+ : object_t(aname)
+ , netlist_ref(nl)
+ , m_new_Q(*this, "m_new_Q", 0)
+ , m_cur_Q (*this, "m_cur_Q", 0)
+ , m_in_queue(*this, "m_in_queue", queue_status::DELIVERED)
+ , m_next_scheduled_time(*this, "m_time", netlist_time::zero())
+ , m_railterminal(mr)
+ {
+ }
- if (KEEP_STATS)
+ void detail::net_t::rebuild_list()
{
- for (auto & p : m_list_active)
- {
- p.set_copied_input(sig);
- auto *stats = p.device().m_stats.get();
- stats->m_stat_call_count.inc();
- if ((p.terminal_state() & mask))
+ /* rebuild m_list */
+
+ m_list_active.clear();
+ for (auto & term : m_core_terms)
+ if (term->terminal_state() != logic_t::STATE_INP_PASSIVE)
{
- auto g(stats->m_stat_total_time.guard());
- p.m_delegate();
+ m_list_active.push_back(term);
+ term->set_copied_input(m_cur_Q);
}
- }
}
- else
+
+
+ void detail::net_t::reset()
{
- for (auto & p : m_list_active)
+ m_next_scheduled_time = netlist_time::zero();
+ m_in_queue = queue_status::DELIVERED;
+
+ m_new_Q = 0;
+ m_cur_Q = 0;
+
+ auto *p = dynamic_cast<analog_net_t *>(this);
+
+ if (p != nullptr)
+ p->m_cur_Analog = 0.0;
+
+ /* rebuild m_list and reset terminals to active or analog out state */
+
+ m_list_active.clear();
+ for (core_terminal_t *ct : m_core_terms)
{
- p.set_copied_input(sig);
- if ((p.terminal_state() & mask))
- p.m_delegate();
+ ct->reset();
+ if (ct->terminal_state() != logic_t::STATE_INP_PASSIVE)
+ m_list_active.push_back(ct);
+ ct->set_copied_input(m_cur_Q);
}
}
-}
-template <bool KEEP_STATS>
-void detail::net_t::update_devs() NL_NOEXCEPT
-{
- nl_assert(this->isRailNet());
+ void detail::net_t::add_terminal(detail::core_terminal_t &terminal) NL_NOEXCEPT
+ {
+ for (auto &t : m_core_terms)
+ if (t == &terminal)
+ state().log().fatal(MF_NET_1_DUPLICATE_TERMINAL_2(name(), t->name()));
- const unsigned int new_Q(m_new_Q);
+ terminal.set_net(this);
- const unsigned int mask((new_Q << core_terminal_t::INP_LH_SHIFT)
- | (m_cur_Q << core_terminal_t::INP_HL_SHIFT));
+ m_core_terms.push_back(&terminal);
+ }
- m_in_queue = queue_status::DELIVERED; /* mark as taken ... */
- switch (mask)
+ void detail::net_t::remove_terminal(detail::core_terminal_t &terminal) NL_NOEXCEPT
{
- case core_terminal_t::STATE_INP_HL:
- case core_terminal_t::STATE_INP_LH:
- process<KEEP_STATS>(mask | core_terminal_t::STATE_INP_ACTIVE, new_Q);
- break;
- default:
- /* do nothing */
- break;
+ if (plib::container::contains(m_core_terms, &terminal))
+ {
+ terminal.set_net(nullptr);
+ plib::container::remove(m_core_terms, &terminal);
+ }
+ else
+ state().log().fatal(MF_REMOVE_TERMINAL_1_FROM_NET_2(terminal.name(), this->name()));
}
-}
-
-void detail::net_t::reset()
-{
- m_next_scheduled_time = netlist_time::zero();
- m_in_queue = queue_status::DELIVERED;
-
- m_new_Q = 0;
- m_cur_Q = 0;
-
- auto *p = dynamic_cast<analog_net_t *>(this);
- if (p != nullptr)
- p->m_cur_Analog = 0.0;
+ void detail::net_t::move_connections(detail::net_t &dest_net)
+ {
+ for (auto &ct : m_core_terms)
+ dest_net.add_terminal(*ct);
+ m_core_terms.clear();
+ }
- /* rebuild m_list and reset terminals to active or analog out state */
+ // ----------------------------------------------------------------------------------------
+ // logic_net_t
+ // ----------------------------------------------------------------------------------------
- m_list_active.clear();
- for (core_terminal_t *ct : m_core_terms)
+ logic_net_t::logic_net_t(netlist_state_t &nl, const pstring &aname, detail::core_terminal_t *mr)
+ : net_t(nl, aname, mr)
{
- ct->reset();
- if (ct->terminal_state() != logic_t::STATE_INP_PASSIVE)
- m_list_active.push_back(ct);
- ct->set_copied_input(m_cur_Q);
}
-}
-void detail::net_t::add_terminal(detail::core_terminal_t &terminal)
-{
- for (auto &t : m_core_terms)
- if (t == &terminal)
- state().log().fatal(MF_NET_1_DUPLICATE_TERMINAL_2(name(), t->name()));
+ // ----------------------------------------------------------------------------------------
+ // analog_net_t
+ // ----------------------------------------------------------------------------------------
- terminal.set_net(this);
+ analog_net_t::analog_net_t(netlist_state_t &nl, const pstring &aname, detail::core_terminal_t *mr)
+ : net_t(nl, aname, mr)
+ , m_cur_Analog(*this, "m_cur_Analog", 0.0)
+ , m_solver(nullptr)
+ {
+ }
- m_core_terms.push_back(&terminal);
-}
+ // ----------------------------------------------------------------------------------------
+ // core_terminal_t
+ // ----------------------------------------------------------------------------------------
+
+ detail::core_terminal_t::core_terminal_t(core_device_t &dev, const pstring &aname,
+ const state_e state, nldelegate delegate)
+ : device_object_t(dev, dev.name() + "." + aname)
+ , plib::linkedlist_t<core_terminal_t>::element_t()
+ , m_delegate(delegate)
+ #if NL_USE_COPY_INSTEAD_OF_REFERENCE
+ , m_Q(*this, "m_Q", 0)
+ #endif
+ , m_net(nullptr)
+ , m_state(*this, "m_state", state)
+ {
+ }
-void detail::net_t::remove_terminal(detail::core_terminal_t &terminal)
-{
- if (plib::container::contains(m_core_terms, &terminal))
+ analog_t::analog_t(core_device_t &dev, const pstring &aname, const state_e state,
+ nldelegate delegate)
+ : core_terminal_t(dev, aname, state, delegate)
{
- terminal.set_net(nullptr);
- plib::container::remove(m_core_terms, &terminal);
}
- else
- state().log().fatal(MF_REMOVE_TERMINAL_1_FROM_NET_2(terminal.name(), this->name()));
-}
-void detail::net_t::move_connections(detail::net_t &dest_net)
-{
- for (auto &ct : m_core_terms)
- dest_net.add_terminal(*ct);
- m_core_terms.clear();
-}
+ logic_t::logic_t(core_device_t &dev, const pstring &aname, const state_e state,
+ nldelegate delegate)
+ : core_terminal_t(dev, aname, state, delegate)
+ , logic_family_t()
+ , m_proxy(nullptr)
+ {
+ }
-// ----------------------------------------------------------------------------------------
-// logic_net_t
-// ----------------------------------------------------------------------------------------
+ // ----------------------------------------------------------------------------------------
+ // terminal_t
+ // ----------------------------------------------------------------------------------------
-logic_net_t::logic_net_t(netlist_state_t &nl, const pstring &aname, detail::core_terminal_t *mr)
- : net_t(nl, aname, mr)
-{
-}
+ terminal_t::terminal_t(core_device_t &dev, const pstring &aname, terminal_t *otherterm)
+ : analog_t(dev, aname, STATE_BIDIR)
+ , m_Idr1(nullptr)
+ , m_go1(nullptr)
+ , m_gt1(nullptr)
+ , m_connected_terminal(otherterm)
+ {
+ state().setup().register_term(*this);
+ }
-// ----------------------------------------------------------------------------------------
-// analog_net_t
-// ----------------------------------------------------------------------------------------
+ void terminal_t::solve_now()
+ {
+ // Nets may belong to railnets which do not have a solver attached
+ if (this->has_net())
+ if (net().solver() != nullptr)
+ net().solver()->update_forced();
+ }
-analog_net_t::analog_net_t(netlist_state_t &nl, const pstring &aname, detail::core_terminal_t *mr)
- : net_t(nl, aname, mr)
- , m_cur_Analog(*this, "m_cur_Analog", 0.0)
- , m_solver(nullptr)
-{
-}
-
-// ----------------------------------------------------------------------------------------
-// core_terminal_t
-// ----------------------------------------------------------------------------------------
-
-detail::core_terminal_t::core_terminal_t(core_device_t &dev, const pstring &aname,
- const state_e state, nldelegate delegate)
-: device_object_t(dev, dev.name() + "." + aname)
-, plib::linkedlist_t<core_terminal_t>::element_t()
-, m_delegate(delegate)
-#if USE_COPY_INSTEAD_OF_REFERENCE
-, m_Q(*this, "m_Q", 0)
-#endif
-, m_net(nullptr)
-, m_state(*this, "m_state", state)
-{
-}
+ void terminal_t::schedule_solve_after(const netlist_time after)
+ {
+ // Nets may belong to railnets which do not have a solver attached
+ if (this->has_net())
+ if (net().solver() != nullptr)
+ net().solver()->update_after(after);
+ }
-analog_t::analog_t(core_device_t &dev, const pstring &aname, const state_e state,
- nldelegate delegate)
-: core_terminal_t(dev, aname, state, delegate)
-{
-}
+ // ----------------------------------------------------------------------------------------
+ // net_input_t
+ // ----------------------------------------------------------------------------------------
-logic_t::logic_t(core_device_t &dev, const pstring &aname, const state_e state,
- nldelegate delegate)
- : core_terminal_t(dev, aname, state, delegate)
- , logic_family_t()
- , m_proxy(nullptr)
-{
-}
-
-// ----------------------------------------------------------------------------------------
-// terminal_t
-// ----------------------------------------------------------------------------------------
-
-terminal_t::terminal_t(core_device_t &dev, const pstring &aname, terminal_t *otherterm)
-: analog_t(dev, aname, STATE_BIDIR)
-, m_Idr1(nullptr)
-, m_go1(nullptr)
-, m_gt1(nullptr)
-, m_connected_terminal(otherterm)
-{
- state().setup().register_term(*this);
-}
+ // ----------------------------------------------------------------------------------------
+ // net_output_t
+ // ----------------------------------------------------------------------------------------
-void terminal_t::solve_now()
-{
- // Nets may belong to railnets which do not have a solver attached
- if (this->has_net())
- if (net().solver() != nullptr)
- net().solver()->update_forced();
-}
+ // ----------------------------------------------------------------------------------------
+ // logic_output_t
+ // ----------------------------------------------------------------------------------------
-void terminal_t::schedule_solve_after(const netlist_time after)
-{
- // Nets may belong to railnets which do not have a solver attached
- if (this->has_net())
- if (net().solver() != nullptr)
- net().solver()->update_after(after);
-}
-
-// ----------------------------------------------------------------------------------------
-// net_input_t
-// ----------------------------------------------------------------------------------------
-
-// ----------------------------------------------------------------------------------------
-// net_output_t
-// ----------------------------------------------------------------------------------------
-
-// ----------------------------------------------------------------------------------------
-// logic_output_t
-// ----------------------------------------------------------------------------------------
-
-logic_output_t::logic_output_t(core_device_t &dev, const pstring &aname)
- : logic_t(dev, aname, STATE_OUT)
- , m_my_net(dev.state(), name() + ".net", this)
-{
- this->set_net(&m_my_net);
- state().register_net(pool_owned_ptr<logic_net_t>(&m_my_net, false));
- set_logic_family(dev.logic_family());
- state().setup().register_term(*this);
-}
+ logic_output_t::logic_output_t(core_device_t &dev, const pstring &aname)
+ : logic_t(dev, aname, STATE_OUT)
+ , m_my_net(dev.state(), name() + ".net", this)
+ {
+ this->set_net(&m_my_net);
+ state().register_net(owned_pool_ptr<logic_net_t>(&m_my_net, false));
+ set_logic_family(dev.logic_family());
+ state().setup().register_term(*this);
+ }
-void logic_output_t::initial(const netlist_sig_t val)
-{
- if (has_net())
- net().initial(val);
-}
+ void logic_output_t::initial(const netlist_sig_t val)
+ {
+ if (has_net())
+ net().initial(val);
+ }
-// ----------------------------------------------------------------------------------------
-// analog_input_t
-// ----------------------------------------------------------------------------------------
+ // ----------------------------------------------------------------------------------------
+ // analog_input_t
+ // ----------------------------------------------------------------------------------------
-analog_input_t::analog_input_t(core_device_t &dev, const pstring &aname,
- nldelegate delegate)
-: analog_t(dev, aname, STATE_INP_ACTIVE, delegate)
-{
- state().setup().register_term(*this);
-}
+ analog_input_t::analog_input_t(core_device_t &dev, const pstring &aname,
+ nldelegate delegate)
+ : analog_t(dev, aname, STATE_INP_ACTIVE, delegate)
+ {
+ state().setup().register_term(*this);
+ }
-// ----------------------------------------------------------------------------------------
-// analog_output_t
-// ----------------------------------------------------------------------------------------
+ // ----------------------------------------------------------------------------------------
+ // analog_output_t
+ // ----------------------------------------------------------------------------------------
-analog_output_t::analog_output_t(core_device_t &dev, const pstring &aname)
- : analog_t(dev, aname, STATE_OUT)
- , m_my_net(dev.state(), name() + ".net", this)
-{
- state().register_net(pool_owned_ptr<analog_net_t>(&m_my_net, false));
- this->set_net(&m_my_net);
+ analog_output_t::analog_output_t(core_device_t &dev, const pstring &aname)
+ : analog_t(dev, aname, STATE_OUT)
+ , m_my_net(dev.state(), name() + ".net", this)
+ {
+ state().register_net(owned_pool_ptr<analog_net_t>(&m_my_net, false));
+ this->set_net(&m_my_net);
- //net().m_cur_Analog = NL_FCONST(0.0);
- state().setup().register_term(*this);
-}
+ //net().m_cur_Analog = NL_FCONST(0.0);
+ state().setup().register_term(*this);
+ }
-void analog_output_t::initial(const nl_double val)
-{
- net().set_Q_Analog(val);
-}
+ void analog_output_t::initial(const nl_double val)
+ {
+ net().set_Q_Analog(val);
+ }
-// -----------------------------------------------------------------------------
-// logic_input_t
-// -----------------------------------------------------------------------------
+ // -----------------------------------------------------------------------------
+ // logic_input_t
+ // -----------------------------------------------------------------------------
-logic_input_t::logic_input_t(core_device_t &dev, const pstring &aname,
- nldelegate delegate)
- : logic_t(dev, aname, STATE_INP_ACTIVE, delegate)
-{
- set_logic_family(dev.logic_family());
- state().setup().register_term(*this);
-}
+ logic_input_t::logic_input_t(core_device_t &dev, const pstring &aname,
+ nldelegate delegate)
+ : logic_t(dev, aname, STATE_INP_ACTIVE, delegate)
+ {
+ set_logic_family(dev.logic_family());
+ state().setup().register_term(*this);
+ }
-// ----------------------------------------------------------------------------------------
-// Parameters ...
-// ----------------------------------------------------------------------------------------
+ // ----------------------------------------------------------------------------------------
+ // Parameters ...
+ // ----------------------------------------------------------------------------------------
-param_t::param_t(device_t &device, const pstring &name)
- : device_object_t(device, device.name() + "." + name)
-{
- device.setup().register_param_t(this->name(), *this);
-}
+ param_t::param_t(device_t &device, const pstring &name)
+ : device_object_t(device, device.name() + "." + name)
+ {
+ device.setup().register_param_t(this->name(), *this);
+ }
-param_t::param_type_t param_t::param_type() const
-{
- if (dynamic_cast<const param_str_t *>(this) != nullptr)
- return STRING;
- else if (dynamic_cast<const param_double_t *>(this) != nullptr)
- return DOUBLE;
- else if (dynamic_cast<const param_int_t *>(this) != nullptr)
- return INTEGER;
- else if (dynamic_cast<const param_logic_t *>(this) != nullptr)
- return LOGIC;
- else if (dynamic_cast<const param_ptr_t *>(this) != nullptr)
- return POINTER;
- else
+ param_t::param_type_t param_t::param_type() const
{
- state().log().fatal(MF_UNKNOWN_PARAM_TYPE(name()));
- return POINTER; /* Please compiler */
+ if (dynamic_cast<const param_str_t *>(this) != nullptr)
+ return STRING;
+ else if (dynamic_cast<const param_double_t *>(this) != nullptr)
+ return DOUBLE;
+ else if (dynamic_cast<const param_int_t *>(this) != nullptr)
+ return INTEGER;
+ else if (dynamic_cast<const param_logic_t *>(this) != nullptr)
+ return LOGIC;
+ else if (dynamic_cast<const param_ptr_t *>(this) != nullptr)
+ return POINTER;
+ else
+ {
+ state().log().fatal(MF_UNKNOWN_PARAM_TYPE(name()));
+ return POINTER; /* Please compiler */
+ }
}
-}
-void param_t::update_param()
-{
- device().update_param();
-}
+ void param_t::update_param() NL_NOEXCEPT
+ {
+ device().update_param();
+ }
-pstring param_t::get_initial(const device_t &dev, bool *found)
-{
- pstring res = dev.setup().get_initial_param_val(this->name(), "");
- *found = (res != "");
- return res;
-}
+ pstring param_t::get_initial(const device_t &dev, bool *found)
+ {
+ pstring res = dev.setup().get_initial_param_val(this->name(), "");
+ *found = (res != "");
+ return res;
+ }
-const pstring param_model_t::type()
-{
- return state().setup().models().type(str());
-}
+ const pstring param_model_t::type()
+ {
+ return state().setup().models().type(str());
+ }
-param_str_t::param_str_t(device_t &device, const pstring &name, const pstring &val)
-: param_t(device, name)
-{
- m_param = device.setup().get_initial_param_val(this->name(),val);
-}
+ param_str_t::param_str_t(device_t &device, const pstring &name, const pstring &val)
+ : param_t(device, name)
+ {
+ m_param = device.setup().get_initial_param_val(this->name(),val);
+ }
-void param_str_t::changed()
-{
-}
+ void param_str_t::changed()
+ {
+ }
-param_ptr_t::param_ptr_t(device_t &device, const pstring &name, uint8_t * val)
-: param_t(device, name)
-{
- m_param = val; //device.setup().get_initial_param_val(this->name(),val);
- //netlist().save(*this, m_param, "m_param");
-}
+ param_ptr_t::param_ptr_t(device_t &device, const pstring &name, uint8_t * val)
+ : param_t(device, name)
+ {
+ m_param = val; //device.setup().get_initial_param_val(this->name(),val);
+ //netlist().save(*this, m_param, "m_param");
+ }
-void param_model_t::changed()
-{
- state().log().fatal(MF_MODEL_1_CAN_NOT_BE_CHANGED_AT_RUNTIME(name()));
-}
+ void param_model_t::changed()
+ {
+ state().log().fatal(MF_MODEL_1_CAN_NOT_BE_CHANGED_AT_RUNTIME(name()));
+ }
-const pstring param_model_t::value_str(const pstring &entity)
-{
- return state().setup().models().value_str(str(), entity);
-}
+ const pstring param_model_t::value_str(const pstring &entity)
+ {
+ return state().setup().models().value_str(str(), entity);
+ }
-nl_double param_model_t::value(const pstring &entity)
-{
- return state().setup().models().value(str(), entity);
-}
+ nl_double param_model_t::value(const pstring &entity)
+ {
+ return state().setup().models().value(str(), entity);
+ }
-plib::unique_ptr<std::istream> param_data_t::stream()
-{
- return device().setup().get_data_stream(str());
-}
+ plib::unique_ptr<std::istream> param_data_t::stream()
+ {
+ return device().setup().get_data_stream(str());
+ }
bool detail::core_terminal_t::is_logic() const NL_NOEXCEPT
{
@@ -1077,5 +989,15 @@ plib::unique_ptr<std::istream> param_data_t::stream()
return dynamic_cast<const analog_net_t *>(this) != nullptr;
}
+ void netlist_t::process_queue(const netlist_time delta) NL_NOEXCEPT
+ {
+ if (!m_use_stats)
+ process_queue_stats<false>(delta, m_mainclock);
+ else
+ {
+ auto sm_guard(m_stat_mainloop.guard());
+ process_queue_stats<true>(delta, m_mainclock);
+ }
+ }
} // namespace netlist
diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h
index 9946bc8cd43..f732c7cd1e2 100644
--- a/src/lib/netlist/nl_base.h
+++ b/src/lib/netlist/nl_base.h
@@ -16,15 +16,15 @@
#include "plib/palloc.h" // owned_ptr
#include "plib/pdynlib.h"
#include "plib/pfmtlog.h"
+#include "plib/plists.h"
#include "plib/pmempool.h"
#include "plib/ppmf.h"
#include "plib/pstate.h"
#include "plib/pstream.h"
+#include "plib/ptime.h"
#include "nl_errstr.h"
-#include "nl_lists.h"
#include "nltypes.h"
-#include "plib/ptime.h"
#include <unordered_map>
#include <vector>
@@ -98,7 +98,7 @@ class NETLIB_NAME(name) : public device_t
* device a dynamic device if parameter m_func is set.
*/
#define NETLIB_IS_DYNAMIC(expr) \
- public: virtual bool is_dynamic() const override { return expr; }
+ public: virtual bool is_dynamic() const NL_NOEXCEPT override { return expr; }
/*! Add this to a device definition to mark the device as a time-stepping device.
*
@@ -122,39 +122,39 @@ class NETLIB_NAME(name) : public device_t
*
*/
#define NETLIB_IS_TIMESTEP(expr) \
- public: virtual bool is_timestep() const override { return expr; }
+ public: virtual bool is_timestep() const NL_NOEXCEPT override { return expr; }
/*! Used to implement the time stepping code.
*
* Please see NETLIB_IS_TIMESTEP for an example.
*/
#define NETLIB_TIMESTEPI() \
- public: virtual void timestep(const nl_double step) override
+ public: virtual void timestep(const nl_double step) NL_NOEXCEPT override
#define NETLIB_FAMILY(family) , m_famsetter(*this, family)
#define NETLIB_DELEGATE(chip, name) nldelegate(&NETLIB_NAME(chip) :: name, this)
-#define NETLIB_UPDATE_TERMINALSI() virtual void update_terminals() override
+#define NETLIB_UPDATE_TERMINALSI() virtual void update_terminals() NL_NOEXCEPT override
#define NETLIB_HANDLERI(name) virtual void name() NL_NOEXCEPT
#define NETLIB_UPDATEI() virtual void update() NL_NOEXCEPT override
-#define NETLIB_UPDATE_PARAMI() virtual void update_param() override
+#define NETLIB_UPDATE_PARAMI() virtual void update_param() NL_NOEXCEPT override
#define NETLIB_RESETI() virtual void reset() override
-#define NETLIB_TIMESTEP(chip) void NETLIB_NAME(chip) :: timestep(const nl_double step)
+#define NETLIB_TIMESTEP(chip) void NETLIB_NAME(chip) :: timestep(nl_double step) NL_NOEXCEPT
#define NETLIB_SUB(chip) nld_ ## chip
-#define NETLIB_SUBXX(ns, chip) pool_owned_ptr< ns :: nld_ ## chip >
+#define NETLIB_SUBXX(ns, chip) unique_pool_ptr< ns :: nld_ ## chip >
#define NETLIB_HANDLER(chip, name) void NETLIB_NAME(chip) :: name() NL_NOEXCEPT
#define NETLIB_UPDATE(chip) NETLIB_HANDLER(chip, update)
#define NETLIB_RESET(chip) void NETLIB_NAME(chip) :: reset(void)
-#define NETLIB_UPDATE_PARAM(chip) void NETLIB_NAME(chip) :: update_param()
-#define NETLIB_FUNC_VOID(chip, name, params) void NETLIB_NAME(chip) :: name params
+#define NETLIB_UPDATE_PARAM(chip) void NETLIB_NAME(chip) :: update_param() NL_NOEXCEPT
+#define NETLIB_FUNC_VOID(chip, name, params) void NETLIB_NAME(chip) :: name params NL_NOEXCEPT
-#define NETLIB_UPDATE_TERMINALS(chip) void NETLIB_NAME(chip) :: update_terminals()
+#define NETLIB_UPDATE_TERMINALS(chip) void NETLIB_NAME(chip) :: update_terminals() NL_NOEXCEPT
//============================================================
// Asserts
@@ -249,18 +249,18 @@ namespace netlist
virtual ~logic_family_desc_t() noexcept = default;
- virtual pool_owned_ptr<devices::nld_base_d_to_a_proxy> create_d_a_proxy(netlist_state_t &anetlist, const pstring &name,
+ virtual unique_pool_ptr<devices::nld_base_d_to_a_proxy> create_d_a_proxy(netlist_state_t &anetlist, const pstring &name,
logic_output_t *proxied) const = 0;
- virtual pool_owned_ptr<devices::nld_base_a_to_d_proxy> create_a_d_proxy(netlist_state_t &anetlist, const pstring &name,
+ virtual unique_pool_ptr<devices::nld_base_a_to_d_proxy> create_a_d_proxy(netlist_state_t &anetlist, const pstring &name,
logic_input_t *proxied) const = 0;
- double fixed_V() const { return m_fixed_V; }
- double low_thresh_V(const double VN, const double VP) const { return VN + (VP - VN) * m_low_thresh_PCNT; }
- double high_thresh_V(const double VN, const double VP) const { return VN + (VP - VN) * m_high_thresh_PCNT; }
- double low_offset_V() const { return m_low_VO; }
- double high_offset_V() const { return m_high_VO; }
- double R_low() const { return m_R_low; }
- double R_high() const { return m_R_high; }
+ double fixed_V() const noexcept{ return m_fixed_V; }
+ double low_thresh_V(const double VN, const double VP) const noexcept{ return VN + (VP - VN) * m_low_thresh_PCNT; }
+ double high_thresh_V(const double VN, const double VP) const noexcept{ return VN + (VP - VN) * m_high_thresh_PCNT; }
+ double low_offset_V() const noexcept{ return m_low_VO; }
+ double high_offset_V() const noexcept{ return m_high_VO; }
+ double R_low() const noexcept{ return m_R_low; }
+ double R_high() const noexcept{ return m_R_high; }
double m_fixed_V; //!< For variable voltage families, specify 0. For TTL this would be 5. */
double m_low_thresh_PCNT; //!< low input threshhold offset. If the input voltage is below this value times supply voltage, a "0" input is signalled
@@ -285,11 +285,9 @@ namespace netlist
class logic_family_t
{
public:
-
logic_family_t() : m_logic_family(nullptr) {}
COPYASSIGNMOVE(logic_family_t, delete)
-
const logic_family_desc_t *logic_family() const { return m_logic_family; }
void set_logic_family(const logic_family_desc_t *fam) { m_logic_family = fam; }
@@ -313,7 +311,6 @@ namespace netlist
* state_var<unsigned> m_var;
* }
*/
-
template <typename T>
struct state_var
{
@@ -321,7 +318,7 @@ namespace netlist
template <typename O>
//! Constructor.
state_var(O &owner, //!< owner must have a netlist() method.
- const pstring &name, //!< identifier/name for this state variable
+ const pstring &name, //!< identifier/name for this state variable
const T &value //!< Initial value after construction
);
@@ -332,7 +329,7 @@ namespace netlist
//! Move Constructor.
constexpr state_var(state_var &&rhs) noexcept = default;
//! Assignment operator to assign value of a state var.
- C14CONSTEXPR state_var &operator=(const state_var &rhs) = default;
+ C14CONSTEXPR state_var &operator=(const state_var &rhs) /*noexcept*/ = default; // OSX doesn't like noexcept
//! Assignment move operator to assign value of a state var.
C14CONSTEXPR state_var &operator=(state_var &&rhs) noexcept = default;
//! Assignment operator to assign value of type T.
@@ -355,7 +352,7 @@ namespace netlist
* Please refer to \ref state_var.
*/
template <typename T, std::size_t N>
- struct state_array
+ struct state_array : public std::array<T, N>
{
public:
//! Constructor.
@@ -372,12 +369,6 @@ namespace netlist
state_array(state_array &&rhs) noexcept = default;
state_array &operator=(const state_array &rhs) noexcept = default;
state_array &operator=(state_array &&rhs) noexcept = default;
-
- state_array &operator=(const T &rhs) noexcept { m_value = rhs; return *this; }
- T & operator[](const std::size_t i) noexcept { return m_value[i]; }
- constexpr const T & operator[](const std::size_t i) const noexcept { return m_value[i]; }
- private:
- std::array<T, N> m_value;
};
// -----------------------------------------------------------------------------
@@ -401,22 +392,22 @@ namespace netlist
template <typename C, typename T>
struct property_store_t
{
- static void add(const C *obj, const T &aname)
+ static void add(const C *obj, const T &aname) noexcept
{
store().insert({obj, aname});
}
- static const T get(const C *obj)
+ static const T get(const C *obj) noexcept
{
return store().find(obj)->second;
}
- static void remove(const C *obj)
+ static void remove(const C *obj) noexcept
{
store().erase(store().find(obj));
}
- static std::unordered_map<const C *, T> &store()
+ static std::unordered_map<const C *, T> &store() noexcept
{
static std::unordered_map<const C *, T> lstore;
return lstore;
@@ -453,7 +444,7 @@ namespace netlist
*
* \returns name of the object.
*/
- pstring name() const
+ pstring name() const noexcept
{
return props::get(this);
}
@@ -549,17 +540,14 @@ namespace netlist
{
public:
- using list_t = std::vector<core_terminal_t *>;
-
static constexpr const unsigned int INP_HL_SHIFT = 0;
static constexpr const unsigned int INP_LH_SHIFT = 1;
- static constexpr const unsigned int INP_ACTIVE_SHIFT = 2;
enum state_e {
STATE_INP_PASSIVE = 0,
STATE_INP_HL = (1 << INP_HL_SHIFT),
STATE_INP_LH = (1 << INP_LH_SHIFT),
- STATE_INP_ACTIVE = (1 << INP_ACTIVE_SHIFT),
+ STATE_INP_ACTIVE = STATE_INP_HL | STATE_INP_LH,
STATE_OUT = 128,
STATE_BIDIR = 256
};
@@ -601,15 +589,15 @@ namespace netlist
void reset() noexcept { set_state(is_type(OUTPUT) ? STATE_OUT : STATE_INP_ACTIVE); }
nldelegate m_delegate;
- #if USE_COPY_INSTEAD_OF_REFERENCE
- void set_copied_input(netlist_sig_t val)
+ #if NL_USE_COPY_INSTEAD_OF_REFERENCE
+ void set_copied_input(netlist_sig_t val) noexcept
{
m_Q = val;
}
state_var_sig m_Q;
#else
- void set_copied_input(netlist_sig_t val) const { plib::unused_var(val); }
+ void set_copied_input(netlist_sig_t val) const noexcept { plib::unused_var(val); }
#endif
private:
@@ -669,8 +657,8 @@ namespace netlist
/* setup stuff */
- void add_terminal(core_terminal_t &terminal);
- void remove_terminal(core_terminal_t &terminal);
+ void add_terminal(core_terminal_t &terminal) NL_NOEXCEPT;
+ void remove_terminal(core_terminal_t &terminal) NL_NOEXCEPT;
bool is_logic() const NL_NOEXCEPT;
bool is_analog() const NL_NOEXCEPT;
@@ -679,14 +667,14 @@ namespace netlist
void move_connections(net_t &dest_net);
std::vector<core_terminal_t *> &core_terms() { return m_core_terms; }
- #if USE_COPY_INSTEAD_OF_REFERENCE
- void update_inputs()
+ #if NL_USE_COPY_INSTEAD_OF_REFERENCE
+ void update_inputs() noexcept
{
for (auto & term : m_core_terms)
term->m_Q = m_cur_Q;
}
#else
- void update_inputs() const
+ void update_inputs() const noexcept
{
/* nothing needs to be done */
}
@@ -698,14 +686,14 @@ namespace netlist
netlist_sig_t Q() const noexcept { return m_cur_Q; }
/* only used for logic nets */
- void initial(const netlist_sig_t val) noexcept
+ void initial(netlist_sig_t val) noexcept
{
m_cur_Q = m_new_Q = val;
update_inputs();
}
/* only used for logic nets */
- void set_Q_and_push(const netlist_sig_t newQ, const netlist_time delay) NL_NOEXCEPT
+ void set_Q_and_push(netlist_sig_t newQ, netlist_time delay) NL_NOEXCEPT
{
if (newQ != m_new_Q)
{
@@ -715,7 +703,7 @@ namespace netlist
}
/* only used for logic nets */
- void set_Q_time(const netlist_sig_t newQ, const netlist_time at) NL_NOEXCEPT
+ void set_Q_time(netlist_sig_t newQ, netlist_time at) NL_NOEXCEPT
{
if (newQ != m_new_Q)
{
@@ -730,7 +718,7 @@ namespace netlist
* FIXME: get rid of this and implement export/import in MAME
*/
/* only used for logic nets */
- netlist_sig_t *Q_state_ptr() { return m_cur_Q.ptr(); }
+ netlist_sig_t *Q_state_ptr() noexcept { return m_cur_Q.ptr(); }
private:
state_var<netlist_sig_t> m_new_Q;
@@ -821,9 +809,9 @@ namespace netlist
logic_t(core_device_t &dev, const pstring &aname,
const state_e state, nldelegate delegate = nldelegate());
- bool has_proxy() const { return (m_proxy != nullptr); }
- devices::nld_base_proxy *get_proxy() const { return m_proxy; }
- void set_proxy(devices::nld_base_proxy *proxy) { m_proxy = proxy; }
+ bool has_proxy() const noexcept { return (m_proxy != nullptr); }
+ devices::nld_base_proxy *get_proxy() const noexcept { return m_proxy; }
+ void set_proxy(devices::nld_base_proxy *proxy) noexcept { m_proxy = proxy; }
logic_net_t & net() NL_NOEXCEPT;
const logic_net_t & net() const NL_NOEXCEPT;
@@ -912,13 +900,13 @@ namespace netlist
analog_net_t(netlist_state_t &nl, const pstring &aname, detail::core_terminal_t *mr = nullptr);
- nl_double Q_Analog() const NL_NOEXCEPT { return m_cur_Analog; }
- void set_Q_Analog(const nl_double v) NL_NOEXCEPT { m_cur_Analog = v; }
+ nl_double Q_Analog() const noexcept { return m_cur_Analog; }
+ void set_Q_Analog(const nl_double v) noexcept { m_cur_Analog = v; }
nl_double *Q_Analog_state_ptr() NL_NOEXCEPT { return m_cur_Analog.ptr(); }
//FIXME: needed by current solver code
- devices::matrix_solver_t *solver() const NL_NOEXCEPT { return m_solver; }
- void set_solver(devices::matrix_solver_t *solver) NL_NOEXCEPT { m_solver = solver; }
+ devices::matrix_solver_t *solver() const noexcept { return m_solver; }
+ void set_solver(devices::matrix_solver_t *solver) noexcept { m_solver = solver; }
private:
state_var<nl_double> m_cur_Analog;
@@ -935,14 +923,14 @@ namespace netlist
logic_output_t(core_device_t &dev, const pstring &aname);
- void initial(const netlist_sig_t val);
+ void initial(netlist_sig_t val);
- void push(const netlist_sig_t newQ, const netlist_time delay) NL_NOEXCEPT
+ void push(netlist_sig_t newQ, netlist_time delay) NL_NOEXCEPT
{
m_my_net.set_Q_and_push(newQ, delay); // take the shortcut
}
- void set_Q_time(const netlist_sig_t newQ, const netlist_time at) NL_NOEXCEPT
+ void set_Q_time(netlist_sig_t newQ, netlist_time at) NL_NOEXCEPT
{
m_my_net.set_Q_time(newQ, at); // take the shortcut
}
@@ -989,12 +977,12 @@ namespace netlist
protected:
virtual ~param_t() noexcept = default; /* not intended to be destroyed */
- void update_param();
+ void update_param() NL_NOEXCEPT;
pstring get_initial(const device_t &dev, bool *found);
template<typename C>
- void set(C &p, const C v)
+ void set(C &p, const C v) noexcept
{
if (p != v)
{
@@ -1018,7 +1006,7 @@ namespace netlist
T operator()() const NL_NOEXCEPT { return m_param; }
operator T() const NL_NOEXCEPT { return m_param; }
- void setTo(const T &param) { set(m_param, param); }
+ void setTo(const T &param) noexcept { set(m_param, param); }
private:
T m_param;
};
@@ -1031,7 +1019,7 @@ namespace netlist
T operator()() const NL_NOEXCEPT { return T(m_param); }
operator T() const NL_NOEXCEPT { return T(m_param); }
- void setTo(const T &param) { set(m_param, static_cast<int>(param)); }
+ void setTo(const T &param) noexcept { set(m_param, static_cast<int>(param)); }
private:
int m_param;
};
@@ -1050,7 +1038,7 @@ namespace netlist
public:
param_ptr_t(device_t &device, const pstring &name, std::uint8_t* val);
std::uint8_t * operator()() const NL_NOEXCEPT { return m_param; }
- void setTo(std::uint8_t *param) { set(m_param, param); }
+ void setTo(std::uint8_t *param) noexcept { set(m_param, param); }
private:
std::uint8_t* m_param;
};
@@ -1200,10 +1188,10 @@ namespace netlist
}
}
- void set_hint_deactivate(bool v) { m_hint_deactivate = v; }
- bool get_hint_deactivate() { return m_hint_deactivate; }
+ void set_hint_deactivate(bool v) noexcept { m_hint_deactivate = v; }
+ bool get_hint_deactivate() const noexcept { return m_hint_deactivate; }
/* Has to be set in device reset */
- void set_active_outputs(int n) { m_active_outputs = n; }
+ void set_active_outputs(int n) noexcept { m_active_outputs = n; }
void set_default_delegate(detail::core_terminal_t &term);
@@ -1211,9 +1199,9 @@ namespace netlist
struct stats_t
{
// NL_KEEP_STATISTICS
- nperftime_t<true> m_stat_total_time;
- nperfcount_t<true> m_stat_call_count;
- nperfcount_t<true> m_stat_inc_active;
+ plib::pperftime_t<true> m_stat_total_time;
+ plib::pperfcount_t<true> m_stat_call_count;
+ plib::pperfcount_t<true> m_stat_inc_active;
};
unique_pool_ptr<stats_t> m_stats;
@@ -1229,12 +1217,12 @@ namespace netlist
log_type & log();
public:
- virtual void timestep(const nl_double st) { plib::unused_var(st); }
- virtual void update_terminals() { }
+ virtual void timestep(const nl_double st) NL_NOEXCEPT { plib::unused_var(st); }
+ virtual void update_terminals() NL_NOEXCEPT { }
- virtual void update_param() {}
- virtual bool is_dynamic() const { return false; }
- virtual bool is_timestep() const { return false; }
+ virtual void update_param() NL_NOEXCEPT {}
+ virtual bool is_dynamic() const NL_NOEXCEPT { return false; }
+ virtual bool is_timestep() const NL_NOEXCEPT { return false; }
private:
bool m_hint_deactivate;
@@ -1256,13 +1244,13 @@ namespace netlist
~device_t() noexcept override = default;
- setup_t &setup();
- const setup_t &setup() const;
+ setup_t &setup() noexcept;
+ const setup_t &setup() const noexcept;
template<class C, typename... Args>
- void create_and_register_subdevice(const pstring &name, pool_owned_ptr<C> &dev, Args&&... args)
+ void create_and_register_subdevice(const pstring &name, unique_pool_ptr<C> &dev, Args&&... args)
{
- dev = pool().make_poolptr<C>(*this, name, std::forward<Args>(args)...);
+ dev = pool().make_unique<C>(*this, name, std::forward<Args>(args)...);
}
void register_subalias(const pstring &name, detail::core_terminal_t &term);
@@ -1294,6 +1282,16 @@ namespace netlist
family_setter_t(core_device_t &dev, const logic_family_desc_t *desc);
};
+ template <class T, bool TS>
+ using timed_queue = plib::timed_queue_linear<T, TS>;
+
+ /* Use timed_queue_heap to use stdc++ heap functions instead of linear processing.
+ * This slows down processing by about 25% on a Kaby Lake.
+ */
+
+ //template <class T, bool TS>
+ //using timed_queue = timed_queue_heap<T, TS>;
+
// -----------------------------------------------------------------------------
// queue_t
// -----------------------------------------------------------------------------
@@ -1303,13 +1301,13 @@ namespace netlist
*/
class detail::queue_t :
//public timed_queue<pqentry_t<net_t *, netlist_time>, false, NL_KEEP_STATISTICS>,
- public timed_queue<pqentry_t<net_t *, netlist_time>, false, true>,
+ public timed_queue<plib::pqentry_t<net_t *, netlist_time>, false>,
public detail::netlist_ref,
public plib::state_manager_t::callback_t
{
public:
- using base_queue = timed_queue<pqentry_t<net_t *, netlist_time>, false, true>;
- using entry_t = pqentry_t<net_t *, netlist_time>;
+ using base_queue = timed_queue<plib::pqentry_t<net_t *, netlist_time>, false>;
+ using entry_t = plib::pqentry_t<net_t *, netlist_time>;
explicit queue_t(netlist_state_t &nl);
virtual ~queue_t() noexcept = default;
@@ -1338,10 +1336,10 @@ namespace netlist
{
public:
- using nets_collection_type = std::vector<pool_owned_ptr<detail::net_t>>;
+ using nets_collection_type = std::vector<owned_pool_ptr<detail::net_t>>;
/* need to preserve order of device creation ... */
- using devices_collection_type = std::vector<std::pair<pstring, pool_owned_ptr<core_device_t>>>;
+ using devices_collection_type = std::vector<std::pair<pstring, owned_pool_ptr<core_device_t>>>;
netlist_state_t(const pstring &aname,
netlist_t & anetlist,
plib::unique_ptr<callbacks_t> &&callbacks);
@@ -1353,27 +1351,55 @@ namespace netlist
friend class netlist_t; // allow access to private members
template<class C>
- static bool check_class(core_device_t *p)
+ static bool check_class(core_device_t *p) noexcept
{
return dynamic_cast<C *>(p) != nullptr;
}
core_device_t *get_single_device(const pstring &classname, bool (*cc)(core_device_t *)) const;
+ /**
+ * @brief Get single device filtered by class and name
+ *
+ * @tparam C Device class for which devices will be returned
+ * @param name Name of the device
+ *
+ * @return pointers to device
+ */
template<class C>
- C *get_single_device(const pstring &classname) const
+ C *get_single_device(const pstring &name) const
{
- return dynamic_cast<C *>(get_single_device(classname, check_class<C>));
+ return dynamic_cast<C *>(get_single_device(name, check_class<C>));
+ }
+
+ /**
+ * @brief Get vector of devices
+ *
+ * @tparam C Device class for which devices will be returned
+ *
+ * @return vector with pointers to devices
+ */
+ template<class C>
+ inline std::vector<C *> get_device_list()
+ {
+ std::vector<C *> tmp;
+ for (auto &d : m_devices)
+ {
+ auto dev = dynamic_cast<C *>(d.second.get());
+ if (dev != nullptr)
+ tmp.push_back(dev);
+ }
+ return tmp;
}
/* logging and name */
- pstring name() const { return m_name; }
+ pstring name() const noexcept { return m_name; }
- log_type & log() { return m_log; }
- const log_type &log() const { return m_log; }
+ log_type & log() noexcept { return m_log; }
+ const log_type &log() const noexcept { return m_log; }
- plib::dynlib &lib() { return *m_lib; }
+ plib::dynlib &lib() const noexcept { return *m_lib; }
netlist_t &exec() { return m_netlist; }
const netlist_t &exec() const { return m_netlist; }
@@ -1396,21 +1422,16 @@ namespace netlist
std::size_t find_net_id(const detail::net_t *net) const;
template <typename T>
- void register_net(pool_owned_ptr<T> &&net) { m_nets.push_back(std::move(net)); }
-
- template<class device_class>
- inline std::vector<device_class *> get_device_list()
- {
- std::vector<device_class *> tmp;
- for (auto &d : m_devices)
- {
- auto dev = dynamic_cast<device_class *>(d.second.get());
- if (dev != nullptr)
- tmp.push_back(dev);
- }
- return tmp;
- }
+ void register_net(owned_pool_ptr<T> &&net) { m_nets.push_back(std::move(net)); }
+ /**
+ * @brief Get device pointer by name
+ *
+ *
+ * @param name Name of the device
+ *
+ * @return core_device_t pointer if device exists, else nullptr
+ */
core_device_t *find_device(const pstring &name)
{
for (auto & d : m_devices)
@@ -1419,8 +1440,17 @@ namespace netlist
return nullptr;
}
+ /**
+ * @brief Register device using owned_ptr
+ *
+ * Used to register owned devices. These are devices declared as objects
+ * in another devices.
+ *
+ * @param name Name of the device
+ * @param dev Device to be registered
+ */
template <typename T>
- void add_dev(const pstring &name, pool_owned_ptr<T> &&dev)
+ void register_device(const pstring &name, owned_pool_ptr<T> &&dev)
{
for (auto & d : m_devices)
if (d.first == name)
@@ -1433,6 +1463,20 @@ namespace netlist
}
/**
+ * @brief Register device using unique_ptr
+ *
+ * Used to register devices.
+ *
+ * @param name Name of the device
+ * @param dev Device to be registered
+ */
+ template <typename T>
+ void register_device(const pstring &name, unique_pool_ptr<T> &&dev)
+ {
+ register_device(name, owned_pool_ptr<T>(dev.release(), true, dev.get_deleter()));
+ }
+
+ /**
* @brief Remove device
*
* Care needs to be applied if this is called to remove devices with
@@ -1440,7 +1484,7 @@ namespace netlist
*
* @param dev Device to be removed
*/
- void remove_dev(core_device_t *dev)
+ void remove_device(core_device_t *dev)
{
for (auto it = m_devices.begin(); it != m_devices.end(); it++)
if (it->second.get() == dev)
@@ -1451,20 +1495,23 @@ namespace netlist
}
}
- /* sole use is to manage lifetime of family objects */
- std::unordered_map<pstring, plib::unique_ptr<logic_family_desc_t>> m_family_cache;
-
- setup_t &setup() NL_NOEXCEPT { return *m_setup; }
- const setup_t &setup() const NL_NOEXCEPT { return *m_setup; }
-
- nets_collection_type & nets() { return m_nets; }
- devices_collection_type & devices() { return m_devices; }
+ setup_t &setup() noexcept { return *m_setup; }
+ const setup_t &setup() const noexcept { return *m_setup; }
// FIXME: make a postload member and include code there
void rebuild_lists(); /* must be called after post_load ! */
static void compile_defines(std::vector<std::pair<pstring, pstring>> &defs);
+ nets_collection_type & nets() noexcept { return m_nets; }
+ const nets_collection_type & nets() const noexcept { return m_nets; }
+
+ devices_collection_type & devices() noexcept { return m_devices; }
+ const devices_collection_type & devices() const noexcept { return m_devices; }
+
+ /* sole use is to manage lifetime of family objects */
+ std::unordered_map<pstring, plib::unique_ptr<logic_family_desc_t>> m_family_cache;
+
private:
void reset();
@@ -1503,26 +1550,33 @@ namespace netlist
netlist_time time() const NL_NOEXCEPT { return m_time; }
- void process_queue(const netlist_time delta) NL_NOEXCEPT;
- void abort_current_queue_slice() NL_NOEXCEPT { m_queue.retime(detail::queue_t::entry_t(m_time, nullptr)); }
+ void process_queue(netlist_time delta) NL_NOEXCEPT;
+ void abort_current_queue_slice() NL_NOEXCEPT
+ {
+ if (!NL_USE_QUEUE_STATS || !m_use_stats)
+ m_queue.retime<false>(detail::queue_t::entry_t(m_time, nullptr));
+ else
+ m_queue.retime<true>(detail::queue_t::entry_t(m_time, nullptr));
+ }
const detail::queue_t &queue() const NL_NOEXCEPT { return m_queue; }
- void qpush(detail::queue_t::entry_t && e) noexcept
+ template <typename E>
+ void qpush(E && e) noexcept
{
- if (!USE_QUEUE_STATS || !m_use_stats)
- m_queue.push_nostats(std::move(e)); // NOLINT(performance-move-const-arg)
+ if (!NL_USE_QUEUE_STATS || !m_use_stats)
+ m_queue.push<false>(std::forward<E>(e)); // NOLINT(performance-move-const-arg)
else
- m_queue.push(std::move(e)); // NOLINT(performance-move-const-arg)
+ m_queue.push<true>(std::forward<E>(e)); // NOLINT(performance-move-const-arg)
}
template <class R>
void qremove(const R &elem) noexcept
{
- if (!USE_QUEUE_STATS || !m_use_stats)
- m_queue.remove_nostats(elem);
+ if (!NL_USE_QUEUE_STATS || !m_use_stats)
+ m_queue.remove<false>(elem);
else
- m_queue.remove(elem);
+ m_queue.remove<true>(elem);
}
/* Control functions */
@@ -1532,10 +1586,10 @@ namespace netlist
/* state handling */
- plib::state_manager_t &run_state_manager() { return m_state->run_state_manager(); }
+ plib::state_manager_t &run_state_manager() noexcept { return m_state->run_state_manager(); }
/* only used by nltool to create static c-code */
- devices::NETLIB_NAME(solver) *solver() const NL_NOEXCEPT { return m_solver; }
+ devices::NETLIB_NAME(solver) *solver() const noexcept { return m_solver; }
/* force late type resolution */
template <typename X = devices::NETLIB_NAME(solver)>
@@ -1545,21 +1599,21 @@ namespace netlist
return static_cast<X *>(m_solver)->gmin();
}
- netlist_state_t &nlstate() NL_NOEXCEPT { return *m_state; }
- const netlist_state_t &nlstate() const { return *m_state; }
+ netlist_state_t &nlstate() noexcept { return *m_state; }
+ const netlist_state_t &nlstate() const noexcept { return *m_state; }
- log_type & log() { return m_state->log(); }
- const log_type &log() const { return m_state->log(); }
+ log_type & log() NL_NOEXCEPT { return m_state->log(); }
+ const log_type &log() const NL_NOEXCEPT { return m_state->log(); }
- void print_stats() const;
+ void print_stats() const NL_NOEXCEPT;
- bool stats_enabled() const { return m_use_stats; }
- void enable_stats(bool val) { m_use_stats = val; }
+ bool stats_enabled() const noexcept { return m_use_stats; }
+ void enable_stats(bool val) noexcept { m_use_stats = val; }
private:
- template <bool KEEP_STATS>
- void process_queue_stats(const netlist_time delta) NL_NOEXCEPT;
+ template <bool KEEP_STATS, typename MCT>
+ void process_queue_stats(netlist_time delta, MCT *mainclock) NL_NOEXCEPT;
plib::unique_ptr<netlist_state_t> m_state;
devices::NETLIB_NAME(solver) * m_solver;
@@ -1574,8 +1628,8 @@ namespace netlist
bool m_use_stats;
// performance
- nperftime_t<true> m_stat_mainloop;
- nperfcount_t<true> m_perf_out_processed;
+ plib::pperftime_t<true> m_stat_mainloop;
+ plib::pperfcount_t<true> m_perf_out_processed;
};
// -----------------------------------------------------------------------------
@@ -1708,27 +1762,25 @@ namespace netlist
}
}
- inline void detail::net_t::push_to_queue(const netlist_time delay) NL_NOEXCEPT
+ inline void detail::net_t::push_to_queue(netlist_time delay) NL_NOEXCEPT
{
if ((num_cons() != 0))
{
- auto &lexec(exec());
- const auto nst(lexec.time() + delay);
+ m_next_scheduled_time = exec().time() + delay;
if (is_queued())
- lexec.qremove(this);
+ exec().qremove(this);
if (!m_list_active.empty())
{
m_in_queue = queue_status::QUEUED;
- lexec.qpush(queue_t::entry_t(nst, this));
+ exec().qpush(queue_t::entry_t(m_next_scheduled_time, this));
}
else
{
m_in_queue = queue_status::DELAYED_DUE_TO_INACTIVE;
update_inputs();
}
- m_next_scheduled_time = nst;
}
}
@@ -1743,7 +1795,7 @@ namespace netlist
if (m_next_scheduled_time > exec().time())
{
m_in_queue = queue_status::QUEUED; /* pending */
- exec().qpush({m_next_scheduled_time, this});
+ exec().qpush(detail::queue_t::entry_t(m_next_scheduled_time, this));
}
else
{
@@ -1808,7 +1860,7 @@ namespace netlist
nl_assert(terminal_state() != STATE_INP_PASSIVE);
//if (net().Q() != m_Q)
// printf("term: %s, %d %d TS %d\n", this->name().c_str(), net().Q(), m_Q, terminal_state());
-#if USE_COPY_INSTEAD_OF_REFERENCE
+#if NL_USE_COPY_INSTEAD_OF_REFERENCE
return m_Q;
#else
return net().Q();
@@ -1861,10 +1913,110 @@ namespace netlist
template <typename O>
state_array<T,N>::state_array(O &owner, const pstring &name, const T & value)
{
- owner.state().save(owner, m_value, owner.name(), name);
+ owner.state().save(owner, *static_cast<std::array<T, N> *>(this), owner.name(), name);
for (std::size_t i=0; i<N; i++)
- m_value[i] = value;
+ (*this)[i] = value;
}
+
+ // -----------------------------------------------------------------------------
+ // Hot section
+ //
+ // Any changes below will impact performance.
+ // -----------------------------------------------------------------------------
+
+ template <bool KEEP_STATS, typename T>
+ inline void detail::net_t::process(const T mask, netlist_sig_t sig)
+ {
+ m_cur_Q = sig;
+
+ if (KEEP_STATS)
+ {
+ for (auto & p : m_list_active)
+ {
+ p.set_copied_input(sig);
+ auto *stats = p.device().m_stats.get();
+ stats->m_stat_call_count.inc();
+ if ((p.terminal_state() & mask))
+ {
+ auto g(stats->m_stat_total_time.guard());
+ p.m_delegate();
+ }
+ }
+ }
+ else
+ {
+ for (auto &p : m_list_active)
+ {
+ p.set_copied_input(sig);
+ if ((p.terminal_state() & mask))
+ p.m_delegate();
+ }
+ }
+ }
+
+ template <bool KEEP_STATS>
+ inline void detail::net_t::update_devs() NL_NOEXCEPT
+ {
+ nl_assert(this->isRailNet());
+
+ m_in_queue = queue_status::DELIVERED; /* mark as taken ... */
+ if (m_new_Q ^ m_cur_Q)
+ process<KEEP_STATS>((m_new_Q << core_terminal_t::INP_LH_SHIFT)
+ | (m_cur_Q << core_terminal_t::INP_HL_SHIFT), m_new_Q);
+ }
+
+ template <bool KEEP_STATS, typename MCT>
+ inline void netlist_t::process_queue_stats(const netlist_time delta, MCT *mainclock) NL_NOEXCEPT
+ {
+ netlist_time stop(m_time + delta);
+
+ qpush(detail::queue_t::entry_t(stop, nullptr));
+
+ if (m_mainclock == nullptr)
+ {
+ detail::queue_t::entry_t e(m_queue.pop());
+ m_time = e.m_exec_time;
+ while (e.m_object != nullptr)
+ {
+ e.m_object->template update_devs<KEEP_STATS>();
+ if (KEEP_STATS)
+ m_perf_out_processed.inc();
+ e = m_queue.pop();
+ m_time = e.m_exec_time;
+ }
+ }
+ else
+ {
+ logic_net_t &mc_net(mainclock->m_Q.net());
+ const netlist_time inc(mainclock->m_inc);
+ netlist_time mc_time(mc_net.next_scheduled_time());
+
+ do
+ {
+ while (m_queue.top().m_exec_time > mc_time)
+ {
+ m_time = mc_time;
+ mc_net.toggle_new_Q();
+ mc_net.update_devs<KEEP_STATS>();
+ mc_time += inc;
+ }
+
+ detail::queue_t::entry_t e(m_queue.pop());
+ m_time = e.m_exec_time;
+ if (e.m_object != nullptr)
+ {
+ e.m_object->template update_devs<KEEP_STATS>();
+ if (KEEP_STATS)
+ m_perf_out_processed.inc();
+ }
+ else
+ break;
+ } while (true); //while (e.m_object != nullptr);
+ mc_net.set_next_scheduled_time(mc_time);
+ }
+ }
+
+
} // namespace netlist
namespace plib
diff --git a/src/lib/netlist/nl_config.h b/src/lib/netlist/nl_config.h
index f2005602443..ae3d73a08b7 100644
--- a/src/lib/netlist/nl_config.h
+++ b/src/lib/netlist/nl_config.h
@@ -28,8 +28,8 @@
* Your mileage may vary.
*
*/
-#ifndef USE_MEMPOOL
-#define USE_MEMPOOL (1)
+#ifndef NL_USE_MEMPOOL
+#define NL_USE_MEMPOOL (1)
#endif
/*! Enable queue statistics.
@@ -39,8 +39,8 @@
* only needed during development.
*
*/
-#ifndef USE_QUEUE_STATS
-#define USE_QUEUE_STATS (0)
+#ifndef NL_USE_QUEUE_STATS
+#define NL_USE_QUEUE_STATS (0)
#endif
/*! Store input values in logic_terminal_t.
@@ -50,11 +50,11 @@
* This approach is stricter and should identify bugs in
* the netlist core faster.
* By default it is disabled since it is not as fast as
- * the default approach. It is up to 5% slower.
+ * the default approach. It is up to 10% slower.
*
*/
-#ifndef USE_COPY_INSTEAD_OF_REFERENCE
-#define USE_COPY_INSTEAD_OF_REFERENCE (0)
+#ifndef NL_USE_COPY_INSTEAD_OF_REFERENCE
+#define NL_USE_COPY_INSTEAD_OF_REFERENCE (0)
#endif
/*
@@ -63,7 +63,9 @@
* setting param USE_DEACTIVATE for the device.
*/
-#define USE_TRUTHTABLE_7448 (0)
+#ifndef NL_USE_TRUTHTABLE_7448
+#define NL_USE_TRUTHTABLE_7448 (0)
+#endif
/*
* FIXME: The truthtable implementation of 74107 (JK-Flipflop)
@@ -72,7 +74,9 @@
* It will completely nuke performance for pong.
*/
-#define USE_TRUTHTABLE_74107 (0)
+#ifndef NL_USE_TRUTHTABLE_74107
+#define NL_USE_TRUTHTABLE_74107 (0)
+#endif
//============================================================
// DEBUGGING
diff --git a/src/lib/netlist/nl_errstr.h b/src/lib/netlist/nl_errstr.h
index 5e5a7037445..4681d027d79 100644
--- a/src/lib/netlist/nl_errstr.h
+++ b/src/lib/netlist/nl_errstr.h
@@ -14,7 +14,7 @@
#define PERRMSG(name, str) \
struct name \
{ \
- operator pstring() const { return str; } \
+ operator pstring() const noexcept { return str; } \
};
#define PERRMSGV(name, narg, str) \
@@ -23,7 +23,7 @@
template<typename... Args> name(Args&&... args) \
: m_m(plib::pfmt(str)(std::forward<Args>(args)...)) \
{ static_assert(narg == sizeof...(args), "Argument count mismatch"); } \
- operator pstring() const { return m_m; } \
+ operator pstring() const noexcept { return m_m; } \
pstring m_m; \
};
@@ -125,9 +125,6 @@ namespace netlist
// nld_solver.cpp
- PERRMSGV(MF_UNKNOWN_SOLVER_TYPE, 1, "Unknown solver type: {1}")
- PERRMSGV(MF_NETGROUP_SIZE_EXCEEDED_1, 1, "Encountered netgroup with > {1} nets")
-
PERRMSGV(MI_NO_SPECIFIC_SOLVER, 1, "No specific solver found for netlist of size {1}")
// nld_mm5837.cpp
diff --git a/src/lib/netlist/nl_factory.cpp b/src/lib/netlist/nl_factory.cpp
index f8fc40d27db..74e91ea2ee1 100644
--- a/src/lib/netlist/nl_factory.cpp
+++ b/src/lib/netlist/nl_factory.cpp
@@ -76,9 +76,9 @@ namespace netlist { namespace factory
// factory_lib_entry_t: factory class to wrap macro based chips/elements
// -----------------------------------------------------------------------------
- pool_owned_ptr<device_t> library_element_t::Create(netlist_state_t &anetlist, const pstring &name)
+ unique_pool_ptr<device_t> library_element_t::Create(netlist_state_t &anetlist, const pstring &name)
{
- return pool().make_poolptr<NETLIB_NAME(wrapper)>(anetlist, name);
+ return pool().make_unique<NETLIB_NAME(wrapper)>(anetlist, name);
}
void library_element_t::macro_actions(nlparse_t &nparser, const pstring &name)
diff --git a/src/lib/netlist/nl_factory.h b/src/lib/netlist/nl_factory.h
index b0c73a6a198..f633962d86d 100644
--- a/src/lib/netlist/nl_factory.h
+++ b/src/lib/netlist/nl_factory.h
@@ -55,7 +55,7 @@ namespace factory {
COPYASSIGNMOVE(element_t, default)
- virtual pool_owned_ptr<device_t> Create(netlist_state_t &anetlist, const pstring &name) = 0;
+ virtual unique_pool_ptr<device_t> Create(netlist_state_t &anetlist, const pstring &name) = 0;
virtual void macro_actions(nlparse_t &nparser, const pstring &name)
{
plib::unused_var(nparser);
@@ -85,9 +85,9 @@ namespace factory {
const pstring &def_param, const pstring &sourcefile)
: element_t(name, classname, def_param, sourcefile) { }
- pool_owned_ptr<device_t> Create(netlist_state_t &anetlist, const pstring &name) override
+ unique_pool_ptr<device_t> Create(netlist_state_t &anetlist, const pstring &name) override
{
- return pool().make_poolptr<C>(anetlist, name);
+ return pool().make_unique<C>(anetlist, name);
}
};
@@ -147,7 +147,7 @@ namespace factory {
{
}
- pool_owned_ptr<device_t> Create(netlist_state_t &anetlist, const pstring &name) override;
+ unique_pool_ptr<device_t> Create(netlist_state_t &anetlist, const pstring &name) override;
void macro_actions(nlparse_t &nparser, const pstring &name) override;
diff --git a/src/lib/netlist/nl_lists.h b/src/lib/netlist/nl_lists.h
deleted file mode 100644
index f4b1c4e8ff5..00000000000
--- a/src/lib/netlist/nl_lists.h
+++ /dev/null
@@ -1,358 +0,0 @@
-// license:GPL-2.0+
-// copyright-holders:Couriersud
-/*
- * nllists.h
- *
- */
-
-#pragma once
-
-#ifndef NLLISTS_H_
-#define NLLISTS_H_
-
-#include "plib/pchrono.h"
-#include "plib/plists.h"
-#include "plib/ptypes.h"
-
-#include "nl_config.h"
-#include "nltypes.h"
-
-#include <algorithm>
-#include <atomic>
-#include <mutex>
-#include <thread>
-#include <utility>
-
-
-// ----------------------------------------------------------------------------------------
-// timed queue
-// ----------------------------------------------------------------------------------------
-
-namespace netlist
-{
- //FIXME: move to an appropriate place
- template<bool enabled_ = true>
- class pspin_mutex
- {
- public:
- pspin_mutex() noexcept = default;
- void lock() noexcept{ while (m_lock.test_and_set(std::memory_order_acquire)) { } }
- void unlock() noexcept { m_lock.clear(std::memory_order_release); }
- private:
- PALIGNAS_CACHELINE()
- std::atomic_flag m_lock = ATOMIC_FLAG_INIT;
- };
-
- template<>
- class pspin_mutex<false>
- {
- public:
- void lock() const noexcept { }
- void unlock() const noexcept { }
- };
-
- template <class Element, class Time>
- struct pqentry_t final
- {
- constexpr pqentry_t() noexcept : m_exec_time(), m_object(nullptr) { }
- constexpr pqentry_t(const Time t, const Element o) noexcept : m_exec_time(t), m_object(o) { }
-#if 0
- ~pqentry_t() = default;
- constexpr pqentry_t(const pqentry_t &e) noexcept = default;
- constexpr pqentry_t(pqentry_t &&e) noexcept = default;
- pqentry_t& operator=(pqentry_t && other) noexcept = default;
- pqentry_t& operator=(const pqentry_t &other) noexcept = default;
-
- void swap(pqentry_t &other) noexcept
- {
- std::swap(m_exec_time, other.m_exec_time);
- std::swap(m_object, other.m_object);
- }
-#endif
- struct QueueOp
- {
- inline static constexpr bool less(const pqentry_t &lhs, const pqentry_t &rhs) noexcept
- {
- return (lhs.m_exec_time < rhs.m_exec_time);
- }
-
- inline static constexpr bool lessequal(const pqentry_t &lhs, const pqentry_t &rhs) noexcept
- {
- return (lhs.m_exec_time <= rhs.m_exec_time);
- }
-
- inline static constexpr bool equal(const pqentry_t &lhs, const pqentry_t &rhs) noexcept
- {
- return lhs.m_object == rhs.m_object;
- }
-
- inline static constexpr bool equal(const pqentry_t &lhs, const Element &rhs) noexcept
- {
- return lhs.m_object == rhs;
- }
-
- inline static constexpr pqentry_t never() noexcept { return pqentry_t(Time::never(), nullptr); }
- };
-
- Time m_exec_time;
- Element m_object;
- };
-
- /* Use TS = true for a threadsafe queue */
- template <class T, bool TS, bool KEEPSTAT, class QueueOp = typename T::QueueOp>
- class timed_queue_linear : plib::nocopyassignmove
- {
- public:
-
- explicit timed_queue_linear(const std::size_t list_size)
- : m_list(list_size)
- {
- clear();
- }
-
- std::size_t capacity() const noexcept { return m_list.capacity() - 1; }
- bool empty() const noexcept { return (m_end == &m_list[1]); }
-
- void push(T && e) noexcept
- {
- /* Lock */
- lock_guard_type lck(m_lock);
- T * i(m_end-1);
- for (; QueueOp::less(*(i), e); --i)
- {
- *(i+1) = *(i);
- m_prof_sortmove.inc();
- }
- *(i+1) = std::move(e);
- ++m_end;
- m_prof_call.inc();
- }
-
- void push_nostats(T && e) noexcept
- {
- /* Lock */
- lock_guard_type lck(m_lock);
-#if 1
- T * i(m_end-1);
- for (; QueueOp::less(*(i), e); --i)
- {
- *(i+1) = *(i);
- }
- *(i+1) = std::move(e);
- ++m_end;
-#else
- T * i(m_end++);
- while (QueueOp::less(*(--i), e))
- {
- *(i+1) = *(i);
- }
- *(i+1) = std::move(e);
-#endif
- }
-
- T pop() noexcept { return *(--m_end); }
- const T &top() const noexcept { return *(m_end-1); }
-
- template <class R>
- void remove(const R &elem) noexcept
- {
- m_prof_remove.inc();
- remove_nostats(elem);
- }
-
- template <class R>
- void remove_nostats(const R &elem) noexcept
- {
- /* Lock */
- lock_guard_type lck(m_lock);
-#if 1
- for (T * i = m_end - 1; i > &m_list[0]; --i)
- {
- if (QueueOp::equal(*i, elem))
- {
- std::copy(i+1, m_end--, i);
- return;
- }
- }
-#else
- for (T * i = &m_list[1]; i < m_end; ++i)
- {
- if (QueueOp::equal(*i, elem))
- {
- std::copy(i+1, m_end--, i);
- return;
- }
- }
-#endif
- }
-
- void retime(T && elem) noexcept
- {
- /* Lock */
- lock_guard_type lck(m_lock);
- m_prof_retime.inc();
-
- for (T * i = m_end - 1; i > &m_list[0]; --i)
- {
- if (QueueOp::equal(*i, elem)) // partial equal!
- {
- *i = std::move(elem);
- while (QueueOp::less(*(i-1), *i))
- {
- std::swap(*(i-1), *i);
- --i;
- }
- while (i < m_end && QueueOp::less(*i, *(i+1)))
- {
- std::swap(*(i+1), *i);
- ++i;
- }
- return;
- }
- }
- }
-
- void clear() noexcept
- {
- lock_guard_type lck(m_lock);
- m_end = &m_list[0];
- /* put an empty element with maximum time into the queue.
- * the insert algo above will run into this element and doesn't
- * need a comparison with queue start.
- */
- m_list[0] = QueueOp::never();
- m_end++;
- }
-
- // save state support & mame disasm
-
- const T *listptr() const noexcept { return &m_list[1]; }
- std::size_t size() const noexcept { return static_cast<std::size_t>(m_end - &m_list[1]); }
- const T & operator[](const std::size_t index) const noexcept { return m_list[ 1 + index]; }
- private:
- using mutex_type = pspin_mutex<TS>;
- using lock_guard_type = std::lock_guard<mutex_type>;
-
- mutex_type m_lock;
- PALIGNAS_CACHELINE()
- T * m_end;
- //std::vector<T> m_list;
- plib::aligned_vector<T> m_list;
-
- public:
- // profiling
- nperfcount_t<KEEPSTAT> m_prof_sortmove;
- nperfcount_t<KEEPSTAT> m_prof_call;
- nperfcount_t<KEEPSTAT> m_prof_remove;
- nperfcount_t<KEEPSTAT> m_prof_retime;
- };
-
- template <class T, bool TS, bool KEEPSTAT, class QueueOp = typename T::QueueOp>
- class timed_queue_heap : plib::nocopyassignmove
- {
- public:
-
- struct compare
- {
- constexpr bool operator()(const T &a, const T &b) const { return QueueOp::lessequal(b,a); }
- };
-
- explicit timed_queue_heap(const std::size_t list_size)
- : m_list(list_size)
- {
- clear();
- }
-
- std::size_t capacity() const noexcept { return m_list.capacity(); }
- bool empty() const noexcept { return &m_list[0] == m_end; }
-
- void push(T &&e) noexcept
- {
- /* Lock */
- lock_guard_type lck(m_lock);
- *m_end++ = e;
- std::push_heap(&m_list[0], m_end, compare());
- m_prof_call.inc();
- }
-
- T pop() noexcept
- {
- T ret(m_list[0]);
- std::pop_heap(&m_list[0], m_end, compare());
- m_end--;
- return ret;
- }
-
- const T &top() const noexcept { return m_list[0]; }
-
- template <class R>
- void remove(const R &elem) noexcept
- {
- /* Lock */
- lock_guard_type lck(m_lock);
- for (T * i = m_end - 1; i >= &m_list[0]; i--)
- {
- if (QueueOp::equal(*i, elem))
- {
- m_end--;
- for (;i < m_end; i++)
- *i = std::move(*(i+1));
- std::make_heap(&m_list[0], m_end, compare());
- return;
- }
- }
- }
-
- void retime(const T &elem) noexcept
- {
- /* Lock */
- lock_guard_type lck(m_lock);
- for (T * i = m_end - 1; i >= &m_list[0]; i--)
- {
- if (QueueOp::equal(*i, elem)) // partial equal!
- {
- *i = elem;
- std::make_heap(&m_list[0], m_end, compare());
- return;
- }
- }
- }
-
- void clear()
- {
- lock_guard_type lck(m_lock);
- m_list.clear();
- m_end = &m_list[0];
- }
-
- // save state support & mame disasm
-
- constexpr const T *listptr() const { return &m_list[0]; }
- constexpr std::size_t size() const noexcept { return m_list.size(); }
- constexpr const T & operator[](const std::size_t index) const { return m_list[ 0 + index]; }
- private:
- using mutex_type = pspin_mutex<TS>;
- using lock_guard_type = std::lock_guard<mutex_type>;
-
- mutex_type m_lock;
- std::vector<T> m_list;
- T *m_end;
-
- public:
- // profiling
- nperfcount_t<KEEPSTAT> m_prof_sortmove;
- nperfcount_t<KEEPSTAT> m_prof_call;
- };
-
- /*
- * Use timed_queue_heap to use stdc++ heap functions instead of linear processing.
- *
- * This slows down processing by about 25% on a Kaby Lake.
- */
-
- template <class T, bool TS, bool KEEPSTAT, class QueueOp = typename T::QueueOp>
- using timed_queue = timed_queue_linear<T, TS, KEEPSTAT, QueueOp>;
-
-} // namespace netlist
-
-#endif /* NLLISTS_H_ */
diff --git a/src/lib/netlist/nl_parser.cpp b/src/lib/netlist/nl_parser.cpp
index 2ab43c99074..c0cf595119c 100644
--- a/src/lib/netlist/nl_parser.cpp
+++ b/src/lib/netlist/nl_parser.cpp
@@ -413,10 +413,10 @@ void parser_t::device(const pstring &dev_type)
nl_double parser_t::eval_param(const token_t &tok)
{
- static std::array<pstring, 6> macs = {"", "RES_K", "RES_M", "CAP_U", "CAP_N", "CAP_P"};
- static std::array<nl_double, 6> facs = {1, 1e3, 1e6, 1e-6, 1e-9, 1e-12};
+ static std::array<pstring, 7> macs = {"", "RES_R", "RES_K", "RES_M", "CAP_U", "CAP_N", "CAP_P"};
+ static std::array<nl_double, 7> facs = {1, 1, 1e3, 1e6, 1e-6, 1e-9, 1e-12};
std::size_t f=0;
- nl_double ret;
+ nl_double ret(0);
for (std::size_t i=1; i<macs.size();i++)
if (tok.str() == macs[i])
@@ -429,7 +429,7 @@ nl_double parser_t::eval_param(const token_t &tok)
}
else
{
- bool err;
+ bool err(false);
ret = plib::pstonum_ne<nl_double, true>(tok.str(), err);
if (err)
error(plib::pfmt("Parameter value <{1}> not double \n")(tok.str()));
diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp
index 5d6f283bf56..597962bea3b 100644
--- a/src/lib/netlist/nl_setup.cpp
+++ b/src/lib/netlist/nl_setup.cpp
@@ -87,12 +87,21 @@ namespace netlist
void nlparse_t::include(const pstring &netlist_name)
{
- for (auto &source : m_sources)
+#if 0
+ for (auto &base : m_sources)
{
- if (source->parse(*this, netlist_name))
+ auto source(dynamic_cast<source_netlist_t *>(base.get()));
+ if (source && source->parse(*this, netlist_name))
return;
}
log().fatal(MF_NOT_FOUND_IN_SOURCE_COLLECTION(netlist_name));
+#endif
+ if (m_sources.for_all<source_netlist_t>(netlist_name, [this, &netlist_name] (auto &src)
+ {
+ return src->parse(*this, netlist_name);
+ }))
+ return;
+ log().fatal(MF_NOT_FOUND_IN_SOURCE_COLLECTION(netlist_name));
}
@@ -206,9 +215,9 @@ namespace netlist
return false;
}
- bool nlparse_t::parse_stream(plib::unique_ptr<std::istream> &&istrm, const pstring &name)
+ bool nlparse_t::parse_stream(plib::psource_t::stream_ptr &&istrm, const pstring &name)
{
- plib::ppreprocessor y(&m_defines);
+ plib::ppreprocessor y(m_includes, &m_defines);
plib::ppreprocessor &x(y.process(std::move(istrm)));
return parser_t(std::move(x), *this).parse(name);
//return parser_t(std::move(plib::ppreprocessor(&m_defines).process(std::move(istrm))), *this).parse(name);
@@ -239,12 +248,6 @@ setup_t::setup_t(netlist_state_t &nlstate)
setup_t::~setup_t() noexcept
{
- // FIXME: can't see a need any longer
- m_links.clear();
- m_params.clear();
- m_terminals.clear();
- m_param_values.clear();
- m_sources.clear();
}
pstring setup_t::termtype_as_str(detail::core_terminal_t &in) const
@@ -474,7 +477,7 @@ devices::nld_base_proxy *setup_t::get_d_a_proxy(detail::core_terminal_t &out)
proxy = new_proxy.get();
- m_nlstate.add_dev(new_proxy->name(), std::move(new_proxy));
+ m_nlstate.register_device(new_proxy->name(), std::move(new_proxy));
}
return proxy;
}
@@ -513,7 +516,7 @@ devices::nld_base_proxy *setup_t::get_a_d_proxy(detail::core_terminal_t &inp)
inp.net().core_terms().clear(); // clear the list
}
ret->out().net().add_terminal(inp);
- m_nlstate.add_dev(new_proxy->name(), std::move(new_proxy));
+ m_nlstate.register_device(new_proxy->name(), std::move(new_proxy));
return ret;
}
}
@@ -635,7 +638,7 @@ void setup_t::connect_terminals(detail::core_terminal_t &t1, detail::core_termin
{
log().debug("adding analog net ...\n");
// FIXME: Nets should have a unique name
- auto anet = pool().make_poolptr<analog_net_t>(m_nlstate,"net." + t1.name());
+ auto anet = pool().make_owned<analog_net_t>(m_nlstate,"net." + t1.name());
auto anetp = anet.get();
m_nlstate.register_net(std::move(anet));
t1.set_net(anetp);
@@ -824,7 +827,7 @@ void setup_t::register_dynamic_log_devices()
auto nc = factory().factory_by_name("LOG")->Create(m_nlstate, name);
register_link(name + ".I", ll);
log().debug(" dynamic link {1}: <{2}>\n",ll, name);
- m_nlstate.add_dev(nc->name(), std::move(nc));
+ m_nlstate.register_device(nc->name(), std::move(nc));
}
}
}
@@ -970,19 +973,19 @@ class logic_family_std_proxy_t : public logic_family_desc_t
{
public:
logic_family_std_proxy_t() = default;
- pool_owned_ptr<devices::nld_base_d_to_a_proxy> create_d_a_proxy(netlist_state_t &anetlist,
+ unique_pool_ptr<devices::nld_base_d_to_a_proxy> create_d_a_proxy(netlist_state_t &anetlist,
const pstring &name, logic_output_t *proxied) const override;
- pool_owned_ptr<devices::nld_base_a_to_d_proxy> create_a_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *proxied) const override;
+ unique_pool_ptr<devices::nld_base_a_to_d_proxy> create_a_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *proxied) const override;
};
-pool_owned_ptr<devices::nld_base_d_to_a_proxy> logic_family_std_proxy_t::create_d_a_proxy(netlist_state_t &anetlist,
+unique_pool_ptr<devices::nld_base_d_to_a_proxy> logic_family_std_proxy_t::create_d_a_proxy(netlist_state_t &anetlist,
const pstring &name, logic_output_t *proxied) const
{
- return pool().make_poolptr<devices::nld_d_to_a_proxy>(anetlist, name, proxied);
+ return pool().make_unique<devices::nld_d_to_a_proxy>(anetlist, name, proxied);
}
-pool_owned_ptr<devices::nld_base_a_to_d_proxy> logic_family_std_proxy_t::create_a_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *proxied) const
+unique_pool_ptr<devices::nld_base_a_to_d_proxy> logic_family_std_proxy_t::create_a_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *proxied) const
{
- return pool().make_poolptr<devices::nld_a_to_d_proxy>(anetlist, name, proxied);
+ return pool().make_unique<devices::nld_a_to_d_proxy>(anetlist, name, proxied);
}
@@ -1019,19 +1022,13 @@ const logic_family_desc_t *setup_t::family_from_model(const pstring &model)
// Sources
// ----------------------------------------------------------------------------------------
-plib::unique_ptr<std::istream> setup_t::get_data_stream(const pstring &name)
+plib::psource_t::stream_ptr setup_t::get_data_stream(const pstring &name)
{
- for (auto &source : m_sources)
- {
- if (source->type() == source_t::DATA)
- {
- auto strm = source->stream(name);
- if (strm)
- return strm;
- }
- }
+ auto strm = m_sources.get_stream<source_data_t>(name);
+ if (strm)
+ return strm;
log().warning(MW_DATA_1_NOT_FOUND(name));
- return plib::unique_ptr<std::istream>(nullptr);
+ return plib::psource_t::stream_ptr(nullptr);
}
@@ -1043,7 +1040,7 @@ void setup_t::delete_empty_nets()
{
m_nlstate.nets().erase(
std::remove_if(m_nlstate.nets().begin(), m_nlstate.nets().end(),
- [](pool_owned_ptr<detail::net_t> &x)
+ [](owned_pool_ptr<detail::net_t> &x)
{
if (x->num_cons() == 0)
{
@@ -1071,7 +1068,7 @@ void setup_t::prepare_to_run()
if ( factory().is_class<devices::NETLIB_NAME(solver)>(e.second)
|| factory().is_class<devices::NETLIB_NAME(netlistparams)>(e.second))
{
- m_nlstate.add_dev(e.first, pool_owned_ptr<device_t>(e.second->Create(m_nlstate, e.first)));
+ m_nlstate.register_device(e.first, e.second->Create(m_nlstate, e.first));
}
}
@@ -1093,8 +1090,8 @@ void setup_t::prepare_to_run()
if ( !factory().is_class<devices::NETLIB_NAME(solver)>(e.second)
&& !factory().is_class<devices::NETLIB_NAME(netlistparams)>(e.second))
{
- auto dev = pool_owned_ptr<device_t>(e.second->Create(m_nlstate, e.first));
- m_nlstate.add_dev(dev->name(), std::move(dev));
+ auto dev = e.second->Create(m_nlstate, e.first);
+ m_nlstate.register_device(dev->name(), std::move(dev));
}
}
@@ -1151,7 +1148,7 @@ void setup_t::prepare_to_run()
t->name(), t->m_N.net().name(), t->m_P.net().name()));
t->m_N.net().remove_terminal(t->m_N);
t->m_P.net().remove_terminal(t->m_P);
- m_nlstate.remove_dev(t);
+ m_nlstate.remove_device(t);
}
else
{
@@ -1175,7 +1172,6 @@ void setup_t::prepare_to_run()
for (auto &n : m_nlstate.nets())
for (auto & term : n->core_terms())
{
- //core_device_t *dev = reinterpret_cast<core_device_t *>(term->m_delegate.object());
core_device_t *dev = &term->device();
dev->set_default_delegate(*term);
}
@@ -1186,21 +1182,16 @@ void setup_t::prepare_to_run()
// base sources
// ----------------------------------------------------------------------------------------
-bool source_t::parse(nlparse_t &setup, const pstring &name)
+bool source_netlist_t::parse(nlparse_t &setup, const pstring &name)
{
- if (m_type != SOURCE)
- return false;
+ auto strm(stream(name));
+ if (strm)
+ return setup.parse_stream(std::move(strm), name);
else
- {
- auto strm(stream(name));
- if (strm)
- return setup.parse_stream(std::move(strm), name);
- else
- return false;
- }
+ return false;
}
-plib::unique_ptr<std::istream> source_string_t::stream(const pstring &name)
+source_string_t::stream_ptr source_string_t::stream(const pstring &name)
{
plib::unused_var(name);
auto ret(plib::make_unique<std::istringstream>(m_str));
@@ -1208,7 +1199,7 @@ plib::unique_ptr<std::istream> source_string_t::stream(const pstring &name)
return std::move(ret);
}
-plib::unique_ptr<std::istream> source_mem_t::stream(const pstring &name)
+source_mem_t::stream_ptr source_mem_t::stream(const pstring &name)
{
plib::unused_var(name);
auto ret(plib::make_unique<std::istringstream>(m_str, std::ios_base::binary));
@@ -1216,11 +1207,14 @@ plib::unique_ptr<std::istream> source_mem_t::stream(const pstring &name)
return std::move(ret);
}
-plib::unique_ptr<std::istream> source_file_t::stream(const pstring &name)
+source_file_t::stream_ptr source_file_t::stream(const pstring &name)
{
plib::unused_var(name);
auto ret(plib::make_unique<std::ifstream>(plib::filesystem::u8path(m_filename)));
- return std::move(ret);
+ if (ret->is_open())
+ return std::move(ret);
+ else
+ return stream_ptr(nullptr);
}
bool source_proc_t::parse(nlparse_t &setup, const pstring &name)
@@ -1234,10 +1228,10 @@ bool source_proc_t::parse(nlparse_t &setup, const pstring &name)
return false;
}
-plib::unique_ptr<std::istream> source_proc_t::stream(const pstring &name)
+source_proc_t::stream_ptr source_proc_t::stream(const pstring &name)
{
plib::unused_var(name);
- plib::unique_ptr<std::istream> p(nullptr);
+ stream_ptr p(nullptr);
return p;
}
diff --git a/src/lib/netlist/nl_setup.h b/src/lib/netlist/nl_setup.h
index 318720c7a06..81779d86b85 100644
--- a/src/lib/netlist/nl_setup.h
+++ b/src/lib/netlist/nl_setup.h
@@ -79,7 +79,7 @@ void NETLIST_NAME(name)(netlist::nlparse_t &setup) \
#define SUBMODEL(model, name) \
setup.namespace_push(# name); \
- setup.include(# model); \
+ setup.include(# model); \
/*NETLIST_NAME(model)(setup);*/ \
setup.namespace_pop();
@@ -167,42 +167,38 @@ namespace netlist
};
// ----------------------------------------------------------------------------------------
- // A Generic netlist sources implementation
+ // Specific netlist psource_t implementations
// ----------------------------------------------------------------------------------------
- class source_t
+ class source_netlist_t : public plib::psource_t
{
public:
friend class setup_t;
- enum type_t
- {
- SOURCE,
- DATA
- };
-
- using list_t = std::vector<plib::unique_ptr<source_t>>;
-
- source_t(const type_t type = SOURCE)
- : m_type(type)
+ source_netlist_t()
+ : plib::psource_t()
{}
- COPYASSIGNMOVE(source_t, delete)
-
- virtual ~source_t() noexcept = default;
+ COPYASSIGNMOVE(source_netlist_t, delete)
+ virtual ~source_netlist_t() noexcept = default;
virtual bool parse(nlparse_t &setup, const pstring &name);
+ };
- type_t type() const { return m_type; }
+ class source_data_t : public plib::psource_t
+ {
+ public:
- protected:
- virtual plib::unique_ptr<std::istream> stream(const pstring &name) = 0;
+ friend class setup_t;
- private:
- const type_t m_type;
- };
+ source_data_t()
+ : plib::psource_t()
+ {}
+ COPYASSIGNMOVE(source_data_t, delete)
+ virtual ~source_data_t() noexcept = default;
+ };
// ----------------------------------------------------------------------------------------
// Collection of models
@@ -253,9 +249,9 @@ namespace netlist
void register_frontier(const pstring &attach, const double r_IN, const double r_OUT);
/* register a source */
- void register_source(plib::unique_ptr<source_t> &&src)
+ void register_source(plib::unique_ptr<plib::psource_t> &&src)
{
- m_sources.push_back(std::move(src));
+ m_sources.add_source(std::move(src));
}
void tt_factory_create(tt_desc &desc, const pstring &sourcefile);
@@ -279,7 +275,12 @@ namespace netlist
bool device_exists(const pstring &name) const;
/* FIXME: used by source_t - need a different approach at some time */
- bool parse_stream(plib::unique_ptr<std::istream> &&istrm, const pstring &name);
+ bool parse_stream(plib::psource_t::stream_ptr &&istrm, const pstring &name);
+
+ void add_include(plib::unique_ptr<plib::psource_t> &&inc)
+ {
+ m_includes.add_source(std::move(inc));
+ }
void add_define(const pstring &def, const pstring &val)
{
@@ -314,7 +315,7 @@ namespace netlist
std::vector<link_t> m_links;
std::unordered_map<pstring, pstring> m_param_values;
- source_t::list_t m_sources;
+ plib::psource_collection_t<> m_sources;
factory::list_t m_factory;
@@ -324,6 +325,7 @@ namespace netlist
private:
plib::ppreprocessor::defines_map_type m_defines;
+ plib::psource_collection_t<> m_includes;
setup_t &m_setup;
log_type &m_log;
@@ -364,7 +366,7 @@ namespace netlist
void register_dynamic_log_devices();
void resolve_inputs();
- plib::unique_ptr<std::istream> get_data_stream(const pstring &name);
+ plib::psource_t::stream_ptr get_data_stream(const pstring &name);
factory::list_t &factory() { return m_factory; }
const factory::list_t &factory() const { return m_factory; }
@@ -393,8 +395,15 @@ namespace netlist
/* validation */
- void enable_validation() { m_validation = true; }
- bool is_validation() const { return m_validation; }
+ /* The extended validation mode is not intended for running.
+ * The intention is to identify power pins which are not properly
+ * connected. The downside is that this mode creates a netlist which
+ * is different (and not able to run).
+ *
+ * Extended validation is supported by nltool validate option.
+ */
+ void set_extended_validation(bool val) { m_validation = val; }
+ bool is_extended_validation() const { return m_validation; }
private:
void merge_nets(detail::net_t &thisnet, detail::net_t &othernet);
@@ -425,58 +434,58 @@ namespace netlist
// base sources
// ----------------------------------------------------------------------------------------
- class source_string_t : public source_t
+ class source_string_t : public source_netlist_t
{
public:
source_string_t(const pstring &source)
- : source_t(), m_str(source)
+ : source_netlist_t(), m_str(source)
{
}
protected:
- plib::unique_ptr<std::istream> stream(const pstring &name) override;
+ stream_ptr stream(const pstring &name) override;
private:
pstring m_str;
};
- class source_file_t : public source_t
+ class source_file_t : public source_netlist_t
{
public:
source_file_t(const pstring &filename)
- : source_t(), m_filename(filename)
+ : source_netlist_t(), m_filename(filename)
{
}
protected:
- plib::unique_ptr<std::istream> stream(const pstring &name) override;
+ stream_ptr stream(const pstring &name) override;
private:
pstring m_filename;
};
- class source_mem_t : public source_t
+ class source_mem_t : public source_netlist_t
{
public:
source_mem_t(const char *mem)
- : source_t(), m_str(mem)
+ : source_netlist_t(), m_str(mem)
{
}
protected:
- plib::unique_ptr<std::istream> stream(const pstring &name) override;
+ stream_ptr stream(const pstring &name) override;
private:
pstring m_str;
};
- class source_proc_t : public source_t
+ class source_proc_t : public source_netlist_t
{
public:
source_proc_t(const pstring &name, void (*setup_func)(nlparse_t &))
- : source_t(),
+ : source_netlist_t(),
m_setup_func(setup_func),
m_setup_func_name(name)
{
@@ -485,7 +494,7 @@ namespace netlist
bool parse(nlparse_t &setup, const pstring &name) override;
protected:
- plib::unique_ptr<std::istream> stream(const pstring &name) override;
+ stream_ptr stream(const pstring &name) override;
private:
void (*m_setup_func)(nlparse_t &);
diff --git a/src/lib/netlist/nltypes.h b/src/lib/netlist/nltypes.h
index 91dc83547e5..75470ca2ebf 100644
--- a/src/lib/netlist/nltypes.h
+++ b/src/lib/netlist/nltypes.h
@@ -68,17 +68,6 @@ namespace netlist
using log_type = plib::plog_base<callbacks_t, NL_DEBUG>;
-
- //============================================================
- // Performance tracking
- //============================================================
-
- template<bool enabled_>
- using nperftime_t = plib::chrono::timer<plib::chrono::exact_ticks, enabled_>;
-
- template<bool enabled_>
- using nperfcount_t = plib::chrono::counter<enabled_>;
-
//============================================================
// Types needed by various includes
//============================================================
@@ -89,7 +78,7 @@ namespace netlist
*
*/
-#if (USE_MEMPOOL)
+#if (NL_USE_MEMPOOL)
using nlmempool = plib::mempool;
#else
using nlmempool = plib::aligned_arena;
@@ -99,7 +88,7 @@ namespace netlist
*
*/
template <typename T>
- using pool_owned_ptr = nlmempool::owned_pool_ptr<T>;
+ using owned_pool_ptr = nlmempool::owned_pool_ptr<T>;
/*! Unique pointer type for pooled allocations.
*
diff --git a/src/lib/netlist/plib/gmres.h b/src/lib/netlist/plib/gmres.h
index c76c257ce21..8c5c724c581 100644
--- a/src/lib/netlist/plib/gmres.h
+++ b/src/lib/netlist/plib/gmres.h
@@ -35,10 +35,11 @@ namespace plib
template <typename FT, int SIZE>
struct mat_precondition_ILU
{
- using mat_type = plib::matrix_compressed_rows_t<FT, SIZE>;
+ using mat_type = plib::pmatrix_cr_t<FT, SIZE>;
+ using matLU_type = plib::pLUmatrix_cr_t<mat_type>;
mat_precondition_ILU(std::size_t size, std::size_t ilu_scale = 4
- , std::size_t bw = plib::matrix_compressed_rows_t<FT, SIZE>::FILL_INFINITY)
+ , std::size_t bw = plib::pmatrix_cr_t<FT, SIZE>::FILL_INFINITY)
: m_mat(static_cast<typename mat_type::index_type>(size))
, m_LU(static_cast<typename mat_type::index_type>(size))
, m_ILU_scale(static_cast<std::size_t>(ilu_scale))
@@ -50,9 +51,7 @@ namespace plib
void build(M &fill)
{
m_mat.build_from_fill_mat(fill, 0);
- m_LU.gaussian_extend_fill_mat(fill);
- m_LU.build_from_fill_mat(fill, m_ILU_scale, m_band_width); // ILU(2)
- //m_LU.build_from_fill_mat(fill, 9999, 20); // Band matrix width 20
+ m_LU.build(fill, m_ILU_scale);
}
@@ -64,15 +63,11 @@ namespace plib
void precondition()
{
- if (m_ILU_scale < 1)
- m_LU.raw_copy_from(m_mat);
- else
- m_LU.reduction_copy_from(m_mat);
- m_LU.incomplete_LU_factorization();
+ m_LU.incomplete_LU_factorization(m_mat);
}
template<typename V>
- void solve_LU_inplace(V &v)
+ void solve_inplace(V &v)
{
m_LU.solveLU(v);
}
@@ -80,7 +75,7 @@ namespace plib
PALIGNAS_VECTOROPT()
mat_type m_mat;
PALIGNAS_VECTOROPT()
- mat_type m_LU;
+ matLU_type m_LU;
std::size_t m_ILU_scale;
std::size_t m_band_width;
};
@@ -91,6 +86,7 @@ namespace plib
mat_precondition_diag(std::size_t size, int dummy = 0)
: m_mat(size)
, m_diag(size)
+ , nzcol(size)
{
plib::unused_var(dummy);
}
@@ -99,6 +95,18 @@ namespace plib
void build(M &fill)
{
m_mat.build_from_fill_mat(fill, 0);
+ for (std::size_t i = 0; i< m_diag.size(); i++)
+ {
+ for (std::size_t j = 0; j< m_diag.size(); j++)
+ {
+ std::size_t k=m_mat.row_idx[j];
+ while (m_mat.col_idx[k] < i && k < m_mat.row_idx[j+1])
+ k++;
+ if (m_mat.col_idx[k] == i && k < m_mat.row_idx[j+1])
+ nzcol[i].push_back(k);
+ }
+ nzcol[i].push_back(static_cast<std::size_t>(-1));
+ }
}
template<typename R, typename V>
@@ -111,19 +119,59 @@ namespace plib
{
for (std::size_t i = 0; i< m_diag.size(); i++)
{
- m_diag[i] = 1.0 / m_mat.A[m_mat.diag[i]];
+ // ILUT: 265%
+ FT v(0.0);
+#if 0
+ // doesn't works, Mame perforamnce drops significantly%
+ // 136%
+ for (std::size_t j = m_mat.row_idx[i]; j< m_mat.row_idx[i+1]; j++)
+ v += m_mat.A[j] * m_mat.A[j];
+ m_diag[i] = 1.0 / std::sqrt(v);
+#elif 0
+ // works halfway, i.e. Mame perforamnce 50%
+ // 147% - lowest average solution time with 7.094
+ for (std::size_t j = m_mat.row_idx[i]; j< m_mat.row_idx[i+1]; j++)
+ v += m_mat.A[j] * m_mat.A[j];
+ m_diag[i] = m_mat.A[m_mat.diag[i]] / v;
+#elif 0
+ // works halfway, i.e. Mame perforamnce 50%
+ // sum over column i
+ // 344% - lowest average solution time with 3.06
+ std::size_t nzcolp = 0;
+ const auto &nz = nzcol[i];
+ std::size_t j;
+
+ while ((j = nz[nzcolp++])!=static_cast<std::size_t>(-1)) // NOLINT(bugprone-infinite-loop)
+ {
+ v += m_mat.A[j] * m_mat.A[j];
+ }
+ m_diag[i] = m_mat.A[m_mat.diag[i]] / v;
+#elif 0
+ // works halfway, i.e. Mame perforamnce 50%
+ // 151%
+ for (std::size_t j = m_mat.row_idx[i]; j< m_mat.row_idx[i+1]; j++)
+ v += std::abs(m_mat.A[j]);
+ m_diag[i] = 1.0 / v;
+#else
+ // 124%
+ for (std::size_t j = m_mat.row_idx[i]; j< m_mat.row_idx[i+1]; j++)
+ v = std::max(v, std::abs(m_mat.A[j]));
+ m_diag[i] = 1.0 / v;
+#endif
+ //m_diag[i] = 1.0 / m_mat.A[m_mat.diag[i]];
}
}
template<typename V>
- void solve_LU_inplace(V &v)
+ void solve_inplace(V &v)
{
for (std::size_t i = 0; i< m_diag.size(); i++)
v[i] = v[i] * m_diag[i];
}
- plib::matrix_compressed_rows_t<FT, SIZE> m_mat;
+ plib::pmatrix_cr_t<FT, SIZE> m_mat;
plib::parray<FT, SIZE> m_diag;
+ plib::parray<std::vector<std::size_t>, SIZE > nzcol;
};
template <typename FT, int SIZE>
@@ -152,18 +200,18 @@ namespace plib
}
template<typename V>
- void solve_LU_inplace(V &v)
+ void solve_inplace(V &v)
{
plib::unused_var(v);
}
- plib::matrix_compressed_rows_t<FT, SIZE> m_mat;
+ plib::pmatrix_cr_t<FT, SIZE> m_mat;
};
/* FIXME: hardcoding RESTART to 20 becomes an issue on very large
* systems.
*/
- template <typename FT, int SIZE, int RESTART = 20>
+ template <typename FT, int SIZE, int RESTART = 80>
struct gmres_t
{
public:
@@ -175,6 +223,8 @@ namespace plib
gmres_t(std::size_t size)
: residual(size)
, Ax(size)
+ , m_ht(RESTART +1, RESTART)
+ , m_v(RESTART + 1, size)
, m_size(size)
, m_use_more_precise_stop_condition(false)
{
@@ -191,18 +241,18 @@ namespace plib
std::size_t size() const { return (SIZE<=0) ? m_size : static_cast<std::size_t>(SIZE); }
template <int k, typename OPS, typename VT>
- bool do_k(OPS &ops, VT &x, FT rho_delta, bool dummy)
+ bool do_k(OPS &ops, VT &x, std::size_t &itr_used, FT rho_delta, bool dummy)
{
plib::unused_var(dummy);
//printf("%d\n", k);
- if (do_k<k-1, OPS>(ops, x, rho_delta, do_khelper<k-1>::value))
+ if (do_k<k-1, OPS>(ops, x, itr_used, rho_delta, do_khelper<k-1>::value))
return true;
const std::size_t kp1 = k + 1;
const std::size_t n = size();
ops.calc_rhs(m_v[kp1], m_v[k]);
- ops.solve_LU_inplace(m_v[kp1]);
+ ops.solve_inplace(m_v[kp1]);
for (std::size_t j = 0; j <= k; j++)
{
@@ -229,7 +279,7 @@ namespace plib
FT rho = std::abs(m_g[kp1]);
// FIXME ..
- //itr_used = itr_used + 1;
+ itr_used = itr_used + 1;
if (rho <= rho_delta || k == RESTART-1)
{
@@ -252,10 +302,9 @@ namespace plib
}
template <int k, typename OPS, typename VT>
- bool do_k(OPS &ops, VT &x, FT rho_delta, float dummy)
+ bool do_k(OPS &ops, VT &x, std::size_t &itr_used, FT rho_delta, float dummy)
{
- plib::unused_var(ops, x, rho_delta, dummy);
- //printf("here\n");
+ plib::unused_var(ops, x, itr_used, rho_delta, dummy);
return false;
}
@@ -307,7 +356,7 @@ namespace plib
vec_set_scalar(n, residual, accuracy);
ops.calc_rhs(Ax, residual);
- ops.solve_LU_inplace(Ax);
+ ops.solve_inplace(Ax);
const float_type rho_to_accuracy = std::sqrt(vec_mult2<FT>(n, Ax)) / accuracy;
@@ -320,7 +369,7 @@ namespace plib
* Using
*
* vec_set(n, x, rhs);
- * ops.solve_LU_inplace(x);
+ * ops.solve_inplace(x);
*
* to get a starting point for x degrades convergence speed compared
* to using the last solution for x.
@@ -337,7 +386,7 @@ namespace plib
vec_sub(n, residual, rhs, Ax);
- ops.solve_LU_inplace(residual);
+ ops.solve_inplace(residual);
rho = std::sqrt(vec_mult2<FT>(n, residual));
@@ -353,7 +402,7 @@ namespace plib
vec_mult_scalar(n, m_v[0], residual, constants<FT>::one() / rho);
- if (do_k<RESTART-1>(ops, x, rho_delta, true))
+ if (do_k<RESTART-1>(ops, x, itr_used, rho_delta, true))
// converged
break;
}
@@ -369,12 +418,12 @@ namespace plib
plib::parray<float_type, RESTART + 1> m_c; /* mr + 1 */
plib::parray<float_type, RESTART + 1> m_g; /* mr + 1 */
- plib::parray<plib::parray<float_type, RESTART>, RESTART + 1> m_ht; /* (mr + 1), mr */
+ plib::parray2D<float_type, RESTART + 1, RESTART> m_ht; /* (mr + 1), mr */
plib::parray<float_type, RESTART + 1> m_s; /* mr + 1 */
plib::parray<float_type, RESTART + 1> m_y; /* mr + 1 */
- //plib::parray<float_type, SIZE> m_v[RESTART + 1]; /* mr + 1, n */
- plib::parray<plib::parray<float_type, storage_N>, RESTART + 1> m_v; /* mr + 1, n */
+ //plib::parray<plib::parray<float_type, storage_N>, RESTART + 1> m_v; /* mr + 1, n */
+ plib::parray2D<float_type, RESTART + 1, SIZE> m_v; /* mr + 1, n */
std::size_t m_size;
@@ -446,7 +495,7 @@ namespace plib
for (int i = 0; i < iter_max; i++)
{
- ops.solve_LU_inplace(residual);
+ ops.solve_inplace(residual);
if (i==0)
{
vec_set(size(), p, residual);
diff --git a/src/lib/netlist/plib/mat_cr.h b/src/lib/netlist/plib/mat_cr.h
index 340c6305e96..bc06d151042 100644
--- a/src/lib/netlist/plib/mat_cr.h
+++ b/src/lib/netlist/plib/mat_cr.h
@@ -31,12 +31,15 @@ namespace plib
// template<typename T, int N, typename C = std::size_t>
template<typename T, int N, typename C = uint16_t>
- struct matrix_compressed_rows_t
+ struct pmatrix_cr_t
{
using index_type = C;
using value_type = T;
- COPYASSIGNMOVE(matrix_compressed_rows_t, default)
+ static constexpr const int NSQ = (N < 0 ? -N * N : N * N);
+ static constexpr const int Np1 = (N == 0) ? 0 : (N < 0 ? N - 1 : N + 1);
+
+ COPYASSIGNMOVE(pmatrix_cr_t, default)
enum constants_e
{
@@ -44,34 +47,29 @@ namespace plib
};
parray<index_type, N> diag; // diagonal index pointer n
- parray<index_type, (N == 0) ? 0 : (N < 0 ? N - 1 : N + 1)> row_idx; // row index pointer n + 1
- parray<index_type, N < 0 ? -N * N : N *N> col_idx; // column index array nz_num, initially (n * n)
- parray<value_type, N < 0 ? -N * N : N *N> A; // Matrix elements nz_num, initially (n * n)
- //parray<C, N < 0 ? -N * (N-1) / 2 : N * (N+1) / 2 > nzbd; // Support for gaussian elimination
- parray<std::vector<index_type>, N > nzbd; // Support for gaussian elimination
- // contains elimination rows below the diagonal
- // FIXME: convert to pvector
- parray<index_type, (N == 0) ? 0 : (N < 0 ? N - 1 : N + 1)> ilu_rows;
- std::vector<std::vector<index_type>> m_ge_par; // parallel execution support for Gauss
+ parray<index_type, Np1> row_idx; // row index pointer n + 1
+ parray<index_type, NSQ> col_idx; // column index array nz_num, initially (n * n)
+ parray<value_type, NSQ> A; // Matrix elements nz_num, initially (n * n)
index_type nz_num;
- explicit matrix_compressed_rows_t(const index_type n)
+ explicit pmatrix_cr_t(const index_type n)
: diag(n)
, row_idx(n+1)
, col_idx(n*n)
, A(n*n)
+ , nz_num(0)
//, nzbd(n * (n+1) / 2)
, nzbd(n)
- , ilu_rows(n+1)
- , nz_num(0)
, m_size(n)
{
for (index_type i=0; i<n+1; i++)
+ {
row_idx[i] = 0;
+ }
}
- ~matrix_compressed_rows_t() = default;
+ ~pmatrix_cr_t() = default;
constexpr index_type size() const { return static_cast<index_type>((N>0) ? N : m_size); }
@@ -114,39 +112,6 @@ namespace plib
}
template <typename M>
- std::pair<std::size_t, std::size_t> gaussian_extend_fill_mat(M &fill)
- {
- std::size_t ops = 0;
- std::size_t fill_max = 0;
-
- for (std::size_t k = 0; k < fill.size(); k++)
- {
- ops++; // 1/A(k,k)
- for (std::size_t row = k + 1; row < fill.size(); row++)
- {
- if (fill[row][k] < FILL_INFINITY)
- {
- ops++;
- for (std::size_t col = k + 1; col < fill[row].size(); col++)
- //if (fill[k][col] < FILL_INFINITY)
- {
- auto f = std::min(fill[row][col], 1 + fill[row][k] + fill[k][col]);
- if (f < FILL_INFINITY)
- {
- if (f > fill_max)
- fill_max = f;
- ops += 2;
- }
- fill[row][col] = f;
- }
- }
- }
- }
- build_parallel_gaussian_execution_scheme(fill);
- return { fill_max, ops };
- }
-
- template <typename M>
void build_from_fill_mat(const M &f, std::size_t max_fill = FILL_INFINITY - 1,
std::size_t band_width = FILL_INFINITY)
{
@@ -180,48 +145,183 @@ namespace plib
nzbd[k].push_back(0); // end of sequence
}
- /* build ilu_rows */
+ }
- index_type p(0);
- for (index_type k=1; k < size(); k++)
- if (row_idx[k] < diag[k])
- ilu_rows[p++] = k;
- ilu_rows[p] = 0; // end of array
+ template <typename VTV, typename VTR>
+ void mult_vec(VTR & res, const VTV & x)
+ {
+ /*
+ * res = A * x
+ */
+#if 0
+ //plib::omp::set_num_threads(4);
+ plib::omp::for_static(0, constants<index_type>::zero(), m_size, [this, &res, &x](index_type row)
+ {
+ T tmp(0.0);
+ const index_type e(row_idx[row+1]);
+ for (index_type k = row_idx[row]; k < e; k++)
+ tmp += A[k] * x[col_idx[k]];
+ res[row] = tmp;
+ });
+#else
+ // this is a bit faster than the version above
+ std::size_t row = 0;
+ std::size_t k = 0;
+ const std::size_t oe = nz_num;
+ while (k < oe)
+ {
+ T tmp = 0.0;
+ const std::size_t e = row_idx[row+1];
+ for (; k < e; k++)
+ tmp += A[k] * x[col_idx[k]];
+ res[row++] = tmp;
+ }
+#endif
+ }
+
+ /* throws error if P(source)>P(destination) */
+ template <typename LUMAT>
+ void slim_copy_from(LUMAT & src)
+ {
+ for (std::size_t r=0; r<src.size(); r++)
+ {
+ C dp = row_idx[r];
+ for (C sp = src.row_idx[r]; sp < src.row_idx[r+1]; sp++)
+ {
+ /* advance dp to source column and fill 0s if necessary */
+ while (col_idx[dp] < src.col_idx[sp])
+ A[dp++] = 0;
+ if (row_idx[r+1] <= dp || col_idx[dp] != src.col_idx[sp])
+ throw plib::pexception("slim_copy_from error");
+ A[dp++] = src.A[sp];
+ }
+ /* fill remaining elements in row */
+ while (dp < row_idx[r+1])
+ A[dp++] = 0;
+ }
+ }
+
+ /* only copies common elements */
+ template <typename LUMAT>
+ void reduction_copy_from(LUMAT & src)
+ {
+ C sp(0);
+ for (index_type r=0; r<src.size(); r++)
+ {
+ C dp(row_idx[r]);
+ while(sp < src.row_idx[r+1])
+ {
+ /* advance dp to source column and fill 0s if necessary */
+ if (col_idx[dp] < src.col_idx[sp])
+ A[dp++] = 0;
+ else if (col_idx[dp] == src.col_idx[sp])
+ A[dp++] = src.A[sp++];
+ else
+ sp++;
+ }
+ /* fill remaining elements in row */
+ while (dp < row_idx[r+1])
+ A[dp++] = 0;
+ }
+ }
+
+ /* no checks at all - may crash */
+ template <typename LUMAT>
+ void raw_copy_from(LUMAT & src)
+ {
+ for (index_type k = 0; k < nz_num; k++)
+ A[k] = src.A[k];
+ }
+
+ protected:
+ parray<std::vector<index_type>, N > nzbd; // Support for gaussian elimination
+ private:
+ //parray<C, N < 0 ? -N * (N-1) / 2 : N * (N+1) / 2 > nzbd; // Support for gaussian elimination
+ index_type m_size;
+ };
+
+ template<typename B>
+ struct pGEmatrix_cr_t : public B
+ {
+ using base = B;
+ using index_type = typename base::index_type;
+
+ COPYASSIGNMOVE(pGEmatrix_cr_t, default)
+
+ explicit pGEmatrix_cr_t(const index_type n)
+ : B(n)
+ {
+ }
+
+ ~pGEmatrix_cr_t() = default;
+
+ template <typename M>
+ std::pair<std::size_t, std::size_t> gaussian_extend_fill_mat(M &fill)
+ {
+ std::size_t ops = 0;
+ std::size_t fill_max = 0;
+
+ for (std::size_t k = 0; k < fill.size(); k++)
+ {
+ ops++; // 1/A(k,k)
+ for (std::size_t row = k + 1; row < fill.size(); row++)
+ {
+ if (fill[row][k] < base::FILL_INFINITY)
+ {
+ ops++;
+ for (std::size_t col = k + 1; col < fill[row].size(); col++)
+ //if (fill[k][col] < FILL_INFINITY)
+ {
+ auto f = std::min(fill[row][col], 1 + fill[row][k] + fill[k][col]);
+ if (f < base::FILL_INFINITY)
+ {
+ if (f > fill_max)
+ fill_max = f;
+ ops += 2;
+ }
+ fill[row][col] = f;
+ }
+ }
+ }
+ }
+ build_parallel_gaussian_execution_scheme(fill);
+ return { fill_max, ops };
}
template <typename V>
void gaussian_elimination(V & RHS)
{
- const std::size_t iN = size();
+ const std::size_t iN = base::size();
for (std::size_t i = 0; i < iN - 1; i++)
{
std::size_t nzbdp = 0;
- std::size_t pi = diag[i];
- const value_type f = 1.0 / A[pi++];
- const std::size_t piie = row_idx[i+1];
- const auto &nz = nzbd[i];
+ std::size_t pi = base::diag[i];
+ const typename base::value_type f = 1.0 / base::A[pi++];
+ const std::size_t piie = base::row_idx[i+1];
+ const auto &nz = base::nzbd[i];
while (auto j = nz[nzbdp++]) // NOLINT(bugprone-infinite-loop)
{
// proceed to column i
- std::size_t pj = row_idx[j];
+ std::size_t pj = base::row_idx[j];
+ std::size_t pje = base::row_idx[j+1];
- while (col_idx[pj] < i)
+ while (base::col_idx[pj] < i)
pj++;
- const value_type f1 = - A[pj++] * f;
+ const typename base::value_type f1 = - base::A[pj++] * f;
// subtract row i from j
// fill-in available assumed, i.e. matrix was prepared
- for (std::size_t pii = pi; pii<piie; pii++)
+ for (std::size_t pii = pi; pii<piie && pj < pje; pii++)
{
- while (col_idx[pj] < col_idx[pii])
+ while (base::col_idx[pj] < base::col_idx[pii])
pj++;
- if (col_idx[pj] == col_idx[pii])
- A[pj++] += A[pii] * f1;
+ if (base::col_idx[pj] == base::col_idx[pii])
+ base::A[pj++] += base::A[pii] * f1;
}
RHS[j] += f1 * RHS[i];
@@ -229,40 +329,48 @@ namespace plib
}
}
+ int get_parallel_level(std::size_t k) const
+ {
+ for (std::size_t i = 0; i < m_ge_par.size(); i++)
+ if (plib::container::contains( m_ge_par[i], k))
+ return static_cast<int>(i);
+ return -1;
+ }
+
template <typename V>
void gaussian_elimination_parallel(V & RHS)
{
//printf("omp: %ld %d %d\n", m_ge_par.size(), nz_num, (int)m_ge_par[m_ge_par.size()-2].size());
for (auto l = 0ul; l < m_ge_par.size(); l++)
- plib::omp::for_static(nz_num, 0ul, m_ge_par[l].size(), [this, &RHS, &l] (unsigned ll)
+ plib::omp::for_static(base::nz_num, 0ul, m_ge_par[l].size(), [this, &RHS, &l] (unsigned ll)
{
auto &i = m_ge_par[l][ll];
{
std::size_t nzbdp = 0;
- std::size_t pi = diag[i];
- const value_type f = 1.0 / A[pi++];
- const std::size_t piie = row_idx[i+1];
- const auto &nz = nzbd[i];
+ std::size_t pi = base::diag[i];
+ const typename base::value_type f = 1.0 / base::A[pi++];
+ const std::size_t piie = base::row_idx[i+1];
+ const auto &nz = base::nzbd[i];
while (auto j = nz[nzbdp++])
{
// proceed to column i
- std::size_t pj = row_idx[j];
+ std::size_t pj = base::row_idx[j];
- while (col_idx[pj] < i)
+ while (base::col_idx[pj] < i)
pj++;
- const value_type f1 = - A[pj++] * f;
+ const typename base::value_type f1 = - base::A[pj++] * f;
// subtract row i from j
// fill-in available assumed, i.e. matrix was prepared
for (std::size_t pii = pi; pii<piie; pii++)
{
- while (col_idx[pj] < col_idx[pii])
+ while (base::col_idx[pj] < base::col_idx[pii])
pj++;
- if (col_idx[pj] == col_idx[pii])
- A[pj++] += A[pii] * f1;
+ if (base::col_idx[pj] == base::col_idx[pii])
+ base::A[pj++] += base::A[pii] * f1;
}
RHS[j] += f1 * RHS[i];
}
@@ -273,135 +381,156 @@ namespace plib
template <typename V1, typename V2>
void gaussian_back_substitution(V1 &V, const V2 &RHS)
{
- const std::size_t iN = size();
+ const std::size_t iN = base::size();
/* row n-1 */
- V[iN - 1] = RHS[iN - 1] / A[diag[iN - 1]];
+ V[iN - 1] = RHS[iN - 1] / base::A[base::diag[iN - 1]];
for (std::size_t j = iN - 1; j-- > 0;)
{
- value_type tmp = 0;
- const auto jdiag = diag[j];
- const std::size_t e = row_idx[j+1];
+ typename base::value_type tmp = 0;
+ const auto jdiag = base::diag[j];
+ const std::size_t e = base::row_idx[j+1];
for (std::size_t pk = jdiag + 1; pk < e; pk++)
- tmp += A[pk] * V[col_idx[pk]];
- V[j] = (RHS[j] - tmp) / A[jdiag];
+ tmp += base::A[pk] * V[base::col_idx[pk]];
+ V[j] = (RHS[j] - tmp) / base::A[jdiag];
}
}
template <typename V1>
void gaussian_back_substitution(V1 &V)
{
- const std::size_t iN = size();
+ const std::size_t iN = base::size();
/* row n-1 */
- V[iN - 1] = V[iN - 1] / A[diag[iN - 1]];
+ V[iN - 1] = V[iN - 1] / base::A[base::diag[iN - 1]];
for (std::size_t j = iN - 1; j-- > 0;)
{
- value_type tmp = 0;
- const auto jdiag = diag[j];
- const std::size_t e = row_idx[j+1];
+ typename base::value_type tmp = 0;
+ const auto jdiag = base::diag[j];
+ const std::size_t e = base::row_idx[j+1];
for (std::size_t pk = jdiag + 1; pk < e; pk++)
- tmp += A[pk] * V[col_idx[pk]];
- V[j] = (V[j] - tmp) / A[jdiag];
+ tmp += base::A[pk] * V[base::col_idx[pk]];
+ V[j] = (V[j] - tmp) / base::A[jdiag];
}
}
-
- template <typename VTV, typename VTR>
- void mult_vec(VTR & res, const VTV & x)
+ private:
+ template <typename M>
+ void build_parallel_gaussian_execution_scheme(const M &fill)
{
- /*
- * res = A * x
- */
-#if 0
- parray<value_type, N < 0 ? -N * N : N *N> xi(m_size*m_size);
- //std::vector<value_type> xi(m_size*m_size);
-
- plib::omp::for_static(0, constants<index_type>::zero(), row_idx[m_size], [this, &x, &xi](index_type k)
- {
- xi[k] = x[col_idx[k]];
- });
-#endif
-#if 1
- //plib::omp::set_num_threads(4);
- plib::omp::for_static(0, constants<index_type>::zero(), m_size, [this, &res, &x](index_type row)
- {
- T tmp = 0.0;
- const index_type e = row_idx[row+1];
- for (index_type k = row_idx[row]; k < e; k++)
- tmp += A[k] * x[col_idx[k]];
- res[row] = tmp;
- });
-#else
- std::size_t row = 0;
- std::size_t k = 0;
- const std::size_t oe = nz_num;
- while (k < oe)
+ // calculate parallel scheme for gaussian elimination
+ std::vector<std::vector<index_type>> rt(base::size());
+ for (index_type k = 0; k < base::size(); k++)
{
- T tmp = 0.0;
- const std::size_t e = row_idx[row+1];
- for (; k < e; k++)
- tmp += A[k] * x[col_idx[k]];
- res[row++] = tmp;
+ for (index_type j = k+1; j < base::size(); j++)
+ {
+ if (fill[j][k] < base::FILL_INFINITY)
+ {
+ rt[k].push_back(j);
+ }
+ }
}
-#endif
- }
- /* throws error if P(source)>P(destination) */
- template <typename LUMAT>
- void slim_copy_from(LUMAT & src)
- {
- for (std::size_t r=0; r<src.size(); r++)
+ std::vector<index_type> levGE(base::size(), 0);
+ index_type cl = 0;
+
+ for (index_type k = 0; k < base::size(); k++ )
{
- C dp = row_idx[r];
- for (C sp = src.row_idx[r]; sp < src.row_idx[r+1]; sp++)
+ if (levGE[k] >= cl)
{
- /* advance dp to source column and fill 0s if necessary */
- while (col_idx[dp] < src.col_idx[sp])
- A[dp++] = 0;
- if (row_idx[r+1] <= dp || col_idx[dp] != src.col_idx[sp])
- throw plib::pexception("slim_copy_from error");
- A[dp++] = src.A[sp];
+ std::vector<index_type> t = rt[k];
+ for (index_type j = k+1; j < base::size(); j++ )
+ {
+ bool overlap = false;
+ // is there overlap
+ if (plib::container::contains(t, j))
+ overlap = true;
+ for (auto &x : rt[j])
+ if (plib::container::contains(t, x))
+ {
+ overlap = true;
+ break;
+ }
+ if (overlap)
+ levGE[j] = cl + 1;
+ else
+ {
+ t.push_back(j);
+ for (auto &x : rt[j])
+ t.push_back(x);
+ }
+ }
+ cl++;
}
- /* fill remaining elements in row */
- while (dp < row_idx[r+1])
- A[dp++] = 0;
}
+
+ m_ge_par.clear();
+ m_ge_par.resize(cl+1);
+ for (index_type k = 0; k < base::size(); k++)
+ m_ge_par[levGE[k]].push_back(k);
+ //for (std::size_t k = 0; k < m_ge_par.size(); k++)
+ // printf("%d %d\n", (int) k, (int) m_ge_par[k].size());
}
+ // contains elimination rows below the diagonal
+ std::vector<std::vector<index_type>> m_ge_par; // parallel execution support for Gauss
+ };
- /* only copies common elements */
- template <typename LUMAT>
- void reduction_copy_from(LUMAT & src)
+ template<typename B>
+ struct pLUmatrix_cr_t : public B
+ {
+ using base = B;
+ using index_type = typename base::index_type;
+
+ COPYASSIGNMOVE(pLUmatrix_cr_t, default)
+
+ explicit pLUmatrix_cr_t(const index_type n)
+ : B(n)
+ , ilu_rows(n+1)
+ , m_ILUp(0)
{
- C sp = 0;
- for (std::size_t r=0; r<src.size(); r++)
+ }
+
+ ~pLUmatrix_cr_t() = default;
+
+ template <typename M>
+ void build(M &fill, std::size_t ilup)
+ {
+ index_type p(0);
+ /* build ilu_rows */
+ for (decltype(fill.size()) i=1; i < fill.size(); i++)
{
- C dp = row_idx[r];
- while(sp < src.row_idx[r+1])
+ bool found(false);
+ for (decltype(fill.size()) k = 0; k < i; k++)
{
- /* advance dp to source column and fill 0s if necessary */
- if (col_idx[dp] < src.col_idx[sp])
- A[dp++] = 0;
- else if (col_idx[dp] == src.col_idx[sp])
- A[dp++] = src.A[sp++];
- else
- sp++;
+ // if (fill[i][k] < base::FILL_INFINITY)
+ if (fill[i][k] <= ilup)
+ {
+ // assume A[k][k]!=0
+ for (decltype(fill.size()) j=k+1; j < fill.size(); j++)
+ {
+ auto f = std::min(fill[i][j], 1 + fill[i][k] + fill[k][j]);
+ if (f <= ilup)
+ {
+#if 0
+ if (f > fill_max)
+ fill_max = f;
+ ops += 2;
+#endif
+ fill[i][j] = f;
+ }
+ }
+ found = true;
+ }
}
- /* fill remaining elements in row */
- while (dp < row_idx[r+1])
- A[dp++] = 0;
+ if (found)
+ ilu_rows[p++] = static_cast<index_type>(i);
}
+ ilu_rows[p] = 0; // end of array
+ this->build_from_fill_mat(fill, ilup); //, m_band_width); // ILU(2)
+ m_ILUp = ilup;
}
- /* checks at all - may crash */
- template <typename LUMAT>
- void raw_copy_from(LUMAT & src)
- {
- for (std::size_t k = 0; k < nz_num; k++)
- A[k] = src.A[k];
- }
-
- void incomplete_LU_factorization()
+ void incomplete_LU_factorization(const base &mat)
{
/*
* incomplete LU Factorization according to http://de.wikipedia.org/wiki/ILU-Zerlegung
@@ -420,34 +549,38 @@ namespace plib
* i=i+1
*
*/
+ if (m_ILUp < 1)
+ this->raw_copy_from(mat);
+ else
+ this->reduction_copy_from(mat);
index_type p(0);
- while (std::size_t i = ilu_rows[p++]) // NOLINT(bugprone-infinite-loop)
+ while (auto i = ilu_rows[p++]) // NOLINT(bugprone-infinite-loop)
{
- const std::size_t p_i_end = row_idx[i + 1];
+ const auto p_i_end = base::row_idx[i + 1];
// loop over all columns k left of diag in row i
//if (row_idx[i] < diag[i])
// printf("occ %d\n", (int)i);
- for (std::size_t i_k = row_idx[i]; i_k < diag[i]; i_k++)
+ for (auto i_k = base::row_idx[i]; i_k < base::diag[i]; i_k++)
{
- const std::size_t k = col_idx[i_k];
- const std::size_t p_k_end = row_idx[k + 1];
- const T LUp_i_k = A[i_k] = A[i_k] / A[diag[k]];
+ const auto k(base::col_idx[i_k]);
+ const auto p_k_end(base::row_idx[k + 1]);
+ const typename base::value_type LUp_i_k = base::A[i_k] = base::A[i_k] / base::A[base::diag[k]];
- std::size_t k_j = diag[k] + 1;
- std::size_t i_j = i_k + 1;
+ index_type k_j(base::diag[k] + 1);
+ index_type i_j(i_k + 1);
while (i_j < p_i_end && k_j < p_k_end ) // pj = (i, j)
{
// we can assume that within a row ja increases continuously */
- const std::size_t c_i_j = col_idx[i_j]; // row i, column j
- const std::size_t c_k_j = col_idx[k_j]; // row k, column j
- if (c_k_j < c_i_j)
- k_j++;
- else if (c_k_j == c_i_j)
- A[i_j++] -= LUp_i_k * A[k_j++];
- else
- i_j++;
+ const index_type c_i_j(base::col_idx[i_j]); // row i, column j
+ const auto c_k_j(base::col_idx[k_j]); // row k, column j
+
+ if (c_k_j == c_i_j)
+ base::A[i_j] -= LUp_i_k * base::A[k_j];
+ k_j += (c_k_j <= c_i_j ? 1 : 0);
+ i_j += (c_k_j >= c_i_j ? 1 : 0);
+
}
}
}
@@ -477,86 +610,30 @@ namespace plib
* This can be solved for x using backwards elimination in U.
*
*/
- for (std::size_t i = 1; i < size(); ++i )
+ for (index_type i = 1; i < base::size(); ++i )
{
- T tmp = 0.0;
- const std::size_t j1 = row_idx[i];
- const std::size_t j2 = diag[i];
+ typename base::value_type tmp(0);
+ const auto j1(base::row_idx[i]);
+ const auto j2(base::diag[i]);
- for (std::size_t j = j1; j < j2; ++j )
- tmp += A[j] * r[col_idx[j]];
+ for (auto j = j1; j < j2; ++j )
+ tmp += base::A[j] * r[base::col_idx[j]];
r[i] -= tmp;
}
// i now is equal to n;
- for (std::size_t i = size(); i-- > 0; )
+ for (index_type i = base::size(); i-- > 0; )
{
- T tmp = 0.0;
- const std::size_t di = diag[i];
- const std::size_t j2 = row_idx[i+1];
- for (std::size_t j = di + 1; j < j2; j++ )
- tmp += A[j] * r[col_idx[j]];
- r[i] = (r[i] - tmp) / A[di];
+ typename base::value_type tmp(0);
+ const auto di(base::diag[i]);
+ const auto j2(base::row_idx[i+1]);
+ for (index_type j = di + 1; j < j2; j++ )
+ tmp += base::A[j] * r[base::col_idx[j]];
+ r[i] = (r[i] - tmp) / base::A[di];
}
}
private:
- template <typename M>
- void build_parallel_gaussian_execution_scheme(const M &fill)
- {
- // calculate parallel scheme for gaussian elimination
- std::vector<std::vector<index_type>> rt(size());
- for (index_type k = 0; k < size(); k++)
- {
- for (index_type j = k+1; j < size(); j++)
- {
- if (fill[j][k] < FILL_INFINITY)
- {
- rt[k].push_back(j);
- }
- }
- }
-
- std::vector<index_type> levGE(size(), 0);
- index_type cl = 0;
-
- for (index_type k = 0; k < size(); k++ )
- {
- if (levGE[k] >= cl)
- {
- std::vector<index_type> t = rt[k];
- for (index_type j = k+1; j < size(); j++ )
- {
- bool overlap = false;
- // is there overlap
- if (plib::container::contains(t, j))
- overlap = true;
- for (auto &x : rt[j])
- if (plib::container::contains(t, x))
- {
- overlap = true;
- break;
- }
- if (overlap)
- levGE[j] = cl + 1;
- else
- {
- t.push_back(j);
- for (auto &x : rt[j])
- t.push_back(x);
- }
- }
- cl++;
- }
- }
-
- m_ge_par.clear();
- m_ge_par.resize(cl+1);
- for (index_type k = 0; k < size(); k++)
- m_ge_par[levGE[k]].push_back(k);
- //for (std::size_t k = 0; k < m_ge_par.size(); k++)
- // printf("%d %d\n", (int) k, (int) m_ge_par[k].size());
- }
-
- index_type m_size;
+ parray<index_type, base::Np1> ilu_rows;
+ std::size_t m_ILUp;
};
} // namespace plib
diff --git a/src/lib/netlist/plib/palloc.h b/src/lib/netlist/plib/palloc.h
index a9b03353b37..aa1aac5544d 100644
--- a/src/lib/netlist/plib/palloc.h
+++ b/src/lib/netlist/plib/palloc.h
@@ -34,8 +34,10 @@ namespace plib {
{
//using arena_storage_type = P *;
using arena_storage_type = typename std::conditional<P::is_stateless, P, P *>::type;
+
template <typename X, typename Y = void>
typename std::enable_if<!X::is_stateless, X&>::type getref(X *x) { return *x;}
+
template <typename X, typename Y = void *>
typename std::enable_if<std::remove_pointer<X>::type::is_stateless, X&>::type
getref(X &x, Y y = nullptr)
@@ -44,13 +46,18 @@ namespace plib {
return x;
}
- constexpr arena_deleter(arena_storage_type a = arena_storage_type()) noexcept
+ constexpr arena_deleter(arena_storage_type a = arena_storage_type())
: m_a(a) { }
+#if 1
+ template<typename U, typename = typename
+ std::enable_if<std::is_convertible< U*, T*>::value>::type>
+ arena_deleter(const arena_deleter<P, U> &rhs) : m_a(rhs.m_a) { }
+#else
template<typename PU, typename U, typename = typename
std::enable_if<std::is_convertible< U*, T*>::value>::type>
- arena_deleter(const arena_deleter<PU, U> &rhs) noexcept : m_a(rhs.m_a) { }
-
+ arena_deleter(const arena_deleter<PU, U> &rhs) : m_a(rhs.m_a) { }
+#endif
void operator()(T *p) //const
{
/* call destructor */
@@ -80,11 +87,11 @@ namespace plib {
template <typename, typename>
friend class owned_ptr;
- owned_ptr(pointer p, bool owned) noexcept
+ owned_ptr(pointer p, bool owned)
: m_ptr(p), m_deleter(), m_is_owned(owned)
{ }
- owned_ptr(pointer p, bool owned, D deleter) noexcept
+ owned_ptr(pointer p, bool owned, D deleter)
: m_ptr(p), m_deleter(deleter), m_is_owned(owned)
{ }
@@ -93,7 +100,7 @@ namespace plib {
owned_ptr & operator =(owned_ptr &r) = delete;
template<typename DC, typename DC_D>
- owned_ptr & operator =(owned_ptr<DC, DC_D> &&r)
+ owned_ptr & operator =(owned_ptr<DC, DC_D> &&r) noexcept
{
if (m_is_owned && (m_ptr != nullptr))
//delete m_ptr;
@@ -122,7 +129,7 @@ namespace plib {
m_deleter(m_ptr);
m_is_owned = r.m_is_owned;
m_ptr = r.m_ptr;
- m_deleter = std::move(r.m_deleter);
+ m_deleter = r.m_deleter;
r.m_is_owned = false;
r.m_ptr = nullptr;
return *this;
@@ -197,18 +204,12 @@ namespace plib {
~arena_allocator() noexcept = default;
- arena_allocator(const arena_allocator &rhs) noexcept = default;
- arena_allocator& operator=(const arena_allocator&) noexcept = delete;
-
- arena_allocator(arena_allocator&&) noexcept = default;
- arena_allocator& operator=(arena_allocator&&) = delete;
-
arena_allocator(arena_type & a) noexcept : m_a(a)
{
}
template <class U>
- arena_allocator(const arena_allocator<ARENA, U, ALIGN>& rhs) noexcept
+ arena_allocator(const arena_allocator<ARENA, U, ALIGN>& rhs)
: m_a(rhs.m_a)
{
}
@@ -223,7 +224,7 @@ namespace plib {
return reinterpret_cast<T *>(m_a.allocate(ALIGN, sizeof(T) * n));
}
- void deallocate(T* p, std::size_t n) noexcept
+ void deallocate(T* p, std::size_t n)
{
unused_var(n);
m_a.deallocate(p);
@@ -262,6 +263,9 @@ namespace plib {
using allocator_type = arena_allocator<aligned_arena, T, ALIGN>;
template <typename T>
+ using unique_pool_ptr = std::unique_ptr<T, arena_deleter<aligned_arena, T>>;
+
+ template <typename T>
using owned_pool_ptr = plib::owned_ptr<T, arena_deleter<aligned_arena, T>>;
static inline aligned_arena &instance()
@@ -272,7 +276,7 @@ namespace plib {
static inline void *allocate( size_t alignment, size_t size )
{
- #if (USE_ALIGNED_ALLOCATION)
+ #if (PUSE_ALIGNED_ALLOCATION)
#if defined(_WIN32) || defined(_WIN64) || defined(_MSC_VER)
return _aligned_malloc(size, alignment);
#elif defined(__APPLE__)
@@ -292,7 +296,7 @@ namespace plib {
static inline void deallocate( void *ptr )
{
- #if (USE_ALIGNED_ALLOCATION)
+ #if (PUSE_ALIGNED_ALLOCATION)
// NOLINTNEXTLINE(cppcoreguidelines-no-malloc)
free(ptr);
#else
@@ -300,16 +304,24 @@ namespace plib {
#endif
}
-#if 0
template<typename T, typename... Args>
- owned_pool_ptr<T> make_poolptr(Args&&... args)
+ unique_pool_ptr<T> make_unique(Args&&... args)
{
auto *mem = allocate(alignof(T), sizeof(T));
- return owned_pool_ptr<T>(new (mem) T(std::forward<Args>(args)...), true, arena_deleter<aligned_arena, T>(*this));
+ try
+ {
+ auto *mema = new (mem) T(std::forward<Args>(args)...);
+ return unique_pool_ptr<T>(mema, arena_deleter<aligned_arena, T>(*this));
+ }
+ catch (...)
+ {
+ deallocate(mem);
+ throw;
+ }
}
-#endif
+
template<typename T, typename... Args>
- owned_pool_ptr<T> make_poolptr(Args&&... args)
+ owned_pool_ptr<T> make_owned(Args&&... args)
{
auto *mem = allocate(alignof(T), sizeof(T));
try
@@ -324,6 +336,12 @@ namespace plib {
}
}
+ bool operator ==(const aligned_arena &rhs) const
+ {
+ plib::unused_var(rhs);
+ return true;
+ }
+
};
template <typename T, std::size_t ALIGN>
@@ -334,7 +352,7 @@ namespace plib {
//auto t = reinterpret_cast<std::uintptr_t>(p);
//if (t & (ALIGN-1))
// printf("alignment error!");
-#if (USE_ALIGNED_HINTS)
+#if (PUSE_ALIGNED_HINTS)
return reinterpret_cast<T *>(__builtin_assume_aligned(p, ALIGN));
#else
return p;
@@ -346,7 +364,7 @@ namespace plib {
{
static_assert(ALIGN >= alignof(T), "Alignment must be greater or equal to alignof(T)");
static_assert(is_pow2(ALIGN), "Alignment must be a power of 2");
-#if (USE_ALIGNED_HINTS)
+#if (PUSE_ALIGNED_HINTS)
return reinterpret_cast<const T *>(__builtin_assume_aligned(p, ALIGN));
#else
return p;
diff --git a/src/lib/netlist/plib/parray.h b/src/lib/netlist/plib/parray.h
index 577de2d3dfc..d8f7a441f6f 100644
--- a/src/lib/netlist/plib/parray.h
+++ b/src/lib/netlist/plib/parray.h
@@ -11,6 +11,7 @@
#include "palloc.h"
#include "pconfig.h"
#include "pexception.h"
+#include "pstrutil.h"
#include <array>
#include <memory>
@@ -30,7 +31,8 @@ namespace plib {
template <typename FT>
struct sizeabs<FT, 0>
{
- static constexpr const std::size_t ABS = 0;
+ static constexpr std::size_t ABS() { return 0; }
+ //using container = typename std::vector<FT, arena_allocator<mempool, FT, 64>>;
using container = typename std::vector<FT, aligned_allocator<FT, PALIGN_VECTOROPT>>;
};
@@ -63,27 +65,33 @@ namespace plib {
using value_type = typename base_type::value_type;
template <int X = SIZE >
- parray(size_type size, typename std::enable_if<X==0, int>::type = 0)
+ parray(size_type size, typename std::enable_if<(X==0), int>::type = 0)
: m_a(size), m_size(size)
{
}
-#if 1
/* allow construction in fixed size arrays */
- template <int X = SIZE >
- parray(typename std::enable_if<(X > 0), int>::type = 0)
- : m_size(X)
+ parray()
+ : m_size(SIZEABS())
{
}
-#endif
+
+ // osx clang doesn't like COPYASSIGNMOVE(parray, default)
+ // it will generate some weird error messages about move assignment
+ // constructor having a different noexcept status.
+
+ parray(const parray &rhs) : m_a(rhs.m_a), m_size(rhs.m_size) {}
+ parray(parray &&rhs) noexcept : m_a(std::move(rhs.m_a)), m_size(std::move(rhs.m_size)) {}
+ parray &operator=(const parray &rhs) { m_a = rhs.m_a; m_size = rhs.m_size; return *this; }
+ parray &operator=(parray &&rhs) noexcept { std::swap(m_a,rhs.m_a); std::swap(m_size, rhs.m_size); return *this; }
+
template <int X = SIZE >
- parray(size_type size, typename std::enable_if<X!=0, int>::type = 0)
+ parray(size_type size, typename std::enable_if<(X != 0), int>::type = 0)
: m_size(size)
{
- if (SIZE < 0 && size > SIZEABS())
- throw plib::pexception("parray: size error " + plib::to_string(size) + ">" + plib::to_string(SIZEABS()));
- else if (SIZE > 0 && size != SIZEABS())
- throw plib::pexception("parray: size error");
+ if ((SIZE < 0 && size > SIZEABS())
+ || (SIZE > 0 && size != SIZEABS()))
+ throw plib::pexception("parray: size error " + plib::to_string(size) + ">" + plib::to_string(SIZE));
}
inline size_type size() const noexcept { return SIZE <= 0 ? m_size : SIZEABS(); }
@@ -92,18 +100,6 @@ namespace plib {
bool empty() const noexcept { return size() == 0; }
-#if 0
- reference operator[](size_type i) /*noexcept*/
- {
- if (i >= m_size) throw plib::pexception("limits error " + to_string(i) + ">=" + to_string(m_size));
- return m_a[i];
- }
- const_reference operator[](size_type i) const /*noexcept*/
- {
- if (i >= m_size) throw plib::pexception("limits error " + to_string(i) + ">=" + to_string(m_size));
- return m_a[i];
- }
-#else
C14CONSTEXPR reference operator[](size_type i) noexcept
{
return assume_aligned_ptr<FT, PALIGN_VECTOROPT>(&m_a[0])[i];
@@ -112,7 +108,7 @@ namespace plib {
{
return assume_aligned_ptr<FT, PALIGN_VECTOROPT>(&m_a[0])[i];
}
-#endif
+
FT * data() noexcept { return assume_aligned_ptr<FT, PALIGN_VECTOROPT>(m_a.data()); }
const FT * data() const noexcept { return assume_aligned_ptr<FT, PALIGN_VECTOROPT>(m_a.data()); }
@@ -122,6 +118,29 @@ namespace plib {
PALIGNAS_CACHELINE()
size_type m_size;
};
+
+ template <typename FT, int SIZE1, int SIZE2>
+ struct parray2D : public parray<parray<FT, SIZE2>, SIZE1>
+ {
+ public:
+
+ using size_type = std::size_t;
+
+ parray2D(size_type size1, size_type size2)
+ : parray<parray<FT, SIZE2>, SIZE1>(size1)
+ {
+ if (SIZE2 <= 0)
+ {
+ for (size_type i=0; i < this->size(); i++)
+ (*this)[i] = parray<FT, SIZE2>(size2);
+ }
+ }
+
+ COPYASSIGNMOVE(parray2D, default)
+ };
+
} // namespace plib
+
+
#endif /* PARRAY_H_ */
diff --git a/src/lib/netlist/plib/pchrono.h b/src/lib/netlist/plib/pchrono.h
index d6e98134f47..4e0bb071431 100644
--- a/src/lib/netlist/plib/pchrono.h
+++ b/src/lib/netlist/plib/pchrono.h
@@ -15,245 +15,253 @@
//#include <cstdint>
namespace plib {
-namespace chrono {
- template <typename T>
- struct sys_ticks
- {
- using type = typename T::rep;
- static inline type start() { return T::now().time_since_epoch().count(); }
- static inline type stop() { return T::now().time_since_epoch().count(); }
- static inline constexpr type per_second() { return T::period::den / T::period::num; }
- };
-
- using hires_ticks = sys_ticks<std::chrono::high_resolution_clock>;
- using steady_ticks = sys_ticks<std::chrono::steady_clock>;
- using system_ticks = sys_ticks<std::chrono::system_clock>;
-
- #if defined(__x86_64__) && !defined(_clang__) && !defined(_MSC_VER) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6))
-
- template <typename T, typename R>
- struct base_ticks
- {
- using ret_type = R;
- static ret_type per_second()
+ namespace chrono {
+ template <typename T>
+ struct sys_ticks
{
- static ret_type persec = 0;
- if (persec == 0)
+ using type = typename T::rep;
+ static inline constexpr type start() noexcept { return T::now().time_since_epoch().count(); }
+ static inline constexpr type stop() noexcept { return T::now().time_since_epoch().count(); }
+ static inline constexpr type per_second() noexcept { return T::period::den / T::period::num; }
+ };
+
+ using hires_ticks = sys_ticks<std::chrono::high_resolution_clock>;
+ using steady_ticks = sys_ticks<std::chrono::steady_clock>;
+ using system_ticks = sys_ticks<std::chrono::system_clock>;
+
+ #if defined(__x86_64__) && !defined(_clang__) && !defined(_MSC_VER) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6))
+
+ template <typename T, typename R>
+ struct base_ticks
+ {
+ using ret_type = R;
+ static ret_type per_second()
{
- ret_type x = 0;
- system_ticks::type t = system_ticks::start();
- system_ticks::type e;
- x = - T :: start();
- do {
- e = system_ticks::stop();
- } while (e - t < system_ticks::per_second() / 100 );
- x += T :: stop();
- persec = (ret_type)(double)((double) x * (double) system_ticks::per_second() / double (e - t));
+ static ret_type persec = 0;
+ if (persec == 0)
+ {
+ ret_type x = 0;
+ system_ticks::type t = system_ticks::start();
+ system_ticks::type e;
+ x = - T :: start();
+ do {
+ e = system_ticks::stop();
+ } while (e - t < system_ticks::per_second() / 100 );
+ x += T :: stop();
+ persec = (ret_type)(double)((double) x * (double) system_ticks::per_second() / double (e - t));
+ }
+ return persec;
}
- return persec;
- }
- };
+ };
- #if PHAS_RDTSCP
- struct fast_ticks : public base_ticks<fast_ticks, int64_t>
- {
- typedef int64_t type;
- static inline type start()
+ #if PHAS_RDTSCP
+ struct fast_ticks : public base_ticks<fast_ticks, int64_t>
{
- int64_t v;
- __asm__ __volatile__ (
- "rdtscp;"
- "shl $32, %%rdx;"
- "or %%rdx, %%rax;"
- : "=a"(v) /* outputs */
- : /* inputs */
- : "%rcx", "%rdx" /* clobbers */
- );
- return v;
- }
- static inline type stop()
- {
- return start();
- }
- };
-
- #else
- struct fast_ticks : public base_ticks<fast_ticks, int64_t>
- {
- typedef int64_t type;
- static inline type start()
- {
- int64_t v;
- __asm__ __volatile__ (
- "rdtsc;"
- "shl $32, %%rdx;"
- "or %%rdx, %%rax;"
- : "=a"(v) /* outputs */
- : /* inputs */
- : "%rdx" /* clobbers */
- );
- return v;
- }
- static inline type stop()
+ typedef int64_t type;
+ static inline type start() noexcept
+ {
+ int64_t v;
+ __asm__ __volatile__ (
+ "rdtscp;"
+ "shl $32, %%rdx;"
+ "or %%rdx, %%rax;"
+ : "=a"(v) /* outputs */
+ : /* inputs */
+ : "%rcx", "%rdx" /* clobbers */
+ );
+ return v;
+ }
+ static inline type stop() noexcept
+ {
+ return start();
+ }
+ };
+
+ #else
+ struct fast_ticks : public base_ticks<fast_ticks, int64_t>
{
- return start();
- }
- };
+ typedef int64_t type;
+ static inline type start() noexcept
+ {
+ int64_t v;
+ __asm__ __volatile__ (
+ "rdtsc;"
+ "shl $32, %%rdx;"
+ "or %%rdx, %%rax;"
+ : "=a"(v) /* outputs */
+ : /* inputs */
+ : "%rdx" /* clobbers */
+ );
+ return v;
+ }
+ static inline type stop() noexcept
+ {
+ return start();
+ }
+ };
- #endif
+ #endif
- /* Based on "How to Benchmark Code Execution Times on Intel?? IA-32 and IA-64
- * Instruction Set Architectures", Intel, 2010
- *
- */
- #if PUSE_ACCURATE_STATS && PHAS_RDTSCP
- /*
- * kills performance completely, but is accurate
- * cpuid serializes, but clobbers ebx and ecx
- *
- */
+ /* Based on "How to Benchmark Code Execution Times on Intel?? IA-32 and IA-64
+ * Instruction Set Architectures", Intel, 2010
+ *
+ */
+ #if PUSE_ACCURATE_STATS && PHAS_RDTSCP
+ /*
+ * kills performance completely, but is accurate
+ * cpuid serializes, but clobbers ebx and ecx
+ *
+ */
- struct exact_ticks : public base_ticks<exact_ticks, int64_t>
- {
- typedef int64_t type;
+ struct exact_ticks : public base_ticks<exact_ticks, int64_t>
+ {
+ typedef int64_t type;
- static inline type start()
+ static inline type start() noexcept
+ {
+ int64_t v;
+ __asm__ __volatile__ (
+ "cpuid;"
+ //"xor %%eax, %%eax\n\t"
+ "rdtsc;"
+ "shl $32, %%rdx;"
+ "or %%rdx, %%rax;"
+ : "=a"(v) /* outputs */
+ : "a"(0x0) /* inputs */
+ : "%ebx", "%ecx", "%rdx" /* clobbers*/
+ );
+ return v;
+ }
+ static inline type stop() noexcept
+ {
+ int64_t v;
+ __asm__ __volatile__ (
+ "rdtscp;"
+ "shl $32, %%rdx;"
+ "or %%rax, %%rdx;"
+ "mov %%rdx, %%r10;"
+ "xor %%eax, %%eax\n\t"
+ "cpuid;"
+ "mov %%r10, %%rax;"
+ : "=a" (v)
+ :
+ : "%ebx", "%ecx", "%rdx", "%r10"
+ );
+ return v;
+ }
+ };
+ #else
+ using exact_ticks = fast_ticks;
+ #endif
+
+
+ #else
+ using fast_ticks = hires_ticks;
+ using exact_ticks = fast_ticks;
+ #endif
+
+ template<bool enabled_>
+ struct counter
{
- int64_t v;
- __asm__ __volatile__ (
- "cpuid;"
- //"xor %%eax, %%eax\n\t"
- "rdtsc;"
- "shl $32, %%rdx;"
- "or %%rdx, %%rax;"
- : "=a"(v) /* outputs */
- : "a"(0x0) /* inputs */
- : "%ebx", "%ecx", "%rdx" /* clobbers*/
- );
- return v;
- }
- static inline type stop()
+ counter() : m_count(0) { }
+ using type = uint_least64_t;
+ type operator()() const noexcept { return m_count; }
+ void inc() noexcept { ++m_count; }
+ void reset() noexcept { m_count = 0; }
+ constexpr static bool enabled = enabled_;
+ private:
+ type m_count;
+ };
+
+ template<>
+ struct counter<false>
{
- int64_t v;
- __asm__ __volatile__ (
- "rdtscp;"
- "shl $32, %%rdx;"
- "or %%rax, %%rdx;"
- "mov %%rdx, %%r10;"
- "xor %%eax, %%eax\n\t"
- "cpuid;"
- "mov %%r10, %%rax;"
- : "=a" (v)
- :
- : "%ebx", "%ecx", "%rdx", "%r10"
- );
- return v;
- }
- };
- #else
- using exact_ticks = fast_ticks;
- #endif
-
-
- #else
- using fast_ticks = hires_ticks;
- using exact_ticks = fast_ticks;
- #endif
+ using type = uint_least64_t;
+ constexpr type operator()() const { return 0; }
+ void inc() const { }
+ void reset() const { }
+ constexpr static bool enabled = false;
+ };
- template<bool enabled_>
- struct counter
- {
- counter() : m_count(0) { }
- using type = uint_least64_t;
- type operator()() const { return m_count; }
- void inc() { ++m_count; }
- void reset() { m_count = 0; }
- constexpr static bool enabled = enabled_;
- private:
- type m_count;
- };
-
- template<>
- struct counter<false>
- {
- using type = uint_least64_t;
- constexpr type operator()() const { return 0; }
- void inc() const { }
- void reset() const { }
- constexpr static bool enabled = false;
- };
-
-
- template< typename T, bool enabled_ = true>
- struct timer
- {
- using type = typename T::type;
- using ctype = uint_least64_t;
- constexpr static bool enabled = enabled_;
-
- struct guard_t
+
+ template< typename T, bool enabled_ = true>
+ struct timer
{
- guard_t() = delete;
- guard_t(timer &m) noexcept : m_m(m) { m_m.m_time -= T::start(); }
- ~guard_t() { m_m.m_time += T::stop(); ++m_m.m_count; }
+ using type = typename T::type;
+ using ctype = uint_least64_t;
+ constexpr static bool enabled = enabled_;
- COPYASSIGNMOVE(guard_t, default)
+ struct guard_t
+ {
+ guard_t() = delete;
+ guard_t(timer &m) noexcept : m_m(m) { m_m.m_time -= T::start(); }
+ ~guard_t() { m_m.m_time += T::stop(); ++m_m.m_count; }
- private:
- timer &m_m;
- };
+ COPYASSIGNMOVE(guard_t, default)
- friend struct guard_t;
+ private:
+ timer &m_m;
+ };
- timer() : m_time(0), m_count(0) { }
+ friend struct guard_t;
- type operator()() const { return m_time; }
+ timer() : m_time(0), m_count(0) { }
- void reset() { m_time = 0; m_count = 0; }
- type average() const { return (m_count == 0) ? 0 : m_time / m_count; }
- type total() const { return m_time; }
- ctype count() const { return m_count; }
+ type operator()() const { return m_time; }
- double as_seconds() const { return static_cast<double>(total())
- / static_cast<double>(T::per_second()); }
+ void reset() { m_time = 0; m_count = 0; }
+ type average() const { return (m_count == 0) ? 0 : m_time / m_count; }
+ type total() const { return m_time; }
+ ctype count() const { return m_count; }
- guard_t guard() { return guard_t(*this); }
- private:
- type m_time;
- ctype m_count;
- };
+ double as_seconds() const { return static_cast<double>(total())
+ / static_cast<double>(T::per_second()); }
- template<typename T>
- struct timer<T, false>
- {
- using type = typename T::type;
- using ctype = uint_least64_t;
+ guard_t guard() { return guard_t(*this); }
+ private:
+ type m_time;
+ ctype m_count;
+ };
- struct guard_t
+ template<typename T>
+ struct timer<T, false>
{
- guard_t() = default;
- COPYASSIGNMOVE(guard_t, default)
- /* using default constructor will trigger warning on
- * unused local variable.
- */
- // NOLINTNEXTLINE(modernize-use-equals-default)
- ~guard_t() { }
+ using type = typename T::type;
+ using ctype = uint_least64_t;
+
+ struct guard_t
+ {
+ guard_t() = default;
+ COPYASSIGNMOVE(guard_t, default)
+ /* using default constructor will trigger warning on
+ * unused local variable.
+ */
+ // NOLINTNEXTLINE(modernize-use-equals-default)
+ ~guard_t() { }
+ };
+
+ constexpr type operator()() const { return 0; }
+ void reset() const { }
+ constexpr type average() const { return 0; }
+ constexpr type total() const { return 0; }
+ constexpr ctype count() const { return 0; }
+ constexpr double as_seconds() const { return 0.0; }
+ constexpr static bool enabled = false;
+ guard_t guard() { return guard_t(); }
};
- constexpr type operator()() const { return 0; }
- void reset() const { }
- constexpr type average() const { return 0; }
- constexpr type total() const { return 0; }
- constexpr ctype count() const { return 0; }
- constexpr double as_seconds() const { return 0.0; }
- constexpr static bool enabled = false;
- guard_t guard() { return guard_t(); }
- };
+ } // namespace chrono
+ //============================================================
+ // Performance tracking
+ //============================================================
+ template<bool enabled_>
+ using pperftime_t = plib::chrono::timer<plib::chrono::exact_ticks, enabled_>;
- } // namespace chrono
+ template<bool enabled_>
+ using pperfcount_t = plib::chrono::counter<enabled_>;
} // namespace plib
#endif /* PCHRONO_H_ */
diff --git a/src/lib/netlist/plib/pconfig.h b/src/lib/netlist/plib/pconfig.h
index 4ce5aea4cdb..102a991e613 100644
--- a/src/lib/netlist/plib/pconfig.h
+++ b/src/lib/netlist/plib/pconfig.h
@@ -38,20 +38,20 @@
* netlists like kidniki.
*/
-#ifndef USE_OPENMP
-#define USE_OPENMP (0)
+#ifndef PUSE_OPENMP
+#define PUSE_OPENMP (0)
#endif
/*
* Set this to one if you want to use aligned storage optimizations.
*/
-#ifndef USE_ALIGNED_OPTIMIZATIONS
-#define USE_ALIGNED_OPTIMIZATIONS (0)
+#ifndef PUSE_ALIGNED_OPTIMIZATIONS
+#define PUSE_ALIGNED_OPTIMIZATIONS (0)
#endif
-#define USE_ALIGNED_ALLOCATION (USE_ALIGNED_OPTIMIZATIONS)
-#define USE_ALIGNED_HINTS (USE_ALIGNED_OPTIMIZATIONS)
+#define PUSE_ALIGNED_ALLOCATION (PUSE_ALIGNED_OPTIMIZATIONS)
+#define PUSE_ALIGNED_HINTS (PUSE_ALIGNED_OPTIMIZATIONS)
/*
* Standard alignment macros
*/
@@ -114,67 +114,28 @@ typedef __int128_t INT128;
//============================================================
#if defined(OPENMP)
-#define HAS_OPENMP ( OPENMP >= 200805 )
-#elif defined(_OPENMP)
-#define HAS_OPENMP ( _OPENMP >= 200805 )
+#if ( OPENMP >= 200805 )
+#define PHAS_OPENMP (1)
#else
-#define HAS_OPENMP (0)
+#define PHAS_OPENMP (0)
#endif
-
-//============================================================
-// Pointer to Member Function
-//============================================================
-
-// This will be autodetected
-//#define PPMF_TYPE 0
-
-#define PPMF_TYPE_PMF 0
-#define PPMF_TYPE_GNUC_PMF_CONV 1
-#define PPMF_TYPE_INTERNAL 2
-
-#if defined(__GNUC__)
- /* does not work in versions over 4.7.x of 32bit MINGW */
- #if defined(__MINGW32__) && !defined(__x86_64) && defined(__i386__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)))
- #define PHAS_PMF_INTERNAL 0
- #elif defined(__MINGW32__) && !defined(__x86_64) && defined(__i386__)
- #define PHAS_PMF_INTERNAL 1
- #define MEMBER_ABI _thiscall
- #elif defined(__clang__) && defined(__i386__) && defined(_WIN32)
- #define PHAS_PMF_INTERNAL 0
- #elif defined(__arm__) || defined(__ARMEL__) || defined(__aarch64__) || defined(__MIPSEL__) || defined(__mips_isa_rev) || defined(__mips64) || defined(__EMSCRIPTEN__)
- #define PHAS_PMF_INTERNAL 2
- #else
- #define PHAS_PMF_INTERNAL 1
- #endif
-#elif defined(_MSC_VER) && defined (_M_X64)
- #define PHAS_PMF_INTERNAL 3
+#elif defined(_OPENMP)
+#if ( _OPENMP >= 200805 )
+#define PHAS_OPENMP (1)
#else
- #define PHAS_PMF_INTERNAL 0
-#endif
-
-#ifndef MEMBER_ABI
- #define MEMBER_ABI
+#define PHAS_OPENMP (0)
#endif
-
-#ifndef PPMF_TYPE
- #if (PHAS_PMF_INTERNAL > 0)
- #define PPMF_TYPE PPMF_TYPE_INTERNAL
- #else
- #define PPMF_TYPE PPMF_TYPE_PMF
- #endif
#else
- #undef PHAS_PMF_INTERNAL
- #define PHAS_PMF_INTERNAL 0
- #undef MEMBER_ABI
- #define MEMBER_ABI
+#define PHAS_OPENMP (0)
#endif
+
//============================================================
// WARNINGS
//============================================================
-#if (USE_OPENMP)
-#if (!(HAS_OPENMP))
+#if (PUSE_OPENMP)
+#if (!(PHAS_OPENMP))
#error To use openmp compile and link with "-fopenmp"
#endif
#endif
diff --git a/src/lib/netlist/plib/pdynlib.h b/src/lib/netlist/plib/pdynlib.h
index 1454c053298..b2fbb1487d2 100644
--- a/src/lib/netlist/plib/pdynlib.h
+++ b/src/lib/netlist/plib/pdynlib.h
@@ -62,7 +62,7 @@ public:
//return m_sym(args...);
}
- bool resolved() { return m_sym != nullptr; }
+ bool resolved() const { return m_sym != nullptr; }
private:
calltype m_sym;
};
diff --git a/src/lib/netlist/plib/pfmtlog.cpp b/src/lib/netlist/plib/pfmtlog.cpp
index 8da27df8d1c..250ead34cb3 100644
--- a/src/lib/netlist/plib/pfmtlog.cpp
+++ b/src/lib/netlist/plib/pfmtlog.cpp
@@ -1,12 +1,13 @@
// license:GPL-2.0+
// copyright-holders:Couriersud
/*
- * nl_string.c
+ * pfm_log.cpp
*
*/
#include "pfmtlog.h"
#include "palloc.h"
+#include "pstrutil.h"
#include <algorithm>
#include <array>
@@ -111,10 +112,10 @@ pfmt::rtype pfmt::setfmt(std::stringstream &strm, char32_t cfmt_spec)
else if (pdot != pstring::npos)
{
strm << std::setprecision(pstonum<int>(fmt.substr(pdot + 1)));
- r.width = pstonum<pstring::size_type>(left(fmt,pdot));
+ r.width = pstonum<int>(left(fmt,pdot));
}
else if (fmt != "")
- r.width = pstonum<pstring::size_type>(fmt);
+ r.width = pstonum<int>(fmt);
switch (r.pend)
{
diff --git a/src/lib/netlist/plib/pfmtlog.h b/src/lib/netlist/plib/pfmtlog.h
index 531b76fafe7..7bf10173857 100644
--- a/src/lib/netlist/plib/pfmtlog.h
+++ b/src/lib/netlist/plib/pfmtlog.h
@@ -227,7 +227,7 @@ protected:
pstring::size_type p;
pstring::size_type sl;
char32_t pend;
- pstring::size_type width;
+ int width;
};
rtype setfmt(std::stringstream &strm, char32_t cfmt_spec);
@@ -248,10 +248,14 @@ protected:
strm << std::forward<T>(val);
const pstring ps(strm.str());
pstring pad("");
- if (ret.width > ps.length())
- pad = pstring(ret.width - ps.length(), ' ');
-
- m_str = m_str.substr(0, ret.p) + pad + ps + m_str.substr(ret.p + ret.sl);
+ std::size_t aw(std::abs(ret.width));
+ if (aw > ps.length())
+ pad = pstring(aw - ps.length(), ' ');
+
+ if (ret.width > 0)
+ m_str = m_str.substr(0, ret.p) + pad + ps + m_str.substr(ret.p + ret.sl);
+ else
+ m_str = m_str.substr(0, ret.p) + ps + pad + m_str.substr(ret.p + ret.sl);
}
} while (ret.ret == 1);
diff --git a/src/lib/netlist/plib/pfunction.cpp b/src/lib/netlist/plib/pfunction.cpp
index 1e3c53cd7c6..6ad2627f0db 100644
--- a/src/lib/netlist/plib/pfunction.cpp
+++ b/src/lib/netlist/plib/pfunction.cpp
@@ -8,6 +8,7 @@
#include "pfunction.h"
#include "pexception.h"
#include "pfmtlog.h"
+#include "pstrutil.h"
#include "putil.h"
#include <cmath>
@@ -71,7 +72,7 @@ void pfunction::compile_postfix(const std::vector<pstring> &inputs,
if (rc.m_cmd != PUSH_INPUT)
{
rc.m_cmd = PUSH_CONST;
- bool err;
+ bool err(false);
rc.m_param = plib::pstonum_ne<decltype(rc.m_param), true>(cmd, err);
if (err)
throw plib::pexception(plib::pfmt("pfunction: unknown/misformatted token <{1}> in <{2}>")(cmd)(expr));
diff --git a/src/lib/netlist/plib/plists.h b/src/lib/netlist/plib/plists.h
index 525a65a97f2..d6c37eaf5ca 100644
--- a/src/lib/netlist/plib/plists.h
+++ b/src/lib/netlist/plib/plists.h
@@ -10,272 +10,506 @@
#ifndef PLISTS_H_
#define PLISTS_H_
+#include "palloc.h"
+#include "pchrono.h"
#include "pstring.h"
+#include <algorithm>
#include <array>
+#include <atomic>
+#include <mutex>
#include <type_traits>
+#include <utility>
#include <vector>
namespace plib {
-/* ----------------------------------------------------------------------------------------
- * uninitialised_array_t:
- * fixed size array allowing to override constructor and initialize
- * members by placement new.
- *
- * Use with care. This template is provided to improve locality of storage
- * in high frequency applications. It should not be used for anything else.
- * ---------------------------------------------------------------------------------------- */
-
-template <class C, std::size_t N>
-class uninitialised_array_t
-{
-public:
- using iterator = C *;
- using const_iterator = const C *;
-
- //uninitialised_array_t() noexcept = default;
- uninitialised_array_t() noexcept
- : m_initialized(0)
+ /**! fixed size array allowing to override constructor and initialize members by placement new.
+ *
+ * Use with care. This template is provided to improve locality of storage
+ * in high frequency applications. It should not be used for anything else.
+ *
+ */
+ template <class C, std::size_t N>
+ class uninitialised_array_t
{
- }
+ public:
- COPYASSIGNMOVE(uninitialised_array_t, delete)
- ~uninitialised_array_t() noexcept
- {
- if (m_initialized>=N)
- for (std::size_t i=0; i<N; i++)
- (*this)[i].~C();
- }
+ using iterator = C *;
+ using const_iterator = const C *;
- size_t size() const { return N; }
+ //uninitialised_array_t() noexcept = default;
+ uninitialised_array_t() noexcept
+ : m_initialized(0)
+ {
+ }
- C& operator[](const std::size_t &index) noexcept
- {
- return *reinterpret_cast<C *>(&m_buf[index]);
- }
+ COPYASSIGNMOVE(uninitialised_array_t, delete)
+ ~uninitialised_array_t() noexcept
+ {
+ if (m_initialized>=N)
+ for (std::size_t i=0; i<N; i++)
+ (*this)[i].~C();
+ }
- const C& operator[](const std::size_t &index) const noexcept
- {
- return *reinterpret_cast<const C *>(&m_buf[index]);
- }
+ size_t size() const { return N; }
- template<typename... Args>
- void emplace(const std::size_t index, Args&&... args)
- {
- m_initialized++;
- // allocate on buffer
- new (&m_buf[index]) C(std::forward<Args>(args)...);
- }
+ C& operator[](const std::size_t &index) noexcept
+ {
+ return *reinterpret_cast<C *>(&m_buf[index]);
+ }
- iterator begin() const noexcept { return reinterpret_cast<iterator>(&m_buf[0]); }
- iterator end() const noexcept { return reinterpret_cast<iterator>(&m_buf[N]); }
+ const C& operator[](const std::size_t &index) const noexcept
+ {
+ return *reinterpret_cast<const C *>(&m_buf[index]);
+ }
- iterator begin() noexcept { return reinterpret_cast<iterator>(&m_buf[0]); }
- iterator end() noexcept { return reinterpret_cast<iterator>(&m_buf[N]); }
+ template<typename... Args>
+ void emplace(const std::size_t index, Args&&... args)
+ {
+ m_initialized++;
+ // allocate on buffer
+ new (&m_buf[index]) C(std::forward<Args>(args)...);
+ }
- const_iterator cbegin() const noexcept { return reinterpret_cast<const_iterator>(&m_buf[0]); }
- const_iterator cend() const noexcept { return reinterpret_cast<const_iterator>(&m_buf[N]); }
+ iterator begin() const noexcept { return reinterpret_cast<iterator>(&m_buf[0]); }
+ iterator end() const noexcept { return reinterpret_cast<iterator>(&m_buf[N]); }
-protected:
+ iterator begin() noexcept { return reinterpret_cast<iterator>(&m_buf[0]); }
+ iterator end() noexcept { return reinterpret_cast<iterator>(&m_buf[N]); }
-private:
+ const_iterator cbegin() const noexcept { return reinterpret_cast<const_iterator>(&m_buf[0]); }
+ const_iterator cend() const noexcept { return reinterpret_cast<const_iterator>(&m_buf[N]); }
- /* ensure proper alignment */
- PALIGNAS_VECTOROPT()
- std::array<typename std::aligned_storage<sizeof(C), alignof(C)>::type, N> m_buf;
- unsigned m_initialized;
-};
+ protected:
-// ----------------------------------------------------------------------------------------
-// plinkedlist_t: a simple linked list
-// the list allows insertions / deletions if used properly
-// ----------------------------------------------------------------------------------------
+ private:
-#if 0
-template <class LC>
-class linkedlist_t
-{
-public:
+ /* ensure proper alignment */
+ PALIGNAS_VECTOROPT()
+ std::array<typename std::aligned_storage<sizeof(C), alignof(C)>::type, N> m_buf;
+ unsigned m_initialized;
+ };
- struct element_t
+ /**! a simple linked list.
+ *
+ * the list allows insertions deletions whilst being processed.
+ */
+ template <class LC>
+ class linkedlist_t
{
public:
- friend class linkedlist_t<LC>;
+ struct element_t
+ {
+ public:
+ friend class linkedlist_t<LC>;
- constexpr element_t() : m_next(nullptr) {}
- constexpr element_t(const element_t &rhs) = delete;
- constexpr element_t(element_t &&rhs) = delete;
+ constexpr element_t() : m_next(nullptr), m_prev(nullptr) {}
+ ~element_t() noexcept = default;
- constexpr LC *next() const noexcept { return m_next; }
+ COPYASSIGNMOVE(element_t, delete)
+
+ constexpr LC *next() const noexcept { return m_next; }
+ constexpr LC *prev() const noexcept { return m_prev; }
+ private:
+ LC * m_next;
+ LC * m_prev;
+ };
+
+ struct iter_t final : public std::iterator<std::forward_iterator_tag, LC>
+ {
+ private:
+ LC* p;
+ public:
+ explicit constexpr iter_t(LC* x) noexcept : p(x) { }
+ constexpr iter_t(iter_t &rhs) noexcept : p(rhs.p) { }
+ iter_t(iter_t &&rhs) noexcept { std::swap(*this, rhs); }
+ iter_t& operator=(const iter_t &rhs) noexcept { if (this != &rhs) p = rhs.p; return *this; }
+ iter_t& operator=(iter_t &&rhs) noexcept { std::swap(*this, rhs); return *this; }
+ ~iter_t() = default;
+
+ iter_t& operator++() noexcept { p = p->next();return *this; }
+ // NOLINTNEXTLINE(cert-dcl21-cpp)
+ iter_t operator++(int) & noexcept { const iter_t tmp(*this); operator++(); return tmp; }
+
+ constexpr bool operator==(const iter_t& rhs) const noexcept { return p == rhs.p; }
+ constexpr bool operator!=(const iter_t& rhs) const noexcept { return p != rhs.p; }
+ C14CONSTEXPR LC& operator*() noexcept { return *p; }
+ C14CONSTEXPR LC* operator->() noexcept { return p; }
+
+ C14CONSTEXPR LC& operator*() const noexcept { return *p; }
+ C14CONSTEXPR LC* operator->() const noexcept { return p; }
+ };
+
+ constexpr linkedlist_t() : m_head(nullptr) {}
+
+ constexpr iter_t begin() const noexcept { return iter_t(m_head); }
+ constexpr iter_t end() const noexcept { return iter_t(nullptr); }
+
+ void push_front(LC *elem) noexcept
+ {
+ elem->m_next = m_head;
+ elem->m_prev = nullptr;
+ if (m_head)
+ m_head->m_prev = elem;
+ m_head = elem;
+ }
+
+ void push_back(LC *elem) noexcept
+ {
+ LC ** p(&m_head);
+ LC * prev(nullptr);
+ while (*p != nullptr)
+ {
+ prev = *p;
+ p = &((*p)->m_next);
+ }
+ *p = elem;
+ elem->m_prev = prev;
+ elem->m_next = nullptr;
+ }
+
+ void remove(const LC *elem) noexcept
+ {
+ if (elem->m_prev)
+ elem->m_prev->m_next = elem->m_next;
+ else
+ m_head = elem->m_next;
+ if (elem->m_next)
+ elem->m_next->m_prev = elem->m_prev;
+ else
+ {
+ /* update tail */
+ }
+ }
+
+ LC *front() const noexcept { return m_head; }
+ constexpr bool empty() const noexcept { return (m_head == nullptr); }
+ void clear() noexcept
+ {
+ LC *p(m_head);
+ while (p != nullptr)
+ {
+ LC *n(p->m_next);
+ p->m_next = nullptr;
+ p->m_prev = nullptr;
+ p = n;
+ }
+ m_head = nullptr;
+ }
- protected:
- ~element_t() = default;
private:
- LC * m_next;
+ LC *m_head;
};
- struct iter_t final : public std::iterator<std::forward_iterator_tag, LC>
+ // ----------------------------------------------------------------------------------------
+ // FIXME: Move elsewhere
+ // ----------------------------------------------------------------------------------------
+
+ template<bool enabled_ = true>
+ class pspin_mutex
{
- private:
- LC* p;
public:
- explicit constexpr iter_t(LC* x) noexcept : p(x) { }
- explicit constexpr iter_t(const iter_t &rhs) noexcept : p(rhs.p) { }
- iter_t(iter_t &&rhs) noexcept { std::swap(*this, rhs); }
- iter_t& operator=(const iter_t &rhs) { iter_t t(rhs); std::swap(*this, t); return *this; }
- iter_t& operator=(iter_t &&rhs) { std::swap(*this, rhs); return *this; }
- iter_t& operator++() noexcept {p = p->next();return *this;}
- iter_t operator++(int) noexcept {iter_t tmp(*this); operator++(); return tmp;}
- constexpr bool operator==(const iter_t& rhs) const noexcept {return p == rhs.p;}
- constexpr bool operator!=(const iter_t& rhs) const noexcept {return p != rhs.p;}
- /* constexpr */ LC& operator*() noexcept {return *p;}
- /* constexpr */ LC* operator->() noexcept {return p;}
-
- constexpr LC& operator*() const noexcept {return *p;}
- constexpr LC* operator->() const noexcept {return p;}
+ pspin_mutex() noexcept = default;
+ void lock() noexcept{ while (m_lock.test_and_set(std::memory_order_acquire)) { } }
+ void unlock() noexcept { m_lock.clear(std::memory_order_release); }
+ private:
+ PALIGNAS_CACHELINE()
+ std::atomic_flag m_lock = ATOMIC_FLAG_INIT;
};
- constexpr linkedlist_t() : m_head(nullptr) {}
+ template<>
+ class pspin_mutex<false>
+ {
+ public:
+ void lock() const noexcept { }
+ void unlock() const noexcept { }
+ };
- constexpr iter_t begin() const noexcept { return iter_t(m_head); }
- constexpr iter_t end() const noexcept { return iter_t(nullptr); }
+ // ----------------------------------------------------------------------------------------
+ // timed queue
+ // ----------------------------------------------------------------------------------------
- void push_front(LC *elem) noexcept
+ template <class Element, class Time>
+ struct pqentry_t final
{
- elem->m_next = m_head;
- m_head = elem;
- }
+ constexpr pqentry_t() noexcept : m_exec_time(), m_object(nullptr) { }
+ constexpr pqentry_t(const Time t, const Element o) noexcept : m_exec_time(t), m_object(o) { }
+#if 0
+ ~pqentry_t() = default;
+ constexpr pqentry_t(const pqentry_t &e) noexcept = default;
+ constexpr pqentry_t(pqentry_t &&e) noexcept = default;
+ pqentry_t& operator=(pqentry_t && other) noexcept = default;
+ pqentry_t& operator=(const pqentry_t &other) noexcept = default;
- void push_back(LC *elem) noexcept
- {
- LC **p = &m_head;
- while (*p != nullptr)
+ void swap(pqentry_t &other) noexcept
{
- p = &((*p)->m_next);
+ std::swap(m_exec_time, other.m_exec_time);
+ std::swap(m_object, other.m_object);
+ }
+#endif
+ inline bool operator ==(const pqentry_t &rhs) const noexcept
+ {
+ return m_object == rhs.m_object;
}
- *p = elem;
- elem->m_next = nullptr;
- }
- void remove(const LC *elem) noexcept
- {
- auto p = &m_head;
- while(*p != elem)
+ inline bool operator ==(const Element &rhs) const noexcept
{
- //nl_assert(*p != nullptr);
- p = &((*p)->m_next);
+ return m_object == rhs;
}
- (*p) = elem->m_next;
- }
- LC *front() const noexcept { return m_head; }
- void clear() noexcept { m_head = nullptr; }
- constexpr bool empty() const noexcept { return (m_head == nullptr); }
+ inline bool operator <=(const pqentry_t &rhs) const noexcept
+ {
+ return (m_exec_time <= rhs.m_exec_time);
+ }
-private:
- LC *m_head;
-};
-#else
-template <class LC>
-class linkedlist_t
-{
-public:
+ inline bool operator <(const pqentry_t &rhs) const noexcept
+ {
+ return (m_exec_time < rhs.m_exec_time);
+ }
- struct element_t
+ inline static constexpr pqentry_t never() noexcept { return pqentry_t(Time::never(), nullptr); }
+
+ Time m_exec_time;
+ Element m_object;
+ };
+
+ /* Use TS = true for a threadsafe queue */
+ template <class T, bool TS>
+ class timed_queue_linear : nocopyassignmove
{
public:
- friend class linkedlist_t<LC>;
+ explicit timed_queue_linear(const std::size_t list_size)
+ : m_list(list_size)
+ {
+ clear();
+ }
+
+ std::size_t capacity() const noexcept { return m_list.capacity() - 1; }
+ bool empty() const noexcept { return (m_end == &m_list[1]); }
+
+ template<bool KEEPSTAT>
+ void push(T && e) noexcept
+ {
+#if 0
+ /* Lock */
+ lock_guard_type lck(m_lock);
+ T * i(m_end-1);
+ for (; *i < e; --i)
+ {
+ *(i+1) = *(i);
+ if (KEEPSTAT)
+ m_prof_sortmove.inc();
+ }
+ *(i+1) = std::move(e);
+ ++m_end;
+#else
+ /* Lock */
+ lock_guard_type lck(m_lock);
+ T * i(m_end++);
+ *i = std::move(e);
+ for (; *(i-1) < *i; --i)
+ {
+ std::swap(*(i-1), *(i));
+ if (KEEPSTAT)
+ m_prof_sortmove.inc();
+ }
+#endif
+ if (KEEPSTAT)
+ m_prof_call.inc();
+ }
+
+ T pop() noexcept { return *(--m_end); }
+ const T &top() const noexcept { return *(m_end-1); }
- constexpr element_t() : m_next(nullptr), m_prev(nullptr) {}
- ~element_t() noexcept = default;
+ template <bool KEEPSTAT, class R>
+ void remove(const R &elem) noexcept
+ {
+ /* Lock */
+ lock_guard_type lck(m_lock);
+ if (KEEPSTAT)
+ m_prof_remove.inc();
+ for (T * i = m_end - 1; i > &m_list[0]; --i)
+ {
+ // == operator ignores time!
+ if (*i == elem)
+ {
+ std::copy(i+1, m_end--, i);
+ return;
+ }
+ }
+ }
- COPYASSIGNMOVE(element_t, delete)
+ template <bool KEEPSTAT, class R>
+ void retime(R && elem) noexcept
+ {
+ /* Lock */
+ lock_guard_type lck(m_lock);
+ if (KEEPSTAT)
+ m_prof_retime.inc();
+
+ for (R * i = m_end - 1; i > &m_list[0]; --i)
+ {
+ if (*i == elem) // partial equal!
+ {
+ *i = std::forward<R>(elem);
+ while (*(i-1) < *i)
+ {
+ std::swap(*(i-1), *i);
+ --i;
+ }
+ while (i < m_end && *i < *(i+1))
+ {
+ std::swap(*(i+1), *i);
+ ++i;
+ }
+ return;
+ }
+ }
+ }
- constexpr LC *next() const noexcept { return m_next; }
- constexpr LC *prev() const noexcept { return m_prev; }
+ void clear() noexcept
+ {
+ lock_guard_type lck(m_lock);
+ m_end = &m_list[0];
+ /* put an empty element with maximum time into the queue.
+ * the insert algo above will run into this element and doesn't
+ * need a comparison with queue start.
+ */
+ m_list[0] = T::never();
+ m_end++;
+ }
+
+ // save state support & mame disasm
+
+ const T *listptr() const noexcept { return &m_list[1]; }
+ std::size_t size() const noexcept { return static_cast<std::size_t>(m_end - &m_list[1]); }
+ const T & operator[](const std::size_t index) const noexcept { return m_list[ 1 + index]; }
private:
- LC * m_next;
- LC * m_prev;
+ using mutex_type = pspin_mutex<TS>;
+ using lock_guard_type = std::lock_guard<mutex_type>;
+
+ mutex_type m_lock;
+ PALIGNAS_CACHELINE()
+ T * m_end;
+ aligned_vector<T> m_list;
+
+ public:
+ // profiling
+ pperfcount_t<true> m_prof_sortmove;
+ pperfcount_t<true> m_prof_call;
+ pperfcount_t<true> m_prof_remove;
+ pperfcount_t<true> m_prof_retime;
};
- struct iter_t final : public std::iterator<std::forward_iterator_tag, LC>
+ template <class T, bool TS>
+ class timed_queue_heap : nocopyassignmove
{
- private:
- LC* p;
public:
- explicit constexpr iter_t(LC* x) noexcept : p(x) { }
- constexpr iter_t(iter_t &rhs) noexcept : p(rhs.p) { }
- iter_t(iter_t &&rhs) noexcept { std::swap(*this, rhs); }
- iter_t& operator=(const iter_t &rhs) noexcept { iter_t t(rhs); std::swap(*this, t); return *this; }
- iter_t& operator=(iter_t &&rhs) noexcept { std::swap(*this, rhs); return *this; }
- iter_t& operator++() noexcept {p = p->next();return *this;}
- // NOLINTNEXTLINE(cert-dcl21-cpp)
- iter_t operator++(int) & noexcept {const iter_t tmp(*this); operator++(); return tmp;}
-
- ~iter_t() = default;
-
- constexpr bool operator==(const iter_t& rhs) const noexcept {return p == rhs.p;}
- constexpr bool operator!=(const iter_t& rhs) const noexcept {return p != rhs.p;}
- /* constexpr */ LC& operator*() noexcept {return *p;}
- /* constexpr */ LC* operator->() noexcept {return p;}
-
- constexpr LC& operator*() const noexcept {return *p;}
- constexpr LC* operator->() const noexcept {return p;}
- };
- constexpr linkedlist_t() : m_head(nullptr) {}
+ struct compare
+ {
+ constexpr bool operator()(const T &a, const T &b) const { return b <= a; }
+ };
- constexpr iter_t begin() const noexcept { return iter_t(m_head); }
- constexpr iter_t end() const noexcept { return iter_t(nullptr); }
+ explicit timed_queue_heap(const std::size_t list_size)
+ : m_list(list_size)
+ {
+ clear();
+ }
- void push_front(LC *elem) noexcept
- {
- if (m_head)
- m_head->m_prev = elem;
- elem->m_next = m_head;
- elem->m_prev = nullptr;
- m_head = elem;
- }
-
- void push_back(LC *elem) noexcept
- {
- LC ** p(&m_head);
- LC * prev(nullptr);
- while (*p != nullptr)
+ std::size_t capacity() const noexcept { return m_list.capacity(); }
+ bool empty() const noexcept { return &m_list[0] == m_end; }
+
+ template <bool KEEPSTAT>
+ void push(T &&e) noexcept
{
- prev = *p;
- p = &((*p)->m_next);
+ /* Lock */
+ lock_guard_type lck(m_lock);
+ *m_end++ = e;
+ std::push_heap(&m_list[0], m_end, compare());
+ if (KEEPSTAT)
+ m_prof_call.inc();
}
- *p = elem;
- elem->m_prev = prev;
- elem->m_next = nullptr;
- }
- void remove(const LC *elem) noexcept
- {
- if (elem->m_prev)
- elem->m_prev->m_next = elem->m_next;
- else
- m_head = elem->m_next;
- if (elem->m_next)
- elem->m_next->m_prev = elem->m_prev;
- else
+ T pop() noexcept
{
- /* update tail */
+ T ret(m_list[0]);
+ std::pop_heap(&m_list[0], m_end, compare());
+ m_end--;
+ return ret;
}
- }
- LC *front() const noexcept { return m_head; }
- void clear() noexcept { m_head = nullptr; }
- constexpr bool empty() const noexcept { return (m_head == nullptr); }
+ const T &top() const noexcept { return m_list[0]; }
+
+ template <bool KEEPSTAT, class R>
+ void remove(const R &elem) noexcept
+ {
+ /* Lock */
+ lock_guard_type lck(m_lock);
+ if (KEEPSTAT)
+ m_prof_remove.inc();
+ for (T * i = m_end - 1; i >= &m_list[0]; i--)
+ {
+ if (*i == elem)
+ {
+ m_end--;
+ for (;i < m_end; i++)
+ *i = std::move(*(i+1));
+ std::make_heap(&m_list[0], m_end, compare());
+ return;
+ }
+ }
+ }
+
+ template <bool KEEPSTAT>
+ void retime(const T &elem) noexcept
+ {
+ /* Lock */
+ lock_guard_type lck(m_lock);
+ if (KEEPSTAT)
+ m_prof_retime.inc();
+ for (T * i = m_end - 1; i >= &m_list[0]; i--)
+ {
+ if (*i == elem) // partial equal!
+ {
+ *i = elem;
+ std::make_heap(&m_list[0], m_end, compare());
+ return;
+ }
+ }
+ }
+
+ void clear()
+ {
+ lock_guard_type lck(m_lock);
+ m_list.clear();
+ m_end = &m_list[0];
+ }
+
+ // save state support & mame disasm
+
+ constexpr const T *listptr() const { return &m_list[0]; }
+ constexpr std::size_t size() const noexcept { return m_list.size(); }
+ constexpr const T & operator[](const std::size_t index) const { return m_list[ 0 + index]; }
+ private:
+ using mutex_type = pspin_mutex<TS>;
+ using lock_guard_type = std::lock_guard<mutex_type>;
+
+ mutex_type m_lock;
+ std::vector<T> m_list;
+ T *m_end;
+
+ public:
+ // profiling
+ pperfcount_t<true> m_prof_sortmove;
+ pperfcount_t<true> m_prof_call;
+ pperfcount_t<true> m_prof_remove;
+ pperfcount_t<true> m_prof_retime;
+ };
-private:
- LC *m_head;
-};
-#endif
} // namespace plib
#endif /* PLISTS_H_ */
diff --git a/src/lib/netlist/plib/pmempool.h b/src/lib/netlist/plib/pmempool.h
index 7dff02cf573..a4ac4fd393f 100644
--- a/src/lib/netlist/plib/pmempool.h
+++ b/src/lib/netlist/plib/pmempool.h
@@ -123,6 +123,12 @@ namespace plib {
}
}
+ static inline mempool &instance()
+ {
+ static mempool s_mempool;
+ return s_mempool;
+ }
+
void *allocate(size_t align, size_t size)
{
block *b = nullptr;
@@ -189,7 +195,7 @@ namespace plib {
using unique_pool_ptr = std::unique_ptr<T, arena_deleter<mempool, T>>;
template<typename T, typename... Args>
- owned_pool_ptr<T> make_poolptr(Args&&... args)
+ owned_pool_ptr<T> make_owned(Args&&... args)
{
auto *mem = this->allocate(alignof(T), sizeof(T));
try
@@ -220,6 +226,8 @@ namespace plib {
}
}
+ bool operator ==(const mempool &rhs) { return this == &rhs; }
+
};
} // namespace plib
diff --git a/src/lib/netlist/plib/pomp.h b/src/lib/netlist/plib/pomp.h
index 400fbee9e64..79fa0f4bf9b 100644
--- a/src/lib/netlist/plib/pomp.h
+++ b/src/lib/netlist/plib/pomp.h
@@ -14,7 +14,7 @@
#include <cstdint>
-#if HAS_OPENMP
+#if PHAS_OPENMP
#include "omp.h"
#endif
@@ -26,7 +26,7 @@ void for_static(std::size_t numops, const I start, const I end, const T &what)
{
if (numops>1000)
{
- #if HAS_OPENMP && USE_OPENMP
+ #if PHAS_OPENMP && PUSE_OPENMP
#pragma omp parallel for schedule(static)
#endif
for (I i = start; i < end; i++)
@@ -40,7 +40,7 @@ void for_static(std::size_t numops, const I start, const I end, const T &what)
template <typename I, class T>
void for_static(const I start, const I end, const T &what)
{
-#if HAS_OPENMP && USE_OPENMP
+#if PHAS_OPENMP && PUSE_OPENMP
#pragma omp parallel for schedule(static)
#endif
for (I i = start; i < end; i++)
@@ -57,7 +57,7 @@ void for_static_np(const I start, const I end, const T &what)
inline void set_num_threads(const std::size_t threads)
{
-#if HAS_OPENMP && USE_OPENMP
+#if PHAS_OPENMP && PUSE_OPENMP
omp_set_num_threads(threads);
#else
plib::unused_var(threads);
@@ -66,7 +66,7 @@ inline void set_num_threads(const std::size_t threads)
inline std::size_t get_max_threads()
{
-#if HAS_OPENMP && USE_OPENMP
+#if PHAS_OPENMP && PUSE_OPENMP
return omp_get_max_threads();
#else
return 1;
diff --git a/src/lib/netlist/plib/poptions.cpp b/src/lib/netlist/plib/poptions.cpp
index 01ef226cc26..06c2115d40a 100644
--- a/src/lib/netlist/plib/poptions.cpp
+++ b/src/lib/netlist/plib/poptions.cpp
@@ -7,6 +7,7 @@
#include "poptions.h"
#include "pexception.h"
+#include "pstrutil.h"
#include "ptypes.h"
namespace plib {
diff --git a/src/lib/netlist/plib/poptions.h b/src/lib/netlist/plib/poptions.h
index aa2608c2c91..e3ab42b060f 100644
--- a/src/lib/netlist/plib/poptions.h
+++ b/src/lib/netlist/plib/poptions.h
@@ -184,7 +184,7 @@ public:
protected:
int parse(const pstring &argument) override
{
- bool err;
+ bool err(false);
m_val = pstonum_ne<T, true>(argument, err);
return (err ? 1 : (m_val < m_min || m_val > m_max));
}
diff --git a/src/lib/netlist/plib/pparser.cpp b/src/lib/netlist/plib/pparser.cpp
index c2134e50afb..11da93486a4 100644
--- a/src/lib/netlist/plib/pparser.cpp
+++ b/src/lib/netlist/plib/pparser.cpp
@@ -120,7 +120,7 @@ double ptokenizer::get_number_double()
{
error(pfmt("Expected a number, got <{1}>")(tok.str()) );
}
- bool err;
+ bool err(false);
auto ret = plib::pstonum_ne<double, true>(tok.str(), err);
if (err)
error(pfmt("Expected a number, got <{1}>")(tok.str()) );
@@ -134,7 +134,7 @@ long ptokenizer::get_number_long()
{
error(pfmt("Expected a long int, got <{1}>")(tok.str()) );
}
- bool err;
+ bool err(false);
auto ret = plib::pstonum_ne<long, true>(tok.str(), err);
if (err)
error(pfmt("Expected a long int, got <{1}>")(tok.str()) );
@@ -149,6 +149,23 @@ ptokenizer::token_t ptokenizer::get_token()
if (ret.is_type(ENDOFFILE))
return ret;
+ if (m_support_line_markers && ret.is_type(LINEMARKER))
+ {
+ // FIXME: do something with information gathered
+ ret = get_token_internal();
+ if (!ret.is_type(NUMBER))
+ error(pfmt("Expected line number after line marker but got <{1}>")(ret.str()) );
+ ret = get_token_internal();
+ if (!ret.is_type(STRING))
+ error(pfmt("Expected file name after line marker but got <{1}>")(ret.str()) );
+ ret = get_token_internal();
+ while (ret.is_type(NUMBER))
+ {
+ // FIXME: process flags; actually only 1 (file enter) and 2 (after file exit)
+ ret = get_token_internal();
+ }
+ }
+
if (ret.is(m_tok_comment_start))
{
do {
@@ -184,7 +201,9 @@ ptokenizer::token_t ptokenizer::get_token_internal()
return token_t(ENDOFFILE);
}
}
- if (m_number_chars_start.find(c) != pstring::npos)
+ if (m_support_line_markers && c == '#')
+ return token_t(LINEMARKER);
+ else if (m_number_chars_start.find(c) != pstring::npos)
{
/* read number while we receive number or identifier chars
* treat it as an identifier when there are identifier chars in it
@@ -259,11 +278,11 @@ ptokenizer::token_t ptokenizer::get_token_internal()
// A simple preprocessor
// ----------------------------------------------------------------------------------------
-ppreprocessor::ppreprocessor(defines_map_type *defines)
+ppreprocessor::ppreprocessor(psource_collection_t<> &sources, defines_map_type *defines)
: std::istream(new readbuffer(this))
-, m_ifflag(0)
-, m_level(0)
-, m_lineno(0)
+, m_sources(sources)
+, m_if_flag(0)
+, m_if_level(0)
, m_pos(0)
, m_state(PROCESS)
, m_comment(false)
@@ -289,7 +308,20 @@ ppreprocessor::ppreprocessor(defines_map_type *defines)
void ppreprocessor::error(const pstring &err)
{
- throw pexception("PREPRO ERROR: " + err);
+ pstring s("");
+ pstring trail (" from ");
+ pstring trail_first("In file included from ");
+ pstring e = plib::pfmt("PREPRO ERROR: {1}:{2}:0: error: {3}\n")
+ (m_stack.top().m_name, m_stack.top().m_lineno, err);
+ m_stack.pop();
+ while (m_stack.size() > 0)
+ {
+ if (m_stack.size() == 1)
+ trail = trail_first;
+ s = trail + plib::pfmt("{1}:{2}:0\n")(m_stack.top().m_name, m_stack.top().m_lineno) + s;
+ m_stack.pop();
+ }
+ throw pexception("\n" + s + e);
}
#define CHECKTOK2(p_op, p_prio) \
@@ -473,42 +505,73 @@ pstring ppreprocessor::process_line(pstring line)
std::vector<pstring> lti(psplit(lt, " ", true));
if (lti[0] == "#if")
{
- m_level++;
+ m_if_level++;
std::size_t start = 0;
lt = replace_macros(lt);
std::vector<pstring> t(psplit(replace_all(lt.substr(3), " ", ""), m_expr_sep));
auto val = static_cast<int>(expr(t, start, 255));
if (val == 0)
- m_ifflag |= (1 << m_level);
+ m_if_flag |= (1 << m_if_level);
}
else if (lti[0] == "#ifdef")
{
- m_level++;
+ m_if_level++;
if (get_define(lti[1]) == nullptr)
- m_ifflag |= (1 << m_level);
+ m_if_flag |= (1 << m_if_level);
}
else if (lti[0] == "#ifndef")
{
- m_level++;
+ m_if_level++;
if (get_define(lti[1]) != nullptr)
- m_ifflag |= (1 << m_level);
+ m_if_flag |= (1 << m_if_level);
}
else if (lti[0] == "#else")
{
- m_ifflag ^= (1 << m_level);
+ m_if_flag ^= (1 << m_if_level);
}
else if (lti[0] == "#endif")
{
- m_ifflag &= ~(1 << m_level);
- m_level--;
+ m_if_flag &= ~(1 << m_if_level);
+ m_if_level--;
}
else if (lti[0] == "#include")
{
- // ignore
+ if (m_if_flag == 0)
+ {
+ pstring arg("");
+ for (std::size_t i=1; i<lti.size(); i++)
+ arg += (lti[i] + " ");
+
+ arg = plib::trim(arg);
+
+ if (startsWith(arg, "\"") && endsWith(arg, "\""))
+ {
+ arg = arg.substr(1, arg.length() - 2);
+ /* first try local context */
+ auto l(plib::util::buildpath({m_stack.top().m_local_path, arg}));
+ auto lstrm(m_sources.get_stream<>(l));
+ if (lstrm)
+ {
+ m_stack.emplace(input_context(std::move(lstrm), plib::util::path(l), l));
+ }
+ else
+ {
+ auto strm(m_sources.get_stream<>(arg));
+ if (strm)
+ {
+ m_stack.emplace(input_context(std::move(strm), plib::util::path(arg), arg));
+ }
+ else
+ error("include not found:" + arg);
+ }
+ }
+ else
+ error("include misspelled:" + arg);
+ }
}
else if (lti[0] == "#pragma")
{
- if (m_ifflag == 0 && lti.size() > 3 && lti[1] == "NETLIST")
+ if (m_if_flag == 0 && lti.size() > 3 && lti[1] == "NETLIST")
{
if (lti[2] == "warning")
error("NETLIST: " + catremainder(lti, 3, " "));
@@ -516,10 +579,10 @@ pstring ppreprocessor::process_line(pstring line)
}
else if (lti[0] == "#define")
{
- if (m_ifflag == 0)
+ if (m_if_flag == 0)
{
if (lti.size() < 2)
- error("PREPRO: define needs at least one argument: " + line);
+ error("define needs at least one argument: " + line);
else if (lti.size() == 2)
m_defines.insert({lti[1], define_t(lti[1], "")});
else
@@ -534,19 +597,41 @@ pstring ppreprocessor::process_line(pstring line)
}
else
{
- if (m_ifflag == 0)
- error(pfmt("unknown directive on line {1}: {2}")(m_lineno)(replace_macros(line)));
+ if (m_if_flag == 0)
+ error(pfmt("unknown directive on line {1}: {2}")(m_stack.top().m_lineno)(replace_macros(line)));
}
}
else
{
lt = replace_macros(lt);
- if (m_ifflag == 0)
+ if (m_if_flag == 0)
ret += lt;
}
return ret;
}
+void ppreprocessor::process_stack()
+{
+ while (m_stack.size() > 0)
+ {
+ pstring line;
+ pstring linemarker = pfmt("# {1} \"{2}\" 1\n")(m_stack.top().m_lineno, m_stack.top().m_name);
+ m_outbuf += decltype(m_outbuf)(linemarker.c_str());
+ while (m_stack.top().m_reader.readline(line))
+ {
+ m_stack.top().m_lineno++;
+ line = process_line(line);
+ m_outbuf += decltype(m_outbuf)(line.c_str()) + static_cast<char>(10);
+ }
+ m_stack.pop();
+ if (m_stack.size() > 0)
+ {
+ linemarker = pfmt("# {1} \"{2}\" 2\n")(m_stack.top().m_lineno, m_stack.top().m_name);
+ m_outbuf += decltype(m_outbuf)(linemarker.c_str());
+ }
+ }
+}
+
} // namespace plib
diff --git a/src/lib/netlist/plib/pparser.h b/src/lib/netlist/plib/pparser.h
index 0f0e57fca12..ced7e500cad 100644
--- a/src/lib/netlist/plib/pparser.h
+++ b/src/lib/netlist/plib/pparser.h
@@ -12,9 +12,11 @@
#include "pstream.h"
#include "pstring.h"
+#include "putil.h" // psource_t
+
//#include <cstdint>
#include <unordered_map>
-
+#include <stack>
namespace plib {
class ptokenizer
@@ -28,6 +30,7 @@ public:
, m_px(m_cur_line.begin())
, m_unget(0)
, m_string('"')
+ , m_support_line_markers(true) // FIXME
{
}
@@ -42,6 +45,7 @@ public:
TOKEN,
STRING,
COMMENT,
+ LINEMARKER,
UNKNOWN,
ENDOFFILE
};
@@ -156,6 +160,7 @@ private:
token_id_t m_tok_comment_start;
token_id_t m_tok_comment_end;
token_id_t m_tok_line_comment;
+ bool m_support_line_markers;
};
@@ -174,25 +179,7 @@ public:
using defines_map_type = std::unordered_map<pstring, define_t>;
- explicit ppreprocessor(defines_map_type *defines = nullptr);
- ~ppreprocessor() override
- {
- delete rdbuf();
- }
-
- template <typename T>
- ppreprocessor & process(T &&istrm)
- {
- putf8_reader reader(std::forward<T>(istrm));
- pstring line;
- while (reader.readline(line))
- {
- m_lineno++;
- line = process_line(line);
- m_buf += decltype(m_buf)(line.c_str()) + static_cast<char>(10);
- }
- return *this;
- }
+ explicit ppreprocessor(psource_collection_t<> &sources, defines_map_type *defines = nullptr);
COPYASSIGN(ppreprocessor, delete)
ppreprocessor &operator=(ppreprocessor &&src) = delete;
@@ -200,17 +187,30 @@ public:
ppreprocessor(ppreprocessor &&s) noexcept
: std::istream(new readbuffer(this))
, m_defines(std::move(s.m_defines))
+ , m_sources(s.m_sources)
, m_expr_sep(std::move(s.m_expr_sep))
- , m_ifflag(s.m_ifflag)
- , m_level(s.m_level)
- , m_lineno(s.m_lineno)
- , m_buf(std::move(s.m_buf))
+ , m_if_flag(s.m_if_flag)
+ , m_if_level(s.m_if_level)
+ , m_outbuf(std::move(s.m_outbuf))
, m_pos(s.m_pos)
, m_state(s.m_state)
, m_comment(s.m_comment)
{
}
+ ~ppreprocessor() override
+ {
+ delete rdbuf();
+ }
+
+ template <typename T>
+ ppreprocessor & process(T &&istrm)
+ {
+ m_stack.emplace(input_context(std::forward<T>(istrm),"","<stream>"));
+ process_stack();
+ return *this;
+ }
+
protected:
class readbuffer : public std::streambuf
@@ -224,15 +224,14 @@ protected:
int_type underflow() override
{
- //printf("here\n");
if (this->gptr() == this->egptr())
{
/* clang reports sign error - weird */
- std::size_t bytes = pstring_mem_t_size(m_strm->m_buf) - static_cast<std::size_t>(m_strm->m_pos);
+ std::size_t bytes = pstring_mem_t_size(m_strm->m_outbuf) - static_cast<std::size_t>(m_strm->m_pos);
if (bytes > m_buf.size())
bytes = m_buf.size();
- std::copy(m_strm->m_buf.c_str() + m_strm->m_pos, m_strm->m_buf.c_str() + m_strm->m_pos + bytes, m_buf.data());
+ std::copy(m_strm->m_outbuf.c_str() + m_strm->m_pos, m_strm->m_outbuf.c_str() + m_strm->m_pos + bytes, m_buf.data());
//printf("%ld\n", (long int)bytes);
this->setg(m_buf.data(), m_buf.data(), m_buf.data() + bytes);
@@ -242,6 +241,7 @@ protected:
? std::char_traits<char>::eof()
: std::char_traits<char>::to_int_type(*this->gptr());
}
+
private:
ppreprocessor *m_strm;
std::array<char_type, 1024> m_buf;
@@ -261,20 +261,41 @@ private:
LINE_CONTINUATION
};
+ void process_stack();
+
pstring process_line(pstring line);
pstring process_comments(pstring line);
defines_map_type m_defines;
+ psource_collection_t<> &m_sources;
std::vector<pstring> m_expr_sep;
- std::uint_least64_t m_ifflag; // 31 if levels
- int m_level;
- int m_lineno;
- pstring_t<pu8_traits> m_buf;
+ std::uint_least64_t m_if_flag; // 31 if levels
+ int m_if_level;
+
+ struct input_context
+ {
+ template <typename T>
+ input_context(T &&istrm, const pstring &local_path, const pstring &name)
+ : m_reader(std::forward<T>(istrm))
+ , m_lineno(0)
+ , m_local_path(local_path)
+ , m_name(name)
+ {}
+
+ putf8_reader m_reader;
+ int m_lineno;
+ pstring m_local_path;
+ pstring m_name;
+ };
+
+ std::stack<input_context> m_stack;
+ pstring_t<pu8_traits> m_outbuf;
std::istream::pos_type m_pos;
state_e m_state;
pstring m_line;
bool m_comment;
+
};
} // namespace plib
diff --git a/src/lib/netlist/plib/ppmf.h b/src/lib/netlist/plib/ppmf.h
index 6ce65d4e960..035606bb984 100644
--- a/src/lib/netlist/plib/ppmf.h
+++ b/src/lib/netlist/plib/ppmf.h
@@ -15,24 +15,24 @@
/*
*
- * NL_PMF_TYPE_GNUC_PMF
+ * PMF_TYPE_GNUC_PMF
* Use standard pointer to member function syntax C++11
*
- * NL_PMF_TYPE_GNUC_PMF_CONV
+ * PMF_TYPE_GNUC_PMF_CONV
* Use gnu extension and convert the pmf to a function pointer.
* This is not standard compliant and needs
* -Wno-pmf-conversions to compile.
*
- * NL_PMF_TYPE_INTERNAL
+ * PMF_TYPE_INTERNAL
* Use the same approach as MAME for deriving the function pointer.
* This is compiler-dependent as well
*
* Benchmarks for ./nltool -c run -f src/mame/machine/nl_pong.cpp -t 10 -n pong_fast
*
- * NL_PMF_TYPE_INTERNAL: 215% 215%
- * NL_PMF_TYPE_GNUC_PMF: 163% 196%
- * NL_PMF_TYPE_GNUC_PMF_CONV: 215% 215%
- * NL_PMF_TYPE_VIRTUAL: 213% 209%
+ * PMF_TYPE_INTERNAL: 215% 215%
+ * PMF_TYPE_GNUC_PMF: 163% 196%
+ * PMF_TYPE_GNUC_PMF_CONV: 215% 215%
+ * PMF_TYPE_VIRTUAL: 213% 209%
*
* The whole exercise was done to avoid virtual calls. In prior versions of
* netlist, the INTERNAL and GNUC_PMF_CONV approach provided significant improvement.
@@ -41,6 +41,54 @@
*
*/
+//============================================================
+// Macro magic
+//============================================================
+
+//#define PPMF_TYPE 0
+
+#define PPMF_TYPE_PMF 0
+#define PPMF_TYPE_GNUC_PMF_CONV 1
+#define PPMF_TYPE_INTERNAL 2
+
+#if defined(__GNUC__)
+ /* does not work in versions over 4.7.x of 32bit MINGW */
+ #if defined(__MINGW32__) && !defined(__x86_64) && defined(__i386__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)))
+ #define PHAS_PMF_INTERNAL 0
+ #elif defined(__MINGW32__) && !defined(__x86_64) && defined(__i386__)
+ #define PHAS_PMF_INTERNAL 1
+ #define MEMBER_ABI _thiscall
+ #elif defined(__clang__) && defined(__i386__) && defined(_WIN32)
+ #define PHAS_PMF_INTERNAL 0
+ #elif defined(__arm__) || defined(__ARMEL__) || defined(__aarch64__) || defined(__MIPSEL__) || defined(__mips_isa_rev) || defined(__mips64) || defined(__EMSCRIPTEN__)
+ #define PHAS_PMF_INTERNAL 2
+ #else
+ #define PHAS_PMF_INTERNAL 1
+ #endif
+#elif defined(_MSC_VER) && defined (_M_X64)
+ #define PHAS_PMF_INTERNAL 3
+#else
+ #define PHAS_PMF_INTERNAL 0
+#endif
+
+#ifndef MEMBER_ABI
+ #define MEMBER_ABI
+#endif
+
+#ifndef PPMF_TYPE
+ #if (PHAS_PMF_INTERNAL > 0)
+ #define PPMF_TYPE PPMF_TYPE_INTERNAL
+ #else
+ #define PPMF_TYPE PPMF_TYPE_PMF
+ #endif
+#else
+ #undef PHAS_PMF_INTERNAL
+ #define PHAS_PMF_INTERNAL 0
+ #undef MEMBER_ABI
+ #define MEMBER_ABI
+#endif
+
+
#if (PPMF_TYPE == PPMF_TYPE_GNUC_PMF_CONV)
#pragma GCC diagnostic ignored "-Wpmf-conversions"
#endif
@@ -176,13 +224,13 @@ namespace plib {
*reinterpret_cast<function_ptr *>(&m_func) = t;
}
template<typename O>
- inline R call(O *obj, Targs... args)
+ inline R call(O *obj, Targs... args) const noexcept(true)
{
using function_ptr = R (O::*)(Targs...);
- function_ptr t = *reinterpret_cast<function_ptr *>(&m_func);
+ function_ptr t = *reinterpret_cast<const function_ptr *>(&m_func);
return (obj->*t)(std::forward<Targs>(args)...);
}
- bool is_set() {
+ bool is_set() const {
#if defined(_MSC_VER) || (defined (__INTEL_COMPILER) && defined (_M_X64))
int *p = reinterpret_cast<int *>(&m_func);
int *e = p + sizeof(generic_function) / sizeof(int);
@@ -225,12 +273,12 @@ namespace plib {
#endif
}
template<typename O>
- R call(O *obj, Targs... args) const
+ R call(O *obj, Targs... args) const noexcept(true)
{
using function_ptr = MEMBER_ABI R (*)(O *obj, Targs... args);
return (reinterpret_cast<function_ptr>(m_func))(obj, std::forward<Targs>(args)...);
}
- bool is_set() noexcept { return m_func != nullptr; }
+ bool is_set() const noexcept { return m_func != nullptr; }
generic_function get_function() const noexcept { return m_func; }
private:
generic_function m_func;
@@ -244,7 +292,7 @@ namespace plib {
class generic_class;
template <class C>
- using MemberFunctionType = R (C::*)(Targs...);
+ using MemberFunctionType = R (C::*)(Targs...); // noexcept(true) --> c++-17
pmfp() : pmfp_base<R, Targs...>(), m_obj(nullptr) {}
@@ -263,7 +311,7 @@ namespace plib {
m_obj = reinterpret_cast<generic_class *>(object);
}
- inline R operator()(Targs ... args)
+ inline R operator()(Targs ... args) const noexcept(true)
{
return this->call(m_obj, std::forward<Targs>(args)...);
}
diff --git a/src/lib/netlist/plib/pstream.h b/src/lib/netlist/plib/pstream.h
index 160a687c364..77d4c82b87f 100644
--- a/src/lib/netlist/plib/pstream.h
+++ b/src/lib/netlist/plib/pstream.h
@@ -13,6 +13,7 @@
#include "pexception.h"
#include "pfmtlog.h"
#include "pstring.h"
+#include "pstrutil.h"
#include <array>
#include <fstream>
diff --git a/src/lib/netlist/plib/pstring.cpp b/src/lib/netlist/plib/pstring.cpp
index 2eedc6b0371..359b61e247f 100644
--- a/src/lib/netlist/plib/pstring.cpp
+++ b/src/lib/netlist/plib/pstring.cpp
@@ -1,7 +1,7 @@
// license:GPL-2.0+
// copyright-holders:Couriersud
/*
- * nl_string.c
+ * pstring.cpp
*
*/
diff --git a/src/lib/netlist/plib/pstring.h b/src/lib/netlist/plib/pstring.h
index c07fbeeae9d..49905d9c54c 100644
--- a/src/lib/netlist/plib/pstring.h
+++ b/src/lib/netlist/plib/pstring.h
@@ -492,193 +492,6 @@ using putf8string = pstring_t<putf8_traits>;
using pu16string = pstring_t<putf16_traits>;
using pwstring = pstring_t<pwchar_traits>;
-namespace plib
-{
- template<class T>
- struct string_info
- {
- using mem_t = typename T::mem_t;
- };
-
- template<>
- struct string_info<std::string>
- {
- using mem_t = char;
- };
-
- template<typename T>
- pstring to_string(const T &v)
- {
- return pstring(std::to_string(v));
- }
-
- template<typename T>
- pwstring to_wstring(const T &v)
- {
- return pwstring(std::to_wstring(v));
- }
-
-
- template<typename T>
- typename T::size_type find_first_not_of(const T &str, const T &no)
- {
- typename T::size_type pos = 0;
- for (auto it = str.begin(); it != str.end(); ++it, ++pos)
- {
- bool f = true;
- for (typename T::value_type const jt : no)
- {
- if (*it == jt)
- {
- f = false;
- break;
- }
- }
- if (f)
- return pos;
- }
- return T::npos;
- }
-
- template<typename T>
- typename T::size_type find_last_not_of(const T &str, const T &no)
- {
- /* FIXME: reverse iterator */
- typename T::size_type last_found = T::npos;
- typename T::size_type pos = 0;
- for (auto it = str.begin(); it != str.end(); ++it, ++pos)
- {
- bool f = true;
- for (typename T::value_type const jt : no)
- {
- if (*it == jt)
- {
- f = false;
- break;
- }
- }
- if (f)
- last_found = pos;
- }
- return last_found;
- }
-
- template<typename T>
- T ltrim(const T &str, const T &ws = T(" \t\n\r"))
- {
- auto f = find_first_not_of(str, ws);
- return (f == T::npos) ? T() : str.substr(f);
- }
-
- template<typename T>
- T rtrim(const T &str, const T &ws = T(" \t\n\r"))
- {
- auto f = find_last_not_of(str, ws);
- return (f == T::npos) ? T() : str.substr(0, f + 1);
- }
-
- template<typename T>
- T trim(const T &str, const T &ws = T(" \t\n\r"))
- {
- return rtrim(ltrim(str, ws), ws);
- }
-
- template<typename T>
- T left(const T &str, typename T::size_type len)
- {
- return str.substr(0, len);
- }
-
- template<typename T>
- T right(const T &str, typename T::size_type nlen)
- {
- return nlen >= str.length() ? str : str.substr(str.length() - nlen, nlen);
- }
-
- template<typename T>
- bool startsWith(const T &str, const T &arg)
- {
- return (arg == left(str, arg.length()));
- }
-
- template<typename T>
- bool endsWith(const T &str, const T &arg)
- {
- return (right(str, arg.length()) == arg);
- }
-
- template<typename T, typename TA>
- bool startsWith(const T &str, const TA &arg)
- {
- return startsWith(str, static_cast<pstring>(arg));
- }
-
- template<typename T, typename TA>
- bool endsWith(const T &str, const TA &arg)
- {
- return endsWith(str, static_cast<pstring>(arg));
- }
-
- template<typename T>
- std::size_t strlen(const T *str)
- {
- const T *p = str;
- while (*p)
- p++;
- return static_cast<std::size_t>(p - str);
- }
-
- template<typename T>
- T ucase(const T &str)
- {
- T ret;
- for (const auto &c : str)
- if (c >= 'a' && c <= 'z')
- ret += (c - 'a' + 'A');
- else
- ret += c;
- return ret;
- }
-
- template<typename T>
- T rpad(const T &str, const T &ws, const typename T::size_type cnt)
- {
- // FIXME: pstringbuffer ret(*this);
-
- T ret(str);
- typename T::size_type wsl = ws.length();
- for (auto i = ret.length(); i < cnt; i+=wsl)
- ret += ws;
- return ret;
- }
-
- template<typename T>
- T replace_all(const T &str, const T &search, const T &replace)
- {
- T ret;
- const typename T::size_type slen = search.length();
-
- typename T::size_type last_s = 0;
- typename T::size_type s = str.find(search, last_s);
- while (s != T::npos)
- {
- ret += str.substr(last_s, s - last_s);
- ret += replace;
- last_s = s + slen;
- s = str.find(search, last_s);
- }
- ret += str.substr(last_s);
- return ret;
- }
-
- template<typename T, typename T1, typename T2>
- T replace_all(const T &str, const T1 &search, const T2 &replace)
- {
- return replace_all(str, static_cast<T>(search), static_cast<T>(replace));
- }
-
-} // namespace plib
-
// custom specialization of std::hash can be injected in namespace std
namespace std
{
diff --git a/src/lib/netlist/plib/pstrutil.h b/src/lib/netlist/plib/pstrutil.h
new file mode 100644
index 00000000000..d3e62d06af7
--- /dev/null
+++ b/src/lib/netlist/plib/pstrutil.h
@@ -0,0 +1,228 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
+/*
+ * pstrutil.h
+ */
+
+#ifndef PSTRUTIL_H_
+#define PSTRUTIL_H_
+
+#include "pstring.h"
+#include "ptypes.h"
+
+#include <exception>
+#include <iterator>
+#include <limits>
+#include <stdexcept>
+#include <string>
+#include <type_traits>
+
+namespace plib
+{
+ template<class T>
+ struct string_info
+ {
+ using mem_t = typename T::mem_t;
+ };
+
+ template<>
+ struct string_info<std::string>
+ {
+ using mem_t = char;
+ };
+
+ template<typename T>
+ pstring to_string(const T &v)
+ {
+ return pstring(std::to_string(v));
+ }
+
+ template<typename T>
+ pwstring to_wstring(const T &v)
+ {
+ return pwstring(std::to_wstring(v));
+ }
+
+ template<typename T>
+ typename T::size_type find_first_not_of(const T &str, const T &no)
+ {
+ typename T::size_type pos = 0;
+ for (auto it = str.begin(); it != str.end(); ++it, ++pos)
+ {
+ bool f = true;
+ for (typename T::value_type const jt : no)
+ {
+ if (*it == jt)
+ {
+ f = false;
+ break;
+ }
+ }
+ if (f)
+ return pos;
+ }
+ return T::npos;
+ }
+
+ template<typename T>
+ typename T::size_type find_last_not_of(const T &str, const T &no)
+ {
+ /* FIXME: reverse iterator */
+ typename T::size_type last_found = T::npos;
+ typename T::size_type pos = 0;
+ for (auto it = str.begin(); it != str.end(); ++it, ++pos)
+ {
+ bool f = true;
+ for (typename T::value_type const jt : no)
+ {
+ if (*it == jt)
+ {
+ f = false;
+ break;
+ }
+ }
+ if (f)
+ last_found = pos;
+ }
+ return last_found;
+ }
+
+ template<typename T>
+ typename T::size_type find_last_of(const T &str, const T &no)
+ {
+ typename T::size_type last_found = T::npos;
+ typename T::size_type pos = 0;
+ for (auto it = str.begin(); it != str.end(); ++it, ++pos)
+ {
+ bool f = false;
+ for (typename T::value_type const jt : no)
+ {
+ if (*it == jt)
+ {
+ f = true;
+ break;
+ }
+ }
+ if (f)
+ last_found = pos;
+ }
+ return last_found;
+ }
+
+ template<typename T>
+ T ltrim(const T &str, const T &ws = T(" \t\n\r"))
+ {
+ auto f = find_first_not_of(str, ws);
+ return (f == T::npos) ? T() : str.substr(f);
+ }
+
+ template<typename T>
+ T rtrim(const T &str, const T &ws = T(" \t\n\r"))
+ {
+ auto f = find_last_not_of(str, ws);
+ return (f == T::npos) ? T() : str.substr(0, f + 1);
+ }
+
+ template<typename T>
+ T trim(const T &str, const T &ws = T(" \t\n\r"))
+ {
+ return rtrim(ltrim(str, ws), ws);
+ }
+
+ template<typename T>
+ T left(const T &str, typename T::size_type len)
+ {
+ return str.substr(0, len);
+ }
+
+ template<typename T>
+ T right(const T &str, typename T::size_type nlen)
+ {
+ return nlen >= str.length() ? str : str.substr(str.length() - nlen, nlen);
+ }
+
+ template<typename T>
+ bool startsWith(const T &str, const T &arg)
+ {
+ return (arg == left(str, arg.length()));
+ }
+
+ template<typename T>
+ bool endsWith(const T &str, const T &arg)
+ {
+ return (right(str, arg.length()) == arg);
+ }
+
+ template<typename T, typename TA>
+ bool startsWith(const T &str, const TA &arg)
+ {
+ return startsWith(str, static_cast<pstring>(arg));
+ }
+
+ template<typename T, typename TA>
+ bool endsWith(const T &str, const TA &arg)
+ {
+ return endsWith(str, static_cast<pstring>(arg));
+ }
+
+ template<typename T>
+ std::size_t strlen(const T *str)
+ {
+ const T *p = str;
+ while (*p)
+ p++;
+ return static_cast<std::size_t>(p - str);
+ }
+
+ template<typename T>
+ T ucase(const T &str)
+ {
+ T ret;
+ for (const auto &c : str)
+ if (c >= 'a' && c <= 'z')
+ ret += (c - 'a' + 'A');
+ else
+ ret += c;
+ return ret;
+ }
+
+ template<typename T>
+ T rpad(const T &str, const T &ws, const typename T::size_type cnt)
+ {
+ // FIXME: pstringbuffer ret(*this);
+
+ T ret(str);
+ typename T::size_type wsl = ws.length();
+ for (auto i = ret.length(); i < cnt; i+=wsl)
+ ret += ws;
+ return ret;
+ }
+
+ template<typename T>
+ T replace_all(const T &str, const T &search, const T &replace)
+ {
+ T ret;
+ const typename T::size_type slen = search.length();
+
+ typename T::size_type last_s = 0;
+ typename T::size_type s = str.find(search, last_s);
+ while (s != T::npos)
+ {
+ ret += str.substr(last_s, s - last_s);
+ ret += replace;
+ last_s = s + slen;
+ s = str.find(search, last_s);
+ }
+ ret += str.substr(last_s);
+ return ret;
+ }
+
+ template<typename T, typename T1, typename T2>
+ T replace_all(const T &str, const T1 &search, const T2 &replace)
+ {
+ return replace_all(str, static_cast<T>(search), static_cast<T>(replace));
+ }
+
+} // namespace plib
+
+#endif /* PSTRUTIL_H_ */
diff --git a/src/lib/netlist/plib/ptypes.h b/src/lib/netlist/plib/ptypes.h
index bda62099150..adaa6a2b2fd 100644
--- a/src/lib/netlist/plib/ptypes.h
+++ b/src/lib/netlist/plib/ptypes.h
@@ -14,6 +14,7 @@
#include <string>
#include <type_traits>
+// noexcept on move operator -> issue with macosx clang
#define COPYASSIGNMOVE(name, def) \
name(const name &) = def; \
name(name &&) noexcept = def; \
@@ -35,14 +36,14 @@ namespace plib
template<> struct is_integral<INT128> { static constexpr bool value = true; };
template<> struct numeric_limits<UINT128>
{
- static constexpr UINT128 max()
+ static constexpr UINT128 max() noexcept
{
return ~((UINT128)0);
}
};
template<> struct numeric_limits<INT128>
{
- static constexpr INT128 max()
+ static constexpr INT128 max() noexcept
{
return (~((UINT128)0)) >> 1;
}
@@ -79,7 +80,7 @@ namespace plib
// Avoid unused variable warnings
//============================================================
template<typename... Ts>
- inline void unused_var(Ts&&...) {}
+ inline void unused_var(Ts&&...) noexcept {}
//============================================================
// is_pow2
@@ -99,7 +100,7 @@ namespace plib
template<typename T>
constexpr
typename std::enable_if<std::is_integral<T>::value && std::is_signed<T>::value, T>::type
- abs(T v)
+ abs(T v) noexcept
{
return v < 0 ? -v : v;
}
@@ -107,14 +108,14 @@ namespace plib
template<typename T>
constexpr
typename std::enable_if<std::is_integral<T>::value && std::is_unsigned<T>::value, T>::type
- abs(T v)
+ abs(T v) noexcept
{
return v;
}
template<typename M, typename N>
constexpr typename std::common_type<M, N>::type
- gcd(M m, N n)
+ gcd(M m, N n) noexcept
{
static_assert(std::is_integral<M>::value, "gcd: M must be an integer");
static_assert(std::is_integral<N>::value, "gcd: N must be an integer");
@@ -126,7 +127,7 @@ namespace plib
template<typename M, typename N>
constexpr typename std::common_type<M, N>::type
- lcm(M m, N n)
+ lcm(M m, N n) noexcept
{
static_assert(std::is_integral<M>::value, "lcm: M must be an integer");
static_assert(std::is_integral<N>::value, "lcm: N must be an integer");
diff --git a/src/lib/netlist/plib/putil.cpp b/src/lib/netlist/plib/putil.cpp
index 7b33bed8eff..f6eed734a3e 100644
--- a/src/lib/netlist/plib/putil.cpp
+++ b/src/lib/netlist/plib/putil.cpp
@@ -3,17 +3,42 @@
#include "putil.h"
#include "plists.h"
+#include "pstrutil.h"
#include "ptypes.h"
#include <algorithm>
-//#include <cstdlib>
-//#include <cstring>
#include <initializer_list>
namespace plib
{
namespace util
{
+ #ifdef _WIN32
+ static constexpr const char PATH_SEP = '\\';
+ #else
+ static constexpr const char PATH_SEP = '/';
+ #endif
+
+ pstring basename(pstring filename)
+ {
+ auto p=find_last_of(filename, pstring(1, PATH_SEP));
+ if (p == pstring::npos)
+ return filename;
+ else
+ return filename.substr(p+1);
+ }
+
+ pstring path(pstring filename)
+ {
+ auto p=find_last_of(filename, pstring(1, PATH_SEP));
+ if (p == pstring::npos)
+ return "";
+ else if (p == 0) // root case
+ return filename.substr(0, 1);
+ else
+ return filename.substr(0, p);
+ }
+
pstring buildpath(std::initializer_list<pstring> list )
{
pstring ret = "";
@@ -22,11 +47,7 @@ namespace plib
if (ret == "")
ret = elem;
else
- #ifdef _WIN32
- ret = ret + '\\' + elem;
- #else
- ret += ('/' + elem);
- #endif
+ ret += (PATH_SEP + elem);
}
return ret;
}
diff --git a/src/lib/netlist/plib/putil.h b/src/lib/netlist/plib/putil.h
index 8fd74ac8b8c..227648b172b 100644
--- a/src/lib/netlist/plib/putil.h
+++ b/src/lib/netlist/plib/putil.h
@@ -10,6 +10,8 @@
#include "pexception.h"
#include "pstring.h"
+#include "palloc.h"
+
#include <algorithm>
#include <initializer_list>
#include <iostream>
@@ -24,8 +26,118 @@
namespace plib
{
+ // ----------------------------------------------------------------------------------------
+ // A Generic netlist sources implementation
+ // ----------------------------------------------------------------------------------------
+
+ class psource_t
+ {
+ public:
+
+ using stream_ptr = plib::unique_ptr<std::istream>;
+
+ psource_t()
+ {}
+
+ COPYASSIGNMOVE(psource_t, delete)
+
+ virtual ~psource_t() noexcept = default;
+
+ virtual stream_ptr stream(const pstring &name) = 0;
+ private:
+ };
+
+ /**! Generic string source
+ *
+ * Will return the given string when name matches.
+ * Is used in preprocessor code to eliminate inclusion of certain files.
+ *
+ * @tparam TS base stream class. Default is psource_t
+ */
+ template <typename TS = psource_t>
+ class psource_str_t : public TS
+ {
+ public:
+ psource_str_t(pstring name, pstring str)
+ : m_name(name), m_str(str)
+ {}
+
+ COPYASSIGNMOVE(psource_str_t, delete)
+ virtual ~psource_str_t() noexcept = default;
+
+ typename TS::stream_ptr stream(const pstring &name) override
+ {
+ if (name == m_name)
+ return plib::make_unique<std::stringstream>(m_str);
+ else
+ return typename TS::stream_ptr(nullptr);
+ }
+ private:
+ pstring m_name;
+ pstring m_str;
+ };
+
+ /**! Generic sources collection
+ *
+ * @tparam TS base stream class. Default is psource_t
+ */
+ template <typename TS = psource_t>
+ class psource_collection_t
+ {
+ public:
+ using source_type = plib::unique_ptr<TS>;
+ using list_t = std::vector<source_type>;
+
+ psource_collection_t()
+ {}
+
+ COPYASSIGNMOVE(psource_collection_t, delete)
+ virtual ~psource_collection_t() noexcept = default;
+
+ void add_source(source_type &&src)
+ {
+ m_collection.push_back(std::move(src));
+ }
+
+ template <typename S = TS>
+ typename S::stream_ptr get_stream(pstring name)
+ {
+ for (auto &s : m_collection)
+ {
+ auto source(dynamic_cast<S *>(s.get()));
+ if (source)
+ {
+ auto strm = source->stream(name);
+ if (strm)
+ return strm;
+ }
+ }
+ return typename S::stream_ptr(nullptr);
+ }
+
+ template <typename S, typename F>
+ bool for_all(pstring name, F lambda)
+ {
+ for (auto &s : m_collection)
+ {
+ auto source(dynamic_cast<S *>(s.get()));
+ if (source)
+ {
+ if (lambda(source))
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private:
+ list_t m_collection;
+ };
+
namespace util
{
+ pstring basename(pstring filename);
+ pstring path(pstring filename);
pstring buildpath(std::initializer_list<pstring> list );
pstring environment(const pstring &var, const pstring &default_val);
} // namespace util
@@ -242,18 +354,21 @@ namespace plib
ename (E v) : m_v(v) { } \
template <typename T> explicit ename(T val) { m_v = static_cast<E>(val); } \
bool set_from_string (const pstring &s) { \
- static const pstring strings = # __VA_ARGS__; \
- int f = from_string_int(strings, s); \
+ int f = from_string_int(strings(), s); \
if (f>=0) { m_v = static_cast<E>(f); return true; } else { return false; } \
} \
operator E() const {return m_v;} \
bool operator==(const ename &rhs) const {return m_v == rhs.m_v;} \
bool operator==(const E &rhs) const {return m_v == rhs;} \
std::string name() const { \
- static const pstring strings = # __VA_ARGS__; \
- return nthstr(static_cast<int>(m_v), strings); \
+ return nthstr(static_cast<int>(m_v), strings()); \
} \
- private: E m_v; };
+ private: E m_v; \
+ static pstring strings() {\
+ static const pstring lstrings = # __VA_ARGS__; \
+ return lstrings; \
+ } \
+ };
#endif /* PUTIL_H_ */
diff --git a/src/lib/netlist/prg/nltool.cpp b/src/lib/netlist/prg/nltool.cpp
index a5795108753..f34c83d5382 100644
--- a/src/lib/netlist/prg/nltool.cpp
+++ b/src/lib/netlist/prg/nltool.cpp
@@ -31,6 +31,7 @@ public:
opt_grp1(*this, "General options", "The following options apply to all commands."),
opt_cmd (*this, "c", "cmd", 0, std::vector<pstring>({"run","validate","convert","listdevices","static","header","docheader"}), "run|validate|convert|listdevices|static|header|docheader"),
opt_file(*this, "f", "file", "-", "file to process (default is stdin)"),
+ opt_includes(*this, "I", "include", "Add the directory to the list of directories to be searched for header files. This option may be specified repeatedly."),
opt_defines(*this, "D", "define", "predefine value as macro, e.g. -Dname=value. If '=value' is omitted predefine it as 1. This option may be specified repeatedly."),
opt_rfolders(*this, "r", "rom", "where to look for data files"),
opt_verb(*this, "v", "verbose", "be verbose - this produces lots of output"),
@@ -41,7 +42,10 @@ public:
opt_grp2(*this, "Options for run and static commands", "These options apply to run and static commands."),
opt_name(*this, "n", "name", "", "the netlist in file specified by ""-f"" option to run; default is first one"),
- opt_grp3(*this, "Options for run command", "These options are only used by the run command."),
+ opt_grp3(*this, "Options for static command", "These options apply to static command."),
+ opt_dir(*this, "d", "dir", "", "output directory for the generated files"),
+
+ opt_grp4(*this, "Options for run command", "These options are only used by the run command."),
opt_ttr (*this, "t", "time_to_run", 1.0, "time to run the emulation (seconds)\n\n abc def\n\n xyz"),
opt_stats(*this, "s", "statistics", "gather runtime statistics"),
opt_logs(*this, "l", "log" , "define terminal to log. This option may be specified repeatedly."),
@@ -49,10 +53,13 @@ public:
opt_loadstate(*this,"", "loadstate", "", "load state from file and continue from there"),
opt_savestate(*this,"", "savestate", "", "save state to file at end of run"),
- opt_grp4(*this, "Options for convert command", "These options are only used by the convert command."),
+ opt_grp5(*this, "Options for convert command", "These options are only used by the convert command."),
opt_type(*this, "y", "type", 0, std::vector<pstring>({"spice","eagle","rinf"}), "type of file to be converted: spice,eagle,rinf"),
- opt_grp5(*this, "Options for header command", "These options are only used by the header command."),
+ opt_grp6(*this, "Options for validate command", "These options are only used by the validate command."),
+ opt_extended_validation(*this, "", "extended", "Identify issues with power terminals."),
+
+ opt_grp7(*this, "Options for header command", "These options are only used by the header command."),
opt_tabwidth(*this, "", "tab-width", 4, "Tab width for output."),
opt_linewidth(*this,"", "line-width", 72, "Line width for output."),
@@ -70,6 +77,7 @@ public:
plib::option_group opt_grp1;
plib::option_str_limit<unsigned> opt_cmd;
plib::option_str opt_file;
+ plib::option_vec opt_includes;
plib::option_vec opt_defines;
plib::option_vec opt_rfolders;
plib::option_bool opt_verb;
@@ -79,15 +87,19 @@ public:
plib::option_group opt_grp2;
plib::option_str opt_name;
plib::option_group opt_grp3;
+ plib::option_str opt_dir;
+ plib::option_group opt_grp4;
plib::option_num<double> opt_ttr;
plib::option_bool opt_stats;
plib::option_vec opt_logs;
plib::option_str opt_inp;
plib::option_str opt_loadstate;
plib::option_str opt_savestate;
- plib::option_group opt_grp4;
- plib::option_str_limit<unsigned> opt_type;
plib::option_group opt_grp5;
+ plib::option_str_limit<unsigned> opt_type;
+ plib::option_group opt_grp6;
+ plib::option_bool opt_extended_validation;
+ plib::option_group opt_grp7;
plib::option_num<unsigned> opt_tabwidth;
plib::option_num<unsigned> opt_linewidth;
plib::option_example opt_ex1;
@@ -130,21 +142,21 @@ NETLIST_END()
CORE IMPLEMENTATION
***************************************************************************/
-class netlist_data_folder_t : public netlist::source_t
+class netlist_data_folder_t : public netlist::source_data_t
{
public:
netlist_data_folder_t(const pstring &folder)
- : netlist::source_t(netlist::source_t::DATA)
+ : netlist::source_data_t()
, m_folder(folder)
{
}
- plib::unique_ptr<std::istream> stream(const pstring &file) override
+ stream_ptr stream(const pstring &file) override
{
pstring name = m_folder + "/" + file;
auto strm(plib::make_unique<std::ifstream>(plib::filesystem::u8path(name)));
if (strm->fail())
- return plib::unique_ptr<std::istream>(nullptr);
+ return stream_ptr(nullptr);
else
{
strm->imbue(std::locale::classic());
@@ -188,7 +200,8 @@ public:
void read_netlist(const pstring &filename, const pstring &name,
const std::vector<pstring> &logs,
const std::vector<pstring> &defines,
- const std::vector<pstring> &roms)
+ const std::vector<pstring> &roms,
+ const std::vector<pstring> &includes)
{
// read the netlist ...
@@ -198,6 +211,11 @@ public:
for (auto & r : roms)
setup().register_source(plib::make_unique<netlist_data_folder_t>(r));
+ using a = plib::psource_str_t<plib::psource_t>;
+ setup().add_include(plib::make_unique<a>("netlist/devices/net_lib.h",""));
+ for (auto & i : includes)
+ setup().add_include(plib::make_unique<netlist_data_folder_t>(i));
+
setup().register_source(plib::make_unique<netlist::source_file_t>(filename));
setup().include(name);
create_dynamic_logs(logs);
@@ -291,7 +309,7 @@ struct input_t
: m_value(0.0)
{
std::array<char, 400> buf; // NOLINT(cppcoreguidelines-pro-type-member-init)
- double t;
+ double t(0);
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg)
int e = std::sscanf(line.c_str(), "%lf,%[^,],%lf", &t, buf.data(), &m_value);
if (e != 3)
@@ -367,7 +385,7 @@ void tool_app_t::run()
nt.read_netlist(opt_file(), opt_name(),
opt_logs(),
- m_options, opt_rfolders());
+ m_options, opt_rfolders(), opt_includes());
nt.reset();
@@ -455,7 +473,7 @@ void tool_app_t::validate()
m_errors = 0;
m_warnings = 0;
- nt.setup().enable_validation();
+ nt.setup().set_extended_validation(opt_extended_validation());
try
{
@@ -463,7 +481,7 @@ void tool_app_t::validate()
nt.read_netlist(opt_file(), opt_name(),
opt_logs(),
- m_options, opt_rfolders());
+ m_options, opt_rfolders(), opt_includes());
}
catch (netlist::nl_exception &e)
{
@@ -484,6 +502,9 @@ void tool_app_t::validate()
void tool_app_t::static_compile()
{
+ if (!opt_dir.was_specified())
+ throw netlist::nl_exception("--dir option needs to be specified");
+
netlist_tool_t nt(*this, "netlist");
nt.init();
@@ -494,7 +515,7 @@ void tool_app_t::static_compile()
nt.read_netlist(opt_file(), opt_name(),
opt_logs(),
- m_options, opt_rfolders());
+ m_options, opt_rfolders(), opt_includes());
// need to reset ...
@@ -506,7 +527,8 @@ void tool_app_t::static_compile()
for (auto &e : mp)
{
- pout.write(e.second);
+ auto sout(std::ofstream(opt_dir() + "/" + e.first + ".c" ));
+ sout << e.second;
}
nt.stop();
@@ -700,7 +722,7 @@ void tool_app_t::listdevices()
nt.setup().prepare_to_run();
- std::vector<netlist::pool_owned_ptr<netlist::core_device_t>> devs;
+ std::vector<netlist::unique_pool_ptr<netlist::core_device_t>> devs;
for (auto & f : list)
{
@@ -810,8 +832,6 @@ int tool_app_t::execute()
if (opt_help())
{
- pout(plib::pfmt("{:10.3}\n").f(20.0));
- //pout(plib::pfmt("{10.3}\n").f(20));
pout(usage());
return 0;
}
diff --git a/src/lib/netlist/solver/nld_matrix_solver.cpp b/src/lib/netlist/solver/nld_matrix_solver.cpp
index 3535424b421..d081ad06464 100644
--- a/src/lib/netlist/solver/nld_matrix_solver.cpp
+++ b/src/lib/netlist/solver/nld_matrix_solver.cpp
@@ -15,15 +15,16 @@ namespace netlist
namespace devices
{
- terms_for_net_t::terms_for_net_t()
+ terms_for_net_t::terms_for_net_t(analog_net_t * net)
: m_railstart(0)
, m_last_V(0.0)
, m_DD_n_m_1(0.0)
, m_h_n_m_1(1e-12)
+ , m_net(net)
{
}
- void terms_for_net_t::add(terminal_t *term, int net_other, bool sorted)
+ void terms_for_net_t::add_terminal(terminal_t *term, int net_other, bool sorted)
{
if (sorted)
for (std::size_t i=0; i < m_connected_net_idx.size(); i++)
@@ -65,13 +66,11 @@ namespace devices
log().debug("New solver setup\n");
- m_nets.clear();
m_terms.clear();
for (auto & net : nets)
{
- m_nets.push_back(net);
- m_terms.push_back(plib::make_unique<terms_for_net_t>());
+ m_terms.push_back(plib::make_unique<terms_for_net_t>(net));
m_rails_temp.push_back(plib::make_unique<terms_for_net_t>());
}
@@ -115,9 +114,9 @@ namespace devices
{
pstring nname(this->name() + "." + pstring(plib::pfmt("m{1}")(m_inps.size())));
nl_assert(p->net().is_analog());
- auto net_proxy_output_u = pool().make_poolptr<proxied_analog_output_t>(*this, nname, static_cast<analog_net_t *>(&p->net()));
+ auto net_proxy_output_u = pool().make_unique<proxied_analog_output_t>(*this, nname, static_cast<analog_net_t *>(&p->net()));
net_proxy_output = net_proxy_output_u.get();
- m_inps.push_back(std::move(net_proxy_output_u));
+ m_inps.emplace_back(std::move(net_proxy_output_u));
}
net_proxy_output->net().add_terminal(*p);
// FIXME: repeated calling - kind of brute force
@@ -159,7 +158,7 @@ namespace devices
*
*/
- const std::size_t iN = m_nets.size();
+ const std::size_t iN = m_terms.size();
switch (sort)
{
@@ -174,7 +173,6 @@ namespace devices
if (pi < pk)
{
std::swap(m_terms[i], m_terms[k]);
- std::swap(m_nets[i], m_nets[k]);
pk = get_weight_around_diag(k,k);
}
}
@@ -192,7 +190,6 @@ namespace devices
if (pi.first <= pk.first && pi.second >= pk.second)
{
std::swap(m_terms[i], m_terms[k]);
- std::swap(m_nets[i], m_nets[k]);
pk = get_left_right_of_diag(k,k);
}
}
@@ -210,7 +207,6 @@ namespace devices
if ((static_cast<int>(m_terms[k]->m_railstart) - static_cast<int>(m_terms[i]->m_railstart)) * sort_order < 0)
{
std::swap(m_terms[i], m_terms[k]);
- std::swap(m_nets[i], m_nets[k]);
}
}
}
@@ -231,13 +227,13 @@ namespace devices
void matrix_solver_t::setup_matrix()
{
- const std::size_t iN = m_nets.size();
+ const std::size_t iN = m_terms.size();
for (std::size_t k = 0; k < iN; k++)
{
m_terms[k]->m_railstart = m_terms[k]->count();
for (std::size_t i = 0; i < m_rails_temp[k]->count(); i++)
- this->m_terms[k]->add(m_rails_temp[k]->terms()[i], m_rails_temp[k]->m_connected_net_idx.data()[i], false);
+ this->m_terms[k]->add_terminal(m_rails_temp[k]->terms()[i], m_rails_temp[k]->m_connected_net_idx.data()[i], false);
}
// free all - no longer needed
@@ -422,7 +418,7 @@ namespace devices
++m_stat_vsolver_calls;
if (has_dynamic_devices())
{
- std::size_t this_resched;
+ std::size_t this_resched(0);
std::size_t newton_loops = 0;
do
{
@@ -464,10 +460,10 @@ namespace devices
return next_time_step;
}
- int matrix_solver_t::get_net_idx(detail::net_t *net)
+ int matrix_solver_t::get_net_idx(const analog_net_t *net) const
{
- for (std::size_t k = 0; k < m_nets.size(); k++)
- if (m_nets[k] == net)
+ for (std::size_t k = 0; k < m_terms.size(); k++)
+ if (m_terms[k]->isNet(net))
return static_cast<int>(k);
return -1;
}
@@ -539,19 +535,19 @@ namespace devices
{
if (term->connected_terminal()->net().isRailNet())
{
- m_rails_temp[k]->add(term, -1, false);
+ m_rails_temp[k]->add_terminal(term, -1, false);
}
else
{
int ot = get_net_idx(&term->connected_terminal()->net());
if (ot>=0)
{
- m_terms[k]->add(term, ot, true);
+ m_terms[k]->add_terminal(term, ot, true);
}
/* Should this be allowed ? */
else // if (ot<0)
{
- m_rails_temp[k]->add(term, ot, true);
+ m_rails_temp[k]->add_terminal(term, ot, true);
log().fatal(MF_FOUND_TERM_WITH_MISSING_OTHERNET(term->name()));
}
}
@@ -563,19 +559,16 @@ namespace devices
if (m_params.m_dynamic_ts)
{
- for (std::size_t k = 0, iN=m_terms.size(); k < iN; k++)
+ for (auto &t : m_terms)
{
- analog_net_t *n = m_nets[k];
- terms_for_net_t *t = m_terms[k].get();
-
//const nl_double DD_n = (n->Q_Analog() - t->m_last_V);
// avoid floating point exceptions
- const nl_double DD_n = std::max(-1e100, std::min(1e100,(n->Q_Analog() - t->m_last_V)));
+ const nl_double DD_n = std::max(-1e100, std::min(1e100,(t->getV() - t->m_last_V)));
const nl_double hn = cur_ts;
//printf("%g %g %g %g\n", DD_n, hn, t->m_DD_n_m_1, t->m_h_n_m_1);
nl_double DD2 = (DD_n / hn - t->m_DD_n_m_1 / t->m_h_n_m_1) / (hn + t->m_h_n_m_1);
- nl_double new_net_timestep;
+ nl_double new_net_timestep(0);
t->m_h_n_m_1 = hn;
t->m_DD_n_m_1 = DD_n;
@@ -587,7 +580,7 @@ namespace devices
if (new_net_timestep < new_solver_timestep)
new_solver_timestep = new_net_timestep;
- t->m_last_V = n->Q_Analog();
+ t->m_last_V = t->getV();
}
if (new_solver_timestep < m_params.m_min_timestep)
{
@@ -608,7 +601,7 @@ namespace devices
{
log().verbose("==============================================");
log().verbose("Solver {1}", this->name());
- log().verbose(" ==> {1} nets", this->m_nets.size()); //, (*(*groups[i].first())->m_core_terms.first())->name());
+ log().verbose(" ==> {1} nets", this->m_terms.size()); //, (*(*groups[i].first())->m_core_terms.first())->name());
log().verbose(" has {1} elements", this->has_dynamic_devices() ? "dynamic" : "no dynamic");
log().verbose(" has {1} elements", this->has_timestep_devices() ? "timestep" : "no timestep");
log().verbose(" {1:6.3} average newton raphson loops",
diff --git a/src/lib/netlist/solver/nld_matrix_solver.h b/src/lib/netlist/solver/nld_matrix_solver.h
index 888f2c79309..1a452917f0f 100644
--- a/src/lib/netlist/solver/nld_matrix_solver.h
+++ b/src/lib/netlist/solver/nld_matrix_solver.h
@@ -10,6 +10,7 @@
#include "netlist/nl_base.h"
#include "netlist/nl_errstr.h"
+#include "plib/mat_cr.h"
#include "plib/palloc.h"
#include "plib/pmatrix2d.h"
#include "plib/putil.h"
@@ -29,6 +30,16 @@ namespace devices
PREFER_BAND_MATRIX
)
+ P_ENUM(matrix_type_e,
+ SOR_MAT,
+ MAT_CR,
+ MAT,
+ SM,
+ W,
+ SOR,
+ GMRES
+ )
+
struct solver_parameters_t
{
solver_parameters_t(device_t &parent)
@@ -36,7 +47,7 @@ namespace devices
/* iteration parameters */
, m_gs_sor(parent, "SOR_FACTOR", 1.059)
- , m_method(parent, "METHOD", "MAT_CR")
+ , m_method(parent, "METHOD", matrix_type_e::MAT_CR)
, m_accuracy(parent, "ACCURACY", 1e-7)
, m_gs_loops(parent, "GS_LOOPS", 9) // Gauss-Seidel loops
@@ -75,7 +86,7 @@ namespace devices
param_double_t m_freq;
param_double_t m_gs_sor;
- param_str_t m_method;
+ param_enum_t<matrix_type_e> m_method;
param_double_t m_accuracy;
param_num_t<std::size_t> m_gs_loops;
param_double_t m_gmin;
@@ -99,16 +110,22 @@ namespace devices
class terms_for_net_t : plib::nocopyassignmove
{
public:
- terms_for_net_t();
+ terms_for_net_t(analog_net_t * net = nullptr);
void clear();
- void add(terminal_t *term, int net_other, bool sorted);
+ void add_terminal(terminal_t *term, int net_other, bool sorted);
std::size_t count() const { return m_terms.size(); }
terminal_t **terms() { return m_terms.data(); }
+ nl_double getV() const { return m_net->Q_Analog(); }
+
+ void setV(nl_double v) { m_net->set_Q_Analog(v); }
+
+ bool isNet(const analog_net_t * net) const { return net == m_net; }
+
std::size_t m_railstart;
std::vector<unsigned> m_nz; /* all non zero for multiplication */
@@ -122,6 +139,7 @@ namespace devices
std::vector<int> m_connected_net_idx;
private:
+ analog_net_t * m_net;
std::vector<terminal_t *> m_terms;
};
@@ -172,7 +190,7 @@ namespace devices
NETLIB_RESETI();
public:
- int get_net_idx(detail::net_t *net);
+ int get_net_idx(const analog_net_t *net) const;
std::pair<int, int> get_left_right_of_diag(std::size_t row, std::size_t diag);
double get_weight_around_diag(std::size_t row, std::size_t diag);
@@ -215,7 +233,7 @@ namespace devices
void set_pointers()
{
- const std::size_t iN = this->m_nets.size();
+ const std::size_t iN = this->m_terms.size();
std::size_t max_count = 0;
std::size_t max_rail = 0;
@@ -287,6 +305,60 @@ namespace devices
}
+ template <typename T, typename M>
+ void log_fill(const T &fill, M &mat)
+ {
+ const std::size_t iN = fill.size();
+
+ // FIXME: Not yet working, mat_cr.h needs some more work
+#if 0
+ auto mat_GE = dynamic_cast<plib::pGEmatrix_cr_t<typename M::base> *>(&mat);
+#else
+ plib::unused_var(mat);
+#endif
+ std::vector<unsigned> levL(iN, 0);
+ std::vector<unsigned> levU(iN, 0);
+
+ // parallel scheme for L x = y
+ for (std::size_t k = 0; k < iN; k++)
+ {
+ unsigned lm=0;
+ for (std::size_t j = 0; j<k; j++)
+ if (fill[k][j] < M::FILL_INFINITY)
+ lm = std::max(lm, levL[j]);
+ levL[k] = 1+lm;
+ }
+
+ // parallel scheme for U x = y
+ for (std::size_t k = iN; k-- > 0; )
+ {
+ unsigned lm=0;
+ for (std::size_t j = iN; --j > k; )
+ if (fill[k][j] < M::FILL_INFINITY)
+ lm = std::max(lm, levU[j]);
+ levU[k] = 1+lm;
+ }
+ for (std::size_t k = 0; k < iN; k++)
+ {
+ unsigned fm = 0;
+ pstring ml = "";
+ for (std::size_t j = 0; j < iN; j++)
+ {
+ ml += fill[k][j] == 0 ? 'X' : fill[k][j] < M::FILL_INFINITY ? '+' : '.';
+ if (fill[k][j] < M::FILL_INFINITY)
+ if (fill[k][j] > fm)
+ fm = fill[k][j];
+ }
+#if 0
+ this->log().verbose("{1:4} {2} {3:4} {4:4} {5:4} {6:4}", k, ml,
+ levL[k], levU[k], mat_GE ? mat_GE->get_parallel_level(k) : 0, fm);
+#else
+ this->log().verbose("{1:4} {2} {3:4} {4:4} {5:4} {6:4}", k, ml,
+ levL[k], levU[k], 0, fm);
+#endif
+ }
+ }
+
template <typename T>
using aligned_alloc = plib::aligned_allocator<T, PALIGN_VECTOROPT>;
@@ -296,11 +368,9 @@ namespace devices
plib::pmatrix2d<nl_double *, aligned_alloc<nl_double *>> m_mat_ptr;
plib::pmatrix2d<nl_double *, aligned_alloc<nl_double *>> m_connected_net_Vn;
- plib::pmatrix2d<nl_double> m_test;
-
std::vector<plib::unique_ptr<terms_for_net_t>> m_terms;
- std::vector<analog_net_t *> m_nets;
- std::vector<pool_owned_ptr<proxied_analog_output_t>> m_inps;
+
+ std::vector<unique_pool_ptr<proxied_analog_output_t>> m_inps;
std::vector<plib::unique_ptr<terms_for_net_t>> m_rails_temp;
@@ -340,7 +410,7 @@ namespace devices
const std::size_t iN = this->m_terms.size();
typename std::decay<decltype(V[0])>::type cerr = 0;
for (std::size_t i = 0; i < iN; i++)
- cerr = std::max(cerr, std::abs(V[i] - this->m_nets[i]->Q_Analog()));
+ cerr = std::max(cerr, std::abs(V[i] - this->m_terms[i]->getV()));
return cerr;
}
@@ -349,7 +419,7 @@ namespace devices
{
const std::size_t iN = this->m_terms.size();
for (std::size_t i = 0; i < iN; i++)
- this->m_nets[i]->set_Q_Analog(V[i]);
+ this->m_terms[i]->setV(V[i]);
}
template <typename T>
diff --git a/src/lib/netlist/solver/nld_ms_direct.h b/src/lib/netlist/solver/nld_ms_direct.h
index 521fa21fe81..16e13cbc4ab 100644
--- a/src/lib/netlist/solver/nld_ms_direct.h
+++ b/src/lib/netlist/solver/nld_ms_direct.h
@@ -10,7 +10,7 @@
#include "nld_matrix_solver.h"
#include "nld_solver.h"
-#include "plib/mat_cr.h"
+#include "plib/parray.h"
#include "plib/vector_ops.h"
#include <algorithm>
@@ -95,10 +95,10 @@ namespace devices
const auto &nzrd = m_terms[i]->m_nzrd;
const auto &nzbd = m_terms[i]->m_nzbd;
- for (std::size_t j : nzbd)
+ for (const std::size_t j : nzbd)
{
const FT f1 = -f * A(j, i);
- for (std::size_t k : nzrd)
+ for (const std::size_t k : nzrd)
A(j, k) += A(i, k) * f1;
//RHS(j) += RHS(i) * f1;
}
diff --git a/src/lib/netlist/solver/nld_ms_gcr.h b/src/lib/netlist/solver/nld_ms_gcr.h
index 0258c768e09..cda9336c1c9 100644
--- a/src/lib/netlist/solver/nld_ms_gcr.h
+++ b/src/lib/netlist/solver/nld_ms_gcr.h
@@ -30,7 +30,7 @@ namespace devices
{
public:
- using mat_type = plib::matrix_compressed_rows_t<FT, SIZE>;
+ using mat_type = plib::pGEmatrix_cr_t<plib::pmatrix_cr_t<FT, SIZE>>;
// FIXME: dirty hack to make this compile
static constexpr const std::size_t storage_N = 100;
@@ -54,11 +54,9 @@ namespace devices
private:
- using mat_index_type = typename plib::matrix_compressed_rows_t<FT, SIZE>::index_type;
+ using mat_index_type = typename plib::pmatrix_cr_t<FT, SIZE>::index_type;
- void csc_private(plib::putf8_fmt_writer &strm);
-
- using extsolver = void (*)(double * m_A, double * RHS, double * V);
+ void generate_code(plib::putf8_fmt_writer &strm);
pstring static_compile_name();
@@ -68,7 +66,6 @@ namespace devices
mat_type mat;
- //extsolver m_proc;
plib::dynproc<void, double * , double * , double * > m_proc;
};
@@ -77,16 +74,6 @@ namespace devices
// matrix_solver - GCR
// ----------------------------------------------------------------------------------------
- // FIXME: namespace or static class member
- template <typename V>
- std::size_t inline get_level(const V &v, std::size_t k)
- {
- for (std::size_t i = 0; i < v.size(); i++)
- if (plib::container::contains(v[i], k))
- return i;
- throw plib::pexception("Error in get_level");
- }
-
template <typename FT, int SIZE>
void matrix_solver_GCR_t<FT, SIZE>::vsetup(analog_net_t::list_t &nets)
{
@@ -113,48 +100,7 @@ namespace devices
auto gr = mat.gaussian_extend_fill_mat(fill);
- /* FIXME: move this to the cr matrix class and use computed
- * parallel ordering once it makes sense.
- */
-
- std::vector<unsigned> levL(iN, 0);
- std::vector<unsigned> levU(iN, 0);
-
- // parallel scheme for L x = y
- for (std::size_t k = 0; k < iN; k++)
- {
- unsigned lm=0;
- for (std::size_t j = 0; j<k; j++)
- if (fill[k][j] < decltype(mat)::FILL_INFINITY)
- lm = std::max(lm, levL[j]);
- levL[k] = 1+lm;
- }
-
- // parallel scheme for U x = y
- for (std::size_t k = iN; k-- > 0; )
- {
- unsigned lm=0;
- for (std::size_t j = iN; --j > k; )
- if (fill[k][j] < decltype(mat)::FILL_INFINITY)
- lm = std::max(lm, levU[j]);
- levU[k] = 1+lm;
- }
-
-
- for (std::size_t k = 0; k < iN; k++)
- {
- unsigned fm = 0;
- pstring ml = "";
- for (std::size_t j = 0; j < iN; j++)
- {
- ml += fill[k][j] == 0 ? 'X' : fill[k][j] < decltype(mat)::FILL_INFINITY ? '+' : '.';
- if (fill[k][j] < decltype(mat)::FILL_INFINITY)
- if (fill[k][j] > fm)
- fm = fill[k][j];
- }
- this->log().verbose("{1:4} {2} {3:4} {4:4} {5:4} {6:4}", k, ml, levL[k], levU[k], get_level(mat.m_ge_par, k), fm);
- }
-
+ log_fill(fill, mat);
mat.build_from_fill_mat(fill);
@@ -190,14 +136,18 @@ namespace devices
pstring symname = static_compile_name();
m_proc.load(this->state().lib(), symname);
if (m_proc.resolved())
+ {
this->log().info("External static solver {1} found ...", symname);
+ }
else
+ {
this->log().warning("External static solver {1} not found ...", symname);
+ }
}
}
template <typename FT, int SIZE>
- void matrix_solver_GCR_t<FT, SIZE>::csc_private(plib::putf8_fmt_writer &strm)
+ void matrix_solver_GCR_t<FT, SIZE>::generate_code(plib::putf8_fmt_writer &strm)
{
const std::size_t iN = N();
@@ -265,9 +215,8 @@ namespace devices
std::stringstream t;
t.imbue(std::locale::classic());
plib::putf8_fmt_writer w(&t);
- csc_private(w);
+ generate_code(w);
std::hash<typename std::remove_const<std::remove_reference<decltype(t.str())>::type>::type> h;
-
return plib::pfmt("nl_gcr_{1:x}_{2}")(h( t.str() ))(mat.nz_num);
}
@@ -281,14 +230,10 @@ namespace devices
strm.writeline(plib::pfmt("extern \"C\" void {1}(double * __restrict m_A, double * __restrict RHS, double * __restrict V)\n")(name));
strm.writeline("{\n");
- csc_private(strm);
+ generate_code(strm);
strm.writeline("}\n");
- // mingw 5.3 workaround
-#if !defined(_WIN32) && !defined(_WIN64)
- return std::pair<pstring, pstring>(name, t.str());
-#else
+ // some compilers (_WIN32, _WIN64, mac osx) need an explicit cast
return std::pair<pstring, pstring>(name, pstring(t.str()));
-#endif
}
template <typename FT, int SIZE>
diff --git a/src/lib/netlist/solver/nld_ms_gmres.h b/src/lib/netlist/solver/nld_ms_gmres.h
index fc750e6822d..771a704093a 100644
--- a/src/lib/netlist/solver/nld_ms_gmres.h
+++ b/src/lib/netlist/solver/nld_ms_gmres.h
@@ -48,7 +48,7 @@ namespace devices
private:
- using mattype = typename plib::matrix_compressed_rows_t<FT, SIZE>::index_type;
+ using mattype = typename plib::pmatrix_cr_t<FT, SIZE>::index_type;
//plib::mat_precondition_none<FT, SIZE> m_ops;
plib::mat_precondition_ILU<FT, SIZE> m_ops;
@@ -80,6 +80,7 @@ namespace devices
}
m_ops.build(fill);
+ this->log_fill(fill, m_ops.m_mat);
/* build pointers into the compressed row format matrix for each terminal */
@@ -115,7 +116,7 @@ namespace devices
for (std::size_t k = 0; k < iN; k++)
{
- this->m_new_V[k] = this->m_nets[k]->Q_Analog();
+ this->m_new_V[k] = this->m_terms[k]->getV();
}
const float_type accuracy = this->m_params.m_accuracy;
diff --git a/src/lib/netlist/solver/nld_ms_sor.h b/src/lib/netlist/solver/nld_ms_sor.h
index 0f10ca3d426..d886a28c0be 100644
--- a/src/lib/netlist/solver/nld_ms_sor.h
+++ b/src/lib/netlist/solver/nld_ms_sor.h
@@ -90,7 +90,7 @@ unsigned matrix_solver_SOR_t<FT, SIZE>::vsolve_non_dynamic(const bool newton_rap
const float_type * const Idr = this->m_Idrn[k];
auto other_cur_analog = this->m_connected_net_Vn[k];
- this->m_new_V[k] = this->m_nets[k]->Q_Analog();
+ this->m_new_V[k] = this->m_terms[k]->getV();
for (std::size_t i = 0; i < term_count; i++)
{
diff --git a/src/lib/netlist/solver/nld_ms_sor_mat.h b/src/lib/netlist/solver/nld_ms_sor_mat.h
index 46fce636b02..d0866a2ad08 100644
--- a/src/lib/netlist/solver/nld_ms_sor_mat.h
+++ b/src/lib/netlist/solver/nld_ms_sor_mat.h
@@ -166,7 +166,7 @@ namespace devices
#endif
for (std::size_t k = 0; k < iN; k++)
- this->m_new_V[k] = this->m_nets[k]->Q_Analog();
+ this->m_new_V[k] = this->m_terms[k]->getV();
do {
resched = false;
diff --git a/src/lib/netlist/solver/nld_solver.cpp b/src/lib/netlist/solver/nld_solver.cpp
index 42bff9e88b4..ad2432647ec 100644
--- a/src/lib/netlist/solver/nld_solver.cpp
+++ b/src/lib/netlist/solver/nld_solver.cpp
@@ -31,7 +31,6 @@
#pragma GCC optimize "ivopts"
#endif
-#include "netlist/nl_lists.h"
#include "netlist/nl_factory.h"
#include "nld_matrix_solver.h"
#include "nld_ms_direct.h"
@@ -119,50 +118,33 @@ namespace devices
template <typename FT, int SIZE>
plib::unique_ptr<matrix_solver_t> NETLIB_NAME(solver)::create_solver(std::size_t size, const pstring &solvername)
{
- if (m_params.m_method() == "SOR_MAT")
+ switch (m_params.m_method())
{
- return create_it<matrix_solver_SOR_mat_t<FT, SIZE>>(state(), solvername, m_params, size);
- //typedef matrix_solver_SOR_mat_t<m_N,storage_N> solver_sor_mat;
- //return plib::make_unique<solver_sor_mat>(state(), solvername, &m_params, size);
- }
- else if (m_params.m_method() == "MAT_CR")
- {
- if (size > 0) // GCR always outperforms MAT solver
- {
- return create_it<matrix_solver_GCR_t<FT, SIZE>>(state(), solvername, m_params, size);
- }
- else
- {
+ case matrix_type_e::MAT_CR:
+ if (size > 0) // GCR always outperforms MAT solver
+ {
+ return create_it<matrix_solver_GCR_t<FT, SIZE>>(state(), solvername, m_params, size);
+ }
+ else
+ {
+ return create_it<matrix_solver_direct_t<FT, SIZE>>(state(), solvername, m_params, size);
+ }
+ case matrix_type_e::SOR_MAT:
+ return create_it<matrix_solver_SOR_mat_t<FT, SIZE>>(state(), solvername, m_params, size);
+ case matrix_type_e::MAT:
return create_it<matrix_solver_direct_t<FT, SIZE>>(state(), solvername, m_params, size);
- }
- }
- else if (m_params.m_method() == "MAT")
- {
- return create_it<matrix_solver_direct_t<FT, SIZE>>(state(), solvername, m_params, size);
- }
- else if (m_params.m_method() == "SM")
- {
- /* Sherman-Morrison Formula */
- return create_it<matrix_solver_sm_t<FT, SIZE>>(state(), solvername, m_params, size);
- }
- else if (m_params.m_method() == "W")
- {
- /* Woodbury Formula */
- return create_it<matrix_solver_w_t<FT, SIZE>>(state(), solvername, m_params, size);
- }
- else if (m_params.m_method() == "SOR")
- {
- return create_it<matrix_solver_SOR_t<FT, SIZE>>(state(), solvername, m_params, size);
- }
- else if (m_params.m_method() == "GMRES")
- {
- return create_it<matrix_solver_GMRES_t<FT, SIZE>>(state(), solvername, m_params, size);
- }
- else
- {
- log().fatal(MF_UNKNOWN_SOLVER_TYPE(m_params.m_method()));
- return plib::unique_ptr<matrix_solver_t>();
+ case matrix_type_e::SM:
+ /* Sherman-Morrison Formula */
+ return create_it<matrix_solver_sm_t<FT, SIZE>>(state(), solvername, m_params, size);
+ case matrix_type_e::W:
+ /* Woodbury Formula */
+ return create_it<matrix_solver_w_t<FT, SIZE>>(state(), solvername, m_params, size);
+ case matrix_type_e::SOR:
+ return create_it<matrix_solver_SOR_t<FT, SIZE>>(state(), solvername, m_params, size);
+ case matrix_type_e::GMRES:
+ return create_it<matrix_solver_GMRES_t<FT, SIZE>>(state(), solvername, m_params, size);
}
+ return plib::unique_ptr<matrix_solver_t>();
}
struct net_splitter
@@ -244,13 +226,13 @@ namespace devices
switch (net_count)
{
- #if 1
case 1:
ms = plib::make_unique<matrix_solver_direct1_t<double>>(state(), sname, &m_params);
break;
case 2:
ms = plib::make_unique<matrix_solver_direct2_t<double>>(state(), sname, &m_params);
break;
+#if 1
case 3:
ms = create_solver<double, 3>(3, sname);
break;
@@ -336,8 +318,7 @@ namespace devices
}
else
{
- log().fatal(MF_NETGROUP_SIZE_EXCEEDED_1(128));
- return; /* tease compilers */
+ ms = create_solver<double, 0>(net_count, sname);
}
break;
}
diff --git a/src/lib/netlist/tools/nl_convert.cpp b/src/lib/netlist/tools/nl_convert.cpp
index 8e8143d79f5..155bcdb0be0 100644
--- a/src/lib/netlist/tools/nl_convert.cpp
+++ b/src/lib/netlist/tools/nl_convert.cpp
@@ -337,7 +337,7 @@ void nl_convert_spice_t::process_line(const pstring &line)
*/
pstring model;
pstring pins ="CBE";
- bool err;
+ bool err(false);
auto nval = plib::pstonum_ne<long, true>(tt[4], err);
plib::unused_var(nval);
diff --git a/src/mame/audio/8080bw.cpp b/src/mame/audio/8080bw.cpp
index 5c2f9e99d42..27fcb7add51 100644
--- a/src/mame/audio/8080bw.cpp
+++ b/src/mame/audio/8080bw.cpp
@@ -4,9 +4,11 @@
/* 8080bw.c *******************************************/
#include "emu.h"
+#include "includes/8080bw.h"
+
#include "sound/samples.h"
#include "sound/discrete.h"
-#include "includes/8080bw.h"
+#include "speaker.h"
/*******************************************************/
@@ -24,6 +26,67 @@ MACHINE_START_MEMBER(_8080bw_state,extra_8080bw_sh)
+/*************************************
+ *
+ * Space Invaders
+ *
+ * Author : Tormod Tjaberg
+ * Created : 1997-04-09
+ * Description : Sound routines for the 'invaders' games
+ *
+ * Note:
+ * The samples were taken from Michael Strutt's (mstrutt@pixie.co.za)
+ * excellent space invader emulator and converted to signed samples so
+ * they would work under SEAL. The port info was also gleaned from
+ * his emulator. These sounds should also work on all the invader games.
+ *
+ *************************************/
+
+static const char *const invaders_sample_names[] =
+{
+ "*invaders",
+ "1", /* shot/missle */
+ "2", /* base hit/explosion */
+ "3", /* invader hit */
+ "4", /* fleet move 1 */
+ "5", /* fleet move 2 */
+ "6", /* fleet move 3 */
+ "7", /* fleet move 4 */
+ "8", /* UFO/saucer hit */
+ "9", /* bonus base */
+ nullptr
+};
+
+
+/* left in for all games that hack into invaders samples for audio */
+void _8080bw_state::invaders_samples_audio(machine_config &config)
+{
+ SPEAKER(config, "mono").front_center();
+
+ SN76477(config, m_sn);
+ m_sn->set_noise_params(0, 0, 0);
+ m_sn->set_decay_res(0);
+ m_sn->set_attack_params(0, RES_K(100));
+ m_sn->set_amp_res(RES_K(56));
+ m_sn->set_feedback_res(RES_K(10));
+ m_sn->set_vco_params(0, CAP_U(0.1), RES_K(8.2));
+ m_sn->set_pitch_voltage(5.0);
+ m_sn->set_slf_params(CAP_U(1.0), RES_K(120));
+ m_sn->set_oneshot_params(0, 0);
+ m_sn->set_vco_mode(1);
+ m_sn->set_mixer_params(0, 0, 0);
+ m_sn->set_envelope_params(1, 0);
+ m_sn->set_enable(1);
+ m_sn->add_route(ALL_OUTPUTS, "mono", 0.5);
+
+ SAMPLES(config, m_samples);
+ m_samples->set_channels(6);
+ m_samples->set_samples_names(invaders_sample_names);
+ m_samples->add_route(ALL_OUTPUTS, "mono", 1.0);
+}
+
+
+
/*******************************************************/
/* */
/* Midway "Space Invaders Part II" */
diff --git a/src/mame/audio/flower.cpp b/src/mame/audio/flower.cpp
index 1d6edf5b2a0..081971131e1 100644
--- a/src/mame/audio/flower.cpp
+++ b/src/mame/audio/flower.cpp
@@ -23,7 +23,7 @@
// device type definition
DEFINE_DEVICE_TYPE(FLOWER_CUSTOM, flower_sound_device, "flower_sound", "Flower Custom Sound")
-// TODO: AM_SELECT unsupported by DEVICE_ADDRESS_MAP, so we need a trampoline here
+// TODO: select() unsupported by DEVICE_ADDRESS_MAP, so we need a trampoline here
void flower_sound_device::regs_map(address_map &map)
{
map(0x00, 0x03).select(0x38).w(FUNC(flower_sound_device::frequency_w));
diff --git a/src/mame/audio/leland.cpp b/src/mame/audio/leland.cpp
index f558eee078d..b5b00d4b352 100644
--- a/src/mame/audio/leland.cpp
+++ b/src/mame/audio/leland.cpp
@@ -145,33 +145,17 @@ void leland_80186_sound_device::device_add_mconfig(machine_config &config)
m_audiocpu->tmrout0_handler().set(FUNC(leland_80186_sound_device::i80186_tmr0_w));
SPEAKER(config, "speaker").front_center();
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
for (int i = 0; i < 6; i++)
{
AD7524(config, m_dac[i], 0).add_route(ALL_OUTPUTS, "speaker", 0.2); // 74hc374.u31..6 + ad7524.u46..51
DAC_8BIT_BINARY_WEIGHTED(config, m_dacvol[i], 0); // 74hc374.u17..22 + rX2-rX9 (24k,12k,6.2k,3k,1.5k,750,360,160) where X is 0..5
+ m_dacvol[i]->add_route(0, m_dac[i], 1.0, DAC_VREF_POS_INPUT);
+ m_dacvol[i]->add_route(0, m_dac[i], -1.0, DAC_VREF_NEG_INPUT);
+ vref.add_route(0, m_dacvol[i], 1.0, DAC_VREF_POS_INPUT);
}
AD7533(config, "dac9", 0).add_route(ALL_OUTPUTS, "speaker", 1.0); // ad7533.u64
- m_dacvol[0]->add_route(0, "dac1", 1.0, DAC_VREF_POS_INPUT);
- m_dacvol[0]->add_route(0, "dac1", -1.0, DAC_VREF_NEG_INPUT);
- m_dacvol[1]->add_route(0, "dac2", 1.0, DAC_VREF_POS_INPUT);
- m_dacvol[1]->add_route(0, "dac2", -1.0, DAC_VREF_NEG_INPUT);
- m_dacvol[2]->add_route(0, "dac3", 1.0, DAC_VREF_POS_INPUT);
- m_dacvol[2]->add_route(0, "dac3", -1.0, DAC_VREF_NEG_INPUT);
- m_dacvol[3]->add_route(0, "dac4", 1.0, DAC_VREF_POS_INPUT);
- m_dacvol[3]->add_route(0, "dac4", -1.0, DAC_VREF_NEG_INPUT);
- m_dacvol[4]->add_route(0, "dac5", 1.0, DAC_VREF_POS_INPUT);
- m_dacvol[4]->add_route(0, "dac5", -1.0, DAC_VREF_NEG_INPUT);
- m_dacvol[5]->add_route(0, "dac6", 1.0, DAC_VREF_POS_INPUT);
- m_dacvol[5]->add_route(0, "dac6", -1.0, DAC_VREF_NEG_INPUT);
-
- voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
- vref.add_route(0, "dac1vol", 1.0, DAC_VREF_POS_INPUT);
- vref.add_route(0, "dac2vol", 1.0, DAC_VREF_POS_INPUT);
- vref.add_route(0, "dac3vol", 1.0, DAC_VREF_POS_INPUT);
- vref.add_route(0, "dac4vol", 1.0, DAC_VREF_POS_INPUT);
- vref.add_route(0, "dac5vol", 1.0, DAC_VREF_POS_INPUT);
- vref.add_route(0, "dac6vol", 1.0, DAC_VREF_POS_INPUT);
vref.add_route(0, "dac9", 1.0, DAC_VREF_POS_INPUT);
vref.add_route(0, "dac9", -1.0, DAC_VREF_NEG_INPUT);
@@ -202,39 +186,16 @@ void redline_80186_sound_device::device_add_mconfig(machine_config &config)
m_audiocpu->chip_select_callback().set(FUNC(leland_80186_sound_device::peripheral_ctrl));
SPEAKER(config, "speaker").front_center();
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
for (int i = 0; i < 8; i++)
{
AD7524(config, m_dac[i], 0).add_route(ALL_OUTPUTS, "speaker", 0.2); // unknown DAC
DAC_8BIT_BINARY_WEIGHTED(config, m_dacvol[i], 0);
+ m_dacvol[i]->add_route(0, m_dac[i], 1.0, DAC_VREF_POS_INPUT);
+ m_dacvol[i]->add_route(0, m_dac[i], -1.0, DAC_VREF_NEG_INPUT); // unknown DAC
+ vref.add_route(0, m_dacvol[i], 1.0, DAC_VREF_POS_INPUT);
}
- m_dacvol[0]->add_route(0, "dac1", 1.0, DAC_VREF_POS_INPUT);
- m_dacvol[0]->add_route(0, "dac1", -1.0, DAC_VREF_NEG_INPUT); // unknown DAC
- m_dacvol[1]->add_route(0, "dac2", 1.0, DAC_VREF_POS_INPUT);
- m_dacvol[1]->add_route(0, "dac2", -1.0, DAC_VREF_NEG_INPUT); // unknown DAC
- m_dacvol[2]->add_route(0, "dac3", 1.0, DAC_VREF_POS_INPUT);
- m_dacvol[2]->add_route(0, "dac3", -1.0, DAC_VREF_NEG_INPUT); // unknown DAC
- m_dacvol[3]->add_route(0, "dac4", 1.0, DAC_VREF_POS_INPUT);
- m_dacvol[3]->add_route(0, "dac4", -1.0, DAC_VREF_NEG_INPUT); // unknown DAC
- m_dacvol[4]->add_route(0, "dac5", 1.0, DAC_VREF_POS_INPUT);
- m_dacvol[4]->add_route(0, "dac5", -1.0, DAC_VREF_NEG_INPUT); // unknown DAC
- m_dacvol[5]->add_route(0, "dac6", 1.0, DAC_VREF_POS_INPUT);
- m_dacvol[5]->add_route(0, "dac6", -1.0, DAC_VREF_NEG_INPUT); // unknown DAC
- m_dacvol[6]->add_route(0, "dac7", 1.0, DAC_VREF_POS_INPUT);
- m_dacvol[6]->add_route(0, "dac7", -1.0, DAC_VREF_NEG_INPUT); // unknown DAC
- m_dacvol[7]->add_route(0, "dac8", 1.0, DAC_VREF_POS_INPUT);
- m_dacvol[7]->add_route(0, "dac8", -1.0, DAC_VREF_NEG_INPUT); // unknown DAC
-
- voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
- vref.add_route(0, "dac1vol", 1.0, DAC_VREF_POS_INPUT);
- vref.add_route(0, "dac2vol", 1.0, DAC_VREF_POS_INPUT);
- vref.add_route(0, "dac3vol", 1.0, DAC_VREF_POS_INPUT);
- vref.add_route(0, "dac4vol", 1.0, DAC_VREF_POS_INPUT);
- vref.add_route(0, "dac5vol", 1.0, DAC_VREF_POS_INPUT);
- vref.add_route(0, "dac6vol", 1.0, DAC_VREF_POS_INPUT);
- vref.add_route(0, "dac7vol", 1.0, DAC_VREF_POS_INPUT);
- vref.add_route(0, "dac8vol", 1.0, DAC_VREF_POS_INPUT);
-
PIT8254(config, m_pit[0], 0);
m_pit[0]->set_clk<0>(7000000);
m_pit[0]->out_handler<0>().set(m_audiocpu, FUNC(i80186_cpu_device::drq0_w));
@@ -268,27 +229,17 @@ void ataxx_80186_sound_device::device_add_mconfig(machine_config &config)
m_audiocpu->tmrout0_handler().set(FUNC(leland_80186_sound_device::i80186_tmr0_w));
SPEAKER(config, "speaker").front_center();
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
for (int i = 0; i < 4; i++)
{
AD7524(config, m_dac[i], 0).add_route(ALL_OUTPUTS, "speaker", 0.2); // unknown DAC
DAC_8BIT_BINARY_WEIGHTED(config, m_dacvol[i], 0); // unknown DAC
+ m_dacvol[i]->add_route(0, m_dac[i], 1.0, DAC_VREF_POS_INPUT);
+ m_dacvol[i]->add_route(0, m_dac[i], -1.0, DAC_VREF_NEG_INPUT);
+ vref.add_route(0, m_dacvol[i], 1.0, DAC_VREF_POS_INPUT);
}
AD7533(config, "dac9", 0).add_route(ALL_OUTPUTS, "speaker", 1.0); // unknown DAC
- m_dacvol[0]->add_route(0, "dac1", 1.0, DAC_VREF_POS_INPUT);
- m_dacvol[0]->add_route(0, "dac1", -1.0, DAC_VREF_NEG_INPUT);
- m_dacvol[1]->add_route(0, "dac2", 1.0, DAC_VREF_POS_INPUT);
- m_dacvol[1]->add_route(0, "dac2", -1.0, DAC_VREF_NEG_INPUT);
- m_dacvol[2]->add_route(0, "dac3", 1.0, DAC_VREF_POS_INPUT);
- m_dacvol[2]->add_route(0, "dac3", -1.0, DAC_VREF_NEG_INPUT);
- m_dacvol[3]->add_route(0, "dac4", 1.0, DAC_VREF_POS_INPUT);
- m_dacvol[3]->add_route(0, "dac4", -1.0, DAC_VREF_NEG_INPUT);
-
- voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
- vref.add_route(0, "dac1vol", 1.0, DAC_VREF_POS_INPUT);
- vref.add_route(0, "dac2vol", 1.0, DAC_VREF_POS_INPUT);
- vref.add_route(0, "dac3vol", 1.0, DAC_VREF_POS_INPUT);
- vref.add_route(0, "dac4vol", 1.0, DAC_VREF_POS_INPUT);
vref.add_route(0, "dac9", 1.0, DAC_VREF_POS_INPUT);
vref.add_route(0, "dac9", -1.0, DAC_VREF_NEG_INPUT);
@@ -313,27 +264,16 @@ void wsf_80186_sound_device::device_add_mconfig(machine_config &config)
m_audiocpu->tmrout1_handler().set(FUNC(leland_80186_sound_device::i80186_tmr1_w));
SPEAKER(config, "speaker").front_center();
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
for (int i = 0; i < 4; i++)
{
AD7524(config, m_dac[i], 0).add_route(ALL_OUTPUTS, "speaker", 0.2); // unknown DAC
DAC_8BIT_BINARY_WEIGHTED(config, m_dacvol[i], 0); // unknown DAC
+ m_dacvol[i]->add_route(0, m_dac[i], 1.0, DAC_VREF_POS_INPUT);
+ m_dacvol[i]->add_route(0, m_dac[i], -1.0, DAC_VREF_NEG_INPUT); // unknown DAC
+ vref.add_route(0, m_dacvol[i], 1.0, DAC_VREF_POS_INPUT);
}
AD7533(config, "dac9", 0).add_route(ALL_OUTPUTS, "speaker", 1.0); // unknown DAC
-
- m_dacvol[0]->add_route(0, "dac1", 1.0, DAC_VREF_POS_INPUT);
- m_dacvol[0]->add_route(0, "dac1", -1.0, DAC_VREF_NEG_INPUT); // unknown DAC
- m_dacvol[1]->add_route(0, "dac2", 1.0, DAC_VREF_POS_INPUT);
- m_dacvol[1]->add_route(0, "dac2", -1.0, DAC_VREF_NEG_INPUT); // unknown DAC
- m_dacvol[2]->add_route(0, "dac3", 1.0, DAC_VREF_POS_INPUT);
- m_dacvol[2]->add_route(0, "dac3", -1.0, DAC_VREF_NEG_INPUT); // unknown DAC
- m_dacvol[3]->add_route(0, "dac4", 1.0, DAC_VREF_POS_INPUT);
- m_dacvol[3]->add_route(0, "dac4", -1.0, DAC_VREF_NEG_INPUT); // unknown DAC
-
- voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
- vref.add_route(0, "dac1vol", 1.0, DAC_VREF_POS_INPUT);
- vref.add_route(0, "dac2vol", 1.0, DAC_VREF_POS_INPUT);
- vref.add_route(0, "dac3vol", 1.0, DAC_VREF_POS_INPUT);
- vref.add_route(0, "dac4vol", 1.0, DAC_VREF_POS_INPUT);
vref.add_route(0, "dac9", 1.0, DAC_VREF_POS_INPUT);
vref.add_route(0, "dac9", -1.0, DAC_VREF_NEG_INPUT);
diff --git a/src/mame/audio/mw8080bw.cpp b/src/mame/audio/mw8080bw.cpp
index 0c54e4b70d6..95e8752b3a7 100644
--- a/src/mame/audio/mw8080bw.cpp
+++ b/src/mame/audio/mw8080bw.cpp
@@ -8,583 +8,772 @@
****************************************************************************/
#include "emu.h"
+#include "audio/mw8080bw.h"
+
#include "includes/mw8080bw.h"
#include "speaker.h"
+namespace {
+
/*************************************
*
- * Audio setup
+ * Implementation of the common
+ * noise circuits
*
*************************************/
-SOUND_START_MEMBER( mw8080bw_state, samples )
+discrete_lfsr_desc const midway_lfsr =
{
- /* setup for save states */
- save_item(NAME(m_port_1_last));
- save_item(NAME(m_port_2_last));
-}
+ DISC_CLK_IS_FREQ,
+ 17, // bit length
+ // the RC network fed into pin 4 has the effect of presetting all bits high at power up
+ 0x1ffff, // reset value
+ 4, // use bit 4 as XOR input 0
+ 16, // use bit 16 as XOR input 1
+ DISC_LFSR_XOR, // feedback stage1 is XOR
+ DISC_LFSR_OR, // feedback stage2 is just stage 1 output OR with external feed
+ DISC_LFSR_REPLACE, // feedback stage3 replaces the shifted register contents
+ 0x000001, // everything is shifted into the first bit only
+ 0, // output is not inverted
+ 12 // output bit
+};
/*************************************
*
- * Implementation of tone generator used
- * by a few of these games
+ * Shared by Space Invaders and
+ * Space Invaders II (cocktail)
*
*************************************/
-#define MIDWAY_TONE_EN NODE_100
-#define MIDWAY_TONE_DATA_L NODE_101
-#define MIDWAY_TONE_DATA_H NODE_102
-#define MIDWAY_TONE_SND NODE_103
-#define MIDWAY_TONE_TRASFORM_OUT NODE_104
-#define MIDWAY_TONE_BEFORE_AMP_SND NODE_105
-
-
-#define MIDWAY_TONE_GENERATOR(discrete_op_amp_tvca_info) \
- /* bit 0 of tone data is always 0 */ \
- /* join the L & H tone bits */ \
- DISCRETE_INPUT_LOGIC(MIDWAY_TONE_EN) \
- DISCRETE_INPUT_DATA (MIDWAY_TONE_DATA_L) \
- DISCRETE_INPUT_DATA (MIDWAY_TONE_DATA_H) \
- DISCRETE_TRANSFORM4(MIDWAY_TONE_TRASFORM_OUT, MIDWAY_TONE_DATA_H, 0x40, MIDWAY_TONE_DATA_L, 0x02, "01*23*+") \
- DISCRETE_NOTE(MIDWAY_TONE_BEFORE_AMP_SND, 1, (double)MW8080BW_MASTER_CLOCK/10/2, MIDWAY_TONE_TRASFORM_OUT, 0xfff, 1, DISC_CLK_IS_FREQ) \
- DISCRETE_OP_AMP_TRIG_VCA(MIDWAY_TONE_SND, MIDWAY_TONE_BEFORE_AMP_SND, MIDWAY_TONE_EN, 0, 12, 0, &discrete_op_amp_tvca_info)
+// sound board 1 or 2, for multi-board games
+#define INVADERS_NODE(_node, _board) (NODE(_node + ((_board - 1) * 100)))
+// nodes - inputs
+#define INVADERS_SAUCER_HIT_EN 01
+#define INVADERS_FLEET_DATA 02
+#define INVADERS_BONUS_MISSLE_BASE_EN 03
+#define INVADERS_INVADER_HIT_EN 04
+#define INVADERS_EXPLOSION_EN 05
+#define INVADERS_MISSILE_EN 06
-/* most common values based on clowns schematic */
-static const discrete_op_amp_tvca_info midway_music_tvca_info =
-{
- RES_M(3.3), /* r502 */
- RES_K(10) + RES_K(680), /* r505 + r506 */
- 0,
- RES_K(680), /* r503 */
- RES_K(10), /* r500 */
- 0,
- RES_K(680), /* r501 */
- 0,
- 0,
- 0,
- 0,
- CAP_U(.001), /* c500 */
- 0,
- 0, 0,
- 12, /* v1 */
- 0, /* v2 */
- 0, /* v3 */
- 12, /* vP */
- DISC_OP_AMP_TRIGGER_FUNCTION_TRG0,
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
- DISC_OP_AMP_TRIGGER_FUNCTION_TRG1,
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE
-};
+// nodes - sounds
+#define INVADERS_NOISE NODE_10
+#define INVADERS_SAUCER_HIT_SND 11
+#define INVADERS_FLEET_SND 12
+#define INVADERS_BONUS_MISSLE_BASE_SND 13
+#define INVADERS_INVADER_HIT_SND 14
+#define INVADERS_EXPLOSION_SND 15
+#define INVADERS_MISSILE_SND 16
-WRITE8_MEMBER(mw8080bw_state::midway_tone_generator_lo_w)
-{
- m_discrete->write(MIDWAY_TONE_EN, (data >> 0) & 0x01);
+/************************************************
+ * Noise Generator
+ ************************************************/
- m_discrete->write(MIDWAY_TONE_DATA_L, (data >> 1) & 0x1f);
+// Noise clock was breadboarded and measured at 7515
+#define INVADERS_NOISE_GENERATOR \
+ DISCRETE_LFSR_NOISE(INVADERS_NOISE, /* IC N5, pin 10 */ \
+ 1, /* ENAB */ \
+ 1, /* no RESET */ \
+ 7515, /* CLK in Hz */ \
+ 12, /* p-p AMPL */ \
+ 0, /* no FEED input */ \
+ 12.0/2, /* dc BIAS */ \
+ &midway_lfsr)
- /* D6 and D7 are not connected */
-}
+/************************************************
+ * Saucer Hit
+ ************************************************/
-WRITE8_MEMBER(mw8080bw_state::midway_tone_generator_hi_w)
+discrete_op_amp_info const invaders_saucer_hit_op_amp_B3_9 =
{
- m_discrete->write(MIDWAY_TONE_DATA_H, data & 0x3f);
-
- /* D6 and D7 are not connected */
-}
+ DISC_OP_AMP_IS_NORTON,
+ 0, // no r1
+ RES_K(100), // R72
+ RES_M(1), // R71
+ 0, // no r4
+ CAP_U(1), // C23
+ 0, // vN
+ 12 // vP
+};
+discrete_op_amp_osc_info const invaders_saucer_hit_osc =
+{
+ DISC_OP_AMP_OSCILLATOR_1 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_CAP,
+ RES_M(1), // R70
+ RES_K(470), // R64
+ RES_K(100), // R61
+ RES_K(120), // R63
+ RES_M(1), // R62
+ 0, // no r6
+ 0, // no r7
+ 0, // no r8
+ CAP_U(0.1), // C21
+ 12, // vP
+};
-/*************************************
- *
- * Implementation of the common
- * noise circuits
- *
- *************************************/
+discrete_op_amp_osc_info const invaders_saucer_hit_vco =
+{
+ DISC_OP_AMP_OSCILLATOR_VCO_1 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_SQW,
+ RES_M(1), // R65
+ RES_K(470), // R66
+ RES_K(680), // R67
+ RES_M(1), // R69
+ RES_M(1), // R68
+ 0, // no r6
+ 0, // no r7
+ 0, // no r8
+ CAP_P(470), // C22
+ 12, // vP
+};
-static const discrete_lfsr_desc midway_lfsr =
+discrete_op_amp_info const invaders_saucer_hit_op_amp_B3_10 =
{
- DISC_CLK_IS_FREQ,
- 17, /* bit length */
- /* the RC network fed into pin 4, has the effect
- of presetting all bits high at power up */
- 0x1ffff, /* reset value */
- 4, /* use bit 4 as XOR input 0 */
- 16, /* use bit 16 as XOR input 1 */
- DISC_LFSR_XOR, /* feedback stage1 is XOR */
- DISC_LFSR_OR, /* feedback stage2 is just stage 1 output OR with external feed */
- DISC_LFSR_REPLACE, /* feedback stage3 replaces the shifted register contents */
- 0x000001, /* everything is shifted into the first bit only */
- 0, /* output is not inverted */
- 12 /* output bit */
+ DISC_OP_AMP_IS_NORTON,
+ RES_K(680), // R73
+ RES_K(680), // R77
+ RES_M(2.7), // R74
+ RES_K(680), // R75
+ 0, // no c
+ 0, // vN
+ 12 // vP
};
+#define INVADERS_SAUCER_HIT(_board) \
+ DISCRETE_INPUTX_LOGIC(INVADERS_NODE(INVADERS_SAUCER_HIT_EN, _board), 12, 0, 0) \
+ DISCRETE_OP_AMP(INVADERS_NODE(20, _board), /* IC B3, pin 9 */ \
+ 1, /* ENAB */ \
+ 0, /* no IN0 */ \
+ INVADERS_NODE(INVADERS_SAUCER_HIT_EN, _board), /* IN1 */ \
+ &invaders_saucer_hit_op_amp_B3_9) \
+ DISCRETE_OP_AMP_OSCILLATOR(INVADERS_NODE(21, _board), /* IC A4, pin 5 */ \
+ 1, /* ENAB */ \
+ &invaders_saucer_hit_osc) \
+ DISCRETE_OP_AMP_VCO1(INVADERS_NODE(22, _board), /* IC A4, pin 9 */ \
+ 1, /* ENAB */ \
+ INVADERS_NODE(21, _board), /* VMOD1 */ \
+ &invaders_saucer_hit_vco) \
+ DISCRETE_OP_AMP(INVADERS_NODE(INVADERS_SAUCER_HIT_SND, _board), /* IC B3, pin 10 */ \
+ 1, /* ENAB */ \
+ INVADERS_NODE(22, _board), /* IN0 */ \
+ INVADERS_NODE(20, _board), /* IN1 */ \
+ &invaders_saucer_hit_op_amp_B3_10)
-/*************************************
- *
- * Sea Wolf
- *
- *************************************/
+/************************************************
+ * Fleet movement
+ ************************************************/
-static const char *const seawolf_sample_names[] =
+discrete_comp_adder_table const invaders_thump_resistors =
{
- "*seawolf",
- "shiphit",
- "torpedo",
- "dive",
- "sonar",
- "minehit",
- nullptr
+ DISC_COMP_P_RESISTOR,
+ 0, // no cDefault
+ 4, // length
+ { RES_K(20) + RES_K(20), // R126 + R127
+ RES_K(68), // R128
+ RES_K(82), // R129
+ RES_K(100) } // R130
};
-void mw8080bw_state::seawolf_audio(machine_config &config)
+discrete_555_desc const invaders_thump_555 =
{
- MCFG_SOUND_START_OVERRIDE(mw8080bw_state, samples)
+ DISC_555_OUT_ENERGY | DISC_555_OUT_DC,
+ 5,
+ 5.0 - 0.6, // 5V - diode drop
+ DEFAULT_TTL_V_LOGIC_1 // Output of F3 7411 buffer
+};
- SPEAKER(config, "mono").front_center();
- SAMPLES(config, m_samples);
- m_samples->set_channels(5);
- m_samples->set_samples_names(seawolf_sample_names);
- m_samples->add_route(ALL_OUTPUTS, "mono", 0.6);
-}
+#define INVADERS_FLEET(_board) \
+ DISCRETE_INPUT_DATA (INVADERS_NODE(INVADERS_FLEET_DATA, _board)) \
+ DISCRETE_COMP_ADDER(INVADERS_NODE(30, _board), \
+ INVADERS_NODE(INVADERS_FLEET_DATA, _board), /* DATA */ \
+ &invaders_thump_resistors) \
+ DISCRETE_555_ASTABLE(INVADERS_NODE(31, _board), /* IC F3, pin 6 */ \
+ 1, /* RESET */ \
+ INVADERS_NODE(30, _board), /* R1 */ \
+ RES_K(75), /* R131 */ \
+ CAP_U(0.1), /* C29 */ \
+ &invaders_thump_555) \
+ DISCRETE_RCFILTER(INVADERS_NODE(32, _board), \
+ INVADERS_NODE(31, _board), /* IN0 */ \
+ 100, /* R132 */ \
+ CAP_U(4.7) ) /* C31 */ \
+ DISCRETE_RCFILTER(INVADERS_NODE(INVADERS_FLEET_SND, _board), \
+ INVADERS_NODE(32, _board), /* IN0 */ \
+ 100 + 100, /* R132 + R133 */ \
+ CAP_U(10) ) /* C32 */
-WRITE8_MEMBER(mw8080bw_state::seawolf_audio_w)
-{
- uint8_t rising_bits = data & ~m_port_1_last;
+/************************************************
+ * Bonus Missle Base
+ ************************************************/
- /* if (data & 0x01) enable SHIP HIT sound */
- if (rising_bits & 0x01) m_samples->start(0, 0);
+discrete_555_desc const invaders_bonus_555 =
+{
+ DISC_555_OUT_SQW | DISC_555_OUT_DC,
+ 5.0, // 5V
+ DEFAULT_555_VALUES
+};
- /* if (data & 0x02) enable TORPEDO sound */
- if (rising_bits & 0x02) m_samples->start(1, 1);
+#define INVADERS_BONUS_MISSLE_BASE(_board) \
+ DISCRETE_INPUT_LOGIC (INVADERS_NODE(INVADERS_BONUS_MISSLE_BASE_EN, _board)) \
+ DISCRETE_555_ASTABLE(INVADERS_NODE(40, _board), /* IC F4, pin 9 */ \
+ INVADERS_NODE(INVADERS_BONUS_MISSLE_BASE_EN, _board), /* RESET */ \
+ RES_K(100), /* R94 */ \
+ RES_K(47), /* R95 */ \
+ CAP_U(1), /* C34 */ \
+ &invaders_bonus_555) \
+ DISCRETE_SQUAREWFIX(INVADERS_NODE(41, _board), \
+ 1, /* ENAB */ \
+ 480, /* FREQ */ \
+ 1, /* AMP */ \
+ 50, /* DUTY */ \
+ 1.0/2, /* BIAS */ \
+ 0) /* PHASE */ \
+ DISCRETE_LOGIC_AND3(INVADERS_NODE(42, _board), /* IC F3, pin 12 */ \
+ INVADERS_NODE(INVADERS_BONUS_MISSLE_BASE_EN, _board), /* INP0 */ \
+ INVADERS_NODE(41, _board), /* INP1 */ \
+ INVADERS_NODE(40, _board) ) /* INP2 */ \
+ DISCRETE_GAIN(INVADERS_NODE(INVADERS_BONUS_MISSLE_BASE_SND, _board),/* adjust from logic to TTL voltage level */\
+ INVADERS_NODE(42, _board), /* IN0 */ \
+ DEFAULT_TTL_V_LOGIC_1) /* GAIN */
- /* if (data & 0x04) enable DIVE sound */
- if (rising_bits & 0x04) m_samples->start(2, 2);
- /* if (data & 0x08) enable SONAR sound */
- if (rising_bits & 0x08) m_samples->start(3, 3);
+/************************************************
+ * Invader Hit
+ ************************************************/
- /* if (data & 0x10) enable MINE HIT sound */
- if (rising_bits & 0x10) m_samples->start(4, 4);
+discrete_op_amp_info const invaders_invader_hit_op_amp_D3_10 =
+{
+ DISC_OP_AMP_IS_NORTON,
+ 0, // no r1
+ RES_K(10), // R53
+ RES_M(1), // R137
+ 0, // no r4
+ CAP_U(0.47), // C19
+ 0, // vN
+ 12 // vP
+};
- machine().bookkeeping().coin_counter_w(0, (data >> 5) & 0x01);
+discrete_op_amp_osc_info const invaders_invader_hit_vco =
+{
+ DISC_OP_AMP_OSCILLATOR_VCO_1 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_CAP,
+ RES_M(1), // R42
+ RES_K(470), // R43
+ RES_K(680), // R44
+ RES_M(1), // R46
+ RES_M(1), // R45
+ 0, // no r6
+ 0, // no r7
+ 0, // no r8
+ CAP_P(330), // C16
+ 12, // vP
+};
- /* D6 and D7 are not connected */
+discrete_op_amp_info const invaders_invader_hit_op_amp_D3_4 =
+{
+ DISC_OP_AMP_IS_NORTON,
+ RES_K(470), // R55
+ RES_K(680), // R54
+ RES_M(2.7), // R56
+ RES_K(680), // R57
+ 0, // no c
+ 0, // vN
+ 12 // vP
+};
- m_port_1_last = data;
-}
+#define INVADERS_INVADER_HIT(_board, _type) \
+ DISCRETE_INPUTX_LOGIC(INVADERS_NODE(INVADERS_INVADER_HIT_EN, _board), 5, 0, 0) \
+ DISCRETE_OP_AMP_ONESHOT(INVADERS_NODE(50, _board), /* IC D3, pin 9 */ \
+ INVADERS_NODE(INVADERS_INVADER_HIT_EN, _board), /* TRIG */ \
+ &_type##_invader_hit_1sht) \
+ DISCRETE_OP_AMP(INVADERS_NODE(51, _board), /* IC D3, pin 10 */ \
+ 1, /* ENAB */ \
+ 0, /* no IN0 */ \
+ INVADERS_NODE(50, _board), /* IN1 */ \
+ &invaders_invader_hit_op_amp_D3_10) \
+ DISCRETE_OP_AMP_OSCILLATOR(INVADERS_NODE(52, _board), /* IC B4, pin 5 */ \
+ 1, /* ENAB */ \
+ &_type##_invader_hit_osc) \
+ DISCRETE_OP_AMP_VCO1(INVADERS_NODE(53, _board), /* IC B4, pin 4 */ \
+ 1, /* ENAB */ \
+ INVADERS_NODE(52, _board), /* VMOD1 */ \
+ &invaders_invader_hit_vco) \
+ DISCRETE_OP_AMP(INVADERS_NODE(INVADERS_INVADER_HIT_SND, _board),/* IC D3, pin 4 */ \
+ 1, /* ENAB */ \
+ INVADERS_NODE(53, _board), /* IN0 */ \
+ INVADERS_NODE(51, _board), /* IN1 */ \
+ &invaders_invader_hit_op_amp_D3_4)
+/************************************************
+ * Missle Sound
+ ************************************************/
-/*************************************
- *
- * Gun Fight
- *
- *************************************/
+discrete_op_amp_1sht_info const invaders_missle_1sht =
+{
+ DISC_OP_AMP_1SHT_1 | DISC_OP_AMP_IS_NORTON,
+ RES_M(4.7), // R32
+ RES_K(100), // R30
+ RES_M(1), // R31
+ RES_M(1), // R33
+ RES_M(2.2), // R34
+ CAP_U(1), // C12
+ CAP_P(470), // C15
+ 0, // vN
+ 12 // vP
+};
-static const char *const gunfight_sample_names[] =
+discrete_op_amp_info const invaders_missle_op_amp_B3 =
{
- "*gunfight",
- "gunshot",
- "killed",
- nullptr
+ DISC_OP_AMP_IS_NORTON,
+ 0, // no r1
+ RES_K(10), // R35
+ RES_M(1.5), // R36
+ 0, // no r4
+ CAP_U(0.22), // C13
+ 0, // vN
+ 12 // vP
};
+discrete_op_amp_osc_info const invaders_missle_op_amp_osc =
+{
+ DISC_OP_AMP_OSCILLATOR_VCO_3 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_SQW,
+ 1.0 / (1.0 / RES_M(1) + 1.0 / RES_K(330)) + RES_M(1.5), // R29||R11 + R12
+ RES_M(1), // R16
+ RES_K(560), // R17
+ RES_M(2.2), // R19
+ RES_M(1), // R16
+ RES_M(4.7), // R14
+ RES_M(3.3), // R13
+ 0, // no r8
+ CAP_P(330), // C58
+ 12, // vP
+};
-void mw8080bw_state::gunfight_audio(machine_config &config)
+discrete_op_amp_info const invaders_missle_op_amp_A3 =
{
- MCFG_SOUND_START_OVERRIDE(mw8080bw_state, samples)
+ DISC_OP_AMP_IS_NORTON,
+ RES_K(560), // R22
+ RES_K(470), // R15
+ RES_M(2.7), // R20
+ RES_K(560), // R21
+ 0, // no c
+ 0, // vN
+ 12 // vP
+};
- SPEAKER(config, "lspeaker").front_left();
- SPEAKER(config, "rspeaker").front_right();
+discrete_op_amp_tvca_info const invaders_missle_tvca =
+{
+ RES_M(2.7), // R25
+ RES_K(560), // R23
+ 0, // no r3
+ RES_K(560), // R26
+ RES_K(1), //
+ 0, // no r6
+ RES_K(560), // R60
+ 0, // no r8
+ 0, // no r9
+ 0, // no r10
+ 0, // no r11
+ CAP_U(0.1), // C14
+ 0, // no c2
+ 0, 0, // no c3, c4
+ 5, // v1
+ 0, // no v2
+ 0, // no v3
+ 12, // vP
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, // no f0
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, // no f1
+ DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, // f2
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, // no f3
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, // no f4
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE // no f5
+};
- SAMPLES(config, m_samples1);
- m_samples1->set_channels(1);
- m_samples1->set_samples_names(gunfight_sample_names);
- m_samples1->add_route(ALL_OUTPUTS, "lspeaker", 0.50);
+#define INVADERS_MISSILE(_board, _type) \
+ DISCRETE_INPUTX_LOGIC(INVADERS_NODE(INVADERS_MISSILE_EN, _board), 5, 0, 0) \
+ DISCRETE_OP_AMP_ONESHOT(INVADERS_NODE(70, _board), /* IC B3, pin 4 */ \
+ INVADERS_NODE(INVADERS_MISSILE_EN, _board), /* TRIG */ \
+ &_type##_missle_1sht) \
+ DISCRETE_OP_AMP(INVADERS_NODE(71, _board), /* IC B3, pin 5 */ \
+ 1, /* ENAB */ \
+ 0, /* no IN0 */ \
+ INVADERS_NODE(70, _board), /* IN1 */ \
+ &invaders_missle_op_amp_B3) \
+ /* next 2 modules simulate the D1 voltage drop */ \
+ DISCRETE_ADDER2(INVADERS_NODE(72, _board), \
+ 1, /* ENAB */ \
+ INVADERS_NODE(71, _board), /* IN0 */ \
+ -0.5) /* IN1 */ \
+ DISCRETE_CLAMP(INVADERS_NODE(73, _board), \
+ INVADERS_NODE(72, _board), /* IN0 */ \
+ 0, /* MIN */ \
+ 12) /* MAX */ \
+ DISCRETE_CRFILTER(INVADERS_NODE(74, _board), \
+ INVADERS_NOISE, /* IN0 */ \
+ RES_M(1) + RES_K(330), /* R29, R11 */ \
+ CAP_U(0.1) ) /* C57 */ \
+ DISCRETE_GAIN(INVADERS_NODE(75, _board), \
+ INVADERS_NODE(74, _board), /* IN0 */ \
+ RES_K(330)/(RES_M(1) + RES_K(330))) /* GAIN - R29 : R11 */ \
+ DISCRETE_OP_AMP_VCO2(INVADERS_NODE(76, _board), /* IC C1, pin 4 */ \
+ 1, /* ENAB */ \
+ INVADERS_NODE(75, _board), /* VMOD1 */ \
+ INVADERS_NODE(73, _board), /* VMOD2 */ \
+ &invaders_missle_op_amp_osc) \
+ DISCRETE_OP_AMP(INVADERS_NODE(77, _board), /* IC A3, pin 9 */ \
+ 1, /* ENAB */ \
+ INVADERS_NODE(76, _board), /* IN0 */ \
+ INVADERS_NODE(73, _board), /* IN1 */ \
+ &invaders_missle_op_amp_A3) \
+ DISCRETE_OP_AMP_TRIG_VCA(INVADERS_NODE(INVADERS_MISSILE_SND, _board), /* IC A3, pin 10 */ \
+ INVADERS_NODE(INVADERS_MISSILE_EN, _board), /* TRG0 */ \
+ 0, /* no TRG1 */ \
+ 0, /* no TRG2 */ \
+ INVADERS_NODE(77, _board), /* IN0 */ \
+ 0, /* no IN1 */ \
+ &invaders_missle_tvca)
- SAMPLES(config, m_samples2);
- m_samples2->set_channels(1);
- m_samples2->set_samples_names(gunfight_sample_names);
- m_samples2->add_route(ALL_OUTPUTS, "rspeaker", 0.50);
-}
+/************************************************
+ * Explosion
+ ************************************************/
-WRITE8_MEMBER(mw8080bw_state::gunfight_audio_w)
+discrete_op_amp_1sht_info const invaders_explosion_1sht =
{
- /* D0 and D1 are just tied to 1k resistors */
-
- machine().bookkeeping().coin_counter_w(0, (data >> 2) & 0x01);
+ DISC_OP_AMP_1SHT_1 | DISC_OP_AMP_IS_NORTON,
+ RES_M(4.7), // R90
+ RES_K(100), // R88
+ RES_M(1), // R91
+ RES_M(1), // R89
+ RES_M(2.2), // R92
+ CAP_U(2.2), // C24
+ CAP_P(470), // C25
+ 0, // vN
+ 12 // vP
+};
- /* the 74175 latches and inverts the top 4 bits */
- switch ((~data >> 4) & 0x0f)
- {
- case 0x00:
- break;
+discrete_op_amp_tvca_info const invaders_explosion_tvca =
+{
+ RES_M(2.7), // R80
+ RES_K(680), // R79
+ 0, // no r3
+ RES_K(680), // R82
+ RES_K(10), // R93
+ 0, // no r6
+ RES_K(680), // R83
+ 0, // no r8
+ 0, // no r9
+ 0, // no r10
+ 0, // no r11
+ CAP_U(1), // C26
+ 0, // no c2
+ 0, 0, // no c3, c4
+ 12.0 - OP_AMP_NORTON_VBE, // v1
+ 0, // no v2
+ 0, // no v3
+ 12, // vP
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, // no f0
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, // no f1
+ DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, // f2
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, // no f3
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, // no f4
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE // no f5
+};
- case 0x01:
- /* enable LEFT SHOOT sound (left speaker) */
- m_samples1->start(0, 0);
- break;
+#define INVADERS_EXPLOSION(_board) \
+ DISCRETE_INPUTX_LOGIC(INVADERS_NODE(INVADERS_EXPLOSION_EN, _board), 5, 0, 0) \
+ DISCRETE_OP_AMP_ONESHOT(INVADERS_NODE(60, _board), /* IC D2, pin 10 */ \
+ INVADERS_NODE(INVADERS_EXPLOSION_EN, _board), /* TRIG */ \
+ &invaders_explosion_1sht) \
+ DISCRETE_OP_AMP_TRIG_VCA(INVADERS_NODE(61, _board), /* IC D2, pin 4 */ \
+ INVADERS_NODE(60, _board), /* TRG0 */ \
+ 0, /* no TRG1 */ \
+ 0, /* no TRG2 */ \
+ INVADERS_NOISE, /* IN0 */ \
+ 0, /* no IN1 */ \
+ &invaders_explosion_tvca) \
+ DISCRETE_RCFILTER(INVADERS_NODE(62, _board), \
+ INVADERS_NODE(61, _board), /* IN0 */ \
+ RES_K(5.6), /* R84 */ \
+ CAP_U(0.1) ) /* C27 */ \
+ DISCRETE_RCFILTER(INVADERS_NODE(INVADERS_EXPLOSION_SND, _board), \
+ INVADERS_NODE(62, _board), /* IN0 */ \
+ RES_K(5.6) + RES_K(6.8), /* R84 + R85 */ \
+ CAP_U(0.1) ) /* C28 */
- case 0x02:
- /* enable RIGHT SHOOT sound (right speaker) */
- m_samples2->start(0, 0);
- break;
- case 0x03:
- /* enable LEFT HIT sound (left speaker) */
- m_samples1->start(0, 1);
- break;
+/************************************************
+ * Final mix
+ ************************************************/
- case 0x04:
- /* enable RIGHT HIT sound (right speaker) */
- m_samples2->start(0, 1);
- break;
+discrete_mixer_desc const invaders_mixer =
+{
+ DISC_MIXER_IS_OP_AMP, // type
+ { RES_K(200), // R78
+ RES_K(10) + 100 + 100, // R134 + R133 + R132
+ RES_K(150), // R136
+ RES_K(200), // R59
+ RES_K(2) + RES_K(6.8) + RES_K(5.6), // R86 + R85 + R84
+ RES_K(150) }, // R28
+ {0}, // no rNode{}
+ { 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ CAP_U(0.001) }, // C11
+ 0, // no rI
+ RES_K(100), // R105
+ 0, // no cF
+ CAP_U(0.1), // C45
+ 0, // vRef = ground
+ 1 // gain
+};
- default:
- logerror("%04x: Unknown sh port write %02x\n", m_maincpu->pc(), data);
- break;
- }
-}
+#define INVADERS_MIXER(_board, _type) \
+ DISCRETE_MIXER6(INVADERS_NODE(90, _board), \
+ 1, /* ENAB */ \
+ INVADERS_NODE(INVADERS_SAUCER_HIT_SND, _board), /* IN0 */ \
+ INVADERS_NODE(INVADERS_FLEET_SND, _board), /* IN1 */ \
+ INVADERS_NODE(INVADERS_BONUS_MISSLE_BASE_SND, _board), /* IN2 */ \
+ INVADERS_NODE(INVADERS_INVADER_HIT_SND, _board), /* IN3 */ \
+ INVADERS_NODE(INVADERS_EXPLOSION_SND, _board), /* IN4 */ \
+ INVADERS_NODE(INVADERS_MISSILE_SND, _board), /* IN5 */ \
+ &_type##_mixer) \
+ DISCRETE_OUTPUT(INVADERS_NODE(90, _board), 2500)
+} // anonymous namespace
/*************************************
*
- * Tornado Baseball
+ * Device type globals
*
*************************************/
-#define TORNBASE_SQUAREW_240 NODE_01
-#define TORNBASE_SQUAREW_960 NODE_02
-#define TORNBASE_SQUAREW_120 NODE_03
-
-#define TORNBASE_TONE_240_EN NODE_04
-#define TORNBASE_TONE_960_EN NODE_05
-#define TORNBASE_TONE_120_EN NODE_06
-
-#define TORNBASE_TONE_240_SND NODE_07
-#define TORNBASE_TONE_960_SND NODE_08
-#define TORNBASE_TONE_120_SND NODE_09
-#define TORNBASE_TONE_SND NODE_10
-#define TORNBASE_TONE_SND_FILT NODE_11
-
+DEFINE_DEVICE_TYPE(SEAWOLF_AUDIO, seawolf_audio_device, "seawolf_audio", "Midway Sea Wolf Audio")
+DEFINE_DEVICE_TYPE(GUNFIGHT_AUDIO, gunfight_audio_device, "gunfight_audio", "Midway Gun Fight Audio")
+DEFINE_DEVICE_TYPE(BOOTHILL_AUDIO, boothill_audio_device, "boothill_audio", "Midway Boot Hill Audio")
+DEFINE_DEVICE_TYPE(DESERTGU_AUDIO, desertgu_audio_device, "desertgu_audio", "Midway Desert Gun Audio")
+DEFINE_DEVICE_TYPE(DPLAY_AUDIO, dplay_audio_device, "dplay_audio", "Midway Double Play Audio")
+DEFINE_DEVICE_TYPE(GMISSILE_AUDIO, gmissile_audio_device, "gmissile_audio", "Midway Guided Missile Audio")
+DEFINE_DEVICE_TYPE(M4_AUDIO, m4_audio_device, "m4_audio", "Midway M-4 Audio")
+DEFINE_DEVICE_TYPE(CLOWNS_AUDIO, clowns_audio_device, "clowns_audio", "Midway Clowns Audio")
+DEFINE_DEVICE_TYPE(SPACWALK_AUDIO, spacwalk_audio_device, "spacwalk_audio", "Midway Space Walk Audio")
+DEFINE_DEVICE_TYPE(DOGPATCH_AUDIO, dogpatch_audio_device, "dogpatch_audio", "Midway Dog Patch Audio")
+DEFINE_DEVICE_TYPE(SPCENCTR_AUDIO, spcenctr_audio_device, "spcenctr_audio", "Midway Space Encounters Audio")
+DEFINE_DEVICE_TYPE(PHANTOM2_AUDIO, phantom2_audio_device, "phantom2_audio", "Midway Phantom 2 Audio")
+DEFINE_DEVICE_TYPE(INVADERS_AUDIO, invaders_audio_device, "invaders_audio", "Taito Space Invaders Audio")
+DEFINE_DEVICE_TYPE(INVAD2CT_AUDIO, invad2ct_audio_device, "invad2ct_audio", "Midway Space Invaders II Audio")
-static DISCRETE_SOUND_START(tornbase_discrete)
-
- /* the 3 enable lines coming out of the 74175 flip-flop at G5 */
- DISCRETE_INPUT_LOGIC(TORNBASE_TONE_240_EN) /* pin 2 */
- DISCRETE_INPUT_LOGIC(TORNBASE_TONE_960_EN) /* pin 7 */
- DISCRETE_INPUT_LOGIC(TORNBASE_TONE_120_EN) /* pin 5 */
- /* 3 different freq square waves (240, 960 and 120Hz).
- Originates from the CPU board via an edge connector.
- The wave is in the 0/+1 range */
- DISCRETE_SQUAREWFIX(TORNBASE_SQUAREW_240, 1, 240, 1.0, 50.0, 1.0/2, 0) /* pin X */
- DISCRETE_SQUAREWFIX(TORNBASE_SQUAREW_960, 1, 960, 1.0, 50.0, 1.0/2, 0) /* pin Y */
- DISCRETE_SQUAREWFIX(TORNBASE_SQUAREW_120, 1, 120, 1.0, 50.0, 1.0/2, 0) /* pin V */
-
- /* 7403 O/C NAND gate at G6. 3 of the 4 gates used with their outputs tied together */
- DISCRETE_LOGIC_NAND(TORNBASE_TONE_240_SND, TORNBASE_SQUAREW_240, TORNBASE_TONE_240_EN) /* pins 4,5,6 */
- DISCRETE_LOGIC_NAND(TORNBASE_TONE_960_SND, TORNBASE_SQUAREW_960, TORNBASE_TONE_960_EN) /* pins 2,1,3 */
- DISCRETE_LOGIC_NAND(TORNBASE_TONE_120_SND, TORNBASE_SQUAREW_120, TORNBASE_TONE_120_EN) /* pins 13,12,11 */
- DISCRETE_LOGIC_AND3(TORNBASE_TONE_SND, TORNBASE_TONE_240_SND, TORNBASE_TONE_960_SND, TORNBASE_TONE_120_SND)
-
- /* 47K resistor (R601) and 0.047uF capacitor (C601)
- There is also a 50K pot acting as a volume control, but we output at
- the maximum volume as MAME has its own volume adjustment */
- DISCRETE_CRFILTER(TORNBASE_TONE_SND_FILT, TORNBASE_TONE_SND, RES_K(47), CAP_U(0.047))
+/*************************************
+ *
+ * Implementation of tone generator used
+ * by a few of these games
+ *
+ *************************************/
- /* amplify for output */
- DISCRETE_OUTPUT(TORNBASE_TONE_SND_FILT, 32767)
+#define MIDWAY_TONE_EN NODE_100
+#define MIDWAY_TONE_DATA_L NODE_101
+#define MIDWAY_TONE_DATA_H NODE_102
+#define MIDWAY_TONE_SND NODE_103
+#define MIDWAY_TONE_TRASFORM_OUT NODE_104
+#define MIDWAY_TONE_BEFORE_AMP_SND NODE_105
-DISCRETE_SOUND_END
+#define MIDWAY_TONE_GENERATOR(discrete_op_amp_tvca_info) \
+ /* bit 0 of tone data is always 0 */ \
+ /* join the L & H tone bits */ \
+ DISCRETE_INPUT_LOGIC(MIDWAY_TONE_EN) \
+ DISCRETE_INPUT_DATA (MIDWAY_TONE_DATA_L) \
+ DISCRETE_INPUT_DATA (MIDWAY_TONE_DATA_H) \
+ DISCRETE_TRANSFORM4(MIDWAY_TONE_TRASFORM_OUT, MIDWAY_TONE_DATA_H, 0x40, MIDWAY_TONE_DATA_L, 0x02, "01*23*+") \
+ DISCRETE_NOTE(MIDWAY_TONE_BEFORE_AMP_SND, 1, (double)MW8080BW_MASTER_CLOCK/10/2, MIDWAY_TONE_TRASFORM_OUT, 0xfff, 1, DISC_CLK_IS_FREQ) \
+ DISCRETE_OP_AMP_TRIG_VCA(MIDWAY_TONE_SND, MIDWAY_TONE_BEFORE_AMP_SND, MIDWAY_TONE_EN, 0, 12, 0, &discrete_op_amp_tvca_info)
+// most common values based on clowns schematic
+static discrete_op_amp_tvca_info const midway_music_tvca_info =
+{
+ RES_M(3.3), // r502
+ RES_K(10) + RES_K(680), // r505 + r506
+ 0,
+ RES_K(680), // r503
+ RES_K(10), // r500
+ 0,
+ RES_K(680), // r501
+ 0,
+ 0,
+ 0,
+ 0,
+ CAP_U(.001), // c500
+ 0,
+ 0, 0,
+ 12, // v1
+ 0, // v2
+ 0, // v3
+ 12, // vP
+ DISC_OP_AMP_TRIGGER_FUNCTION_TRG0,
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
+ DISC_OP_AMP_TRIGGER_FUNCTION_TRG1,
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE
+};
-void mw8080bw_state::tornbase_audio(machine_config &config)
+midway_tone_generator_device_base::midway_tone_generator_device_base(machine_config const &mconfig, device_type type, char const *tag, device_t *owner, u32 clock) :
+ device_t(mconfig, type, tag, owner, clock),
+ m_discrete(*this, "discrete")
{
- SPEAKER(config, "mono").front_center();
- DISCRETE(config, m_discrete, tornbase_discrete);
- m_discrete->add_route(ALL_OUTPUTS, "mono", 1);
}
-
-WRITE8_MEMBER(mw8080bw_state::tornbase_audio_w)
+void midway_tone_generator_device_base::tone_generator_lo_w(u8 data)
{
- m_discrete->write(TORNBASE_TONE_240_EN, (data >> 0) & 0x01);
-
- m_discrete->write(TORNBASE_TONE_960_EN, (data >> 1) & 0x01);
-
- m_discrete->write(TORNBASE_TONE_120_EN, (data >> 2) & 0x01);
-
- /* if (data & 0x08) enable SIREN sound */
+ m_discrete->write(MIDWAY_TONE_EN, (data >> 0) & 0x01);
- /* if (data & 0x10) enable CHEER sound */
+ m_discrete->write(MIDWAY_TONE_DATA_L, (data >> 1) & 0x1f);
- if (tornbase_get_cabinet_type() == TORNBASE_CAB_TYPE_UPRIGHT_OLD)
- {
- /* if (data & 0x20) enable WHISTLE sound */
+ // D6 and D7 are not connected
+}
- /* D6 is not connected on this cabinet type */
- }
- else
- {
- /* D5 is not connected on this cabinet type */
- /* if (data & 0x40) enable WHISTLE sound */
- }
+void midway_tone_generator_device_base::tone_generator_hi_w(u8 data)
+{
+ m_discrete->write(MIDWAY_TONE_DATA_H, data & 0x3f);
- machine().bookkeeping().coin_counter_w(0, (data >> 7) & 0x01);
+ // D6 and D7 are not connected
}
-
/*************************************
*
- * 280 ZZZAP / Laguna Racer
+ * Sea Wolf
*
*************************************/
-void mw8080bw_state::zzzap_audio(machine_config &config)
+seawolf_audio_device::seawolf_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) :
+ device_t(mconfig, SEAWOLF_AUDIO, tag, owner, clock),
+ m_samples(*this, "samples"),
+ m_prev(0U)
{
- SPEAKER(config, "mono").front_center();
}
-
-WRITE8_MEMBER(mw8080bw_state::zzzap_audio_1_w)
+void seawolf_audio_device::write(u8 data)
{
- /* set ENGINE SOUND FREQ(data & 0x0f) the value written is
- the gas pedal position */
+ u8 const rising(data & ~m_prev);
+ m_prev = data;
- /* if (data & 0x10) enable HI SHIFT engine sound modifier */
+ if (BIT(rising, 0)) m_samples->start(0, 0); // SHIP HIT sound
+ if (BIT(rising, 1)) m_samples->start(1, 1); // TORPEDO sound
+ if (BIT(rising, 2)) m_samples->start(2, 2); // DIVE sound
+ if (BIT(rising, 3)) m_samples->start(3, 3); // SONAR sound
+ if (BIT(rising, 4)) m_samples->start(4, 4); // MINE HIT sound
- /* if (data & 0x20) enable LO SHIFT engine sound modifier */
+ machine().bookkeeping().coin_counter_w(0, BIT(data, 5));
- /* D6 and D7 are not connected */
+ // D6 and D7 are not connected
}
-
-WRITE8_MEMBER(mw8080bw_state::zzzap_audio_2_w)
+void seawolf_audio_device::device_add_mconfig(machine_config &config)
{
- /* if (data & 0x01) enable BOOM sound */
+ static char const *const sample_names[] = {
+ "*seawolf",
+ "shiphit",
+ "torpedo",
+ "dive",
+ "sonar",
+ "minehit",
+ nullptr };
- /* if (data & 0x02) enable ENGINE sound (global) */
-
- /* if (data & 0x04) enable CR 1 (screeching sound) */
+ SPEAKER(config, "mono").front_center();
- /* if (data & 0x08) enable NOISE CR 2 (happens only after the car blows up, but
- before it appears again, not sure what
- it is supposed to sound like) */
+ SAMPLES(config, m_samples);
+ m_samples->set_channels(5);
+ m_samples->set_samples_names(sample_names);
+ m_samples->add_route(ALL_OUTPUTS, "mono", 0.6);
+}
- machine().bookkeeping().coin_counter_w(0, (data >> 5) & 0x01);
+void seawolf_audio_device::device_start()
+{
+ m_prev = 0U;
- /* D4, D6 and D7 are not connected */
+ save_item(NAME(m_prev));
}
-
/*************************************
*
- * Amazing Maze
- *
- * Discrete sound emulation: Feb 2007, D.R.
+ * Gun Fight
*
*************************************/
-/* nodes - inputs */
-#define MAZE_P1_DATA NODE_01
-#define MAZE_P2_DATA NODE_02
-#define MAZE_TONE_TIMING NODE_03
-#define MAZE_COIN NODE_04
-
-/* nodes - other */
-#define MAZE_JOYSTICK_IN_USE NODE_11
-#define MAZE_AUDIO_ENABLE NODE_12
-#define MAZE_TONE_ENABLE NODE_13
-#define MAZE_GAME_OVER NODE_14
-#define MAZE_R305_306_308 NODE_15
-#define MAZE_R303_309 NODE_16
-#define MAZE_PLAYER_SEL NODE_17
-
-/* nodes - sounds */
-#define MAZE_SND NODE_18
-
-
-static const discrete_555_desc maze_555_F2 =
-{
- DISC_555_OUT_SQW | DISC_555_OUT_DC | DISC_555_TRIGGER_IS_LOGIC | DISC_555_TRIGGER_DISCHARGES_CAP,
- 5, /* B+ voltage of 555 */
- DEFAULT_555_VALUES
-};
-
-
-static const double maze_74147_table[] =
+gunfight_audio_device::gunfight_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) :
+ device_t(mconfig, GUNFIGHT_AUDIO, tag, owner, clock),
+ m_samples(*this, "samples%u", 1U)
{
- 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 1, 1, 2, 3
-};
-
+}
-static const discrete_comp_adder_table maze_r305_306_308 =
+void gunfight_audio_device::write(u8 data)
{
- DISC_COMP_P_RESISTOR, /* type of circuit */
- RES_K(100), /* R308 */
- 2, /* length */
- { RES_M(1.5), /* R304 */
- RES_K(820) } /* R304 */
-};
+ // D0 and D1 are just tied to 1k resistors
+ machine().bookkeeping().coin_counter_w(0, BIT(data, 2));
-static const discrete_comp_adder_table maze_r303_309 =
-{
- DISC_COMP_P_RESISTOR, /* type of circuit */
- RES_K(330), /* R309 */
- 1, /* length */
- { RES_M(1) } /* R303 */
-};
-
+ // the 74175 latches and inverts the top 4 bits
+ switch ((~data >> 4) & 0x0f)
+ {
+ case 0x00:
+ break;
+ case 0x01: // LEFT SHOOT sound (left speaker)
+ m_samples[0]->start(0, 0);
+ break;
+ case 0x02: // RIGHT SHOOT sound (right speaker)
+ m_samples[1]->start(0, 0);
+ break;
+ case 0x03: // LEFT HIT sound (left speaker)
+ m_samples[0]->start(0, 1);
+ break;
+ case 0x04: // enable RIGHT HIT sound (right speaker)
+ m_samples[1]->start(0, 1);
+ break;
+ default:
+ logerror("%s: Unknown sh port write %02x\n", machine().describe_context(), data);
+ break;
+ }
+}
-static const discrete_op_amp_osc_info maze_op_amp_osc =
+void gunfight_audio_device::device_add_mconfig(machine_config &config)
{
- DISC_OP_AMP_OSCILLATOR_1 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_SQW, /* type */
- RES_M(1), /* R306 */
- RES_K(430), /* R307 */
- MAZE_R305_306_308, /* R304, R305, R308 switchable circuit */
- MAZE_R303_309, /* R303, R309 switchable circuit */
- RES_K(330), /* R310 */
- 0, 0, 0, /* not used */
- CAP_P(3300), /* C300 */
- 5 /* vP */
-};
-
-
-static DISCRETE_SOUND_START(maze_discrete)
-
- /************************************************
- * Input register mapping
- ************************************************/
- DISCRETE_INPUT_DATA (MAZE_P1_DATA)
- DISCRETE_INPUT_DATA (MAZE_P2_DATA)
- DISCRETE_INPUT_LOGIC(MAZE_TONE_TIMING)
- DISCRETE_INPUT_LOGIC(MAZE_COIN)
- DISCRETE_INPUT_LOGIC(MAZE_JOYSTICK_IN_USE) /* IC D2, pin 8 */
-
- /* The following circuits control when audio is heard. */
- /* Basically there is sound for 30s after a coin is inserted. */
- /* This time is extended whenever a control is pressed. */
- /* After the 30s has expired, there is no sound until the next coin is inserted. */
- /* There is also sound for the first 30s after power up even without a coin. */
- DISCRETE_LOGIC_INVERT(NODE_20, /* IC E2, pin 8 */
- MAZE_JOYSTICK_IN_USE) /* IN0 */
- DISCRETE_555_MSTABLE(MAZE_GAME_OVER, /* IC F2, pin 3 */
- 1, /* RESET */
- NODE_20, /* TRIG */
- RES_K(270), /* R203 */
- CAP_U(100), /* C204 */
- &maze_555_F2)
- DISCRETE_LOGIC_JKFLIPFLOP(MAZE_AUDIO_ENABLE,/* IC F1, pin 5 */
- MAZE_COIN, /* RESET */
- 1, /* SET */
- MAZE_GAME_OVER, /* CLK */
- 1, /* J */
- 0) /* K */
- DISCRETE_LOGIC_INVERT(MAZE_TONE_ENABLE, /* IC F1, pin 6 */
- MAZE_AUDIO_ENABLE) /* IN0 */
- DISCRETE_LOGIC_AND3(NODE_21,
- MAZE_JOYSTICK_IN_USE, /* INP0 */
- MAZE_TONE_ENABLE, /* INP1 */
- MAZE_TONE_TIMING) /* INP2 */
-
- /* The following circuits use the control info to generate a tone. */
- DISCRETE_LOGIC_JKFLIPFLOP(MAZE_PLAYER_SEL, /* IC C1, pin 3 */
- 1, /* RESET */
- 1, /* SET */
- MAZE_TONE_TIMING, /* CLK */
- 1, /* J */
- 1) /* K */
- DISCRETE_MULTIPLEX2(NODE_31, /* IC D1 */
- MAZE_PLAYER_SEL, /* ADDR */
- MAZE_P1_DATA, /* INP0 */
- MAZE_P2_DATA) /* INP1 */
- DISCRETE_LOOKUP_TABLE(NODE_32, /* IC E1 */
- NODE_31, /* ADDR */
- 16, /* SIZE */
- &maze_74147_table)
- DISCRETE_COMP_ADDER(MAZE_R305_306_308, /* value of selected parallel circuit R305, R306, R308 */
- NODE_32, /* DATA */
- &maze_r305_306_308)
- DISCRETE_COMP_ADDER(MAZE_R303_309, /* value of selected parallel circuit R303, R309 */
- MAZE_PLAYER_SEL, /* DATA */
- &maze_r303_309)
- DISCRETE_OP_AMP_OSCILLATOR(NODE_36, /* IC J1, pin 4 */
- 1, /* ENAB */
- &maze_op_amp_osc)
-
- /* The following circuits remove DC poping noises when the tone is switched in/out. */
- DISCRETE_CRFILTER_VREF(NODE_40,
- NODE_36, /* IN0 */
- RES_K(250), /* R311, R312, R402, R403 in parallel */
- CAP_U(0.1), /* c301 */
- 2.5) /* center voltage of R311, R312 */
- DISCRETE_SWITCH(NODE_41, /* IC H3, pin 10 */
- 1, /* ENAB */
- NODE_21, /* switch */
- 2.5, /* INP0 - center voltage of R402, R403 */
- NODE_40) /* INP1 */
- DISCRETE_CRFILTER(NODE_42,
- NODE_41, /* IN0 */
- RES_K(56 + 390), /* R404 + R405 */
- CAP_P(0.01) ) /* C401 */
- DISCRETE_RCFILTER(NODE_43,
- NODE_42, /* IN0 */
- RES_K(56), /* R404 */
- CAP_P(4700) ) /* C400 */
- DISCRETE_SWITCH(MAZE_SND, /* H3 saturates op-amp J3 when enabled, disabling audio */
- 1, /* ENAB */
- MAZE_AUDIO_ENABLE, /* SWITCH */
- NODE_43, /* INP0 */
- 0) /* INP1 */
+ static char const *const sample_names[] = {
+ "*gunfight",
+ "gunshot",
+ "killed",
+ nullptr };
- DISCRETE_OUTPUT(MAZE_SND, 96200)
-DISCRETE_SOUND_END
+ SPEAKER(config, "lspeaker").front_left();
+ SPEAKER(config, "rspeaker").front_right();
+ SAMPLES(config, m_samples[0]);
+ m_samples[0]->set_channels(1);
+ m_samples[0]->set_samples_names(sample_names);
+ m_samples[0]->add_route(ALL_OUTPUTS, "lspeaker", 0.5);
-void mw8080bw_state::maze_audio(machine_config &config)
-{
- SPEAKER(config, "mono").front_center();
- DISCRETE(config, m_discrete, maze_discrete);
- m_discrete->add_route(ALL_OUTPUTS, "mono", 1.0);
+ SAMPLES(config, m_samples[1]);
+ m_samples[1]->set_channels(1);
+ m_samples[1]->set_samples_names(sample_names);
+ m_samples[1]->add_route(ALL_OUTPUTS, "rspeaker", 0.5);
}
-
-void mw8080bw_state::maze_write_discrete(uint8_t maze_tone_timing_state)
+void gunfight_audio_device::device_start()
{
- /* controls need to be active low */
- int controls = ~ioport("IN0")->read() & 0xff;
-
- m_discrete->write(MAZE_TONE_TIMING, maze_tone_timing_state);
- m_discrete->write(MAZE_P1_DATA, controls & 0x0f);
- m_discrete->write(MAZE_P2_DATA, (controls >> 4) & 0x0f);
- m_discrete->write(MAZE_JOYSTICK_IN_USE, controls != 0xff);
-
- /* The coin line is connected directly to the discrete circuit. */
- /* We can't really do that, so updating it with the tone timing is close enough. */
- /* A better option might be to update it at vblank or set a timer to do it. */
- /* The only noticeable difference doing it here, is that the controls don't */
- /* immediately start making tones if pressed right after the coin is inserted. */
- m_discrete->write(MAZE_COIN, (~ioport("IN1")->read() >> 3) & 0x01);
}
-
/*************************************
*
* Boot Hill
@@ -593,25 +782,24 @@ void mw8080bw_state::maze_write_discrete(uint8_t maze_tone_timing_state)
*
*************************************/
-/* nodes - inputs */
+// nodes - inputs
#define BOOTHILL_GAME_ON_EN NODE_01
#define BOOTHILL_LEFT_SHOT_EN NODE_02
#define BOOTHILL_RIGHT_SHOT_EN NODE_03
#define BOOTHILL_LEFT_HIT_EN NODE_04
#define BOOTHILL_RIGHT_HIT_EN NODE_05
-/* nodes - sounds */
+// nodes - sounds
#define BOOTHILL_NOISE NODE_06
#define BOOTHILL_L_SHOT_SND NODE_07
#define BOOTHILL_R_SHOT_SND NODE_08
#define BOOTHILL_L_HIT_SND NODE_09
#define BOOTHILL_R_HIT_SND NODE_10
-/* nodes - adjusters */
+// nodes - adjusters
#define BOOTHILL_MUSIC_ADJ NODE_11
-
-static const discrete_op_amp_tvca_info boothill_tone_tvca_info =
+static discrete_op_amp_tvca_info const boothill_tone_tvca_info =
{
RES_M(3.3),
RES_K(100) + RES_K(680),
@@ -639,8 +827,7 @@ static const discrete_op_amp_tvca_info boothill_tone_tvca_info =
DISC_OP_AMP_TRIGGER_FUNCTION_NONE
};
-
-static const discrete_op_amp_tvca_info boothill_shot_tvca_info =
+static discrete_op_amp_tvca_info const boothill_shot_tvca_info =
{
RES_M(2.7),
RES_K(510),
@@ -668,8 +855,7 @@ static const discrete_op_amp_tvca_info boothill_shot_tvca_info =
DISC_OP_AMP_TRIGGER_FUNCTION_NONE
};
-
-static const discrete_op_amp_tvca_info boothill_hit_tvca_info =
+static discrete_op_amp_tvca_info const boothill_hit_tvca_info =
{
RES_M(2.7),
RES_K(510),
@@ -697,8 +883,7 @@ static const discrete_op_amp_tvca_info boothill_hit_tvca_info =
DISC_OP_AMP_TRIGGER_FUNCTION_NONE
};
-
-static const discrete_mixer_desc boothill_l_mixer =
+static discrete_mixer_desc const boothill_l_mixer =
{
DISC_MIXER_IS_OP_AMP,
{ RES_K(12) + RES_K(68) + RES_K(33),
@@ -710,11 +895,10 @@ static const discrete_mixer_desc boothill_l_mixer =
0,
CAP_U(0.1),
0,
- 7200 /* final gain */
+ 7200 // final gain
};
-
-static const discrete_mixer_desc boothill_r_mixer =
+static discrete_mixer_desc const boothill_r_mixer =
{
DISC_MIXER_IS_OP_AMP,
{ RES_K(12) + RES_K(68) + RES_K(33),
@@ -729,10 +913,9 @@ static const discrete_mixer_desc boothill_r_mixer =
0,
CAP_U(0.1),
0,
- 7200 /* final gain */
+ 7200 // final gain
};
-
static DISCRETE_SOUND_START(boothill_discrete)
/************************************************
@@ -757,7 +940,7 @@ static DISCRETE_SOUND_START(boothill_discrete)
/************************************************
* Shot sounds
************************************************/
- /* Noise clock was breadboarded and measured at 7700Hz */
+ // Noise clock was breadboarded and measured at 7700Hz
DISCRETE_LFSR_NOISE(BOOTHILL_NOISE, 1, 1, 7700, 12.0, 0, 12.0/2, &midway_lfsr)
DISCRETE_OP_AMP_TRIG_VCA(NODE_30, BOOTHILL_LEFT_SHOT_EN, 0, 0, BOOTHILL_NOISE, 0, &boothill_shot_tvca_info)
@@ -794,270 +977,61 @@ static DISCRETE_SOUND_START(boothill_discrete)
DISCRETE_MIXER2(NODE_91, BOOTHILL_GAME_ON_EN, BOOTHILL_L_SHOT_SND, BOOTHILL_L_HIT_SND, &boothill_l_mixer)
- /* Music is only added to the right channel per schematics */
- /* This should be verified on the real game */
+ // Music is only added to the right channel per schematics
+ // This should be verified on the real game
DISCRETE_MIXER3(NODE_92, BOOTHILL_GAME_ON_EN, BOOTHILL_R_SHOT_SND, BOOTHILL_R_HIT_SND, MIDWAY_TONE_SND, &boothill_r_mixer)
DISCRETE_OUTPUT(NODE_91, 1)
DISCRETE_OUTPUT(NODE_92, 1)
DISCRETE_SOUND_END
+static INPUT_PORTS_START(boothill_audio)
+ PORT_START("MUSIC_ADJ")
+ PORT_ADJUSTER( 35, "Music Volume" )
+INPUT_PORTS_END
-void mw8080bw_state::boothill_audio(machine_config &config)
+boothill_audio_device::boothill_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) :
+ midway_tone_generator_device_base(mconfig, BOOTHILL_AUDIO, tag, owner, clock)
{
- SPEAKER(config, "lspeaker").front_left();
- SPEAKER(config, "rspeaker").front_right();
- DISCRETE(config, m_discrete, boothill_discrete);
- m_discrete->add_route(0, "lspeaker", 1.0);
- m_discrete->add_route(1, "rspeaker", 1.0);
}
-
-WRITE8_MEMBER(mw8080bw_state::boothill_audio_w)
+void boothill_audio_device::write(u8 data)
{
- /* D0 and D1 are not connected */
+ // D0 and D1 are not connected
- machine().bookkeeping().coin_counter_w(0, (data >> 2) & 0x01);
+ machine().bookkeeping().coin_counter_w(0, BIT(data, 2));
- m_discrete->write(BOOTHILL_GAME_ON_EN, (data >> 3) & 0x01);
+ m_discrete->write(BOOTHILL_GAME_ON_EN, BIT(data, 3));
- m_discrete->write(BOOTHILL_LEFT_SHOT_EN, (data >> 4) & 0x01);
+ m_discrete->write(BOOTHILL_LEFT_SHOT_EN, BIT(data, 4));
- m_discrete->write(BOOTHILL_RIGHT_SHOT_EN, (data >> 5) & 0x01);
+ m_discrete->write(BOOTHILL_RIGHT_SHOT_EN, BIT(data, 5));
- m_discrete->write(BOOTHILL_LEFT_HIT_EN, (data >> 6) & 0x01);
+ m_discrete->write(BOOTHILL_LEFT_HIT_EN, BIT(data, 6));
- m_discrete->write(BOOTHILL_RIGHT_HIT_EN, (data >> 7) & 0x01);
+ m_discrete->write(BOOTHILL_RIGHT_HIT_EN, BIT(data, 7));
}
-
-
-/*************************************
- *
- * Checkmate
- *
- *************************************/
-
-/* nodes - inputs */
-#define CHECKMAT_BOOM_EN NODE_01
-#define CHECKMAT_TONE_EN NODE_02
-#define CHECKMAT_TONE_DATA_45 NODE_03
-#define CHECKMAT_TONE_DATA_67 NODE_04
-
-/* nodes - other */
-#define CHECKMAT_R401_402_400 NODE_06
-#define CHECKMAT_R407_406_410 NODE_07
-
-/* nodes - sounds */
-#define CHECKMAT_BOOM_SND NODE_10
-#define CHECKMAT_TONE_SND NODE_11
-#define CHECKMAT_FINAL_SND NODE_12
-
-/* nodes - adjusters */
-#define CHECKMAT_R309 NODE_15
-#define CHECKMAT_R411 NODE_16
-
-
-static const discrete_comp_adder_table checkmat_r401_402_400 =
-{
- DISC_COMP_P_RESISTOR, /* type of circuit */
- RES_K(100), /* R401 */
- 2, /* length */
- { RES_M(1.5), /* R402 */
- RES_K(820) } /* R400 */
-};
-
-
-static const discrete_comp_adder_table checkmat_r407_406_410 =
-{
- DISC_COMP_P_RESISTOR, /* type of circuit */
- RES_K(330), /* R407 */
- 2, /* length */
- { RES_M(1), /* R406 */
- RES_K(510) } /* R410 */
-};
-
-
-static const discrete_op_amp_osc_info checkmat_op_amp_osc =
-{
- DISC_OP_AMP_OSCILLATOR_1 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_SQW, /* type */
- RES_M(1), /* R403 */
- RES_K(430), /* R405 */
- CHECKMAT_R401_402_400, /* R401, R402, R400 switchable circuit */
- CHECKMAT_R407_406_410, /* R407, R406, R410 switchable circuit */
- RES_K(330), /* R404 */
- 0, 0, 0, /* not used */
- CAP_P(3300), /* C400 */
- 5 /* vP */
-};
-
-
-static const discrete_op_amp_tvca_info checkmat_op_amp_tvca =
-{
- RES_M(1.2), /* R302 */
- RES_M(1), /* R305 */
- 0, /* r3 - not used */
- RES_M(1.2), /* R304 */
- RES_K(1), /* M4 */
- 0, /* r6 - not used */
- RES_M(1), /* R303 */
- 0, /* r8 - not used */
- 0, /* r9 - not used */
- 0, /* r10 - not used */
- 0, /* r11 - not used */
- CAP_U(1), /* C300 */
- 0, /* c2 - not used */
- 0, 0, /* c3, c4 - not used */
- 5, /* v1 */
- 0, /* v2 */
- 0, /* v3 */
- 5, /* vP */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* f0 - not used */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* f1 - not used */
- DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, /* f2 */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* f3 - not used */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* f4 - not used */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* f5 - not used */
-};
-
-
-static const discrete_mixer_desc checkmat_mixer =
+void boothill_audio_device::device_add_mconfig(machine_config &config)
{
- DISC_MIXER_IS_OP_AMP, /* type */
- { RES_K(100), /* R308 - VERIFY - can't read schematic */
- RES_K(56 + 47) }, /* R412 + R408 */
- { CHECKMAT_R309, /* R309 */
- CHECKMAT_R411}, /* R411 */
- { CAP_U(10), /* C305 */
- CAP_U(0.01) }, /* C401 */
- 0, /* rI - not used */
- RES_K(100), /* R507 */
- 0, /* cF - not used */
- CAP_U(1), /* C505 */
- 0, /* vRef - GND */
- 1 /* gain */
-};
-
-static DISCRETE_SOUND_START(checkmat_discrete)
-
- /************************************************
- * Input register mapping
- ************************************************/
- DISCRETE_INPUT_LOGIC(CHECKMAT_BOOM_EN)
- DISCRETE_INPUT_LOGIC(CHECKMAT_TONE_EN)
- DISCRETE_INPUT_DATA (CHECKMAT_TONE_DATA_45)
- DISCRETE_INPUT_DATA (CHECKMAT_TONE_DATA_67)
-
- /* The low value of the resistors are tweaked to give a good volume range. */
- /* This is needed because the original controls are infinite, but the UI only gives 100 steps. */
- /* Also real variable resistors never hit 0 ohms. There is always some resistance. */
- /* R309 mostly just increases the Boom clipping, making it sound bassier. */
- DISCRETE_ADJUSTMENT(CHECKMAT_R309, RES_K(100), 1000, DISC_LOGADJ, "R309")
- DISCRETE_ADJUSTMENT(CHECKMAT_R411, RES_M(1), 1000, DISC_LOGADJ, "R411")
-
- /************************************************
- * Boom Sound
- *
- * The zener diode noise source is hard to
- * emulate. Guess for now.
- ************************************************/
- /* FIX - find noise freq and amplitude */
- DISCRETE_NOISE(NODE_20,
- 1, /* ENAB */
- 1500, /* FREQ */
- 2, /* AMP */
- 0) /* BIAS */
- DISCRETE_OP_AMP_TRIG_VCA(NODE_21,
- CHECKMAT_BOOM_EN, /* TRG0 */
- 0, /* TRG1 - not used */
- 0, /* TRG2 - not used */
- NODE_20, /* IN0 */
- 0, /* IN1 - not used */
- &checkmat_op_amp_tvca)
- /* The next 5 modules emulate the filter. */
- DISCRETE_FILTER2(NODE_23,
- 1, /* ENAB */
- NODE_21, /* INP0 */
- 35, /* FREQ */
- 1.0 / 8, /* DAMP */
- DISC_FILTER_BANDPASS)
- DISCRETE_GAIN(NODE_24,
- NODE_23, /* IN0 */
- 15) /* GAIN */
- DISCRETE_CLAMP(CHECKMAT_BOOM_SND, /* IC Q2/3, pin 10 */
- NODE_24, /* IN0 */
- 0 - 6, /* MIN */
- 12.0 - OP_AMP_NORTON_VBE -6)/* MAX */
-
- /************************************************
- * Tone generator
- ************************************************/
- DISCRETE_COMP_ADDER(CHECKMAT_R401_402_400, /* value of selected parallel circuit R401, R402, R400 */
- CHECKMAT_TONE_DATA_45, /* DATA */
- &checkmat_r401_402_400)
- DISCRETE_COMP_ADDER(CHECKMAT_R407_406_410, /* value of selected parallel circuit R407, R406, R410 */
- CHECKMAT_TONE_DATA_67, /* DATA */
- &checkmat_r407_406_410)
- DISCRETE_OP_AMP_OSCILLATOR(NODE_30, /* IC N3/4, pin 4 */
- 1, /* ENAB */
- &checkmat_op_amp_osc)
-
- /* The following circuits remove DC poping noises when the tone is switched in/out. */
- DISCRETE_CRFILTER_VREF(NODE_31,
- NODE_30, /* IN0 */
- RES_K(250), /* R409, R415, R414, R413 in parallel */
- CAP_U(0.1), /* c401 */
- 2.5) /* center voltage of R409, R415 */
- DISCRETE_SWITCH(NODE_32, /* IC R3/4, pin 9 */
- 1, /* ENAB */
- CHECKMAT_TONE_EN, /* switch */
- 2.5, /* INP0 - center voltage of R413, R414 */
- NODE_31) /* INP1 */
- DISCRETE_CRFILTER(NODE_33,
- NODE_32, /* IN0 */
- RES_K(56 + 47 + 200), /* R412 + R408 + part of R411 */
- CAP_P(0.01) ) /* C404 */
- DISCRETE_RCFILTER(CHECKMAT_TONE_SND,
- NODE_33, /* IN0 */
- RES_K(56), /* R412 */
- CAP_P(4700) ) /* C403 */
-
- /************************************************
- * Final mix and output
- ************************************************/
- DISCRETE_MIXER2(CHECKMAT_FINAL_SND,
- 1, /* ENAB */
- CHECKMAT_BOOM_SND, /* IN0 */
- CHECKMAT_TONE_SND, /* IN1 */
- &checkmat_mixer)
- DISCRETE_OUTPUT(CHECKMAT_FINAL_SND, 300000)
-DISCRETE_SOUND_END
+ SPEAKER(config, "lspeaker").front_left();
+ SPEAKER(config, "rspeaker").front_right();
+ DISCRETE(config, m_discrete, boothill_discrete);
+ m_discrete->add_route(0, "lspeaker", 1.0);
+ m_discrete->add_route(1, "rspeaker", 1.0);
+}
-void mw8080bw_state::checkmat_audio(machine_config &config)
+ioport_constructor boothill_audio_device::device_input_ports() const
{
- SPEAKER(config, "mono").front_center();
- DISCRETE(config, m_discrete, checkmat_discrete);
- m_discrete->add_route(ALL_OUTPUTS, "mono", 0.4);
+ return INPUT_PORTS_NAME(boothill_audio);
}
-
-WRITE8_MEMBER(mw8080bw_state::checkmat_audio_w)
+void boothill_audio_device::device_start()
{
- m_discrete->write(CHECKMAT_TONE_EN, data & 0x01);
-
- m_discrete->write(CHECKMAT_BOOM_EN, (data >> 1) & 0x01);
-
- machine().bookkeeping().coin_counter_w(0, (data >> 2) & 0x01);
-
- machine().sound().system_enable((data >> 3) & 0x01);
-
- m_discrete->write(CHECKMAT_TONE_DATA_45, (data >> 4) & 0x03);
- m_discrete->write(CHECKMAT_TONE_DATA_67, (data >> 6) & 0x03);
}
-
/*************************************
*
* Desert Gun
@@ -1066,7 +1040,7 @@ WRITE8_MEMBER(mw8080bw_state::checkmat_audio_w)
*
*************************************/
-/* nodes - inputs */
+// nodes - inputs
#define DESERTGU_GAME_ON_EN NODE_01
#define DESERTGU_RIFLE_SHOT_EN NODE_02
#define DESERTGU_BOTTLE_HIT_EN NODE_03
@@ -1075,7 +1049,7 @@ WRITE8_MEMBER(mw8080bw_state::checkmat_audio_w)
#define DESERTGU_ROADRUNNER_BEEP_BEEP_EN NODE_06
#define DESERTGU_TRIGGER_CLICK_EN NODE_07
-/* nodes - sounds */
+// nodes - sounds
#define DESERTGU_NOISE NODE_08
#define DESERTGU_RIFLE_SHOT_SND NODE_09
#define DESERTGU_BOTTLE_HIT_SND NODE_10
@@ -1084,11 +1058,10 @@ WRITE8_MEMBER(mw8080bw_state::checkmat_audio_w)
#define DESERTGU_ROADRUNNER_BEEP_BEEP_SND NODE_13
#define DESERTGU_TRIGGER_CLICK_SND DESERTGU_TRIGGER_CLICK_EN
-/* nodes - adjusters */
+// nodes - adjusters
#define DESERTGU_MUSIC_ADJ NODE_15
-
-static const discrete_op_amp_tvca_info desertgu_rifle_shot_tvca_info =
+static discrete_op_amp_tvca_info const desertgu_rifle_shot_tvca_info =
{
RES_M(2.7),
RES_K(680),
@@ -1104,10 +1077,10 @@ static const discrete_op_amp_tvca_info desertgu_rifle_shot_tvca_info =
CAP_U(0.47),
0,
0, 0,
- 12, /* v1 */
- 0, /* v2 */
- 0, /* v3 */
- 12, /* vP */
+ 12, // v1
+ 0, // v2
+ 0, // v3
+ 12, // vP
DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
DISC_OP_AMP_TRIGGER_FUNCTION_TRG0,
@@ -1117,7 +1090,7 @@ static const discrete_op_amp_tvca_info desertgu_rifle_shot_tvca_info =
};
-static const discrete_mixer_desc desertgu_filter_mixer =
+static discrete_mixer_desc const desertgu_filter_mixer =
{
DISC_MIXER_IS_RESISTOR,
{ RES_K(2),
@@ -1134,7 +1107,7 @@ static const discrete_mixer_desc desertgu_filter_mixer =
};
-static const discrete_op_amp_filt_info desertgu_filter =
+static discrete_op_amp_filt_info const desertgu_filter =
{
1.0 / ( 1.0 / RES_K(2) + 1.0 / RES_K(27) + 1.0 / (RES_K(2) + RES_K(1))),
0,
@@ -1173,7 +1146,7 @@ static const discrete_mixer_desc desertgu_mixer =
0,
CAP_U(0.1),
0,
- 6000 /* final gain */
+ 6000 // final gain
};
@@ -1190,9 +1163,9 @@ static DISCRETE_SOUND_START(desertgu_discrete)
DISCRETE_INPUT_LOGIC(DESERTGU_ROADRUNNER_BEEP_BEEP_EN)
DISCRETE_INPUTX_LOGIC(DESERTGU_TRIGGER_CLICK_SND, 12, 0, 0)
- /* The low value of the pot is set to 75000. A real 1M pot will never go to 0 anyways. */
- /* This will give the control more apparent volume range. */
- /* The music way overpowers the rest of the sounds anyways. */
+ // The low value of the pot is set to 75000. A real 1M pot will never go to 0 anyways.
+ // This will give the control more apparent volume range.
+ // The music way overpowers the rest of the sounds anyways.
DISCRETE_ADJUSTMENT(DESERTGU_MUSIC_ADJ, RES_M(1), 75000, DISC_LOGADJ, "MUSIC_ADJ")
/************************************************
@@ -1203,7 +1176,7 @@ static DISCRETE_SOUND_START(desertgu_discrete)
/************************************************
* Rifle shot sound
************************************************/
- /* Noise clock was breadboarded and measured at 7515Hz */
+ // Noise clock was breadboarded and measured at 7515Hz
DISCRETE_LFSR_NOISE(DESERTGU_NOISE, 1, 1, 7515, 12.0, 0, 12.0/2, &midway_lfsr)
DISCRETE_OP_AMP_TRIG_VCA(NODE_30, DESERTGU_RIFLE_SHOT_EN, 0, 0, DESERTGU_NOISE, 0, &desertgu_rifle_shot_tvca_info)
@@ -1213,22 +1186,22 @@ static DISCRETE_SOUND_START(desertgu_discrete)
/************************************************
* Bottle hit sound
************************************************/
- DISCRETE_CONSTANT(DESERTGU_BOTTLE_HIT_SND, 0) /* placeholder for incomplete sound */
+ DISCRETE_CONSTANT(DESERTGU_BOTTLE_HIT_SND, 0) // placeholder for incomplete sound
/************************************************
* Road Runner hit sound
************************************************/
- DISCRETE_CONSTANT(DESERTGU_ROAD_RUNNER_HIT_SND, 0) /* placeholder for incomplete sound */
+ DISCRETE_CONSTANT(DESERTGU_ROAD_RUNNER_HIT_SND, 0) // placeholder for incomplete sound
/************************************************
* Creature hit sound
************************************************/
- DISCRETE_CONSTANT(DESERTGU_CREATURE_HIT_SND, 0) /* placeholder for incomplete sound */
+ DISCRETE_CONSTANT(DESERTGU_CREATURE_HIT_SND, 0) // placeholder for incomplete sound
/************************************************
* Beep-Beep sound
************************************************/
- DISCRETE_CONSTANT(DESERTGU_ROADRUNNER_BEEP_BEEP_SND, 0) /* placeholder for incomplete sound */
+ DISCRETE_CONSTANT(DESERTGU_ROADRUNNER_BEEP_BEEP_SND, 0) // placeholder for incomplete sound
/************************************************
* Mix and filter
@@ -1244,46 +1217,69 @@ static DISCRETE_SOUND_START(desertgu_discrete)
DISCRETE_OUTPUT(NODE_91, 1)
DISCRETE_SOUND_END
+INPUT_PORTS_START(desertgu_audio)
+ PORT_START("MUSIC_ADJ") // 3
+ PORT_ADJUSTER( 60, "Music Volume" )
+INPUT_PORTS_END
-void mw8080bw_state::desertgu_audio(machine_config &config)
+desertgu_audio_device::desertgu_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) :
+ midway_tone_generator_device_base(mconfig, DESERTGU_AUDIO, tag, owner, clock),
+ m_ctrl_sel_out(*this),
+ m_recoil(*this, "Player1_Gun_Recoil"),
+ m_p2(0U)
{
- SPEAKER(config, "mono").front_center();
- DISCRETE(config, m_discrete, desertgu_discrete);
- m_discrete->add_route(ALL_OUTPUTS, "mono", 0.8);
}
-
-WRITE8_MEMBER(mw8080bw_state::desertgu_audio_1_w)
+void desertgu_audio_device::p1_w(u8 data)
{
- /* D0 and D1 are not connected */
+ // D0 and D1 are not connected
- machine().bookkeeping().coin_counter_w(0, (data >> 2) & 0x01);
+ machine().bookkeeping().coin_counter_w(0, BIT(data, 2));
m_discrete->write(DESERTGU_GAME_ON_EN, (data >> 3) & 0x01);
-
m_discrete->write(DESERTGU_RIFLE_SHOT_EN, (data >> 4) & 0x01);
-
m_discrete->write(DESERTGU_BOTTLE_HIT_EN, (data >> 5) & 0x01);
-
m_discrete->write(DESERTGU_ROAD_RUNNER_HIT_EN, (data >> 6) & 0x01);
-
m_discrete->write(DESERTGU_CREATURE_HIT_EN, (data >> 7) & 0x01);
}
-
-WRITE8_MEMBER(mw8080bw_state::desertgu_audio_2_w)
+void desertgu_audio_device::p2_w(u8 data)
{
- m_discrete->write(DESERTGU_ROADRUNNER_BEEP_BEEP_EN, (data >> 0) & 0x01);
+ u8 const changed(data ^ m_p2);
+ m_p2 = data;
+ m_discrete->write(DESERTGU_ROADRUNNER_BEEP_BEEP_EN, (data >> 0) & 0x01);
m_discrete->write(DESERTGU_TRIGGER_CLICK_EN, (data >> 1) & 0x01);
- output().set_value("Player1_Gun_Recoil", (data >> 2) & 0x01);
+ m_recoil = BIT(data, 2);
- m_desertgun_controller_select = (data >> 3) & 0x01;
+ if (BIT(changed, 3)) m_ctrl_sel_out(BIT(data, 3));
- /* D4-D7 are not connected */
+ // D4-D7 are not connected
}
+void desertgu_audio_device::device_add_mconfig(machine_config &config)
+{
+ SPEAKER(config, "mono").front_center();
+
+ DISCRETE(config, m_discrete, desertgu_discrete);
+ m_discrete->add_route(ALL_OUTPUTS, "mono", 0.8);
+}
+
+ioport_constructor desertgu_audio_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME(desertgu_audio);
+}
+
+void desertgu_audio_device::device_start()
+{
+ m_ctrl_sel_out.resolve();
+ m_recoil.resolve();
+
+ m_p2 = 0U;
+
+ save_item(NAME(m_p2));
+}
/*************************************
@@ -1294,43 +1290,40 @@ WRITE8_MEMBER(mw8080bw_state::desertgu_audio_2_w)
*
*************************************/
-/* nodes - inputs */
+// nodes - inputs
#define DPLAY_GAME_ON_EN NODE_01
#define DPLAY_TONE_ON_EN NODE_02
#define DPLAY_SIREN_EN NODE_03
#define DPLAY_WHISTLE_EN NODE_04
#define DPLAY_CHEER_EN NODE_05
-/* nodes - sounds */
+// nodes - sounds
#define DPLAY_NOISE NODE_06
#define DPLAY_TONE_SND NODE_07
#define DPLAY_SIREN_SND NODE_08
#define DPLAY_WHISTLE_SND NODE_09
#define DPLAY_CHEER_SND NODE_10
-/* nodes - adjusters */
+// nodes - adjusters
#define DPLAY_MUSIC_ADJ NODE_11
-
-static const discrete_lfsr_desc dplay_lfsr =
+static discrete_lfsr_desc const dplay_lfsr =
{
DISC_CLK_IS_FREQ,
- 17, /* bit length */
- /* the RC network fed into pin 4, has the effect
- of presetting all bits high at power up */
- 0x1ffff, /* reset value */
- 4, /* use bit 4 as XOR input 0 */
- 16, /* use bit 16 as XOR input 1 */
- DISC_LFSR_XOR, /* feedback stage1 is XOR */
- DISC_LFSR_OR, /* feedback stage2 is just stage 1 output OR with external feed */
- DISC_LFSR_REPLACE, /* feedback stage3 replaces the shifted register contents */
- 0x000001, /* everything is shifted into the first bit only */
- 0, /* output is not inverted */
- 8 /* output bit */
+ 17, // bit length
+ // the RC network fed into pin 4, has the effect of presetting all bits high at power up
+ 0x1ffff, // reset value
+ 4, // use bit 4 as XOR input 0
+ 16, // use bit 16 as XOR input 1
+ DISC_LFSR_XOR, // feedback stage1 is XOR
+ DISC_LFSR_OR, // feedback stage2 is just stage 1 output OR with external feed
+ DISC_LFSR_REPLACE, // feedback stage3 replaces the shifted register contents
+ 0x000001, // everything is shifted into the first bit only
+ 0, // output is not inverted
+ 8 // output bit
};
-
-static const discrete_integrate_info dplay_siren_integrate_info =
+static discrete_integrate_info const dplay_siren_integrate_info =
{
DISC_INTEGRATE_OP_AMP_1 | DISC_OP_AMP_IS_NORTON,
RES_M(1),
@@ -1344,23 +1337,22 @@ static const discrete_integrate_info dplay_siren_integrate_info =
DISC_OP_AMP_TRIGGER_FUNCTION_NONE
};
-
-static const discrete_op_amp_osc_info dplay_siren_osc =
-{
- DISC_OP_AMP_OSCILLATOR_VCO_2 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_SQW, /* type */
- RES_K(390), /* r1 */
- RES_M(5.6), /* r2 */
- RES_M(1), /* r3 */
- RES_M(1.5), /* r4 */
- RES_M(3.3), /* r5 */
- RES_K(56), /* r6 */
- 0, /* no r7 */
- 0, /* no r8 */
- CAP_U(0.0022), /* c */
- 12 /* vP */
+static discrete_op_amp_osc_info const dplay_siren_osc =
+{
+ DISC_OP_AMP_OSCILLATOR_VCO_2 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_SQW, // type
+ RES_K(390), // r1
+ RES_M(5.6), // r2
+ RES_M(1), // r3
+ RES_M(1.5), // r4
+ RES_M(3.3), // r5
+ RES_K(56), // r6
+ 0, // no r7
+ 0, // no r8
+ CAP_U(0.0022), // c
+ 12 // vP
};
-static const discrete_integrate_info dplay_whistle_integrate_info =
+static discrete_integrate_info const dplay_whistle_integrate_info =
{
DISC_INTEGRATE_OP_AMP_1 | DISC_OP_AMP_IS_NORTON,
RES_M(1),
@@ -1374,24 +1366,22 @@ static const discrete_integrate_info dplay_whistle_integrate_info =
DISC_OP_AMP_TRIGGER_FUNCTION_NONE
};
-
-static const discrete_op_amp_osc_info dplay_whistle_osc =
-{
- DISC_OP_AMP_OSCILLATOR_VCO_2 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_SQW, /* type */
- RES_K(510), /* r1 */
- RES_M(5.6), /* r2 */
- RES_M(1), /* r3 */
- RES_M(1.5), /* r4 */
- RES_M(3.3), /* r5 */
- RES_K(300), /* r6 */
- 0, /* no r7 */
- 0, /* no r8 */
- CAP_P(220), /* c */
- 12 /* vP */
+static discrete_op_amp_osc_info const dplay_whistle_osc =
+{
+ DISC_OP_AMP_OSCILLATOR_VCO_2 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_SQW, // type
+ RES_K(510), // r1
+ RES_M(5.6), // r2
+ RES_M(1), // r3
+ RES_M(1.5), // r4
+ RES_M(3.3), // r5
+ RES_K(300), // r6
+ 0, // no r7
+ 0, // no r8
+ CAP_P(220), // c
+ 12 // vP
};
-
-static const discrete_integrate_info dplay_cheer_integrate_info =
+static discrete_integrate_info const dplay_cheer_integrate_info =
{
DISC_INTEGRATE_OP_AMP_1 | DISC_OP_AMP_IS_NORTON,
RES_M(1.5),
@@ -1405,8 +1395,7 @@ static const discrete_integrate_info dplay_cheer_integrate_info =
DISC_OP_AMP_TRIGGER_FUNCTION_NONE
};
-
-static const discrete_op_amp_filt_info dplay_cheer_filter =
+static discrete_op_amp_filt_info const dplay_cheer_filter =
{
RES_K(100),
0,
@@ -1421,8 +1410,7 @@ static const discrete_op_amp_filt_info dplay_cheer_filter =
0
};
-
-static const discrete_mixer_desc dplay_mixer =
+static discrete_mixer_desc const dplay_mixer =
{
DISC_MIXER_IS_OP_AMP,
{ RES_K(68),
@@ -1444,9 +1432,7 @@ static const discrete_mixer_desc dplay_mixer =
2000 /* final gain */
};
-
static DISCRETE_SOUND_START(dplay_discrete)
-
/************************************************
* Input register mapping
************************************************/
@@ -1456,9 +1442,9 @@ static DISCRETE_SOUND_START(dplay_discrete)
DISCRETE_INPUTX_LOGIC(DPLAY_WHISTLE_EN, 12, 0, 0)
DISCRETE_INPUTX_LOGIC(DPLAY_CHEER_EN, 5, 0, 0)
- /* The low value of the pot is set to 1000. A real 1M pot will never go to 0 anyways. */
- /* This will give the control more apparent volume range. */
- /* The music way overpowers the rest of the sounds anyways. */
+ // The low value of the pot is set to 1000. A real 1M pot will never go to 0 anyways.
+ // This will give the control more apparent volume range.
+ // The music way overpowers the rest of the sounds anyways.
DISCRETE_ADJUSTMENT(DPLAY_MUSIC_ADJ, RES_M(1), 1000, DISC_LOGADJ, "MUSIC_ADJ")
/************************************************
@@ -1472,30 +1458,31 @@ static DISCRETE_SOUND_START(dplay_discrete)
* Siren
************************************************/
DISCRETE_INTEGRATE(NODE_30,
- DPLAY_SIREN_EN, /* TRG0 */
- 0 , /* TRG1 */
- &dplay_siren_integrate_info)
+ DPLAY_SIREN_EN, // TRG0
+ 0, // TRG1
+ &dplay_siren_integrate_info)
DISCRETE_OP_AMP_VCO1(DPLAY_SIREN_SND,
- 1, /* ENAB */
- NODE_30, /* VMOD1 */
- &dplay_siren_osc)
+ 1, // ENAB
+ NODE_30, // VMOD1
+ &dplay_siren_osc)
/************************************************
* Whistle
************************************************/
DISCRETE_INTEGRATE(NODE_40,
- DPLAY_WHISTLE_EN, /* TRG0 */
- 0 , /* TRG1 */
- &dplay_whistle_integrate_info)
+ DPLAY_WHISTLE_EN, // TRG0
+ 0, // TRG1
+ &dplay_whistle_integrate_info)
DISCRETE_OP_AMP_VCO1(DPLAY_WHISTLE_SND,
- 1, /* ENAB */
- NODE_40, /* VMOD1 */
- &dplay_whistle_osc)
+ 1, // ENAB
+ NODE_40, // VMOD1
+ &dplay_whistle_osc)
- /************************************************ * Cheer
- ************************************************/ /* Noise clock was
- breadboarded and measured at 7700Hz */ DISCRETE_LFSR_NOISE(DPLAY_NOISE, 1,
- 1, 7700, 12.0, 0, 12.0/2, &dplay_lfsr)
+ /************************************************
+ * Cheer
+ ************************************************/
+ // Noise clock was breadboarded and measured at 7700Hz
+ DISCRETE_LFSR_NOISE(DPLAY_NOISE, 1, 1, 7700, 12.0, 0, 12.0/2, &dplay_lfsr)
DISCRETE_INTEGRATE(NODE_50, DPLAY_CHEER_EN, 0, &dplay_cheer_integrate_info)
DISCRETE_SWITCH(NODE_51, 1, DPLAY_NOISE, 0, NODE_50)
@@ -1509,32 +1496,49 @@ static DISCRETE_SOUND_START(dplay_discrete)
DISCRETE_OUTPUT(NODE_91, 1)
DISCRETE_SOUND_END
+static INPUT_PORTS_START(dplay_audio)
+ PORT_START("MUSIC_ADJ") // 3
+ PORT_ADJUSTER( 60, "Music Volume" )
+INPUT_PORTS_END
-void mw8080bw_state::dplay_audio(machine_config &config)
+dplay_audio_device::dplay_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) :
+ midway_tone_generator_device_base(mconfig, DPLAY_AUDIO, tag, owner, clock)
{
- SPEAKER(config, "mono").front_center();
- DISCRETE(config, m_discrete, dplay_discrete);
- m_discrete->add_route(ALL_OUTPUTS, "mono", 0.8);
}
-
-WRITE8_MEMBER(mw8080bw_state::dplay_audio_w)
+void dplay_audio_device::write(u8 data)
{
- m_discrete->write(DPLAY_TONE_ON_EN, (data >> 0) & 0x01);
+ m_discrete->write(DPLAY_TONE_ON_EN, BIT(data, 0));
- m_discrete->write(DPLAY_CHEER_EN, (data >> 1) & 0x01);
+ m_discrete->write(DPLAY_CHEER_EN, BIT(data, 1));
- m_discrete->write(DPLAY_SIREN_EN, (data >> 2) & 0x01);
+ m_discrete->write(DPLAY_SIREN_EN, BIT(data, 2));
- m_discrete->write(DPLAY_WHISTLE_EN, (data >> 3) & 0x01);
+ m_discrete->write(DPLAY_WHISTLE_EN, BIT(data, 3));
- m_discrete->write(DPLAY_GAME_ON_EN, (data >> 4) & 0x01);
+ m_discrete->write(DPLAY_GAME_ON_EN, BIT(data, 4));
- machine().bookkeeping().coin_counter_w(0, (data >> 5) & 0x01);
+ machine().bookkeeping().coin_counter_w(0, BIT(data, 5));
- /* D6 and D7 are not connected */
+ // D6 and D7 are not connected
}
+void dplay_audio_device::device_add_mconfig(machine_config &config)
+{
+ SPEAKER(config, "mono").front_center();
+
+ DISCRETE(config, m_discrete, dplay_discrete);
+ m_discrete->add_route(ALL_OUTPUTS, "mono", 0.8);
+}
+
+ioport_constructor dplay_audio_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME(dplay_audio);
+}
+
+void dplay_audio_device::device_start()
+{
+}
/*************************************
@@ -1543,90 +1547,96 @@ WRITE8_MEMBER(mw8080bw_state::dplay_audio_w)
*
*************************************/
-static const char *const gmissile_sample_names[] =
-{
- "*gmissile",
- "1", /* missle */
- "2", /* explosion */
- nullptr
-};
-
-void mw8080bw_state::gmissile_audio(machine_config &config)
+gmissile_audio_device::gmissile_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) :
+ device_t(mconfig, GMISSILE_AUDIO, tag, owner, clock),
+ m_samples(*this, "samples%u", 1U),
+ m_l_exp(*this, "L_EXP_LIGHT"),
+ m_r_exp(*this, "R_EXP_LIGHT"),
+ m_p1(0U)
{
- MCFG_SOUND_START_OVERRIDE(mw8080bw_state, samples)
-
- SPEAKER(config, "lspeaker").front_left();
- SPEAKER(config, "rspeaker").front_right();
-
- SAMPLES(config, m_samples1);
- m_samples1->set_channels(1);
- m_samples1->set_samples_names(gmissile_sample_names);
- m_samples1->add_route(ALL_OUTPUTS, "lspeaker", 1.0);
-
- SAMPLES(config, m_samples2);
- m_samples2->set_channels(1);
- m_samples2->set_samples_names(gmissile_sample_names);
- m_samples2->add_route(ALL_OUTPUTS, "rspeaker", 1.0);
}
-
-WRITE8_MEMBER(mw8080bw_state::gmissile_audio_1_w)
+void gmissile_audio_device::p1_w(u8 data)
{
/* note that the schematics shows the left and right explosions
reversed (D5=R, D7=L), but the software confirms that
ours is right */
- uint8_t rising_bits = data & ~m_port_1_last;
+ u8 const rising(data & ~m_p1);
+ m_p1 = data;
- /* D0 and D1 are not connected */
+ // D0 and D1 are not connected
- machine().bookkeeping().coin_counter_w(0, (data >> 2) & 0x01);
+ machine().bookkeeping().coin_counter_w(0, BIT(data, 2));
- machine().sound().system_enable((data >> 3) & 0x01);
+ machine().sound().system_enable(BIT(data, 3));
- /* if (data & 0x10) enable RIGHT MISSILE sound (goes to right speaker) */
- if (rising_bits & 0x10) m_samples2->start(0, 0);
+ if (BIT(rising, 4)) m_samples[1]->start(0, 0); // RIGHT MISSILE sound (goes to right speaker)
- /* if (data & 0x20) enable LEFT EXPLOSION sound (goes to left speaker) */
- output().set_value("L_EXP_LIGHT", (data >> 5) & 0x01);
- if (rising_bits & 0x20) m_samples1->start(0, 1);
+ m_l_exp = BIT(data, 5);
+ if (BIT(rising, 5)) m_samples[0]->start(0, 1); // LEFT EXPLOSION sound (goes to left speaker)
- /* if (data & 0x40) enable LEFT MISSILE sound (goes to left speaker) */
- if (rising_bits & 0x40) m_samples1->start(0, 0);
+ if (BIT(rising, 6)) m_samples[0]->start(0, 0); // LEFT MISSILE sound (goes to left speaker)
- /* if (data & 0x80) enable RIGHT EXPLOSION sound (goes to right speaker) */
- output().set_value("R_EXP_LIGHT", (data >> 7) & 0x01);
- if (rising_bits & 0x80) m_samples2->start(0, 1);
-
- m_port_1_last = data;
+ m_r_exp = BIT(data, 7);
+ if (BIT(rising, 7)) m_samples[1]->start(0, 1); // RIGHT EXPLOSION sound (goes to right speaker)
}
-
-WRITE8_MEMBER(mw8080bw_state::gmissile_audio_2_w)
+void gmissile_audio_device::p2_w(u8 data)
{
- /* set AIRPLANE/COPTER/JET PAN(data & 0x07) */
+ // set AIRPLANE/COPTER/JET PAN(data & 0x07)
- /* set TANK PAN((data >> 3) & 0x07) */
+ // set TANK PAN((data >> 3) & 0x07)
- /* D6 and D7 are not connected */
+ // D6 and D7 are not connected
}
-
-WRITE8_MEMBER(mw8080bw_state::gmissile_audio_3_w)
+void gmissile_audio_device::p3_w(u8 data)
{
- /* if (data & 0x01) enable AIRPLANE (bi-plane) sound (goes to AIRPLANE/COPTER/JET panning circuit) */
+ // if (data & 0x01) enable AIRPLANE (bi-plane) sound (goes to AIRPLANE/COPTER/JET panning circuit)
- /* if (data & 0x02) enable TANK sound (goes to TANK panning circuit) */
+ // if (data & 0x02) enable TANK sound (goes to TANK panning circuit)
- /* if (data & 0x04) enable COPTER sound (goes to AIRPLANE/COPTER/JET panning circuit) */
+ // if (data & 0x04) enable COPTER sound (goes to AIRPLANE/COPTER/JET panning circuit)
- /* D3 and D4 are not connected */
+ // D3 and D4 are not connected
- /* if (data & 0x20) enable JET (3 fighter jets) sound (goes to AIRPLANE/COPTER/JET panning circuit) */
+ // if (data & 0x20) enable JET (3 fighter jets) sound (goes to AIRPLANE/COPTER/JET panning circuit)
- /* D6 and D7 are not connected */
+ // D6 and D7 are not connected
+}
+
+void gmissile_audio_device::device_add_mconfig(machine_config &config)
+{
+ static char const *const sample_names[] = {
+ "*gmissile",
+ "1", // missle
+ "2", // explosion
+ nullptr };
+
+ SPEAKER(config, "lspeaker").front_left();
+ SPEAKER(config, "rspeaker").front_right();
+
+ SAMPLES(config, m_samples[0]);
+ m_samples[0]->set_channels(1);
+ m_samples[0]->set_samples_names(sample_names);
+ m_samples[0]->add_route(ALL_OUTPUTS, "lspeaker", 1.0);
+
+ SAMPLES(config, m_samples[1]);
+ m_samples[1]->set_channels(1);
+ m_samples[1]->set_samples_names(sample_names);
+ m_samples[1]->add_route(ALL_OUTPUTS, "rspeaker", 1.0);
}
+void gmissile_audio_device::device_start()
+{
+ m_l_exp.resolve();
+ m_r_exp.resolve();
+
+ m_p1 = 0U;
+
+ save_item(NAME(m_p1));
+}
/*************************************
@@ -1635,89 +1645,85 @@ WRITE8_MEMBER(mw8080bw_state::gmissile_audio_3_w)
*
*************************************/
-/* Noise clock was breadboarded and measured at 3760Hz */
+// Noise clock was breadboarded and measured at 3760Hz
-static const char *const m4_sample_names[] =
+m4_audio_device::m4_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) :
+ device_t(mconfig, M4_AUDIO, tag, owner, clock),
+ m_samples(*this, "samples%u", 1U),
+ m_p1(0U),
+ m_p2(0U)
{
- "*m4",
- "1", /* missle */
- "2", /* explosion */
- nullptr
-};
-
+}
-void mw8080bw_state::m4_audio(machine_config &config)
+void m4_audio_device::p1_w(u8 data)
{
- MCFG_SOUND_START_OVERRIDE(mw8080bw_state, samples)
+ u8 const rising(data & ~m_p1);
+ m_p1 = data;
- SPEAKER(config, "lspeaker").front_left();
- SPEAKER(config, "rspeaker").front_right();
+ // D0 and D1 are not connected
+
+ machine().bookkeeping().coin_counter_w(0, BIT(data, 2));
- SAMPLES(config, m_samples1);
- m_samples1->set_channels(2);
- m_samples1->set_samples_names(m4_sample_names);
- m_samples1->add_route(ALL_OUTPUTS, "lspeaker", 1);
+ machine().sound().system_enable(BIT(data, 3));
- SAMPLES(config, m_samples2);
- m_samples2->set_channels(2);
- m_samples2->set_samples_names(m4_sample_names);
- m_samples2->add_route(ALL_OUTPUTS, "rspeaker", 1);
+ if (BIT(rising, 4)) m_samples[0]->start(0, 0); // LEFT PLAYER SHOT sound (goes to left speaker)
+ if (BIT(rising, 5)) m_samples[1]->start(0, 0); // RIGHT PLAYER SHOT sound (goes to right speaker)
+ if (BIT(rising, 6)) m_samples[0]->start(1, 1); // LEFT PLAYER EXPLOSION sound via 300K res (goes to left speaker)
+ if (BIT(rising, 7)) m_samples[1]->start(1, 1); // RIGHT PLAYER EXPLOSION sound via 300K res (goes to right speaker)
}
-WRITE8_MEMBER(mw8080bw_state::m4_audio_1_w)
+void m4_audio_device::p2_w(u8 data)
{
- uint8_t rising_bits = data & ~m_port_1_last;
+ u8 const rising(data & ~m_p2);
+ m_p2 = data;
- /* D0 and D1 are not connected */
+ if (BIT(rising, 0)) m_samples[0]->start(1, 1); // LEFT PLAYER EXPLOSION sound via 510K res (goes to left speaker)
+ if (BIT(rising, 1)) m_samples[1]->start(1, 1); // RIGHT PLAYER EXPLOSION sound via 510K res (goes to right speaker)
- machine().bookkeeping().coin_counter_w(0, (data >> 2) & 0x01);
-
- machine().sound().system_enable((data >> 3) & 0x01);
+ // if (data & 0x04) enable LEFT TANK MOTOR sound (goes to left speaker)
- /* if (data & 0x10) enable LEFT PLAYER SHOT sound (goes to left speaker) */
- if (rising_bits & 0x10) m_samples1->start(0, 0);
+ // if (data & 0x08) enable RIGHT TANK MOTOR sound (goes to right speaker)
- /* if (data & 0x20) enable RIGHT PLAYER SHOT sound (goes to right speaker) */
- if (rising_bits & 0x20) m_samples2->start(0, 0);
+ // if (data & 0x10) enable sound that is playing while the right plane is flying. Circuit not named on schematics (goes to left speaker)
- /* if (data & 0x40) enable LEFT PLAYER EXPLOSION sound via 300K res (goes to left speaker) */
- if (rising_bits & 0x40) m_samples1->start(1, 1);
+ // if (data & 0x20) enable sound that is playing while the left plane is flying. Circuit not named on schematics (goes to right speaker)
- /* if (data & 0x80) enable RIGHT PLAYER EXPLOSION sound via 300K res (goes to right speaker) */
- if (rising_bits & 0x80) m_samples2->start(1, 1);
-
- m_port_1_last = data;
+ // D6 and D7 are not connected
}
-
-WRITE8_MEMBER(mw8080bw_state::m4_audio_2_w)
+void m4_audio_device::device_add_mconfig(machine_config &config)
{
- uint8_t rising_bits = data & ~m_port_2_last;
+ static char const *const sample_names[] = {
+ "*m4",
+ "1", // missle
+ "2", // explosion
+ nullptr };
- /* if (data & 0x01) enable LEFT PLAYER EXPLOSION sound via 510K res (goes to left speaker) */
- if (rising_bits & 0x01) m_samples1->start(1, 1);
-
- /* if (data & 0x02) enable RIGHT PLAYER EXPLOSION sound via 510K res (goes to right speaker) */
- if (rising_bits & 0x02) m_samples2->start(1, 1);
-
- /* if (data & 0x04) enable LEFT TANK MOTOR sound (goes to left speaker) */
-
- /* if (data & 0x08) enable RIGHT TANK MOTOR sound (goes to right speaker) */
+ SPEAKER(config, "lspeaker").front_left();
+ SPEAKER(config, "rspeaker").front_right();
- /* if (data & 0x10) enable sound that is playing while the right plane is
- flying. Circuit not named on schematics (goes to left speaker) */
+ SAMPLES(config, m_samples[0]);
+ m_samples[0]->set_channels(2);
+ m_samples[0]->set_samples_names(sample_names);
+ m_samples[0]->add_route(ALL_OUTPUTS, "lspeaker", 1.0);
- /* if (data & 0x20) enable sound that is playing while the left plane is
- flying. Circuit not named on schematics (goes to right speaker) */
+ SAMPLES(config, m_samples[1]);
+ m_samples[1]->set_channels(2);
+ m_samples[1]->set_samples_names(sample_names);
+ m_samples[1]->add_route(ALL_OUTPUTS, "rspeaker", 1.0);
+}
- /* D6 and D7 are not connected */
+void m4_audio_device::device_start()
+{
+ m_p1 = 0U;
+ m_p2 = 0U;
- m_port_2_last = data;
+ save_item(NAME(m_p1));
+ save_item(NAME(m_p2));
}
-
/*************************************
*
* Clowns
@@ -1726,44 +1732,43 @@ WRITE8_MEMBER(mw8080bw_state::m4_audio_2_w)
*
*************************************/
-/* nodes - inputs */
+// nodes - inputs
#define CLOWNS_POP_BOTTOM_EN NODE_01
#define CLOWNS_POP_MIDDLE_EN NODE_02
#define CLOWNS_POP_TOP_EN NODE_03
#define CLOWNS_SPRINGBOARD_HIT_EN NODE_04
#define CLOWNS_SPRINGBOARD_MISS_EN NODE_05
-/* nodes - sounds */
+// nodes - sounds
#define CLOWNS_NOISE NODE_06
#define CLOWNS_POP_SND NODE_07
#define CLOWNS_SB_HIT_SND NODE_08
#define CLOWNS_SB_MISS_SND NODE_09
-/* nodes - adjusters */
+// nodes - adjusters
#define CLOWNS_R507_POT NODE_11
-
-static const discrete_op_amp_tvca_info clowns_pop_tvca_info =
+static discrete_op_amp_tvca_info const clowns_pop_tvca_info =
{
- RES_M(2.7), /* r304 */
- RES_K(680), /* r303 */
+ RES_M(2.7), // r304
+ RES_K(680), // r303
0,
- RES_K(680), /* r305 */
- RES_K(1), /* j3 */
+ RES_K(680), // r305
+ RES_K(1), // j3
0,
- RES_K(470), /* r300 */
- RES_K(1), /* j3 */
- RES_K(510), /* r301 */
- RES_K(1), /* j3 */
- RES_K(680), /* r302 */
- CAP_U(.015), /* c300 */
- CAP_U(.1), /* c301 */
- CAP_U(.082), /* c302 */
- 0, /* no c4 */
- 5, /* v1 */
- 5, /* v2 */
- 5, /* v3 */
- 12, /* vP */
+ RES_K(470), // r300
+ RES_K(1), // j3
+ RES_K(510), // r301
+ RES_K(1), // j3
+ RES_K(680), // r302
+ CAP_U(.015), // c300
+ CAP_U(.1), // c301
+ CAP_U(.082), // c302
+ 0, // no c4
+ 5, // v1
+ 5, // v2
+ 5, // v3
+ 12, // vP
DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
DISC_OP_AMP_TRIGGER_FUNCTION_TRG0,
@@ -1772,40 +1777,38 @@ static const discrete_op_amp_tvca_info clowns_pop_tvca_info =
DISC_OP_AMP_TRIGGER_FUNCTION_TRG2
};
-
-static const discrete_op_amp_osc_info clowns_sb_hit_osc_info =
+static discrete_op_amp_osc_info const clowns_sb_hit_osc_info =
{
DISC_OP_AMP_OSCILLATOR_1 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_SQW,
- RES_K(820), /* r200 */
- RES_K(33), /* r203 */
- RES_K(150), /* r201 */
- RES_K(240), /* r204 */
- RES_M(1), /* r202 */
+ RES_K(820), // r200
+ RES_K(33), // r203
+ RES_K(150), // r201
+ RES_K(240), // r204
+ RES_M(1), // r202
0,
0,
0,
- CAP_U(0.01), /* c200 */
+ CAP_U(0.01), // c200
12
};
-
-static const discrete_op_amp_tvca_info clowns_sb_hit_tvca_info =
+static discrete_op_amp_tvca_info const clowns_sb_hit_tvca_info =
{
- RES_M(2.7), /* r207 */
- RES_K(680), /* r205 */
+ RES_M(2.7), // r207
+ RES_K(680), // r205
0,
- RES_K(680), /* r208 */
- RES_K(1), /* j3 */
+ RES_K(680), // r208
+ RES_K(1), // j3
0,
- RES_K(680), /* r206 */
+ RES_K(680), // r206
0,0,0,0,
- CAP_U(1), /* c201 */
+ CAP_U(1), // c201
0,
0, 0,
- 5, /* v1 */
- 0, /* v2 */
- 0, /* v3 */
- 12, /* vP */
+ 5, // v1
+ 0, // v2
+ 0, // v3
+ 12, // vP
DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
DISC_OP_AMP_TRIGGER_FUNCTION_TRG0,
@@ -1814,8 +1817,7 @@ static const discrete_op_amp_tvca_info clowns_sb_hit_tvca_info =
DISC_OP_AMP_TRIGGER_FUNCTION_NONE
};
-
-static const discrete_mixer_desc clowns_mixer =
+static discrete_mixer_desc const clowns_mixer =
{
DISC_MIXER_IS_OP_AMP,
{ RES_K(10),
@@ -1838,7 +1840,6 @@ static const discrete_mixer_desc clowns_mixer =
1
};
-
static DISCRETE_SOUND_START(clowns_discrete)
/************************************************
@@ -1850,9 +1851,9 @@ static DISCRETE_SOUND_START(clowns_discrete)
DISCRETE_INPUT_LOGIC(CLOWNS_SPRINGBOARD_HIT_EN)
DISCRETE_INPUT_LOGIC(CLOWNS_SPRINGBOARD_MISS_EN)
- /* The low value of the pot is set to 7000. A real 1M pot will never go to 0 anyways. */
- /* This will give the control more apparent volume range. */
- /* The music way overpowers the rest of the sounds anyways. */
+ // The low value of the pot is set to 7000. A real 1M pot will never go to 0 anyways.
+ // This will give the control more apparent volume range.
+ // The music way overpowers the rest of the sounds anyways.
DISCRETE_ADJUSTMENT(CLOWNS_R507_POT, RES_M(1), 7000, DISC_LOGADJ, "R507")
/************************************************
@@ -1864,7 +1865,7 @@ static DISCRETE_SOUND_START(clowns_discrete)
* Balloon hit sounds
* The LFSR is the same as boothill
************************************************/
- /* Noise clock was breadboarded and measured at 7700Hz */
+ // Noise clock was breadboarded and measured at 7700Hz
DISCRETE_LFSR_NOISE(CLOWNS_NOISE, 1, 1, 7700, 12.0, 0, 12.0/2, &midway_lfsr)
DISCRETE_OP_AMP_TRIG_VCA(NODE_30, CLOWNS_POP_TOP_EN, CLOWNS_POP_MIDDLE_EN, CLOWNS_POP_BOTTOM_EN, CLOWNS_NOISE, 0, &clowns_pop_tvca_info)
@@ -1877,15 +1878,15 @@ static DISCRETE_SOUND_START(clowns_discrete)
************************************************/
DISCRETE_OP_AMP_OSCILLATOR(NODE_40, 1, &clowns_sb_hit_osc_info)
DISCRETE_OP_AMP_TRIG_VCA(NODE_41, CLOWNS_SPRINGBOARD_HIT_EN, 0, 0, NODE_40, 0, &clowns_sb_hit_tvca_info)
- /* The rest of the circuit is a filter. The frequency response was calculated with SPICE. */
+ // The rest of the circuit is a filter. The frequency response was calculated with SPICE.
DISCRETE_FILTER2(NODE_42, 1, NODE_41, 500, 1.0/.8, DISC_FILTER_LOWPASS)
- /* The filter has a gain of 0.5 */
+ // The filter has a gain of 0.5
DISCRETE_GAIN(CLOWNS_SB_HIT_SND, NODE_42, 0.5)
/************************************************
* Springboard miss - INCOMPLETE
************************************************/
- DISCRETE_CONSTANT(CLOWNS_SB_MISS_SND, 0) /* Placeholder for incomplete sound */
+ DISCRETE_CONSTANT(CLOWNS_SB_MISS_SND, 0) // Placeholder for incomplete sound
/************************************************
* Combine all sound sources.
@@ -1895,61 +1896,83 @@ static DISCRETE_SOUND_START(clowns_discrete)
DISCRETE_OUTPUT(NODE_91, 11000)
DISCRETE_SOUND_END
+static INPUT_PORTS_START(clowns_audio)
+ PORT_START("R507")
+ PORT_ADJUSTER( 40, "R507 - Music Volume" )
+INPUT_PORTS_END
-static const char *const clowns_sample_names[] =
+clowns_audio_device::clowns_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) :
+ midway_tone_generator_device_base(mconfig, CLOWNS_AUDIO, tag, owner, clock),
+ m_samples(*this, "samples"),
+ m_ctrl_sel_out(*this),
+ m_p1(0U),
+ m_p2(0U)
{
- "*clowns",
- "miss",
- nullptr
-};
+}
-void mw8080bw_state::clowns_audio(machine_config &config)
+void clowns_audio_device::p1_w(u8 data)
{
- MCFG_SOUND_START_OVERRIDE(mw8080bw_state, samples)
+ u8 const changed(data ^ m_p1);
+ m_p1 = data;
- SPEAKER(config, "mono").front_center();
+ machine().bookkeeping().coin_counter_w(0, BIT(data, 0));
- SAMPLES(config, m_samples);
- m_samples->set_channels(1);
- m_samples->set_samples_names(clowns_sample_names);
- m_samples->add_route(ALL_OUTPUTS, "mono", 0.70);
+ if (BIT(changed, 1)) m_ctrl_sel_out(BIT(data, 1));
- DISCRETE(config, m_discrete, clowns_discrete);
- m_discrete->add_route(ALL_OUTPUTS, "mono", 0.25);
+ // D2-D7 are not connected
}
-
-WRITE8_MEMBER(mw8080bw_state::clowns_audio_1_w)
+void clowns_audio_device::p2_w(u8 data)
{
- machine().bookkeeping().coin_counter_w(0, (data >> 0) & 0x01);
+ u8 const rising(data & ~m_p2);
+ m_p2 = data;
- m_clowns_controller_select = (data >> 1) & 0x01;
+ m_discrete->write(CLOWNS_POP_BOTTOM_EN, BIT(data, 0));
+ m_discrete->write(CLOWNS_POP_MIDDLE_EN, BIT(data, 1));
+ m_discrete->write(CLOWNS_POP_TOP_EN, BIT(data, 2));
- /* D2-D7 are not connected */
-}
+ machine().sound().system_enable(BIT(data, 3));
+ m_discrete->write(CLOWNS_SPRINGBOARD_HIT_EN, BIT(data, 4));
-WRITE8_MEMBER(mw8080bw_state::clowns_audio_2_w)
-{
- uint8_t rising_bits = data & ~m_port_2_last;
+ if (BIT(rising, 5)) m_samples->start(0, 0); // springboard miss
- m_discrete->write(CLOWNS_POP_BOTTOM_EN, (data >> 0) & 0x01);
+ // D6 and D7 are not connected
+}
- m_discrete->write(CLOWNS_POP_MIDDLE_EN, (data >> 1) & 0x01);
+void clowns_audio_device::device_add_mconfig(machine_config &config)
+{
+ static char const *const sample_names[] = {
+ "*clowns",
+ "miss",
+ nullptr };
- m_discrete->write(CLOWNS_POP_TOP_EN, (data >> 2) & 0x01);
+ SPEAKER(config, "mono").front_center();
- machine().sound().system_enable((data >> 3) & 0x01);
+ SAMPLES(config, m_samples);
+ m_samples->set_channels(1);
+ m_samples->set_samples_names(sample_names);
+ m_samples->add_route(ALL_OUTPUTS, "mono", 0.70);
- m_discrete->write(CLOWNS_SPRINGBOARD_HIT_EN, (data >> 4) & 0x01);
+ DISCRETE(config, m_discrete, clowns_discrete);
+ m_discrete->add_route(ALL_OUTPUTS, "mono", 0.25);
+}
- if (rising_bits & 0x20) m_samples->start(0, 0); /* springboard miss */
+ioport_constructor clowns_audio_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME(clowns_audio);
+}
- /* D6 and D7 are not connected */
+void clowns_audio_device::device_start()
+{
+ m_ctrl_sel_out.resolve_safe();
- m_port_2_last = data;
-}
+ m_p1 = 0U;
+ m_p2 = 0U;
+ save_item(NAME(m_p1));
+ save_item(NAME(m_p2));
+}
/*************************************
@@ -1960,7 +1983,7 @@ WRITE8_MEMBER(mw8080bw_state::clowns_audio_2_w)
*
*************************************/
- /* Discrete Sound Input Nodes */
+// Discrete Sound Input Nodes
#define SPACWALK_TARGET_HIT_BOTTOM_EN NODE_01
#define SPACWALK_TARGET_HIT_MIDDLE_EN NODE_02
#define SPACWALK_TARGET_HIT_TOP_EN NODE_03
@@ -1969,7 +1992,7 @@ WRITE8_MEMBER(mw8080bw_state::clowns_audio_2_w)
#define SPACWALK_SPRINGBOARD_MISS_EN NODE_06
#define SPACWALK_SPACE_SHIP_EN NODE_07
-/* Discrete Sound Output Nodes */
+// Discrete Sound Output Nodes
#define SPACWALK_NOISE NODE_10
#define SPACWALK_TARGET_HIT_SND NODE_11
#define SPACWALK_SPRINGBOARD_HIT1_SND NODE_12
@@ -1977,10 +2000,10 @@ WRITE8_MEMBER(mw8080bw_state::clowns_audio_2_w)
#define SPACWALK_SPRINGBOARD_MISS_SND NODE_14
#define SPACWALK_SPACE_SHIP_SND NODE_15
-/* Adjusters */
+// Adjusters
#define SPACWALK_R507_POT NODE_19
-/* Parts List - Resistors */
+// Parts List - Resistors
#define SPACWALK_R200 RES_K(820)
#define SPACWALK_R201 RES_K(150)
#define SPACWALK_R202 RES_M(1)
@@ -2003,7 +2026,7 @@ WRITE8_MEMBER(mw8080bw_state::clowns_audio_2_w)
#define SPACWALK_R304 RES_M(1)
#define SPACWALK_R305 RES_K(3680)
#define SPACWALK_R307 RES_K(20)
-#define SPACWALK_R308 RES_K(20) /* not labeled but it's beside R307 */
+#define SPACWALK_R308 RES_K(20) // not labeled but it's beside R307
#define SPACWALK_R400 RES_K(1)
#define SPACWALK_R401 RES_K(200)
#define SPACWALK_R403 RES_K(51)
@@ -2025,7 +2048,7 @@ WRITE8_MEMBER(mw8080bw_state::clowns_audio_2_w)
#define SPACWALK_R507 RES_M(1)
#define SPACWALK_RJ3 RES_K(1)
-/* Parts List - Capacitors */
+// Parts List - Capacitors
#define SPACWALK_C200 CAP_U(0.0022)
#define SPACWALK_C201 CAP_U(3.3)
#define SPACWALK_C203 CAP_U(0.0033)
@@ -2034,7 +2057,7 @@ WRITE8_MEMBER(mw8080bw_state::clowns_audio_2_w)
#define SPACWALK_C301 CAP_U(2.2)
#define SPACWALK_C302 CAP_U(2.2)
#define SPACWALK_C303 CAP_U(0.0047)
-#define SPACWALK_C304 CAP_U(0.0047) /* not labeled but it's beside C303 */
+#define SPACWALK_C304 CAP_U(0.0047) // not labeled but it's beside C303
#define SPACWALK_C401 CAP_U(1)
#define SPACWALK_C402 CAP_U(0.68)
#define SPACWALK_C403 CAP_U(0.0022)
@@ -2043,15 +2066,14 @@ WRITE8_MEMBER(mw8080bw_state::clowns_audio_2_w)
#define SPACWALK_C453 CAP_U(0.001)
#define SPACWALK_C602 CAP_U(1)
-
-static const discrete_op_amp_tvca_info spacwalk_hit_tvca_info =
+static discrete_op_amp_tvca_info const spacwalk_hit_tvca_info =
{
- SPACWALK_R304, SPACWALK_R303, 0, SPACWALK_R305, /* r1, r2, r3, r4 */
- SPACWALK_RJ3, 0, SPACWALK_R300, /* r5, r6, r7 */
- SPACWALK_RJ3, SPACWALK_R301, /* r8, r9 */
- SPACWALK_RJ3, SPACWALK_R302, /* r10, r11 */
- SPACWALK_C300, SPACWALK_C301, SPACWALK_C302, 0, /* c1, c2, c3, c4 */
- 5, 5, 5, 12, /* v1, v2, v3, vP */
+ SPACWALK_R304, SPACWALK_R303, 0, SPACWALK_R305, // r1, r2, r3, r4
+ SPACWALK_RJ3, 0, SPACWALK_R300, // r5, r6, r7
+ SPACWALK_RJ3, SPACWALK_R301, // r8, r9
+ SPACWALK_RJ3, SPACWALK_R302, // r10, r11
+ SPACWALK_C300, SPACWALK_C301, SPACWALK_C302, 0, // c1, c2, c3, c4
+ 5, 5, 5, 12, // v1, v2, v3, vP
DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
DISC_OP_AMP_TRIGGER_FUNCTION_TRG0,
@@ -2060,21 +2082,21 @@ static const discrete_op_amp_tvca_info spacwalk_hit_tvca_info =
DISC_OP_AMP_TRIGGER_FUNCTION_TRG2
};
-static const discrete_op_amp_osc_info spacwalk_sb_hit_vco =
+static discrete_op_amp_osc_info const spacwalk_sb_hit_vco =
{
DISC_OP_AMP_OSCILLATOR_VCO_3 | DISC_OP_AMP_IS_NORTON,
- RES_K(330 + 150 + 30), SPACWALK_R203, SPACWALK_R201, SPACWALK_R204, /* r1, r2, r3, r4 */
- SPACWALK_R202, 0, SPACWALK_R200, 0, /* r5, r6, r7, r8*/
- SPACWALK_C200, 12 /* c, vP*/
+ RES_K(330 + 150 + 30), SPACWALK_R203, SPACWALK_R201, SPACWALK_R204, // r1, r2, r3, r4
+ SPACWALK_R202, 0, SPACWALK_R200, 0, // r5, r6, r7, r8
+ SPACWALK_C200, 12 // c, vP
};
-static const discrete_op_amp_tvca_info spacwalk_sb_hit_tvca_info =
+static discrete_op_amp_tvca_info const spacwalk_sb_hit_tvca_info =
{
- SPACWALK_R207, SPACWALK_R205, 0, SPACWALK_R208, /* r1, r2, r3, r4 */
- SPACWALK_RJ3, 0, SPACWALK_R206, /* r5, r6, r7 */
- 0, 0, 0, 0 , /* r8, r9, r10, r11 */
- SPACWALK_C201, 0, 0, 0, /* c1, c2, c3, c4 */
- 5, 0, 0, 12, /* v1, v2, v3, vP */
+ SPACWALK_R207, SPACWALK_R205, 0, SPACWALK_R208, // r1, r2, r3, r4
+ SPACWALK_RJ3, 0, SPACWALK_R206, // r5, r6, r7
+ 0, 0, 0, 0 , // r8, r9, r10, r11
+ SPACWALK_C201, 0, 0, 0, // c1, c2, c3, c4
+ 5, 0, 0, 12, // v1, v2, v3, vP
DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
DISC_OP_AMP_TRIGGER_FUNCTION_TRG0,
@@ -2083,30 +2105,30 @@ static const discrete_op_amp_tvca_info spacwalk_sb_hit_tvca_info =
DISC_OP_AMP_TRIGGER_FUNCTION_NONE
};
-static const discrete_integrate_info spacwalk_sb_miss_integrate =
+static discrete_integrate_info const spacwalk_sb_miss_integrate =
{
DISC_INTEGRATE_OP_AMP_1 | DISC_OP_AMP_IS_NORTON,
- SPACWALK_R406, SPACWALK_R401, 0, SPACWALK_C402, /* r1, r2, r3, c */
- 12, 12, /* v1, vP */
- 0, 0, 0 /* f0, f1, f2 */
+ SPACWALK_R406, SPACWALK_R401, 0, SPACWALK_C402, // r1, r2, r3, c
+ 12, 12, // v1, vP
+ 0, 0, 0 // f0, f1, f2
};
-static const discrete_op_amp_osc_info spacwalk_sb_miss_vco =
+static discrete_op_amp_osc_info const spacwalk_sb_miss_vco =
{
DISC_OP_AMP_OSCILLATOR_VCO_3 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_SQW,
- SPACWALK_R407, SPACWALK_R412, SPACWALK_R410, SPACWALK_R411, SPACWALK_R413, 0, 0, 0, /* r1, r2, r3, r4, r5, r6, r7, r8 */
- SPACWALK_C403, 12 /* c, vP */
+ SPACWALK_R407, SPACWALK_R412, SPACWALK_R410, SPACWALK_R411, SPACWALK_R413, 0, 0, 0, // r1, r2, r3, r4, r5, r6, r7, r8
+ SPACWALK_C403, 12 // c, vP
};
-static const discrete_op_amp_filt_info spacwalk_sb_miss_filter =
+static discrete_op_amp_filt_info const spacwalk_sb_miss_filter =
{
- /* we use r1, not r2 because vref is taken into acount by the CRFILTER */
- SPACWALK_R417, 0, SPACWALK_R414, 0, SPACWALK_R416, /* r1, r2, r3, r4, rF */
- SPACWALK_C451, SPACWALK_C452, 0, /* c1, c2, c3 */
- 0, 12, 0 /* vRef, vP, vN */
+ // we use r1, not r2 because vref is taken into acount by the CRFILTER
+ SPACWALK_R417, 0, SPACWALK_R414, 0, SPACWALK_R416, // r1, r2, r3, r4, rF
+ SPACWALK_C451, SPACWALK_C452, 0, // c1, c2, c3
+ 0, 12, 0 // vRef, vP, vN
};
-static const discrete_op_amp_info spacwalk_sb_miss_amp =
+static discrete_op_amp_info const spacwalk_sb_miss_amp =
{
DISC_OP_AMP_IS_NORTON,
SPACWALK_R418, SPACWALK_R404, 0, SPACWALK_R403, /* r1, r2, r3, r4 */
@@ -2114,59 +2136,59 @@ static const discrete_op_amp_info spacwalk_sb_miss_amp =
0, 12, /* vN, vP */
};
-static const discrete_op_amp_osc_info spacwalk_spaceship_osc =
+static discrete_op_amp_osc_info const spacwalk_spaceship_osc =
{
DISC_OP_AMP_OSCILLATOR_2 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_CAP,
- RES_K(75), RES_M(1), RES_M(6.8), RES_M(2.4), 0, 0, 0, 0, /* r1, r2, r3, r4, r5, r6, r7, r8 */
- CAP_U(2.2), 12 /* c, vP */
+ RES_K(75), RES_M(1), RES_M(6.8), RES_M(2.4), 0, 0, 0, 0, // r1, r2, r3, r4, r5, r6, r7, r8
+ CAP_U(2.2), 12 // c, vP
};
-static const discrete_op_amp_osc_info spacwalk_spaceship_vco =
+static discrete_op_amp_osc_info const spacwalk_spaceship_vco =
{
DISC_OP_AMP_OSCILLATOR_VCO_1 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_CAP,
- RES_K(680), RES_K(300), RES_K(100), RES_K(150), RES_K(120), 0, 0, 0, /* r1, r2, r3, r4, r5, r6, r7, r8 */
- CAP_U(0.0012), 12 /* c, vP */
+ RES_K(680), RES_K(300), RES_K(100), RES_K(150), RES_K(120), 0, 0, 0, // r1, r2, r3, r4, r5, r6, r7, r8
+ CAP_U(0.0012), 12 // c, vP
};
-static const discrete_mixer_desc spacwalk_mixer =
+static discrete_mixer_desc const spacwalk_mixer =
{
DISC_MIXER_IS_RESISTOR,
{SPACWALK_R422, SPACWALK_R422, RES_K(39 + 10 + 1), SPACWALK_R421, SPACWALK_R420, SPACWALK_R419},
- {0, 0, 0, 0, 0, SPACWALK_R507_POT}, /* r_nodes */
- {0}, 0, 0, 0, SPACWALK_C602, 0, 1 /* c, rI, rF, cF, cAmp, vRef, gain */
+ {0, 0, 0, 0, 0, SPACWALK_R507_POT}, // r_nodes
+ {0}, 0, 0, 0, SPACWALK_C602, 0, 1 // c, rI, rF, cF, cAmp, vRef, gain
};
/************************************************
* Springboard Hit Circuit 1 or 2
************************************************/
-#define SPACWALK_SPRINGBOARD_HIT_CIRCUIT(_num) \
-DISCRETE_RCFILTER(NODE_RELATIVE(NODE_29, _num), \
- SPACWALK_NOISE, /* IN0 */ \
- RES_K(330), CAP_U(.1)) \
-DISCRETE_RCFILTER(NODE_RELATIVE(NODE_31, _num), \
- NODE_RELATIVE(NODE_29, _num), /* IN0 */ \
- RES_K(330) + RES_K(150), CAP_U(.1)) \
-DISCRETE_OP_AMP_VCO1(NODE_RELATIVE(NODE_33, _num), /* IC M2-3, pin 5 */ \
- 1, /* ENAB */ \
- NODE_RELATIVE(NODE_31, _num), /* VMOD1 */ \
- &spacwalk_sb_hit_vco) \
-DISCRETE_OP_AMP_TRIG_VCA(NODE_RELATIVE(NODE_35, _num), /* IC M2-3, pin 9 */ \
- NODE_RELATIVE(SPACWALK_SPRINGBOARD_HIT1_EN, _num - 1), 0, 0, /* TRG0, TRG1, TRG2 */ \
- NODE_RELATIVE(NODE_33, _num), 0, /* IN0, IN1 */ \
- &spacwalk_sb_hit_tvca_info) \
-/* Wrong values. Untested */ \
-/* The rest of the circuit is a filter. */ \
-DISCRETE_FILTER2(NODE_RELATIVE(NODE_37, _num), \
- 1, /* ENAB */ \
- NODE_RELATIVE(NODE_35, _num), /* INP0 */ \
- 2000.0 - _num * 500, 1.0/.8, /* FREQ, DAMP */ \
- DISC_FILTER_LOWPASS) \
-/* The filter has a gain of 0.5 */ \
-DISCRETE_GAIN(NODE_RELATIVE(SPACWALK_SPRINGBOARD_HIT1_SND, _num - 1), \
- NODE_RELATIVE(NODE_37, _num), 0.5)
-
- static DISCRETE_SOUND_START(spacwalk_discrete)
+#define SPACWALK_SPRINGBOARD_HIT_CIRCUIT(_num) \
+ DISCRETE_RCFILTER(NODE_RELATIVE(NODE_29, _num), \
+ SPACWALK_NOISE, /* IN0 */ \
+ RES_K(330), CAP_U(.1)) \
+ DISCRETE_RCFILTER(NODE_RELATIVE(NODE_31, _num), \
+ NODE_RELATIVE(NODE_29, _num), /* IN0 */ \
+ RES_K(330) + RES_K(150), CAP_U(.1)) \
+ DISCRETE_OP_AMP_VCO1(NODE_RELATIVE(NODE_33, _num), /* IC M2-3, pin 5 */ \
+ 1, /* ENAB */ \
+ NODE_RELATIVE(NODE_31, _num), /* VMOD1 */ \
+ &spacwalk_sb_hit_vco) \
+ DISCRETE_OP_AMP_TRIG_VCA(NODE_RELATIVE(NODE_35, _num), /* IC M2-3, pin 9 */ \
+ NODE_RELATIVE(SPACWALK_SPRINGBOARD_HIT1_EN, _num - 1), 0, 0, /* TRG0, TRG1, TRG2 */ \
+ NODE_RELATIVE(NODE_33, _num), 0, /* IN0, IN1 */ \
+ &spacwalk_sb_hit_tvca_info) \
+ /* Wrong values. Untested */ \
+ /* The rest of the circuit is a filter. */ \
+ DISCRETE_FILTER2(NODE_RELATIVE(NODE_37, _num), \
+ 1, /* ENAB */ \
+ NODE_RELATIVE(NODE_35, _num), /* INP0 */ \
+ 2000.0 - _num * 500, 1.0/.8, /* FREQ, DAMP */ \
+ DISC_FILTER_LOWPASS) \
+ /* The filter has a gain of 0.5 */ \
+ DISCRETE_GAIN(NODE_RELATIVE(SPACWALK_SPRINGBOARD_HIT1_SND, _num - 1), \
+ NODE_RELATIVE(NODE_37, _num), 0.5)
+
+static DISCRETE_SOUND_START(spacwalk_discrete)
/************************************************
* Input register mapping
@@ -2179,9 +2201,9 @@ DISCRETE_GAIN(NODE_RELATIVE(SPACWALK_SPRINGBOARD_HIT1_SND, _num - 1),
DISCRETE_INPUT_LOGIC(SPACWALK_SPRINGBOARD_MISS_EN)
DISCRETE_INPUT_LOGIC(SPACWALK_SPACE_SHIP_EN)
- /* The low value of the pot is set to 7000. A real 1M pot will never go to 0 anyways. */
- /* This will give the control more apparent volume range. */
- /* The music way overpowers the rest of the sounds anyways. */
+ // The low value of the pot is set to 7000. A real 1M pot will never go to 0 anyways.
+ // This will give the control more apparent volume range.
+ // The music way overpowers the rest of the sounds anyways.
DISCRETE_ADJUSTMENT(SPACWALK_R507_POT, SPACWALK_R507, 7000, DISC_LOGADJ, "R507")
/************************************************
@@ -2193,21 +2215,21 @@ DISCRETE_GAIN(NODE_RELATIVE(SPACWALK_SPRINGBOARD_HIT1_SND, _num - 1),
* Target hit sounds
* The LFSR is the same as boothill
************************************************/
- /* Noise clock was breadboarded and measured at 7700Hz */
- DISCRETE_LFSR_NOISE(SPACWALK_NOISE, /* IC L4, pin 10 */
- 1, 1, /* ENAB, RESET */
- 7700, 12.0, 0, 12.0/2, &midway_lfsr) /* CLK,AMPL,FEED,BIAS,LFSRTB */
-
- DISCRETE_OP_AMP_TRIG_VCA(NODE_20, /* IC K3, pin 9 */
- SPACWALK_TARGET_HIT_TOP_EN, SPACWALK_TARGET_HIT_MIDDLE_EN, SPACWALK_TARGET_HIT_BOTTOM_EN,
- SPACWALK_NOISE, 0, /* IN0, IN1 */
- &spacwalk_hit_tvca_info)
+ // Noise clock was breadboarded and measured at 7700Hz
+ DISCRETE_LFSR_NOISE(SPACWALK_NOISE, // IC L4, pin 10
+ 1, 1, // ENAB, RESET
+ 7700, 12.0, 0, 12.0/2, &midway_lfsr) // CLK,AMPL,FEED,BIAS,LFSRTB
+
+ DISCRETE_OP_AMP_TRIG_VCA(NODE_20, // IC K3, pin 9
+ SPACWALK_TARGET_HIT_TOP_EN, SPACWALK_TARGET_HIT_MIDDLE_EN, SPACWALK_TARGET_HIT_BOTTOM_EN,
+ SPACWALK_NOISE, 0, // IN0, IN1
+ &spacwalk_hit_tvca_info)
DISCRETE_RCFILTER(NODE_21,
- NODE_20, /* IN0 */
- SPACWALK_R307, SPACWALK_C303)
+ NODE_20, // IN0
+ SPACWALK_R307, SPACWALK_C303)
DISCRETE_RCFILTER(SPACWALK_TARGET_HIT_SND,
- NODE_21, /* IN0 */
- SPACWALK_R307 + SPACWALK_R308, SPACWALK_C304)
+ NODE_21, // IN0
+ SPACWALK_R307 + SPACWALK_R308, SPACWALK_C304)
/************************************************
* Springboard hit sounds
@@ -2219,330 +2241,122 @@ DISCRETE_GAIN(NODE_RELATIVE(SPACWALK_SPRINGBOARD_HIT1_SND, _num - 1),
/************************************************
* Springboard miss sound
************************************************/
- DISCRETE_RCDISC2(NODE_50, /* voltage on C401 */
- SPACWALK_SPRINGBOARD_MISS_EN, /* SWITCH */
- OP_AMP_NORTON_VBE, RES_2_PARALLEL(SPACWALK_R401, SPACWALK_R407), /* INP0,RVAL0 */
- 12.0 - .5, SPACWALK_R400, /* INP1,RVAL1 */
- SPACWALK_C401)
- DISCRETE_INTEGRATE(NODE_51, /* IC K4, pin 9 */
- NODE_50, 0, /* TRG0,TRG1*/
- &spacwalk_sb_miss_integrate)
- DISCRETE_OP_AMP_VCO1(NODE_52, /* IC K4, pin 5 */
- 1, /* ENAB */
- NODE_50, /* VMOD1 */
- &spacwalk_sb_miss_vco)
+ DISCRETE_RCDISC2(NODE_50, // voltage on C401
+ SPACWALK_SPRINGBOARD_MISS_EN, // SWITCH
+ OP_AMP_NORTON_VBE, RES_2_PARALLEL(SPACWALK_R401, SPACWALK_R407), // INP0,RVAL0
+ 12.0 - .5, SPACWALK_R400, // INP1,RVAL1
+ SPACWALK_C401)
+ DISCRETE_INTEGRATE(NODE_51, // IC K4, pin 9
+ NODE_50, 0, // TRG0,TRG1
+ &spacwalk_sb_miss_integrate)
+ DISCRETE_OP_AMP_VCO1(NODE_52, // IC K4, pin 5
+ 1, // ENAB
+ NODE_50, // VMOD1
+ &spacwalk_sb_miss_vco)
DISCRETE_CRFILTER(NODE_53,
- NODE_52, /* IN0 */
- SPACWALK_R417, SPACWALK_C453)
- /* this filter type probably does not work right. I need to test it. */
- DISCRETE_OP_AMP_FILTER(NODE_54, /* IC K3, pin 5 */
- 1, /* ENAB */
- NODE_53, 0, /* INP0,INP1 */
- DISC_OP_AMP_FILTER_IS_BAND_PASS_1M | DISC_OP_AMP_IS_NORTON, &spacwalk_sb_miss_filter)
- DISCRETE_OP_AMP(SPACWALK_SPRINGBOARD_MISS_SND, /* IC K4, pin 10 */
- 1, /* ENAB */
- NODE_54, NODE_51, /* IN0,IN1 */
- &spacwalk_sb_miss_amp)
+ NODE_52, // IN0
+ SPACWALK_R417, SPACWALK_C453)
+ // this filter type probably does not work right. I need to test it.
+ DISCRETE_OP_AMP_FILTER(NODE_54, // IC K3, pin 5
+ 1, // ENAB
+ NODE_53, 0, // INP0,INP1
+ DISC_OP_AMP_FILTER_IS_BAND_PASS_1M | DISC_OP_AMP_IS_NORTON, &spacwalk_sb_miss_filter)
+ DISCRETE_OP_AMP(SPACWALK_SPRINGBOARD_MISS_SND, // IC K4, pin 10
+ 1, // ENAB
+ NODE_54, NODE_51, // IN0,IN1
+ &spacwalk_sb_miss_amp)
/************************************************
* Space ship sound
************************************************/
- DISCRETE_OP_AMP_OSCILLATOR(NODE_60, /* voltage on 2.2uF cap near IC JK-2 */
- 1, /* ENAB */
- &spacwalk_spaceship_osc)
- DISCRETE_OP_AMP_VCO1(NODE_61, /* IC JK-2, pin 5 */
- SPACWALK_SPACE_SHIP_EN, /* ENAB */
- NODE_60, /* VMOD1*/
- &spacwalk_spaceship_vco)
+ DISCRETE_OP_AMP_OSCILLATOR(NODE_60, // voltage on 2.2uF cap near IC JK-2
+ 1, // ENAB
+ &spacwalk_spaceship_osc)
+ DISCRETE_OP_AMP_VCO1(NODE_61, // IC JK-2, pin 5
+ SPACWALK_SPACE_SHIP_EN, // ENAB
+ NODE_60, // VMOD1
+ &spacwalk_spaceship_vco)
DISCRETE_RCFILTER(NODE_62,
- NODE_61, /* IN0 */
- RES_K(1), CAP_U(0.15))
+ NODE_61, // IN0
+ RES_K(1), CAP_U(0.15))
DISCRETE_RCFILTER(SPACWALK_SPACE_SHIP_SND,
- NODE_62, /* IN0 */
- RES_K(1) + RES_K(10), CAP_U(0.015))
+ NODE_62, // IN0
+ RES_K(1) + RES_K(10), CAP_U(0.015))
/************************************************
* Combine all sound sources.
************************************************/
DISCRETE_MIXER6(NODE_90,
- 1, /* ENAB */
- SPACWALK_SPRINGBOARD_HIT1_SND,
- SPACWALK_SPRINGBOARD_HIT2_SND,
- SPACWALK_SPACE_SHIP_SND,
- SPACWALK_SPRINGBOARD_MISS_SND,
- SPACWALK_TARGET_HIT_SND,
- MIDWAY_TONE_SND,
- &spacwalk_mixer)
+ 1, // ENAB
+ SPACWALK_SPRINGBOARD_HIT1_SND,
+ SPACWALK_SPRINGBOARD_HIT2_SND,
+ SPACWALK_SPACE_SHIP_SND,
+ SPACWALK_SPRINGBOARD_MISS_SND,
+ SPACWALK_TARGET_HIT_SND,
+ MIDWAY_TONE_SND,
+ &spacwalk_mixer)
DISCRETE_OUTPUT(NODE_90, 11000)
DISCRETE_SOUND_END
-void mw8080bw_state::spacwalk_audio(machine_config &config)
-{
- SPEAKER(config, "mono").front_center();
+static INPUT_PORTS_START(spacwalk_audio)
+ PORT_START("R507")
+ PORT_ADJUSTER( 40, "R507 - Music Volume" )
+INPUT_PORTS_END
- DISCRETE(config, m_discrete, spacwalk_discrete);
- m_discrete->add_route(ALL_OUTPUTS, "mono", 1.0);
+spacwalk_audio_device::spacwalk_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) :
+ midway_tone_generator_device_base(mconfig, SPACWALK_AUDIO, tag, owner, clock),
+ m_ctrl_sel_out(*this),
+ m_p1(0U)
+{
}
-WRITE8_MEMBER(mw8080bw_state::spacwalk_audio_1_w)
+void spacwalk_audio_device::p1_w(u8 data)
{
- machine().bookkeeping().coin_counter_w(0, (data >> 0) & 0x01);
+ u8 const changed(data ^ m_p1);
+ m_p1 = data;
- m_clowns_controller_select = (data >> 1) & 0x01;
+ machine().bookkeeping().coin_counter_w(0, BIT(data, 0));
- machine().sound().system_enable((data >> 2) & 0x01);
+ if (BIT(changed, 1)) m_ctrl_sel_out(BIT(data, 1));
+
+ machine().sound().system_enable(BIT(data, 2));
m_discrete->write(SPACWALK_SPACE_SHIP_EN, (data >> 3) & 0x01);
}
-WRITE8_MEMBER(mw8080bw_state::spacwalk_audio_2_w)
+void spacwalk_audio_device::p2_w(u8 data)
{
m_discrete->write(SPACWALK_TARGET_HIT_BOTTOM_EN, (data >> 0) & 0x01);
-
m_discrete->write(SPACWALK_TARGET_HIT_MIDDLE_EN, (data >> 1) & 0x01);
-
m_discrete->write(SPACWALK_TARGET_HIT_TOP_EN, (data >> 2) & 0x01);
-
m_discrete->write(SPACWALK_SPRINGBOARD_HIT1_EN, (data >> 3) & 0x01);
-
m_discrete->write(SPACWALK_SPRINGBOARD_HIT2_EN, (data >> 4) & 0x01);
-
m_discrete->write(SPACWALK_SPRINGBOARD_MISS_EN, (data >> 5) & 0x01);
}
-
-
-/*************************************
- *
- * Shuffleboard
- *
- * Discrete sound emulation: Oct 2009, D.R.
- *
- *************************************/
-
- /* Discrete Sound Input Nodes */
-#define SHUFFLE_ROLLING_1_EN NODE_01
-#define SHUFFLE_ROLLING_2_EN NODE_02
-#define SHUFFLE_ROLLING_3_EN NODE_03
-#define SHUFFLE_FOUL_EN NODE_04
-#define SHUFFLE_ROLLOVER_EN NODE_05
-#define SHUFFLE_CLICK_EN NODE_06
-
-/* Discrete Sound Output Nodes */
-#define SHUFFLE_NOISE NODE_10
-#define SHUFFLE_ROLLING_SND NODE_11
-#define SHUFFLE_FOUL_SND NODE_12
-#define SHUFFLE_ROLLOVER_SND NODE_13
-#define SHUFFLE_CLICK_SND NODE_14
-
-/* Parts List - Resistors */
-#define SHUFFLE_R300 RES_K(33)
-#define SHUFFLE_R400 RES_K(200)
-#define SHUFFLE_R401 RES_K(3)
-#define SHUFFLE_R402 RES_K(5.6)
-#define SHUFFLE_R403 RES_K(5.6)
-#define SHUFFLE_R404 RES_M(1)
-#define SHUFFLE_R406 RES_K(300)
-#define SHUFFLE_R407 RES_K(680)
-#define SHUFFLE_R408 RES_K(680)
-#define SHUFFLE_R409 RES_K(680)
-#define SHUFFLE_R410 RES_K(680)
-#define SHUFFLE_R411 RES_K(680)
-#define SHUFFLE_R412 RES_M(2.7)
-#define SHUFFLE_R500 RES_K(300)
-#define SHUFFLE_R503 RES_M(2.7)
-#define SHUFFLE_R504 RES_K(680)
-#define SHUFFLE_R505 RES_K(680)
-#define SHUFFLE_R506 RES_K(100)
-#define SHUFFLE_R507 RES_K(47)
-#define SHUFFLE_R508 RES_K(47)
-#define SHUFFLE_R509 RES_K(100)
-#define SHUFFLE_R511 RES_M(2)
-#define SHUFFLE_R512 RES_M(5.6)
-#define SHUFFLE_R513 RES_K(680)
-#define SHUFFLE_R514 RES_M(1.5)
-#define SHUFFLE_R515 RES_M(1)
-#define SHUFFLE_R516 RES_K(510)
-
-/* Parts List - Capacitors */
-#define SHUFFLE_C300 CAP_U(0.1)
-#define SHUFFLE_C400 CAP_U(0.1)
-#define SHUFFLE_C401 CAP_U(1)
-#define SHUFFLE_C402 CAP_U(1)
-#define SHUFFLE_C403 CAP_U(1)
-#define SHUFFLE_C404 CAP_U(0.1)
-#define SHUFFLE_C405 CAP_U(0.1)
-#define SHUFFLE_C500 CAP_U(0.1)
-#define SHUFFLE_C503 CAP_U(0.0022)
-#define SHUFFLE_C504 CAP_U(0.0022)
-#define SHUFFLE_C505 CAP_U(0.33)
-#define SHUFFLE_C506 CAP_U(1)
-#define SHUFFLE_C507 CAP_U(1)
-#define SHUFFLE_C508 CAP_U(1)
-
-
-static const discrete_op_amp_tvca_info shuffle_rolling_tvca =
-{
- SHUFFLE_R512, 0, 0, SHUFFLE_R511, /* r1, r2, r3, r4 */
- RES_K(10), 0, SHUFFLE_R516, /* r5, r6, r7 */
- RES_K(10), SHUFFLE_R515, /* r8, r9 */
- RES_K(10), SHUFFLE_R514, /* r10, r11 */
- SHUFFLE_C508, SHUFFLE_C507, SHUFFLE_C506, SHUFFLE_C505, /* c1, c2, c3, c4 */
- 12, 12, 12, 12, /* v1, v2, v3, vP */
- 0, 0, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, 0, /* f0, f1, f2, f3 */
- DISC_OP_AMP_TRIGGER_FUNCTION_TRG1, /* f4 */
- DISC_OP_AMP_TRIGGER_FUNCTION_TRG2 /* f5 */
-};
-
-static const discrete_op_amp_info shuffle_rolling_amp =
-{
- DISC_OP_AMP_IS_NORTON,
- SHUFFLE_R513, SHUFFLE_R505, SHUFFLE_R503, SHUFFLE_R504, /* r1, r2, r3, r4 */
- 0, /* c */
- 0, 12, /* vN, vP */
-};
-
-static const discrete_op_amp_tvca_info shuffle_foul_tvca =
-{
- SHUFFLE_R412, SHUFFLE_R411, 0, SHUFFLE_R408, /* r1, r2, r3, r4 */
- RES_K(1), 0, SHUFFLE_R406, /* r5, r6, r7 */
- 0, 0, 0, 0, /* r8, r9, r10, r11 */
- SHUFFLE_C404, 0, 0, 0, /* c1, c2, c3, c4 */
- 5, 0, 0, 12, /* v1, v2, v3, vP */
- 0, 0, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, 0, 0, 0 /* f0, f1, f2, f3, f4, f5 */
-};
-
-static const discrete_op_amp_tvca_info shuffle_rollover_tvca =
-{
- SHUFFLE_R404, SHUFFLE_R410, 0, SHUFFLE_R407, /* r1, r2, r3, r4 */
- RES_K(10), 0, SHUFFLE_R409, /* r5, r6, r7 */
- 0, 0, 0, 0, /* r8, r9, r10, r11 */
- SHUFFLE_C405, 0, 0, 0, /* c1, c2, c3, c4 */
- 12, 0, 0, 12, /* v1, v2, v3, vP */
- 0, 0, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, 0, 0, 0 /* f0, f1, f2, f3, f4, f5 */
-};
-
-static const discrete_mixer_desc shuffle_mixer =
-{
- DISC_MIXER_IS_RESISTOR,
- {SHUFFLE_R500, SHUFFLE_R400, SHUFFLE_R403 + SHUFFLE_R402 + SHUFFLE_R401, SHUFFLE_R300},
- {0}, /* r_nodes */
- {SHUFFLE_C500, SHUFFLE_C400, SHUFFLE_C401, SHUFFLE_C300},
- 0, 0, 0, 0, 0 ,1 /* rI, rF, cF, cAmp, vRef, gain */
-};
-
-
-static DISCRETE_SOUND_START(shuffle_discrete)
- DISCRETE_INPUT_LOGIC(SHUFFLE_ROLLING_1_EN)
- DISCRETE_INPUT_LOGIC(SHUFFLE_ROLLING_2_EN)
- DISCRETE_INPUT_LOGIC(SHUFFLE_ROLLING_3_EN)
- DISCRETE_INPUT_LOGIC(SHUFFLE_FOUL_EN)
- DISCRETE_INPUT_LOGIC(SHUFFLE_ROLLOVER_EN)
- DISCRETE_INPUTX_LOGIC(SHUFFLE_CLICK_EN, 11.5, 0, 0)
-
- /* Noise clock was breadboarded and measured at 1210Hz */
- DISCRETE_LFSR_NOISE(SHUFFLE_NOISE, /* IC N5, pin 10 */
- 1, 1, /* ENAB, RESET */
- 1210, 12.0, 0, 12.0 / 2, &midway_lfsr) /* CLK,AMPL,FEED,BIAS,LFSRTB */
-
- /************************************************
- * Shuffle rolling
- ************************************************/
- DISCRETE_OP_AMP_TRIG_VCA(NODE_20, /* IC P3-4, pin 5 */
- SHUFFLE_ROLLING_1_EN, SHUFFLE_ROLLING_2_EN, SHUFFLE_ROLLING_3_EN, /* TRG0,TRG1,TRG2 */
- 0, 0, /*IN0,IN1 */
- &shuffle_rolling_tvca)
- DISCRETE_OP_AMP(NODE_21, /* IC P3-4, pin 4 */
- 1, /* ENAB */
- SHUFFLE_NOISE, NODE_20, /* IN0,IN1 */
- &shuffle_rolling_amp)
- /* filter not accurate */
- DISCRETE_FILTER1(NODE_22, 1, NODE_21, 800, DISC_FILTER_LOWPASS)
- DISCRETE_GAIN(SHUFFLE_ROLLING_SND, NODE_22, .2)
-
- /************************************************
- * Foul
- ************************************************/
- DISCRETE_SQUAREWFIX(NODE_30, /* Connected to edge connector V - 120Hz */
- 1, 120, DEFAULT_TTL_V_LOGIC_1, 50, DEFAULT_TTL_V_LOGIC_1 / 2, 0) /* ENAB,FREQ,AMP,DUTY,BIAS,PHASE */
- DISCRETE_OP_AMP_TRIG_VCA(SHUFFLE_FOUL_SND, /* IC M3-4, pin 5 */
- SHUFFLE_FOUL_EN, 0, 0, /* TRG0,TRG1,TRG2 */
- NODE_30, 0, /*IN0,IN1 */
- &shuffle_foul_tvca)
-
- /************************************************
- * Shuffle rollover
- ************************************************/
- DISCRETE_OP_AMP_TRIG_VCA(NODE_40, /* IC M3-4, pin 4 */
- SHUFFLE_ROLLOVER_EN, 0, 0, /* TRG0,TRG1,TRG2 */
- SHUFFLE_NOISE, 0, /*IN0,IN1 */
- &shuffle_rollover_tvca)
- DISCRETE_RCFILTER(NODE_41,
- NODE_40, /* IN0 */
- SHUFFLE_R403, SHUFFLE_C403)
- DISCRETE_RCFILTER(SHUFFLE_ROLLOVER_SND,
- NODE_41, /* IN0 */
- SHUFFLE_R403 + SHUFFLE_R402, SHUFFLE_C402)
-
- /************************************************
- * Click
- ************************************************/
- /* filter not accurate */
- DISCRETE_FILTER1(NODE_50, 1, SHUFFLE_CLICK_EN, 300, DISC_FILTER_LOWPASS)
- DISCRETE_GAIN(SHUFFLE_CLICK_SND, NODE_50, .3)
-
- /************************************************
- * Combine all sound sources.
- ************************************************/
- DISCRETE_MIXER4(NODE_90,
- 1, /* ENAB */
- SHUFFLE_ROLLING_SND,
- SHUFFLE_FOUL_SND,
- SHUFFLE_ROLLOVER_SND,
- SHUFFLE_CLICK_SND,
- &shuffle_mixer)
- DISCRETE_OUTPUT(NODE_90, 59200)
-DISCRETE_SOUND_END
-
-
-void mw8080bw_state::shuffle_audio(machine_config &config)
+void spacwalk_audio_device::device_add_mconfig(machine_config &config)
{
SPEAKER(config, "mono").front_center();
- DISCRETE(config, m_discrete, shuffle_discrete);
+ DISCRETE(config, m_discrete, spacwalk_discrete);
m_discrete->add_route(ALL_OUTPUTS, "mono", 1.0);
}
-
-WRITE8_MEMBER(mw8080bw_state::shuffle_audio_1_w)
+ioport_constructor spacwalk_audio_device::device_input_ports() const
{
- m_discrete->write(SHUFFLE_CLICK_EN, (data >> 0) & 0x01);
-
- m_discrete->write(SHUFFLE_ROLLOVER_EN, (data >> 1) & 0x01);
-
- machine().sound().system_enable((data >> 2) & 0x01);
-
- m_discrete->write(NODE_29, (data >> 3) & 0x07);
-
- m_discrete->write(SHUFFLE_ROLLING_3_EN, (data >> 3) & 0x01);
- m_discrete->write(SHUFFLE_ROLLING_2_EN, (data >> 4) & 0x01);
- m_discrete->write(SHUFFLE_ROLLING_1_EN, (data >> 5) & 0x01);
-
- /* D6 and D7 are not connected */
+ return INPUT_PORTS_NAME(spacwalk_audio);
}
-
-WRITE8_MEMBER(mw8080bw_state::shuffle_audio_2_w)
+void spacwalk_audio_device::device_start()
{
- m_discrete->write(SHUFFLE_FOUL_EN, (data >> 0) & 0x01);
+ m_ctrl_sel_out.resolve();
- machine().bookkeeping().coin_counter_w(0, (data >> 1) & 0x01);
+ m_p1 = 0U;
- /* D2-D7 are not connected */
+ save_item(NAME(m_p1));
}
-
/*************************************
*
* Dog Patch
@@ -2552,14 +2366,14 @@ WRITE8_MEMBER(mw8080bw_state::shuffle_audio_2_w)
*
*************************************/
-/* nodes - inputs */
+// nodes - inputs
#define DOGPATCH_GAME_ON_EN NODE_01
#define DOGPATCH_LEFT_SHOT_EN NODE_02
#define DOGPATCH_RIGHT_SHOT_EN NODE_03
#define DOGPATCH_HIT_EN NODE_04
#define DOGPATCH_PAN_DATA NODE_05
-/* nodes - sounds */
+// nodes - sounds
#define DOGPATCH_NOISE NODE_06
#define DOGPATCH_L_SHOT_SND NODE_07
#define DOGPATCH_R_SHOT_SND NODE_08
@@ -2567,8 +2381,7 @@ WRITE8_MEMBER(mw8080bw_state::shuffle_audio_2_w)
#define DOGPATCH_L_HIT_SND NODE_10
#define DOGPATCH_R_HIT_SND NODE_11
-
-static const discrete_op_amp_tvca_info dogpatch_shot_tvca_info =
+static discrete_op_amp_tvca_info const dogpatch_shot_tvca_info =
{
RES_M(2.7),
RES_K(510),
@@ -2596,8 +2409,7 @@ static const discrete_op_amp_tvca_info dogpatch_shot_tvca_info =
DISC_OP_AMP_TRIGGER_FUNCTION_NONE
};
-
-static const discrete_mixer_desc dogpatch_l_mixer =
+static discrete_mixer_desc const dogpatch_l_mixer =
{
DISC_MIXER_IS_OP_AMP,
{ RES_K(12) + RES_K(68) + RES_K(33),
@@ -2609,11 +2421,10 @@ static const discrete_mixer_desc dogpatch_l_mixer =
0,
CAP_U(0.1),
0,
- 1 /* final gain */
+ 1 // final gain
};
-
-static const discrete_mixer_desc dogpatch_r_mixer =
+static discrete_mixer_desc const dogpatch_r_mixer =
{
DISC_MIXER_IS_OP_AMP,
{ RES_K(12) + RES_K(68) + RES_K(33),
@@ -2626,10 +2437,9 @@ static const discrete_mixer_desc dogpatch_r_mixer =
0,
CAP_U(0.1),
0,
- 1 /* final gain */
+ 1 // final gain
};
-
static DISCRETE_SOUND_START(dogpatch_discrete)
/************************************************
* Input register mapping
@@ -2644,7 +2454,7 @@ static DISCRETE_SOUND_START(dogpatch_discrete)
************************************************/
MIDWAY_TONE_GENERATOR(midway_music_tvca_info)
- /* Noise clock was breadboarded and measured at 7700Hz */
+ // Noise clock was breadboarded and measured at 7700Hz
DISCRETE_LFSR_NOISE(DOGPATCH_NOISE, 1, 1, 7700, 12.0, 0, 12.0/2, &midway_lfsr)
/************************************************
@@ -2675,42 +2485,48 @@ static DISCRETE_SOUND_START(dogpatch_discrete)
DISCRETE_MIXER2(NODE_91, DOGPATCH_GAME_ON_EN, DOGPATCH_L_SHOT_SND, DOGPATCH_L_HIT_SND, &dogpatch_l_mixer)
- /* Music is only added to the right channel per schematics */
- /* This should be verified on the real game */
+ // Music is only added to the right channel per schematics
+ // This should be verified on the real game
DISCRETE_MIXER3(NODE_92, DOGPATCH_GAME_ON_EN, DOGPATCH_R_SHOT_SND, DOGPATCH_R_HIT_SND, MIDWAY_TONE_SND, &dogpatch_r_mixer)
DISCRETE_OUTPUT(NODE_91, 32760.0 / 5.8)
DISCRETE_OUTPUT(NODE_92, 32760.0 / 5.8)
-
DISCRETE_SOUND_END
-
-void mw8080bw_state::dogpatch_audio(machine_config &config)
+dogpatch_audio_device::dogpatch_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) :
+ midway_tone_generator_device_base(mconfig, DOGPATCH_AUDIO, tag, owner, clock)
{
- SPEAKER(config, "lspeaker").front_left();
- SPEAKER(config, "rspeaker").front_right();
- DISCRETE(config, m_discrete, dogpatch_discrete);
- m_discrete->add_route(0, "lspeaker", 1.0);
- m_discrete->add_route(1, "rspeaker", 1.0);
}
-
-WRITE8_MEMBER(mw8080bw_state::dogpatch_audio_w)
+void dogpatch_audio_device::write(u8 data)
{
- /* D0, D1 and D7 are not used */
+ // D0, D1 and D7 are not used
- machine().bookkeeping().coin_counter_w(0, (data >> 2) & 0x01);
+ machine().bookkeeping().coin_counter_w(0, BIT(data, 2));
- machine().sound().system_enable((data >> 3) & 0x01);
- m_discrete->write(DOGPATCH_GAME_ON_EN, (data >> 3) & 0x01);
+ machine().sound().system_enable(BIT(data, 3));
+ m_discrete->write(DOGPATCH_GAME_ON_EN, BIT(data, 3));
- m_discrete->write(DOGPATCH_LEFT_SHOT_EN, (data >> 4) & 0x01);
+ m_discrete->write(DOGPATCH_LEFT_SHOT_EN, BIT(data, 4));
- m_discrete->write(DOGPATCH_RIGHT_SHOT_EN, (data >> 5) & 0x01);
+ m_discrete->write(DOGPATCH_RIGHT_SHOT_EN, BIT(data, 5));
- m_discrete->write(DOGPATCH_HIT_EN, (data >> 6) & 0x01);
+ m_discrete->write(DOGPATCH_HIT_EN, BIT(data, 6));
}
+void dogpatch_audio_device::device_add_mconfig(machine_config &config)
+{
+ SPEAKER(config, "lspeaker").front_left();
+ SPEAKER(config, "rspeaker").front_right();
+
+ DISCRETE(config, m_discrete, dogpatch_discrete);
+ m_discrete->add_route(0, "lspeaker", 1.0);
+ m_discrete->add_route(1, "rspeaker", 1.0);
+}
+
+void dogpatch_audio_device::device_start()
+{
+}
/*************************************
@@ -2721,7 +2537,7 @@ WRITE8_MEMBER(mw8080bw_state::dogpatch_audio_w)
* Apr 2007, D.R.
*************************************/
-/* nodes - inputs */
+// nodes - inputs
#define SPCENCTR_ENEMY_SHIP_SHOT_EN NODE_01
#define SPCENCTR_PLAYER_SHOT_EN NODE_02
#define SPCENCTR_SCREECH_EN NODE_03
@@ -2730,7 +2546,7 @@ WRITE8_MEMBER(mw8080bw_state::dogpatch_audio_w)
#define SPCENCTR_BONUS_EN NODE_06
#define SPCENCTR_WIND_DATA NODE_07
-/* nodes - sounds */
+// nodes - sounds
#define SPCENCTR_NOISE NODE_10
#define SPCENCTR_ENEMY_SHIP_SHOT_SND NODE_11
#define SPCENCTR_PLAYER_SHOT_SND NODE_12
@@ -2740,244 +2556,231 @@ WRITE8_MEMBER(mw8080bw_state::dogpatch_audio_w)
#define SPCENCTR_BONUS_SND NODE_16
#define SPCENCTR_WIND_SND NODE_17
-
-static const discrete_op_amp_info spcenctr_enemy_ship_shot_op_amp_E1 =
+static discrete_op_amp_info const spcenctr_enemy_ship_shot_op_amp_E1 =
{
DISC_OP_AMP_IS_NORTON,
- 0, /* no r1 */
- RES_K(510), /* R100 */
- RES_M(2.2), /* R101 */
- RES_M(2.2), /* R102 */
- CAP_U(0.1), /* C100 */
- 0, /* vN */
- 12 /* vP */
+ 0, // no r1
+ RES_K(510), // R100
+ RES_M(2.2), // R101
+ RES_M(2.2), // R102
+ CAP_U(0.1), // C100
+ 0, // vN
+ 12 // vP
};
-
-static const discrete_op_amp_osc_info spcenctr_enemy_ship_shot_op_amp_osc =
+static discrete_op_amp_osc_info const spcenctr_enemy_ship_shot_op_amp_osc =
{
DISC_OP_AMP_OSCILLATOR_VCO_3 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_SQW,
- RES_K(560), /* R103 */
- RES_K(7.5), /* R118 */
- RES_K(22), /* R104 */
- RES_K(47), /* R106 */
- RES_K(100), /* R105 */
- 0, /* no r6 */
- 0, /* no r7 */
- 0, /* no r8 */
- CAP_U(0.0022), /* C101 */
- 12, /* vP */
+ RES_K(560), // R103
+ RES_K(7.5), // R118
+ RES_K(22), // R104
+ RES_K(47), // R106
+ RES_K(100), // R105
+ 0, // no r6
+ 0, // no r7
+ 0, // no r8
+ CAP_U(0.0022), // C101
+ 12, // vP
};
-static const discrete_op_amp_info spcenctr_enemy_ship_shot_op_amp_D1 =
+static discrete_op_amp_info const spcenctr_enemy_ship_shot_op_amp_D1 =
{
DISC_OP_AMP_IS_NORTON,
- RES_K(100), /* R107 */
- RES_K(100), /* R109 */
- RES_M(2.7), /* R108 */
- RES_K(100), /* R110 */
- 0, /* no c */
- 0, /* vN */
- 12 /* vP */
+ RES_K(100), // R107
+ RES_K(100), // R109
+ RES_M(2.7), // R108
+ RES_K(100), // R110
+ 0, // no c
+ 0, // vN
+ 12 // vP
};
-
-static const discrete_op_amp_filt_info spcenctr_enemy_ship_shot_filt =
-{
- RES_K(100), /* R112 */
- RES_K(10), /* R113 */
- RES_M(4.3), /* r3 */
- 0, /* no r4 */
- RES_M(2.2), /* R114 */
- CAP_U(0.001), /* c1 */
- CAP_U(0.001), /* c2 */
- 0, /* no c3 */
- 0, /* vRef */
- 12, /* vP */
- 0 /* vN */
+static discrete_op_amp_filt_info const spcenctr_enemy_ship_shot_filt =
+{
+ RES_K(100), // R112
+ RES_K(10), // R113
+ RES_M(4.3), // r3
+ 0, // no r4
+ RES_M(2.2), // R114
+ CAP_U(0.001), // c1
+ CAP_U(0.001), // c2
+ 0, // no c3
+ 0, // vRef
+ 12, // vP
+ 0 // vN
};
-
-static const discrete_op_amp_1sht_info spcenctr_player_shot_1sht =
+static discrete_op_amp_1sht_info const spcenctr_player_shot_1sht =
{
DISC_OP_AMP_1SHT_1 | DISC_OP_AMP_IS_NORTON,
- RES_M(4.7), /* R500 */
- RES_K(100), /* R502 */
- RES_M(1), /* R501 */
- RES_M(1), /* R503 */
- RES_M(2.2), /* R504 */
- CAP_U(1), /* C500 */
- CAP_P(470), /* C501 */
- 0, /* vN */
- 12 /* vP */
+ RES_M(4.7), // R500
+ RES_K(100), // R502
+ RES_M(1), // R501
+ RES_M(1), // R503
+ RES_M(2.2), // R504
+ CAP_U(1), // C500
+ CAP_P(470), // C501
+ 0, // vN
+ 12 // vP
};
-
-static const discrete_op_amp_info spcenctr_player_shot_op_amp_E1 =
+static discrete_op_amp_info const spcenctr_player_shot_op_amp_E1 =
{
DISC_OP_AMP_IS_NORTON,
- 0, /* no r1 */
- RES_K(10), /* R505 */
- RES_M(1.5), /* R506 */
- 0, /* no r4 */
- CAP_U(0.22), /* C502 */
- 0, /* vN */
- 12 /* vP */
+ 0, // no r1
+ RES_K(10), // R505
+ RES_M(1.5), // R506
+ 0, // no r4
+ CAP_U(0.22), // C502
+ 0, // vN
+ 12 // vP
};
-
-static const discrete_op_amp_osc_info spcenctr_player_shot_op_amp_osc =
+static discrete_op_amp_osc_info const spcenctr_player_shot_op_amp_osc =
{
DISC_OP_AMP_OSCILLATOR_VCO_3 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_SQW,
- 1.0 / (1.0 / RES_M(1) + 1.0 / RES_K(330)) + RES_M(1.5), /* R507||R509 + R508 */
- RES_M(1), /* R513 */
- RES_K(560), /* R512 */
- RES_M(2.7), /* R516 */
- RES_M(1), /* R515 */
- RES_M(4.7), /* R510 */
- RES_M(3.3), /* R511 */
- 0, /* no r8 */
- CAP_P(330), /* C504 */
- 12, /* vP */
+ 1.0 / (1.0 / RES_M(1) + 1.0 / RES_K(330)) + RES_M(1.5), // R507||R509 + R508
+ RES_M(1), // R513
+ RES_K(560), // R512
+ RES_M(2.7), // R516
+ RES_M(1), // R515
+ RES_M(4.7), // R510
+ RES_M(3.3), // R511
+ 0, // no r8
+ CAP_P(330), // C504
+ 12, // vP
};
-
-static const discrete_op_amp_info spcenctr_player_shot_op_amp_C1 =
+static discrete_op_amp_info const spcenctr_player_shot_op_amp_C1 =
{
DISC_OP_AMP_IS_NORTON,
- RES_K(560), /* R517 */
- RES_K(470), /* R514 */
- RES_M(2.7), /* R518 */
- RES_K(560), /* R524 */
- 0, /* no c */
- 0, /* vN */
- 12 /* vP */
+ RES_K(560), // R517
+ RES_K(470), // R514
+ RES_M(2.7), // R518
+ RES_K(560), // R524
+ 0, // no c
+ 0, // vN
+ 12 // vP
};
-
-static const discrete_op_amp_tvca_info spcenctr_player_shot_tvca =
-{
- RES_M(2.7), /* R522 */
- RES_K(560), /* R521 */
- 0, /* no r3 */
- RES_K(560), /* R560 */
- RES_K(1), /* R42 */
- 0, /* no r6 */
- RES_K(560), /* R523 */
- 0, /* no r8 */
- 0, /* no r9 */
- 0, /* no r10 */
- 0, /* no r11 */
- CAP_U(1), /* C506 */
- 0, /* no c2 */
- 0, 0, /* no c3, c4 */
- 12, /* v1 */
- 0, /* no v2 */
- 0, /* no v3 */
- 12, /* vP */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* no f0 */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* no f1 */
- DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, /* f2 */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* no f3 */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* no f4 */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE /* no f5 */
+static discrete_op_amp_tvca_info const spcenctr_player_shot_tvca =
+{
+ RES_M(2.7), // R522
+ RES_K(560), // R521
+ 0, // no r3
+ RES_K(560), // R560
+ RES_K(1), // R42
+ 0, // no r6
+ RES_K(560), // R523
+ 0, // no r8
+ 0, // no r9
+ 0, // no r10
+ 0, // no r11
+ CAP_U(1), // C506
+ 0, // no c2
+ 0, 0, // no c3, c4
+ 12, // v1
+ 0, // no v2
+ 0, // no v3
+ 12, // vP
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, // no f0
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, // no f1
+ DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, // f2
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, // no f3
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, // no f4
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE // no f5
};
-
-static const discrete_op_amp_tvca_info spcenctr_crash_tvca =
-{
- RES_M(2.7), /* R302 */
- RES_K(470), /* R300 */
- 0, /* no r3 */
- RES_K(470), /* R303 */
- RES_K(1), /* R56 */
- 0, /* no r6 */
- RES_K(470), /* R301 */
- 0, /* no r8 */
- 0, /* no r9 */
- 0, /* no r10 */
- 0, /* no r11 */
- CAP_U(2.2), /* C304 */
- 0, /* no c2 */
- 0, 0, /* no c3, c4 */
- 5, /* v1 */
- 0, /* no v2 */
- 0, /* no v3 */
- 12, /* vP */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* no f0 */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* no f1 */
- DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, /* f2 */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* no f3 */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* no f4 */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE /* no f5 */
+static discrete_op_amp_tvca_info const spcenctr_crash_tvca =
+{
+ RES_M(2.7), // R302
+ RES_K(470), // R300
+ 0, // no r3
+ RES_K(470), // R303
+ RES_K(1), // R56
+ 0, // no r6
+ RES_K(470), // R301
+ 0, // no r8
+ 0, // no r9
+ 0, // no r10
+ 0, // no r11
+ CAP_U(2.2), // C304
+ 0, // no c2
+ 0, 0, // no c3, c4
+ 5, // v1
+ 0, // no v2
+ 0, // no v3
+ 12, // vP
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, // no f0
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, // no f1
+ DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, // f2
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, // no f3
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, // no f4
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE // no f5
};
-
-static const discrete_op_amp_tvca_info spcenctr_explosion_tvca =
-{
- RES_M(2.7), /* R402 */
- RES_K(680), /* R400 */
- 0, /* no r3 */
- RES_K(680), /* R403 */
- RES_K(1), /* R41 */
- 0, /* no r6 */
- RES_K(680), /* R401 */
- 0, /* no r8 */
- 0, /* no r9 */
- 0, /* no r10 */
- 0, /* no r11 */
- CAP_U(2.2), /* C400 */
- 0, /* no c2 */
- 0, 0, /* no c3, c4 */
- 12, /* v1 */
- 0, /* no v2 */
- 0, /* no v3 */
- 12, /* vP */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* no f0 */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* no f1 */
- DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, /* f2 */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* no f3 */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* no f4 */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE /* no f5 */
+static discrete_op_amp_tvca_info const spcenctr_explosion_tvca =
+{
+ RES_M(2.7), // R402
+ RES_K(680), // R400
+ 0, // no r3
+ RES_K(680), // R403
+ RES_K(1), // R41
+ 0, // no r6
+ RES_K(680), // R401
+ 0, // no r8
+ 0, // no r9
+ 0, // no r10
+ 0, // no r11
+ CAP_U(2.2), // C400
+ 0, // no c2
+ 0, 0, // no c3, c4
+ 12, // v1
+ 0, // no v2
+ 0, // no v3
+ 12, // vP
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, // no f0
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, // no f1
+ DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, // f2
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, // no f3
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, // no f4
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE // no f5
};
-
static const discrete_555_desc spcenctr_555_bonus =
{
DISC_555_OUT_SQW | DISC_555_OUT_DC,
- 5, /* B+ voltage of 555 */
+ 5, // B+ voltage of 555
DEFAULT_555_VALUES
};
-
static const discrete_mixer_desc spcenctr_mixer =
{
- DISC_MIXER_IS_RESISTOR, /* type */
- { RES_K(15), /* R117 */
- RES_K(15), /* R526 */
- RES_K(22), /* R211 */
- RES_K(3.6), /* R309 */
- RES_K(1.8) + RES_K(3.6) + RES_K(4.7), /* R405 + R406 + R407 */
- RES_K(27), /* R715 */
- RES_K(27)}, /* R51 */
- {0}, /* no rNode{} */
+ DISC_MIXER_IS_RESISTOR, // type
+ { RES_K(15), // R117
+ RES_K(15), // R526
+ RES_K(22), // R211
+ RES_K(3.6), // R309
+ RES_K(1.8) + RES_K(3.6) + RES_K(4.7), // R405 + R406 + R407
+ RES_K(27), // R715
+ RES_K(27)}, // R51
+ {0}, // no rNode{}
{ 0,
- CAP_U(0.001), /* C505 */
- CAP_U(0.1), /* C202 */
- CAP_U(1), /* C303 */
+ CAP_U(0.001), // C505
+ CAP_U(0.1), // C202
+ CAP_U(1), // C303
0,
0,
- CAP_U(10)}, /* C16 */
- 0, /* no rI */
- 0, /* no rF */
- 0, /* no cF */
- CAP_U(1), /* C900 */
- 0, /* vRef = ground */
- 1 /* gain */
+ CAP_U(10)}, // C16
+ 0, // no rI
+ 0, // no rF
+ 0, // no cF
+ CAP_U(1), // C900
+ 0, // vRef = ground
+ 1 // gain
};
-
static DISCRETE_SOUND_START(spcenctr_discrete)
/************************************************
@@ -2991,207 +2794,247 @@ static DISCRETE_SOUND_START(spcenctr_discrete)
DISCRETE_INPUT_LOGIC (SPCENCTR_BONUS_EN)
DISCRETE_INPUT_DATA (SPCENCTR_WIND_DATA)
-
/************************************************
* Noise Generator
************************************************/
- /* Noise clock was breadboarded and measured at 7515 */
- DISCRETE_LFSR_NOISE(SPCENCTR_NOISE, /* IC A0, pin 10 */
- 1, /* ENAB */
- 1, /* no RESET */
- 7515, /* CLK in Hz */
- 12, /* p-p AMPL */
- 0, /* no FEED input */
- 12.0/2, /* dc BIAS */
- &midway_lfsr)
-
+ // Noise clock was breadboarded and measured at 7515
+ DISCRETE_LFSR_NOISE(SPCENCTR_NOISE, // IC A0, pin 10
+ 1, // ENAB
+ 1, // no RESET
+ 7515, // CLK in Hz
+ 12, // p-p AMPL
+ 0, // no FEED input
+ 12.0/2, // dc BIAS
+ &midway_lfsr)
/************************************************
* Enemy Ship Shot
************************************************/
- DISCRETE_OP_AMP(NODE_20, /* IC E1, pin 10 */
- 1, /* ENAB */
- 0, /* no IN0 */
- SPCENCTR_ENEMY_SHIP_SHOT_EN, /* IN1 */
- &spcenctr_enemy_ship_shot_op_amp_E1)
- DISCRETE_OP_AMP_VCO1(NODE_21, /* IC D1, pin 5 */
- 1, /* ENAB */
- NODE_20, /* VMOD1 */
- &spcenctr_enemy_ship_shot_op_amp_osc)
- DISCRETE_OP_AMP(NODE_22, /* IC D1, pin 9 */
- 1, /* ENAB */
- NODE_21, /* IN0 */
- NODE_20, /* IN1 */
- &spcenctr_enemy_ship_shot_op_amp_D1)
- DISCRETE_OP_AMP_FILTER(NODE_23, /* IC D1, pin 10 */
- 1, /* ENAB */
- NODE_22, /* INP0 */
- 0, /* no INP1 */
- DISC_OP_AMP_FILTER_IS_BAND_PASS_1M | DISC_OP_AMP_IS_NORTON,
- &spcenctr_enemy_ship_shot_filt)
+ DISCRETE_OP_AMP(NODE_20, // IC E1, pin 10
+ 1, // ENAB
+ 0, // no IN0
+ SPCENCTR_ENEMY_SHIP_SHOT_EN, // IN1
+ &spcenctr_enemy_ship_shot_op_amp_E1)
+ DISCRETE_OP_AMP_VCO1(NODE_21, // IC D1, pin 5
+ 1, // ENAB
+ NODE_20, // VMOD1
+ &spcenctr_enemy_ship_shot_op_amp_osc)
+ DISCRETE_OP_AMP(NODE_22, // IC D1, pin 9
+ 1, // ENAB
+ NODE_21, // IN0
+ NODE_20, // IN1
+ &spcenctr_enemy_ship_shot_op_amp_D1)
+ DISCRETE_OP_AMP_FILTER(NODE_23, // IC D1, pin 10
+ 1, // ENAB
+ NODE_22, // INP0
+ 0, // no INP1
+ DISC_OP_AMP_FILTER_IS_BAND_PASS_1M | DISC_OP_AMP_IS_NORTON,
+ &spcenctr_enemy_ship_shot_filt)
DISCRETE_CRFILTER(SPCENCTR_ENEMY_SHIP_SHOT_SND,
- NODE_23, /* IN0 */
- RES_K(1.8), /* R116 */
- CAP_U(0.1) ) /* C104 */
-
+ NODE_23, // IN0
+ RES_K(1.8), // R116
+ CAP_U(0.1) ) // C104
/************************************************
* Player Shot
************************************************/
- DISCRETE_OP_AMP_ONESHOT(NODE_30, /* IC E1, pin 4 */
- SPCENCTR_PLAYER_SHOT_EN, /* TRIG */
- &spcenctr_player_shot_1sht) /* breadboarded and scoped at 325mS */
- DISCRETE_OP_AMP(NODE_31, /* IC E1, pin 5 */
- 1, /* ENAB */
- 0, /* no IN0 */
- NODE_30, /* IN1 */
- &spcenctr_player_shot_op_amp_E1)
- /* next 2 modules simulate the D502 voltage drop */
+ DISCRETE_OP_AMP_ONESHOT(NODE_30, // IC E1, pin 4
+ SPCENCTR_PLAYER_SHOT_EN, // TRIG
+ &spcenctr_player_shot_1sht) // breadboarded and scoped at 325mS
+ DISCRETE_OP_AMP(NODE_31, // IC E1, pin 5
+ 1, // ENAB
+ 0, // no IN0
+ NODE_30, // IN1
+ &spcenctr_player_shot_op_amp_E1)
+ // next 2 modules simulate the D502 voltage drop
DISCRETE_ADDER2(NODE_32,
- 1, /* ENAB */
- NODE_31, /* IN0 */
- -0.5) /* IN1 */
+ 1, // ENAB
+ NODE_31, // IN0
+ -0.5) // IN1
DISCRETE_CLAMP(NODE_33,
- NODE_32, /* IN0 */
- 0, /* MIN */
- 12) /* MAX */
+ NODE_32, // IN0
+ 0, // MIN
+ 12) // MAX
DISCRETE_CRFILTER(NODE_34,
- SPCENCTR_NOISE, /* IN0 */
- RES_M(1) + RES_K(330), /* R507, R509 */
- CAP_U(0.1) ) /* C503 */
+ SPCENCTR_NOISE, // IN0
+ RES_M(1) + RES_K(330), // R507, R509
+ CAP_U(0.1) ) // C503
DISCRETE_GAIN(NODE_35,
- NODE_34, /* IN0 */
- RES_K(330)/(RES_M(1) + RES_K(330))) /* GAIN - R507 : R509 */
- DISCRETE_OP_AMP_VCO2(NODE_36, /* IC C1, pin 4 */
- 1, /* ENAB */
- NODE_35, /* VMOD1 */
- NODE_33, /* VMOD2 */
+ NODE_34, // IN0
+ RES_K(330)/(RES_M(1) + RES_K(330))) // GAIN - R507 : R509
+ DISCRETE_OP_AMP_VCO2(NODE_36, // IC C1, pin 4
+ 1, // ENAB
+ NODE_35, // VMOD1
+ NODE_33, // VMOD2
&spcenctr_player_shot_op_amp_osc)
- DISCRETE_OP_AMP(NODE_37, /* IC C1, pin 9 */
- 1, /* ENAB */
- NODE_36, /* IN0 */
- NODE_33, /* IN1 */
- &spcenctr_player_shot_op_amp_C1)
- DISCRETE_OP_AMP_TRIG_VCA(SPCENCTR_PLAYER_SHOT_SND, /* IC C1, pin 10 */
- SPCENCTR_PLAYER_SHOT_EN, /* TRG0 */
- 0, /* no TRG1 */
- 0, /* no TRG2 */
- NODE_37, /* IN0 */
- 0, /* no IN1 */
- &spcenctr_player_shot_tvca)
-
+ DISCRETE_OP_AMP(NODE_37, // IC C1, pin 9
+ 1, // ENAB
+ NODE_36, // IN0
+ NODE_33, // IN1
+ &spcenctr_player_shot_op_amp_C1)
+ DISCRETE_OP_AMP_TRIG_VCA(SPCENCTR_PLAYER_SHOT_SND, // IC C1, pin 10
+ SPCENCTR_PLAYER_SHOT_EN, // TRG0
+ 0, // no TRG1
+ 0, // no TRG2
+ NODE_37, // IN0
+ 0, // no IN1
+ &spcenctr_player_shot_tvca)
/************************************************
*Screech - unemulated
************************************************/
DISCRETE_CONSTANT(SPCENCTR_SCREECH_SND, 0)
-
/************************************************
* Crash
************************************************/
- DISCRETE_OP_AMP_TRIG_VCA(NODE_60, /* IC C2, pin 4 */
- SPCENCTR_CRASH_EN, /* TRG0 */
- 0, /* no TRG1 */
- 0, /* no TRG2 */
- SPCENCTR_NOISE, /* IN0 */
- 0, /* no IN1 */
- &spcenctr_crash_tvca)
- /* The next 5 modules emulate the filter. */
- /* The DC level was breadboarded and the frequency response was SPICEd */
- DISCRETE_ADDER2(NODE_61, /* center on filter DC level */
- 1, /* ENAB */
- NODE_60, /* IN0 */
- -6.8) /* IN1 */
+ DISCRETE_OP_AMP_TRIG_VCA(NODE_60, // IC C2, pin 4
+ SPCENCTR_CRASH_EN, // TRG0
+ 0, // no TRG1
+ 0, // no TRG2
+ SPCENCTR_NOISE, // IN0
+ 0, // no IN1
+ &spcenctr_crash_tvca)
+ // The next 5 modules emulate the filter.
+ // The DC level was breadboarded and the frequency response was SPICEd
+ DISCRETE_ADDER2(NODE_61, // center on filter DC level
+ 1, // ENAB
+ NODE_60, // IN0
+ -6.8) // IN1
DISCRETE_FILTER2(NODE_62,
- 1, /* ENAB */
- NODE_61, /* INP0 */
- 130, /* FREQ */
- 1.0 / 8, /* DAMP */
- DISC_FILTER_BANDPASS)
+ 1, // ENAB
+ NODE_61, // INP0
+ 130, // FREQ
+ 1.0 / 8, // DAMP
+ DISC_FILTER_BANDPASS)
DISCRETE_GAIN(NODE_63,
- NODE_62, /* IN0 */
- 6) /* GAIN */
- DISCRETE_ADDER2(NODE_64, /* center on filter DC level */
- 1, /* ENAB */
- NODE_63, /* IN0 */
- 6.8) /* IN1 */
- DISCRETE_CLAMP(SPCENCTR_CRASH_SND, /* IC C2, pin 5 */
- NODE_64, /* IN0 */
- 0, /* MIN */
- 12.0 - OP_AMP_NORTON_VBE) /* MAX */
-
+ NODE_62, // IN0
+ 6) // GAIN
+ DISCRETE_ADDER2(NODE_64, // center on filter DC level
+ 1, // ENAB
+ NODE_63, // IN0
+ 6.8) // IN1
+ DISCRETE_CLAMP(SPCENCTR_CRASH_SND, // IC C2, pin 5
+ NODE_64, // IN0
+ 0, // MIN
+ 12.0 - OP_AMP_NORTON_VBE) // MAX
/************************************************
* Explosion
************************************************/
- DISCRETE_OP_AMP_TRIG_VCA(NODE_70, /* IC D2, pin 10 */
- SPCENCTR_EXPLOSION_EN, /* TRG0 */
- 0, /* no TRG1 */
- 0, /* no TRG2 */
- SPCENCTR_NOISE, /* IN0 */
- 0, /* no IN1 */
- &spcenctr_explosion_tvca)
+ DISCRETE_OP_AMP_TRIG_VCA(NODE_70, // IC D2, pin 10
+ SPCENCTR_EXPLOSION_EN, // TRG0
+ 0, // no TRG1
+ 0, // no TRG2
+ SPCENCTR_NOISE, // IN0
+ 0, // no IN1
+ &spcenctr_explosion_tvca)
DISCRETE_RCFILTER(NODE_71,
- NODE_70, /* IN0 */
- RES_K(1.8), /* R405 */
- CAP_U(0.22) ) /* C401 */
+ NODE_70, // IN0
+ RES_K(1.8), // R405
+ CAP_U(0.22) ) // C401
DISCRETE_RCFILTER(SPCENCTR_EXPLOSION_SND,
- NODE_71, /* IN0 */
- RES_K(1.8) + RES_K(3.6), /* R405 + R406 */
- CAP_U(0.22) ) /* C402 */
-
+ NODE_71, // IN0
+ RES_K(1.8) + RES_K(3.6), // R405 + R406
+ CAP_U(0.22) ) // C402
/************************************************
*Bonus
************************************************/
- DISCRETE_555_ASTABLE(NODE_80, /* pin 5 */
- /* the pin 4 reset is not connected in schematic, but should be */
- SPCENCTR_BONUS_EN, /* RESET */
- RES_K(1), /* R710 */
- RES_K(27), /* R711 */
- CAP_U(0.047), /* C710 */
- &spcenctr_555_bonus)
- DISCRETE_555_ASTABLE(NODE_81, /* pin 9 */
- SPCENCTR_BONUS_EN, /* RESET pin 10 */
- RES_K(100), /* R713 */
- RES_K(47), /* R714 */
- CAP_U(1), /* C713 */
- &spcenctr_555_bonus)
- DISCRETE_LOGIC_AND3(NODE_82, /* IC C-D, pin 6 */
- NODE_80, /* INP0 */
- NODE_81, /* INP1 */
- SPCENCTR_BONUS_EN) /* INP2 */
- DISCRETE_GAIN(SPCENCTR_BONUS_SND, /* adjust from logic to TTL voltage level */
- NODE_82, /* IN0 */
- DEFAULT_TTL_V_LOGIC_1) /* GAIN */
-
+ DISCRETE_555_ASTABLE(NODE_80, // pin 5
+ // the pin 4 reset is not connected in schematic, but should be
+ SPCENCTR_BONUS_EN, // RESET
+ RES_K(1), // R710
+ RES_K(27), // R711
+ CAP_U(0.047), // C710
+ &spcenctr_555_bonus)
+ DISCRETE_555_ASTABLE(NODE_81, // pin 9
+ SPCENCTR_BONUS_EN, // RESET pin 10
+ RES_K(100), // R713
+ RES_K(47), // R714
+ CAP_U(1), // C713
+ &spcenctr_555_bonus)
+ DISCRETE_LOGIC_AND3(NODE_82, // IC C-D, pin 6
+ NODE_80, // INP0
+ NODE_81, // INP1
+ SPCENCTR_BONUS_EN) // INP2
+ DISCRETE_GAIN(SPCENCTR_BONUS_SND, // adjust from logic to TTL voltage level
+ NODE_82, // IN0
+ DEFAULT_TTL_V_LOGIC_1) // GAIN
/************************************************
*Wind - unemulated
************************************************/
DISCRETE_CONSTANT(SPCENCTR_WIND_SND, 0)
-
/************************************************
* Final mix
************************************************/
DISCRETE_MIXER7(NODE_91,
- 1, /* ENAB */
- SPCENCTR_ENEMY_SHIP_SHOT_SND, /* IN0 */
- SPCENCTR_PLAYER_SHOT_SND, /* IN1 */
- SPCENCTR_SCREECH_SND, /* IN2 */
- SPCENCTR_CRASH_SND, /* IN3 */
- SPCENCTR_EXPLOSION_SND, /* IN4 */
- SPCENCTR_BONUS_SND, /* IN5 */
- SPCENCTR_WIND_SND, /* IN6 */
- &spcenctr_mixer)
+ 1, // ENAB
+ SPCENCTR_ENEMY_SHIP_SHOT_SND, // IN0
+ SPCENCTR_PLAYER_SHOT_SND, // IN1
+ SPCENCTR_SCREECH_SND, // IN2
+ SPCENCTR_CRASH_SND, // IN3
+ SPCENCTR_EXPLOSION_SND, // IN4
+ SPCENCTR_BONUS_SND, // IN5
+ SPCENCTR_WIND_SND, // IN6
+ &spcenctr_mixer)
DISCRETE_OUTPUT(NODE_91, 20000)
DISCRETE_SOUND_END
+spcenctr_audio_device::spcenctr_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) :
+ device_t(mconfig, SPCENCTR_AUDIO, tag, owner, clock),
+ m_sn(*this, "snsnd"),
+ m_discrete(*this, "discrete"),
+ m_lamp(*this, "LAMP"),
+ m_strobe(*this, "STROBE"),
+ m_strobe_timer(nullptr),
+ m_strobe_enable(0U)
+{
+}
+
+void spcenctr_audio_device::p1_w(u8 data)
+{
+ machine().sound().system_enable(BIT(data, 0));
+
+ // D1 is marked as 'OPTIONAL SWITCH VIDEO FOR COCKTAIL', but it is never set by the software
+
+ m_discrete->write(SPCENCTR_CRASH_EN, BIT(data, 2));
-void mw8080bw_state::spcenctr_audio(machine_config &config)
+ // D3-D7 are not connected
+}
+
+void spcenctr_audio_device::p2_w(u8 data)
+{
+ // set WIND SOUND FREQ(data & 0x0f) 0, if no wind
+
+ m_discrete->write(SPCENCTR_EXPLOSION_EN, BIT(data, 4));
+ m_discrete->write(SPCENCTR_PLAYER_SHOT_EN, BIT(data, 5));
+
+ // D6 and D7 are not connected
+}
+
+
+void spcenctr_audio_device::p3_w(u8 data)
+{
+ // if (data & 0x01) enable SCREECH (hit the sides) sound
+
+ m_discrete->write(SPCENCTR_ENEMY_SHIP_SHOT_EN, BIT(data, 1));
+
+ m_strobe_enable = BIT(data, 2);
+
+ m_lamp = BIT(data, 3);
+
+ m_discrete->write(SPCENCTR_BONUS_EN, BIT(data, 4));
+
+ m_sn->enable_w(BIT(data, 5));
+
+ // D6 and D7 are not connected
+}
+
+void spcenctr_audio_device::device_add_mconfig(machine_config &config)
{
SPEAKER(config, "mono").front_center();
@@ -3215,635 +3058,1267 @@ void mw8080bw_state::spcenctr_audio(machine_config &config)
m_discrete->add_route(ALL_OUTPUTS, "mono", 0.45);
}
+void spcenctr_audio_device::device_start()
+{
+ m_lamp.resolve();
+ m_strobe.resolve();
+ m_strobe_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(spcenctr_audio_device::strobe_callback), this));
-WRITE8_MEMBER(mw8080bw_state::spcenctr_audio_1_w)
-{
- machine().sound().system_enable((data >> 0) & 0x01);
+ m_strobe_enable = 0U;
- /* D1 is marked as 'OPTIONAL SWITCH VIDEO FOR COCKTAIL',
- but it is never set by the software */
+ save_item(NAME(m_strobe_enable));
- m_discrete->write(SPCENCTR_CRASH_EN, (data >> 2) & 0x01);
+ strobe_callback(nullptr, 0U);
+}
- /* D3-D7 are not connected */
+TIMER_CALLBACK_MEMBER(spcenctr_audio_device::strobe_callback)
+{
+ constexpr double STROBE_FREQ = 9.00; // Hz - calculated from the 555 timer
+ constexpr u32 STROBE_DUTY_CYCLE = 95; // %
+
+ m_strobe = (param && m_strobe_enable) ? 1 : 0;
+ m_strobe_timer->adjust(
+ attotime::from_hz(STROBE_FREQ) * (param ? (100 - STROBE_DUTY_CYCLE) : STROBE_DUTY_CYCLE) / 100,
+ param ? 0 : 1);
}
-WRITE8_MEMBER(mw8080bw_state::spcenctr_audio_2_w)
+/*************************************
+ *
+ * Phantom II
+ *
+ *************************************/
+
+phantom2_audio_device::phantom2_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) :
+ device_t(mconfig, PHANTOM2_AUDIO, tag, owner, clock),
+ m_samples(*this, "samples"),
+ m_exp(*this, "EXPLAMP"),
+ m_p1(0U),
+ m_p2(0U)
{
- /* set WIND SOUND FREQ(data & 0x0f) 0, if no wind */
+}
- m_discrete->write(SPCENCTR_EXPLOSION_EN, (data >> 4) & 0x01);
+void phantom2_audio_device::p1_w(u8 data)
+{
+ u8 const rising(data & ~m_p1);
+ m_p1 = data;
- m_discrete->write(SPCENCTR_PLAYER_SHOT_EN, (data >> 5) & 0x01);
+ if (BIT(rising, 0)) m_samples->start(0, 0); // PLAYER SHOT sound
- /* D6 and D7 are not connected */
+ // if (data & 0x02) enable ENEMY SHOT sound
- m_port_2_last = data;
-}
+ machine().sound().system_mute(!BIT(data, 5));
+ machine().sound().system_enable(BIT(data, 2));
+
+ machine().bookkeeping().coin_counter_w(0, BIT(data, 3));
+ // if (data & 0x10) enable RADAR sound
-WRITE8_MEMBER(mw8080bw_state::spcenctr_audio_3_w)
+ // D5-D7 are not connected
+}
+
+void phantom2_audio_device::p2_w(u8 data)
{
- /* if (data & 0x01) enable SCREECH (hit the sides) sound */
+ u8 const rising(data & ~m_p2);
+ m_p2 = data;
+
+ // D0-D2 are not connected
- m_discrete->write(SPCENCTR_ENEMY_SHIP_SHOT_EN, (data >> 1) & 0x01);
+ if (BIT(rising, 3)) m_samples->start(1, 1); // enable EXPLOSION sound
- m_spcenctr_strobe_state = (data >> 2) & 0x01;
+ m_exp = BIT(data, 4);
- output().set_value("LAMP", (data >> 3) & 0x01);
+ // set JET SOUND FREQ((data >> 5) & 0x07) 0, if no jet sound
+}
- m_discrete->write(SPCENCTR_BONUS_EN, (data >> 4) & 0x01);
+void phantom2_audio_device::device_add_mconfig(machine_config &config)
+{
+ static char const *const sample_names[] = {
+ "*phantom2",
+ "1", // shot
+ "2", // explosion
+ nullptr };
- m_sn->enable_w((data >> 5) & 0x01); /* saucer sound */
+ SPEAKER(config, "mono").front_center();
- /* D6 and D7 are not connected */
+ SAMPLES(config, m_samples);
+ m_samples->set_channels(2);
+ m_samples->set_samples_names(sample_names);
+ m_samples->add_route(ALL_OUTPUTS, "mono", 1.0);
}
+void phantom2_audio_device::device_start()
+{
+ m_exp.resolve();
+
+ m_p1 = 0U;
+ m_p2 = 0U;
+
+ save_item(NAME(m_p1));
+ save_item(NAME(m_p2));
+}
/*************************************
*
- * Phantom II
+ * Space Invaders
+ *
+ * Discrete sound emulation:
+ * Apr 2007, D.R.
*
*************************************/
-static const char *const phantom2_sample_names[] =
+static discrete_op_amp_1sht_info const invaders_invader_hit_1sht =
{
- "*phantom2",
- "1", /* shot */
- "2", /* explosion */
- nullptr
+ DISC_OP_AMP_1SHT_1 | DISC_OP_AMP_IS_NORTON,
+ RES_M(4.7), // R49
+ RES_K(100), // R51
+ RES_M(1), // R48
+ RES_M(1), // R50
+ RES_M(2.2), // R52
+ CAP_U(0.1), // C18
+ CAP_P(470), // C20
+ 0, // vN
+ 12 // vP
};
-void mw8080bw_state::phantom2_audio(machine_config &config)
+static const discrete_op_amp_osc_info invaders_invader_hit_osc =
{
- MCFG_SOUND_START_OVERRIDE(mw8080bw_state, samples)
+ DISC_OP_AMP_OSCILLATOR_1 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_CAP,
+ RES_M(1), // R37
+ RES_K(10), // R41
+ RES_K(100), // R38
+ RES_K(120), // R40
+ RES_M(1), // R39
+ 0, // no r6
+ 0, // no r7
+ 0, // no r8
+ CAP_U(0.1), // C16
+ 12, // vP
+};
- SPEAKER(config, "mono").front_center();
- SAMPLES(config, m_samples);
- m_samples->set_channels(2);
- m_samples->set_samples_names(phantom2_sample_names);
- m_samples->add_route(ALL_OUTPUTS, "mono", 1);
-}
+// Schematic M051-00739-A005 and M051-00739-B005
+// P.C. A084-90700-B000 and A084-90700-C000
+static DISCRETE_SOUND_START(invaders_discrete)
+ INVADERS_NOISE_GENERATOR
+ INVADERS_SAUCER_HIT(1)
+ INVADERS_FLEET(1)
+ INVADERS_BONUS_MISSLE_BASE(1)
+ INVADERS_INVADER_HIT(1, invaders)
+ INVADERS_EXPLOSION(1)
+ INVADERS_MISSILE(1, invaders)
+ INVADERS_MIXER(1, invaders)
+DISCRETE_SOUND_END
+invaders_audio_device::invaders_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) :
+ device_t(mconfig, INVADERS_AUDIO, tag, owner, clock),
+ m_sn(*this, "snsnd"),
+ m_discrete(*this, "discrete"),
+ m_flip_screen_out(*this),
+ m_p2(0U)
+{
+}
-WRITE8_MEMBER(mw8080bw_state::phantom2_audio_1_w)
+void invaders_audio_device::p1_w(u8 data)
{
- uint8_t rising_bits = data & ~m_port_1_last;
+ m_sn->enable_w(BIT(~data, 0)); // saucer sound
- /* if (data & 0x01) enable PLAYER SHOT sound */
- if (rising_bits & 0x01) m_samples->start(0, 0);
+ m_discrete->write(INVADERS_NODE(INVADERS_MISSILE_EN, 1), data & 0x02);
+ m_discrete->write(INVADERS_NODE(INVADERS_EXPLOSION_EN, 1), data & 0x04);
+ m_discrete->write(INVADERS_NODE(INVADERS_INVADER_HIT_EN, 1), data & 0x08);
+ m_discrete->write(INVADERS_NODE(INVADERS_BONUS_MISSLE_BASE_EN, 1), data & 0x10);
+
+ machine().sound().system_enable(data & 0x20);
- /* if (data & 0x02) enable ENEMY SHOT sound */
+ // D6 and D7 are not connected
+}
- machine().sound().system_mute(!(data & 0x20));
- machine().sound().system_enable((data >> 2) & 0x01);
- machine().bookkeeping().coin_counter_w(0, (data >> 3) & 0x01);
+void invaders_audio_device::p2_w(u8 data)
+{
+ u8 const changed(data ^ m_p2);
+ m_p2 = data;
- /* if (data & 0x10) enable RADAR sound */
+ m_discrete->write(INVADERS_NODE(INVADERS_FLEET_DATA, 1), data & 0x0f);
+ m_discrete->write(INVADERS_NODE(INVADERS_SAUCER_HIT_EN, 1), data & 0x10);
- /* D5-D7 are not connected */
+ if (BIT(changed, 5)) m_flip_screen_out(BIT(data, 5));
- m_port_1_last = data;
+ // D6 and D7 are not connected
}
-
-WRITE8_MEMBER(mw8080bw_state::phantom2_audio_2_w)
+void invaders_audio_device::device_add_mconfig(machine_config &config)
{
- uint8_t rising_bits = data & ~m_port_2_last;
+ SPEAKER(config, "mono").front_center();
- /* D0-D2 are not connected */
+ SN76477(config, m_sn);
+ m_sn->set_noise_params(0, 0, 0);
+ m_sn->set_decay_res(0);
+ m_sn->set_attack_params(0, RES_K(100));
+ m_sn->set_amp_res(RES_K(56));
+ m_sn->set_feedback_res(RES_K(10));
+ m_sn->set_vco_params(0, CAP_U(0.1), RES_K(8.2));
+ m_sn->set_pitch_voltage(5.0);
+ m_sn->set_slf_params(CAP_U(1.0), RES_K(120));
+ m_sn->set_oneshot_params(0, 0);
+ m_sn->set_vco_mode(1);
+ m_sn->set_mixer_params(0, 0, 0);
+ m_sn->set_envelope_params(1, 0);
+ m_sn->set_enable(1);
+ m_sn->add_route(ALL_OUTPUTS, "mono", 0.5);
- /* if (data & 0x08) enable EXPLOSION sound */
- if (rising_bits & 0x08) m_samples->start(1, 1);
+ DISCRETE(config, m_discrete, invaders_discrete);
+ m_discrete->add_route(ALL_OUTPUTS, "mono", 0.5);
+}
- output().set_value("EXPLAMP", (data >> 4) & 0x01);
+void invaders_audio_device::device_start()
+{
+ m_flip_screen_out.resolve_safe();
- /* set JET SOUND FREQ((data >> 5) & 0x07) 0, if no jet sound */
+ m_p2 = 0U;
- m_port_2_last = data;
+ save_item(NAME(m_p2));
}
-
/*************************************
*
- * Bowling Alley
- *
- * Discrete sound emulation:
- * Apr 2007, D.R.
+ * Space Invaders II (cocktail)
*
*************************************/
-/* nodes - inputs */
-#define BOWLER_FOWL_EN NODE_01
-
-/* nodes - sounds */
-#define BOWLER_FOWL_SND NODE_10
-
+static discrete_op_amp_1sht_info const invad2ct_invader_hit_1sht =
+{
+ DISC_OP_AMP_1SHT_1 | DISC_OP_AMP_IS_NORTON,
+ RES_M(4.7), // R49
+ RES_K(100), // R51
+ RES_M(1), // R48
+ RES_M(1), // R50
+ RES_M(2.2), // R52
+ CAP_U(0.22), // C18
+ CAP_P(470), // C20
+ 0, // vN
+ 12 // vP
+};
-static const discrete_op_amp_tvca_info bowler_fowl_tvca =
+static discrete_op_amp_osc_info const invad2ct_invader_hit_osc =
{
- RES_M(2.7), /* R1103 */
- RES_K(680), /* R1102 */
- 0, /* no r3 */
- RES_K(680), /* R1104 */
- RES_K(1), /* SIP */
- 0, /* no r6 */
- RES_K(300), /* R1101 */
- 0, /* no r8 */
- 0, /* no r9 */
- 0, /* no r10 */
- 0, /* no r11 */
- CAP_U(0.1), /* C1050 */
- 0, /* no c2 */
- 0, 0, /* no c3, c4 */
- 5, /* v1 */
- 0, /* no v2 */
- 0, /* no v3 */
- 12, /* vP */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* no f0 */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* no f1 */
- DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, /* f2 */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* no f3 */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* no f4 */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE /* no f5 */
+ DISC_OP_AMP_OSCILLATOR_1 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_CAP,
+ RES_M(1), // R37
+ RES_K(10), // R41
+ RES_K(100), // R38
+ RES_K(120), // R40
+ RES_M(1), // R39
+ 0, // no r6
+ 0, // no r7
+ 0, // no r8
+ CAP_U(0.22), // C16
+ 12, // vP
};
+static discrete_op_amp_1sht_info const invad2ct_brd2_invader_hit_1sht =
+{
+ DISC_OP_AMP_1SHT_1 | DISC_OP_AMP_IS_NORTON,
+ RES_M(4.7), // R49
+ RES_K(100), // R51
+ RES_M(1), // R48
+ RES_M(1), // R50
+ RES_M(2.2), // R52
+ CAP_U(1), // C18
+ CAP_P(470), // C20
+ 0, // vN
+ 12 // vP
+};
-static DISCRETE_SOUND_START(bowler_discrete)
+static discrete_op_amp_osc_info const invad2ct_brd2_invader_hit_osc =
+{
+ DISC_OP_AMP_OSCILLATOR_1 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_CAP,
+ RES_M(1), // R37
+ RES_K(10), // R41
+ RES_K(100), // R38
+ RES_K(120), // R40
+ RES_M(1), // R39
+ 0, // no r6
+ 0, // no r7
+ 0, // no r8
+ CAP_U(0.1), // C16
+ 12, // vP
+};
- /************************************************
- * Input register mapping
- ************************************************/
- DISCRETE_INPUT_LOGIC(BOWLER_FOWL_EN)
+static discrete_op_amp_1sht_info const invad2ct_missle_1sht =
+{
+ DISC_OP_AMP_1SHT_1 | DISC_OP_AMP_IS_NORTON,
+ RES_M(4.7), // R32
+ RES_K(100), // R30
+ RES_M(1), // R31
+ RES_M(1), // R33
+ RES_M(2.2), // R34
+ CAP_U(0.22), // C12
+ CAP_P(470), // C15
+ 0, // vN
+ 12 // vP
+};
+static discrete_mixer_desc const invad2ct_mixer =
+{
+ DISC_MIXER_IS_OP_AMP, // type
+ { RES_K(100), // R78
+ RES_K(15) + 100 + 100, // R134 + R133 + R132
+ RES_K(150), // R136
+ RES_K(150), // R59
+ RES_K(10) + RES_K(6.8) + RES_K(5.6), // R86 + R85 + R84
+ RES_K(150) }, // R28
+ {0}, // no rNode{}
+ { 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ CAP_U(0.001) }, // C11
+ 0, // no rI
+ RES_K(100), // R105
+ 0, // no cF
+ CAP_U(0.1), // C45
+ 0, // vRef = ground
+ 1 // gain
+};
- /************************************************
- * Explosion
- ************************************************/
- DISCRETE_SQUAREWFIX(NODE_20,
- 1, /* ENAB */
- 180, /* FREQ */
- DEFAULT_TTL_V_LOGIC_1, /* p-p AMP */
- 50, /* DUTY */
- DEFAULT_TTL_V_LOGIC_1 / 2, /* dc BIAS */
- 0) /* PHASE */
- DISCRETE_OP_AMP_TRIG_VCA(NODE_21, /* IC P3, pin 9 */
- BOWLER_FOWL_EN, /* TRG0 */
- 0, /* no TRG1 */
- 0, /* no TRG2 */
- NODE_20, /* IN0 */
- 0, /* no IN1 */
- &bowler_fowl_tvca)
- DISCRETE_CRFILTER(BOWLER_FOWL_SND,
- NODE_21, /* IN0 */
- RES_K(68), /* R1120 */
- CAP_U(0.1) ) /* C1048 */
+static DISCRETE_SOUND_START(invad2ct_discrete)
+ // sound board 1
+ // P.C. A082-90700-A000
+ // Schematic M051-00851-A002
+ INVADERS_NOISE_GENERATOR
+ INVADERS_SAUCER_HIT(1)
+ INVADERS_FLEET(1)
+ INVADERS_BONUS_MISSLE_BASE(1)
+ INVADERS_INVADER_HIT(1, invad2ct)
+ INVADERS_EXPLOSION(1)
+ INVADERS_MISSILE(1, invad2ct)
+ INVADERS_MIXER(1, invad2ct)
- DISCRETE_OUTPUT(BOWLER_FOWL_SND, 10000)
+ // sound board 2
+ // P.C. A084-90901-C851
+ // Schematic M051-00851-A005
+ INVADERS_SAUCER_HIT(2)
+ INVADERS_FLEET(2)
+ INVADERS_BONUS_MISSLE_BASE(2)
+ INVADERS_INVADER_HIT(2, invad2ct_brd2)
+ INVADERS_EXPLOSION(2)
+ INVADERS_MISSILE(2, invaders)
+ INVADERS_MIXER(2, invaders)
DISCRETE_SOUND_END
+invad2ct_audio_device::invad2ct_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) :
+ device_t(mconfig, INVAD2CT_AUDIO, tag, owner, clock),
+ m_discrete(*this, "discrete"),
+ m_sn(*this, "sn%u", 1U)
+{
+}
-void mw8080bw_state::bowler_audio(machine_config &config)
+void invad2ct_audio_device::p1_w(u8 data)
{
- SPEAKER(config, "mono").front_center();
+ m_sn[0]->enable_w(BIT(~data, 0)); // saucer sound
- DISCRETE(config, m_discrete, bowler_discrete);
- m_discrete->add_route(ALL_OUTPUTS, "mono", 1);
-}
+ m_discrete->write(INVADERS_NODE(INVADERS_MISSILE_EN, 1), data & 0x02);
+ m_discrete->write(INVADERS_NODE(INVADERS_EXPLOSION_EN, 1), data & 0x04);
+ m_discrete->write(INVADERS_NODE(INVADERS_INVADER_HIT_EN, 1), data & 0x08);
+ m_discrete->write(INVADERS_NODE(INVADERS_BONUS_MISSLE_BASE_EN, 1), data & 0x10);
+ machine().sound().system_enable(data & 0x20);
-WRITE8_MEMBER(mw8080bw_state::bowler_audio_1_w)
+ // D6 and D7 are not connected
+}
+
+void invad2ct_audio_device::p2_w(u8 data)
{
- /* D0 - selects controller on the cocktail PCB */
+ m_discrete->write(INVADERS_NODE(INVADERS_FLEET_DATA, 1), data & 0x0f);
+ m_discrete->write(INVADERS_NODE(INVADERS_SAUCER_HIT_EN, 1), data & 0x10);
- machine().bookkeeping().coin_counter_w(0, (data >> 1) & 0x01);
+ // D5-D7 are not connected
+}
- machine().sound().system_enable((data >> 2) & 0x01);
+void invad2ct_audio_device::p3_w(u8 data)
+{
+ m_sn[1]->enable_w(BIT(~data, 0)); // saucer sound
- m_discrete->write(BOWLER_FOWL_EN, (data >> 3) & 0x01);
+ m_discrete->write(INVADERS_NODE(INVADERS_MISSILE_EN, 2), data & 0x02);
+ m_discrete->write(INVADERS_NODE(INVADERS_EXPLOSION_EN, 2), data & 0x04);
+ m_discrete->write(INVADERS_NODE(INVADERS_INVADER_HIT_EN, 2), data & 0x08);
+ m_discrete->write(INVADERS_NODE(INVADERS_BONUS_MISSLE_BASE_EN, 2), data & 0x10);
- /* D4 - appears to be a screen flip, but it's
- shown unconnected on the schematics for both the
- upright and cocktail PCB's */
+ // D5-D7 are not connected
+}
- /* D5 - triggered on a 'strike', sound circuit not labeled */
+void invad2ct_audio_device::p4_w(u8 data)
+{
+ m_discrete->write(INVADERS_NODE(INVADERS_FLEET_DATA, 2), data & 0x0f);
+ m_discrete->write(INVADERS_NODE(INVADERS_SAUCER_HIT_EN, 2), data & 0x10);
- /* D6 and D7 are not connected */
+ // D5-D7 are not connected
}
-
-WRITE8_MEMBER(mw8080bw_state::bowler_audio_2_w)
+void invad2ct_audio_device::device_add_mconfig(machine_config &config)
{
- /* set BALL ROLLING SOUND FREQ(data & 0x0f)
- 0, if no rolling, 0x08 used during ball return */
-
- /* D4 - triggered when the ball crosses the foul line,
- sound circuit not labeled */
+ SPEAKER(config, "spk1").front_left();
+ SPEAKER(config, "spk2").front_right();
- /* D5 - triggered on a 'spare', sound circuit not labeled */
+ DISCRETE(config, m_discrete, invad2ct_discrete);
+ m_discrete->add_route(0, "spk1", 0.5);
+ m_discrete->add_route(1, "spk2", 0.5);
- /* D6 and D7 are not connected */
+ SN76477(config, m_sn[0]);
+ m_sn[0]->set_noise_params(0, 0, 0);
+ m_sn[0]->set_decay_res(0);
+ m_sn[0]->set_attack_params(0, RES_K(100));
+ m_sn[0]->set_amp_res(RES_K(56));
+ m_sn[0]->set_feedback_res(RES_K(10));
+ m_sn[0]->set_vco_params(0, CAP_U(0.1), RES_K(8.2));
+ m_sn[0]->set_pitch_voltage(5.0);
+ m_sn[0]->set_slf_params(CAP_U(1.0), RES_K(120));
+ m_sn[0]->set_oneshot_params(0, 0);
+ m_sn[0]->set_vco_mode(1);
+ m_sn[0]->set_mixer_params(0, 0, 0);
+ m_sn[0]->set_envelope_params(1, 0);
+ m_sn[0]->set_enable(1);
+ m_sn[0]->add_route(ALL_OUTPUTS, "spk1", 0.3);
+
+ SN76477(config, m_sn[1]);
+ m_sn[1]->set_noise_params(0, 0, 0);
+ m_sn[1]->set_decay_res(0);
+ m_sn[1]->set_attack_params(0, RES_K(100));
+ m_sn[1]->set_amp_res(RES_K(56));
+ m_sn[1]->set_feedback_res(RES_K(10));
+ m_sn[1]->set_vco_params(0, CAP_U(0.047), RES_K(39));
+ m_sn[1]->set_pitch_voltage(5.0);
+ m_sn[1]->set_slf_params(CAP_U(1.0), RES_K(120));
+ m_sn[1]->set_oneshot_params(0, 0);
+ m_sn[1]->set_vco_mode(1);
+ m_sn[1]->set_mixer_params(0, 0, 0);
+ m_sn[1]->set_envelope_params(1, 0);
+ m_sn[1]->set_enable(1);
+ m_sn[1]->add_route(ALL_OUTPUTS, "spk2", 0.3);
}
-
-WRITE8_MEMBER(mw8080bw_state::bowler_audio_3_w)
+void invad2ct_audio_device::device_start()
{
- /* regardless of the data, enable BALL HITS PIN 1 sound
- (top circuit on the schematics) */
}
-WRITE8_MEMBER(mw8080bw_state::bowler_audio_4_w)
-{
- /* regardless of the data, enable BALL HITS PIN 2 sound
- (bottom circuit on the schematics) */
-}
+/*************************************
+ *
+ * Tornado Baseball
+ *
+ *************************************/
+#define TORNBASE_SQUAREW_240 NODE_01
+#define TORNBASE_SQUAREW_960 NODE_02
+#define TORNBASE_SQUAREW_120 NODE_03
-WRITE8_MEMBER(mw8080bw_state::bowler_audio_5_w)
+#define TORNBASE_TONE_240_EN NODE_04
+#define TORNBASE_TONE_960_EN NODE_05
+#define TORNBASE_TONE_120_EN NODE_06
+
+#define TORNBASE_TONE_240_SND NODE_07
+#define TORNBASE_TONE_960_SND NODE_08
+#define TORNBASE_TONE_120_SND NODE_09
+#define TORNBASE_TONE_SND NODE_10
+#define TORNBASE_TONE_SND_FILT NODE_11
+
+
+static DISCRETE_SOUND_START(tornbase_discrete)
+
+ /* the 3 enable lines coming out of the 74175 flip-flop at G5 */
+ DISCRETE_INPUT_LOGIC(TORNBASE_TONE_240_EN) /* pin 2 */
+ DISCRETE_INPUT_LOGIC(TORNBASE_TONE_960_EN) /* pin 7 */
+ DISCRETE_INPUT_LOGIC(TORNBASE_TONE_120_EN) /* pin 5 */
+
+ /* 3 different freq square waves (240, 960 and 120Hz).
+ Originates from the CPU board via an edge connector.
+ The wave is in the 0/+1 range */
+ DISCRETE_SQUAREWFIX(TORNBASE_SQUAREW_240, 1, 240, 1.0, 50.0, 1.0/2, 0) /* pin X */
+ DISCRETE_SQUAREWFIX(TORNBASE_SQUAREW_960, 1, 960, 1.0, 50.0, 1.0/2, 0) /* pin Y */
+ DISCRETE_SQUAREWFIX(TORNBASE_SQUAREW_120, 1, 120, 1.0, 50.0, 1.0/2, 0) /* pin V */
+
+ /* 7403 O/C NAND gate at G6. 3 of the 4 gates used with their outputs tied together */
+ DISCRETE_LOGIC_NAND(TORNBASE_TONE_240_SND, TORNBASE_SQUAREW_240, TORNBASE_TONE_240_EN) /* pins 4,5,6 */
+ DISCRETE_LOGIC_NAND(TORNBASE_TONE_960_SND, TORNBASE_SQUAREW_960, TORNBASE_TONE_960_EN) /* pins 2,1,3 */
+ DISCRETE_LOGIC_NAND(TORNBASE_TONE_120_SND, TORNBASE_SQUAREW_120, TORNBASE_TONE_120_EN) /* pins 13,12,11 */
+ DISCRETE_LOGIC_AND3(TORNBASE_TONE_SND, TORNBASE_TONE_240_SND, TORNBASE_TONE_960_SND, TORNBASE_TONE_120_SND)
+
+ /* 47K resistor (R601) and 0.047uF capacitor (C601)
+ There is also a 50K pot acting as a volume control, but we output at
+ the maximum volume as MAME has its own volume adjustment */
+ DISCRETE_CRFILTER(TORNBASE_TONE_SND_FILT, TORNBASE_TONE_SND, RES_K(47), CAP_U(0.047))
+
+ /* amplify for output */
+ DISCRETE_OUTPUT(TORNBASE_TONE_SND_FILT, 32767)
+
+DISCRETE_SOUND_END
+
+
+void mw8080bw_state::tornbase_audio(machine_config &config)
{
- /* not sure, appears to me trigerred alongside the two
- BALL HITS PIN sounds */
+ SPEAKER(config, "mono").front_center();
+ DISCRETE(config, m_discrete, tornbase_discrete);
+ m_discrete->add_route(ALL_OUTPUTS, "mono", 1);
}
-WRITE8_MEMBER(mw8080bw_state::bowler_audio_6_w)
+WRITE8_MEMBER(mw8080bw_state::tornbase_audio_w)
{
- /* D0 is not connected */
+ m_discrete->write(TORNBASE_TONE_240_EN, (data >> 0) & 0x01);
- /* D3 is not connected */
+ m_discrete->write(TORNBASE_TONE_960_EN, (data >> 1) & 0x01);
- /* D6 and D7 are not connected */
+ m_discrete->write(TORNBASE_TONE_120_EN, (data >> 2) & 0x01);
- /* D1, D2, D4 and D5 have something to do with a chime circuit.
- D1 and D4 are HI when a 'strike' happens, and D2 and D5 are
- HI on a 'spare' */
+ /* if (data & 0x08) enable SIREN sound */
+
+ /* if (data & 0x10) enable CHEER sound */
+
+ if (tornbase_get_cabinet_type() == TORNBASE_CAB_TYPE_UPRIGHT_OLD)
+ {
+ /* if (data & 0x20) enable WHISTLE sound */
+
+ /* D6 is not connected on this cabinet type */
+ }
+ else
+ {
+ /* D5 is not connected on this cabinet type */
+
+ /* if (data & 0x40) enable WHISTLE sound */
+ }
+
+ machine().bookkeeping().coin_counter_w(0, (data >> 7) & 0x01);
}
/*************************************
*
- * Space Invaders
- *
- * Author : Tormod Tjaberg
- * Created : 1997-04-09
- * Description : Sound routines for the 'invaders' games
- *
- * Note:
- * The samples were taken from Michael Strutt's (mstrutt@pixie.co.za)
- * excellent space invader emulator and converted to signed samples so
- * they would work under SEAL. The port info was also gleaned from
- * his emulator. These sounds should also work on all the invader games.
- *
- * Discrete sound emulation:
- * Apr 2007, D.R.
+ * 280 ZZZAP / Laguna Racer
*
*************************************/
-static const char *const invaders_sample_names[] =
-{
- "*invaders",
- "1", /* shot/missle */
- "2", /* base hit/explosion */
- "3", /* invader hit */
- "4", /* fleet move 1 */
- "5", /* fleet move 2 */
- "6", /* fleet move 3 */
- "7", /* fleet move 4 */
- "8", /* UFO/saucer hit */
- "9", /* bonus base */
- nullptr
-};
+void mw8080bw_state::zzzap_audio(machine_config &config)
+{
+ SPEAKER(config, "mono").front_center();
+}
-/* left in for all games that hack into invaders samples for audio */
-void mw8080bw_state::invaders_samples_audio(machine_config &config)
+WRITE8_MEMBER(mw8080bw_state::zzzap_audio_1_w)
{
- MCFG_SOUND_START_OVERRIDE(mw8080bw_state, samples)
+ /* set ENGINE SOUND FREQ(data & 0x0f) the value written is
+ the gas pedal position */
- SPEAKER(config, "mono").front_center();
+ /* if (data & 0x10) enable HI SHIFT engine sound modifier */
- SN76477(config, m_sn);
- m_sn->set_noise_params(0, 0, 0);
- m_sn->set_decay_res(0);
- m_sn->set_attack_params(0, RES_K(100));
- m_sn->set_amp_res(RES_K(56));
- m_sn->set_feedback_res(RES_K(10));
- m_sn->set_vco_params(0, CAP_U(0.1), RES_K(8.2));
- m_sn->set_pitch_voltage(5.0);
- m_sn->set_slf_params(CAP_U(1.0), RES_K(120));
- m_sn->set_oneshot_params(0, 0);
- m_sn->set_vco_mode(1);
- m_sn->set_mixer_params(0, 0, 0);
- m_sn->set_envelope_params(1, 0);
- m_sn->set_enable(1);
- m_sn->add_route(ALL_OUTPUTS, "mono", 0.5);
+ /* if (data & 0x20) enable LO SHIFT engine sound modifier */
- SAMPLES(config, m_samples);
- m_samples->set_channels(6);
- m_samples->set_samples_names(invaders_sample_names);
- m_samples->add_route(ALL_OUTPUTS, "mono", 1.0);
+ /* D6 and D7 are not connected */
}
+WRITE8_MEMBER(mw8080bw_state::zzzap_audio_2_w)
+{
+ /* if (data & 0x01) enable BOOM sound */
+
+ /* if (data & 0x02) enable ENGINE sound (global) */
+
+ /* if (data & 0x04) enable CR 1 (screeching sound) */
+
+ /* if (data & 0x08) enable NOISE CR 2 (happens only after the car blows up, but
+ before it appears again, not sure what
+ it is supposed to sound like) */
+
+ machine().bookkeeping().coin_counter_w(0, (data >> 5) & 0x01);
+
+ /* D4, D6 and D7 are not connected */
+}
+
+
+
+/*************************************
+ *
+ * Amazing Maze
+ *
+ * Discrete sound emulation: Feb 2007, D.R.
+ *
+ *************************************/
+
/* nodes - inputs */
-#define INVADERS_SAUCER_HIT_EN 01
-#define INVADERS_FLEET_DATA 02
-#define INVADERS_BONUS_MISSLE_BASE_EN 03
-#define INVADERS_INVADER_HIT_EN 04
-#define INVADERS_EXPLOSION_EN 05
-#define INVADERS_MISSILE_EN 06
+#define MAZE_P1_DATA NODE_01
+#define MAZE_P2_DATA NODE_02
+#define MAZE_TONE_TIMING NODE_03
+#define MAZE_COIN NODE_04
+
+/* nodes - other */
+#define MAZE_JOYSTICK_IN_USE NODE_11
+#define MAZE_AUDIO_ENABLE NODE_12
+#define MAZE_TONE_ENABLE NODE_13
+#define MAZE_GAME_OVER NODE_14
+#define MAZE_R305_306_308 NODE_15
+#define MAZE_R303_309 NODE_16
+#define MAZE_PLAYER_SEL NODE_17
/* nodes - sounds */
-#define INVADERS_NOISE NODE_10
-#define INVADERS_SAUCER_HIT_SND 11
-#define INVADERS_FLEET_SND 12
-#define INVADERS_BONUS_MISSLE_BASE_SND 13
-#define INVADERS_INVADER_HIT_SND 14
-#define INVADERS_EXPLOSION_SND 15
-#define INVADERS_MISSILE_SND 16
+#define MAZE_SND NODE_18
-static const discrete_op_amp_info invaders_saucer_hit_op_amp_B3_9 =
+static const discrete_555_desc maze_555_F2 =
{
- DISC_OP_AMP_IS_NORTON,
- 0, /* no r1 */
- RES_K(100), /* R72 */
- RES_M(1), /* R71 */
- 0, /* no r4 */
- CAP_U(1), /* C23 */
- 0, /* vN */
- 12 /* vP */
+ DISC_555_OUT_SQW | DISC_555_OUT_DC | DISC_555_TRIGGER_IS_LOGIC | DISC_555_TRIGGER_DISCHARGES_CAP,
+ 5, /* B+ voltage of 555 */
+ DEFAULT_555_VALUES
};
-static const discrete_op_amp_osc_info invaders_saucer_hit_osc =
+static const double maze_74147_table[] =
{
- DISC_OP_AMP_OSCILLATOR_1 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_CAP,
- RES_M(1), /* R70 */
- RES_K(470), /* R64 */
- RES_K(100), /* R61 */
- RES_K(120), /* R63 */
- RES_M(1), /* R62 */
- 0, /* no r6 */
- 0, /* no r7 */
- 0, /* no r8 */
- CAP_U(0.1), /* C21 */
- 12, /* vP */
+ 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 1, 1, 2, 3
};
-static const discrete_op_amp_osc_info invaders_saucer_hit_vco =
+
+static const discrete_comp_adder_table maze_r305_306_308 =
{
- DISC_OP_AMP_OSCILLATOR_VCO_1 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_SQW,
- RES_M(1), /* R65 */
- RES_K(470), /* R66 */
- RES_K(680), /* R67 */
- RES_M(1), /* R69*/
- RES_M(1), /* R68 */
- 0, /* no r6 */
- 0, /* no r7 */
- 0, /* no r8 */
- CAP_P(470), /* C22 */
- 12, /* vP */
+ DISC_COMP_P_RESISTOR, /* type of circuit */
+ RES_K(100), /* R308 */
+ 2, /* length */
+ { RES_M(1.5), /* R304 */
+ RES_K(820) } /* R304 */
};
-static const discrete_op_amp_info invaders_saucer_hit_op_amp_B3_10 =
+static const discrete_comp_adder_table maze_r303_309 =
{
- DISC_OP_AMP_IS_NORTON,
- RES_K(680), /* R73 */
- RES_K(680), /* R77 */
- RES_M(2.7), /* R74 */
- RES_K(680), /* R75 */
- 0, /* no c */
- 0, /* vN */
- 12 /* vP */
+ DISC_COMP_P_RESISTOR, /* type of circuit */
+ RES_K(330), /* R309 */
+ 1, /* length */
+ { RES_M(1) } /* R303 */
};
-static const discrete_comp_adder_table invaders_thump_resistors =
+static const discrete_op_amp_osc_info maze_op_amp_osc =
{
- DISC_COMP_P_RESISTOR,
- 0, /* no cDefault */
- 4, /* length */
- { RES_K(20) + RES_K(20), /* R126 + R127 */
- RES_K(68), /* R128 */
- RES_K(82), /* R129 */
- RES_K(100) } /* R130 */
+ DISC_OP_AMP_OSCILLATOR_1 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_SQW, /* type */
+ RES_M(1), /* R306 */
+ RES_K(430), /* R307 */
+ MAZE_R305_306_308, /* R304, R305, R308 switchable circuit */
+ MAZE_R303_309, /* R303, R309 switchable circuit */
+ RES_K(330), /* R310 */
+ 0, 0, 0, /* not used */
+ CAP_P(3300), /* C300 */
+ 5 /* vP */
};
-static const discrete_555_desc invaders_thump_555 =
+static DISCRETE_SOUND_START(maze_discrete)
+
+ /************************************************
+ * Input register mapping
+ ************************************************/
+ DISCRETE_INPUT_DATA (MAZE_P1_DATA)
+ DISCRETE_INPUT_DATA (MAZE_P2_DATA)
+ DISCRETE_INPUT_LOGIC(MAZE_TONE_TIMING)
+ DISCRETE_INPUT_LOGIC(MAZE_COIN)
+ DISCRETE_INPUT_LOGIC(MAZE_JOYSTICK_IN_USE) /* IC D2, pin 8 */
+
+ /* The following circuits control when audio is heard. */
+ /* Basically there is sound for 30s after a coin is inserted. */
+ /* This time is extended whenever a control is pressed. */
+ /* After the 30s has expired, there is no sound until the next coin is inserted. */
+ /* There is also sound for the first 30s after power up even without a coin. */
+ DISCRETE_LOGIC_INVERT(NODE_20, /* IC E2, pin 8 */
+ MAZE_JOYSTICK_IN_USE) /* IN0 */
+ DISCRETE_555_MSTABLE(MAZE_GAME_OVER, /* IC F2, pin 3 */
+ 1, /* RESET */
+ NODE_20, /* TRIG */
+ RES_K(270), /* R203 */
+ CAP_U(100), /* C204 */
+ &maze_555_F2)
+ DISCRETE_LOGIC_JKFLIPFLOP(MAZE_AUDIO_ENABLE,/* IC F1, pin 5 */
+ MAZE_COIN, /* RESET */
+ 1, /* SET */
+ MAZE_GAME_OVER, /* CLK */
+ 1, /* J */
+ 0) /* K */
+ DISCRETE_LOGIC_INVERT(MAZE_TONE_ENABLE, /* IC F1, pin 6 */
+ MAZE_AUDIO_ENABLE) /* IN0 */
+ DISCRETE_LOGIC_AND3(NODE_21,
+ MAZE_JOYSTICK_IN_USE, /* INP0 */
+ MAZE_TONE_ENABLE, /* INP1 */
+ MAZE_TONE_TIMING) /* INP2 */
+
+ /* The following circuits use the control info to generate a tone. */
+ DISCRETE_LOGIC_JKFLIPFLOP(MAZE_PLAYER_SEL, /* IC C1, pin 3 */
+ 1, /* RESET */
+ 1, /* SET */
+ MAZE_TONE_TIMING, /* CLK */
+ 1, /* J */
+ 1) /* K */
+ DISCRETE_MULTIPLEX2(NODE_31, /* IC D1 */
+ MAZE_PLAYER_SEL, /* ADDR */
+ MAZE_P1_DATA, /* INP0 */
+ MAZE_P2_DATA) /* INP1 */
+ DISCRETE_LOOKUP_TABLE(NODE_32, /* IC E1 */
+ NODE_31, /* ADDR */
+ 16, /* SIZE */
+ &maze_74147_table)
+ DISCRETE_COMP_ADDER(MAZE_R305_306_308, /* value of selected parallel circuit R305, R306, R308 */
+ NODE_32, /* DATA */
+ &maze_r305_306_308)
+ DISCRETE_COMP_ADDER(MAZE_R303_309, /* value of selected parallel circuit R303, R309 */
+ MAZE_PLAYER_SEL, /* DATA */
+ &maze_r303_309)
+ DISCRETE_OP_AMP_OSCILLATOR(NODE_36, /* IC J1, pin 4 */
+ 1, /* ENAB */
+ &maze_op_amp_osc)
+
+ /* The following circuits remove DC poping noises when the tone is switched in/out. */
+ DISCRETE_CRFILTER_VREF(NODE_40,
+ NODE_36, /* IN0 */
+ RES_K(250), /* R311, R312, R402, R403 in parallel */
+ CAP_U(0.1), /* c301 */
+ 2.5) /* center voltage of R311, R312 */
+ DISCRETE_SWITCH(NODE_41, /* IC H3, pin 10 */
+ 1, /* ENAB */
+ NODE_21, /* switch */
+ 2.5, /* INP0 - center voltage of R402, R403 */
+ NODE_40) /* INP1 */
+ DISCRETE_CRFILTER(NODE_42,
+ NODE_41, /* IN0 */
+ RES_K(56 + 390), /* R404 + R405 */
+ CAP_P(0.01) ) /* C401 */
+ DISCRETE_RCFILTER(NODE_43,
+ NODE_42, /* IN0 */
+ RES_K(56), /* R404 */
+ CAP_P(4700) ) /* C400 */
+ DISCRETE_SWITCH(MAZE_SND, /* H3 saturates op-amp J3 when enabled, disabling audio */
+ 1, /* ENAB */
+ MAZE_AUDIO_ENABLE, /* SWITCH */
+ NODE_43, /* INP0 */
+ 0) /* INP1 */
+
+ DISCRETE_OUTPUT(MAZE_SND, 96200)
+DISCRETE_SOUND_END
+
+
+void mw8080bw_state::maze_audio(machine_config &config)
{
- DISC_555_OUT_ENERGY | DISC_555_OUT_DC,
- 5,
- 5.0 - 0.6, /* 5V - diode drop */
- DEFAULT_TTL_V_LOGIC_1 /* Output of F3 7411 buffer */
-};
+ SPEAKER(config, "mono").front_center();
+ DISCRETE(config, m_discrete, maze_discrete);
+ m_discrete->add_route(ALL_OUTPUTS, "mono", 1.0);
+}
-static const discrete_555_desc invaders_bonus_555 =
+void mw8080bw_state::maze_write_discrete(uint8_t maze_tone_timing_state)
{
- DISC_555_OUT_SQW | DISC_555_OUT_DC,
- 5.0, /* 5V */
- DEFAULT_555_VALUES
-};
+ /* controls need to be active low */
+ int controls = ~ioport("IN0")->read() & 0xff;
+ m_discrete->write(MAZE_TONE_TIMING, maze_tone_timing_state);
+ m_discrete->write(MAZE_P1_DATA, controls & 0x0f);
+ m_discrete->write(MAZE_P2_DATA, (controls >> 4) & 0x0f);
+ m_discrete->write(MAZE_JOYSTICK_IN_USE, controls != 0xff);
-static const discrete_op_amp_1sht_info invaders_invader_hit_1sht =
+ /* The coin line is connected directly to the discrete circuit. */
+ /* We can't really do that, so updating it with the tone timing is close enough. */
+ /* A better option might be to update it at vblank or set a timer to do it. */
+ /* The only noticeable difference doing it here, is that the controls don't */
+ /* immediately start making tones if pressed right after the coin is inserted. */
+ m_discrete->write(MAZE_COIN, (~ioport("IN1")->read() >> 3) & 0x01);
+}
+
+
+
+/*************************************
+ *
+ * Checkmate
+ *
+ *************************************/
+
+/* nodes - inputs */
+#define CHECKMAT_BOOM_EN NODE_01
+#define CHECKMAT_TONE_EN NODE_02
+#define CHECKMAT_TONE_DATA_45 NODE_03
+#define CHECKMAT_TONE_DATA_67 NODE_04
+
+/* nodes - other */
+#define CHECKMAT_R401_402_400 NODE_06
+#define CHECKMAT_R407_406_410 NODE_07
+
+/* nodes - sounds */
+#define CHECKMAT_BOOM_SND NODE_10
+#define CHECKMAT_TONE_SND NODE_11
+#define CHECKMAT_FINAL_SND NODE_12
+
+/* nodes - adjusters */
+#define CHECKMAT_R309 NODE_15
+#define CHECKMAT_R411 NODE_16
+
+
+static const discrete_comp_adder_table checkmat_r401_402_400 =
{
- DISC_OP_AMP_1SHT_1 | DISC_OP_AMP_IS_NORTON,
- RES_M(4.7), /* R49 */
- RES_K(100), /* R51 */
- RES_M(1), /* R48 */
- RES_M(1), /* R50 */
- RES_M(2.2), /* R52 */
- CAP_U(0.1), /* C18 */
- CAP_P(470), /* C20 */
- 0, /* vN */
- 12 /* vP */
+ DISC_COMP_P_RESISTOR, /* type of circuit */
+ RES_K(100), /* R401 */
+ 2, /* length */
+ { RES_M(1.5), /* R402 */
+ RES_K(820) } /* R400 */
};
-static const discrete_op_amp_info invaders_invader_hit_op_amp_D3_10 =
+static const discrete_comp_adder_table checkmat_r407_406_410 =
{
- DISC_OP_AMP_IS_NORTON,
- 0, /* no r1 */
- RES_K(10), /* R53 */
- RES_M(1), /* R137 */
- 0, /* no r4 */
- CAP_U(0.47), /* C19 */
- 0, /* vN */
- 12 /* vP */
+ DISC_COMP_P_RESISTOR, /* type of circuit */
+ RES_K(330), /* R407 */
+ 2, /* length */
+ { RES_M(1), /* R406 */
+ RES_K(510) } /* R410 */
};
-static const discrete_op_amp_osc_info invaders_invader_hit_osc =
+static const discrete_op_amp_osc_info checkmat_op_amp_osc =
{
- DISC_OP_AMP_OSCILLATOR_1 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_CAP,
- RES_M(1), /* R37 */
- RES_K(10), /* R41 */
- RES_K(100), /* R38 */
- RES_K(120), /* R40 */
- RES_M(1), /* R39 */
- 0, /* no r6 */
- 0, /* no r7 */
- 0, /* no r8 */
- CAP_U(0.1), /* C16 */
- 12, /* vP */
+ DISC_OP_AMP_OSCILLATOR_1 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_SQW, /* type */
+ RES_M(1), /* R403 */
+ RES_K(430), /* R405 */
+ CHECKMAT_R401_402_400, /* R401, R402, R400 switchable circuit */
+ CHECKMAT_R407_406_410, /* R407, R406, R410 switchable circuit */
+ RES_K(330), /* R404 */
+ 0, 0, 0, /* not used */
+ CAP_P(3300), /* C400 */
+ 5 /* vP */
};
-static const discrete_op_amp_osc_info invaders_invader_hit_vco =
+static const discrete_op_amp_tvca_info checkmat_op_amp_tvca =
{
- DISC_OP_AMP_OSCILLATOR_VCO_1 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_CAP,
- RES_M(1), /* R42 */
- RES_K(470), /* R43 */
- RES_K(680), /* R44 */
- RES_M(1), /* R46 */
- RES_M(1), /* R45 */
- 0, /* no r6 */
- 0, /* no r7 */
- 0, /* no r8 */
- CAP_P(330), /* C16 */
- 12, /* vP */
+ RES_M(1.2), /* R302 */
+ RES_M(1), /* R305 */
+ 0, /* r3 - not used */
+ RES_M(1.2), /* R304 */
+ RES_K(1), /* M4 */
+ 0, /* r6 - not used */
+ RES_M(1), /* R303 */
+ 0, /* r8 - not used */
+ 0, /* r9 - not used */
+ 0, /* r10 - not used */
+ 0, /* r11 - not used */
+ CAP_U(1), /* C300 */
+ 0, /* c2 - not used */
+ 0, 0, /* c3, c4 - not used */
+ 5, /* v1 */
+ 0, /* v2 */
+ 0, /* v3 */
+ 5, /* vP */
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* f0 - not used */
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* f1 - not used */
+ DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, /* f2 */
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* f3 - not used */
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* f4 - not used */
+ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* f5 - not used */
};
-static const discrete_op_amp_info invaders_invader_hit_op_amp_D3_4 =
+static const discrete_mixer_desc checkmat_mixer =
{
- DISC_OP_AMP_IS_NORTON,
- RES_K(470), /* R55 */
- RES_K(680), /* R54 */
- RES_M(2.7), /* R56 */
- RES_K(680), /* R57 */
- 0, /* no c */
- 0, /* vN */
- 12 /* vP */
+ DISC_MIXER_IS_OP_AMP, /* type */
+ { RES_K(100), /* R308 - VERIFY - can't read schematic */
+ RES_K(56 + 47) }, /* R412 + R408 */
+ { CHECKMAT_R309, /* R309 */
+ CHECKMAT_R411}, /* R411 */
+ { CAP_U(10), /* C305 */
+ CAP_U(0.01) }, /* C401 */
+ 0, /* rI - not used */
+ RES_K(100), /* R507 */
+ 0, /* cF - not used */
+ CAP_U(1), /* C505 */
+ 0, /* vRef - GND */
+ 1 /* gain */
};
+static DISCRETE_SOUND_START(checkmat_discrete)
+
+ /************************************************
+ * Input register mapping
+ ************************************************/
+ DISCRETE_INPUT_LOGIC(CHECKMAT_BOOM_EN)
+ DISCRETE_INPUT_LOGIC(CHECKMAT_TONE_EN)
+ DISCRETE_INPUT_DATA (CHECKMAT_TONE_DATA_45)
+ DISCRETE_INPUT_DATA (CHECKMAT_TONE_DATA_67)
+
+ /* The low value of the resistors are tweaked to give a good volume range. */
+ /* This is needed because the original controls are infinite, but the UI only gives 100 steps. */
+ /* Also real variable resistors never hit 0 ohms. There is always some resistance. */
+ /* R309 mostly just increases the Boom clipping, making it sound bassier. */
+ DISCRETE_ADJUSTMENT(CHECKMAT_R309, RES_K(100), 1000, DISC_LOGADJ, "R309")
+ DISCRETE_ADJUSTMENT(CHECKMAT_R411, RES_M(1), 1000, DISC_LOGADJ, "R411")
+
+ /************************************************
+ * Boom Sound
+ *
+ * The zener diode noise source is hard to
+ * emulate. Guess for now.
+ ************************************************/
+ /* FIX - find noise freq and amplitude */
+ DISCRETE_NOISE(NODE_20,
+ 1, /* ENAB */
+ 1500, /* FREQ */
+ 2, /* AMP */
+ 0) /* BIAS */
+ DISCRETE_OP_AMP_TRIG_VCA(NODE_21,
+ CHECKMAT_BOOM_EN, /* TRG0 */
+ 0, /* TRG1 - not used */
+ 0, /* TRG2 - not used */
+ NODE_20, /* IN0 */
+ 0, /* IN1 - not used */
+ &checkmat_op_amp_tvca)
+ /* The next 5 modules emulate the filter. */
+ DISCRETE_FILTER2(NODE_23,
+ 1, /* ENAB */
+ NODE_21, /* INP0 */
+ 35, /* FREQ */
+ 1.0 / 8, /* DAMP */
+ DISC_FILTER_BANDPASS)
+ DISCRETE_GAIN(NODE_24,
+ NODE_23, /* IN0 */
+ 15) /* GAIN */
+ DISCRETE_CLAMP(CHECKMAT_BOOM_SND, /* IC Q2/3, pin 10 */
+ NODE_24, /* IN0 */
+ 0 - 6, /* MIN */
+ 12.0 - OP_AMP_NORTON_VBE -6)/* MAX */
+
+ /************************************************
+ * Tone generator
+ ************************************************/
+ DISCRETE_COMP_ADDER(CHECKMAT_R401_402_400, /* value of selected parallel circuit R401, R402, R400 */
+ CHECKMAT_TONE_DATA_45, /* DATA */
+ &checkmat_r401_402_400)
+ DISCRETE_COMP_ADDER(CHECKMAT_R407_406_410, /* value of selected parallel circuit R407, R406, R410 */
+ CHECKMAT_TONE_DATA_67, /* DATA */
+ &checkmat_r407_406_410)
+ DISCRETE_OP_AMP_OSCILLATOR(NODE_30, /* IC N3/4, pin 4 */
+ 1, /* ENAB */
+ &checkmat_op_amp_osc)
+
+ /* The following circuits remove DC poping noises when the tone is switched in/out. */
+ DISCRETE_CRFILTER_VREF(NODE_31,
+ NODE_30, /* IN0 */
+ RES_K(250), /* R409, R415, R414, R413 in parallel */
+ CAP_U(0.1), /* c401 */
+ 2.5) /* center voltage of R409, R415 */
+ DISCRETE_SWITCH(NODE_32, /* IC R3/4, pin 9 */
+ 1, /* ENAB */
+ CHECKMAT_TONE_EN, /* switch */
+ 2.5, /* INP0 - center voltage of R413, R414 */
+ NODE_31) /* INP1 */
+ DISCRETE_CRFILTER(NODE_33,
+ NODE_32, /* IN0 */
+ RES_K(56 + 47 + 200), /* R412 + R408 + part of R411 */
+ CAP_P(0.01) ) /* C404 */
+ DISCRETE_RCFILTER(CHECKMAT_TONE_SND,
+ NODE_33, /* IN0 */
+ RES_K(56), /* R412 */
+ CAP_P(4700) ) /* C403 */
-static const discrete_op_amp_1sht_info invaders_explosion_1sht =
+ /************************************************
+ * Final mix and output
+ ************************************************/
+ DISCRETE_MIXER2(CHECKMAT_FINAL_SND,
+ 1, /* ENAB */
+ CHECKMAT_BOOM_SND, /* IN0 */
+ CHECKMAT_TONE_SND, /* IN1 */
+ &checkmat_mixer)
+ DISCRETE_OUTPUT(CHECKMAT_FINAL_SND, 300000)
+DISCRETE_SOUND_END
+
+
+void mw8080bw_state::checkmat_audio(machine_config &config)
{
- DISC_OP_AMP_1SHT_1 | DISC_OP_AMP_IS_NORTON,
- RES_M(4.7), /* R90 */
- RES_K(100), /* R88 */
- RES_M(1), /* R91 */
- RES_M(1), /* R89 */
- RES_M(2.2), /* R92 */
- CAP_U(2.2), /* C24 */
- CAP_P(470), /* C25 */
- 0, /* vN */
- 12 /* vP */
-};
+ SPEAKER(config, "mono").front_center();
+ DISCRETE(config, m_discrete, checkmat_discrete);
+ m_discrete->add_route(ALL_OUTPUTS, "mono", 0.4);
+}
-static const discrete_op_amp_tvca_info invaders_explosion_tvca =
+WRITE8_MEMBER(mw8080bw_state::checkmat_audio_w)
{
- RES_M(2.7), /* R80 */
- RES_K(680), /* R79 */
- 0, /* no r3 */
- RES_K(680), /* R82 */
- RES_K(10), /* R93 */
- 0, /* no r6 */
- RES_K(680), /* R83 */
- 0, /* no r8 */
- 0, /* no r9 */
- 0, /* no r10 */
- 0, /* no r11 */
- CAP_U(1), /* C26 */
- 0, /* no c2 */
- 0, 0, /* no c3, c4 */
- 12.0 - OP_AMP_NORTON_VBE, /* v1 */
- 0, /* no v2 */
- 0, /* no v3 */
- 12, /* vP */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* no f0 */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* no f1 */
- DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, /* f2 */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* no f3 */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE, /* no f4 */
- DISC_OP_AMP_TRIGGER_FUNCTION_NONE /* no f5 */
-};
+ m_discrete->write(CHECKMAT_TONE_EN, data & 0x01);
+
+ m_discrete->write(CHECKMAT_BOOM_EN, (data >> 1) & 0x01);
+
+ machine().bookkeeping().coin_counter_w(0, (data >> 2) & 0x01);
+
+ machine().sound().system_enable((data >> 3) & 0x01);
+
+ m_discrete->write(CHECKMAT_TONE_DATA_45, (data >> 4) & 0x03);
+ m_discrete->write(CHECKMAT_TONE_DATA_67, (data >> 6) & 0x03);
+}
+
+
+
+/*************************************
+ *
+ * Shuffleboard
+ *
+ * Discrete sound emulation: Oct 2009, D.R.
+ *
+ *************************************/
+
+ /* Discrete Sound Input Nodes */
+#define SHUFFLE_ROLLING_1_EN NODE_01
+#define SHUFFLE_ROLLING_2_EN NODE_02
+#define SHUFFLE_ROLLING_3_EN NODE_03
+#define SHUFFLE_FOUL_EN NODE_04
+#define SHUFFLE_ROLLOVER_EN NODE_05
+#define SHUFFLE_CLICK_EN NODE_06
+
+/* Discrete Sound Output Nodes */
+#define SHUFFLE_NOISE NODE_10
+#define SHUFFLE_ROLLING_SND NODE_11
+#define SHUFFLE_FOUL_SND NODE_12
+#define SHUFFLE_ROLLOVER_SND NODE_13
+#define SHUFFLE_CLICK_SND NODE_14
+
+/* Parts List - Resistors */
+#define SHUFFLE_R300 RES_K(33)
+#define SHUFFLE_R400 RES_K(200)
+#define SHUFFLE_R401 RES_K(3)
+#define SHUFFLE_R402 RES_K(5.6)
+#define SHUFFLE_R403 RES_K(5.6)
+#define SHUFFLE_R404 RES_M(1)
+#define SHUFFLE_R406 RES_K(300)
+#define SHUFFLE_R407 RES_K(680)
+#define SHUFFLE_R408 RES_K(680)
+#define SHUFFLE_R409 RES_K(680)
+#define SHUFFLE_R410 RES_K(680)
+#define SHUFFLE_R411 RES_K(680)
+#define SHUFFLE_R412 RES_M(2.7)
+#define SHUFFLE_R500 RES_K(300)
+#define SHUFFLE_R503 RES_M(2.7)
+#define SHUFFLE_R504 RES_K(680)
+#define SHUFFLE_R505 RES_K(680)
+#define SHUFFLE_R506 RES_K(100)
+#define SHUFFLE_R507 RES_K(47)
+#define SHUFFLE_R508 RES_K(47)
+#define SHUFFLE_R509 RES_K(100)
+#define SHUFFLE_R511 RES_M(2)
+#define SHUFFLE_R512 RES_M(5.6)
+#define SHUFFLE_R513 RES_K(680)
+#define SHUFFLE_R514 RES_M(1.5)
+#define SHUFFLE_R515 RES_M(1)
+#define SHUFFLE_R516 RES_K(510)
+
+/* Parts List - Capacitors */
+#define SHUFFLE_C300 CAP_U(0.1)
+#define SHUFFLE_C400 CAP_U(0.1)
+#define SHUFFLE_C401 CAP_U(1)
+#define SHUFFLE_C402 CAP_U(1)
+#define SHUFFLE_C403 CAP_U(1)
+#define SHUFFLE_C404 CAP_U(0.1)
+#define SHUFFLE_C405 CAP_U(0.1)
+#define SHUFFLE_C500 CAP_U(0.1)
+#define SHUFFLE_C503 CAP_U(0.0022)
+#define SHUFFLE_C504 CAP_U(0.0022)
+#define SHUFFLE_C505 CAP_U(0.33)
+#define SHUFFLE_C506 CAP_U(1)
+#define SHUFFLE_C507 CAP_U(1)
+#define SHUFFLE_C508 CAP_U(1)
-static const discrete_op_amp_1sht_info invaders_missle_1sht =
+static const discrete_op_amp_tvca_info shuffle_rolling_tvca =
{
- DISC_OP_AMP_1SHT_1 | DISC_OP_AMP_IS_NORTON,
- RES_M(4.7), /* R32 */
- RES_K(100), /* R30 */
- RES_M(1), /* R31 */
- RES_M(1), /* R33 */
- RES_M(2.2), /* R34 */
- CAP_U(1), /* C12 */
- CAP_P(470), /* C15 */
- 0, /* vN */
- 12 /* vP */
+ SHUFFLE_R512, 0, 0, SHUFFLE_R511, /* r1, r2, r3, r4 */
+ RES_K(10), 0, SHUFFLE_R516, /* r5, r6, r7 */
+ RES_K(10), SHUFFLE_R515, /* r8, r9 */
+ RES_K(10), SHUFFLE_R514, /* r10, r11 */
+ SHUFFLE_C508, SHUFFLE_C507, SHUFFLE_C506, SHUFFLE_C505, /* c1, c2, c3, c4 */
+ 12, 12, 12, 12, /* v1, v2, v3, vP */
+ 0, 0, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, 0, /* f0, f1, f2, f3 */
+ DISC_OP_AMP_TRIGGER_FUNCTION_TRG1, /* f4 */
+ DISC_OP_AMP_TRIGGER_FUNCTION_TRG2 /* f5 */
};
-
-static const discrete_op_amp_info invaders_missle_op_amp_B3 =
+static const discrete_op_amp_info shuffle_rolling_amp =
{
DISC_OP_AMP_IS_NORTON,
- 0, /* no r1 */
- RES_K(10), /* R35 */
- RES_M(1.5), /* R36 */
- 0, /* no r4 */
- CAP_U(0.22), /* C13 */
- 0, /* vN */
- 12 /* vP */
+ SHUFFLE_R513, SHUFFLE_R505, SHUFFLE_R503, SHUFFLE_R504, /* r1, r2, r3, r4 */
+ 0, /* c */
+ 0, 12, /* vN, vP */
};
-
-static const discrete_op_amp_osc_info invaders_missle_op_amp_osc =
+static const discrete_op_amp_tvca_info shuffle_foul_tvca =
{
- DISC_OP_AMP_OSCILLATOR_VCO_3 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_SQW,
- 1.0 / (1.0 / RES_M(1) + 1.0 / RES_K(330)) + RES_M(1.5), /* R29||R11 + R12 */
- RES_M(1), /* R16 */
- RES_K(560), /* R17 */
- RES_M(2.2), /* R19 */
- RES_M(1), /* R16 */
- RES_M(4.7), /* R14 */
- RES_M(3.3), /* R13 */
- 0, /* no r8 */
- CAP_P(330), /* C58 */
- 12, /* vP */
+ SHUFFLE_R412, SHUFFLE_R411, 0, SHUFFLE_R408, /* r1, r2, r3, r4 */
+ RES_K(1), 0, SHUFFLE_R406, /* r5, r6, r7 */
+ 0, 0, 0, 0, /* r8, r9, r10, r11 */
+ SHUFFLE_C404, 0, 0, 0, /* c1, c2, c3, c4 */
+ 5, 0, 0, 12, /* v1, v2, v3, vP */
+ 0, 0, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, 0, 0, 0 /* f0, f1, f2, f3, f4, f5 */
};
+static const discrete_op_amp_tvca_info shuffle_rollover_tvca =
+{
+ SHUFFLE_R404, SHUFFLE_R410, 0, SHUFFLE_R407, /* r1, r2, r3, r4 */
+ RES_K(10), 0, SHUFFLE_R409, /* r5, r6, r7 */
+ 0, 0, 0, 0, /* r8, r9, r10, r11 */
+ SHUFFLE_C405, 0, 0, 0, /* c1, c2, c3, c4 */
+ 12, 0, 0, 12, /* v1, v2, v3, vP */
+ 0, 0, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, 0, 0, 0 /* f0, f1, f2, f3, f4, f5 */
+};
-static const discrete_op_amp_info invaders_missle_op_amp_A3 =
+static const discrete_mixer_desc shuffle_mixer =
{
- DISC_OP_AMP_IS_NORTON,
- RES_K(560), /* R22 */
- RES_K(470), /* R15 */
- RES_M(2.7), /* R20 */
- RES_K(560), /* R21 */
- 0, /* no c */
- 0, /* vN */
- 12 /* vP */
+ DISC_MIXER_IS_RESISTOR,
+ {SHUFFLE_R500, SHUFFLE_R400, SHUFFLE_R403 + SHUFFLE_R402 + SHUFFLE_R401, SHUFFLE_R300},
+ {0}, /* r_nodes */
+ {SHUFFLE_C500, SHUFFLE_C400, SHUFFLE_C401, SHUFFLE_C300},
+ 0, 0, 0, 0, 0 ,1 /* rI, rF, cF, cAmp, vRef, gain */
};
-static const discrete_op_amp_tvca_info invaders_missle_tvca =
+static DISCRETE_SOUND_START(shuffle_discrete)
+ DISCRETE_INPUT_LOGIC(SHUFFLE_ROLLING_1_EN)
+ DISCRETE_INPUT_LOGIC(SHUFFLE_ROLLING_2_EN)
+ DISCRETE_INPUT_LOGIC(SHUFFLE_ROLLING_3_EN)
+ DISCRETE_INPUT_LOGIC(SHUFFLE_FOUL_EN)
+ DISCRETE_INPUT_LOGIC(SHUFFLE_ROLLOVER_EN)
+ DISCRETE_INPUTX_LOGIC(SHUFFLE_CLICK_EN, 11.5, 0, 0)
+
+ /* Noise clock was breadboarded and measured at 1210Hz */
+ DISCRETE_LFSR_NOISE(SHUFFLE_NOISE, /* IC N5, pin 10 */
+ 1, 1, /* ENAB, RESET */
+ 1210, 12.0, 0, 12.0 / 2, &midway_lfsr) /* CLK,AMPL,FEED,BIAS,LFSRTB */
+
+ /************************************************
+ * Shuffle rolling
+ ************************************************/
+ DISCRETE_OP_AMP_TRIG_VCA(NODE_20, /* IC P3-4, pin 5 */
+ SHUFFLE_ROLLING_1_EN, SHUFFLE_ROLLING_2_EN, SHUFFLE_ROLLING_3_EN, /* TRG0,TRG1,TRG2 */
+ 0, 0, /*IN0,IN1 */
+ &shuffle_rolling_tvca)
+ DISCRETE_OP_AMP(NODE_21, /* IC P3-4, pin 4 */
+ 1, /* ENAB */
+ SHUFFLE_NOISE, NODE_20, /* IN0,IN1 */
+ &shuffle_rolling_amp)
+ /* filter not accurate */
+ DISCRETE_FILTER1(NODE_22, 1, NODE_21, 800, DISC_FILTER_LOWPASS)
+ DISCRETE_GAIN(SHUFFLE_ROLLING_SND, NODE_22, .2)
+
+ /************************************************
+ * Foul
+ ************************************************/
+ DISCRETE_SQUAREWFIX(NODE_30, /* Connected to edge connector V - 120Hz */
+ 1, 120, DEFAULT_TTL_V_LOGIC_1, 50, DEFAULT_TTL_V_LOGIC_1 / 2, 0) /* ENAB,FREQ,AMP,DUTY,BIAS,PHASE */
+ DISCRETE_OP_AMP_TRIG_VCA(SHUFFLE_FOUL_SND, /* IC M3-4, pin 5 */
+ SHUFFLE_FOUL_EN, 0, 0, /* TRG0,TRG1,TRG2 */
+ NODE_30, 0, /*IN0,IN1 */
+ &shuffle_foul_tvca)
+
+ /************************************************
+ * Shuffle rollover
+ ************************************************/
+ DISCRETE_OP_AMP_TRIG_VCA(NODE_40, /* IC M3-4, pin 4 */
+ SHUFFLE_ROLLOVER_EN, 0, 0, /* TRG0,TRG1,TRG2 */
+ SHUFFLE_NOISE, 0, /*IN0,IN1 */
+ &shuffle_rollover_tvca)
+ DISCRETE_RCFILTER(NODE_41,
+ NODE_40, /* IN0 */
+ SHUFFLE_R403, SHUFFLE_C403)
+ DISCRETE_RCFILTER(SHUFFLE_ROLLOVER_SND,
+ NODE_41, /* IN0 */
+ SHUFFLE_R403 + SHUFFLE_R402, SHUFFLE_C402)
+
+ /************************************************
+ * Click
+ ************************************************/
+ /* filter not accurate */
+ DISCRETE_FILTER1(NODE_50, 1, SHUFFLE_CLICK_EN, 300, DISC_FILTER_LOWPASS)
+ DISCRETE_GAIN(SHUFFLE_CLICK_SND, NODE_50, .3)
+
+ /************************************************
+ * Combine all sound sources.
+ ************************************************/
+ DISCRETE_MIXER4(NODE_90,
+ 1, /* ENAB */
+ SHUFFLE_ROLLING_SND,
+ SHUFFLE_FOUL_SND,
+ SHUFFLE_ROLLOVER_SND,
+ SHUFFLE_CLICK_SND,
+ &shuffle_mixer)
+ DISCRETE_OUTPUT(NODE_90, 59200)
+DISCRETE_SOUND_END
+
+
+void mw8080bw_state::shuffle_audio(machine_config &config)
+{
+ SPEAKER(config, "mono").front_center();
+
+ DISCRETE(config, m_discrete, shuffle_discrete);
+ m_discrete->add_route(ALL_OUTPUTS, "mono", 1.0);
+}
+
+
+WRITE8_MEMBER(mw8080bw_state::shuffle_audio_1_w)
+{
+ m_discrete->write(SHUFFLE_CLICK_EN, (data >> 0) & 0x01);
+
+ m_discrete->write(SHUFFLE_ROLLOVER_EN, (data >> 1) & 0x01);
+
+ machine().sound().system_enable((data >> 2) & 0x01);
+
+ m_discrete->write(NODE_29, (data >> 3) & 0x07);
+
+ m_discrete->write(SHUFFLE_ROLLING_3_EN, (data >> 3) & 0x01);
+ m_discrete->write(SHUFFLE_ROLLING_2_EN, (data >> 4) & 0x01);
+ m_discrete->write(SHUFFLE_ROLLING_1_EN, (data >> 5) & 0x01);
+
+ /* D6 and D7 are not connected */
+}
+
+
+WRITE8_MEMBER(mw8080bw_state::shuffle_audio_2_w)
+{
+ m_discrete->write(SHUFFLE_FOUL_EN, (data >> 0) & 0x01);
+
+ machine().bookkeeping().coin_counter_w(0, (data >> 1) & 0x01);
+
+ /* D2-D7 are not connected */
+}
+
+
+
+/*************************************
+ *
+ * Bowling Alley
+ *
+ * Discrete sound emulation:
+ * Apr 2007, D.R.
+ *
+ *************************************/
+
+/* nodes - inputs */
+#define BOWLER_FOWL_EN NODE_01
+
+/* nodes - sounds */
+#define BOWLER_FOWL_SND NODE_10
+
+
+static const discrete_op_amp_tvca_info bowler_fowl_tvca =
{
- RES_M(2.7), /* R25 */
- RES_K(560), /* R23 */
+ RES_M(2.7), /* R1103 */
+ RES_K(680), /* R1102 */
0, /* no r3 */
- RES_K(560), /* R26 */
- RES_K(1), /* */
+ RES_K(680), /* R1104 */
+ RES_K(1), /* SIP */
0, /* no r6 */
- RES_K(560), /* R60 */
+ RES_K(300), /* R1101 */
0, /* no r8 */
0, /* no r9 */
0, /* no r10 */
0, /* no r11 */
- CAP_U(0.1), /* C14 */
+ CAP_U(0.1), /* C1050 */
0, /* no c2 */
0, 0, /* no c3, c4 */
5, /* v1 */
@@ -3859,305 +4334,115 @@ static const discrete_op_amp_tvca_info invaders_missle_tvca =
};
-static const discrete_mixer_desc invaders_mixer =
-{
- DISC_MIXER_IS_OP_AMP, /* type */
- { RES_K(200), /* R78 */
- RES_K(10) + 100 + 100, /* R134 + R133 + R132 */
- RES_K(150), /* R136 */
- RES_K(200), /* R59 */
- RES_K(2) + RES_K(6.8) + RES_K(5.6), /* R86 + R85 + R84 */
- RES_K(150) }, /* R28 */
- {0}, /* no rNode{} */
- { 0,
- 0,
- 0,
- 0,
- 0,
- CAP_U(0.001) }, /* C11 */
- 0, /* no rI */
- RES_K(100), /* R105 */
- 0, /* no cF */
- CAP_U(0.1), /* C45 */
- 0, /* vRef = ground */
- 1 /* gain */
-};
-
-
-/* sound board 1 or 2, for multi-board games */
-#define INVADERS_NODE(_node, _board) (NODE(_node + ((_board - 1) * 100)))
+static DISCRETE_SOUND_START(bowler_discrete)
-/************************************************
- * Noise Generator
- ************************************************/
-/* Noise clock was breadboarded and measured at 7515 */
-#define INVADERS_NOISE_GENERATOR \
- DISCRETE_LFSR_NOISE(INVADERS_NOISE, /* IC N5, pin 10 */ \
- 1, /* ENAB */ \
- 1, /* no RESET */ \
- 7515, /* CLK in Hz */ \
- 12, /* p-p AMPL */ \
- 0, /* no FEED input */ \
- 12.0/2, /* dc BIAS */ \
- &midway_lfsr)
+ /************************************************
+ * Input register mapping
+ ************************************************/
+ DISCRETE_INPUT_LOGIC(BOWLER_FOWL_EN)
-/************************************************
- * Saucer Hit
- ************************************************/
-#define INVADERS_SAUCER_HIT(_board) \
- DISCRETE_INPUTX_LOGIC(INVADERS_NODE(INVADERS_SAUCER_HIT_EN, _board), 12, 0, 0) \
- DISCRETE_OP_AMP(INVADERS_NODE(20, _board), /* IC B3, pin 9 */ \
- 1, /* ENAB */ \
- 0, /* no IN0 */ \
- INVADERS_NODE(INVADERS_SAUCER_HIT_EN, _board), /* IN1 */ \
- &invaders_saucer_hit_op_amp_B3_9) \
- DISCRETE_OP_AMP_OSCILLATOR(INVADERS_NODE(21, _board), /* IC A4, pin 5 */ \
- 1, /* ENAB */ \
- &invaders_saucer_hit_osc) \
- DISCRETE_OP_AMP_VCO1(INVADERS_NODE(22, _board), /* IC A4, pin 9 */ \
- 1, /* ENAB */ \
- INVADERS_NODE(21, _board), /* VMOD1 */ \
- &invaders_saucer_hit_vco) \
- DISCRETE_OP_AMP(INVADERS_NODE(INVADERS_SAUCER_HIT_SND, _board), /* IC B3, pin 10 */ \
- 1, /* ENAB */ \
- INVADERS_NODE(22, _board), /* IN0 */ \
- INVADERS_NODE(20, _board), /* IN1 */ \
- &invaders_saucer_hit_op_amp_B3_10)
+ /************************************************
+ * Explosion
+ ************************************************/
+ DISCRETE_SQUAREWFIX(NODE_20,
+ 1, /* ENAB */
+ 180, /* FREQ */
+ DEFAULT_TTL_V_LOGIC_1, /* p-p AMP */
+ 50, /* DUTY */
+ DEFAULT_TTL_V_LOGIC_1 / 2, /* dc BIAS */
+ 0) /* PHASE */
+ DISCRETE_OP_AMP_TRIG_VCA(NODE_21, /* IC P3, pin 9 */
+ BOWLER_FOWL_EN, /* TRG0 */
+ 0, /* no TRG1 */
+ 0, /* no TRG2 */
+ NODE_20, /* IN0 */
+ 0, /* no IN1 */
+ &bowler_fowl_tvca)
+ DISCRETE_CRFILTER(BOWLER_FOWL_SND,
+ NODE_21, /* IN0 */
+ RES_K(68), /* R1120 */
+ CAP_U(0.1) ) /* C1048 */
+ DISCRETE_OUTPUT(BOWLER_FOWL_SND, 10000)
+DISCRETE_SOUND_END
-/************************************************
- * Fleet movement
- ************************************************/
-#define INVADERS_FLEET(_board) \
- DISCRETE_INPUT_DATA (INVADERS_NODE(INVADERS_FLEET_DATA, _board)) \
- DISCRETE_COMP_ADDER(INVADERS_NODE(30, _board), \
- INVADERS_NODE(INVADERS_FLEET_DATA, _board), /* DATA */ \
- &invaders_thump_resistors) \
- DISCRETE_555_ASTABLE(INVADERS_NODE(31, _board), /* IC F3, pin 6 */ \
- 1, /* RESET */ \
- INVADERS_NODE(30, _board), /* R1 */ \
- RES_K(75), /* R131 */ \
- CAP_U(0.1), /* C29 */ \
- &invaders_thump_555) \
- DISCRETE_RCFILTER(INVADERS_NODE(32, _board), \
- INVADERS_NODE(31, _board), /* IN0 */ \
- 100, /* R132 */ \
- CAP_U(4.7) ) /* C31 */ \
- DISCRETE_RCFILTER(INVADERS_NODE(INVADERS_FLEET_SND, _board), \
- INVADERS_NODE(32, _board), /* IN0 */ \
- 100 + 100, /* R132 + R133 */ \
- CAP_U(10) ) /* C32 */
+void mw8080bw_state::bowler_audio(machine_config &config)
+{
+ SPEAKER(config, "mono").front_center();
-/************************************************
- * Bonus Missle Base
- ************************************************/
-#define INVADERS_BONUS_MISSLE_BASE(_board) \
- DISCRETE_INPUT_LOGIC (INVADERS_NODE(INVADERS_BONUS_MISSLE_BASE_EN, _board)) \
- DISCRETE_555_ASTABLE(INVADERS_NODE(40, _board), /* IC F4, pin 9 */ \
- INVADERS_NODE(INVADERS_BONUS_MISSLE_BASE_EN, _board),/* RESET */ \
- RES_K(100), /* R94 */ \
- RES_K(47), /* R95 */ \
- CAP_U(1), /* C34 */ \
- &invaders_bonus_555) \
- DISCRETE_SQUAREWFIX(INVADERS_NODE(41, _board), \
- 1, /* ENAB */ \
- 480, /* FREQ */ \
- 1, /* AMP */ \
- 50, /* DUTY */ \
- 1.0/2, /* BIAS */ \
- 0) /* PHASE */ \
- DISCRETE_LOGIC_AND3(INVADERS_NODE(42, _board), /* IC F3, pin 12 */ \
- INVADERS_NODE(INVADERS_BONUS_MISSLE_BASE_EN, _board),/* INP0 */ \
- INVADERS_NODE(41, _board), /* INP1 */ \
- INVADERS_NODE(40, _board) ) /* INP2 */ \
- DISCRETE_GAIN(INVADERS_NODE(INVADERS_BONUS_MISSLE_BASE_SND, _board),/* adjust from logic to TTL voltage level */\
- INVADERS_NODE(42, _board), /* IN0 */ \
- DEFAULT_TTL_V_LOGIC_1) /* GAIN */
+ DISCRETE(config, m_discrete, bowler_discrete);
+ m_discrete->add_route(ALL_OUTPUTS, "mono", 1);
+}
-/************************************************
- * Invader Hit
- ************************************************/
-#define INVADERS_INVADER_HIT(_board, _type) \
- DISCRETE_INPUTX_LOGIC(INVADERS_NODE(INVADERS_INVADER_HIT_EN, _board), 5, 0, 0) \
- DISCRETE_OP_AMP_ONESHOT(INVADERS_NODE(50, _board), /* IC D3, pin 9 */ \
- INVADERS_NODE(INVADERS_INVADER_HIT_EN, _board), /* TRIG */ \
- &_type##_invader_hit_1sht) \
- DISCRETE_OP_AMP(INVADERS_NODE(51, _board), /* IC D3, pin 10 */ \
- 1, /* ENAB */ \
- 0, /* no IN0 */ \
- INVADERS_NODE(50, _board), /* IN1 */ \
- &invaders_invader_hit_op_amp_D3_10) \
- DISCRETE_OP_AMP_OSCILLATOR(INVADERS_NODE(52, _board), /* IC B4, pin 5 */ \
- 1, /* ENAB */ \
- &_type##_invader_hit_osc) \
- DISCRETE_OP_AMP_VCO1(INVADERS_NODE(53, _board), /* IC B4, pin 4 */ \
- 1, /* ENAB */ \
- INVADERS_NODE(52, _board), /* VMOD1 */ \
- &invaders_invader_hit_vco) \
- DISCRETE_OP_AMP(INVADERS_NODE(INVADERS_INVADER_HIT_SND, _board), /* IC D3, pin 4 */ \
- 1, /* ENAB */ \
- INVADERS_NODE(53, _board), /* IN0 */ \
- INVADERS_NODE(51, _board), /* IN1 */ \
- &invaders_invader_hit_op_amp_D3_4)
+WRITE8_MEMBER(mw8080bw_state::bowler_audio_1_w)
+{
+ /* D0 - selects controller on the cocktail PCB */
+ machine().bookkeeping().coin_counter_w(0, (data >> 1) & 0x01);
-/************************************************
- * Explosion
- ************************************************/
-#define INVADERS_EXPLOSION(_board) \
- DISCRETE_INPUTX_LOGIC(INVADERS_NODE(INVADERS_EXPLOSION_EN, _board), 5, 0, 0) \
- DISCRETE_OP_AMP_ONESHOT(INVADERS_NODE(60, _board), /* IC D2, pin 10 */ \
- INVADERS_NODE(INVADERS_EXPLOSION_EN, _board), /* TRIG */ \
- &invaders_explosion_1sht) \
- DISCRETE_OP_AMP_TRIG_VCA(INVADERS_NODE(61, _board), /* IC D2, pin 4 */ \
- INVADERS_NODE(60, _board), /* TRG0 */ \
- 0, /* no TRG1 */ \
- 0, /* no TRG2 */ \
- INVADERS_NOISE, /* IN0 */ \
- 0, /* no IN1 */ \
- &invaders_explosion_tvca) \
- DISCRETE_RCFILTER(INVADERS_NODE(62, _board), \
- INVADERS_NODE(61, _board), /* IN0 */ \
- RES_K(5.6), /* R84 */ \
- CAP_U(0.1) ) /* C27 */ \
- DISCRETE_RCFILTER(INVADERS_NODE(INVADERS_EXPLOSION_SND, _board), \
- INVADERS_NODE(62, _board), /* IN0 */ \
- RES_K(5.6) + RES_K(6.8), /* R84 + R85 */ \
- CAP_U(0.1) ) /* C28 */
+ machine().sound().system_enable((data >> 2) & 0x01);
+ m_discrete->write(BOWLER_FOWL_EN, (data >> 3) & 0x01);
-/************************************************
- * Missle Sound
- ************************************************/
-#define INVADERS_MISSILE(_board, _type) \
- DISCRETE_INPUTX_LOGIC(INVADERS_NODE(INVADERS_MISSILE_EN, _board), 5, 0, 0) \
- DISCRETE_OP_AMP_ONESHOT(INVADERS_NODE(70, _board), /* IC B3, pin 4 */ \
- INVADERS_NODE(INVADERS_MISSILE_EN, _board), /* TRIG */ \
- &_type##_missle_1sht) \
- DISCRETE_OP_AMP(INVADERS_NODE(71, _board), /* IC B3, pin 5 */ \
- 1, /* ENAB */ \
- 0, /* no IN0 */ \
- INVADERS_NODE(70, _board), /* IN1 */ \
- &invaders_missle_op_amp_B3) \
- /* next 2 modules simulate the D1 voltage drop */ \
- DISCRETE_ADDER2(INVADERS_NODE(72, _board), \
- 1, /* ENAB */ \
- INVADERS_NODE(71, _board), /* IN0 */ \
- -0.5) /* IN1 */ \
- DISCRETE_CLAMP(INVADERS_NODE(73, _board), \
- INVADERS_NODE(72, _board), /* IN0 */ \
- 0, /* MIN */ \
- 12) /* MAX */ \
- DISCRETE_CRFILTER(INVADERS_NODE(74, _board), \
- INVADERS_NOISE, /* IN0 */ \
- RES_M(1) + RES_K(330), /* R29, R11 */ \
- CAP_U(0.1) ) /* C57 */ \
- DISCRETE_GAIN(INVADERS_NODE(75, _board), \
- INVADERS_NODE(74, _board), /* IN0 */ \
- RES_K(330)/(RES_M(1) + RES_K(330))) /* GAIN - R29 : R11 */ \
- DISCRETE_OP_AMP_VCO2(INVADERS_NODE(76, _board), /* IC C1, pin 4 */ \
- 1, /* ENAB */ \
- INVADERS_NODE(75, _board), /* VMOD1 */ \
- INVADERS_NODE(73, _board), /* VMOD2 */ \
- &invaders_missle_op_amp_osc) \
- DISCRETE_OP_AMP(INVADERS_NODE(77, _board), /* IC A3, pin 9 */ \
- 1, /* ENAB */ \
- INVADERS_NODE(76, _board), /* IN0 */ \
- INVADERS_NODE(73, _board), /* IN1 */ \
- &invaders_missle_op_amp_A3) \
- DISCRETE_OP_AMP_TRIG_VCA(INVADERS_NODE(INVADERS_MISSILE_SND, _board), /* IC A3, pin 10 */ \
- INVADERS_NODE(INVADERS_MISSILE_EN, _board), /* TRG0 */ \
- 0, /* no TRG1 */ \
- 0, /* no TRG2 */ \
- INVADERS_NODE(77, _board), /* IN0 */ \
- 0, /* no IN1 */ \
- &invaders_missle_tvca)
+ /* D4 - appears to be a screen flip, but it's
+ shown unconnected on the schematics for both the
+ upright and cocktail PCB's */
+ /* D5 - triggered on a 'strike', sound circuit not labeled */
-/************************************************
- * Final mix
- ************************************************/
-#define INVADERS_MIXER(_board, _type) \
- DISCRETE_MIXER6(INVADERS_NODE(90, _board), \
- 1, /* ENAB */ \
- INVADERS_NODE(INVADERS_SAUCER_HIT_SND, _board), /* IN0 */ \
- INVADERS_NODE(INVADERS_FLEET_SND, _board), /* IN1 */ \
- INVADERS_NODE(INVADERS_BONUS_MISSLE_BASE_SND, _board), /* IN2 */ \
- INVADERS_NODE(INVADERS_INVADER_HIT_SND, _board), /* IN3 */ \
- INVADERS_NODE(INVADERS_EXPLOSION_SND, _board), /* IN4 */ \
- INVADERS_NODE(INVADERS_MISSILE_SND, _board), /* IN5 */ \
- &_type##_mixer) \
- DISCRETE_OUTPUT(INVADERS_NODE(90, _board), 2500)
-
-/* Schematic M051-00739-A005 and M051-00739-B005 */
-/* P.C. A084-90700-B000 and A084-90700-C000 */
-static DISCRETE_SOUND_START(invaders_discrete)
- INVADERS_NOISE_GENERATOR
- INVADERS_SAUCER_HIT(1)
- INVADERS_FLEET(1)
- INVADERS_BONUS_MISSLE_BASE(1)
- INVADERS_INVADER_HIT(1, invaders)
- INVADERS_EXPLOSION(1)
- INVADERS_MISSILE(1, invaders)
- INVADERS_MIXER(1, invaders)
-DISCRETE_SOUND_END
+ /* D6 and D7 are not connected */
+}
-void mw8080bw_state::invaders_audio(machine_config &config)
+WRITE8_MEMBER(mw8080bw_state::bowler_audio_2_w)
{
- SPEAKER(config, "mono").front_center();
+ /* set BALL ROLLING SOUND FREQ(data & 0x0f)
+ 0, if no rolling, 0x08 used during ball return */
- SN76477(config, m_sn);
- m_sn->set_noise_params(0, 0, 0);
- m_sn->set_decay_res(0);
- m_sn->set_attack_params(0, RES_K(100));
- m_sn->set_amp_res(RES_K(56));
- m_sn->set_feedback_res(RES_K(10));
- m_sn->set_vco_params(0, CAP_U(0.1), RES_K(8.2));
- m_sn->set_pitch_voltage(5.0);
- m_sn->set_slf_params(CAP_U(1.0), RES_K(120));
- m_sn->set_oneshot_params(0, 0);
- m_sn->set_vco_mode(1);
- m_sn->set_mixer_params(0, 0, 0);
- m_sn->set_envelope_params(1, 0);
- m_sn->set_enable(1);
- m_sn->add_route(ALL_OUTPUTS, "mono", 0.5);
+ /* D4 - triggered when the ball crosses the foul line,
+ sound circuit not labeled */
- DISCRETE(config, m_discrete, invaders_discrete);
- m_discrete->add_route(ALL_OUTPUTS, "mono", 0.5);
+ /* D5 - triggered on a 'spare', sound circuit not labeled */
+
+ /* D6 and D7 are not connected */
}
-WRITE8_MEMBER(mw8080bw_state::invaders_audio_1_w)
+WRITE8_MEMBER(mw8080bw_state::bowler_audio_3_w)
{
- m_sn->enable_w((~data >> 0) & 0x01); /* saucer sound */
+ /* regardless of the data, enable BALL HITS PIN 1 sound
+ (top circuit on the schematics) */
+}
- m_discrete->write(INVADERS_NODE(INVADERS_MISSILE_EN, 1), data & 0x02);
- m_discrete->write(INVADERS_NODE(INVADERS_EXPLOSION_EN, 1), data & 0x04);
- m_discrete->write(INVADERS_NODE(INVADERS_INVADER_HIT_EN, 1), data & 0x08);
- m_discrete->write(INVADERS_NODE(INVADERS_BONUS_MISSLE_BASE_EN, 1), data & 0x10);
- machine().sound().system_enable(data & 0x20);
+WRITE8_MEMBER(mw8080bw_state::bowler_audio_4_w)
+{
+ /* regardless of the data, enable BALL HITS PIN 2 sound
+ (bottom circuit on the schematics) */
+}
- /* D6 and D7 are not connected */
+
+WRITE8_MEMBER(mw8080bw_state::bowler_audio_5_w)
+{
+ /* not sure, appears to me trigerred alongside the two
+ BALL HITS PIN sounds */
}
-WRITE8_MEMBER(mw8080bw_state::invaders_audio_2_w)
+WRITE8_MEMBER(mw8080bw_state::bowler_audio_6_w)
{
- m_discrete->write(INVADERS_NODE(INVADERS_FLEET_DATA, 1), data & 0x0f);
- m_discrete->write(INVADERS_NODE(INVADERS_SAUCER_HIT_EN, 1), data & 0x10);
+ /* D0 is not connected */
- /* the flip screen line is only connected on the cocktail PCB */
- if (invaders_is_cabinet_cocktail())
- {
- m_flip_screen = (data >> 5) & 0x01;
- }
+ /* D3 is not connected */
/* D6 and D7 are not connected */
+
+ /* D1, D2, D4 and D5 have something to do with a chime circuit.
+ D1 and D4 are HI when a 'strike' happens, and D2 and D5 are
+ HI on a 'spare' */
}
@@ -4549,227 +4834,3 @@ WRITE8_MEMBER(mw8080bw_state::blueshrk_audio_w)
/* D6 and D7 are not connected */
}
-
-
-
-/*************************************
- *
- * Space Invaders II (cocktail)
- *
- *************************************/
-
-static const discrete_op_amp_1sht_info invad2ct_invader_hit_1sht =
-{
- DISC_OP_AMP_1SHT_1 | DISC_OP_AMP_IS_NORTON,
- RES_M(4.7), /* R49 */
- RES_K(100), /* R51 */
- RES_M(1), /* R48 */
- RES_M(1), /* R50 */
- RES_M(2.2), /* R52 */
- CAP_U(0.22), /* C18 */
- CAP_P(470), /* C20 */
- 0, /* vN */
- 12 /* vP */
-};
-
-
-static const discrete_op_amp_osc_info invad2ct_invader_hit_osc =
-{
- DISC_OP_AMP_OSCILLATOR_1 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_CAP,
- RES_M(1), /* R37 */
- RES_K(10), /* R41 */
- RES_K(100), /* R38 */
- RES_K(120), /* R40 */
- RES_M(1), /* R39 */
- 0, /* no r6 */
- 0, /* no r7 */
- 0, /* no r8 */
- CAP_U(0.22), /* C16 */
- 12, /* vP */
-};
-
-
-static const discrete_op_amp_1sht_info invad2ct_brd2_invader_hit_1sht =
-{
- DISC_OP_AMP_1SHT_1 | DISC_OP_AMP_IS_NORTON,
- RES_M(4.7), /* R49 */
- RES_K(100), /* R51 */
- RES_M(1), /* R48 */
- RES_M(1), /* R50 */
- RES_M(2.2), /* R52 */
- CAP_U(1), /* C18 */
- CAP_P(470), /* C20 */
- 0, /* vN */
- 12 /* vP */
-};
-
-
-static const discrete_op_amp_osc_info invad2ct_brd2_invader_hit_osc =
-{
- DISC_OP_AMP_OSCILLATOR_1 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_CAP,
- RES_M(1), /* R37 */
- RES_K(10), /* R41 */
- RES_K(100), /* R38 */
- RES_K(120), /* R40 */
- RES_M(1), /* R39 */
- 0, /* no r6 */
- 0, /* no r7 */
- 0, /* no r8 */
- CAP_U(0.1), /* C16 */
- 12, /* vP */
-};
-
-
-static const discrete_op_amp_1sht_info invad2ct_missle_1sht =
-{
- DISC_OP_AMP_1SHT_1 | DISC_OP_AMP_IS_NORTON,
- RES_M(4.7), /* R32 */
- RES_K(100), /* R30 */
- RES_M(1), /* R31 */
- RES_M(1), /* R33 */
- RES_M(2.2), /* R34 */
- CAP_U(0.22), /* C12 */
- CAP_P(470), /* C15 */
- 0, /* vN */
- 12 /* vP */
-};
-
-
-static const discrete_mixer_desc invad2ct_mixer =
-{
- DISC_MIXER_IS_OP_AMP, /* type */
- { RES_K(100), /* R78 */
- RES_K(15) + 100 + 100, /* R134 + R133 + R132 */
- RES_K(150), /* R136 */
- RES_K(150), /* R59 */
- RES_K(10) + RES_K(6.8) + RES_K(5.6), /* R86 + R85 + R84 */
- RES_K(150) }, /* R28 */
- {0}, /* no rNode{} */
- { 0,
- 0,
- 0,
- 0,
- 0,
- CAP_U(0.001) }, /* C11 */
- 0, /* no rI */
- RES_K(100), /* R105 */
- 0, /* no cF */
- CAP_U(0.1), /* C45 */
- 0, /* vRef = ground */
- 1 /* gain */
-};
-
-
-static DISCRETE_SOUND_START(invad2ct_discrete)
- /* sound board 1 */
- /* P.C. A082-90700-A000 */
- /* Schematic M051-00851-A002 */
- INVADERS_NOISE_GENERATOR
- INVADERS_SAUCER_HIT(1)
- INVADERS_FLEET(1)
- INVADERS_BONUS_MISSLE_BASE(1)
- INVADERS_INVADER_HIT(1, invad2ct)
- INVADERS_EXPLOSION(1)
- INVADERS_MISSILE(1, invad2ct)
- INVADERS_MIXER(1, invad2ct)
-
- /* sound board 2 */
- /* P.C. A084-90901-C851 */
- /* Schematic M051-00851-A005 */
- INVADERS_SAUCER_HIT(2)
- INVADERS_FLEET(2)
- INVADERS_BONUS_MISSLE_BASE(2)
- INVADERS_INVADER_HIT(2, invad2ct_brd2)
- INVADERS_EXPLOSION(2)
- INVADERS_MISSILE(2, invaders)
- INVADERS_MIXER(2, invaders)
-DISCRETE_SOUND_END
-
-
-void mw8080bw_state::invad2ct_audio(machine_config &config)
-{
- SPEAKER(config, "spk1").front_left();
- SPEAKER(config, "spk2").front_right();
-
- DISCRETE(config, m_discrete, invad2ct_discrete);
- m_discrete->add_route(0, "spk1", 0.5);
- m_discrete->add_route(1, "spk2", 0.5);
-
- SN76477(config, m_sn1);
- m_sn1->set_noise_params(0, 0, 0);
- m_sn1->set_decay_res(0);
- m_sn1->set_attack_params(0, RES_K(100));
- m_sn1->set_amp_res(RES_K(56));
- m_sn1->set_feedback_res(RES_K(10));
- m_sn1->set_vco_params(0, CAP_U(0.1), RES_K(8.2));
- m_sn1->set_pitch_voltage(5.0);
- m_sn1->set_slf_params(CAP_U(1.0), RES_K(120));
- m_sn1->set_oneshot_params(0, 0);
- m_sn1->set_vco_mode(1);
- m_sn1->set_mixer_params(0, 0, 0);
- m_sn1->set_envelope_params(1, 0);
- m_sn1->set_enable(1);
- m_sn1->add_route(ALL_OUTPUTS, "spk1", 0.3);
-
- SN76477(config, m_sn2);
- m_sn2->set_noise_params(0, 0, 0);
- m_sn2->set_decay_res(0);
- m_sn2->set_attack_params(0, RES_K(100));
- m_sn2->set_amp_res(RES_K(56));
- m_sn2->set_feedback_res(RES_K(10));
- m_sn2->set_vco_params(0, CAP_U(0.047), RES_K(39));
- m_sn2->set_pitch_voltage(5.0);
- m_sn2->set_slf_params(CAP_U(1.0), RES_K(120));
- m_sn2->set_oneshot_params(0, 0);
- m_sn2->set_vco_mode(1);
- m_sn2->set_mixer_params(0, 0, 0);
- m_sn2->set_envelope_params(1, 0);
- m_sn2->set_enable(1);
- m_sn2->add_route(ALL_OUTPUTS, "spk2", 0.3);
-}
-
-
-WRITE8_MEMBER(mw8080bw_state::invad2ct_audio_1_w)
-{
- m_sn1->enable_w((~data >> 0) & 0x01); /* saucer sound */
-
- m_discrete->write(INVADERS_NODE(INVADERS_MISSILE_EN, 1), data & 0x02);
- m_discrete->write(INVADERS_NODE(INVADERS_EXPLOSION_EN, 1), data & 0x04);
- m_discrete->write(INVADERS_NODE(INVADERS_INVADER_HIT_EN, 1), data & 0x08);
- m_discrete->write(INVADERS_NODE(INVADERS_BONUS_MISSLE_BASE_EN, 1), data & 0x10);
-
- machine().sound().system_enable(data & 0x20);
-
- /* D6 and D7 are not connected */
-}
-
-
-WRITE8_MEMBER(mw8080bw_state::invad2ct_audio_2_w)
-{
- m_discrete->write(INVADERS_NODE(INVADERS_FLEET_DATA, 1), data & 0x0f);
- m_discrete->write(INVADERS_NODE(INVADERS_SAUCER_HIT_EN, 1), data & 0x10);
-
- /* D5-D7 are not connected */
-}
-
-
-WRITE8_MEMBER(mw8080bw_state::invad2ct_audio_3_w)
-{
- m_sn2->enable_w((~data >> 0) & 0x01); /* saucer sound */
-
- m_discrete->write(INVADERS_NODE(INVADERS_MISSILE_EN, 2), data & 0x02);
- m_discrete->write(INVADERS_NODE(INVADERS_EXPLOSION_EN, 2), data & 0x04);
- m_discrete->write(INVADERS_NODE(INVADERS_INVADER_HIT_EN, 2), data & 0x08);
- m_discrete->write(INVADERS_NODE(INVADERS_BONUS_MISSLE_BASE_EN, 2), data & 0x10);
-
- /* D5-D7 are not connected */
-}
-
-
-WRITE8_MEMBER(mw8080bw_state::invad2ct_audio_4_w)
-{
- m_discrete->write(INVADERS_NODE(INVADERS_FLEET_DATA, 2), data & 0x0f);
- m_discrete->write(INVADERS_NODE(INVADERS_SAUCER_HIT_EN, 2), data & 0x10);
-
- /* D5-D7 are not connected */
-}
diff --git a/src/mame/audio/mw8080bw.h b/src/mame/audio/mw8080bw.h
new file mode 100644
index 00000000000..5a6bd52dbc2
--- /dev/null
+++ b/src/mame/audio/mw8080bw.h
@@ -0,0 +1,314 @@
+// license:BSD-3-Clause
+// copyright-holders:Nicola Salmoria, Tormod Tjaberg, Mirko Buffoni,Lee Taylor, Valerio Verrando, Zsolt Vasvari,Derrick Renaud
+// thanks-to:Michael Strutts, Marco Cassili
+/***************************************************************************
+
+ Midway 8080-based black and white hardware
+
+****************************************************************************/
+#ifndef MAME_AUDIO_MW8080BW_H
+#define MAME_AUDIO_MW8080BW_H
+
+#pragma once
+
+#include "sound/discrete.h"
+#include "sound/samples.h"
+#include "sound/sn76477.h"
+
+
+class midway_tone_generator_device_base : public device_t
+{
+public:
+ void tone_generator_lo_w(u8 data);
+ void tone_generator_hi_w(u8 data);
+
+protected:
+ midway_tone_generator_device_base(machine_config const &mconfig, device_type type, char const *tag, device_t *owner, u32 clock);
+
+ required_device<discrete_sound_device> m_discrete;
+};
+
+
+class seawolf_audio_device : public device_t
+{
+public:
+ seawolf_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0);
+
+ void write(u8 data);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual void device_start() override;
+
+private:
+ required_device<samples_device> m_samples;
+ u8 m_prev;
+};
+
+
+class gunfight_audio_device : public device_t
+{
+public:
+ gunfight_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0);
+
+ void write(u8 data);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual void device_start() override;
+
+private:
+ required_device_array<samples_device, 2> m_samples;
+};
+
+
+class boothill_audio_device : public midway_tone_generator_device_base
+{
+public:
+ boothill_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0);
+
+ void write(u8 data);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual ioport_constructor device_input_ports() const override;
+ virtual void device_start() override;
+};
+
+
+class desertgu_audio_device : public midway_tone_generator_device_base
+{
+public:
+ auto ctrl_sel_out() { return m_ctrl_sel_out.bind(); }
+
+ desertgu_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0);
+
+ void p1_w(u8 data);
+ void p2_w(u8 data);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual ioport_constructor device_input_ports() const override;
+ virtual void device_start() override;
+
+private:
+ devcb_write_line m_ctrl_sel_out;
+ output_finder<> m_recoil;
+ u8 m_p2;
+};
+
+
+class dplay_audio_device : public midway_tone_generator_device_base
+{
+public:
+ dplay_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0);
+
+ void write(u8 data);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual ioport_constructor device_input_ports() const override;
+ virtual void device_start() override;
+};
+
+
+class gmissile_audio_device : public device_t
+{
+public:
+ gmissile_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0);
+
+ void p1_w(u8 data);
+ void p2_w(u8 data);
+ void p3_w(u8 data);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual void device_start() override;
+
+private:
+ required_device_array<samples_device, 2> m_samples;
+ output_finder<> m_l_exp;
+ output_finder<> m_r_exp;
+ u8 m_p1;
+};
+
+
+class m4_audio_device : public device_t
+{
+public:
+ m4_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0);
+
+ void p1_w(u8 data);
+ void p2_w(u8 data);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual void device_start() override;
+
+private:
+ required_device_array<samples_device, 2> m_samples;
+ u8 m_p1;
+ u8 m_p2;
+};
+
+
+class clowns_audio_device : public midway_tone_generator_device_base
+{
+public:
+ auto ctrl_sel_out() { return m_ctrl_sel_out.bind(); }
+
+ clowns_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0);
+
+ void p1_w(u8 data);
+ void p2_w(u8 data);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual ioport_constructor device_input_ports() const override;
+ virtual void device_start() override;
+
+private:
+ required_device<samples_device> m_samples;
+ devcb_write_line m_ctrl_sel_out;
+ u8 m_p1;
+ u8 m_p2;
+};
+
+
+class spacwalk_audio_device : public midway_tone_generator_device_base
+{
+public:
+ auto ctrl_sel_out() { return m_ctrl_sel_out.bind(); }
+
+ spacwalk_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0);
+
+ void p1_w(u8 data);
+ void p2_w(u8 data);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual ioport_constructor device_input_ports() const override;
+ virtual void device_start() override;
+
+private:
+ devcb_write_line m_ctrl_sel_out;
+ u8 m_p1;
+};
+
+
+class dogpatch_audio_device : public midway_tone_generator_device_base
+{
+public:
+ dogpatch_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0);
+
+ void write(u8 data);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual void device_start() override;
+};
+
+
+class spcenctr_audio_device : public device_t
+{
+public:
+ spcenctr_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0);
+
+ void p1_w(u8 data);
+ void p2_w(u8 data);
+ void p3_w(u8 data);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual void device_start() override;
+
+private:
+ TIMER_CALLBACK_MEMBER(strobe_callback);
+
+ required_device<sn76477_device> m_sn;
+ required_device<discrete_sound_device> m_discrete;
+ output_finder<> m_lamp;
+ output_finder<> m_strobe;
+ emu_timer *m_strobe_timer;
+ u8 m_strobe_enable;
+};
+
+
+class phantom2_audio_device : public device_t
+{
+public:
+ phantom2_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0);
+
+ void p1_w(u8 data);
+ void p2_w(u8 data);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual void device_start() override;
+
+private:
+ required_device<samples_device> m_samples;
+ output_finder<> m_exp;
+ u8 m_p1;
+ u8 m_p2;
+};
+
+
+class invaders_audio_device : public device_t
+{
+public:
+ auto flip_screen_out() { return m_flip_screen_out.bind(); }
+
+ invaders_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0);
+
+ void p1_w(u8 data);
+ void p2_w(u8 data);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual void device_start() override;
+
+private:
+ required_device<sn76477_device> m_sn;
+ required_device<discrete_sound_device> m_discrete;
+ devcb_write_line m_flip_screen_out;
+ u8 m_p2;
+};
+
+
+class invad2ct_audio_device : public device_t
+{
+public:
+ invad2ct_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0);
+
+ void p1_w(u8 data);
+ void p2_w(u8 data);
+ void p3_w(u8 data);
+ void p4_w(u8 data);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual void device_start() override;
+
+private:
+ required_device<discrete_sound_device> m_discrete;
+ required_device_array<sn76477_device, 2> m_sn;
+};
+
+
+DECLARE_DEVICE_TYPE(SEAWOLF_AUDIO, seawolf_audio_device)
+DECLARE_DEVICE_TYPE(GUNFIGHT_AUDIO, gunfight_audio_device)
+DECLARE_DEVICE_TYPE(BOOTHILL_AUDIO, boothill_audio_device)
+DECLARE_DEVICE_TYPE(DESERTGU_AUDIO, desertgu_audio_device)
+DECLARE_DEVICE_TYPE(DPLAY_AUDIO, dplay_audio_device)
+DECLARE_DEVICE_TYPE(GMISSILE_AUDIO, gmissile_audio_device)
+DECLARE_DEVICE_TYPE(M4_AUDIO, m4_audio_device)
+DECLARE_DEVICE_TYPE(CLOWNS_AUDIO, clowns_audio_device)
+DECLARE_DEVICE_TYPE(SPACWALK_AUDIO, spacwalk_audio_device)
+DECLARE_DEVICE_TYPE(DOGPATCH_AUDIO, dogpatch_audio_device)
+DECLARE_DEVICE_TYPE(SPCENCTR_AUDIO, spcenctr_audio_device)
+DECLARE_DEVICE_TYPE(PHANTOM2_AUDIO, phantom2_audio_device)
+DECLARE_DEVICE_TYPE(INVADERS_AUDIO, invaders_audio_device)
+DECLARE_DEVICE_TYPE(INVAD2CT_AUDIO, invad2ct_audio_device)
+
+#endif // MAME_AUDIO_MW8080BW_H
diff --git a/src/mame/audio/nl_1942.cpp b/src/mame/audio/nl_1942.cpp
new file mode 100644
index 00000000000..234b716cb11
--- /dev/null
+++ b/src/mame/audio/nl_1942.cpp
@@ -0,0 +1,93 @@
+// license:BSD-3-Clause
+// copyright-holders:Couriersud
+#include "netlist/devices/net_lib.h"
+
+/* ----------------------------------------------------------------------------
+ * 1942 schematics
+ * ---------------------------------------------------------------------------*/
+
+NETLIST_START(1942)
+
+ /* Standard stuff */
+
+ SOLVER(Solver, 48000)
+ ANALOG_INPUT(V5, 5)
+
+ /* AY 8910 internal resistors */
+
+ RES(R_AY1_1, 1000)
+ RES(R_AY1_2, 1000)
+ RES(R_AY1_3, 1000)
+ RES(R_AY2_1, 1000)
+ RES(R_AY2_2, 1000)
+ RES(R_AY2_3, 1000)
+
+ RES(R2, 220000)
+ RES(R3, 220000)
+ RES(R4, 220000)
+ RES(R5, 220000)
+ RES(R6, 220000)
+ RES(R7, 220000)
+
+ RES(R11, 10000)
+ RES(R12, 10000)
+ RES(R13, 10000)
+ RES(R14, 10000)
+ RES(R15, 10000)
+ RES(R16, 10000)
+
+ CAP(CC7, 10e-6)
+ CAP(CC8, 10e-6)
+ CAP(CC9, 10e-6)
+ CAP(CC10, 10e-6)
+ CAP(CC11, 10e-6)
+ CAP(CC12, 10e-6)
+
+ NET_C(V5, R_AY2_3.1, R_AY2_2.1, R_AY2_1.1, R_AY1_3.1, R_AY1_2.1, R_AY1_1.1)
+ NET_C(GND, R13.2, R15.2, R11.2, R12.2, R14.2, R16.2)
+ //NLFILT(R_AY2_3, R13, CC7, R2)
+ NET_C(R_AY2_3.2, R13.1)
+ NET_C(R13.1, CC7.1)
+ NET_C(CC7.2, R2.1)
+ //NLFILT(R_AY2_2, R15, CC8, R3)
+ NET_C(R_AY2_2.2, R15.1)
+ NET_C(R15.1, CC8.1)
+ NET_C(CC8.2, R3.1)
+ //NLFILT(R_AY2_1, R11, CC9, R4)
+ NET_C(R_AY2_1.2, R11.1)
+ NET_C(R11.1, CC9.1)
+ NET_C(CC9.2, R4.1)
+
+ //NLFILT(R_AY1_3, R12, CC10, R5)
+ NET_C(R_AY1_3.2, R12.1)
+ NET_C(R12.1, CC10.1)
+ NET_C(CC10.2, R5.1)
+ //NLFILT(R_AY1_2, R14, CC11, R6)
+ NET_C(R_AY1_2.2, R14.1)
+ NET_C(R14.1, CC11.1)
+ NET_C(CC11.2, R6.1)
+ //NLFILT(R_AY1_1, R16, CC12, R7)
+ NET_C(R_AY1_1.2, R16.1)
+ NET_C(R16.1, CC12.1)
+ NET_C(CC12.2, R7.1)
+
+ POT(VR, 2000)
+ NET_C(VR.3, GND)
+
+ NET_C(R2.2, VR.1)
+ NET_C(R3.2, VR.1)
+ NET_C(R4.2, VR.1)
+ NET_C(R5.2, VR.1)
+ NET_C(R6.2, VR.1)
+ NET_C(R7.2, VR.1)
+
+ CAP(CC6, 10e-6)
+ RES(R1, 100000)
+
+ NET_C(CC6.1, VR.2)
+ NET_C(CC6.2, R1.1)
+ CAP(CC3, 220e-6)
+ NET_C(R1.2, CC3.1)
+ NET_C(CC3.2, GND)
+
+NETLIST_END()
diff --git a/src/mame/audio/nl_1942.h b/src/mame/audio/nl_1942.h
new file mode 100644
index 00000000000..a6ef34e4c41
--- /dev/null
+++ b/src/mame/audio/nl_1942.h
@@ -0,0 +1,6 @@
+// license:BSD-3-Clause
+// copyright-holders:Couriersud
+
+#include "netlist/nl_setup.h"
+
+NETLIST_EXTERNAL(1942)
diff --git a/src/mame/audio/nl_cheekyms.cpp b/src/mame/audio/nl_cheekyms.cpp
index 5abc5104778..1e41bedba05 100644
--- a/src/mame/audio/nl_cheekyms.cpp
+++ b/src/mame/audio/nl_cheekyms.cpp
@@ -1,7 +1,6 @@
// license:BSD-3-Clause
// copyright-holders:Vas Crabb
-#include "audio/nl_cheekyms.h"
#include "netlist/devices/net_lib.h"
diff --git a/src/mame/audio/nl_cocoloco.cpp b/src/mame/audio/nl_cocoloco.cpp
new file mode 100644
index 00000000000..57ff637a85b
--- /dev/null
+++ b/src/mame/audio/nl_cocoloco.cpp
@@ -0,0 +1,53 @@
+// license:CC0
+// copyright-holders:Couriersud
+
+#include "netlist/devices/net_lib.h"
+
+/* ----------------------------------------------------------------------------
+ * cocoloco schematics
+ * ---------------------------------------------------------------------------*/
+
+// 7W LM383T Amplifier not included below
+
+NETLIST_START(cocoloco)
+
+ /* Standard stuff */
+
+ SOLVER(Solver, 48000)
+ PARAM(Solver.ACCURACY, 1e-5)
+ ANALOG_INPUT(V5, 5)
+
+ /* AY 8910 internal resistors */
+
+ RES(R_AY1_1, 1000)
+ RES(R_AY1_2, 1000)
+ RES(R_AY1_3, 1000)
+
+ RES(R1, 4700)
+ RES(R2, 4700)
+ RES(R3, 4700)
+ RES(RAMP, 150000)
+ //RES(RAMP, 150)
+ POT(P1, 5000)
+ PARAM(P1.DIAL, 0.5) // 50%
+
+ CAP(C1, 10e-6)
+
+ NET_C(V5, R_AY1_1.1, R_AY1_2.1, R_AY1_3.1)
+
+ NET_C(R_AY1_1.2, R1.1)
+ NET_C(R_AY1_2.2, R2.1)
+ NET_C(R_AY1_3.2, R3.1)
+
+ NET_C(R1.2, R2.2, R3.2, P1.1)
+
+ NET_C(P1.3, RAMP.2, GND)
+ NET_C(P1.2, C1.1)
+ NET_C(C1.2, RAMP.1)
+#if 0
+ CAP(C2, 0.1e-6)
+ NET_C(C2.2, GND)
+ NET_C(C2.1, RAMP.1)
+#endif
+NETLIST_END()
+
diff --git a/src/mame/audio/nl_cocoloco.h b/src/mame/audio/nl_cocoloco.h
new file mode 100644
index 00000000000..a81ce56cad1
--- /dev/null
+++ b/src/mame/audio/nl_cocoloco.h
@@ -0,0 +1,6 @@
+// license:CC0
+// copyright-holders:Couriersud
+
+#include "netlist/nl_setup.h"
+
+NETLIST_EXTERNAL(cocoloco)
diff --git a/src/mame/audio/nl_gamemachine.cpp b/src/mame/audio/nl_gamemachine.cpp
new file mode 100644
index 00000000000..9d7f9a24388
--- /dev/null
+++ b/src/mame/audio/nl_gamemachine.cpp
@@ -0,0 +1,88 @@
+// license:CC0
+// copyright-holders:Couriersud
+// thanks-to:Sean Riddle
+
+#include "netlist/devices/net_lib.h"
+
+/* ----------------------------------------------------------------------------
+ * Gamemachine schematics
+ * ---------------------------------------------------------------------------*/
+
+NETLIST_START(gamemachine)
+
+ /* Standard stuff */
+
+ SOLVER(Solver, 48000)
+ PARAM(Solver.ACCURACY, 1e-7)
+ ANALOG_INPUT(V5, 5)
+
+ /* Schematics: http://seanriddle.com/gamemachineaudio.JPG
+ *
+ * 3870 datasheet: http://nice.kaze.com/MK3870.pdf
+ *
+ * The 3870 has mask-programmable outputs (page VIII-7 in datasheet).
+ *
+ * Given the schematics, in this case the OPENDRAIN configuration is the
+ * most probable.
+ *
+ */
+
+ NET_MODEL("OPENDRAIN FAMILY(OVL=0.0 OVH=0.0 ORL=1.0 ORH=1e12)")
+ NET_MODEL("TYPE6K FAMILY(OVL=0.05 OVH=0.05 ORL=1.0 ORH=6000)")
+ NET_MODEL("DIRECTDRIVE FAMILY(OVL=0.05 OVH=0.05 ORL=1.0 ORH=1000)")
+
+ LOGIC_INPUT(P08, 1, "OPENDRAIN")
+ LOGIC_INPUT(P09, 1, "OPENDRAIN")
+ LOGIC_INPUT(P10, 1, "OPENDRAIN")
+ LOGIC_INPUT(P11, 1, "OPENDRAIN")
+ LOGIC_INPUT(P12, 1, "OPENDRAIN")
+ LOGIC_INPUT(P13, 1, "OPENDRAIN")
+ LOGIC_INPUT(P14, 1, "OPENDRAIN")
+ LOGIC_INPUT(P15, 1, "OPENDRAIN")
+
+ RES(R1, RES_K(2.4))
+ RES(R2, RES_K(10))
+ RES(R3, RES_K(4.3))
+ RES(R4, RES_K(150))
+ RES(R5, RES_K(240))
+ RES(R6, RES_K(2.4))
+ RES(SPK1, 8)
+
+ CAP(C1, CAP_P(50))
+ CAP(C2, CAP_U(0.001))
+ CAP(C3, CAP_U(0.002))
+ CAP(C4, CAP_U(0.005))
+ CAP(C5, CAP_U(0.010))
+
+ CAP(C6, CAP_P(50))
+ CAP(C7, CAP_U(0.01))
+ CAP(C8, CAP_U(470))
+
+ QBJT_EB(Q1, "9013")
+
+ MC1455P_DIP(IC1)
+
+ NET_C(P08.Q, R2.2, IC1.4)
+ NET_C(P09.Q, C8.2)
+ NET_C(P15.Q, R1.2)
+
+ NET_C(C1.1, P10.Q)
+ NET_C(C2.1, P11.Q)
+ NET_C(C3.1, P12.Q)
+ NET_C(C4.1, P13.Q)
+ NET_C(C5.1, P14.Q)
+
+ NET_C(C1.2, C2.2, C3.2, C4.2, C5.2, C6.2, IC1.2, IC1.6, R5.2)
+ NET_C(GND, C6.1, IC1.1, Q1.E)
+ NET_C(R5.1, R4.2, IC1.7)
+ NET_C(V5, R4.1, R2.1, IC1.8, SPK1.1, R3.1)
+
+ NET_C(C7.1, R6.1, IC1.3)
+
+ NET_C(C7.2, R6.2, Q1.B)
+ NET_C(Q1.C, SPK1.2)
+
+ NET_C(C8.1, R1.1, R3.2, IC1.5)
+
+NETLIST_END()
+
diff --git a/src/mame/audio/nl_gamemachine.h b/src/mame/audio/nl_gamemachine.h
new file mode 100644
index 00000000000..d4655c166e5
--- /dev/null
+++ b/src/mame/audio/nl_gamemachine.h
@@ -0,0 +1,7 @@
+// license:CC0
+// copyright-holders:Couriersud
+// thanks-to:Sean Riddle
+
+#include "netlist/nl_setup.h"
+
+NETLIST_EXTERNAL(gamemachine)
diff --git a/src/mame/audio/nl_kidniki.cpp b/src/mame/audio/nl_kidniki.cpp
index 3721796e2ae..0cbcc0af857 100644
--- a/src/mame/audio/nl_kidniki.cpp
+++ b/src/mame/audio/nl_kidniki.cpp
@@ -9,7 +9,7 @@
#ifndef NLTOOL_VERSION
#define USE_FRONTIERS 1
#else
-#define USE_FRONTIERS 0
+#define USE_FRONTIERS 1
#endif
/* if we use frontiers, use fixed STV for smaller matrix sizes */
@@ -375,15 +375,15 @@ NETLIST_START(kidniki)
PARAM(Solver.DYNAMIC_LTE, 5e-4)
PARAM(Solver.DYNAMIC_MIN_TIMESTEP, 20e-6)
PARAM(Solver.SORT_TYPE, "PREFER_IDENTITY_TOP_LEFT")
+ //PARAM(Solver.SORT_TYPE, "PREFER_BAND_MATRIX")
#else
- SOLVER(Solver, 24000)
+ //PARAM(Solver.SORT_TYPE, "PREFER_BAND_MATRIX")
+ SOLVER(Solver, 48000)
PARAM(Solver.ACCURACY, 1e-7)
PARAM(Solver.NR_LOOPS, 10000)
- PARAM(Solver.GS_LOOPS, 300000)
+ PARAM(Solver.GS_LOOPS, 100)
//PARAM(Solver.METHOD, "MAT_CR")
PARAM(Solver.METHOD, "GMRES")
- //PARAM(Solver.SOR_FACTOR, 1.73)
- //PARAM(Solver.METHOD, "SOR")
#endif
#if (USE_FRONTIERS)
diff --git a/src/mame/audio/nl_popeye.cpp b/src/mame/audio/nl_popeye.cpp
new file mode 100644
index 00000000000..6dd3656c47c
--- /dev/null
+++ b/src/mame/audio/nl_popeye.cpp
@@ -0,0 +1,93 @@
+// license:BSD-3-Clause
+// copyright-holders:Couriersud
+#include "netlist/devices/net_lib.h"
+
+/* ----------------------------------------------------------------------------
+ * popeye schematics
+ * ---------------------------------------------------------------------------*/
+
+/* This is the output stage of the audio circuit.
+ * It is solely an impedance changer and could be left away
+ */
+
+static NETLIST_START(popeye_imp_changer)
+ RES(R62, 510000)
+ RES(R63, 100)
+ RES(R64, 510000)
+ RES(R65, 2100)
+ RES(R66, 330)
+ RES(R67, 51)
+
+ QBJT_EB(Q8, "2SC1815")
+ QBJT_EB(Q9, "2SA1015")
+
+ NET_C(V5, R62.1, Q8.C, R66.1)
+ NET_C(R62.2, R64.1, R63.1, C7.2)
+ NET_C(R63.2, Q8.B)
+ NET_C(Q8.E, R65.1, Q9.B)
+ NET_C(R66.2, Q9.E, R67.1)
+
+ NET_C(GND, Q9.C, R65.2, R64.2)
+NETLIST_END()
+
+NETLIST_START(popeye)
+
+ /* register hard coded netlists */
+
+ LOCAL_SOURCE(popeye_imp_changer)
+
+ /* Standard stuff */
+
+ SOLVER(Solver, 48000)
+ PARAM(Solver.ACCURACY, 1e-5)
+ ANALOG_INPUT(V5, 5)
+
+ /* AY 8910 internal resistors */
+
+ RES(R_AY1_1, 1000)
+ RES(R_AY1_2, 1000)
+ RES(R_AY1_3, 1000)
+
+ RES(R52, 2000)
+ RES(R55, 2000)
+ RES(R58, 2000)
+ RES(R53, 2000)
+ RES(R56, 2000)
+ RES(R59, 2000)
+ RES(R51, 20000)
+ RES(R57, 30000)
+ RES(R60, 30000)
+
+ RES(R61, 120000)
+
+ RES(ROUT, 5000)
+
+ CAP(C4, 0.047e-6)
+ CAP(C5, 330e-12)
+ CAP(C6, 330e-12)
+ CAP(C7, 3.3e-6)
+ CAP(C40, 680e-12)
+
+ NET_C(V5, R_AY1_1.1, R_AY1_2.1, R_AY1_3.1)
+
+ NET_C(R_AY1_1.2, R52.1, R53.1)
+ NET_C(R_AY1_2.2, R55.1, R56.1)
+ NET_C(R_AY1_3.2, R58.1, R59.1)
+
+ NET_C(R53.2, R51.1, C4.1)
+ NET_C(R56.2, R57.1, C5.1)
+ NET_C(R59.2, R60.1, C6.1)
+
+ NET_C(R51.2, R57.2, R60.2, R61.1, C40.1, C7.1)
+
+ NET_C(GND, R52.2, R55.2, R58.2, C4.2, C5.2, C6.2, R61.2, C40.2)
+
+ INCLUDE(popeye_imp_changer)
+
+ /* output resistor (actually located in TV */
+
+ NET_C(R67.2, ROUT.1)
+
+ NET_C(GND, ROUT.2)
+
+NETLIST_END()
diff --git a/src/mame/audio/nl_popeye.h b/src/mame/audio/nl_popeye.h
new file mode 100644
index 00000000000..30746e2a4a0
--- /dev/null
+++ b/src/mame/audio/nl_popeye.h
@@ -0,0 +1,6 @@
+// license:BSD-3-Clause
+// copyright-holders:Couriersud
+
+#include "netlist/nl_setup.h"
+
+NETLIST_EXTERNAL(popeye)
diff --git a/src/mame/audio/nl_zac1b11142.cpp b/src/mame/audio/nl_zac1b11142.cpp
index df97e21da05..631bc2d233a 100644
--- a/src/mame/audio/nl_zac1b11142.cpp
+++ b/src/mame/audio/nl_zac1b11142.cpp
@@ -1,10 +1,8 @@
// license:BSD-3-Clause
// copyright-holders:Vas Crabb, Couriersud
-#include "audio/nl_zac1b11142.h"
#include "netlist/devices/net_lib.h"
-
#ifndef __PLIB_PREPROCESSOR__
#endif
diff --git a/src/mame/drivers/1942.cpp b/src/mame/drivers/1942.cpp
index 7127d99557b..3a7c85ceb04 100644
--- a/src/mame/drivers/1942.cpp
+++ b/src/mame/drivers/1942.cpp
@@ -70,7 +70,7 @@ correctly.
#include "screen.h"
#include "speaker.h"
-#include "netlist/devices/net_lib.h"
+#include "audio/nl_1942.h"
namespace {
@@ -87,84 +87,6 @@ constexpr XTAL AUDIO_CLOCK_1942P(MASTER_CLOCK_1942P/16);
} // anonymous namespace
-#define NLFILT(RA, R1, C1, R2) \
- NET_C(RA.1, V5) \
- NET_C(RA.2, R1.1) \
- NET_C(R1.2, GND) \
- NET_C(R1.1, C1.1) \
- NET_C(C1.2, R2.1)
-
-static NETLIST_START(nl_1942)
-
- /* Standard stuff */
-
- SOLVER(Solver, 48000)
- ANALOG_INPUT(V5, 5)
- PARAM(Solver.ACCURACY, 1e-6)
- PARAM(Solver.GS_LOOPS, 6)
- PARAM(Solver.SOR_FACTOR, 1.0)
- //PARAM(Solver.DYNAMIC_TS, 1)
- //PARAM(Solver.LTE, 5e-8)
-
- /* AY 8910 internal resistors */
-
- RES(R_AY1_1, 1000);
- RES(R_AY1_2, 1000);
- RES(R_AY1_3, 1000);
- RES(R_AY2_1, 1000);
- RES(R_AY2_2, 1000);
- RES(R_AY2_3, 1000);
-
- RES(R2, 220000)
- RES(R3, 220000)
- RES(R4, 220000)
- RES(R5, 220000)
- RES(R6, 220000)
- RES(R7, 220000)
-
- RES(R11, 10000)
- RES(R12, 10000)
- RES(R13, 10000)
- RES(R14, 10000)
- RES(R15, 10000)
- RES(R16, 10000)
-
- CAP(CC7, 10e-6)
- CAP(CC8, 10e-6)
- CAP(CC9, 10e-6)
- CAP(CC10, 10e-6)
- CAP(CC11, 10e-6)
- CAP(CC12, 10e-6)
-
- NLFILT(R_AY2_3, R13, CC7, R2)
- NLFILT(R_AY2_2, R15, CC8, R3)
- NLFILT(R_AY2_1, R11, CC9, R4)
-
- NLFILT(R_AY1_3, R12, CC10, R5)
- NLFILT(R_AY1_2, R14, CC11, R6)
- NLFILT(R_AY1_1, R16, CC12, R7)
-
- POT(VR, 2000)
- NET_C(VR.3, GND)
-
- NET_C(R2.2, VR.1)
- NET_C(R3.2, VR.1)
- NET_C(R4.2, VR.1)
- NET_C(R5.2, VR.1)
- NET_C(R6.2, VR.1)
- NET_C(R7.2, VR.1)
-
- CAP(CC6, 10e-6)
- RES(R1, 100000)
-
- NET_C(CC6.1, VR.2)
- NET_C(CC6.2, R1.1)
- CAP(CC3, 220e-6)
- NET_C(R1.2, CC3.1)
- NET_C(CC3.2, GND)
-
-NETLIST_END()
-
WRITE8_MEMBER(_1942_state::_1942_bankswitch_w)
{
membank("bank1")->set_entry(data & 0x03);
@@ -612,7 +534,7 @@ void _1942_state::_1942(machine_config &config)
/* Minimize resampling between ay8910 and netlist */
NETLIST_SOUND(config, "snd_nl", AUDIO_CLOCK / 8 / 2)
- .set_source(NETLIST_NAME(nl_1942))
+ .set_source(NETLIST_NAME(1942))
.add_route(ALL_OUTPUTS, "mono", 5.0);
NETLIST_STREAM_INPUT(config, "snd_nl:cin0", 0, "R_AY1_1.R");
NETLIST_STREAM_INPUT(config, "snd_nl:cin1", 1, "R_AY1_2.R");
diff --git a/src/mame/drivers/20pacgal.cpp b/src/mame/drivers/20pacgal.cpp
index 2212b6bf57d..3cab84c4a2a 100644
--- a/src/mame/drivers/20pacgal.cpp
+++ b/src/mame/drivers/20pacgal.cpp
@@ -250,11 +250,11 @@ void _25pacman_state::_25pacman_io_map(address_map &map)
map(0x80, 0x80).w("watchdog", FUNC(watchdog_timer_device::reset_w));
map(0x81, 0x81).w(FUNC(_25pacman_state::timer_pulse_w)); /* ??? pulsed by the timer irq */
map(0x82, 0x82).w(FUNC(_25pacman_state::irqack_w));
-// AM_RANGE(0x84, 0x84) AM_NOP /* ?? */
+// map(0x84, 0x84).noprw(); /* ?? */
map(0x85, 0x86).writeonly().share("stars_seed"); /* stars: rng seed (lo/hi) */
map(0x87, 0x87).r(FUNC(_25pacman_state::_25pacman_io_87_r)); // not eeprom on this
map(0x87, 0x87).nopw();
-// AM_RANGE(0x88, 0x88) AM_WRITE(ram_bank_select_w)
+// map(0x88, 0x88).w(FUNC(_25pacman_state::ram_bank_select_w));
map(0x89, 0x89).w("dac", FUNC(dac_byte_interface::data_w));
map(0x8a, 0x8a).writeonly().share("stars_ctrl"); /* stars: bits 3-4 = active set; bit 5 = enable */
map(0x8b, 0x8b).writeonly().share("flip");
diff --git a/src/mame/drivers/40love.cpp b/src/mame/drivers/40love.cpp
index 65f1a29217a..5b370d8ea4a 100644
--- a/src/mame/drivers/40love.cpp
+++ b/src/mame/drivers/40love.cpp
@@ -350,7 +350,7 @@ void fortyl_state::_40love_map(address_map &map)
map(0x9880, 0x98bf).rw(FUNC(fortyl_state::fortyl_bg_colorram_r), FUNC(fortyl_state::fortyl_bg_colorram_w)).share("colorram"); /* background attributes (2 bytes per line) */
map(0x98c0, 0x98ff).ram().share("spriteram2");/* sprites part 2 */
map(0xa000, 0xbfff).bankr("bank1");
- //AM_RANGE(0xbf00, 0xbfff) writes here when zooms-in/out, left-over or pixel line clearance?
+ //map(0xbf00, 0xbfff) writes here when zooms-in/out, left-over or pixel line clearance?
map(0xc000, 0xffff).rw(FUNC(fortyl_state::fortyl_pixram_r), FUNC(fortyl_state::fortyl_pixram_w)); /* banked pixel layer */
}
diff --git a/src/mame/drivers/4dpi.cpp b/src/mame/drivers/4dpi.cpp
index 3dd7cf3d86f..af5163d0e5b 100644
--- a/src/mame/drivers/4dpi.cpp
+++ b/src/mame/drivers/4dpi.cpp
@@ -219,6 +219,7 @@ private:
u16 m_lio_isr;
u8 m_lio_imr;
bool m_lio_int;
+ int m_lio_fifo;
u16 m_dmalo;
u8 m_mapindex;
@@ -359,6 +360,15 @@ void pi4d2x_state::map(address_map &map)
{
m_lio_imr = data;
+ // fifo interrupt status follows line state if not enabled
+ if (!BIT(m_lio_imr, LIO_FIFO))
+ {
+ if (m_lio_fifo)
+ m_lio_isr |= (1U << LIO_FIFO);
+ else
+ m_lio_isr &= ~(1U << LIO_FIFO);
+ }
+
// update interrupt line
bool const lio_int = ~m_lio_isr & m_lio_imr;
if (m_lio_imr ^ lio_int)
@@ -616,7 +626,7 @@ void pi4d2x_state::common(machine_config &config)
else
m_lio_isr |= (1U << LIO_VRSTAT);
});
- m_gfx->out_int_ge().set(*this, FUNC(pi4d2x_state::lio_interrupt<LIO_GE>)).invert();
+ m_gfx->out_int().set(*this, FUNC(pi4d2x_state::lio_interrupt<LIO_GE>)).invert();
m_gfx->out_int_fifo().set(*this, FUNC(pi4d2x_state::lio_interrupt<LIO_FIFO>)).invert();
// TODO: vme slot, cpu interrupt 0
@@ -643,14 +653,22 @@ void pi4d2x_state::initialize()
void pi4d2x_state::lio_interrupt(unsigned number, int state)
{
- // TODO: special handling for fifo half-full interrupt
u16 const mask = 1 << number;
+ if (number == LIO_FIFO)
+ {
+ m_lio_fifo = state;
+
+ // special handling for enabled fifo interrupt
+ if ((m_lio_imr & mask) && !(m_lio_isr & mask))
+ return;
+ }
+
// record interrupt state
- if (!state)
- m_lio_isr &= ~mask;
- else
+ if (state)
m_lio_isr |= mask;
+ else
+ m_lio_isr &= ~mask;
// update interrupt line
bool const lio_int = ~m_lio_isr & m_lio_imr;
diff --git a/src/mame/drivers/4enlinea.cpp b/src/mame/drivers/4enlinea.cpp
index 050d44bf2e7..a07d92002b1 100644
--- a/src/mame/drivers/4enlinea.cpp
+++ b/src/mame/drivers/4enlinea.cpp
@@ -379,7 +379,7 @@ READ8_MEMBER(_4enlinea_state::serial_r)
void _4enlinea_state::main_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
-// AM_RANGE(0x8000, 0xbfff) AM_RAM // CGA VRAM
+// map(0x8000, 0xbfff).ram(); // CGA VRAM
map(0xc000, 0xdfff).ram();
map(0xe000, 0xe001).r(FUNC(_4enlinea_state::serial_r));
@@ -389,7 +389,7 @@ void _4enlinea_state::main_portmap(address_map &map)
{
map.global_mask(0x3ff);
-// AM_RANGE(0x3d4, 0x3df) CGA regs
+// map(0x3d4, 0x3df) CGA regs
map(0x3bf, 0x3bf).nopw(); // CGA mode control, TODO
}
diff --git a/src/mame/drivers/4enraya.cpp b/src/mame/drivers/4enraya.cpp
index 793ec6a0960..fd29b3d0492 100644
--- a/src/mame/drivers/4enraya.cpp
+++ b/src/mame/drivers/4enraya.cpp
@@ -280,7 +280,7 @@ void unk_gambl_state::unkpacg_main_portmap(address_map &map)
map(0x00, 0x00).portr("DSW1");
map(0x01, 0x01).portr("IN1");
map(0x02, 0x02).portr("IN2");
-// AM_RANGE(0x03, 0x03) AM_WRITE("out_w") // to investigate...
+// map(0x03, 0x03).w(FUNC(unk_gambl_state::out_w)); // to investigate...
map(0x17, 0x17).w(m_ay, FUNC(ay8910_device::data_w));
map(0x27, 0x27).r(m_ay, FUNC(ay8910_device::data_r));
map(0x37, 0x37).w(m_ay, FUNC(ay8910_device::address_w));
diff --git a/src/mame/drivers/4roses.cpp b/src/mame/drivers/4roses.cpp
index 9b9c28fec82..391cf24948f 100644
--- a/src/mame/drivers/4roses.cpp
+++ b/src/mame/drivers/4roses.cpp
@@ -238,7 +238,7 @@ private:
void _4roses_state::_4roses_map(address_map &map)
{
- map(0x0000, 0x07ff).ram(); // AM_SHARE("nvram")
+ map(0x0000, 0x07ff).ram(); // .share("nvram");
map(0x0c00, 0x0c00).r("ay8910", FUNC(ay8910_device::data_r));
map(0x0c00, 0x0c01).w("ay8910", FUNC(ay8910_device::address_data_w));
map(0x0e00, 0x0e00).w("crtc", FUNC(mc6845_device::address_w));
@@ -290,7 +290,7 @@ void _4roses_state::_4roses_opcodes_map(address_map &map)
void rugby_state::rugby_map(address_map &map)
{
- map(0x0000, 0x07ff).ram(); // AM_SHARE("nvram")
+ map(0x0000, 0x07ff).ram(); // .share("nvram");
map(0x0c00, 0x0c00).r("ay8910", FUNC(ay8910_device::data_r));
map(0x0c00, 0x0c01).w("ay8910", FUNC(ay8910_device::address_data_w));
map(0x0e00, 0x0e00).w("crtc", FUNC(mc6845_device::address_w));
diff --git a/src/mame/drivers/8080bw.cpp b/src/mame/drivers/8080bw.cpp
index 1758ad9115e..73d06ff1c8f 100644
--- a/src/mame/drivers/8080bw.cpp
+++ b/src/mame/drivers/8080bw.cpp
@@ -218,9 +218,10 @@
MACHINE_START_MEMBER(_8080bw_state,extra_8080bw)
{
+ mw8080bw_state::machine_start();
+
MACHINE_START_CALL_MEMBER(extra_8080bw_sh);
MACHINE_START_CALL_MEMBER(extra_8080bw_vh);
- MACHINE_START_CALL_MEMBER(mw8080bw);
}
/*******************************************************/
@@ -396,11 +397,11 @@ static INPUT_PORTS_START( invadpt2 )
PORT_DIPNAME( 0x01, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x00, "3" )
PORT_DIPSETTING( 0x01, "4" )
- /* SW1:2 doesn't seem to work? */
- PORT_DIPNAME( 0x02, 0x00, "Rotate Images" ) PORT_DIPLOCATION("SW1:2") /* "When ON, the images on screen will be rotated. Default is ON." */
+ // SW1:2 doesn't seem to work?
+ PORT_DIPNAME( 0x02, 0x00, "Rotate Images" ) PORT_DIPLOCATION("SW1:2") // "When ON, the images on screen will be rotated. Default is ON."
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x00, "Preset Mode" ) PORT_DIPLOCATION("SW1:4") /* Preset Mode: "Switch for checking, when OFF checking can be done." */
+ PORT_DIPNAME( 0x08, 0x00, "Preset Mode" ) PORT_DIPLOCATION("SW1:4") // Preset Mode: "Switch for checking, when OFF checking can be done."
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
INPUT_PORTS_END
@@ -562,8 +563,8 @@ void _8080bw_state::astropal_io_map(address_map &map)
map(0x01, 0x01).mirror(0x04).portr("IN1");
map(0x03, 0x03).mirror(0x04).portr("IN3");
- map(0x03, 0x03).w(FUNC(_8080bw_state::invaders_audio_1_w));
- map(0x05, 0x05).w(FUNC(_8080bw_state::invaders_audio_2_w));
+ map(0x03, 0x03).w("soundboard", FUNC(invaders_audio_device::p1_w));
+ map(0x05, 0x05).w("soundboard", FUNC(invaders_audio_device::p2_w));
map(0x06, 0x06).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
}
@@ -812,8 +813,8 @@ void _8080bw_state::spacecom_map(address_map &map)
void _8080bw_state::spacecom_io_map(address_map &map)
{
map(0x41, 0x41).portr("IN0");
- map(0x42, 0x42).portr("IN1").w(FUNC(_8080bw_state::invaders_audio_1_w));
- map(0x44, 0x44).portr("IN2").w(FUNC(_8080bw_state::invaders_audio_2_w));
+ map(0x42, 0x42).portr("IN1").w("soundboard", FUNC(invaders_audio_device::p1_w));
+ map(0x44, 0x44).portr("IN2").w("soundboard", FUNC(invaders_audio_device::p2_w));
}
void _8080bw_state::spacecom(machine_config &config)
@@ -825,7 +826,6 @@ void _8080bw_state::spacecom(machine_config &config)
m_maincpu->set_addrmap(AS_IO, &_8080bw_state::spacecom_io_map);
m_maincpu->set_irq_acknowledge_callback(FUNC(_8080bw_state::interrupt_vector));
- MCFG_MACHINE_START_OVERRIDE(mw8080bw_state, mw8080bw)
MCFG_MACHINE_RESET_OVERRIDE(mw8080bw_state, mw8080bw)
/* video hardware */
@@ -836,7 +836,8 @@ void _8080bw_state::spacecom(machine_config &config)
PALETTE(config, m_palette, palette_device::MONOCHROME);
/* sound hardware */
- invaders_audio(config);
+ INVADERS_AUDIO(config, "soundboard"). // the flip screen line is only connected on the cocktail PCB
+ flip_screen_out().set([this] (int state) { if (invaders_is_cabinet_cocktail()) m_flip_screen = state ? 1 : 0; });
}
void _8080bw_state::init_spacecom()
@@ -1236,12 +1237,6 @@ static INPUT_PORTS_START( cosmicmo )
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNKNOWN )
INPUT_PORTS_END
-WRITE8_MEMBER(_8080bw_state::cosmicmo_05_w)
-{
- invaders_audio_2_w(space, offset, data);
- m_flip_screen = BIT(data, 5) & BIT(ioport("IN2")->read(), 2);
-}
-
void _8080bw_state::cosmicmo_io_map(address_map &map)
{
map.global_mask(0x7);
@@ -1251,9 +1246,9 @@ void _8080bw_state::cosmicmo_io_map(address_map &map)
map(0x03, 0x03).mirror(0x04).r(m_mb14241, FUNC(mb14241_device::shift_result_r));
map(0x02, 0x02).w(m_mb14241, FUNC(mb14241_device::shift_count_w));
- map(0x03, 0x03).w(FUNC(_8080bw_state::invaders_audio_1_w));
+ map(0x03, 0x03).w("soundboard", FUNC(invaders_audio_device::p1_w));
map(0x04, 0x04).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
- map(0x05, 0x05).w(FUNC(_8080bw_state::cosmicmo_05_w));
+ map(0x05, 0x05).w("soundboard", FUNC(invaders_audio_device::p2_w));
map(0x06, 0x06).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
}
@@ -1261,18 +1256,19 @@ void _8080bw_state::cosmicmo(machine_config &config)
{
mw8080bw_root(config);
- /* basic machine hardware */
+ // basic machine hardware
m_maincpu->set_addrmap(AS_IO, &_8080bw_state::cosmicmo_io_map);
MCFG_MACHINE_START_OVERRIDE(_8080bw_state,extra_8080bw)
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 255);
- /* add shifter */
+ // add shifter
MB14241(config, m_mb14241);
- /* sound hardware */
- invaders_audio(config);
+ // sound hardware
+ INVADERS_AUDIO(config, "soundboard").
+ flip_screen_out().set([this] (int state) { m_flip_screen = (state && BIT(ioport("IN2")->read(), 2)) ? 1 : 0; });
/* video hardware */
m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_invaders));
@@ -1399,12 +1395,12 @@ INPUT_PORTS_END
MACHINE_START_MEMBER(_8080bw_state,rollingc)
{
+ mw8080bw_state::machine_start();
+
m_scattered_colorram = std::make_unique<uint8_t []>(0x400);
m_scattered_colorram2 = std::make_unique<uint8_t []>(0x400);
save_pointer(&m_scattered_colorram[0], "m_scattered_colorram", 0x400);
save_pointer(&m_scattered_colorram2[0], "m_scattered_colorram2", 0x400);
-
- MACHINE_START_CALL_MEMBER(mw8080bw);
}
void _8080bw_state::rollingc(machine_config &config)
@@ -1535,11 +1531,12 @@ INPUT_PORTS_END
MACHINE_START_MEMBER(_8080bw_state,schaser)
{
+ mw8080bw_state::machine_start();
+
m_scattered_colorram = std::make_unique<uint8_t []>(0x800);
save_pointer(&m_scattered_colorram[0], "m_scattered_colorram", 0x800);
MACHINE_START_CALL_MEMBER(schaser_sh);
MACHINE_START_CALL_MEMBER(extra_8080bw_vh);
- MACHINE_START_CALL_MEMBER(mw8080bw);
}
MACHINE_RESET_MEMBER(_8080bw_state,schaser)
@@ -1676,12 +1673,13 @@ INPUT_PORTS_END
MACHINE_START_MEMBER(_8080bw_state,schasercv)
{
+ mw8080bw_state::machine_start();
+
m_scattered_colorram = std::make_unique<uint8_t []>(0x800);
save_pointer(&m_scattered_colorram[0], "m_scattered_colorram", 0x800);
MACHINE_START_CALL_MEMBER(extra_8080bw_sh);
MACHINE_START_CALL_MEMBER(extra_8080bw_vh);
- MACHINE_START_CALL_MEMBER(mw8080bw);
}
void _8080bw_state::schasercv(machine_config &config)
@@ -1784,10 +1782,10 @@ INPUT_PORTS_END
MACHINE_START_MEMBER(_8080bw_state,sflush)
{
+ mw8080bw_state::machine_start();
+
m_scattered_colorram = std::make_unique<uint8_t []>(0x800);
save_pointer(&m_scattered_colorram[0], "m_scattered_colorram", 0x800);
-
- MACHINE_START_CALL_MEMBER(mw8080bw);
}
void _8080bw_state::sflush(machine_config &config)
@@ -1977,12 +1975,12 @@ WRITE_LINE_MEMBER(_8080bw_state::polaris_60hz_w)
MACHINE_START_MEMBER(_8080bw_state,polaris)
{
+ mw8080bw_state::machine_start();
+
m_scattered_colorram = std::make_unique<uint8_t []>(0x800);
save_pointer(&m_scattered_colorram[0], "m_scattered_colorram", 0x800);
save_item(NAME(m_polaris_cloud_speed));
save_item(NAME(m_polaris_cloud_pos));
-
- MACHINE_START_CALL_MEMBER(mw8080bw);
}
READ8_MEMBER(_8080bw_state::polaris_port00_r)
@@ -2940,9 +2938,9 @@ void _8080bw_state::vortex_io_map(address_map &map)
map(0x01, 0x01).mirror(0x04).r(m_mb14241, FUNC(mb14241_device::shift_result_r));
map(0x00, 0x00).w(m_mb14241, FUNC(mb14241_device::shift_count_w));
- map(0x01, 0x01).w(FUNC(_8080bw_state::invaders_audio_1_w));
+ map(0x01, 0x01).w("soundboard", FUNC(invaders_audio_device::p1_w));
map(0x06, 0x06).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
- map(0x07, 0x07).w(FUNC(_8080bw_state::invaders_audio_2_w));
+ map(0x07, 0x07).w("soundboard", FUNC(invaders_audio_device::p2_w));
map(0x04, 0x04).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
}
@@ -2990,7 +2988,8 @@ void _8080bw_state::vortex(machine_config &config)
MB14241(config, m_mb14241);
/* audio hardware */
- invaders_audio(config);
+ INVADERS_AUDIO(config, "soundboard"). // the flip screen line is only connected on the cocktail PCB
+ flip_screen_out().set([this] (int state) { if (invaders_is_cabinet_cocktail()) m_flip_screen = state ? 1 : 0; });
}
/* decrypt function for vortex */
@@ -3219,12 +3218,12 @@ READ8_MEMBER(_8080bw_state::claybust_gun_hi_r)
void _8080bw_state::claybust_io_map(address_map &map)
{
- //AM_RANGE(0x00, 0x00) AM_WRITENOP // ?
+ //map(0x00, 0x00).nopw(); // ?
map(0x01, 0x01).portr("IN1").w(m_mb14241, FUNC(mb14241_device::shift_count_w));
map(0x02, 0x02).r(FUNC(_8080bw_state::claybust_gun_lo_r)).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
- map(0x03, 0x03).r(m_mb14241, FUNC(mb14241_device::shift_result_r)); //AM_WRITENOP // port3 write looks sound-related
+ map(0x03, 0x03).r(m_mb14241, FUNC(mb14241_device::shift_result_r)); //.nopw(); // port3 write looks sound-related
map(0x04, 0x04).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
- //AM_RANGE(0x05, 0x05) AM_WRITENOP // ?
+ //map(0x05, 0x05).nopw(); // ?
map(0x06, 0x06).r(FUNC(_8080bw_state::claybust_gun_hi_r));
}
@@ -3273,10 +3272,10 @@ INPUT_PORTS_END
MACHINE_START_MEMBER(_8080bw_state, claybust)
{
+ mw8080bw_state::machine_start();
+
m_claybust_gun_pos = 0;
save_item(NAME(m_claybust_gun_pos));
-
- MACHINE_START_CALL_MEMBER(mw8080bw);
}
void _8080bw_state::claybust(machine_config &config)
@@ -3452,7 +3451,7 @@ static INPUT_PORTS_START( invmulti )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, invaders_sw5_r)
PORT_START("IN1")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, invaders_coin_input_r)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, mw8080bw_state, direct_coin_count, 0)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
@@ -3467,11 +3466,6 @@ static INPUT_PORTS_START( invmulti )
PORT_BIT( 0x70, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, invaders_in2_control_r)
PORT_DIPUNUSED_DIPLOC( 0x80, 0x00, "SW:1" )
- /* fake port for reading the coin input */
- PORT_START(INVADERS_COIN_INPUT_PORT_TAG)
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0xfe, IP_ACTIVE_HIGH, IPT_UNUSED )
-
/* fake port for cabinet type */
PORT_START(INVADERS_CAB_TYPE_PORT_TAG)
PORT_CONFNAME( 0x01, 0x00, DEF_STR( Cabinet ) )
diff --git a/src/mame/drivers/a5105.cpp b/src/mame/drivers/a5105.cpp
index ec5bb1cf8ff..18c25eb6daf 100644
--- a/src/mame/drivers/a5105.cpp
+++ b/src/mame/drivers/a5105.cpp
@@ -388,10 +388,10 @@ void a5105_state::a5105_io(address_map &map)
map(0x98, 0x99).rw(m_hgdc, FUNC(upd7220_device::read), FUNC(upd7220_device::write));
map(0x9c, 0x9c).w(FUNC(a5105_state::pcg_val_w));
-// AM_RANGE(0x9d, 0x9d) crtc area (ff-based), palette routes here
+// map(0x9d, 0x9d) crtc area (ff-based), palette routes here
map(0x9e, 0x9e).w(FUNC(a5105_state::pcg_addr_w));
-// AM_RANGE(0xa0, 0xa1) ay8910?
+// map(0xa0, 0xa1) ay8910?
map(0xa8, 0xa8).rw(FUNC(a5105_state::a5105_memsel_r), FUNC(a5105_state::a5105_memsel_w));
map(0xa9, 0xa9).r(FUNC(a5105_state::key_r));
map(0xaa, 0xaa).rw(FUNC(a5105_state::key_mux_r), FUNC(a5105_state::key_mux_w));
diff --git a/src/mame/drivers/a7800.cpp b/src/mame/drivers/a7800.cpp
index 1ac1a0e2f7d..145388dc6fb 100644
--- a/src/mame/drivers/a7800.cpp
+++ b/src/mame/drivers/a7800.cpp
@@ -1407,8 +1407,7 @@ void a7800_state::a7800_ntsc(machine_config &config)
A78_CART_SLOT(config, "cartslot", a7800_cart, nullptr);
/* software lists */
- SOFTWARE_LIST(config, "cart_list").set_original("a7800");
- subdevice<software_list_device>("cart_list")->set_filter("NTSC");
+ SOFTWARE_LIST(config, "cart_list").set_original("a7800").set_filter("NTSC");
}
void a7800_pal_state::a7800_pal(machine_config &config)
diff --git a/src/mame/drivers/acesp.cpp b/src/mame/drivers/acesp.cpp
index 01584aaba1b..ddf28e958c9 100644
--- a/src/mame/drivers/acesp.cpp
+++ b/src/mame/drivers/acesp.cpp
@@ -76,8 +76,8 @@ void ace_sp_state::ace_sp_map(address_map &map)
#if 0
void ace_sp_state::ace_sp_portmap(address_map &map)
{
- //AM_RANGE(0x02, 0x02) // misc
- //AM_RANGE(0x05, 0x06) // AYs
+ //map(0x02, 0x02) // misc
+ //map(0x05, 0x06) // AYs
}
#endif
diff --git a/src/mame/drivers/airraid.cpp b/src/mame/drivers/airraid.cpp
index c929bb7a1f5..f8ca047b6fa 100644
--- a/src/mame/drivers/airraid.cpp
+++ b/src/mame/drivers/airraid.cpp
@@ -258,19 +258,18 @@ void airraid_state::airraid_map(address_map &map)
map(0xc003, 0xc003).portr("DSW2");
map(0xc004, 0xc004).portr("DSW1");
map(0xc500, 0xc500).w(FUNC(airraid_state::cshooter_c500_w));
-// AM_RANGE(0xc600, 0xc600) AM_WRITE(cshooter_c600_w) // see notes
+// map(0xc600, 0xc600).w(FUNC(airraid_state::cshooter_c600_w)); // see notes
map(0xc700, 0xc700).w(FUNC(airraid_state::cshooter_c700_w));
-// AM_RANGE(0xc801, 0xc801) AM_WRITE(cshooter_c801_w) // see notes
+// map(0xc801, 0xc801).w(FUNC(airraid_state::cshooter_c801_w)); // see notes
map(0xd000, 0xd7ff).ram().w(m_airraid_video, FUNC(airraid_video_device::txram_w)).share("txram");
map(0xd800, 0xd8ff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette");
map(0xda00, 0xdaff).ram().w(m_palette, FUNC(palette_device::write8_ext)).share("palette_ext");
map(0xdc00, 0xdc0f).ram().w(m_airraid_video, FUNC(airraid_video_device::vregs_w)).share("vregs");
-// AM_RANGE(0xdc10, 0xdc10) AM_RAM
+// map(0xdc10, 0xdc10).ram();
map(0xdc11, 0xdc11).w(FUNC(airraid_state::bank_w));
-// AM_RANGE(0xdc19, 0xdc19) AM_RAM
-// AM_RANGE(0xdc1e, 0xdc1e) AM_RAM
-// AM_RANGE(0xdc1f, 0xdc1f) AM_RAM
-
+// map(0xdc19, 0xdc19).ram();
+// map(0xdc1e, 0xdc1e).ram();
+// map(0xdc1f, 0xdc1f).ram();
map(0xde00, 0xde0f).rw(m_seibu_sound, FUNC(seibu_sound_device::main_r), FUNC(seibu_sound_device::main_w));
map(0xe000, 0xfdff).ram().share("mainram");
map(0xfe00, 0xffff).ram().share("sprite_ram");
diff --git a/src/mame/drivers/akaiax80.cpp b/src/mame/drivers/akaiax80.cpp
index 7d26b54139c..623421b9e25 100644
--- a/src/mame/drivers/akaiax80.cpp
+++ b/src/mame/drivers/akaiax80.cpp
@@ -84,9 +84,9 @@ void ax80_state::ax80_map(address_map &map)
map(0x1060, 0x1060).mirror(0x000e).rw("kdc", FUNC(i8279_device::data_r), FUNC(i8279_device::data_w)); // IC11
map(0x1061, 0x1061).mirror(0x000e).rw("kdc", FUNC(i8279_device::status_r), FUNC(i8279_device::cmd_w)); // IC11
map(0x1070, 0x1073).mirror(0x000c).rw(PPI1_TAG, FUNC(i8255_device::read), FUNC(i8255_device::write)); // IC10
- //AM_RANGE(0x2000, 0x2001) AM_MIRROR(0x0dfe) AM_DEVREADWRITE(PPI0_TAG, i8255_device, read, write) // IC9 - A9 connects to A1-pin
- //AM_RANGE(0x2200, 0x2201) AM_MIRROR(0x0dfe) AM_DEVREADWRITE(PPI0_TAG, i8255_device, read, write) // IC9 - A9 connects to A1-pin
- //AM_RANGE(0x3000, 0x3fff) // steers audio to the various voice channels
+ //map(0x2000, 0x2001).mirror(0x0dfe).rw(PPI0_TAG, FUNC(i8255_device::read), FUNC(i8255_device::write)); // IC9 - A9 connects to A1-pin
+ //map(0x2200, 0x2201).mirror(0x0dfe).rw(PPI0_TAG, FUNC(i8255_device::read), FUNC(i8255_device::write)); // IC9 - A9 connects to A1-pin
+ //map(0x3000, 0x3fff) // steers audio to the various voice channels
map(0x4000, 0x5fff).mirror(0x2000).rom().region("maincpu", 0x1000); // external program EPROM
map(0x8000, 0x87ff).mirror(0x3800).ram();
map(0xc000, 0xc7ff).mirror(0x3800).ram();
diff --git a/src/mame/drivers/alesis.cpp b/src/mame/drivers/alesis.cpp
index f0784a972e9..5c73c5a4343 100644
--- a/src/mame/drivers/alesis.cpp
+++ b/src/mame/drivers/alesis.cpp
@@ -143,7 +143,7 @@ void alesis_state::sr16_mem(address_map &map)
void alesis_state::sr16_io(address_map &map)
{
- //ADDRESS_MAP_UNMAP_HIGH
+ //map.unmap_value_high();
map(0x0000, 0x0000).mirror(0xff).w("dm3ag", FUNC(alesis_dm3ag_device::write));
map(0x0200, 0x0200).mirror(0xff).w(FUNC(alesis_state::sr16_lcd_w));
map(0x0300, 0x0300).mirror(0xff).w(FUNC(alesis_state::kb_matrix_w));
diff --git a/src/mame/drivers/alesis_qs.cpp b/src/mame/drivers/alesis_qs.cpp
index 09c55100e4e..7542b5202bb 100644
--- a/src/mame/drivers/alesis_qs.cpp
+++ b/src/mame/drivers/alesis_qs.cpp
@@ -47,7 +47,7 @@ INPUT_PORTS_END
void qs_state::qs7_prog_map(address_map &map)
{
- //ADDRESS_MAP_GLOBAL_MASK(0x3ffff)
+ //map.global_mask(0x3ffff);
map(0x00000, 0x3ffff).rom();
}
diff --git a/src/mame/drivers/alpha68k_n.cpp b/src/mame/drivers/alpha68k_n.cpp
index 2a09a07f63b..b997ec5943c 100644
--- a/src/mame/drivers/alpha68k_n.cpp
+++ b/src/mame/drivers/alpha68k_n.cpp
@@ -339,11 +339,11 @@ void alpha68k_N_state::sound_map(address_map &map)
map(0xe004, 0xe004).w("dac", FUNC(dac_byte_interface::data_w));
map(0xe006, 0xe00e).nopw(); // soundboard I/O's, ignored
/* reference only
- AM_RANGE(0xe006, 0xe006) AM_WRITENOP // NMI: diminishing saw-tooth
- AM_RANGE(0xe008, 0xe008) AM_WRITENOP // NMI: 00
- AM_RANGE(0xe00a, 0xe00a) AM_WRITENOP // RST38: 20
- AM_RANGE(0xe00c, 0xe00c) AM_WRITENOP // RST30: 00 on entry
- AM_RANGE(0xe00e, 0xe00e) AM_WRITENOP // RST30: 00,02,ff on exit(0x1d88)
+ map(0xe006, 0xe006).nopw(); // NMI: diminishing saw-tooth
+ map(0xe008, 0xe008).nopw(); // NMI: 00
+ map(0xe00a, 0xe00a).nopw(); // RST38: 20
+ map(0xe00c, 0xe00c).nopw(); // RST30: 00 on entry
+ map(0xe00e, 0xe00e).nopw(); // RST30: 00,02,ff on exit(0x1d88)
*/
}
diff --git a/src/mame/drivers/alphatpx.cpp b/src/mame/drivers/alphatpx.cpp
index fe26a145e40..5bca9bff64f 100644
--- a/src/mame/drivers/alphatpx.cpp
+++ b/src/mame/drivers/alphatpx.cpp
@@ -308,13 +308,13 @@ void alphatp_34_state::alphatp3_map(address_map &map)
void alphatp_34_state::alphatp3_io(address_map &map)
{
map.unmap_value_high();
- //AM_RANGE(0x00, 0x00) AM_READ // unknown
+ //map(0x00, 0x00).r(FUNC(alphatp_34_state::)); // unknown
map(0x04, 0x05).rw("uart", FUNC(i8251_device::read), FUNC(i8251_device::write));
map(0x08, 0x09).rw(FUNC(alphatp_34_state::comm88_r), FUNC(alphatp_34_state::comm88_w));
map(0x10, 0x11).rw(m_kbdmcu, FUNC(i8041a_device::upi41_master_r), FUNC(i8041a_device::upi41_master_w));
map(0x12, 0x12).w(FUNC(alphatp_34_state::beep_w));
map(0x40, 0x41).r(FUNC(alphatp_34_state::start88_r));
- //AM_RANGE(0x42, 0x42) AM_WRITE // unknown
+ //map(0x42, 0x42).w(FUNC(alphatp_34_state::)); // unknown
map(0x50, 0x53).rw(FUNC(alphatp_34_state::fdc_r), FUNC(alphatp_34_state::fdc_w));
map(0x54, 0x54).rw(FUNC(alphatp_34_state::fdc_stat_r), FUNC(alphatp_34_state::fdc_cmd_w));
map(0x78, 0x78).w(FUNC(alphatp_34_state::bank_w));
@@ -329,11 +329,11 @@ void alphatp_34_state::alphatp30_8088_map(address_map &map)
void alphatp_34_state::alphatp30_8088_io(address_map &map)
{
- //AM_RANGE(0x008a, 0x008a) AM_READ // unknown
+ //map(0x008a, 0x008a).r(FUNC(alphatp_34_state::)); // unknown
map(0xf800, 0xf800).w(FUNC(alphatp_34_state::gfxext1_w));
map(0xf900, 0xf900).w(FUNC(alphatp_34_state::gfxext2_w));
map(0xfa00, 0xfa01).w(FUNC(alphatp_34_state::gfxext3_w));
- //AM_RANGE(0xfb00, 0xfb0f) AM_WRITE // unknown possibly gfx ext
+ //map(0xfb00, 0xfb0f).w(FUNC(alphatp_34_state::)); // unknown possibly gfx ext
map(0xffe0, 0xffe1).rw(m_pic, FUNC(pic8259_device::read), FUNC(pic8259_device::write));
map(0xffe4, 0xffe7).rw("pit", FUNC(pit8253_device::read), FUNC(pit8253_device::write));
map(0xffe9, 0xffea).rw(FUNC(alphatp_34_state::comm85_r), FUNC(alphatp_34_state::comm85_w));
diff --git a/src/mame/drivers/alphatro.cpp b/src/mame/drivers/alphatro.cpp
index ccd92fdb623..bedb42e9593 100644
--- a/src/mame/drivers/alphatro.cpp
+++ b/src/mame/drivers/alphatro.cpp
@@ -448,7 +448,7 @@ void alphatro_state::alphatro_io(address_map &map)
// 8257 DMAC
map(0x60, 0x68).rw(m_dmac, FUNC(i8257_device::read), FUNC(i8257_device::write));
// 8259 PIT
- //AM_RANGE(0x70, 0x72) AM_DEVREADWRITE("
+ //map(0x70, 0x72).r(FUNC(alphatro_state::)).w(FUNC(alphatro_state::));
map(0xf0, 0xf0).r(FUNC(alphatro_state::portf0_r)).w(FUNC(alphatro_state::portf0_w));
map(0xf8, 0xf8).rw(m_fdc, FUNC(upd765a_device::fifo_r), FUNC(upd765a_device::fifo_w));
map(0xf9, 0xf9).r(m_fdc, FUNC(upd765a_device::msr_r));
diff --git a/src/mame/drivers/altair.cpp b/src/mame/drivers/altair.cpp
index 4a1f9022b49..7516502342d 100644
--- a/src/mame/drivers/altair.cpp
+++ b/src/mame/drivers/altair.cpp
@@ -68,7 +68,7 @@ void altair_state::io_map(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
- // TODO: Remove AM_MIRROR() and use SIO address S0-S7
+ // TODO: Remove mirror() and use SIO address S0-S7
map(0x00, 0x01).mirror(0x10).rw("acia", FUNC(acia6850_device::read), FUNC(acia6850_device::write));
}
diff --git a/src/mame/drivers/altos486.cpp b/src/mame/drivers/altos486.cpp
index fa115fe4ae8..57eaf43019b 100644
--- a/src/mame/drivers/altos486.cpp
+++ b/src/mame/drivers/altos486.cpp
@@ -122,14 +122,14 @@ void altos486_state::altos486_z80_mem(address_map &map)
map.unmap_value_high();
map(0x0000, 0x0fff).rom().region("iocpu", 0);
map(0x2000, 0x27ff).ram();
- //AM_RANGE(0x8000, 0xffff) AM_READWRITE(z80_shared_r, z80_shared_w)
+ //map(0x8000, 0xffff).rw(FUNC(altos486_state::z80_shared_r), FUNC(altos486_state::z80_shared_w)):
}
void altos486_state::altos486_z80_io(address_map &map)
{
- //AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("sio0", z80sio0_device, read, write)
- //AM_RANGE(0x04, 0x07) AM_DEVREADWRITE("sio1", z80sio0_device, read, write)
- //AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE("sio2", z80sio0_device, read, write)
+ //map(0x00, 0x03).rw("sio0", FUNC(z80sio0_device::read), FUNC(z80sio0_device::write));
+ //map(0x04, 0x07).rw("sio1", FUNC(z80sio0_device::read), FUNC(z80sio0_device::write));
+ //map(0x08, 0x0b).rw("sio2", FUNC(z80sio0_device::read), FUNC(z80sio0_device::write));
}
void altos486_state::altos486(machine_config &config)
diff --git a/src/mame/drivers/altos5.cpp b/src/mame/drivers/altos5.cpp
index 5cca61da543..88224c6a38c 100644
--- a/src/mame/drivers/altos5.cpp
+++ b/src/mame/drivers/altos5.cpp
@@ -110,7 +110,7 @@ void altos5_state::io_map(address_map &map)
map(0x10, 0x13).rw("pio1", FUNC(z80pio_device::read), FUNC(z80pio_device::write));
map(0x14, 0x17).w(FUNC(altos5_state::port14_w));
map(0x1c, 0x1f).rw("dart", FUNC(z80dart_device::ba_cd_r), FUNC(z80dart_device::ba_cd_w));
- //AM_RANGE(0x20, 0x23) // Hard drive
+ //map(0x20, 0x23) // Hard drive
map(0x2c, 0x2f).rw("sio", FUNC(z80sio_device::ba_cd_r), FUNC(z80sio_device::ba_cd_w));
}
diff --git a/src/mame/drivers/amaticmg.cpp b/src/mame/drivers/amaticmg.cpp
index 8cbe200e47f..0c6fc0048ed 100644
--- a/src/mame/drivers/amaticmg.cpp
+++ b/src/mame/drivers/amaticmg.cpp
@@ -680,7 +680,7 @@ WRITE8_MEMBER( amaticmg_state::unk80_w )
void amaticmg_state::amaticmg_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
- map(0x8000, 0x9fff).ram(); // AM_SHARE("nvram")
+ map(0x8000, 0x9fff).ram(); // .share("nvram");
map(0xa000, 0xafff).ram().share("vram");
map(0xb000, 0xbfff).ram().share("attr");
map(0xc000, 0xffff).bankr("bank1");
@@ -696,14 +696,14 @@ void amaticmg_state::amaticmg_portmap(address_map &map)
map(0x61, 0x61).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
map(0x80, 0x80).w(FUNC(amaticmg_state::unk80_w));
map(0xc0, 0xc0).w(FUNC(amaticmg_state::rombank_w));
-// AM_RANGE(0x00, 0x00) AM_DEVWRITE("dac1", dac_byte_interface, data_w)
-// AM_RANGE(0x00, 0x00) AM_DEVWRITE("dac2", dac_byte_interface, data_w)
+// map(0x00, 0x00).w("dac1", FUNC(dac_byte_interface::data_w));
+// map(0x00, 0x00).w("dac2", FUNC(dac_byte_interface::data_w));
}
void amaticmg_state::amaticmg2_portmap(address_map &map)
{
map.global_mask(0xff);
-// ADDRESS_MAP_UNMAP_HIGH
+// map.unmap_value_high();
map(0x00, 0x03).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0x20, 0x23).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0x40, 0x41).w("ymsnd", FUNC(ym3812_device::write));
@@ -719,14 +719,14 @@ void amaticmg_state::amaticmg2_portmap(address_map &map)
void amaticmg_state::amaticmg4_portmap(address_map &map)
{
map.global_mask(0xff);
-// ADDRESS_MAP_UNMAP_HIGH
+// map.unmap_value_high();
map(0x00, 0x03).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0x04, 0x07).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0x08, 0x0b).rw("ppi8255_2", FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0x50, 0x51).w("ymsnd", FUNC(ym3812_device::write));
map(0x0e, 0x0e).w("crtc", FUNC(mc6845_device::address_w));
map(0x0f, 0x0f).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
-// AM_RANGE(0xc0, 0xc0) AM_WRITE(rombank_w)
+// map(0xc0, 0xc0).w(FUNC(amaticmg_state::rombank_w));
map(0xe6, 0xe6).w(FUNC(amaticmg_state::nmi_mask_w));
}
diff --git a/src/mame/drivers/amico2k.cpp b/src/mame/drivers/amico2k.cpp
index cf3874d260c..86cd2db920c 100644
--- a/src/mame/drivers/amico2k.cpp
+++ b/src/mame/drivers/amico2k.cpp
@@ -71,7 +71,7 @@ void amico2k_state::amico2k_mem(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x03ff).ram();
-// AM_RANGE(0x0400, 0x07ff) AM_RAM // optional expansion RAM
+// map(0x0400, 0x07ff).ram(); // optional expansion RAM
map(0xfb00, 0xfcff).rom();
map(0xfd00, 0xfd03).rw("i8255", FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0xfe00, 0xffff).rom();
diff --git a/src/mame/drivers/ampoker2.cpp b/src/mame/drivers/ampoker2.cpp
index 4bd0e3570f7..c216303d114 100644
--- a/src/mame/drivers/ampoker2.cpp
+++ b/src/mame/drivers/ampoker2.cpp
@@ -634,7 +634,7 @@ void ampoker2_state::io_map(address_map &map)
map(0x15, 0x15).portr("IN5");
map(0x16, 0x16).portr("IN6");
map(0x17, 0x17).portr("IN7");
-// AM_RANGE(0x21, 0x21) AM_WRITENOP /* undocumented, write 0x1a after each reset */
+// map(0x21, 0x21).nopw(); /* undocumented, write 0x1a after each reset */
map(0x30, 0x30).w(FUNC(ampoker2_state::port30_w)); /* see write handlers */
map(0x31, 0x31).w(FUNC(ampoker2_state::port31_w)); /* see write handlers */
map(0x32, 0x32).w(FUNC(ampoker2_state::port32_w)); /* see write handlers */
diff --git a/src/mame/drivers/amspdwy.cpp b/src/mame/drivers/amspdwy.cpp
index 373b1e92627..fa1d73b987d 100644
--- a/src/mame/drivers/amspdwy.cpp
+++ b/src/mame/drivers/amspdwy.cpp
@@ -78,7 +78,7 @@ void amspdwy_state::amspdwy_map(address_map &map)
map(0x9000, 0x93ff).mirror(0x0400).ram().w(FUNC(amspdwy_state::amspdwy_videoram_w)).share("videoram");
map(0x9800, 0x9bff).ram().w(FUNC(amspdwy_state::amspdwy_colorram_w)).share("colorram");
map(0x9c00, 0x9fff).ram(); // unused?
-// AM_RANGE(0xa000, 0xa000) AM_WRITENOP // ?
+// map(0xa000, 0xa000).nopw(); // ?
map(0xa000, 0xa000).portr("DSW1");
map(0xa400, 0xa400).portr("DSW2").w(FUNC(amspdwy_state::amspdwy_flipscreen_w));
map(0xa800, 0xa800).r(FUNC(amspdwy_state::amspdwy_wheel_0_r));
@@ -107,7 +107,7 @@ void amspdwy_state::amspdwy_portmap(address_map &map)
void amspdwy_state::amspdwy_sound_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
-// AM_RANGE(0x8000, 0x8000) AM_WRITENOP // ? writes 0 at start
+// map(0x8000, 0x8000).nopw(); // ? writes 0 at start
map(0x9000, 0x9000).r(m_soundlatch, FUNC(generic_latch_8_device::read));
map(0xa000, 0xa001).rw(m_ym2151, FUNC(ym2151_device::read), FUNC(ym2151_device::write));
map(0xc000, 0xdfff).ram();
diff --git a/src/mame/drivers/anes.cpp b/src/mame/drivers/anes.cpp
index 44a6d42b748..19211d7a5fc 100644
--- a/src/mame/drivers/anes.cpp
+++ b/src/mame/drivers/anes.cpp
@@ -92,14 +92,14 @@ void anes_state::io_map(address_map &map)
map(0x07, 0x07).nopw(); // mux write
map(0x08, 0x09).w("ym", FUNC(ym2413_device::write));
map(0x0a, 0x0a).w(FUNC(anes_state::blit_trigger_w));
-// AM_RANGE(0x0b, 0x0b) AM_WRITE(blit_mode_w)
+// map(0x0b, 0x0b).w(FUNC(anes_state::blit_mode_w));
map(0x0c, 0x0e).w(FUNC(anes_state::vram_offset_w));
map(0x11, 0x11).portr("DSW1");
map(0x12, 0x12).portr("DSW2");
map(0x13, 0x13).portr("DSW3");
map(0x14, 0x15).nopr(); // mux read
map(0x16, 0x16).portr("IN0").nopw();
-// AM_RANGE(0xfe, 0xfe) banking? unknown ROM range
+// map(0xfe, 0xfe) banking? unknown ROM range
}
diff --git a/src/mame/drivers/apc.cpp b/src/mame/drivers/apc.cpp
index eb506700d2a..f689d4c3657 100644
--- a/src/mame/drivers/apc.cpp
+++ b/src/mame/drivers/apc.cpp
@@ -489,16 +489,16 @@ void apc_state::apc_map(address_map &map)
{
map(0x00000, 0x9ffff).ram();
map(0xa0000, 0xa0fff).ram().share("cmos");
-// AM_RANGE(0xa1000, 0xbffff) mirror CMOS
-// AM_RANGE(0xc0000, 0xcffff) standard character ROM
+// map(0xa1000, 0xbffff) mirror CMOS
+// map(0xc0000, 0xcffff) standard character ROM
map(0xd8000, 0xd9fff).ram().region("aux_pcg", 0); // AUX character RAM
-// AM_RANGE(0xe0000, 0xeffff) Special Character RAM
+// map(0xe0000, 0xeffff) Special Character RAM
map(0xfe000, 0xfffff).rom().region("ipl", 0);
}
void apc_state::apc_io(address_map &map)
{
-// ADDRESS_MAP_GLOBAL_MASK(0xff)
+// map.global_mask(0xff);
map(0x00, 0x1f).rw(FUNC(apc_state::apc_dma_r), FUNC(apc_state::apc_dma_w)).umask16(0xff00);
map(0x20, 0x23).rw(m_i8259_m, FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff); // i8259
map(0x28, 0x2f).rw(FUNC(apc_state::apc_port_28_r), FUNC(apc_state::apc_port_28_w)); // i8259 (even) / pit8253 (odd)
@@ -514,8 +514,8 @@ void apc_state::apc_io(address_map &map)
// 0x5b, Power Off
// 0x5e APU status/command
map(0x60, 0x60).rw(m_sound, FUNC(upd1771c_device::read), FUNC(upd1771c_device::write));
-// AM_RANGE(0x68, 0x6f) i8255 , ODA printer port (A: status (R) B: data (W) C: command (W))
-// 0x70, 0x76 AM_DEVREADWRITE8("upd7220_btm", upd7220_device, read, write, 0x00ff)
+// map(0x68, 0x6f) i8255 , ODA printer port (A: status (R) B: data (W) C: command (W))
+// map(0x70, 0x76).rw("upd7220_btm", FUNC(upd7220_device::read), FUNC(upd7220_device::write)).umask16(0x00ff);
// 0x71, 0x77 IDA Controller
// 0x80, 0x90 Communication Adapter
// 0xf0, 0xf6 ASOP Controller
diff --git a/src/mame/drivers/apogee.cpp b/src/mame/drivers/apogee.cpp
index 9518192e2cb..d07816386a9 100644
--- a/src/mame/drivers/apogee.cpp
+++ b/src/mame/drivers/apogee.cpp
@@ -56,7 +56,7 @@ void apogee_state::apogee_mem(address_map &map)
map(0x1000, 0xebff).ram(); // RAM
map(0xec00, 0xec03).rw("pit8253", FUNC(pit8253_device::read), FUNC(pit8253_device::write)).mirror(0x00fc);
map(0xed00, 0xed03).rw(m_ppi8255_1, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x00fc);
- //AM_RANGE( 0xee00, 0xee03 ) AM_DEVREADWRITE("ppi8255_2", i8255_device, read, write) AM_MIRROR(0x00fc)
+ //map(0xee00, 0xee03).rw("ppi8255_2", FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x00fc);
map(0xef00, 0xef01).rw("i8275", FUNC(i8275_device::read), FUNC(i8275_device::write)).mirror(0x00fe); // video
map(0xf000, 0xf0ff).w(m_dma8257, FUNC(i8257_device::write)); // DMA
map(0xf000, 0xffff).rom(); // System ROM
diff --git a/src/mame/drivers/apollo.cpp b/src/mame/drivers/apollo.cpp
index 425711d4c62..71f5ca64697 100644
--- a/src/mame/drivers/apollo.cpp
+++ b/src/mame/drivers/apollo.cpp
@@ -699,7 +699,7 @@ void apollo_state::dn3500_map(address_map &map)
map(ATBUS_MEMORY_BASE, ATBUS_MEMORY_END).rw(FUNC(apollo_state::apollo_atbus_memory_r), FUNC(apollo_state::apollo_atbus_memory_w));
// FIXME: must match with RAM size in driver/apollo_sio.c
- // AM_RANGE(DN3500_RAM_BASE, DN3500_RAM_END) AM_RAM /* 8MB RAM */
+ // map(DN3500_RAM_BASE, DN3500_RAM_END).ram(); /* 8MB RAM */
map(DN3500_RAM_BASE, DN3500_RAM_END).ram().w(FUNC(apollo_state::ram_with_parity_w)).share(RAM_TAG);
map(0x05d800, 0x05dc07).rw(m_graphics, FUNC(apollo_graphics_15i::apollo_mcr_r), FUNC(apollo_graphics_15i::apollo_mcr_w));
@@ -708,11 +708,11 @@ void apollo_state::dn3500_map(address_map &map)
map(0x05e800, 0x05ec07).rw(m_graphics, FUNC(apollo_graphics_15i::apollo_ccr_r), FUNC(apollo_graphics_15i::apollo_ccr_w));
map(0x0a0000, 0x0bffff).rw(m_graphics, FUNC(apollo_graphics_15i::apollo_cgm_r), FUNC(apollo_graphics_15i::apollo_cgm_w));
-// AM_RANGE(0x03020000, 0x0303ffff) Cache Tag Store (DN4500 only)
-// AM_RANGE(0x04000000, 0x0400ffff) Cache Tag Data (DN4500 only)
-// AM_RANGE(0x0e000000, 0x0fffffff) FPA address space
+// map(0x03020000, 0x0303ffff) Cache Tag Store (DN4500 only)
+// map(0x04000000, 0x0400ffff) Cache Tag Data (DN4500 only)
+// map(0x0e000000, 0x0fffffff) FPA address space
-// AM_RANGE(0xf8000000, 0xffffffff) AM_READWRITE(apollo_f8_r, apollo_f8_w)
+// map(0xf8000000, 0xffffffff).rw(FUNC(apollo_state::apollo_f8_r), FUNC(apollo_state::apollo_f8_w));
}
void apollo_state::dsp3500_map(address_map &map)
@@ -745,7 +745,7 @@ void apollo_state::dsp3500_map(address_map &map)
map(ATBUS_MEMORY_BASE, ATBUS_MEMORY_END).rw(FUNC(apollo_state::apollo_atbus_memory_r), FUNC(apollo_state::apollo_atbus_memory_w));
-// AM_RANGE(0xf8000000, 0xffffffff) AM_READWRITE(apollo_f8_r, apollo_f8_w)
+// map(0xf8000000, 0xffffffff).rw(FUNC(apollo_state::apollo_f8_r), FUNC(apollo_state::apollo_f8_w));
}
void apollo_state::dn3000_map(address_map &map)
@@ -771,7 +771,7 @@ void apollo_state::dn3000_map(address_map &map)
map(ATBUS_MEMORY_BASE, ATBUS_MEMORY_END).rw(FUNC(apollo_state::apollo_atbus_memory_r), FUNC(apollo_state::apollo_atbus_memory_w));
// FIXME: must match with RAM size in driver/apollo_sio.c
- // AM_RANGE(DN3000_RAM_BASE, DN3000_RAM_END) AM_RAM /* 8MB RAM */
+ // map(DN3000_RAM_BASE, DN3000_RAM_END).ram(); /* 8MB RAM */
map(DN3000_RAM_BASE, DN3000_RAM_END).ram().w(FUNC(apollo_state::ram_with_parity_w)).share(RAM_TAG);
map(0x05d800, 0x05dc07).rw(m_graphics, FUNC(apollo_graphics_15i::apollo_mcr_r), FUNC(apollo_graphics_15i::apollo_mcr_w));
@@ -805,7 +805,7 @@ void apollo_state::dsp3000_map(address_map &map)
map(ATBUS_MEMORY_BASE, ATBUS_MEMORY_END).rw(FUNC(apollo_state::apollo_atbus_memory_r), FUNC(apollo_state::apollo_atbus_memory_w));
// FIXME: must match with RAM size in driver/apollo_sio.c
- // AM_RANGE(DN3000_RAM_BASE, DN3000_RAM_END) AM_RAM /* 8MB RAM */
+ // map(DN3000_RAM_BASE, DN3000_RAM_END).ram(); /* 8MB RAM */
map(DN3000_RAM_BASE, DN3000_RAM_END).ram().w(FUNC(apollo_state::ram_with_parity_w)).share(RAM_TAG);
}
@@ -841,7 +841,7 @@ void apollo_state::dn5500_map(address_map &map)
map(ATBUS_MEMORY_BASE, ATBUS_MEMORY_END).rw(FUNC(apollo_state::apollo_atbus_memory_r), FUNC(apollo_state::apollo_atbus_memory_w));
// FIXME: must match with RAM size in driver/apollo_sio.c
- // AM_RANGE(DN3500_RAM_BASE, DN3500_RAM_END) AM_RAM /* 8MB RAM */
+ // map(DN3500_RAM_BASE, DN3500_RAM_END).ram(); /* 8MB RAM */
map(DN5500_RAM_BASE, DN5500_RAM_END).ram().w(FUNC(apollo_state::ram_with_parity_w)).share(RAM_TAG);
map(0x05d800, 0x05dc07).rw(m_graphics, FUNC(apollo_graphics_15i::apollo_mcr_r), FUNC(apollo_graphics_15i::apollo_mcr_w));
@@ -850,12 +850,12 @@ void apollo_state::dn5500_map(address_map &map)
map(0x05e800, 0x05ec07).rw(m_graphics, FUNC(apollo_graphics_15i::apollo_ccr_r), FUNC(apollo_graphics_15i::apollo_ccr_w));
map(0x0a0000, 0x0bffff).rw(m_graphics, FUNC(apollo_graphics_15i::apollo_cgm_r), FUNC(apollo_graphics_15i::apollo_cgm_w));
-// AM_RANGE(0x03020000, 0x0303ffff) Cache Tag Store (DN4500 only)
-// AM_RANGE(0x04000000, 0x0400ffff) Cache Tag Data (DN4500 only)
+// map(0x03020000, 0x0303ffff) Cache Tag Store (DN4500 only)
+// map(0x04000000, 0x0400ffff) Cache Tag Data (DN4500 only)
map(0x07000000, 0x0700FFFF).rw(FUNC(apollo_state::dn5500_io_protection_map_r), FUNC(apollo_state::dn5500_io_protection_map_w));
-// AM_RANGE(0x0e000000, 0x0fffffff) FPA address space
+// map(0x0e000000, 0x0fffffff) FPA address space
-// AM_RANGE(0xf8000000, 0xffffffff) AM_READWRITE(apollo_f8_r, apollo_f8_w)
+// map(0xf8000000, 0xffffffff).rw(FUNC(apollo_state::apollo_f8_r), FUNC(apollo_state::apollo_f8_w));
}
void apollo_state::dsp5500_map(address_map &map)
@@ -891,7 +891,7 @@ void apollo_state::dsp5500_map(address_map &map)
map(DN5500_RAM_BASE, DN5500_RAM_END).ram().w(FUNC(apollo_state::ram_with_parity_w)).share(RAM_TAG);
map(0x07000000, 0x0700FFFF).rw(FUNC(apollo_state::dn5500_io_protection_map_r), FUNC(apollo_state::dn5500_io_protection_map_w));
-// AM_RANGE(0xf8000000, 0xffffffff) AM_READWRITE(apollo_f8_r, apollo_f8_w)
+// map(0xf8000000, 0xffffffff).rw(FUNC(apollo_state::apollo_f8_r), FUNC(apollo_state::apollo_f8_w));
}
/***************************************************************************
diff --git a/src/mame/drivers/apple2e.cpp b/src/mame/drivers/apple2e.cpp
index b70bbfc61a4..31240a2fdb4 100644
--- a/src/mame/drivers/apple2e.cpp
+++ b/src/mame/drivers/apple2e.cpp
@@ -2909,8 +2909,8 @@ void apple2e_state::laser128_map(address_map &map)
map(0x4000, 0xbfff).m(m_4000bank, FUNC(address_map_bank_device::amap8));
map(0xc000, 0xc07f).rw(FUNC(apple2e_state::c000_r), FUNC(apple2e_state::c000_w));
map(0xc080, 0xc0ff).rw(FUNC(apple2e_state::c080_r), FUNC(apple2e_state::c080_w));
-// AM_RANGE(0xc098, 0xc09b) AM_DEVREADWRITE(IIC_ACIA1_TAG, mos6551_device, read, write)
-// AM_RANGE(0xc0a8, 0xc0ab) AM_DEVREADWRITE(IIC_ACIA2_TAG, mos6551_device, read, write)
+// map(0xc098, 0xc09b).rw(m_acia1, FUNC(mos6551_device::read), FUNC(mos6551_device::write));
+// map(0xc0a8, 0xc0ab).rw(m_acia2, FUNC(mos6551_device::read), FUNC(mos6551_device::write));
map(0xc0d0, 0xc0d3).rw(FUNC(apple2e_state::memexp_r), FUNC(apple2e_state::memexp_w));
map(0xc0e0, 0xc0ef).rw(m_laserudc, FUNC(applefdc_base_device::bus_r), FUNC(applefdc_base_device::bus_w));
map(0xc100, 0xc2ff).m(m_c100bank, FUNC(address_map_bank_device::amap8));
diff --git a/src/mame/drivers/applix.cpp b/src/mame/drivers/applix.cpp
index bd6cfe83eef..8140bb64cfb 100644
--- a/src/mame/drivers/applix.cpp
+++ b/src/mame/drivers/applix.cpp
@@ -473,7 +473,7 @@ void applix_state::applix_mem(address_map &map)
map(0x700180, 0x700180).mirror(0x7c).rw(m_crtc, FUNC(mc6845_device::status_r), FUNC(mc6845_device::address_w)).cswidth(16);
map(0x700182, 0x700182).mirror(0x7c).rw(m_crtc, FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w)).cswidth(16);
map(0xffffc0, 0xffffc1).rw(FUNC(applix_state::fdc_data_r), FUNC(applix_state::fdc_data_w));
- //AM_RANGE(0xffffc2, 0xffffc3) AM_READWRITE(fdc_int_r,fdc_int_w) // optional
+ //map(0xffffc2, 0xffffc3).rw(FUNC(applix_state::fdc_int_r) , FUNC(applix_state::fdc_int_w)); // optional
map(0xffffc8, 0xffffcd).r(FUNC(applix_state::fdc_stat_r));
map(0xffffd0, 0xffffd1).w(FUNC(applix_state::fdc_cmd_w));
//600000, 6FFFFF io ports and latches
diff --git a/src/mame/drivers/apricotf.cpp b/src/mame/drivers/apricotf.cpp
index 93ec038ba5d..76b7c7ee1ea 100644
--- a/src/mame/drivers/apricotf.cpp
+++ b/src/mame/drivers/apricotf.cpp
@@ -278,7 +278,7 @@ void f1_state::act_f1_io(address_map &map)
map(0x0020, 0x0027).rw(m_sio, FUNC(z80sio_device::ba_cd_r), FUNC(z80sio_device::ba_cd_w)).umask16(0x00ff);
map(0x0030, 0x0030).w(FUNC(f1_state::m1_w));
map(0x0040, 0x0047).rw(m_fdc, FUNC(wd2797_device::read), FUNC(wd2797_device::write)).umask16(0x00ff);
-// AM_RANGE(0x01e0, 0x01ff) winchester
+// map(0x01e0, 0x01ff) winchester
}
diff --git a/src/mame/drivers/aquarius.cpp b/src/mame/drivers/aquarius.cpp
index f0912c2cd3f..fddd71c9a5d 100644
--- a/src/mame/drivers/aquarius.cpp
+++ b/src/mame/drivers/aquarius.cpp
@@ -219,7 +219,7 @@ void aquarius_state::aquarius_mem(address_map &map)
void aquarius_state::aquarius_io(address_map &map)
{
-// AM_RANGE(0x7e, 0x7f) AM_MIRROR(0xff00) AM_READWRITE(modem_r, modem_w)
+// map(0x7e, 0x7f).mirror(0xff00).rw(FUNC(aquarius_state::modem_r), FUNC(aquarius_state::modem_w));
map(0xf6, 0xf6).mirror(0xff00).rw("ay8910", FUNC(ay8910_device::data_r), FUNC(ay8910_device::data_w));
map(0xf7, 0xf7).mirror(0xff00).w("ay8910", FUNC(ay8910_device::address_w));
map(0xfc, 0xfc).mirror(0xff00).rw(FUNC(aquarius_state::cassette_r), FUNC(aquarius_state::cassette_w));
diff --git a/src/mame/drivers/argox.cpp b/src/mame/drivers/argox.cpp
index 964895d77a8..560dfaacf1c 100644
--- a/src/mame/drivers/argox.cpp
+++ b/src/mame/drivers/argox.cpp
@@ -68,7 +68,7 @@ void os214_state::os214_prg_map(address_map &map)
void os214_state::os214_io_map(address_map &map)
{
-// ADDRESS_MAP_GLOBAL_MASK(0xff)
+// map.global_mask(0xff);
}
void os214_state::os214(machine_config &config)
diff --git a/src/mame/drivers/armedf.cpp b/src/mame/drivers/armedf.cpp
index def555a6651..6f266ad8704 100644
--- a/src/mame/drivers/armedf.cpp
+++ b/src/mame/drivers/armedf.cpp
@@ -431,7 +431,7 @@ void armedf_state::common_map(address_map &map)
map(0x078002, 0x078003).portr("P2");
map(0x078004, 0x078005).portr("DSW1");
map(0x078006, 0x078007).portr("DSW2");
-// AM_RANGE(0x07c000, 0x07c001) AM_WRITE(terraf_io_w) handled in DRIVER_INIT
+// map(0x07c000, 0x07c001).w(FUNC(armedf_state::terraf_io_w)); handled in DRIVER_INIT
map(0x07c002, 0x07c003).w(FUNC(armedf_state::armedf_bg_scrollx_w));
map(0x07c004, 0x07c005).w(FUNC(armedf_state::armedf_bg_scrolly_w));
map(0x07c00a, 0x07c00b).w(FUNC(armedf_state::sound_command_w));
@@ -451,9 +451,9 @@ void armedf_state::kozure_map(address_map &map)
common_map(map);
map(0x060000, 0x060fff).ram().share("spriteram");
map(0x061000, 0x063fff).ram();
-// AM_RANGE(0x07c000, 0x07c001) AM_WRITE(kozure_io_w)
-// AM_RANGE(0x0c0000, 0x0c0001) AM_WRITENOP /* watchdog? */
-// AM_RANGE(0xffd000, 0xffd001) AM_WRITENOP /* passes crc ROM information to MCU, I guess */
+// map(0x07c000, 0x07c001).w(FUNC(armedf_state::kozure_io_w));
+// map(0x0c0000, 0x0c0001).nopw(); /* watchdog? */
+// map(0xffd000, 0xffd001).nopw(); /* passes crc ROM information to MCU, I guess */
}
void armedf_state::cclimbr2_map(address_map &map)
@@ -471,7 +471,7 @@ void armedf_state::cclimbr2_map(address_map &map)
map(0x078002, 0x078003).portr("P2");
map(0x078004, 0x078005).portr("DSW1");
map(0x078006, 0x078007).portr("DSW2");
-// AM_RANGE(0x07c000, 0x07c001) AM_WRITE(io_w)
+// map(0x07c000, 0x07c001).w(FUNC(armedf_state::io_w));
map(0x07c002, 0x07c003).w(FUNC(armedf_state::armedf_bg_scrollx_w));
map(0x07c004, 0x07c005).w(FUNC(armedf_state::armedf_bg_scrolly_w));
map(0x07c00a, 0x07c00b).w(FUNC(armedf_state::sound_command_w));
diff --git a/src/mame/drivers/arsystems.cpp b/src/mame/drivers/arsystems.cpp
index 3dc38a177c9..41608be4f40 100644
--- a/src/mame/drivers/arsystems.cpp
+++ b/src/mame/drivers/arsystems.cpp
@@ -232,7 +232,7 @@ void arcadia_amiga_state::argh_map(address_map &map)
{
a500_mem(map);
map(0x800000, 0x97ffff).bankr("bank2").region("user3", 0);
-// AM_RANGE(0x980000, 0x9fefff) AM_ROM AM_REGION("user3", 0)
+// map(0x980000, 0x9fefff).rom().region("user3", 0);
map(0x9ff000, 0x9fffff).ram().share("nvram");
map(0xf00000, 0xf7ffff).rom().region("user3", 0);
}
diff --git a/src/mame/drivers/artmagic.cpp b/src/mame/drivers/artmagic.cpp
index 17f2081eb28..2e6d00a40d5 100644
--- a/src/mame/drivers/artmagic.cpp
+++ b/src/mame/drivers/artmagic.cpp
@@ -452,7 +452,7 @@ void artmagic_state::shtstar_map(address_map &map)
map(0x200000, 0x27ffff).ram();
map(0x280000, 0x280fff).rw("eeprom", FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write)).umask16(0x00ff);
- map(0x300000, 0x300001).nopr(); //AM_READ_PORT("300000")
+ map(0x300000, 0x300001).nopr(); //.portr("300000");
map(0x300000, 0x300003).w(FUNC(artmagic_state::control_w)).share("control");
map(0x300004, 0x300007).w(FUNC(artmagic_state::protection_bit_w));
map(0x340001, 0x340001).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
diff --git a/src/mame/drivers/astrohome.cpp b/src/mame/drivers/astrohome.cpp
index b4e49c93224..87921cc4ba6 100644
--- a/src/mame/drivers/astrohome.cpp
+++ b/src/mame/drivers/astrohome.cpp
@@ -70,7 +70,7 @@ void astrocde_home_state::astrocade_mem(address_map &map)
map(0x0000, 0x0fff).rom().w(FUNC(astrocde_home_state::astrocade_funcgen_w));
map(0x1000, 0x3fff).rom(); /* Star Fortress writes in here?? */
map(0x4000, 0x4fff).ram().share("videoram"); /* ASG */
- //AM_RANGE(0x5000, 0xffff) AM_DEVREADWRITE("exp", astrocade_exp_device, read, write)
+ //map(0x5000, 0xffff).rw("exp", FUNC(astrocade_exp_device::read), FUNC(astrocade_exp_device::write));
}
diff --git a/src/mame/drivers/at.cpp b/src/mame/drivers/at.cpp
index 486005b882e..dcc3f582acd 100644
--- a/src/mame/drivers/at.cpp
+++ b/src/mame/drivers/at.cpp
@@ -1400,196 +1400,153 @@ ROM_END
ROM_START( at )
ROM_REGION(0x20000,"bios", 0)
- // 0: BIOS-String: ENET-1107-040990-K0
- 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", 0x10000, 0x10000,CRC(a0b5d269) SHA1(44db8227d35a09e39b93ed944f85dcddb0dd0d39), ROM_BIOS(0))
- // 1: BIOS-String: D286-0011-110387
- ROM_SYSTEM_BIOS(1, "at", "PC 286") /*(Motherboard Manufacturer: Unknown.) (BIOS release date:: 03-11-1987)*/
- ROMX_LOAD( "at110387.1", 0x10001, 0x8000, CRC(679296a7) SHA1(ae891314cac614dfece686d8e1d74f4763cf40e3),ROM_SKIP(1) | ROM_BIOS(1) )
- ROMX_LOAD( "at110387.0", 0x10000, 0x8000, CRC(65ae1f97) SHA1(91a29c7deecf7a9afbba330e64e0eee9aafee4d1),ROM_SKIP(1) | ROM_BIOS(1) )
- // 2: BIOS-String: S286-6181-101590-K0
- ROM_SYSTEM_BIOS(2, "ami206", "AMI C 206.1") /*(Motherboard Manufacturer: Unknown.) (BIOS release date:: 15-10-1990)*/
- ROMX_LOAD( "amic206.bin", 0x10000, 0x10000,CRC(25a67c34) SHA1(91e9d8cdc2f1b40a601a23ceaff2189fd1245f3b), ROM_BIOS(2) )
- //3: BIOS-String: ENET-1230-043089-K0
- ROM_SYSTEM_BIOS(3, "amic21", "AMI C 21.1") /* (Motherboard Manufacturer: Unknown.) (Neat 286 Bios, 82c21x Chipset ) (BIOS release date:: 30-04-1989) */
- ROMX_LOAD( "amic21-2.bin", 0x10001, 0x8000, CRC(8ffe7752) SHA1(68215f07a170ee7bdcb3e52b370d470af1741f7e),ROM_SKIP(1) | ROM_BIOS(3) )
- ROMX_LOAD( "amic21-1.bin", 0x10000, 0x8000, CRC(a76497f6) SHA1(91b47d86967426945b2916cb40e76a8da2d31d54),ROM_SKIP(1) | ROM_BIOS(3) )
- // 4: Quadtel Enhanced 286 BIOS Version 3.04.02 - Headland HT101, HT102
- ROM_SYSTEM_BIOS(4, "ami101", "AMI HT 101.1") /* (Quadtel Enhanced 286 Bios Version 3.04.02) (BIOS release date:: 09/11/1989) */
- ROMX_LOAD( "amiht-h.bin", 0x10001, 0x8000, CRC(8022545f) SHA1(42541d4392ad00b0e064b3a8ccf2786d875c7c19),ROM_SKIP(1) | ROM_BIOS(4) )
- ROMX_LOAD( "amiht-l.bin", 0x10000, 0x8000, CRC(285f6b8f) SHA1(2fce4ec53b68c9a7580858e16c926dc907820872),ROM_SKIP(1) | ROM_BIOS(4) )
- // 5: BIOS-String: DH12-1211-061390-K0
- ROM_SYSTEM_BIOS(5, "ami121", "AMI HT 12.1") /* (BIOS release date:: 13-06-1990) */
- ROMX_LOAD( "ami2od86.bin", 0x10001, 0x8000, CRC(04a2cec4) SHA1(564d37a8b2c0f4d0e23cd1e280a09d47c9945da8),ROM_SKIP(1) | ROM_BIOS(5) )
- ROMX_LOAD( "ami2ev86.bin", 0x10000, 0x8000, CRC(55deb5c2) SHA1(19ce1a7cc985b5895c585e39211475de2e3b0dd1),ROM_SKIP(1) | ROM_BIOS(5) )
- // 6: BIOS-String: DH12-1120-061390-K0
- ROM_SYSTEM_BIOS(6, "ami122", "AMI HT 12.2") /* (BIOS release date:: 13-06-1990) */
- ROMX_LOAD( "ami2od89.bin", 0x10001, 0x8000, CRC(7c81bbe8) SHA1(a2c7eca586f6e2e76b9101191e080a1f1cb8b833),ROM_SKIP(1) | ROM_BIOS(6) )
- ROMX_LOAD( "ami2ev89.bin", 0x10000, 0x8000, CRC(705d36e0) SHA1(0c9cfb71ced4587f109b9b6dfc2a9c92302fdb99),ROM_SKIP(1) | ROM_BIOS(6) )
- // 7: BIOS-String: DH12-1112-061390-K0
- 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", 0x10001, 0x8000, CRC(db8b471e) SHA1(7b5fa1c131061fa7719247db3e282f6d30226778),ROM_SKIP(1) | ROM_BIOS(7) )
- ROMX_LOAD( "ht12l.bin", 0x10000, 0x8000, CRC(74fd178a) SHA1(97c8283e574abbed962b701f3e8091fb82823b80),ROM_SKIP(1) | ROM_BIOS(7) )
- // 8: (BIOS release date:: 07-07-1991)
- 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", 0x10000, 0x10000, CRC(f65a6f9a) SHA1(7dfdf7d243f9f645165dc009c5097dd515f86fbb), ROM_BIOS(8) )
- // 9: (BIOS release date:: 07-07-1991)
- ROM_SYSTEM_BIOS(9, "amiht21", "AMI HT 21.1") /* as above */
- ROMX_LOAD( "ht21e.bin", 0x10000, 0x10000, CRC(e80f7fed) SHA1(62d958d98c95e9e4d1b290a6c1054ae98770f276), ROM_BIOS(9) )
- // 10: BIOS-String: D286-1430-040990-K0
- ROM_SYSTEM_BIOS(10, "amip1", "AMI P.1") /*(Motherboard Manufacturer: Unknown.) (BIOS release date:: 09-04-1990)*/
- ROMX_LOAD( "poisk-h.bin", 0x10001, 0x8000, CRC(83fd3f8c) SHA1(ca94850bbd949b97b11710629886b0ee69489a81),ROM_SKIP(1) | ROM_BIOS(10) )
- ROMX_LOAD( "poisk-l.bin", 0x10000, 0x8000, CRC(0b2ed291) SHA1(bb51a3f317cf4d429a6cfb44a46ca0ac39d9aaa7),ROM_SKIP(1) | ROM_BIOS(10) )
- // 11: Award 286 Modular BIOS Version 3.11 - WINBOND
- ROM_SYSTEM_BIOS(11, "aw201", "Award 201") /* (BIOS release date:: 21-11-1990) */
- ROMX_LOAD( "83201-5h.bin", 0x10001, 0x8000, CRC(968d1fc0) SHA1(dc4122a6c696f0b43e7894dc1b669346eed755d5),ROM_SKIP(1) | ROM_BIOS(11) )
- ROMX_LOAD( "83201-5l.bin", 0x10000, 0x8000, CRC(bf50a89a) SHA1(2349a1db6017a7fb0673e99d3680c8753407be8d),ROM_SKIP(1) | ROM_BIOS(11) )
- // 12: Award 286 Modular BIOS V3.03 NFS 11/10/87" - T.M.C
- ROM_SYSTEM_BIOS(12, "aw303", "Award 303 NFS") /* (BIOS release date:: 15-11-1985) */
- ROMX_LOAD( "aw303-hi.bin", 0x18001, 0x4000, CRC(78f32d7e) SHA1(1c88398fb171b33b7e6191bad63704ae85bfed8b), ROM_SKIP(1) | ROM_BIOS(12) )
- ROMX_LOAD( "aw303-lo.bin", 0x18000, 0x4000, CRC(3d2a70c0) SHA1(1329113bec514ed2a6d803067b1132744ef534dd), ROM_SKIP(1) | ROM_BIOS(12) )
- // 13: Award 286 Modular BIOS Version 3.03GS
- ROM_SYSTEM_BIOS(13, "aw303gs", "Award 303GS") /* (BIOS release date:: 15-11-1985) */
- ROMX_LOAD( "aw303gs-hi.bin", 0x18001, 0x4000, CRC(82392e18) SHA1(042453b7b29933a1b72301d21fcf8fa6b293c9c9), ROM_SKIP(1) | ROM_BIOS(13) )
- ROMX_LOAD( "aw303gs-lo.bin", 0x18000, 0x4000, CRC(a4cf8ba1) SHA1(b73e34be3b2754aaed1ac06471f4441fea06c67c), ROM_SKIP(1) | ROM_BIOS(13) )
- // 14: BIOS-String: D286-6069-040990-K0
- ROM_SYSTEM_BIOS(14, "ami_200960", "AMI 200960") /* (BIOS release date:: 09-04-1990 */
- ROMX_LOAD( "ami_286_bios_sn200960_even.bin", 0x10000, 0x8000, CRC(67745815) SHA1(ca6886c7a0716a92a8720fc71ff2d95328c467a5), ROM_SKIP(1) | ROM_BIOS(14) )
- ROMX_LOAD( "ami_286_bios_sn200960_odd.bin", 0x10001, 0x8000, CRC(360a5f73) SHA1(1b1980fd99779d0cdc4764928a641e081b35ee9f), ROM_SKIP(1) | ROM_BIOS(14) )
- // 15: BIOS-String: DVL2-1160-040990-K0
- ROM_SYSTEM_BIOS(15, "dvl2", "DVL2") /* (BIOS release date:: 09-04-1990) */
- ROMX_LOAD( "ami_dvl2-1160-040990-k8_even.bin", 0x10000, 0x8000, CRC(86093016) SHA1(f60b2679c8c23a34bdd64f25d83cb5a5a337bd57), ROM_SKIP(1) | ROM_BIOS(15) )
- ROMX_LOAD( "ami_dvl2-1160-040990-k8_odd.bin", 0x10001, 0x8000, CRC(4e1c944a) SHA1(0763a0a1002baced071fea301f627d2e550878b8), ROM_SKIP(1) | ROM_BIOS(15) )
- // 16: DTK 286 BIOS Ver 3.18 07/01/88
- ROM_SYSTEM_BIOS(16, "dtk318", "DTK v3.18") /* (BIOS release date:: 11-03-1986) */
- ROMX_LOAD( "dtk_286_bios_ver3.18.bin", 0x18000, 0x8000, CRC(b4b8b59a) SHA1(73c12222f5003fdc8bbfee178b20c8dda2fe5cb4), ROM_BIOS(16) )
- // 17: BIOS-String: D286-6061-040990-K0
- ROM_SYSTEM_BIOS(17, "d286-k0", "AMI D286-K0") /* (BIOS release date:: 09-04-1990) */
- ROMX_LOAD( "ami_d286-6061-040990-k0.bin", 0x10000, 0x10000, CRC(1679c1b5) SHA1(9d95da3b40c5f13d096823f383aba099b3a77183), ROM_BIOS(17) )
- // 18: BIOS-String: S286-1169-030389-K0 for ACHIEVE MICROSYSTEMS
- ROM_SYSTEM_BIOS(18, "s286-k0", "Achieve S286-K0") /* (BIOS release date:: 03-03-1989) */
- ROMX_LOAD( "ach_s286-1169-030389-k0_ev.bin", 0x10000, 0x8000, CRC(58f1f29c) SHA1(42f5189d12b75fad5e53ff472b4603c6fcbd46cd), ROM_SKIP(1) | ROM_BIOS(18) )
- ROMX_LOAD( "ach_s286-1169-030389-k0_od.bin", 0x10001, 0x8000, CRC(84bfc180) SHA1(2daa51b09c449712c9a737793b83754951e53a41), ROM_SKIP(1) | ROM_BIOS(18) )
- // 19: Award BIOS Version 3.01B
- ROM_SYSTEM_BIOS(19, "awa301b", "Award BIOS Version 3.01B") /* (BIOS release date:: 01-01-1988) */
- ROMX_LOAD( "aw286lo.rom", 0x18000, 0x4000, CRC(5afbb4a2) SHA1(513fd75d90720820484fdd280e4a6c22a0ef238c), ROM_SKIP(1) | ROM_BIOS(19) )
- ROMX_LOAD( "aw286hi.rom", 0x18001, 0x4000, CRC(b2551251) SHA1(0c8bd12a3d54ae6d2ad0210b9ca4deca94be10ed), ROM_SKIP(1) | ROM_BIOS(19) )
- // 20: no screen display
- ROM_SYSTEM_BIOS(20, "awa286", "awa286") /* (BIOS release date:: 21-11-1990) */
- ROMX_LOAD( "awd286lo.rom", 0x18000, 0x4000, CRC(d1a9c01f) SHA1(9123c6f76d85725036a0f8b9c6480142abea478f), ROM_SKIP(1) | ROM_BIOS(20) )
- ROMX_LOAD( "awd286hi.rom", 0x18001, 0x4000, CRC(b0bde4cc) SHA1(9c3fd2c0f69dde905d4e8f3be421374ef99682df), ROM_SKIP(1) | ROM_BIOS(20) )
- // 21: DTK 286 BIOS Ver. 3.01 07/24/87 - no screen display
- ROM_SYSTEM_BIOS(21, "dtk286", "dtk286") /* (BIOS release date:: 11-03-1986) */
- ROMX_LOAD( "dtk286lo.rom", 0x18000, 0x4000, CRC(dfc70856) SHA1(39158e6ed50236d371277631e77d06f77fb0531e), ROM_SKIP(1) | ROM_BIOS(21) )
- ROMX_LOAD( "dtk286hi.rom", 0x18001, 0x4000, CRC(a98fc743) SHA1(fb9e330148cb5584f61c1febea71c53b6f9d61b7), ROM_SKIP(1) | ROM_BIOS(21) )
- // 22: Phoenix 80286 ROM BIOS Version 3.07 (R04)
- ROM_SYSTEM_BIOS(22, "mitph307", "Mitac Phoenix v3.07") /* (BIOS release date:: 30-07-1987) */
- ROMX_LOAD( "mitac_phoenix_v3.07_even.bin", 0x10000, 0x8000, CRC(1c4becc9) SHA1(bfdea3f2a248312ed8cf4765a1a7dc1a2f7cecd8), ROM_SKIP(1) | ROM_BIOS(22) )
- ROMX_LOAD( "mitac_phoenix_v3.07_odd.bin", 0x10001, 0x8000, CRC(3ee16ed1) SHA1(b77e18e10e9187a01cb55c05b2a6e5311981ab56), ROM_SKIP(1) | ROM_BIOS(22) )
- // 23: BIOS-String: Pyramid Software Development Personal Computer AT Bios Version 2.14
- ROM_SYSTEM_BIOS(23, "precise", "Precise") /* (no regular BIOS release date) */
- ROMX_LOAD( "precise 860407_low.bin", 0x10000, 0x8000, CRC(d839c074) SHA1(473ca7b42914ce12f2d6c91afb0b2c2e65194489), ROM_SKIP(1) | ROM_BIOS(23) )
- ROMX_LOAD( "precise 860407_high.bin", 0x10001, 0x8000, CRC(b5e13c54) SHA1(07f5806fb53d0cb7ef7b54312fd6aa163d58b9a5), ROM_SKIP(1) | ROM_BIOS(23) )
+ // 0: BIOS-String: D286-0011-110387
+ ROM_SYSTEM_BIOS(0, "at", "PC 286") /*(Motherboard Manufacturer: Unknown.) (BIOS release date:: 03-11-1987)*/
+ ROMX_LOAD( "at110387.1", 0x10001, 0x8000, CRC(679296a7) SHA1(ae891314cac614dfece686d8e1d74f4763cf40e3),ROM_SKIP(1) | ROM_BIOS(0) )
+ ROMX_LOAD( "at110387.0", 0x10000, 0x8000, CRC(65ae1f97) SHA1(91a29c7deecf7a9afbba330e64e0eee9aafee4d1),ROM_SKIP(1) | ROM_BIOS(0) )
+ // 1: BIOS-String: S286-6181-101590-K0 - additional info from chukaev.ru54.com: UMC chipset
+ ROM_SYSTEM_BIOS(1, "ami206", "AMI C 206.1") /*(Motherboard Manufacturer: Unknown.) (BIOS release date:: 15-10-1990)*/
+ ROMX_LOAD( "amic206.bin", 0x10000, 0x10000,CRC(25a67c34) SHA1(91e9d8cdc2f1b40a601a23ceaff2189fd1245f3b), ROM_BIOS(1) )
+ // 2: (BIOS release date:: 07-07-1991) - Chipset: Headland HT21/E
+ ROM_SYSTEM_BIOS(2, "amiht21", "AMI HT 21.1") /* as above */
+ ROMX_LOAD( "ht21e.bin", 0x10000, 0x10000, CRC(e80f7fed) SHA1(62d958d98c95e9e4d1b290a6c1054ae98770f276), ROM_BIOS(2) )
+ // 3: BIOS-String: D286-1430-040990-K0 - additional info from chukaev.ru54.com: Chipset: TI TACT8230... 1BPB, 2BPB, 3EPB - ISA8: 3, ISA16: 5
+ ROM_SYSTEM_BIOS(3, "amip1", "AMI P.1") /*(Motherboard Manufacturer: Unknown.) (BIOS release date:: 09-04-1990)*/
+ ROMX_LOAD( "poisk-h.bin", 0x10001, 0x8000, CRC(83fd3f8c) SHA1(ca94850bbd949b97b11710629886b0ee69489a81),ROM_SKIP(1) | ROM_BIOS(3) )
+ ROMX_LOAD( "poisk-l.bin", 0x10000, 0x8000, CRC(0b2ed291) SHA1(bb51a3f317cf4d429a6cfb44a46ca0ac39d9aaa7),ROM_SKIP(1) | ROM_BIOS(3) )
+ // 4: Award 286 Modular BIOS Version 3.11 - WINBOND
+ ROM_SYSTEM_BIOS(4, "aw201", "Award 201") /* (BIOS release date:: 21-11-1990) */
+ ROMX_LOAD( "83201-5h.bin", 0x10001, 0x8000, CRC(968d1fc0) SHA1(dc4122a6c696f0b43e7894dc1b669346eed755d5),ROM_SKIP(1) | ROM_BIOS(4) )
+ ROMX_LOAD( "83201-5l.bin", 0x10000, 0x8000, CRC(bf50a89a) SHA1(2349a1db6017a7fb0673e99d3680c8753407be8d),ROM_SKIP(1) | ROM_BIOS(4) )
+ // 5: Award 286 Modular BIOS V3.03 NFS 11/10/87" - T.M.C
+ ROM_SYSTEM_BIOS(5, "aw303", "Award 303 NFS") /* (BIOS release date:: 15-11-1985) */
+ ROMX_LOAD( "aw303-hi.bin", 0x18001, 0x4000, CRC(78f32d7e) SHA1(1c88398fb171b33b7e6191bad63704ae85bfed8b), ROM_SKIP(1) | ROM_BIOS(5) )
+ ROMX_LOAD( "aw303-lo.bin", 0x18000, 0x4000, CRC(3d2a70c0) SHA1(1329113bec514ed2a6d803067b1132744ef534dd), ROM_SKIP(1) | ROM_BIOS(5) )
+ // 6: Award 286 Modular BIOS Version 3.03GS
+ ROM_SYSTEM_BIOS(6, "aw303gs", "Award 303GS") /* (BIOS release date:: 15-11-1985) */
+ ROMX_LOAD( "aw303gs-hi.bin", 0x18001, 0x4000, CRC(82392e18) SHA1(042453b7b29933a1b72301d21fcf8fa6b293c9c9), ROM_SKIP(1) | ROM_BIOS(6) )
+ ROMX_LOAD( "aw303gs-lo.bin", 0x18000, 0x4000, CRC(a4cf8ba1) SHA1(b73e34be3b2754aaed1ac06471f4441fea06c67c), ROM_SKIP(1) | ROM_BIOS(6) )
+ // 7: BIOS-String: D286-6069-040990-K0
+ ROM_SYSTEM_BIOS(7, "ami_200960", "AMI 200960") /* (BIOS release date:: 09-04-1990 */
+ ROMX_LOAD( "ami_286_bios_sn200960_even.bin", 0x10000, 0x8000, CRC(67745815) SHA1(ca6886c7a0716a92a8720fc71ff2d95328c467a5), ROM_SKIP(1) | ROM_BIOS(7) )
+ ROMX_LOAD( "ami_286_bios_sn200960_odd.bin", 0x10001, 0x8000, CRC(360a5f73) SHA1(1b1980fd99779d0cdc4764928a641e081b35ee9f), ROM_SKIP(1) | ROM_BIOS(7) )
+ // 8: BIOS-String: DVL2-1160-040990-K0
+ ROM_SYSTEM_BIOS(8, "dvl2", "DVL2") /* (BIOS release date:: 09-04-1990) */
+ ROMX_LOAD( "ami_dvl2-1160-040990-k8_even.bin", 0x10000, 0x8000, CRC(86093016) SHA1(f60b2679c8c23a34bdd64f25d83cb5a5a337bd57), ROM_SKIP(1) | ROM_BIOS(8) )
+ ROMX_LOAD( "ami_dvl2-1160-040990-k8_odd.bin", 0x10001, 0x8000, CRC(4e1c944a) SHA1(0763a0a1002baced071fea301f627d2e550878b8), ROM_SKIP(1) | ROM_BIOS(8) )
+ // 9: DTK 286 BIOS Ver 3.18 07/01/88
+ ROM_SYSTEM_BIOS(9, "dtk318", "DTK v3.18") /* (BIOS release date:: 11-03-1986) */
+ ROMX_LOAD( "dtk_286_bios_ver3.18.bin", 0x18000, 0x8000, CRC(b4b8b59a) SHA1(73c12222f5003fdc8bbfee178b20c8dda2fe5cb4), ROM_BIOS(9) )
+ // 10: BIOS-String: D286-6061-040990-K0
+ ROM_SYSTEM_BIOS(10, "d286-k0", "AMI D286-K0") /* (BIOS release date:: 09-04-1990) */
+ ROMX_LOAD( "ami_d286-6061-040990-k0.bin", 0x10000, 0x10000, CRC(1679c1b5) SHA1(9d95da3b40c5f13d096823f383aba099b3a77183), ROM_BIOS(10) )
+ // 11: BIOS-String: S286-1169-030389-K0 for ACHIEVE MICROSYSTEMS
+ ROM_SYSTEM_BIOS(11, "s286-k0", "Achieve S286-K0") /* (BIOS release date:: 03-03-1989) */
+ ROMX_LOAD( "ach_s286-1169-030389-k0_ev.bin", 0x10000, 0x8000, CRC(58f1f29c) SHA1(42f5189d12b75fad5e53ff472b4603c6fcbd46cd), ROM_SKIP(1) | ROM_BIOS(11) )
+ ROMX_LOAD( "ach_s286-1169-030389-k0_od.bin", 0x10001, 0x8000, CRC(84bfc180) SHA1(2daa51b09c449712c9a737793b83754951e53a41), ROM_SKIP(1) | ROM_BIOS(11) )
+ // 12: Award BIOS Version 3.01B
+ ROM_SYSTEM_BIOS(12, "awa301b", "Award BIOS Version 3.01B") /* (BIOS release date:: 01-01-1988) */
+ ROMX_LOAD( "aw286lo.rom", 0x18000, 0x4000, CRC(5afbb4a2) SHA1(513fd75d90720820484fdd280e4a6c22a0ef238c), ROM_SKIP(1) | ROM_BIOS(12) )
+ ROMX_LOAD( "aw286hi.rom", 0x18001, 0x4000, CRC(b2551251) SHA1(0c8bd12a3d54ae6d2ad0210b9ca4deca94be10ed), ROM_SKIP(1) | ROM_BIOS(12) )
+ // 13: no screen display
+ ROM_SYSTEM_BIOS(13, "awa286", "awa286") /* (BIOS release date:: 21-11-1990) */
+ ROMX_LOAD( "awd286lo.rom", 0x18000, 0x4000, CRC(d1a9c01f) SHA1(9123c6f76d85725036a0f8b9c6480142abea478f), ROM_SKIP(1) | ROM_BIOS(13) )
+ ROMX_LOAD( "awd286hi.rom", 0x18001, 0x4000, CRC(b0bde4cc) SHA1(9c3fd2c0f69dde905d4e8f3be421374ef99682df), ROM_SKIP(1) | ROM_BIOS(13) )
+ // 14: DTK 286 BIOS Ver. 3.01 07/24/87 - no screen display
+ ROM_SYSTEM_BIOS(14, "dtk286", "dtk286") /* (BIOS release date:: 11-03-1986) */
+ ROMX_LOAD( "dtk286lo.rom", 0x18000, 0x4000, CRC(dfc70856) SHA1(39158e6ed50236d371277631e77d06f77fb0531e), ROM_SKIP(1) | ROM_BIOS(14) )
+ ROMX_LOAD( "dtk286hi.rom", 0x18001, 0x4000, CRC(a98fc743) SHA1(fb9e330148cb5584f61c1febea71c53b6f9d61b7), ROM_SKIP(1) | ROM_BIOS(14) )
+ // 15: Phoenix 80286 ROM BIOS Version 3.07 (R04)
+ ROM_SYSTEM_BIOS(15, "mitph307", "Mitac Phoenix v3.07") /* (BIOS release date:: 30-07-1987) */
+ ROMX_LOAD( "mitac_phoenix_v3.07_even.bin", 0x10000, 0x8000, CRC(1c4becc9) SHA1(bfdea3f2a248312ed8cf4765a1a7dc1a2f7cecd8), ROM_SKIP(1) | ROM_BIOS(15) )
+ ROMX_LOAD( "mitac_phoenix_v3.07_odd.bin", 0x10001, 0x8000, CRC(3ee16ed1) SHA1(b77e18e10e9187a01cb55c05b2a6e5311981ab56), ROM_SKIP(1) | ROM_BIOS(15) )
+ // 16: BIOS-String: Pyramid Software Development Personal Computer AT Bios Version 2.14
+ ROM_SYSTEM_BIOS(16, "precise", "Precise") /* (no regular BIOS release date) */
+ ROMX_LOAD( "precise 860407_low.bin", 0x10000, 0x8000, CRC(d839c074) SHA1(473ca7b42914ce12f2d6c91afb0b2c2e65194489), ROM_SKIP(1) | ROM_BIOS(16) )
+ ROMX_LOAD( "precise 860407_high.bin", 0x10001, 0x8000, CRC(b5e13c54) SHA1(07f5806fb53d0cb7ef7b54312fd6aa163d58b9a5), ROM_SKIP(1) | ROM_BIOS(16) )
// ROM_LOAD( "precise_860407_keyboard_mcu.bin", 0x0000, 0x800, CRC(d1faad5c) SHA1(cb315a3da632c969012c298bb8e1cf8883b70501))
- // 24: Access Methods Inc. for Flying Triumph (AMI before they became American Megatrends) - BIOS String: Ref. no. 1406-061296
+ // 17: Access Methods Inc. for Flying Triumph (AMI before they became American Megatrends) - BIOS String: Ref. no. 1406-061296
// complains about "Channel-2 timer not funcional but boots
- ROM_SYSTEM_BIOS(24, "ami_ft", "AMI Flying Triumph") /* (BIOS release date:: 12-06-1986) */
- ROMX_LOAD( "286_access_methods_rom2_32k.bin", 0x10000, 0x8000, CRC(749c65af) SHA1(7c6e9e217afe020b7b36785549fdbfb89de8f872), ROM_SKIP(1) | ROM_BIOS(24) )
- ROMX_LOAD( "286_access_methods_rom4_32k.bin", 0x10001, 0x8000, CRC(0f15581a) SHA1(2a22635f30388ca371f0f1f31652cfa647bb322d), ROM_SKIP(1) | ROM_BIOS(24) )
- // 25: MS-0010-2 - Phoenix ROM BIOS Version 3.06
- ROM_SYSTEM_BIOS(25, "ms-0010-2", "MS-0010-2") /* (BIOS release date:: 19-01-1987) (ISA8: 3, ISA16: 5) */
- ROMX_LOAD( "286-ms0010-2-lo_32k.bin", 0x10000, 0x8000, CRC(2c381474) SHA1(94b9825d412ea39d67857102a0375852b349fcd6), ROM_SKIP(1) | ROM_BIOS(25) )
- ROMX_LOAD( "286-ms0010-2-hi_32k.bin", 0x10001, 0x8000, CRC(4fdb8c64) SHA1(c2e7f88f0ac97ee5eed0c97864b7f1810e99ea26), ROM_SKIP(1) | ROM_BIOS(25) )
+ ROM_SYSTEM_BIOS(17, "ami_ft", "AMI Flying Triumph") /* (BIOS release date:: 12-06-1986) */
+ ROMX_LOAD( "286_access_methods_rom2_32k.bin", 0x10000, 0x8000, CRC(749c65af) SHA1(7c6e9e217afe020b7b36785549fdbfb89de8f872), ROM_SKIP(1) | ROM_BIOS(17) )
+ ROMX_LOAD( "286_access_methods_rom4_32k.bin", 0x10001, 0x8000, CRC(0f15581a) SHA1(2a22635f30388ca371f0f1f31652cfa647bb322d), ROM_SKIP(1) | ROM_BIOS(17) )
+ // 18: MS-0010-2 - Phoenix ROM BIOS Version 3.06
+ ROM_SYSTEM_BIOS(18, "ms-0010-2", "MS-0010-2") /* (BIOS release date:: 19-01-1987) (ISA8: 3, ISA16: 5) */
+ ROMX_LOAD( "286-ms0010-2-lo_32k.bin", 0x10000, 0x8000, CRC(2c381474) SHA1(94b9825d412ea39d67857102a0375852b349fcd6), ROM_SKIP(1) | ROM_BIOS(18) )
+ ROMX_LOAD( "286-ms0010-2-hi_32k.bin", 0x10001, 0x8000, CRC(4fdb8c64) SHA1(c2e7f88f0ac97ee5eed0c97864b7f1810e99ea26), ROM_SKIP(1) | ROM_BIOS(18) )
+ // 19: M219 V2.1 - chipset: Toshiba CHIP2 TC6154AF
+ // BIOS-String: X0-0100-001437-00101111-060692-M219-0
+ ROM_SYSTEM_BIOS(19, "m219", "Toshiba M219")
+ ROMX_LOAD( "3tcm001.bin", 0x10000, 0x10000, CRC(146a42e9) SHA1(cf511919f271e868e34881912c0a1a859d80f91e), ROM_BIOS(19))
// ***** Motherboards using the original Chips CS8220 chipset: P82C202, P82C201, P82A203, P82A204, P82A205
- // 26: AL-6410 (found online, no markings on the board itself), Chipset: Chips P82A204, P82A203, P82A205, P82C201, P82C202
- ROM_SYSTEM_BIOS(26, "al6410", "AL-6410") /* (BIOS-String: D286-1103-110387-K0) (BIOS release date:: 03-11-1987) (ISA8: 2, ISA16: 6) */
- ROMX_LOAD( "al-6410_ami_bios_low.bin", 0x10000, 0x8000, CRC(50c4e121) SHA1(5f9c27aabdc6bb810e90bced2053b7c21c4994dd), ROM_SKIP(1) | ROM_BIOS(26) )
- ROMX_LOAD( "al-6410_ami_bios_high.bin", 0x10001, 0x8000, CRC(a44be083) SHA1(99f73d7ceb315eb3770c94d90228f8859cadc610), ROM_SKIP(1) | ROM_BIOS(14) )
- // 27: AT SYSTEM 6M/8M/10M - Chipset: Chips P82A205; P82C201; P82A203; P82A204 - ISA8:2, ISA16: 6
- ROM_SYSTEM_BIOS(27, "at6m8m10m", "AT SYSTEM 6M/8M/10M") // (BIOS release date:: 04-02-1987) - OSC: 20.000000MHz - MQ-14.3 - 12.000
- ROMX_LOAD( "286-at system 6m8m10m-l_32k.bin", 0x10000, 0x8000, CRC(37e0e1c1) SHA1(f5cd17658554a73bb86c5c8e630dac3e34b38e51), ROM_SKIP(1) | ROM_BIOS(27) )
- ROMX_LOAD( "286-at system 6m8m10m-r_32k.bin", 0x10001, 0x8000, CRC(c672efff) SHA1(7224bb6b4d25ef34bc0aa9d7c450baf9b47fd917), ROM_SKIP(1) | ROM_BIOS(27) )
- // 28: CDTEK - BIOS-String: DSUN-1202-042088-K0 286-BIOS AMI for CDTEK - ISA8:2, ISA16:6 - Chipset ICs plus SN76LS612N, RTC MC146818P
- ROM_SYSTEM_BIOS(28, "cdtekchips", "CDTEK 286") // ISA8:2, ISA16: 6 - OSC: 12.000, 14.31818, 16000.00KHz
- ROMX_LOAD( "286-cdtek2-even_32k.bin", 0x10000, 0x8000, CRC(94867e8d) SHA1(12e61cc8b875b57324c93276c9f6093f2bd0e277), ROM_SKIP(1) | ROM_BIOS(28) )
- ROMX_LOAD( "286-cdtek2-odd_32k.bin", 0x10001, 0x8000, CRC(153ed3bd) SHA1(10b711e0f0d79e0b6d181f24fe66544d2d72a310), ROM_SKIP(1) | ROM_BIOS(28) )
- // 29: This board looks identical to #2 but has different chips fitted: SN76LS612N = Zymos HCT612, Chips P82A204 = TACT80204FN, P82A203 = STK-5134, P82A205 = STK-5135,
+ // 20: AL-6410 (found online, no markings on the board itself), Chipset: Chips P82A204, P82A203, P82A205, P82C201, P82C202
+ ROM_SYSTEM_BIOS(20, "al6410", "AL-6410") /* (BIOS-String: D286-1103-110387-K0) (BIOS release date:: 03-11-1987) (ISA8: 2, ISA16: 6) */
+ ROMX_LOAD( "al-6410_ami_bios_low.bin", 0x10000, 0x8000, CRC(50c4e121) SHA1(5f9c27aabdc6bb810e90bced2053b7c21c4994dd), ROM_SKIP(1) | ROM_BIOS(20) )
+ ROMX_LOAD( "al-6410_ami_bios_high.bin", 0x10001, 0x8000, CRC(a44be083) SHA1(99f73d7ceb315eb3770c94d90228f8859cadc610), ROM_SKIP(1) | ROM_BIOS(20) )
+ // 21: AT SYSTEM 6M/8M/10M - Chipset: Chips P82A205; P82C201; P82A203; P82A204 - ISA8:2, ISA16: 6
+ ROM_SYSTEM_BIOS(21, "at6m8m10m", "AT SYSTEM 6M/8M/10M") // (BIOS release date:: 04-02-1987) - OSC: 20.000000MHz - MQ-14.3 - 12.000
+ ROMX_LOAD( "286-at system 6m8m10m-l_32k.bin", 0x10000, 0x8000, CRC(37e0e1c1) SHA1(f5cd17658554a73bb86c5c8e630dac3e34b38e51), ROM_SKIP(1) | ROM_BIOS(21) )
+ ROMX_LOAD( "286-at system 6m8m10m-r_32k.bin", 0x10001, 0x8000, CRC(c672efff) SHA1(7224bb6b4d25ef34bc0aa9d7c450baf9b47fd917), ROM_SKIP(1) | ROM_BIOS(21) )
+ // 22: CDTEK - BIOS-String: DSUN-1202-042088-K0 286-BIOS AMI for CDTEK - ISA8:2, ISA16:6 - Chipset ICs plus SN76LS612N, RTC MC146818P
+ ROM_SYSTEM_BIOS(22, "cdtekchips", "CDTEK 286") // ISA8:2, ISA16: 6 - OSC: 12.000, 14.31818, 16000.00KHz
+ ROMX_LOAD( "286-cdtek2-even_32k.bin", 0x10000, 0x8000, CRC(94867e8d) SHA1(12e61cc8b875b57324c93276c9f6093f2bd0e277), ROM_SKIP(1) | ROM_BIOS(22) )
+ ROMX_LOAD( "286-cdtek2-odd_32k.bin", 0x10001, 0x8000, CRC(153ed3bd) SHA1(10b711e0f0d79e0b6d181f24fe66544d2d72a310), ROM_SKIP(1) | ROM_BIOS(22) )
+ // 23: This board looks identical to #2 but has different chips fitted: SN76LS612N = Zymos HCT612, Chips P82A204 = TACT80204FN, P82A203 = STK-5134, P82A205 = STK-5135,
// P82C201 = STK-5132, P82C202 = STK-5133 - BIOS-String: Phoenix 80286 ROM BIOS Version 3.06
- ROM_SYSTEM_BIOS(29, "286tact", "286 TACT") // OSC: 20.0000MHz, 14.31818 - 24.000MHz
- ROMX_LOAD( "286-tact-320548-1_32k.bin", 0x10000, 0x8000, CRC(0b528d19) SHA1(15f5a94d89461655c0f74681bbae5745db009ac2), ROM_SKIP(1) | ROM_BIOS(29) )
- ROMX_LOAD( "286-tact-320548-2_32k.bin", 0x10001, 0x8000, CRC(418aa2d0) SHA1(b6af0b8aa595d8f8de6c0fc851bf1c226dcc7ca7), ROM_SKIP(1) | ROM_BIOS(29) )
+ ROM_SYSTEM_BIOS(23, "286tact", "286 TACT") // OSC: 20.0000MHz, 14.31818 - 24.000MHz
+ ROMX_LOAD( "286-tact-320548-1_32k.bin", 0x10000, 0x8000, CRC(0b528d19) SHA1(15f5a94d89461655c0f74681bbae5745db009ac2), ROM_SKIP(1) | ROM_BIOS(23) )
+ ROMX_LOAD( "286-tact-320548-2_32k.bin", 0x10001, 0x8000, CRC(418aa2d0) SHA1(b6af0b8aa595d8f8de6c0fc851bf1c226dcc7ca7), ROM_SKIP(1) | ROM_BIOS(23) )
+ // 24: Tulip 286 CPU card - Chipset: TACT 82204FN, 82202N, Chips P82A205, P82C201, P82A203, SN74LS612N, HD146818P, 2xAM9517A-5PC, 2xP8259A
+ // CPU: AND N80L286-10, FPU socket provided - OSC: 16.000 - BIOS-String:
+ ROM_SYSTEM_BIOS(24, "286tu", "Tulip 286 CPU card") // no display
+ ROMX_LOAD( "tc7be.bin", 0x18000, 0x4000, CRC(260c6994) SHA1(a7e28c2978faaa9c5ccab32932ef1391c1b3d35a), ROM_SKIP(1) | ROM_BIOS(24) )
+ ROMX_LOAD( "tc7bo.bin", 0x18001, 0x4000, CRC(c8373edc) SHA1(77ce220914863f482a3a983b43ff8ca8c72b470c), ROM_SKIP(1) | ROM_BIOS(24) )
ROM_END
ROM_START( atvga )
ROM_REGION(0x20000,"bios", 0)
- // 0: BIOS-String: 20-0001-001223-00101111-050591-KB-8042--0
+ // 0: BIOS-String: 20-0001-001223-00101111-050591-KB-8042--0 - additional info from chukaev.ru54.com: Chipset: VLSI VL82C311L-FC4, VL82C113A-FC
ROM_SYSTEM_BIOS(0, "vl82c", "VL82C311L-FC4")/*(Motherboard Manufacturer: Biostar Microtech Corp.) (BIOS release date: 05-05-1991)*/
ROMX_LOAD( "2vlm001.bin", 0x10000, 0x10000, CRC(f34d800a) SHA1(638aca592a0e525f957beb525e95ca666a994ee8), ROM_BIOS(0) )
- // 1: same as BIOS '0' in at
- 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", 0x10000, 0x10000,CRC(a0b5d269) SHA1(44db8227d35a09e39b93ed944f85dcddb0dd0d39), ROM_BIOS(1))
- // 2: same as BIOS '2' in at
- ROM_SYSTEM_BIOS(2, "ami206", "AMI C 206.1") /*(Motherboard Manufacturer: Unknown.) (BIOS release date:: 15-10-1990)*/
- ROMX_LOAD( "amic206.bin", 0x10000, 0x10000,CRC(25a67c34) SHA1(91e9d8cdc2f1b40a601a23ceaff2189fd1245f3b), ROM_BIOS(2) )
- // 3: same as BIOS '3' in at
- ROM_SYSTEM_BIOS(3, "amic21", "AMI C 21.1")
- ROMX_LOAD( "amic21-2.bin", 0x10001, 0x8000, CRC(8ffe7752) SHA1(68215f07a170ee7bdcb3e52b370d470af1741f7e),ROM_SKIP(1) | ROM_BIOS(3) )
- ROMX_LOAD( "amic21-1.bin", 0x10000, 0x8000, CRC(a76497f6) SHA1(91b47d86967426945b2916cb40e76a8da2d31d54),ROM_SKIP(1) | ROM_BIOS(3) )
- // 4: same as BIOS '4' in at
- ROM_SYSTEM_BIOS(4, "ami101", "AMI HT 101.1") /* Quadtel Enhanced 286 Bios Version 3.04.02 */
- ROMX_LOAD( "amiht-h.bin", 0x10001, 0x8000, CRC(8022545f) SHA1(42541d4392ad00b0e064b3a8ccf2786d875c7c19),ROM_SKIP(1) | ROM_BIOS(4) )
- ROMX_LOAD( "amiht-l.bin", 0x10000, 0x8000, CRC(285f6b8f) SHA1(2fce4ec53b68c9a7580858e16c926dc907820872),ROM_SKIP(1) | ROM_BIOS(4) )
- // 5: same as BIOS '5' in at
- ROM_SYSTEM_BIOS(5, "ami121", "AMI HT 12.1")
- ROMX_LOAD( "ami2od86.bin", 0x10001, 0x8000, CRC(04a2cec4) SHA1(564d37a8b2c0f4d0e23cd1e280a09d47c9945da8),ROM_SKIP(1) | ROM_BIOS(5) )
- ROMX_LOAD( "ami2ev86.bin", 0x10000, 0x8000, CRC(55deb5c2) SHA1(19ce1a7cc985b5895c585e39211475de2e3b0dd1),ROM_SKIP(1) | ROM_BIOS(5) )
- // 6: same as BIOS '6' in at
- ROM_SYSTEM_BIOS(6, "ami122", "AMI HT 12.2")
- ROMX_LOAD( "ami2od89.bin", 0x10001, 0x8000, CRC(7c81bbe8) SHA1(a2c7eca586f6e2e76b9101191e080a1f1cb8b833),ROM_SKIP(1) | ROM_BIOS(6) )
- ROMX_LOAD( "ami2ev89.bin", 0x10000, 0x8000, CRC(705d36e0) SHA1(0c9cfb71ced4587f109b9b6dfc2a9c92302fdb99),ROM_SKIP(1) | ROM_BIOS(6) )
- // 7: same as BIOS '7' in at
- 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", 0x10001, 0x8000, CRC(db8b471e) SHA1(7b5fa1c131061fa7719247db3e282f6d30226778),ROM_SKIP(1) | ROM_BIOS(7) )
- ROMX_LOAD( "ht12l.bin", 0x10000, 0x8000, CRC(74fd178a) SHA1(97c8283e574abbed962b701f3e8091fb82823b80),ROM_SKIP(1) | ROM_BIOS(7) )
- // 8: same as BIOS '8' in at
- 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", 0x10000, 0x10000, CRC(f65a6f9a) SHA1(7dfdf7d243f9f645165dc009c5097dd515f86fbb), ROM_BIOS(8) )
- // 9: same as BIOS '9' in at
- ROM_SYSTEM_BIOS(9, "amiht21", "AMI HT 21.1") /* as above */
- ROMX_LOAD( "ht21e.bin", 0x10000, 0x10000, CRC(e80f7fed) SHA1(62d958d98c95e9e4d1b290a6c1054ae98770f276), ROM_BIOS(9) )
- // 10: same as BIOS '10' in at
- ROM_SYSTEM_BIOS(10, "amip1", "AMI P.1") /*(Motherboard Manufacturer: Unknown.) (BIOS release date:: 09-04-1990)*/
- ROMX_LOAD( "poisk-h.bin", 0x10001, 0x8000, CRC(83fd3f8c) SHA1(ca94850bbd949b97b11710629886b0ee69489a81),ROM_SKIP(1) | ROM_BIOS(10) )
- ROMX_LOAD( "poisk-l.bin", 0x10000, 0x8000, CRC(0b2ed291) SHA1(bb51a3f317cf4d429a6cfb44a46ca0ac39d9aaa7),ROM_SKIP(1) | ROM_BIOS(10) )
- // 11: BIOS-String: DG22-1131-040990-K11 / 286-BIOS G2 V1.1 6-28-90
- ROM_SYSTEM_BIOS(11, "ami1131", "AMI-1131") /*(Motherboard Manufacturer: Elitegroup Computer Co., Ltd.) (BIOS release date:: 09-04-1990)*/
- ROMX_LOAD( "2hlm003h.bin", 0x10001, 0x8000, CRC(2babb42b) SHA1(3da6538f44b434cdec0cbdddd392ccfd34666f06),ROM_SKIP(1) | ROM_BIOS(11) )
- ROMX_LOAD( "2hlm003l.bin", 0x10000, 0x8000, CRC(317cbcbf) SHA1(1adad6280d8b07c2921fc5fc13ecaa10e6bfebdc),ROM_SKIP(1) | ROM_BIOS(11) )
- // 12: same as BIOS '1' in at
- ROM_SYSTEM_BIOS(12, "at", "PC 286") /*(Motherboard Manufacturer: Unknown.) (BIOS release date:: 03-11-1987)*/
- ROMX_LOAD( "at110387.1", 0x10001, 0x8000, CRC(679296a7) SHA1(ae891314cac614dfece686d8e1d74f4763cf40e3),ROM_SKIP(1) | ROM_BIOS(12) )
- ROMX_LOAD( "at110387.0", 0x10000, 0x8000, CRC(65ae1f97) SHA1(91a29c7deecf7a9afbba330e64e0eee9aafee4d1),ROM_SKIP(1) | ROM_BIOS(12) )
- // 13
- ROM_SYSTEM_BIOS(13, "bravo", "AST Bravo/286") // fails with keyboard controller test, probably expects specific kbdc rom
- ROMX_LOAD( "107000-704.bin", 0x10000, 0x8000, CRC(94faf87e) SHA1(abaafa6c2ae9b9fba95b244dcbcc1c752ac6c0a0),ROM_SKIP(1) | ROM_BIOS(13) )
- ROMX_LOAD( "107000-705.bin", 0x10001, 0x8000, CRC(e1263c1e) SHA1(b564f1043ef45ecbdf4f06bb500150ad992c2931),ROM_SKIP(1) | ROM_BIOS(13) )
+ // 1: same as BIOS '1' in at
+ ROM_SYSTEM_BIOS(1, "ami206", "AMI C 206.1") /*(Motherboard Manufacturer: Unknown.) (BIOS release date:: 15-10-1990)*/
+ ROMX_LOAD( "amic206.bin", 0x10000, 0x10000,CRC(25a67c34) SHA1(91e9d8cdc2f1b40a601a23ceaff2189fd1245f3b), ROM_BIOS(1) )
+ // 2: same as BIOS '7' in at
+ ROM_SYSTEM_BIOS(2, "amiht21", "AMI HT 21.1") /* not a bad dump, sets unknown probably chipset related registers at 0x1e8 before failing post */
+ ROMX_LOAD( "ht21e.bin", 0x10000, 0x10000, CRC(e80f7fed) SHA1(62d958d98c95e9e4d1b290a6c1054ae98770f276), ROM_BIOS(2) )
+ // 3: same as BIOS '8' in at
+ ROM_SYSTEM_BIOS(3, "amip1", "AMI P.1") /*(Motherboard Manufacturer: Unknown.) (BIOS release date:: 09-04-1990)*/
+ ROMX_LOAD( "poisk-h.bin", 0x10001, 0x8000, CRC(83fd3f8c) SHA1(ca94850bbd949b97b11710629886b0ee69489a81),ROM_SKIP(1) | ROM_BIOS(3) )
+ ROMX_LOAD( "poisk-l.bin", 0x10000, 0x8000, CRC(0b2ed291) SHA1(bb51a3f317cf4d429a6cfb44a46ca0ac39d9aaa7),ROM_SKIP(1) | ROM_BIOS(3) )
+ // 4: BIOS-String: DG22-1131-040990-K0 / 286-BIOS G2 V1.1 6-28-90 - Headland GC102/GC113-PC/HT101A - CPU/FPU: N80286-12, IIT2C87-10
+ ROM_SYSTEM_BIOS(4, "ami1131", "AMI-1131") /*(Motherboard Manufacturer: Elitegroup Computer Co., Ltd.) (BIOS release date:: 09-04-1990)*/
+ ROMX_LOAD( "2hlm003h.bin", 0x10001, 0x8000, CRC(2babb42b) SHA1(3da6538f44b434cdec0cbdddd392ccfd34666f06),ROM_SKIP(1) | ROM_BIOS(4) )
+ ROMX_LOAD( "2hlm003l.bin", 0x10000, 0x8000, CRC(317cbcbf) SHA1(1adad6280d8b07c2921fc5fc13ecaa10e6bfebdc),ROM_SKIP(1) | ROM_BIOS(4) )
+ // 5: same as BIOS '0' in at
+ ROM_SYSTEM_BIOS(5, "at", "PC 286") /*(Motherboard Manufacturer: Unknown.) (BIOS release date:: 03-11-1987)*/
+ ROMX_LOAD( "at110387.1", 0x10001, 0x8000, CRC(679296a7) SHA1(ae891314cac614dfece686d8e1d74f4763cf40e3),ROM_SKIP(1) | ROM_BIOS(5) )
+ ROMX_LOAD( "at110387.0", 0x10000, 0x8000, CRC(65ae1f97) SHA1(91a29c7deecf7a9afbba330e64e0eee9aafee4d1),ROM_SKIP(1) | ROM_BIOS(5) )
+ // 6
+ ROM_SYSTEM_BIOS(6, "bravo", "AST Bravo/286") // fails with keyboard controller test, probably expects specific kbdc rom
+ ROMX_LOAD( "107000-704.bin", 0x10000, 0x8000, CRC(94faf87e) SHA1(abaafa6c2ae9b9fba95b244dcbcc1c752ac6c0a0),ROM_SKIP(1) | ROM_BIOS(6) )
+ ROMX_LOAD( "107000-705.bin", 0x10001, 0x8000, CRC(e1263c1e) SHA1(b564f1043ef45ecbdf4f06bb500150ad992c2931),ROM_SKIP(1) | ROM_BIOS(6) )
// ***** Motherboards using the original Chips CS8220 chipset: P82C202, P82C201, P82A203, P82A204, P82A205
- // 14: same as BIOS '26' in VGA
- ROM_SYSTEM_BIOS(14, "al6410", "AL-6410")
- ROMX_LOAD( "al-6410_ami_bios_low.bin", 0x10000, 0x8000, CRC(50c4e121) SHA1(5f9c27aabdc6bb810e90bced2053b7c21c4994dd), ROM_SKIP(1) | ROM_BIOS(14) )
- ROMX_LOAD( "al-6410_ami_bios_high.bin", 0x10001, 0x8000, CRC(a44be083) SHA1(99f73d7ceb315eb3770c94d90228f8859cadc610), ROM_SKIP(1) | ROM_BIOS(14) )
- // 15: same as BIOS '27' in VGA
- ROM_SYSTEM_BIOS(15, "at6m8m10m", "AT SYSTEM 6M/8M/10M")
- ROMX_LOAD( "286-at system 6m8m10m-l_32k.bin", 0x10000, 0x8000, CRC(37e0e1c1) SHA1(f5cd17658554a73bb86c5c8e630dac3e34b38e51), ROM_SKIP(1) | ROM_BIOS(15) )
- ROMX_LOAD( "286-at system 6m8m10m-r_32k.bin", 0x10001, 0x8000, CRC(c672efff) SHA1(7224bb6b4d25ef34bc0aa9d7c450baf9b47fd917), ROM_SKIP(1) | ROM_BIOS(15) )
- // 16: same as BIOS '28' in VGA
- ROM_SYSTEM_BIOS(16, "cdtekchips", "CDTEK 286")
- ROMX_LOAD( "286-cdtek2-even_32k.bin", 0x10000, 0x8000, CRC(94867e8d) SHA1(12e61cc8b875b57324c93276c9f6093f2bd0e277), ROM_SKIP(1) | ROM_BIOS(16) )
- ROMX_LOAD( "286-cdtek2-odd_32k.bin", 0x10001, 0x8000, CRC(153ed3bd) SHA1(10b711e0f0d79e0b6d181f24fe66544d2d72a310), ROM_SKIP(1) | ROM_BIOS(16) )
- // 17: same as BIOS '29' in VGA
- ROM_SYSTEM_BIOS(17, "286tact", "286 TACT")
- ROMX_LOAD( "286-tact-320548-1_32k.bin", 0x10000, 0x8000, CRC(0b528d19) SHA1(15f5a94d89461655c0f74681bbae5745db009ac2), ROM_SKIP(1) | ROM_BIOS(17) )
- ROMX_LOAD( "286-tact-320548-2_32k.bin", 0x10001, 0x8000, CRC(418aa2d0) SHA1(b6af0b8aa595d8f8de6c0fc851bf1c226dcc7ca7), ROM_SKIP(1) | ROM_BIOS(17) )
+ // 7 same as BIOS '24' in VGA
+ ROM_SYSTEM_BIOS(7, "al6410", "AL-6410")
+ ROMX_LOAD( "al-6410_ami_bios_low.bin", 0x10000, 0x8000, CRC(50c4e121) SHA1(5f9c27aabdc6bb810e90bced2053b7c21c4994dd), ROM_SKIP(1) | ROM_BIOS(7) )
+ ROMX_LOAD( "al-6410_ami_bios_high.bin", 0x10001, 0x8000, CRC(a44be083) SHA1(99f73d7ceb315eb3770c94d90228f8859cadc610), ROM_SKIP(1) | ROM_BIOS(7) )
+ // 8: same as BIOS '25' in VGA
+ ROM_SYSTEM_BIOS(8, "at6m8m10m", "AT SYSTEM 6M/8M/10M")
+ ROMX_LOAD( "286-at system 6m8m10m-l_32k.bin", 0x10000, 0x8000, CRC(37e0e1c1) SHA1(f5cd17658554a73bb86c5c8e630dac3e34b38e51), ROM_SKIP(1) | ROM_BIOS(8) )
+ ROMX_LOAD( "286-at system 6m8m10m-r_32k.bin", 0x10001, 0x8000, CRC(c672efff) SHA1(7224bb6b4d25ef34bc0aa9d7c450baf9b47fd917), ROM_SKIP(1) | ROM_BIOS(8) )
+ // 9: same as BIOS '26' in VGA
+ ROM_SYSTEM_BIOS(9, "cdtekchips", "CDTEK 286")
+ ROMX_LOAD( "286-cdtek2-even_32k.bin", 0x10000, 0x8000, CRC(94867e8d) SHA1(12e61cc8b875b57324c93276c9f6093f2bd0e277), ROM_SKIP(1) | ROM_BIOS(9) )
+ ROMX_LOAD( "286-cdtek2-odd_32k.bin", 0x10001, 0x8000, CRC(153ed3bd) SHA1(10b711e0f0d79e0b6d181f24fe66544d2d72a310), ROM_SKIP(1) | ROM_BIOS(9) )
+ // 10: same as BIOS '27' in VGA
+ ROM_SYSTEM_BIOS(10, "286tact", "286 TACT")
+ ROMX_LOAD( "286-tact-320548-1_32k.bin", 0x10000, 0x8000, CRC(0b528d19) SHA1(15f5a94d89461655c0f74681bbae5745db009ac2), ROM_SKIP(1) | ROM_BIOS(10) )
+ ROMX_LOAD( "286-tact-320548-2_32k.bin", 0x10001, 0x8000, CRC(418aa2d0) SHA1(b6af0b8aa595d8f8de6c0fc851bf1c226dcc7ca7), ROM_SKIP(1) | ROM_BIOS(10) )
ROM_END
// Chips & Technologies CS8221 NEAT chipset: P82C211 + P82C212 + P82C215 + P82C206
@@ -1603,7 +1560,7 @@ ROM_START( neat )
ROM_SYSTEM_BIOS(1, "pb800", "Packard Bell PB800")
ROMX_LOAD( "3.10.12-1.bin", 0x10001, 0x8000, CRC(e6bb54c5) SHA1(fa5a376dd44696c78dcc8994e18938b5e1b3e45a),ROM_SKIP(1) | ROM_BIOS(1))
ROMX_LOAD( "3.10.12-2.bin", 0x10000, 0x8000, CRC(bde46933) SHA1(c7221192f48d6f2f5b773c3c7d2a52b635cb473e),ROM_SKIP(1) | ROM_BIOS(1))
- // 2: DTK Corp. 286 Computer - DTK 286 Chipset ROM BIOS Version 3.26 - #24062890N
+ // 2: DTK Corp. 286 Computer - DTK 286 Chipset ROM BIOS Version 3.26 - #24062890N - ISA8: 3, ISA16: 5, RAM: 1MB DIP, 4xSIMM30
ROM_SYSTEM_BIOS(2, "ptm1632c", "UNIT PTM1632C DTK V.3.26")
ROMX_LOAD( "ptm1632c_l.bin", 0x10000, 0x8000, CRC(df0bc27c) SHA1(f94e2decd13c285c23b6a61c035cab88fa00ba6e), ROM_SKIP(1) | ROM_BIOS(2))
ROMX_LOAD( "ptm1632c_h.bin", 0x10001, 0x8000, CRC(a80136e0) SHA1(5edc2d387efb42cf70361197de808ce1b06d8aec), ROM_SKIP(1) | ROM_BIOS(2))
@@ -1623,6 +1580,13 @@ ROM_START( neat )
ROM_SYSTEM_BIOS(6, "cp805", "CP-805")
ROMX_LOAD( "286-chips ami78384 even.bin", 0x10000, 0x8000, CRC(5280fee0) SHA1(25051ad6bbccddc0738861b614dbafbca5c3bff5), ROM_SKIP(1) | ROM_BIOS(6) )
ROMX_LOAD( "286-chips ami78384 odd.bin", 0x10001, 0x8000, CRC(24526bf3) SHA1(8f8b46fe2e708fa53d0eeb44a16924cd878bdd33), ROM_SKIP(1) | ROM_BIOS(6) )
+ // 7: BIOS-String: ENET-1107-040990-K0
+ ROM_SYSTEM_BIOS(7, "ami211", "AMI 21.1") /*(Motherboard Manufacturer: Dataexpert Corp. Motherboard) (Neat 286 Bios, 82c21x Chipset ) (BIOS release date:: 09-04-1990)*/
+ ROMX_LOAD( "ami211.bin", 0x10000, 0x10000,CRC(a0b5d269) SHA1(44db8227d35a09e39b93ed944f85dcddb0dd0d39), ROM_BIOS(7))
+ // 8: BIOS-String: ENET-1230-043089-K0
+ ROM_SYSTEM_BIOS(8, "amic21", "AMI C 21.1") /* (Motherboard Manufacturer: Unknown.) (Neat 286 Bios, 82c21x Chipset ) (BIOS release date:: 30-04-1989) */
+ ROMX_LOAD( "amic21-2.bin", 0x10001, 0x8000, CRC(8ffe7752) SHA1(68215f07a170ee7bdcb3e52b370d470af1741f7e),ROM_SKIP(1) | ROM_BIOS(8) )
+ ROMX_LOAD( "amic21-1.bin", 0x10000, 0x8000, CRC(a76497f6) SHA1(91b47d86967426945b2916cb40e76a8da2d31d54),ROM_SKIP(1) | ROM_BIOS(8) )
ROM_END
@@ -1630,6 +1594,29 @@ ROM_END
// 80286 motherboard
//**************************************************************************
+// TD60C - chipset: CITYGATE D90-272 - BIOS: AMI 286 BIOS, EE265746 - Keyboard-BIOS: JETkey V3.0
+// BIOS-String: 30-0101-429999-00101111-050591-D90-0 / TD60C BIOS VERSION 2.42B - ISA16: 6 - CPU: CS80C286, FPU: i287XL
+ROM_START( td60c )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD16_BYTE( "2cgm001.bin", 0x10000, 0x8000, CRC(35e4898b) SHA1(7ef8e097e010ec8dff9e33c4b42a278ff736059c))
+ ROM_CONTINUE( 0x10001, 0x8000 )
+ROM_END
+
+// Chaintech Chaintech ELT-286B-160B(E) mainboards - NEAT chipset: Chips P82C206, P82C211C, P82C212B, P82C215
+ROM_START( elt286b )
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: BIOS/Version: AWARD A2133130/21323132 - BIOS-String: 286 Modular BIOS Version 0N3.03 NFS / ELT
+ // Keyboard-BIOS: AWARD A21266586 - OSC: 24.000MHz, 12.000MHz, 20.000MHz, 14(... unreadable) - ISA8: 2, ISA16: 5
+ ROM_SYSTEM_BIOS(0, "160b", "ELT-286B-160B")
+ ROMX_LOAD( "286-elt-286b-160b_l_32k.bin", 0x10000, 0x8000, CRC(4514a284) SHA1(0f9d4a24bdd0fb6aa15c7c1db860c4e6df632091), ROM_SKIP(1) | ROM_BIOS(0) )
+ ROMX_LOAD( "286-elt-286b-160b_h_32k.bin", 0x10001, 0x8000, CRC(109bbf7c) SHA1(88b6b1c7c08739f8b198f05adbe6edc24be35fd0), ROM_SKIP(1) | ROM_BIOS(0) )
+ // 1: BIOS/Version: Phoenix 2061618 BIOS-String: Phoenix 80286 ROM BIOS PLUS Version 3.10 20 / Phoenix C&T 8221 NEAT Dual Mode BIOS / ELT
+ // Keyboard-BIOS: Phoenix/Intel i8242 - ISA8: 2, ISA16: 5 - OSC: 32.000MHz, 24.000MHz, 14.31818MHz
+ ROM_SYSTEM_BIOS(1, "160eb", "ELT-286B-160BE")
+ ROMX_LOAD( "286-2061618 l_32k.bin", 0x10000, 0x8000, CRC(f89aabc4) SHA1(94472edc9692b9da6450fb12994d62230c8cc5c5), ROM_SKIP(1) | ROM_BIOS(1) )
+ ROMX_LOAD( "286-2061618 h_32k.bin", 0x10001, 0x8000, CRC(e23a60bf) SHA1(48af3f123d30cd2fde9e42f2c9a57eec143287b6), ROM_SKIP(1) | ROM_BIOS(1) )
+ROM_END
+
// Olivetti M203 motherboard - complains about "Timer Sync Error"
// on board Paradise PVGA1A VGA chip - Chipset: 2 TACT chips, one VLSI chip - one 16bit ISA "slot" in pin strip form intended for an expansion module
ROM_START( olim203 )
@@ -1655,7 +1642,14 @@ ROM_START( pccm205 )
ROM_CONTINUE( 0x10001, 0x8000)
ROM_END
-// Unknown 80C286 motherboard (4 SIMM, 6 16-bit ISA)
+// PC-Chips M216 REV 1.2 - Chipset PC CHIPS CHIP 3 - CPU: Harris CS80C286-20, IIT 2C87-10
+// BIOS: AMI ; 07/07/91; S/NO. 0245157 - ISA16: 6 - BIOS-String: 30-0000-ZZ1437-00101111-070791-PC CHIPS-8
+ROM_START( pccm216 ) // no display
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "2pcm001.bin", 0x10000, 0x10000, CRC(9c7c9f05) SHA1(39cb6645d9aab846f7e64d1d44610ea3cbe52581))
+ROM_END
+
+// Unknown 80C286 motherboard (RAM: 4xSIMM30, 1MB DIP, ISA16: 6) - CPU: Harris CS80C286-16, FPU: 80287 - OSC: 32.000MHz, 14.31818
// SARC RC2015; HM6818P; 82C042 or JETkey Keyboard BIOS; 1MB onboard RAM (8x LH64256AD-80)
ROM_START( sarcpc )
ROM_REGION(0x20000,"bios", 0) // 27C512
@@ -1664,7 +1658,7 @@ ROM_START( sarcpc )
ROM_LOAD( "sarcrev12.bin", 0x10000, 0x10000, CRC(1c5e3f2d) SHA1(1fcc8b1b9d9383467223dd41e420f9352beca654) )
ROM_END
-// Everex EV-1806 (6 16-bit ISA, 1 8-bit ISA)
+// Everex EV-1806 (6 16-bit ISA, 1 8-bit ISA) - OSC: 14.31818MHz, 24.000MHz, 30.000MHz - RAM: 4 banks of 9xKM41C256P-8, sockets for 1MBit chips provided
// Everex IC-00121-0 + IC-00122-0; CHIPS P82C206; Intel 8272A(?); 146818A RTC
ROM_START( ev1806 )
ROM_REGION(0x20000, "bios", 0)
@@ -1672,22 +1666,9 @@ ROM_START( ev1806 )
ROMX_LOAD( "everex_ev-1806_rev-f1a-21_odd_u61.bin", 0x18001, 0x4000, CRC(05c87bf7) SHA1(8c2243d9ee3d2af1517dc1134a22a7d1ed11262f), ROM_SKIP(1) )
ROM_END
-// Everex EV-1815 (C & T/Suntac)
-ROM_START( ev1815 )
- ROM_REGION(0x20000, "bios", 0)
- // 0: Award 286 Modular BIOS Version 3.03 - GCH
- ROM_SYSTEM_BIOS(0, "ev1815303", "Everex EV-1815 V3.03") /* (BIOS release date:: 15-11-1985) */
- ROMX_LOAD( "award_v3.03_ev1815_even.bin", 0x18000, 0x4000, CRC(dd64bdd6) SHA1(b3108b692d2aa03701ac894602e9418ae0779702), ROM_SKIP(1) | ROM_BIOS(0) )
- ROMX_LOAD( "award_v3.03_ev1815_odd.bin", 0x18001, 0x4000, CRC(29f023fb) SHA1(873561bb7087483c0c763ef9cd32c1adf0f7cb5e), ROM_SKIP(1) | ROM_BIOS(0) )
- // 1: Award 286 Modular BIOS Version 3.03GS
- ROM_SYSTEM_BIOS(1, "ev1815303gs", "Everex EV-1815 V3.03GS") /* (BIOS release date:: 15-11-1985) */
- ROMX_LOAD( "award_v3.03gs_ev1815_even.bin", 0x10000, 0x8000, CRC(59489ec2) SHA1(b3c13ba53d4c4ee75a15703236a748121102ce84), ROM_SKIP(1) | ROM_BIOS(1) )
- ROMX_LOAD( "award_v3.03gs_ev1815_odd.bin", 0x10001, 0x8000, CRC(5bcd9421) SHA1(f32e5a39da593c6982f964fb05b0802d54c3de45), ROM_SKIP(1) | ROM_BIOS(1) )
-ROM_END
-
-// MAT286 REV.D (5 16-bit ISA, 1 8-bit ISA, 2 memory slots)
-// Headland Technology HT12P-16/A; HM6818P RTC; JETkey keyboard BIOS; unmarked 40-pin DIP
+// MAT286 REV.D (5 16-bit ISA, 1 8-bit ISA, RAM: DIP 1MB, 2xSIPP30) - CPU: Siemens SAB 80286-16-N - OSC: 32.000MHz, 14.31818
+// Headland Technology HT12P-16/A; HM6818P RTC; JETkey keyboard BIOS; unmarked 40-pin DIP (prob. 80287)
ROM_START( mat286 )
ROM_REGION(0x20000, "bios", 0)
// BIOS-String: DH12-1112-061390-K0 - HT-12 286 BIOS - Board is also used in Polish Optimus 286 computer with a special Hercules character ROM (also available)
@@ -1733,7 +1714,7 @@ ROM_START( wy220001 )
ROM_END
-// ***** Motherboards using the Acer (ALi) M1207 chipset
+// ***** 286 motherboards using the Acer (ALi) M1207 chipset
// CMP enterprise CO.LTD. Phoenix 80286 ROM BIOS Version 3.00
// ROM_SYSTEM_BIOS(26, "cmpa286", "CMP A286") /* (Chipset Acer (ALi) M1207-12) (BIOS release date:: 01-09-1986) (ISA8: 2, ISA16: 6) */
@@ -1751,8 +1732,7 @@ ROM_START( bam16a0 )
ROM_END
-
-// ***** Motherboards using the Chips SCAT 82C235 chipset
+// ***** 286 motherboards using the Chips SCAT 82C235 chipset
// Biostar MB-1212C - ISA8:2, ISA16:5
ROM_START ( mb1212c )
@@ -1766,13 +1746,13 @@ ROM_START ( mb1212c )
ROM_END
-// ***** Motherboards using the Headland G2 chipset
+// ***** 286 motherboards using the Headland G2 chipset
-// LM-103S (1 8-bit ISA, 6 16-bit ISA, 4 memory slots)
-// Headland Technology G2 chipset: HT101A + 2x HT102; HM6818P RTC; AMI keyboard BIOS
+// LM-103S - 1 8-bit ISA, 6 16-bit ISA - RAM: 4xSIPP30, 2 banks DIP (each bank has 4xV53C104AP80 and 2x16pin empty sockets)
+// Headland Technology G2 chipset: HT101A + 2x HT102; HM6818P RTC; AMI keyboard BIOS 904189, BIOS AMI 904189
+// BIOS-String: D286-1234-121589-K0 - CPU: AMD N80L286-16/S - OSC: 32.000MHz, 14.31818MHz
ROM_START( lm103s )
ROM_REGION(0x20000, "bios", 0)
- // BIOS-String: D286-1234-121589-K0
ROMX_LOAD( "ami_lm103-s_lo.bin", 0x10000, 0x8000, CRC(a24be20b) SHA1(ffc5faf6d773154bf2f037556d2e381e81a28a58), ROM_SKIP(1) )
ROMX_LOAD( "ami_lm103-s_hi.bin", 0x10001, 0x8000, CRC(7b63e60c) SHA1(da78b95b12051b6d4701a412fdc5e7874595c188), ROM_SKIP(1) )
ROM_END
@@ -1803,64 +1783,65 @@ ROM_START( headg2 )
ROM_SYSTEM_BIOS(1, "head4530", "Headland 4530")
ROMX_LOAD( "286-headland 4530-high_32k.bin", 0x10001, 0x8000, CRC(f84c0e75) SHA1(42dc068d1cd5105cd576b023e2ccfe0f0646d4e3), ROM_SKIP(1) | ROM_BIOS(1) )
ROMX_LOAD( "286-headland 4530-low_32k.bin", 0x10000, 0x8000, CRC(0856dde8) SHA1(cee5d6002c405df984f3c7fa83c4f3e034f1e586), ROM_SKIP(1) | ROM_BIOS(1) )
+ // 2: Quadtel Enhanced 286 BIOS Version 3.04.02 - Headland HT101, HT102
+ ROM_SYSTEM_BIOS(2, "ami101", "AMI HT 101.1") /* (Quadtel Enhanced 286 Bios Version 3.04.02) (BIOS release date:: 09/11/1989) */
+ ROMX_LOAD( "amiht-h.bin", 0x10001, 0x8000, CRC(8022545f) SHA1(42541d4392ad00b0e064b3a8ccf2786d875c7c19),ROM_SKIP(1) | ROM_BIOS(2) )
+ ROMX_LOAD( "amiht-l.bin", 0x10000, 0x8000, CRC(285f6b8f) SHA1(2fce4ec53b68c9a7580858e16c926dc907820872),ROM_SKIP(1) | ROM_BIOS(2) )
ROM_END
-// ***** Motherboards using the 5 chip Winbond chipset W83C201P + W83C202AP + W83C203AP + W83C204P + W83C205AP
-
-// KT216WB5-HI Rev.2 (1 8-bit ISA, 5 16-bit ISA)
-// Winbond W83C201P + W83C202AP + W83C203AP + W83C204P + W83C205AP; MC146818AP RTC; JETkey keyboard BIOS
-ROM_START( kt216wb5 )
- ROM_REGION(0x20000, "bios", 0)
- // BIOS-String: D286-1149-083090-K0 - WIN 286 BIOS
- ROMX_LOAD( "kt216wb5_even.bin", 0x10000, 0x8000, CRC(6b5509c0) SHA1(73b303b90cc0cd23b7e13362019193c938a2e502), ROM_SKIP(1) )
- ROMX_LOAD( "kt216wb5_odd.bin", 0x10001, 0x8000, CRC(af541ada) SHA1(26d2617dbe8c15f1b0d4782375bcb291a7923703), ROM_SKIP(1) )
-ROM_END
-
-// KMA-202F-12R - ISA16:7 - BIOS-String: 286 Modular BIOS Version 3.11
-// Winbond W83C201P + W83C202AP + W83C203AP + W83C204P + W83C205AP; DS12887+ RTC; AWARD keyboard BIOS
-ROM_START( kma202f )
- ROM_REGION(0x20000, "bios", 0)
- ROMX_LOAD( "286_lo.bin", 0x10000, 0x8000, CRC(0ce69691) SHA1(6904ac54f30f2244058653aaa623804dd02b4332), ROM_SKIP(1) )
- ROMX_LOAD( "286_hi.bin", 0x10001, 0x8000, CRC(1330b6f2) SHA1(691bb4a51ce3d9a026ee33c3fd02fc4e13b4a184), ROM_SKIP(1) )
-ROM_END
-
-
-// ***** Motherboards using the 5 chip VLSI chipset
+// ***** 286 motherboards using the Headland HT12/A chipset
-ROM_START( vlsi5 )
+// Octek Fox II - Chipset: Headland HT12/A - BIOS String: DH1X-6069-113090-K0 - HT-1X 286 BIOS
+ROM_START( o286foxii )
ROM_REGION(0x20000, "bios", 0)
- // 0: MG Products (Japanese) - Chipset: VLSI VL82C102A; VLSI VL82C101B; VLSI VL82C104; VLSI VL82C103A; VLSI VL82C100; (VLSI 8908BT; 8906BT; 8852BT; 8907BT; 8906BT)
- // BIOS: AMI 286 BIOS+ - BIOS-String: D286-9987-092588-K0 - ISA8: 2, ISA16: 8
- // (BIOS release date:: 25-09-1988) (ISA8: 3, ISA16: 5)
- ROM_SYSTEM_BIOS(0, "286vlsij", "Japanese 286 VLSI")
- ROMX_LOAD( "286-vlsi_japan-2-even_32k.bin", 0x10000, 0x8000, CRC(e3e64cbc) SHA1(5259e3c8686f2239a5fb0dc38aa80380ef9ec5fa), ROM_SKIP(1) | ROM_BIOS(0) )
- ROMX_LOAD( "286-vlsi_japan-2-odd_32k.bin", 0x10001, 0x8000, CRC(aa533f39) SHA1(d88c7d4029a283b94b99e2017d29fbf9eb9105b1), ROM_SKIP(1) | ROM_BIOS(0) )
- // 1: BIOS-String: D286-1223-121589-K0 - 286-BIOS AMI for MBVLSI-168 - ISA8: 3, ISA16: 5
- ROM_SYSTEM_BIOS(1, "mbvlsi168", "MBVLSI-168")
- ROMX_LOAD( "286-vlsi-002350-041_32k.bin", 0x10000, 0x8000, CRC(0e0e2bc9) SHA1(0af05b15ea8141ece84fb4420e6a21720f01c7a6), ROM_SKIP(1) | ROM_BIOS(1) )
- ROMX_LOAD( "286-vlsi-002350-042_32k.bin", 0x10001, 0x8000, CRC(5ef7b91d) SHA1(d57c7f4c8d28708f128c5f0b1251d5943c7cdf76), ROM_SKIP(1) | ROM_BIOS(1) )
+ ROMX_LOAD( "286-fox2-even_32k.bin", 0x10000, 0x8000, CRC(54dc119f) SHA1(4bc543beef0d2201fa20eac90a0a6ca38ebf0dbf), ROM_SKIP(1))
+ ROMX_LOAD( "286-fox2-odd_32k.bin", 0x10001, 0x8000, CRC(e5db7775) SHA1(2bd0572b9f7c76eff51375b551586ca8484e2a74), ROM_SKIP(1))
ROM_END
-// Uniron U3911-V3 - Chipset as above - BIOS-String: Phoenix 80286 ROM BIOS PLUS Version 3.10 00 - P/N 891012 - 80286
-ROM_START( u3911v3 )
+// BI-025C HT12 286 - Chipset: Headland HT12/A - BIOS-String: DH12-1103-061390-K0 - ISA8: 2, ISA16: 5
+ROM_START( bi025c )
ROM_REGION(0x20000, "bios", 0)
- ROMX_LOAD( "286-uniron-u13_32k.bin", 0x10001, 0x8000, CRC(c1acdf6d) SHA1(cb064dac00620588f66f850fee91ef6b47e57012), ROM_SKIP(1) )
- ROMX_LOAD( "286-uniron-u14_32k.bin", 0x10000, 0x8000, CRC(d2e9c52a) SHA1(ff6726b527b0bebed50c053a698e1b61aada3043), ROM_SKIP(1) )
+ ROMX_LOAD( "bi-025c-ht12_even.bin", 0x10000, 0x8000, CRC(7ea7e088) SHA1(e245b3ecce39e85cacb17abf60d2cee000d1750d), ROM_SKIP(1))
+ ROMX_LOAD( "bi-025c-ht12_odd.bin", 0x10001, 0x8000, CRC(f18b3eef) SHA1(e14d4b3ea0234613e60512cf79e5580c9ce7f3f6), ROM_SKIP(1))
ROM_END
-// Toptek 286 Turbo (board name somewhat uncertain; 5x 8-bit ISA, 3x 16-bit ISA, 2 banks of onboard RAM + 2 banks expansion RAM)
-// VLSI VL82C100 + VL82C101B + VL82C102A + VL82C103A + VL82C104; MC146818 or HM6818P RTC; unidentified keyboard controller
-ROM_START( toptek286 )
+ROM_START( ht12a )
ROM_REGION(0x20000, "bios", 0)
- // BIOS-String: D286-1295-091589-K0
- // Original BIOS64 dump split into even and odd bytes based on available PCB info
- ROM_LOAD16_BYTE( "toptek_vlsi_even.bin", 0x10000, 0x8000, CRC(f35465e8) SHA1(c85afc2168e355120c63b68d5c11fce7770fe1b7) )
- ROM_LOAD16_BYTE( "toptek_vlsi_odd.bin", 0x10001, 0x8000, CRC(b7272729) SHA1(686c976b9b7989862846a79d00f1f9116f03bc17) )
-ROM_END
-
-
-// ***** Motherboards using the 5 chip SUNTAC chipset
+ //0: BIOS-String: DH12-1343-061390-K0
+ // Original BIOS64 dump split into even and odd bytes (matches another dump of the same BIOS)
+ // ROM at U6 has sticker with AMI 253770 label; "BB012" at U8 is probably other half of BIOS, though not clear which half is which
+ // Unknown motherboard (similar layout to LM-103S; 4 SIMM, 5 16-bit ISA, 2 8-bit ISA)
+ // Headland HT12/A; HM6818A RTC; AMI K053770 keyboard BIOS
+ // Jumpers at right edge of board are labeled "KEYLOCK" (J6), "SPEAKER" (J7), "TURBO LED" (J8), "TURBO S.W." (J9), "RESET" (J10)
+ // XTALs X3 and X4 in top right corner (behind 80C287) are both unpopulated
+ ROM_SYSTEM_BIOS(0, "dh12-k0", "AMI DH12-K0")
+ ROMX_LOAD( "286_headland_even.bin", 0x10000, 0x8000, CRC(a2530914) SHA1(1aca289240caa6d4bf811d301c338c157b6902a1), ROM_SKIP(1) | ROM_BIOS(0) )
+ ROMX_LOAD( "286_headland_odd.bin", 0x10001, 0x8000, CRC(b5f69002) SHA1(ee9ceef1fc7a328ee82006cd504e72e16f21b3c8), ROM_SKIP(1) | ROM_BIOS(0) )
+ // 1: 286 board with Headland Headland HT12/A chipset, one ROM market IQS, Phoenix BIOS 3479808 - ISA8: 1, ISA16: 6
+ ROM_SYSTEM_BIOS(1, "head_ph_2", "Headland/Phoenix #2") // Phoenix BIOS A286 Version 1.01 - BIOS ID JLI01101 - IT9109 - Reference ID 01 - (BIOS release date:: 19-04-1990)
+ ROMX_LOAD( "286-headland-iqs-lo_32k.bin", 0x10000, 0x8000, CRC(60424e9d) SHA1(aa813bf48939fe7fcbbfec3133e702bfdff6234e), ROM_SKIP(1) | ROM_BIOS(1) )
+ ROMX_LOAD( "286-headland-iqs-hi_32k.bin", 0x10001, 0x8000, CRC(e56212e0) SHA1(2441845d632d19adc0592e094beb5ec1fbe074f6), ROM_SKIP(1) | ROM_BIOS(1) )
+ // 2: BIOS-String: DH12-1164-083090-K0 - CPU/FPU: N80L286-16/S, P80C287-10 - ISA8: 2, ISA16: 6
+ ROM_SYSTEM_BIOS(2, "head12a01", "Headland HT12/A #1")
+ ROMX_LOAD( "2hlm002l.bin", 0x10000, 0x8000, CRC(345b9ea1) SHA1(868cc309e433e0dcc9f3aa147263017b7f822461), ROM_SKIP(1) | ROM_BIOS(2) )
+ ROMX_LOAD( "2hlm002h.bin", 0x10001, 0x8000, CRC(35eed8b8) SHA1(119f2676aef038301c3e0bcdb999da6fd740e6a5), ROM_SKIP(1) | ROM_BIOS(2) )
+ // 3: MBL M21 - BIOS-String: DH12-1211-061390-K0 / HT-12 286 BIOS - Chipset: Headland HT12/A
+ ROM_SYSTEM_BIOS(3, "ami121", "AMI HT 12.1") /* (BIOS release date:: 13-06-1990) */
+ ROMX_LOAD( "ami2od86.bin", 0x10001, 0x8000, CRC(04a2cec4) SHA1(564d37a8b2c0f4d0e23cd1e280a09d47c9945da8),ROM_SKIP(1) | ROM_BIOS(3) )
+ ROMX_LOAD( "ami2ev86.bin", 0x10000, 0x8000, CRC(55deb5c2) SHA1(19ce1a7cc985b5895c585e39211475de2e3b0dd1),ROM_SKIP(1) | ROM_BIOS(3) )
+ // 4: SPEC 286 rev 4a - BIOS-String: DH12-1120-061390-K0
+ ROM_SYSTEM_BIOS(4, "ami122", "AMI HT 12.2") /* (BIOS release date:: 13-06-1990) */
+ ROMX_LOAD( "ami2ev89.bin", 0x10000, 0x8000, CRC(705d36e0) SHA1(0c9cfb71ced4587f109b9b6dfc2a9c92302fdb99),ROM_SKIP(1) | ROM_BIOS(4) )
+ ROMX_LOAD( "ami2od89.bin", 0x10001, 0x8000, CRC(7c81bbe8) SHA1(a2c7eca586f6e2e76b9101191e080a1f1cb8b833),ROM_SKIP(1) | ROM_BIOS(4) )
+ // 5: BIOS-String: DH12-1112-061390-K0
+ ROM_SYSTEM_BIOS(5, "ami123", "AMI HT 12.3") /*(Motherboard Manufacturer: Aquarius Systems USA Inc.) (BIOS release date:: 13-06-1990)*/
+ ROMX_LOAD( "ht12h.bin", 0x10001, 0x8000, CRC(db8b471e) SHA1(7b5fa1c131061fa7719247db3e282f6d30226778),ROM_SKIP(1) | ROM_BIOS(5) )
+ ROMX_LOAD( "ht12l.bin", 0x10000, 0x8000, CRC(74fd178a) SHA1(97c8283e574abbed962b701f3e8091fb82823b80),ROM_SKIP(1) | ROM_BIOS(5) )
+ROM_END
+
+
+// ***** 286 motherboards using the 5 chip SUNTAC chipset
// Magitronic B233 (8 ISA slots)
// SUNTAC Chipset, http://toastytech.com/manuals/Magitronic%20B233%20Manual.pdf
@@ -1904,39 +1885,72 @@ ROM_START( mba009)
ROMX_LOAD( "hlb-286h.bin", 0x18001, 0x4000, CRC(03cdbee8) SHA1(9ea5f91a76bc8861fdc7e5381e8dc15f8fb428f5), ROM_SKIP(1))
ROM_END
+// Everex EV-1815 (C & T/Suntac) - RAM: 4xSIMM30, 512KB or 1MB total (2/4 SIMMs)
+ROM_START( ev1815 )
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: Award 286 Modular BIOS Version 3.03 - GCH
+ // additional info from chukaev.ru54.com: SUNTAC ST62BC... 001-B, 002-B, 003-B, 004-B1, 005 - ISA8: 3, ISA16: 5 - CPU/FPU: N80L286-10, 80287
+ ROM_SYSTEM_BIOS(0, "ev1815303", "Everex EV-1815 V3.03") /* (BIOS release date:: 15-11-1985) */
+ ROMX_LOAD( "award_v3.03_ev1815_even.bin", 0x18000, 0x4000, CRC(dd64bdd6) SHA1(b3108b692d2aa03701ac894602e9418ae0779702), ROM_SKIP(1) | ROM_BIOS(0) )
+ ROMX_LOAD( "award_v3.03_ev1815_odd.bin", 0x18001, 0x4000, CRC(29f023fb) SHA1(873561bb7087483c0c763ef9cd32c1adf0f7cb5e), ROM_SKIP(1) | ROM_BIOS(0) )
+ // 1: Award 286 Modular BIOS Version 3.03GS
+ ROM_SYSTEM_BIOS(1, "ev1815303gs", "Everex EV-1815 V3.03GS") /* (BIOS release date:: 15-11-1985) */
+ ROMX_LOAD( "award_v3.03gs_ev1815_even.bin", 0x10000, 0x8000, CRC(59489ec2) SHA1(b3c13ba53d4c4ee75a15703236a748121102ce84), ROM_SKIP(1) | ROM_BIOS(1) )
+ ROMX_LOAD( "award_v3.03gs_ev1815_odd.bin", 0x10001, 0x8000, CRC(5bcd9421) SHA1(f32e5a39da593c6982f964fb05b0802d54c3de45), ROM_SKIP(1) | ROM_BIOS(1) )
+ROM_END
-// ***** Motherboards using the Headland HT12/A chipset
-// Octek Fox II - Chipset: Headland HT12/A - BIOS String: DH1X-6069-113090-K0 - HT-1X 286 BIOS
-ROM_START( o286foxii )
+// ***** 286 motherboards using the 5 chip VLSI chipset
+
+ROM_START( vlsi5 )
ROM_REGION(0x20000, "bios", 0)
- ROMX_LOAD( "286-fox2-even_32k.bin", 0x10000, 0x8000, CRC(54dc119f) SHA1(4bc543beef0d2201fa20eac90a0a6ca38ebf0dbf), ROM_SKIP(1))
- ROMX_LOAD( "286-fox2-odd_32k.bin", 0x10001, 0x8000, CRC(e5db7775) SHA1(2bd0572b9f7c76eff51375b551586ca8484e2a74), ROM_SKIP(1))
+ // 0: MG Products (Japanese) - Chipset: VLSI VL82C102A; VLSI VL82C101B; VLSI VL82C104; VLSI VL82C103A; VLSI VL82C100; (VLSI 8908BT; 8906BT; 8852BT; 8907BT; 8906BT)
+ // BIOS: AMI 286 BIOS+ - BIOS-String: D286-9987-092588-K0 - ISA8: 2, ISA16: 8
+ // (BIOS release date:: 25-09-1988) (ISA8: 3, ISA16: 5)
+ ROM_SYSTEM_BIOS(0, "286vlsij", "Japanese 286 VLSI")
+ ROMX_LOAD( "286-vlsi_japan-2-even_32k.bin", 0x10000, 0x8000, CRC(e3e64cbc) SHA1(5259e3c8686f2239a5fb0dc38aa80380ef9ec5fa), ROM_SKIP(1) | ROM_BIOS(0) )
+ ROMX_LOAD( "286-vlsi_japan-2-odd_32k.bin", 0x10001, 0x8000, CRC(aa533f39) SHA1(d88c7d4029a283b94b99e2017d29fbf9eb9105b1), ROM_SKIP(1) | ROM_BIOS(0) )
+ // 1: BIOS-String: D286-1223-121589-K0 - 286-BIOS AMI for MBVLSI-168 - ISA8: 3, ISA16: 5
+ ROM_SYSTEM_BIOS(1, "mbvlsi168", "MBVLSI-168")
+ ROMX_LOAD( "286-vlsi-002350-041_32k.bin", 0x10000, 0x8000, CRC(0e0e2bc9) SHA1(0af05b15ea8141ece84fb4420e6a21720f01c7a6), ROM_SKIP(1) | ROM_BIOS(1) )
+ ROMX_LOAD( "286-vlsi-002350-042_32k.bin", 0x10001, 0x8000, CRC(5ef7b91d) SHA1(d57c7f4c8d28708f128c5f0b1251d5943c7cdf76), ROM_SKIP(1) | ROM_BIOS(1) )
ROM_END
-// BI-025C HT12 286 - Chipset: Headland HT12/A - BIOS-String: DH12-1103-061390-K0 - ISA8: 2, ISA16: 5
-ROM_START( bi025c )
+// Uniron U3911-V3 - Chipset as above - BIOS-String: Phoenix 80286 ROM BIOS PLUS Version 3.10 00 - P/N 891012 - 80286
+ROM_START( u3911v3 )
ROM_REGION(0x20000, "bios", 0)
- ROMX_LOAD( "bi-025c-ht12_even.bin", 0x10000, 0x8000, CRC(7ea7e088) SHA1(e245b3ecce39e85cacb17abf60d2cee000d1750d), ROM_SKIP(1))
- ROMX_LOAD( "bi-025c-ht12_odd.bin", 0x10001, 0x8000, CRC(f18b3eef) SHA1(e14d4b3ea0234613e60512cf79e5580c9ce7f3f6), ROM_SKIP(1))
+ ROMX_LOAD( "286-uniron-u13_32k.bin", 0x10001, 0x8000, CRC(c1acdf6d) SHA1(cb064dac00620588f66f850fee91ef6b47e57012), ROM_SKIP(1) )
+ ROMX_LOAD( "286-uniron-u14_32k.bin", 0x10000, 0x8000, CRC(d2e9c52a) SHA1(ff6726b527b0bebed50c053a698e1b61aada3043), ROM_SKIP(1) )
ROM_END
-ROM_START( ht12a )
+// Toptek 286 Turbo (board name somewhat uncertain; 5x 8-bit ISA, 3x 16-bit ISA, 2 banks of onboard RAM + 2 banks expansion RAM)
+// VLSI VL82C100 + VL82C101B + VL82C102A + VL82C103A + VL82C104; MC146818 or HM6818P RTC; unidentified keyboard controller
+ROM_START( toptek286 )
ROM_REGION(0x20000, "bios", 0)
- //0: BIOS-String: DH12-1343-061390-K0
- // Original BIOS64 dump split into even and odd bytes (matches another dump of the same BIOS)
- // ROM at U6 has sticker with AMI 253770 label; "BB012" at U8 is probably other half of BIOS, though not clear which half is which
- // Unknown motherboard (similar layout to LM-103S; 4 SIMM, 5 16-bit ISA, 2 8-bit ISA)
- // Headland HT12/A; HM6818A RTC; AMI K053770 keyboard BIOS
- // Jumpers at right edge of board are labeled "KEYLOCK" (J6), "SPEAKER" (J7), "TURBO LED" (J8), "TURBO S.W." (J9), "RESET" (J10)
- // XTALs X3 and X4 in top right corner (behind 80C287) are both unpopulated
- ROM_SYSTEM_BIOS(0, "dh12-k0", "AMI DH12-K0")
- ROMX_LOAD( "286_headland_even.bin", 0x10000, 0x8000, CRC(a2530914) SHA1(1aca289240caa6d4bf811d301c338c157b6902a1), ROM_SKIP(1) | ROM_BIOS(0) )
- ROMX_LOAD( "286_headland_odd.bin", 0x10001, 0x8000, CRC(b5f69002) SHA1(ee9ceef1fc7a328ee82006cd504e72e16f21b3c8), ROM_SKIP(1) | ROM_BIOS(0) )
- // 1: 286 board with Headland Headland HT12/A chipset, one ROM market IQS, Phoenix BIOS 3479808 - ISA8: 1, ISA16: 6
- ROM_SYSTEM_BIOS(1, "head_ph_2", "Headland/Phoenix #2") // Phoenix BIOS A286 Version 1.01 - BIOS ID JLI01101 - IT9109 - Reference ID 01 - (BIOS release date:: 19-04-1990)
- ROMX_LOAD( "286-headland-iqs-lo_32k.bin", 0x10000, 0x8000, CRC(60424e9d) SHA1(aa813bf48939fe7fcbbfec3133e702bfdff6234e), ROM_SKIP(1) | ROM_BIOS(1) )
- ROMX_LOAD( "286-headland-iqs-hi_32k.bin", 0x10001, 0x8000, CRC(e56212e0) SHA1(2441845d632d19adc0592e094beb5ec1fbe074f6), ROM_SKIP(1) | ROM_BIOS(1) )
+ // BIOS-String: D286-1295-091589-K0
+ // Original BIOS64 dump split into even and odd bytes based on available PCB info
+ ROM_LOAD16_BYTE( "toptek_vlsi_even.bin", 0x10000, 0x8000, CRC(f35465e8) SHA1(c85afc2168e355120c63b68d5c11fce7770fe1b7) )
+ ROM_LOAD16_BYTE( "toptek_vlsi_odd.bin", 0x10001, 0x8000, CRC(b7272729) SHA1(686c976b9b7989862846a79d00f1f9116f03bc17) )
+ROM_END
+
+
+// ***** 286 motherboards using the 5 chip Winbond chipset W83C201P + W83C202AP + W83C203AP + W83C204P + W83C205AP
+
+// KT216WB5-HI Rev.2 (1 8-bit ISA, 5 16-bit ISA) - CPU: Harris CS80C286-16, FPU: 80287 - OSC: 32.000MHz, 14.31818
+// Winbond W83C201P + W83C202AP + W83C203AP + W83C204P + W83C205AP; MC146818AP RTC; JETkey keyboard BIOS - RAM: 1MB DIP, 4xSIPP30
+ROM_START( kt216wb5 )
+ ROM_REGION(0x20000, "bios", 0)
+ // BIOS-String: D286-1149-083090-K0 - WIN 286 BIOS
+ ROMX_LOAD( "kt216wb5_even.bin", 0x10000, 0x8000, CRC(6b5509c0) SHA1(73b303b90cc0cd23b7e13362019193c938a2e502), ROM_SKIP(1) )
+ ROMX_LOAD( "kt216wb5_odd.bin", 0x10001, 0x8000, CRC(af541ada) SHA1(26d2617dbe8c15f1b0d4782375bcb291a7923703), ROM_SKIP(1) )
+ROM_END
+
+// KMA-202F-12R - ISA16:7 - BIOS-String: 286 Modular BIOS Version 3.11
+// Winbond W83C201P + W83C202AP + W83C203AP + W83C204P + W83C205AP; DS12887+ RTC; AWARD keyboard BIOS
+ROM_START( kma202f )
+ ROM_REGION(0x20000, "bios", 0)
+ ROMX_LOAD( "286_lo.bin", 0x10000, 0x8000, CRC(0ce69691) SHA1(6904ac54f30f2244058653aaa623804dd02b4332), ROM_SKIP(1) )
+ ROMX_LOAD( "286_hi.bin", 0x10001, 0x8000, CRC(1330b6f2) SHA1(691bb4a51ce3d9a026ee33c3fd02fc4e13b4a184), ROM_SKIP(1) )
ROM_END
@@ -1944,6 +1958,16 @@ ROM_END
// 80286 Desktop
//**************************************************************************
+// Philips PCD204 (PCD200 series)
+// Chipset: Paradise PVGA1A-JK, Faraday FE3031-JK - BIOS: M1212 U66/U67 R1.00.01 CKS:056B/617D - Keyboard-BIOS: Phoenix 1072217
+// BIOS-String: - - On board: Floppy, 1xIDE, VGA, Parallel, Serial - Slot for ISA slot adapter: 1 - HD: Maxtor 7060AT (C/H/S: 1024/7/17)
+// OSC: 30.000MHz, 16.000MHz, 1.8432MHz, 28.3220MHz, 25.1750MHz, 10.000, 42.000MHz, 25.000MHz - CPU: Intel 80286-12
+ROM_START( pcd204 ) // => emulation runs into hlt
+ ROM_REGION(0x20000,"bios", 0)
+ ROM_LOAD16_BYTE( "u66_mi212_r1.00.01.bin", 0x00001, 0x10000, CRC(e99f817a) SHA1(5cf8556fa4ef5c314d5450756c042f5e3cde09b4) )
+ ROM_LOAD16_BYTE( "u67_mi212_r1.00.01.bin", 0x00000, 0x10000, CRC(d879f99f) SHA1(04c09b46c4a67701257f819d66002b8e93f0a391) )
+ROM_END
+
// Leanord Elan High Tech 286 - Octek VGA-16 using Chips F82C451
// Chipset: Chips, passive backplane and slot CPU
// complains about "0000-55AA - Error Base RAM (64Kb) - Halt*"
@@ -2059,7 +2083,6 @@ ROM_END
// 80286 Notebook/Laptop/Portable
//**************************************************************************
-
// Compaq Portable II
// Chips: Intel D8742, SN76LS612N, 2x NEC D8237AC-5, 2xIntel P8259A-2, MC146818AP, Intel P8254
// Enhanced Color Graphics board: Chips P82C431, P82C434A
@@ -2128,31 +2151,56 @@ ROM_END
//**************************************************************************
ROM_START( at386sx )
- ROM_REGION(0x20000,"bios", 0)
- // 0: BIOS-String: 30-0100-D61204-00101111-050591-SCAMPSX-0 / MB-1316/20/25VST
- ROM_SYSTEM_BIOS(0, "mb386sx", "mb386sx-25spb") // VLSI SCAMPSX
- ROMX_LOAD( "386sx_bios_plus.bin", 0x10000, 0x10000, CRC(f71e5a8d) SHA1(e73fda2547d92bf578e93623d5f2349b97e22393), ROM_BIOS(0))
- // 1: BIOS-String: 30-0400-428027-00101111-070791-SCMPSX-0 / VLSI SCAMP 386SX 16/20/25MHz
- ROM_SYSTEM_BIOS(1, "scamp", "VLSI SCAMPSX")
- ROMX_LOAD( "ami_386sx_vlsi_scamp_070791.bin", 0x10000, 0x10000, CRC(082d071c) SHA1(69af9a951f138146036b3c9ac3761cc6589b6cf5), ROM_BIOS(1))
- // 2: NCR 386 CPU card - Chipset: TACT82301PB, TACT82302PB, TACT82303PB
- ROM_SYSTEM_BIOS(2, "ncr386sx", "NCR 386sx card") // Upgrade card for e.g. NCR PC-8 - Setup Version 2.7.1
- ROMX_LOAD( "ncr_386sx_u12-19_7.3.bin", 0x10001, 0x8000, CRC(9e4c9a2a) SHA1(0a45d9f04f03b7ae39734916af7786bc52e5e917), ROM_SKIP(1) | ROM_BIOS(2))
- ROMX_LOAD( "ncr_386sx_u46-17_7.3.bin", 0x10000, 0x8000, CRC(73ad83a2) SHA1(bf6704fb4a0da37251f192cea3af2bc8cc2e9cdb), ROM_SKIP(1) | ROM_BIOS(2))
+ ROM_REGION(0x20000,"bios", 0 )
+ // 0: NCR 386 CPU card - Chipset: TACT82301PB, TACT82302PB, TACT82303PB
+ ROM_SYSTEM_BIOS( 0, "ncr386sx", "NCR 386sx card" ) // Upgrade card for e.g. NCR PC-8 - Setup Version 2.7.1
+ ROMX_LOAD( "ncr_386sx_u12-19_7.3.bin", 0x10001, 0x8000, CRC(9e4c9a2a) SHA1(0a45d9f04f03b7ae39734916af7786bc52e5e917), ROM_SKIP(1) | ROM_BIOS(0))
+ ROMX_LOAD( "ncr_386sx_u46-17_7.3.bin", 0x10000, 0x8000, CRC(73ad83a2) SHA1(bf6704fb4a0da37251f192cea3af2bc8cc2e9cdb), ROM_SKIP(1) | ROM_BIOS(0))
// ROM_LOAD( "ncr_386sx_card_150-0004508_u1_v1.1.bin", 0x0000, 0x800, CRC(dd591ac1) SHA1(5bc40ca7340fa57aaf5d707be45a288f14085807))
- // 3: BIOS-String: 30-0501-D81105-00101111-070791-ACER1217-0 - 386SX NPM/33,40-A0(2) 05/12/1993
- ROM_SYSTEM_BIOS(3, "m919a00", "386SX NPM/33,40-A0")
- ROMX_LOAD( "m919a00_npm-40.bin", 0x10000, 0x10000, CRC(4f330d82) SHA1(08224c7bcfb2a859b682bf44ac1ac7fd9f2ade78),ROM_BIOS(3))
-ROM_END
-
+ // 1: Dell 386SX-33 with 2x 72-pin SIMMs, ISA riser slot - Chipset: VLSI 82C311, Cirrus Logic GD5420 - BIOS: 27C010 EPROM containing Quadtel VGA BIOS and Phoenix system BIOS 02/09/93
+ // BIOS-String: Phoenix 80386 ROM BIOS PLUS Version 1.10 J01 - Copyrights by Phoenix and Dell - Jostens Learning Corporation 386/33SX - CPU: Intel 386sx
+ ROM_SYSTEM_BIOS( 1, "dell386sx", "Dell 386sx" ) // emulate integrated VGA card
+ ROMX_LOAD( "dell386.bin", 0x00000, 0x20000, CRC(d670f321) SHA1(72ba3a76874e0c76231dc6138eb56a8ca46b4b12), ROM_BIOS(1))
+ // 2: A3286/A3886-01 COMP V4.0 - Chipset: Intel S82344A (VLSI), S82343 (VLSI) - BIOS: AMI P9 (386SX) BIOS 910520
+ // BIOS-String: - 30-05T1-425004-00101111-050591-ITOPSX-0 / MULTITRONIC PERSONAL COMPUTER - Keyboard-BIOS: AMI P9(386SX) Keyboard BIOS 910520 - OSC: 8.000, 14.318180MHz, (unreadable) - CPU: Intel SMD, unreadable - ISA8: 1, ISA16: 5
+ ROM_SYSTEM_BIOS( 2, "a3286a3886", "A3286/A3886-01 COMP V4.0")
+ ROMX_LOAD( "386-a3286-a3886-01-even_32k.bin", 0x10000, 0x8000, CRC(56ed3332) SHA1(9d113e57228ee596c0c24eabb193d3670fb9a309), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD( "386-a3286-a3886-01-odd_32k.bin", 0x10001, 0x8000, CRC(9dbe4874) SHA1(589379055cfedd4268d8b1786491e80527f7fad5), ROM_SKIP(1) | ROM_BIOS(2))
+ // 3: CPU/FPU: 386SX/486SLC - Chipset: ALD 93C308-A (93C206 ???)
+ // BIOS-String: X0-0100-000000-00101111-060692-386SX-0 / CC-070794-P01
+ ROM_SYSTEM_BIOS( 3, "ald93c308", "ALD 93C308" )
+ ROMX_LOAD( "3ldm001.bin", 0x10000, 0x10000, CRC(56bab3c7) SHA1(6970bdc7407b4b57c8e1d493f9e3d9ae70671b9c), ROM_BIOS(3))
+ // 4: BIOS: Phoenix; 01/15/88 - CPU: 386sx-16 - Chipset: Intel - BIOS-String: Phoenix 80386 ROM BIOS PLUS Version 1.10 02 / 386SX, ADI CORP.
+ ROM_SYSTEM_BIOS( 4, "intel", "Intel chipset")
+ ROMX_LOAD( "3iip001l.bin", 0x10000, 0x8000, CRC(f7bef447) SHA1(a6d34c3bf0de93c2b71010948c1f16354996b5ab), ROM_SKIP(1) | ROM_BIOS(4))
+ ROMX_LOAD( "3iip001h.bin", 0x10001, 0x8000, CRC(f46dc8a2) SHA1(b6566fd761e2e6ec34b61ee3bb043ef62d696b5e), ROM_SKIP(1) | ROM_BIOS(4))
+ // 5: BIOS-String: X0-0100-000000-00101111-060692-386sx-0 / Ver. 5.14 - continuous reset
+ ROM_SYSTEM_BIOS( 5, "v514", "V. 5.14")
+ ROMX_LOAD( "3zzm001.bin", 0x10000, 0x10000, CRC(f465b03d) SHA1(8294825dcaa254c606cee21db7c74f61c1394ade), ROM_BIOS(5))
+ROM_END
+
+// NEATsx chipset: Chips 82C811 CPU/Bus controller, 82C812 Page interleave/EMS memory controller, 82C215 Data/Address buffer and 82C206 Integrated Peripheral Controller
ROM_START( ct386sx )
ROM_REGION(0x20000,"bios", 0)
- // 0: BIOS-String: ENSX-1131-0040990-K0
+ // 0: BIOS-String: ENSX-1131-0040990-K0 / AMI 386SX-BIOS / NEATSX V1.1 05-31-90
ROM_SYSTEM_BIOS(0, "neatsx", "NEATsx 386sx")
ROMX_LOAD( "012l-u25.bin", 0x10000, 0x8000, CRC(4ab1862d) SHA1(d4e8d0ff43731270478ca7671a129080ff350a4f),ROM_SKIP(1) | ROM_BIOS(0))
ROMX_LOAD( "012h-u24.bin", 0x10001, 0x8000, CRC(17472521) SHA1(7588c148fe53d9dc4cb2d0ab6e0fd51a39bb5d1a),ROM_SKIP(1) | ROM_BIOS(0))
ROM_FILL(0x1e2c9, 1, 0x00) // skip incompatible keyboard controller test
ROM_FILL(0x1e2cb, 1, 0xbb) // fix checksum
+ // 1: VIP-M345000 NPM-16 - BIOS-String: Phoenix 80386 ROM BIOS PLUS Version 1.10 20 / AUVA - Keyboard-BIOS: M5L8042-165P
+ // ISA8: 2, ISA16: 5, Memory: 1 - OSC: 32.000MHz, 14.31818
+ ROM_SYSTEM_BIOS(1, "m345000", "VIP-M345000 NPM-16")
+ ROMX_LOAD( "386-vip-m345000 a1_32k.bin", 0x10001, 0x8000, CRC(8119667f) SHA1(343221a9729f841eb23eafe5505f1216783e5550), ROM_SKIP(1) | ROM_BIOS(1))
+ ROMX_LOAD( "386-vip-m345000 a2_32k.bin", 0x10000, 0x8000, CRC(ada1a375) SHA1(74128270aa8fed504e8785c5d490b0fa25cc3895), ROM_SKIP(1) | ROM_BIOS(1))
+ // 2: DTK Corp. 386sx COMPUTER / DTK 386sx Chipset ROM BIOS Version 4.26 / #96120590N
+ ROM_SYSTEM_BIOS(2, "dtk386sx", "DTK 386sx")
+ ROMX_LOAD( "3cso001.bin", 0x10000, 0x10000, CRC(8a0e26da) SHA1(94aefc745b51015426a73015ab7892b88e7c8bcf), ROM_BIOS(2))
+ // 3: Chipset is labeled SOLUTIONS 88C211, 88C212, 88C215, P82C206
+ // BIOS-String: ENSX-1107-040990-K0 - CPU: 386SX-16
+ ROM_SYSTEM_BIOS(3, "solutions", "SOLUTIONS NEATsx")
+ ROMX_LOAD( "3som001l.bin", 0x10000, 0x8000, CRC(ecec5d42) SHA1(b1aaed408fe9c3b73dff3fa8b19e62600a49cdb2), ROM_SKIP(1) | ROM_BIOS(3))
+ ROMX_LOAD( "3som001h.bin", 0x10001, 0x8000, CRC(85d64a86) SHA1(528506724668ea3aef6aa0bd8d68cfcaa58bf519), ROM_SKIP(1) | ROM_BIOS(3))
ROM_END
ROM_START( at386 )
@@ -2170,49 +2218,83 @@ ROM_START( at386 )
ROM_SYSTEM_BIOS(3, "msi386", "MSI 386") // MSI 386 mainboard, initializes graphics card, then hangs - Chipset: Chips P82A304, P82A303, P82A302C, 2xP82B305, P82C301C, P82A306A,
ROMX_LOAD( "ami_386_msi_02297_even.bin", 0x10000, 0x8000, CRC(768590a0) SHA1(90c5203d78591a093fd4f54ceb8d9827f1e64f39), ROM_SKIP(1) | ROM_BIOS(3) )
ROMX_LOAD( "ami_386_msi_02297_odd.bin", 0x10001, 0x8000, CRC(7b1360dc) SHA1(552ccda9f90826621e88d9abdc47306b9c2b2b15), ROM_SKIP(1) | ROM_BIOS(3) )
- // 4: BIOS-String: EC&T-1332-040990-K0
- ROM_SYSTEM_BIOS(4, "cs8230", "CS8230")
- ROMX_LOAD( "ami_386_cs8230_chipset.bin", 0x10000, 0x10000, CRC(1ee766d0) SHA1(75dba3c9817dfe6caca46f5f4f2f1d76ba88d3c7), ROM_BIOS(4) )
- // 5
- ROM_SYSTEM_BIOS(5, "ami2939", "AMI2939") // no display
- ROMX_LOAD( "ami2939e.rom", 0x10000, 0x8000, CRC(65cbbd32) SHA1(d7d26b496f8e86f01722ad9f171a68f9fcdc477c), ROM_SKIP(1) | ROM_BIOS(5) )
- ROMX_LOAD( "ami2939o.rom", 0x10001, 0x8000, CRC(8db6e739) SHA1(cdd47709d6036fad4be40c15bff41752d831d4b8), ROM_SKIP(1) | ROM_BIOS(5) )
- // 6: NCR 386 slot CPU - Upgrade card for e.g. NCR PC-8 - set graphics card to CGA to see a "Timer One Error" message
- ROM_SYSTEM_BIOS(6, "ncr386", "NCR 386 CPU card") // Chipset: SN76LS612PN, 2xAM9517A-5JC, NCR 006-3500402PT M472018 8650A
- ROMX_LOAD( "ncr_386_card_04152_u44_ver5.0.bin", 0x10000, 0x10000, CRC(80e44318) SHA1(54e1d4d646a577c53c65b2292b383ed6d91b65b2), ROM_BIOS(6))
+ // 4
+ ROM_SYSTEM_BIOS(4, "ami2939", "AMI2939") // no display
+ ROMX_LOAD( "ami2939e.rom", 0x10000, 0x8000, CRC(65cbbd32) SHA1(d7d26b496f8e86f01722ad9f171a68f9fcdc477c), ROM_SKIP(1) | ROM_BIOS(4) )
+ ROMX_LOAD( "ami2939o.rom", 0x10001, 0x8000, CRC(8db6e739) SHA1(cdd47709d6036fad4be40c15bff41752d831d4b8), ROM_SKIP(1) | ROM_BIOS(4) )
+ // 5: NCR 386 slot CPU - Upgrade card for e.g. NCR PC-8 - set graphics card to CGA to see a "Timer One Error" message
+ ROM_SYSTEM_BIOS(5, "ncr386", "NCR 386 CPU card") // Chipset: SN76LS612PN, 2xAM9517A-5JC, NCR 006-3500402PT M472018 8650A
+ ROMX_LOAD( "ncr_386_card_04152_u44_ver5.0.bin", 0x10000, 0x10000, CRC(80e44318) SHA1(54e1d4d646a577c53c65b2292b383ed6d91b65b2), ROM_BIOS(5))
// ROM_LOAD ("ncr_386_card_keyboard_04181_u27_ver5.6.bin", 0x0000, 0x800, CRC(6c9004e7) SHA1(0fe77f47ff77333d1ff9bfcf8d6d92193ab1f208))
- // 7: BIOS-String: Phoenix 80386 ROM BIOS PLUS Version 1.10 22
- ROM_SYSTEM_BIOS(7, "cbm386", "Commodore 386")
- ROMX_LOAD( "cbm-386-bios-lo-v1.022e-8100.bin", 0x10000, 0x8000, CRC(a054a1b8) SHA1(d952b02cc10534325c1c5aaa8b6dfb77bc20a179), ROM_SKIP(1) | ROM_BIOS(7))
- ROMX_LOAD( "cbm-386-bios-hi-v1.022e-d100.bin", 0x10001, 0x8000, CRC(b9541f3d) SHA1(e37c704521e85b07369d21b0521f4d1871c318dd), ROM_SKIP(1) | ROM_BIOS(7))
- // 8: flashing "K/B controller incorrect" - Chipset: ALi M1217-40
- ROM_SYSTEM_BIOS(8, "gmb386sat", "GMB-386SAT_V1.0")
- ROMX_LOAD( "gmb-386sat_v1.0.bin", 0x10000, 0x10000, CRC(59ecc773) SHA1(f2007fce76b3a91f51bfb5f43c1539d5ae06d35f), ROM_BIOS(8))
- // 9: BIOS-String: X0-0100-000000-00101111-060692-RC2018A-0 / Ver 1.4b / Texas Instruments 486 DLC [S3Q]
- ROM_SYSTEM_BIOS(9, "ti486dlc", "TI 486DLC") // board is equipped with a TI486DLC
- ROMX_LOAD( "ti_486dlc_rev.s3q.bin", 0x10000, 0x10000, CRC(39b150ed) SHA1(5fc96c6232dd3a066349d8e707e938af55893297), ROM_BIOS(9))
- // 10: BIOS-String: 40-0400-001107-00101111-111192-U4800VLX-0 / UNICHIP BIOS VER 2.0A 09/27/1993
- ROM_SYSTEM_BIOS(10, "386bw367", "386BW367 Rev. 1.0")
- ROMX_LOAD( "unichip_386bw_367_rev_1.0.bin", 0x10000, 0x10000, CRC(7922a8f9) SHA1(785008e10edfd393dc39e921a12d1a07a14bac25), ROM_BIOS(10))
- // 11: BIOS-String: 40-0100-001266-00101111-121291-UMCAUTO-0 - 3DIUD-1.2
- // Chipset: // UMC UM92C206F, UM82C482AF, UM82C481BF - MB manufacturer according to BIOS is Modula Tech Co
- ROM_SYSTEM_BIOS(11, "3diud", "386 UMC 3DIUD")
- ROMX_LOAD( "386-umc-3flud.bin", 0x10000, 0x10000, CRC(2e795a01) SHA1(02e9e2871c1c1a542f44ab5eef66aee4b04225c1), ROM_BIOS(11))
- // 12: BIOS-String: 305-3.2 000-00 - Chipset: TACT82206FN; Intel A82385-33 - Keyboard Controller: P/N: 191106-2 C/S E4F4 Rev. 1.4
+ // 6: BIOS-String: Phoenix 80386 ROM BIOS PLUS Version 1.10 22
+ ROM_SYSTEM_BIOS(6, "cbm386", "Commodore 386")
+ ROMX_LOAD( "cbm-386-bios-lo-v1.022e-8100.bin", 0x10000, 0x8000, CRC(a054a1b8) SHA1(d952b02cc10534325c1c5aaa8b6dfb77bc20a179), ROM_SKIP(1) | ROM_BIOS(6))
+ ROMX_LOAD( "cbm-386-bios-hi-v1.022e-d100.bin", 0x10001, 0x8000, CRC(b9541f3d) SHA1(e37c704521e85b07369d21b0521f4d1871c318dd), ROM_SKIP(1) | ROM_BIOS(6))
+ // 7: BIOS-String: X0-0100-000000-00101111-060692-RC2018A-0 / Ver 1.4b / Texas Instruments 486 DLC [S3Q]
+ ROM_SYSTEM_BIOS(7, "ti486dlc", "TI 486DLC") // board is equipped with a TI486DLC
+ ROMX_LOAD( "ti_486dlc_rev.s3q.bin", 0x10000, 0x10000, CRC(39b150ed) SHA1(5fc96c6232dd3a066349d8e707e938af55893297), ROM_BIOS(7))
+ // 8: BIOS-String: 305-3.2 000-00 - Chipset: TACT82206FN; Intel A82385-33 - Keyboard Controller: P/N: 191106-2 C/S E4F4 Rev. 1.4
// Board with Tandon and Micronics stickers - BIOS: 192475-305A V305 3.2
// ISA8: 2, ISA16: 5 - OSC: 14.31818 MHz - 66.0000 MHz, CPU: Intel 80386DX-33, FPU: Intel 80387DX-33
- ROM_SYSTEM_BIOS(12, "tanmic385", "Tandon/Micronics with 385")
- ROMX_LOAD( "386-micronics-09-00021-even_32k.bin", 0x10000, 0x8000, CRC(0d4f0093) SHA1(f66364a82c957862a0e54afc3a2f85f911adfd49), ROM_SKIP(1) | ROM_BIOS(12))
- ROMX_LOAD( "386-micronics-09-00021-odd_32k.bin", 0x10001, 0x8000, CRC(54195986) SHA1(f3536340ef1697763e5cd70d0de7bb9b2a4ecde9), ROM_SKIP(1) | ROM_BIOS(12))
- // 13: Board is only marked "rev.0.3, looks like 386GRN - CPU: AMD AM386DX-40 - OSC: 14.31818 - ISA8: 1, ISA16: 5
- // Chipset: UMC UM82C491F - BIOS-String: 08/30/93-UMC-491-214X2000-OO - BIOS: Award 386 D2026361 - Keyboard BIOS: JETkey V3.0
- ROM_SYSTEM_BIOS(13, "386grn", "386GRN-like board rev.03")
- ROMX_LOAD( "386dx40-27c512.bin", 0x10000, 0x10000, CRC(692a4d52) SHA1(7970a05586eacfe4bfdc575b17bbbfb7ff1c86b0), ROM_BIOS(13))
- // 14: MB1325PM - Chipset: Chips P82C206 µIC MI9382 MI9381A
+ ROM_SYSTEM_BIOS(8, "tanmic385", "Tandon/Micronics with 385")
+ ROMX_LOAD( "386-micronics-09-00021-even_32k.bin", 0x10000, 0x8000, CRC(0d4f0093) SHA1(f66364a82c957862a0e54afc3a2f85f911adfd49), ROM_SKIP(1) | ROM_BIOS(8))
+ ROMX_LOAD( "386-micronics-09-00021-odd_32k.bin", 0x10001, 0x8000, CRC(54195986) SHA1(f3536340ef1697763e5cd70d0de7bb9b2a4ecde9), ROM_SKIP(1) | ROM_BIOS(8))
+ // 9: Biostar MB1325PM - Chipset: Chips P82C206 µIC MI9382 MI9381A
// BIOS: AMI 386 BIOS - BIOS-String: 30-0101-D61223-00101111-050591-OPBC-F / MB-1325PM. - Keyboard-BIOS: AMI
// CPU: AMD 386DX/DXL-25 - ISA8: 1, ISA16: 6, ISA8/Memory: 1
- ROM_SYSTEM_BIOS(14, "mb1325pm", "MB1325PM")
- ROMX_LOAD( "386-mb1325pm ok.bin", 0x10000, 0x10000, CRC(768689c1) SHA1(ce46b3baf3cd2586ffaccdded789a54583b73a3b), ROM_BIOS(14))
+ ROM_SYSTEM_BIOS(9, "mb1325pm", "MB1325PM")
+ ROMX_LOAD( "386-mb1325pm ok.bin", 0x10000, 0x10000, CRC(768689c1) SHA1(ce46b3baf3cd2586ffaccdded789a54583b73a3b), ROM_BIOS(9))
+ // 10: Intel SSBC 386AT - Chipset: Intel P8237A, P8254; P8259A, SN74LS612N - BIOS: 380892-01 Rev. 1.04 U53 L - 380892-02 Rev. 1.04 U52 H
+ // Keyboard BIOS: Intel 453775-001 - ISA8: 2, ISA16: 4, Memory expansion: 2 - OSC: 1.8432 MHz - 32.000 - 14.31818
+ ROM_SYSTEM_BIOS(10, "ssbc386at", "Intel SSBC 386AT" ) // no display
+ ROMX_LOAD( "386-intel-u53-l_32k.bin", 0x10001, 0x8000, CRC(5198a767) SHA1(03dd494e3a218c59c82ebd7b1dd16905bca30773), ROM_SKIP(1) | ROM_BIOS(10))
+ ROMX_LOAD( "386-intel-u52-h_32k.bin", 0x10000, 0x8000, CRC(cedbad7a) SHA1(e1365f5a183a342fe58205679a512c4ccd2a705a), ROM_SKIP(1) | ROM_BIOS(10))
+ // 11: BEK P405 clone - BIOS-String: 30-0201-428029-00101111-070791-OPWB-0 - was found as a stray ROM - possibly from a 486 board
+ ROM_SYSTEM_BIOS(11, "opwb", "OPWB")
+ ROMX_LOAD( "opwb.bin", 0x10000, 0x10000, CRC(e7597fb6) SHA1(2f1eb88138b400cc3ad554d03e532b5d3b0b11ad), ROM_BIOS(11))
+ // 12: unknown manufacturer, Logo could be a "J7" - COPYRIGHT (C) 89 REV.C MADE IN TAIWAN - Chipset: Chips P82C206
+ // BIOS: AMI 386 BIOS PLUS 896818 - BIOS-String: DINT-6102-091589-K0 - Keyboard-BIOS: AMI KEYBOARD BIOS PLUS 896819
+ // CPU: Intel 386DX-25 FPU: i386DX-33 - OSC: 54.0000MHz, 16.000MHz, 14.31818MHz
+ ROM_SYSTEM_BIOS(12, "386atj7", "386AT J7" )
+ ROMX_LOAD( "386-big_ami_896818_even.bin", 0x10000, 0x8000, CRC(096e99c4) SHA1(29ff718362af4f5d7c0173f4de84290cec60dded), ROM_SKIP(1) | ROM_BIOS(12))
+ ROMX_LOAD( "386-big_ami_896818_odd.bin", 0x10001, 0x8000, CRC(6f92634d) SHA1(e36d401975690043c5d5cb1f781036b319e57f37), ROM_SKIP(1) | ROM_BIOS(12))
+ // 13: BIOS-String: DAMI-0000-040990-K0 - silkscreen on board: 17:35-2495-02 - 702430D - H8010-30 - ISA8:2, ISA16: 8 - OSC: 14.31818, 50.000MHz
+ // Chipset:Laser 27-2024-00 4L40F1028, Laser 27-2025-00 4L40F1026, 2xKS82C37A, KS92C59A, KS82C54-10P - CPU: Intel 386DX-33, FPU socket provided
+ ROM_SYSTEM_BIOS(13, "vt386vt", "VT386VT" )
+ ROMX_LOAD( "vt386vt-702430d-rom0_32k.bin", 0x10000, 0x8000, CRC(00013ee6) SHA1(7fed0b176911a94e8127b01bb77445c78f283ff7), ROM_SKIP(1) | ROM_BIOS(13))
+ ROMX_LOAD( "vt386vt-702430d-rom1_32k.bin", 0x10001, 0x8000, CRC(c817ec57) SHA1(acdd0e28cb4798059c02e1342da7efe3eaf2c5cb), ROM_SKIP(1) | ROM_BIOS(13))
+ // 14: (possibly) Micronics 09-00021-L8949 - Chipset: Chips P82C206, one of the empty sockets might have contained, e.g. an Intel 385
+ // BIOS-String: Phoenix 80386 ROM BIOS PLUS Version 1.10 10a - Keyboard-BIOS: Intel - CPU/FPU: sockets provided, empty
+ // ISA8: 2, ISA16: 4, Memory: 1 - OSC: 66.0000MHz, unreadable
+ ROM_SYSTEM_BIOS(14, "l8949", "L8949" )
+ ROMX_LOAD( "386-micronics 09-00021-lo_32k.bin", 0x10000, 0x8000, CRC(3a8743e3) SHA1(42262f60cb655ab120d968dbf9eb03387424bf14), ROM_SKIP(1) | ROM_BIOS(14))
+ ROMX_LOAD( "386-micronics 09-00021-hi_32k.bin", 0x10001, 0x8000, CRC(c7fce430) SHA1(e0d6e8dbb8b6d68bd92dab63a259d2c9293f5571), ROM_SKIP(1) | ROM_BIOS(14))
+ // 15: the original notes from chukaev.ru54.com say this belongs to a motherboard using the ALi M1217 chipset, which is 386sx
+ // BIOS-String: MR BIOS (r) V1.41 / 386DX CPU - the notes also say it comes from a DX motherboard, so sorted here
+ ROM_SYSTEM_BIOS( 15, "acer310", "Acer 310" )
+ ROMX_LOAD( "3alr001.bin", 0x10000, 0x10000, CRC(b45e5c73) SHA1(81ef79faed3914ccff23b3da5e831d7a99626538), ROM_BIOS(15))
+ // 16: five short beeps (Processor error)
+ ROM_SYSTEM_BIOS( 16, "kmxc02", "KMX-C-02" )
+ ROMX_LOAD( "3ctm005.bin", 0x10000, 0x10000, CRC(5f40533f) SHA1(806ad983087db686521ec2d7793671d128936e18), ROM_BIOS(16))
+ // 17: BIOS: AMI; 11/11/92 - ISA16: 5 - CPU/FPU: Am386DX-40, IIT 3C87-40 - Chipset: FOREX FRX46C521, KS83C206Q
+ // BIOS-String: 40-0G00-009999-00101111-111192-4X521-F
+ ROM_SYSTEM_BIOS( 17, "frx521", "using the Forex FRX46C521" ) // no display
+ ROMX_LOAD( "3fom001.bin", 0x10000, 0x10000, CRC(8fa851c8) SHA1(68ac21357558d98aee4e2ffb903791e4198e0dd0), ROM_BIOS(17))
+ // 18: FOREX 386 Super DX System S3B
+ ROM_SYSTEM_BIOS( 18, "frxs3b", "Forex Super DX System S3B") // no display
+ ROMX_LOAD( "3fom003.bin", 0x10000, 0x10000, CRC(4e164e0a) SHA1(dc2d08061c443a3e4ced3ab11f1fa094585cbbba), ROM_BIOS(18))
+ // 19: BIOS: AMI; 06/06/92 - BIOS-String: 40-0101-001107-00001111-060692-OPWB4SXB-0 / OPTI-495SX (471WB) BIOS VER 1.0
+ // cf. driver hot409 - BIOS is capable of detecting 386sx => 486DX2, this particular BIOS was sorted with the 386s on chukaev
+ ROM_SYSTEM_BIOS( 19, "495sx", "OPTi 82C495SX")
+ ROMX_LOAD( "3opm009.bin", 0x10000, 0x10000, CRC(2abe36eb) SHA1(d113527ebd06f0359f2decd4ac0c6202f982d45e), ROM_BIOS(19))
+ // 20: BIOS-String: EEMI-0386-030891-K0 - Chipset: 88C311
+ ROM_SYSTEM_BIOS( 20, "eemi", "EEMI")
+ ROMX_LOAD( "3zzm002", 0x10000, 0x10000, CRC(c2a7ff22) SHA1(af2e321d3245ad839a41666917bb24cca0f7884d), ROM_BIOS(20))
+ // 21: BIOS-String: 30-0300-ZZ1425-00101111-020291-ITOPDX / 23L-1-0000-00-00-0000-00-00-000-K0
+ // 000-0-0000-00-00-0000-00-00-00-2
+ ROM_SYSTEM_BIOS( 21, "topcat", "TOPCAT")
+ ROMX_LOAD( "ami_386_vl82c330_even.bin", 0x10000, 0x8000, CRC(a6f3d881) SHA1(40672d58f79d232dbda9685b9aa20533029fbdfc), ROM_SKIP(1) | ROM_BIOS(21))
+ ROM_CONTINUE( 0x10001, 0x8000 )
ROM_END
@@ -2220,47 +2302,101 @@ ROM_END
// 80386 SX and DX motherboard
//**************************************************************************
-// Octek Jaguar V rev.1.4 - Chipset: MX83C: MX83C305FC, MX83C306FC
-// CPU: AMD 386DX-40, FPU socket provided - OSC: 80.000MHz, 14.31818
-ROM_START( ocjagv )
+// AMI 386 BABY SCREAMER - BIOS: AMI MARK V BABY SCREAMER - Chipset: VLSI VL82C331-FC, VL82C332-FC, Megatrends MG-9275, Chips ??? - OSC: 14.31818, 66.666, 24.000MHz
+// BIOS-String: 40-0301-000000-00101111-070791-SCREAMER-0 / BIOS RELEASE 42121691 - On board: 2xserial, parallel, floppy, 1xIDE
+ROM_START( amibaby )
ROM_REGION(0x20000, "bios", 0)
- // 0: MR BIOS (r) V1.40
- ROM_SYSTEM_BIOS(0, "jagvmr14", "Jaguar V MR-BIOS 1.40")
- ROMX_LOAD( "bios.bin", 0x10000, 0x10000, CRC(a552d6ad) SHA1(91bae14c3ec7edbc9ef240fec1be17f3582d7ec2), ROM_BIOS(0))
- //1: AMI BIOS// BIOS: AMI 386DX ISA BIOS AA0797325 - BIOS-String: 31-0100-426069-00101111-121291-MXIC-0 MX-DIR_001
- // Keyboard-BIOS: Intel
- ROM_SYSTEM_BIOS(1, "jagvami", "Jaguar V AMI BIOS")
- ROMX_LOAD( "octek_jaguar_v_ami_bios_isa386dx.bin", 0x10000, 0x10000, CRC(f8d14914) SHA1(14e8ecc4794920dc530fc6bd12ad64494e2544e5), ROM_BIOS(1))
+ ROMX_LOAD( "ami_mark_v_baby_screamer_even.bin", 0x00000, 0x10000, CRC(50baacb7) SHA1(c9cb6bc3ab23f35050a7f079109005331eb5de2c), ROM_SKIP(1))
+ ROMX_LOAD( "ami_mark_v_baby_screamer_odd.bin", 0x00001, 0x10000, CRC(42050eed) SHA1(c5e1ed9717acb2e3adcb388ccecf90a74d495132), ROM_SKIP(1))
ROM_END
+// AUVA TAM/25-P2 M31720P - Chipset: µC M19382, M19381A, Chips - CPU: 386DX 25Mhz - BIOS: DA058290 - Keyboard-BIOS: A179859
+// BIOS-String: 30-0101-D81105-00101111-050591-OPBC-0 / AUVA 386 TAM/25/P2(P2,A1,A2), 01/10/1992- ISA8: 1, ISA16: 6, ISA16/Memory: 1
+ROM_START( tam25p2 )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "tam25-p2.bin", 0x10000, 0x10000, CRC(0ea69975) SHA1(cb7f071a36653cf4f00a8b158a4900efb8f8b8e8))
+ROM_END
-// ASUS ISA-386C - Chipset : SIS Rabbit : 85C310 / 85C320 / 85C330 / 85C206
-// BIOS : AMI 05/05/1991, on a 27C512 type EPROM (64KB) - BIOS-String : 30-0105-001292-00101111-050591-SISDFC-386
-// ISA8: 2, ISA16:5, ISA16/Memory: 1
-ROM_START( isa386c )
+// Elitegroup ELT-386SX-160BE - Chips P82C206 - CPU: Intel 386sx-16, FPU: socket provided - BIOS:Phoenix 679006 - Keyboard-BIOS: Intel P8242/Phoenix
+// ISA8: 2, ISA16: 5 - OSC: 14.31818MHz, 32.000MHz - BIOS-String: Phoenix 80386 ROM BIOS PLUS Version 1.10 22 / ELT-386SX(P9)
+ROM_START( elt386sx )
ROM_REGION(0x20000, "bios", 0)
- ROM_LOAD( "asus_isa-386c_bios.bin", 0x10000, 0x10000, CRC(55e6d1bb) SHA1(e1ac490a30f63b6e4d6d9d0fbaea3d132b8ff053))
+ ROMX_LOAD( "elt386l.bin", 0x10000, 0x8000, CRC(95fd5508) SHA1(a66cd78f52f3931c6f8486db0d39f4e55244dcea), ROM_SKIP(1))
+ ROMX_LOAD( "elt386h.bin", 0x10001, 0x8000, CRC(90c0597a) SHA1(b67b39662a0bb8c0cde1635d3fd3c1f9fbaad3c0), ROM_SKIP(1))
ROM_END
-// ASUS ISA-386U30 REV.2.2 - Chipset:UMC UM82C481AF, UM82C482AF, 82C206F - CPU: AM386DX-40 - OSC: 14.31818MHz, 32.000MHz - ISA8: 1, ISA16: 6
-// BIOS: AMI 386DX BIOS AA0974582 - BIOS-String: - Keyboard-BIOS: AMI U2518640 MEGA-KB-F-WP
-ROM_START( isa386u30 )
+// TD70N motherboard - Chipset: Citygate D100-011 - ISA16: 6 - Keyboard-BIOS: JETkey V5.0 - CPU/FPU: Am386SX/SXL-33, i387SX
+ROM_START( td70n )
ROM_REGION(0x20000, "bios", 0)
- ROM_LOAD( "386-isa-386u30.bin", 0x10000, 0x10000, CRC(6d45a044) SHA1(63c06568f9db5ce12dc8dd0fb1ad1009a9fb24f6))
+ // 0: BIOS: AMI, Version 3.10 - BIOS-String: 20-0100-009999-00101111-060692-CGD90-F / TD70N BIOS VERSION 3.10
+ ROM_SYSTEM_BIOS( 0, "td70nv310", "TD70N V3.10" )
+ ROMX_LOAD( "3cgm001.bin", 0x10000, 0x8000, CRC(8e58f42c) SHA1(56e2833457424d7176f8360470556629115493df), ROM_SKIP(1) | ROM_BIOS(0) )
+ ROM_CONTINUE( 0x10001, 0x8000 )
+ // 1: BIOS: AMI, Version 3.23T - BIOS-String: 20-0100-009999-00101111-060692-CGD90-F / BIOS VERSION 3.23T
+ ROM_SYSTEM_BIOS( 1, "td70nv323", "TD70N V3.23T" )
+ ROMX_LOAD( "3cgm002.bin", 0x10000, 0x8000, CRC(bca54fd8) SHA1(35b568c675e58965074162a93cf04918fc8d240f), ROM_SKIP(1) | ROM_BIOS(1) )
+ ROM_CONTINUE( 0x10001, 0x8000 )
ROM_END
-// Shuttle HOT-304 - Chipset: Opti F82C382, Opti (erased), UMC UM82C206L - OSC: 14.31818MHz, 50.000MHz
-// BIOS: AMI, Ser.Nr. 150796 - BIOS-String: 30-0101-DK1343-00001111-050591-OPBC-0 - Keyboard BIOS: AMI Ser.Nr. 209210 - ISA8: 1, ISA16: 6, ISA16/Memory: 1
-ROM_START( hot304 )
+// TD70A and TD70AN motherboards - Chipset: Citygate D110-014, KS83C206Q - ISA8: 1, ISA16: 5 - Keyboard-BIOS: JETkey V5.0 - CPU: Am386SX-40
+ROM_START( td70a ) // 8042 GATE-A20 ERROR - SYSTEM HALTED
ROM_REGION(0x20000, "bios", 0)
- ROM_LOAD( "386-hot-304.bin", 0x10000, 0x10000, CRC(cd4ad4ec) SHA1(50f1b7a15096fff7442d575a47728ba4709b2f39))
+ // BIOS: AMI, Version 2.60 - BIOS-String: 20-0100-009999-00101111-060692-CGD90-F / TD70A BIOS VERSION 2.60
+ ROM_SYSTEM_BIOS( 0, "td70a", "TD70A" )
+ ROMX_LOAD( "3cgm003.bin", 0x10000, 0x8000, CRC(1a92bf18) SHA1(520cd6923dd7b42544f8874813fbf81841778519), ROM_SKIP(1) | ROM_BIOS(0) )
+ ROM_CONTINUE( 0x10001, 0x8000 )
+ // 1: BIOS-String: 20-0100-009999-00101111-060692-CGD90-F / TD70A BIOS VERSION 2.60G
+ ROM_SYSTEM_BIOS( 1, "td70an", "TD70AN")
+ ROMX_LOAD( "bios.bin", 0x10000, 0x8000, CRC(0924948b) SHA1(e66b5223a7fb0b3ddb30ad0873ff099abf331262), ROM_SKIP(1) | ROM_BIOS(1) )
+ ROM_CONTINUE( 0x10001, 0x8000 )
ROM_END
-// TAM/33/40-MA0 (CM318R00,M31-R00) - Chipset: MX83C305, MX83C306 - CPU: AMD Am386DX-40 - ISA16:8
-// OSC: 80.000MHz - 14.31818 - BIOS: AMI 386 BIOS PLUS S/N OA2050592 - BIOS-String: 31-0100-001105-00101111-121291-MXIC-0 - 386DX/Cx486DLX TAM/33,30-MA0/MA01, 09/10/1992
-ROM_START( tam3340ma0 )
+// MORSE KP 386SX V2.21 - Chipset: MORSE 91A300 (sticker), UMC UM82C206L - BIOS: AMI 386SX BIOS (Ver. 2.10) C-1216 - ISA8: 2, ISA16: 6
+// BIOS-String: - 30-0200-ZZ1216-00101111-050591-386SX-0 - Keyboard-BIOS: AMI KEYBOARD BIOS PLUS C-1216 - CPU: AM-386SX/SXL-25, FPU: iN80287-12 - OSC: 8.000, 14.31818, 50.000 MHz
+ROM_START( mokp386sx )
ROM_REGION(0x20000, "bios", 0)
- ROM_LOAD( "tam_33_40-ma0.bin", 0x10000, 0x10000, CRC(56411a9f) SHA1(a6c80ea531912b758fd5b573d4fa125172cacce7))
+ ROM_LOAD( "386-morse_kp386sx.bin", 0x10000, 0x10000, CRC(f3a9c69f) SHA1(6e028a11f3770d7cda814dfa698f2ab5d6dba535))
+ROM_END
+
+// UNICHIP 386W 367C REV 1.0 - Chipset: UNIchip U4800-VLX/9351EAI/4L04F1914, HMC HM82C206 - CPU: AM386DX-40, FPU socket provided - ISA8: 1, ISA16: 5 - OSC: 14.31818
+ROM_START( uni386w )
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: BIOS: AMI 386C BIOS 2116295 -
+ // BIOS-String: 40-0400-001107-00101111-111192-U4800VLX-0 / UNICHIP BIOS VER 2.0A 09/27/1993 - Keyboard-BIOS: AMI 386C BIOS KEYBOARD 2116295 -
+ ROM_SYSTEM_BIOS(0, "ver20a", "Ver. 2.0A")
+ ROMX_LOAD( "386-2116295.bin", 0x10000, 0x10000, CRC(7922a8f9) SHA1(785008e10edfd393dc39e921a12d1a07a14bac25), ROM_BIOS(0))
+ // 1: AMI, 367 UNICHIP 386 BIOS VER 1.0 (1886636) / BIOS-String: 40-0300-001107-00101111-111192-U4800VLX-0
+ ROM_SYSTEM_BIOS(1, "ver10", "Ver. 1.0")
+ ROMX_LOAD( "3ucm002.bin", 0x10000, 0x10000, CRC(9f2e19da) SHA1(ef64c6ad9d02db849d29e3b998ca42b663656bad), ROM_BIOS(1))
+ROM_END
+
+// SCsxAIO - Chipset: Chips 82C236 (SCATsx), Acer M5105 A3E - On board: 2xCOM, Floppy, ISA
+// BIOS-String: Peacock 386sx Ver. 2.0 24.03.92 30-0000-D01131-00101111-070797-SCATsx-8 - ISA16: 6
+ROM_START( scsxaio )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "386-peacock_scsxaio.bin", 0x10000, 0x10000, CRC(54c3cacd) SHA1(b3c821b30052d0c771b5004a3746eb2cfd186c79))
+ROM_END
+
+// Shuttle 386SX REV 2.0A - Chipset: KU82335 SX042, Intel N82230-2 (Zymos); Intel N82231-2 (Zymos), BIOS: AMI 80386SX BIOS PLUS Ser #039747
+// BIOS-String: - DINT-1216-073089-K0 / 386-BIOS AMI for MORSE 386SX Personal Computer
+// Keyboard-BIOS: AMI 386 Keyboard BIOS PLUS Ser.# 039747, CPU: unreadable (SMD), FPU: empty socket - OSC: 32.000 MHz, 14.31818 - ISA8: 2, ISA16: 6
+ROM_START( sh386sx20 )
+ ROM_REGION(0x20000, "bios", 0)
+ ROMX_LOAD( "386-shuttle386sx-even_32k.bin", 0x10000, 0x8000, CRC(8b0c3d96) SHA1(73b6315928161a013cfe81b226606dfae5a8ef94), ROM_SKIP(1) )
+ ROMX_LOAD( "386-shuttle386sx-odd_32k.bin", 0x10001, 0x8000, CRC(9c547735) SHA1(3cef5290324aab9d7523e98bf511eaea351e580d), ROM_SKIP(1) )
+ROM_END
+
+// Alaris Cougar - Chipset: OPTi 82C499 - ISA16: 5, ISA16/VL: 2
+// BIOS: MR BIOS (r) V1.65 - CPU: 75MHz IBM Blue Lightning
+ROM_START( alacou )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "cougrmrb.bin", 0x10000, 0x10000, CRC(c018f1ff) SHA1(92c4689e31b367baf42b12cad8800a851cc3e828))
+ROM_END
+
+// Alaris Tornado 2 - CPU: 486 - Chipset: Opti/EFAR/SMC - ISA16: 4, PCI: 3, ISA16/VL: 2 - On board: Floppy, 1xIDE, parallel, 2xserial
+ROM_START( alator2 ) // unknown beep code LH-HL
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "tornado2.bin", 0x00000, 0x20000, CRC(2478136d) SHA1(4078960032ca983e183b1c39ae98f7cdc34735d0))
ROM_END
// DTK PEM 2530 - Chipset: VLSI 9032BT/217203/VL82C100-0C
@@ -2273,18 +2409,12 @@ ROM_START( pem2530 )
ROMX_LOAD( "386-dtk_pem-2530_bios-low.bin", 0x10000, 0x8000, CRC(d9aad218) SHA1(a7feaad2889820852e3543229b0b103288470732), ROM_SKIP(1) | ROM_BIOS(0))
ROMX_LOAD( "386-dtk_pem-2530_bios-high.bin", 0x10001, 0x8000, CRC(550c4d77) SHA1(05aba1a98e738f9b706b5a8f09b5b6c86bd336e2), ROM_SKIP(1) | ROM_BIOS(0))
// 80386 BIOS Version 3.10 Rev. 2.06 (BIOS not original, works in PEM 2530)
+ // additional info from chukaev.ru54.com: CPUBT-S26361-D548 (Siemens?) - Chipset: VL82C320A, VL82C331, VL16C452B - CPU: NG80386SX-20, socket for 80387SX
ROM_SYSTEM_BIOS(1, "pem2530", "DTK PEM 2530")
ROMX_LOAD( "386-dtk pem-2530-high_32k.bin", 0x10000, 0x8000, CRC(56a822c0) SHA1(b65797c0f87a0815b393758af9c059e6d7172ae9), ROM_SKIP(1) | ROM_BIOS(1))
ROMX_LOAD( "386-dtk pem-2530-low_32k.bin", 0x10001, 0x8000, CRC(8688d883) SHA1(c3034c8b343786cb89de48fb2f4992160414f89e), ROM_SKIP(1) | ROM_BIOS(1))
ROM_END
-// 386-4N-D04A - BIOS-String: 40-0102-428003-00101111-080893-UMC491F-0 - UMC 4913 386 IVN 1.0 1993.12.22
-// Chipset: UMC UM82C493F, UM82C491F
-ROM_START( 4nd04a )
- ROM_REGION(0x20000, "bios", 0)
- ROM_LOAD( "386-4n-d04a.bin", 0x10000, 0x10000, CRC(cf386b9c) SHA1(6fd4303e4f0d2ed75d4e7f36dc855037b1779e64))
-ROM_END
-
// SM 386-40F - MR BIOS (r) V1.40 - Ver: V1.40-FORX300
// Chipset: SIS 85C206, FOREX FRX36C200, FOREX FRX36C300
ROM_START( sm38640f )
@@ -2295,16 +2425,16 @@ ROM_END
// Soyo SY-019H and SY-019I BIOS-String: 30-0200-DH1102-00101111-070791-ETEQ386-0 / REV C3
// Chipset: SIS 85C206, ETEQ ET82C493, ET82C491
ROM_START ( sy019hi )
- ROM_REGION(0x20000,"bios", 0)
+ ROM_REGION(0x20000, "bios", 0)
ROM_LOAD( "ami_soyo_sy-19i.bin", 0x10000, 0x10000, CRC(369a040f) SHA1(3dbcbcb8b8a50717cae3b17f44ca1b7c394b75fc))
ROM_END
-// PC-Chips M321
-// Chipset: PCChips C206/306, CHIP6/4L04F1666, CHIP5/4L04F1282 (rev. 2.3 and 2.7 boards)
+// PC-Chips M321 - RAM: 8xSIMM30, Cache: 8 sockets, 4 sockets occupied by CY71C199-25PC - CPU: AM386-DX40, FPU: socket provided - OSC: 80.000MHz, 14.31818
+// Chipset: PCChips C206/306, CHIP6/4L04F1666, CHIP5/4L04F1282 (rev. 2.3, 2.5 and 2.7 boards) - ISA8: 2, ISA16: 6
ROM_START( pccm321 )
- ROM_REGION(0x20000,"bios", 0)
+ ROM_REGION(0x20000, "bios", 0)
// BIOS-String: 30-0201-ZZ1347-00101111-050591-M320-0
- ROM_SYSTEM_BIOS(0, "m321_23", "PCChips M321 Rev.2.3")
+ ROM_SYSTEM_BIOS(0, "m321_23", "PCChips M321 Rev.2.3") // also on a rev. 2.5 board with C&T J38600DX-33, ULSI MathCo-DX33
ROMX_LOAD( "pcchips_m321_rev2.3.bin", 0x10000, 0x10000, CRC(ca0542e4) SHA1(8af9f88e022f8115708178c6c0b313ea0423a2b5), ROM_BIOS(0) )
// BIOS-String: 30-0100-001437-00101111-060692-PC CHIP-0
ROM_SYSTEM_BIOS(1, "m321_27_1", "PCChips M321 Rev.2.7 #1")
@@ -2317,114 +2447,164 @@ ROM_END
// PC-Chips M326
// Chipset: SARC RC4018A4/9324 and SARC RC6206A4/9408-AHS or SARC RC4018A4/9324 and RC4919A4-9323 (v5.5 board) or SARC RC2016A4-9320 and RC4019A4-9324 (v5.3)
ROM_START( pccm326 )
- ROM_REGION(0x20000,"bios", 0)
+ ROM_REGION(0x20000, "bios", 0)
// 0: Award Modular BIOS 4.50
ROM_SYSTEM_BIOS(0, "pccm326", "PCChips M326 V5.2") // BIOS reports a 66MHz 386DX original board has a TI TX486DLC/E-40PCE and IIT 4C87DLC-40 CPU/FPU combo
ROMX_LOAD( "m326_v5.2_m601-326.bin", 0x10000, 0x10000, CRC(cca6a443) SHA1(096c8bfa000c682d6c801da27c7fd14243ebb63b), ROM_BIOS(0) )
- // 1: BIOS-String: 40-0100-001437-001001111-080893-4386-0 / Release 10/01/93.
+ // 1: BIOS-String: 40-0100-001437-001001111-080893-4386-0 / Release 10/01/93 - also on an "M601 Rev. 1.3" board with a i486DX-33 (BIOS AMI AB0077440 - Keyboard-BIOS: Regional HT6542)
ROM_SYSTEM_BIOS(1, "m326r53", "PC-Chips M326 Rev. 5.3")
ROMX_LOAD( "m326_rev.5.3.bin", 0x10000, 0x10000, CRC(6c156064) SHA1(362ce5a2333641083706a878b807ab87537ca1e6), ROM_BIOS(1) )
+ // 2: BIOS: AMI; 08/08/93; Release 10/01/93
+ ROM_SYSTEM_BIOS(2, "m326", "M326") // no display
+ ROMX_LOAD( "3sam005.bin", 0x10000, 0x10000, CRC(f232cd4b) SHA1(e005aa3a7d160223fb2912cf2cd5cc8af49e79a5), ROM_BIOS(2) )
ROM_END
-// CX Technology, Inc. Model SXD (4x SIMM, 4x 16-bit ISA)
-// SARC RC2016A5; HM6818P; CX109; LT38C41 © Lance Corp. (keyboard controller?)
-ROM_START( cxsxd )
- ROM_REGION(0x20000,"bios", 0)
- // BIOS-String: 03/25/93-SARC_RC2016A-219v0000 / CX 386SX System
- ROM_LOAD( "award_cx-sxd_v4.50.srd.bin", 0x10000, 0x10000, CRC(ef1c74d7) SHA1(b40b1cb7143c4e352798bdf3b488d9342a4029a7))
-ROM_END
-
-// UMC UM82C482AF, UM82C391A, UM82C206F
-// 8x SIMM, 8x ISA
+// Elitegroup UM386 Rev. 1.1 - UMC UM82C482AF, UM82C391A, UM82C206F - OSC: 80.000MHz, 14.31818MHz
+// BIOS: AMI-1131 E-91844945 - Keyboard-BIOS: AMI KEYBOARD-BIOS-VER-F / Intel P8942AHP
+// RAM: SIMM30x8, Cache: 9xW2464AK-20, 1x ISA8, 7xISA16 - CPU: AM386DX/DXL-40
ROM_START( ecsum386 )
ROM_REGION(0x20000, "bios", 0)
// BIOS-String: 30-0500-D01131-00101111-070791-UMCWB-0 / UM386 V1.1 03-06-92
- ROM_LOAD( "ami_um386_rev1.1.bin", 0x10000, 0x10000,CRC(81fe4297) SHA1(efb2ba2be6f08cb487ee1b867a2456ed6b5975ad))
+ ROM_LOAD( "ami_um386_rev1.1.bin", 0x10000, 0x10000, CRC(81fe4297) SHA1(efb2ba2be6f08cb487ee1b867a2456ed6b5975ad))
ROM_END
-// Chips & Technologies P82C351, P82C355, P82C356
-// 6x 16-bit ISA + 2x 8-bit ISA
-ROM_START( fu340 )
- ROM_REGION(0x20000, "bios", 0)
- // BIOS-String: 30-0200-D01247-00101111-050591-PEAKDM_B-0 / FU340 REV-B PAGE MODE BIOS
- ROM_LOAD( "ami_abit_fu340.bin", 0x10000, 0x10000,CRC(9ea90d90) SHA1(091bdae7b1e36ac5168823d80d5907af2a95e583))
-ROM_END
+// ***** 386sx motherboards using the ALi 1217 chipset
-// Motherboards using the OPTi495XLC chipset
-
-// Chipset: OPTi 82C495XLC F82C206, BIOS: AMI 386DX BIOS Ser.#:AA2602776
-// Keyboard-BIOS: Lance LT38C41 - ISA8: 1, ISA16: 5
-ROM_START( opti495xlc )
+ROM_START( alim1217 )
ROM_REGION(0x20000, "bios", 0)
- // 0: BIOS-String: 40-081L-001343-00101111-080893-OP495XLC-F / OPTi495XLC For 386
- ROM_SYSTEM_BIOS(0, "optimini", "OPTi Mini 82C495XLC")
- ROMX_LOAD( "386-opti-mini.bio", 0x10000, 0x10000, CRC(04c75e45) SHA1(d5bf92421dda3191c6da12ae2fa31c9ee7a831e1), ROM_BIOS(0) )
- // 1: MR BIOS (r) V1.60
- ROM_SYSTEM_BIOS(1, "mr495xlc", "MR BIOS for OPTi 82C495XLC") // use Hercules
- ROMX_LOAD( "mr-3dx94.rom", 0x10000, 0x10000, CRC(6925759c) SHA1(540177fe2c10e20037893c9763b0bf6e35163c9c), ROM_BIOS(1) )
+ //0: BIOS-String: 30-0100-ZZ1453-00101111-070791-ACER1217-0 / CPU: 386SX-40
+ ROM_SYSTEM_BIOS( 0, "m121701", "ALi M1217 #1" )
+ ROMX_LOAD( "3alm005.bin", 0x10000, 0x10000, CRC(8708727c) SHA1(9be25b1af080aee863441cf0d25d0f984accb086), ROM_BIOS(0))
+ // 1: BIOS-String: 30-0100-D01131-00101111-070791-ALI1217-F
+ ROM_SYSTEM_BIOS( 1, "m121702", "ALi M1217 #2" )
+ ROMX_LOAD( "3alm006.bin", 0x10000, 0x10000, CRC(e448c436) SHA1(dd37127920a945f1273c70c41e79e4fc70a5de01), ROM_BIOS(1))
+ // 2: BIOS-String: 30-0501-D81105-00101111-070791-ACER1217-0 - 386SX NPM/33,40-A0(2) 05/12/1993
+ ROM_SYSTEM_BIOS( 2, "m919a00", "386SX NPM/33,40-A0" )
+ ROMX_LOAD( "m919a00_npm-40.bin", 0x10000, 0x10000, CRC(4f330d82) SHA1(08224c7bcfb2a859b682bf44ac1ac7fd9f2ade78),ROM_BIOS(2))
+ // 3: GMB-386SAT - Am386SX-40, IIT 3C87SX-33 - flashing "K/B controller incorrect" - Chipset: ALi M1217-40 - ISA8: 1, ISA16: 5
+ // BIOS: AMI 386SX BIOS AA1280569 - BIOS-String: 30-0100-428036-00101111-111192-ALI1217-F - Keyboard-BIOS: JETkey V5
+ ROM_SYSTEM_BIOS( 3, "gmb386sat", "GMB-386SAT_V1.0" )
+ ROMX_LOAD( "gmb-386sat_v1.0.bin", 0x10000, 0x10000, CRC(59ecc773) SHA1(f2007fce76b3a91f51bfb5f43c1539d5ae06d35f), ROM_BIOS(3))
+ // 4: ML-765 V2 - BIOS: AMI AA0508210 - BIOS-String: 30-0103-DJ1113-00101111-070791-ACER1217-0
+ ROM_SYSTEM_BIOS( 4, "ml765", "ML-765" )
+ ROMX_LOAD( "3alm011.bin", 0x10000, 0x10000, CRC(27a799d4) SHA1(873cf5968923c5a655ff32f3d968b7cddcb08e76), ROM_BIOS(4))
+ // 5: BIOS: AA0030659 - BIOS-String: 30-0100-428029-00101111-070791-ACER1217-0
+ ROM_SYSTEM_BIOS( 5, "m121703", "ALi M1217 #3" )
+ ROMX_LOAD( "3alm012.bin", 0x10000, 0x10000, CRC(5b822a2a) SHA1(e61b27f06cfec54973fbabff277bde617847b1e2), ROM_BIOS(5))
ROM_END
-// Motherboards using the Symphony SL82C362 SL82C461 SL82C465 chipset
-// 386 SC Rev A2 - BIOS: AMI 386 BIOS Ser.#: ZZ006975, BIOS-String: 30-0200-DF1211-00101111-042591-SYMP-0 / 386DX BIOS for SYMLABS SL82C360 - Keyboard-BIOS: AMI #Z357365
-ROM_START( 386sc ) // CPU: unreadable, FPU: Cyrix 387DX-25 - OSC: 40.000MHz, 14.31818 - ISA8: 1, ISA16: 7
- ROM_REGION(0x20000, "bios", 0)
- ROM_LOAD( "386_sc_symphony.bin", 0x10000, 0x10000, CRC(fabe369c) SHA1(211ff63dd874c273135d1427db3562d752c2bade))
-ROM_END
+// 386 motherboards using the ALi M1419 chipset
-// BIOS-String: 20-0200-DF1121-00101111-102591-SYM_386B-0 / 386DX/SX (S1A.P)
- // ROM_SYSTEM_BIOS(4, "386sc2c", "386-SC-2C") // Chipset: SYMPHONY SL82C362, SL82C461, SL82C465
-ROM_START( 386sc2c )
+ROM_START( alim1419 )
ROM_REGION(0x20000, "bios", 0)
- ROM_LOAD( "386-sc-2c_ami_za492668.bin", 0x10000, 0x10000, CRC(b408eeb7) SHA1(cf1974492119e1aae623fa366d5760343e827e52))
+ // 0: KMC-A419-8 VER 1.0 - Chipset: M5818 A1, ALi M1421 A1, M1419 A0 - OSC: 14.31818, 80.000MHz
+ // BIOS-String: 40-0100-001453-00101111-121291-ALI1419-0 / 486DLC/386DX, ISA8: 1, ISA16: 6
+ ROM_SYSTEM_BIOS ( 0, "kmca419", "KMC-A419-8 VER 1.0" )
+ ROMX_LOAD( "3alm010.bin", 0x10000, 0x10000, CRC(733d0704) SHA1(b5724f98047e95ea41aaa396a0374357f20cf2de), ROM_BIOS(0))
+ // 1: BIOS: Award Modular BIOS v4.50 - BIOS-String: 06/22/93-ACER-M1419-214k6000-00
+ ROM_SYSTEM_BIOS( 1, "alim141901", "ALi M1419 #1" )
+ ROMX_LOAD( "3alw001.bin", 0x10000, 0x10000, CRC(15bd5c90) SHA1(abe2a8613d2950b27701468144fe9de8063d6e57), ROM_BIOS(1))
ROM_END
-// Motherboards using the Ali M1429 A1 and M1431 A2 chipsets ... they both hang before initializing the graphics card
+// ***** 386 Motherboards using the Ali M1429 A1 and M1431 A2 chipsets ... they hang before initializing the graphics card
ROM_START( alim1429 )
ROM_REGION(0x20000, "bios", 0)
// 0:
- ROM_SYSTEM_BIOS(0, "386ali", "386 board with Ali chipset")
+ ROM_SYSTEM_BIOS( 0, "386ali", "386 board with Ali chipset" )
ROMX_LOAD( "386_ali_ami_511767.bin", 0x10000, 0x10000, CRC(3c218db4) SHA1(785ea7c36e8be5e7410524e90170d4985cbc9c24), ROM_BIOS(0))
// 1: SER-386AD III (written on the underside of the board) - CPU: AMD Am386DX-40 - ISA16: 5
// BIOS : AMIBIOS 04/04/1993 Ser.# 579092 - BIOS-String : 40-0212-001133-00101111-040493-ALI1429-F - Keyboard BIOS: Regional HT6542
- ROM_SYSTEM_BIOS(1, "ser386ad", "SER-386AD III")
+ ROM_SYSTEM_BIOS( 1, "ser386ad", "SER-386AD III" )
ROMX_LOAD( "ser386ad3.bin", 0x10000, 0x10000, CRC(d80d6deb) SHA1(9f889f7464255431c13ac91d7df31b325447fef5), ROM_BIOS(1))
+ // 2: ISA8: 1, ISA16: 5, BIOS-String: 40-0103-001256-00101111-080893-ALI1429-H, BIOS: AMIBIOS, 08/08/93, 386DX ISA BIOS, AA2722981
+ ROM_SYSTEM_BIOS( 2, "revb", "REV:B")
+ ROMX_LOAD( "3alm001.bin", 0x10000, 0x10000, CRC(56ea4d9d) SHA1(0633f78a0013a62be974233a3cad6a5d3cbe90d1), ROM_BIOS(2))
+ // 3: CPU: 386DX-40 -
+ ROM_SYSTEM_BIOS( 3, "alim142901", "ALi M1429 #1" )
+ ROMX_LOAD( "3alm007.bin", 0x10000, 0x10000, CRC(b72d754a) SHA1(364a976eac61bc923b76ccddd13f80e0727e5df5), ROM_BIOS(3))
+ // 4: REV:8 - CPU: 386DX-40
+ ROM_SYSTEM_BIOS( 4, "alim142902", "ALi M1429 #2" )
+ ROMX_LOAD( "3alm008.bin", 0x10000, 0x10000, CRC(4cb1052d) SHA1(995a590beb0654c5e784f10019c10bd4b0278d9b), ROM_BIOS(4))
+ // 5: ??? REV 2.3, Chipset: Asaki 3A029, 3A031 (= ALi 1429) - BIOS: AMI 386 BIOS S/N: 254468
+ // BIOS-String: 40-0215-001926-00101111-040493-ALI1429 - ISA8: 1, ISA16: 5
+ ROM_SYSTEM_BIOS( 5, "asaki", "386 with Asaki chipset" )
+ ROMX_LOAD( "3asm001.bin", 0x10000, 0x10000, CRC(57c72c4d) SHA1(934223fcd39533bca2e7e57406b1800d9e900ef0), ROM_BIOS(5))
ROM_END
+// Daewoo AL486V-D Rev:1.1 - BIOS/Version: AMI v299 08/08/93, BIOS-String: 40-0100-001131-00101111-080893-ALI1429 - Keyboard-BIOS: MEGAKEY
+// BIOS: AMI v1.9 299 WinPro-d S/No. E-94237376 - OSC: 14.31818
+ROM_START( al486vd ) // this is a 386 class board despite the name
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "al486v-d_v299.bin", 0x10000, 0x10000, CRC(75c75d58) SHA1(50e314cdefe39e8e6f74b9b045a15cc53b3f16ba))
+ROM_END
-// Motherboards using the Forex FRX36C300 + FRX46C402; SiS 85C206 chipset
-// Chipset: FOREX FRX46C402 FRX36C300 SIS 85C206 SiS 85C206 - CPU: Intel 80386DX-16 - ISA16: 7, ISA16/Memory: 1 - OSC: 66.000MHz
-// BIOS: AMI 386 BIOS PLUS - Ser. 006707 - BIOS-String: 30-0400-ZZ1266-00101111-070791-FORX-0 / FRX/386DX CACHE SYSTEM
-ROM_START( frxc402 )
+// 386 motherboards using the Chips & Technologies P82C351, P82C355, P82C356 chipset
+
+// ABIT FU340 - 6x 16-bit ISA + 2x 8-bit ISA - RAM: SIMM30x8, Cache: 32/64/128/256KB with TAG (TULARC info)
+// BIOS-String: 30-0200-D01247-00101111-050591-PEAKDM_B-0 / FU340 REV-B PAGE MODE BIOS
+ROM_START( fu340 )
ROM_REGION(0x20000, "bios", 0)
- ROM_LOAD( "386-forex.bin", 0x10000, 0x10000, CRC(4a883c14) SHA1(1c2de190ccd152ff894f9fd128e028d4fa63109a))
+ ROM_LOAD( "ami_abit_fu340.bin", 0x10000, 0x10000, CRC(9ea90d90) SHA1(091bdae7b1e36ac5168823d80d5907af2a95e583))
ROM_END
-// 8x SIMM, 8x ISA
-ROM_START( smih0107 )
+// GES 9051N-386C VER -0.01 - CPU/FPU: i386DX-33, i387DX 16-33 - Chipset: Chips F82C351, F82C355, F82C356 - BIOS: AMI 386DX ISA BIOS (AA0365368)
+// BIOS-String: 30-1113-002101-00001111-050591-PEAKDM_B-0 / GES 9051N BIOS VERSION 2.0 - ISA8: 3, ISA16: 5
+ROM_START( ges9051n )
ROM_REGION(0x20000, "bios", 0)
- // BIOS-String: 30-0400-428005-00101111-070791-FORX-0 / BIOS ID SMIH0107 / IT9112
- ROM_LOAD( "ami_smih0107.bin", 0x10000, 0x10000, CRC(970bb0c0) SHA1(4a958887485f7239d25fa7b0c98569b97ce93800))
+ ROM_LOAD( "3ctm001.bin", 0x10000, 0x10000, CRC(7f03f606) SHA1(d03d5b6541bc7f41d78159f82aa8057229516c37))
ROM_END
-// Motherboards using the Forex FRX46C402 + FRX46C411 + SiS 85C206 chipset
+// ***** 386sx motherboards using the Chips SCAMPSX chipset
-// PT-581392 - CPU: AMD 386DX-40 FPU: ULSI Advanced Math Coprocessor DX/DLC 40MHz US83C87
-// BIOS : AMI 07/07/1991, on a 27C512 type EPROM (64KB) Ser.# 007139, BIOS-String : 30-0400-ZZ1101-00101111-070791-FORX-0 FRX/386DX CACHE SYSTEM
-// Keyboard-BIOS: AMI, Ser.# 007139 - OSC: 14.31818, 80.000MHz - ISA16: 8
-ROM_START( pt581392 )
+// ANIX CH-386S-16/20/25G P/N:001-0386S-016 VER 1.0 - Chipset: CHIPS F82C836 - BIOS: AMI 386sx BIOS PLUS S/NO. 141334
+// BIOS-String: 30-0100-D01425-00101111-050591-SCAMPSX-0 - Keyboard-BIOS: Intel/AMI - CPU: Intel (SMD), label not readable - FPU: socket available - ISA16: 6 - OSC: 14.31818 - 32.000 MHz
+ROM_START( anch386s )
ROM_REGION(0x20000, "bios", 0)
- ROM_LOAD( "pt-581392 386dx.bin", 0x10000, 0x10000, CRC(389a93de) SHA1(8f1320b1d163167272cfad073f58c355e31fcf6f))
+ ROM_LOAD( "386-ch-386s.bin", 0x10000, 0x10000, CRC(8902c64b) SHA1(3234bac6240a3a0bd05302c9ca587f5ae083f2f4))
+ROM_END
+
+ROM_START( scamp386sx )
+ ROM_REGION(0x20000,"bios", 0)
+ // 0: BIOS-String: 30-0100-D61204-00101111-050591-SCAMPSX-0 / MB-1316/20/25VST
+ ROM_SYSTEM_BIOS(0, "mb386sx", "mb386sx-25spb") // VLSI SCAMPSX
+ ROMX_LOAD( "386sx_bios_plus.bin", 0x10000, 0x10000, CRC(f71e5a8d) SHA1(e73fda2547d92bf578e93623d5f2349b97e22393), ROM_BIOS(0))
+ // 1: BIOS-String: 30-0400-428027-00101111-070791-SCMPSX-0 / VLSI SCAMP 386SX 16/20/25MHz
+ ROM_SYSTEM_BIOS(1, "scamp01", "VLSI SCAMPSX #1")
+ ROMX_LOAD( "ami_386sx_vlsi_scamp_070791.bin", 0x10000, 0x10000, CRC(082d071c) SHA1(69af9a951f138146036b3c9ac3761cc6589b6cf5), ROM_BIOS(1))
+ // 2: Dataexpert (Unknown model) - Chipset: VLSI VL82C311-25FC2 (SCAMPSX), HM6818P - BIOS: AMI 05/05/1991 on a 64KB "Fairchild FM27C512"
+ // BIOS-String: 30-0100-D41107-00101111-050591-SCAMPSX-0 - SCAMP 386SX WITHOUT COMBO - Keyboard BIOS: 247076 - CPU: AM386SX/SXL-25 - OSC: 50.000MHz, 16.000MHz, 14.31818 - ISA16: 7
+ ROM_SYSTEM_BIOS(2, "datax386sx", "Dataexpert 386sx")
+ ROMX_LOAD( "bios.bin", 0x10000, 0x10000, CRC(0ba46059) SHA1(b152796e9ace0cd17c413df14d989b9cb23aa529), ROM_BIOS(2))
+ // 3: VLSI 311 386SX VER 1.0 - CPU: AM386 SX/SXL-25 - Chipset: VPL201, VPL101 - BIOS: AMI 386sx 409425 - OSC: 50.000 MHz - ISA16: 6
+ // BIOS-String: 30-0400-D41107-00101111-070791-SCMPSX-0
+ ROM_SYSTEM_BIOS( 3, "vlsi311", "VLSI 311")
+ ROMX_LOAD( "vlsi_311_386sx_ver_1.0_bios.bin", 0x10000, 0x10000, CRC(98056235) SHA1(3a3ff07808c4d43e4935c7463741e3ed8e515af9), ROM_BIOS(3))
+ // 4: BIOS-String: 30-0100-ZZ1379-00101111-050591-SCAMPSX-0 / SCAMP 386SX - Chipset: (VLSI ???) 82C310, 82C311 - CPU: 386SX-25
+ ROM_SYSTEM_BIOS(4, "scamp02", "VLSI SCAMPSX #2")
+ ROMX_LOAD( "3vlm002.bin", 0x10000, 0x10000, CRC(4d2b27b3) SHA1(3c67d7bd507ceb4d1762866f69c2cb94cd799a15), ROM_BIOS(4))
ROM_END
-// Motherboards using the Chips & Technologies CS8230 chip set: P82C301C, P82C302C, P82A303, P82A304, 2x P82B305, P82A306 A, P82C206
+// ***** 386 Motherboards using the Chips & Technologies CS8230 chip set: P82C301C, P82C302C, P82A303, P82A304, 2x P82B305, P82A306 A, P82C206
+ROM_START( cs8230 )
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: BIOS-String: EC&T-1332-040990-K0
+ ROM_SYSTEM_BIOS(0, "cs823001", "CS8230 #1")
+ ROMX_LOAD( "ami_386_cs8230_chipset.bin", 0x10000, 0x10000, CRC(1ee766d0) SHA1(75dba3c9817dfe6caca46f5f4f2f1d76ba88d3c7), ROM_BIOS(0) )
+ // 1: BIOS-String: EC&T-1197-022589-K0
+ ROM_SYSTEM_BIOS(1, "cs823002", "CS8230 #2")
+ ROMX_LOAD( "3ctm004l.bin", 0x10000, 0x8000, CRC(b6efc361) SHA1(88d89bf5e7c57ffe4751e14220ac82a2d0a12994), ROM_SKIP(1) | ROM_BIOS(1) )
+ ROMX_LOAD( "3ctm004h.bin", 0x10001, 0x8000, CRC(f26c2672) SHA1(1d3a2554bbf3dc554970e0d62d9c5fad24977f55), ROM_SKIP(1) | ROM_BIOS(1) )
+ROM_END
+
+// ECS-386/32 - OSC: 40.000MHz, 32.000MHz, 14.318MHz - CPU: 386DX-20, FPU socket provided
// 8x SIMM, 5x 16-bit ISA, 2x 8-bit ISA, 1x 32-bit proprietary memory expansion slot
ROM_START( ecs38632 )
ROM_REGION(0x20000, "bios", 0)
@@ -2461,10 +2641,437 @@ ROM_START( dfi386 )
ROMX_LOAD( "386-dfi-386-20_odd_32k.bin", 0x10001, 0x8000, CRC(1968fe11) SHA1(b5662daa57751859d2cfa7740f708277cbe35080), ROM_SKIP(1) )
ROM_END
+
+// ***** 386 Motherboards using the Forex FRX36C300 + FRX46C402; SiS 85C206 chipset
+
+// Chipset: FOREX FRX46C402 FRX36C300 SIS 85C206 SiS 85C206 - CPU: Intel 80386DX-16 - ISA16: 7, ISA16/Memory: 1 - OSC: 66.000MHz
+ROM_START( frxc402 )
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: BIOS: AMI 386 BIOS PLUS - Ser. 006707 - BIOS-String: 30-0400-ZZ1266-00101111-070791-FORX-0 / FRX/386DX CACHE SYSTEM
+ ROM_SYSTEM_BIOS(0, "frx386", "FRX/386")
+ ROMX_LOAD( "386-forex.bin", 0x10000, 0x10000, CRC(4a883c14) SHA1(1c2de190ccd152ff894f9fd128e028d4fa63109a), ROM_BIOS(0))
+ // 1: Chipset: Forex FRX36C300 + FRX46C402; IMP 82C206 - ISA16: 8, memory extension connector on board but not fitted
+ // BIOS: AMI - BIOS-String: - 30-0400-ZZ1139-00101111-070791-FORX-0, FRX/386DX CACHE SYSTEM - Keyboard BIOS: Intel P8942HP with AMI KB-BIOS-VER-F - OSC: 14.31818MHz, 66,667MHz
+ ROM_SYSTEM_BIOS(1, "frximp", "Forex 386 with IMP chip")
+ ROMX_LOAD( "386-imp82c206p.bin", 0x10000, 0x10000, CRC(6f340961) SHA1(393720e1bfe3d323a34106992a65dd593284bf95), ROM_BIOS(1))
+ROM_END
+
+// RAM: 8xSIMM30, Cache: 10 sockets, 5xATT7C199P occupied - ISA8: 2, ISA16: 6 - CPU: AM386DX/DXL-40, FPU: IIT 3C87-25
+// OSC: 80.000MHz, 14.318180MHz - Keyboard-BIOS: AMI 386 BIOS ZA902884
+ROM_START( smih0107 )
+ ROM_REGION(0x20000, "bios", 0)
+ // BIOS-String: 30-0400-428005-00101111-070791-FORX-0 / BIOS ID SMIH0107 / IT9112
+ ROM_LOAD( "ami_smih0107.bin", 0x10000, 0x10000, CRC(970bb0c0) SHA1(4a958887485f7239d25fa7b0c98569b97ce93800))
+ROM_END
+
+
+// ***** 386 Motherboards using the Forex FRX46C402 + FRX46C411 + SiS 85C206 chipset
+
+// PT-581392 - CPU: AMD 386DX-40 FPU: ULSI Advanced Math Coprocessor DX/DLC 40MHz US83C87
+// BIOS : AMI 07/07/1991, on a 27C512 type EPROM (64KB) Ser.# 007139, BIOS-String : 30-0400-ZZ1101-00101111-070791-FORX-0 FRX/386DX CACHE SYSTEM
+// Keyboard-BIOS: AMI, Ser.# 007139 - OSC: 14.31818, 80.000MHz - ISA16: 8
+ROM_START( pt581392 )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "pt-581392 386dx.bin", 0x10000, 0x10000, CRC(389a93de) SHA1(8f1320b1d163167272cfad073f58c355e31fcf6f))
+ROM_END
+
+// Micro-Express Inc. Forex 386 Cache - Chipset: Forex FRX46C402, FRX46C411, Morse 92A206S - Keyboard BIOS: Lance LT38C41
+// BIOS: EPROM, AMI 386 BIOS, #ZA605315 - CPU: AM386DX-40 - OSC: 66.6670MHz - ISA8: 2, ISA16: 5
+// BIOS-String: 30-0701-001585-00101111-121291-microtel-0 / Microtel Computer products present C3HF/09/92
+ROM_START( frx386c )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "forex386.bin", 0x10000, 0x10000, CRC(007b5565) SHA1(cf749fe05cacebb2230cd7493523ae55e80eea8b))
+ROM_END
+
+
+// ***** 386sx motherboards using the Headland HT18/C chipset
+// moved here from 286, original comment: not a bad dump, sets unknown probably chipset related registers at 0x1e8 before failing post
+ROM_START( ht18c )
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: (BIOS release date:: 07-07-1991) - Chipset: Headland HT18/C
+ ROM_SYSTEM_BIOS(0, "ami181", "AMI HT 18.1")
+ ROMX_LOAD( "ht18.bin", 0x10000, 0x10000, CRC(f65a6f9a) SHA1(7dfdf7d243f9f645165dc009c5097dd515f86fbb), ROM_BIOS(0) )
+ // 1: CPU: 386SX-25 - BIOS: AMI; 12/12/91
+ ROM_SYSTEM_BIOS(1, "ami182", "AMI HT 18.2")
+ ROMX_LOAD( "3hlm001.bin", 0x10000, 0x10000, CRC(b1434d6f) SHA1(1863dd60ad2b494141b4b30fe7b02f454bec82a3), ROM_BIOS(1) )
+ // 2: CPU: 386SX-25 - BIOS: AMI; 07/07/91
+ ROM_SYSTEM_BIOS(2, "ami183", "AMI HT 18.3")
+ ROMX_LOAD( "3hlm002.bin", 0x10000, 0x10000, CRC(10a78d11) SHA1(0500d92e2691164bdc5c71b3d6fd0a154f7279d4), ROM_BIOS(2) )
+ // 3: CPU: 386SX-25 - BIOS: AMI; 04/30/91
+ // BIOS-String: 30-01]1-ZZ1372-00101111-0403091-HT18SX-0
+ ROM_SYSTEM_BIOS( 3, "ami184", "AMI HT 18.4") // marked as BAD_DUMP for the "]" in the BIOS string ... and because it actually runs :)
+ ROMX_LOAD( "3hlm003.bin", 0x10000, 0x10000, BAD_DUMP CRC(50f7a543) SHA1(8962f7ce2fc5c60059894cae04cf5fccd6cee279), ROM_BIOS(3) )
+ // 4: MBA-025 - Chipset: Headland HT18/B, HM6818A - BIOS: AMI 386SX BIOS PLUS T.B 238958 - BIOS-String: 30-0100-009999-00101111-043091-HT18SX-0
+ // Keyboard-BIOS: AMI Keyboard BIOS PLUS T.B. 238958 - CPU: AMD AM386 SX/SXL-25 - FPU: empty socket - OSC: 32.000 MHz - 50.000 MHz - 14.31818 - ISA8: 1, ISA16: 6
+ ROM_SYSTEM_BIOS( 4, "mba025", "MBA-025" )
+ ROMX_LOAD( "386-mba-025-low_32k.bin", 0x10000, 0x8000, CRC(4df55219) SHA1(7dc1adb130ae8c3c88e2c58bde6e3b793fa0c78e), ROM_SKIP(1) | ROM_BIOS(4))
+ ROMX_LOAD( "386-mba-025-high_32k.bin", 0x10001, 0x8000, CRC(0406fdc9) SHA1(ee21d584c98b0c11ec2cfb609de83c38b0a893c7), ROM_SKIP(1) | ROM_BIOS(4))
+ROM_END
+
+
+// ***** 386 Motherboards using the Macronix MX83C305(A)(FC), MX83C05(A)(FC) chipset
+
+// TAM/33/40-MA0 (CM318R00,M31-R00) - Chipset: MX83C305, MX83C306 - CPU: AMD Am386DX-40 - ISA16:8
+// OSC: 80.000MHz - 14.31818 - BIOS: AMI 386 BIOS PLUS S/N OA2050592 - BIOS-String: 31-0100-001105-00101111-121291-MXIC-0 - 386DX/Cx486DLX TAM/33,30-MA0/MA01, 09/10/1992
+ROM_START( tam3340ma0 )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "tam_33_40-ma0.bin", 0x10000, 0x10000, CRC(56411a9f) SHA1(a6c80ea531912b758fd5b573d4fa125172cacce7))
+ROM_END
+
+// Octek Jaguar V rev.1.4 - Chipset: MX83C: MX83C305FC, MX83C306FC
+// CPU: AMD 386DX-40, FPU socket provided - OSC: 80.000MHz, 14.31818
+ROM_START( ocjagv )
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: MR BIOS (r) V1.40
+ ROM_SYSTEM_BIOS(0, "jagvmr14", "Jaguar V MR-BIOS 1.40")
+ ROMX_LOAD( "bios.bin", 0x10000, 0x10000, CRC(a552d6ad) SHA1(91bae14c3ec7edbc9ef240fec1be17f3582d7ec2), ROM_BIOS(0))
+ //1: AMI BIOS// BIOS: AMI 386DX ISA BIOS AA0797325 - BIOS-String: 31-0100-426069-00101111-121291-MXIC-0 MX-DIR_001
+ // Keyboard-BIOS: Intel
+ ROM_SYSTEM_BIOS(1, "jagvami", "Jaguar V AMI BIOS")
+ ROMX_LOAD( "octek_jaguar_v_ami_bios_isa386dx.bin", 0x10000, 0x10000, CRC(f8d14914) SHA1(14e8ecc4794920dc530fc6bd12ad64494e2544e5), ROM_BIOS(1))
+ROM_END
+
+ROM_START( mx83c305 )
+ // 0: AMI BIOS, BIOS-String: 31-0101-009999-00101111-121291-MXIC-0 / 09/02/1992 - Keyboard-BIOS: JETkey V5.0
+ // Chipset MX83C05AFC, MX8306AFC - CPU: AMD AM386DX-40, OSC: 14.31818 - ISA8: 1, ISA16: 5
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_SYSTEM_BIOS( 0, "mxic01", "MXIC #1")
+ ROMX_LOAD( "mxic.bin", 0x10000, 0x10000, CRC(81853049) SHA1(d855b8d935417cfcfd6580fe3ed4ea393dd49b35), ROM_BIOS(0))
+ // 1: BIOS-String: 30-0200-009999-00101111-111192-MXIC-0 / 12/15/1993
+ ROM_SYSTEM_BIOS( 1, "mxic02", "MXIC #2")
+ ROMX_LOAD( "3mxm001.bin", 0x10000, 0x10000, CRC(62fcd52b) SHA1(fa34c27be4627c68fe5c828451d86cbfad0ba358), ROM_BIOS(1))
+ROM_END
+
+
+
+// ***** 386sx motherboards using the Opti F82C206, Opti 82C283 chipset
+ROM_START( op82c283 )
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: Chipset: Opti F82C206, Opti 82C283 - BIOS: ARMAS AMI 386SX BIOS PLUS 9014775 - Keyboard-BIOS: NEC D80C42C
+ // BIOS-String: 30-013X-D21185-00001111-031591-OPSX-0 - OSC: 50.000MHz, 14.31818MHz - CPU: AM386 SX/SXL-25 - ISA8: 2, ISA16: 6
+ ROM_SYSTEM_BIOS( 0, "armas", "386sx ARMAS" )
+ ROMX_LOAD( "386-opti-armas.bin", 0x10000, 0x10000, CRC(d9c696bc) SHA1(467617ab4a211ce460766daa3e5803e190368703), ROM_BIOS(0))
+ // 1: 386SX MAIN BOARD REV:A1-1M/N: 3805 - Chipset: OPTi F82C206 / OPTi (unreadable) - BIOS:AMI 386SX BIOS ZZ908380
+ // BIOS-String: 30-0100-DG112-00101111-031591-OPSX-0 / A10001B / 128KB RESERVED FOR RAM SHADOW.
+ // Keyboard-BIOS: AMI KB-BIOS-VER-F (Intel P8942AHP) - CPU: AM386 SX/SXL-25 - OSC: 14.31818MHz, 50.000MHz - ISA8: 2, ISA16: 6
+ ROM_SYSTEM_BIOS( 1, "3805", "386sx 3805" )
+ ROMX_LOAD( "386sx-opti-908380.bin", 0x10000, 0x10000, CRC(38502567) SHA1(d65d272aa60642197c9b639a8679f8f41c4a697b), ROM_BIOS(1))
+ // 2: CPU: 386SX-20 - BIOS: AMI; 03/15/91 - no display
+ ROM_SYSTEM_BIOS( 2, "c28301", "OPTi 82C283 #1")
+ ROMX_LOAD( "3opm010.bin", 0x10000, 0x10000, CRC(7c2acf57) SHA1(d40605621da40204dc6370d2d00b783b3a7f8dce), ROM_BIOS(2))
+ROM_END
+
+// Octek Panther II - Chipset: OPTi 82C283, F82C206L/Chips 82C206 - CPU: 386sx - BIOS: AMI 386sx BIOS - Keyboard-BIOS: Intel/AMI
+// BIOS-String: 30-0200-420000-00101111-050591-OPSX-0 / OPSX 386SX PAGE INTERLEAVE BIOS - ISA8: 2, ISA16: 4
+ROM_START( ocpanii )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "octek_panther_ii_386sx.bin", 0x10000, 0x10000, CRC(866192d5) SHA1(fe6133ee3ba0d71c0d4690a0843ca82106effcf6))
+ROM_END
+
+// RYC Alaris LEOPARD LX REV D - Chipset: Opti 82C283 82C206Q - CPU: 486SLC2 (IBM 14 Q) - ISA16: 7
+// BIOS: AMI 486SLC ISA BIOS AA0735388 - Keyboard-BIOS: Intel/AMI MEGA-KB-H-WP
+// BIOS-String: 30-0100-006328-00101111-060692-OPSXPI-0
+ROM_START( alaleolx )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "486-ryc-leopard-lx.bin", 0x10000, 0x10000, CRC(bbc7bfd2) SHA1(49833b482efb8e361be88f48e252621b147a3b1b))
+ROM_END
+
+
+// ***** 386 motherboards using the OPTi 82C381/382 "HiD/386 AT chipset"
+
+// CPU: 386DX-25 - Chipset: OPTI 82C382 25MHz, 82C381P, 82C206 - BIOS: AMI; 09/15/90
+// BIOS-String: EOX3-6069-083090-K0
+ROM_START( op82c381 )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "3opm004.bin", 0x10000, 0x10000, CRC(933c2c2b) SHA1(191a1a80c128430a0a461ff9202d27969a715d9d))
+ROM_END
+
+// Shuttle HOT-304 - Chipset: Opti F82C382, Opti (erased), UMC UM82C206L - OSC: 14.31818MHz, 50.000MHz
+// BIOS: AMI, Ser.Nr. 150796 - BIOS-String: 30-0101-DK1343-00001111-050591-OPBC-0 - Keyboard BIOS: AMI Ser.Nr. 209210 - ISA8: 1, ISA16: 6, ISA16/Memory: 1
+ROM_START( hot304 )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "386-hot-304.bin", 0x10000, 0x10000, CRC(cd4ad4ec) SHA1(50f1b7a15096fff7442d575a47728ba4709b2f39))
+ROM_END
+
+
+// ***** 386sx motherboards using the OPTi 82C291 chipset
+
+ROM_START( op82c291 )
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: MR BIOS (r) V1.43
+ ROM_SYSTEM_BIOS(0, "mr", "MR")
+ ROMX_LOAD( "opti_82c291_mr-bios_v143.bin", 0x10000, 0x10000, CRC(f7989a65) SHA1(cc729b6baac486ac3116f08e78eb58bb39365dd5), ROM_BIOS(0))
+ // 1: CPU: 386SX-40 - BIOS: AMI - no display, nine beeps, so probably bad dump
+ ROM_SYSTEM_BIOS( 1, "ami", "AMI")
+ ROMX_LOAD( "3opm007.bin", 0x10000, 0x10000, CRC(eed82365) SHA1(45f5a608740d161c5a74415ff3f7b573d7e61f58), ROM_BIOS(1))
+
+ROM_END
+
+// DTK Computer PPM-3333P - Chipset: OPTi 82C291 - Opti F82C206 - ISA16: 6 - CPU: AMD Am386SX/SXL-33, FPU: empty socket - OSC: 14.31818 - 66.0000 MHz
+ROM_START( ppm3333p )
+ ROM_REGION(0x20000, "bios", 0)
+ //0: Award Modular BIOS v4.20 (80386DX) / (119U906X) DTK Computer
+ ROM_SYSTEM_BIOS(0, "ppmawa", "PPM-3333P Award")
+ ROMX_LOAD( "386sx_opti291-award.bin", 0x10000, 0x10000, CRC(4855b394) SHA1(94dd1a38852eecac538ef4b8bf04bb7c1e4317d2), ROM_BIOS(0))
+ //1: BIOS-String: 30-0200-001107-00001111-121291-OPTX 291-0 / OPTI-291WB BIOS VER 1.2
+ ROM_SYSTEM_BIOS(1, "ppmami", "PPM-3333P AMI")
+ ROMX_LOAD( "386sx_opti291-ami.bin", 0x10000, 0x10000, CRC(35727f8f) SHA1(3fb14cd6ea0d7a2bd545beb1586403cc36a77668), ROM_BIOS(1))
+ROM_END
+
+
+// ***** 386 motherboards using the Opti F82C206, 82C391B, 82C392 chipset
+
+ROM_START( op82c391 )
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: CPU: 386DX - Chipset: OPTi 82C391 B2, 82C392 B - BIOS: AMI; 07/07/91; AA 0571504
+ // BIOS-String: 30-0100-DK1343-00101111-070791-OPWB3/B-0
+ ROM_SYSTEM_BIOS(0, "39101", "82C391 #1")
+ ROMX_LOAD( "3opm001.bin", 0x10000, 0x10000, CRC(3cb65e60) SHA1(c91deaba1b34008449d6cc2aa94d115c47e0640a), ROM_BIOS(0))
+ // 1: BIOS: AMI; 05/05/91; AMI 386C BIOS; #1023992
+ ROM_SYSTEM_BIOS(1, "39102", "82C391 #2") // no display
+ ROMX_LOAD( "3opm005.bin", 0x10000, 0x10000, CRC(ef3dcdde) SHA1(53a8d0af776362d5b92d1cce92d6ca8dbeb33398), ROM_BIOS(1))
+ // 2: BIOS: AMI; 07/07/91 - no display
+ ROM_SYSTEM_BIOS(2, "39103", "82C391 #3")
+ ROMX_LOAD( "3opm011.bin", 0x10000, 0x10000, CRC(6706c85a) SHA1(70af6de83e59df3d9b74e904fde98d0b9cbdaae9), ROM_BIOS(2))
+ // 3: AMI; 07/07/91 - no display
+ ROM_SYSTEM_BIOS(3, "39104", "92C391 #4")
+ ROMX_LOAD( "3opm12.bin", 0x10000, 0x10000, CRC(fa9592c5) SHA1(f9042163e7e2762e999687c3ec94d576f5b7c499), ROM_BIOS(3))
+ROM_END
+
+ROM_START( op386wb )
+ ROM_REGION(0x20000, "bios", 0)
+ // OPTi 386WB VER.1.0 - OSC: 66.6670MHz, 50.000MHz, 14,31818 - ISA8: 1, ISA16: 7
+ // BIOS: 1006229 - BIOS-String: 30-0201-D41107-00101111-050591-OPWB-0 - Keyboard-BIOS: Intel P8942AHP
+ ROM_LOAD( "386-opti-386wb-10.bin", 0x10000, 0x10000, CRC(1a5dd6b2) SHA1(9e6b556bfdf21d6f3cba6a05a3092887a71a24a8))
+ROM_END
+
+
+// ***** 386 Motherboards using the OPTi495SLC chipset => "qdi" in the 486 BIOS section uses that chipset too
+
+ROM_START( opti495slc )
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: Chipset: OPTi 82C495SLC / F82C206, BIOS: AMI 486086 - BIOS-String: 40-040A-001102-00101111-111192-OP495SLC-0
+ // Keyboard-BIOS: AMI - CPU: AM386DX-40, FPU socket provided - ISA8: 1, ISA16: 5 - OSC: 14.31818
+ ROM_SYSTEM_BIOS(0, "op495slc01", "OP495SLC #1")
+ ROMX_LOAD( "op495slc01.bin", 0x10000, 0x10000, CRC(0b25044b) SHA1(1b585f0d73ea963dcfbf421325e7da6dd3dd918f), ROM_BIOS(0))
+ // 1: BIOS-String: 40-0200-001107-00101111-111192-OP495SLC-0 - OPTI 495SLC 80386 ONLY - BIOS: AMI 386C BIOS 1605865
+ // Keyboard-BIOS: AMI 386C BIOS Keyboard ISA8: 1, ISA16: 5 - CPU: AMD AM386DX-40 - OSC: 14.3
+ ROM_SYSTEM_BIOS(1, "op495slc02", "OP495SLC #2")
+ ROMX_LOAD( "op495slc02.bin", 0x10000, 0x10000, CRC(4ff251a2) SHA1(e8655217bd46d50af6b30184bf462376d0e388c6), ROM_BIOS(1))
+ // 2: BIOS-String: - Same board exists with an OPTi495XLC chip, possibly from A-Trend
+ ROM_SYSTEM_BIOS(2, "op495slc03", "OP495SLC #3") // no display
+ ROMX_LOAD( "486dlc-unknown.bin", 0x10000, 0x10000, CRC(2799e876) SHA1(ce7b421ecb27d915585c1a98bebb17cc5c2463e7), ROM_BIOS(2))
+ROM_END
+
+
+// ***** 386 Motherboards using the OPTi495XLC chipset: OPTi 82C495XLC F82C206, BIOS: AMI 386DX BIOS Ser.#:AA2602776, Keyboard-BIOS: Lance LT38C41 - ISA8: 1, ISA16: 5
+
+ROM_START( opti495xlc )
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: BIOS-String: 40-081L-001343-00101111-080893-OP495XLC-F / OPTi495XLC For 386
+ ROM_SYSTEM_BIOS(0, "optimini", "OPTi Mini 82C495XLC")
+ ROMX_LOAD( "386-opti-mini.bio", 0x10000, 0x10000, CRC(04c75e45) SHA1(d5bf92421dda3191c6da12ae2fa31c9ee7a831e1), ROM_BIOS(0) )
+ // 1: MR BIOS (r) V1.60
+ ROM_SYSTEM_BIOS(1, "mr495xlc", "MR BIOS for OPTi 82C495XLC") // use Hercules
+ ROMX_LOAD( "mr-3dx94.rom", 0x10000, 0x10000, CRC(6925759c) SHA1(540177fe2c10e20037893c9763b0bf6e35163c9c), ROM_BIOS(1) )
+ // 2: possibly from A-Trend (A1742X REV.C 94V-0), exists with an OPTi495SLC chip, see above section, ISA8: 2, ISA16: 4, ISA16/VL: 2
+ // BIOS-String: X0-0804-001117-00101111-080893-OP395XLC-0 / OPTI 495XLC 3/486 BIOS VER 5.02_T 94/07/07
+ ROM_SYSTEM_BIOS(2, "op82c495xlc", "82C495XLC") // this one could also be listed as a 486 board as it has solder pads and sockets for CPUs from 386 to true 486s
+ ROMX_LOAD( "at080893.bin", 0x10000, 0x10000, CRC(6b49fdaa) SHA1(5b490d1d1216763ef89688c8e383c46470272005), ROM_BIOS(2) )
+ // 3: BIOS: AMI; 08/08/93; AA2740000 - hangs
+ ROM_SYSTEM_BIOS(3, "mao13", "MAO13 Rev. A")
+ ROMX_LOAD( "3opm002.bin", 0x10000, 0x10000, CRC(2d9dcbd1) SHA1(d8b0d1411b09767e10e66b455ebc74295bd1b896), ROM_BIOS(3) )
+ROM_END
+
+
+// 386sx motherboards using the SARC (or CYCLONE) RC2016A5 chipset
+
+// Pine PT-319A rev2.2a - CPU: 386sx - BIOS: AMI; 06/06/92
+// BIOS-String: X0-0100-000000-00101111-060692-386SX-0 / Ver 5.20
+ROM_START( pt319a )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "3sam001.bin", 0x10000, 0x10000, CRC(cad22030) SHA1(85bb6027579a87bfe7ea0f7df3676fdaa64920ac))
+ROM_END
+
+
+// CX Technology, Inc. Model SXD (4x SIMM30, Cache: 64/128/256KB in 2 banks plus TAG, 4x 16-bit ISA) - Chipset: SARC RC2016A5; HM6818P; CX109; LT38C41 © Lance Corp. (keyboard controller?)
+// additional info from chukaev.ru54.com: Chipset: CYCLONE RC2016A5 - ISA16: 6 - ROM: CX109 340C3A62D0A - CPU/FPU: Am386SX/SXL-33, 387
+ROM_START( cxsxd )
+ ROM_REGION(0x20000,"bios", 0)
+ // BIOS-String: 03/25/93-SARC_RC2016A-219v0000 / CX 386SX System
+ ROM_LOAD( "award_cx-sxd_v4.50.srd.bin", 0x10000, 0x10000, CRC(ef1c74d7) SHA1(b40b1cb7143c4e352798bdf3b488d9342a4029a7))
+ROM_END
+
+// PC-Chips M396F VER 2.2 - CPU: 386SX, 387SX - ISA16: 6
+ROM_START( pccm396f )
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: Chipset: PCCHIPS CHIP2 310, HT6542, HM6818A
+ // BIOS-String: X0-0100-001437-00101111-060692-M396C-0 - BIOS: AMI 386SX BIOS Ver. 2.10 C-1216
+ ROM_SYSTEM_BIOS(0, "chips2", "Chips 2")
+ ROMX_LOAD( "3pcm003.bin", 0x10000, 0x10000, CRC(b7fc6737) SHA1(670e38b628cb71dc09742f097349ac48ccf28696), ROM_BIOS(0))
+ // 1: Chipset: SARC RC2016A5 - CPU: 386SX-40/486SLC, 387SX - BIOS: AMI; 06/06/92
+ // BIOS-String: X0-0100-001437-00101111-060692-M396F-0
+ ROM_SYSTEM_BIOS(1, "sarc01", "SARC RC2016A5 #1")
+ ROMX_LOAD( "3sam002.bin", 0x10000, 0x10000, CRC(8d5ef8e8) SHA1(5ca2b36d5bee2870f894984909aa2013b5c4d6cf), ROM_BIOS(1))
+ // 2: BIOS-String: X0-0100-001437-00101111-060692-M396F-0 - CPU: 386SX-40 (ALI M1386SX A1P)
+ ROM_SYSTEM_BIOS(2, "sarc02", "SARC RC2016A5 #2")
+ ROMX_LOAD( "3sam003.bin", 0x10000, 0x10000, CRC(95ea08d8) SHA1(812e8488ad63ca24250e245a2f0273f1d1703fc3), ROM_BIOS(2))
+ROM_END
+
+
+// ***** 386 motherboards using the SIS Rabbit : 85C310 / 85C320 / 85C330 / 85C206 chipset
+
+// ASUS ISA-386C - BIOS : AMI 05/05/1991, on a 27C512 type EPROM (64KB)
+// BIOS-String : 30-0105-001292-00101111-050591-SISDFC-386 - // ISA8: 2, ISA16:5, ISA16/Memory: 1
+ROM_START( isa386c )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "asus_isa-386c_bios.bin", 0x10000, 0x10000, CRC(55e6d1bb) SHA1(e1ac490a30f63b6e4d6d9d0fbaea3d132b8ff053))
+ROM_END
+
+// Chaintech 333SC - Chipset: UMC UM82C206L, three smaller SiS chips (unreadable, probably SiS Rabbit)
+// CPU/FPU present - BIOS: AMI 386 BIOS - Keyboard-BIOS: AMI
+// BIOS-String: ESIS-1128-040990-K0 - ISA8: 2, ISA16: 6 - OSC: 14.31818, 66.000MHz
+ROM_START( chn333sc )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "bios.bin", 0x10000, 0x10000, CRC(f8b2b0bc) SHA1(2799cce621b93bf38b04deeb419d25a73f7416f4))
+ROM_END
+
+ROM_START( sisrabb )
+ ROM_REGION(0x20000, "bios", 0)
+ // BIOS-String: 30-0000-D01128-00101111-070791-SISD-0
+ ROM_LOAD( "3sim001.bin", 0x10000, 0x10000, CRC(2982f552) SHA1(f1849c207d8c802faaf8ef628f88b28256e7fb31))
+ROM_END
+
+
+// ***** 386 Motherboards using the Symphony SL82C362 SL82C461 SL82C465 chipset
+
+// 386 SC Rev A2 - BIOS: AMI 386 BIOS Ser.#: ZZ006975, BIOS-String: 30-0200-DF1211-00101111-042591-SYMP-0 / 386DX BIOS for SYMLABS SL82C360 - Keyboard-BIOS: AMI #Z357365
+ROM_START( 386sc ) // CPU: unreadable, FPU: Cyrix 387DX-25 - OSC: 40.000MHz, 14.31818 - ISA8: 1, ISA16: 7
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "386_sc_symphony.bin", 0x10000, 0x10000, CRC(fabe369c) SHA1(211ff63dd874c273135d1427db3562d752c2bade))
+ROM_END
+
+// BIOS-String: 20-0200-DF1121-00101111-102591-SYM_386B-0 / 386DX/SX (S1A.P)
+ // ROM_SYSTEM_BIOS(4, "386sc2c", "386-SC-2C") // Chipset: SYMPHONY SL82C362, SL82C461, SL82C465
+ROM_START( 386sc2c )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "386-sc-2c_ami_za492668.bin", 0x10000, 0x10000, CRC(b408eeb7) SHA1(cf1974492119e1aae623fa366d5760343e827e52))
+ROM_END
+
+
+// ***** 386 Motherboards using the UM82C491F chipset
+
+ROM_START( um82c491f )
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: TAM/33/40-U2 - BIOS: AMI S/NO. OA 242412 - BIOS-String: 40-0102-001105-00101111-040493-UMC491F-0 / TAM/33,40-U2, 08/11/1993
+ // ISA8: 1, ISA16: 5 - OSC: 80.000MHz, 14.31818
+ ROM_SYSTEM_BIOS(0, "tam3340u2", "TAM/33/40-U2")
+ ROMX_LOAD( "tam_umc491f.bin", 0x10000, 0x10000, CRC(718890d5) SHA1(52336cfc7cd0f0f51799c999cefcfed2b2942211), ROM_BIOS(0))
+ // 1: Board is only marked "rev.0.3, looks like 386GRN - CPU: AMD AM386DX-40 - OSC: 14.31818 - ISA8: 1, ISA16: 5
+ // Chipset: UMC UM82C491F - BIOS-String: 08/30/93-UMC-491-214X2000-OO - BIOS: Award 386 D2026361 - Keyboard BIOS: JETkey V3.0
+ // additional info from chukaev.ru54.com: REV:0.4 board has JETkey V5.0 keyboard BIOS, uses same motherboard BIOS
+ ROM_SYSTEM_BIOS( 1, "386grn", "386GRN-like board rev.03")
+ ROMX_LOAD( "386dx40-27c512.bin", 0x10000, 0x10000, CRC(692a4d52) SHA1(7970a05586eacfe4bfdc575b17bbbfb7ff1c86b0), ROM_BIOS(1))
+ // 2: BIOS: AMI; 04/04/93 - CPU: 386DX-40 - BIOS-String: 40-0102-001277-00101111-040493-UMC491F-0
+ ROM_SYSTEM_BIOS( 2, "491f01", "UM82C491F #1")
+ ROMX_LOAD( "3umm005.bin", 0x10000, 0x10000, CRC(032e78f2) SHA1(5271c4362284ec87840b3fb23542506a72a328c2), ROM_BIOS(2))
+ // 3: BIOS-String: 08/30/93-UMC-491-214X2000-OO / CACHE 386/486 SYSTEM BIOS
+ ROM_SYSTEM_BIOS( 3, "491f02", "UM82C491F #2")
+ ROMX_LOAD( "3umw007.bin", 0x10000, 0x10000, CRC(d82c9bef) SHA1(36e8d1c7629642cbcc337721eef1c73f1f0ed92c), ROM_BIOS(3))
+ROM_END
+
+
+// ***** 386 Motherboards using the UMC UM82C493F/UM82C491F chipset or badge engineered varieties (BIOTEQ)
+
+ // BIOS-String: 40-0100-001494-00101111-080893-UMC491F-0 / 11/26/93 - CPU: TX486DLC/E-40GA, IIT 4C87DLC-40 - ISA8: 1, ISA16: 5 - BIOS: AMI; 208808; 08/08/93
+ROM_START( um82c493f )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_SYSTEM_BIOS( 0, "493f01", "UM82C493F #1" )
+ ROMX_LOAD( "3umm007.bin", 0x10000, 0x10000, CRC(8116555a) SHA1(8f056a83de60373ed26026a226eead19868abeca), ROM_BIOS(0))
+ROM_END
+
+// 0: 386-4N-D04A
+ROM_START( 4nd04a )
+ ROM_REGION(0x20000, "bios", 0)
+ // BIOS-String: 40-0102-428003-00101111-080893-UMC491F-0 - UMC 4913 386 IVN 1.0 1993.12.22
+ // Chipset: UMC UM82C493F, UM82C491F
+ ROM_SYSTEM_BIOS( 0, "ivn10", "386-4N-D04A IVN 1.0" )
+ ROMX_LOAD( "386-4n-d04a.bin", 0x10000, 0x10000, CRC(cf386b9c) SHA1(6fd4303e4f0d2ed75d4e7f36dc855037b1779e64), ROM_BIOS(0))
+ // 1: 386-4N-D04A PCB V2.0 - BIOS-String: 40-0103-428003-00101111-080893-UMC491F-0 / UMC 4913 386 IVN 1.1 1994.1.31
+ ROM_SYSTEM_BIOS( 1, "ivn11", "386-4N-D04A IVN 1.1" )
+ ROMX_LOAD( "3umm006.bin", 0x10000, 0x10000, CRC(4056104d) SHA1(5e639e6766dc9a19296358e9a64a76ad57fc733a), ROM_BIOS(1))
+ // 2: TK-82C491/493/386-4N-D04 - BIOS-String: (2c4x2u01) U-BOARD / 11/09/93-UMC-491-2C4X2U01-00 - ISA8: 1, ISA16: 5
+ ROM_SYSTEM_BIOS( 2, "awa110993", "AWARD 11/09/93") // BIOS: Award; 386 BIOS; A3384454
+ ROMX_LOAD( "3umw002.bin", 0x10000, 0x10000, CRC(2c510e81) SHA1(a12c672ec418cc4cd14482901f8ba34c50f319f5), ROM_BIOS(2))
+ // 3: TK-82C491/493/386-4N-D04 - BIOS-String: 01/14/94-UMC-491-2C4X2U01-00 / U-BOARD
+ ROM_SYSTEM_BIOS( 3, "awa011494", "AWARD 01/14/94")
+ ROMX_LOAD( "3umw003.bin", 0x10000, 0x10000, CRC(64067839) SHA1(4ae3462619ef8da67f74d85ee7ab44bdb49a5728), ROM_BIOS(3))
+ROM_END
+
+// Biostar MB-1333/40PMB-CH, rev B.3 - Chipset: "Bioteq" [Atmel] AT40391, "Bioteq" G392 [Atmel AT40392], C&T P82C206
+// BIOS: AMI 386 BIOS PLUS - Keyboard-BIOS: AMI - CPU: AM386-DX40 - OSC: 14.31818, <unreadable>
+ROM_START( mb133340 )
+ ROM_REGION(0x20000, "bios", 0) // the OPWB3 string also exists in the BIOS versions meant for the OPTI 82C391/392 chipsets
+ // 0: BIOS-String: 30-0100-D61223-00101111-050591-OPWB3/B-0 / MB-1340PMA-CH, MB-1340PMB-CH, MB-1340PMD-CH, MB-1340PME-CH for B version..
+ ROM_SYSTEM_BIOS(0, "opwb3b", "MB-1333/40PMB-CH OPWB3-B")
+ ROMX_LOAD( "opwb3b.bin", 0x10000, 0x10000, CRC(c9cf46dd) SHA1(c9e58cb6fed770d92892672d0a910d448c507ac1), ROM_BIOS(0))
+ // 1: BIOS-String: 30-0201-D61223-00101111-050591-OPWB-0 / MB-1333PMA-CH, MB-1333PMB-CH, MB-1333PMD-CH, MB-1333PME-CH
+ ROM_SYSTEM_BIOS(1, "opwb", "MB-1333/40PMB-CH OPWB")
+ ROMX_LOAD( "opwb.bin", 0x10000, 0x10000, CRC(9532c6d1) SHA1(48e889ed61921643147fea95224bcf42bb6e82fa), ROM_BIOS(1))
+ // 2: BIOS-String: 40-0100-001223-00101111-040493-UMC491F-0 / MB-1333/40UCG-A, MB-1333/40UCG-B / MB-1433-40UDV-A, MB-1433/50UCV-C, MB6433/50UPC-A for EXT. RTC
+ ROM_SYSTEM_BIOS( 2, "m21", "M21" )
+ ROMX_LOAD( "3bim001.bin", 0x10000, 0x10000, CRC(9ea0ce67) SHA1(cb55a61cd43705a54e4109d816924c8820f78ae5), ROM_BIOS(2))
+ROM_END
+
+
+// ***** motherboards using the UMC UM82C481AF, UM82C482A/B/F, 82C206F chipset
+
+// QD-U386DX VER 1.0 - CPU/FPU: i386DX-33, IIT 3C87-33 - ISA8:2, ISA16: 5 - BIOS: AMI 386DX ISA BIOS (AA0119183)
+// BIOS-String: 30-0200-428003-10101111-070791-UMC480A-F
+ROM_START( qdu386dx ) // three short beeps (base 64k RAM failure)
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "3umm001.bin", 0x10000, 0x10000, CRC(5b6a7d0b) SHA1(02696eaaa5dd21fe4b3b39629aa926ae87a9a2bd))
+ROM_END
+
+// ASUS ISA-386U30 REV.2.2 - Chipset: UMC UM82C481AF, UM82C482AF, 82C206F - CPU: AM386DX-40 - OSC: 14.31818MHz, 32.000MHz - ISA8: 1, ISA16: 6
+// BIOS: AMI 386DX BIOS AA0974582 - BIOS-String: - Keyboard-BIOS: AMI U2518640 MEGA-KB-F-WP
+ROM_START( isa386u30 )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "386-isa-386u30.bin", 0x10000, 0x10000, CRC(6d45a044) SHA1(63c06568f9db5ce12dc8dd0fb1ad1009a9fb24f6))
+ROM_END
+
+// Elitegroup FX-3000 REV:1.0 - Chipset: UMC UM82C481BF, UM82C482AF, UM82C206F - ISA16: 6
+ROM_START( ecsfx3000 )
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: BIOS-String: 40-0100-001131-00101111-121291-UMCAUTO-0 / FX3000 V1.3 12-17-92 - Keyboard BIOS: AMI/Intel - BIOS: FX3000-014 - CPU: AM386DX-40
+ ROM_SYSTEM_BIOS(0, "v13", "V1.3")
+ ROMX_LOAD( "fx-3000-bios.bin", 0x10000, 0x10000, CRC(f93c9563) SHA1(46a71e7fbc9238dd470d6d5ce3bc1e057f3aae24), ROM_BIOS(0))
+ // 1: BIOS-String: 30-0500-D01131-00101111-070791-UMCWB-0 / FE386 V1.1 12-03-92 - Keyboard-BIOS: Lance LT38C41 - BIOS: AMI-1131 / S/NO. E-92488183 / FE 386-012 - CPU: Cyrix 486DLC-33GP FPU: Cyrix Cx87DLC-33QP - OSC: 66.667MHz, 14.31818
+ ROM_SYSTEM_BIOS(1, "v11", "V1.1")
+ ROMX_LOAD( "486-fx3000.bin", 0x10000, 0x10000, CRC(af303f08) SHA1(65dfa2541d2b08746f91012a2ae0121636402aac), ROM_BIOS(1))
+ROM_END
+
+ROM_START( um82c481af )
+ ROM_REGION(0x20000, "bios", 0) // resets continuously
+ // 0: BIOS: Microid Research; 02/26/93 - BIOS-String: MR BIOS (r) V1.44
+ ROM_SYSTEM_BIOS(0, "mr144", "MR BIOS V1.44")
+ ROMX_LOAD( "3umr001.bin", 0x10000, 0x10000, CRC(466a115e) SHA1(077d797c653528062f1c87b03c608427c35c5505), ROM_BIOS(0))
+ // 1: BIOS-String: 40-0100-001266-00101111-121291-UMCAUTO-0 - 3DIUD-1.2
+ // Chipset: // UMC UM92C206F, UM82C482AF, UM82C481BF - MB manufacturer according to BIOS is Modula Tech Co
+ ROM_SYSTEM_BIOS(1, "3diud", "386 UMC 3DIUD")
+ ROMX_LOAD( "386-umc-3flud.bin", 0x10000, 0x10000, CRC(2e795a01) SHA1(02e9e2871c1c1a542f44ab5eef66aee4b04225c1), ROM_BIOS(1))
+ROM_END
+
//**************************************************************************
// 80386 SX and DX Laptop/Notebook
//**************************************************************************
+// Sanyo MBC-18NB notebook - no display
+ROM_START( mbc18nb )
+ ROM_REGION( 0x20000, "bios", 0)
+ ROM_LOAD( "sanyo_18nb.bin", 0x00000, 0x20000, CRC(64e283cf) SHA1(85ce4074c23b388d66e53cc83a8535bf7a2daf1f))
+ROM_END
+
// Siemens-Nixdorf PCD-3Nsx notebook
// Intel NG680386SX-16, DP8473V, CHIPS F82C601, DS??87, unknown QFP100, ADC0833BCN (on PCU sub)
// Microcontrollers: N8042AH (KBC), N80C51BH (KBE)
@@ -2493,6 +3100,7 @@ ROM_START( t2000sx )
ROM_LOAD( "014d.ic9", 0x00000, 0x20000, CRC(e9010b02) SHA1(75688fc8e222640fa22bcc90343c6966fe0da87f))
ROM_END
+
// Triumph-Adler Walkstation 386 SX - German version of the Olivetti S20
// VLSI VL82C320 + VL82C331; DP8473V
ROM_START( walk386sx )
@@ -2561,42 +3169,57 @@ ROM_START( at486 )
// 7: BIOS-String: 11/20/94-VT82C486A-214L2000-00 / Version 3.06G (11/25/94) - OSC: 24.0L3P - ISA16:3, ISA/VL: 2
ROM_SYSTEM_BIOS(7, "ficgiovt", "FIC 486-GIO-VT 3.06G") // 1994-11-20 - Chipset: Winbond W83757AF, W83758P, VIA VT82C486A, VT8255N, VT82C482
ROMX_LOAD( "306gcd00.awd", 0x10000, 0x10000, CRC(75f3ded4) SHA1(999d4b58204e0b0f33262d0613c855b528bf9597), ROM_BIOS(7))
- // 8: BIOS-String: 07/06/VT82C486A-214L2000-00 / Version 3.26G - ISA8: 1, ISA16: 3, ISA/VL: 2
- ROM_SYSTEM_BIOS(8, "ficgiovt2_326", "FIC 486-GIO-VT2 3.26G") // Chipset: Winbond W83758P, Winbond W83757AF, VIA VT82C482, VT82C486A, VT82C461
- ROMX_LOAD( "326g1c00.awd", 0x10000, 0x10000, CRC(2e729ab5) SHA1(b713f97fa0e0b62856dab917f417f5b21020b354), ROM_BIOS(8))
- // 9: BIOS-String: 06/19/95-VT82C486A-214L2000-00 / Version VBS1.08H 486-GIO-VT2
- ROM_SYSTEM_BIOS(9, "486_gio_vt2","VBS1.08H 486-GVT-2") // Chipset: VIA VT82C486A, VT82C482 - ISA16: 4, ISA/VL: 2
- ROMX_LOAD( "award_486_gio_vt2.bin", 0x10000, 0x10000, CRC(58d7c7f9) SHA1(097f15ec2bd672cb3f1763298ca802c7ff26021f), ROM_BIOS(9)) // Vobis version, Highscreen boot logo
- // 10: BIOS-String: 07/17/97-VT82C486A-214L2000-00 / Version 3.276
- ROM_SYSTEM_BIOS(10, "ficgiovt2_3276", "FIC 486-GIO-VT2 3.276")
- ROMX_LOAD( "32760000.bin", 0x10000, 0x10000, CRC(ad179128) SHA1(595f67ba4a1c8eb5e118d75bf657fff3803dcf4f), ROM_BIOS(10))
- // 11: BIOS-String: 11/02/94-VT82C486A-214L2000-00 Version 3.07G - ISA8: 1, ISA16: 4, ISA/VL: 2
- ROM_SYSTEM_BIOS(11, "ficgvt2", "FIC 486-GVT-2 3.07G") // Chipset: VIA VT82C486A, VT82C482, VIA VT8255N
- ROMX_LOAD( "3073.bin", 0x10000, 0x10000, CRC(a6723863) SHA1(ee93a2f1ec84a3d67e267d0a490029f9165f1533), ROM_BIOS(11))
- // 12: BIOS-String: 06/27/95-VT82C505-2A4L4000-00 / Version 5.15S - Chipset: S3 Trio64, FDC 37665GT, VT82C496G, VT82C406MV
- ROM_SYSTEM_BIOS(12, "ficgpak2", "FIC 486-PAK-2 5.15S") /* includes Phoenix S3 TRIO64 Enhanced VGA BIOS 1.4-01 */
- ROMX_LOAD( "515sbd8a.awd", 0x00000, 0x20000, CRC(778247e1) SHA1(07d8f0f2464abf507be1e8dfa06cd88737782411), ROM_BIOS(12))
- // 13: runs into Award BootBlock BIOS - Chipset: VIA VT82C505, VT82C416, VT82C496G, Winbond W83787F
- ROM_SYSTEM_BIOS(13, "ficpio3g7", "FIC 486-PIO-3 1.15G705") // pnp - ISA16: 4, PCI: 3
- ROMX_LOAD( "115g705.awd", 0x00000, 0x20000, CRC(ddb1544a) SHA1(d165c9ecdc9397789abddfe0fef69fdf954fa41b), ROM_BIOS(13))
- // 14 runs into Award BootBlock BIOS
- ROM_SYSTEM_BIOS(14, "ficpio3g1", "FIC 486-PIO-3 1.15G105") /* non-pnp */
- ROMX_LOAD( "115g105.awd", 0x00000, 0x20000, CRC(b327eb83) SHA1(9e1ff53e07ca035d8d43951bac345fec7131678d), ROM_BIOS(14))
- // 15 runs into Award BootBlock BIOS
- ROM_SYSTEM_BIOS(15, "ficpos", "FIC 486-POS")
- ROMX_LOAD( "116di6b7.bin", 0x00000, 0x20000, CRC(d1d84616) SHA1(2f2b27ce100cf784260d8e155b48db8cfbc63285), ROM_BIOS(15))
- // 16: BIOS-String: 06/27/95-VT82C505-2A4L4000-00 / Version 5.15 / Chipset: VIA VT82C496G PC/AT
- ROM_SYSTEM_BIOS(16, "ficpvt", "FIC 486-PVT 5.15") // ISA16: 6, ISA/VL: 2
- ROMX_LOAD( "5150eef3.awd", 0x00000, 0x20000, CRC(eb35785d) SHA1(1e601bc8da73f22f11effe9cdf5a84d52576142b), ROM_BIOS(16))
- // 17: BIOS-String: 10/05/95-VT82C505-2A4L4000-00 / Version 5.162W2(PCTIO)
- ROM_SYSTEM_BIOS(17, "ficpvtio", "FIC 486-PVT-IO 5.162W2") // Chipset: VT82C406MV, VT82C496G, W83777/83787F, W83758P
- ROMX_LOAD( "5162cf37.awd", 0x00000, 0x20000, CRC(378d813d) SHA1(aa674eff5b972b31924941534c3c988f6f78dc93), ROM_BIOS(17))
- // 18: BIOS-String: 40-0401-428003-00101111-111192-OP495SLC-0 / PX486DX33/50P3 IVN 1.0 25/06/1993
- ROM_SYSTEM_BIOS(18, "qdi", "QDI PX486DX33/50P3") // OPTi-SLC (82C495SLC & 82C206) - ISA8: 1, ISA16: 3, ISA/VL: 3
- ROMX_LOAD( "qdi_px486.u23", 0x10000, 0x10000, CRC(c80ecfb6) SHA1(34cc9ef68ff719cd0771297bf184efa83a805f3e), ROM_BIOS(18))
- // 19: BIOS-String: 40-00AG-001247-00101111-060692-SIS3486-0 / AV4 ISA/VL-BUS SYSTEM BIOS / Chipset: SIS 85C460ATQ
- ROM_SYSTEM_BIOS(19, "ava4529j", "AVA4529J") // this is a board with two VLB slots
- ROMX_LOAD("amibios_486dx_isa_bios_aa4025963.bin", 0x10000, 0x10000, CRC(65558d9e) SHA1(2e2840665d069112a2c7169afec687ad03449295), ROM_BIOS(19))
+ // 8: BIOS-String: 11/02/94-VT82C486A-214L2000-00 Version 3.07G - ISA8: 1, ISA16: 4, ISA/VL: 2
+ ROM_SYSTEM_BIOS(8, "ficgvt2", "FIC 486-GVT-2 3.07G") // Chipset: VIA VT82C486A, VT82C482, VIA VT8255N
+ ROMX_LOAD( "3073.bin", 0x10000, 0x10000, CRC(a6723863) SHA1(ee93a2f1ec84a3d67e267d0a490029f9165f1533), ROM_BIOS(8))
+ // 9: BIOS-String: 06/27/95-VT82C505-2A4L4000-00 / Version 5.15S - Chipset: S3 Trio64, FDC 37665GT, VT82C496G, VT82C406MV
+ ROM_SYSTEM_BIOS(9, "ficgpak2", "FIC 486-PAK-2 5.15S") /* includes Phoenix S3 TRIO64 Enhanced VGA BIOS 1.4-01 */
+ ROMX_LOAD( "515sbd8a.awd", 0x00000, 0x20000, CRC(778247e1) SHA1(07d8f0f2464abf507be1e8dfa06cd88737782411), ROM_BIOS(9))
+ // 10: runs into Award BootBlock BIOS - Chipset: VIA VT82C505, VT82C416, VT82C496G, Winbond W83787F
+ ROM_SYSTEM_BIOS(10, "ficpio3g7", "FIC 486-PIO-3 1.15G705") // pnp - ISA16: 4, PCI: 3
+ ROMX_LOAD( "115g705.awd", 0x00000, 0x20000, CRC(ddb1544a) SHA1(d165c9ecdc9397789abddfe0fef69fdf954fa41b), ROM_BIOS(10))
+ // 11: runs into Award BootBlock BIOS
+ ROM_SYSTEM_BIOS(11, "ficpio3g1", "FIC 486-PIO-3 1.15G105") /* non-pnp */
+ ROMX_LOAD( "115g105.awd", 0x00000, 0x20000, CRC(b327eb83) SHA1(9e1ff53e07ca035d8d43951bac345fec7131678d), ROM_BIOS(11))
+ // 12: runs into Award BootBlock BIOS
+ ROM_SYSTEM_BIOS(12, "ficpos", "FIC 486-POS")
+ ROMX_LOAD( "116di6b7.bin", 0x00000, 0x20000, CRC(d1d84616) SHA1(2f2b27ce100cf784260d8e155b48db8cfbc63285), ROM_BIOS(12))
+ // 13: BIOS-String: 06/27/95-VT82C505-2A4L4000-00 / Version 5.15 / Chipset: VIA VT82C496G PC/AT
+ ROM_SYSTEM_BIOS(13, "ficpvt", "FIC 486-PVT 5.15") // ISA16: 6, ISA/VL: 2
+ ROMX_LOAD( "5150eef3.awd", 0x00000, 0x20000, CRC(eb35785d) SHA1(1e601bc8da73f22f11effe9cdf5a84d52576142b), ROM_BIOS(13))
+ // 14: BIOS-String: 10/05/95-VT82C505-2A4L4000-00 / Version 5.162W2(PCTIO)
+ ROM_SYSTEM_BIOS(14, "ficpvtio", "FIC 486-PVT-IO 5.162W2") // Chipset: VT82C406MV, VT82C496G, W83777/83787F, W83758P
+ ROMX_LOAD( "5162cf37.awd", 0x00000, 0x20000, CRC(378d813d) SHA1(aa674eff5b972b31924941534c3c988f6f78dc93), ROM_BIOS(14))
+ // 15: BIOS-String: 40-00AG-001247-00101111-060692-SIS3486-0 / AV4 ISA/VL-BUS SYSTEM BIOS / Chipset: SIS 85C460ATQ
+ ROM_SYSTEM_BIOS(15, "ava4529j", "AVA4529J") // this is a board with two VLB slots
+ ROMX_LOAD("amibios_486dx_isa_bios_aa4025963.bin", 0x10000, 0x10000, CRC(65558d9e) SHA1(2e2840665d069112a2c7169afec687ad03449295), ROM_BIOS(15))
+ // 16: BIOS-String: 40-0200-001291-00101111-111192-OPT495SX-0 / 34C-OP-WBp-25/33/40/50-D5-ZZ
+ // Chipset: OPTi 82C495SX - CPU: 486DX - BIOS: AMI 486DX ISA BIOS AA7524842 - ISA8: 1, ISA16: 4, ISA16/VL: 2
+ ROM_SYSTEM_BIOS(16, "pat48pv", "PAT-48PV")
+ ROMX_LOAD("pat48pv.bin", 0x10000, 0x10000, CRC(69e457c4) SHA1(7015b2bccb10ce6e1ad6e992eac785f9d59a7a24), ROM_BIOS(16))
+ // 17: MR BIOS for the 82C895 chipset - MR BIOS (r) V2.02
+ ROM_SYSTEM_BIOS(17, "82c895", "82C895")
+ ROMX_LOAD("opt895mr.mr", 0x10000, 0x10000, CRC(516cb091) SHA1(4c5b51cd05974001da4b764b4b14987657770a45), ROM_BIOS(17))
+ // 18: Morse P1 V3.10 - CPU: 486DX - ISA8: 2, ISA16: 6 - Chipset: Morse 91A401A- Award Modular BIOS v4.20 / V3.00 - KEYBOARD ERROR OR NO KEYBOARD PRESENT
+ ROM_SYSTEM_BIOS(18, "p1", "P1")
+ ROMX_LOAD("morse_p1.bin", 0x10000, 0x10000, CRC(23d99406) SHA1(b58bbf1f66af7ed56b5233cbe2eb5ab623cf9420), ROM_BIOS(18))
+ // 19: Chipset: OPTi 82C392, 82C493, UMC UM82C206L - CPU: i486DX-33, FPU socket provided - OSC: 34.000MHz, 14.31818 - Keyboard-BIOS: AMI/Intel P8942AHP
+ // BIOS: AMI 486 BIOS Z600436 - BIOS-String: - 40-0101-DK1343-00101111-00101111-060691-OPWBSX-0 - ISA8: 2, ISA16: 6
+ ROM_SYSTEM_BIOS( 19, "82c493", "82C493")
+ ROMX_LOAD("486-920087335.bin", 0x10000, 0x10000, CRC(38571ffe) SHA1(aa6048213139c88901aca9cd38251a3937b6e52d), ROM_BIOS(19))
+ // 20: Chipset: SiS 85C206 CONTAQ 82C592 82C591 - CPU/FPU: 486, socket provided - OSC: 33.333MHz, 14.31818 - BIOS: AMI 486DX ISA BIOS AA0083611 (28pin)
+ // BIOS-String: 40-0700-D01508-00101111-070791-CTQ 486-0 - ISA8: 2, ISA16: 6
+ ROM_SYSTEM_BIOS(20, "82c591", "82C591")
+ ROMX_LOAD("486-contaq.bin", 0x10000, 0x10000, CRC(e5d2cf16) SHA1(1357a964ef78eaad6894dcc9dce62be50cdf6df5), ROM_BIOS(20))
+ // 21: Chipset: PCCHIPS CHIP 16 (9430-AS), CHIP 18 (9432-AS) - CPU: i486DX2-66 - BIOS: AWARD (28pin) - ISA16: 4, ISA16/VL: 3 - OSC: 14.31818MHz
+ // BIOS-String: 07/13/94--2C4X6H01-00 / Release 07/15/94'
+ ROM_SYSTEM_BIOS(21, "chips", "Chips")
+ ROMX_LOAD("486-pcchips.bin", 0x10000, 0x10000, CRC(4e49eca1) SHA1(2343ca9f4760037eb2ef6e7b011b9690e542d6ea), ROM_BIOS(21))
+ // 22: CAM/33(50)-P8 M458(A)P80 - Chipset: Opti 82C495SX, F82C206Q 82C392SX - CPU: 486DX-33 (solder pads for 486sx and 486DX) - OSC: 14.318MHz, 33.000MHz
+ // Keyboard-BIOS: AMI Keyboard BIOS PLUS A317473 - BIOS: AMI 486 BIOS PLUS 214097 (28pin) - RAM: SIMM30x8 - Cache: 1xIS61C256A, 8xUM61256BK-25 - ISA8: 1, ISA16: 6
+ // BIOS-String: X0-0101-001105-00101111-060692-495SX_A-0 / 486DX/SX CAM/33,50-P8, CPM/25,33-P8, 12/14/1992
+ ROM_SYSTEM_BIOS(22, "cam33", "CAM/33")
+ ROMX_LOAD("486-cam.bin", 0x10000, 0x10000, CRC(d36a13ea) SHA1(14db51dbcf8decf1cb333c57a36971ef578c89b4), ROM_BIOS(22))
ROM_END
@@ -2604,27 +3227,134 @@ ROM_END
// 80486 motherboard
//**************************************************************************
-// PC-Chips M919 - this motherboard showcased the issues that gave PC-Chips its bad name, it was available with fake cache, a proprietary cache socket or with fully operational cache
-// Chipset: UMC UM8881F/9714-EYS and UM8886BF/9652-FXS (V3.4B/F), UMC UM8886BF/9618-FXS and UM8881F/9622-EYS (Rev. 1.5)
-// http://th2chips.freeservers.com/m919/ this mentions that the BIOS requires a flashable chip
-ROM_START( pccm919 )
+// QDI V4P895P3/SMT V5.0 - Chipset: Opti 82C895 82C602A - CPU: Am486DX2-66 - ISA8: 1, ISA16: 3, ISA16/VL: 3
+// RAM: 4xSIMM30, 2xSIMM72, Cache: 8xUM61256FK-15 - BIOS: AMI 486DX ISA BIOS Ac0928698 (28pin in a 32pin socket) - Keyboard-BIOS: AMIKEY-2
+ROM_START( v4p895p3 ) // no display
ROM_REGION(0x20000, "bios", 0)
- ROM_SYSTEM_BIOS(0, "m919v1", "PC-Chips M919 v1")
- ROMX_LOAD( "9190914s.rom", 0x00000, 0x20000, CRC(bb18ff2d) SHA1(530d13df21f2d483ec0dddda44fb4fe7e29ec040), ROM_BIOS(0))
- ROM_SYSTEM_BIOS(1, "m919v2", "PC-Chips M919 v2")
- ROMX_LOAD( "9191016s.rom", 0x00000, 0x20000, CRC(2a2125a6) SHA1(753061ae6f80c0ca42d1af91aada657910feae18), ROM_BIOS(1))
+ ROM_LOAD( "486-v4p895p3-smt.bin", 0x10000, 0x10000, CRC(683f8470) SHA1(eca1c21a8f8c57389d9fdf1cd76d2dec0928524a))
+ROM_END
+
+// Peacock PCK 486 DX DOC 50-60064-00 - Chipset: Symphony SL82C465 SL82C461 SL82C362 Chips F82C721 - CPU: i486DX-33, FPU socket privoded
+// BIOS: AMI 486DX ISA BIOS AA3364567 - Keyboard-BIOS: AMI/Intel P8942AHP - On board: 2xser, Floppy, IDE, par - OSC: 33.000MHz
+// BIOS-String: 40-0100-806294-00101111-060692-SYMP-0 / Peacock Computer 486 BIOS Rev. 2.0 / 30.11.92 - ISA16: 6
+ROM_START( pck486dx )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "pck486dx.bin", 0x10000, 0x10000, CRC(d0edeba8) SHA1(b5b9492f32e35764c802be2b05a387a9b3aa7989))
+ROM_END
+
+// GENOA TurboExpress 486 VL ASY 01-00302 - Chipset: SiS 85C407 85C461 - CPU: Socket3 - OSC: 14.31818MHz - ISA16: 4, ISA16/VL: 3 - BIOS: AMI 486DX ISA BIOS AB0562153 (28pin)
+// BIOS-String: 40-0100-006156-00101111-080893-SIS461-0 / GENOA TurboExpress 486VL - 3 (Ver. C) - Keyboard-BIOS: AMIKEY
+ROM_START( gete486vl )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "486-genoa_vlb.bin", 0x10000, 0x10000, CRC(9be0f329) SHA1(3b1adedd6aad40c623757e4976e0dcadb253f255))
+ROM_END
+
+// QDI PX486P3 - Chipset: OPTi 82C495SLC, F82C206 - CPU: 486 - BIOS: 11/11/92 AMI (28pin)
+// Keyboard-BIOS: AMIKEY - ISA8: 1, ISA16: 3, ISA16/VL: 3 (one marked MASTER/SLAVE, two marked SLAVE)
+ROM_START( px486p3 )
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: BIOS-String: 40-0402-428003-00101111-111192-OP495SLC-0 / PX486DX33/50P3 IVN 2.0 19/11/1993
+ ROM_SYSTEM_BIOS(0, "ivn20", "IVN 2.0")
+ ROM_LOAD( "px486p3.bin", 0x10000, 0x10000, CRC(4d717aad) SHA1(2d84cf197845d58781f77e4d539ca994fd8733c8))
+ // 1: BIOS-String: 40-0401-428003-00101111-111192-OP495SLC-0 / PX486DX33/50P3 IVN 1.0 25/06/1993
+ ROM_SYSTEM_BIOS(1, "ivn10", "IVN 1.0")
+ ROMX_LOAD( "qdi_px486.u23", 0x10000, 0x10000, CRC(c80ecfb6) SHA1(34cc9ef68ff719cd0771297bf184efa83a805f3e), ROM_BIOS(1))
+ROM_END
+
+// UNICHIP 486 WB 4407 REV 1.0 - Chipset: KS83C206Q UNICHIP U4800-VLX - BIOS: AMI 486 ISA BIOS AA6562949, 28pin - Keyboard-BIOS: AMI 2050778
+// BIOS-String: 40-0200-001107-0010111-111192-U4800VLX-0 / 4407 UNICHIP BIOS VER 1.0 - OSC: 14.31818 - ISA16: 4, ISA16/VL: 3
+ROM_START( uniwb4407 )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "unichip_486_wb_4407.bin", 0x10000, 0x10000, CRC(91237686) SHA1(7db14451cc3e00a2273a453152a817bccbdfb10e))
+ROM_END
+
+// ASUS ISA-486SV2 - Chipset: SiS 85C461 - BIOS: AMI 486DX ISA BIOS AA7892378 28pin - Keyboard-BIOS: Intel/AMI
+// BIOS-String: 40-110A-001292-00101111-111192-I486SI-0 - ISA16: 5, ISA16/VL: 2 - CPU: 486DX in a blue socket (overdrive ready)
+ROM_START( a486sv2 )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "486-asus isa-486sv2.bin", 0x10000, 0x10000, CRC(de925130) SHA1(2e3db7a1d4645082290d6303a16446af2959f34a))
+ROM_END
+
+// FIC 486-GIO-VT2 - Chipset: Winbond W83758P, Winbond W83757AF, VIA VT82C482, VT82C486A, VT82C461 - ISA8: 1, ISA16: 3, ISA/VL: 2
+// On board: Game, 2xIDE, 2xser, par, Floppy
+ROM_START( ficgiovt2 )
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: BIOS-String: 07/06/VT82C486A-214L2000-00 / Version 3.26G
+ ROM_SYSTEM_BIOS(0, "ficgiovt2_326", "FIC 486-GIO-VT2 3.26G")
+ ROMX_LOAD( "326g1c00.awd", 0x10000, 0x10000, CRC(2e729ab5) SHA1(b713f97fa0e0b62856dab917f417f5b21020b354), ROM_BIOS(0))
+ // 1: BIOS-String: 06/19/95-VT82C486A-214L2000-00 / Version VBS1.08H 486-GIO-VT2
+ ROM_SYSTEM_BIOS(1, "vt2vbs108","VBS1.08H 486-GVT-2")
+ ROMX_LOAD( "award_486_gio_vt2.bin", 0x10000, 0x10000, CRC(58d7c7f9) SHA1(097f15ec2bd672cb3f1763298ca802c7ff26021f), ROM_BIOS(1)) // Vobis version, Highscreen boot logo
+ // 2: BIOS-String: 07/17/97-VT82C486A-214L2000-00 / Version 3.276
+ ROM_SYSTEM_BIOS(2, "ficgiovt2_3276", "FIC 486-GIO-VT2 3.276")
+ ROMX_LOAD( "32760000.bin", 0x10000, 0x10000, CRC(ad179128) SHA1(595f67ba4a1c8eb5e118d75bf657fff3803dcf4f), ROM_BIOS(2))
+ // 3: BIOS-String: 08/30/94-VT82C486A-214L2000-00 / Version VBS1.04 486-GIO-VT2 - Keyboard-BIOS: VT82C42N
+ ROM_SYSTEM_BIOS(3, "vt2vbs104","VBS1.04 486-GVT-2")
+ ROMX_LOAD( "486-gio-vt2.bin", 0x10000, 0x10000, CRC(7282133d) SHA1(c78606027eca509cd6d439e4689b8d50753ee80c), ROM_BIOS(3)) // Vobis version, Highscreen boot logo
+ROM_END
+
+// Octek Hawk REV 1.1 - BIOS: AMI AA1481746 486DX ISA BIOS 28pin - Keyboard-BIOS: Intel/AMI - Chipset: OPTi F82C206L, 82C496 - OSC: 66.667MHz, 14.31818MHz
+// BIOS-String: 40-0100-000000-00101111-121291-OPTIDXBB-0 / HAWK -011 - CPU: Intel Overdrive DX2ODPR66 - ISA16: 7
+ROM_START( ochawk )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "hawk.bio", 0x10000, 0x10000, CRC(365b925d) SHA1(3a1776c80540b6878ff79857c2d4e19320a2792a))
+ROM_END
+
+// Abit AB-PW4 - Chipset: Winbond W83C491F, W83C492F (SL82C491 Symphony Wagner) - BIOS/Version: Award D2144079 - CPU: i486sx-25 - ISA8: 1, ISA16: 3, ISA16/VL: 3
+ROM_START( abpw4 )
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: BIOS-String: 03/21/95-Winbond-83C491-2C4J6A11-46 / Award v4.50G / GREEN CACHE 486 VESA SYSTEM BIOS
+ ROM_SYSTEM_BIOS(0, "2c4j6a11", "2C4J6A11-46")
+ ROMX_LOAD( "award_486_bios_d2144079_c1984-1995.bin",0x10000, 0x10000, CRC(c69184da) SHA1(e8a799f9a3eebfd09c1d19a909574fca17fce7a0), ROM_BIOS(0))
+ // 1: BIOS-String: 09/12/95-Winbond-83C491-2C4J6A12-2E
+ ROM_SYSTEM_BIOS(1, "2c4j6a12", "2C4J6A12-2E")
+ ROMX_LOAD( "pw4_2e.bin", 0x10000, 0x10000, CRC(c4aeac4d) SHA1(e58f2e2d5c337f447808535629686dde54c09fab), ROM_BIOS(1))
+ROM_END
+
+// Vintage Sprite SM 486-50USC - Chipset: UM82C491F - BIOS: EPROM/MR-BIOS 1.50 - Keyboard-BIOS: JETkey V3.0
+// CPU: Intel 486DX2-66 - OSC: 33.333000MHz, 14.31818MHz - ISA16: 5, ISA16/VL: 2
+
+ROM_START( sm48650usc ) // constant reset
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "mrbios_1150usc_um82c491f.bin", 0x10000, 0x10000, CRC(b6ef1220) SHA1(94511df49713ec30467c8d9b18eb04e83fa7a809))
+ROM_END
+
+// Auva-Cam-33-P2 = See-Thru Sto486Wb - CPU: 486 - ISA8: 1, ISA16: 7 - Chipset: OPTi 82C392, 82C493, 82C206
+// MR BIOS (tm) V1.30
+ROM_START( sto486wb )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "opti_82c493_486_mr_bios_v130.rom", 0x10000, 0x10000, CRC(350d5495) SHA1(4f771ef5fe627e0556fb28f8972e545a0823a74d))
+ROM_END
+
+// Octek Hippo VL+ - CPU: 486 - BIOS: EPROM/MR - Keyboard-BIOS: MR/Amikey - Chipset: DCA/Octek (label stickers) - ISA16: 3, ISA16/VL: 3
+// MR BIOS (r) V1.52 / 486SLC CPU 28MHz
+ROM_START( ochipvlp )
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: // reset loop
+ ROM_SYSTEM_BIOS( 0, "v152", "V1.52")
+ ROMX_LOAD( "vlmr152.rom", 0x10000, 0x10000, CRC(b4febf98) SHA1(a28ffa20fe772eac5fd149821d5637af63965371), ROM_BIOS(0))
+ // 1: MR BIOS (r) V3.21 2GB support
+ ROM_SYSTEM_BIOS( 1, "v321", "V3.21 with 2GB support")
+ ROMX_LOAD( "v053b407.rom", 0x10000, 0x10000, CRC(415d92b1) SHA1(e5a9f2a677002368d20f1281e2ac3469b19079f9), ROM_BIOS(1))
+ROM_END
+
+// Octek Hippo COM - Chipset: UMC UM82C865F, UM82C863F, UM82C491F - CPU: 486sx - BIOS: EPROM/AMI 486DX ISA BIOS - Keyboard-BIOS: MEGATRENDS MEGA-KB-H-WP / Intel
+// BIOS-String: 40-0102-428003-00101111-080893-UMC491F-0 / U491/3 GREEN 486 MAIN BOARD INV1.1 94.2.21 - ISA16: 4 - On board: 1xIDE, Floppy, Game, 2xserial, 1xparallel
+ROM_START( ochipcom )
+ ROM_REGION( 0x20000, "bios", 0)
+ ROM_LOAD( "hippo_com_bios.bin", 0x10000, 0x10000, CRC(d35f65a1) SHA1(885f55f87d2070c6a846768e5cf76499dad8d15c))
ROM_END
-// J-Bond A433C-C/A450C-C (8 SIMM, 2 8-bit ISA, 6 16-bit ISA)
-// ETEQ ET82C491 + ET82C493; CHIPS P82C206; AMI KB-BIOS-VER-F P8042AHP
+// J-Bond A433C-C/A450C-C RAM: 8xSIMM30, Cache: 8xCY7199-25PC/2xCY7C166-20PC - 2 8-bit ISA, 6 16-bit ISA)
+// Chipset: ETEQ ET82C491 + ET82C493; CHIPS P82C206; AMI KB-BIOS-VER-F P8042AHP - OSC: 33.000MHz - CPU: i486DX-33
+// BIOS: AMI 486 BIOS ZZ566787 - BIOS-String: 40-0200-001353-0010111-070791-ETEQ4/1C-0 / ETEQ 486 Mar. 05, 1992
ROM_START( a433cc )
ROM_REGION(0x20000, "bios", 0)
- // BIOS-String: 40-0200-001353-0010111-070791-ETEQ4/1C-0 / ETEQ 486 Mar. 05, 1992
ROM_LOAD( "ami_j-bond_a433c-c.bin", 0x10000, 0x10000, CRC(66031e98) SHA1(d2d1a26837d3ca943a6ef09ec3e6fbfaaa62cc46))
ROM_END
-// ASUS PVI-486AP4 (Socket 3, 4 SIMM, 4 PCI, 4 ISA, 1 VLB)
-// Intel Aries PCIset S82425EX + S82426EX; DS12887 RTC; VIA VT82C42N
+// ASUS PVI-486AP4 (Socket 3, 4xSIMM72, Cache: 128/256/512KB, 4 PCI, 4 ISA, 1 VLB)
+// Intel Aries PCIset S82425EX + S82426EX; DS12887 RTC; VIA VT82C42N - BIOS: 32pin
ROM_START( a486ap4 )
ROM_REGION(0x20000, "bios", 0)
// 0: BIOS-String: 07/20/94-ARIES-P/I-AP4G-00 / #401A0-0104
@@ -2641,19 +3371,7 @@ ROM_START( a486ap4 )
ROMX_LOAD( "0205.002", 0x00000, 0x20000, CRC(632e8ee6) SHA1(3cf57b2654b0365e41ef5f5c82f68eeadf0e7a21), ROM_BIOS(3))
ROM_END
-// ASUS PVI-486SP3 (Socket 3, 2 SIMM, 2 IDE, 3 PCI, 4 ISA, 1 VLB)
-// SiS 85C496 + 85C497; UMC UM8669F; AMIKEY-2
-ROM_START( a486sp3 )
- ROM_REGION(0x20000, "bios", 0) // Winbond W29EE011-15
- // 0: BIOS-String: 07/22/94-SATURN-P/I-4SP3-00 / #401A0-0207
- ROM_SYSTEM_BIOS(0, "v207", "ASUS PVI-486SP3 V2.07")
- ROMX_LOAD( "awsi0207.bin", 0x00000, 0x20000, CRC(0cb862aa) SHA1(7ffead05c1df47ec36afba395191145279c5e789), ROM_BIOS(0))
- // 1: BIOS-String: 07/22/94-SATURN-P/I-4SP3-00 / #401A0-0207
- ROM_SYSTEM_BIOS(1, "v2737", "ASUS PVI-486SP3 V2.07 #2")
- ROMX_LOAD( "awsi2737.bin", 0x00000, 0x20000, CRC(8cd9a89c) SHA1(6c68c23cc5e8ae66261e9fe931f2ce07efe767b6), ROM_BIOS(1))
-ROM_END
-
-// ASUS PCI/I-486SP3G V3.02 (Socket 3, 4 SIMM, 1 IDE, 1 SCSI, 3 PCI, 4 ISA)
+// ASUS PCI/I-486SP3G V3.02 (Socket 3, RAM: 4xSIMM72, Cache: 128/256/512K, 1 IDE, 1 SCSI, 3 PCI, 4 ISA) - BIOS: 32pin
// Intel Saturn II chipset: 82424ZX CDC + 82423TX DPU + 82378ZB SIO; NCR 53C820; National PC87332; DS12887 RTC; VIA VT82C42N
ROM_START( a486sp3g )
ROM_REGION(0x20000, "bios", 0)
@@ -2665,7 +3383,101 @@ ROM_START( a486sp3g )
ROMX_LOAD( "awsg0304.bin", 0x00000, 0x20000, CRC(f4d830d2) SHA1(086ccd14c7b0c521be1958d58b3539c4bfe4721f), ROM_BIOS(1))
ROM_END
-// ASUS PCI/I-A486S (4 SIMM, 1 EISA)
+// ASUS VL/EISA-486SV1 (8 EISA, 1 VLB) -
+ROM_START( a486sv1 )
+ ROM_REGION(0x20000, "bios", 0)
+ // BIOS-String: 05/20/94-SIS-486/EISA-E-486SV1-00 / #401A0-0112
+ //ROM_SYSTEM_BIOS(0, "v112", "Award BIOS V1.12")
+ ROM_LOAD( "e4sv0112.awd", 0x10000, 0x10000, CRC(d1d42fc9) SHA1(61549bf597517bb3c33e724e32b3cca981e65000))
+ROM_END
+
+// FIC 486-VIP-IO (3 ISA, 4 PCI)
+// VIA GMC chipset: VT82C505 + VT82C486A + VT82C482 + VT82C483 + VT83C461 IDE; DS12885Q RTC; National PC87332VLJ-S I/O
+ROM_START( ficvipio )
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: BIOS-String: 12/07/94-VT82C505-2A4L4000-00 / Version 4.26GN2(ES2) (12/07/94)
+ ROM_SYSTEM_BIOS(0, "426gn2", "FIC 486-VIP-IO 4.26GN2")
+ ROMX_LOAD( "426gn2.awd", 0x00000, 0x20000, CRC(5f472aa9) SHA1(9160abefae32b450e973651c052657b4becc72ba), ROM_BIOS(0))
+ // 1: BIOS-String: 02/08/96-VT82C505-2A4L4000-00 / Version 4.27GN2A (02/14/96)
+ ROM_SYSTEM_BIOS(1, "427gn2a", "FIC 486-VIP-IO 4.27GN2A")
+ ROMX_LOAD( "427gn2a.awd", 0x00000, 0x20000, CRC(035ad56d) SHA1(0086db3eff711fc710b30e7f422fc5b4ab8d47aa), ROM_BIOS(1))
+ROM_END
+
+// Shuttle HOT-409 (6 16-bit ISA incl. 2 VLB, 2 8-bit ISA, 8 SIMM30, Cache: 64/128/256K+Tag in 2 banks)
+// OPTi 82C495SX + 82C392SX + F82C206; MEGA-KB-1-WP
+ROM_START( hot409 )
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: BIOS-String: 40-0200-001343-00101111-111192-OPT495SX-0 / Version 2.0
+ ROM_SYSTEM_BIOS(0, "hot409v20", "Shuttle HOT-409 V2.0")
+ ROMX_LOAD( "ami1992.bin", 0x10000, 0x10000, CRC(a19c3fd4) SHA1(404822c98344061b60883533395a89fe4902c177), ROM_BIOS(0))
+ // 1: BIOS-String: 40-0204-001343-00101111-080893-OPT495SX-0 / OPTi495SX Version 3.0
+ ROM_SYSTEM_BIOS(1, "hot409lba", "Shuttle HOT-409 V3.0 with LBA")
+ ROMX_LOAD( "409lba.rom", 0x10000, 0x10000, CRC(78c5e47e) SHA1(7f14a88a5548fc67dd00e73fd09745e899b93a89), ROM_BIOS(1))
+ // 2: BIOS-String: 40-0200-001343-00101111-111192-OPT495SX-0 / VERSION 1.1
+ ROM_SYSTEM_BIOS(2, "hot409v11", "Shuttle HOT-409 V1.1")
+ ROMX_LOAD( "amibios_hot409.bin", 0x10000, 0x10000, CRC(17729ee5) SHA1(ea3f5befe16ede7e9f4be3b367624745a6935ece), ROM_BIOS(2))
+ROM_END
+
+// Siemens-Nixdorf 486 mainboards and BIOS versions
+// The same mainboards were used in various case versions to get the different model lines, so an identification by the mainboard number (Dxxx) is safest
+ROM_START( pcd4x )
+ ROM_REGION( 0x20000, "bios", 0 )
+ // D756, was used in PCD-4Lsx, contains Cirrus Logic VGA ROM
+ ROM_SYSTEM_BIOS(0, "d756v320r316", "D756 BIOS V3.20 R3.16")
+ ROMX_LOAD( "fts_biosupdated756noflashbiosepromv320_320316_149.bin", 0x00000, 0x20000, CRC(2ab60725) SHA1(333b64424c08ecbbaf47110c99ad0335da211489), ROM_BIOS(0) )
+ // D674, was used in PCD-4M, PCD-4Msx, PCD-4RSXA/4RA
+ // LSI HT342-B-07 or Headland HT342-BUIB and another LSI chip
+ ROM_SYSTEM_BIOS(1, "d674v320r316", "D674 BIOS V3.20 R3.16")
+ ROMX_LOAD( "fts_biosupdated674noflashbiosepromv320_320316_144.bin", 0x00000, 0x20000, CRC(1293d27c) SHA1(22f36c4a5a0912011ed54ff917244f412208ffc0), ROM_BIOS(1) )
+ // D802, was used in PCD-4HVL
+ ROM_SYSTEM_BIOS(2, "d802v320r316", "D802 BIOS V3.20 R3.34.802")
+ // PCD-4NL, contains C&T VGA BIOS
+ ROMX_LOAD( "fts_biosupdated802noflashbiosepromv320_320334_152.bin", 0x00000, 0x20000, CRC(fb1cd3d2) SHA1(98043c6f0299e1c56e5f266ea5f117ae456447ff), ROM_BIOS(2) )
+ROM_END
+
+
+// ***** 486 motherboards using the ALi M1487 M1489 chipset
+
+// Abit AB-PB4 REV.:1.2 - Chipset: ALi M1487 M1489, Winbond W83787F, W83768F - On board: Floppy, 2xser, 2xIDE, par
+// ISA16: 3, PCI: 3, PISA: 1 - OSC: 14.3F5P - CPU: Socket 3 - BIOS: Award D2317569, 32pin
+ROM_START( abpb4 ) // both BIOS versions end up in the Boot Block BIOS
+ ROM_REGION(0x20000, "bios", 0)
+ // 0:
+ ROM_SYSTEM_BIOS( 0, "pb4", "PB4")
+ ROMX_LOAD( "486-ab-pb4.bin", 0x00000, 0x20000, CRC(90884abc) SHA1(1ee11b026cb783b28cc4728ab896dbeac14eb954), ROM_BIOS(0))
+ // 1:
+ ROM_SYSTEM_BIOS( 1, "pb4pf2", "PB4P-F2")
+ ROMX_LOAD( "pb4p_f2.bin", 0x00000, 0x20000, CRC(9ab8d277) SHA1(10e424f5dd5c98877a5a7c9ae6205b2c442ac0e0), ROM_BIOS(1))
+ROM_END
+
+// V1.2A (with fake cache SRAM) - Chipset: ALi M1489, M1487, UM8663AF, UM8667 - BIOS: 10/10/94 AMI AD0153466 (32pin) - ISA16: 4, PCI: 3
+// On board: 2xser, Game, par, Floppy, 2xIDE - OSC: 14.31818
+ROM_START( alim1489 ) // no display
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "ali.bin", 0x00000, 0x20000, CRC(d894223b) SHA1(088a94d2425f0abc85fafa922a5c6792da608d28))
+ROM_END
+
+
+// ***** 486 motherboards using the CONTAQ 82C596 chipset
+
+// MSI MS-4125 - Chipset: CONTAQ 82C596 SiS 85C206 - ISA8: 1, ISA16: 3, ISA16/VL: 2 - BIOS: AMI 486DX ISA BIOS AA65441044 (28pin) - Keyboard-BIOS: AMI/Intel P8942AHP
+// BIOS-String: 40-0104-001169-00101111-111192-CTQ596-0 / AC5E 052193
+ROM_START( ms4125 )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD("ms4125.bin", 0x10000, 0x10000, CRC(0e56b292) SHA1(9db26e8167b477c550d756d1ca2363283ebff3ed))
+ROM_END
+
+// Diamond Flower, Inc. (DFI) 486-CCV Rev B - Chipset: CONTAQ 82C596, KS83C206EQ - BIOS: 11/11/92 AMI AB8644083 (28pin) - Keyboard-BIOS: AMIKEY-2
+// BIOS-String: 40-0100-ZZ1211-00101111-111192-CONTAQ/5-0 - OSC: 14.31818MHz - ISA8: 2, ISA16: 4, ISA16/VL: 2
+ROM_START( 486ccv )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "contaq.bin", 0x10000, 0x10000, CRC(2ac46033) SHA1(a121c22ded4932e3ba8d65c2b097b898f02147c7))
+ROM_END
+
+
+// ***** 486 motherboards using the SiS 85C496/85C497 chipset
+
+// ASUS PCI/I-A486S (4xSIMM72, Cache: 128/256/512KB, 1 EISA) - BIOS: 32pin
// SiS 85C496/85C497 chipset; SMC 37C665 I/O; AMIKEY-2, S3 Trio 64 on board VGA, the manual also mentions Trio 32
ROM_START( aa486s )
ROM_REGION(0x20000, "bios", 0)
@@ -2677,15 +3489,47 @@ ROM_START( aa486s )
ROMX_LOAD( "si4a0304.awd", 0x00000, 0x20000, CRC(a00ad907) SHA1(598d97ea29f930a9359429dc540d27bfdd0fcd20), ROM_BIOS(1))
ROM_END
-// ASUS VL/EISA-486SV1 (8 EISA, 1 VLB)
-ROM_START( a486sv1 )
- ROM_REGION(0x20000, "bios", 0)
- // BIOS-String: 05/20/94-SIS-486/EISA-E-486SV1-00 / #401A0-0112
- //ROM_SYSTEM_BIOS(0, "v112", "Award BIOS V1.12")
- ROM_LOAD( "e4sv0112.awd", 0x10000, 0x10000, CRC(d1d42fc9) SHA1(61549bf597517bb3c33e724e32b3cca981e65000))
+// ASUS PVI-486SP3 (Socket 3, 2xSIMM72, Cache: 128/256/512KB, 2 IDE, 3 PCI, 4 ISA, 1 VLB)
+// SiS 85C496 + 85C497; UMC UM8669F; AMIKEY-2; BIOS: 29EE010 (32pin)
+ROM_START( a486sp3 )
+ ROM_REGION(0x20000, "bios", 0) // Winbond W29EE011-15
+ // 0: BIOS-String: 07/22/94-SATURN-P/I-4SP3-00 / #401A0-0207
+ ROM_SYSTEM_BIOS(0, "v207", "ASUS PVI-486SP3 V2.07")
+ ROMX_LOAD( "awsi0207.bin", 0x00000, 0x20000, CRC(0cb862aa) SHA1(7ffead05c1df47ec36afba395191145279c5e789), ROM_BIOS(0))
+ // 1: BIOS-String: 07/22/94-SATURN-P/I-4SP3-00 / #401A0-0207
+ ROM_SYSTEM_BIOS(1, "v2737", "ASUS PVI-486SP3 V2.07 #2")
+ ROMX_LOAD( "awsi2737.bin", 0x00000, 0x20000, CRC(8cd9a89c) SHA1(6c68c23cc5e8ae66261e9fe931f2ce07efe767b6), ROM_BIOS(1))
ROM_END
-// ASUS VL/I-486SV2G (GX4) (4 SIMM, 7 ISA, 2 VLB)
+// ZIDA Tomato board 4DPS - Chipset: SIS 85C497, SIS 85C496, Winbond W83787IF, W83768F, MX8318-01PC - CPU: 486/5x86 - BIOS: Winbond W29EE011-15 / AWARD PCI/PNP
+// Keyboard-BIOS: HOLTEK HT6542B or AMIKEY-2 - ISA16: 3, PCI: 3 - OSC: 24.000 - On board: 2xIDE, Floppy, 2xCOM, 1xPRN, Mouse, GAME
+// from v4.00 onward it needs FLASH instead of EPROM to update the ESCD at boot time
+ROM_START( zito4dps ) // all revisions land in the Award Boot block BIOS
+ ROM_REGION(0x20000, "bios", 0)
+ // 0:
+ ROM_SYSTEM_BIOS( 0, "4dps01", "Tomato 4DPS #1")
+ ROMX_LOAD( "4siw004.bin", 0x00000, 0x20000, CRC(0c57cc33) SHA1(04ce27dc89ae15d70c14076ad4f82b50a4f1e6dd), ROM_BIOS(0))
+ // 1:
+ ROM_SYSTEM_BIOS( 1, "4dps02", "Tomato 4DPS #2")
+ ROMX_LOAD( "4dps02.bin", 0x00000, 0x20000, CRC(757a5ef7) SHA1(e35146f34329a6a7033b1ed9d95a77692826a060), ROM_BIOS(1))
+ // 2:
+ ROM_SYSTEM_BIOS( 2, "170", "Tomato 4DPS v1.70")
+ ROMX_LOAD( "4dps_170.bin", 0x00000, 0x20000, CRC(10b43a85) SHA1(d77bb2420b98c030add5de52fc90c88384b2036b), ROM_BIOS(2))
+ // 4:
+ ROM_SYSTEM_BIOS( 3, "172g", "Tomato 4DPS v1.72g")
+ ROMX_LOAD( "4dps172g.bin", 0x00000, 0x20000, CRC(184eeeba) SHA1(248555567e35d4d6a0cfad5abc989e8193a72351), ROM_BIOS(3))
+ // 5:
+ ROM_SYSTEM_BIOS( 4, "400a", "Tomato 4DPS v4.00a")
+ ROMX_LOAD( "4dps400a.bin", 0x00000, 0x20000, CRC(494da2da) SHA1(9dcae9aa403627df03d5777c1b4de0b9f98bb24f), ROM_BIOS(4))
+ // 6:
+ ROM_SYSTEM_BIOS( 5, "401e", "Tomato 4DPS v4.01e")
+ ROMX_LOAD( "4dps401e.bin", 0x00000, 0x20000, CRC(e84b2bb2) SHA1(5dd8e801decf87af90ff90e3096819354f657b5a), ROM_BIOS(5))
+ROM_END
+
+
+// ***** 486 motherboards using the SiS 85C471 + 85C407 chipset
+
+// ASUS VL/I-486SV2G (GX4) (4xSIMM72, Cache: 128/256/512/1024KB, 7 ISA, 2 VLB)
// SiS 85C471 + 85C407; AMIKEY-2
ROM_START( a486sv2g )
ROM_REGION(0x20000, "bios", 0)
@@ -2703,6 +3547,109 @@ ROM_START( a486sv2g )
ROMX_LOAD( "sv2g0402.bin", 0x10000, 0x10000, CRC(db8fe666) SHA1(e499da86261bc6b312a6bc3d94b9465e17c5a449), ROM_BIOS(3))
ROM_END
+// Chaintech 486SLE M106 4SLE-Z1 - Chipset: SiS 85C407 85C471 - CPU: i486DX2-66 - BIOS: Award v4.50G - Keyboard-BIOS: Lance LT48C41
+// BIOS-String: 11/09/94-SIS-85C471E-2C4I9C31-00 / 11/24/94 - ISA8: 1, ISA16: 3, ISA16/VL: 3 - OSC: 14.31818
+ROM_START( ch4slez1 )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "486-chaintech_486_sle.bin", 0x10000, 0x10000, CRC(8292bdb7) SHA1(461d582ea9fee4113d3a8ac050f76c7057ead7c7))
+ROM_END
+
+// Gigabyte GA-486VF REV.6 - Chipset: SiS 85C407 85C471 - CPU: Cyrix Cx486 DX 40 - BIOS: Award L4162439, 28pin - Keyboard-BIOS: Lance LT38C41
+// BIOS-String: 04/27/94-SIS-85C471-2C4I8G01-00 - ISA8: 1, ISA16: 3, ISA16/VL: 3 - OSC: 14.318MHz
+ROM_START( ga486vf )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "ga-486svf.bin", 0x10000, 0x10000, CRC(e9fb3153) SHA1(b8e307658f95c3e910728ac9316ad83e7afdb551))
+ROM_END
+
+// Gigabyte GA-486VS - CPU: 486 - Chipset: SiS 85C471, 85C407 - Keyboard-BIOS: Lance LT38C41 - ISA16: 3, ISA16/VL: 3
+// BIOS-String: 11/21/94-SIS-85C471B/E/G/2C4I9G01-00 / Nov 21, 1994 Rev.A
+ROM_START( ga486vs )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "vs1121.rom", 0x10000, 0x10000, CRC(0afadecf) SHA1(66c0655b5c4905438603097998a98407bfa376e6))
+ROM_END
+
+// MSI MS:4138 VER:1.3 - Chipset: SiS 85C471, 85C407 - CPU: Socket 3 - BIOS: EPROM/AMI 486DX ISA BIOS AC0250679
+// Keyboard-BIOS: Winbond W83C42 - BIOS-String: - ISA16: 4, ISA16/VL: 3
+ROM_START( ms4138 )
+ ROM_REGION( 0x20000, "bios", 0)
+ // 0: no display
+ ROM_SYSTEM_BIOS( 0, "a75n", "A75N")
+ ROMX_LOAD( "a75n.rom", 0x10000, 0x10000, CRC(f9b2130c) SHA1(7798b68275e547e858ba162abc5cf94dd6a85f4c), ROM_BIOS(0))
+ // 1: no display
+ ROM_SYSTEM_BIOS( 1, "msi4138", "MSI MS-4138")
+ ROMX_LOAD( "ms-4138.bin", 0x10000, 0x10000, CRC(5461c523) SHA1(adb9fe0afa860897d575403a810ff44c85b9f93c), ROM_BIOS(1))
+ // 2: BIOS-String: 08/14/95-SIS-85C471B/E/G-2C3I9W40-00 / W753BETA 26JAN96
+ ROM_SYSTEM_BIOS( 2, "w753beta", "W753BETA")
+ ROMX_LOAD( "w753beta.bin", 0x10000, 0x10000, CRC(4aeeba0b) SHA1(9d088c940599110ce3acea84bb881a61d42b6dcf), ROM_BIOS(2))
+ROM_END
+
+// DTK PKM-0038S E-2A aka Gemlight GMB-486SG - Chipset: SIS 85C471, 85C407 - BIOS/Version: 01/10/95 Award (DTK PKM0038S.P02.03.02), 28pin - Keyboard-BIOS: JETkey V5.0
+// BIOS-String: 01/10/95-SIS-85C471B/E/G-2C4I9G30-00 / (2C4I9G30) DTKPKM0038S.P2.03.02 - CPU: Socket 3 - ISA8: 1, ISA16: 3, ISA16/VL: 3 - OSC: 14.318
+ROM_START( pkm0038s )
+ ROM_REGION( 0x20000, "bios", 0)
+ ROM_LOAD( "pkm0038s.bin", 0x10000, 0x10000, CRC(f6e7dd88) SHA1(5a2986ff0e6352ade8d5b0abaa86e436dddcf226))
+ROM_END
+
+ROM_START( sis85c471 )
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: Chipset: SiS 85C407, another chip with the Energy Star/Green PC label (85C441) - CPU: 486 - BIOS: Award BIOS ISA 486 036875 - Keyboard-BIOS: Lance LT38C41
+ // BIOS-String: 04/28/94-SIS-85C471-2C4I8S21-00 / REV. B - ISA16: 4, ISA16/VL: 3 (2 master)
+ ROM_SYSTEM_BIOS(0, "revb", "REV. B")
+ ROMX_LOAD("486-sis_green.bin", 0x10000, 0x10000, CRC(9d3b5022) SHA1(f11b27bb24deb2466226486cf8ba66ddbeff87d6), ROM_BIOS(0))
+ // 1: Chipset: SiS 85C407 85C471 - CPU: Cyrix Cx486DX2-66 - BIOS: Award E0042537 - Keyboard-BIOS: Lance LT38C41 - ISA8: 1, ISA16: 3, ISA16/VL: 3
+ // BIOS-String: 02/07/94-SIS-85C371-2C4I8C30-00 / 02/17/94
+ ROM_SYSTEM_BIOS(1, "486sl", "486SL")
+ ROMX_LOAD("486-sis_486sl.bin", 0x10000, 0x10000, CRC(7261263e) SHA1(d5c4ee484941bbb8ca756c5f6e53382748bbcfd6), ROM_BIOS(1))
+ROM_END
+
+
+// ***** 486 motherboards using the UMC UM8498F, UM8496F chipset
+
+// PC-Chips M912 - Chipset: UM8498F, UM8496F - CPU: 486 - BIOS: AMI - ISA16: 4, ISA16/VL: 3
+ROM_START( pccm912 ) // no display
+ ROM_REGION( 0x20000, "bios", 0)
+ // 0:
+ ROM_SYSTEM_BIOS( 0, "072594", "07/25/94")
+ ROMX_LOAD( "m912.bin", 0x10000, 0x10000, CRC(7784aaf5) SHA1(f54935c5da12160251104d0273040fea22ccbc70), ROM_BIOS(0))
+ // 1:
+ ROM_SYSTEM_BIOS( 1, "120295", "12/02/95")
+ ROMX_LOAD( "m912_12-02-1995x.bin", 0x10000, 0x10000, CRC(28a4a140) SHA1(a58989ab5ad5d040ad4f25888c5b7d77f31a4d82), ROM_BIOS(1))
+ROM_END
+
+// Pine Technology PT-430 - Chipset: UMC UM8498F UM8496F - BIOS: AMI 486DX ISA BIOS AB8906726 28pin - Keyboard-BIOS: silkscreen 8742, but socket empty
+// BIOS-String: - ISA8: 1, ISA16: 3, ISA16/VL: 3 - OSC: 14.31818MHz
+ROM_START( pt430 ) // no display
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "pt430.bin", 0x10000, 0x10000, CRC(d455c949) SHA1(c57c82ed015528f3d223f59c94ed6b8a9c323c39))
+ROM_END
+
+ROM_START( um8498f ) // no display
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "deepgrn.bin", 0x10000, 0x10000, CRC(4a6dcc36) SHA1(f159f67eb662272244cd1781814ebcb5204a2625))
+ROM_END
+
+
+// ***** 486 motherboards using the UM82C482A UM82C481A chipset
+
+// Elitegroup UM486/UM486sx Rev.1.4. - Chipset: UMC UM82C482A UM82C481A UM82C206F - ISA8: 2, ISA16: 6 - CPU: i486DX-50, FPU socket provided
+// RAM: 8xSIMM30 in 2 banks, Cache: 8xW24256AK-25+4xCY7C164-20PC - OSC: 33.000MHz, 14.31818MHz - BIOS: AMI 486 BIOS ZZ364969 - Keyboard-BIOS: AMI KB-BIOS-VER-F
+// BIOS-String: 40-0500-D01131-00101111-070791-UMCWB-0 / UM486/486SX V1.3 09-24-91
+ROM_START( um486 )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "486-um486-um486sx.bin", 0x10000, 0x10000, CRC(0f20d193) SHA1(e9c7365b0343a815e5abc9726d128353becc18d3))
+ROM_END
+
+// Elitegroup UM486V-AIO - Chipset: UMC UM82C482AF, UM82C481BF, UM82C863F, UM82C865F, UM82C206F - ISA16: 4, ISA16/VL: 2
+// BIOS: AMI - CPU: 486 - On board: Floppy, 1xIDE, parallel, 2x serial
+// BIOS-String: 40-0100-001131-00101111-111192-UMC480-0 / UM100 V2.1 04-26-93
+ROM_START( um486v )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "um486v.bin", 0x10000, 0x10000, CRC(eb52d3fd) SHA1(84f63904cfceca9171b5c469545068e19ae280a8))
+ROM_END
+
+
+// ***** 486 motherboards using the UM8886BF, UM8881F chipset
+
// Biostar MB8433UUD-A (4 SIMM, 2 IDE, 3 PCI, 4 ISA)
// UMC UM8881F, UM8886BF, UM8663AF; DS12887 RTC
ROM_START( mb8433uud )
@@ -2710,6 +3657,125 @@ ROM_START( mb8433uud )
ROM_LOAD( "uud0520s.bin", 0x00000, 0x20000, CRC(0e347559) SHA1(060d3040b103dee051c5c2cfe8c53382acdfedad))
ROM_END
+// PC-Chips M915i - CPU: 486 - Chipset: UM8881F, UM8886F - ISA16: 2, ISA16/VL: 2, PCI: 4 - On board: 2xIDE
+ROM_START( pccm915i ) // no display
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "9151108s.rom", 0x00000, 0x20000, CRC(cba5525c) SHA1(9bdb586090f613a7172f6b46ed78e36331bf2135))
+ROM_END
+
+// PC-Chips M919 - this motherboard showcased the issues that gave PC-Chips its bad name, it was available with fake cache, a proprietary cache socket or with fully operational cache
+// Chipset: UMC UM8881F/9714-EYS and UM8886BF/9652-FXS (V3.4B/F), UMC UM8886BF/9618-FXS and UM8881F/9622-EYS (Rev. 1.5)
+// http://th2chips.freeservers.com/m919/ this mentions that the BIOS requires a flashable chip
+ROM_START( pccm919 )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_SYSTEM_BIOS(0, "m919v1", "PC-Chips M919 v1")
+ ROMX_LOAD( "9190914s.rom", 0x00000, 0x20000, CRC(bb18ff2d) SHA1(530d13df21f2d483ec0dddda44fb4fe7e29ec040), ROM_BIOS(0))
+ ROM_SYSTEM_BIOS(1, "m919v2", "PC-Chips M919 v2")
+ ROMX_LOAD( "9191016s.rom", 0x00000, 0x20000, CRC(2a2125a6) SHA1(753061ae6f80c0ca42d1af91aada657910feae18), ROM_BIOS(1))
+ROM_END
+
+// Shuttle HOT-433 - Chipset: UM8886BF, UM8881F, UM8669F, ??667
+// CPU: Cyrix 5x86-120GP - ISA16: 4, PCI: 4 - On board: PS2-Mouse, 2xser, Floppy, par, 2xIDE
+// Versions 1-3 can use Flash or EPROM, Version 4 only EPROM
+ROM_START( hot433 ) // no display
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: BIOS: 10/10/94 AMI (or 02/02/95 depending on where you look), 486PCI/ISA 057890 in a Winbond W29EE011-15
+ ROM_SYSTEM_BIOS(0, "v401", "V4.0 #1")
+ ROMX_LOAD( "hot433.bin", 0x00000, 0x20000, CRC(1c279c6f) SHA1(4a0e99fafc5719959fb5800a61629c3f36778240), ROM_BIOS(0))
+ // 1: Original AMI BIOS for rev 1-3 w/mouse support
+ ROM_SYSTEM_BIOS(1, "aip16", "AIP16")
+ ROMX_LOAD( "433aip16.rom", 0x00000, 0x20000, CRC(a9503fc6) SHA1(0ebd936f5478477e37528e6e487c567b064248f7), ROM_BIOS(1))
+ // 2: AMI BIOS for the EPROM Programmer, not flashable
+ ROM_SYSTEM_BIOS(2, "aue2a", "AUE2A")
+ ROMX_LOAD( "433aue2a.rom", 0x00000, 0x20000, CRC(35f5633f) SHA1(01148eba919985165ab9cd12b5e6f509d6d1385f), ROM_BIOS(2))
+ // 3: AMI BIOS for the EPROM Programmer, not flashable
+ ROM_SYSTEM_BIOS(3, "aue33", "AUE33")
+ ROMX_LOAD( "433aue33.rom", 0x00000, 0x20000, CRC(803c4b1e) SHA1(483c799c08eed0d446384d67e9d23341499806b1), ROM_BIOS(3))
+ // 4: AMI BIOS for rev 1-3. Some reports say for rev4
+ ROM_SYSTEM_BIOS(4, "aus2a", "AUS2A")
+ ROMX_LOAD( "433aus2a.rom", 0x00000, 0x20000, CRC(766d1f3f) SHA1(1e59140bc91ab98fcadcf7bb77e222932696419f), ROM_BIOS(4))
+ // 5: Latest AMI BIOS for rev 1-3
+ ROM_SYSTEM_BIOS(5, "aus2c", "AUS2C")
+ ROMX_LOAD( "433aus2c.rom", 0x00000, 0x20000, CRC(bdc65766) SHA1(e87cc4aed14ae7fcdf6423063b0ababe65b41044), ROM_BIOS(5))
+ // 6: AMI Bios for rev 1-3 w/mouse support
+ ROM_SYSTEM_BIOS(6, "aus26", "AUS26")
+ ROMX_LOAD( "433aus36.rom", 0x00000, 0x20000, CRC(8f864716) SHA1(0bf4b8114cbb406646d89eed7833556611e1fbe6), ROM_BIOS(6))
+ // 7: Latest AMI BIOS for rev4 of the Shuttle HOT-433 motherboard.
+ ROM_SYSTEM_BIOS(7, "aus33", "AUS33")
+ ROMX_LOAD( "433aus33.rom", 0x00000, 0x20000, CRC(278c9cc2) SHA1(ecd348106d5118eb1e1a8c6bd25c1a4bf322f3e6), ROM_BIOS(7))
+ROM_END
+
+ROM_START( um8886 )
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: no display - UMC PCI 95C-0123 - Chipset: UMC UM8886AF, UM8881F, 4xUM8002, UM8663AF, UM8667 - CPU: Socket 3 - On board: 2xser, par, Floppy, 2xIDE - 4xISA16, 4xPCI
+ // BIOS: AMI 486 PCI ISA in M27C1001 EPROM
+ ROM_SYSTEM_BIOS( 0, "pci95c", "PCI 95C-0123")
+ ROMX_LOAD( "486-umc_pci_95c-0123.bin", 0x00000, 0x20000, CRC(9db58de4) SHA1(5441f3181fb26911d796c4bf019136aa8e4c060b), ROM_BIOS(0))
+ // 1: no display - V1.1A - Chipset: UMC UM8886AF UM8881F, UM8667, UM8663AF - CPU: i486DX2-66 - On board: 2xser, 2xIDE, Floppy, par - BIOS: AMI 486DX ISA BIOS AC6288199 - ISA16: 4, PCI: 3
+ ROM_SYSTEM_BIOS( 1, "pcimini", "PCI mini")
+ ROMX_LOAD( "486-umc-pci mini.bin", 0x00000, 0x20000, CRC(4ee12b46) SHA1(9397f67b21f11cfda57abd5ab28f93055909ee97), ROM_BIOS(1))
+ROM_END
+
+
+// ***** 486 motherboards using the UMC UM82C491F UM82C493F chipset
+
+// Chicony CH-491E Rev. 1.4 - Chipset: UMC UM82C491F UM82C493F - BIOS: 04/04/93 AMI AB1987679 28pin - Keyboard-BIOS: AMIKEY
+// BIOS-String: 40-0102-001116-00101111-040493-UMC491F-0 / UMC 491 for 80486 AUTO - ISA16: 4, ISA16/VL: 3
+ROM_START( ch491e )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "ch491e.bin", 0x10000, 0x10000, CRC(2d24ff24) SHA1(72f35c19e907c6d0a03a49bd362c4f57cc89da1c))
+ROM_END
+
+// Aquarius System (ASI) MB-4D33/50NR VER:01 - Chipset: UMC UM82C491F UM82C493F - CPU: AM486DX2-66 - BIOS: Award 1060176, 28pin - Keyboard-BIOS: JETkey V5.0
+// BIOS-String: 03/09/94-UMC-491-2C4X2A30-00 / MB-4D33/50NR-02 - ISA8: 1, ISA16: 3, ISA16/VL: 3
+ROM_START( mb4d33 )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "486-mb-4d33.bin", 0x10000, 0x10000, CRC(f1299131) SHA1(d8e2749e180135e23483e36a0a05479e64f23d8c))
+ROM_END
+
+// Elitegroup ECS UC4915 A AIO - Chipset: UMC UM82C491F UM82C493F UM82C865F SMC FDC37C662QF P, PROCHIP PR 4030 - CPU: Socket 3
+// BIOS: AMI 486DX ISA BIOS AB2683223 28pin in 32pin socket - Keyboard-BIOS: Intel/AMI MEGA-KB-H-WP
+// BIOS-String: 40-0401-001131-00101111-040493-UMC491C-0 / VOBIS UC4915-A V1.1 11-05-93' - ISA16: 4, ISA16/VL: 2 - OSC: 14.31818 - On board: IDE, Floppy, 2xser, par, Game
+ROM_START( ec4915aio )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "486-ecs-uc4915-a-aio.bin", 0x10000, 0x10000, CRC(5b3429a3) SHA1(a1b3ddb6a0939d20ae66e034914ea94648ca7149))
+ROM_END
+
+
+// ***** 486 motherboards using the VIA VT82C495 VT82C481 chipset
+
+// FIC 4386-VC-V - CPU: 486 - Chipset: VIA VT82C495 VT82C481 - ISA8: 2, ISA16: 3, ISA16/VL: 2 - OSC: 33.333MHz - BIOS: AMI 486DX ISA BIOS AA6387315 (28pin) -
+// BIOS-String: X0-0100-001121-00101111-021993-VIA-0 / Version 1.02 - Keyboard-BIOS: Lance LT38C41
+ROM_START( fic4386vcv )
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "486-4386-vc.bin", 0x10000, 0x10000, CRC(659210c2) SHA1(a730a547f3af215459632160fa670fde7e9c4f9a))
+ROM_END
+
+// HIGHSCREEN 486 Universal Board C82C33-A VIA4386-VIO - Chipset: VIA VT82C495 VT82C481, Winbond WB3757F - CPU: AM486DX2-66
+// BIOS: Award F0599630 - Keyboard BIOS: AMI 1131 KEYBOARD BIOS PLUS - BIOS-String: Award Modular BIOS v4.20 / Version 1.143K
+// On board: IDE, Floppy, 2xser, par, game - OSC: 32.0000MHz - ISA16: 6
+ROM_START( via4386vio ) // probably a FIC board - KEYBOARD ERROR OR NO KEYBOARD PRESENT
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "486-highscreen.bin", 0x10000, 0x10000, CRC(059b6e51) SHA1(f8ede823e41cfa6f72bd9717ec75419079f9c40b))
+ROM_END
+
+// FIC 4386-VC-HD - Chipset: VIA VT82C481, VT82C495 - this board can take either 386 or 486 CPUs
+// Keyboard-BIOS: Lance LT38C41 - CPU: AMD AMD386DX-40, FPU: IIT 3C87-40 - ISA16: 6
+ROM_START( fic4386vchd )
+ ROM_REGION(0x20000, "bios", 0)
+ // 0: BIOS: AMI; Version 1.04; 06/06/92 - BIOS-String: X0-0100-001121-00101111-021993-VIA-0 / Version 1.04
+ ROM_SYSTEM_BIOS(0, "ami104", "AMI V1.04")
+ ROMX_LOAD( "3vim001.bin", 0x10000, 0x10000, CRC(668d8cab) SHA1(409b81e33ca07b0a9724dbb6ca395a3a0887aa02), ROM_BIOS(0))
+ // 1: BIOS: Award F0111730 v1.15K 03/12/93-VENUS-VIA - BIOS-String: Award Modular BIOS v4.20 / Version 1.15K
+ ROM_SYSTEM_BIOS(1, "awav115k", "Award V1.15k")// KEYBOARD ERROR OR NO KEYBOARD PRESENT
+ ROMX_LOAD( "4386-vc-hd v1.15k.bin", 0x10000, 0x10000, CRC(acc5db45) SHA1(cb93322735e96614d3c54fbfcd4291ff1b3ca57c), ROM_BIOS(1))
+ // 2: AWARD v4.20 F0166061 (28pin) - Keyboard-BIOS: Lance LT38C41 - CPU: 486 - BIOS-String
+ ROM_SYSTEM_BIOS(2, "awav110k", "Award V1.10K") // KEYBOARD ERROR OR NO KEYBOARD PRESENT
+ ROMX_LOAD("486-4386-vc-hd.bin", 0x10000, 0x10000, CRC(a32d30fc) SHA1(815a63e624b3145d9955aa3ce8c4c1e34fb438bb), ROM_BIOS(2))
+ROM_END
+
+// ***** 486 motherboards using the VIA VT82C505 + VT82C496G + VT82C406MV chipset
+
// FIC 486-PIO-2 (4 ISA, 4 PCI)
// VIA VT82C505 (ISA/VL to PCI bridge) + VT82C496G (system chipset) + VT82C406MV (keyboard controller, RTC, CMOS), NS311/312 or NS332 I/O
ROM_START( ficpio2 )
@@ -2726,18 +3792,9 @@ ROM_START( ficpio2 )
// 3: BIOS-String: 04/18/96-VT496G-2A4LF0IC-00 / Version 1.15B101
ROM_SYSTEM_BIOS(3, "ficpio2b1", "FIC 486-PIO-2 1.15B101") /* non-pnp, i/o core: NS 311/312, working */
ROMX_LOAD( "115b101.awd", 0x020000, 0x20000, CRC(ff69617d) SHA1(ecbfc7315dcf6bd3e5b59e3ae9258759f64fe7a0), ROM_BIOS(3))
-ROM_END
-
-// FIC 486-VIP-IO (3 ISA, 4 PCI)
-// VIA GMC chipset: VT82C505 + VT82C486A + VT82C482 + VT82C483 + VT83C461 IDE; DS12885Q RTC; National PC87332VLJ-S I/O
-ROM_START( ficvipio )
- ROM_REGION(0x20000, "bios", 0)
- // 0: BIOS-String: 12/07/94-VT82C505-2A4L4000-00 / Version 4.26GN2(ES2) (12/07/94)
- ROM_SYSTEM_BIOS(0, "426gn2", "FIC 486-VIP-IO 4.26GN2")
- ROMX_LOAD( "426gn2.awd", 0x00000, 0x20000, CRC(5f472aa9) SHA1(9160abefae32b450e973651c052657b4becc72ba), ROM_BIOS(0))
- // 1: BIOS-String: 02/08/96-VT82C505-2A4L4000-00 / Version 4.27GN2A (02/14/96)
- ROM_SYSTEM_BIOS(1, "427gn2a", "FIC 486-VIP-IO 4.27GN2A")
- ROMX_LOAD( "427gn2a.awd", 0x00000, 0x20000, CRC(035ad56d) SHA1(0086db3eff711fc710b30e7f422fc5b4ab8d47aa), ROM_BIOS(1))
+ // 4: no display - CPU: Socket3 - On board: 2xser, par, 2xIDE, Floppy, par - BIOS: Award F4215801, 32pin - ISA16: 4, PCI: 4
+ ROM_SYSTEM_BIOS(4, "ficpio2", "FIC 486-PIO-2 DOC 14580")
+ ROMX_LOAD( "486-pio2.bin", 0x20000, 0x20000, CRC(4609945d) SHA1(7ad446bc3b27f3f636fb5884e58b055681f081eb), ROM_BIOS(4))
ROM_END
// FIC 486-VIP-IO2 (3 ISA, 4 PCI)
@@ -2747,36 +3804,6 @@ ROM_START( ficvipio2 )
ROM_LOAD( "1164g701.awd", 0x00000, 0x20000, CRC(7b762683) SHA1(84debce7239c8b1978246688ae538f7c4f519d13))
ROM_END
-// Shuttle HOT-409 (6 16-bit ISA incl. 2 VLB, 2 8-bit ISA, 8 SIMM)
-// OPTi 82C495SX + 82C392SX + F82C206; MEGA-KB-1-WP
-ROM_START( hot409 )
- ROM_REGION(0x20000, "bios", 0)
- // 0: BIOS-String: 40-0200-001343-00101111-111192-OPT495SX-0 / Version 2.0
- ROM_SYSTEM_BIOS(0, "hot409", "Shuttle HOT-409")
- ROMX_LOAD( "ami1992.bin", 0x10000, 0x10000, CRC(a19c3fd4) SHA1(404822c98344061b60883533395a89fe4902c177), ROM_BIOS(0))
- // 1: BIOS-String: 40-0204-001343-00101111-080893-OPT495SX-0 / OPTi495SX Version 3.0
- ROM_SYSTEM_BIOS(1, "hot409lba", "Shuttle HOT-409 with LBA")
- ROMX_LOAD( "409lba.rom", 0x10000, 0x10000, CRC(78c5e47e) SHA1(7f14a88a5548fc67dd00e73fd09745e899b93a89), ROM_BIOS(1))
-ROM_END
-
-// Siemens-Nixdorf 486 mainboards and BIOS versions
-// The same mainboards were used in various case versions to get the different model lines, so an identification by the mainboard number (Dxxx) is safest
-ROM_START( pcd4x )
- ROM_REGION( 0x20000, "bios", 0 )
- // D756, was used in PCD-4Lsx, contains Cirrus Logic VGA ROM
- ROM_SYSTEM_BIOS(0, "d756v320r316", "D756 BIOS V3.20 R3.16")
- ROMX_LOAD( "fts_biosupdated756noflashbiosepromv320_320316_149.bin", 0x00000, 0x20000, CRC(2ab60725) SHA1(333b64424c08ecbbaf47110c99ad0335da211489), ROM_BIOS(0) )
- // D674, was used in PCD-4M, PCD-4Msx, PCD-4RSXA/4RA
- // LSI HT342-B-07 or Headland HT342-BUIB and another LSI chip
- ROM_SYSTEM_BIOS(1, "d674v320r316", "D674 BIOS V3.20 R3.16")
- ROMX_LOAD( "fts_biosupdated674noflashbiosepromv320_320316_144.bin", 0x00000, 0x20000, CRC(1293d27c) SHA1(22f36c4a5a0912011ed54ff917244f412208ffc0), ROM_BIOS(1) )
- // D802, was used in PCD-4HVL
- ROM_SYSTEM_BIOS(2, "d802v320r316", "D802 BIOS V3.20 R3.34.802")
- // PCD-4NL, contains C&T VGA BIOS
- ROMX_LOAD( "fts_biosupdated802noflashbiosepromv320_320334_152.bin", 0x00000, 0x20000, CRC(fb1cd3d2) SHA1(98043c6f0299e1c56e5f266ea5f117ae456447ff), ROM_BIOS(2) )
-ROM_END
-
-
//**************************************************************************
// 80486 Laptop/Notebook
//**************************************************************************
@@ -2821,14 +3848,9 @@ COMP( 1985, ibm5162, ibm5170, 0, ibm5162, 0, at_state, init_at
COMP( 1989, ibmps1es, ibm5170, 0, ibmps1, 0, at_vrom_fix_state, init_at, "International Business Machines", "PS/1 (Spanish)", MACHINE_NOT_WORKING )
COMP( 1987, at, ibm5170, 0, ibm5162, 0, at_state, init_at, "<generic>", "PC/AT (CGA, MF2 Keyboard)", MACHINE_NOT_WORKING )
COMP( 1987, atvga, ibm5170, 0, atvga, 0, at_state, init_at, "<generic>", "PC/AT (VGA, MF2 Keyboard)" , MACHINE_NOT_WORKING )
-COMP( 1988, at386, ibm5170, 0, at386, 0, at_state, init_at, "<generic>", "PC/AT 386 (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING )
-COMP( 1988, ecs38632, ibm5170, 0, at386, 0, at_state, init_at, "Elitegroup Computer Systems", "ECS-386/32", MACHINE_NOT_WORKING )
-COMP( 1992, ecsum386, ibm5170, 0, at386, 0, at_state, init_at, "Elitegroup Computer Systems", "UM386 (Rev 1.1)", MACHINE_NOT_WORKING )
-COMP( 1991, fu340, ibm5170, 0, at386, 0, at_state, init_at, "Abit", "FU340", MACHINE_NOT_WORKING )
-COMP( 19??, smih0107, ibm5170, 0, at386, 0, at_state, init_at, "Forex Computer Company", "unknown 386 AT clone with Forex chipset", MACHINE_NOT_WORKING )
COMP( 1988, ct386sx, ibm5170, 0, ct386sx, 0, at_state, init_at, "<generic>", "NEAT 386SX (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING )
COMP( 1988, at386sx, ibm5170, 0, at386sx, 0, at_state, init_at, "<generic>", "PC/AT 386SX (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING )
-COMP( 1993, cxsxd, ibm5170, 0, at386sx, 0, at_state, init_at, "CX Technology", "CX SXD", MACHINE_NOT_WORKING )
+COMP( 1988, at386, ibm5170, 0, at386, 0, at_state, init_at, "<generic>", "PC/AT 386 (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING )
COMP( 1990, at486, ibm5170, 0, at486, 0, at_state, init_at, "<generic>", "PC/AT 486 (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING )
COMP( 1989, neat, ibm5170, 0, neat, 0, at_state, init_at, "<generic>", "NEAT (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING )
COMP( 1989, ec1842, ibm5150, 0, ec1842, 0, at_state, init_at, "<unknown>", "EC-1842", MACHINE_NOT_WORKING )
@@ -2857,17 +3879,6 @@ COMP( 1989, xb42664, ibm5170, 0, at386, 0, at_state, init_at
COMP( 1990, xb42664a, ibm5170, 0, at386, 0, at_state, init_at, "Apricot", "Apricot XEN-S (Venus II Motherboard 386)" , MACHINE_NOT_WORKING )
COMP( 1993, apxena1, ibm5170, 0, at486, 0, at_state, init_at, "Apricot", "Apricot XEN PC (A1 Motherboard)", MACHINE_NOT_WORKING )
COMP( 1993, apxenp2, ibm5170, 0, at486, 0, at_state, init_at, "Apricot", "Apricot XEN PC (P2 Motherboard)", MACHINE_NOT_WORKING )
-COMP( 1992, a433cc, ibm5170, 0, at486, 0, at_state, init_at, "J-Bond", "A433C-C/A450C-C", MACHINE_NOT_WORKING )
-COMP( 1994, a486ap4, ibm5170, 0, at486, 0, at_state, init_at, "Asus", "PVI-486AP4", MACHINE_NOT_WORKING )
-COMP( 1994, a486sp3, ibm5170, 0, at486, 0, at_state, init_at, "Asus", "PVI-486SP3", MACHINE_NOT_WORKING )
-COMP( 1994, a486sp3g, ibm5170, 0, at486, 0, at_state, init_at, "Asus", "PCI/I-486SP3G", MACHINE_NOT_WORKING )
-COMP( 1995, aa486s, ibm5170, 0, at486, 0, at_state, init_at, "Asus", "PCI/I-A486S", MACHINE_NOT_WORKING )
-COMP( 1994, a486sv1, ibm5170, 0, at486, 0, at_state, init_at, "Asus", "VL/EISA-486SV1", MACHINE_NOT_WORKING )
-COMP( 1994, a486sv2g, ibm5170, 0, at486, 0, at_state, init_at, "Asus", "VL/I-486SV2G", MACHINE_NOT_WORKING )
-COMP( 199?, isa386u30, ibm5170, 0, at386, 0, at_state, init_at, "Asus", "ISA-386U30 REV.2.2", MACHINE_NOT_WORKING )
-COMP( 1989, isa386c, ibm5170, 0, at386, 0, at_state, init_at, "Asus", "ISA-386C", MACHINE_NOT_WORKING )
-COMP( 199?, mb8433uud, ibm5170, 0, at486, 0, at_state, init_at, "Biostar", "MB8433-UUD-A", MACHINE_NOT_WORKING ) // lands in Award BootBlock BIOS
-COMP( 199?, mb1212c, ibm5170, 0, atvga, 0, at_state, init_at, "Biostar", "MB-1212C", MACHINE_NOT_WORKING )
COMP( 1990, c386sx16, ibm5170, 0, at386sx, 0, at_state, init_at, "Commodore Business Machines", "386SX-16", MACHINE_NOT_WORKING )
COMP( 199?, dt386, ibm5170, 0, at386, 0, at_state, init_at, "Commodore Business Machines", "DT386", MACHINE_NOT_WORKING )
COMP( 199?, dt486, ibm5170, 0, at486, 0, at_state, init_at, "Commodore Business Machines", "DT486", MACHINE_NOT_WORKING )
@@ -2882,79 +3893,178 @@ COMP( 1991, c386sxlt, ibm5170, 0, at386sx, 0, at_state, init_at
COMP( 199?, csl286, ibm5170, 0, atvga, 0, at_state, init_at, "Commodore Business Machines", "SL 286-16", MACHINE_NOT_WORKING )
COMP( 199?, comt386, ibm5170, 0, at386, 0, at_state, init_at, "Commodore Business Machines", "Tower 386", MACHINE_NOT_WORKING )
COMP( 199?, comt486, ibm5170, 0, at486, 0, at_state, init_at, "Commodore Business Machines", "Tower 486", MACHINE_NOT_WORKING )
-COMP( 1988, dsys200, ibm5170, 0, atvga, 0, at_state, init_at, "Dell Computer Corporation", "System 200", MACHINE_NOT_WORKING )
-COMP( 1995, ficpio2, ibm5170, 0, ficpio2, 0, at_state, init_atpci, "First International Computer", "486-PIO-2", MACHINE_NOT_WORKING )
-COMP( 1994, ficvipio, ibm5170, 0, at486, 0, at_state, init_at, "First International Computer", "486-VIP-IO", MACHINE_NOT_WORKING )
-COMP( 199?, ficvipio2, ibm5170, 0, at486, 0, at_state, init_at, "First International Computer", "486-VIP-IO2", MACHINE_NOT_WORKING )
-COMP( 198?, hot304, ibm5170, 0, at386, 0, at_state, init_at, "Shuttle Computer International", "HOT-304", MACHINE_NOT_WORKING )
-COMP( 199?, hot409, ibm5170, 0, at486, 0, at_state, init_at, "Shuttle Computer International", "HOT-409", MACHINE_NOT_WORKING )
-COMP( 198?, aubam12s2, ibm5170, 0, atvga, 0, at_state, init_at, "AUVA COMPUTER, INC.", "BAM/12-S2", MACHINE_NOT_WORKING )
COMP( 198?, wy220001, ibm5170, 0, ibm5162, 0, at_state, init_at, "Wyse", "WYSEpc 286", MACHINE_NOT_WORKING )
-COMP( 198?, mkp286, ibm5170, 0, atvga, 0, at_state, init_at, "Morse", "KP-286", MACHINE_NOT_WORKING )
-COMP( 198?, pccm205, ibm5170, 0, atvga, 0, at_state, init_at, "PC-Chips", "M205", MACHINE_NOT_WORKING )
-COMP( 199?, pccm321, ibm5170, 0, at386, 0, at_state, init_at, "PC-Chips", "M321", MACHINE_NOT_WORKING )
-COMP( 199?, pccm326, ibm5170, 0, at386, 0, at_state, init_at, "PC-Chips", "M326", MACHINE_NOT_WORKING )
-COMP( 199?, pccm919, ibm5170, 0, at486, 0, at_state, init_at, "PC-Chips", "M919", MACHINE_NOT_WORKING )
-COMP( 198?, snomi286, ibm5170, 0, atvga, 0, at_state, init_at, "Snobol", "Mini 286", MACHINE_NOT_WORKING )
-COMP( 198?, cmpa286, ibm5170, 0, atvga, 0, at_state, init_at, "CMP enterprise CO.LTD.", "286 motherboard", MACHINE_NOT_WORKING )
-COMP( 198?, bam16a0, ibm5170, 0, atvga, 0, at_state, init_at, "AUVA", "VIP-M21502A BAM16-A0", MACHINE_NOT_WORKING )
-COMP( 199?, olim203, ibm5170, 0, atvga, 0, at_state, init_at, "Olivetti", "M203 motherboard", MACHINE_NOT_WORKING )
-COMP( 199?, cdtekg2, ibm5170, 0, atvga, 0, at_state, init_at, "CDTEK", "286 motherboard with Headland G2 chipset", MACHINE_NOT_WORKING )
-COMP( 199?, octekg2, ibm5170, 0, atvga, 0, at_state, init_at, "Octek", "286 mainboard with Headland G2 chipset", MACHINE_NOT_WORKING )
-COMP( 199?, headg2, ibm5170, 0, atvga, 0, at_state, init_at, "<unknown>", "286 motherboards with Headland G2 chipset", MACHINE_NOT_WORKING )
-COMP( 199?, sy019hi, ibm5170, 0, at386, 0, at_state, init_at, "Soyo", "SY-019H and SY-019I", MACHINE_NOT_WORKING )
-COMP( 199?, suntac5, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "286 motherboards with 5-chip SUNTAC chipset", MACHINE_NOT_WORKING )
-COMP( 198?, vlsi5, ibm5170, 0, atvga, 0, at_state, init_at, "<unknown>", "286 motherboards with 5-chip VLSI chipset", MACHINE_NOT_WORKING )
-COMP( 199?, frxc402, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "386 motherboards with a FOREX FRX46C402/FRX36C300/SIS85C206 chipset", MACHINE_NOT_WORKING )
-COMP( 199?, opti495xlc,ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "386 motherboards using a OPTi 82C495XLC chipset", MACHINE_NOT_WORKING )
-COMP( 198?, dfi386, ibm5170, 0, at386, 0, at_state, init_at, "DFI", "386-20.REV0", MACHINE_NOT_WORKING )
-COMP( 198?, pem2530, ibm5170, 0, at386, 0, at_state, init_at, "DTK", "PEM 2539", MACHINE_NOT_WORKING )
-COMP( 198?, u3911v3, ibm5170, 0, atvga, 0, at_state, init_at, "Uniron", "U3911-V3", MACHINE_NOT_WORKING )
-COMP( 199?, mba009, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "HLB-286 MBA-009", MACHINE_NOT_WORKING )
-COMP( 1985, k286i, ibm5170, 0, k286i, 0, at_state, init_at, "Kaypro", "286i", MACHINE_NOT_WORKING )
COMP( 198?, elanht286, ibm5170, 0, ibm5162, 0, at_state, init_at, "Leanord SA", "Elan High Tech 286", MACHINE_NOT_WORKING )
-COMP( 1991, t2000sx, ibm5170, 0, at386sx, 0, at_state, init_at, "Toshiba", "T2000SX", MACHINE_NOT_WORKING )
-COMP( 1992, mbc28, ibm5170, 0, at386sx, 0, at_state, init_at, "Sanyo", "MBC-28", MACHINE_NOT_WORKING ) // Complains about missing mouse hardware
COMP( 199?, sarcpc, ibm5170, 0, ibm5162, 0, at_state, init_at, "<unknown>", "80286 Standard System (SARC RC2015 chipset)", MACHINE_NOT_WORKING )
-COMP( 199?, sm38640f, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "SM 386-40F (Forex chipset)", MACHINE_NOT_WORKING )
-COMP( 199?, 4nd04a, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "386-4N-D04A (UMC chipset)", MACHINE_NOT_WORKING )
-COMP( 199?, bi025c, ibm5170, 0, atvga, 0, at_state, init_at, "<unknown>", "BI-025C HT-12 286 (HT12/A chipset)", MACHINE_NOT_WORKING )
-COMP( 199?, kma202f, ibm5170, 0, atvga, 0, at_state, init_at, "<unknown>", "KMA-202F-12R (Winbond chipset)", MACHINE_NOT_WORKING )
-COMP( 199?, sy012, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "SY-012 16/25 386MB VER: 5.2", MACHINE_NOT_WORKING )
-COMP( 198?, gs611606a, ibm5170, 0, at386, 0, at_state, init_at, "Goldstar", "GOLDSTAR P/N 611-606A Rev 1.0A", MACHINE_NOT_WORKING )
-COMP( 199?, tam3340ma0,ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "TAM/33/40-MA0 (CM318R00,M31-R00)", MACHINE_NOT_WORKING )
-COMP( 199?, alim1429, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "386 motherboards using the ALi M1429 A1 and M1431 A2 chipset", MACHINE_NOT_WORKING )
-COMP( 199?, 386sc, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "386 SC Rev A2", MACHINE_NOT_WORKING )
-COMP( 199?, 386sc2c, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "386 motherboard using the Symphony chipset", MACHINE_NOT_WORKING )
-COMP( 199?, pt581392, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "386 Motherboard using the Forex FRX46C402 + FRX46C411 + SiS 85C206 chipset", MACHINE_NOT_WORKING )
-COMP( 1986, pcd2, ibm5170, 0, ibm5170, 0, at_state, init_at, "Siemens", "PCD-2", MACHINE_NOT_WORKING )
-COMP( 199?, pcd3nsx, ibm5170, 0, at386sx, 0, at_state, init_at, "Siemens-Nixdorf", "PCD-3Nsx Notebook Computer", MACHINE_NOT_WORKING )
-COMP( 199?, pcd4x, ibm5170, 0, at486, 0, at_state, init_at, "Siemens-Nixdorf", "PCD-4H, PCD-4M", MACHINE_NOT_WORKING )
-COMP( 1995, pcd4nl, ibm5170, 0, at486, 0, at_state, init_at, "Siemens-Nixdorf", "PCD-4NL", MACHINE_NOT_WORKING )
-COMP( 1993, pcd4nd, ibm5170, 0, at486, 0, at_state, init_at, "Siemens-Nixdorf", "PCD-4ND", MACHINE_NOT_WORKING )
COMP( 19??, toptek286, ibm5170, 0, ibm5162, 0, at_state, init_at, "Toptek Micro Computer", "286 Turbo", MACHINE_NOT_WORKING )
-COMP( 1992, walk386sx, ibm5170, 0, at386sx, 0, at_state, init_at, "Triumph-Adler", "Walkstation 386 SX", MACHINE_NOT_WORKING ) // screen remains blank
-COMP( 1992, walk386dx, ibm5170, 0, at386, 0, at_state, init_at, "Triumph-Adler", "Walkstation 386DX", MACHINE_NOT_WORKING ) // screen remains blank
-COMP( 1987, comportii ,ibm5170, 0, comportii, 0, at_state, init_at, "Compaq", "Portable II", MACHINE_NOT_WORKING )
-COMP( 1987, comportiii,ibm5170, 0, comportiii,0, at_state, init_at, "Compaq", "Portable III", MACHINE_NOT_WORKING )
-COMP( 1988, comslt286, ibm5170, 0, atvga, 0, at_state, init_at, "Compaq", "SLT/286", MACHINE_NOT_WORKING )
-COMP( 1986, ews286, ibm5170, 0, ews286, 0, at_state, init_at, "Ericsson", "Ericsson WS286", MACHINE_NOT_WORKING )
COMP( 198?, ev1806, ibm5170, 0, ibm5162, 0, at_state, init_at, "Everex Systems", "EV-1806", MACHINE_NOT_WORKING ) // continuous beeps (RAM not detected?)
COMP( 198?, ev1815, ibm5170, 0, ibm5162, 0, at_state, init_at, "Everex Systems", "EV-1815", MACHINE_NOT_WORKING ) // continuous beeps (RAM not detected?)
-COMP( 19??, ht12a, ibm5170, 0, ibm5162, 0, at_state, init_at, "unknown", "unknown 286 AT clones (HT12/A chipset)", MACHINE_NOT_WORKING )
COMP( 19??, kt216wb5, ibm5170, 0, ibm5162, 0, at_state, init_at, "KT Technology", "KT216WB5-HI Rev.2", MACHINE_NOT_WORKING )
COMP( 198?, lm103s, ibm5170, 0, ibm5162, 0, at_state, init_at, "unknown", "LM-103S", MACHINE_NOT_WORKING )
COMP( 198?, magb233, ibm5170, 0, ibm5162, 0, at_state, init_at, "Magitronic Technology", "Magitronic B233", MACHINE_NOT_WORKING )
COMP( 198?, magb236, ibm5170, 0, ibm5162, 0, at_state, init_at, "Magitronic Technology", "Magitronic B236", MACHINE_NOT_WORKING )
COMP( 19??, mat286, ibm5170, 0, ibm5162, 0, at_state, init_at, "unknown", "MAT286 Rev.D", MACHINE_NOT_WORKING )
+COMP( 1986, pcd2, ibm5170, 0, ibm5170, 0, at_state, init_at, "Siemens", "PCD-2", MACHINE_NOT_WORKING )
+COMP( 19??, ht12a, ibm5170, 0, atvga, 0, at_state, init_at, "unknown", "unknown 286 AT clones (HT12/A chipset)", MACHINE_NOT_WORKING )
+COMP( 199?, suntac5, ibm5170, 0, atvga, 0, at_state, init_at, "<unknown>", "286 motherboards with 5-chip SUNTAC chipset", MACHINE_NOT_WORKING )
+COMP( 199?, headg2, ibm5170, 0, atvga, 0, at_state, init_at, "<unknown>", "286 motherboards with Headland G2 chipset", MACHINE_NOT_WORKING )
+COMP( 198?, vlsi5, ibm5170, 0, atvga, 0, at_state, init_at, "<unknown>", "286 motherboards with 5-chip VLSI chipset", MACHINE_NOT_WORKING )
+COMP( 199?, bi025c, ibm5170, 0, atvga, 0, at_state, init_at, "<unknown>", "BI-025C HT-12 286 (HT12/A chipset)", MACHINE_NOT_WORKING )
+COMP( 199?, kma202f, ibm5170, 0, atvga, 0, at_state, init_at, "<unknown>", "KMA-202F-12R (Winbond chipset)", MACHINE_NOT_WORKING )
+COMP( 198?, td60c, ibm5170, 0, atvga, 0, at_state, init_at, "<unknown>", "TD60C", MACHINE_NOT_WORKING )
+COMP( 198?, aubam12s2, ibm5170, 0, atvga, 0, at_state, init_at, "AUVA COMPUTER, INC.", "BAM/12-S2", MACHINE_NOT_WORKING )
+COMP( 198?, bam16a0, ibm5170, 0, atvga, 0, at_state, init_at, "AUVA", "VIP-M21502A BAM16-A0", MACHINE_NOT_WORKING )
+COMP( 199?, mb1212c, ibm5170, 0, atvga, 0, at_state, init_at, "Biostar", "MB-1212C", MACHINE_NOT_WORKING )
+COMP( 199?, cdtekg2, ibm5170, 0, atvga, 0, at_state, init_at, "CDTEK", "286 mainboard with Headland G2 chipset", MACHINE_NOT_WORKING )
+COMP( 198?, cmpa286, ibm5170, 0, atvga, 0, at_state, init_at, "CMP enterprise CO.LTD.", "286 motherboard", MACHINE_NOT_WORKING )
+COMP( 1988, dsys200, ibm5170, 0, atvga, 0, at_state, init_at, "Dell Computer Corporation", "System 200", MACHINE_NOT_WORKING )
+COMP( 198?, mkp286, ibm5170, 0, atvga, 0, at_state, init_at, "Morse", "KP-286", MACHINE_NOT_WORKING )
+COMP( 199?, octekg2, ibm5170, 0, atvga, 0, at_state, init_at, "Octek", "286 motherboard with Headland G2 chipset", MACHINE_NOT_WORKING )
+COMP( 199?, olim203, ibm5170, 0, atvga, 0, at_state, init_at, "Olivetti", "M203 motherboard", MACHINE_NOT_WORKING )
+COMP( 198?, pccm205, ibm5170, 0, atvga, 0, at_state, init_at, "PC-Chips", "M205", MACHINE_NOT_WORKING )
+COMP( 198?, pccm216, ibm5170, 0, atvga, 0, at_state, init_at, "PC-Chips", "M216", MACHINE_NOT_WORKING )
+COMP( 198?, snomi286, ibm5170, 0, atvga, 0, at_state, init_at, "Snobol", "Mini 286", MACHINE_NOT_WORKING )
+COMP( 198?, u3911v3, ibm5170, 0, atvga, 0, at_state, init_at, "Uniron", "U3911-V3", MACHINE_NOT_WORKING )
COMP( 1986, ncrpc8, ibm5170, 0, atvga, 0, at_state, init_at, "NCR", "PC-8", MACHINE_NOT_WORKING )
-COMP( 1987, n8810m15, ibm5170, 0, n8810m15, 0, at_state, init_at, "Nixdorf Computer AG", "8810 M15", MACHINE_NOT_WORKING )
-COMP( 1990, n8810m16c, ibm5170, 0, n8810m15, 0, at_state, init_at, "Nixdorf Computer AG", "8810 M16 CGA version", MACHINE_NOT_WORKING )
+COMP( 1988, comslt286, ibm5170, 0, atvga, 0, at_state, init_at, "Compaq", "SLT/286", MACHINE_NOT_WORKING )
COMP( 1990, n8810m16v, ibm5170, 0, atvga, 0, at_state, init_at, "Nixdorf Computer AG", "8810 M16 VGA version", MACHINE_NOT_WORKING )
+COMP( 198?, o286foxii, ibm5170, 0, atvga, 0, at_state, init_at, "Octek", "Fox II", MACHINE_NOT_WORKING )
+COMP( 1987, m290, ibm5170, 0, atvga, 0, at_state, init_at, "Olivetti", "M290", MACHINE_NOT_WORKING )
+COMP( 1991, pcd204, ibm5170, 0, atvga, 0, at_state, init_at, "Philips", "PCD204 (PCD200 series)", MACHINE_NOT_WORKING )
COMP( 1990, n8810m30, ibm5170, 0, neat, 0, at_state, init_at, "Nixdorf Computer AG", "8810 M30", MACHINE_NOT_WORKING )
+COMP( 198?, elt286b, ibm5170, 0, neat, 0, at_state, init_at, "Chaintech", "ELT-286B-160B(E)", MACHINE_NOT_WORKING )
+COMP( 1985, k286i, ibm5170, 0, k286i, 0, at_state, init_at, "Kaypro", "286i", MACHINE_NOT_WORKING )
+COMP( 1987, comportii ,ibm5170, 0, comportii, 0, at_state, init_at, "Compaq", "Portable II", MACHINE_NOT_WORKING )
+COMP( 1987, comportiii,ibm5170, 0, comportiii,0, at_state, init_at, "Compaq", "Portable III", MACHINE_NOT_WORKING )
+COMP( 1986, ews286, ibm5170, 0, ews286, 0, at_state, init_at, "Ericsson", "Ericsson WS286", MACHINE_NOT_WORKING )
+COMP( 1987, n8810m15, ibm5170, 0, n8810m15, 0, at_state, init_at, "Nixdorf Computer AG", "8810 M15", MACHINE_NOT_WORKING )
+COMP( 1990, n8810m16c, ibm5170, 0, n8810m15, 0, at_state, init_at, "Nixdorf Computer AG", "8810 M16 CGA version", MACHINE_NOT_WORKING )
COMP( 1986, n8810m55, ibm5170, 0, n8810m55, 0, at_state, init_at, "Nixdorf Computer AG", "8810 M55", MACHINE_NOT_WORKING )
-COMP( 1987, m290, ibm5170, 0, atvga, 0, at_state, init_at, "Olivetti", "M290", MACHINE_NOT_WORKING )
-COMP( 1993, lion3500, ibm5170, 0, at486, 0, at_state, init_at, "Lion", "3500", MACHINE_NOT_WORKING )
-COMP( 198?, o286foxii, ibm5170, 0, atvga, 0, at_state, init_at, "Octek", "Fox II", MACHINE_NOT_WORKING )
+COMP( 199?, alaleolx, ibm5170, 0, at386sx, 0, at_state, init_at, "Alaris RYC", "LEOPARD LX", MACHINE_NOT_WORKING )
+COMP( 199?, anch386s, ibm5170, 0, at386sx, 0, at_state, init_at, "ANIX", "CH-386S-16/20/25G", MACHINE_NOT_WORKING )
+COMP( 1993, cxsxd, ibm5170, 0, at386sx, 0, at_state, init_at, "CX Technology", "CX SXD", MACHINE_NOT_WORKING )
+COMP( 199?, ppm3333p, ibm5170, 0, at386sx, 0, at_state, init_at, "DTK Computer", "PPM-3333P", MACHINE_NOT_WORKING )
+COMP( 199?, sh386sx20, ibm5170, 0, at386sx, 0, at_state, init_at, "Shuttle", "386SX REV 2.0A", MACHINE_NOT_WORKING )
+COMP( 1991, t2000sx, ibm5170, 0, at386sx, 0, at_state, init_at, "Toshiba", "T2000SX", MACHINE_NOT_WORKING )
+COMP( 1992, mbc28, ibm5170, 0, at386sx, 0, at_state, init_at, "Sanyo", "MBC-28", MACHINE_NOT_WORKING ) // Complains about missing mouse hardware
+COMP( 199?, scsxaio, ibm5170, 0, at386sx, 0, at_state, init_at, "Peacock", "386sx Ver. 2.0 motherboard SCsxAIO", MACHINE_NOT_WORKING )
+COMP( 199?, mokp386sx, ibm5170, 0, at386sx, 0, at_state, init_at, "MORSE", "KP 386SX V2.21", MACHINE_NOT_WORKING )
+COMP( 199?, scamp386sx,ibm5170, 0, at386sx, 0, at_state, init_at, "<unknown>", "386sx motherboards using the SCAMPSX chipset", MACHINE_NOT_WORKING )
+COMP( 199?, alim1217, ibm5170, 0, at386sx, 0, at_state, init_at, "<unknown>", "386sx motherboards using the ALi M1217 chipset", MACHINE_NOT_WORKING )
+COMP( 199?, op82c283, ibm5170, 0, at386sx, 0, at_state, init_at, "<unknown>", "386sx motherboards using the OPTi 82C283 chipset", MACHINE_NOT_WORKING )
+COMP( 199?, op82c291, ibm5170, 0, at386sx, 0, at_state, init_at, "<unknown>", "386sx motherboards using the OPTi 82C291 chipset", MACHINE_NOT_WORKING )
+COMP( 19??, ht18c, ibm5170, 0, at386sx, 0, at_state, init_at, "<unknown>", "unknown 286 AT clones (HT18/C chipset)", MACHINE_NOT_WORKING )
+COMP( 199?, ocpanii, ibm5170, 0, at386sx, 0, at_state, init_at, "Octek", "Panther II", MACHINE_NOT_WORKING )
+COMP( 199?, pt319a, ibm5170, 0, at386sx, 0, at_state, init_at, "Pine", "PT-319A", MACHINE_NOT_WORKING )
+COMP( 199?, td70a, ibm5170, 0, at386sx, 0, at_state, init_at, "<unknown>", "TD70A and TD70AN", MACHINE_NOT_WORKING )
+COMP( 199?, td70n, ibm5170, 0, at386sx, 0, at_state, init_at, "<unknown>", "TD70N", MACHINE_NOT_WORKING )
+COMP( 199?, pccm396f, ibm5170, 0, at386sx, 0, at_state, init_at, "PC-Chips", "M396F", MACHINE_NOT_WORKING )
+COMP( 199?, elt386sx, ibm5170, 0, at386sx, 0, at_state, init_at, "Elitegroup", "ELT-386SX-160BE", MACHINE_NOT_WORKING )
+COMP( 199?, pcd3nsx, ibm5170, 0, at386sx, 0, at_state, init_at, "Siemens-Nixdorf", "PCD-3Nsx Notebook Computer", MACHINE_NOT_WORKING )
+COMP( 199?, mbc18nb, ibm5170, 0, at386sx, 0, at_state, init_at, "Sanyo", "MBC-18NB", MACHINE_NOT_WORKING )
+COMP( 1992, walk386sx, ibm5170, 0, at386sx, 0, at_state, init_at, "Triumph-Adler", "Walkstation 386 SX", MACHINE_NOT_WORKING ) // screen remains blank
+COMP( 199?, frxc402, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "386 motherboards with a FOREX FRX46C402/FRX36C300/SIS85C206 chipset", MACHINE_NOT_WORKING )
+COMP( 199?, opti495slc,ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "386 motherboards using a OPTi 82C495SLC chipset", MACHINE_NOT_WORKING )
+COMP( 199?, opti495xlc,ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "386 motherboards using a OPTi 82C495XLC chipset", MACHINE_NOT_WORKING )
+COMP( 199?, mx83c305, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "386 motherboards using the MX83C305(A)(FC)/MX83C05(A)(FC) chipset", MACHINE_NOT_WORKING )
+COMP( 199?, mba009, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "HLB-286 MBA-009", MACHINE_NOT_WORKING )
+COMP( 199?, sm38640f, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "SM 386-40F", MACHINE_NOT_WORKING )
+COMP( 199?, sy012, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "SY-012 16/25 386MB VER: 5.2", MACHINE_NOT_WORKING )
+COMP( 199?, tam3340ma0,ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "TAM/33/40-MA0", MACHINE_NOT_WORKING )
+COMP( 199?, ges9051n, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "GES 9051N-386C VER -0.01", MACHINE_NOT_WORKING )
+COMP( 199?, alim1419, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "386 motherboards using the ALi M1419 chipset", MACHINE_NOT_WORKING )
+COMP( 199?, alim1429, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "386 motherboards using the ALi M1429 A1 and M1431 A2 chipset", MACHINE_NOT_WORKING )
+COMP( 199?, 386sc, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "386 SC Rev A2", MACHINE_NOT_WORKING )
+COMP( 199?, op82c381, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "386 motherboards using the OPTi 82C381 chipset", MACHINE_NOT_WORKING )
+COMP( 199?, op82c391, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "386 motherboards using the OPTi 82C391 chipset", MACHINE_NOT_WORKING )
+COMP( 199?, 386sc2c, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "386 motherboard using the Symphony chipset", MACHINE_NOT_WORKING )
+COMP( 199?, um82c481af,ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "386 motherboards using the UMC UM82C481AF chipset", MACHINE_NOT_WORKING )
+COMP( 199?, um82c491f, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "386 motherboard using the UMC UM82C491F chipset", MACHINE_NOT_WORKING )
+COMP( 199?, um82c493f, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "386 motherboards using the UMC UM82C491F + UM82C493F chipset or BIOTEQ equivalents", MACHINE_NOT_WORKING )
+COMP( 199?, 4nd04a, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "386-4N-D04A (UMC chipset)", MACHINE_NOT_WORKING )
+COMP( 199?, pt581392, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "386 motherboard using the Forex FRX46C402 + FRX46C411 + SiS 85C206 chipset", MACHINE_NOT_WORKING )
+COMP( 198?, cs8230, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "386 motherboards using the CS8230 chipset", MACHINE_NOT_WORKING )
+COMP( 199?, sisrabb, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "386 motherboards using the SiS Rabbit chipset", MACHINE_NOT_WORKING )
+COMP( 1991, fu340, ibm5170, 0, at386, 0, at_state, init_at, "Abit", "FU340", MACHINE_NOT_WORKING )
+COMP( 199?, alacou, ibm5170, 0, at386, 0, at_state, init_at, "Alaris", "Cougar", MACHINE_NOT_WORKING )
+COMP( 199?, amibaby, ibm5170, 0, at386, 0, at_state, init_at, "AMI", "Mark V Baby Screamer", MACHINE_NOT_WORKING )
+COMP( 199?, isa386u30, ibm5170, 0, at386, 0, at_state, init_at, "Asus", "ISA-386U30 REV.2.2", MACHINE_NOT_WORKING )
+COMP( 1989, isa386c, ibm5170, 0, at386, 0, at_state, init_at, "Asus", "ISA-386C", MACHINE_NOT_WORKING )
+COMP( 199?, tam25p2, ibm5170, 0, at386, 0, at_state, init_at, "AUVA", "TAM/25-P2 M31720P", MACHINE_NOT_WORKING )
+COMP( 199?, mb133340, ibm5170, 0, at386, 0, at_state, init_at, "Biostar", "MB-1340UCQ-B", MACHINE_NOT_WORKING )
+COMP( 199?, chn333sc, ibm5170, 0, at386, 0, at_state, init_at, "Chaintech", "333SC", MACHINE_NOT_WORKING )
+COMP( 199?, al486vd, ibm5170, 0, at386, 0, at_state, init_at, "Daewoo", "AL486V-D Rev:1.1", MACHINE_NOT_WORKING )
+COMP( 198?, dfi386, ibm5170, 0, at386, 0, at_state, init_at, "DFI", "386-20.REV0", MACHINE_NOT_WORKING )
+COMP( 198?, pem2530, ibm5170, 0, at386, 0, at_state, init_at, "DTK", "PEM 2539", MACHINE_NOT_WORKING )
+COMP( 198?, gs611606a, ibm5170, 0, at386, 0, at_state, init_at, "Goldstar", "GOLDSTAR P/N 611-606A Rev 1.0A", MACHINE_NOT_WORKING )
+COMP( 1988, ecs38632, ibm5170, 0, at386, 0, at_state, init_at, "Elitegroup Computer Systems", "ECS-386/32", MACHINE_NOT_WORKING )
+COMP( 1992, ecsum386, ibm5170, 0, at386, 0, at_state, init_at, "Elitegroup Computer Systems", "UM386 (Rev 1.1)", MACHINE_NOT_WORKING )
+COMP( 199?, ecsfx3000, ibm5170, 0, at386, 0, at_state, init_at, "Elitegroup Computer Systems", "FX-3000 REV1.0", MACHINE_NOT_WORKING )
+COMP( 19??, smih0107, ibm5170, 0, at386, 0, at_state, init_at, "Forex Computer Company", "unknown 386 AT clone with Forex chipset", MACHINE_NOT_WORKING )
+COMP( 199?, frx386c, ibm5170, 0, at386, 0, at_state, init_at, "Micro-Express Inc.", "Forex 386 Cache", MACHINE_NOT_WORKING )
COMP( 1992, ocjagv, ibm5170, 0, at386, 0, at_state, init_at, "Octek", "Jaguar V v1.4", MACHINE_NOT_WORKING )
+COMP( 199?, op386wb, ibm5170, 0, at386, 0, at_state, init_at, "OPTi", "OPTi 386WB VER.1.0", MACHINE_NOT_WORKING )
+COMP( 199?, pccm321, ibm5170, 0, at386, 0, at_state, init_at, "PC-Chips", "M321", MACHINE_NOT_WORKING )
+COMP( 199?, pccm326, ibm5170, 0, at386, 0, at_state, init_at, "PC-Chips", "M326", MACHINE_NOT_WORKING )
+COMP( 199?, qdu386dx, ibm5170, 0, at386, 0, at_state, init_at, "<unknown>", "QD-U386DX VER 1.0", MACHINE_NOT_WORKING )
+COMP( 199?, fic4386vchd,ibm5170,0, at486, 0, at_state, init_at, "First International Computer", "4386-VC-HD", MACHINE_NOT_WORKING )
+COMP( 198?, hot304, ibm5170, 0, at386, 0, at_state, init_at, "Shuttle Computer International", "HOT-304", MACHINE_NOT_WORKING )
+COMP( 199?, sy019hi, ibm5170, 0, at386, 0, at_state, init_at, "Soyo", "SY-019H and SY-019I", MACHINE_NOT_WORKING )
+COMP( 199?, uni386w, ibm5170, 0, at386, 0, at_state, init_at, "UNICHIP", "386W 367C REV 1.0", MACHINE_NOT_WORKING )
+COMP( 1992, walk386dx, ibm5170, 0, at386, 0, at_state, init_at, "Triumph-Adler", "Walkstation 386DX", MACHINE_NOT_WORKING ) // screen remains blank
+COMP( 199?, via4386vio,ibm5170, 0, at486, 0, at_state, init_at, "<unknown>", "Via 4386 VIO / Highscreen universal board", MACHINE_NOT_WORKING )
+COMP( 199?, alim1489, ibm5170, 0, at486, 0, at_state, init_at, "<unknown>", "486 motherboards using the ALi 1487/1489 chipset", MACHINE_NOT_WORKING )
+COMP( 199?, sis85c471, ibm5170, 0, at486, 0, at_state, init_at, "<unknown>", "486 motherboards using the SiS 85C471/85C407 chipset", MACHINE_NOT_WORKING )
+COMP( 199?, um8886, ibm5170, 0, at486, 0, at_state, init_at, "<unknown>", "486 motherboards using the UMC UM8886/UM8881 chipset", MACHINE_NOT_WORKING )
+COMP( 199?, um8498f, ibm5170, 0, at486, 0, at_state, init_at, "<unknown>", "486 motherboards using the UMC UM8498F, UM8496F chipset", MACHINE_NOT_WORKING )
+COMP( 199?, abpb4, ibm5170, 0, at486, 0, at_state, init_at, "Abit", "AB-PB4", MACHINE_NOT_WORKING )
+COMP( 199?, abpw4, ibm5170, 0, at486, 0, at_state, init_at, "Abit", "AB-PW4", MACHINE_NOT_WORKING )
+COMP( 199?, alator2, ibm5170, 0, at486, 0, at_state, init_at, "Alaris", "Tornado 2", MACHINE_NOT_WORKING )
+COMP( 199?, mb4d33, ibm5170, 0, at486, 0, at_state, init_at, "Aquarius System (ASI)", "MB-4D33/50NR", MACHINE_NOT_WORKING )
+COMP( 199?, a486sv2, ibm5170, 0, at486, 0, at_state, init_at, "Asus", "ISA-486SV2", MACHINE_NOT_WORKING )
+COMP( 1994, a486ap4, ibm5170, 0, at486, 0, at_state, init_at, "Asus", "PVI-486AP4", MACHINE_NOT_WORKING )
+COMP( 1994, a486sp3, ibm5170, 0, at486, 0, at_state, init_at, "Asus", "PVI-486SP3", MACHINE_NOT_WORKING )
+COMP( 1994, a486sp3g, ibm5170, 0, at486, 0, at_state, init_at, "Asus", "PCI/I-486SP3G", MACHINE_NOT_WORKING )
+COMP( 1995, aa486s, ibm5170, 0, at486, 0, at_state, init_at, "Asus", "PCI/I-A486S", MACHINE_NOT_WORKING )
+COMP( 1994, a486sv1, ibm5170, 0, at486, 0, at_state, init_at, "Asus", "VL/EISA-486SV1", MACHINE_NOT_WORKING )
+COMP( 1994, a486sv2g, ibm5170, 0, at486, 0, at_state, init_at, "Asus", "VL/I-486SV2G", MACHINE_NOT_WORKING )
+COMP( 199?, mb8433uud, ibm5170, 0, at486, 0, at_state, init_at, "Biostar", "MB8433-UUD-A", MACHINE_NOT_WORKING ) // lands in Award BootBlock BIOS
+COMP( 199?, ch4slez1, ibm5170, 0, at486, 0, at_state, init_at, "Chaintech", "486SLE M106 4SLE-Z1", MACHINE_NOT_WORKING )
+COMP( 199?, ch491e, ibm5170, 0, at486, 0, at_state, init_at, "Chicony", "CH-491E", MACHINE_NOT_WORKING )
+COMP( 199?, 486ccv, ibm5170, 0, at486, 0, at_state, init_at, "Diamond Flower, Inc. (DFI)", "486-CCV", MACHINE_NOT_WORKING )
+COMP( 199?, pkm0038s, ibm5170, 0, at486, 0, at_state, init_at, "DTK", "PKM-0038S aka Gemlight GMB-486SG", MACHINE_NOT_WORKING )
+COMP( 199?, um486, ibm5170, 0, at486, 0, at_state, init_at, "Elitegroup", "UM486/UM486sx", MACHINE_NOT_WORKING )
+COMP( 199?, um486v, ibm5170, 0, at486, 0, at_state, init_at, "Elitegroup", "UM486V-AIO", MACHINE_NOT_WORKING )
+COMP( 199?, ec4915aio, ibm5170, 0, at486, 0, at_state, init_at, "Elitegroup", "UC4915 A AIO", MACHINE_NOT_WORKING )
+COMP( 199?, fic4386vcv,ibm5170, 0, at486, 0, at_state, init_at, "First International Computer", "4386-VC-V", MACHINE_NOT_WORKING )
+COMP( 1994, ficgiovt2, ibm5170, 0, at486, 0, at_state, init_at, "First International Computer", "486-GIO-VT2", MACHINE_NOT_WORKING )
+COMP( 1994, ficvipio, ibm5170, 0, at486, 0, at_state, init_at, "First International Computer", "486-VIP-IO", MACHINE_NOT_WORKING )
+COMP( 199?, ficvipio2, ibm5170, 0, at486, 0, at_state, init_at, "First International Computer", "486-VIP-IO2", MACHINE_NOT_WORKING )
+COMP( 1995, ficpio2, ibm5170, 0, ficpio2, 0, at_state, init_atpci, "First International Computer", "486-PIO-2", MACHINE_NOT_WORKING )
+COMP( 199?, gete486vl, ibm5170, 0, at486, 0, at_state, init_at, "GENOA", "TurboExpress 486 VL", MACHINE_NOT_WORKING )
+COMP( 199?, ga486vf, ibm5170, 0, at486, 0, at_state, init_at, "Gigabyte", "GA-486VF", MACHINE_NOT_WORKING )
+COMP( 199?, ga486vs, ibm5170, 0, at486, 0, at_state, init_at, "Gigabyte", "GA-486VS", MACHINE_NOT_WORKING )
+COMP( 1992, a433cc, ibm5170, 0, at486, 0, at_state, init_at, "J-Bond", "A433C-C/A450C-C", MACHINE_NOT_WORKING )
+COMP( 199?, ms4125, ibm5170, 0, at486, 0, at_state, init_at, "MSI", "MS-4125", MACHINE_NOT_WORKING )
+COMP( 199?, ms4138, ibm5170, 0, at486, 0, at_state, init_at, "MSI", "MS-4138", MACHINE_NOT_WORKING )
+COMP( 199?, ochawk, ibm5170, 0, at486, 0, at_state, init_at, "Octek", "Hawk", MACHINE_NOT_WORKING )
+COMP( 199?, ochipcom, ibm5170, 0, at486, 0, at_state, init_at, "Octek", "Hippo COM", MACHINE_NOT_WORKING )
+COMP( 199?, ochipvlp, ibm5170, 0, at486, 0, at_state, init_at, "Octek", "Hippo VL+", MACHINE_NOT_WORKING )
+COMP( 199?, pccm912, ibm5170, 0, at486, 0, at_state, init_at, "PC-Chips", "M912", MACHINE_NOT_WORKING )
+COMP( 199?, pccm915i, ibm5170, 0, at486, 0, at_state, init_at, "PC-Chips", "M915i", MACHINE_NOT_WORKING )
+COMP( 199?, pccm919, ibm5170, 0, at486, 0, at_state, init_at, "PC-Chips", "M919", MACHINE_NOT_WORKING )
+COMP( 199?, pck486dx, ibm5170, 0, at486, 0, at_state, init_at, "Peacock", "PCK 486 DX", MACHINE_NOT_WORKING )
+COMP( 199?, pt430, ibm5170, 0, at486, 0, at_state, init_at, "Pine Technology", "PT-430", MACHINE_NOT_WORKING )
+COMP( 199?, px486p3, ibm5170, 0, at486, 0, at_state, init_at, "QDI", "PX486P3", MACHINE_NOT_WORKING )
+COMP( 199?, v4p895p3, ibm5170, 0, at486, 0, at_state, init_at, "QDI", "V4P895P3/SMT V5.0", MACHINE_NOT_WORKING )
+COMP( 199?, sto486wb, ibm5170, 0, at486, 0, at_state, init_at, "See-Thru", "Sto486Wb aka AUVA Cam-33-P2", MACHINE_NOT_WORKING )
+COMP( 199?, hot409, ibm5170, 0, at486, 0, at_state, init_at, "Shuttle Computer International", "HOT-409", MACHINE_NOT_WORKING )
+COMP( 199?, hot433, ibm5170, 0, at486, 0, at_state, init_at, "Shuttle Computer International", "HOT-433", MACHINE_NOT_WORKING )
+COMP( 199?, uniwb4407, ibm5170, 0, at486, 0, at_state, init_at, "UNICHIP", "486 WB 4407 REV 1.0", MACHINE_NOT_WORKING )
+COMP( 199?, sm48650usc,ibm5170, 0, at486, 0, at_state, init_at, "Vintage Sprite", "SM 486-50USC", MACHINE_NOT_WORKING )
+COMP( 199?, zito4dps, ibm5170, 0, at486, 0, at_state, init_at, "ZIDA", "Tomato board 4DPS", MACHINE_NOT_WORKING )
+COMP( 1995, pcd4nl, ibm5170, 0, at486, 0, at_state, init_at, "Siemens-Nixdorf", "PCD-4NL", MACHINE_NOT_WORKING )
+COMP( 1993, pcd4nd, ibm5170, 0, at486, 0, at_state, init_at, "Siemens-Nixdorf", "PCD-4ND", MACHINE_NOT_WORKING )
+COMP( 1993, lion3500, ibm5170, 0, at486, 0, at_state, init_at, "Lion", "3500", MACHINE_NOT_WORKING )
+COMP( 199?, pcd4x, ibm5170, 0, at486, 0, at_state, init_at, "Siemens-Nixdorf", "PCD-4H, PCD-4M", MACHINE_NOT_WORKING )
//COMP( 1988, nws286, ibm5170, 0, ews286, 0, at_state, at, "Nokia Data", "Nokia Data WS286", MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/atarig1.cpp b/src/mame/drivers/atarig1.cpp
index e2208708c98..7fef9366911 100644
--- a/src/mame/drivers/atarig1.cpp
+++ b/src/mame/drivers/atarig1.cpp
@@ -191,7 +191,7 @@ void atarig1_state::main_map(address_map &map)
map(0xfc8000, 0xfc8007).rw(FUNC(atarig1_state::a2d_data_r), FUNC(atarig1_state::a2d_select_w));
map(0xfd0000, 0xfd0000).r(m_jsa, FUNC(atari_jsa_ii_device::main_response_r));
map(0xfd8000, 0xfdffff).rw("eeprom", FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write)).umask16(0x00ff);
-/* AM_RANGE(0xfe0000, 0xfe7fff) AM_READ(from_r)*/
+/* map(0xfe0000, 0xfe7fff).r(FUNC(atarig1_state::from_r));*/
map(0xfe8000, 0xfe89ff).ram().w("palette", FUNC(palette_device::write16)).share("palette");
map(0xff0000, 0xff0fff).ram().share("rle");
map(0xff1000, 0xff1fff).ram();
diff --git a/src/mame/drivers/atarist.cpp b/src/mame/drivers/atarist.cpp
index e9245d092ee..ed3f4e723a1 100644
--- a/src/mame/drivers/atarist.cpp
+++ b/src/mame/drivers/atarist.cpp
@@ -1233,7 +1233,7 @@ void st_state::st_map(address_map &map)
map(0x000008, 0x1fffff).ram();
map(0x200000, 0x3fffff).ram();
map(0x400000, 0xf9ffff).rw(FUNC(st_state::berr_r), FUNC(st_state::berr_w));
- //AM_RANGE(0xfa0000, 0xfbffff) // mapped by the cartslot
+ //map(0xfa0000, 0xfbffff) // mapped by the cartslot
map(0xfc0000, 0xfeffff).rom().region(M68000_TAG, 0).w(FUNC(st_state::berr_w));
map(0xff8001, 0xff8001).rw(FUNC(st_state::mmu_r), FUNC(st_state::mmu_w));
map(0xff8200, 0xff8203).rw(FUNC(st_state::shifter_base_r), FUNC(st_state::shifter_base_w)).umask16(0x00ff);
@@ -1348,47 +1348,47 @@ void stbook_state::stbook_map(address_map &map)
{
map(0x000000, 0x1fffff).ram();
map(0x200000, 0x3fffff).ram();
-// AM_RANGE(0xd40000, 0xd7ffff) AM_ROM
+// map(0xd40000, 0xd7ffff).rom();
map(0xe00000, 0xe3ffff).rom().region(M68000_TAG, 0);
-// AM_RANGE(0xe80000, 0xebffff) AM_ROM
-// AM_RANGE(0xfa0000, 0xfbffff) AM_ROM // cartridge
+// map(0xe80000, 0xebffff).rom();
+// map(0xfa0000, 0xfbffff).rom(); // cartridge
map(0xfc0000, 0xfeffff).rom().region(M68000_TAG, 0);
-/* AM_RANGE(0xf00000, 0xf1ffff) AM_READWRITE(stbook_ide_r, stbook_ide_w)
- AM_RANGE(0xff8000, 0xff8001) AM_READWRITE(stbook_mmu_r, stbook_mmu_w)
- AM_RANGE(0xff8200, 0xff8203) AM_READWRITE(stbook_shifter_base_r, stbook_shifter_base_w)
- AM_RANGE(0xff8204, 0xff8209) AM_READWRITE(stbook_shifter_counter_r, stbook_shifter_counter_w)
- AM_RANGE(0xff820a, 0xff820b) AM_READWRITE8(stbook_shifter_sync_r, stbook_shifter_sync_w, 0xff00)
- AM_RANGE(0xff820c, 0xff820d) AM_READWRITE(stbook_shifter_base_low_r, stbook_shifter_base_low_w)
- AM_RANGE(0xff820e, 0xff820f) AM_READWRITE(stbook_shifter_lineofs_r, stbook_shifter_lineofs_w)
- AM_RANGE(0xff8240, 0xff8241) AM_READWRITE(stbook_shifter_palette_r, stbook_shifter_palette_w)
- AM_RANGE(0xff8260, 0xff8261) AM_READWRITE8(stbook_shifter_mode_r, stbook_shifter_mode_w, 0xff00)
- AM_RANGE(0xff8264, 0xff8265) AM_READWRITE(stbook_shifter_pixelofs_r, stbook_shifter_pixelofs_w)
- AM_RANGE(0xff827e, 0xff827f) AM_WRITE(lcd_control_w)*/
+/* map(0xf00000, 0xf1ffff).rw(FUNC(stbook_state::stbook_ide_r), FUNC(stbook_state::stbook_ide_w));
+ map(0xff8000, 0xff8001).rw(FUNC(stbook_state::stbook_mmu_r), FUNC(stbook_state::stbook_mmu_w));
+ map(0xff8200, 0xff8203).rw(FUNC(stbook_state::stbook_shifter_base_r), FUNC(stbook_state::stbook_shifter_base_w));
+ map(0xff8204, 0xff8209).rw(FUNC(stbook_state::stbook_shifter_counter_r), FUNC(stbook_state::stbook_shifter_counter_w));
+ map(0xff820a, 0xff820a).rw(FUNC(stbook_state::stbook_shifter_sync_r), FUNC(stbook_state::stbook_shifter_sync_w));
+ map(0xff820c, 0xff820d).rw(FUNC(stbook_state::stbook_shifter_base_low_r), FUNC(stbook_state::stbook_shifter_base_low_w));
+ map(0xff820e, 0xff820f).rw(FUNC(stbook_state::stbook_shifter_lineofs_r), FUNC(stbook_state::stbook_shifter_lineofs_w));
+ map(0xff8240, 0xff8241).rw(FUNC(stbook_state::stbook_shifter_palette_r), FUNC(stbook_state::stbook_shifter_palette_w));
+ map(0xff8260, 0xff8260).rw(FUNC(stbook_state::stbook_shifter_mode_r), FUNC(stbook_state::stbook_shifter_mode_w));
+ map(0xff8264, 0xff8265).rw(FUNC(stbook_state::stbook_shifter_pixelofs_r), FUNC(stbook_state::stbook_shifter_pixelofs_w));
+ map(0xff827e, 0xff827f).w(FUNC(stbook_state::lcd_control_w));*/
map(0xff8800, 0xff8800).rw(YM3439_TAG, FUNC(ay8910_device::data_r), FUNC(ay8910_device::address_w));
map(0xff8802, 0xff8802).w(YM3439_TAG, FUNC(ay8910_device::data_w));
-/* AM_RANGE(0xff8900, 0xff8901) AM_READWRITE8(sound_dma_control_r, sound_dma_control_w, 0x00ff)
- AM_RANGE(0xff8902, 0xff8907) AM_READWRITE8(sound_dma_base_r, sound_dma_base_w, 0x00ff)
- AM_RANGE(0xff8908, 0xff890d) AM_READ8(sound_dma_counter_r, 0x00ff)
- AM_RANGE(0xff890e, 0xff8913) AM_READWRITE8(sound_dma_end_r, sound_dma_end_w, 0x00ff)
- AM_RANGE(0xff8920, 0xff8921) AM_READWRITE8(sound_mode_r, sound_mode_w, 0x00ff)
- AM_RANGE(0xff8922, 0xff8923) AM_READWRITE(microwire_data_r, microwire_data_w)
- AM_RANGE(0xff8924, 0xff8925) AM_READWRITE(microwire_mask_r, microwire_mask_w)
- AM_RANGE(0xff8a00, 0xff8a1f) AM_READWRITE(blitter_halftone_r, blitter_halftone_w)
- AM_RANGE(0xff8a20, 0xff8a21) AM_READWRITE(blitter_src_inc_x_r, blitter_src_inc_x_w)
- AM_RANGE(0xff8a22, 0xff8a23) AM_READWRITE(blitter_src_inc_y_r, blitter_src_inc_y_w)
- AM_RANGE(0xff8a24, 0xff8a27) AM_READWRITE(blitter_src_r, blitter_src_w)
- AM_RANGE(0xff8a28, 0xff8a2d) AM_READWRITE(blitter_end_mask_r, blitter_end_mask_w)
- AM_RANGE(0xff8a2e, 0xff8a2f) AM_READWRITE(blitter_dst_inc_x_r, blitter_dst_inc_x_w)
- AM_RANGE(0xff8a30, 0xff8a31) AM_READWRITE(blitter_dst_inc_y_r, blitter_dst_inc_y_w)
- AM_RANGE(0xff8a32, 0xff8a35) AM_READWRITE(blitter_dst_r, blitter_dst_w)
- AM_RANGE(0xff8a36, 0xff8a37) AM_READWRITE(blitter_count_x_r, blitter_count_x_w)
- AM_RANGE(0xff8a38, 0xff8a39) AM_READWRITE(blitter_count_y_r, blitter_count_y_w)
- AM_RANGE(0xff8a3a, 0xff8a3b) AM_READWRITE(blitter_op_r, blitter_op_w)
- AM_RANGE(0xff8a3c, 0xff8a3d) AM_READWRITE(blitter_ctrl_r, blitter_ctrl_w)
- AM_RANGE(0xff9200, 0xff9201) AM_READ(config_r)
- AM_RANGE(0xff9202, 0xff9203) AM_READWRITE(lcd_contrast_r, lcd_contrast_w)
- AM_RANGE(0xff9210, 0xff9211) AM_READWRITE(power_r, power_w)
- AM_RANGE(0xff9214, 0xff9215) AM_READWRITE(reference_r, reference_w)*/
+/* map(0xff8901, 0xff8901).rw(FUNC(stbook_state::sound_dma_control_r), FUNC(stbook_state::sound_dma_control_w));
+ map(0xff8902, 0xff8907).rw(FUNC(stbook_state::sound_dma_base_r), FUNC(stbook_state::sound_dma_base_w)).umask16(0x00ff);
+ map(0xff8908, 0xff890d).r(FUNC(stbook_state::sound_dma_counter_r)).umask16(0x00ff);
+ map(0xff890e, 0xff8913).rw(FUNC(stbook_state::sound_dma_end_r), FUNC(stbook_state::sound_dma_end_w)).umask16(0x00ff);
+ map(0xff8921, 0xff8921).rw(FUNC(stbook_state::sound_mode_r), FUNC(stbook_state::sound_mode_w));
+ map(0xff8922, 0xff8923).rw(FUNC(stbook_state::microwire_data_r), FUNC(stbook_state::microwire_data_w));
+ map(0xff8924, 0xff8925).rw(FUNC(stbook_state::microwire_mask_r), FUNC(stbook_state::microwire_mask_w));
+ map(0xff8a00, 0xff8a1f).rw(FUNC(stbook_state::blitter_halftone_r), FUNC(stbook_state::blitter_halftone_w));
+ map(0xff8a20, 0xff8a21).rw(FUNC(stbook_state::blitter_src_inc_x_r), FUNC(stbook_state::blitter_src_inc_x_w));
+ map(0xff8a22, 0xff8a23).rw(FUNC(stbook_state::blitter_src_inc_y_r), FUNC(stbook_state::blitter_src_inc_y_w));
+ map(0xff8a24, 0xff8a27).rw(FUNC(stbook_state::blitter_src_r), FUNC(stbook_state::blitter_src_w));
+ map(0xff8a28, 0xff8a2d).rw(FUNC(stbook_state::blitter_end_mask_r), FUNC(stbook_state::blitter_end_mask_w));
+ map(0xff8a2e, 0xff8a2f).rw(FUNC(stbook_state::blitter_dst_inc_x_r), FUNC(stbook_state::blitter_dst_inc_x_w));
+ map(0xff8a30, 0xff8a31).rw(FUNC(stbook_state::blitter_dst_inc_y_r), FUNC(stbook_state::blitter_dst_inc_y_w));
+ map(0xff8a32, 0xff8a35).rw(FUNC(stbook_state::blitter_dst_r), FUNC(stbook_state::blitter_dst_w));
+ map(0xff8a36, 0xff8a37).rw(FUNC(stbook_state::blitter_count_x_r), FUNC(stbook_state::blitter_count_x_w));
+ map(0xff8a38, 0xff8a39).rw(FUNC(stbook_state::blitter_count_y_r), FUNC(stbook_state::blitter_count_y_w));
+ map(0xff8a3a, 0xff8a3b).rw(FUNC(stbook_state::blitter_op_r), FUNC(stbook_state::blitter_op_w));
+ map(0xff8a3c, 0xff8a3d).rw(FUNC(stbook_state::blitter_ctrl_r), FUNC(stbook_state::blitter_ctrl_w));
+ map(0xff9200, 0xff9201).r(FUNC(stbook_state::config_r));
+ map(0xff9202, 0xff9203).rw(FUNC(stbook_state::lcd_contrast_r), FUNC(stbook_state::lcd_contrast_w));
+ map(0xff9210, 0xff9211).rw(FUNC(stbook_state::power_r), FUNC(stbook_state::power_w));
+ map(0xff9214, 0xff9215).rw(FUNC(stbook_state::reference_r), FUNC(stbook_state::reference_w));*/
}
#endif
diff --git a/src/mame/drivers/atlantis.cpp b/src/mame/drivers/atlantis.cpp
index fb91a2a6a6f..3e8c3fc5f8d 100644
--- a/src/mame/drivers/atlantis.cpp
+++ b/src/mame/drivers/atlantis.cpp
@@ -674,16 +674,16 @@ void atlantis_state::device_timer(emu_timer &timer, device_timer_id id, int para
void atlantis_state::map0(address_map &map)
{
map(0x00000000, 0x0001ffff).rw(FUNC(atlantis_state::cmos_r), FUNC(atlantis_state::cmos_w)).umask32(0x000000ff);
- //AM_RANGE(0x00080000, 0x000?0000) AM_READWRITE8(zeus debug)
+ //map(0x00080000, 0x000?0000).rw(FUNC(atlantis_state::zeus debug_r), FUNC(atlantis_state::zeus debug_w));
map(0x00100000, 0x0010001f).rw(m_uart1, FUNC(ns16550_device::ins8250_r), FUNC(ns16550_device::ins8250_w)).umask32(0x000000ff); // Serial UART1 (TL16C552 CS0)
map(0x00180000, 0x0018001f).rw(m_uart2, FUNC(ns16550_device::ins8250_r), FUNC(ns16550_device::ins8250_w)).umask32(0x000000ff); // Serial UART2 (TL16C552 CS1)
map(0x00200000, 0x0020001f).rw(FUNC(atlantis_state::parallel_r), FUNC(atlantis_state::parallel_w)).umask32(0x000000ff); // Parallel UART (TL16C552 CS2)
map(0x00400000, 0x007fffff).rw(FUNC(atlantis_state::exprom_r), FUNC(atlantis_state::exprom_w)).umask32(0x000000ff); // EXPROM
map(0x00800000, 0x00f00003).rw(FUNC(atlantis_state::board_ctrl_r), FUNC(atlantis_state::board_ctrl_w));
- //AM_RANGE(0x00d80000, 0x00d80003) AM_READWRITE(status_leds_r, status_leds_w)
- //AM_RANGE(0x00e00000, 0x00e00003) AM_READWRITE(cmos_protect_r, cmos_protect_w)
- //AM_RANGE(0x00e80000, 0x00e80003) AM_NOP // Watchdog
- //AM_RANGE(0x00f00000, 0x00f00003) AM_NOP // Trackball ctrl
+ //map(0x00d80000, 0x00d80003).rw(FUNC(atlantis_state::status_leds_r, FUNC(atlantis_state::status_leds_w));
+ //map(0x00e00000, 0x00e00003).rw(FUNC(atlantis_state::cmos_protect_r, FUNC(atlantis_state::cmos_protect_w));
+ //map(0x00e80000, 0x00e80003).noprw(); // Watchdog
+ //map(0x00f00000, 0x00f00003).noprw(); // Trackball ctrl
}
void atlantis_state::map1(address_map &map)
@@ -693,14 +693,14 @@ void atlantis_state::map1(address_map &map)
map(0x00400000, 0x00400003).w(m_dcs, FUNC(dcs_audio_device::dsio_idma_addr_w));
map(0x00600000, 0x00600003).rw(m_dcs, FUNC(dcs_audio_device::dsio_idma_data_r), FUNC(dcs_audio_device::dsio_idma_data_w));
map(0x00800000, 0x00900003).rw(FUNC(atlantis_state::port_ctrl_r), FUNC(atlantis_state::port_ctrl_w)).umask32(0x0000ffff);
- //AM_RANGE(0x00880000, 0x00880003) // AUX Output Initial write 0000fff0, follow by sequence ffef, ffdf, ffbf, fff7. Row Select?
- //AM_RANGE(0x00900000, 0x00900003) // AUX Input Read once before each sequence write to 0x00880000. Code checks bits 0,1,2. Keypad?
+ //map(0x00880000, 0x00880003) // AUX Output Initial write 0000fff0, follow by sequence ffef, ffdf, ffbf, fff7. Row Select?
+ //map(0x00900000, 0x00900003) // AUX Input Read once before each sequence write to 0x00880000. Code checks bits 0,1,2. Keypad?
map(0x00980000, 0x00980001).rw(FUNC(atlantis_state::a2d_ctrl_r), FUNC(atlantis_state::a2d_ctrl_w)); // A2D Control Read / Write. Bytes written 0x8f, 0xcf. Code if read 0x1 then read 00a00000.
map(0x00a00000, 0x00a00001).rw(FUNC(atlantis_state::a2d_data_r), FUNC(atlantis_state::a2d_data_w)); // A2D Data
- //AM_RANGE(0x00a80000, 0x00a80003) // Trackball Chan 0 16 bits
- //AM_RANGE(0x00b00000, 0x00b00003) // Trackball Chan 1 16 bits
- //AM_RANGE(0x00b80000, 0x00b80003) // Trackball Error 16 bits
- //AM_RANGE(0x00c00000, 0x00c00003) // Trackball Pins 16 bits
+ //map(0x00a80000, 0x00a80003) // Trackball Chan 0 16 bits
+ //map(0x00b00000, 0x00b00003) // Trackball Chan 1 16 bits
+ //map(0x00b80000, 0x00b80003) // Trackball Error 16 bits
+ //map(0x00c00000, 0x00c00003) // Trackball Pins 16 bits
}
void atlantis_state::map2(address_map &map)
@@ -710,7 +710,7 @@ void atlantis_state::map2(address_map &map)
void atlantis_state::map3(address_map &map)
{
- //AM_RANGE(0x000000, 0xffffff) ROMBUS
+ //map(0x000000, 0xffffff) ROMBUS
}
/*************************************
diff --git a/src/mame/drivers/atom.cpp b/src/mame/drivers/atom.cpp
index b07c5aa858b..b1b30cd94dc 100644
--- a/src/mame/drivers/atom.cpp
+++ b/src/mame/drivers/atom.cpp
@@ -258,8 +258,8 @@ void atom_state::atom_mem(address_map &map)
map(0x9800, 0x9fff).ram();
// map(0xa000, 0xafff) // mapped by the cartslot
map(0xb000, 0xb003).mirror(0x3fc).rw(INS8255_TAG, FUNC(i8255_device::read), FUNC(i8255_device::write));
-// map(0xb400, 0xb403) AM_DEVREADWRITE(MC6854_TAG, mc6854_device, read, write)
-// map(0xb404, 0xb404) AM_READ_PORT("ECONET")
+// map(0xb400, 0xb403).rw(MC6854_TAG, FUNC(mc6854_device::read), FUNC(mc6854_device::write));
+// map(0xb404, 0xb404).portr("ECONET");
map(0xb800, 0xb80f).mirror(0x3f0).m(R6522_TAG, FUNC(via6522_device::map));
map(0xc000, 0xffff).rom().region(SY6502_TAG, 0);
}
diff --git a/src/mame/drivers/atvtrack.cpp b/src/mame/drivers/atvtrack.cpp
index 9ee4449a795..8d87e89a3b4 100644
--- a/src/mame/drivers/atvtrack.cpp
+++ b/src/mame/drivers/atvtrack.cpp
@@ -518,7 +518,7 @@ void atvtrack_state::atvtrack_main_map(address_map &map)
{
map(0x00000000, 0x000003ff).ram().share("sharedmem");
map(0x00020000, 0x00020007).rw(FUNC(atvtrack_state::control_r), FUNC(atvtrack_state::control_w)); // control registers
-// AM_RANGE(0x00020040, 0x0002007f) // audio DAC buffer
+// map(0x00020040, 0x0002007f) // audio DAC buffer
map(0x14000000, 0x14000007).rw(FUNC(atvtrack_state::nand_data_r), FUNC(atvtrack_state::nand_data_w));
map(0x14100000, 0x14100007).w(FUNC(atvtrack_state::nand_cmd_w));
map(0x14200000, 0x14200007).w(FUNC(atvtrack_state::nand_addr_w));
diff --git a/src/mame/drivers/avt.cpp b/src/mame/drivers/avt.cpp
index 06ec55e013b..c3fe2892b01 100644
--- a/src/mame/drivers/avt.cpp
+++ b/src/mame/drivers/avt.cpp
@@ -649,7 +649,7 @@ void avt_state::avt_map(address_map &map)
{
map(0x0000, 0x5fff).rom();
map(0x6000, 0x7fff).ram();
- map(0x8000, 0x9fff).ram(); // AM_SHARE("nvram")
+ map(0x8000, 0x9fff).ram(); // .share("nvram");
map(0xa000, 0xa7ff).ram().w(FUNC(avt_state::avt_videoram_w)).share("videoram");
map(0xc000, 0xc7ff).ram().w(FUNC(avt_state::avt_colorram_w)).share("colorram");
}
diff --git a/src/mame/drivers/badlandsbl.cpp b/src/mame/drivers/badlandsbl.cpp
index fc49343a059..be96a7e9e69 100644
--- a/src/mame/drivers/badlandsbl.cpp
+++ b/src/mame/drivers/badlandsbl.cpp
@@ -111,7 +111,7 @@ void badlandsbl_state::bootleg_map(address_map &map)
map(0xfc0000, 0xfc0001).r(FUNC(badlandsbl_state::badlandsb_unk_r)).nopw();
map(0xfd0000, 0xfd1fff).rw("eeprom", FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write)).umask16(0x00ff);
- //AM_RANGE(0xfe0000, 0xfe1fff) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
+ //map(0xfe0000, 0xfe1fff).w("watchdog", FUNC(watchdog_timer_device::reset_w));
map(0xfe2000, 0xfe3fff).w(FUNC(badlandsbl_state::video_int_ack_w));
map(0xfe0000, 0xfe0001).nopw();
diff --git a/src/mame/drivers/bagman.cpp b/src/mame/drivers/bagman.cpp
index b2f59c77be2..6022a34ff25 100644
--- a/src/mame/drivers/bagman.cpp
+++ b/src/mame/drivers/bagman.cpp
@@ -170,7 +170,7 @@ void bagman_state::main_portmap(address_map &map)
map.global_mask(0xff);
map(0x08, 0x09).w("aysnd", FUNC(ay8910_device::address_data_w));
map(0x0c, 0x0c).r("aysnd", FUNC(ay8910_device::data_r));
- //AM_RANGE(0x56, 0x56) AM_WRITENOP
+ //map(0x56, 0x56).nopw();
}
diff --git a/src/mame/drivers/basic52.cpp b/src/mame/drivers/basic52.cpp
index 8a5fe9778fc..907cf613ab2 100644
--- a/src/mame/drivers/basic52.cpp
+++ b/src/mame/drivers/basic52.cpp
@@ -67,9 +67,9 @@ void basic52_state::basic52_mem(address_map &map)
map.unmap_value_high();
map(0x0000, 0x1fff).rom();
map(0x2000, 0x7fff).ram();
- //AM_RANGE(0x8000, 0x9fff) AM_ROM // EPROM
- //AM_RANGE(0xc000, 0xdfff) // Expansion block
- //AM_RANGE(0xe000, 0xffff) // Expansion block
+ //map(0x8000, 0x9fff).rom(); // EPROM
+ //map(0xc000, 0xdfff) // Expansion block
+ //map(0xe000, 0xffff) // Expansion block
}
void basic52_state::basic52_io(address_map &map)
@@ -78,8 +78,8 @@ void basic52_state::basic52_io(address_map &map)
map(0x0000, 0x7fff).ram();
map(0x8000, 0x9fff).rom(); // EPROM
map(0xa000, 0xa003).rw("ppi8255", FUNC(i8255_device::read), FUNC(i8255_device::write)); // PPI-8255
- //AM_RANGE(0xc000, 0xdfff) // Expansion block
- //AM_RANGE(0xe000, 0xffff) // Expansion block
+ //map(0xc000, 0xdfff) // Expansion block
+ //map(0xe000, 0xffff) // Expansion block
}
/* Input ports */
diff --git a/src/mame/drivers/bebox.cpp b/src/mame/drivers/bebox.cpp
index 300ef895742..d3056de6ed1 100644
--- a/src/mame/drivers/bebox.cpp
+++ b/src/mame/drivers/bebox.cpp
@@ -59,7 +59,7 @@ void bebox_state::main_mem(address_map &map)
map(0x800003F8, 0x800003FF).rw("ns16550_0", FUNC(ns16550_device::ins8250_r), FUNC(ns16550_device::ins8250_w));
map(0x80000480, 0x8000048F).rw(FUNC(bebox_state::bebox_80000480_r), FUNC(bebox_state::bebox_80000480_w));
map(0x80000CF8, 0x80000CFF).rw(m_pcibus, FUNC(pci_bus_device::read_64be), FUNC(pci_bus_device::write_64be));
- //AM_RANGE(0x800042E8, 0x800042EF) AM_DEVWRITE8("cirrus", cirrus_device, cirrus_42E8_w, 0xffffffffffffffffU )
+ //map(0x800042E8, 0x800042EF).w("cirrus", FUNC(cirrus_device::cirrus_42E8_w));
map(0xBFFFFFF0, 0xBFFFFFFF).r(FUNC(bebox_state::bebox_interrupt_ack_r));
map(0xC00A0000, 0xC00BFFFF).rw("vga", FUNC(cirrus_gd5428_device::mem_r), FUNC(cirrus_gd5428_device::mem_w));
diff --git a/src/mame/drivers/beezer.cpp b/src/mame/drivers/beezer.cpp
index 950bd9f2a94..24a1811668f 100644
--- a/src/mame/drivers/beezer.cpp
+++ b/src/mame/drivers/beezer.cpp
@@ -175,8 +175,8 @@ void beezer_state::sound_map(address_map &map)
map(0x1000, 0x1007).mirror(0x07f8).rw(m_ptm, FUNC(ptm6840_device::read), FUNC(ptm6840_device::write));
map(0x1800, 0x180f).mirror(0x07f0).m(m_via_audio, FUNC(via6522_device::map));
map(0x8000, 0x8003).mirror(0x1ffc).w(FUNC(beezer_state::dac_w));
-// AM_RANGE(0xa000, 0xbfff) AM_ROM // 2d (can be ram, unpopulated)
-// AM_RANGE(0xc000, 0xdfff) AM_ROM // 4d (unpopulated)
+// map(0xa000, 0xbfff).rom(); // 2d (can be ram, unpopulated)
+// map(0xc000, 0xdfff).rom(); // 4d (unpopulated)
map(0xe000, 0xffff).rom().region("audiocpu", 0); // 6d
}
diff --git a/src/mame/drivers/besta.cpp b/src/mame/drivers/besta.cpp
index 0e427c0c51b..f9a31c0c7e3 100644
--- a/src/mame/drivers/besta.cpp
+++ b/src/mame/drivers/besta.cpp
@@ -84,18 +84,18 @@ void besta_state::kbd_put(u8 data)
void besta_state::besta_mem(address_map &map)
{
map(0x00000000, 0x001fffff).ram().share("p_ram"); // local bus DRAM, 4MB
-// AM_RANGE(0x08010000, 0x08011fff) AM_RAM // unknown -- accessed by cp31dssp
-// AM_RANGE(0xfca03500, 0xfca0350f) AM_READWRITE8(iscsi_reg_r, iscsi_reg_w, 0xffffffff)
+// map(0x08010000, 0x08011fff).ram(); // unknown -- accessed by cp31dssp
+// map(0xfca03500, 0xfca0350f).rw(FUNC(besta_state::iscsi_reg_r), FUNC(besta_state::iscsi_reg_w));
map(0xff000000, 0xff00ffff).rom().region("user1", 0); // actual mapping is up to 0xff03ffff
map(0xff040000, 0xff07ffff).ram(); // onboard SRAM
-// AM_RANGE(0xff800000, 0xff80001f) AM_DEVREADWRITE8("mpcc", mpcc68561_t, reg_r, reg_w, 0xffffffff)
+// map(0xff800000, 0xff80001f).rw("mpcc", FUNC(mpcc68561_t::reg_r), FUNC(mpcc68561_t::reg_w));
map(0xff800000, 0xff80001f).rw(FUNC(besta_state::mpcc_reg_r), FUNC(besta_state::mpcc_reg_w)); // console
map(0xff800200, 0xff800237).rw(m_pit2, FUNC(pit68230_device::read), FUNC(pit68230_device::write));
-// AM_RANGE(0xff800400, 0xff800xxx) // ??? -- shows up in cp31dssp log
-// AM_RANGE(0xff800800, 0xff800xxx) // 68153 BIM
-// AM_RANGE(0xff800a00, 0xff800xxx) // 62421 RTC
+// map(0xff800400, 0xff800xxx) // ??? -- shows up in cp31dssp log
+// map(0xff800800, 0xff800xxx) // 68153 BIM
+// map(0xff800a00, 0xff800xxx) // 62421 RTC
map(0xff800c00, 0xff800c37).rw(m_pit1, FUNC(pit68230_device::read), FUNC(pit68230_device::write));
-// AM_RANGE(0xff800e00, 0xff800xxx) // PIT3?
+// map(0xff800e00, 0xff800xxx) // PIT3?
}
/* Input ports */
diff --git a/src/mame/drivers/bfcobra.cpp b/src/mame/drivers/bfcobra.cpp
index dc846dc64f1..f7d172f221b 100644
--- a/src/mame/drivers/bfcobra.cpp
+++ b/src/mame/drivers/bfcobra.cpp
@@ -1409,15 +1409,15 @@ void bfcobra_state::m6809_prog_map(address_map &map)
map(0x2200, 0x2200).ram(); // W 'F'
map(0x2600, 0x2600).rw(FUNC(bfcobra_state::meter_r), FUNC(bfcobra_state::meter_w));
map(0x2800, 0x2800).ram(); // W
- map(0x2A00, 0x2A02).rw(FUNC(bfcobra_state::latch_r), FUNC(bfcobra_state::latch_w));
- map(0x2E00, 0x2E00).r(FUNC(bfcobra_state::int_latch_r));
+ map(0x2a00, 0x2a02).rw(FUNC(bfcobra_state::latch_r), FUNC(bfcobra_state::latch_w));
+ map(0x2e00, 0x2e00).r(FUNC(bfcobra_state::int_latch_r));
map(0x3001, 0x3001).w("aysnd", FUNC(ay8910_device::data_w));
map(0x3201, 0x3201).w("aysnd", FUNC(ay8910_device::address_w));
map(0x3404, 0x3405).rw(m_acia6850_1, FUNC(acia6850_device::read), FUNC(acia6850_device::write));
map(0x3406, 0x3407).rw(m_acia6850_2, FUNC(acia6850_device::read), FUNC(acia6850_device::write));
-// AM_RANGE(0x3408, 0x3408) AM_NOP
-// AM_RANGE(0x340A, 0x340A) AM_NOP
-// AM_RANGE(0x3600, 0x3600) AM_NOP
+// map(0x3408, 0x3408).noprw();
+// map(0x340a, 0x340a).noprw();
+// map(0x3600, 0x3600).noprw();
map(0x3801, 0x3801).rw(FUNC(bfcobra_state::upd_r), FUNC(bfcobra_state::upd_w));
map(0x8000, 0xffff).rom();
map(0xf000, 0xf000).nopw(); /* Watchdog */
diff --git a/src/mame/drivers/bfm_sc2.cpp b/src/mame/drivers/bfm_sc2.cpp
index b560834104c..aaf7b61d546 100644
--- a/src/mame/drivers/bfm_sc2.cpp
+++ b/src/mame/drivers/bfm_sc2.cpp
@@ -1566,7 +1566,7 @@ void bfm_sc2_state::sc2_basemap(address_map &map)
map(0x2C00, 0x2C00).w(FUNC(bfm_sc2_state::unlock_w)); /* custom chip unlock */
map(0x2D00, 0x2D01).w(m_ym2413, FUNC(ym2413_device::write));
map(0x2E00, 0x2E00).w(FUNC(bfm_sc2_state::bankswitch_w)); /* write bank (rom page select for 0x6000 - 0x7fff ) */
- //AM_RANGE(0x2F00, 0x2F00) AM_WRITE(vfd2_data_w) /* vfd2 data (not usually connected!)*/
+ //map(0x2F00, 0x2F00).w(FUNC(bfm_sc2_state::vfd2_data_w)); /* vfd2 data (not usually connected!)*/
map(0x3FFE, 0x3FFE).r(FUNC(bfm_sc2_state::direct_input_r));
map(0x3FFF, 0x3FFF).r(FUNC(bfm_sc2_state::coin_input_r));
diff --git a/src/mame/drivers/bigbord2.cpp b/src/mame/drivers/bigbord2.cpp
index 0c49250c480..990c6ee47b8 100644
--- a/src/mame/drivers/bigbord2.cpp
+++ b/src/mame/drivers/bigbord2.cpp
@@ -348,7 +348,7 @@ void bigbord2_state::bigbord2_io(address_map &map)
map(0xcc, 0xcf).w(FUNC(bigbord2_state::syslatch2_w));
map(0xd0, 0xd3).r(FUNC(bigbord2_state::kbd_r)); // u1
map(0xd4, 0xd7).rw(m_fdc, FUNC(mb8877_device::read), FUNC(mb8877_device::write)); // u10
- //AM_RANGE(0xd8, 0xdb) AM_READWRITE(portd8_r, portd8_w) // various external data ports; DB = centronics printer
+ //map(0xd8, 0xdb).rw(FUNC(bigbord2_state::portd8_r), FUNC(bigbord2_state::portd8_w)); // various external data ports; DB = centronics printer
map(0xd9, 0xd9).w("outlatch1", FUNC(ls259_device::write_nibble_d3)); // u96
map(0xdc, 0xdc).mirror(2).rw("crtc", FUNC(mc6845_device::status_r), FUNC(mc6845_device::address_w)); // u30
map(0xdd, 0xdd).mirror(2).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
diff --git a/src/mame/drivers/bigstrkb.cpp b/src/mame/drivers/bigstrkb.cpp
index a74d01c7885..8c272e9f746 100644
--- a/src/mame/drivers/bigstrkb.cpp
+++ b/src/mame/drivers/bigstrkb.cpp
@@ -42,7 +42,7 @@ lev 7 : 0x7c : 0000 05be - xxx
void bigstrkb_state::bigstrkb_map(address_map &map)
{
map(0x000000, 0x07ffff).rom();
-// AM_RANGE(0x0c0000, 0x0cffff) AM_READWRITE_LEGACY(megasys1_vregs_C_r, megasys1_vregs_C_w) AM_SHARE("megasys1_vregs")
+// map(0x0c0000, 0x0cffff).rw(FUNC(bigstrkb_state::megasys1_vregs_C_r), FUNC(bigstrkb_state::megasys1_vregs_C_w)).share("megasys1_vregs");
map(0x0C2004, 0x0C2005).nopw();
map(0x0C200C, 0x0C200d).nopw();
diff --git a/src/mame/drivers/bingoman.cpp b/src/mame/drivers/bingoman.cpp
index db3196dd5fb..7cfab73cafe 100644
--- a/src/mame/drivers/bingoman.cpp
+++ b/src/mame/drivers/bingoman.cpp
@@ -289,7 +289,7 @@ void bingoman_state::bingoman_prg_map(address_map &map)
void bingoman_state::bingoman_io_map(address_map &map)
{
-// ADDRESS_MAP_GLOBAL_MASK(0xff)
+// map.global_mask(0xff);
}
static INPUT_PORTS_START( bingoman )
diff --git a/src/mame/drivers/bingor.cpp b/src/mame/drivers/bingor.cpp
index 1d2250d21ca..0c9388407cf 100644
--- a/src/mame/drivers/bingor.cpp
+++ b/src/mame/drivers/bingor.cpp
@@ -731,7 +731,7 @@ void bingor_state::vip2000_map(address_map &map)
map(0x00000, 0x0ffff).ram();
map(0x40000, 0x4ffff).ram().share("blit_ram");
map(0x40300, 0x4031f).w(m_palette, FUNC(palette_device::write16)); //wrong
- //AM_RANGE(0x50000, 0x5ffff) AM_ROM AM_REGION("gfx", 0)
+ //map(0x50000, 0x5ffff).rom().region("gfx", 0);
map(0x60000, 0x60003).w("ymz", FUNC(ymz284_device::address_data_w)).umask16(0x00ff);
map(0x80000, 0xeffff).rw("flash", FUNC(intelfsh16_device::read), FUNC(intelfsh16_device::write));
map(0xf0000, 0xfffff).rom().region("boot_prg", 0);
diff --git a/src/mame/drivers/bitgraph.cpp b/src/mame/drivers/bitgraph.cpp
index 9646fe623ca..f73298577fe 100644
--- a/src/mame/drivers/bitgraph.cpp
+++ b/src/mame/drivers/bitgraph.cpp
@@ -202,7 +202,7 @@ void bitgraph_state::bitgraphb_mem(address_map &map)
map(0x010020, 0x010027).rw(FUNC(bitgraph_state::adlc_r), FUNC(bitgraph_state::adlc_w)).umask16(0xff00);
map(0x010028, 0x01002f).rw(FUNC(bitgraph_state::pia_r), FUNC(bitgraph_state::pia_w)).umask16(0xff00); // EAROM, PSG
map(0x010030, 0x010031).w(FUNC(bitgraph_state::baud_write));
-// AM_RANGE(0x010030, 0x010037) AM_READ8(ppu_read, 0x00ff)
+// map(0x010030, 0x010037).r(FUNC(bitgraph_state::ppu_read)).umask16(0x00ff);
map(0x010038, 0x01003f).w(FUNC(bitgraph_state::ppu_write)).umask16(0x00ff);
map(0x380000, 0x3fffff).ram();
}
diff --git a/src/mame/drivers/bking.cpp b/src/mame/drivers/bking.cpp
index 7243c7be871..8eaa3814e21 100644
--- a/src/mame/drivers/bking.cpp
+++ b/src/mame/drivers/bking.cpp
@@ -103,7 +103,7 @@ void bking_state::bking_io_map(address_map &map)
map(0x09, 0x09).w(FUNC(bking_state::bking_cont2_w));
map(0x0a, 0x0a).w(FUNC(bking_state::bking_cont3_w));
map(0x0b, 0x0b).w(FUNC(bking_state::bking_soundlatch_w));
-// AM_RANGE(0x0c, 0x0c) AM_WRITE(bking_eport2_w) this is not shown to be connected anywhere
+// map(0x0c, 0x0c).w(FUNC(bking_state::bking_eport2_w)); this is not shown to be connected anywhere
map(0x0d, 0x0d).w(FUNC(bking_state::bking_hitclr_w));
map(0x07, 0x1f).r(FUNC(bking_state::bking_pos_r));
}
@@ -123,7 +123,7 @@ void bking_state::bking3_io_map(address_map &map)
map(0x09, 0x09).w(FUNC(bking_state::bking_cont2_w));
map(0x0a, 0x0a).w(FUNC(bking_state::bking_cont3_w));
map(0x0b, 0x0b).w(FUNC(bking_state::bking_soundlatch_w));
-// AM_RANGE(0x0c, 0x0c) AM_WRITE(bking_eport2_w) this is not shown to be connected anywhere
+// map(0x0c, 0x0c).w(FUNC(bking_state::bking_eport2_w)); this is not shown to be connected anywhere
map(0x0d, 0x0d).w(FUNC(bking_state::bking_hitclr_w));
map(0x07, 0x1f).r(FUNC(bking_state::bking_pos_r));
map(0x2f, 0x2f).rw(m_bmcu, FUNC(taito68705_mcu_device::data_r), FUNC(taito68705_mcu_device::data_w));
diff --git a/src/mame/drivers/bloodbro.cpp b/src/mame/drivers/bloodbro.cpp
index e61c15023a6..de5993ef4b8 100644
--- a/src/mame/drivers/bloodbro.cpp
+++ b/src/mame/drivers/bloodbro.cpp
@@ -163,7 +163,7 @@ void bloodbro_state::common_map(address_map &map)
map(0x08e800, 0x08f7ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x08f800, 0x08ffff).ram();
map(0x0a0000, 0x0a000d).rw(m_seibu_sound, FUNC(seibu_sound_device::main_r), FUNC(seibu_sound_device::main_w)).umask16(0x00ff);
-// AM_RANGE(0x0c0000, 0x0c007f) AM_RAM AM_SHARE("scroll")
+// map(0x0c0000, 0x0c007f).ram().share("scroll");
map(0x0c0080, 0x0c0081).nopw(); // ??? IRQ Ack VBL?
map(0x0c00c0, 0x0c00c1).nopw(); // ??? watchdog?
map(0x0c0100, 0x0c0101).nopw(); // ??? written once
diff --git a/src/mame/drivers/bmjr.cpp b/src/mame/drivers/bmjr.cpp
index 23112b137f1..8ab2e88400f 100644
--- a/src/mame/drivers/bmjr.cpp
+++ b/src/mame/drivers/bmjr.cpp
@@ -173,9 +173,9 @@ void bmjr_state::bmjr_mem(address_map &map)
map(0x0000, 0xafff).ram().share("wram");
map(0xb000, 0xdfff).rom();
map(0xe000, 0xe7ff).rom();
-// AM_RANGE(0xe890, 0xe890) W MP-1710 tile color
-// AM_RANGE(0xe891, 0xe891) W MP-1710 background color
-// AM_RANGE(0xe892, 0xe892) W MP-1710 monochrome / color setting
+// map(0xe890, 0xe890) W MP-1710 tile color
+// map(0xe891, 0xe891) W MP-1710 background color
+// map(0xe892, 0xe892) W MP-1710 monochrome / color setting
map(0xee00, 0xee00).r(FUNC(bmjr_state::tape_stop_r)); //R stop tape
map(0xee20, 0xee20).r(FUNC(bmjr_state::tape_start_r)); //R start tape
map(0xee40, 0xee40).w(FUNC(bmjr_state::xor_display_w)); //W Picture reverse
@@ -184,7 +184,7 @@ void bmjr_state::bmjr_mem(address_map &map)
map(0xef00, 0xef00).r(FUNC(bmjr_state::ff_r)); //R timer
map(0xef40, 0xef40).r(FUNC(bmjr_state::ff_r)); //R unknown
map(0xef80, 0xef80).r(FUNC(bmjr_state::unk_r)); //R unknown
-// AM_RANGE(0xefe0, 0xefe0) W screen mode
+// map(0xefe0, 0xefe0) W screen mode
map(0xf000, 0xffff).rom();
}
diff --git a/src/mame/drivers/bml3.cpp b/src/mame/drivers/bml3.cpp
index 765e87dbc44..a1405f3e7e7 100644
--- a/src/mame/drivers/bml3.cpp
+++ b/src/mame/drivers/bml3.cpp
@@ -381,11 +381,11 @@ void bml3_state::bml3_mem(address_map &map)
// TIMER - System timer enable
map(0xffca, 0xffca).r(FUNC(bml3_state::firq_status_r)); // timer irq
// LPFLG - Light pen interrupt
-// AM_RANGE(0xffcb, 0xffcb)
+// map(0xffcb, 0xffcb)
// MODE_SEL - Graphics mode select
map(0xffd0, 0xffd0).w(FUNC(bml3_state::hres_reg_w));
// TRACE - Trace counter
-// AM_RANGE(0xffd1, 0xffd1)
+// map(0xffd1, 0xffd1)
// REMOTE - Remote relay control for cassette - bit 7
map(0xffd2, 0xffd2).w(FUNC(bml3_state::relay_w));
// MUSIC_SEL - Music select: toggle audio output level when rising
@@ -396,14 +396,14 @@ void bml3_state::bml3_mem(address_map &map)
map(0xffd5, 0xffd5).noprw();
// INTERLACE_SEL - Interlaced video mode (manual has "INTERACE SEL"!)
map(0xffd6, 0xffd6).w(FUNC(bml3_state::vres_reg_w));
-// AM_RANGE(0xffd7, 0xffd7) baud select
+// map(0xffd7, 0xffd7) baud select
// C_REG_SEL - Attribute register (character/video mode and colours)
map(0xffd8, 0xffd8).rw(FUNC(bml3_state::vram_attr_r), FUNC(bml3_state::vram_attr_w));
// KB - Keyboard mode register, interrupt control, keyboard LEDs
map(0xffe0, 0xffe0).rw(FUNC(bml3_state::keyboard_r), FUNC(bml3_state::keyboard_w));
-// AM_RANGE(0xffe8, 0xffe8) bank register
-// AM_RANGE(0xffe9, 0xffe9) IG mode register
-// AM_RANGE(0xffea, 0xffea) IG enable register
+// map(0xffe8, 0xffe8) bank register
+// map(0xffe9, 0xffe9) IG mode register
+// map(0xffea, 0xffea) IG enable register
map(0xa000, 0xfeff).rom().region("maincpu", 0xa000);
map(0xfff0, 0xffff).rom().region("maincpu", 0xfff0);
map(0xa000, 0xbfff).w(FUNC(bml3_state::a000_w));
diff --git a/src/mame/drivers/bpmmicro.cpp b/src/mame/drivers/bpmmicro.cpp
index 9fca813f82f..99d2a10b39e 100644
--- a/src/mame/drivers/bpmmicro.cpp
+++ b/src/mame/drivers/bpmmicro.cpp
@@ -342,7 +342,7 @@ void bpmmicro_state::i286_mem(address_map &map)
map(0x08401a, 0x8401b).w(FUNC(bpmmicro_state::unknown_8401a_w));
map(0x08401c, 0x8401d).w(FUNC(bpmmicro_state::eeprom_8401c_w));
map(0x0f0000, 0x0fffff).rom().region("bios", 0x10000);
- //AM_RANGE(0xfe0000, 0xffffff) AM_ROM AM_REGION("bios", 0) //?
+ //map(0xfe0000, 0xffffff).rom().region("bios", 0); //?
map(0xfffff0, 0xffffff).rom().region("bios", 0x1fff0); //?
}
diff --git a/src/mame/drivers/buggychl.cpp b/src/mame/drivers/buggychl.cpp
index 6cb0ebf2783..4582ac261de 100644
--- a/src/mame/drivers/buggychl.cpp
+++ b/src/mame/drivers/buggychl.cpp
@@ -223,11 +223,11 @@ void buggychl_state::buggychl_map(address_map &map)
map(0xd603, 0xd603).mirror(0x00e4).portr("IN0"); /* player inputs */
map(0xd608, 0xd608).mirror(0x00e4).portr("WHEEL");
map(0xd609, 0xd609).mirror(0x00e4).portr("IN1"); /* coin + accelerator */
-// AM_RANGE(0xd60a, 0xd60a) AM_MIRROR(0x00e4) // other inputs, not used?
-// AM_RANGE(0xd60b, 0xd60b) AM_MIRROR(0x00e4) // other inputs, not used?
+// map(0xd60a, 0xd60a).mirror(0x00e4); // other inputs, not used?
+// map(0xd60b, 0xd60b).mirror(0x00e4); // other inputs, not used?
map(0xd610, 0xd610).mirror(0x00e4).r(m_soundlatch2, FUNC(generic_latch_8_device::read)).w(m_soundlatch, FUNC(generic_latch_8_device::write));
map(0xd611, 0xd611).mirror(0x00e4).r(FUNC(buggychl_state::sound_status_main_r));
-// AM_RANGE(0xd613, 0xd613) AM_MIRROR(0x00e4) AM_WRITE(sound_reset_w)
+// map(0xd613, 0xd613).mirror(0x00e4).w(FUNC(buggychl_state::sound_reset_w));
map(0xd618, 0xd618).mirror(0x00e7).nopw(); /* accelerator clear; TODO: should we emulate the proper quadrature counter here? */
map(0xd700, 0xd7ff).w(m_palette, FUNC(palette_device::write8)).share("palette");
map(0xd820, 0xd83f).ram(); // TODO
diff --git a/src/mame/drivers/buster.cpp b/src/mame/drivers/buster.cpp
index bb77b383db7..c929a4fcc0f 100644
--- a/src/mame/drivers/buster.cpp
+++ b/src/mame/drivers/buster.cpp
@@ -83,7 +83,7 @@ WRITE8_MEMBER(buster_state::coin_output_w)
void buster_state::mainmap(address_map &map)
{
- map(0x0000, 0x3fff).rom();// AM_SHARE("rom")
+ map(0x0000, 0x3fff).rom();// .share("rom");
map(0x4000, 0x47ff).ram().share("wram");
map(0x5000, 0x5fff).ram().share("vram");
map(0x6000, 0x6000).w("crtc", FUNC(mc6845_device::address_w));
diff --git a/src/mame/drivers/by35.cpp b/src/mame/drivers/by35.cpp
index 29d765c531b..a6b37f6d5d3 100644
--- a/src/mame/drivers/by35.cpp
+++ b/src/mame/drivers/by35.cpp
@@ -236,13 +236,13 @@ void by35_state::by35_map(address_map &map)
map(0x0088, 0x008b).rw(m_pia_u10, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0x0090, 0x0093).rw(m_pia_u11, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0x0200, 0x02ff).ram().rw(FUNC(by35_state::nibble_nvram_r), FUNC(by35_state::nibble_nvram_w)).share("nvram");
- map(0x1000, 0x7fff).rom(); // AM_REGION("roms", 0 )
+ map(0x1000, 0x7fff).rom(); // .region("roms", 0 );
}
void by35_state::nuovo_map(address_map &map)
{
map(0x0000, 0x07ff).ram().share("nvram");
-// AM_RANGE(0x0000, 0x007f) AM_RAM // Schematics infer that the M6802 internal RAM is disabled.
+// map(0x0000, 0x007f).ram(); // Schematics infer that the M6802 internal RAM is disabled.
map(0x0088, 0x008b).rw(m_pia_u10, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0x0090, 0x0093).rw(m_pia_u11, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0x1000, 0xffff).rom();
diff --git a/src/mame/drivers/c128.cpp b/src/mame/drivers/c128.cpp
index ca6efdebb87..a0571df460e 100644
--- a/src/mame/drivers/c128.cpp
+++ b/src/mame/drivers/c128.cpp
@@ -1758,20 +1758,13 @@ void c128_state::ntsc(machine_config &config)
QUICKLOAD(config, "quickload", "p00,prg", CBM_QUICKLOAD_DELAY).set_load_callback(FUNC(c128_state::quickload_c128), this);
// software list
- SOFTWARE_LIST(config, "cart_list_vic10").set_original("vic10");
- SOFTWARE_LIST(config, "cart_list_c64").set_original("c64_cart");
- SOFTWARE_LIST(config, "cart_list").set_original("c128_cart");
- SOFTWARE_LIST(config, "cass_list_c64").set_original("c64_cass");
- SOFTWARE_LIST(config, "flop_list_c64").set_original("c64_flop");
- SOFTWARE_LIST(config, "flop_list").set_original("c128_flop");
- SOFTWARE_LIST(config, "from_list").set_original("c128_rom");
- subdevice<software_list_device>("cart_list_vic10")->set_filter("NTSC");
- subdevice<software_list_device>("cart_list_c64")->set_filter("NTSC");
- subdevice<software_list_device>("cart_list")->set_filter("NTSC");
- subdevice<software_list_device>("cass_list_c64")->set_filter("NTSC");
- subdevice<software_list_device>("flop_list_c64")->set_filter("NTSC");
- subdevice<software_list_device>("flop_list")->set_filter("NTSC");
- subdevice<software_list_device>("from_list")->set_filter("NTSC");
+ SOFTWARE_LIST(config, "cart_list_vic10").set_original("vic10").set_filter("NTSC");
+ SOFTWARE_LIST(config, "cart_list_c64").set_original("c64_cart").set_filter("NTSC");
+ SOFTWARE_LIST(config, "cart_list").set_original("c128_cart").set_filter("NTSC");
+ SOFTWARE_LIST(config, "cass_list_c64").set_original("c64_cass").set_filter("NTSC");
+ SOFTWARE_LIST(config, "flop_list_c64").set_original("c64_flop").set_filter("NTSC");
+ SOFTWARE_LIST(config, "flop_list").set_original("c128_flop").set_filter("NTSC");
+ SOFTWARE_LIST(config, "from_list").set_original("c128_rom").set_filter("NTSC");
// function ROM
GENERIC_SOCKET(config, "from", generic_plain_slot, "c128_rom", "bin,rom");
diff --git a/src/mame/drivers/c64.cpp b/src/mame/drivers/c64.cpp
index 2a0f112d48f..0906d5ffa13 100644
--- a/src/mame/drivers/c64.cpp
+++ b/src/mame/drivers/c64.cpp
@@ -1539,14 +1539,10 @@ void c64_state::ntsc(machine_config &config)
QUICKLOAD(config, "quickload", "p00,prg,t64", CBM_QUICKLOAD_DELAY).set_load_callback(FUNC(c64_state::quickload_c64), this);
// software list
- SOFTWARE_LIST(config, "cart_list_vic10").set_original("vic10");
- SOFTWARE_LIST(config, "cart_list_c64").set_original("c64_cart");
- SOFTWARE_LIST(config, "cass_list").set_original("c64_cass");
- SOFTWARE_LIST(config, "flop_list").set_original("c64_flop");
- subdevice<software_list_device>("cart_list_vic10")->set_filter("NTSC");
- subdevice<software_list_device>("cart_list_c64")->set_filter("NTSC");
- subdevice<software_list_device>("cass_list")->set_filter("NTSC");
- subdevice<software_list_device>("flop_list")->set_filter("NTSC");
+ SOFTWARE_LIST(config, "cart_list_vic10").set_original("vic10").set_filter("NTSC");
+ SOFTWARE_LIST(config, "cart_list_c64").set_original("c64_cart").set_filter("NTSC");
+ SOFTWARE_LIST(config, "cass_list").set_original("c64_cass").set_filter("NTSC");
+ SOFTWARE_LIST(config, "flop_list").set_original("c64_flop").set_filter("NTSC");
// internal ram
RAM(config, RAM_TAG).set_default_size("64K");
@@ -1715,14 +1711,10 @@ void c64_state::pal(machine_config &config)
QUICKLOAD(config, "quickload", "p00,prg,t64", CBM_QUICKLOAD_DELAY).set_load_callback(FUNC(c64_state::quickload_c64), this);
// software list
- SOFTWARE_LIST(config, "cart_list_vic10").set_original("vic10");
- SOFTWARE_LIST(config, "cart_list_c64").set_original("c64_cart");
- SOFTWARE_LIST(config, "cass_list").set_original("c64_cass");
- SOFTWARE_LIST(config, "flop_list").set_original("c64_flop");
- subdevice<software_list_device>("cart_list_vic10")->set_filter("PAL");
- subdevice<software_list_device>("cart_list_c64")->set_filter("PAL");
- subdevice<software_list_device>("cass_list")->set_filter("PAL");
- subdevice<software_list_device>("flop_list")->set_filter("PAL");
+ SOFTWARE_LIST(config, "cart_list_vic10").set_original("vic10").set_filter("PAL");
+ SOFTWARE_LIST(config, "cart_list_c64").set_original("c64_cart").set_filter("PAL");
+ SOFTWARE_LIST(config, "cass_list").set_original("c64_cass").set_filter("PAL");
+ SOFTWARE_LIST(config, "flop_list").set_original("c64_flop").set_filter("PAL");
// internal ram
RAM(config, RAM_TAG).set_default_size("64K");
@@ -1865,10 +1857,8 @@ void c64gs_state::pal_gs(machine_config &config)
QUICKLOAD(config, "quickload", "p00,prg,t64", CBM_QUICKLOAD_DELAY).set_load_callback(FUNC(c64_state::quickload_c64), this);
// software list
- SOFTWARE_LIST(config, "cart_list_vic10").set_original("vic10");
- SOFTWARE_LIST(config, "cart_list_c64").set_original("c64_cart");
- subdevice<software_list_device>("cart_list_vic10")->set_filter("PAL");
- subdevice<software_list_device>("cart_list_c64")->set_filter("PAL");
+ SOFTWARE_LIST(config, "cart_list_vic10").set_original("vic10").set_filter("PAL");
+ SOFTWARE_LIST(config, "cart_list_c64").set_original("c64_cart").set_filter("PAL");
// internal ram
RAM(config, RAM_TAG).set_default_size("64K");
diff --git a/src/mame/drivers/c65.cpp b/src/mame/drivers/c65.cpp
index 69d0e552db1..d826c3f1828 100644
--- a/src/mame/drivers/c65.cpp
+++ b/src/mame/drivers/c65.cpp
@@ -499,7 +499,7 @@ void c65_state::c65_map(address_map &map)
// 0x0d440, 0x0d4*f Left SID
map(0x0d600, 0x0d6ff).rw(FUNC(c65_state::uart_r), FUNC(c65_state::uart_w));
map(0x0d700, 0x0d702).w(FUNC(c65_state::DMAgic_w)).share("dmalist"); // 0x0d700, 0x0d7** DMAgic
- //AM_RANGE(0x0d703, 0x0d703) AM_READ(DMAgic_r)
+ //map(0x0d703, 0x0d703).r(FUNC(c65_state::DMAgic_r));
// 0x0d800, 0x0d8** Color matrix
map(0x0d800, 0x0dfff).rw(FUNC(c65_state::CIASelect_r), FUNC(c65_state::CIASelect_w)).share("cram");
// 0x0dc00, 0x0dc** CIA-1
diff --git a/src/mame/drivers/calchase.cpp b/src/mame/drivers/calchase.cpp
index 0e844b1bae8..4a53a9e4ecf 100644
--- a/src/mame/drivers/calchase.cpp
+++ b/src/mame/drivers/calchase.cpp
@@ -429,7 +429,7 @@ void calchase_state::calchase_io(address_map &map)
map(0x01f0, 0x01f7).rw("ide", FUNC(ide_controller_32_device::cs0_r), FUNC(ide_controller_32_device::cs0_w));
map(0x0200, 0x021f).noprw(); //To debug
map(0x0260, 0x026f).noprw(); //To debug
- map(0x0278, 0x027b).nopw();//AM_WRITE(pnp_config_w)
+ map(0x0278, 0x027b).nopw();//.w(FUNC(calchase_state::pnp_config_w));
map(0x0280, 0x0287).noprw(); //To debug
map(0x02a0, 0x02a7).noprw(); //To debug
map(0x02c0, 0x02c7).noprw(); //To debug
@@ -446,7 +446,7 @@ void calchase_state::calchase_io(address_map &map)
// map(0x03b0, 0x03df).noprw();
map(0x03f0, 0x03f7).rw("ide", FUNC(ide_controller_32_device::cs1_r), FUNC(ide_controller_32_device::cs1_w));
map(0x03f8, 0x03ff).noprw(); // To debug Serial Port COM1:
- map(0x0a78, 0x0a7b).nopw();//AM_WRITE(pnp_data_w)
+ map(0x0a78, 0x0a7b).nopw();//.w(FUNC(calchase_state::pnp_data_w));
map(0x0cf8, 0x0cff).rw("pcibus", FUNC(pci_bus_legacy_device::read), FUNC(pci_bus_legacy_device::write));
map(0x42e8, 0x43ef).noprw(); //To debug
map(0x43c4, 0x43cb).rw("vga", FUNC(trident_vga_device::port_43c6_r), FUNC(trident_vga_device::port_43c6_w)); // Trident Memory and Video Clock register
diff --git a/src/mame/drivers/calcune.cpp b/src/mame/drivers/calcune.cpp
index 99015786c43..5697e051c79 100644
--- a/src/mame/drivers/calcune.cpp
+++ b/src/mame/drivers/calcune.cpp
@@ -123,7 +123,7 @@ void calcune_state::calcune_map(address_map &map)
map(0x710000, 0x710001).portr("710000");
map(0x720000, 0x720001).portr("720000");
-// AM_RANGE(0x730000, 0x730001) possible Z80 control?
+// map(0x730000, 0x730001) possible Z80 control?
map(0x760000, 0x760003).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write)).umask16(0xff00);
map(0x770000, 0x770001).w(FUNC(calcune_state::cal_770000_w));
diff --git a/src/mame/drivers/camplynx.cpp b/src/mame/drivers/camplynx.cpp
index 68fbeb949e6..1376514a64b 100644
--- a/src/mame/drivers/camplynx.cpp
+++ b/src/mame/drivers/camplynx.cpp
@@ -525,10 +525,10 @@ void camplynx_state::lynx128k_io(address_map &map)
map(0x0050, 0x0053).mirror(0xff80).r("fdc", FUNC(fd1793_device::read));
map(0x0054, 0x0057).mirror(0xff80).w("fdc", FUNC(fd1793_device::write));
map(0x0058, 0x0058).mirror(0xff80).w(FUNC(camplynx_state::port58_w));
-// AM_RANGE(0x007a,0x007b) AM_MIRROR(0xff80) AM_READ(lynx128k_joysticks_r)
-// AM_RANGE(0x007c,0x007c) AM_MIRROR(0xff80) AM_READ(lynx128k_printer_r)
-// AM_RANGE(0x007d,0x007d) AM_MIRROR(0xff80) AM_WRITE(lynx128k_printer_init_w) // this is rw
-// AM_RANGE(0x007e,0x007e) AM_MIRROR(0xff80) AM_WRITE(lynx128k_printer_w)
+// map(0x007a, 0x007b).mirror(0xff80).r(FUNC(camplynx_state::lynx128k_joysticks_r));
+// map(0x007c, 0x007c).mirror(0xff80).r(FUNC(camplynx_state::lynx128k_printer_r));
+// map(0x007d, 0x007d).mirror(0xff80).w(FUNC(camplynx_state::lynx128k_printer_init_w)); // this is rw
+// map(0x007e, 0x007e).mirror(0xff80).w(FUNC(camplynx_state::lynx128k_printer_w));
map(0x0080, 0x0080).mirror(0xff00).w(FUNC(camplynx_state::port80_w));
map(0x0080, 0x0080).mirror(0xf000).portr("LINE0");
map(0x0180, 0x0180).mirror(0xf000).portr("LINE1");
diff --git a/src/mame/drivers/candela.cpp b/src/mame/drivers/candela.cpp
index b909195754d..0b38881a307 100644
--- a/src/mame/drivers/candela.cpp
+++ b/src/mame/drivers/candela.cpp
@@ -643,7 +643,7 @@ void can09_state::can09_map(address_map &map)
* Port A=0x18 B=0x00
* Port A=0x10 B=
*/
-// AM_RANGE(0x0000, 0x7fff) AM_RAM
+// map(0x0000, 0x7fff).ram();
map(0x0000, 0x7fff).ram().bankrw("bank1");
map(0xe000, 0xffff).rom().region("roms", 0);
map(0xe020, 0xe020).w(m_crtc, FUNC(hd6845s_device::address_w));
diff --git a/src/mame/drivers/capr1.cpp b/src/mame/drivers/capr1.cpp
index 820b951d612..4b47bdb8063 100644
--- a/src/mame/drivers/capr1.cpp
+++ b/src/mame/drivers/capr1.cpp
@@ -73,10 +73,10 @@ void capr1_state::cspin2_map(address_map &map)
map(0xa000, 0xa00f).rw("te7750", FUNC(te7750_device::read), FUNC(te7750_device::write));
map(0xc000, 0xc001).rw("ym", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
map(0xc004, 0xc004).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
-// AM_RANGE(0xc008, 0xc009) AM_DEVWRITE("fifo1", m66300_device, write)
-// AM_RANGE(0xc00c, 0xc00d) AM_DEVWRITE("fifo2", m66300_device, write)
-// AM_RANGE(0xe000, 0xe001) AM_WRITENOP
-// AM_RANGE(0xe002, 0xe004) AM_WRITENOP
+// map(0xc008, 0xc009).w("fifo1", FUNC(m66300_device::write));
+// map(0xc00c, 0xc00d).w("fifo2", FUNC(m66300_device::write));
+// map(0xe000, 0xe001).nopw();
+// map(0xe002, 0xe004).nopw();
}
diff --git a/src/mame/drivers/casloopy.cpp b/src/mame/drivers/casloopy.cpp
index 00d23c5d65e..e189a822b63 100644
--- a/src/mame/drivers/casloopy.cpp
+++ b/src/mame/drivers/casloopy.cpp
@@ -435,8 +435,8 @@ void casloopy_state::casloopy_map(address_map &map)
map(0x04051000, 0x040511ff).rw(FUNC(casloopy_state::pal_r), FUNC(casloopy_state::pal_w));
map(0x04058000, 0x04058007).rw(FUNC(casloopy_state::vregs_r), FUNC(casloopy_state::vregs_w));
map(0x0405b000, 0x0405b00f).ram().share("vregs"); // RGB555 brightness control plus scrolling
-// AM_RANGE(0x05ffff00, 0x05ffffff) AM_READWRITE16(sh7021_r, sh7021_w, 0xffffffff)
-// AM_RANGE(0x05ffff00, 0x05ffffff) - SH7021 internal i/o
+// map(0x05ffff00, 0x05ffffff).rw(FUNC(casloopy_state::sh7021_r), FUNC(casloopy_state::sh7021_w));
+// map(0x05ffff00, 0x05ffffff) - SH7021 internal i/o
map(0x06000000, 0x062fffff).r(FUNC(casloopy_state::cart_r));
map(0x07000000, 0x070003ff).ram().share("oram");// on-chip RAM, actually at 0xf000000 (1 kb)
map(0x09000000, 0x0907ffff).ram().share("wram");
diff --git a/src/mame/drivers/cave.cpp b/src/mame/drivers/cave.cpp
index f5c895ad14f..89e36b424a8 100644
--- a/src/mame/drivers/cave.cpp
+++ b/src/mame/drivers/cave.cpp
@@ -52,7 +52,8 @@ To Do:
- Max sprite number is possibly less than 1024
(ex: Boss explosion scene at most of cave shmups on real hardware)
-- Tilemap scrolling issue in ppsatan right screen
+- Tilemap scrolling issue in ppsatan right screen when flipped left
+ screen at some scenes
Stephh's notes (based on the games M68000 code and some tests) :
@@ -417,58 +418,6 @@ void cave_state::metmqstr_eeprom_w(u8 data)
/***************************************************************************
- VRAM
-
-
-***************************************************************************/
-
-template<int Chip>
-void cave_state::vram_w(offs_t offset, u16 data, u16 mem_mask)
-{
- u16 *VRAM = m_vram[Chip];
- const bool TDIM = m_tiledim[Chip];
- tilemap_t *TILEMAP = m_tilemap[Chip];
-
- if ((VRAM[offset] & mem_mask) == (data & mem_mask))
- return;
-
- COMBINE_DATA(&VRAM[offset]);
- offset /= 2;
- if ((offset < 0x1000 / 4) && (TDIM)) // 16x16 tilemap
- {
- offset = (offset % (512 / 16)) * 2 + (offset / (512 / 16)) * (512 / 8) * 2;
- TILEMAP->mark_tile_dirty(offset + 0);
- TILEMAP->mark_tile_dirty(offset + 1);
- TILEMAP->mark_tile_dirty(offset + 0 + 512 / 8);
- TILEMAP->mark_tile_dirty(offset + 1 + 512 / 8);
- }
- else if ((offset >= 0x4000 / 4) && (!TDIM)) // 8x8 tilemap
- TILEMAP->mark_tile_dirty(offset - 0x4000 / 4);
-}
-
-/* Some games, that only ever use the 8x8 tiles and no line scroll,
- use mirror ram. For example in donpachi, writes to 400000-403fff
- and 408000-407fff both go to the 8x8 tilemap ram. Use this function
- in this cases. Note that the get_tile_info function looks in the
- 4000-7fff range for tiles, so we have to write the data there. */
-template<int Chip>
-void cave_state::vram_8x8_w(offs_t offset, u16 data, u16 mem_mask)
-{
- u16 *VRAM = m_vram[Chip];
- tilemap_t *TILEMAP = m_tilemap[Chip];
-
- offset %= 0x4000 / 2;
- if ((VRAM[offset] & mem_mask) == (data & mem_mask))
- return;
-
- COMBINE_DATA(&VRAM[offset + 0x0000 / 2]);
- COMBINE_DATA(&VRAM[offset + 0x4000 / 2]);
- TILEMAP->mark_tile_dirty(offset / 2);
-}
-
-/***************************************************************************
-
-
Memory Maps - Main CPU
@@ -484,22 +433,22 @@ void cave_state::vram_8x8_w(offs_t offset, u16 data, u16 mem_mask)
void cave_state::dfeveron_map(address_map &map)
{
- map(0x000000, 0x0fffff).rom(); // ROM
- map(0x100000, 0x10ffff).ram(); // RAM
- map(0x300000, 0x300003).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write)).umask16(0x00ff); // YMZ280
- map(0x400000, 0x40ffff).ram().share("spriteram.0"); // Sprites
- map(0x500000, 0x507fff).ram().w(FUNC(cave_state::vram_w<0>)).share("vram.0"); // Layer 0
- map(0x600000, 0x607fff).ram().w(FUNC(cave_state::vram_w<1>)).share("vram.1"); // Layer 1
- map(0x708000, 0x708fff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
- map(0x710000, 0x710bff).readonly(); // ?
- map(0x710c00, 0x710fff).ram(); // ?
- map(0x800000, 0x80007f).writeonly().share("videoregs.0"); // Video Regs
- map(0x800000, 0x800007).r(FUNC(cave_state::irq_cause_r)); // IRQ Cause
- map(0x900000, 0x900005).ram().share("vctrl.0"); // Layer 0 Control
- map(0xa00000, 0xa00005).ram().share("vctrl.1"); // Layer 1 Control
- map(0xb00000, 0xb00001).portr("IN0"); // Inputs
- map(0xb00002, 0xb00003).portr("IN1"); // Inputs + EEPROM
- map(0xc00000, 0xc00000).w(FUNC(cave_state::eeprom_w)); // EEPROM
+ map(0x000000, 0x0fffff).rom(); // ROM
+ map(0x100000, 0x10ffff).ram(); // RAM
+ map(0x300000, 0x300003).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write)).umask16(0x00ff); // YMZ280
+ map(0x400000, 0x40ffff).ram().share("spriteram.0"); // Sprites
+ map(0x500000, 0x507fff).m(m_tilemap[0], FUNC(tilemap038_device::vram_map)); // Layer 0
+ map(0x600000, 0x607fff).m(m_tilemap[1], FUNC(tilemap038_device::vram_map)); // Layer 1
+ map(0x708000, 0x708fff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
+ map(0x710000, 0x710bff).readonly(); // ?
+ map(0x710c00, 0x710fff).ram(); // ?
+ map(0x800000, 0x80007f).writeonly().share("videoregs.0"); // Video Regs
+ map(0x800000, 0x800007).r(FUNC(cave_state::irq_cause_r)); // IRQ Cause
+ map(0x900000, 0x900005).rw(m_tilemap[0], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 0 Control
+ map(0xa00000, 0xa00005).rw(m_tilemap[1], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 1 Control
+ map(0xb00000, 0xb00001).portr("IN0"); // Inputs
+ map(0xb00002, 0xb00003).portr("IN1"); // Inputs + EEPROM
+ map(0xc00000, 0xc00000).w(FUNC(cave_state::eeprom_w)); // EEPROM
}
@@ -509,22 +458,22 @@ void cave_state::dfeveron_map(address_map &map)
void cave_state::ddonpach_map(address_map &map)
{
- map(0x000000, 0x0fffff).rom(); // ROM
- map(0x100000, 0x10ffff).ram(); // RAM
- map(0x300000, 0x300003).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write)).umask16(0x00ff); // YMZ280
- map(0x400000, 0x40ffff).ram().share("spriteram.0"); // Sprites
- map(0x500000, 0x507fff).ram().w(FUNC(cave_state::vram_w<0>)).share("vram.0"); // Layer 0
- map(0x600000, 0x607fff).ram().w(FUNC(cave_state::vram_w<1>)).share("vram.1"); // Layer 1
- map(0x700000, 0x70ffff).ram().w(FUNC(cave_state::vram_8x8_w<2>)).share("vram.2"); // Layer 2
- map(0x800000, 0x80007f).writeonly().share("videoregs.0"); // Video Regs
- map(0x800000, 0x800007).r(FUNC(cave_state::irq_cause_r)); // IRQ Cause
- map(0x900000, 0x900005).ram().share("vctrl.0"); // Layer 0 Control
- map(0xa00000, 0xa00005).ram().share("vctrl.1"); // Layer 1 Control
- map(0xb00000, 0xb00005).ram().share("vctrl.2"); // Layer 2 Control
- map(0xc00000, 0xc0ffff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
- map(0xd00000, 0xd00001).portr("IN0"); // Inputs
- map(0xd00002, 0xd00003).portr("IN1"); // Inputs + EEPROM
- map(0xe00000, 0xe00000).w(FUNC(cave_state::eeprom_w)); // EEPROM
+ map(0x000000, 0x0fffff).rom(); // ROM
+ map(0x100000, 0x10ffff).ram(); // RAM
+ map(0x300000, 0x300003).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write)).umask16(0x00ff); // YMZ280
+ map(0x400000, 0x40ffff).ram().share("spriteram.0"); // Sprites
+ map(0x500000, 0x507fff).m(m_tilemap[0], FUNC(tilemap038_device::vram_map)); // Layer 0
+ map(0x600000, 0x607fff).m(m_tilemap[1], FUNC(tilemap038_device::vram_map)); // Layer 1
+ map(0x700000, 0x70ffff).m(m_tilemap[2], FUNC(tilemap038_device::vram_8x8_map)); // Layer 2
+ map(0x800000, 0x80007f).writeonly().share("videoregs.0"); // Video Regs
+ map(0x800000, 0x800007).r(FUNC(cave_state::irq_cause_r)); // IRQ Cause
+ map(0x900000, 0x900005).rw(m_tilemap[0], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 0 Control
+ map(0xa00000, 0xa00005).rw(m_tilemap[1], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 1 Control
+ map(0xb00000, 0xb00005).rw(m_tilemap[2], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 2 Control
+ map(0xc00000, 0xc0ffff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
+ map(0xd00000, 0xd00001).portr("IN0"); // Inputs
+ map(0xd00002, 0xd00003).portr("IN1"); // Inputs + EEPROM
+ map(0xe00000, 0xe00000).w(FUNC(cave_state::eeprom_w)); // EEPROM
}
@@ -549,13 +498,13 @@ void cave_state::donpachi_map(address_map &map)
{
map(0x000000, 0x07ffff).rom(); // ROM
map(0x100000, 0x10ffff).ram(); // RAM
- map(0x200000, 0x207fff).ram().w(FUNC(cave_state::vram_w<1>)).share("vram.1"); // Layer 1
- map(0x300000, 0x307fff).ram().w(FUNC(cave_state::vram_w<0>)).share("vram.0"); // Layer 0
- map(0x400000, 0x407fff).ram().w(FUNC(cave_state::vram_8x8_w<2>)).share("vram.2"); // Layer 2
+ map(0x200000, 0x207fff).m(m_tilemap[1], FUNC(tilemap038_device::vram_map)); // Layer 1
+ map(0x300000, 0x307fff).m(m_tilemap[0], FUNC(tilemap038_device::vram_map)); // Layer 0
+ map(0x400000, 0x407fff).m(m_tilemap[2], FUNC(tilemap038_device::vram_8x8_map)); // Layer 2
map(0x500000, 0x50ffff).ram().share("spriteram.0"); // Sprites
- map(0x600000, 0x600005).ram().share("vctrl.1"); // Layer 1 Control
- map(0x700000, 0x700005).ram().share("vctrl.0"); // Layer 0 Control
- map(0x800000, 0x800005).ram().share("vctrl.2"); // Layer 2 Control
+ map(0x600000, 0x600005).rw(m_tilemap[1], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 1 Control
+ map(0x700000, 0x700005).rw(m_tilemap[0], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 0 Control
+ map(0x800000, 0x800005).rw(m_tilemap[2], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 2 Control
map(0x900000, 0x90007f).ram().r(FUNC(cave_state::donpachi_videoregs_r)).share("videoregs.0"); // Video Regs
map(0xa08000, 0xa08fff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
map(0xb00000, 0xb00003).rw("oki1", FUNC(okim6295_device::read), FUNC(okim6295_device::write)).umask16(0x00ff); // M6295
@@ -573,22 +522,22 @@ void cave_state::donpachi_map(address_map &map)
void cave_state::esprade_map(address_map &map)
{
- map(0x000000, 0x0fffff).rom(); // ROM
- map(0x100000, 0x10ffff).ram(); // RAM
- map(0x300000, 0x300003).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write)).umask16(0x00ff); // YMZ280
- map(0x400000, 0x40ffff).ram().share("spriteram.0"); // Sprites
- map(0x500000, 0x507fff).ram().w(FUNC(cave_state::vram_w<0>)).share("vram.0"); // Layer 0
- map(0x600000, 0x607fff).ram().w(FUNC(cave_state::vram_w<1>)).share("vram.1"); // Layer 1
- map(0x700000, 0x707fff).ram().w(FUNC(cave_state::vram_w<2>)).share("vram.2"); // Layer 2
- map(0x800000, 0x80007f).writeonly().share("videoregs.0"); // Video Regs
- map(0x800000, 0x800007).r(FUNC(cave_state::irq_cause_r)); // IRQ Cause
- map(0x900000, 0x900005).ram().share("vctrl.0"); // Layer 0 Control
- map(0xa00000, 0xa00005).ram().share("vctrl.1"); // Layer 1 Control
- map(0xb00000, 0xb00005).ram().share("vctrl.2"); // Layer 2 Control
- map(0xc00000, 0xc0ffff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
- map(0xd00000, 0xd00001).portr("IN0"); // Inputs
- map(0xd00002, 0xd00003).portr("IN1"); // Inputs + EEPROM
- map(0xe00000, 0xe00000).w(FUNC(cave_state::eeprom_w)); // EEPROM
+ map(0x000000, 0x0fffff).rom(); // ROM
+ map(0x100000, 0x10ffff).ram(); // RAM
+ map(0x300000, 0x300003).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write)).umask16(0x00ff); // YMZ280
+ map(0x400000, 0x40ffff).ram().share("spriteram.0"); // Sprites
+ map(0x500000, 0x507fff).m(m_tilemap[0], FUNC(tilemap038_device::vram_map)); // Layer 0
+ map(0x600000, 0x607fff).m(m_tilemap[1], FUNC(tilemap038_device::vram_map)); // Layer 1
+ map(0x700000, 0x707fff).m(m_tilemap[2], FUNC(tilemap038_device::vram_map)); // Layer 2
+ map(0x800000, 0x80007f).writeonly().share("videoregs.0"); // Video Regs
+ map(0x800000, 0x800007).r(FUNC(cave_state::irq_cause_r)); // IRQ Cause
+ map(0x900000, 0x900005).rw(m_tilemap[0], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 0 Control
+ map(0xa00000, 0xa00005).rw(m_tilemap[1], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 1 Control
+ map(0xb00000, 0xb00005).rw(m_tilemap[2], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 2 Control
+ map(0xc00000, 0xc0ffff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
+ map(0xd00000, 0xd00001).portr("IN0"); // Inputs
+ map(0xd00002, 0xd00003).portr("IN1"); // Inputs + EEPROM
+ map(0xe00000, 0xe00000).w(FUNC(cave_state::eeprom_w)); // EEPROM
}
@@ -598,27 +547,27 @@ void cave_state::esprade_map(address_map &map)
void cave_state::gaia_map(address_map &map)
{
- map(0x000000, 0x0fffff).rom(); // ROM
- map(0x100000, 0x10ffff).ram(); // RAM
- map(0x300000, 0x300003).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write)).umask16(0x00ff); // YMZ280
- map(0x400000, 0x40ffff).ram().share("spriteram.0"); // Sprite
- map(0x500000, 0x507fff).ram().w(FUNC(cave_state::vram_w<0>)).share("vram.0"); // Layer 0
- map(0x508000, 0x50ffff).ram(); // More Layer 0, Tested but not used?
- map(0x600000, 0x607fff).ram().w(FUNC(cave_state::vram_w<1>)).share("vram.1"); // Layer 1
- map(0x608000, 0x60ffff).ram(); // More Layer 1, Tested but not used?
- map(0x700000, 0x707fff).ram().w(FUNC(cave_state::vram_w<2>)).share("vram.2"); // Layer 2
- map(0x708000, 0x70ffff).ram(); // More Layer 2, Tested but not used?
- map(0x800000, 0x80007f).writeonly().share("videoregs.0"); // Video Regs
- map(0x800000, 0x800007).r(FUNC(cave_state::irq_cause_r)); // IRQ Cause
- map(0x900000, 0x900005).ram().share("vctrl.0"); // Layer 0 Control
- map(0xa00000, 0xa00005).ram().share("vctrl.1"); // Layer 1 Control
- map(0xb00000, 0xb00005).ram().share("vctrl.2"); // Layer 2 Control
- map(0xc00000, 0xc0ffff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
- map(0xd00010, 0xd00011).portr("IN0"); // Inputs
- map(0xd00011, 0xd00011).w(FUNC(cave_state::gaia_coin_w)); // Coin counter only
- map(0xd00012, 0xd00013).portr("IN1"); // Inputs
- map(0xd00014, 0xd00015).portr("DSW"); // Dips
- map(0xd00014, 0xd00015).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); // Watchdog?
+ map(0x000000, 0x0fffff).rom(); // ROM
+ map(0x100000, 0x10ffff).ram(); // RAM
+ map(0x300000, 0x300003).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write)).umask16(0x00ff); // YMZ280
+ map(0x400000, 0x40ffff).ram().share("spriteram.0"); // Sprite
+ map(0x500000, 0x507fff).m(m_tilemap[0], FUNC(tilemap038_device::vram_map)); // Layer 0
+ map(0x508000, 0x50ffff).ram(); // More Layer 0, Tested but not used?
+ map(0x600000, 0x607fff).m(m_tilemap[1], FUNC(tilemap038_device::vram_map)); // Layer 1
+ map(0x608000, 0x60ffff).ram(); // More Layer 1, Tested but not used?
+ map(0x700000, 0x707fff).m(m_tilemap[2], FUNC(tilemap038_device::vram_map)); // Layer 2
+ map(0x708000, 0x70ffff).ram(); // More Layer 2, Tested but not used?
+ map(0x800000, 0x80007f).writeonly().share("videoregs.0"); // Video Regs
+ map(0x800000, 0x800007).r(FUNC(cave_state::irq_cause_r)); // IRQ Cause
+ map(0x900000, 0x900005).rw(m_tilemap[0], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 0 Control
+ map(0xa00000, 0xa00005).rw(m_tilemap[1], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 1 Control
+ map(0xb00000, 0xb00005).rw(m_tilemap[2], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 2 Control
+ map(0xc00000, 0xc0ffff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
+ map(0xd00010, 0xd00011).portr("IN0"); // Inputs
+ map(0xd00011, 0xd00011).w(FUNC(cave_state::gaia_coin_w)); // Coin counter only
+ map(0xd00012, 0xd00013).portr("IN1"); // Inputs
+ map(0xd00014, 0xd00015).portr("DSW"); // Dips
+ map(0xd00014, 0xd00015).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); // Watchdog?
}
@@ -628,24 +577,24 @@ void cave_state::gaia_map(address_map &map)
void cave_state::guwange_map(address_map &map)
{
- map(0x000000, 0x0fffff).rom(); // ROM
- map(0x200000, 0x20ffff).ram(); // RAM
- map(0x300000, 0x30007f).writeonly().share("videoregs.0"); // Video Regs
- map(0x300000, 0x300007).r(FUNC(cave_state::irq_cause_r)); // IRQ Cause
- map(0x400000, 0x40ffff).ram().share("spriteram.0"); // Sprites
- map(0x500000, 0x507fff).ram().w(FUNC(cave_state::vram_w<0>)).share("vram.0"); // Layer 0
- map(0x600000, 0x607fff).ram().w(FUNC(cave_state::vram_w<1>)).share("vram.1"); // Layer 1
- map(0x700000, 0x707fff).ram().w(FUNC(cave_state::vram_w<2>)).share("vram.2"); // Layer 2
- map(0x800000, 0x800003).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write)).umask16(0x00ff); // YMZ280
- map(0x900000, 0x900005).ram().share("vctrl.0"); // Layer 0 Control
- map(0xa00000, 0xa00005).ram().share("vctrl.1"); // Layer 1 Control
- map(0xb00000, 0xb00005).ram().share("vctrl.2"); // Layer 2 Control
-/**/map(0xc00000, 0xc0ffff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
- map(0xd00010, 0xd00011).portr("IN0"); // Inputs
- map(0xd00011, 0xd00011).w(FUNC(cave_state::guwange_eeprom_w)); // EEPROM
- map(0xd00012, 0xd00013).portr("IN1"); // Inputs + EEPROM
-// map(0xd00012, 0xd00013).nopw(); // ?
-// map(0xd00014, 0xd00015).nopw(); // ? $800068 in dfeveron ? probably Watchdog
+ map(0x000000, 0x0fffff).rom(); // ROM
+ map(0x200000, 0x20ffff).ram(); // RAM
+ map(0x300000, 0x30007f).writeonly().share("videoregs.0"); // Video Regs
+ map(0x300000, 0x300007).r(FUNC(cave_state::irq_cause_r)); // IRQ Cause
+ map(0x400000, 0x40ffff).ram().share("spriteram.0"); // Sprites
+ map(0x500000, 0x507fff).m(m_tilemap[0], FUNC(tilemap038_device::vram_map)); // Layer 0
+ map(0x600000, 0x607fff).m(m_tilemap[1], FUNC(tilemap038_device::vram_map)); // Layer 1
+ map(0x700000, 0x707fff).m(m_tilemap[2], FUNC(tilemap038_device::vram_map)); // Layer 2
+ map(0x800000, 0x800003).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write)).umask16(0x00ff); // YMZ280
+ map(0x900000, 0x900005).rw(m_tilemap[0], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 0 Control
+ map(0xa00000, 0xa00005).rw(m_tilemap[1], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 1 Control
+ map(0xb00000, 0xb00005).rw(m_tilemap[2], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 2 Control
+/**/map(0xc00000, 0xc0ffff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
+ map(0xd00010, 0xd00011).portr("IN0"); // Inputs
+ map(0xd00011, 0xd00011).w(FUNC(cave_state::guwange_eeprom_w)); // EEPROM
+ map(0xd00012, 0xd00013).portr("IN1"); // Inputs + EEPROM
+// map(0xd00012, 0xd00013).nopw(); // ?
+// map(0xd00014, 0xd00015).nopw(); // ? $800068 in dfeveron ? probably Watchdog
}
@@ -655,24 +604,24 @@ void cave_state::guwange_map(address_map &map)
void cave_state::hotdogst_map(address_map &map)
{
- map(0x000000, 0x0fffff).rom(); // ROM
- map(0x300000, 0x30ffff).ram(); // RAM
- map(0x408000, 0x408fff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
- map(0x880000, 0x887fff).ram().w(FUNC(cave_state::vram_w<0>)).share("vram.0"); // Layer 0
- map(0x900000, 0x907fff).ram().w(FUNC(cave_state::vram_w<1>)).share("vram.1"); // Layer 1
- map(0x980000, 0x987fff).ram().w(FUNC(cave_state::vram_w<2>)).share("vram.2"); // Layer 2
- map(0xa80000, 0xa8007f).writeonly().share("videoregs.0"); // Video Regs
- map(0xa80000, 0xa80007).r(FUNC(cave_state::irq_cause_r)); // IRQ Cause
-// map(0xa8006e, 0xa8006f).r(FUNC(cave_state::soundlatch_ack_r)); // From Sound CPU
- map(0xa8006e, 0xa8006f).w(FUNC(cave_state::sound_cmd_w)); // To Sound CPU
- map(0xb00000, 0xb00005).ram().share("vctrl.0"); // Layer 0 Control
- map(0xb80000, 0xb80005).ram().share("vctrl.1"); // Layer 1 Control
- map(0xc00000, 0xc00005).ram().share("vctrl.2"); // Layer 2 Control
- map(0xc80000, 0xc80001).portr("IN0"); // Inputs
- map(0xc80002, 0xc80003).portr("IN1"); // Inputs + EEPROM
- map(0xd00000, 0xd00000).w(FUNC(cave_state::hotdogst_eeprom_w)); // EEPROM
- map(0xd00002, 0xd00003).nopw(); // ???
- map(0xf00000, 0xf0ffff).ram().share("spriteram.0"); // Sprites
+ map(0x000000, 0x0fffff).rom(); // ROM
+ map(0x300000, 0x30ffff).ram(); // RAM
+ map(0x408000, 0x408fff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
+ map(0x880000, 0x887fff).m(m_tilemap[0], FUNC(tilemap038_device::vram_map)); // Layer 0
+ map(0x900000, 0x907fff).m(m_tilemap[1], FUNC(tilemap038_device::vram_map)); // Layer 1
+ map(0x980000, 0x987fff).m(m_tilemap[2], FUNC(tilemap038_device::vram_map)); // Layer 2
+ map(0xa80000, 0xa8007f).writeonly().share("videoregs.0"); // Video Regs
+ map(0xa80000, 0xa80007).r(FUNC(cave_state::irq_cause_r)); // IRQ Cause
+// map(0xa8006e, 0xa8006f).r(FUNC(cave_state::soundlatch_ack_r)); // From Sound CPU
+ map(0xa8006e, 0xa8006f).w(FUNC(cave_state::sound_cmd_w)); // To Sound CPU
+ map(0xb00000, 0xb00005).rw(m_tilemap[0], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 0 Control
+ map(0xb80000, 0xb80005).rw(m_tilemap[1], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 1 Control
+ map(0xc00000, 0xc00005).rw(m_tilemap[2], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 2 Control
+ map(0xc80000, 0xc80001).portr("IN0"); // Inputs
+ map(0xc80002, 0xc80003).portr("IN1"); // Inputs + EEPROM
+ map(0xd00000, 0xd00000).w(FUNC(cave_state::hotdogst_eeprom_w)); // EEPROM
+ map(0xd00002, 0xd00003).nopw(); // ???
+ map(0xf00000, 0xf0ffff).ram().share("spriteram.0"); // Sprites
}
@@ -744,8 +693,8 @@ READ_LINE_MEMBER(cave_state::korokoro_hopper_r)
void cave_state::korokoro_map(address_map &map)
{
map(0x000000, 0x07ffff).rom(); // ROM
- map(0x100000, 0x107fff).w(FUNC(cave_state::vram_w<0>)).share("vram.0"); // Layer 0
- map(0x140000, 0x140005).writeonly().share("vctrl.0"); // Layer 0 Control
+ map(0x100000, 0x107fff).m(m_tilemap[0], FUNC(tilemap038_device::vram_writeonly_map)); // Layer 0
+ map(0x140000, 0x140005).w(m_tilemap[0], FUNC(tilemap038_device::vregs_w)); // Layer 0 Control
map(0x180000, 0x187fff).writeonly().share("spriteram.0"); // Sprites
map(0x1c0000, 0x1c007f).writeonly().share("videoregs.0"); // Video Regs
map(0x1c0000, 0x1c0007).r(FUNC(cave_state::irq_cause_r)); // IRQ Cause
@@ -763,8 +712,8 @@ void cave_state::korokoro_map(address_map &map)
void cave_state::crusherm_map(address_map &map)
{
map(0x000000, 0x07ffff).rom(); // ROM
- map(0x100000, 0x107fff).w(FUNC(cave_state::vram_w<0>)).share("vram.0"); // Layer 0
- map(0x140000, 0x140005).writeonly().share("vctrl.0"); // Layer 0 Control
+ map(0x100000, 0x107fff).m(m_tilemap[0], FUNC(tilemap038_device::vram_writeonly_map)); // Layer 0
+ map(0x140000, 0x140005).w(m_tilemap[0], FUNC(tilemap038_device::vregs_w)); // Layer 0 Control
map(0x180000, 0x187fff).writeonly().share("spriteram.0"); // Sprites
map(0x200000, 0x207fff).writeonly().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
map(0x240000, 0x240003).w("ymz", FUNC(ymz280b_device::write)).umask16(0x00ff); // YMZ280
@@ -784,22 +733,22 @@ void cave_state::crusherm_map(address_map &map)
void cave_state::mazinger_map(address_map &map)
{
- map(0x000000, 0x07ffff).rom(); // ROM
- map(0x100000, 0x10ffff).ram(); // RAM
- map(0x200000, 0x20ffff).ram().share("spriteram.0"); // Sprites
- map(0x300000, 0x30007f).writeonly().share("videoregs.0"); // Video Regs
- map(0x300000, 0x300007).r(FUNC(cave_state::irq_cause_r)); // IRQ Cause
- map(0x300068, 0x300069).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); // Watchdog
- map(0x30006e, 0x30006f).rw(FUNC(cave_state::soundlatch_ack_r), FUNC(cave_state::sound_cmd_w)); // From Sound CPU
- map(0x400000, 0x407fff).ram().w(FUNC(cave_state::vram_8x8_w<1>)).share("vram.1"); // Layer 1
- map(0x500000, 0x507fff).ram().w(FUNC(cave_state::vram_8x8_w<0>)).share("vram.0"); // Layer 0
- map(0x600000, 0x600005).ram().share("vctrl.1"); // Layer 1 Control
- map(0x700000, 0x700005).ram().share("vctrl.0"); // Layer 0 Control
- map(0x800000, 0x800001).portr("IN0"); // Inputs
- map(0x800002, 0x800003).portr("IN1"); // Inputs + EEPROM
- map(0x900000, 0x900000).w(FUNC(cave_state::eeprom_w)); // EEPROM
- map(0xc08000, 0xc0ffff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
- map(0xd00000, 0xd7ffff).rom().region("user1", 0); // extra data ROM
+ map(0x000000, 0x07ffff).rom(); // ROM
+ map(0x100000, 0x10ffff).ram(); // RAM
+ map(0x200000, 0x20ffff).ram().share("spriteram.0"); // Sprites
+ map(0x300000, 0x30007f).writeonly().share("videoregs.0"); // Video Regs
+ map(0x300000, 0x300007).r(FUNC(cave_state::irq_cause_r)); // IRQ Cause
+ map(0x300068, 0x300069).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); // Watchdog
+ map(0x30006e, 0x30006f).rw(FUNC(cave_state::soundlatch_ack_r), FUNC(cave_state::sound_cmd_w)); // From Sound CPU
+ map(0x400000, 0x407fff).m(m_tilemap[1], FUNC(tilemap038_device::vram_8x8_map)); // Layer 1
+ map(0x500000, 0x507fff).m(m_tilemap[0], FUNC(tilemap038_device::vram_8x8_map)); // Layer 0
+ map(0x600000, 0x600005).rw(m_tilemap[1], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 1 Control
+ map(0x700000, 0x700005).rw(m_tilemap[0], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 0 Control
+ map(0x800000, 0x800001).portr("IN0"); // Inputs
+ map(0x800002, 0x800003).portr("IN1"); // Inputs + EEPROM
+ map(0x900000, 0x900000).w(FUNC(cave_state::eeprom_w)); // EEPROM
+ map(0xc08000, 0xc0ffff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
+ map(0xd00000, 0xd7ffff).rom().region("user1", 0); // extra data ROM
}
@@ -809,29 +758,29 @@ void cave_state::mazinger_map(address_map &map)
void cave_state::metmqstr_map(address_map &map)
{
- map(0x000000, 0x07ffff).rom(); // ROM
- map(0x100000, 0x17ffff).rom(); // ROM
- map(0x200000, 0x27ffff).rom(); // ROM
- map(0x408000, 0x408fff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
- map(0x600000, 0x600001).r("watchdog", FUNC(watchdog_timer_device::reset16_r)); // Watchdog?
- map(0x880000, 0x887fff).ram().w(FUNC(cave_state::vram_w<2>)).share("vram.2"); // Layer 2
- map(0x888000, 0x88ffff).ram(); //
- map(0x900000, 0x907fff).ram().w(FUNC(cave_state::vram_w<1>)).share("vram.1"); // Layer 1
- map(0x908000, 0x90ffff).ram(); //
- map(0x980000, 0x987fff).ram().w(FUNC(cave_state::vram_w<0>)).share("vram.0"); // Layer 0
- map(0x988000, 0x98ffff).ram(); //
- map(0xa80000, 0xa8007f).writeonly().share("videoregs.0"); // Video Regs
- map(0xa80000, 0xa80007).r(FUNC(cave_state::irq_cause_r)); // IRQ Cause
- map(0xa80068, 0xa80069).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); // Watchdog?
- map(0xa8006c, 0xa8006d).r(FUNC(cave_state::soundflags_ack_r)).nopw(); // Communication
- map(0xa8006e, 0xa8006f).rw(FUNC(cave_state::soundlatch_ack_r), FUNC(cave_state::sound_cmd_w)); // From Sound CPU
- map(0xb00000, 0xb00005).ram().share("vctrl.2"); // Layer 2 Control
- map(0xb80000, 0xb80005).ram().share("vctrl.1"); // Layer 1 Control
- map(0xc00000, 0xc00005).ram().share("vctrl.0"); // Layer 0 Control
- map(0xc80000, 0xc80001).portr("IN0"); // Inputs
- map(0xc80002, 0xc80003).portr("IN1"); // Inputs + EEPROM
- map(0xd00000, 0xd00000).w(FUNC(cave_state::metmqstr_eeprom_w)); // EEPROM
- map(0xf00000, 0xf0ffff).ram().share("spriteram.0"); // Sprites
+ map(0x000000, 0x07ffff).rom(); // ROM
+ map(0x100000, 0x17ffff).rom(); // ROM
+ map(0x200000, 0x27ffff).rom(); // ROM
+ map(0x408000, 0x408fff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
+ map(0x600000, 0x600001).r("watchdog", FUNC(watchdog_timer_device::reset16_r)); // Watchdog?
+ map(0x880000, 0x887fff).m(m_tilemap[2], FUNC(tilemap038_device::vram_map)); // Layer 2
+ map(0x888000, 0x88ffff).ram(); //
+ map(0x900000, 0x907fff).m(m_tilemap[1], FUNC(tilemap038_device::vram_map)); // Layer 1
+ map(0x908000, 0x90ffff).ram(); //
+ map(0x980000, 0x987fff).m(m_tilemap[0], FUNC(tilemap038_device::vram_map)); // Layer 0
+ map(0x988000, 0x98ffff).ram(); //
+ map(0xa80000, 0xa8007f).writeonly().share("videoregs.0"); // Video Regs
+ map(0xa80000, 0xa80007).r(FUNC(cave_state::irq_cause_r)); // IRQ Cause
+ map(0xa80068, 0xa80069).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); // Watchdog?
+ map(0xa8006c, 0xa8006d).r(FUNC(cave_state::soundflags_ack_r)).nopw(); // Communication
+ map(0xa8006e, 0xa8006f).rw(FUNC(cave_state::soundlatch_ack_r), FUNC(cave_state::sound_cmd_w)); // From Sound CPU
+ map(0xb00000, 0xb00005).rw(m_tilemap[2], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 2 Control
+ map(0xb80000, 0xb80005).rw(m_tilemap[1], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 1 Control
+ map(0xc00000, 0xc00005).rw(m_tilemap[0], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 0 Control
+ map(0xc80000, 0xc80001).portr("IN0"); // Inputs
+ map(0xc80002, 0xc80003).portr("IN1"); // Inputs + EEPROM
+ map(0xd00000, 0xd00000).w(FUNC(cave_state::metmqstr_eeprom_w)); // EEPROM
+ map(0xf00000, 0xf0ffff).ram().share("spriteram.0"); // Sprites
}
@@ -914,8 +863,8 @@ void cave_state::ppsatan_map(address_map &map)
map(0x040000, 0x04ffff).ram(); // RAM
// Left Screen (Player 2)
- map(0x080000, 0x080005).ram().share("vctrl.1"); // Layer Control
- map(0x100000, 0x107fff).ram().w(FUNC(cave_state::vram_w<1>)).share("vram.1"); // Layer
+ map(0x080000, 0x080005).rw(m_tilemap[1], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer Control
+ map(0x100000, 0x107fff).m(m_tilemap[1], FUNC(tilemap038_device::vram_map)); // Layer
// map(0x180000, 0x1803ff).ram() // Palette (Tilemaps)
// map(0x187800, 0x188fff).ram().w(m_palette[1], FUNC(palette_device::write16)).share("palette.1"); // Palette (Sprites)
map(0x180000, 0x188fff).ram().w(m_palette[1], FUNC(palette_device::write16)).share("palette.1"); // Palette
@@ -932,8 +881,8 @@ void cave_state::ppsatan_map(address_map &map)
map(0x300001, 0x300001).rw("oki1", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); // M6295
// Right Screen (Player 1)
- map(0x480000, 0x480005).ram().share("vctrl.2"); // Layer Control
- map(0x500000, 0x507fff).ram().w(FUNC(cave_state::vram_w<2>)).share("vram.2"); // Layer
+ map(0x480000, 0x480005).rw(m_tilemap[2], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer Control
+ map(0x500000, 0x507fff).m(m_tilemap[2], FUNC(tilemap038_device::vram_map)); // Layer
// map(0x580000, 0x5803ff).ram() // Palette (Tilemaps)
// map(0x587800, 0x588fff).ram().w(m_palette[2], FUNC(palette_device::write16)).share("palette.2"); // Palette (Sprites)
map(0x580000, 0x588fff).ram().w(m_palette[2], FUNC(palette_device::write16)).share("palette.2"); // Palette
@@ -941,8 +890,8 @@ void cave_state::ppsatan_map(address_map &map)
map(0x6c0000, 0x6c007f).writeonly().share("videoregs.2"); // Video Regs
// Top Screen
- map(0x880000, 0x880005).ram().share("vctrl.0"); // Layer Control
- map(0x900000, 0x907fff).ram().w(FUNC(cave_state::vram_w<0>)).share("vram.0"); // Layer
+ map(0x880000, 0x880005).rw(m_tilemap[0], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer Control
+ map(0x900000, 0x907fff).m(m_tilemap[0], FUNC(tilemap038_device::vram_map)); // Layer
// map(0x980000, 0x9803ff).ram(); // Palette (Tilemaps)
// map(0x987800, 0x988fff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette (Sprites)
map(0x980000, 0x988fff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
@@ -963,7 +912,6 @@ u16 cave_state::pwrinst2_eeprom_r()
template<int Chip>
void cave_state::pwrinst2_vctrl_w(offs_t offset, u16 data, u16 mem_mask)
{
- u16 *VCTRL = m_vctrl[Chip];
if (offset == 4 / 2)
{
switch (data & 0x000f)
@@ -975,32 +923,32 @@ void cave_state::pwrinst2_vctrl_w(offs_t offset, u16 data, u16 mem_mask)
case 8: data = (data & ~0x000f) | 3; break;
}
}
- COMBINE_DATA(&VCTRL[offset]);
+ m_tilemap[Chip]->vregs_w(offset, data, mem_mask);
}
void cave_state::pwrinst2_map(address_map &map)
{
- map(0x000000, 0x1fffff).rom(); // ROM
- map(0x400000, 0x40ffff).ram(); // RAM
- map(0x500000, 0x500001).portr("IN0"); // Inputs
- map(0x500002, 0x500003).portr("IN1"); //
- map(0x600000, 0x6fffff).rom().region("user1", 0); // extra data ROM space
- map(0x700000, 0x700000).w(FUNC(cave_state::eeprom_w)); // EEPROM
- map(0x800000, 0x807fff).ram().w(FUNC(cave_state::vram_w<2>)).share("vram.2"); // Layer 2
- map(0x880000, 0x887fff).ram().w(FUNC(cave_state::vram_w<0>)).share("vram.0"); // Layer 0
- map(0x900000, 0x907fff).ram().w(FUNC(cave_state::vram_w<1>)).share("vram.1"); // Layer 1
- map(0x980000, 0x987fff).ram().w(FUNC(cave_state::vram_8x8_w<3>)).share("vram.3"); // Layer 3
- map(0xa00000, 0xa0ffff).ram().share("spriteram.0"); // Sprites
- map(0xa10000, 0xa1ffff).ram(); // Sprites?
- map(0xa80000, 0xa8007f).ram().r(FUNC(cave_state::donpachi_videoregs_r)).share("videoregs.0"); // Video Regs
- map(0xb00000, 0xb00005).ram().w(FUNC(cave_state::pwrinst2_vctrl_w<2>)).share("vctrl.2"); // Layer 2 Control
- map(0xb80000, 0xb80005).ram().w(FUNC(cave_state::pwrinst2_vctrl_w<0>)).share("vctrl.0"); // Layer 0 Control
- map(0xc00000, 0xc00005).ram().w(FUNC(cave_state::pwrinst2_vctrl_w<1>)).share("vctrl.1"); // Layer 1 Control
- map(0xc80000, 0xc80005).ram().w(FUNC(cave_state::pwrinst2_vctrl_w<3>)).share("vctrl.3"); // Layer 3 Control
- map(0xd80000, 0xd80001).r(FUNC(cave_state::soundlatch_ack_r)); // ? From Sound CPU
- map(0xe00000, 0xe00001).w(FUNC(cave_state::sound_cmd_w)); // To Sound CPU
- map(0xe80000, 0xe80001).r(FUNC(cave_state::pwrinst2_eeprom_r)); // EEPROM
- map(0xf00000, 0xf04fff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
+ map(0x000000, 0x1fffff).rom(); // ROM
+ map(0x400000, 0x40ffff).ram(); // RAM
+ map(0x500000, 0x500001).portr("IN0"); // Inputs
+ map(0x500002, 0x500003).portr("IN1"); //
+ map(0x600000, 0x6fffff).rom().region("user1", 0); // extra data ROM space
+ map(0x700000, 0x700000).w(FUNC(cave_state::eeprom_w)); // EEPROM
+ map(0x800000, 0x807fff).m(m_tilemap[2], FUNC(tilemap038_device::vram_map)); // Layer 2
+ map(0x880000, 0x887fff).m(m_tilemap[0], FUNC(tilemap038_device::vram_map)); // Layer 0
+ map(0x900000, 0x907fff).m(m_tilemap[1], FUNC(tilemap038_device::vram_map)); // Layer 1
+ map(0x980000, 0x987fff).m(m_tilemap[3], FUNC(tilemap038_device::vram_8x8_map)); // Layer 3
+ map(0xa00000, 0xa0ffff).ram().share("spriteram.0"); // Sprites
+ map(0xa10000, 0xa1ffff).ram(); // Sprites?
+ map(0xa80000, 0xa8007f).ram().r(FUNC(cave_state::donpachi_videoregs_r)).share("videoregs.0"); // Video Regs
+ map(0xb00000, 0xb00005).r(m_tilemap[2], FUNC(tilemap038_device::vregs_r)).w(FUNC(cave_state::pwrinst2_vctrl_w<2>)); // Layer 2 Control
+ map(0xb80000, 0xb80005).r(m_tilemap[0], FUNC(tilemap038_device::vregs_r)).w(FUNC(cave_state::pwrinst2_vctrl_w<0>)); // Layer 0 Control
+ map(0xc00000, 0xc00005).r(m_tilemap[1], FUNC(tilemap038_device::vregs_r)).w(FUNC(cave_state::pwrinst2_vctrl_w<1>)); // Layer 1 Control
+ map(0xc80000, 0xc80005).r(m_tilemap[3], FUNC(tilemap038_device::vregs_r)).w(FUNC(cave_state::pwrinst2_vctrl_w<3>)); // Layer 3 Control
+ map(0xd80000, 0xd80001).r(FUNC(cave_state::soundlatch_ack_r)); // ? From Sound CPU
+ map(0xe00000, 0xe00001).w(FUNC(cave_state::sound_cmd_w)); // To Sound CPU
+ map(0xe80000, 0xe80001).r(FUNC(cave_state::pwrinst2_eeprom_r)); // EEPROM
+ map(0xf00000, 0xf04fff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
}
@@ -1016,31 +964,31 @@ u16 cave_state::sailormn_input0_r()
void cave_state::sailormn_map(address_map &map)
{
- map(0x000000, 0x07ffff).rom(); // ROM
- map(0x100000, 0x10ffff).ram(); // RAM
- map(0x110000, 0x110001).ram(); // (agallet)
- map(0x200000, 0x3fffff).rom(); // ROM
- map(0x400000, 0x407fff).ram(); // (agallet)
- map(0x408000, 0x40bfff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
- map(0x40c000, 0x40ffff).ram(); // (agallet)
- map(0x410000, 0x410001).ram(); // (agallet)
- map(0x500000, 0x50ffff).ram().share("spriteram.0"); // Sprites
- map(0x510000, 0x510001).ram(); // (agallet)
- map(0x600000, 0x600001).r(FUNC(cave_state::sailormn_input0_r)); // Inputs + Watchdog!
- map(0x600002, 0x600003).portr("IN1"); // Inputs + EEPROM
- map(0x700000, 0x700000).w(FUNC(cave_state::sailormn_eeprom_w)); // EEPROM
- map(0x800000, 0x807fff).ram().w(FUNC(cave_state::vram_w<0>)).share("vram.0"); // Layer 0
- map(0x880000, 0x887fff).ram().w(FUNC(cave_state::vram_w<1>)).share("vram.1"); // Layer 1
- map(0x900000, 0x907fff).ram().w(FUNC(cave_state::vram_w<2>)).share("vram.2"); // Layer 2
- map(0x908000, 0x908001).ram(); // (agallet)
- map(0xa00000, 0xa00005).ram().share("vctrl.0"); // Layer 0 Control
- map(0xa80000, 0xa80005).ram().share("vctrl.1"); // Layer 1 Control
- map(0xb00000, 0xb00005).ram().share("vctrl.2"); // Layer 2 Control
- map(0xb80000, 0xb8007f).writeonly().share("videoregs.0"); // Video Regs
- map(0xb80000, 0xb80007).r(FUNC(cave_state::irq_cause_r)); // IRQ Cause (bit 2 tested!)
- map(0xb8006c, 0xb8006d).r(FUNC(cave_state::soundflags_ack_r)); // Communication
- map(0xb8006e, 0xb8006f).r(FUNC(cave_state::soundlatch_ack_r)); // From Sound CPU
- map(0xb8006e, 0xb8006f).w(FUNC(cave_state::sound_cmd_w)); // To Sound CPU
+ map(0x000000, 0x07ffff).rom(); // ROM
+ map(0x100000, 0x10ffff).ram(); // RAM
+ map(0x110000, 0x110001).ram(); // (agallet)
+ map(0x200000, 0x3fffff).rom(); // ROM
+ map(0x400000, 0x407fff).ram(); // (agallet)
+ map(0x408000, 0x40bfff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
+ map(0x40c000, 0x40ffff).ram(); // (agallet)
+ map(0x410000, 0x410001).ram(); // (agallet)
+ map(0x500000, 0x50ffff).ram().share("spriteram.0"); // Sprites
+ map(0x510000, 0x510001).ram(); // (agallet)
+ map(0x600000, 0x600001).r(FUNC(cave_state::sailormn_input0_r)); // Inputs + Watchdog!
+ map(0x600002, 0x600003).portr("IN1"); // Inputs + EEPROM
+ map(0x700000, 0x700000).w(FUNC(cave_state::sailormn_eeprom_w)); // EEPROM
+ map(0x800000, 0x807fff).m(m_tilemap[0], FUNC(tilemap038_device::vram_map)); // Layer 0
+ map(0x880000, 0x887fff).m(m_tilemap[1], FUNC(tilemap038_device::vram_map)); // Layer 1
+ map(0x900000, 0x907fff).m(m_tilemap[2], FUNC(tilemap038_device::vram_map)); // Layer 2
+ map(0x908000, 0x908001).ram(); // (agallet)
+ map(0xa00000, 0xa00005).rw(m_tilemap[0], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 0 Control
+ map(0xa80000, 0xa80005).rw(m_tilemap[1], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 1 Control
+ map(0xb00000, 0xb00005).rw(m_tilemap[2], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 2 Control
+ map(0xb80000, 0xb8007f).writeonly().share("videoregs.0"); // Video Regs
+ map(0xb80000, 0xb80007).r(FUNC(cave_state::irq_cause_r)); // IRQ Cause (bit 2 tested!)
+ map(0xb8006c, 0xb8006d).r(FUNC(cave_state::soundflags_ack_r)); // Communication
+ map(0xb8006e, 0xb8006f).r(FUNC(cave_state::soundlatch_ack_r)); // From Sound CPU
+ map(0xb8006e, 0xb8006f).w(FUNC(cave_state::sound_cmd_w)); // To Sound CPU
}
@@ -1053,10 +1001,10 @@ void cave_state::tekkencw_map(address_map &map)
map(0x000000, 0x07ffff).rom(); // ROM
map(0x100000, 0x10ffff).ram().share("nvram"); // RAM (battery)
map(0x200000, 0x20ffff).ram().share("spriteram.0"); // Sprites
- map(0x300000, 0x307fff).ram().w(FUNC(cave_state::vram_w<0>)).share("vram.0"); // Layer 0
+ map(0x300000, 0x307fff).m(m_tilemap[0], FUNC(tilemap038_device::vram_map)); // Layer 0
map(0x400000, 0x400001).portr("IN0"); // Inputs + EEPROM + Hopper
map(0x400002, 0x400003).portr("IN1"); // Inputs
- map(0x500000, 0x500005).writeonly().share("vctrl.0"); // Layer 0 Control
+ map(0x500000, 0x500005).w(m_tilemap[0], FUNC(tilemap038_device::vregs_w)); // Layer 0 Control
map(0x600000, 0x60ffff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
map(0x700000, 0x70007f).writeonly().share("videoregs.0"); // Video Regs
map(0x700000, 0x700007).r(FUNC(cave_state::irq_cause_r)); // IRQ Cause
@@ -1076,9 +1024,9 @@ void cave_state::tekkenbs_map(address_map &map)
map(0x000000, 0x07ffff).rom(); // ROM
map(0x100000, 0x10ffff).ram().share("nvram"); // RAM (battery)
map(0x200000, 0x20ffff).ram().share("spriteram.0"); // Sprites
- map(0x300000, 0x307fff).ram().w(FUNC(cave_state::vram_w<0>)).share("vram.0"); // Layer 0
+ map(0x300000, 0x307fff).m(m_tilemap[0], FUNC(tilemap038_device::vram_map)); // Layer 0
map(0x400000, 0x40ffff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
- map(0x500000, 0x500005).writeonly().share("vctrl.0"); // Layer 0 Control
+ map(0x500000, 0x500005).w(m_tilemap[0], FUNC(tilemap038_device::vregs_w)); // Layer 0 Control
map(0x600000, 0x600001).portr("IN0"); // Inputs + EEPROM + Hopper
map(0x600002, 0x600003).portr("IN1"); // Inputs
map(0x700000, 0x70007f).writeonly().share("videoregs.0"); // Video Regs
@@ -1133,9 +1081,9 @@ void cave_state::tjumpman_map(address_map &map)
map(0x000000, 0x07ffff).rom(); // ROM
map(0x100000, 0x10ffff).ram().share("nvram"); // RAM (battery)
map(0x200000, 0x20ffff).ram().share("spriteram.0"); // Sprites
- map(0x300000, 0x307fff).ram().w(FUNC(cave_state::vram_w<0>)).share("vram.0"); // Layer 0
- map(0x304000, 0x307fff).w(FUNC(cave_state::vram_w<0>)); // Layer 0 - 16x16 tiles mapped here
- map(0x400000, 0x400005).writeonly().share("vctrl.0"); // Layer 0 Control
+ map(0x300000, 0x307fff).m(m_tilemap[0], FUNC(tilemap038_device::vram_map)); // Layer 0
+ map(0x304000, 0x307fff).m(m_tilemap[0], FUNC(tilemap038_device::vram_16x16_writeonly_map)); // Layer 0 - 16x16 tiles mapped here
+ map(0x400000, 0x400005).w(m_tilemap[0], FUNC(tilemap038_device::vregs_w)); // Layer 0 Control
map(0x500000, 0x50ffff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
map(0x600000, 0x600001).portr("IN0"); // Inputs + EEPROM + Hopper
map(0x600002, 0x600003).portr("IN1"); // Inputs
@@ -1170,11 +1118,11 @@ void cave_state::pacslot_map(address_map &map)
map(0x000000, 0x07ffff).rom(); // ROM
map(0x100000, 0x10ffff).ram().share("nvram"); // RAM (battery)
map(0x200000, 0x20ffff).ram().share("spriteram.0"); // Sprites
- map(0x300000, 0x307fff).ram().w(FUNC(cave_state::vram_w<0>)).share("vram.0"); // Layer 0
+ map(0x300000, 0x307fff).m(m_tilemap[0], FUNC(tilemap038_device::vram_map)); // Layer 0
map(0x400000, 0x40007f).writeonly().share("videoregs.0"); // Video Regs
map(0x400000, 0x400007).r(FUNC(cave_state::irq_cause_r)); // IRQ Cause
map(0x400068, 0x400069).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); // Watchdog
- map(0x500000, 0x500005).writeonly().share("vctrl.0"); // Layer 0 Control
+ map(0x500000, 0x500005).w(m_tilemap[0], FUNC(tilemap038_device::vregs_w)); // Layer 0 Control
map(0x600000, 0x60ffff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
map(0x700000, 0x700001).portr("IN0"); // Inputs + EEPROM + Hopper
map(0x700002, 0x700003).portr("IN1"); // Inputs
@@ -1195,11 +1143,11 @@ void cave_state::paceight_map(address_map &map)
map(0x000000, 0x07ffff).rom(); // ROM
map(0x100000, 0x10ffff).ram().share("nvram"); // RAM (battery)
map(0x200000, 0x20ffff).ram().share("spriteram.0"); // Sprites
- map(0x300000, 0x307fff).ram().w(FUNC(cave_state::vram_w<0>)).share("vram.0"); // Layer 0
+ map(0x300000, 0x307fff).m(m_tilemap[0], FUNC(tilemap038_device::vram_map)); // Layer 0
map(0x400000, 0x40ffff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
map(0x500000, 0x500001).portr("IN0"); // Inputs + EEPROM + Hopper
map(0x500002, 0x500003).portr("IN1"); // Inputs
- map(0x600000, 0x600005).writeonly().share("vctrl.0"); // Layer 0 Control
+ map(0x600000, 0x600005).w(m_tilemap[0], FUNC(tilemap038_device::vregs_w)); // Layer 0 Control
map(0x700000, 0x70007f).writeonly().share("videoregs.0"); // Video Regs
map(0x700000, 0x700007).r(FUNC(cave_state::irq_cause_r)); // IRQ Cause
map(0x700068, 0x700069).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); // Watchdog
@@ -1214,18 +1162,18 @@ void cave_state::paceight_map(address_map &map)
void cave_state::uopoko_map(address_map &map)
{
- map(0x000000, 0x0fffff).rom(); // ROM
- map(0x100000, 0x10ffff).ram(); // RAM
- map(0x300000, 0x300003).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write)).umask16(0x00ff); // YMZ280
- map(0x400000, 0x40ffff).ram().share("spriteram.0"); // Sprites
- map(0x500000, 0x507fff).ram().w(FUNC(cave_state::vram_w<0>)).share("vram.0"); // Layer 0
- map(0x600000, 0x60007f).writeonly().share("videoregs.0"); // Video Regs
- map(0x600000, 0x600007).r(FUNC(cave_state::irq_cause_r)); // IRQ Cause
- map(0x700000, 0x700005).ram().share("vctrl.0"); // Layer 0 Control
- map(0x800000, 0x80ffff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
- map(0x900000, 0x900001).portr("IN0"); // Inputs
- map(0x900002, 0x900003).portr("IN1"); // Inputs + EEPROM
- map(0xa00000, 0xa00000).w(FUNC(cave_state::eeprom_w)); // EEPROM
+ map(0x000000, 0x0fffff).rom(); // ROM
+ map(0x100000, 0x10ffff).ram(); // RAM
+ map(0x300000, 0x300003).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write)).umask16(0x00ff); // YMZ280
+ map(0x400000, 0x40ffff).ram().share("spriteram.0"); // Sprites
+ map(0x500000, 0x507fff).m(m_tilemap[0], FUNC(tilemap038_device::vram_map)); // Layer 0
+ map(0x600000, 0x60007f).writeonly().share("videoregs.0"); // Video Regs
+ map(0x600000, 0x600007).r(FUNC(cave_state::irq_cause_r)); // IRQ Cause
+ map(0x700000, 0x700005).rw(m_tilemap[0], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w)); // Layer 0 Control
+ map(0x800000, 0x80ffff).ram().w(m_palette[0], FUNC(palette_device::write16)).share("palette.0"); // Palette
+ map(0x900000, 0x900001).portr("IN0"); // Inputs
+ map(0x900002, 0x900003).portr("IN1"); // Inputs + EEPROM
+ map(0xa00000, 0xa00000).w(FUNC(cave_state::eeprom_w)); // EEPROM
}
@@ -1987,7 +1935,7 @@ void cave_state::machine_reset()
m_agallet_vblank_irq = 0;
}
-void cave_state::add_base_config(machine_config &config)
+void cave_state::add_base_config(machine_config &config, int layer)
{
M68000(config, m_maincpu, 16_MHz_XTAL);
m_maincpu->set_vblank_int("screen.0", FUNC(cave_state::interrupt));
@@ -2002,6 +1950,13 @@ void cave_state::add_base_config(machine_config &config)
m_screen[0]->set_screen_update(FUNC(cave_state::screen_update));
PALETTE(config, m_palette[0], palette_device::BLACK).set_format(palette_device::xGRB_555, 0x8000);
+
+ for (int i = 0; i < layer; i++)
+ {
+ TMAP038(config, m_tilemap[i]);
+ m_tilemap[i]->set_gfxdecode_tag(m_gfxdecode[0]);
+ m_tilemap[i]->set_gfx(i);
+ }
}
void cave_state::add_ymz(machine_config &config)
@@ -2019,7 +1974,7 @@ void cave_state::add_ymz(machine_config &config)
void cave_state::dfeveron(machine_config &config)
{
- add_base_config(config);
+ add_base_config(config, 2);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &cave_state::dfeveron_map);
@@ -2030,7 +1985,7 @@ void cave_state::dfeveron(machine_config &config)
GFXDECODE(config, m_gfxdecode[0], m_palette[0], gfx_dfeveron);
m_palette[0]->set_entries(0x1000/2);
- MCFG_VIDEO_START_OVERRIDE(cave_state,dfeveron)
+ MCFG_VIDEO_START_OVERRIDE(cave_state,spr_4bpp)
/* sound hardware */
add_ymz(config);
@@ -2043,7 +1998,7 @@ void cave_state::dfeveron(machine_config &config)
void cave_state::ddonpach(machine_config &config)
{
- add_base_config(config);
+ add_base_config(config, 3);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &cave_state::ddonpach_map);
@@ -2053,7 +2008,7 @@ void cave_state::ddonpach(machine_config &config)
/* video hardware */
GFXDECODE(config, m_gfxdecode[0], m_palette[0], gfx_ddonpach);
- MCFG_VIDEO_START_OVERRIDE(cave_state,ddonpach)
+ MCFG_VIDEO_START_OVERRIDE(cave_state,spr_8bpp)
/* sound hardware */
add_ymz(config);
@@ -2066,7 +2021,7 @@ void cave_state::ddonpach(machine_config &config)
void cave_state::donpachi(machine_config &config)
{
- add_base_config(config);
+ add_base_config(config, 3);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &cave_state::donpachi_map);
@@ -2077,7 +2032,7 @@ void cave_state::donpachi(machine_config &config)
GFXDECODE(config, m_gfxdecode[0], m_palette[0], gfx_donpachi);
m_palette[0]->set_entries(0x1000/2);
- MCFG_VIDEO_START_OVERRIDE(cave_state,donpachi)
+ MCFG_VIDEO_START_OVERRIDE(cave_state,spr_4bpp)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -2101,7 +2056,7 @@ void cave_state::donpachi(machine_config &config)
void cave_state::esprade(machine_config &config)
{
- add_base_config(config);
+ add_base_config(config, 3);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &cave_state::esprade_map);
@@ -2111,7 +2066,7 @@ void cave_state::esprade(machine_config &config)
/* video hardware */
GFXDECODE(config, m_gfxdecode[0], m_palette[0], gfx_esprade);
- MCFG_VIDEO_START_OVERRIDE(cave_state,ddonpach)
+ MCFG_VIDEO_START_OVERRIDE(cave_state,spr_8bpp)
/* sound hardware */
add_ymz(config);
@@ -2124,7 +2079,7 @@ void cave_state::esprade(machine_config &config)
void cave_state::gaia(machine_config &config)
{
- add_base_config(config);
+ add_base_config(config, 3);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &cave_state::gaia_map);
@@ -2136,7 +2091,7 @@ void cave_state::gaia(machine_config &config)
GFXDECODE(config, m_gfxdecode[0], m_palette[0], gfx_esprade);
- MCFG_VIDEO_START_OVERRIDE(cave_state,ddonpach)
+ MCFG_VIDEO_START_OVERRIDE(cave_state,spr_8bpp)
/* sound hardware */
add_ymz(config);
@@ -2149,7 +2104,7 @@ void cave_state::gaia(machine_config &config)
void cave_state::guwange(machine_config &config)
{
- add_base_config(config);
+ add_base_config(config, 3);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &cave_state::guwange_map);
@@ -2159,7 +2114,7 @@ void cave_state::guwange(machine_config &config)
/* video hardware */
GFXDECODE(config, m_gfxdecode[0], m_palette[0], gfx_esprade);
- MCFG_VIDEO_START_OVERRIDE(cave_state,ddonpach)
+ MCFG_VIDEO_START_OVERRIDE(cave_state,spr_8bpp)
/* sound hardware */
add_ymz(config);
@@ -2171,7 +2126,7 @@ void cave_state::guwange(machine_config &config)
void cave_state::hotdogst(machine_config &config)
{
- add_base_config(config);
+ add_base_config(config, 3);
/* basic machine hardware */
m_maincpu->set_clock(32_MHz_XTAL/2);
@@ -2190,7 +2145,7 @@ void cave_state::hotdogst(machine_config &config)
GFXDECODE(config, m_gfxdecode[0], m_palette[0], gfx_hotdogst);
m_palette[0]->set_entries(0x1000/2);
- MCFG_VIDEO_START_OVERRIDE(cave_state,donpachi)
+ MCFG_VIDEO_START_OVERRIDE(cave_state,spr_4bpp)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -2217,7 +2172,7 @@ void cave_state::hotdogst(machine_config &config)
void cave_state::korokoro(machine_config &config)
{
- add_base_config(config);
+ add_base_config(config, 1);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &cave_state::korokoro_map);
@@ -2249,7 +2204,7 @@ void cave_state::crusherm(machine_config &config)
void cave_state::mazinger(machine_config &config)
{
- add_base_config(config);
+ add_base_config(config, 2);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &cave_state::mazinger_map);
@@ -2269,7 +2224,7 @@ void cave_state::mazinger(machine_config &config)
GFXDECODE(config, m_gfxdecode[0], m_palette[0], gfx_mazinger);
m_palette[0]->set_entries(0x8000/2);
- MCFG_VIDEO_START_OVERRIDE(cave_state,dfeveron)
+ MCFG_VIDEO_START_OVERRIDE(cave_state,spr_4bpp)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -2296,7 +2251,7 @@ void cave_state::mazinger(machine_config &config)
void cave_state::metmqstr(machine_config &config)
{
- add_base_config(config);
+ add_base_config(config, 3);
/* basic machine hardware */
m_maincpu->set_clock(32_MHz_XTAL / 2);
@@ -2317,7 +2272,7 @@ void cave_state::metmqstr(machine_config &config)
GFXDECODE(config, m_gfxdecode[0], m_palette[0], gfx_donpachi);
m_palette[0]->set_entries(0x1000/2);
- MCFG_VIDEO_START_OVERRIDE(cave_state,donpachi)
+ MCFG_VIDEO_START_OVERRIDE(cave_state,spr_4bpp)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -2345,7 +2300,7 @@ void cave_state::metmqstr(machine_config &config)
void cave_state::pacslot(machine_config &config)
{
- add_base_config(config);
+ add_base_config(config, 1);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
@@ -2363,20 +2318,17 @@ void cave_state::pacslot(machine_config &config)
GFXDECODE(config, m_gfxdecode[0], m_palette[0], gfx_uopoko);
- MCFG_VIDEO_START_OVERRIDE(cave_state,uopoko)
+ MCFG_VIDEO_START_OVERRIDE(cave_state,spr_8bpp)
/* sound hardware */
- SPEAKER(config, "lspeaker").front_left();
- SPEAKER(config, "rspeaker").front_right();
+ SPEAKER(config, "mono").front_center();
OKIM6295(config, m_oki[0], 28_MHz_XTAL / 28, okim6295_device::PIN7_HIGH); // clock frequency & pin 7 not verified
- m_oki[0]->add_route(ALL_OUTPUTS, "lspeaker", 1.0);
- m_oki[0]->add_route(ALL_OUTPUTS, "rspeaker", 1.0);
+ m_oki[0]->add_route(ALL_OUTPUTS, "mono", 1.0);
// oki2 chip is present but its rom socket is unpopulated
OKIM6295(config, m_oki[1], 28_MHz_XTAL / 28, okim6295_device::PIN7_HIGH); // clock frequency & pin 7 not verified
- m_oki[1]->add_route(ALL_OUTPUTS, "lspeaker", 1.0);
- m_oki[1]->add_route(ALL_OUTPUTS, "rspeaker", 1.0);
+ m_oki[1]->add_route(ALL_OUTPUTS, "mono", 1.0);
}
void cave_state::paceight(machine_config &config)
@@ -2396,7 +2348,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( cave_state::timer_lev2_cb )
void cave_state::ppsatan(machine_config &config)
{
- add_base_config(config);
+ add_base_config(config, 1);
/* basic machine hardware */
m_maincpu->set_vblank_int("screen.0", FUNC(cave_state::interrupt_ppsatan));
@@ -2433,6 +2385,14 @@ void cave_state::ppsatan(machine_config &config)
GFXDECODE(config, m_gfxdecode[1], m_palette[1], gfx_ppsatan_1);
GFXDECODE(config, m_gfxdecode[2], m_palette[2], gfx_ppsatan_2);
+ TMAP038(config, m_tilemap[1]);
+ m_tilemap[1]->set_gfxdecode_tag(m_gfxdecode[1]);
+ m_tilemap[1]->set_gfx(0);
+
+ TMAP038(config, m_tilemap[2]);
+ m_tilemap[2]->set_gfxdecode_tag(m_gfxdecode[2]);
+ m_tilemap[2]->set_gfx(0);
+
m_palette[0]->set_entries(0x9000/2);
PALETTE(config, m_palette[1], palette_device::BLACK).set_format(palette_device::xGRB_555, 0x9000/2);
PALETTE(config, m_palette[2], palette_device::BLACK).set_format(palette_device::xGRB_555, 0x9000/2);
@@ -2442,12 +2402,10 @@ void cave_state::ppsatan(machine_config &config)
MCFG_VIDEO_START_OVERRIDE(cave_state,ppsatan)
/* sound hardware */
- SPEAKER(config, "lspeaker").front_left();
- SPEAKER(config, "rspeaker").front_right();
+ SPEAKER(config, "mono").front_center();
OKIM6295(config, m_oki[0], 1.056_MHz_XTAL, okim6295_device::PIN7_HIGH); // clock frequency & pin 7 not verified
- m_oki[0]->add_route(ALL_OUTPUTS, "lspeaker", 2.0);
- m_oki[0]->add_route(ALL_OUTPUTS, "rspeaker", 2.0);
+ m_oki[0]->add_route(ALL_OUTPUTS, "mono", 2.0);
}
@@ -2459,7 +2417,7 @@ void cave_state::ppsatan(machine_config &config)
void cave_state::pwrinst2(machine_config &config)
{
- add_base_config(config);
+ add_base_config(config, 4);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &cave_state::pwrinst2_map);
@@ -2477,7 +2435,7 @@ void cave_state::pwrinst2(machine_config &config)
GFXDECODE(config, m_gfxdecode[0], m_palette[0], gfx_pwrinst2);
m_palette[0]->set_entries(0x5000/2);
- MCFG_VIDEO_START_OVERRIDE(cave_state,pwrinst2)
+ MCFG_VIDEO_START_OVERRIDE(cave_state,spr_4bpp)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -2521,7 +2479,7 @@ MACHINE_RESET_MEMBER(cave_state,sailormn)
void cave_state::sailormn(machine_config &config)
{
- add_base_config(config);
+ add_base_config(config, 3);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &cave_state::sailormn_map);
@@ -2542,10 +2500,13 @@ void cave_state::sailormn(machine_config &config)
m_screen[0]->set_size(320+1, 240);
m_screen[0]->set_visarea(0+1, 320+1-1, 0, 240-1);
+ /* Layer 2 (8x8) needs to be handled differently */
+ m_tilemap[2]->set_tile_callback(tilemap038_device::tmap038_cb_delegate(FUNC(cave_state::sailormn_get_banked_code), this)); /* Layer 2 has 1 banked ROM */
+
GFXDECODE(config, m_gfxdecode[0], m_palette[0], gfx_sailormn); // 4 bit sprites, 6 bit tiles
m_palette[0]->set_entries(0x4000/2);
- MCFG_VIDEO_START_OVERRIDE(cave_state,sailormn) /* Layer 2 has 1 banked ROM */
+ MCFG_VIDEO_START_OVERRIDE(cave_state,spr_4bpp)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -2575,7 +2536,7 @@ void cave_state::sailormn(machine_config &config)
void cave_state::tekkencw(machine_config &config)
{
- add_base_config(config);
+ add_base_config(config, 1);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
@@ -2593,15 +2554,13 @@ void cave_state::tekkencw(machine_config &config)
GFXDECODE(config, m_gfxdecode[0], m_palette[0], gfx_uopoko);
- MCFG_VIDEO_START_OVERRIDE(cave_state,uopoko)
+ MCFG_VIDEO_START_OVERRIDE(cave_state,spr_8bpp)
/* sound hardware */
- SPEAKER(config, "lspeaker").front_left();
- SPEAKER(config, "rspeaker").front_right();
+ SPEAKER(config, "mono").front_center();
OKIM6295(config, m_oki[0], 28_MHz_XTAL / 28, okim6295_device::PIN7_HIGH); // clock frequency & pin 7 not verified
- m_oki[0]->add_route(ALL_OUTPUTS, "lspeaker", 1.0);
- m_oki[0]->add_route(ALL_OUTPUTS, "rspeaker", 1.0);
+ m_oki[0]->add_route(ALL_OUTPUTS, "mono", 1.0);
// oki2 chip spot and rom socket are both unpopulated
}
@@ -2619,7 +2578,7 @@ void cave_state::tekkenbs(machine_config &config)
void cave_state::tjumpman(machine_config &config)
{
- add_base_config(config);
+ add_base_config(config, 1);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
@@ -2637,15 +2596,13 @@ void cave_state::tjumpman(machine_config &config)
GFXDECODE(config, m_gfxdecode[0], m_palette[0], gfx_uopoko);
- MCFG_VIDEO_START_OVERRIDE(cave_state,uopoko)
+ MCFG_VIDEO_START_OVERRIDE(cave_state,spr_8bpp)
/* sound hardware */
- SPEAKER(config, "lspeaker").front_left();
- SPEAKER(config, "rspeaker").front_right();
+ SPEAKER(config, "mono").front_center();
OKIM6295(config, m_oki[0], 28_MHz_XTAL / 28, okim6295_device::PIN7_HIGH); // clock frequency & pin 7 not verified
- m_oki[0]->add_route(ALL_OUTPUTS, "lspeaker", 1.0);
- m_oki[0]->add_route(ALL_OUTPUTS, "rspeaker", 1.0);
+ m_oki[0]->add_route(ALL_OUTPUTS, "mono", 1.0);
// oki2 chip spot and rom socket are both unpopulated
}
@@ -2657,7 +2614,7 @@ void cave_state::tjumpman(machine_config &config)
void cave_state::uopoko(machine_config &config)
{
- add_base_config(config);
+ add_base_config(config, 1);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &cave_state::uopoko_map);
@@ -2667,7 +2624,7 @@ void cave_state::uopoko(machine_config &config)
/* video hardware */
GFXDECODE(config, m_gfxdecode[0], m_palette[0], gfx_uopoko);
- MCFG_VIDEO_START_OVERRIDE(cave_state,uopoko)
+ MCFG_VIDEO_START_OVERRIDE(cave_state,spr_8bpp)
/* sound hardware */
add_ymz(config);
diff --git a/src/mame/drivers/cbm2.cpp b/src/mame/drivers/cbm2.cpp
index badd0e6cad2..8fef6b51a6e 100644
--- a/src/mame/drivers/cbm2.cpp
+++ b/src/mame/drivers/cbm2.cpp
@@ -2367,10 +2367,8 @@ void p500_state::p500_ntsc(machine_config &config)
_128k(config);
// software list
- SOFTWARE_LIST(config, "cart_list").set_original("cbm2_cart");
- SOFTWARE_LIST(config, "flop_list").set_original("p500_flop");
- subdevice<software_list_device>("cart_list")->set_filter("NTSC");
- subdevice<software_list_device>("flop_list")->set_filter("NTSC");
+ SOFTWARE_LIST(config, "cart_list").set_original("cbm2_cart").set_filter("NTSC");
+ SOFTWARE_LIST(config, "flop_list").set_original("p500_flop").set_filter("NTSC");
}
@@ -2500,10 +2498,8 @@ void p500_state::p500_pal(machine_config &config)
_128k(config);
// software list
- SOFTWARE_LIST(config, "cart_list").set_original("cbm2_cart");
- SOFTWARE_LIST(config, "flop_list").set_original("p500_flop");
- subdevice<software_list_device>("cart_list")->set_filter("PAL");
- subdevice<software_list_device>("flop_list")->set_filter("PAL");
+ SOFTWARE_LIST(config, "cart_list").set_original("cbm2_cart").set_filter("PAL");
+ SOFTWARE_LIST(config, "flop_list").set_original("p500_flop").set_filter("PAL");
}
@@ -2629,10 +2625,8 @@ void cbm2_state::cbm2lp_ntsc(machine_config &config)
QUICKLOAD(config, "quickload", "p00,prg,t64", CBM_QUICKLOAD_DELAY).set_load_callback(FUNC(cbm2_state::quickload_cbmb), this);
// software list
- SOFTWARE_LIST(config, "cart_list").set_original("cbm2_cart");
- SOFTWARE_LIST(config, "flop_list").set_original("cbm2_flop");
- subdevice<software_list_device>("cart_list")->set_filter("NTSC");
- subdevice<software_list_device>("flop_list")->set_filter("NTSC");
+ SOFTWARE_LIST(config, "cart_list").set_original("cbm2_cart").set_filter("NTSC");
+ SOFTWARE_LIST(config, "flop_list").set_original("cbm2_flop").set_filter("NTSC");
}
diff --git a/src/mame/drivers/cclimber.cpp b/src/mame/drivers/cclimber.cpp
index 95bbcfdef1d..229a04fe52c 100644
--- a/src/mame/drivers/cclimber.cpp
+++ b/src/mame/drivers/cclimber.cpp
@@ -353,7 +353,7 @@ void cclimber_state::cannonb_map(address_map &map)
map(0x6000, 0x6bff).ram();
map(0x8000, 0x83ff).ram();
map(0x8800, 0x88ff).nopr().writeonly().share("bigspriteram"); /* must not return what's written (game will reset after coin insert if it returns 0xff)*/
-// AM_RANGE(0x8900, 0x8bff) AM_WRITEONLY /* not used, but initialized */
+// map(0x8900, 0x8bff).writeonly(); /* not used, but initialized */
map(0x9000, 0x93ff).mirror(0x0400).ram().share("videoram");
/* 9800-9bff and 9c00-9fff share the same RAM, interleaved */
/* (9800-981f for scroll, 9c20-9c3f for color RAM, and so on) */
diff --git a/src/mame/drivers/cd2650.cpp b/src/mame/drivers/cd2650.cpp
index b36edb1d821..af87e1fea82 100644
--- a/src/mame/drivers/cd2650.cpp
+++ b/src/mame/drivers/cd2650.cpp
@@ -155,7 +155,7 @@ void cd2650_state::cd2650_mem(address_map &map)
void cd2650_state::cd2650_io(address_map &map)
{
map.unmap_value_high();
- //AM_RANGE(0x80, 0x84) disk i/o
+ //map(0x80, 0x84) disk i/o
}
void cd2650_state::cd2650_data(address_map &map)
diff --git a/src/mame/drivers/cdi.cpp b/src/mame/drivers/cdi.cpp
index ca366f623aa..2eb58076b7d 100644
--- a/src/mame/drivers/cdi.cpp
+++ b/src/mame/drivers/cdi.cpp
@@ -85,16 +85,16 @@ void cdi_state::cdimono2_mem(address_map &map)
#if ENABLE_UART_PRINTING
map(0x00301400, 0x00301403).r(m_maincpu, FUNC(scc68070_device::uart_loopback_enable));
#endif
- //AM_RANGE(0x00300000, 0x00303bff) AM_DEVREADWRITE("cdic", cdicdic_device, ram_r, ram_w)
- //AM_RANGE(0x00303c00, 0x00303fff) AM_DEVREADWRITE("cdic", cdicdic_device, regs_r, regs_w)
- //AM_RANGE(0x00310000, 0x00317fff) AM_DEVREADWRITE("slave", cdislave_device, slave_r, slave_w)
- //AM_RANGE(0x00318000, 0x0031ffff) AM_NOP
+ //map(0x00300000, 0x00303bff).rw("cdic", FUNC(cdicdic_device::ram_r), FUNC(cdicdic_device::ram_w));
+ //map(0x00303c00, 0x00303fff).rw("cdic", FUNC(cdicdic_device::regs_r), FUNC(cdicdic_device::regs_w));
+ //map(0x00310000, 0x00317fff).rw("slave", FUNC(cdislave_device::slave_r), FUNC(cdicdic_device::slave_w));
+ //map(0x00318000, 0x0031ffff).noprw();
map(0x00320000, 0x00323fff).rw("mk48t08", FUNC(timekeeper_device::read), FUNC(timekeeper_device::write)).umask16(0xff00); /* nvram (only low bytes used) */
map(0x00400000, 0x0047ffff).rom().region("maincpu", 0);
map(0x004fffe0, 0x004fffff).rw(m_mcd212, FUNC(mcd212_device::regs_r), FUNC(mcd212_device::regs_w));
- //AM_RANGE(0x00500000, 0x0057ffff) AM_RAM
+ //map(0x00500000, 0x0057ffff).ram();
map(0x00500000, 0x00ffffff).noprw();
- //AM_RANGE(0x00e00000, 0x00efffff) AM_RAM // DVC
+ //map(0x00e00000, 0x00efffff).ram(); // DVC
}
void cdi_state::cdi910_mem(address_map &map)
@@ -106,15 +106,15 @@ void cdi_state::cdi910_mem(address_map &map)
#if ENABLE_UART_PRINTING
map(0x00301400, 0x00301403).r(m_maincpu, FUNC(scc68070_device::uart_loopback_enable));
#endif
-// AM_RANGE(0x00300000, 0x00303bff) AM_DEVREADWRITE("cdic", cdicdic_device, ram_r, ram_w)
-// AM_RANGE(0x00303c00, 0x00303fff) AM_DEVREADWRITE("cdic", cdicdic_device, regs_r, regs_w)
-// AM_RANGE(0x00310000, 0x00317fff) AM_DEVREADWRITE("slave_hle", cdislave_device, slave_r, slave_w)
-// AM_RANGE(0x00318000, 0x0031ffff) AM_NOP
+// map(0x00300000, 0x00303bff).rw("cdic", FUNC(cdicdic_device::ram_r), FUNC(cdicdic_device::ram_w));
+// map(0x00303c00, 0x00303fff).rw("cdic", FUNC(cdicdic_device::regs_r), FUNC(cdicdic_device::regs_w));
+// map(0x00310000, 0x00317fff).rw("slave_hle", FUNC(cdislave_device::slave_r), FUNC(cdicdic_device::slave_w));
+// map(0x00318000, 0x0031ffff).noprw();
map(0x00320000, 0x00323fff).rw("mk48t08", FUNC(timekeeper_device::read), FUNC(timekeeper_device::write)).umask16(0xff00); /* nvram (only low bytes used) */
map(0x004fffe0, 0x004fffff).rw(m_mcd212, FUNC(mcd212_device::regs_r), FUNC(mcd212_device::regs_w));
-// AM_RANGE(0x00500000, 0x0057ffff) AM_RAM
+// map(0x00500000, 0x0057ffff).ram();
map(0x00500000, 0x00ffffff).noprw();
-// AM_RANGE(0x00e00000, 0x00efffff) AM_RAM // DVC
+// map(0x00e00000, 0x00efffff).ram(); // DVC
}
diff --git a/src/mame/drivers/cesclass.cpp b/src/mame/drivers/cesclass.cpp
index a8633d13ae7..a05edec6db7 100644
--- a/src/mame/drivers/cesclass.cpp
+++ b/src/mame/drivers/cesclass.cpp
@@ -136,13 +136,13 @@ void cesclassic_state::cesclassic_map(address_map &map)
map(0x480000, 0x481fff).ram().share("nvram"); //8k according to schematics (games doesn't use that much tho)
map(0x600000, 0x600001).portr("SYSTEM");
map(0x610000, 0x610001).w(FUNC(cesclassic_state::outputs_w));
-// AM_RANGE(0x640000, 0x640001) AM_WRITENOP
+// map(0x640000, 0x640001).nopw();
map(0x640040, 0x640041).w(FUNC(cesclassic_state::lamps_w));
map(0x670000, 0x670001).portr("DSW");
map(0x70ff00, 0x70ff01).nopw(); // writes 0xffff at irq 3 end of service, watchdog?
map(0x900001, 0x900001).r(m_oki, FUNC(okim6295_device::read)); // unsure about this ...
map(0x900101, 0x900101).w(m_oki, FUNC(okim6295_device::write));
-// AM_RANGE(0x904000, 0x904001) AM_WRITENOP //some kind of serial
+// map(0x904000, 0x904001).nopw(); //some kind of serial
}
static INPUT_PORTS_START( cesclassic )
diff --git a/src/mame/drivers/cfx9850.cpp b/src/mame/drivers/cfx9850.cpp
index f26d3485f92..9d40a746014 100644
--- a/src/mame/drivers/cfx9850.cpp
+++ b/src/mame/drivers/cfx9850.cpp
@@ -72,12 +72,12 @@ void cfx9850_state::cfx9850_mem(address_map &map)
{
map(0x000000, 0x007fff).rom();
map(0x080000, 0x0807ff).ram().share("video_ram");
-// AM_RANGE( 0x100000, 0x10ffff ) // some memory mapped i/o???
-// AM_RANGE( 0x110000, 0x11ffff ) // some memory mapped i/o???
+// map(0x100000, 0x10ffff) // some memory mapped i/o???
+// map(0x110000, 0x11ffff) // some memory mapped i/o???
map(0x200000, 0x27ffff).rom().region("bios", 0);
map(0x400000, 0x407fff).mirror(0x008000).ram();
map(0x600000, 0x6007ff).mirror(0xf800).ram().share("display_ram");
-// AM_RANGE( 0xe10000, 0xe1ffff ) // some memory mapped i/o???
+// map(0xe10000, 0xe1ffff) // some memory mapped i/o???
}
diff --git a/src/mame/drivers/cgc7900.cpp b/src/mame/drivers/cgc7900.cpp
index 42d216ff821..e7febbdd3a6 100644
--- a/src/mame/drivers/cgc7900.cpp
+++ b/src/mame/drivers/cgc7900.cpp
@@ -330,7 +330,7 @@ void cgc7900_state::cgc7900_mem(address_map &map)
map(0xa00000, 0xbfffff).rw(FUNC(cgc7900_state::z_mode_r), FUNC(cgc7900_state::z_mode_w));
map(0xc00000, 0xdfffff).ram().share("plane_ram");
map(0xe00000, 0xe1ffff).w(FUNC(cgc7900_state::color_status_w));
-// AM_RANGE(0xe20000, 0xe23fff) Raster Processor
+// map(0xe20000, 0xe23fff) Raster Processor
map(0xe30000, 0xe303ff).ram().share("clut_ram");
map(0xe38000, 0xe3bfff).ram().share("overlay_ram");
map(0xe40000, 0xe40001).ram().share("roll_bitmap");
@@ -346,37 +346,37 @@ void cgc7900_state::cgc7900_mem(address_map &map)
map(0xe40018, 0xe40019).ram().share("color_status_bg");
map(0xe4001a, 0xe4001b).ram().share("roll_overlay");
map(0xe4001c, 0xe40fff).ram();
-// AM_RANGE(0xefc440, 0xefc441) HVG Load X
-// AM_RANGE(0xefc442, 0xefc443) HVG Load Y
-// AM_RANGE(0xefc444, 0xefc445) HVG Load dX
-// AM_RANGE(0xefc446, 0xefc447) HVG Load dY
-// AM_RANGE(0xefc448, 0xefc449) HVG Load Pixel Color
-// AM_RANGE(0xefc44a, 0xefc44b) HVG Load Trip
+// map(0xefc440, 0xefc441) HVG Load X
+// map(0xefc442, 0xefc443) HVG Load Y
+// map(0xefc444, 0xefc445) HVG Load dX
+// map(0xefc446, 0xefc447) HVG Load dY
+// map(0xefc448, 0xefc449) HVG Load Pixel Color
+// map(0xefc44a, 0xefc44b) HVG Load Trip
map(0xff8000, 0xff8003).rw(m_i8251_0, FUNC(i8251_device::read), FUNC(i8251_device::write)).umask16(0x00ff);
map(0xff8040, 0xff8043).rw(m_i8251_1, FUNC(i8251_device::read), FUNC(i8251_device::write)).umask16(0x00ff);
map(0xff8080, 0xff8081).rw(FUNC(cgc7900_state::keyboard_r), FUNC(cgc7900_state::keyboard_w));
-// AM_RANGE(0xff80c6, 0xff80c7) Joystick X axis
-// AM_RANGE(0xff80ca, 0xff80cb) Joystick Y axis
-// AM_RANGE(0xff80cc, 0xff80cd) Joystick Z axis
+// map(0xff80c6, 0xff80c7) Joystick X axis
+// map(0xff80ca, 0xff80cb) Joystick Y axis
+// map(0xff80cc, 0xff80cd) Joystick Z axis
map(0xff8100, 0xff8101).rw(FUNC(cgc7900_state::disk_data_r), FUNC(cgc7900_state::disk_data_w));
map(0xff8120, 0xff8121).rw(FUNC(cgc7900_state::disk_status_r), FUNC(cgc7900_state::disk_command_w));
map(0xff8140, 0xff8141).portr("BEZEL");
map(0xff8180, 0xff8180).w(K1135A_TAG, FUNC(com8116_device::stt_str_w));
map(0xff81c0, 0xff81ff).rw(MM58167_TAG, FUNC(mm58167_device::read), FUNC(mm58167_device::write)).umask16(0x00ff);
map(0xff8200, 0xff8201).w(FUNC(cgc7900_state::interrupt_mask_w));
-// AM_RANGE(0xff8240, 0xff8241) Light Pen enable
-// AM_RANGE(0xff8242, 0xff8243) Light Pen X value
-// AM_RANGE(0xff8244, 0xff8245) Light Pen Y value
-// AM_RANGE(0xff8246, 0xff8247) Buffer memory parity check
-// AM_RANGE(0xff8248, 0xff8249) Buffer memory parity set/reset
+// map(0xff8240, 0xff8241) Light Pen enable
+// map(0xff8242, 0xff8243) Light Pen X value
+// map(0xff8244, 0xff8245) Light Pen Y value
+// map(0xff8246, 0xff8247) Buffer memory parity check
+// map(0xff8248, 0xff8249) Buffer memory parity set/reset
map(0xff824a, 0xff824b).r(FUNC(cgc7900_state::sync_r));
map(0xff83c0, 0xff83c0).w(AY8910_TAG, FUNC(ay8910_device::address_w));
map(0xff83c2, 0xff83c2).r(AY8910_TAG, FUNC(ay8910_device::data_r));
map(0xff83c4, 0xff83c4).w(AY8910_TAG, FUNC(ay8910_device::data_w));
// DDMA option board
-// AM_RANGE(0xff8500, 0xff8501) Disk DMA Command Register
-// AM_RANGE(0xff8502, 0xff8503) Disk DMA Address Register
-// AM_RANGE(0xff8507, 0xff8507) Disk DMA Control/Status Register
+// map(0xff8500, 0xff8501) Disk DMA Command Register
+// map(0xff8502, 0xff8503) Disk DMA Address Register
+// map(0xff8507, 0xff8507) Disk DMA Control/Status Register
}
/*-------------------------------------------------
diff --git a/src/mame/drivers/champbas.cpp b/src/mame/drivers/champbas.cpp
index 03218b93243..fdd72fad564 100644
--- a/src/mame/drivers/champbas.cpp
+++ b/src/mame/drivers/champbas.cpp
@@ -280,7 +280,7 @@ void exctsccr_state::exctsccr_sound_map(address_map &map)
map(0xc009, 0xc009).w("dac2", FUNC(dac_byte_interface::data_w));
map(0xc00c, 0xc00c).w("soundlatch", FUNC(generic_latch_8_device::clear_w));
map(0xc00d, 0xc00d).r("soundlatch", FUNC(generic_latch_8_device::read));
-// AM_RANGE(0xc00f, 0xc00f) AM_WRITENOP // ?
+// map(0xc00f, 0xc00f).nopw(); // ?
}
void exctsccr_state::exctsccr_sound_io_map(address_map &map)
diff --git a/src/mame/drivers/chessmst.cpp b/src/mame/drivers/chessmst.cpp
index 68080cec60b..01078062789 100644
--- a/src/mame/drivers/chessmst.cpp
+++ b/src/mame/drivers/chessmst.cpp
@@ -109,7 +109,7 @@ void chessmst_state::chessmst_io(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
- //AM_RANGE(0x00, 0x03) AM_MIRROR(0xf0) read/write in both, not used by the software
+ //map(0x00, 0x03).mirror(0xf0); read/write in both, not used by the software
map(0x04, 0x07).mirror(0xf0).rw(m_pio[0], FUNC(z80pio_device::read), FUNC(z80pio_device::write));
map(0x08, 0x0b).mirror(0xf0).rw(m_pio[1], FUNC(z80pio_device::read), FUNC(z80pio_device::write));
}
diff --git a/src/mame/drivers/chinagat.cpp b/src/mame/drivers/chinagat.cpp
index 16f20f2b54c..398d4578ec9 100644
--- a/src/mame/drivers/chinagat.cpp
+++ b/src/mame/drivers/chinagat.cpp
@@ -545,8 +545,8 @@ void chinagat_state::sub_map(address_map &map)
map(0x0000, 0x1fff).ram().share("share1");
map(0x2000, 0x2000).w(FUNC(chinagat_state::sub_bankswitch_w));
map(0x2800, 0x2800).w(FUNC(chinagat_state::sub_irq_ack_w)); /* Called on CPU start and after return from jump table */
-// AM_RANGE(0x2a2b, 0x2a2b) AM_READNOP /* What lives here? */
-// AM_RANGE(0x2a30, 0x2a30) AM_READNOP /* What lives here? */
+// map(0x2a2b, 0x2a2b).nopr(); /* What lives here? */
+// map(0x2a30, 0x2a30).nopr(); /* What lives here? */
map(0x4000, 0x7fff).bankr("bank4");
map(0x8000, 0xffff).rom();
}
@@ -568,14 +568,14 @@ void chinagat_state::ym2203c_sound_map(address_map &map)
// but only on the title screen....
map(0x8800, 0x8801).rw("ym1", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
-// AM_RANGE(0x8802, 0x8802) AM_DEVREADWRITE("oki", okim6295_device, read, write)
-// AM_RANGE(0x8803, 0x8803) AM_DEVWRITE("oki", okim6295_device, write)
+// map(0x8802, 0x8802).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
+// map(0x8803, 0x8803).w("oki", FUNC(okim6295_device::write));
map(0x8804, 0x8805).rw("ym2", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
-// AM_RANGE(0x8804, 0x8804) AM_WRITEONLY
-// AM_RANGE(0x8805, 0x8805) AM_WRITEONLY
+// map(0x8804, 0x8804).writeonly();
+// map(0x8805, 0x8805).writeonly();
-// AM_RANGE(0x8800, 0x8801) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
-// AM_RANGE(0x9800, 0x9800) AM_DEVREADWRITE("oki", okim6295_device, read, write)
+// map(0x8800, 0x8801).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
+// map(0x9800, 0x9800).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0xA000, 0xA000).r(m_soundlatch, FUNC(generic_latch_8_device::read));
}
diff --git a/src/mame/drivers/chsuper.cpp b/src/mame/drivers/chsuper.cpp
index 21c3b30c983..f8873b3f705 100644
--- a/src/mame/drivers/chsuper.cpp
+++ b/src/mame/drivers/chsuper.cpp
@@ -220,7 +220,7 @@ void chsuper_state::chsuper_prg_map(address_map &map)
map(0xfb000, 0xfbfff).ram().share("nvram");
}
-// AM_RANGE(0xaff8, 0xaff8) AM_DEVWRITE_MODERN("oki", okim6295_device, write)
+// map(0xaff8, 0xaff8).w("oki", FUNC(okim6295_device::write));
void chsuper_state::chsuper_portmap(address_map &map)
{
diff --git a/src/mame/drivers/cischeat.cpp b/src/mame/drivers/cischeat.cpp
index 1fbf37acc69..d7961cd0fb1 100644
--- a/src/mame/drivers/cischeat.cpp
+++ b/src/mame/drivers/cischeat.cpp
@@ -182,10 +182,11 @@ Cisco Heat.
#include "includes/cischeat.h"
#include "cpu/m68000/m68000.h"
-#include "sound/ym2151.h"
-#include "sound/okim6295.h"
+#include "machine/adc0804.h"
#include "machine/jalcrpt.h"
#include "machine/nvram.h"
+#include "sound/okim6295.h"
+#include "sound/ym2151.h"
#include "speaker.h"
#include "cischeat.lh"
@@ -524,7 +525,7 @@ WRITE16_MEMBER(cischeat_state::scudhamm_motor_command_w)
}
-READ16_MEMBER(cischeat_state::scudhamm_analog_r)
+uint8_t cischeat_state::scudhamm_analog_r()
{
int i=ioport("IN1")->read(),j;
@@ -601,7 +602,7 @@ void cischeat_state::scudhamm_map(address_map &map)
map(0x100015, 0x100015).rw(m_oki1, FUNC(okim6295_device::read), FUNC(okim6295_device::write)); // Sound
map(0x100019, 0x100019).rw(m_oki2, FUNC(okim6295_device::read), FUNC(okim6295_device::write)); //
map(0x10001c, 0x10001d).w(FUNC(cischeat_state::scudhamm_enable_w)); // ?
- map(0x100040, 0x100041).r(FUNC(cischeat_state::scudhamm_analog_r)).nopw(); // A / D
+ map(0x100041, 0x100041).rw("adc", FUNC(adc0804_device::read), FUNC(adc0804_device::write)); // A / D
map(0x100044, 0x100045).r(FUNC(cischeat_state::scudhamm_motor_pos_r)); // Motor Position
map(0x100050, 0x100051).r(FUNC(cischeat_state::scudhamm_motor_status_r)).w(FUNC(cischeat_state::scudhamm_motor_command_w)); // Motor Limit Switches
map(0x10005c, 0x10005d).portr("IN2"); // 2 x DSW
@@ -622,7 +623,7 @@ WRITE16_MEMBER(cischeat_state::armchmp2_motor_command_w)
COMBINE_DATA( &m_scudhamm_motor_command );
}
-READ16_MEMBER(cischeat_state::armchmp2_analog_r)
+uint8_t cischeat_state::armchmp2_analog_r()
{
int armdelta;
@@ -684,7 +685,7 @@ void cischeat_state::armchmp2_map(address_map &map)
map(0x100000, 0x100001).portr("IN2").w(FUNC(cischeat_state::scudhamm_oki_bank_w)); // DSW + Sound
map(0x100004, 0x100005).portr("IN3"); // DSW
map(0x100008, 0x100009).rw(FUNC(cischeat_state::armchmp2_buttons_r), FUNC(cischeat_state::armchmp2_leds_w)); // Leds + Coin Counters + Buttons + Sensors
- map(0x10000c, 0x10000d).r(FUNC(cischeat_state::armchmp2_analog_r)).nopw(); // A / D
+ map(0x10000d, 0x10000d).rw("adc", FUNC(adc0804_device::read), FUNC(adc0804_device::write)); // A / D
map(0x100010, 0x100011).rw(FUNC(cischeat_state::armchmp2_motor_status_r), FUNC(cischeat_state::armchmp2_motor_command_w)); // Motor Limit Switches?
map(0x100015, 0x100015).rw(m_oki1, FUNC(okim6295_device::read), FUNC(okim6295_device::write)); // Sound
map(0x100019, 0x100019).rw(m_oki2, FUNC(okim6295_device::read), FUNC(okim6295_device::write)); //
@@ -1643,7 +1644,7 @@ static INPUT_PORTS_START( armchmp2 )
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON3 ) // elbow (it always complains though)
PORT_START("IN1") // A/D
- PORT_BIT( 0x00ff, 0x0000, IPT_DIAL ) PORT_MINMAX(0x0000,0x00ff) PORT_SENSITIVITY(100) PORT_KEYDELTA(10)
+ PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_MINMAX(0x00,0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(10)
PORT_START("IN2") // DSW
PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) )
@@ -2090,6 +2091,9 @@ void cischeat_state::scudhamm(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &cischeat_state::scudhamm_map);
TIMER(config, "scantimer").configure_scanline(FUNC(cischeat_state::scudhamm_scanline), "screen", 0, 1);
+ adc0804_device &adc(ADC0804(config, "adc", 640000)); // unknown clock
+ adc.vin_callback().set(FUNC(cischeat_state::scudhamm_analog_r));
+
WATCHDOG_TIMER(config, m_watchdog);
/* video hardware */
@@ -2145,6 +2149,7 @@ void cischeat_state::armchmp2(machine_config &config)
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &cischeat_state::armchmp2_map);
subdevice<timer_device>("scantimer")->set_callback(FUNC(cischeat_state::armchamp2_scanline));
+ subdevice<adc0804_device>("adc")->vin_callback().set(FUNC(cischeat_state::armchmp2_analog_r));
}
diff --git a/src/mame/drivers/clayshoo.cpp b/src/mame/drivers/clayshoo.cpp
index 3c571d811a0..7ee439fb337 100644
--- a/src/mame/drivers/clayshoo.cpp
+++ b/src/mame/drivers/clayshoo.cpp
@@ -238,9 +238,9 @@ void clayshoo_state::main_io_map(address_map &map)
map(0x00, 0x00).w("watchdog", FUNC(watchdog_timer_device::reset_w));
map(0x20, 0x23).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0x30, 0x33).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write));
-// AM_RANGE(0x40, 0x43) AM_NOP // 8253 for sound?
-// AM_RANGE(0x50, 0x50) AM_NOP // ?
-// AM_RANGE(0x60, 0x60) AM_NOP // ?
+// map(0x40, 0x43).noprw(); // 8253 for sound?
+// map(0x50, 0x50).noprw(); // ?
+// map(0x60, 0x60).noprw(); // ?
}
diff --git a/src/mame/drivers/cmi.cpp b/src/mame/drivers/cmi.cpp
index 0f4721e5b63..8b93be1abaf 100644
--- a/src/mame/drivers/cmi.cpp
+++ b/src/mame/drivers/cmi.cpp
@@ -785,9 +785,9 @@ void cmi_state::midicpu_map(address_map &map)
{
map(0x000000, 0x003fff).rom();
map(0x040000, 0x05ffff).rw(FUNC(cmi_state::midi_dma_r), FUNC(cmi_state::midi_dma_w));
-// AM_RANGE(0x060000, 0x06001f) TIMERS
-// AM_RANGE(0x060050, 0x06005f) ACIA
-// AM_RANGE(0x060070, 0x06007f) SMPTE
+// map(0x060000, 0x06001f) TIMERS
+// map(0x060050, 0x06005f) ACIA
+// map(0x060070, 0x06007f) SMPTE
map(0x080000, 0x083fff).ram();
}
@@ -1287,7 +1287,7 @@ WRITE8_MEMBER( cmi_state::i8214_cpu2_w )
m_i8214[1]->b_w(data & 0x7);
}
-// TODO: replace with AM_SHARE
+// TODO: replace with share()
READ8_MEMBER( cmi_state::shared_ram_r )
{
return m_shared_ram[offset];
diff --git a/src/mame/drivers/cmmb.cpp b/src/mame/drivers/cmmb.cpp
index 07281110b3c..d5012ea9385 100644
--- a/src/mame/drivers/cmmb.cpp
+++ b/src/mame/drivers/cmmb.cpp
@@ -212,7 +212,7 @@ WRITE8_MEMBER(cmmb_state::cmmb_output_w)
void cmmb_state::cmmb_map(address_map &map)
{
map(0x0000, 0x0fff).ram(); /* zero page address */
-// AM_RANGE(0x13c0, 0x13ff) AM_RAM //spriteram
+// map(0x13c0, 0x13ff).ram(); //spriteram
map(0x1000, 0x1fff).ram().share("videoram");
map(0x2000, 0x9fff).m(m_bnk2000, FUNC(address_map_bank_device::amap8));
map(0xa000, 0xafff).ram();
diff --git a/src/mame/drivers/cntsteer.cpp b/src/mame/drivers/cntsteer.cpp
index 757a89c2995..a41be7a573d 100644
--- a/src/mame/drivers/cntsteer.cpp
+++ b/src/mame/drivers/cntsteer.cpp
@@ -685,7 +685,7 @@ INTERRUPT_GEN_MEMBER(cntsteer_state::sound_interrupt)
void cntsteer_state::sound_map(address_map &map)
{
map(0x0000, 0x01ff).ram();
-// AM_RANGE(0x1000, 0x1000) AM_WRITE(nmiack_w)
+// map(0x1000, 0x1000).w(FUNC(cntsteer_state::nmiack_w));
map(0x2000, 0x2000).w("ay1", FUNC(ym2149_device::data_w));
map(0x4000, 0x4000).w("ay1", FUNC(ym2149_device::address_w));
map(0x6000, 0x6000).w("ay2", FUNC(ym2149_device::data_w));
diff --git a/src/mame/drivers/cobra.cpp b/src/mame/drivers/cobra.cpp
index 55df9351774..b2f4331b15a 100644
--- a/src/mame/drivers/cobra.cpp
+++ b/src/mame/drivers/cobra.cpp
@@ -2042,7 +2042,7 @@ void cobra_state::cobra_sub_map(address_map &map)
{
map(0x00000000, 0x003fffff).ram().share("sub_ram"); // Main RAM
map(0x70000000, 0x7003ffff).rw(FUNC(cobra_state::sub_comram_r), FUNC(cobra_state::sub_comram_w)); // Double buffered shared RAM between Main and Sub
-// AM_RANGE(0x78000000, 0x780000ff) AM_NOP // SCSI controller (unused)
+// map(0x78000000, 0x780000ff).noprw(); // SCSI controller (unused)
map(0x78040000, 0x7804ffff).rw("rfsnd", FUNC(rf5c400_device::rf5c400_r), FUNC(rf5c400_device::rf5c400_w));
map(0x78080000, 0x7808000f).rw(FUNC(cobra_state::sub_ata0_r), FUNC(cobra_state::sub_ata0_w));
map(0x780c0010, 0x780c001f).rw(FUNC(cobra_state::sub_ata1_r), FUNC(cobra_state::sub_ata1_w));
diff --git a/src/mame/drivers/cocoloco.cpp b/src/mame/drivers/cocoloco.cpp
index 75e549760a8..2f17240892c 100644
--- a/src/mame/drivers/cocoloco.cpp
+++ b/src/mame/drivers/cocoloco.cpp
@@ -185,8 +185,7 @@
#include "emupal.h"
#include "screen.h"
#include "speaker.h"
-
-#include "netlist/devices/net_lib.h"
+#include "audio/nl_cocoloco.h"
#define MASTER_CLOCK XTAL(20'000'000) // confirmed
@@ -233,47 +232,6 @@ private:
* Sound Hardware *
***********************************/
-static NETLIST_START(nl_cocoloco)
-
- /* Standard stuff */
-
- SOLVER(Solver, 48000)
- PARAM(Solver.ACCURACY, 1e-5)
- ANALOG_INPUT(V5, 5)
-
- /* AY 8910 internal resistors */
-
- RES(R_AY1_1, 1000);
- RES(R_AY1_2, 1000);
- RES(R_AY1_3, 1000);
-
- RES(R1, 4700)
- RES(R2, 4700)
- RES(R3, 4700)
- RES(RAMP, 150000)
- //RES(RAMP, 150)
- POT(P1, 5000)
- PARAM(P1.DIAL, 0.5) // 50%
-
- CAP(C1, 10e-6)
-
- NET_C(V5, R_AY1_1.1, R_AY1_2.1, R_AY1_3.1)
-
- NET_C(R_AY1_1.2, R1.1)
- NET_C(R_AY1_2.2, R2.1)
- NET_C(R_AY1_3.2, R3.1)
-
- NET_C(R1.2, R2.2, R3.2, P1.1)
-
- NET_C(P1.3, RAMP.2, GND)
- NET_C(P1.2, C1.1)
- NET_C(C1.2, RAMP.1)
-#if 0
- CAP(C2, 0.1e-6)
- NET_C(C2.2, GND)
- NET_C(C2.1, RAMP.1)
-#endif
-NETLIST_END()
/***********************************
@@ -538,7 +496,7 @@ void cocoloco_state::cocoloco(machine_config &config)
/* NETLIST configuration using internal AY8910 resistor values */
NETLIST_SOUND(config, "snd_nl", 48000)
- .set_source(NETLIST_NAME(nl_cocoloco))
+ .set_source(NETLIST_NAME(cocoloco))
.add_route(ALL_OUTPUTS, "mono", 1.0);
NETLIST_STREAM_INPUT(config, "snd_nl:cin0", 0, "R_AY1_1.R");
diff --git a/src/mame/drivers/codata.cpp b/src/mame/drivers/codata.cpp
index 8aad36ec7b1..eeddd6b044f 100644
--- a/src/mame/drivers/codata.cpp
+++ b/src/mame/drivers/codata.cpp
@@ -43,9 +43,9 @@ void codata_state::mem_map(address_map &map)
map(0x600000, 0x600007).mirror(0x1ffff8).rw("uart", FUNC(upd7201_new_device::ba_cd_r), FUNC(upd7201_new_device::ba_cd_w)).umask16(0xff00);
map(0x800000, 0x800003).mirror(0x1ffffc).rw("timer", FUNC(am9513_device::read16), FUNC(am9513_device::write16));
map(0xe00000, 0xe00001).mirror(0x1ffffe).portr("INPUT");
- //AM_RANGE(0xa00000, 0xbfffff) page map (rw)
- //AM_RANGE(0xc00000, 0xdfffff) segment map (rw), context register (r)
- //AM_RANGE(0xe00000, 0xffffff) context register (w), 16-bit parallel input port (r)
+ //map(0xa00000, 0xbfffff) page map (rw)
+ //map(0xc00000, 0xdfffff) segment map (rw), context register (r)
+ //map(0xe00000, 0xffffff) context register (w), 16-bit parallel input port (r)
}
/* Input ports */
diff --git a/src/mame/drivers/coinmstr.cpp b/src/mame/drivers/coinmstr.cpp
index ced82d97625..98780b94b88 100644
--- a/src/mame/drivers/coinmstr.cpp
+++ b/src/mame/drivers/coinmstr.cpp
@@ -501,7 +501,7 @@ E0-E1 CRTC
map(0xc8, 0xcb).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); /* confirmed */
map(0xd0, 0xd3).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0xd8, 0xdb).rw("pia2", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); /* confirmed */
-// AM_RANGE(0xc0, 0xc1) AM_READ(ff_r) /* needed to boot */
+// map(0xc0, 0xc1).r(FUNC(coinmstr_state::ff_r)); /* needed to boot */
map(0xc4, 0xc4).r(FUNC(coinmstr_state::ff_r)); /* needed to boot */
}
diff --git a/src/mame/drivers/coinmvga.cpp b/src/mame/drivers/coinmvga.cpp
index 3c3e47934dc..3b0bac5b32f 100644
--- a/src/mame/drivers/coinmvga.cpp
+++ b/src/mame/drivers/coinmvga.cpp
@@ -321,11 +321,11 @@ void coinmvga_state::coinmvga_map(address_map &map)
map(0x000000, 0x07ffff).rom();
map(0x080000, 0x0fffff).rom().region("maincpu", 0); //maybe not
-// AM_RANGE(0x0a0000, 0x0fffff) AM_RAM
-// AM_RANGE(0x100000, 0x1fffff) AM_RAM //colorama
+// map(0x0a0000, 0x0fffff).ram();
+// map(0x100000, 0x1fffff).ram(); //colorama
map(0x210000, 0x21ffff).ram().share("vram");
-// AM_RANGE(0x40746e, 0x40746f) AM_READ(test_r) AM_WRITENOP //touch screen related, colorama
-// AM_RANGE(0x403afa, 0x403afb) AM_READ(test_r) AM_WRITENOP //touch screen related, cmrltv75
+// map(0x40746e, 0x40746f).r(FUNC(coinmvga_state::test_r)).nopw(); //touch screen related, colorama
+// map(0x403afa, 0x403afb).r(FUNC(coinmvga_state::test_r)).nopw(); //touch screen related, cmrltv75
map(0x400000, 0x40ffff).ram();
map(0x600000, 0x600000).w("ramdac", FUNC(ramdac_device::index_w));
@@ -347,20 +347,20 @@ void coinmvga_state::coinmvga_map(address_map &map)
void coinmvga_state::coinmvga_io_map(address_map &map)
{
/* Digital I/O ports (ports 4-B are valid on 16-bit H8/3xx) */
-// AM_RANGE(h8_device::PORT_4, h8_device::PORT_4)
-// AM_RANGE(h8_device::PORT_5, h8_device::PORT_5)
-// AM_RANGE(h8_device::PORT_6, h8_device::PORT_6)
-// AM_RANGE(h8_device::PORT_7, h8_device::PORT_7) <---- 0006 RW colorama
-// AM_RANGE(h8_device::PORT_8, h8_device::PORT_8)
-// AM_RANGE(h8_device::PORT_9, h8_device::PORT_9)
-// AM_RANGE(h8_device::PORT_A, h8_device::PORT_A)
-// AM_RANGE(h8_device::PORT_B, h8_device::PORT_B)
+// map(h8_device::PORT_4, h8_device::PORT_4)
+// map(h8_device::PORT_5, h8_device::PORT_5)
+// map(h8_device::PORT_6, h8_device::PORT_6)
+// map(h8_device::PORT_7, h8_device::PORT_7) <---- 0006 RW colorama
+// map(h8_device::PORT_8, h8_device::PORT_8)
+// map(h8_device::PORT_9, h8_device::PORT_9)
+// map(h8_device::PORT_A, h8_device::PORT_A)
+// map(h8_device::PORT_B, h8_device::PORT_B)
/* Analog Inputs */
-// AM_RANGE(h8_device::ADC_0, h8_device::ADC_0)
-// AM_RANGE(h8_device::ADC_1, h8_device::ADC_1)
-// AM_RANGE(h8_device::ADC_2, h8_device::ADC_2)
-// AM_RANGE(h8_device::ADC_3, h8_device::ADC_3)
+// map(h8_device::ADC_0, h8_device::ADC_0)
+// map(h8_device::ADC_1, h8_device::ADC_1)
+// map(h8_device::ADC_2, h8_device::ADC_2)
+// map(h8_device::ADC_3, h8_device::ADC_3)
}
/* unknown writes (cmrltv75):
diff --git a/src/mame/drivers/combatsc.cpp b/src/mame/drivers/combatsc.cpp
index 460f09786a4..f3ab95696d3 100644
--- a/src/mame/drivers/combatsc.cpp
+++ b/src/mame/drivers/combatsc.cpp
@@ -351,7 +351,7 @@ void combatsc_state::combatsc_map(address_map &map)
map(0x0000, 0x0007).w(FUNC(combatsc_state::combatsc_pf_control_w));
map(0x001f, 0x001f).r(FUNC(combatsc_state::unk_r));
map(0x0020, 0x005f).rw(FUNC(combatsc_state::combatsc_scrollram_r), FUNC(combatsc_state::combatsc_scrollram_w));
-// AM_RANGE(0x0060, 0x00ff) AM_WRITEONLY /* RAM */
+// map(0x0060, 0x00ff).writeonly(); /* RAM */
map(0x0200, 0x0201).rw(FUNC(combatsc_state::protection_r), FUNC(combatsc_state::protection_w));
map(0x0206, 0x0206).w(FUNC(combatsc_state::protection_clock_w));
diff --git a/src/mame/drivers/concept.cpp b/src/mame/drivers/concept.cpp
index 46cbcf20e24..ebd7edca544 100644
--- a/src/mame/drivers/concept.cpp
+++ b/src/mame/drivers/concept.cpp
@@ -52,7 +52,7 @@ void concept_state::concept_memmap(address_map &map)
map(0x020000, 0x021fff).rom().region("macsbug", 0x0); /* macsbugs ROM (optional) */
map(0x030000, 0x03ffff).rw(FUNC(concept_state::io_r), FUNC(concept_state::io_w)).umask16(0x00ff); /* I/O space */
- map(0x080000, 0x0fffff).ram().share("videoram");/* AM_RAMBANK(2) */ /* DRAM */
+ map(0x080000, 0x0fffff).ram().share("videoram"); /* .bankrw(2); */ /* DRAM */
}
diff --git a/src/mame/drivers/cosmicos.cpp b/src/mame/drivers/cosmicos.cpp
index e8b470cb272..5fb6eb70d9d 100644
--- a/src/mame/drivers/cosmicos.cpp
+++ b/src/mame/drivers/cosmicos.cpp
@@ -191,11 +191,11 @@ void cosmicos_state::cosmicos_mem(address_map &map)
void cosmicos_state::cosmicos_io(address_map &map)
{
-// AM_RANGE(0x00, 0x00)
+// map(0x00, 0x00)
map(0x01, 0x01).r(FUNC(cosmicos_state::video_on_r));
map(0x02, 0x02).rw(FUNC(cosmicos_state::video_off_r), FUNC(cosmicos_state::audio_latch_w));
-// AM_RANGE(0x03, 0x03)
-// AM_RANGE(0x04, 0x04)
+// map(0x03, 0x03)
+// map(0x04, 0x04)
map(0x05, 0x05).rw(FUNC(cosmicos_state::hex_keyboard_r), FUNC(cosmicos_state::hex_keylatch_w));
map(0x06, 0x06).rw(FUNC(cosmicos_state::reset_counter_r), FUNC(cosmicos_state::segment_w));
map(0x07, 0x07).rw(FUNC(cosmicos_state::data_r), FUNC(cosmicos_state::display_w));
diff --git a/src/mame/drivers/crgolf.cpp b/src/mame/drivers/crgolf.cpp
index 9d9d2fc0f86..b6d7be43ad6 100644
--- a/src/mame/drivers/crgolf.cpp
+++ b/src/mame/drivers/crgolf.cpp
@@ -334,7 +334,7 @@ void crgolf_state::mastrglf_io(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x07).w("mainlatch", FUNC(ls259_device::write_d0));
-// AM_RANGE(0x20, 0x20) AM_WRITE(rom_bank_select_w)
+// map(0x20, 0x20).w(FUNC(crgolf_state::rom_bank_select_w));
map(0x40, 0x40).w("soundlatch1", FUNC(generic_latch_8_device::write));
map(0xa0, 0xa0).r("soundlatch2", FUNC(generic_latch_8_device::read));
}
diff --git a/src/mame/drivers/crvision.cpp b/src/mame/drivers/crvision.cpp
index 7eb9b1c8ee4..8f97937de0a 100644
--- a/src/mame/drivers/crvision.cpp
+++ b/src/mame/drivers/crvision.cpp
@@ -150,11 +150,11 @@ void crvision_state::crvision_map(address_map &map)
map(0x3000, 0x3001).mirror(0x0ffe).w(TMS9929_TAG, FUNC(tms9928a_device::write));
map(0x4000, 0x7fff).bankr(BANK_ROM2);
map(0x8000, 0xbfff).bankr(BANK_ROM1);
-// AM_RANGE(0xc000, 0xe7ff) AM_RAMBANK(3)
+// map(0xc000, 0xe7ff).bankrw(3);
map(0xe800, 0xe800).w(m_cent_data_out, FUNC(output_latch_device::bus_w));
map(0xe801, 0xe801).r("cent_status_in", FUNC(input_buffer_device::bus_r));
map(0xe801, 0xe801).w("cent_ctrl_out", FUNC(output_latch_device::bus_w));
-// AM_RANGE(0xe802, 0xf7ff) AM_RAMBANK(4)
+// map(0xe802, 0xf7ff).bankrw(4);
map(0xf800, 0xffff).rom().region(M6502_TAG, 0);
}
diff --git a/src/mame/drivers/cswat.cpp b/src/mame/drivers/cswat.cpp
index de0127175ae..3624c96a493 100644
--- a/src/mame/drivers/cswat.cpp
+++ b/src/mame/drivers/cswat.cpp
@@ -143,13 +143,13 @@ void cswat_state::cswat_map(address_map &map)
{
map(0x0000, 0x0bff).ram().w(FUNC(cswat_state::videoram_w)).share("videoram");
map(0x0c00, 0x0fff).ram();
-// AM_RANGE(0x1800, 0x1800) AM_READNOP // ? reads here after writing to $4000
+// map(0x1800, 0x1800).nopr(); // ? reads here after writing to $4000
map(0x2000, 0x2000).w(FUNC(cswat_state::irq_ack_w)); // writes 1 at end of vblank irq, 0 at gamestart
map(0x2000, 0x2001).r(FUNC(cswat_state::dipswitch_r));
map(0x2002, 0x2002).w(FUNC(cswat_state::irq_ack_w)); // writes 0 at start of vblank irq
map(0x2002, 0x2002).r(FUNC(cswat_state::sensors_r));
map(0x2003, 0x2003).portr("IN0");
-// AM_RANGE(0x4000, 0x4009) AM_NOP // ?
+// map(0x4000, 0x4009).noprw(); // ?
map(0x8000, 0xffff).rom();
}
diff --git a/src/mame/drivers/cubeqst.cpp b/src/mame/drivers/cubeqst.cpp
index c37d0b6df75..02b404339d9 100644
--- a/src/mame/drivers/cubeqst.cpp
+++ b/src/mame/drivers/cubeqst.cpp
@@ -565,31 +565,19 @@ void cubeqst_state::cubeqst(machine_config &config)
m_laserdisc->add_route(0, "lspeaker", 1.0);
m_laserdisc->add_route(1, "rspeaker", 1.0);
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
for (int i = 0; i < 8; i++)
{
// ad7521jn.2d (59) + cd4051be.1d (24) + 1500pf.c22 (34) + tl074cn.1b (53) + r10k.rn1 (30)
AD7521(config, m_dacs[i*2+0], 0).add_route(0, "rspeaker", 0.125);
+ vref.add_route(0, m_dacs[i*2+0], 1.0, DAC_VREF_POS_INPUT);
+ vref.add_route(0, m_dacs[i*2+0], -1.0, DAC_VREF_NEG_INPUT);
// ad7521jn.2d (59) + cd4051be.3d (24) + 1500pf.c13 (34) + tl074cn.3b (53) + r10k.rn3 (30)
AD7521(config, m_dacs[i*2+1], 0).add_route(0, "lspeaker", 0.125);
+ vref.add_route(0, m_dacs[i*2+1], 1.0, DAC_VREF_POS_INPUT);
+ vref.add_route(0, m_dacs[i*2+1], -1.0, DAC_VREF_NEG_INPUT);
}
- voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
- vref.add_route(0, "rdac0", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "rdac0", -1.0, DAC_VREF_NEG_INPUT);
- vref.add_route(0, "ldac0", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "ldac0", -1.0, DAC_VREF_NEG_INPUT);
- vref.add_route(0, "rdac1", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "rdac1", -1.0, DAC_VREF_NEG_INPUT);
- vref.add_route(0, "ldac1", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "ldac1", -1.0, DAC_VREF_NEG_INPUT);
- vref.add_route(0, "rdac2", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "rdac2", -1.0, DAC_VREF_NEG_INPUT);
- vref.add_route(0, "ldac2", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "ldac2", -1.0, DAC_VREF_NEG_INPUT);
- vref.add_route(0, "rdac3", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "rdac3", -1.0, DAC_VREF_NEG_INPUT);
- vref.add_route(0, "ldac3", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "ldac3", -1.0, DAC_VREF_NEG_INPUT);
- vref.add_route(0, "rdac4", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "rdac4", -1.0, DAC_VREF_NEG_INPUT);
- vref.add_route(0, "ldac4", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "ldac4", -1.0, DAC_VREF_NEG_INPUT);
- vref.add_route(0, "rdac5", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "rdac5", -1.0, DAC_VREF_NEG_INPUT);
- vref.add_route(0, "ldac5", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "ldac5", -1.0, DAC_VREF_NEG_INPUT);
- vref.add_route(0, "rdac6", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "rdac6", -1.0, DAC_VREF_NEG_INPUT);
- vref.add_route(0, "ldac6", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "ldac6", -1.0, DAC_VREF_NEG_INPUT);
- vref.add_route(0, "rdac7", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "rdac7", -1.0, DAC_VREF_NEG_INPUT);
- vref.add_route(0, "ldac7", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "ldac7", -1.0, DAC_VREF_NEG_INPUT);
}
diff --git a/src/mame/drivers/cupidon.cpp b/src/mame/drivers/cupidon.cpp
index d6c776f615b..0acd7f3938c 100644
--- a/src/mame/drivers/cupidon.cpp
+++ b/src/mame/drivers/cupidon.cpp
@@ -88,14 +88,13 @@ void cupidon_state::cupidon_map(address_map &map)
map(0x1800000, 0x1800003).r(FUNC(cupidon_state::cupidon_return_ffffffff));
map(0x2000074, 0x2000077).ram(); // port
-// AM_RANGE(0x2000040, 0x200004f) AM_RAM
-
+// map(0x2000040, 0x200004f).ram();
// might just be 4mb of VRAM
map(0x3000000, 0x33bffff).ram();
map(0x33c0000, 0x33fffff).ram().share("gfxram"); // seems to upload graphics to here, tiles etc. if you skip the loop after the romtest in funnyfm
-// AM_RANGE(0x3400000, 0x3400fff) AM_RAM
-// AM_RANGE(0x3F80000, 0x3F80003) AM_RAM
+// map(0x3400000, 0x3400fff).ram();
+// map(0x3F80000, 0x3F80003).ram();
map(0x3FF0400, 0x3FF0403).ram(); // register? gangrose likes to read this?
}
diff --git a/src/mame/drivers/cv1k.cpp b/src/mame/drivers/cv1k.cpp
index e7d197a60b4..3b6c65b0de8 100644
--- a/src/mame/drivers/cv1k.cpp
+++ b/src/mame/drivers/cv1k.cpp
@@ -349,7 +349,7 @@ void cv1k_state::cv1k_map(address_map &map)
map(0x10000000, 0x10000007).rw(FUNC(cv1k_state::flash_io_r), FUNC(cv1k_state::flash_io_w));
map(0x10400000, 0x10400007).w("ymz770", FUNC(ymz770_device::write));
map(0x10C00000, 0x10C00007).rw(FUNC(cv1k_state::serial_rtc_eeprom_r), FUNC(cv1k_state::serial_rtc_eeprom_w));
-// AM_RANGE(0x18000000, 0x18000057) // blitter, installed on reset
+// map(0x18000000, 0x18000057) // blitter, installed on reset
map(0xf0000000, 0xf0ffffff).ram(); // mem mapped cache (sh3 internal?)
}
@@ -360,7 +360,7 @@ void cv1k_state::cv1k_d_map(address_map &map)
map(0x10000000, 0x10000007).rw(FUNC(cv1k_state::flash_io_r), FUNC(cv1k_state::flash_io_w));
map(0x10400000, 0x10400007).w("ymz770", FUNC(ymz770_device::write));
map(0x10C00000, 0x10C00007).rw(FUNC(cv1k_state::serial_rtc_eeprom_r), FUNC(cv1k_state::serial_rtc_eeprom_w));
-// AM_RANGE(0x18000000, 0x18000057) // blitter, installed on reset
+// map(0x18000000, 0x18000057) // blitter, installed on reset
map(0xf0000000, 0xf0ffffff).ram(); // mem mapped cache (sh3 internal?)
}
diff --git a/src/mame/drivers/cybiko.cpp b/src/mame/drivers/cybiko.cpp
index 88d9ab50770..3d964f31ff0 100644
--- a/src/mame/drivers/cybiko.cpp
+++ b/src/mame/drivers/cybiko.cpp
@@ -63,7 +63,7 @@ void cybiko_state::cybikov1_mem(address_map &map)
{
map(0x000000, 0x007fff).rom();
map(0x600000, 0x600001).rw(FUNC(cybiko_state::cybiko_lcd_r), FUNC(cybiko_state::cybiko_lcd_w));
-// AM_RANGE( 0xe00000, 0xe07fff ) AM_READ( cybikov1_key_r )
+// map(0xe00000, 0xe07fff).r(FUNC(cybiko_state::cybikov1_key_r));
}
/*
diff --git a/src/mame/drivers/cyclemb.cpp b/src/mame/drivers/cyclemb.cpp
index 45a625d8ca5..8ef064b01c2 100644
--- a/src/mame/drivers/cyclemb.cpp
+++ b/src/mame/drivers/cyclemb.cpp
@@ -592,9 +592,9 @@ void cyclemb_state::cyclemb_map(address_map &map)
void cyclemb_state::cyclemb_io(address_map &map)
{
-// ADDRESS_MAP_GLOBAL_MASK(0xff)
+// map.global_mask(0xff);
map(0xc000, 0xc000).w(FUNC(cyclemb_state::cyclemb_bankswitch_w));
- //AM_RANGE(0xc020, 0xc020) AM_WRITENOP // ?
+ //map(0xc020, 0xc020).nopw(); // ?
map(0xc09e, 0xc09f).rw(FUNC(cyclemb_state::skydest_i8741_0_r), FUNC(cyclemb_state::skydest_i8741_0_w));
map(0xc0bf, 0xc0bf).w(FUNC(cyclemb_state::cyclemb_flip_w)); //flip screen
}
@@ -602,11 +602,11 @@ void cyclemb_state::cyclemb_io(address_map &map)
void cyclemb_state::skydest_io(address_map &map)
{
-// ADDRESS_MAP_GLOBAL_MASK(0xff)
+// map.global_mask(0xff);
map(0xc000, 0xc000).w(FUNC(cyclemb_state::cyclemb_bankswitch_w));
- //AM_RANGE(0xc020, 0xc020) AM_WRITENOP // ?
+ //map(0xc020, 0xc020).nopw(); // ?
map(0xc080, 0xc081).rw(FUNC(cyclemb_state::skydest_i8741_0_r), FUNC(cyclemb_state::skydest_i8741_0_w));
- //AM_RANGE(0xc0a0, 0xc0a0) AM_WRITENOP // ?
+ //map(0xc0a0, 0xc0a0).nopw(); // ?
map(0xc0bf, 0xc0bf).w(FUNC(cyclemb_state::cyclemb_flip_w)); //flip screen
}
diff --git a/src/mame/drivers/d9final.cpp b/src/mame/drivers/d9final.cpp
index 419556358d4..41fb3d33b0e 100644
--- a/src/mame/drivers/d9final.cpp
+++ b/src/mame/drivers/d9final.cpp
@@ -141,14 +141,14 @@ void d9final_state::d9final_map(address_map &map)
map(0xd000, 0xd7ff).ram().w(FUNC(d9final_state::sc0_lovram)).share("lo_vram");
map(0xd800, 0xdfff).ram().w(FUNC(d9final_state::sc0_hivram)).share("hi_vram");
map(0xe000, 0xe7ff).ram().w(FUNC(d9final_state::sc0_cram)).share("cram");
- map(0xf000, 0xf007).r(FUNC(d9final_state::prot_latch_r)); //AM_DEVREADWRITE("essnd", es8712_device, read, write)
+ map(0xf000, 0xf007).r(FUNC(d9final_state::prot_latch_r)); //.rw("essnd", FUNC(es8712_device::read), FUNC(es8712_device::write));
map(0xf800, 0xf80f).rw("rtc", FUNC(rtc62421_device::read), FUNC(rtc62421_device::write));
}
void d9final_state::d9final_io(address_map &map)
{
map.global_mask(0xff);
-// AM_RANGE(0x00, 0x00) AM_WRITENOP //bit 0: irq enable? screen enable?
+// map(0x00, 0x00).nopw(); //bit 0: irq enable? screen enable?
map(0x00, 0x00).portr("DSWA");
map(0x20, 0x20).portr("DSWB");
map(0x40, 0x40).portr("DSWC");
diff --git a/src/mame/drivers/dai.cpp b/src/mame/drivers/dai.cpp
index 954d3977b65..cf083900922 100644
--- a/src/mame/drivers/dai.cpp
+++ b/src/mame/drivers/dai.cpp
@@ -80,7 +80,7 @@ void dai_state::dai_mem(address_map &map)
map(0xf000, 0xf7ff).w(FUNC(dai_state::dai_stack_interrupt_circuit_w));
map(0xf800, 0xf8ff).ram();
map(0xfb00, 0xfbff).rw(FUNC(dai_state::dai_amd9511_r), FUNC(dai_state::dai_amd9511_w));
- map(0xfc00, 0xfcff).rw(FUNC(dai_state::dai_pit_r), FUNC(dai_state::dai_pit_w)); // AM_DEVREADWRITE("pit8253", pit8253_device, read, write)
+ map(0xfc00, 0xfcff).rw(FUNC(dai_state::dai_pit_r), FUNC(dai_state::dai_pit_w)); // .rw("pit8253", FUNC(pit8253_device::read), FUNC(pit8253_device::write));
map(0xfd00, 0xfdff).rw(FUNC(dai_state::dai_io_discrete_devices_r), FUNC(dai_state::dai_io_discrete_devices_w));
map(0xfe00, 0xfeff).rw("ppi8255", FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0xff00, 0xff0f).mirror(0xf0).m(m_tms5501, FUNC(tms5501_device::io_map));
diff --git a/src/mame/drivers/darkmist.cpp b/src/mame/drivers/darkmist.cpp
index a0149a4c0ec..3e2e1c75864 100644
--- a/src/mame/drivers/darkmist.cpp
+++ b/src/mame/drivers/darkmist.cpp
@@ -231,10 +231,10 @@ TIMER_DEVICE_CALLBACK_MEMBER(darkmist_state::scanline)
int scanline = param;
if(scanline == 240) // vblank-out irq
- m_maincpu->set_input_line_and_vector(0, HOLD_LINE,0x10); /* Z80 - RST 10h */
+ m_maincpu->set_input_line_and_vector(0, HOLD_LINE,0xd7); /* Z80 - RST 10h */
if(scanline == 0) // vblank-in irq
- m_maincpu->set_input_line_and_vector(0, HOLD_LINE,0x08); /* Z80 - RST 08h */
+ m_maincpu->set_input_line_and_vector(0, HOLD_LINE,0xcf); /* Z80 - RST 08h */
}
diff --git a/src/mame/drivers/daruma.cpp b/src/mame/drivers/daruma.cpp
index 1ac8fd665f1..7b053ca0a35 100644
--- a/src/mame/drivers/daruma.cpp
+++ b/src/mame/drivers/daruma.cpp
@@ -94,8 +94,8 @@ void daruma_state::mem_io(address_map &map)
{
map(0x0000, 0x0000).r(FUNC(daruma_state::dev0_r));
map(0x1000, 0x1000).w(FUNC(daruma_state::dev1_w));
-// AM_RANGE(0x2000, 0x2000) AM_WRITE(dev2_w)
-// AM_RANGE(0x3000, 0x3000) AM_WRITE(dev3_w)
+// map(0x2000, 0x2000).w(FUNC(daruma_state:dev2_w));
+// map(0x3000, 0x3000).w(FUNC(daruma_state:dev3_w));
map(0x4000, 0x4000).r(FUNC(daruma_state::dev4_r));
map(0x8000, 0xffff).ram(); /* 32K CMOS SRAM (HYUNDAY hy62256a) */
}
diff --git a/src/mame/drivers/dblewing.cpp b/src/mame/drivers/dblewing.cpp
index 9e5f17590aa..5dbd3d027a1 100644
--- a/src/mame/drivers/dblewing.cpp
+++ b/src/mame/drivers/dblewing.cpp
@@ -184,7 +184,7 @@ void dblewing_state::dblewing_map(address_map &map)
map(0x104000, 0x104fff).ram().share("pf1_rowscroll");
map(0x106000, 0x106fff).ram().share("pf2_rowscroll");
-// AM_RANGE(0x280000, 0x2807ff) AM_DEVREADWRITE("ioprot104", deco104_device, dblewing_prot_r, dblewing_prot_w) AM_SHARE("prot16ram")
+// map(0x280000, 0x2807ff).rw("ioprot104", FUNC(deco104_device::dblewing_prot_r), FUNC(deco104_device::dblewing_prot_w)).share("prot16ram");
map(0x280000, 0x283fff).rw(FUNC(dblewing_state::wf_protection_region_0_104_r), FUNC(dblewing_state::wf_protection_region_0_104_w)).share("prot16ram"); /* Protection device */
diff --git a/src/mame/drivers/dbox.cpp b/src/mame/drivers/dbox.cpp
index 51d635b7da4..79876900be8 100644
--- a/src/mame/drivers/dbox.cpp
+++ b/src/mame/drivers/dbox.cpp
@@ -586,11 +586,11 @@ void dbox_state::dbox_map(address_map &map)
// CS2 - CS demux
// 0000009a Address mask CS2 00000050, 00007fff (ffffffff) - Mask: 00007f00 FCM:0f DD:3 PS: External DSACK response
// 000000a2 Base address CS2 00000054, 00700003 (ffffffff) - Base: 00700000 BFC:00 WP:0 FTE:0 NCS:1 Valid: Yes
- //AM_RANGE(0x700000, 0x77ffff)
+ //map(0x700000, 0x77ffff)
// CS3 - 8 bit devices
// 000000aa Address mask CS3 00000058, 000007f2 (ffffffff) - Mask: 00000700 FCM:0f DD:0 PS: 8-bit
// 000000b2 Base address CS3 0000005c, 00780003 (ffffffff) - Base: 00780000 BFC:00 WP:0 FTE:0 NCS:1 Valid: Yes
- // AM_RANGE(0x780000, 0x7807ff)
+ // map(0x780000, 0x7807ff)
map(0x780100, 0x7801ff).w(FUNC(dbox_state::sda5708_reset));
map(0x780600, 0x7806ff).w(FUNC(dbox_state::sda5708_clk));
// CS1 - RAM area
diff --git a/src/mame/drivers/dccons.cpp b/src/mame/drivers/dccons.cpp
index c227091bd22..3178e75574a 100644
--- a/src/mame/drivers/dccons.cpp
+++ b/src/mame/drivers/dccons.cpp
@@ -380,7 +380,7 @@ WRITE8_MEMBER(dc_cons_state::dc_flash_w)
void dc_cons_state::dc_map(address_map &map)
{
map(0x00000000, 0x001fffff).rom().nopw(); // BIOS
- map(0x00200000, 0x0021ffff).rom().region("dcflash", 0);//AM_READWRITE8(dc_flash_r,dc_flash_w, 0xffffffffffffffffU)
+ map(0x00200000, 0x0021ffff).rom().region("dcflash", 0);//.rw(FUNC(dc_cons_state::dc_flash_r), FUNC(dc_cons_state::dc_flash_w));
map(0x005f6800, 0x005f69ff).rw(FUNC(dc_cons_state::dc_sysctrl_r), FUNC(dc_cons_state::dc_sysctrl_w));
map(0x005f6c00, 0x005f6cff).m(m_maple, FUNC(maple_dc_device::amap));
map(0x005f7000, 0x005f701f).rw(m_ata, FUNC(ata_interface_device::cs1_r), FUNC(ata_interface_device::cs1_w)).umask64(0x0000ffff0000ffff);
@@ -393,11 +393,11 @@ void dc_cons_state::dc_map(address_map &map)
map(0x00700000, 0x00707fff).rw(FUNC(dc_cons_state::dc_aica_reg_r), FUNC(dc_cons_state::dc_aica_reg_w));
map(0x00710000, 0x0071000f).mirror(0x02000000).rw("aicartc", FUNC(aicartc_device::read), FUNC(aicartc_device::write)).umask64(0x0000ffff0000ffff);
map(0x00800000, 0x009fffff).rw(FUNC(dc_cons_state::soundram_r), FUNC(dc_cons_state::soundram_w));
-// AM_RANGE(0x01000000, 0x01ffffff) G2 Ext Device #1
-// AM_RANGE(0x02700000, 0x02707fff) AICA reg mirror
-// AM_RANGE(0x02800000, 0x02ffffff) AICA wave mem mirror
+// map(0x01000000, 0x01ffffff) G2 Ext Device #1
+// map(0x02700000, 0x02707fff) AICA reg mirror
+// map(0x02800000, 0x02ffffff) AICA wave mem mirror
-// AM_RANGE(0x03000000, 0x03ffffff) G2 Ext Device #2
+// map(0x03000000, 0x03ffffff) G2 Ext Device #2
/* Area 1 */
map(0x04000000, 0x04ffffff).ram().share("dc_texture_ram"); // texture memory 64 bit access
@@ -418,7 +418,7 @@ void dc_cons_state::dc_map(address_map &map)
map(0x12800000, 0x12ffffff).w(m_powervr2, FUNC(powervr2_device::ta_fifo_yuv_w));
map(0x13000000, 0x137fffff).w(m_powervr2, FUNC(powervr2_device::ta_texture_directpath1_w)).mirror(0x00800000); // access to texture / framebuffer memory (either 32-bit or 64-bit area depending on SB_LMMODE1 register - cannot be written directly, only through dma / store queue
-// AM_RANGE(0x14000000, 0x17ffffff) G2 Ext Device #3
+// map(0x14000000, 0x17ffffff) G2 Ext Device #3
map(0x8c000000, 0x8cffffff).ram().share("dc_ram"); // another RAM mirror
@@ -628,41 +628,13 @@ void dc_cons_state::dc(machine_config &config)
MAPLE_DC(config, m_maple, 0, m_maincpu);
m_maple->irq_callback().set(FUNC(dc_state::maple_irq));
dc_controller_device &dcctrl0(DC_CONTROLLER(config, "dcctrl0", 0, m_maple, 0));
- dcctrl0.set_port_tag<0>("P1:0");
- dcctrl0.set_port_tag<1>("P1:1");
- dcctrl0.set_port_tag<2>("P1:A0");
- dcctrl0.set_port_tag<3>("P1:A1");
- dcctrl0.set_port_tag<4>("P1:A2");
- dcctrl0.set_port_tag<5>("P1:A3");
- dcctrl0.set_port_tag<6>("P1:A4");
- dcctrl0.set_port_tag<7>("P1:A5");
+ dcctrl0.set_port_tags("P1:0", "P1:1", "P1:A0", "P1:A1", "P1:A2", "P1:A3", "P1:A4", "P1:A5");
dc_controller_device &dcctrl1(DC_CONTROLLER(config, "dcctrl1", 0, m_maple, 1));
- dcctrl1.set_port_tag<0>("P2:0");
- dcctrl1.set_port_tag<1>("P2:1");
- dcctrl1.set_port_tag<2>("P2:A0");
- dcctrl1.set_port_tag<3>("P2:A1");
- dcctrl1.set_port_tag<4>("P2:A2");
- dcctrl1.set_port_tag<5>("P2:A3");
- dcctrl1.set_port_tag<6>("P2:A4");
- dcctrl1.set_port_tag<7>("P2:A5");
+ dcctrl1.set_port_tags("P2:0", "P2:1", "P2:A0", "P2:A1", "P2:A2", "P2:A3", "P2:A4", "P2:A5");
dc_controller_device &dcctrl2(DC_CONTROLLER(config, "dcctrl2", 0, m_maple, 2));
- dcctrl2.set_port_tag<0>("P3:0");
- dcctrl2.set_port_tag<1>("P3:1");
- dcctrl2.set_port_tag<2>("P3:A0");
- dcctrl2.set_port_tag<3>("P3:A1");
- dcctrl2.set_port_tag<4>("P3:A2");
- dcctrl2.set_port_tag<5>("P3:A3");
- dcctrl2.set_port_tag<6>("P3:A4");
- dcctrl2.set_port_tag<7>("P3:A5");
+ dcctrl2.set_port_tags("P3:0", "P3:1", "P3:A0", "P3:A1", "P3:A2", "P3:A3", "P3:A4", "P3:A5");
dc_controller_device &dcctrl3(DC_CONTROLLER(config, "dcctrl3", 0, m_maple, 3));
- dcctrl3.set_port_tag<0>("P4:0");
- dcctrl3.set_port_tag<1>("P4:1");
- dcctrl3.set_port_tag<2>("P4:A0");
- dcctrl3.set_port_tag<3>("P4:A1");
- dcctrl3.set_port_tag<4>("P4:A2");
- dcctrl3.set_port_tag<5>("P4:A3");
- dcctrl3.set_port_tag<6>("P4:A4");
- dcctrl3.set_port_tag<7>("P4:A5");
+ dcctrl3.set_port_tags("P4:0", "P4:1", "P4:A0", "P4:A1", "P4:A2", "P4:A3", "P4:A4", "P4:A5");
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
diff --git a/src/mame/drivers/dday.cpp b/src/mame/drivers/dday.cpp
index 7a061fc3215..2f7bf9fadab 100644
--- a/src/mame/drivers/dday.cpp
+++ b/src/mame/drivers/dday.cpp
@@ -35,15 +35,15 @@ read:
write:
4000 Search light image and flip
-6400 AY8910 #1 Control Port
-6401 AY8910 #1 Write Port
-6800 AY8910 #2 Control Port
-6801 AY8910 #2 Write Port
+6400 AY8912 #1 Control Port
+6401 AY8912 #1 Write Port
+6800 AY8912 #2 Control Port
+6801 AY8912 #2 Write Port
7800 Bit 0 - Coin Counter 1
Bit 1 - Coin Counter 2
Bit 2 - ??? Pulsated when the player is hit
Bit 3 - ??? Seems to be unused
- Bit 4 - Tied to AY8910 RST. Used to turn off sound
+ Bit 4 - Tied to AY8912 RST. Used to turn off sound
Bit 5 - ??? Seem to be always on
Bit 6 - Search light enable
Bit 7 - ???
@@ -67,8 +67,8 @@ void dday_state::dday_map(address_map &map)
map(0x5800, 0x5bff).ram().w(FUNC(dday_state::dday_bgvideoram_w)).share("bgvideoram");
map(0x5c00, 0x5fff).rw(FUNC(dday_state::dday_colorram_r), FUNC(dday_state::dday_colorram_w)).share("colorram");
map(0x6000, 0x63ff).ram();
- map(0x6400, 0x6401).mirror(0x000e).w(m_ay1, FUNC(ay8910_device::address_data_w));
- map(0x6800, 0x6801).w("ay2", FUNC(ay8910_device::address_data_w));
+ map(0x6400, 0x6401).mirror(0x000e).w(m_ay1, FUNC(ay8912_device::address_data_w));
+ map(0x6800, 0x6801).w("ay2", FUNC(ay8912_device::address_data_w));
map(0x6c00, 0x6c00).portr("BUTTONS");
map(0x7000, 0x7000).portr("DSW0");
map(0x7400, 0x7400).portr("DSW1");
@@ -277,8 +277,8 @@ void dday_state::dday(machine_config &config)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- AY8910(config, m_ay1, 1000000).add_route(ALL_OUTPUTS, "mono", 0.25);
- AY8910(config, "ay2", 1000000).add_route(ALL_OUTPUTS, "mono", 0.25);
+ AY8912(config, m_ay1, 1000000).add_route(ALL_OUTPUTS, "mono", 0.25);
+ AY8912(config, "ay2", 1000000).add_route(ALL_OUTPUTS, "mono", 0.25);
}
diff --git a/src/mame/drivers/ddenlovr.cpp b/src/mame/drivers/ddenlovr.cpp
index 3f5f3bc44a2..848056549a1 100644
--- a/src/mame/drivers/ddenlovr.cpp
+++ b/src/mame/drivers/ddenlovr.cpp
@@ -1945,7 +1945,7 @@ void ddenlovr_state::quiz365_map(address_map &map)
map(0x200c02, 0x200c03).r(FUNC(ddenlovr_state::quiz365_protection_r)); // Protection
map(0x200e0a, 0x200e0d).w(FUNC(ddenlovr_state::quiz365_protection_w)); // Protection
-// map(0x201000, 0x2017ff) AM_WRITEONLY // ?
+// map(0x201000, 0x2017ff).writeonly(); // ?
map(0x300201, 0x300201).w(FUNC(ddenlovr_state::ddenlovr_select2_w));
map(0x300203, 0x300203).w(FUNC(ddenlovr_state::quiz365_coincounter_w)); // Coin Counters + more stuff written on startup
@@ -1999,7 +1999,7 @@ void ddenlovr_state::ddenlovj_map(address_map &map)
map(0x000000, 0x07ffff).rom(); // ROM
map(0x200000, 0x2003ff).w(FUNC(ddenlovr_state::rongrong_palette_w)).umask16(0x00ff);
-// map(0x201000, 0x2017ff) AM_WRITEONLY // ? B0 on startup, then 00
+// map(0x201000, 0x2017ff).writeonly(); // ? B0 on startup, then 00
map(0x300040, 0x300047).w(FUNC(ddenlovr_state::ddenlovr_palette_base_w)).umask16(0x00ff);
map(0x300048, 0x30004f).w(FUNC(ddenlovr_state::ddenlovr_palette_mask_w)).umask16(0x00ff);
@@ -2058,7 +2058,7 @@ void ddenlovr_state::ddenlovrk_map(address_map &map)
map(0x200000, 0x200001).rw(FUNC(ddenlovr_state::ddenlovrk_protection2_r), FUNC(ddenlovr_state::ddenlovrk_protection2_w)).share("protection2");
map(0xd00000, 0xd003ff).w(FUNC(ddenlovr_state::rongrong_palette_w)).umask16(0x00ff);
-// map(0xd01000, 0xd017ff) AM_RAM // ? B0 on startup, then 00
+// map(0xd01000, 0xd017ff).ram(); // ? B0 on startup, then 00
map(0xe00040, 0xe00047).w(FUNC(ddenlovr_state::ddenlovr_palette_base_w)).umask16(0x00ff);
map(0xe00048, 0xe0004f).w(FUNC(ddenlovr_state::ddenlovr_palette_mask_w)).umask16(0x00ff);
@@ -2094,7 +2094,7 @@ void ddenlovr_state::ddenlovr_map(address_map &map)
map(0x300001, 0x300001).w(FUNC(ddenlovr_state::ddenlovr_oki_bank_w));
map(0xd00000, 0xd003ff).w(FUNC(ddenlovr_state::rongrong_palette_w)).umask16(0x00ff);
-// map(0xd01000, 0xd017ff) AM_RAM // ? B0 on startup, then 00
+// map(0xd01000, 0xd017ff).ram(); // ? B0 on startup, then 00
map(0xe00040, 0xe00047).w(FUNC(ddenlovr_state::ddenlovr_palette_base_w)).umask16(0x00ff);
map(0xe00048, 0xe0004f).w(FUNC(ddenlovr_state::ddenlovr_palette_mask_w)).umask16(0x00ff);
@@ -2824,14 +2824,14 @@ void ddenlovr_state::kotbinyo_portmap(address_map &map)
map(0x83, 0x84).r(FUNC(ddenlovr_state::hanakanz_gfxrom_r));
map(0xa0, 0xa1).w("ym2413", FUNC(ym2413_device::write));
map(0xb0, 0xb0).portr("SYSTEM");
-// map(0xb1, 0xb2) AM_READ(hanakanz_keyb_r)
+// map(0xb1, 0xb2).r(FUNC(ddenlovr_state::hanakanz_keyb_r));
map(0xb1, 0xb1).portr("KEYB0");
map(0xb2, 0xb2).portr("KEYB1");
map(0xb3, 0xb3).w(FUNC(ddenlovr_state::hanakanz_coincounter_w));
-// map(0xb4, 0xb4) AM_WRITE(hanakanz_keyb_w)
+// map(0xb4, 0xb4).w(FUNC(ddenlovr_state::hanakanz_keyb_w));
map(0xb6, 0xb6).r(FUNC(ddenlovr_state::hanakanz_rand_r));
map(0xc0, 0xc0).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
-// map(0xe0, 0xef) AM_DEVREADWRITE("rtc", msm6242_device, read, write)
+// map(0xe0, 0xef).rw("rtc", FUNC(msm6242_device::read), FUNC(msm6242_device::write));
}
@@ -2849,14 +2849,14 @@ void ddenlovr_state::kotbinsp_portmap(address_map &map)
map(0x83, 0x84).r(FUNC(ddenlovr_state::hanakanz_gfxrom_r));
map(0xa0, 0xa1).w("ym2413", FUNC(ym2413_device::write));
map(0x90, 0x90).portr("SYSTEM");
-// map(0x91, 0x91) AM_READ(hanakanz_keyb_r)
+// map(0x91, 0x91).r(FUNC(ddenlovr_state::hanakanz_keyb_r));
map(0x91, 0x91).portr("KEYB0");
map(0x92, 0x92).portr("KEYB1");
map(0x93, 0x93).w(FUNC(ddenlovr_state::hanakanz_coincounter_w));
-// map(0x94, 0x94) AM_WRITE(hanakanz_keyb_w)
+// map(0x94, 0x94).w(FUNC(ddenlovr_state::hanakanz_keyb_w));
map(0x96, 0x96).r(FUNC(ddenlovr_state::hanakanz_rand_r));
map(0xc0, 0xc0).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
-// map(0xe0, 0xef) AM_DEVREADWRITE("rtc", msm6242_device, read, write)
+// map(0xe0, 0xef).rw("rtc", FUNC(msm6242_device::read), FUNC(msm6242_device::write));
}
diff --git a/src/mame/drivers/dec8.cpp b/src/mame/drivers/dec8.cpp
index dbc7d5f5d02..00fa911bceb 100644
--- a/src/mame/drivers/dec8.cpp
+++ b/src/mame/drivers/dec8.cpp
@@ -2119,13 +2119,13 @@ void dec8_state::garyoret(machine_config &config)
void dec8_state::ghostb(machine_config &config)
{
/* basic machine hardware */
- HD6309E(config, m_maincpu, 3000000); /* HD63C09EP */
+ HD6309E(config, m_maincpu, XTAL(12'000'000) / 4); /* HD63C09EP, clock verified */
m_maincpu->set_addrmap(AS_PROGRAM, &dec8_state::meikyuh_map);
- DECO_222(config, m_audiocpu, 1500000);
+ DECO_222(config, m_audiocpu, XTAL(12'000'000) / 8); /* also seen with stock M6502, clock verified */
m_audiocpu->set_addrmap(AS_PROGRAM, &dec8_state::dec8_s_map); /* NMIs are caused by the main CPU */
- I8751(config, m_mcu, 3000000*4);
+ I8751(config, m_mcu, XTAL(8'000'000)); /* 8.0MHz OSC next to MCU - clock verified */
m_mcu->port_in_cb<0>().set(FUNC(dec8_state::i8751_port0_r));
m_mcu->port_out_cb<0>().set(FUNC(dec8_state::i8751_port0_w));
m_mcu->port_in_cb<1>().set(FUNC(dec8_state::i8751_port1_r));
@@ -2164,13 +2164,13 @@ void dec8_state::ghostb(machine_config &config)
GENERIC_LATCH_8(config, m_soundlatch);
- ym2203_device &ym1(YM2203(config, "ym1", 1500000));
+ ym2203_device &ym1(YM2203(config, "ym1", XTAL(12'000'000) / 8)); // clock verified
ym1.add_route(0, "mono", 0.23);
ym1.add_route(1, "mono", 0.23);
ym1.add_route(2, "mono", 0.23);
ym1.add_route(3, "mono", 0.20);
- ym3812_device &ym2(YM3812(config, "ym2", 3000000));
+ ym3812_device &ym2(YM3812(config, "ym2", XTAL(12'000'000) / 4)); // clock verified
ym2.irq_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE);
ym2.add_route(ALL_OUTPUTS, "mono", 0.70);
}
@@ -2411,8 +2411,8 @@ ROM_START( lastmisn )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "last_mission_dl05-.5h", 0x8000, 0x8000, CRC(1a5df8c0) SHA1(83d36b1d5fb87f50c44f3110804d6bbdbbc0da99) )
- ROM_REGION( 0x1000, "mcu", 0 ) /* ID8751H MCU */
- ROM_LOAD( "last_mission_dl00-e.18a", 0x0000, 0x1000, CRC(6be57487) SHA1(f9efd7c4ad2802c1116045d2d8f6409cdef5f39c) BAD_DUMP ) /* not verified to be the same data as the "A" MCU dump */
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
+ ROM_LOAD( "last_mission_dl00-e.18a", 0x0000, 0x1000, CRC(e97481c6) SHA1(5c6b0e3585712c03b1b657c814c502c396ffa333) BAD_DUMP ) /* not verified to be the same data as the "A" MCU dump */
ROM_REGION( 0x08000, "gfx1", 0 ) /* characters */
ROM_LOAD( "last_mission_dl01-.2a", 0x00000, 0x2000, CRC(f3787a5d) SHA1(3701df42cb2aca951963703e72c6c7b272eed82b) )
@@ -2447,8 +2447,8 @@ ROM_START( lastmisnu6 )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "last_mission_dl05-.5h", 0x8000, 0x8000, CRC(1a5df8c0) SHA1(83d36b1d5fb87f50c44f3110804d6bbdbbc0da99) )
- ROM_REGION( 0x1000, "mcu", 0 ) /* ID8751H MCU */
- ROM_LOAD( "last_mission_dl00-a.18a", 0x0000, 0x1000, CRC(6be57487) SHA1(f9efd7c4ad2802c1116045d2d8f6409cdef5f39c) ) /* Hand written "A", some MCUs are known to be labeled DL00-7, it's not verified to be the same data */
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
+ ROM_LOAD( "last_mission_dl00-a.18a", 0x0000, 0x1000, CRC(e97481c6) SHA1(5c6b0e3585712c03b1b657c814c502c396ffa333) ) /* Hand written "A", some MCUs are known to be labeled DL00-7, it's not verified to be the same data */
ROM_REGION( 0x08000, "gfx1", 0 ) /* characters */
ROM_LOAD( "last_mission_dl01-.2a", 0x00000, 0x2000, CRC(f3787a5d) SHA1(3701df42cb2aca951963703e72c6c7b272eed82b) )
@@ -2483,8 +2483,8 @@ ROM_START( lastmisnu5 )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "last_mission_dl05-.5h", 0x8000, 0x8000, CRC(1a5df8c0) SHA1(83d36b1d5fb87f50c44f3110804d6bbdbbc0da99) )
- ROM_REGION( 0x1000, "mcu", 0 ) /* ID8751H MCU */
- ROM_LOAD( "last_mission_dl00-a.18a", 0x0000, 0x1000, CRC(6be57487) SHA1(f9efd7c4ad2802c1116045d2d8f6409cdef5f39c) ) /* Hand written "A", some MCUs are known to be labeled DL00-7, it's not verified to be the same data */
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
+ ROM_LOAD( "last_mission_dl00-a.18a", 0x0000, 0x1000, CRC(e97481c6) SHA1(5c6b0e3585712c03b1b657c814c502c396ffa333) ) /* Hand written "A", some MCUs are known to be labeled DL00-7, it's not verified to be the same data */
ROM_REGION( 0x08000, "gfx1", 0 ) /* characters */
ROM_LOAD( "last_mission_dl01-.2a", 0x00000, 0x2000, CRC(f3787a5d) SHA1(3701df42cb2aca951963703e72c6c7b272eed82b) )
@@ -2600,7 +2600,7 @@ ROM_START( breywood )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "dj07-1.5h", 0x8000, 0x8000, CRC(4a471c38) SHA1(963ed7b6afeefdfc2cf0d65b0998f973330e6495) )
- ROM_REGION( 0x1000, "mcu", 0 ) /* ID8751H MCU */
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
ROM_LOAD( "dj.18a", 0x0000, 0x1000, CRC(4cb20332) SHA1(e0bbba7be22e7bcff82fb0ae441410e559ec4566) )
ROM_REGION( 0x08000, "gfx1", 0 ) /* characters */
@@ -2636,7 +2636,7 @@ ROM_START( gondo )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "dt-05.256", 0x8000, 0x8000, CRC(ec08aa29) SHA1(ce83974ae095d9518d1ebf9f7e712f0cbc2c1b42) )
- ROM_REGION( 0x1000, "mcu", 0 ) /* ID8751H MCU */
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
ROM_LOAD( "dt-a.b1", 0x0000, 0x1000, CRC(03abceeb) SHA1(a16b779d7cea1c1437f85fa6b6e08894a46a5674) )
ROM_REGION( 0x08000, "gfx1", 0 ) /* characters */
@@ -2680,7 +2680,7 @@ ROM_START( makyosen )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "ds05.h5", 0x8000, 0x8000, CRC(e6e28ca9) SHA1(3b1f8219331db1910bfb428f8964f8fc1063df6f) )
- ROM_REGION( 0x1000, "mcu", 0 ) /* ID8751H MCU */
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
ROM_LOAD( "ds-a.b1", 0x0000, 0x1000, CRC(08f36e35) SHA1(e8913da71704a89fad41d5bfba45682119166681))
ROM_REGION( 0x08000, "gfx1", 0 ) /* characters */
@@ -2779,8 +2779,8 @@ ROM_START( ghostb )
ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */
ROM_LOAD( "dz06.5f", 0x8000, 0x8000, CRC(798f56df) SHA1(aee33cd0c102015114e17f6cb98945e7cc806f55) )
- ROM_REGION( 0x1000, "mcu", 0 ) /* ID8751H (fake) MCU */
- ROM_LOAD( "dz-1.1b", 0x0000, 0x1000, BAD_DUMP CRC(18b7e1e6) SHA1(46b6d914ecee5e743ac805be1545ca44fb016d7d) ) /* Verified label, but is it different the other DZ */
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
+ ROM_LOAD( "dz-1.1b", 0x0000, 0x1000, CRC(9f5f3cb5) SHA1(5ef2b8a5411dde28277d9364db014763019ecf15) )
ROM_REGION( 0x08000, "gfx1", 0 ) /* characters */
ROM_LOAD( "dz00.16b", 0x00000, 0x08000, CRC(992b4f31) SHA1(a9f255286193ccc261a9b6983aabf3c76ebe5ce5) )
@@ -2817,8 +2817,8 @@ ROM_START( ghostb2a )
ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */
ROM_LOAD( "dz06.5f", 0x8000, 0x8000, CRC(798f56df) SHA1(aee33cd0c102015114e17f6cb98945e7cc806f55) )
- ROM_REGION( 0x1000, "mcu", 0 ) /* ID8751H (fake) MCU */
- ROM_LOAD( "dz.1b", 0x0000, 0x1000, BAD_DUMP CRC(18b7e1e6) SHA1(46b6d914ecee5e743ac805be1545ca44fb016d7d) )
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
+ ROM_LOAD( "dz-1.1b", 0x0000, 0x1000, CRC(9f5f3cb5) SHA1(5ef2b8a5411dde28277d9364db014763019ecf15) )
ROM_REGION( 0x08000, "gfx1", 0 ) /* characters */
ROM_LOAD( "dz00.16b", 0x00000, 0x08000, CRC(992b4f31) SHA1(a9f255286193ccc261a9b6983aabf3c76ebe5ce5) )
@@ -2855,8 +2855,8 @@ ROM_START( ghostb3 )
ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */
ROM_LOAD( "dz06.5f", 0x8000, 0x8000, CRC(798f56df) SHA1(aee33cd0c102015114e17f6cb98945e7cc806f55) )
- ROM_REGION( 0x1000, "mcu", 0 ) /* ID8751H (fake) MCU */
- ROM_LOAD( "dz.1b", 0x0000, 0x1000, BAD_DUMP CRC(18b7e1e6) SHA1(46b6d914ecee5e743ac805be1545ca44fb016d7d) )
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
+ ROM_LOAD( "dz-1.1b", 0x0000, 0x1000, CRC(9f5f3cb5) SHA1(5ef2b8a5411dde28277d9364db014763019ecf15) )
ROM_REGION( 0x08000, "gfx1", 0 ) /* characters */
ROM_LOAD( "dz00.16b", 0x00000, 0x08000, CRC(992b4f31) SHA1(a9f255286193ccc261a9b6983aabf3c76ebe5ce5) )
@@ -2893,8 +2893,8 @@ ROM_START( ghostb3a )
ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */
ROM_LOAD( "dz06.5f", 0x8000, 0x8000, CRC(798f56df) SHA1(aee33cd0c102015114e17f6cb98945e7cc806f55) )
- ROM_REGION( 0x1000, "mcu", 0 ) /* ID8751H (fake) MCU */
- ROM_LOAD( "dz.1b", 0x0000, 0x1000, BAD_DUMP CRC(18b7e1e6) SHA1(46b6d914ecee5e743ac805be1545ca44fb016d7d) )
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
+ ROM_LOAD( "dz-1.1b", 0x0000, 0x1000, CRC(9f5f3cb5) SHA1(5ef2b8a5411dde28277d9364db014763019ecf15) )
ROM_REGION( 0x08000, "gfx1", 0 ) /* characters */
ROM_LOAD( "dz00.16b", 0x00000, 0x08000, CRC(992b4f31) SHA1(a9f255286193ccc261a9b6983aabf3c76ebe5ce5) )
@@ -3015,7 +3015,7 @@ ROM_START( meikyuh )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "dw05.5f", 0x8000, 0x8000, CRC(c28c4d82) SHA1(ad88506bcbc9763e39d6e6bb25ef2bd6aa929f30) )
- ROM_REGION( 0x1000, "mcu", 0 ) /* ID8751H MCU */
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
ROM_LOAD( "dw.1b", 0x0000, 0x1000, CRC(28e9ced9) SHA1(a3d6dfa1e44fa93c0f30fa0a88b6dd3d6e5c4dda) )
ROM_REGION( 0x08000, "gfx1", 0 ) /* characters */
@@ -3110,7 +3110,7 @@ ROM_START( meikyuha )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "27256.5f", 0x8000, 0x8000, CRC(c28c4d82) SHA1(ad88506bcbc9763e39d6e6bb25ef2bd6aa929f30) )
- ROM_REGION( 0x1000, "mcu", 0 ) /* ID8751H MCU */
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
ROM_LOAD( "dw.1b", 0x0000, 0x1000, CRC(28e9ced9) SHA1(a3d6dfa1e44fa93c0f30fa0a88b6dd3d6e5c4dda) )
ROM_REGION( 0x08000, "gfx1", 0 ) /* characters */
@@ -3196,7 +3196,7 @@ ROM_START( csilver )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "dx05.3f", 0x00000, 0x10000, CRC(eb32cf25) SHA1(9390c88033259c65eb15320e31f5d696970987cc) )
- ROM_REGION( 0x1000, "mcu", 0 ) /* ID8751H MCU */
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
// 017F: B4 4C 0D : cjne a,#$4C,$018F (ID code 0x4c = World version)
ROM_LOAD( "id8751h.mcu", 0x0000, 0x1000, CRC(ca663965) SHA1(a5fb7afdfd324761bde4bb90ba12efc9954627af) ) // dx-8.19a ?
@@ -3234,7 +3234,7 @@ ROM_START( csilverj )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "dx05.a6", 0x00000, 0x10000, CRC(eb32cf25) SHA1(9390c88033259c65eb15320e31f5d696970987cc) )
- ROM_REGION( 0x1000, "mcu", 0 ) /* ID8751H MCU */
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
ROM_LOAD( "id8751h.mcu", 0x0000, 0x1000, NO_DUMP )
ROM_REGION( 0x08000, "gfx1", 0 ) /* characters */
@@ -3272,7 +3272,7 @@ ROM_START( csilverja ) // DE-0250-3 + DE-0251-2
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "dx05.3f", 0x00000, 0x10000, CRC(eb32cf25) SHA1(9390c88033259c65eb15320e31f5d696970987cc) )
- ROM_REGION( 0x1000, "mcu", 0 ) /* ID8751H MCU */
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
ROM_LOAD( "id8751h.mcu", 0x0000, 0x1000, NO_DUMP )
ROM_REGION( 0x08000, "gfx1", 0 ) /* characters */
@@ -3422,7 +3422,7 @@ ROM_START( srdarwin )
ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */
ROM_LOAD( "dy04.d7", 0x8000, 0x8000, CRC(2ae3591c) SHA1(f21b06d84e2c3d3895be0812024641fd006e45cf) )
- ROM_REGION( 0x1000, "mcu", 0 ) /* ID8751H MCU */
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
// 0160: B4 6B 0D : cjne a,#$6B,$0170 (ID code 0x6b = World version)
ROM_LOAD( "id8751h.mcu", 0x0000, 0x1000, CRC(11cd6ca4) SHA1(ec70f84228e37f9fc1bda85fa52a009f61c500b2) )
@@ -3460,7 +3460,7 @@ ROM_START( srdarwinj )
ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */
ROM_LOAD( "dy04.d7", 0x8000, 0x8000, CRC(2ae3591c) SHA1(f21b06d84e2c3d3895be0812024641fd006e45cf) )
- ROM_REGION( 0x1000, "mcu", 0 ) /* ID8751H MCU */
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
ROM_LOAD( "id8751h_japan.mcu", 0x0000, 0x1000, BAD_DUMP CRC(4ac2ca9d) SHA1(6e07788df9fcf4248a9d3e87b8c5f54776bd269e) ) // hand-modified copy of world version to correct region + coinage
ROM_REGION( 0x08000, "gfx1", 0 ) /* characters */
@@ -3615,8 +3615,8 @@ GAME( 1987, makyosen, gondo, gondo, gondo, dec8_state, init_dec8,
GAME( 1987, garyoret, 0, garyoret, garyoret, dec8_state, init_dec8, ROT0, "Data East Corporation", "Garyo Retsuden (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, ghostb, 0, ghostb, ghostb, dec8_state, init_dec8, ROT0, "Data East USA", "The Real Ghostbusters (US 2 Players, revision 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, ghostb2a, ghostb, ghostb, ghostb2a, dec8_state, init_dec8, ROT0, "Data East USA", "The Real Ghostbusters (US 2 Players)", MACHINE_SUPPORTS_SAVE )
-GAME( 1987, ghostb3, ghostb, ghostb, ghostb3, dec8_state, init_dec8, ROT0, "Data East USA", "The Real Ghostbusters (US 3 Players)", MACHINE_SUPPORTS_SAVE )
-GAME( 1987, ghostb3a, ghostb, ghostb, ghostb3, dec8_state, init_dec8, ROT0, "Data East USA", "The Real Ghostbusters (US 3 Players, revision ?)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // ROMs confirmed working on PCB, confirmed problem with the fake MCU ROM
+GAME( 1987, ghostb3, ghostb, ghostb, ghostb3, dec8_state, init_dec8, ROT0, "Data East USA", "The Real Ghostbusters (US 3 Players, revision 3B?)", MACHINE_SUPPORTS_SAVE )
+GAME( 1987, ghostb3a, ghostb, ghostb, ghostb3, dec8_state, init_dec8, ROT0, "Data East USA", "The Real Ghostbusters (US 3 Players, revision 2)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // ROMs confirmed working on PCB - stalls in demo mode
GAME( 1987, meikyuh, ghostb, meikyuh, meikyuh, dec8_state, init_dec8, ROT0, "Data East Corporation", "Meikyuu Hunter G (Japan, set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, meikyuha, ghostb, meikyuh, meikyuh, dec8_state, init_dec8, ROT0, "Data East Corporation", "Meikyuu Hunter G (Japan, set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, csilver, 0, csilver, csilver, dec8_state, init_csilver, ROT0, "Data East Corporation", "Captain Silver (World)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/deco_ld.cpp b/src/mame/drivers/deco_ld.cpp
index f8adb56d08d..eaf854cb359 100644
--- a/src/mame/drivers/deco_ld.cpp
+++ b/src/mame/drivers/deco_ld.cpp
@@ -278,7 +278,7 @@ void deco_ld_state::rblaster_map(address_map &map)
map(0x1003, 0x1003).portr("IN1");
map(0x1004, 0x1004).r(m_soundlatch2, FUNC(generic_latch_8_device::read)).w(FUNC(deco_ld_state::decold_sound_cmd_w));
map(0x1005, 0x1005).r(FUNC(deco_ld_state::sound_status_r));
- //AM_RANGE(0x1006, 0x1007) AM_DEVREADWRITE("acia", acia6850_device, read, write)
+ //map(0x1006, 0x1007).rw("acia", FUNC(acia6850_device::read), FUNC(acia6850_device::write));
map(0x1006, 0x1006).r(FUNC(deco_ld_state::acia_status_hack_r));
map(0x1007, 0x1007).rw(m_laserdisc, FUNC(sony_ldp1000_device::status_r), FUNC(sony_ldp1000_device::command_w));
map(0x1800, 0x1fff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette");
diff --git a/src/mame/drivers/dectalk.cpp b/src/mame/drivers/dectalk.cpp
index 1f406494e97..976fe06f711 100644
--- a/src/mame/drivers/dectalk.cpp
+++ b/src/mame/drivers/dectalk.cpp
@@ -816,7 +816,7 @@ void dectalk_state::tms32010_io(address_map &map)
{
map(0, 0).w(FUNC(dectalk_state::spc_latch_outfifo_error_stats)); // *set* the outfifo_status_r semaphore, and also latch the error bit at D0.
map(1, 1).rw(FUNC(dectalk_state::spc_infifo_data_r), FUNC(dectalk_state::spc_outfifo_data_w)); //read from input fifo, write to sound fifo
- //AM_RANGE(8, 8) //the newer firmware seems to want something mapped here?
+ //map(8, 8) //the newer firmware seems to want something mapped here?
}
/******************************************************************************
diff --git a/src/mame/drivers/deshoros.cpp b/src/mame/drivers/deshoros.cpp
index d492632ee0e..74c5f932b71 100644
--- a/src/mame/drivers/deshoros.cpp
+++ b/src/mame/drivers/deshoros.cpp
@@ -182,12 +182,12 @@ void destiny_state::main_map(address_map &map)
map(0x9003, 0x9003).portr("KEY1");
map(0x9004, 0x9004).portr("KEY2");
map(0x9005, 0x9005).portr("DIPSW").w(FUNC(destiny_state::out_w));
-// AM_RANGE(0x9006, 0x9006) AM_NOP // printer motor on
-// AM_RANGE(0x9007, 0x9007) AM_NOP // printer data
+// map(0x9006, 0x9006).noprw(); // printer motor on
+// map(0x9007, 0x9007).noprw(); // printer data
map(0x900a, 0x900b).w(FUNC(destiny_state::sound_w));
map(0x900c, 0x900c).w(FUNC(destiny_state::bank_select_w));
-// AM_RANGE(0x900d, 0x900d) AM_NOP // printer motor off
-// AM_RANGE(0x900e, 0x900e) AM_NOP // printer motor jam reset
+// map(0x900d, 0x900d).noprw(); // printer motor off
+// map(0x900e, 0x900e).noprw(); // printer motor jam reset
map(0xc000, 0xffff).rom();
}
diff --git a/src/mame/drivers/dg680.cpp b/src/mame/drivers/dg680.cpp
index 1e1386505bb..8a5ac909e96 100644
--- a/src/mame/drivers/dg680.cpp
+++ b/src/mame/drivers/dg680.cpp
@@ -191,9 +191,9 @@ void dg680_state::dg680_io(address_map &map)
map(0x00, 0x03).rw(m_pio, FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt));
map(0x04, 0x07).rw(m_ctc, FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
map(0x08, 0x08).rw(FUNC(dg680_state::port08_r), FUNC(dg680_state::port08_w)); //SWP Control and Status
- //AM_RANGE(0x09,0x09) parallel input port
+ //map(0x09,0x09) parallel input port
// Optional AM9519 Programmable Interrupt Controller (port c = data, port d = control)
- //AM_RANGE(0x0c,0x0d) AM_DEVREADWRITE("am9519", am9519_device, read, write)
+ //map(0x0c,0x0d).rw("am9519", FUNC(am9519_device::read), FUNC(am9519_device::write));
}
void dg680_state::machine_reset()
diff --git a/src/mame/drivers/digel804.cpp b/src/mame/drivers/digel804.cpp
index d117ce82dd3..e554c15e58f 100644
--- a/src/mame/drivers/digel804.cpp
+++ b/src/mame/drivers/digel804.cpp
@@ -473,10 +473,10 @@ void digel804_state::z80_mem_804_1_4(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x3fff).rom(); // 3f in mapper = rom J3
- //AM_RANGE(0x4000, 0x5fff) AM_RAM AM_SHARE("main_ram") // 6f in mapper = RAM D43 (6164)
- //AM_RANGE(0x6000, 0x7fff) AM_RAM AM_SHARE("main_ram") // 77 in mapper = RAM D44 (6164)
- //AM_RANGE(0x8000, 0x9fff) AM_RAM AM_SHARE("main_ram") // 7b in mapper = RAM D45 (6164)
- //AM_RANGE(0xa000, 0xbfff) AM_RAM AM_SHARE("main_ram") // 7d in mapper = RAM D46 (6164)
+ //map(0x4000, 0x5fff).ram().share("main_ram"); // 6f in mapper = RAM D43 (6164)
+ //map(0x6000, 0x7fff).ram().share("main_ram"); // 77 in mapper = RAM D44 (6164)
+ //map(0x8000, 0x9fff).ram().share("main_ram"); // 7b in mapper = RAM D45 (6164)
+ //map(0xa000, 0xbfff).ram().share("main_ram"); // 7d in mapper = RAM D46 (6164)
map(0x4000, 0xbfff).bankrw("bankedram");
// c000-cfff is open bus in mapper, 7f
map(0xd000, 0xd7ff).ram(); // 7e in mapper = RAM P3 (6116)
@@ -489,13 +489,13 @@ void ep804_state::z80_mem_804_1_2(address_map &map)
map.unmap_value_high();
map(0x0000, 0x1fff).rom(); // 3f in mapper = rom D41
map(0x2000, 0x3fff).rom(); // 5f in mapper = rom D42
- //AM_RANGE(0x4000, 0x5fff) AM_RAM AM_SHARE("main_ram") // 6f in mapper = RAM D43 (6164)
- //AM_RANGE(0x6000, 0x7fff) AM_RAM AM_SHARE("main_ram") // 77 in mapper = RAM D44 (6164)
- //AM_RANGE(0x8000, 0x9fff) AM_RAM AM_SHARE("main_ram") // 7b in mapper = RAM D45 (6164)
- //AM_RANGE(0xa000, 0xbfff) AM_RAM AM_SHARE("main_ram") // 7d in mapper = RAM D46 (6164)
+ //map(0x4000, 0x5fff).ram().share("main_ram"); // 6f in mapper = RAM D43 (6164)
+ //map(0x6000, 0x7fff).ram().share("main_ram"); // 77 in mapper = RAM D44 (6164)
+ //map(0x8000, 0x9fff).ram().share("main_ram"); // 7b in mapper = RAM D45 (6164)
+ //map(0xa000, 0xbfff).ram().share("main_ram"); // 7d in mapper = RAM D46 (6164)
map(0x4000, 0xbfff).bankrw("bankedram");
// c000-cfff is open bus in mapper, 7f
- //AM_RANGE(0xc000, 0xc7ff) AM_RAM // hack for now to test, since sometimes it writes to c3ff
+ //map(0xc000, 0xc7ff).ram(); // hack for now to test, since sometimes it writes to c3ff
map(0xd000, 0xd7ff).ram(); // 7e in mapper = RAM D47 (6116)
// d800-ffff is open bus in mapper, 7f
}
@@ -525,7 +525,7 @@ void digel804_state::z80_io_1_4(address_map &map)
map(0x85, 0x85).mirror(0x38).r(FUNC(digel804_state::acia_command_r)); // (ACIA command reg)
map(0x86, 0x86).mirror(0x38).w(FUNC(digel804_state::acia_control_w)); // (ACIA control reg)
map(0x87, 0x87).mirror(0x38).r(FUNC(digel804_state::acia_control_r)); // (ACIA control reg)
- //AM_RANGE(0x80,0x87) AM_MIRROR(0x38) AM_SHIFT(-1) AM_DEVREADWRITE("acia", mos6551_device, read, write) // this doesn't work since we lack an AM_SHIFT command
+ //map(0x80,0x87).mirror(0x38).shift(-1).rw("acia", FUNC(mos6551_device::read, FUNC(mos6551_device::write)); // this doesn't work since we lack a shift() command
}
@@ -553,7 +553,7 @@ void ep804_state::z80_io_1_2(address_map &map)
map(0x85, 0x85).mirror(0x38).r(FUNC(ep804_state::acia_command_r)); // (ACIA command reg)
map(0x86, 0x86).mirror(0x38).w(FUNC(ep804_state::acia_control_w)); // (ACIA control reg)
map(0x87, 0x87).mirror(0x38).r(FUNC(ep804_state::acia_control_r)); // (ACIA control reg)
- //AM_RANGE(0x80,0x87) AM_MIRROR(0x38) AM_SHIFT(-1) AM_DEVREADWRITE("acia", mos6551_device, read, write) // this doesn't work since we lack an AM_SHIFT command
+ //map(0x80,0x87).mirror(0x38).shift(-1).rw("acia", FUNC(mos6551_device::read, FUNC(mos6551_device::write)); // this doesn't work since we lack a shift() command
}
diff --git a/src/mame/drivers/dim68k.cpp b/src/mame/drivers/dim68k.cpp
index dc02ca984c6..eb0f6b87f43 100644
--- a/src/mame/drivers/dim68k.cpp
+++ b/src/mame/drivers/dim68k.cpp
@@ -213,7 +213,7 @@ void dim68k_state::dim68k_mem(address_map &map)
map(0x00ffcc00, 0x00ffcc1f).rw(FUNC(dim68k_state::dim68k_game_switches_r), FUNC(dim68k_state::dim68k_reset_timers_w));
map(0x00ffd000, 0x00ffd003).m("fdc", FUNC(upd765a_device::map)).umask16(0x00ff); // NEC uPD765A
map(0x00ffd004, 0x00ffd005).rw(FUNC(dim68k_state::dim68k_fdc_r), FUNC(dim68k_state::dim68k_fdc_w));
- //AM_RANGE(0x00ffd400, 0x00ffd403) emulation trap control
+ //map(0x00ffd400, 0x00ffd403) emulation trap control
map(0x00ffd800, 0x00ffd801).w(FUNC(dim68k_state::dim68k_printer_strobe_w));
map(0x00ffdc00, 0x00ffdc01).w(FUNC(dim68k_state::dim68k_banksw_w));
}
diff --git a/src/mame/drivers/diverboy.cpp b/src/mame/drivers/diverboy.cpp
index 304cacca37e..3d0376188af 100644
--- a/src/mame/drivers/diverboy.cpp
+++ b/src/mame/drivers/diverboy.cpp
@@ -175,12 +175,12 @@ void diverboy_state::diverboy_map(address_map &map)
map(0x180000, 0x180001).portr("P1_P2");
map(0x180002, 0x180003).portr("DSW");
map(0x180008, 0x180009).portr("COINS");
-// AM_RANGE(0x18000a, 0x18000b) AM_READNOP
-// AM_RANGE(0x18000c, 0x18000d) AM_WRITENOP
+// map(0x18000a, 0x18000b).nopr();
+// map(0x18000c, 0x18000d).nopw();
map(0x320000, 0x3207ff).writeonly(); /* ?? */
map(0x322000, 0x3227ff).writeonly(); /* ?? */
-// AM_RANGE(0x340000, 0x340001) AM_WRITENOP
-// AM_RANGE(0x340002, 0x340003) AM_WRITENOP
+// map(0x340000, 0x340001).nopw();
+// map(0x340002, 0x340003).nopw();
}
void diverboy_state::snd_map(address_map &map)
diff --git a/src/mame/drivers/dlair2.cpp b/src/mame/drivers/dlair2.cpp
index daf30d47ebb..0a06a7eff18 100644
--- a/src/mame/drivers/dlair2.cpp
+++ b/src/mame/drivers/dlair2.cpp
@@ -86,11 +86,11 @@ void dlair2_state::dlair2_map(address_map &map)
void dlair2_state::dlair2_io(address_map &map)
{
-// AM_RANGE(0x020, 0x020) ICR
-// AM_RANGE(0x042, 0x043) sound related
-// AM_RANGE(0x061, 0x061) sound related
-// AM_RANGE(0x200, 0x203) i/o, coin, eeprom
-// AM_RANGE(0x2f8, 0x2ff) COM2
+// map(0x020, 0x020) ICR
+// map(0x042, 0x043) sound related
+// map(0x061, 0x061) sound related
+// map(0x200, 0x203) i/o, coin, eeprom
+// map(0x2f8, 0x2ff) COM2
}
static INPUT_PORTS_START( dlair2 )
diff --git a/src/mame/drivers/dm7000.cpp b/src/mame/drivers/dm7000.cpp
index 4bde5a8ea1e..a7fdf980de0 100644
--- a/src/mame/drivers/dm7000.cpp
+++ b/src/mame/drivers/dm7000.cpp
@@ -244,7 +244,7 @@ void dm7000_state::dm7000_mem(address_map &map)
map(0x7f800000, 0x7ffdffff).rom().region("user2", 0);
map(0x7ffe0000, 0x7fffffff).rom().region("user1", 0);
- //AM_RANGE(0xfffe0000, 0xffffffff) AM_ROM AM_REGION("user1",0)
+ //map(0xfffe0000, 0xffffffff).rom().region("user1",0);
}
/* Input ports */
diff --git a/src/mame/drivers/dmax8000.cpp b/src/mame/drivers/dmax8000.cpp
index 5e029f6ab63..564b3685bd1 100644
--- a/src/mame/drivers/dmax8000.cpp
+++ b/src/mame/drivers/dmax8000.cpp
@@ -117,11 +117,11 @@ void dmax8000_state::dmax8000_io(address_map &map)
map(0x0c, 0x0f).rw("pio1", FUNC(z80pio_device::read), FUNC(z80pio_device::write)); // fdd controls
map(0x10, 0x13).rw("pio2", FUNC(z80pio_device::read), FUNC(z80pio_device::write)); // centronics & parallel ports
map(0x14, 0x17).w(FUNC(dmax8000_state::port14_w)); // control lines for the centronics & parallel ports
- //AM_RANGE(0x18, 0x19) AM_MIRROR(2) AM_DEVREADWRITE("am9511", am9512_device, read, write) // optional numeric coprocessor
- //AM_RANGE(0x1c, 0x1d) AM_MIRROR(2) // optional hard disk controller (1C=status, 1D=data)
+ //map(0x18, 0x19).mirror(2).rw("am9511", FUNC(am9512_device::read), FUNC(am9512_device::write)); // optional numeric coprocessor
+ //map(0x1c, 0x1d).mirror(2); // optional hard disk controller (1C=status, 1D=data)
map(0x20, 0x23).rw("dart2", FUNC(z80dart_device::ba_cd_r), FUNC(z80dart_device::ba_cd_w));
map(0x40, 0x40).w(FUNC(dmax8000_state::port40_w)); // memory bank control
- //AM_RANGE(0x60, 0x67) // optional IEEE488 GPIB
+ //map(0x60, 0x67) // optional IEEE488 GPIB
map(0x70, 0x7f).rw("rtc", FUNC(mm58274c_device::read), FUNC(mm58274c_device::write)); // optional RTC
}
diff --git a/src/mame/drivers/dps1.cpp b/src/mame/drivers/dps1.cpp
index 370c1673fa8..123a7ec0efa 100644
--- a/src/mame/drivers/dps1.cpp
+++ b/src/mame/drivers/dps1.cpp
@@ -84,14 +84,14 @@ void dps1_state::io_map(address_map &map)
map(0xbe, 0xbf).w(FUNC(dps1_state::portbe_w)); // disable eprom
map(0xff, 0xff).rw(FUNC(dps1_state::portff_r), FUNC(dps1_state::portff_w));
// other allocated ports, optional
- // AM_RANGE(0x04, 0x07) AM_DEVREADWRITE("uart2", mc2661_device, read, write) // S2651
- // AM_RANGE(0x08, 0x0b) parallel ports
- // AM_RANGE(0x10, 0x11) // interrupt response
+ // map(0x04, 0x07).rw("uart2", FUNC(mc2661_device::read), FUNC(mc2661_device::write)); // S2651
+ // map(0x08, 0x0b) parallel ports
+ // map(0x10, 0x11) // interrupt response
map(0x14, 0x14).rw("am9519a", FUNC(am9519_device::data_r), FUNC(am9519_device::data_w));
map(0x15, 0x15).rw("am9519a", FUNC(am9519_device::stat_r), FUNC(am9519_device::cmd_w));
map(0x16, 0x16).rw("am9519b", FUNC(am9519_device::data_r), FUNC(am9519_device::data_w));
map(0x17, 0x17).rw("am9519b", FUNC(am9519_device::stat_r), FUNC(am9519_device::cmd_w));
- // AM_RANGE(0x18, 0x1f) control lines 0 to 7
+ // map(0x18, 0x1f) control lines 0 to 7
map(0xe0, 0xe3).noprw(); //unknown device
}
diff --git a/src/mame/drivers/dreambal.cpp b/src/mame/drivers/dreambal.cpp
index 8e248ffce42..5d00c431368 100644
--- a/src/mame/drivers/dreambal.cpp
+++ b/src/mame/drivers/dreambal.cpp
@@ -116,7 +116,7 @@ WRITE16_MEMBER( dreambal_state::dreambal_protection_region_0_104_w )
void dreambal_state::dreambal_map(address_map &map)
{
-//ADDRESS_MAP_UNMAP_HIGH
+//map.unmap_value_high();
map(0x000000, 0x07ffff).rom();
map(0x100000, 0x100fff).rw(m_deco_tilegen, FUNC(deco16ic_device::pf1_data_r), FUNC(deco16ic_device::pf1_data_w));
map(0x101000, 0x101fff).ram();
diff --git a/src/mame/drivers/dsb46.cpp b/src/mame/drivers/dsb46.cpp
index e70cfd0cf46..1f2261409f2 100644
--- a/src/mame/drivers/dsb46.cpp
+++ b/src/mame/drivers/dsb46.cpp
@@ -69,11 +69,11 @@ void dsb46_state::dsb46_io(address_map &map)
map(0x00, 0x03).rw("sio", FUNC(z80sio_device::ba_cd_r), FUNC(z80sio_device::ba_cd_w));
map(0x08, 0x0b).rw("ctc1", FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
map(0x1a, 0x1a).w(FUNC(dsb46_state::port1a_w));
- //AM_RANGE(0x10, 0x10) disk related
- //AM_RANGE(0x14, 0x14) ?? (read after CTC1 TRG3)
- //AM_RANGE(0x18, 0x18) ??
- //AM_RANGE(0x1c, 0x1c) disk data
- //AM_RANGE(0x1d, 0x1d) disk status (FF = no fdc)
+ //map(0x10, 0x10) disk related
+ //map(0x14, 0x14) ?? (read after CTC1 TRG3)
+ //map(0x18, 0x18) ??
+ //map(0x1c, 0x1c) disk data
+ //map(0x1d, 0x1d) disk status (FF = no fdc)
}
static INPUT_PORTS_START( dsb46 )
diff --git a/src/mame/drivers/dunhuang.cpp b/src/mame/drivers/dunhuang.cpp
index 765ce20c49e..3740b7a78eb 100644
--- a/src/mame/drivers/dunhuang.cpp
+++ b/src/mame/drivers/dunhuang.cpp
@@ -499,7 +499,7 @@ void dunhuang_state::dunhuang_io_map(address_map &map)
map(0x000f, 0x000f).w(FUNC(dunhuang_state::block_addr_lo_w));
map(0x0010, 0x0010).w(FUNC(dunhuang_state::block_addr_hi_w));
-// AM_RANGE( 0x0011, 0x0011 ) ?
+// map(0x0011, 0x0011) ?
map(0x0012, 0x0012).w(FUNC(dunhuang_state::block_c_w));
map(0x0015, 0x0015).w(FUNC(dunhuang_state::block_x_w));
map(0x0016, 0x0016).w(FUNC(dunhuang_state::block_y_w));
diff --git a/src/mame/drivers/dynax.cpp b/src/mame/drivers/dynax.cpp
index 0bc9895b13e..e66d3b58acf 100644
--- a/src/mame/drivers/dynax.cpp
+++ b/src/mame/drivers/dynax.cpp
@@ -507,8 +507,8 @@ void dynax_state::hanamai_io_map(address_map &map)
map(0x70, 0x77).w(m_mainlatch, FUNC(ls259_device::write_d0));
map(0x78, 0x79).rw("ym2203", FUNC(ym2203_device::read), FUNC(ym2203_device::write)); // 2 x DSW
map(0x7a, 0x7b).w("aysnd", FUNC(ay8912_device::address_data_w)); // AY8912
-// AM_RANGE( 0x7c, 0x7c ) AM_WRITENOP // CRT Controller
-// AM_RANGE( 0x7d, 0x7d ) AM_WRITENOP //
+// map(0x7c, 0x7c).nopw(); // CRT Controller
+// map(0x7d, 0x7d).nopw(); //
map(0x7e, 0x7e).w(FUNC(dynax_state::dynax_blit_romregion_w)); // Blitter ROM bank
}
@@ -517,8 +517,8 @@ void dynax_state::hnoridur_io_map(address_map &map)
{
map.global_mask(0xff);
map(0x01, 0x07).w(m_blitter, FUNC(dynax_blitter_rev2_device::regs_w)); // Blitter
-// AM_RANGE( 0x10, 0x10 ) AM_WRITENOP // CRT Controller
-// AM_RANGE( 0x11, 0x11 ) AM_WRITENOP // CRT Controller
+// map(0x10, 0x10).nopw(); // CRT Controller
+// map(0x11, 0x11).nopw(); // CRT Controller
map(0x20, 0x20).w(FUNC(dynax_state::hanamai_keyboard_w)); // keyboard row select
map(0x21, 0x21).portr("COINS"); // Coins
map(0x22, 0x22).r(FUNC(dynax_state::hanamai_keyboard_1_r)); // P2
@@ -599,8 +599,8 @@ void dynax_state::hjingi_io_map(address_map &map)
map.global_mask(0xff);
map(0x01, 0x07).w(m_blitter, FUNC(dynax_blitter_rev2_device::regs_w)); // Blitter
-// AM_RANGE( 0x10, 0x10 ) AM_WRITENOP // CRT Controller
-// AM_RANGE( 0x11, 0x11 ) AM_WRITENOP // CRT Controller
+// map(0x10, 0x10).nopw(); // CRT Controller
+// map(0x11, 0x11).nopw(); // CRT Controller
map(0x20, 0x20).w(FUNC(dynax_state::hanamai_keyboard_w)); // keyboard row select
map(0x21, 0x21).portr("COINS"); // Coins
@@ -755,8 +755,8 @@ void dynax_state::mcnpshnt_io_map(address_map &map)
{
map.global_mask(0xff);
map(0x01, 0x07).w(m_blitter, FUNC(dynax_blitter_rev2_device::regs_w)); // Blitter
-// AM_RANGE( 0x10, 0x10 ) AM_WRITENOP // CRT Controller
-// AM_RANGE( 0x11, 0x11 ) AM_WRITENOP // CRT Controller
+// map(0x10, 0x10).nopw(); // CRT Controller
+// map(0x11, 0x11).nopw(); // CRT Controller
map(0x20, 0x20).w(FUNC(dynax_state::hanamai_keyboard_w)); // keyboard row select
map(0x21, 0x21).portr("COINS"); // Coins
map(0x22, 0x22).r(FUNC(dynax_state::hanamai_keyboard_1_r)); // P2
@@ -791,8 +791,8 @@ void dynax_state::sprtmtch_io_map(address_map &map)
map.global_mask(0xff);
map(0x01, 0x07).w(m_blitter, FUNC(dynax_blitter_rev2_device::regs_w)); // Blitter
map(0x10, 0x11).rw("ym2203", FUNC(ym2203_device::read), FUNC(ym2203_device::write)); // 2 x DSW
-// AM_RANGE( 0x12, 0x12 ) AM_WRITENOP // CRT Controller
-// AM_RANGE( 0x13, 0x13 ) AM_WRITENOP // CRT Controller
+// map(0x12, 0x12).nopw(); // CRT Controller
+// map(0x13, 0x13).nopw(); // CRT Controller
map(0x20, 0x20).portr("P1"); // P1
map(0x21, 0x21).portr("P2"); // P2
map(0x22, 0x22).portr("COINS"); // Coins
@@ -819,8 +819,8 @@ void dynax_state::mjfriday_io_map(address_map &map)
map(0x03, 0x03).w(FUNC(dynax_state::dynax_blit_backpen_w)); // Background Color
map(0x10, 0x17).w(m_mainlatch, FUNC(ls259_device::write_d0));
map(0x41, 0x47).w(m_blitter, FUNC(dynax_blitter_rev2_device::regs_w)); // Blitter
-// AM_RANGE( 0x50, 0x50 ) AM_WRITENOP // CRT Controller
-// AM_RANGE( 0x51, 0x51 ) AM_WRITENOP // CRT Controller
+// map(0x50, 0x50).nopw(); // CRT Controller
+// map(0x51, 0x51).nopw(); // CRT Controller
map(0x60, 0x60).w(FUNC(dynax_state::hanamai_keyboard_w)); // keyboard row select
map(0x61, 0x61).portr("COINS"); // Coins
map(0x62, 0x62).r(FUNC(dynax_state::hanamai_keyboard_1_r)); // P2
@@ -828,7 +828,7 @@ void dynax_state::mjfriday_io_map(address_map &map)
map(0x64, 0x64).portr("DSW0"); // DSW
map(0x67, 0x67).portr("DSW1"); // DSW
map(0x70, 0x71).w("ym2413", FUNC(ym2413_device::write)); //
-// AM_RANGE( 0x80, 0x80 ) AM_WRITENOP // IRQ ack?
+// map(0x80, 0x80).nopw(); // IRQ ack?
}
@@ -847,7 +847,7 @@ void dynax_state::nanajign_io_map(address_map &map)
map(0x14, 0x14).portr("DSW0"); // DSW1
map(0x15, 0x15).portr("DSW1"); // DSW2
map(0x16, 0x16).portr("DSW2"); // DSW3
-// AM_RANGE( 0x20, 0x21 ) AM_WRITENOP // CRT Controller
+// map(0x20, 0x21).nopw(); // CRT Controller
map(0x31, 0x37).w(m_blitter, FUNC(dynax_blitter_rev2_device::regs_w)); // Blitter
map(0x40, 0x47).w("outlatch", FUNC(ls259_device::write_d0)); // Coin Counter
map(0x50, 0x57).w(m_mainlatch, FUNC(ls259_device::write_d0));
@@ -890,7 +890,7 @@ WRITE8_MEMBER(dynax_state::jantouki_rombank_w)
void dynax_state::jantouki_io_map(address_map &map)
{
map.global_mask(0xff);
-// AM_RANGE( 0x40, 0x41 ) AM_WRITENOP // CRT Controller
+// map(0x40, 0x41).nopw(); // CRT Controller
map(0x48, 0x48).w(FUNC(dynax_state::jantouki_rombank_w)); // BANK ROM Select
map(0x49, 0x49).w(m_soundlatch, FUNC(generic_latch_8_device::write)); // To Sound CPU
map(0x4a, 0x4a).r(FUNC(dynax_state::jantouki_soundlatch_ack_r)); // Soundlatch status
@@ -968,13 +968,13 @@ void dynax_state::mjelctrn_io_map(address_map &map)
map(0x04, 0x05).w("ym2413", FUNC(ym2413_device::write)); //
map(0x08, 0x08).w("aysnd", FUNC(ay8912_device::data_w)); // AY8912
map(0x0a, 0x0a).w("aysnd", FUNC(ay8912_device::address_w)); //
-// AM_RANGE( 0x20, 0x20 ) AM_WRITENOP // CRT Controller
-// AM_RANGE( 0x21, 0x21 ) AM_WRITENOP // CRT Controller
+// map(0x20, 0x20).nopw(); // CRT Controller
+// map(0x21, 0x21).nopw(); // CRT Controller
map(0x40, 0x47).w("outlatch", FUNC(ls259_device::write_d0));
map(0x60, 0x60).w(FUNC(dynax_state::dynax_extra_scrollx_w)); // screen scroll X
map(0x62, 0x62).w(FUNC(dynax_state::dynax_extra_scrolly_w)); // screen scroll Y
-// AM_RANGE( 0x64, 0x64 ) AM_WRITE(dynax_extra_scrollx_w) // screen scroll X
-// AM_RANGE( 0x66, 0x66 ) AM_WRITE(dynax_extra_scrolly_w) // screen scroll Y
+// map(0x64, 0x64).w(FUNC(dynax_state::dynax_extra_scrollx_w)); // screen scroll X
+// map(0x66, 0x66).w(FUNC(dynax_state::dynax_extra_scrolly_w)); // screen scroll Y
map(0x6a, 0x6a).w(FUNC(dynax_state::hnoridur_rombank_w)); // BANK ROM Select
map(0x80, 0x80).w(FUNC(dynax_state::hanamai_keyboard_w)); // keyboard row select
map(0x81, 0x81).portr("COINS"); // Coins
@@ -1006,8 +1006,8 @@ void dynax_state::mjembase_io_map(address_map &map)
map(0x22, 0x22).r(FUNC(dynax_state::mjelctrn_keyboard_1_r)); // P2
map(0x23, 0x23).r(FUNC(dynax_state::hanamai_keyboard_0_r)); // P1
map(0x24, 0x24).portr("DSW3");
-// AM_RANGE( 0x40, 0x40 ) AM_WRITENOP // CRT Controller
-// AM_RANGE( 0x41, 0x41 ) AM_WRITENOP // CRT Controller
+// map(0x40, 0x40).nopw(); // CRT Controller
+// map(0x41, 0x41).nopw(); // CRT Controller
map(0x61, 0x67).w(m_blitter, FUNC(dynax_blitter_rev2_device::regs_w)); // Blitter
map(0x80, 0x87).w(m_mainlatch, FUNC(ls259_device::write_d0));
map(0xa0, 0xa0).w(FUNC(dynax_state::hnoridur_rombank_w)); // BANK ROM Select
@@ -1320,8 +1320,8 @@ void dynax_state::gekisha_banked_map(address_map &map)
map(0x10010, 0x10017).w(m_mainlatch, FUNC(ls259_device::write_d0));
map(0x10020, 0x10021).w(FUNC(dynax_state::gekisha_hopper_w));
map(0x10041, 0x10047).w(m_blitter, FUNC(dynax_blitter_rev2_device::regs_w)); // Blitter
-// AM_RANGE( 0x10050, 0x10050 ) AM_WRITENOP // CRT Controller
-// AM_RANGE( 0x10051, 0x10051 ) AM_WRITENOP // CRT Controller
+// map(0x10050, 0x10050).nopw(); // CRT Controller
+// map(0x10051, 0x10051).nopw(); // CRT Controller
map(0x10060, 0x10060).w(FUNC(dynax_state::hanamai_keyboard_w)); // keyboard row select
map(0x10061, 0x10061).portr("COINS"); // Coins
map(0x10062, 0x10062).r(FUNC(dynax_state::gekisha_keyboard_1_r)); // P2
@@ -1356,13 +1356,13 @@ void dynax_state::cdracula_io_map(address_map &map)
map(0x01, 0x07).w(m_blitter, FUNC(cdracula_blitter_device::regs_w)); // Blitter + Destination Layers
map(0x10, 0x10).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x11, 0x11).noprw(); // unpopulated oki
-// AM_RANGE( 0x12, 0x12 ) AM_WRITENOP // CRT Controller
-// AM_RANGE( 0x13, 0x13 ) AM_WRITENOP // CRT Controller
+// map(0x12, 0x12).nopw(); // CRT Controller
+// map(0x13, 0x13).nopw(); // CRT Controller
map(0x20, 0x20).portr("P1"); // P1
map(0x21, 0x21).portr("P2"); // P2
map(0x22, 0x22).portr("COINS"); // Coins
map(0x30, 0x30).w(FUNC(dynax_state::dynax_layer_enable_w)); // Layers Enable
-// AM_RANGE( 0x31, 0x31 ) AM_WRITE(dynax_rombank_w) // BANK ROM Select
+// map(0x31, 0x31).w(FUNC(dynax_state::dynax_rombank_w)); // BANK ROM Select
map(0x32, 0x32).w(m_blitter, FUNC(cdracula_blitter_device::pen_w)); // Destination Pen
map(0x33, 0x33).w(m_blitter, FUNC(cdracula_blitter_device::flags_w)); // Flags + Do Blit
map(0x34, 0x34).w(FUNC(dynax_state::dynax_blit_palette01_w)); // Layers Palettes (Low Bits)
diff --git a/src/mame/drivers/ec184x.cpp b/src/mame/drivers/ec184x.cpp
index c2b47e8c307..9befe291f09 100644
--- a/src/mame/drivers/ec184x.cpp
+++ b/src/mame/drivers/ec184x.cpp
@@ -229,7 +229,7 @@ void ec184x_state::ec1847_io(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x00ff).m("mb", FUNC(ibm5160_mb_device::map));
-// AM_RANGE(0x0210, 0x021f) AM_RAM // internal (non-standard?) bus extender
+// map(0x0210, 0x021f).ram(); // internal (non-standard?) bus extender
}
diff --git a/src/mame/drivers/ecoinf2.cpp b/src/mame/drivers/ecoinf2.cpp
index 462c370f26f..866b7e507f6 100644
--- a/src/mame/drivers/ecoinf2.cpp
+++ b/src/mame/drivers/ecoinf2.cpp
@@ -245,10 +245,10 @@ void ecoinf2_state::oxo_portmap(address_map &map)
map(0x48, 0x4b).rw("ic22_inpt", FUNC(i8255_device::read), FUNC(i8255_device::write)); //*
map(0x4c, 0x4f).rw("ic23_reel", FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0x50, 0x53).rw("ic13_leds", FUNC(i8255_device::read), FUNC(i8255_device::write)); //*
-// AM_RANGE(0x54, 0x57) AM_DEVREADWRITE("ic25_dips", i8255_device, read, write) // is this an 8255, or a mirrored byte read?
+// map(0x54, 0x57).rw("ic25_dips", FUNC(i8255_device::read), FUNC(i8255_device::write)); // is this an 8255, or a mirrored byte read?
-// AM_RANGE(0x5c, 0x5c) AM_WRITE(ox_port5c_out_w)
+// map(0x5c, 0x5c).w(FUNC(ecoinf2_state::ox_port5c_out_w));
}
diff --git a/src/mame/drivers/ecoinfr.cpp b/src/mame/drivers/ecoinfr.cpp
index 51081e9667f..f15158b1563 100644
--- a/src/mame/drivers/ecoinfr.cpp
+++ b/src/mame/drivers/ecoinfr.cpp
@@ -502,7 +502,7 @@ void ecoinfr_state::portmap(address_map &map)
map(0x0b, 0x0b).w(FUNC(ecoinfr_state::ec_port0b_out_w)); // 11 (Sound 2)
map(0x0c, 0x0c).w(FUNC(ecoinfr_state::ec_port0c_out_cred_strobe_w));
map(0x0d, 0x0d).w(FUNC(ecoinfr_state::ec_port0d_out_cred_data_w));
-// AM_RANGE(0x0e, 0x0e) AM_WRITE(ec_port0e_out_w)
+// map(0x0e, 0x0e).w(FUNC(ecoinfr_state::ec_port0e_out_w));
map(0x0f, 0x0f).w(FUNC(ecoinfr_state::ec_port0f_out_bank_segdata_w));
map(0x10, 0x10).w(FUNC(ecoinfr_state::ec_port10_out_w)); // 16 (Meter)
map(0x11, 0x11).w(FUNC(ecoinfr_state::ec_port11_out_w)); // SEC
diff --git a/src/mame/drivers/eispc.cpp b/src/mame/drivers/eispc.cpp
new file mode 100644
index 00000000000..f0d593f5cd6
--- /dev/null
+++ b/src/mame/drivers/eispc.cpp
@@ -0,0 +1,959 @@
+// license:BSD-3-Clause
+// copyright-holders:Joakim Larsson Edström
+/***************************************************************************************************
+ *
+ * Ericsson Information Systems PC "compatibles"
+ *
+ * The Ericsson PC was the the first original Ericsson design for the office PC market replacing the
+ * Step/One which was an OEM:ed clone of the Matsushita Mybrain 3000 (see myb3k.cpp driver).
+ *
+ **************************************************************
+ * Ericsson PC
+ *------------
+ * Links: https://youtu.be/6uilOdMJc24
+ * Form Factor: Desktop
+ * CPU: 8088 @ 4.77MHz
+ * RAM: 256K
+ * Bus: 6x ISA
+ * Video: Monchrome or Color 80x25 character mode. 320x200 and 640x400 grahics modes
+ * Display: Orange Gas Plasma (GP) display
+ * Mass storage: 2 x 5.25" 360K or 1 20Mb HDD
+ * On board ports: Beeper,
+ * Ports: serial, parallel
+ * Internal Options: Up to 640K RAM through add-on RAM card
+ * Misc: The hardware was not 100% PC compatible so non BIOS based software would not run. 50.000+ units sold
+ *
+ * TODO:
+ * - Add keyboard, first HLE as in pc.cpp and then LLE when the keyboard controller is dumped
+ * - Add the on-board FDC and boot DOS 1.xx
+ * - Complete the Ericsson 1070 MDA ISA board and test all the graphics modes inclusing 640x400 (aka HR)
+ * - Add the Ericsson 1065 HDC and boot from a hard drive
+ *
+ * Credits: The driver code is inspired from m24.cpp, myb3k.cpp and genpc.cpp. Information about the EPC has
+ * been contributed by many, mainly the people at Dalby Computer museum http://www.datormuseum.se/
+ * A dead pcb was donated by rfka01 and rom dumps by ZnaxQue@sweclockers.com
+ *
+ ************************************************************************************************************/
+/*
+ Links:
+ ------
+
+ */
+
+#include "emu.h"
+
+#include "machine/eispc_kb.h"
+
+// Devices
+#include "cpu/i86/i86.h"
+#include "machine/am9517a.h"
+#include "machine/i8251.h"
+#include "machine/i8255.h"
+#include "machine/pit8253.h"
+#include "machine/pic8259.h"
+#include "machine/upd765.h"
+#include "machine/ins8250.h"
+
+// Expansion cards
+//#include "bus/isa/isa.h"
+//#include "bus/isa/isa_cards.h"
+#include "bus/isa/ega.h"
+#include "bus/isa/mda.h"
+#include "machine/pc_lpt.h"
+
+#include "machine/ram.h"
+#include "machine/timer.h"
+#include "sound/spkrdev.h"
+#include "speaker.h"
+#include "imagedev/floppy.h"
+#include "formats/imd_dsk.h"
+#include "formats/pc_dsk.h"
+#include "bus/rs232/rs232.h"
+
+#define LOG_PPI (1U << 1)
+#define LOG_PIT (1U << 2)
+#define LOG_PIC (1U << 3)
+#define LOG_KBD (1U << 4)
+#define LOG_DMA (1U << 5)
+#define LOG_IRQ (1U << 6)
+#define LOG_FDC (1U << 7)
+#define LOG_LPT (1U << 8)
+#define LOG_NMI (1U << 9)
+#define LOG_BITS (1U << 10)
+
+//#define VERBOSE (LOG_BITS|LOG_KBD|LOG_IRQ)
+//#define LOG_OUTPUT_STREAM std::cout
+
+#include "logmacro.h"
+
+#define LOGPPI(...) LOGMASKED(LOG_PPI, __VA_ARGS__)
+#define LOGPIT(...) LOGMASKED(LOG_PIT, __VA_ARGS__)
+#define LOGPIC(...) LOGMASKED(LOG_PIC, __VA_ARGS__)
+#define LOGKBD(...) LOGMASKED(LOG_KBD, __VA_ARGS__)
+#define LOGDMA(...) LOGMASKED(LOG_DMA, __VA_ARGS__)
+#define LOGIRQ(...) LOGMASKED(LOG_IRQ, __VA_ARGS__)
+#define LOGFDC(...) LOGMASKED(LOG_FDC, __VA_ARGS__)
+#define LOGLPT(...) LOGMASKED(LOG_LPT, __VA_ARGS__)
+#define LOGNMI(...) LOGMASKED(LOG_NMI, __VA_ARGS__)
+#define LOGBITS(...) LOGMASKED(LOG_BITS, __VA_ARGS__)
+
+class epc_state : public driver_device
+{
+public:
+ epc_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_ram(*this, RAM_TAG)
+ , m_isabus(*this, "isabus")
+ , m_dma8237a(*this, "dma8237")
+ , m_ppi8255(*this, "ppi8255")
+ , m_io_dsw(*this, "DSW")
+ , m_io_j10(*this, "J10")
+ , m_lpt(*this, "lpt")
+ , m_kbd8251(*this, "kbd8251")
+ , m_keyboard(*this, "keyboard")
+ , m_pic8259(*this, "pic8259")
+ , m_pit8253(*this, "pit8253")
+ , m_speaker(*this, "speaker")
+ , m_fdc(*this, "fdc")
+ , m_floppy_connectors(*this, "fdc:%u", 0)
+ , m_uart(*this, "uart8250")
+ { }
+
+ void epc(machine_config &config);
+ void init_epc();
+
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+private:
+ required_device<i8086_cpu_device> m_maincpu;
+ required_device<ram_device> m_ram;
+ required_device<isa8_device> m_isabus;
+
+ // DMA
+ DECLARE_WRITE_LINE_MEMBER(dma_tc_w);
+ DECLARE_WRITE_LINE_MEMBER(dreq0_ck_w);
+ DECLARE_WRITE_LINE_MEMBER( epc_dma_hrq_changed );
+ DECLARE_WRITE_LINE_MEMBER( epc_dma8237_out_eop );
+ DECLARE_READ8_MEMBER( epc_dma_read_byte );
+ DECLARE_WRITE8_MEMBER( epc_dma_write_byte );
+ template <int Channel> uint8_t epc_dma8237_io_r(offs_t offset);
+ template <int Channel> void epc_dma8237_io_w(offs_t offset, uint8_t data);
+ template <int Channel> DECLARE_WRITE_LINE_MEMBER(epc_dack_w);
+ required_device<am9517a_device> m_dma8237a;
+ uint8_t m_dma_segment[4];
+ uint8_t m_dma_active;
+ bool m_tc;
+ bool m_txd;
+ bool m_rxrdy;
+ bool m_int;
+ bool m_dreq0_ck;
+
+ // PPI
+ required_device<i8255_device> m_ppi8255;
+ DECLARE_WRITE8_MEMBER(ppi_portb_w);
+ DECLARE_READ8_MEMBER(ppi_portc_r);
+ uint8_t m_ppi_portb;
+ required_ioport m_io_dsw;
+ required_ioport m_io_j10;
+
+ // Printer port
+ optional_device<pc_lpt_device> m_lpt;
+
+ // Keyboard Controller/USART
+ required_device<i8251_device> m_kbd8251;
+ required_device<eispc_keyboard_device> m_keyboard;
+ emu_timer *m_kbdclk_timer;
+ TIMER_CALLBACK_MEMBER(rxtxclk_w);
+ int m_rxtx_clk_state;
+
+ // Interrupt Controller
+ required_device<pic8259_device> m_pic8259;
+ DECLARE_WRITE_LINE_MEMBER(int_w);
+ uint8_t m_nmi_enabled;
+ uint8_t m_8087_int = 0;
+ const uint8_t m_parer_int = 0;
+ const uint8_t m_iochck_int = 0;
+ void update_nmi();
+
+ // Timer
+ required_device<pit8253_device> m_pit8253;
+
+ // Speaker
+ DECLARE_WRITE_LINE_MEMBER(speaker_ck_w);
+ required_device<speaker_sound_device> m_speaker;
+
+ void epc_map(address_map &map);
+ void epc_io(address_map &map);
+
+ // FDC
+ void check_fdc_irq();
+ void check_fdc_drq();
+ required_device<i8272a_device> m_fdc;
+ uint8_t m_ocr;
+ bool m_irq; // System signal after glue logic
+ bool m_drq; // System signal after glue logic
+ bool m_fdc_irq; // FDC output pin
+ bool m_fdc_drq; // FDC output pin
+
+ optional_device_array<floppy_connector, 4> m_floppy_connectors;
+ DECLARE_FLOPPY_FORMATS( epc_floppy_formats );
+
+ // UART
+ required_device<ins8250_device> m_uart;
+};
+
+void epc_state::check_fdc_irq()
+{
+ bool pirq = m_irq;
+ m_irq = m_fdc_irq && (m_ocr & 4) && (m_ocr & 8); // IRQ enabled and not in reset?
+ if(m_irq != pirq) // has the state changed?
+ {
+ LOGIRQ("FDC: IRQ6 request: %d\n", m_irq);
+ m_pic8259->ir6_w(m_irq);
+ }
+}
+
+void epc_state::check_fdc_drq()
+{
+ bool pdrq = m_drq;
+ m_drq = m_fdc_drq && (m_ocr & 4) && (m_ocr & 8); // DREQ enabled and not in reset?
+ if(m_drq != pdrq) // has the state changed?
+ {
+ LOGDMA("FDC: DMA channel 2 request: %d\n", m_drq);
+ m_dma8237a->dreq2_w(m_drq);
+ }
+}
+
+void epc_state::epc_map(address_map &map)
+{
+ map.unmap_value_high();
+ map(0x20000, 0x9ffff).noprw(); // Base RAM - mapped to avoid unmaped errors when BIOS is probing RAM size
+ // 0xa0000-0xaffff is reserved
+ map(0xb0000, 0xb7fff).noprw(); // Monochrome RAM - mapped to avoid unaped errors when BIOS is probing RAM size
+ map(0xb0000, 0xb7fff).noprw(); // Monochrome RAM - mapped to avoid unaped errors when BIOS is probing RAM size
+ map(0xb8000, 0xbffff).noprw(); // Color/Graphics RAM - mapped to avoid unaped errors when BIOS is probing RAM size
+ map(0xc0000, 0xeffff).noprw(); // Expansion ROM area - Hard Disk BIOS etc
+ map(0xf0000, 0xfffff).rom().region("bios", 0);
+}
+
+void epc_state::epc_io(address_map &map)
+{
+ map(0x0000, 0x000f).mirror(0x10).lrw8("dma8237_rw",
+ [this](offs_t offset) -> uint8_t
+ {
+ uint8_t data = m_dma8237a->read(offset);
+ LOGDMA("dma8237_r %04x\n", offset);
+ return data;
+ },
+ [this](offs_t offset, uint8_t data)
+ {
+ LOGDMA("dma8237_w %04x: %02x\n", offset, data);
+ m_dma8237a->write(offset, data);
+ }
+ );
+
+ map(0x0020, 0x0021).mirror(0x1e).lrw8("pic8259_rw",
+ [this](offs_t offset) -> uint8_t
+ {
+ uint8_t data = m_pic8259->read(offset);
+ LOGPIC("pic8259_r %04x: %02x\n", offset, data);
+ return data;
+ },
+ [this](offs_t offset, uint8_t data)
+ {
+ LOGPIC("pic8259_w %04x: %02x\n", offset, data);
+ m_pic8259->write(offset, data);
+ }
+ );
+
+ map(0x0040, 0x0043).mirror(0x1c).lrw8("pit8253_rw",
+ [this](offs_t offset) -> uint8_t
+ {
+ uint8_t data = m_pit8253->read(offset);
+ LOGPIT("pit8253_r %04x\n", offset);
+ return data;
+ },
+ [this](offs_t offset, uint8_t data)
+ {
+ LOGPIT("pit8253_w %04x: %02x\n", offset, data);
+ m_pit8253->write(offset, data);
+ }
+ );
+
+ map(0x0060, 0x0060).mirror(0x1c).lrw8("kbd_8251_data_rw",
+ [this]() -> uint8_t
+ {
+ uint8_t data = m_kbd8251->data_r();
+ LOGKBD("kbd8251_r %02x\n", data);
+ return data;
+ },
+ [this](offs_t offset, uint8_t data)
+ {
+ LOGKBD("kbd8251_w 0x60 %02x\n", data);
+ m_kbd8251->data_w(data);
+ }
+ );
+ // NOTE: PPI Port A is not mapped
+ map(0x0061, 0x0061).mirror(0x1c).lrw8("ppi8255_rw", // PPI Port B
+ [this](offs_t offset) -> uint8_t
+ {
+ uint8_t data = m_ppi8255->read(1);
+ LOGPPI("ppi8255_r Port B: %02x\n", data);
+ return data;
+ },
+ [this](offs_t offset, uint8_t data)
+ {
+ LOGPPI("ppi8255_w Port B: %02x\n", data);
+ m_ppi8255->write(1, data);
+ }
+ );
+
+ map(0x0062, 0x0062).mirror(0x1c).lrw8("ppi8255_rw", // PPI Port C
+ [this](offs_t offset) -> uint8_t
+ {
+ uint8_t data = m_ppi8255->read(2);
+ LOGPPI("ppi8255_r Port C: %02x\n", data);
+ return data;
+ },
+ [this](offs_t offset, uint8_t data)
+ {
+ LOGPPI("ppi8255_w Port C: %02x\n", data);
+ m_ppi8255->write(2, data);
+ }
+ );
+
+ map(0x0063, 0x0063).lrw8("ppi8255_rw", // PPI Control register
+ [this](offs_t offset) -> uint8_t
+ {
+ uint8_t data = m_ppi8255->read(3);
+ LOGPPI("ppi8255_r Control: %02x\n", data);
+ return data;
+ },
+ [this](offs_t offset, uint8_t data)
+ {
+ LOGPPI("ppi8255_w Control: %02x\n", data);
+ m_ppi8255->write(3, data);
+ }
+ );
+
+ map(0x0070, 0x0070).mirror(0x0e).lw8("i8251_data_w",
+ [this](offs_t offset, uint8_t data)
+ {
+ LOGKBD("kbd8251_w 0x70: %02x\n", data);
+ m_kbd8251->data_w(data);
+ }
+ );
+
+ map(0x0071, 0x0071).mirror(0x0e).lrw8("kbd_8251_stat_ctrl_rw",
+ [this](offs_t offset) -> uint8_t
+ {
+ uint8_t stat = m_kbd8251->status_r();
+ //LOGKBD("kbd8251_status_r %02x\n", stat);
+ return stat;
+ },
+ [this](offs_t offset, uint8_t data)
+ {
+ LOGKBD("kbd8251_control_w 0x71: %02x\n", data);
+ m_kbd8251->control_w(data);
+ }
+ );
+
+ map(0x0080, 0x0083).mirror(0xc).lw8("dma_segement_w",
+ [this](offs_t offset, uint8_t data)
+ {
+ LOGDMA("dma_segment_w %04x: %02x\n", offset, data);
+ m_dma_segment[offset] = data & 0x0f;
+ }
+ );
+
+ map(0x00a0, 0x00a1).mirror(0xe).lw8("nmi_enable_w",
+ [this](offs_t offset, uint8_t data)
+ {
+ LOGNMI("nmi_enable_w %04x: %02x\n", offset, data);
+ m_nmi_enabled = BIT(data,7);
+ update_nmi();
+ }
+ );
+
+ // FDC Output Control Register (same as PC XT DOR)
+ map(0x03f2, 0x03f3).lw8("ocr_w", // B0-B1 Drive select 0-3
+ [this](offs_t offset, uint8_t data) // B2 FDC Reset line
+ { // B3 Enable FDC DMA/IRQ
+ LOGFDC("FDC OCR: %02x\n", data);// B4-B7 Motor on for selected drive
+ uint8_t pocr = m_ocr;
+ uint8_t fid = m_ocr & 3;
+ m_ocr = data;
+ if ((m_ocr & 4) && m_floppy_connectors[fid]) // Not in reset and there is a floppy drive attached
+ {
+ floppy_image_device *floppy = m_floppy_connectors[fid]->get_device(); // try to retrieve the floppy
+ if (floppy)
+ {
+ LOGFDC(" - Motor %s for drive %d\n", (m_ocr & (0x10 << fid)) ? "ON" : "OFF", fid);
+ floppy->mon_w(!(m_ocr & (0x10 << fid)));
+ LOGFDC(" - Setting a floppy for drive %d\n", fid);
+ m_fdc->set_floppy((m_ocr & (0x10 << fid)) ? floppy : nullptr);
+ }
+ }
+ if (((pocr ^ m_ocr) & 4) && (m_ocr & 4) == 0) // If FDC reset state bit has changed to low then reset the FDC
+ m_fdc->reset();
+ check_fdc_irq();
+ check_fdc_drq();
+ }
+ );
+
+ map(0x03f4, 0x03f5).m(m_fdc, FUNC(i8272a_device::map));
+
+ map(0x03bc, 0x03be).lrw8("lpt_rw",
+ [this](address_space &space, offs_t offset, uint8_t mem_mask) -> uint8_t
+ {
+ uint8_t data = m_lpt->read(space, offset);
+ LOGLPT("LPT read offset %02x: %02x\n", offset, data);
+ return data;
+ },
+ [this](address_space &space, offs_t offset, uint8_t data)
+ {
+ LOGLPT("LPT write offset %02x: %02x\n", offset, data);
+ m_lpt->write(space, offset, data);
+ }
+ );
+
+ map(0x03f8, 0x03ff).rw(m_uart, FUNC(ins8250_device::ins8250_r), FUNC(ins8250_device::ins8250_w));
+}
+
+void epc_state::machine_start()
+{
+ m_maincpu->space(AS_PROGRAM).install_ram(0, m_ram->size() - 1, m_ram->pointer());
+
+ std::fill_n(&m_dma_segment[0], 4, 0);
+ m_dma_active = 0;
+ m_tc = false;
+ m_int = 1;
+ m_txd = false;
+ m_rxrdy = false;
+ m_dreq0_ck = true;
+ m_rxtx_clk_state = 0;
+
+ save_item(NAME(m_dma_segment));
+ save_item(NAME(m_dma_active));
+ save_item(NAME(m_tc));
+ save_item(NAME(m_int));
+ save_item(NAME(m_txd));
+ save_item(NAME(m_rxrdy));
+ save_item(NAME(m_ocr));
+ m_ocr = 0x00;
+ save_item(NAME(m_ppi_portb));
+ save_item(NAME(m_dreq0_ck));
+ save_item(NAME(m_rxtx_clk_state));
+}
+
+void epc_state::machine_reset()
+{
+ m_ppi_portb = 0;
+ m_keyboard->rst_line_w(ASSERT_LINE);
+ m_nmi_enabled = 0;
+ m_kbd8251->write_cts(0); // Held low always
+}
+
+void epc_state::init_epc()
+{
+ /* Keyboard UART Rxc/Txc is 19.2 kHz from x96 divider */
+ m_kbdclk_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(epc_state::rxtxclk_w), this));
+ m_kbdclk_timer->adjust(attotime::from_hz((XTAL(18'432'000) / 96) / 5));
+}
+
+TIMER_CALLBACK_MEMBER(epc_state::rxtxclk_w)
+{
+ m_kbd8251->write_rxc(m_rxtx_clk_state);
+ m_kbd8251->write_txc(m_rxtx_clk_state);
+ m_rxtx_clk_state ^= 0x01;
+ m_kbdclk_timer->adjust(attotime::from_hz((XTAL(18'432'000) / 96) / 5));
+}
+
+
+template <int Channel>
+uint8_t epc_state::epc_dma8237_io_r(offs_t offset)
+{
+ LOGDMA("epc_dma8237_io_r: %d\n", Channel);
+ if (Channel == 2)
+ return m_fdc->dma_r();
+ else
+ return m_isabus->dack_r(Channel);
+}
+
+template <int Channel>
+void epc_state::epc_dma8237_io_w(offs_t offset, uint8_t data)
+{
+ LOGDMA("epc_dma8237_io_w: %d - %02x\n", Channel, data);
+ if (Channel == 2)
+ m_fdc->dma_w(data);
+ else
+ m_isabus->dack_w(Channel, data);
+}
+
+template <int Channel>
+WRITE_LINE_MEMBER(epc_state::epc_dack_w)
+{
+ LOGDMA("epc_dack_w: %d - %d\n", Channel, state);
+
+ m_isabus->dack_line_w(Channel, state);
+
+ if (!state)
+ {
+ m_dma_active |= 1 << Channel;
+ if (Channel == 0)
+ m_dma8237a->dreq0_w(0);
+ if (m_tc)
+ m_isabus->eop_w(Channel, ASSERT_LINE);
+ }
+ else
+ {
+ m_dma_active &= ~(1 << Channel);
+ if (m_tc)
+ m_isabus->eop_w(Channel, CLEAR_LINE);
+ }
+}
+
+WRITE_LINE_MEMBER(epc_state::dma_tc_w)
+{
+ m_tc = (state == ASSERT_LINE);
+ for (int channel = 0; channel < 4; channel++)
+ {
+ if (BIT(m_dma_active, channel))
+ {
+ LOGDMA("dma_tc_w ch %d: %d\n", channel, state);
+ m_isabus->eop_w(channel, state);
+ }
+ }
+
+ // Special treatment for on board FDC
+ if (BIT(m_dma_active, 2))
+ {
+ m_fdc->tc_w(0);
+ }
+ else
+ {
+ m_fdc->tc_w(1);
+ }
+}
+
+WRITE_LINE_MEMBER(epc_state::dreq0_ck_w)
+{
+ if (state && !m_dreq0_ck && !BIT(m_dma_active, 0))
+ m_dma8237a->dreq0_w(1);
+
+ m_dreq0_ck = state;
+}
+
+WRITE_LINE_MEMBER(epc_state::speaker_ck_w)
+{
+ m_speaker->level_w((m_ppi_portb & 0x02) && state ? 1 : 0);
+}
+
+/**********************************************************
+ *
+ * PPI8255 interface
+ *
+ *
+ * PORT A (not used)
+ *
+ * Reads of port A is shadowed by UART8251A's read register
+ * gaining some compatibility with PC software. The UART8251
+ * communicates with the serial keyboard and extends it with
+ * write capability enabling keyboard led control as with a
+ * PC AT keyboard.
+ *
+ * PORT B (output)
+ * 0 - PB0 - - Control signal for the sound generator (short beeps)
+ * 1 - PB1 - - Control signal for the sound generator
+ * 2 - PB2 - - Unused
+ * 3 - PB3 - - Data select for the configuration switches 0=SW1-4 1=SW5-8
+ * 4 - PB4 - * - Enable ram parity check
+ * 5 - PB5 - * - Enable expansion I/O check
+ * 6 - PB6 - * - Keyboard reset
+ * 7 - PB7 - - Reset keyboard interrupt
+ *
+ * PORT C
+ * 0 - PC0 - - Dipswitch SW 1/5 PB3=0/PB3=1
+ * 1 - PC1 - - Dipswitch SW 2/6 PB3=0/PB3=1
+ * 2 - PC2 - - Dipswitch SW 3/7 PB3=0/PB3=1
+ * 3 - PC3 - - Dipswitch SW 4/8 PB3=0/PB3=1
+ * 4 - PC4 - SPK - Speaker/cassette data (spare in PC XT spec)
+ * 5 - PC5 - OUT2 - OUT2 from 8253 (ibmpcjr compatible)
+ * 6 - PC6 -
+ * 7 - PC7 -
+ *
+ * Ericsson PC SW:
+ * 1 - Not used. Must be set to OFF
+ * 2 - OFF - 8087 present
+ * ON - No 8087 present *)
+ * 3 - Not Used. Don't care but OFF *)
+ * 4 - Not Used. Must be set to ON
+ * 5+6 - Used to select display
+ * OFF OFF - Monochrome HR graphics monitor 3111 installed + 1020 color secondary monitor
+ * ON OFF - Monochrome HR graphics monitor 3111 installed + optional 1020 color main monitor *)
+ * OFF ON - Not used
+ * ON ON - Not used
+ * 7+8 - Used to select number of disk drives
+ * OFF OFF - Not used
+ * ON OFF - Not used
+ * OFF ON - two disk drives, system units 1030-1 and 1030-2
+ * ON ON - one disk drive, system units 1030-3, 1030-4, 1031-1 and 1031-2
+ *
+ * *) - Factory settings
+ *
+ **********************************************************/
+
+READ8_MEMBER( epc_state::ppi_portc_r )
+{
+ uint8_t data;
+
+ // Read 4 configurations dip switches depending on PB3
+ data = (m_io_dsw->read() >> ((m_ppi_portb & 0x08) ? 4 : 0) & 0x0f);
+
+ // TODO: verify what PC4-PC7 is used for, if anything
+
+ LOGPPI("PPI Port C read: %02x\n", data);
+
+ return data;
+}
+
+WRITE8_MEMBER( epc_state::ppi_portb_w )
+{
+ LOGPPI("PPI Port B write: %02x\n", data);
+ LOGPPI(" PB0 - Enable beeper : %d\n", (data & 0x01) ? 1 : 0);
+ LOGPPI(" PB1 - Beeper data : %d\n", (data & 0x02) ? 1 : 0);
+ LOGPPI(" PB2 - Unused : %d\n", (data & 0x04) ? 1 : 0);
+ LOGPPI(" PB3 - Port C dip switch select : %d\n", (data & 0x08) ? 1 : 0);
+ LOGPPI(" PB4 - RAM parity enable : %d\n", (data & 0x10) ? 1 : 0);
+ LOGPPI(" PB5 - ISA error checking enable : %d\n", (data & 0x20) ? 1 : 0);
+ LOGPPI(" PB6 - Reset keyboard : %d\n", (data & 0x40) ? 1 : 0);
+ LOGPPI(" PB7 - Reset keyboard interrupt : %d\n", (data & 0x80) ? 1 : 0);
+
+ uint8_t changed = m_ppi_portb ^ data;
+
+ m_ppi_portb = data;
+
+ if (changed & 0x40)
+ {
+ if (m_ppi_portb & 0x40)
+ {
+ LOGKBD("PB6 set, clearing Keyboard RESET\n");
+ m_keyboard->rst_line_w(CLEAR_LINE);
+ }
+ else
+ {
+ LOGKBD("PB6 cleared, asserting Keyboard RESET\n");
+ m_keyboard->rst_line_w(ASSERT_LINE);
+ }
+ }
+
+ if (changed & m_ppi_portb & 0x80)
+ {
+ LOGIRQ("PB7 set, clearing IRQ1 and releasing HOLD\n");
+ m_pic8259->ir1_w(CLEAR_LINE);
+ m_keyboard->hold_w(ASSERT_LINE);
+ }
+}
+
+WRITE_LINE_MEMBER(epc_state::int_w)
+{
+ if (m_int != state)
+ {
+ LOGIRQ("int_w: %d\n", state);
+ m_int = state;
+ m_maincpu->set_input_line(0, m_int);
+ }
+}
+
+static void epc_isa8_cards(device_slot_interface &device)
+{
+ device.option_add("epc_mda", ISA8_EPC_MDA);
+ device.option_add("ega", ISA8_EGA);
+ // device.option_add("epc_hdc1065", ISA8_EPC_HDC1065);
+ // device.option_add("epc_mb1080", ISA8_EPC_MB1080);
+}
+
+FLOPPY_FORMATS_MEMBER( epc_state::epc_floppy_formats )
+ FLOPPY_PC_FORMAT,
+ FLOPPY_IMD_FORMAT
+FLOPPY_FORMATS_END
+
+static void epc_sd_floppies(device_slot_interface &device)
+{
+ device.option_add("525sd", FLOPPY_525_SD);
+}
+
+void epc_state::epc(machine_config &config)
+{
+ I8088(config, m_maincpu, XTAL(14'318'181) / 3.0); // TWE crystal marked X1 verified divided through a 82874
+ m_maincpu->set_addrmap(AS_PROGRAM, &epc_state::epc_map);
+ m_maincpu->set_addrmap(AS_IO, &epc_state::epc_io);
+ m_maincpu->set_irq_acknowledge_callback("pic8259", FUNC(pic8259_device::inta_cb));
+
+ // DMA
+ AM9517A(config, m_dma8237a, XTAL(14'318'181) / 3.0); // TWE crystal marked X1 verified
+ m_dma8237a->out_hreq_callback().set(FUNC(epc_state::epc_dma_hrq_changed));
+ m_dma8237a->out_eop_callback().set(FUNC(epc_state::dma_tc_w));
+ m_dma8237a->in_memr_callback().set(FUNC(epc_state::epc_dma_read_byte));
+ m_dma8237a->out_memw_callback().set(FUNC(epc_state::epc_dma_write_byte));
+ m_dma8237a->in_ior_callback<1>().set(FUNC(epc_state::epc_dma8237_io_r<1>));
+ m_dma8237a->in_ior_callback<2>().set(FUNC(epc_state::epc_dma8237_io_r<2>));
+ m_dma8237a->in_ior_callback<3>().set(FUNC(epc_state::epc_dma8237_io_r<3>));
+ m_dma8237a->out_iow_callback<0>().set(FUNC(epc_state::epc_dma8237_io_w<0>));
+ m_dma8237a->out_iow_callback<1>().set(FUNC(epc_state::epc_dma8237_io_w<1>));
+ m_dma8237a->out_iow_callback<2>().set(FUNC(epc_state::epc_dma8237_io_w<2>));
+ m_dma8237a->out_iow_callback<3>().set(FUNC(epc_state::epc_dma8237_io_w<3>));
+ m_dma8237a->out_dack_callback<0>().set(FUNC(epc_state::epc_dack_w<0>));
+ m_dma8237a->out_dack_callback<1>().set(FUNC(epc_state::epc_dack_w<1>));
+ m_dma8237a->out_dack_callback<2>().set(FUNC(epc_state::epc_dack_w<2>));
+ m_dma8237a->out_dack_callback<3>().set(FUNC(epc_state::epc_dack_w<3>));
+
+ // TTL-level serial keyboard callback
+ EISPC_KB(config, "keyboard").txd_cb().set([this](bool state)
+ {
+ LOGBITS("KBD->EPC: %d\n", state);
+ m_kbd8251->write_rxd(state);
+ });
+
+ // Keyboard USART
+ I8251( config, m_kbd8251, XTAL(14'318'181) / 6.0 ); // TWE crystal marked X1 verified divided through a 82874
+
+ m_kbd8251->txd_handler().set([this](bool state)
+ {
+ if (m_txd != state)
+ {
+ LOGBITS("EPC->KBD: %d\n", state);
+ m_txd = state;
+ m_keyboard->rxd_w(m_txd);
+ }
+ });
+
+ m_kbd8251->rxrdy_handler().set([this](bool state)
+ {
+ m_rxrdy = state;
+ LOGKBD("KBD RxRdy: %d HOLD: %d\n", m_rxrdy ? 1 : 0, m_rxrdy ? 0 : 1);
+ m_keyboard->hold_w(!m_rxrdy);
+ if (m_rxrdy)
+ {
+ LOGIRQ("RxRdy set, asserting IRQ1\n");
+ m_pic8259->ir1_w(ASSERT_LINE); // Cleared by setting PB7
+ }
+ });
+ m_kbd8251->dtr_handler().set([this](bool state) // Controls RCLK for INS8250, either 19.2KHz or INS8250 BAUDOUT
+ {
+ LOGKBD("KBD DTR: %d\n", state ? 1 : 0); // TODO: Implement clock selection mux, need to check what state does what
+ });
+
+ // Interrupt Controller
+ PIC8259(config, m_pic8259);
+ m_pic8259->out_int_callback().set(FUNC(epc_state::int_w));
+
+ // Parallel port
+ I8255A(config, m_ppi8255);
+ m_ppi8255->out_pa_callback().set([this] (uint8_t data) { LOGPPI("PPI: write %02x to unused Port A\n", data); } ); // Port A is not used
+ m_ppi8255->out_pb_callback().set(FUNC(epc_state::ppi_portb_w));
+ m_ppi8255->in_pc_callback().set(FUNC(epc_state::ppi_portc_r));
+
+ // system board Parallel port
+ PC_LPT(config, m_lpt);
+ m_lpt->irq_handler().set([this](int state)
+ { // Jumper field J10 decides what IRQ to pull
+ if ((m_io_j10->read() & 0x03) == 0x01) { LOGIRQ("LPT IRQ2: %d\n", state); m_pic8259->ir2_w(state); }
+ if ((m_io_j10->read() & 0x0c) == 0x04) { LOGIRQ("LPT IRQ3: %d\n", state); m_pic8259->ir3_w(state); }
+ if ((m_io_j10->read() & 0x30) == 0x10) { LOGIRQ("LPT IRQ4: %d\n", state); m_pic8259->ir4_w(state); }
+ if ((m_io_j10->read() & 0xc0) == 0x40) { LOGIRQ("LPT IRQ7: %d\n", state); m_pic8259->ir7_w(state); } // Factory setting
+ });
+
+ // Timer
+ PIT8253(config, m_pit8253);
+ m_pit8253->set_clk<0>((XTAL(14'318'181) / 3.0) / 2.0 );
+ m_pit8253->set_clk<1>((XTAL(14'318'181) / 3.0) / 2.0 );
+ m_pit8253->set_clk<2>((XTAL(14'318'181) / 3.0) / 2.0 );
+ m_pit8253->out_handler<0>().set(m_pic8259, FUNC(pic8259_device::ir0_w));
+ m_pit8253->out_handler<1>().set(FUNC(epc_state::dreq0_ck_w));
+ m_pit8253->out_handler<2>().set(FUNC(epc_state::speaker_ck_w));
+
+ // Speaker
+ SPEAKER(config, "mono").front_center();
+ SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 1.00);
+
+ // ISA bus
+ ISA8(config, m_isabus, XTAL(14'318'181) / 3.0); // TEW crystal marked X1 verified
+ m_isabus->set_memspace(m_maincpu, AS_PROGRAM);
+ m_isabus->set_iospace(m_maincpu, AS_IO);
+ //m_isabus->irq2_callback().set(m_pic8259, FUNC(pic8259_device::ir2_w)); // Reserved in service manual
+ m_isabus->irq3_callback().set(m_pic8259, FUNC(pic8259_device::ir3_w));
+ m_isabus->irq4_callback().set(m_pic8259, FUNC(pic8259_device::ir4_w));
+ m_isabus->irq5_callback().set(m_pic8259, FUNC(pic8259_device::ir5_w));
+ m_isabus->irq6_callback().set(m_pic8259, FUNC(pic8259_device::ir6_w));
+ m_isabus->irq7_callback().set(m_pic8259, FUNC(pic8259_device::ir7_w));
+ m_isabus->drq1_callback().set(m_dma8237a, FUNC(am9517a_device::dreq1_w));
+ m_isabus->drq2_callback().set(m_dma8237a, FUNC(am9517a_device::dreq2_w));
+ m_isabus->drq3_callback().set(m_dma8237a, FUNC(am9517a_device::dreq3_w));
+ //m_isabus->iochck_callback().set(FUNC(epc_state::chck_w)); // TODO: Check schematics
+ m_isabus->iochck_callback().set([this] (int state)
+ {
+ if (m_nmi_enabled && !state && 0)
+ {
+ LOGNMI("IOCHCK: NMI Requested\n");
+ update_nmi();
+ }
+ });
+
+ ISA8_SLOT(config, "isa1", 0, m_isabus, epc_isa8_cards, "epc_mda", false);
+ ISA8_SLOT(config, "isa2", 0, m_isabus, epc_isa8_cards, nullptr, false);
+ ISA8_SLOT(config, "isa3", 0, m_isabus, epc_isa8_cards, nullptr, false);
+ ISA8_SLOT(config, "isa4", 0, m_isabus, epc_isa8_cards, nullptr, false);
+ ISA8_SLOT(config, "isa5", 0, m_isabus, epc_isa8_cards, nullptr, false);
+ ISA8_SLOT(config, "isa6", 0, m_isabus, epc_isa8_cards, nullptr, false);
+
+ // System board has 128kB memory with parity, expansion can be achieved through the
+ // 128kB Memory Expansion Board 1090 and/or the 128kB Multifunction Board MB1080-001
+ // and/or the 384kB MB1080-002. The MB1080 DRAM might need to be dynamically added as
+ // base address and also a video memory hole is configuarable.
+ RAM(config, m_ram).set_default_size("128K").set_extra_options("256K, 384K, 512K, 640K");
+
+ // FDC
+ I8272A(config, m_fdc, XTAL(16'000'000) / 2, false); // TEW crystal marked X3 verified
+ m_fdc->intrq_wr_callback().set([this] (int state){ m_fdc_irq = state; check_fdc_irq(); });
+ m_fdc->drq_wr_callback().set([this] (int state){ m_fdc_drq = state; check_fdc_drq(); });
+ FLOPPY_CONNECTOR(config, m_floppy_connectors[0], epc_sd_floppies, "525sd", epc_floppy_formats);
+ FLOPPY_CONNECTOR(config, m_floppy_connectors[1], epc_sd_floppies, "525sd", epc_floppy_formats);
+ //SOFTWARE_LIST(config, "epc_flop_list").set_original("epc_flop");
+
+ // system board UART TODO: Implement the descrete "Baud Rate Clock" from schematics that generates clocks for the 8250
+ INS8250(config, m_uart, XTAL(18'432'000) / 10); // TEW crystal marked X2 verified. TODO: Let 8051 DTR control RCLK (see above)
+ m_uart->out_tx_callback().set("uart", FUNC(rs232_port_device::write_txd));
+ m_uart->out_dtr_callback().set("uart", FUNC(rs232_port_device::write_dtr));
+ m_uart->out_rts_callback().set("uart", FUNC(rs232_port_device::write_rts));
+ m_uart->out_int_callback().set([this](int state)
+ { // Jumper field J10 decides what IRQ to pull
+ if ((m_io_j10->read() & 0x03) == 0x02) { LOGIRQ("UART IRQ2: %d\n", state); m_pic8259->ir2_w(state); }
+ if ((m_io_j10->read() & 0x0c) == 0x08) { LOGIRQ("UART IRQ3: %d\n", state); m_pic8259->ir3_w(state); }
+ if ((m_io_j10->read() & 0x30) == 0x20) { LOGIRQ("UART IRQ4: %d\n", state); m_pic8259->ir4_w(state); } // Factory setting
+ if ((m_io_j10->read() & 0xc0) == 0x80) { LOGIRQ("UART IRQ7: %d\n", state); m_pic8259->ir7_w(state); }
+ });
+
+ rs232_port_device &rs232(RS232_PORT(config, "uart", default_rs232_devices, nullptr));
+ rs232.rxd_handler().set(m_uart, FUNC(ins8250_uart_device::rx_w));
+ rs232.dcd_handler().set(m_uart, FUNC(ins8250_uart_device::dcd_w));
+ rs232.dsr_handler().set(m_uart, FUNC(ins8250_uart_device::dsr_w));
+ rs232.ri_handler().set(m_uart, FUNC(ins8250_uart_device::ri_w));
+ rs232.cts_handler().set(m_uart, FUNC(ins8250_uart_device::cts_w));
+}
+
+void epc_state::update_nmi()
+{
+ if (m_nmi_enabled &&
+ ((m_8087_int && (m_io_dsw->read() & 0x02)) || // FPU int only if FPU is enabled by DSW2
+ (m_parer_int != 0) || // Parity error is always false as it is an emulator, at least for now
+ (m_iochck_int != 0))) // Same goes for ISA board errors
+ {
+ LOGNMI(" NMI asserted\n");
+ m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
+ }
+ else
+ {
+ LOGNMI(" NMI Cleared\n");
+ m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
+ }
+}
+
+WRITE_LINE_MEMBER( epc_state::epc_dma_hrq_changed )
+{
+ LOGDMA("epc_dma_hrq_changed %d\n", state);
+
+ m_maincpu->set_input_line(INPUT_LINE_HALT, state ? ASSERT_LINE : CLEAR_LINE);
+
+ /* Assert HLDA */
+ m_dma8237a->hack_w(state);
+}
+
+
+READ8_MEMBER( epc_state::epc_dma_read_byte )
+{
+ if ((m_dma_active & 0x0f) == 0)
+ {
+ LOGDMA("epc_dma_read_byte failed\n");
+ return 0xff;
+ }
+
+ const int seg = (BIT(m_dma_active, 2) ? 0 : 2) | (BIT(m_dma_active, 3) ? 0 : 1);
+ return m_maincpu->space(AS_PROGRAM).read_byte(offset | u32(m_dma_segment[seg]) << 16);
+}
+
+WRITE8_MEMBER( epc_state::epc_dma_write_byte )
+{
+ if ((m_dma_active & 0x0f) == 0)
+ {
+ LOGDMA("epc_dma_write_byte failed\n");
+ return;
+ }
+
+ const int seg = (BIT(m_dma_active, 2) ? 0 : 2) | (BIT(m_dma_active, 3) ? 0 : 1);
+ m_maincpu->space(AS_PROGRAM).write_byte(offset | u32(m_dma_segment[seg]) << 16, data);
+}
+
+
+static INPUT_PORTS_START( epc_ports )
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "Not used")
+ PORT_DIPSETTING( 0x00, "ON - Don't use")
+ PORT_DIPSETTING( 0x01, "OFF - Factory Setting")
+ PORT_DIPNAME( 0x02, 0x00, "8087 installed")
+ PORT_DIPSETTING( 0x00, DEF_STR(No) )
+ PORT_DIPSETTING( 0x02, DEF_STR(Yes) )
+ PORT_DIPNAME( 0x04, 0x04, "Not used")
+ PORT_DIPSETTING( 0x00, "ON - Don't care")
+ PORT_DIPSETTING( 0x04, "OFF - Factory Setting")
+ PORT_DIPNAME( 0x08, 0x00, "Not used")
+ PORT_DIPSETTING( 0x00, "ON - Factory Setting")
+ PORT_DIPSETTING( 0x08, "OFF - Don't use")
+ PORT_DIPNAME( 0x30, 0x30, "Main monitor")
+ PORT_DIPSETTING( 0x00, "Not used" )
+ PORT_DIPSETTING( 0x10, "Optional 1020 color" )
+ PORT_DIPSETTING( 0x20, "Not used" )
+ PORT_DIPSETTING( 0x30, "3111 HR Monochrome" )
+ PORT_DIPNAME( 0xc0, 0x40, "Number of floppy drives")
+ PORT_DIPSETTING( 0x00, "1" )
+ PORT_DIPSETTING( 0x40, "2" )
+ PORT_DIPSETTING( 0x80, "Not used" )
+ PORT_DIPSETTING( 0xc0, "Not used" )
+
+ PORT_START("J10") // Jumper area, field 0=no jumper 1=LPT 2=COM 3=n/a
+ PORT_DIPNAME(0x03, 0x00, "IRQ2")
+ PORT_DIPSETTING(0x00, "no jumper")
+ PORT_DIPSETTING(0x01, "LPT")
+ PORT_DIPSETTING(0x02, "COM")
+ PORT_DIPNAME(0x0c, 0x00, "IRQ3")
+ PORT_DIPSETTING(0x00, "no jumper")
+ PORT_DIPSETTING(0x04, "LPT")
+ PORT_DIPSETTING(0x08, "COM")
+ PORT_DIPNAME(0x30, 0x20, "IRQ4")
+ PORT_DIPSETTING(0x00, "no jumper")
+ PORT_DIPSETTING(0x10, "LPT")
+ PORT_DIPSETTING(0x20, "COM")
+ PORT_DIPNAME(0xc0, 0x40, "IRQ7")
+ PORT_DIPSETTING(0x00, "no jumper")
+ PORT_DIPSETTING(0x40, "LPT")
+ PORT_DIPSETTING(0x80, "COM")
+INPUT_PORTS_END
+
+ROM_START( epc )
+ ROM_REGION(0x10000,"bios", 0)
+ ROM_DEFAULT_BIOS("p860110")
+ ROM_SYSTEM_BIOS(0, "p840705", "P840705") // TODO: Fix "Keyboard error" for this bios
+ ROMX_LOAD("ericsson_8088.bin", 0xe000, 0x2000, CRC(3953c38d) SHA1(2bfc1f1d11d0da5664c3114994fc7aa3d6dd010d), ROM_BIOS(0))
+ ROM_SYSTEM_BIOS(1, "p860110", "P860110")
+ ROMX_LOAD("epcbios1.bin", 0xe000, 0x02000, CRC(79a83706) SHA1(33528c46a24d7f65ef5a860fbed05afcf797fc55), ROM_BIOS(1))
+ ROMX_LOAD("epcbios2.bin", 0xa000, 0x02000, CRC(3ca764ca) SHA1(02232fedef22d31a641f4b65933b9e269afce19e), ROM_BIOS(1))
+ ROMX_LOAD("epcbios3.bin", 0xc000, 0x02000, CRC(70483280) SHA1(b44b09da94d77b0269fc48f07d130b2d74c4bb8f), ROM_BIOS(1))
+ROM_END
+
+
+COMP( 1985, epc, 0, 0, epc, epc_ports, epc_state, init_epc, "Ericsson Information System", "Ericsson PC" , MACHINE_NOT_WORKING )
+//COMP( 1985, eppc, ibm5150, 0, pccga, pccga, pc_state, empty_init, "Ericsson Information System", "Ericsson Portable PC", MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/elan_eu3a05.cpp b/src/mame/drivers/elan_eu3a05.cpp
index 8cd87632152..953b77f9402 100644
--- a/src/mame/drivers/elan_eu3a05.cpp
+++ b/src/mame/drivers/elan_eu3a05.cpp
@@ -960,8 +960,7 @@ void radica_eu3a05_state::radicasi_map(address_map &map)
map(0x50a9, 0x50a9).rw(FUNC(radica_eu3a05_state::radicasi_50a9_r), FUNC(radica_eu3a05_state::radicasi_50a9_w));
- //AM_RANGE(0x5000, 0x50ff) AM_RAM
-
+ //map(0x5000, 0x50ff).ram();
map(0x6000, 0xdfff).m(m_bank, FUNC(address_map_bank_device::amap8));
map(0xe000, 0xffff).rom().region("maincpu", 0x3f8000);
diff --git a/src/mame/drivers/ep64.cpp b/src/mame/drivers/ep64.cpp
index 0e4fa76c27e..c1f6b97bd3a 100644
--- a/src/mame/drivers/ep64.cpp
+++ b/src/mame/drivers/ep64.cpp
@@ -391,7 +391,7 @@ void ep64_state::ep64_io(address_map &map)
void ep64_state::dave_64k_mem(address_map &map)
{
map(0x000000, 0x007fff).rom().region(Z80_TAG, 0);
- //AM_RANGE(0x010000, 0x01ffff) // mapped by the cartslot
+ //map(0x010000, 0x01ffff) // mapped by the cartslot
map(0x3f0000, 0x3fffff).m(m_nick, FUNC(nick_device::vram_map));
}
diff --git a/src/mame/drivers/eprom.cpp b/src/mame/drivers/eprom.cpp
index 9fe13a92230..612a9831165 100644
--- a/src/mame/drivers/eprom.cpp
+++ b/src/mame/drivers/eprom.cpp
@@ -178,7 +178,7 @@ void eprom_state::guts_map(address_map &map)
map(0x260031, 0x260031).r(m_jsa, FUNC(atari_jsa_ii_device::main_response_r));
map(0x2e0000, 0x2e0001).w("watchdog", FUNC(watchdog_timer_device::reset16_w));
map(0x360000, 0x360001).w(FUNC(eprom_state::video_int_ack_w));
-// AM_RANGE(0x360010, 0x360011) AM_WRITE(eprom_latch_w)
+// map(0x360010, 0x360011).w(FUNC(eprom_state::eprom_latch_w));
map(0x360020, 0x360021).w(m_jsa, FUNC(atari_jsa_ii_device::sound_reset_w));
map(0x360031, 0x360031).w(m_jsa, FUNC(atari_jsa_ii_device::main_command_w));
map(0x3e0000, 0x3e0fff).ram().share("paletteram");
diff --git a/src/mame/drivers/eurocom2.cpp b/src/mame/drivers/eurocom2.cpp
index a4dcc042ae1..92f78e9340b 100644
--- a/src/mame/drivers/eurocom2.cpp
+++ b/src/mame/drivers/eurocom2.cpp
@@ -350,7 +350,7 @@ void waveterm_state::waveterm_map(address_map &map)
map(0xfd08, 0xfd0f).rw(m_ptm, FUNC(ptm6840_device::read), FUNC(ptm6840_device::write));
map(0xfd10, 0xfd17).unmaprw();
map(0xfd18, 0xfd18).r(FUNC(waveterm_state::waveterm_adc)); // AD558 ADC
-// AM_RANGE(0xfd20, 0xfd20) AM_READ(waveterm_dac) // ZN432 DAC ??
+// map(0xfd20, 0xfd20).r(FUNC(waveterm_state::waveterm_dac)); // ZN432 DAC ??
}
static INPUT_PORTS_START(eurocom2)
diff --git a/src/mame/drivers/exedexes.cpp b/src/mame/drivers/exedexes.cpp
index 8d7f73b1454..858edb0f2be 100644
--- a/src/mame/drivers/exedexes.cpp
+++ b/src/mame/drivers/exedexes.cpp
@@ -210,11 +210,11 @@ void exedexes_state::machine_reset()
void exedexes_state::exedexes(machine_config &config)
{
/* basic machine hardware */
- Z80(config, m_maincpu, 4000000); /* 4 MHz (?) */
+ Z80(config, m_maincpu, 12_MHz_XTAL / 4); // 3 MHz, verified on PCB
m_maincpu->set_addrmap(AS_PROGRAM, &exedexes_state::exedexes_map);
TIMER(config, "scantimer").configure_scanline(FUNC(exedexes_state::scanline), "screen", 0, 1);
- z80_device &audiocpu(Z80(config, "audiocpu", 3000000)); /* 3 MHz ??? */
+ z80_device &audiocpu(Z80(config, "audiocpu", 12_MHz_XTAL / 4)); // 3 MHz, verified on PCB
audiocpu.set_addrmap(AS_PROGRAM, &exedexes_state::sound_map);
audiocpu.set_periodic_int(FUNC(exedexes_state::irq0_line_hold), attotime::from_hz(4*60));
@@ -222,7 +222,7 @@ void exedexes_state::exedexes(machine_config &config)
BUFFERED_SPRITERAM8(config, m_spriteram);
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
- screen.set_refresh_hz(60);
+ screen.set_refresh_hz(59.60); // verified on PCB
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
screen.set_size(32*8, 32*8);
screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
@@ -239,11 +239,11 @@ void exedexes_state::exedexes(machine_config &config)
GENERIC_LATCH_8(config, "soundlatch");
- AY8910(config, "aysnd", 1500000).add_route(ALL_OUTPUTS, "mono", 0.10);
+ AY8910(config, "aysnd", 12_MHz_XTAL / 8).add_route(ALL_OUTPUTS, "mono", 0.10); // 1.5 MHz, verified on PCB
- SN76489(config, "sn1", 3000000).add_route(ALL_OUTPUTS, "mono", 0.36);
+ SN76489(config, "sn1", 12_MHz_XTAL / 4).add_route(ALL_OUTPUTS, "mono", 0.36); // 3 MHz, verified on PCB
- SN76489(config, "sn2", 3000000).add_route(ALL_OUTPUTS, "mono", 0.36);
+ SN76489(config, "sn2", 12_MHz_XTAL / 4).add_route(ALL_OUTPUTS, "mono", 0.36); // 3 MHz, verified on PCB
}
diff --git a/src/mame/drivers/exp85.cpp b/src/mame/drivers/exp85.cpp
index 18abb29a2a3..58b30641f3b 100644
--- a/src/mame/drivers/exp85.cpp
+++ b/src/mame/drivers/exp85.cpp
@@ -54,7 +54,7 @@ void exp85_state::exp85_io(address_map &map)
map.global_mask(0xff);
map(0xf0, 0xf3).rw(I8355_TAG, FUNC(i8355_device::io_r), FUNC(i8355_device::io_w));
map(0xf8, 0xfd).rw(I8155_TAG, FUNC(i8155_device::io_r), FUNC(i8155_device::io_w));
-// AM_RANGE(0xfe, 0xff) AM_DEVREADWRITE(I8279_TAG, i8279_r, i8279_w)
+// map(0xfe, 0xff).rw(I8279_TAG, FUNC(i8279_device::read), FUNC(i8279_device::write));
}
/* Input Ports */
diff --git a/src/mame/drivers/exterm.cpp b/src/mame/drivers/exterm.cpp
index 08498e86355..efec37848dc 100644
--- a/src/mame/drivers/exterm.cpp
+++ b/src/mame/drivers/exterm.cpp
@@ -277,7 +277,7 @@ void exterm_state::sound_master_map(address_map &map)
map(0x6000, 0x67ff).w(FUNC(exterm_state::sound_nmi_rate_w));
map(0x6800, 0x6fff).r(m_soundlatch[0], FUNC(generic_latch_8_device::read));
map(0x7000, 0x77ff).r(FUNC(exterm_state::sound_nmi_to_slave_r));
-/* AM_RANGE(0x7800, 0x7fff) unknown - to S4-13 */
+// map(0x7800, 0x7fff) unknown - to S4-13
map(0x8000, 0xffff).rom();
map(0xa000, 0xbfff).w(FUNC(exterm_state::sound_control_w));
}
diff --git a/src/mame/drivers/fastfred.cpp b/src/mame/drivers/fastfred.cpp
index 025d9027b1a..87902cc0505 100644
--- a/src/mame/drivers/fastfred.cpp
+++ b/src/mame/drivers/fastfred.cpp
@@ -219,7 +219,7 @@ void fastfred_state::jumpcoas_map(address_map &map)
map(0xe802, 0xe802).portr("BUTTONS");
map(0xe803, 0xe803).portr("JOYS");
map(0xf000, 0xf007).mirror(0x07f8).w(m_outlatch, FUNC(ls259_device::write_d0));
- //AM_RANGE(0xf800, 0xf800) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) // Why doesn't this work???
+ //map(0xf800, 0xf800).r("watchdog", FUNC(watchdog_timer_device::reset_r)); // Why doesn't this work???
map(0xf800, 0xf801).nopr().w("ay8910.1", FUNC(ay8910_device::address_data_w));
}
diff --git a/src/mame/drivers/fastinvaders.cpp b/src/mame/drivers/fastinvaders.cpp
index a0c4ce5096a..be476450b7a 100644
--- a/src/mame/drivers/fastinvaders.cpp
+++ b/src/mame/drivers/fastinvaders.cpp
@@ -499,7 +499,7 @@ WRITE8_MEMBER(fastinvaders_state::memory_write_byte)
void fastinvaders_state::fastinvaders_map(address_map &map)
{
- //AM_RANGE(0x0000, 0x1fff) AM_ROM AM_MIRROR(0x8000)
+ //map(0x0000, 0x1fff).rom(); .mirror(0x8000);
map(0x0000, 0x27ff).rom().mirror(0x8000);
map(0x2800, 0x2fff).ram().mirror(0x8000).share("videoram");
map(0x3000, 0x33ff).ram().mirror(0x8000);
@@ -518,7 +518,7 @@ void fastinvaders_state::fastinvaders_6845_io(address_map &map)
map(0x21, 0x21).rw(m_crtc6845, FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
map(0x30, 0x33).rw(m_pic8259, FUNC(pic8259_device::read), FUNC(pic8259_device::write));
map(0x40, 0x4f).w(FUNC(fastinvaders_state::io_40_w)); //ds4 //latch
- //AM_RANGE(0x50, 0x50) AM_READ(io_50_r) //ds5 //latch
+ //map(0x50, 0x50).r(FUNC(fastinvaders_state::io_50_r));//ds5 //latch
map(0x60, 0x60).r(FUNC(fastinvaders_state::io_60_r));
map(0x70, 0x70).w(FUNC(fastinvaders_state::io_70_w)); //ds7 rest55,rest65,trap, irq0 clear
map(0x80, 0x80).noprw(); //ds8 write here a LOT ?????
@@ -539,11 +539,11 @@ void fastinvaders_state::fastinvaders_8275_io(address_map &map)
map(0x10, 0x1f).rw(m_dma8257, FUNC(i8257_device::read), FUNC(i8257_device::write));
map(0x30, 0x33).rw(m_pic8259, FUNC(pic8259_device::read), FUNC(pic8259_device::write));
map(0x40, 0x4f).w(FUNC(fastinvaders_state::io_40_w)); //ds4 //latch
- //AM_RANGE(0x50, 0x50) AM_READ(io_50_r) //ds5 //latch
+ //map(0x50, 0x50).r(FUNC(fastinvaders_state::io_50_r));//latch
map(0x60, 0x60).r(FUNC(fastinvaders_state::io_60_r));
map(0x70, 0x70).w(FUNC(fastinvaders_state::io_70_w)); //ds7 rest55,rest65,trap, irq0 clear
map(0x80, 0x80).noprw(); //write here a LOT
- //AM_RANGE(0x80, 0x80) AM_WRITE(io_80_w) //ds8 ????
+ //map(0x80, 0x80).w(FUNC(fastinvaders_state::io_80_w));//ds8 ????
map(0x90, 0x90).w(FUNC(fastinvaders_state::io_90_w)); //ds9 sound command
map(0xa0, 0xa0).w(FUNC(fastinvaders_state::io_a0_w)); //ds10 irq1 clear
map(0xb0, 0xb0).w(FUNC(fastinvaders_state::io_b0_w)); //ds11 irq2 clear
diff --git a/src/mame/drivers/fb01.cpp b/src/mame/drivers/fb01.cpp
index 3c2202390da..bf0a829c9e4 100644
--- a/src/mame/drivers/fb01.cpp
+++ b/src/mame/drivers/fb01.cpp
@@ -70,7 +70,7 @@ private:
void fb01_state::fb01_mem(address_map &map)
{
map(0x0000, 0x7fff).rom();
- map(0x8000, 0xbfff).ram().share("nvram"); // 2 * 8KB S-RAM
+ map(0x8000, 0xbfff).mirror(0x4000).ram().share("nvram"); // 2 * 8KB S-RAM
}
diff --git a/src/mame/drivers/fc100.cpp b/src/mame/drivers/fc100.cpp
index 93a6a63be50..4630e1645a3 100644
--- a/src/mame/drivers/fc100.cpp
+++ b/src/mame/drivers/fc100.cpp
@@ -124,7 +124,7 @@ void fc100_state::fc100_mem(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x5fff).rom().region("roms", 0);
- //AM_RANGE(0x6000, 0x6fff) // mapped by the cartslot
+ //map(0x6000, 0x6fff) // mapped by the cartslot
map(0x7800, 0x7fff).bankr("bankr").bankw("bankw"); // Banked RAM/ROM
map(0x8000, 0xbfff).ram(); // expansion ram pack - if omitted you get a 'Pages?' prompt at boot
map(0xc000, 0xffff).ram().share("videoram");
@@ -135,7 +135,7 @@ void fc100_state::fc100_io(address_map &map)
map.unmap_value_high();
map.global_mask(0xff);
map(0x00, 0x0F).r(FUNC(fc100_state::port00_r));
- // AM_RANGE(0x10, 0x10) AM_WRITE(port10_w) // vdg, unknown effects
+ // map(0x10, 0x10).w(FUNC(fc100_state::port10_w)); // vdg, unknown effects
map(0x21, 0x21).w("psg", FUNC(ay8910_device::data_w));
map(0x22, 0x22).r("psg", FUNC(ay8910_device::data_r));
map(0x23, 0x23).w("psg", FUNC(ay8910_device::address_w));
diff --git a/src/mame/drivers/fccpu30.cpp b/src/mame/drivers/fccpu30.cpp
index f99b8e9421d..b7f2197872e 100644
--- a/src/mame/drivers/fccpu30.cpp
+++ b/src/mame/drivers/fccpu30.cpp
@@ -335,24 +335,24 @@ void cpu30_state::cpu30_mem(address_map &map)
map.unmap_value_high();
map(0x00000000, 0x00000007).ram().w(FUNC(cpu30_state::bootvect_w)); /* After first write we act as RAM */
map(0x00000000, 0x00000007).rom().r(FUNC(cpu30_state::bootvect_r)); /* ROM mirror just during reset */
-// AM_RANGE (0x00000008, 0x003fffff) AM_RAM /* RAM installed in machine start */
+// map(0x00000008, 0x003fffff).ram(); /* RAM installed in machine start */
map(0xff000000, 0xff7fffff).rom().region("roms", 0x000000);
map(0xff800c00, 0xff800dff).rw(m_pit1, FUNC(pit68230_device::read), FUNC(pit68230_device::write));
map(0xff800e00, 0xff800fff).rw(m_pit2, FUNC(pit68230_device::read), FUNC(pit68230_device::write));
map(0xff802000, 0xff8021ff).rw(m_dusccterm, FUNC(duscc68562_device::read), FUNC(duscc68562_device::write)); /* Port 1&2 - Dual serial port DUSCC */
map(0xff802200, 0xff8023ff).rw("duscc2", FUNC(duscc68562_device::read), FUNC(duscc68562_device::write)); /* Port 3&4 - Dual serial port DUSCC */
map(0xff803000, 0xff8031ff).rw(m_rtc, FUNC(rtc72423_device::read), FUNC(rtc72423_device::write));
-// AM_RANGE (0xff803400, 0xff8035ff) AM_DEVREADWRITE8("scsi", mb87033_device, read, write, 0xffffffff) /* TODO: implement MB87344 SCSI device */
+// map(0xff803400, 0xff8035ff).rw("scsi", FUNC(mb87033_device::read), FUNC(mb87033_device::write)); /* TODO: implement MB87344 SCSI device */
map(0xff803400, 0xff8035ff).rw(FUNC(cpu30_state::scsi_r), FUNC(cpu30_state::scsi_w)).umask32(0x000000ff); /* mock driver to log calls to device */
-// AM_RANGE (0xff803800, 0xff80397f) AM_DEVREADWRITE8("fdc", wd37c65c_device, read, write, 0xffffffff) /* TODO: implement WD3/C65C fdc controller */
+// map(0xff803800, 0xff80397f).rw("fdc", FUNC(wd37c65c_device::read), FUNC(wd37c65c_device::write)); /* TODO: implement WD3/C65C fdc controller */
map(0xff803800, 0xff80397f).rw(FUNC(cpu30_state::fdc_r), FUNC(cpu30_state::fdc_w)).umask32(0x000000ff); /* mock driver to log calls to device */
map(0xff803980, 0xff8039ff).r(FUNC(cpu30_state::slot1_status_r)).umask32(0x000000ff);
map(0xffc00000, 0xffcfffff).ram().share("nvram"); /* On-board SRAM with battery backup (nvram) */
map(0xffd00000, 0xffdfffff).rw(m_fga002, FUNC(fga002_device::read), FUNC(fga002_device::write)); /* FGA-002 Force Gate Array */
map(0xffe00000, 0xffefffff).rom().region("roms", 0x800000);
- //AM_RANGE(0x100000, 0xfeffff) AM_READWRITE(vme_a24_r, vme_a24_w) /* VMEbus Rev B addresses (24 bits) - not verified */
- //AM_RANGE(0xff0000, 0xffffff) AM_READWRITE(vme_a16_r, vme_a16_w) /* VMEbus Rev B addresses (16 bits) - not verified */
+ //map(0x100000, 0xfeffff).rw(FUNC(cpu30_state::vme_a24_r), FUNC(cpu30_state::vme_a24_w)); /* VMEbus Rev B addresses (24 bits) - not verified */
+ //map(0xff0000, 0xffffff).rw(FUNC(cpu30_state::vme_a16_r), FUNC(cpu30_state::vme_a16_w)); /* VMEbus Rev B addresses (16 bits) - not verified */
}
/* Input ports */
diff --git a/src/mame/drivers/fcrash.cpp b/src/mame/drivers/fcrash.cpp
index 7578184f269..96c973de10f 100644
--- a/src/mame/drivers/fcrash.cpp
+++ b/src/mame/drivers/fcrash.cpp
@@ -745,10 +745,10 @@ void cps_state::knightsb_map(address_map &map)
map(0x800004, 0x800005).nopw(); // writes 0000 here
map(0x800006, 0x800007).w(FUNC(cps_state::fcrash_soundlatch_w)); /* Sound command */
map(0x800018, 0x80001f).r(FUNC(cps_state::cps1_dsw_r)); /* System input ports / Dip Switches */
- map(0x800030, 0x800037).nopw(); //AM_WRITE(cps1_coinctrl_w) only writes bit 15
+ map(0x800030, 0x800037).nopw(); //.w(FUNC(cps_state::cps1_coinctrl_w)); only writes bit 15
map(0x800100, 0x80013f).ram().share("cps_a_regs"); /* CPS-A custom */
map(0x800140, 0x80017f).ram().share("cps_b_regs"); /* CPS-B custom */
- map(0x800180, 0x800181).nopw(); //AM_WRITE(cps1_soundlatch2_w) /* Sound timer fade */
+ map(0x800180, 0x800181).nopw(); //.w(FUNC(cps_state::cps1_soundlatch2_w)); /* Sound timer fade */
map(0x880000, 0x880001).nopw(); // unknown
map(0x900000, 0x93ffff).ram().w(FUNC(cps_state::cps1_gfxram_w)).share("gfxram");
map(0x980000, 0x98002f).w(FUNC(cps_state::knightsb_layer_w));
@@ -850,7 +850,7 @@ void cps_state::sf2mdt_map(address_map &map)
map(0x70c018, 0x70c01f).r(FUNC(cps_state::cps1_hack_dsw_r));
map(0x70c106, 0x70c107).w(FUNC(cps_state::cawingbl_soundlatch_w));
map(0x70d000, 0x70d001).nopw(); // writes FFFF
- //AM_RANGE(0x800030, 0x800031) AM_WRITE(cps1_coinctrl_w)
+ //map(0x800030, 0x800031).w(FUNC(cps_state::cps1_coinctrl_w));
map(0x800100, 0x80013f).ram().share("cps_a_regs"); /* CPS-A custom */
map(0x800140, 0x80017f).ram().share("cps_b_regs"); /* CPS-B custom */
map(0x900000, 0x92ffff).ram().w(FUNC(cps_state::cps1_gfxram_w)).share("gfxram");
@@ -866,7 +866,7 @@ void cps_state::sf2b_map(address_map &map)
map(0x70c018, 0x70c01f).r(FUNC(cps_state::cps1_hack_dsw_r));
map(0x70c106, 0x70c107).w(FUNC(cps_state::cawingbl_soundlatch_w));
map(0x70d000, 0x70d001).nopw(); // writes FFFF
- //AM_RANGE(0x800030, 0x800031) AM_WRITE(cps1_coinctrl_w)
+ //map(0x800030, 0x800031).w(FUNC(cps_state::cps1_coinctrl_w));
map(0x800100, 0x80013f).ram().share("cps_a_regs"); /* CPS-A custom */
map(0x800140, 0x80017f).rw(FUNC(cps_state::cps1_cps_b_r), FUNC(cps_state::cps1_cps_b_w)).share("cps_b_regs"); /* CPS-B custom */
map(0x900000, 0x92ffff).ram().w(FUNC(cps_state::cps1_gfxram_w)).share("gfxram");
@@ -910,13 +910,13 @@ void cps_state::wofabl_map(address_map &map)
void cps_state::slampic_map(address_map &map)
{
map(0x000000, 0x3fffff).rom();
- map(0x800006, 0x800007).nopw(); //AM_WRITE(cps1_soundlatch2_w)
+ map(0x800006, 0x800007).nopw(); //.w(FUNC(cps_state::cps1_soundlatch2_w));
map(0x800000, 0x800007).portr("IN1"); /* Player input ports */
map(0x800018, 0x80001f).r(FUNC(cps_state::cps1_dsw_r)); /* System input ports / Dip Switches */
map(0x800030, 0x800037).w(FUNC(cps_state::cps1_coinctrl_w));
map(0x800100, 0x80013f).w(FUNC(cps_state::cps1_cps_a_w)).share("cps_a_regs"); /* CPS-A custom */
map(0x800140, 0x80017f).rw(FUNC(cps_state::cps1_cps_b_r), FUNC(cps_state::cps1_cps_b_w)).share("cps_b_regs");
- map(0x880000, 0x880001).nopw(); //AM_WRITE(cps1_soundlatch_w) /* Sound command */
+ map(0x880000, 0x880001).nopw(); //.w(FUNC(cps_state::cps1_soundlatch_w)); /* Sound command */
map(0x900000, 0x92ffff).ram().w(FUNC(cps_state::cps1_gfxram_w)).share("gfxram");
map(0x980000, 0x98000d).w(FUNC(cps_state::slampic_layer_w));
map(0xf00000, 0xf0ffff).r(FUNC(cps_state::qsound_rom_r)); /* Slammasters protection */
diff --git a/src/mame/drivers/feversoc.cpp b/src/mame/drivers/feversoc.cpp
index e74e7820788..a570be10869 100644
--- a/src/mame/drivers/feversoc.cpp
+++ b/src/mame/drivers/feversoc.cpp
@@ -209,7 +209,7 @@ void feversoc_state::feversoc_map(address_map &map)
map(0x06000006, 0x06000007).w(FUNC(feversoc_state::feversoc_irq_ack));
map(0x06000008, 0x0600000b).r(FUNC(feversoc_state::in_r));
map(0x0600000d, 0x0600000d).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- //AM_RANGE(0x06010000, 0x0601007f) AM_DEVREADWRITE("obj", seibu_encrypted_sprite_device, read, write) AM_RAM
+ //map(0x06010000, 0x0601007f).rw("obj", FUNC(seibu_encrypted_sprite_device::read), FUNC(seibu_encrypted_sprite_device::write));
map(0x06010060, 0x06010063).nopw(); // sprite buffering
map(0x06018000, 0x06019fff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette");
}
diff --git a/src/mame/drivers/fgoal.cpp b/src/mame/drivers/fgoal.cpp
index c8031505a03..9ac20acc22c 100644
--- a/src/mame/drivers/fgoal.cpp
+++ b/src/mame/drivers/fgoal.cpp
@@ -142,13 +142,13 @@ READ8_MEMBER(fgoal_state::row_r)
WRITE8_MEMBER(fgoal_state::row_w)
{
m_row = data;
- m_mb14241->shift_data_w(space, 0, 0);
+ m_mb14241->shift_data_w(0);
}
WRITE8_MEMBER(fgoal_state::col_w)
{
m_col = data;
- m_mb14241->shift_count_w(space, 0, data);
+ m_mb14241->shift_count_w(data);
}
READ8_MEMBER(fgoal_state::address_hi_r)
@@ -163,14 +163,14 @@ READ8_MEMBER(fgoal_state::address_lo_r)
READ8_MEMBER(fgoal_state::shifter_r)
{
- uint8_t v = m_mb14241->shift_result_r(space, 0);
+ uint8_t v = m_mb14241->shift_result_r();
return bitswap<8>(v, 7, 6, 5, 4, 3, 2, 1, 0);
}
READ8_MEMBER(fgoal_state::shifter_reverse_r)
{
- uint8_t v = m_mb14241->shift_result_r(space, 0);
+ uint8_t v = m_mb14241->shift_result_r();
return bitswap<8>(v, 0, 1, 2, 3, 4, 5, 6, 7);
}
diff --git a/src/mame/drivers/finalizr.cpp b/src/mame/drivers/finalizr.cpp
index 7ad2e0eae59..0e94cf52187 100644
--- a/src/mame/drivers/finalizr.cpp
+++ b/src/mame/drivers/finalizr.cpp
@@ -108,7 +108,7 @@ void finalizr_state::main_map(address_map &map)
map(0x0001, 0x0001).writeonly().share("scroll");
map(0x0003, 0x0003).w(FUNC(finalizr_state::finalizr_videoctrl_w));
map(0x0004, 0x0004).w(FUNC(finalizr_state::finalizr_flipscreen_w));
-// AM_RANGE(0x0020, 0x003f) AM_WRITEONLY AM_SHARE("scroll")
+// map(0x0020, 0x003f).writeonly().share("scroll");
map(0x0800, 0x0800).portr("DSW3");
map(0x0808, 0x0808).portr("DSW2");
map(0x0810, 0x0810).portr("SYSTEM");
diff --git a/src/mame/drivers/firetrap.cpp b/src/mame/drivers/firetrap.cpp
index c5515c2b022..a2cac2946b8 100644
--- a/src/mame/drivers/firetrap.cpp
+++ b/src/mame/drivers/firetrap.cpp
@@ -676,8 +676,8 @@ ROM_START( firetrap )
ROM_LOAD( "di-17.10j", 0x08000, 0x8000, CRC(8605f6b9) SHA1(4fba88f34afd91d2cbc578b3b70f5399b8844390) )
ROM_LOAD( "di-18.12j", 0x10000, 0x8000, CRC(49508c93) SHA1(3812b0b1a33a1506d2896d2b676ed6aabb29dac0) )
- ROM_REGION( 0x1000, "mcu", 0 ) // created from japanese version, patched init byte
- ROM_LOAD( "di-12.16h", 0x00000, 0x1000, BAD_DUMP CRC(49eba102) SHA1(3c27117245b1f0b2bc995ddfae2cfb80be5f188b) )
+ ROM_REGION( 0x1000, "mcu", 0 ) /* 8751 protection MCU */
+ ROM_LOAD( "di-12.16h", 0x00000, 0x1000, CRC(6340a4d7) SHA1(3c896015a2416e3d664fedd07e42bdd40078c700) )
ROM_REGION( 0x02000, "gfx1", 0 ) /* characters */
ROM_LOAD( "di-03.17c", 0x00000, 0x2000, CRC(46721930) SHA1(a605fe993166e95c1602a35b548649ceae77bff2) )
@@ -740,8 +740,8 @@ ROM_START( firetrapa )
ROM_LOAD( "di-17.10j", 0x08000, 0x8000, CRC(8605f6b9) SHA1(4fba88f34afd91d2cbc578b3b70f5399b8844390) )
ROM_LOAD( "di-18.12j", 0x10000, 0x8000, CRC(49508c93) SHA1(3812b0b1a33a1506d2896d2b676ed6aabb29dac0) )
- ROM_REGION( 0x1000, "mcu", 0 ) // created from japanese version, patched init byte
- ROM_LOAD( "di-12.16h", 0x00000, 0x1000, BAD_DUMP CRC(49eba102) SHA1(3c27117245b1f0b2bc995ddfae2cfb80be5f188b) )
+ ROM_REGION( 0x1000, "mcu", 0 ) /* 8751 protection MCU */
+ ROM_LOAD( "di-12.16h", 0x00000, 0x1000, CRC(6340a4d7) SHA1(3c896015a2416e3d664fedd07e42bdd40078c700) )
ROM_REGION( 0x02000, "gfx1", 0 ) /* characters */
ROM_LOAD( "di-03.17c", 0x00000, 0x2000, CRC(46721930) SHA1(a605fe993166e95c1602a35b548649ceae77bff2) )
diff --git a/src/mame/drivers/fitfight.cpp b/src/mame/drivers/fitfight.cpp
index c89e2725519..0566ca682ec 100644
--- a/src/mame/drivers/fitfight.cpp
+++ b/src/mame/drivers/fitfight.cpp
@@ -152,7 +152,7 @@ void fitfight_state::fitfight_main_map(address_map &map)
// @0x000036bc/?: 0xF0FD when inserting coin
// @0x000037a6/0x000030e6: 0x??dd byte from 0xe08c05, 0xF101 then 0xF001/0xF157 then 0xF057
-// AM_RANGE(0x700000, 0x700001) AM_READ(xxxx) /* see init */
+// map(0x700000, 0x700001).r(FUNC(fitfight_state::xxxx)); /* see init */
map(0x700000, 0x700001).w(FUNC(fitfight_state::fitfight_700000_w)).share("fof_700000");
// kept at 0xe07900/0xe04c56
diff --git a/src/mame/drivers/flstory.cpp b/src/mame/drivers/flstory.cpp
index 1f885f91c68..aaef422b2b8 100644
--- a/src/mame/drivers/flstory.cpp
+++ b/src/mame/drivers/flstory.cpp
@@ -70,7 +70,7 @@ void flstory_state::flstory_map(address_map &map)
map(0xd000, 0xd000).rw(m_bmcu, FUNC(taito68705_mcu_device::data_r), FUNC(taito68705_mcu_device::data_w));
map(0xd805, 0xd805).r(FUNC(flstory_state::flstory_mcu_status_r));
-// AM_RANGE(0xda00, 0xda00) AM_WRITEONLY
+// map(0xda00, 0xda00).writeonly();
map(0xdcc0, 0xdcff).ram(); /* unknown */
map(0xdf03, 0xdf03).w(FUNC(flstory_state::flstory_gfxctrl_w));
}
@@ -78,9 +78,9 @@ void flstory_state::flstory_map(address_map &map)
void flstory_state::onna34ro_map(address_map &map)
{
base_map(map);
-// AM_RANGE(0xd000, 0xd000) AM_DEVREADWRITE("bmcu", taito68705_mcu_device, data_r, data_w)
-// AM_RANGE(0xd805, 0xd805) AM_READ(flstory_mcu_status_r)
-// AM_RANGE(0xda00, 0xda00) AM_WRITEONLY
+// map(0xd000, 0xd000).rw("bmcu", FUNC(taito68705_mcu_device::data_r), FUNC(taito68705_mcu_device::data_w));
+// map(0xd805, 0xd805).r(FUNC(flstory_state::flstory_mcu_status_r));
+// map(0xda00, 0xda00).writeonly();
map(0xdcc0, 0xdcff).ram(); /* unknown */
map(0xdf03, 0xdf03).w(FUNC(flstory_state::flstory_gfxctrl_w));
}
@@ -106,7 +106,7 @@ void flstory_state::victnine_map(address_map &map)
map(0xd805, 0xd805).portr("EXTRA_P1"); /* also mcu */
map(0xd807, 0xd807).portr("EXTRA_P2");
-// AM_RANGE(0xda00, 0xda00) AM_WRITEONLY
+// map(0xda00, 0xda00).writeonly();
map(0xdce0, 0xdce0).rw(FUNC(flstory_state::victnine_gfxctrl_r), FUNC(flstory_state::victnine_gfxctrl_w));
map(0xdce1, 0xdce1).nopw(); /* unknown */
}
@@ -118,9 +118,9 @@ void flstory_state::rumba_map(address_map &map)
map(0xd805, 0xd805).r(FUNC(flstory_state::flstory_mcu_status_r));
map(0xd807, 0xd807).portr("EXTRA_P2");
-// AM_RANGE(0xda00, 0xda00) AM_WRITEONLY
+// map(0xda00, 0xda00).writeonly();
map(0xdce0, 0xdce0).rw(FUNC(flstory_state::victnine_gfxctrl_r), FUNC(flstory_state::victnine_gfxctrl_w));
-// AM_RANGE(0xdce1, 0xdce1) AM_WRITENOP /* unknown */
+// map(0xdce1, 0xdce1).nopw(); /* unknown */
}
diff --git a/src/mame/drivers/fm7.cpp b/src/mame/drivers/fm7.cpp
index dc6b256e815..9c44273965a 100644
--- a/src/mame/drivers/fm7.cpp
+++ b/src/mame/drivers/fm7.cpp
@@ -1555,7 +1555,7 @@ void fm7_state::fm11_sub_mem(address_map &map)
map(0x9000, 0x9f7f).ram(); // Work RAM(?)
map(0x9f80, 0x9fff).ram().share("shared_ram");
map(0xafe0, 0xafe3).ram();
-// AM_RANGE(0xafe4,0xafe4) AM_READWRITE(fm7_sub_busyflag_r,fm7_sub_busyflag_w)
+// map(0xafe4, 0xafe4).rw(FUNC(fm7_state::fm7_sub_busyflag_r), FUNC(fm7_state::fm7_sub_busyflag_w));
map(0xafe6, 0xafe6).rw(FUNC(fm7_state::fm77av_video_flags_r), FUNC(fm7_state::fm77av_video_flags_w));
map(0xaff0, 0xaff0).rw(FUNC(fm7_state::fm7_sub_busyflag_r), FUNC(fm7_state::fm7_sub_busyflag_w));
map(0xc000, 0xffff).rom(); // sybsystem ROM
@@ -1599,15 +1599,15 @@ void fm7_state::fm16_io(address_map &map)
map(0xfd03, 0xfd03).rw(FUNC(fm7_state::fm7_irq_cause_r), FUNC(fm7_state::fm7_beeper_w)); // IRQ flags
map(0xfd04, 0xfd04).r(FUNC(fm7_state::fm7_fd04_r));
map(0xfd05, 0xfd05).rw(FUNC(fm7_state::fm7_subintf_r), FUNC(fm7_state::fm7_subintf_w));
-// AM_RANGE(0xfd06,0xfd0c) AM_READ8(fm7_unknown_r,0xffff)
+// map(0xfd06, 0xfd0c).r(FUNC(fm7_state::fm7_unknown_r));
map(0xfd0f, 0xfd0f).rw(FUNC(fm7_state::fm7_rom_en_r), FUNC(fm7_state::fm7_rom_en_w));
-// AM_RANGE(0xfd10,0xfd17) AM_READ8(fm7_unknown_r,0xffff)
+// map(0xfd10, 0xfd17).r(FUNC(fm7_state::fm7_unknown_r));
map(0xfd18, 0xfd1f).rw(FUNC(fm7_state::fm7_fdc_r), FUNC(fm7_state::fm7_fdc_w));
map(0xfd20, 0xfd23).rw(FUNC(fm7_state::fm7_kanji_r), FUNC(fm7_state::fm7_kanji_w));
-// AM_RANGE(0xfd24,0xfd36) AM_READ8(fm7_unknown_r,0xffff)
+// map(0xfd24, 0xfd36).r(FUNC(fm7_state::fm7_unknown_r));
map(0xfd37, 0xfd37).w(FUNC(fm7_state::fm7_multipage_w));
map(0xfd38, 0xfd3f).rw(FUNC(fm7_state::fm7_palette_r), FUNC(fm7_state::fm7_palette_w));
-// AM_RANGE(0xfd40,0xfdff) AM_READ8(fm7_unknown_r,0xffff)
+// map(0xfd40, 0xfdff).r(FUNC(fm7_state::fm7_unknown_r));
}
void fm7_state::fm16_sub_mem(address_map &map)
diff --git a/src/mame/drivers/fmtowns.cpp b/src/mame/drivers/fmtowns.cpp
index 5b57ecc183a..3da5669278a 100644
--- a/src/mame/drivers/fmtowns.cpp
+++ b/src/mame/drivers/fmtowns.cpp
@@ -30,6 +30,59 @@
*/
+/*
+
+Regular models:
+
+ Model | Form factor | CPU | Standard RAM | Max RAM | Standard FDDs | Standard HDD
+FM Towns 1/2 | Tower | 386DX-16 | 1 MB (1) or 2 MB (2) | 6 MB | 1 or 2 | No SCSI controller
+FM Towns 1F/2F/1H/2H | Tower | 386DX-16 | 1 MB (1F/1H) or 2 MB (2F/2H) | 8 MB | 1 (1F) or 2 (others) | 20 or 40 MB (H models only)
+FM Towns 10F/20F/40H/80H | Tower | 386DX-16 | 2 MB | 26 MB | 1 (10F) or 2 (others) | 40 or 85 MB (H models only)
+FM Towns II CX10/20/40/100 | Tower | 386DX-16 | 2 MB | 26 MB | 1 (CX10) or 2 (others) | No (CX10/20), 40 or 100 MB
+FM Towns II UX10/20/40 | All-in-one | 386SX-16 | 2 MB | 10 MB | 1 (UX10) or 2 (others) | No (UX10/20) or 40 MB
+FM Towns II HG20/40/100 | Desktop | 386DX-20 | 2 MB | 26 MB | 2 | No (HG20), 40 or 80 MB
+FM Towns II HR20/100/200 | Desktop | 486SX-20 | 4 MB | 28 MB | 2 | No (HR20) 100 or 200 MB
+FM Towns II UG10/20/40/80 | All-in-one | 386SX-20 | 2 MB | 10 MB | 1 (UG10) or 2 (others) | No (UG10/20), 40 or 80 MB
+FM Towns II UR20/40/80 | All-in-one | 486SX-20 | 2 MB | 10 MB | 2 | No (UG20), 40 or 80 MB
+FM Towns II ME20/170 | Desktop | 486SX-25 | 2 MB | 66 MB | 2 | No (ME20) or 170 MB
+FM Towns II MA170/340 | Desktop | 486SX-33 | 4 MB | 100 MB | 2 | 170 or 340 MB
+FM Towns II MX20/170/340 | Desktop | 486DX2-66 | 4 MB | 100 MB | 2 | No (MX20), 170 or 340 MB
+FM Towns II Fresh/MF20/MF170W | Desktop | 486SX-33 | 4 MB (MF20) or 6 MB (others) | 68 MB | 2 | No (MF20), or 170 (others)
+FM Towns II MA170W/MA340W | Desktop | 486SX-33 | 8 MB | 100 MB | 2 | 170 or 340 MB
+FM Towns II MX170W/MA340W | Desktop | 486DX2-66 | 8 MB | 100 MB | 2 | 170 or 340 MB
+FM Towns II Fresh-TV | Desktop | 486SX-33 | 6 MB | 68 MB | 2 | 170 MB
+FM Towns II Fresh-E | Desktop | 486DX2-66 | 8 MB | 72 MB | 2 | 260 MB
+FM Towns II Fresh-T | Desktop | 486SX-33 | 8 MB | 72 MB | 2 | 260 MB
+FM Towns II EA2 | Desktop | 486SX-33 | 4 MB | 68 MB | 2 | No
+FM Towns II HA2/HA53 | Desktop | 486DX2-66 | 4 MB (HA2) or 8 MB (HA53) | 100 MB | 2 | No (HA2) or 530 MB
+FM Towns II HB2/HB53/HB53M | Desktop | Pentium-60 | 8 MB | 136 MB | 2 | No (HB2) or 530 MB
+FM Towns II Fresh-ES/Fresh-ET | Desktop | 486DX2-66 | 8 MB | 72 MB | 1 | 360 MB
+FM Towns II HC53/HC53M | Desktop | Pentium-90 | 8 MB | 136 MB | 1 | 540 MB
+FM Towns II Fresh-FS/Fresh-FT | Desktop | 486DX4-100 | 8 MB | 72 MB | 1 | 540 MB
+FM Towns Marty/Marty 2/TC Marty | Console | 386SX-16 | 2 MB | 4 MB | 1 | No SCSI controller
+Car Marty | Car-mounted | 386SX-16 | 2 MB | ? | No | No SCSI controller
+
+Education models:
+
+ Model | Form factor | CPU | Standard RAM | Max RAM | Standard FDDs | Standard HDD
+FM Towns S1/S2 | Tower | 386DX-16 | 1 MB (S1) or 2 MB (S2) | 6 MB | 1 or 2 | No SCSI controller
+FM Towns SF/SH | Tower | 386DX-16 | 1 MB (1F/1H) or 2 MB (2F/2H) | 8 MB | 2 | No (SF) or 40 MB
+FM Towns SF2/SH2 | Tower | 386DX-16 | 2 MB | 26 MB | 2 | No (SF2) or 40 MB
+FM Towns II SG20/40 | Desktop | 386DX-20 | 2 MB | 26 MB | 2 | No (SG20) or 40 MB
+FM Towns II SR20/100 | Desktop | 486SX-20 | 4 MB | 28 MB | 2 | No (SR20) or 100 MB
+FM Towns II SE | Desktop | 486SX-25 | 2 MB | 66 MB | 2 | No
+FM Towns II SA | Desktop | 486SX-33 | 4 MB | 100 MB | 2 | No
+FM Towns II SF20/SF170W | Desktop | 486SX-33 | 4 MB (SF20) or 6 MB (SF170W) | 100 MB | 2 | No (SF20) or 170 MB
+FM Towns II SA170W | Desktop | 486SX-33 | 8 MB | 100 MB | 2 | 170 MB
+FM Towns II SI2/SI26 | Desktop | 486SX-33 | 4 MB (SI2) or 8 MB (SI26) | 68 MB | 2 | No (SI2) or 260 MB
+FM Towns II SJ2/SJ26 | Desktop | 486DX2-66 | 4 MB (SJ2) or 8 MB (SJ26) | 68 MB | 2 | No (SJ2) or 260 MB
+FM Towns II SK53 | Desktop | Pentium-60 | 8 MB | 136 MB | 2 | 530 MB
+FM Towns II SN | Laptop | 486DX2-66 | 4 MB | 36 MB | 1 | 340 MB
+FM Towns II SJ2A/SJ53 | Desktop | 486DX2-66 | 4 MB (SJ2A) or 8 MB (SJ53) | 68 MB | 2 | No (SJ2A) or 530 MB
+FM Towns II SL53 | Desktop | Pentium-90 | 8 MB | 136 MB | 2 | 530 MB
+
+*/
+
/* I/O port map (incomplete, could well be incorrect too)
*
* 0x0000 : Master 8259 PIC
@@ -2235,7 +2288,7 @@ void towns_state::ux_mem(address_map &map)
map(0x000da000, 0x000effff).ram(); //READWRITE(SMH_BANK(11),SMH_BANK(11))
map(0x000f0000, 0x000f7fff).ram(); //READWRITE(SMH_BANK(12),SMH_BANK(12))
map(0x000f8000, 0x000fffff).bankr("bank_f8000_r").bankw("bank_f8000_w");
-// AM_RANGE(0x00680000, 0x0087ffff) AM_ROM AM_REGION("user",0x280000) // EX ROM
+// map(0x00680000, 0x0087ffff).rom().region("user",0x280000); // EX ROM
map(0x00a00000, 0x00a7ffff).rw(FUNC(towns_state::towns_gfx_high_r), FUNC(towns_state::towns_gfx_high_w)).mirror(0x180000); // VRAM
map(0x00b00000, 0x00b7ffff).rw(FUNC(towns_state::towns_gfx_packed_r), FUNC(towns_state::towns_gfx_packed_w)).mirror(0x80000); // VRAM
map(0x00c00000, 0x00c1ffff).rw(FUNC(towns_state::towns_spriteram_r), FUNC(towns_state::towns_spriteram_w)); // Sprite RAM
@@ -2299,7 +2352,7 @@ void towns_state::towns_io(address_map &map)
// CMOS
map(0x3000, 0x4fff).rw(FUNC(towns_state::towns_cmos_r), FUNC(towns_state::towns_cmos_w)).umask32(0x00ff00ff);
// Something (MS-DOS wants this 0x41ff to be 1)
- //AM_RANGE(0x41fc,0x41ff) AM_READ8(towns_41ff_r,0xff000000)
+ //map(0x41fc,0x41ff).r(FUNC(towns_state::towns_41ff_r)).umask32(0xff000000);
// CRTC / Video (again)
map(0xfd90, 0xfda3).rw(FUNC(towns_state::towns_video_fd90_r), FUNC(towns_state::towns_video_fd90_w));
map(0xff80, 0xffff).rw(FUNC(towns_state::towns_video_cff80_r), FUNC(towns_state::towns_video_cff80_w));
@@ -2363,7 +2416,7 @@ void towns_state::towns16_io(address_map &map)
// CMOS
map(0x3000, 0x4fff).rw(FUNC(towns_state::towns_cmos_r), FUNC(towns_state::towns_cmos_w)).umask16(0x00ff);
// Something (MS-DOS wants this 0x41ff to be 1)
- //AM_RANGE(0x41fc,0x41ff) AM_READ8(towns_41ff_r,0xff000000)
+ //map(0x41fc,0x41ff).r(FUNC(towns_state::towns_41ff_r)).umask32(0xff000000);
// CRTC / Video (again)
map(0xfd90, 0xfda3).rw(FUNC(towns_state::towns_video_fd90_r), FUNC(towns_state::towns_video_fd90_w));
map(0xff80, 0xffff).rw(FUNC(towns_state::towns_video_cff80_r), FUNC(towns_state::towns_video_cff80_w));
@@ -2865,10 +2918,8 @@ void towns_state::towns_base(machine_config &config)
FMT_ICMEM(config, m_icmemcard, 0);
- /*
- First-generation models: 1 MB onboard, 3 SIMM slots with 1 or 2 MB each, except slot 1 (limited to 1 MB).
- Model 2 comes with a 1 MB SIMM preinstalled on slot 1, Model 1 doesn't.
- */
+ /* First-generation models: 1 MB onboard, 3 SIMM slots with 1 or 2 MB each, except slot 1 (limited to 1 MB).
+ Model 2 comes with a 1 MB SIMM preinstalled on slot 1, Model 1 doesn't. */
RAM(config, m_ram).set_default_size("2M").set_extra_options("1M,3M,4M,5M,6M");
MSM58321(config, m_rtc, 32768_Hz_XTAL);
@@ -3004,24 +3055,27 @@ void marty_state::marty(machine_config &config)
}
/* ROM definitions */
-/* It is unknown exactly what model these ROM were dumped from, but it is certainly a newer model, as it won't
- * boot without the freerun timer, which was added in the FM-Towns II HG, HR, UG and later. */
+
+/* These ROMs were dumped from an FM Towns Model 2. Model 1 is assumed to use the same ROMs, since they were
+ released at the same time, and the only differences are the amount of RAM and floppy drives.
+
+ The ROM is physically contained in three 4 Mbit chips: two MB834200-20 (DIP40) and one MB834200-25 (QFP44) */
ROM_START( fmtowns )
ROM_REGION32_LE( 0x280000, "user", 0)
ROM_LOAD("fmt_dos.rom", 0x000000, 0x080000, CRC(112872ee) SHA1(57fd146478226f7f215caf63154c763a6d52165e) )
- ROM_LOAD("fmt_f20.rom", 0x080000, 0x080000, CRC(9f55a20c) SHA1(1920711cb66340bb741a760de187de2f76040b8c) )
- ROM_LOAD("fmt_dic.rom", 0x100000, 0x080000, CRC(82d1daa2) SHA1(7564020dba71deee27184824b84dbbbb7c72aa4e) )
- ROM_LOAD("fmt_fnt.rom", 0x180000, 0x040000, CRC(dd6fd544) SHA1(a216482ea3162f348fcf77fea78e0b2e4288091a) )
- ROM_LOAD("fmt_sys.rom", 0x200000, 0x040000, CRC(afe4ebcf) SHA1(4cd51de4fca9bd7a3d91d09ad636fa6b47a41df5) )
+ ROM_LOAD("fmt_dic.rom", 0x100000, 0x080000, CRC(b314c659) SHA1(3959c4c6be540252cabea06847bcd408f1911cfb) )
+ ROM_LOAD("fmt_fnt.rom", 0x180000, 0x040000, CRC(955c6b75) SHA1(fa5f7a18060afa35678dcbdc3589a1455aba26dc) )
+ ROM_LOAD("fmt_sys.rom", 0x200000, 0x040000, CRC(53319e23) SHA1(15d9cc705f3534fe97a2386e4d4848a1602cc534) )
ROM_END
-/* likely an older set, as it runs without needing the freerun timer. Font ROM appears to be corrupt, though. */
-ROM_START( fmtownsa )
+/* System ROM has a date of 91/07/09 and matches the UX set, but the dictionary ROM is completely different. It could be from an FM Towns II CX.
+ Font ROM appears to be corrupt, though. */
+ROM_START( fmtownsv03 )
ROM_REGION32_LE( 0x280000, "user", 0)
ROM_LOAD("fmt_dos_a.rom", 0x000000, 0x080000, CRC(22270e9f) SHA1(a7e97b25ff72b14121146137db8b45d6c66af2ae) )
ROM_LOAD("fmt_f20_a.rom", 0x080000, 0x080000, CRC(75660aac) SHA1(6a521e1d2a632c26e53b83d2cc4b0edecfc1e68c) )
ROM_LOAD("fmt_dic_a.rom", 0x100000, 0x080000, CRC(74b1d152) SHA1(f63602a1bd67c2ad63122bfb4ffdaf483510f6a8) )
- ROM_LOAD("fmt_fnt_a.rom", 0x180000, 0x040000, CRC(0108a090) SHA1(1b5dd9d342a96b8e64070a22c3a158ca419894e1) )
+ ROM_LOAD("fmt_fnt_a.rom", 0x180000, 0x040000, CRC(0108a090) SHA1(1b5dd9d342a96b8e64070a22c3a158ca419894e1) BAD_DUMP )
ROM_LOAD("fmt_sys_a.rom", 0x200000, 0x040000, CRC(92f3fa67) SHA1(be21404098b23465d24c4201a81c96ac01aff7ab) )
ROM_END
@@ -3127,14 +3181,14 @@ ROM_END
/* Driver */
-/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
-COMP( 1989, fmtowns, 0, 0, towns, towns, towns_state, empty_init, "Fujitsu", "FM-Towns", MACHINE_NOT_WORKING)
-COMP( 1989, fmtownsa, fmtowns, 0, towns, towns, towns_state, empty_init, "Fujitsu", "FM-Towns (alternate)", MACHINE_NOT_WORKING)
-COMP( 1991, fmtownsux, fmtowns, 0, townsux, towns, towns16_state, empty_init, "Fujitsu", "FM-Towns II UX", MACHINE_NOT_WORKING)
-COMP( 1992, fmtownshr, fmtowns, 0, townshr, towns, towns_state, empty_init, "Fujitsu", "FM-Towns II HR", MACHINE_NOT_WORKING)
-COMP( 1993, fmtownsmx, fmtowns, 0, townsmx, towns, towns_state, empty_init, "Fujitsu", "FM-Towns II MX", MACHINE_NOT_WORKING)
-COMP( 1994, fmtownsftv, fmtowns, 0, townsftv, towns, towns_state, empty_init, "Fujitsu", "FM-Towns II FreshTV", MACHINE_NOT_WORKING)
-COMP( 19??, fmtownssj, fmtowns, 0, townssj, towns, towns_state, empty_init, "Fujitsu", "FM-Towns II SJ", MACHINE_NOT_WORKING)
-CONS( 1993, fmtmarty, 0, 0, marty, marty, marty_state, empty_init, "Fujitsu", "FM-Towns Marty", MACHINE_NOT_WORKING)
-CONS( 1993, fmtmarty2, fmtmarty, 0, marty, marty, marty_state, empty_init, "Fujitsu", "FM-Towns Marty 2", MACHINE_NOT_WORKING)
-CONS( 1994, carmarty, fmtmarty, 0, marty, marty, marty_state, empty_init, "Fujitsu", "FM-Towns Car Marty", MACHINE_NOT_WORKING)
+/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
+COMP( 1989, fmtowns, 0, 0, towns, towns, towns_state, empty_init, "Fujitsu", "FM-Towns (Model 1 / 2)", MACHINE_NOT_WORKING)
+COMP( 1991, fmtownsv03, fmtowns, 0, towns, towns, towns_state, empty_init, "Fujitsu", "FM-Towns (unknown, V03 L01 00 91/07/09)", MACHINE_NOT_WORKING)
+COMP( 1991, fmtownsux, fmtowns, 0, townsux, towns, towns16_state, empty_init, "Fujitsu", "FM-Towns II UX", MACHINE_NOT_WORKING)
+COMP( 1992, fmtownshr, fmtowns, 0, townshr, towns, towns_state, empty_init, "Fujitsu", "FM-Towns II HR", MACHINE_NOT_WORKING)
+COMP( 1993, fmtownsmx, fmtowns, 0, townsmx, towns, towns_state, empty_init, "Fujitsu", "FM-Towns II MX", MACHINE_NOT_WORKING)
+COMP( 1994, fmtownsftv, fmtowns, 0, townsftv, towns, towns_state, empty_init, "Fujitsu", "FM-Towns II FreshTV", MACHINE_NOT_WORKING)
+COMP( 19??, fmtownssj, fmtowns, 0, townssj, towns, towns_state, empty_init, "Fujitsu", "FM-Towns II SJ", MACHINE_NOT_WORKING)
+CONS( 1993, fmtmarty, 0, 0, marty, marty, marty_state, empty_init, "Fujitsu", "FM-Towns Marty", MACHINE_NOT_WORKING)
+CONS( 1993, fmtmarty2, fmtmarty, 0, marty, marty, marty_state, empty_init, "Fujitsu", "FM-Towns Marty 2", MACHINE_NOT_WORKING)
+CONS( 1994, carmarty, fmtmarty, 0, marty, marty, marty_state, empty_init, "Fujitsu", "FM-Towns Car Marty", MACHINE_NOT_WORKING)
diff --git a/src/mame/drivers/force68k.cpp b/src/mame/drivers/force68k.cpp
index b39eced31f0..1002f3d9eae 100644
--- a/src/mame/drivers/force68k.cpp
+++ b/src/mame/drivers/force68k.cpp
@@ -231,16 +231,16 @@ void force68k_state::force68k_mem(address_map &map)
map.unmap_value_high();
map(0x000000, 0x000007).rom().r(FUNC(force68k_state::bootvect_r)); /* Vectors mapped from System EPROM */
map(0x000008, 0x01ffff).ram(); /* DRAM CPU-1B */
-//AM_RANGE (0x020000, 0x07ffff) AM_RAM /* Additional DRAM CPU-1D */
+// map(0x020000, 0x07ffff).ram(); /* Additional DRAM CPU-1D */
map(0x080000, 0x083fff).rom(); /* System EPROM Area 16Kb DEBUGGER supplied as default on CPU-1B/D */
map(0x084000, 0x09ffff).rom(); /* System EPROM Area 112Kb additional space for System ROM */
-//AM_RANGE (0x0a0000, 0x0bffff) AM_ROM /* User EPROM/SRAM Area, max 128Kb mapped by a cartslot */
+// map(0x0a0000, 0x0bffff).rom(); /* User EPROM/SRAM Area, max 128Kb mapped by a cartslot */
map(0x0c0040, 0x0c0043).rw(m_aciahost, FUNC(acia6850_device::read), FUNC(acia6850_device::write)).umask16(0x00ff);
map(0x0c0080, 0x0c0083).rw(m_aciaterm, FUNC(acia6850_device::read), FUNC(acia6850_device::write)).umask16(0xff00);
map(0x0c0100, 0x0c0103).rw(m_aciaremt, FUNC(acia6850_device::read), FUNC(acia6850_device::write)).umask16(0x00ff);
map(0x0c0400, 0x0c042f).rw(m_rtc, FUNC(mm58167_device::read), FUNC(mm58167_device::write)).umask16(0x00ff);
map(0x0e0000, 0x0e0035).rw(m_pit, FUNC(pit68230_device::read), FUNC(pit68230_device::write)).umask16(0x00ff);
-//AM_RANGE(0x0e0200, 0x0e0380) AM_READWRITE(fpu_r, fpu_w) /* optional FPCP 68881 FPU interface */
+// map(0x0e0200, 0x0e0380).rw(FUNC(force68k_state::fpu_r), FUNC(force68k_state::fpu_w)); /* optional FPCP 68881 FPU interface */
map(0x100000, 0xfeffff).rw(FUNC(force68k_state::vme_a24_r), FUNC(force68k_state::vme_a24_w)); /* VMEbus Rev B addresses (24 bits) */
map(0xff0000, 0xffffff).rw(FUNC(force68k_state::vme_a16_r), FUNC(force68k_state::vme_a16_w)); /* VMEbus Rev B addresses (16 bits) */
}
diff --git a/src/mame/drivers/forte2.cpp b/src/mame/drivers/forte2.cpp
index 68a74089f7a..95ba1f28fa6 100644
--- a/src/mame/drivers/forte2.cpp
+++ b/src/mame/drivers/forte2.cpp
@@ -84,8 +84,8 @@ void forte2_state::io_mem(address_map &map)
map(0x98, 0x99).rw("tms9928a", FUNC(tms9928a_device::read), FUNC(tms9928a_device::write));
map(0xa0, 0xa1).w("aysnd", FUNC(ay8910_device::address_data_w));
map(0xa2, 0xa2).r("aysnd", FUNC(ay8910_device::data_r));
-// AM_RANGE(0xa8, 0xa8) AM_RAM // Ports a8-ab are originally for communicating with the i8255 PPI on MSX.
-// AM_RANGE(0xa9, 0xab) AM_NOP // Since this arcade board doesn't have one, those ports should be unmapped.
+// map(0xa8, 0xa8).ram(); // Ports a8-ab are originally for communicating with the i8255 PPI on MSX.
+// map(0xa9, 0xab).noprw(); // Since this arcade board doesn't have one, those ports should be unmapped.
}
static INPUT_PORTS_START( pesadelo )
diff --git a/src/mame/drivers/fortecar.cpp b/src/mame/drivers/fortecar.cpp
index b523dc3c73c..04166a54623 100644
--- a/src/mame/drivers/fortecar.cpp
+++ b/src/mame/drivers/fortecar.cpp
@@ -558,7 +558,7 @@ void fortecar_state::fortecar_ports(address_map &map)
map(0x40, 0x40).r("aysnd", FUNC(ay8910_device::data_r));
map(0x40, 0x41).w("aysnd", FUNC(ay8910_device::address_data_w));
map(0x60, 0x63).rw("fcppi0", FUNC(i8255_device::read), FUNC(i8255_device::write));//M5L8255AP
-// AM_RANGE(0x80, 0x81) //8251A UART
+// map(0x80, 0x81) //8251A UART
map(0xa0, 0xa0).rw("rtc", FUNC(v3021_device::read), FUNC(v3021_device::write));
map(0xa1, 0xa1).portr("DSW");
}
diff --git a/src/mame/drivers/fp1100.cpp b/src/mame/drivers/fp1100.cpp
index 5ae43e54d2a..0122438e1ed 100644
--- a/src/mame/drivers/fp1100.cpp
+++ b/src/mame/drivers/fp1100.cpp
@@ -23,10 +23,7 @@
The keyboard is a separate unit. It contains a beeper.
TODO:
- - irq sources and communications; subcpu never enables its interrupts.
- unimplemented instruction PER triggered (can be ignored)
- - Most of this code is guesswork, because although schematics exist,
- they are too blurry to read.
- Display can be interlaced or non-interlaced. Interlaced not emulated.
- Cassette Load is quite complex, using 6 pins of the sub-cpu. Not done.
- subcpu is supposed to be in WAIT except in horizontal blanking period.
@@ -100,10 +97,11 @@ private:
void io_map(address_map &map);
void main_map(address_map &map);
void sub_map(address_map &map);
+ void handle_int_to_main();
uint8_t m_irq_mask;
- uint8_t m_main_latch;
- uint8_t m_sub_latch;
+ uint8_t m_latch_main_to_sub;
+ uint8_t m_latch_sub_to_main;
uint8_t m_slot_num;
uint8_t m_kbd_row;
uint8_t m_col_border;
@@ -111,6 +109,8 @@ private:
uint8_t m_col_display;
uint8_t m_centronics_busy;
uint8_t m_cass_data[4];
+ bool m_main_irq_status;
+ bool m_sub_irq_status;
bool m_cassbit;
bool m_cassold;
@@ -183,27 +183,40 @@ WRITE8_MEMBER( fp1100_state::main_bank_w )
m_slot_num = (m_slot_num & 3) | ((data & 1) << 2); //??
}
+// tell sub that latch has a byte
WRITE8_MEMBER( fp1100_state::irq_mask_w )
{
- machine().scheduler().synchronize(); // force resync
m_irq_mask = data;
- if (BIT(data, 7))
+ handle_int_to_main();
+
+ if (BIT(data, 7) && !m_sub_irq_status)
+ {
m_subcpu->set_input_line(UPD7810_INTF2, ASSERT_LINE);
+ LOG("%s: Sub IRQ asserted\n",machine().describe_context());
+ m_sub_irq_status = true;
+ }
+ else
+ if (!BIT(data, 7) && m_sub_irq_status)
+ {
+ m_subcpu->set_input_line(UPD7810_INTF2, CLEAR_LINE);
+ LOG("%s: Sub IRQ cleared\n",machine().describe_context());
+ m_sub_irq_status = false;
+ }
+
LOG("%s: IRQmask=%X\n",machine().describe_context(),data);
}
+// send byte from main to latch
WRITE8_MEMBER( fp1100_state::main_to_sub_w )
{
- m_sub_latch = data;
LOG("%s: From main:%X\n",machine().describe_context(),data);
-// m_subcpu->set_input_line(UPD7810_INTF2, ASSERT_LINE);
+ m_latch_main_to_sub = data;
}
READ8_MEMBER( fp1100_state::sub_to_main_r )
{
- m_maincpu->set_input_line(0, CLEAR_LINE);
- LOG("%s: To main:%X\n",machine().describe_context(),m_main_latch);
- return m_main_latch;
+ LOG("%s: To main:%X\n",machine().describe_context(),m_latch_sub_to_main);
+ return m_latch_sub_to_main;
}
WRITE8_MEMBER( fp1100_state::slot_bank_w )
@@ -227,7 +240,7 @@ void fp1100_state::main_map(address_map &map)
void fp1100_state::io_map(address_map &map)
{
map.unmap_value_high();
- //AM_RANGE(0x0000, 0xfeff) slot memory area
+ //map(0x0000, 0xfeff) slot memory area
map(0xff00, 0xff7f).rw(FUNC(fp1100_state::slot_id_r), FUNC(fp1100_state::slot_bank_w));
map(0xff80, 0xffff).r(FUNC(fp1100_state::sub_to_main_r));
map(0xff80, 0xff9f).w(FUNC(fp1100_state::irq_mask_w));
@@ -237,16 +250,15 @@ void fp1100_state::io_map(address_map &map)
READ8_MEMBER( fp1100_state::main_to_sub_r )
{
- m_subcpu->set_input_line(UPD7810_INTF2, CLEAR_LINE);
- LOG("%s: To sub:%X\n",machine().describe_context(),m_sub_latch);
- return m_sub_latch;
+ LOG("%s: To sub:%X\n",machine().describe_context(),m_latch_main_to_sub);
+ return m_latch_main_to_sub;
}
+// send byte from sub to latch
WRITE8_MEMBER( fp1100_state::sub_to_main_w )
{
- m_main_latch = data;
+ m_latch_sub_to_main = data;
LOG("%s: From sub:%X\n",machine().describe_context(),data);
- //m_maincpu->set_input_line_and_vector(0, ASSERT_LINE, 0xf0); // Z80
}
/*
@@ -278,7 +290,7 @@ d6,7 - not used
*/
WRITE8_MEMBER( fp1100_state::kbd_row_w )
{
- m_kbd_row = data & 15;
+ m_kbd_row = data;
m_beep->set_state(BIT(data, 4));
}
@@ -290,7 +302,7 @@ void fp1100_state::sub_map(address_map &map)
map(0xe001, 0xe001).mirror(0x3fe).rw(m_crtc, FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
map(0xe400, 0xe7ff).portr("DSW").w(FUNC(fp1100_state::kbd_row_w));
map(0xe800, 0xebff).rw(FUNC(fp1100_state::main_to_sub_r), FUNC(fp1100_state::sub_to_main_w));
- //AM_RANGE(0xec00, 0xefff) "Acknowledge of INT0" is coded in but isn't currently executed
+ map(0xec00, 0xefff).lw8("reset0", [this] (u8 data) { m_subcpu->set_input_line(UPD7810_INTF0, CLEAR_LINE); });
map(0xf000, 0xf3ff).w(FUNC(fp1100_state::colour_control_w));
map(0xf400, 0xff7f).rom().region("sub_ipl", 0x2400);
}
@@ -314,9 +326,13 @@ WRITE8_MEMBER( fp1100_state::porta_w )
READ8_MEMBER( fp1100_state::portb_r )
{
- uint8_t data = m_keyboard[m_kbd_row]->read() ^ 0xff;
- //m_subcpu->set_input_line(UPD7810_INTF0, BIT(data, 7) ? HOLD_LINE : CLEAR_LINE);
- return data;
+ u8 data = m_keyboard[m_kbd_row & 15]->read() ^ 0xff;
+ LOG("%s: PortB:%X:%X\n",machine().describe_context(),m_kbd_row,data);
+ //m_subcpu->set_input_line(UPD7810_INTF0, BIT(data, 7) ? ASSERT_LINE : CLEAR_LINE);
+ if (BIT(m_kbd_row, 5))
+ return data;
+ else
+ return 0;
}
/*
@@ -339,20 +355,42 @@ d6 - Centronics strobe
WRITE8_MEMBER( fp1100_state::portc_w )
{
u8 bits = data ^ m_upd7801.portc;
+ m_upd7801.portc = data;
+
if (BIT(bits, 3))
- if (BIT(m_irq_mask, 4))
- if (!BIT(data, 3))
- {
- m_maincpu->set_input_line_and_vector(0, ASSERT_LINE, 0xf0); // Z80
- LOG("%s: PortC:%X\n",machine().describe_context(),data);
- }
+ {
+ LOG("%s: PortC:%X\n",machine().describe_context(),data);
+ handle_int_to_main();
+ }
if (BIT(bits, 5))
m_cass->change_state(BIT(data, 5) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED, CASSETTE_MASK_MOTOR);
if (BIT(bits, 6))
m_centronics->write_strobe(BIT(data, 6));
- m_upd7801.portc = data;
}
+// HOLD_LINE used because the interrupt is set and cleared by successive instructions, too fast for the maincpu to notice
+void fp1100_state::handle_int_to_main()
+{
+ // IRQ is on if bit 4 of mask AND bit 3 portC
+ if (BIT(m_upd7801.portc, 3) && BIT(m_irq_mask, 4))
+ {
+ if (!m_main_irq_status)
+ {
+ m_maincpu->set_input_line(0, HOLD_LINE);
+ LOG("%s: Main IRQ asserted\n",machine().describe_context());
+// m_main_irq_status = true;
+ }
+ }
+ else
+ {
+ if (m_main_irq_status)
+ {
+// m_maincpu->set_input_line(0, CLEAR_LINE);
+// LOG("%s: Main IRQ cleared\n",machine().describe_context());
+ m_main_irq_status = false;
+ }
+ }
+}
/* Input ports */
static INPUT_PORTS_START( fp1100 )
@@ -361,8 +399,9 @@ static INPUT_PORTS_START( fp1100 )
PORT_START("KEY.1")
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Break")
- PORT_BIT(0x70, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE PORT_NAME("Caps")
+ PORT_BIT(0x60, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PGUP) PORT_NAME("Kanji") // guess, it's in Japanese
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CAPSLOCK) PORT_NAME("Caps")
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LALT) PORT_NAME("Graph")
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_NAME("Ctrl")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("Shift") PORT_CHAR(UCHAR_SHIFT_1)
@@ -478,13 +517,13 @@ static INPUT_PORTS_START( fp1100 )
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_NAME(":") PORT_CHAR(':') PORT_CHAR('*')
PORT_START("KEY.13")
- PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED) // Capslock LED on
PORT_START("KEY.14")
- PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED) // Kanji LED on
PORT_START("KEY.15")
- PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED) // LEDs off
PORT_START("DSW")
PORT_DIPNAME( 0x01, 0x01, "Text width" ) PORT_DIPLOCATION("SW1:1")
@@ -595,6 +634,8 @@ INTERRUPT_GEN_MEMBER( fp1100_state::vblank_irq )
void fp1100_state::machine_reset()
{
+ m_main_irq_status = false;
+ m_sub_irq_status = false;
int i;
uint8_t slot_type;
const uint8_t id_type[4] = { 0xff, 0x00, 0x01, 0x04};
@@ -610,8 +651,8 @@ void fp1100_state::machine_reset()
membank("bankw0")->set_entry(0); // always write to ram
m_irq_mask = 0;
- m_main_latch = 0;
- m_sub_latch = 0;
+ m_latch_sub_to_main = 0;
+ m_latch_main_to_sub = 0;
m_slot_num = 0;
m_kbd_row = 0;
m_col_border = 0;
@@ -620,6 +661,7 @@ void fp1100_state::machine_reset()
m_upd7801.porta = 0;
m_upd7801.portb = 0;
m_upd7801.portc = 0;
+ m_maincpu->set_input_line_vector(0, 0xF0);
}
void fp1100_state::init_fp1100()
diff --git a/src/mame/drivers/fresh.cpp b/src/mame/drivers/fresh.cpp
index df20525425a..0dc19ad686b 100644
--- a/src/mame/drivers/fresh.cpp
+++ b/src/mame/drivers/fresh.cpp
@@ -183,19 +183,18 @@ void fresh_state::fresh_map(address_map &map)
map(0xc20000, 0xc2ffff).ram().w(FUNC(fresh_state::fresh_bg_videoram_w)).share("bg_videoram");
map(0xc30000, 0xc3ffff).ram().w(FUNC(fresh_state::fresh_attr_videoram_w)).share("attr_videoram");
-// AM_RANGE(0xc70000, 0xc70001) AM_RAM
-// AM_RANGE(0xc70002, 0xc70003) AM_RAM
+// map(0xc70000, 0xc70001).ram();
+// map(0xc70002, 0xc70003).ram();
map(0xc71000, 0xc71001).w(FUNC(fresh_state::c71000_write));
-// AM_RANGE(0xc72000, 0xc72001) AM_RAM
-// AM_RANGE(0xc72002, 0xc72003) AM_RAM
-// AM_RANGE(0xc73000, 0xc73001) AM_RAM
-// AM_RANGE(0xc73002, 0xc73003) AM_RAM
+// map(0xc72000, 0xc72001).ram();
+// map(0xc72002, 0xc72003).ram();
+// map(0xc73000, 0xc73001).ram();
+// map(0xc73002, 0xc73003).ram();
map(0xc74000, 0xc74001).w(FUNC(fresh_state::c74000_write));
map(0xc75000, 0xc75001).w(FUNC(fresh_state::c75000_write));
map(0xc76000, 0xc76001).w(FUNC(fresh_state::c76000_write));
-// AM_RANGE(0xc77000, 0xc77001) AM_RAM
-// AM_RANGE(0xc77002, 0xc77003) AM_RAM
-
+// map(0xc77000, 0xc77001).ram();
+// map(0xc77002, 0xc77003).ram();
// written together
map(0xc40000, 0xc417ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
@@ -205,12 +204,12 @@ void fresh_state::fresh_map(address_map &map)
map(0xd10001, 0xd10001).w("ymsnd", FUNC(ym2413_device::data_port_w));
map(0xd30000, 0xd30001).w(FUNC(fresh_state::d30000_write));
- map(0xd40000, 0xd40001).portr("IN0"); //AM_WRITENOP // checks for 0x10
-// AM_RANGE(0xd40002, 0xd40003) AM_WRITENOP
+ map(0xd40000, 0xd40001).portr("IN0"); //.nopw(); // checks for 0x10
+// map(0xd40002, 0xd40003).nopw();
map(0xd70000, 0xd70001).portr("IN1"); // checks for 0x10, dead loop if fail
- map(0xe00000, 0xe00001).portr("DSW0"); //AM_WRITENOP
- map(0xe20000, 0xe20001).portr("DSW1"); //AM_WRITENOP
+ map(0xe00000, 0xe00001).portr("DSW0"); //.nopw();
+ map(0xe20000, 0xe20001).portr("DSW1"); //.nopw();
map(0xe40000, 0xe40001).portr("DSW2");
map(0xe60000, 0xe60001).portr("DSW3");
map(0xe80000, 0xe80001).portr("IN6");
diff --git a/src/mame/drivers/funkball.cpp b/src/mame/drivers/funkball.cpp
index 6c546a9aed1..95bd5f603bf 100644
--- a/src/mame/drivers/funkball.cpp
+++ b/src/mame/drivers/funkball.cpp
@@ -327,7 +327,7 @@ void funkball_state::funkball_map(address_map &map)
map(0x000fc000, 0x000fffff).bankr("bios_bank4");
map(0x000e0000, 0x000fffff).w(FUNC(funkball_state::bios_ram_w));
map(0x00100000, 0x07ffffff).ram();
-// AM_RANGE(0x08000000, 0x0fffffff) AM_NOP
+// map(0x08000000, 0x0fffffff).noprw();
map(0x40008000, 0x400080ff).rw(FUNC(funkball_state::biu_ctrl_r), FUNC(funkball_state::biu_ctrl_w));
map(0x40010e00, 0x40010eff).ram().share("unk_ram");
map(0xff000000, 0xfffdffff).rw(m_voodoo, FUNC(voodoo_device::voodoo_r), FUNC(voodoo_device::voodoo_w));
@@ -338,7 +338,7 @@ void funkball_state::flashbank_map(address_map &map)
{
map(0x00000000, 0x003fffff).rw("u29", FUNC(intel_28f320j5_device::read), FUNC(intel_28f320j5_device::write)); // needed to boot
map(0x00400000, 0x007fffff).rw("u30", FUNC(intel_28f320j5_device::read), FUNC(intel_28f320j5_device::write)); // i assume it maps directly after
-// AM_RANGE(0x02000000, 0x023fffff) AM_DEVREADWRITE16("u3", intel_28f320j5_device, read, write, 0xffffffff ) // sound program, don't think it matters where we map it, might not even be visible in this space
+// map(0x02000000, 0x023fffff).rw("u3", FUNC(intel_28f320j5_device::read), FUNC(intel_28f320j5_device::write)); // sound program, don't think it matters where we map it, might not even be visible in this space
/* it checks for 64MBit chips at 0x80000000 the way things are set up, they must return an intel Flash ID of 0x15 */
}
@@ -356,7 +356,7 @@ void funkball_state::funkball_io(address_map &map)
map(0x0360, 0x0363).w(FUNC(funkball_state::flash_w));
-// AM_RANGE(0x0320, 0x0323) AM_READ(test_r)
+// map(0x0320, 0x0323).r(FUNC(funkball_state::test_r));
map(0x0360, 0x036f).r(FUNC(funkball_state::in_r)); // inputs
}
diff --git a/src/mame/drivers/gaelco.cpp b/src/mame/drivers/gaelco.cpp
index a446c48c437..3f257652ef3 100644
--- a/src/mame/drivers/gaelco.cpp
+++ b/src/mame/drivers/gaelco.cpp
@@ -109,7 +109,7 @@ void gaelco_state::bigkarnk_map(address_map &map)
map(0x100000, 0x101fff).ram().w(FUNC(gaelco_state::vram_w)).share("videoram"); /* Video RAM */
map(0x102000, 0x103fff).ram(); /* Screen RAM */
map(0x108000, 0x108007).writeonly().share("vregs"); /* Video Registers */
-// AM_RANGE(0x10800c, 0x10800d) AM_DEVWRITE(watchdog_reset_w) /* INT 6 ACK/Watchdog timer */
+// map(0x10800c, 0x10800d).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); /* INT 6 ACK/Watchdog timer */
map(0x200000, 0x2007ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); /* Palette */
map(0x440000, 0x440fff).ram().share("spriteram"); /* Sprite RAM */
map(0x700000, 0x700001).portr("DSW1");
@@ -126,7 +126,7 @@ void gaelco_state::bigkarnk_snd_map(address_map &map)
{
map(0x0000, 0x07ff).ram(); /* RAM */
map(0x0800, 0x0801).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); /* OKI6295 */
-// AM_RANGE(0x0900, 0x0900) AM_WRITENOP /* enable sound output? */
+// map(0x0900, 0x0900).nopw(); /* enable sound output? */
map(0x0a00, 0x0a01).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write)); /* YM3812 */
map(0x0b00, 0x0b00).r(m_soundlatch, FUNC(generic_latch_8_device::read)); /* Sound latch */
map(0x0c00, 0xffff).rom(); /* ROM */
@@ -138,7 +138,7 @@ void gaelco_state::maniacsq_map(address_map &map)
map(0x100000, 0x101fff).ram().w(FUNC(gaelco_state::vram_w)).share("videoram"); /* Video RAM */
map(0x102000, 0x103fff).ram(); /* Screen RAM */
map(0x108000, 0x108007).writeonly().share("vregs"); /* Video Registers */
-// AM_RANGE(0x10800c, 0x10800d) AM_WRITE(watchdog_reset_w) /* INT 6 ACK/Watchdog timer */
+// map(0x10800c, 0x10800d).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); /* INT 6 ACK/Watchdog timer */
map(0x200000, 0x2007ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); /* Palette */
map(0x440000, 0x440fff).ram().share("spriteram"); /* Sprite RAM */
map(0x700000, 0x700001).portr("DSW2");
@@ -156,7 +156,7 @@ void gaelco_state::squash_map(address_map &map)
map(0x100000, 0x101fff).ram().w(FUNC(gaelco_state::vram_encrypted_w)).share("videoram"); /* Video RAM */
map(0x102000, 0x103fff).ram().w(FUNC(gaelco_state::encrypted_w)).share("screenram"); /* Screen RAM */
map(0x108000, 0x108007).writeonly().share("vregs"); /* Video Registers */
-// AM_RANGE(0x10800c, 0x10800d) AM_WRITE(watchdog_reset_w) /* INT 6 ACK/Watchdog timer */
+// map(0x10800c, 0x10800d).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); /* INT 6 ACK/Watchdog timer */
map(0x200000, 0x2007ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); /* Palette */
map(0x440000, 0x440fff).ram().share("spriteram"); /* Sprite RAM */
map(0x700000, 0x700001).portr("DSW2");
@@ -175,7 +175,7 @@ void gaelco_state::thoop_map(address_map &map)
map(0x100000, 0x101fff).ram().w(FUNC(gaelco_state::thoop_vram_encrypted_w)).share("videoram"); /* Video RAM */
map(0x102000, 0x103fff).ram().w(FUNC(gaelco_state::thoop_encrypted_w)).share("screenram"); /* Screen RAM */
map(0x108000, 0x108007).writeonly().share("vregs"); /* Video Registers */
-// AM_RANGE(0x10800c, 0x10800d) AM_WRITE(watchdog_reset_w) /* INT 6 ACK/Watchdog timer */
+// map(0x10800c, 0x10800d).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); /* INT 6 ACK/Watchdog timer */
map(0x200000, 0x2007ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); /* Palette */
map(0x440000, 0x440fff).ram().share("spriteram"); /* Sprite RAM */
map(0x700000, 0x700001).portr("DSW2");
@@ -327,7 +327,7 @@ static INPUT_PORTS_START( biomtoy )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:5")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
- PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:4,3")
+ PORT_DIPNAME( 0x30, 0x30, "Lives in Reserve" ) PORT_DIPLOCATION("SW2:4,3") // Test mode doesn't show the value of the lives given, but of the ones after you die the first time
PORT_DIPSETTING( 0x20, "0" )
PORT_DIPSETTING( 0x10, "1" )
PORT_DIPSETTING( 0x30, "2" )
diff --git a/src/mame/drivers/gaelco2.cpp b/src/mame/drivers/gaelco2.cpp
index 13974ef8cbb..d1b8397cb1b 100644
--- a/src/mame/drivers/gaelco2.cpp
+++ b/src/mame/drivers/gaelco2.cpp
@@ -686,7 +686,7 @@ void gaelco2_state::play2000_map(address_map &map)
map(0x218000, 0x218003).ram(); /* Written to, but unused? */
map(0x218004, 0x218009).ram().w(FUNC(gaelco2_state::vregs_w)).share("vregs"); /* Video Registers */
map(0x21800a, 0x218fff).ram(); /* Written to, but unused? */
- // AM_RANGE(0x843100, 0x84315e) ?
+ // map(0x843100, 0x84315e) ?
map(0xfe0000, 0xfe7fff).ram(); /* Work RAM */
map(0xfe8000, 0xfeffff).ram().share("shareram"); /* Work RAM */
}
diff --git a/src/mame/drivers/gaiden.cpp b/src/mame/drivers/gaiden.cpp
index 2b53ab82554..32a2ac463bd 100644
--- a/src/mame/drivers/gaiden.cpp
+++ b/src/mame/drivers/gaiden.cpp
@@ -946,19 +946,19 @@ void gaiden_state::mastninj_map(address_map &map)
map(0x074000, 0x075fff).ram().w(FUNC(gaiden_state::bg_videoram_w)).share("videoram3");
map(0x076000, 0x077fff).ram().share("spriteram");
map(0x078000, 0x079fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
-// AM_RANGE(0x078800, 0x079fff) AM_RAM
+// map(0x078800, 0x079fff).ram();
map(0x07a000, 0x07a001).portr("SYSTEM");
map(0x07a002, 0x07a003).portr("P1_P2");
map(0x07a004, 0x07a005).portr("DSW");
-// AM_RANGE(0x07a104, 0x07a105) AM_WRITE(gaiden_txscrolly_w)
-// AM_RANGE(0x07a10c, 0x07a10d) AM_WRITE(gaiden_txscrollx_w)
+// map(0x07a104, 0x07a105).w(FUNC(gaiden_state::gaiden_txscrolly_w));
+// map(0x07a10c, 0x07a10d).w(FUNC(gaiden_state::gaiden_txscrollx_w));
map(0x07f000, 0x07f001).w(FUNC(gaiden_state::gaiden_bgscrolly_w));
map(0x07f002, 0x07f003).w(FUNC(gaiden_state::gaiden_bgscrollx_w));
map(0x07f004, 0x07f005).w(FUNC(gaiden_state::gaiden_fgscrolly_w));
map(0x07f006, 0x07f007).w(FUNC(gaiden_state::gaiden_fgscrollx_w));
map(0x07a800, 0x07a801).w("watchdog", FUNC(watchdog_timer_device::reset16_w));
-// AM_RANGE(0x07a806, 0x07a807) AM_WRITENOP
-// AM_RANGE(0x07a808, 0x07a809) AM_WRITE(gaiden_flip_w)
+// map(0x07a806, 0x07a807).nopw();
+// map(0x07a808, 0x07a809).w(FUNC(gaiden_state::gaiden_flip_w));
map(0x07a00e, 0x07a00e).w("soundlatch", FUNC(generic_latch_8_device::write));
map(0x07e000, 0x07e000).w(FUNC(gaiden_state::drgnbowl_irq_ack_w));
}
diff --git a/src/mame/drivers/gal3.cpp b/src/mame/drivers/gal3.cpp
index 0248d00eb97..36ef19dbc85 100644
--- a/src/mame/drivers/gal3.cpp
+++ b/src/mame/drivers/gal3.cpp
@@ -333,7 +333,7 @@ void gal3_state::cpu_mst_map(address_map &map)
{
map(0x00000000, 0x001fffff).rom();
map(0x20000000, 0x20001fff).ram().share("nvmem"); //NVRAM
-/// AM_RANGE(0x40000000, 0x4000ffff) AM_WRITE() //
+/// map(0x40000000, 0x4000ffff).w(FUNC(gal3_state::)); //
map(0x44000000, 0x44000003).portr("DSW_CPU_mst");
map(0x44800000, 0x44800003).r(FUNC(gal3_state::led_mst_r)).w(FUNC(gal3_state::led_mst_w)); //LEDs
map(0x48000000, 0x48000003).nopr(); //irq1 v-blank ack
@@ -341,21 +341,21 @@ void gal3_state::cpu_mst_map(address_map &map)
map(0x60000000, 0x60007fff).ram().share("share1"); //CRAM
map(0x60010000, 0x60017fff).ram().share("share1"); //Mirror
map(0x80000000, 0x8007ffff).ram(); //512K Local RAM
-/// AM_RANGE(0xc0000000, 0xc000000b) AM_WRITENOP //upload?
+/// map(0xc0000000, 0xc000000b).nopw(); //upload?
map(0xc000000c, 0xc000000f).nopr(); //irq2 ack
-/// AM_RANGE(0xd8000000, 0xd800000f) AM_RAM // protection or 68681?
+/// map(0xd8000000, 0xd800000f).ram(); // protection or 68681?
map(0xf2800000, 0xf2800fff).rw(FUNC(gal3_state::rso_r), FUNC(gal3_state::rso_w)); //RSO PCB
}
void gal3_state::cpu_slv_map(address_map &map)
{
map(0x00000000, 0x0007ffff).rom();
-/// AM_RANGE(0x40000000, 0x4000ffff) AM_WRITE() //
+/// map(0x40000000, 0x4000ffff).w(FUNC(gal3_state::)); //
map(0x44000000, 0x44000003).portr("DSW_CPU_slv");
map(0x44800000, 0x44800003).r(FUNC(gal3_state::led_slv_r)).w(FUNC(gal3_state::led_slv_w)); //LEDs
map(0x48000000, 0x48000003).nopr(); //irq1 ack
-/// AM_RANGE(0x50000000, 0x50000003) AM_READ() AM_WRITE()
-/// AM_RANGE(0x54000000, 0x54000003) AM_READ() AM_WRITE()
+/// map(0x50000000, 0x50000003).rw(FUNC(gal3_state::), FUNC(gal3_state::));
+/// map(0x54000000, 0x54000003).rw(FUNC(gal3_state::), FUNC(gal3_state::));
map(0x60000000, 0x60007fff).ram().share("share1");
map(0x60010000, 0x60017fff).ram().share("share1");
map(0x80000000, 0x8007ffff).ram(); //512K Local RAM
@@ -392,7 +392,7 @@ void gal3_state::rs_cpu_map(address_map &map)
map(0x000000, 0x03ffff).rom();
map(0x100000, 0x10ffff).ram(); //64K working RAM
-/// AM_RANGE(0x180000, 0x183fff) AM_RAM //Nvram
+/// map(0x180000, 0x183fff).ram(); //Nvram
map(0x1c0000, 0x1c0001).ram(); //148?
map(0x1c2000, 0x1c2001).ram(); //?
@@ -449,24 +449,24 @@ void gal3_state::rs_cpu_map(address_map &map)
map(0xc00000, 0xc0000f).ram(); //?
map(0xc40000, 0xc43fff).ram(); //8 bit
-/// AM_RANGE(0xc44000, 0xffffff) AM_RAM /////////////
+/// map(0xc44000, 0xffffff).ram(); /////////////
}
void gal3_state::sound_cpu_map(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x080000, 0x08ffff).ram();
-/// AM_RANGE(0x0c0000, 0x0cffff) AM_RAM //00, 20, 30, 40, 50
-/// AM_RANGE(0x100000, 0x10000f) AM_RAM
+/// map(0x0c0000, 0x0cffff).ram(); //00, 20, 30, 40, 50
+/// map(0x100000, 0x10000f).ram();
map(0x110000, 0x113fff).ram();
-/// AM_RANGE(0x120000, 0x120003) AM_RAM //2ieme byte
-/// AM_RANGE(0x200000, 0x20017f) AM_RAM //C140
+/// map(0x120000, 0x120003).ram(); //2ieme byte
+/// map(0x200000, 0x20017f).ram(); //C140
map(0x200000, 0x2037ff).rw(m_c140_16a, FUNC(c140_device::c140_r), FUNC(c140_device::c140_w)).umask16(0x00ff); //C140///////////
-/// AM_RANGE(0x201000, 0x20117f) AM_RAM //C140
-/// AM_RANGE(0x202000, 0x20217f) AM_RAM //C140
-/// AM_RANGE(0x203000, 0x20317f) AM_RAM //C140
+/// map(0x201000, 0x20117f).ram(); //C140
+/// map(0x202000, 0x20217f).ram(); //C140
+/// map(0x203000, 0x20317f).ram(); //C140
map(0x204000, 0x2047ff).rw(m_c140_16g, FUNC(c140_device::c140_r), FUNC(c140_device::c140_w)).umask16(0x00ff); //C140
-/// AM_RANGE(0x090000, 0xffffff) AM_RAM
+/// map(0x090000, 0xffffff).ram();
}
void gal3_state::psn_b1_cpu_map(address_map &map)
diff --git a/src/mame/drivers/galaxian.cpp b/src/mame/drivers/galaxian.cpp
index b8cda8fd62b..d4731c61128 100644
--- a/src/mame/drivers/galaxian.cpp
+++ b/src/mame/drivers/galaxian.cpp
@@ -1570,15 +1570,15 @@ void galaxian_state::galaxian_map_base(address_map &map)
map(0x6000, 0x6001).mirror(0x07f8).w(FUNC(galaxian_state::start_lamp_w));
map(0x6002, 0x6002).mirror(0x07f8).w(FUNC(galaxian_state::coin_lock_w));
map(0x6003, 0x6003).mirror(0x07f8).w(FUNC(galaxian_state::coin_count_0_w));
- //AM_RANGE(0x6004, 0x6007) AM_MIRROR(0x07f8) AM_DEVWRITE("cust", galaxian_sound_device, lfo_freq_w)
+ //map(0x6004, 0x6007).mirror(0x07f8).w("cust", FUNC(galaxian_sound_device::lfo_freq_w));
map(0x6800, 0x6800).mirror(0x07ff).portr("IN1");
- //AM_RANGE(0x6800, 0x6807) AM_MIRROR(0x07f8) AM_DEVWRITE("cust", galaxian_sound_device, sound_w)
+ //map(0x6800, 0x6807).mirror(0x07f8).w("cust", FUNC(galaxian_sound_device::sound_w));
map(0x7000, 0x7000).mirror(0x07ff).portr("IN2");
map(0x7001, 0x7001).mirror(0x07f8).w(FUNC(galaxian_state::irq_enable_w));
map(0x7004, 0x7004).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_stars_enable_w));
map(0x7006, 0x7006).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_flip_screen_x_w));
map(0x7007, 0x7007).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_flip_screen_y_w));
- //AM_RANGE(0x7800, 0x7800) AM_MIRROR(0x07ff) AM_DEVWRITE("cust", galaxian_sound_device, pitch_w)
+ //map(0x7800, 0x7800).mirror(0x07ff).w("cust", FUNC(galaxian_sound_device::pitch_w));
map(0x7800, 0x7800).mirror(0x07ff).r("watchdog", FUNC(watchdog_timer_device::reset_r));
}
@@ -1627,15 +1627,15 @@ void galaxian_state::mooncrst_map_base(address_map &map)
map(0xa000, 0xa000).mirror(0x07ff).portr("IN0");
map(0xa000, 0xa002).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_gfxbank_w));
map(0xa003, 0xa003).mirror(0x07f8).w(FUNC(galaxian_state::coin_count_0_w));
-// AM_RANGE(0xa004, 0xa007) AM_MIRROR(0x07f8) AM_DEVWRITE("cust", galaxian_sound_device, lfo_freq_w)
+// map(0xa004, 0xa007).mirror(0x07f8).w("cust", FUNC(galaxian_sound_device::lfo_freq_w));
map(0xa800, 0xa800).mirror(0x07ff).portr("IN1");
-// AM_RANGE(0xa800, 0xa807) AM_MIRROR(0x07f8) AM_DEVWRITE("cust", galaxian_sound_device, sound_w)
+// map(0xa800, 0xa807).mirror(0x07f8).w("cust", FUNC(galaxian_sound_device::sound_w));
map(0xb000, 0xb000).mirror(0x07ff).portr("IN2");
map(0xb000, 0xb000).mirror(0x07f8).w(FUNC(galaxian_state::irq_enable_w));
map(0xb004, 0xb004).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_stars_enable_w));
map(0xb006, 0xb006).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_flip_screen_x_w));
map(0xb007, 0xb007).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_flip_screen_y_w));
-// AM_RANGE(0xb800, 0xb800) AM_MIRROR(0x07ff) AM_DEVWRITE("cust", galaxian_sound_device, pitch_w)
+// map(0xb800, 0xb800).mirror(0x07ff).w("cust", FUNC(galaxian_sound_device::pitch_w));
map(0xb800, 0xb800).mirror(0x07ff).r("watchdog", FUNC(watchdog_timer_device::reset_r));
}
@@ -1712,8 +1712,8 @@ void galaxian_state::fantastc_map(address_map &map)
map(0xb000, 0xb000).mirror(0x07f8).w(FUNC(galaxian_state::irq_enable_w));
map(0xb800, 0xb800).mirror(0x07ff).r("watchdog", FUNC(watchdog_timer_device::reset_r));
map(0xfffe, 0xfffe).noprw(); // ?
-// AM_RANGE(0xb800, 0xb800) AM_WRITENOP // ?
-// AM_RANGE(0xfff8, 0xffff) AM_WRITENOP // timefgtr, sound related?
+// map(0xb800, 0xb800).nopw(); // ?
+// map(0xfff8, 0xffff).nopw(); // timefgtr, sound related?
}
void galaxian_state::zigzag_map(address_map &map)
@@ -1850,10 +1850,9 @@ void galaxian_state::spactrai_map(address_map &map)
map(0x1600, 0x4fff).rom();
// cleared on startup
-// AM_RANGE(0x6000, 0x60ff) AM_RAM
-// AM_RANGE(0x6800, 0x68ff) AM_RAM
-// AM_RANGE(0x7000, 0x70ff) AM_RAM
-
+// map(0x6000, 0x60ff).ram();
+// map(0x6800, 0x68ff).ram();
+// map(0x7000, 0x70ff).ram();
// standard galaxian mapping?
map(0x6004, 0x6007).mirror(0x07f8).w("cust", FUNC(galaxian_sound_device::lfo_freq_w));
map(0x6800, 0x6807).mirror(0x07f8).w("cust", FUNC(galaxian_sound_device::sound_w));
@@ -1905,11 +1904,11 @@ void galaxian_state::anteatergg_map(address_map &map)
map(0x4000, 0x4fff).ram();
map(0x5000, 0x53ff).ram().w(FUNC(galaxian_state::galaxian_videoram_w)).share("videoram");
map(0x5800, 0x58ff).ram().w(FUNC(galaxian_state::galaxian_objram_w)).share("spriteram");
-// AM_RANGE(0x4000, 0x43ff) AM_MIRROR(0x0400) AM_RAM
+// map(0x4000, 0x43ff).mirror(0x0400).ram();
map(0x6000, 0x6000).mirror(0x07ff).portr("IN0");
-// AM_RANGE(0x6000, 0x6001) AM_MIRROR(0x07f8) AM_WRITE(start_lamp_w)
-// AM_RANGE(0x6002, 0x6002) AM_MIRROR(0x07f8) AM_WRITE(coin_lock_w)
-// AM_RANGE(0x6003, 0x6003) AM_MIRROR(0x07f8) AM_WRITE(coin_count_0_w)
+// map(0x6000, 0x6001).mirror(0x07f8).w(FUNC(galaxian_state::start_lamp_w));
+// map(0x6002, 0x6002).mirror(0x07f8).w(FUNC(galaxian_state::coin_lock_w));
+// map(0x6003, 0x6003).mirror(0x07f8).w(FUNC(galaxian_state::coin_count_0_w));
map(0x6800, 0x6800).mirror(0x07ff).portr("IN1");
map(0x7000, 0x7000).mirror(0x07ff).portr("IN2");
map(0x7001, 0x7001).mirror(0x07f8).w(FUNC(galaxian_state::irq_enable_w));
@@ -2165,7 +2164,7 @@ void galaxian_state::fourplay_map(address_map &map)
map(0x7000,0x7000).portr("IN2");
map(0x7800,0x7fff).r("watchdog",FUNC(watchdog_timer_device::reset_r));
map(0x6000,0x6001).w(FUNC(galaxian_state::start_lamp_w));
- map(0x6002,0x6002).nopw(); // AM_WRITE(coin_lock_w)
+ map(0x6002,0x6002).nopw(); // .w(FUNC(galaxian_state::coin_lock_w));
map(0x6003,0x6003).w(FUNC(galaxian_state::coin_count_0_w));
map(0x6004,0x6007).w("cust",FUNC(galaxian_sound_device::lfo_freq_w));
map(0x6800,0x6807).w("cust",FUNC(galaxian_sound_device::sound_w));
diff --git a/src/mame/drivers/galaxold.cpp b/src/mame/drivers/galaxold.cpp
index 61d91dfcedb..933fb5a4374 100644
--- a/src/mame/drivers/galaxold.cpp
+++ b/src/mame/drivers/galaxold.cpp
@@ -303,8 +303,8 @@ void galaxold_state::ckongmc_map(address_map &map)
map(0x9880, 0x98ff).ram();
map(0xa000, 0xa000).portr("IN0");
map(0xa001, 0xa002).w(FUNC(galaxold_state::galaxold_leds_w)); /* GUESS */
-// AM_RANGE(0xa002, 0xa002) AM_WRITE(galaxold_coin_lockout_w) /* not written */
-// AM_RANGE(0xa003, 0xa003) AM_WRITE(galaxold_coin_counter_w) /* not written */
+// map(0xa002, 0xa002).w(FUNC(galaxold_state::galaxold_coin_lockout_w)); /* not written */
+// map(0xa003, 0xa003).w(FUNC(galaxold_state::galaxold_coin_counter_w)); /* not written */
map(0xa004, 0xa007).w("cust", FUNC(galaxian_sound_device::lfo_freq_w)); /* GUESS */
map(0xa800, 0xa800).portr("IN1");
map(0xa800, 0xa802).w("cust", FUNC(galaxian_sound_device::background_enable_w)); /* GUESS */
@@ -313,7 +313,7 @@ void galaxold_state::ckongmc_map(address_map &map)
map(0xa806, 0xa807).w("cust", FUNC(galaxian_sound_device::vol_w)); /* GUESS */
map(0xb000, 0xb000).portr("DSW");
map(0xb001, 0xb001).w(FUNC(galaxold_state::galaxold_nmi_enable_w));
- map(0xb004, 0xb004).nopw(); /* AM_WRITE(galaxold_stars_enable_w) */
+ map(0xb004, 0xb004).nopw(); /* .w(FUNC(galaxold_state::galaxold_stars_enable_w)); */
map(0xb006, 0xb006).w(FUNC(galaxold_state::galaxold_flip_screen_x_w)); /* GUESS */
map(0xb007, 0xb007).w(FUNC(galaxold_state::galaxold_flip_screen_y_w)); /* GUESS */
map(0xb800, 0xb800).r("watchdog", FUNC(watchdog_timer_device::reset_r)).w("cust", FUNC(galaxian_sound_device::pitch_w)); /* GUESS */
@@ -422,7 +422,7 @@ void galaxold_state::scrambler_map(address_map &map)
map(0x6805, 0x6805).w("cust", FUNC(galaxian_sound_device::fire_enable_w));
map(0x6806, 0x6807).w("cust", FUNC(galaxian_sound_device::vol_w));
map(0x7000, 0x7000).portr("IN2").w(FUNC(galaxold_state::galaxold_nmi_enable_w));
-// AM_RANGE(0x7001, 0x7001)
+// map(0x7001, 0x7001)
map(0x7002, 0x7002).w(FUNC(galaxold_state::galaxold_coin_counter_w));
map(0x7003, 0x7003).w(FUNC(galaxold_state::scrambold_background_enable_w));
map(0x7004, 0x7004).w(FUNC(galaxold_state::galaxold_stars_enable_w));
@@ -430,7 +430,7 @@ void galaxold_state::scrambler_map(address_map &map)
map(0x7007, 0x7007).w(FUNC(galaxold_state::galaxold_flip_screen_y_w));
map(0x7800, 0x7800).r("watchdog", FUNC(watchdog_timer_device::reset_r));
map(0x7800, 0x7800).w("cust", FUNC(galaxian_sound_device::pitch_w));
-// AM_RANGE(0x8102, 0x8102) AM_READ(scramblb_protection_1_r)
+// map(0x8102, 0x8102).r(FUNC(galaxold_state::scramblb_protection_1_r));
map(0x8202, 0x8202).r(FUNC(galaxold_state::scrambler_protection_2_r));
}
@@ -491,12 +491,12 @@ void galaxold_state::_4in1_map(address_map &map)
map(0x5880, 0x58ff).ram();
map(0x6000, 0x6000).portr("IN0");
map(0x6000, 0x6001).w(FUNC(galaxold_state::galaxold_leds_w));
-// AM_RANGE(0x6002, 0x6002) AM_WRITE(galaxold_coin_lockout_w)
+// map(0x6002, 0x6002).w(FUNC(galaxold_state::galaxold_coin_lockout_w));
map(0x6003, 0x6003).w(FUNC(galaxold_state::galaxold_coin_counter_w));
map(0x6004, 0x6007).w("cust", FUNC(galaxian_sound_device::lfo_freq_w));
map(0x6800, 0x6800).portr("IN1");
map(0x6800, 0x6802).w("cust", FUNC(galaxian_sound_device::background_enable_w));
-// AM_RANGE(0x6803, 0x6803) AM_WRITE(galaxian_noise_enable_w) /* not hooked up? */
+// map(0x6803, 0x6803).w(FUNC(galaxold_state::galaxian_noise_enable_w)); /* not hooked up? */
map(0x6805, 0x6805).w("cust", FUNC(galaxian_sound_device::fire_enable_w));
map(0x6806, 0x6807).w("cust", FUNC(galaxian_sound_device::vol_w));
map(0x7000, 0x7000).portr("DSW0");
@@ -545,16 +545,16 @@ void galaxold_state::dkongjrm_map(address_map &map)
map(0x98c0, 0x98ff).writeonly().share("spriteram2");
map(0xa000, 0xa0ff).portr("IN0");
map(0xa003, 0xa003).w(FUNC(galaxold_state::galaxold_coin_counter_w));
- //AM_RANGE(0xa004, 0xa007) AM_WRITE(galaxian_lfo_freq_w)
+ //map(0xa004, 0xa007).w(FUNC(galaxold_state::galaxian_lfo_freq_w));
map(0xa800, 0xa8ff).portr("IN1");
map(0xa800, 0xa802).w("cust", FUNC(galaxian_sound_device::background_enable_w));
map(0xa803, 0xa803).w("cust", FUNC(galaxian_sound_device::noise_enable_w));
- //AM_RANGE(0xa805, 0xa805) AM_WRITE(galaxian)
+ //map(0xa805, 0xa805).w(FUNC(galaxold_state::galaxian));
map(0xa806, 0xa807).w("cust", FUNC(galaxian_sound_device::vol_w));
map(0xb000, 0xb0ff).portr("DSW");
map(0xb000, 0xb000).w(FUNC(galaxold_state::galaxold_gfxbank_w));
map(0xb001, 0xb001).w(FUNC(galaxold_state::galaxold_nmi_enable_w));
- //AM_RANGE(0xb004, 0xb004) AM_WRITE(galaxold_stars_enable_w)
+ //map(0xb004, 0xb004).w(FUNC(galaxold_state::galaxold_stars_enable_w));
map(0xb006, 0xb006).w(FUNC(galaxold_state::galaxold_flip_screen_x_w));
map(0xb007, 0xb007).w(FUNC(galaxold_state::galaxold_flip_screen_y_w));
map(0xb800, 0xb800).r("watchdog", FUNC(watchdog_timer_device::reset_r)).w("cust", FUNC(galaxian_sound_device::pitch_w));
@@ -768,8 +768,8 @@ void galaxold_state::racknrol_map(address_map &map)
map(0x1606, 0x1606).mirror(0x6000).w(FUNC(galaxold_state::galaxold_flip_screen_x_w));
map(0x1607, 0x1607).mirror(0x6000).w(FUNC(galaxold_state::galaxold_flip_screen_y_w));
map(0x1680, 0x1680).mirror(0x6000).nopr();
-// AM_RANGE(0x1700, 0x1700) AM_MIRROR(0x6000) AM_READ(trvchlng_question_r)
-// AM_RANGE(0x1701, 0x1703) AM_MIRROR(0x6000) AM_READ(trvchlng_question_w)
+// map(0x1700, 0x1700).mirror(0x6000).r(FUNC(galaxold_state::trvchlng_question_r));
+// map(0x1701, 0x1703).mirror(0x6000).w(FUNC(galaxold_state::trvchlng_question_w));
map(0x1800, 0x1bff).mirror(0x6000).w(FUNC(galaxold_state::galaxold_videoram_w)).share("videoram");
map(0x1c00, 0x1fff).mirror(0x6000).ram();
map(0x2000, 0x2fff).rom();
@@ -780,8 +780,8 @@ void galaxold_state::racknrol_map(address_map &map)
void galaxold_state::racknrol_io(address_map &map)
{
map(0x1d, 0x1d).w("snsnd", FUNC(sn76489a_device::write));
-// AM_RANGE(0x1e, 0x1e) AM_WRITENOP
-// AM_RANGE(0x1f, 0x1f) AM_WRITENOP
+// map(0x1e, 0x1e).nopw();
+// map(0x1f, 0x1f).nopw();
map(0x20, 0x3f).w(FUNC(galaxold_state::racknrol_tiles_bank_w)).share("racknrol_tbank");
}
@@ -2518,7 +2518,7 @@ void galaxold_state::drivfrcg(machine_config &config)
maincpu.set_addrmap(AS_PROGRAM, &galaxold_state::drivfrcg_program);
maincpu.set_addrmap(AS_IO, &galaxold_state::drivfrcg_io);
maincpu.set_vblank_int("screen", FUNC(galaxold_state::hunchbks_vh_interrupt));
- maincpu.sense_handler().set("screen", FUNC(screen_device::vblank));
+ maincpu.sense_handler().set("screen", FUNC(screen_device::vblank)); // ???
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
diff --git a/src/mame/drivers/gambl186.cpp b/src/mame/drivers/gambl186.cpp
index 96c7bd1b3fa..6b58d9247f0 100644
--- a/src/mame/drivers/gambl186.cpp
+++ b/src/mame/drivers/gambl186.cpp
@@ -380,11 +380,11 @@ void gambl186_state::gambl186_io(address_map &map)
map(0x0502, 0x0503).portr("IN1");
map(0x0504, 0x0505).portr("IN2"); // Seems to writes more upd7759 params in MSB...
- //AM_RANGE(0x0500, 0x050f) AM_READ(unk_r)
+ //map(0x0500, 0x050f).r(FUNC(gambl186_state::unk_r));
map(0x0580, 0x0581).portr("DSW1");
map(0x0582, 0x0583).portr("JOY");
map(0x0584, 0x0585).portr("DSW0").nopw(); // Watchdog: bit 8
-// AM_RANGE(0x0600, 0x0603) AM_WRITENOP // lamps
+// map(0x0600, 0x0603).nopw(); // lamps
map(0x0680, 0x0683).rw(FUNC(gambl186_state::comms_r), FUNC(gambl186_state::comms_w));
map(0x0700, 0x0701).w(FUNC(gambl186_state::data_bank_w));
}
diff --git a/src/mame/drivers/gameking.cpp b/src/mame/drivers/gameking.cpp
index 43ac943b3dd..65b222801b2 100644
--- a/src/mame/drivers/gameking.cpp
+++ b/src/mame/drivers/gameking.cpp
@@ -162,9 +162,9 @@ void gameking_state::gameking_mem(address_map &map)
map(0x0600, 0x077f).rw(FUNC(gameking_state::lcd_r), FUNC(gameking_state::lcd_w));
map(0x0d00, 0x0fff).ram(); // d00, e00, f00 prooved on handheld
-// AM_RANGE(0x1000, 0x1fff) AM_RAM // sthero writes to $19xx
+// map(0x1000, 0x1fff).ram(); // sthero writes to $19xx
-// AM_RANGE(0x3000, 0x3fff) AM_ROMBANK("bank3000")
+// map(0x3000, 0x3fff).bankr("bank3000");
map(0x4000, 0x7fff).bankr("bank4000");
map(0x8000, 0xffaf).bankr("bank8000");
map(0xffb0, 0xffff).bankr("bankboot"); // cpu seems to read from 8000 bank, and for exceptions ignore bank
diff --git a/src/mame/drivers/gamemachine.cpp b/src/mame/drivers/gamemachine.cpp
index 33adcd9e1f6..c71a2854491 100644
--- a/src/mame/drivers/gamemachine.cpp
+++ b/src/mame/drivers/gamemachine.cpp
@@ -65,95 +65,11 @@ Grand Prix:
#include "machine/f3853.h"
#include "speaker.h"
#include "machine/netlist.h"
-#include "netlist/devices/net_lib.h"
+#include "audio/nl_gamemachine.h"
// internal artwork
#include "tgm.lh"
-
-/*
- * Netlist below provided under Creative Commons CC0
- */
-
-static NETLIST_START(nl_gamemachine)
-
- /* Standard stuff */
-
- SOLVER(Solver, 48000)
- PARAM(Solver.ACCURACY, 1e-7)
- ANALOG_INPUT(V5, 5)
-
- /* Schematics: http://seanriddle.com/gamemachineaudio.JPG
- *
- * 3870 datasheet: http://nice.kaze.com/MK3870.pdf
- *
- * The 3870 has mask-programmable outputs (page VIII-7 in datasheet).
- *
- * Given the schematics, in this case the OPENDRAIN configuration is the
- * most probable.
- *
- */
-
- NET_MODEL("OPENDRAIN FAMILY(OVL=0.0 OVH=0.0 ORL=1.0 ORH=1e12)")
- NET_MODEL("TYPE6K FAMILY(OVL=0.05 OVH=0.05 ORL=1.0 ORH=6000)")
- NET_MODEL("DIRECTDRIVE FAMILY(OVL=0.05 OVH=0.05 ORL=1.0 ORH=1000)")
-
- LOGIC_INPUT(P08, 1, "OPENDRAIN")
- LOGIC_INPUT(P09, 1, "OPENDRAIN")
- LOGIC_INPUT(P10, 1, "OPENDRAIN")
- LOGIC_INPUT(P11, 1, "OPENDRAIN")
- LOGIC_INPUT(P12, 1, "OPENDRAIN")
- LOGIC_INPUT(P13, 1, "OPENDRAIN")
- LOGIC_INPUT(P14, 1, "OPENDRAIN")
- LOGIC_INPUT(P15, 1, "OPENDRAIN")
-
- RES(R1, RES_K(2.4))
- RES(R2, RES_K(10))
- RES(R3, RES_K(4.3))
- RES(R4, RES_K(150))
- RES(R5, RES_K(240))
- RES(R6, RES_K(2.4))
- RES(SPK1, 8)
-
- CAP(C1, CAP_P(50))
- CAP(C2, CAP_U(0.001))
- CAP(C3, CAP_U(0.002))
- CAP(C4, CAP_U(0.005))
- CAP(C5, CAP_U(0.010))
-
- CAP(C6, CAP_P(50))
- CAP(C7, CAP_U(0.01))
- CAP(C8, CAP_U(470))
-
- QBJT_EB(Q1, "9013")
-
- MC1455P_DIP(IC1)
-
- NET_C(P08.Q, R2.2, IC1.4)
- NET_C(P09.Q, C8.2)
- NET_C(P15.Q, R1.2)
-
- NET_C(C1.1, P10.Q)
- NET_C(C2.1, P11.Q)
- NET_C(C3.1, P12.Q)
- NET_C(C4.1, P13.Q)
- NET_C(C5.1, P14.Q)
-
- NET_C(C1.2, C2.2, C3.2, C4.2, C5.2, C6.2, IC1.2, IC1.6, R5.2)
- NET_C(GND, C6.1, IC1.1, Q1.E)
- NET_C(R5.1, R4.2, IC1.7)
- NET_C(V5, R4.1, R2.1, IC1.8, SPK1.1, R3.1)
-
- NET_C(C7.1, R6.1, IC1.3)
-
- NET_C(C7.2, R6.2, Q1.B)
- NET_C(Q1.C, SPK1.2)
-
- NET_C(C8.1, R1.1, R3.2, IC1.5)
-
-NETLIST_END()
-
-
namespace {
class tgm_state : public driver_device
@@ -359,7 +275,7 @@ void tgm_state::tgm(machine_config &config)
/* sound hardware */
SPEAKER(config, "speaker").front_center();
NETLIST_SOUND(config, "snd_nl", 48000)
- .set_source(netlist_nl_gamemachine)
+ .set_source(NETLIST_NAME(gamemachine))
.add_route(ALL_OUTPUTS, "speaker", 1.0);
NETLIST_STREAM_OUTPUT(config, "snd_nl:cout0", 0, "SPK1.2").set_mult_offset(-10000.0, 10000.0 * 3.75);
diff --git a/src/mame/drivers/gamepock.cpp b/src/mame/drivers/gamepock.cpp
index 3b25f8a5094..b659cd265bb 100644
--- a/src/mame/drivers/gamepock.cpp
+++ b/src/mame/drivers/gamepock.cpp
@@ -19,7 +19,7 @@ void gamepock_state::gamepock_mem(address_map &map)
map.unmap_value_high();
map(0x0000, 0x0fff).rom();
map(0x1000, 0x3fff).noprw();
- //AM_RANGE(0x4000,0xbfff) AM_ROM // mapped by the cartslot
+ //map(0x4000,0xbfff).rom(); // mapped by the cartslot
map(0xc000, 0xc7ff).mirror(0x0800).ram();
}
diff --git a/src/mame/drivers/gamtor.cpp b/src/mame/drivers/gamtor.cpp
index 02800959be0..02a31fad0fd 100644
--- a/src/mame/drivers/gamtor.cpp
+++ b/src/mame/drivers/gamtor.cpp
@@ -67,14 +67,14 @@ void gaminator_state::gaminator_map(address_map &map)
map(0x20000000, 0x2003ffff).ram();
/* standard VGA */
- //AM_RANGE(0x40000000, 0x40000fff) AM_RAM // regs
+ //map(0x40000000, 0x40000fff).ram(); // regs
map(0x400003b0, 0x400003bf).rw("vga", FUNC(vga_device::port_03b0_r), FUNC(vga_device::port_03b0_w));
map(0x400003c0, 0x400003cf).rw("vga", FUNC(vga_device::port_03c0_r), FUNC(vga_device::port_03c0_w));
map(0x400003d0, 0x400003df).rw("vga", FUNC(vga_device::port_03d0_r), FUNC(vga_device::port_03d0_w));
map(0x44000000, 0x4401ffff).rw("vga", FUNC(vga_device::mem_r), FUNC(vga_device::mem_w)); // VRAM
-// AM_RANGE(0x44000000, 0x44007fff) AM_RAM AM_SHARE("tmapram1") // puts strings here, looks almost like a tilemap, but where are the tiles?
-// AM_RANGE(0x440a0000, 0x440a1fff) AM_RAM AM_SHARE("tmapram2") // beetlem (like above, mirror?)
+// map(0x44000000, 0x44007fff).ram().share("tmapram1"); // puts strings here, looks almost like a tilemap, but where are the tiles?
+// map(0x440a0000, 0x440a1fff).ram().share("tmapram2"); // beetlem (like above, mirror?)
map(0xe0000000, 0xe00001ff).ram(); // nvram?
map(0xf0000000, 0xf00003ff).rw("maincpu_onboard", FUNC(mcf5206e_peripheral_device::dev_r), FUNC(mcf5206e_peripheral_device::dev_w)); // technically this can be moved with MBAR
diff --git a/src/mame/drivers/gaplus.cpp b/src/mame/drivers/gaplus.cpp
index 38aa479c683..b575d8737ab 100644
--- a/src/mame/drivers/gaplus.cpp
+++ b/src/mame/drivers/gaplus.cpp
@@ -298,7 +298,7 @@ void gaplus_base_state::cpu2_map(address_map &map)
{
map(0x0000, 0x07ff).ram().w(FUNC(gaplus_base_state::videoram_w)).share("videoram"); /* tilemap RAM (shared with CPU #1) */
map(0x0800, 0x1fff).ram().share("spriteram"); /* shared RAM with CPU #1 */
-// AM_RANGE(0x500f, 0x500f) AM_WRITENOP /* ??? written 256 times on startup */
+// map(0x500f, 0x500f).nopw(); /* ??? written 256 times on startup */
map(0x6000, 0x6fff).w(FUNC(gaplus_base_state::irq_2_ctrl_w)); /* IRQ 2 control */
map(0xa000, 0xffff).rom(); /* ROM */
}
diff --git a/src/mame/drivers/gba.cpp b/src/mame/drivers/gba.cpp
index 68295e016f4..eb8e71d2e7d 100644
--- a/src/mame/drivers/gba.cpp
+++ b/src/mame/drivers/gba.cpp
@@ -1250,7 +1250,7 @@ void gba_state::gba_map(address_map &map)
map(0x06000000, 0x06017fff).mirror(0x00fe0000).rw("lcd", FUNC(gba_lcd_device::gba_vram_r), FUNC(gba_lcd_device::gba_vram_w)); // VRAM
map(0x06018000, 0x0601ffff).mirror(0x00fe0000).rw("lcd", FUNC(gba_lcd_device::gba_vram_r), FUNC(gba_lcd_device::gba_vram_w)); // VRAM
map(0x07000000, 0x070003ff).mirror(0x00fffc00).rw("lcd", FUNC(gba_lcd_device::gba_oam_r), FUNC(gba_lcd_device::gba_oam_w)); // OAM
- //AM_RANGE(0x08000000, 0x0cffffff) // cart ROM + mirrors, mapped here at machine_start if a cart is present
+ //map(0x08000000, 0x0cffffff) // cart ROM + mirrors, mapped here at machine_start if a cart is present
map(0x10000000, 0xffffffff).r(FUNC(gba_state::gba_10000000_r)); // for "Justice League Chronicles" (game bug)
}
diff --git a/src/mame/drivers/geniusiq.cpp b/src/mame/drivers/geniusiq.cpp
index e9890d6834f..75cd6a9638b 100644
--- a/src/mame/drivers/geniusiq.cpp
+++ b/src/mame/drivers/geniusiq.cpp
@@ -429,8 +429,8 @@ void geniusiq_state::geniusiq_mem(address_map &map)
map(0x310000, 0x31FFFF).ram();
map(0x400000, 0x41ffff).mirror(0x0e0000).rw("flash", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
map(0x600300, 0x600301).r(FUNC(geniusiq_state::input_r));
- //AM_RANGE(0x600500, 0x60050f) // read during IRQ 5
- //AM_RANGE(0x600600, 0x600605) // sound ??
+ //map(0x600500, 0x60050f) // read during IRQ 5
+ //map(0x600600, 0x600605) // sound ??
map(0x600606, 0x600609).w(FUNC(geniusiq_state::gfx_base_w));
map(0x60060a, 0x60060b).w(FUNC(geniusiq_state::gfx_idx_w));
map(0x600802, 0x600803).r(FUNC(geniusiq_state::cart_state_r)); // cartridge state
diff --git a/src/mame/drivers/gimix.cpp b/src/mame/drivers/gimix.cpp
index 8133f7f4cd3..5684ee9186d 100644
--- a/src/mame/drivers/gimix.cpp
+++ b/src/mame/drivers/gimix.cpp
@@ -152,9 +152,9 @@ void gimix_state::gimix_banked_mem(address_map &map)
map(0x00000, 0x0dfff).bankrw("lower_ram");
map(0x0e000, 0x0e001).rw(m_acia1, FUNC(acia6850_device::read), FUNC(acia6850_device::write));
map(0x0e004, 0x0e005).rw(m_acia2, FUNC(acia6850_device::read), FUNC(acia6850_device::write));
- //AM_RANGE(0x0e018, 0x0e01b) AM_READWRITE(fdc_r, fdc_w) // FD1797 FDC (PIO)
+ //map(0x0e018, 0x0e01b).rw(FUNC(gimix_state::fdc_r), FUNC(gimix_state::fdc_w)); // FD1797 FDC (PIO)
map(0x0e100, 0x0e1ff).ram();
- //AM_RANGE(0x0e200, 0x0e20f) // 9511A / 9512 Arithmetic Processor
+ //map(0x0e200, 0x0e20f) // 9511A / 9512 Arithmetic Processor
map(0x0e210, 0x0e21f).rw("timer", FUNC(ptm6840_device::read), FUNC(ptm6840_device::write));
map(0x0e220, 0x0e23f).rw("rtc", FUNC(mm58167_device::read), FUNC(mm58167_device::write));
map(0x0e240, 0x0e3af).ram();
@@ -164,7 +164,7 @@ void gimix_state::gimix_banked_mem(address_map &map)
map(0x0e800, 0x0efff).ram();
map(0x0f000, 0x0f7ff).bankr("rombank2");
map(0x0f800, 0x0ffff).bankr("rombank1");
- //AM_RANGE(0x10000, 0x1ffff) AM_RAM
+ //map(0x10000, 0x1ffff).ram();
}
void gimix_state::gimix_mem(address_map &map)
diff --git a/src/mame/drivers/gladiatr.cpp b/src/mame/drivers/gladiatr.cpp
index 54d428a691c..4e10db1e31e 100644
--- a/src/mame/drivers/gladiatr.cpp
+++ b/src/mame/drivers/gladiatr.cpp
@@ -637,9 +637,9 @@ void ppking_state::ppking_cpu3_map(address_map &map)
void ppking_state::ppking_cpu1_io(address_map &map)
{
-// ADDRESS_MAP_GLOBAL_MASK(0xff)
+// map.global_mask(0xff);
map(0xc000, 0xc007).w("mainlatch", FUNC(ls259_device::write_d0));
-// map(0xc004, 0xc004) AM_NOP // WRITE(ppking_irq_patch_w)
+// map(0xc004, 0xc004).noprw(); //.w(FUNC(ppking_state::ppking_irq_patch_w));
map(0xc09e, 0xc09f).r(FUNC(ppking_state::ppking_qx0_r)).w(FUNC(ppking_state::ppking_qx0_w));
map(0xc0bf, 0xc0bf).noprw(); // watchdog
map(0xc0c0, 0xc0c1).r(FUNC(ppking_state::ppking_qxcomu_r)).w(FUNC(ppking_state::ppking_qxcomu_w));
diff --git a/src/mame/drivers/glass.cpp b/src/mame/drivers/glass.cpp
index 1c4b85ea17f..935c82b1529 100644
--- a/src/mame/drivers/glass.cpp
+++ b/src/mame/drivers/glass.cpp
@@ -24,13 +24,13 @@ Todo:
WRITE8_MEMBER(glass_state::shareram_w)
{
- // why isn't there an AM_SOMETHING macro for this?
+ // why isn't there address map functionality for this?
reinterpret_cast<u8 *>(m_shareram.target())[BYTE_XOR_BE(offset)] = data;
}
READ8_MEMBER(glass_state::shareram_r)
{
- // why isn't there an AM_SOMETHING macro for this?
+ // why isn't there address map functionality for this?
return reinterpret_cast<u8 const *>(m_shareram.target())[BYTE_XOR_BE(offset)];
}
diff --git a/src/mame/drivers/gmaster.cpp b/src/mame/drivers/gmaster.cpp
index f379b2bd0fd..8de7f7992e8 100644
--- a/src/mame/drivers/gmaster.cpp
+++ b/src/mame/drivers/gmaster.cpp
@@ -243,7 +243,7 @@ void gmaster_state::gmaster_mem(address_map &map)
{
map(0x0000, 0x3fff).rom();
map(0x4000, 0x7fff).rw(FUNC(gmaster_state::gmaster_io_r), FUNC(gmaster_state::gmaster_io_w));
- //AM_RANGE(0x8000, 0xfeff) // mapped by the cartslot
+ //map(0x8000, 0xfeff) // mapped by the cartslot
}
diff --git a/src/mame/drivers/go2000.cpp b/src/mame/drivers/go2000.cpp
index 588c2b10b1c..6be6e18b51e 100644
--- a/src/mame/drivers/go2000.cpp
+++ b/src/mame/drivers/go2000.cpp
@@ -99,9 +99,9 @@ void go2000_state::go2000_map(address_map &map)
map(0xa00000, 0xa00001).portr("INPUTS");
map(0xa00002, 0xa00003).portr("DSW");
map(0x620002, 0x620003).w(FUNC(go2000_state::sound_cmd_w));
-// AM_RANGE(0xe00000, 0xe00001) AM_WRITENOP
-// AM_RANGE(0xe00010, 0xe00011) AM_WRITENOP
-// AM_RANGE(0xe00020, 0xe00021) AM_WRITENOP
+// map(0xe00000, 0xe00001).nopw();
+// map(0xe00010, 0xe00011).nopw();
+// map(0xe00020, 0xe00021).nopw();
}
WRITE8_MEMBER(go2000_state::go2000_pcm_1_bankswitch_w)
diff --git a/src/mame/drivers/gokidetor.cpp b/src/mame/drivers/gokidetor.cpp
index a1683cda21c..c691354d873 100644
--- a/src/mame/drivers/gokidetor.cpp
+++ b/src/mame/drivers/gokidetor.cpp
@@ -99,7 +99,7 @@ void gokidetor_state::main_map(address_map &map)
// d101 = ?output
// d1c0 = ?output
map(0xd800, 0xd80f).rw("te7750", FUNC(te7750_device::read), FUNC(te7750_device::write));
- //AM_RANGE(0xda00, 0xda01) AM_DEVWRITE("pwm", m66240_device, write)
+ //map(0xda00, 0xda01).w("pwm", FUNC(m66240_device::write));
// de00 ?input
// df00 ?input
map(0xe000, 0xe003).nopr(); // ?input
diff --git a/src/mame/drivers/goldnpkr.cpp b/src/mame/drivers/goldnpkr.cpp
index d96510b6985..45008ba5ff6 100644
--- a/src/mame/drivers/goldnpkr.cpp
+++ b/src/mame/drivers/goldnpkr.cpp
@@ -2033,7 +2033,7 @@ void goldnpkr_state::wildcard_map(address_map &map)
void goldnpkr_state::wcrdxtnd_map(address_map &map)
{
- map(0x0000, 0x07ff).ram(); //AM_SHARE("nvram") /* battery backed RAM */
+ map(0x0000, 0x07ff).ram(); //.share("nvram"); /* battery backed RAM */
map(0x0800, 0x0800).w("crtc", FUNC(mc6845_device::address_w));
map(0x0801, 0x0801).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
map(0x0844, 0x0847).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
@@ -2069,7 +2069,7 @@ void goldnpkr_state::wildcrdb_map(address_map &map)
void goldnpkr_state::wildcrdb_mcu_map(address_map &map)
{
-// ADDRESS_MAP_GLOBAL_MASK(0x3fff)
+// map.global_mask(0x3fff);
map(0x0000, 0x0fff).rom();
map(0x1000, 0x2fff).ram();
}
@@ -4914,7 +4914,7 @@ WRITE8_MEMBER(blitz_state::mcu_portc_w)
void blitz_state::megadpkr_map(address_map &map)
{
- map(0x0000, 0x07ff).ram(); //AM_SHARE("nvram") /* battery backed RAM */
+ map(0x0000, 0x07ff).ram(); //.share("nvram"); /* battery backed RAM */
map(0x0800, 0x0800).w("crtc", FUNC(mc6845_device::address_w));
map(0x0801, 0x0801).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
map(0x0844, 0x0847).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
diff --git a/src/mame/drivers/goldstar.cpp b/src/mame/drivers/goldstar.cpp
index 119f8da4a90..615feca1e5f 100644
--- a/src/mame/drivers/goldstar.cpp
+++ b/src/mame/drivers/goldstar.cpp
@@ -968,6 +968,11 @@ void goldstar_state::common_decrypted_opcodes_map(address_map &map)
map(0x0000, 0x7fff).rom().share("decrypted_opcodes");
}
+void goldstar_state::super972_decrypted_opcodes_map(address_map &map)
+{
+ map(0x0000, 0xefff).rom().share("decrypted_opcodes");
+}
+
void goldstar_state::flaming7_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
@@ -1307,7 +1312,7 @@ void unkch_state::megaline_map(address_map &map)
/* Reels stuff are there just as placeholder, and obviously in wrong offset */
map(0x0000, 0x9fff).rom();
- map(0xd000, 0xd7ff).ram(); //AM_SHARE("nvram")
+ map(0xd000, 0xd7ff).ram(); //.share("nvram");
map(0xd840, 0xd87f).ram().share("reel1_scroll");
map(0xd880, 0xd8bf).ram().share("reel2_scroll");
@@ -8998,6 +9003,13 @@ void wingco_state::lucky8k(machine_config &config)
maincpu.set_decrypted_tag(m_decrypted_opcodes);
}
+void wingco_state::super972(machine_config &config)
+{
+ lucky8(config);
+
+ m_maincpu->set_addrmap(AS_OPCODES, &wingco_state::super972_decrypted_opcodes_map);
+}
+
void wingco_state::bingowng(machine_config &config)
{
/* basic machine hardware */
@@ -12405,11 +12417,7 @@ ROM_END
/*
Super 97-2
- Code jumps above $C000, so offset range C000-F7FF was defined
- as ROM space. However, the game isn't working due to the high
- memory code looks strange. Maybe the program needs some sort
- of address/data descramble...
-
+ Offset range 0xc000 - 0xdfff is encrypted (see init_super972()).
*/
ROM_START( super972 )
ROM_REGION( 0x10000, "maincpu", 0 )
@@ -14925,6 +14933,23 @@ ROM_START( cmast97 )
ROM_LOAD( "82s135.c9", 0x100, 0x100, CRC(85883486) SHA1(adcee60f6fc1e8a75c529951df9e5e1ee277e131) )
ROM_END
+// DYNA D9105 PCB with Sharp LH0080B (Z80B) CPU and 2 customs (DYNA DC4000 and DYNA 22A078803), 5x 8-dips, XTAL 24 MHz. DYNA ELD3 V1.1TA in ROM.
+ROM_START( eldoradd )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD16_WORD( "dyna nel 20t.c14", 0x00000, 0x10000, CRC(77b3b2ce) SHA1(e94b976ae9e5a899d916fffc8118486cbedab8b6) )
+
+ ROM_REGION( 0x100000, "gfx", 0 )
+ ROM_LOAD( "tc538000p-dyna dm9106.g15", 0x000000, 0x100000, CRC(fa84c372) SHA1(a71e57e76321b7ebb16933d9bc983b9160995b4a) )
+
+ ROM_REGION( 0x300, "proms", 0 )
+ ROM_LOAD( "mb7114.e8", 0x000, 0x100, CRC(fa274678) SHA1(6712cb1f7ead1a7aa703ec799e7199c33ace857c) )
+ ROM_LOAD( "mb7114.e10", 0x100, 0x100, CRC(e58877ea) SHA1(30fa873fc05d91610ef68eef54b78f2c7301a62a) )
+ ROM_LOAD( "mb7114.e12", 0x100, 0x100, CRC(781b2842) SHA1(566667d4f81e93b29bb01dbc51bf144c02dff75d) )
+
+ ROM_REGION( 0x400, "plds", 0 ) // available as brute-forced dumps, need to be verified and converted
+ ROM_LOAD( "pal16l8.d13", 0x000, 0x104, NO_DUMP )
+ ROM_LOAD( "pal16l8.e11", 0x200, 0x104, NO_DUMP )
+ROM_END
/*****************************************************************************************
@@ -17200,6 +17225,20 @@ void wingco_state::init_lucky8f() // TODO: simplify
}
}
+void wingco_state::init_super972()
+{
+ uint8_t *rom = memregion("maincpu")->base();
+
+ for (int i = 0x0000; i < 0xf000; i++)
+ m_decrypted_opcodes[i] = rom [i];
+
+ for (int i = 0xc000; i < 0xe000; i++)
+ m_decrypted_opcodes[i] = bitswap<8>(m_decrypted_opcodes[i], 7, 4, 5, 6, 3, 0, 1, 2);;
+
+ for (int i = 0xc000; i < 0xe000; i++)
+ rom[i] = bitswap<8>(rom[i], 7, 2, 5, 0, 3, 6, 1, 4);
+}
+
void cmaster_state::init_nfb96sea()
{
uint8_t *rom = memregion("maincpu")->base();
@@ -17789,6 +17828,7 @@ GAMEL( 199?, chryglda, ncb3, cb3e, chrygld, cb3_state, init_cb3e,
GAME( 1994, chryangla, ncb3, chryangla,ncb3, cb3_state, init_chryangl, ROT0, "bootleg (G.C.I.)", "Cherry Angel (encrypted, W-4 hardware)", MACHINE_NOT_WORKING ) // DYNA CB3 V1.40 string, decrypted but only test screens work
GAME( 1996, cmast97, ncb3, cm97, chrygld, cb3_state, empty_init, ROT0, "Dyna", "Cherry Master '97", MACHINE_NOT_WORKING) // fix prom decode
+GAME( 1991, eldoradd, 0, cm97, chrygld, cb3_state, empty_init, ROT0, "Dyna", "El Dorado", MACHINE_NOT_WORKING) // everything
// looks like a hack of Cherry Bonus 3
GAME( 1994, chryangl, ncb3, chryangl, chryangl, cmaster_state, init_chryangl, ROT0, "bootleg (G.C.I.)", "Cherry Angel", MACHINE_NOT_WORKING ) // SKY SUPERCB 1.0 string, decrypted but hangs when betting
@@ -17850,7 +17890,7 @@ GAMEL( 198?, ns8lines, 0, lucky8, lucky8b, wingco_state, empty_init
GAMEL( 1985, ns8linesa, ns8lines, lucky8, lucky8b, wingco_state, empty_init, ROT0, "Yamate (bootleg)", "New Lucky 8 Lines / New Super 8 Lines (W-4, Lucky97 HW)", 0, layout_lucky8p1 ) // only 1 control set...
GAMEL( 198?, ns8linew, ns8lines, lucky8, ns8linew, wingco_state, empty_init, ROT0, "<unknown>", "New Lucky 8 Lines / New Super 8 Lines (F-5, Witch Bonus)", 0, layout_lucky8 ) // 2 control sets...
GAMEL( 198?, ns8linewa, ns8lines, lucky8, ns8linwa, wingco_state, empty_init, ROT0, "<unknown>", "New Lucky 8 Lines / New Super 8 Lines (W-4, Witch Bonus)", 0, layout_lucky8p1 ) // only 1 control set...
-GAMEL( 198?, super972, ns8lines, lucky8, ns8linew, wingco_state, empty_init, ROT0, "<unknown>", "Super 97-2 (Witch Bonus)", MACHINE_NOT_WORKING, layout_lucky8 ) // ???
+GAMEL( 198?, super972, ns8lines, super972, ns8linwa, wingco_state, init_super972, ROT0, "<unknown>", "Super 97-2 (Witch Bonus)", MACHINE_NOT_WORKING, layout_lucky8p1 ) // decrypted, needs correct inputs
GAME( 198?, luckybar, 0, lucky8, ns8linew, wingco_state, empty_init, ROT0, "<unknown>", "Lucky Bar (W-4 with mc68705 MCU)", MACHINE_NOT_WORKING ) // MC68705 MCU
GAMEL( 198?, kkotnoli, 0, kkotnoli, kkotnoli, goldstar_state, empty_init, ROT0, "hack", "Kkot No Li (Kill the Bees)", MACHINE_IMPERFECT_COLORS, layout_lucky8 )
GAME( 198?, ladylinr, 0, ladylinr, ladylinr, goldstar_state, empty_init, ROT0, "TAB Austria", "Lady Liner (set 1)", 0 )
diff --git a/src/mame/drivers/good.cpp b/src/mame/drivers/good.cpp
index bab6011a41d..6facf45265c 100644
--- a/src/mame/drivers/good.cpp
+++ b/src/mame/drivers/good.cpp
@@ -123,7 +123,7 @@ void good_state::good_map(address_map &map)
{
map(0x000000, 0x01ffff).rom();
- //AM_RANGE(0x270000, 0x270007) AM_RAM // scroll?
+ //map(0x270000, 0x270007).ram(); // scroll?
map(0x270001, 0x270001).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x280000, 0x280001).portr("IN0");
diff --git a/src/mame/drivers/gottlieb.cpp b/src/mame/drivers/gottlieb.cpp
index 87f168784c1..36e019f721c 100644
--- a/src/mame/drivers/gottlieb.cpp
+++ b/src/mame/drivers/gottlieb.cpp
@@ -757,7 +757,7 @@ void gottlieb_state::reactor_map(address_map &map)
map(0x2000, 0x20ff).mirror(0x0f00).writeonly().share("spriteram"); /* FRSEL */
map(0x3000, 0x33ff).mirror(0x0c00).ram().w(FUNC(gottlieb_state::videoram_w)).share("videoram"); /* BRSEL */
map(0x4000, 0x4fff).ram().w(FUNC(gottlieb_state::charram_w)).share("charram"); /* BOJRSEL1 */
-/* AM_RANGE(0x5000, 0x5fff) AM_WRITE() */ /* BOJRSEL2 */
+// map(0x5000, 0x5fff).w(FUNC(gottlieb_state::)); /* BOJRSEL2 */
map(0x6000, 0x601f).mirror(0x0fe0).w(FUNC(gottlieb_state::palette_w)).share("paletteram"); /* COLSEL */
map(0x7000, 0x7000).mirror(0x0ff8).w("watchdog", FUNC(watchdog_timer_device::reset_w));
map(0x7001, 0x7001).mirror(0x0ff8).w(FUNC(gottlieb_state::analog_reset_w)); /* A1J2 interface */
@@ -786,7 +786,7 @@ void gottlieb_state::gottlieb_map(address_map &map)
map(0x5801, 0x5801).mirror(0x07f8).w(FUNC(gottlieb_state::analog_reset_w)); /* A1J2 interface */
map(0x5802, 0x5802).mirror(0x07f8).w(FUNC(gottlieb_state::sound_w)); /* OP20-27 */
map(0x5803, 0x5803).mirror(0x07f8).w(FUNC(gottlieb_state::general_output_w)); /* OP30-37 */
-/* AM_RANGE(0x5804, 0x5804) AM_MIRROR(0x07f8) AM_WRITE()*/ /* OP40-47 */
+// map(0x5804, 0x5804).mirror(0x07f8).w(FUNC(gottlieb_state::)); /* OP40-47 */
map(0x5800, 0x5800).mirror(0x07f8).portr("DSW");
map(0x5801, 0x5801).mirror(0x07f8).portr("IN1"); /* IP10-17 */
map(0x5802, 0x5802).mirror(0x07f8).portr("IN2"); /* trackball H */
diff --git a/src/mame/drivers/gpworld.cpp b/src/mame/drivers/gpworld.cpp
index 5bafebbd9d9..adabe9b843f 100644
--- a/src/mame/drivers/gpworld.cpp
+++ b/src/mame/drivers/gpworld.cpp
@@ -332,9 +332,9 @@ void gpworld_state::mainmem(address_map &map)
map(0xc800, 0xcfff).ram().w(FUNC(gpworld_state::palette_write)).share("palette_ram"); /* The memory test reads at 0xc800 */
map(0xd000, 0xd7ff).ram().share("tile_ram");
map(0xd800, 0xd800).rw(FUNC(gpworld_state::ldp_read), FUNC(gpworld_state::ldp_write));
-/* AM_RANGE(0xd801,0xd801) AM_READ(???) */
+/* map(0xd801, 0xd801).r(FUNC(gpworld_state::???)); */
map(0xda00, 0xda00).portr("INWHEEL"); //8255 here....
-/* AM_RANGE(0xda01,0xda01) AM_WRITE(???) */ /* These inputs are interesting - there are writes and reads all over these addr's */
+/* map(0xda01, 0xda01).w(FUNC(gpworld_state::???)); */ /* These inputs are interesting - there are writes and reads all over these addr's */
map(0xda02, 0xda02).w(FUNC(gpworld_state::brake_gas_write)); /*bit 0 select gas/brake input */
map(0xda20, 0xda20).r(FUNC(gpworld_state::pedal_in));
diff --git a/src/mame/drivers/gridcomp.cpp b/src/mame/drivers/gridcomp.cpp
index df1ae8f140a..c30c166ee4f 100644
--- a/src/mame/drivers/gridcomp.cpp
+++ b/src/mame/drivers/gridcomp.cpp
@@ -318,9 +318,9 @@ void gridcomp_state::grid1121_map(address_map &map)
{
map.unmap_value_high();
map(0x90000, 0x97fff).unmaprw(); // ?? ROM slot
- map(0x9ff00, 0x9ff0f).unmaprw(); // AM_READ(grid_9ff0_r) // ?? ROM?
+ map(0x9ff00, 0x9ff0f).unmaprw(); // .r(FUNC(gridcomp_state::grid_9ff0_r)); // ?? ROM?
map(0xc0000, 0xcffff).unmaprw(); // ?? ROM slot -- signature expected: 0x4554, 0x5048
- map(0xdfe00, 0xdfe1f).unmaprw(); // AM_DEVREADWRITE8("uart8274", i8274_new_device, ba_cd_r, ba_cd_w, 0x00ff)
+ map(0xdfe00, 0xdfe1f).unmaprw(); // .rw("uart8274", FUNC(i8274_new_device::ba_cd_r), FUNC(i8274_new_device::ba_cd_w)).umask16(0x00ff);
map(0xdfe40, 0xdfe4f).unmaprw(); // ?? diagnostic 8274
map(0xdfe80, 0xdfe83).rw("i7220", FUNC(i7220_device::read), FUNC(i7220_device::write)).umask16(0x00ff);
map(0xdfea0, 0xdfeaf).unmaprw(); // ??
diff --git a/src/mame/drivers/gsword.cpp b/src/mame/drivers/gsword.cpp
index 1dae4760d4d..f26dfcf0071 100644
--- a/src/mame/drivers/gsword.cpp
+++ b/src/mame/drivers/gsword.cpp
@@ -641,7 +641,7 @@ void josvolly_state::josvolly_cpu2_map(address_map &map)
/* NEC D8255A with silkscreen removed and replaced with "AA 007" */
map(0x8000, 0x8003).rw("aa_007", FUNC(i8255_device::read), FUNC(i8255_device::write));
-// map(0x6000, 0x6000) AM_WRITE(adpcm_soundcommand_w)
+// map(0x6000, 0x6000).w(FUNC(josvolly_state::adpcm_soundcommand_w));
map(0xA000, 0xA001).rw("mcu2", FUNC(upi41_cpu_device::upi41_master_r), FUNC(upi41_cpu_device::upi41_master_w));
}
diff --git a/src/mame/drivers/gts80a.cpp b/src/mame/drivers/gts80a.cpp
index 7d150b8e492..82838bfe6c6 100644
--- a/src/mame/drivers/gts80a.cpp
+++ b/src/mame/drivers/gts80a.cpp
@@ -453,13 +453,13 @@ void caveman_state::video_map(address_map &map)
void caveman_state::video_io_map(address_map &map)
{
-// AM_RANGE(0x000, 0x002) AM_READWRITE() // 8259 irq controller
-// AM_RANGE(0x100, 0x102) AM_READWRITE() // HD46505
-// AM_RANGE(0x200, 0x200) AM_READWRITE() // 8212 in, ?? out
-// AM_RANGE(0x300, 0x300) AM_READWRITE() // soundlatch (command?) in, ?? out
+// map(0x000, 0x002).rw(FUNC(caveman_state::), FUNC(caveman_state::)); // 8259 irq controller
+// map(0x100, 0x102).rw(FUNC(caveman_state::), FUNC(caveman_state::)); // HD46505
+// map(0x200, 0x200).rw(FUNC(caveman_state::), FUNC(caveman_state::)); // 8212 in, ?? out
+// map(0x300, 0x300).rw(FUNC(caveman_state::), FUNC(caveman_state::)); // soundlatch (command?) in, ?? out
-// AM_RANGE(0x400, 0x400) AM_READ() // joystick inputs
-// AM_RANGE(0x500, 0x506) AM_WRITE() // palette
+// map(0x400, 0x400).r(FUNC(caveman_state::)); // joystick inputs
+// map(0x500, 0x506).w(FUNC(caveman_state::)); // palette
}
diff --git a/src/mame/drivers/gunpey.cpp b/src/mame/drivers/gunpey.cpp
index 81a8280cf08..3bef3057e15 100644
--- a/src/mame/drivers/gunpey.cpp
+++ b/src/mame/drivers/gunpey.cpp
@@ -1087,8 +1087,8 @@ WRITE16_MEMBER(gunpey_state::vregs_addr_w)
void gunpey_state::mem_map(address_map &map)
{
map(0x00000, 0x0ffff).ram().share("wram");
-// AM_RANGE(0x50000, 0x500ff) AM_RAM
-// AM_RANGE(0x50100, 0x502ff) AM_NOP
+// map(0x50000, 0x500ff).ram();
+// map(0x50100, 0x502ff).noprw();
map(0x80000, 0xfffff).rom();
}
@@ -1106,7 +1106,7 @@ void gunpey_state::io_map(address_map &map)
map(0x7fe0, 0x7fe5).w(FUNC(gunpey_state::blitter_upper_w));
map(0x7ff0, 0x7ff5).w(FUNC(gunpey_state::blitter_upper2_w));
- //AM_RANGE(0x7FF0, 0x7FF1) AM_RAM
+ //map(0x7ff0, 0x7ff1).ram();
map(0x7fec, 0x7fed).w(FUNC(gunpey_state::vregs_addr_w));
map(0x7fee, 0x7fef).w(FUNC(gunpey_state::vram_bank_w));
diff --git a/src/mame/drivers/h89.cpp b/src/mame/drivers/h89.cpp
index 4a0f34baab4..43851788c4e 100644
--- a/src/mame/drivers/h89.cpp
+++ b/src/mame/drivers/h89.cpp
@@ -69,25 +69,25 @@ void h89_state::h89_io(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
-// AM_RANGE(0x78, 0x7b) expansion 1 // Options - Cassette I/O (only uses 0x78 - 0x79) Requires MTR-88 ROM
+// map(0x78, 0x7b) expansion 1 // Options - Cassette I/O (only uses 0x78 - 0x79) Requires MTR-88 ROM
// - H37 5-1/4" Soft-sectored Controller MTR-90 ROM
// - H47 Dual 8" Drives - Requires MTR-89 or MTR-90 ROM
// - H67 8" Hard disk + 8" Floppy Drives - MTR-90 ROM
-// AM_RANGE(0x7c, 0x7f) expansion 2 // Options - 5-1/4" Hard-sectored Controller (works with ALL ROMs)
+// map(0x7c, 0x7f) expansion 2 // Options - 5-1/4" Hard-sectored Controller (works with ALL ROMs)
// - H47 Dual 8" Drives - Requires MTR-89 or MTR-90 ROM
// - H67 8" Hard disk + 8" Floppy Drives - MTR-90 ROM
-// AM_RANGE(0xd0, 0xd7) 8250 UART DCE
-// AM_RANGE(0xd8, 0xdf) 8250 UART DTE - MODEM
-// AM_RANGE(0xe0, 0xe7) 8250 UART DCE - LP
+// map(0xd0, 0xd7) 8250 UART DCE
+// map(0xd8, 0xdf) 8250 UART DTE - MODEM
+// map(0xe0, 0xe7) 8250 UART DCE - LP
map(0xe8, 0xef).rw("ins8250", FUNC(ins8250_device::ins8250_r), FUNC(ins8250_device::ins8250_w)); // 8250 UART console - this
// connects internally to a Terminal board
// that is also used in the H19. Ideally,
// the H19 code could be connected and ran
// as a separate thread.
-// AM_RANGE(0xf0, 0xf1) // ports defined on the H8 - on the H89, access to these addresses causes a NMI
+// map(0xf0, 0xf1) // ports defined on the H8 - on the H89, access to these addresses causes a NMI
map(0xf2, 0xf2).w(FUNC(h89_state::port_f2_w)).portr("SW501");
-// AM_RANGE(0xf3, 0xf3) // ports defined on the H8 - on the H89, access to these addresses causes a NMI
+// map(0xf3, 0xf3) // ports defined on the H8 - on the H89, access to these addresses causes a NMI
}
/* Input ports */
diff --git a/src/mame/drivers/hh_sm510.cpp b/src/mame/drivers/hh_sm510.cpp
index 0756e37f04c..f6d540434fa 100644
--- a/src/mame/drivers/hh_sm510.cpp
+++ b/src/mame/drivers/hh_sm510.cpp
@@ -17,11 +17,12 @@ Use -autosave to at least make them remember the highscores.
TODO:
- improve display decay simulation? but SVG doesn't support setting brightness
per segment, adding pwm_display_device right now has no added value
-- improve/redo SVGs of: gnw_mmouse, gnw_egg, exospace
+- improve/redo SVGs of: gnw_egg, exospace
- confirm gnw_egg rom (now using gnw_mmouse rom, but pretty confident that it's
the same)
- confirm gnw_bfight rom (assumed to be the same as gnw_bfightn)
- confirm gnw_climber rom (assumed to be the same as gnw_climbern)
+- confirm gnw_smb rom (assumed to be the same as gnw_smbn)
- dump/add purple version of gnw_judge
- dump/add CN-07 version of gnw_helmet
- Currently there is no accurate way to dump the SM511/SM512 melody ROM
@@ -51,7 +52,7 @@ FL-02 s SM5A Flagman (aka Flag Man)
MT-03 s SM5A Vermin (aka The Exterminator)
RC-04 s SM5A Fire (aka Fireman Fireman)
IP-05 s SM5A Judge
-MN-06* g SM5A? Manhole
+MN-06 g SM5A Manhole
CN-07 g SM5A Helmet (aka Headache)
LN-08 g SM5A Lion
PR-21 ws SM5A Parachute
@@ -102,7 +103,7 @@ UD-202* sc SM510? Crab Grab
BX-301 mvs SM511 Boxing (aka Punch Out)
AK-302* mvs SM511? Donkey Kong 3
HK-303* mvs SM511? Donkey Kong Hockey
-YM-801* cs SM511 Super Mario Bros. (assume same ROM as nws version)
+YM-801 cs SM511 Super Mario Bros. (assume same ROM as nws version)
DR-802 cs SM511 Climber "
BF-803 cs SM511 Balloon Fight "
YM-901-S* x SM511 Super Mario Bros. "
@@ -343,264 +344,178 @@ WRITE8_MEMBER(hh_sm510_state::piezo2bit_input_w)
***************************************************************************/
-// misc
-
-static const s16 piezo2bit_r1_120k_s1_39k[] = { 0, 0x7fff/3*1, 0x7fff/3*2, 0x7fff }; // R via 120K resistor, S1 via 39K resistor (eg. tsonic, tsonic2, tbatmana)
+// building blocks
-void hh_sm510_state::common_base(machine_config &config, u16 width, u16 height)
+void hh_sm510_state::mcfg_cpu_common(machine_config &config)
{
- /* basic machine hardware */
m_maincpu->read_k().set(FUNC(hh_sm510_state::input_r));
-
- /* video hardware */
- screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
- screen.set_refresh_hz(60);
- screen.set_size(width, height);
- screen.set_visarea_full();
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
- SPEAKER_SOUND(config, m_speaker);
- m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
+ m_maincpu->read_ba().set([this] () { return m_io_ba.read_safe(1); });
+ m_maincpu->read_b().set([this] () { return m_io_b.read_safe(1); });
}
-void hh_sm510_state::sm500_base(machine_config &config, u16 width, u16 height)
+void hh_sm510_state::mcfg_cpu_sm5a(machine_config &config)
{
- common_base(config, width, height);
-
+ SM5A(config, m_maincpu);
+ mcfg_cpu_common(config);
+ m_maincpu->set_r_mask_option(sm510_base_device::RMASK_DIRECT);
m_maincpu->write_segs().set(FUNC(hh_sm510_state::sm500_lcd_segment_w));
}
-void hh_sm510_state::sm510_base(machine_config &config, u16 width, u16 height)
+void hh_sm510_state::mcfg_cpu_kb1013vk12(machine_config &config)
{
- common_base(config, width, height);
-
- m_maincpu->write_segs().set(FUNC(hh_sm510_state::sm510_lcd_segment_w));
+ KB1013VK12(config, m_maincpu);
+ mcfg_cpu_common(config);
+ m_maincpu->set_r_mask_option(sm510_base_device::RMASK_DIRECT);
+ m_maincpu->write_segs().set(FUNC(hh_sm510_state::sm500_lcd_segment_w));
}
-void hh_sm510_state::common_sm511(machine_config &config, u16 width, u16 height)
+void hh_sm510_state::mcfg_cpu_sm510(machine_config &config)
{
- SM511(config, m_maincpu);
+ SM510(config, m_maincpu);
+ mcfg_cpu_common(config);
+ m_maincpu->set_r_mask_option(2);
+ m_maincpu->write_segs().set(FUNC(hh_sm510_state::sm510_lcd_segment_w));
m_maincpu->write_s().set(FUNC(hh_sm510_state::input_w));
- m_maincpu->write_r().set(FUNC(hh_sm510_state::piezo_r1_w));
-
- sm510_base(config, width, height);
}
-void hh_sm510_state::konami_sm510(machine_config &config, u16 width, u16 height)
+void hh_sm510_state::mcfg_cpu_sm511(machine_config &config)
{
- SM510(config, m_maincpu);
- m_maincpu->set_r_mask_option(2);
+ SM511(config, m_maincpu);
+ mcfg_cpu_common(config);
+ m_maincpu->write_segs().set(FUNC(hh_sm510_state::sm510_lcd_segment_w));
m_maincpu->write_s().set(FUNC(hh_sm510_state::input_w));
- m_maincpu->write_r().set(FUNC(hh_sm510_state::piezo_r1_w));
-
- sm510_base(config, width, height);
}
-void hh_sm510_state::tiger_sm510_1bit(machine_config &config, u16 width, u16 height)
+void hh_sm510_state::mcfg_cpu_sm512(machine_config &config)
{
- SM510(config, m_maincpu);
- m_maincpu->set_r_mask_option(sm510_base_device::RMASK_DIRECT);
+ SM512(config, m_maincpu);
+ mcfg_cpu_common(config);
+ m_maincpu->write_segs().set(FUNC(hh_sm510_state::sm510_lcd_segment_w));
m_maincpu->write_s().set(FUNC(hh_sm510_state::input_w));
- m_maincpu->write_r().set(FUNC(hh_sm510_state::piezo_r1_w));
- m_maincpu->read_ba().set_ioport("BA");
- m_maincpu->read_b().set_ioport("B");
-
- sm510_base(config, width, height);
}
-void hh_sm510_state::tiger_sm511_1bit(machine_config &config, u16 width, u16 height)
+void hh_sm510_state::mcfg_svg_screen(machine_config &config, u16 width, u16 height, const char *tag)
{
- common_sm511(config, width, height);
-
- m_maincpu->read_ba().set_ioport("BA");
- m_maincpu->read_b().set_ioport("B");
+ screen_device &screen(SCREEN(config, tag, SCREEN_TYPE_SVG));
+ screen.set_refresh_hz(60);
+ screen.set_size(width, height);
+ screen.set_visarea_full();
}
-void hh_sm510_state::tiger_sm511_2bit(machine_config &config, u16 width, u16 height)
+void hh_sm510_state::mcfg_sound_r1(machine_config &config)
{
- SM511(config, m_maincpu);
- m_maincpu->write_s().set(FUNC(hh_sm510_state::piezo2bit_input_w));
- m_maincpu->write_r().set(FUNC(hh_sm510_state::piezo2bit_r1_w));
- m_maincpu->read_ba().set_ioport("BA");
- m_maincpu->read_b().set_ioport("B");
-
- sm510_base(config, width, height);
+ SPEAKER(config, "mono").front_center();
+ SPEAKER_SOUND(config, m_speaker);
+ m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
- m_speaker->set_levels(4, piezo2bit_r1_120k_s1_39k);
+ m_maincpu->write_r().set(FUNC(hh_sm510_state::piezo_r1_w));
}
-namespace {
-
-// Game & Watch
-
-class gnw_state : public hh_sm510_state
-{
-protected:
- gnw_state(const machine_config &mconfig, device_type type, const char *tag) :
- hh_sm510_state(mconfig, type, tag),
- m_io_ba(*this, "BA"),
- m_io_b(*this, "B")
- {
- }
-
- void gnw_sm5a(machine_config &config, u16 width, u16 height);
- void gnw_sm5a_matrix(machine_config &config, u16 width, u16 height);
- void gnw_kb1013vk12_matrix(machine_config &config, u16 width, u16 height);
- void gnw_sm510(machine_config &config, u16 width, u16 height);
- void gnw_sm511(machine_config &config, u16 width, u16 height);
- void gnw_sm510_dualh(machine_config &config, u16 leftwidth, u16 leftheight, u16 rightwidth, u16 rightheight);
- void gnw_sm510_dualv(machine_config &config, u16 topwidth, u16 topheight, u16 botwidth, u16 botheight);
- void gnw_sm511_dualv(machine_config &config, u16 topwidth, u16 topheight, u16 botwidth, u16 botheight);
- void gnw_sm512_dualv(machine_config &config, u16 topwidth, u16 topheight, u16 botwidth, u16 botheight);
-
-private:
- void gnw_dualh(machine_config &config, u16 leftwidth, u16 leftheight, u16 rightwidth, u16 rightheight);
- void gnw_dualv(machine_config &config, u16 topwidth, u16 topheight, u16 botwidth, u16 botheight);
-
- optional_ioport m_io_ba, m_io_b;
-};
+// common presets
-void gnw_state::gnw_sm5a(machine_config &config, u16 width, u16 height)
+void hh_sm510_state::sm5a_common(machine_config &config, u16 width, u16 height)
{
- SM5A(config, m_maincpu);
- m_maincpu->set_r_mask_option(sm510_base_device::RMASK_DIRECT);
- m_maincpu->write_r().set(FUNC(gnw_state::piezo_r1_w));
- m_maincpu->read_ba().set([this] () { return m_io_ba.read_safe(1); });
- m_maincpu->read_b().set([this] () { return m_io_b.read_safe(1); });
-
- sm500_base(config, width, height);
+ mcfg_cpu_sm5a(config);
+ mcfg_sound_r1(config);
+ m_maincpu->write_r().set(FUNC(hh_sm510_state::piezo_input_w));
+ mcfg_svg_screen(config, width, height);
}
-void gnw_state::gnw_sm5a_matrix(machine_config &config, u16 width, u16 height)
+void hh_sm510_state::kb1013vk12_common(machine_config &config, u16 width, u16 height)
{
- SM5A(config, m_maincpu);
- m_maincpu->set_r_mask_option(sm510_base_device::RMASK_DIRECT);
- m_maincpu->write_r().set(FUNC(gnw_state::piezo_input_w));
- m_maincpu->read_ba().set([this] () { return m_io_ba.read_safe(1); });
- m_maincpu->read_b().set([this] () { return m_io_b.read_safe(1); });
-
- sm500_base(config, width, height);
+ mcfg_cpu_kb1013vk12(config);
+ mcfg_sound_r1(config);
+ m_maincpu->write_r().set(FUNC(hh_sm510_state::piezo_input_w));
+ mcfg_svg_screen(config, width, height);
}
-void gnw_state::gnw_kb1013vk12_matrix(machine_config &config, u16 width, u16 height)
+void hh_sm510_state::sm510_common(machine_config &config, u16 width, u16 height)
{
- KB1013VK12(config, m_maincpu);
- m_maincpu->set_r_mask_option(sm510_base_device::RMASK_DIRECT);
- m_maincpu->write_r().set(FUNC(gnw_state::piezo_input_w));
- m_maincpu->read_ba().set([this] () { return m_io_ba.read_safe(1); });
- m_maincpu->read_b().set([this] () { return m_io_b.read_safe(1); });
-
- sm500_base(config, width, height);
+ mcfg_cpu_sm510(config);
+ mcfg_sound_r1(config);
+ mcfg_svg_screen(config, width, height);
}
-void gnw_state::gnw_sm510(machine_config &config, u16 width, u16 height)
+void hh_sm510_state::sm511_common(machine_config &config, u16 width, u16 height)
{
- SM510(config, m_maincpu);
- m_maincpu->set_r_mask_option(2);
- m_maincpu->write_s().set(FUNC(gnw_state::input_w));
- m_maincpu->write_r().set(FUNC(gnw_state::piezo_r1_w));
- m_maincpu->read_ba().set([this] () { return m_io_ba.read_safe(1); });
- m_maincpu->read_b().set([this] () { return m_io_b.read_safe(1); });
-
- sm510_base(config, width, height);
+ mcfg_cpu_sm511(config);
+ mcfg_sound_r1(config);
+ mcfg_svg_screen(config, width, height);
}
-void gnw_state::gnw_sm511(machine_config &config, u16 width, u16 height)
-{
- common_sm511(config, width, height);
- m_maincpu->read_ba().set([this] () { return m_io_ba.read_safe(1); });
- m_maincpu->read_b().set([this] () { return m_io_b.read_safe(1); });
-}
+// deviations
-void gnw_state::gnw_sm510_dualh(machine_config &config, u16 leftwidth, u16 leftheight, u16 rightwidth, u16 rightheight)
+// multi-screen
+
+void hh_sm510_state::sm510_dualh(machine_config &config, u16 leftwidth, u16 leftheight, u16 rightwidth, u16 rightheight)
{
- SM510(config, m_maincpu);
- m_maincpu->set_r_mask_option(2);
+ mcfg_cpu_sm510(config);
+ mcfg_sound_r1(config);
+ mcfg_svg_screen(config, leftwidth, leftheight, "screen_left");
+ mcfg_svg_screen(config, rightwidth, rightheight, "screen_right");
- gnw_dualh(config, leftwidth, leftheight, rightwidth, rightheight);
+ config.set_default_layout(layout_gnw_dualh);
}
-void gnw_state::gnw_sm510_dualv(machine_config &config, u16 topwidth, u16 topheight, u16 botwidth, u16 botheight)
+void hh_sm510_state::dualv_common(machine_config &config, u16 topwidth, u16 topheight, u16 botwidth, u16 botheight)
{
- SM510(config, m_maincpu);
- m_maincpu->set_r_mask_option(2);
+ mcfg_sound_r1(config);
+ mcfg_svg_screen(config, topwidth, topheight, "screen_top");
+ mcfg_svg_screen(config, botwidth, botheight, "screen_bottom");
- gnw_dualv(config, topwidth, topheight, botwidth, botheight);
+ config.set_default_layout(layout_gnw_dualv);
}
-void gnw_state::gnw_sm511_dualv(machine_config &config, u16 topwidth, u16 topheight, u16 botwidth, u16 botheight)
+void hh_sm510_state::sm510_dualv(machine_config &config, u16 topwidth, u16 topheight, u16 botwidth, u16 botheight)
{
- SM511(config, m_maincpu);
-
- gnw_dualv(config, topwidth, topheight, botwidth, botheight);
+ mcfg_cpu_sm510(config);
+ dualv_common(config, topwidth, topheight, botwidth, botheight);
}
-void gnw_state::gnw_sm512_dualv(machine_config &config, u16 topwidth, u16 topheight, u16 botwidth, u16 botheight)
+void hh_sm510_state::sm511_dualv(machine_config &config, u16 topwidth, u16 topheight, u16 botwidth, u16 botheight)
{
- SM512(config, m_maincpu);
-
- gnw_dualv(config, topwidth, topheight, botwidth, botheight);
+ mcfg_cpu_sm511(config);
+ dualv_common(config, topwidth, topheight, botwidth, botheight);
}
-void gnw_state::gnw_dualh(machine_config &config, u16 leftwidth, u16 leftheight, u16 rightwidth, u16 rightheight)
+void hh_sm510_state::sm512_dualv(machine_config &config, u16 topwidth, u16 topheight, u16 botwidth, u16 botheight)
{
- /* basic machine hardware */
- m_maincpu->write_segs().set(FUNC(gnw_state::sm510_lcd_segment_w));
- m_maincpu->read_k().set(FUNC(gnw_state::input_r));
- m_maincpu->write_s().set(FUNC(gnw_state::input_w));
- m_maincpu->write_r().set(FUNC(gnw_state::piezo_r1_w));
- m_maincpu->read_ba().set([this] () { return m_io_ba.read_safe(1); });
- m_maincpu->read_b().set([this] () { return m_io_b.read_safe(1); });
+ mcfg_cpu_sm512(config);
+ dualv_common(config, topwidth, topheight, botwidth, botheight);
+}
- /* video hardware */
- screen_device &screen_left(SCREEN(config, "screen_left", SCREEN_TYPE_SVG));
- screen_left.set_refresh_hz(60);
- screen_left.set_size(leftwidth, leftheight);
- screen_left.set_visarea_full();
- screen_device &screen_right(SCREEN(config, "screen_right", SCREEN_TYPE_SVG));
- screen_right.set_refresh_hz(60);
- screen_right.set_size(rightwidth, rightheight);
- screen_right.set_visarea_full();
+// Tiger (SM510 R mask is direct, BA/B pins always connected)
- config.set_default_layout(layout_gnw_dualh);
+void hh_sm510_state::sm510_tiger(machine_config &config, u16 width, u16 height)
+{
+ sm510_common(config, width, height);
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
- SPEAKER_SOUND(config, m_speaker);
- m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
+ m_maincpu->set_r_mask_option(sm510_base_device::RMASK_DIRECT);
+ m_maincpu->read_ba().set_ioport("BA");
+ m_maincpu->read_b().set_ioport("B");
}
-void gnw_state::gnw_dualv(machine_config &config, u16 topwidth, u16 topheight, u16 botwidth, u16 botheight)
+void hh_sm510_state::sm511_tiger1bit(machine_config &config, u16 width, u16 height)
{
- /* basic machine hardware */
- m_maincpu->write_segs().set(FUNC(gnw_state::sm510_lcd_segment_w));
- m_maincpu->read_k().set(FUNC(gnw_state::input_r));
- m_maincpu->write_s().set(FUNC(gnw_state::input_w));
- m_maincpu->write_r().set(FUNC(gnw_state::piezo_r1_w));
- m_maincpu->read_ba().set([this] () { return m_io_ba.read_safe(1); });
- m_maincpu->read_b().set([this] () { return m_io_b.read_safe(1); });
+ sm511_common(config, width, height);
- /* video hardware */
- screen_device &screen_top(SCREEN(config, "screen_top", SCREEN_TYPE_SVG));
- screen_top.set_refresh_hz(60);
- screen_top.set_size(topwidth, topheight);
- screen_top.set_visarea_full();
+ m_maincpu->read_ba().set_ioport("BA");
+ m_maincpu->read_b().set_ioport("B");
+}
- screen_device &screen_bottom(SCREEN(config, "screen_bottom", SCREEN_TYPE_SVG));
- screen_bottom.set_refresh_hz(60);
- screen_bottom.set_size(botwidth, botheight);
- screen_bottom.set_visarea_full();
+void hh_sm510_state::sm511_tiger2bit(machine_config &config, u16 width, u16 height)
+{
+ sm511_tiger1bit(config, width, height);
- config.set_default_layout(layout_gnw_dualv);
+ m_maincpu->write_s().set(FUNC(hh_sm510_state::piezo2bit_input_w));
+ m_maincpu->write_r().set(FUNC(hh_sm510_state::piezo2bit_r1_w));
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
- SPEAKER_SOUND(config, m_speaker);
- m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
+ // R via 120K resistor, S1 via 39K resistor (eg. tsonic, tsonic2, tbatmana)
+ static const s16 speaker_levels[] = { 0, 0x7fff/3*1, 0x7fff/3*2, 0x7fff };
+ m_speaker->set_levels(4, speaker_levels);
}
@@ -611,6 +526,8 @@ void gnw_state::gnw_dualv(machine_config &config, u16 topwidth, u16 topheight, u
***************************************************************************/
+namespace {
+
/***************************************************************************
Nintendo Game & Watch: Ball (model AC-01)
@@ -622,11 +539,11 @@ void gnw_state::gnw_dualv(machine_config &config, u16 topwidth, u16 topheight, u
***************************************************************************/
-class gnw_ball_state : public gnw_state
+class gnw_ball_state : public hh_sm510_state
{
public:
gnw_ball_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{
inp_fixed_last();
}
@@ -657,7 +574,7 @@ INPUT_PORTS_END
void gnw_ball_state::gnw_ball(machine_config &config)
{
- gnw_sm5a(config, 1671, 1080); // R option mask confirmed
+ sm5a_common(config, 1671, 1080); // R option mask confirmed
}
// roms
@@ -666,8 +583,8 @@ ROM_START( gnw_ball )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "ac-01", 0x0000, 0x0740, CRC(ac94e6e4) SHA1(8270cb61f9fbff252eafec411b4c67f0171f8687) )
- ROM_REGION( 71584, "screen", 0)
- ROM_LOAD( "gnw_ball.svg", 0, 71584, CRC(4998c774) SHA1(55bf0736c07acbea41ca3d65f6d2da1a06728270) )
+ ROM_REGION( 71748, "screen", 0)
+ ROM_LOAD( "gnw_ball.svg", 0, 71748, CRC(7c116eaf) SHA1(578882af492b8a9f1eb72e06a547c8b574255fb9) )
ROM_END
@@ -685,11 +602,11 @@ ROM_END
***************************************************************************/
-class gnw_flagman_state : public gnw_state
+class gnw_flagman_state : public hh_sm510_state
{
public:
gnw_flagman_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_flagman(machine_config &config);
@@ -722,7 +639,7 @@ INPUT_PORTS_END
void gnw_flagman_state::gnw_flagman(machine_config &config)
{
- gnw_sm5a_matrix(config, 1511, 1080); // R mask option confirmed
+ sm5a_common(config, 1511, 1080); // R mask option confirmed
}
// roms
@@ -731,8 +648,8 @@ ROM_START( gnw_flagman )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "fl-02", 0x0000, 0x0740, CRC(cc7a99e4) SHA1(d03d9a6b278bc11df7839708831241b5fa805f69) )
- ROM_REGION( 55994, "screen", 0)
- ROM_LOAD( "gnw_flagman.svg", 0, 55994, CRC(7ab91965) SHA1(a78b8b28b6849fea6a216c4b549c90e8cf1602fe) )
+ ROM_REGION( 56163, "screen", 0)
+ ROM_LOAD( "gnw_flagman.svg", 0, 56163, CRC(3aa97c65) SHA1(a363e71d371e5c85835cb3a0679760d0aedc75d5) )
ROM_END
@@ -750,11 +667,11 @@ ROM_END
***************************************************************************/
-class gnw_vermin_state : public gnw_state
+class gnw_vermin_state : public hh_sm510_state
{
public:
gnw_vermin_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{
inp_fixed_last();
}
@@ -785,7 +702,7 @@ INPUT_PORTS_END
void gnw_vermin_state::gnw_vermin(machine_config &config)
{
- gnw_sm5a(config, 1650, 1080); // R mask option confirmed
+ sm5a_common(config, 1650, 1080); // R mask option confirmed
}
// roms
@@ -794,8 +711,8 @@ ROM_START( gnw_vermin )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mt-03", 0x0000, 0x0740, CRC(f8493177) SHA1(d629432ef8e9fbd7bbdc3fbeb45d9bd70d9d571b) )
- ROM_REGION( 105437, "screen", 0)
- ROM_LOAD( "gnw_vermin.svg", 0, 105437, CRC(c0fc6c40) SHA1(fc64292185aa3d0c92ddfce9227722a17aa5d43f) )
+ ROM_REGION( 105603, "screen", 0)
+ ROM_LOAD( "gnw_vermin.svg", 0, 105603, CRC(1bd59ef4) SHA1(099120105e80d4753838ea513ffa784c4690cf5f) )
ROM_END
@@ -815,11 +732,11 @@ ROM_END
***************************************************************************/
-class gnw_fires_state : public gnw_state
+class gnw_fires_state : public hh_sm510_state
{
public:
gnw_fires_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{
inp_fixed_last();
}
@@ -850,7 +767,7 @@ INPUT_PORTS_END
void gnw_fires_state::gnw_fires(machine_config &config)
{
- gnw_sm5a(config, 1646, 1080); // R mask option confirmed
+ sm5a_common(config, 1646, 1080); // R mask option confirmed
}
// roms
@@ -859,8 +776,8 @@ ROM_START( gnw_fires )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "rc-04", 0x0000, 0x0740, CRC(154ef27d) SHA1(fb65826dfd405ad05fe0f5f947c213214bbd61c0) )
- ROM_REGION( 102509, "screen", 0)
- ROM_LOAD( "gnw_fires.svg", 0, 102509, CRC(314152ca) SHA1(bb6cd7dfba54d8cd5698c0cf2f381a1489cd8286) )
+ ROM_REGION( 102678, "screen", 0)
+ ROM_LOAD( "gnw_fires.svg", 0, 102678, CRC(4f61f2f8) SHA1(2873629f0e36d3170bc284fa031a9c6181021495) )
ROM_END
@@ -880,11 +797,11 @@ ROM_END
***************************************************************************/
-class gnw_judge_state : public gnw_state
+class gnw_judge_state : public hh_sm510_state
{
public:
gnw_judge_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_judge(machine_config &config);
@@ -917,7 +834,7 @@ INPUT_PORTS_END
void gnw_judge_state::gnw_judge(machine_config &config)
{
- gnw_sm5a_matrix(config, 1647, 1080); // R mask option confirmed
+ sm5a_common(config, 1647, 1080); // R mask option confirmed
}
// roms
@@ -926,8 +843,79 @@ ROM_START( gnw_judge )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "ip-05", 0x0000, 0x0740, CRC(1b28a834) SHA1(cb8dbbf678ba22c4484d18cc1a6b99c1d34d1951) )
- ROM_REGION( 104950, "screen", 0)
- ROM_LOAD( "gnw_judge.svg", 0, 104950, CRC(fb51e31b) SHA1(c78e6d80aa5b59de1955ba5f83cc138b83bf714c) )
+ ROM_REGION( 105108, "screen", 0)
+ ROM_LOAD( "gnw_judge.svg", 0, 105108, CRC(7760e82e) SHA1(cfc1f08465ecc8ac3385bcb078268cbbfca9fc41) )
+ROM_END
+
+
+
+
+
+/***************************************************************************
+
+ Nintendo Game & Watch: Manhole (model MH-06)
+ * PCB label MH-06
+ * Sharp SM5A label MH-06 5104 (no decap)
+ * lcd screen with custom segments, 1-bit sound
+
+ This is the Gold Series version, there's also a new wide screen version
+ (NH-103)
+
+***************************************************************************/
+
+class gnw_manholeg_state : public hh_sm510_state
+{
+public:
+ gnw_manholeg_state(const machine_config &mconfig, device_type type, const char *tag) :
+ hh_sm510_state(mconfig, type, tag)
+ { }
+
+ void gnw_manholeg(machine_config &config);
+};
+
+// config
+
+static INPUT_PORTS_START( gnw_manholeg )
+ PORT_START("IN.0") // R2
+ PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("IN.1") // R3
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_DOWN ) PORT_CHANGED_CB(input_changed) PORT_16WAY
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_UP ) PORT_CHANGED_CB(input_changed) PORT_16WAY
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_DOWN ) PORT_CHANGED_CB(input_changed) PORT_16WAY
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_UP ) PORT_CHANGED_CB(input_changed) PORT_16WAY
+
+ PORT_START("IN.2") // R4
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_CHANGED_CB(input_changed) PORT_NAME("Time")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Game B")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Game A")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SERVICE2 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Alarm")
+
+ PORT_START("B")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) // display test?
+
+ PORT_START("BA")
+ PORT_CONFNAME( 0x01, 0x01, "Invincibility (Cheat)") // factory test, unpopulated on PCB
+ PORT_CONFSETTING( 0x01, DEF_STR( Off ) )
+ PORT_CONFSETTING( 0x00, DEF_STR( On ) )
+
+ PORT_START("ACL")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_CHANGED_CB(acl_button) PORT_NAME("ACL")
+INPUT_PORTS_END
+
+void gnw_manholeg_state::gnw_manholeg(machine_config &config)
+{
+ sm5a_common(config, 1667, 1080); // R mask option confirmed
+}
+
+// roms
+
+ROM_START( gnw_manholeg )
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "mh-06", 0x0000, 0x0740, CRC(ae52c425) SHA1(8da8a714ecbdde7d0f257b52a5014993675a5f3f) )
+
+ ROM_REGION( 125607, "screen", 0)
+ ROM_LOAD( "gnw_manholeg.svg", 0, 125607, CRC(4b281ff2) SHA1(18f212ab5738756e0841d6afa401a03f7aaddf7b) )
ROM_END
@@ -947,11 +935,11 @@ ROM_END
***************************************************************************/
-class gnw_helmet_state : public gnw_state
+class gnw_helmet_state : public hh_sm510_state
{
public:
gnw_helmet_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_helmet(machine_config &config);
@@ -989,7 +977,7 @@ INPUT_PORTS_END
void gnw_helmet_state::gnw_helmet(machine_config &config)
{
- gnw_sm5a_matrix(config, 1657, 1080); // R mask option confirmed
+ sm5a_common(config, 1657, 1080); // R mask option confirmed
}
// roms
@@ -998,8 +986,8 @@ ROM_START( gnw_helmet )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "cn-17", 0x0000, 0x0740, CRC(6d251e2e) SHA1(c61f591514de36fb2270038a6505945564c9f90e) )
- ROM_REGION( 109241, "screen", 0)
- ROM_LOAD( "gnw_helmet.svg", 0, 109241, CRC(fa8294a3) SHA1(05b734ac0126d3bffe160a23753a0a7e6f82996e) )
+ ROM_REGION( 109404, "screen", 0)
+ ROM_LOAD( "gnw_helmet.svg", 0, 109404, CRC(0dce1694) SHA1(412e69054b95f17fe08545f3c303c11abbe26304) )
ROM_END
@@ -1019,11 +1007,11 @@ ROM_END
***************************************************************************/
-class gnw_lion_state : public gnw_state
+class gnw_lion_state : public hh_sm510_state
{
public:
gnw_lion_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_lion(machine_config &config);
@@ -1061,7 +1049,7 @@ INPUT_PORTS_END
void gnw_lion_state::gnw_lion(machine_config &config)
{
- gnw_sm5a_matrix(config, 1646, 1080); // R mask option confirmed
+ sm5a_common(config, 1646, 1080); // R mask option confirmed
}
// roms
@@ -1070,8 +1058,8 @@ ROM_START( gnw_lion )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "ln-08", 0x0000, 0x0740, CRC(9677681d) SHA1(6f7c960e04b63f1b7d926b598413f4c818b8fe53) )
- ROM_REGION( 155699, "screen", 0)
- ROM_LOAD( "gnw_lion.svg", 0, 155699, CRC(32b28c6f) SHA1(95aa397ed39408c80957f0f850e36dfe73e337fd) )
+ ROM_REGION( 155863, "screen", 0)
+ ROM_LOAD( "gnw_lion.svg", 0, 155863, CRC(b5a5a4dc) SHA1(49d894d6e1d1fb35cd11f08c7ce30518be89dd0f) )
ROM_END
@@ -1087,11 +1075,11 @@ ROM_END
***************************************************************************/
-class gnw_pchute_state : public gnw_state
+class gnw_pchute_state : public hh_sm510_state
{
public:
gnw_pchute_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_pchute(machine_config &config);
@@ -1129,7 +1117,7 @@ INPUT_PORTS_END
void gnw_pchute_state::gnw_pchute(machine_config &config)
{
- gnw_sm5a_matrix(config, 1602, 1080); // R mask option confirmed
+ sm5a_common(config, 1602, 1080); // R mask option confirmed
}
// roms
@@ -1138,8 +1126,8 @@ ROM_START( gnw_pchute )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "pr-21", 0x0000, 0x0740, CRC(392b545e) SHA1(e71940cd4cee07ba1e62c1c7d9e9b19410e7232d) )
- ROM_REGION( 169486, "screen", 0)
- ROM_LOAD( "gnw_pchute.svg", 0, 169486, CRC(bf86e0f9) SHA1(d2fba49453afc4bd1f16613f833a8748b6a36764) )
+ ROM_REGION( 169640, "screen", 0)
+ ROM_LOAD( "gnw_pchute.svg", 0, 169640, CRC(f30a0b31) SHA1(676989a418ae0dfe6bb1b097640422219c930453) )
ROM_END
@@ -1159,11 +1147,11 @@ ROM_END
***************************************************************************/
-class gnw_octopus_state : public gnw_state
+class gnw_octopus_state : public hh_sm510_state
{
public:
gnw_octopus_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_octopus(machine_config &config);
@@ -1201,7 +1189,7 @@ INPUT_PORTS_END
void gnw_octopus_state::gnw_octopus(machine_config &config)
{
- gnw_sm5a_matrix(config, 1586, 1080); // R mask option confirmed
+ sm5a_common(config, 1586, 1080); // R mask option confirmed
}
// roms
@@ -1210,8 +1198,8 @@ ROM_START( gnw_octopus )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "oc-22", 0x0000, 0x0740, CRC(bd27781d) SHA1(07b4feb9265c83b159f96c7e8ee1c61a2cc17dc5) )
- ROM_REGION( 119681, "screen", 0)
- ROM_LOAD( "gnw_octopus.svg", 0, 119681, CRC(39900430) SHA1(61b71c475365966257f5479eab992538ec235c11) )
+ ROM_REGION( 119827, "screen", 0)
+ ROM_LOAD( "gnw_octopus.svg", 0, 119827, CRC(efbdaa65) SHA1(42c746bef282176d59f57ddf7328f8d034f4ca02) )
ROM_END
@@ -1229,11 +1217,11 @@ ROM_END
***************************************************************************/
-class gnw_popeye_state : public gnw_state
+class gnw_popeye_state : public hh_sm510_state
{
public:
gnw_popeye_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_popeye(machine_config &config);
@@ -1271,7 +1259,7 @@ INPUT_PORTS_END
void gnw_popeye_state::gnw_popeye(machine_config &config)
{
- gnw_sm5a_matrix(config, 1604, 1080); // R mask option confirmed
+ sm5a_common(config, 1604, 1080); // R mask option confirmed
}
// roms
@@ -1280,8 +1268,8 @@ ROM_START( gnw_popeye )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "pp-23", 0x0000, 0x0740, CRC(49987769) SHA1(ad90659a3ce7169a4df16367c5307435d9f9d956) )
- ROM_REGION( 218428, "screen", 0)
- ROM_LOAD( "gnw_popeye.svg", 0, 218428, CRC(b2c3fdf2) SHA1(5e782f25f9ff432a292e67efc7f5653cf2a81b60) )
+ ROM_REGION( 218587, "screen", 0)
+ ROM_LOAD( "gnw_popeye.svg", 0, 218587, CRC(4740bcd5) SHA1(a46ab455f2dd41caabd6c85cfa7dfde70805f157) )
ROM_END
@@ -1301,11 +1289,11 @@ ROM_END
***************************************************************************/
-class gnw_chef_state : public gnw_state
+class gnw_chef_state : public hh_sm510_state
{
public:
gnw_chef_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void merrycook(machine_config &config);
@@ -1341,12 +1329,12 @@ INPUT_PORTS_END
void gnw_chef_state::gnw_chef(machine_config &config)
{
- gnw_sm5a_matrix(config, 1666, 1080); // assuming same R mask option as merry cook
+ sm5a_common(config, 1666, 1080); // assuming same R mask option as merry cook
}
void gnw_chef_state::merrycook(machine_config & config)
{
- gnw_kb1013vk12_matrix(config, 1679, 1080); // R mask option confirmed
+ kb1013vk12_common(config, 1679, 1080); // R mask option confirmed
}
// roms
@@ -1355,16 +1343,16 @@ ROM_START( gnw_chef )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "fp-24", 0x0000, 0x0740, CRC(2806ab39) SHA1(18261a80eec5bf768bb88b803c598f80e078c71f) )
- ROM_REGION( 199453, "screen", 0)
- ROM_LOAD( "gnw_chef.svg", 0, 199453, CRC(97aacb9a) SHA1(1d4b2cc70a541ad09bc13c09ce26a8c14c03c526) )
+ ROM_REGION( 199518, "screen", 0)
+ ROM_LOAD( "gnw_chef.svg", 0, 199518, CRC(ecc18d28) SHA1(1c0b7dfff71faa4d4395c19a84454870e403f927) )
ROM_END
ROM_START( merrycook )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "merrycook.bin", 0x0000, 0x0740, CRC(2806ab39) SHA1(18261a80eec5bf768bb88b803c598f80e078c71f) )
- ROM_REGION( 143959, "screen", 0)
- ROM_LOAD( "merrycook.svg", 0, 143959, CRC(36f41ff0) SHA1(47a7886f7825b781e1cf54215c86f5105d6c3b0e) )
+ ROM_REGION( 144128, "screen", 0)
+ ROM_LOAD( "merrycook.svg", 0, 144128, CRC(dcd1c073) SHA1(e15bf643f17b7ead37407c985e053e6434683d7c) )
ROM_END
@@ -1389,11 +1377,11 @@ ROM_END
***************************************************************************/
-class gnw_mmouse_state : public gnw_state
+class gnw_mmouse_state : public hh_sm510_state
{
public:
gnw_mmouse_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void exospace(machine_config &config);
@@ -1438,22 +1426,22 @@ INPUT_PORTS_END
void gnw_mmouse_state::gnw_mmouse(machine_config &config)
{
- gnw_sm5a_matrix(config, 1711, 1080); // R mask option ?
+ sm5a_common(config, 1684, 1080); // R mask option ?
}
void gnw_mmouse_state::gnw_egg(machine_config &config)
{
- gnw_sm5a_matrix(config, 1694, 1080); // R mask option ?
+ sm5a_common(config, 1694, 1080); // R mask option ?
}
void gnw_mmouse_state::nupogodi(machine_config &config)
{
- gnw_kb1013vk12_matrix(config, 1715, 1080); // R mask option ?
+ kb1013vk12_common(config, 1715, 1080); // R mask option ?
}
void gnw_mmouse_state::exospace(machine_config &config)
{
- gnw_kb1013vk12_matrix(config, 1756, 1080); // R mask option ?
+ kb1013vk12_common(config, 1756, 1080); // R mask option ?
}
// roms
@@ -1462,32 +1450,32 @@ ROM_START( gnw_mmouse )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mc-25", 0x0000, 0x0740, CRC(cb820c32) SHA1(7e94fc255f32db725d5aa9e196088e490c1a1443) )
- ROM_REGION( 102453, "screen", 0)
- ROM_LOAD( "gnw_mmouse.svg", 0, 102453, BAD_DUMP CRC(88cc7c49) SHA1(c000d51d1b99750116b97f9bafc0314ea506366d) )
+ ROM_REGION( 181706, "screen", 0)
+ ROM_LOAD( "gnw_mmouse.svg", 0, 181706, CRC(60cdc76a) SHA1(09755abd16222c1a0fe6c7ebb902706440d3e369) )
ROM_END
ROM_START( gnw_egg )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "eg-26", 0x0000, 0x0740, BAD_DUMP CRC(cb820c32) SHA1(7e94fc255f32db725d5aa9e196088e490c1a1443) ) // dumped from MC-25
- ROM_REGION( 102848, "screen", 0)
- ROM_LOAD( "gnw_egg.svg", 0, 102848, BAD_DUMP CRC(742c2605) SHA1(984d430ad2ff47ad7a3f9b25b7d3f3d51b10cca5) )
+ ROM_REGION( 102902, "screen", 0)
+ ROM_LOAD( "gnw_egg.svg", 0, 102902, BAD_DUMP CRC(dcd92ddf) SHA1(5d6c144a0cb9fb9c58aee965290a5428df90af21) )
ROM_END
ROM_START( nupogodi )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "nupogodi.bin", 0x0000, 0x0740, CRC(cb820c32) SHA1(7e94fc255f32db725d5aa9e196088e490c1a1443) )
- ROM_REGION( 156974, "screen", 0)
- ROM_LOAD( "nupogodi.svg", 0, 156974, CRC(8d522ec6) SHA1(67afeca5eebd16449353ea43070a6b919f7ba408) )
+ ROM_REGION( 156488, "screen", 0)
+ ROM_LOAD( "nupogodi.svg", 0, 156488, CRC(8ae6ec5d) SHA1(28cb05967837e52fc40f088361456e1dcd4ec09f) )
ROM_END
ROM_START( exospace )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "exospace.bin", 0x0000, 0x0740, CRC(553e2b09) SHA1(2b74f8437b881fbb62b61f25435a5bfc66872a9a) )
- ROM_REGION( 66790, "screen", 0)
- ROM_LOAD( "exospace.svg", 0, 66790, BAD_DUMP CRC(df31043a) SHA1(2d8caf42894df699e469652e5f448beaebbcc1ae) )
+ ROM_REGION( 66850, "screen", 0)
+ ROM_LOAD( "exospace.svg", 0, 66850, BAD_DUMP CRC(905e2cf0) SHA1(38181381fb50bc01afe9f5827999636b051c0be0) )
ROM_END
@@ -1511,11 +1499,11 @@ ROM_END
***************************************************************************/
-class gnw_fire_state : public gnw_state
+class gnw_fire_state : public hh_sm510_state
{
public:
gnw_fire_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void spacebridge(machine_config &config);
@@ -1554,12 +1542,12 @@ INPUT_PORTS_END
void gnw_fire_state::gnw_fire(machine_config &config)
{
- gnw_sm5a_matrix(config, 1624, 1080); // R mask option confirmed
+ sm5a_common(config, 1624, 1080); // R mask option confirmed
}
void gnw_fire_state::spacebridge(machine_config & config)
{
- gnw_kb1013vk12_matrix(config, 1673, 1080); // R mask option confirmed
+ kb1013vk12_common(config, 1673, 1080); // R mask option confirmed
}
// roms
@@ -1568,16 +1556,16 @@ ROM_START( gnw_fire )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "fr-27", 0x0000, 0x0740, CRC(f4c53ef0) SHA1(6b57120a0f9d2fd4dcd65ad57a5f32def71d905f) )
- ROM_REGION( 163753, "screen", 0)
- ROM_LOAD( "gnw_fire.svg", 0, 163753, CRC(d546fa42) SHA1(492c785aa0ed33ff1ac8c84066e5b6d7cb7d1566) )
+ ROM_REGION( 163920, "screen", 0)
+ ROM_LOAD( "gnw_fire.svg", 0, 163920, CRC(be8a9f05) SHA1(644d8bed6228fa7e2f541b60fcfc1a0d97df0df6) )
ROM_END
ROM_START( spacebridge )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "spacebridge.bin", 0x0000, 0x0740, CRC(f4c53ef0) SHA1(6b57120a0f9d2fd4dcd65ad57a5f32def71d905f) )
- ROM_REGION( 124408, "screen", 0)
- ROM_LOAD( "spacebridge.svg", 0, 124408, CRC(4d1c770a) SHA1(ba9c88f2a6e65e60bed692eaea3c6be4142ecf93) )
+ ROM_REGION( 124578, "screen", 0)
+ ROM_LOAD( "spacebridge.svg", 0, 124578, CRC(913324ef) SHA1(6e72f7f517da754075af11283d71fc8d24ac0529) )
ROM_END
@@ -1593,11 +1581,11 @@ ROM_END
***************************************************************************/
-class gnw_tbridge_state : public gnw_state
+class gnw_tbridge_state : public hh_sm510_state
{
public:
gnw_tbridge_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{
// increase lcd decay: unwanted segments light up
m_decay_pivot = 25;
@@ -1638,7 +1626,7 @@ INPUT_PORTS_END
void gnw_tbridge_state::gnw_tbridge(machine_config &config)
{
- gnw_sm510(config, 1587, 1080); // R mask option confirmed
+ sm510_common(config, 1587, 1080); // R mask option confirmed
}
// roms
@@ -1647,8 +1635,8 @@ ROM_START( gnw_tbridge )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "tl-28", 0x0000, 0x1000, CRC(284e7224) SHA1(b50d7f3a527ffe50771ef55fdf8214929bfa2253) )
- ROM_REGION( 242781, "screen", 0)
- ROM_LOAD( "gnw_tbridge.svg", 0, 242781, CRC(c0473e53) SHA1(bb43f12f517a3b657b5b35b50baf176e01ce041d) )
+ ROM_REGION( 242944, "screen", 0)
+ ROM_LOAD( "gnw_tbridge.svg", 0, 242944, CRC(bf66cb38) SHA1(3f19d1e6584062944e56107d47ebe26335d50f42) )
ROM_END
@@ -1664,11 +1652,11 @@ ROM_END
***************************************************************************/
-class gnw_fireatk_state : public gnw_state
+class gnw_fireatk_state : public hh_sm510_state
{
public:
gnw_fireatk_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_fireatk(machine_config &config);
@@ -1705,7 +1693,7 @@ INPUT_PORTS_END
void gnw_fireatk_state::gnw_fireatk(machine_config &config)
{
- gnw_sm510(config, 1655, 1080); // R mask option confirmed
+ sm510_common(config, 1655, 1080); // R mask option confirmed
}
// roms
@@ -1714,8 +1702,8 @@ ROM_START( gnw_fireatk )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "id-29", 0x0000, 0x1000, CRC(5f6e8042) SHA1(63afc3acd8a2a996095fa8ba2dfccd48e5214478) )
- ROM_REGION( 267755, "screen", 0)
- ROM_LOAD( "gnw_fireatk.svg", 0, 267755, CRC(b13ee452) SHA1(4d1e7e10fd2352bdd805c25de8c0e16bcd8b2220) )
+ ROM_REGION( 267914, "screen", 0)
+ ROM_LOAD( "gnw_fireatk.svg", 0, 267914, CRC(f9eea340) SHA1(1fbc224dac447fe3902920ee3f1afc11150b5962) )
ROM_END
@@ -1731,11 +1719,11 @@ ROM_END
***************************************************************************/
-class gnw_stennis_state : public gnw_state
+class gnw_stennis_state : public hh_sm510_state
{
public:
gnw_stennis_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_stennis(machine_config &config);
@@ -1772,7 +1760,7 @@ INPUT_PORTS_END
void gnw_stennis_state::gnw_stennis(machine_config &config)
{
- gnw_sm510(config, 1581, 1080); // R mask option confirmed
+ sm510_common(config, 1581, 1080); // R mask option confirmed
}
// roms
@@ -1781,8 +1769,8 @@ ROM_START( gnw_stennis )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "sp-30", 0x0000, 0x1000, CRC(ba1d9504) SHA1(ff601765d88564b1570a59f5b1a4005c7b0fd66c) )
- ROM_REGION( 227964, "screen", 0)
- ROM_LOAD( "gnw_stennis.svg", 0, 227964, CRC(1bb5f99a) SHA1(2e999c75598448e3502e7bab16e987d80d6a301f) )
+ ROM_REGION( 228125, "screen", 0)
+ ROM_LOAD( "gnw_stennis.svg", 0, 228125, CRC(1134ef9a) SHA1(6f35a4d610c952663761f7ccb74c6650752cac77) )
ROM_END
@@ -1798,11 +1786,11 @@ ROM_END
***************************************************************************/
-class gnw_opanic_state : public gnw_state
+class gnw_opanic_state : public hh_sm510_state
{
public:
gnw_opanic_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_opanic(machine_config &config);
@@ -1839,7 +1827,7 @@ INPUT_PORTS_END
void gnw_opanic_state::gnw_opanic(machine_config &config)
{
- gnw_sm510_dualv(config, 1920/2, 1292/2, 1920/2, 1230/2); // R mask option confirmed
+ sm510_dualv(config, 1920/2, 1292/2, 1920/2, 1230/2); // R mask option confirmed
}
// roms
@@ -1848,11 +1836,11 @@ ROM_START( gnw_opanic )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "op-51", 0x0000, 0x1000, CRC(31c288c9) SHA1(4bfd0fba94a9927cefc925db8196b063c5dd9b19) )
- ROM_REGION( 79616, "screen_top", 0)
- ROM_LOAD( "gnw_opanic_top.svg", 0, 79616, CRC(208dccc5) SHA1(b3cd3dcc8a00ba3b1b8d93d902f756fe579e4dfc) )
+ ROM_REGION( 79771, "screen_top", 0)
+ ROM_LOAD( "gnw_opanic_top.svg", 0, 79771, CRC(0e1e6485) SHA1(15d5ec48cad65759a50ed624e4161a8f2513f704) )
- ROM_REGION( 112809, "screen_bottom", 0)
- ROM_LOAD( "gnw_opanic_bottom.svg", 0, 112809, CRC(919b9649) SHA1(f3d3c8ca3fed81782a1fcb5a7aff07faea86db07) )
+ ROM_REGION( 112962, "screen_bottom", 0)
+ ROM_LOAD( "gnw_opanic_bottom.svg", 0, 112962, CRC(ae4f4f1f) SHA1(97907bea3ca92759a0ea889e80d60d25a701027a) )
ROM_END
@@ -1868,11 +1856,11 @@ ROM_END
***************************************************************************/
-class gnw_dkong_state : public gnw_state
+class gnw_dkong_state : public hh_sm510_state
{
public:
gnw_dkong_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_dkong(machine_config &config);
@@ -1908,7 +1896,7 @@ INPUT_PORTS_END
void gnw_dkong_state::gnw_dkong(machine_config &config)
{
- gnw_sm510_dualv(config, 1920/2, 1266/2, 1920/2, 1266/2); // R mask option confirmed
+ sm510_dualv(config, 1920/2, 1266/2, 1920/2, 1266/2); // R mask option confirmed
}
// roms
@@ -1917,11 +1905,11 @@ ROM_START( gnw_dkong )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "dk-52", 0x0000, 0x1000, CRC(5180cbf8) SHA1(5174570a8d6a601226f51e972bac6735535fe11d) )
- ROM_REGION( 176706, "screen_top", 0)
- ROM_LOAD( "gnw_dkong_top.svg", 0, 176706, CRC(db041556) SHA1(fb0f979dea3ecd25288d341fa80e35b5fd0a8349) )
+ ROM_REGION( 176843, "screen_top", 0)
+ ROM_LOAD( "gnw_dkong_top.svg", 0, 176843, CRC(16c16b84) SHA1(fa2e54c04366a30b51de024296b9f94c1cb76d68) )
- ROM_REGION( 145397, "screen_bottom", 0)
- ROM_LOAD( "gnw_dkong_bottom.svg", 0, 145397, CRC(2c8c9d08) SHA1(658fd0bbccaabb0645b02e5cb81709c4b2a4250e) )
+ ROM_REGION( 145516, "screen_bottom", 0)
+ ROM_LOAD( "gnw_dkong_bottom.svg", 0, 145516, CRC(2b711e9d) SHA1(0e263020cbe0e8b88bb68e3176630639b518935e) )
ROM_END
@@ -1937,11 +1925,11 @@ ROM_END
***************************************************************************/
-class gnw_mickdon_state : public gnw_state
+class gnw_mickdon_state : public hh_sm510_state
{
public:
gnw_mickdon_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_mickdon(machine_config &config);
@@ -1973,7 +1961,7 @@ INPUT_PORTS_END
void gnw_mickdon_state::gnw_mickdon(machine_config &config)
{
- gnw_sm510_dualv(config, 1920/2, 1281/2, 1920/2, 1236/2); // R mask option confirmed
+ sm510_dualv(config, 1920/2, 1281/2, 1920/2, 1236/2); // R mask option confirmed
m_maincpu->write_r().set(FUNC(gnw_mickdon_state::piezo_r2_w));
}
@@ -1984,11 +1972,11 @@ ROM_START( gnw_mickdon )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "dm-53_565", 0x0000, 0x1000, CRC(e21fc0f5) SHA1(3b65ccf9f98813319410414e11a3231b787cdee6) )
- ROM_REGION( 126434, "screen_top", 0)
- ROM_LOAD( "gnw_mickdon_top.svg", 0, 126434, CRC(ff05f489) SHA1(2a533c7b5d7249d79f8d7795a0d57fd3e32d3d32) )
+ ROM_REGION( 126477, "screen_top", 0)
+ ROM_LOAD( "gnw_mickdon_top.svg", 0, 126477, CRC(11e02fce) SHA1(fe2700711c73940a9488a6d223db4c4e92df4188) )
- ROM_REGION( 122870, "screen_bottom", 0)
- ROM_LOAD( "gnw_mickdon_bottom.svg", 0, 122870, CRC(8f06ddf1) SHA1(69d4b785781600abcdfc01b3902df1d0ae3608cf) )
+ ROM_REGION( 122915, "screen_bottom", 0)
+ ROM_LOAD( "gnw_mickdon_bottom.svg", 0, 122915, CRC(b8cf63c2) SHA1(2406c9826f94a345ca9641e51fb26088f434960c) )
ROM_END
@@ -2004,11 +1992,11 @@ ROM_END
***************************************************************************/
-class gnw_ghouse_state : public gnw_state
+class gnw_ghouse_state : public hh_sm510_state
{
public:
gnw_ghouse_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_ghouse(machine_config &config);
@@ -2049,7 +2037,7 @@ INPUT_PORTS_END
void gnw_ghouse_state::gnw_ghouse(machine_config &config)
{
- gnw_sm510_dualv(config, 1920/2, 1303/2, 1920/2, 1274/2); // R mask option confirmed
+ sm510_dualv(config, 1920/2, 1303/2, 1920/2, 1274/2); // R mask option confirmed
}
// roms
@@ -2058,11 +2046,11 @@ ROM_START( gnw_ghouse )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "gh-54", 0x0000, 0x1000, CRC(4df12b4d) SHA1(708be5fef8dbd9337f5ab35baaca5bdf21e1f36c) )
- ROM_REGION( 159098, "screen_top", 0)
- ROM_LOAD( "gnw_ghouse_top.svg", 0, 159098, CRC(96bc58d9) SHA1(eda6a0abde739fb71af3e150751a519e59ef021d) )
+ ROM_REGION( 159258, "screen_top", 0)
+ ROM_LOAD( "gnw_ghouse_top.svg", 0, 159258, CRC(308c9c86) SHA1(e83d114e702b6da3cba4e45bd48edfe9882afac1) )
- ROM_REGION( 149757, "screen_bottom", 0)
- ROM_LOAD( "gnw_ghouse_bottom.svg", 0, 149757, CRC(d66ee72c) SHA1(dcbe1c81ee0c7ddb9692858749ce6934f4dd7f30) )
+ ROM_REGION( 149922, "screen_bottom", 0)
+ ROM_LOAD( "gnw_ghouse_bottom.svg", 0, 149922, CRC(c07c6bb8) SHA1(7a0d6f38ecdbfcd09ab967417fa9d06b5c5c21e4) )
ROM_END
@@ -2078,11 +2066,11 @@ ROM_END
***************************************************************************/
-class gnw_dkong2_state : public gnw_state
+class gnw_dkong2_state : public hh_sm510_state
{
public:
gnw_dkong2_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_dkong2(machine_config &config);
@@ -2118,7 +2106,7 @@ INPUT_PORTS_END
void gnw_dkong2_state::gnw_dkong2(machine_config &config)
{
- gnw_sm510_dualv(config, 1920/2, 1241/2, 1920/2, 1237/2); // R mask option confirmed
+ sm510_dualv(config, 1920/2, 1241/2, 1920/2, 1237/2); // R mask option confirmed
}
// roms
@@ -2127,11 +2115,11 @@ ROM_START( gnw_dkong2 )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "jr-55_560", 0x0000, 0x1000, CRC(46aed0ae) SHA1(72f75ccbd84aea094148c872fc7cc1683619a18a) )
- ROM_REGION( 267443, "screen_top", 0)
- ROM_LOAD( "gnw_dkong2_top.svg", 0, 267443, CRC(33b26edb) SHA1(600afdf22ff4ac4a4af2de9159287cc6e53dfe3a) )
+ ROM_REGION( 267462, "screen_top", 0)
+ ROM_LOAD( "gnw_dkong2_top.svg", 0, 267462, CRC(41bb5414) SHA1(20c7af7c64e12273320029eecc5a33ec65d15bc5) )
- ROM_REGION( 390558, "screen_bottom", 0)
- ROM_LOAD( "gnw_dkong2_bottom.svg", 0, 390558, CRC(92d68958) SHA1(aba829bf89b93bf3a4e425c9a8f6eec9e5869bc4) )
+ ROM_REGION( 390601, "screen_bottom", 0)
+ ROM_LOAD( "gnw_dkong2_bottom.svg", 0, 390601, CRC(3f85bb01) SHA1(8964f02e8372f5d8dd5e8edfe0b79dae31b59b3a) )
ROM_END
@@ -2147,11 +2135,11 @@ ROM_END
***************************************************************************/
-class gnw_mario_state : public gnw_state
+class gnw_mario_state : public hh_sm510_state
{
public:
gnw_mario_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_mario(machine_config &config);
@@ -2188,7 +2176,7 @@ INPUT_PORTS_END
void gnw_mario_state::gnw_mario(machine_config &config)
{
- gnw_sm510_dualh(config, 2258/2, 1440/2, 2261/2, 1440/2); // R mask option confirmed
+ sm510_dualh(config, 2258/2, 1440/2, 2261/2, 1440/2); // R mask option confirmed
}
// roms
@@ -2197,11 +2185,11 @@ ROM_START( gnw_mario )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mw-56", 0x0000, 0x1000, CRC(385e59da) SHA1(2f79281bdf2f2afca2fb5bd7b9a3beeffc9c4eb7) )
- ROM_REGION( 154874, "screen_left", 0)
- ROM_LOAD( "gnw_mario_left.svg", 0, 154874, CRC(73ba4f4a) SHA1(d5df39808a1af8e8ad5e397b4a50313221ab6e3b) )
+ ROM_REGION( 154916, "screen_left", 0)
+ ROM_LOAD( "gnw_mario_left.svg", 0, 154916, CRC(8ea82355) SHA1(ad286039a215dfa0f02bb1caf875d55dedb9b71e) )
- ROM_REGION( 202863, "screen_right", 0)
- ROM_LOAD( "gnw_mario_right.svg", 0, 202863, CRC(dd2473c9) SHA1(51aca37abf8e4959b84c441aa2d114e16c7d6010) )
+ ROM_REGION( 202902, "screen_right", 0)
+ ROM_LOAD( "gnw_mario_right.svg", 0, 202902, CRC(cfe8c0ba) SHA1(87cd54a8104e9bb4f266b137b043e32a0c1d9772) )
ROM_END
@@ -2217,11 +2205,11 @@ ROM_END
***************************************************************************/
-class gnw_rshower_state : public gnw_state
+class gnw_rshower_state : public hh_sm510_state
{
public:
gnw_rshower_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_rshower(machine_config &config);
@@ -2264,7 +2252,7 @@ INPUT_PORTS_END
void gnw_rshower_state::gnw_rshower(machine_config &config)
{
- gnw_sm510_dualh(config, 2126/2, 1440/2, 2146/2, 1440/2); // R mask option confirmed
+ sm510_dualh(config, 2126/2, 1440/2, 2146/2, 1440/2); // R mask option confirmed
}
// roms
@@ -2273,11 +2261,11 @@ ROM_START( gnw_rshower )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "lp-57", 0x0000, 0x1000, CRC(51a2c5c4) SHA1(d60542e6785ba7b6a44153a66c739787cf670816) )
- ROM_REGION( 135698, "screen_left", 0)
- ROM_LOAD( "gnw_rshower_left.svg", 0, 135698, CRC(f0b36d70) SHA1(252e5cc110112a874265477be11ab3adf8108726) )
+ ROM_REGION( 135868, "screen_left", 0)
+ ROM_LOAD( "gnw_rshower_left.svg", 0, 135868, CRC(806493f1) SHA1(0287fba2c2962aced8156c2ebc4f299c4703acf2) )
- ROM_REGION( 140280, "screen_right", 0)
- ROM_LOAD( "gnw_rshower_right.svg", 0, 140280, CRC(0ce4d049) SHA1(7e1afa1fdbdf658a12a28192ba2d29e5fca807cb) )
+ ROM_REGION( 140445, "screen_right", 0)
+ ROM_LOAD( "gnw_rshower_right.svg", 0, 140445, CRC(bead097a) SHA1(a3929e0043ff5132fb4cf7a41edece96926f50d2) )
ROM_END
@@ -2293,11 +2281,11 @@ ROM_END
***************************************************************************/
-class gnw_lboat_state : public gnw_state
+class gnw_lboat_state : public hh_sm510_state
{
public:
gnw_lboat_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_lboat(machine_config &config);
@@ -2334,7 +2322,7 @@ INPUT_PORTS_END
void gnw_lboat_state::gnw_lboat(machine_config &config)
{
- gnw_sm510_dualh(config, 2116/2, 1440/2, 2057/2, 1440/2); // R mask option confirmed
+ sm510_dualh(config, 2116/2, 1440/2, 2057/2, 1440/2); // R mask option confirmed
}
// roms
@@ -2343,11 +2331,11 @@ ROM_START( gnw_lboat )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "tc-58", 0x0000, 0x1000, CRC(1f88f6a2) SHA1(22fd62127dda43a0ada2fe89b0518eec8cbe2a25) )
- ROM_REGION( 156272, "screen_left", 0)
- ROM_LOAD( "gnw_lboat_left.svg", 0, 156272, CRC(1f0c18bd) SHA1(ca11c83b4b4d6a91ecb0300cff392e010064ba25) )
+ ROM_REGION( 156441, "screen_left", 0)
+ ROM_LOAD( "gnw_lboat_left.svg", 0, 156441, CRC(a1727890) SHA1(b1dd24f99496d215a3083a138fc3fff923303d34) )
- ROM_REGION( 155093, "screen_right", 0)
- ROM_LOAD( "gnw_lboat_right.svg", 0, 155093, CRC(6f68780a) SHA1(63488693fbb1a8ad4d59da9e4e003eef709926f9) )
+ ROM_REGION( 155258, "screen_right", 0)
+ ROM_LOAD( "gnw_lboat_right.svg", 0, 155258, CRC(76619ad3) SHA1(b44d57e2f4a2cecf98e402adf802d16c5934d301) )
ROM_END
@@ -2363,11 +2351,11 @@ ROM_END
***************************************************************************/
-class gnw_bjack_state : public gnw_state
+class gnw_bjack_state : public hh_sm510_state
{
public:
gnw_bjack_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_bjack(machine_config &config);
@@ -2377,10 +2365,10 @@ public:
static INPUT_PORTS_START( gnw_bjack )
PORT_START("IN.0") // S1
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Double Down")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Bet x10 / Hit")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Bet x1 / Stand")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Enter")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_UP ) PORT_CHANGED_CB(input_changed) PORT_NAME("Double Down")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_DOWN ) PORT_CHANGED_CB(input_changed) PORT_NAME("Bet x10 / Hit")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_DOWN ) PORT_CHANGED_CB(input_changed) PORT_NAME("Bet x1 / Stand")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_UP ) PORT_CHANGED_CB(input_changed) PORT_NAME("Enter")
PORT_START("IN.1") // S2
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_CHANGED_CB(input_changed) PORT_NAME("Time")
@@ -2394,7 +2382,7 @@ INPUT_PORTS_END
void gnw_bjack_state::gnw_bjack(machine_config &config)
{
- gnw_sm512_dualv(config, 1920/2, 1290/2, 1920/2, 1297/2);
+ sm512_dualv(config, 1920/2, 1290/2, 1920/2, 1297/2);
}
// roms
@@ -2406,11 +2394,11 @@ ROM_START( gnw_bjack )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "bj-60.melody", 0x000, 0x100, BAD_DUMP CRC(2619224e) SHA1(b65dc590b6eb1de793e980af236ccf8360b3cfee) ) // decap needed for verification
- ROM_REGION( 75217, "screen_top", 0)
- ROM_LOAD( "gnw_bjack_top.svg", 0, 75205, CRC(5eb0956e) SHA1(f7acd148e5478d4c2ddf06cff23c5e40faee2c24) )
+ ROM_REGION( 75366, "screen_top", 0)
+ ROM_LOAD( "gnw_bjack_top.svg", 0, 75366, CRC(d36fb4e4) SHA1(7f2a0256d78eb01e757208ead0fd52ee63ce8efa) )
- ROM_REGION( 112450, "screen_bottom", 0)
- ROM_LOAD( "gnw_bjack_bottom.svg", 0, 112438, CRC(9d985b1d) SHA1(cf8af6ce18994f687a5e6fbdda62af4d07a07cf8) )
+ ROM_REGION( 112599, "screen_bottom", 0)
+ ROM_LOAD( "gnw_bjack_bottom.svg", 0, 112599, CRC(04880ae1) SHA1(60f3723f81965fe4891f25a3522351872f338389) )
ROM_END
@@ -2426,11 +2414,11 @@ ROM_END
***************************************************************************/
-class gnw_squish_state : public gnw_state
+class gnw_squish_state : public hh_sm510_state
{
public:
gnw_squish_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{
// increase lcd decay: unwanted segments light up
m_decay_pivot = 17;
@@ -2470,7 +2458,7 @@ INPUT_PORTS_END
void gnw_squish_state::gnw_squish(machine_config &config)
{
- gnw_sm510_dualv(config, 1920/2, 1285/2, 1920/2, 1287/2); // R mask option confirmed
+ sm510_dualv(config, 1920/2, 1285/2, 1920/2, 1287/2); // R mask option confirmed
}
// roms
@@ -2479,11 +2467,11 @@ ROM_START( gnw_squish )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mg-61", 0x0000, 0x1000, CRC(79cd509c) SHA1(969e5425984ba9e5183c68b38b3588f53d1e8e5d) )
- ROM_REGION( 70300, "screen_top", 0)
- ROM_LOAD( "gnw_squish_top.svg", 0, 70300, CRC(f1358ba9) SHA1(414d29db64b83a50b20f31b857e4c3a77d19d3c8) )
+ ROM_REGION( 70456, "screen_top", 0)
+ ROM_LOAD( "gnw_squish_top.svg", 0, 70456, CRC(8d10b94e) SHA1(33854e7ea8f02adceb597c9ba259aa553953e698) )
- ROM_REGION( 279606, "screen_bottom", 0)
- ROM_LOAD( "gnw_squish_bottom.svg", 0, 279606, CRC(1d4ac23f) SHA1(d6eb78bae5ca18cc5fe5d8a300902766dd9601aa) )
+ ROM_REGION( 279739, "screen_bottom", 0)
+ ROM_LOAD( "gnw_squish_bottom.svg", 0, 279739, CRC(7f4bd704) SHA1(e625910101896cf3a6d41e28ccda77f902f71c7a) )
ROM_END
@@ -2499,11 +2487,11 @@ ROM_END
***************************************************************************/
-class gnw_bsweep_state : public gnw_state
+class gnw_bsweep_state : public hh_sm510_state
{
public:
gnw_bsweep_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_bsweep(machine_config &config);
@@ -2540,7 +2528,7 @@ INPUT_PORTS_END
void gnw_bsweep_state::gnw_bsweep(machine_config &config)
{
- gnw_sm512_dualv(config, 1920/2, 1291/2, 1920/2, 1239/2);
+ sm512_dualv(config, 1920/2, 1291/2, 1920/2, 1239/2);
}
// roms
@@ -2552,11 +2540,11 @@ ROM_START( gnw_bsweep )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "bd-62.melody", 0x000, 0x100, BAD_DUMP CRC(addc0368) SHA1(fc488bdf1c2ea5ca84cc66762126bb5874659d8f) ) // decap needed for verification
- ROM_REGION( 218009, "screen_top", 0)
- ROM_LOAD( "gnw_bsweep_top.svg", 0, 218009, CRC(240d0b2a) SHA1(f1b321fe0446f71e563732f5b8cdb8a043f00361) )
+ ROM_REGION( 218174, "screen_top", 0)
+ ROM_LOAD( "gnw_bsweep_top.svg", 0, 218174, CRC(b2c8e895) SHA1(9f7d5973a5f920845c83d30f7ebbbec93232c41e) )
- ROM_REGION( 277261, "screen_bottom", 0)
- ROM_LOAD( "gnw_bsweep_bottom.svg", 0, 277261, CRC(e7028dbf) SHA1(546446ce2545424fdd319ddfb5fb8977d5ff94db) )
+ ROM_REGION( 277420, "screen_bottom", 0)
+ ROM_LOAD( "gnw_bsweep_bottom.svg", 0, 277420, CRC(8a9786cb) SHA1(48390a77b0e436ec7d7e8835923faef787e163d4) )
ROM_END
@@ -2572,11 +2560,11 @@ ROM_END
***************************************************************************/
-class gnw_sbuster_state : public gnw_state
+class gnw_sbuster_state : public hh_sm510_state
{
public:
gnw_sbuster_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_sbuster(machine_config &config);
@@ -2612,7 +2600,7 @@ INPUT_PORTS_END
void gnw_sbuster_state::gnw_sbuster(machine_config &config)
{
- gnw_sm511_dualv(config, 1920/2, 1246/2, 1920/2, 1269/2);
+ sm511_dualv(config, 1920/2, 1246/2, 1920/2, 1269/2);
}
// roms
@@ -2624,11 +2612,11 @@ ROM_START( gnw_sbuster )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "jb-63.melody", 0x000, 0x100, BAD_DUMP CRC(28cb2914) SHA1(52d34265611f786b597653193752d16563dd5e82) ) // decap needed for verification
- ROM_REGION( 221735, "screen_top", 0)
- ROM_LOAD( "gnw_sbuster_top.svg", 0, 221735, CRC(38b8e39c) SHA1(2e07ea057b2c78c956898ee2587926188498dfc0) )
+ ROM_REGION( 221903, "screen_top", 0)
+ ROM_LOAD( "gnw_sbuster_top.svg", 0, 221903, CRC(adb9b67f) SHA1(902998ead1a13d3c26854393283ab622e1fd3f70) )
- ROM_REGION( 282423, "screen_bottom", 0)
- ROM_LOAD( "gnw_sbuster_bottom.svg", 0, 282423, CRC(89659f2a) SHA1(47db203908249cb96a949799cf85fbd1af601874) )
+ ROM_REGION( 282593, "screen_bottom", 0)
+ ROM_LOAD( "gnw_sbuster_bottom.svg", 0, 282593, CRC(12542c5e) SHA1(fb05b8f4a2cbeeb566ae111cd27ff486c1478d7b) )
ROM_END
@@ -2644,11 +2632,11 @@ ROM_END
***************************************************************************/
-class gnw_gcliff_state : public gnw_state
+class gnw_gcliff_state : public hh_sm510_state
{
public:
gnw_gcliff_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_gcliff(machine_config &config);
@@ -2689,7 +2677,7 @@ INPUT_PORTS_END
void gnw_gcliff_state::gnw_gcliff(machine_config &config)
{
- gnw_sm512_dualv(config, 1920/2, 1257/2, 1920/2, 1239/2);
+ sm512_dualv(config, 1920/2, 1257/2, 1920/2, 1239/2);
}
// roms
@@ -2701,11 +2689,11 @@ ROM_START( gnw_gcliff )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "mv-64.melody", 0x000, 0x100, BAD_DUMP CRC(cb938709) SHA1(516dcc8a1edffe02f50d349389caac0676de1eba) ) // decap needed for verification
- ROM_REGION( 530558, "screen_top", 0)
- ROM_LOAD( "gnw_gcliff_top.svg", 0, 530558, CRC(a0207f25) SHA1(763519d163bc6924e92dde501c785286f5949072) )
+ ROM_REGION( 530731, "screen_top", 0)
+ ROM_LOAD( "gnw_gcliff_top.svg", 0, 530731, CRC(3bb60d8f) SHA1(e7dac1fcbe7b682c9d988443c1446e5ad28d3baa) )
- ROM_REGION( 519157, "screen_bottom", 0)
- ROM_LOAD( "gnw_gcliff_bottom.svg", 0, 519157, CRC(af120931) SHA1(fd27a89368c9ba533852fd3bc2554a1268624f67) )
+ ROM_REGION( 519321, "screen_bottom", 0)
+ ROM_LOAD( "gnw_gcliff_bottom.svg", 0, 519321, CRC(1117041e) SHA1(0f87167614c1ba65915fa7205a6bb44778e443a8) )
ROM_END
@@ -2721,11 +2709,11 @@ ROM_END
***************************************************************************/
-class gnw_zelda_state : public gnw_state
+class gnw_zelda_state : public hh_sm510_state
{
public:
gnw_zelda_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_zelda(machine_config &config);
@@ -2766,7 +2754,7 @@ INPUT_PORTS_END
void gnw_zelda_state::gnw_zelda(machine_config &config)
{
- gnw_sm512_dualv(config, 1920/2, 1346/2, 1920/2, 1291/2);
+ sm512_dualv(config, 1920/2, 1346/2, 1920/2, 1291/2);
}
// roms
@@ -2778,11 +2766,11 @@ ROM_START( gnw_zelda )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "zl-65.melody", 0x000, 0x100, BAD_DUMP CRC(3a281b0f) SHA1(7a236775557939050bbcd6f9d0a598d219a032f2) ) // decap needed for verification
- ROM_REGION( 282866, "screen_top", 0)
- ROM_LOAD( "gnw_zelda_top.svg", 0, 282866, CRC(7bd167a0) SHA1(96955538d9c0ab94b144ff725524b601bdf9f28c) )
+ ROM_REGION( 283029, "screen_top", 0)
+ ROM_LOAD( "gnw_zelda_top.svg", 0, 283029, CRC(aaab1d7e) SHA1(fe01e8a92e6dcf457da87afe6bf39fcf511da9db) )
- ROM_REGION( 424727, "screen_bottom", 0)
- ROM_LOAD( "gnw_zelda_bottom.svg", 0, 424727, CRC(2f4b3239) SHA1(026a1d43dd298ec05f4067ae1a7181984ec8ff83) )
+ ROM_REGION( 424886, "screen_bottom", 0)
+ ROM_LOAD( "gnw_zelda_bottom.svg", 0, 424886, CRC(09f00d09) SHA1(33045028bd7e0df4e976e79dc180028c6886359a) )
ROM_END
@@ -2804,11 +2792,11 @@ ROM_END
***************************************************************************/
-class gnw_dkjrp_state : public gnw_state
+class gnw_dkjrp_state : public hh_sm510_state
{
public:
gnw_dkjrp_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_dkjrp(machine_config &config);
@@ -2849,7 +2837,7 @@ INPUT_PORTS_END
void gnw_dkjrp_state::gnw_dkjrp(machine_config &config)
{
- gnw_sm511(config, 1920, 1049);
+ sm511_common(config, 1920, 1049);
}
// roms
@@ -2878,11 +2866,11 @@ ROM_END
***************************************************************************/
-class gnw_mbaway_state : public gnw_state
+class gnw_mbaway_state : public hh_sm510_state
{
public:
gnw_mbaway_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_mbaway(machine_config &config);
@@ -2919,7 +2907,7 @@ INPUT_PORTS_END
void gnw_mbaway_state::gnw_mbaway(machine_config &config)
{
- gnw_sm511(config, 1920, 1031);
+ sm511_common(config, 1920, 1031);
}
// roms
@@ -2950,11 +2938,11 @@ ROM_END
***************************************************************************/
-class gnw_dkjr_state : public gnw_state
+class gnw_dkjr_state : public hh_sm510_state
{
public:
gnw_dkjr_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_dkjr(machine_config &config);
@@ -2995,7 +2983,7 @@ INPUT_PORTS_END
void gnw_dkjr_state::gnw_dkjr(machine_config &config)
{
- gnw_sm510(config, 1647, 1080); // R mask option confirmed
+ sm510_common(config, 1647, 1080); // R mask option confirmed
}
// roms
@@ -3004,8 +2992,8 @@ ROM_START( gnw_dkjr )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "dj-101", 0x0000, 0x1000, CRC(8dcfb5d1) SHA1(e0ef578e9362eb9a3cab631376df3cf55978f2de) )
- ROM_REGION( 281161, "screen", 0)
- ROM_LOAD( "gnw_dkjr.svg", 0, 281161, CRC(346b025c) SHA1(dad3f3f73d6c2ff4efb43ffd76e97ba0d5f0da73) )
+ ROM_REGION( 281202, "screen", 0)
+ ROM_LOAD( "gnw_dkjr.svg", 0, 281202, CRC(f8b18d58) SHA1(fa8321b3d8f81685da763d66fc148d339e6bcd55) )
ROM_END
@@ -3022,11 +3010,11 @@ ROM_END
***************************************************************************/
-class gnw_mariocm_state : public gnw_state
+class gnw_mariocm_state : public hh_sm510_state
{
public:
gnw_mariocm_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_mariocm(machine_config &config);
@@ -3063,7 +3051,7 @@ INPUT_PORTS_END
void gnw_mariocm_state::gnw_mariocm(machine_config &config)
{
- gnw_sm510(config, 1647, 1080); // R mask option confirmed
+ sm510_common(config, 1647, 1080); // R mask option confirmed
}
// roms
@@ -3072,8 +3060,8 @@ ROM_START( gnw_mariocm )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "ml-102_577", 0x0000, 0x1000, CRC(c1128dea) SHA1(8647e36f43a0e37756a3c7b6a3f08d4c8243f1cc) )
- ROM_REGION( 302931, "screen", 0)
- ROM_LOAD( "gnw_mariocm.svg", 0, 302931, CRC(5517ae80) SHA1(1902e36d0470ee5548addeb087ea3e7d2c2520a2) )
+ ROM_REGION( 302983, "screen", 0)
+ ROM_LOAD( "gnw_mariocm.svg", 0, 302983, CRC(32ed7941) SHA1(ce7c5ae7a179ec9bcd17db7d7a27780801f7c1cb) )
ROM_END
@@ -3087,15 +3075,17 @@ ROM_END
* Sharp SM510 label NH-103 538A (no decap)
* lcd screen with custom segments, 1-bit sound
- This is the new wide screen version, there's also a Gold Series version (MH-06)
+ This is the new wide screen version, there's also a Gold Series version
+ (MH-06). The two games are using different MCU types so this version seems
+ to be a complete rewrite.
***************************************************************************/
-class gnw_manhole_state : public gnw_state
+class gnw_manhole_state : public hh_sm510_state
{
public:
gnw_manhole_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_manhole(machine_config &config);
@@ -3132,7 +3122,7 @@ INPUT_PORTS_END
void gnw_manhole_state::gnw_manhole(machine_config &config)
{
- gnw_sm510(config, 1560, 1080); // R mask option confirmed
+ sm510_common(config, 1560, 1080); // R mask option confirmed
}
// roms
@@ -3141,8 +3131,8 @@ ROM_START( gnw_manhole )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "nh-103", 0x0000, 0x1000, CRC(ec03acf7) SHA1(b74ae672d8f8a155b2ea4ecee9afbaed95ec0ceb) )
- ROM_REGION( 223244, "screen", 0)
- ROM_LOAD( "gnw_manhole.svg", 0, 223244, CRC(41848e77) SHA1(d7238d1a3f95d8d274f5ff767ebf783bb50e64eb) )
+ ROM_REGION( 223414, "screen", 0)
+ ROM_LOAD( "gnw_manhole.svg", 0, 223414, CRC(774d806b) SHA1(acb730d8e397eb29988a353e0a9db8ae69913117) )
ROM_END
@@ -3158,11 +3148,11 @@ ROM_END
***************************************************************************/
-class gnw_tfish_state : public gnw_state
+class gnw_tfish_state : public hh_sm510_state
{
public:
gnw_tfish_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_tfish(machine_config &config);
@@ -3194,7 +3184,7 @@ INPUT_PORTS_END
void gnw_tfish_state::gnw_tfish(machine_config &config)
{
- gnw_sm510(config, 1572, 1080); // R mask option confirmed
+ sm510_common(config, 1572, 1080); // R mask option confirmed
}
// roms
@@ -3203,8 +3193,8 @@ ROM_START( gnw_tfish )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "tf-104", 0x0000, 0x1000, CRC(53cde918) SHA1(bc1e1b8f8b282bb886bb076c1c7ce35d00eca6fc) )
- ROM_REGION( 257278, "screen", 0)
- ROM_LOAD( "gnw_tfish.svg", 0, 257278, CRC(fc970f4a) SHA1(a73f5ee35b60842707f13edc5d58869fb2ec98cf) )
+ ROM_REGION( 257396, "screen", 0)
+ ROM_LOAD( "gnw_tfish.svg", 0, 257396, CRC(6f457a30) SHA1(0b748c9573ff96b99f4fa0adb17d218e89b56d3f) )
ROM_END
@@ -3214,8 +3204,10 @@ ROM_END
/***************************************************************************
Nintendo Game & Watch: Super Mario Bros. (model: see below)
- * PCB label YM-105
- * Sharp SM511 label YM-105 9024B (new wide screen version) (die label ?)
+ * PCB label YM-801 (Crystal Screen), YM-105 (New Wide Screen)
+ * Sharp SM511
+ - label YM-801 8034A (crystal screen) (not dumped yet)
+ - label YM-105 9024B (new wide screen version) (die label ?)
* lcd screen with custom segments, 1-bit sound
First released in 1986 on Crystal Screen (model YM-801), rereleased on
@@ -3226,14 +3218,15 @@ ROM_END
***************************************************************************/
-class gnw_smb_state : public gnw_state
+class gnw_smb_state : public hh_sm510_state
{
public:
gnw_smb_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_smb(machine_config &config);
+ void gnw_smbn(machine_config & config);
};
// config
@@ -3266,20 +3259,36 @@ INPUT_PORTS_END
void gnw_smb_state::gnw_smb(machine_config &config)
{
- gnw_sm511(config, 1677, 1080);
+ sm511_common(config, 1768, 1080);
+}
+
+void gnw_smb_state::gnw_smbn(machine_config &config)
+{
+ sm511_common(config, 1677, 1080);
}
// roms
ROM_START( gnw_smb )
ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "ym-801.program", 0x0000, 0x1000, BAD_DUMP CRC(0dff3b12) SHA1(3fa83f88e49ea9d7080fe935ec90ce69acbe8850) ) // dumped from NWS version
+
+ ROM_REGION( 0x100, "maincpu:melody", 0 )
+ ROM_LOAD( "ym-801.melody", 0x000, 0x100, BAD_DUMP CRC(b48c6d90) SHA1(a1ce1e52627767752974ab0d49bec48ead36663e) ) // dumped from NWS version
+
+ ROM_REGION( 342106, "screen", 0)
+ ROM_LOAD( "gnw_smb.svg", 0, 342106, CRC(243224ac) SHA1(9b7f41abe4e340e32893ff1ef6e4d696deadc637) )
+ROM_END
+
+ROM_START( gnw_smbn )
+ ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "ym-105.program", 0x0000, 0x1000, CRC(0dff3b12) SHA1(3fa83f88e49ea9d7080fe935ec90ce69acbe8850) )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "ym-105.melody", 0x000, 0x100, CRC(b48c6d90) SHA1(a1ce1e52627767752974ab0d49bec48ead36663e) )
- ROM_REGION( 648209, "screen", 0)
- ROM_LOAD( "gnw_smb.svg", 0, 648209, CRC(4a6fdb28) SHA1(0a0bc48d82d5b8bf8ef96ef9ce2f87ba6ea850c1) )
+ ROM_REGION( 648313, "screen", 0)
+ ROM_LOAD( "gnw_smbn.svg", 0, 648313, CRC(5808c793) SHA1(06b90993eb9db2a1909509f99ebf00e27c20dcad) )
ROM_END
@@ -3304,11 +3313,11 @@ ROM_END
***************************************************************************/
-class gnw_climber_state : public gnw_state
+class gnw_climber_state : public hh_sm510_state
{
public:
gnw_climber_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_climber(machine_config &config);
@@ -3345,12 +3354,12 @@ INPUT_PORTS_END
void gnw_climber_state::gnw_climber(machine_config &config)
{
- gnw_sm511(config, 1756, 1080);
+ sm511_common(config, 1756, 1080);
}
void gnw_climber_state::gnw_climbern(machine_config &config)
{
- gnw_sm511(config, 1677, 1080);
+ sm511_common(config, 1677, 1080);
}
// roms
@@ -3362,8 +3371,8 @@ ROM_START( gnw_climber )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "dr-802.melody", 0x000, 0x100, BAD_DUMP CRC(7c49a3a3) SHA1(fad00d650b4864135c7d50f6fae735b7fffe720f) ) // dumped from NWS version
- ROM_REGION( 564704, "screen", 0)
- ROM_LOAD( "gnw_climber.svg", 0, 564704, CRC(60b25cc5) SHA1(1c101539a861257c5b0334ffdf9491c877759fa1) )
+ ROM_REGION( 564868, "screen", 0)
+ ROM_LOAD( "gnw_climber.svg", 0, 564868, CRC(a50ebd1c) SHA1(51047db960c8f110c1b681347cf8efd1d6263b85) )
ROM_END
ROM_START( gnw_climbern )
@@ -3373,8 +3382,8 @@ ROM_START( gnw_climbern )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "dr-106.melody", 0x000, 0x100, BAD_DUMP CRC(7c49a3a3) SHA1(fad00d650b4864135c7d50f6fae735b7fffe720f) ) // decap needed for verification
- ROM_REGION( 542332, "screen", 0)
- ROM_LOAD( "gnw_climbern.svg", 0, 542332, CRC(d7e84c21) SHA1(a5b5b68c8cdb3a09966bfb91b281791bef311248) )
+ ROM_REGION( 542453, "screen", 0)
+ ROM_LOAD( "gnw_climbern.svg", 0, 542453, CRC(2ded966e) SHA1(7e9c99d372b6e547b9b3e789dca9dee60455a427) )
ROM_END
@@ -3403,11 +3412,11 @@ ROM_END
***************************************************************************/
-class gnw_bfight_state : public gnw_state
+class gnw_bfight_state : public hh_sm510_state
{
public:
gnw_bfight_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_bfight(machine_config &config);
@@ -3444,12 +3453,12 @@ INPUT_PORTS_END
void gnw_bfight_state::gnw_bfight(machine_config &config)
{
- gnw_sm511(config, 1771, 1080);
+ sm511_common(config, 1771, 1080);
}
void gnw_bfight_state::gnw_bfightn(machine_config &config)
{
- gnw_sm511(config, 1549, 1080);
+ sm511_common(config, 1549, 1080);
}
// roms
@@ -3461,8 +3470,8 @@ ROM_START( gnw_bfight )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "bf-803.melody", 0x000, 0x100, BAD_DUMP CRC(ffddf9ed) SHA1(e9cb3a340924363eeef5ab453c452b9cc69207b9) ) // dumped from NWS version
- ROM_REGION( 586284, "screen", 0)
- ROM_LOAD( "gnw_bfight.svg", 0, 586284, CRC(e4ca7a48) SHA1(5f425183ee8d347d93d11a611f3726230e83859c) )
+ ROM_REGION( 586453, "screen", 0)
+ ROM_LOAD( "gnw_bfight.svg", 0, 586453, CRC(40d81b65) SHA1(96ed909647229cfde6d733ba10d54ace29e5618a) )
ROM_END
ROM_START( gnw_bfightn )
@@ -3472,8 +3481,8 @@ ROM_START( gnw_bfightn )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "bf-107.melody", 0x000, 0x100, BAD_DUMP CRC(ffddf9ed) SHA1(e9cb3a340924363eeef5ab453c452b9cc69207b9) ) // decap needed for verification
- ROM_REGION( 558342, "screen", 0)
- ROM_LOAD( "gnw_bfightn.svg", 0, 558342, CRC(361e03c3) SHA1(2883bc3de07f71fff8ea95dbc4f6955fd13abacd) )
+ ROM_REGION( 558496, "screen", 0)
+ ROM_LOAD( "gnw_bfightn.svg", 0, 558496, CRC(c488000e) SHA1(f9a042799a1489f83b07a91827b8b421238a67e8) )
ROM_END
@@ -3489,11 +3498,11 @@ ROM_END
***************************************************************************/
-class gnw_ssparky_state : public gnw_state
+class gnw_ssparky_state : public hh_sm510_state
{
public:
gnw_ssparky_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_ssparky(machine_config &config);
@@ -3530,7 +3539,7 @@ INPUT_PORTS_END
void gnw_ssparky_state::gnw_ssparky(machine_config &config)
{
- gnw_sm510(config, 627, 1080); // R mask option confirmed
+ sm510_common(config, 627, 1080); // R mask option confirmed
}
// roms
@@ -3539,8 +3548,8 @@ ROM_START( gnw_ssparky )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "bu-201", 0x0000, 0x1000, CRC(ae0d28e7) SHA1(1427cca1f3aaf3ef6fc3499171a5220428d9894f) )
- ROM_REGION( 136760, "screen", 0)
- ROM_LOAD( "gnw_ssparky.svg", 0, 136760, CRC(7488bc84) SHA1(32f41a7f50b7c4a92e023b7bf4c184dd87398f87) )
+ ROM_REGION( 136929, "screen", 0)
+ ROM_LOAD( "gnw_ssparky.svg", 0, 136929, CRC(66e5d586) SHA1(b666f675abb8edef65ff402e8bc9a5213b630851) )
ROM_END
@@ -3557,11 +3566,11 @@ ROM_END
***************************************************************************/
-class gnw_boxing_state : public gnw_state
+class gnw_boxing_state : public hh_sm510_state
{
public:
gnw_boxing_state(const machine_config &mconfig, device_type type, const char *tag) :
- gnw_state(mconfig, type, tag)
+ hh_sm510_state(mconfig, type, tag)
{ }
void gnw_boxing(machine_config &config);
@@ -3620,7 +3629,7 @@ INPUT_PORTS_END
void gnw_boxing_state::gnw_boxing(machine_config &config)
{
- gnw_sm511(config, 1920, 524);
+ sm511_common(config, 1920, 524);
}
// roms
@@ -3632,8 +3641,8 @@ ROM_START( gnw_boxing )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "bx-301_744.melody", 0x000, 0x100, CRC(439d943d) SHA1(52880df15ec7513f96482f455ef3d9778aa24750) )
- ROM_REGION( 265174, "screen", 0)
- ROM_LOAD( "gnw_boxing.svg", 0, 265174, CRC(e8a3ab25) SHA1(53e32542b582dcdf4ddd051f182738eee6c732c9) )
+ ROM_REGION( 265217, "screen", 0)
+ ROM_LOAD( "gnw_boxing.svg", 0, 265217, CRC(306c733e) SHA1(8c80df1295ff0889e16ef9a14e45b27a6ebaa9a2) )
ROM_END
@@ -3648,6 +3657,7 @@ ROM_END
BTANB: At the basket, the ball goes missing sometimes for 1 frame, or
may show 2 balls at the same time. It's the same on the real handheld.
+ BTANB: players flicker (increasing LCD delay won't improve it much)
Another BTANB? If a period is over at the same time a defender on the
2nd column grabs the ball, his arm won't be erased until it's redrawn.
@@ -3688,7 +3698,7 @@ INPUT_PORTS_END
void kdribble_state::kdribble(machine_config &config)
{
- konami_sm510(config, 1524, 1080); // R mask option confirmed
+ sm510_common(config, 1524, 1080); // R mask option confirmed
}
// roms
@@ -3697,8 +3707,8 @@ ROM_START( kdribble )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "584", 0x0000, 0x1000, CRC(1d9022c8) SHA1(64567f9f161e830a0634d5c89917ab866c26c0f8) )
- ROM_REGION( 450339, "screen", 0)
- ROM_LOAD( "kdribble.svg", 0, 450339, CRC(86c3ecc4) SHA1(8dfaeb0f3b35d4b680daaa9f478a6f3decf6ea0a) )
+ ROM_REGION( 450349, "screen", 0)
+ ROM_LOAD( "kdribble.svg", 0, 450349, CRC(0ea4153e) SHA1(b5deb398bb9f5e56e5bbcbe477d54528fb989487) )
ROM_END
@@ -3749,7 +3759,7 @@ INPUT_PORTS_END
void ktopgun_state::ktopgun(machine_config &config)
{
- konami_sm510(config, 1515, 1080); // R mask option confirmed
+ sm510_common(config, 1515, 1080); // R mask option confirmed
}
// roms
@@ -3758,8 +3768,8 @@ ROM_START( ktopgun ) // except for filler/unused bytes, ROM listing in patent US
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "598", 0x0000, 0x1000, CRC(50870b35) SHA1(cda1260c2e1c180995eced04b7d7ff51616dcef5) )
- ROM_REGION( 425832, "screen", 0)
- ROM_LOAD( "ktopgun.svg", 0, 425832, CRC(dc488ac0) SHA1(5a47e5639cb1e61dad3f2169efb99efe3d75896f) )
+ ROM_REGION( 425839, "screen", 0)
+ ROM_LOAD( "ktopgun.svg", 0, 425839, CRC(f0eb200f) SHA1(cbdc7cfaf1785b393c806dabd1a355d325bddc3f) )
ROM_END
@@ -3815,7 +3825,7 @@ INPUT_PORTS_END
void kcontra_state::kcontra(machine_config &config)
{
- common_sm511(config, 1505, 1080);
+ sm511_common(config, 1505, 1080);
}
// roms
@@ -3827,8 +3837,8 @@ ROM_START( kcontra ) // except for filler/unused bytes, ROM listing in patent US
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "773.melody", 0x000, 0x100, CRC(23d02b99) SHA1(703938e496db0eeacd14fe7605d4b5c39e0a5bc8) )
- ROM_REGION( 721005, "screen", 0)
- ROM_LOAD( "kcontra.svg", 0, 721005, CRC(b5370d0f) SHA1(2f401222d24fa32a4659ef2b64ddac8ac3973c69) )
+ ROM_REGION( 721055, "screen", 0)
+ ROM_LOAD( "kcontra.svg", 0, 721055, CRC(f1ce8d19) SHA1(7d8f2fac40605a3fd6f1386c945a53412b2f2b15) )
ROM_END
@@ -3880,7 +3890,7 @@ INPUT_PORTS_END
void ktmnt_state::ktmnt(machine_config &config)
{
- common_sm511(config, 1505, 1080);
+ sm511_common(config, 1505, 1080);
}
// roms
@@ -3892,8 +3902,8 @@ ROM_START( ktmnt ) // except for filler/unused bytes, ROM listing in patent US51
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "774.melody", 0x000, 0x100, CRC(8270d626) SHA1(bd91ca1d5cd7e2a62eef05c0033b19dcdbe441ca) )
- ROM_REGION( 610270, "screen", 0)
- ROM_LOAD( "ktmnt.svg", 0, 610270, CRC(ad9412ed) SHA1(154ee44efcd340dafa1cb84c37a9c3cd42cb42ab) )
+ ROM_REGION( 610309, "screen", 0)
+ ROM_LOAD( "ktmnt.svg", 0, 610309, CRC(9f48c50d) SHA1(917c0ed8e83d949e5115c897cacda8d60e42d74d) )
ROM_END
@@ -3942,7 +3952,7 @@ INPUT_PORTS_END
void kgradius_state::kgradius(machine_config &config)
{
- common_sm511(config, 1420, 1080);
+ sm511_common(config, 1420, 1080);
}
// roms
@@ -3954,8 +3964,8 @@ ROM_START( kgradius )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "771.melody", 0x000, 0x100, CRC(4c586b73) SHA1(14c5ab2898013a577f678970a648c374749cc66d) )
- ROM_REGION( 638097, "screen", 0)
- ROM_LOAD( "kgradius.svg", 0, 638097, CRC(3adbc0f1) SHA1(fe426bf2335ce30395ea14ecab6399a93c67816a) )
+ ROM_REGION( 638136, "screen", 0)
+ ROM_LOAD( "kgradius.svg", 0, 638136, CRC(85dd296e) SHA1(bd75d0c08387a69bbcf4fd100252846499a261b3) )
ROM_END
@@ -4002,7 +4012,7 @@ INPUT_PORTS_END
void kloneran_state::kloneran(machine_config &config)
{
- common_sm511(config, 1497, 1080);
+ sm511_common(config, 1497, 1080);
}
// roms
@@ -4014,8 +4024,8 @@ ROM_START( kloneran )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "781.melody", 0x000, 0x100, CRC(a393de36) SHA1(55089f04833ccb318524ab2b584c4817505f4019) )
- ROM_REGION( 633120, "screen", 0)
- ROM_LOAD( "kloneran.svg", 0, 633120, CRC(f55e5292) SHA1(d0a91b5cd8a1894e7abc9c505fff4a8e1d3bec7a) )
+ ROM_REGION( 633161, "screen", 0)
+ ROM_LOAD( "kloneran.svg", 0, 633161, CRC(1fb937ff) SHA1(9e5841dc67e50b789f0161693ebbd75f79915980) )
ROM_END
@@ -4036,7 +4046,10 @@ class kblades_state : public hh_sm510_state
public:
kblades_state(const machine_config &mconfig, device_type type, const char *tag) :
hh_sm510_state(mconfig, type, tag)
- { }
+ {
+ // increase lcd decay: too much overall flicker
+ m_decay_len = 25;
+ }
void kblades(machine_config &config);
};
@@ -4066,7 +4079,7 @@ INPUT_PORTS_END
void kblades_state::kblades(machine_config &config)
{
- common_sm511(config, 1516, 1080);
+ sm511_common(config, 1516, 1080);
}
// roms
@@ -4078,8 +4091,8 @@ ROM_START( kblades )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "782.melody", 0x000, 0x100, CRC(e8bf48ba) SHA1(3852c014dc9136566322b4f9e2aab0e3ec3a7387) )
- ROM_REGION( 455113, "screen", 0)
- ROM_LOAD( "kblades.svg", 0, 455113, CRC(e22f44c8) SHA1(ac95a837e20f87f3afc6c234f7407cbfcc438011) )
+ ROM_REGION( 455154, "screen", 0)
+ ROM_LOAD( "kblades.svg", 0, 455154, CRC(f17ec8ba) SHA1(ed999ef4b3f0ae94c243219ea8ea1eedd7179c26) )
ROM_END
@@ -4135,7 +4148,7 @@ INPUT_PORTS_END
void knfl_state::knfl(machine_config &config)
{
- common_sm511(config, 1449, 1080);
+ sm511_common(config, 1449, 1080);
}
// roms
@@ -4147,8 +4160,8 @@ ROM_START( knfl )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "786.melody", 0x000, 0x100, CRC(6c80263b) SHA1(d3c21e2f8491fef101907b8e0871b1e1c1ed58f5) )
- ROM_REGION( 571134, "screen", 0)
- ROM_LOAD( "knfl.svg", 0, 571134, CRC(f2c63235) SHA1(70b9232700f5498d3c63c63dd5904c0e19482cc2) )
+ ROM_REGION( 571173, "screen", 0)
+ ROM_LOAD( "knfl.svg", 0, 571173, CRC(406c5bed) SHA1(1f3a704f091b78c89c06108ba11310f4072cc178) )
ROM_END
@@ -4200,7 +4213,7 @@ INPUT_PORTS_END
void kbilly_state::kbilly(machine_config &config)
{
- common_sm511(config, 1490, 1080);
+ sm511_common(config, 1490, 1080);
}
// roms
@@ -4212,8 +4225,8 @@ ROM_START( kbilly )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "788.melody", 0x000, 0x100, CRC(cd488bea) SHA1(8fc60081f46e392978d6950c74711fb7ebd154de) )
- ROM_REGION( 598276, "screen", 0)
- ROM_LOAD( "kbilly.svg", 0, 598276, CRC(2969319e) SHA1(5cd1b0a6eee3168142c1d24f167b9ef38ad88402) )
+ ROM_REGION( 598317, "screen", 0)
+ ROM_LOAD( "kbilly.svg", 0, 598317, CRC(fec67ddf) SHA1(3e5f520733e8b720966028ed6a72062be5381f27) )
ROM_END
@@ -4259,7 +4272,7 @@ INPUT_PORTS_END
void kbucky_state::kbucky(machine_config &config)
{
- common_sm511(config, 1490, 1080);
+ sm511_common(config, 1490, 1080);
}
// roms
@@ -4271,8 +4284,8 @@ ROM_START( kbucky )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "n58.melody", 0x000, 0x100, CRC(7e99e469) SHA1(3e9a3843c6ab392f5989f3366df87a2d26cb8620) )
- ROM_REGION( 727841, "screen", 0)
- ROM_LOAD( "kbucky.svg", 0, 727841, CRC(c1d78488) SHA1(9ba4fdbce977455b8f1ad4bd2b01faa44bd05bc7) )
+ ROM_REGION( 727879, "screen", 0)
+ ROM_LOAD( "kbucky.svg", 0, 727879, CRC(64cde7e6) SHA1(60c0120c7955a694bb07eb013e42c7a71757ab9f) )
ROM_END
@@ -4325,7 +4338,7 @@ INPUT_PORTS_END
void kgarfld_state::kgarfld(machine_config &config)
{
- common_sm511(config, 1500, 1080);
+ sm511_common(config, 1500, 1080);
}
// roms
@@ -4337,8 +4350,8 @@ ROM_START( kgarfld )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "n62.melody", 0x000, 0x100, CRC(232b7d55) SHA1(76f6a19e8182ee3f00c9f4ef007b5dde75a9c00d) )
- ROM_REGION( 581107, "screen", 0)
- ROM_LOAD( "kgarfld.svg", 0, 581107, CRC(bf09a170) SHA1(075cb95535873018409eb15675183490c61b29b9) )
+ ROM_REGION( 581147, "screen", 0)
+ ROM_LOAD( "kgarfld.svg", 0, 581147, CRC(ef2e5a61) SHA1(fbf0236cd0d4228403823d2623c6fd2d68349f7a) )
ROM_END
@@ -4426,12 +4439,12 @@ INPUT_PORTS_END
void tgaunt_state::tgaunt(machine_config &config)
{
- tiger_sm510_1bit(config, 1425, 1080);
+ sm510_tiger(config, 1425, 1080);
}
void tgaunt_state::trobhood(machine_config &config)
{
- tiger_sm510_1bit(config, 1468, 1080);
+ sm510_tiger(config, 1468, 1080);
}
// roms
@@ -4440,16 +4453,16 @@ ROM_START( tgaunt )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "583", 0x0000, 0x1000, CRC(598d8156) SHA1(9f776e8b9b4321e8118481e6b1304f8a38f9932e) )
- ROM_REGION( 713020, "screen", 0)
- ROM_LOAD( "tgaunt.svg", 0, 713020, CRC(1f65ae21) SHA1(57ca33d073d1096a7fc17f2bdac940868d1ae651) )
+ ROM_REGION( 713071, "screen", 0)
+ ROM_LOAD( "tgaunt.svg", 0, 713071, CRC(b2dfb31b) SHA1(3e57c6aaa665e2874e6e7e051245a81ab7a917b3) )
ROM_END
ROM_START( trobhood )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "583", 0x0000, 0x1000, CRC(598d8156) SHA1(9f776e8b9b4321e8118481e6b1304f8a38f9932e) )
- ROM_REGION( 704892, "screen", 0)
- ROM_LOAD( "trobhood.svg", 0, 704892, CRC(291fd8db) SHA1(1de6bd0e203f16c44f7d661e44863a1a919f3da9) )
+ ROM_REGION( 704816, "screen", 0)
+ ROM_LOAD( "trobhood.svg", 0, 704816, CRC(f4b94f32) SHA1(8f68a7f4240489d42934d3875f82456aceabfb48) )
ROM_END
@@ -4520,7 +4533,7 @@ INPUT_PORTS_END
void tddragon_state::tddragon(machine_config &config)
{
- tiger_sm510_1bit(config, 1467, 1080); // R mask option confirmed
+ sm510_tiger(config, 1467, 1080); // R mask option confirmed
}
// roms
@@ -4529,8 +4542,8 @@ ROM_START( tddragon )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "593", 0x0000, 0x1000, CRC(2642f778) SHA1(fee77acf93e057a8b4627389dfd481c6d9cbd02b) )
- ROM_REGION( 511434, "screen", 0)
- ROM_LOAD( "tddragon.svg", 0, 511434, CRC(641e7ceb) SHA1(bbfc37cc085e00921422f65d9aac9949f871e7b7) )
+ ROM_REGION( 511477, "screen", 0)
+ ROM_LOAD( "tddragon.svg", 0, 511477, CRC(d3046671) SHA1(15fd328e28362402eab1094851dddd8e20a0bcec) )
ROM_END
@@ -4602,7 +4615,7 @@ INPUT_PORTS_END
void tkarnov_state::tkarnov(machine_config &config)
{
- tiger_sm510_1bit(config, 1477, 1080);
+ sm510_tiger(config, 1477, 1080);
}
// roms
@@ -4611,8 +4624,8 @@ ROM_START( tkarnov )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "582", 0x0000, 0x1000, CRC(cee85bdd) SHA1(143e39524f1dea523e0575f327ed189343cc87f5) )
- ROM_REGION( 527377, "screen", 0)
- ROM_LOAD( "tkarnov.svg", 0, 527377, CRC(971840fc) SHA1(48db7139fa875e60b44340fb475b6d1081ef5c10) )
+ ROM_REGION( 527432, "screen", 0)
+ ROM_LOAD( "tkarnov.svg", 0, 527432, CRC(9317066c) SHA1(087cfde97e106c6fd8c52d3a1138e6bde2ad9289) )
ROM_END
@@ -4683,7 +4696,7 @@ INPUT_PORTS_END
void tvindictr_state::tvindictr(machine_config &config)
{
- tiger_sm510_1bit(config, 1459, 1080);
+ sm510_tiger(config, 1459, 1080);
}
// roms
@@ -4692,8 +4705,8 @@ ROM_START( tvindictr )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "595", 0x0000, 0x1000, CRC(b574d16f) SHA1(d2cb0f2e21ca2defe49a4b45f4c8e169ae9979ab) )
- ROM_REGION( 314165, "screen", 0)
- ROM_LOAD( "tvindictr.svg", 0, 314165, CRC(2241992c) SHA1(efd44879d1c0d5befd7ea07089418406fc101315) )
+ ROM_REGION( 314205, "screen", 0)
+ ROM_LOAD( "tvindictr.svg", 0, 314205, CRC(fefe9f31) SHA1(3c8e7ab2cd81de72740b2948def07a2fc000a78a) )
ROM_END
@@ -4775,7 +4788,7 @@ INPUT_PORTS_END
void tgaiden_state::tgaiden(machine_config &config)
{
- tiger_sm510_1bit(config, 1476, 1080);
+ sm510_tiger(config, 1476, 1080);
m_maincpu->write_r().append(FUNC(tgaiden_state::led_w));
}
@@ -4786,8 +4799,8 @@ ROM_START( tgaiden )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "m82", 0x0000, 0x1000, CRC(278eafb0) SHA1(14396a0010bade0fde705969151200ed432321e7) )
- ROM_REGION( 588818, "screen", 0)
- ROM_LOAD( "tgaiden.svg", 0, 588818, CRC(f2b94ded) SHA1(45ba57e16921849cf27e14a81a04b3cdce753726) )
+ ROM_REGION( 588916, "screen", 0)
+ ROM_LOAD( "tgaiden.svg", 0, 588916, CRC(5845c630) SHA1(c4b0d4d85e4b58a051920b6b34668847049c57a7) )
ROM_END
@@ -4854,7 +4867,7 @@ INPUT_PORTS_END
void tbatman_state::tbatman(machine_config &config)
{
- tiger_sm510_1bit(config, 1442, 1080);
+ sm510_tiger(config, 1442, 1080);
}
// roms
@@ -4863,8 +4876,8 @@ ROM_START( tbatman )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "597", 0x0000, 0x1000, CRC(8b7acc97) SHA1(fe811675dc5c5ef9f6f969685c933926c8b9e868) )
- ROM_REGION( 551890, "screen", 0)
- ROM_LOAD( "tbatman.svg", 0, 551890, CRC(65809ee3) SHA1(5fc38bdb2108d45dc99bce3379253423ea88e0fc) )
+ ROM_REGION( 551931, "screen", 0)
+ ROM_LOAD( "tbatman.svg", 0, 551931, CRC(95ae104b) SHA1(0508f925f29b2152b41c478447e63c74fce718ad) )
ROM_END
@@ -4935,7 +4948,7 @@ INPUT_PORTS_END
void tsharr2_state::tsharr2(machine_config &config)
{
- tiger_sm510_1bit(config, 1493, 1080); // R mask option confirmed
+ sm510_tiger(config, 1493, 1080); // R mask option confirmed
}
// roms
@@ -4944,8 +4957,8 @@ ROM_START( tsharr2 )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "m91", 0x0000, 0x1000, CRC(b207ac79) SHA1(9889dfec26089313ba2bdac845a75a26742d09e1) )
- ROM_REGION( 555126, "screen", 0)
- ROM_LOAD( "tsharr2.svg", 0, 555126, CRC(ff43e29b) SHA1(0af02e65a1dcf95958296a292343430670b67ae5) )
+ ROM_REGION( 555177, "screen", 0)
+ ROM_LOAD( "tsharr2.svg", 0, 555177, CRC(842f8f7e) SHA1(2c523531059acdfa3a0cebac9d8f84f1971e1086) )
ROM_END
@@ -5013,7 +5026,7 @@ INPUT_PORTS_END
void tstrider_state::tstrider(machine_config &config)
{
- tiger_sm510_1bit(config, 1479, 1080);
+ sm510_tiger(config, 1479, 1080);
}
// roms
@@ -5022,8 +5035,8 @@ ROM_START( tstrider )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "m92", 0x0000, 0x1000, CRC(4b488e8f) SHA1(b037c220c4a456f0dac67d759736f202a7609ee5) )
- ROM_REGION( 554817, "screen", 0)
- ROM_LOAD( "tstrider.svg", 0, 554817, CRC(be5de6bd) SHA1(cde0a3fe21af24d7d22d2ce0aec9c308f8696c7e) )
+ ROM_REGION( 554858, "screen", 0)
+ ROM_LOAD( "tstrider.svg", 0, 554858, CRC(12767799) SHA1(9d67a96affee18dacaf3d49d89f60940c33492aa) )
ROM_END
@@ -5095,7 +5108,7 @@ INPUT_PORTS_END
void tgoldnaxe_state::tgoldnaxe(machine_config &config)
{
- tiger_sm510_1bit(config, 1456, 1080);
+ sm510_tiger(config, 1456, 1080);
}
// roms
@@ -5104,8 +5117,8 @@ ROM_START( tgoldnaxe )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "m94", 0x0000, 0x1000, CRC(af183fbf) SHA1(23716e2a7c4bb4842b2af1a43fe88db44e18dc17) )
- ROM_REGION( 605483, "screen", 0)
- ROM_LOAD( "tgoldnaxe.svg", 0, 605483, CRC(533bea14) SHA1(08d419bd7af5de7216654dc7f978beed95192c2d) )
+ ROM_REGION( 605525, "screen", 0)
+ ROM_LOAD( "tgoldnaxe.svg", 0, 605525, CRC(9c1097c5) SHA1(bf9c2a1f4ae98ebe5eb9d381b0729588a150fa27) )
ROM_END
@@ -5194,12 +5207,12 @@ INPUT_PORTS_END
void trobocop2_state::trobocop2(machine_config &config)
{
- tiger_sm510_1bit(config, 1487, 1080);
+ sm510_tiger(config, 1487, 1080);
}
void trobocop2_state::trockteer(machine_config &config)
{
- tiger_sm510_1bit(config, 1463, 1080);
+ sm510_tiger(config, 1463, 1080);
}
// roms
@@ -5208,16 +5221,16 @@ ROM_START( trobocop2 )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "m96", 0x0000, 0x1000, CRC(3704b60c) SHA1(04275833e1a79fd33226faf060890b66ae54e1d3) )
- ROM_REGION( 463532, "screen", 0)
- ROM_LOAD( "trobocop2.svg", 0, 463532, CRC(c2b92868) SHA1(87912f02bea967c10ba1d8f7c810e3c44b0e3cff) )
+ ROM_REGION( 463572, "screen", 0)
+ ROM_LOAD( "trobocop2.svg", 0, 463572, CRC(0218c1d9) SHA1(2932825ca03e008e5c2993882d363ae00df43f26) )
ROM_END
ROM_START( trockteer )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "m96", 0x0000, 0x1000, CRC(3704b60c) SHA1(04275833e1a79fd33226faf060890b66ae54e1d3) )
- ROM_REGION( 558086, "screen", 0)
- ROM_LOAD( "trockteer.svg", 0, 558086, CRC(8afe0f88) SHA1(702127a4ff72be492f72b24bd8917ae0e15f247d) )
+ ROM_REGION( 558128, "screen", 0)
+ ROM_LOAD( "trockteer.svg", 0, 558128, CRC(70ff1f46) SHA1(5cd94655654614206ed11844ba31650edb51eb22) )
ROM_END
@@ -5293,7 +5306,7 @@ INPUT_PORTS_END
void taltbeast_state::taltbeast(machine_config &config)
{
- tiger_sm510_1bit(config, 1455, 1080); // R mask option confirmed
+ sm510_tiger(config, 1455, 1080); // R mask option confirmed
}
// roms
@@ -5302,8 +5315,8 @@ ROM_START( taltbeast )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "m88", 0x0000, 0x1000, CRC(1b3d15e7) SHA1(78371230dff872d6c07eefdbc4856c2a3336eb61) )
- ROM_REGION( 667887, "screen", 0)
- ROM_LOAD( "taltbeast.svg", 0, 667887, CRC(1ca9bbf1) SHA1(be844dddee4a95f70ea2adf875d3ee6cda2a6633) )
+ ROM_REGION( 667931, "screen", 0)
+ ROM_LOAD( "taltbeast.svg", 0, 667931, CRC(a642d5f7) SHA1(ad005deaa35189e59317a07d860403adeef51aad) )
ROM_END
@@ -5375,7 +5388,7 @@ INPUT_PORTS_END
void tsf2010_state::tsf2010(machine_config &config)
{
- tiger_sm510_1bit(config, 1465, 1080);
+ sm510_tiger(config, 1465, 1080);
}
// roms
@@ -5384,8 +5397,8 @@ ROM_START( tsf2010 )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "ma2", 0x0000, 0x1000, CRC(764b3757) SHA1(c5f90b860128658576bb837e9cabbb3045ad2756) )
- ROM_REGION( 595149, "screen", 0)
- ROM_LOAD( "tsf2010.svg", 0, 595149, CRC(b873856b) SHA1(1d070d4d9578bbc322d1edead208bbd44340b71a) )
+ ROM_REGION( 595191, "screen", 0)
+ ROM_LOAD( "tsf2010.svg", 0, 595191, CRC(78f96bad) SHA1(4389580e3d47dda0243b01625427013eb7ec4336) )
ROM_END
@@ -5453,7 +5466,7 @@ INPUT_PORTS_END
void tswampt_state::tswampt(machine_config &config)
{
- tiger_sm510_1bit(config, 1450, 1080);
+ sm510_tiger(config, 1450, 1080);
}
// roms
@@ -5462,8 +5475,8 @@ ROM_START( tswampt )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mb0", 0x0000, 0x1000, CRC(8433530c) SHA1(60716d3bba92dc8ac3f1ee29c5734c9e894a1aff) )
- ROM_REGION( 578505, "screen", 0)
- ROM_LOAD( "tswampt.svg", 0, 578505, CRC(98ff2fbb) SHA1(a5a4e9934b86f69176549f99246b40f323441945) )
+ ROM_REGION( 578544, "screen", 0)
+ ROM_LOAD( "tswampt.svg", 0, 578544, CRC(921e2b43) SHA1(176426fe9bf4855256e0ff7804ca48e619fa0cf3) )
ROM_END
@@ -5535,7 +5548,7 @@ INPUT_PORTS_END
void tspidman_state::tspidman(machine_config &config)
{
- tiger_sm510_1bit(config, 1440, 1080);
+ sm510_tiger(config, 1440, 1080);
}
// roms
@@ -5544,8 +5557,8 @@ ROM_START( tspidman )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "ma5", 0x0000, 0x1000, CRC(2624daed) SHA1(7c10434ae899637264de706045d48e3fce1d30a7) )
- ROM_REGION( 605332, "screen", 0)
- ROM_LOAD( "tspidman.svg", 0, 605332, CRC(6e687727) SHA1(c1a2ee450509e05d1db61e02f6a911207d2830c4) )
+ ROM_REGION( 605375, "screen", 0)
+ ROM_LOAD( "tspidman.svg", 0, 605375, CRC(6c032ce4) SHA1(69043096e28709821ddc26ef05f60f353fc3e35d) )
ROM_END
@@ -5617,7 +5630,7 @@ INPUT_PORTS_END
void txmen_state::txmen(machine_config &config)
{
- tiger_sm510_1bit(config, 1467, 1080);
+ sm510_tiger(config, 1467, 1080);
}
// roms
@@ -5626,8 +5639,8 @@ ROM_START( txmen )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "ma7", 0x0000, 0x1000, CRC(6f3ff34f) SHA1(aa24fbc3a4117ea51ebf951ee343a36c77692b72) )
- ROM_REGION( 543232, "screen", 0)
- ROM_LOAD( "txmen.svg", 0, 543232, CRC(51daf7f9) SHA1(b59ecbd83e05478f4b2654a019291c7e06893112) )
+ ROM_REGION( 543273, "screen", 0)
+ ROM_LOAD( "txmen.svg", 0, 543273, CRC(039b37bb) SHA1(bd57cba8f380185beda2eb5ea7b5d1f25c8d447b) )
ROM_END
@@ -5699,7 +5712,7 @@ INPUT_PORTS_END
void tddragon3_state::tddragon3(machine_config &config)
{
- tiger_sm510_1bit(config, 1514, 1080);
+ sm510_tiger(config, 1514, 1080);
}
// roms
@@ -5708,8 +5721,8 @@ ROM_START( tddragon3 )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "ma6", 0x0000, 0x1000, CRC(8e2da0d9) SHA1(54dd05124b4c605975b0cb1eadd7456ff4a94d68) )
- ROM_REGION( 615684, "screen", 0)
- ROM_LOAD( "tddragon3.svg", 0, 615684, CRC(3f5df090) SHA1(c9248fbf3a4dec0ce3b32b10fb67f133595cc54d) )
+ ROM_REGION( 615734, "screen", 0)
+ ROM_LOAD( "tddragon3.svg", 0, 615734, CRC(4c94d574) SHA1(e2717db6c0279da4813550f0035a23bdaaa8b7bb) )
ROM_END
@@ -5781,7 +5794,7 @@ INPUT_PORTS_END
void tflash_state::tflash(machine_config &config)
{
- tiger_sm510_1bit(config, 1444, 1080);
+ sm510_tiger(config, 1444, 1080);
}
// roms
@@ -5790,8 +5803,8 @@ ROM_START( tflash )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mb5", 0x0000, 0x1000, CRC(f7f1d082) SHA1(49a7a931450cf27fe69076c4e15ffb34814e25d4) )
- ROM_REGION( 587820, "screen", 0)
- ROM_LOAD( "tflash.svg", 0, 587820, CRC(aa1ad063) SHA1(aec6b15569d3d58ff9a4f7db779cda4a1c8efc35) )
+ ROM_REGION( 587863, "screen", 0)
+ ROM_LOAD( "tflash.svg", 0, 587863, CRC(8ddb9391) SHA1(fa8b4610a914de8ae95123c4273a12cdb4353a39) )
ROM_END
@@ -5864,7 +5877,7 @@ INPUT_PORTS_END
void tmchammer_state::tmchammer(machine_config &config)
{
- tiger_sm511_1bit(config, 1471, 1080);
+ sm511_tiger1bit(config, 1471, 1080);
}
// roms
@@ -5876,8 +5889,8 @@ ROM_START( tmchammer )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "n63.melody", 0x000, 0x100, CRC(77c1a5a3) SHA1(c00ae3b7c64dd9db96eab520fe674a40571fc15f) )
- ROM_REGION( 456446, "screen", 0)
- ROM_LOAD( "tmchammer.svg", 0, 456446, CRC(79d6d45d) SHA1(bf6b8c6fdccad657377ad9f721dd22408f6ae775) )
+ ROM_REGION( 456487, "screen", 0)
+ ROM_LOAD( "tmchammer.svg", 0, 456487, CRC(1cd10ff3) SHA1(092396c56adae7f872c3b5916ef3ecf67ab30161) )
ROM_END
@@ -5949,7 +5962,7 @@ INPUT_PORTS_END
void tbtoads_state::tbtoads(machine_config &config)
{
- tiger_sm510_1bit(config, 1454, 1080);
+ sm510_tiger(config, 1454, 1080);
}
// roms
@@ -5958,8 +5971,8 @@ ROM_START( tbtoads )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mb3", 0x0000, 0x1000, CRC(8fa4c55a) SHA1(2be97e63dfed51313e180d7388dd431058db5a51) )
- ROM_REGION( 694365, "screen", 0)
- ROM_LOAD( "tbtoads.svg", 0, 694365, CRC(3af488e9) SHA1(d0e9ec61fac23bb22e508da4fa8bf2a7b8f186cf) )
+ ROM_REGION( 694417, "screen", 0)
+ ROM_LOAD( "tbtoads.svg", 0, 694417, CRC(c0fbc25d) SHA1(def54ab2f10123246f7809fc3caf3e9d26800f87) )
ROM_END
@@ -6031,7 +6044,7 @@ INPUT_PORTS_END
void thook_state::thook(machine_config &config)
{
- tiger_sm510_1bit(config, 1489, 1080);
+ sm510_tiger(config, 1489, 1080);
}
// roms
@@ -6040,8 +6053,8 @@ ROM_START( thook )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mb7", 0x0000, 0x1000, CRC(7eb1a6e2) SHA1(f4a09ab95c968b0ddbe56cd7bb2667881c145731) )
- ROM_REGION( 680503, "screen", 0)
- ROM_LOAD( "thook.svg", 0, 680503, CRC(28bd6da2) SHA1(e97b1dda219a766ffcca15d1b3279f5cee5e2fed) )
+ ROM_REGION( 680544, "screen", 0)
+ ROM_LOAD( "thook.svg", 0, 680544, CRC(bddefb9b) SHA1(438b0fe6f4c0196952bd179075498d6bd19c3e48) )
ROM_END
@@ -6112,7 +6125,7 @@ INPUT_PORTS_END
void tbttf_state::tbttf(machine_config &config)
{
- tiger_sm510_1bit(config, 1466, 1080);
+ sm510_tiger(config, 1466, 1080);
}
// roms
@@ -6121,8 +6134,8 @@ ROM_START( tbttf )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mc3", 0x0000, 0x1000, CRC(9c37a23c) SHA1(c09fa5caac8b574f8460265b98c0bea1d5e78c6a) )
- ROM_REGION( 667700, "screen", 0)
- ROM_LOAD( "tbttf.svg", 0, 667700, CRC(d1d19ec5) SHA1(7361943ccf1f4072bba6fd4e6acae3e2f3d7a0ea) )
+ ROM_REGION( 667741, "screen", 0)
+ ROM_LOAD( "tbttf.svg", 0, 667741, CRC(1a57e35a) SHA1(9b622e08cc44e3d48b71a283cd07b89fbcc6faa4) )
ROM_END
@@ -6196,7 +6209,7 @@ INPUT_PORTS_END
void taddams_state::taddams(machine_config &config)
{
- tiger_sm510_1bit(config, 1464, 1080);
+ sm510_tiger(config, 1464, 1080);
}
// roms
@@ -6205,8 +6218,8 @@ ROM_START( taddams )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mc2", 0x0000, 0x1000, CRC(af33d432) SHA1(676ada238c389d1dd02dcb29731d69624f60b342) )
- ROM_REGION( 554649, "screen", 0)
- ROM_LOAD( "taddams.svg", 0, 554649, CRC(0b916c6d) SHA1(5a2456b4a0f31db94a78373baab46f3ff9732b92) )
+ ROM_REGION( 554703, "screen", 0)
+ ROM_LOAD( "taddams.svg", 0, 554703, CRC(85f15123) SHA1(088dbfbe760b782988bbfe6d29d89b8427844992) )
ROM_END
@@ -6278,7 +6291,7 @@ INPUT_PORTS_END
void thalone_state::thalone(machine_config &config)
{
- tiger_sm510_1bit(config, 1448, 1080);
+ sm510_tiger(config, 1448, 1080);
}
// roms
@@ -6287,8 +6300,8 @@ ROM_START( thalone )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mc7", 0x0000, 0x1000, CRC(eceda335) SHA1(20c9ffcf914db61aba03716fe146bac42873ac82) )
- ROM_REGION( 494235, "screen", 0)
- ROM_LOAD( "thalone.svg", 0, 494235, CRC(0e32df1d) SHA1(1fff1d37a5fe66d4f59d12af3ce67665c0049800) )
+ ROM_REGION( 494279, "screen", 0)
+ ROM_LOAD( "thalone.svg", 0, 494279, CRC(2479d88d) SHA1(061413d6e0893106b335ca42cf0260f45c7dacc7) )
ROM_END
@@ -6356,7 +6369,7 @@ INPUT_PORTS_END
void txmenpx_state::txmenpx(machine_config &config)
{
- tiger_sm510_1bit(config, 1464, 1080);
+ sm510_tiger(config, 1464, 1080);
}
// roms
@@ -6365,8 +6378,8 @@ ROM_START( txmenpx )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "md3", 0x0000, 0x1000, CRC(11c2b09a) SHA1(f94b1e3e60f002398b39c98946469dd1a6aa8e77) )
- ROM_REGION( 572538, "screen", 0)
- ROM_LOAD( "txmenpx.svg", 0, 572538, CRC(9a89c753) SHA1(e3828a8c10c77ee5634128d0e9239e8cda19f988) )
+ ROM_REGION( 572583, "screen", 0)
+ ROM_LOAD( "txmenpx.svg", 0, 572583, CRC(b98f3134) SHA1(78ac7cd32b36f214b5e6eada725378ccbca91987) )
ROM_END
@@ -6438,7 +6451,7 @@ INPUT_PORTS_END
void thalone2_state::thalone2(machine_config &config)
{
- tiger_sm510_1bit(config, 1454, 1080);
+ sm510_tiger(config, 1454, 1080);
}
// roms
@@ -6447,8 +6460,8 @@ ROM_START( thalone2 )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "md7", 0x0000, 0x1000, CRC(ac8a21e9) SHA1(9024f74e34056f90b7dbf439300797183f74eb00) )
- ROM_REGION( 748886, "screen", 0)
- ROM_LOAD( "thalone2.svg", 0, 748886, CRC(a5d8898e) SHA1(de8fae0169a3797a46b5c81d9b556df636a5674e) )
+ ROM_REGION( 748928, "screen", 0)
+ ROM_LOAD( "thalone2.svg", 0, 748928, CRC(d42ec743) SHA1(7df9654b7f700662f29ca7cabe25ac78b2c4b04b) )
ROM_END
@@ -6515,7 +6528,7 @@ INPUT_PORTS_END
void tsonic_state::tsonic(machine_config &config)
{
- tiger_sm511_2bit(config, 1517, 1080);
+ sm511_tiger2bit(config, 1517, 1080);
}
// roms
@@ -6527,8 +6540,8 @@ ROM_START( tsonic )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "n71.melody", 0x000, 0x100, CRC(bae258c8) SHA1(81cb75d73fab4479cd92fcb13d9cb03cec2afdd5) )
- ROM_REGION( 541450, "screen", 0)
- ROM_LOAD( "tsonic.svg", 0, 541450, CRC(f01835e3) SHA1(25f924af55ffadd2aebf50a89f75571d788d5ac1) )
+ ROM_REGION( 541491, "screen", 0)
+ ROM_LOAD( "tsonic.svg", 0, 541491, CRC(ac6bff26) SHA1(fa944958eb64e8283d35951ff105cead28e6ab8a) )
ROM_END
@@ -6600,7 +6613,7 @@ INPUT_PORTS_END
void trobocop3_state::trobocop3(machine_config &config)
{
- tiger_sm510_1bit(config, 1464, 1080);
+ sm510_tiger(config, 1464, 1080);
}
// roms
@@ -6609,8 +6622,8 @@ ROM_START( trobocop3 )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mc6", 0x0000, 0x1000, CRC(07b44e4c) SHA1(3165c85e16c062d2d9d0c0f1b1f6bd6079b4de15) )
- ROM_REGION( 612103, "screen", 0)
- ROM_LOAD( "trobocop3.svg", 0, 612103, CRC(9a162642) SHA1(b775f64e4616c4fc8d2c139938f148c9666e646a) )
+ ROM_REGION( 612142, "screen", 0)
+ ROM_LOAD( "trobocop3.svg", 0, 612142, CRC(b55c1440) SHA1(e8f692deecf489be22be570510175b750d65d5c5) )
ROM_END
@@ -6678,7 +6691,7 @@ INPUT_PORTS_END
void tdummies_state::tdummies(machine_config &config)
{
- tiger_sm510_1bit(config, 1441, 1080);
+ sm510_tiger(config, 1441, 1080);
}
// roms
@@ -6687,8 +6700,8 @@ ROM_START( tdummies )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "me0", 0x0000, 0x1000, CRC(29efae4a) SHA1(0b26913a3fd2fde2b39549f0f7cbc3daaa41eb50) )
- ROM_REGION( 525493, "screen", 0)
- ROM_LOAD( "tdummies.svg", 0, 525493, CRC(a18a5216) SHA1(1238e8c489445e715d4fc53e597820845b386233) )
+ ROM_REGION( 525535, "screen", 0)
+ ROM_LOAD( "tdummies.svg", 0, 525535, CRC(b0db8655) SHA1(937b3edd9c0949b9f7d01ef8920ac63b61e64909) )
ROM_END
@@ -6760,7 +6773,7 @@ INPUT_PORTS_END
void tsfight2_state::tsfight2(machine_config &config)
{
- tiger_sm510_1bit(config, 1444, 1080);
+ sm510_tiger(config, 1444, 1080);
}
// roms
@@ -6769,8 +6782,8 @@ ROM_START( tsfight2 )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "me1", 0x0000, 0x1000, CRC(73384e94) SHA1(350417d101ce034b3974b4a1d2e04bcb3bf70605) )
- ROM_REGION( 630403, "screen", 0)
- ROM_LOAD( "tsfight2.svg", 0, 630403, CRC(eadc2c81) SHA1(20b2a797f6b9a008c1994eaee7b87e3fe828e837) )
+ ROM_REGION( 630444, "screen", 0)
+ ROM_LOAD( "tsfight2.svg", 0, 630444, CRC(42b82c9b) SHA1(8e18d0cfd629478973f2c857105daad70eae46d9) )
ROM_END
@@ -6842,7 +6855,7 @@ INPUT_PORTS_END
void twworld_state::twworld(machine_config &config)
{
- tiger_sm510_1bit(config, 1429, 1080);
+ sm510_tiger(config, 1429, 1080);
}
// roms
@@ -6851,8 +6864,8 @@ ROM_START( twworld )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "me7", 0x0000, 0x1000, CRC(dcb16d98) SHA1(539989e12bbc4a719818546c5edcfda02b98210e) )
- ROM_REGION( 527859, "screen", 0)
- ROM_LOAD( "twworld.svg", 0, 527859, CRC(0a2cffce) SHA1(d8c3f2fef60357e47ce0b44d588d0bb39112c8b9) )
+ ROM_REGION( 527901, "screen", 0)
+ ROM_LOAD( "twworld.svg", 0, 527901, CRC(515fede8) SHA1(e9c5adfb02b860fb97968957f282e685b1a4e3bc) )
ROM_END
@@ -6920,7 +6933,7 @@ INPUT_PORTS_END
void tjpark_state::tjpark(machine_config &config)
{
- tiger_sm510_1bit(config, 1454, 1080);
+ sm510_tiger(config, 1454, 1080);
}
// roms
@@ -6929,8 +6942,8 @@ ROM_START( tjpark )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mf4", 0x0000, 0x1000, CRC(f66faf73) SHA1(4cfa743dcd6e44a3c1f56206d5824fddba16df01) )
- ROM_REGION( 812575, "screen", 0)
- ROM_LOAD( "tjpark.svg", 0, 812575, CRC(539c9b9c) SHA1(bf9a95586438df677d753deb17abc97f8837cbe3) )
+ ROM_REGION( 812619, "screen", 0)
+ ROM_LOAD( "tjpark.svg", 0, 812619, CRC(04d85ec6) SHA1(97f67bb496d985b62dc094f6f1d6b5597a4df895) )
ROM_END
@@ -6997,7 +7010,7 @@ INPUT_PORTS_END
void tsonic2_state::tsonic2(machine_config &config)
{
- tiger_sm511_2bit(config, 1475, 1080);
+ sm511_tiger2bit(config, 1475, 1080);
}
// roms
@@ -7009,8 +7022,8 @@ ROM_START( tsonic2 )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "n86.melody", 0x000, 0x100, CRC(c16fa2b2) SHA1(222772d311fd3b3b05d80cfd539c2c862bed0be5) )
- ROM_REGION( 667887, "screen", 0)
- ROM_LOAD( "tsonic2.svg", 0, 667887, CRC(ef82d40e) SHA1(f22efba565adb32634d8b46c31459ec833b13d98) )
+ ROM_REGION( 667927, "screen", 0)
+ ROM_LOAD( "tsonic2.svg", 0, 667927, CRC(d2c52e67) SHA1(24ffbc8fae606dcd2f60a4d95fe1dcfd261c3576) )
ROM_END
@@ -7087,7 +7100,7 @@ INPUT_PORTS_END
void tsddragon_state::tsddragon(machine_config &config)
{
- tiger_sm510_1bit(config, 1503, 1080);
+ sm510_tiger(config, 1503, 1080);
}
// roms
@@ -7096,8 +7109,8 @@ ROM_START( tsddragon )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mf5", 0x0000, 0x1000, CRC(264c8e82) SHA1(470eb2f09a58ef05eb0b7c8e11380ad1d8ce4e1a) )
- ROM_REGION( 753533, "screen", 0)
- ROM_LOAD( "tsddragon.svg", 0, 753533, CRC(fb526049) SHA1(552fe005a6e23e083867b7d1c10d20daa8913a14) )
+ ROM_REGION( 753572, "screen", 0)
+ ROM_LOAD( "tsddragon.svg", 0, 753572, CRC(0759388b) SHA1(4e4acb1b97845e529522ba21de846ce1dc74357d) )
ROM_END
@@ -7170,7 +7183,7 @@ INPUT_PORTS_END
void tdennis_state::tdennis(machine_config &config)
{
- tiger_sm510_1bit(config, 1467, 1080);
+ sm510_tiger(config, 1467, 1080);
}
// roms
@@ -7179,8 +7192,8 @@ ROM_START( tdennis )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mf9", 0x0000, 0x1000, CRC(d95f54d5) SHA1(1b3a170f32deec98e54ad09c04b404f5ae03dcea) )
- ROM_REGION( 754842, "screen", 0)
- ROM_LOAD( "tdennis.svg", 0, 754842, CRC(3b1ed476) SHA1(adc94919daa9a6c42f1acd8ef5113b61859338b7) )
+ ROM_REGION( 754896, "screen", 0)
+ ROM_LOAD( "tdennis.svg", 0, 754896, CRC(6e7512c3) SHA1(b84ef988051a6a883f3435a779ea67e544d50dae) )
ROM_END
@@ -7256,7 +7269,7 @@ INPUT_PORTS_END
void tnmarebc_state::tnmarebc(machine_config &config)
{
- tiger_sm510_1bit(config, 1456, 1080);
+ sm510_tiger(config, 1456, 1080);
}
// roms
@@ -7265,8 +7278,8 @@ ROM_START( tnmarebc )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mg0", 0x0000, 0x1000, CRC(5ef21421) SHA1(8fd458575111b89d7c33c969e76703bde5ad2c36) )
- ROM_REGION( 631310, "screen", 0)
- ROM_LOAD( "tnmarebc.svg", 0, 631310, CRC(f9c96205) SHA1(1947d358efd94ae3257ed959172a819798d2c9a1) )
+ ROM_REGION( 631351, "screen", 0)
+ ROM_LOAD( "tnmarebc.svg", 0, 631351, CRC(140e278b) SHA1(f0d2b6e6ee2328f54255532ad03d5d505ebbb23b) )
ROM_END
@@ -7338,7 +7351,7 @@ INPUT_PORTS_END
void ttransf2_state::ttransf2(machine_config &config)
{
- tiger_sm510_1bit(config, 1476, 1080);
+ sm510_tiger(config, 1476, 1080);
}
// roms
@@ -7347,8 +7360,8 @@ ROM_START( ttransf2 )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mg2", 0x0000, 0x1000, CRC(65c0f456) SHA1(b1bc3887c5088b3fe359585658e5c5236c09af9e) )
- ROM_REGION( 727662, "screen", 0)
- ROM_LOAD( "ttransf2.svg", 0, 727662, CRC(52fd5ea1) SHA1(35ae9fe2cea14ee4c591df0458fed478c9feb044) )
+ ROM_REGION( 727708, "screen", 0)
+ ROM_LOAD( "ttransf2.svg", 0, 727708, CRC(bd527f23) SHA1(9ce35bbfe1ea61c431eccaf32274faa4181587da) )
ROM_END
@@ -7416,7 +7429,7 @@ INPUT_PORTS_END
void topaliens_state::topaliens(machine_config &config)
{
- tiger_sm510_1bit(config, 1450, 1080);
+ sm510_tiger(config, 1450, 1080);
}
// roms
@@ -7425,8 +7438,8 @@ ROM_START( topaliens )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mj1", 0x0000, 0x1000, CRC(ccc196cf) SHA1(f18f7cf842cddecf90d05ab0f90257bb76514f54) )
- ROM_REGION( 1214876, "screen", 0)
- ROM_LOAD( "topaliens.svg", 0, 1214876, CRC(683c70aa) SHA1(0fac5ba8ab5f9b73a3cbbff046be60550fa5f98a) )
+ ROM_REGION( 1214917, "screen", 0)
+ ROM_LOAD( "topaliens.svg", 0, 1214917, CRC(cbd57ab4) SHA1(efac0833f421212a81a8fc9b35c97369375aa1a9) )
ROM_END
@@ -7499,7 +7512,7 @@ INPUT_PORTS_END
void tmkombat_state::tmkombat(machine_config &config)
{
- tiger_sm510_1bit(config, 1468, 1080);
+ sm510_tiger(config, 1468, 1080);
}
// roms
@@ -7508,8 +7521,8 @@ ROM_START( tmkombat )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mg6", 0x0000, 0x1000, CRC(f6375dc7) SHA1(a711199c2623979f19c11067ebfff9355256c2c3) )
- ROM_REGION( 841829, "screen", 0)
- ROM_LOAD( "tmkombat.svg", 0, 841829, CRC(9dc4f58c) SHA1(9c9b080d7f3b777407445c22195990c55c6352ca) )
+ ROM_REGION( 841871, "screen", 0)
+ ROM_LOAD( "tmkombat.svg", 0, 841871, CRC(3bd5a963) SHA1(4d093f34c64caf60233e156fe160d8fceb15b6c6) )
ROM_END
@@ -7581,7 +7594,7 @@ INPUT_PORTS_END
void tshadow_state::tshadow(machine_config &config)
{
- tiger_sm510_1bit(config, 1484, 1080);
+ sm510_tiger(config, 1484, 1080);
}
// roms
@@ -7590,8 +7603,8 @@ ROM_START( tshadow )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mj5", 0x0000, 0x1000, CRC(09822d73) SHA1(30cae8b783a4f388193aee248fa18c6c1042e0ec) )
- ROM_REGION( 946450, "screen", 0)
- ROM_LOAD( "tshadow.svg", 0, 946450, CRC(5cab680a) SHA1(8f8f660c08fc56287362b11c183655047fbd91ca) )
+ ROM_REGION( 946494, "screen", 0)
+ ROM_LOAD( "tshadow.svg", 0, 946494, CRC(e62de82e) SHA1(94fcef33066e97266efcd0d91b60229859088b36) )
ROM_END
@@ -7663,7 +7676,7 @@ INPUT_PORTS_END
void tskelwarr_state::tskelwarr(machine_config &config)
{
- tiger_sm510_1bit(config, 1444, 1080);
+ sm510_tiger(config, 1444, 1080);
}
// roms
@@ -7672,8 +7685,8 @@ ROM_START( tskelwarr )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mk0", 0x0000, 0x1000, CRC(dc7827a1) SHA1(74ff143605684df0c70db604a5f22dbf512044d7) )
- ROM_REGION( 1125002, "screen", 0)
- ROM_LOAD( "tskelwarr.svg", 0, 1125002, CRC(49c6ca24) SHA1(71f4ed98ab558deeb86820b7fbf7534a7b7d6b01) )
+ ROM_REGION( 1125043, "screen", 0)
+ ROM_LOAD( "tskelwarr.svg", 0, 1125043, CRC(ee086073) SHA1(70e06a7fe8a1a8b8fee483c08522996da9917501) )
ROM_END
@@ -7746,7 +7759,7 @@ INPUT_PORTS_END
void tbatfor_state::tbatfor(machine_config &config)
{
- tiger_sm510_1bit(config, 1493, 1080);
+ sm510_tiger(config, 1493, 1080);
}
// roms
@@ -7755,8 +7768,8 @@ ROM_START( tbatfor )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mk3", 0x0000, 0x1000, CRC(9993c382) SHA1(0c89e21024315ce7c086af5390c60f5766028c4f) )
- ROM_REGION( 902364, "screen", 0)
- ROM_LOAD( "tbatfor.svg", 0, 902364, CRC(56889c05) SHA1(dda393ca99196de38ad2e989ec6c292adc36ec5e) )
+ ROM_REGION( 902412, "screen", 0)
+ ROM_LOAD( "tbatfor.svg", 0, 902412, CRC(d92d799e) SHA1(fa8b4198099748570a9cc9772c81aa583ac7ea72) )
ROM_END
@@ -7829,7 +7842,7 @@ INPUT_PORTS_END
void tjdredd_state::tjdredd(machine_config &config)
{
- tiger_sm510_1bit(config, 1444, 1080);
+ sm510_tiger(config, 1444, 1080);
}
// roms
@@ -7838,8 +7851,8 @@ ROM_START( tjdredd )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mk5", 0x0000, 0x1000, CRC(7beee5a7) SHA1(9a190197c5751b43a9ab2dc8c536934dc5fc5e83) )
- ROM_REGION( 1051586, "screen", 0)
- ROM_LOAD( "tjdredd.svg", 0, 1051586, CRC(4fcdca0a) SHA1(d4b019fec94890ba6600baf2b2096dbcf3295180) )
+ ROM_REGION( 1051637, "screen", 0)
+ ROM_LOAD( "tjdredd.svg", 0, 1051637, CRC(0f3541c6) SHA1(9838e2ae5806a48be595f53e6096b7c150b91651) )
ROM_END
@@ -7912,7 +7925,7 @@ INPUT_PORTS_END
void tapollo13_state::tapollo13(machine_config &config)
{
- tiger_sm510_1bit(config, 1467, 1080);
+ sm510_tiger(config, 1467, 1080);
}
// roms
@@ -7921,8 +7934,8 @@ ROM_START( tapollo13 )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "10_07", 0x0000, 0x1000, CRC(63d0deaa) SHA1(d5de99d5e0ee08ec2ebeef7189ebac1c008d2e7d) )
- ROM_REGION( 643176, "screen", 0)
- ROM_LOAD( "tapollo13.svg", 0, 643176, CRC(e2dac162) SHA1(4089fa485579d2b87ac49b1cf33d6c2c085ea4c5) )
+ ROM_REGION( 643219, "screen", 0)
+ ROM_LOAD( "tapollo13.svg", 0, 643219, CRC(f4b94141) SHA1(d67367212f2be1685de0f3acaebaae0dc67734c4) )
ROM_END
@@ -7995,7 +8008,7 @@ INPUT_PORTS_END
void tgoldeye_state::tgoldeye(machine_config &config)
{
- tiger_sm510_1bit(config, 1461, 1080);
+ sm510_tiger(config, 1461, 1080);
}
// roms
@@ -8004,8 +8017,8 @@ ROM_START( tgoldeye )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "10_06", 0x0000, 0x1000, CRC(fe053efb) SHA1(3c90c0fa43e6e5e1f76b306e402f902d19175c96) )
- ROM_REGION( 938916, "screen", 0)
- ROM_LOAD( "tgoldeye.svg", 0, 938916, CRC(6dddf962) SHA1(1ced43b4225b86eca415f9af7db5fb5e80040186) )
+ ROM_REGION( 938956, "screen", 0)
+ ROM_LOAD( "tgoldeye.svg", 0, 938956, CRC(c4ad9836) SHA1(23555bd5fdaebed190ce02054a8ee681c88a8afb) )
ROM_END
@@ -8078,7 +8091,7 @@ INPUT_PORTS_END
void tkazaam_state::tkazaam(machine_config &config)
{
- tiger_sm510_1bit(config, 1452, 1080); // no external XTAL
+ sm510_tiger(config, 1452, 1080); // no external XTAL
}
// roms
@@ -8087,8 +8100,8 @@ ROM_START( tkazaam )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "10_18", 0x0000, 0x1000, CRC(aa796372) SHA1(fdaea736e1df46c19fca08ed981e9659e038d15a) )
- ROM_REGION( 929011, "screen", 0)
- ROM_LOAD( "tkazaam.svg", 0, 929011, CRC(b7fd49ba) SHA1(c769db87f1d4586ff7fc0bff7b146d1da05bdddc) )
+ ROM_REGION( 929109, "screen", 0)
+ ROM_LOAD( "tkazaam.svg", 0, 929109, CRC(5eb178d4) SHA1(bcf64df4f342d16d5fd3d4cb503fceb1e5485591) )
ROM_END
@@ -8156,7 +8169,7 @@ INPUT_PORTS_END
void tsjam_state::tsjam(machine_config &config)
{
- tiger_sm510_1bit(config, 1421, 1080); // no external XTAL
+ sm510_tiger(config, 1421, 1080); // no external XTAL
}
// roms
@@ -8165,8 +8178,8 @@ ROM_START( tsjam )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "10_23", 0x0000, 0x1000, CRC(6eaabfbd) SHA1(f0ecbd6f65fe72ce2d8a452685be2e77a63fc9f0) )
- ROM_REGION( 1046147, "screen", 0)
- ROM_LOAD( "tsjam.svg", 0, 1046147, CRC(6d24e1c9) SHA1(ddbfbd85f70ec964c68f982a8ee8070e3786a85e) )
+ ROM_REGION( 1046158, "screen", 0)
+ ROM_LOAD( "tsjam.svg", 0, 1046158, CRC(29187365) SHA1(f277a064e6ecd6219c930736a0bdf56196279b42) )
ROM_END
@@ -8234,7 +8247,7 @@ INPUT_PORTS_END
void tinday_state::tinday(machine_config &config)
{
- tiger_sm510_1bit(config, 1463, 1080);
+ sm510_tiger(config, 1463, 1080);
}
// roms
@@ -8243,8 +8256,8 @@ ROM_START( tinday )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "10_16", 0x0000, 0x1000, CRC(77c2c2f7) SHA1(06326b26d0f6757180724ba0bdeb4110cc7e29d6) )
- ROM_REGION( 1162672, "screen", 0)
- ROM_LOAD( "tinday.svg", 0, 1162672, CRC(9b9a8047) SHA1(2aeaa71a54cf897d2a5d91133c733613ca229aae) )
+ ROM_REGION( 1162716, "screen", 0)
+ ROM_LOAD( "tinday.svg", 0, 1162716, CRC(97056e62) SHA1(0348f0aca5d9b8e24f83c7e73b5e31f419fe60df) )
ROM_END
@@ -8312,7 +8325,7 @@ INPUT_PORTS_END
void tbatmana_state::tbatmana(machine_config &config)
{
- tiger_sm511_2bit(config, 1478, 1080);
+ sm511_tiger2bit(config, 1478, 1080);
}
// roms
@@ -8324,8 +8337,8 @@ ROM_START( tbatmana )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "n81.melody", 0x000, 0x100, CRC(56ba8fe5) SHA1(5c286ae1bfc943bbe8c8f4cdc9c8b73d9b3c186e) )
- ROM_REGION( 618831, "screen", 0)
- ROM_LOAD( "tbatmana.svg", 0, 618831, CRC(fc38cb9d) SHA1(1b6c10dcd33bfcfef43d61f97fa8e530011c1e61) )
+ ROM_REGION( 618872, "screen", 0)
+ ROM_LOAD( "tbatmana.svg", 0, 618872, CRC(8c721273) SHA1(d8c52441466943254bffcd6449af47a9fad6296b) )
ROM_END
@@ -8410,17 +8423,12 @@ INPUT_PORTS_END
void trshutvoy_state::trshutvoy(machine_config &config)
{
- konami_sm510(config, 1496, 1080); // R mask options confirmed
+ sm510_common(config, 1496, 1080); // R mask options confirmed
}
void trshutvoy_state::tigarden(machine_config &config)
{
- trshutvoy(config);
-
- /* video hardware */
- screen_device *screen = subdevice<screen_device>("screen");
- screen->set_size(1515, 1080);
- screen->set_visarea_full();
+ sm510_common(config, 1515, 1080);
}
// roms
@@ -8429,16 +8437,16 @@ ROM_START( trshutvoy )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "0019_238e", 0x0000, 0x1000, CRC(8bd0eadd) SHA1(7bb5eb30d569901dce52d777bc01c0979e4afa06) )
- ROM_REGION( 221654, "screen", 0)
- ROM_LOAD( "trshutvoy.svg", 0, 221654, CRC(470a7ff5) SHA1(b297601d8a5a9c4aef414605632849e0b1925caa) )
+ ROM_REGION( 221748, "screen", 0)
+ ROM_LOAD( "trshutvoy.svg", 0, 221748, CRC(9e630b4e) SHA1(7e2a3a82519f29f7b1b92930604e010b5b9fdb06) )
ROM_END
ROM_START( tigarden )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "0019_238e", 0x0000, 0x1000, CRC(8bd0eadd) SHA1(7bb5eb30d569901dce52d777bc01c0979e4afa06) )
- ROM_REGION( 409084, "screen", 0)
- ROM_LOAD( "tigarden.svg", 0, 409084, CRC(cfda5138) SHA1(1bc4ed65ae0cdca3e1e9458d68ca4d6e0fc0e901) )
+ ROM_REGION( 409134, "screen", 0)
+ ROM_LOAD( "tigarden.svg", 0, 409134, CRC(628f4aee) SHA1(5fa4843be61b52660a932e0d1efad403cf12de88) )
ROM_END
@@ -8485,7 +8493,7 @@ INPUT_PORTS_END
void trsrescue_state::trsrescue(machine_config &config)
{
- konami_sm510(config, 1533, 1080); // R mask options confirmed
+ sm510_common(config, 1533, 1080); // R mask options confirmed
}
// roms
@@ -8494,8 +8502,8 @@ ROM_START( trsrescue )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "0015_224b", 0x0000, 0x1000, CRC(f58a3832) SHA1(2d843b3520de66463e628cea9344a04015d1f5f1) )
- ROM_REGION( 178600, "screen", 0)
- ROM_LOAD( "trsrescue.svg", 0, 178600, CRC(2fa7b2d9) SHA1(5d1fc88db3129c9126f0c05ea55fb5f117e02871) )
+ ROM_REGION( 178760, "screen", 0)
+ ROM_LOAD( "trsrescue.svg", 0, 178760, CRC(40756fd3) SHA1(9762ebbe4753a3194d7f0844c91addb8e1f8930b) )
ROM_END
@@ -8574,7 +8582,7 @@ INPUT_PORTS_END
void nummunch_state::nummunch(machine_config &config)
{
- common_sm511(config, 1920, 875);
+ sm511_common(config, 1920, 875);
}
// roms
@@ -8586,8 +8594,8 @@ ROM_START( nummunch )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "772.melody", 0x000, 0x100, CRC(96fe463a) SHA1(dcef5eee15a3f6d21e0db1b8ae3fbddc81633fc8) )
- ROM_REGION( 140664, "screen", 0)
- ROM_LOAD( "nummunch.svg", 0, 140664, CRC(879df7e2) SHA1(78d8500a445cbbea0090d4e97b781c1e4ed11dd3) )
+ ROM_REGION( 140704, "screen", 0)
+ ROM_LOAD( "nummunch.svg", 0, 140704, CRC(050301d7) SHA1(3671d0e1b0cc788d74df0c6adb57a01729f66d7c) )
ROM_END
@@ -8608,6 +8616,7 @@ CONS( 1980, gnw_flagman, 0, 0, gnw_flagman, gnw_flagman, gnw_flagman_st
CONS( 1980, gnw_vermin, 0, 0, gnw_vermin, gnw_vermin, gnw_vermin_state, empty_init, "Nintendo", "Game & Watch: Vermin", MACHINE_SUPPORTS_SAVE )
CONS( 1980, gnw_fires, 0, 0, gnw_fires, gnw_fires, gnw_fires_state, empty_init, "Nintendo", "Game & Watch: Fire (silver)", MACHINE_SUPPORTS_SAVE )
CONS( 1980, gnw_judge, 0, 0, gnw_judge, gnw_judge, gnw_judge_state, empty_init, "Nintendo", "Game & Watch: Judge (green)", MACHINE_SUPPORTS_SAVE )
+CONS( 1981, gnw_manholeg,0, 0, gnw_manholeg,gnw_manholeg,gnw_manholeg_state,empty_init, "Nintendo", "Game & Watch: Manhole (gold)", MACHINE_SUPPORTS_SAVE )
CONS( 1981, gnw_helmet, 0, 0, gnw_helmet, gnw_helmet, gnw_helmet_state, empty_init, "Nintendo", "Game & Watch: Helmet (Rev. 2)", MACHINE_SUPPORTS_SAVE )
CONS( 1981, gnw_lion, 0, 0, gnw_lion, gnw_lion, gnw_lion_state, empty_init, "Nintendo", "Game & Watch: Lion", MACHINE_SUPPORTS_SAVE )
@@ -8648,7 +8657,8 @@ CONS( 1982, gnw_dkjr, 0, 0, gnw_dkjr, gnw_dkjr, gnw_dkjr_state
CONS( 1983, gnw_mariocm, 0, 0, gnw_mariocm, gnw_mariocm, gnw_mariocm_state, empty_init, "Nintendo", "Game & Watch: Mario's Cement Factory (new wide screen)", MACHINE_SUPPORTS_SAVE )
CONS( 1983, gnw_manhole, 0, 0, gnw_manhole, gnw_manhole, gnw_manhole_state, empty_init, "Nintendo", "Game & Watch: Manhole (new wide screen)", MACHINE_SUPPORTS_SAVE )
CONS( 1985, gnw_tfish, 0, 0, gnw_tfish, gnw_tfish, gnw_tfish_state, empty_init, "Nintendo", "Game & Watch: Tropical Fish", MACHINE_SUPPORTS_SAVE )
-CONS( 1988, gnw_smb, 0, 0, gnw_smb, gnw_smb, gnw_smb_state, empty_init, "Nintendo", "Game & Watch: Super Mario Bros. (new wide screen)", MACHINE_SUPPORTS_SAVE )
+CONS( 1986, gnw_smb, 0, 0, gnw_smb, gnw_smb, gnw_smb_state, empty_init, "Nintendo", "Game & Watch: Super Mario Bros. (crystal screen)", MACHINE_SUPPORTS_SAVE )
+CONS( 1988, gnw_smbn, gnw_smb, 0, gnw_smbn, gnw_smb, gnw_smb_state, empty_init, "Nintendo", "Game & Watch: Super Mario Bros. (new wide screen)", MACHINE_SUPPORTS_SAVE )
CONS( 1986, gnw_climber, 0, 0, gnw_climber, gnw_climber, gnw_climber_state, empty_init, "Nintendo", "Game & Watch: Climber (crystal screen)", MACHINE_SUPPORTS_SAVE )
CONS( 1988, gnw_climbern,gnw_climber,0, gnw_climbern,gnw_climber, gnw_climber_state, empty_init, "Nintendo", "Game & Watch: Climber (new wide screen)", MACHINE_SUPPORTS_SAVE )
CONS( 1986, gnw_bfight, 0, 0, gnw_bfight, gnw_bfight, gnw_bfight_state, empty_init, "Nintendo", "Game & Watch: Balloon Fight (crystal screen)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/hideseek.cpp b/src/mame/drivers/hideseek.cpp
index 8703174c3c3..f1e124e5f7f 100644
--- a/src/mame/drivers/hideseek.cpp
+++ b/src/mame/drivers/hideseek.cpp
@@ -78,7 +78,7 @@ void hideseek_state::mem_map(address_map &map)
map(0x01000000, 0x01ffffff).ram(); // DRAM
map(0xffff8000, 0xffff87ff).ram(); // HD64F7045F28 i/os
map(0xfffff000, 0xffffffff).ram(); // on-chip RAM
-// AM_RANGE(0x06000000, 0x07ffffff) AM_ROM AM_REGION("blit_data", 0)
+// map(0x06000000, 0x07ffffff).rom().region("blit_data", 0);
}
diff --git a/src/mame/drivers/highvdeo.cpp b/src/mame/drivers/highvdeo.cpp
index ccce0c6d0c9..8f3ad22c597 100644
--- a/src/mame/drivers/highvdeo.cpp
+++ b/src/mame/drivers/highvdeo.cpp
@@ -423,7 +423,7 @@ void highvdeo_state::nyjoker_io(address_map &map)
map(0x0000, 0x0001).w(FUNC(highvdeo_state::write1_w)); // lamps
map(0x0002, 0x0003).nopw(); // alternate coin counter (bits 0 and 2)
map(0x0004, 0x0005).w(FUNC(highvdeo_state::nyj_write2_w)); // coin and note counter
-// AM_RANGE(0x0006, 0x0007) AM_WRITENOP
+// map(0x0006, 0x0007).nopw();
map(0x0008, 0x0008).w(m_okim6376, FUNC(okim6376_device::write));
map(0x000a, 0x000b).w(FUNC(highvdeo_state::tv_ncf_oki6376_st_w));
map(0x000c, 0x000d).portr("IN0");
@@ -702,7 +702,7 @@ void highvdeo_state::brasil_io(address_map &map)
map(0x0008, 0x0009).r(FUNC(highvdeo_state::read0_r));
map(0x000a, 0x000b).r(FUNC(highvdeo_state::read1_r));
map(0x000e, 0x000e).rw(FUNC(highvdeo_state::read2_nmi_clear_r), FUNC(highvdeo_state::nmi_clear_w));
-// AM_RANGE(0xffa2, 0xffa3) AM_WRITE
+// map(0xffa2, 0xffa3).w(FUNC(highvdeo_state::));
}
WRITE16_MEMBER(highvdeo_state::fashion_output_w)
@@ -734,7 +734,7 @@ void highvdeo_state::grancapi_io(address_map &map)
map(0x0008, 0x0009).r(FUNC(highvdeo_state::read0_r));
map(0x000a, 0x000b).r(FUNC(highvdeo_state::read1_r));
map(0x000e, 0x000e).rw(FUNC(highvdeo_state::read2_nmi_clear_r), FUNC(highvdeo_state::nmi_clear_w));
-// AM_RANGE(0xffa2, 0xffa3) AM_WRITE
+// map(0xffa2, 0xffa3).w(FUNC(highvdeo_state::));
}
void highvdeo_state::magicbom_io(address_map &map)
@@ -748,7 +748,7 @@ void highvdeo_state::magicbom_io(address_map &map)
map(0x0008, 0x0009).r(FUNC(highvdeo_state::read0_r));
map(0x000a, 0x000b).r(FUNC(highvdeo_state::read1_r));
map(0x000e, 0x000e).rw(FUNC(highvdeo_state::read2_nmi_clear_r), FUNC(highvdeo_state::nmi_clear_w));
-// AM_RANGE(0xffa2, 0xffa3) AM_WRITE
+// map(0xffa2, 0xffa3).w(FUNC(highvdeo_state::));
}
diff --git a/src/mame/drivers/hitme.cpp b/src/mame/drivers/hitme.cpp
index 85f00383a99..47d12658f37 100644
--- a/src/mame/drivers/hitme.cpp
+++ b/src/mame/drivers/hitme.cpp
@@ -638,7 +638,7 @@ ROM_START( hitme1 )
ROM_LOAD( "hmcg.h7", 0x0000, 0x0200, CRC(818f5fbe) SHA1(e2b3349e51ba57d14f3388ba93891bc6274b7a14) )
ROM_END
-ROM_START( m21 )
+ROM_START( mirco21 )
ROM_REGION( 0x2000, "maincpu", ROMREGION_INVERT )
ROM_LOAD( "mirco1.bin", 0x0000, 0x0200, CRC(aa796ad7) SHA1(2908bdb4ab17a2f5bc4da2f957906bf2b57afa50) )
ROM_LOAD( "hm2.c7", 0x0200, 0x0200, CRC(25d47ba4) SHA1(6f3bb4ca6918dc07f37d0c0c7fe5ec53aa7171a5) )
@@ -693,7 +693,7 @@ ROM_END
GAME( 1976, hitme, 0, hitme, hitme, hitme_state, empty_init, ROT0, "Ramtek", "Hit Me (set 1)", MACHINE_SUPPORTS_SAVE ) // 05/1976
GAME( 1976, hitme1, hitme, hitme, hitme, hitme_state, empty_init, ROT0, "Ramtek", "Hit Me (set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1976, m21, hitme, hitme, hitme, hitme_state, empty_init, ROT0, "Mirco Games", "21 (Mirco)", MACHINE_SUPPORTS_SAVE ) // 08/1976, licensed?
+GAME( 1976, mirco21, hitme, hitme, hitme, hitme_state, empty_init, ROT0, "Mirco Games", "21 (Mirco)", MACHINE_SUPPORTS_SAVE ) // 08/1976, licensed?
GAME( 1978, super21, 0, hitme, super21, hitme_state, empty_init, ROT0, "Mirco Games", "Super Twenty One", MACHINE_SUPPORTS_SAVE )
GAMEL(1976, barricad, 0, barricad, barricad, hitme_state, empty_init, ROT0, "Ramtek", "Barricade", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_barricad )
GAMEL(1976, brickyrd, barricad, barricad, barricad, hitme_state, empty_init, ROT0, "Ramtek", "Brickyard", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_barricad )
diff --git a/src/mame/drivers/hitpoker.cpp b/src/mame/drivers/hitpoker.cpp
index 44c1f424543..eea905dede3 100644
--- a/src/mame/drivers/hitpoker.cpp
+++ b/src/mame/drivers/hitpoker.cpp
@@ -236,7 +236,7 @@ void hitpoker_state::hitpoker_map(address_map &map)
map(0xbe81, 0xbe81).w("crtc", FUNC(mc6845_device::register_w));
map(0xbe90, 0xbe91).rw("aysnd", FUNC(ay8910_device::data_r), FUNC(ay8910_device::address_data_w));
map(0xbea0, 0xbea0).portr("VBLANK"); //probably other bits as well
-// AM_RANGE(0xbe00, 0xbeff) AM_READ(test_r)
+// map(0xbe00, 0xbeff).r(FUNC(hitpoker_state::test_r));
map(0xc000, 0xdfff).rw(FUNC(hitpoker_state::hitpoker_cram_r), FUNC(hitpoker_state::hitpoker_cram_w));
map(0xe000, 0xefff).rw(FUNC(hitpoker_state::hitpoker_paletteram_r), FUNC(hitpoker_state::hitpoker_paletteram_w));
}
diff --git a/src/mame/drivers/hk68v10.cpp b/src/mame/drivers/hk68v10.cpp
index 2f5598f22ae..adcdc349a41 100644
--- a/src/mame/drivers/hk68v10.cpp
+++ b/src/mame/drivers/hk68v10.cpp
@@ -235,8 +235,8 @@ void hk68v10_state::hk68v10_mem(address_map &map)
map(0xfea002, 0xfea002).rw(m_sccterm, FUNC(scc8530_device::cb_r), FUNC(scc8530_device::cb_w)); /* Dual serial port Z80-SCC */
map(0xfea004, 0xfea004).rw(m_sccterm, FUNC(scc8530_device::da_r), FUNC(scc8530_device::da_w)); /* Dual serial port Z80-SCC */
map(0xfea006, 0xfea006).rw(m_sccterm, FUNC(scc8530_device::db_r), FUNC(scc8530_device::db_w)); /* Dual serial port Z80-SCC */
- //AM_RANGE(0x100000, 0xfeffff) AM_READWRITE(vme_a24_r, vme_a24_w) /* VMEbus Rev B addresses (24 bits) - not verified */
- //AM_RANGE(0xff0000, 0xffffff) AM_READWRITE(vme_a16_r, vme_a16_w) /* VMEbus Rev B addresses (16 bits) - not verified */
+ //map(0x100000, 0xfeffff).rw(FUNC(hk68v10_state::vme_a24_r), FUNC(hk68v10_state::vme_a24_w)); /* VMEbus Rev B addresses (24 bits) - not verified */
+ //map(0xff0000, 0xffffff).rw(FUNC(hk68v10_state::vme_a16_r), FUNC(hk68v10_state::vme_a16_w)); /* VMEbus Rev B addresses (16 bits) - not verified */
}
/* Input ports */
diff --git a/src/mame/drivers/hotstuff.cpp b/src/mame/drivers/hotstuff.cpp
index f7b13588a06..407e4ab0d6d 100644
--- a/src/mame/drivers/hotstuff.cpp
+++ b/src/mame/drivers/hotstuff.cpp
@@ -81,7 +81,7 @@ uint32_t hotstuff_state::screen_update_hotstuff(screen_device &screen, bitmap_rg
void hotstuff_state::hotstuff_map(address_map &map)
{
map(0x000000, 0x07ffff).rom();
- map(0x080000, 0x0fffff).noprw(); //ROM AM_REGION("data", 0)
+ map(0x080000, 0x0fffff).noprw(); //.rom().region("data", 0);
map(0x400000, 0x40ffff).ram();
diff --git a/src/mame/drivers/hp9k.cpp b/src/mame/drivers/hp9k.cpp
index c10eed0913b..4a38eb77ca8 100644
--- a/src/mame/drivers/hp9k.cpp
+++ b/src/mame/drivers/hp9k.cpp
@@ -319,7 +319,7 @@ void hp9k_state::hp9k_mem(address_map &map)
map(0x530000, 0x53ffff).ram(); // graphic memory
map(0x540000, 0x5effff).rw(FUNC(hp9k_state::buserror_r), FUNC(hp9k_state::buserror_w));
map(0x5f0000, 0x5f3fff).rw(FUNC(hp9k_state::hp9k_prom_r), FUNC(hp9k_state::hp9k_prom_w));
- //AM_RANGE(0x5f0000, 0x5f3fff) AM_READWRITE(buserror_r,buserror_w)
+ //map(0x5f0000, 0x5f3fff).rw(FUNC(hp9k_state::buserror_r), FUNC(hp9k_state::buserror_w));
map(0x5f4000, 0xfbffff).rw(FUNC(hp9k_state::buserror_r), FUNC(hp9k_state::buserror_w));
map(0xFC0000, 0xffffff).ram(); // system ram
}
diff --git a/src/mame/drivers/ht68k.cpp b/src/mame/drivers/ht68k.cpp
index 116c217215a..d54d0674926 100644
--- a/src/mame/drivers/ht68k.cpp
+++ b/src/mame/drivers/ht68k.cpp
@@ -77,8 +77,8 @@ void ht68k_state::ht68k_mem(address_map &map)
{
map.unmap_value_high();
map(0x00000000, 0x0007ffff).ram().share("p_ram"); // 512 KB RAM / ROM at boot
- //AM_RANGE(0x00080000, 0x000fffff) // Expansion
- //AM_RANGE(0x00d80000, 0x00d8ffff) // Printer
+ //map(0x00080000, 0x000fffff) // Expansion
+ //map(0x00d80000, 0x00d8ffff) // Printer
map(0x00e00000, 0x00e00007).mirror(0xfff8).rw(m_fdc, FUNC(wd1770_device::read), FUNC(wd1770_device::write)).umask16(0x00ff); // FDC WD1770
map(0x00e80000, 0x00e800ff).mirror(0xff00).rw(m_duart, FUNC(mc68681_device::read), FUNC(mc68681_device::write)).umask16(0x00ff);
map(0x00f00000, 0x00f07fff).rom().mirror(0xf8000).region("user1", 0);
diff --git a/src/mame/drivers/huebler.cpp b/src/mame/drivers/huebler.cpp
index 4fb261d8fcd..f15cf98e907 100644
--- a/src/mame/drivers/huebler.cpp
+++ b/src/mame/drivers/huebler.cpp
@@ -112,9 +112,9 @@ void amu880_state::amu880_io(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
-// AM_RANGE(0x00, 0x00) AM_MIRROR(0x03) AM_WRITE(power_off_w)
-// AM_RANGE(0x04, 0x04) AM_MIRROR(0x02) AM_WRITE(tone_off_w)
-// AM_RANGE(0x05, 0x05) AM_MIRROR(0x02) AM_WRITE(tone_on_w)
+// map(0x00, 0x00).mirror(0x03).w(FUNC(amu880_state::power_off_w));
+// map(0x04, 0x04).mirror(0x02).w(FUNC(amu880_state::tone_off_w));
+// map(0x05, 0x05).mirror(0x02).w(FUNC(amu880_state::tone_on_w));
map(0x08, 0x09).mirror(0x02).r(FUNC(amu880_state::keyboard_r));
map(0x0c, 0x0f).rw(Z80PIO2_TAG, FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt));
map(0x10, 0x13).rw(Z80PIO1_TAG, FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt));
diff --git a/src/mame/drivers/hvyunit.cpp b/src/mame/drivers/hvyunit.cpp
index c1cc2515239..28990353c76 100644
--- a/src/mame/drivers/hvyunit.cpp
+++ b/src/mame/drivers/hvyunit.cpp
@@ -435,8 +435,8 @@ void hvyunit_state::slave_io(address_map &map)
map(0x0c, 0x0c).r(FUNC(hvyunit_state::mermaid_status_r));
map(0x0e, 0x0e).w(FUNC(hvyunit_state::coin_count_w));
-// AM_RANGE(0x22, 0x22) AM_READ(hu_scrolly_hi_reset) //22/a2 taken from ram $f065
-// AM_RANGE(0xa2, 0xa2) AM_READ(hu_scrolly_hi_set)
+// map(0x22, 0x22).r(FUNC(hvyunit_state::hu_scrolly_hi_reset)); //22/a2 taken from ram $f065
+// map(0xa2, 0xa2).r(FUNC(hvyunit_state::hu_scrolly_hi_set));
}
diff --git a/src/mame/drivers/hyhoo.cpp b/src/mame/drivers/hyhoo.cpp
index bff847318eb..83ffa054148 100644
--- a/src/mame/drivers/hyhoo.cpp
+++ b/src/mame/drivers/hyhoo.cpp
@@ -43,7 +43,7 @@ void hyhoo_state::hyhoo_map(address_map &map)
void hyhoo_state::hyhoo_io_map(address_map &map)
{
map.global_mask(0xff);
-// AM_RANGE(0x00, 0x00) AM_DEVWRITE("nb1413m3", nb1413m3_device, nmi_clock_w)
+// map(0x00, 0x00).w(m_nb1413m3, FUNC(nb1413m3_device::nmi_clock_w));
map(0x00, 0x7f).r(m_nb1413m3, FUNC(nb1413m3_device::sndrom_r));
map(0x81, 0x81).r("aysnd", FUNC(ay8910_device::data_r));
map(0x82, 0x83).w("aysnd", FUNC(ay8910_device::data_address_w));
@@ -56,7 +56,7 @@ void hyhoo_state::hyhoo_io_map(address_map &map)
map(0xe0, 0xe0).w(FUNC(hyhoo_state::hyhoo_romsel_w));
map(0xe0, 0xe1).r(m_nb1413m3, FUNC(nb1413m3_device::gfxrom_r));
map(0xf0, 0xf0).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r));
-// AM_RANGE(0xf0, 0xf0) AM_WRITENOP
+// map(0xf0, 0xf0).nopw();
map(0xf1, 0xf1).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw2_r));
}
diff --git a/src/mame/drivers/i7000.cpp b/src/mame/drivers/i7000.cpp
index 4d1b8d0ed8a..92b83714880 100644
--- a/src/mame/drivers/i7000.cpp
+++ b/src/mame/drivers/i7000.cpp
@@ -255,37 +255,37 @@ void i7000_state::i7000_mem(address_map &map)
map(0x0000, 0x0fff).rom().region("boot", 0);
map(0x2000, 0x2fff).ram().share("videoram");
map(0x4000, 0xffff).ram();
-// AM_RANGE(0x4000, 0xbfff) AM_ROM AM_REGION("cardslot", 0)
+// map(0x4000, 0xbfff).rom().region("cardslot", 0);
}
void i7000_state::i7000_io(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
-// AM_RANGE(0x06, 0x06) AM_WRITE(i7000_io_?_w)
-// AM_RANGE(0x08, 0x09) AM_WRITE(i7000_io_?_w) //printer perhaps?
-// AM_RANGE(0x0c, 0x0c) AM_WRITE(i7000_io_?_w) //0x0C and 0x10 may be related to mem page swapping. (self-test "4. PAG")
-// AM_RANGE(0x10, 0x10) AM_WRITE(i7000_io_?_w)
-// AM_RANGE(0x14, 0x15) AM_WRITE(i7000_io_?_w)
+// map(0x06, 0x06).w(FUNC(i7000_state::i7000_io_?_w));
+// map(0x08, 0x09).w(FUNC(i7000_state::i7000_io_?_w)); //printer perhaps?
+// map(0x0c, 0x0c).w(FUNC(i7000_state::i7000_io_?_w)); //0x0C and 0x10 may be related to mem page swapping. (self-test "4. PAG")
+// map(0x10, 0x10).w(FUNC(i7000_state::i7000_io_?_w));
+// map(0x14, 0x15).w(FUNC(i7000_state::i7000_io_?_w));
map(0x18, 0x1b).rw("pit8253", FUNC(pit8253_device::read), FUNC(pit8253_device::write));
-// AM_RANGE(0x1c, 0x1c) AM_WRITE(i7000_io_printer_data_w) //ASCII data
+// map(0x1c, 0x1c).w(FUNC(i7000_state::i7000_io_printer_data_w)); //ASCII data
map(0x1d, 0x1d).portr("DSW");
-// AM_RANGE(0x1e, 0x1e) AM_READWRITE(i7000_io_printer_status_r, i7000_io_?_w)
-// AM_RANGE(0x1f, 0x1f) AM_WRITE(i7000_io_printer_strobe_w) //self-test routine writes 0x08 and 0x09 (it seems that bit 0 is the strobe and bit 3 is an enable signal)
-// AM_RANGE(0x20, 0x21) AM_READWRITE(i7000_io_keyboard_r, i7000_io_keyboard_w)
+// map(0x1e, 0x1e).rw(FUNC(i7000_state::i7000_io_printer_status_r), FUNC(i7000_state::i7000_io_?_w));
+// map(0x1f, 0x1f).w(FUNC(i7000_state::i7000_io_printer_strobe_w)); //self-test routine writes 0x08 and 0x09 (it seems that bit 0 is the strobe and bit 3 is an enable signal)
+// map(0x20, 0x21).rw(FUNC(i7000_state::i7000_io_keyboard_r), FUNC(i7000_state::i7000_io_keyboard_w));
map(0x20, 0x21).rw("i8279", FUNC(i8279_device::read), FUNC(i8279_device::write));
-// AM_RANGE(0x24, 0x24) AM_READ(i7000_io_?_r)
-// AM_RANGE(0x25, 0x25) AM_WRITE(i7000_io_?_w)
+// map(0x24, 0x24).r(FUNC(i7000_state::i7000_io_?_r));
+// map(0x25, 0x25).w(FUNC(i7000_state::i7000_io_?_w));
-// AM_RANGE(0x28, 0x2d) AM_READWRITE(i7000_io_joystick_r, i7000_io_joystick_w)
+// map(0x28, 0x2d).rw(FUNC(i7000_state::i7000_io_joystick_r), FUNC(i7000_state::i7000_io_joystick_w));
-// AM_RANGE(0x3b, 0x3b) AM_WRITE(i7000_io_?_w)
-// AM_RANGE(0x66, 0x67) AM_WRITE(i7000_io_?_w)
-// AM_RANGE(0xbb, 0xbb) AM_WRITE(i7000_io_?_w) //may be related to page-swapping...
+// map(0x3b, 0x3b).w(FUNC(i7000_state::i7000_io_?_w));
+// map(0x66, 0x67).w(FUNC(i7000_state::i7000_io_?_w));
+// map(0xbb, 0xbb).w(FUNC(i7000_state::i7000_io_?_w)); //may be related to page-swapping...
}
DEVICE_IMAGE_LOAD_MEMBER(i7000_state::card_load)
diff --git a/src/mame/drivers/ibm3153.cpp b/src/mame/drivers/ibm3153.cpp
index fb0406395d3..d3d953e51fa 100644
--- a/src/mame/drivers/ibm3153.cpp
+++ b/src/mame/drivers/ibm3153.cpp
@@ -78,8 +78,8 @@ void ibm3153_state::mem_map(address_map &map)
void ibm3153_state::io_map(address_map &map)
{
map(0x0000, 0xffff).ram();
- //ADDRESS_MAP_UNMAP_HIGH
- //ADDRESS_MAP_GLOBAL_MASK(0xff)
+ //map.unmap_value_high();
+ //map.global_mask(0xff);
}
diff --git a/src/mame/drivers/icatel.cpp b/src/mame/drivers/icatel.cpp
index c379af15e76..571c32c3fbc 100644
--- a/src/mame/drivers/icatel.cpp
+++ b/src/mame/drivers/icatel.cpp
@@ -99,7 +99,7 @@ void icatel_state::i80c31_io(address_map &map)
void icatel_state::i80c31_data(address_map &map)
{
-// AM_RANGE(0x0056,0x005A) AM_READ(magic_string) /* This is a hack! */
+// map(0x0056,0x005A).r(FUNC(icatel_state::magic_string)); /* This is a hack! */
}
void icatel_state::init_icatel()
diff --git a/src/mame/drivers/ie15.cpp b/src/mame/drivers/ie15.cpp
index 4a399674dcd..a27342ed449 100644
--- a/src/mame/drivers/ie15.cpp
+++ b/src/mame/drivers/ie15.cpp
@@ -15,26 +15,40 @@
#include "emu.h"
#include "machine/ie15_kbd.h"
#include "machine/ie15.h"
+#include "bus/rs232/rs232.h"
class ie15_state : public driver_device
{
public:
ie15_state(const machine_config &mconfig, device_type type, const char *tag) :
- driver_device(mconfig, type, tag),
- m_ie15(*this, "ie15")
+ driver_device(mconfig, type, tag)
+ , m_ie15(*this, "ie15")
+ , m_rs232(*this, "rs232")
{ }
void ie15(machine_config &config);
private:
required_device<ie15_device> m_ie15;
+ required_device<rs232_port_device> m_rs232;
};
void ie15_state::ie15(machine_config &config)
{
IE15(config, m_ie15, 0);
+
+ rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, nullptr));
+ //rs232.dcd_handler().set("ie15", FUNC(ie15_device::rs232_conn_dcd_w));
+ //rs232.dsr_handler().set("ie15", FUNC(ie15_device::rs232_conn_dsr_w));
+ //rs232.ri_handler().set("ie15", FUNC(ie15_device::rs232_conn_ri_w));
+ //rs232.cts_handler().set("ie15", FUNC(ie15_device::rs232_conn_cts_w));
+ rs232.rxd_handler().set("ie15", FUNC(ie15_device::rs232_conn_rxd_w));
+
+ m_ie15->rs232_conn_txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ m_ie15->rs232_conn_dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
+ m_ie15->rs232_conn_rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
}
diff --git a/src/mame/drivers/if800.cpp b/src/mame/drivers/if800.cpp
index 48545ba6916..d12dfeabee7 100644
--- a/src/mame/drivers/if800.cpp
+++ b/src/mame/drivers/if800.cpp
@@ -68,7 +68,7 @@ void if800_state::if800_map(address_map &map)
void if800_state::if800_io(address_map &map)
{
map.unmap_value_high();
-// AM_RANGE(0x0640, 0x065f) dma?
+// map(0x0640, 0x065f) dma?
map(0x0660, 0x0663).rw(m_hgdc, FUNC(upd7220_device::read), FUNC(upd7220_device::write)).umask16(0x00ff);
}
diff --git a/src/mame/drivers/igs017.cpp b/src/mame/drivers/igs017.cpp
index b48b7d4fa4b..0cd875582a4 100644
--- a/src/mame/drivers/igs017.cpp
+++ b/src/mame/drivers/igs017.cpp
@@ -2292,7 +2292,7 @@ void igs017_state::lhzb2a_map(address_map &map)
map(0x00320a, 0x00320b).r(m_igs_incdec, FUNC(igs_incdec_device::val_r));
map(0x500000, 0x503fff).ram();
-// AM_RANGE(0x910000, 0x910003) accesses appear to be from leftover code where the final checks were disabled
+// map(0x910000, 0x910003) accesses appear to be from leftover code where the final checks were disabled
map(0xb00000, 0xb0ffff).rw(m_igs017_igs031, FUNC(igs017_igs031_device::read), FUNC(igs017_igs031_device::write)).umask16(0x00ff);
diff --git a/src/mame/drivers/imolagp.cpp b/src/mame/drivers/imolagp.cpp
index 238eef986a7..6be206e3c60 100644
--- a/src/mame/drivers/imolagp.cpp
+++ b/src/mame/drivers/imolagp.cpp
@@ -352,7 +352,7 @@ void imolagp_state::imolagp_master_map(address_map &map)
map(0x2800, 0x2803).rw("ppi8255", FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0x3000, 0x3000).w(FUNC(imolagp_state::vreg_control_w));
map(0x37f0, 0x37f0).w("aysnd", FUNC(ay8910_device::address_w));
-// AM_RANGE(0x37f7, 0x37f7) AM_NOP
+// map(0x37f7, 0x37f7).noprw();
map(0x3800, 0x3800).rw(FUNC(imolagp_state::vreg_data_r), FUNC(imolagp_state::vreg_data_w));
map(0x3810, 0x3810).w("aysnd", FUNC(ay8910_device::data_w));
map(0x4000, 0x4000).portr("DSWA");
diff --git a/src/mame/drivers/instantm.cpp b/src/mame/drivers/instantm.cpp
index c2ebed3ca81..6cb6101263d 100644
--- a/src/mame/drivers/instantm.cpp
+++ b/src/mame/drivers/instantm.cpp
@@ -86,15 +86,15 @@ void instantm_state::main_map(address_map &map)
{
map(0x0000, 0x1fff).rom();
map(0x4000, 0x47ff).ram();
- map(0x8000, 0x8000); //AM_WRITE
- map(0xc000, 0xc000); //AM_WRITE
- map(0xc400, 0xc400); //AM_WRITE
- map(0xc800, 0xc800); //AM_WRITE
- map(0xcc00, 0xcc00); //AM_WRITE
- map(0xec00, 0xec00); //AM_READ
- map(0xf000, 0xf000); //AM_READ
- map(0xf400, 0xf400); //AM_READ
- map(0xfc00, 0xfc00); //AM_READ
+ map(0x8000, 0x8000); //.w(FUNC(instantm_state::));
+ map(0xc000, 0xc000); //.w(FUNC(instantm_state::));
+ map(0xc400, 0xc400); //.w(FUNC(instantm_state::));
+ map(0xc800, 0xc800); //.w(FUNC(instantm_state::));
+ map(0xcc00, 0xcc00); //.w(FUNC(instantm_state::));
+ map(0xec00, 0xec00); //.r(FUNC(instantm_state::));
+ map(0xf000, 0xf000); //.r(FUNC(instantm_state::));
+ map(0xf400, 0xf400); //.r(FUNC(instantm_state::));
+ map(0xfc00, 0xfc00); //.r(FUNC(instantm_state::));
}
// doesn't use ram
diff --git a/src/mame/drivers/interact.cpp b/src/mame/drivers/interact.cpp
index 7254e6b8e81..7fd448941c5 100644
--- a/src/mame/drivers/interact.cpp
+++ b/src/mame/drivers/interact.cpp
@@ -89,10 +89,10 @@ void interact_state::interact_mem(address_map &map)
map.unmap_value_high();
/* Main ROM page*/
map(0x0000, 0x3fff).rom(); /*BANK(2)*/
- /* AM_RANGE(0x1000,0x3fff) AM_RAM*/
+// map(0x1000,0x3fff).ram();
/* Hardware address mapping*/
-/* AM_RANGE(0x0800,0x0808) AM_WRITE(switch_bank_w)// Bank management not udsed in BR machine*/
+// map(0x0800,0x0808).w(FUNC(interact_state::switch_bank_w)); // Bank management not udsed in BR machine*/
map(0x1000, 0x1000).w(FUNC(interact_state::color_a_w)); /* Color c0/c1*/
map(0x1800, 0x1800).w(FUNC(interact_state::color_b_w)); /* Color c2/c3*/
map(0x2000, 0x2003).w(FUNC(interact_state::sn_2000_w)); /* Sound*/
diff --git a/src/mame/drivers/intrscti.cpp b/src/mame/drivers/intrscti.cpp
index d72516c95fb..4d2c2e89b10 100644
--- a/src/mame/drivers/intrscti.cpp
+++ b/src/mame/drivers/intrscti.cpp
@@ -109,13 +109,13 @@ void intrscti_state::intrscti_sub_map(address_map &map)
{
map(0x0000, 0x07ff).rom();
map(0x2000, 0x23ff).ram();
-// AM_RANGE(0x0000, 0xffff) AM_WRITENOP
+// map(0x0000, 0xffff).nopw();
}
void intrscti_state::intrscti_sub_io_map(address_map &map)
{
map.global_mask(0xff);
-// AM_RANGE(0x00, 0xff) AM_NOP
+// map(0x00, 0xff).noprw();
}
diff --git a/src/mame/drivers/intv.cpp b/src/mame/drivers/intv.cpp
index 90a3ac14a61..a1c8e62edac 100644
--- a/src/mame/drivers/intv.cpp
+++ b/src/mame/drivers/intv.cpp
@@ -361,7 +361,7 @@ void intv_state::intvecs_mem(address_map &map)
{
map(0x0000, 0x003f).rw(FUNC(intv_state::intv_stic_r), FUNC(intv_state::intv_stic_w));
map(0x0080, 0x0081).rw("speech", FUNC(sp0256_device::spb640_r), FUNC(sp0256_device::spb640_w)); /* Intellivoice */
- // AM_RANGE(0x00E0, 0x00E3) AM_READWRITE( intv_ecs_uart_r, intv_ecs_uart_w )
+ // map(0x00e0, 0x00e3).rw(FUNC(intv_state::intv_ecs_uart_r), FUNC(intv_state::intv_ecs_uart_w));
map(0x00f0, 0x00ff).rw("ecs", FUNC(intv_ecs_device::read_ay), FUNC(intv_ecs_device::write_ay)); /* ecs psg */
map(0x0100, 0x01ef).rw(FUNC(intv_state::intv_ram8_r), FUNC(intv_state::intv_ram8_w));
map(0x01f0, 0x01ff).rw(m_sound, FUNC(ay8914_device::read), FUNC(ay8914_device::write)).umask16(0x00ff);
diff --git a/src/mame/drivers/inufuku.cpp b/src/mame/drivers/inufuku.cpp
index 8215a410db1..afa9dbebeb7 100644
--- a/src/mame/drivers/inufuku.cpp
+++ b/src/mame/drivers/inufuku.cpp
@@ -115,7 +115,7 @@ void inufuku_state::inufuku_map(address_map &map)
{
map(0x000000, 0x0fffff).rom(); // main rom
-// AM_RANGE(0x100000, 0x100007) AM_WRITENOP // ?
+// map(0x100000, 0x100007).nopw(); // ?
map(0x180000, 0x180001).portr("P1");
map(0x180002, 0x180003).portr("P2");
@@ -137,7 +137,7 @@ void inufuku_state::inufuku_map(address_map &map)
map(0x780000, 0x780013).w(FUNC(inufuku_state::inufuku_palettereg_w)); // bg & text palettebank register
map(0x7a0000, 0x7a0023).w(FUNC(inufuku_state::inufuku_scrollreg_w)); // bg & text scroll register
-// AM_RANGE(0x7e0000, 0x7e0001) AM_WRITENOP // ?
+// map(0x7e0000, 0x7e0001).nopw(); // ?
map(0x800000, 0xbfffff).rom(); // data rom
map(0xfd0000, 0xfdffff).ram(); // work ram
diff --git a/src/mame/drivers/isbc.cpp b/src/mame/drivers/isbc.cpp
index 05deca4a0b2..390f2f55ca7 100644
--- a/src/mame/drivers/isbc.cpp
+++ b/src/mame/drivers/isbc.cpp
@@ -206,7 +206,7 @@ void isbc_state::isbc2861_mem(address_map &map)
map.unmap_value_high();
map(0x00000, 0xdffff).ram();
map(0xe0000, 0xfffff).rw(FUNC(isbc_state::bioslo_r), FUNC(isbc_state::bioslo_w)).share("biosram");
-// AM_RANGE(0x100000, 0x1fffff) AM_RAM // FIXME: XENIX doesn't like this, IRMX is okay with it
+// map(0x100000, 0x1fffff).ram(); // FIXME: XENIX doesn't like this, IRMX is okay with it
map(0xff0000, 0xffffff).rom().region("user1", 0);
}
diff --git a/src/mame/drivers/isbc8010.cpp b/src/mame/drivers/isbc8010.cpp
index d13e49b7fa4..ccb276ddde9 100644
--- a/src/mame/drivers/isbc8010.cpp
+++ b/src/mame/drivers/isbc8010.cpp
@@ -107,8 +107,8 @@ void isbc8010_state::isbc8010_io(address_map &map)
map(0xe4, 0xe7).rw(m_ppi_0, FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0xe8, 0xeb).rw(m_ppi_1, FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0xec, 0xed).mirror(0x02).rw(m_usart, FUNC(i8251_device::read), FUNC(i8251_device::write));
- //AM_RANGE(0xf0, 0xf7) MCS0 - iSBX Multimodule
- //AM_RANGE(0xf8, 0xff) MCS1 - iSBX Multimodule
+ //map(0xf0, 0xf7) MCS0 - iSBX Multimodule
+ //map(0xf8, 0xff) MCS1 - iSBX Multimodule
}
static INPUT_PORTS_START( isbc8010 )
diff --git a/src/mame/drivers/istellar.cpp b/src/mame/drivers/istellar.cpp
index a9d4bd4166d..28078e78466 100644
--- a/src/mame/drivers/istellar.cpp
+++ b/src/mame/drivers/istellar.cpp
@@ -163,16 +163,16 @@ void istellar_state::z80_0_io(address_map &map)
map(0x00, 0x00).portr("IN0");
map(0x02, 0x02).portr("DSW1");
map(0x03, 0x03).portr("DSW2");
- /*AM_RANGE(0x04,0x04) AM_WRITE(volatile_palette_write)*/
+/* map(0x04, 0x04).w(FUNC(istellar_state::volatile_palette_write));*/
map(0x05, 0x05).r("latch1", FUNC(generic_latch_8_device::read)).w("latch2", FUNC(generic_latch_8_device::write));
}
void istellar_state::z80_1_io(address_map &map)
{
map.global_mask(0xff);
- map(0x00, 0x00).noprw(); /*AM_READWRITE(z80_1_slatch_read,z80_1_slatch_write)*/
- map(0x01, 0x01).noprw(); /*AM_READWRITE(z80_1_nmienable,z80_1_soundwrite_front)*/
- map(0x02, 0x02).noprw(); /*AM_WRITE(z80_1_soundwrite_rear)*/
+ map(0x00, 0x00).noprw(); /*.rw(FUNC(istellar_state::z80_1_slatch_read), FUNC(istellar_state::z80_1_slatch_write));*/
+ map(0x01, 0x01).noprw(); /*.rw(FUNC(istellar_state::z80_1_nmienable), FUNC(istellar_state::z80_1_soundwrite_front));*/
+ map(0x02, 0x02).noprw(); /*.w(FUNC(istellar_state::z80_1_soundwrite_rear));*/
}
void istellar_state::z80_2_io(address_map &map)
@@ -181,7 +181,7 @@ void istellar_state::z80_2_io(address_map &map)
map(0x00, 0x00).rw(FUNC(istellar_state::z80_2_ldp_read), FUNC(istellar_state::z80_2_ldp_write));
map(0x01, 0x01).r("latch2", FUNC(generic_latch_8_device::read)).w("latch1", FUNC(generic_latch_8_device::write));
map(0x02, 0x02).r("latch2", FUNC(generic_latch_8_device::acknowledge_r));
-/* AM_RANGE(0x03,0x03) AM_WRITE(z80_2_ldtrans_write)*/
+/* map(0x03, 0x03).w(FUNC(istellar_state::z80_2_ldtrans_write));*/
}
diff --git a/src/mame/drivers/itech32.cpp b/src/mame/drivers/itech32.cpp
index e96530bacfd..0e8d9c77dad 100644
--- a/src/mame/drivers/itech32.cpp
+++ b/src/mame/drivers/itech32.cpp
@@ -953,7 +953,7 @@ map(0x000c00, 0x007fff).mirror(0x40000).rw(FUNC(itech32_state::test2_r), FUNC(it
map(0x080000, 0x080003).portr("80000");
map(0x082000, 0x082003).portr("82000");
map(0x084001, 0x084001).rw(FUNC(drivedge_state::sound_return_r), FUNC(drivedge_state::sound_data_w));
-// AM_RANGE(0x086000, 0x08623f) AM_RAM -- networking -- first 0x40 bytes = our data, next 0x40*8 bytes = their data, r/w on IRQ2
+// map(0x086000, 0x08623f).ram(); -- networking -- first 0x40 bytes = our data, next 0x40*8 bytes = their data, r/w on IRQ2
map(0x088000, 0x088001).r(FUNC(drivedge_state::steering_r));
map(0x08a000, 0x08a001).r(FUNC(drivedge_state::gas_r));
map(0x08a000, 0x08a003).nopw();
@@ -969,7 +969,7 @@ map(0x000c00, 0x007fff).mirror(0x40000).rw(FUNC(itech32_state::test2_r), FUNC(it
map(0x200000, 0x200003).portr("200000");
map(0x280000, 0x280fff).ram().w(FUNC(drivedge_state::tms1_68k_ram_w)).share("tms1_ram");
map(0x300000, 0x300fff).ram().w(FUNC(drivedge_state::tms2_68k_ram_w)).share("tms2_ram");
- map(0x380000, 0x380003).nopw(); // AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w)
+ map(0x380000, 0x380003).nopw(); // .w("watchdog", FUNC(watchdog_timer_device::reset16_w));
map(0x600000, 0x607fff).rom().region("user1", 0).share("main_rom");
}
diff --git a/src/mame/drivers/jangou.cpp b/src/mame/drivers/jangou.cpp
index e55e2de77df..35a57d77769 100644
--- a/src/mame/drivers/jangou.cpp
+++ b/src/mame/drivers/jangou.cpp
@@ -422,7 +422,7 @@ void jangou_state::nsc_map(address_map &map)
void jangou_state::cntrygrl_cpu0_map(address_map &map)
{
map(0x0000, 0x3fff).rom();
-// AM_RANGE(0xc000, 0xc7ff) AM_RAM
+// map(0xc000, 0xc7ff).ram();
map(0xe000, 0xefff).ram();
}
@@ -437,7 +437,7 @@ void jangou_state::cntrygrl_cpu0_io(address_map &map)
map(0x12, 0x17).m(m_blitter, FUNC(jangou_blitter_device::blit_v1_regs));
map(0x20, 0x2f).w(m_blitter, FUNC(jangou_blitter_device::vregs_w));
map(0x30, 0x30).nopw(); //? polls 0x03 continuously
-// AM_RANGE(0x31,0x31) AM_WRITE(sound_latch_w)
+// map(0x31, 0x31).w(FUNC(jangou_state::sound_latch_w));
}
/*************************************
diff --git a/src/mame/drivers/jclub2.cpp b/src/mame/drivers/jclub2.cpp
index fbbfde0d7a2..30019b05df8 100644
--- a/src/mame/drivers/jclub2.cpp
+++ b/src/mame/drivers/jclub2.cpp
@@ -598,9 +598,9 @@ void jclub2o_state::jclub2o_map(address_map &map)
map(0x490000, 0x490003).w(FUNC(jclub2o_state::eeprom_s29290_w));
map(0x4a0000, 0x4a0003).w(FUNC(jclub2o_state::out2_w));
-// AM_RANGE(0x4a0010, 0x4a0013) AM_WRITE
-// AM_RANGE(0x4a0020, 0x4a0023) AM_WRITE
-// AM_RANGE(0x4a0030, 0x4a0033) AM_WRITE
+// map(0x4a0010, 0x4a0013).w(FUNC(jclub2o_map::));
+// map(0x4a0020, 0x4a0023).w(FUNC(jclub2o_map::));
+// map(0x4a0030, 0x4a0033).w(FUNC(jclub2o_map::));
// ST-0016
map(0x4b0000, 0x4b0003).rw(FUNC(jclub2o_state::cmd1_word_r), FUNC(jclub2o_state::cmd1_word_w));
@@ -619,14 +619,14 @@ void jclub2o_state::jclub2o_map(address_map &map)
map(0x580008, 0x58000b).portr("COIN");
map(0x58000c, 0x58000f).w(FUNC(jclub2o_state::input_sel1_out3_w));
map(0x580010, 0x580013).w(FUNC(jclub2o_state::out1_w));
-// AM_RANGE(0x580018, 0x58001b) AM_WRITE
-// AM_RANGE(0x58001c, 0x58001f) AM_WRITE
+// map(0x580018, 0x58001b).w(FUNC(jclub2o_map::));
+// map(0x58001c, 0x58001f).w(FUNC(jclub2o_map::));
map(0x580200, 0x580201).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
map(0x580401, 0x580401).rw(FUNC(jclub2o_state::console_r), FUNC(jclub2o_state::console_w));
- map(0x580421, 0x580421).r(FUNC(jclub2o_state::console_status_r)); //AM_WRITE
-// AM_RANGE(0x580440, 0x580443) AM_WRITE
+ map(0x580421, 0x580421).r(FUNC(jclub2o_state::console_status_r)); //.w(FUNC(jclub2o_map::));
+// map(0x580440, 0x580443).w(FUNC(jclub2o_map::));
// ST-0020
map(0x600000, 0x67ffff).rw(m_st0020, FUNC(st0020_device::sprram_r), FUNC(st0020_device::sprram_w));
@@ -678,21 +678,21 @@ void jclub2o_state::st0016_mem(address_map &map)
map(0x0000, 0x7fff).rom();
map(0x8000, 0xbfff).bankr("soundbank");
map(0xe800, 0xe8ff).ram();
- //AM_RANGE(0xe900, 0xe9ff) // sound - internal
- //AM_RANGE(0xec00, 0xec1f) AM_READ(st0016_character_ram_r) AM_WRITE(st0016_character_ram_w)
+ //map(0xe900, 0xe9ff) // sound - internal
+ //map(0xec00, 0xec1f).rw(FUNC(jclub2o_state::st0016_character_ram_r), FUNC(jclub2o_state::st0016_character_ram_w));
map(0xf000, 0xffff).ram();
}
void jclub2o_state::st0016_io(address_map &map)
{
map.global_mask(0xff);
- //AM_RANGE(0x00, 0xbf) AM_READ(st0016_vregs_r) AM_WRITE(st0016_vregs_w)
+ //map(0x00, 0xbf).rw(FUNC(jclub2o_state::st0016_vregs_r), FUNC(jclub2o_state::st0016_vregs_w));
map(0xc0, 0xc0).rw(FUNC(jclub2o_state::cmd1_r), FUNC(jclub2o_state::cmd1_w));
map(0xc1, 0xc1).rw(FUNC(jclub2o_state::cmd2_r), FUNC(jclub2o_state::cmd2_w));
map(0xc2, 0xc2).r(FUNC(jclub2o_state::cmd_stat_r));
map(0xe1, 0xe1).w(FUNC(jclub2o_state::st0016_rom_bank_w));
map(0xe7, 0xe7).nopw(); // watchdog?
- //AM_RANGE(0xf0, 0xf0) AM_READ(st0016_dma_r)
+ //map(0xf0, 0xf0).r(FUNC(jclub2o_state::st0016_dma_r));
}
@@ -737,14 +737,14 @@ void jclub2_state::jclub2_map(address_map &map)
map(0x580008, 0x58000b).portr("COIN");
map(0x58000c, 0x58000f).w(FUNC(jclub2_state::input_sel1_out3_w));
map(0x580010, 0x580013).w(FUNC(jclub2_state::out1_w));
-// AM_RANGE(0x580018, 0x58001b) AM_WRITE
-// AM_RANGE(0x58001c, 0x58001f) AM_WRITE
+// map(0x580018, 0x58001b).w(FUNC(jclub2_map::));
+// map(0x58001c, 0x58001f).w(FUNC(jclub2_map::));
map(0x580200, 0x580201).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
map(0x580401, 0x580401).rw(FUNC(jclub2_state::console_r), FUNC(jclub2_state::console_w));
- map(0x580421, 0x580421).r(FUNC(jclub2_state::console_status_r)); //AM_WRITE
-// AM_RANGE(0x580440, 0x580443) AM_WRITE
+ map(0x580421, 0x580421).r(FUNC(jclub2_state::console_status_r)); //.w(FUNC(jclub2_map::));
+// map(0x580440, 0x580443).w(FUNC(jclub2_map::));
// ST-0032
map(0x800000, 0x87ffff).rw(m_st0020, FUNC(st0020_device::sprram_r), FUNC(st0020_device::sprram_w));
@@ -818,11 +818,11 @@ void darkhors_state::darkhors_map(address_map &map)
map(0x580004, 0x580007).portr("COIN");
map(0x580008, 0x58000b).r(FUNC(darkhors_state::input_r));
map(0x58000c, 0x58000f).w(FUNC(darkhors_state::input_sel_w));
-// AM_RANGE(0x580010, 0x580013) AM_WRITE
-// AM_RANGE(0x580018, 0x58001b) AM_WRITE
-// AM_RANGE(0x58001c, 0x58001f) AM_WRITE
+// map(0x580010, 0x580013).w(FUNC(darkhors_state::));
+// map(0x580018, 0x58001b).w(FUNC(darkhors_state::));
+// map(0x58001c, 0x58001f).w(FUNC(darkhors_state::));
map(0x580084, 0x580084).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
-// AM_RANGE(0x58008c, 0x58008f) AM_WRITE
+// map(0x58008c, 0x58008f).w(FUNC(darkhors_state::));
map(0x580200, 0x580201).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
map(0x580401, 0x580401).rw(FUNC(darkhors_state::console_r), FUNC(darkhors_state::console_w));
diff --git a/src/mame/drivers/jokrwild.cpp b/src/mame/drivers/jokrwild.cpp
index 56cb3c75da9..bce2a8014f9 100644
--- a/src/mame/drivers/jokrwild.cpp
+++ b/src/mame/drivers/jokrwild.cpp
@@ -195,7 +195,7 @@ void jokrwild_state::jokrwild_map(address_map &map)
map(0x2400, 0x27ff).ram(); //stack RAM
map(0x4004, 0x4007).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0x4008, 0x400b).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); //optical sensor is here
-// AM_RANGE(0x4010, 0x4010) AM_READNOP /* R ???? */
+// map(0x4010, 0x4010).nopr(); /* R ???? */
map(0x6000, 0x6000).w("crtc", FUNC(mc6845_device::address_w));
map(0x6001, 0x6001).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
map(0x6100, 0x6100).portr("SW1");
diff --git a/src/mame/drivers/joystand.cpp b/src/mame/drivers/joystand.cpp
index bbb763fd696..9830771e820 100644
--- a/src/mame/drivers/joystand.cpp
+++ b/src/mame/drivers/joystand.cpp
@@ -458,7 +458,7 @@ void joystand_state::joystand_map(address_map &map)
map(0x200010, 0x200011).portr("IN0"); // r/w
map(0x200012, 0x200013).ram().w(FUNC(joystand_state::outputs_w)).share("outputs"); // r/w
map(0x200014, 0x200015).rw(FUNC(joystand_state::fpga_r), FUNC(joystand_state::oki_bank_w)); // r/w
-// AM_RANGE(0x200016, 0x200017) // write $9190 at boot
+// map(0x200016, 0x200017) // write $9190 at boot
map(0x400000, 0x47ffff).ram().w(FUNC(joystand_state::bg15_0_w)).share("bg15_0_ram"); // r5g5b5 200x200 pixel-based
map(0x480000, 0x4fffff).ram(); // more rgb layers? (writes at offset 0)
@@ -473,7 +473,7 @@ void joystand_state::joystand_map(address_map &map)
map(0x60c00c, 0x60c00d).ram().share("enable"); // write
map(0x800000, 0xdfffff).rw(FUNC(joystand_state::cart_r), FUNC(joystand_state::cart_w)); // r/w (cart flash)
-// AM_RANGE(0xe00080, 0xe00081) // write (bit 0 = cart? bit 1 = ? bit 3 = ?)
+// map(0xe00080, 0xe00081) // write (bit 0 = cart? bit 1 = ? bit 3 = ?)
map(0xe00000, 0xe00001).r(FUNC(joystand_state::e00000_r)); // copy slot
map(0xe00020, 0xe00021).r(FUNC(joystand_state::e00020_r)); // master slot
diff --git a/src/mame/drivers/jpmimpct.cpp b/src/mame/drivers/jpmimpct.cpp
index 6db9c4aa5f5..20d3f4e0c84 100644
--- a/src/mame/drivers/jpmimpct.cpp
+++ b/src/mame/drivers/jpmimpct.cpp
@@ -629,22 +629,22 @@ void jpmimpct_state::awp68k_program_map(address_map &map)
map(0x00480084, 0x00480085).r(FUNC(jpmimpct_state::upd7759_r));
map(0x00480086, 0x0048009f).r(FUNC(jpmimpct_state::prot_1_r));
map(0x004800a0, 0x004800af).rw(FUNC(jpmimpct_state::jpmio_r), FUNC(jpmimpct_state::jpmioawp_w));
-// AM_RANGE(0x004800b0, 0x004800df) AM_READ(prot_1_r)
-// AM_RANGE(0x004800e0, 0x004800e1) AM_WRITE(unk_w)
-// AM_RANGE(0x00480086, 0x006576ff) AM_READ(prot_1_r)
+// map(0x004800b0, 0x004800df).r(FUNC(jpmimpct_state::prot_1_r));
+// map(0x004800e0, 0x004800e1).w(FUNC(jpmimpct_state::unk_w));
+// map(0x00480086, 0x006576ff).r(FUNC(jpmimpct_state::prot_1_r));
map(0x004801dc, 0x004801dd).r(FUNC(jpmimpct_state::prot_1_r));
map(0x004801de, 0x006575ff).r(FUNC(jpmimpct_state::prot_1_r));
map(0x00657600, 0x00657601).r(FUNC(jpmimpct_state::prot_0_r));
map(0x00657602, 0x00ffffff).r(FUNC(jpmimpct_state::prot_1_r));
-// AM_RANGE(0x004801dc, 0x004801dd) AM_READ(unk_r)
-// AM_RANGE(0x004801de, 0x004801df) AM_READ(unk_r)
- //AM_RANGE(0x00657602, 0x00bfffff) AM_READ(prot_1_r)
-// AM_RANGE(0x004801e0, 0x004801ff) AM_READWRITE(duart_2_r, duart_2_w)
-// AM_RANGE(0x00c00000, 0x00cfffff) AM_ROM
-// AM_RANGE(0x00d00000, 0x00dfffff) AM_ROM
-// AM_RANGE(0x00e00000, 0x00efffff) AM_ROM
-// AM_RANGE(0x00f00000, 0x00ffffff) AM_ROM
+// map(0x004801dc, 0x004801dd).r(FUNC(jpmimpct_state::unk_r));
+// map(0x004801de, 0x004801df).r(FUNC(jpmimpct_state::unk_r));
+// map(0x00657602, 0x00bfffff).r(FUNC(jpmimpct_state::prot_1_r));
+// map(0x004801e0, 0x004801ff).rw(FUNC(jpmimpct_state::duart_2_r), FUNC(jpmimpct_state::duart_2_w));
+// map(0x00c00000, 0x00cfffff).rom();
+// map(0x00d00000, 0x00dfffff).rom();
+// map(0x00e00000, 0x00efffff).rom();
+// map(0x00f00000, 0x00ffffff).rom();
}
@@ -659,7 +659,7 @@ void jpmimpct_state::tms_program_map(address_map &map)
map(0x00000000, 0x003fffff).mirror(0xf8000000).ram().share("vram");
map(0x00800000, 0x00ffffff).mirror(0xf8000000).rom().region("user1", 0x100000);
map(0x02000000, 0x027fffff).mirror(0xf8000000).rom().region("user1", 0);
-// AM_RANGE(0x01000000, 0x0100003f) AM_MIRROR(0xf87fffc0) AM_READWRITE(jpmimpct_bt477_r, jpmimpct_bt477_w)
+// map(0x01000000, 0x0100003f).mirror(0xf87fffc0).rw(FUNC(jpmimpct_state::jpmimpct_bt477_r), FUNC(jpmimpct_state::jpmimpct_bt477_w));
map(0x01000000, 0x017fffff).mirror(0xf8000000).mask(0x1f).rw(FUNC(jpmimpct_state::jpmimpct_bt477_r), FUNC(jpmimpct_state::jpmimpct_bt477_w));
map(0x07800000, 0x07bfffff).mirror(0xf8400000).ram();
}
diff --git a/src/mame/drivers/jpmmps.cpp b/src/mame/drivers/jpmmps.cpp
index 3529dd2c6bb..d85260b2da5 100644
--- a/src/mame/drivers/jpmmps.cpp
+++ b/src/mame/drivers/jpmmps.cpp
@@ -187,13 +187,13 @@ void jpmmps_state::jpmmps_io_map(address_map &map)
map.global_mask(0x1ff);
map(0x0000, 0x003f).rw(UART_IC5, FUNC(tms9902_device::cruread), FUNC(tms9902_device::cruwrite));
-// AM_RANGE(0x0040, 0x0041) // power fail
-// AM_RANGE(0x0042, 0x0043) // wd timeout
-// AM_RANGE(0x0044, 0x0045) // invalid access
-// AM_RANGE(0x0046, 0x0047) // clear down
+// map(0x0040, 0x0041) // power fail
+// map(0x0042, 0x0043) // wd timeout
+// map(0x0044, 0x0045) // invalid access
+// map(0x0046, 0x0047) // clear down
-// AM_RANGE(0x004c, 0x004d) // uart4 int
-// AM_RANGE(0x004e, 0x004f) // uart2 int
+// map(0x004c, 0x004d) // uart4 int
+// map(0x004e, 0x004f) // uart2 int
map(0x0080, 0x00bf).rw(UART_IC10, FUNC(tms9902_device::cruread), FUNC(tms9902_device::cruwrite));
map(0x00c0, 0x00cf).w("mainlatch", FUNC(ls259_device::write_d0));
diff --git a/src/mame/drivers/jpms80.cpp b/src/mame/drivers/jpms80.cpp
index 79092705dd5..daba0d7c8ea 100644
--- a/src/mame/drivers/jpms80.cpp
+++ b/src/mame/drivers/jpms80.cpp
@@ -102,7 +102,7 @@ void jpms80_state::jpms80_map(address_map &map)
void jpms80_state::jpms80_io_map(address_map &map)
{
map.global_mask(0x3ff);
-// AM_RANGE(0x0000, 0x001f) // I/O & Optic (in)
+// map(0x0000, 0x001f) // I/O & Optic (in)
map(0x0000, 0x000f).w("outlatch0", FUNC(ls259_device::write_d0));
map(0x0010, 0x001f).w("outlatch1", FUNC(ls259_device::write_d0));
map(0x0020, 0x002f).w("outlatch2", FUNC(ls259_device::write_d0));
@@ -114,7 +114,7 @@ void jpms80_state::jpms80_io_map(address_map &map)
map(0x0080, 0x008f).w("outlatch8", FUNC(ls259_device::write_d0));
map(0x0090, 0x009f).w("outlatch9", FUNC(ls259_device::write_d0));
map(0x00a0, 0x00af).w("outlatch10", FUNC(ls259_device::write_d0));
-// AM_RANGE(0x0380, 0x03bf) // AY
+// map(0x0380, 0x03bf) // AY
map(0x03c0, 0x03ff).rw(m_acc, FUNC(tms9902_device::cruread), FUNC(tms9902_device::cruwrite));
// Lamps, Meters etc. can move around
}
diff --git a/src/mame/drivers/jupiter.cpp b/src/mame/drivers/jupiter.cpp
index 06726da0312..9b13530130b 100644
--- a/src/mame/drivers/jupiter.cpp
+++ b/src/mame/drivers/jupiter.cpp
@@ -116,21 +116,21 @@ void jupiter2_state::jupiter2_mem(address_map &map)
map(0x0000, 0x7fff).ram();
map(0xc000, 0xcfff).ram(); // Video RAM
map(0xf000, 0xff00).rom().region(MCM6571AP_TAG, 0);
-// AM_RANGE(0xff58, 0xff5c) Cartridge Disk Controller PIA
-// AM_RANGE(0xff60, 0xff76) DMA Controller
-// AM_RANGE(0xff80, 0xff83) Floppy PIA
+// map(0xff58, 0xff5c) Cartridge Disk Controller PIA
+// map(0xff60, 0xff76) DMA Controller
+// map(0xff80, 0xff83) Floppy PIA
map(0xff84, 0xff87).rw(INS1771N1_TAG, FUNC(wd_fdc_device_base::read), FUNC(wd_fdc_device_base::write));
-// AM_RANGE(0xff90, 0xff93) Hytype Parallel Printer PIA
-// AM_RANGE(0xffa0, 0xffa7) Persci Floppy Disk Controller
-// AM_RANGE(0xffb0, 0xffb3) Video PIA
+// map(0xff90, 0xff93) Hytype Parallel Printer PIA
+// map(0xffa0, 0xffa7) Persci Floppy Disk Controller
+// map(0xffb0, 0xffb3) Video PIA
map(0xffc0, 0xffc1).rw(m_acia0, FUNC(acia6850_device::read), FUNC(acia6850_device::write)); // Serial Port 0 ACIA
map(0xffc4, 0xffc5).rw(m_acia1, FUNC(acia6850_device::read), FUNC(acia6850_device::write)); // Serial Port 1 ACIA
-// AM_RANGE(0xffc8, 0xffc9) Serial Port 2 ACIA
-// AM_RANGE(0xffcc, 0xffcd) Serial Port 3 ACIA
-// AM_RANGE(0xffd0, 0xffd1) Serial Port 4 ACIA / Cassette
-// AM_RANGE(0xffd4, 0xffd5) Serial Port 5 ACIA / EPROM Programmer (2704/2708)
-// AM_RANGE(0xffd8, 0xffd9) Serial Port 6 ACIA / Hardware Breakpoint Registers
-// AM_RANGE(0xffdc, 0xffdd) Serial Port 7 ACIA
+// map(0xffc8, 0xffc9) Serial Port 2 ACIA
+// map(0xffcc, 0xffcd) Serial Port 3 ACIA
+// map(0xffd0, 0xffd1) Serial Port 4 ACIA / Cassette
+// map(0xffd4, 0xffd5) Serial Port 5 ACIA / EPROM Programmer (2704/2708)
+// map(0xffd8, 0xffd9) Serial Port 6 ACIA / Hardware Breakpoint Registers
+// map(0xffdc, 0xffdd) Serial Port 7 ACIA
map(0xfff8, 0xffff).rom().region(MCM6571AP_TAG, 0x0ff8); // vectors
}
diff --git a/src/mame/drivers/jvh.cpp b/src/mame/drivers/jvh.cpp
index e481f15d7c5..616fcc8cac7 100644
--- a/src/mame/drivers/jvh.cpp
+++ b/src/mame/drivers/jvh.cpp
@@ -75,31 +75,31 @@ void jvh_state::escape_io(address_map &map)
void jvh_state::movmastr_io(address_map &map)
{
- //AM_RANGE(0x01, 0x02) AM_READ(sw1_r)
- //AM_RANGE(0x03, 0x05) AM_READ(dip_r)
- //AM_RANGE(0x08, 0x09) AM_READ(sw6_r)
- //AM_RANGE(0x00, 0x07) AM_WRITE(out0a2_w)
- //AM_RANGE(0x08, 0x0f) AM_WRITE(out0b2_w)
- //AM_RANGE(0x10, 0x17) AM_WRITE(out1a2_w)
- //AM_RANGE(0x18, 0x1f) AM_WRITE(out1b2_w)
- //AM_RANGE(0x20, 0x27) AM_WRITE(out2a2_w)
- //AM_RANGE(0x28, 0x2f) AM_WRITE(out2b2_w)
- //AM_RANGE(0x30, 0x30) AM_WRITE(out3a2_w)
- //AM_RANGE(0x31, 0x36) AM_WRITE(snd_w)
- //AM_RANGE(0x37, 0x37) AM_WRITE(latch_w)
- //AM_RANGE(0x3e, 0x3e) AM_WRITE(irq_enable)
- //AM_RANGE(0x3f, 0x3f) AM_WRITE(zc_enable)
- //AM_RANGE(0x40, 0x47) AM_WRITE(out4a2_w)
- //AM_RANGE(0x48, 0x4a) AM_WRITE(out4b2_w)
- //AM_RANGE(0x4b, 0x4b) AM_WRITE(enable_w)
- //AM_RANGE(0x4c, 0x4f) AM_WRITE(out4c2_w)
- //AM_RANGE(0x50, 0x55) AM_WRITE(col_w)
- //AM_RANGE(0x57, 0x5a) AM_WRITE(bcd_w)
- //AM_RANGE(0x5b, 0x5f) AM_WRITE(panel_w)
- //AM_RANGE(0x60, 0x67) AM_WRITE(digit_w)
- //AM_RANGE(0x68, 0x6f) AM_WRITE(out6b2_w)
- //AM_RANGE(0x70, 0x74) AM_WRITE(out7a2_w)
- //AM_RANGE(0x75, 0x7f) AM_WRITE(sol_w)
+ //map(0x01, 0x02).r(FUNC(jvh_state::sw1_r));
+ //map(0x03, 0x05).r(FUNC(jvh_state::dip_r));
+ //map(0x08, 0x09).r(FUNC(jvh_state::sw6_r));
+ //map(0x00, 0x07).w(FUNC(jvh_state::out0a2_w));
+ //map(0x08, 0x0f).w(FUNC(jvh_state::out0b2_w));
+ //map(0x10, 0x17).w(FUNC(jvh_state::out1a2_w));
+ //map(0x18, 0x1f).w(FUNC(jvh_state::out1b2_w));
+ //map(0x20, 0x27).w(FUNC(jvh_state::out2a2_w));
+ //map(0x28, 0x2f).w(FUNC(jvh_state::out2b2_w));
+ //map(0x30, 0x30).w(FUNC(jvh_state::out3a2_w));
+ //map(0x31, 0x36).w(FUNC(jvh_state::snd_w));
+ //map(0x37, 0x37).w(FUNC(jvh_state::latch_w));
+ //map(0x3e, 0x3e).w(FUNC(jvh_state::irq_enable));
+ //map(0x3f, 0x3f).w(FUNC(jvh_state::zc_enable));
+ //map(0x40, 0x47).w(FUNC(jvh_state::out4a2_w));
+ //map(0x48, 0x4a).w(FUNC(jvh_state::out4b2_w));
+ //map(0x4b, 0x4b).w(FUNC(jvh_state::enable_w));
+ //map(0x4c, 0x4f).w(FUNC(jvh_state::out4c2_w));
+ //map(0x50, 0x55).w(FUNC(jvh_state::col_w));
+ //map(0x57, 0x5a).w(FUNC(jvh_state::bcd_w));
+ //map(0x5b, 0x5f).w(FUNC(jvh_state::panel_w));
+ //map(0x60, 0x67).w(FUNC(jvh_state::digit_w));
+ //map(0x68, 0x6f).w(FUNC(jvh_state::out6b2_w));
+ //map(0x70, 0x74).w(FUNC(jvh_state::out7a2_w));
+ //map(0x75, 0x7f).w(FUNC(jvh_state::sol_w));
}
void jvh_state::jvh_sub_map(address_map &map)
diff --git a/src/mame/drivers/kaneko16.cpp b/src/mame/drivers/kaneko16.cpp
index 2b88a78a237..6e6bda21e2c 100644
--- a/src/mame/drivers/kaneko16.cpp
+++ b/src/mame/drivers/kaneko16.cpp
@@ -350,7 +350,7 @@ void kaneko16_state::blazeon_map(address_map &map)
map(0xe00000, 0xe00001).nopr(); // Read = IRQ Ack ?
map(0xe00000, 0xe00000).w(m_soundlatch, FUNC(generic_latch_8_device::write));
map(0xe40000, 0xe40001).nopr(); // IRQ Ack ?
-// map(0xe80000, 0xe80001) AM_READNOP // IRQ Ack ?
+// map(0xe80000, 0xe80001).nopr(); // IRQ Ack ?
map(0xec0000, 0xec0001).nopr(); // Lev 4 IRQ Ack ?
}
@@ -546,7 +546,7 @@ void kaneko16_gtmr_state::gtmr2_map(address_map &map)
map(0xa00000, 0xa00001).rw(m_watchdog, FUNC(watchdog_timer_device::reset16_r), FUNC(watchdog_timer_device::reset16_w)); // Watchdog
map(0xb00000, 0xb00001).portr("P1");
-// map(0xb00002, 0xb00003) AM_READ_PORT("P2")
+// map(0xb00002, 0xb00003).portr("P2");
map(0xb00002, 0xb00003).r(FUNC(kaneko16_gtmr_state::gtmr2_IN1_r));
map(0xb00004, 0xb00005).portr("SYSTEM");
map(0xb00006, 0xb00007).portr("EXTRA");
diff --git a/src/mame/drivers/karnov.cpp b/src/mame/drivers/karnov.cpp
index 14d44359eee..eedfa15f705 100644
--- a/src/mame/drivers/karnov.cpp
+++ b/src/mame/drivers/karnov.cpp
@@ -916,7 +916,7 @@ ROM_START( karnov )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 6502 Sound CPU */
ROM_LOAD( "dn05-5.f3", 0x8000, 0x8000, CRC(fa1a31a8) SHA1(5007a625be03c546d2a78444d72c28761b10cdb0) )
- ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 MCU */
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
ROM_LOAD( "karnov_i8751.k13", 0x0000, 0x1000, NO_DUMP )
ROM_REGION( 0x08000, "gfx1", 0 )
@@ -955,7 +955,7 @@ ROM_START( karnova )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 6502 Sound CPU */
ROM_LOAD( "dn05-5.f3", 0x8000, 0x8000, CRC(fa1a31a8) SHA1(5007a625be03c546d2a78444d72c28761b10cdb0) )
- ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 MCU */
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
ROM_LOAD( "karnov_i8751.k13", 0x0000, 0x1000, NO_DUMP )
ROM_REGION( 0x08000, "gfx1", 0 )
@@ -994,7 +994,7 @@ ROM_START( karnovj )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 6502 Sound CPU */
ROM_LOAD( "kar5.f3", 0x8000, 0x8000, CRC(7c9158f1) SHA1(dfba7b3abd6b8d6991f0207cd252ee652a6050c2) )
- ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 MCU */
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
ROM_LOAD( "karnovj_i8751.k13", 0x0000, 0x1000, NO_DUMP )
ROM_REGION( 0x08000, "gfx1", 0 )
@@ -1035,7 +1035,7 @@ ROM_START( karnovjbl )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 6502 Sound CPU */
ROM_LOAD( "7.bin", 0x8000, 0x8000, CRC(7c9158f1) SHA1(dfba7b3abd6b8d6991f0207cd252ee652a6050c2) )
- ROM_REGION( 0x1000, "mcu", 0 ) /* NEC D8748HD MCU */
+ ROM_REGION( 0x1000, "mcu", 0 ) /* NEC D8748HD MCU */
ROM_LOAD( "mcu.bin", 0x0000, 0x1000, NO_DUMP ) // labeled 19 on PCB (yes, they labeled two chips as 19)
ROM_REGION( 0x08000, "gfx1", 0 )
@@ -1078,7 +1078,7 @@ ROM_START( wndrplnt )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 6502 Sound CPU */
ROM_LOAD( "ea05.f3", 0x8000, 0x8000, CRC(8dbb6231) SHA1(342faa020448ce916e820b3df18d44191983f7a6) )
- ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 MCU */
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
ROM_LOAD( "wndrplnt_i8751.k13", 0x0000, 0x1000, NO_DUMP )
ROM_REGION( 0x08000, "gfx1", 0 )
@@ -1117,7 +1117,7 @@ ROM_START( chelnov )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 6502 Sound CPU */
ROM_LOAD( "ee05-.f3", 0x8000, 0x8000, CRC(6a8936b4) SHA1(2b72cb749e6bddb67c2bd3d27b3a92511f9ef016) )
- ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 MCU */
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
ROM_LOAD( "ee-e.14k", 0x0000, 0x1000, CRC(b7045395) SHA1(a873de0978cbd169b481ee4c4512e47e7745df77) )
ROM_REGION( 0x08000, "gfx1", 0 )
@@ -1152,8 +1152,8 @@ ROM_START( chelnovu )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 6502 Sound CPU */
ROM_LOAD( "ee05-.f3", 0x8000, 0x8000, CRC(6a8936b4) SHA1(2b72cb749e6bddb67c2bd3d27b3a92511f9ef016) )
- ROM_REGION( 0x1000, "mcu", 0 ) // created from the world version, id byte patched, sprite table adjusted, internal checksum hacked
- ROM_LOAD( "ee-a.14k", 0x0000, 0x1000, BAD_DUMP CRC(15fc8b96) SHA1(44d60fc915cf10ca08a635c3c5fc17439977f498) )
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
+ ROM_LOAD( "ee-a.14k", 0x0000, 0x1000, CRC(95ea1e7b) SHA1(6d9e3107a2b90734c826c6915c1a3443a7eddfdb) )
ROM_REGION( 0x08000, "gfx1", 0 )
ROM_LOAD( "ee00-e.c5", 0x00000, 0x08000, CRC(e06e5c6b) SHA1(70166257da5be428cb8404d8e1063c59c7722365) ) /* Characters */
@@ -1187,7 +1187,7 @@ ROM_START( chelnovj ) /* at least 1 PCB found with all labels as 'EPR-EExx' like
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 6502 Sound CPU */
ROM_LOAD( "ee05.f3", 0x8000, 0x8000, CRC(6a8936b4) SHA1(2b72cb749e6bddb67c2bd3d27b3a92511f9ef016) )
- ROM_REGION( 0x1000, "mcu", 0 )
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
ROM_LOAD( "ee.14k", 0x0000, 0x1000, CRC(b3dc380c) SHA1(81cc4ded918da9f232481f4e67cf71de814efc48) )
ROM_REGION( 0x08000, "gfx1", 0 )
diff --git a/src/mame/drivers/kingdrby.cpp b/src/mame/drivers/kingdrby.cpp
index d07979c4e74..cee9006c6fb 100644
--- a/src/mame/drivers/kingdrby.cpp
+++ b/src/mame/drivers/kingdrby.cpp
@@ -475,7 +475,7 @@ void kingdrby_state::slave_1986_map(address_map &map)
map(0x3000, 0x3fff).rom(); //sound rom tested for the post check
map(0x4000, 0x47ff).ram().share("nvram"); //backup ram
map(0x5000, 0x5003).rw(m_ppi[0], FUNC(i8255_device::read), FUNC(i8255_device::write)); /* I/O Ports */
-// AM_RANGE(0x6000, 0x6003) AM_DEVREADWRITE(m_ppi[1], i8255_device, read, write) /* I/O Ports */
+// map(0x6000, 0x6003).rw(m_ppi[1], FUNC(i8255_device::read), FUNC(i8255_device::write)); /* I/O Ports */
map(0x7000, 0x73ff).ram().share("share1");
map(0x7400, 0x74ff).ram().share("spriteram");
map(0x7600, 0x7600).w("crtc", FUNC(mc6845_device::address_w));
diff --git a/src/mame/drivers/kingpin.cpp b/src/mame/drivers/kingpin.cpp
index b0cf004626e..440d040c00c 100644
--- a/src/mame/drivers/kingpin.cpp
+++ b/src/mame/drivers/kingpin.cpp
@@ -93,18 +93,18 @@ void kingpin_state::kingpin_io_map(address_map &map)
map(0x10, 0x13).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0x20, 0x21).rw("tms9928a", FUNC(tms9928a_device::read), FUNC(tms9928a_device::write));
map(0x60, 0x60).w(FUNC(kingpin_state::sound_nmi_w));
- //AM_RANGE(0x30, 0x30) AM_WRITENOP // lamps?
- //AM_RANGE(0x40, 0x40) AM_WRITENOP // lamps?
- //AM_RANGE(0x50, 0x50) AM_WRITENOP // ?
- //AM_RANGE(0x70, 0x70) AM_WRITENOP // ?
+ //map(0x30, 0x30).nopw(); // lamps?
+ //map(0x40, 0x40).nopw(); // lamps?
+ //map(0x50, 0x50).nopw(); // ?
+ //map(0x70, 0x70).nopw(); // ?
}
void kingpin_state::kingpin_sound_map(address_map &map)
{
map(0x0000, 0x1fff).rom();
map(0x8000, 0x8001).w("aysnd", FUNC(ay8910_device::address_data_w));
- //AM_RANGE(0x8400, 0x8400) AM_READNOP // ?
- //AM_RANGE(0x8401, 0x8401) AM_WRITENOP // ?
+ //map(0x8400, 0x8400).nopr(); // ?
+ //map(0x8401, 0x8401).nopw(); // ?
map(0x8800, 0x8fff).ram();
map(0x9000, 0x9000).r(m_soundlatch, FUNC(generic_latch_8_device::read));
}
diff --git a/src/mame/drivers/kyocera.cpp b/src/mame/drivers/kyocera.cpp
index d3a2c540585..ce927ee9c62 100644
--- a/src/mame/drivers/kyocera.cpp
+++ b/src/mame/drivers/kyocera.cpp
@@ -564,10 +564,10 @@ void tandy200_state::tandy200_mem(address_map &map)
void kc85_state::kc85_io(address_map &map)
{
map.unmap_value_high();
-// AM_RANGE(0x70, 0x70) AM_MIRROR(0x0f) optional RAM unit
-// AM_RANGE(0x80, 0x80) AM_MIRROR(0x0f) optional I/O controller unit
-// AM_RANGE(0x90, 0x90) AM_MIRROR(0x0f) optional answering telephone unit
-// AM_RANGE(0xa0, 0xa0) AM_MIRROR(0x0f) optional modem
+// map(0x70, 0x70).mirror(0x0f); optional RAM unit
+// map(0x80, 0x80).mirror(0x0f); optional I/O controller unit
+// map(0x90, 0x90).mirror(0x0f); optional answering telephone unit
+// map(0xa0, 0xa0).mirror(0x0f); optional modem
map(0xb0, 0xb7).mirror(0x08).rw(I8155_TAG, FUNC(i8155_device::io_r), FUNC(i8155_device::io_w));
map(0xc0, 0xc0).mirror(0x0f).rw(m_uart, FUNC(im6402_device::read), FUNC(im6402_device::write));
map(0xd0, 0xd0).mirror(0x0f).rw(FUNC(kc85_state::uart_status_r), FUNC(kc85_state::uart_ctrl_w));
@@ -584,7 +584,7 @@ void kc85_state::trsm100_io(address_map &map)
void pc8201_state::pc8201_io(address_map &map)
{
map.unmap_value_high();
-// AM_RANGE(0x70, 0x70) AM_MIRROR(0x0f) optional video interface 8255
+// map(0x70, 0x70).mirror(0x0f); optional video interface 8255
map(0x80, 0x80).mirror(0x03).w(FUNC(pc8201_state::romah_w));
map(0x84, 0x84).mirror(0x03).w(FUNC(pc8201_state::romal_w));
map(0x88, 0x88).mirror(0x03).w(FUNC(pc8201_state::romam_w));
@@ -602,7 +602,7 @@ void tandy200_state::tandy200_io(address_map &map)
{
map.unmap_value_high();
map(0x90, 0x9f).rw(m_rtc, FUNC(rp5c01_device::read), FUNC(rp5c01_device::write));
-// AM_RANGE(0xa0, 0xa0) AM_MIRROR(0x0f) AM_DEVWRITE(TCM5089_TAG, write)
+// map(0xa0, 0xa0).mirror(0x0f).w(TCM5089_TAG, FUNC(tcm5089_device::write));
map(0xb0, 0xb7).mirror(0x08).rw(I8155_TAG, FUNC(i8155_device::io_r), FUNC(i8155_device::io_w));
map(0xc0, 0xc1).mirror(0x0e).rw(I8251_TAG, FUNC(i8251_device::read), FUNC(i8251_device::write));
map(0xd0, 0xd0).mirror(0x0f).rw(FUNC(tandy200_state::bank_r), FUNC(tandy200_state::bank_w));
@@ -1497,7 +1497,7 @@ void tandy200_state::tandy200(machine_config &config)
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
-// MCFG_TCM5089_ADD(TCM5089_TAG, XTAL(3'579'545))
+// TCM5089(config, TCM5089_TAG, XTAL(3'579'545));
/* devices */
i8155_device &i8155(I8155(config, I8155_TAG, XTAL(4'915'200)/2));
diff --git a/src/mame/drivers/lbeach.cpp b/src/mame/drivers/lbeach.cpp
index 96cec48d265..ff7d5893bc9 100644
--- a/src/mame/drivers/lbeach.cpp
+++ b/src/mame/drivers/lbeach.cpp
@@ -234,12 +234,12 @@ void lbeach_state::lbeach_map(address_map &map)
map(0x8000, 0x8000).writeonly().share("scroll_y");
map(0x8001, 0x8001).writeonly().share("sprite_x");
map(0x8002, 0x8002).writeonly().share("sprite_code");
-// AM_RANGE(0x8003, 0x8003) AM_WRITENOP // ?
-// AM_RANGE(0x8004, 0x8004) AM_WRITENOP // ?
-// AM_RANGE(0x8005, 0x8005) AM_WRITENOP // ?
+// map(0x8003, 0x8003).nopw(); // ?
+// map(0x8004, 0x8004).nopw(); // ?
+// map(0x8005, 0x8005).nopw(); // ?
map(0x8007, 0x8007).nopw(); // probably watchdog
map(0xa000, 0xa000).portr("IN0");
-// AM_RANGE(0xa003, 0xa003) AM_READNOP // ? tests d7 at game over
+// map(0xa003, 0xa003).nopr(); // ? tests d7 at game over
map(0xc000, 0xcfff).rom();
map(0xf000, 0xffff).rom();
}
diff --git a/src/mame/drivers/leapster.cpp b/src/mame/drivers/leapster.cpp
index c5b4cf7bdcc..52cb80e98ea 100644
--- a/src/mame/drivers/leapster.cpp
+++ b/src/mame/drivers/leapster.cpp
@@ -300,7 +300,7 @@ void leapster_state::leapster_map(address_map &map)
map(0x0180D800, 0x0180D803).r(FUNC(leapster_state::leapster_random_r));
map(0x03000000, 0x030007ff).ram(); // puts stack here, writes a pointer @ 0x03000000 on startup
map(0x3c000000, 0x3c1fffff).ram(); // really ram, or has our code execution gone wrong?
-// AM_RANGE(0x80000000, 0x807fffff) AM_ROMBANK("cartrom") // game ROM pointers are all to the 80xxxxxx region, so I assume it maps here - installed if a cart is present
+// map(0x80000000, 0x807fffff).bankr("cartrom"); // game ROM pointers are all to the 80xxxxxx region, so I assume it maps here - installed if a cart is present
}
void leapster_state::leapster_aux(address_map &map)
diff --git a/src/mame/drivers/lethalj.cpp b/src/mame/drivers/lethalj.cpp
index 2fc6664dc42..2bd14a5c9dc 100644
--- a/src/mame/drivers/lethalj.cpp
+++ b/src/mame/drivers/lethalj.cpp
@@ -216,7 +216,7 @@ void lethalj_state::lethalj_map(address_map &map)
map(0x04000000, 0x0400000f).rw("oki1", FUNC(okim6295_device::read), FUNC(okim6295_device::write)).umask16(0x00ff);
map(0x04000010, 0x0400001f).rw("oki2", FUNC(okim6295_device::read), FUNC(okim6295_device::write)).umask16(0x00ff);
map(0x04100000, 0x0410000f).rw("oki3", FUNC(okim6295_device::read), FUNC(okim6295_device::write)).umask16(0x00ff);
-// AM_RANGE(0x04100010, 0x0410001f) AM_READNOP /* read but never examined */
+// map(0x04100010, 0x0410001f).nopr(); /* read but never examined */
map(0x04200000, 0x0420001f).nopw(); /* clocks bits through here */
map(0x04300000, 0x0430007f).r(FUNC(lethalj_state::lethalj_gun_r));
map(0x04400000, 0x0440000f).nopw(); /* clocks bits through here */
diff --git a/src/mame/drivers/lgp.cpp b/src/mame/drivers/lgp.cpp
index 76b21aa9428..40406511a3f 100644
--- a/src/mame/drivers/lgp.cpp
+++ b/src/mame/drivers/lgp.cpp
@@ -173,7 +173,7 @@ void lgp_state::main_program_map(address_map &map)
map(0xe000, 0xe3ff).ram().share("tile_ram");
map(0xe400, 0xe7ff).ram().share("tile_ctrl_ram");
-// AM_RANGE(0xef00,0xef00) AM_READ_PORT("IN_TEST")
+// map(0xef00, 0xef00).portr("IN_TEST");
map(0xef80, 0xef80).rw(FUNC(lgp_state::ldp_read), FUNC(lgp_state::ldp_write));
map(0xefb8, 0xefb8).nopr(); // watchdog
map(0xefc0, 0xefc0).portr("DSWA"); /* Not tested */
@@ -197,8 +197,8 @@ void lgp_state::sound_program_map(address_map &map)
void lgp_state::main_io_map(address_map &map)
{
map.global_mask(0xff);
-// AM_RANGE(0xfd,0xfd) AM_READ_PORT("IN_TEST")
-// AM_RANGE(0xfe,0xfe) AM_READ_PORT("IN_TEST")
+// map(0xfd,0xfd).portr("IN_TEST");
+// map(0xfe,0xfe).portr("IN_TEST");
}
void lgp_state::sound_io_map(address_map &map)
diff --git a/src/mame/drivers/liberate.cpp b/src/mame/drivers/liberate.cpp
index 22f06f39dde..1753bde6cb5 100644
--- a/src/mame/drivers/liberate.cpp
+++ b/src/mame/drivers/liberate.cpp
@@ -298,7 +298,7 @@ void liberate_state::deco16_io_map(address_map &map)
void liberate_state::prosoccr_io_map(address_map &map)
{
map(0x00, 0x00).portr("IN0").w(FUNC(liberate_state::prosoccr_io_bank_w));
- //AM_RANGE(0x01, 0x01) AM_READ_PORT("TILT")
+ //map(0x01, 0x01).portr("TILT");
}
void liberate_state::liberatb_map(address_map &map)
diff --git a/src/mame/drivers/liberatr.cpp b/src/mame/drivers/liberatr.cpp
index 994525ae507..ad85bacf248 100644
--- a/src/mame/drivers/liberatr.cpp
+++ b/src/mame/drivers/liberatr.cpp
@@ -324,7 +324,7 @@ void liberatr_state::liberat2_map(address_map &map)
map(0x4e00, 0x4e3f).nopr().w(FUNC(liberatr_state::earom_w));
map(0x5000, 0x501f).rw("pokey2", FUNC(pokey_device::read), FUNC(pokey_device::write));
map(0x5800, 0x581f).rw("pokey1", FUNC(pokey_device::read), FUNC(pokey_device::write));
- //AM_RANGE(0x6000, 0x601f) AM_WRITE(pokey1_w) /* bug ??? */
+ //map(0x6000, 0x601f).w(FUNC(liberatr_state::pokey1_w)); /* bug ??? */
map(0x6000, 0xbfff).rom();
map(0xfffa, 0xffff).rom();
}
diff --git a/src/mame/drivers/ltd.cpp b/src/mame/drivers/ltd.cpp
index 7ca3f4a4eae..d3d2c010dd3 100644
--- a/src/mame/drivers/ltd.cpp
+++ b/src/mame/drivers/ltd.cpp
@@ -114,7 +114,7 @@ void ltd_state::ltd4_map(address_map &map)
map(0x1000, 0x1000).w("aysnd_0", FUNC(ay8910_device::address_w));
map(0x1400, 0x1400).w("aysnd_0", FUNC(ay8910_device::reset_w));
map(0x1800, 0x1800).w("aysnd_1", FUNC(ay8910_device::address_w));
- //AM_RANGE(0x2800, 0x2800) AM_WRITE(auxlamps_w)
+ //map(0x2800, 0x2800).w(FUNC(ltd_state::auxlamps_w));
map(0x3000, 0x3000).w("aysnd_0", FUNC(ay8910_device::data_w));
map(0x3800, 0x3800).w("aysnd_1", FUNC(ay8910_device::data_w));
map(0xc000, 0xdfff).rom().mirror(0x2000).region("roms", 0);
diff --git a/src/mame/drivers/luckgrln.cpp b/src/mame/drivers/luckgrln.cpp
index 6d9274abd21..541f9446497 100644
--- a/src/mame/drivers/luckgrln.cpp
+++ b/src/mame/drivers/luckgrln.cpp
@@ -318,8 +318,7 @@ void luckgrln_state::mainmap(address_map &map)
map(0x0ce00, 0x0cfff).ram().w(FUNC(luckgrln_state::reel_attr_w<3>)).share("reel_attr.3");
map(0x0d600, 0x0d63f).ram().share("reel_scroll.3");
-// AM_RANGE(0x0d200, 0x0d2ff) AM_RAM
-
+// map(0x0d200, 0x0d2ff).ram();
map(0x0d800, 0x0dfff).ram(); // nvram
@@ -480,7 +479,7 @@ void luckgrln_state::common_portmap(address_map &map)
map(0x00f8, 0x00f8).portr("DSW2");
map(0x00f9, 0x00f9).portr("DSW3");
map(0x00fa, 0x00fa).portr("DSW4");
- map(0x00fb, 0x00fb).portr("DSW5"); //AM_WRITENOP
+ map(0x00fb, 0x00fb).portr("DSW5"); //.nopw();
map(0x00fc, 0x00fc).nopw();
map(0x00fd, 0x00fd).nopw();
map(0x00fe, 0x00fe).nopw();
diff --git a/src/mame/drivers/lvcards.cpp b/src/mame/drivers/lvcards.cpp
index 8087ba806a6..1ef5e5f099c 100644
--- a/src/mame/drivers/lvcards.cpp
+++ b/src/mame/drivers/lvcards.cpp
@@ -160,7 +160,7 @@ void lvpoker_state::ponttehk_map(address_map &map)
map(0x8400, 0x87ff).ram().w(FUNC(lvpoker_state::colorram_w)).share("colorram");
map(0xa000, 0xa000).portr("IN0");
map(0xa001, 0xa001).portr("IN1").nopw(); // lamps
- map(0xa002, 0xa002).r(FUNC(lvpoker_state::payout_r)).w(FUNC(lvpoker_state::control_port_2a_w));//AM_WRITENOP // ???
+ map(0xa002, 0xa002).r(FUNC(lvpoker_state::payout_r)).w(FUNC(lvpoker_state::control_port_2a_w));//.nopw(); // ???
}
void lvcards_state::lvcards_map(address_map &map)
diff --git a/src/mame/drivers/lwings.cpp b/src/mame/drivers/lwings.cpp
index 1080b4661e4..e6b80ef5e8e 100644
--- a/src/mame/drivers/lwings.cpp
+++ b/src/mame/drivers/lwings.cpp
@@ -978,6 +978,15 @@ void lwings_state::lwings(machine_config &config)
ym2203b.add_route(3, "mono", 0.10);
}
+void lwings_state::sectionz(machine_config &config)
+{
+ lwings(config);
+
+ m_maincpu->set_clock(XTAL(12'000'000)/4); // XTAL and clock verified on an original PCB and on a bootleg with ROMs matching those of sectionza
+
+ subdevice<screen_device>("screen")->set_refresh_hz(55.37); // verified on an original PCB
+}
+
void lwings_state::fball(machine_config &config)
{
/* basic machine hardware */
@@ -1779,8 +1788,8 @@ void lwings_state::init_avengersb()
*
*************************************/
-GAME( 1985, sectionz, 0, lwings, sectionz, lwings_state, empty_init, ROT0, "Capcom", "Section Z (set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1985, sectionza, sectionz, lwings, sectionz, lwings_state, empty_init, ROT0, "Capcom", "Section Z (set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1985, sectionz, 0, sectionz, sectionz, lwings_state, empty_init, ROT0, "Capcom", "Section Z (set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1985, sectionza, sectionz, sectionz, sectionz, lwings_state, empty_init, ROT0, "Capcom", "Section Z (set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, lwings, 0, lwings, lwings, lwings_state, empty_init, ROT90, "Capcom", "Legendary Wings (US set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, lwings2, lwings, lwings, lwings, lwings_state, empty_init, ROT90, "Capcom", "Legendary Wings (US set 2)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/lwriter.cpp b/src/mame/drivers/lwriter.cpp
index d57bf05e488..8e5b4679bc6 100644
--- a/src/mame/drivers/lwriter.cpp
+++ b/src/mame/drivers/lwriter.cpp
@@ -209,7 +209,7 @@ void lwriter_state::maincpu_map(address_map &map)
map.unmap_value_high();
map(0x000000, 0x1fffff).rw(FUNC(lwriter_state::bankedarea_r), FUNC(lwriter_state::bankedarea_w));
map(0x200000, 0x2fffff).rom().region("rom", 0); // 1MB ROM
- //AM_RANGE(0x300000, 0x3fffff) // open bus?
+ //map(0x300000, 0x3fffff) // open bus?
map(0x400000, 0x5fffff).ram().region("dram", 0).mirror(0x200000); // 2MB DRAM
map(0x800000, 0x800000).w(FUNC(lwriter_state::led_out_w)).mirror(0x1ffffe); // mirror is a guess given that the pals can only decode A18-A23
map(0x800001, 0x800001).w(FUNC(lwriter_state::fifo_out_w)).mirror(0x1ffffe); // mirror is a guess given that the pals can only decode A18-A23
diff --git a/src/mame/drivers/m24.cpp b/src/mame/drivers/m24.cpp
index 9d0060d4a88..051ad34034a 100644
--- a/src/mame/drivers/m24.cpp
+++ b/src/mame/drivers/m24.cpp
@@ -11,6 +11,12 @@
The AT&T PC6300, the Xerox 6060 and the Logabax Persona 1600 were
badge-engineered Olivetti M24s.
+ The Olivetti M21 was a portable version of the M24 that sported a 9"
+ monochrome monitor.
+
+ http://www.computinghistory.org.uk/det/43175/Olivetti-M21/
+ https://www.nightfallcrew.com/23/02/2014/repairing-a-defective-olivetti-m21/
+
****************************************************************************/
#include "emu.h"
@@ -613,6 +619,15 @@ void m24_state::olivetti(machine_config &config)
SOFTWARE_LIST(config, "disk_list").set_original("ibm5150");
}
+ROM_START( m21 )
+ ROM_REGION16_LE(0x8000,"bios", 0)
+ ROMX_LOAD( "bios_m24_144_even.bin", 0x4000, 0x2000, CRC(5f3d7084) SHA1(d55c0d8472b45e4c4ca9cb0066cd5c122056ba8e), ROM_SKIP(1))
+ ROMX_LOAD( "bios_m24_144_odd.bin", 0x4001, 0x2000, CRC(18fd8db8) SHA1(f2c9d189f7ded88946a99432abd7106d509a7411), ROM_SKIP(1))
+
+ ROM_REGION(0x800, "kbc", 0)
+ ROM_LOAD("pdbd.tms2516.kbdmcu_replacement_board.10u", 0x000, 0x800, CRC(b8c4c18a) SHA1(25b4c24e19ff91924c53557c66513ab242d926c6))
+ROM_END
+
ROM_START( m24 )
ROM_REGION16_LE(0x8000,"bios", 0)
ROM_SYSTEM_BIOS(0,"v1.1","v1.1")
@@ -645,5 +660,6 @@ ROM_START( m240 )
ROM_LOAD("pdbd.tms2516.kbdmcu_replacement_board.10u", 0x000, 0x800, BAD_DUMP CRC(b8c4c18a) SHA1(25b4c24e19ff91924c53557c66513ab242d926c6))
ROM_END
+COMP( 1984, m21, ibm5150, 0, olivetti, m24, m24_state, empty_init, "Olivetti", "M21", MACHINE_NOT_WORKING )
COMP( 1983, m24, ibm5150, 0, olivetti, m24, m24_state, empty_init, "Olivetti", "M24", MACHINE_NOT_WORKING )
COMP( 1987, m240, ibm5150, 0, olivetti, m24, m24_state, empty_init, "Olivetti", "M240", MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/m5.cpp b/src/mame/drivers/m5.cpp
index de358f074d6..337f86df98b 100644
--- a/src/mame/drivers/m5.cpp
+++ b/src/mame/drivers/m5.cpp
@@ -730,7 +730,7 @@ void m5_state::m5_io(address_map &map)
map(0x37, 0x37).mirror(0x08).portr("JOY");
map(0x40, 0x40).mirror(0x0f).w("cent_data_out", FUNC(output_latch_device::bus_w));
map(0x50, 0x50).mirror(0x0f).rw(FUNC(m5_state::sts_r), FUNC(m5_state::com_w));
-// AM_RANGE(0x60, 0x63) SIO
+// map(0x60, 0x63) SIO
map(0x6c, 0x6c).rw(FUNC(m5_state::mem64KBI_r), FUNC(m5_state::mem64KBI_w)); //EM-64/64KBI paging
map(0x70, 0x73) /*.mirror(0x0c) don't know if necessary mirror this*/ .rw(I8255A_TAG, FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0x7f, 0x7f).w(FUNC(m5_state::mem64KRX_w)); //64KRD/64KRX paging
@@ -1051,11 +1051,11 @@ void brno_state::brno_io(address_map &map)
map(0x37, 0x37).portr("JOY");
map(0x40, 0x40).mirror(0x0f).w("cent_data_out", FUNC(output_latch_device::bus_w));
map(0x50, 0x50).mirror(0x0f).rw(FUNC(brno_state::sts_r), FUNC(brno_state::com_w));
-// AM_RANGE(0x60, 0x63) // SIO
+// map(0x60, 0x63) // SIO
map(0x64, 0x67).rw(FUNC(brno_state::mmu_r), FUNC(brno_state::mmu_w)); // MMU - page select (ramdisk memory paging)
map(0x68, 0x6b).rw(FUNC(brno_state::ramsel_r), FUNC(brno_state::ramsel_w)); // CASEN 0=access to ramdisk enabled, 0xff=ramdisk access disabled(data protection), &80=ROM2+48k RAM, &81=ROM2+4k RAM
map(0x6c, 0x6f).rw(FUNC(brno_state::romsel_r), FUNC(brno_state::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
+// map(0x70, 0x73).mirror(0x04).rw(I8255A_TAG, FUNC(i8255_device::read), FUNC(i8255_device::write)); // PIO
map(0x78, 0x7b).rw(m_fdc, FUNC(wd_fdc_device_base::read), FUNC(wd_fdc_device_base::write)); // WD2797 registers -> 78 - status/cmd, 79 - track #, 7a - sector #, 7b - data
map(0x7c, 0x7c).rw(FUNC(brno_state::fd_r), FUNC(brno_state::fd_w)); // drive select
}
diff --git a/src/mame/drivers/m72.cpp b/src/mame/drivers/m72.cpp
index b6da15f0d0a..ad2e7af2fa9 100644
--- a/src/mame/drivers/m72.cpp
+++ b/src/mame/drivers/m72.cpp
@@ -1018,7 +1018,7 @@ void m72_state::m84_v33_portmap(address_map &map)
map(0x82, 0x83).w(FUNC(m72_state::scrollx_w<0>));
map(0x84, 0x85).w(FUNC(m72_state::scrolly_w<1>));
map(0x86, 0x87).w(FUNC(m72_state::scrollx_w<1>));
-// AM_RANGE(0x8c, 0x8f) AM_WRITENOP /* ??? */
+// map(0x8c, 0x8f).nopw(); /* ??? */
}
@@ -1130,7 +1130,7 @@ void m72_state::rtype2_sound_portmap(address_map &map)
map(0x82, 0x82).w(m_audio, FUNC(m72_audio_device::sample_w));
map(0x83, 0x83).w("soundlatch", FUNC(generic_latch_8_device::acknowledge_w));
map(0x84, 0x84).r(m_audio, FUNC(m72_audio_device::sample_r));
-// AM_RANGE(0x87, 0x87) AM_WRITENOP /* ??? */
+// map(0x87, 0x87).nopw(); /* ??? */
}
void m72_state::poundfor_sound_portmap(address_map &map)
@@ -2454,6 +2454,7 @@ ROM_START( rtypeb )
ROM_LOAD( "rt_b-b3.3f", 0x18000, 0x08000, CRC(ad89b072) SHA1(e2683d0e7415f3abd147e518bf6c87e44744cd4f) )
ROM_END
+
ROM_START( bchopper )
ROM_REGION( 0x100000, "maincpu", 0 )
ROM_LOAD16_BYTE( "c-h0-b.rom", 0x00001, 0x10000, CRC(f2feab16) SHA1(03ee874658e0f59957f8425e1ebf9c938737cc19) )
@@ -2465,8 +2466,8 @@ ROM_START( bchopper )
ROM_LOAD16_BYTE( "c-l3-b.rom", 0x60000, 0x10000, CRC(11562221) SHA1(a2f136a487fb6f30350e8d1e26c0729eb0686c7d) )
ROM_RELOAD( 0xe0000, 0x10000 )
- ROM_REGION( 0x10000, "mcu", 0 )
- ROM_LOAD( "bchopper_i8751.mcu", 0x00000, 0x10000, NO_DUMP ) // read protected
+ ROM_REGION( 0x10000, "mcu", 0 ) /* i8751 microcontroller */
+ ROM_LOAD( "mh-c-pr-b.mcu", 0x00000, 0x10000, NO_DUMP ) // read protected
ROM_REGION( 0x080000, "sprites", 0 )
ROM_LOAD( "c-00-a.rom", 0x00000, 0x10000, CRC(f6e6e660) SHA1(e066e5ed37719cf2b6fd36e0117f11325bb06f9c) ) /* sprites */
@@ -2505,7 +2506,7 @@ ROM_START( mrheli )
ROM_LOAD16_BYTE( "mh-c-l3.bin", 0x60000, 0x10000, CRC(c0982536) SHA1(45399f8d0577c6e2a277a69303954ce5d2de7c07) )
ROM_RELOAD( 0xe0000, 0x10000 )
- ROM_REGION( 0x10000, "mcu", 0 )
+ ROM_REGION( 0x10000, "mcu", 0 ) /* i8751 microcontroller */
ROM_LOAD( "mh-c-pr.bin", 0x00000, 0x1000, CRC(897dc4ee) SHA1(05a24bf76e8fa9ca96ba9376cbf44d299df04138) )
ROM_REGION( 0x080000, "sprites", 0 )
@@ -2668,7 +2669,7 @@ ROM_START( nspirit )
ROM_LOAD16_BYTE( "nin_c-l3.6a", 0x60000, 0x10000, CRC(fd7408b8) SHA1(3cbe72835a561c50265a047f0f5cd62db48378fd) )
ROM_RELOAD( 0xe0000, 0x10000 )
- ROM_REGION( 0x10000, "mcu", 0 )
+ ROM_REGION( 0x10000, "mcu", 0 ) /* i8751 microcontroller */
ROM_LOAD( "nin_c-pr.1c", 0x00000, 0x01000, NO_DUMP ) // sldh - read protected
ROM_REGION( 0x080000, "sprites", 0 )
@@ -2702,7 +2703,6 @@ ROM_START( nspirit )
/* Located on M72-A-C CPU/Sound board */
ROM_LOAD( "m72_a-3d.3d", 0x0100, 0x0100, CRC(de85dac3) SHA1(af83b0325f28fbb1bcc424c1b58ff0f4b49f6b67) ) /* TBP16L8 */
ROM_LOAD( "m72_a-4d.4d", 0x0200, 0x0100, CRC(59676de1) SHA1(fcf35f5463c14a4b06d58684c47ea9de5216d1da) ) /* TBP16L8 */
-
ROM_END
ROM_START( nspiritj )
@@ -2718,7 +2718,7 @@ ROM_START( nspiritj )
ROM_LOAD16_BYTE( "c-l3", 0x60000, 0x10000, CRC(e754a87a) SHA1(9951d972ed13a0415c827beff122bc7ddb078447) )
ROM_RELOAD( 0xe0000, 0x10000 )
- ROM_REGION( 0x10000, "mcu", 0 )
+ ROM_REGION( 0x10000, "mcu", 0 ) /* i8751 microcontroller */
ROM_LOAD( "nin_c-pr.1c", 0x00000, 0x01000, CRC(802d440a) SHA1(45b844b831aa6d5d002e3960e17fb5a058b02a29) ) /* checksum correct for Japan version only (see test mode) */
ROM_REGION( 0x080000, "sprites", 0 )
@@ -2743,6 +2743,7 @@ ROM_START( nspiritj )
ROM_LOAD( "nin-v0.7a", 0x00000, 0x10000, CRC(a32e8caf) SHA1(63d56ad3a63fb089056e4a170159120287594ea8) )
ROM_END
+
ROM_START( imgfight )
ROM_REGION( 0x100000, "maincpu", 0 )
ROM_LOAD16_BYTE( "if-c-h0-a.bin", 0x00001, 0x10000, CRC(f5c94464) SHA1(5964a00d21ebb358eecc0f10f6221fb684f284df) )
@@ -2752,7 +2753,7 @@ ROM_START( imgfight )
ROM_LOAD16_BYTE( "if-c-l3.bin", 0x40000, 0x20000, CRC(c66ae348) SHA1(eca5096ebd5bffc6e68f3fc9969cda9679bd921f) )
ROM_RELOAD( 0xc0000, 0x20000 )
- ROM_REGION( 0x10000, "mcu", 0 )
+ ROM_REGION( 0x10000, "mcu", 0 ) /* i8751 microcontroller */
ROM_LOAD( "imgfight_i8751h.bin", 0x00000, 0x01000, NO_DUMP )
ROM_REGION( 0x080000, "sprites", 0 )
@@ -2787,8 +2788,8 @@ ROM_START( imgfightj )
ROM_LOAD16_BYTE( "if-c-l3.bin", 0x40000, 0x20000, CRC(c66ae348) SHA1(eca5096ebd5bffc6e68f3fc9969cda9679bd921f) )
ROM_RELOAD( 0xc0000, 0x20000 )
- ROM_REGION( 0x10000, "mcu", 0 )
- ROM_LOAD( "imgfightj_i8751h.bin", 0x00000, 0x01000, CRC(ef0d5098) SHA1(068b73937588e16a318a094dfe2fb1293b1a1711) )
+ ROM_REGION( 0x10000, "mcu", 0 ) /* i8751 microcontroller */
+ ROM_LOAD( "if_c-pr-.bin", 0x00000, 0x01000, CRC(ef0d5098) SHA1(068b73937588e16a318a094dfe2fb1293b1a1711) ) /* i8751 MCU labeled IF C-PR- */
ROM_REGION( 0x080000, "sprites", 0 )
ROM_LOAD( "if-c-00.bin", 0x00000, 0x20000, CRC(745e6638) SHA1(43fb1f9da4190fea67eee3aee8caf4219becc21b) ) /* sprites */
@@ -2858,15 +2859,15 @@ ROM_END
ROM_START( loht )
ROM_REGION( 0x100000, "maincpu", 0 )
- ROM_LOAD16_BYTE( "tom_c-h0.rom", 0x00001, 0x20000, CRC(a63204b6) SHA1(d217bc70650a1a1bbe0cf536ec3bb678f670718d) )
- ROM_LOAD16_BYTE( "tom_c-l0.rom", 0x00000, 0x20000, CRC(e788002f) SHA1(35f509976b342fd47e645453381faa3d86645876) )
+ ROM_LOAD16_BYTE( "tom_c-h0.rom", 0x00001, 0x20000, CRC(a63204b6) SHA1(d217bc70650a1a1bbe0cf536ec3bb678f670718d) ) /* Should be TOM C-H0-B ?? */
+ ROM_LOAD16_BYTE( "tom_c-l0.rom", 0x00000, 0x20000, CRC(e788002f) SHA1(35f509976b342fd47e645453381faa3d86645876) ) /* Should be TOM C-L0-B ?? */
ROM_LOAD16_BYTE( "tom_c-h3-", 0x40001, 0x20000, CRC(714778b5) SHA1(e2eaa35d6b5fa5df5163fe0d7b45fa66667f9947) )
ROM_RELOAD( 0xc0001, 0x20000 )
ROM_LOAD16_BYTE( "tom_c-l3-", 0x40000, 0x20000, CRC(2f049b03) SHA1(21047cb10912b1fc23795673af3ea7de249328b7) )
ROM_RELOAD( 0xc0000, 0x20000 )
- ROM_REGION( 0x10000, "mcu", 0 )
- ROM_LOAD( "loht_i8751.mcu", 0x00000, 0x10000, NO_DUMP ) // read protected
+ ROM_REGION( 0x10000, "mcu", 0 ) /* i8751 microcontroller */
+ ROM_LOAD( "loht_i8751.mcu", 0x00000, 0x10000, NO_DUMP ) // read protected - Should be TOM C-PR-B ??
ROM_REGION( 0x080000, "sprites", 0 )
ROM_LOAD( "tom_m53.rom", 0x00000, 0x20000, CRC(0b83265f) SHA1(b31918d6442b79c9fe4f20410189788b050a994e) ) /* sprites */
@@ -2959,7 +2960,7 @@ ROM_START( lohtj )
ROM_LOAD16_BYTE( "tom_c-l3-", 0x40000, 0x20000, CRC(2f049b03) SHA1(21047cb10912b1fc23795673af3ea7de249328b7) )
ROM_RELOAD( 0xc0000, 0x20000 )
- ROM_REGION( 0x10000, "mcu", 0 )
+ ROM_REGION( 0x10000, "mcu", 0 ) /* i8751 microcontroller */
ROM_LOAD( "tom_c-pr.bin", 0x00000, 0x01000, CRC(9fa9b496) SHA1(b529bcd7bf123894e11f2a8df8826932122e375a) )
ROM_REGION( 0x080000, "sprites", 0 )
@@ -3010,7 +3011,7 @@ ROM_START( lohtb )
ROM_LOAD( "lohtb16.13", 0x40000, 0x10000, CRC(25b85cfc) SHA1(c7a9962165379193dc6553ed1f977795a79e0f78) )
ROM_LOAD( "lohtb17.14", 0x60000, 0x10000, CRC(763fa4ec) SHA1(2d72b1b41f24ae299fde23869942c0b6bbb82363) )
ROM_LOAD( "lohtb18.15", 0x10000, 0x10000, CRC(d7ecf849) SHA1(ab86a88eae21e054d4e8a740a60c7c6c198232d4) )
- ROM_LOAD( "lohtb19.16", 0x30000, 0x10000, CRC(35d1a808) SHA1(9378ff000104ecfb842b3b884197be82c43a01b4))
+ ROM_LOAD( "lohtb19.16", 0x30000, 0x10000, CRC(35d1a808) SHA1(9378ff000104ecfb842b3b884197be82c43a01b4) )
ROM_LOAD( "lohtb20.17", 0x50000, 0x10000, CRC(464d8579) SHA1(b5981f4865ee5439f0e330091927e6d97d29933f) )
ROM_LOAD( "lohtb21.18", 0x70000, 0x10000, CRC(a73568c7) SHA1(8fe1867256708cc1ed76d1bed5566b1852b47c40) )
@@ -3092,7 +3093,7 @@ ROM_START( lohtb3 ) // extremely similar to the original. Copyright changed to 1
ROM_LOAD16_BYTE( "i-3.3", 0x60000, 0x10000, CRC(cfb0390d) SHA1(4acc61a51a7ae681bd8d835e2644b44c4d6d7bcb) )
ROM_RELOAD( 0xe0000, 0x10000 )
- ROM_REGION( 0x10000, "mcu", 0 )
+ ROM_REGION( 0x10000, "mcu", 0 ) /* i8751 microcontroller */
ROM_LOAD( "c8751h.bin", 0x00000, 0x01000, CRC(9c9545f1) SHA1(ca800ce7467efb877d0fff4c47d72478a991e2a9) )
ROM_REGION( 0x080000, "sprites", 0 )
@@ -3359,12 +3360,12 @@ ROM_START( loht_ms ) // really similar to lohtb, even if it runs on 'Modular Har
ROM_LOAD( "1_lg_1.ic12", 0x00000, 0x10000, CRC(7aa26b54) SHA1(01df7ea6443bbc775d5592edc32816853c857189) )
ROM_REGION( 0x080000, "sprites", 0 ) /* Sprites */
- ROM_LOAD( "5_lg_501.ic5", 0x00000, 0x10000, CRC(df5ac5ee) SHA1(5b45417ada402047d97dfb6cee6545686ad26e37) )
+ ROM_LOAD( "5_lg_501.ic5", 0x00000, 0x10000, CRC(df5ac5ee) SHA1(5b45417ada402047d97dfb6cee6545686ad26e37) )
ROM_LOAD( "5_lg_503.ic14", 0x20000, 0x10000, CRC(45220b01) SHA1(83715cf155f91c82067d69f14b3b01ed77777b7d) )
ROM_LOAD( "5_lg_505.ic20", 0x40000, 0x10000, CRC(25b85cfc) SHA1(c7a9962165379193dc6553ed1f977795a79e0f78) )
ROM_LOAD( "5_lg_507.ic26", 0x60000, 0x10000, CRC(763fa4ec) SHA1(2d72b1b41f24ae299fde23869942c0b6bbb82363) )
ROM_LOAD( "5_lg_502.ic6", 0x10000, 0x10000, CRC(d7ecf849) SHA1(ab86a88eae21e054d4e8a740a60c7c6c198232d4) )
- ROM_LOAD( "5_lg_504.ic15", 0x30000, 0x10000, CRC(35d1a808) SHA1(9378ff000104ecfb842b3b884197be82c43a01b4))
+ ROM_LOAD( "5_lg_504.ic15", 0x30000, 0x10000, CRC(35d1a808) SHA1(9378ff000104ecfb842b3b884197be82c43a01b4) )
ROM_LOAD( "5_lg_506.ic21", 0x50000, 0x10000, CRC(464d8579) SHA1(b5981f4865ee5439f0e330091927e6d97d29933f) )
ROM_LOAD( "5_lg_508.ic27", 0x70000, 0x10000, CRC(a73568c7) SHA1(8fe1867256708cc1ed76d1bed5566b1852b47c40) )
@@ -3404,6 +3405,7 @@ ROM_START( loht_ms ) // really similar to lohtb, even if it runs on 'Modular Har
ROM_LOAD( "7_7636_gal20v8-25lp.ic44", 0x0, 0x1, NO_DUMP )
ROM_END
+
ROM_START( xmultiplm72 )
ROM_REGION( 0x100000, "maincpu", 0 )
ROM_LOAD16_BYTE( "ch3.h3", 0x00001, 0x20000, CRC(20685021) SHA1(92f4216320bf525045223b9454fb5bb224c536d8) )
@@ -3413,8 +3415,8 @@ ROM_START( xmultiplm72 )
ROM_LOAD16_BYTE( "cl0.l0", 0x40000, 0x10000, CRC(06a9e213) SHA1(9831c110814642703d6e71d49848d854095b7d3a) )
ROM_RELOAD( 0xe0000, 0x10000 )
- ROM_REGION( 0x10000, "mcu", 0 )
- ROM_LOAD( "xmultipl_i8751h.bin", 0x00000, 0x01000, CRC(c8ceb3cd) SHA1(e5d20a3a9d7f0919604543c97643a03434d80130) )
+ ROM_REGION( 0x10000, "mcu", 0 ) /* i8751 microcontroller */
+ ROM_LOAD( "xm_c-pr-.mcu", 0x00000, 0x01000, CRC(c8ceb3cd) SHA1(e5d20a3a9d7f0919604543c97643a03434d80130) )
ROM_REGION( 0x100000, "sprites", 0 )
ROM_LOAD( "t44.00", 0x00000, 0x20000, CRC(db45186e) SHA1(8c8edeb4b7e6b0516f2597823dc27eba9c5d9528) ) /* sprites */
@@ -3443,9 +3445,6 @@ ROM_START( xmultiplm72 )
ROM_END
-
-
-
ROM_START( dbreedm72 )
ROM_REGION( 0x100000, "maincpu", 0 )
ROM_LOAD16_BYTE( "db_c-h3.rom", 0x00001, 0x20000, CRC(4bf3063c) SHA1(3f970c9ece2ac700738e217e0b31b3aba2848ab2) )
@@ -3455,7 +3454,41 @@ ROM_START( dbreedm72 )
ROM_LOAD16_BYTE( "db_c-l0.rom", 0x60000, 0x10000, CRC(ed0f5e06) SHA1(9030840b15e83c18d59c884ed08c93c05fa70c5b) )
ROM_RELOAD( 0xe0000, 0x10000 )
- ROM_REGION( 0x10000, "mcu", 0 )
+ ROM_REGION( 0x10000, "mcu", 0 ) /* i8751 microcontroller */
+ ROM_LOAD( "dbreedm72_i8751.mcu", 0x00000, 0x10000, NO_DUMP ) // read protected
+
+ ROM_REGION( 0x080000, "sprites", 0 )
+ ROM_LOAD( "db_k800m.00", 0x00000, 0x20000, CRC(c027a8cf) SHA1(534dc416b8f5587168c7f644d3f9438c8a190491) ) /* sprites */
+ ROM_LOAD( "db_k801m.10", 0x20000, 0x20000, CRC(093faf33) SHA1(2704f644cdce87daf975984f143b1d55ba731c3f) )
+ ROM_LOAD( "db_k802m.20", 0x40000, 0x20000, CRC(055b4c59) SHA1(71315dd7476612f138cb64b905648791d44eb7da) )
+ ROM_LOAD( "db_k803m.30", 0x60000, 0x20000, CRC(8ed63922) SHA1(51daa8a23e637f6b4394598ff4a1d26f65b59c8b) )
+
+ ROM_REGION( 0x080000, "gfx2", 0 ) // same roms are duplicated at a0-a3 and b0-b3, confirmed
+ ROM_LOAD( "db_k804m.a0", 0x00000, 0x20000, CRC(4c83e92e) SHA1(6dade027435c48ab48bd4516d16a9961d4dd6fad) ) /* tiles #1 */
+ ROM_LOAD( "db_k805m.a1", 0x20000, 0x20000, CRC(835ef268) SHA1(89d0bb15201440dffad3ef745970f95505d7ab03) )
+ ROM_LOAD( "db_k806m.a2", 0x40000, 0x20000, CRC(5117f114) SHA1(a401a3e638209b32d4101a5c2e2a8b4612eaa21b) )
+ ROM_LOAD( "db_k807m.a3", 0x60000, 0x20000, CRC(8eb0c978) SHA1(7fc55bbe4d0923db88492bb7160a89de34e11cd6) )
+
+ ROM_REGION( 0x080000, "gfx3", 0 )
+ ROM_LOAD( "db_k804m.b0", 0x00000, 0x20000, CRC(4c83e92e) SHA1(6dade027435c48ab48bd4516d16a9961d4dd6fad) ) /* tiles #2 */
+ ROM_LOAD( "db_k805m.b1", 0x20000, 0x20000, CRC(835ef268) SHA1(89d0bb15201440dffad3ef745970f95505d7ab03) )
+ ROM_LOAD( "db_k806m.b2", 0x40000, 0x20000, CRC(5117f114) SHA1(a401a3e638209b32d4101a5c2e2a8b4612eaa21b) )
+ ROM_LOAD( "db_k807m.b3", 0x60000, 0x20000, CRC(8eb0c978) SHA1(7fc55bbe4d0923db88492bb7160a89de34e11cd6) )
+
+ ROM_REGION( 0x20000, "samples", 0 ) /* samples */
+ ROM_LOAD( "db_c-v0.rom", 0x00000, 0x20000, CRC(312f7282) SHA1(742d56980b4618180e9a0e02051c5aec4d5cdae4) )
+ROM_END
+
+ROM_START( dbreedm72j ) // with matching i8751 this set boots with a Japanese warning screen
+ ROM_REGION( 0x100000, "maincpu", 0 )
+ ROM_LOAD16_BYTE( "db_c-h3.ic43", 0x00001, 0x20000, CRC(43425d67) SHA1(a87339bf299f7e84b9a181f3827278f64a6a29ea) )
+ ROM_LOAD16_BYTE( "db_c-l3.ic34", 0x00000, 0x20000, CRC(9c1abc85) SHA1(6c73fbec12a7795e327381d886a87bca09a7dff0) )
+ ROM_LOAD16_BYTE( "db_c-h0.rom", 0x60001, 0x10000, CRC(5aa79fb2) SHA1(b7b862699ddccf90cf18d3822703078668aa1dc7) )
+ ROM_RELOAD( 0xe0001, 0x10000 )
+ ROM_LOAD16_BYTE( "db_c-l0.rom", 0x60000, 0x10000, CRC(ed0f5e06) SHA1(9030840b15e83c18d59c884ed08c93c05fa70c5b) )
+ ROM_RELOAD( 0xe0000, 0x10000 )
+
+ ROM_REGION( 0x10000, "mcu", 0 ) /* i8751 microcontroller */
ROM_LOAD( "dbreedm72_i8751.mcu", 0x00000, 0x10000, NO_DUMP ) // read protected
ROM_REGION( 0x080000, "sprites", 0 )
@@ -3480,6 +3513,7 @@ ROM_START( dbreedm72 )
ROM_LOAD( "db_c-v0.rom", 0x00000, 0x20000, CRC(312f7282) SHA1(742d56980b4618180e9a0e02051c5aec4d5cdae4) )
ROM_END
+
ROM_START( dkgensanm72 )
ROM_REGION( 0x100000, "maincpu", 0 )
ROM_LOAD16_BYTE( "ge72-h0.bin", 0x00001, 0x20000, CRC(a0ad992c) SHA1(6de4105d8454c4e4e62762fdd7e22829acc2442b) )
@@ -3489,7 +3523,7 @@ ROM_START( dkgensanm72 )
ROM_LOAD16_BYTE( "ge72-l3.bin", 0x60000, 0x10000, CRC(23d303a5) SHA1(b62010f34d71afb590deae458493454f9af38f7c) )
ROM_RELOAD( 0xe0000, 0x10000 )
- ROM_REGION( 0x10000, "mcu", 0 )
+ ROM_REGION( 0x10000, "mcu", 0 ) /* i8751 microcontroller */
ROM_LOAD( "dkgenm72_i8751.mcu", 0x00000, 0x10000, NO_DUMP ) // read protected
ROM_REGION( 0x080000, "sprites", 0 )
@@ -3524,8 +3558,8 @@ ROM_START( airduelm72 )
ROM_LOAD16_BYTE( "ad-c-l3.ic34", 0x40000, 0x20000, CRC(9dd343f7) SHA1(9f499936b6d3807aa5b5c18e9811c73c9a2c99f9) )
ROM_RELOAD( 0xc0000, 0x20000 )
- ROM_REGION( 0x1000, "mcu", 0 )
- ROM_LOAD( "ad_c_pr.mcu", 0x00000, 0x1000, NO_DUMP ) // D8751H, read protected
+ ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
+ ROM_LOAD( "ad_c-pr-.mcu", 0x00000, 0x1000, NO_DUMP ) // D8751H, read protected
ROM_REGION( 0x080000, "sprites", 0 )
ROM_LOAD( "ad-00.ic53", 0x00000, 0x20000, CRC(2f0d599b) SHA1(a966f806b5e25bb98cc63c46c49e0e676a62afcf) )
@@ -3552,6 +3586,7 @@ ROM_START( airduelm72 )
ROM_LOAD( "ad-c-3f.ic13", 0x000, 0x104, NO_DUMP ) // unknown type of PAL
ROM_END
+
ROM_START( gallop )
ROM_REGION( 0x100000, "maincpu", 0 )
ROM_LOAD16_BYTE( "cc-c-h0.bin", 0x00001, 0x20000, CRC(2217dcd0) SHA1(9485b6c3eec99e720439e69dcbe0e55798bbff1c) )
@@ -3561,7 +3596,7 @@ ROM_START( gallop )
ROM_LOAD16_BYTE( "cc-c-l3.bin", 0x40000, 0x20000, CRC(acd3278e) SHA1(83d7ddfbdb4bc9548a179b728351a21b3b0ac134) )
ROM_RELOAD( 0xc0000, 0x20000 )
- ROM_REGION( 0x10000, "mcu", 0 )
+ ROM_REGION( 0x10000, "mcu", 0 ) /* i8751 microcontroller */
ROM_LOAD( "gallop_i8751.mcu", 0x00000, 0x10000, NO_DUMP ) // read protected (only used for sample triggering, not supplying code / warning screens)
ROM_REGION( 0x080000, "sprites", 0 )
@@ -3587,13 +3622,10 @@ ROM_START( gallop )
ROM_END
-
-
/*****************************
M81 sets
******************************/
-
ROM_START( xmultipl )
ROM_REGION( 0x100000, "maincpu", 0 )
ROM_LOAD16_BYTE( "xm-a-h1-.ic58", 0x00001, 0x20000, CRC(449048cf) SHA1(871b588177fb018937d143f76eda18aa53b0f6c4) )
@@ -3669,6 +3701,7 @@ ROM_START( hharry )
ROM_LOAD( "a-v0-0.rom", 0x00000, 0x20000, CRC(faaacaff) SHA1(ea3a3920255c07aa9c0a7e0191eae257a9f7f558) )
ROM_END
+
ROM_START( dbreed )
ROM_REGION( 0x100000, "maincpu", 0 )
ROM_LOAD16_BYTE( "db-a-h0-.59", 0x00001, 0x10000, CRC(e1177267) SHA1(f226f34ce85305870e659dd4f519bee30936af9a) )
@@ -3773,6 +3806,7 @@ ROM_START( majtitlej )
ROM_LOAD( "mt_vo.bin", 0x00000, 0x20000, CRC(eb24bb2c) SHA1(9fca04fba0249e8213dd164eb6829e1a5acbee65) )
ROM_END
+
ROM_START( airduel )
ROM_REGION( 0x100000, "maincpu", 0 )
ROM_LOAD16_BYTE( "ad_=m82=_a-h0-d.ic52", 0x00001, 0x20000, CRC(dbecc726) SHA1(526e9fdf0ca3af3eae462524df71af8e6bfa85d0) )
@@ -3842,6 +3876,7 @@ ROM_START( rtypem82b )
ROM_LOAD( "mt_vo.bin", 0x00000, 0x20000, CRC(eb24bb2c) SHA1(9fca04fba0249e8213dd164eb6829e1a5acbee65) )
ROM_END
+
ROM_START( rtype2m82b )
ROM_REGION( 0x100000, "maincpu", 0 )
ROM_LOAD16_BYTE( "rt2_h0.bin", 0x00001, 0x20000, CRC(47639a78) SHA1(d7dd851fed96d46c850e5c8f24d9d1a081f6b297) )
@@ -3861,7 +3896,7 @@ ROM_START( rtype2m82b )
ROM_LOAD( "rt2_n3.bin", 0x60000, 0x20000, CRC(db6176fc) SHA1(1eaf72af0322490c98461aded202288e387caac1) )
ROM_REGION( 0x100000, "gfx2", 0 )
- ROM_LOAD( "rt2_c0.bin", 0x00000, 0x40000, CRC(f5bad5f2) SHA1(dc86b93f62e8947e3551f07e393e740e5dc43f5e)) /* tiles */
+ ROM_LOAD( "rt2_c0.bin", 0x00000, 0x40000, CRC(f5bad5f2) SHA1(dc86b93f62e8947e3551f07e393e740e5dc43f5e) ) /* tiles */
ROM_LOAD( "rt2_c1.bin", 0x40000, 0x40000, CRC(71451778) SHA1(52ca7aa8522b988a19556313041450c767dad054) )
ROM_LOAD( "rt2_c2.bin", 0x80000, 0x40000, CRC(c6b0c352) SHA1(eec4fa88c27815960106881e7ccb23e62556bf1c) )
ROM_LOAD( "rt2_c3.bin", 0xc0000, 0x40000, CRC(6d530a32) SHA1(4e4100e5e5d88e65fb5494474d3692ecd8f44343) )
@@ -3876,6 +3911,7 @@ ROM_START( rtype2m82b )
ROM_LOAD( "rt2_vo.bin", 0x00000, 0x20000, CRC(637172d5) SHA1(9dd0dc409306287238826bf301e2a7a12d6cd9ce) )
ROM_END
+
ROM_START( dkgensanm82 )
ROM_REGION( 0x100000, "maincpu", 0 )
ROM_LOAD16_BYTE( "gen_=m84=_a-h0-d.ic52", 0x00001, 0x20000, CRC(a1ca8855) SHA1(19b0ec1a03af114aa4f02630ace67c277ebce60f) )
@@ -4080,7 +4116,6 @@ ROM_START( dkgensan )
ROM_END
-
ROM_START( cosmccop )
ROM_REGION( 0x100000, "maincpu", 0 )
ROM_LOAD16_BYTE( "cc-d-h0b.bin", 0x00001, 0x40000, CRC(38958b01) SHA1(7d7e217742e33a1fe096adf5bbc93d63ddcfb375) )
@@ -4134,8 +4169,6 @@ ROM_START( ltswords )
ROM_LOAD( "ken_m14.rom", 0x00000, 0x20000, CRC(6651e9b7) SHA1(c42009f986c9a9f35732d5cd717d548536469b1c) )
ROM_END
-
-
ROM_START( kengo )
ROM_REGION( 0x100000, "maincpu", 0 )
ROM_LOAD16_BYTE( "ken_d-h0.rom", 0x00001, 0x20000, CRC(f4ddeea5) SHA1(bcf016e40886e11c171f2f50de39ac0d8cabcdd1) )
@@ -4162,13 +4195,12 @@ ROM_START( kengo )
ROM_LOAD( "ken_m14.rom", 0x00000, 0x20000, CRC(6651e9b7) SHA1(c42009f986c9a9f35732d5cd717d548536469b1c) )
ROM_END
-
ROM_START( kengoa )
ROM_REGION( 0x100000, "maincpu", 0 )
- ROM_LOAD16_BYTE( "ken-d-h0-.ic55", 0x00001, 0x20000, CRC(ed3da88c) SHA1(536824eb3347eade2d3aad927e83eae51ee852b3) )
- ROM_RELOAD( 0xc0001, 0x20000 )
- ROM_LOAD16_BYTE( "ken-d-l0-.ic61", 0x00000, 0x20000, CRC(92c57d8e) SHA1(eb078a7b261e13cfb0a920b5115beee917b8d89c))
- ROM_RELOAD( 0xc0000, 0x20000 )
+ ROM_LOAD16_BYTE( "ken-d-h0-.ic55", 0x00001, 0x20000, CRC(ed3da88c) SHA1(536824eb3347eade2d3aad927e83eae51ee852b3) ) // shows 'for use in Japan' message, kengo set above doesn't
+ ROM_RELOAD( 0xc0001, 0x20000 )
+ ROM_LOAD16_BYTE( "ken-d-l0-.ic61", 0x00000, 0x20000, CRC(92c57d8e) SHA1(eb078a7b261e13cfb0a920b5115beee917b8d89c) )
+ ROM_RELOAD( 0xc0000, 0x20000 )
ROM_REGION( 0x10000, "soundcpu", 0 )
ROM_LOAD( "ken_d-sp.rom", 0x00000, 0x10000, CRC(233ca1cf) SHA1(4ebb6162773bd586a10016ccd77998a9b880f474) )
@@ -4288,21 +4320,20 @@ ROM_END
// despite having Japanese version MCU roms for several of them. See notes next to the sets
/* M72 */
-
GAME( 1987, rtype, 0, rtype, rtype, m72_state, empty_init, ROT0, "Irem", "R-Type (World)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1987, rtypej, rtype, rtype, rtype, m72_state, empty_init, ROT0, "Irem", "R-Type (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1987, rtypejp, rtype, rtype, rtypep, m72_state, empty_init, ROT0, "Irem", "R-Type (Japan prototype)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1987, rtypeu, rtype, rtype, rtype, m72_state, empty_init, ROT0, "Irem (Nintendo of America license)", "R-Type (US)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1987, rtypeb, rtype, rtype, rtype, m72_state, empty_init, ROT0, "bootleg", "R-Type (World bootleg)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
-GAME( 1987, bchopper, 0, m72, bchopper, m72_state, init_bchopper, ROT0, "Irem", "Battle Chopper", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
-GAME( 1987, mrheli, bchopper, mrheli, bchopper, m72_state, init_m72_8751, ROT0, "Irem", "Mr. HELI no Daibouken (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 1987, bchopper, 0, m72, bchopper, m72_state, init_bchopper, ROT0, "Irem", "Battle Chopper (World)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 1987, mrheli, bchopper, mrheli, bchopper, m72_state, init_m72_8751, ROT0, "Irem", "Mr. HELI no Daibouken (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
-GAME( 1988, nspirit, 0, m72, nspirit, m72_state, init_nspirit, ROT0, "Irem", "Ninja Spirit", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // doesn't wait / check for japan warning string.. fails rom check if used with japanese mcu rom (World version?)
-GAME( 1988, nspiritj, nspirit, nspiritj, nspirit, m72_state, init_m72_8751, ROT0, "Irem", "Saigo no Nindou (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // waits for japan warning screen, works with our mcu dump, corrupt warning screen due to priority / mixing errors (Japan Version)
+GAME( 1988, nspirit, 0, m72, nspirit, m72_state, init_nspirit, ROT0, "Irem", "Ninja Spirit", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // doesn't wait / check for japan warning string.. fails rom check if used with japanese mcu rom (World version?)
+GAME( 1988, nspiritj, nspirit, nspiritj, nspirit, m72_state, init_m72_8751, ROT0, "Irem", "Saigo no Nindou (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
-GAME( 1988, imgfight, 0, m72, imgfight, m72_state, init_imgfight, ROT270, "Irem", "Image Fight (World, revision A)", MACHINE_SUPPORTS_SAVE ) // doesn't wait / check for japan warning string.. fails rom check if used with japanese mcu rom (World version?)
-GAME( 1988, imgfightj, imgfight, imgfightj, imgfight, m72_state, init_m72_8751, ROT270, "Irem", "Image Fight (Japan)", MACHINE_SUPPORTS_SAVE ) // waits for japan warning screen, works with our mcu dump, can't actually see warning screen due to priority / mixing errors, check tilemap viewer (Japan Version)
+GAME( 1988, imgfight, 0, m72, imgfight, m72_state, init_imgfight, ROT270, "Irem", "Image Fight (World, revision A)", MACHINE_SUPPORTS_SAVE ) // doesn't wait / check for japan warning string.. fails rom check if used with japanese mcu rom (World version?)
+GAME( 1988, imgfightj, imgfight, imgfightj, imgfight, m72_state, init_m72_8751, ROT270, "Irem", "Image Fight (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1988, imgfightb, imgfight, imgfightb, imgfight, m72_state, init_m72_8751, ROT270, "Irem", "Image Fight (Japan, bootleg)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // uses an 80c31 MCU, which isn't hooked up correctly yet. Gives 'RAM NG 7' error
GAME( 1989, loht, 0, m72, loht, m72_state, init_loht, ROT0, "Irem", "Legend of Hero Tonma", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // fails rom check if used with Japan MCU rom (World version?)
@@ -4310,20 +4341,21 @@ GAME( 1989, lohtj, loht, m72_8751, loht, m72_state, init_m
GAME( 1989, lohtb2, loht, m72_8751, loht, m72_state, init_m72_8751, ROT0, "bootleg", "Legend of Hero Tonma (Japan, bootleg with i8751)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // works like above, mcu code is the same as the real code, probably just an alt revision on a bootleg board
GAME( 1997, lohtb3, loht, m72_8751, loht, m72_state, init_m72_8751, ROT0, "bootleg", "Legend of Hero Tonma (World, bootleg with i8751)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
-GAME( 1989, xmultiplm72, xmultipl, m72_xmultipl, xmultipl, m72_state, init_m72_8751, ROT0, "Irem", "X Multiply (Japan, M72)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 1989, xmultiplm72, xmultipl, m72_xmultipl, xmultipl, m72_state, init_m72_8751, ROT0, "Irem", "X Multiply (Japan, M72 PCB version)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1989, dbreedm72, dbreed, m72_dbreed, dbreed, m72_state, init_dbreedm72, ROT0, "Irem", "Dragon Breed (M72 PCB version)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // probably Japan version
+GAME( 1989, dbreedm72j, dbreed, m72_dbreed, dbreed, m72_state, init_dbreedm72, ROT0, "Irem", "Dragon Breed (Japan, M72 PCB version)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // Japan version with correct i8751 MCU
-GAME( 1991, gallop, cosmccop, m72, gallop, m72_state, init_gallop, ROT0, "Irem", "Gallop - Armed Police Unit (Japan, M72)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 1991, gallop, cosmccop, m72, gallop, m72_state, init_gallop, ROT0, "Irem", "Gallop - Armed Police Unit (Japan, M72 PCB version)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
-GAME( 1990, airduelm72, airduel, m72, airduel, m72_state, init_airduelm72, ROT270, "Irem", "Air Duel (Japan, M72)", MACHINE_SUPPORTS_SAVE )
+GAME( 1990, airduelm72, airduel, m72, airduel, m72_state, init_airduelm72, ROT270, "Irem", "Air Duel (Japan, M72 PCB version)", MACHINE_SUPPORTS_SAVE )
-GAME( 1990, dkgensanm72, hharry, m72, hharry, m72_state, init_dkgenm72, ROT0, "Irem", "Daiku no Gensan (Japan, M72)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 1990, dkgensanm72, hharry, m72, hharry, m72_state, init_dkgenm72, ROT0, "Irem", "Daiku no Gensan (Japan, M72 PCB version)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
/* M81 */
-GAME( 1989, xmultipl, 0, m81_xmultipl, m81_xmultipl, m72_state, empty_init, ROT0, "Irem", "X Multiply (World, M81)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
-GAME( 1989, dbreed, 0, m81_dbreed, m81_dbreed, m72_state, empty_init, ROT0, "Irem", "Dragon Breed (M81 PCB version)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
-GAME( 1990, hharry, 0, m81_hharry, m81_hharry, m72_state, empty_init, ROT0, "Irem", "Hammerin' Harry (World, M81)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 1989, xmultipl, 0, m81_xmultipl, m81_xmultipl, m72_state, empty_init, ROT0, "Irem", "X Multiply (World, M81 PCB version)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 1989, dbreed, 0, m81_dbreed, m81_dbreed, m72_state, empty_init, ROT0, "Irem", "Dragon Breed (World, M81 PCB version)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 1990, hharry, 0, m81_hharry, m81_hharry, m72_state, empty_init, ROT0, "Irem", "Hammerin' Harry (World, M81 PCB version)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
/* M82 */
GAME( 1990, majtitle, 0, m82, rtype2, m72_state, empty_init, ROT0, "Irem", "Major Title (World)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // M82-A-A + M82-B-A
@@ -4338,11 +4370,10 @@ GAME( 2009, rtypem82b, rtype, m82, rtype, m72_state, empty_
GAME( 1997, rtype2m82b, rtype2, m82, rtype2, m72_state, empty_init, ROT0, "bootleg", "R-Type II (Japan, bootleg Major Title conversion, M82)", MACHINE_NOT_WORKING | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // made in 1997 by Chris Hardy
/* M84 */
+GAME( 1990, hharryu, hharry, hharryu, hharry, m72_state, empty_init, ROT0, "Irem America", "Hammerin' Harry (US, M84 PCB version)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 1990, dkgensan, hharry, hharryu, hharry, m72_state, empty_init, ROT0, "Irem", "Daiku no Gensan (Japan, M84 PCB version)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
-GAME( 1990, hharryu, hharry, hharryu, hharry, m72_state, empty_init, ROT0, "Irem America", "Hammerin' Harry (US, M84)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
-GAME( 1990, dkgensan, hharry, hharryu, hharry, m72_state, empty_init, ROT0, "Irem", "Daiku no Gensan (Japan, M84)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
-
-GAME( 1989, rtype2, 0, rtype2, rtype2, m72_state, empty_init, ROT0, "Irem", "R-Type II", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 1989, rtype2, 0, rtype2, rtype2, m72_state, empty_init, ROT0, "Irem", "R-Type II (World)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1989, rtype2j, rtype2, rtype2, rtype2, m72_state, empty_init, ROT0, "Irem", "R-Type II (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1989, rtype2jc, rtype2, rtype2, rtype2, m72_state, empty_init, ROT0, "Irem", "R-Type II (Japan, revision C)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
@@ -4353,7 +4384,6 @@ GAME( 1991, kengo, ltswords, kengo, kengo, m72_state, empty_
GAME( 1991, kengoa, ltswords, kengo, kengo, m72_state, empty_init, ROT0, "Irem", "Ken-Go (set 2)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // has 'for use in Japan' message, above set doesn't
/* M85 */
-
GAME( 1990, poundfor, 0, poundfor, poundfor, m72_state, empty_init, ROT270, "Irem", "Pound for Pound (World)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // M85-A-B / M85-B
GAME( 1990, poundforj, poundfor, poundfor, poundfor, m72_state, empty_init, ROT270, "Irem", "Pound for Pound (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // ^
GAME( 1990, poundforu, poundfor, poundfor, poundfor, m72_state, empty_init, ROT270, "Irem America", "Pound for Pound (US)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // ^
diff --git a/src/mame/drivers/m79152pc.cpp b/src/mame/drivers/m79152pc.cpp
index a84453b6bec..c002c8dfb1b 100644
--- a/src/mame/drivers/m79152pc.cpp
+++ b/src/mame/drivers/m79152pc.cpp
@@ -142,7 +142,7 @@ void m79152pc_state::mem_map(address_map &map)
void m79152pc_state::io_map(address_map &map)
{
- //ADDRESS_MAP_UNMAP_HIGH
+ //map.unmap_value_high();
map.global_mask(0xff);
map(0x40, 0x43).rw(m_uart, FUNC(z80sio_device::cd_ba_r), FUNC(z80sio_device::cd_ba_w));
map(0x44, 0x47).rw("ctc", FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
diff --git a/src/mame/drivers/m90.cpp b/src/mame/drivers/m90.cpp
index 12dbe65962e..e0f63a5fe2b 100644
--- a/src/mame/drivers/m90.cpp
+++ b/src/mame/drivers/m90.cpp
@@ -1,21 +1,18 @@
// license:BSD-3-Clause
// copyright-holders:Bryan McPhail
/*****************************************************************************
+ Irem M90/M97/M99 system games:
- Irem M90/M97 system games:
-
- Hasamu 1991 M90
- Bomberman / Atomic Punk / Dynablaster 1992 M90
- Bomberman World / New Atomic Punk / New Dyna Blaster 1992 M99 A
- Quiz F1 1-2 Finish 1992 M97
- Risky Challenge / Gussun Oyoyo 1993 M97
- Match It II / Shisensho II 1993 M97-A
-
+ Hasamu 1991 M90-C-B
+ Bomberman / Atomic Punk / Dynablaster 1992 M90-C-B
+ Bomberman World / New Atomic Punk / New Dyna Blaster 1992 M97-A-B
+ Bomberman World / New Atomic Punk / New Dyna Blaster 1992 M99-A-A (m97 with pound 4 pound sound chip)
+ Quiz F1 1-2 Finish 1992 M97-A-B
+ Risky Challenge / Gussun Oyoyo 1993 M97-A-B
+ Match It II / Shisensho II 1993 M97-A-B
Uses M72 sound hardware.
-
Emulation by Bryan McPhail, mish@tendril.co.uk, thanks to Chris Hardy!
-
*****************************************************************************/
#include "emu.h"
@@ -126,11 +123,11 @@ void m90_state::dynablsb_main_cpu_io_map(address_map &map)
map(0x00, 0x01).portr("P1_P2");
map(0x02, 0x03).w(FUNC(m90_state::coincounter_w));
map(0x02, 0x03).portr("SYSTEM");
-// AM_RANGE(0x04, 0x05) AM_WRITE(unknown_w) /* dynablsb: write continuously 0x6000 */
+// map(0x04, 0x05).w(FUNC(m90_state::unknown_w)); /* dynablsb: write continuously 0x6000 */
map(0x04, 0x05).portr("DSW");
map(0x06, 0x07).portr("P3_P4");
map(0x80, 0x8f).writeonly().share("video_control");
-// AM_RANGE(0x90, 0x91) AM_WRITE(unknown_w)
+// map(0x90, 0x91).w(FUNC(m90_state::unknown_w));
}
/*****************************************************************************/
@@ -880,18 +877,18 @@ void m90_state::dynablsb(machine_config &config)
ROM_START( hasamu )
ROM_REGION( CODE_SIZE, "maincpu", 0 )
- ROM_LOAD16_BYTE( "hasc-p1.bin", 0x00001, 0x20000, CRC(53df9834) SHA1(2e7e38157a497e3def69c4abcae5803f71a098da) )
- ROM_LOAD16_BYTE( "hasc-p0.bin", 0x00000, 0x20000, CRC(dff0ba6e) SHA1(83e20b3ae10b57c1e58d3d44bfca2ffd5f142056) )
+ ROM_LOAD16_BYTE( "hasc-p1.ic62", 0x00001, 0x20000, CRC(53df9834) SHA1(2e7e38157a497e3def69c4abcae5803f71a098da) )
+ ROM_LOAD16_BYTE( "hasc-p0.ic65", 0x00000, 0x20000, CRC(dff0ba6e) SHA1(83e20b3ae10b57c1e58d3d44bfca2ffd5f142056) )
ROM_COPY( "maincpu", 0x3fff0, 0xffff0, 0x10 ) /* start vector */
ROM_REGION( 0x10000, "soundcpu", 0 )
- ROM_LOAD( "hasc-sp.bin", 0x0000, 0x10000, CRC(259b1687) SHA1(39c3a89b1d0f5fec2a94a3048cc4639fe96820e2) )
+ ROM_LOAD( "hasc-sp.ic23", 0x0000, 0x10000, CRC(259b1687) SHA1(39c3a89b1d0f5fec2a94a3048cc4639fe96820e2) )
ROM_REGION( 0x80000, "gfx1", 0 )
- ROM_LOAD( "hasc-c0.bin", 0x000000, 0x20000, CRC(dd5a2174) SHA1(c28499419f961d126a838dd1390db74c1475ee02) )
- ROM_LOAD( "hasc-c1.bin", 0x020000, 0x20000, CRC(76b8217c) SHA1(8b21562875d856a1ce4863f325d049090f5716ae) )
- ROM_LOAD( "hasc-c2.bin", 0x040000, 0x20000, CRC(d90f9a68) SHA1(c9eab3e87dd5d3eb88461be493d88f5482c9e257) )
- ROM_LOAD( "hasc-c3.bin", 0x060000, 0x20000, CRC(6cfe0d39) SHA1(104feeacbbc86b168c41cd37fc5797781d9b5a0f) )
+ ROM_LOAD( "hasc-c0.ic66", 0x000000, 0x20000, CRC(dd5a2174) SHA1(c28499419f961d126a838dd1390db74c1475ee02) )
+ ROM_LOAD( "hasc-c1.ic67", 0x020000, 0x20000, CRC(76b8217c) SHA1(8b21562875d856a1ce4863f325d049090f5716ae) )
+ ROM_LOAD( "hasc-c2.ic68", 0x040000, 0x20000, CRC(d90f9a68) SHA1(c9eab3e87dd5d3eb88461be493d88f5482c9e257) )
+ ROM_LOAD( "hasc-c3.ic69", 0x060000, 0x20000, CRC(6cfe0d39) SHA1(104feeacbbc86b168c41cd37fc5797781d9b5a0f) )
ROM_REGION( 0x20000, "m72", ROMREGION_ERASE00 ) /* samples */
/* No samples */
@@ -899,56 +896,56 @@ ROM_END
ROM_START( dynablst )
ROM_REGION( CODE_SIZE, "maincpu", 0 )
- ROM_LOAD16_BYTE( "bbm-cp1e.62", 0x00001, 0x20000, CRC(27667681) SHA1(7d5f762026ea01817a65ea13b4b5793640e3e8fd) )
- ROM_LOAD16_BYTE( "bbm-cp0e.65", 0x00000, 0x20000, CRC(95db7a67) SHA1(1a224d73615a60530cbcc54fdbb526e8d5a6c555) )
+ ROM_LOAD16_BYTE( "bbm-cp1e.ic62", 0x00001, 0x20000, CRC(27667681) SHA1(7d5f762026ea01817a65ea13b4b5793640e3e8fd) )
+ ROM_LOAD16_BYTE( "bbm-cp0e.ic65", 0x00000, 0x20000, CRC(95db7a67) SHA1(1a224d73615a60530cbcc54fdbb526e8d5a6c555) )
ROM_COPY( "maincpu", 0x3fff0, 0xffff0, 0x10 ) /* start vector */
ROM_REGION( 0x10000, "soundcpu", 0 )
- ROM_LOAD( "bbm-sp.23", 0x0000, 0x10000, CRC(251090cd) SHA1(9245072c1afbfa3e4a1d1549942765d58bd78ed3) )
+ ROM_LOAD( "bbm-sp.ic23", 0x0000, 0x10000, CRC(251090cd) SHA1(9245072c1afbfa3e4a1d1549942765d58bd78ed3) )
ROM_REGION( 0x100000, "gfx1", 0 )
- ROM_LOAD( "bbm-c0.66", 0x000000, 0x40000, CRC(695d2019) SHA1(3537e9fb0e7dc13d6113b4af71cba3c73392335a) )
- ROM_LOAD( "bbm-c1.67", 0x040000, 0x40000, CRC(4c7c8bbc) SHA1(31ab5557d96c4184a9c02ed1c309f3070d148e25) )
- ROM_LOAD( "bbm-c2.68", 0x080000, 0x40000, CRC(0700d406) SHA1(0d43a31a726b0de0004beef41307de2508106b69) )
- ROM_LOAD( "bbm-c3.69", 0x0c0000, 0x40000, CRC(3c3613af) SHA1(f9554a73e95102333e449f6e81f2bb817ec00881) )
+ ROM_LOAD( "bbm-c0.ic66", 0x000000, 0x40000, CRC(695d2019) SHA1(3537e9fb0e7dc13d6113b4af71cba3c73392335a) )
+ ROM_LOAD( "bbm-c1.ic67", 0x040000, 0x40000, CRC(4c7c8bbc) SHA1(31ab5557d96c4184a9c02ed1c309f3070d148e25) )
+ ROM_LOAD( "bbm-c2.ic68", 0x080000, 0x40000, CRC(0700d406) SHA1(0d43a31a726b0de0004beef41307de2508106b69) )
+ ROM_LOAD( "bbm-c3.ic69", 0x0c0000, 0x40000, CRC(3c3613af) SHA1(f9554a73e95102333e449f6e81f2bb817ec00881) )
ROM_REGION( 0x20000, "m72", 0 ) /* samples */
- ROM_LOAD( "bbm-v0.20", 0x0000, 0x20000, CRC(0fa803fe) SHA1(d2ac1e624de38bed385442ceae09a76f203fa084) )
+ ROM_LOAD( "bbm-v0.ic20", 0x0000, 0x20000, CRC(0fa803fe) SHA1(d2ac1e624de38bed385442ceae09a76f203fa084) )
ROM_END
ROM_START( bombrman )
ROM_REGION( CODE_SIZE, "maincpu", 0 )
- ROM_LOAD16_BYTE( "bbm-p1.62", 0x00001, 0x20000, CRC(982bd166) SHA1(ed67393ec319127616bff5fa3b7f84e8ac8e1d93) )
- ROM_LOAD16_BYTE( "bbm-p0.65", 0x00000, 0x20000, CRC(0a20afcc) SHA1(a42b7458938300b0c84c820c1ea627aed9080f1b) )
+ ROM_LOAD16_BYTE( "bbm-p1.ic62", 0x00001, 0x20000, CRC(982bd166) SHA1(ed67393ec319127616bff5fa3b7f84e8ac8e1d93) )
+ ROM_LOAD16_BYTE( "bbm-p0.ic65", 0x00000, 0x20000, CRC(0a20afcc) SHA1(a42b7458938300b0c84c820c1ea627aed9080f1b) )
ROM_COPY( "maincpu", 0x3fff0, 0xffff0, 0x10 ) /* start vector */
ROM_REGION( 0x10000, "soundcpu", 0 )
- ROM_LOAD( "bbm-sp.23", 0x0000, 0x10000, CRC(251090cd) SHA1(9245072c1afbfa3e4a1d1549942765d58bd78ed3) )
+ ROM_LOAD( "bbm-sp.ic23", 0x0000, 0x10000, CRC(251090cd) SHA1(9245072c1afbfa3e4a1d1549942765d58bd78ed3) )
ROM_REGION( 0x100000, "gfx1", 0 )
- ROM_LOAD( "bbm-c0.66", 0x000000, 0x40000, CRC(695d2019) SHA1(3537e9fb0e7dc13d6113b4af71cba3c73392335a) )
- ROM_LOAD( "bbm-c1.67", 0x040000, 0x40000, CRC(4c7c8bbc) SHA1(31ab5557d96c4184a9c02ed1c309f3070d148e25) )
- ROM_LOAD( "bbm-c2.68", 0x080000, 0x40000, CRC(0700d406) SHA1(0d43a31a726b0de0004beef41307de2508106b69) )
- ROM_LOAD( "bbm-c3.69", 0x0c0000, 0x40000, CRC(3c3613af) SHA1(f9554a73e95102333e449f6e81f2bb817ec00881) )
+ ROM_LOAD( "bbm-c0.ic66", 0x000000, 0x40000, CRC(695d2019) SHA1(3537e9fb0e7dc13d6113b4af71cba3c73392335a) )
+ ROM_LOAD( "bbm-c1.ic67", 0x040000, 0x40000, CRC(4c7c8bbc) SHA1(31ab5557d96c4184a9c02ed1c309f3070d148e25) )
+ ROM_LOAD( "bbm-c2.ic68", 0x080000, 0x40000, CRC(0700d406) SHA1(0d43a31a726b0de0004beef41307de2508106b69) )
+ ROM_LOAD( "bbm-c3.ic69", 0x0c0000, 0x40000, CRC(3c3613af) SHA1(f9554a73e95102333e449f6e81f2bb817ec00881) )
ROM_REGION( 0x20000, "m72", 0 ) /* samples */
- ROM_LOAD( "bbm-v0.20", 0x0000, 0x20000, CRC(0fa803fe) SHA1(d2ac1e624de38bed385442ceae09a76f203fa084) )
+ ROM_LOAD( "bbm-v0.ic20", 0x0000, 0x20000, CRC(0fa803fe) SHA1(d2ac1e624de38bed385442ceae09a76f203fa084) )
ROM_END
ROM_START( atompunk )
ROM_REGION( CODE_SIZE, "maincpu", 0 )
- ROM_LOAD16_BYTE( "bbm-cp0d.65", 0x00001, 0x20000, CRC(860c0479) SHA1(7556d62955d0d7a7100fbd9d9cb7356b96a4df78) )
- ROM_LOAD16_BYTE( "bbm-cp1d.62", 0x00000, 0x20000, CRC(be57bf74) SHA1(cd3f887f7ec8a5721551477ec2d4a7336f422c6f) )
+ ROM_LOAD16_BYTE( "bbm-cp0d.ic65", 0x00001, 0x20000, CRC(860c0479) SHA1(7556d62955d0d7a7100fbd9d9cb7356b96a4df78) )
+ ROM_LOAD16_BYTE( "bbm-cp1d.ic62", 0x00000, 0x20000, CRC(be57bf74) SHA1(cd3f887f7ec8a5721551477ec2d4a7336f422c6f) )
ROM_COPY( "maincpu", 0x3fff0, 0xffff0, 0x10 ) /* start vector */
ROM_REGION( 0x10000, "soundcpu", 0 )
- ROM_LOAD( "bbm-sp.23", 0x0000, 0x10000, CRC(251090cd) SHA1(9245072c1afbfa3e4a1d1549942765d58bd78ed3) )
+ ROM_LOAD( "bbm-sp.ic23", 0x0000, 0x10000, CRC(251090cd) SHA1(9245072c1afbfa3e4a1d1549942765d58bd78ed3) )
ROM_REGION( 0x100000, "gfx1", 0 )
- ROM_LOAD( "bbm-c0.66", 0x000000, 0x40000, CRC(695d2019) SHA1(3537e9fb0e7dc13d6113b4af71cba3c73392335a) ) /* Labeled as 9134HD004 */
- ROM_LOAD( "bbm-c1.67", 0x040000, 0x40000, CRC(4c7c8bbc) SHA1(31ab5557d96c4184a9c02ed1c309f3070d148e25) ) /* Labeled as 9134HD001 */
- ROM_LOAD( "bbm-c2.68", 0x080000, 0x40000, CRC(0700d406) SHA1(0d43a31a726b0de0004beef41307de2508106b69) ) /* Labeled as 9134HD002 */
- ROM_LOAD( "bbm-c3.69", 0x0c0000, 0x40000, CRC(3c3613af) SHA1(f9554a73e95102333e449f6e81f2bb817ec00881) ) /* Labeled as 9134HD003 */
+ ROM_LOAD( "bbm-c0.ic66", 0x000000, 0x40000, CRC(695d2019) SHA1(3537e9fb0e7dc13d6113b4af71cba3c73392335a) ) /* Labeled as 9134HD004 */
+ ROM_LOAD( "bbm-c1.ic67", 0x040000, 0x40000, CRC(4c7c8bbc) SHA1(31ab5557d96c4184a9c02ed1c309f3070d148e25) ) /* Labeled as 9134HD001 */
+ ROM_LOAD( "bbm-c2.ic68", 0x080000, 0x40000, CRC(0700d406) SHA1(0d43a31a726b0de0004beef41307de2508106b69) ) /* Labeled as 9134HD002 */
+ ROM_LOAD( "bbm-c3.ic69", 0x0c0000, 0x40000, CRC(3c3613af) SHA1(f9554a73e95102333e449f6e81f2bb817ec00881) ) /* Labeled as 9134HD003 */
ROM_REGION( 0x20000, "m72", 0 ) /* samples */
ROM_LOAD( "bbm-v0.20", 0x0000, 0x20000, CRC(0fa803fe) SHA1(d2ac1e624de38bed385442ceae09a76f203fa084) ) /* Labeled as 9132E9001 */
@@ -956,18 +953,18 @@ ROM_END
ROM_START( dynablstb )
ROM_REGION( 0x100000, "maincpu", 0 )
- ROM_LOAD16_BYTE( "db2-26.bin", 0x00001, 0x20000, CRC(a78c72f8) SHA1(e3ed1bce0278bada6357b5d0823511fa0241f3cd) )
- ROM_LOAD16_BYTE( "db3-25.bin", 0x00000, 0x20000, CRC(bf3137c3) SHA1(64bbca4b3a509b552ee8a19b3b50fe6638fd90e2) )
+ ROM_LOAD16_BYTE( "db2-26.ic26", 0x00001, 0x20000, CRC(a78c72f8) SHA1(e3ed1bce0278bada6357b5d0823511fa0241f3cd) )
+ ROM_LOAD16_BYTE( "db3-25.ic25", 0x00000, 0x20000, CRC(bf3137c3) SHA1(64bbca4b3a509b552ee8a19b3b50fe6638fd90e2) )
ROM_COPY( "maincpu", 0x3fff0, 0xffff0, 0x10 ) /* start vector */
ROM_REGION( 0x10000, "soundcpu", 0 )
- ROM_LOAD( "db1-17.bin", 0x0000, 0x10000, CRC(e693c32f) SHA1(b6f228d26318718eedae765de9479706a3e4c38d) )
+ ROM_LOAD( "db1-17.ic17", 0x0000, 0x10000, CRC(e693c32f) SHA1(b6f228d26318718eedae765de9479706a3e4c38d) )
ROM_REGION( 0x100000, "gfx1", 0 )
- ROM_LOAD( "bbm-c0.66", 0x000000, 0x40000, CRC(695d2019) SHA1(3537e9fb0e7dc13d6113b4af71cba3c73392335a) )
- ROM_LOAD( "bbm-c1.67", 0x040000, 0x40000, CRC(4c7c8bbc) SHA1(31ab5557d96c4184a9c02ed1c309f3070d148e25) )
- ROM_LOAD( "bbm-c2.68", 0x080000, 0x40000, CRC(0700d406) SHA1(0d43a31a726b0de0004beef41307de2508106b69) )
- ROM_LOAD( "bbm-c3.69", 0x0c0000, 0x40000, CRC(3c3613af) SHA1(f9554a73e95102333e449f6e81f2bb817ec00881) )
+ ROM_LOAD( "bbm-c0.ic66", 0x000000, 0x40000, CRC(695d2019) SHA1(3537e9fb0e7dc13d6113b4af71cba3c73392335a) )
+ ROM_LOAD( "bbm-c1.ic67", 0x040000, 0x40000, CRC(4c7c8bbc) SHA1(31ab5557d96c4184a9c02ed1c309f3070d148e25) )
+ ROM_LOAD( "bbm-c2.ic68", 0x080000, 0x40000, CRC(0700d406) SHA1(0d43a31a726b0de0004beef41307de2508106b69) )
+ ROM_LOAD( "bbm-c3.ic69", 0x0c0000, 0x40000, CRC(3c3613af) SHA1(f9554a73e95102333e449f6e81f2bb817ec00881) )
ROM_REGION( 0x20000, "m72", ROMREGION_ERASE00 ) /* samples */
/* the samples are in the Z80 ROM in this bootleg */
@@ -980,26 +977,23 @@ ROM_START( dynablstb2 )
ROM_COPY( "maincpu", 0x3fff0, 0xffff0, 0x10 ) /* start vector */
ROM_REGION( 0x10000, "soundcpu", 0 )
- ROM_LOAD( "db1-17.bin", 0x0000, 0x10000, CRC(e693c32f) SHA1(b6f228d26318718eedae765de9479706a3e4c38d) )
+ ROM_LOAD( "1.ic17", 0x0000, 0x10000, CRC(e693c32f) SHA1(b6f228d26318718eedae765de9479706a3e4c38d) )
ROM_REGION( 0x100000, "gfx1", 0 )
- ROM_LOAD( "bbm-c0.66", 0x000000, 0x40000, CRC(695d2019) SHA1(3537e9fb0e7dc13d6113b4af71cba3c73392335a) )
- ROM_LOAD( "bbm-c1.67", 0x040000, 0x40000, CRC(4c7c8bbc) SHA1(31ab5557d96c4184a9c02ed1c309f3070d148e25) )
- ROM_LOAD( "bbm-c2.68", 0x080000, 0x40000, CRC(0700d406) SHA1(0d43a31a726b0de0004beef41307de2508106b69) )
- ROM_LOAD( "bbm-c3.69", 0x0c0000, 0x40000, CRC(3c3613af) SHA1(f9554a73e95102333e449f6e81f2bb817ec00881) )
+ ROM_LOAD( "7.ic104", 0x000000, 0x40000, CRC(695d2019) SHA1(3537e9fb0e7dc13d6113b4af71cba3c73392335a) )
+ ROM_LOAD( "6.ic105", 0x040000, 0x40000, CRC(4c7c8bbc) SHA1(31ab5557d96c4184a9c02ed1c309f3070d148e25) )
+ ROM_LOAD( "5.ic108", 0x080000, 0x40000, CRC(0700d406) SHA1(0d43a31a726b0de0004beef41307de2508106b69) )
+ ROM_LOAD( "4.ic107", 0x0c0000, 0x40000, CRC(3c3613af) SHA1(f9554a73e95102333e449f6e81f2bb817ec00881) )
ROM_REGION( 0x20000, "m72", ROMREGION_ERASE00 ) /* samples */
/* the samples are in the Z80 ROM in this bootleg */
ROM_END
/*Roms 2 and 3 (code) are different
-
XTALS:
-
16mhz (x1)
&
30mhz (x2)
-
The ROMs came with Playmark labels but the copyright is still Seitu.
*/
@@ -1025,10 +1019,8 @@ ROM_END
/*
New Dyna Blaster Global Quest
Irem, 1992
-
PCB Layout
----------
-
M99-A-A 05C04369A1 MADE IN JAPAN
License Sticker - 'BOMBER MAN WORLD NEW DYNA BLASTER'
|--------------------------------------------------|
@@ -1063,78 +1055,78 @@ Notes:
ROM_START( bbmanw )
ROM_REGION( CODE_SIZE, "maincpu", 0 )
- ROM_LOAD16_BYTE( "bbm2-h0-b.77", 0x00001, 0x40000, CRC(567d3709) SHA1(1447fc68798589a8757ee2d133d053b80f052113) )
- ROM_LOAD16_BYTE( "bbm2-l0-b.79", 0x00000, 0x40000, CRC(e762c22b) SHA1(b389a65adf1348e6529a992d9b68178d7503238e) )
+ ROM_LOAD16_BYTE( "bbm2-h0-b.ic77", 0x00001, 0x40000, CRC(567d3709) SHA1(1447fc68798589a8757ee2d133d053b80f052113) )
+ ROM_LOAD16_BYTE( "bbm2-l0-b.ic79", 0x00000, 0x40000, CRC(e762c22b) SHA1(b389a65adf1348e6529a992d9b68178d7503238e) )
ROM_COPY( "maincpu", 0x7fff0, 0xffff0, 0x10 ) /* start vector */
ROM_REGION( 0x10000, "soundcpu", 0 )
- ROM_LOAD( "bbm2-sp.33", 0x0000, 0x10000, CRC(6bc1689e) SHA1(099c275632965e19eb6131863f69d2afa9916e90) )
+ ROM_LOAD( "bbm2-sp.ic33", 0x0000, 0x10000, CRC(6bc1689e) SHA1(099c275632965e19eb6131863f69d2afa9916e90) )
ROM_REGION( 0x200000, "gfx1", 0 )
- ROM_LOAD( "bbm2-c0.81", 0x000000, 0x40000, CRC(e7ce058a) SHA1(f2336718ecbce4771f27abcdc4d28fe91c702a9e) )
- ROM_LOAD( "bbm2-c1.82", 0x080000, 0x40000, CRC(636a78a9) SHA1(98562ea056e5bd36c1a094ae6f267367236d166f) )
- ROM_LOAD( "bbm2-c2.83", 0x100000, 0x40000, CRC(9ac2142f) SHA1(744fe1acae2fcba0051c303b644081546b4aed9e) )
- ROM_LOAD( "bbm2-c3.84", 0x180000, 0x40000, CRC(47af1750) SHA1(dce176a6ca95852208b6eba7fb88a0d96467c34b) )
+ ROM_LOAD( "bbm2-c0.ic81", 0x000000, 0x40000, CRC(e7ce058a) SHA1(f2336718ecbce4771f27abcdc4d28fe91c702a9e) )
+ ROM_LOAD( "bbm2-c1.ic82", 0x080000, 0x40000, CRC(636a78a9) SHA1(98562ea056e5bd36c1a094ae6f267367236d166f) )
+ ROM_LOAD( "bbm2-c2.ic83", 0x100000, 0x40000, CRC(9ac2142f) SHA1(744fe1acae2fcba0051c303b644081546b4aed9e) )
+ ROM_LOAD( "bbm2-c3.ic84", 0x180000, 0x40000, CRC(47af1750) SHA1(dce176a6ca95852208b6eba7fb88a0d96467c34b) )
ROM_REGION( 0x20000, "m72", 0 )
- ROM_LOAD( "bbm2-v0.30", 0x0000, 0x20000, CRC(4ad889ed) SHA1(b685892a2348f17f89c6d6ce91216f6cf1e33751) )
+ ROM_LOAD( "bbm2-v0.ic30", 0x0000, 0x20000, CRC(4ad889ed) SHA1(b685892a2348f17f89c6d6ce91216f6cf1e33751) )
ROM_END
ROM_START( bbmanwj )
ROM_REGION( CODE_SIZE, "maincpu", 0 )
- ROM_LOAD16_BYTE( "bbm2-h0.77", 0x00001, 0x40000, CRC(e1407b91) SHA1(6c94afc6b1d2a469295890ee5dd9d9d5a02ae5c4) )
- ROM_LOAD16_BYTE( "bbm2-l0.79", 0x00000, 0x40000, CRC(20873b49) SHA1(30ae595f7961cd56f2506608ae76973b2d0e73ca) )
+ ROM_LOAD16_BYTE( "bbm2-h0.ic77", 0x00001, 0x40000, CRC(e1407b91) SHA1(6c94afc6b1d2a469295890ee5dd9d9d5a02ae5c4) )
+ ROM_LOAD16_BYTE( "bbm2-l0.ic79", 0x00000, 0x40000, CRC(20873b49) SHA1(30ae595f7961cd56f2506608ae76973b2d0e73ca) )
ROM_COPY( "maincpu", 0x7fff0, 0xffff0, 0x10 ) /* start vector */
ROM_REGION( 0x10000, "soundcpu", 0 )
- ROM_LOAD( "bbm2-sp-a.33", 0x0000, 0x10000, CRC(a4b0a66e) SHA1(834c809089c7ad424796f3fd0cc6747601af9fb6) ) /* Newer sound CPU code, same sound hardware as bbnanw / newapunk */
+ ROM_LOAD( "bbm2-sp-a.ic33", 0x0000, 0x10000, CRC(a4b0a66e) SHA1(834c809089c7ad424796f3fd0cc6747601af9fb6) ) /* Newer sound CPU code, same sound hardware as bbnanw / newapunk */
ROM_REGION( 0x200000, "gfx1", 0 )
- ROM_LOAD( "bbm2-c0.81", 0x000000, 0x40000, CRC(e7ce058a) SHA1(f2336718ecbce4771f27abcdc4d28fe91c702a9e) )
- ROM_LOAD( "bbm2-c1.82", 0x080000, 0x40000, CRC(636a78a9) SHA1(98562ea056e5bd36c1a094ae6f267367236d166f) )
- ROM_LOAD( "bbm2-c2.83", 0x100000, 0x40000, CRC(9ac2142f) SHA1(744fe1acae2fcba0051c303b644081546b4aed9e) )
- ROM_LOAD( "bbm2-c3.84", 0x180000, 0x40000, CRC(47af1750) SHA1(dce176a6ca95852208b6eba7fb88a0d96467c34b) )
+ ROM_LOAD( "bbm2-c0.ic81", 0x000000, 0x40000, CRC(e7ce058a) SHA1(f2336718ecbce4771f27abcdc4d28fe91c702a9e) )
+ ROM_LOAD( "bbm2-c1.ic82", 0x080000, 0x40000, CRC(636a78a9) SHA1(98562ea056e5bd36c1a094ae6f267367236d166f) )
+ ROM_LOAD( "bbm2-c2.ic83", 0x100000, 0x40000, CRC(9ac2142f) SHA1(744fe1acae2fcba0051c303b644081546b4aed9e) )
+ ROM_LOAD( "bbm2-c3.ic84", 0x180000, 0x40000, CRC(47af1750) SHA1(dce176a6ca95852208b6eba7fb88a0d96467c34b) )
ROM_REGION( 0x20000, "m72", 0 ) /* samples */
- ROM_LOAD( "bbm2-v0-b.30", 0x0000, 0x20000, CRC(0ae655ff) SHA1(78752182662fd8f5b55bbbc2787c9f2b04096ea1) )
+ ROM_LOAD( "bbm2-v0-b.ic30", 0x0000, 0x20000, CRC(0ae655ff) SHA1(78752182662fd8f5b55bbbc2787c9f2b04096ea1) )
ROM_END
ROM_START( bbmanwja )
ROM_REGION( CODE_SIZE, "maincpu", 0 )
- ROM_LOAD16_BYTE( "bbm2-h0.77", 0x00001, 0x40000, CRC(e1407b91) SHA1(6c94afc6b1d2a469295890ee5dd9d9d5a02ae5c4) )
- ROM_LOAD16_BYTE( "bbm2-l0.79", 0x00000, 0x40000, CRC(20873b49) SHA1(30ae595f7961cd56f2506608ae76973b2d0e73ca) )
+ ROM_LOAD16_BYTE( "bbm2-h0.ic77", 0x00001, 0x40000, CRC(e1407b91) SHA1(6c94afc6b1d2a469295890ee5dd9d9d5a02ae5c4) )
+ ROM_LOAD16_BYTE( "bbm2-l0.ic79", 0x00000, 0x40000, CRC(20873b49) SHA1(30ae595f7961cd56f2506608ae76973b2d0e73ca) )
ROM_COPY( "maincpu", 0x7fff0, 0xffff0, 0x10 ) /* start vector */
ROM_REGION( 0x10000, "soundcpu", 0 )
- ROM_LOAD( "bbm2-sp-b.33", 0x0000, 0x10000, CRC(b8d8108c) SHA1(ef4fb46d843819c273db2083754eb312f5abd44e) ) /* Differently mapped sound hardware */
+ ROM_LOAD( "bbm2-sp-b.ic33", 0x0000, 0x10000, CRC(b8d8108c) SHA1(ef4fb46d843819c273db2083754eb312f5abd44e) ) /* Differently mapped sound hardware */
ROM_REGION( 0x200000, "gfx1", 0 )
- ROM_LOAD( "bbm2-c0.81", 0x000000, 0x40000, CRC(e7ce058a) SHA1(f2336718ecbce4771f27abcdc4d28fe91c702a9e) )
- ROM_LOAD( "bbm2-c1.82", 0x080000, 0x40000, CRC(636a78a9) SHA1(98562ea056e5bd36c1a094ae6f267367236d166f) )
- ROM_LOAD( "bbm2-c2.83", 0x100000, 0x40000, CRC(9ac2142f) SHA1(744fe1acae2fcba0051c303b644081546b4aed9e) )
- ROM_LOAD( "bbm2-c3.84", 0x180000, 0x40000, CRC(47af1750) SHA1(dce176a6ca95852208b6eba7fb88a0d96467c34b) )
+ ROM_LOAD( "bbm2-c0.ic81", 0x000000, 0x40000, CRC(e7ce058a) SHA1(f2336718ecbce4771f27abcdc4d28fe91c702a9e) )
+ ROM_LOAD( "bbm2-c1.ic82", 0x080000, 0x40000, CRC(636a78a9) SHA1(98562ea056e5bd36c1a094ae6f267367236d166f) )
+ ROM_LOAD( "bbm2-c2.ic83", 0x100000, 0x40000, CRC(9ac2142f) SHA1(744fe1acae2fcba0051c303b644081546b4aed9e) )
+ ROM_LOAD( "bbm2-c3.ic84", 0x180000, 0x40000, CRC(47af1750) SHA1(dce176a6ca95852208b6eba7fb88a0d96467c34b) )
ROM_REGION( 0x20000, "m72", 0 ) /* samples */
- ROM_LOAD( "bbm2-v0-b.30", 0x0000, 0x20000, CRC(0ae655ff) SHA1(78752182662fd8f5b55bbbc2787c9f2b04096ea1) )
+ ROM_LOAD( "bbm2-v0-b.ic30", 0x0000, 0x20000, CRC(0ae655ff) SHA1(78752182662fd8f5b55bbbc2787c9f2b04096ea1) )
ROM_END
ROM_START( newapunk )
ROM_REGION( CODE_SIZE, "maincpu", 0 )
- ROM_LOAD16_BYTE( "bbm2-h0-a.77", 0x00001, 0x40000, CRC(7d858682) SHA1(03580e2903becb69766023585c6ecffbb8e0b9c5) )
- ROM_LOAD16_BYTE( "bbm2-l0-a.79", 0x00000, 0x40000, CRC(c7568031) SHA1(ff4d0809260a088f530098a0173eec16fa6396f1) )
+ ROM_LOAD16_BYTE( "bbm2-h0-a.ic77", 0x00001, 0x40000, CRC(7d858682) SHA1(03580e2903becb69766023585c6ecffbb8e0b9c5) )
+ ROM_LOAD16_BYTE( "bbm2-l0-a.ic79", 0x00000, 0x40000, CRC(c7568031) SHA1(ff4d0809260a088f530098a0173eec16fa6396f1) )
ROM_COPY( "maincpu", 0x7fff0, 0xffff0, 0x10 ) /* start vector */
ROM_REGION( 0x10000, "soundcpu", 0 )
- ROM_LOAD( "bbm2-sp.33", 0x0000, 0x10000, CRC(6bc1689e) SHA1(099c275632965e19eb6131863f69d2afa9916e90) )
+ ROM_LOAD( "bbm2-sp.ic33", 0x0000, 0x10000, CRC(6bc1689e) SHA1(099c275632965e19eb6131863f69d2afa9916e90) )
ROM_REGION( 0x200000, "gfx1", 0 )
- ROM_LOAD( "bbm2-c0.81", 0x000000, 0x40000, CRC(e7ce058a) SHA1(f2336718ecbce4771f27abcdc4d28fe91c702a9e) )
- ROM_LOAD( "bbm2-c1.82", 0x080000, 0x40000, CRC(636a78a9) SHA1(98562ea056e5bd36c1a094ae6f267367236d166f) )
- ROM_LOAD( "bbm2-c2.83", 0x100000, 0x40000, CRC(9ac2142f) SHA1(744fe1acae2fcba0051c303b644081546b4aed9e) )
- ROM_LOAD( "bbm2-c3.84", 0x180000, 0x40000, CRC(47af1750) SHA1(dce176a6ca95852208b6eba7fb88a0d96467c34b) )
+ ROM_LOAD( "bbm2-c0.ic81", 0x000000, 0x40000, CRC(e7ce058a) SHA1(f2336718ecbce4771f27abcdc4d28fe91c702a9e) )
+ ROM_LOAD( "bbm2-c1.ic82", 0x080000, 0x40000, CRC(636a78a9) SHA1(98562ea056e5bd36c1a094ae6f267367236d166f) )
+ ROM_LOAD( "bbm2-c2.ic83", 0x100000, 0x40000, CRC(9ac2142f) SHA1(744fe1acae2fcba0051c303b644081546b4aed9e) )
+ ROM_LOAD( "bbm2-c3.ic84", 0x180000, 0x40000, CRC(47af1750) SHA1(dce176a6ca95852208b6eba7fb88a0d96467c34b) )
ROM_REGION( 0x20000, "m72", 0 ) /* samples */
- ROM_LOAD( "bbm2-v0.30", 0x0000, 0x20000, CRC(4ad889ed) SHA1(b685892a2348f17f89c6d6ce91216f6cf1e33751) )
+ ROM_LOAD( "bbm2-v0.ic30", 0x0000, 0x20000, CRC(4ad889ed) SHA1(b685892a2348f17f89c6d6ce91216f6cf1e33751) )
ROM_END
//PCB is marked: "BOMBER LORD 030" and "lc" on component side ("LC" is the Italian for "Lato Componenti" which translates to "Components Side")
@@ -1167,25 +1159,25 @@ ROM_END
ROM_START( quizf1 )
ROM_REGION( CODE_SIZE, "maincpu", 0 )
- ROM_LOAD16_BYTE( "qf1-h0-.77", 0x000001, 0x40000, CRC(280e3049) SHA1(3b1f303d803f844fd260ed93e4d12a72876e4dbe) )
- ROM_LOAD16_BYTE( "qf1-l0-.79", 0x000000, 0x40000, CRC(94588a6f) SHA1(ee912739c7719fc2b099da0c63f7473eedcfc718) )
+ ROM_LOAD16_BYTE( "qf1-h0-.ic77", 0x000001, 0x40000, CRC(280e3049) SHA1(3b1f303d803f844fd260ed93e4d12a72876e4dbe) )
+ ROM_LOAD16_BYTE( "qf1-l0-.ic79", 0x000000, 0x40000, CRC(94588a6f) SHA1(ee912739c7719fc2b099da0c63f7473eedcfc718) )
ROM_COPY( "maincpu", 0x7fff0, 0xffff0, 0x10 ) /* start vector */
ROM_REGION16_LE( 0x100000, "user1", 0 ) /* banked at 80000-8FFFF */
- ROM_LOAD16_BYTE( "qf1-h1-.78", 0x000001, 0x80000, CRC(c6c2eb2b) SHA1(83de08b0c72da8c3e4786063802d83cb1015032a) )
- ROM_LOAD16_BYTE( "qf1-l1-.80", 0x000000, 0x80000, CRC(3132c144) SHA1(de3ae35cdfbb1231cab343142ac700df00f9b77a) )
+ ROM_LOAD16_BYTE( "qf1-h1-.ic78", 0x000001, 0x80000, CRC(c6c2eb2b) SHA1(83de08b0c72da8c3e4786063802d83cb1015032a) )
+ ROM_LOAD16_BYTE( "qf1-l1-.ic80", 0x000000, 0x80000, CRC(3132c144) SHA1(de3ae35cdfbb1231cab343142ac700df00f9b77a) )
ROM_REGION( 0x10000, "soundcpu", 0 )
- ROM_LOAD( "qf1-sp-.33", 0x0000, 0x10000, CRC(0664fa9f) SHA1(db003beb4f8461bf4411efa8df9f700770fb153b) )
+ ROM_LOAD( "qf1-sp-.ic33", 0x0000, 0x10000, CRC(0664fa9f) SHA1(db003beb4f8461bf4411efa8df9f700770fb153b) )
ROM_REGION( 0x200000, "gfx1", 0 )
- ROM_LOAD( "qf1-c0-.81", 0x000000, 0x80000, CRC(c26b521e) SHA1(eb5d33a21d1f82e361e0c0945abcf42562c32f03) )
- ROM_LOAD( "qf1-c1-.82", 0x080000, 0x80000, CRC(db9d7394) SHA1(06b41288c41df8ae0cafb53e77b519d0419cf1d9) )
- ROM_LOAD( "qf1-c2-.83", 0x100000, 0x80000, CRC(0b1460ae) SHA1(c6394e6bb2a4e3722c20d9f291cb6ba7aad5766d) )
- ROM_LOAD( "qf1-c3-.84", 0x180000, 0x80000, CRC(2d32ff37) SHA1(f414f6bad1ffc4396fd757155e602bdefdc99408) )
+ ROM_LOAD( "qf1-c0-.ic81", 0x000000, 0x80000, CRC(c26b521e) SHA1(eb5d33a21d1f82e361e0c0945abcf42562c32f03) )
+ ROM_LOAD( "qf1-c1-.ic82", 0x080000, 0x80000, CRC(db9d7394) SHA1(06b41288c41df8ae0cafb53e77b519d0419cf1d9) )
+ ROM_LOAD( "qf1-c2-.ic83", 0x100000, 0x80000, CRC(0b1460ae) SHA1(c6394e6bb2a4e3722c20d9f291cb6ba7aad5766d) )
+ ROM_LOAD( "qf1-c3-.ic84", 0x180000, 0x80000, CRC(2d32ff37) SHA1(f414f6bad1ffc4396fd757155e602bdefdc99408) )
ROM_REGION( 0x40000, "m72", 0 ) /* samples */
- ROM_LOAD( "qf1-v0-.30", 0x0000, 0x40000, CRC(b8d16e7c) SHA1(28a20afb171dc68848f9fe793f53571d4c7502dd) )
+ ROM_LOAD( "qf1-v0-.ic30", 0x0000, 0x40000, CRC(b8d16e7c) SHA1(28a20afb171dc68848f9fe793f53571d4c7502dd) )
ROM_END
ROM_START( riskchal )
@@ -1198,13 +1190,13 @@ ROM_START( riskchal )
ROM_LOAD( "l4_a-sp.ic33", 0x0000, 0x10000, CRC(bb80094e) SHA1(1c62e702c395b7ebb666a79af1912b270d5f95aa) )
ROM_REGION( 0x200000, "gfx1", 0 )
- ROM_LOAD( "rc_c0.rom", 0x000000, 0x80000, CRC(84d0b907) SHA1(a686ccd67d068e5e4ba41bb8b73fdc1cad8eb5ee) )
- ROM_LOAD( "rc_c1.rom", 0x080000, 0x80000, CRC(cb3784ef) SHA1(51b8cdc35c8f3b452939ab6023a15f1c7e1a4423) )
- ROM_LOAD( "rc_c2.rom", 0x100000, 0x80000, CRC(687164d7) SHA1(0f0beb0a85ae5ae4434d1e45a27bbe67f5ee378a) )
- ROM_LOAD( "rc_c3.rom", 0x180000, 0x80000, CRC(c86be6af) SHA1(c8a66b8b38a62e3eebb4a0e65a85e20f91182097) )
+ ROM_LOAD( "rc_c0.ic81", 0x000000, 0x80000, CRC(84d0b907) SHA1(a686ccd67d068e5e4ba41bb8b73fdc1cad8eb5ee) )
+ ROM_LOAD( "rc_c1.ic82", 0x080000, 0x80000, CRC(cb3784ef) SHA1(51b8cdc35c8f3b452939ab6023a15f1c7e1a4423) )
+ ROM_LOAD( "rc_c2.ic83", 0x100000, 0x80000, CRC(687164d7) SHA1(0f0beb0a85ae5ae4434d1e45a27bbe67f5ee378a) )
+ ROM_LOAD( "rc_c3.ic84", 0x180000, 0x80000, CRC(c86be6af) SHA1(c8a66b8b38a62e3eebb4a0e65a85e20f91182097) )
ROM_REGION( 0x40000, "m72", 0 ) /* samples */
- ROM_LOAD( "rc_v0.rom", 0x0000, 0x40000, CRC(cddac360) SHA1(a3b18325991473c6d54b778a02bed86180aad37c) )
+ ROM_LOAD( "rc_v0.ic30", 0x0000, 0x40000, CRC(cddac360) SHA1(a3b18325991473c6d54b778a02bed86180aad37c) )
ROM_END
ROM_START( gussun )
@@ -1217,32 +1209,32 @@ ROM_START( gussun )
ROM_LOAD( "l4_a-sp.ic33", 0x0000, 0x10000, CRC(bb80094e) SHA1(1c62e702c395b7ebb666a79af1912b270d5f95aa) )
ROM_REGION( 0x200000, "gfx1", 0 )
- ROM_LOAD( "rc_c0.rom", 0x000000, 0x80000, CRC(84d0b907) SHA1(a686ccd67d068e5e4ba41bb8b73fdc1cad8eb5ee) )
- ROM_LOAD( "rc_c1.rom", 0x080000, 0x80000, CRC(cb3784ef) SHA1(51b8cdc35c8f3b452939ab6023a15f1c7e1a4423) )
- ROM_LOAD( "rc_c2.rom", 0x100000, 0x80000, CRC(687164d7) SHA1(0f0beb0a85ae5ae4434d1e45a27bbe67f5ee378a) )
- ROM_LOAD( "rc_c3.rom", 0x180000, 0x80000, CRC(c86be6af) SHA1(c8a66b8b38a62e3eebb4a0e65a85e20f91182097) )
+ ROM_LOAD( "rc_c0.ic81", 0x000000, 0x80000, CRC(84d0b907) SHA1(a686ccd67d068e5e4ba41bb8b73fdc1cad8eb5ee) )
+ ROM_LOAD( "rc_c1.ic82", 0x080000, 0x80000, CRC(cb3784ef) SHA1(51b8cdc35c8f3b452939ab6023a15f1c7e1a4423) )
+ ROM_LOAD( "rc_c2.ic83", 0x100000, 0x80000, CRC(687164d7) SHA1(0f0beb0a85ae5ae4434d1e45a27bbe67f5ee378a) )
+ ROM_LOAD( "rc_c3.ic84", 0x180000, 0x80000, CRC(c86be6af) SHA1(c8a66b8b38a62e3eebb4a0e65a85e20f91182097) )
ROM_REGION( 0x40000, "m72", 0 ) /* samples */
- ROM_LOAD( "rc_v0.rom", 0x0000, 0x40000, CRC(cddac360) SHA1(a3b18325991473c6d54b778a02bed86180aad37c) )
+ ROM_LOAD( "rc_v0.ic30", 0x0000, 0x40000, CRC(cddac360) SHA1(a3b18325991473c6d54b778a02bed86180aad37c) )
ROM_END
ROM_START( matchit2 )
ROM_REGION( CODE_SIZE, "maincpu", 0 )
- ROM_LOAD16_BYTE( "sis2-h0-b.bin", 0x00001, 0x40000, CRC(9a2556ac) SHA1(3e4d5ac2869c703c5d5b769c2a09e501b5e6462e) ) /* Actually labeled as "SIS2-H0-B" */
- ROM_LOAD16_BYTE( "sis2-l0-b.bin", 0x00000, 0x40000, CRC(d35d948a) SHA1(e4f119fa00fd8ede2533323e14d94ad4d5fabbc5) ) /* Actually labeled as "SIS2-L0-B" */
+ ROM_LOAD16_BYTE( "sis2-h0-b.ic77", 0x00001, 0x40000, CRC(9a2556ac) SHA1(3e4d5ac2869c703c5d5b769c2a09e501b5e6462e) ) /* Actually labeled as "SIS2-H0-B" */
+ ROM_LOAD16_BYTE( "sis2-l0-b.ic79", 0x00000, 0x40000, CRC(d35d948a) SHA1(e4f119fa00fd8ede2533323e14d94ad4d5fabbc5) ) /* Actually labeled as "SIS2-L0-B" */
ROM_COPY( "maincpu", 0x7fff0, 0xffff0, 0x10 ) /* start vector */
ROM_REGION( 0x10000, "soundcpu", 0 )
- ROM_LOAD( "sis2-sp-.rom", 0x0000, 0x10000, CRC(6fc0ff3a) SHA1(2b8c648c1fb5d516552fc260b8f18ffd56bbe062) )
+ ROM_LOAD( "sis2-sp-.ic33", 0x0000, 0x10000, CRC(6fc0ff3a) SHA1(2b8c648c1fb5d516552fc260b8f18ffd56bbe062) )
ROM_REGION( 0x200000, "gfx1", 0 )
- ROM_LOAD( "ic81.rom", 0x000000, 0x80000, CRC(5a7cb88f) SHA1(ce3befcd956b803655b261c2ece911f444aa3a13) )
- ROM_LOAD( "ic82.rom", 0x080000, 0x80000, CRC(54a7852c) SHA1(887e7543f09d00323ce1986e72c5613dde1dc6cc) )
- ROM_LOAD( "ic83.rom", 0x100000, 0x80000, CRC(2bd65dc6) SHA1(b50dec707ea5a71972df0a8dc47141d75e8f874e) )
- ROM_LOAD( "ic84.rom", 0x180000, 0x80000, CRC(876d5fdb) SHA1(723c58268be60f4973e914df238b264708d3f1e3) )
+ ROM_LOAD( "sis2_c0.ic81", 0x000000, 0x80000, CRC(5a7cb88f) SHA1(ce3befcd956b803655b261c2ece911f444aa3a13) )
+ ROM_LOAD( "sis2_c1.ic82", 0x080000, 0x80000, CRC(54a7852c) SHA1(887e7543f09d00323ce1986e72c5613dde1dc6cc) )
+ ROM_LOAD( "sis2_c2.ic83", 0x100000, 0x80000, CRC(2bd65dc6) SHA1(b50dec707ea5a71972df0a8dc47141d75e8f874e) )
+ ROM_LOAD( "sis2_c3.ic84", 0x180000, 0x80000, CRC(876d5fdb) SHA1(723c58268be60f4973e914df238b264708d3f1e3) )
ROM_REGION( 0x20000, "m72", ROMREGION_ERASE00 ) /* samples */
- /* Does this have a sample rom? */
+ /* No samples */
ROM_END
ROM_START( shisen2 )
@@ -1255,13 +1247,13 @@ ROM_START( shisen2 )
ROM_LOAD( "sis2-sp-.rom", 0x0000, 0x10000, CRC(6fc0ff3a) SHA1(2b8c648c1fb5d516552fc260b8f18ffd56bbe062) )
ROM_REGION( 0x200000, "gfx1", 0 )
- ROM_LOAD( "ic81.rom", 0x000000, 0x80000, CRC(5a7cb88f) SHA1(ce3befcd956b803655b261c2ece911f444aa3a13) )
- ROM_LOAD( "ic82.rom", 0x080000, 0x80000, CRC(54a7852c) SHA1(887e7543f09d00323ce1986e72c5613dde1dc6cc) )
- ROM_LOAD( "ic83.rom", 0x100000, 0x80000, CRC(2bd65dc6) SHA1(b50dec707ea5a71972df0a8dc47141d75e8f874e) )
- ROM_LOAD( "ic84.rom", 0x180000, 0x80000, CRC(876d5fdb) SHA1(723c58268be60f4973e914df238b264708d3f1e3) )
+ ROM_LOAD( "sis2_c0.ic81", 0x000000, 0x80000, CRC(5a7cb88f) SHA1(ce3befcd956b803655b261c2ece911f444aa3a13) )
+ ROM_LOAD( "sis2_c1.ic82", 0x080000, 0x80000, CRC(54a7852c) SHA1(887e7543f09d00323ce1986e72c5613dde1dc6cc) )
+ ROM_LOAD( "sis2_c2.ic83", 0x100000, 0x80000, CRC(2bd65dc6) SHA1(b50dec707ea5a71972df0a8dc47141d75e8f874e) )
+ ROM_LOAD( "sis2_c3.ic84", 0x180000, 0x80000, CRC(876d5fdb) SHA1(723c58268be60f4973e914df238b264708d3f1e3) )
ROM_REGION( 0x20000, "m72", ROMREGION_ERASE00 ) /* samples */
- /* Does this have a sample rom? */
+ /* No samples */
ROM_END
diff --git a/src/mame/drivers/mac.cpp b/src/mame/drivers/mac.cpp
index ca03f0e3605..018bc8d8290 100644
--- a/src/mame/drivers/mac.cpp
+++ b/src/mame/drivers/mac.cpp
@@ -1509,7 +1509,7 @@ void mac_state::macpb180c(machine_config &config)
m_screen->set_size(800, 525);
m_screen->set_visarea(0, 640-1, 0, 480-1);
m_screen->set_screen_update(FUNC(mac_state::screen_update_macpbwd));
- m_screen->set_palette(finder_base::DUMMY_TAG);
+ m_screen->set_no_palette();
}
void mac_state::macpd210(machine_config &config)
diff --git a/src/mame/drivers/macs.cpp b/src/mame/drivers/macs.cpp
index 6b37f85e11c..5bc2554a204 100644
--- a/src/mame/drivers/macs.cpp
+++ b/src/mame/drivers/macs.cpp
@@ -119,13 +119,13 @@ void macs_state::macs_mem(address_map &map)
{
map(0x0000, 0x7fff).bankr("rombank1");
map(0x8000, 0xbfff).bankr("rombank2");
- //AM_RANGE(0xc000, 0xcfff) AM_READ(st0016_sprite_ram_r) AM_WRITE(st0016_sprite_ram_w)
- //AM_RANGE(0xd000, 0xdfff) AM_READ(st0016_sprite2_ram_r) AM_WRITE(st0016_sprite2_ram_w)
+ //map(0xc000, 0xcfff).rw(FUNC(macs_state::st0016_sprite_ram_r), FUNC(macs_state::st0016_sprite_ram_w));
+ //map(0xd000, 0xdfff).rw(FUNC(macs_state::st0016_sprite2_ram_r), FUNC(macs_state::st0016_sprite2_ram_w));
map(0xe000, 0xe7ff).ram(); /* work ram ? */
map(0xe800, 0xe87f).ram().share("ram2");
- //AM_RANGE(0xe900, 0xe9ff) // sound - internal
- //AM_RANGE(0xea00, 0xebff) AM_READ(st0016_palette_ram_r) AM_WRITE(st0016_palette_ram_w)
- //AM_RANGE(0xec00, 0xec1f) AM_READ(st0016_character_ram_r) AM_WRITE(st0016_character_ram_w)
+ //map(0xe900, 0xe9ff) // sound - internal
+ //map(0xea00, 0xebff).rw(FUNC(macs_state::st0016_palette_ram_r), FUNC(macs_state::st0016_palette_ram_w));
+ //map(0xec00, 0xec1f).rw(FUNC(macs_state::st0016_character_ram_r), FUNC(macs_state::st0016_character_ram_w));
map(0xf000, 0xf7ff).bankrw("rambank1"); /* common /backup ram ?*/
map(0xf800, 0xffff).bankrw("rambank2"); /* common /backup ram ?*/
}
@@ -205,16 +205,16 @@ WRITE8_MEMBER(macs_state::macs_output_w)
void macs_state::macs_io(address_map &map)
{
map.global_mask(0xff);
- //AM_RANGE(0x00, 0xbf) AM_READ(st0016_vregs_r) AM_WRITE(st0016_vregs_w) /* video/crt regs ? */
+ //map(0x00, 0xbf).rw(FUNC(macs_state::st0016_vregs_r), FUNC(macs_state::st0016_vregs_w)); /* video/crt regs ? */
map(0xc0, 0xc7).rw(FUNC(macs_state::macs_input_r), FUNC(macs_state::macs_output_w));
map(0xe0, 0xe0).nopw(); /* renju = $40, neratte = 0 */
map(0xe1, 0xe1).w(FUNC(macs_state::macs_rom_bank_w));
- //AM_RANGE(0xe2, 0xe2) AM_WRITE(st0016_sprite_bank_w)
- //AM_RANGE(0xe3, 0xe4) AM_WRITE(st0016_character_bank_w)
- //AM_RANGE(0xe5, 0xe5) AM_WRITE(st0016_palette_bank_w)
+ //map(0xe2, 0xe2).w(FUNC(macs_state::st0016_sprite_bank_w));
+ //map(0xe3, 0xe4).w(FUNC(macs_state::st0016_character_bank_w));
+ //map(0xe5, 0xe5).w(FUNC(macs_state::st0016_palette_bank_w));
map(0xe6, 0xe6).w(FUNC(macs_state::rambank_w)); /* banking ? ram bank ? shared rambank ? */
map(0xe7, 0xe7).nopw(); /* watchdog */
- //AM_RANGE(0xf0, 0xf0) AM_READ(st0016_dma_r)
+ //map(0xf0, 0xf0).rw(FUNC(macs_state::st0016_dma_r));
}
//static GFXDECODE_START( macs )
diff --git a/src/mame/drivers/magic10.cpp b/src/mame/drivers/magic10.cpp
index bb144c81a3a..6899800253c 100644
--- a/src/mame/drivers/magic10.cpp
+++ b/src/mame/drivers/magic10.cpp
@@ -405,8 +405,8 @@ void magic10_state::magic102_map(address_map &map)
map(0x500006, 0x500007).nopr(); // gives credits
map(0x50001a, 0x50001b).portr("IN0");
map(0x50001c, 0x50001d).portr("IN1");
-// AM_RANGE(0x500002, 0x50001f) AM_READNOP
-// AM_RANGE(0x500002, 0x50001f) AM_WRITENOP
+// map(0x500002, 0x50001f).nopr();
+// map(0x500002, 0x50001f).nopw();
map(0x600000, 0x603fff).ram();
map(0x700001, 0x700001).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x700080, 0x700087).ram().share("vregs"); // video registers?
diff --git a/src/mame/drivers/magicard.cpp b/src/mame/drivers/magicard.cpp
index 1fc9cdabd72..f7c2ef9c72f 100644
--- a/src/mame/drivers/magicard.cpp
+++ b/src/mame/drivers/magicard.cpp
@@ -755,7 +755,7 @@ WRITE16_MEMBER(magicard_state::philips_66470_w)
void magicard_state::magicard_mem(address_map &map)
{
-// ADDRESS_MAP_GLOBAL_MASK(0x1fffff)
+// map.global_mask(0x1fffff);
map(0x00000000, 0x001ffbff).mirror(0x00200000).ram().share("magicram");
map(0x00600000, 0x007ffbff).ram().share("magicramb");
/* 001ffc00-001ffdff System I/O */
@@ -773,7 +773,7 @@ void magicard_state::magicard_mem(address_map &map)
void magicard_state::hotslots_mem(address_map &map)
{
-// ADDRESS_MAP_GLOBAL_MASK(0x1fffff)
+// map.global_mask(0x1fffff);
map(0x00000000, 0x001ffbff).mirror(0x00200000).ram().share("magicram");
map(0x00600000, 0x007ffbff).ram().share("magicramb");
map(0x001fff80, 0x001fffbf).mirror(0x7fe00000).ram(); //DRAM I/O, not accessed by this game, CD buffer?
diff --git a/src/mame/drivers/magictg.cpp b/src/mame/drivers/magictg.cpp
index 49815c6bcd6..e839285a4d3 100644
--- a/src/mame/drivers/magictg.cpp
+++ b/src/mame/drivers/magictg.cpp
@@ -882,7 +882,7 @@ void magictg_state::adsp_program_map(address_map &map)
void magictg_state::adsp_data_map(address_map &map)
{
map.unmap_value_high();
-// AM_RANGE(0x0000, 0x03ff) AM_RAMBANK("databank")
+// map(0x0000, 0x03ff).bankrw("databank");
map(0x0400, 0x3fdf).ram();
map(0x3fe0, 0x3fff).rw(FUNC(magictg_state::adsp_control_r), FUNC(magictg_state::adsp_control_w));
}
diff --git a/src/mame/drivers/mattelchess.cpp b/src/mame/drivers/mattelchess.cpp
index ee61ea38ec7..6447f6458bf 100644
--- a/src/mame/drivers/mattelchess.cpp
+++ b/src/mame/drivers/mattelchess.cpp
@@ -224,8 +224,8 @@ ROM_START( mchess )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD("ins8050-6hwu_n", 0x0000, 0x1000, CRC(de272323) SHA1(9ba323b614504e20b25c86d290c0667f0bbf6c6b) )
- ROM_REGION( 796334, "screen", 0)
- ROM_LOAD( "mchess.svg", 0, 796334, CRC(88792457) SHA1(cc8b654829532a8cbb7447176436c113ac584bba) )
+ ROM_REGION( 796406, "screen", 0)
+ ROM_LOAD( "mchess.svg", 0, 796406, CRC(795d66e0) SHA1(5f786c00bf33793bfba7065d8e9ec476e02e5c46) )
ROM_END
} // anonymous namespace
diff --git a/src/mame/drivers/maygay1b.cpp b/src/mame/drivers/maygay1b.cpp
index cd519e5a75c..0dad73569c7 100644
--- a/src/mame/drivers/maygay1b.cpp
+++ b/src/mame/drivers/maygay1b.cpp
@@ -440,7 +440,7 @@ void maygay1b_state::m1_memmap(address_map &map)
#else
//8051
map(0x2040, 0x2041).rw("i8279_2", FUNC(i8279_device::read), FUNC(i8279_device::write));
-// AM_RANGE(0x2050, 0x2050)// SCAN on M1B
+// map(0x2050, 0x2050)// SCAN on M1B
#endif
map(0x2070, 0x207f).rw(m_duart68681, FUNC(mc68681_device::read), FUNC(mc68681_device::write));
@@ -526,7 +526,7 @@ void maygay1b_state::m1_nec_memmap(address_map &map)
#else
//8051
map(0x2040, 0x2041).rw("i8279_2", FUNC(i8279_device::read), FUNC(i8279_device::write));
-// AM_RANGE(0x2050, 0x2050)// SCAN on M1B
+// map(0x2050, 0x2050)// SCAN on M1B
#endif
map(0x2070, 0x207f).rw(m_duart68681, FUNC(mc68681_device::read), FUNC(mc68681_device::write));
@@ -856,7 +856,7 @@ void maygay1b_state::init_m1()
{
init_m1common();
- //AM_RANGE(0x2420, 0x2421) AM_WRITE(latch_ch2_w ) // oki
+ //map(0x2420, 0x2421).w(FUNC(maygay1b_state::latch_ch2_w)); // oki
// if there is no OKI region disable writes here, the rom might be missing, so alert user
if (m_oki_region == nullptr) {
diff --git a/src/mame/drivers/mazerbla.cpp b/src/mame/drivers/mazerbla.cpp
index f7c06af2c77..1f90d1ec58f 100644
--- a/src/mame/drivers/mazerbla.cpp
+++ b/src/mame/drivers/mazerbla.cpp
@@ -474,7 +474,7 @@ void mazerbla_state::mazerbla_io_map(address_map &map)
{
map.global_mask(0xff);
map(0x4c, 0x4f).rw(FUNC(mazerbla_state::ls670_1_r), FUNC(mazerbla_state::ls670_0_w));
- map(0x60, 0x60).w(FUNC(mazerbla_state::zpu_bcd_decoder_w)); // AM_READ from protection pal, if populated
+ map(0x60, 0x60).w(FUNC(mazerbla_state::zpu_bcd_decoder_w)); // r(FUNC(mazerbla_state::) from protection pal, if populated
map(0x62, 0x62).r(FUNC(mazerbla_state::zpu_inputs_r));
// 64 is some sort of output latch, unpopulated?
// 66 is some sort of output latch, unpopulated?
diff --git a/src/mame/drivers/mbee.cpp b/src/mame/drivers/mbee.cpp
index db19860afee..a875a3338ee 100644
--- a/src/mame/drivers/mbee.cpp
+++ b/src/mame/drivers/mbee.cpp
@@ -330,15 +330,15 @@ void mbee_state::mbee256_io(address_map &map)
map(0x000b, 0x000b).mirror(0xff00).w(FUNC(mbee_state::port0b_w));
map(0x000c, 0x000c).mirror(0xff00).r(m_crtc, FUNC(mc6845_device::status_r)).w(FUNC(mbee_state::m6545_index_w));
map(0x000d, 0x000d).mirror(0xff00).r(m_crtc, FUNC(mc6845_device::register_r)).w(FUNC(mbee_state::m6545_data_w));
- // AM_RANGE(0x0010, 0x0013) AM_MIRROR(0xff00) Optional SN76489AN audio chip
+ // map(0x0010, 0x0013).mirror(0xff00); Optional SN76489AN audio chip
map(0x0018, 0x001b).mirror(0xff00).r(FUNC(mbee_state::port18_r));
map(0x001c, 0x001f).mirror(0xff00).rw(FUNC(mbee_state::port1c_r), FUNC(mbee_state::port1c_w));
map(0x0044, 0x0047).mirror(0xff00).rw(m_fdc, FUNC(wd2793_device::read), FUNC(wd2793_device::write));
map(0x0048, 0x004f).mirror(0xff00).rw(FUNC(mbee_state::fdc_status_r), FUNC(mbee_state::fdc_motor_w));
map(0x0050, 0x0057).mirror(0xff00).w(FUNC(mbee_state::mbee256_50_w));
- // AM_RANGE(0x0058, 0x005f) AM_MIRROR(0xff00) External options: floppy drive, hard drive and keyboard
- // AM_RANGE(0x0060, 0x0067) AM_MIRROR(0xff00) Reserved for file server selection (unused)
- // AM_RANGE(0x0068, 0x006f) AM_MIRROR(0xff00) Reserved for 8530 SCC (unused)
+ // map(0x0058, 0x005f).mirror(0xff00); External options: floppy drive, hard drive and keyboard
+ // map(0x0060, 0x0067).mirror(0xff00); Reserved for file server selection (unused)
+ // map(0x0068, 0x006f).mirror(0xff00); Reserved for 8530 SCC (unused)
}
static INPUT_PORTS_START( oldkb )
diff --git a/src/mame/drivers/mcatadv.cpp b/src/mame/drivers/mcatadv.cpp
index 86bc18b656e..d062e19c0bd 100644
--- a/src/mame/drivers/mcatadv.cpp
+++ b/src/mame/drivers/mcatadv.cpp
@@ -148,47 +148,45 @@ Stephh's notes (based on the games M68000 code and some tests) :
#include "speaker.h"
+template<int Chip>
+void mcatadv_state::get_banked_color(bool tiledim, u32 &color, u32 &pri, u32 &code)
+{
+ pri |= 0x8;
+ color += m_palette_bank[Chip] * 0x40;
+}
+
/*** Main CPU ***/
#if 0 // mcat only.. install read handler?
-WRITE16_MEMBER(mcatadv_state::mcat_coin_w)
+void mcatadv_state::mcat_coin_w(u8 data)
{
- if(ACCESSING_BITS_8_15)
- {
- machine().bookkeeping().coin_counter_w(0, data & 0x1000);
- machine().bookkeeping().coin_counter_w(1, data & 0x2000);
- machine().bookkeeping().coin_lockout_w(0, ~data & 0x4000);
- machine().bookkeeping().coin_lockout_w(1, ~data & 0x8000);
- }
+ machine().bookkeeping().coin_counter_w(0, data & 0x10);
+ machine().bookkeeping().coin_counter_w(1, data & 0x20);
+ machine().bookkeeping().coin_lockout_w(0, ~data & 0x40);
+ machine().bookkeeping().coin_lockout_w(1, ~data & 0x80);
}
#endif
-READ16_MEMBER(mcatadv_state::mcat_wd_r)
+u16 mcatadv_state::mcat_wd_r()
{
- m_watchdog->watchdog_reset();
+ if (!machine().side_effects_disabled())
+ m_watchdog->watchdog_reset();
return 0xc00;
}
-template<int Chip>
-WRITE16_MEMBER(mcatadv_state::vram_w)
-{
- COMBINE_DATA(&m_vram[Chip][offset]);
- m_tilemap[Chip]->mark_tile_dirty(offset / 2);
-}
-
void mcatadv_state::mcatadv_map(address_map &map)
{
map(0x000000, 0x0fffff).rom();
map(0x100000, 0x10ffff).ram();
-// AM_RANGE(0x180018, 0x18001f) AM_READNOP // ?
+// map(0x180018, 0x18001f).nopr(); // ?
- map(0x200000, 0x200005).ram().share("scroll1");
- map(0x300000, 0x300005).ram().share("scroll2");
+ map(0x200000, 0x200005).rw(m_tilemap[0], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w));
+ map(0x300000, 0x300005).rw(m_tilemap[1], FUNC(tilemap038_device::vregs_r), FUNC(tilemap038_device::vregs_w));
- map(0x400000, 0x401fff).ram().w(FUNC(mcatadv_state::vram_w<0>)).share("vram_1"); // Tilemap 0
- map(0x500000, 0x501fff).ram().w(FUNC(mcatadv_state::vram_w<1>)).share("vram_2"); // Tilemap 1
+ map(0x400000, 0x401fff).m(m_tilemap[0], FUNC(tilemap038_device::vram_16x16_map)); // Tilemap 0
+ map(0x500000, 0x501fff).m(m_tilemap[1], FUNC(tilemap038_device::vram_16x16_map)); // Tilemap 1
map(0x600000, 0x601fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x602000, 0x602fff).ram(); // Bigger than needs to be?
@@ -198,7 +196,7 @@ void mcatadv_state::mcatadv_map(address_map &map)
map(0x800000, 0x800001).portr("P1");
map(0x800002, 0x800003).portr("P2");
-// AM_RANGE(0x900000, 0x900001) AM_WRITE(mcat_coin_w) // Lockout / Counter MCAT Only
+// map(0x900000, 0x900000).w(FUNC(mcatadv_state::mcat_coin_w)); // Lockout / Counter MCAT Only
map(0xa00000, 0xa00001).portr("DSW1");
map(0xa00002, 0xa00003).portr("DSW2");
@@ -212,7 +210,7 @@ void mcatadv_state::mcatadv_map(address_map &map)
/*** Sound ***/
-WRITE8_MEMBER(mcatadv_state::mcatadv_sound_bw_w)
+void mcatadv_state::mcatadv_sound_bw_w(u8 data)
{
m_soundbank->set_entry(data);
}
@@ -408,14 +406,14 @@ INPUT_PORTS_END
/*** GFX Decode ***/
static GFXDECODE_START( gfx_mcatadv )
- GFXDECODE_ENTRY( "bg0", 0, gfx_8x8x4_row_2x2_group_packed_msb, 0, 0x200 )
- GFXDECODE_ENTRY( "bg1", 0, gfx_8x8x4_row_2x2_group_packed_msb, 0, 0x200 )
+ GFXDECODE_ENTRY( "bg0", 0, gfx_8x8x4_packed_msb, 0, 0x200 )
+ GFXDECODE_ENTRY( "bg1", 0, gfx_8x8x4_packed_msb, 0, 0x200 )
GFXDECODE_END
void mcatadv_state::machine_start()
{
- uint32_t max = memregion("soundcpu")->bytes()/0x4000;
+ const u32 max = memregion("soundcpu")->bytes()/0x4000;
m_soundbank->configure_entries(0, max, memregion("soundcpu")->base(), 0x4000);
m_soundbank->set_entry(1);
@@ -447,6 +445,16 @@ void mcatadv_state::mcatadv(machine_config &config)
GFXDECODE(config, m_gfxdecode, m_palette, gfx_mcatadv);
PALETTE(config, m_palette).set_format(palette_device::xGRB_555, 0x2000/2);
+ TMAP038(config, m_tilemap[0]);
+ m_tilemap[0]->set_gfxdecode_tag(m_gfxdecode);
+ m_tilemap[0]->set_gfx(0);
+ m_tilemap[0]->set_tile_callback(tilemap038_device::tmap038_cb_delegate(FUNC(mcatadv_state::get_banked_color<0>), this));
+
+ TMAP038(config, m_tilemap[1]);
+ m_tilemap[1]->set_gfxdecode_tag(m_gfxdecode);
+ m_tilemap[1]->set_gfx(1);
+ m_tilemap[1]->set_tile_callback(tilemap038_device::tmap038_cb_delegate(FUNC(mcatadv_state::get_banked_color<1>), this));
+
WATCHDOG_TIMER(config, m_watchdog).set_time(attotime::from_seconds(3)); /* a guess, and certainly wrong */
/* sound hardware */
diff --git a/src/mame/drivers/megaplay.cpp b/src/mame/drivers/megaplay.cpp
index 87b0eca0d00..e1d9a74d02b 100644
--- a/src/mame/drivers/megaplay.cpp
+++ b/src/mame/drivers/megaplay.cpp
@@ -675,14 +675,14 @@ void mplay_state::megaplay(machine_config &config)
config.m_minimum_quantum = attotime::from_hz(6000);
- cxd1095_device &io1(CXD1095(config, "io1", 0));
+ cxd1095_device &io1(CXD1095(config, "io1"));
io1.in_porta_cb().set_ioport("DSW0");
io1.in_portb_cb().set_ioport("DSW1");
io1.out_portd_cb().set(FUNC(mplay_state::bios_banksel_w));
io1.in_porte_cb().set(FUNC(mplay_state::bios_6204_r));
io1.out_porte_cb().set(FUNC(mplay_state::bios_width_w));
- cxd1095_device &io2(CXD1095(config, "io2", 0));
+ cxd1095_device &io2(CXD1095(config, "io2"));
io2.in_porta_cb().set_ioport("TEST");
io2.in_portb_cb().set_ioport("COIN");
io2.in_portc_cb().set(FUNC(mplay_state::bios_6402_r));
diff --git a/src/mame/drivers/megasys1.cpp b/src/mame/drivers/megasys1.cpp
index 25e0c2d80b9..4e097cd0755 100644
--- a/src/mame/drivers/megasys1.cpp
+++ b/src/mame/drivers/megasys1.cpp
@@ -335,7 +335,7 @@ void megasys1_state::megasys1B_edfbl_map(address_map &map)
map(0x0e0006, 0x0e0007).portr("P2");
map(0x0e0008, 0x0e0009).portr("DSW1");
map(0x0e000a, 0x0e000b).portr("DSW2");
- //AM_RANGE(0x0e000e, 0x0e000f) AM_WRITE(soundlatch_w)
+ //map(0x0e000e, 0x0e000f).w(FUNC(megasys1_state::soundlatch_w));
}
void megasys1_state::megasys1B_monkelf_map(address_map &map)
@@ -410,7 +410,7 @@ void megasys1_state::megasys1D_map(address_map &map)
map(0x000000, 0x03ffff).rom();
map(0x0c2000, 0x0c2005).rw("scroll0", FUNC(megasys1_tilemap_device::scroll_r), FUNC(megasys1_tilemap_device::scroll_w));
map(0x0c2008, 0x0c200d).rw("scroll1", FUNC(megasys1_tilemap_device::scroll_r), FUNC(megasys1_tilemap_device::scroll_w));
- map(0x0c2108, 0x0c2109).nopw(); //AM_WRITE(sprite_bank_w)
+ map(0x0c2108, 0x0c2109).nopw(); //.w(FUNC(megasys1_state::sprite_bank_w));
map(0x0c2200, 0x0c2201).rw(FUNC(megasys1_state::sprite_flag_r), FUNC(megasys1_state::sprite_flag_w));
map(0x0c2208, 0x0c2209).w(FUNC(megasys1_state::active_layers_w));
map(0x0c2308, 0x0c2309).w(FUNC(megasys1_state::screen_flag_w));
@@ -504,6 +504,15 @@ READ8_MEMBER(megasys1_state::oki_status_r)
return m_oki[Chip]->read();
}
+void megasys1_state::p47b_adpcm_w(offs_t offset, u8 data)
+{
+ // bit 6 is always set
+ m_p47b_adpcm[offset]->reset_w(BIT(data, 7));
+ m_p47b_adpcm[offset]->write_data(data & 0x0f);
+ m_p47b_adpcm[offset]->vclk_w(1);
+ m_p47b_adpcm[offset]->vclk_w(0);
+}
+
/***************************************************************************
[ Sound CPU - System A ]
***************************************************************************/
@@ -545,13 +554,26 @@ void megasys1_state::p47b_sound_map(address_map &map)
{
map(0x000000, 0x01ffff).rom();
map(0x040000, 0x040001).r(m_soundlatch[0], FUNC(generic_latch_16_device::read));
- map(0x060000, 0x060001).w(m_soundlatch[1], FUNC(generic_latch_16_device::write)); // to main cpu
+ map(0x060000, 0x060001).w(m_soundlatch[1], FUNC(generic_latch_16_device::write)); // to main cpu?
map(0x080000, 0x080003).rw("ymsnd", FUNC(ym2203_device::read), FUNC(ym2203_device::write)).umask16(0x00ff);
map(0x0a0000, 0x0a0003).noprw(); // OKI1 on the original
- map(0x0c0000, 0x0c0003).noprw(); // OKI2 on the original
+ map(0x0c0001, 0x0c0001).w("soundlatch3", FUNC(generic_latch_8_device::write));
+ map(0x0c0002, 0x0c0003).noprw(); // OKI2 on the original
map(0x0e0000, 0x0fffff).ram();
}
+void megasys1_state::p47b_extracpu_prg_map(address_map &map) // TODO
+{
+ map(0x0000, 0xffff).rom().nopw();
+}
+
+void megasys1_state::p47b_extracpu_io_map(address_map &map)
+{
+ map.global_mask(0xff);
+ map(0x00, 0x01).w(FUNC(megasys1_state::p47b_adpcm_w));
+ map(0x01, 0x01).r("soundlatch3", FUNC(generic_latch_8_device::read));
+}
+
/***************************************************************************
[ Sound CPU - System B / C ]
***************************************************************************/
@@ -1771,10 +1793,26 @@ void megasys1_state::p47b(machine_config &config)
config.device_remove("oki1");
- // what's this for? SFX?
- //z80_device &extracpu(Z80(config, "extracpu", 7.2_MHz_XTAL / 2)); // divisor not verified
- //extracpu.set_addrmap(AS_PROGRAM, &megasys1_state::p47b_extracpu_prg_map);
- //extracpu.set_addrmap(AS_IO, &megasys1_state::p47b_extracpu_io_map);
+ subdevice<ym2203_device>("ymsnd")->set_clock(7.2_MHz_XTAL / 2);
+
+ // probably for driving the OKI M5205
+ z80_device &extracpu(Z80(config, "extracpu", 7.2_MHz_XTAL / 2)); // divisor not verified
+ extracpu.set_periodic_int(FUNC(megasys1_state::irq0_line_hold), attotime::from_hz(8000));
+ extracpu.set_addrmap(AS_PROGRAM, &megasys1_state::p47b_extracpu_prg_map);
+ extracpu.set_addrmap(AS_IO, &megasys1_state::p47b_extracpu_io_map);
+
+ GENERIC_LATCH_8(config, "soundlatch3");
+
+ // OKI M5205
+ MSM5205(config, m_p47b_adpcm[0], 384000);
+ m_p47b_adpcm[0]->set_prescaler_selector(msm5205_device::SEX_4B);
+ m_p47b_adpcm[0]->add_route(ALL_OUTPUTS, "lspeaker", 1.0);
+ m_p47b_adpcm[0]->add_route(ALL_OUTPUTS, "rspeaker", 1.0);
+
+ MSM5205(config, m_p47b_adpcm[1], 384000);
+ m_p47b_adpcm[1]->set_prescaler_selector(msm5205_device::SEX_4B);
+ m_p47b_adpcm[1]->add_route(ALL_OUTPUTS, "lspeaker", 1.0);
+ m_p47b_adpcm[1]->add_route(ALL_OUTPUTS, "rspeaker", 1.0);
}
void megasys1_state::system_B(machine_config &config)
@@ -3588,7 +3626,7 @@ ROM_START( p47je )
ROM_LOAD( "p-47.14m", 0x0000, 0x0200, CRC(1d877538) SHA1(a5be0dc65dcfc36fbba10d1fddbe155e24b6122f) )
ROM_END
-ROM_START( p47b ) // very similar to original hardware but for the sound system (only a YM2203 with a Y3014B DAC with unpopulated spaces for another pair) and an extra Z80 (purpose unknown)
+ROM_START( p47b ) // very similar to original hardware but for the sound system (a YM2203 with a Y3014B DAC with unpopulated spaces for another pair + an OKI M5205) and an extra Z80
ROM_REGION( 0x60000, "maincpu", 0 ) /* Main CPU Code, identical to p47 set but with smaller ROMs */
ROM_LOAD16_BYTE( "12.bin", 0x000000, 0x010000, CRC(cc81abd8) SHA1(223d205ee5120d16b997b0788fcb81c0de52da04) )
ROM_LOAD16_BYTE( "13.bin", 0x020000, 0x010000, CRC(f3ea8a3e) SHA1(b2ea6661f7a3653ac6d92e07176546a41178eaff) )
@@ -3599,7 +3637,7 @@ ROM_START( p47b ) // very similar to original hardware but for the sound system
ROM_LOAD16_BYTE( "3.bin", 0x000000, 0x010000, CRC(617906d6) SHA1(79b43de70a51840f9980b5e3b9c769df0ec23060) )
ROM_LOAD16_BYTE( "2.bin", 0x000001, 0x010000, CRC(cde8f971) SHA1(dc529799584065749d43c79a42a0296db015f810) )
- ROM_REGION( 0x10000, "extracpu", 0 ) /* Extra Z80 CPU Code, what's this for? */
+ ROM_REGION( 0x10000, "extracpu", 0 ) /* Extra Z80 CPU Code, code very similar to Street Fighter */
ROM_LOAD( "1.bin", 0x000000, 0x010000, CRC(5c38bf63) SHA1(8d4750e0b54602c38041ee6dd17007c3cc5cc938) )
ROM_REGION( 0x080000, "scroll0", 0 ) /* Scroll 0, identical to p47 set but with smaller ROMs */
@@ -4919,7 +4957,7 @@ GAME( 1988, makaiden, lomakai, system_Z, lomakai, megasys1_state, emp
GAME( 1988, p47, 0, system_A, p47, megasys1_state, empty_init, ROT0, "Jaleco", "P-47 - The Phantom Fighter (World)", MACHINE_SUPPORTS_SAVE )
GAME( 1988, p47j, p47, system_A, p47, megasys1_state, empty_init, ROT0, "Jaleco", "P-47 - The Freedom Fighter (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1988, p47je, p47, system_A, p47, megasys1_state, empty_init, ROT0, "Jaleco", "P-47 - The Freedom Fighter (Japan, Export)", MACHINE_SUPPORTS_SAVE )
-GAME( 1988, p47b, p47, p47b, p47, megasys1_state, empty_init, ROT0, "bootleg","P-47 - The Freedom Fighter (World, bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // missing SFX
+GAME( 1988, p47b, p47, p47b, p47, megasys1_state, empty_init, ROT0, "bootleg","P-47 - The Freedom Fighter (World, bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1988, kickoff, 0, system_A, kickoff, megasys1_state, empty_init, ROT0, "Jaleco", "Kick Off (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1988, kickoffb, kickoff, kickoffb, kickoff, megasys1_state, empty_init, ROT0, "bootleg (Comodo)", "Kick Off (bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // OKI needs to be checked
GAME( 1988, tshingen, 0, system_A, tshingen, megasys1_state, init_phantasm, ROT0, "Jaleco", "Shingen Samurai-Fighter (Japan, English)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/megatech.cpp b/src/mame/drivers/megatech.cpp
index 1a6f6916dd8..05910e7fe66 100644
--- a/src/mame/drivers/megatech.cpp
+++ b/src/mame/drivers/megatech.cpp
@@ -538,7 +538,7 @@ void mtech_state::megatech_bios_map(address_map &map)
map(0x6400, 0x6407).rw("io1", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write));
map(0x6800, 0x6807).rw("io2", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write));
map(0x7000, 0x77ff).rom(); // from bios rom (0x7000-0x77ff populated in ROM)
- //AM_RANGE(0x7800, 0x7fff) AM_RAM // ?
+ //map(0x7800, 0x7fff).ram(); // ?
map(0x8000, 0x9fff).rw(FUNC(mtech_state::read_68k_banked_data), FUNC(mtech_state::write_68k_banked_data)); // window into 68k address space, reads instr rom and writes to reset banks on z80 carts?
}
@@ -691,12 +691,12 @@ void mtech_state::megatech(machine_config &config)
m_bioscpu->set_addrmap(AS_PROGRAM, &mtech_state::megatech_bios_map);
m_bioscpu->set_addrmap(AS_IO, &mtech_state::megatech_bios_portmap);
- cxd1095_device &io1(CXD1095(config, "io1", 0));
+ cxd1095_device &io1(CXD1095(config, "io1"));
io1.in_porta_cb().set_ioport("BIOS_DSW0");
io1.in_portb_cb().set_ioport("BIOS_DSW1");
io1.out_porte_cb().set(FUNC(mtech_state::cart_select_w));
- cxd1095_device &io2(CXD1095(config, "io2", 0));
+ cxd1095_device &io2(CXD1095(config, "io2"));
io2.in_porta_cb().set_ioport("BIOS_IN0");
io2.in_portb_cb().set_ioport("BIOS_IN1");
io2.in_portc_cb().set(FUNC(mtech_state::bios_portc_r));
diff --git a/src/mame/drivers/mephisto_modular.cpp b/src/mame/drivers/mephisto_modular.cpp
index b125ae0e8ac..098a65aef75 100644
--- a/src/mame/drivers/mephisto_modular.cpp
+++ b/src/mame/drivers/mephisto_modular.cpp
@@ -127,9 +127,9 @@ void mmodular_state::van16_mem(address_map &map)
map(0x000000, 0x03ffff).rom();
-// AM_RANGE( 0xe80004, 0xe80005 ) AM_WRITE(write_unknown2 ) // Bavaria sensors
-// AM_RANGE( 0xe80002, 0xe80003 ) AM_READ(read_unknown1 ) // Bavaria sensors
-// AM_RANGE( 0xe80006, 0xe80007 ) AM_READ(read_unknown3 ) // Bavaria sensors
+// map(0xe80004, 0xe80005).w(FUNC(mmodular_state::write_unknown2)); // Bavaria sensors
+// map(0xe80002, 0xe80003).r(FUNC(mmodular_state::read_unknown1)); // Bavaria sensors
+// map(0xe80006, 0xe80007).r(FUNC(mmodular_state::read_unknown3)); // Bavaria sensors
}
void mmodular_state::alm32_mem(address_map &map)
@@ -156,9 +156,9 @@ void mmodular_state::van32_mem(address_map &map)
map(0x00000000, 0x0003ffff).rom();
-// AM_RANGE( 0x98000008, 0x9800000b ) AM_WRITE(write_unknown2 ) // Bavaria sensors
-// AM_RANGE( 0x98000004, 0x98000007 ) AM_READ(read_unknown1 ) // Bavaria sensors
-// AM_RANGE( 0x9800000c, 0x9800000f ) AM_READ(read_unknown3 ) // Bavaria sensors
+// map(0x98000008, 0x9800000b).w(FUNC(mmodular_state::write_unknown2)); // Bavaria sensors
+// map(0x98000004, 0x98000007).r(FUNC(mmodular_state::read_unknown1)); // Bavaria sensors
+// map(0x9800000c, 0x9800000f).r(FUNC(mmodular_state::read_unknown3)); // Bavaria sensors
}
void mmodular_state::gen32_mem(address_map &map)
@@ -174,9 +174,9 @@ void mmodular_state::gen32_mem(address_map &map)
map(0xe0000000, 0xe0000000).w("display", FUNC(mephisto_display_modul_device::latch_w));
map(0xe0000010, 0xe0000010).w("display", FUNC(mephisto_display_modul_device::io_w));
-// AM_RANGE( 0xd8000008, 0xd800000b ) AM_WRITE(write_unknown2 ) // Bavaria sensors
-// AM_RANGE( 0xd8000004, 0xd8000007 ) AM_READ(read_unknown1 ) // Bavaria sensors
-// AM_RANGE( 0xd800000c, 0xd800000f ) AM_READ(read_unknown3 ) // Bavaria sensors
+// map(0xd8000008, 0xd800000b).w(FUNC(mmodular_state::write_unknown2)); // Bavaria sensors
+// map(0xd8000004, 0xd8000007).r(FUNC(mmodular_state::read_unknown1)); // Bavaria sensors
+// map(0xd800000c, 0xd800000f).r(FUNC(mmodular_state::read_unknown3)); // Bavaria sensors
map(0x40000000, 0x4007ffff).ram();
map(0x80000000, 0x8003ffff).ram();
diff --git a/src/mame/drivers/mephistp.cpp b/src/mame/drivers/mephistp.cpp
index cad36dc7a8b..54a408e480c 100644
--- a/src/mame/drivers/mephistp.cpp
+++ b/src/mame/drivers/mephistp.cpp
@@ -110,7 +110,7 @@ void mephisto_pinball_state::mephisto_map(address_map &map)
{
map(0x00000, 0x0ffff).rom().region("maincpu", 0);
map(0x10000, 0x107ff).ram().share("nvram");
- map(0x12000, 0x1201f).noprw(); //AM_DEVREADWRITE("muart", i8256_device, read, write)
+ map(0x12000, 0x1201f).noprw(); //.rw("muart", FUNC(i8256_device::read), FUNC(i8256_device::write));
map(0x13000, 0x130ff).rw("ic20", FUNC(i8155_device::memory_r), FUNC(i8155_device::memory_w));
map(0x13800, 0x13807).rw("ic20", FUNC(i8155_device::io_r), FUNC(i8155_device::io_w));
map(0x14000, 0x140ff).rw("ic9", FUNC(i8155_device::memory_r), FUNC(i8155_device::memory_w));
diff --git a/src/mame/drivers/metlclsh.cpp b/src/mame/drivers/metlclsh.cpp
index 562318e5257..a997313976e 100644
--- a/src/mame/drivers/metlclsh.cpp
+++ b/src/mame/drivers/metlclsh.cpp
@@ -121,8 +121,8 @@ void metlclsh_state::metlclsh_slave_map(address_map &map)
map(0xe301, 0xe301).w(FUNC(metlclsh_state::metlclsh_flipscreen_w)); // 0/1
map(0xe401, 0xe401).w(FUNC(metlclsh_state::metlclsh_rambank_w));
map(0xe402, 0xe403).writeonly().share("scrollx");
-// AM_RANGE(0xe404, 0xe404) AM_WRITENOP // ? 0
-// AM_RANGE(0xe410, 0xe410) AM_WRITENOP // ? 0 on startup only
+// map(0xe404, 0xe404).nopw(); // ? 0
+// map(0xe410, 0xe410).nopw(); // ? 0 on startup only
map(0xe417, 0xe417).w(FUNC(metlclsh_state::metlclsh_ack_nmi2)); // nmi ack
map(0xfff0, 0xffff).rom(); // Reset/IRQ vectors
}
diff --git a/src/mame/drivers/metlfrzr.cpp b/src/mame/drivers/metlfrzr.cpp
index b436bdd6686..65fcaf95eac 100644
--- a/src/mame/drivers/metlfrzr.cpp
+++ b/src/mame/drivers/metlfrzr.cpp
@@ -359,11 +359,11 @@ TIMER_DEVICE_CALLBACK_MEMBER(metlfrzr_state::scanline)
int scanline = param;
if(scanline == 240) // vblank-out irq
- m_maincpu->set_input_line_and_vector(0, HOLD_LINE,0x10); /* Z80 - RST 10h */
+ m_maincpu->set_input_line_and_vector(0, HOLD_LINE,0xd7); /* Z80 - RST 10h */
// TODO: check this irq.
if(scanline == 0) // vblank-in irq
- m_maincpu->set_input_line_and_vector(0, HOLD_LINE,0x08); /* Z80 - RST 08h */
+ m_maincpu->set_input_line_and_vector(0, HOLD_LINE,0xcf); /* Z80 - RST 08h */
}
void metlfrzr_state::metlfrzr(machine_config &config)
diff --git a/src/mame/drivers/meyc8080.cpp b/src/mame/drivers/meyc8080.cpp
index 3283f59d41c..dcb1ede5e88 100644
--- a/src/mame/drivers/meyc8080.cpp
+++ b/src/mame/drivers/meyc8080.cpp
@@ -324,7 +324,7 @@ void meyc8080_state::meyc8080_map(address_map &map)
map(0x4000, 0x5fff).ram().share("vram0");
map(0x6000, 0x7fff).ram().share("vram1");
map(0x8000, 0x9fff).ram().share("vram2");
-// AM_RANGE(0xa000, 0xa0ff) AM_RAM // unknown... filled with 00's at boot time or when entering the service mode.
+// map(0xa000, 0xa0ff).ram(); // unknown... filled with 00's at boot time or when entering the service mode.
map(0xcd00, 0xcdff).ram().share("nvram");
map(0xf000, 0xf000).portr("BSW").w(FUNC(meyc8080_state::meyc8080_dac_1_w));
map(0xf004, 0xf004).portr("IN1").w(FUNC(meyc8080_state::lights_1_w));
diff --git a/src/mame/drivers/mgames.cpp b/src/mame/drivers/mgames.cpp
index 58b0a2406ba..6c11e57e462 100644
--- a/src/mame/drivers/mgames.cpp
+++ b/src/mame/drivers/mgames.cpp
@@ -535,7 +535,7 @@ WRITE8_MEMBER(mgames_state::outport7_w)
void mgames_state::main_map(address_map &map)
{
map(0x0000, 0x2fff).rom();
-// AM_RANGE(0x0158, 0x0158) AM_WRITE (muxed_w)
+// map(0x0158, 0x0158).w(FUNC(mgames_state::muxed_w));
map(0x3800, 0x38ff).ram().share("nvram"); /* NVRAM = 2x SCM5101E */
map(0x4000, 0x47ff).ram().share("video"); /* 4x MM2114N-3 */
map(0x8000, 0x8000).portr("SW1");
diff --git a/src/mame/drivers/mgavegas.cpp b/src/mame/drivers/mgavegas.cpp
index 741f4ec8ce9..367f4c3dc8b 100644
--- a/src/mame/drivers/mgavegas.cpp
+++ b/src/mame/drivers/mgavegas.cpp
@@ -426,8 +426,8 @@ void mgavegas_state::mgavegas_map(address_map &map)
map(0xc000, 0xc001).w(FUNC(mgavegas_state::cso1_w)); // /CSout1
map(0xc400, 0xc401).w(FUNC(mgavegas_state::cso2_w)); // /CSout2
map(0xc800, 0xc801).rw(FUNC(mgavegas_state::csoki_r), FUNC(mgavegas_state::csoki_w)); // /CSoki
- //AM_RANGE(0xcc00, 0xcc01) AM_READWRITE(cso3_r,cso3_w) // /CSout3 unused
- //AM_RANGE(0xe000, 0xe003) AM_READWRITE(r_e0,w_e0) // /CSaux unused
+ //map(0xcc00, 0xcc01).rw(FUNC(mgavegas_state::cso3_r), FUNC(mgavegas_state::cso3_w)); // /CSout3 unused
+ //map(0xe000, 0xe003).rw(FUNC(mgavegas_state::r_e0), FUNC(mgavegas_state::w_e0)); // /CSaux unused
}
diff --git a/src/mame/drivers/mhavoc.cpp b/src/mame/drivers/mhavoc.cpp
index 52d51efd330..e4c558188a1 100644
--- a/src/mame/drivers/mhavoc.cpp
+++ b/src/mame/drivers/mhavoc.cpp
@@ -327,8 +327,8 @@ void mhavoc_state::gamma_map(address_map &map)
map(0x4000, 0x4000).portr("DSW2").w(FUNC(mhavoc_state::mhavoc_gamma_irq_ack_w)).mirror(0x07ff); /* DSW at 8S, IRQ Acknowledge */
map(0x4800, 0x4800).w(FUNC(mhavoc_state::mhavoc_out_1_w)).mirror(0x07ff); /* Coin Counters */
map(0x5000, 0x5000).w(FUNC(mhavoc_state::mhavoc_alpha_w)).mirror(0x07ff); /* Alpha Comm. Write Port */
- //AM_RANGE(0x5800, 0x5800) AM_WRITE(mhavocrv_speech_data_w) AM_MIRROR(0x06ff) /* TMS5220 data write */
- //AM_RANGE(0x5900, 0x5900) AM_WRITE(mhavocrv_speech_strobe_w) AM_MIRROR(0x06ff) /* TMS5220 /WS strobe write */
+ //map(0x5800, 0x5800).w(FUNC(mhavoc_state::mhavocrv_speech_data_w)).mirror(0x06ff); /* TMS5220 data write */
+ //map(0x5900, 0x5900).w(FUNC(mhavoc_state::mhavocrv_speech_strobe_w)).mirror(0x06ff); /* TMS5220 /WS strobe write */
map(0x6000, 0x61ff).rw("eeprom", FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write)).mirror(0x1e00); /* EEROM */
map(0x8000, 0xbfff).rom().mirror(0x4000); /* Program ROM (16K) */
}
diff --git a/src/mame/drivers/micral.cpp b/src/mame/drivers/micral.cpp
index 5b016e6576a..9db756816c7 100644
--- a/src/mame/drivers/micral.cpp
+++ b/src/mame/drivers/micral.cpp
@@ -164,7 +164,7 @@ void micral_state::mem_map(address_map &map)
map(0x0000, 0xf7ff).ram();
map(0xf800, 0xfeff).rom();
map(0xff00, 0xffef).ram();
- map(0xfff6, 0xfff7); // AM_WRITENOP // unknown ports
+ map(0xfff6, 0xfff7); // .nopw(); // unknown ports
map(0xfff8, 0xfff9).rw(FUNC(micral_state::video_r), FUNC(micral_state::video_w));
map(0xfffa, 0xfffa).r(FUNC(micral_state::keyin_r));
map(0xfffb, 0xfffb).r(FUNC(micral_state::unk_r));
diff --git a/src/mame/drivers/microdec.cpp b/src/mame/drivers/microdec.cpp
index 8b735c55cad..2e2cccb2c39 100644
--- a/src/mame/drivers/microdec.cpp
+++ b/src/mame/drivers/microdec.cpp
@@ -145,16 +145,16 @@ void microdec_state::microdec_io(address_map &map)
map(0xfa, 0xfb).m(m_fdc, FUNC(upd765a_device::map));
map(0xfc, 0xfd).rw("uart1", FUNC(i8251_device::read), FUNC(i8251_device::write));
map(0xfe, 0xff).rw("uart2", FUNC(i8251_device::read), FUNC(i8251_device::write));
- // AM_RANGE(0xf0, 0xf3) 8253 PIT (md3 only) used as a baud rate generator for serial ports
- // AM_RANGE(0xf4, 0xf4) Centronics data
- // AM_RANGE(0xf5, 0xf5) motor check (md1/2)
- // AM_RANGE(0xf5, 0xf5) Centronics status (md3) read bit 3 (ack=1); read bit 4 (busy=1); write bit 7 (stb=0)
- // AM_RANGE(0xf6, 0xf6) rom enable (w=enable; r=disable)
- // AM_RANGE(0xf7, 0xf7) VFO Count set
- // AM_RANGE(0xf8, 0xf8) Motor and Shift control
- // AM_RANGE(0xfa, 0xfb) uPD765C fdc FA=status; FB=data
- // AM_RANGE(0xfc, 0xfd) Serial Port 1 (terminal) FC=data FD=status
- // AM_RANGE(0xfe, 0xff) Serial Port 2 (printer) FE=data FF=status
+ // map(0xf0, 0xf3) 8253 PIT (md3 only) used as a baud rate generator for serial ports
+ // map(0xf4, 0xf4) Centronics data
+ // map(0xf5, 0xf5) motor check (md1/2)
+ // map(0xf5, 0xf5) Centronics status (md3) read bit 3 (ack=1); read bit 4 (busy=1); write bit 7 (stb=0)
+ // map(0xf6, 0xf6) rom enable (w=enable; r=disable)
+ // map(0xf7, 0xf7) VFO Count set
+ // map(0xf8, 0xf8) Motor and Shift control
+ // map(0xfa, 0xfb) uPD765C fdc FA=status; FB=data
+ // map(0xfc, 0xfd) Serial Port 1 (terminal) FC=data FD=status
+ // map(0xfe, 0xff) Serial Port 2 (printer) FE=data FF=status
}
/* Input ports */
diff --git a/src/mame/drivers/midtunit.cpp b/src/mame/drivers/midtunit.cpp
index 4d37fffd7ec..f4470438c32 100644
--- a/src/mame/drivers/midtunit.cpp
+++ b/src/mame/drivers/midtunit.cpp
@@ -58,7 +58,7 @@ void midtunit_state::main_map(address_map &map)
map(0x01800000, 0x0187ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x01a80000, 0x01a800ff).rw(m_video, FUNC(midtunit_video_device::midtunit_dma_r), FUNC(midtunit_video_device::midtunit_dma_w));
map(0x01b00000, 0x01b0001f).w(m_video, FUNC(midtunit_video_device::midtunit_control_w));
-/* AM_RANGE(0x01c00060, 0x01c0007f) AM_WRITE(midtunit_cmos_enable_w) */
+// map(0x01c00060, 0x01c0007f).w(FUNC(midtunit_state::midtunit_cmos_enable_w));
map(0x01d00000, 0x01d0001f).r(FUNC(midtunit_state::midtunit_sound_state_r));
map(0x01d01020, 0x01d0103f).rw(FUNC(midtunit_state::midtunit_sound_r), FUNC(midtunit_state::midtunit_sound_w));
map(0x01d81060, 0x01d8107f).w("watchdog", FUNC(watchdog_timer_device::reset16_w));
diff --git a/src/mame/drivers/midvunit.cpp b/src/mame/drivers/midvunit.cpp
index 76467a1099b..b8e22302801 100644
--- a/src/mame/drivers/midvunit.cpp
+++ b/src/mame/drivers/midvunit.cpp
@@ -651,7 +651,7 @@ void midvunit_state::midvunit_map(address_map &map)
map(0x980082, 0x980083).r(FUNC(midvunit_state::midvunit_dma_trigger_r));
map(0x990000, 0x990000).r(FUNC(midvunit_state::midvunit_intcs_r));
map(0x991030, 0x991030).lr16("991030", [this]() { return uint16_t(m_in1->read()); });
-// AM_RANGE(0x991050, 0x991050) AM_READONLY // seems to be another port
+// map(0x991050, 0x991050).readonly(); // seems to be another port
map(0x991060, 0x991060).r(FUNC(midvunit_state::port0_r));
map(0x992000, 0x992000).lr16("992000", [this]() { return uint16_t(m_dsw->read()); });
map(0x993000, 0x993000).rw(FUNC(midvunit_state::adc_r), FUNC(midvunit_state::adc_w));
diff --git a/src/mame/drivers/mini2440.cpp b/src/mame/drivers/mini2440.cpp
index c118878f43a..c665d7d88bb 100644
--- a/src/mame/drivers/mini2440.cpp
+++ b/src/mame/drivers/mini2440.cpp
@@ -212,7 +212,7 @@ void mini2440_state::machine_reset()
void mini2440_state::mini2440_map(address_map &map)
{
-// AM_RANGE(0x00000000, 0x001fffff) AM_ROM
+// map(0x00000000, 0x001fffff).rom();
map(0x30000000, 0x37ffffff).ram();
}
diff --git a/src/mame/drivers/miniforce.cpp b/src/mame/drivers/miniforce.cpp
index ef55e15c2e7..2c8c6d5ad8e 100644
--- a/src/mame/drivers/miniforce.cpp
+++ b/src/mame/drivers/miniforce.cpp
@@ -147,11 +147,11 @@ void miniforce_state::miniforce_mem(address_map &map)
{
map.unmap_value_high();
/* The ROMs contains an OS9 bootloader. It is position independent but reset vector suggests that it sits flat on adress 0 (zero) */
-// AM_RANGE (0x000000, 0x003fff) AM_ROM AM_REGION("roms", 0x000000) /* System EPROM Area 16Kb OS9 DEBUG - not verified */
-// AM_RANGE (0x004000, 0x01ffff) AM_ROM AM_REGION("roms", 0x004000)/* System EPROM Area 112Kb for System ROM - not verified */
-// AM_RANGE (0x020000, 0x03ffff) AM_RAM /* Not verified */
-// AM_RANGE (0x100000, 0xfeffff) AM_READWRITE(vme_a24_r, vme_a24_w) /* VMEbus Rev B addresses (24 bits) - not verified */
-// AM_RANGE (0xff0000, 0xffffff) AM_READWRITE(vme_a16_r, vme_a16_w) /* VMEbus Rev B addresses (16 bits) - not verified */
+// map(0x000000, 0x003fff).rom().region("roms", 0x000000); /* System EPROM Area 16Kb OS9 DEBUG - not verified */
+// map(0x004000, 0x01ffff).rom().region("roms", 0x004000);/* System EPROM Area 112Kb for System ROM - not verified */
+// map(0x020000, 0x03ffff).ram(); /* Not verified */
+// map(0x100000, 0xfeffff).rw(FUNC(miniforce_state::vme_a24_r), FUNC(miniforce_state::vme_a24_w)); /* VMEbus Rev B addresses (24 bits) - not verified */
+// map(0xff0000, 0xffffff).rw(FUNC(miniforce_state::vme_a16_r), FUNC(miniforce_state::vme_a16_w)); /* VMEbus Rev B addresses (16 bits) - not verified */
}
#endif
diff --git a/src/mame/drivers/mirax.cpp b/src/mame/drivers/mirax.cpp
index 8a4f47b3c80..3c420db9e69 100644
--- a/src/mame/drivers/mirax.cpp
+++ b/src/mame/drivers/mirax.cpp
@@ -335,7 +335,7 @@ void mirax_state::mirax_main_map(address_map &map)
map(0xf400, 0xf400).portr("DSW2");
map(0xf500, 0xf507).w("mainlatch", FUNC(ls259_device::write_d0));
map(0xf800, 0xf800).w(FUNC(mirax_state::sound_cmd_w));
-// AM_RANGE(0xf900, 0xf900) //sound cmd mirror? ack?
+// map(0xf900, 0xf900) //sound cmd mirror? ack?
}
void mirax_state::mirax_sound_map(address_map &map)
diff --git a/src/mame/drivers/missb2.cpp b/src/mame/drivers/missb2.cpp
index 99fe7e73234..4cbc681c8db 100644
--- a/src/mame/drivers/missb2.cpp
+++ b/src/mame/drivers/missb2.cpp
@@ -231,7 +231,7 @@ void missb2_state::sound_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0x8fff).ram();
- map(0x9000, 0x9000).rw(FUNC(missb2_state::missb2_oki_r), FUNC(missb2_state::missb2_oki_w)); //AM_MIRROR(0x0fff) ???
+ map(0x9000, 0x9000).rw(FUNC(missb2_state::missb2_oki_r), FUNC(missb2_state::missb2_oki_w)); //.mirror(0x0fff); ???
map(0xa000, 0xa001).mirror(0x0ffe).rw("ym3526", FUNC(ym3526_device::read), FUNC(ym3526_device::write));
map(0xb000, 0xb000).mirror(0x0ffc).r(m_main_to_sound, FUNC(generic_latch_8_device::read)).w(m_sound_to_main, FUNC(generic_latch_8_device::write));
map(0xb001, 0xb001).mirror(0x0ffc).r(FUNC(missb2_state::common_sound_semaphores_r)).w(m_soundnmi, FUNC(input_merger_device::in_set<0>));
diff --git a/src/mame/drivers/mk90.cpp b/src/mame/drivers/mk90.cpp
index 68d835d4f08..4a630b01910 100644
--- a/src/mame/drivers/mk90.cpp
+++ b/src/mame/drivers/mk90.cpp
@@ -50,13 +50,13 @@ void mk90_state::mk90_mem(address_map &map)
map(0x0000, 0x3fff).ram(); // RAM
map(0x4000, 0x7fff).rom(); // Extension ROM
map(0x8000, 0xffff).rom(); // Main ROM
-// AM_RANGE(0xe800, 0xe801) LCD address
-// AM_RANGE(0xe802, 0xe803) LCD data
-// AM_RANGE(0xe810, 0xe810) serial bus controller data
-// AM_RANGE(0xe812, 0xe813) serial bus controller transfer rate
-// AM_RANGE(0xe814, 0xe814) serial bus controller control/status
-// AM_RANGE(0xe816, 0xe816) serial bus controller command
-// AM_RANGE(0xea00, 0xea7e) RTC
+// map(0xe800, 0xe801) LCD address
+// map(0xe802, 0xe803) LCD data
+// map(0xe810, 0xe810) serial bus controller data
+// map(0xe812, 0xe813) serial bus controller transfer rate
+// map(0xe814, 0xe814) serial bus controller control/status
+// map(0xe816, 0xe816) serial bus controller command
+// map(0xea00, 0xea7e) RTC
}
/* Input ports */
diff --git a/src/mame/drivers/mkit09.cpp b/src/mame/drivers/mkit09.cpp
index d1d11a017a5..6f7a806a05d 100644
--- a/src/mame/drivers/mkit09.cpp
+++ b/src/mame/drivers/mkit09.cpp
@@ -26,6 +26,14 @@ Test Paste:
2015-10-02 Added alternate bios found on a forum. Memory map is different.
Still to fix keyboard and display. No documentation exists.
+2019-10-10 Adjusted mkit09a to display and accept input. However it appears
+ to be some other 6809 trainer. Although it "works", the usage
+ is largely unknown, as are some of the keys. Cassette status
+ also unknown. There may be a device at E400-E407.
+ When R (regs) is pressed, you can press 0(CC),1(A),2(B),3(DP),
+ 4,(IX),5(IY),6(U),7(PC),8(SP).
+ Some patches were needed due to bugs or bad dump?
+
****************************************************************************/
#include "emu.h"
@@ -49,19 +57,17 @@ public:
, m_io_keyboard(*this, "X%u", 0)
{ }
- void mkit09a(machine_config &config);
void mkit09(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(trigger_reset);
DECLARE_INPUT_CHANGED_MEMBER(trigger_nmi);
-private:
+protected:
DECLARE_READ8_MEMBER(pa_r);
DECLARE_READ8_MEMBER(pb_r);
DECLARE_WRITE8_MEMBER(pa_w);
DECLARE_WRITE8_MEMBER(pb_w);
void mkit09_mem(address_map &map);
- void mkit09a_mem(address_map &map);
uint8_t m_keydata;
virtual void machine_reset() override;
@@ -73,6 +79,20 @@ private:
required_ioport_array<4> m_io_keyboard;
};
+class mkit09a_state : public mkit09_state
+{
+public:
+ mkit09a_state(const machine_config &mconfig, device_type type, const char *tag)
+ : mkit09_state(mconfig, type, tag)
+ { }
+
+ void mkit09a(machine_config &config);
+
+private:
+ DECLARE_WRITE8_MEMBER(pa_w);
+ void mkit09a_mem(address_map &map);
+};
+
void mkit09_state::mkit09_mem(address_map &map)
{
@@ -82,11 +102,11 @@ void mkit09_state::mkit09_mem(address_map &map)
map(0xe000, 0xe7ff).mirror(0x1800).rom().region("roms", 0);
}
-void mkit09_state::mkit09a_mem(address_map &map)
+void mkit09a_state::mkit09a_mem(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x07ff).ram();
- map(0xe600, 0xe603).rw(m_pia, FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt));
+ map(0xe600, 0xe603).rw(m_pia, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0xee00, 0xefff).ram();
map(0xf000, 0xffff).rom().region("roms", 0);
}
@@ -138,6 +158,53 @@ static INPUT_PORTS_START( mkit09 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("NMI") PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, mkit09_state, trigger_nmi, 0)
INPUT_PORTS_END
+// ToDo: work out what the keys marked "??" do.
+static INPUT_PORTS_START( mkit09a )
+ PORT_START("X0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0')
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1')
+ 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_3) PORT_CHAR('3')
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Inc") PORT_CODE(KEYCODE_UP) PORT_CHAR('^')
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Dec") PORT_CODE(KEYCODE_DOWN) PORT_CHAR('V')
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("MEM") PORT_CODE(KEYCODE_M) PORT_CHAR('-')
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START("X1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4')
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5')
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6')
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7')
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("L") PORT_CODE(KEYCODE_L) // ??
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("P") PORT_CODE(KEYCODE_P) // ??
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START("X2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8')
+ 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_A) PORT_CHAR('A')
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('B')
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("cnt") PORT_CODE(KEYCODE_W) // ??
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ofs") PORT_CODE(KEYCODE_O) // ?? (same as G?)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("BP") PORT_CODE(KEYCODE_Q) // ?? (same as X?)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START("X3")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('C')
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('D')
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('E')
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('F')
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("REG") PORT_CODE(KEYCODE_R) PORT_CHAR('R')
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("GO") PORT_CODE(KEYCODE_G) PORT_CHAR('X')
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("X") PORT_CODE(KEYCODE_X) // ??
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START("SPECIAL")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("RST") PORT_CODE(KEYCODE_ESC) PORT_CHANGED_MEMBER(DEVICE_SELF, mkit09_state, trigger_reset, 0)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("NMI") PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, mkit09_state, trigger_nmi, 0)
+INPUT_PORTS_END
+
INPUT_CHANGED_MEMBER( mkit09_state::trigger_reset )
{
m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? CLEAR_LINE : ASSERT_LINE);
@@ -183,6 +250,18 @@ WRITE8_MEMBER( mkit09_state::pa_w )
return;
}
+WRITE8_MEMBER( mkit09a_state::pa_w )
+{
+ if (m_keydata > 3)
+ {
+ if (m_keydata < 10)
+ m_digits[13-m_keydata] = data;
+ m_keydata = 0;
+ }
+
+ return;
+}
+
// write cassette, select keyboard row, select a digit
WRITE8_MEMBER( mkit09_state::pb_w )
{
@@ -218,11 +297,11 @@ void mkit09_state::mkit09(machine_config &config)
m_cass->add_route(ALL_OUTPUTS, "mono", 0.05);
}
-void mkit09_state::mkit09a(machine_config &config)
+void mkit09a_state::mkit09a(machine_config &config)
{
/* basic machine hardware */
MC6809(config, m_maincpu, XTAL(4'000'000));
- m_maincpu->set_addrmap(AS_PROGRAM, &mkit09_state::mkit09a_mem);
+ m_maincpu->set_addrmap(AS_PROGRAM, &mkit09a_state::mkit09a_mem);
/* video hardware */
config.set_default_layout(layout_mkit09);
@@ -232,10 +311,11 @@ void mkit09_state::mkit09a(machine_config &config)
/* Devices */
PIA6821(config, m_pia, 0);
- m_pia->readpa_handler().set(FUNC(mkit09_state::pa_r));
- m_pia->readpb_handler().set(FUNC(mkit09_state::pb_r));
- m_pia->writepa_handler().set(FUNC(mkit09_state::pa_w));
- m_pia->writepb_handler().set(FUNC(mkit09_state::pb_w));
+ m_pia->readpa_handler().set(FUNC(mkit09a_state::pa_r));
+ m_pia->readpb_handler().set(FUNC(mkit09a_state::pb_r));
+ m_pia->writepa_handler().set(FUNC(mkit09a_state::pa_w));
+ m_pia->writepb_handler().set(FUNC(mkit09a_state::pb_w));
+ m_pia->cb2_handler().set([] (bool state) { }); // stop errorlog filling up - is it a keyclick?
m_pia->irqa_handler().set_inputline("maincpu", M6809_IRQ_LINE);
m_pia->irqb_handler().set_inputline("maincpu", M6809_IRQ_LINE);
@@ -252,10 +332,13 @@ ROM_END
ROM_START( mkit09a )
ROM_REGION( 0x1000, "roms", 0 )
ROM_LOAD( "ukit09like.bin", 0x0000, 0x1000, CRC(2cdb6a84) SHA1(edfc1dfc954bdba80c3df64abf4d7553343c1fae) )
+ ROM_FILL(0x1d8,1,0x03) // fix data display
+ ROM_FILL(0x99b,1,0x06) // fix start address
+ ROM_FILL(0x99c,1,0x63) // ... so that MEM starts at 0000 instead of F908.
ROM_END
/* Driver */
-// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1983, mkit09, 0, 0, mkit09, mkit09, mkit09_state, empty_init, "Multitech", "Microkit09", MACHINE_NO_SOUND_HW )
-COMP( 1983, mkit09a, mkit09, 0, mkit09a, mkit09, mkit09_state, empty_init, "Multitech", "Microkit09 (Alt version)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW )
+// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
+COMP( 1983, mkit09, 0, 0, mkit09, mkit09, mkit09_state, empty_init, "Multitech", "Microkit09", MACHINE_NO_SOUND_HW )
+COMP( 1983, mkit09a, mkit09, 0, mkit09a, mkit09a, mkit09a_state, empty_init, "Multitech", "Microkit09 (Alt version)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW )
diff --git a/src/mame/drivers/model2.cpp b/src/mame/drivers/model2.cpp
index 3ed7aae5fd0..5cc7e44f6f3 100644
--- a/src/mame/drivers/model2.cpp
+++ b/src/mame/drivers/model2.cpp
@@ -1115,11 +1115,11 @@ void model2_state::model2_base_mem(address_map &map)
map(0x00500000, 0x005fffff).ram().share("workram");
map(0x00800000, 0x00803fff).rw(FUNC(model2_state::geo_r), FUNC(model2_state::geo_w));
- //AM_RANGE(0x00800010, 0x00800013) AM_WRITENOP
- //AM_RANGE(0x008000b0, 0x008000b3) AM_WRITENOP
- //AM_RANGE(0x00804004, 0x0080400f) AM_WRITENOP // quiet psikyo games
+ //map(0x00800010, 0x00800013).nopw();
+ //map(0x008000b0, 0x008000b3).nopw();
+ //map(0x00804004, 0x0080400f).nopw(); // quiet psikyo games
- //AM_RANGE(0x00880000, 0x00883fff) AM_WRITE(copro_w)
+ //map(0x00880000, 0x00883fff).w(FUNC(model2_state::copro_w));
map(0x00900000, 0x0091ffff).mirror(0x60000).ram().share("bufferram");
@@ -1153,12 +1153,12 @@ void model2_state::model2_base_mem(address_map &map)
map(0x06000000, 0x06ffffff).rom().region("main_data", 0x1000000);
map(0x10000000, 0x101fffff).rw(FUNC(model2_state::render_mode_r), FUNC(model2_state::render_mode_w));
-// AM_RANGE(0x10200000, 0x103fffff) renderer status register
+// map(0x10200000, 0x103fffff) renderer status register
map(0x10400000, 0x105fffff).r(FUNC(model2_state::polygon_count_r));
-// AM_RANGE(0x10600000, 0x107fffff) polygon data ping
-// AM_RANGE(0x10800000, 0x109fffff) polygon data pong
-// AM_RANGE(0x10a00000, 0x10bfffff) fill memory ping
-// AM_RANGE(0x10c00000, 0x10dfffff) fill memory pong
+// map(0x10600000, 0x107fffff) polygon data ping
+// map(0x10800000, 0x109fffff) polygon data pong
+// map(0x10a00000, 0x10bfffff) fill memory ping
+// map(0x10c00000, 0x10dfffff) fill memory pong
// format is xGGGGGRRRRRBBBBB (512x400)
map(0x11600000, 0x1167ffff).rw(FUNC(model2_state::fbvram_bankA_r), FUNC(model2_state::fbvram_bankA_w)); // framebuffer A (last bronx title screen)
@@ -1425,8 +1425,8 @@ void model2b_state::model2b_crx_mem(address_map &map)
map(0x00200000, 0x0023ffff).ram();
map(0x00804000, 0x00807fff).rw(FUNC(model2b_state::geo_prg_r), FUNC(model2b_state::geo_prg_w));
- //AM_RANGE(0x00804000, 0x00807fff) AM_READWRITE(geo_sharc_fifo_r, geo_sharc_fifo_w)
- //AM_RANGE(0x00840000, 0x00840fff) AM_WRITE(geo_sharc_iop_w)
+ //map(0x00804000, 0x00807fff).rw(FUNC(model2b_state::geo_sharc_fifo_r), FUNC(model2b_state::geo_sharc_fifo_w));
+ //map(0x00840000, 0x00840fff).w(FUNC(model2b_state::geo_sharc_iop_w));
map(0x00880000, 0x00883fff).w(FUNC(model2b_state::copro_function_port_w));
map(0x00884000, 0x00887fff).rw(FUNC(model2b_state::copro_fifo_r), FUNC(model2b_state::copro_fifo_w));
@@ -1435,7 +1435,7 @@ void model2b_state::model2b_crx_mem(address_map &map)
map(0x00980000, 0x00980003).rw(FUNC(model2b_state::copro_ctl1_r), FUNC(model2b_state::copro_ctl1_w));
map(0x00980008, 0x0098000b).w(FUNC(model2b_state::geo_ctl1_w));
map(0x00980014, 0x00980017).r(FUNC(model2b_state::copro_status_r));
- //AM_RANGE(0x00980008, 0x0098000b) AM_WRITE(geo_sharc_ctl1_w )
+ //map(0x00980008, 0x0098000b).w(FUNC(model2b_state::geo_sharc_ctl1_w));
map(0x009c0000, 0x009cffff).rw(FUNC(model2b_state::model2_serial_r), FUNC(model2b_state::model2_serial_w));
@@ -2865,6 +2865,16 @@ void model2b_state::indy500(machine_config &config)
io.an_port_callback<2>().set_ioport("BRAKE");
}
+void model2b_state::overrev2b(machine_config &config)
+{
+ model2b(config);
+
+ sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io"));
+ io.an_port_callback<0>().set_ioport("STEER");
+ io.an_port_callback<1>().set_ioport("BRAKE");
+ io.an_port_callback<2>().set_ioport("ACCEL");
+}
+
void model2b_state::powsled(machine_config &config)
{
model2b(config);
@@ -2901,7 +2911,7 @@ void model2b_state::rchase2(machine_config &config)
iocpu.set_addrmap(AS_PROGRAM, &model2b_state::rchase2_iocpu_map);
iocpu.set_addrmap(AS_IO, &model2b_state::rchase2_ioport_map);
- CXD1095(config, "ioexp", 0);
+ CXD1095(config, "ioexp");
sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io"));
io.in_pd_callback().set(FUNC(model2b_state::rchase2_drive_board_r));
@@ -3044,8 +3054,8 @@ void model2c_state::overrev2c(machine_config &config)
sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io"));
io.an_port_callback<0>().set_ioport("STEER");
- io.an_port_callback<1>().set_ioport("ACCEL");
- io.an_port_callback<2>().set_ioport("BRAKE");
+ io.an_port_callback<1>().set_ioport("BRAKE");
+ io.an_port_callback<2>().set_ioport("ACCEL");
}
void model2c_state::segawski(machine_config &config)
@@ -7011,14 +7021,14 @@ GAME( 1996, lastbrnx, 0, model2b, vf2, model2b_state, empty_i
GAME( 1996, lastbrnxu, lastbrnx, model2b, vf2, model2b_state, empty_init, ROT0, "Sega", "Last Bronx (USA, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS )
GAME( 1996, lastbrnxj, lastbrnx, model2b, vf2, model2b_state, empty_init, ROT0, "Sega", "Last Bronx (Japan, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS )
GAME( 1996, doa, 0, model2b_0229, doa, model2b_state, init_doa, ROT0, "Sega", "Dead or Alive (Model 2B, Revision B)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1996, sgt24h, 0, indy500, sgt24h, model2b_state, init_sgt24h, ROT0, "Jaleco", "Super GT 24h", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1996, sgt24h, 0, overrev2b, sgt24h, model2b_state, init_sgt24h, ROT0, "Jaleco", "Super GT 24h", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS )
GAME( 1996, powsled, 0, powsled, powsled, model2b_state, empty_init, ROT0, "Sega", "Power Sled (Slave, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS )
GAME( 1996, powsledr, powsled, powsled, powsled, model2b_state, empty_init, ROT0, "Sega", "Power Sled (Relay, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS )
GAME( 1996, powsledm, powsled, powsled, powsled, model2b_state, init_powsledm, ROT0, "Sega", "Power Sled (Main, hack of Relay)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS )
GAME( 1996, dynabb, 0, dynabb, dynabb, model2b_state, empty_init, ROT0, "Sega", "Dynamite Baseball", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS )
GAME( 1997, dynabb97, 0, dynabb, dynabb, model2b_state, empty_init, ROT0, "Sega", "Dynamite Baseball 97 (Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1997, overrevb, overrev, indy500, overrev, model2b_state, empty_init, ROT0, "Jaleco", "Over Rev (Model 2B, Revision B)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1997, overrevba, overrev, indy500, overrev, model2b_state, empty_init, ROT0, "Jaleco", "Over Rev (Model 2B, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1997, overrevb, overrev, overrev2b, overrev, model2b_state, empty_init, ROT0, "Jaleco", "Over Rev (Model 2B, Revision B)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1997, overrevba, overrev, overrev2b, overrev, model2b_state, empty_init, ROT0, "Jaleco", "Over Rev (Model 2B, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS )
GAME( 1997, zerogun, 0, zerogun, zerogun, model2b_state, init_zerogun, ROT0, "Psikyo", "Zero Gunner (Export, Model 2B)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS )
GAME( 1997, zerogunj, zerogun, zerogun, zerogun, model2b_state, init_zerogun, ROT0, "Psikyo", "Zero Gunner (Japan, Model 2B)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS )
GAME( 1998, dynamcopb, dynamcop, model2b_5881, dynamcop, model2b_state, empty_init, ROT0, "Sega", "Dynamite Cop (Export, Model 2B)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS )
diff --git a/src/mame/drivers/molecular.cpp b/src/mame/drivers/molecular.cpp
index 90ad41e69e8..589554a0721 100644
--- a/src/mame/drivers/molecular.cpp
+++ b/src/mame/drivers/molecular.cpp
@@ -187,7 +187,7 @@ void molecula_state::molecula_file_map(address_map &map)
void molecula_state::molecula_file_io(address_map &map)
{
map.global_mask(0xff);
-// AM_RANGE(0x40, 0x43) AM_READWRITE(sio_r,sio_w)
+// map(0x40, 0x43).rw(FUNC(molecula_state::sio_r), FUNC(molecula_state::sio_w));
map(0x72, 0x73).w(FUNC(molecula_state::file_output_w)); // unknown
}
diff --git a/src/mame/drivers/monty.cpp b/src/mame/drivers/monty.cpp
index a9a6f567dac..abd558008a8 100644
--- a/src/mame/drivers/monty.cpp
+++ b/src/mame/drivers/monty.cpp
@@ -86,14 +86,14 @@ private:
void monty_state::monty_mem(address_map &map)
{
map(0x0000, 0xbfff).rom();
- //AM_RANGE(0x4000, 0x4000) // The main rom checks to see if another program is here on startup
+ //map(0x4000, 0x4000) // The main rom checks to see if another program is here on startup
map(0xf800, 0xffff).ram();
}
void monty_state::mmonty_mem(address_map &map)
{
map(0x0000, 0x3fff).rom();
- //AM_RANGE(0xc000, 0xc000) // The main rom checks to see if another program is here on startup
+ //map(0xc000, 0xc000) // The main rom checks to see if another program is here on startup
map(0x8000, 0xffff).rom();
map(0x7800, 0x7fff).ram();
}
diff --git a/src/mame/drivers/mpu3.cpp b/src/mame/drivers/mpu3.cpp
index 75bb205e761..010b9076c88 100644
--- a/src/mame/drivers/mpu3.cpp
+++ b/src/mame/drivers/mpu3.cpp
@@ -1303,6 +1303,13 @@ ROM_START( m3rockpl )
ROM_END
+ROM_START( m3rolla ) // R-5LS V.30
+ ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD( "ic1", 0x6000, 0x2000, CRC(16e320ae) SHA1(3489e81f52db025ca2239c4072fa01f77f4d8d31) )
+ // ic2,ic3 and ic4 empty, ic5 is a 74ls138n
+ ROM_COPY( "maincpu", 0x0000, 0x8000, 0x8000 )
+ROM_END
+
ROM_START( m3rollem )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD( "roll-em.p1", 0x6000, 0x2000, CRC(2ec2cfa9) SHA1(461240315725f29f53fdcf89e767d17a4d2301eb) )
@@ -1629,6 +1636,7 @@ GAME( 198?, m3optunl, 0, mpu3base, mpu3, mpu3_state, init_m3hprvpr,
GAMEL( 198?, m3razdaz, 0, mpu3base, mpu3, mpu3_state, init_m3hprvpr, ROT0, "Barcrest","Razzle Dazzle (Barcrest) (MPU3, set 1)", GAME_FLAGS, layout_m3razdaza )
GAMEL( 198?, m3razdaza, m3razdaz, mpu3base, mpu3, mpu3_state, init_m3hprvpr, ROT0, "Barcrest","Razzle Dazzle (Barcrest) (MPU3, set 2)", GAME_FLAGS, layout_m3razdaza )
GAMEL( 198?, m3razdazd, m3razdaz, mpu3base, mpu3, mpu3_state, init_m3hprvpr, ROT0, "Barcrest","Razzle Dazzle (Barcrest) [Dutch] (MPU3)", GAME_FLAGS, layout_m3razdaza )
+GAME( 198?, m3rolla, 0, mpu3base, mpu3, mpu3_state, init_m3hprvpr, ROT0, "Barcrest","Rollamatic 5-Line Special (Barcrest) (MPU3)", GAME_FLAGS ) // or 5-Line Special Rollamatic on the glass, using the title from the ROM
GAMEL( 198?, m3rxchng, 0, mpu3base, mpu3, mpu3_state, init_m3hprvpr, ROT0, "Barcrest","Royal Exchange Club (Barcrest) (MPU3)", GAME_FLAGS, layout_m3rxchng )
GAMEL( 198?, m3circle, 0, mpu3base, mpu3, mpu3_state, init_m3hprvpr, ROT0, "Barcrest","Special Circle Club (Barcrest) (MPU3, set 1)", GAME_FLAGS, layout_m3circle )
GAMEL( 198?, m3circlea, m3circle, mpu3base, mpu3, mpu3_state, init_m3hprvpr, ROT0, "Barcrest","Special Circle Club (Barcrest) (MPU3, set 2)", GAME_FLAGS, layout_m3circle )
diff --git a/src/mame/drivers/mpu4dealem.cpp b/src/mame/drivers/mpu4dealem.cpp
index 9fe3a61994f..3f43cad3629 100644
--- a/src/mame/drivers/mpu4dealem.cpp
+++ b/src/mame/drivers/mpu4dealem.cpp
@@ -159,7 +159,7 @@ void mpu4dealem_state::dealem_memmap(address_map &map)
map(0x0800, 0x0800).w("crtc", FUNC(mc6845_device::address_w));
map(0x0801, 0x0801).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
-/* AM_RANGE(0x08e0, 0x08e7) AM_READWRITE(68681_duart_r,68681_duart_w) */ //Runs hoppers
+/* map(0x08e0, 0x08e7).rw(FUNC(mpu4dealem_state::68681_duart_r), FUNC(mpu4dealem_state::68681_duart_w)); */ //Runs hoppers
map(0x0900, 0x0907).rw(m_6840ptm, FUNC(ptm6840_device::read), FUNC(ptm6840_device::write));/* PTM6840 IC2 */
diff --git a/src/mame/drivers/mpu4vid.cpp b/src/mame/drivers/mpu4vid.cpp
index 38311f62c20..6f025bbf86e 100644
--- a/src/mame/drivers/mpu4vid.cpp
+++ b/src/mame/drivers/mpu4vid.cpp
@@ -1188,11 +1188,11 @@ void mpu4vid_state::mpu4_68k_map(address_map &map)
{
map(0x000000, 0x7fffff).rom();
map(0x800000, 0x80ffff).ram().share("vid_mainram");
-// map(0x810000, 0x81ffff) AM_RAM /* ? */
+// map(0x810000, 0x81ffff).ram(); /* ? */
map(0x900000, 0x900003).w("saa", FUNC(saa1099_device::write)).umask16(0x00ff);
map(0xa00001, 0xa00001).rw("ef9369", FUNC(ef9369_device::data_r), FUNC(ef9369_device::data_w));
map(0xa00003, 0xa00003).w("ef9369", FUNC(ef9369_device::address_w));
-/* map(0xa00004, 0xa0000f) AM_READWRITE(mpu4_vid_unmap_r, mpu4_vid_unmap_w) */
+// map(0xa00004, 0xa0000f).rw(FUNC(mpu4vid_state::mpu4_vid_unmap_r), FUNC(mpu4vid_state::mpu4_vid_unmap_w));
map(0xb00000, 0xb0000f).rw(m_scn2674, FUNC(scn2674_device::read), FUNC(scn2674_device::write)).umask16(0x00ff);
map(0xc00000, 0xc1ffff).rw(FUNC(mpu4vid_state::mpu4_vid_vidram_r), FUNC(mpu4vid_state::mpu4_vid_vidram_w)).share("vid_vidram");
map(0xff8000, 0xff8003).rw(m_acia_1, FUNC(acia6850_device::read), FUNC(acia6850_device::write)).umask16(0x00ff);
@@ -1202,9 +1202,9 @@ void mpu4vid_state::mpu4_68k_map(address_map &map)
void mpu4vid_state::mpu4oki_68k_map(address_map &map)
{
- map(0x000000, 0x5fffff).rom(); //AM_WRITENOP
+ map(0x000000, 0x5fffff).rom(); //.nopw();
map(0x600000, 0x63ffff).ram(); /* The Mating Game has an extra 256kB RAM on the program card */
-// map(0x640000, 0x7fffff) AM_NOP /* Possible bug, reads and writes here */
+// map(0x640000, 0x7fffff).noprw(); /* Possible bug, reads and writes here */
map(0x800000, 0x80ffff).ram().share("vid_mainram");
map(0x900000, 0x900003).w("saa", FUNC(saa1099_device::write)).umask16(0x00ff);
map(0xa00001, 0xa00001).rw("ef9369", FUNC(ef9369_device::data_r), FUNC(ef9369_device::data_w));
@@ -1217,7 +1217,7 @@ void mpu4vid_state::mpu4oki_68k_map(address_map &map)
map(0xffa040, 0xffa04f).w(FUNC(mpu4vid_state::ic3ss_w)).umask16(0x00ff); // 6840PTM on sampled sound board
map(0xffa060, 0xffa067).rw("pia_ic4ss", FUNC(pia6821_device::read), FUNC(pia6821_device::write)).umask16(0x00ff); // PIA6821 on sampled sound board
map(0xffd000, 0xffd00f).rw(FUNC(mpu4vid_state::vidcharacteriser_r), FUNC(mpu4vid_state::vidcharacteriser_w)).umask16(0x00ff);
-// map(0xfff000, 0xffffff) AM_NOP /* Possible bug, reads and writes here */
+// map(0xfff000, 0xffffff).noprw(); /* Possible bug, reads and writes here */
}
void mpu4vid_state::bwbvid_68k_map(address_map &map)
@@ -1228,13 +1228,13 @@ void mpu4vid_state::bwbvid_68k_map(address_map &map)
map(0x900000, 0x900003).w("saa", FUNC(saa1099_device::write)).umask16(0x00ff);
map(0xa00001, 0xa00001).rw("ef9369", FUNC(ef9369_device::data_r), FUNC(ef9369_device::data_w));
map(0xa00003, 0xa00003).w("ef9369", FUNC(ef9369_device::address_w));
-// map(0xa00000, 0xa0000f) AM_READWRITE(bt471_r,bt471_w) //Some games use this
-/* map(0xa00004, 0xa0000f) AM_READWRITE(mpu4_vid_unmap_r, mpu4_vid_unmap_w) */
+// map(0xa00000, 0xa0000f).rw(FUNC(mpu4vid_state::bt471_r), FUNC(mpu4vid_state::bt471_w)); //Some games use this
+// map(0xa00004, 0xa0000f).rw(FUNC(mpu4vid_state::mpu4_vid_unmap_r), FUNC(mpu4vid_state::mpu4_vid_unmap_w));
map(0xb00000, 0xb0000f).rw(m_scn2674, FUNC(scn2674_device::read), FUNC(scn2674_device::write)).umask16(0x00ff);
map(0xc00000, 0xc1ffff).rw(FUNC(mpu4vid_state::mpu4_vid_vidram_r), FUNC(mpu4vid_state::mpu4_vid_vidram_w)).share("vid_vidram");
map(0xe00000, 0xe00003).rw(m_acia_1, FUNC(acia6850_device::read), FUNC(acia6850_device::write)).umask16(0x00ff);
map(0xe01000, 0xe0100f).rw(m_ptm, FUNC(ptm6840_device::read), FUNC(ptm6840_device::write)).umask16(0x00ff);
- //map(0xa00004, 0xa0000f) AM_READWRITE(bwb_characteriser16_r, bwb_characteriser16_w)//AM_READWRITE(adpcm_r, adpcm_w) CHR ?
+ //map(0xa00004, 0xa0000f).rw(FUNC(mpu4vid_state::bwb_characteriser16_r), FUNC(mpu4vid_state::bwb_characteriser16_w)); //.rw(FUNC(mpu4vid_state::adpcm_r), FUNC(mpu4vid_state::adpcm_w)); CHR ?
}
void mpu4vid_state::bwbvid5_68k_map(address_map &map)
@@ -1245,8 +1245,8 @@ void mpu4vid_state::bwbvid5_68k_map(address_map &map)
map(0x900000, 0x900003).w("saa", FUNC(saa1099_device::write)).umask16(0x00ff);
map(0xa00001, 0xa00001).rw("ef9369", FUNC(ef9369_device::data_r), FUNC(ef9369_device::data_w));
map(0xa00003, 0xa00003).w("ef9369", FUNC(ef9369_device::address_w));
- //map(0xa00000, 0xa00003) AM_READWRITE8(bt471_r,bt471_w,0x00ff) Some games use this
-/* map(0xa00004, 0xa0000f) AM_READWRITE(mpu4_vid_unmap_r, mpu4_vid_unmap_w) */
+// map(0xa00000, 0xa00003).rw(FUNC(mpu4vid_state::bt471_r), FUNC(mpu4vid_state::bt471_w)).umask16(0x00ff); Some games use this
+// map(0xa00004, 0xa0000f).rw(FUNC(mpu4vid_state::mpu4_vid_unmap_r), FUNC(mpu4vid_state::mpu4_vid_unmap_w));
map(0xb00000, 0xb0000f).rw(m_scn2674, FUNC(scn2674_device::read), FUNC(scn2674_device::write)).umask16(0x00ff);
map(0xc00000, 0xc1ffff).rw(FUNC(mpu4vid_state::mpu4_vid_vidram_r), FUNC(mpu4vid_state::mpu4_vid_vidram_w)).share("vid_vidram");
map(0xe00000, 0xe00003).rw(m_acia_1, FUNC(acia6850_device::read), FUNC(acia6850_device::write)).umask16(0x00ff);
@@ -1254,7 +1254,7 @@ void mpu4vid_state::bwbvid5_68k_map(address_map &map)
map(0xe02000, 0xe02007).rw("pia_ic4ss", FUNC(pia6821_device::read), FUNC(pia6821_device::write)).umask16(0xff00); //Seems odd...
map(0xe03000, 0xe0300f).r("ptm_ic3ss", FUNC(ptm6840_device::read)).umask16(0xff00); // 6840PTM on sampled sound board
map(0xe03000, 0xe0300f).w(FUNC(mpu4vid_state::ic3ss_w)).umask16(0xff00); // 6840PTM on sampled sound board
- map(0xe04000, 0xe0400f).rw(FUNC(mpu4vid_state::bwb_characteriser_r), FUNC(mpu4vid_state::bwb_characteriser_w)).umask16(0x00ff);//AM_READWRITE(adpcm_r, adpcm_w) CHR ?
+ map(0xe04000, 0xe0400f).rw(FUNC(mpu4vid_state::bwb_characteriser_r), FUNC(mpu4vid_state::bwb_characteriser_w)).umask16(0x00ff); //.rw(FUNC(mpu4vid_state::adpcm_r), FUNC(mpu4vid_state::adpcm_w)); CHR ?
}
/* TODO: Fix up MPU4 map*/
diff --git a/src/mame/drivers/ms32.cpp b/src/mame/drivers/ms32.cpp
index d3c5112b116..ff2ea701a26 100644
--- a/src/mame/drivers/ms32.cpp
+++ b/src/mame/drivers/ms32.cpp
@@ -648,20 +648,20 @@ void ms32_state::ms32_map(address_map &map)
{
/* RAM areas verified by testing on real hw - usually accessed at the 0xfc000000 + mirror */
map(0xc0000000, 0xc0007fff).rw(FUNC(ms32_state::ms32_nvram_r8), FUNC(ms32_state::ms32_nvram_w8)).umask32(0x000000ff).mirror(0x3c1f8000); // nvram is 8-bit wide, 0x2000 in size */
-/* AM_RANGE(0xc0008000, 0xc01fffff) // mirrors of nvramram, handled above */
+/* map(0xc0008000, 0xc01fffff) // mirrors of nvramram, handled above */
map(0xc1180000, 0xc1187fff).rw(FUNC(ms32_state::ms32_priram_r8), FUNC(ms32_state::ms32_priram_w8)).umask32(0x000000ff).mirror(0x3c038000).share("priram"); /* priram is 8-bit wide, 0x2000 in size */
-/* AM_RANGE(0xc1188000, 0xc11bffff) // mirrors of priram, handled above */
+/* map(0xc1188000, 0xc11bffff) // mirrors of priram, handled above */
map(0xc1400000, 0xc143ffff).rw(FUNC(ms32_state::ms32_palram_r16), FUNC(ms32_state::ms32_palram_w16)).umask32(0x0000ffff).mirror(0x3c1c0000).share("palram"); /* palram is 16-bit wide, 0x20000 in size */
-/* AM_RANGE(0xc1440000, 0xc145ffff) // mirrors of palram, handled above */
+/* map(0xc1440000, 0xc145ffff) // mirrors of palram, handled above */
map(0xc2000000, 0xc201ffff).rw(FUNC(ms32_state::ms32_rozram_r16), FUNC(ms32_state::ms32_rozram_w16)).umask32(0x0000ffff).mirror(0x3c1e0000).share("rozram"); /* rozram is 16-bit wide, 0x10000 in size */
-/* AM_RANGE(0xc2020000, 0xc21fffff) // mirrors of rozram, handled above */
+/* map(0xc2020000, 0xc21fffff) // mirrors of rozram, handled above */
map(0xc2200000, 0xc2201fff).rw(FUNC(ms32_state::ms32_lineram_r16), FUNC(ms32_state::ms32_lineram_w16)).umask32(0x0000ffff).mirror(0x3c1fe000).share("lineram"); /* lineram is 16-bit wide, 0x1000 in size */
-/* AM_RANGE(0xc2202000, 0xc23fffff) // mirrors of lineram, handled above */
+/* map(0xc2202000, 0xc23fffff) // mirrors of lineram, handled above */
map(0xc2800000, 0xc283ffff).rw(FUNC(ms32_state::ms32_sprram_r16), FUNC(ms32_state::ms32_sprram_w16)).umask32(0x0000ffff).mirror(0x3c1c0000).share("sprram"); /* spriteram is 16-bit wide, 0x20000 in size */
-/* AM_RANGE(0xc2840000, 0xc29fffff) // mirrors of sprram, handled above */
+/* map(0xc2840000, 0xc29fffff) // mirrors of sprram, handled above */
map(0xc2c00000, 0xc2c07fff).rw(FUNC(ms32_state::ms32_txram_r16), FUNC(ms32_state::ms32_txram_w16)).umask32(0x0000ffff).mirror(0x3c1f0000).share("txram"); /* txram is 16-bit wide, 0x4000 in size */
map(0xc2c08000, 0xc2c0ffff).rw(FUNC(ms32_state::ms32_bgram_r16), FUNC(ms32_state::ms32_bgram_w16)).umask32(0x0000ffff).mirror(0x3c1f0000).share("bgram"); /* bgram is 16-bit wide, 0x4000 in size */
-/* AM_RANGE(0xc2c10000, 0xc2dfffff) // mirrors of txram / bg, handled above */
+/* map(0xc2c10000, 0xc2dfffff) // mirrors of txram / bg, handled above */
map(0xc2e00000, 0xc2e1ffff).ram().share("mainram").mirror(0x3c0e0000); /* mainram is 32-bit wide, 0x20000 in size */
map(0xc3e00000, 0xc3ffffff).rom().region("maincpu", 0).mirror(0x3c000000); // ROM is 32-bit wide, 0x200000 in size */
@@ -673,7 +673,7 @@ void ms32_state::ms32_map(address_map &map)
map(0xfce00034, 0xfce00037).nopw(); // irq ack?
map(0xfce00038, 0xfce0003b).w(FUNC(ms32_state::reset_sub_w));
map(0xfce00050, 0xfce0005f).nopw(); // watchdog? I haven't investigated
-// AM_RANGE(0xfce00000, 0xfce0007f) AM_WRITEONLY AM_SHARE("ms32_fce00000") /* registers not ram? */
+// map(0xfce00000, 0xfce0007f).writeonly().share("ms32_fce00000"); /* registers not ram? */
map(0xfce00000, 0xfce00003).w(FUNC(ms32_state::ms32_gfxctrl_w)); /* flip screen + other unknown bits */
map(0xfce00280, 0xfce0028f).w(FUNC(ms32_state::ms32_brightness_w)); // global brightness control
/**/map(0xfce00600, 0xfce0065f).ram().share("roz_ctrl"); /* roz control registers */
@@ -836,14 +836,14 @@ what the operations might be, my maths isn't up to much though...
*/
-// AM_RANGE(0xfce00800, 0xfce0085f) // f1superb, roz #2 control?
-///**/AM_RANGE(0xfd104000, 0xfd105fff) AM_RAM /* f1superb */
-///**/AM_RANGE(0xfd144000, 0xfd145fff) AM_RAM /* f1superb */
-///**/AM_RANGE(0xfd440000, 0xfd47ffff) AM_RAM /* f1superb color */
-///**/AM_RANGE(0xfdc00000, 0xfdc006ff) AM_RAM /* f1superb */
-///**/AM_RANGE(0xfde00000, 0xfde01fff) AM_RAM /* f1superb lineram #2? */
-///**/AM_RANGE(0xfe202000, 0xfe2fffff) AM_RAM /* f1superb vram */
-// AM_RANGE(0xfd0e0000, 0xfd0e0003) AM_READ(ms32_read_inputs3) /* analog controls in f1superb? */
+// map(0xfce00800, 0xfce0085f) // f1superb, roz #2 control?
+///**/map(0xfd104000, 0xfd105fff).ram(); /* f1superb */
+///**/map(0xfd144000, 0xfd145fff).ram(); /* f1superb */
+///**/map(0xfd440000, 0xfd47ffff).ram(); /* f1superb color */
+///**/map(0xfdc00000, 0xfdc006ff).ram(); /* f1superb */
+///**/map(0xfde00000, 0xfde01fff).ram(); /* f1superb lineram #2? */
+///**/map(0xfe202000, 0xfe2fffff).ram(); /* f1superb vram */
+// map(0xfd0e0000, 0xfd0e0003).r(FUNC(ms32_state::ms32_read_inputs3)); /* analog controls in f1superb? */
/*************************************
*
diff --git a/src/mame/drivers/msisaac.cpp b/src/mame/drivers/msisaac.cpp
index 37c029fda7e..e6381222243 100644
--- a/src/mame/drivers/msisaac.cpp
+++ b/src/mame/drivers/msisaac.cpp
@@ -203,15 +203,15 @@ void msisaac_state::msisaac_map(address_map &map)
map(0xf082, 0xf082).portr("DSW3");
map(0xf083, 0xf083).portr("IN0");
map(0xf084, 0xf084).portr("IN1");
-// AM_RANGE(0xf086, 0xf086) AM_READ_PORT("IN2")
+// map(0xf086, 0xf086).portr("IN2");
map(0xf100, 0xf17f).ram().share("spriteram"); //sprites
map(0xf400, 0xf7ff).ram().w(FUNC(msisaac_state::msisaac_fg_videoram_w)).share("videoram");
map(0xf800, 0xfbff).ram().w(FUNC(msisaac_state::msisaac_bg2_videoram_w)).share("videoram3");
map(0xfc00, 0xffff).ram().w(FUNC(msisaac_state::msisaac_bg_videoram_w)).share("videoram2");
-// AM_RANGE(0xf801, 0xf801) AM_WRITE(msisaac_bgcolor_w)
-// AM_RANGE(0xfc00, 0xfc00) AM_WRITE(flip_screen_w)
-// AM_RANGE(0xfc03, 0xfc04) AM_WRITE(msisaac_coin_counter_w)
+// map(0xf801, 0xf801).w(FUNC(msisaac_state::msisaac_bgcolor_w));
+// map(0xfc00, 0xfc00).w(FUNC(msisaac_state::flip_screen_w));
+// map(0xfc03, 0xfc04).w(FUNC(msisaac_state::msisaac_coin_counter_w));
}
WRITE8_MEMBER(msisaac_state::sound_control_0_w)
diff --git a/src/mame/drivers/mstation.cpp b/src/mame/drivers/mstation.cpp
index 4dce16f278e..6b94979380b 100644
--- a/src/mame/drivers/mstation.cpp
+++ b/src/mame/drivers/mstation.cpp
@@ -288,7 +288,7 @@ void mstation_state::mstation_io(address_map &map)
map(0x07, 0x08).rw(FUNC(mstation_state::bank2_r), FUNC(mstation_state::bank2_w));
map(0x09, 0x09).r(FUNC(mstation_state::battery_status_r));
map(0x10, 0x1f).rw("rtc", FUNC(rp5c01_device::read), FUNC(rp5c01_device::write));
- //AM_RANGE( 0x2c, 0x2c ) printer
+ //map(0x2c, 0x2c) printer
}
diff --git a/src/mame/drivers/multfish.cpp b/src/mame/drivers/multfish.cpp
index a0e1d5bc07b..829252997f9 100644
--- a/src/mame/drivers/multfish.cpp
+++ b/src/mame/drivers/multfish.cpp
@@ -953,11 +953,11 @@ void igrosoft_gamble_state::igrosoft_gamble_portmap(address_map &map)
/* Write ports not hooked up yet */
map(0x30, 0x30).w(FUNC(igrosoft_gamble_state::igrosoft_gamble_lamps1_w));
map(0x31, 0x31).w(FUNC(igrosoft_gamble_state::igrosoft_gamble_counters_w));
-// AM_RANGE(0x32, 0x32) AM_WRITE(igrosoft_gamble_port32_w)
+// map(0x32, 0x32).w(FUNC(igrosoft_gamble_state::igrosoft_gamble_port32_w));
map(0x33, 0x33).w(FUNC(igrosoft_gamble_state::igrosoft_gamble_hopper_w));
map(0x34, 0x34).w(FUNC(igrosoft_gamble_state::igrosoft_gamble_lamps2_w));
map(0x35, 0x35).w(FUNC(igrosoft_gamble_state::igrosoft_gamble_lamps3_w));
-// AM_RANGE(0x36, 0x36) AM_WRITE(igrosoft_gamble_port36_w)
+// map(0x36, 0x36).w(FUNC(igrosoft_gamble_state::igrosoft_gamble_port36_w));
map(0x37, 0x37).w("watchdog", FUNC(watchdog_timer_device::reset_w));
map(0x38, 0x38).w("aysnd", FUNC(ay8910_device::address_w));
map(0x39, 0x39).w("aysnd", FUNC(ay8910_device::data_w));
diff --git a/src/mame/drivers/multi8.cpp b/src/mame/drivers/multi8.cpp
index dbdeae5d33b..381f6d01bb5 100644
--- a/src/mame/drivers/multi8.cpp
+++ b/src/mame/drivers/multi8.cpp
@@ -348,7 +348,7 @@ void multi8_state::mem_map(address_map &map)
void multi8_state::io_map(address_map &map)
{
-// ADDRESS_MAP_UNMAP_HIGH
+// map.unmap_value_high();
map.global_mask(0xff);
map(0x00, 0x00).r(FUNC(multi8_state::key_input_r)); //keyboard
map(0x01, 0x01).r(FUNC(multi8_state::key_status_r)); //keyboard
@@ -363,8 +363,8 @@ void multi8_state::io_map(address_map &map)
map(0x2c, 0x2d).rw("pic", FUNC(pic8259_device::read), FUNC(pic8259_device::write)); //i8259
map(0x30, 0x37).rw(FUNC(multi8_state::pal_r), FUNC(multi8_state::pal_w));
map(0x40, 0x41).rw(FUNC(multi8_state::kanji_r), FUNC(multi8_state::kanji_w)); //kanji regs
-// AM_RANGE(0x70, 0x74) //upd765a fdc
-// AM_RANGE(0x78, 0x78) //memory banking
+// map(0x70, 0x74) //upd765a fdc
+// map(0x78, 0x78) //memory banking
}
/* Input ports */
diff --git a/src/mame/drivers/murogmbl.cpp b/src/mame/drivers/murogmbl.cpp
index 327cbc5da46..9364d182f7a 100644
--- a/src/mame/drivers/murogmbl.cpp
+++ b/src/mame/drivers/murogmbl.cpp
@@ -176,7 +176,7 @@ void slotunbl_state::slotunbl_map(address_map &map)
map(0x4000, 0x43ff).ram();
map(0x4800, 0x4fff).ram();
map(0x5000, 0x53ff).ram().share("video");
-// AM_RANGE(0x5400, 0x5fff) AM_RAM
+// map(0x5400, 0x5fff).ram();
map(0x6000, 0x6000).portr("IN0");
map(0x6800, 0x6800).portr("DSW");
map(0x7000, 0x7000).portr("IN1");
diff --git a/src/mame/drivers/mustache.cpp b/src/mame/drivers/mustache.cpp
index f3fdf7c9232..2100ef768d8 100644
--- a/src/mame/drivers/mustache.cpp
+++ b/src/mame/drivers/mustache.cpp
@@ -29,6 +29,7 @@ YM2151:
. Pin 24 - 3577600.55 OSC1/4
***************************************************************************/
+
#include "emu.h"
#include "includes/mustache.h"
#include "audio/t5182.h"
@@ -37,14 +38,6 @@ YM2151:
#include "speaker.h"
-#define XTAL1 14318180
-#define XTAL2 18432000
-#define XTAL3 12000000
-
-#define CPU_CLOCK (XTAL3/2)
-#define YM_CLOCK (XTAL1/4)
-
-
void mustache_state::memmap(address_map &map)
{
map(0x0000, 0x7fff).r("sei80bu", FUNC(sei80bu_device::data_r));
@@ -166,26 +159,14 @@ static GFXDECODE_START( gfx_mustache )
GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 0x80, 8 )
GFXDECODE_END
-TIMER_DEVICE_CALLBACK_MEMBER(mustache_state::scanline)
-{
- int scanline = param;
-
- if(scanline == 240) // vblank-out irq
- m_maincpu->set_input_line_and_vector(0, HOLD_LINE,0x10); /* Z80 - RST 10h */
-
- if(scanline == 0) // vblank-in irq
- m_maincpu->set_input_line_and_vector(0, HOLD_LINE,0x08); /* Z80 - RST 08h */
-}
-
void mustache_state::mustache(machine_config &config)
{
/* basic machine hardware */
- Z80(config, m_maincpu, CPU_CLOCK);
+ Z80(config, m_maincpu, 12_MHz_XTAL/2);
m_maincpu->set_addrmap(AS_PROGRAM, &mustache_state::memmap);
m_maincpu->set_addrmap(AS_OPCODES, &mustache_state::decrypted_opcodes_map);
- TIMER(config, "scantimer").configure_scanline(FUNC(mustache_state::scanline), "screen", 0, 1);
SEI80BU(config, "sei80bu", 0).set_device_rom_tag("maincpu");
@@ -194,11 +175,12 @@ void mustache_state::mustache(machine_config &config)
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(56.747);
- m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500));
m_screen->set_size(32*8, 32*8);
m_screen->set_visarea(1*8, 31*8-1, 0, 31*8-1);
m_screen->set_screen_update(FUNC(mustache_state::screen_update));
m_screen->set_palette(m_palette);
+ m_screen->screen_vblank().set_inputline(m_maincpu, INPUT_LINE_IRQ0); // causes 2 interrupts per frame
GFXDECODE(config, m_gfxdecode, m_palette, gfx_mustache);
PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 256);
@@ -206,7 +188,7 @@ void mustache_state::mustache(machine_config &config)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- ym2151_device &ymsnd(YM2151(config, "ymsnd", YM_CLOCK));
+ ym2151_device &ymsnd(YM2151(config, "ymsnd", 14.318181_MHz_XTAL/4));
ymsnd.irq_handler().set("t5182", FUNC(t5182_device::ym2151_irq_handler));
ymsnd.add_route(0, "mono", 1.0);
ymsnd.add_route(1, "mono", 1.0);
diff --git a/src/mame/drivers/mvme147.cpp b/src/mame/drivers/mvme147.cpp
index c164c65afdc..d261431a2cc 100644
--- a/src/mame/drivers/mvme147.cpp
+++ b/src/mame/drivers/mvme147.cpp
@@ -241,13 +241,13 @@ void mvme147_state::mvme147_mem(address_map &map)
map(0x00000000, 0x00000007).ram().w(FUNC(mvme147_state::bootvect_w)); /* After first write we act as RAM */
map(0x00000000, 0x00000007).rom().r(FUNC(mvme147_state::bootvect_r)); /* ROM mirror just during reset */
map(0x00000008, 0x003fffff).ram(); /* 4 Mb RAM */
- map(0xff800000, 0xff9fffff).rom().region("roms", 0x800000); //AM_MIRROR(0x00780000) /* ROM/EEPROM bank 1 - 147bug */
- map(0xffa00000, 0xffbfffff).rom().region("roms", 0xa00000); //AM_MIRROR(0x00780000) /* ROM/EEPROM bank 2 - unpopulated */
+ map(0xff800000, 0xff9fffff).rom().region("roms", 0x800000); //mirror(0x00780000); /* ROM/EEPROM bank 1 - 147bug */
+ map(0xffa00000, 0xffbfffff).rom().region("roms", 0xa00000); //mirror(0x00780000); /* ROM/EEPROM bank 2 - unpopulated */
/* SGS-Thompson M48T18 RAM and clock chip, only 4088 bytes used, and 8 bytes for the RTC, out of 8Kb though */
map(0xfffe0000, 0xfffe0fff).rw("m48t18", FUNC(timekeeper_device::read), FUNC(timekeeper_device::write));
- //AM_RANGE (0xfffe1000, 0xfffe100f) AM_READWRITE32(pcc32_r, pcc32_w, 0xffffffff) /* PCC 32 bits registers - needs U64 cast defined to work */
+ //map(0xfffe1000, 0xfffe100f).rw(FUNC(mvme147_state::pcc32_r), FUNC(mvme147_state::pcc32_w)); /* PCC 32 bits registers - needs U64 cast defined to work */
map(0xfffe1010, 0xfffe1017).rw(FUNC(mvme147_state::pcc16_r), FUNC(mvme147_state::pcc16_w)); /* PCC 16 bits registers */
map(0xfffe1018, 0xfffe102f).rw(FUNC(mvme147_state::pcc8_r), FUNC(mvme147_state::pcc8_w)); /* PCC 8 bits registers */
map(0xfffe2000, 0xfffe201b).rw(FUNC(mvme147_state::vmechip_r), FUNC(mvme147_state::vmechip_w)).umask32(0x00ff00ff); /* VMEchip 8 bits registers on odd adresses */
@@ -255,8 +255,8 @@ void mvme147_state::mvme147_mem(address_map &map)
map(0xfffe3000, 0xfffe3003).rw(m_sccterm, FUNC(scc85c30_device::ab_dc_r), FUNC(scc85c30_device::ab_dc_w)); /* Port 1&2 - Dual serial port Z80-SCC */
map(0xfffe3800, 0xfffe3803).rw(m_sccterm2, FUNC(scc85c30_device::ab_dc_r), FUNC(scc85c30_device::ab_dc_w)); /* Port 3&4 - Dual serial port Z80-SCC */
- //AM_RANGE(0x100000, 0xfeffff) AM_READWRITE(vme_a24_r, vme_a24_w) /* VMEbus Rev B addresses (24 bits) - not verified */
- //AM_RANGE(0xff0000, 0xffffff) AM_READWRITE(vme_a16_r, vme_a16_w) /* VMEbus Rev B addresses (16 bits) - not verified */
+ //map(0x100000, 0xfeffff).rw(FUNC(mvme147_state::vme_a24_r), FUNC(mvme147_state::vme_a24_w)); /* VMEbus Rev B addresses (24 bits) - not verified */
+ //map(0xff0000, 0xffffff).rw(FUNC(mvme147_state::vme_a16_r), FUNC(mvme147_state::vme_a16_w)); /* VMEbus Rev B addresses (16 bits) - not verified */
}
/* Input ports */
diff --git a/src/mame/drivers/mw8080bw.cpp b/src/mame/drivers/mw8080bw.cpp
index d00d06e6695..40f44ee788a 100644
--- a/src/mame/drivers/mw8080bw.cpp
+++ b/src/mame/drivers/mw8080bw.cpp
@@ -151,9 +151,12 @@
****************************************************************************/
#include "emu.h"
+#include "includes/mw8080bw.h"
+
#include "cpu/i8085/i8085.h"
#include "machine/rescap.h"
-#include "includes/mw8080bw.h"
+
+#include <algorithm>
#include "280zzzap.lh"
#include "clowns.lh"
@@ -169,44 +172,26 @@
+INPUT_CHANGED_MEMBER(mw8080bw_state::direct_coin_count)
+{
+ machine().bookkeeping().coin_counter_w(0, newval);
+}
+
+
/*************************************
*
* Special shifter circuit
*
*************************************/
-READ8_MEMBER(mw8080bw_state::mw8080bw_shift_result_rev_r)
+u8 mw8080bw_state::mw8080bw_shift_result_rev_r()
{
- uint8_t ret = m_mb14241->shift_result_r(space, 0);
+ uint8_t ret = m_mb14241->shift_result_r();
return bitswap<8>(ret,0,1,2,3,4,5,6,7);
}
-READ8_MEMBER(mw8080bw_state::mw8080bw_reversable_shift_result_r)
-{
- uint8_t ret;
-
- if (m_rev_shift_res)
- {
- ret = mw8080bw_shift_result_rev_r(space, 0);
- }
- else
- {
- ret = m_mb14241->shift_result_r(space, 0);
- }
-
- return ret;
-}
-
-WRITE8_MEMBER(mw8080bw_state::mw8080bw_reversable_shift_count_w)
-{
- m_mb14241->shift_count_w(space, offset, data);
-
- m_rev_shift_res = data & 0x08;
-}
-
-
/*************************************
*
@@ -237,7 +222,6 @@ void mw8080bw_state::mw8080bw_root(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &mw8080bw_state::main_map);
m_maincpu->set_irq_acknowledge_callback(FUNC(mw8080bw_state::interrupt_vector));
- MCFG_MACHINE_START_OVERRIDE(mw8080bw_state,mw8080bw)
MCFG_MACHINE_RESET_OVERRIDE(mw8080bw_state,mw8080bw)
/* video hardware */
@@ -254,45 +238,42 @@ void mw8080bw_state::mw8080bw_root(machine_config &config)
*
*************************************/
-#define SEAWOLF_ERASE_SW_PORT_TAG ("ERASESW")
-#define SEAWOLF_ERASE_DIP_PORT_TAG ("ERASEDIP")
-
-
-WRITE8_MEMBER(mw8080bw_state::seawolf_explosion_lamp_w)
-{
-/* D0-D3 are column drivers and D4-D7 are row drivers.
- The following table shows values that light up individual lamps.
-
- D7 D6 D5 D4 D3 D2 D1 D0 Function
- --------------------------------------------------------------------------------------
- 0 0 0 1 1 0 0 0 Explosion Lamp 0
- 0 0 0 1 0 1 0 0 Explosion Lamp 1
- 0 0 0 1 0 0 1 0 Explosion Lamp 2
- 0 0 0 1 0 0 0 1 Explosion Lamp 3
- 0 0 1 0 1 0 0 0 Explosion Lamp 4
- 0 0 1 0 0 1 0 0 Explosion Lamp 5
- 0 0 1 0 0 0 1 0 Explosion Lamp 6
- 0 0 1 0 0 0 0 1 Explosion Lamp 7
- 0 1 0 0 1 0 0 0 Explosion Lamp 8
- 0 1 0 0 0 1 0 0 Explosion Lamp 9
- 0 1 0 0 0 0 1 0 Explosion Lamp A
- 0 1 0 0 0 0 0 1 Explosion Lamp B
- 1 0 0 0 1 0 0 0 Explosion Lamp C
- 1 0 0 0 0 1 0 0 Explosion Lamp D
- 1 0 0 0 0 0 1 0 Explosion Lamp E
- 1 0 0 0 0 0 0 1 Explosion Lamp F
-*/
- int i;
-
- static const char *const lamp_names[] =
- {
- "EXP_LAMP_0", "EXP_LAMP_1", "EXP_LAMP_2", "EXP_LAMP_3",
- "EXP_LAMP_4", "EXP_LAMP_5", "EXP_LAMP_6", "EXP_LAMP_7",
- "EXP_LAMP_8", "EXP_LAMP_9", "EXP_LAMP_A", "EXP_LAMP_B",
- "EXP_LAMP_C", "EXP_LAMP_D", "EXP_LAMP_E", "EXP_LAMP_F"
- };
-
- static const uint8_t bits_for_lamps[] =
+void seawolf_state::machine_start()
+{
+ mw8080bw_state::machine_start();
+
+ m_exp_lamps.resolve();
+ m_torp_lamps.resolve();
+ m_ready_lamp.resolve();
+ m_reload_lamp.resolve();
+}
+
+
+void seawolf_state::explosion_lamp_w(u8 data)
+{
+ /* D0-D3 are column drivers and D4-D7 are row drivers.
+ The following table shows values that light up individual lamps.
+
+ D7 D6 D5 D4 D3 D2 D1 D0 Function
+ --------------------------------------------------------------------------------------
+ 0 0 0 1 1 0 0 0 Explosion Lamp 0
+ 0 0 0 1 0 1 0 0 Explosion Lamp 1
+ 0 0 0 1 0 0 1 0 Explosion Lamp 2
+ 0 0 0 1 0 0 0 1 Explosion Lamp 3
+ 0 0 1 0 1 0 0 0 Explosion Lamp 4
+ 0 0 1 0 0 1 0 0 Explosion Lamp 5
+ 0 0 1 0 0 0 1 0 Explosion Lamp 6
+ 0 0 1 0 0 0 0 1 Explosion Lamp 7
+ 0 1 0 0 1 0 0 0 Explosion Lamp 8
+ 0 1 0 0 0 1 0 0 Explosion Lamp 9
+ 0 1 0 0 0 0 1 0 Explosion Lamp A
+ 0 1 0 0 0 0 0 1 Explosion Lamp B
+ 1 0 0 0 1 0 0 0 Explosion Lamp C
+ 1 0 0 0 0 1 0 0 Explosion Lamp D
+ 1 0 0 0 0 0 1 0 Explosion Lamp E
+ 1 0 0 0 0 0 0 1 Explosion Lamp F
+ */
+ static constexpr u8 BITS_FOR_LAMPS[] =
{
0x18, 0x14, 0x12, 0x11,
0x28, 0x24, 0x22, 0x21,
@@ -300,56 +281,52 @@ WRITE8_MEMBER(mw8080bw_state::seawolf_explosion_lamp_w)
0x88, 0x84, 0x82, 0x81
};
- /* set each lamp */
- for (i = 0; i < 16; i++)
+ for (int i = 0; i < 16; i++)
{
- uint8_t bits_for_lamp = bits_for_lamps[i];
-
- output().set_value(lamp_names[i], (data & bits_for_lamp) == bits_for_lamp);
+ u8 const bits_for_lamp(BITS_FOR_LAMPS[i]);
+ m_exp_lamps[i] = ((data & bits_for_lamp) == bits_for_lamp) ? 1 : 0;
}
}
-WRITE8_MEMBER(mw8080bw_state::seawolf_periscope_lamp_w)
+void seawolf_state::periscope_lamp_w(u8 data)
{
- /* the schematics and the connecting diagrams show the
- torpedo light order differently, but this order is
- confirmed by the software */
- output().set_value("TORP_LAMP_4", (data >> 0) & 0x01);
- output().set_value("TORP_LAMP_3", (data >> 1) & 0x01);
- output().set_value("TORP_LAMP_2", (data >> 2) & 0x01);
- output().set_value("TORP_LAMP_1", (data >> 3) & 0x01);
+ /* the schematics and the connecting diagrams show the torpedo light
+ order differently, but this order is confirmed by the software */
+ m_torp_lamps[3] = BIT(data, 0);
+ m_torp_lamps[2] = BIT(data, 1);
+ m_torp_lamps[1] = BIT(data, 2);
+ m_torp_lamps[0] = BIT(data, 3);
- output().set_value("READY_LAMP", (data >> 4) & 0x01);
+ m_ready_lamp = BIT(data, 4);
- output().set_value("RELOAD_LAMP", (data >> 5) & 0x01);
+ m_reload_lamp = BIT(data, 5);
}
-CUSTOM_INPUT_MEMBER(mw8080bw_state::seawolf_erase_input_r)
+CUSTOM_INPUT_MEMBER(seawolf_state::erase_input_r)
{
- return ioport(SEAWOLF_ERASE_SW_PORT_TAG)->read() &
- ioport(SEAWOLF_ERASE_DIP_PORT_TAG)->read();
+ return m_erase_sw->read() & m_erase_dip->read();
}
-void mw8080bw_state::seawolf_io_map(address_map &map)
+void seawolf_state::io_map(address_map &map)
{
map.global_mask(0x7);
- map(0x00, 0x00).mirror(0x04).r(FUNC(mw8080bw_state::mw8080bw_shift_result_rev_r));
+ map(0x00, 0x00).mirror(0x04).r(FUNC(seawolf_state::mw8080bw_shift_result_rev_r));
map(0x01, 0x01).mirror(0x04).portr("IN0");
map(0x02, 0x02).mirror(0x04).portr("IN1");
map(0x03, 0x03).mirror(0x04).r(m_mb14241, FUNC(mb14241_device::shift_result_r));
- map(0x01, 0x01).w(FUNC(mw8080bw_state::seawolf_explosion_lamp_w));
- map(0x02, 0x02).w(FUNC(mw8080bw_state::seawolf_periscope_lamp_w));
+ map(0x01, 0x01).w(FUNC(seawolf_state::explosion_lamp_w));
+ map(0x02, 0x02).w(FUNC(seawolf_state::periscope_lamp_w));
map(0x03, 0x03).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
map(0x04, 0x04).w(m_mb14241, FUNC(mb14241_device::shift_count_w));
- map(0x05, 0x05).w(FUNC(mw8080bw_state::seawolf_audio_w));
+ map(0x05, 0x05).w("soundboard", FUNC(seawolf_audio_device::write));
}
-/* the 30 position encoder is verified */
+// the 30 position encoder is verified
static const ioport_value seawolf_controller_table[30] =
{
0x1e, 0x1c, 0x1d, 0x19, 0x18, 0x1a, 0x1b, 0x13,
@@ -361,10 +338,10 @@ static const ioport_value seawolf_controller_table[30] =
static INPUT_PORTS_START( seawolf )
PORT_START("IN0")
- /* the grey code is inverted by buffers */
- /* The wiring diagram shows the encoder has 32 positions. */
- /* But there is a hand written table on the game logic sheet showing only 30 positions. */
- /* The actual commutator pcb (encoder) has 30 positions and works like the table says. */
+ // the grey code is inverted by buffers
+ // The wiring diagram shows the encoder has 32 positions.
+ // But there is a hand written table on the game logic sheet showing only 30 positions.
+ // The actual commutator pcb (encoder) has 30 positions and works like the table says.
PORT_BIT( 0x1f, 0x0f, IPT_POSITIONAL ) PORT_POSITIONS(30) PORT_REMAP_TABLE(seawolf_controller_table) PORT_INVERT PORT_SENSITIVITY(20) PORT_KEYDELTA(8) PORT_CENTERDELTA(0) PORT_NAME("Periscope axis") PORT_CROSSHAIR(X, ((float)MW8080BW_HPIXCOUNT - 28) / MW8080BW_HPIXCOUNT, 16.0 / MW8080BW_HPIXCOUNT, 32.0 / MW8080BW_VBSTART)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_DIPNAME( 0xc0, 0x40, DEF_STR( Game_Time ) ) PORT_CONDITION("IN1", 0xe0, NOTEQUALS, 0xe0) PORT_DIPLOCATION("G4:1,2")
@@ -385,7 +362,7 @@ static INPUT_PORTS_START( seawolf )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x0c, DEF_STR( 2C_3C ) )
PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, seawolf_erase_input_r)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(seawolf_state, erase_input_r)
PORT_DIPNAME( 0xe0, 0x60, "Extended Time At" ) PORT_DIPLOCATION("G4:6,7,8")
PORT_DIPSETTING( 0x00, DEF_STR( None ) )
PORT_DIPSETTING( 0x20, "2000" )
@@ -396,9 +373,9 @@ static INPUT_PORTS_START( seawolf )
PORT_DIPSETTING( 0xc0, "7000" )
PORT_DIPSETTING( 0xe0, "Test Mode" )
- /* 2 fake ports for the 'Reset High Score' input, which has a DIP to enable it */
+ // 2 fake ports for the 'Reset High Score' input, which has a DIP to enable it
PORT_START(SEAWOLF_ERASE_SW_PORT_TAG)
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Reset High Score") PORT_CODE(KEYCODE_F2)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_MEMORY_RESET ) PORT_NAME("Reset High Score")
PORT_BIT( 0xfe, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START(SEAWOLF_ERASE_DIP_PORT_TAG)
@@ -409,19 +386,20 @@ static INPUT_PORTS_START( seawolf )
INPUT_PORTS_END
-void mw8080bw_state::seawolf(machine_config &config)
+void seawolf_state::seawolf(machine_config &config)
{
mw8080bw_root(config);
- /* basic machine hardware */
- m_maincpu->set_addrmap(AS_IO, &mw8080bw_state::seawolf_io_map);
- /* there is no watchdog */
+ // basic machine hardware
+ m_maincpu->set_addrmap(AS_IO, &seawolf_state::io_map);
- /* add shifter */
+ // there is no watchdog
+
+ // add shifter
MB14241(config, m_mb14241);
- /* audio hardware */
- seawolf_audio(config);
+ // audio hardware
+ SEAWOLF_AUDIO(config, "soundboard");
}
@@ -432,21 +410,20 @@ void mw8080bw_state::seawolf(machine_config &config)
*
*************************************/
-WRITE8_MEMBER(mw8080bw_state::gunfight_io_w)
+void gunfight_state::io_w(offs_t offset, u8 data)
{
if (offset & 0x01)
- gunfight_audio_w(space, 0, data);
+ m_soundboard->write(data);
if (offset & 0x02)
- m_mb14241->shift_count_w(space, 0, data);
+ m_mb14241->shift_count_w(data);
if (offset & 0x04)
- m_mb14241->shift_data_w(space, 0, data);
-
+ m_mb14241->shift_data_w(data);
}
-void mw8080bw_state::gunfight_io_map(address_map &map)
+void gunfight_state::io_map(address_map &map)
{
map.global_mask(0x7);
map(0x00, 0x00).mirror(0x04).portr("IN0");
@@ -454,8 +431,7 @@ void mw8080bw_state::gunfight_io_map(address_map &map)
map(0x02, 0x02).mirror(0x04).portr("IN2");
map(0x03, 0x03).mirror(0x04).r(m_mb14241, FUNC(mb14241_device::shift_result_r));
- /* no decoder, just 3 AND gates */
- map(0x00, 0x07).w(FUNC(mw8080bw_state::gunfight_io_w));
+ map(0x00, 0x07).w(FUNC(gunfight_state::io_w)); // no decoder, just 3 AND gates
}
@@ -510,19 +486,20 @@ static INPUT_PORTS_START( gunfight )
INPUT_PORTS_END
-void mw8080bw_state::gunfight(machine_config &config)
+void gunfight_state::gunfight(machine_config &config)
{
mw8080bw_root(config);
- /* basic machine hardware */
- m_maincpu->set_addrmap(AS_IO, &mw8080bw_state::gunfight_io_map);
- /* there is no watchdog */
+ // basic machine hardware
+ m_maincpu->set_addrmap(AS_IO, &gunfight_state::io_map);
- /* add shifter */
+ // there is no watchdog
+
+ // add shifter
MB14241(config, m_mb14241);
- /* audio hardware */
- gunfight_audio(config);
+ // audio hardware
+ GUNFIGHT_AUDIO(config, m_soundboard);
}
@@ -634,10 +611,10 @@ WRITE8_MEMBER(mw8080bw_state::tornbase_io_w)
tornbase_audio_w(space, 0, data);
if (offset & 0x02)
- m_mb14241->shift_count_w(space, 0, data);
+ m_mb14241->shift_count_w(data);
if (offset & 0x04)
- m_mb14241->shift_data_w(space, 0, data);
+ m_mb14241->shift_data_w(data);
}
@@ -889,6 +866,8 @@ TIMER_CALLBACK_MEMBER(mw8080bw_state::maze_tone_timing_timer_callback)
MACHINE_START_MEMBER(mw8080bw_state,maze)
{
+ mw8080bw_state::machine_start();
+
/* create astable timer for IC B1 */
m_maze_tone_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mw8080bw_state::maze_tone_timing_timer_callback), this));
m_maze_tone_timer->adjust(MAZE_555_B1_PERIOD, 0, MAZE_555_B1_PERIOD);
@@ -899,8 +878,6 @@ MACHINE_START_MEMBER(mw8080bw_state,maze)
/* setup for save states */
save_item(NAME(m_maze_tone_timing_state));
machine().save().register_postload(save_prepost_delegate(FUNC(mw8080bw_state::maze_update_discrete), this));
-
- MACHINE_START_CALL_MEMBER(mw8080bw);
}
@@ -982,29 +959,42 @@ void mw8080bw_state::maze(machine_config &config)
*
*************************************/
-MACHINE_START_MEMBER(mw8080bw_state,boothill)
+void boothill_state::machine_start()
{
- /* setup for save states */
+ mw8080bw_state::machine_start();
+
+ m_rev_shift_res = 0U;
+
save_item(NAME(m_rev_shift_res));
+}
+
+u8 boothill_state::reversible_shift_result_r()
+{
+ return m_rev_shift_res ? mw8080bw_shift_result_rev_r() : m_mb14241->shift_result_r();
+}
+
+void boothill_state::reversible_shift_count_w(u8 data)
+{
+ m_mb14241->shift_count_w(data);
- MACHINE_START_CALL_MEMBER(mw8080bw);
+ m_rev_shift_res = BIT(data, 3);
}
-void mw8080bw_state::boothill_io_map(address_map &map)
+void boothill_state::boothill_io_map(address_map &map)
{
map.global_mask(0x7);
map(0x00, 0x00).mirror(0x04).portr("IN0");
map(0x01, 0x01).mirror(0x04).portr("IN1");
map(0x02, 0x02).mirror(0x04).portr("IN2");
- map(0x03, 0x03).mirror(0x04).r(FUNC(mw8080bw_state::mw8080bw_reversable_shift_result_r));
+ map(0x03, 0x03).mirror(0x04).r(FUNC(boothill_state::reversible_shift_result_r));
- map(0x01, 0x01).w(FUNC(mw8080bw_state::mw8080bw_reversable_shift_count_w));
+ map(0x01, 0x01).w(FUNC(boothill_state::reversible_shift_count_w));
map(0x02, 0x02).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
- map(0x03, 0x03).w(FUNC(mw8080bw_state::boothill_audio_w));
+ map(0x03, 0x03).w("soundboard", FUNC(boothill_audio_device::write));
map(0x04, 0x04).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
- map(0x05, 0x05).w(FUNC(mw8080bw_state::midway_tone_generator_lo_w));
- map(0x06, 0x06).w(FUNC(mw8080bw_state::midway_tone_generator_hi_w));
+ map(0x05, 0x05).w("soundboard", FUNC(boothill_audio_device::tone_generator_lo_w));
+ map(0x06, 0x06).w("soundboard", FUNC(boothill_audio_device::tone_generator_hi_w));
}
@@ -1046,28 +1036,23 @@ static INPUT_PORTS_START( boothill )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
-
- PORT_START("MUSIC_ADJ")
- PORT_ADJUSTER( 35, "Music Volume" )
INPUT_PORTS_END
-void mw8080bw_state::boothill(machine_config &config)
+void boothill_state::boothill(machine_config &config)
{
mw8080bw_root(config);
- /* basic machine hardware */
- m_maincpu->set_addrmap(AS_IO, &mw8080bw_state::boothill_io_map);
-
- MCFG_MACHINE_START_OVERRIDE(mw8080bw_state,boothill)
+ // basic machine hardware
+ m_maincpu->set_addrmap(AS_IO, &boothill_state::boothill_io_map);
- WATCHDOG_TIMER(config, m_watchdog).set_time(PERIOD_OF_555_MONOSTABLE(RES_K(270), CAP_U(10))); /* 2.97s */
+ WATCHDOG_TIMER(config, m_watchdog).set_time(PERIOD_OF_555_MONOSTABLE(RES_K(270), CAP_U(10))); // 2.97s
- /* add shifter */
+ // add shifter
MB14241(config, m_mb14241);
- /* audio hardware */
- boothill_audio(config);
+ // audio hardware
+ BOOTHILL_AUDIO(config, "soundboard");
}
@@ -1181,69 +1166,52 @@ void mw8080bw_state::checkmat(machine_config &config)
*
*************************************/
-#define DESERTGU_DIP_SW_0_1_SET_1_TAG ("DIPSW01SET1")
-#define DESERTGU_DIP_SW_0_1_SET_2_TAG ("DIPSW01SET2")
-
-
-MACHINE_START_MEMBER(mw8080bw_state,desertgu)
+void desertgu_state::machine_start()
{
- /* setup for save states */
- save_item(NAME(m_desertgun_controller_select));
+ mw8080bw_state::machine_start();
+
+ m_controller_select = 0U;
- MACHINE_START_CALL_MEMBER(mw8080bw);
+ save_item(NAME(m_controller_select));
}
-CUSTOM_INPUT_MEMBER(mw8080bw_state::desertgu_gun_input_r)
+CUSTOM_INPUT_MEMBER(desertgu_state::gun_input_r)
{
- uint32_t ret;
-
- if (m_desertgun_controller_select)
- ret = ioport(DESERTGU_GUN_X_PORT_TAG)->read();
- else
- ret = ioport(DESERTGU_GUN_Y_PORT_TAG)->read();
-
- return ret;
+ return m_gun_port[m_controller_select]->read();
}
-CUSTOM_INPUT_MEMBER(mw8080bw_state::desertgu_dip_sw_0_1_r)
+CUSTOM_INPUT_MEMBER(desertgu_state::dip_sw_0_1_r)
{
- uint32_t ret;
-
- if (m_desertgun_controller_select)
- ret = ioport(DESERTGU_DIP_SW_0_1_SET_2_TAG)->read();
- else
- ret = ioport(DESERTGU_DIP_SW_0_1_SET_1_TAG)->read();
-
- return ret;
+ return m_dip_sw_0_1[m_controller_select]->read();
}
-void mw8080bw_state::desertgu_io_map(address_map &map)
+void desertgu_state::io_map(address_map &map)
{
map.global_mask(0x7);
- map(0x00, 0x00).mirror(0x04).r(FUNC(mw8080bw_state::mw8080bw_shift_result_rev_r));
+ map(0x00, 0x00).mirror(0x04).r(FUNC(desertgu_state::mw8080bw_shift_result_rev_r));
map(0x01, 0x01).mirror(0x04).portr("IN0");
map(0x02, 0x02).mirror(0x04).portr("IN1");
map(0x03, 0x03).mirror(0x04).r(m_mb14241, FUNC(mb14241_device::shift_result_r));
map(0x01, 0x01).w(m_mb14241, FUNC(mb14241_device::shift_count_w));
map(0x02, 0x02).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
- map(0x03, 0x03).w(FUNC(mw8080bw_state::desertgu_audio_1_w));
+ map(0x03, 0x03).w("soundboard", FUNC(desertgu_audio_device::p1_w));
map(0x04, 0x04).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
- map(0x05, 0x05).w(FUNC(mw8080bw_state::midway_tone_generator_lo_w));
- map(0x06, 0x06).w(FUNC(mw8080bw_state::midway_tone_generator_hi_w));
- map(0x07, 0x07).w(FUNC(mw8080bw_state::desertgu_audio_2_w));
+ map(0x05, 0x05).w("soundboard", FUNC(desertgu_audio_device::tone_generator_lo_w));
+ map(0x06, 0x06).w("soundboard", FUNC(desertgu_audio_device::tone_generator_hi_w));
+ map(0x07, 0x07).w("soundboard", FUNC(desertgu_audio_device::p2_w));
}
static INPUT_PORTS_START( desertgu )
PORT_START("IN0")
- PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, desertgu_gun_input_r)
+ PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(desertgu_state, gun_input_r)
PORT_START("IN1")
- PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, desertgu_dip_sw_0_1_r)
+ PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(desertgu_state, dip_sw_0_1_r)
PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Language ) ) PORT_CONDITION("IN1", 0x30, NOTEQUALS, 0x30) PORT_DIPLOCATION("C2:5,6")
PORT_DIPSETTING( 0x00, DEF_STR( English ) )
PORT_DIPSETTING( 0x04, DEF_STR( German ) )
@@ -1281,28 +1249,23 @@ static INPUT_PORTS_START( desertgu )
PORT_DIPSETTING( 0x02, "60 seconds + 30 extended" )
PORT_DIPSETTING( 0x03, "70 seconds + 30 extended" )
PORT_BIT( 0xfc, IP_ACTIVE_HIGH, IPT_UNUSED )
-
- PORT_START("MUSIC_ADJ") /* 3 */
- PORT_ADJUSTER( 60, "Music Volume" )
INPUT_PORTS_END
-void mw8080bw_state::desertgu(machine_config &config)
+void desertgu_state::desertgu(machine_config &config)
{
mw8080bw_root(config);
- /* basic machine hardware */
- m_maincpu->set_addrmap(AS_IO, &mw8080bw_state::desertgu_io_map);
-
- MCFG_MACHINE_START_OVERRIDE(mw8080bw_state,desertgu)
+ // basic machine hardware
+ m_maincpu->set_addrmap(AS_IO, &desertgu_state::io_map);
WATCHDOG_TIMER(config, m_watchdog).set_time(255 * attotime::from_hz(MW8080BW_60HZ));
- /* add shifter */
+ // add shifter
MB14241(config, m_mb14241);
- /* audio hardware */
- desertgu_audio(config);
+ // audio hardware
+ DESERTGU_AUDIO(config, "soundboard").ctrl_sel_out().set([this] (int state) { m_controller_select = state ? 1U : 0U; });
}
@@ -1319,33 +1282,30 @@ void mw8080bw_state::desertgu(machine_config &config)
*
*************************************/
-#define DPLAY_L_PITCH_PORT_TAG ("LPITCH")
-#define DPLAY_R_PITCH_PORT_TAG ("RPITCH")
-#define DPLAY_CAB_TYPE_PORT_TAG ("CAB")
#define DPLAY_CAB_TYPE_UPRIGHT (0)
#define DPLAY_CAB_TYPE_COCKTAIL (1)
-CUSTOM_INPUT_MEMBER(mw8080bw_state::dplay_pitch_left_input_r)
+CUSTOM_INPUT_MEMBER(dplay_state::dplay_pitch_left_input_r)
{
uint32_t ret;
- if (ioport(DPLAY_CAB_TYPE_PORT_TAG)->read() == DPLAY_CAB_TYPE_UPRIGHT)
- ret = ioport(DPLAY_L_PITCH_PORT_TAG)->read();
+ if (m_cab_type->read() == DPLAY_CAB_TYPE_UPRIGHT)
+ return m_l_pitch->read();
else
- ret = ioport(DPLAY_R_PITCH_PORT_TAG)->read();
+ return m_r_pitch->read();
return ret;
}
-CUSTOM_INPUT_MEMBER(mw8080bw_state::dplay_pitch_right_input_r)
+CUSTOM_INPUT_MEMBER(dplay_state::dplay_pitch_right_input_r)
{
- return ioport(DPLAY_L_PITCH_PORT_TAG)->read();
+ return m_l_pitch->read();
}
-void mw8080bw_state::dplay_io_map(address_map &map)
+void dplay_state::io_map(address_map &map)
{
map.global_mask(0x7);
map(0x00, 0x00).mirror(0x04).portr("IN0");
@@ -1355,22 +1315,22 @@ void mw8080bw_state::dplay_io_map(address_map &map)
map(0x01, 0x01).w(m_mb14241, FUNC(mb14241_device::shift_count_w));
map(0x02, 0x02).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
- map(0x03, 0x03).w(FUNC(mw8080bw_state::dplay_audio_w));
+ map(0x03, 0x03).w("soundboard", FUNC(dplay_audio_device::write));
map(0x04, 0x04).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
- map(0x05, 0x05).w(FUNC(mw8080bw_state::midway_tone_generator_lo_w));
- map(0x06, 0x06).w(FUNC(mw8080bw_state::midway_tone_generator_hi_w));
+ map(0x05, 0x05).w("soundboard", FUNC(dplay_audio_device::tone_generator_lo_w));
+ map(0x06, 0x06).w("soundboard", FUNC(dplay_audio_device::tone_generator_hi_w));
}
static INPUT_PORTS_START( dplay )
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P1 Hit") PORT_PLAYER(1)
- PORT_BIT( 0x7e, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, dplay_pitch_left_input_r)
+ PORT_BIT( 0x7e, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(dplay_state, dplay_pitch_left_input_r)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
PORT_START("IN1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P2 Hit") PORT_PLAYER(2)
- PORT_BIT( 0x7e, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, dplay_pitch_right_input_r)
+ PORT_BIT( 0x7e, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(dplay_state, dplay_pitch_right_input_r)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
PORT_START("IN2")
@@ -1380,8 +1340,8 @@ static INPUT_PORTS_START( dplay )
PORT_DIPSETTING( 0x02, "2 Coins per Inning" )
PORT_DIPSETTING( 0x03, "2 Coins/1 Inning, 4 Coins/3 Innings" )
PORT_DIPSETTING( 0x00, "1 Coin per Inning" )
- /* PORT_DIPSETTING( 0x06, "1 Coin per Inning" ) */
- /* PORT_DIPSETTING( 0x07, "1 Coin per Inning" ) */
+ // PORT_DIPSETTING( 0x06, "1 Coin per Inning" )
+ // PORT_DIPSETTING( 0x07, "1 Coin per Inning" )
PORT_DIPSETTING( 0x01, "1 Coin/1 Inning, 2 Coins/3 Innings" )
PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unused ) ) PORT_CONDITION("IN2", 0x40, EQUALS, 0x40) PORT_DIPLOCATION("C1:4")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
@@ -1395,7 +1355,7 @@ static INPUT_PORTS_START( dplay )
PORT_SERVICE_DIPLOC( 0x40, IP_ACTIVE_LOW, "C1:7" )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
- /* fake ports to handle the various input configurations based on cabinet type */
+ // fake ports to handle the various input configurations based on cabinet type
PORT_START(DPLAY_L_PITCH_PORT_TAG)
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("P1 Move Outfield Left") PORT_PLAYER(1)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("P1 Move Outfield Right") PORT_PLAYER(1)
@@ -1414,27 +1374,24 @@ static INPUT_PORTS_START( dplay )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("P2 Pitch Fast") PORT_PLAYER(2)
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
- /* fake port for cabinet type */
+ // fake port for cabinet type
PORT_START(DPLAY_CAB_TYPE_PORT_TAG)
PORT_CONFNAME( 0x01, DPLAY_CAB_TYPE_UPRIGHT, DEF_STR( Cabinet ) )
PORT_CONFSETTING( DPLAY_CAB_TYPE_UPRIGHT, DEF_STR( Upright ) )
PORT_CONFSETTING( DPLAY_CAB_TYPE_COCKTAIL, DEF_STR( Cocktail ) )
PORT_BIT( 0xfe, IP_ACTIVE_HIGH, IPT_UNUSED )
-
- PORT_START("MUSIC_ADJ") /* 3 */
- PORT_ADJUSTER( 60, "Music Volume" )
INPUT_PORTS_END
static INPUT_PORTS_START( einning )
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P1 Hit") PORT_PLAYER(1)
- PORT_BIT( 0x7e, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, dplay_pitch_left_input_r)
+ PORT_BIT( 0x7e, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(dplay_state, dplay_pitch_left_input_r)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
PORT_START("IN1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P2 Hit") PORT_PLAYER(2)
- PORT_BIT( 0x7e, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, dplay_pitch_right_input_r)
+ PORT_BIT( 0x7e, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(dplay_state, dplay_pitch_right_input_r)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
PORT_START("IN2")
@@ -1444,8 +1401,8 @@ static INPUT_PORTS_START( einning )
PORT_DIPSETTING( 0x02, "2 Coins per Inning" )
PORT_DIPSETTING( 0x03, "2 Coins/1 Inning, 4 Coins/3 Innings" )
PORT_DIPSETTING( 0x00, "1 Coin per Inning" )
- /* PORT_DIPSETTING( 0x06, "1 Coin per Inning" ) */
- /* PORT_DIPSETTING( 0x07, "1 Coin per Inning" ) */
+ // PORT_DIPSETTING( 0x06, "1 Coin per Inning" )
+ // PORT_DIPSETTING( 0x07, "1 Coin per Inning" )
PORT_DIPSETTING( 0x01, "1 Coin/1 Inning, 2 Coins/3 Innings" )
PORT_DIPNAME( 0x08, 0x00, "Wall Knock Out Behavior" ) PORT_CONDITION("IN2", 0x40, EQUALS, 0x40) PORT_DIPLOCATION("C1:4")
PORT_DIPSETTING( 0x00, "Individually" )
@@ -1459,7 +1416,7 @@ static INPUT_PORTS_START( einning )
PORT_SERVICE_DIPLOC( 0x40, IP_ACTIVE_LOW, "C1:7" )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
- /* fake ports to handle the various input configurations based on cabinet type */
+ // fake ports to handle the various input configurations based on cabinet type
PORT_START(DPLAY_L_PITCH_PORT_TAG)
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("P1 Move Outfield Left") PORT_PLAYER(1)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("P1 Move Outfield Right") PORT_PLAYER(1)
@@ -1478,32 +1435,29 @@ static INPUT_PORTS_START( einning )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("P2 Pitch Fast") PORT_PLAYER(2)
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
- /* fake port for cabinet type */
+ // fake port for cabinet type
PORT_START(DPLAY_CAB_TYPE_PORT_TAG)
PORT_CONFNAME( 0x01, DPLAY_CAB_TYPE_UPRIGHT, DEF_STR( Cabinet ) )
PORT_CONFSETTING( DPLAY_CAB_TYPE_UPRIGHT, DEF_STR( Upright ) )
PORT_CONFSETTING( DPLAY_CAB_TYPE_COCKTAIL, DEF_STR( Cocktail ) )
PORT_BIT( 0xfe, IP_ACTIVE_HIGH, IPT_UNUSED )
-
- PORT_START("MUSIC_ADJ") /* 3 */
- PORT_ADJUSTER( 60, "Music Volume" )
INPUT_PORTS_END
-void mw8080bw_state::dplay(machine_config &config)
+void dplay_state::dplay(machine_config &config)
{
mw8080bw_root(config);
- /* basic machine hardware */
- m_maincpu->set_addrmap(AS_IO, &mw8080bw_state::dplay_io_map);
+ // basic machine hardware
+ m_maincpu->set_addrmap(AS_IO, &dplay_state::io_map);
WATCHDOG_TIMER(config, m_watchdog).set_time(255 * attotime::from_hz(MW8080BW_60HZ));
- /* add shifter */
+ // add shifter
MB14241(config, m_mb14241);
- /* audio hardware */
- dplay_audio(config);
+ // audio hardware
+ DPLAY_AUDIO(config, "soundboard");
}
@@ -1514,51 +1468,42 @@ void mw8080bw_state::dplay(machine_config &config)
*
*************************************/
-MACHINE_START_MEMBER(mw8080bw_state,gmissile)
-{
- /* setup for save states */
- save_item(NAME(m_rev_shift_res));
-
- MACHINE_START_CALL_MEMBER(mw8080bw);
-}
-
-
-void mw8080bw_state::gmissile_io_map(address_map &map)
+void boothill_state::gmissile_io_map(address_map &map)
{
map.global_mask(0x7);
map(0x00, 0x00).mirror(0x04).portr("IN0");
map(0x01, 0x01).mirror(0x04).portr("IN1");
map(0x02, 0x02).mirror(0x04).portr("IN2");
- map(0x03, 0x03).mirror(0x04).r(FUNC(mw8080bw_state::mw8080bw_reversable_shift_result_r));
+ map(0x03, 0x03).mirror(0x04).r(FUNC(boothill_state::reversible_shift_result_r));
- map(0x01, 0x01).w(FUNC(mw8080bw_state::mw8080bw_reversable_shift_count_w));
+ map(0x01, 0x01).w(FUNC(boothill_state::reversible_shift_count_w));
map(0x02, 0x02).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
- map(0x03, 0x03).w(FUNC(mw8080bw_state::gmissile_audio_1_w));
+ map(0x03, 0x03).w("soundboard", FUNC(gmissile_audio_device::p1_w));
map(0x04, 0x04).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
- map(0x05, 0x05).w(FUNC(mw8080bw_state::gmissile_audio_2_w));
- /* also writes 0x00 to 0x06, but it is not connected */
- map(0x07, 0x07).w(FUNC(mw8080bw_state::gmissile_audio_3_w));
+ map(0x05, 0x05).w("soundboard", FUNC(gmissile_audio_device::p2_w));
+ // also writes 0x00 to 0x06, but it is not connected
+ map(0x07, 0x07).w("soundboard", FUNC(gmissile_audio_device::p3_w));
}
static INPUT_PORTS_START( gmissile )
PORT_START("IN0")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) /* not connected */
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* not connected */
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) // not connected
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) // not connected
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) /* not connected */
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) /* not connected */
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) // not connected
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) // not connected
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_START("IN1")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) /* not connected */
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) // not connected
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) /* not connected */
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) /* not connected */
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) // not connected
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) // not connected
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
@@ -1585,22 +1530,20 @@ static INPUT_PORTS_START( gmissile )
INPUT_PORTS_END
-void mw8080bw_state::gmissile(machine_config &config)
+void boothill_state::gmissile(machine_config &config)
{
mw8080bw_root(config);
- /* basic machine hardware */
- m_maincpu->set_addrmap(AS_IO, &mw8080bw_state::gmissile_io_map);
-
- MCFG_MACHINE_START_OVERRIDE(mw8080bw_state,gmissile)
+ // basic machine hardware
+ m_maincpu->set_addrmap(AS_IO, &boothill_state::gmissile_io_map);
WATCHDOG_TIMER(config, m_watchdog).set_time(255 * attotime::from_hz(MW8080BW_60HZ));
- /* add shifter */
+ // add shifter
MB14241(config, m_mb14241);
- /* audio hardware */
- gmissile_audio(config);
+ // audio hardware
+ GMISSILE_AUDIO(config, "soundboard");
}
@@ -1611,41 +1554,32 @@ void mw8080bw_state::gmissile(machine_config &config)
*
*************************************/
-MACHINE_START_MEMBER(mw8080bw_state,m4)
-{
- /* setup for save states */
- save_item(NAME(m_rev_shift_res));
-
- MACHINE_START_CALL_MEMBER(mw8080bw);
-}
-
-
-void mw8080bw_state::m4_io_map(address_map &map)
+void boothill_state::m4_io_map(address_map &map)
{
map.global_mask(0x7);
map(0x00, 0x00).mirror(0x04).portr("IN0");
map(0x01, 0x01).mirror(0x04).portr("IN1");
map(0x02, 0x02).mirror(0x04).portr("IN2");
- map(0x03, 0x03).mirror(0x04).r(FUNC(mw8080bw_state::mw8080bw_reversable_shift_result_r));
+ map(0x03, 0x03).mirror(0x04).r(FUNC(boothill_state::reversible_shift_result_r));
- map(0x01, 0x01).w(FUNC(mw8080bw_state::mw8080bw_reversable_shift_count_w));
+ map(0x01, 0x01).w(FUNC(boothill_state::reversible_shift_count_w));
map(0x02, 0x02).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
- map(0x03, 0x03).w(FUNC(mw8080bw_state::m4_audio_1_w));
+ map(0x03, 0x03).w("soundboard", FUNC(m4_audio_device::p1_w));
map(0x04, 0x04).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
- map(0x05, 0x05).w(FUNC(mw8080bw_state::m4_audio_2_w));
+ map(0x05, 0x05).w("soundboard", FUNC(m4_audio_device::p2_w));
}
static INPUT_PORTS_START( m4 )
PORT_START("IN0")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) /* not connected */
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) // not connected
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_2WAY PORT_PLAYER(2)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* not connected */
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) // not connected
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_2WAY PORT_PLAYER(2)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P2 Trigger") PORT_PLAYER(2)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("P2 Reload") PORT_PLAYER(2)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) /* not connected */
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) /* not connected */
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) // not connected
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) // not connected
PORT_START("IN1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
@@ -1655,7 +1589,7 @@ static INPUT_PORTS_START( m4 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P1 Trigger") PORT_PLAYER(1)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("P1 Reload") PORT_PLAYER(1)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) /* not connected */
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) // not connected
PORT_START("IN2")
PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coinage ) ) PORT_CONDITION("IN2", 0x10, EQUALS, 0x10) PORT_DIPLOCATION("C1:1,2")
@@ -1680,22 +1614,20 @@ static INPUT_PORTS_START( m4 )
INPUT_PORTS_END
-void mw8080bw_state::m4(machine_config &config)
+void boothill_state::m4(machine_config &config)
{
mw8080bw_root(config);
- /* basic machine hardware */
- m_maincpu->set_addrmap(AS_IO, &mw8080bw_state::m4_io_map);
-
- MCFG_MACHINE_START_OVERRIDE(mw8080bw_state,m4)
+ // basic machine hardware
+ m_maincpu->set_addrmap(AS_IO, &boothill_state::m4_io_map);
WATCHDOG_TIMER(config, m_watchdog).set_time(255 * attotime::from_hz(MW8080BW_60HZ));
- /* add shifter */
+ // add shifter
MB14241(config, m_mb14241);
- /* audio hardware */
- m4_audio(config);
+ // audio hardware
+ M4_AUDIO(config, "soundboard");
}
@@ -1710,33 +1642,23 @@ void mw8080bw_state::m4(machine_config &config)
#define CLOWNS_CONTROLLER_P2_TAG ("CONTP2")
-MACHINE_START_MEMBER(mw8080bw_state,clowns)
+void clowns_state::machine_start()
{
- /* setup for save states */
- save_item(NAME(m_clowns_controller_select));
+ mw8080bw_state::machine_start();
- MACHINE_START_CALL_MEMBER(mw8080bw);
+ m_controller_select = 0U;
+
+ save_item(NAME(m_controller_select));
}
-CUSTOM_INPUT_MEMBER(mw8080bw_state::clowns_controller_r)
+CUSTOM_INPUT_MEMBER(clowns_state::controller_r)
{
- uint32_t ret;
-
- if (m_clowns_controller_select)
- {
- ret = ioport(CLOWNS_CONTROLLER_P2_TAG)->read();
- }
- else
- {
- ret = ioport(CLOWNS_CONTROLLER_P1_TAG)->read();
- }
-
- return ret;
+ return m_controllers[m_controller_select]->read();
}
-void mw8080bw_state::clowns_io_map(address_map &map)
+void clowns_state::clowns_io_map(address_map &map)
{
map.global_mask(0x7);
map(0x00, 0x00).mirror(0x04).portr("IN0");
@@ -1746,27 +1668,27 @@ void mw8080bw_state::clowns_io_map(address_map &map)
map(0x01, 0x01).w(m_mb14241, FUNC(mb14241_device::shift_count_w));
map(0x02, 0x02).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
- map(0x03, 0x03).w(FUNC(mw8080bw_state::clowns_audio_1_w));
+ map(0x03, 0x03).w("soundboard", FUNC(clowns_audio_device::p1_w));
map(0x04, 0x04).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
- map(0x05, 0x05).w(FUNC(mw8080bw_state::midway_tone_generator_lo_w));
- map(0x06, 0x06).w(FUNC(mw8080bw_state::midway_tone_generator_hi_w));
- map(0x07, 0x07).w(FUNC(mw8080bw_state::clowns_audio_2_w));
+ map(0x05, 0x05).w("soundboard", FUNC(clowns_audio_device::tone_generator_lo_w));
+ map(0x06, 0x06).w("soundboard", FUNC(clowns_audio_device::tone_generator_hi_w));
+ map(0x07, 0x07).w("soundboard", FUNC(clowns_audio_device::p2_w));
}
static INPUT_PORTS_START( clowns )
PORT_START("IN0")
- PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, clowns_controller_r)
+ PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(clowns_state, controller_r)
PORT_START("IN1")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) /* not connected */
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* not connected */
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* not connected */
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) /* not connected */
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) // not connected
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) // not connected
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) // not connected
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) // not connected
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) /* not connected */
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) // not connected
PORT_START("IN2")
PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coinage ) ) PORT_CONDITION("IN2", 0x80, EQUALS, 0x00) PORT_DIPLOCATION("SW:1,2")
@@ -1788,24 +1710,21 @@ static INPUT_PORTS_START( clowns )
PORT_DIPNAME( 0x40, 0x00, DEF_STR( Lives ) ) PORT_CONDITION("IN2", 0x80, EQUALS, 0x00) PORT_DIPLOCATION("SW:7")
PORT_DIPSETTING( 0x00, "3" )
PORT_DIPSETTING( 0x40, "4" )
- /* test mode - press coin button for input test */
+ // test mode - press coin button for input test
PORT_SERVICE_DIPLOC( 0x80, IP_ACTIVE_HIGH, "SW:8" )
- /* fake ports for two analog controls multiplexed */
+ // fake ports for two analog controls multiplexed
PORT_START(CLOWNS_CONTROLLER_P1_TAG)
PORT_BIT( 0xff, 0x7f, IPT_PADDLE ) PORT_MINMAX(0x01,0xfe) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_CENTERDELTA(0) PORT_PLAYER(1)
PORT_START(CLOWNS_CONTROLLER_P2_TAG)
PORT_BIT( 0xff, 0x7f, IPT_PADDLE ) PORT_MINMAX(0x01,0xfe) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_CENTERDELTA(0) PORT_PLAYER(2)
-
- PORT_START("R507")
- PORT_ADJUSTER( 40, "R507 - Music Volume" )
INPUT_PORTS_END
static INPUT_PORTS_START( clowns1 )
PORT_START("IN0")
- PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, clowns_controller_r)
+ PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(clowns_state, controller_r)
PORT_START("IN1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
@@ -1844,28 +1763,23 @@ static INPUT_PORTS_START( clowns1 )
PORT_START(CLOWNS_CONTROLLER_P2_TAG)
PORT_BIT( 0xff, 0x7f, IPT_PADDLE ) PORT_MINMAX(0x01,0xfe) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_CENTERDELTA(0) PORT_PLAYER(2)
-
- PORT_START("R507")
- PORT_ADJUSTER( 40, "R507 - Music Volume" )
INPUT_PORTS_END
-void mw8080bw_state::clowns(machine_config &config)
+void clowns_state::clowns(machine_config &config)
{
mw8080bw_root(config);
- /* basic machine hardware */
- m_maincpu->set_addrmap(AS_IO, &mw8080bw_state::clowns_io_map);
-
- MCFG_MACHINE_START_OVERRIDE(mw8080bw_state,clowns)
+ // basic machine hardware
+ m_maincpu->set_addrmap(AS_IO, &clowns_state::clowns_io_map);
WATCHDOG_TIMER(config, m_watchdog).set_time(255 * attotime::from_hz(MW8080BW_60HZ));
- /* add shifter */
+ // add shifter
MB14241(config, m_mb14241);
- /* audio hardware */
- clowns_audio(config);
+ // audio hardware
+ CLOWNS_AUDIO(config, "soundboard").ctrl_sel_out().set([this] (int state) { m_controller_select = state ? 1U : 0U; });
}
@@ -1876,7 +1790,7 @@ void mw8080bw_state::clowns(machine_config &config)
*
*************************************/
-void mw8080bw_state::spacwalk_io_map(address_map &map)
+void clowns_state::spacwalk_io_map(address_map &map)
{
map.global_mask(0x7);
@@ -1887,16 +1801,16 @@ void mw8080bw_state::spacwalk_io_map(address_map &map)
map(0x01, 0x01).w(m_mb14241, FUNC(mb14241_device::shift_count_w));
map(0x02, 0x02).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
- map(0x03, 0x03).w(FUNC(mw8080bw_state::spacwalk_audio_1_w));
+ map(0x03, 0x03).w("soundboard", FUNC(spacwalk_audio_device::p1_w));
map(0x04, 0x04).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
- map(0x05, 0x05).w(FUNC(mw8080bw_state::midway_tone_generator_lo_w));
- map(0x06, 0x06).w(FUNC(mw8080bw_state::midway_tone_generator_hi_w));
- map(0x07, 0x07).w(FUNC(mw8080bw_state::spacwalk_audio_2_w));
+ map(0x05, 0x05).w("soundboard", FUNC(spacwalk_audio_device::tone_generator_lo_w));
+ map(0x06, 0x06).w("soundboard", FUNC(spacwalk_audio_device::tone_generator_hi_w));
+ map(0x07, 0x07).w("soundboard", FUNC(spacwalk_audio_device::p2_w));
}
static INPUT_PORTS_START( spacwalk )
PORT_START("IN0")
- PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, clowns_controller_r)
+ PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(clowns_state, controller_r)
PORT_START("IN1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
@@ -1908,7 +1822,7 @@ static INPUT_PORTS_START( spacwalk )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
- /* 8 pin DIP Switch on location C2 on PCB A084-90700-D640 */
+ // 8 pin DIP Switch on location C2 on PCB A084-90700-D640
/* PCB picture also shows a 2nd DIP Switch on location B2, supposedly for language selection,
but ROM contents suggests it's not connected (no different languages or unmapped reads) */
PORT_START("IN2")
@@ -1936,33 +1850,28 @@ static INPUT_PORTS_START( spacwalk )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_SERVICE_DIPLOC(0x80, IP_ACTIVE_HIGH, "C2:8" ) // RAM-ROM Test
- /* fake ports for two analog controls multiplexed */
+ // fake ports for two analog controls multiplexed
PORT_START(CLOWNS_CONTROLLER_P1_TAG)
PORT_BIT( 0xff, 0x7f, IPT_PADDLE ) PORT_MINMAX(0x01,0xfe) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_CENTERDELTA(0) PORT_PLAYER(1)
PORT_START(CLOWNS_CONTROLLER_P2_TAG)
PORT_BIT( 0xff, 0x7f, IPT_PADDLE ) PORT_MINMAX(0x01,0xfe) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_CENTERDELTA(0) PORT_PLAYER(2)
-
- PORT_START("R507")
- PORT_ADJUSTER( 40, "R507 - Music Volume" )
INPUT_PORTS_END
-void mw8080bw_state::spacwalk(machine_config &config)
+void clowns_state::spacwalk(machine_config &config)
{
mw8080bw_root(config);
- /* basic machine hardware */
- m_maincpu->set_addrmap(AS_IO, &mw8080bw_state::spacwalk_io_map);
-
- MCFG_MACHINE_START_OVERRIDE(mw8080bw_state,clowns)
+ // basic machine hardware
+ m_maincpu->set_addrmap(AS_IO, &clowns_state::spacwalk_io_map);
WATCHDOG_TIMER(config, m_watchdog).set_time(255 * attotime::from_hz(MW8080BW_60HZ));
- /* add shifter */
+ // add shifter
MB14241(config, m_mb14241);
- /* audio hardware */
- spacwalk_audio(config);
+ // audio hardware
+ SPACWALK_AUDIO(config, "soundboard").ctrl_sel_out().set([this] (int state) { m_controller_select = state ? 1U : 0U; });
}
@@ -2065,10 +1974,10 @@ void mw8080bw_state::dogpatch_io_map(address_map &map)
map(0x01, 0x01).w(m_mb14241, FUNC(mb14241_device::shift_count_w));
map(0x02, 0x02).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
- map(0x03, 0x03).w(FUNC(mw8080bw_state::dogpatch_audio_w));
+ map(0x03, 0x03).w("soundboard", FUNC(dogpatch_audio_device::write));
map(0x04, 0x04).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
- map(0x05, 0x05).w(FUNC(mw8080bw_state::midway_tone_generator_lo_w));
- map(0x06, 0x06).w(FUNC(mw8080bw_state::midway_tone_generator_hi_w));
+ map(0x05, 0x05).w("soundboard", FUNC(dogpatch_audio_device::tone_generator_lo_w));
+ map(0x06, 0x06).w("soundboard", FUNC(dogpatch_audio_device::tone_generator_hi_w));
}
@@ -2122,16 +2031,16 @@ void mw8080bw_state::dogpatch(machine_config &config)
{
mw8080bw_root(config);
- /* basic machine hardware */
+ // basic machine hardware
m_maincpu->set_addrmap(AS_IO, &mw8080bw_state::dogpatch_io_map);
WATCHDOG_TIMER(config, m_watchdog).set_time(255 * attotime::from_hz(MW8080BW_60HZ));
- /* add shifter */
+ // add shifter
MB14241(config, m_mb14241);
- /* audio hardware */
- dogpatch_audio(config);
+ // audio hardware
+ DOGPATCH_AUDIO(config, "soundboard");
}
@@ -2142,70 +2051,55 @@ void mw8080bw_state::dogpatch(machine_config &config)
*
*************************************/
-#define SPCENCTR_STROBE_FREQ (9.00) /* Hz - calculated from the 555 timer */
-#define SPCENCTR_STROBE_DUTY_CYCLE (95.0) /* % */
-
-
-TIMER_DEVICE_CALLBACK_MEMBER(mw8080bw_state::spcenctr_strobe_timer_callback)
+void spcenctr_state::machine_start()
{
- output().set_value("STROBE", param && m_spcenctr_strobe_state);
-}
+ mw8080bw_state::machine_start();
+ m_trench_width = 0U;
+ m_trench_center = 0U;
+ std::fill(std::begin(m_trench_slope), std::end(m_trench_slope), 0U);
+ m_bright_control = 0U;
+ m_brightness = 0U;
-MACHINE_START_MEMBER(mw8080bw_state,spcenctr)
-{
- /* setup for save states */
- save_item(NAME(m_spcenctr_strobe_state));
- save_item(NAME(m_spcenctr_trench_width));
- save_item(NAME(m_spcenctr_trench_center));
- save_item(NAME(m_spcenctr_trench_slope));
- save_item(NAME(m_spcenctr_bright_control));
- save_item(NAME(m_spcenctr_brightness));
-
- MACHINE_START_CALL_MEMBER(mw8080bw);
+ save_item(NAME(m_trench_width));
+ save_item(NAME(m_trench_center));
+ save_item(NAME(m_trench_slope));
+ save_item(NAME(m_bright_control));
+ save_item(NAME(m_brightness));
}
-WRITE8_MEMBER(mw8080bw_state::spcenctr_io_w)
-{ /* A7 A6 A5 A4 A3 A2 A1 A0 */
-
- if ((offset & 0x07) == 0x02)
- m_watchdog->watchdog_reset(); /* - - - - - 0 1 0 */
-
+void spcenctr_state::io_w(offs_t offset, u8 data)
+{ // A7 A6 A5 A4 A3 A2 A1 A0
+ if ((offset & 0x07) == 0x00)
+ // hex flip-flop B5
+ // bit 3: /BRITE
+ // bit 2: /NO_PLANET
+ // bit 1: /SET_WSL
+ // bit 0: COIN_COUNTER
+ m_bright_control = BIT(~data, 3); // - - - - - 0 0 0
else if ((offset & 0x5f) == 0x01)
- spcenctr_audio_1_w(space, 0, data); /* - 0 - 0 0 0 0 1 */
-
+ m_soundboard->p1_w(data); // - 0 - 0 0 0 0 1
else if ((offset & 0x5f) == 0x09)
- spcenctr_audio_2_w(space, 0, data); /* - 0 - 0 1 0 0 1 */
-
+ m_soundboard->p2_w(data); // - 0 - 0 1 0 0 1
else if ((offset & 0x5f) == 0x11)
- spcenctr_audio_3_w(space, 0, data); /* - 0 - 1 0 0 0 1 */
-
+ m_soundboard->p3_w(data); // - 0 - 1 0 0 0 1
+ else if ((offset & 0x07) == 0x02)
+ m_watchdog->watchdog_reset(); // - - - - - 0 1 0
else if ((offset & 0x07) == 0x03)
- { /* - - - - - 0 1 1 */
- uint8_t addr = ((offset & 0xc0) >> 4) | ((offset & 0x18) >> 3);
- m_spcenctr_trench_slope[addr] = data;
+ { // - - - - - 0 1 1
+ m_trench_slope[bitswap<4>(offset, 7, 6, 4, 3)] = data;
}
else if ((offset & 0x07) == 0x04)
- m_spcenctr_trench_center = data; /* - - - - - 1 0 0 */
-
+ m_trench_center = data; // - - - - - 1 0 0
else if ((offset & 0x07) == 0x07)
- m_spcenctr_trench_width = data; /* - - - - - 1 1 1 */
-
- else if ((offset & 0x07) == 0x00)
- // hex flip-flop B5
- // bit 3: /BRITE
- // bit 2: /NO_PLANET
- // bit 1: /SET_WSL
- // bit 0: COIN_COUNTER
- m_spcenctr_bright_control = ~data & 0x08; /* - - - - - 0 0 0 */
-
+ m_trench_width = data; // - - - - - 1 1 1
else
- logerror("%04x: Unmapped I/O port write to %02x = %02x\n", m_maincpu->pc(), offset, data);
+ logerror("%s: Unmapped I/O port write to %02x = %02x\n", machine().describe_context(), offset, data);
}
-void mw8080bw_state::spcenctr_io_map(address_map &map)
+void spcenctr_state::io_map(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x00).mirror(0xfc).portr("IN0");
@@ -2213,8 +2107,7 @@ void mw8080bw_state::spcenctr_io_map(address_map &map)
map(0x02, 0x02).mirror(0xfc).portr("IN2");
map(0x03, 0x03).mirror(0xfc).nopr();
- /* complicated addressing logic */
- map(0x00, 0xff).w(FUNC(mw8080bw_state::spcenctr_io_w));
+ map(0x00, 0xff).w(FUNC(spcenctr_state::io_w)); // complicated addressing logic
}
@@ -2268,32 +2161,20 @@ static INPUT_PORTS_START( spcenctr )
INPUT_PORTS_END
-void mw8080bw_state::spcenctr(machine_config &config)
+void spcenctr_state::spcenctr(machine_config &config)
{
mw8080bw_root(config);
- /* basic machine hardware */
- m_maincpu->set_addrmap(AS_IO, &mw8080bw_state::spcenctr_io_map);
-
- MCFG_MACHINE_START_OVERRIDE(mw8080bw_state,spcenctr)
+ // basic machine hardware
+ m_maincpu->set_addrmap(AS_IO, &spcenctr_state::io_map);
WATCHDOG_TIMER(config, m_watchdog).set_time(255 * attotime::from_hz(MW8080BW_60HZ));
- /* timers */
- timer_device &strobeon(TIMER(config, "strobeon"));
- strobeon.configure_periodic(FUNC(mw8080bw_state::spcenctr_strobe_timer_callback), attotime::from_hz(SPCENCTR_STROBE_FREQ));
- strobeon.config_param(true); /* indicates strobe ON */
-
- timer_device &strobeoff(TIMER(config, "strobeoff"));
- strobeoff.configure_periodic(FUNC(mw8080bw_state::spcenctr_strobe_timer_callback), attotime::from_hz(SPCENCTR_STROBE_FREQ));
- strobeoff.set_start_delay(attotime::from_hz(SPCENCTR_STROBE_FREQ) * (100 - SPCENCTR_STROBE_DUTY_CYCLE) / 100);
- strobeoff.config_param(false); /* indicates strobe OFF */
-
- /* video hardware */
- m_screen->set_screen_update(FUNC(mw8080bw_state::screen_update_spcenctr));
+ // video hardware
+ m_screen->set_screen_update(FUNC(spcenctr_state::screen_update));
- /* audio hardware */
- spcenctr_audio(config);
+ // audio hardware
+ SPCENCTR_AUDIO(config, m_soundboard);
}
@@ -2307,10 +2188,10 @@ void mw8080bw_state::spcenctr(machine_config &config)
MACHINE_START_MEMBER(mw8080bw_state,phantom2)
{
+ mw8080bw_state::machine_start();
+
/* setup for save states */
save_item(NAME(m_phantom2_cloud_counter));
-
- MACHINE_START_CALL_MEMBER(mw8080bw);
}
@@ -2325,8 +2206,8 @@ void mw8080bw_state::phantom2_io_map(address_map &map)
map(0x01, 0x01).w(m_mb14241, FUNC(mb14241_device::shift_count_w));
map(0x02, 0x02).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
map(0x04, 0x04).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
- map(0x05, 0x05).w(FUNC(mw8080bw_state::phantom2_audio_1_w));
- map(0x06, 0x06).w(FUNC(mw8080bw_state::phantom2_audio_2_w));
+ map(0x05, 0x05).w("soundboard", FUNC(phantom2_audio_device::p1_w));
+ map(0x06, 0x06).w("soundboard", FUNC(phantom2_audio_device::p2_w));
}
@@ -2385,7 +2266,7 @@ void mw8080bw_state::phantom2(machine_config &config)
MB14241(config, m_mb14241);
/* audio hardware */
- phantom2_audio(config);
+ PHANTOM2_AUDIO(config, "soundboard");
}
@@ -2402,7 +2283,7 @@ READ8_MEMBER(mw8080bw_state::bowler_shift_result_r)
anything unusual on the schematics that would cause
the bits to flip */
- return ~m_mb14241->shift_result_r(space, 0);
+ return ~m_mb14241->shift_result_r();
}
WRITE8_MEMBER(mw8080bw_state::bowler_lights_1_w)
@@ -2533,70 +2414,48 @@ void mw8080bw_state::bowler(machine_config &config)
MACHINE_START_MEMBER(mw8080bw_state,invaders)
{
- /* setup for save states */
- save_item(NAME(m_flip_screen));
-
- MACHINE_START_CALL_MEMBER(mw8080bw);
-}
+ mw8080bw_state::machine_start();
+ m_flip_screen = 0U;
-
-CUSTOM_INPUT_MEMBER(mw8080bw_state::invaders_coin_input_r)
-{
- uint32_t ret = ioport(INVADERS_COIN_INPUT_PORT_TAG)->read();
-
- // FIXME: use PORT_CHANGED_MEMBER or PORT_WRITE_LINE_MEMBER instead of updating here
- machine().bookkeeping().coin_counter_w(0, !ret);
-
- return ret;
+ save_item(NAME(m_flip_screen));
}
+
CUSTOM_INPUT_MEMBER(mw8080bw_state::invaders_sw6_sw7_r)
{
- uint32_t ret;
-
- /* upright PCB : switches visible
- cocktail PCB: HI */
+ // upright PCB : switches visible
+ // cocktail PCB: HI
if (invaders_is_cabinet_cocktail())
- ret = 0x03;
+ return 0x03;
else
- ret = ioport(INVADERS_SW6_SW7_PORT_TAG)->read();
-
- return ret;
+ return ioport(INVADERS_SW6_SW7_PORT_TAG)->read();
}
CUSTOM_INPUT_MEMBER(mw8080bw_state::invaders_sw5_r)
{
- uint32_t ret;
-
- /* upright PCB : switch visible
- cocktail PCB: HI */
+ // upright PCB : switch visible
+ // cocktail PCB: HI
if (invaders_is_cabinet_cocktail())
- ret = 0x01;
+ return 0x01;
else
- ret = ioport(INVADERS_SW5_PORT_TAG)->read();
-
- return ret;
+ return ioport(INVADERS_SW5_PORT_TAG)->read();
}
CUSTOM_INPUT_MEMBER(mw8080bw_state::invaders_in0_control_r)
{
- uint32_t ret;
-
- /* upright PCB : P1 controls
- cocktail PCB: HI */
+ // upright PCB : P1 controls
+ // cocktail PCB: HI
if (invaders_is_cabinet_cocktail())
- ret = 0x07;
+ return 0x07;
else
- ret = ioport(INVADERS_P1_CONTROL_PORT_TAG)->read();
-
- return ret;
+ return ioport(INVADERS_P1_CONTROL_PORT_TAG)->read();
}
@@ -2608,17 +2467,13 @@ CUSTOM_INPUT_MEMBER(mw8080bw_state::invaders_in1_control_r)
CUSTOM_INPUT_MEMBER(mw8080bw_state::invaders_in2_control_r)
{
- uint32_t ret;
-
- /* upright PCB : P1 controls
- cocktail PCB: P2 controls */
+ // upright PCB : P1 controls
+ // cocktail PCB: P2 controls
if (invaders_is_cabinet_cocktail())
- ret = ioport(INVADERS_P2_CONTROL_PORT_TAG)->read();
+ return ioport(INVADERS_P2_CONTROL_PORT_TAG)->read();
else
- ret = ioport(INVADERS_P1_CONTROL_PORT_TAG)->read();
-
- return ret;
+ return ioport(INVADERS_P1_CONTROL_PORT_TAG)->read();
}
@@ -2637,9 +2492,9 @@ void mw8080bw_state::invaders_io_map(address_map &map)
map(0x03, 0x03).mirror(0x04).r(m_mb14241, FUNC(mb14241_device::shift_result_r));
map(0x02, 0x02).w(m_mb14241, FUNC(mb14241_device::shift_count_w));
- map(0x03, 0x03).w(FUNC(mw8080bw_state::invaders_audio_1_w));
+ map(0x03, 0x03).w("soundboard", FUNC(invaders_audio_device::p1_w));
map(0x04, 0x04).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
- map(0x05, 0x05).w(FUNC(mw8080bw_state::invaders_audio_2_w));
+ map(0x05, 0x05).w("soundboard", FUNC(invaders_audio_device::p2_w));
map(0x06, 0x06).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
}
@@ -2655,7 +2510,7 @@ static INPUT_PORTS_START( invaders )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, invaders_sw5_r)
PORT_START("IN1")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, invaders_coin_input_r)
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, mw8080bw_state, direct_coin_count, 0)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
@@ -2677,11 +2532,6 @@ static INPUT_PORTS_START( invaders )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- /* fake port for reading the coin input */
- PORT_START(INVADERS_COIN_INPUT_PORT_TAG)
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0xfe, IP_ACTIVE_HIGH, IPT_UNUSED )
-
/* fake port for cabinet type */
PORT_START(INVADERS_CAB_TYPE_PORT_TAG)
PORT_CONFNAME( 0x01, 0x00, DEF_STR( Cabinet ) )
@@ -2723,21 +2573,22 @@ void mw8080bw_state::invaders(machine_config &config)
{
mw8080bw_root(config);
- /* basic machine hardware */
+ // basic machine hardware
m_maincpu->set_addrmap(AS_IO, &mw8080bw_state::invaders_io_map);
MCFG_MACHINE_START_OVERRIDE(mw8080bw_state,invaders)
WATCHDOG_TIMER(config, m_watchdog).set_time(255 * attotime::from_hz(MW8080BW_60HZ));
- /* video hardware */
+ // video hardware
m_screen->set_screen_update(FUNC(mw8080bw_state::screen_update_invaders));
- /* add shifter */
+ // add shifter
MB14241(config, m_mb14241);
- /* audio hardware */
- invaders_audio(config);
+ // audio hardware
+ INVADERS_AUDIO(config, "soundboard"). // the flip screen line is only connected on the cocktail PCB
+ flip_screen_out().set([this] (int state) { if (invaders_is_cabinet_cocktail()) m_flip_screen = state ? 1 : 0; });
}
@@ -2829,21 +2680,6 @@ void mw8080bw_state::blueshrk(machine_config &config)
*
*************************************/
-#define INVAD2CT_COIN_INPUT_PORT_TAG ("COIN")
-
-
-#ifdef UNUSED_FUNCTION
-uint32_t mw8080bw_state::invad2ct_coin_input_r(void *param)
-{
- uint32_t ret = ioport(INVAD2CT_COIN_INPUT_PORT_TAG)->read();
-
- coin_counter_w(machine, 0, !ret);
-
- return ret;
-}
-#endif
-
-
void mw8080bw_state::invad2ct_io_map(address_map &map)
{
map.global_mask(0x7);
@@ -2852,13 +2688,13 @@ void mw8080bw_state::invad2ct_io_map(address_map &map)
map(0x02, 0x02).mirror(0x04).portr("IN2");
map(0x03, 0x03).mirror(0x04).r(m_mb14241, FUNC(mb14241_device::shift_result_r));
- map(0x01, 0x01).w(FUNC(mw8080bw_state::invad2ct_audio_3_w));
+ map(0x01, 0x01).w("soundboard", FUNC(invad2ct_audio_device::p3_w));
map(0x02, 0x02).w(m_mb14241, FUNC(mb14241_device::shift_count_w));
- map(0x03, 0x03).w(FUNC(mw8080bw_state::invad2ct_audio_1_w));
+ map(0x03, 0x03).w("soundboard", FUNC(invad2ct_audio_device::p1_w));
map(0x04, 0x04).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
- map(0x05, 0x05).w(FUNC(mw8080bw_state::invad2ct_audio_2_w));
+ map(0x05, 0x05).w("soundboard", FUNC(invad2ct_audio_device::p2_w));
map(0x06, 0x06).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
- map(0x07, 0x07).w(FUNC(mw8080bw_state::invad2ct_audio_4_w));
+ map(0x07, 0x07).w("soundboard", FUNC(invad2ct_audio_device::p4_w));
}
@@ -2874,7 +2710,7 @@ static INPUT_PORTS_START( invad2ct )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("IN1")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, invaders_coin_input_r)
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, mw8080bw_state, direct_coin_count, 0)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
@@ -2899,11 +2735,6 @@ static INPUT_PORTS_START( invad2ct )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW:1")
PORT_DIPSETTING( 0x80, "1500" )
PORT_DIPSETTING( 0x00, "2000" )
-
- /* fake port for reading the coin input */
- PORT_START(INVAD2CT_COIN_INPUT_PORT_TAG)
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0xfe, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
@@ -2911,16 +2742,16 @@ void mw8080bw_state::invad2ct(machine_config &config)
{
mw8080bw_root(config);
- /* basic machine hardware */
+ // basic machine hardware
m_maincpu->set_addrmap(AS_IO, &mw8080bw_state::invad2ct_io_map);
WATCHDOG_TIMER(config, m_watchdog).set_time(255 * attotime::from_hz(MW8080BW_60HZ));
- /* add shifter */
+ // add shifter
MB14241(config, m_mb14241);
- /* audio hardware */
- invad2ct_audio(config);
+ // audio hardware
+ INVAD2CT_AUDIO(config, "soundboard");
}
@@ -3244,31 +3075,31 @@ ROM_END
*
*************************************/
-/* PCB # year rom parent machine inp init monitor,company,fullname,flags */
+// PCB # year rom parent machine inp state init monitor company,fullname,flags
-/* 596 */ GAMEL( 1976, seawolf, 0, seawolf, seawolf, mw8080bw_state, empty_init, ROT0, "Dave Nutting Associates / Midway", "Sea Wolf (set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_seawolf )
-/* 596 */ GAMEL( 1976, seawolfo, seawolf, seawolf, seawolf, mw8080bw_state, empty_init, ROT0, "Dave Nutting Associates / Midway", "Sea Wolf (set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_seawolf )
-/* 597 */ GAMEL( 1975, gunfight, 0, gunfight, gunfight, mw8080bw_state, empty_init, ROT0, "Dave Nutting Associates / Midway", "Gun Fight (set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_gunfight )
-/* 597 */ GAMEL( 1975, gunfighto, gunfight, gunfight, gunfight, mw8080bw_state, empty_init, ROT0, "Dave Nutting Associates / Midway", "Gun Fight (set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_gunfight )
+/* 596 */ GAMEL( 1976, seawolf, 0, seawolf, seawolf, seawolf_state, empty_init, ROT0, "Dave Nutting Associates / Midway", "Sea Wolf (set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_seawolf )
+/* 596 */ GAMEL( 1976, seawolfo, seawolf, seawolf, seawolf, seawolf_state, empty_init, ROT0, "Dave Nutting Associates / Midway", "Sea Wolf (set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_seawolf )
+/* 597 */ GAMEL( 1975, gunfight, 0, gunfight, gunfight, gunfight_state, empty_init, ROT0, "Dave Nutting Associates / Midway", "Gun Fight (set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_gunfight )
+/* 597 */ GAMEL( 1975, gunfighto, gunfight, gunfight, gunfight, gunfight_state, empty_init, ROT0, "Dave Nutting Associates / Midway", "Gun Fight (set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_gunfight )
/* 604 Gun Fight (cocktail, dump does not exist) */
/* 605 */ GAME( 1976, tornbase, 0, tornbase, tornbase, mw8080bw_state, empty_init, ROT0, "Dave Nutting Associates / Midway / Taito", "Tornado Baseball / Ball Park", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
/* 610 */ GAMEL( 1976, 280zzzap, 0, zzzap, zzzap, mw8080bw_state, empty_init, ROT0, "Dave Nutting Associates / Midway", "280-ZZZAP", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE, layout_280zzzap )
/* 611 */ GAMEL( 1976, maze, 0, maze, maze, mw8080bw_state, empty_init, ROT0, "Midway", "Amazing Maze", MACHINE_SUPPORTS_SAVE, layout_maze )
-/* 612 */ GAME( 1977, boothill, 0, boothill, boothill, mw8080bw_state, empty_init, ROT0, "Dave Nutting Associates / Midway", "Boot Hill", MACHINE_SUPPORTS_SAVE )
+/* 612 */ GAME( 1977, boothill, 0, boothill, boothill, boothill_state, empty_init, ROT0, "Dave Nutting Associates / Midway", "Boot Hill", MACHINE_SUPPORTS_SAVE )
/* 615 */ GAME( 1977, checkmat, 0, checkmat, checkmat, mw8080bw_state, empty_init, ROT0, "Dave Nutting Associates / Midway", "Checkmate", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-/* 618 */ GAME( 1977, desertgu, 0, desertgu, desertgu, mw8080bw_state, empty_init, ROT0, "Dave Nutting Associates / Midway", "Desert Gun", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-/* 618 */ GAME( 1977, roadrunm, desertgu, desertgu, desertgu, mw8080bw_state, empty_init, ROT0, "Midway", "Road Runner (Midway)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-/* 619 */ GAME( 1977, dplay, 0, dplay, dplay, mw8080bw_state, empty_init, ROT0, "Midway", "Double Play", MACHINE_SUPPORTS_SAVE )
+/* 618 */ GAME( 1977, desertgu, 0, desertgu, desertgu, desertgu_state, empty_init, ROT0, "Dave Nutting Associates / Midway", "Desert Gun", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+/* 618 */ GAME( 1977, roadrunm, desertgu, desertgu, desertgu, desertgu_state, empty_init, ROT0, "Midway", "Road Runner (Midway)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+/* 619 */ GAME( 1977, dplay, 0, dplay, dplay, dplay_state, empty_init, ROT0, "Midway", "Double Play", MACHINE_SUPPORTS_SAVE )
/* 622 */ GAMEL( 1977, lagunar, 0, zzzap, lagunar, mw8080bw_state, empty_init, ROT90, "Midway", "Laguna Racer", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE, layout_lagunar )
-/* 623 */ GAME( 1977, gmissile, 0, gmissile, gmissile, mw8080bw_state, empty_init, ROT0, "Midway", "Guided Missile", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-/* 626 */ GAME( 1977, m4, 0, m4, m4, mw8080bw_state, empty_init, ROT0, "Midway", "M-4", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-/* 630 */ GAMEL( 1978, clowns, 0, clowns, clowns, mw8080bw_state, empty_init, ROT0, "Midway", "Clowns (rev. 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_clowns )
-/* 630 */ GAMEL( 1978, clowns1, clowns, clowns, clowns1, mw8080bw_state, empty_init, ROT0, "Midway", "Clowns (rev. 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_clowns )
-/* 640 */ GAMEL( 1978, spacwalk, 0, spacwalk, spacwalk, mw8080bw_state, empty_init, ROT0, "Midway", "Space Walk", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_spacwalk )
-/* 642 */ GAME( 1978, einning, 0, dplay, einning, mw8080bw_state, empty_init, ROT0, "Midway / Taito", "Extra Inning / Ball Park II", MACHINE_SUPPORTS_SAVE )
+/* 623 */ GAME( 1977, gmissile, 0, gmissile, gmissile, boothill_state, empty_init, ROT0, "Midway", "Guided Missile", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+/* 626 */ GAME( 1977, m4, 0, m4, m4, boothill_state, empty_init, ROT0, "Midway", "M-4", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+/* 630 */ GAMEL( 1978, clowns, 0, clowns, clowns, clowns_state, empty_init, ROT0, "Midway", "Clowns (rev. 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_clowns )
+/* 630 */ GAMEL( 1978, clowns1, clowns, clowns, clowns1, clowns_state, empty_init, ROT0, "Midway", "Clowns (rev. 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_clowns )
+/* 640 */ GAMEL( 1978, spacwalk, 0, spacwalk, spacwalk, clowns_state, empty_init, ROT0, "Midway", "Space Walk", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_spacwalk )
+/* 642 */ GAME( 1978, einning, 0, dplay, einning, dplay_state, empty_init, ROT0, "Midway / Taito", "Extra Inning / Ball Park II", MACHINE_SUPPORTS_SAVE )
/* 643 */ GAME( 1978, shuffle, 0, shuffle, shuffle, mw8080bw_state, empty_init, ROT90, "Midway", "Shuffleboard", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
/* 644 */ GAME( 1977, dogpatch, 0, dogpatch, dogpatch, mw8080bw_state, empty_init, ROT0, "Midway", "Dog Patch", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-/* 645 */ GAMEL( 1980, spcenctr, 0, spcenctr, spcenctr, mw8080bw_state, empty_init, ROT0, "Midway", "Space Encounters", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_spcenctr )
+/* 645 */ GAMEL( 1980, spcenctr, 0, spcenctr, spcenctr, spcenctr_state, empty_init, ROT0, "Midway", "Space Encounters", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_spcenctr )
/* 652 */ GAMEL( 1979, phantom2, 0, phantom2, phantom2, mw8080bw_state, empty_init, ROT0, "Midway", "Phantom II", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_phantom2 )
/* 730 */ GAME( 1978, bowler, 0, bowler, bowler, mw8080bw_state, empty_init, ROT90, "Midway", "Bowling Alley", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
/* 739 */ GAMEL( 1978, invaders, 0, invaders, invaders, mw8080bw_state, empty_init, ROT270, "Taito / Midway", "Space Invaders / Space Invaders M", MACHINE_SUPPORTS_SAVE, layout_invaders )
diff --git a/src/mame/drivers/myb3k.cpp b/src/mame/drivers/myb3k.cpp
index 0759dead3b3..6eb7264e9bf 100644
--- a/src/mame/drivers/myb3k.cpp
+++ b/src/mame/drivers/myb3k.cpp
@@ -566,7 +566,7 @@ WRITE8_MEMBER( myb3k_state::myb3k_video_mode_w )
void myb3k_state::myb3k_map(address_map &map)
{
map.unmap_value_high();
- //AM_RANGE(0x00000,0x3ffff) AM_RAM // It's either 128Kb or 256Kb RAM installed by machine_start()
+ //map(0x00000,0x3ffff).ram(); // It's either 128Kb or 256Kb RAM installed by machine_start()
map(0x40000, 0x7ffff).noprw();
map(0x80000, 0xcffff).noprw(); // Expansion Unit connected through an ISA8 cable
map(0xd0000, 0xeffff).ram().share("vram"); // Area 6, physical at 30000-3FFFF (128Kb RAM) or 10000-1FFFF (256KB RAM)
diff --git a/src/mame/drivers/myvision.cpp b/src/mame/drivers/myvision.cpp
index 27534cd8867..74459784666 100644
--- a/src/mame/drivers/myvision.cpp
+++ b/src/mame/drivers/myvision.cpp
@@ -76,7 +76,7 @@ private:
void myvision_state::myvision_mem(address_map &map)
{
map.unmap_value_high();
- //AM_RANGE(0x0000, 0x5fff) // mapped by the cartslot
+ //map(0x0000, 0x5fff) // mapped by the cartslot
map(0xa000, 0xa7ff).ram();
map(0xe000, 0xe000).rw("tms9918", FUNC(tms9918a_device::vram_read), FUNC(tms9918a_device::vram_write));
map(0xe002, 0xe002).rw("tms9918", FUNC(tms9918a_device::register_read), FUNC(tms9918a_device::register_write));
diff --git a/src/mame/drivers/mz2000.cpp b/src/mame/drivers/mz2000.cpp
index dce21ba2af8..db6980283c0 100644
--- a/src/mame/drivers/mz2000.cpp
+++ b/src/mame/drivers/mz2000.cpp
@@ -424,7 +424,7 @@ void mz2000_state::mz80b_io(address_map &map)
map(0xe4, 0xe7).rw(m_pit8253, FUNC(pit8253_device::read), FUNC(pit8253_device::write));
map(0xe8, 0xeb).rw("z80pio_1", FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt));
map(0xf0, 0xf3).w(FUNC(mz2000_state::timer_w));
-// AM_RANGE(0xf4, 0xf4) AM_WRITE(vram_bank_w)
+// map(0xf4, 0xf4).w(FUNC(mz2000_state::vram_bank_w));
}
void mz2000_state::mz2000_io(address_map &map)
diff --git a/src/mame/drivers/mz2500.cpp b/src/mame/drivers/mz2500.cpp
index 3d1f7760ace..e04a521dd53 100644
--- a/src/mame/drivers/mz2500.cpp
+++ b/src/mame/drivers/mz2500.cpp
@@ -1232,17 +1232,17 @@ WRITE8_MEMBER(mz2500_state::mz2500_emm_data_w)
void mz2500_state::mz2500_io(address_map &map)
{
map.global_mask(0xff);
-// AM_RANGE(0x60, 0x63) AM_WRITE(w3100a_w)
-// AM_RANGE(0x63, 0x63) AM_READ(w3100a_r)
-// AM_RANGE(0x98, 0x99) ADPCM, unknown type, custom?
+// map(0x60, 0x63).w(FUNC(mz2500_state::w3100a_w));
+// map(0x63, 0x63).r(FUNC(mz2500_state::w3100a_r));
+// map(0x98, 0x99) ADPCM, unknown type, custom?
map(0xa0, 0xa3).rw("z80sio", FUNC(z80sio_device::ba_cd_r), FUNC(z80sio_device::ba_cd_w));
-// AM_RANGE(0xa4, 0xa5) AM_READWRITE(sasi_r, sasi_w)
+// map(0xa4, 0xa5).rw(FUNC(mz2500_state::sasi_r), FUNC(mz2500_state::sasi_w));
map(0xa8, 0xa8).w(FUNC(mz2500_state::mz2500_rom_w));
map(0xa9, 0xa9).r(FUNC(mz2500_state::mz2500_rom_r));
map(0xac, 0xac).w(FUNC(mz2500_state::mz2500_emm_addr_w));
map(0xad, 0xad).r(FUNC(mz2500_state::mz2500_emm_data_r)).w(FUNC(mz2500_state::mz2500_emm_data_w));
map(0xae, 0xae).w(FUNC(mz2500_state::palette4096_io_w));
-// AM_RANGE(0xb0, 0xb3) AM_READWRITE(sio_r,sio_w)
+// map(0xb0, 0xb3).rw(FUNC(mz2500_state::sio_r), FUNC(mz2500_state::sio_w));
map(0xb4, 0xb4).rw(FUNC(mz2500_state::mz2500_bank_addr_r), FUNC(mz2500_state::mz2500_bank_addr_w));
map(0xb5, 0xb5).rw(FUNC(mz2500_state::mz2500_bank_data_r), FUNC(mz2500_state::mz2500_bank_data_w));
map(0xb7, 0xb7).nopw();
@@ -1254,7 +1254,7 @@ void mz2500_state::mz2500_io(address_map &map)
map(0xc6, 0xc6).w(FUNC(mz2500_state::mz2500_irq_sel_w));
map(0xc7, 0xc7).w(FUNC(mz2500_state::mz2500_irq_data_w));
map(0xc8, 0xc9).rw("ym", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
-// AM_RANGE(0xca, 0xca) AM_READWRITE(voice_r,voice_w)
+// map(0xca, 0xca).rw(FUNC(mz2500_state::voice_r), FUNC(mz2500_state::voice_w));
map(0xcc, 0xcc).rw(FUNC(mz2500_state::rp5c15_8_r), FUNC(mz2500_state::rp5c15_8_w));
map(0xce, 0xce).w(FUNC(mz2500_state::mz2500_dictionary_bank_w));
map(0xcf, 0xcf).w(FUNC(mz2500_state::mz2500_kanji_bank_w));
@@ -1268,7 +1268,7 @@ void mz2500_state::mz2500_io(address_map &map)
map(0xef, 0xef).rw(FUNC(mz2500_state::mz2500_joystick_r), FUNC(mz2500_state::mz2500_joystick_w));
map(0xf0, 0xf3).w(FUNC(mz2500_state::timer_w));
map(0xf4, 0xf7).r(FUNC(mz2500_state::mz2500_crtc_hvblank_r)).w(FUNC(mz2500_state::mz2500_tv_crtc_w));
-// AM_RANGE(0xf8, 0xf9) AM_READWRITE(extrom_r,extrom_w)
+// map(0xf8, 0xf9).rw(FUNC(mz2500_state::extrom_r), FUNC(mz2500_state::extrom_w));
}
/* Input ports */
diff --git a/src/mame/drivers/mz3500.cpp b/src/mame/drivers/mz3500.cpp
index 6c965638dcc..53de3d3810d 100644
--- a/src/mame/drivers/mz3500.cpp
+++ b/src/mame/drivers/mz3500.cpp
@@ -604,12 +604,12 @@ void mz3500_state::mz3500_master_map(address_map &map)
void mz3500_state::mz3500_master_io(address_map &map)
{
map.global_mask(0xff);
-// ADDRESS_MAP_UNMAP_HIGH
-// AM_RANGE(0xe4, 0xe7) SFD upd765
-// AM_RANGE(0xe8, 0xeb) SFD I/O port and DMAC chip select
-// AM_RANGE(0xec, 0xef) irq signal from slave to master CPU
+// map.unmap_value_high();
+// map(0xe4, 0xe7) SFD upd765
+// map(0xe8, 0xeb) SFD I/O port and DMAC chip select
+// map(0xec, 0xef) irq signal from slave to master CPU
map(0xf4, 0xf5).m(m_fdc, FUNC(upd765a_device::map)); // MFD upd765
-// AM_RANGE(0xf8, 0xfb) MFD I/O port
+// map(0xf8, 0xfb) MFD I/O port
map(0xf8, 0xf8).rw(FUNC(mz3500_state::mz3500_fdc_r), FUNC(mz3500_state::mz3500_fdc_w));
map(0xf9, 0xf9).r(FUNC(mz3500_state::mz3500_fdc_dma_r));
map(0xfc, 0xff).rw(FUNC(mz3500_state::mz3500_io_r), FUNC(mz3500_state::mz3500_io_w)); // memory mapper
@@ -626,9 +626,9 @@ void mz3500_state::mz3500_slave_io(address_map &map)
{
map.global_mask(0xff);
map.unmap_value_high();
-// AM_RANGE(0x00, 0x0f) f/f and irq to master CPU
-// AM_RANGE(0x10, 0x1f) i8251
-// AM_RANGE(0x20, 0x2f) pit8253
+// map(0x00, 0x0f) f/f and irq to master CPU
+// map(0x10, 0x1f) i8251
+// map(0x20, 0x2f) pit8253
map(0x30, 0x33).rw("i8255", FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0x40, 0x40).portr("DSW");
map(0x50, 0x5f).ram().w(FUNC(mz3500_state::mz3500_crtc_w));
@@ -800,7 +800,7 @@ void mz3500_state::upd7220_1_map(address_map &map)
void mz3500_state::upd7220_2_map(address_map &map)
{
- map(0x00000, 0x3ffff).ram(); // AM_SHARE("video_ram_2")
+ map(0x00000, 0x3ffff).ram(); // .share("video_ram_2");
}
static void mz3500_floppies(device_slot_interface &device)
diff --git a/src/mame/drivers/mz6500.cpp b/src/mame/drivers/mz6500.cpp
index b26540cd920..6aec9a7b173 100644
--- a/src/mame/drivers/mz6500.cpp
+++ b/src/mame/drivers/mz6500.cpp
@@ -88,7 +88,7 @@ void mz6500_state::mz6500_map(address_map &map)
{
map.unmap_value_high();
map(0x00000, 0x9ffff).ram();
-// AM_RANGE(0xa0000,0xbffff) kanji/dictionary ROM
+// map(0xa0000,0xbffff) kanji/dictionary ROM
map(0xc0000, 0xeffff).rw(FUNC(mz6500_state::mz6500_vram_r), FUNC(mz6500_state::mz6500_vram_w));
map(0xfc000, 0xfffff).rom().region("ipl", 0);
}
@@ -96,27 +96,27 @@ void mz6500_state::mz6500_map(address_map &map)
void mz6500_state::mz6500_io(address_map &map)
{
map.unmap_value_high();
-// AM_RANGE(0x0000, 0x000f) i8237 dma
-// AM_RANGE(0x0010, 0x001f) i8255
+// map(0x0000, 0x000f) i8237 dma
+// map(0x0010, 0x001f) i8255
map(0x0020, 0x0021).mirror(0xe).m(m_fdc, FUNC(upd765a_device::map));
-// AM_RANGE(0x0030, 0x003f) i8259 master
-// AM_RANGE(0x0040, 0x004f) i8259 slave
-// AM_RANGE(0x0050, 0x0050) segment byte for DMA
-// AM_RANGE(0x0060, 0x0060) system port A
-// AM_RANGE(0x0070, 0x0070) system port C
-// AM_RANGE(0x00cd, 0x00cd) MZ-1R32
+// map(0x0030, 0x003f) i8259 master
+// map(0x0040, 0x004f) i8259 slave
+// map(0x0050, 0x0050) segment byte for DMA
+// map(0x0060, 0x0060) system port A
+// map(0x0070, 0x0070) system port C
+// map(0x00cd, 0x00cd) MZ-1R32
map(0x0100, 0x0103).mirror(0xc).rw(m_hgdc, FUNC(upd7220_device::read), FUNC(upd7220_device::write)).umask16(0x00ff);
-// AM_RANGE(0x0110, 0x011f) video address / data registers (priority)
-// AM_RANGE(0x0120, 0x012f) video registers
-// AM_RANGE(0x0130, 0x013f) video register
-// AM_RANGE(0x0140, 0x015f) palette pens
-// AM_RANGE(0x0200, 0x020f) z80sio
-// AM_RANGE(0x0210, 0x021f) z80ctc
-// AM_RANGE(0x0220, 0x022f) rp5c01
-// AM_RANGE(0x0230, 0x023f) ay-3-8912
-// AM_RANGE(0x0240, 0x0240) z80ctc vector ack
-// AM_RANGE(0x0250, 0x0250) z80sio vector ack
-// AM_RANGE(0x0270, 0x0270) system port B
+// map(0x0110, 0x011f) video address / data registers (priority)
+// map(0x0120, 0x012f) video registers
+// map(0x0130, 0x013f) video register
+// map(0x0140, 0x015f) palette pens
+// map(0x0200, 0x020f) z80sio
+// map(0x0210, 0x021f) z80ctc
+// map(0x0220, 0x022f) rp5c01
+// map(0x0230, 0x023f) ay-3-8912
+// map(0x0240, 0x0240) z80ctc vector ack
+// map(0x0250, 0x0250) z80sio vector ack
+// map(0x0270, 0x0270) system port B
}
/* Input ports */
diff --git a/src/mame/drivers/mzr8105.cpp b/src/mame/drivers/mzr8105.cpp
index 76d5fb7af3f..55b661bebd6 100644
--- a/src/mame/drivers/mzr8105.cpp
+++ b/src/mame/drivers/mzr8105.cpp
@@ -192,8 +192,8 @@ void mzr8105_state::mzr8105_mem(address_map &map)
map(0x000000, 0x003fff).rom().region("roms", 0x000000); /* System EPROM Area 16Kb OS9 DEBUG - not verified */
map(0x004000, 0x01ffff).rom().region("roms", 0x004000);/* System EPROM Area 112Kb for System ROM - not verified */
map(0x020000, 0x03ffff).ram(); /* Not verified */
-// AM_RANGE (0x100000, 0xfeffff) AM_READWRITE(vme_a24_r, vme_a24_w) /* VMEbus Rev B addresses (24 bits) - not verified */
-// AM_RANGE (0xff0000, 0xffffff) AM_READWRITE(vme_a16_r, vme_a16_w) /* VMEbus Rev B addresses (16 bits) - not verified */
+// map(0x100000, 0xfeffff).rw(FUNC(mzr8105_state::vme_a24_r), FUNC(mzr8105_state::vme_a24_w)); /* VMEbus Rev B addresses (24 bits) - not verified */
+// map(0xff0000, 0xffffff).rw(FUNC(mzr8105_state::vme_a16_r), FUNC(mzr8105_state::vme_a16_w)); /* VMEbus Rev B addresses (16 bits) - not verified */
}
/* Input ports */
diff --git a/src/mame/drivers/namcos23.cpp b/src/mame/drivers/namcos23.cpp
index 669dcc50200..8d0d7520309 100644
--- a/src/mame/drivers/namcos23.cpp
+++ b/src/mame/drivers/namcos23.cpp
@@ -3012,7 +3012,7 @@ void namcos23_state::gmen_sh2_map(address_map &map)
map(0x00000000, 0x0000ffff).ram().share("gmen_sh2_shared");
map(0x00800000, 0x008fffff).rom().region("data", 0xc00000); //c00000 "data" for final furlong 2. 0x1b6bc0 "user1" for gunmen wars
map(0x01800000, 0x0183ffff).ram(); // ???
- //AM_RANGE(0x02800000, 0x02800003) AM_RAM // probably transfer status related, reads/writes after each end of flash transfer, TBD
+ //map(0x02800000, 0x02800003).ram(); // probably transfer status related, reads/writes after each end of flash transfer, TBD
map(0x04000000, 0x043fffff).ram(); // SH-2 main work RAM (SDRAM)
map(0x06000000, 0x06000003).noprw(); // serial port for camera?
}
diff --git a/src/mame/drivers/nanos.cpp b/src/mame/drivers/nanos.cpp
index 4e982e40032..02946e1ca25 100644
--- a/src/mame/drivers/nanos.cpp
+++ b/src/mame/drivers/nanos.cpp
@@ -170,10 +170,10 @@ void nanos_state::io_map(address_map &map)
map(0xA4, 0xA7).rw(m_ctc_1, FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
/* 256-k RAM card I - 64k OS-Memory + 192k-RAM-Floppy */
- //AM_RANGE(0xC0, 0xC7)
+ //map(0xC0, 0xC7)
/* 256-k RAM card II - 64k OS-Memory + 192k-RAM-Floppy */
- //AM_RANGE(0xC8, 0xCF)
+ //map(0xC8, 0xCF)
}
/* Input ports */
diff --git a/src/mame/drivers/naomi.cpp b/src/mame/drivers/naomi.cpp
index c41b9ae0c93..c02ab98b089 100644
--- a/src/mame/drivers/naomi.cpp
+++ b/src/mame/drivers/naomi.cpp
@@ -1754,13 +1754,13 @@ void naomi_state::naomi_map(address_map &map)
map(0x13000000, 0x13ffffff).w(m_powervr2, FUNC(powervr2_device::ta_texture_directpath1_w)); // access to texture / framebuffer memory (either 32-bit or 64-bit area depending on SB_LMMODE1 register - cannot be written directly, only through dma / store queue)
/* Area 5 */
- //AM_RANGE(0x14000000, 0x17ffffff) AM_NOP // MPX Ext.
+ //map(0x14000000, 0x17ffffff).noprw(); // MPX Ext.
/* Area 6 */
- //AM_RANGE(0x18000000, 0x1bffffff) AM_NOP // Unassigned
+ //map(0x18000000, 0x1bffffff).noprw(); // Unassigned
/* Area 7 */
- //AM_RANGE(0x1c000000, 0x1fffffff) AM_NOP // SH4 Internal
+ //map(0x1c000000, 0x1fffffff).noprw(); // SH4 Internal
}
/*
@@ -1797,9 +1797,9 @@ void naomi2_state::naomi2_map(address_map &map)
map(0x025f7c00, 0x025f7cff).m(m_powervr2_slave, FUNC(powervr2_device::pd_dma_map));
map(0x025f8000, 0x025f9fff).m(m_powervr2_slave, FUNC(powervr2_device::ta_map));
-// AM_RANGE(0x025f6800, 0x025f69ff) AM_READWRITE(dc_sysctrl_r, dc_sysctrl_w ) // second PVR DMA!
-// AM_RANGE(0x025f7c00, 0x025f7cff) AM_DEVREADWRITE32("powervr2", powervr2_device, pvr_ctrl_r, pvr_ctrl_w, 0xffffffffffffffffU)
-// AM_RANGE(0x005f8000, 0x005f9fff) AM_MIRROR(0x02000000) AM_DEVICE32("powervr2", powervr2_device, ta_map, 0xffffffffffffffffU)
+// map(0x025f6800, 0x025f69ff).rw(FUNC(naomi2_state::dc_sysctrl_r), FUNC(naomi2_state::dc_sysctrl_w)); // second PVR DMA!
+// map(0x025f7c00, 0x025f7cff).rw("powervr2", FUNC(powervr2_device::pvr_ctrl_r), FUNC(powervr2_device::pvr_ctrl_w));
+// map(0x005f8000, 0x005f9fff).mirror(0x02000000).m("powervr2", FUNC(powervr2_device::ta_map));
/* Area 1 */
map(0x04000000, 0x04ffffff).ram().share("dc_texture_ram"); // texture memory 64 bit access
@@ -1811,7 +1811,7 @@ void naomi2_state::naomi2_map(address_map &map)
map(0x085f6800, 0x085f69ff).w(FUNC(naomi2_state::dc_sysctrl_w)); // TODO: writes to BOTH PVRs
map(0x085f8000, 0x085f9fff).w(FUNC(naomi2_state::both_pvr2_ta_w));
map(0x08800000, 0x088000ff).rw(m_powervr2, FUNC(powervr2_device::elan_regs_r), FUNC(powervr2_device::elan_regs_w)); // T&L chip registers
-// AM_RANGE(0x09000000, 0x09??????) T&L command processing
+// map(0x09000000, 0x09??????) T&L command processing
map(0x0a000000, 0x0bffffff).ram().share("elan_ram"); // T&L chip RAM
/* Area 3 */
@@ -1825,13 +1825,13 @@ void naomi2_state::naomi2_map(address_map &map)
map(0x13000000, 0x13ffffff).w(m_powervr2, FUNC(powervr2_device::ta_texture_directpath1_w)); // access to texture / framebuffer memory (either 32-bit or 64-bit area depending on SB_LMMODE1 register - cannot be written directly, only through dma / store queue)
/* Area 5 */
- //AM_RANGE(0x14000000, 0x17ffffff) AM_NOP // MPX Ext.
+ //map(0x14000000, 0x17ffffff).noprw(); // MPX Ext.
/* Area 6 */
- //AM_RANGE(0x18000000, 0x1bffffff) AM_NOP // Unassigned
+ //map(0x18000000, 0x1bffffff).noprw(); // Unassigned
/* Area 7 */
- //AM_RANGE(0x1c000000, 0x1fffffff) AM_NOP // SH4 Internal
+ //map(0x1c000000, 0x1fffffff).noprw(); // SH4 Internal
}
@@ -1994,13 +1994,13 @@ void atomiswave_state::aw_map(address_map &map)
/* Area 5 */
- //AM_RANGE(0x14000000, 0x17ffffff) AM_NOP // MPX Ext.
+ //map(0x14000000, 0x17ffffff).noprw(); // MPX Ext.
/* Area 6 */
- //AM_RANGE(0x18000000, 0x1bffffff) AM_NOP // Unassigned
+ //map(0x18000000, 0x1bffffff).noprw(); // Unassigned
/* Area 7 */
- //AM_RANGE(0x1c000000, 0x1fffffff) AM_NOP // SH4 Internal
+ //map(0x1c000000, 0x1fffffff).noprw(); // SH4 Internal
}
void atomiswave_state::aw_port(address_map &map)
@@ -2989,18 +2989,7 @@ void naomi_state::naomi_base(machine_config &config)
MIE_JVS(config, "mie", 16000000);
sega_837_13551_device &sega837(SEGA_837_13551(config, "837_13551", 0, "mie"));
- sega837.set_port_tag<0>("TILT");
- sega837.set_port_tag<1>("P1");
- sega837.set_port_tag<2>("P2");
- sega837.set_port_tag<3>("A0");
- sega837.set_port_tag<4>("A1");
- sega837.set_port_tag<5>("A2");
- sega837.set_port_tag<6>("A3");
- sega837.set_port_tag<7>("A4");
- sega837.set_port_tag<8>("A5");
- sega837.set_port_tag<9>("A6");
- sega837.set_port_tag<10>("A7");
- sega837.set_port_tag<11>("OUTPUT");
+ sega837.set_port_tags("TILT", "P1", "P2", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "OUTPUT");
EEPROM_93C46_8BIT(config, "mie_eeprom");
@@ -3073,23 +3062,9 @@ void naomi_state::naomim2_kb(machine_config &config)
{
naomim2(config);
dc_keyboard_device &dcctrl0(DC_KEYBOARD(config, "dcctrl0", 0, m_maple, 1));
- dcctrl0.set_port_tag<0>("P1.M");
- dcctrl0.set_port_tag<1>("P1.LD");
- dcctrl0.set_port_tag<2>("P1.KC1");
- dcctrl0.set_port_tag<3>("P1.KC2");
- dcctrl0.set_port_tag<4>("P1.KC3");
- dcctrl0.set_port_tag<5>("P1.KC4");
- dcctrl0.set_port_tag<6>("P1.KC5");
- dcctrl0.set_port_tag<7>("P1.KC6");
+ dcctrl0.set_port_tags("P1.M", "P1.LD", "P1.KC1", "P1.KC2", "P1.KC3", "P1.KC4", "P1.KC5", "P1.KC6");
dc_keyboard_device &dcctrl1(DC_KEYBOARD(config, "dcctrl1", 0, m_maple, 2));
- dcctrl1.set_port_tag<0>("P2.M");
- dcctrl1.set_port_tag<1>("P2.LD");
- dcctrl1.set_port_tag<2>("P2.KC1");
- dcctrl1.set_port_tag<3>("P2.KC2");
- dcctrl1.set_port_tag<4>("P2.KC3");
- dcctrl1.set_port_tag<5>("P2.KC4");
- dcctrl1.set_port_tag<6>("P2.KC5");
- dcctrl1.set_port_tag<7>("P2.KC6");
+ dcctrl1.set_port_tags("P2.M", "P2.LD", "P2.KC1", "P2.KC2", "P2.KC3", "P2.KC4", "P2.KC5", "P2.KC6");
}
/*
@@ -3100,23 +3075,9 @@ void naomi_state::naomigd_kb(machine_config &config)
{
naomigd(config);
dc_keyboard_device &dcctrl0(DC_KEYBOARD(config, "dcctrl0", 0, m_maple, 1));
- dcctrl0.set_port_tag<0>("P1.M");
- dcctrl0.set_port_tag<1>("P1.LD");
- dcctrl0.set_port_tag<2>("P1.KC1");
- dcctrl0.set_port_tag<3>("P1.KC2");
- dcctrl0.set_port_tag<4>("P1.KC3");
- dcctrl0.set_port_tag<5>("P1.KC4");
- dcctrl0.set_port_tag<6>("P1.KC5");
- dcctrl0.set_port_tag<7>("P1.KC6");
+ dcctrl0.set_port_tags("P1.M", "P1.LD", "P1.KC1", "P1.KC2", "P1.KC3", "P1.KC4", "P1.KC5", "P1.KC6");
dc_keyboard_device &dcctrl1(DC_KEYBOARD(config, "dcctrl1", 0, m_maple, 2));
- dcctrl1.set_port_tag<0>("P2.M");
- dcctrl1.set_port_tag<1>("P2.LD");
- dcctrl1.set_port_tag<2>("P2.KC1");
- dcctrl1.set_port_tag<3>("P2.KC2");
- dcctrl1.set_port_tag<4>("P2.KC3");
- dcctrl1.set_port_tag<5>("P2.KC4");
- dcctrl1.set_port_tag<6>("P2.KC5");
- dcctrl1.set_port_tag<7>("P2.KC6");
+ dcctrl1.set_port_tags("P2.M", "P2.LD", "P2.KC1", "P2.KC2", "P2.KC3", "P2.KC4", "P2.KC5", "P2.KC6");
}
/*
@@ -3196,47 +3157,19 @@ void atomiswave_state::aw1c(machine_config &config)
{
aw_base(config);
dc_controller_device &dcctrl0(DC_CONTROLLER(config, "dcctrl0", 0, m_maple, 0));
- dcctrl0.set_port_tag<0>("P1.0");
- dcctrl0.set_port_tag<1>("P1.1");
- dcctrl0.set_port_tag<2>("P1.A0");
- dcctrl0.set_port_tag<3>("P1.A1");
- dcctrl0.set_port_tag<4>("P1.A2");
- dcctrl0.set_port_tag<5>("P1.A3");
- dcctrl0.set_port_tag<6>("P1.A4");
- dcctrl0.set_port_tag<7>("P1.A5");
+ dcctrl0.set_port_tags("P1.0", "P1.1", "P1.A0", "P1.A1", "P1.A2", "P1.A3", "P1.A4", "P1.A5");
// TODO: isn't it supposed to be just one controller?
dc_controller_device &dcctrl1(DC_CONTROLLER(config, "dcctrl1", 0, m_maple, 1));
- dcctrl1.set_port_tag<0>("P2.0");
- dcctrl1.set_port_tag<1>("P2.1");
- dcctrl1.set_port_tag<2>("P2.A0");
- dcctrl1.set_port_tag<3>("P2.A1");
- dcctrl1.set_port_tag<4>("P2.A2");
- dcctrl1.set_port_tag<5>("P2.A3");
- dcctrl1.set_port_tag<6>("P2.A4");
- dcctrl1.set_port_tag<7>("P2.A5");
+ dcctrl1.set_port_tags("P2.0", "P2.1", "P2.A0", "P2.A1", "P2.A2", "P2.A3", "P2.A4", "P2.A5");
}
void atomiswave_state::aw2c(machine_config &config)
{
aw_base(config);
dc_controller_device &dcctrl0(DC_CONTROLLER(config, "dcctrl0", 0, m_maple, 0));
- dcctrl0.set_port_tag<0>("P1.0");
- dcctrl0.set_port_tag<1>("P1.1");
- dcctrl0.set_port_tag<2>("P1.A0");
- dcctrl0.set_port_tag<3>("P1.A1");
- dcctrl0.set_port_tag<4>("P1.A2");
- dcctrl0.set_port_tag<5>("P1.A3");
- dcctrl0.set_port_tag<6>("P1.A4");
- dcctrl0.set_port_tag<7>("P1.A5");
+ dcctrl0.set_port_tags("P1.0", "P1.1", "P1.A0", "P1.A1", "P1.A2", "P1.A3", "P1.A4", "P1.A5");
dc_controller_device &dcctrl1(DC_CONTROLLER(config, "dcctrl1", 0, m_maple, 1));
- dcctrl1.set_port_tag<0>("P2.0");
- dcctrl1.set_port_tag<1>("P2.1");
- dcctrl1.set_port_tag<2>("P2.A0");
- dcctrl1.set_port_tag<3>("P2.A1");
- dcctrl1.set_port_tag<4>("P2.A2");
- dcctrl1.set_port_tag<5>("P2.A3");
- dcctrl1.set_port_tag<6>("P2.A4");
- dcctrl1.set_port_tag<7>("P2.A5");
+ dcctrl1.set_port_tags("P2.0", "P2.1", "P2.A0", "P2.A1", "P2.A2", "P2.A3", "P2.A4", "P2.A5");
}
#define ROM_LOAD16_WORD_SWAP_BIOS(bios,name,offset,length,hash) \
diff --git a/src/mame/drivers/nbmj8688.cpp b/src/mame/drivers/nbmj8688.cpp
index 3d089a3ba75..6b9f898449a 100644
--- a/src/mame/drivers/nbmj8688.cpp
+++ b/src/mame/drivers/nbmj8688.cpp
@@ -166,8 +166,8 @@ void nbmj8688_state::secolove_io_map(address_map &map)
map(0xd0, 0xd0).r(FUNC(nbmj8688_state::ff_r)); // irq ack? watchdog?
map(0xd0, 0xd0).w("dac", FUNC(dac_byte_interface::data_w));
map(0xe0, 0xe0).w(FUNC(nbmj8688_state::secolove_romsel_w));
-// AM_RANGE(0xf0, 0xf0) AM_DEVREAD("nb1413m3", nb1413m3_device, dipsw1_r)
-// AM_RANGE(0xf1, 0xf1) AM_DEVREAD("nb1413m3", nb1413m3_device, dipsw2_r)
+// map(0xf0, 0xf0).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r));
+// map(0xf1, 0xf1).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw2_r));
map(0xf0, 0xf0).w(FUNC(nbmj8688_state::scrolly_w));
}
@@ -197,7 +197,7 @@ WRITE8_MEMBER(nbmj8688_state::barline_output_w)
void nbmj8688_state::barline_io_map(address_map &map)
{
map.global_mask(0xff);
-// AM_RANGE(0x00, 0x7f) AM_DEVREAD("nb1413m3", nb1413m3_device, sndrom_r)
+// map(0x00, 0x7f).r(m_nb1413m3, FUNC(nb1413m3_device::sndrom_r));
map(0x00, 0x00).w(m_nb1413m3, FUNC(nb1413m3_device::sndrombank1_w));
map(0x70, 0x70).w(m_nb1413m3, FUNC(nb1413m3_device::nmi_clock_w));
map(0x80, 0x81).rw("psg", FUNC(ym3812_device::read), FUNC(ym3812_device::write));
@@ -207,7 +207,7 @@ void nbmj8688_state::barline_io_map(address_map &map)
map(0xb0, 0xb0).r(m_nb1413m3, FUNC(nb1413m3_device::inputport2_r)).w(FUNC(nbmj8688_state::barline_output_w));
map(0xc0, 0xcf).w(FUNC(nbmj8688_state::clut_w));
map(0xd0, 0xd0).r(FUNC(nbmj8688_state::ff_r)); // irq ack? watchdog?
-// AM_RANGE(0xd0, 0xd0) AM_DEVWRITE("dac", dac_byte_interface, data_w) //not used
+// map(0xd0, 0xd0).w("dac", FUNC(dac_byte_interface::data_w)); //not used
map(0xe0, 0xe0).w(FUNC(nbmj8688_state::secolove_romsel_w));
map(0xf0, 0xf0).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r)).w(FUNC(nbmj8688_state::scrolly_w));
map(0xf1, 0xf1).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw2_r));
@@ -228,9 +228,9 @@ void nbmj8688_state::crystalg_io_map(address_map &map)
map(0xd0, 0xd0).r(FUNC(nbmj8688_state::ff_r)); // irq ack? watchdog?
map(0xd0, 0xd0).w("dac", FUNC(dac_byte_interface::data_w));
map(0xe0, 0xe0).w(FUNC(nbmj8688_state::crystalg_romsel_w));
-// AM_RANGE(0xf0, 0xf0) AM_DEVREAD("nb1413m3", nb1413m3_device, dipsw1_r)
-// AM_RANGE(0xf0, 0xf0) AM_WRITENOP
-// AM_RANGE(0xf1, 0xf1) AM_DEVREAD("nb1413m3", nb1413m3_device, dipsw2_r)
+// map(0xf0, 0xf0).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r));
+// map(0xf0, 0xf0).nopw();
+// map(0xf1, 0xf1).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw2_r));
}
@@ -292,8 +292,8 @@ void nbmj8688_state::iemoto_io_map(address_map &map)
map(0xd0, 0xd0).r(FUNC(nbmj8688_state::ff_r)); // irq ack? watchdog?
map(0xd0, 0xd0).w("dac", FUNC(dac_byte_interface::data_w));
map(0xe0, 0xe0).w(FUNC(nbmj8688_state::mjsikaku_gfxflag2_w));
-// AM_RANGE(0xf0, 0xf0) AM_DEVREAD("nb1413m3", nb1413m3_device, dipsw1_r)
-// AM_RANGE(0xf1, 0xf1) AM_DEVREAD("nb1413m3", nb1413m3_device, dipsw2_r)
+// map(0xf0, 0xf0).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r));
+// map(0xf1, 0xf1).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw2_r));
map(0xf0, 0xf0).w(FUNC(nbmj8688_state::scrolly_w));
}
@@ -315,8 +315,8 @@ void nbmj8688_state::seiha_io_map(address_map &map)
map(0xd0, 0xd0).r(FUNC(nbmj8688_state::ff_r)); // irq ack? watchdog?
map(0xd0, 0xd0).w("dac", FUNC(dac_byte_interface::data_w));
map(0xe0, 0xe0).w(FUNC(nbmj8688_state::mjsikaku_gfxflag2_w));
-// AM_RANGE(0xf0, 0xf0) AM_DEVREAD("nb1413m3", nb1413m3_device, dipsw1_r)
-// AM_RANGE(0xf1, 0xf1) AM_DEVREAD("nb1413m3", nb1413m3_device, dipsw2_r)
+// map(0xf0, 0xf0).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r));
+// map(0xf1, 0xf1).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw2_r));
map(0xf0, 0xf0).w(FUNC(nbmj8688_state::scrolly_w));
}
@@ -336,8 +336,8 @@ void nbmj8688_state::mjgaiden_io_map(address_map &map)
map(0xd0, 0xd0).r(FUNC(nbmj8688_state::ff_r)); // irq ack? watchdog?
map(0xd0, 0xd0).w("dac", FUNC(dac_byte_interface::data_w));
map(0xe0, 0xe0).w(FUNC(nbmj8688_state::mjsikaku_gfxflag2_w));
-// AM_RANGE(0xf0, 0xf0) AM_DEVREAD("nb1413m3", nb1413m3_device, dipsw1_r)
-// AM_RANGE(0xf1, 0xf1) AM_DEVREAD("nb1413m3", nb1413m3_device, dipsw2_r)
+// map(0xf0, 0xf0).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r));
+// map(0xf1, 0xf1).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw2_r));
map(0xf0, 0xf0).w(FUNC(nbmj8688_state::scrolly_w));
}
@@ -362,8 +362,8 @@ void nbmj8688_state::p16bit_LCD_io_map(address_map &map)
map(0xd0, 0xd0).r(FUNC(nbmj8688_state::ff_r)); // irq ack? watchdog?
map(0xd0, 0xd0).w("dac", FUNC(dac_byte_interface::data_w));
map(0xe0, 0xe0).w(FUNC(nbmj8688_state::secolove_romsel_w));
-// AM_RANGE(0xf0, 0xf0) AM_DEVREAD("nb1413m3", nb1413m3_device, dipsw1_r)
-// AM_RANGE(0xf1, 0xf1) AM_DEVREAD("nb1413m3", nb1413m3_device, dipsw2_r)
+// map(0xf0, 0xf0).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r));
+// map(0xf1, 0xf1).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw2_r));
map(0xf0, 0xf0).w(FUNC(nbmj8688_state::scrolly_w));
}
@@ -407,8 +407,8 @@ void nbmj8688_state::mmsikaku_io_map(address_map &map)
map(0xd0, 0xd0).r(FUNC(nbmj8688_state::ff_r)); // irq ack? watchdog?
map(0xd0, 0xd0).w("dac", FUNC(dac_byte_interface::data_w));
map(0xe0, 0xe0).w(FUNC(nbmj8688_state::mjsikaku_gfxflag2_w));
-// AM_RANGE(0xf0, 0xf0) AM_DEVREAD("nb1413m3", nb1413m3_device, dipsw1_r)
-// AM_RANGE(0xf1, 0xf1) AM_DEVREAD("nb1413m3", nb1413m3_device, dipsw2_r)
+// map(0xf0, 0xf0).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r));
+// map(0xf1, 0xf1).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw2_r));
map(0xf0, 0xf0).w(FUNC(nbmj8688_state::scrolly_w));
}
diff --git a/src/mame/drivers/nbmj8891.cpp b/src/mame/drivers/nbmj8891.cpp
index 376b129c49e..9bd8cf40530 100644
--- a/src/mame/drivers/nbmj8891.cpp
+++ b/src/mame/drivers/nbmj8891.cpp
@@ -351,7 +351,7 @@ void nbmj8891_state::gionbana_io_map(address_map &map)
map(0x90, 0x90).r(m_nb1413m3, FUNC(nb1413m3_device::inputport0_r));
map(0xa0, 0xa0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport1_r), FUNC(nb1413m3_device::inputportsel_w));
map(0xb0, 0xb0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport2_r), FUNC(nb1413m3_device::sndrombank1_w));
- map(0xc0, 0xc0).r(m_nb1413m3, FUNC(nb1413m3_device::inputport3_r)); //AM_WRITENOP
+ map(0xc0, 0xc0).r(m_nb1413m3, FUNC(nb1413m3_device::inputport3_r)); //.nopw();
map(0xd0, 0xd0).w("dac", FUNC(dac_byte_interface::data_w));
map(0xe0, 0xe0).w(FUNC(nbmj8891_state::vramsel_w));
map(0xf0, 0xf0).rw(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r), FUNC(nb1413m3_device::outcoin_w));
@@ -371,7 +371,7 @@ void nbmj8891_state::mgion_io_map(address_map &map)
map(0x90, 0x90).r(m_nb1413m3, FUNC(nb1413m3_device::inputport0_r));
map(0xa0, 0xa0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport1_r), FUNC(nb1413m3_device::inputportsel_w));
map(0xb0, 0xb0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport2_r), FUNC(nb1413m3_device::sndrombank1_w));
- map(0xc0, 0xc0).r(m_nb1413m3, FUNC(nb1413m3_device::inputport3_r)); //AM_WRITENOP
+ map(0xc0, 0xc0).r(m_nb1413m3, FUNC(nb1413m3_device::inputport3_r)); //.nopw();
map(0xd0, 0xd0).w("dac", FUNC(dac_byte_interface::data_w));
map(0xe0, 0xe0).w(FUNC(nbmj8891_state::vramsel_w));
map(0xf0, 0xf0).rw(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r), FUNC(nb1413m3_device::outcoin_w));
@@ -387,7 +387,7 @@ void nbmj8891_state::omotesnd_io_map(address_map &map)
map(0x10, 0x10).w(FUNC(nbmj8891_state::romsel_w));
map(0x20, 0x20).w(FUNC(nbmj8891_state::clutsel_w));
map(0x40, 0x4f).w(FUNC(nbmj8891_state::clut_w));
-// AM_RANGE(0x50, 0x50) AM_DEVWRITE("nb1413m3", nb1413m3_device, nmi_clock_w)
+// map(0x50, 0x50).w(m_nb1413m3, FUNC(nb1413m3_device::nmi_clock_w));
map(0x70, 0x70).w(FUNC(nbmj8891_state::scrolly_w));
map(0x81, 0x81).r("fmsnd", FUNC(ay8910_device::data_r));
map(0x82, 0x83).w("fmsnd", FUNC(ay8910_device::data_address_w));
@@ -414,10 +414,10 @@ void nbmj8891_state::hanamomo_io_map(address_map &map)
map(0x90, 0x90).r(m_nb1413m3, FUNC(nb1413m3_device::inputport0_r));
map(0xa0, 0xa0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport1_r), FUNC(nb1413m3_device::inputportsel_w));
map(0xb0, 0xb0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport2_r), FUNC(nb1413m3_device::sndrombank1_w));
- map(0xc0, 0xc0).r(m_nb1413m3, FUNC(nb1413m3_device::inputport3_r)); //AM_WRITENOP
+ map(0xc0, 0xc0).r(m_nb1413m3, FUNC(nb1413m3_device::inputport3_r)); //.nopw();
map(0xd0, 0xd0).w("dac", FUNC(dac_byte_interface::data_w));
-// AM_RANGE(0xe0, 0xe0) AM_WRITENOP
- map(0xf0, 0xf0).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r)); //AM_WRITENOP
+// map(0xe0, 0xe0).nopw();
+ map(0xf0, 0xf0).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r)); //.nopw();
map(0xf1, 0xf1).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw2_r));
}
@@ -434,10 +434,10 @@ void nbmj8891_state::msjiken_io_map(address_map &map)
map(0x90, 0x90).r(m_nb1413m3, FUNC(nb1413m3_device::inputport0_r));
map(0xa0, 0xa0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport1_r), FUNC(nb1413m3_device::inputportsel_w));
map(0xb0, 0xb0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport2_r), FUNC(nb1413m3_device::sndrombank1_w));
- map(0xc0, 0xc0).r(m_nb1413m3, FUNC(nb1413m3_device::inputport3_r)); //AM_WRITENOP
+ map(0xc0, 0xc0).r(m_nb1413m3, FUNC(nb1413m3_device::inputport3_r)); //.nopw();
map(0xd0, 0xd0).w("dac", FUNC(dac_byte_interface::data_w));
-// AM_RANGE(0xe0, 0xe0) AM_WRITENOP
- map(0xf0, 0xf0).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r)); //AM_WRITENOP
+// map(0xe0, 0xe0).nopw();
+ map(0xf0, 0xf0).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r)); //.nopw();
map(0xf1, 0xf1).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw2_r));
}
@@ -456,8 +456,8 @@ void nbmj8891_state::scandal_io_map(address_map &map)
map(0xb0, 0xb0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport2_r), FUNC(nb1413m3_device::sndrombank1_w));
map(0xc0, 0xc0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport3_r), FUNC(nb1413m3_device::nmi_clock_w));
map(0xd0, 0xd0).w("dac", FUNC(dac_byte_interface::data_w));
-// AM_RANGE(0xe0, 0xe0) AM_WRITENOP
- map(0xf0, 0xf0).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r)); //AM_WRITENOP
+// map(0xe0, 0xe0).nopw();
+ map(0xf0, 0xf0).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r)); //.nopw();
map(0xf1, 0xf1).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw2_r));
}
@@ -477,7 +477,7 @@ void nbmj8891_state::scandalm_io_map(address_map &map)
map(0xb0, 0xb0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport2_r), FUNC(nb1413m3_device::sndrombank1_w));
map(0xc0, 0xc0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport3_r), FUNC(nb1413m3_device::nmi_clock_w));
map(0xd0, 0xd0).w("dac", FUNC(dac_byte_interface::data_w));
-// AM_RANGE(0xe0, 0xe0) AM_WRITENOP
+// map(0xe0, 0xe0).nopw();
map(0xf0, 0xf0).rw(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r), FUNC(nb1413m3_device::outcoin_w));
map(0xf1, 0xf1).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw2_r));
}
@@ -498,7 +498,7 @@ void nbmj8891_state::bananadr_io_map(address_map &map)
map(0xb0, 0xb0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport2_r), FUNC(nb1413m3_device::sndrombank1_w));
map(0xc0, 0xc0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport3_r), FUNC(nb1413m3_device::nmi_clock_w));
map(0xd0, 0xd0).w("dac", FUNC(dac_byte_interface::data_w));
-// AM_RANGE(0xe0, 0xe0) AM_WRITENOP
+// map(0xe0, 0xe0).nopw();
map(0xf0, 0xf0).rw(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r), FUNC(nb1413m3_device::outcoin_w));
map(0xf1, 0xf1).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw2_r));
}
@@ -513,7 +513,7 @@ void nbmj8891_state::lovehous_io_map(address_map &map)
map(0x60, 0x60).w(FUNC(nbmj8891_state::romsel_w));
map(0x70, 0x70).w(FUNC(nbmj8891_state::scrolly_w));
map(0x80, 0x81).w("fmsnd", FUNC(ym3812_device::write));
- map(0x90, 0x90).r(m_nb1413m3, FUNC(nb1413m3_device::inputport0_r)); //AM_WRITENOP
+ map(0x90, 0x90).r(m_nb1413m3, FUNC(nb1413m3_device::inputport0_r)); //.nopw();
map(0xa0, 0xa0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport1_r), FUNC(nb1413m3_device::inputportsel_w));
map(0xb0, 0xb0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport2_r), FUNC(nb1413m3_device::sndrombank1_w));
map(0xc0, 0xc0).portr("PORT0-2");
@@ -536,7 +536,7 @@ void nbmj8891_state::maiko_io_map(address_map &map)
map(0x90, 0x90).r(m_nb1413m3, FUNC(nb1413m3_device::inputport0_r));
map(0xa0, 0xa0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport1_r), FUNC(nb1413m3_device::inputportsel_w));
map(0xb0, 0xb0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport2_r), FUNC(nb1413m3_device::sndrombank1_w));
- map(0xc0, 0xc0).portr("PORT0-2"); //AM_WRITENOP
+ map(0xc0, 0xc0).portr("PORT0-2"); //.nopw();
map(0xd0, 0xd0).w("dac", FUNC(dac_byte_interface::data_w));
map(0xe0, 0xe0).w(FUNC(nbmj8891_state::vramsel_w));
map(0xf0, 0xf0).rw(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r), FUNC(nb1413m3_device::outcoin_w));
@@ -549,11 +549,11 @@ void nbmj8891_state::taiwanmb_io_map(address_map &map)
map(0x00, 0x7f).r(m_nb1413m3, FUNC(nb1413m3_device::sndrom_r));
map(0x81, 0x81).r("fmsnd", FUNC(ay8910_device::data_r));
map(0x82, 0x83).w("fmsnd", FUNC(ay8910_device::data_address_w));
- map(0x90, 0x90).r(m_nb1413m3, FUNC(nb1413m3_device::inputport0_r)); //AM_WRITENOP // ?
+ map(0x90, 0x90).r(m_nb1413m3, FUNC(nb1413m3_device::inputport0_r)); //.nopw(); // ?
map(0xa0, 0xa0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport1_r), FUNC(nb1413m3_device::inputportsel_w));
map(0xb0, 0xb0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport2_r), FUNC(nb1413m3_device::sndrombank1_w));
-// AM_RANGE(0xc0, 0xc0) AM_WRITENOP // ?
-// AM_RANGE(0xd0, 0xd0) AM_READ(ff_r) // irq ack? watchdog?
+// map(0xc0, 0xc0).nopw(); // ?
+// map(0xd0, 0xd0).r(FUNC(nbmj8891_state::ff_r)); // irq ack? watchdog?
map(0xd0, 0xd0).w("dac", FUNC(dac_byte_interface::data_w));
map(0xe0, 0xe0).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw3_h_r)).w(FUNC(nbmj8891_state::taiwanmb_gfxdraw_w)); // blitter draw start
map(0xe1, 0xe1).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw3_l_r));
diff --git a/src/mame/drivers/nbmj8991.cpp b/src/mame/drivers/nbmj8991.cpp
index 7718d3c8023..71542e9e8a4 100644
--- a/src/mame/drivers/nbmj8991.cpp
+++ b/src/mame/drivers/nbmj8991.cpp
@@ -176,7 +176,7 @@ void nbmj8991_state::galkoku_io_map(address_map &map)
map(0xb0, 0xb0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport2_r), FUNC(nb1413m3_device::sndrombank1_w));
map(0xc0, 0xc0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport3_r), FUNC(nb1413m3_device::nmi_clock_w));
map(0xd0, 0xd0).w("dac", FUNC(dac_byte_interface::data_w));
-// AM_RANGE(0xe0, 0xe0) AM_WRITENOP
+// map(0xe0, 0xe0).nopw();
map(0xf0, 0xf0).rw(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r), FUNC(nb1413m3_device::outcoin_w));
map(0xf1, 0xf1).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw2_r));
}
@@ -192,7 +192,7 @@ void nbmj8991_state::hyouban_io_map(address_map &map)
map(0xb0, 0xb0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport2_r), FUNC(nb1413m3_device::sndrombank1_w));
map(0xc0, 0xc0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport3_r), FUNC(nb1413m3_device::nmi_clock_w));
map(0xd0, 0xd0).w("dac", FUNC(dac_byte_interface::data_w));
-// AM_RANGE(0xe0, 0xe0) AM_WRITENOP
+// map(0xe0, 0xe0).nopw();
map(0xf0, 0xf0).rw(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r), FUNC(nb1413m3_device::outcoin_w));
map(0xf1, 0xf1).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw2_r));
}
@@ -204,9 +204,9 @@ void nbmj8991_state::pstadium_io_map(address_map &map)
map(0x80, 0x80).w(m_soundlatch, FUNC(generic_latch_8_device::write));
map(0x90, 0x90).r(m_nb1413m3, FUNC(nb1413m3_device::inputport0_r));
map(0xa0, 0xa0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport1_r), FUNC(nb1413m3_device::inputportsel_w));
- map(0xb0, 0xb0).r(m_nb1413m3, FUNC(nb1413m3_device::inputport2_r)); //AM_WRITENOP
+ map(0xb0, 0xb0).r(m_nb1413m3, FUNC(nb1413m3_device::inputport2_r)); //.nopw();
map(0xc0, 0xc0).r(m_nb1413m3, FUNC(nb1413m3_device::inputport3_r));
-// AM_RANGE(0xd0, 0xd0) AM_WRITENOP
+// map(0xd0, 0xd0).nopw();
map(0xf0, 0xf0).rw(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r), FUNC(nb1413m3_device::outcoin_w));
map(0xf8, 0xf8).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw2_r));
}
@@ -220,9 +220,9 @@ void nbmj8991_state::av2mj1bb_io_map(address_map &map)
map(0xa0, 0xa0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport1_r), FUNC(nb1413m3_device::inputportsel_w));
map(0xb0, 0xb0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport2_r), FUNC(nb1413m3_device::vcrctrl_w));
map(0xc0, 0xc0).r(m_nb1413m3, FUNC(nb1413m3_device::inputport3_r));
-// AM_RANGE(0xd0, 0xd0) AM_WRITENOP
+// map(0xd0, 0xd0).nopw();
map(0xf0, 0xf0).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r));
-// AM_RANGE(0xf0, 0xf0) AM_WRITENOP
+// map(0xf0, 0xf0).nopw();
map(0xf8, 0xf8).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw2_r));
}
diff --git a/src/mame/drivers/nemesis.cpp b/src/mame/drivers/nemesis.cpp
index 17641762669..bfbc2daba77 100644
--- a/src/mame/drivers/nemesis.cpp
+++ b/src/mame/drivers/nemesis.cpp
@@ -15,14 +15,14 @@ This entire hardware series is generally called 'GX400'
Salamander (Version J) (Game 587) PWB(B) 201012A GX587
Lifeforce (US) (Game 587) PWB(B) 201012A GX587
Lifeforce (Japan) (Game 587) PWB(B) 201012A GX587
+ City Bomber (World) (Game 787) PWB(B) 250102A
+ City Bomber (Japan) (Game 787) PWB(B) 250102A
+ Kitten Kaboodle (Game 712) PWB(B) 250102A
+ Nyan Nyan Panic (Japan) (Game 712) PWB(B) 250102A
+ Hyper Crash (Version D) (Game 790) GX790 PWB(B) 250093A
+ Hyper Crash (Version C) (Game 790) GX790 PWB(B) 250093A
TODO: find pcb pics for below
Black Panther (Game 604)
- City Bomber (World) (Game 787)
- City Bomber (Japan) (Game 787)
- Hyper Crash (Version D) (Game 790)
- Hyper Crash (Version C) (Game 790)
- Kitten Kaboodle (Game 712)
- Nyan Nyan Panic (Japan) (Game 712)
Most of these boards share the same bottom/gfx board, labeled 'GX400PWB // (A)200204B'
driver by Bryan McPhail
@@ -110,7 +110,9 @@ initials
#include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h"
#include "machine/74259.h"
+#include "machine/adc0804.h"
#include "machine/gen_latch.h"
+#include "machine/rescap.h"
#include "machine/watchdog.h"
#include "sound/ay8910.h"
#include "sound/ym2151.h"
@@ -328,13 +330,12 @@ READ16_MEMBER(nemesis_state::konamigt_input_word_r)
return ret;
}
-WRITE16_MEMBER(nemesis_state::selected_ip_word_w)
+void nemesis_state::selected_ip_w(uint8_t data)
{
- if (ACCESSING_BITS_0_7)
- m_selected_ip = data & 0xff; // latch the value
+ m_selected_ip = data; // latch the value
}
-READ16_MEMBER(nemesis_state::selected_ip_word_r)
+uint8_t nemesis_state::selected_ip_r()
{
switch (m_selected_ip & 0xf)
{ // From WEC Le Mans Schems:
@@ -672,7 +673,7 @@ void nemesis_state::citybomb_map(address_map &map)
map(0x0f0008, 0x0f0009).portr("DSW0");
map(0x0f0011, 0x0f0011).w("soundlatch", FUNC(generic_latch_8_device::write));
map(0x0f0018, 0x0f0019).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); /* probably */
- map(0x0f0020, 0x0f0021).r(FUNC(nemesis_state::selected_ip_word_r)).nopw(); /* WEC Le Mans 24 control? */
+ map(0x0f0021, 0x0f0021).rw("adc", FUNC(adc0804_device::read), FUNC(adc0804_device::write));
map(0x0f8000, 0x0f8001).w(FUNC(nemesis_state::salamand_control_port_word_w)); /* irq enable, flipscreen, etc. */
map(0x100000, 0x1bffff).rom();
map(0x200000, 0x20ffff).ram().w(FUNC(nemesis_state::nemesis_charram_word_w)).share("charram");
@@ -779,8 +780,9 @@ void nemesis_state::hcrash_map(address_map &map)
map(0x0c000a, 0x0c000b).portr("IN0");
map(0x0c2000, 0x0c2001).r(FUNC(nemesis_state::konamigt_input_word_r)); /* Konami GT control */
map(0x0c2800, 0x0c280f).w("intlatch", FUNC(ls259_device::write_d0)).umask16(0x00ff); // ???
- map(0x0c4000, 0x0c4001).portr("IN1").w(FUNC(nemesis_state::selected_ip_word_w));
- map(0x0c4002, 0x0c4003).r(FUNC(nemesis_state::selected_ip_word_r)).nopw(); /* WEC Le Mans 24 control. latches the value read previously */
+ map(0x0c4000, 0x0c4001).portr("IN1");
+ map(0x0c4001, 0x0c4001).w(FUNC(nemesis_state::selected_ip_w));
+ map(0x0c4003, 0x0c4003).rw("adc", FUNC(adc0804_device::read), FUNC(adc0804_device::write)); /* WEC Le Mans 24 control */
map(0x100000, 0x100fff).ram().w(FUNC(nemesis_state::nemesis_videoram2_word_w)).share("videoram2"); /* VRAM */
map(0x101000, 0x101fff).ram().w(FUNC(nemesis_state::nemesis_videoram1_word_w)).share("videoram1");
map(0x102000, 0x102fff).ram().w(FUNC(nemesis_state::nemesis_colorram2_word_w)).share("colorram2");
@@ -1359,7 +1361,8 @@ static INPUT_PORTS_START( citybomb )
PORT_DIPSETTING( 0x80, DEF_STR( Joystick ) )
PORT_START("IN2")
- KONAMI8_B123_UNK(2)
+ KONAMI8_B123(2)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("adc", adc0804_device, intr_r)
PORT_START("DSW0")
KONAMI_COINAGE_LOC(DEF_STR( Free_Play ), "Invalid", SW1)
@@ -1447,7 +1450,7 @@ static INPUT_PORTS_START( hcrash )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x03, NOTEQUALS, 0x02) // player 2?
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON3 )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) // must be 0 otherwise game freezes when using WEC Le Mans 24 cabinet
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("adc", adc0804_device, intr_r)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_START("IN2")
@@ -2080,6 +2083,9 @@ void nemesis_state::citybomb(machine_config &config)
Z80(config, m_audiocpu, 3579545); /* 3.579545 MHz */
m_audiocpu->set_addrmap(AS_PROGRAM, &nemesis_state::city_sound_map);
+ adc0804_device &adc(ADC0804(config, "adc", RES_K(10), CAP_P(150)));
+ adc.vin_callback().set(FUNC(nemesis_state::selected_ip_r));
+
WATCHDOG_TIMER(config, "watchdog");
/* video hardware */
@@ -2171,6 +2177,9 @@ void nemesis_state::hcrash(machine_config &config)
Z80(config, m_audiocpu, 14318180/4); /* 3.579545 MHz */
m_audiocpu->set_addrmap(AS_PROGRAM, &nemesis_state::sal_sound_map);
+ adc0804_device &adc(ADC0804(config, "adc", 640000)); // unknown clock (doesn't seem to be R/C here)
+ adc.vin_callback().set(FUNC(nemesis_state::selected_ip_r));
+
ls259_device &intlatch(LS259(config, "intlatch"));
intlatch.q_out_cb<0>().set_nop(); // ?
intlatch.q_out_cb<1>().set(FUNC(nemesis_state::irq2_enable_w)); // or at 0x0c2804 ?
diff --git a/src/mame/drivers/neogeocd.cpp b/src/mame/drivers/neogeocd.cpp
index 83c9c5019b7..d88fb7b64c5 100644
--- a/src/mame/drivers/neogeocd.cpp
+++ b/src/mame/drivers/neogeocd.cpp
@@ -926,7 +926,7 @@ void ngcd_state::neocd_audio_io_map(address_map &map)
map(0x04, 0x07).mirror(0xff00).rw(m_ym, FUNC(ym2610_device::read), FUNC(ym2610_device::write));
map(0x08, 0x08).mirror(0xff00).select(0x0010).w(FUNC(ngcd_state::audio_cpu_enable_nmi_w));
// banking reads are actually NOP on NeoCD? but some games still access them
-// AM_RANGE(0x08, 0x0b) AM_MIRROR(0x00f0) AM_SELECT(0xff00) AM_READ(audio_cpu_bank_select_r)
+// map(0x08, 0x0b).mirror(0x00f0).select(0xff00).r(FUNC(ngcd_state::audio_cpu_bank_select_r));
map(0x0c, 0x0c).mirror(0xff00).w(m_soundlatch2, FUNC(generic_latch_8_device::write));
// ??
diff --git a/src/mame/drivers/neoprint.cpp b/src/mame/drivers/neoprint.cpp
index a074b6c05f7..21e490bdd0d 100644
--- a/src/mame/drivers/neoprint.cpp
+++ b/src/mame/drivers/neoprint.cpp
@@ -259,7 +259,7 @@ WRITE8_MEMBER(neoprint_state::audio_result_w)
void neoprint_state::neoprint_map(address_map &map)
{
map(0x000000, 0x07ffff).rom();
-/* AM_RANGE(0x100000, 0x17ffff) multi-cart or banking, some writes points here if anything lies there too */
+/* map(0x100000, 0x17ffff) multi-cart or banking, some writes points here if anything lies there too */
map(0x200000, 0x20ffff).ram();
map(0x300000, 0x30ffff).ram().share("nvram");
map(0x400000, 0x43ffff).ram().share("npvidram");
@@ -356,11 +356,11 @@ void neoprint_state::nprsp_map(address_map &map)
void neoprint_state::neoprint_audio_map(address_map &map)
{
- map(0x0000, 0x7fff).rom();//AM_ROMBANK(NEOGEO_BANK_AUDIO_CPU_MAIN_BANK)
-// AM_RANGE(0x8000, 0xbfff) AM_ROMBANK(NEOGEO_BANK_AUDIO_CPU_CART_BANK + 3)
-// AM_RANGE(0xc000, 0xdfff) AM_ROMBANK(NEOGEO_BANK_AUDIO_CPU_CART_BANK + 2)
-// AM_RANGE(0xe000, 0xefff) AM_ROMBANK(NEOGEO_BANK_AUDIO_CPU_CART_BANK + 1)
-// AM_RANGE(0xf000, 0xf7ff) AM_ROMBANK(NEOGEO_BANK_AUDIO_CPU_CART_BANK + 0)
+ map(0x0000, 0x7fff).rom();//.bankr(NEOGEO_BANK_AUDIO_CPU_MAIN_BANK);
+// map(0x8000, 0xbfff).bankr(NEOGEO_BANK_AUDIO_CPU_CART_BANK + 3);
+// map(0xc000, 0xdfff).bankr(NEOGEO_BANK_AUDIO_CPU_CART_BANK + 2);
+// map(0xe000, 0xefff).bankr(NEOGEO_BANK_AUDIO_CPU_CART_BANK + 1);
+// map(0xf000, 0xf7ff).bankr(NEOGEO_BANK_AUDIO_CPU_CART_BANK + 0);
map(0xf800, 0xffff).ram();
}
@@ -374,16 +374,16 @@ void neoprint_state::neoprint_audio_map(address_map &map)
void neoprint_state::neoprint_audio_io_map(address_map &map)
{
- /*AM_RANGE(0x00, 0x00) AM_MIRROR(0xff00) AM_READWRITE(audio_command_r, audio_cpu_clear_nmi_w);*/ /* may not and NMI clear */
+ /*map(0x00, 0x00).mirror(0xff00).rw(FUNC(neoprint_state::audio_command_r), FUNC(neoprint_state::audio_cpu_clear_nmi_w));*/ /* may not and NMI clear */
map(0x00, 0x00).mirror(0xff00).r(FUNC(neoprint_state::audio_command_r)).nopw();
map(0x04, 0x07).mirror(0xff00).rw("ymsnd", FUNC(ym2610_device::read), FUNC(ym2610_device::write));
-// AM_RANGE(0x08, 0x08) AM_MIRROR(0xff00) /* write - NMI enable / acknowledge? (the data written doesn't matter) */
-// AM_RANGE(0x08, 0x08) AM_SELECT(0xfff0) AM_READ(audio_cpu_bank_select_f000_f7ff_r)
-// AM_RANGE(0x09, 0x09) AM_SELECT(0xfff0) AM_READ(audio_cpu_bank_select_e000_efff_r)
-// AM_RANGE(0x0a, 0x0a) AM_SELECT(0xfff0) AM_READ(audio_cpu_bank_select_c000_dfff_r)
-// AM_RANGE(0x0b, 0x0b) AM_SELECT(0xfff0) AM_READ(audio_cpu_bank_select_8000_bfff_r)
+// map(0x08, 0x08).mirror(0xff00); /* write - NMI enable / acknowledge? (the data written doesn't matter) */
+// map(0x08, 0x08).select(0xfff0).r(FUNC(neoprint_state::audio_cpu_bank_select_f000_f7ff_r));
+// map(0x09, 0x09).select(0xfff0).r(FUNC(neoprint_state::audio_cpu_bank_select_e000_efff_r));
+// map(0x0a, 0x0a).select(0xfff0).r(FUNC(neoprint_state::audio_cpu_bank_select_c000_dfff_r));
+// map(0x0b, 0x0b).select(0xfff0).r(FUNC(neoprint_state::audio_cpu_bank_select_8000_bfff_r));
map(0x0c, 0x0c).mirror(0xff00).w(FUNC(neoprint_state::audio_result_w));
-// AM_RANGE(0x18, 0x18) AM_MIRROR(0xff00) /* write - NMI disable? (the data written doesn't matter) */
+// map(0x18, 0x18).mirror(0xff00); /* write - NMI disable? (the data written doesn't matter) */
}
static INPUT_PORTS_START( neoprint )
diff --git a/src/mame/drivers/nes_vt.cpp b/src/mame/drivers/nes_vt.cpp
index 9a0b7faa00f..1378109963a 100644
--- a/src/mame/drivers/nes_vt.cpp
+++ b/src/mame/drivers/nes_vt.cpp
@@ -112,6 +112,7 @@ public:
void nes_vt_hum(machine_config &config);
void nes_vt_pjoy(machine_config &config);
void nes_vt_sp69(machine_config &config);
+ void nes_vt_ablping(machine_config &config);
void nes_vt_xx(machine_config &config);
void nes_vt_hh(machine_config &config);
@@ -139,6 +140,9 @@ private:
DECLARE_WRITE8_MEMBER(vt03_410x_w);
DECLARE_READ8_MEMBER(vt03_410x_r);
+ DECLARE_READ8_MEMBER(ablping_410f_r);
+ DECLARE_WRITE8_MEMBER(ablping_410f_w);
+
DECLARE_WRITE8_MEMBER(vt03_410x_pjoy_w);
DECLARE_WRITE8_MEMBER(vt03_410x_hum_w);
DECLARE_WRITE8_MEMBER(vt03_410x_sp69_w);
@@ -186,6 +190,7 @@ private:
void nes_vt_hum_map(address_map &map);
void nes_vt_pjoy_map(address_map &map);
void nes_vt_sp69_map(address_map &map);
+ void nes_vt_ablping_map(address_map &map);
void nes_vt_bt_map(address_map &map);
void nes_vt_cy_map(address_map &map);
void nes_vt_dg_map(address_map &map);
@@ -323,6 +328,20 @@ READ8_MEMBER(nes_vt_state::vt03_410x_r)
return m_410x[offset];
}
+// ablping polls this (also writes here) what is it? 4-bit DAC? PCM? (inputs only start responding once it finishes writing data on startup but takes longer than a sample should)
+READ8_MEMBER(nes_vt_state::ablping_410f_r)
+{
+ // needs to change at least
+ return machine().rand();//0x00;
+};
+
+WRITE8_MEMBER(nes_vt_state::ablping_410f_w)
+{
+ popmessage("ablping_410f_w %02x", data);
+};
+
+
+
WRITE8_MEMBER(nes_vt_state::vt03_410x_hum_w)
{
scrambled_410x_w(offset, data, vt_scramble_mode::HUMMER);
@@ -337,6 +356,7 @@ WRITE8_MEMBER(nes_vt_state::vt03_410x_sp69_w)
}
// Source: https://wiki.nesdev.com/w/index.php/NES_2.0_submappers/Proposals#NES_2.0_Mapper_256
+// TODO: split this into per machine configs, not enum indexed table
static const uint16_t descram_4107_4108[5][2] = {
{0x7, 0x8},
{0x7, 0x8},
@@ -954,6 +974,7 @@ int nes_vt_state::calculate_real_video_address(int addr, int extended, int readt
some consoles have scrambled registers for crude copy protection
*/
+// TODO: split this into per machine configs, not enum indexed table
static const uint8_t descram_8000_mmc3[5][8] = {
{0x6, 0x7, 0x2, 0x3, 0x4, 0x5, 0x7, 0x8},
{0x5, 0x4, 0x3, 0x2, 0x7, 0x6, 0x7, 0x8},
@@ -1208,6 +1229,13 @@ void nes_vt_state::nes_vt_sp69_map(address_map &map)
map(0x8000, 0xffff).w(FUNC(nes_vt_state::vt03_8000_sp69_w));
}
+void nes_vt_state::nes_vt_ablping_map(address_map &map)
+{
+ nes_vt_sp69_map(map);
+ map(0x410f, 0x410f).rw(FUNC(nes_vt_state::ablping_410f_r), FUNC(nes_vt_state::ablping_410f_w));
+}
+
+
void nes_vt_state::nes_vt_cy_map(address_map &map)
{
@@ -1433,6 +1461,12 @@ void nes_vt_state::nes_vt_sp69(machine_config &config)
m_ppu->set_201x_descramble(descram_ppu_2012_2017[4]);
}
+void nes_vt_state::nes_vt_ablping(machine_config &config)
+{
+ nes_vt_sp69(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &nes_vt_state::nes_vt_ablping_map);
+}
+
void nes_vt_state::nes_vt_xx(machine_config &config)
{
nes_vt(config);
@@ -1740,6 +1774,11 @@ ROM_START( ddrstraw )
ROM_LOAD( "straws-ddr.bin", 0x00000, 0x200000, CRC(ce94e53a) SHA1(10c6970205a4df28086029c0a348225f57bf0cc5) ) // 26LV160 Flash
ROM_END
+ROM_START( ablping )
+ ROM_REGION( 0x200000, "mainrom", 0 )
+ ROM_LOAD( "abl_pingpong.bin", 0x00000, 0x200000, CRC(b31de1fb) SHA1(94e8afb2315ba1fa0892191c8e1832391e401c70) )
+ROM_END
+
#if 0
ROM_START( mc_15kin1 )
ROM_REGION( 0x200000, "mainrom", 0 )
@@ -1878,6 +1917,11 @@ CONS( 200?, ii32in1, 0, 0, nes_vt, nes_vt, nes_vt_state, empty_init, "Int
// this has 'Shark' and 'Octopus' etc. like mc_dgear but uses scrambled bank registers
CONS( 200?, mc_sp69, 0, 0, nes_vt_sp69, nes_vt, nes_vt_state, empty_init, "<unknown>", "Sports Game 69 in 1", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND)
+// this game was also sold by dreamGEAR and several others companies, each time with a different name and different case, although the dumped version was from ABL, and it hasn't been confirmed that the ROMs are identical for the other units
+// Super Ping Pong appears on the title screen, but not the box / product art which simply has "Ping Pong Plug & Play TV Game" on front/back/bottom/manual, and "Table Tennis Plug & Play TV Game" on left/right sides. Product code is PP1100
+// PCB has PP1100-MB 061110 on it, possible date YYMMDD code? (pinball is 050329, guitar fever is 070516, air blaster 050423, kickboxing 061011 etc.)
+CONS( 2006, ablping, 0, 0, nes_vt_ablping, nes_vt, nes_vt_state, empty_init, "Advance Bright Ltd", "Ping Pong / Table Tennis / Super Ping Pong (PP1100, ABL TV Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+
// CPU die is marked 'VH2009' There's also a 62256 RAM chip on the PCB, some scrambled opcodes?
CONS( 200?, polmega, 0, 0, nes_vt, nes_vt, nes_vt_state, empty_init, "Polaroid", "Megamax GPD001SDG", MACHINE_NOT_WORKING )
CONS( 200?, silv35, 0, 0, nes_vt, nes_vt, nes_vt_state, empty_init, "SilverLit", "35 in 1 Super Twins", MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/next.cpp b/src/mame/drivers/next.cpp
index 61aeadf52f4..07c9636e756 100644
--- a/src/mame/drivers/next.cpp
+++ b/src/mame/drivers/next.cpp
@@ -899,38 +899,38 @@ void next_state::next_mem(address_map &map)
map(0x02000000, 0x020001ff).mirror(0x300200).rw(FUNC(next_state::dma_ctrl_r), FUNC(next_state::dma_ctrl_w));
map(0x02004000, 0x020041ff).mirror(0x300200).rw(FUNC(next_state::dma_regs_r), FUNC(next_state::dma_regs_w));
map(0x02006000, 0x0200600f).mirror(0x300000).m(net, FUNC(mb8795_device::map));
-// AM_RANGE(0x02006010, 0x02006013) AM_MIRROR(0x300000) memory timing
+// map(0x02006010, 0x02006013).mirror(0x300000); memory timing
map(0x02007000, 0x02007003).mirror(0x300000).r(FUNC(next_state::irq_status_r));
map(0x02007800, 0x02007803).mirror(0x300000).rw(FUNC(next_state::irq_mask_r), FUNC(next_state::irq_mask_w));
map(0x02008000, 0x02008003).mirror(0x300000).r(FUNC(next_state::dsp_r));
map(0x0200c000, 0x0200c003).mirror(0x300000).r(FUNC(next_state::scr1_r));
map(0x0200c800, 0x0200c803).mirror(0x300000).r(FUNC(next_state::rom_map_r));
map(0x0200d000, 0x0200d003).mirror(0x300000).rw(FUNC(next_state::scr2_r), FUNC(next_state::scr2_w));
-// AM_RANGE(0x0200d800, 0x0200d803) AM_MIRROR(0x300000) RMTINT
+// map(0x0200d800, 0x0200d803).mirror(0x300000); RMTINT
map(0x0200e000, 0x0200e00b).mirror(0x300000).m(keyboard, FUNC(nextkbd_device::amap));
-// AM_RANGE(0x0200f000, 0x0200f003) AM_MIRROR(0x300000) printer
-// AM_RANGE(0x02010000, 0x02010003) AM_MIRROR(0x300000) brightness
+// map(0x0200f000, 0x0200f003).mirror(0x300000); printer
+// map(0x02010000, 0x02010003).mirror(0x300000); brightness
map(0x02012000, 0x0201201f).mirror(0x300000).m(mo, FUNC(nextmo_device::map));
map(0x02014000, 0x0201400f).mirror(0x300000).m(scsi, FUNC(ncr5390_device::map));
map(0x02014020, 0x02014023).mirror(0x300000).rw(FUNC(next_state::scsictrl_r), FUNC(next_state::scsictrl_w));
map(0x02016000, 0x02016003).mirror(0x300000).rw(FUNC(next_state::timer_data_r), FUNC(next_state::timer_data_w));
map(0x02016004, 0x02016007).mirror(0x300000).rw(FUNC(next_state::timer_ctrl_r), FUNC(next_state::timer_ctrl_w));
map(0x02018000, 0x02018003).mirror(0x300000).rw(scc, FUNC(scc8530_t::reg_r), FUNC(scc8530_t::reg_w));
-// AM_RANGE(0x02018004, 0x02018007) AM_MIRROR(0x300000) SCC CLK
-// AM_RANGE(0x02018190, 0x02018197) AM_MIRROR(0x300000) warp 9c DRAM timing
-// AM_RANGE(0x02018198, 0x0201819f) AM_MIRROR(0x300000) warp 9c VRAM timing
+// map(0x02018004, 0x02018007).mirror(0x300000); SCC CLK
+// map(0x02018190, 0x02018197).mirror(0x300000); warp 9c DRAM timing
+// map(0x02018198, 0x0201819f).mirror(0x300000); warp 9c VRAM timing
map(0x0201a000, 0x0201a003).mirror(0x300000).r(FUNC(next_state::event_counter_r)); // EVENTC
-// AM_RANGE(0x020c0000, 0x020c0004) AM_MIRROR(0x300000) BMAP
+// map(0x020c0000, 0x020c0004).mirror(0x300000); BMAP
map(0x020c0030, 0x020c0037).mirror(0x300000).rw(FUNC(next_state::phy_r), FUNC(next_state::phy_w));
map(0x04000000, 0x07ffffff).ram(); //work ram
-// AM_RANGE(0x0c000000, 0x0c03ffff) video RAM w A+B-AB function
-// AM_RANGE(0x0d000000, 0x0d03ffff) video RAM w (1-A)B function
-// AM_RANGE(0x0e000000, 0x0e03ffff) video RAM w ceil(A+B) function
-// AM_RANGE(0x0f000000, 0x0f03ffff) video RAM w AB function
-// AM_RANGE(0x10000000, 0x1003ffff) main RAM w A+B-AB function
-// AM_RANGE(0x14000000, 0x1403ffff) main RAM w (1-A)B function
-// AM_RANGE(0x18000000, 0x1803ffff) main RAM w ceil(A+B) function
-// AM_RANGE(0x1c000000, 0x1c03ffff) main RAM w AB function
+// map(0x0c000000, 0x0c03ffff) video RAM w A+B-AB function
+// map(0x0d000000, 0x0d03ffff) video RAM w (1-A)B function
+// map(0x0e000000, 0x0e03ffff) video RAM w ceil(A+B) function
+// map(0x0f000000, 0x0f03ffff) video RAM w AB function
+// map(0x10000000, 0x1003ffff) main RAM w A+B-AB function
+// map(0x14000000, 0x1403ffff) main RAM w (1-A)B function
+// map(0x18000000, 0x1803ffff) main RAM w ceil(A+B) function
+// map(0x1c000000, 0x1c03ffff) main RAM w AB function
}
void next_state::next_0b_m_nofdc_mem(address_map &map)
diff --git a/src/mame/drivers/nexus3d.cpp b/src/mame/drivers/nexus3d.cpp
index 3b7486d28aa..695c99a9a3e 100644
--- a/src/mame/drivers/nexus3d.cpp
+++ b/src/mame/drivers/nexus3d.cpp
@@ -318,7 +318,7 @@ void nexus3d_state::nexus3d(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &nexus3d_state::nexus3d_map);
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
- m_screen->set_raw((XTAL(14'318'180)*2), 454*2, 0, 640, 262*2, 0, 480); // not accurate, needs CRTC understanding
+ m_screen->set_raw((XTAL(14'318'181)*2), 454*2, 0, 640, 262*2, 0, 480); // not accurate, needs CRTC understanding
m_screen->set_screen_update(FUNC(nexus3d_state::screen_update));
m_screen->screen_vblank().set(FUNC(nexus3d_state::screen_vblank));
m_screen->set_palette("palette");
diff --git a/src/mame/drivers/nforcepc.cpp b/src/mame/drivers/nforcepc.cpp
index be41b247fc9..4d6cac26352 100644
--- a/src/mame/drivers/nforcepc.cpp
+++ b/src/mame/drivers/nforcepc.cpp
@@ -28,6 +28,7 @@
#include "machine/intelfsh.h"
#include "machine/atapicdr.h"
#include "machine/idehd.h"
+#include "video/virge_pci.h"
#include "includes/xbox_pci.h"
#include "includes/nforcepc.h"
@@ -755,6 +756,7 @@ void nforcepc_state::nforcepc(machine_config &config)
ide.sec_interrupt_handler().set(":pci:01.0", FUNC(mcpx_isalpc_device::irq15));
/*subdevice<ide_controller_32_device>(":pci:09.0:ide")->options(nforcepc_ata_devices, "hdd", "cdrom", true);*/
NV2A_AGP(config, ":pci:1e.0", 0, 0x10de01b7, 0); // 10de:01b7 NVIDIA Corporation nForce AGP to PCI Bridge
+ VIRGEDX_PCI(config, ":pci:0a.0", 0);
SST_49LF020(config, "bios", 0);
}
diff --git a/src/mame/drivers/ngen.cpp b/src/mame/drivers/ngen.cpp
index 85c65c2855d..a3bf0d6e4f8 100644
--- a/src/mame/drivers/ngen.cpp
+++ b/src/mame/drivers/ngen.cpp
@@ -874,13 +874,13 @@ void ngen_state::ngen_io(address_map &map)
map(0x0000, 0x0001).rw(FUNC(ngen_state::xbus_r), FUNC(ngen_state::xbus_w));
// Floppy/Hard disk module
-// AM_RANGE(0x0100, 0x0107) AM_DEVREADWRITE8("fdc",wd2797_t,read,write,0x00ff) // a guess for now
-// AM_RANGE(0x0108, 0x0109) AM_WRITE8(fdc_control_w,0x00ff)
-// AM_RANGE(0x010a, 0x010b) AM_WRITE8(hdc_control_w,0x00ff)
-// AM_RANGE(0x010e, 0x010f) AM_WRITE8(disk_addr_ext,0x00ff) // X-Bus extended address register
-// AM_RANGE(0x0110, 0x0117) AM_DEVREADWRITE8("fdc_timer",pit8253_device,read,write,0x00ff)
+// map(0x0100, 0x0107).rw("fdc", FUNC(wd2797_t::read), FUNC(wd2797_t::write)).umask16(0x00ff); // a guess for now
+// map(0x0108, 0x0108).w(FUNC(ngen_state::fdc_control_w));
+// map(0x010a, 0x010a).w(FUNC(ngen_state::hdc_control_w));
+// map(0x010e, 0x010e).w(FUNC(ngen_state::disk_addr_ext)); // X-Bus extended address register
+// map(0x0110, 0x0117).rw("fdc_timer", FUNC(pit8253_device::read), FUNC(pit8253_device::write)).umask16(0x00ff);
// 0x0120-0x012f - WD1010 Winchester disk controller (unemulated)
-// AM_RANGE(0x0130, 0x0137) AM_DEVREADWRITE8("hdc_timer",pit8253_device,read,write,0x00ff)
+// map(0x0130, 0x0137).rw("hdc_timer", FUNC(pit8253_device::read), FUNC(pit8253_device::write)).umask16(0x00ff);
}
@@ -908,7 +908,7 @@ void ngen_state::ngen386i_mem(address_map &map)
void ngen_state::ngen386_io(address_map &map)
{
map(0x0000, 0x0001).rw(FUNC(ngen_state::xbus_r), FUNC(ngen_state::xbus_w));
-// AM_RANGE(0xf800, 0xfeff) AM_READWRITE16(peripheral_r, peripheral_w,0xffffffff)
+// map(0xf800, 0xfeff).rw(FUNC(ngen_state::peripheral_r), FUNC(ngen_state::peripheral_w));
map(0xfd08, 0xfd0b).rw(FUNC(ngen_state::b38_crtc_r), FUNC(ngen_state::b38_crtc_w));
map(0xfd0c, 0xfd0f).rw(FUNC(ngen_state::b38_keyboard_r), FUNC(ngen_state::b38_keyboard_w));
}
diff --git a/src/mame/drivers/nmk16.cpp b/src/mame/drivers/nmk16.cpp
index 2c0aa1d27f0..d396617dce7 100644
--- a/src/mame/drivers/nmk16.cpp
+++ b/src/mame/drivers/nmk16.cpp
@@ -982,11 +982,11 @@ void nmk16_state::tdragon_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
map(0x044022, 0x044023).nopr(); /* No Idea */
-// AM_RANGE(0x0b0000, 0x0b7fff) AM_RAM /* Work RAM */
-// AM_RANGE(0x0b8000, 0x0b8fff) AM_RAM AM_SHARE("spriteram") /* Sprite RAM */
-// AM_RANGE(0x0b9000, 0x0bdfff) AM_RAM AM_SHARE("mcu_work_ram") /* Work RAM */
-// AM_RANGE(0x0be000, 0x0befff) AM_READWRITE(mcu_shared_r,tdragon_mcu_shared_w) AM_SHARE("mcu_shared_ram") /* Work RAM */
-// AM_RANGE(0x0bf000, 0x0bffff) AM_RAM /* Work RAM */
+// map(0x0b0000, 0x0b7fff).ram(); /* Work RAM */
+// map(0x0b8000, 0x0b8fff).ram().share("spriteram"); /* Sprite RAM */
+// map(0x0b9000, 0x0bdfff).ram().share("mcu_work_ram"); /* Work RAM */
+// map(0x0be000, 0x0befff).rw(FUNC(nmk16_state::mcu_shared_r), FUNC(nmk16_state::tdragon_mcu_shared_w)).share("mcu_shared_ram"); /* Work RAM */
+// map(0x0bf000, 0x0bffff).ram(); /* Work RAM */
map(0x0b0000, 0x0bffff).ram().share("mainram");
map(0x0c0000, 0x0c0001).portr("IN0");
map(0x0c0002, 0x0c0003).portr("IN1");
@@ -1034,7 +1034,7 @@ void nmk16_state::ssmissin_map(address_map &map)
map(0x0c0000, 0x0c0001).portr("IN0");
map(0x0c0004, 0x0c0005).portr("IN1");
map(0x0c0006, 0x0c0007).portr("DSW1");
-// AM_RANGE(0x0c000e, 0x0c000f) AM_READ(??)
+// map(0x0c000e, 0x0c000f).r(FUNC(nmk16_state::??));
map(0x0c0015, 0x0c0015).w(FUNC(nmk16_state::flipscreen_w)); /* Maybe */
map(0x0c0019, 0x0c0019).w(FUNC(nmk16_state::tilebank_w)); /* Tile Bank ? */
map(0x0c001f, 0x0c001f).w(m_soundlatch, FUNC(generic_latch_8_device::write));
@@ -6646,7 +6646,7 @@ ROM_START( gunnailb )
ROM_LOAD16_BYTE( "27c020.6e", 0x00001, 0x40000, CRC(6ba7c54d) SHA1(3932b96d2f1f541f8679524de3bb8867aded9f83) )
ROM_REGION( 0x20000, "audiocpu", 0 )
- ROM_LOAD( "27c010.3b", 0x00000, 0x20000, CRC(6e0a5df0) SHA1(616b7c7aaf52a9a55b63c60717c1866940635cd4) )
+ ROM_LOAD( "27c010.3b", 0x00000, 0x20000, CRC(6e0a5df0) SHA1(616b7c7aaf52a9a55b63c60717c1866940635cd4) ) // matches the one for Kaneko's Air Buster
ROM_REGION( 0x020000, "fgtile", 0 )
ROM_LOAD( "27c010.5g", 0x000000, 0x020000, CRC(6d2ca620) SHA1(6ed3b9987d1740f36235e33bdd66867c24f93f7e) ) /* 8x8 tiles */
@@ -6697,7 +6697,7 @@ ROM_START( macross2k ) /* Title screen only shows Macross II, no Kanji. Suspect
ROM_LOAD( "mcrs2j.2", 0x00000, 0x20000, CRC(b4aa8ac7) SHA1(73a6de56cbfb468450d9b39fcbae0362f242f37b) ) /* banked */
ROM_REGION( 0x020000, "fgtile", 0 )
- ROM_LOAD( "2.1", 0x000000, 0x020000, CRC(e8ab17f9) SHA1(9396e29a134698db59b7faae19dd8fb947cde752) ) /* 8x8 tiles - non descript ROM label "2" */
+ ROM_LOAD( "2.1", 0x000000, 0x020000, CRC(372dfa11) SHA1(92934128c82191a08a359ec690576bc5888f085e) ) /* 8x8 tiles - non descript ROM label "2" */
ROM_REGION( 0x200000, "bgtile", 0 )
ROM_LOAD( "bp932an.a04", 0x000000, 0x200000, CRC(c4d77ff0) SHA1(aca60a3f5f89265e7e3799e5d80ea8196fb11ff3) ) /* 16x16 tiles */
diff --git a/src/mame/drivers/norautp.cpp b/src/mame/drivers/norautp.cpp
index 140039ab67d..3d055cce2ea 100644
--- a/src/mame/drivers/norautp.cpp
+++ b/src/mame/drivers/norautp.cpp
@@ -845,9 +845,9 @@ void norautp_state::norautp_portmap(address_map &map)
map(0x60, 0x63).mirror(0x1c).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0xa0, 0xa3).mirror(0x1c).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0xc0, 0xc3).mirror(0x3c).rw("ppi8255_2", FUNC(i8255_device::read), FUNC(i8255_device::write));
- //AM_RANGE(0xc0, 0xc0) AM_MIRROR(0x3c) AM_READWRITE(vram_data_r, vram_data_w)
- //AM_RANGE(0xc1, 0xc1) AM_MIRROR(0x3c) AM_WRITE(vram_addr_w)
- //AM_RANGE(0xc2, 0xc2) AM_MIRROR(0x3c) AM_READ(test_r)
+ //map(0xc0, 0xc0).mirror(0x3c).rw(FUNC(norautp_state::vram_data_r), FUNC(norautp_state::vram_data_w));
+ //map(0xc1, 0xc1).mirror(0x3c).w(FUNC(norautp_state::vram_addr_w));
+ //map(0xc2, 0xc2).mirror(0x3c).r(FUNC(norautp_state::test_r));
map(0xef, 0xef).r(FUNC(norautp_state::test2_r));
}
@@ -874,7 +874,7 @@ void norautp_state::nortest1_map(address_map &map)
void norautp_state::norautxp_map(address_map &map)
{
-// ADDRESS_MAP_GLOBAL_MASK(~0x4000)
+// map.global_mask(~0x4000);
map.global_mask(0x7fff);
map(0x0000, 0x3fff).rom(); /* need to be checked */
map(0x6000, 0x67ff).ram().share("nvram"); /* HM6116 */
@@ -952,7 +952,7 @@ void norautp_state::ssjkrpkr_map(address_map &map)
void norautp_state::dphltest_map(address_map &map)
{
-// ADDRESS_MAP_GLOBAL_MASK(0x7fff) /* A15 not connected */
+// map.global_mask(0x7fff); /* A15 not connected */
map(0x0000, 0x6fff).rom();
map(0x7000, 0x7fff).ram();
map(0x8000, 0x87ff).ram().share("nvram");
diff --git a/src/mame/drivers/notetaker.cpp b/src/mame/drivers/notetaker.cpp
index 26141e200cc..61bd2d3abda 100644
--- a/src/mame/drivers/notetaker.cpp
+++ b/src/mame/drivers/notetaker.cpp
@@ -731,9 +731,9 @@ void notetaker_state::ep_io(address_map &map)
{
map.unmap_value_high();
map(0x800, 0x803).mirror(0x07fc).rw(m_ep_pic, FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff);
- //map(0x1000, 0x1001) AM_MIRROR(0x07fe) AM_DEVREADWRITE("debug8255", 8255_device, read, write) // debugger board 8255, is this the same one as the iop accesses? or are these two 8255s on separate cards?
+ //map(0x1000, 0x1001).mirror(0x07fe).rw("debug8255", FUNC(8255_device::read), FUNC(8255_device::write)); // debugger board 8255, is this the same one as the iop accesses? or are these two 8255s on separate cards?
map(0x2000, 0x2001).mirror(0x07fe).w(FUNC(notetaker_state::EPConReg_w)); // emu processor control reg & leds
- //map(0x4000, 0x4001) AM_MIRROR(0x07fe) AM_WRITE(EmuClearParity_w) // writes here clear the local 8k-ram parity error register
+ //map(0x4000, 0x4001).mirror(0x07fe).w(FUNC(notetaker_state::EmuClearParity_w)); // writes here clear the local 8k-ram parity error register
}
/* Input ports */
diff --git a/src/mame/drivers/novag_savant.cpp b/src/mame/drivers/novag_savant.cpp
index b4f9337da3e..0d0eb6697f1 100644
--- a/src/mame/drivers/novag_savant.cpp
+++ b/src/mame/drivers/novag_savant.cpp
@@ -414,8 +414,8 @@ ROM_START( savant )
ROM_REGION( 0x0800, "mcu", 0 )
ROM_LOAD("sl90547.u29", 0x0000, 0x0800, CRC(6fbf2aa0) SHA1(18e673ba5b806b397dd3d350525b5467c25a0d94) )
- ROM_REGION( 763850, "screen", 0)
- ROM_LOAD("savant.svg", 0, 763850, CRC(f29a5ca4) SHA1(9fabfb86e6235057b60232e987872a645ee4112e) )
+ ROM_REGION( 763958, "screen", 0)
+ ROM_LOAD("savant.svg", 0, 763958, CRC(44e6fa08) SHA1(26779470f83982ab150cd3d343c04a9ce5b93365) )
ROM_END
ROM_START( savant2 )
@@ -428,8 +428,8 @@ ROM_START( savant2 )
ROM_REGION( 0x0800, "mcu", 0 )
ROM_LOAD("sl90547.u29", 0x0000, 0x0800, CRC(6fbf2aa0) SHA1(18e673ba5b806b397dd3d350525b5467c25a0d94) )
- ROM_REGION( 763850, "screen", 0)
- ROM_LOAD("savant.svg", 0, 763850, CRC(f29a5ca4) SHA1(9fabfb86e6235057b60232e987872a645ee4112e) )
+ ROM_REGION( 763958, "screen", 0)
+ ROM_LOAD("savant.svg", 0, 763958, CRC(44e6fa08) SHA1(26779470f83982ab150cd3d343c04a9ce5b93365) )
ROM_END
} // anonymous namespace
diff --git a/src/mame/drivers/ob68k1a.cpp b/src/mame/drivers/ob68k1a.cpp
index b811463076f..4451098abec 100644
--- a/src/mame/drivers/ob68k1a.cpp
+++ b/src/mame/drivers/ob68k1a.cpp
@@ -114,8 +114,8 @@ void ob68k1a_state::ob68k1a_mem(address_map &map)
map(0xffff00, 0xffff03).rw(m_acia0, FUNC(acia6850_device::read), FUNC(acia6850_device::write)).umask16(0x00ff);
map(0xffff10, 0xffff10).w(COM8116_TAG, FUNC(com8116_device::str_stt_w));
map(0xffff20, 0xffff23).rw(m_acia1, FUNC(acia6850_device::read), FUNC(acia6850_device::write)).umask16(0x00ff);
-// AM_RANGE(0xffff40, 0xffff47) AM_DEVREADWRITE8(MC6821_0_TAG, pia6821_device, read, write, 0x00ff)
-// AM_RANGE(0xffff40, 0xffff47) AM_DEVREADWRITE8(MC6821_1_TAG, pia6821_device, read, write, 0xff00)
+// map(0xffff40, 0xffff47).rw(MC6821_0_TAG, FUNC(pia6821_device::read), FUNC(pia6821_device::write)).umask16(0x00ff);
+// map(0xffff40, 0xffff47).rw(MC6821_1_TAG, FUNC(pia6821_device::read), FUNC(pia6821_device::write)).umask16(0xff00);
map(0xffff40, 0xffff47).rw(FUNC(ob68k1a_state::pia_r), FUNC(ob68k1a_state::pia_w));
map(0xffff60, 0xffff6f).rw(MC6840_TAG, FUNC(ptm6840_device::read), FUNC(ptm6840_device::write)).umask16(0x00ff);
}
diff --git a/src/mame/drivers/okean240.cpp b/src/mame/drivers/okean240.cpp
index 8ea2f8b31d5..207089c5ae5 100644
--- a/src/mame/drivers/okean240.cpp
+++ b/src/mame/drivers/okean240.cpp
@@ -258,16 +258,16 @@ void okean240_state::okean240a_io(address_map &map)
map(0xa0, 0xa1).rw("uart", FUNC(i8251_device::read), FUNC(i8251_device::write));
map(0xc0, 0xc3).rw("ppic", FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0xe0, 0xe3).rw("ppie", FUNC(i8255_device::read), FUNC(i8255_device::write));
- // AM_RANGE(0x00, 0x1f)=ppa00.data
- // AM_RANGE(0x20, 0x23)=dsk.data
- // AM_RANGE(0x24, 0x24)=dsk.wait
- // AM_RANGE(0x25, 0x25)=dskctl.data
- // AM_RANGE(0x40, 0x5f)=ppa40.data
- // AM_RANGE(0x60, 0x7f)=tim.data
- // AM_RANGE(0x80, 0x81)=intctl.data
- // AM_RANGE(0xa0, 0xa1)=comport.data
- // AM_RANGE(0xc0, 0xdf)=ppaC0.data
- // AM_RANGE(0xe0, 0xff)=ppaE0.data
+ // map(0x00, 0x1f)=ppa00.data
+ // map(0x20, 0x23)=dsk.data
+ // map(0x24, 0x24)=dsk.wait
+ // map(0x25, 0x25)=dskctl.data
+ // map(0x40, 0x5f)=ppa40.data
+ // map(0x60, 0x7f)=tim.data
+ // map(0x80, 0x81)=intctl.data
+ // map(0xa0, 0xa1)=comport.data
+ // map(0xc0, 0xdf)=ppaC0.data
+ // map(0xe0, 0xff)=ppaE0.data
}
void okean240_state::okean240t_io(address_map &map)
diff --git a/src/mame/drivers/olyboss.cpp b/src/mame/drivers/olyboss.cpp
index fa4083ba1bb..640725d0485 100644
--- a/src/mame/drivers/olyboss.cpp
+++ b/src/mame/drivers/olyboss.cpp
@@ -175,11 +175,11 @@ void olyboss_state::olyboss_io(address_map &map)
map.unmap_value_high();
map(0x0, 0x8).rw(m_dma, FUNC(i8257_device::read), FUNC(i8257_device::write));
map(0x10, 0x11).m(m_fdc, FUNC(upd765a_device::map));
- //AM_RANGE(0x20, 0x20) //beeper?
+ //map(0x20, 0x20) //beeper?
map(0x30, 0x30).rw(m_uic, FUNC(am9519_device::data_r), FUNC(am9519_device::data_w));
map(0x31, 0x31).rw(m_uic, FUNC(am9519_device::stat_r), FUNC(am9519_device::cmd_w));
map(0x40, 0x43).rw(m_ppi, FUNC(i8255_device::read), FUNC(i8255_device::write));
- //AM_RANGE(0x50, 0x53) COM2651
+ //map(0x50, 0x53) COM2651
map(0x60, 0x60).rw(FUNC(olyboss_state::fdcctrl_r), FUNC(olyboss_state::fdcctrl_w));
map(0x80, 0x81).rw(m_crtc, FUNC(upd3301_device::read), FUNC(upd3301_device::write));
map(0x82, 0x84).w(FUNC(olyboss_state::vchrmap_w));
diff --git a/src/mame/drivers/ondra.cpp b/src/mame/drivers/ondra.cpp
index 308ffe6c857..4b24420ba71 100644
--- a/src/mame/drivers/ondra.cpp
+++ b/src/mame/drivers/ondra.cpp
@@ -34,8 +34,8 @@ void ondra_state::ondra_io(address_map &map)
map.global_mask(0x0b);
map.unmap_value_high();
map(0x03, 0x03).w(FUNC(ondra_state::ondra_port_03_w));
- //AM_RANGE(0x09, 0x09) AM_WRITE(ondra_port_09_w)
- //AM_RANGE(0x0a, 0x0a) AM_WRITE(ondra_port_0a_w)
+ //map(0x09, 0x09).w(FUNC(ondra_state::ondra_port_09_w);
+ //map(0x0a, 0x0a).w(FUNC(ondra_state::ondra_port_0a_w);
}
/* Input ports */
diff --git a/src/mame/drivers/osborne1.cpp b/src/mame/drivers/osborne1.cpp
index 21d1f6ea938..a2befac49e2 100644
--- a/src/mame/drivers/osborne1.cpp
+++ b/src/mame/drivers/osborne1.cpp
@@ -349,7 +349,7 @@ void osborne1nv_state::osborne1nv(machine_config &config)
osborne1(config);
m_maincpu->set_addrmap(AS_IO, &osborne1nv_state::osborne1nv_io);
- m_screen->set_palette(finder_base::DUMMY_TAG);
+ m_screen->set_no_palette();
m_screen->set_screen_update("crtc", FUNC(mc6845_device::screen_update));
sy6545_1_device &crtc(SY6545_1(config, "crtc", XTAL(12'288'000)/8));
diff --git a/src/mame/drivers/othunder.cpp b/src/mame/drivers/othunder.cpp
index 6a082473be4..1c74e0cb0cf 100644
--- a/src/mame/drivers/othunder.cpp
+++ b/src/mame/drivers/othunder.cpp
@@ -409,7 +409,7 @@ void othunder_state::othunder_map(address_map &map)
map(0x000000, 0x07ffff).rom();
map(0x080000, 0x08ffff).ram();
map(0x090000, 0x09000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0x00ff);
-// AM_RANGE(0x09000c, 0x09000d) AM_WRITENOP /* ?? (keeps writing 0x77) */
+// map(0x09000c, 0x09000d).nopw(); /* ?? (keeps writing 0x77) */
map(0x100000, 0x100007).rw(m_tc0110pcr, FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_rbswap_word_w)); /* palette */
map(0x200000, 0x20ffff).rw(m_tc0100scn, FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x220000, 0x22000f).rw(m_tc0100scn, FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
diff --git a/src/mame/drivers/overdriv.cpp b/src/mame/drivers/overdriv.cpp
index 1718f6a6d12..9783d66210f 100644
--- a/src/mame/drivers/overdriv.cpp
+++ b/src/mame/drivers/overdriv.cpp
@@ -31,7 +31,9 @@
#include "cpu/m68000/m68000.h"
#include "cpu/m6809/m6809.h"
+#include "machine/adc0804.h"
#include "machine/eepromser.h"
+#include "machine/rescap.h"
#include "sound/k053260.h"
#include "sound/ym2151.h"
#include "video/k053250.h"
@@ -167,7 +169,7 @@ void overdriv_state::overdriv_master_map(address_map &map)
map(0x0e0000, 0x0e0001).nopw(); /* unknown (always 0x30) */
map(0x100000, 0x10001f).rw(m_k053252, FUNC(k053252_device::read), FUNC(k053252_device::write)).umask16(0x00ff); /* 053252? (LSB) */
map(0x140000, 0x140001).nopw(); //watchdog reset?
- map(0x180000, 0x180001).portr("PADDLE").nopw(); // writes 0 at POST and expect that motor busy flag is off, then checks if paddle is at center otherwise throws a "VOLUME ERROR".
+ map(0x180001, 0x180001).rw("adc", FUNC(adc0804_device::read), FUNC(adc0804_device::write));
map(0x1c0000, 0x1c001f).w(m_k051316_1, FUNC(k051316_device::ctrl_w)).umask16(0xff00);
map(0x1c8000, 0x1c801f).w(m_k051316_2, FUNC(k051316_device::ctrl_w)).umask16(0xff00);
map(0x1d0000, 0x1d001f).w(m_k053251, FUNC(k053251_device::write)).umask16(0xff00);
@@ -282,10 +284,11 @@ static INPUT_PORTS_START( overdriv )
PORT_SERVICE_NO_TOGGLE( 0x10, IP_ACTIVE_LOW )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) // motor busy flag
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("adc", adc0804_device, intr_r)
PORT_START("PADDLE")
PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(100) PORT_KEYDELTA(50)
+ // POST checks if paddle is at center otherwise throws a "VOLUME ERROR"
PORT_START( "EEPROMOUT" )
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write)
@@ -342,6 +345,8 @@ void overdriv_state::overdriv(machine_config &config)
EEPROM_ER5911_16BIT(config, "eeprom").default_data(overdriv_default_eeprom, 128);
+ ADC0804(config, "adc", RES_K(10), CAP_P(150)).vin_callback().set_ioport("PADDLE");
+
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(XTAL(24'000'000)/4,384,0,305,264,0,224);
diff --git a/src/mame/drivers/p8k.cpp b/src/mame/drivers/p8k.cpp
index e5e69c31d75..82b36cb9a9e 100644
--- a/src/mame/drivers/p8k.cpp
+++ b/src/mame/drivers/p8k.cpp
@@ -343,7 +343,7 @@ void p8k_state::p8k_16_datamap(address_map &map)
void p8k_state::p8k_16_iomap(address_map &map)
{
-// AM_RANGE(0x0fef0, 0x0feff) // clock
+// map(0x0fef0, 0x0feff) // clock
map(0x0ff80, 0x0ff87).rw("sio", FUNC(z80sio_device::cd_ba_r), FUNC(z80sio_device::cd_ba_w)).umask16(0x00ff);
map(0x0ff88, 0x0ff8f).rw("sio1", FUNC(z80sio_device::cd_ba_r), FUNC(z80sio_device::cd_ba_w)).umask16(0x00ff);
map(0x0ff90, 0x0ff97).rw("pio0", FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt)).umask16(0x00ff);
@@ -351,13 +351,13 @@ void p8k_state::p8k_16_iomap(address_map &map)
map(0x0ffa0, 0x0ffa7).rw(m_pio2, FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt)).umask16(0x00ff);
map(0x0ffa8, 0x0ffaf).rw("ctc0", FUNC(z80ctc_device::read), FUNC(z80ctc_device::write)).umask16(0x00ff);
map(0x0ffb0, 0x0ffb7).rw("ctc1", FUNC(z80ctc_device::read), FUNC(z80ctc_device::write)).umask16(0x00ff);
-// AM_RANGE(0x0ffc0, 0x0ffc1) // SCR
-// AM_RANGE(0x0ffc8, 0x0ffc9) // SBR
-// AM_RANGE(0x0ffd0, 0x0ffd1) // NBR
-// AM_RANGE(0x0ffd8, 0x0ffd9) // SNVR
+// map(0x0ffc0, 0x0ffc1) // SCR
+// map(0x0ffc8, 0x0ffc9) // SBR
+// map(0x0ffd0, 0x0ffd1) // NBR
+// map(0x0ffd8, 0x0ffd9) // SNVR
map(0x0ffe1, 0x0ffe1).w(m_daisy, FUNC(p8k_16_daisy_device::reti_w));
-// AM_RANGE(0x0fff0, 0x0fff1) // TRPL
-// AM_RANGE(0x0fff8, 0x0fff9) // IF1L
+// map(0x0fff0, 0x0fff1) // TRPL
+// map(0x0fff8, 0x0fff9) // IF1L
}
diff --git a/src/mame/drivers/pacman.cpp b/src/mame/drivers/pacman.cpp
index 62ae9a53983..8db2f53d5dc 100644
--- a/src/mame/drivers/pacman.cpp
+++ b/src/mame/drivers/pacman.cpp
@@ -1023,14 +1023,14 @@ void pacman_state::birdiy_map(address_map &map)
map(0x0000, 0x3fff).mirror(0x8000).rom();
map(0x4000, 0x43ff).mirror(0xa000).ram().w(FUNC(pacman_state::pacman_videoram_w)).share("videoram");
map(0x4400, 0x47ff).mirror(0xa000).ram().w(FUNC(pacman_state::pacman_colorram_w)).share("colorram");
-// AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP
+// map(0x4800, 0x4bff).mirror(0xa000).r(FUNC(pacman_state::pacman_read_nop)).nopw();
map(0x4c00, 0x4fef).mirror(0xa000).ram();
map(0x4ff0, 0x4fff).mirror(0xa000).ram().share("spriteram");
map(0x5000, 0x5007).mirror(0xaf38).w(m_mainlatch, FUNC(ls259_device::write_d0));
map(0x5080, 0x509f).mirror(0xaf00).w(m_namco_sound, FUNC(namco_device::pacman_sound_w));
map(0x50a0, 0x50af).mirror(0xaf00).writeonly().share("spriteram2");
-// AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP
-// AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_WRITENOP
+// map(0x5070, 0x507f).mirror(0xaf00).nopw();
+// map(0x5080, 0x5080).mirror(0xaf3f).nopw();
map(0x50c0, 0x50c0).mirror(0xaf3f).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
map(0x5000, 0x5000).mirror(0xaf3f).portr("IN0");
map(0x5040, 0x5040).mirror(0xaf3f).portr("IN1");
@@ -1112,13 +1112,13 @@ void pacman_state::numcrash_map(address_map &map)
map(0x5000, 0x5007).w(m_mainlatch, FUNC(ls259_device::write_d0));
map(0x5040, 0x505f).w(m_namco_sound, FUNC(namco_device::pacman_sound_w));
map(0x5060, 0x506f).writeonly().share("spriteram2");
-// AM_RANGE(0x5070, 0x507f) AM_WRITENOP
-// AM_RANGE(0x5080, 0x5080) AM_WRITENOP
+// map(0x5070, 0x507f).nopw();
+// map(0x5080, 0x5080).nopw();
map(0x50c0, 0x50c0).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
map(0x5000, 0x5000).portr("IN0");
map(0x5040, 0x5040).portr("IN1");
map(0x5080, 0x5080).portr("DSW1");
-// AM_RANGE(0x50c0, 0x50c0) AM_READ_PORT("DSW2") // only one DSW on the PCB
+// map(0x50c0, 0x50c0).portr("DSW2"); // only one DSW on the PCB
}
@@ -1158,7 +1158,7 @@ void pacman_state::dremshpr_map(address_map &map)
map(0x4800, 0x4fef).mirror(0xa000).ram();
map(0x4ff0, 0x4fff).mirror(0xa000).ram().share("spriteram");
map(0x5000, 0x5007).mirror(0xaf38).w(m_mainlatch, FUNC(ls259_device::write_d0));
-// AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
+// map(0x5040, 0x505f).mirror(0xaf00).w("namco", FUNC(namco_device::pacman_sound_w));
map(0x5060, 0x506f).mirror(0xaf00).writeonly().share("spriteram2");
map(0x5070, 0x507f).mirror(0xaf00).nopw();
map(0x5080, 0x5080).mirror(0xaf3f).nopw();
@@ -1336,14 +1336,14 @@ void pacman_state::crushs_map(address_map &map)
void pacman_state::pengojpm_map(address_map &map)
{
map(0x0000, 0x0fff).rom();
-// AM_RANGE(0x1000, 0x1fff) // header check for 0x55aa at POST, diagnostic ROM?
+// map(0x1000, 0x1fff) // header check for 0x55aa at POST, diagnostic ROM?
map(0x4000, 0x7fff).rom();
map(0x8000, 0x83ff).ram().w(FUNC(pacman_state::pacman_videoram_w)).share("videoram");
map(0x8400, 0x87ff).ram().w(FUNC(pacman_state::pacman_colorram_w)).share("colorram");
map(0x8800, 0x8bff).ram();
-// AM_RANGE(0x8800, 0x8bff) AM_READ(pacman_read_nop) AM_WRITENOP
+// map(0x8800, 0x8bff).r(FUNC(pacman_state::pacman_read_nop)).nopw();
map(0x8c00, 0x8fef).ram();
map(0x8ff0, 0x8fff).ram().share("spriteram");
map(0x9000, 0x9007).w(m_mainlatch, FUNC(ls259_device::write_d0));
diff --git a/src/mame/drivers/pandoras.cpp b/src/mame/drivers/pandoras.cpp
index ec84687a697..1e1b8090d31 100644
--- a/src/mame/drivers/pandoras.cpp
+++ b/src/mame/drivers/pandoras.cpp
@@ -140,7 +140,7 @@ void pandoras_state::pandoras_slave_map(address_map &map)
map(0x1a02, 0x1a02).portr("P2");
map(0x1a03, 0x1a03).portr("DSW3");
map(0x1c00, 0x1c00).portr("DSW2");
-// AM_RANGE(0x1e00, 0x1e00) AM_READNOP /* ??? seems to be important */
+// map(0x1e00, 0x1e00).nopr(); /* ??? seems to be important */
map(0x8000, 0x8000).w("watchdog", FUNC(watchdog_timer_device::reset_w)); /* watchdog reset */
map(0xa000, 0xa000).w(FUNC(pandoras_state::pandoras_cpua_irqtrigger_w)); /* cause FIRQ on CPU A */
map(0xc000, 0xc7ff).ram().share("share4"); /* Shared RAM with the CPU A */
diff --git a/src/mame/drivers/paso1600.cpp b/src/mame/drivers/paso1600.cpp
index 1c536d1699f..05c484d7336 100644
--- a/src/mame/drivers/paso1600.cpp
+++ b/src/mame/drivers/paso1600.cpp
@@ -253,7 +253,7 @@ void paso1600_state::paso1600_io(address_map &map)
map(0x0048, 0x0049).r(FUNC(paso1600_state::test_hi_r));
map(0x0090, 0x0090).rw(FUNC(paso1600_state::paso1600_6845_status_r), FUNC(paso1600_state::paso1600_6845_address_w));
map(0x0091, 0x0091).rw(FUNC(paso1600_state::paso1600_6845_data_r), FUNC(paso1600_state::paso1600_6845_data_w));
-// AM_RANGE(0x00d8,0x00df) //fdc, unknown type
+// map(0x00d8,0x00df) //fdc, unknown type
// other undefined ports: 18, 1C, 92
}
diff --git a/src/mame/drivers/pasopia.cpp b/src/mame/drivers/pasopia.cpp
index 45e6bda2419..47a463b41b9 100644
--- a/src/mame/drivers/pasopia.cpp
+++ b/src/mame/drivers/pasopia.cpp
@@ -4,6 +4,10 @@
Toshiba Pasopia
+ Most games can be loaded from cassette, but since the graphics don't
+ work they are unplayable, or blank screen.
+ Sound uses the beeper, and works. Try SOUND a,b where a=1-82, b=1-255.
+
TODO:
- machine emulation needs merging with Pasopia 7 (video emulation is
completely different tho)
@@ -11,17 +15,22 @@
- Centronics printer interface
- RS-232C serial interface
- FDC and other I/O expansions
+ - fix keyboard (hack is currently in use)
+ - colours
+ - graphics
+
****************************************************************************/
#include "emu.h"
-#include "includes/pasopia.h"
-
#include "cpu/z80/z80.h"
#include "machine/i8255.h"
#include "machine/z80ctc.h"
#include "machine/z80pio.h"
#include "video/mc6845.h"
+#include "imagedev/cassette.h"
+#include "sound/spkrdev.h"
+#include "speaker.h"
#include "emupal.h"
#include "screen.h"
@@ -34,14 +43,16 @@ public:
, m_maincpu(*this, "maincpu")
, m_p_chargen(*this, "chargen")
, m_p_vram(*this, "vram")
- , m_ppi0(*this, "ppi8255_0")
- , m_ppi1(*this, "ppi8255_1")
- , m_ppi2(*this, "ppi8255_2")
- , m_ctc(*this, "z80ctc")
- , m_pio(*this, "z80pio")
+ , m_ppi0(*this, "ppi0")
+ , m_ppi1(*this, "ppi1")
+ , m_ppi2(*this, "ppi2")
+ , m_ctc(*this, "ctc")
+ , m_pio(*this, "pio")
, m_crtc(*this, "crtc")
, m_palette(*this, "palette")
- , m_keyboard(*this, "KEY.%u", 0)
+ , m_io_keyboard(*this, "KEY.%d", 0)
+ , m_cass(*this, "cassette")
+ , m_speaker(*this, "speaker")
{ }
void pasopia(machine_config &config);
@@ -54,11 +65,14 @@ private:
DECLARE_WRITE8_MEMBER(vram_latch_w);
DECLARE_READ8_MEMBER(vram_latch_r);
DECLARE_READ8_MEMBER(portb_1_r);
+ DECLARE_READ8_MEMBER(portb_2_r);
+ DECLARE_WRITE8_MEMBER(porta_2_w);
DECLARE_WRITE8_MEMBER(vram_addr_hi_w);
DECLARE_WRITE8_MEMBER(screen_mode_w);
DECLARE_READ8_MEMBER(rombank_r);
DECLARE_READ8_MEMBER(keyb_r);
DECLARE_WRITE8_MEMBER(mux_w);
+ DECLARE_WRITE_LINE_MEMBER(speaker_w);
MC6845_UPDATE_ROW(crtc_update_row);
TIMER_CALLBACK_MEMBER(pio_timer);
@@ -69,10 +83,12 @@ private:
uint16_t m_vram_addr;
uint8_t m_vram_latch;
uint8_t m_attr_latch;
-// uint8_t m_gfx_mode;
+ uint8_t m_gfx_mode;
uint8_t m_mux_data;
+ u8 m_porta_2;
bool m_video_wl;
bool m_ram_bank;
+ bool m_spr_sw;
emu_timer *m_pio_timer;
virtual void machine_start() override;
virtual void machine_reset() override;
@@ -86,7 +102,9 @@ private:
required_device<z80pio_device> m_pio;
required_device<mc6845_device> m_crtc;
required_device<palette_device> m_palette;
- required_ioport_array<12> m_keyboard;
+ required_ioport_array<12> m_io_keyboard;
+ required_device<cassette_image_device> m_cass;
+ required_device<speaker_sound_device> m_speaker;
};
// needed to scan the keyboard, as the pio emulation doesn't do it.
@@ -98,29 +116,29 @@ TIMER_CALLBACK_MEMBER( pasopia_state::pio_timer )
MC6845_UPDATE_ROW( pasopia_state::crtc_update_row )
{
const rgb_t *palette = m_palette->palette()->entry_list_raw();
- uint8_t chr,gfx,fg=7,bg=0; // colours need to be determined
- uint16_t mem,x;
+ uint8_t chr,gfx,xi,fg=7,bg=0; // colours need to be determined
+ uint16_t mem=ma,x;
uint32_t *p = &bitmap.pix32(y);
- for (x = 0; x < x_count; x++)
+ if (m_gfx_mode)
{
- uint8_t inv=0;
- if (x == cursor_x) inv=0xff;
- mem = ma + x;
- chr = m_p_vram[mem & 0x7ff];
-
- /* get pattern of pixels for that character scanline */
- gfx = m_p_chargen[(chr<<3) | ra] ^ inv;
-
- /* Display a scanline of a character */
- *p++ = palette[BIT(gfx, 7) ? fg : bg];
- *p++ = palette[BIT(gfx, 6) ? fg : bg];
- *p++ = palette[BIT(gfx, 5) ? fg : bg];
- *p++ = palette[BIT(gfx, 4) ? fg : bg];
- *p++ = palette[BIT(gfx, 3) ? fg : bg];
- *p++ = palette[BIT(gfx, 2) ? fg : bg];
- *p++ = palette[BIT(gfx, 1) ? fg : bg];
- *p++ = palette[BIT(gfx, 0) ? fg : bg];
+ // To Do
+ }
+ else
+ {
+ for (x = 0; x < x_count; x++)
+ {
+ uint8_t inv = (x == cursor_x) ? 0xff : 0;
+ mem = ma + x;
+ chr = m_p_vram[mem & 0x7ff];
+
+ /* get pattern of pixels for that character scanline */
+ gfx = m_p_chargen[(chr<<3) | ra] ^ inv;
+
+ /* Display a scanline of a character */
+ for (xi = 0; xi < 8; xi++)
+ *p++ = palette[BIT(gfx, 7-xi) ? fg : bg];
+ }
}
}
@@ -156,7 +174,109 @@ void pasopia_state::pasopia_io(address_map &map)
/* Input ports */
static INPUT_PORTS_START( pasopia )
- PASOPIA_KEYBOARD
+ PORT_START("KEY.0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("GRAPH") PORT_CODE(KEYCODE_LALT)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("CAPS LOCK") PORT_CODE(KEYCODE_CAPSLOCK)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("KANA LOCK")
+ PORT_BIT( 0xc8, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("KEY.1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD)
+ PORT_START("KEY.2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN) PORT_NAME("Down")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_UP) PORT_NAME("Up")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_HOME) PORT_NAME("CLR/Home")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL_PAD)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
+ PORT_START("KEY.3")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("RIGHT")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("BACKSPACE") PORT_CHAR(8)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR(9)
+ PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("KEY.4")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_END) PORT_NAME("Label")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PGUP) PORT_NAME("Kanji")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Copy")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL) PORT_NAME("Stop")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_INSERT) PORT_NAME("Ins")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("LEFT")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_NAME("SPACE") PORT_CHAR(' ')
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("KEY.5")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_NAME("F1")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F2) PORT_NAME("F2")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F3) PORT_NAME("F3")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F4) PORT_NAME("F4")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F5) PORT_NAME("F5")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F6) PORT_NAME("F6")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F7) PORT_NAME("F7")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F8) PORT_NAME("F8")
+ PORT_START("KEY.6")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_NAME("1") PORT_CHAR('1') PORT_CHAR('!')
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_NAME("0") PORT_CHAR('0') PORT_CHAR('0')
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_NAME("4") PORT_CHAR('4') PORT_CHAR('$')
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_NAME("R") PORT_CHAR('R') PORT_CHAR('r')
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_NAME("Y") PORT_CHAR('Y') PORT_CHAR('y')
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("_") PORT_CHAR('_')
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_NAME("^")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Yen")
+ PORT_START("KEY.7")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_NAME("2") PORT_CHAR('2') PORT_CHAR('"')
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_NAME("3") PORT_CHAR('3') PORT_CHAR('#')
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_NAME("8") PORT_CHAR('8') PORT_CHAR('(')
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_NAME("T") PORT_CHAR('T') PORT_CHAR('t')
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_NAME("U") PORT_CHAR('U') PORT_CHAR('u')
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_NAME("7") PORT_CHAR('7') PORT_CHAR('\'')
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_NAME("@") PORT_CHAR('@')
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("[ {") PORT_CHAR('[') PORT_CHAR('{')
+ PORT_START("KEY.8")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_NAME("-") PORT_CHAR('-') PORT_CHAR('=')
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_NAME("5") PORT_CHAR('5') PORT_CHAR('%')
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_NAME("6") PORT_CHAR('6') PORT_CHAR('&')
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_NAME("F") PORT_CHAR('F') PORT_CHAR('f')
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_NAME("H") PORT_CHAR('H') PORT_CHAR('h')
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_NAME("9") PORT_CHAR('9') PORT_CHAR(')')
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_NAME(": *") PORT_CHAR(':') PORT_CHAR('*')
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME("] }") PORT_CHAR(']') PORT_CHAR('}')
+ PORT_START("KEY.9")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_NAME("Q") PORT_CHAR('Q') PORT_CHAR('q')
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_NAME("W") PORT_CHAR('W') PORT_CHAR('w')
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_NAME("E") PORT_CHAR('E') PORT_CHAR('e')
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_NAME("G") PORT_CHAR('G') PORT_CHAR('g')
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_NAME("J") PORT_CHAR('J') PORT_CHAR('j')
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_NAME("I") PORT_CHAR('I') PORT_CHAR('i')
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_NAME("O") PORT_CHAR('O') PORT_CHAR('o')
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_NAME("P") PORT_CHAR('P') PORT_CHAR('p')
+ PORT_START("KEY.10")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_NAME("A") PORT_CHAR('A') PORT_CHAR('a')
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_NAME("S") PORT_CHAR('S') PORT_CHAR('s')
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_NAME("D") PORT_CHAR('D') PORT_CHAR('d')
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_NAME("V") PORT_CHAR('V') PORT_CHAR('v')
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_NAME("N") PORT_CHAR('N') PORT_CHAR('n')
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_NAME("K") PORT_CHAR('K') PORT_CHAR('k')
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_NAME("L") PORT_CHAR('L') PORT_CHAR('l')
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_NAME("; +") PORT_CHAR(';') PORT_CHAR('+')
+ PORT_START("KEY.11")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_NAME("Z") PORT_CHAR('Z') PORT_CHAR('z')
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_NAME("X") PORT_CHAR('X') PORT_CHAR('x')
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_NAME("C") PORT_CHAR('C') PORT_CHAR('c')
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_NAME("B") PORT_CHAR('B') PORT_CHAR('b')
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_NAME("M") PORT_CHAR('M') PORT_CHAR('m')
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_NAME(", <") PORT_CHAR(',') PORT_CHAR('<')
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_NAME(". >") PORT_CHAR('.') PORT_CHAR('>')
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_NAME("/ ?") PORT_CHAR('/') PORT_CHAR('?')
INPUT_PORTS_END
void pasopia_state::machine_start()
@@ -168,6 +288,8 @@ void pasopia_state::machine_start()
void pasopia_state::machine_reset()
{
+ m_porta_2 = 0xFF;
+ m_cass->change_state(CASSETTE_MOTOR_DISABLED, CASSETTE_MASK_MOTOR);
}
WRITE8_MEMBER( pasopia_state::vram_addr_lo_w )
@@ -202,6 +324,34 @@ READ8_MEMBER( pasopia_state::portb_1_r )
return m_hblank | lcd_mode | grph_latch; //bit 4: LCD mode
}
+READ8_MEMBER( pasopia_state::portb_2_r )
+{
+ return (m_cass->input() > +0.04) ? 0x20 : 0;
+}
+
+WRITE8_MEMBER( pasopia_state::porta_2_w )
+{
+ m_cass->output(BIT(data, 4) ? -1.0 : +1.0);
+ u8 changed = data ^ m_porta_2;
+ m_porta_2 = data;
+ if (BIT(changed, 5))
+ {
+ m_cass->change_state(BIT(data, 5) ? CASSETTE_MOTOR_DISABLED : CASSETTE_MOTOR_ENABLED, CASSETTE_MASK_MOTOR);
+ // nasty hack
+ if (!BIT(data, 5))
+ m_ctc->write(2,0x23);
+ }
+}
+
+WRITE_LINE_MEMBER( pasopia_state::speaker_w )
+{
+ if (state)
+ {
+ m_spr_sw ^= 1;
+ if (BIT(m_mux_data, 7))
+ m_speaker->level_w(m_spr_sw);
+ }
+}
WRITE8_MEMBER( pasopia_state::vram_addr_hi_w )
{
@@ -218,7 +368,7 @@ WRITE8_MEMBER( pasopia_state::vram_addr_hi_w )
WRITE8_MEMBER( pasopia_state::screen_mode_w )
{
- //m_gfx_mode = (data & 0xe0) >> 5; unused variable
+ m_gfx_mode = (data & 0xe0) >> 5;
m_attr_latch = (m_attr_latch & 0x80) | (data & 7);
printf("Screen Mode=%02x\n",data);
}
@@ -230,20 +380,14 @@ READ8_MEMBER( pasopia_state::rombank_r )
READ8_MEMBER( pasopia_state::keyb_r )
{
- uint8_t i,j,res = 0;
- for (j=0; j<3; j++)
- {
- if (BIT(m_mux_data, 4+j))
- {
- for (i=0; i<4; i++)
- {
- if (BIT(m_mux_data, i))
- res |= m_keyboard[j*4+i]->read();
- }
- }
- }
-
- return res ^ 0xff;
+ u8 data = 0xff;
+ for (u8 i = 0; i < 3; i++)
+ if (BIT(m_mux_data, i+4))
+ for (u8 j = 0; j < 4; j++)
+ if (BIT(m_mux_data, j))
+ data &= m_io_keyboard[i*4+j]->read();
+
+ return data;
}
WRITE8_MEMBER( pasopia_state::mux_w )
@@ -268,9 +412,9 @@ GFXDECODE_END
static const z80_daisy_config pasopia_daisy[] =
{
- { "z80ctc" },
- { "z80pio" },
-// { "upd765" }, /* TODO */
+ { "ctc" },
+ { "pio" },
+// { "fdc" }, /* TODO */
{ nullptr }
};
@@ -280,11 +424,11 @@ void pasopia_state::init_pasopia()
{
/*
We preset all banks here, so that bankswitching will incur no speed penalty.
-0000 indicates ROMs, 10000 indicates RAM.
+0000 indicates ROMs, 8000 indicates RAM.
*/
uint8_t *ram = memregion("maincpu")->base();
- membank("bank1")->configure_entries(0, 2, &ram[0x00000], 0x10000);
- membank("bank2")->configure_entry(0, &ram[0x10000]);
+ membank("bank1")->configure_entries(0, 2, &ram[0x0000], 0x8000);
+ membank("bank2")->configure_entry(0, &ram[0x8000]);
m_pio_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pasopia_state::pio_timer), this));
m_pio_timer->adjust(attotime::from_hz(50), 0, attotime::from_hz(50));
@@ -324,23 +468,32 @@ void pasopia_state::pasopia(machine_config &config)
I8255A(config, m_ppi2);
m_ppi2->in_pc_callback().set(FUNC(pasopia_state::rombank_r));
+ m_ppi2->out_pa_callback().set(FUNC(pasopia_state::porta_2_w));
+ m_ppi2->in_pb_callback().set(FUNC(pasopia_state::portb_2_r));
Z80CTC(config, m_ctc, 15.9744_MHz_XTAL / 4);
m_ctc->intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
- m_ctc->zc_callback<0>().set(m_ctc, FUNC(z80ctc_device::trg1));
- m_ctc->zc_callback<1>().set(m_ctc, FUNC(z80ctc_device::trg2));
+ m_ctc->zc_callback<1>().set(FUNC(pasopia_state::speaker_w));
m_ctc->zc_callback<2>().set(m_ctc, FUNC(z80ctc_device::trg3));
Z80PIO(config, m_pio, 15.9744_MHz_XTAL / 4);
m_pio->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
m_pio->out_pa_callback().set(FUNC(pasopia_state::mux_w));
m_pio->in_pb_callback().set(FUNC(pasopia_state::keyb_r));
+
+ /* sound hardware */
+ SPEAKER(config, "mono").front_center();
+ SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.50);
+ CASSETTE(config, m_cass);
+ m_cass->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED);
+ m_cass->add_route(ALL_OUTPUTS, "mono", 0.05);
}
/* ROM definition */
ROM_START( pasopia )
- ROM_REGION( 0x18000, "maincpu", 0 )
+ ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "tbasic.rom", 0x0000, 0x8000, CRC(f53774ff) SHA1(bbec45a3bad8d184505cc6fe1f6e2e60a7fb53f2))
+ ROM_FILL(0x304,2,0) // fixes keyboard but breaks cassette
ROM_REGION( 0x0800, "chargen", 0 )
ROM_LOAD( "font.rom", 0x0000, 0x0800, BAD_DUMP CRC(a91c45a9) SHA1(a472adf791b9bac3dfa6437662e1a9e94a88b412)) //stolen from pasopia7
diff --git a/src/mame/drivers/pasopia7.cpp b/src/mame/drivers/pasopia7.cpp
index 0296ec2abab..bd3af46e624 100644
--- a/src/mame/drivers/pasopia7.cpp
+++ b/src/mame/drivers/pasopia7.cpp
@@ -4,25 +4,29 @@
Toshiba Pasopia 7 (c) 1983 Toshiba
- preliminary driver by Angelo Salese
+ Preliminary driver by Angelo Salese.
+ 2019-10-14 added cassette & beeper [Robbbert]
+
+ Most games seem to work well enough from cassette, but without sound (see below).
+ Beeper is only used for the keyclick, and it works.
TODO:
- - floppy support (but floppy images are unobtainable at current time)
- - cassette device;
- - beeper
+ - floppy support (but floppy images are unobtainable at current time).
+ - SOUND command uses the SN76489 chip, however no sound is produced, and the next SOUND command
+ freezes the machine. A hack has been added to stop the freeze.
- LCD version has gfx bugs, it must use a different ROM charset for instance (apparently a 8 x 4
- one, 40/80 x 8 tilemap);
+ one, 40/80 x 8 tilemap).
+ - Allow BIN files to be loaded (via a rampac presumably).
+ - Allow CAS files to be loaded.
Reading fdc has been commented out, until the code can be modified to
work with new upd765 (was causing a hang at boot).
- Schematics: https://archive.org/details/Io19839/page/n331
+ Schematics: https://archive.org/details/Io19839/page/n331 (fdc system not included)
***************************************************************************************************/
#include "emu.h"
-#include "includes/pasopia.h"
-
#include "cpu/z80/z80.h"
#include "imagedev/floppy.h"
#include "machine/i8255.h"
@@ -31,7 +35,8 @@
#include "machine/z80pio.h"
#include "sound/sn76496.h"
#include "video/mc6845.h"
-
+#include "imagedev/cassette.h"
+#include "sound/spkrdev.h"
#include "emupal.h"
#include "screen.h"
#include "speaker.h"
@@ -44,18 +49,20 @@ public:
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_screen(*this, "screen")
- , m_ppi0(*this, "ppi8255_0")
- , m_ppi1(*this, "ppi8255_1")
- , m_ppi2(*this, "ppi8255_2")
- , m_ctc(*this, "z80ctc")
- , m_pio(*this, "z80pio")
+ , m_ppi0(*this, "ppi0")
+ , m_ppi1(*this, "ppi1")
+ , m_ppi2(*this, "ppi2")
+ , m_ctc(*this, "ctc")
+ , m_pio(*this, "pio")
, m_crtc(*this, "crtc")
, m_fdc(*this, "fdc")
, m_floppy(*this, "fdc:0:525hd")
, m_sn1(*this, "sn1")
, m_sn2(*this, "sn2")
, m_palette(*this, "palette")
- , m_keyboard(*this, "KEY.%u", 0)
+ , m_keyboard(*this, "KEY.%d", 0)
+ , m_cass(*this, "cassette")
+ , m_speaker(*this, "speaker")
{ }
void p7_base(machine_config &config);
@@ -90,6 +97,7 @@ private:
DECLARE_WRITE8_MEMBER(nmi_reg_w);
DECLARE_READ8_MEMBER(nmi_porta_r);
DECLARE_READ8_MEMBER(nmi_portb_r);
+ DECLARE_WRITE_LINE_MEMBER(speaker_w);
TIMER_CALLBACK_MEMBER(pio_timer);
DECLARE_VIDEO_START(pasopia7);
void p7_lcd_palette(palette_device &palette) const;
@@ -123,6 +131,8 @@ private:
int m_addr_latch;
void pasopia_nmi_trap();
uint8_t m_mux_data;
+ u8 m_porta_2;
+ bool m_spr_sw;
emu_timer *m_pio_timer;
virtual void machine_reset() override;
void fdc_irq(bool state);
@@ -144,9 +154,11 @@ private:
required_device<sn76489a_device> m_sn2;
required_device<palette_device> m_palette;
required_ioport_array<12> m_keyboard;
+ required_device<cassette_image_device> m_cass;
+ required_device<speaker_sound_device> m_speaker;
};
-#define VDP_CLOCK XTAL(3'579'545)/4
+#define VDP_CLOCK 14.318181_MHz_XTAL / 16
#define LCD_CLOCK VDP_CLOCK/10
// needed to scan the keyboard, as the pio emulation doesn't do it.
@@ -515,7 +527,7 @@ READ8_MEMBER( pasopia7_state::pac2_r )
}
else
{
- printf("%02x\n",m_pac2_bank_select);
+ //printf("RAMPAC bank_select = %02x\n",m_pac2_bank_select);
}
}
@@ -599,26 +611,31 @@ WRITE8_MEMBER( pasopia7_state::pasopia7_fdc_w )
READ8_MEMBER( pasopia7_state::pasopia7_io_r )
{
- uint16_t io_port;
-
if(m_mio_sel)
{
address_space &ram_space = m_maincpu->space(AS_PROGRAM);
m_mio_sel = 0;
- //printf("%08x\n",offset);
- //return 0x0d; // hack: this is used for reading the keyboard data, we can fake it a little ... (modify fda4)
+ // this hack to prevent SOUND freezing the machine.
+ if ((offset >= 0x7700) && (offset < 0x7740))
+ return 0xff;
+ // hack: this is used for reading the keyboard data, we can fake it a little ... (modify fda4)
return ram_space.read_byte(offset);
}
- io_port = offset & 0xff; //trim down to 8-bit bus
+ u8 io_port = offset & 0xff; //trim down to 8-bit bus
if(io_port >= 0x08 && io_port <= 0x0b)
return m_ppi0->read(io_port & 3);
else
if(io_port >= 0x0c && io_port <= 0x0f)
return m_ppi1->read(io_port & 3);
-// else if(io_port == 0x10 || io_port == 0x11) { M6845 read }
+ else
+ if(io_port == 0x10)
+ return m_crtc->status_r();
+ else
+ if(io_port == 0x11)
+ return m_crtc->register_r();
else
if(io_port >= 0x18 && io_port <= 0x1b)
return pac2_r(space, io_port & 3);
@@ -650,8 +667,6 @@ READ8_MEMBER( pasopia7_state::pasopia7_io_r )
WRITE8_MEMBER( pasopia7_state::pasopia7_io_w )
{
- uint16_t io_port;
-
if(m_mio_sel)
{
address_space &ram_space = m_maincpu->space(AS_PROGRAM);
@@ -660,7 +675,7 @@ WRITE8_MEMBER( pasopia7_state::pasopia7_io_w )
return;
}
- io_port = offset & 0xff; //trim down to 8-bit bus
+ u8 io_port = offset & 0xff; //trim down to 8-bit bus
if(io_port >= 0x08 && io_port <= 0x0b)
m_ppi0->write(io_port & 3, data);
@@ -719,9 +734,110 @@ void pasopia7_state::pasopia7_io(address_map &map)
map(0x0000, 0xffff).rw(FUNC(pasopia7_state::pasopia7_io_r), FUNC(pasopia7_state::pasopia7_io_w));
}
-/* TODO: where are SPACE and RETURN keys? */
static INPUT_PORTS_START( pasopia7 )
- PASOPIA_KEYBOARD
+ PORT_START("KEY.0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("GRAPH") PORT_CODE(KEYCODE_LALT)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("CAPS LOCK") PORT_CODE(KEYCODE_CAPSLOCK)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("KANA LOCK")
+ PORT_BIT( 0xc8, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("KEY.1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD)
+ PORT_START("KEY.2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS_PAD)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("+") PORT_CODE(KEYCODE_PLUS_PAD)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("*") PORT_CODE(KEYCODE_ASTERISK)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("/") PORT_CODE(KEYCODE_SLASH_PAD)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(".") PORT_CODE(KEYCODE_DEL_PAD)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
+ PORT_START("KEY.3")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("RIGHT")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Label") PORT_CODE(KEYCODE_END)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("INS/DEL") PORT_CHAR(8)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("TAB/ESC") PORT_CODE(KEYCODE_TAB) PORT_CHAR(9)
+ PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("KEY.4")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_HOME) PORT_NAME("HOME/CLS")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PGUP) PORT_NAME("Kanji") // guess? key has a Japanese label
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Copy")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL) PORT_NAME("Stop")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("LEFT")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_UP) PORT_NAME("UP/DOWN")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_NAME("SPACE") PORT_CHAR(' ')
+ PORT_START("KEY.5")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_NAME("F1")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F2) PORT_NAME("F2")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F3) PORT_NAME("F3")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F4) PORT_NAME("F4")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F5) PORT_NAME("F5")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F6) PORT_NAME("F6")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F7) PORT_NAME("F7")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F8) PORT_NAME("F8")
+ PORT_START("KEY.6")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_NAME("1") PORT_CHAR('1') PORT_CHAR('!')
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_NAME("0") PORT_CHAR('0') PORT_CHAR('0')
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_NAME("4") PORT_CHAR('4') PORT_CHAR('$')
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_NAME("R") PORT_CHAR('R') PORT_CHAR('r')
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_NAME("Y") PORT_CHAR('Y') PORT_CHAR('y')
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("_") PORT_CHAR('_')
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_NAME("^")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Yen")
+ PORT_START("KEY.7")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_NAME("2") PORT_CHAR('2') PORT_CHAR('"')
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_NAME("3") PORT_CHAR('3') PORT_CHAR('#')
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_NAME("8") PORT_CHAR('8') PORT_CHAR('(')
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_NAME("T") PORT_CHAR('T') PORT_CHAR('t')
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_NAME("U") PORT_CHAR('U') PORT_CHAR('u')
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_NAME("7") PORT_CHAR('7') PORT_CHAR('\'')
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_NAME("@") PORT_CHAR('@')
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("[ {") PORT_CHAR('[') PORT_CHAR('{')
+ PORT_START("KEY.8")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_NAME("-") PORT_CHAR('-') PORT_CHAR('=')
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_NAME("5") PORT_CHAR('5') PORT_CHAR('%')
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_NAME("6") PORT_CHAR('6') PORT_CHAR('&')
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_NAME("F") PORT_CHAR('F') PORT_CHAR('f')
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_NAME("H") PORT_CHAR('H') PORT_CHAR('h')
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_NAME("9") PORT_CHAR('9') PORT_CHAR(')')
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_NAME(": *") PORT_CHAR(':') PORT_CHAR('*')
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME("] }") PORT_CHAR(']') PORT_CHAR('}')
+ PORT_START("KEY.9")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_NAME("Q") PORT_CHAR('Q') PORT_CHAR('q')
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_NAME("W") PORT_CHAR('W') PORT_CHAR('w')
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_NAME("E") PORT_CHAR('E') PORT_CHAR('e')
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_NAME("G") PORT_CHAR('G') PORT_CHAR('g')
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_NAME("J") PORT_CHAR('J') PORT_CHAR('j')
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_NAME("I") PORT_CHAR('I') PORT_CHAR('i')
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_NAME("O") PORT_CHAR('O') PORT_CHAR('o')
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_NAME("P") PORT_CHAR('P') PORT_CHAR('p')
+ PORT_START("KEY.10")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_NAME("A") PORT_CHAR('A') PORT_CHAR('a')
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_NAME("S") PORT_CHAR('S') PORT_CHAR('s')
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_NAME("D") PORT_CHAR('D') PORT_CHAR('d')
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_NAME("V") PORT_CHAR('V') PORT_CHAR('v')
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_NAME("N") PORT_CHAR('N') PORT_CHAR('n')
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_NAME("K") PORT_CHAR('K') PORT_CHAR('k')
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_NAME("L") PORT_CHAR('L') PORT_CHAR('l')
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_NAME("; +") PORT_CHAR(';') PORT_CHAR('+')
+ PORT_START("KEY.11")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_NAME("Z") PORT_CHAR('Z') PORT_CHAR('z')
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_NAME("X") PORT_CHAR('X') PORT_CHAR('x')
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_NAME("C") PORT_CHAR('C') PORT_CHAR('c')
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_NAME("B") PORT_CHAR('B') PORT_CHAR('b')
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_NAME("M") PORT_CHAR('M') PORT_CHAR('m')
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_NAME(", <") PORT_CHAR(',') PORT_CHAR('<')
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_NAME(". >") PORT_CHAR('.') PORT_CHAR('>')
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_NAME("/ ?") PORT_CHAR('/') PORT_CHAR('?')
INPUT_PORTS_END
static const gfx_layout p7_chars_8x8 =
@@ -753,20 +869,14 @@ GFXDECODE_END
READ8_MEMBER( pasopia7_state::keyb_r )
{
- uint8_t i,j,res = 0;
- for (j=0; j<3; j++)
- {
+ u8 data = 0xff;
+ for (u8 j=0; j<3; j++)
if (BIT(m_mux_data, 4+j))
- {
- for (i=0; i<4; i++)
- {
+ for (u8 i=0; i<4; i++)
if (BIT(m_mux_data, i))
- res |= m_keyboard[j*4+i]->read();
- }
- }
- }
+ data &= m_keyboard[j*4+i]->read();
- return res ^ 0xff;
+ return data;
}
WRITE8_MEMBER( pasopia7_state::mux_w )
@@ -776,8 +886,8 @@ WRITE8_MEMBER( pasopia7_state::mux_w )
static const z80_daisy_config p7_daisy[] =
{
- { "z80ctc" },
- { "z80pio" },
+ { "ctc" },
+ { "pio" },
// { "fdc" }, /* TODO */
{ nullptr }
};
@@ -840,7 +950,7 @@ WRITE8_MEMBER( pasopia7_state::video_misc_w )
WRITE8_MEMBER( pasopia7_state::nmi_mask_w )
{
/*
- --x- ---- (related to the data rec)
+ --x- ---- tape motor
---x ---- data rec out
---- --x- sound off
---- ---x reset NMI & trap
@@ -853,7 +963,11 @@ WRITE8_MEMBER( pasopia7_state::nmi_mask_w )
m_nmi_trap &= ~2;
//m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); //guess
}
-
+ m_cass->output(BIT(data, 4) ? -1.0 : +1.0);
+ u8 changed = data ^ m_porta_2;
+ m_porta_2 = data;
+ if (BIT(changed, 5))
+ m_cass->change_state(BIT(data, 5) ? CASSETTE_MOTOR_DISABLED : CASSETTE_MOTOR_ENABLED, CASSETTE_MASK_MOTOR);
}
/* TODO: investigate on these. */
@@ -885,7 +999,18 @@ READ8_MEMBER( pasopia7_state::nmi_porta_r )
READ8_MEMBER( pasopia7_state::nmi_portb_r )
{
- return 0xf9 | m_nmi_trap | m_nmi_reset;
+ u8 data = (m_cass->input() > +0.04) ? 0x20 : 0;
+ return 0xd9 | data | m_nmi_trap | m_nmi_reset;
+}
+
+WRITE_LINE_MEMBER( pasopia7_state::speaker_w )
+{
+ if (state)
+ {
+ m_spr_sw ^= 1;
+ if (BIT(m_mux_data, 7))
+ m_speaker->level_w(m_spr_sw);
+ }
}
void pasopia7_state::machine_reset()
@@ -898,6 +1023,8 @@ void pasopia7_state::machine_reset()
// membank("bank4")->set_base(bios + 0x10000);
m_nmi_reset |= 4;
+ m_porta_2 = 0xFF;
+ m_cass->change_state(CASSETTE_MOTOR_DISABLED, CASSETTE_MASK_MOTOR);
}
// TODO: palette values are mostly likely to be wrong in there
@@ -922,26 +1049,29 @@ static void pasopia7_floppies(device_slot_interface &device)
void pasopia7_state::p7_base(machine_config &config)
{
/* basic machine hardware */
- Z80(config, m_maincpu, XTAL(4'000'000));
+ Z80(config, m_maincpu, 15.9744_MHz_XTAL / 4);
m_maincpu->set_addrmap(AS_PROGRAM, &pasopia7_state::pasopia7_mem);
m_maincpu->set_addrmap(AS_IO, &pasopia7_state::pasopia7_io);
m_maincpu->set_daisy_config(p7_daisy);
/* Audio */
SPEAKER(config, "mono").front_center();
+ SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.50);
- SN76489A(config, m_sn1, 1996800).add_route(ALL_OUTPUTS, "mono", 0.50); // unknown clock / divider
+ SN76489A(config, m_sn1, 15.9744_MHz_XTAL / 8).add_route(ALL_OUTPUTS, "mono", 0.50);
- SN76489A(config, m_sn2, 1996800).add_route(ALL_OUTPUTS, "mono", 0.50); // unknown clock / divider
+ SN76489A(config, m_sn2, 15.9744_MHz_XTAL / 8).add_route(ALL_OUTPUTS, "mono", 0.50);
/* Devices */
- Z80CTC(config, m_ctc, XTAL(4'000'000));
+ Z80CTC(config, m_ctc, 15.9744_MHz_XTAL / 4);
m_ctc->intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
+ m_ctc->set_clk<0>(15.9744_MHz_XTAL / 4);
+ m_ctc->set_clk<2>(15.9744_MHz_XTAL / 4);
m_ctc->zc_callback<0>().set(m_ctc, FUNC(z80ctc_device::trg1));
- m_ctc->zc_callback<1>().set(m_ctc, FUNC(z80ctc_device::trg2)); // beep interface
+ m_ctc->zc_callback<1>().set(FUNC(pasopia7_state::speaker_w));
m_ctc->zc_callback<2>().set(m_ctc, FUNC(z80ctc_device::trg3));
- Z80PIO(config, m_pio, XTAL(4'000'000));
+ Z80PIO(config, m_pio, 15.9744_MHz_XTAL / 4);
m_pio->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
m_pio->out_pa_callback().set(FUNC(pasopia7_state::mux_w));
m_pio->in_pb_callback().set(FUNC(pasopia7_state::keyb_r));
@@ -966,6 +1096,10 @@ void pasopia7_state::p7_base(machine_config &config)
UPD765A(config, m_fdc, 8'000'000, true, true);
FLOPPY_CONNECTOR(config, "fdc:0", pasopia7_floppies, "525hd", floppy_image_device::default_floppy_formats);
FLOPPY_CONNECTOR(config, "fdc:1", pasopia7_floppies, "525hd", floppy_image_device::default_floppy_formats);
+
+ CASSETTE(config, m_cass);
+ m_cass->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED);
+ m_cass->add_route(ALL_OUTPUTS, "mono", 0.05);
}
void pasopia7_state::p7_raster(machine_config &config)
@@ -984,7 +1118,7 @@ void pasopia7_state::p7_raster(machine_config &config)
PALETTE(config, m_palette, palette_device::BRG_3BIT);
GFXDECODE(config, "gfxdecode", m_palette, gfx_pasopia7);
- MC6845(config, m_crtc, VDP_CLOCK); /* unknown variant, unknown clock, hand tuned to get ~60 fps */
+ HD6845S(config, m_crtc, VDP_CLOCK); // HD46505S
m_crtc->set_screen(m_screen);
m_crtc->set_show_border_area(false);
m_crtc->set_char_width(8);
@@ -1007,7 +1141,7 @@ void pasopia7_state::p7_lcd(machine_config &config)
PALETTE(config, m_palette, FUNC(pasopia7_state::p7_lcd_palette), 8);
GFXDECODE(config, "gfxdecode", m_palette, gfx_pasopia7);
- MC6845(config, m_crtc, LCD_CLOCK); /* unknown variant, unknown clock, hand tuned to get ~60 fps */
+ HD6845S(config, m_crtc, LCD_CLOCK); /* unknown variant, unknown clock, hand tuned to get ~60 fps */
m_crtc->set_screen(m_screen);
m_crtc->set_show_border_area(false);
m_crtc->set_char_width(8);
diff --git a/src/mame/drivers/pastelg.cpp b/src/mame/drivers/pastelg.cpp
index 63d678bd9f4..f3f4b7f5e1c 100644
--- a/src/mame/drivers/pastelg.cpp
+++ b/src/mame/drivers/pastelg.cpp
@@ -60,7 +60,7 @@ READ8_MEMBER(pastelg_state::pastelg_irq_ack_r)
void pastelg_state::pastelg_io_map(address_map &map)
{
map.global_mask(0xff);
-// AM_RANGE(0x00, 0x00) AM_WRITENOP
+// map(0x00, 0x00).nopw();
map(0x00, 0x7f).r(m_nb1413m3, FUNC(nb1413m3_device::sndrom_r));
map(0x81, 0x81).r("aysnd", FUNC(ay8910_device::data_r));
map(0x82, 0x83).w("aysnd", FUNC(ay8910_device::data_address_w));
diff --git a/src/mame/drivers/pb1000.cpp b/src/mame/drivers/pb1000.cpp
index 71e02d06613..001c41881f4 100644
--- a/src/mame/drivers/pb1000.cpp
+++ b/src/mame/drivers/pb1000.cpp
@@ -86,7 +86,7 @@ void pb1000_state::pb1000_mem(address_map &map)
{
map.unmap_value_low();
map(0x00000, 0x00bff).rom();
- //AM_RANGE( 0x00c00, 0x00c0f ) AM_NOP //I/O
+ //map(0x00c00, 0x00c0f).noprw(); //I/O
map(0x06000, 0x07fff).ram().share("nvram1");
map(0x08000, 0x0ffff).bankr("bank1");
map(0x18000, 0x1ffff).ram().share("nvram2");
@@ -97,7 +97,7 @@ void pb1000_state::pb2000c_mem(address_map &map)
map.unmap_value_low();
map(0x00000, 0x0ffff).bankr("bank1");
map(0x00000, 0x00bff).rom();
- //AM_RANGE( 0x00c00, 0x00c0f ) AM_NOP //I/O
+ //map(0x00c00, 0x00c0f).noprw(); //I/O
map(0x00c10, 0x00c11).w(FUNC(pb1000_state::gatearray_w));
map(0x10000, 0x1ffff).ram().share("nvram1");
map(0x20000, 0x27fff).r(m_card1, FUNC(generic_slot_device::read16_rom));
diff --git a/src/mame/drivers/pc.cpp b/src/mame/drivers/pc.cpp
index 5402f35320a..0461f45a095 100644
--- a/src/mame/drivers/pc.cpp
+++ b/src/mame/drivers/pc.cpp
@@ -46,7 +46,6 @@ public:
void ncrpc4i(machine_config &config);
void kaypro16(machine_config &config);
void kaypropc(machine_config &config);
- void epc(machine_config &config);
void m15(machine_config &config);
void bondwell(machine_config &config);
void siemens(machine_config &config);
@@ -86,7 +85,6 @@ private:
static void cfg_single_360K(device_t *device);
static void cfg_single_720K(device_t *device);
- void epc_io(address_map &map);
void ibm5550_io(address_map &map);
void pc16_io(address_map &map);
void pc16_map(address_map &map);
@@ -533,55 +531,6 @@ ROM_START( mc1702 )
ROM_END
-/************************************************************** Ericsson PC ***
-
-Links: https://youtu.be/6uilOdMJc24
-Form Factor: Desktop
-CPU: 8088 @ 4.77MHz
-RAM: 256K
-Bus: 6x ISA
-Video: Monchrome or Color 80x25 character mode. 320x200 and 640x400 (CGA?) grahics modes
-Display: Orange Gas Plasma (GP) display
-Mass storage: 2 x 5.25" 360K or 1 20Mb HDD
-On board ports: Beeper,
-Ports: serial, parallel
-Internal Options: Up to 640K RAM through add-on RAM card
-Misc: The hardware was not 100% PC compatible so non BIOS based software would not run. 50.000+ units sold
-
-******************************************************************************/
-
-void pc_state::epc_io(address_map &map)
-{
- map.unmap_value_high();
- map(0x0000, 0x00ff).m("mb", FUNC(ibm5160_mb_device::map));
- map(0x0070, 0x0071).rw("i8251", FUNC(i8251_device::read), FUNC(i8251_device::write));
-}
-
-void pc_state::epc(machine_config &config)
-{
- pccga(config);
-
- i8088_cpu_device &maincpu(I8088(config.replace(), "maincpu", 4772720));
- maincpu.set_addrmap(AS_PROGRAM, &pc_state::pc8_map);
- maincpu.set_addrmap(AS_IO, &pc_state::epc_io);
- maincpu.set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb));
-
- subdevice<isa8_slot_device>("isa1")->set_default_option("ega");
- I8251(config, "i8251", 0); // clock?
-}
-
-ROM_START( epc )
- ROM_REGION(0x10000,"bios", 0)
- ROM_DEFAULT_BIOS("p860110")
- ROM_SYSTEM_BIOS(0, "p840705", "P840705")
- ROMX_LOAD("ericsson_8088.bin", 0xe000, 0x2000, CRC(3953c38d) SHA1(2bfc1f1d11d0da5664c3114994fc7aa3d6dd010d), ROM_BIOS(0))
- ROM_SYSTEM_BIOS(1, "p860110", "P860110")
- ROMX_LOAD("epcbios1.bin", 0xe000, 0x02000, CRC(79a83706) SHA1(33528c46a24d7f65ef5a860fbed05afcf797fc55), ROM_BIOS(1))
- ROMX_LOAD("epcbios2.bin", 0xa000, 0x02000, CRC(3ca764ca) SHA1(02232fedef22d31a641f4b65933b9e269afce19e), ROM_BIOS(1))
- ROMX_LOAD("epcbios3.bin", 0xc000, 0x02000, CRC(70483280) SHA1(b44b09da94d77b0269fc48f07d130b2d74c4bb8f), ROM_BIOS(1))
-ROM_END
-
-
/************************************************ Ericsson Portable PC - EPPC ***
Links: https://youtu.be/Qmke4L4Jls8 , https://youtu.be/yXK01gBQE6Q
@@ -1358,7 +1307,6 @@ ROM_END
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP( 1984, dgone, ibm5150, 0, dgone, pccga, pc_state, empty_init, "Data General", "Data General/One" , MACHINE_NOT_WORKING )
-COMP( 1985, epc, ibm5150, 0, epc, pccga, pc_state, empty_init, "Ericsson Information System", "Ericsson PC" , MACHINE_NOT_WORKING )
COMP( 1985, eppc, ibm5150, 0, pccga, pccga, pc_state, empty_init, "Ericsson Information System", "Ericsson Portable PC", MACHINE_NOT_WORKING )
COMP( 1985, bw230, ibm5150, 0, bondwell, bondwell, pc_state, init_bondwell, "Bondwell Holding", "BW230 (PRO28 Series)", 0 )
COMP( 1992, iskr3104, ibm5150, 0, iskr3104, pccga, pc_state, empty_init, "Schetmash", "Iskra 3104", MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/pc100.cpp b/src/mame/drivers/pc100.cpp
index ef3e1c2aa31..a3653e6738a 100644
--- a/src/mame/drivers/pc100.cpp
+++ b/src/mame/drivers/pc100.cpp
@@ -340,7 +340,7 @@ void pc100_state::pc100_io(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x03).rw(m_pic, FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff); // i8259
-// AM_RANGE(0x04, 0x07) i8237?
+// map(0x04, 0x07) i8237?
map(0x08, 0x0b).m(m_fdc, FUNC(upd765a_device::map)).umask16(0x00ff); // upd765
map(0x10, 0x17).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write)).umask16(0x00ff); // i8255 #1
map(0x18, 0x1f).rw("ppi8255_2", FUNC(i8255_device::read), FUNC(i8255_device::write)).umask16(0x00ff); // i8255 #2
diff --git a/src/mame/drivers/pc1512.cpp b/src/mame/drivers/pc1512.cpp
index b2eab2cf561..3be30bddb8d 100644
--- a/src/mame/drivers/pc1512.cpp
+++ b/src/mame/drivers/pc1512.cpp
@@ -625,7 +625,7 @@ void pc1512_state::pc1512_io(address_map &map)
// schematic calls for a stock 8086 and the I/O and data lines are multiplexed onto the same bus,
// plus address lines 20-10 are towards the middle of a standard ISA slot. If it turns out that this
// is not in fact accurate to hardware, please add this back in.
- // ADDRESS_MAP_GLOBAL_MASK(0x3ff)
+ // map.global_mask(0x3ff);
map(0x000, 0x00f).rw(m_dmac, FUNC(am9517a_device::read), FUNC(am9517a_device::write));
map(0x020, 0x021).rw(m_pic, FUNC(pic8259_device::read), FUNC(pic8259_device::write));
map(0x040, 0x043).rw(m_pit, FUNC(pit8253_device::read), FUNC(pit8253_device::write));
diff --git a/src/mame/drivers/pc6001.cpp b/src/mame/drivers/pc6001.cpp
index a357b430de0..73c840dbc4a 100644
--- a/src/mame/drivers/pc6001.cpp
+++ b/src/mame/drivers/pc6001.cpp
@@ -231,7 +231,7 @@ void pc6001_state::pc6001_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x3fff).rom().nopw();
-// AM_RANGE(0x4000, 0x5fff) // mapped by the cartslot
+// map(0x4000, 0x5fff) // mapped by the cartslot
map(0x6000, 0x7fff).bankr("bank1");
map(0x8000, 0xffff).ram().share("ram");
}
@@ -718,8 +718,8 @@ void pc6001mk2_state::pc6001mk2_io(address_map &map)
map(0xf1, 0xf1).rw(FUNC(pc6001mk2_state::mk2_bank_r1_r), FUNC(pc6001mk2_state::mk2_bank_r1_w));
map(0xf2, 0xf2).rw(FUNC(pc6001mk2_state::mk2_bank_w0_r), FUNC(pc6001mk2_state::mk2_bank_w0_w));
map(0xf3, 0xf3).w(FUNC(pc6001mk2_state::mk2_0xf3_w));
-// AM_RANGE(0xf4
-// AM_RANGE(0xf5
+// map(0xf4
+// map(0xf5
map(0xf6, 0xf6).w(FUNC(pc6001mk2_state::mk2_timer_adj_w));
map(0xf7, 0xf7).w(FUNC(pc6001mk2_state::mk2_timer_irqv_w));
}
@@ -748,9 +748,9 @@ void pc6601_state::pc6601_io(address_map &map)
pc6001mk2_io(map);
// these are disk related
-// AM_RANGE(0xb1
-// AM_RANGE(0xb2
-// AM_RANGE(0xb3
+// map(0xb1
+// map(0xb2
+// map(0xb3
map(0xd0, 0xdf).rw(FUNC(pc6601_state::fdc_r), FUNC(pc6601_state::fdc_w));
}
@@ -942,14 +942,14 @@ void pc6001sr_state::pc6001sr_io(address_map &map)
map(0xb0, 0xb0).w(FUNC(pc6001sr_state::sr_system_latch_w));
/* these are disk related */
-// AM_RANGE(0xb1
+// map(0xb1
map(0xb2, 0xb2).r(FUNC(pc6001sr_state::hw_rev_r));
-// AM_RANGE(0xb3
+// map(0xb3
map(0xb8, 0xbf).ram().share("irq_vectors");
-// AM_RANGE(0xc0, 0xc0) AM_WRITE(mk2_col_bank_w)
-// AM_RANGE(0xc1, 0xc1) AM_WRITE(mk2_vram_bank_w)
-// AM_RANGE(0xc2, 0xc2) AM_WRITE(opt_bank_w)
+// map(0xc0, 0xc0).w(FUNC(pc6001sr_state::mk2_col_bank_w));
+// map(0xc1, 0xc1).w(FUNC(pc6001sr_state::mk2_vram_bank_w));
+// map(0xc2, 0xc2).w(FUNC(pc6001sr_state::opt_bank_w));
map(0xc8, 0xc8).w(FUNC(pc6001sr_state::sr_mode_w));
map(0xc9, 0xc9).w(FUNC(pc6001sr_state::sr_vram_bank_w));
@@ -960,12 +960,12 @@ void pc6001sr_state::pc6001sr_io(address_map &map)
map(0xe0, 0xe3).mirror(0x0c).rw("upd7752", FUNC(upd7752_device::read), FUNC(upd7752_device::write));
-// AM_RANGE(0xf0, 0xf0) AM_READWRITE(mk2_bank_r0_r, mk2_bank_r0_w)
-// AM_RANGE(0xf1, 0xf1) AM_READWRITE(mk2_bank_r1_r, mk2_bank_r1_w)
-// AM_RANGE(0xf2, 0xf2) AM_READWRITE(mk2_bank_w0_r, mk2_bank_w0_w)
+// map(0xf0, 0xf0).rw(FUNC(pc6001sr_state::mk2_bank_r0_r), FUNC(pc6001sr_state::mk2_bank_r0_w));
+// map(0xf1, 0xf1).rw(FUNC(pc6001sr_state::mk2_bank_r1_r), FUNC(pc6001sr_state::mk2_bank_r1_w));
+// map(0xf2, 0xf2).rw(FUNC(pc6001sr_state::mk2_bank_w0_r), FUNC(pc6001sr_state::mk2_bank_w0_w));
map(0xf3, 0xf3).w(FUNC(pc6001sr_state::mk2_0xf3_w));
-// AM_RANGE(0xf4
-// AM_RANGE(0xf5
+// map(0xf4
+// map(0xf5
map(0xf6, 0xf6).w(FUNC(pc6001sr_state::mk2_timer_adj_w));
map(0xf7, 0xf7).w(FUNC(pc6001sr_state::mk2_timer_irqv_w));
}
diff --git a/src/mame/drivers/pc8001.cpp b/src/mame/drivers/pc8001.cpp
index 68b6f0713d1..bbcf9e8b3ed 100644
--- a/src/mame/drivers/pc8001.cpp
+++ b/src/mame/drivers/pc8001.cpp
@@ -193,30 +193,30 @@ void pc8001_state::pc8001_io(address_map &map)
map(0x40, 0x40).mirror(0x0f).rw(FUNC(pc8001_state::port40_r), FUNC(pc8001_state::port40_w));
map(0x50, 0x51).rw(m_crtc, FUNC(upd3301_device::read), FUNC(upd3301_device::write));
map(0x60, 0x68).rw(m_dma, FUNC(i8257_device::read), FUNC(i8257_device::write));
-// AM_RANGE(0x70, 0x7f) unused
-// AM_RANGE(0x80, 0x80) AM_MIRROR(0x0f) AM_WRITE(pc8011_ext0_w)
-// AM_RANGE(0x90, 0x90) AM_MIRROR(0x0f) AM_WRITE(pc8011_ext1_w)
-// AM_RANGE(0xa0, 0xa0) AM_MIRROR(0x0f) AM_WRITE(pc8011_ext2_w)
-// AM_RANGE(0xb0, 0xb0) AM_READ(pc8011_gpio8_r)
-// AM_RANGE(0xb1, 0xb1) AM_WRITE(pc8011_gpio8_w)
-// AM_RANGE(0xb2, 0xb2) AM_READ(pc8011_gpio4_r)
-// AM_RANGE(0xb3, 0xb3) AM_WRITE(pc8011_gpio4_w)
-// AM_RANGE(0xc0, 0xc0) AM_DEVREADWRITE(PC8011_CH1_I8251_TAG, i8251_device, data_r, data_w)
-// AM_RANGE(0xc1, 0xc1) AM_DEVREADWRITE(PC8011_CH1_I8251_TAG, i8251_device, status_r, control_w)
-// AM_RANGE(0xc2, 0xc2) AM_DEVREADWRITE(PC8011_CH2_I8251_TAG, i8251_device, data_r, data_w)
-// AM_RANGE(0xc3, 0xc3) AM_DEVREADWRITE(PC8011_CH2_I8251_TAG, i8251_device, status_r, control_w)
-// AM_RANGE(0xc8, 0xc8) RS-232 output enable?
-// AM_RANGE(0xca, 0xca) RS-232 output disable?
-// AM_RANGE(0xd0, 0xd3) AM_DEVREADWRITE(PC8011_IEEE488_I8255A_TAG, i8255_device, read, write)
-// AM_RANGE(0xd8, 0xd8) AM_READ(pc8011_ieee488_control_signal_input_r)
-// AM_RANGE(0xda, 0xda) AM_READ(pc8011_ieee488_bus_address_mode_r)
-// AM_RANGE(0xdc, 0xdc) AM_WRITE(pc8011_ieee488_nrfd_w)
-// AM_RANGE(0xde, 0xde) AM_WRITE(pc8011_ieee488_bus_mode_control_w)
-// AM_RANGE(0xe0, 0xe3) AM_WRITE(expansion_storage_mode_w)
-// AM_RANGE(0xe4, 0xe4) AM_MIRROR(0x01) AM_WRITE(irq_level_w)
-// AM_RANGE(0xe6, 0xe6) AM_WRITE(irq_mask_w)
-// AM_RANGE(0xe7, 0xe7) AM_WRITE(pc8012_memory_mode_w)
-// AM_RANGE(0xe8, 0xfb) unused
+// map(0x70, 0x7f) unused
+// map(0x80, 0x80).mirror(0x0f).w(FUNC(pc8001_state::pc8011_ext0_w));
+// map(0x90, 0x90).mirror(0x0f).w(FUNC(pc8001_state::pc8011_ext1_w));
+// map(0xa0, 0xa0).mirror(0x0f).w(FUNC(pc8001_state::pc8011_ext2_w));
+// map(0xb0, 0xb0).r(FUNC(pc8001_state::pc8011_gpio8_r));
+// map(0xb1, 0xb1).w(FUNC(pc8001_state::pc8011_gpio8_w));
+// map(0xb2, 0xb2).r(FUNC(pc8001_state::pc8011_gpio4_r));
+// map(0xb3, 0xb3).w(FUNC(pc8001_state::pc8011_gpio4_w));
+// map(0xc0, 0xc0).rw(PC8011_CH1_I8251_TAG, FUNC(i8251_device::data_r), FUNC(i8251_device::data_w));
+// map(0xc1, 0xc1).rw(PC8011_CH1_I8251_TAG, FUNC(i8251_device::status_r), FUNC(i8251_device::control_w));
+// map(0xc2, 0xc2).rw(PC8011_CH2_I8251_TAG, FUNC(i8251_device::data_r), FUNC(i8251_device::data_w));
+// map(0xc3, 0xc3).rw(PC8011_CH2_I8251_TAG, FUNC(i8251_device::status_r), FUNC(i8251_device::control_w));
+// map(0xc8, 0xc8) RS-232 output enable?)
+// map(0xca, 0xca) RS-232 output disable?
+// map(0xd0, 0xd3).rw(PC8011_IEEE488_I8255A_TAG, FUNC(i8255_device::read), FUNC(i8255_device::write));
+// map(0xd8, 0xd8).r(FUNC(pc8001_state::pc8011_ieee488_control_signal_input_r));
+// map(0xda, 0xda).r(FUNC(pc8001_state::pc8011_ieee488_bus_address_mode_r));
+// map(0xdc, 0xdc).w(FUNC(pc8001_state::pc8011_ieee488_nrfd_w));
+// map(0xde, 0xde).w(FUNC(pc8001_state::pc8011_ieee488_bus_mode_control_w));
+// map(0xe0, 0xe3).w(FUNC(pc8001_state::expansion_storage_mode_w));
+// map(0xe4, 0xe4).mirror(0x01).w(FUNC(pc8001_state::irq_level_w));
+// map(0xe6, 0xe6).w(FUNC(pc8001_state::irq_mask_w));
+// map(0xe7, 0xe7).w(FUNC(pc8001_state::pc8012_memory_mode_w));
+// map(0xe8, 0xfb) unused
map(0xfc, 0xff).rw(I8255A_TAG, FUNC(i8255_device::read), FUNC(i8255_device::write));
}
@@ -233,21 +233,21 @@ void pc8001mk2_state::pc8001mk2_io(address_map &map)
pc8001_io(map);
map(0x30, 0x30).w(FUNC(pc8001mk2_state::port30_w));
map(0x31, 0x31).w(FUNC(pc8001mk2_state::port31_w));
-// AM_RANGE(0x5c, 0x5c) AM_WRITE(gram_on_w)
-// AM_RANGE(0x5f, 0x5f) AM_WRITE(gram_off_w)
-// AM_RANGE(0xe8, 0xe8) kanji_address_lo_w, kanji_data_lo_r
-// AM_RANGE(0xe9, 0xe9) kanji_address_hi_w, kanji_data_hi_r
-// AM_RANGE(0xea, 0xea) kanji_readout_start_w
-// AM_RANGE(0xeb, 0xeb) kanji_readout_end_w
-// AM_RANGE(0xf3, 0xf3) DMA type disk unit interface selection port
-// AM_RANGE(0xf4, 0xf4) DMA type 8 inch control
-// AM_RANGE(0xf5, 0xf5) DMA type 8 inch margin control
-// AM_RANGE(0xf6, 0xf6) DMA type 8 inch FDC status
-// AM_RANGE(0xf7, 0xf7) DMA type 8 inch FDC data register
-// AM_RANGE(0xf8, 0xf8) DMA type 5 inch control
-// AM_RANGE(0xf9, 0xf9) DMA type 5 inch margin control
-// AM_RANGE(0xfa, 0xfa) DMA type 5 inch FDC status
-// AM_RANGE(0xfb, 0xfb) DMA type 5 inch FDC data register
+// map(0x5c, 0x5c).w(FUNC(pc8001mk2_state::gram_on_w));
+// map(0x5f, 0x5f).w(FUNC(pc8001mk2_state::gram_off_w));
+// map(0xe8, 0xe8) kanji_address_lo_w, kanji_data_lo_r
+// map(0xe9, 0xe9) kanji_address_hi_w, kanji_data_hi_r
+// map(0xea, 0xea) kanji_readout_start_w
+// map(0xeb, 0xeb) kanji_readout_end_w
+// map(0xf3, 0xf3) DMA type disk unit interface selection port
+// map(0xf4, 0xf4) DMA type 8 inch control
+// map(0xf5, 0xf5) DMA type 8 inch margin control
+// map(0xf6, 0xf6) DMA type 8 inch FDC status
+// map(0xf7, 0xf7) DMA type 8 inch FDC data register
+// map(0xf8, 0xf8) DMA type 5 inch control
+// map(0xf9, 0xf9) DMA type 5 inch margin control
+// map(0xfa, 0xfa) DMA type 5 inch FDC status
+// map(0xfb, 0xfb) DMA type 5 inch FDC data register
}
/* Input Ports */
diff --git a/src/mame/drivers/pc8401a.cpp b/src/mame/drivers/pc8401a.cpp
index 13a06f1a0a2..770e7ad0505 100644
--- a/src/mame/drivers/pc8401a.cpp
+++ b/src/mame/drivers/pc8401a.cpp
@@ -57,7 +57,7 @@ void pc8401a_state::scan_keyboard()
if (!m_key_strobe && strobe)
{
/* trigger interrupt */
- m_maincpu->set_input_line_and_vector(INPUT_LINE_IRQ0, ASSERT_LINE, 0x28); // Z80
+ m_maincpu->set_input_line_and_vector(INPUT_LINE_IRQ0, ASSERT_LINE, 0xef); // Z80 - RST 28h
logerror("INTERRUPT\n");
}
@@ -363,23 +363,23 @@ void pc8401a_state::pc8500_io(address_map &map)
map(0x10, 0x10).w(FUNC(pc8401a_state::rtc_cmd_w));
map(0x20, 0x21).rw(I8251_TAG, FUNC(i8251_device::read), FUNC(i8251_device::write));
map(0x30, 0x30).rw(FUNC(pc8401a_state::mmr_r), FUNC(pc8401a_state::mmr_w));
-// AM_RANGE(0x31, 0x31)
+// map(0x31, 0x31)
map(0x40, 0x40).rw(FUNC(pc8401a_state::rtc_r), FUNC(pc8401a_state::rtc_ctrl_w));
-// AM_RANGE(0x41, 0x41)
-// AM_RANGE(0x50, 0x51)
+// map(0x41, 0x41)
+// map(0x50, 0x51)
map(0x60, 0x60).rw(m_lcdc, FUNC(sed1330_device::status_r), FUNC(sed1330_device::data_w));
map(0x61, 0x61).rw(m_lcdc, FUNC(sed1330_device::data_r), FUNC(sed1330_device::command_w));
map(0x70, 0x70).rw(FUNC(pc8401a_state::port70_r), FUNC(pc8401a_state::port70_w));
map(0x71, 0x71).rw(FUNC(pc8401a_state::port71_r), FUNC(pc8401a_state::port71_w));
-// AM_RANGE(0x80, 0x80) modem status, set to 0xff to boot
-// AM_RANGE(0x8b, 0x8b)
-// AM_RANGE(0x90, 0x93)
-// AM_RANGE(0xa0, 0xa1)
+// map(0x80, 0x80) modem status, set to 0xff to boot
+// map(0x8b, 0x8b)
+// map(0x90, 0x93)
+// map(0xa0, 0xa1)
map(0x98, 0x98).w(m_crtc, FUNC(mc6845_device::address_w));
map(0x99, 0x99).rw(m_crtc, FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
map(0xb0, 0xb3).w(FUNC(pc8401a_state::io_rom_addr_w));
map(0xb3, 0xb3).r(FUNC(pc8401a_state::io_rom_data_r));
-// AM_RANGE(0xc8, 0xc8)
+// map(0xc8, 0xc8)
map(0xfc, 0xff).rw(I8255A_TAG, FUNC(i8255_device::read), FUNC(i8255_device::write));
}
@@ -573,7 +573,7 @@ WRITE8_MEMBER( pc8401a_state::ppi_pc_w )
void pc8401a_state::pc8401a(machine_config &config)
{
/* basic machine hardware */
- Z80(config, m_maincpu, 4000000); // NEC uPD70008C
+ Z80(config, m_maincpu, 7.987_MHz_XTAL / 2); // NEC uPD70008C
m_maincpu->set_addrmap(AS_PROGRAM, &pc8401a_state::pc8401a_mem);
m_maincpu->set_addrmap(AS_IO, &pc8401a_state::pc8401a_io);
diff --git a/src/mame/drivers/pc8801.cpp b/src/mame/drivers/pc8801.cpp
index 75c80ce858b..3a974bdef71 100644
--- a/src/mame/drivers/pc8801.cpp
+++ b/src/mame/drivers/pc8801.cpp
@@ -1577,14 +1577,14 @@ void pc8801_state::pc8801_io(address_map &map)
map(0x71, 0x71).rw(FUNC(pc8801_state::pc8801_ext_rom_bank_r), FUNC(pc8801_state::pc8801_ext_rom_bank_w));
map(0x78, 0x78).w(FUNC(pc8801_state::pc8801_window_bank_inc_w));
map(0x90, 0x9f).rw(FUNC(pc8801_state::pc8801_cdrom_r), FUNC(pc8801_state::pc8801_cdrom_w));
-// AM_RANGE(0xa0, 0xa3) AM_NOP /* music & network */
+// map(0xa0, 0xa3).noprw(); /* music & network */
map(0xa8, 0xad).rw(FUNC(pc8801_state::pc8801_opna_r), FUNC(pc8801_state::pc8801_opna_w)); /* second sound board */
-// AM_RANGE(0xb4, 0xb5) AM_NOP /* Video art board */
-// AM_RANGE(0xc1, 0xc1) AM_NOP /* (unknown) */
-// AM_RANGE(0xc2, 0xcf) AM_NOP /* music */
-// AM_RANGE(0xd0, 0xd7) AM_NOP /* music & GP-IB */
-// AM_RANGE(0xd8, 0xd8) AM_NOP /* GP-IB */
-// AM_RANGE(0xdc, 0xdf) AM_NOP /* MODEM */
+// map(0xb4, 0xb5).noprw(); /* Video art board */
+// map(0xc1, 0xc1).noprw(); /* (unknown) */
+// map(0xc2, 0xcf).noprw(); /* music */
+// map(0xd0, 0xd7).noprw(); /* music & GP-IB */
+// map(0xd8, 0xd8).noprw(); /* GP-IB */
+// map(0xdc, 0xdf).noprw(); /* MODEM */
map(0xe2, 0xe2).rw(FUNC(pc8801_state::pc8801_extram_mode_r), FUNC(pc8801_state::pc8801_extram_mode_w)); /* expand RAM mode */
map(0xe3, 0xe3).rw(FUNC(pc8801_state::pc8801_extram_bank_r), FUNC(pc8801_state::pc8801_extram_bank_w)); /* expand RAM bank */
#if USE_PROPER_I8214
@@ -1594,14 +1594,14 @@ void pc8801_state::pc8801_io(address_map &map)
map(0xe4, 0xe4).w(FUNC(pc8801_state::pc8801_irq_level_w));
map(0xe6, 0xe6).w(FUNC(pc8801_state::pc8801_irq_mask_w));
#endif
-// AM_RANGE(0xe7, 0xe7) AM_NOP /* Arcus writes here, almost likely to be a mirror of above */
+// map(0xe7, 0xe7).noprw(); /* Arcus writes here, almost likely to be a mirror of above */
map(0xe8, 0xeb).rw(FUNC(pc8801_state::pc8801_kanji_r), FUNC(pc8801_state::pc8801_kanji_w));
map(0xec, 0xef).rw(FUNC(pc8801_state::pc8801_kanji_lv2_r), FUNC(pc8801_state::pc8801_kanji_lv2_w));
map(0xf0, 0xf0).w(FUNC(pc8801_state::pc8801_dic_bank_w));
map(0xf1, 0xf1).w(FUNC(pc8801_state::pc8801_dic_ctrl_w));
-// AM_RANGE(0xf3, 0xf3) AM_NOP /* DMA floppy (unknown) */
-// AM_RANGE(0xf4, 0xf7) AM_NOP /* DMA 5'floppy (may be not released) */
-// AM_RANGE(0xf8, 0xfb) AM_NOP /* DMA 8'floppy (unknown) */
+// map(0xf3, 0xf3).noprw(); /* DMA floppy (unknown) */
+// map(0xf4, 0xf7).noprw(); /* DMA 5'floppy (may be not released) */
+// map(0xf8, 0xfb).noprw(); /* DMA 8'floppy (unknown) */
map(0xfc, 0xff).rw("d8255_master", FUNC(i8255_device::read), FUNC(i8255_device::write));
}
@@ -2020,7 +2020,7 @@ static const cassette_interface pc88_cassette_interface =
{
cassette_default_formats, // we need T88 format support!
nullptr,
- (cassette_state)(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_MUTED),
+ CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_MUTED,
"pc8801_cass"
};
#endif
diff --git a/src/mame/drivers/pc88va.cpp b/src/mame/drivers/pc88va.cpp
index aa590135464..f632a626e8e 100644
--- a/src/mame/drivers/pc88va.cpp
+++ b/src/mame/drivers/pc88va.cpp
@@ -1019,27 +1019,27 @@ READ8_MEMBER(pc88va_state::no_subfdc_r)
void pc88va_state::pc88va_io_map(address_map &map)
{
map(0x0000, 0x000f).r(FUNC(pc88va_state::key_r)); // Keyboard ROW reading
-// AM_RANGE(0x0010, 0x0010) Printer / Calendar Clock Interface
+// map(0x0010, 0x0010) Printer / Calendar Clock Interface
map(0x0020, 0x0021).noprw(); // RS-232C
map(0x0030, 0x0031).rw(FUNC(pc88va_state::backupram_dsw_r), FUNC(pc88va_state::sys_port1_w)); // 0x30 (R) DSW1 (W) Text Control Port 0 / 0x31 (R) DSW2 (W) System Port 1
-// AM_RANGE(0x0032, 0x0032) (R) ? (W) System Port 2
-// AM_RANGE(0x0034, 0x0034) GVRAM Control Port 1
-// AM_RANGE(0x0035, 0x0035) GVRAM Control Port 2
+// map(0x0032, 0x0032) (R) ? (W) System Port 2
+// map(0x0034, 0x0034) GVRAM Control Port 1
+// map(0x0035, 0x0035) GVRAM Control Port 2
map(0x0040, 0x0041).r(FUNC(pc88va_state::sys_port4_r)); // (R) System Port 4 (W) System port 3 (strobe port)
map(0x0044, 0x0045).mirror(0x0002).rw("ym", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
-// AM_RANGE(0x005c, 0x005c) (R) GVRAM status
-// AM_RANGE(0x005c, 0x005f) (W) GVRAM selection
-// AM_RANGE(0x0070, 0x0070) ? (*)
-// AM_RANGE(0x0071, 0x0071) Expansion ROM select (*)
-// AM_RANGE(0x0078, 0x0078) Memory offset increment (*)
-// AM_RANGE(0x0080, 0x0081) HDD related
+// map(0x005c, 0x005c) (R) GVRAM status
+// map(0x005c, 0x005f) (W) GVRAM selection
+// map(0x0070, 0x0070) ? (*)
+// map(0x0071, 0x0071) Expansion ROM select (*)
+// map(0x0078, 0x0078) Memory offset increment (*)
+// map(0x0080, 0x0081) HDD related
map(0x0082, 0x0082).r(FUNC(pc88va_state::hdd_status_r));// HDD control, byte access 7-0
-// AM_RANGE(0x00bc, 0x00bf) d8255 1
-// AM_RANGE(0x00e2, 0x00e3) Expansion RAM selection (*)
-// AM_RANGE(0x00e4, 0x00e4) 8214 IRQ control (*)
-// AM_RANGE(0x00e6, 0x00e6) 8214 IRQ mask (*)
-// AM_RANGE(0x00e8, 0x00e9) ? (*)
-// AM_RANGE(0x00ec, 0x00ed) ? (*)
+// map(0x00bc, 0x00bf) d8255 1
+// map(0x00e2, 0x00e3) Expansion RAM selection (*)
+// map(0x00e4, 0x00e4) 8214 IRQ control (*)
+// map(0x00e6, 0x00e6) 8214 IRQ mask (*)
+// map(0x00e8, 0x00e9) ? (*)
+// map(0x00ec, 0x00ed) ? (*)
#if TEST_SUBFDC
map(0x00fc, 0x00ff).rw("d8255_2", FUNC(i8255_device::read), FUNC(i8255_device::write)); // d8255 2, FDD
#else
@@ -1047,49 +1047,49 @@ void pc88va_state::pc88va_io_map(address_map &map)
#endif
map(0x0100, 0x0101).rw(FUNC(pc88va_state::screen_ctrl_r), FUNC(pc88va_state::screen_ctrl_w)); // Screen Control Register
-// AM_RANGE(0x0102, 0x0103) Graphic Screen Control Register
+// map(0x0102, 0x0103) Graphic Screen Control Register
map(0x0106, 0x0109).w(FUNC(pc88va_state::video_pri_w)); // Palette Control Register (priority) / Direct Color Control Register (priority)
-// AM_RANGE(0x010a, 0x010b) Picture Mask Mode Register
-// AM_RANGE(0x010c, 0x010d) Color Palette Mode Register
-// AM_RANGE(0x010e, 0x010f) Backdrop Color Register
-// AM_RANGE(0x0110, 0x0111) Color Code/Plain Mask Register
-// AM_RANGE(0x0124, 0x0125) ? (related to Transparent Color of Graphic Screen 0)
-// AM_RANGE(0x0126, 0x0127) ? (related to Transparent Color of Graphic Screen 1)
-// AM_RANGE(0x012e, 0x012f) ? (related to Transparent Color of Text/Sprite)
-// AM_RANGE(0x0130, 0x0137) Picture Mask Parameter
+// map(0x010a, 0x010b) Picture Mask Mode Register
+// map(0x010c, 0x010d) Color Palette Mode Register
+// map(0x010e, 0x010f) Backdrop Color Register
+// map(0x0110, 0x0111) Color Code/Plain Mask Register
+// map(0x0124, 0x0125) ? (related to Transparent Color of Graphic Screen 0)
+// map(0x0126, 0x0127) ? (related to Transparent Color of Graphic Screen 1)
+// map(0x012e, 0x012f) ? (related to Transparent Color of Text/Sprite)
+// map(0x0130, 0x0137) Picture Mask Parameter
map(0x0142, 0x0142).rw(FUNC(pc88va_state::idp_status_r), FUNC(pc88va_state::idp_command_w)); //Text Controller (IDP) - (R) Status (W) command
map(0x0146, 0x0146).w(FUNC(pc88va_state::idp_param_w)); //Text Controller (IDP) - (R/W) Parameter
-// AM_RANGE(0x0148, 0x0149) Text control port 1
-// AM_RANGE(0x014c, 0x014f) ? CG Port
+// map(0x0148, 0x0149) Text control port 1
+// map(0x014c, 0x014f) ? CG Port
map(0x0150, 0x0151).r(FUNC(pc88va_state::sysop_r)); // System Operational Mode
map(0x0152, 0x0153).rw(FUNC(pc88va_state::bios_bank_r), FUNC(pc88va_state::bios_bank_w)); // Memory Map Register
-// AM_RANGE(0x0154, 0x0155) Refresh Register (wait states)
+// map(0x0154, 0x0155) Refresh Register (wait states)
map(0x0156, 0x0156).r(FUNC(pc88va_state::rom_bank_r)); // ROM bank status
-// AM_RANGE(0x0158, 0x0159) Interruption Mode Modification
-// AM_RANGE(0x015c, 0x015f) NMI mask port (strobe port)
+// map(0x0158, 0x0159) Interruption Mode Modification
+// map(0x015c, 0x015f) NMI mask port (strobe port)
map(0x0160, 0x016f).rw(m_dmac, FUNC(am9517a_device::read), FUNC(am9517a_device::write)); // DMA Controller
map(0x0184, 0x0187).rw("pic8259_slave", FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff);
map(0x0188, 0x018b).rw("pic8259_master", FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff); // ICU, also controls 8214 emulation
-// AM_RANGE(0x0190, 0x0191) System Port 5
-// AM_RANGE(0x0196, 0x0197) Keyboard sub CPU command port
+// map(0x0190, 0x0191) System Port 5
+// map(0x0196, 0x0197) Keyboard sub CPU command port
map(0x0198, 0x0199).w(FUNC(pc88va_state::backupram_wp_1_w)); //Backup RAM write inhibit
map(0x019a, 0x019b).w(FUNC(pc88va_state::backupram_wp_0_w)); //Backup RAM write permission
map(0x01a0, 0x01a7).rw("pit8253", FUNC(pit8253_device::read), FUNC(pit8253_device::write)).umask16(0x00ff);// vTCU (timer counter unit)
map(0x01a8, 0x01a8).w(FUNC(pc88va_state::timer3_ctrl_reg_w)); // General-purpose timer 3 control port
map(0x01b0, 0x01b7).rw(FUNC(pc88va_state::pc88va_fdc_r), FUNC(pc88va_state::pc88va_fdc_w)).umask16(0x00ff);// FDC related (765)
map(0x01b8, 0x01bb).m(m_fdc, FUNC(upd765a_device::map)).umask16(0x00ff);
-// AM_RANGE(0x01c0, 0x01c1) ?
+// map(0x01c0, 0x01c1) ?
map(0x01c6, 0x01c7).nopw(); // ???
map(0x01c8, 0x01cf).rw("d8255_3", FUNC(i8255_device::read), FUNC(i8255_device::write)).umask16(0xff00); //i8255 3 (byte access)
-// AM_RANGE(0x01d0, 0x01d1) Expansion RAM bank selection
+// map(0x01d0, 0x01d1) Expansion RAM bank selection
map(0x0200, 0x021f).ram(); // Frame buffer 0 control parameter
map(0x0220, 0x023f).ram(); // Frame buffer 1 control parameter
map(0x0240, 0x025f).ram(); // Frame buffer 2 control parameter
map(0x0260, 0x027f).ram(); // Frame buffer 3 control parameter
map(0x0300, 0x033f).ram().w(FUNC(pc88va_state::palette_ram_w)).share("palram"); // Palette RAM (xBBBBxRRRRxGGGG format)
-// AM_RANGE(0x0500, 0x05ff) GVRAM
-// AM_RANGE(0x1000, 0xfeff) user area (???)
+// map(0x0500, 0x05ff) GVRAM
+// map(0x1000, 0xfeff) user area (???)
map(0xff00, 0xffff).noprw(); // CPU internal use
}
// (*) are specific N88 V1 / V2 ports
@@ -1129,7 +1129,7 @@ void pc88va_state::pc88va_z80_io_map(address_map &map)
{
map.global_mask(0xff);
map(0xf0, 0xf0).w(FUNC(pc88va_state::fdc_irq_vector_w)); // Interrupt Opcode Port
-// AM_RANGE(0xf4, 0xf4) // Drive Control Port
+// map(0xf4, 0xf4) // Drive Control Port
map(0xf8, 0xf8).rw(FUNC(pc88va_state::upd765_tc_r), FUNC(pc88va_state::upd765_mc_w)); // (R) Terminal Count Port (W) Motor Control Port
map(0xfa, 0xfb).m(m_fdc, FUNC(upd765a_device::map));
map(0xfc, 0xff).rw("d8255_2s", FUNC(i8255_device::read), FUNC(i8255_device::write));
diff --git a/src/mame/drivers/pc9801.cpp b/src/mame/drivers/pc9801.cpp
index 76144fb92d7..58ca84c67a5 100644
--- a/src/mame/drivers/pc9801.cpp
+++ b/src/mame/drivers/pc9801.cpp
@@ -672,7 +672,7 @@ void pc9801_state::pc9801_common_io(address_map &map)
map(0x0050, 0x0057).w(FUNC(pc9801_state::nmi_ctrl_w)).umask16(0x00ff); // NMI FF / i8255 floppy port (2d?)
map(0x0060, 0x0063).rw(m_hgdc1, FUNC(upd7220_device::read), FUNC(upd7220_device::write)).umask16(0x00ff); //upd7220 character ports / <undefined>
map(0x0064, 0x0064).w(FUNC(pc9801_state::vrtc_clear_w));
-// AM_RANGE(0x006c, 0x006f) border color / <undefined>
+// map(0x006c, 0x006f) border color / <undefined>
map(0x0070, 0x007f).rw(m_pit8253, FUNC(pit8253_device::read), FUNC(pit8253_device::write)).umask16(0xff00);
map(0x0070, 0x007f).rw(FUNC(pc9801_state::txt_scrl_r), FUNC(pc9801_state::txt_scrl_w)).umask16(0x00ff); //display registers / i8253 pit
map(0x0090, 0x0090).r(m_fdc_2hd, FUNC(upd765a_device::msr_r));
@@ -1098,7 +1098,7 @@ void pc9801_state::pc9801ux_io(address_map &map)
void pc9801_state::pc9801rs_map(address_map &map)
{
pc9801ux_map(map);
-// AM_RANGE(0x0d8000, 0x0d9fff) AM_ROM AM_REGION("ide",0)
+// map(0x0d8000, 0x0d9fff).rom().region("ide",0);
map(0x0da000, 0x0dbfff).ram(); // ide ram
map(0xee8000, 0xefffff).m(m_ipl, FUNC(address_map_bank_device::amap16));
map(0xfe8000, 0xffffff).m(m_ipl, FUNC(address_map_bank_device::amap16));
@@ -1420,7 +1420,7 @@ void pc9801_state::pc9821_map(address_map &map)
void pc9801_state::pc9821_io(address_map &map)
{
-// ADDRESS_MAP_UNMAP_HIGH // TODO: a read to somewhere makes this to fail at POST
+// map.unmap_value_high(); // TODO: a read to somewhere makes this to fail at POST
map(0x0000, 0x001f).rw(m_dmac, FUNC(am9517a_device::read), FUNC(am9517a_device::write)).umask32(0xff00ff00);
map(0x0000, 0x001f).r(read8_delegate([this](address_space &s, offs_t o, u8 mm) { return BIT(o, 1) ? 0xff : pic_r(s, o, mm); }, "pc9821_pic")).umask32(0x00ff00ff);
map(0x0000, 0x001f).w(FUNC(pc9801_state::pic_w)).umask32(0x00ff00ff); // i8259 PIC (bit 3 ON slave / master) / i8237 DMA
@@ -1440,36 +1440,36 @@ void pc9801_state::pc9821_io(address_map &map)
map(0x0090, 0x0093).m(m_fdc_2hd, FUNC(upd765a_device::map)).umask32(0x00ff00ff);
map(0x0094, 0x0094).rw(FUNC(pc9801_state::fdc_2hd_ctrl_r), FUNC(pc9801_state::fdc_2hd_ctrl_w));
map(0x00a0, 0x00af).rw(FUNC(pc9801_state::pc9821_a0_r), FUNC(pc9801_state::pc9821_a0_w)); //upd7220 bitmap ports / display registers
-// AM_RANGE(0x00b0, 0x00b3) PC9861k (serial port?)
-// AM_RANGE(0x00b9, 0x00b9) PC9861k
-// AM_RANGE(0x00bb, 0x00bb) PC9861k
+// map(0x00b0, 0x00b3) PC9861k (serial port?)
+// map(0x00b9, 0x00b9) PC9861k
+// map(0x00bb, 0x00bb) PC9861k
map(0x00bc, 0x00bf).rw(FUNC(pc9801_state::fdc_mode_ctrl_r), FUNC(pc9801_state::fdc_mode_ctrl_w));
map(0x00c8, 0x00cb).m(m_fdc_2hd, FUNC(upd765a_device::map)).umask32(0x00ff00ff);
map(0x00cc, 0x00cc).rw(FUNC(pc9801_state::fdc_2hd_ctrl_r), FUNC(pc9801_state::fdc_2hd_ctrl_w));
- // AM_RANGE(0x00d8, 0x00df) AMD98 (sound?) board
+ // map(0x00d8, 0x00df) AMD98 (sound?) board
map(0x00f0, 0x00ff).rw(FUNC(pc9801_state::a20_ctrl_r), FUNC(pc9801_state::a20_ctrl_w)).umask32(0x00ff00ff);
-// AM_RANGE(0x0188, 0x018f) AM_READWRITE8(pc9801_opn_r, pc9801_opn_w, 0xffffffff) //ym2203 opn / <undefined>
-// AM_RANGE(0x018c, 0x018f) YM2203 OPN extended ports / <undefined>
+// map(0x0188, 0x018f).rw(FUNC(pc9801_state::pc9801_opn_r), FUNC(pc9801_state::pc9801_opn_w)); //ym2203 opn / <undefined>
+// map(0x018c, 0x018f) YM2203 OPN extended ports / <undefined>
map(0x0430, 0x0433).rw(FUNC(pc9801_state::ide_ctrl_r), FUNC(pc9801_state::ide_ctrl_w)).umask32(0x00ff00ff);
map(0x0438, 0x043b).rw(FUNC(pc9801_state::access_ctrl_r), FUNC(pc9801_state::access_ctrl_w));
-// AM_RANGE(0x043d, 0x043d) ROM/RAM bank (NEC)
+// map(0x043d, 0x043d) ROM/RAM bank (NEC)
map(0x043c, 0x043f).w(FUNC(pc9801_state::pc9801rs_bank_w)); //ROM/RAM bank (EPSON)
map(0x0460, 0x0463).rw(FUNC(pc9801_state::window_bank_r), FUNC(pc9801_state::window_bank_w));
map(0x04a0, 0x04af).w(FUNC(pc9801_state::egc_w));
-// AM_RANGE(0x04be, 0x04be) FDC "RPM" register
+// map(0x04be, 0x04be) FDC "RPM" register
map(0x0640, 0x064f).rw(FUNC(pc9801_state::ide_cs0_r), FUNC(pc9801_state::ide_cs0_w));
map(0x0740, 0x074f).rw(FUNC(pc9801_state::ide_cs1_r), FUNC(pc9801_state::ide_cs1_w));
-// AM_RANGE(0x08e0, 0x08ea) <undefined> / EMM SIO registers
+// map(0x08e0, 0x08ea) <undefined> / EMM SIO registers
map(0x09a0, 0x09a0).rw(FUNC(pc9801_state::ext2_video_ff_r), FUNC(pc9801_state::ext2_video_ff_w)); // GDC extended register r/w
-// AM_RANGE(0x09a8, 0x09a8) GDC 31KHz register r/w
-// AM_RANGE(0x0c07, 0x0c07) EPSON register w
-// AM_RANGE(0x0c03, 0x0c03) EPSON register 0 r
-// AM_RANGE(0x0c13, 0x0c14) EPSON register 1 r
-// AM_RANGE(0x0c24, 0x0c24) cs4231 PCM board register control
-// AM_RANGE(0x0c2b, 0x0c2b) cs4231 PCM board low byte control
-// AM_RANGE(0x0c2d, 0x0c2d) cs4231 PCM board hi byte control
-// AM_RANGE(0x0cc0, 0x0cc7) SCSI interface / <undefined>
-// AM_RANGE(0x0cfc, 0x0cff) PCI bus
+// map(0x09a8, 0x09a8) GDC 31KHz register r/w
+// map(0x0c07, 0x0c07) EPSON register w
+// map(0x0c03, 0x0c03) EPSON register 0 r
+// map(0x0c13, 0x0c14) EPSON register 1 r
+// map(0x0c24, 0x0c24) cs4231 PCM board register control
+// map(0x0c2b, 0x0c2b) cs4231 PCM board low byte control
+// map(0x0c2d, 0x0c2d) cs4231 PCM board hi byte control
+// map(0x0cc0, 0x0cc7) SCSI interface / <undefined>
+// map(0x0cfc, 0x0cff) PCI bus
map(0x1e8c, 0x1e8f).noprw(); // IDE RAM switch
map(0x2ed0, 0x2edf).r(read8_delegate([](address_space &s, offs_t o, u8 mm) { return 0xff; }, "pc9821_unkaudio")).umask32(0xffffffff); // unknown sound related
map(0x3fd8, 0x3fdf).rw(m_pit8253, FUNC(pit8253_device::read), FUNC(pit8253_device::write)).umask32(0xff00ff00); // <undefined> / pit mirror ports
@@ -1486,24 +1486,24 @@ void pc9801_state::pc9821_io(address_map &map)
map(0x8d1c, 0x8d1f).rw(FUNC(pc9801_state::sdip_9_r), FUNC(pc9801_state::sdip_9_w));
map(0x8e1c, 0x8e1f).rw(FUNC(pc9801_state::sdip_a_r), FUNC(pc9801_state::sdip_a_w));
map(0x8f1c, 0x8f1f).rw(FUNC(pc9801_state::sdip_b_r), FUNC(pc9801_state::sdip_b_w));
-// AM_RANGE(0xa460, 0xa46f) cs4231 PCM extended port / <undefined>
-// AM_RANGE(0xbfdb, 0xbfdb) mouse timing port
-// AM_RANGE(0xc0d0, 0xc0d3) MIDI port, option 0 / <undefined>
-// AM_RANGE(0xc4d0, 0xc4d3) MIDI port, option 1 / <undefined>
-// AM_RANGE(0xc8d0, 0xc8d3) MIDI port, option 2 / <undefined>
-// AM_RANGE(0xccd0, 0xccd3) MIDI port, option 3 / <undefined>
-// AM_RANGE(0xd0d0, 0xd0d3) MIDI port, option 4 / <undefined>
-// AM_RANGE(0xd4d0, 0xd4d3) MIDI port, option 5 / <undefined>
-// AM_RANGE(0xd8d0, 0xd8d3) MIDI port, option 6 / <undefined>
-// AM_RANGE(0xdcd0, 0xdcd3) MIDI port, option 7 / <undefined>
+// map(0xa460, 0xa46f) cs4231 PCM extended port / <undefined>
+// map(0xbfdb, 0xbfdb) mouse timing port
+// map(0xc0d0, 0xc0d3) MIDI port, option 0 / <undefined>
+// map(0xc4d0, 0xc4d3) MIDI port, option 1 / <undefined>
+// map(0xc8d0, 0xc8d3) MIDI port, option 2 / <undefined>
+// map(0xccd0, 0xccd3) MIDI port, option 3 / <undefined>
+// map(0xd0d0, 0xd0d3) MIDI port, option 4 / <undefined>
+// map(0xd4d0, 0xd4d3) MIDI port, option 5 / <undefined>
+// map(0xd8d0, 0xd8d3) MIDI port, option 6 / <undefined>
+// map(0xdcd0, 0xdcd3) MIDI port, option 7 / <undefined>
map(0xe0d0, 0xe0d3).r(FUNC(pc9801_state::midi_r)); // MIDI port, option 8 / <undefined>
-// AM_RANGE(0xe4d0, 0xe4d3) MIDI port, option 9 / <undefined>
-// AM_RANGE(0xe8d0, 0xe8d3) MIDI port, option A / <undefined>
-// AM_RANGE(0xecd0, 0xecd3) MIDI port, option B / <undefined>
-// AM_RANGE(0xf0d0, 0xf0d3) MIDI port, option C / <undefined>
-// AM_RANGE(0xf4d0, 0xf4d3) MIDI port, option D / <undefined>
-// AM_RANGE(0xf8d0, 0xf8d3) MIDI port, option E / <undefined>
-// AM_RANGE(0xfcd0, 0xfcd3) MIDI port, option F / <undefined>
+// map(0xe4d0, 0xe4d3) MIDI port, option 9 / <undefined>
+// map(0xe8d0, 0xe8d3) MIDI port, option A / <undefined>
+// map(0xecd0, 0xecd3) MIDI port, option B / <undefined>
+// map(0xf0d0, 0xf0d3) MIDI port, option C / <undefined>
+// map(0xf4d0, 0xf4d3) MIDI port, option D / <undefined>
+// map(0xf8d0, 0xf8d3) MIDI port, option E / <undefined>
+// map(0xfcd0, 0xfcd3) MIDI port, option F / <undefined>
}
// TODO: identify this, might be an alt way to access SDIP?
diff --git a/src/mame/drivers/pcd.cpp b/src/mame/drivers/pcd.cpp
index dce3bd79b43..d45bd67f866 100644
--- a/src/mame/drivers/pcd.cpp
+++ b/src/mame/drivers/pcd.cpp
@@ -437,7 +437,7 @@ void pcd_state::pcd_io(address_map &map)
map(0xf9c0, 0xf9c3).rw(m_usart[0], FUNC(mc2661_device::read), FUNC(mc2661_device::write)); // UARTs
map(0xf9d0, 0xf9d3).rw(m_usart[1], FUNC(mc2661_device::read), FUNC(mc2661_device::write));
map(0xf9e0, 0xf9e3).rw(m_usart[2], FUNC(mc2661_device::read), FUNC(mc2661_device::write));
-// AM_RANGE(0xfa00, 0xfa7f) // pcs4-n (peripheral chip select)
+// map(0xfa00, 0xfa7f) // pcs4-n (peripheral chip select)
map(0xfb00, 0xfb00).rw(FUNC(pcd_state::nmi_io_r), FUNC(pcd_state::nmi_io_w));
map(0xfb02, 0xffff).rw(FUNC(pcd_state::nmi_io_r), FUNC(pcd_state::nmi_io_w));
}
diff --git a/src/mame/drivers/pcfx.cpp b/src/mame/drivers/pcfx.cpp
index 1a40a8a32a7..37d0aa39c12 100644
--- a/src/mame/drivers/pcfx.cpp
+++ b/src/mame/drivers/pcfx.cpp
@@ -99,7 +99,7 @@ WRITE8_MEMBER(pcfx_state::extio_w)
void pcfx_state::pcfx_mem(address_map &map)
{
map(0x00000000, 0x001FFFFF).ram(); /* RAM */
-// AM_RANGE( 0x80000000, 0x807FFFFF ) AM_READWRITE8(extio_r,extio_w,0xffffffff) /* EXTIO */
+// map(0x80000000, 0x807FFFFF).rw(FUNC(pcfx_state::extio_r), FUNC(pcfx_state::extio_w)); /* EXTIO */
map(0xE0000000, 0xE7FFFFFF).noprw(); /* BackUp RAM */
map(0xE8000000, 0xE9FFFFFF).noprw(); /* Extended BackUp RAM */
map(0xF8000000, 0xF8000007).noprw(); /* PIO */
@@ -200,7 +200,7 @@ void pcfx_state::pcfx_io(address_map &map)
map(0x00000C80, 0x00000C83).noprw();
map(0x00000E00, 0x00000EFF).rw(FUNC(pcfx_state::irq_read), FUNC(pcfx_state::irq_write)).umask32(0x0000ffff); /* Interrupt controller */
map(0x00000F00, 0x00000FFF).noprw();
-// AM_RANGE( 0x00600000, 0x006FFFFF ) AM_READ(scsi_ctrl_r)
+// map(0x00600000, 0x006FFFFF).r(FUNC(pcfx_state::scsi_ctrl_r));
map(0x00780000, 0x007FFFFF).rom().region("scsi_rom", 0);
map(0x80500000, 0x805000FF).noprw(); /* HuC6273 */
}
diff --git a/src/mame/drivers/pcm.cpp b/src/mame/drivers/pcm.cpp
index b95f14e2166..738d713a819 100644
--- a/src/mame/drivers/pcm.cpp
+++ b/src/mame/drivers/pcm.cpp
@@ -179,9 +179,9 @@ void pcm_state::pcm_io(address_map &map)
map(0x88, 0x8B).rw("sio", FUNC(z80sio_device::cd_ba_r), FUNC(z80sio_device::cd_ba_w)); // SIO
map(0x8C, 0x8F).rw(m_ctc_u, FUNC(z80ctc_device::read), FUNC(z80ctc_device::write)); // user CTC
map(0x90, 0x93).rw(m_pio_u, FUNC(z80pio_device::read), FUNC(z80pio_device::write)); // user PIO
- //AM_RANGE(0x94, 0x97) // bank select
- //AM_RANGE(0x98, 0x9B) // NMI generator
- //AM_RANGE(0x9C, 0x9F) // io ports available to the user
+ //map(0x94, 0x97) // bank select
+ //map(0x98, 0x9B) // NMI generator
+ //map(0x9C, 0x9F) // io ports available to the user
// disk controller?
}
diff --git a/src/mame/drivers/pcxt.cpp b/src/mame/drivers/pcxt.cpp
index 2b2afb7fa88..51ffa944a9d 100644
--- a/src/mame/drivers/pcxt.cpp
+++ b/src/mame/drivers/pcxt.cpp
@@ -399,7 +399,7 @@ void pcxt_state::tetriskr_io(address_map &map)
map(0x0000, 0x00ff).m(m_mb, FUNC(pc_noppi_mb_device::map));
map(0x03c8, 0x03c8).portr("IN0");
map(0x03c9, 0x03c9).portr("IN1");
-// AM_RANGE(0x03ce, 0x03ce) AM_READ_PORT("IN1") //read then discarded?
+// map(0x03ce, 0x03ce).portr("IN1"); //read then discarded?
}
void pcxt_state::bank_map(address_map &map)
diff --git a/src/mame/drivers/pda600.cpp b/src/mame/drivers/pda600.cpp
index c6bf7d29a71..31d0054973a 100644
--- a/src/mame/drivers/pda600.cpp
+++ b/src/mame/drivers/pda600.cpp
@@ -91,7 +91,7 @@ void pda600_state::pda600_mem(address_map &map)
{
map.unmap_value_high();
map(0x00000, 0x1ffff).rom();
- //AM_RANGE(0x20000, 0x9ffff) AM_RAM // PCMCIA Card
+ //map(0x20000, 0x9ffff).ram(); // PCMCIA Card
map(0xa0000, 0xa7fff).ram().region("videoram", 0);
map(0xe0000, 0xfffff).ram().region("mainram", 0).share("nvram");
}
@@ -101,9 +101,9 @@ void pda600_state::pda600_io(address_map &map)
map.unmap_value_high();
map.global_mask(0xff);
map(0x00, 0x3f).noprw(); /* Z180 internal registers */
- //AM_RANGE(0x40, 0x7f) AM_NOP /* Z180 internal registers */
+ //map(0x40, 0x7f).noprw(); /* Z180 internal registers */
map(0x80, 0x8f).rw("rtc", FUNC(hd64610_device::read), FUNC(hd64610_device::write));
- //AM_RANGE(0xC0, 0xC1) AM_NOP /* LCD */
+ //map(0xc0, 0xc1).noprw(); /* LCD */
}
/* Input ports */
diff --git a/src/mame/drivers/pegasus.cpp b/src/mame/drivers/pegasus.cpp
index 548bc7c15b3..9abe19518be 100644
--- a/src/mame/drivers/pegasus.cpp
+++ b/src/mame/drivers/pegasus.cpp
@@ -199,10 +199,10 @@ READ8_MEMBER( pegasus_state::pegasus_protection_r )
void pegasus_state::pegasus_mem(address_map &map)
{
map.unmap_value_high();
- //AM_RANGE(0x0000, 0x2fff) // mapped by the cartslots 1-3
+ //map(0x0000, 0x2fff) // mapped by the cartslots 1-3
map(0xb000, 0xbdff).ram();
map(0xbe00, 0xbfff).ram().share("videoram");
- //AM_RANGE(0xc000, 0xdfff) // mapped by the cartslots 4-5
+ //map(0xc000, 0xdfff) // mapped by the cartslots 4-5
map(0xe000, 0xe1ff).r(FUNC(pegasus_state::pegasus_protection_r));
map(0xe200, 0xe3ff).rw(FUNC(pegasus_state::pegasus_pcg_r), FUNC(pegasus_state::pegasus_pcg_w));
map(0xe400, 0xe403).mirror(0x1fc).rw(m_pia_u, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
diff --git a/src/mame/drivers/pencil2.cpp b/src/mame/drivers/pencil2.cpp
index f6fe91efb81..9076c588f11 100644
--- a/src/mame/drivers/pencil2.cpp
+++ b/src/mame/drivers/pencil2.cpp
@@ -137,7 +137,7 @@ void pencil2_state::mem_map(address_map &map)
map(0x0000, 0x1fff).rom();
map(0x2000, 0x5fff).nopw(); // stop error log filling up
map(0x6000, 0x67ff).mirror(0x1800).ram();
- //AM_RANGE(0x8000, 0xffff) // mapped by the cartslot
+ //map(0x8000, 0xffff) // mapped by the cartslot
}
void pencil2_state::io_map(address_map &map)
diff --git a/src/mame/drivers/pgm2.cpp b/src/mame/drivers/pgm2.cpp
index 32db3b69231..641ab098576 100644
--- a/src/mame/drivers/pgm2.cpp
+++ b/src/mame/drivers/pgm2.cpp
@@ -509,7 +509,7 @@ READ32_MEMBER(pgm2_state::pio_pdsr_r)
void pgm2_state::pgm2_map(address_map &map)
{
- map(0x00000000, 0x00003fff).rom(); //AM_REGION("mainrom", 0x00000) // internal ROM
+ map(0x00000000, 0x00003fff).rom(); //.region("mainrom", 0x00000); // internal ROM
map(0x02000000, 0x0200ffff).ram().share("sram"); // 'battery RAM' (in CPU?)
@@ -553,17 +553,17 @@ void pgm2_state::pgm2_map(address_map &map)
map(0x40000000, 0x40000003).r("ymz774", FUNC(ymz774_device::read)).w("ymz774", FUNC(ymz774_device::write));
// internal IGS036 - most of them is standard ATMEL peripherals followed by custom bits
- // AM_RANGE(0xfffa0000, 0xfffa00ff) TC (Timer Counter) not used, mentioned in disabled / unused code
- // AM_RANGE(0xffffec00, 0xffffec7f) SMC (Static Memory Controller)
- // AM_RANGE(0xffffee00, 0xffffee57) MATRIX (Bus Matrix)
+ // map(0xfffa0000, 0xfffa00ff) TC (Timer Counter) not used, mentioned in disabled / unused code
+ // map(0xffffec00, 0xffffec7f) SMC (Static Memory Controller)
+ // map(0xffffee00, 0xffffee57) MATRIX (Bus Matrix)
map(0xfffff000, 0xfffff14b).m(m_arm_aic, FUNC(arm_aic_device::regs_map));
- // AM_RANGE(0xfffff200, 0xfffff247) DBGU (Debug Unit)
- // AM_RANGE(0xfffff400, 0xfffff4af) PIO (Parallel Input Output Controller)
+ // map(0xfffff200, 0xfffff247) DBGU (Debug Unit)
+ // map(0xfffff400, 0xfffff4af) PIO (Parallel Input Output Controller)
map(0xfffff430, 0xfffff437).nopw(); // often
- // AM_RANGE(0xfffffd00, 0xfffffd0b) RSTC (Reset Controller)
- // AM_RANGE(0xfffffd20, 0xfffffd2f) RTTC (Real Time Timer)
+ // map(0xfffffd00, 0xfffffd0b) RSTC (Reset Controller)
+ // map(0xfffffd20, 0xfffffd2f) RTTC (Real Time Timer)
map(0xfffffd28, 0xfffffd2b).r(FUNC(pgm2_state::rtc_r));
- // AM_RANGE(0xfffffd40, 0xfffffd4b) WDTC (Watch Dog Timer)
+ // map(0xfffffd40, 0xfffffd4b) WDTC (Watch Dog Timer)
// custom IGS036 stuff starts here
map(0xfffffa08, 0xfffffa0b).w(FUNC(pgm2_state::encryption_do_w)); // after uploading encryption? table might actually send it or enable external ROM? when read bits0-1 called FUSE 0 and 1, must be 0
map(0xfffffa0c, 0xfffffa0f).r(FUNC(pgm2_state::unk_startup_r)); // written 0, then 0x1c, then expected to return (result&0x180)==0x180, then written 0x7c
diff --git a/src/mame/drivers/photoply.cpp b/src/mame/drivers/photoply.cpp
index 95e4389a113..4dfce5b1a83 100644
--- a/src/mame/drivers/photoply.cpp
+++ b/src/mame/drivers/photoply.cpp
@@ -196,8 +196,8 @@ void photoply_state::photoply_map(address_map &map)
{
map(0x00000000, 0x0009ffff).ram();
map(0x000a0000, 0x000bffff).rw("vga", FUNC(cirrus_gd5446_device::mem_r), FUNC(cirrus_gd5446_device::mem_w));
-// AM_RANGE(0x000c0000, 0x000c7fff) AM_RAM AM_REGION("video_bios", 0)
-// AM_RANGE(0x000c8000, 0x000cffff) AM_RAM AM_REGION("ex_bios", 0)
+// map(0x000c0000, 0x000c7fff).rom().region("video_bios", 0);
+// map(0x000c8000, 0x000cffff).rom().region("ex_bios", 0);
map(0x000c0000, 0x000fffff).rw(FUNC(photoply_state::bios_r), FUNC(photoply_state::bios_w));
map(0x00100000, 0x07ffffff).ram(); // 64MB RAM, guess!
map(0xfffe0000, 0xffffffff).rom().region("bios", 0);
@@ -213,9 +213,9 @@ void photoply_state::photoply_io(address_map &map)
map(0x0170, 0x0177).rw("ide2", FUNC(ide_controller_32_device::cs0_r), FUNC(ide_controller_32_device::cs0_w));
map(0x01f0, 0x01f7).rw("ide", FUNC(ide_controller_32_device::cs0_r), FUNC(ide_controller_32_device::cs0_w));
map(0x0202, 0x0202).w(FUNC(photoply_state::eeprom_w));
-// AM_RANGE(0x0278, 0x027f) AM_RAM //parallel port 2
+// map(0x0278, 0x027f).ram(); //parallel port 2
map(0x0370, 0x0377).rw("ide2", FUNC(ide_controller_32_device::cs1_r), FUNC(ide_controller_32_device::cs1_w));
-// AM_RANGE(0x0378, 0x037f) AM_RAM //parallel port
+// map(0x0378, 0x037f).ram(); //parallel port
map(0x03b0, 0x03bf).rw("vga", FUNC(cirrus_gd5446_device::port_03b0_r), FUNC(cirrus_gd5446_device::port_03b0_w));
map(0x03c0, 0x03cf).rw("vga", FUNC(cirrus_gd5446_device::port_03c0_r), FUNC(cirrus_gd5446_device::port_03c0_w));
map(0x03d0, 0x03df).rw("vga", FUNC(cirrus_gd5446_device::port_03d0_r), FUNC(cirrus_gd5446_device::port_03d0_w));
diff --git a/src/mame/drivers/picno.cpp b/src/mame/drivers/picno.cpp
index 035943a0648..8a00432e0d7 100644
--- a/src/mame/drivers/picno.cpp
+++ b/src/mame/drivers/picno.cpp
@@ -60,7 +60,7 @@ void picno_state::mem_map(address_map &map)
void picno_state::io_map(address_map &map)
{
-// ADDRESS_MAP_GLOBAL_MASK(0xff)
+// map.global_mask(0xff);
}
static INPUT_PORTS_START( picno )
diff --git a/src/mame/drivers/pinkiri8.cpp b/src/mame/drivers/pinkiri8.cpp
index 37d8a429b5b..0506ded4247 100644
--- a/src/mame/drivers/pinkiri8.cpp
+++ b/src/mame/drivers/pinkiri8.cpp
@@ -144,8 +144,8 @@ void janshi_vdp_device::map(address_map &map)
map(0xfc3800, 0xfc3fff).ram().share("vram2"); // y pos + unknown
- map(0xff0000, 0xff07ff).ram().share("paletteram"); //AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_byte_split_lo_w)
- map(0xff2000, 0xff27ff).ram().share("paletteram2"); //AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_byte_split_hi_w)
+ map(0xff0000, 0xff07ff).ram().share("paletteram"); //ram().w(FUNC(janshi_vdp_device::paletteram_xBBBBBGGGGGRRRRR_byte_split_lo_w));
+ map(0xff2000, 0xff27ff).ram().share("paletteram2"); //ram().w(FUNC(janshi_vdp_device::paletteram_xBBBBBGGGGGRRRRR_byte_split_hi_w));
map(0xff6000, 0xff601f).ram().share("crtc_regs");
}
diff --git a/src/mame/drivers/pipbug.cpp b/src/mame/drivers/pipbug.cpp
index 57d63a6350b..dafac58c3e3 100644
--- a/src/mame/drivers/pipbug.cpp
+++ b/src/mame/drivers/pipbug.cpp
@@ -122,7 +122,7 @@ void pipbug_state::pipbug_mem(address_map &map)
void pipbug_state::pipbug_data(address_map &map)
{
-// ADDRESS_MAP_UNMAP_HIGH
+// map.unmap_value_high();
map(S2650_CTRL_PORT, S2650_CTRL_PORT).w(FUNC(pipbug_state::pipbug_ctrl_w));
}
diff --git a/src/mame/drivers/pirates.cpp b/src/mame/drivers/pirates.cpp
index 66e86bab16f..4fc64e0a30d 100644
--- a/src/mame/drivers/pirates.cpp
+++ b/src/mame/drivers/pirates.cpp
@@ -159,18 +159,18 @@ void pirates_state::pirates_map(address_map &map)
map(0x100000, 0x10ffff).ram(); // main ram
map(0x300000, 0x300001).portr("INPUTS");
map(0x400000, 0x400001).portr("SYSTEM");
-// AM_RANGE(0x500000, 0x5007ff) AM_RAM
+// map(0x500000, 0x5007ff).ram();
map(0x500000, 0x5007ff).writeonly().share("spriteram");
-// AM_RANGE(0x500800, 0x50080f) AM_WRITENOP
+// map(0x500800, 0x50080f).nopw();
map(0x600000, 0x600001).w(FUNC(pirates_state::out_w));
map(0x700000, 0x700001).writeonly().share("scroll"); // scroll reg
map(0x800000, 0x803fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x900000, 0x90017f).ram(); // more of tilemaps ?
map(0x900180, 0x90137f).ram().w(FUNC(pirates_state::tx_tileram_w)).share("tx_tileram");
map(0x901380, 0x902a7f).ram().w(FUNC(pirates_state::fg_tileram_w)).share("fg_tileram");
-// AM_RANGE(0x902580, 0x902a7f) AM_RAM // more of tilemaps ?
+// map(0x902580, 0x902a7f).ram(); // more of tilemaps ?
map(0x902a80, 0x904187).ram().w(FUNC(pirates_state::bg_tileram_w)).share("bg_tileram");
-// AM_RANGE(0x903c80, 0x904187) AM_RAM // more of tilemaps ?
+// map(0x903c80, 0x904187).ram(); // more of tilemaps ?
map(0xa00001, 0xa00001).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
}
diff --git a/src/mame/drivers/pitnrun.cpp b/src/mame/drivers/pitnrun.cpp
index ecf1231ecd0..e60c11f38e2 100644
--- a/src/mame/drivers/pitnrun.cpp
+++ b/src/mame/drivers/pitnrun.cpp
@@ -118,12 +118,12 @@ void pitnrun_state::pitnrun_map(address_map &map)
map(0xb800, 0xb800).portr("INPUTS").w("soundlatch", FUNC(generic_latch_8_device::write));
map(0xc800, 0xc801).w(FUNC(pitnrun_state::scroll_w));
map(0xc802, 0xc802).w(FUNC(pitnrun_state::scroll_y_w));
- //AM_RANGE(0xc804, 0xc804) AM_WRITE(mcu_data_w)
+ //map(0xc804, 0xc804).w(FUNC(pitnrun_state::mcu_data_w));
map(0xc805, 0xc805).w(FUNC(pitnrun_state::h_heed_w));
map(0xc806, 0xc806).w(FUNC(pitnrun_state::v_heed_w));
map(0xc807, 0xc807).w(FUNC(pitnrun_state::ha_w));
- //AM_RANGE(0xd000, 0xd000) AM_READ(mcu_data_r)
- //AM_RANGE(0xd800, 0xd800) AM_READ(mcu_status_r)
+ //map(0xd000, 0xd000).r(FUNC(pitnrun_state::mcu_data_r));
+ //map(0xd800, 0xd800).r(FUNC(pitnrun_state::mcu_status_r));
map(0xf000, 0xf000).r("watchdog", FUNC(watchdog_timer_device::reset_r));
}
diff --git a/src/mame/drivers/pktgaldx.cpp b/src/mame/drivers/pktgaldx.cpp
index 81873d4577f..e50b76f09e5 100644
--- a/src/mame/drivers/pktgaldx.cpp
+++ b/src/mame/drivers/pktgaldx.cpp
@@ -173,7 +173,7 @@ void pktgaldx_state::pktgaldb_map(address_map &map)
map(0x150000, 0x15000f).w(m_oki2, FUNC(okim6295_device::write)).umask16(0x00ff);
map(0x150007, 0x150007).r(m_oki2, FUNC(okim6295_device::read));
-// AM_RANGE(0x160000, 0x167fff) AM_RAM
+// map(0x160000, 0x167fff).ram();
map(0x164800, 0x164801).w(FUNC(pktgaldx_state::pktgaldx_oki_bank_w));
map(0x16500a, 0x16500b).r(FUNC(pktgaldx_state::pckgaldx_unknown_r));
map(0x166800, 0x166801).w(FUNC(pktgaldx_state::vblank_ack_w));
diff --git a/src/mame/drivers/playmark.cpp b/src/mame/drivers/playmark.cpp
index e3043157202..8d21a17ca9c 100644
--- a/src/mame/drivers/playmark.cpp
+++ b/src/mame/drivers/playmark.cpp
@@ -281,7 +281,7 @@ void playmark_state::bigtwin_main_map(address_map &map)
map(0x70001c, 0x70001d).portr("DSW1");
map(0x70001e, 0x70001f).w(FUNC(playmark_state::playmark_snd_command_w));
map(0x780000, 0x7807ff).w(m_palette, FUNC(palette_device::write16)).share("palette");
-// AM_RANGE(0xe00000, 0xe00001) ?? written on startup
+// map(0xe00000, 0xe00001) ?? written on startup
map(0xff0000, 0xffffff).ram();
}
@@ -314,14 +314,14 @@ void playmark_state::wbeachvl_main_map(address_map &map)
map(0x50f000, 0x50ffff).ram().share("rowscroll");
map(0x510000, 0x51000b).w(FUNC(playmark_state::wbeachvl_scroll_w));
map(0x51000c, 0x51000d).nopw(); /* 2 and 3 */
-// AM_RANGE(0x700000, 0x700001) ?? written on startup
+// map(0x700000, 0x700001) ?? written on startup
map(0x710010, 0x710011).portr("SYSTEM");
map(0x710012, 0x710013).portr("P1");
map(0x710014, 0x710015).portr("P2");
map(0x710016, 0x710017).w(FUNC(playmark_state::wbeachvl_coin_eeprom_w));
map(0x710018, 0x710019).portr("P3");
map(0x71001a, 0x71001b).portr("P4");
-// AM_RANGE(0x71001c, 0x71001d) AM_READ(playmark_snd_status???)
+// map(0x71001c, 0x71001d).r(FUNC(playmark_state::playmark_snd_status???));
map(0x71001e, 0x71001f).w(FUNC(playmark_state::playmark_snd_command_w));
map(0x780000, 0x780fff).w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0xff0000, 0xffffff).ram();
@@ -370,7 +370,7 @@ void playmark_state::hrdtimes_main_map(address_map &map)
map(0x300016, 0x300017).w(FUNC(playmark_state::hrdtimes_coin_w));
map(0x30001a, 0x30001b).portr("DSW2");
map(0x30001c, 0x30001d).portr("DSW1");
-// AM_RANGE(0x30001e, 0x30001f) AM_WRITE(playmark_snd_command_w)
+// map(0x30001e, 0x30001f).w(FUNC(playmark_state::playmark_snd_command_w));
map(0x304000, 0x304001).nopw(); /* watchdog? irq ack? */
}
diff --git a/src/mame/drivers/poisk1.cpp b/src/mame/drivers/poisk1.cpp
index ba363159fa4..76d4d0fbe79 100644
--- a/src/mame/drivers/poisk1.cpp
+++ b/src/mame/drivers/poisk1.cpp
@@ -624,7 +624,7 @@ void p1_state::poisk1_io(address_map &map)
map(0x0020, 0x0021).rw(m_pic8259, FUNC(pic8259_device::read), FUNC(pic8259_device::write));
map(0x0028, 0x002B).rw(FUNC(p1_state::p1_trap_r), FUNC(p1_state::p1_trap_w));
map(0x0040, 0x0043).rw(m_pit8253, FUNC(pit8253_device::read), FUNC(pit8253_device::write));
- // can't use regular AM_DEVREADWRITE, because THIS IS SPARTA!
+ // can't use regular rw(), because THIS IS SPARTA!
// 1st PPI occupies ports 60, 69, 6A and 6B; 2nd PPI -- 68, 61, 62 and 63.
map(0x0060, 0x006F).rw(FUNC(p1_state::p1_ppi_r), FUNC(p1_state::p1_ppi_w));
map(0x03D0, 0x03DF).rw(FUNC(p1_state::p1_cga_r), FUNC(p1_state::p1_cga_w));
diff --git a/src/mame/drivers/pokechmp.cpp b/src/mame/drivers/pokechmp.cpp
index 3d56bb32c3a..ff28ce6829d 100644
--- a/src/mame/drivers/pokechmp.cpp
+++ b/src/mame/drivers/pokechmp.cpp
@@ -115,7 +115,7 @@ void pokechmp_state::pokechmp_sound_map(address_map &map)
map(0x2000, 0x2000).w(FUNC(pokechmp_state::pokechmp_sound_bank_w)); /* sound rom bank seems to be replaced with OKI bank */
map(0x2800, 0x2800).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); // extra
map(0x3000, 0x3000).r(m_soundlatch, FUNC(generic_latch_8_device::read));
-// AM_RANGE(0x3400, 0x3400) AM_READ(pokechmp_adpcm_reset_r) /* not on here */
+// map(0x3400, 0x3400).r(FUNC(pokechmp_state::pokechmp_adpcm_reset_r)); /* not on here */
map(0x4000, 0x7fff).bankr("bank3");
map(0x8000, 0xffff).rom();
}
diff --git a/src/mame/drivers/polepos.cpp b/src/mame/drivers/polepos.cpp
index df70e540201..75c1f7ec103 100644
--- a/src/mame/drivers/polepos.cpp
+++ b/src/mame/drivers/polepos.cpp
@@ -272,7 +272,7 @@ READ16_MEMBER(polepos_state::polepos2_ic25_r)
}
-READ8_MEMBER(polepos_state::adc_r)
+uint8_t polepos_state::analog_r()
{
return ioport(m_adc_input ? "ACCEL" : "BRAKE")->read();
}
@@ -284,7 +284,8 @@ READ8_MEMBER(polepos_state::ready_r)
if (m_screen->vpos() >= 128)
ret ^= 0x02;
- ret ^= 0x08; /* ADC End Flag */
+ if (!m_adc->intr_r())
+ ret ^= 0x08; /* ADC End Flag */
return ret;
}
@@ -440,7 +441,7 @@ void polepos_state::z80_map(address_map &map)
void polepos_state::z80_io(address_map &map)
{
map.global_mask(0xff);
- map(0x00, 0x00).r(FUNC(polepos_state::adc_r)).nopw();
+ map(0x00, 0x00).rw(m_adc, FUNC(adc0804_device::read), FUNC(adc0804_device::write));
}
@@ -914,6 +915,9 @@ void polepos_state::polepos(machine_config &config)
m_latch->q_out_cb<6>().set(FUNC(polepos_state::sb0_w));
m_latch->q_out_cb<7>().set(FUNC(polepos_state::chacl_w));
+ ADC0804(config, m_adc, MASTER_CLOCK/8/8);
+ m_adc->vin_callback().set(FUNC(polepos_state::analog_r));
+
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_raw(MASTER_CLOCK/4, 384, 0, 256, 264, 16, 224+16);
@@ -1020,6 +1024,9 @@ void polepos_state::topracern(machine_config &config)
m_latch->q_out_cb<6>().set(FUNC(polepos_state::sb0_w));
m_latch->q_out_cb<7>().set(FUNC(polepos_state::chacl_w));
+ ADC0804(config, m_adc, MASTER_CLOCK/8/8);
+ m_adc->vin_callback().set(FUNC(polepos_state::analog_r));
+
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_raw(MASTER_CLOCK/4, 384, 0, 256, 264, 16, 224+16);
diff --git a/src/mame/drivers/pong.cpp b/src/mame/drivers/pong.cpp
index c4e34de9a16..7359f8038b4 100644
--- a/src/mame/drivers/pong.cpp
+++ b/src/mame/drivers/pong.cpp
@@ -59,9 +59,9 @@ TODO: Volleyball...
#include "netlist/devices/net_lib.h"
#include "machine/nl_breakout.h"
-#include "machine/nl_pong.h"
-#include "machine/nl_pongd.h"
#include "machine/nl_rebound.h"
+#include "machine/nl_pongf.h"
+#include "machine/nl_pongdoubles.h"
#include "screen.h"
#include "speaker.h"
@@ -299,17 +299,6 @@ public:
void rebound(machine_config &config);
- NETLIST_START(rebound)
-
- //MEMREGION_SOURCE("maincpu")
- LOCAL_SOURCE(rebound_schematics)
- PARAM(NETLIST.USE_DEACTIVATE, 1)
- //FIXME: unknown name causes segmentation fault
- //INCLUDE(rebound)
- INCLUDE(rebound_schematics)
-
- NETLIST_END()
-
protected:
// driver_device overrides
@@ -563,7 +552,7 @@ void pong_state::pongf(machine_config &config)
/* basic machine hardware */
- subdevice<netlist_mame_device>("maincpu")->set_setup_func(NETLIST_NAME(pong_fast));
+ subdevice<netlist_mame_device>("maincpu")->set_setup_func(NETLIST_NAME(pongf));
}
void pong_state::pongd(machine_config &config)
@@ -607,7 +596,7 @@ void pong_state::pongd(machine_config &config)
void rebound_state::rebound(machine_config &config)
{
/* basic machine hardware */
- NETLIST_CPU(config, "maincpu", NETLIST_CLOCK).set_source(NETLIST_NAME(rebound_schematics));
+ NETLIST_CPU(config, "maincpu", NETLIST_CLOCK).set_source(NETLIST_NAME(rebound));
// FIXME: Later
NETLIST_ANALOG_INPUT(config, "maincpu:pot1", "POTP1.DIAL");
diff --git a/src/mame/drivers/popeye.cpp b/src/mame/drivers/popeye.cpp
index b8b738fe623..06712fd4b8d 100644
--- a/src/mame/drivers/popeye.cpp
+++ b/src/mame/drivers/popeye.cpp
@@ -22,94 +22,7 @@ Notes:
#include "netlist/devices/net_lib.h"
#include "screen.h"
#include "speaker.h"
-
-/* This is the output stage of the audio circuit.
- * It is solely an impedance changer and could be left away
- */
-
-static NETLIST_START(nl_popeye_imp_changer)
- RES(R62, 510000)
- RES(R63, 100)
- RES(R64, 510000)
- RES(R65, 2100)
- RES(R66, 330)
- RES(R67, 51)
-
- QBJT_EB(Q8, "2SC1815")
- QBJT_EB(Q9, "2SA1015")
-
- NET_C(V5, R62.1, Q8.C, R66.1)
- NET_C(R62.2, R64.1, R63.1, C7.2)
- NET_C(R63.2, Q8.B)
- NET_C(Q8.E, R65.1, Q9.B)
- NET_C(R66.2, Q9.E, R67.1)
-
- NET_C(GND, Q9.C, R65.2, R64.2)
-NETLIST_END()
-
-static NETLIST_START(nl_popeye)
-
- /* register hard coded netlists */
-
- LOCAL_SOURCE(nl_popeye_imp_changer)
-
- /* Standard stuff */
-
- SOLVER(Solver, 48000)
- PARAM(Solver.ACCURACY, 1e-5)
- ANALOG_INPUT(V5, 5)
-
- /* AY 8910 internal resistors */
-
- RES(R_AY1_1, 1000);
- RES(R_AY1_2, 1000);
- RES(R_AY1_3, 1000);
-
- RES(R52, 2000)
- RES(R55, 2000)
- RES(R58, 2000)
- RES(R53, 2000)
- RES(R56, 2000)
- RES(R59, 2000)
- RES(R51, 20000)
- RES(R57, 30000)
- RES(R60, 30000)
-
- RES(R61, 120000)
-
- RES(ROUT, 5000)
-
- CAP(C4, 0.047e-6)
- CAP(C5, 330e-12)
- CAP(C6, 330e-12)
- CAP(C7, 3.3e-6)
- CAP(C40, 680e-12)
-
- NET_C(V5, R_AY1_1.1, R_AY1_2.1, R_AY1_3.1)
-
- NET_C(R_AY1_1.2, R52.1, R53.1)
- NET_C(R_AY1_2.2, R55.1, R56.1)
- NET_C(R_AY1_3.2, R58.1, R59.1)
-
- NET_C(R53.2, R51.1, C4.1)
- NET_C(R56.2, R57.1, C5.1)
- NET_C(R59.2, R60.1, C6.1)
-
- NET_C(R51.2, R57.2, R60.2, R61.1, C40.1, C7.1)
-
- NET_C(GND, R52.2, R55.2, R58.2, C4.2, C5.2, C6.2, R61.2, C40.2)
-
- INCLUDE(nl_popeye_imp_changer)
-
- /* output resistor (actually located in TV */
-
- NET_C(R67.2, ROUT.1)
-
- NET_C(GND, ROUT.2)
-
-NETLIST_END()
-
-
+#include "audio/nl_popeye.h"
void tnx1_state::driver_start()
{
@@ -641,7 +554,7 @@ void tpp2_state::config(machine_config &config)
/* NETLIST configuration using internal AY8910 resistor values */
NETLIST_SOUND(config, "snd_nl", 48000)
- .set_source(netlist_nl_popeye)
+ .set_source(NETLIST_NAME(popeye))
.add_route(ALL_OUTPUTS, "mono", 1.0);
NETLIST_STREAM_INPUT(config, "snd_nl:cin0", 0, "R_AY1_1.R");
diff --git a/src/mame/drivers/popobear.cpp b/src/mame/drivers/popobear.cpp
index 7113cf2a8ab..cb0601256e5 100644
--- a/src/mame/drivers/popobear.cpp
+++ b/src/mame/drivers/popobear.cpp
@@ -490,12 +490,12 @@ void popobear_state::popobear_mem(address_map &map)
map(0x480000, 0x48001f).ram().share("vregs");
map(0x480020, 0x480023).ram();
map(0x480028, 0x48002d).ram();
-// AM_RANGE(0x480020, 0x480021) AM_NOP //AM_READ(480020_r) AM_WRITE(480020_w)
-// AM_RANGE(0x480028, 0x480029) AM_NOP //AM_WRITE(480028_w)
-// AM_RANGE(0x48002c, 0x48002d) AM_NOP //AM_WRITE(48002c_w)
+// map(0x480020, 0x480021).noprw(); //.rw(FUNC(popobear_state::480020_r) FUNC(popobear_state::480020_w));
+// map(0x480028, 0x480029).noprw(); //.w(FUNC(popobear_state::480028_w));
+// map(0x48002c, 0x48002d).noprw(); //.w(FUNC(popobear_state::48002c_w));
map(0x480031, 0x480031).w(FUNC(popobear_state::irq_ack_w));
map(0x480034, 0x480035).ram(); // coin counter or coin lockout
- map(0x48003a, 0x48003b).ram(); //AM_READ(48003a_r) AM_WRITE(48003a_w)
+ map(0x48003a, 0x48003b).ram(); //.rw(FUNC(popobear_state::48003a_r) FUNC(popobear_state::48003a_w));
map(0x480400, 0x4807ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
diff --git a/src/mame/drivers/proconn.cpp b/src/mame/drivers/proconn.cpp
index 48146697b7a..2aa1366d7cc 100644
--- a/src/mame/drivers/proconn.cpp
+++ b/src/mame/drivers/proconn.cpp
@@ -159,7 +159,7 @@ void proconn_state::proconn_map(address_map &map)
// r0/r1/r2/r3 and w0/w1/w2/w3 might still be in the wrong order at the moment.
void proconn_state::proconn_portmap(address_map &map)
{
-// ADDRESS_MAP_GLOBAL_MASK(0x3ff)
+// map.global_mask(0x3ff);
// sio (vfd should be connected to it?)
map(0x00ff, 0x00ff).rw(FUNC(proconn_state::sio_r<0>), FUNC(proconn_state::sio_w<0>));
diff --git a/src/mame/drivers/prof80.cpp b/src/mame/drivers/prof80.cpp
index 21426bd4a5e..826f8a35665 100644
--- a/src/mame/drivers/prof80.cpp
+++ b/src/mame/drivers/prof80.cpp
@@ -296,14 +296,14 @@ void prof80_state::prof80_mmu(address_map &map)
void prof80_state::prof80_io(address_map &map)
{
map(0x00, 0xd7).mirror(0xff00).rw(m_ecb, FUNC(ecbbus_device::io_r), FUNC(ecbbus_device::io_w));
-// AM_RANGE(0x80, 0x8f) AM_MIRROR(0xff00) AM_DEVREADWRITE(UNIO_Z80STI_TAG, z80sti_device, read, write)
-// AM_RANGE(0x94, 0x95) AM_MIRROR(0xff00) AM_DEVREADWRITE_LEGACY(UNIO_Z80SIO_TAG, z80sio_d_r, z80sio_d_w)
-// AM_RANGE(0x96, 0x97) AM_MIRROR(0xff00) AM_DEVREADWRITE_LEGACY(UNIO_Z80SIO_TAG, z80sio_c_r, z80sio_c_w)
-// AM_RANGE(0x9e, 0x9e) AM_MIRROR(0xff00) AM_WRITE(unio_ctrl_w)
-// AM_RANGE(0x9c, 0x9c) AM_MIRROR(0xff00) AM_DEVWRITE(UNIO_CENTRONICS1_TAG, centronics_device, write)
-// AM_RANGE(0x9d, 0x9d) AM_MIRROR(0xff00) AM_DEVWRITE(UNIO_CENTRONICS1_TAG, centronics_device, write)
-// AM_RANGE(0xc0, 0xc0) AM_MIRROR(0xff00) AM_READ(gripc_r)
-// AM_RANGE(0xc1, 0xc1) AM_MIRROR(0xff00) AM_READWRITE(gripd_r, gripd_w)
+// map(0x80, 0x8f).mirror(0xff00).rw(UNIO_Z80STI_TAG, FUNC(z80sti_device::read), FUNC(z80sti_device::write));
+// map(0x94, 0x95).mirror(0xff00).rw(UNIO_Z80SIO_TAG, FUNC(z80sio_device::z80sio_d_r), FUNC(z80sio_device::z80sio_d_w)); // TODO: these methods don't exist anymore
+// map(0x96, 0x97).mirror(0xff00).rw(UNIO_Z80SIO_TAG, FUNC(z80sio_device::z80sio_c_r), FUNC(z80sio_device::z80sio_c_w)); // TODO: these methods don't exist anymore
+// map(0x9e, 0x9e).mirror(0xff00).w(FUNC(prof80_state::unio_ctrl_w));
+// map(0x9c, 0x9c).mirror(0xff00).w(UNIO_CENTRONICS1_TAG, FUNC(centronics_device::write));
+// map(0x9d, 0x9d).mirror(0xff00).w(UNIO_CENTRONICS1_TAG, FUNC(centronics_device::write));
+// map(0xc0, 0xc0).mirror(0xff00).r(FUNC(prof80_state::gripc_r));
+// map(0xc1, 0xc1).mirror(0xff00).rw(FUNC(prof80_state::gripd_r), FUNC(prof80_state::gripd_w));
map(0xd8, 0xd8).mirror(0xff00).w(FUNC(prof80_state::flr_w));
map(0xda, 0xda).mirror(0xff00).r(FUNC(prof80_state::status_r));
map(0xdb, 0xdb).mirror(0xff00).r(FUNC(prof80_state::status2_r));
diff --git a/src/mame/drivers/progolf.cpp b/src/mame/drivers/progolf.cpp
index 92e621b7844..c07a07d0020 100644
--- a/src/mame/drivers/progolf.cpp
+++ b/src/mame/drivers/progolf.cpp
@@ -278,7 +278,7 @@ void progolf_state::main_cpu(address_map &map)
map(0x9800, 0x9800).w("crtc", FUNC(mc6845_device::address_w));
map(0x9801, 0x9801).w("crtc", FUNC(mc6845_device::register_w));
map(0x9a00, 0x9a00).portr("DSW2").w("soundlatch", FUNC(generic_latch_8_device::write));
-// AM_RANGE(0x9e00, 0x9e00) AM_WRITENOP
+// map(0x9e00, 0x9e00).nopw();
map(0xb000, 0xffff).rom();
}
diff --git a/src/mame/drivers/puckpkmn.cpp b/src/mame/drivers/puckpkmn.cpp
index 23a81639696..3305d45640c 100644
--- a/src/mame/drivers/puckpkmn.cpp
+++ b/src/mame/drivers/puckpkmn.cpp
@@ -229,11 +229,11 @@ void md_boot_state::puckpkmn_map(address_map &map)
/* Unknown reads/writes: */
map(0xa00000, 0xa00551).nopw(); /* ? */
-// AM_RANGE(0xa10000, 0xa10001) AM_READNOP /* ? once */
+// map(0xa10000, 0xa10001).nopr(); /* ? once */
map(0xa10002, 0xa10005).noprw(); /* ? alternative way of reading inputs ? */
map(0xa11100, 0xa11101).noprw(); /* ? */
-// AM_RANGE(0xa10008, 0xa1000d) AM_WRITENOP /* ? once */
-// AM_RANGE(0xa14000, 0xa14003) AM_WRITENOP /* ? once */
+// map(0xa10008, 0xa1000d).nopw(); /* ? once */
+// map(0xa14000, 0xa14003).nopw(); /* ? once */
map(0xa11200, 0xa11201).nopw(); /* ? */
}
diff --git a/src/mame/drivers/pv1000.cpp b/src/mame/drivers/pv1000.cpp
index 8791a6fadbe..b23aa109511 100644
--- a/src/mame/drivers/pv1000.cpp
+++ b/src/mame/drivers/pv1000.cpp
@@ -184,7 +184,7 @@ private:
void pv1000_state::pv1000_mem(address_map &map)
{
- //AM_RANGE(0x0000, 0x7fff) // mapped by the cartslot
+ //map(0x0000, 0x7fff) // mapped by the cartslot
map(0xb800, 0xbbff).ram().share("videoram");
map(0xbc00, 0xbfff).ram().w(FUNC(pv1000_state::gfxram_w)).region("gfxram", 0);
}
diff --git a/src/mame/drivers/pv2000.cpp b/src/mame/drivers/pv2000.cpp
index 196eaad7022..7ee58f80106 100644
--- a/src/mame/drivers/pv2000.cpp
+++ b/src/mame/drivers/pv2000.cpp
@@ -186,8 +186,8 @@ void pv2000_state::pv2000_map(address_map &map)
map(0x4000, 0x4001).rw("tms9928a", FUNC(tms9928a_device::read), FUNC(tms9928a_device::write));
map(0x7000, 0x7fff).ram();
- //AM_RANGE(0x8000, 0xbfff) ext ram?
- //AM_RANGE(0xc000, 0xffff) // mapped by the cartslot
+ //map(0x8000, 0xbfff) ext ram?
+ //map(0xc000, 0xffff) // mapped by the cartslot
}
diff --git a/src/mame/drivers/pv9234.cpp b/src/mame/drivers/pv9234.cpp
index 39cb02f1cac..ad5f2acc58d 100644
--- a/src/mame/drivers/pv9234.cpp
+++ b/src/mame/drivers/pv9234.cpp
@@ -111,16 +111,16 @@ WRITE32_MEMBER( pv9234_state::debug2_w )
void pv9234_state::pv9234_map(address_map &map)
{
map(0x00000000, 0x0007ffff).rom().region("maincpu", 0); //FLASH ROM!
- // AM_RANGE(0x00000000, 0x00000033) AM_WRITE something
- // AM_RANGE(0x00000044, 0x00000047) AM_WRITE something
- // AM_RANGE(0x00000060, 0x0000006b) AM_WRITE something
- // AM_RANGE(0x00007000, 0x00007003) AM_WRITE something
- // AM_RANGE(0x00008000, 0x00008003) AM_WRITE something
+ // map(0x00000000, 0x00000033).w(FUNC(pv9234_state::)); something
+ // map(0x00000044, 0x00000047).w(FUNC(pv9234_state::));
+ // map(0x00000060, 0x0000006b).w(FUNC(pv9234_state::));
+ // map(0x00007000, 0x00007003).w(FUNC(pv9234_state::));
+ // map(0x00008000, 0x00008003).w(FUNC(pv9234_state::));
map(0x00008014, 0x00008017).w(FUNC(pv9234_state::debug1_w));
- // AM_RANGE(0x00008020, 0x00008027) AM_WRITE something
+ // map(0x00008020, 0x00008027).w(FUNC(pv9234_state::));
map(0x000080c0, 0x000080c3).w(FUNC(pv9234_state::debug2_w));
map(0x000080cc, 0x000080cf).w(FUNC(pv9234_state::debug_w));
- // AM_RANGE(0x000080d0, 0x000080d3) AM_WRITE something
+ // map(0x000080d0, 0x000080d3).w(FUNC(pv9234_state::));
map(0x0003e000, 0x0003efff).ram().share("p_ram");
map(0x00080000, 0x00087fff).mirror(0x78000).ram().share("share1");//mirror is a guess, writes a prg at 0xc0200 then it jumps at b0200 (!)
map(0xe0000000, 0xe0007fff).mirror(0x0fff8000).ram().share("share1");
diff --git a/src/mame/drivers/pve500.cpp b/src/mame/drivers/pve500.cpp
index b8a22543273..c8844ff77bd 100644
--- a/src/mame/drivers/pve500.cpp
+++ b/src/mame/drivers/pve500.cpp
@@ -394,7 +394,7 @@ void pve500_state::pve500(machine_config &config)
m_subcpu->out_pa_callback().set(FUNC(pve500_state::eeprom_w));
// ICG3: I/O Expander
- CXD1095(config, m_cxdio, 0);
+ CXD1095(config, m_cxdio);
m_cxdio->out_porta_cb().set(FUNC(pve500_state::io_sc_w));
m_cxdio->out_portb_cb().set(FUNC(pve500_state::io_le_w));
m_cxdio->in_portc_cb().set(FUNC(pve500_state::io_ky_r));
diff --git a/src/mame/drivers/px8.cpp b/src/mame/drivers/px8.cpp
index f7672deb7f6..98288519fa8 100644
--- a/src/mame/drivers/px8.cpp
+++ b/src/mame/drivers/px8.cpp
@@ -528,8 +528,8 @@ void px8_state::px8_io(address_map &map)
map.global_mask(0x0f);
map(0x00, 0x07).rw(FUNC(px8_state::gah40m_r), FUNC(px8_state::gah40m_w));
map(0x0c, 0x0d).rw(I8251_TAG, FUNC(i8251_device::read), FUNC(i8251_device::write));
-// AM_RANGE(0x0e, 0x0e) AM_DEVREADWRITE(SED1320_TAG, sed1330_device, status_r, data_w)
-// AM_RANGE(0x0f, 0x0f) AM_DEVREADWRITE(SED1320_TAG, sed1330_device, data_r, command_w)
+// map(0x0e, 0x0e).rw(SED1320_TAG, FUNC(sed1330_device::status_r), FUNC(sed1330_device::data_w));
+// map(0x0f, 0x0f).rw(SED1320_TAG, FUNC(sed1330_device::data_r), FUNC(sed1330_device::command_w));
}
/*-------------------------------------------------
@@ -540,7 +540,7 @@ void px8_state::px8_slave_mem(address_map &map)
{
map.unmap_value_high();
map(0x0020, 0x0023).rw(FUNC(px8_state::gah40s_r), FUNC(px8_state::gah40s_w));
-// AM_RANGE(0x0024, 0x0027) AM_DEVREADWRITE_LEGACY(SED1320_TAG, )
+// map(0x0024, 0x0027).rw(SED1320_TAG, FUNC(sed1330_device::), FUNC(sed1330_device::));
map(0x0028, 0x0028).w(FUNC(px8_state::gah40s_ier_w));
map(0x8000, 0x97ff).ram().share("video_ram");
map(0x9800, 0xefff).noprw();
diff --git a/src/mame/drivers/quakeat.cpp b/src/mame/drivers/quakeat.cpp
index 5b575462c74..5d25a6d132f 100644
--- a/src/mame/drivers/quakeat.cpp
+++ b/src/mame/drivers/quakeat.cpp
@@ -103,13 +103,13 @@ void quakeat_state::quake_io(address_map &map)
{
pcat32_io_common(map);
map(0x00e8, 0x00eb).noprw();
-// AM_RANGE(0x01f0, 0x01f7) AM_DEVREADWRITE16("ide", ide_controller_device, read_cs0, write_cs0, 0xffffffff)
+// map(0x01f0, 0x01f7).rw("ide", FUNC(ide_controller_device::read_cs0), FUNC(ide_controller_device::write_cs0));
map(0x0300, 0x03af).noprw();
map(0x03b0, 0x03df).noprw();
-// AM_RANGE(0x0278, 0x027b) AM_WRITE(pnp_config_w)
-// AM_RANGE(0x03f0, 0x03f7) AM_DEVREADWRITE16("ide", ide_controller_device, read_cs1, write_cs1, 0xffffffff)
-// AM_RANGE(0x0a78, 0x0a7b) AM_WRITE(pnp_data_w)
-// AM_RANGE(0x0cf8, 0x0cff) AM_DEVREADWRITE("pcibus", pci_bus_device, read, write)
+// map(0x0278, 0x027b).w(FUNC(quakeat_state::pnp_config_w));
+// map(0x03f0, 0x03f7).rw("ide", FUNC(ide_controller_device::read_cs1), FUNC(ide_controller_device::write_cs1));
+// map(0x0a78, 0x0a7b).w(FUNC(quakeat_state::pnp_data_w));
+// map(0x0cf8, 0x0cff).rw("pcibus", FUNC(pci_bus_device::read), FUNC(pci_bus_device::write));
}
/*************************************************************/
diff --git a/src/mame/drivers/qvt70.cpp b/src/mame/drivers/qvt70.cpp
index 683fa47f2cd..b8b804223a0 100644
--- a/src/mame/drivers/qvt70.cpp
+++ b/src/mame/drivers/qvt70.cpp
@@ -54,7 +54,7 @@ private:
void bank_map(address_map &map);
void io_map(address_map &map);
- DECLARE_WRITE8_MEMBER(bankswitch_w);
+ void bankswitch_w(uint8_t data);
};
void qvt70_state::mem_map(address_map &map)
@@ -62,7 +62,8 @@ void qvt70_state::mem_map(address_map &map)
map(0x0000, 0x7fff).m(m_bank, FUNC(address_map_bank_device::amap8));
map(0x8000, 0x8000).w(FUNC(qvt70_state::bankswitch_w));
map(0xa000, 0xbfff).ram();
-// map(0xc000, 0xffff).ram();
+ map(0xc000, 0xdfff).ram();
+ map(0xe000, 0xffff).ram();
}
void qvt70_state::bank_map(address_map &map)
@@ -88,21 +89,24 @@ void qvt70_state::io_map(address_map &map)
static INPUT_PORTS_START( qvt70 )
INPUT_PORTS_END
-WRITE8_MEMBER(qvt70_state::bankswitch_w)
+void qvt70_state::bankswitch_w(uint8_t data)
{
logerror("bankswitch_w: %02x\n", data);
// 765----- unknown
- // ---43--- bankswitching?
+ // ---43--- bankswitching
// -----21- unknown
- // -------0 bankswitching?
-
- // likely wrong
- int bank = ((data >> 2) & 0x06) | BIT(data, 0);
- logerror("bank = %02x\n", bank);
-
- if (bank < 6)
- m_bank->set_bank(bank);
+ // -------0 bankswitching
+
+ switch (data & 0x19)
+ {
+ case 0x00: m_bank->set_bank(0); break;
+ case 0x08: m_bank->set_bank(1); break;
+ case 0x10: m_bank->set_bank(2); break;
+ case 0x18: m_bank->set_bank(3); break;
+ case 0x01: m_bank->set_bank(4); break;
+ case 0x11: m_bank->set_bank(5); break;
+ }
}
void qvt70_state::machine_start()
diff --git a/src/mame/drivers/r9751.cpp b/src/mame/drivers/r9751.cpp
index 0eb7b3a64ba..f58e35fc041 100644
--- a/src/mame/drivers/r9751.cpp
+++ b/src/mame/drivers/r9751.cpp
@@ -940,14 +940,14 @@ WRITE32_MEMBER( r9751_state::r9751_mmio_fff8_w )
void r9751_state::r9751_mem(address_map &map)
{
- //ADDRESS_MAP_UNMAP_HIGH
+ //map.unmap_value_high();
map(0x00000000, 0x00ffffff).ram().share("main_ram"); // 16MB
map(0x08000000, 0x0800ffff).rom().region("prom", 0);
map(0x5FF00000, 0x5FFFFFFF).rw(FUNC(r9751_state::r9751_mmio_5ff_r), FUNC(r9751_state::r9751_mmio_5ff_w));
map(0xFF010000, 0xFF01FFFF).rw(FUNC(r9751_state::r9751_mmio_ff01_r), FUNC(r9751_state::r9751_mmio_ff01_w));
map(0xFF050000, 0xFF06FFFF).rw(FUNC(r9751_state::r9751_mmio_ff05_r), FUNC(r9751_state::r9751_mmio_ff05_w));
map(0xFFF80000, 0xFFF8FFFF).rw(FUNC(r9751_state::r9751_mmio_fff8_r), FUNC(r9751_state::r9751_mmio_fff8_w));
- //AM_RANGE(0xffffff00,0xffffffff) AM_RAM // Unknown area
+ //map(0xffffff00,0xffffffff).ram(); // Unknown area
}
/******************************************************************************
diff --git a/src/mame/drivers/radio86.cpp b/src/mame/drivers/radio86.cpp
index 83fa9259379..bd67ef4d0a7 100644
--- a/src/mame/drivers/radio86.cpp
+++ b/src/mame/drivers/radio86.cpp
@@ -29,7 +29,7 @@ void radio86_state::radio86_mem(address_map &map)
map(0x0000, 0x0fff).bankrw("bank1"); // First bank
map(0x1000, 0x7fff).ram(); // RAM
map(0x8000, 0x8003).rw(m_ppi8255_1, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x1ffc);
- //AM_RANGE( 0xa000, 0xa003 ) AM_DEVREADWRITE("ppi8255_2", i8255_device, read, write) AM_MIRROR(0x1ffc)
+ //map(0xa000, 0xa003).rw(m_ppi8255_2, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x1ffc);
map(0xc000, 0xc001).rw("i8275", FUNC(i8275_device::read), FUNC(i8275_device::write)).mirror(0x1ffe); // video
map(0xe000, 0xffff).w(m_dma8257, FUNC(i8257_device::write)); // DMA
map(0xf000, 0xffff).rom(); // System ROM
@@ -79,7 +79,7 @@ void radio86_state::radio86_16_mem(address_map &map)
map(0x1000, 0x3fff).ram(); // RAM
map(0x4000, 0x7fff).r(FUNC(radio86_state::radio_cpu_state_r));
map(0x8000, 0x8003).rw(m_ppi8255_1, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x1ffc);
- //AM_RANGE( 0xa000, 0xa003 ) AM_DEVREADWRITE("ppi8255_2", i8255_device, read, write) AM_MIRROR(0x1ffc)
+ //map(0xa000, 0xa003).rw(m_ppi8255_2, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x1ffc);
map(0xc000, 0xc001).rw("i8275", FUNC(i8275_device::read), FUNC(i8275_device::write)).mirror(0x1ffe); // video
map(0xe000, 0xffff).w(m_dma8257, FUNC(i8257_device::write)); // DMA
map(0xf000, 0xffff).rom(); // System ROM
@@ -91,7 +91,7 @@ void radio86_state::mikron2_mem(address_map &map)
map(0x0000, 0x0fff).bankrw("bank1"); // First bank
map(0x1000, 0x7fff).ram(); // RAM
map(0xc000, 0xc003).rw(m_ppi8255_1, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x00fc);
- //AM_RANGE( 0xc100, 0xc103 ) AM_DEVREADWRITE_LEGACY("ppi8255_2", i8255a_r, i8255a_w) AM_MIRROR(0x00fc)
+ //map(0xc100, 0xc103).rw(m_ppi8255_2, FUNC(i8255_device::read), FUNC(i8255_device::write)).mirror(0x00fc);
map(0xc200, 0xc201).rw("i8275", FUNC(i8275_device::read), FUNC(i8275_device::write)).mirror(0x00fe); // video
map(0xc300, 0xc3ff).w(m_dma8257, FUNC(i8257_device::write)); // DMA
map(0xf000, 0xffff).rom(); // System ROM
diff --git a/src/mame/drivers/rainbow.cpp b/src/mame/drivers/rainbow.cpp
index c6d98e23321..12004e771ba 100644
--- a/src/mame/drivers/rainbow.cpp
+++ b/src/mame/drivers/rainbow.cpp
@@ -926,8 +926,8 @@ void rainbow_state::rainbow8088_map(address_map &map)
// So NVRAM is hidden and loads & saves are triggered within the
// 'diagnostic_w' handler (similar to real hardware).
- // - Address bits 8-12 are ignored (-> AM_MIRROR).
- map(0xed000, 0xed0ff).ram().share("vol_ram"); //AM_MIRROR(0x1f00)
+ // - Address bits 8-12 are ignored (-> mirror()).
+ map(0xed000, 0xed0ff).ram().share("vol_ram"); //.mirror(0x1f00);
map(0xed100, 0xed1ff).ram().share("nvram");
map(0xee000, 0xeffff).ram().share("p_ram");
@@ -1022,7 +1022,7 @@ void rainbow_state::rainbow8088_io(address_map &map)
// ===========================================================
// 0x70 -> 0x7f ***** Option Select 4
// ===========================================================
- // 0x10c -> (MHFU disable register handled by 0x0c + AM_SELECT)
+ // 0x10c -> (MHFU disable register handled by 0x0c + select())
}
void rainbow_state::rainbowz80_mem(address_map &map)
diff --git a/src/mame/drivers/rbmk.cpp b/src/mame/drivers/rbmk.cpp
index b310919023e..21044699b3d 100644
--- a/src/mame/drivers/rbmk.cpp
+++ b/src/mame/drivers/rbmk.cpp
@@ -207,7 +207,7 @@ void rbmk_state::rbspm_mem(address_map &map)
void rbmk_state::mcu_mem(address_map &map)
{
-// AM_RANGE(0x0000, 0x0fff) AM_ROM
+// map(0x0000, 0x0fff).rom();
}
READ8_MEMBER(rbmk_state::mcu_io_r)
diff --git a/src/mame/drivers/rc759.cpp b/src/mame/drivers/rc759.cpp
index 92d7077c0bd..27b47c79bf3 100644
--- a/src/mame/drivers/rc759.cpp
+++ b/src/mame/drivers/rc759.cpp
@@ -484,10 +484,10 @@ void rc759_state::rc759_io(address_map &map)
map(0x056, 0x057).noprw(); // in reality, access to sound and rtc is a bit more involved
map(0x05a, 0x05a).w(m_snd, FUNC(sn76489a_device::write));
map(0x05c, 0x05c).rw(FUNC(rc759_state::rtc_r), FUNC(rc759_state::rtc_w));
-// AM_RANGE(0x060, 0x06f) AM_WRITE8(crt_control_w, 0x00ff)
+// map(0x060, 0x06f).w(FUNC(rc759_state::crt_control_w)).umask16(0x00ff);
map(0x070, 0x077).mirror(0x08).rw(m_ppi, FUNC(i8255_device::read), FUNC(i8255_device::write)).umask16(0x00ff);
map(0x080, 0x0ff).rw(FUNC(rc759_state::nvram_r), FUNC(rc759_state::nvram_w)).umask16(0x00ff);
-// AM_RANGE(0x100, 0x101) net
+// map(0x100, 0x101) net
map(0x180, 0x1bf).rw(FUNC(rc759_state::palette_r), FUNC(rc759_state::palette_w)).umask16(0x00ff);
map(0x230, 0x231).w(FUNC(rc759_state::txt_irst_w));
map(0x240, 0x241).w(FUNC(rc759_state::txt_ca_w));
@@ -495,16 +495,16 @@ void rc759_state::rc759_io(address_map &map)
map(0x260, 0x260).rw(FUNC(rc759_state::centronics_control_r), FUNC(rc759_state::centronics_control_w));
map(0x280, 0x287).rw(m_fdc, FUNC(wd2797_device::read), FUNC(wd2797_device::write)).umask16(0x00ff);
map(0x288, 0x288).w(FUNC(rc759_state::floppy_control_w));
-// AM_RANGE(0x28a, 0x28b) external printer data
-// AM_RANGE(0x28d, 0x28d) external printer control
+// map(0x28a, 0x28b) external printer data
+// map(0x28d, 0x28d) external printer control
map(0x28e, 0x28e).rw(FUNC(rc759_state::floppy_ack_r), FUNC(rc759_state::floppy_reserve_w));
map(0x290, 0x290).w(FUNC(rc759_state::floppy_release_w));
-// AM_RANGE(0x292, 0x293) AM_READWRITE8(printer_ack_r, printer_reserve_w, 0x00ff)
-// AM_RANGE(0x294, 0x295) AM_WRITE8(printer_release_w, 0x00ff)
+// map(0x292, 0x293).rw(FUNC(rc759_state::printer_ack_r), FUNC(rc759_state::printer_reserve_w)).umask16(0x00ff);
+// map(0x294, 0x295).w(FUNC(rc759_state::printer_release_w)).umask16(0x00ff);
map(0x300, 0x30f).rw(m_isbx, FUNC(isbx_slot_device::mcs0_r), FUNC(isbx_slot_device::mcs0_w)).umask16(0x00ff);
map(0x310, 0x31f).rw(m_isbx, FUNC(isbx_slot_device::mcs1_r), FUNC(isbx_slot_device::mcs1_w)).umask16(0x00ff);
-// AM_RANGE(0x320, 0x321) isbx dma ack
-// AM_RANGE(0x330, 0x331) isbx tc
+// map(0x320, 0x321) isbx dma ack
+// map(0x330, 0x331) isbx tc
}
diff --git a/src/mame/drivers/riscpc.cpp b/src/mame/drivers/riscpc.cpp
index cc7e8f8a57c..6408695b812 100644
--- a/src/mame/drivers/riscpc.cpp
+++ b/src/mame/drivers/riscpc.cpp
@@ -846,24 +846,24 @@ WRITE32_MEMBER( riscpc_state::a7000_iomd_w )
void riscpc_state::a7000_map(address_map &map)
{
map(0x00000000, 0x003fffff).mirror(0x00800000).rom().region("user1", 0);
-// AM_RANGE(0x01000000, 0x01ffffff) AM_NOP //expansion ROM
+// map(0x01000000, 0x01ffffff).noprw(); //expansion ROM
//
// map(0x02000000, 0x027fffff).mirror(0x00800000).ram(); // VRAM, not installed on A7000 models
// I/O 03000000 - 033fffff
-// AM_RANGE(0x03010000, 0x03011fff) //Super IO
-// AM_RANGE(0x03012000, 0x03029fff) //FDC
-// AM_RANGE(0x0302b000, 0x0302bfff) //Network podule
-// AM_RANGE(0x03040000, 0x0304ffff) //podule space 0,1,2,3
-// AM_RANGE(0x03070000, 0x0307ffff) //podule space 4,5,6,7
+// map(0x03010000, 0x03011fff) //Super IO
+// map(0x03012000, 0x03029fff) //FDC
+// map(0x0302b000, 0x0302bfff) //Network podule
+// map(0x03040000, 0x0304ffff) //podule space 0,1,2,3
+// map(0x03070000, 0x0307ffff) //podule space 4,5,6,7
map(0x03200000, 0x032001ff).rw(FUNC(riscpc_state::a7000_iomd_r), FUNC(riscpc_state::a7000_iomd_w)); //IOMD Registers //mirrored at 0x03000000-0x1ff?
map(0x03310000, 0x03310003).portr("MOUSE");
map(0x03400000, 0x037fffff).w(FUNC(riscpc_state::a7000_vidc20_w));
-// AM_RANGE(0x08000000, 0x08ffffff) AM_MIRROR(0x07000000) //EASI space
+// map(0x08000000, 0x08ffffff).mirror(0x07000000); //EASI space
map(0x10000000, 0x13ffffff).ram(); //SIMM 0 bank 0
map(0x14000000, 0x17ffffff).ram(); //SIMM 0 bank 1
-// AM_RANGE(0x18000000, 0x18ffffff) AM_MIRROR(0x03000000) AM_RAM //SIMM 1 bank 0
-// AM_RANGE(0x1c000000, 0x1cffffff) AM_MIRROR(0x03000000) AM_RAM //SIMM 1 bank 1
+// map(0x18000000, 0x18ffffff).mirror(0x03000000).ram(); //SIMM 1 bank 0
+// map(0x1c000000, 0x1cffffff).mirror(0x03000000).ram(); //SIMM 1 bank 1
}
void riscpc_state::riscpc_map(address_map &map)
diff --git a/src/mame/drivers/rm380z.cpp b/src/mame/drivers/rm380z.cpp
index 94ee0659acf..eb06ff91f3a 100644
--- a/src/mame/drivers/rm380z.cpp
+++ b/src/mame/drivers/rm380z.cpp
@@ -201,18 +201,18 @@ void rm380z_state::rm480z_mem(address_map &map)
void rm380z_state::rm480z_io(address_map &map)
{
- //AM_RANGE(0x00, 0x17) AM_RAM // videoram
- //AM_RANGE(0x18, 0x18) AM_MIRROR(0xff00) // control port 0
- //AM_RANGE(0x19, 0x19) AM_MIRROR(0xff00) // control port 1
- //AM_RANGE(0x1a, 0x1a) AM_MIRROR(0xff00) // control port 2
- //AM_RANGE(0x1b, 0x1b) AM_MIRROR(0xff00) // control port 3 (DAC) // option
- //AM_RANGE(0x1d, 0x1d) AM_MIRROR(0xff00) // control port 5 (USERIO) // option
- //AM_RANGE(0x20, 0x23) AM_MIRROR(0xff00) // system CTC - 0=SIO4&cassin, 1=SIO2&cassio, 2=keybd int, 3=50hz int for repeat key
- //AM_RANGE(0x24, 0x27) AM_MIRROR(0xff00) // system SIO - 0=chA network data, 1=chB SIO4 data, 2=ChA control, 3=ChB control
- //AM_RANGE(0x28, 0x29) AM_MIRROR(0xff02) // am9511/am9512 maths chip // option
- //AM_RANGE(0x2c, 0x2f) AM_MIRROR(0xff00) // z80ctc IEEE int, Maths int, RTC, RTC // option
- //AM_RANGE(0x30, 0x37) AM_MIRROR(0xff00) // IEEE chip // option
- //AM_RANGE(0x38, 0x3b) AM_MIRROR(0xff00) // Hi-res graphics option
+ //map(0x00, 0x17).ram(); // videoram
+ //map(0x18, 0x18).mirror(0xff00); // control port 0
+ //map(0x19, 0x19).mirror(0xff00); // control port 1
+ //map(0x1a, 0x1a).mirror(0xff00); // control port 2
+ //map(0x1b, 0x1b).mirror(0xff00); // control port 3 (DAC) // option
+ //map(0x1d, 0x1d).mirror(0xff00); // control port 5 (USERIO) // option
+ //map(0x20, 0x23).mirror(0xff00); // system CTC - 0=SIO4&cassin, 1=SIO2&cassio, 2=keybd int, 3=50hz int for repeat key
+ //map(0x24, 0x27).mirror(0xff00); // system SIO - 0=chA network data, 1=chB SIO4 data, 2=ChA control, 3=ChB control
+ //map(0x28, 0x29).mirror(0xff02); // am9511/am9512 maths chip // option
+ //map(0x2c, 0x2f).mirror(0xff00); // z80ctc IEEE int, Maths int, RTC, RTC // option
+ //map(0x30, 0x37).mirror(0xff00); // IEEE chip // option
+ //map(0x38, 0x3b).mirror(0xff00); // Hi-res graphics option
}
INPUT_PORTS_START( rm380z )
diff --git a/src/mame/drivers/royalmah.cpp b/src/mame/drivers/royalmah.cpp
index c19b7c92852..641a7a29d34 100644
--- a/src/mame/drivers/royalmah.cpp
+++ b/src/mame/drivers/royalmah.cpp
@@ -827,7 +827,7 @@ void royalmah_state::mjderngr_iomap(address_map &map)
map.global_mask(0xff);
map(0x01, 0x01).r(m_ay, FUNC(ay8910_device::data_r));
map(0x02, 0x03).w(m_ay, FUNC(ay8910_device::data_address_w));
-// AM_RANGE( 0x10, 0x10 ) AM_READ_PORT("DSW1")
+// map(0x10, 0x10).portr("DSW1");
map(0x10, 0x10).w(FUNC(royalmah_state::mjderngr_coin_w)); // palette bank is set separately
map(0x11, 0x11).portr("SYSTEM").w(FUNC(royalmah_state::input_port_select_w));
map(0x20, 0x20).w(FUNC(royalmah_state::dynax_bank_w));
@@ -1122,7 +1122,7 @@ void royalmah_state::mjifb_map(address_map &map)
map(0x7000, 0x7fff).ram().share("nvram");
map(0x8000, 0xbfff).rw(FUNC(royalmah_state::mjifb_rom_io_r), FUNC(royalmah_state::mjifb_rom_io_w)).share("videoram");
map(0xc000, 0xffff).rom().w(FUNC(royalmah_state::mjifb_videoram_w));
-// AM_RANGE( 0xc000, 0xffff ) AM_ROM AM_WRITEONLY This should, but doesn't work
+// map(0xc000, 0xffff).rom().writeonly(); This should, but doesn't work
}
READ8_MEMBER(royalmah_state::mjifb_p3_r)
diff --git a/src/mame/drivers/rx78.cpp b/src/mame/drivers/rx78.cpp
index c8f1b4f51ac..51c433cab2c 100644
--- a/src/mame/drivers/rx78.cpp
+++ b/src/mame/drivers/rx78.cpp
@@ -278,7 +278,7 @@ void rx78_state::rx78_mem(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x1fff).rom().region("roms", 0);
- //AM_RANGE(0x2000, 0x5fff) // mapped by the cartslot
+ //map(0x2000, 0x5fff) // mapped by the cartslot
map(0x6000, 0xafff).ram(); //ext RAM
map(0xb000, 0xebff).ram();
map(0xec00, 0xffff).rw(FUNC(rx78_state::vram_r), FUNC(rx78_state::vram_w));
@@ -288,8 +288,8 @@ void rx78_state::rx78_io(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
-// AM_RANGE(0xe2, 0xe2) AM_READNOP AM_WRITENOP //printer
-// AM_RANGE(0xe3, 0xe3) AM_WRITENOP //printer
+// map(0xe2, 0xe2).noprw(); //printer
+// map(0xe3, 0xe3).nopw(); //printer
map(0xf0, 0xf0).rw(FUNC(rx78_state::cass_r), FUNC(rx78_state::cass_w)); //cmt
map(0xf1, 0xf1).w(FUNC(rx78_state::vram_read_bank_w));
map(0xf2, 0xf2).w(FUNC(rx78_state::vram_write_bank_w));
diff --git a/src/mame/drivers/sage2.cpp b/src/mame/drivers/sage2.cpp
index d9da6d92f71..3b703af5967 100644
--- a/src/mame/drivers/sage2.cpp
+++ b/src/mame/drivers/sage2.cpp
@@ -40,7 +40,7 @@ void sage2_state::sage2_mem(address_map &map)
{
map.unmap_value_high();
map(0xffc000, 0xffc007).rw(I8253_1_TAG, FUNC(pit8253_device::read), FUNC(pit8253_device::write)).umask16(0x00ff);
- map(0xffc010, 0xffc01f).noprw(); //AM_DEVREADWRITE8(TMS9914_TAG, tms9914_device, read, write, 0x00ff)
+ map(0xffc010, 0xffc01f).noprw(); //rw(TMS9914_TAG, FUNC(tms9914_device::read), FUNC(tms9914_device::write)).umask16(0x00ff);
map(0xffc020, 0xffc027).rw(I8255A_0_TAG, FUNC(i8255_device::read), FUNC(i8255_device::write)).umask16(0x00ff); // i8255, DIPs + Floppy ctrl port
map(0xffc030, 0xffc033).rw(m_usart1, FUNC(i8251_device::read), FUNC(i8251_device::write)).umask16(0x00ff);
map(0xffc040, 0xffc043).rw(m_pic, FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff);
@@ -48,11 +48,11 @@ void sage2_state::sage2_mem(address_map &map)
map(0xffc060, 0xffc067).rw(I8255A_1_TAG, FUNC(i8255_device::read), FUNC(i8255_device::write)).umask16(0x00ff); // i8255, Printer
map(0xffc070, 0xffc073).rw(m_usart0, FUNC(i8251_device::read), FUNC(i8251_device::write)).umask16(0x00ff);
map(0xffc080, 0xffc087).mirror(0x78).rw(I8253_0_TAG, FUNC(pit8253_device::read), FUNC(pit8253_device::write)).umask16(0x00ff);
-// AM_RANGE(0xffc400, 0xffc407) AM_DEVREADWRITE8(S2651_0_TAG, s2651_device, read, write, 0x00ff)
-// AM_RANGE(0xffc440, 0xffc447) AM_DEVREADWRITE8(S2651_1_TAG, s2651_device, read, write, 0x00ff)
-// AM_RANGE(0xffc480, 0xffc487) AM_DEVREADWRITE8(S2651_2_TAG, s2651_device, read, write, 0x00ff)
-// AM_RANGE(0xffc4c0, 0xffc4c7) AM_DEVREADWRITE8(S2651_3_TAG, s2651_device, read, write, 0x00ff)
-// AM_RANGE(0xffc500, 0xffc7ff) // Winchester drive ports
+// map(0xffc400, 0xffc407).rw(S2651_0_TAG, FUNC(s2651_device::read), FUNC(s2651_device::write)).umask16(0x00ff);
+// map(0xffc440, 0xffc447).rw(S2651_1_TAG, FUNC(s2651_device::read), FUNC(s2651_device::write)).umask16(0x00ff);
+// map(0xffc480, 0xffc487).rw(S2651_2_TAG, FUNC(s2651_device::read), FUNC(s2651_device::write)).umask16(0x00ff);
+// map(0xffc4c0, 0xffc4c7).rw(S2651_3_TAG, FUNC(s2651_device::read), FUNC(s2651_device::write)).umask16(0x00ff);
+// map(0xffc500, 0xffc7ff) // Winchester drive ports
}
diff --git a/src/mame/drivers/saitek_mark5.cpp b/src/mame/drivers/saitek_mark5.cpp
index a232a9545e8..d327069bedc 100644
--- a/src/mame/drivers/saitek_mark5.cpp
+++ b/src/mame/drivers/saitek_mark5.cpp
@@ -472,8 +472,8 @@ ROM_START( ccmk5 )
ROM_LOAD("c47026_syp_2364-3-y5c", 0xc000, 0x2000, CRC(1754ccab) SHA1(d246b6aa2e2a1858dd6608a4dbf496778f79b22e) ) // "
ROM_LOAD("c47027_syp_2364-3-y5d", 0xe000, 0x2000, CRC(7c0f7bd8) SHA1(68b4566f0501005f6b1739bb24a4bec990421a6f) ) // "
- ROM_REGION( 1887311, "screen", 0)
- ROM_LOAD( "ccmk5.svg", 0, 1887311, CRC(3261bcb2) SHA1(46b38a2877faa36ef1adea2b8f484a97b46ea529) )
+ ROM_REGION( 1887415, "screen", 0)
+ ROM_LOAD( "ccmk5.svg", 0, 1887415, CRC(656a2263) SHA1(4557979c62b1240f7a0d813ec5f4d54b8a27218e) )
ROM_END
ROM_START( ccmk6 )
@@ -486,8 +486,8 @@ ROM_START( ccmk6 )
ROM_REGION( 0x1000, "chessboard", 0 )
ROM_LOAD("d2732c-e.u1", 0x0000, 0x1000, CRC(93221b4c) SHA1(8561b52c80cab7c04d30eaa14f9520a362d7f822) ) // no label, identical halves
- ROM_REGION( 1887311, "screen", 0)
- ROM_LOAD( "ccmk5.svg", 0, 1887311, CRC(3261bcb2) SHA1(46b38a2877faa36ef1adea2b8f484a97b46ea529) )
+ ROM_REGION( 1887415, "screen", 0)
+ ROM_LOAD( "ccmk5.svg", 0, 1887415, CRC(656a2263) SHA1(4557979c62b1240f7a0d813ec5f4d54b8a27218e) )
ROM_END
} // anonymous namespace
diff --git a/src/mame/drivers/saitek_ssystem3.cpp b/src/mame/drivers/saitek_ssystem3.cpp
index 24612f4c766..2cef2729391 100644
--- a/src/mame/drivers/saitek_ssystem3.cpp
+++ b/src/mame/drivers/saitek_ssystem3.cpp
@@ -343,8 +343,8 @@ ROM_START( ssystem3 )
ROM_REGION( 0x100, "nvram", 0 ) // default settings
ROM_LOAD( "nvram", 0, 0x100, CRC(b5dddc7b) SHA1(3be9ec8359cc9ef16a04f28dfd24f9ffe1a2fca9) )
- ROM_REGION( 53469, "screen", 0)
- ROM_LOAD( "ssystem3.svg", 0, 53469, CRC(0479eac3) SHA1(6f26c8dfab2c8456cf576ea4ca6ab7a8445bf5e5) )
+ ROM_REGION( 53552, "screen", 0)
+ ROM_LOAD( "ssystem3.svg", 0, 53552, CRC(6047f88f) SHA1(2ff9cfce01cd3811a3f46f84b47fdc4ea2cf2ba8) )
ROM_END
} // anonymous namespace
diff --git a/src/mame/drivers/samcoupe.cpp b/src/mame/drivers/samcoupe.cpp
index 9f6d677dccf..45457852d94 100644
--- a/src/mame/drivers/samcoupe.cpp
+++ b/src/mame/drivers/samcoupe.cpp
@@ -291,10 +291,10 @@ WRITE8_MEMBER(samcoupe_state::samcoupe_lpt2_strobe_w)
void samcoupe_state::samcoupe_mem(address_map &map)
{
- map(0x0000, 0x3fff).ram().rw(FUNC(samcoupe_state::sam_bank1_r), FUNC(samcoupe_state::sam_bank1_w)); // AM_RAMBANK("bank1")
- map(0x4000, 0x7fff).ram().rw(FUNC(samcoupe_state::sam_bank2_r), FUNC(samcoupe_state::sam_bank2_w)); // AM_RAMBANK("bank2")
- map(0x8000, 0xbfff).ram().rw(FUNC(samcoupe_state::sam_bank3_r), FUNC(samcoupe_state::sam_bank3_w)); // AM_RAMBANK("bank3")
- map(0xc000, 0xffff).ram().rw(FUNC(samcoupe_state::sam_bank4_r), FUNC(samcoupe_state::sam_bank4_w)); // AM_RAMBANK("bank4")
+ map(0x0000, 0x3fff).ram().rw(FUNC(samcoupe_state::sam_bank1_r), FUNC(samcoupe_state::sam_bank1_w)); // .bankrw("bank1");
+ map(0x4000, 0x7fff).ram().rw(FUNC(samcoupe_state::sam_bank2_r), FUNC(samcoupe_state::sam_bank2_w)); // .bankrw("bank2");
+ map(0x8000, 0xbfff).ram().rw(FUNC(samcoupe_state::sam_bank3_r), FUNC(samcoupe_state::sam_bank3_w)); // .bankrw("bank3");
+ map(0xc000, 0xffff).ram().rw(FUNC(samcoupe_state::sam_bank4_r), FUNC(samcoupe_state::sam_bank4_w)); // .bankrw("bank4");
}
void samcoupe_state::samcoupe_io(address_map &map)
diff --git a/src/mame/drivers/sapi1.cpp b/src/mame/drivers/sapi1.cpp
index 20612902b78..67865dabc03 100644
--- a/src/mame/drivers/sapi1.cpp
+++ b/src/mame/drivers/sapi1.cpp
@@ -218,9 +218,9 @@ void sapi_state::sapi1_mem(address_map &map)
map(0x1000, 0x1fff).rom(); // Extension ROM
map(0x2000, 0x23ff).ram();
map(0x2400, 0x27ff).rw(FUNC(sapi_state::sapi1_keyboard_r), FUNC(sapi_state::sapi1_keyboard_w)); // PORT 0 - keyboard
- //map(0x2800, 0x2bff) AM_NOP // PORT 1
- //map(0x2c00, 0x2fff) AM_NOP // PORT 2
- //map(0x3000, 0x33ff) AM_NOP // 3214
+ //map(0x2800, 0x2bff).noprw(); // PORT 1
+ //map(0x2c00, 0x2fff).noprw(); // PORT 2
+ //map(0x3000, 0x33ff).noprw(); // 3214
map(0x3800, 0x3fff).ram().share("videoram"); // AND-1 (video RAM)
map(0x4000, 0x7fff).ram(); // REM-1
}
@@ -849,7 +849,7 @@ void sapi_state::sapi3b(machine_config &config)
crtc.set_update_row_callback(FUNC(sapi_state::crtc_update_row), this);
subdevice<screen_device>("screen")->set_screen_update("crtc", FUNC(mc6845_device::screen_update));
- subdevice<screen_device>("screen")->set_palette(finder_base::DUMMY_TAG);
+ subdevice<screen_device>("screen")->set_no_palette();
}
static DEVICE_INPUT_DEFAULTS_START( terminal )
diff --git a/src/mame/drivers/saturn.cpp b/src/mame/drivers/saturn.cpp
index b8bd86cd579..e6f6cf5209f 100644
--- a/src/mame/drivers/saturn.cpp
+++ b/src/mame/drivers/saturn.cpp
@@ -530,9 +530,9 @@ void sat_console_state::saturn_mem(address_map &map)
map(0x00200000, 0x002fffff).ram().mirror(0x20100000).share("workram_l");
map(0x01000000, 0x017fffff).w(FUNC(sat_console_state::saturn_minit_w));
map(0x01800000, 0x01ffffff).w(FUNC(sat_console_state::saturn_sinit_w));
-// AM_RANGE(0x02000000, 0x023fffff) AM_ROM AM_MIRROR(0x20000000) // Cartridge area
-// AM_RANGE(0x02400000, 0x027fffff) AM_RAM // External Data RAM area
-// AM_RANGE(0x04000000, 0x047fffff) AM_RAM // External Battery RAM area
+// map(0x02000000, 0x023fffff).rom().mirror(0x20000000); // Cartridge area
+// map(0x02400000, 0x027fffff).ram(); // External Data RAM area
+// map(0x04000000, 0x047fffff).ram(); // External Battery RAM area
map(0x04ffffff, 0x04ffffff).r(FUNC(sat_console_state::saturn_cart_type_r));
map(0x05000000, 0x057fffff).r(FUNC(sat_console_state::abus_dummy_r));
map(0x05800000, 0x0589ffff).rw(m_stvcd, FUNC(stvcd_device::stvcd_r), FUNC(stvcd_device::stvcd_w));
@@ -546,7 +546,7 @@ void sat_console_state::saturn_mem(address_map &map)
map(0x05e00000, 0x05e7ffff).mirror(0x80000).rw(FUNC(sat_console_state::saturn_vdp2_vram_r), FUNC(sat_console_state::saturn_vdp2_vram_w));
map(0x05f00000, 0x05f7ffff).rw(FUNC(sat_console_state::saturn_vdp2_cram_r), FUNC(sat_console_state::saturn_vdp2_cram_w));
map(0x05f80000, 0x05fbffff).rw(FUNC(sat_console_state::saturn_vdp2_regs_r), FUNC(sat_console_state::saturn_vdp2_regs_w));
- map(0x05fe0000, 0x05fe00cf).m(m_scu, FUNC(sega_scu_device::regs_map)); //AM_READWRITE(saturn_scu_r, saturn_scu_w)
+ map(0x05fe0000, 0x05fe00cf).m(m_scu, FUNC(sega_scu_device::regs_map)); //rw(FUNC(sat_console_state::saturn_scu_r), FUNC(sat_console_state::saturn_scu_w));
map(0x06000000, 0x060fffff).ram().mirror(0x21f00000).share("workram_h");
map(0x45000000, 0x46ffffff).nopw();
map(0x60000000, 0x600003ff).nopw(); // cache address array
diff --git a/src/mame/drivers/savquest.cpp b/src/mame/drivers/savquest.cpp
index 689ee3c0d73..117eb78457f 100644
--- a/src/mame/drivers/savquest.cpp
+++ b/src/mame/drivers/savquest.cpp
@@ -740,7 +740,7 @@ void savquest_state::savquest_map(address_map &map)
{
map.unmap_value_high();
map(0x00000000, 0x0009ffff).ram();
- map(0x000a0000, 0x000bffff).rw(FUNC(savquest_state::smram_r), FUNC(savquest_state::smram_w)); //AM_DEVREADWRITE8("vga", vga_device, mem_r, mem_w, 0xffffffff)
+ map(0x000a0000, 0x000bffff).rw(FUNC(savquest_state::smram_r), FUNC(savquest_state::smram_w)); //.rw("vga", FUNC(vga_device::mem_r), FUNC(vga_device::mem_w));
map(0x000c0000, 0x000c7fff).rom().region("video_bios", 0);
map(0x000f0000, 0x000fffff).bankr("bios_f0000").w(FUNC(savquest_state::bios_f0000_ram_w));
map(0x000e0000, 0x000e3fff).bankr("bios_e0000").w(FUNC(savquest_state::bios_e0000_ram_w));
@@ -770,7 +770,7 @@ void savquest_state::savquest_io(address_map &map)
map(0x0cf8, 0x0cff).rw("pcibus", FUNC(pci_bus_legacy_device::read), FUNC(pci_bus_legacy_device::write));
-// AM_RANGE(0x5000, 0x5007) // routes to port $eb
+// map(0x5000, 0x5007) // routes to port $eb
}
#define AT_KEYB_HELPER(bit, text, key1) \
diff --git a/src/mame/drivers/scobra.cpp b/src/mame/drivers/scobra.cpp
index 558ac585863..4916d3d0640 100644
--- a/src/mame/drivers/scobra.cpp
+++ b/src/mame/drivers/scobra.cpp
@@ -310,8 +310,8 @@ void scobra_state::rescuefe_map(address_map &map)
map(0xc220, 0xc223).w(m_ppi8255_1, FUNC(i8255_device::write)); // ^
// addresses below are WRONG, just moved to keep things out the way while the rom mapping is figured out
-// AM_RANGE(0xf802, 0xf802) AM_WRITE(galaxold_coin_counter_w)
-// AM_RANGE(0xf000, 0xf000) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r)
+// map(0xf802, 0xf802).w(FUNC(scobra_state::galaxold_coin_counter_w));
+// map(0xf000, 0xf000).r("watchdog", FUNC(watchdog_timer_device::reset_r));
}
void scobra_state::minefldfe_map(address_map &map)
diff --git a/src/mame/drivers/scopus.cpp b/src/mame/drivers/scopus.cpp
index 97656302875..3333215decc 100644
--- a/src/mame/drivers/scopus.cpp
+++ b/src/mame/drivers/scopus.cpp
@@ -125,7 +125,7 @@ void sagitta180_state::maincpu_map(address_map &map)
{
map.global_mask(0xffff);
map(0x0000, 0x07ff).rom();
-// AM_RANGE(0x0800, 0x17ff) AM_ROM
+// map(0x0800, 0x17ff).rom();
map(0x1800, 0xffff).ram();
}
diff --git a/src/mame/drivers/scramble.cpp b/src/mame/drivers/scramble.cpp
index dbb113d83d4..64c8b504994 100644
--- a/src/mame/drivers/scramble.cpp
+++ b/src/mame/drivers/scramble.cpp
@@ -165,7 +165,7 @@ void scramble_state::newsin7_map(address_map &map)
map(0x5080, 0x50ff).ram();
map(0x6800, 0x6800).w(FUNC(scramble_state::galaxold_coin_counter_1_w));
map(0x6801, 0x6801).w(FUNC(scramble_state::galaxold_stars_enable_w));
- //AM_RANGE(0x6802, 0x6802) AM_WRITE(galaxold_nmi_enable_w)
+ //map(0x6802, 0x6802).w(FUNC(scramble_state::galaxold_nmi_enable_w));
map(0x6808, 0x6808).w(FUNC(scramble_state::galaxold_coin_counter_0_w));
map(0x6809, 0x6809).w(FUNC(scramble_state::galaxold_flip_screen_x_w));
map(0x680b, 0x680b).w(FUNC(scramble_state::galaxold_flip_screen_y_w));
diff --git a/src/mame/drivers/scyclone.cpp b/src/mame/drivers/scyclone.cpp
index 66da380809a..0879515e729 100644
--- a/src/mame/drivers/scyclone.cpp
+++ b/src/mame/drivers/scyclone.cpp
@@ -339,8 +339,8 @@ void scyclone_state::scyclone_sub_map(address_map &map)
map(0x3000, 0x3000).r(m_soundlatch, FUNC(generic_latch_8_device::read)).w("dac", FUNC(dac_byte_interface::data_w)); // music
map(0x3001, 0x3001).w(FUNC(scyclone_state::snd_3001_w)); // written at the same time, with the same data as 0x3005
map(0x3002, 0x3002).w("dac2", FUNC(dac_byte_interface::data_w)); // speech
-// AM_RANGE(0x3003, 0x3003) AM_WRITE(snd_3003_w) // writes 02 or 00
-// AM_RANGE(0x3004, 0x3004) AM_WRITE(snd_3004_w) // always writes 00?
+// map(0x3003, 0x3003).w(FUNC(scyclone_state::snd_3003_w)); // writes 02 or 00
+// map(0x3004, 0x3004).w(FUNC(scyclone_state::snd_3004_w)); // always writes 00?
map(0x3005, 0x3005).w(FUNC(scyclone_state::snd_3005_w)); // written at the same time, with the same data as 0x3001
}
diff --git a/src/mame/drivers/seattlecmp.cpp b/src/mame/drivers/seattlecmp.cpp
index ce7a1df8e19..d894127ce77 100644
--- a/src/mame/drivers/seattlecmp.cpp
+++ b/src/mame/drivers/seattlecmp.cpp
@@ -78,14 +78,14 @@ void seattle_comp_state::mem_map(address_map &map)
void seattle_comp_state::io_map(address_map &map)
{
- //ADDRESS_MAP_UNMAP_HIGH
+ //map.unmap_value_high();
map.global_mask(0xff);
map(0xf0, 0xf1).rw("pic1", FUNC(pic8259_device::read), FUNC(pic8259_device::write));
map(0xf2, 0xf3).rw("pic2", FUNC(pic8259_device::read), FUNC(pic8259_device::write));
map(0xf4, 0xf5).rw("stc", FUNC(am9513_device::read8), FUNC(am9513_device::write8));
map(0xf6, 0xf7).rw("uart", FUNC(i8251_device::read), FUNC(i8251_device::write));
- //AM_RANGE(0xfc, 0xfd) Parallel data, status, serial DCD
- //AM_RANGE(0xfe, 0xff) Eprom disable bit, read sense switches (bank of 8 dipswitches)
+ //map(0xfc, 0xfd) Parallel data, status, serial DCD
+ //map(0xfe, 0xff) Eprom disable bit, read sense switches (bank of 8 dipswitches)
}
/* Input ports */
diff --git a/src/mame/drivers/segae.cpp b/src/mame/drivers/segae.cpp
index debd5e4319e..0e319bd175a 100644
--- a/src/mame/drivers/segae.cpp
+++ b/src/mame/drivers/segae.cpp
@@ -304,8 +304,10 @@ GND 8A 8B GND
#include "includes/segaipt.h"
#include "cpu/z80/z80.h"
+#include "machine/adc0804.h"
#include "machine/i8255.h"
#include "machine/mc8123.h"
+#include "machine/rescap.h"
#include "machine/segacrp2_device.h"
#include "machine/upd4701.h"
#include "video/315_5124.h"
@@ -326,6 +328,7 @@ public:
m_bank1(*this, "bank1"),
m_bank0d(*this, "bank0d"),
m_bank1d(*this, "bank1d"),
+ m_analog_ports(*this, "IN%u", 2U),
m_lamp(*this, "lamp0")
{ }
@@ -340,11 +343,11 @@ public:
void init_fantzn2();
private:
- DECLARE_WRITE8_MEMBER(bank_write);
- DECLARE_WRITE8_MEMBER(coin_counters_write);
+ void bank_write(uint8_t data);
+ void coin_counters_write(uint8_t data);
- DECLARE_READ8_MEMBER( hangonjr_port_f8_read );
- DECLARE_WRITE8_MEMBER( hangonjr_port_fa_write );
+ uint8_t hangonjr_analog_read();
+ void hangonjr_analog_select(uint8_t data);
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
@@ -369,6 +372,7 @@ private:
required_memory_bank m_bank1;
optional_memory_bank m_bank0d;
optional_memory_bank m_bank1d;
+ optional_ioport_array<2> m_analog_ports;
output_finder<> m_lamp;
// Analog input related
@@ -440,7 +444,7 @@ void systeme_state::vdp2_map(address_map &map)
}
-WRITE8_MEMBER(systeme_state::bank_write)
+void systeme_state::bank_write(uint8_t data)
{
membank("vdp1_bank")->set_entry((data >> 7) & 1);
membank("vdp2_bank")->set_entry((data >> 6) & 1);
@@ -450,7 +454,7 @@ WRITE8_MEMBER(systeme_state::bank_write)
m_bank1d->set_entry(data & 0x0f);
}
-WRITE8_MEMBER(systeme_state::coin_counters_write)
+void systeme_state::coin_counters_write(uint8_t data)
{
machine().bookkeeping().coin_counter_w(0, BIT(data, 0));
machine().bookkeeping().coin_counter_w(1, BIT(data, 1)); // only one counter used in most games?
@@ -487,25 +491,14 @@ void systeme_state::machine_start()
/*- Hang On Jr. Specific -*/
-READ8_MEMBER( systeme_state::hangonjr_port_f8_read )
+uint8_t systeme_state::hangonjr_analog_read()
{
- uint8_t temp;
-
- temp = 0;
-
- if (m_port_select == 0x08) /* 0000 1000 */ /* Angle */
- temp = ioport("IN2")->read();
-
- if (m_port_select == 0x09) /* 0000 1001 */ /* Accel */
- temp = ioport("IN3")->read();
-
- return temp;
+ return m_analog_ports[m_port_select & 0x01]->read();
}
-WRITE8_MEMBER( systeme_state::hangonjr_port_fa_write)
+void systeme_state::hangonjr_analog_select(uint8_t data)
{
- /* Seems to write the same pattern again and again bits ---- xx-x used */
- m_port_select = data & 0x0f;
+ m_port_select = data;
}
@@ -654,10 +647,10 @@ static INPUT_PORTS_START( segae_hangonjr_generic )
//PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
//PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("IN2") /* Read from Port 0xf8 */
+ PORT_START("IN2") /* Angle - Read from Port 0xf8 */
PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_MINMAX(0x20,0xe0) PORT_SENSITIVITY(100) PORT_KEYDELTA(4)
- PORT_START("IN3") /* Read from Port 0xf8 */
+ PORT_START("IN3") /* Accel - Read from Port 0xf8 */
PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_MINMAX(0x00,0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(20)
INPUT_PORTS_END
@@ -920,9 +913,15 @@ void systeme_state::systeme(machine_config &config)
void systeme_state::hangonjr(machine_config &config)
{
systeme(config);
- m_ppi->in_pa_callback().set(FUNC(systeme_state::hangonjr_port_f8_read));
- m_ppi->in_pc_callback().set_constant(0); // bit 4 must be the ADC0804 /INTR signal
- m_ppi->out_pc_callback().set(FUNC(systeme_state::hangonjr_port_fa_write)); // CD4051 selector input
+ m_ppi->in_pa_callback().set("adc", FUNC(adc0804_device::read));
+ m_ppi->in_pc_callback().set("adc", FUNC(adc0804_device::intr_r)).lshift(4);
+ m_ppi->out_pc_callback().set(FUNC(systeme_state::hangonjr_analog_select)); // CD4051 selector input
+ m_ppi->out_pc_callback().append("adc", FUNC(adc0804_device::rd_w)).bit(2);
+ m_ppi->out_pc_callback().append("adc", FUNC(adc0804_device::wr_w)).bit(3);
+
+ adc0804_device &adc(ADC0804(config, "adc", RES_K(10), CAP_P(82))); // R1=10K/C11=82pF circuit on 834-5805 card
+ adc.vin_callback().set(FUNC(systeme_state::hangonjr_analog_read));
+ adc.set_rd_mode(adc0804_device::RD_BITBANGED);
}
void systeme_state::ridleofp(machine_config &config)
diff --git a/src/mame/drivers/segag80v.cpp b/src/mame/drivers/segag80v.cpp
index d7856420afe..3104a986d79 100644
--- a/src/mame/drivers/segag80v.cpp
+++ b/src/mame/drivers/segag80v.cpp
@@ -406,7 +406,7 @@ void segag80v_state::opcodes_map(address_map &map)
void segag80v_state::main_portmap(address_map &map)
{
map.global_mask(0xff);
- map(0xbc, 0xbc); /* AM_READ ??? */
+ map(0xbc, 0xbc); /* .r(FUNC(segag80v_state::)); ??? */
map(0xbd, 0xbe).w(FUNC(segag80v_state::multiply_w));
map(0xbe, 0xbe).r(FUNC(segag80v_state::multiply_r));
map(0xbf, 0xbf).w(FUNC(segag80v_state::unknown_w));
diff --git a/src/mame/drivers/segahang.cpp b/src/mame/drivers/segahang.cpp
index 744746acf63..d6a030d7154 100644
--- a/src/mame/drivers/segahang.cpp
+++ b/src/mame/drivers/segahang.cpp
@@ -149,7 +149,7 @@ READ8_MEMBER( segahang_state::adc_status_r )
// D5 = 0 (left open)
// D4 = 0 (left open)
//
- return 0x00;
+ return m_adc->intr_r() << 6;
}
@@ -179,7 +179,7 @@ READ16_MEMBER( segahang_state::hangon_io_r )
return m_i8255_2->read(offset & 3);
case 0x3020/2: // ADC0804 data output
- return m_adc_ports[m_adc_select].read_safe(0);
+ return m_adc->read();
}
//logerror("%06X:hangon_io_r - unknown read access to address %04X\n", m_maincpu->pc(), offset * 2);
@@ -207,6 +207,7 @@ WRITE16_MEMBER( segahang_state::hangon_io_w )
return;
case 0x3020/2: // ADC0804
+ m_adc->write();
return;
}
@@ -237,7 +238,7 @@ READ16_MEMBER( segahang_state::sharrier_io_r )
return m_i8255_2->read(offset & 3);
case 0x0030/2: // ADC0804 data output
- return m_adc_ports[m_adc_select].read_safe(0);
+ return m_adc->read();
}
//logerror("%06X:sharrier_io_r - unknown read access to address %04X\n", m_maincpu->pc(), offset * 2);
@@ -266,6 +267,7 @@ WRITE16_MEMBER( segahang_state::sharrier_io_w )
return;
case 0x0030/2: // ADC0804
+ m_adc->write();
return;
}
@@ -273,6 +275,16 @@ WRITE16_MEMBER( segahang_state::sharrier_io_w )
}
+//-------------------------------------------------
+// analog_r - read multiplexed analog ports
+//-------------------------------------------------
+
+uint8_t segahang_state::analog_r()
+{
+ return m_adc_ports[m_adc_select].read_safe(0);
+}
+
+
#if 0
TIMER_DEVICE_CALLBACK_MEMBER(segahang_state::hangon_irq)
{
@@ -778,6 +790,9 @@ void segahang_state::shared_base(machine_config &config)
m_i8255_2->out_pa_callback().set(FUNC(segahang_state::sub_control_adc_w));
m_i8255_2->in_pc_callback().set(FUNC(segahang_state::adc_status_r));
+ ADC0804(config, m_adc, MASTER_CLOCK_25MHz/4/6);
+ m_adc->vin_callback().set(FUNC(segahang_state::analog_r));
+
SEGAIC16VID(config, m_segaic16vid, 0, "gfxdecode");
SEGAIC16_ROAD(config, m_segaic16road, 0);
diff --git a/src/mame/drivers/segaorun.cpp b/src/mame/drivers/segaorun.cpp
index e108111ee1c..2ce4221a57f 100644
--- a/src/mame/drivers/segaorun.cpp
+++ b/src/mame/drivers/segaorun.cpp
@@ -303,7 +303,7 @@ const auto MASTER_CLOCK_25MHz = XTAL(25'174'800);
READ8_MEMBER( segaorun_state::unknown_porta_r )
{
//logerror("%06X:read from 8255 port A\n", m_maincpu->pc());
- return 0;
+ return m_adc->intr_r() << 6;
}
READ8_MEMBER( segaorun_state::unknown_portb_r )
@@ -366,6 +366,7 @@ READ8_MEMBER( segaorun_state::bankmotor_limit_r )
uint8_t ret = 0xff;
// PPI Input port A:
+ // D6: ADC interrupt
// D5: left limit
// D4: center
// D3: right limit
@@ -385,6 +386,9 @@ READ8_MEMBER( segaorun_state::bankmotor_limit_r )
else if (pos >= right_limit - tolerance)
ret ^= 0x08;
+ if (!m_adc->intr_r())
+ ret ^= 0x40;
+
return ret;
}
@@ -650,9 +654,7 @@ READ16_MEMBER( segaorun_state::outrun_custom_io_r )
}
case 0x30/2:
- {
- return m_adc_ports[m_adc_select].read_safe(0x0010);
- }
+ return m_adc->read();
case 0x60/2:
return m_watchdog->reset_r(space);
@@ -698,7 +700,7 @@ WRITE16_MEMBER( segaorun_state::outrun_custom_io_w )
return;
case 0x30/2:
- // ADC trigger
+ m_adc->write();
return;
case 0x60/2:
@@ -736,9 +738,7 @@ READ16_MEMBER( segaorun_state::shangon_custom_io_r )
}
case 0x3020/2:
- {
- return m_adc_ports[m_adc_select].read_safe(0x0010);
- }
+ return m_adc->read();
default:
break;
@@ -789,7 +789,7 @@ WRITE16_MEMBER( segaorun_state::shangon_custom_io_w )
return;
case 0x3020/2:
- // ADC trigger
+ m_adc->write();
return;
default:
@@ -800,6 +800,16 @@ WRITE16_MEMBER( segaorun_state::shangon_custom_io_w )
}
+//-------------------------------------------------
+// analog_r - read multiplexed analog ports
+//-------------------------------------------------
+
+uint8_t segaorun_state::analog_r()
+{
+ return m_adc_ports[m_adc_select].read_safe(0x10);
+}
+
+
//**************************************************************************
// INTERNAL HELPERS
@@ -1169,6 +1179,9 @@ void segaorun_state::outrun_base(machine_config &config)
m_i8255->in_pc_callback().set(FUNC(segaorun_state::unknown_portc_r));
m_i8255->out_pc_callback().set(FUNC(segaorun_state::video_control_w));
+ ADC0804(config, m_adc, MASTER_CLOCK_25MHz/4/6);
+ m_adc->vin_callback().set(FUNC(segaorun_state::analog_r));
+
SEGA_315_5195_MEM_MAPPER(config, m_mapper, MASTER_CLOCK/4, m_maincpu);
m_mapper->set_mapper(FUNC(segaorun_state::memory_mapper), this);
m_mapper->pbf().set_inputline(m_soundcpu, INPUT_LINE_NMI);
diff --git a/src/mame/drivers/segas16a.cpp b/src/mame/drivers/segas16a.cpp
index b3c1c407ab3..8eae81d1c55 100644
--- a/src/mame/drivers/segas16a.cpp
+++ b/src/mame/drivers/segas16a.cpp
@@ -689,27 +689,6 @@ void segas16a_state::dumpmtmt_i8751_sim()
}
-//-------------------------------------------------
-// quartet_i8751_sim - simulate the I8751
-// from Quartet
-//-------------------------------------------------
-
-void segas16a_state::quartet_i8751_sim()
-{
- // signal a VBLANK to the main CPU
- m_maincpu->set_input_line(4, HOLD_LINE);
-
- // X scroll values
- address_space &space = m_maincpu->space(AS_PROGRAM);
- m_segaic16vid->textram_w(space, 0xff8/2, m_workram[0x0d14/2], 0xffff);
- m_segaic16vid->textram_w(space, 0xffa/2, m_workram[0x0d18/2], 0xffff);
-
- // page values
- m_segaic16vid->textram_w(space, 0xe9e/2, m_workram[0x0d1c/2], 0xffff);
- m_segaic16vid->textram_w(space, 0xe9c/2, m_workram[0x0d1e/2], 0xffff);
-}
-
-
//**************************************************************************
// CUSTOM I/O HANDLERS
@@ -2055,7 +2034,7 @@ void segas16a_state::system16a_fd1094(machine_config &config)
void segas16a_state::aceattaca_fd1094(machine_config &config)
{
system16a_fd1094(config);
- CXD1095(config, "cxdio", 0);
+ CXD1095(config, "cxdio");
}
void segas16a_state::system16a_i8751(machine_config &config)
@@ -2992,7 +2971,7 @@ ROM_START( quartet )
ROM_LOAD( "epr-7476.4c", 0x18000, 0x8000, CRC(5eba655a) SHA1(6713ef12037cba3139d0f469c82bd90b44bae8ce) )
ROM_REGION( 0x1000, "mcu", 0 ) // Intel i8751 protection MCU
- ROM_LOAD( "315-5194.mcu", 0x00000, 0x1000, NO_DUMP )
+ ROM_LOAD( "315-5194.mcu", 0x00000, 0x1000, CRC(b7298f66) SHA1(9c579903bcf48a72ad9dfe7bf3962729dabe2d34) )
ROM_REGION( 0x0500, "plds", 0 ) // Unknown & undumped PAL 315-5202 @ 8L, 315-5107 @ 22G & 315-5141 @ 3C
ROM_LOAD( "315-5147.pal16r6a.23g", 0x0000, 0x0104, NO_DUMP ) // PAL is read protected
@@ -3047,7 +3026,7 @@ ROM_START( quarteta )
ROM_LOAD( "epr-7476.4c", 0x18000, 0x8000, CRC(5eba655a) SHA1(6713ef12037cba3139d0f469c82bd90b44bae8ce) )
ROM_REGION( 0x1000, "mcu", 0 ) // Intel i8751 protection MCU
- ROM_LOAD( "315-5194.mcu", 0x00000, 0x1000, NO_DUMP )
+ ROM_LOAD( "315-5194.mcu", 0x00000, 0x1000, CRC(b7298f66) SHA1(9c579903bcf48a72ad9dfe7bf3962729dabe2d34) )
ROM_REGION( 0x0500, "plds", 0 ) // Unknown & undumped PAL 315-5202 @ 8L, 315-5107 @ 22G & 315-5141 @ 3C
ROM_LOAD( "315-5147.pal16r6a.23g", 0x0000, 0x0104, NO_DUMP ) // PAL is read protected
@@ -3946,13 +3925,6 @@ void segas16a_state::init_passsht16a()
m_custom_io_r = read16_delegate(FUNC(segas16a_state::passsht16a_custom_io_r), this);
}
-void segas16a_state::init_quartet()
-{
- init_generic();
- m_i8751_vblank_hook = i8751_sim_delegate(&segas16a_state::quartet_i8751_sim, this);
-}
-
-
void segas16a_state::init_sdi()
{
init_generic();
@@ -3979,9 +3951,8 @@ GAME( 1986, dumpmtmt, bodyslam, system16a_i8751, bodyslam, seg
GAME( 1985, mjleague, 0, system16a, mjleague, segas16a_state, init_mjleague, ROT270, "Sega", "Major League", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, quartet, 0, system16a_i8751, quartet, segas16a_state, init_quartet, ROT0, "Sega", "Quartet (Rev A, 8751 315-5194)", MACHINE_UNEMULATED_PROTECTION | MACHINE_SUPPORTS_SAVE )
-
-GAME( 1986, quarteta, quartet, system16a_i8751, quartet, segas16a_state, init_quartet, ROT0, "Sega", "Quartet (8751 315-5194)", MACHINE_UNEMULATED_PROTECTION | MACHINE_SUPPORTS_SAVE )
+GAME( 1986, quartet, 0, system16a_i8751, quartet, segas16a_state, init_generic, ROT0, "Sega", "Quartet (Rev A, 8751 315-5194)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, quarteta, quartet, system16a_i8751, quartet, segas16a_state, init_generic, ROT0, "Sega", "Quartet (8751 315-5194)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, quartet2, quartet, system16a_i8751, quart2, segas16a_state, init_generic, ROT0, "Sega", "Quartet 2 (8751 317-0010)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, quartet2a, quartet, system16a, quart2, segas16a_state, init_generic, ROT0, "Sega", "Quartet 2 (unprotected)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/segas16b.cpp b/src/mame/drivers/segas16b.cpp
index b62a4f1ebe4..5531f9282fa 100644
--- a/src/mame/drivers/segas16b.cpp
+++ b/src/mame/drivers/segas16b.cpp
@@ -1354,27 +1354,6 @@ void segas16b_state::altbeasj_i8751_sim()
}
-
-//-------------------------------------------------
-// ddux_i8751_sim - simulate the I8751
-// from Dynamite Dux
-//-------------------------------------------------
-
-void segas16b_state::ddux_i8751_sim()
-{
- // signal a VBLANK to the main CPU
- m_maincpu->set_input_line(4, HOLD_LINE);
-
- // process any new sound data
- uint16_t temp = m_workram[0x0bd0/2];
- if ((temp & 0xff00) != 0x0000)
- {
- address_space &space = m_maincpu->space(AS_PROGRAM);
- m_mapper->write(space, 0x03, temp >> 8);
- m_workram[0x0bd0/2] = temp & 0x00ff;
- }
-}
-
//-------------------------------------------------
// tturf_i8751_sim - simulate the I8751
// from Tough Turf
@@ -3998,7 +3977,7 @@ void segas16b_state::aceattacb_fd1094(machine_config &config)
UPD4701A(config, m_upd4701a[0]);
UPD4701A(config, m_upd4701a[1]);
- CXD1095(config, m_cxdio, 0);
+ CXD1095(config, m_cxdio);
m_cxdio->in_porta_cb().set_ioport("HANDX1");
m_cxdio->in_portb_cb().set_ioport("HANDX2");
}
@@ -4276,6 +4255,8 @@ ROM_END
// Alien Syndrome, Sega System 16B
// CPU: 68000
// ROM Board type: 171-5358
+// Main board: 837-6312
+// ROM board: 834-6311
//
ROM_START( aliensyn )
ROM_REGION( 0x30000, "maincpu", 0 ) // 68000 code
@@ -4568,7 +4549,9 @@ ROM_END
// Altered Beast, Sega System 16B
// CPU: 68000 + i8751 (317-0078)
// ROM Board type: 171-5521
-// Sega ID# for ROM board: 834-6661-10
+// Sega game ID: 833-6660-10 ALTERED BEAST
+// Main board: 837-6662-06
+// ROM board: 834-6661-10
//
ROM_START( altbeast )
ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code
@@ -4600,7 +4583,7 @@ ROM_START( altbeast )
ROM_END
//*************************************************************************************************************************
-// Altered Beast, Sega System 16B
+// Jyuohki (Altered Beast), Sega System 16B
// CPU: 68000 + i8751 (317-0077)
// ROM Board type: 171-5521
//
@@ -4900,7 +4883,9 @@ ROM_END
// Altered Beast, Sega System 16B
// CPU: 68000 + MC8123B (317-0066)
// ROM Board type: 171-5521
-// Sega ID# for ROM board: 834-6661-02
+// Sega game ID: 833-6660-02 ALTERED BEAST
+// Main board: 837-6662-01
+// ROM board: 834-6661-02
//
ROM_START( altbeast2 )
ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code
@@ -6203,7 +6188,7 @@ ROM_START( ddux1 )
ROM_LOAD( "epr-11916.a10", 0x0000, 0x8000, CRC(7ab541cf) SHA1(feb88022ca1796d020e53e95ad345159bd415530) )
ROM_REGION( 0x1000, "mcu", 0 ) // Intel i8751 protection MCU
- ROM_LOAD( "317-0095.c2", 0x00000, 0x1000, NO_DUMP )
+ ROM_LOAD( "317-0095.c2", 0x00000, 0x1000, CRC(b06b4ca7) SHA1(563807dd8194179e25a2186f3572fb3738537c33) )
ROM_END
@@ -6776,7 +6761,9 @@ ROM_END
// Golden Axe, Sega System 16B
// CPU: 68000 + i8751 (317-123A)
// ROM Board type: 171-5797
-// Sega ID# for ROM board: 834-7002-07
+// Sega game ID: 833-7001-07 GOLDEN AXE
+// Main board: 837-7003-06
+// ROM board: 834-7002-07
//
ROM_START( goldnaxe )
ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code
@@ -7752,6 +7739,8 @@ ROM_END
// Ryukyu, Sega System 16B
// CPU: FD1094 8J2 (317-5023)
// ROM Board type: 171-5521
+// Sega game ID: 836-7666 RYUKYU
+// ROM board: 836-7667
//
ROM_START( ryukyua )
ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code
@@ -9392,12 +9381,6 @@ void segas16b_state::init_altbeas4_5521()
downcast<mc8123_device &>(*m_soundcpu).decode(memregion("soundcpu")->base(), m_sound_decrypted_opcodes, 0x8000);
}
-void segas16b_state::init_ddux_5704()
-{
- init_generic_5704();
- m_i8751_vblank_hook = i8751_sim_delegate(&segas16b_state::ddux_i8751_sim, this);
-}
-
void segas16b_state::init_dunkshot_5358_small()
{
init_generic_5358_small();
@@ -9511,7 +9494,7 @@ void segas16b_state::init_snapper()
//**************************************************************************
// YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MONITOR,COMPANY,FULLNAME,FLAGS
-GAME( 1988, aceattac, 0, aceattacb_fd1094, aceattac, segas16b_state, init_aceattac_5358, ROT270, "Sega", "Ace Attacker (FD1094 317-0059)", 0 )
+GAME( 1988, aceattac, 0, aceattacb_fd1094, aceattac, segas16b_state, init_aceattac_5358, ROT270, "Sega", "Ace Attacker (FD1094 317-0059)", 0 )
GAME( 1987, aliensyn, 0, system16b, aliensyn, segas16b_state, init_generic_5358_small, ROT0, "Sega", "Alien Syndrome (set 4, System 16B, unprotected)", 0 )
GAME( 1987, aliensyn7, aliensyn, system16b_mc8123, aliensyn, segas16b_state, init_aliensyn7_5358_small, ROT0, "Sega", "Alien Syndrome (set 7, System 16B, MC-8123B 317-00xx)", 0 )
@@ -9551,11 +9534,11 @@ GAME( 1991, cottonja, cotton, system16b_fd1094, cotton, segas16b_stat
GAME( 1988, ddux, 0, system16b_fd1094, ddux, segas16b_state, init_generic_5521, ROT0, "Sega", "Dynamite Dux (set 3, World) (FD1094 317-0096)", 0 )
GAME( 1988, dduxj, ddux, system16b_fd1094, ddux, segas16b_state, init_generic_5521, ROT0, "Sega", "Dynamite Dux (set 2, Japan) (FD1094 317-0094)", 0 )
-GAME( 1988, ddux1, ddux, system16b_i8751, ddux, segas16b_state, init_ddux_5704, ROT0, "Sega", "Dynamite Dux (set 1) (8751 317-0095)", 0 )
+GAME( 1988, ddux1, ddux, system16b_i8751, ddux, segas16b_state, init_generic_5704, ROT0, "Sega", "Dynamite Dux (set 1, World) (8751 317-0095)", 0 )
-GAME( 1987, dunkshot, 0, system16b_fd1089a, dunkshot, segas16b_state, init_dunkshot_5358_small,ROT0, "Sega", "Dunk Shot (Rev C, FD1089A 317-0022)", 0 )
-GAME( 1987, dunkshota, dunkshot, system16b_fd1089a, dunkshot, segas16b_state, init_dunkshot_5358_small,ROT0, "Sega", "Dunk Shot (Rev A, FD1089A 317-0022)", 0 )
-GAME( 1986, dunkshoto, dunkshot, system16b_fd1089a, dunkshoto, segas16b_state, init_dunkshot_5358_small,ROT0, "Sega", "Dunk Shot (FD1089A 317-0022)", 0 )
+GAME( 1987, dunkshot, 0, system16b_fd1089a, dunkshot, segas16b_state, init_dunkshot_5358_small,ROT0, "Sega", "Dunk Shot (Rev C, FD1089A 317-0022)", 0 )
+GAME( 1987, dunkshota, dunkshot, system16b_fd1089a, dunkshot, segas16b_state, init_dunkshot_5358_small,ROT0, "Sega", "Dunk Shot (Rev A, FD1089A 317-0022)", 0 )
+GAME( 1986, dunkshoto, dunkshot, system16b_fd1089a, dunkshoto,segas16b_state, init_dunkshot_5358_small,ROT0, "Sega", "Dunk Shot (FD1089A 317-0022)", 0 )
GAME( 1989, eswat, 0, system16b_fd1094_5797, eswat, segas16b_state, init_generic_5797, ROT0, "Sega", "E-Swat - Cyber Police (set 4, World) (FD1094 317-0130)", 0 )
GAME( 1989, eswatu, eswat, system16b_fd1094_5797, eswat, segas16b_state, init_generic_5797, ROT0, "Sega", "E-Swat - Cyber Police (set 3, US) (FD1094 317-0129)", 0 )
@@ -9609,113 +9592,113 @@ GAME( 1987, suprleag, 0, system16b_fd1094, exctleag, segas16b_stat
GAME( 1988, tetris2, tetris, system16b_fd1094, tetris, segas16b_state, init_generic_5704, ROT0, "Sega", "Tetris (set 2, Japan, System 16B) (FD1094 317-0092)", 0 )
GAME( 1988, tetris1, tetris, system16b_fd1094, tetris, segas16b_state, init_generic_5358_small, ROT0, "Sega", "Tetris (set 1, Japan, System 16B) (FD1094 317-0091)", 0 )
-GAME( 1987, timescan, 0, system16b, timescan, segas16b_state, init_timescan_5358_small, ROT270, "Sega", "Time Scanner (set 2, System 16B)", 0 )
+GAME( 1987, timescan, 0, system16b, timescan, segas16b_state, init_timescan_5358_small,ROT270, "Sega", "Time Scanner (set 2, System 16B)", 0 )
-GAME( 1994, toryumon, 0, system16b_5797, toryumon, segas16b_state, init_generic_5797, ROT0, "Sega", "Toryumon", 0 )
+GAME( 1994, toryumon, 0, system16b_5797, toryumon, segas16b_state, init_generic_5797, ROT0, "Sega", "Toryumon", 0 )
-GAME( 1989, tturf, 0, system16b_i8751, tturf, segas16b_state, init_tturf_5704, ROT0, "Sega / Sunsoft", "Tough Turf (set 2, Japan) (8751 317-0104)", 0 )
-GAME( 1989, tturfu, tturf, system16b_i8751, tturf, segas16b_state, init_generic_5358, ROT0, "Sega / Sunsoft", "Tough Turf (set 1, US) (8751 317-0099)", 0)
+GAME( 1989, tturf, 0, system16b_i8751, tturf, segas16b_state, init_tturf_5704, ROT0, "Sega / Sunsoft", "Tough Turf (set 2, Japan) (8751 317-0104)", 0 )
+GAME( 1989, tturfu, tturf, system16b_i8751, tturf, segas16b_state, init_generic_5358, ROT0, "Sega / Sunsoft", "Tough Turf (set 1, US) (8751 317-0099)", 0)
-GAME( 1996, ultracin, 0, system16b_5797, ultracin, segas16b_state, init_generic_5797, ROT0, "Sega", "Waku Waku Ultraman Racing", 0 )
+GAME( 1996, ultracin, 0, system16b_5797, ultracin, segas16b_state, init_generic_5797, ROT0, "Sega", "Waku Waku Ultraman Racing", 0 )
-GAME( 1988, wb3, 0, system16b_i8751, wb3, segas16b_state, init_wb3_5704, ROT0, "Sega / Westone", "Wonder Boy III - Monster Lair (set 6, World, System 16B) (8751 317-0098)", 0 )
-GAME( 1988, wb34, wb3, system16b_fd1094, wb3, segas16b_state, init_generic_5704, ROT0, "Sega / Westone", "Wonder Boy III - Monster Lair (set 4, Japan, System 16B) (FD1094 317-0087)", 0 )
-GAME( 1988, wb33, wb3, system16b_fd1094, wb3, segas16b_state, init_generic_5704, ROT0, "Sega / Westone", "Wonder Boy III - Monster Lair (set 3, World, System 16B) (FD1094 317-0089)", 0 )
-GAME( 1988, wb32, wb3, system16b_fd1094, wb3, segas16b_state, init_generic_5358, ROT0, "Sega / Westone", "Wonder Boy III - Monster Lair (set 2, Japan, System 16B) (FD1094 317-0085)", 0 )
+GAME( 1988, wb3, 0, system16b_i8751, wb3, segas16b_state, init_wb3_5704, ROT0, "Sega / Westone", "Wonder Boy III - Monster Lair (set 6, World, System 16B) (8751 317-0098)", 0 )
+GAME( 1988, wb34, wb3, system16b_fd1094, wb3, segas16b_state, init_generic_5704, ROT0, "Sega / Westone", "Wonder Boy III - Monster Lair (set 4, Japan, System 16B) (FD1094 317-0087)", 0 )
+GAME( 1988, wb33, wb3, system16b_fd1094, wb3, segas16b_state, init_generic_5704, ROT0, "Sega / Westone", "Wonder Boy III - Monster Lair (set 3, World, System 16B) (FD1094 317-0089)", 0 )
+GAME( 1988, wb32, wb3, system16b_fd1094, wb3, segas16b_state, init_generic_5358, ROT0, "Sega / Westone", "Wonder Boy III - Monster Lair (set 2, Japan, System 16B) (FD1094 317-0085)", 0 )
-GAME( 1989, wrestwar, 0, system16b_i8751, wrestwar, segas16b_state, init_generic_5704, ROT270, "Sega", "Wrestle War (set 3, World) (8751 317-0103)", 0 )
-GAME( 1989, wrestwar2, wrestwar, system16b_fd1094, wrestwar, segas16b_state, init_generic_5704, ROT270, "Sega", "Wrestle War (set 2, World) (FD1094 317-0102)", 0 )
-GAME( 1989, wrestwar1, wrestwar, system16b_fd1094, wrestwar, segas16b_state, init_generic_5704, ROT270, "Sega", "Wrestle War (set 1, Japan) (FD1094 317-0090)", 0 )
+GAME( 1989, wrestwar, 0, system16b_i8751, wrestwar, segas16b_state, init_generic_5704, ROT270, "Sega", "Wrestle War (set 3, World) (8751 317-0103)", 0 )
+GAME( 1989, wrestwar2, wrestwar, system16b_fd1094, wrestwar, segas16b_state, init_generic_5704, ROT270, "Sega", "Wrestle War (set 2, World) (FD1094 317-0102)", 0 )
+GAME( 1989, wrestwar1, wrestwar, system16b_fd1094, wrestwar, segas16b_state, init_generic_5704, ROT270, "Sega", "Wrestle War (set 1, Japan) (FD1094 317-0090)", 0 )
// Extra RAM, dubbed by M2 as 'System 16C'
-GAME( 2008, fantzn2x, 0, system16c, fz2, segas16b_state, init_generic_5704, ROT0, "Sega / M2", "Fantasy Zone II - The Tears of Opa-Opa (System 16C version)", 0 ) // The 1987 copyright date shown ingame is false
-GAME( 2008, fantzn2xp, fantzn2x, system16c, fz2, segas16b_state, init_generic_5704, ROT0, "Sega / M2", "Fantasy Zone II - The Tears of Opa-Opa (System 16C version, prototype)", 0 ) // "
+GAME( 2008, fantzn2x, 0, system16c, fz2, segas16b_state, init_generic_5704, ROT0, "Sega / M2", "Fantasy Zone II - The Tears of Opa-Opa (System 16C version)", 0 ) // The 1987 copyright date shown ingame is false
+GAME( 2008, fantzn2xp, fantzn2x, system16c, fz2, segas16b_state, init_generic_5704, ROT0, "Sega / M2", "Fantasy Zone II - The Tears of Opa-Opa (System 16C version, prototype)", 0 ) // "
-GAME( 2008, fantzoneta, fantzone, system16b, fantzoneta, segas16b_state, init_generic_5704, ROT0, "bootleg", "Fantasy Zone (Time Attack, bootleg)", 0 ) // based on the PS2 version, unlicensed PCB conversion
+GAME( 2008, fantzoneta, fantzone, system16b, fantzoneta, segas16b_state, init_generic_5704, ROT0, "bootleg", "Fantasy Zone (Time Attack, bootleg)", 0 ) // based on the PS2 version, unlicensed PCB conversion
// Custom Korean Board - these probably belong with the bootlegs...
-GAME( 1990, atomicp, 0, atomicp, atomicp, segas16b_state, init_generic_korean, ROT0, "Philko", "Atomic Point (Korea)", 0) // korean clone board..
-GAME( 1990, snapper, 0, atomicp, snapper, segas16b_state, init_snapper, ROT0, "Philko", "Snapper (Korea)", 0) // korean clone board..
+GAME( 1990, atomicp, 0, atomicp, atomicp, segas16b_state, init_generic_korean, ROT0, "Philko", "Atomic Point (Korea)", 0) // korean clone board..
+GAME( 1990, snapper, 0, atomicp, snapper, segas16b_state, init_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, init_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.
+GAME( 1991, lockonph, 0, lockonph, lockonph, segas16b_state, init_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.
GAME( 199?, dfjail, 0, dfjail, dfjail, segas16b_state, init_generic_korean, ROT0, "Philko", "The Destroyer From Jail (Korea)", MACHINE_IMPERFECT_SOUND | MACHINE_NO_COCKTAIL ) // dips, check sound, not extensively tested
// decrypted bootleg / 'suicide repair' sets
-GAME( 1987, shinobi2d, shinobi, system16b, shinobi, segas16b_state, init_generic_5358, ROT0, "bootleg", "Shinobi (set 2, System 16B) (bootleg of FD1094 317-0049 set)", 0 )
+GAME( 1987, shinobi2d, shinobi, system16b, shinobi, segas16b_state, init_generic_5358, ROT0, "bootleg", "Shinobi (set 2, System 16B) (bootleg of FD1094 317-0049 set)", 0 )
-GAME( 1989, fpointd, fpoint, system16b, fpoint, segas16b_state, init_generic_5358, ROT0, "bootleg", "Flash Point (set 2, Japan) (bootleg of FD1094 317-0127A set)", 0 )
-GAME( 1989, fpoint1d, fpoint, system16b, fpoint, segas16b_state, init_generic_5704, ROT0, "bootleg", "Flash Point (set 1, Japan) (bootleg of FD1094 317-0127A set)", 0 )
+GAME( 1989, fpointd, fpoint, system16b, fpoint, segas16b_state, init_generic_5358, ROT0, "bootleg", "Flash Point (set 2, Japan) (bootleg of FD1094 317-0127A set)", 0 )
+GAME( 1989, fpoint1d, fpoint, system16b, fpoint, segas16b_state, init_generic_5704, ROT0, "bootleg", "Flash Point (set 1, Japan) (bootleg of FD1094 317-0127A set)", 0 )
-GAME( 1988, tetris2d, tetris, system16b, tetris, segas16b_state, init_generic_5704, ROT0, "bootleg", "Tetris (set 2, Japan, System 16B) (bootleg of FD1094 317-0092 set)", 0 )
-GAME( 1988, tetris1d, tetris, system16b, tetris, segas16b_state, init_generic_5358_small, ROT0, "bootleg", "Tetris (set 1, Japan, System 16B) (bootleg of FD1094 317-0091 set)", 0 )
+GAME( 1988, tetris2d, tetris, system16b, tetris, segas16b_state, init_generic_5704, ROT0, "bootleg", "Tetris (set 2, Japan, System 16B) (bootleg of FD1094 317-0092 set)", 0 )
+GAME( 1988, tetris1d, tetris, system16b, tetris, segas16b_state, init_generic_5358_small, ROT0, "bootleg", "Tetris (set 1, Japan, System 16B) (bootleg of FD1094 317-0091 set)", 0 )
-GAME( 1988, dduxd, ddux, system16b, ddux, segas16b_state, init_generic_5521, ROT0, "bootleg", "Dynamite Dux (set 3, World) (bootleg of FD1094 317-0096 set)", 0 )
-GAME( 1988, dduxjd, ddux, system16b, ddux, segas16b_state, init_generic_5521, ROT0, "bootleg", "Dynamite Dux (set 2, Japan) (bootleg of FD1094 317-0094 set)", 0 )
+GAME( 1988, dduxd, ddux, system16b, ddux, segas16b_state, init_generic_5521, ROT0, "bootleg", "Dynamite Dux (set 3, World) (bootleg of FD1094 317-0096 set)", 0 )
+GAME( 1988, dduxjd, ddux, system16b, ddux, segas16b_state, init_generic_5521, ROT0, "bootleg", "Dynamite Dux (set 2, Japan) (bootleg of FD1094 317-0094 set)", 0 )
-GAME( 1988, altbeast5d, altbeast, system16b, altbeast, segas16b_state, init_generic_5521, ROT0, "bootleg", "Altered Beast (set 5) (bootleg of FD1094 317-0069 set)", 0 )
-GAME( 1988, altbeastj3d,altbeast, system16b, altbeast, segas16b_state, init_generic_5521, ROT0, "bootleg", "Juuouki (set 3, Japan) (bootleg of FD1094 317-0068 set)", 0 )
+GAME( 1988, altbeast5d, altbeast, system16b, altbeast, segas16b_state, init_generic_5521, ROT0, "bootleg", "Altered Beast (set 5) (bootleg of FD1094 317-0069 set)", 0 )
+GAME( 1988, altbeastj3d,altbeast, system16b, altbeast, segas16b_state, init_generic_5521, ROT0, "bootleg", "Juuouki (set 3, Japan) (bootleg of FD1094 317-0068 set)", 0 )
-GAME( 1990, aurail1d, aurail, system16b, aurail, segas16b_state, init_generic_5704, ROT0, "bootleg", "Aurail (set 2, World) (bootleg of FD1089B 317-0168 set)", 0 )
-GAME( 1990, aurailjd, aurail, system16b, aurail, segas16b_state, init_generic_5704, ROT0, "bootleg", "Aurail (set 1, Japan) (bootleg of FD1089A 317-0167 set)", 0 )
+GAME( 1990, aurail1d, aurail, system16b, aurail, segas16b_state, init_generic_5704, ROT0, "bootleg", "Aurail (set 2, World) (bootleg of FD1089B 317-0168 set)", 0 )
+GAME( 1990, aurailjd, aurail, system16b, aurail, segas16b_state, init_generic_5704, ROT0, "bootleg", "Aurail (set 1, Japan) (bootleg of FD1089A 317-0167 set)", 0 )
-GAME( 1989, mvpd, mvp, system16b_5797, mvp, segas16b_state, init_generic_5797, ROT0, "bootleg", "MVP (set 2, US) (bootleg of FD1094 317-0143 set)", 0 )
-GAME( 1989, mvpjd, mvp, system16b, mvp, segas16b_state, init_generic_5704, ROT0, "bootleg", "MVP (set 1, Japan) (bootleg of FD1094 317-0142 set)", 0 )
+GAME( 1989, mvpd, mvp, system16b_5797, mvp, segas16b_state, init_generic_5797, ROT0, "bootleg", "MVP (set 2, US) (bootleg of FD1094 317-0143 set)", 0 )
+GAME( 1989, mvpjd, mvp, system16b, mvp, segas16b_state, init_generic_5704, ROT0, "bootleg", "MVP (set 1, Japan) (bootleg of FD1094 317-0142 set)", 0 )
-GAME( 1991, cottond, cotton, system16b, cotton, segas16b_state, init_generic_5704, ROT0, "bootleg", "Cotton (set 4, World) (bootleg of FD1094 317-0181a set)", 0 )
-GAME( 1991, cottonud, cotton, system16b, cotton, segas16b_state, init_generic_5704, ROT0, "bootleg", "Cotton (set 3, US) (bootleg of FD1094 317-0180 set)", 0 )
-GAME( 1991, cottonjad, cotton, system16b, cotton, segas16b_state, init_generic_5704, ROT0, "bootleg", "Cotton (set 1, Japan, Rev A) (bootleg of FD1094 317-0179a set)", 0 )
-GAME( 1991, cottonjd, cotton, system16b, cotton, segas16b_state, init_generic_5704, ROT0, "bootleg", "Cotton (set 2, Japan, Rev B) (bootleg of FD1094 317-0179b set)", 0 )
+GAME( 1991, cottond, cotton, system16b, cotton, segas16b_state, init_generic_5704, ROT0, "bootleg", "Cotton (set 4, World) (bootleg of FD1094 317-0181a set)", 0 )
+GAME( 1991, cottonud, cotton, system16b, cotton, segas16b_state, init_generic_5704, ROT0, "bootleg", "Cotton (set 3, US) (bootleg of FD1094 317-0180 set)", 0 )
+GAME( 1991, cottonjad, cotton, system16b, cotton, segas16b_state, init_generic_5704, ROT0, "bootleg", "Cotton (set 1, Japan, Rev A) (bootleg of FD1094 317-0179a set)", 0 )
+GAME( 1991, cottonjd, cotton, system16b, cotton, segas16b_state, init_generic_5704, ROT0, "bootleg", "Cotton (set 2, Japan, Rev B) (bootleg of FD1094 317-0179b set)", 0 )
-GAME( 1989, bayrouted, bayroute, system16b, bayroute, segas16b_state, init_generic_5704, ROT0, "bootleg", "Bay Route (set 3, World) (bootleg of FD1094 317-0116 set)", 0 )
-GAME( 1989, bayroutejd, bayroute, system16b, bayroute, segas16b_state, init_generic_5704, ROT0, "bootleg", "Bay Route (set 2, Japan) (bootleg of FD1094 317-0115 set)", 0 )
+GAME( 1989, bayrouted, bayroute, system16b, bayroute, segas16b_state, init_generic_5704, ROT0, "bootleg", "Bay Route (set 3, World) (bootleg of FD1094 317-0116 set)", 0 )
+GAME( 1989, bayroutejd, bayroute, system16b, bayroute, segas16b_state, init_generic_5704, ROT0, "bootleg", "Bay Route (set 2, Japan) (bootleg of FD1094 317-0115 set)", 0 )
-GAME( 1988, exctleagd, exctleag, system16b, exctleag, segas16b_state, init_exctleag_5358, ROT0, "bootleg", "Excite League (bootleg of FD1094 317-0079 set)", 0 )
+GAME( 1988, exctleagd, exctleag, system16b, exctleag, segas16b_state, init_exctleag_5358, ROT0, "bootleg", "Excite League (bootleg of FD1094 317-0079 set)", 0 )
-GAME( 1987, sonicbomd, sonicbom, system16b, sonicbom, segas16b_state, init_generic_5358, ROT270, "bootleg", "Sonic Boom (bootleg of FD1094 317-0053 set)", 0 )
+GAME( 1987, sonicbomd, sonicbom, system16b, sonicbom, segas16b_state, init_generic_5358, ROT270, "bootleg", "Sonic Boom (bootleg of FD1094 317-0053 set)", 0 )
-GAME( 1990, ryukyud, ryukyu, system16b, ryukyu, segas16b_state, init_generic_5704, ROT0, "bootleg", "RyuKyu (Japan) (bootleg of FD1094 317-5023 set)", 0 )
+GAME( 1990, ryukyud, ryukyu, system16b, ryukyu, segas16b_state, init_generic_5704, ROT0, "bootleg", "RyuKyu (Japan) (bootleg of FD1094 317-5023 set)", 0 )
-GAME( 1987, hwchampjd, hwchamp, system16b, hwchamp, segas16b_state, init_hwchamp_5521, ROT0, "bootleg", "Heavyweight Champ (Japan) (bootleg of FD1094 317-0046 set)", 0 )
+GAME( 1987, hwchampjd, hwchamp, system16b, hwchamp, segas16b_state, init_hwchamp_5521, ROT0, "bootleg", "Heavyweight Champ (Japan) (bootleg of FD1094 317-0046 set)", 0 )
-GAME( 1987, bulletd, bullet, system16b, bullet, segas16b_state, init_generic_5358_small, ROT0, "bootleg", "Bullet (bootleg of FD1094 317-0041 set)", 0 )
+GAME( 1987, bulletd, bullet, system16b, bullet, segas16b_state, init_generic_5358_small, ROT0, "bootleg", "Bullet (bootleg of FD1094 317-0041 set)", 0 )
-GAME( 1989, eswatd, eswat, system16b_5797, eswat, segas16b_state, init_generic_5797, ROT0, "bootleg", "E-Swat - Cyber Police (set 4, World) (bootleg of FD1094 317-0130 set)", 0 )
-GAME( 1989, eswatud, eswat, system16b_5797, eswat, segas16b_state, init_generic_5797, ROT0, "bootleg", "E-Swat - Cyber Police (set 3, US) (bootleg of FD1094 317-0129 set)", 0 )
-GAME( 1989, eswatjd, eswat, system16b_5797, eswat, segas16b_state, init_generic_5797, ROT0, "bootleg", "E-Swat - Cyber Police (set 2, Japan) (bootleg of FD1094 317-0128 set)", 0 )
-GAME( 1989, eswatj1d, eswat, system16b, eswat, segas16b_state, init_generic_5704, ROT0, "bootleg", "E-Swat - Cyber Police (set 1, Japan) (bootleg of FD1094 317-0131 set)", 0 )
+GAME( 1989, eswatd, eswat, system16b_5797, eswat, segas16b_state, init_generic_5797, ROT0, "bootleg", "E-Swat - Cyber Police (set 4, World) (bootleg of FD1094 317-0130 set)", 0 )
+GAME( 1989, eswatud, eswat, system16b_5797, eswat, segas16b_state, init_generic_5797, ROT0, "bootleg", "E-Swat - Cyber Police (set 3, US) (bootleg of FD1094 317-0129 set)", 0 )
+GAME( 1989, eswatjd, eswat, system16b_5797, eswat, segas16b_state, init_generic_5797, ROT0, "bootleg", "E-Swat - Cyber Police (set 2, Japan) (bootleg of FD1094 317-0128 set)", 0 )
+GAME( 1989, eswatj1d, eswat, system16b, eswat, segas16b_state, init_generic_5704, ROT0, "bootleg", "E-Swat - Cyber Police (set 1, Japan) (bootleg of FD1094 317-0131 set)", 0 )
-GAME( 1989, goldnaxeud, goldnaxe, system16b_5797, goldnaxe, segas16b_state, init_generic_5797, ROT0, "bootleg", "Golden Axe (set 5, US) (bootleg of FD1094 317-0122 set)", 0 )
-GAME( 1989, goldnaxe3d, goldnaxe, system16b, goldnaxe, segas16b_state, init_generic_5704, ROT0, "bootleg", "Golden Axe (set 3, World) (bootleg of FD1094 317-0120 set)", 0)
-GAME( 1989, goldnaxe1d, goldnaxe, system16b_5797, goldnaxe, segas16b_state, init_generic_5797, ROT0, "bootleg", "Golden Axe (set 1, World) (bootleg of FD1094 317-0110 set)", 0 )
-GAME( 1989, goldnaxejd, goldnaxe, system16b, goldnaxe, segas16b_state, init_generic_5704, ROT0, "bootleg", "Golden Axe (set 4, Japan) (bootleg of FD1094 317-0121 set)", 0 )
+GAME( 1989, goldnaxeud, goldnaxe, system16b_5797, goldnaxe, segas16b_state, init_generic_5797, ROT0, "bootleg", "Golden Axe (set 5, US) (bootleg of FD1094 317-0122 set)", 0 )
+GAME( 1989, goldnaxe3d, goldnaxe, system16b, goldnaxe, segas16b_state, init_generic_5704, ROT0, "bootleg", "Golden Axe (set 3, World) (bootleg of FD1094 317-0120 set)", 0)
+GAME( 1989, goldnaxe1d, goldnaxe, system16b_5797, goldnaxe, segas16b_state, init_generic_5797, ROT0, "bootleg", "Golden Axe (set 1, World) (bootleg of FD1094 317-0110 set)", 0 )
+GAME( 1989, goldnaxejd, goldnaxe, system16b, goldnaxe, segas16b_state, init_generic_5704, ROT0, "bootleg", "Golden Axe (set 4, Japan) (bootleg of FD1094 317-0121 set)", 0 )
-GAME( 1988, passshtd, passsht, system16b, passsht, segas16b_state, init_generic_5358, ROT270, "bootleg", "Passing Shot (World, 2 Players) (bootleg of FD1094 317-0080 set)", 0 )
-GAME( 1988, passshtad, passsht, system16b, passshtj, segas16b_state, init_passshtj_5358, ROT270, "bootleg", "Passing Shot (World, 4 Players) (bootleg of FD1094 317-0074 set)", 0 )
-GAME( 1988, passshtjd, passsht, system16b, passshtj, segas16b_state, init_passshtj_5358, ROT270, "bootleg", "Passing Shot (Japan, 4 Players) (bootleg of FD1094 317-0070 set)", 0 )
+GAME( 1988, passshtd, passsht, system16b, passsht, segas16b_state, init_generic_5358, ROT270, "bootleg", "Passing Shot (World, 2 Players) (bootleg of FD1094 317-0080 set)", 0 )
+GAME( 1988, passshtad, passsht, system16b, passshtj, segas16b_state, init_passshtj_5358, ROT270, "bootleg", "Passing Shot (World, 4 Players) (bootleg of FD1094 317-0074 set)", 0 )
+GAME( 1988, passshtjd, passsht, system16b, passshtj, segas16b_state, init_passshtj_5358, ROT270, "bootleg", "Passing Shot (Japan, 4 Players) (bootleg of FD1094 317-0070 set)", 0 )
-GAME( 1988, wb34d, wb3, system16b, wb3, segas16b_state, init_generic_5704, ROT0, "bootleg", "Wonder Boy III - Monster Lair (set 4, Japan, System 16B) (bootleg of FD1094 317-0087 set)", 0 )
-GAME( 1988, wb33d, wb3, system16b, wb3, segas16b_state, init_generic_5704, ROT0, "bootleg", "Wonder Boy III - Monster Lair (set 3, World, System 16B) (bootleg of FD1094 317-0089 set)", 0 )
-GAME( 1988, wb32d, wb3, system16b, wb3, segas16b_state, init_generic_5358, ROT0, "bootleg", "Wonder Boy III - Monster Lair (set 2, Japan, System 16B) (bootleg of FD1094 317-0085 set)", 0 )
+GAME( 1988, wb34d, wb3, system16b, wb3, segas16b_state, init_generic_5704, ROT0, "bootleg", "Wonder Boy III - Monster Lair (set 4, Japan, System 16B) (bootleg of FD1094 317-0087 set)", 0 )
+GAME( 1988, wb33d, wb3, system16b, wb3, segas16b_state, init_generic_5704, ROT0, "bootleg", "Wonder Boy III - Monster Lair (set 3, World, System 16B) (bootleg of FD1094 317-0089 set)", 0 )
+GAME( 1988, wb32d, wb3, system16b, wb3, segas16b_state, init_generic_5358, ROT0, "bootleg", "Wonder Boy III - Monster Lair (set 2, Japan, System 16B) (bootleg of FD1094 317-0085 set)", 0 )
-GAME( 1989, wrestwar2d, wrestwar, system16b, wrestwar, segas16b_state, init_generic_5704, ROT270, "bootleg", "Wrestle War (set 2, World) (bootleg of FD1094 317-0102 set)", 0 )
-GAME( 1989, wrestwar1d, wrestwar, system16b, wrestwar, segas16b_state, init_generic_5704, ROT270, "bootleg", "Wrestle War (set 1, Japan) (bootleg of FD1094 317-0090 set)", 0 )
+GAME( 1989, wrestwar2d, wrestwar, system16b, wrestwar, segas16b_state, init_generic_5704, ROT270, "bootleg", "Wrestle War (set 2, World) (bootleg of FD1094 317-0102 set)", 0 )
+GAME( 1989, wrestwar1d, wrestwar, system16b, wrestwar, segas16b_state, init_generic_5704, ROT270, "bootleg", "Wrestle War (set 1, Japan) (bootleg of FD1094 317-0090 set)", 0 )
// bootlegs with split code/data, no memory mapper
-GAME( 1987, sdibl2, sdi, system16b_split, sdi, segas16b_state, init_sdi_5358_small, ROT0, "bootleg", "SDI - Strategic Defense Initiative (bootleg, set 1)", 0 ) // 0x5230
-GAME( 1987, sdibl3, sdi, system16b_split, sdi, segas16b_state, init_sdi_5358_small, ROT0, "bootleg", "SDI - Strategic Defense Initiative (bootleg, set 2)", 0 ) // ^
-GAME( 1987, sdibl4, sdi, system16b_split, sdi, segas16b_state, init_sdi_5358_small, ROT0, "bootleg", "SDI - Strategic Defense Initiative (bootleg, set 3)", 0 ) // ^
-GAME( 1987, sdibl5, sdi, system16b_split, sdi, segas16b_state, init_sdi_5358_small, ROT0, "bootleg", "SDI - Strategic Defense Initiative (bootleg, set 4)", 0 )
-GAME( 1987, sdibl6, sdi, system16b_split, sdi, segas16b_state, init_sdi_5358_small, ROT0, "bootleg", "SDI - Strategic Defense Initiative (bootleg, set 5)", 0 )
+GAME( 1987, sdibl2, sdi, system16b_split, sdi, segas16b_state, init_sdi_5358_small, ROT0, "bootleg", "SDI - Strategic Defense Initiative (bootleg, set 1)", 0 ) // 0x5230
+GAME( 1987, sdibl3, sdi, system16b_split, sdi, segas16b_state, init_sdi_5358_small, ROT0, "bootleg", "SDI - Strategic Defense Initiative (bootleg, set 2)", 0 ) // ^
+GAME( 1987, sdibl4, sdi, system16b_split, sdi, segas16b_state, init_sdi_5358_small, ROT0, "bootleg", "SDI - Strategic Defense Initiative (bootleg, set 3)", 0 ) // ^
+GAME( 1987, sdibl5, sdi, system16b_split, sdi, segas16b_state, init_sdi_5358_small, ROT0, "bootleg", "SDI - Strategic Defense Initiative (bootleg, set 4)", 0 )
+GAME( 1987, sdibl6, sdi, system16b_split, sdi, segas16b_state, init_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, init_generic_bootleg, ROT0, "bootleg (Datsu)", "Flash Point (World, bootleg)", 0 )
-GAME( 1989, fpointbj, fpoint, fpointbl, fpointbl, segas16b_state, init_generic_bootleg, ROT0, "bootleg (Datsu)", "Flash Point (Japan, bootleg set 1)", 0 )
-GAME( 1989, fpointbla, fpoint, fpointbla, fpointbl, segas16b_state, init_fpointbla, ROT0, "bootleg", "Flash Point (Japan, bootleg set 2)", MACHINE_NOT_WORKING )
+GAME( 1989, fpointbl, fpoint, fpointbl, fpointbl, segas16b_state, init_generic_bootleg, ROT0, "bootleg (Datsu)", "Flash Point (World, bootleg)", 0 )
+GAME( 1989, fpointbj, fpoint, fpointbl, fpointbl, segas16b_state, init_generic_bootleg, ROT0, "bootleg (Datsu)", "Flash Point (Japan, bootleg set 1)", 0 )
+GAME( 1989, fpointbla, fpoint, fpointbla, fpointbl, segas16b_state, init_fpointbla, ROT0, "bootleg", "Flash Point (Japan, bootleg set 2)", MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/segas32.cpp b/src/mame/drivers/segas32.cpp
index fc46d67b8dc..6d62f2fe8ca 100644
--- a/src/mame/drivers/segas32.cpp
+++ b/src/mame/drivers/segas32.cpp
@@ -558,16 +558,17 @@ orunners: Interleaved with the dj and << >> buttons is the data the drives the
DEFINE_DEVICE_TYPE(SEGA_S32_PCB, segas32_state, "segas32_pcb", "Sega System 32 PCB")
segas32_state::segas32_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : segas32_state(mconfig, SEGA_S32_PCB, tag, owner, clock)
+ : segas32_state(mconfig, SEGA_S32_PCB, tag, owner, clock, false)
{
}
-segas32_state::segas32_state(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+segas32_state::segas32_state(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, bool is_multi32)
: device_t(mconfig, type, tag, owner, clock)
, m_z80_shared_ram(*this,"z80_shared_ram")
, m_system32_workram(*this,"workram")
, m_videoram(*this,"videoram", 0)
, m_spriteram(*this,"spriteram", 0)
+ , m_soundram(*this, "soundram")
, m_paletteram(*this,"paletteram.%u", 0, uint8_t(0))
, m_maincpu(*this, "maincpu")
, m_soundcpu(*this, "soundcpu")
@@ -583,6 +584,7 @@ segas32_state::segas32_state(const machine_config &mconfig, device_type type, co
, m_soundrom_bank(*this, "soundbank")
, m_multipcm_bank_hi(*this, "multipcmbankhi")
, m_multipcm_bank_lo(*this, "multipcmbanklo")
+ , m_is_multi32(is_multi32)
{
}
@@ -618,49 +620,24 @@ segas32_state::segas32_state(const machine_config &mconfig, device_type type, co
*
*************************************/
-void segas32_state::device_start()
-{
- common_start(0);
-}
-
-void segas32_trackball_state::device_start()
-{
- common_start(0);
-}
-
void segas32_v25_state::device_start()
{
- common_start(0);
+ segas32_4player_state::device_start();
decrypt_protrom();
}
-void segas32_upd7725_state::device_start()
-{
- common_start(0);
-}
-
void segas32_cd_state::device_start()
{
- common_start(0);
+ segas32_state::device_start();
m_lamps.resolve();
}
-void sega_multi32_state::device_start()
-{
- common_start(1);
-}
-
void sega_multi32_analog_state::device_start()
{
- common_start(1);
+ sega_multi32_state::device_start();
m_analog_bank = 0;
}
-void sega_multi32_6player_state::device_start()
-{
- common_start(1);
-}
-
void segas32_state::device_reset()
{
/* initialize the interrupt controller */
@@ -1242,7 +1219,7 @@ void segas32_state::system32_sound_portmap(address_map &map)
void segas32_state::rf5c68_map(address_map &map)
{
map.unmap_value_high();
- map(0x0000, 0xffff).ram();
+ map(0x0000, 0xffff).ram().share("soundram");
}
@@ -2371,7 +2348,7 @@ void segas32_state::device_add_mconfig(machine_config &config)
DEFINE_DEVICE_TYPE(SEGA_S32_REGULAR_DEVICE, segas32_regular_state, "segas32_pcb_regular", "Sega System 32 regular PCB")
segas32_regular_state::segas32_regular_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : segas32_state(mconfig, SEGA_S32_REGULAR_DEVICE, tag, owner, clock)
+ : segas32_state(mconfig, SEGA_S32_REGULAR_DEVICE, tag, owner, clock, false)
{
}
@@ -2407,7 +2384,7 @@ segas32_analog_state::segas32_analog_state(const machine_config &mconfig, const
}
segas32_analog_state::segas32_analog_state(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
- : segas32_state(mconfig, type, tag, owner, clock)
+ : segas32_state(mconfig, type, tag, owner, clock, false)
{
}
@@ -2419,7 +2396,7 @@ void segas32_trackball_state::system32_trackball_map(address_map &map)
{
map.unmap_value_high();
system32_map(map);
- //AM_RANGE(0xc00040, 0xc0005f) AM_MIRROR(0x0fff80) AM_READWRITE8(sonic_custom_io_r, sonic_custom_io_w, 0x00ff)
+ //map(0xc00040, 0xc0005f).mirror(0x0fff80).rw(FUNC(segas32_trackball_state::sonic_custom_io_r), FUNC(segas32_trackball_state::sonic_custom_io_w)).umask16(0x00ff);
map(0xc00040, 0xc00047).mirror(0x0fff80).rw("upd1", FUNC(upd4701_device::read_xy), FUNC(upd4701_device::reset_xy_w)).umask16(0x00ff);
map(0xc00048, 0xc0004f).mirror(0x0fff80).rw("upd2", FUNC(upd4701_device::read_xy), FUNC(upd4701_device::reset_xy_w)).umask16(0x00ff);
map(0xc00050, 0xc00057).mirror(0x0fff80).rw("upd3", FUNC(upd4701_device::read_xy), FUNC(upd4701_device::reset_xy_w)).umask16(0x00ff);
@@ -2449,7 +2426,7 @@ void segas32_trackball_state::device_add_mconfig(machine_config &config)
DEFINE_DEVICE_TYPE(SEGA_S32_TRACKBALL_DEVICE, segas32_trackball_state, "segas32_pcb_trackball", "Sega System 32 trackball PCB")
segas32_trackball_state::segas32_trackball_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : segas32_state(mconfig, SEGA_S32_TRACKBALL_DEVICE, tag, owner, clock)
+ : segas32_state(mconfig, SEGA_S32_TRACKBALL_DEVICE, tag, owner, clock, false)
{
}
@@ -2484,7 +2461,7 @@ segas32_4player_state::segas32_4player_state(const machine_config &mconfig, cons
}
segas32_4player_state::segas32_4player_state(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
- : segas32_state(mconfig, type, tag, owner, clock)
+ : segas32_state(mconfig, type, tag, owner, clock, false)
{
}
@@ -2605,7 +2582,7 @@ void segas32_cd_state::device_add_mconfig(machine_config &config)
scsi.set_slot_device(1, "cdrom", SCSICD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_0));
scsi.slot(1).set_option_machine_config("cdrom", cdrom_config);
- cxd1095_device &cxdio(CXD1095(config, "cxdio", 0));
+ cxd1095_device &cxdio(CXD1095(config, "cxdio"));
cxdio.out_porta_cb().set(FUNC(segas32_cd_state::lamps1_w));
cxdio.out_portb_cb().set(FUNC(segas32_cd_state::lamps2_w));
cxdio.in_portd_cb().set_constant(0xff); // Ports C-E used for IEEE-488 printer interface
@@ -2614,7 +2591,7 @@ void segas32_cd_state::device_add_mconfig(machine_config &config)
DEFINE_DEVICE_TYPE(SEGA_S32_CD_DEVICE, segas32_cd_state, "segas32_pcb_cd", "Sega System 32 CD PCB")
segas32_cd_state::segas32_cd_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : segas32_state(mconfig, SEGA_S32_CD_DEVICE, tag, owner, clock)
+ : segas32_state(mconfig, SEGA_S32_CD_DEVICE, tag, owner, clock, false)
, m_lamps(*this, "lamp%u", 0U)
{
}
@@ -2705,7 +2682,7 @@ sega_multi32_state::sega_multi32_state(const machine_config &mconfig, const char
}
sega_multi32_state::sega_multi32_state(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
- : segas32_state(mconfig, type, tag, owner, clock)
+ : segas32_state(mconfig, type, tag, owner, clock, true)
{
}
@@ -5427,6 +5404,7 @@ void segas32_state::segas32_common_init()
uint8_t *Z80 = memregion("soundcpu")->base();
uint32_t size = memregion("soundcpu")->bytes();
m_soundrom_bank->configure_entries(0, size / 0x2000, &Z80[0], 0x2000);
+
/* reset the custom handlers and other pointers */
m_system32_prot_vblank = nullptr;
m_sw1_output = nullptr;
@@ -5703,7 +5681,7 @@ void segas32_new_state::init_f1lapt()
m_mainpcb->init_f1lapt();
}
-void segas32_state::init_alien3(void)
+void segas32_state::init_alien3()
{
segas32_common_init();
m_sw1_output = &segas32_state::alien3_sw1_output;
@@ -5741,13 +5719,13 @@ void segas32_state::init_arescue(int m_hasdsp)
}
-void segas32_state::init_arabfgt(void)
+void segas32_state::init_arabfgt()
{
segas32_common_init();
}
-void segas32_state::init_brival(void)
+void segas32_state::init_brival()
{
segas32_common_init();
@@ -5758,7 +5736,7 @@ void segas32_state::init_brival(void)
}
-void segas32_state::init_darkedge(void)
+void segas32_state::init_darkedge()
{
segas32_common_init();
@@ -5768,7 +5746,7 @@ void segas32_state::init_darkedge(void)
}
-void segas32_state::init_dbzvrvs(void)
+void segas32_state::init_dbzvrvs()
{
segas32_common_init();
@@ -5778,7 +5756,7 @@ void segas32_state::init_dbzvrvs(void)
}
-void segas32_state::init_f1en(void)
+void segas32_state::init_f1en()
{
segas32_common_init();
@@ -5787,7 +5765,7 @@ void segas32_state::init_f1en(void)
}
-void segas32_state::init_f1lap(void)
+void segas32_state::init_f1lap()
{
segas32_common_init();
m_system32_prot_vblank = &segas32_state::f1lap_fd1149_vblank;
@@ -5798,7 +5776,7 @@ void segas32_state::init_f1lap(void)
}
-void segas32_state::init_f1lapt(void)
+void segas32_state::init_f1lapt()
{
segas32_common_init();
@@ -5808,13 +5786,13 @@ void segas32_state::init_f1lapt(void)
}
-void segas32_state::init_ga2(void)
+void segas32_state::init_ga2()
{
segas32_common_init();
}
-void segas32_state::init_harddunk(void)
+void segas32_state::init_harddunk()
{
segas32_common_init();
m_sw1_output = &segas32_state::harddunk_sw1_output;
@@ -5823,13 +5801,13 @@ void segas32_state::init_harddunk(void)
}
-void segas32_state::init_holo(void)
+void segas32_state::init_holo()
{
segas32_common_init();
}
-void segas32_state::init_jpark(void)
+void segas32_state::init_jpark()
{
/* Temp. Patch until we emulate the 'Drive Board', thanks to Malice */
uint16_t *pROM = (uint16_t *)m_maincpu_region->base();
@@ -5843,7 +5821,7 @@ void segas32_state::init_jpark(void)
}
-void segas32_state::init_orunners(void)
+void segas32_state::init_orunners()
{
segas32_common_init();
m_sw1_output = &segas32_state::orunners_sw1_output;
@@ -5853,7 +5831,7 @@ void segas32_state::init_orunners(void)
}
-void segas32_state::init_radm(void)
+void segas32_state::init_radm()
{
segas32_common_init();
m_sw1_output = &segas32_state::radm_sw1_output;
@@ -5861,7 +5839,7 @@ void segas32_state::init_radm(void)
}
-void segas32_state::init_radr(void)
+void segas32_state::init_radr()
{
segas32_common_init();
m_sw1_output = &segas32_state::radm_sw1_output;
@@ -5871,7 +5849,7 @@ void segas32_state::init_radr(void)
}
-void segas32_state::init_scross(void)
+void segas32_state::init_scross()
{
segas32_common_init();
m_soundcpu->space(AS_PROGRAM).install_write_handler(0xb0, 0xbf, write8_delegate(FUNC(segas32_state::scross_bank_w),this));
@@ -5883,13 +5861,13 @@ void segas32_state::init_scross(void)
}
-void segas32_state::init_slipstrm(void)
+void segas32_state::init_slipstrm()
{
segas32_common_init();
}
-void segas32_state::init_sonic(void)
+void segas32_state::init_sonic()
{
segas32_common_init();
@@ -5898,32 +5876,32 @@ void segas32_state::init_sonic(void)
}
-void segas32_state::init_sonicp(void)
+void segas32_state::init_sonicp()
{
segas32_common_init();
}
-void segas32_state::init_spidman(void)
+void segas32_state::init_spidman()
{
segas32_common_init();
}
-void segas32_state::init_svf(void)
+void segas32_state::init_svf()
{
segas32_common_init();
}
-void segas32_state::init_jleague(void)
+void segas32_state::init_jleague()
{
segas32_common_init();
m_maincpu->space(AS_PROGRAM).install_write_handler(0x20F700, 0x20F705, write16_delegate(FUNC(segas32_state::jleague_protection_w),this));
}
-void segas32_state::init_titlef(void)
+void segas32_state::init_titlef()
{
segas32_common_init();
m_sw1_output = &segas32_state::titlef_sw1_output;
diff --git a/src/mame/drivers/segasp.cpp b/src/mame/drivers/segasp.cpp
index 12532ff45c9..db29c66da11 100644
--- a/src/mame/drivers/segasp.cpp
+++ b/src/mame/drivers/segasp.cpp
@@ -206,12 +206,12 @@ void segasp_state::segasp_map(address_map &map)
/* External Device */
map(0x01000000, 0x0100ffff).ram(); // banked access to ROM/NET board address space, mainly backup SRAM and ATA
map(0x01010000, 0x01010007).rw(FUNC(segasp_state::sp_bank_r), FUNC(segasp_state::sp_bank_w));
-// AM_RANGE(0x01010080, 0x01010087) IRQ pending/reset, ATA control
+// map(0x01010080, 0x01010087) IRQ pending/reset, ATA control
map(0x01010100, 0x01010127).r(FUNC(segasp_state::sp_io_r));
map(0x01010128, 0x0101012f).rw(FUNC(segasp_state::sp_eeprom_r), FUNC(segasp_state::sp_eeprom_w));
map(0x01010150, 0x01010157).r(FUNC(segasp_state::sp_rombdflg_r));
-// AM_RANGE(0x01010180, 0x010101af) custom UART 1
-// AM_RANGE(0x010101c0, 0x010101ef) custom UART 2
+// map(0x01010180, 0x010101af) custom UART 1
+// map(0x010101c0, 0x010101ef) custom UART 2
/* Area 1 */
map(0x04000000, 0x04ffffff).mirror(0x02000000).ram().share("dc_texture_ram"); // texture memory 64 bit access
@@ -231,13 +231,13 @@ void segasp_state::segasp_map(address_map &map)
map(0x13000000, 0x13ffffff).w(m_powervr2, FUNC(powervr2_device::ta_texture_directpath1_w)); // access to texture / framebuffer memory (either 32-bit or 64-bit area depending on SB_LMMODE1 register - cannot be written directly, only through dma / store queue)
/* Area 5 */
- //AM_RANGE(0x14000000, 0x17ffffff) AM_NOP // MPX Ext.
+ //map(0x14000000, 0x17ffffff).noprw(); // MPX Ext.
/* Area 6 */
- //AM_RANGE(0x18000000, 0x1bffffff) AM_NOP // Unassigned
+ //map(0x18000000, 0x1bffffff).noprw(); // Unassigned
/* Area 7 */
- //AM_RANGE(0x1c000000, 0x1fffffff) AM_NOP // SH4 Internal
+ //map(0x1c000000, 0x1fffffff).noprw(); // SH4 Internal
}
void segasp_state::onchip_port(address_map &map)
diff --git a/src/mame/drivers/segaufo.cpp b/src/mame/drivers/segaufo.cpp
index d1fc9bfcb6e..88546ef468e 100644
--- a/src/mame/drivers/segaufo.cpp
+++ b/src/mame/drivers/segaufo.cpp
@@ -496,8 +496,8 @@ void ufo_state::ex_ufo21_portmap(address_map &map)
void ufo_state::ex_ufo800_portmap(address_map &map)
{
ufo_portmap(map);
-// AM_RANGE(0x60, 0x67) AM_NOP // unused?
-// AM_RANGE(0x68, 0x68) AM_WRITENOP // ?
+// map(0x60, 0x67).noprw(); // unused?
+// map(0x68, 0x68).nopw(); // ?
}
diff --git a/src/mame/drivers/segaxbd.cpp b/src/mame/drivers/segaxbd.cpp
index 12b3bf5af56..e03ebf82bc9 100644
--- a/src/mame/drivers/segaxbd.cpp
+++ b/src/mame/drivers/segaxbd.cpp
@@ -269,6 +269,7 @@ ROMs:
#include "includes/segaxbd.h"
#include "includes/segaipt.h"
+#include "machine/adc0804.h"
#include "machine/nvram.h"
#include "sound/ym2151.h"
#include "sound/segapcm.h"
@@ -469,14 +470,14 @@ WRITE_LINE_MEMBER(segaxbd_state::timer_irq_w)
//**************************************************************************
//-------------------------------------------------
-// adc_w - handle reads from the ADC
+// analog_r - provide input to the ADC
//-------------------------------------------------
-READ16_MEMBER( segaxbd_state::adc_r )
+uint8_t segaxbd_state::analog_r()
{
// on the write, latch the selected input port and stash the value
int which = (m_pc_0 >> 2) & 7;
- int value = m_adc_ports[which].read_safe(0x0010);
+ uint8_t value = m_adc_ports[which].read_safe(0x10);
// reverse some port values
if (m_adc_reverse[which])
@@ -488,15 +489,6 @@ READ16_MEMBER( segaxbd_state::adc_r )
//-------------------------------------------------
-// adc_w - handle writes to the ADC
-//-------------------------------------------------
-
-WRITE16_MEMBER( segaxbd_state::adc_w )
-{
-}
-
-
-//-------------------------------------------------
// pc_0_w - handle writes to port C on the first
// I/O chip
//-------------------------------------------------
@@ -941,7 +933,7 @@ void segaxbd_state::main_map(address_map &map)
map(0x100000, 0x100fff).mirror(0x00f000).ram().share("sprites");
map(0x110000, 0x11ffff).w("sprites", FUNC(sega_xboard_sprite_device::draw_write));
map(0x120000, 0x123fff).mirror(0x00c000).ram().w(FUNC(segaxbd_state::paletteram_w)).share("paletteram");
- map(0x130000, 0x13ffff).rw(FUNC(segaxbd_state::adc_r), FUNC(segaxbd_state::adc_w));
+ map(0x130001, 0x130001).mirror(0x00fffe).rw("adc", FUNC(adc0804_device::read), FUNC(adc0804_device::write));
map(0x140000, 0x14000f).mirror(0x00fff0).rw(m_iochip[0], FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)).umask16(0x00ff);
map(0x150000, 0x15000f).mirror(0x00fff0).rw(m_iochip[1], FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)).umask16(0x00ff);
map(0x160000, 0x16ffff).w(FUNC(segaxbd_state::iocontrol_w));
@@ -953,7 +945,7 @@ void segaxbd_state::main_map(address_map &map)
map(0x2e8000, 0x2e800f).mirror(0x003ff0).rw("cmptimer_subx", FUNC(sega_315_5250_compare_timer_device::read), FUNC(sega_315_5250_compare_timer_device::write));
map(0x2ec000, 0x2ecfff).mirror(0x001000).ram().share("segaic16road:roadram");
map(0x2ee000, 0x2effff).rw("segaic16road", FUNC(segaic16_road_device::segaic16_road_control_0_r), FUNC(segaic16_road_device::segaic16_road_control_0_w));
-// AM_RANGE(0x2f0000, 0x2f3fff) AM_READWRITE(excs_r, excs_w)
+// map(0x2f0000, 0x2f3fff).rw(FUNC(segaxbd_state::excs_r), FUNC(segaxbd_state::excs_w));
map(0x3f8000, 0x3fbfff).ram().share("backup1");
map(0x3fc000, 0x3fffff).ram().share("backup2");
}
@@ -1103,7 +1095,7 @@ void segaxbd_rascot_state::comm_map(address_map &map)
static INPUT_PORTS_START( xboard_generic )
PORT_START("mainpcb:IO0PORTA")
PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNKNOWN ) // D5-D0: CN C pin 24-19 (switch state 0= open, 1= closed)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_CUSTOM ) // D6: /INTR of ADC0804
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("mainpcb:adc", adc0804_device, intr_r)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) // D7: (Not connected)
// I/O port: CN C pins 17,15,13,11,9,7,5,3
@@ -1540,7 +1532,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( gprider )
PORT_START("mainpcb:IO0PORTA")
PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_CUSTOM ) // /INTR of ADC0804
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("mainpcb:adc", adc0804_device, intr_r)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("mainpcb:IO0PORTB")
@@ -1597,7 +1589,7 @@ static INPUT_PORTS_START( gprider_double )
PORT_START("subpcb:IO0PORTA")
PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_CUSTOM ) // /INTR of ADC0804
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("subpcb:adc", adc0804_device, intr_r)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("subpcb:IO0PORTB")
@@ -1702,18 +1694,21 @@ void segaxbd_state::xboard_base_mconfig(machine_config &config)
SEGA_315_5250_COMPARE_TIMER(config, "cmptimer_subx", 0);
- CXD1095(config, m_iochip[0], 0); // IC160
+ CXD1095(config, m_iochip[0]); // IC160
m_iochip[0]->in_porta_cb().set_ioport("IO0PORTA");
m_iochip[0]->in_portb_cb().set_ioport("IO0PORTB");
m_iochip[0]->out_portc_cb().set(FUNC(segaxbd_state::pc_0_w));
m_iochip[0]->out_portd_cb().set(FUNC(segaxbd_state::pd_0_w));
- CXD1095(config, m_iochip[1], 0); // IC159
+ CXD1095(config, m_iochip[1]); // IC159
m_iochip[1]->in_porta_cb().set_ioport("IO1PORTA");
m_iochip[1]->in_portb_cb().set_ioport("IO1PORTB");
m_iochip[1]->in_portc_cb().set_ioport("IO1PORTC");
m_iochip[1]->in_portd_cb().set_ioport("IO1PORTD");
+ adc0804_device &adc(ADC0804(config, "adc", MASTER_CLOCK/4/10)); // uses E clock from main CPU
+ adc.vin_callback().set(FUNC(segaxbd_state::analog_r));
+
// video hardware
GFXDECODE(config, "gfxdecode", m_palette, gfx_segaxbd);
PALETTE(config, m_palette).set_entries(8192*2);
diff --git a/src/mame/drivers/segaybd.cpp b/src/mame/drivers/segaybd.cpp
index fe8fb32b391..f97425e6f00 100644
--- a/src/mame/drivers/segaybd.cpp
+++ b/src/mame/drivers/segaybd.cpp
@@ -591,7 +591,7 @@ void segaybd_state::main_map(address_map &map)
map(0x080000, 0x080007).mirror(0x001ff8).rw("multiplier_main", FUNC(sega_315_5248_multiplier_device::read), FUNC(sega_315_5248_multiplier_device::write));
map(0x082001, 0x082001).mirror(0x001ffe).w("soundlatch", FUNC(generic_latch_8_device::write));
map(0x084000, 0x08401f).mirror(0x001fe0).rw("divider_main", FUNC(sega_315_5249_divider_device::read), FUNC(sega_315_5249_divider_device::write));
-// AM_RANGE(0x086000, 0x087fff) /DEA0
+// map(0x086000, 0x087fff) /DEA0
map(0x0c0000, 0x0cffff).ram().share("shareram");
map(0x100000, 0x10001f).rw("io", FUNC(sega_315_5296_device::read), FUNC(sega_315_5296_device::write)).umask16(0x00ff);
map(0x100040, 0x100047).rw("adc", FUNC(msm6253_device::d7_r), FUNC(msm6253_device::address_w)).umask16(0x00ff);
diff --git a/src/mame/drivers/seibuspi.cpp b/src/mame/drivers/seibuspi.cpp
index 1e3e0d4bd74..88d1783a375 100644
--- a/src/mame/drivers/seibuspi.cpp
+++ b/src/mame/drivers/seibuspi.cpp
@@ -1013,7 +1013,7 @@ void seibuspi_state::base_map(address_map &map)
void seibuspi_state::sei252_map(address_map &map)
{
- //AM_RANGE(0x00000500, 0x0000057f) AM_DEVREADWRITE16("obj", sei252_device, read_xor, write_xor, 0xffffffff)
+ //map(0x00000500, 0x0000057f).rw("obj", FUNC(sei252_device::read_xor), FUNC(sei252_device::write_xor));
map(0x0000050e, 0x0000050f).w(FUNC(seibuspi_state::sprite_dma_start_w));
map(0x00000524, 0x00000527).nopw(); // SEI252 sprite decryption key, see machine/spisprit.c
map(0x00000528, 0x0000052b).nopw(); // SEI252 sprite decryption unknown
@@ -1024,7 +1024,7 @@ void seibuspi_state::sei252_map(address_map &map)
void seibuspi_state::rise_map(address_map &map)
{
- //AM_RANGE(0x00000500, 0x0000057f) AM_DEVREADWRITE16("obj", seibu_encrypted_sprite_device, read, write, 0xffffffff)
+ //map(0x00000500, 0x0000057f).rw("obj", FUNC(seibu_encrypted_sprite_device::read), FUNC(seibu_encrypted_sprite_device::write));
map(0x0000054c, 0x0000054f).nopw(); // RISE10/11 sprite decryption key, see machine/seibuspi.c
map(0x00000562, 0x00000563).w(FUNC(seibuspi_state::sprite_dma_start_w));
}
diff --git a/src/mame/drivers/seicupbl.cpp b/src/mame/drivers/seicupbl.cpp
index f78135f7d0a..40ac0fcbc89 100644
--- a/src/mame/drivers/seicupbl.cpp
+++ b/src/mame/drivers/seicupbl.cpp
@@ -348,7 +348,7 @@ WRITE16_MEMBER(seicupbl_state::layer_disable_w)
void seicupbl_state::cupsocbl_mem(address_map &map)
{
-// AM_IMPORT_FROM( legionna_cop_mem )
+// legionna_cop_mem(map);
map(0x000000, 0x0fffff).rom();
map(0x100400, 0x1005ff).rw("seibucop_boot", FUNC(seibu_cop_bootleg_device::read), FUNC(seibu_cop_bootleg_device::write));
map(0x10065c, 0x10065d).w(FUNC(seicupbl_state::layer_disable_w));
diff --git a/src/mame/drivers/selz80.cpp b/src/mame/drivers/selz80.cpp
index 9956c917ac0..bb4489dc39d 100644
--- a/src/mame/drivers/selz80.cpp
+++ b/src/mame/drivers/selz80.cpp
@@ -86,7 +86,7 @@ void selz80_state::selz80_mem(address_map &map)
map.unmap_value_high();
map(0x0000, 0x0fff).rom();
map(0x1000, 0x27ff).ram(); // all 3 RAM sockets filled
- // AM_RANGE(0x3000, 0x37ff) AM_ROM // empty socket for ROM
+ // map(0x3000, 0x37ff).rom(); // empty socket for ROM
map(0xa000, 0xffff).rom();
}
diff --git a/src/mame/drivers/sengokmj.cpp b/src/mame/drivers/sengokmj.cpp
index 4990225bdb9..c154d2bd1dd 100644
--- a/src/mame/drivers/sengokmj.cpp
+++ b/src/mame/drivers/sengokmj.cpp
@@ -415,9 +415,9 @@ void sengokmj_state::sengokmj_io_map(address_map &map)
/*Areas from 8000-804f are for the custom Seibu CRTC.*/
map(0x8000, 0x804f).rw("crtc", FUNC(seibu_crtc_device::read), FUNC(seibu_crtc_device::write));
-// AM_RANGE(0x8080, 0x8081) CRTC extra register?
-// AM_RANGE(0x80c0, 0x80c1) CRTC extra register?
-// AM_RANGE(0x8100, 0x8101) AM_WRITENOP // always 0
+// map(0x8080, 0x8081) CRTC extra register?
+// map(0x80c0, 0x80c1) CRTC extra register?
+// map(0x8100, 0x8101).nopw(); // always 0
map(0x8180, 0x8181).w(FUNC(sengokmj_state::out_w));
map(0x8140, 0x8141).w(FUNC(sengokmj_state::mahjong_panel_w));
map(0xc000, 0xc001).portr("DSW");
diff --git a/src/mame/drivers/senjyo.cpp b/src/mame/drivers/senjyo.cpp
index ee43840157f..45283224ee8 100644
--- a/src/mame/drivers/senjyo.cpp
+++ b/src/mame/drivers/senjyo.cpp
@@ -131,22 +131,22 @@ void senjyo_state::senjyo_map(address_map &map)
map(0x9c00, 0x9dff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette");
map(0x9e00, 0x9e1f).ram().share("fgscroll");
map(0x9e20, 0x9e21).ram().share("scrolly3");
-/* AM_RANGE(0x9e22, 0x9e23) height of the layer (Senjyo only, fixed at 0x380) */
+/* map(0x9e22, 0x9e23) height of the layer (Senjyo only, fixed at 0x380) */
map(0x9e22, 0x9e24).ram();
map(0x9e25, 0x9e25).ram().share("scrollx3");
map(0x9e26, 0x9e26).ram();
map(0x9e27, 0x9e27).ram().share("bgstripesram"); /* controls width of background stripes */
map(0x9e28, 0x9e29).ram().share("scrolly2");
-/* AM_RANGE(0x9e2a, 0x9e2b) height of the layer (Senjyo only, fixed at 0x200) */
+/* map(0x9e2a, 0x9e2b) height of the layer (Senjyo only, fixed at 0x200) */
map(0x9e2a, 0x9e2c).ram();
map(0x9e2d, 0x9e2d).ram().share("scrollx2");
map(0x9e2e, 0x9e2f).ram();
map(0x9e30, 0x9e31).ram().share("scrolly1");
-/* AM_RANGE(0x9e32, 0x9e33) height of the layer (Senjyo only, fixed at 0x100) */
+/* map(0x9e32, 0x9e33) height of the layer (Senjyo only, fixed at 0x100) */
map(0x9e32, 0x9e34).ram();
map(0x9e35, 0x9e35).ram().share("scrollx1");
-/* AM_RANGE(0x9e38, 0x9e38) probably radar y position (Senjyo only, fixed at 0x61) */
-/* AM_RANGE(0x9e3d, 0x9e3d) probably radar x position (Senjyo only, 0x00/0xc0 depending on screen flip) */
+/* map(0x9e38, 0x9e38) probably radar y position (Senjyo only, fixed at 0x61) */
+/* map(0x9e3d, 0x9e3d) probably radar x position (Senjyo only, 0x00/0xc0 depending on screen flip) */
map(0x9e36, 0x9e3f).ram();
map(0xa000, 0xa7ff).ram().w(FUNC(senjyo_state::bg3videoram_w)).share("bg3videoram");
map(0xa800, 0xafff).ram().w(FUNC(senjyo_state::bg2videoram_w)).share("bg2videoram");
diff --git a/src/mame/drivers/seta.cpp b/src/mame/drivers/seta.cpp
index a2292c8729f..faedfab7c91 100644
--- a/src/mame/drivers/seta.cpp
+++ b/src/mame/drivers/seta.cpp
@@ -117,7 +117,7 @@ TODO:
- Some games: battery backed portion of RAM (e.g. downtown, kiwame, zombraid)
- the zombraid crosshair hack can go if the nvram regions are figured out.
- Some games: programmable timer that generates IRQ. See e.g. gundhara:
- lev 4 is triggerd by writes at d00000-6 and drives the sound.
+ lev 4 is triggered by writes at d00000-6 and drives the sound.
See also msgundam.
- tndrcade: lots of flickering sprites
@@ -488,7 +488,7 @@ Lithium battery x1
Daioh
DAIOH
-Alumer 1993, Sammy license
+Allumer 1993, Sammy license
P0-092A
@@ -670,9 +670,9 @@ CONN1 = 8 pin header for gun connection
68HC000N -16N
-2) Alumer X1-012
-2) Alumer X1-011
-2) Alumer X1-014
+2) Allumer X1-012
+2) Allumer X1-011
+2) Allumer X1-014
X1-010
X1-007
@@ -819,7 +819,7 @@ RST1 : Reset
CN1 : 7-Pin header to drive lights underneath buttons to show what cards are available to play
CN2 : 8-Pin header to drive lights underneath buttons to show what cards are available to play
-CN3 : 5-Pin header connected to aucilliary PCB to drive lights about the cabinet
+CN3 : 5-Pin header connected to auxiliary PCB to drive lights about the cabinet
PAL :FU-011 @ U50
FU-012 @ U51
@@ -3987,10 +3987,10 @@ static INPUT_PORTS_START( blandia )
PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1,2")
- PORT_DIPSETTING( 0x0200, "1" )
- PORT_DIPSETTING( 0x0300, "2" )
- PORT_DIPSETTING( 0x0100, "3" )
- PORT_DIPSETTING( 0x0000, "4" )
+ PORT_DIPSETTING( 0x0200, "1, 1 Round" ) // Test mode shows 1 in both blandia and blandiap
+ PORT_DIPSETTING( 0x0300, "1, 2 Rounds" ) // Test mode shows 0 in blandia, 2 in blandiap (neither match actual behaviour)
+ PORT_DIPSETTING( 0x0100, "2" ) // Test mode shows 2 in blandia, 3 in blandiap (blandiap test mode is wrong)
+ PORT_DIPSETTING( 0x0000, "3" ) // Test mode shows 3 in blandia, 4 in blandiap (blandiap test mode is wrong)
PORT_DIPNAME( 0x0c00, 0x0c00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:3,4")
PORT_DIPSETTING( 0x0800, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x0c00, DEF_STR( Normal ) )
@@ -4966,10 +4966,10 @@ INPUT_PORTS_END
static INPUT_PORTS_START( jjsquawk )
PORT_START("P1") //Player 1 - $400000.w
- JOY_TYPE1_2BUTTONS(1)
+ JOY_TYPE1_3BUTTONS(1)
PORT_START("P2") //Player 2 - $400002.w
- JOY_TYPE1_2BUTTONS(2)
+ JOY_TYPE1_3BUTTONS(2)
PORT_START("COINS") //Coins - $400004.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5)
diff --git a/src/mame/drivers/seta2.cpp b/src/mame/drivers/seta2.cpp
index 7812f3ce599..b37d9d97810 100644
--- a/src/mame/drivers/seta2.cpp
+++ b/src/mame/drivers/seta2.cpp
@@ -599,8 +599,8 @@ void staraudi_state::staraudi_map(address_map &map)
map(0x400000, 0x45ffff).rw(FUNC(staraudi_state::tileram_r), FUNC(staraudi_state::tileram_w)).share("tileram"); // Tile RAM
-// AM_RANGE(0x500000, 0x53ffff) AM_RAM // Camera RAM (r8g8)
-// AM_RANGE(0x540000, 0x57ffff) AM_RAM // Camera RAM (00b8)
+// map(0x500000, 0x53ffff).ram(); // Camera RAM (r8g8)
+// map(0x540000, 0x57ffff).ram(); // Camera RAM (00b8)
map(0x500000, 0x57ffff).ram().share("rgbram");
map(0x600001, 0x600001).w(FUNC(staraudi_state::camera_w)); // Camera Outputs
@@ -680,7 +680,7 @@ void seta2_state::telpacfl_map(address_map &map)
map(0xb40000, 0xb4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0xb60000, 0xb6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
map(0xd00006, 0xd00007).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
-// AM_RANGE(0xe00000, 0xe00001) AM_WRITE
+// map(0xe00000, 0xe00001).w(FUNC(seta2_state::));
map(0xe00010, 0xe0001f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
}
diff --git a/src/mame/drivers/sf.cpp b/src/mame/drivers/sf.cpp
index ae3f4045808..db9fd9f9721 100644
--- a/src/mame/drivers/sf.cpp
+++ b/src/mame/drivers/sf.cpp
@@ -172,7 +172,7 @@ void sf_state::sfan_map(address_map &map)
map(0xc00018, 0xc00019).w(FUNC(sf_state::bg_scroll_w));
map(0xc0001a, 0xc0001b).w(FUNC(sf_state::gfxctrl_w));
map(0xc0001d, 0xc0001d).w(FUNC(sf_state::soundcmd_w));
-// AM_RANGE(0xc0001e, 0xc0001f) AM_WRITE(protection_w)
+// map(0xc0001e, 0xc0001f).w(FUNC(sf_state::protection_w));
map(0xff8000, 0xffdfff).ram();
map(0xffe000, 0xffffff).ram().share("objectram");
}
@@ -196,7 +196,7 @@ void sf_state::sfus_map(address_map &map)
map(0xc00018, 0xc00019).w(FUNC(sf_state::bg_scroll_w));
map(0xc0001a, 0xc0001b).w(FUNC(sf_state::gfxctrl_w));
map(0xc0001d, 0xc0001d).w(FUNC(sf_state::soundcmd_w));
-// AM_RANGE(0xc0001e, 0xc0001f) AM_WRITE(protection_w)
+// map(0xc0001e, 0xc0001f).w(FUNC(sf_state::protection_w));
map(0xff8000, 0xffdfff).ram();
map(0xffe000, 0xffffff).ram().share("objectram");
}
diff --git a/src/mame/drivers/sfcbox.cpp b/src/mame/drivers/sfcbox.cpp
index 78343d6d016..82bb0cecbbb 100644
--- a/src/mame/drivers/sfcbox.cpp
+++ b/src/mame/drivers/sfcbox.cpp
@@ -294,12 +294,12 @@ void sfcbox_state::sfcbox_io(address_map &map)
map(0x0b, 0x0b).w(m_mb90082, FUNC(mb90082_device::write));
map(0x80, 0x80).portr("KEY").w(FUNC(sfcbox_state::port_80_w)); // Keyswitch and Button Inputs / SNES Transfer and Misc Output
map(0x81, 0x81).rw(FUNC(sfcbox_state::port_81_r), FUNC(sfcbox_state::port_81_w)); // SNES Transfer and Misc Input / Misc Output
-// AM_RANGE(0x82, 0x82) // Unknown/unused
+// map(0x82, 0x82) // Unknown/unused
map(0x83, 0x83).rw(FUNC(sfcbox_state::port_83_r), FUNC(sfcbox_state::port_83_w)); // Joypad Input/Status / Joypad Output/Control
-// AM_RANGE(0x84, 0x84) // Joypad 1, MSB (1st 8 bits) (eg. Bit7=ButtonB, 0=Low=Pressed)
-// AM_RANGE(0x85, 0x85) // Joypad 1, LSB (2nd 8 bits) (eg. Bit0=LSB of ID, 0=Low=One)
-// AM_RANGE(0x86, 0x86) // Joypad 2, MSB (1st 8 bits) (eg. Bit7=ButtonB, 0=Low=Pressed)
-// AM_RANGE(0x87, 0x87) // Joypad 2, LSB (2nd 8 bits) (eg. Bit0=LSB of ID, 0=Low=One)
+// map(0x84, 0x84) // Joypad 1, MSB (1st 8 bits) (eg. Bit7=ButtonB, 0=Low=Pressed)
+// map(0x85, 0x85) // Joypad 1, LSB (2nd 8 bits) (eg. Bit0=LSB of ID, 0=Low=One)
+// map(0x86, 0x86) // Joypad 2, MSB (1st 8 bits) (eg. Bit7=ButtonB, 0=Low=Pressed)
+// map(0x87, 0x87) // Joypad 2, LSB (2nd 8 bits) (eg. Bit0=LSB of ID, 0=Low=One)
map(0xa0, 0xa0).portr("RTC_R").portw("RTC_W"); // Real Time Clock
map(0xc0, 0xc0).w(FUNC(sfcbox_state::snes_map_0_w)); // SNES Mapping Register 0
map(0xc1, 0xc1).w(FUNC(sfcbox_state::snes_map_1_w)); // SNES Mapping Register 1
diff --git a/src/mame/drivers/sigmab52.cpp b/src/mame/drivers/sigmab52.cpp
index a4acab5ce1d..659662240c5 100644
--- a/src/mame/drivers/sigmab52.cpp
+++ b/src/mame/drivers/sigmab52.cpp
@@ -333,7 +333,7 @@ void sigmab52_state::jwildb52_map(address_map &map)
map(0xf760, 0xf760).r(FUNC(sigmab52_state::unk_f760_r));
-// AM_RANGE(0xf770, 0xf77f) Bill validator
+// map(0xf770, 0xf77f) Bill validator
map(0xf780, 0xf780).w(FUNC(sigmab52_state::audiocpu_cmd_irq_w));
map(0xf790, 0xf790).w("soundlatch", FUNC(generic_latch_8_device::write));
diff --git a/src/mame/drivers/sigmab98.cpp b/src/mame/drivers/sigmab98.cpp
index 3f5ba8cdb67..31ebf1b1e1b 100644
--- a/src/mame/drivers/sigmab98.cpp
+++ b/src/mame/drivers/sigmab98.cpp
@@ -837,7 +837,7 @@ void sigmab98_state::dodghero_io_map(address_map &map)
map(0x00, 0x01).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write));
map(0xa0, 0xa1).rw(FUNC(sigmab98_state::dodghero_regs_r), FUNC(sigmab98_state::dodghero_regs_w));
-// AM_RANGE( 0xa2, 0xa3 )
+// map(0xa2, 0xa3)
map(0xa4, 0xa5).rw(FUNC(sigmab98_state::dodghero_regs2_r), FUNC(sigmab98_state::dodghero_regs2_w));
map(0xc0, 0xc0).portr("EEPROM").w(FUNC(sigmab98_state::eeprom_w));
@@ -1035,7 +1035,7 @@ void sigmab98_state::gegege_io_map(address_map &map)
map(0x00, 0x01).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write));
map(0xa0, 0xa1).rw(FUNC(sigmab98_state::gegege_regs_r), FUNC(sigmab98_state::gegege_regs_w));
-// AM_RANGE( 0xa2, 0xa3 )
+// map(0xa2, 0xa3)
map(0xa4, 0xa5).rw(FUNC(sigmab98_state::gegege_regs2_r), FUNC(sigmab98_state::gegege_regs2_w));
map(0xc0, 0xc0).portr("EEPROM").w(FUNC(sigmab98_state::eeprom_w));
@@ -1114,7 +1114,7 @@ void sigmab98_state::dashhero_io_map(address_map &map)
map(0x00, 0x01).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write));
map(0xa0, 0xa1).rw(FUNC(sigmab98_state::gegege_regs_r), FUNC(sigmab98_state::gegege_regs_w));
- // AM_RANGE( 0xa2, 0xa3 )
+// map(0xa2, 0xa3)
map(0xa4, 0xa5).rw(FUNC(sigmab98_state::dashhero_regs2_r), FUNC(sigmab98_state::dashhero_regs2_w));
map(0xc0, 0xc0).portr("EEPROM").w(FUNC(sigmab98_state::eeprom_w));
diff --git a/src/mame/drivers/skimaxx.cpp b/src/mame/drivers/skimaxx.cpp
index 7ffb8ed5561..df5d09cd941 100644
--- a/src/mame/drivers/skimaxx.cpp
+++ b/src/mame/drivers/skimaxx.cpp
@@ -335,7 +335,7 @@ void skimaxx_state::m68030_1_map(address_map &map)
map(0x00000000, 0x001fffff).rom();
map(0x10000000, 0x10000003).w(FUNC(skimaxx_state::sub_ctrl_w));
map(0x10100000, 0x1010000f).rw(m_tms, FUNC(tms34010_device::host_r), FUNC(tms34010_device::host_w)).umask32(0x0000ffff);
-// AM_RANGE(0x10180000, 0x10187fff) AM_RAM AM_SHARE("share1")
+// map(0x10180000, 0x10187fff).ram().share("share1");
map(0x10180000, 0x1018ffff).ram().share("share1"); // above 10188000 accessed at level end (game bug?)
map(0x20000000, 0x20000003).nopr(); // watchdog_r?
@@ -374,9 +374,9 @@ void skimaxx_state::m68030_2_map(address_map &map)
map(0x40000000, 0x40000003).w(FUNC(skimaxx_state::fpga_ctrl_w)).share("fpga_ctrl");
map(0x50000000, 0x5007ffff).bankrw("bgrambank"); // background ram allocated here at video_start (skimaxx_bg_buffer_back/front)
-// AM_RANGE(0xfffc0000, 0xfffc7fff) AM_RAM AM_SHARE("share1")
+// map(0xfffc0000, 0xfffc7fff).ram().share("share1");
map(0xfffc0000, 0xfffcffff).ram().share("share1");
-// AM_RANGE(0xfffe0000, 0xffffffff) AM_RAM // I think this is banked with the shared RAM? (see CPU sync routines)
+// map(0xfffe0000, 0xffffffff).ram(); // I think this is banked with the shared RAM? (see CPU sync routines)
map(0xfffe0000, 0xfffeffff).ram().share("share1"); // HACK
// map(0xfffe0010, 0xfffeffff).ram(); // HACK
map(0xffff0000, 0xffffffff).ram();
diff --git a/src/mame/drivers/skyfox.cpp b/src/mame/drivers/skyfox.cpp
index 93d8938768b..84c67c0171f 100644
--- a/src/mame/drivers/skyfox.cpp
+++ b/src/mame/drivers/skyfox.cpp
@@ -74,9 +74,9 @@ void skyfox_state::skyfox_sound_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0x87ff).ram();
-// AM_RANGE(0x9000, 0x9001) AM_WRITENOP // ??
+// map(0x9000, 0x9001).nopw(); // ??
map(0xa000, 0xa001).rw("ym1", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
-// AM_RANGE(0xb000, 0xb001) AM_WRITENOP // ??
+// map(0xb000, 0xb001).nopw(); // ??
map(0xc000, 0xc001).rw("ym2", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
map(0xb000, 0xb000).r(m_soundlatch, FUNC(generic_latch_8_device::read));
}
diff --git a/src/mame/drivers/sm1800.cpp b/src/mame/drivers/sm1800.cpp
index 5567f5bbbae..221b0636fdd 100644
--- a/src/mame/drivers/sm1800.cpp
+++ b/src/mame/drivers/sm1800.cpp
@@ -62,7 +62,7 @@ void sm1800_state::sm1800_mem(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x07ff).rom();
- //AM_RANGE( 0x0fb0, 0x0fff ) AM_DEVWRITE("i8275", i8275_device, dack_w)
+ //map(0x0fb0, 0x0fff).w("i8275", FUNC(i8275_device::dack_w));
map(0x1000, 0x17ff).ram(); // videoram looks like 1080-17FF, normal ascii
}
@@ -73,8 +73,8 @@ void sm1800_state::sm1800_io(address_map &map)
map(0x3c, 0x3d).rw(m_crtc, FUNC(i8275_device::read), FUNC(i8275_device::write));
map(0x5c, 0x5d).rw(m_uart, FUNC(i8251_device::read), FUNC(i8251_device::write));
map(0x6c, 0x6f).rw(m_ppi, FUNC(i8255_device::read), FUNC(i8255_device::write));
- //AM_RANGE( 0x74, 0x74 ) AM_DEVREADWRITE("i8279", i8279_device, status_r, cmd_w)
- //AM_RANGE( 0x75, 0x75 ) AM_DEVREADWRITE("i8279", i8279_device, data_r, data_w)
+ //map(0x74, 0x74).rw("i8279", FUNC(i8279_device::status_r), FUNC(i8279_device::cmd_w));
+ //map(0x75, 0x75).rw("i8279", FUNC(i8279_device::data_r), FUNC(i8279_device::data_w));
}
/* Input ports */
diff --git a/src/mame/drivers/sms_bootleg.cpp b/src/mame/drivers/sms_bootleg.cpp
index d709f537709..86ece08634c 100644
--- a/src/mame/drivers/sms_bootleg.cpp
+++ b/src/mame/drivers/sms_bootleg.cpp
@@ -240,7 +240,7 @@ void smsbootleg_state::sms_supergame_map(address_map &map)
{
map(0x0000, 0xbfff).rom();
map(0xc000, 0xfff7).ram();
-// AM_RANGE(0xfffc, 0xffff) AM_READWRITE(sms_mapper_r, sms_mapper_w) /* Bankswitch control */
+// map(0xfffc, 0xffff).rw(FUNC(smsbootleg_state::sms_mapper_r), FUNC(smsbootleg_state::sms_mapper_w)); /* Bankswitch control */
}
WRITE8_MEMBER(smsbootleg_state::port08_w)
@@ -259,9 +259,9 @@ void smsbootleg_state::sms_supergame_io(address_map &map)
map.global_mask(0xff);
map.unmap_value_high();
- map(0x04, 0x04).nopr(); //AM_READ_PORT("IN0") // these
+ map(0x04, 0x04).nopr(); //portr("IN0"); // these
map(0x08, 0x08).w(FUNC(smsbootleg_state::port08_w));
- map(0x14, 0x14).nopr(); //AM_READ_PORT("IN1") // seem to be from a coinage / timer MCU, changing them directly changes the credits / time value
+ map(0x14, 0x14).nopr(); //portr("IN1"); // seem to be from a coinage / timer MCU, changing them directly changes the credits / time value
map(0x18, 0x18).w(FUNC(smsbootleg_state::port18_w));
map(0x40, 0x7f).r(FUNC(smsbootleg_state::sms_count_r)).w(m_vdp, FUNC(sega315_5124_device::psg_w));
diff --git a/src/mame/drivers/snes.cpp b/src/mame/drivers/snes.cpp
index c8a022b20bc..4017cab0b6c 100644
--- a/src/mame/drivers/snes.cpp
+++ b/src/mame/drivers/snes.cpp
@@ -1017,9 +1017,9 @@ WRITE8_MEMBER( snes_console_state::pfest94_lo_w )
void snes_console_state::snes_map(address_map &map)
{
-// AM_RANGE(0x000000, 0x7dffff) AM_READWRITE(snes20_lo_r, snes20_lo_w)
+// map(0x000000, 0x7dffff).rw(FUNC(snes_console_state::snes20_lo_r), FUNC(snes_console_state::snes20_lo_w));
map(0x7e0000, 0x7fffff).ram(); /* 8KB Low RAM, 24KB High RAM, 96KB Expanded RAM */
-// AM_RANGE(0x800000, 0xffffff) AM_READWRITE(snes20_hi_r, snes20_hi_w)
+// map(0x800000, 0xffffff).rw(FUNC(snes_console_state::snes20_hi_r), FUNC(snes_console_state::snes20_hi_w));
}
void snes_console_state::spc_map(address_map &map)
diff --git a/src/mame/drivers/snk.cpp b/src/mame/drivers/snk.cpp
index 8d4eae7df09..d9a3f6970df 100644
--- a/src/mame/drivers/snk.cpp
+++ b/src/mame/drivers/snk.cpp
@@ -1413,7 +1413,7 @@ void snk_state::hal21_sound_map(address_map &map)
map(0xa000, 0xa000).r(FUNC(snk_state::sgladiat_soundlatch_r));
map(0xc000, 0xc000).r(FUNC(snk_state::sgladiat_sound_nmi_ack_r));
map(0xe000, 0xe001).w("ay1", FUNC(ay8910_device::address_data_w));
-// AM_RANGE(0xe002, 0xe002) AM_WRITENOP // bitfielded(0-5) details unknown. Filter enable?
+// map(0xe002, 0xe002).nopw(); // bitfielded(0-5) details unknown. Filter enable?
map(0xe008, 0xe009).w("ay2", FUNC(ay8910_device::address_data_w));
}
@@ -1442,7 +1442,7 @@ void snk_state::aso_YM3526_sound_map(address_map &map)
map(0xd000, 0xd000).r(m_soundlatch, FUNC(generic_latch_8_device::read));
map(0xe000, 0xe000).r(FUNC(snk_state::tnk3_busy_clear_r));
map(0xf000, 0xf001).rw("ym1", FUNC(ym3526_device::read), FUNC(ym3526_device::write));
-// AM_RANGE(0xf002, 0xf002) AM_READNOP unknown
+// map(0xf002, 0xf002).nopr(); unknown
map(0xf004, 0xf004).r(FUNC(snk_state::tnk3_cmdirq_ack_r));
map(0xf006, 0xf006).r(FUNC(snk_state::tnk3_ymirq_ack_r));
}
diff --git a/src/mame/drivers/snowbros.cpp b/src/mame/drivers/snowbros.cpp
index 107e1ad767d..b15e85c5820 100644
--- a/src/mame/drivers/snowbros.cpp
+++ b/src/mame/drivers/snowbros.cpp
@@ -353,7 +353,7 @@ void snowbros_state::hyperpac_map(address_map &map)
map(0x000000, 0x0fffff).rom();
map(0x100000, 0x10ffff).ram().share("hyperpac_ram");
map(0x300001, 0x300001).w(m_soundlatch, FUNC(generic_latch_8_device::write));
-// AM_RANGE(0x400000, 0x400001) ???
+// map(0x400000, 0x400001) ???
map(0x500000, 0x500001).portr("DSW1");
map(0x500002, 0x500003).portr("DSW2");
map(0x500004, 0x500005).portr("SYSTEM");
@@ -506,7 +506,7 @@ void snowbros_state::finalttr_map(address_map &map)
map(0x000000, 0x0fffff).rom();
map(0x100000, 0x103fff).ram().share("hyperpac_ram");
map(0x300001, 0x300001).w(m_soundlatch, FUNC(generic_latch_8_device::write));
-// AM_RANGE(0x400000, 0x400001) ???
+// map(0x400000, 0x400001) ???
map(0x500000, 0x500001).portr("DSW1");
map(0x500002, 0x500003).portr("DSW2");
@@ -558,9 +558,9 @@ void snowbros_state::yutnori_map(address_map &map)
// could be one of the OKIs? but gets value to write from RAM, always seems to be 0?
map(0x30000c, 0x30000d).nopw();
- map(0x30000e, 0x30000f).nopr(); //AM_READ( yutnori_unk_r ) // ??
+ map(0x30000e, 0x30000f).nopr(); //.r(FUNC(snowbros_state::yutnori_unk_r)); // ??
-// AM_RANGE(0x400000, 0x400001) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w) // maybe?
+// map(0x400000, 0x400001).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); // maybe?
map(0x400000, 0x400001).noprw();
map(0x500000, 0x5001ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
@@ -1952,6 +1952,7 @@ void snowbros_state::finalttr(machine_config &config)
ymsnd.add_route(1, "mono", 0.08);
m_oki->set_clock(999900);
+ m_oki->reset_routes().add_route(ALL_OUTPUTS, "mono", 0.4);
}
diff --git a/src/mame/drivers/socrates.cpp b/src/mame/drivers/socrates.cpp
index 3ea5d4d7c64..cdc5d4af696 100644
--- a/src/mame/drivers/socrates.cpp
+++ b/src/mame/drivers/socrates.cpp
@@ -1570,9 +1570,9 @@ void iqunlimz_state::iqunlimz(machine_config &config)
ROM_START(socrates)
ROM_REGION(0x400000, "maincpu", ROMREGION_ERASEVAL(0xF3)) /* can technically address 4mb of rom via bankswitching; open bus area reads as 0xF3 on fluke */
- /* Socrates US NTSC */
- /* all cart roms are 28 pin 23c1000/tc531000 128Kx8 roms */
- /* cart port pinout:
+ /* Socrates English (same ROM for NTSC and PAL) */
+ /* All cart ROMs are 28 pin 23c1000/tc531000 128Kx8 ROMs */
+ /* Cart port pinout:
(looking into end of disk-shaped cartridge with label/top side pointing to the right)
A15 -> 19 18 -- VCC
A14 -> 20 17 <- A16
@@ -1595,9 +1595,9 @@ ROM_START(socrates)
Note that a17 goes to what would be pin 2 on a rom chip if a 32 pin rom were installed, which is not the case. (pins 1, 31 and 32 would be tied to vcc)
It is likely that at least one of the 6 unknown lines is R/W from the z80, and another may be phi1/m1/clock etc to allow for ram to live in cart space
- Cartridge check procedure by socrates is, after screen init and check for speech synth,
+ Cartridge check procedure by Socrates is, after screen init and check for speech synth,
bankswitch to bank 0x10 (i.e. first 0x4000 of cart appears at 4000-7fff in z80 space),
- do following tests; if any tests fail, jump to 0x0015 (socrates main menu)
+ do following tests; if any tests fail, jump to 0x0015 (Socrates main menu)
* read 0x7ff0(0x3ff0 in cart rom) and compare to 0xAA
* read 0x7ff1(0x3ff1 in cart rom) and compare to 0x55
* read 0x7ff2(0x3ff2 in cart rom) and compare to 0xE7
@@ -1692,7 +1692,7 @@ ROM_END
******************************************************************************/
// YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS
-COMP( 1988, socrates, 0, 0, socrates, socrates, socrates_state, init_socrates, "Video Technology", "Socrates Educational Video System", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // English NTSC, no title copyright
+COMP( 1988, socrates, 0, 0, socrates, socrates, socrates_state, init_socrates, "Video Technology", "Socrates Educational Video System", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // English, no title copyright, same ROM for NTSC and PAL
COMP( 1988, socratfc, socrates, 0, socrates, socrates, socrates_state, init_socrates, "Video Technology", "Socrates SAITOUT", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // French Canandian NTSC, 1988 title copyright
// Yeno Professeur Saitout (French SECAM) matches the Socrates SAITOUT dump (same ROM 27-00884-001-000)
COMP( 1988, profweis, socrates, 0, socrates_pal, socrates, socrates_state, init_socrates, "Video Technology / Yeno", "Professor Weiss-Alles", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // German PAL, 1988 title copyright
@@ -1700,5 +1700,5 @@ COMP( 1988, profweis, socrates, 0, socrates_pal, socrates, socrates_state,
COMP( 1991, iqunlimz, 0, 0, iqunlimz, iqunlimz, iqunlimz_state, init_iqunlimz, "Video Technology", "IQ Unlimited (Z80)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
-COMP( 1991, vpainter, 0, 0, socrates_pal, socrates, socrates_state, init_vpainter, "Video Technology", "Video Painter (PAL)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+COMP( 1991, vpainter, 0, 0, socrates_pal, socrates, socrates_state, init_vpainter, "Video Technology", "Video Painter (PAL)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// Master Video Painter goes here
diff --git a/src/mame/drivers/sorcerer.cpp b/src/mame/drivers/sorcerer.cpp
index eced9482142..8ddf45be93d 100644
--- a/src/mame/drivers/sorcerer.cpp
+++ b/src/mame/drivers/sorcerer.cpp
@@ -493,13 +493,13 @@ void sorcerer_state::sorcerer(machine_config &config)
CASSETTE(config, m_cassette1);
m_cassette1->set_formats(sorcerer_cassette_formats);
- m_cassette1->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED);
+ m_cassette1->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED);
m_cassette1->add_route(ALL_OUTPUTS, "mono", 0.05); // cass1 speaker
m_cassette1->set_interface("sorcerer_cass");
CASSETTE(config, m_cassette2);
m_cassette2->set_formats(sorcerer_cassette_formats);
- m_cassette2->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED);
+ m_cassette2->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED);
m_cassette2->add_route(ALL_OUTPUTS, "mono", 0.05); // cass2 speaker
m_cassette2->set_interface("sorcerer_cass");
diff --git a/src/mame/drivers/spdodgeb.cpp b/src/mame/drivers/spdodgeb.cpp
index 75296735a6b..83d74a842c7 100644
--- a/src/mame/drivers/spdodgeb.cpp
+++ b/src/mame/drivers/spdodgeb.cpp
@@ -241,12 +241,12 @@ void spdodgeb_state::spdodgeb_map(address_map &map)
map(0x0000, 0x0fff).ram();
map(0x1000, 0x10ff).writeonly().share("spriteram");
map(0x2000, 0x2fff).ram().w(FUNC(spdodgeb_state::videoram_w)).share("videoram");
- map(0x3000, 0x3000).portr("IN0"); //AM_WRITENOP
- map(0x3001, 0x3001).portr("DSW"); //AM_WRITENOP
+ map(0x3000, 0x3000).portr("IN0"); //.nopw();
+ map(0x3001, 0x3001).portr("DSW"); //.nopw();
map(0x3002, 0x3002).w(m_soundlatch, FUNC(generic_latch_8_device::write));
-// AM_RANGE(0x3003, 0x3003) AM_WRITENOP
+// map(0x3003, 0x3003).nopw();
map(0x3004, 0x3004).w(FUNC(spdodgeb_state::scrollx_lo_w));
-// AM_RANGE(0x3005, 0x3005) AM_WRITENOP /* mcu63701_output_w */
+// map(0x3005, 0x3005).nopw(); /* mcu63701_output_w */
map(0x3006, 0x3006).w(FUNC(spdodgeb_state::ctrl_w)); /* scroll hi, flip screen, bank switch, palette select */
map(0x3800, 0x3800).w(FUNC(spdodgeb_state::mcu63701_w));
map(0x3801, 0x3805).r(FUNC(spdodgeb_state::mcu63701_r));
diff --git a/src/mame/drivers/speglsht.cpp b/src/mame/drivers/speglsht.cpp
index 3d4a28d9c44..468036d75a6 100644
--- a/src/mame/drivers/speglsht.cpp
+++ b/src/mame/drivers/speglsht.cpp
@@ -166,13 +166,13 @@ void speglsht_state::st0016_mem(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0xbfff).bankr("st0016_bank");
- //AM_RANGE(0xc000, 0xcfff) AM_READ(st0016_sprite_ram_r) AM_WRITE(st0016_sprite_ram_w)
- //AM_RANGE(0xd000, 0xdfff) AM_READ(st0016_sprite2_ram_r) AM_WRITE(st0016_sprite2_ram_w)
+ //map(0xc000, 0xcfff).rw(FUNC(speglsht_state::st0016_sprite_ram_r), FUNC(speglsht_state::st0016_sprite_ram_w));
+ //map(0xd000, 0xdfff).rw(FUNC(speglsht_state::st0016_sprite2_ram_r), FUNC(speglsht_state::st0016_sprite2_ram_w));
map(0xe000, 0xe7ff).ram();
map(0xe800, 0xe87f).ram();
- //AM_RANGE(0xe900, 0xe9ff) // sound - internal
- //AM_RANGE(0xea00, 0xebff) AM_READ(st0016_palette_ram_r) AM_WRITE(st0016_palette_ram_w)
- //AM_RANGE(0xec00, 0xec1f) AM_READ(st0016_character_ram_r) AM_WRITE(st0016_character_ram_w)
+ //map(0xe900, 0xe9ff) // sound - internal
+ //map(0xea00, 0xebff).rw(FUNC(speglsht_state::st0016_palette_ram_r), FUNC(speglsht_state::st0016_palette_ram_w));
+ //map(0xec00, 0xec1f).rw(FUNC(speglsht_state::st0016_character_ram_r), FUNC(speglsht_state::st0016_character_ram_w));
map(0xf000, 0xffff).ram().share("shared");
}
@@ -191,14 +191,14 @@ WRITE8_MEMBER(speglsht_state::st0016_rom_bank_w)
void speglsht_state::st0016_io(address_map &map)
{
map.global_mask(0xff);
- //AM_RANGE(0x00, 0xbf) AM_READ(st0016_vregs_r) AM_WRITE(st0016_vregs_w)
+ //map(0x00, 0xbf).rw(FUNC(speglsht_state::st0016_vregs_r), FUNC(speglsht_state::st0016_vregs_w));
map(0xe1, 0xe1).w(FUNC(speglsht_state::st0016_rom_bank_w));
- //AM_RANGE(0xe2, 0xe2) AM_WRITE(st0016_sprite_bank_w)
- //AM_RANGE(0xe3, 0xe4) AM_WRITE(st0016_character_bank_w)
- //AM_RANGE(0xe5, 0xe5) AM_WRITE(st0016_palette_bank_w)
+ //map(0xe2, 0xe2).w(FUNC(speglsht_state::st0016_sprite_bank_w));
+ //map(0xe3, 0xe4).w(FUNC(speglsht_state::st0016_character_bank_w));
+ //map(0xe5, 0xe5).w(FUNC(speglsht_state::st0016_palette_bank_w));
map(0xe6, 0xe6).nopw();
map(0xe7, 0xe7).nopw();
- //AM_RANGE(0xf0, 0xf0) AM_READ(st0016_dma_r)
+ //map(0xf0, 0xf0).r(FUNC(speglsht_state::st0016_dma_r));
}
READ32_MEMBER(speglsht_state::shared_r)
diff --git a/src/mame/drivers/spirit76.cpp b/src/mame/drivers/spirit76.cpp
index aff49228c39..0a6372a459f 100644
--- a/src/mame/drivers/spirit76.cpp
+++ b/src/mame/drivers/spirit76.cpp
@@ -53,7 +53,7 @@ private:
void spirit76_state::maincpu_map(address_map &map)
{
map.unmap_value_high();
-// ADDRESS_MAP_GLOBAL_MASK(0xfff) // this could most likely go in once the memory map is sorted
+// map.global_mask(0xfff); // this could most likely go in once the memory map is sorted
map(0x0000, 0x00ff).ram(); // 2x 2112
map(0x2200, 0x2203).rw("pia", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // 6820
map(0x2400, 0x2400).r(FUNC(spirit76_state::unk_r));
diff --git a/src/mame/drivers/spoker.cpp b/src/mame/drivers/spoker.cpp
index d383ac980db..149228cff12 100644
--- a/src/mame/drivers/spoker.cpp
+++ b/src/mame/drivers/spoker.cpp
@@ -297,7 +297,7 @@ void spoker_state::spoker_portmap(address_map &map)
void spoker_state::_3super8_portmap(address_map &map)
{
-// AM_RANGE(0x1000, 0x1fff) AM_WRITENOP
+// map(0x1000, 0x1fff).nopw();
map(0x2000, 0x27ff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette");
map(0x2800, 0x2fff).ram().w(m_palette, FUNC(palette_device::write8_ext)).share("palette_ext");
map(0x3000, 0x33ff).ram().w(FUNC(spoker_state::bg_tile_w)).share(m_bg_tile_ram);
@@ -306,7 +306,7 @@ void spoker_state::_3super8_portmap(address_map &map)
map(0x4002, 0x4002).portr("DSW3");
map(0x4003, 0x4003).portr("DSW4");
map(0x4004, 0x4004).portr("DSW5");
-// AM_RANGE(0x4000, 0x40ff) AM_WRITENOP
+// map(0x4000, 0x40ff).nopw();
map(0x5000, 0x5fff).ram().w(FUNC(spoker_state::fg_tile_w)).share(m_fg_tile_ram);
// The following one (0x6480) should be output. At beginning of code, there is a PPI initialization
diff --git a/src/mame/drivers/spool99.cpp b/src/mame/drivers/spool99.cpp
index 3c010b1fc7c..e7b57a8580e 100644
--- a/src/mame/drivers/spool99.cpp
+++ b/src/mame/drivers/spool99.cpp
@@ -296,7 +296,7 @@ void spool99_state::vcarn_map(address_map &map)
map(0xa800, 0xabff).ram().w("palette", FUNC(palette_device::write8)).share("palette");
map(0xb000, 0xdfff).ram();
-// AM_RANGE(0xdf00, 0xdfff) AM_READWRITE(vcarn_io_r,vcarn_io_w) AM_SHARE("vcarn_io")
+// map(0xdf00, 0xdfff).rw(FUNC(spool99_state::vcarn_io_r), FUNC(spool99_state::vcarn_io_w)).share("vcarn_io");
map(0xe000, 0xefff).ram().w(FUNC(spool99_state::vram_w)).share("vram");
map(0xf000, 0xffff).ram().w(FUNC(spool99_state::cram_w)).share("cram");
}
diff --git a/src/mame/drivers/spyhuntertec.cpp b/src/mame/drivers/spyhuntertec.cpp
index c040381635d..59ebd1ced16 100644
--- a/src/mame/drivers/spyhuntertec.cpp
+++ b/src/mame/drivers/spyhuntertec.cpp
@@ -437,7 +437,7 @@ void spyhuntertec_state::spyhuntertec_map(address_map &map)
map(0xe000, 0xe7ff).ram().w(FUNC(spyhuntertec_state::spyhunt_videoram_w)).share("videoram");
map(0xe800, 0xebff).mirror(0x0400).ram().w(FUNC(spyhuntertec_state::spyhunt_alpharam_w)).share("spyhunt_alpha");
- map(0xf000, 0xf7ff).ram(); //AM_SHARE("nvram")
+ map(0xf000, 0xf7ff).ram(); //.share("nvram");
map(0xf800, 0xf9ff).ram().share("spriteram"); // origional spriteram
map(0xfa00, 0xfa7f).mirror(0x0180).ram().w(FUNC(spyhuntertec_state::spyhuntertec_paletteram_w)).share("paletteram");
@@ -468,7 +468,7 @@ void spyhuntertec_state::spyhuntertec_portmap(address_map &map)
map(0x04, 0x04).w(FUNC(spyhuntertec_state::spyhuntertec_port04_w));
map(0x84, 0x86).w(FUNC(spyhuntertec_state::spyhunt_scroll_value_w));
map(0xe0, 0xe0).nopw(); // was watchdog
-// AM_RANGE(0xe8, 0xe8) AM_WRITENOP
+// map(0xe8, 0xe8).nopw();
map(0xf0, 0xf0).w(FUNC(spyhuntertec_state::spyhuntertec_portf0_w));
}
diff --git a/src/mame/drivers/srmp5.cpp b/src/mame/drivers/srmp5.cpp
index 525e7be34bb..8e22cfc6548 100644
--- a/src/mame/drivers/srmp5.cpp
+++ b/src/mame/drivers/srmp5.cpp
@@ -401,8 +401,8 @@ void srmp5_state::st0016_mem(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0xbfff).bankr("soundbank");
- //AM_RANGE(0xe900, 0xe9ff) // sound - internal
- //AM_RANGE(0xec00, 0xec1f) AM_READ(st0016_character_ram_r) AM_WRITE(st0016_character_ram_w)
+ //map(0xe900, 0xe9ff) // sound - internal
+ //map(0xec00, 0xec1f).rw(FUNC(srmp5_state::st0016_character_ram_r), FUNC(srmp5_state::st0016_character_ram_w));
map(0xf000, 0xffff).ram();
}
@@ -432,13 +432,13 @@ WRITE8_MEMBER(srmp5_state::st0016_rom_bank_w)
void srmp5_state::st0016_io(address_map &map)
{
map.global_mask(0xff);
- //AM_RANGE(0x00, 0xbf) AM_READ(st0016_vregs_r) AM_WRITE(st0016_vregs_w)
+ //map(0x00, 0xbf).rw(FUNC(srmp5_state::st0016_vregs_r), FUNC(srmp5_state::st0016_vregs_w));
map(0xc0, 0xc0).r(FUNC(srmp5_state::cmd1_r));
map(0xc1, 0xc1).r(FUNC(srmp5_state::cmd2_r));
map(0xc2, 0xc2).r(FUNC(srmp5_state::cmd_stat8_r));
map(0xe1, 0xe1).w(FUNC(srmp5_state::st0016_rom_bank_w));
map(0xe7, 0xe7).w(FUNC(srmp5_state::st0016_rom_bank_w));
- //AM_RANGE(0xf0, 0xf0) AM_READ(st0016_dma_r)
+ //map(0xf0, 0xf0).r(FUNC(srmp5_state::st0016_dma_r));
}
diff --git a/src/mame/drivers/srmp6.cpp b/src/mame/drivers/srmp6.cpp
index 587883e1d4a..bf521920450 100644
--- a/src/mame/drivers/srmp6.cpp
+++ b/src/mame/drivers/srmp6.cpp
@@ -565,17 +565,17 @@ void srmp6_state::srmp6_map(address_map &map)
map(0x4d0000, 0x4d0001).r(FUNC(srmp6_state::irq_ack_r));
map(0x4e0000, 0x4e00ff).rw("nile", FUNC(nile_device::nile_snd_r), FUNC(nile_device::nile_snd_w));
map(0x4e0100, 0x4e0101).rw("nile", FUNC(nile_device::nile_sndctrl_r), FUNC(nile_device::nile_sndctrl_w));
- //AM_RANGE(0x4e0110, 0x4e0111) AM_NOP // ? accessed once ($268dc, written $b.w)
+ //map(0x4e0110, 0x4e0111).noprw(); // ? accessed once ($268dc, written $b.w)
// CHR RAM: checked [$500000-$5fffff]
map(0x500000, 0x5fffff).rw(FUNC(srmp6_state::tileram_r), FUNC(srmp6_state::tileram_w)).share("chrram");
- //AM_RANGE(0x5fff00, 0x5fff1f) AM_RAM // ? see routine $5ca8, video_regs related ???
- //AM_RANGE(0x5fff00, 0x5fffff) AM_WRITE(dma_w) AM_SHARE("dmaram")
+ //map(0x5fff00, 0x5fff1f).ram(); // ? see routine $5ca8, video_regs related ???
+ //map(0x5fff00, 0x5fffff).w(FUNC(srmp6_state::dma_w)).share("dmaram");
map(0x600000, 0x7fffff).bankr("nile_bank"); // banked ROM (used by ROM check)
map(0x800000, 0x9fffff).rom().region("user1", 0);
- //AM_RANGE(0xf00004, 0xf00005) AM_RAM // ?
- //AM_RANGE(0xf00006, 0xf00007) AM_RAM // ?
+ //map(0xf00004, 0xf00005).ram(); // ?
+ //map(0xf00006, 0xf00007).ram(); // ?
}
diff --git a/src/mame/drivers/ssingles.cpp b/src/mame/drivers/ssingles.cpp
index 31d7041713b..01681aef641 100644
--- a/src/mame/drivers/ssingles.cpp
+++ b/src/mame/drivers/ssingles.cpp
@@ -390,11 +390,11 @@ void ssingles_state::atamanot_map(address_map &map)
map(0x0000, 0x3fff).rom();
map(0x4000, 0x47ff).ram();
map(0x6000, 0x60ff).ram(); //kanji tilemap?
-// AM_RANGE(0x6000, 0x7fff) AM_ROM
+// map(0x6000, 0x7fff).rom();
map(0x8000, 0x83ff).r(FUNC(ssingles_state::atamanot_prot_r));
-// AM_RANGE(0x8000, 0x9fff) AM_ROM AM_REGION("question",0x10000)
-// AM_RANGE(0xc000, 0xc000) AM_READ(c000_r )
-// AM_RANGE(0xc001, 0xc001) AM_READWRITE(c001_r, c001_w )
+// map(0x8000, 0x9fff).rom().region("question", 0x10000);
+// map(0xc000, 0xc000).r(FUNC(ssingles_state::c000_r));
+// map(0xc001, 0xc001).rw(FUNC(ssingles_state::c001_r), FUNC(ssingles_state::c001_w));
}
void ssingles_state::ssingles_io_map(address_map &map)
@@ -408,7 +408,7 @@ void ssingles_state::ssingles_io_map(address_map &map)
map(0x16, 0x16).portr("DSW0");
map(0x18, 0x18).portr("DSW1");
map(0x1c, 0x1c).portr("INPUTS");
-// AM_RANGE(0x1a, 0x1a) AM_WRITENOP //video/crt related
+// map(0x1a, 0x1a).nopw(); //video/crt related
map(0xfe, 0xfe).w("crtc", FUNC(mc6845_device::address_w));
map(0xff, 0xff).w("crtc", FUNC(mc6845_device::register_w));
}
@@ -424,7 +424,7 @@ void ssingles_state::atamanot_io_map(address_map &map)
map(0x16, 0x16).portr("DSW0");
map(0x18, 0x18).portr("DSW1").w(FUNC(ssingles_state::atamanot_prot_w));
map(0x1c, 0x1c).portr("INPUTS");
-// AM_RANGE(0x1a, 0x1a) AM_WRITENOP //video/crt related
+// map(0x1a, 0x1a).nopw(); //video/crt related
map(0xfe, 0xfe).w("crtc", FUNC(mc6845_device::address_w));
map(0xff, 0xff).w("crtc", FUNC(mc6845_device::register_w));
}
diff --git a/src/mame/drivers/ssozumo.cpp b/src/mame/drivers/ssozumo.cpp
index 269406a9c8f..2e56abaf3b9 100644
--- a/src/mame/drivers/ssozumo.cpp
+++ b/src/mame/drivers/ssozumo.cpp
@@ -42,7 +42,7 @@ void ssozumo_state::ssozumo_map(address_map &map)
map(0x4010, 0x4010).portr("P2").w("soundlatch", FUNC(generic_latch_8_device::write));
map(0x4020, 0x4020).portr("DSW2").w(FUNC(ssozumo_state::scroll_w));
map(0x4030, 0x4030).portr("DSW1");
-// AM_RANGE(0x4030, 0x4030) AM_WRITEONLY
+// map(0x4030, 0x4030).writeonly();
map(0x4050, 0x407f).ram().w(FUNC(ssozumo_state::paletteram_w)).share("paletteram");
map(0x6000, 0xffff).rom();
}
diff --git a/src/mame/drivers/ssv.cpp b/src/mame/drivers/ssv.cpp
index 1c18e351e01..d06c841ee26 100644
--- a/src/mame/drivers/ssv.cpp
+++ b/src/mame/drivers/ssv.cpp
@@ -436,7 +436,7 @@ READ16_MEMBER(ssv_state::drifto94_unknown_r)
void ssv_state::drifto94_map(address_map &map)
{
ssv_map(map, 0xc00000);
-// AM_RANGE(0x210002, 0x210003) AM_WRITENOP // ? 1 at the start
+// map(0x210002, 0x210003).nopw(); // ? 1 at the start
map(0x400000, 0x47ffff).writeonly(); // ?
map(0x480000, 0x480001).rw(FUNC(ssv_state::dsp_dr_r), FUNC(ssv_state::dsp_dr_w));
map(0x482000, 0x482fff).rw(FUNC(ssv_state::dsp_r), FUNC(ssv_state::dsp_w));
@@ -525,9 +525,9 @@ void ssv_state::hypreact_map(address_map &map)
{
ssv_map(map, 0xf00000);
map(0x210000, 0x210001).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
-// AM_RANGE(0x210002, 0x210003) AM_WRITENOP // ? 5 at the start
+// map(0x210002, 0x210003).nopw(); // ? 5 at the start
map(0x21000e, 0x21000f).w(FUNC(ssv_state::lockout_inv_w)); // Inverted lockout lines
-// AM_RANGE(0x280000, 0x280001) AM_READNOP // ? read at the start, value not used
+// map(0x280000, 0x280001).nopr(); // ? read at the start, value not used
map(0xc00000, 0xc00001).r(FUNC(ssv_state::hypreact_input_r)); // Inputs
map(0xc00006, 0xc00007).ram().share("input_sel"); //
map(0xc00008, 0xc00009).noprw(); //
@@ -542,9 +542,9 @@ void ssv_state::hypreac2_map(address_map &map)
{
ssv_map(map, 0xe00000);
map(0x210000, 0x210001).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
-// AM_RANGE(0x210002, 0x210003) AM_WRITENOP // ? 5 at the start
+// map(0x210002, 0x210003).nopw(); // ? 5 at the start
map(0x21000e, 0x21000f).w(FUNC(ssv_state::lockout_inv_w)); // Inverted lockout lines
-// AM_RANGE(0x280000, 0x280001) AM_READNOP // ? read at the start, value not used
+// map(0x280000, 0x280001).nopr(); // ? read at the start, value not used
map(0x500000, 0x500001).r(FUNC(ssv_state::hypreact_input_r)); // Inputs
map(0x500002, 0x500003).r(FUNC(ssv_state::hypreact_input_r)); // (again?)
map(0x520000, 0x520001).writeonly().share("input_sel"); // Inputs
@@ -562,7 +562,7 @@ void ssv_state::janjans1_map(address_map &map)
{
ssv_map(map, 0xc00000);
map(0x210000, 0x210001).nopw(); // koikois2 but not janjans1
-// AM_RANGE(0x210002, 0x210003) AM_WRITENOP // ? 1 at the start
+// map(0x210002, 0x210003).nopw(); // ? 1 at the start
map(0x210006, 0x210007).nopr();
map(0x800000, 0x800001).writeonly().share("input_sel"); // Inputs
map(0x800002, 0x800003).r(FUNC(ssv_state::srmp4_input_r)); // Inputs
@@ -576,7 +576,7 @@ void ssv_state::janjans1_map(address_map &map)
void ssv_state::keithlcy_map(address_map &map)
{
ssv_map(map, 0xe00000);
-// AM_RANGE(0x210002, 0x210003) AM_WRITENOP // ? 1 at the start
+// map(0x210002, 0x210003).nopw(); // ? 1 at the start
map(0x210010, 0x210011).nopw(); //
map(0x21000e, 0x21000f).nopr(); //
map(0x400000, 0x47ffff).writeonly(); // ?
@@ -591,9 +591,9 @@ void ssv_state::meosism_map(address_map &map)
{
ssv_map(map, 0xf00000);
map(0x210000, 0x210001).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
-// AM_RANGE(0x210002, 0x210003) AM_WRITENOP // ? 5 at the start
-// AM_RANGE(0x280000, 0x280001) AM_READNOP // ? read once, value not used
-// AM_RANGE(0x500004, 0x500005) AM_WRITENOP // ? 0,58,18
+// map(0x210002, 0x210003).nopw(); // ? 5 at the start
+// map(0x280000, 0x280001).nopr(); // ? read once, value not used
+// map(0x500004, 0x500005).nopw(); // ? 0,58,18
map(0x580000, 0x58ffff).ram().share("nvram"); // NVRAM
}
@@ -617,9 +617,9 @@ void ssv_state::mslider_map(address_map &map)
{
ssv_map(map, 0xf00000);
map(0x010000, 0x01ffff).rw(FUNC(ssv_state::mainram_r), FUNC(ssv_state::mainram_w)); // RAM Mirror
-// AM_RANGE(0x210002, 0x210003) AM_WRITENOP // ? 1 at the start
+// map(0x210002, 0x210003).nopw(); // ? 1 at the start
map(0x400000, 0x47ffff).writeonly(); // ?
-// AM_RANGE(0x500000, 0x500001) AM_WRITENOP // ? ff at the start
+// map(0x500000, 0x500001).nopw(); // ? ff at the start
}
@@ -631,7 +631,7 @@ void ssv_state::ryorioh_map(address_map &map)
{
ssv_map(map, 0xc00000);
map(0x210000, 0x210001).w("watchdog", FUNC(watchdog_timer_device::reset16_w));
-// AM_RANGE(0x210002, 0x210003) AM_WRITENOP // ? 1 at the start
+// map(0x210002, 0x210003).nopw(); // ? 1 at the start
}
@@ -655,7 +655,7 @@ void ssv_state::srmp4_map(address_map &map)
{
ssv_map(map, 0xf00000);
map(0x210000, 0x210001).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
-// AM_RANGE(0x210002, 0x210003) AM_WRITENOP // ? 1,5 at the start
+// map(0x210002, 0x210003).nopw(); // ? 1,5 at the start
map(0xc0000a, 0xc0000b).r(FUNC(ssv_state::srmp4_input_r)); // Inputs
map(0xc0000e, 0xc0000f).writeonly().share("input_sel"); // Inputs
map(0xc00010, 0xc00011).nopw(); //
@@ -703,7 +703,7 @@ void ssv_state::srmp7_map(address_map &map)
ssv_map(map, 0xc00000);
map(0x010000, 0x050faf).ram(); // More RAM
map(0x210000, 0x210001).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
-// AM_RANGE(0x210002, 0x210003) AM_WRITENOP // ? 0,4 at the start
+// map(0x210002, 0x210003).nopw(); // ? 0,4 at the start
map(0x21000e, 0x21000f).w(FUNC(ssv_state::lockout_inv_w)); // Coin Counters / Lockouts
map(0x300076, 0x300077).r(FUNC(ssv_state::srmp7_irqv_r)); // Sound
// 0x540000, 0x540003, related to lev 5 irq?
@@ -721,9 +721,9 @@ void ssv_state::survarts_map(address_map &map)
{
ssv_map(map, 0xf00000);
map(0x210000, 0x210001).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
-// AM_RANGE(0x210002, 0x210003) AM_WRITENOP // ? 0,4 at the start
-// AM_RANGE(0x290000, 0x290001) AM_READNOP // ?
-// AM_RANGE(0x2a0000, 0x2a0001) AM_READNOP // ?
+// map(0x210002, 0x210003).nopw(); // ? 0,4 at the start
+// map(0x290000, 0x290001).nopr(); // ?
+// map(0x2a0000, 0x2a0001).nopr(); // ?
map(0x400000, 0x43ffff).ram(); // dyna
@@ -769,9 +769,9 @@ WRITE16_MEMBER(ssv_state::sxyreact_motor_w)
void ssv_state::sxyreact_map(address_map &map)
{
ssv_map(map, 0xe00000);
-// AM_RANGE(0x020000, 0x03ffff) AM_READWRITE(mainram_r, mainram_w) // sxyreac2 reads / writes here, why?
+// map(0x020000, 0x03ffff).rw(FUNC(ssv_state::mainram_r), FUNC(ssv_state::mainram_w)); // sxyreac2 reads / writes here, why?
map(0x210000, 0x210001).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
-// AM_RANGE(0x210002, 0x210003) AM_WRITENOP // ? 1 at the start
+// map(0x210002, 0x210003).nopw(); // ? 1 at the start
map(0x21000e, 0x21000f).w(FUNC(ssv_state::lockout_inv_w)); // Inverted lockout lines
map(0x500002, 0x500003).r(FUNC(ssv_state::sxyreact_ballswitch_r)); // ?
map(0x500004, 0x500005).rw(FUNC(ssv_state::sxyreact_dial_r), FUNC(ssv_state::sxyreact_motor_w)); // Dial Value (serial)
@@ -807,7 +807,7 @@ void ssv_state::ultrax_map(address_map &map)
ssv_map(map, 0xe00000);
map(0x010000, 0x03ffff).ram(); // More RAM
map(0x210000, 0x210001).r("watchdog", FUNC(watchdog_timer_device::reset16_r)); // Watchdog (also value is cmp.b with memory address 8)
-// AM_RANGE(0x210002, 0x210003) AM_WRITENOP // ? 2,6 at the start
+// map(0x210002, 0x210003).nopw(); // ? 2,6 at the start
}
/***************************************************************************
@@ -904,8 +904,8 @@ void ssv_state::eaglshot_map(address_map &map)
{
ssv_map(map, 0xf00000);
map(0x180000, 0x1bffff).rw(FUNC(ssv_state::eaglshot_gfxram_r), FUNC(ssv_state::eaglshot_gfxram_w));
- map(0x210000, 0x210001).nopr(); /*AM_DEVREAD("watchdog", watchdog_timer_device, reset16_r)*/ // Watchdog
-// AM_RANGE(0x210002, 0x210003) AM_WRITENOP // ? 0,4 at the start
+ map(0x210000, 0x210001).nopr(); // .r("watchdog", FUNC(watchdog_timer_device::reset16_r)); // Watchdog
+// map(0x210002, 0x210003).nopw(); // ? 0,4 at the start
map(0x21000e, 0x21000f).w(FUNC(ssv_state::lockout_inv_w)); // Inverted lockout lines
map(0x800000, 0x800000).w(FUNC(ssv_state::eaglshot_gfxrom_bank_w));
map(0x900000, 0x900000).w(FUNC(ssv_state::eaglshot_trackball_w));
diff --git a/src/mame/drivers/st_mp200.cpp b/src/mame/drivers/st_mp200.cpp
index 32e6627f692..55f6a38a987 100644
--- a/src/mame/drivers/st_mp200.cpp
+++ b/src/mame/drivers/st_mp200.cpp
@@ -114,14 +114,14 @@ private:
void st_mp200_state::st_mp200_map(address_map &map)
{
- //ADDRESS_MAP_GLOBAL_MASK(0x7fff)
+ //map.global_mask(0x7fff);
map(0x0000, 0x007f).ram(); // internal to the cpu
map(0x0088, 0x008b).rw(m_pia_u10, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0x0090, 0x0093).rw(m_pia_u11, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0x00a0, 0x00a7).nopw(); // to sound board
map(0x00c0, 0x00c7); // to sound board
map(0x0200, 0x02ff).ram().share("nvram");
- map(0x1000, 0xffff).rom(); //AM_REGION("roms", 0 )
+ map(0x1000, 0xffff).rom(); //.region("roms", 0 );
}
static INPUT_PORTS_START( mp200 )
diff --git a/src/mame/drivers/stactics.cpp b/src/mame/drivers/stactics.cpp
index 95d09b4e60a..9c2d6e8daac 100644
--- a/src/mame/drivers/stactics.cpp
+++ b/src/mame/drivers/stactics.cpp
@@ -191,7 +191,7 @@ void stactics_state::main_map(address_map &map)
map(0x6050, 0x6050).mirror(0x0f0f).w(FUNC(stactics_state::shot_flag_clear_w));
map(0x6060, 0x606f).mirror(0x0f00).writeonly().share("display_buffer");
map(0x6070, 0x609f).mirror(0x0f00).nopw();
- /* AM_RANGE(0x60a0, 0x60ef) AM_MIRROR(0x0f00) AM_WRITE(sound2_w) */
+ /* map(0x60a0, 0x60ef).mirror(0x0f00).w(FUNC(stactics_state::sound2_w)); */
map(0x60f0, 0x60ff).mirror(0x0f00).nopw();
map(0x7000, 0x7000).mirror(0x0fff).portr("IN2");
map(0x8000, 0x8000).mirror(0x0fff).portr("IN3");
diff --git a/src/mame/drivers/stfight.cpp b/src/mame/drivers/stfight.cpp
index b72e004eb4b..aced326840d 100644
--- a/src/mame/drivers/stfight.cpp
+++ b/src/mame/drivers/stfight.cpp
@@ -462,15 +462,15 @@ INPUT_PORTS_END
void stfight_state::stfight_base(machine_config &config)
{
/* basic machine hardware */
- Z80(config, m_maincpu, XTAL(12'000'000) / 4);
+ Z80(config, m_maincpu, 12_MHz_XTAL / 4);
m_maincpu->set_addrmap(AS_PROGRAM, &stfight_state::cpu1_map);
m_maincpu->set_vblank_int("stfight_vid:screen", FUNC(stfight_state::stfight_vb_interrupt));
- Z80(config, m_audiocpu, XTAL(12'000'000) / 4);
+ Z80(config, m_audiocpu, 12_MHz_XTAL / 4);
m_audiocpu->set_addrmap(AS_PROGRAM, &stfight_state::cpu2_map);
m_audiocpu->set_periodic_int(FUNC(stfight_state::irq0_line_hold), attotime::from_hz(120));
- M68705P5(config, m_mcu, XTAL(12'000'000) / 4);
+ M68705P5(config, m_mcu, 12_MHz_XTAL / 4);
m_mcu->portb_r().set(FUNC(stfight_state::stfight_68705_port_b_r));
m_mcu->porta_w().set(FUNC(stfight_state::stfight_68705_port_a_w));
m_mcu->portb_w().set(FUNC(stfight_state::stfight_68705_port_b_w));
@@ -484,19 +484,19 @@ void stfight_state::stfight_base(machine_config &config)
SPEAKER(config, "mono").front_center();
// YM2203_PITCH_HACK - These should be clocked at 1.5Mhz (see TODO list)
- ym2203_device &ym1(YM2203(config, "ym1", XTAL(12'000'000) / 8 * 3));
+ ym2203_device &ym1(YM2203(config, "ym1", 12_MHz_XTAL / 8 * 3));
ym1.add_route(0, "mono", 0.15);
ym1.add_route(1, "mono", 0.15);
ym1.add_route(2, "mono", 0.15);
ym1.add_route(3, "mono", 0.10);
- ym2203_device &ym2(YM2203(config, "ym2", XTAL(12'000'000) / 8 * 3));
+ ym2203_device &ym2(YM2203(config, "ym2", 12_MHz_XTAL / 8 * 3));
ym2.add_route(0, "mono", 0.15);
ym2.add_route(1, "mono", 0.15);
ym2.add_route(2, "mono", 0.15);
ym2.add_route(3, "mono", 0.10);
- MSM5205(config, m_msm, XTAL(384'000));
+ MSM5205(config, m_msm, 384_kHz_XTAL);
m_msm->vck_callback().set(FUNC(stfight_state::stfight_adpcm_int)); // Interrupt function
m_msm->set_prescaler_selector(msm5205_device::S48_4B); // 8KHz, 4-bit
m_msm->add_route(ALL_OUTPUTS, "mono", 0.50);
diff --git a/src/mame/drivers/stv.cpp b/src/mame/drivers/stv.cpp
index 050bb16bae6..7880b82b229 100644
--- a/src/mame/drivers/stv.cpp
+++ b/src/mame/drivers/stv.cpp
@@ -1038,7 +1038,7 @@ void stv_state::stv_mem(address_map &map)
map(0x00100000, 0x0010007f).rw(m_smpc_hle, FUNC(smpc_hle_device::read), FUNC(smpc_hle_device::write));
map(0x00180000, 0x0018ffff).rw(FUNC(stv_state::saturn_backupram_r), FUNC(stv_state::saturn_backupram_w)).share("share1");
map(0x00200000, 0x002fffff).ram().mirror(0x20100000).share("workram_l");
-// AM_RANGE(0x00400000, 0x0040001f) AM_READWRITE(stv_ioga_r32, stv_io_w32) AM_SHARE("ioga") AM_MIRROR(0x20) /* installed with per-game specific */
+// map(0x00400000, 0x0040001f).rw(FUNC(stv_state::stv_ioga_r32), FUNC(stv_state::stv_io_w32)).share("ioga").mirror(0x20); /* installed with per-game specific */
map(0x01000000, 0x017fffff).w(FUNC(stv_state::minit_w));
map(0x01800000, 0x01ffffff).w(FUNC(stv_state::sinit_w));
map(0x02000000, 0x04ffffff).rom().mirror(0x20000000).region("abus", 0); // cartridge
@@ -1052,7 +1052,7 @@ void stv_state::stv_mem(address_map &map)
map(0x05e00000, 0x05e7ffff).mirror(0x80000).rw(FUNC(stv_state::saturn_vdp2_vram_r), FUNC(stv_state::saturn_vdp2_vram_w));
map(0x05f00000, 0x05f7ffff).rw(FUNC(stv_state::saturn_vdp2_cram_r), FUNC(stv_state::saturn_vdp2_cram_w));
map(0x05f80000, 0x05fbffff).rw(FUNC(stv_state::saturn_vdp2_regs_r), FUNC(stv_state::saturn_vdp2_regs_w));
- map(0x05fe0000, 0x05fe00cf).m(m_scu, FUNC(sega_scu_device::regs_map)); //AM_READWRITE(saturn_scu_r, saturn_scu_w)
+ map(0x05fe0000, 0x05fe00cf).m(m_scu, FUNC(sega_scu_device::regs_map)); //rw(FUNC(stv_state::saturn_scu_r), FUNC(stv_state::saturn_scu_w));
map(0x06000000, 0x060fffff).ram().mirror(0x21f00000).share("workram_h");
map(0x60000000, 0x600003ff).nopw();
map(0xc0000000, 0xc00007ff).ram(); // cache RAM
diff --git a/src/mame/drivers/subhuntr.cpp b/src/mame/drivers/subhuntr.cpp
index 1871e153a1a..b96c8e257dd 100644
--- a/src/mame/drivers/subhuntr.cpp
+++ b/src/mame/drivers/subhuntr.cpp
@@ -94,8 +94,8 @@ void subhuntr_state::subhuntr_io_map(address_map &map)
void subhuntr_state::subhuntr_data_map(address_map &map)
{
-// AM_RANGE(S2650_CTRL_PORT, S2650_CTRL_PORT) AM_READWRITE( , )
-// AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READWRITE( , )
+// map(S2650_CTRL_PORT, S2650_CTRL_PORT).rw(FUNC(subhuntr_state::), FUNC(subhuntr_state::));
+// map(S2650_DATA_PORT, S2650_DATA_PORT).rw(FUNC(subhuntr_state::), FUNC(subhuntr_state::));
}
/***************************************************************************
diff --git a/src/mame/drivers/subs.cpp b/src/mame/drivers/subs.cpp
index b8239b08832..d3b6e50ff98 100644
--- a/src/mame/drivers/subs.cpp
+++ b/src/mame/drivers/subs.cpp
@@ -59,7 +59,7 @@ void subs_state::main_map(address_map &map)
map(0x0000, 0x0007).r(FUNC(subs_state::control_r));
map(0x0020, 0x0020).w(FUNC(subs_state::steer_reset_w));
map(0x0020, 0x0027).r(FUNC(subs_state::coin_r));
-// AM_RANGE(0x0040, 0x0040) AM_WRITE(timer_reset_w)
+// map(0x0040, 0x0040).w(FUNC(subs_state::timer_reset_w));
map(0x0060, 0x0063).r(FUNC(subs_state::options_r));
map(0x0060, 0x006f).w("latch", FUNC(ls259_device::write_a0));
map(0x0090, 0x009f).ram().share("spriteram");
diff --git a/src/mame/drivers/subsino.cpp b/src/mame/drivers/subsino.cpp
index d3752788636..2099f1a6294 100644
--- a/src/mame/drivers/subsino.cpp
+++ b/src/mame/drivers/subsino.cpp
@@ -918,17 +918,17 @@ void subsino_state::crsbingo_map(address_map &map)
map(0x09005, 0x09005).w(FUNC(subsino_state::out_a_w));
map(0x09008, 0x09008).portr("SW4");
- map(0x09009, 0x09009).portr("SW3"); // AM_WRITE(out_a_w )
+ map(0x09009, 0x09009).portr("SW3"); // .w(FUNC(subsino_state::out_a_w));
map(0x0900a, 0x0900a).rw(FUNC(subsino_state::hwcheck_r), FUNC(subsino_state::out_b_w));
map(0x09010, 0x09010).rw(FUNC(subsino_state::flash_r), FUNC(subsino_state::flash_w));
-// AM_RANGE( 0x09011, 0x09011 ) //"flash" status, bit 0
-// AM_RANGE( 0x0900c, 0x0900c ) AM_READ_PORT( "INC" )
+// map(0x09011, 0x09011) //"flash" status, bit 0
+// map(0x0900c, 0x0900c).portr("INC");
map(0x0900c, 0x0900d).w("ymsnd", FUNC(ym2413_device::write));
-// AM_RANGE( 0x09018, 0x09018 ) AM_DEVWRITE("oki", okim6295_device, write)
+// map(0x09018, 0x09018).w("oki", FUNC(okim6295_device::write));
-// AM_RANGE( 0x0900d, 0x0900d ) AM_WRITE(tiles_offset_w )
+// map(0x0900d, 0x0900d).w(FUNC(subsino_state::tiles_offset_w));
map(0x07800, 0x07fff).ram();
map(0x08000, 0x087ff).ram().w(FUNC(subsino_state::videoram_w)).share("videoram");
@@ -969,7 +969,7 @@ void subsino_state::tisub_map(address_map &map)
map(0x09016, 0x09017).w("ymsnd", FUNC(ym3812_device::write));
-// AM_RANGE( 0x0900c, 0x0900c ) AM_DEVWRITE("oki", okim6295_device, write)
+// map(0x0900c, 0x0900c).w("oki", FUNC(okim6295_device::write));
map(0x0901b, 0x0901b).w(FUNC(subsino_state::tiles_offset_w));
@@ -1067,7 +1067,7 @@ void subsino_state::stbsub_map(address_map &map)
map(0x0d016, 0x0d017).w("ymsnd", FUNC(ym3812_device::write));
-// AM_RANGE( 0x0d01b, 0x0d01b ) AM_WRITE(tiles_offset_w )
+// map(0x0d01b, 0x0d01b).w(FUNC(subsino_state::tiles_offset_w));
map(0x0e000, 0x0e7ff).ram().w(FUNC(subsino_state::colorram_w)).share("colorram");
map(0x0e800, 0x0efff).ram().w(FUNC(subsino_state::videoram_w)).share("videoram");
@@ -1094,20 +1094,20 @@ void subsino_state::mtrainnv_map(address_map &map)
map(0x0d004, 0x0d006).r("ppi2", FUNC(i8255_device::read));
map(0x0d008, 0x0d008).ram().share("stbsub_out_c");
-// AM_RANGE( 0x0d009, 0x0d009 ) AM_WRITE
-// AM_RANGE( 0x0d00a, 0x0d00a ) AM_WRITE
-// AM_RANGE( 0x0d00b, 0x0d00b ) AM_WRITE
+// map(0x0d009, 0x0d009).w(FUNC(subsino_state::));
+// map(0x0d00a, 0x0d00a).w(FUNC(subsino_state::));
+// map(0x0d00b, 0x0d00b).w(FUNC(subsino_state::));
map(0x0d00c, 0x0d00c).portr("INC");
map(0x0d010, 0x0d010).w("ramdac", FUNC(ramdac_device::index_w));
map(0x0d011, 0x0d011).w("ramdac", FUNC(ramdac_device::pal_w));
map(0x0d012, 0x0d012).w("ramdac", FUNC(ramdac_device::mask_w));
-// AM_RANGE( 0x0d012, 0x0d012 ) AM_WRITE
+// map(0x0d012, 0x0d012).w(FUNC(subsino_state::));
map(0x0d016, 0x0d017).w("ymsnd", FUNC(ym3812_device::write));
-// AM_RANGE( 0x0d018, 0x0d018 ) AM_DEVREADWRITE("oki", okim6295_device, read, write)
+// map(0x0d018, 0x0d018).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x0e000, 0x0e7ff).ram().w(FUNC(subsino_state::colorram_w)).share("colorram");
map(0x0e800, 0x0efff).ram().w(FUNC(subsino_state::videoram_w)).share("videoram");
diff --git a/src/mame/drivers/summit.cpp b/src/mame/drivers/summit.cpp
index 3f4055a2b40..b41357d3ac2 100644
--- a/src/mame/drivers/summit.cpp
+++ b/src/mame/drivers/summit.cpp
@@ -92,10 +92,10 @@ void summit_state::mainmap(address_map &map)
map(0x2800, 0x2bff).ram().share("vram");
map(0x3800, 0x3800).portr("IN0");
-// AM_RANGE(0x3880, 0x3880) AM_WRITE(out_w)
+// map(0x3880, 0x3880).w(FUNC(summit_state::out_w));
map(0x3900, 0x3900).portr("IN1").w(FUNC(summit_state::out_w)); // lamps
-// AM_RANGE(0x3980, 0x3980) AM_WRITE(out_w)
- map(0x3a00, 0x3a00).portr("IN2"); //AM_WRITE(out_w)
+// map(0x3980, 0x3980).w(FUNC(summit_state::out_w));
+ map(0x3a00, 0x3a00).portr("IN2"); //.w(FUNC(summit_state::out_w));
map(0x3b00, 0x3b00).portr("IN3");
map(0x7000, 0x71ff).ram();
diff --git a/src/mame/drivers/sun2.cpp b/src/mame/drivers/sun2.cpp
index d5b2e3794a4..318dfb4d39a 100644
--- a/src/mame/drivers/sun2.cpp
+++ b/src/mame/drivers/sun2.cpp
@@ -568,11 +568,11 @@ void sun2_state::vmetype1space_map(address_map &map)
map(0x7f0000, 0x7f07ff).rom().region("bootprom", 0); // uses MMU loophole to read 32k from a 2k window
map(0x7f0800, 0x7f0800).mirror(0x7fe).rw(FUNC(sun2_state::ethernet_r), FUNC(sun2_state::ethernet_w)).cswidth(16);
// 7f1000-7f17ff: AM9518 encryption processor
- //AM_RANGE(0x7f1800, 0x7f1801) AM_DEVREADWRITE8(SCC1_TAG, z80scc_device, cb_r, cb_w, 0xff00)
- //AM_RANGE(0x7f1802, 0x7f1803) AM_DEVREADWRITE8(SCC1_TAG, z80scc_device, db_r, db_w, 0xff00)
+ //map(0x7f1800, 0x7f1800).rw(SCC1_TAG, FUNC(z80scc_device::cb_r), FUNC(z80scc_device::cb_w));
+ //map(0x7f1802, 0x7f1802).rw(SCC1_TAG, FUNC(z80scc_device::db_r), FUNC(z80scc_device::db_w));
map(0x7f1804, 0x7f1805).nopr();
- //AM_RANGE(0x7f1804, 0x7f1805) AM_DEVREADWRITE8(SCC1_TAG, z80scc_device, ca_r, ca_w, 0xff00)
- //AM_RANGE(0x7f1806, 0x7f1807) AM_DEVREADWRITE8(SCC1_TAG, z80scc_device, da_r, da_w, 0xff00)
+ //map(0x7f1804, 0x7f1804).rw(SCC1_TAG, FUNC(z80scc_device::ca_r), FUNC(z80scc_device::ca_w));
+ //map(0x7f1806, 0x7f1806).rw(SCC1_TAG, FUNC(z80scc_device::da_r), FUNC(z80scc_device::da_w));
map(0x7f2000, 0x7f2000).rw(SCC2_TAG, FUNC(z80scc_device::cb_r), FUNC(z80scc_device::cb_w));
map(0x7f2002, 0x7f2002).rw(SCC2_TAG, FUNC(z80scc_device::db_r), FUNC(z80scc_device::db_w));
map(0x7f2004, 0x7f2004).rw(SCC2_TAG, FUNC(z80scc_device::ca_r), FUNC(z80scc_device::ca_w));
@@ -596,7 +596,7 @@ void sun2_state::mbustype0space_map(address_map &map)
{
map(0x000000, 0x3fffff).rw(FUNC(sun2_state::ram_r), FUNC(sun2_state::ram_w));
// 7f80000-7f807ff: Keyboard/mouse SCC8530
- //AM_RANGE(0x7f8000, 0x7f8007) AM_DEVREADWRITE8(SCC1_TAG, z80scc_device, ab_dc_r, ab_dc_w, 0xff00)
+ //map(0x7f8000, 0x7f8007).rw(SCC1_TAG, FUNC(z80scc_device::ab_dc_r), FUNC(z80scc_device::ab_dc_w)).umask16(0xff00);
map(0x700000, 0x71ffff).ram().share("bw2_vram");
map(0x781800, 0x781801).rw(FUNC(sun2_state::video_ctrl_r), FUNC(sun2_state::video_ctrl_w));
}
diff --git a/src/mame/drivers/suna8.cpp b/src/mame/drivers/suna8.cpp
index 94338964070..9ee1e95d674 100644
--- a/src/mame/drivers/suna8.cpp
+++ b/src/mame/drivers/suna8.cpp
@@ -738,7 +738,7 @@ void suna8_state::brickzn11_map(address_map &map)
map(0xc060, 0xc060).w(FUNC(suna8_state::brickzn_rombank_w)); // ROM Bank
map(0xc080, 0xc080).w(FUNC(suna8_state::brickzn_leds_w)); // Leds
map(0xc0a0, 0xc0a0).w(FUNC(suna8_state::brickzn_palbank_w)); // Palette RAM Bank
-// AM_RANGE(0xc0c0, 0xc0c0) AM_WRITE(brickzn_prot2_w ) // Protection 2
+// map(0xc0c0, 0xc0c0).w(FUNC(suna8_state::brickzn_prot2_w)); // Protection 2
map(0xc100, 0xc100).portr("P1"); // P1 (Buttons)
map(0xc101, 0xc101).portr("P2"); // P2 (Buttons)
diff --git a/src/mame/drivers/super6.cpp b/src/mame/drivers/super6.cpp
index ebc6161cffd..89669442cd3 100644
--- a/src/mame/drivers/super6.cpp
+++ b/src/mame/drivers/super6.cpp
@@ -283,8 +283,8 @@ void super6_state::super6_io(address_map &map)
map(0x16, 0x16).w(FUNC(super6_state::bank0_w));
map(0x17, 0x17).w(FUNC(super6_state::bank1_w));
map(0x18, 0x18).mirror(0x03).w(BR1945_TAG, FUNC(com8116_device::stt_str_w));
-// AM_RANGE(0x40, 0x40) ?
-// AM_RANGE(0xe0, 0xe7) HDC?
+// map(0x40, 0x40) ?
+// map(0xe0, 0xe7) HDC?
}
diff --git a/src/mame/drivers/supercrd.cpp b/src/mame/drivers/supercrd.cpp
index 1c0b72af8b5..09863f403fb 100644
--- a/src/mame/drivers/supercrd.cpp
+++ b/src/mame/drivers/supercrd.cpp
@@ -300,9 +300,9 @@ void supercrd_state::supercrd_map(address_map &map)
map(0x0000, 0xbfff).rom();
map(0xc000, 0xcfff).ram().w(FUNC(supercrd_state::supercrd_videoram_w)).share("videoram"); // wrong
map(0xd000, 0xdfff).ram().w(FUNC(supercrd_state::supercrd_colorram_w)).share("colorram"); // wrong
-// AM_RANGE(0x0000, 0x0000) AM_RAM AM_SHARE("nvram")
-// AM_RANGE(0xe000, 0xe000) AM_DEVWRITE("crtc", mc6845_device, address_w)
-// AM_RANGE(0xe001, 0xe001) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
+// map(0x0000, 0x0000).ram().share("nvram");
+// map(0xe000, 0xe000).w("crtc", FUNC(mc6845_device::address_w));
+// map(0xe001, 0xe001).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
}
diff --git a/src/mame/drivers/superqix.cpp b/src/mame/drivers/superqix.cpp
index 682cdebc09b..c295f17cbaa 100644
--- a/src/mame/drivers/superqix.cpp
+++ b/src/mame/drivers/superqix.cpp
@@ -991,7 +991,7 @@ void superqix_state_base::main_map(address_map &map)
void hotsmash_state::pbillian_port_map(address_map &map)
{ // used by both pbillian and hotsmash
map(0x0000, 0x01ff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette"); // 6116 sram near the jamma connector, "COLOR RAM" during POST
- //AM_RANGE(0x0200, 0x03ff) AM_RAM // looks like leftover crap from a dev board which had double the color ram? zeroes written here, never read.
+ //map(0x0200, 0x03ff).ram(); // looks like leftover crap from a dev board which had double the color ram? zeroes written here, never read.
map(0x0401, 0x0401).r(m_ay1, FUNC(ay8910_device::data_r)); // ay i/o ports connect to "SYSTEM" and "BUTTONS" inputs which includes mcu semaphore flags
map(0x0402, 0x0403).w(m_ay1, FUNC(ay8910_device::data_address_w));
map(0x0408, 0x0408).rw(FUNC(hotsmash_state::hotsmash_z80_mcu_r), FUNC(hotsmash_state::hotsmash_z80_mcu_w));
@@ -1016,7 +1016,7 @@ void superqix_state::sqix_port_map(address_map &map)
// following two ranges are made of two 64kx4 4464 DRAM chips at 9L and 9M, "GRAPHICS RAM" or "GRP BIT" if there is an error in POST
map(0x0800, 0x77ff).ram().w(FUNC(superqix_state::superqix_bitmapram_w)).share("bitmapram");
map(0x8800, 0xf7ff).ram().w(FUNC(superqix_state::superqix_bitmapram2_w)).share("bitmapram2");
- //AM_RANGE(0xf970, 0xfa6f) AM_RAM // this is probably a portion of the remainder of the chips at 9L and 9M which isn't used or tested for graphics ram
+ //map(0xf970, 0xfa6f).ram(); // this is probably a portion of the remainder of the chips at 9L and 9M which isn't used or tested for graphics ram
}
void superqix_state::sqix_8031_map(address_map &map)
diff --git a/src/mame/drivers/supracan.cpp b/src/mame/drivers/supracan.cpp
index 8a7111266c4..b11cd34adb5 100644
--- a/src/mame/drivers/supracan.cpp
+++ b/src/mame/drivers/supracan.cpp
@@ -26,7 +26,7 @@ STATUS:
The driver is begging for a re-write or at least a split into video/supracan.c. It will happen eventually.
- Sound CPU comms and sound chip are completely unknown.
+ Sound chip is completely unknown.
There are 6 interrupt sources on the 6502 side, all of which use the IRQ line.
The register at 0x411 is bitmapped to indicate what source(s) are active.
@@ -37,7 +37,7 @@ STATUS:
0x04 read at 0x405 latch 1? 0xcd is magic value
0x08 read at 0x404 latch 2? 0xcd is magic value
0x10 read at 0x409 unknown, dispatched but not used in startup 6502 code
- 0x20 read at 0x40a possible periodic like vblank?
+ 0x20 read at 0x40a IRQ request from 68k, flags data available in shared-RAM mailbox
0x80 read reg 0x14 of sound chip depends on reg 0x14 of sound chip & 0x40: if not set writes 0x8f to reg 0x14,
otherwise writes 0x4f to reg 0x14 and performs additional processing
@@ -85,8 +85,6 @@ DEBUG TRICKS:
#include "softlist.h"
#include "tilemap.h"
-#define SOUNDCPU_BOOT_HACK (1)
-
#define DRAW_DEBUG_ROZ (0)
#define DRAW_DEBUG_UNK_SPRITE (0)
@@ -105,31 +103,16 @@ DEBUG TRICKS:
#define LOG_HFVIDEO (1 << 8)
#define LOG_IRQS (1 << 9)
#define LOG_SOUND (1 << 10)
+#define LOG_HFUNKNOWNS (1 << 11)
+#define LOG_68K_SOUND (1 << 12)
+#define LOG_CONTROLS (1 << 13)
#define LOG_VIDEO (LOG_SPRDMA | LOG_SPRITES | LOG_TILEMAP0 | LOG_TILEMAP1 | LOG_TILEMAP2 | LOG_ROZ)
-#define LOG_ALL (LOG_UNKNOWNS | LOG_DMA | LOG_VIDEO | LOG_HFVIDEO | LOG_IRQS | LOG_SOUND)
-#define LOG_DEFAULT (LOG_ALL & ~(LOG_HFVIDEO))
+#define LOG_ALL (LOG_UNKNOWNS | LOG_HFUNKNOWNS | LOG_DMA | LOG_VIDEO | LOG_HFVIDEO | LOG_IRQS | LOG_SOUND | LOG_68K_SOUND | LOG_CONTROLS)
+#define LOG_DEFAULT (LOG_ALL & ~(LOG_HFVIDEO | LOG_HFUNKNOWNS))
#define VERBOSE (0)
#include "logmacro.h"
-struct acan_dma_regs_t
-{
- uint32_t source[2];
- uint32_t dest[2];
- uint16_t count[2];
- uint16_t control[2];
-};
-
-struct acan_sprdma_regs_t
-{
- uint32_t src;
- uint16_t src_inc;
- uint32_t dst;
- uint16_t dst_inc;
- uint16_t count;
- uint16_t control;
-};
-
class supracan_state : public driver_device
{
public:
@@ -142,12 +125,20 @@ public:
, m_soundram(*this, "soundram")
, m_gfxdecode(*this, "gfxdecode")
, m_screen(*this, "screen")
+ , m_pads(*this, "P%u", 1U)
{
}
void supracan(machine_config &config);
private:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+ virtual void video_start() override;
+
+ void supracan_mem(address_map &map);
+ void supracan_sound_mem(address_map &map);
+
DECLARE_READ16_MEMBER(_68k_soundram_r);
DECLARE_WRITE16_MEMBER(_68k_soundram_w);
DECLARE_READ8_MEMBER(_6502_soundmem_r);
@@ -163,6 +154,24 @@ private:
DECLARE_WRITE16_MEMBER(video_w);
DECLARE_WRITE16_MEMBER(vram_w);
+ struct dma_regs_t
+ {
+ uint32_t source[2];
+ uint32_t dest[2];
+ uint16_t count[2];
+ uint16_t control[2];
+ };
+
+ struct sprdma_regs_t
+ {
+ uint32_t src;
+ uint16_t src_inc;
+ uint32_t dst;
+ uint16_t dst_inc;
+ uint16_t count;
+ uint16_t control;
+ };
+
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_soundcpu;
required_device<generic_slot_device> m_cart;
@@ -173,28 +182,35 @@ private:
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
- acan_dma_regs_t m_acan_dma_regs;
- acan_sprdma_regs_t m_acan_sprdma_regs;
+ required_ioport_array<2> m_pads;
+
+ dma_regs_t m_dma_regs;
+ sprdma_regs_t m_sprdma_regs;
- uint16_t m_m6502_reset = 0;
- uint8_t m_sound_irq_enable_reg = 0;
- uint8_t m_sound_irq_source_reg = 0;
- uint8_t m_sound_cpu_68k_irq_reg = 0;
+ uint16_t m_sound_cpu_ctrl;
+ uint8_t m_soundcpu_irq_enable;
+ uint8_t m_soundcpu_irq_source;
+ uint8_t m_sound_cpu_shift_ctrl;
+ uint8_t m_sound_cpu_shift_regs[2];
+ uint16_t m_latched_controls[2];
+ uint8_t m_sound_status;
+ uint8_t m_sound_reg_addr;
+ uint8_t m_sound_regs[0x100];
- emu_timer *m_video_timer = nullptr;
- emu_timer *m_hbl_timer = nullptr;
- emu_timer *m_line_on_timer = nullptr;
- emu_timer *m_line_off_timer = nullptr;
+ emu_timer *m_video_timer;
+ emu_timer *m_hbl_timer;
+ emu_timer *m_line_on_timer;
+ emu_timer *m_line_off_timer;
std::vector<uint8_t> m_vram_addr_swapped;
#if 0
- uint16_t *m_pram = nullptr;
+ uint16_t *m_pram;
#endif
- uint16_t m_sprite_count = 0;
- uint32_t m_sprite_base_addr = 0;
- uint8_t m_sprite_flags = 0;
+ uint16_t m_sprite_count;
+ uint32_t m_sprite_base_addr;
+ uint8_t m_sprite_flags;
uint32_t m_tilemap_base_addr[3];
int m_tilemap_scrollx[3];
@@ -228,26 +244,23 @@ private:
bitmap_ind16 m_sprite_final_bitmap;
bitmap_ind8 m_sprite_mask_bitmap;
bitmap_ind8 m_prio_bitmap;
+
void write_swapped_byte(int offset, uint8_t byte);
- TILE_GET_INFO_MEMBER(get_supracan_tilemap0_tile_info);
- TILE_GET_INFO_MEMBER(get_supracan_tilemap1_tile_info);
- TILE_GET_INFO_MEMBER(get_supracan_tilemap2_tile_info);
- TILE_GET_INFO_MEMBER(get_supracan_roz_tile_info);
- virtual void machine_start() override;
- virtual void machine_reset() override;
- virtual void video_start() override;
- void supracan_palette(palette_device &palette) const;
- uint32_t screen_update_supracan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- INTERRUPT_GEN_MEMBER(supracan_irq);
- INTERRUPT_GEN_MEMBER(supracan_sound_irq);
- TIMER_CALLBACK_MEMBER(supracan_hbl_callback);
- TIMER_CALLBACK_MEMBER(supracan_line_on_callback);
- TIMER_CALLBACK_MEMBER(supracan_line_off_callback);
- TIMER_CALLBACK_MEMBER(supracan_video_callback);
+ TILE_GET_INFO_MEMBER(get_tilemap0_tile_info);
+ TILE_GET_INFO_MEMBER(get_tilemap1_tile_info);
+ TILE_GET_INFO_MEMBER(get_tilemap2_tile_info);
+ TILE_GET_INFO_MEMBER(get_roz_tile_info);
+ void palette_init(palette_device &palette) const;
+ uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ INTERRUPT_GEN_MEMBER(sound_irq);
+ TIMER_CALLBACK_MEMBER(hbl_callback);
+ TIMER_CALLBACK_MEMBER(line_on_callback);
+ TIMER_CALLBACK_MEMBER(line_off_callback);
+ TIMER_CALLBACK_MEMBER(video_callback);
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
- int supracan_tilemap_get_region(int layer);
- void supracan_tilemap_get_info_common(int layer, tile_data &tileinfo, int count);
- void supracan_tilemap_get_info_roz(int layer, tile_data &tileinfo, int count);
+ int get_tilemap_Region(int layer);
+ void get_tilemap_info_common(int layer, tile_data &tileinfo, int count);
+ void get_roz_tilemap_info(int layer, tile_data &tileinfo, int count);
int get_tilemap_dimensions(int &xsize, int &ysize, int layer);
void draw_sprite_tile(bitmap_ind16 &dst, bitmap_ind8 &priomap, const rectangle &cliprect, gfx_element *gfx, int tile, int palette, bool xflip, bool yflip, int dstx, int dsty, int prio);
void draw_sprite_tile_mask(bitmap_ind8 &dst, const rectangle &cliprect, gfx_element *gfx, int tile, bool xflip, bool yflip, int dstx, int dsty);
@@ -255,12 +268,12 @@ private:
void draw_sprites(bitmap_ind16 &bitmap, bitmap_ind8 &maskmap, bitmap_ind8 &priomap, const rectangle &cliprect);
void mark_active_tilemap_all_dirty(int layer);
void draw_roz_layer(bitmap_ind16 &bitmap, const rectangle &cliprect, tilemap_t *tmap, uint32_t startx, uint32_t starty, int incxx, int incxy, int incyx, int incyy, int wraparound/*, int columnscroll, uint32_t* scrollram*/, int transmask);
- void supracan_mem(address_map &map);
- void supracan_sound_mem(address_map &map);
+
+ void set_sound_irq(uint8_t mask);
};
-int supracan_state::supracan_tilemap_get_region(int layer)
+int supracan_state::get_tilemap_Region(int layer)
{
// HACK!!!
if (layer == 2)
@@ -286,13 +299,13 @@ int supracan_state::supracan_tilemap_get_region(int layer)
}
-void supracan_state::supracan_tilemap_get_info_common(int layer, tile_data &tileinfo, int count)
+void supracan_state::get_tilemap_info_common(int layer, tile_data &tileinfo, int count)
{
uint16_t* supracan_vram = m_vram;
uint32_t base = m_tilemap_base_addr[layer];
int gfx_mode = (m_tilemap_mode[layer] & 0x7000) >> 12;
- int region = supracan_tilemap_get_region(layer);
+ int region = get_tilemap_Region(layer);
count += base;
@@ -344,7 +357,7 @@ void supracan_state::supracan_tilemap_get_info_common(int layer, tile_data &tile
}
// I wonder how different this really is.. my guess, not at all.
-void supracan_state::supracan_tilemap_get_info_roz(int layer, tile_data &tileinfo, int count)
+void supracan_state::get_roz_tilemap_info(int layer, tile_data &tileinfo, int count)
{
uint16_t* supracan_vram = m_vram;
@@ -354,7 +367,7 @@ void supracan_state::supracan_tilemap_get_info_roz(int layer, tile_data &tileinf
uint16_t tile_bank = 0;
uint16_t palette_bank = 0;
- region = supracan_tilemap_get_region(layer);
+ region = get_tilemap_Region(layer);
switch (m_roz_mode & 3) // FIXME: fix gfx bpp order
{
@@ -396,24 +409,24 @@ void supracan_state::supracan_tilemap_get_info_roz(int layer, tile_data &tileinf
-TILE_GET_INFO_MEMBER(supracan_state::get_supracan_tilemap0_tile_info)
+TILE_GET_INFO_MEMBER(supracan_state::get_tilemap0_tile_info)
{
- supracan_tilemap_get_info_common(0, tileinfo, tile_index);
+ get_tilemap_info_common(0, tileinfo, tile_index);
}
-TILE_GET_INFO_MEMBER(supracan_state::get_supracan_tilemap1_tile_info)
+TILE_GET_INFO_MEMBER(supracan_state::get_tilemap1_tile_info)
{
- supracan_tilemap_get_info_common(1, tileinfo, tile_index);
+ get_tilemap_info_common(1, tileinfo, tile_index);
}
-TILE_GET_INFO_MEMBER(supracan_state::get_supracan_tilemap2_tile_info)
+TILE_GET_INFO_MEMBER(supracan_state::get_tilemap2_tile_info)
{
- supracan_tilemap_get_info_common(2, tileinfo, tile_index);
+ get_tilemap_info_common(2, tileinfo, tile_index);
}
-TILE_GET_INFO_MEMBER(supracan_state::get_supracan_roz_tile_info)
+TILE_GET_INFO_MEMBER(supracan_state::get_roz_tile_info)
{
- supracan_tilemap_get_info_roz(3, tileinfo, tile_index);
+ get_roz_tilemap_info(3, tileinfo, tile_index);
}
@@ -427,25 +440,25 @@ void supracan_state::video_start()
m_gfxdecode->gfx(4)->set_source(&m_vram_addr_swapped[0]);
m_gfxdecode->gfx(4)->set_xormask(0);
- m_tilemap_sizes[0][0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_supracan_tilemap0_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
- m_tilemap_sizes[0][1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_supracan_tilemap0_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
- m_tilemap_sizes[0][2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_supracan_tilemap0_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 128, 32);
- m_tilemap_sizes[0][3] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_supracan_tilemap0_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
-
- m_tilemap_sizes[1][0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_supracan_tilemap1_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
- m_tilemap_sizes[1][1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_supracan_tilemap1_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
- m_tilemap_sizes[1][2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_supracan_tilemap1_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 128, 32);
- m_tilemap_sizes[1][3] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_supracan_tilemap1_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
-
- m_tilemap_sizes[2][0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_supracan_tilemap2_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
- m_tilemap_sizes[2][1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_supracan_tilemap2_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
- m_tilemap_sizes[2][2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_supracan_tilemap2_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 128, 32);
- m_tilemap_sizes[2][3] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_supracan_tilemap2_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
-
- m_tilemap_sizes[3][0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_supracan_roz_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
- m_tilemap_sizes[3][1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_supracan_roz_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
- m_tilemap_sizes[3][2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_supracan_roz_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 128, 32);
- m_tilemap_sizes[3][3] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_supracan_roz_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
+ m_tilemap_sizes[0][0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_tilemap0_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
+ m_tilemap_sizes[0][1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_tilemap0_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
+ m_tilemap_sizes[0][2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_tilemap0_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 128, 32);
+ m_tilemap_sizes[0][3] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_tilemap0_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
+
+ m_tilemap_sizes[1][0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_tilemap1_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
+ m_tilemap_sizes[1][1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_tilemap1_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
+ m_tilemap_sizes[1][2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_tilemap1_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 128, 32);
+ m_tilemap_sizes[1][3] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_tilemap1_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
+
+ m_tilemap_sizes[2][0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_tilemap2_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
+ m_tilemap_sizes[2][1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_tilemap2_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
+ m_tilemap_sizes[2][2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_tilemap2_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 128, 32);
+ m_tilemap_sizes[2][3] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_tilemap2_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
+
+ m_tilemap_sizes[3][0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_roz_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
+ m_tilemap_sizes[3][1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_roz_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
+ m_tilemap_sizes[3][2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_roz_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 128, 32);
+ m_tilemap_sizes[3][3] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_roz_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
}
int supracan_state::get_tilemap_dimensions(int &xsize, int &ysize, int layer)
@@ -477,7 +490,7 @@ int supracan_state::get_tilemap_dimensions(int &xsize, int &ysize, int layer)
return 3;
default:
- LOGMASKED(LOG_UNKNOWNS, "Unsupported tilemap size for layer %d: %04x\n", layer, select);
+ LOGMASKED(LOG_HFUNKNOWNS, "Unsupported tilemap size for layer %d: %04x\n", layer, select);
return 0;
}
}
@@ -951,7 +964,7 @@ void supracan_state::draw_roz_layer(bitmap_ind16 &bitmap, const rectangle &clipr
// Sango Fighter Intro: 03c8: 0000 0011 1100 1000 ----: ---- ---- ---- ---- 6c20 4620 ---- 0x01
// Sango Fighter Game: 03ce: 0000 0011 1100 1110 0622: 0000 0110 0010 0010 2620 4620 ---- 0x01
-uint32_t supracan_state::screen_update_supracan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+uint32_t supracan_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
// treat the sprites as frame-buffered and only update the buffer when drawing scanline 0 - this might not be true!
@@ -1015,7 +1028,7 @@ uint32_t supracan_state::screen_update_supracan(screen_device &screen, bitmap_in
// tilemap_num = layer;
int which_tilemap_size = get_tilemap_dimensions(xsize, ysize, layer);
bitmap_ind16 &src_bitmap = m_tilemap_sizes[layer][which_tilemap_size]->pixmap();
- int gfx_region = supracan_tilemap_get_region(layer);
+ int gfx_region = get_tilemap_Region(layer);
int transmask = 0xff;
switch (gfx_region)
@@ -1173,66 +1186,65 @@ uint32_t supracan_state::screen_update_supracan(screen_device &screen, bitmap_in
void supracan_state::dma_w(address_space &space, int offset, uint16_t data, uint16_t mem_mask, int ch)
{
- acan_dma_regs_t *acan_dma_regs = &m_acan_dma_regs;
address_space &mem = m_maincpu->space(AS_PROGRAM);
switch (offset)
{
case 0x00/2: // Source address MSW
LOGMASKED(LOG_DMA, "dma_w: source msw %d: %04x\n", ch, data);
- acan_dma_regs->source[ch] &= 0x0000ffff;
- acan_dma_regs->source[ch] |= data << 16;
+ m_dma_regs.source[ch] &= 0x0000ffff;
+ m_dma_regs.source[ch] |= data << 16;
break;
case 0x02/2: // Source address LSW
LOGMASKED(LOG_DMA, "dma_w: source lsw %d: %04x\n", ch, data);
- acan_dma_regs->source[ch] &= 0xffff0000;
- acan_dma_regs->source[ch] |= data;
+ m_dma_regs.source[ch] &= 0xffff0000;
+ m_dma_regs.source[ch] |= data;
break;
case 0x04/2: // Destination address MSW
LOGMASKED(LOG_DMA, "dma_w: dest msw %d: %04x\n", ch, data);
- acan_dma_regs->dest[ch] &= 0x0000ffff;
- acan_dma_regs->dest[ch] |= data << 16;
+ m_dma_regs.dest[ch] &= 0x0000ffff;
+ m_dma_regs.dest[ch] |= data << 16;
break;
case 0x06/2: // Destination address LSW
LOGMASKED(LOG_DMA, "dma_w: dest lsw %d: %04x\n", ch, data);
- acan_dma_regs->dest[ch] &= 0xffff0000;
- acan_dma_regs->dest[ch] |= data;
+ m_dma_regs.dest[ch] &= 0xffff0000;
+ m_dma_regs.dest[ch] |= data;
break;
case 0x08/2: // Byte count
LOGMASKED(LOG_DMA, "dma_w: count %d: %04x\n", ch, data);
- acan_dma_regs->count[ch] = data;
+ m_dma_regs.count[ch] = data;
break;
case 0x0a/2: // Control
LOGMASKED(LOG_DMA, "dma_w: control %d: %04x\n", ch, data);
- if(data & 0x8800)
+ if (data & 0x8800)
{
-// if(data & 0x2000)
-// acan_dma_regs->source-=2;
- LOGMASKED(LOG_DMA, "dma_w: Kicking off a DMA from %08x to %08x, %d bytes (%04x)\n", acan_dma_regs->source[ch], acan_dma_regs->dest[ch], acan_dma_regs->count[ch] + 1, data);
+// if (data & 0x2000)
+// m_dma_regs.source-=2;
+ LOGMASKED(LOG_DMA, "dma_w: Kicking off a DMA from %08x to %08x, %d bytes (%04x)\n", m_dma_regs.source[ch], m_dma_regs.dest[ch], m_dma_regs.count[ch] + 1, data);
- for (int i = 0; i <= acan_dma_regs->count[ch]; i++)
+ for (int i = 0; i <= m_dma_regs.count[ch]; i++)
{
if (data & 0x1000)
{
- mem.write_word(acan_dma_regs->dest[ch], mem.read_word(acan_dma_regs->source[ch]));
- acan_dma_regs->dest[ch] += 2;
- acan_dma_regs->source[ch] += 2;
+ mem.write_word(m_dma_regs.dest[ch], mem.read_word(m_dma_regs.source[ch]));
+ m_dma_regs.dest[ch] += 2;
+ m_dma_regs.source[ch] += 2;
if (data & 0x0100)
- if ((acan_dma_regs->dest[ch] & 0xf) == 0)
- acan_dma_regs->dest[ch] -= 0x10;
+ if ((m_dma_regs.dest[ch] & 0xf) == 0)
+ m_dma_regs.dest[ch] -= 0x10;
}
else
{
- mem.write_byte(acan_dma_regs->dest[ch], mem.read_byte(acan_dma_regs->source[ch]));
- acan_dma_regs->dest[ch]++;
- acan_dma_regs->source[ch]++;
+ mem.write_byte(m_dma_regs.dest[ch], mem.read_byte(m_dma_regs.source[ch]));
+ m_dma_regs.dest[ch]++;
+ m_dma_regs.source[ch]++;
}
}
}
else if (data != 0x0000) // fake DMA, used by C.U.G.
{
- LOGMASKED(LOG_UNKNOWNS | LOG_DMA, "dma_w: Unknown DMA kickoff value of %04x (other regs %08x, %08x, %d)\n", data, acan_dma_regs->source[ch], acan_dma_regs->dest[ch], acan_dma_regs->count[ch] + 1);
- fatalerror("dma_w: Unknown DMA kickoff value of %04x (other regs %08x, %08x, %d)\n",data, acan_dma_regs->source[ch], acan_dma_regs->dest[ch], acan_dma_regs->count[ch] + 1);
+ LOGMASKED(LOG_UNKNOWNS | LOG_DMA, "dma_w: Unknown DMA kickoff value of %04x (other regs %08x, %08x, %d)\n", data, m_dma_regs.source[ch], m_dma_regs.dest[ch], m_dma_regs.count[ch] + 1);
+ fatalerror("dma_w: Unknown DMA kickoff value of %04x (other regs %08x, %08x, %d)\n",data, m_dma_regs.source[ch], m_dma_regs.dest[ch], m_dma_regs.count[ch] + 1);
}
break;
default:
@@ -1289,10 +1301,6 @@ void supracan_state::supracan_mem(address_map &map)
{
// 0x000000..0x3fffff is mapped by the cartslot
map(0xe80000, 0xe8ffff).rw(FUNC(supracan_state::_68k_soundram_r), FUNC(supracan_state::_68k_soundram_w));
- map(0xe80200, 0xe80201).portr("P1");
- map(0xe80202, 0xe80203).portr("P2");
- map(0xe80208, 0xe80209).portr("P3");
- map(0xe8020c, 0xe8020d).portr("P4");
map(0xe90000, 0xe9001f).rw(FUNC(supracan_state::sound_r), FUNC(supracan_state::sound_w));
map(0xe90020, 0xe9002f).w(FUNC(supracan_state::dma_channel0_w));
map(0xe90030, 0xe9003f).w(FUNC(supracan_state::dma_channel1_w));
@@ -1303,51 +1311,64 @@ void supracan_state::supracan_mem(address_map &map)
map(0xfc0000, 0xfcffff).mirror(0x30000).ram(); /* System work ram */
}
+void supracan_state::set_sound_irq(uint8_t mask)
+{
+ const uint8_t old = m_soundcpu_irq_source;
+ m_soundcpu_irq_source |= mask;
+ const uint8_t changed = old ^ m_soundcpu_irq_source;
+ if (changed)
+ {
+ m_soundcpu->set_input_line(0, (m_soundcpu_irq_enable & m_soundcpu_irq_source) ? ASSERT_LINE : CLEAR_LINE);
+ }
+}
+
READ8_MEMBER(supracan_state::_6502_soundmem_r)
{
uint8_t data = m_soundram[offset];
switch (offset)
{
-#if SOUNDCPU_BOOT_HACK
- case 0x300: // HACK to make games think the sound CPU is always reporting 'OK'.
- return 0xff;
-#endif
-
- case 0x410: // Sound IRQ enable
- data = m_sound_irq_enable_reg;
+ case 0x300: // Boot OK status
+ break;
+ case 0x402:
+ case 0x403:
+ {
+ const uint8_t index = offset - 0x402;
+ data = m_sound_cpu_shift_regs[index];
if (!machine().side_effects_disabled())
{
- LOGMASKED(LOG_SOUND, "supracan_soundreg_r: IRQ enable: %04x\n", data);
- if (m_sound_irq_enable_reg & m_sound_irq_source_reg)
- {
- m_soundcpu->set_input_line(0, ASSERT_LINE);
- }
- else
- {
- m_soundcpu->set_input_line(0, CLEAR_LINE);
- }
+ LOGMASKED(LOG_SOUND, "%s: 6502_soundmem_r: Shift register %d read: %02x\n", machine().describe_context(), index, data);
+ }
+ break;
+ }
+ case 0x410:
+ data = m_soundcpu_irq_enable;
+ if (!machine().side_effects_disabled())
+ {
+ LOGMASKED(LOG_SOUND, "%s: 6502_soundmem_r: IRQ enable read: %02x\n", machine().describe_context(), data);
}
break;
- case 0x411: // Sound IRQ source
- data = m_sound_irq_source_reg;
- m_sound_irq_source_reg = 0;
+ case 0x411:
+ data = m_soundcpu_irq_source;
+ m_soundcpu_irq_source = 0;
if (!machine().side_effects_disabled())
{
- LOGMASKED(LOG_SOUND, "supracan_soundreg_r: IRQ enable: %04x\n", data);
+ LOGMASKED(LOG_SOUND, "%s: 6502_soundmem_r: Sound IRQ source read + clear: %02x\n", machine().describe_context(), data);
m_soundcpu->set_input_line(0, CLEAR_LINE);
}
break;
case 0x420:
if (!machine().side_effects_disabled())
{
- LOGMASKED(LOG_SOUND, "supracan_soundreg_r: Sound hardware status? (not yet implemented): %02x\n", 0);
+ data = m_sound_status;
+ LOGMASKED(LOG_SOUND, "%s: 6502_soundmem_r: Sound hardware status read: 0420 = %02x\n", machine().describe_context(), m_sound_status);
}
break;
case 0x422:
if (!machine().side_effects_disabled())
{
- LOGMASKED(LOG_SOUND, "supracan_soundreg_r: Sound hardware data? (not yet implemented): %02x\n", 0);
+ data = m_sound_regs[m_sound_reg_addr];
+ LOGMASKED(LOG_SOUND, "%s: 6502_soundmem_r: Sound hardware reg data read: 0422 = %02x\n", machine().describe_context(), data);
}
break;
case 0x404:
@@ -1361,7 +1382,7 @@ READ8_MEMBER(supracan_state::_6502_soundmem_r)
{
if (!machine().side_effects_disabled())
{
- LOGMASKED(LOG_SOUND | LOG_UNKNOWNS, "supracan_soundreg_r: Unknown register %04x\n", offset);
+ LOGMASKED(LOG_SOUND | LOG_UNKNOWNS, "%s: 6502_soundmem_r: Unknown register %04x (%02x)\n", machine().describe_context(), offset, data);
}
}
break;
@@ -1372,34 +1393,49 @@ READ8_MEMBER(supracan_state::_6502_soundmem_r)
WRITE8_MEMBER(supracan_state::_6502_soundmem_w)
{
- switch(offset)
+ switch (offset)
{
case 0x407:
- if (m_sound_cpu_68k_irq_reg &~ data)
- {
- LOGMASKED(LOG_SOUND | LOG_IRQS, "supracan_soundreg_w: sound_cpu_68k_irq_reg: %04x: Triggering M68k IRQ\n", data);
- m_maincpu->set_input_line(7, HOLD_LINE);
- }
- else
+ {
+ LOGMASKED(LOG_CONTROLS, "%s: 6502_soundmem_w: Shift register control: %02x\n", machine().describe_context(), data);
+ const uint8_t old = m_sound_cpu_shift_ctrl;
+ m_sound_cpu_shift_ctrl = data;
+ const uint8_t lowered = old & ~m_sound_cpu_shift_ctrl;
+ for (uint8_t pad = 0; pad < 2; pad++)
{
- LOGMASKED(LOG_SOUND | LOG_IRQS, "supracan_soundreg_w: sound_cpu_68k_irq_reg: %04x\n", data);
+ if (BIT(lowered, pad + 0))
+ {
+ m_latched_controls[pad] = m_pads[pad]->read();
+ }
+ if (BIT(lowered, pad + 2))
+ {
+ m_sound_cpu_shift_regs[pad] <<= 1;
+ m_sound_cpu_shift_regs[pad] |= BIT(m_latched_controls[pad], 15);
+ m_latched_controls[pad] <<= 1;
+ }
+ if (BIT(lowered, pad + 4))
+ {
+ m_sound_cpu_shift_regs[pad] = 0;
+ }
}
- m_sound_cpu_68k_irq_reg = data;
break;
+ }
case 0x410:
- m_sound_irq_enable_reg = data;
- LOGMASKED(LOG_SOUND | LOG_IRQS, "supracan_soundreg_w: IRQ enable: %02x\n", data);
+ m_soundcpu_irq_enable = data;
+ LOGMASKED(LOG_SOUND | LOG_IRQS, "%s: 6502_soundmem_w: IRQ enable: %02x\n", machine().describe_context(), data);
break;
case 0x420:
- LOGMASKED(LOG_SOUND, "supracan_soundreg_w: Sound hardware reg data? (not yet implemented): %02x\n", data);
+ LOGMASKED(LOG_SOUND, "%s: 6502_soundmem_w: Sound hardware reg addr write: 0420 = %02x\n", machine().describe_context(), data);
+ m_sound_reg_addr = data;
break;
case 0x422:
- LOGMASKED(LOG_SOUND, "supracan_soundreg_w: Sound hardware reg addr? (not yet implemented): %02x\n", data);
+ LOGMASKED(LOG_SOUND, "%s: 6502_soundmem_w: Sound hardware reg data write: 0422 = %02x\n", machine().describe_context(), data);
+ m_sound_regs[m_sound_reg_addr] = data;
break;
default:
if (offset >= 0x300 && offset < 0x500)
{
- LOGMASKED(LOG_SOUND | LOG_UNKNOWNS, "supracan_soundreg_w: Unknown register %04x = %02x\n", offset, data);
+ LOGMASKED(LOG_SOUND | LOG_UNKNOWNS, "%s: 6502_soundmem_w: Unknown register %04x = %02x\n", machine().describe_context(), offset, data);
}
m_soundram[offset] = data;
break;
@@ -1413,119 +1449,37 @@ void supracan_state::supracan_sound_mem(address_map &map)
static INPUT_PORTS_START( supracan )
PORT_START("P1")
- PORT_DIPNAME( 0x01, 0x00, "SYSTEM" )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x01, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x02, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x04, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x08, DEF_STR( On ) )
- PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_PLAYER(1) PORT_NAME("P1 Button R")
- PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_PLAYER(1) PORT_NAME("P1 Button L")
- PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_NAME("P1 Button Y")
- PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Button X")
- PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) PORT_NAME("P1 Joypad Right")
- PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) PORT_NAME("P1 Joypad Left")
- PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) PORT_NAME("P1 Joypad Down")
- PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1) PORT_NAME("P1 Joypad Up")
- PORT_DIPNAME( 0x1000, 0x0000, "SYSTEM" )
- PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x1000, DEF_STR( On ) )
- PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_START1 )
- PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("P1 Button B")
- PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 Button A")
+ PORT_BIT(0x000f, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x0010, IP_ACTIVE_LOW, IPT_BUTTON6) PORT_PLAYER(1) PORT_NAME("P1 Button R")
+ PORT_BIT(0x0020, IP_ACTIVE_LOW, IPT_BUTTON5) PORT_PLAYER(1) PORT_NAME("P1 Button L")
+ PORT_BIT(0x0040, IP_ACTIVE_LOW, IPT_BUTTON4) PORT_PLAYER(1) PORT_NAME("P1 Button Y")
+ PORT_BIT(0x0080, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_PLAYER(1) PORT_NAME("P1 Button X")
+ PORT_BIT(0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_PLAYER(1) PORT_NAME("P1 Joypad Right")
+ PORT_BIT(0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_PLAYER(1) PORT_NAME("P1 Joypad Left")
+ PORT_BIT(0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_PLAYER(1) PORT_NAME("P1 Joypad Down")
+ PORT_BIT(0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_PLAYER(1) PORT_NAME("P1 Joypad Up")
+ PORT_BIT(0x1000, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x2000, IP_ACTIVE_LOW, IPT_START1)
+ PORT_BIT(0x4000, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_PLAYER(1) PORT_NAME("P1 Button B")
+ PORT_BIT(0x8000, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(1) PORT_NAME("P1 Button A")
PORT_START("P2")
- PORT_DIPNAME( 0x01, 0x00, "SYSTEM" )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x01, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x02, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x04, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x08, DEF_STR( On ) )
- PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_PLAYER(2) PORT_NAME("P2 Button R")
- PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_PLAYER(2) PORT_NAME("P2 Button L")
- PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_PLAYER(2) PORT_NAME("P2 Button Y")
- PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 Button X")
- PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_NAME("P2 Joypad Right")
- PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_NAME("P2 Joypad Left")
- PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_NAME("P2 Joypad Down")
- PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_NAME("P2 Joypad Up")
- PORT_DIPNAME( 0x1000, 0x0000, "SYSTEM" )
- PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x1000, DEF_STR( On ) )
- PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_START2 )
- PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("P2 Button B")
- PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 Button A")
-
- PORT_START("P3")
- PORT_DIPNAME( 0x01, 0x00, "SYSTEM" )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x01, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x02, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x04, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x08, DEF_STR( On ) )
- PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_PLAYER(3) PORT_NAME("P3 Button R")
- PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_PLAYER(3) PORT_NAME("P3 Button L")
- PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_PLAYER(3) PORT_NAME("P3 Button Y")
- PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(3) PORT_NAME("P3 Button X")
- PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3) PORT_NAME("P3 Joypad Right")
- PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3) PORT_NAME("P3 Joypad Left")
- PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(3) PORT_NAME("P3 Joypad Down")
- PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(3) PORT_NAME("P3 Joypad Up")
- PORT_DIPNAME( 0x1000, 0x0000, "SYSTEM" )
- PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x1000, DEF_STR( On ) )
- PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_START3 )
- PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(3) PORT_NAME("P3 Button B")
- PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(3) PORT_NAME("P3 Button A")
-
- PORT_START("P4")
- PORT_DIPNAME( 0x01, 0x00, "SYSTEM" )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x01, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x02, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x04, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x08, DEF_STR( On ) )
- PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_PLAYER(4) PORT_NAME("P4 Button R")
- PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_PLAYER(4) PORT_NAME("P4 Button L")
- PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_PLAYER(4) PORT_NAME("P4 Button Y")
- PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(4) PORT_NAME("P4 Button X")
- PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(4) PORT_NAME("P4 Joypad Right")
- PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(4) PORT_NAME("P4 Joypad Left")
- PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(4) PORT_NAME("P4 Joypad Down")
- PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(4) PORT_NAME("P4 Joypad Up")
- PORT_DIPNAME( 0x1000, 0x0000, "SYSTEM" )
- PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x1000, DEF_STR( On ) )
- PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_START4 )
- PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(4) PORT_NAME("P4 Button B")
- PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(4) PORT_NAME("P4 Button A")
+ PORT_BIT(0x000f, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x0010, IP_ACTIVE_LOW, IPT_BUTTON6) PORT_PLAYER(2) PORT_NAME("P2 Button R")
+ PORT_BIT(0x0020, IP_ACTIVE_LOW, IPT_BUTTON5) PORT_PLAYER(2) PORT_NAME("P2 Button L")
+ PORT_BIT(0x0040, IP_ACTIVE_LOW, IPT_BUTTON4) PORT_PLAYER(2) PORT_NAME("P2 Button Y")
+ PORT_BIT(0x0080, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_PLAYER(2) PORT_NAME("P2 Button X")
+ PORT_BIT(0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_PLAYER(2) PORT_NAME("P2 Joypad Right")
+ PORT_BIT(0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_PLAYER(2) PORT_NAME("P2 Joypad Left")
+ PORT_BIT(0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_PLAYER(2) PORT_NAME("P2 Joypad Down")
+ PORT_BIT(0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_PLAYER(2) PORT_NAME("P2 Joypad Up")
+ PORT_BIT(0x1000, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x2000, IP_ACTIVE_LOW, IPT_START2)
+ PORT_BIT(0x4000, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_PLAYER(2) PORT_NAME("P2 Button B")
+ PORT_BIT(0x8000, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(2) PORT_NAME("P2 Button A")
INPUT_PORTS_END
-void supracan_state::supracan_palette(palette_device &palette) const
+void supracan_state::palette_init(palette_device &palette) const
{
// Used for debugging purposes for now
for (int i = 0; i < 32768; i++)
@@ -1554,28 +1508,30 @@ WRITE16_MEMBER(supracan_state::_68k_soundram_w)
_6502_soundmem_w(mem, offset * 2 + 1, data & 0xff);
}
}
+ LOGMASKED(LOG_68K_SOUND, "%s: 68k sound RAM write: %04x & %04x = %04x\n", machine().describe_context(), offset << 1, mem_mask, (uint16_t)data);
}
READ16_MEMBER(supracan_state::_68k_soundram_r)
{
address_space &mem = m_maincpu->space(AS_PROGRAM);
- uint16_t val = m_soundram[offset * 2] << 8;
- val |= m_soundram[offset * 2 + 1];
+ uint16_t data = m_soundram[offset * 2] << 8;
+ data |= m_soundram[offset * 2 + 1];
if (offset * 2 >= 0x300 && offset * 2 < 0x500)
{
- val = 0;
+ data = 0;
if (ACCESSING_BITS_8_15)
{
- val |= _6502_soundmem_r(mem, offset * 2) << 8;
+ data |= _6502_soundmem_r(mem, offset * 2) << 8;
}
if (ACCESSING_BITS_0_7)
{
- val |= _6502_soundmem_r(mem, offset * 2 + 1);
+ data |= _6502_soundmem_r(mem, offset * 2 + 1);
}
}
+ //LOGMASKED(LOG_68K_SOUND, "%s: 68k sound RAM read: %04x & %04x (%04x)\n", machine().describe_context(), offset << 1, mem_mask, data);
- return val;
+ return data;
}
READ16_MEMBER(supracan_state::sound_r)
@@ -1597,30 +1553,34 @@ WRITE16_MEMBER(supracan_state::sound_w)
switch (offset)
{
case 0x000a/2: /* Sound cpu IRQ request. */
- m_soundcpu->set_input_line(0, ASSERT_LINE);
+ LOGMASKED(LOG_SOUND, "%s: Sound CPU IRQ request: %04x\n", machine().describe_context(), data);
+ set_sound_irq(0x20);
+ //m_soundcpu->set_input_line(0, ASSERT_LINE);
break;
case 0x001c/2: /* Sound cpu control. Bit 0 tied to sound cpu RESET line */
- if (data & 0x01)
+ {
+ const uint16_t old = m_sound_cpu_ctrl;
+ m_sound_cpu_ctrl = data;
+ const uint16_t changed = old ^ m_sound_cpu_ctrl;
+ if (BIT(changed, 0))
{
- if (!m_m6502_reset)
+ if (BIT(m_sound_cpu_ctrl, 0))
{
/* Reset and enable the sound cpu */
-#if !(SOUNDCPU_BOOT_HACK)
m_soundcpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
m_soundcpu->reset();
-#endif
}
- m_m6502_reset = data & 0x01;
- }
- else
- {
- /* Halt the sound cpu */
- m_soundcpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
+ else
+ {
+ /* Halt the sound cpu */
+ m_soundcpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
+ }
}
- LOGMASKED(LOG_SOUND, "sound cpu ctrl: %04x\n", data);
+ LOGMASKED(LOG_SOUND, "%s: Sound CPU ctrl write: %04x\n", machine().describe_context(), data);
break;
+ }
default:
- LOGMASKED(LOG_SOUND | LOG_UNKNOWNS, "sound_w: Unknown register: %08x = %04x & %04x\n", 0xe90000 + (offset << 1), data, mem_mask);
+ LOGMASKED(LOG_SOUND | LOG_UNKNOWNS, "%s: sound_w: Unknown register: %08x = %04x & %04x\n", machine().describe_context(), 0xe90000 + (offset << 1), data, mem_mask);
break;
}
}
@@ -1640,9 +1600,10 @@ READ16_MEMBER(supracan_state::video_r)
}
break;
case 0x02/2: // Current scanline
+ LOGMASKED(LOG_VIDEO, "read current scanline (%04x)\n", data);
break;
case 0x08/2: // Unknown (not video flags!) - gambling lord disagrees, it MUST read back what it wrote because it reads it before turning on/off layers and writes it back
- //data = 0;
+ LOGMASKED(LOG_VIDEO, "read unkown 0x08 (%04x)\n", data);
break;
case 0x100/2:
if (!machine().side_effects_disabled())
@@ -1673,28 +1634,28 @@ READ16_MEMBER(supracan_state::video_r)
return data;
}
-TIMER_CALLBACK_MEMBER(supracan_state::supracan_hbl_callback)
+TIMER_CALLBACK_MEMBER(supracan_state::hbl_callback)
{
m_maincpu->set_input_line(3, HOLD_LINE);
m_hbl_timer->adjust(attotime::never);
}
-TIMER_CALLBACK_MEMBER(supracan_state::supracan_line_on_callback)
+TIMER_CALLBACK_MEMBER(supracan_state::line_on_callback)
{
m_maincpu->set_input_line(5, HOLD_LINE);
m_line_on_timer->adjust(attotime::never);
}
-TIMER_CALLBACK_MEMBER(supracan_state::supracan_line_off_callback)
+TIMER_CALLBACK_MEMBER(supracan_state::line_off_callback)
{
m_maincpu->set_input_line(5, CLEAR_LINE);
m_line_on_timer->adjust(attotime::never);
}
-TIMER_CALLBACK_MEMBER(supracan_state::supracan_video_callback)
+TIMER_CALLBACK_MEMBER(supracan_state::video_callback)
{
int vpos = m_screen->vpos();
@@ -1734,7 +1695,6 @@ TIMER_CALLBACK_MEMBER(supracan_state::supracan_video_callback)
WRITE16_MEMBER(supracan_state::video_w)
{
address_space &mem = m_maincpu->space(AS_PROGRAM);
- acan_sprdma_regs_t *acan_sprdma_regs = &m_acan_sprdma_regs;
// if any of this changes we need a partial update (see sango fighters intro)
m_screen->update_partial(m_screen->vpos());
@@ -1746,65 +1706,65 @@ WRITE16_MEMBER(supracan_state::video_w)
{
case 0x10/2: // Byte count
LOGMASKED(LOG_SPRDMA, "sprite dma word count: %04x\n", data);
- acan_sprdma_regs->count = data;
+ m_sprdma_regs.count = data;
break;
case 0x12/2: // Destination address MSW
- acan_sprdma_regs->dst &= 0x0000ffff;
- acan_sprdma_regs->dst |= data << 16;
+ m_sprdma_regs.dst &= 0x0000ffff;
+ m_sprdma_regs.dst |= data << 16;
LOGMASKED(LOG_SPRDMA, "sprite dma dest msw: %04x\n", data);
break;
case 0x14/2: // Destination address LSW
- acan_sprdma_regs->dst &= 0xffff0000;
- acan_sprdma_regs->dst |= data;
+ m_sprdma_regs.dst &= 0xffff0000;
+ m_sprdma_regs.dst |= data;
LOGMASKED(LOG_SPRDMA, "sprite dma dest lsw: %04x\n", data);
break;
case 0x16/2: // Source word increment
LOGMASKED(LOG_SPRDMA, "sprite dma dest word inc: %04x\n", data);
- acan_sprdma_regs->dst_inc = data;
+ m_sprdma_regs.dst_inc = data;
break;
case 0x18/2: // Source address MSW
- acan_sprdma_regs->src &= 0x0000ffff;
- acan_sprdma_regs->src |= data << 16;
+ m_sprdma_regs.src &= 0x0000ffff;
+ m_sprdma_regs.src |= data << 16;
LOGMASKED(LOG_SPRDMA, "sprite dma src msw: %04x\n", data);
break;
case 0x1a/2: // Source address LSW
LOGMASKED(LOG_SPRDMA, "sprite dma src lsw: %04x\n", data);
- acan_sprdma_regs->src &= 0xffff0000;
- acan_sprdma_regs->src |= data;
+ m_sprdma_regs.src &= 0xffff0000;
+ m_sprdma_regs.src |= data;
break;
case 0x1c/2: // Source word increment
LOGMASKED(LOG_SPRDMA, "sprite dma src word inc: %04x\n", data);
- acan_sprdma_regs->src_inc = data;
+ m_sprdma_regs.src_inc = data;
break;
case 0x1e/2:
- LOGMASKED(LOG_SPRDMA, "video_w: Kicking off a DMA from %08x to %08x, %d bytes (%04x)\n", acan_sprdma_regs->src, acan_sprdma_regs->dst, acan_sprdma_regs->count, data);
+ LOGMASKED(LOG_SPRDMA, "video_w: Kicking off a DMA from %08x to %08x, %d bytes (%04x)\n", m_sprdma_regs.src, m_sprdma_regs.dst, m_sprdma_regs.count, data);
/* TODO: what's 0x2000 and 0x4000 for? */
if (data & 0x8000)
{
if (data & 0x2000 || data & 0x4000)
{
- acan_sprdma_regs->dst |= 0xf40000;
+ m_sprdma_regs.dst |= 0xf40000;
}
if (data & 0x2000)
{
- //acan_sprdma_regs->count <<= 1;
+ //m_sprdma_regs.count <<= 1;
}
- for (int i = 0; i <= acan_sprdma_regs->count; i++)
+ for (int i = 0; i <= m_sprdma_regs.count; i++)
{
if (data & 0x0100) // dma 0x00 fill (or fixed value?)
{
- mem.write_word(acan_sprdma_regs->dst, 0);
- acan_sprdma_regs->dst += 2 * acan_sprdma_regs->dst_inc;
+ mem.write_word(m_sprdma_regs.dst, 0);
+ m_sprdma_regs.dst += 2 * m_sprdma_regs.dst_inc;
//memset(supracan_vram, 0x00, 0x020000);
}
else
{
- mem.write_word(acan_sprdma_regs->dst, mem.read_word(acan_sprdma_regs->src));
- acan_sprdma_regs->dst += 2 * acan_sprdma_regs->dst_inc;
- acan_sprdma_regs->src += 2 * acan_sprdma_regs->src_inc;
+ mem.write_word(m_sprdma_regs.dst, mem.read_word(m_sprdma_regs.src));
+ m_sprdma_regs.dst += 2 * m_sprdma_regs.dst_inc;
+ m_sprdma_regs.src += 2 * m_sprdma_regs.src_inc;
}
}
}
@@ -1814,8 +1774,10 @@ WRITE16_MEMBER(supracan_state::video_w)
}
break;
case 0x08/2:
+ if (data != m_video_flags)
{
- LOGMASKED(LOG_HFVIDEO, "video_flags = %04x\n", data);
+ LOGMASKED(LOG_VIDEO, "video_flags = %04x\n", data);
+
m_video_flags = data;
rectangle visarea = m_screen->visible_area();
@@ -1930,10 +1892,64 @@ DEVICE_IMAGE_LOAD_MEMBER(supracan_state::cart_load)
void supracan_state::machine_start()
{
- m_video_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(supracan_state::supracan_video_callback), this));
- m_hbl_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(supracan_state::supracan_hbl_callback), this));
- m_line_on_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(supracan_state::supracan_line_on_callback), this));
- m_line_off_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(supracan_state::supracan_line_off_callback), this));
+ save_item(NAME(m_dma_regs.source));
+ save_item(NAME(m_dma_regs.dest));
+ save_item(NAME(m_dma_regs.count));
+ save_item(NAME(m_dma_regs.control));
+
+ save_item(NAME(m_sprdma_regs.src));
+ save_item(NAME(m_sprdma_regs.src_inc));
+ save_item(NAME(m_sprdma_regs.dst));
+ save_item(NAME(m_sprdma_regs.dst_inc));
+ save_item(NAME(m_sprdma_regs.count));
+ save_item(NAME(m_sprdma_regs.control));
+
+ save_item(NAME(m_sound_cpu_ctrl));
+ save_item(NAME(m_soundcpu_irq_enable));
+ save_item(NAME(m_soundcpu_irq_source));
+ save_item(NAME(m_sound_cpu_shift_ctrl));
+ save_item(NAME(m_sound_cpu_shift_regs));
+ save_item(NAME(m_latched_controls));
+ save_item(NAME(m_sound_status));
+ save_item(NAME(m_sound_reg_addr));
+ save_item(NAME(m_sound_regs));
+
+ save_item(NAME(m_sprite_count));
+ save_item(NAME(m_sprite_base_addr));
+ save_item(NAME(m_sprite_flags));
+
+ save_item(NAME(m_tilemap_base_addr));
+ save_item(NAME(m_tilemap_scrollx));
+ save_item(NAME(m_tilemap_scrolly));
+ save_item(NAME(m_video_flags));
+ save_item(NAME(m_tilemap_flags));
+ save_item(NAME(m_tilemap_mode));
+ save_item(NAME(m_irq_mask));
+#if 0
+ save_item(NAME(m_hbl_mask));
+#endif
+
+ save_item(NAME(m_roz_base_addr));
+ save_item(NAME(m_roz_mode));
+ save_item(NAME(m_roz_scrollx));
+ save_item(NAME(m_roz_scrolly));
+ save_item(NAME(m_roz_tile_bank));
+ save_item(NAME(m_roz_unk_base0));
+ save_item(NAME(m_roz_unk_base1));
+ save_item(NAME(m_roz_unk_base2));
+ save_item(NAME(m_roz_coeffa));
+ save_item(NAME(m_roz_coeffb));
+ save_item(NAME(m_roz_coeffc));
+ save_item(NAME(m_roz_coeffd));
+ save_item(NAME(m_roz_changed));
+ save_item(NAME(m_unk_1d0));
+
+ save_item(NAME(m_video_regs));
+
+ m_video_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(supracan_state::video_callback), this));
+ m_hbl_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(supracan_state::hbl_callback), this));
+ m_line_on_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(supracan_state::line_on_callback), this));
+ m_line_off_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(supracan_state::line_off_callback), this));
if (m_cart->exists())
m_maincpu->space(AS_PROGRAM).install_read_handler(0x000000, 0x3fffff, read16s_delegate(FUNC(generic_slot_device::read16_rom),(generic_slot_device*)m_cart));
@@ -1942,6 +1958,20 @@ void supracan_state::machine_start()
void supracan_state::machine_reset()
{
+ m_sprite_count = 0;
+ m_sprite_base_addr = 0;
+ m_sprite_flags = 0;
+
+ m_sound_cpu_ctrl = 0;
+ m_soundcpu_irq_enable = 0;
+ m_soundcpu_irq_source = 0;
+ m_sound_cpu_shift_ctrl = 0;
+ memset(m_sound_cpu_shift_regs, 0, ARRAY_LENGTH(m_sound_cpu_shift_regs));
+ memset(m_latched_controls, 0, sizeof(uint16_t) * ARRAY_LENGTH(m_latched_controls));
+ m_sound_status = 0;
+ m_sound_reg_addr = 0;
+ memset(m_sound_regs, 0, ARRAY_LENGTH(m_sound_regs));
+
m_soundcpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
m_video_timer->adjust(m_screen->time_until_pos(0, 0));
@@ -2030,51 +2060,29 @@ static GFXDECODE_START( gfx_supracan )
GFXDECODE_RAM( "vram", 0, supracan_gfx1bpp_alt, 0, 0x80 )
GFXDECODE_END
-INTERRUPT_GEN_MEMBER(supracan_state::supracan_irq)
-{
-#if 0
- if(m_irq_mask)
- {
- device.execute().set_input_line(7, HOLD_LINE);
- }
-#endif
-}
-
-INTERRUPT_GEN_MEMBER(supracan_state::supracan_sound_irq)
+INTERRUPT_GEN_MEMBER(supracan_state::sound_irq)
{
- m_sound_irq_source_reg |= 0x80;
-
- if(m_sound_irq_enable_reg & m_sound_irq_source_reg)
- {
- m_soundcpu->set_input_line(0, ASSERT_LINE);
- }
- else
- {
- m_soundcpu->set_input_line(0, CLEAR_LINE);
- }
+ set_sound_irq(0x80);
}
void supracan_state::supracan(machine_config &config)
{
M68000(config, m_maincpu, XTAL(10'738'635)); /* Correct frequency unknown */
m_maincpu->set_addrmap(AS_PROGRAM, &supracan_state::supracan_mem);
- m_maincpu->set_vblank_int("screen", FUNC(supracan_state::supracan_irq));
M6502(config, m_soundcpu, XTAL(3'579'545)); /* TODO: Verify actual clock */
m_soundcpu->set_addrmap(AS_PROGRAM, &supracan_state::supracan_sound_mem);
- m_soundcpu->set_vblank_int("screen", FUNC(supracan_state::supracan_sound_irq));
+ m_soundcpu->set_vblank_int("screen", FUNC(supracan_state::sound_irq));
-#if !(SOUNDCPU_BOOT_HACK)
config.m_perfect_cpu_quantum = subtag("maincpu");
config.m_perfect_cpu_quantum = subtag("soundcpu");
-#endif
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_raw(XTAL(10'738'635)/2, 348, 0, 256, 256, 0, 240); /* No idea if this is correct */
- m_screen->set_screen_update(FUNC(supracan_state::screen_update_supracan));
+ m_screen->set_screen_update(FUNC(supracan_state::screen_update));
m_screen->set_palette("palette");
- PALETTE(config, "palette", FUNC(supracan_state::supracan_palette)).set_format(palette_device::xBGR_555, 32768);
+ PALETTE(config, "palette", FUNC(supracan_state::palette_init)).set_format(palette_device::xBGR_555, 32768);
GFXDECODE(config, m_gfxdecode, "palette", gfx_supracan);
diff --git a/src/mame/drivers/sv8000.cpp b/src/mame/drivers/sv8000.cpp
index 290be9e8908..b9df9809820 100644
--- a/src/mame/drivers/sv8000.cpp
+++ b/src/mame/drivers/sv8000.cpp
@@ -101,7 +101,7 @@ private:
void sv8000_state::sv8000_mem(address_map &map)
{
map.unmap_value_high();
- //AM_RANGE(0x0000, 0x0fff) // mapped by the cartslot
+ //map(0x0000, 0x0fff) // mapped by the cartslot
map(0x8000, 0x83ff).ram(); // Work RAM??
map(0xc000, 0xcbff).ram().share("videoram");
}
diff --git a/src/mame/drivers/svision.cpp b/src/mame/drivers/svision.cpp
index d16f7fef2f2..306cb19d494 100644
--- a/src/mame/drivers/svision.cpp
+++ b/src/mame/drivers/svision.cpp
@@ -558,7 +558,7 @@ void svision_state::tvlinkp(machine_config &config)
svisionp(config);
m_maincpu->set_addrmap(AS_PROGRAM, address_map_constructor(&std::remove_pointer_t<decltype(this)>::tvlink_mem, tag(), this));
- m_screen->set_palette(finder_base::DUMMY_TAG);
+ m_screen->set_no_palette();
m_screen->set_screen_update(FUNC(svision_state::screen_update_tvlink));
MCFG_MACHINE_RESET_OVERRIDE(svision_state, tvlink)
diff --git a/src/mame/drivers/swtpc8212.cpp b/src/mame/drivers/swtpc8212.cpp
new file mode 100644
index 00000000000..cb648e08b09
--- /dev/null
+++ b/src/mame/drivers/swtpc8212.cpp
@@ -0,0 +1,124 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/****************************************************************************
+
+ Skeleton driver for Southwest Technical Products video terminal.
+
+****************************************************************************/
+
+#include "emu.h"
+//#include "bus/rs232/rs232.h"
+#include "cpu/m6800/m6800.h"
+#include "machine/6821pia.h"
+#include "machine/input_merger.h"
+#include "machine/ins8250.h"
+#include "video/mc6845.h"
+#include "screen.h"
+
+
+class swtpc8212_state : public driver_device
+{
+public:
+ swtpc8212_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_chargen(*this, "chargen")
+ {
+ }
+
+ void swtpc8212(machine_config &mconfig);
+
+private:
+ MC6845_UPDATE_ROW(update_row);
+
+ void mem_map(address_map &map);
+
+ required_device<cpu_device> m_maincpu;
+ required_region_ptr<u8> m_chargen;
+};
+
+MC6845_UPDATE_ROW(swtpc8212_state::update_row)
+{
+}
+
+
+void swtpc8212_state::mem_map(address_map &map)
+{
+ map(0x0000, 0x007f).ram();
+ map(0x0080, 0x0083).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0088, 0x0088).w("crtc", FUNC(mc6845_device::address_w));
+ map(0x0089, 0x0089).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
+ map(0x0090, 0x0097).rw("uart", FUNC(ins8250_device::ins8250_r), FUNC(ins8250_device::ins8250_w));
+ map(0x0098, 0x009b).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x4800, 0x4fff).ram();
+ map(0xb800, 0xbfff).rom().region("program", 0);
+ map(0xc000, 0xc7ff).mirror(0x3800).rom().region("program", 0x800);
+}
+
+
+static INPUT_PORTS_START(swtpc8212)
+ PORT_START("DSW")
+ PORT_DIPNAME(0x01, 0x00, DEF_STR(Unknown))
+ PORT_DIPSETTING(0x01, DEF_STR(Off))
+ PORT_DIPSETTING(0x00, DEF_STR(On))
+ PORT_DIPNAME(0x02, 0x00, DEF_STR(Unknown))
+ PORT_DIPSETTING(0x02, DEF_STR(Off))
+ PORT_DIPSETTING(0x00, DEF_STR(On))
+ PORT_DIPNAME(0x04, 0x00, DEF_STR(Unknown))
+ PORT_DIPSETTING(0x04, DEF_STR(Off))
+ PORT_DIPSETTING(0x00, DEF_STR(On))
+ PORT_DIPNAME(0x08, 0x00, DEF_STR(Unknown))
+ PORT_DIPSETTING(0x08, DEF_STR(Off))
+ PORT_DIPSETTING(0x00, DEF_STR(On))
+ PORT_DIPNAME(0x10, 0x00, DEF_STR(Unknown))
+ PORT_DIPSETTING(0x10, DEF_STR(Off))
+ PORT_DIPSETTING(0x00, DEF_STR(On))
+ PORT_DIPNAME(0x20, 0x00, DEF_STR(Unknown))
+ PORT_DIPSETTING(0x20, DEF_STR(Off))
+ PORT_DIPSETTING(0x00, DEF_STR(On))
+ PORT_DIPNAME(0x40, 0x00, DEF_STR(Unknown))
+ PORT_DIPSETTING(0x40, DEF_STR(Off))
+ PORT_DIPSETTING(0x00, DEF_STR(On))
+ PORT_DIPNAME(0x80, 0x00, DEF_STR(Unknown))
+ PORT_DIPSETTING(0x80, DEF_STR(Off))
+ PORT_DIPSETTING(0x00, DEF_STR(On))
+INPUT_PORTS_END
+
+void swtpc8212_state::swtpc8212(machine_config &config)
+{
+ M6802(config, m_maincpu, 1.8432_MHz_XTAL);
+ m_maincpu->set_addrmap(AS_PROGRAM, &swtpc8212_state::mem_map);
+
+ INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, M6802_IRQ_LINE);
+
+ pia6821_device &pia0(PIA6821(config, "pia0"));
+ pia0.irqa_handler().set("mainirq", FUNC(input_merger_device::in_w<0>));
+ pia0.irqb_handler().set("mainirq", FUNC(input_merger_device::in_w<1>));
+
+ PIA6821(config, "pia1");
+
+ ins8250_device &uart(INS8250(config, "uart", 1.8432_MHz_XTAL));
+ uart.out_int_callback().set("mainirq", FUNC(input_merger_device::in_w<2>));
+
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(17.0748_MHz_XTAL, 918, 0, 738, 310, 0, 280);
+ screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update));
+
+ mc6845_device &crtc(MC6845(config, "crtc", 17.0748_MHz_XTAL / 9));
+ crtc.set_char_width(9);
+ crtc.set_screen("screen");
+ crtc.set_show_border_area(false);
+ crtc.set_update_row_callback(FUNC(swtpc8212_state::update_row), this);
+}
+
+
+ROM_START( swtpc8212 ) // MC6802P, 2xMC6821P, INS8250N, MCM66750, MC6845P, bank of 8 dips, crystals 17.0748 (video), 1.8432 (cpu/uart). On the back is a 25-pin RS-232 port, and a 25-pin printer port.
+ ROM_REGION( 0x1000, "program", 0 )
+ ROM_LOAD( "8224g_ver.1.1_6oct80.ic1", 0x0000, 0x0800, CRC(7d7f3c21) SHA1(f7e6e20b36a1c724a4e348bc784d0b7b5fb462a3) )
+ ROM_LOAD( "8224g_ver.1.1_6oct80.ic2", 0x0800, 0x0800, CRC(2b118c22) SHA1(5fa031c834c7c582d5715764941499fcef51f477) )
+
+ ROM_REGION( 0x0800, "chargen", 0 )
+ ROM_LOAD( "grafix_8x12_22aug80.bin", 0x0000, 0x0800, CRC(a525ed65) SHA1(813d2e85ddb258c5b032b959e695ad33200cbcc4) )
+ROM_END
+
+COMP(1980, swtpc8212, 0, 0, swtpc8212, swtpc8212, swtpc8212_state, empty_init, "Southwest Technical Products", "SWTPC 8212 Video Terminal", MACHINE_IS_SKELETON)
diff --git a/src/mame/drivers/symbolics.cpp b/src/mame/drivers/symbolics.cpp
index b6dea132f95..0bfd2db59a1 100644
--- a/src/mame/drivers/symbolics.cpp
+++ b/src/mame/drivers/symbolics.cpp
@@ -251,18 +251,18 @@ currently dies at context switch code loaded to ram around 38EE0, see patent 488
void symbolics_state::m68k_mem(address_map &map)
{
map.unmap_value_high();
- //AM_RANGE(0x000000, 0x01ffff) AM_ROM /* ROM lives here */
+ //map(0x000000, 0x01ffff).rom(); /* ROM lives here */
map(0x000000, 0x00bfff).rom();
// 0x00c000-0x00ffff is open bus but decoded/auto-DTACKed, does not cause bus error
map(0x010000, 0x01bfff).rom();
// 0x01c000-0x01ffff is open bus but decoded/auto-DTACKed, does not cause bus error
map(0x020000, 0x03ffff).ram().region("fepdram", 0); /* Local FEP ram seems to be here? there are 18 mcm4164s on the pcb which probably map here, plus 2 parity bits? */
- //AM_RANGE(0x020000, 0x03ffff) AM_READWRITE(ram_parity_hack_r, ram_parity_hack_w)
- //AM_RANGE(0x020002, 0x03ffff) AM_RAM AM_REGION("fepdram", 0) /* Local FEP ram seems to be here? there are 18 mcm4164s on the pcb which probably map here, plus 2 parity bits? */
+ //map(0x020000, 0x03ffff).rw(FUNC(symbolics_state::ram_parity_hack_r), FUNC(symbolics_state::ram_parity_hack_w));
+ //map(0x020002, 0x03ffff).ram().region("fepdram", 0); /* Local FEP ram seems to be here? there are 18 mcm4164s on the pcb which probably map here, plus 2 parity bits? */
// 2x AM9128-10PC 2048x8 SRAMs @F7 and @G7 map somewhere
// 6x AM2148-50 1024x4bit SRAMs @F22-F27 map somewhere
- //AM_RANGE(0x040000, 0xffffff) AM_READ(buserror_r);
- //AM_RANGE(0x800000, 0xffffff) AM_RAM /* paged access to lispm ram? */
+ //map(0x040000, 0xffffff).r(FUNC(symbolics_state::buserror_r));
+ //map(0x800000, 0xffffff).ram(); /* paged access to lispm ram? */
//FF00B0 is readable, may be to read the MC/SQ/DP/AU continuity lines?
map(0xff00a0, 0xff00bf).rom().region("fep_paddle_prom",0);
map(0xff00c0, 0xff00df).rom().region("fep_prom",0);
diff --git a/src/mame/drivers/sys9002.cpp b/src/mame/drivers/sys9002.cpp
index 8015eb12407..2c768b2cdee 100644
--- a/src/mame/drivers/sys9002.cpp
+++ b/src/mame/drivers/sys9002.cpp
@@ -64,8 +64,8 @@ void sys9002_state::sys9002_io(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
- //AM_RANGE(0x04, 0x04) AM_DEVREADWRITE("crtc", mc6845_device, status_r, address_w) // left commented out as mame freezes after about 2 seconds
- //AM_RANGE(0x05, 0x05) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
+ //map(0x04, 0x04).rw("crtc", FUNC(mc6845_device::status_r), FUNC(mc6845_device::address_w)); // left commented out as mame freezes after about 2 seconds
+ //map(0x05, 0x05).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
map(0x08, 0x09).rw("uart1", FUNC(i8251_device::read), FUNC(i8251_device::write));
map(0x11, 0x11).nopr(); // continuous read
map(0x1c, 0x1d).rw("uart2", FUNC(i8251_device::read), FUNC(i8251_device::write));
diff --git a/src/mame/drivers/taito_f2.cpp b/src/mame/drivers/taito_f2.cpp
index 9e5964ede5f..9ec71f01788 100644
--- a/src/mame/drivers/taito_f2.cpp
+++ b/src/mame/drivers/taito_f2.cpp
@@ -772,7 +772,7 @@ void taitof2_state::ssi_map(address_map &map)
map(0x300000, 0x301fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x400000, 0x400000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x400002, 0x400002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
-// AM_RANGE(0x500000, 0x500001) AM_WRITENOP /* ?? */
+// map(0x500000, 0x500001).nopw(); /* ?? */
map(0x600000, 0x60ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps (not used) */
map(0x620000, 0x62000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x800000, 0x80ffff).ram().share("spriteram"); /* sprite ram */
@@ -789,7 +789,7 @@ void taitof2_state::gunfront_map(address_map &map)
map(0x800000, 0x80ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x820000, 0x82000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x900000, 0x90ffff).ram().share("spriteram");
-// AM_RANGE(0xa00000, 0xa00001) AM_WRITENOP /* ?? */
+// map(0xa00000, 0xa00001).nopw(); /* ?? */
map(0xb00000, 0xb0001f).w(m_tc0360pri, FUNC(tc0360pri_device::write)).umask16(0x00ff); /* ?? */
}
@@ -941,7 +941,7 @@ void taitof2_state::pulirula_map(address_map &map)
map(0x300000, 0x30ffff).ram();
map(0x400000, 0x401fff).rw(m_tc0430grw, FUNC(tc0280grd_device::tc0430grw_word_r), FUNC(tc0280grd_device::tc0430grw_word_w)); /* ROZ tilemap */
map(0x402000, 0x40200f).w(m_tc0430grw, FUNC(tc0280grd_device::tc0430grw_ctrl_word_w));
-// AM_RANGE(0x500000, 0x500001) AM_WRITENOP /* ??? */
+// map(0x500000, 0x500001).nopw(); /* ??? */
map(0x600000, 0x603fff).w(FUNC(taitof2_state::sprite_extension_w)).share("sprite_ext");
map(0x700000, 0x701fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x800000, 0x80ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
@@ -956,7 +956,7 @@ void taitof2_state::metalb_map(address_map &map)
map(0x000000, 0x0bffff).rom();
map(0x100000, 0x10ffff).ram();
map(0x300000, 0x30ffff).ram().share("spriteram");
-// AM_RANGE(0x42000c, 0x42000f) AM_WRITENOP /* zeroed */
+// map(0x42000c, 0x42000f).nopw(); /* zeroed */
map(0x500000, 0x50ffff).rw(m_tc0480scp, FUNC(tc0480scp_device::ram_r), FUNC(tc0480scp_device::ram_w)); /* tilemaps */
map(0x530000, 0x53002f).rw(m_tc0480scp, FUNC(tc0480scp_device::ctrl_r), FUNC(tc0480scp_device::ctrl_w));
map(0x600000, 0x60001f).w(m_tc0360pri, FUNC(tc0360pri_device::write)).umask16(0x00ff);
@@ -964,7 +964,7 @@ void taitof2_state::metalb_map(address_map &map)
map(0x800000, 0x80000f).rw(m_tc0510nio, FUNC(tc0510nio_device::halfword_wordswap_r), FUNC(tc0510nio_device::halfword_wordswap_w));
map(0x900000, 0x900000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x900002, 0x900002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
-// AM_RANGE(0xa00000, 0xa00001) AM_WRITENOP /* ??? */
+// map(0xa00000, 0xa00001).nopw(); /* ??? */
}
void taitof2_state::qzchikyu_map(address_map &map)
@@ -1007,7 +1007,7 @@ void taitof2_state::deadconx_map(address_map &map)
map(0x200000, 0x20ffff).ram().share("spriteram");
map(0x300000, 0x30000f).w(FUNC(taitof2_state::spritebank_w));
map(0x400000, 0x40ffff).rw(m_tc0480scp, FUNC(tc0480scp_device::ram_r), FUNC(tc0480scp_device::ram_w)); /* tilemaps */
-// AM_RANGE(0x42000c, 0x42000f) AM_WRITENOP /* zeroed */
+// map(0x42000c, 0x42000f).nopw(); /* zeroed */
map(0x430000, 0x43002f).rw(m_tc0480scp, FUNC(tc0480scp_device::ctrl_r), FUNC(tc0480scp_device::ctrl_w));
map(0x500000, 0x50001f).w(m_tc0360pri, FUNC(tc0360pri_device::write)).umask16(0x00ff); /* uses 500002 like a watchdog !? */
map(0x600000, 0x601fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
@@ -1053,7 +1053,7 @@ void taitof2_state::qcrayon_map(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x100000, 0x10ffff).ram();
-// AM_RANGE(0x200000, 0x200001) AM_WRITENOP /* unknown */
+// map(0x200000, 0x200001).nopw(); /* unknown */
map(0x300000, 0x3fffff).rom().region("extra", 0); /* extra data rom */
map(0x500000, 0x500000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x500002, 0x500002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
@@ -1146,7 +1146,7 @@ void taitof2_state::cameltrya_sound_map(address_map &map)
map(0x9000, 0x9001).rw("ymsnd", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
map(0xa000, 0xa000).w("ciu", FUNC(pc060ha_device::slave_port_w));
map(0xa001, 0xa001).rw("ciu", FUNC(pc060ha_device::slave_comm_r), FUNC(pc060ha_device::slave_comm_w));
-// AM_RANGE(0xb000, 0xb000) AM_WRITE(unknown_w) // probably controlling sample player?
+// map(0xb000, 0xb000).w(FUNC(taitof2_state::unknown_w)); // probably controlling sample player?
map(0xb000, 0xb001).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
}
diff --git a/src/mame/drivers/taito_l.cpp b/src/mame/drivers/taito_l.cpp
index 4adcc20ea02..f6482ccdab9 100644
--- a/src/mame/drivers/taito_l.cpp
+++ b/src/mame/drivers/taito_l.cpp
@@ -541,7 +541,7 @@ void taitol_1cpu_state::puzznici_map(address_map &map)
map(0xa000, 0xa003).r(FUNC(taitol_1cpu_state::extport_select_and_ym2203_r)).w(m_ymsnd, FUNC(ym2203_device::write));
map(0xa800, 0xa800).nopr(); // Watchdog
map(0xb801, 0xb801).r(FUNC(taitol_1cpu_state::mcu_control_r));
-// AM_RANGE(0xb801, 0xb801) AM_WRITE(mcu_control_w)
+// map(0xb801, 0xb801).w(FUNC(taitol_1cpu_state::mcu_control_w));
map(0xbc00, 0xbc00).nopw(); // Control register, function unknown
}
diff --git a/src/mame/drivers/taitowlf.cpp b/src/mame/drivers/taitowlf.cpp
index b9f848692a8..08c135b56b6 100644
--- a/src/mame/drivers/taitowlf.cpp
+++ b/src/mame/drivers/taitowlf.cpp
@@ -286,7 +286,7 @@ void taitowlf_state::taitowlf_map(address_map &map)
map(0x000f0000, 0x000fffff).bankr("bank1");
map(0x000f0000, 0x000fffff).w(FUNC(taitowlf_state::bios_ram_w));
map(0x00100000, 0x01ffffff).ram();
-// AM_RANGE(0xf8000000, 0xf83fffff) AM_ROM AM_REGION("user3", 0)
+// map(0xf8000000, 0xf83fffff).rom().region("user3", 0);
map(0xfffc0000, 0xffffffff).rom().region("bios", 0); /* System BIOS */
}
diff --git a/src/mame/drivers/tandy2k.cpp b/src/mame/drivers/tandy2k.cpp
index 6392b9d1101..e14a900204e 100644
--- a/src/mame/drivers/tandy2k.cpp
+++ b/src/mame/drivers/tandy2k.cpp
@@ -392,9 +392,9 @@ void tandy2k_state::tandy2k_io(address_map &map)
void tandy2k_state::tandy2k_hd_io(address_map &map)
{
tandy2k_io(map);
-// AM_RANGE(0x000e0, 0x000ff) AM_WRITE8(hdc_dack_w, 0x00ff)
-// AM_RANGE(0x0026c, 0x0026d) AM_DEVREADWRITE8(WD1010_TAG, wd1010_device, hdc_reset_r, hdc_reset_w, 0x00ff)
-// AM_RANGE(0x0026e, 0x0027f) AM_DEVREADWRITE8(WD1010_TAG, wd1010_device, wd1010_r, wd1010_w, 0x00ff)
+// map(0x000e0, 0x000ff).w(FUNC(tandy2k_state::hdc_dack_w).umask16(0x00ff));
+// map(0x0026c, 0x0026c).rw(WD1010_TAG, FUNC(wd1010_device::hdc_reset_r), FUNC(wd1010_device::hdc_reset_w));
+// map(0x0026e, 0x0027e).rw(WD1010_TAG, FUNC(wd1010_device::wd1010_r), FUNC(wd1010_device::wd1010_w));
}
void tandy2k_state::vpac_mem(address_map &map)
diff --git a/src/mame/drivers/tankbust.cpp b/src/mame/drivers/tankbust.cpp
index 75fd2e791a7..5476548e37b 100644
--- a/src/mame/drivers/tankbust.cpp
+++ b/src/mame/drivers/tankbust.cpp
@@ -204,7 +204,7 @@ void tankbust_state::main_map(address_map &map)
map(0xe803, 0xe803).rw(FUNC(tankbust_state::some_changing_input), FUNC(tankbust_state::soundlatch_w)); /*unknown. Game expects this to change so this is not player input */
map(0xe804, 0xe804).nopw(); /* watchdog ? ; written in long-lasting loops */
map(0xf000, 0xf7ff).ram();
- //AM_RANGE(0xf800, 0xffff) AM_READ(read_from_unmapped_memory) /* a bug in game code ? */
+ //map(0xf800, 0xffff).r(FUNC(tankbust_state::read_from_unmapped_memory)); /* a bug in game code ? */
}
void tankbust_state::port_map_cpu2(address_map &map)
diff --git a/src/mame/drivers/targeth.cpp b/src/mame/drivers/targeth.cpp
index 3afa4def461..1a2fd35e41a 100644
--- a/src/mame/drivers/targeth.cpp
+++ b/src/mame/drivers/targeth.cpp
@@ -125,13 +125,13 @@ WRITE_LINE_MEMBER(targeth_state::coin2_counter_w)
WRITE8_MEMBER(targeth_state::shareram_w)
{
- // why isn't there an AM_SOMETHING macro for this?
+ // why isn't there address map functionality for this?
reinterpret_cast<u8 *>(m_shareram.target())[BYTE_XOR_BE(offset)] = data;
}
READ8_MEMBER(targeth_state::shareram_r)
{
- // why isn't there an AM_SOMETHING macro for this?
+ // why isn't there address map functionality for this?
return reinterpret_cast<u8 const *>(m_shareram.target())[BYTE_XOR_BE(offset)];
}
diff --git a/src/mame/drivers/tatsumi.cpp b/src/mame/drivers/tatsumi.cpp
index 5dde0a4d1bf..c74c4e3807d 100644
--- a/src/mame/drivers/tatsumi.cpp
+++ b/src/mame/drivers/tatsumi.cpp
@@ -1017,13 +1017,13 @@ void cyclwarr_state::cyclwarr(machine_config &config)
// saner sync value (avoids crashing after crediting)
config.m_minimum_quantum = attotime::from_hz(CLOCK_2 / 1024);
- cxd1095_device &io1(CXD1095(config, "io1", 0));
+ cxd1095_device &io1(CXD1095(config, "io1"));
io1.in_portb_cb().set_ioport("SERVICE");
io1.in_portc_cb().set_ioport("P1");
io1.in_portd_cb().set_ioport("P2");
io1.in_porte_cb().set_ioport("DSW3");
- cxd1095_device &io2(CXD1095(config, "io2", 0));
+ cxd1095_device &io2(CXD1095(config, "io2"));
io2.in_porta_cb().set_ioport("DSW1");
io2.in_portb_cb().set_ioport("DSW2");
io2.in_portc_cb().set_ioport("P3");
diff --git a/src/mame/drivers/taxidriv.cpp b/src/mame/drivers/taxidriv.cpp
index 6bf0855e29b..0afed3f42b1 100644
--- a/src/mame/drivers/taxidriv.cpp
+++ b/src/mame/drivers/taxidriv.cpp
@@ -129,7 +129,7 @@ void taxidriv_state::main_map(address_map &map)
map(0xf480, 0xf483).rw("ppi8255_2", FUNC(i8255_device::read), FUNC(i8255_device::write)); /* "sprite1" placement */
map(0xf500, 0xf503).rw("ppi8255_3", FUNC(i8255_device::read), FUNC(i8255_device::write)); /* "sprite2" placement */
map(0xf580, 0xf583).rw("ppi8255_4", FUNC(i8255_device::read), FUNC(i8255_device::write)); /* "sprite3" placement */
- //AM_RANGE(0xf780, 0xf781) AM_WRITEONLY /* more scroll registers? */
+ //map(0xf780, 0xf781).writeonly(); /* more scroll registers? */
map(0xf782, 0xf787).writeonly().share("scroll"); /* bg scroll (three copies always identical) */
map(0xf800, 0xffff).ram();
}
diff --git a/src/mame/drivers/tbowl.cpp b/src/mame/drivers/tbowl.cpp
index 39cf16715fc..2aeef2b04a6 100644
--- a/src/mame/drivers/tbowl.cpp
+++ b/src/mame/drivers/tbowl.cpp
@@ -64,23 +64,23 @@ void tbowl_state::_6206B_map(address_map &map)
map(0xa000, 0xbfff).ram().w(FUNC(tbowl_state::bg2videoram_w)).share("bg2videoram");
map(0xc000, 0xdfff).ram().w(FUNC(tbowl_state::bgvideoram_w)).share("bgvideoram");
map(0xe000, 0xefff).ram().w(FUNC(tbowl_state::txvideoram_w)).share("txvideoram");
-// AM_RANGE(0xf000, 0xf000) AM_WRITE(unknown_write) * written during start-up, not again */
+// map(0xf000, 0xf000).w(FUNC(tbowl_state::unknown_write)); * written during start-up, not again */
map(0xf000, 0xf7ff).bankr("mainbank");
map(0xf800, 0xfbff).ram().share("shared_ram"); /* check */
map(0xfc00, 0xfc00).portr("P1").w(FUNC(tbowl_state::boardb_bankswitch_w));
map(0xfc01, 0xfc01).portr("P2");
-// AM_RANGE(0xfc01, 0xfc01) AM_WRITE(unknown_write) /* written during start-up, not again */
+// map(0xfc01, 0xfc01).w(FUNC(tbowl_state::unknown_write)); /* written during start-up, not again */
map(0xfc02, 0xfc02).portr("P3");
-// AM_RANGE(0xfc02, 0xfc02) AM_WRITE(unknown_write) /* written during start-up, not again */
+// map(0xfc02, 0xfc02).w(FUNC(tbowl_state::unknown_write)); /* written during start-up, not again */
map(0xfc03, 0xfc03).portr("P4").w(FUNC(tbowl_state::coincounter_w));
-// AM_RANGE(0xfc05, 0xfc05) AM_WRITE(unknown_write) /* no idea */
-// AM_RANGE(0xfc06, 0xfc06) AM_READ(dummy_r) /* Read During NMI */
+// map(0xfc05, 0xfc05).w(FUNC(tbowl_state::unknown_write)); /* no idea */
+// map(0xfc06, 0xfc06).r(FUNC(tbowl_state::dummy_r)); /* Read During NMI */
map(0xfc07, 0xfc07).portr("SYSTEM");
map(0xfc08, 0xfc08).portr("DSW1");
-// AM_RANGE(0xfc08, 0xfc08) AM_WRITE(unknown_write) /* hardly used .. */
+// map(0xfc08, 0xfc08).w(FUNC(tbowl_state::unknown_write)); /* hardly used .. */
map(0xfc09, 0xfc09).portr("DSW2");
map(0xfc0a, 0xfc0a).portr("DSW3");
-// AM_RANGE(0xfc0a, 0xfc0a) AM_WRITE(unknown_write) /* hardly used .. */
+// map(0xfc0a, 0xfc0a).w(FUNC(tbowl_state::unknown_write)); /* hardly used .. */
map(0xfc0d, 0xfc0d).w(m_soundlatch, FUNC(generic_latch_8_device::write));
map(0xfc10, 0xfc10).w(FUNC(tbowl_state::bg2xscroll_lo));
map(0xfc11, 0xfc11).w(FUNC(tbowl_state::bg2xscroll_hi));
diff --git a/src/mame/drivers/tdv2324.cpp b/src/mame/drivers/tdv2324.cpp
index bb0bd3abf13..5a194e6b5da 100644
--- a/src/mame/drivers/tdv2324.cpp
+++ b/src/mame/drivers/tdv2324.cpp
@@ -138,8 +138,8 @@ void tdv2324_state::tdv2324_mem(address_map &map)
map(0x0000, 0x07ff).mirror(0x0800).rom().region(P8085AH_0_TAG, 0);
/* when copying code to 4000 area it runs right off the end of rom;
* I'm not sure if its supposed to mirror or read as open bus */
-// AM_RANGE(0x4000, 0x5fff) AM_RAM // 0x4000 has the boot code copied to it, 5fff and down are the stack
-// AM_RANGE(0x6000, 0x6fff) AM_RAM // used by the relocated boot code; shared?
+// map(0x4000, 0x5fff).ram(); // 0x4000 has the boot code copied to it, 5fff and down are the stack
+// map(0x6000, 0x6fff).ram(); // used by the relocated boot code; shared?
map(0x0800, 0xffff).ram();
}
@@ -150,16 +150,16 @@ void tdv2324_state::tdv2324_mem(address_map &map)
void tdv2324_state::tdv2324_io(address_map &map)
{
- //ADDRESS_MAP_GLOBAL_MASK(0xff)
+ //map.global_mask(0xff);
/* 0x30 is read by main code and if high bit isn't set at some point it will never get anywhere */
/* e0, e2, e8, ea are written to */
/* 30, e6 and e2 are readable */
map(0x30, 0x30).r(FUNC(tdv2324_state::tdv2324_main_io_30));
-// AM_RANGE(0xe2, 0xe2) AM_WRITE(tdv2324_main_io_e2) console output
+// map(0xe2, 0xe2).w(FUNC(tdv2324_state::tdv2324_main_io_e2)); console output
map(0xe6, 0xe6).r(FUNC(tdv2324_state::tdv2324_main_io_e6));
-// AM_RANGE(0x, 0x) AM_DEVREADWRITE(P8253_5_0_TAG, pit8253_device, read, write)
-// AM_RANGE(0x, 0x) AM_DEVREADWRITE(MK3887N4_TAG, z80dart_device, ba_cd_r, ba_cd_w)
-// AM_RANGE(0x, 0x) AM_DEVREADWRITE(P8259A_TAG, pic8259_device, read, write)
+// map(0x, 0x).rw(P8253_5_0_TAG, FUNC(pit8253_device::read), FUNC(pit8253_device::write));
+// map(0x, 0x).rw(MK3887N4_TAG, FUNC(z80dart_device::ba_cd_r), FUNC(z80dart_device::ba_cd_w));
+// map(0x, 0x).rw(P8259A_TAG, FUNC(pic8259_device::read), FUNC(pic8259_device::write));
}
@@ -182,7 +182,7 @@ void tdv2324_state::tdv2324_sub_mem(address_map &map)
void tdv2324_state::tdv2324_sub_io(address_map &map)
{
- //ADDRESS_MAP_GLOBAL_MASK(0xff)
+ //map.global_mask(0xff);
/* 20, 23, 30-36, 38, 3a, 3c, 3e, 60, 70 are written to */
map(0x20, 0x23).rw(m_pit1, FUNC(pit8253_device::read), FUNC(pit8253_device::write));
map(0x30, 0x3f).rw(m_tms, FUNC(tms9927_device::read), FUNC(tms9927_device::write)); // TODO: this is supposed to be a 9937, which is not quite the same as 9927
@@ -196,10 +196,10 @@ void tdv2324_state::tdv2324_sub_io(address_map &map)
void tdv2324_state::tdv2324_fdc_mem(address_map &map)
{
// the following two are probably enabled/disabled via the JP2 jumper block next to the fdc cpu
- //AM_RANGE(0x0000, 0x001f) AM_RAM // on-6802-die ram (optionally battery backed)
- //AM_RANGE(0x0020, 0x007f) AM_RAM // on-6802-die ram
+ //map(0x0000, 0x001f).ram(); // on-6802-die ram (optionally battery backed)
+ //map(0x0020, 0x007f).ram(); // on-6802-die ram
map(0x0000, 0x07ff).ram(); // TMM2016AP-12 @ U14, tested with A5,5A pattern
- //AM_RANGE(0x1000, 0x17ff) AM_RAM // TMM2016AP-12 @ U80, address is wrong
+ //map(0x1000, 0x17ff).ram(); // TMM2016AP-12 @ U80, address is wrong
// the 3xxx area appears to be closely involved in fdc or other i/o
// in particular, reads from 30xx, 38xx, 3Cxx may be actually writes to certain fdc registers with data xx?
// 0x2101 is something writable
diff --git a/src/mame/drivers/tec1.cpp b/src/mame/drivers/tec1.cpp
index 54a01131419..59a548d0acb 100644
--- a/src/mame/drivers/tec1.cpp
+++ b/src/mame/drivers/tec1.cpp
@@ -366,8 +366,8 @@ void tec1_state::tecjmon_io(address_map &map)
map(0x01, 0x01).w(FUNC(tec1_state::tecjmon_digit_w));
map(0x02, 0x02).w(FUNC(tec1_state::tec1_segment_w));
map(0x03, 0x03).r(FUNC(tec1_state::latch_r));
- //AM_RANGE(0x04, 0x04) AM_WRITE(lcd_en_w)
- //AM_RANGE(0x84, 0x84) AM_WRITE(lcd_2nd_w)
+ //map(0x04, 0x04).w(FUNC(tec1_state::lcd_en_w));
+ //map(0x84, 0x84).w(FUNC(tec1_state::lcd_2nd_w));
}
diff --git a/src/mame/drivers/tecmosys.cpp b/src/mame/drivers/tecmosys.cpp
index 1f91865a89b..4f081da5348 100644
--- a/src/mame/drivers/tecmosys.cpp
+++ b/src/mame/drivers/tecmosys.cpp
@@ -309,7 +309,7 @@ void tecmosys_state::main_map(address_map &map)
map(0x800000, 0x80ffff).ram().share("spriteram"); // obj ram
map(0x880000, 0x88000b).r(FUNC(tecmosys_state::unk880000_r));
map(0x880000, 0x88002f).w(FUNC(tecmosys_state::unk880000_w)).share("880000regs"); // 10 byte dta@88000c, 880022=watchdog?
- map(0x900000, 0x907fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // AM_WRITEONLY // obj pal
+ map(0x900000, 0x907fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // .writeonly(); // obj pal
//map(0x980000, 0x9807ff).writeonly(); // bg pal
//map(0x980800, 0x980fff).w(FUNC(tecmosys_state::paletteram_xGGGGGRRRRRBBBBB_word_w)).share("paletteram"); // fix pal
diff --git a/src/mame/drivers/tek405x.cpp b/src/mame/drivers/tek405x.cpp
index db9a2572ac1..46b12281e6c 100644
--- a/src/mame/drivers/tek405x.cpp
+++ b/src/mame/drivers/tek405x.cpp
@@ -149,11 +149,11 @@ void tek4051_state::tek4051_mem(address_map &map)
map(0x87a8, 0x87ab).rw(MC6820_KB_TAG, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0x87b0, 0x87b3).rw(m_gpib_pia, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0x87c0, 0x87c0).mirror(0x03).w(FUNC(tek4051_state::lbs_w));
-// AM_RANGE(0x87c0, 0x87c3) AM_DEVREADWRITE(MC6820_COM_TAG, pia6821_device, read, write)
-// AM_RANGE(0x87c4, 0x87c5) AM_MIRROR(0x02) AM_DEVREADWRITE(MC6850_TAG, acia6850_device, read, write)
-// AM_RANGE(0x87c8, 0x87cb) XPC2
-// AM_RANGE(0x87cc, 0x87cf) XPC3
-// AM_RANGE(0x87d0, 0x87d3) XPC4
+// map(0x87c0, 0x87c3).rw(MC6820_COM_TAG, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+// map(0x87c4, 0x87c5).mirror(0x02).rw(MC6850_TAG, FUNC(acia6850_device::read), FUNC(acia6850_device::write));
+// map(0x87c8, 0x87cb) XPC2
+// map(0x87cc, 0x87cf) XPC3
+// map(0x87d0, 0x87d3) XPC4
map(0x8800, 0xa7ff).rom().region(MC6800_TAG, 0x800);
map(0xa800, 0xffff).rom().region(MC6800_TAG, 0x2800);
}
diff --git a/src/mame/drivers/terminal.cpp b/src/mame/drivers/terminal.cpp
index c4328586587..618e97de484 100644
--- a/src/mame/drivers/terminal.cpp
+++ b/src/mame/drivers/terminal.cpp
@@ -87,16 +87,6 @@ ROM_START( 7951om ) // TTL (no cpu) // 1k x 6bits display ram 64-characters uppe
ROM_END
-ROM_START( swtpc8212 ) // MC6802P, 2xMC6821P, INS8250N, MCM66750, MC6845P, bank of 8 dips, crystals 17.0748 (video), 1.8432 (cpu/uart). On the back is a 25-pin RS-232 port, and a 25-pin printer port.
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "8224g_ver.1.1_6oct80.ic1", 0xf000, 0x0800, CRC(7d7f3c21) SHA1(f7e6e20b36a1c724a4e348bc784d0b7b5fb462a3) )
- ROM_LOAD( "8224g_ver.1.1_6oct80.ic2", 0xf800, 0x0800, CRC(2b118c22) SHA1(5fa031c834c7c582d5715764941499fcef51f477) )
-
- ROM_REGION( 0x0800, "chargen", 0 )
- ROM_LOAD( "grafix_8x12_22aug80.bin", 0x0000, 0x0800, CRC(a525ed65) SHA1(813d2e85ddb258c5b032b959e695ad33200cbcc4) )
-ROM_END
-
-
ROM_START( teleguide ) // order unknown // i8051, i8031 (layout very similar to loewed) // 64k ram + battery-backed nvram // b&w
ROM_REGION( 0x38000, "maincpu", 0 )
ROM_LOAD( "cardreader_17044-068_349-1163.bin", 0x00000, 0x10000, CRC(3c980c0d) SHA1(9904ffd283a11defbe3daf2cb9029bcead8b02d0) )
@@ -112,5 +102,4 @@ COMP( 1991, alcat258, 0, 0, terminal, terminal, terminal_state, empty
COMP( 1992, loewed, 0, 0, terminal, terminal, terminal_state, empty_init, "Loewe", "Multitel D", MACHINE_IS_SKELETON )
COMP( 1988, loewe715, 0, 0, terminal, terminal, terminal_state, empty_init, "Loewe", "Multicom 715L", MACHINE_IS_SKELETON )
COMP( 1987, 7951om, 0, 0, terminal, terminal, terminal_state, empty_init, "Mera-Elzab", "7951om", MACHINE_IS_SKELETON )
-COMP( 1980, swtpc8212, 0, 0, terminal, terminal, terminal_state, empty_init, "Southwest Technical Products Corporation", "SWTPC 8212", MACHINE_IS_SKELETON )
COMP( 1992, teleguide, 0, 0, terminal, terminal, terminal_state, empty_init, "Loewe / Televerket", "Teleguide", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/tg100.cpp b/src/mame/drivers/tg100.cpp
index 57be0fd52b9..e75d6512851 100644
--- a/src/mame/drivers/tg100.cpp
+++ b/src/mame/drivers/tg100.cpp
@@ -62,7 +62,7 @@ void tg100_state::tg100_map(address_map &map)
void tg100_state::tg100_io_map(address_map &map)
{
-// ADDRESS_MAP_GLOBAL_MASK(0xff)
+// map.global_mask(0xff);
}
static INPUT_PORTS_START( tg100 )
diff --git a/src/mame/drivers/thomson.cpp b/src/mame/drivers/thomson.cpp
index 41e35d7a86a..5a06205469e 100644
--- a/src/mame/drivers/thomson.cpp
+++ b/src/mame/drivers/thomson.cpp
@@ -395,21 +395,25 @@ void thomson_state::to7_map(address_map &map)
ROM_START ( to7 )
- ROM_REGION ( 0x20000, "maincpu", 0 )
+ ROM_REGION ( 0x10000, "maincpu", 0 )
ROM_LOAD ( "to7.rom", 0xe800, 0x1800,
CRC(0e7826da)
SHA1(23a2f84b03c01d385cc1923c8ece95c43756297a) )
- ROM_FILL ( 0x10000, 0x10000, 0x39 )
+
+ ROM_REGION ( 0x10000, "cartridge", 0 )
+ ROM_FILL ( 0x00000, 0x10000, 0x39 )
ROM_FLOPPY7
ROM_END
ROM_START ( t9000 )
- ROM_REGION ( 0x20000, "maincpu", 0 )
+ ROM_REGION ( 0x10000, "maincpu", 0 )
ROM_LOAD ( "t9000.rom", 0xe800, 0x1800,
CRC(daa8cfbf)
SHA1(a5735db1ad4e529804fc46603f838d3f4ccaf5cf) )
- ROM_FILL ( 0x10000, 0x10000, 0x39 )
+
+ ROM_REGION ( 0x10000, "cartridge", 0 )
+ ROM_FILL ( 0x00000, 0x10000, 0x39 )
ROM_FLOPPY7
ROM_END
@@ -672,7 +676,7 @@ void thomson_state::to7_base(machine_config &config)
m_cassette->set_interface("to_cass");
/* floppy */
- THMFC1(config, m_thmfc, 0);
+ THMFC1(config, m_thmfc, 16_MHz_XTAL);
m_thmfc->floppy_active_cb().set(FUNC(thomson_state::thom_floppy_active));
MC6843(config, m_mc6843, 16_MHz_XTAL / 16 / 2);
@@ -863,21 +867,25 @@ void thomson_state::to770_map(address_map &map)
/* ------------ ROMS ------------ */
ROM_START ( to770 )
- ROM_REGION ( 0x20000, "maincpu", 0 )
+ ROM_REGION ( 0x10000, "maincpu", 0 )
ROM_LOAD ( "to770.rom", 0xe800, 0x1800, /* BIOS */
CRC(89518862)
SHA1(cd34474c0bcc758f6d71c90fbd40cef379d61374) )
- ROM_FILL ( 0x10000, 0x10000, 0x39 )
+
+ ROM_REGION ( 0x10000, "cartridge", 0 )
+ ROM_FILL ( 0x00000, 0x10000, 0x39 )
ROM_FLOPPY7
ROM_END
ROM_START ( to770a )
- ROM_REGION ( 0x20000, "maincpu", 0 )
+ ROM_REGION ( 0x10000, "maincpu", 0 )
ROM_LOAD ( "to770a.rom", 0xe800, 0x1800,
CRC(378ea808)
SHA1(f4575b537dfdb46ff2a0e7cbe8dfe4ba63161b8e) )
- ROM_FILL ( 0x10000, 0x10000, 0x39 )
+
+ ROM_REGION ( 0x10000, "cartridge", 0 )
+ ROM_FILL ( 0x00000, 0x10000, 0x39 )
ROM_FLOPPY7
ROM_END
@@ -1061,7 +1069,7 @@ void thomson_state::mo5_map(address_map &map)
/* ------------ ROMS ------------ */
ROM_START ( mo5 )
- ROM_REGION ( 0x20000, "maincpu", 0 )
+ ROM_REGION ( 0x14000, "maincpu", 0 )
ROM_LOAD ( "mo5.rom", 0xf000, 0x1000,
CRC(f0ea9140)
SHA1(36ce2d3df1866ec2fe368c1c28757e2f5401cf44) )
@@ -1069,11 +1077,14 @@ ROM_START ( mo5 )
CRC(c2c11b9d)
SHA1(512dd40fb45bc2b51a24c84b3723a32bc8e80c06) )
+ ROM_REGION ( 0x10000, "cartridge", 0 )
+ ROM_FILL( 0x00000, 0x10000, 0x39 )
+
ROM_FLOPPY5
ROM_END
ROM_START ( mo5e )
- ROM_REGION ( 0x20000, "maincpu", 0 )
+ ROM_REGION ( 0x14000, "maincpu", 0 )
ROM_LOAD ( "mo5e.rom", 0xf000, 0x1000,
CRC(6520213a)
SHA1(f17a7a59baf2819ec80991b34b204795536a5e01) )
@@ -1081,6 +1092,9 @@ ROM_START ( mo5e )
CRC(934a72b2)
SHA1(b37e2b1afbfba368c19be87b3bf61dfe6ad8b0bb) )
+ ROM_REGION ( 0x10000, "cartridge", 0 )
+ ROM_FILL( 0x00000, 0x10000, 0x39 )
+
ROM_FLOPPY5
ROM_END
@@ -1261,7 +1275,7 @@ void thomson_state::to9_map(address_map &map)
map(0xe7de, 0xe7df).rw(FUNC(thomson_state::to9_kbd_r), FUNC(thomson_state::to9_kbd_w));
map(0xe7e4, 0xe7e7).rw(FUNC(thomson_state::to9_gatearray_r), FUNC(thomson_state::to9_gatearray_w));
map(0xe7e8, 0xe7eb).rw("acia", FUNC(mos6551_device::read), FUNC(mos6551_device::write));
-/* AM_RANGE ( 0xe7f0, 0xe7f7 ) AM_READWRITE(to9_ieee_r, to9_ieee_w ) */
+/* map(0xe7f0, 0xe7f7).rw(FUNC(thomson_state::to9_ieee_r), FUNC(thomson_state::to9_ieee_w )); */
map(0xe7f2, 0xe7f3).rw(FUNC(thomson_state::to7_midi_r), FUNC(thomson_state::to7_midi_w));
map(0xe7f8, 0xe7fb).rw("pia_3", FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt));
map(0xe7fe, 0xe7ff).rw(FUNC(thomson_state::to7_modem_mea8000_r), FUNC(thomson_state::to7_modem_mea8000_w));
@@ -1289,38 +1303,39 @@ void thomson_state::to9_map(address_map &map)
*/
ROM_START ( to9 )
- ROM_REGION ( 0x40000, "maincpu", 0 )
+ ROM_REGION ( 0x30000, "maincpu", 0 )
ROM_LOAD ( "to9.rom", 0xe000, 0x2000, /* BIOS & floppy controller */
CRC(f9278bf7)
SHA1(9e99e6ae0285950f007b19161de642a4031fe46e) )
/* BASIC & software */
- ROM_LOAD ( "basic9-0.rom", 0x20000, 0x4000,
+ ROM_LOAD ( "basic9-0.rom", 0x10000, 0x4000,
CRC(c7bac620)
SHA1(4b2a8b30cf437858ce978ba7b0dfa2bbd57eb38a) )
- ROM_LOAD ( "basic9-1.rom", 0x24000, 0x4000,
+ ROM_LOAD ( "basic9-1.rom", 0x14000, 0x4000,
CRC(ea5f3e43)
SHA1(5e58a29c2d117fcdb1f5e7ca31dbfffa0f9218f2) )
- ROM_LOAD ( "basic9-2.rom", 0x28000, 0x4000,
+ ROM_LOAD ( "basic9-2.rom", 0x18000, 0x4000,
CRC(0f5581b3)
SHA1(93815ca78d3532192aaa56cbf65b68b0f10f1b8a) )
- ROM_LOAD ( "basic9-3.rom", 0x2c000, 0x4000,
+ ROM_LOAD ( "basic9-3.rom", 0x1c000, 0x4000,
CRC(6b5b19e3)
SHA1(0e832670c185694d9abbcebcc3ad90e94eed585d) )
- ROM_LOAD ( "soft9-0a.rom", 0x30000, 0x4000,
+ ROM_LOAD ( "soft9-0a.rom", 0x20000, 0x4000,
CRC(8cee157e)
SHA1(f32fc39b95890c00571e9f3fbcc2d8e0596fc4a1) )
- ROM_LOAD ( "soft9-1a.rom", 0x34000, 0x4000,
+ ROM_LOAD ( "soft9-1a.rom", 0x24000, 0x4000,
CRC(cf39ac93)
SHA1(b97e6b7389398e5706624973c11ee7ddba323ce1) )
- ROM_LOAD ( "soft9-0b.rom", 0x38000, 0x4000,
+ ROM_LOAD ( "soft9-0b.rom", 0x28000, 0x4000,
CRC(033aee3f)
SHA1(f3604e500329ec0489b05dbab05530322e9463c5) )
- ROM_LOAD ( "soft9-1b.rom", 0x3c000, 0x4000,
+ ROM_LOAD ( "soft9-1b.rom", 0x2c000, 0x4000,
CRC(214fe527)
SHA1(0d8e3f1ca347026e906c3d00a0371e8238c44a60) )
- ROM_FILL( 0x10000, 0x10000, 0x39 )
+ ROM_REGION ( 0x10000, "cartridge", 0 )
+ ROM_FILL( 0x00000, 0x10000, 0x39 )
ROM_FLOPPY7
ROM_END
@@ -1589,7 +1604,7 @@ void thomson_state::to8_map(address_map &map)
map(0xe7da, 0xe7dd).rw(FUNC(thomson_state::to8_vreg_r), FUNC(thomson_state::to8_vreg_w));
map(0xe7e4, 0xe7e7).rw(FUNC(thomson_state::to8_gatearray_r), FUNC(thomson_state::to8_gatearray_w));
map(0xe7e8, 0xe7eb).rw("acia", FUNC(mos6551_device::read), FUNC(mos6551_device::write));
-/* AM_RANGE ( 0xe7f0, 0xe7f7 ) AM_READWRITE(to9_ieee_r, to9_ieee_w ) */
+/* map(0xe7f0, 0xe7f7).rw(FUNC(thomson_state::to9_ieee_r), FUNC(thomson_state::to9_ieee_w )); */
map(0xe7f2, 0xe7f3).rw(FUNC(thomson_state::to7_midi_r), FUNC(thomson_state::to7_midi_w));
map(0xe7f8, 0xe7fb).rw("pia_3", FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt));
map(0xe7fe, 0xe7ff).rw(FUNC(thomson_state::to7_modem_mea8000_r), FUNC(thomson_state::to7_modem_mea8000_w));
@@ -1608,61 +1623,63 @@ void thomson_state::to8_map(address_map &map)
/* ------------ ROMS ------------ */
ROM_START ( to8 )
- ROM_REGION ( 0x34000, "maincpu", 0 )
+ ROM_REGION ( 0x24000, "maincpu", 0 )
/* BIOS & floppy */
- ROM_LOAD ( "to8-0.rom", 0x30000, 0x2000,
+ ROM_LOAD ( "to8-0.rom", 0x20000, 0x2000,
CRC(3c4a640a)
SHA1(0a4952f0ca002d82ac83755e1f694d56399413b2) )
- ROM_LOAD ( "to8-1.rom", 0x32000, 0x2000,
+ ROM_LOAD ( "to8-1.rom", 0x22000, 0x2000,
CRC(cb9bae2d)
SHA1(a4a55a6e2c74bca15951158c5164970e922fc1c1) )
/* BASIC */
- ROM_LOAD ( "basic8-0.rom", 0x20000, 0x4000,
+ ROM_LOAD ( "basic8-0.rom", 0x10000, 0x4000,
CRC(e5a00fb3)
SHA1(281e535ed9b0f76e620253e9103292b8ff623d02) )
- ROM_LOAD ( "basic8-1.rom", 0x24000, 0x4000,
+ ROM_LOAD ( "basic8-1.rom", 0x14000, 0x4000,
CRC(4b241e63)
SHA1(ca8941a10db6cc069bf84c773f5e7d7d2c18449e) )
- ROM_LOAD ( "basic8-2.rom", 0x28000, 0x4000,
+ ROM_LOAD ( "basic8-2.rom", 0x18000, 0x4000,
CRC(0f5581b3)
SHA1(93815ca78d3532192aaa56cbf65b68b0f10f1b8a) )
- ROM_LOAD ( "basic8-3.rom", 0x2c000, 0x4000,
+ ROM_LOAD ( "basic8-3.rom", 0x1c000, 0x4000,
CRC(f552e7e3)
SHA1(3208e0d7d90241a327ed24e4921303f16e167bd5) )
- ROM_FILL( 0x10000, 0x10000, 0x39 )
+ ROM_REGION ( 0x10000, "cartridge", 0 )
+ ROM_FILL( 0x00000, 0x10000, 0x39 )
ROM_FLOPPY7
ROM_END
ROM_START ( to8d )
- ROM_REGION ( 0x34000, "maincpu", 0 )
+ ROM_REGION ( 0x24000, "maincpu", 0 )
/* BIOS & floppy */
- ROM_LOAD ( "to8d-0.rom", 0x30000, 0x2000,
+ ROM_LOAD ( "to8d-0.rom", 0x20000, 0x2000,
CRC(30ea4950)
SHA1(6705100cd337fffb26ce999302b55fb71557b128) )
- ROM_LOAD ( "to8d-1.rom", 0x32000, 0x2000,
+ ROM_LOAD ( "to8d-1.rom", 0x22000, 0x2000,
CRC(926cf0ca)
SHA1(8521613ac00e04dd94b69e771aeaefbf4fe97bf7) )
/* BASIC */
- ROM_LOAD ( "basic8-0.rom", 0x20000, 0x4000,
+ ROM_LOAD ( "basic8-0.rom", 0x10000, 0x4000,
CRC(e5a00fb3)
SHA1(281e535ed9b0f76e620253e9103292b8ff623d02) )
- ROM_LOAD ( "basic8-1.rom", 0x24000, 0x4000,
+ ROM_LOAD ( "basic8-1.rom", 0x14000, 0x4000,
CRC(4b241e63)
SHA1(ca8941a10db6cc069bf84c773f5e7d7d2c18449e) )
- ROM_LOAD ( "basic8-2.rom", 0x28000, 0x4000,
+ ROM_LOAD ( "basic8-2.rom", 0x18000, 0x4000,
CRC(0f5581b3)
SHA1(93815ca78d3532192aaa56cbf65b68b0f10f1b8a) )
- ROM_LOAD ( "basic8-3.rom", 0x2c000, 0x4000,
+ ROM_LOAD ( "basic8-3.rom", 0x1c000, 0x4000,
CRC(f552e7e3)
SHA1(3208e0d7d90241a327ed24e4921303f16e167bd5) )
- ROM_FILL( 0x10000, 0x10000, 0x39 )
+ ROM_REGION ( 0x10000, "cartridge", 0 )
+ ROM_FILL( 0x00000, 0x10000, 0x39 )
ROM_FLOPPY7
ROM_END
@@ -1800,7 +1817,7 @@ void thomson_state::to9p_map(address_map &map)
map(0xe7de, 0xe7df).rw(FUNC(thomson_state::to9_kbd_r), FUNC(thomson_state::to9_kbd_w));
map(0xe7e4, 0xe7e7).rw(FUNC(thomson_state::to8_gatearray_r), FUNC(thomson_state::to8_gatearray_w));
map(0xe7e8, 0xe7eb).rw("acia", FUNC(mos6551_device::read), FUNC(mos6551_device::write));
-/* AM_RANGE ( 0xe7f0, 0xe7f7 ) AM_READWRITE(to9_ieee_r, to9_ieee_w ) */
+/* map(0xe7f0, 0xe7f7).rw(FUNC(thomson_state::to9_ieee_r), FUNC(thomson_state::to9_ieee_w )); */
map(0xe7f2, 0xe7f3).rw(FUNC(thomson_state::to7_midi_r), FUNC(thomson_state::to7_midi_w));
map(0xe7f8, 0xe7fb).rw("pia_3", FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt));
map(0xe7fe, 0xe7ff).rw(FUNC(thomson_state::to7_modem_mea8000_r), FUNC(thomson_state::to7_modem_mea8000_w));
@@ -1819,31 +1836,32 @@ void thomson_state::to9p_map(address_map &map)
/* ------------ ROMS ------------ */
ROM_START ( to9p )
- ROM_REGION ( 0x34000, "maincpu", 0 )
+ ROM_REGION ( 0x24000, "maincpu", 0 )
/* BIOS & floppy */
- ROM_LOAD ( "to9p-0.rom", 0x30000, 0x2000,
+ ROM_LOAD ( "to9p-0.rom", 0x20000, 0x2000,
CRC(a2731296)
SHA1(b30e06127d6e99d4ac5a5bb67881df27bbd9a7e5) )
- ROM_LOAD ( "to9p-1.rom", 0x32000, 0x2000,
+ ROM_LOAD ( "to9p-1.rom", 0x22000, 0x2000,
CRC(c52ce315)
SHA1(7eacbd796e76bc72b872f9700c9b90414899ea0f) )
/* BASIC */
- ROM_LOAD ( "basicp-0.rom", 0x20000, 0x4000,
+ ROM_LOAD ( "basicp-0.rom", 0x10000, 0x4000,
CRC(e5a00fb3)
SHA1(281e535ed9b0f76e620253e9103292b8ff623d02) )
- ROM_LOAD ( "basicp-1.rom", 0x24000, 0x4000,
+ ROM_LOAD ( "basicp-1.rom", 0x14000, 0x4000,
CRC(4b241e63)
SHA1(ca8941a10db6cc069bf84c773f5e7d7d2c18449e) )
- ROM_LOAD ( "basicp-2.rom", 0x28000, 0x4000,
+ ROM_LOAD ( "basicp-2.rom", 0x18000, 0x4000,
CRC(0f5581b3)
SHA1(93815ca78d3532192aaa56cbf65b68b0f10f1b8a) )
- ROM_LOAD ( "basicp-3.rom", 0x2c000, 0x4000,
+ ROM_LOAD ( "basicp-3.rom", 0x1c000, 0x4000,
CRC(ebe9c8d9)
SHA1(b667ad09a1181f65059a2cbb4c95421bc544a334) )
- ROM_FILL( 0x10000, 0x10000, 0x39 )
+ ROM_REGION ( 0x10000, "cartridge", 0 )
+ ROM_FILL( 0x00000, 0x10000, 0x39 )
ROM_FLOPPY7
ROM_END
@@ -1992,61 +2010,63 @@ void thomson_state::mo6_map(address_map &map)
/* ------------ ROMS ------------ */
ROM_START ( mo6 )
- ROM_REGION ( 0x30000, "maincpu", 0 )
+ ROM_REGION ( 0x20000, "maincpu", 0 )
/* BIOS */
- ROM_LOAD ( "mo6-0.rom", 0x23000, 0x1000,
+ ROM_LOAD ( "mo6-0.rom", 0x13000, 0x1000,
CRC(0446eef6)
SHA1(b57fcda69c95f0c97c5cb0605d17c49a0c630300) )
- ROM_LOAD ( "mo6-1.rom", 0x27000, 0x1000,
+ ROM_LOAD ( "mo6-1.rom", 0x17000, 0x1000,
CRC(eb6df8d4)
SHA1(24e2232f582ce04f260acd8e9ec710468a81505c) )
/* BASIC */
- ROM_LOAD ( "basic6-0.rom", 0x20000, 0x3000,
+ ROM_LOAD ( "basic6-0.rom", 0x10000, 0x3000,
CRC(18789833)
SHA1(fccbf69cbc6deba45a767a26cd6454cf0eedfc2b) )
- ROM_LOAD ( "basic6-1.rom", 0x24000, 0x3000,
+ ROM_LOAD ( "basic6-1.rom", 0x14000, 0x3000,
CRC(c9b4d6f4)
SHA1(47487d2bc4c9a9c09c733bd89c49693c52e262de) )
- ROM_LOAD ( "basic6-2.rom", 0x28000, 0x4000,
+ ROM_LOAD ( "basic6-2.rom", 0x18000, 0x4000,
CRC(08eac9bb)
SHA1(c0231fdb3bcccbbb10c1f93cc529fc3b96dd3f4d) )
- ROM_LOAD ( "basic6-3.rom", 0x2c000, 0x4000,
+ ROM_LOAD ( "basic6-3.rom", 0x1c000, 0x4000,
CRC(19d66dc4)
SHA1(301b6366269181b74cb5d7ccdf5455b7290ae99b) )
- ROM_FILL ( 0x10000, 0x10000, 0x39 )
+ ROM_REGION ( 0x10000, "cartridge", 0 )
+ ROM_FILL ( 0x00000, 0x10000, 0x39 )
ROM_FLOPPY5
ROM_END
ROM_START ( pro128 )
- ROM_REGION ( 0x30000, "maincpu", 0 )
+ ROM_REGION ( 0x20000, "maincpu", 0 )
/* BIOS */
- ROM_LOAD ( "pro128-0.rom", 0x23000, 0x1000,
+ ROM_LOAD ( "pro128-0.rom", 0x13000, 0x1000,
CRC(a8aef291)
SHA1(2685cca841f405a37ef48b0115f90c865ce79d0f) )
- ROM_LOAD ( "pro128-1.rom", 0x27000, 0x1000,
+ ROM_LOAD ( "pro128-1.rom", 0x17000, 0x1000,
CRC(5b3340ec)
SHA1(269f2eb3e3452014b8d1f0f9e1c63fe56375a863) )
/* BASIC */
- ROM_LOAD ( "basico-0.rom", 0x20000, 0x3000,
+ ROM_LOAD ( "basico-0.rom", 0x10000, 0x3000,
CRC(98b10d5e)
SHA1(d6b77e694fa85e1114293448e5a64f6e2cf46c22) )
- ROM_LOAD ( "basico-1.rom", 0x24000, 0x3000,
+ ROM_LOAD ( "basico-1.rom", 0x14000, 0x3000,
CRC(721d2124)
SHA1(51db1cd03b3891e212a24aa6563b09968930d897) )
- ROM_LOAD ( "basico-2.rom", 0x28000, 0x4000,
+ ROM_LOAD ( "basico-2.rom", 0x18000, 0x4000,
CRC(135438ab)
SHA1(617d4e4979842bea2c21ef7f8c50f3b08b15239a) )
- ROM_LOAD ( "basico-3.rom", 0x2c000, 0x4000,
+ ROM_LOAD ( "basico-3.rom", 0x1c000, 0x4000,
CRC(2c2befa6)
SHA1(3e94e182bacbb55bb07be2af4c76c0b0df47b3bf) )
- ROM_FILL ( 0x10000, 0x10000, 0x39 )
+ ROM_REGION ( 0x10000, "cartridge", 0 )
+ ROM_FILL ( 0x00000, 0x10000, 0x39 )
ROM_FLOPPY5
ROM_END
@@ -2345,31 +2365,32 @@ void thomson_state::mo5nr_map(address_map &map)
/* ------------ ROMS ------------ */
ROM_START ( mo5nr )
- ROM_REGION ( 0x30000, "maincpu", 0 )
+ ROM_REGION ( 0x20000, "maincpu", 0 )
/* BIOS */
- ROM_LOAD ( "mo5nr-0.rom", 0x23000, 0x1000,
+ ROM_LOAD ( "mo5nr-0.rom", 0x13000, 0x1000,
CRC(06e31115)
SHA1(7429cc0c15475398b5ab514cb3d3efdc71cf082f) )
- ROM_LOAD ( "mo5nr-1.rom", 0x27000, 0x1000,
+ ROM_LOAD ( "mo5nr-1.rom", 0x17000, 0x1000,
CRC(7cda17c9)
SHA1(2ff6480ce9e30acc4c89b6113d7c8ea6095d90a5) )
/* BASIC */
- ROM_LOAD ( "basicn-0.rom", 0x20000, 0x3000,
+ ROM_LOAD ( "basicn-0.rom", 0x10000, 0x3000,
CRC(fae9e691)
SHA1(62fbfd6d4ca837f6cb8ed37f828eca97f80e6200) )
- ROM_LOAD ( "basicn-1.rom", 0x24000, 0x3000,
+ ROM_LOAD ( "basicn-1.rom", 0x14000, 0x3000,
CRC(cf134dd7)
SHA1(1bd961314e16e460d37a65f5e7f4acf5604fbb17) )
- ROM_LOAD ( "basicn-2.rom", 0x28000, 0x4000,
+ ROM_LOAD ( "basicn-2.rom", 0x18000, 0x4000,
CRC(b69d2e0d)
SHA1(ea3220bbae991e08259d38a7ea24533b2bb86418) )
- ROM_LOAD ( "basicn-3.rom", 0x2c000, 0x4000,
+ ROM_LOAD ( "basicn-3.rom", 0x1c000, 0x4000,
CRC(7785610f)
SHA1(c38b0be404d8af6f409a1b52cb79a4e10fc33177) )
- ROM_FILL ( 0x10000, 0x10000, 0x39 ) /* TODO: network ROM */
+ ROM_REGION ( 0x10000, "cartridge", 0 )
+ ROM_FILL ( 0x00000, 0x10000, 0x39 ) /* TODO: network ROM */
ROM_FLOPPY5
ROM_END
diff --git a/src/mame/drivers/thoop2.cpp b/src/mame/drivers/thoop2.cpp
index cba4dbedf11..c8a9c49e2df 100644
--- a/src/mame/drivers/thoop2.cpp
+++ b/src/mame/drivers/thoop2.cpp
@@ -105,13 +105,13 @@ WRITE_LINE_MEMBER(thoop2_state::coin2_counter_w)
WRITE8_MEMBER(thoop2_state::shareram_w)
{
- // why isn't there an AM_SOMETHING macro for this?
+ // why isn't there address map functionality for this?
reinterpret_cast<u8 *>(m_shareram.target())[BYTE_XOR_BE(offset)] = data;
}
READ8_MEMBER(thoop2_state::shareram_r)
{
- // why isn't there an AM_SOMETHING macro for this?
+ // why isn't there address map functionality for this?
return reinterpret_cast<u8 const *>(m_shareram.target())[BYTE_XOR_BE(offset)];
}
diff --git a/src/mame/drivers/ti85.cpp b/src/mame/drivers/ti85.cpp
index f62980288a4..71fe2576e47 100644
--- a/src/mame/drivers/ti85.cpp
+++ b/src/mame/drivers/ti85.cpp
@@ -285,7 +285,7 @@ void ti85_state::ti83p_io(address_map &map)
map(0x0007, 0x0007).rw(FUNC(ti85_state::ti86_port_0006_r), FUNC(ti85_state::ti83p_port_0007_w));
map(0x0010, 0x0010).rw("t6a04", FUNC(t6a04_device::control_read), FUNC(t6a04_device::control_write));
map(0x0011, 0x0011).rw("t6a04", FUNC(t6a04_device::data_read), FUNC(t6a04_device::data_write));
-// AM_RANGE(0x0014, 0x0014) AM_WRITE(ti83p_port_0014_w )
+// map(0x0014, 0x0014).w(FUNC(ti85_state::ti83p_port_0014_w));
}
void ti85_state::ti83pse_io(address_map &map)
diff --git a/src/mame/drivers/ti990_10.cpp b/src/mame/drivers/ti990_10.cpp
index 65b8ec303da..3004c668f73 100644
--- a/src/mame/drivers/ti990_10.cpp
+++ b/src/mame/drivers/ti990_10.cpp
@@ -300,11 +300,11 @@ void ti990_10_state::ti990_10_io(address_map &map)
{
map(0x10, 0x11).r(m_terminal, FUNC(vdt911_device::cru_r));
map(0x80, 0x8f).w(m_terminal, FUNC(vdt911_device::cru_w));
- map(0x1fa, 0x1fb).noprw(); // AM_READ(ti990_10_mapper_cru_r)
- map(0x1fc, 0x1fd).noprw(); // AM_READ(ti990_10_eir_cru_r)
+ map(0x1fa, 0x1fb).noprw(); // .r(FUNC(ti990_10_state::ti990_10_mapper_cru_r));
+ map(0x1fc, 0x1fd).noprw(); // .r(FUNC(ti990_10_state::ti990_10_eir_cru_r));
map(0x1fe, 0x1ff).r(FUNC(ti990_10_state::ti990_panel_read));
- map(0xfd0, 0xfdf).noprw(); // AM_WRITE(ti990_10_mapper_cru_w)
- map(0xfe0, 0xfef).noprw(); // AM_WRITE(ti990_10_eir_cru_w)
+ map(0xfd0, 0xfdf).noprw(); // .w(FUNC(ti990_10_state::ti990_10_mapper_cru_w));
+ map(0xfe0, 0xfef).noprw(); // .w(FUNC(ti990_10_state::ti990_10_eir_cru_w));
map(0xff0, 0xfff).w(FUNC(ti990_10_state::ti990_panel_write));
}
diff --git a/src/mame/drivers/tigeroad.cpp b/src/mame/drivers/tigeroad.cpp
index c0d9d5e2ae8..dde71784ede 100644
--- a/src/mame/drivers/tigeroad.cpp
+++ b/src/mame/drivers/tigeroad.cpp
@@ -118,7 +118,7 @@ void tigeroad_state::main_map(address_map &map)
map(0xfe0800, 0xfe0cff).ram().share("spriteram");
map(0xfe0d00, 0xfe1807).ram(); /* still part of OBJ RAM */
map(0xfe4000, 0xfe4001).portr("P1_P2").w(FUNC(tigeroad_state::tigeroad_videoctrl_w)); /* char bank, coin counters, + ? */
- map(0xfe4002, 0xfe4003).portr("SYSTEM").w(FUNC(tigeroad_state::tigeroad_soundcmd_w)); /* AM_WRITE(tigeroad_soundcmd_w) is replaced in init for for f1dream protection */
+ map(0xfe4002, 0xfe4003).portr("SYSTEM").w(FUNC(tigeroad_state::tigeroad_soundcmd_w)); /* .w(FUNC(tigeroad_state::tigeroad_soundcmd_w)); is replaced in init for for f1dream protection */
map(0xfe4004, 0xfe4005).portr("DSW");
map(0xfe8000, 0xfe8003).w(FUNC(tigeroad_state::tigeroad_scroll_w));
map(0xfe800e, 0xfe800f).writeonly(); /* fe800e = watchdog or IRQ acknowledge */
diff --git a/src/mame/drivers/tim011.cpp b/src/mame/drivers/tim011.cpp
index 08fb362e654..d24b12c2b40 100644
--- a/src/mame/drivers/tim011.cpp
+++ b/src/mame/drivers/tim011.cpp
@@ -66,9 +66,9 @@ void tim011_state::tim011_io(address_map &map)
map.unmap_value_high();
map(0x0000, 0x007f).ram(); /* Z180 internal registers */
map(0x0080, 0x009f).m(m_fdc, FUNC(upd765a_device::map));
- //AM_RANGE(0x00a0, 0x00a0) AM_MIRROR(0x001f) AM_WRITE(fdc_dma_w)
- //AM_RANGE(0x00c0, 0x00c1) AM_MIRROR(0x000e) AM_READWRITE(print_r,print_w)
- //AM_RANGE(0x00d0, 0x00d0) AM_MIRROR(0x000f) AM_READWRITE(scroll_r,scroll_w)
+ //map(0x00a0, 0x00a0).mirror(0x001f).w(FUNC(tim011_state::fdc_dma_w));
+ //map(0x00c0, 0x00c1).mirror(0x000e).rw(FUNC(tim011_state::print_r), FUNC(tim011_state::print_w));
+ //map(0x00d0, 0x00d0).mirror(0x000f).rw(FUNC(tim011_state::scroll_r), FUNC(tim011_state::scroll_w));
map(0x8000, 0xffff).ram(); // Video RAM 43256 SRAM (32KB)
}
diff --git a/src/mame/drivers/tk635.cpp b/src/mame/drivers/tk635.cpp
new file mode 100644
index 00000000000..996f63e094f
--- /dev/null
+++ b/src/mame/drivers/tk635.cpp
@@ -0,0 +1,212 @@
+// license:BSD-3-Clause
+// copyright-holders: Dirk Best
+/****************************************************************************
+
+ Termtek TK-635 terminal
+
+ Hardware:
+ - AMD N80C188-25
+ - TERMTEK TKA-200
+ - 128k + 32k RAM
+ - 256 KB flash memory
+
+ Features:
+ - 31.5khz or 48.1khz horizontal
+ - 70/72 hz vertical
+ - 16 background/foreground/border colors
+ - 24x80/132, 25x80/132, 42x80/132, 43x80/132
+ - Standard PC/AT keyboard
+
+ Notes:
+ - Identical to the Qume QVT-72 Plus?
+
+ TODO:
+ - Everything
+
+****************************************************************************/
+
+#include "emu.h"
+#include "cpu/i86/i186.h"
+#include "emupal.h"
+#include "screen.h"
+
+class tk635_state : public driver_device
+{
+public:
+ tk635_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_ram(*this, "ram"),
+ m_charram(*this, "charram"),
+ m_nmi_enable(false),
+ m_voffset(0)
+ { }
+
+ void tk635(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+private:
+ required_device<cpu_device> m_maincpu;
+ required_shared_ptr<u8> m_ram;
+ required_shared_ptr<u8> m_charram;
+
+ void mem_map(address_map &map);
+ void io_map(address_map &map);
+
+ uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ void vblank_w(int state);
+
+ uint8_t unk_00_r();
+ void voffset_lsb_w(uint8_t data);
+ void voffset_msb_w(uint8_t data);
+ uint8_t unk_11_r();
+ uint8_t unk_19_r();
+ void unk_f0_w(uint8_t data);
+
+ bool m_nmi_enable;
+ uint16_t m_voffset;
+};
+
+void tk635_state::mem_map(address_map &map)
+{
+ map(0x00000, 0x1ffff).ram().share("ram");
+ map(0x20000, 0x23fff).ram().share("charram");
+ map(0xc0000, 0xfffff).rom().region("maincpu", 0);
+}
+
+void tk635_state::io_map(address_map &map)
+{
+ map(0x00, 0x00).r(FUNC(tk635_state::unk_00_r));
+ map(0x04, 0x04).w(FUNC(tk635_state::voffset_lsb_w));
+ map(0x05, 0x05).w(FUNC(tk635_state::voffset_msb_w));
+ map(0x11, 0x11).r(FUNC(tk635_state::unk_11_r));
+// map(0x13, 0x13).ram(); // host port
+ map(0x19, 0x19).r(FUNC(tk635_state::unk_19_r));
+// map(0x1b, 0x1b).ram(); // aux port
+ map(0xf0, 0xf0).w(FUNC(tk635_state::unk_f0_w));
+}
+
+static INPUT_PORTS_START( tk635 )
+INPUT_PORTS_END
+
+static const gfx_layout char_layout_8x16 =
+{
+ 8, 16,
+ 512,
+ 1,
+ { 0 },
+ { STEP8(0, 1) },
+ { STEP16(0, 8) },
+ 8*32
+};
+
+static GFXDECODE_START(chars)
+ GFXDECODE_RAM("charram", 0, char_layout_8x16, 0, 1)
+GFXDECODE_END
+
+uint32_t tk635_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+{
+ for (int y = 0; y < 26; y++)
+ {
+ for (int x = 0; x < 132; x++)
+ {
+ uint8_t code = m_ram[(0x10000 | m_voffset) + (y * 132) + x];
+
+ // draw 16 lines
+ for (int i = 0; i < 16; i++)
+ {
+ uint8_t data = m_charram[(code << 5) + i];
+
+ // 8 pixels of the character
+ for (int p = 0; p < 8; p++)
+ bitmap.pix32(y * 16 + i, x * 9 + p) = BIT(data, 7 - p) ? rgb_t::white() : rgb_t::black();
+
+ // 9th pixel empty
+ bitmap.pix32(y * 16 + i, x * 9 + 8) = rgb_t::black();
+ }
+ }
+ }
+
+ return 0;
+}
+
+void tk635_state::vblank_w(int state)
+{
+ if (state == 1 && m_nmi_enable)
+ m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
+}
+
+uint8_t tk635_state::unk_00_r()
+{
+ logerror("unk_00_r: %02x\n", 0x10);
+ return 0x10;
+}
+
+void tk635_state::voffset_lsb_w(uint8_t data)
+{
+ m_voffset = (m_voffset & 0xff00) | data;
+}
+
+void tk635_state::voffset_msb_w(uint8_t data)
+{
+ m_voffset = (data << 8) | (m_voffset & 0x00ff);
+}
+
+uint8_t tk635_state::unk_11_r()
+{
+ logerror("unk_11_r: %02x\n", 0x09);
+ return 0x09;
+}
+
+uint8_t tk635_state::unk_19_r()
+{
+ logerror("unk_19_r: %02x\n", 0x09);
+ return 0x09;
+}
+
+void tk635_state::unk_f0_w(uint8_t data)
+{
+ logerror("unk_f0_w: %02x\n", data);
+ m_nmi_enable = true;
+}
+
+void tk635_state::machine_start()
+{
+ // register for save states
+ save_item(NAME(m_nmi_enable));
+ save_item(NAME(m_voffset));
+}
+
+void tk635_state::machine_reset()
+{
+ m_nmi_enable = false;
+}
+
+void tk635_state::tk635(machine_config &config)
+{
+ I80188(config, m_maincpu, 25000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &tk635_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &tk635_state::io_map);
+
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(70);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate
+ screen.set_screen_update(FUNC(tk635_state::screen_update));
+ screen.set_size(1188, 416);
+ screen.set_visarea(0, 1188-1, 0, 416-1);
+ screen.screen_vblank().set(FUNC(tk635_state::vblank_w));
+
+ PALETTE(config, "palette").set_entries(16);
+
+ GFXDECODE(config, "gfxdecode", "palette", chars);
+}
+
+ROM_START( tk635 )
+ ROM_REGION(0x40000, "maincpu", 0)
+ ROM_LOAD("fw_v0_23.bin", 0x00000, 0x40000, CRC(bec6fdae) SHA1(37dc46f6b761d874bd1627a1137bc4082e364698))
+ROM_END
+
+COMP( 199?, tk635, 0, 0, tk635, tk635, tk635_state, empty_init, "Termtek", "TK-635", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/tk80.cpp b/src/mame/drivers/tk80.cpp
index d67a5506fb8..5af308256a4 100644
--- a/src/mame/drivers/tk80.cpp
+++ b/src/mame/drivers/tk80.cpp
@@ -143,7 +143,7 @@ void tk80_state::tk85_mem(address_map &map)
void tk80_state::ics8080_mem(address_map &map)
{
map.unmap_value_high();
- //ADDRESS_MAP_GLOBAL_MASK(0x87ff) // A10-14 not connected
+ //map.global_mask(0x87ff); // A10-14 not connected
map(0x0000, 0x1fff).rom();
map(0x8000, 0x83f7).ram();
map(0x83f8, 0x83ff).ram().rw(FUNC(tk80_state::display_r), FUNC(tk80_state::display_w));
diff --git a/src/mame/drivers/tk80bs.cpp b/src/mame/drivers/tk80bs.cpp
index 893dfdaf5f7..5e91b4d989f 100644
--- a/src/mame/drivers/tk80bs.cpp
+++ b/src/mame/drivers/tk80bs.cpp
@@ -115,7 +115,7 @@ void tk80bs_state::tk80bs_mem(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x07ff).rom();
-// AM_RANGE(0x0c00, 0x7bff) AM_ROM // ext
+// map(0x0c00, 0x7bff).rom(); // ext
map(0x7df8, 0x7df9).noprw(); // i8251 sio
map(0x7dfc, 0x7dff).rw(FUNC(tk80bs_state::ppi_custom_r), FUNC(tk80bs_state::ppi_custom_w));
map(0x7e00, 0x7fff).ram().share("videoram"); // video ram
diff --git a/src/mame/drivers/tmc600.cpp b/src/mame/drivers/tmc600.cpp
index 05c204d8b5f..3d6a8bcf61a 100644
--- a/src/mame/drivers/tmc600.cpp
+++ b/src/mame/drivers/tmc600.cpp
@@ -134,7 +134,7 @@ void tmc600_state::tmc600_io_map(address_map &map)
map(0x03, 0x03).w(m_bwio, FUNC(cdp1852_device::write));
map(0x04, 0x04).w(CDP1852_TMC700_TAG, FUNC(cdp1852_device::write));
map(0x05, 0x05).rw(FUNC(tmc600_state::rtc_r), FUNC(tmc600_state::vismac_data_w));
-// AM_RANGE(0x06, 0x06) AM_WRITE(floppy_w)
+// map(0x06, 0x06).w(FUNC(tmc600_state::floppy_w);
map(0x07, 0x07).w(FUNC(tmc600_state::vismac_register_w));
}
diff --git a/src/mame/drivers/tmmjprd.cpp b/src/mame/drivers/tmmjprd.cpp
index bfcfe5c81af..16a39d24ac1 100644
--- a/src/mame/drivers/tmmjprd.cpp
+++ b/src/mame/drivers/tmmjprd.cpp
@@ -666,23 +666,23 @@ void tmmjprd_state::main_map(address_map &map)
map(0x000000, 0x1fffff).rom();
map(0x200010, 0x200013).r(FUNC(tmmjprd_state::randomtmmjprds)); // gfx chip status?
/* check these are used .. */
-// AM_RANGE(0x200010, 0x200013) AM_WRITEONLY AM_SHARE("viewregs0")
+// map(0x200010, 0x200013).writeonly().share("viewregs0");
map(0x200100, 0x200117).writeonly().share(m_tilemap_regs[0]); // tilemap regs1
map(0x200120, 0x200137).writeonly().share(m_tilemap_regs[1]); // tilemap regs2
map(0x200140, 0x200157).writeonly().share(m_tilemap_regs[2]); // tilemap regs3
map(0x200160, 0x200177).writeonly().share(m_tilemap_regs[3]); // tilemap regs4
map(0x200200, 0x20021b).writeonly().share(m_spriteregs); // sprregs?
-// AM_RANGE(0x200300, 0x200303) AM_WRITE(rombank_w) // used during rom testing, rombank/area select + something else?
+// map(0x200300, 0x200303).w(FUNC(tmmjprd_state::rombank_w)); // used during rom testing, rombank/area select + something else?
map(0x20040c, 0x20040f).w(FUNC(tmmjprd_state::brt_w<0>));
map(0x200410, 0x200413).w(FUNC(tmmjprd_state::brt_w<1>));
-// AM_RANGE(0x200500, 0x200503) AM_WRITEONLY AM_SHARE("viewregs7")
+// map(0x200500, 0x200503).writeonly().share("viewregs7");
#if EMULATE_BLITTER
map(0x200700, 0x20070f).w(FUNC(tmmjprd_state::blitter_w)).share(m_blitterregs);
#endif
-// AM_RANGE(0x200800, 0x20080f) AM_WRITEONLY AM_SHARE("viewregs9") // never changes?
+// map(0x200800, 0x20080f).writeonly().share("viewregs9"); // never changes?
map(0x200900, 0x2009ff).rw("i5000snd", FUNC(i5000snd_device::read), FUNC(i5000snd_device::write));
/* hmm */
-// AM_RANGE(0x279700, 0x279713) AM_WRITEONLY AM_SHARE("viewregs10")
+// map(0x279700, 0x279713).writeonly().share("viewregs10");
/* tilemaps */
map(0x280000, 0x283fff).rw(FUNC(tmmjprd_state::tilemap_r<0>), FUNC(tmmjprd_state::tilemap_w<0>));
map(0x284000, 0x287fff).rw(FUNC(tmmjprd_state::tilemap_r<1>), FUNC(tmmjprd_state::tilemap_w<1>));
diff --git a/src/mame/drivers/tmnt.cpp b/src/mame/drivers/tmnt.cpp
index 271ec6a9d97..837839c791e 100644
--- a/src/mame/drivers/tmnt.cpp
+++ b/src/mame/drivers/tmnt.cpp
@@ -16,8 +16,6 @@ Notes:
TODO:
-- glfgretj is in worse shape than glfgreat, the latter is at least playable,
- the former hangs.
- glfgretj uses a special controller.
1 "shot controller (with stance selection button on the top of it)" and 3
buttons for shot direction (right/left) and club selection.
@@ -59,10 +57,12 @@ Updates:
#include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h"
+#include "machine/adc0804.h"
#include "machine/eepromser.h"
#include "machine/gen_latch.h"
#include "machine/k054321.h"
#include "machine/nvram.h"
+#include "machine/rescap.h"
#include "machine/watchdog.h"
#include "sound/k054539.h"
#include "sound/okim6295.h"
@@ -169,7 +169,7 @@ INTERRUPT_GEN_MEMBER(tmnt_state::lgtnfght_interrupt)
device.execute().set_input_line(M68K_IRQ_5, HOLD_LINE);
}
-WRITE8_MEMBER(tmnt_state::glfgreat_sound_w)
+WRITE8_MEMBER(glfgreat_state::glfgreat_sound_w)
{
m_k053260->main_write(offset, data);
@@ -178,12 +178,12 @@ WRITE8_MEMBER(tmnt_state::glfgreat_sound_w)
}
-WRITE16_MEMBER(tmnt_state::prmrsocr_sound_irq_w)
+WRITE16_MEMBER(prmrsocr_state::prmrsocr_sound_irq_w)
{
m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); // Z80
}
-WRITE8_MEMBER(tmnt_state::prmrsocr_audio_bankswitch_w)
+WRITE8_MEMBER(prmrsocr_state::prmrsocr_audio_bankswitch_w)
{
membank("bank1")->set_entry(data & 7);
}
@@ -449,7 +449,7 @@ WRITE16_MEMBER(tmnt_state::thndrx2_eeprom_w)
}
}
-WRITE16_MEMBER(tmnt_state::prmrsocr_eeprom_w)
+WRITE16_MEMBER(prmrsocr_state::prmrsocr_eeprom_w)
{
if (ACCESSING_BITS_0_7)
{
@@ -508,7 +508,7 @@ void tmnt_state::mia_main_map(address_map &map)
map(0x0c0000, 0x0c0001).w(FUNC(tmnt_state::tmnt_priority_w));
#endif
map(0x100000, 0x107fff).rw(FUNC(tmnt_state::k052109_word_noA12_r), FUNC(tmnt_state::k052109_word_noA12_w));
-// AM_RANGE(0x10e800, 0x10e801) AM_WRITENOP ???
+// map(0x10e800, 0x10e801).nopw(); ???
map(0x140000, 0x140007).rw(m_k051960, FUNC(k051960_device::k051937_r), FUNC(k051960_device::k051937_w));
map(0x140400, 0x1407ff).rw(m_k051960, FUNC(k051960_device::k051960_r), FUNC(k051960_device::k051960_w));
}
@@ -530,7 +530,7 @@ void tmnt_state::tmnt_main_map(address_map &map)
map(0x0a0018, 0x0a0019).portr("DSW3");
map(0x0c0000, 0x0c0001).w(FUNC(tmnt_state::tmnt_priority_w));
map(0x100000, 0x107fff).rw(FUNC(tmnt_state::k052109_word_noA12_r), FUNC(tmnt_state::k052109_word_noA12_w));
-// AM_RANGE(0x10e800, 0x10e801) AM_WRITENOP ???
+// map(0x10e800, 0x10e801).nopw(); ???
map(0x140000, 0x140007).rw(m_k051960, FUNC(k051960_device::k051937_r), FUNC(k051960_device::k051937_w));
map(0x140400, 0x1407ff).rw(m_k051960, FUNC(k051960_device::k051960_r), FUNC(k051960_device::k051960_w));
}
@@ -602,7 +602,7 @@ void tmnt_state::blswhstl_main_map(address_map &map)
map(0x780700, 0x78071f).w(m_k053251, FUNC(k053251_device::write)).umask16(0x00ff);
}
-WRITE16_MEMBER(tmnt_state::k053251_glfgreat_w)
+WRITE16_MEMBER(glfgreat_state::k053251_glfgreat_w)
{
int i;
@@ -623,14 +623,19 @@ WRITE16_MEMBER(tmnt_state::k053251_glfgreat_w)
}
}
-void tmnt_state::glfgreat_main_map(address_map &map)
+uint8_t glfgreat_state::controller_r()
+{
+ return m_analog_controller[m_controller_select]->read();
+}
+
+void glfgreat_state::glfgreat_main_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
map(0x100000, 0x103fff).ram(); /* main RAM */
- map(0x104000, 0x107fff).rw(FUNC(tmnt_state::k053245_scattered_word_r), FUNC(tmnt_state::k053245_scattered_word_w)).share("spriteram");
+ map(0x104000, 0x107fff).rw(FUNC(glfgreat_state::k053245_scattered_word_r), FUNC(glfgreat_state::k053245_scattered_word_w)).share("spriteram");
map(0x108000, 0x108fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x10c000, 0x10cfff).rw(m_k053936, FUNC(k053936_device::linectrl_r), FUNC(k053936_device::linectrl_w)); /* 053936? */
- map(0x110000, 0x11001f).w(FUNC(tmnt_state::k053244_word_noA1_w)); /* duplicate! */
+ map(0x110000, 0x11001f).w(FUNC(glfgreat_state::k053244_word_noA1_w)); /* duplicate! */
map(0x114000, 0x11401f).rw(m_k053245, FUNC(k05324x_device::k053244_r), FUNC(k05324x_device::k053244_w)).umask16(0x00ff); /* duplicate! */
map(0x118000, 0x11801f).w(m_k053936, FUNC(k053936_device::ctrl_w));
map(0x11c000, 0x11c01f).w(m_k053251, FUNC(k053251_device::write)).umask16(0xff00);
@@ -638,33 +643,34 @@ void tmnt_state::glfgreat_main_map(address_map &map)
map(0x120002, 0x120003).portr("P3/P4");
map(0x120004, 0x120005).portr("COINS/DSW3");
map(0x120006, 0x120007).portr("DSW1/DSW2");
- map(0x121000, 0x121001).r(FUNC(tmnt_state::glfgreat_ball_r)); /* returns the color of the center pixel of the roz layer */
- map(0x122000, 0x122001).w(FUNC(tmnt_state::glfgreat_122000_w));
+ map(0x121000, 0x121001).r(FUNC(glfgreat_state::glfgreat_ball_r)); /* returns the color of the center pixel of the roz layer */
+ map(0x122000, 0x122001).w(FUNC(glfgreat_state::glfgreat_122000_w));
+ map(0x123000, 0x123000).rw("adc", FUNC(adc0804_device::read), FUNC(adc0804_device::write));
map(0x124000, 0x124001).w("watchdog", FUNC(watchdog_timer_device::reset16_w));
- map(0x125000, 0x125003).r(m_k053260, FUNC(k053260_device::main_read)).umask16(0xff00).w(FUNC(tmnt_state::glfgreat_sound_w)).umask16(0xff00);
- map(0x200000, 0x207fff).rw(FUNC(tmnt_state::k052109_word_noA12_r), FUNC(tmnt_state::k052109_word_noA12_w));
- map(0x300000, 0x3fffff).r(FUNC(tmnt_state::glfgreat_rom_r));
+ map(0x125000, 0x125003).r(m_k053260, FUNC(k053260_device::main_read)).umask16(0xff00).w(FUNC(glfgreat_state::glfgreat_sound_w)).umask16(0xff00);
+ map(0x200000, 0x207fff).rw(FUNC(glfgreat_state::k052109_word_noA12_r), FUNC(glfgreat_state::k052109_word_noA12_w));
+ map(0x300000, 0x3fffff).r(FUNC(glfgreat_state::glfgreat_rom_r));
}
-void tmnt_state::prmrsocr_main_map(address_map &map)
+void prmrsocr_state::prmrsocr_main_map(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x100000, 0x103fff).ram(); /* main RAM */
- map(0x104000, 0x107fff).rw(FUNC(tmnt_state::k053245_scattered_word_r), FUNC(tmnt_state::k053245_scattered_word_w)).share("spriteram");
+ map(0x104000, 0x107fff).rw(FUNC(prmrsocr_state::k053245_scattered_word_r), FUNC(prmrsocr_state::k053245_scattered_word_w)).share("spriteram");
map(0x108000, 0x108fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x10c000, 0x10cfff).rw(m_k053936, FUNC(k053936_device::linectrl_r), FUNC(k053936_device::linectrl_w));
- map(0x110000, 0x11001f).w(FUNC(tmnt_state::k053244_word_noA1_w)); /* duplicate! */
+ map(0x110000, 0x11001f).w(FUNC(prmrsocr_state::k053244_word_noA1_w)); /* duplicate! */
map(0x114000, 0x11401f).rw(m_k053245, FUNC(k05324x_device::k053244_r), FUNC(k05324x_device::k053244_w)).umask16(0x00ff); /* duplicate! */
map(0x118000, 0x11801f).w(m_k053936, FUNC(k053936_device::ctrl_w));
map(0x11c000, 0x11c01f).w(m_k053251, FUNC(k053251_device::write)).umask16(0xff00);
map(0x120000, 0x120001).portr("P1/COINS");
map(0x120002, 0x120003).portr("P2/EEPROM");
map(0x121000, 0x12101f).m("k054321", FUNC(k054321_device::main_map)).umask16(0x00ff);
- map(0x122000, 0x122001).w(FUNC(tmnt_state::prmrsocr_eeprom_w)); /* EEPROM + video control */
- map(0x123000, 0x123001).w(FUNC(tmnt_state::prmrsocr_sound_irq_w));
- map(0x200000, 0x207fff).rw(FUNC(tmnt_state::k052109_word_noA12_r), FUNC(tmnt_state::k052109_word_noA12_w));
+ map(0x122000, 0x122001).w(FUNC(prmrsocr_state::prmrsocr_eeprom_w)); /* EEPROM + video control */
+ map(0x123000, 0x123001).w(FUNC(prmrsocr_state::prmrsocr_sound_irq_w));
+ map(0x200000, 0x207fff).rw(FUNC(prmrsocr_state::k052109_word_noA12_r), FUNC(prmrsocr_state::k052109_word_noA12_w));
map(0x280000, 0x280001).w("watchdog", FUNC(watchdog_timer_device::reset16_w));
- map(0x300000, 0x33ffff).r(FUNC(tmnt_state::prmrsocr_rom_r));
+ map(0x300000, 0x33ffff).r(FUNC(prmrsocr_state::prmrsocr_rom_r));
}
@@ -920,7 +926,7 @@ void tmnt_state::tmnt2_main_map(address_map &map)
map(0x1c0300, 0x1c0301).w(FUNC(tmnt_state::ssriders_1c0300_w));
map(0x1c0400, 0x1c0401).rw("watchdog", FUNC(watchdog_timer_device::reset16_r), FUNC(watchdog_timer_device::reset16_w));
map(0x1c0500, 0x1c057f).ram(); /* TMNT2 only (1J) unknown, mostly MCU blit offsets */
-// AM_RANGE(0x1c0800, 0x1c0801) AM_READ(ssriders_protection_r) /* protection device */
+// map(0x1c0800, 0x1c0801).r(FUNC(tmnt_state::ssriders_protection_r)); /* protection device */
map(0x1c0800, 0x1c081f).w(FUNC(tmnt_state::tmnt2_1c0800_w)).share("tmnt2_1c0800"); /* protection device */
map(0x5a0000, 0x5a001f).rw(FUNC(tmnt_state::k053244_word_noA1_r), FUNC(tmnt_state::k053244_word_noA1_w));
map(0x5c0600, 0x5c0603).rw(m_k053260, FUNC(k053260_device::main_read), FUNC(k053260_device::main_write)).umask16(0x00ff);
@@ -1042,12 +1048,12 @@ void tmnt_state::lgtnfght_audio_map(address_map &map)
}
-void tmnt_state::glfgreat_audio_map(address_map &map)
+void glfgreat_state::glfgreat_audio_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0xf000, 0xf7ff).ram();
map(0xf800, 0xf82f).rw(m_k053260, FUNC(k053260_device::read), FUNC(k053260_device::write));
- map(0xfa00, 0xfa00).w(FUNC(tmnt_state::sound_arm_nmi_w));
+ map(0xfa00, 0xfa00).w(FUNC(glfgreat_state::sound_arm_nmi_w));
}
@@ -1071,7 +1077,7 @@ void tmnt_state::thndrx2_audio_map(address_map &map)
}
-void tmnt_state::prmrsocr_audio_map(address_map &map)
+void prmrsocr_state::prmrsocr_audio_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0xbfff).bankr("bank1");
@@ -1080,7 +1086,7 @@ void tmnt_state::prmrsocr_audio_map(address_map &map)
[this](offs_t offset) { return m_k054539->read(((offset & 0x100) << 1) | (offset & 0xff)); },
[this](offs_t offset, u8 data) { m_k054539->write(((offset & 0x100) << 1) | (offset & 0xff), data); });
map(0xf000, 0xf003).m("k054321", FUNC(k054321_device::sound_map));
- map(0xf800, 0xf800).w(FUNC(tmnt_state::prmrsocr_audio_bankswitch_w));
+ map(0xf800, 0xf800).w(FUNC(prmrsocr_state::prmrsocr_audio_bankswitch_w));
}
@@ -1605,12 +1611,25 @@ static INPUT_PORTS_START( glfgreat )
PORT_DIPUNUSED_DIPLOC( 0x8000, IP_ACTIVE_LOW, "SW3:4" ) // manual says "not used"
PORT_START("P1/P2")
- KONAMI16_LSB( 1, IPT_BUTTON3, IPT_BUTTON4 )
- KONAMI16_MSB( 2, IPT_BUTTON3, IPT_BUTTON4 ) PORT_PLAYER(2)
+ KONAMI16_LSB_40( 1, IPT_BUTTON3 )
+ PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("adc", adc0804_device, intr_r) // shown in service mode DIP SW1:9, SW2:9 and SW3:5
+ KONAMI16_MSB( 2, IPT_BUTTON3, IPT_UNUSED ) PORT_PLAYER(2)
PORT_START("P3/P4")
- KONAMI16_LSB( 3, IPT_BUTTON3, IPT_BUTTON4 ) PORT_PLAYER(3)
- KONAMI16_MSB( 4, IPT_BUTTON3, IPT_BUTTON4 ) PORT_PLAYER(4)
+ KONAMI16_LSB( 3, IPT_BUTTON3, IPT_UNUSED ) PORT_PLAYER(3)
+ KONAMI16_MSB( 4, IPT_BUTTON3, IPT_UNUSED ) PORT_PLAYER(4)
+
+ PORT_START("CONTROLA")
+ PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(35) PORT_KEYDELTA(35) PORT_PLAYER(1)
+
+ PORT_START("CONTROLB")
+ PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(35) PORT_KEYDELTA(35) PORT_PLAYER(2)
+
+ PORT_START("CONTROLC")
+ PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(35) PORT_KEYDELTA(35) PORT_PLAYER(3)
+
+ PORT_START("CONTROLD")
+ PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(35) PORT_KEYDELTA(35) PORT_PLAYER(4)
INPUT_PORTS_END
static INPUT_PORTS_START( glfgreatu )
@@ -1642,7 +1661,6 @@ static INPUT_PORTS_START( glfgreatj )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 Right Direction")
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Left Direction")
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("P1 Club Select")
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_NAME("Spare (P1 Button 4)") // shown in service mode DIP SW1:9, SW2:9 and SW3:5
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_NAME("Spare (P2 Left)")
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_NAME("Spare (P2 Right)")
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_NAME("P2 Stance Select")
@@ -1650,7 +1668,6 @@ static INPUT_PORTS_START( glfgreatj )
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 Right Direction")
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 Left Direction")
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("P2 Club Select")
- PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) PORT_NAME("Spare (P2 Button 4)")
PORT_MODIFY("P3/P4")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3) PORT_NAME("Spare (P3 Left)")
@@ -1660,7 +1677,6 @@ static INPUT_PORTS_START( glfgreatj )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) PORT_NAME("P3 Right Direction")
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) PORT_NAME("P3 Left Direction")
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3) PORT_NAME("P3 Club Select")
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(3) PORT_NAME("Spare (P3 Button 4)")
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(4) PORT_NAME("Spare (P4 Left)")
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(4) PORT_NAME("Spare (P4 Right)")
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(4) PORT_NAME("P4 Stance Select")
@@ -1668,7 +1684,6 @@ static INPUT_PORTS_START( glfgreatj )
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4) PORT_NAME("P4 Right Direction")
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4) PORT_NAME("P4 Left Direction")
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4) PORT_NAME("P4 Club Select")
- PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(4) PORT_NAME("Spare (P4 Button 4)")
INPUT_PORTS_END
static INPUT_PORTS_START( ssriders )
@@ -1882,7 +1897,7 @@ WRITE8_MEMBER(tmnt_state::volume_callback)
m_k007232->set_volume(1, 0, (data & 0x0f) * 0x11);
}
-MACHINE_START_MEMBER(tmnt_state,common)
+void tmnt_state::machine_start()
{
save_item(NAME(m_toggle));
save_item(NAME(m_last));
@@ -1909,7 +1924,6 @@ void tmnt_state::cuebrick(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &tmnt_state::cuebrick_main_map);
m_maincpu->set_vblank_int("screen", FUNC(tmnt_state::tmnt_interrupt));
- MCFG_MACHINE_START_OVERRIDE(tmnt_state,common)
MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common)
WATCHDOG_TIMER(config, "watchdog");
@@ -1963,7 +1977,6 @@ void tmnt_state::mia(machine_config &config)
Z80(config, m_audiocpu, XTAL(3'579'545));
m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::mia_audio_map);
- MCFG_MACHINE_START_OVERRIDE(tmnt_state,common)
MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common)
WATCHDOG_TIMER(config, "watchdog");
@@ -2025,7 +2038,6 @@ void tmnt_state::tmnt(machine_config &config)
Z80(config, m_audiocpu, XTAL(3'579'545));
m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::tmnt_audio_map);
- MCFG_MACHINE_START_OVERRIDE(tmnt_state,common)
MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,tmnt)
WATCHDOG_TIMER(config, "watchdog");
@@ -2090,7 +2102,6 @@ void tmnt_state::punkshot(machine_config &config)
m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::punkshot_audio_map);
/* NMIs are generated by the 053260 */
- MCFG_MACHINE_START_OVERRIDE(tmnt_state,common)
MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common)
WATCHDOG_TIMER(config, "watchdog");
@@ -2140,7 +2151,6 @@ void tmnt_state::lgtnfght(machine_config &config)
Z80(config, m_audiocpu, XTAL(3'579'545));
m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::lgtnfght_audio_map);
- MCFG_MACHINE_START_OVERRIDE(tmnt_state,common)
MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common)
WATCHDOG_TIMER(config, "watchdog");
@@ -2194,7 +2204,6 @@ void tmnt_state::blswhstl(machine_config &config)
m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::ssriders_audio_map);
/* NMIs are generated by the 053260 */
- MCFG_MACHINE_START_OVERRIDE(tmnt_state,common)
MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common)
EEPROM_ER5911_8BIT(config, "eeprom");
@@ -2259,22 +2268,24 @@ static GFXDECODE_START( gfx_glfgreat )
GFXDECODE_ENTRY( "zoom", 0, zoomlayout, 0x400, 16 )
GFXDECODE_END
-void tmnt_state::glfgreat(machine_config &config)
+void glfgreat_state::glfgreat(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(32'000'000)/2); /* Confirmed */
- m_maincpu->set_addrmap(AS_PROGRAM, &tmnt_state::glfgreat_main_map);
- m_maincpu->set_vblank_int("screen", FUNC(tmnt_state::lgtnfght_interrupt));
+ m_maincpu->set_addrmap(AS_PROGRAM, &glfgreat_state::glfgreat_main_map);
+ m_maincpu->set_vblank_int("screen", FUNC(glfgreat_state::lgtnfght_interrupt));
Z80(config, m_audiocpu, XTAL(3'579'545));
- m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::glfgreat_audio_map);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &glfgreat_state::glfgreat_audio_map);
/* NMIs are generated by the 053260 */
- MCFG_MACHINE_START_OVERRIDE(tmnt_state,common)
- MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common)
+ MCFG_MACHINE_RESET_OVERRIDE(glfgreat_state,common)
WATCHDOG_TIMER(config, "watchdog");
+ adc0804_device &adc(ADC0804(config, "adc", RES_K(10), CAP_P(150)));
+ adc.vin_callback().set(FUNC(glfgreat_state::controller_r));
+
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
@@ -2282,7 +2293,7 @@ void tmnt_state::glfgreat(machine_config &config)
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_size(64*8, 32*8);
screen.set_visarea(14*8, (64-14)*8-1, 2*8, 30*8-1);
- screen.set_screen_update(FUNC(tmnt_state::screen_update_glfgreat));
+ screen.set_screen_update(FUNC(glfgreat_state::screen_update_glfgreat));
screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_glfgreat);
@@ -2291,16 +2302,16 @@ void tmnt_state::glfgreat(machine_config &config)
m_palette->enable_shadows();
m_palette->enable_hilights();
- MCFG_VIDEO_START_OVERRIDE(tmnt_state,glfgreat)
+ MCFG_VIDEO_START_OVERRIDE(glfgreat_state,glfgreat)
K052109(config, m_k052109, 0);
m_k052109->set_palette(m_palette);
m_k052109->set_screen(nullptr);
- m_k052109->set_tile_callback(FUNC(tmnt_state::tmnt_tile_callback), this);
+ m_k052109->set_tile_callback(FUNC(glfgreat_state::tmnt_tile_callback), this);
K053245(config, m_k053245, 0);
m_k053245->set_palette(m_palette);
- m_k053245->set_sprite_callback(FUNC(tmnt_state::lgtnfght_sprite_callback), this);
+ m_k053245->set_sprite_callback(FUNC(glfgreat_state::lgtnfght_sprite_callback), this);
K053936(config, m_k053936, 0);
m_k053936->set_wrap(1);
@@ -2317,26 +2328,25 @@ void tmnt_state::glfgreat(machine_config &config)
m_k053260->add_route(1, "rspeaker", 1.0);
}
-MACHINE_START_MEMBER(tmnt_state,prmrsocr)
+void prmrsocr_state::machine_start()
{
- MACHINE_START_CALL_MEMBER(common);
+ tmnt_state::machine_start();
uint8_t *ROM = memregion("audiocpu")->base();
membank("bank1")->configure_entries(0, 8, &ROM[0x10000], 0x4000);
}
-void tmnt_state::prmrsocr(machine_config &config)
+void prmrsocr_state::prmrsocr(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(32'000'000)/2); /* Confirmed */
- m_maincpu->set_addrmap(AS_PROGRAM, &tmnt_state::prmrsocr_main_map);
- m_maincpu->set_vblank_int("screen", FUNC(tmnt_state::lgtnfght_interrupt));
+ m_maincpu->set_addrmap(AS_PROGRAM, &prmrsocr_state::prmrsocr_main_map);
+ m_maincpu->set_vblank_int("screen", FUNC(prmrsocr_state::lgtnfght_interrupt));
Z80(config, m_audiocpu, 8000000); /* ? */
- m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::prmrsocr_audio_map);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &prmrsocr_state::prmrsocr_audio_map);
/* NMIs are generated by the 054539 */
- MCFG_MACHINE_START_OVERRIDE(tmnt_state,prmrsocr)
- MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common)
+ MCFG_MACHINE_RESET_OVERRIDE(prmrsocr_state,common)
EEPROM_ER5911_8BIT(config, "eeprom");
@@ -2349,7 +2359,7 @@ void tmnt_state::prmrsocr(machine_config &config)
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_size(64*8, 32*8);
screen.set_visarea(14*8, (64-14)*8-1, 2*8, 30*8-1);
- screen.set_screen_update(FUNC(tmnt_state::screen_update_glfgreat));
+ screen.set_screen_update(FUNC(prmrsocr_state::screen_update_glfgreat));
screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_glfgreat);
@@ -2358,16 +2368,16 @@ void tmnt_state::prmrsocr(machine_config &config)
m_palette->enable_shadows();
m_palette->enable_hilights();
- MCFG_VIDEO_START_OVERRIDE(tmnt_state,prmrsocr)
+ MCFG_VIDEO_START_OVERRIDE(prmrsocr_state,prmrsocr)
K052109(config, m_k052109, 0);
m_k052109->set_palette(m_palette);
m_k052109->set_screen(nullptr);
- m_k052109->set_tile_callback(FUNC(tmnt_state::tmnt_tile_callback), this);
+ m_k052109->set_tile_callback(FUNC(prmrsocr_state::tmnt_tile_callback), this);
K053245(config, m_k053245, 0);
m_k053245->set_palette(m_palette);
- m_k053245->set_sprite_callback(FUNC(tmnt_state::prmrsocr_sprite_callback), this);
+ m_k053245->set_sprite_callback(FUNC(prmrsocr_state::prmrsocr_sprite_callback), this);
K053936(config, m_k053936, 0);
m_k053936->set_offsets(85, 1);
@@ -2400,7 +2410,6 @@ void tmnt_state::tmnt2(machine_config &config)
m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::ssriders_audio_map);
/* NMIs are generated by the 053260 */
- MCFG_MACHINE_START_OVERRIDE(tmnt_state,common)
MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common)
EEPROM_ER5911_8BIT(config, "eeprom");
@@ -2456,7 +2465,6 @@ void tmnt_state::ssriders(machine_config &config)
m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::ssriders_audio_map);
/* NMIs are generated by the 053260 */
- MCFG_MACHINE_START_OVERRIDE(tmnt_state,common)
MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common)
EEPROM_ER5911_8BIT(config, "eeprom");
@@ -2508,7 +2516,6 @@ void tmnt_state::sunsetbl(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &tmnt_state::sunsetbl_main_map);
m_maincpu->set_vblank_int("screen", FUNC(tmnt_state::irq4_line_hold));
- MCFG_MACHINE_START_OVERRIDE(tmnt_state,common)
MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common)
EEPROM_ER5911_8BIT(config, "eeprom");
@@ -2558,7 +2565,6 @@ void tmnt_state::thndrx2(machine_config &config)
m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::thndrx2_audio_map);
/* NMIs are generated by the 053260 */
- MCFG_MACHINE_START_OVERRIDE(tmnt_state,common)
MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common)
EEPROM_ER5911_8BIT(config, "eeprom");
@@ -4297,9 +4303,9 @@ GAME( 1991, blswhstl, 0, blswhstl, blswhstl, tmnt_state, empty_init,
GAME( 1991, blswhstla, blswhstl, blswhstl, blswhstl, tmnt_state, empty_init, ROT90, "Konami", "Bells & Whistles (Asia, version M)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, detatwin, blswhstl, blswhstl, blswhstl, tmnt_state, empty_init, ROT90, "Konami", "Detana!! Twin Bee (Japan, version J)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, glfgreat, 0, glfgreat, glfgreat, tmnt_state, empty_init, ROT0, "Konami", "Golfing Greats (World, version L)", MACHINE_UNEMULATED_PROTECTION | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-GAME( 1991, glfgreatu, glfgreat, glfgreat, glfgreatu, tmnt_state, empty_init, ROT0, "Konami", "Golfing Greats (US, version K)", MACHINE_UNEMULATED_PROTECTION | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-GAME( 1991, glfgreatj, glfgreat, glfgreat, glfgreatj, tmnt_state, empty_init, ROT0, "Konami", "Golfing Greats (Japan, version J)", MACHINE_UNEMULATED_PROTECTION | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1991, glfgreat, 0, glfgreat, glfgreat, glfgreat_state, empty_init, ROT0, "Konami", "Golfing Greats (World, version L)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1991, glfgreatu, glfgreat, glfgreat, glfgreatu, glfgreat_state, empty_init, ROT0, "Konami", "Golfing Greats (US, version K)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1991, glfgreatj, glfgreat, glfgreat, glfgreatj, glfgreat_state, empty_init, ROT0, "Konami", "Golfing Greats (Japan, version J)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1991, tmnt2, 0, tmnt2, ssridr4p, tmnt_state, empty_init, ROT0, "Konami", "Teenage Mutant Ninja Turtles - Turtles in Time (4 Players ver UAA)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, tmnt2a, tmnt2, tmnt2, ssrid4ps, tmnt_state, empty_init, ROT0, "Konami", "Teenage Mutant Ninja Turtles - Turtles in Time (4 Players ver ADA)", MACHINE_SUPPORTS_SAVE )
@@ -4330,5 +4336,5 @@ GAME( 1991, thndrx2, 0, thndrx2, thndrx2, tmnt_state, empty_init,
GAME( 1991, thndrx2a, thndrx2, thndrx2, thndrx2, tmnt_state, empty_init, ROT0, "Konami", "Thunder Cross II (Asia)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, thndrx2j, thndrx2, thndrx2, thndrx2, tmnt_state, empty_init, ROT0, "Konami", "Thunder Cross II (Japan)", MACHINE_SUPPORTS_SAVE )
-GAME( 1993, prmrsocr, 0, prmrsocr, prmrsocr, tmnt_state, empty_init, ROT0, "Konami", "Premier Soccer (ver EAB)", MACHINE_SUPPORTS_SAVE )
-GAME( 1993, prmrsocrj, prmrsocr, prmrsocr, prmrsocr, tmnt_state, empty_init, ROT0, "Konami", "Premier Soccer (ver JAB)", MACHINE_SUPPORTS_SAVE )
+GAME( 1993, prmrsocr, 0, prmrsocr, prmrsocr, prmrsocr_state, empty_init, ROT0, "Konami", "Premier Soccer (ver EAB)", MACHINE_SUPPORTS_SAVE )
+GAME( 1993, prmrsocrj, prmrsocr, prmrsocr, prmrsocr, prmrsocr_state, empty_init, ROT0, "Konami", "Premier Soccer (ver JAB)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/tp84.cpp b/src/mame/drivers/tp84.cpp
index 5840e38ef78..78c85607318 100644
--- a/src/mame/drivers/tp84.cpp
+++ b/src/mame/drivers/tp84.cpp
@@ -224,7 +224,7 @@ WRITE8_MEMBER(tp84_state::sub_irq_mask_w)
void tp84_state::cpu2_map(address_map &map)
{
-// AM_RANGE(0x0000, 0x0000) AM_RAM /* Watch dog ?*/
+// map(0x0000, 0x0000).ram(); /* Watch dog ?*/
map(0x2000, 0x2000).r(FUNC(tp84_state::tp84_scanline_r)); /* beam position */
map(0x4000, 0x4000).w(FUNC(tp84_state::sub_irq_mask_w));
map(0x6000, 0x679f).ram();
diff --git a/src/mame/drivers/tr175.cpp b/src/mame/drivers/tr175.cpp
index 4a7cf07ed6d..0a9084740db 100644
--- a/src/mame/drivers/tr175.cpp
+++ b/src/mame/drivers/tr175.cpp
@@ -60,7 +60,7 @@ void tr175_state::mem_map(address_map &map)
map(0xff0000, 0xff7fff).ram(); // video RAM?
map(0xffe000, 0xffe01f).rw("duart", FUNC(scn2681_device::read), FUNC(scn2681_device::write)).umask16(0xff00);
map(0xffe400, 0xffe40f).rw("avdc", FUNC(scn2674_device::read), FUNC(scn2674_device::write)).umask16(0xff00);
- map(0xffe800, 0xffe805).unmaprw(); //AM_DEVREADWRITE8("pai", um82c11_device, read, write, 0xff00)
+ map(0xffe800, 0xffe805).unmaprw(); //.rw("pai", FUNC(um82c11_device::read), FUNC(um82c11_device::write)).umask16(0xff00);
map(0xffec01, 0xffec01).w(FUNC(tr175_state::ffec01_w));
map(0xfff000, 0xfff000).w(FUNC(tr175_state::fff000_w));
map(0xfff400, 0xfff400).r(FUNC(tr175_state::fff400_r));
diff --git a/src/mame/drivers/trackfld.cpp b/src/mame/drivers/trackfld.cpp
index 52b89f5c625..ee54ef0d337 100644
--- a/src/mame/drivers/trackfld.cpp
+++ b/src/mame/drivers/trackfld.cpp
@@ -239,7 +239,7 @@ void trackfld_state::main_map(address_map &map)
map(0x1281, 0x1281).mirror(0x007c).portr("IN0");
map(0x1282, 0x1282).mirror(0x007c).portr("IN1");
map(0x1283, 0x1283).mirror(0x007c).portr("DSW1");
- /* not used according to schems: AM_RANGE(0x1300, 0x1300) AM_MIRROR(0x007f) AM_READ_PORT("DSW3") */
+ /* not used according to schems: map(0x1300, 0x1300).mirror(0x007f).portr("DSW3"); */
map(0x1800, 0x183f).ram().share(m_spriteram2);
map(0x1840, 0x185f).ram().share(m_scroll);
map(0x1860, 0x1bff).ram();
@@ -283,7 +283,7 @@ void trackfld_state::yieartf_map(address_map &map)
map(0x0003, 0x0003).w(m_vlm, FUNC(vlm5030_device::data_w));
map(0x1000, 0x1000).mirror(0x007f).w("watchdog", FUNC(watchdog_timer_device::reset_w)); /* AFE */
map(0x1080, 0x1087).mirror(0x0078).w(m_mainlatch, FUNC(ls259_device::write_d0));
-// AM_RANGE(0x1100, 0x1100) AM_MIRROR(0x007f) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) /* 32 */
+// map(0x1100, 0x1100).mirror(0x007f).w("soundlatch", FUNC(generic_latch_8_device::write)); /* 32 */
map(0x1200, 0x1200).mirror(0x007f).portr("DSW2");
map(0x1280, 0x1280).mirror(0x007c).portr("SYSTEM");
map(0x1281, 0x1281).mirror(0x007c).portr("IN0");
@@ -344,7 +344,7 @@ void trackfld_state::mastkin_map(address_map &map)
map(0x1200, 0x1200).portr("DSW2");
map(0x1280, 0x1280).portr("SYSTEM");
map(0x1281, 0x1281).portr("IN0");
-// AM_RANGE(0x1282, 0x1282) AM_READ_PORT("IN1") /* unused */
+// map(0x1282, 0x1282).portr("IN1"); /* unused */
map(0x1283, 0x1283).portr("DSW1");
map(0x1800, 0x183f).ram().share(m_spriteram2);
map(0x1840, 0x185f).ram().share(m_scroll);
diff --git a/src/mame/drivers/triforce.cpp b/src/mame/drivers/triforce.cpp
index d4a9fc8aee0..47842072b49 100644
--- a/src/mame/drivers/triforce.cpp
+++ b/src/mame/drivers/triforce.cpp
@@ -908,7 +908,7 @@ ROM_START( tfupdate )
TRIFORCE_BIOS
DISK_REGION( "gdrom" )
- DISK_IMAGE_READONLY( "gdt-0011", 0, SHA1(834e261f2752883ceac0220a0305f9b09c3b5a9b) )
+ DISK_IMAGE_READONLY( "gdt-0011", 0, SHA1(fbfd7960ca7070721e25c08ccc428a2e0cf4766f) )
ROM_REGION( 0x50, "pic", ROMREGION_ERASE)
ROM_LOAD("317-0371-jpn.data", 0x00, 0x50, CRC(08434e5e) SHA1(2121999e851f6f62ab845e6de40849d850ac9d1c) )
diff --git a/src/mame/drivers/trs80dt1.cpp b/src/mame/drivers/trs80dt1.cpp
index ae417e08c72..788e7a698b1 100644
--- a/src/mame/drivers/trs80dt1.cpp
+++ b/src/mame/drivers/trs80dt1.cpp
@@ -9,7 +9,7 @@ Tandy's Data Terminal.
Skeleton driver commenced on 2017-10-25.
Core bugs noted:
-- If AM_REGION used to locate the main rom in another region, validation
+- If region() used to locate the main rom in another region, validation
complains that region ':maincpu' not found.
- If region 'maincpu' changed to 0x1000 (same size as the rom), a fatal error
of duplicate save state occurs at start.
diff --git a/src/mame/drivers/trs80m2.cpp b/src/mame/drivers/trs80m2.cpp
index 0fabe7779ac..8ac7584d544 100644
--- a/src/mame/drivers/trs80m2.cpp
+++ b/src/mame/drivers/trs80m2.cpp
@@ -364,10 +364,10 @@ void trs80m16_state::m16_z80_io(address_map &map)
void trs80m2_state::m68000_mem(address_map &map)
{
-// AM_RANGE(0x7800d0, 0x7800d1) 9519A (C/D = UDS)
-// AM_RANGE(0x7800d2, 0x7800d3) limit/offset 2
-// AM_RANGE(0x7800d4, 0x7800d5) limit/offset 1
-// AM_RANGE(0x7800d6, 0x7800d7) Z80 IRQ
+// map(0x7800d0, 0x7800d1) 9519A (C/D = UDS)
+// map(0x7800d2, 0x7800d3) limit/offset 2
+// map(0x7800d4, 0x7800d5) limit/offset 1
+// map(0x7800d6, 0x7800d7) Z80 IRQ
}
diff --git a/src/mame/drivers/ts802.cpp b/src/mame/drivers/ts802.cpp
index d8fcc909224..70f79ba3383 100644
--- a/src/mame/drivers/ts802.cpp
+++ b/src/mame/drivers/ts802.cpp
@@ -80,7 +80,7 @@ void ts802_state::ts802_mem(address_map &map)
void ts802_state::ts802_io(address_map &map)
{
- //ADDRESS_MAP_UNMAP_HIGH
+ //map.unmap_value_high();
map.global_mask(0xff);
map(0x00, 0x03).r(FUNC(ts802_state::port00_r)); // DIP switches
// 04 - written once after OS boot to bank in RAM from 0000-3FFF instead of ROM. 4000-FFFF is always RAM.
@@ -88,7 +88,7 @@ void ts802_state::ts802_io(address_map &map)
// 08-0B: Z80 CTC
map(0x08, 0x0b).rw("ctc", FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
// 0C-0F: Z80 SIO #1
- //AM_RANGE(0x0c, 0x0f) AM_DEVREADWRITE("dart1", z80dart_device, ba_cd_r, ba_cd_w)
+ //map(0x0c, 0x0f).rw("dart1", FUNC(z80dart_device::ba_cd_r), FUNC(z80dart_device::ba_cd_w));
map(0x0c, 0x0c).r(FUNC(ts802_state::port0c_r));
map(0x0d, 0x0d).r(FUNC(ts802_state::port0d_r)).w(m_terminal, FUNC(generic_terminal_device::write));
map(0x0e, 0x0e).r(FUNC(ts802_state::port0e_r));
diff --git a/src/mame/drivers/ts816.cpp b/src/mame/drivers/ts816.cpp
index b6c59cccdb4..ee0dbc42ae1 100644
--- a/src/mame/drivers/ts816.cpp
+++ b/src/mame/drivers/ts816.cpp
@@ -87,7 +87,7 @@ void ts816_state::ts816_io(address_map &map)
map(0x38, 0x3b).rw("sio7", FUNC(z80sio_device::cd_ba_r), FUNC(z80sio_device::cd_ba_w)); // SIO 7 for user 13 & 14
map(0x40, 0x43).rw("sio4", FUNC(z80sio_device::cd_ba_r), FUNC(z80sio_device::cd_ba_w)); // SIO 4 for user 7 & 8
map(0x48, 0x4b).rw("sio8", FUNC(z80sio_device::cd_ba_r), FUNC(z80sio_device::cd_ba_w)); // SIO 8 for user 15 & 16
- //AM_RANGE(0x50, 0x53) // SIO 0 for RS232 1 and part of tape interface
+ //map(0x50, 0x53) // SIO 0 for RS232 1 and part of tape interface
map(0x50, 0x50).r(FUNC(ts816_state::keyin_r)).w(m_terminal, FUNC(generic_terminal_device::write));
map(0x52, 0x52).r(FUNC(ts816_state::status_r));
map(0x58, 0x5b).rw("sio9", FUNC(z80sio_device::cd_ba_r), FUNC(z80sio_device::cd_ba_w)); // SIO 9 for RS232 2 & 3
diff --git a/src/mame/drivers/tugboat.cpp b/src/mame/drivers/tugboat.cpp
index aca5d649683..89a2a71b62b 100644
--- a/src/mame/drivers/tugboat.cpp
+++ b/src/mame/drivers/tugboat.cpp
@@ -240,7 +240,7 @@ void tugboat_state::main_map(address_map &map)
map(0x10c0, 0x10c1).w(FUNC(tugboat_state::hd46505_1_w));
map(0x11e4, 0x11e7).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0x11e8, 0x11eb).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
- //AM_RANGE(0x1700, 0x1fff) AM_RAM
+ //map(0x1700, 0x1fff).ram();
map(0x18e0, 0x18ef).w(FUNC(tugboat_state::score_w));
map(0x2000, 0x2fff).ram(); /* tilemap RAM */
map(0x4000, 0x7fff).rom();
diff --git a/src/mame/drivers/tumbleb.cpp b/src/mame/drivers/tumbleb.cpp
index 0e4fa6be68e..51b5c7a0fa2 100644
--- a/src/mame/drivers/tumbleb.cpp
+++ b/src/mame/drivers/tumbleb.cpp
@@ -862,7 +862,7 @@ void tumbleb_state::semicom_sound_map(address_map &map)
map(0xd000, 0xd7ff).ram();
map(0xf000, 0xf001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
map(0xf002, 0xf002).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- //AM_RANGE(0xf006, 0xf006) ??
+ //map(0xf006, 0xf006) ??
map(0xf008, 0xf008).r(m_soundlatch, FUNC(generic_latch_8_device::read));
map(0xf00e, 0xf00e).w(FUNC(tumbleb_state::oki_sound_bank_w));
}
@@ -872,7 +872,7 @@ void tumbleb_state::suprtrio_sound_map(address_map &map)
map(0x0000, 0xcfff).rom();
map(0xd000, 0xd7ff).ram();
map(0xf002, 0xf002).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- //AM_RANGE(0xf006, 0xf006) ??
+ //map(0xf006, 0xf006) ??
map(0xf008, 0xf008).r(m_soundlatch, FUNC(generic_latch_8_device::read));
map(0xf00e, 0xf00e).w(FUNC(tumbleb_state::oki_sound_bank_w));
}
diff --git a/src/mame/drivers/twin16.cpp b/src/mame/drivers/twin16.cpp
index d6d63c5e8d0..b43207e3c00 100644
--- a/src/mame/drivers/twin16.cpp
+++ b/src/mame/drivers/twin16.cpp
@@ -177,7 +177,7 @@ void twin16_state::main_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
map(0x040000, 0x043fff).ram().share("comram");
-// AM_RANGE(0x044000, 0x04ffff) AM_NOP // miaj
+// map(0x044000, 0x04ffff).noprw(); // miaj
map(0x060000, 0x063fff).ram();
map(0x080000, 0x080fff).rw(m_palette, FUNC(palette_device::read8), FUNC(palette_device::write8)).umask16(0x00ff).share("palette");
map(0x081000, 0x081fff).nopw();
@@ -192,7 +192,7 @@ void twin16_state::main_map(address_map &map)
map(0x0c0000, 0x0c000f).w(FUNC(twin16_state::video_register_w));
map(0x0c000e, 0x0c000f).r(FUNC(twin16_state::sprite_status_r));
map(0x100000, 0x103fff).ram().w(FUNC(twin16_state::fixram_w)).share("fixram");
-// AM_RANGE(0x104000, 0x105fff) AM_NOP // miaj
+// map(0x104000, 0x105fff).noprw(); // miaj
map(0x120000, 0x121fff).ram().w(FUNC(twin16_state::videoram0_w)).share("videoram.0");
map(0x122000, 0x123fff).ram().w(FUNC(twin16_state::videoram1_w)).share("videoram.1");
map(0x140000, 0x143fff).ram().share("spriteram");
@@ -202,7 +202,7 @@ void twin16_state::sub_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
map(0x040000, 0x043fff).ram().share("comram");
-// AM_RANGE(0x044000, 0x04ffff) AM_NOP // miaj
+// map(0x044000, 0x04ffff).noprw(); // miaj
map(0x060000, 0x063fff).ram();
map(0x080000, 0x09ffff).rom().region("data", 0);
map(0x0a0000, 0x0a0001).w(FUNC(twin16_state::CPUB_register_w));
diff --git a/src/mame/drivers/twinkle.cpp b/src/mame/drivers/twinkle.cpp
index 8dc21b1df3d..de2f40da541 100644
--- a/src/mame/drivers/twinkle.cpp
+++ b/src/mame/drivers/twinkle.cpp
@@ -1077,7 +1077,6 @@ void twinkle_state::cdrom_config(device_t *device)
{
device->subdevice<cdda_device>("cdda")->add_route(0, "^^speakerleft", 1.0);
device->subdevice<cdda_device>("cdda")->add_route(1, "^^speakerright", 1.0);
- device = device->subdevice("cdda");
}
void twinkle_state::twinkle(machine_config &config)
diff --git a/src/mame/drivers/tx1.cpp b/src/mame/drivers/tx1.cpp
index 6bbba6c424c..ff74f761652 100644
--- a/src/mame/drivers/tx1.cpp
+++ b/src/mame/drivers/tx1.cpp
@@ -8,7 +8,7 @@
Games supported:
* TX-1 (1983) [3 sets]
- * Buggy Boy (1985)
+ * Buggy Boy (1985) [2 sets]
* Buggy Boy Junior (1986)
ROMs wanted:
@@ -538,6 +538,12 @@ ROM_START( tx1jc )
ROM_END
+/*
+ The game is comprised of three boards:
+ - Sound Board (labeled TC033A, top small board)
+ - CPU Board (labeled TC031, middle board, uses 15.000 MHz xtal)
+ - Video Board (labeled TC032, bottom board, uses 18.000 MHz xtal)
+*/
ROM_START( buggyboy )
ROM_REGION( 0x100000, "main_cpu", 0 )
ROM_LOAD16_BYTE( "bug1a.230", 0x20000, 0x8000, CRC(92797c25) SHA1(8f7434abbd7f557d3202abb01b1e4899c82c67a5) )
@@ -636,6 +642,104 @@ ROM_START( buggyboy )
/* TODO: PALs */
ROM_END
+ROM_START( buggyboyb )
+ ROM_REGION( 0x100000, "main_cpu", 0 )
+ ROM_LOAD16_BYTE( "bug1a.230", 0x20000, 0x8000, CRC(92797c25) SHA1(8f7434abbd7f557d3202abb01b1e4899c82c67a5) )
+ ROM_LOAD16_BYTE( "bug4a.173", 0x20001, 0x8000, CRC(40ce3930) SHA1(4bf62ebeea1549a13a21a32cb860717f064b186a) )
+
+ ROM_LOAD16_BYTE( "bug2b.231", 0xf0000, 0x4000, CRC(44ebf66d) SHA1(507417754e3fc2b9e03a2c477da0ae3ee49a8e11) )
+ ROM_LOAD16_BYTE( "bug5b.174", 0xf0001, 0x4000, CRC(d02dd360) SHA1(00ee44ff31b5dc978248356593ca797bc291f636) )
+
+ ROM_LOAD16_BYTE( "bug3b.232", 0xf8000, 0x4000, CRC(43cce3f0) SHA1(17de3728d809d386f6a7a330c8c8701975d4ebed) )
+ ROM_LOAD16_BYTE( "bug6b.175", 0xf8001, 0x4000, CRC(8f000dfa) SHA1(5fd78a03a00f547bbb431839f78a8d10a4ba8e3e) )
+
+ ROM_REGION( 0x100000, "math_cpu", 0 )
+ ROM_LOAD16_BYTE( "bug8a.061", 0x04000, 0x2000, CRC(512291cd) SHA1(60f87133c86b88b982ba4680f96d0ac55970cb8d) )
+ ROM_LOAD16_BYTE( "bug7a.060", 0x04001, 0x2000, CRC(d24dfdef) SHA1(37d05a8bf9567380523df01265afb9780e39ea2a) )
+
+ ROM_REGION( 0x10000, "soundbrd:audio_cpu", 0 )
+ ROM_LOAD( "bug35.11", 0x00000, 0x4000, CRC(7aa16e9e) SHA1(ea54e56270f70351a62a78fa32027bb41ef9861e) )
+
+ ROM_REGION( 0x8000, "char_tiles", 0 )
+ ROM_LOAD( "bug34a", 0x00000, 0x4000, CRC(8c64eb3c) SHA1(e0846f9a4811a0b6561d7a9aa7d50c23ced8d1d3) )
+ ROM_LOAD( "bug33a.168", 0x04000, 0x4000, CRC(b500d683) SHA1(c9f92930c815a947fbd9a3846fd9580671da324f) )
+
+ ROM_REGION( 0x40000, "obj_tiles", 0 )
+ ROM_LOAD( "bug26.275", 0x00000, 0x4000, CRC(fc6fce64) SHA1(4cea5796c26980455bdc0f8fcdb8e719caa8041f) )
+ ROM_LOAD( "bug27.245", 0x04000, 0x4000, CRC(54b9a9dd) SHA1(4f4f29a459991501013cdfffd34b50eed1cde850) )
+ ROM_LOAD( "bug19.274", 0x08000, 0x4000, CRC(3392c2ef) SHA1(a4aa4f24517da16495be073aa590cda81d9fca49) )
+ ROM_LOAD( "bug20.244", 0x0c000, 0x4000, CRC(9ee4c236) SHA1(51155193e470a82deb5e3f1979ce112ada39b705) )
+
+ ROM_LOAD( "bug28.243", 0x10000, 0x4000, CRC(feef6c27) SHA1(61679d67a6ef85965078e3ddd11c178a1a55f223) )
+ ROM_LOAD( "bug29.212", 0x14000, 0x4000, CRC(f570e00b) SHA1(ced4b9a4a324a4c92c08e088fa116469b2878f55) )
+ ROM_LOAD( "bug21.242", 0x18000, 0x4000, CRC(088fef40) SHA1(a0c866c32857690915a33b0810219fb3cbf24f24) )
+ ROM_LOAD( "bug22.211", 0x1c000, 0x4000, CRC(5ec02630) SHA1(75233de03461016d1bc7c4ece0502e16e53c3351) )
+
+ ROM_LOAD( "bug30.186", 0x20000, 0x4000, CRC(5c2ecabf) SHA1(5be25ddc1e2aac4579a39e405f8eac919f4917bd) )
+ ROM_RELOAD( 0x34000, 0x4000 )
+ ROM_LOAD( "bug32.158", 0x24000, 0x4000, CRC(125461f2) SHA1(9dd94344cfc7a17670d6f512ecd5947f198154c0) )
+ ROM_RELOAD( 0x30000, 0x4000 )
+ ROM_LOAD( "bug23.185", 0x28000, 0x4000, CRC(cafb4d4a) SHA1(aa24becdf354abca507dbd77fa18d05bea685285) )
+ ROM_RELOAD( 0x3c000, 0x4000 )
+ ROM_LOAD( "bug25.157", 0x2c000, 0x4000, CRC(80c4e045) SHA1(be3b537d3ed3ee74fc51059aa744dca4d63431f6) )
+ ROM_RELOAD( 0x38000, 0x4000 )
+
+ ROM_REGION( 0x8000, "road", 0 )
+ ROM_LOAD( "bug12.58", 0x0000, 0x2000, CRC(bd34d55c) SHA1(05a719a6eff5af3aaaa1e0ee783b18597582ed64) )
+ ROM_LOAD( "bug11.57", 0x2000, 0x2000, CRC(a44d43eb) SHA1(c4d68c7e123506acaa6adc353579cac19ecb3a9d) )
+ ROM_LOAD( "bb3.137", 0x4000, 0x0200, CRC(ad76f3fb) SHA1(bf96f903b32e009a2592df0f28cc3e20b039f4d4) )
+ ROM_LOAD( "bb4.138", 0x4200, 0x0200, CRC(e4ca4ea0) SHA1(0c8dd6f87bddcc709de42e0c4a59be3c19c5aa8a) )
+ ROM_LOAD( "bb5.139", 0x4400, 0x0200, CRC(e2577a9a) SHA1(6408f815a1357712473c54a8603137a58431781b) )
+ ROM_LOAD( "bb6.94", 0x4600, 0x0200, CRC(ad43e02a) SHA1(c50a398020508f52ddf8d45881f211d17d096fa1) )
+
+ ROM_REGION16_LE( 0x10000, "au_data", 0 )
+ ROM_LOAD16_BYTE( "bug9.170", 0x0000, 0x4000, CRC(7d84135b) SHA1(3c669c4e796e83672aceeb6de1aeea28f9f2fef0) )
+ ROM_LOAD16_BYTE( "bug10.171", 0x0001, 0x4000, CRC(b518dd6f) SHA1(7cefa2f9438306c81dc83cd260928c835eb9b712) )
+ ROM_LOAD16_BYTE( "bb1.245", 0x8000, 0x0200, CRC(0ddbd36d) SHA1(7a08901a350c315d46ab8d0aa881db384b9f37d2) )
+ ROM_LOAD16_BYTE( "bb2.220", 0x8001, 0x0200, CRC(71d47de1) SHA1(2da9aeb3f2ebb1114631c8042a37c4f4c18e741b) )
+
+ ROM_REGION( 0x10000, "obj_map", 0 )
+ ROM_LOAD( "bug16.210", 0x0000, 0x4000, CRC(8b64409e) SHA1(1fb4c6923e6a9e1f2a63a2c335b63e2bdc44b61f) )
+ ROM_LOAD( "bug14.209", 0x4000, 0x4000, CRC(4e765282) SHA1(f7d69d39823a8b33bd0e5b1bd78a5d68a293e221) )
+ ROM_LOAD( "bug17.182", 0x8000, 0x4000, CRC(a5d84df6) SHA1(4e33ef0bee383e0d47b0c679cd2a54edb7ca0e3e) )
+ ROM_LOAD( "bug15.181", 0xc000, 0x4000, CRC(d519de10) SHA1(535d05e11af65be65f3d9924b0c48faf8dcfd1bf) )
+
+ ROM_REGION( 0x6000, "obj_luts", 0 )
+ ROM_LOAD( "bug13.124", 0x0000, 0x2000, CRC(53604d7a) SHA1(bfa304cd885162ece7a5f54988d9880fc541eb3a) )
+ ROM_LOAD( "bug18.156", 0x2000, 0x4000, CRC(e58321a6) SHA1(81be87d3c6046bb375c74362dc940f0269b39d1d) )
+
+ ROM_REGION( 0x10000, "proms", 0 )
+ ROM_LOAD( "bb10.191", 0x000, 0x100, CRC(f2368398) SHA1(53f28dba11bb494d033bb279abf138975c84b20d) )
+ ROM_LOAD( "bb11.192", 0x100, 0x100, CRC(bf77f624) SHA1(b042d293d2094dbabb32d628fd9addd832f084ef) )
+ ROM_LOAD( "bb12.193", 0x200, 0x100, CRC(10a2e8d1) SHA1(51a8c51ecbbb7bd04ae46fb5598d2c8de8097581) )
+ ROM_LOAD( "bb13.194", 0x300, 0x100, CRC(40d10dfa) SHA1(e40b4c424827937fec6df1a27b19b8dc09d3274a) )
+
+ ROM_LOAD( "bb10.104", 0x000, 0x100, CRC(f2368398) SHA1(53f28dba11bb494d033bb279abf138975c84b20d) )
+ ROM_LOAD( "bb11.105", 0x100, 0x100, CRC(bf77f624) SHA1(b042d293d2094dbabb32d628fd9addd832f084ef) )
+ ROM_LOAD( "bb12.106", 0x200, 0x100, CRC(10a2e8d1) SHA1(51a8c51ecbbb7bd04ae46fb5598d2c8de8097581) )
+ ROM_LOAD( "bb13.107", 0x300, 0x100, CRC(40d10dfa) SHA1(e40b4c424827937fec6df1a27b19b8dc09d3274a) )
+
+ ROM_LOAD( "bb10.49", 0x000, 0x100, CRC(f2368398) SHA1(53f28dba11bb494d033bb279abf138975c84b20d) )
+ ROM_LOAD( "bb11.50", 0x100, 0x100, CRC(bf77f624) SHA1(b042d293d2094dbabb32d628fd9addd832f084ef) )
+ ROM_LOAD( "bb12.51", 0x200, 0x100, CRC(10a2e8d1) SHA1(51a8c51ecbbb7bd04ae46fb5598d2c8de8097581) )
+ ROM_LOAD( "bb13.52", 0x300, 0x100, CRC(40d10dfa) SHA1(e40b4c424827937fec6df1a27b19b8dc09d3274a) )
+
+ ROM_LOAD( "bb14.199", 0x400, 0x100, CRC(0b821e0b) SHA1(b9401b9364fb99e15f562df91dcfdec1b989af2d) )
+ ROM_LOAD( "bb14.197", 0x400, 0x100, CRC(0b821e0b) SHA1(b9401b9364fb99e15f562df91dcfdec1b989af2d) )
+ ROM_LOAD( "bb14.137", 0x400, 0x100, CRC(0b821e0b) SHA1(b9401b9364fb99e15f562df91dcfdec1b989af2d) )
+
+ ROM_LOAD( "bb9.271", 0x500, 0x800, CRC(6fc807d1) SHA1(3442cbb21bbedf6291a3fe1747d479445f613d26) )
+ ROM_LOAD( "bb9.238", 0xd00, 0x800, CRC(6fc807d1) SHA1(3442cbb21bbedf6291a3fe1747d479445f613d26) )
+
+ ROM_LOAD( "bb7.16", 0x1500, 0x100, CRC(b57b609f) SHA1(2dea375437c62cb4c64b21d5e6ddc09397b6ab35) )
+ ROM_LOAD( "bb7.18", 0x1500, 0x100, CRC(b57b609f) SHA1(2dea375437c62cb4c64b21d5e6ddc09397b6ab35) )
+ ROM_LOAD( "bb7.20", 0x1500, 0x100, CRC(b57b609f) SHA1(2dea375437c62cb4c64b21d5e6ddc09397b6ab35) )
+
+ ROM_LOAD( "bb8.152", 0x1600, 0x100, CRC(2330ff4f) SHA1(e86eb63ce47572bcbbf325f9bb749d10d96bf2e7) )
+
+ /* TODO: PALs */
+ROM_END
+
/*
The game is comprised of three boards:
- Sound Board (labeled TC043-1, top small board)
@@ -742,5 +846,6 @@ ROM_END
GAMEL( 1983, tx1, 0, tx1, 0, tx1_state, empty_init, ROT0, "Tatsumi (Atari/Namco/Taito license)", "TX-1 (World)", MACHINE_IMPERFECT_SOUND, layout_tx1 )
GAMEL( 1983, tx1jb, tx1, tx1, 0, tx1_state, empty_init, ROT0, "Tatsumi", "TX-1 (Japan rev. B)", MACHINE_IMPERFECT_SOUND, layout_tx1 )
GAMEL( 1983, tx1jc, tx1, tx1, 0, tx1_state, empty_init, ROT0, "Tatsumi", "TX-1 (Japan rev. C)", MACHINE_IMPERFECT_SOUND, layout_tx1 )
-GAMEL( 1985, buggyboy, 0, buggyboy, 0, tx1_state, empty_init, ROT0, "Tatsumi", "Buggy Boy/Speed Buggy (cockpit)", 0, layout_buggyboy )
+GAMEL( 1985, buggyboy, 0, buggyboy, 0, tx1_state, empty_init, ROT0, "Tatsumi", "Buggy Boy/Speed Buggy (cockpit, rev. D)", 0, layout_buggyboy )
+GAMEL( 1986, buggyboyb, buggyboy, buggyboy, 0, tx1_state, empty_init, ROT0, "Tatsumi", "Buggy Boy/Speed Buggy (cockpit, rev. B)", 0, layout_buggyboy )
GAMEL( 1986, buggyboyjr, buggyboy, buggybjr, 0, tx1_state, empty_init, ROT0, "Tatsumi", "Buggy Boy Junior/Speed Buggy (upright)", 0, layout_buggybjr )
diff --git a/src/mame/drivers/uchroma68.cpp b/src/mame/drivers/uchroma68.cpp
new file mode 100644
index 00000000000..a9b075c183e
--- /dev/null
+++ b/src/mame/drivers/uchroma68.cpp
@@ -0,0 +1,497 @@
+// license:BSD-3-Clause
+// copyright-holders: 68bit
+/******************************************************************************
+
+Micro Chroma 68
+Motorola evaluation board for the MC6847 VDG and MC1372 RF modulator.
+
+The Micro Chroma was supplied as a kit that included the PCB and the major
+parts and is reported to have been designed by the "applications group" in
+Austin including Tim Ahrens, Jack Brown, and Hunter Scales. The micro Chroma
+68 uses the TVBUG monitor which is a 2k monitor ROM that is included in the
+MC6846 timer and is reported to have been written by John Dumas with parts
+taken from MIKBUG with the help of Mike Wiles the author of MIKBUG.
+
+References:
+
+1. "Micro Chroma 68: The new 'bug' from Motorola TVBUG 1.2", Motorola
+ Semiconductor Products Inc. Microprocessor Operations., 1978
+
+G - Go to user program.
+G <addr> - Go to user program, starting at the given address 'addr'.
+L - Load tape. The encoding uses the Kansas City Standard and the format is
+ largely JBUG compatible. Enter an offset, the difference between the
+ existing start address and the target start address. If the data can not be
+ stored in the memory then 'Memory Bad' is printed and it exits. The load
+ can be aborted by pressing the Escape key.
+P - Punch tape. Enter the start address, the end address, a name up to 31
+ characters long, and enter return to start. The format is largely JBUG
+ compatible, just avoid using 'B' or 'G' in the name. The punch can be
+ aborted by pressing the Escape key.
+V - Verify Tape. Enter an offset, a difference between the existing start
+ address and the target start address. If there is an error then 'Memory
+ Bad' is printed and it exits. The verfiy can be aborted by pressing the
+ Escape key.
+M <addr> - Memory examine and change at address 'addr'.
+ <hh><linefeed> - Enter new data for the address and increase the address.
+ If the memory can not be changed the 'Memory Bad' is printed that the
+ memory examine is exited.
+ '^' - decrease the address.
+ <carriage return> - exit the memory examine function.
+E - Examine a memory block. Enter the start address, the end address, and then
+ a space to print the next line.
+Q - Quick load. Enter the start address, the end address, then the hex bytes
+ to load separate by a space.
+F - Fill memory. Enter the start address, the end address, and the fill byte.
+O - Offset calculation. Enter the start address and then the end address. The
+ offset is printed as a 16 bit number, the lower 8 bits being the offset.
+ If the offset is too large then 'TOO FAR' is printed.
+
+R - Register display: CC B A X PC SP. The stack pointer (SP) is stored at
+ 0xf382 to 0xf383 and may be modifed via the memory examine 'M' function
+ there. The other registers are on the stack at:
+ SP + 1 : CC
+ SP + 2 : B
+ SP + 3 : A
+ SP + 4,5 : X
+ SP + 6,7 : P
+Z - Clear screen.
+S <addr> - Set a breakpoint at address 'addr'. Up to eight breakpoints may be
+ defined. A breakpoint can not be set at 0x0000.
+U <addr> - Unset the breakpoint at address 'addr'.
+D - Remove all breakpoints.
+B - Print all breakpoints.
+C - Contine user program, until next breakpoint.
+N - Traces one instruction.
+T <n> - Traces 'n' instructions.
+
+! - User defined code from 0xf396 to 0xf398, a jump instruction.
+" - User defined code from 0xf399 to 0xf39a, a jump instruction.
+# - User defined code from 0xf39c to 0xf39d, a jump instruction.
+
+A user input function can be defined at 0xf390 to 0xf392, which is room for a
+jump instruction, and this is called by the monitor input loop. This function
+should set the carry bit on return if there is user input.
+
+A user output function can be defined at 0xf393 to 0xf395 which is room for a
+jump instruction.
+
+The board has a "Reset" button, and a "Break" button that toggled the NMI
+line. TODO implement these.
+
+The documentation includes hardware suggestions for memory expansion. This
+expands the RAM to use the address range 0x0000 to 0xcfff.
+
+The address range 0xe800 to 0xefff is for user expansion. The documentation
+gives examples using this address range for two 1k or one 2k EPROM.
+
+The documentation includes position independent ROMable code for driving a
+printer via the ACIA, and it also adds S19 'load', 'punch', and 'verify' tape
+support for compatibility with MIKBUG, EXBUG, and MINIBUG. The documentation
+suggests using this as an optional ROM at 0xe800 to 0xea73. The printer
+support implements a user output function definable at 0xf393 to direct screen
+output to the ACIA and with a hardware patch this can be directed to a RS232
+printer. The entry point for the printer support is 0xe800. The entry point
+for the S19 support is 0xe802, so type 'G E802 <CR>' to enter this option and
+it displays a choice of operations. It prints a 'B' for each record 'punched',
+and a 'S' for each record loaded or verified, and it reports the address of
+any bad memory. The S19 support writes a 0x11 (DC1) to start the tape playback
+and a 0x12 (DC2) to start the tape recording as might be expected for the
+Texas Instruments 733 ASR twin tape cassette terminal with automatic device
+control, but it does not appear to issue DC3 or DC4 to turn the tape off.
+
+The documentation includes patches for a range or TSC software which is
+generally supplied in Kansas City S19 format, so might need the above extra
+EPROM support. The omission of any mention of support for Motorola software is
+notable.
+
+The documentation includes instructions on using the Micro Chroma 68 as a dumb
+terminal, requiring some minor hardware modifications to reuse the MC6850 ACIA
+for a RS-232 interface, and it includes ROMable code at 0xfc00 to 0xffff code
+to implement this, a substitute for the TVBUG monitor. TODO might consider
+implementing this, but it was hardly a good terminal for the time.
+
+Address decoding was available in the range 0xc000 to 0xcfff in 1k blocks for
+expansion.
+
+******************************************************************************/
+
+#include "emu.h"
+#include "cpu/m6800/m6800.h"
+#include "machine/6821pia.h"
+#include "machine/6850acia.h"
+#include "machine/mc6846.h"
+#include "machine/clock.h"
+#include "machine/timer.h"
+#include "video/mc6847.h"
+#include "imagedev/cassette.h"
+#include "sound/wave.h"
+#include "speaker.h"
+
+#include "machine/terminal.h"
+#include "video/mc6845.h"
+#include "screen.h"
+
+#define XTAL_UCHROMA68 3.579545_MHz_XTAL
+
+class uchroma68_state : public driver_device
+{
+public:
+ uchroma68_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_mc6846(*this, "mc6846")
+ , m_mc6847(*this, "mc6847")
+ , m_pia(*this, "pia")
+ , m_acia(*this, "acia")
+ , m_acia_tx_clock(*this, "acia_tx_clock")
+ , m_screen(*this, "screen")
+ , m_video_ram(*this, "videoram")
+ , m_cass(*this, "cassette")
+ , m_semi_graphics_six_mod(*this, "semi_graphics_six_mod")
+ { }
+
+ void uchroma68(machine_config &config);
+
+ enum
+ {
+ TIMER_KBD_STROBE
+ };
+
+private:
+ required_device<cpu_device> m_maincpu;
+ required_device<mc6846_device> m_mc6846;
+ required_device<mc6847_base_device> m_mc6847;
+ required_device<pia6821_device> m_pia;
+ required_device<acia6850_device> m_acia;
+ required_device<clock_device> m_acia_tx_clock;
+ required_device<screen_device> m_screen;
+ required_shared_ptr<uint8_t> m_video_ram;
+ required_device<cassette_image_device> m_cass;
+ required_ioport m_semi_graphics_six_mod;
+
+ void uchroma68_mem(address_map &map);
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+
+ DECLARE_READ8_MEMBER(mc6847_videoram_r);
+ DECLARE_READ8_MEMBER(pia_pa_r);
+ DECLARE_READ8_MEMBER(pia_pb_r);
+ DECLARE_WRITE8_MEMBER(mc6846_out_w);
+ void kbd_put(uint8_t data);
+ emu_timer *m_kbd_strobe_timer;
+ bool m_kbd_strobe;
+ uint8_t m_kbd_data;
+ bool m_video_inv;
+
+ TIMER_DEVICE_CALLBACK_MEMBER(kansas_r);
+ DECLARE_WRITE_LINE_MEMBER(kansas_w);
+ uint8_t m_cass_rx_clock_count, m_cass_rx_period, m_cass_txcount;
+ bool m_cass_in, m_cass_inbit, m_cass_txbit, m_cass_last_txbit;
+};
+
+
+/***********************************************************
+
+ Address Map
+
+************************************************************/
+
+void uchroma68_state::uchroma68_mem(address_map &map)
+{
+ // On board user RAM
+ map(0x0000, 0x1fff).ram();
+
+ // Off board RAM expansion, as documented.
+ map(0x2000, 0xcfff).ram();
+
+ // Display RAM
+ map(0xd000, 0xe7ff).ram().share(m_video_ram);
+
+ // Optional EPROM, with the supplied S19 tape format support.
+ map(0xe800, 0xebff).rom();
+
+ // Stack RAM
+ map(0xf000, 0xf3ff).ram();
+
+ map(0xf408, 0xf409).mirror(0x03b0).rw(m_acia, FUNC(acia6850_device::read), FUNC(acia6850_device::write));
+
+ map(0xf404, 0xf407).mirror(0x03b0).rw(m_pia, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+
+ // Programmable counter/timer and I/O.
+ map(0xf440, 0xf447).mirror(0x0380).rw(m_mc6846, FUNC(mc6846_device::read), FUNC(mc6846_device::write));
+
+ // TVBUG 1.2 ROM
+ map(0xf800, 0xffff).rom();
+}
+
+/***********************************************************
+
+ Keys
+
+************************************************************/
+
+static INPUT_PORTS_START(uchroma68)
+
+ // The documentation notes a hardware modification to allow the use of
+ // the Semi-graphics 6 mode of the MC6847.
+ PORT_START("semi_graphics_six_mod")
+ PORT_CONFNAME(0x01, 0x00, "Semi-graphics 6 mode modification")
+ PORT_CONFSETTING(0x00, "No")
+ PORT_CONFSETTING(0x01, "Yes")
+
+INPUT_PORTS_END
+
+
+/***********************************************************
+
+************************************************************/
+
+void uchroma68_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+{
+ switch (id)
+ {
+ case TIMER_KBD_STROBE:
+ m_kbd_strobe = 1;
+ m_kbd_data = 0;
+ break;
+ default:
+ throw emu_fatalerror("Unknown id in uchroma68_state::device_timer");
+ }
+}
+
+WRITE8_MEMBER(uchroma68_state::mc6846_out_w)
+{
+ m_mc6847->css_w(!BIT(data, 0));
+ m_mc6847->intext_w(!BIT(data, 1));
+ m_mc6847->ag_w(!BIT(data, 2));
+ m_mc6847->gm0_w(BIT(data, 3));
+ m_mc6847->gm1_w(BIT(data, 4));
+ m_mc6847->gm2_w(BIT(data, 5));
+ m_video_inv = BIT(data, 6);
+ // P7 is NC.
+}
+
+
+READ8_MEMBER(uchroma68_state::mc6847_videoram_r)
+{
+ offset &= 0x1fff;
+ if (offset > 0x17ff) return 0xff;
+
+ uint8_t code = m_video_ram[offset];
+
+ if (m_semi_graphics_six_mod->read())
+ m_mc6847->inv_w(m_video_inv);
+ else
+ m_mc6847->inv_w(m_video_inv | BIT(code, 6));
+
+ m_mc6847->as_w(BIT(code, 7));
+
+ return code;
+}
+
+// TVBUG polls the parallel keyboard strobe every four video frames - it
+// blinks the cursor for four frames between polling. At a 60Hz frame rate
+// that gives polling at about every 67ms. A 70ms keyboard strobe period
+// appears to be more than adequate.
+void uchroma68_state::kbd_put(uint8_t data)
+{
+ m_kbd_data = data;
+ m_kbd_strobe_timer->adjust(attotime::from_msec(70));
+ m_kbd_strobe = 0;
+}
+
+READ8_MEMBER(uchroma68_state::pia_pa_r)
+{
+ uint8_t data = m_kbd_data;
+ return (m_kbd_strobe << 7) | data;
+}
+
+READ8_MEMBER(uchroma68_state::pia_pb_r)
+{
+ // PB0 to PB4 are Up, Down, Left, Right, Home.
+ // PB5 is NC
+ // PB6 is V VDG
+ // PB7 is H VDG
+ return (m_mc6847->hs_r() << 7) | (m_mc6847->fs_r() << 6);
+}
+
+
+TIMER_DEVICE_CALLBACK_MEMBER(uchroma68_state::kansas_r)
+{
+ // Turn 1200/2400Hz to a bit
+ uint8_t cassin = (m_cass->input() > +0.04) ? 1 : 0;
+ uint8_t inbit = m_cass_inbit;
+
+ m_cass_rx_period++;
+
+ // The RX clock is recovered from the input data, and synchronized to
+ // the bit transitions. The software expects a 1x RX clock.
+ if (++m_cass_rx_clock_count > 133)
+ m_cass_rx_clock_count = 0;
+
+ if (cassin != m_cass_in)
+ {
+ // A transition, so now check the period.
+ inbit = (m_cass_rx_period < 12) ? 1 : 0;
+ m_cass_in = cassin;
+ m_cass_rx_period = 0;
+ }
+ else if (m_cass_rx_period > 32)
+ {
+ // Idle the ACIA if there is no data.
+ m_cass_rx_period = 32;
+ inbit = 1;
+ }
+
+ if (inbit != m_cass_inbit)
+ {
+ m_acia->write_rxd(inbit);
+ m_cass_inbit = inbit;
+ // Sync the RX clock with the data edges.
+ m_cass_rx_clock_count = 0;
+ }
+
+ if (m_cass_rx_clock_count == 0)
+ m_acia->write_rxc(0);
+ else if (m_cass_rx_clock_count == 67)
+ m_acia->write_rxc(1);
+}
+
+WRITE_LINE_MEMBER(uchroma68_state::kansas_w)
+{
+ // The Kansas City cassette format encodes a '0' bit by four cycles of
+ // a 1200 Hz sine wave, and a '1' bit as eight cycles of 2400 Hz,
+ // giving a 300 baud rate.
+ //
+ // The clock rate to the ACIA is 16x the baud rate, or 4800Hz, and is
+ // divided by 2 to get the 2400 Hz rate, or divided by 4 to get the
+ // 1200 Hz rate.
+
+ // Sync the period phase on TX bit transitions.
+ if (m_cass_txbit != m_cass_last_txbit)
+ {
+ m_cass_txcount = 0;
+ m_cass_last_txbit = m_cass_txbit;
+ }
+
+ if (m_cass_txbit)
+ m_cass->output(BIT(m_cass_txcount, 1) ? +1.0 : -1.0); // 2400Hz
+ else
+ m_cass->output(BIT(m_cass_txcount, 2) ? +1.0 : -1.0); // 1200Hz
+
+ m_cass_txcount++;
+ m_acia->write_txc(state);
+}
+
+void uchroma68_state::machine_start()
+{
+ m_kbd_strobe_timer = timer_alloc(TIMER_KBD_STROBE);
+ m_kbd_strobe = 1;
+
+ save_item(NAME(m_kbd_strobe));
+ save_item(NAME(m_kbd_data));
+ save_item(NAME(m_video_inv));
+ save_item(NAME(m_cass_rx_clock_count));
+ save_item(NAME(m_cass_rx_period));
+ save_item(NAME(m_cass_txcount));
+ save_item(NAME(m_cass_in));
+ save_item(NAME(m_cass_inbit));
+ save_item(NAME(m_cass_txbit));
+ save_item(NAME(m_cass_last_txbit));
+}
+
+void uchroma68_state::machine_reset()
+{
+ m_mc6846->reset();
+ m_pia->reset();
+ m_kbd_strobe_timer->reset();
+ m_kbd_strobe = 1;
+ m_kbd_data = 0;
+
+ // These MC6846 I/O outputs are pulled high. The high impedance state
+ // of these lines is not yet emulated by the mc6846 driver, and TVBUG
+ // does not drive them. On reset these are high impedance anyway, and
+ // pulled high, so their lines going to the VDG are initialized
+ // here. The first three lines are inverted.
+ m_mc6847->css_w(0);
+ m_mc6847->intext_w(0);
+ m_mc6847->ag_w(0);
+ m_mc6847->gm0_w(1);
+ m_mc6847->gm1_w(1);
+ m_mc6847->gm2_w(1);
+ m_video_inv = 1;
+
+ m_cass_rx_clock_count = 0;
+ m_cass_rx_period = 0;
+ m_cass_txcount = 0;
+ m_cass_in = 0;
+ m_cass_inbit = 0;
+ m_cass_txbit = 0;
+ m_cass_last_txbit = 0;
+}
+
+/***********************************************************
+
+ Machine
+
+************************************************************/
+
+void uchroma68_state::uchroma68(machine_config &config)
+{
+ M6808(config, m_maincpu, XTAL_UCHROMA68); // 894.8 kHz clock
+ m_maincpu->set_addrmap(AS_PROGRAM, &uchroma68_state::uchroma68_mem);
+
+ MC6846(config, m_mc6846, XTAL_UCHROMA68 / 4); // Same as the cpu clock
+ m_mc6846->out_port().set(FUNC(uchroma68_state::mc6846_out_w));
+
+ SPEAKER(config, "mono").front_center();
+
+ CASSETTE(config, m_cass);
+ m_cass->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED);
+ m_cass->add_route(ALL_OUTPUTS, "mono", 0.05);
+
+ SCREEN(config, "screen", SCREEN_TYPE_RASTER);
+
+ mc6847_ntsc_device &vdg(MC6847_NTSC(config, "mc6847", XTAL_UCHROMA68));
+ vdg.set_screen("screen");
+ vdg.input_callback().set(FUNC(uchroma68_state::mc6847_videoram_r));
+
+ PIA6821(config, m_pia, 0);
+ m_pia->readpa_handler().set(FUNC(uchroma68_state::pia_pa_r));
+ m_pia->readpb_handler().set(FUNC(uchroma68_state::pia_pb_r));
+
+ ACIA6850(config, m_acia, 0);
+ m_acia->txd_handler().set([this] (bool state) { m_cass_txbit = state; });
+
+ CLOCK(config, m_acia_tx_clock, 4800);
+ m_acia_tx_clock->signal_handler().set(FUNC(uchroma68_state::kansas_w));
+
+ TIMER(config, "kansas_r").configure_periodic(FUNC(uchroma68_state::kansas_r), attotime::from_hz(40000));
+
+ generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0));
+ keyboard.set_keyboard_callback(FUNC(uchroma68_state::kbd_put));
+}
+
+/***********************************************************
+
+ ROMS
+
+************************************************************/
+
+ROM_START(uchroma68)
+ ROM_REGION(0x10000,"maincpu",0)
+ ROM_LOAD("tvbug.rom", 0xf800, 0x0800, CRC(47f721e4) SHA1(31ea8d596f1f99ee26c4bea694245448bfdc3ee6))
+ ROM_LOAD("uch68s19.rom", 0xe800, 0x0400, CRC(8932484f) SHA1(231098ab10185d400032415cf9b7273d736d3b87))
+ROM_END
+
+/***************************************************************************
+
+ Game driver(s)
+
+***************************************************************************/
+
+// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
+COMP( 1980, uchroma68, 0, 0, uchroma68, uchroma68, uchroma68_state, empty_init, "Motorola", "Micro Chroma 68" , MACHINE_NO_SOUND_HW )
diff --git a/src/mame/drivers/umipoker.cpp b/src/mame/drivers/umipoker.cpp
index 454845a2672..4ba2e53f8ee 100644
--- a/src/mame/drivers/umipoker.cpp
+++ b/src/mame/drivers/umipoker.cpp
@@ -357,8 +357,8 @@ void umipoker_state::umipoker_map(address_map &map)
map(0xe00004, 0xe00005).portr("IN1"); // unused?
map(0xe00008, 0xe00009).portr("IN2");
map(0xe00010, 0xe00011).w(FUNC(umipoker_state::umi_counters_w));
-// AM_RANGE(0xe0000c, 0xe0000d) AM_WRITE(lamps_w) -----> lamps only for saiyukip.
-// AM_RANGE(0xe00010, 0xe00011) AM_WRITE(counters_w) --> coin counters for both games.
+// map(0xe0000c, 0xe0000d).w(FUNC(umipoker_state::lamps_w)); -----> lamps only for saiyukip.
+// map(0xe00010, 0xe00011).w(FUNC(umipoker_state::counters_w)); --> coin counters for both games.
map(0xe00014, 0xe00015).portr("DSW1-2");
map(0xe00018, 0xe00019).portr("DSW3-4");
map(0xe00020, 0xe00021).w(FUNC(umipoker_state::umipoker_scrolly_0_w));
diff --git a/src/mame/drivers/undrfire.cpp b/src/mame/drivers/undrfire.cpp
index f30f431b1cc..197366c9332 100644
--- a/src/mame/drivers/undrfire.cpp
+++ b/src/mame/drivers/undrfire.cpp
@@ -322,8 +322,8 @@ void undrfire_state::undrfire_map(address_map &map)
map(0x000000, 0x1fffff).rom();
map(0x200000, 0x21ffff).ram().share("ram");
map(0x300000, 0x303fff).ram().share("spriteram");
-// AM_RANGE(0x304000, 0x304003) AM_RAM // debugging - doesn't change ???
-// AM_RANGE(0x304400, 0x304403) AM_RAM // debugging - doesn't change ???
+// map(0x304000, 0x304003).ram(); // debugging - doesn't change ???
+// map(0x304400, 0x304403).ram(); // debugging - doesn't change ???
map(0x400002, 0x400002).w(FUNC(undrfire_state::motor_control_w)); /* gun vibration */
map(0x500000, 0x500007).rw("tc0510nio", FUNC(tc0510nio_device::read), FUNC(tc0510nio_device::write));
map(0x600000, 0x600007).noprw(); // space for ADC0809, not fitted on pcb
diff --git a/src/mame/drivers/vboy.cpp b/src/mame/drivers/vboy.cpp
index e023e25dcb5..512925a51e8 100644
--- a/src/mame/drivers/vboy.cpp
+++ b/src/mame/drivers/vboy.cpp
@@ -1063,7 +1063,7 @@ void vboy_state::vboy_mem(address_map &map)
map(0x00020000, 0x0003ffff).rw(FUNC(vboy_state::vboy_bgmap_r), FUNC(vboy_state::vboy_bgmap_w)); // VIPC memory
- //AM_RANGE( 0x00040000, 0x0005ffff ) AM_RAM // VIPC
+ //map(0x00040000, 0x0005ffff).ram(); // VIPC
map(0x0005f800, 0x0005f87f).rw(FUNC(vboy_state::vip_r), FUNC(vboy_state::vip_w));
map(0x00078000, 0x00079fff).rw(FUNC(vboy_state::font0_r), FUNC(vboy_state::font0_w)); // Font 0-511 mirror
@@ -1073,10 +1073,10 @@ void vboy_state::vboy_mem(address_map &map)
map(0x01000000, 0x010005ff).rw("vbsnd", FUNC(vboysnd_device::read), FUNC(vboysnd_device::write));
map(0x02000000, 0x0200002b).mirror(0x0ffff00).rw(FUNC(vboy_state::io_r), FUNC(vboy_state::io_w)); // Hardware control registers mask 0xff
- //AM_RANGE( 0x04000000, 0x04ffffff ) // Expansion area
+ //map(0x04000000, 0x04ffffff) // Expansion area
map(0x05000000, 0x0500ffff).mirror(0x0ff0000).ram().share("wram");// Main RAM - 64K mask 0xffff
map(0x06000000, 0x06003fff).rw(m_cart, FUNC(vboy_cart_slot_device::read_eeprom), FUNC(vboy_cart_slot_device::write_eeprom)); // Cart RAM - 8K NVRAM
-// AM_RANGE( 0x07000000, 0x071fffff ) AM_MIRROR(0x0e00000) AM_DEVREAD("cartslot", vboy_cart_slot_device, read_cart) /* ROM */
+// map(0x07000000, 0x071fffff).mirror(0x0e00000).r("cartslot", FUNC(vboy_cart_slot_device::read_cart)); /* ROM */
}
void vboy_state::vboy_io(address_map &map)
@@ -1093,7 +1093,7 @@ void vboy_state::vboy_io(address_map &map)
map(0x00020000, 0x0003ffff).rw(FUNC(vboy_state::vboy_bgmap_r), FUNC(vboy_state::vboy_bgmap_w)); // VIPC memory
- //AM_RANGE( 0x00040000, 0x0005ffff ) AM_RAM // VIPC
+ //map(0x00040000, 0x0005ffff).ram(); // VIPC
map(0x0005f800, 0x0005f87f).rw(FUNC(vboy_state::vip_r), FUNC(vboy_state::vip_w));
map(0x00078000, 0x00079fff).rw(FUNC(vboy_state::font0_r), FUNC(vboy_state::font0_w)); // Font 0-511 mirror
@@ -1103,10 +1103,10 @@ void vboy_state::vboy_io(address_map &map)
map(0x01000000, 0x010005ff).rw("vbsnd", FUNC(vboysnd_device::read), FUNC(vboysnd_device::write));
map(0x02000000, 0x0200002b).mirror(0x0ffff00).rw(FUNC(vboy_state::io_r), FUNC(vboy_state::io_w)); // Hardware control registers mask 0xff
-// AM_RANGE( 0x04000000, 0x04ffffff ) // Expansion area
+// map(0x04000000, 0x04ffffff) // Expansion area
map(0x05000000, 0x0500ffff).mirror(0x0ff0000).ram().share("wram"); // Main RAM - 64K mask 0xffff
map(0x06000000, 0x06003fff).noprw(); // Cart RAM - 8K NVRAM ?
-// AM_RANGE( 0x07000000, 0x071fffff ) AM_MIRROR(0x0e00000) AM_DEVREAD("cartslot", vboy_cart_slot_device, read_cart) /* ROM */
+// map(0x07000000, 0x071fffff).mirror(0x0e00000).r("cartslot", FUNC(vboy_cart_slot_device::read_cart)); /* ROM */
}
/* Input ports */
diff --git a/src/mame/drivers/vcombat.cpp b/src/mame/drivers/vcombat.cpp
index a647059e88e..81ebf34076c 100644
--- a/src/mame/drivers/vcombat.cpp
+++ b/src/mame/drivers/vcombat.cpp
@@ -94,6 +94,9 @@ TODO : This is a partially working driver. Most of the memory maps for
#include "screen.h"
#include "speaker.h"
+#define VERBOSE 0
+#include "logmacro.h"
+
class vcombat_state : public driver_device
{
@@ -104,8 +107,7 @@ public:
m_framebuffer_ctrl(*this, "fb_control"),
m_maincpu(*this, "maincpu"),
m_soundcpu(*this, "soundcpu"),
- m_vid_0(*this, "vid_0"),
- m_vid_1(*this, "vid_1"),
+ m_vid(*this, "vid_%u", 0U),
m_dac(*this, "dac"),
m_crtc(*this, "crtc") { }
@@ -115,13 +117,15 @@ public:
void shadfgtr(machine_config &config);
void vcombat(machine_config &config);
+protected:
+ virtual void machine_reset() override;
+
private:
required_device<tlc34076_device> m_tlc34076;
required_shared_ptr<uint16_t> m_framebuffer_ctrl;
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_soundcpu;
- required_device<i860_cpu_device> m_vid_0;
- optional_device<i860_cpu_device> m_vid_1;
+ optional_device_array<i860_cpu_device, 2> m_vid;
required_device<dac_word_interface> m_dac;
optional_device<mc6845_device> m_crtc;
@@ -133,6 +137,7 @@ private:
DECLARE_READ16_MEMBER(control_1_r);
DECLARE_READ16_MEMBER(control_2_r);
DECLARE_READ16_MEMBER(control_3_r);
+ void wiggle_i860_common(int which, uint16_t data);
DECLARE_WRITE16_MEMBER(wiggle_i860p0_pins_w);
DECLARE_WRITE16_MEMBER(wiggle_i860p1_pins_w);
DECLARE_READ16_MEMBER(main_irqiack_r);
@@ -143,8 +148,6 @@ private:
DECLARE_WRITE16_MEMBER(vcombat_dac_w);
DECLARE_WRITE_LINE_MEMBER(sound_update);
- DECLARE_MACHINE_RESET(vcombat);
- DECLARE_MACHINE_RESET(shadfgtr);
uint32_t update_screen(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int index);
uint32_t screen_update_vcombat_main(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
uint32_t screen_update_vcombat_aux(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
@@ -246,46 +249,47 @@ READ16_MEMBER(vcombat_state::control_3_r)
return (ioport("IN2")->read() << 8);
}
-static void wiggle_i860_common(i860_cpu_device *device, uint16_t data)
+void vcombat_state::wiggle_i860_common(int which, uint16_t data)
{
int bus_hold = (data & 0x03) == 0x03;
int reset = data & 0x10;
- if (!device)
+ if (!m_vid[which].found())
return;
+ i860_cpu_device &device = *m_vid[which];
if (bus_hold)
{
- fprintf(stderr, "M0 asserting bus HOLD to i860 %s\n", device->tag());
- device->i860_set_pin(DEC_PIN_BUS_HOLD, 1);
+ LOG("M0 asserting bus HOLD to i860 #%d\n", which);
+ device.i860_set_pin(DEC_PIN_BUS_HOLD, 1);
}
else
{
- fprintf(stderr, "M0 clearing bus HOLD to i860 %s\n", device->tag());
- device->i860_set_pin(DEC_PIN_BUS_HOLD, 0);
+ LOG("M0 clearing bus HOLD to i860 #%d\n", which);
+ device.i860_set_pin(DEC_PIN_BUS_HOLD, 0);
}
if (reset)
{
- fprintf(stderr, "M0 asserting RESET to i860 %s\n", device->tag());
- device->i860_set_pin(DEC_PIN_RESET, 1);
+ LOG("M0 asserting RESET to i860 #%d\n", which);
+ device.i860_set_pin(DEC_PIN_RESET, 1);
}
else
- device->i860_set_pin(DEC_PIN_RESET, 0);
+ device.i860_set_pin(DEC_PIN_RESET, 0);
}
WRITE16_MEMBER(vcombat_state::wiggle_i860p0_pins_w)
{
- wiggle_i860_common(m_vid_0, data);
+ wiggle_i860_common(0, data);
}
WRITE16_MEMBER(vcombat_state::wiggle_i860p1_pins_w)
{
- wiggle_i860_common(m_vid_1, data);
+ wiggle_i860_common(1, data);
}
READ16_MEMBER(vcombat_state::main_irqiack_r)
{
- //fprintf(stderr, "M0: irq iack\n");
+ //LOG("M0: irq iack\n");
m_maincpu->set_input_line(M68K_IRQ_1, CLEAR_LINE);
//m_maincpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
return 0;
@@ -293,7 +297,7 @@ READ16_MEMBER(vcombat_state::main_irqiack_r)
READ16_MEMBER(vcombat_state::sound_resetmain_r)
{
- //fprintf(stderr, "M1: reset line to M0\n");
+ //LOG("M1: reset line to M0\n");
//m_maincpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero);
return 0;
}
@@ -359,7 +363,7 @@ WRITE16_MEMBER(vcombat_state::vcombat_dac_w)
{
m_dac->write(data >> 5);
if (data & 0x801f)
- fprintf(stderr, "dac overflow %04x\n", data & 0x801f);
+ LOG("dac overflow %04x\n", data & 0x801f);
}
void vcombat_state::main_map(address_map &map)
@@ -390,8 +394,8 @@ void vcombat_state::main_map(address_map &map)
map(0x702000, 0x702001).r(FUNC(vcombat_state::control_3_r));
map(0x705000, 0x705001).ram().share("share4"); /* M1->M0 */
- //AM_RANGE(0x703000, 0x703001) /* Headset rotation axis? */
- //AM_RANGE(0x704000, 0x704001) /* Headset rotation axis? */
+ //map(0x703000, 0x703001) /* Headset rotation axis? */
+ //map(0x704000, 0x704001) /* Headset rotation axis? */
map(0x706000, 0x70601f).rw(m_tlc34076, FUNC(tlc34076_device::read), FUNC(tlc34076_device::write)).umask16(0x00ff);
}
@@ -434,17 +438,11 @@ void vcombat_state::sound_map(address_map &map)
}
-MACHINE_RESET_MEMBER(vcombat_state,vcombat)
-{
- m_vid_0->i860_set_pin(DEC_PIN_BUS_HOLD, 1);
- m_vid_1->i860_set_pin(DEC_PIN_BUS_HOLD, 1);
-
- m_crtc_select = 0;
-}
-
-MACHINE_RESET_MEMBER(vcombat_state,shadfgtr)
+void vcombat_state::machine_reset()
{
- m_vid_0->i860_set_pin(DEC_PIN_BUS_HOLD, 1);
+ for (auto &i860 : m_vid)
+ if (i860.found())
+ i860->i860_set_pin(DEC_PIN_BUS_HOLD, 1);
m_crtc_select = 0;
}
@@ -567,12 +565,12 @@ void vcombat_state::vcombat(machine_config &config)
m_maincpu->set_vblank_int("screen", FUNC(vcombat_state::irq1_line_assert));
/* The middle board i860 */
- I860(config, m_vid_0, XTAL(20'000'000));
- m_vid_0->set_addrmap(AS_PROGRAM, &vcombat_state::vid_0_map);
+ I860(config, m_vid[0], XTAL(20'000'000));
+ m_vid[0]->set_addrmap(AS_PROGRAM, &vcombat_state::vid_0_map);
/* The top board i860 */
- I860(config, m_vid_1, XTAL(20'000'000));
- m_vid_1->set_addrmap(AS_PROGRAM, &vcombat_state::vid_1_map);
+ I860(config, m_vid[1], XTAL(20'000'000));
+ m_vid[1]->set_addrmap(AS_PROGRAM, &vcombat_state::vid_1_map);
/* Sound CPU */
M68000(config, m_soundcpu, XTAL(12'000'000));
@@ -580,7 +578,6 @@ void vcombat_state::vcombat(machine_config &config)
m_soundcpu->set_periodic_int(FUNC(vcombat_state::irq1_line_hold), attotime::from_hz(15000)); /* Remove this if MC6845 is enabled */
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
- MCFG_MACHINE_RESET_OVERRIDE(vcombat_state,vcombat)
/* Temporary hack for experimenting with timing. */
#if 0
@@ -618,15 +615,14 @@ void vcombat_state::shadfgtr(machine_config &config)
m_maincpu->set_vblank_int("screen", FUNC(vcombat_state::irq1_line_assert));
/* The middle board i860 */
- I860(config, m_vid_0, XTAL(20'000'000));
- m_vid_0->set_addrmap(AS_PROGRAM, &vcombat_state::vid_0_map);
+ I860(config, m_vid[0], XTAL(20'000'000));
+ m_vid[0]->set_addrmap(AS_PROGRAM, &vcombat_state::vid_0_map);
/* Sound CPU */
M68000(config, m_soundcpu, XTAL(12'000'000));
m_soundcpu->set_addrmap(AS_PROGRAM, &vcombat_state::sound_map);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
- MCFG_MACHINE_RESET_OVERRIDE(vcombat_state,shadfgtr)
TLC34076(config, m_tlc34076, tlc34076_device::TLC34076_6_BIT);
diff --git a/src/mame/drivers/vegas.cpp b/src/mame/drivers/vegas.cpp
index e12909b2fd1..59e1e0490ee 100644
--- a/src/mame/drivers/vegas.cpp
+++ b/src/mame/drivers/vegas.cpp
@@ -1702,7 +1702,7 @@ void vegas_state::vegas_cs2_map(address_map &map)
void vegas_state::vegas_cs3_map(address_map &map)
{
map(0x00000000, 0x00000003).rw(FUNC(vegas_state::analog_port_r), FUNC(vegas_state::analog_port_w));
- //AM_RANGE(0x00001000, 0x00001003) AM_READWRITE(lcd_r, lcd_w)
+ //map(0x00001000, 0x00001003).rw(FUNC(vegas_state::lcd_r), FUNC(vegas_state::lcd_w));
}
void vegas_state::vegas_cs4_map(address_map &map)
@@ -1727,7 +1727,7 @@ void vegas_state::vegas_cs6_map(address_map &map)
void vegas_state::vegas_cs7_map(address_map &map)
{
- //AM_RANGE(0x00000000, 0x00000003) AM_READWRITE8(nss_r, nss_w, 0xffffffff)
+ //map(0x00000000, 0x00000003).rw(FUNC(vegas_state::nss_r), FUNC(vegas_state::nss_w));
map(0x00001000, 0x0000100f).rw(FUNC(vegas_state::ethernet_r), FUNC(vegas_state::ethernet_w));
map(0x00005000, 0x00005003).w(m_dcs, FUNC(dcs_audio_device::dsio_idma_addr_w)); // if (m_dcs_idma_cs == 7)
map(0x00007000, 0x00007003).rw(m_dcs, FUNC(dcs_audio_device::dsio_idma_data_r), FUNC(dcs_audio_device::dsio_idma_data_w)); // if (m_dcs_idma_cs == 7)
diff --git a/src/mame/drivers/vicdual.cpp b/src/mame/drivers/vicdual.cpp
index 482a9e6a321..9c1cda94826 100644
--- a/src/mame/drivers/vicdual.cpp
+++ b/src/mame/drivers/vicdual.cpp
@@ -904,7 +904,7 @@ WRITE8_MEMBER(vicdual_state::digger_io_w)
void vicdual_state::headon2_map(address_map &map)
{
map(0x0000, 0x1fff).mirror(0x6000).rom();
- /* AM_RANGE(0x8000, 0x80ff) AM_MIRROR(0x3f00) */ /* schematics show this as battery backed RAM, but doesn't appear to be used */
+ /* map(0x8000, 0x80ff).mirror(0x3f00); */ /* schematics show this as battery backed RAM, but doesn't appear to be used */
map(0xc000, 0xc3ff).mirror(0x3000).ram().w(FUNC(vicdual_state::videoram_w)).share("videoram");
map(0xc400, 0xc7ff).mirror(0x3000).ram();
map(0xc800, 0xcfff).mirror(0x3000).ram().w(FUNC(vicdual_state::characterram_w)).share("characterram");
diff --git a/src/mame/drivers/vigilant.cpp b/src/mame/drivers/vigilant.cpp
index f58c86c6d40..803e7b6ce9d 100644
--- a/src/mame/drivers/vigilant.cpp
+++ b/src/mame/drivers/vigilant.cpp
@@ -116,7 +116,7 @@ void vigilant_state::kikcubic_io_map(address_map &map)
map(0x03, 0x03).portr("IN1");
map(0x04, 0x04).portr("IN2").w(FUNC(vigilant_state::bank_select_w));
map(0x06, 0x06).w("soundlatch", FUNC(generic_latch_8_device::write));
-// AM_RANGE(0x07, 0x07) AM_WRITENOP /* ?? */
+// map(0x07, 0x07).nopw(); /* ?? */
}
void vigilant_state::sound_map(address_map &map)
diff --git a/src/mame/drivers/vii.cpp b/src/mame/drivers/vii.cpp
index 492d8368734..f2836703254 100644
--- a/src/mame/drivers/vii.cpp
+++ b/src/mame/drivers/vii.cpp
@@ -101,10 +101,14 @@
Game seems unhappy with NVRAM, clears contents on each boot.
jak_pooh:
In the 'Light Tag' minigame (select the rock) the game usually softlocks when you find a friend (with or without DRC)
+ jak_care:
+ All but one mini-game waits on RAM address 0x0165 changing from 0x00f9 to 0x00f8
+ The bottom left game "Wish Bear's Wishing Tree" appears to fail for more complex reasons.
jak_disf:
- Shows corrupt logo on first boot with no valid nvram (possibly hardware does too, or layer disable?)
- jak_nick:
- Channel chasers (first game) title screen background should be blue, not the current pattern (possible layer disable?)
+ Shows corrupt logo on first boot with no valid nvram (possibly hardware does too - verify if possible to invalidate EEPROM on device)
+ lexizeus:
+ Some corrupt sound effects and a few corrupt ground tiles a few minutes in. (checksum is good, and a video recorded
+ from one of these doesn't exhibit these problems, so either emulation issue or alt revision?)
vii:
When loading a cart from file manager, sometimes MAME will crash.
@@ -124,6 +128,19 @@
Disney Friends, MS Pacman, WallE, Batman (and some other HotGen GameKeys) for test mode, hold UP,
press A, press DOWN during startup
+ Capcom test (same access as other Hotgen games) mode looks like this (tested on PAL unit, same ROM as dumped one)
+
+ RAM OK 2800
+ 111111
+ 5432109876543210
+ IOA ............111. (values go from . to 1 when inputs are moved, never 0 as in MAME!, core bug?)
+ GAMEKEY E0
+ IOB0
+ IOC XXX.........X...
+ SPRITES
+
+ Care Bears : Hold analog stck up, rotate stick 360 degress back to up, press 'A' while still holding up
+
TODO:
Work out how to access the hidden TEST menus for all games (most JAKKS games should have one at least)
@@ -245,9 +262,11 @@ public:
void jakks_gkr_dp_i2c(machine_config &config);
void jakks_gkr_sw_i2c(machine_config &config);
void jakks_gkr_nm_i2c(machine_config &config);
+ void jakks_gkr_cc_i2c(machine_config &config);
void jakks_gkr_wf_i2c(machine_config &config);
void jakks_gkr_mv_i2c(machine_config &config);
void jakks_gkr_wp(machine_config &config);
+ void jakks_gkr_cb(machine_config &config);
DECLARE_READ_LINE_MEMBER(i2c_gkr_r);
@@ -684,6 +703,23 @@ static INPUT_PORTS_START( jak_pooh )
PORT_BIT(0x0fff, 0x0000, IPT_AD_STICK_Y) PORT_SENSITIVITY(100) PORT_KEYDELTA(100) PORT_MINMAX(0x00,0x0fff)
INPUT_PORTS_END
+static INPUT_PORTS_START( jak_care )
+ PORT_START("P1")
+ PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_BUTTON1 )
+ PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Menu / Pause")
+ PORT_BIT( 0xf7df, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("P3")
+ PORT_BIT( 0xfff7, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) // PAL/NTSC flag, set to NTSC (unverified here)
+
+ PORT_START("JOYX")
+ PORT_BIT(0x0fff, 0x0000, IPT_AD_STICK_X) PORT_SENSITIVITY(100) PORT_KEYDELTA(100) PORT_MINMAX(0x00,0x0fff)
+
+ PORT_START("JOYY")
+ PORT_BIT(0x0fff, 0x0000, IPT_AD_STICK_Y) PORT_SENSITIVITY(100) PORT_KEYDELTA(100) PORT_MINMAX(0x00,0x0fff)
+INPUT_PORTS_END
+
static INPUT_PORTS_START( jak_nm_i2c )
PORT_START("P1")
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
@@ -706,6 +742,25 @@ static INPUT_PORTS_START( jak_nm_i2c )
PORT_BIT(0x0fff, 0x0000, IPT_AD_STICK_X ) PORT_SENSITIVITY(100) PORT_KEYDELTA(100) PORT_MINMAX(0x00,0x0fff)
INPUT_PORTS_END
+static INPUT_PORTS_START( jak_cc_i2c )
+ PORT_START("P1")
+ PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
+ PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
+ PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("A")
+ PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("B")
+ PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("C")
+ PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("D")
+
+ PORT_START("P3")
+ PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(jakks_gkr_state, i2c_gkr_r)
+ PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) // PAL/NTSC flag, set to NTSC
+ PORT_BIT( 0xfff0, IP_ACTIVE_HIGH, IPT_UNUSED )
+INPUT_PORTS_END
+
static INPUT_PORTS_START( jak_wf_i2c )
PORT_START("P1")
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
@@ -865,7 +920,7 @@ static INPUT_PORTS_START( jak_gkr_i2c )
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(jakks_gkr_state, i2c_gkr_r)
INPUT_PORTS_END
-static INPUT_PORTS_START( jak_disp_i2c )
+static INPUT_PORTS_START( jak_dpr_i2c )
PORT_START("P1")
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
@@ -2197,6 +2252,15 @@ void jakks_gkr_state::jakks_gkr_wp(machine_config &config)
//SOFTWARE_LIST(config, "jakks_gamekey_wp").set_original("jakks_gamekey_wp"); // NO KEYS RELEASED
}
+void jakks_gkr_state::jakks_gkr_cb(machine_config &config)
+{
+ jakks_gkr(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &jakks_gkr_state::mem_map_1m);
+ m_maincpu->adc_in<0>().set_ioport("JOYX");
+ m_maincpu->adc_in<1>().set_ioport("JOYY");
+ //SOFTWARE_LIST(config, "jakks_gamekey_cb").set_original("jakks_gamekey_cb"); // NO KEYS RELEASED
+}
+
void jakks_gkr_state::jakks_gkr_nm_i2c(machine_config &config)
{
jakks_gkr_i2c(config);
@@ -2205,6 +2269,14 @@ void jakks_gkr_state::jakks_gkr_nm_i2c(machine_config &config)
SOFTWARE_LIST(config, "jakks_gamekey_nm").set_original("jakks_gamekey_nm");
}
+void jakks_gkr_state::jakks_gkr_cc_i2c(machine_config &config)
+{
+ jakks_gkr_i2c(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &jakks_gkr_state::mem_map_1m);
+ // shows 'E0' in gamekey test menu on real HW (maybe related to value key needs to return if one existed)
+ //SOFTWARE_LIST(config, "jakks_gamekey_cc").set_original("jakks_gamekey_cc"); // no game keys were released
+}
+
void jakks_gkr_state::jakks_gkr_wf_i2c(machine_config &config)
{
jakks_gkr_i2c(config);
@@ -2364,6 +2436,10 @@ ROM_START( jak_pooh )
ROM_LOAD16_WORD_SWAP( "jakkspoohgkr.bin", 0x000000, 0x200000, CRC(0d97df55) SHA1(f108621a83c7b2263dd1531d82311627c3a02002) )
ROM_END
+ROM_START( jak_care )
+ ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD16_WORD_SWAP( "carebeargkr.bin", 0x000000, 0x200000, CRC(e6096eb7) SHA1(92ee1a6df374f8b355ba2280dc43d764f6f69dfe) )
+ROM_END
ROM_START( jak_wof )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
@@ -2380,11 +2456,16 @@ ROM_START( jak_disf )
ROM_LOAD16_WORD_SWAP( "disneyfriendsgkr.bin", 0x000000, 0x200000, CRC(77bca50b) SHA1(6e0f4fd229ee11eac721b5dbe79cf9002d3dbd64) )
ROM_END
-ROM_START( jak_disp )
+ROM_START( jak_dpr )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "jakksdisneyprincessgkr.bin", 0x000000, 0x200000, CRC(e26003ce) SHA1(ee15243281df6f09b96185c34582d7091604c954) )
ROM_END
+ROM_START( jak_dprs )
+ ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD16_WORD_SWAP( "disneyprincess2gkr.bin", 0x000000, 0x200000, CRC(b670bdde) SHA1(c33ce7ada72a0c44bc881b5792cd33a9f2f0fb08) )
+ROM_END
+
ROM_START( jak_mpac )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "jakksmspacmangkr.bin", 0x000000, 0x100000, CRC(cab40f77) SHA1(30731acc461150d96aafa7a0451cfb1a25264678) )
@@ -2405,6 +2486,10 @@ ROM_START( jak_sith )
ROM_LOAD16_WORD_SWAP( "jakksstarwarsgkr.bin", 0x000000, 0x200000, CRC(932cde19) SHA1(b88b748c235e9eeeda574e4d5b4077ae9da6fbd0) )
ROM_END
+ROM_START( jak_capc )
+ ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD16_WORD_SWAP( "capcomgkr.bin", 0x000000, 0x200000, CRC(6d47cce4) SHA1(263926a991d55459aa3cee90049d2202c1e3a70e) )
+ROM_END
ROM_START( lexizeus )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
@@ -2569,19 +2654,17 @@ CONS( 2005, jak_sbfc, 0, 0, jakks_gkr_nk_i2c, jak_gkr_i2c, jakks_gkr_state, emp
CONS( 2005, jak_sdoo, 0, 0, jakks_gkr_2m_i2c, jak_sdoo_i2c, jakks_gkr_state, empty_init, "JAKKS Pacific Inc / Jolliford Management", "Scooby-Doo! and the Mystery of the Castle (JAKKS Pacific TV Game, Game-Key Ready)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // SD (no game-keys released) (was dumped from a later unit with GameKey port missing, but internal PCB still supported it, code likely the same)
CONS( 2005, jak_disn, 0, 0, jakks_gkr_dy, jak_gkr, jakks_gkr_state, empty_init, "JAKKS Pacific Inc / HotGen Ltd", "Disney (JAKKS Pacific TV Game, Game-Key Ready) (08 FEB 2005 A)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // uses DY keys (3 released)
CONS( 2005, jak_disf, 0, 0, jakks_gkr_dy_i2c, jak_gkr_i2c, jakks_gkr_state, empty_init, "JAKKS Pacific Inc / HotGen Ltd", "Disney Friends (JAKKS Pacific TV Game, Game-Key Ready) (17 MAY 2005 A)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // uses DY keys (3 released)
-CONS( 2005, jak_disp, 0, 0, jakks_gkr_dp_i2c, jak_disp_i2c, jakks_gkr_state, empty_init, "JAKKS Pacific Inc / 5000ft, Inc", "Disney Princess (JAKKS Pacific TV Game, Game-Key Ready)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // uses DP keys (1 key released)
-// There seems to be a second game called 'Disney Princesses' with a 'board game' style front end as well as the minigames, also GKR, see https://www.youtube.com/watch?v=w9p5TI029bQ The one we have is https://www.youtube.com/watch?v=9ppPKVbpoMs the physical package seems identical.
+CONS( 2005, jak_dpr, 0, 0, jakks_gkr_dp_i2c, jak_dpr_i2c, jakks_gkr_state, empty_init, "JAKKS Pacific Inc / 5000ft, Inc", "Disney Princess (JAKKS Pacific TV Game, Game-Key Ready)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // uses DP keys (1 key released)
+CONS( 2005, jak_dprs, 0, 0, jakks_gkr_dp_i2c, jak_dpr_i2c, jakks_gkr_state, empty_init, "JAKKS Pacific Inc / 5000ft, Inc", "Disney Princesses (JAKKS Pacific TV Game, Game-Key Ready)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // uses DP keys (1 key released) (unit looks identical to above, including just having 'Disney Princess' logo, but this one has the 'board game' as a frontend and a slightly different on-screen title)
CONS( 2005, jak_sith, 0, 0, jakks_gkr_sw_i2c, jak_sith_i2c, jakks_gkr_state, empty_init, "JAKKS Pacific Inc / Griptonite Games", "Star Wars - Revenge of the Sith (JAKKS Pacific TV Game, Game-Key Ready)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // uses SW keys (1 released)
CONS( 2005, jak_dbz, 0, 0, jakks_gkr_1m_i2c, jak_gkr_i2c, jakks_gkr_state, empty_init, "JAKKS Pacific Inc / Handheld Games", "Dragon Ball Z (JAKKS Pacific TV Game, Game-Key Ready)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // DB (no game-keys released, 1 in development but cancelled)
CONS( 2005, jak_mpac, 0, 0, jakks_gkr_nm_i2c, jak_nm_i2c, jakks_gkr_state, empty_init, "JAKKS Pacific Inc / Namco / HotGen Ltd", "Ms. Pac-Man 5-in-1 (Ms. Pac-Man, Pole Position, Galaga, Xevious, Mappy) (JAKKS Pacific TV Game, Game-Key Ready) (07 FEB 2005 A SKU F)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // uses NM (3 keys available [Dig Dug, New Rally-X], [Rally-X, Pac-Man, Bosconian], [Pac-Man, Bosconian])
+CONS( 2005, jak_capc, 0, 0, jakks_gkr_cc_i2c, jak_cc_i2c, jakks_gkr_state, empty_init, "JAKKS Pacific Inc / Capcom / HotGen Ltd", "Capcom 3-in-1 (1942, Commando, Ghosts'n Goblins) (JAKKS Pacific TV Game, Game-Key Ready) (29 MAR 2005 B)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // uses CC keys (no game-keys released)
CONS( 2005, jak_wof, 0, 0, jakks_gkr_wf_i2c, jak_wf_i2c, jakks_gkr_state, empty_init, "JAKKS Pacific Inc / HotGen Ltd", "Wheel of Fortune (JAKKS Pacific TV Game, Game-Key Ready) (Jul 11 2005 ORIG)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // uses WF keys (no game-keys released) analog wheel not emulated
// There is a 'Second Edition' version of Wheel of Fortune with a Gold case, GameKey port removed, and a '2' over the usual Game Key Ready logo, internals are different too, not Game-Key Ready
CONS( 2004, jak_spdm, 0, 0, jakks_gkr_mv_i2c, jak_gkr_i2c, jakks_gkr_state, empty_init, "JAKKS Pacific Inc / Digital Eclipse", "Spider-Man (JAKKS Pacific TV Game, Game-Key Ready)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // MV (1 key available)
CONS( 2005, jak_pooh, 0, 0, jakks_gkr_wp, jak_pooh, jakks_gkr_state, empty_init, "JAKKS Pacific Inc / Backbone Entertainment", "Winnie the Pooh - Piglet's Special Day (JAKKS Pacific TV Game, Game-Key Ready)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // WP (no game-keys released)
-
-// no keys released for the following, some were in development but cancelled
-// Capcom 3-in-1 CC (no game-keys released)
-// Care Bears CB (no game-keys released)
+CONS( 2005, jak_care, 0, 0, jakks_gkr_cb, jak_care, jakks_gkr_state, empty_init, "JAKKS Pacific Inc / Backbone Entertainment", "Care Bears TV Games (JAKKS Pacific TV Game, Game-Key Ready)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // CB (no game-keys released)
// Some versions of the Shrek - Over the Hedge unit show the GameKey logo on startup (others don't) there is no evidence to suggest it was ever released with a GameKey port tho, and the internal PCB has no place for one on the versions we've seen (which show the logo)
diff --git a/src/mame/drivers/viper.cpp b/src/mame/drivers/viper.cpp
index 9cce29697d3..df4f2584911 100644
--- a/src/mame/drivers/viper.cpp
+++ b/src/mame/drivers/viper.cpp
@@ -2101,7 +2101,7 @@ WRITE64_MEMBER(viper_state::unk_serial_w)
void viper_state::viper_map(address_map &map)
{
-// ADDRESS_MAP_UNMAP_HIGH
+// map.unmap_value_high();
map(0x00000000, 0x00ffffff).mirror(0x1000000).ram().share("workram");
map(0x80000000, 0x800fffff).rw(FUNC(viper_state::epic_r), FUNC(viper_state::epic_w));
map(0x82000000, 0x83ffffff).rw(FUNC(viper_state::voodoo3_r), FUNC(viper_state::voodoo3_w));
@@ -2112,7 +2112,7 @@ void viper_state::viper_map(address_map &map)
// 0xff000000, 0xff000fff - cf_card_data_r/w (installed in DRIVER_INIT(vipercf))
// 0xff200000, 0xff200fff - cf_card_r/w (installed in DRIVER_INIT(vipercf))
// 0xff300000, 0xff300fff - ata_r/w (installed in DRIVER_INIT(viperhd))
-// AM_RANGE(0xff400xxx, 0xff400xxx) ppp2nd sense device
+// map(0xff400xxx, 0xff400xxx) ppp2nd sense device
map(0xffe00000, 0xffe00007).r(FUNC(viper_state::e00000_r));
map(0xffe00008, 0xffe0000f).rw(FUNC(viper_state::e00008_r), FUNC(viper_state::e00008_w));
map(0xffe08000, 0xffe08007).noprw();
diff --git a/src/mame/drivers/vixen.cpp b/src/mame/drivers/vixen.cpp
index 8ef4f63ca30..5eb10c304ae 100644
--- a/src/mame/drivers/vixen.cpp
+++ b/src/mame/drivers/vixen.cpp
@@ -267,7 +267,7 @@ void vixen_state::vixen_io(address_map &map)
map(0x28, 0x28).mirror(0x05).rw(m_io_i8155, FUNC(i8155_device::data_r), FUNC(i8155_device::data_w));
map(0x30, 0x31).mirror(0x06).rw(m_usart, FUNC(i8251_device::read), FUNC(i8251_device::write));
map(0x38, 0x38).mirror(0x07).r(FUNC(vixen_state::port3_r));
-// AM_RANGE(0xf0, 0xff) Hard Disk?
+// map(0xf0, 0xff) Hard Disk?
}
diff --git a/src/mame/drivers/vk100.cpp b/src/mame/drivers/vk100.cpp
index 95ed5aaa601..3479e4ffc5b 100644
--- a/src/mame/drivers/vk100.cpp
+++ b/src/mame/drivers/vk100.cpp
@@ -747,20 +747,20 @@ void vk100_state::vk100_io(address_map &map)
map(0x47, 0x47).mirror(0x98).w(FUNC(vk100_state::vgPMUL)); //LD PMUL (pattern multiplier)
map(0x60, 0x63).mirror(0x80).w(FUNC(vk100_state::vgREG)); //LD DU, DVM, DIR, WOPS (register file)
map(0x64, 0x67).mirror(0x80).w(FUNC(vk100_state::vgEX)); //EX MOV, DOT, VEC, ER
- map(0x68, 0x68).mirror(0x83).w(FUNC(vk100_state::KBDW)); //KBDW (probably AM_MIRROR(0x03))
- map(0x6C, 0x6C).mirror(0x83).w(COM5016T_TAG, FUNC(com8116_device::stt_str_w)); //LD BAUD (baud rate clock divider setting for i8251 tx and rx clocks) (probably AM_MIRROR(0x03))
+ map(0x68, 0x68).mirror(0x83).w(FUNC(vk100_state::KBDW)); //KBDW (probably mirror(0x03))
+ map(0x6C, 0x6C).mirror(0x83).w(COM5016T_TAG, FUNC(com8116_device::stt_str_w)); //LD BAUD (baud rate clock divider setting for i8251 tx and rx clocks) (probably mirror(0x03))
map(0x70, 0x71).mirror(0x82).w(m_uart, FUNC(i8251_device::write)); //LD COMD
- //AM_RANGE (0x74, 0x74) AM_MIRROR(0x83) AM_WRITE(unknown_74)
- //AM_RANGE (0x78, 0x78) AM_MIRROR(0x83) AM_WRITE(kbdw) //KBDW ?(mirror?)
- //AM_RANGE (0x7C, 0x7C) AM_MIRROR(0x83) AM_WRITE(unknown_7C)
+ //map(0x74, 0x74).mirror(0x83).w(FUNC(vk100_state::unknown_74));
+ //map(0x78, 0x78).mirror(0x83).w(FUNC(vk100_state::kbdw)); //KBDW ?(mirror?)
+ //map(0x7C, 0x7C).mirror(0x83).w(FUNC(vk100_state::unknown_7C));
map(0x40, 0x47).mirror(0x80).r(FUNC(vk100_state::SYSTAT_A)); // SYSTAT A (state machine done and last 4 bits of vram, as well as dipswitches)
map(0x48, 0x48).mirror(0x87/*0x80*/).r(FUNC(vk100_state::SYSTAT_B)); // SYSTAT B (uart stuff)
map(0x50, 0x51).mirror(0x86).r(m_uart, FUNC(i8251_device::read)); // UART O
- //AM_RANGE (0x58, 0x58) AM_MIRROR(0x87) AM_READ(unknown_58)
- //AM_RANGE (0x60, 0x60) AM_MIRROR(0x87) AM_READ(unknown_60)
- //AM_RANGE (0x68, 0x68) AM_MIRROR(0x87) AM_READ(unknown_68) // NOT USED
- //AM_RANGE (0x70, 0x70) AM_MIRROR(0x87) AM_READ(unknown_70)
- //AM_RANGE (0x78, 0x7f) AM_MIRROR(0x87) AM_READ(unknown_78)
+ //map(0x58, 0x58).mirror(0x87).r(FUNC(vk100_state::unknown_58));
+ //map(0x60, 0x60).mirror(0x87).r(FUNC(vk100_state::unknown_60));
+ //map(0x68, 0x68).mirror(0x87).r(FUNC(vk100_state::unknown_68)); // NOT USED
+ //map(0x70, 0x70).mirror(0x87).r(FUNC(vk100_state::unknown_70));
+ //map(0x78, 0x7f).mirror(0x87).r(FUNC(vk100_state::unknown_78));
}
/* Input ports */
diff --git a/src/mame/drivers/voyager.cpp b/src/mame/drivers/voyager.cpp
index 2b2bf1ad96b..258c4199fe9 100644
--- a/src/mame/drivers/voyager.cpp
+++ b/src/mame/drivers/voyager.cpp
@@ -249,26 +249,26 @@ void voyager_state::voyager_map(address_map &map)
map(0x000a0000, 0x000bffff).rw("vga", FUNC(trident_vga_device::mem_r), FUNC(trident_vga_device::mem_w)); // VGA VRAM
map(0x000c0000, 0x000c7fff).ram().region("video_bios", 0);
map(0x000c8000, 0x000cffff).noprw();
- //AM_RANGE(0x000d0000, 0x000d0003) AM_RAM // XYLINX - Sincronus serial communication
+ //map(0x000d0000, 0x000d0003).ram(); // XYLINX - Sincronus serial communication
map(0x000d0008, 0x000d000b).nopw(); // ???
map(0x000d0800, 0x000d0fff).rom().region("nvram", 0); //
-// AM_RANGE(0x000d0800, 0x000d0fff) AM_RAM // GAME_CMOS
+// map(0x000d0800, 0x000d0fff).ram(); // GAME_CMOS
- //GRULL AM_RANGE(0x000e0000, 0x000effff) AM_RAM
- //GRULL-AM_RANGE(0x000f0000, 0x000fffff) AM_ROMBANK("bank1")
- //GRULL AM_RANGE(0x000f0000, 0x000fffff) AM_WRITE(bios_ram_w)
+ //GRULL map(0x000e0000, 0x000effff).ram();
+ //GRULL-map(0x000f0000, 0x000fffff).bankr("bank1");
+ //GRULL map(0x000f0000, 0x000fffff).w(FUNC(voyager_state::bios_ram_w));
map(0x000e0000, 0x000fffff).bankr("bank1");
map(0x000e0000, 0x000fffff).w(FUNC(voyager_state::bios_ram_w));
map(0x00100000, 0x03ffffff).ram(); // 64MB
map(0x04000000, 0x28ffffff).noprw();
- //AM_RANGE(0x04000000, 0x040001ff) AM_RAM
- //AM_RANGE(0x08000000, 0x080001ff) AM_RAM
- //AM_RANGE(0x0c000000, 0x0c0001ff) AM_RAM
- //AM_RANGE(0x10000000, 0x100001ff) AM_RAM
- //AM_RANGE(0x14000000, 0x140001ff) AM_RAM
- //AM_RANGE(0x18000000, 0x180001ff) AM_RAM
- //AM_RANGE(0x20000000, 0x200001ff) AM_RAM
- //AM_RANGE(0x28000000, 0x280001ff) AM_RAM
+ //map(0x04000000, 0x040001ff).ram();
+ //map(0x08000000, 0x080001ff).ram();
+ //map(0x0c000000, 0x0c0001ff).ram();
+ //map(0x10000000, 0x100001ff).ram();
+ //map(0x14000000, 0x140001ff).ram();
+ //map(0x18000000, 0x180001ff).ram();
+ //map(0x20000000, 0x200001ff).ram();
+ //map(0x28000000, 0x280001ff).ram();
map(0xfffe0000, 0xffffffff).rom().region("bios", 0); /* System BIOS */
}
@@ -276,13 +276,13 @@ void voyager_state::voyager_io(address_map &map)
{
pcat32_io_common(map);
- //AM_RANGE(0x00e8, 0x00eb) AM_NOP
+ //map(0x00e8, 0x00eb).noprw();
map(0x00e8, 0x00ef).noprw(); //AMI BIOS write to this ports as delays between I/O ports operations sending al value -> NEWIODELAY
map(0x0170, 0x0177).noprw(); //To debug
map(0x01f0, 0x01f7).rw("ide", FUNC(ide_controller_device::cs0_r), FUNC(ide_controller_device::cs0_w));
map(0x0200, 0x021f).noprw(); //To debug
map(0x0260, 0x026f).noprw(); //To debug
- map(0x0278, 0x027b).nopw();//AM_WRITE(pnp_config_w)
+ map(0x0278, 0x027b).nopw();//.w(FUNC(voyager_state::pnp_config_w));
map(0x0280, 0x0287).noprw(); //To debug
map(0x02a0, 0x02a7).noprw(); //To debug
map(0x02c0, 0x02c7).noprw(); //To debug
@@ -295,11 +295,11 @@ void voyager_state::voyager_io(address_map &map)
map(0x03d0, 0x03df).rw("vga", FUNC(trident_vga_device::port_03d0_r), FUNC(trident_vga_device::port_03d0_w));
map(0x03e0, 0x03ef).noprw(); //To debug
map(0x0378, 0x037f).noprw(); //To debug
- // AM_RANGE(0x0300, 0x03af) AM_NOP
- // AM_RANGE(0x03b0, 0x03df) AM_NOP
+ // map(0x0300, 0x03af).noprw();
+ // map(0x03b0, 0x03df).noprw();
map(0x03f0, 0x03f7).rw("ide", FUNC(ide_controller_device::cs1_r), FUNC(ide_controller_device::cs1_w));
map(0x03f8, 0x03ff).noprw(); // To debug Serial Port COM1:
- map(0x0a78, 0x0a7b).nopw();//AM_WRITE(pnp_data_w)
+ map(0x0a78, 0x0a7b).nopw();//.w(FUNC(voyager_state::pnp_data_w));
map(0x0cf8, 0x0cff).rw("pcibus", FUNC(pci_bus_legacy_device::read), FUNC(pci_bus_legacy_device::write));
map(0x42e8, 0x43ef).noprw(); //To debug
map(0x43c0, 0x43cf).ram().share("share1");
diff --git a/src/mame/drivers/vt100.cpp b/src/mame/drivers/vt100.cpp
index b31c3326608..a56fed96416 100644
--- a/src/mame/drivers/vt100.cpp
+++ b/src/mame/drivers/vt100.cpp
@@ -209,7 +209,7 @@ void vt100_state::vt100_io(address_map &map)
// 0xC2 Video processor DC011
map(0xc2, 0xc2).w(m_crtc, FUNC(vt100_video_device::dc011_w));
// 0xE2 Graphics port
- // map (0xe2, 0xe2)
+ // map(0xe2, 0xe2)
}
u8 vt100_state::printer_r(offs_t offset)
diff --git a/src/mame/drivers/wallc.cpp b/src/mame/drivers/wallc.cpp
index 2e2f738e2e0..88fbf57ed72 100644
--- a/src/mame/drivers/wallc.cpp
+++ b/src/mame/drivers/wallc.cpp
@@ -51,6 +51,7 @@ Thanks to HIGHWAYMAN for providing info on how to get to these epoxies
#include "emu.h"
#include "cpu/z80/z80.h"
+#include "machine/adc0804.h"
#include "sound/ay8910.h"
#include "video/resnet.h"
#include "emupal.h"
@@ -294,14 +295,13 @@ void wallc_state::wallc_map(address_map &map)
map(0xb000, 0xb000).portr("DSW1");
map(0xb200, 0xb200).portr("SYSTEM");
- map(0xb400, 0xb400).portr("DIAL");
- map(0xb600, 0xb600).portr("DSW2");
+ map(0xb400, 0xb400).r("adc", FUNC(adc0804_device::read_and_write));
map(0xb000, 0xb000).nopw();
map(0xb100, 0xb100).w(FUNC(wallc_state::wallc_coin_counter_w));
map(0xb200, 0xb200).nopw();
map(0xb500, 0xb500).w("aysnd", FUNC(ay8912_device::address_w));
- map(0xb600, 0xb600).w("aysnd", FUNC(ay8912_device::data_w));
+ map(0xb600, 0xb600).rw("aysnd", FUNC(ay8912_device::data_r), FUNC(ay8912_device::data_w));
}
void wallc_state::unkitpkr_map(address_map &map)
@@ -522,6 +522,8 @@ void wallc_state::wallc(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &wallc_state::wallc_map);
m_maincpu->set_vblank_int("screen", FUNC(wallc_state::irq0_line_hold));
+ ADC0804(config, "adc", 640000).vin_callback().set_ioport("DIAL"); // clock not verified
+
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60);
@@ -536,7 +538,9 @@ void wallc_state::wallc(machine_config &config)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- AY8912(config, "aysnd", 12288000 / 8).add_route(ALL_OUTPUTS, "mono", 0.30);
+ ay8912_device &aysnd(AY8912(config, "aysnd", 12288000 / 8));
+ aysnd.port_a_read_callback().set_ioport("DSW2");
+ aysnd.add_route(ALL_OUTPUTS, "mono", 0.30);
}
void wallc_state::wallca(machine_config &config)
@@ -548,6 +552,7 @@ void wallc_state::wallca(machine_config &config)
void wallc_state::unkitpkr(machine_config &config)
{
wallc(config);
+ config.device_remove("adc");
m_maincpu->set_addrmap(AS_PROGRAM, &wallc_state::unkitpkr_map);
@@ -555,7 +560,6 @@ void wallc_state::unkitpkr(machine_config &config)
subdevice<palette_device>("palette")->set_init(FUNC(wallc_state::unkitpkr_palette));
/* sound hardware */
- subdevice<ay8912_device>("aysnd")->port_a_read_callback().set_ioport("DSW2");
subdevice<ay8912_device>("aysnd")->reset_routes().add_route(ALL_OUTPUTS, "mono", 0.50);
}
diff --git a/src/mame/drivers/wangpc.cpp b/src/mame/drivers/wangpc.cpp
index 9c448093a7d..4fbc008f3f1 100644
--- a/src/mame/drivers/wangpc.cpp
+++ b/src/mame/drivers/wangpc.cpp
@@ -761,7 +761,7 @@ void wangpc_state::wangpc_io(address_map &map)
map(0x1018, 0x1018).mirror(0x0002).rw(FUNC(wangpc_state::fdc_reset_r), FUNC(wangpc_state::fdc_reset_w));
map(0x101c, 0x101c).mirror(0x0002).rw(FUNC(wangpc_state::fdc_tc_r), FUNC(wangpc_state::fdc_tc_w));
map(0x1020, 0x1027).rw(m_ppi, FUNC(i8255_device::read), FUNC(i8255_device::write)).umask16(0x00ff);
- map(0x1028, 0x1029); //AM_WRITE(?)
+ map(0x1028, 0x1029); //.w(FUNC(wangpc_state::)); (?)
map(0x1040, 0x1047).rw(m_pit, FUNC(pit8253_device::read), FUNC(pit8253_device::write)).umask16(0x00ff);
map(0x1060, 0x1063).rw(m_pic, FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff);
map(0x1080, 0x1087).r(m_epci, FUNC(mc2661_device::read)).umask16(0x00ff);
diff --git a/src/mame/drivers/wardner.cpp b/src/mame/drivers/wardner.cpp
index 6d630131924..860a012324d 100644
--- a/src/mame/drivers/wardner.cpp
+++ b/src/mame/drivers/wardner.cpp
@@ -454,13 +454,13 @@ void wardner_state::wardner(machine_config &config)
ROM_START( wardner )
ROM_REGION( 0x40000, "maincpu", ROMREGION_ERASEFF ) /* Banked Main Z80 code */
- ROM_LOAD( "wardner.17", 0x00000, 0x08000, CRC(c5dd56fd) SHA1(f0a09557150e9c1c6b9d8e125f5408fc269c9d17) ) /* Main Z80 code */
- ROM_LOAD( "b25-18.rom", 0x10000, 0x10000, CRC(9aab8ee2) SHA1(16fa44b75f4a3a5b1ff713690a299ecec2b5a4bf) ) /* OBJ ROMs */
- ROM_LOAD( "b25-19.rom", 0x20000, 0x10000, CRC(95b68813) SHA1(06ea1b1d6e2e6326ceb9324fc471d082fda6112e) )
- ROM_LOAD( "wardner.20", 0x38000, 0x08000, CRC(347f411b) SHA1(1fb2883d74d10350cb1c62fb58d5783652861b37) )
+ ROM_LOAD( "b25-31.6m", 0x00000, 0x08000, CRC(c5dd56fd) SHA1(f0a09557150e9c1c6b9d8e125f5408fc269c9d17) ) /* Main Z80 code */
+ ROM_LOAD( "b25-18.7m", 0x10000, 0x10000, CRC(9aab8ee2) SHA1(16fa44b75f4a3a5b1ff713690a299ecec2b5a4bf) ) /* OBJ ROMs */
+ ROM_LOAD( "b25-19.8m", 0x20000, 0x10000, CRC(95b68813) SHA1(06ea1b1d6e2e6326ceb9324fc471d082fda6112e) )
+ ROM_LOAD( "b25-32.10m", 0x38000, 0x08000, CRC(347f411b) SHA1(1fb2883d74d10350cb1c62fb58d5783652861b37) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound Z80 code */
- ROM_LOAD( "b25-16.rom", 0x00000, 0x08000, CRC(e5202ff8) SHA1(15ae8c0bb16a20bee14e8d80d81c249404ab1463) )
+ ROM_LOAD( "b25-16.4k", 0x00000, 0x08000, CRC(e5202ff8) SHA1(15ae8c0bb16a20bee14e8d80d81c249404ab1463) )
ROM_REGION( 0x2000, "dsp", 0 ) /* Co-Processor TMS320C10 */
ROMX_LOAD( "82s137.1d", 0x0000, 0x0400, CRC(cc5b3f53) SHA1(33589665ac995cc4645b56bbcd6d1c1cd5368f88), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) ) /* msb */
@@ -473,27 +473,27 @@ ROM_START( wardner )
ROMX_LOAD( "82s131.1a", 0x0801, 0x0200, CRC(50452ff8) SHA1(76964fa9ee89a51cc71904e08cfc83bf81bb89aa), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) )
ROM_REGION( 0x0c000, "gfx1", 0 ) /* chars */
- ROM_LOAD( "wardner.07", 0x00000, 0x04000, CRC(1392b60d) SHA1(86b9eab87f8d5f68fda500420f4ed61331089fc2) )
- ROM_LOAD( "wardner.06", 0x04000, 0x04000, CRC(0ed848da) SHA1(e4b38e21c101a28a8961a9fe30c9cb10919cc148) )
- ROM_LOAD( "wardner.05", 0x08000, 0x04000, CRC(79792c86) SHA1(648b97f1ec30d46e40e60eb13159b4f6f86e9243) )
+ ROM_LOAD( "b25-28.10f", 0x00000, 0x04000, CRC(1392b60d) SHA1(86b9eab87f8d5f68fda500420f4ed61331089fc2) )
+ ROM_LOAD( "b25-27.8f", 0x04000, 0x04000, CRC(0ed848da) SHA1(e4b38e21c101a28a8961a9fe30c9cb10919cc148) )
+ ROM_LOAD( "b25-26.7f", 0x08000, 0x04000, CRC(79792c86) SHA1(648b97f1ec30d46e40e60eb13159b4f6f86e9243) )
ROM_REGION( 0x20000, "gfx2", 0 ) /* fg tiles */
- ROM_LOAD( "b25-12.rom", 0x00000, 0x08000, CRC(15d08848) SHA1(e2e62d95a3f240664b5e0ac0f163a0d5cefa5312) )
- ROM_LOAD( "b25-15.rom", 0x08000, 0x08000, CRC(cdd2d408) SHA1(7e4d77f8725fa30d4d65e811d10e0b2c00b23cfe) )
- ROM_LOAD( "b25-14.rom", 0x10000, 0x08000, CRC(5a2aef4f) SHA1(60f4ab2582a924defb5241ab367826ae1f4b3f5e) )
- ROM_LOAD( "b25-13.rom", 0x18000, 0x08000, CRC(be21db2b) SHA1(7fc1809618f2432c9ec6eb33ce57a5faffd44974) )
+ ROM_LOAD( "b25-12.18f", 0x00000, 0x08000, CRC(15d08848) SHA1(e2e62d95a3f240664b5e0ac0f163a0d5cefa5312) )
+ ROM_LOAD( "b25-15.23f", 0x08000, 0x08000, CRC(cdd2d408) SHA1(7e4d77f8725fa30d4d65e811d10e0b2c00b23cfe) )
+ ROM_LOAD( "b25-14.21f", 0x10000, 0x08000, CRC(5a2aef4f) SHA1(60f4ab2582a924defb5241ab367826ae1f4b3f5e) )
+ ROM_LOAD( "b25-13.19f", 0x18000, 0x08000, CRC(be21db2b) SHA1(7fc1809618f2432c9ec6eb33ce57a5faffd44974) )
ROM_REGION( 0x20000, "gfx3", 0 ) /* bg tiles */
- ROM_LOAD( "b25-08.rom", 0x00000, 0x08000, CRC(883ccaa3) SHA1(90d686094eac6e80caf8e2cf90c00bb41a0d26e2) )
- ROM_LOAD( "b25-11.rom", 0x08000, 0x08000, CRC(d6ebd510) SHA1(d65e0db7756ebe6828bf637a6c915bb06082636c) )
- ROM_LOAD( "b25-10.rom", 0x10000, 0x08000, CRC(b9a61e81) SHA1(541e579664d583fbbf81111046115018fdaff073) )
- ROM_LOAD( "b25-09.rom", 0x18000, 0x08000, CRC(585411b7) SHA1(67c0f4b7ab303341d5481c4024dc4199acb7c279) )
+ ROM_LOAD( "b25-08.12f", 0x00000, 0x08000, CRC(883ccaa3) SHA1(90d686094eac6e80caf8e2cf90c00bb41a0d26e2) )
+ ROM_LOAD( "b25-11.16f", 0x08000, 0x08000, CRC(d6ebd510) SHA1(d65e0db7756ebe6828bf637a6c915bb06082636c) )
+ ROM_LOAD( "b25-10.15f", 0x10000, 0x08000, CRC(b9a61e81) SHA1(541e579664d583fbbf81111046115018fdaff073) )
+ ROM_LOAD( "b25-09.14f", 0x18000, 0x08000, CRC(585411b7) SHA1(67c0f4b7ab303341d5481c4024dc4199acb7c279) )
ROM_REGION( 0x40000, "scu", 0 ) /* sprites */
- ROM_LOAD( "b25-01.rom", 0x00000, 0x10000, CRC(42ec01fb) SHA1(646192a2e89f795ed016860cdcdc0b5ef645fca2) )
- ROM_LOAD( "b25-02.rom", 0x10000, 0x10000, CRC(6c0130b7) SHA1(8b6ad72848d03c3d4ee3acd35abbb3a0e678122c) )
- ROM_LOAD( "b25-03.rom", 0x20000, 0x10000, CRC(b923db99) SHA1(2f4be81afdf200586bc44b1e94553d84d16d0b62) )
- ROM_LOAD( "b25-04.rom", 0x30000, 0x10000, CRC(8059573c) SHA1(75bd19e504433438b85ed00e50e85fb98eebf4de) )
+ ROM_LOAD( "b25-01.14c", 0x00000, 0x10000, CRC(42ec01fb) SHA1(646192a2e89f795ed016860cdcdc0b5ef645fca2) )
+ ROM_LOAD( "b25-02.16c", 0x10000, 0x10000, CRC(6c0130b7) SHA1(8b6ad72848d03c3d4ee3acd35abbb3a0e678122c) )
+ ROM_LOAD( "b25-03.17c", 0x20000, 0x10000, CRC(b923db99) SHA1(2f4be81afdf200586bc44b1e94553d84d16d0b62) )
+ ROM_LOAD( "b25-04.19c", 0x30000, 0x10000, CRC(8059573c) SHA1(75bd19e504433438b85ed00e50e85fb98eebf4de) )
ROM_REGION( 0x260, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
ROM_LOAD( "82s129.b19", 0x000, 0x100, CRC(24e7d62f) SHA1(1c06a1ef1b6a722794ca1d5ee2c476ecaa5178a3) ) /* sprite priority control ?? */
@@ -505,13 +505,13 @@ ROM_END
ROM_START( pyros )
ROM_REGION( 0x40000, "maincpu", ROMREGION_ERASEFF ) /* Banked Z80 code */
- ROM_LOAD( "b25-29.rom", 0x00000, 0x08000, CRC(b568294d) SHA1(5d04dd006f5180fa0c9340e2efa6613625d712a8) ) /* Main Z80 code */
- ROM_LOAD( "b25-18.rom", 0x10000, 0x10000, CRC(9aab8ee2) SHA1(16fa44b75f4a3a5b1ff713690a299ecec2b5a4bf) ) /* OBJ ROMs */
- ROM_LOAD( "b25-19.rom", 0x20000, 0x10000, CRC(95b68813) SHA1(06ea1b1d6e2e6326ceb9324fc471d082fda6112e) )
- ROM_LOAD( "b25-30.rom", 0x38000, 0x08000, CRC(5056c799) SHA1(9750fa8bf5d1181a4fecbcbf822f8f027bebd5a8) )
+ ROM_LOAD( "b25-29.6m", 0x00000, 0x08000, CRC(b568294d) SHA1(5d04dd006f5180fa0c9340e2efa6613625d712a8) ) /* Main Z80 code */
+ ROM_LOAD( "b25-18.7m", 0x10000, 0x10000, CRC(9aab8ee2) SHA1(16fa44b75f4a3a5b1ff713690a299ecec2b5a4bf) ) /* OBJ ROMs */
+ ROM_LOAD( "b25-19.8m", 0x20000, 0x10000, CRC(95b68813) SHA1(06ea1b1d6e2e6326ceb9324fc471d082fda6112e) )
+ ROM_LOAD( "b25-30.10m", 0x38000, 0x08000, CRC(5056c799) SHA1(9750fa8bf5d1181a4fecbcbf822f8f027bebd5a8) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound Z80 code */
- ROM_LOAD( "b25-16.rom", 0x00000, 0x08000, CRC(e5202ff8) SHA1(15ae8c0bb16a20bee14e8d80d81c249404ab1463) )
+ ROM_LOAD( "b25-16.4k", 0x00000, 0x08000, CRC(e5202ff8) SHA1(15ae8c0bb16a20bee14e8d80d81c249404ab1463) )
ROM_REGION( 0x2000, "dsp", 0 ) /* Co-Processor TMS320C10 */
ROMX_LOAD( "82s137.1d", 0x0000, 0x0400, CRC(cc5b3f53) SHA1(33589665ac995cc4645b56bbcd6d1c1cd5368f88), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) ) /* msb */
@@ -524,27 +524,27 @@ ROM_START( pyros )
ROMX_LOAD( "82s131.1a", 0x0801, 0x0200, CRC(50452ff8) SHA1(76964fa9ee89a51cc71904e08cfc83bf81bb89aa), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) )
ROM_REGION( 0x0c000, "gfx1", 0 ) /* chars */
- ROM_LOAD( "b25-35.rom", 0x00000, 0x04000, CRC(fec6f0c0) SHA1(f91d698fa0712659c2e6b382a8166b1cacc50a3f) )
- ROM_LOAD( "b25-34.rom", 0x04000, 0x04000, CRC(02505dad) SHA1(28993c68a17929d6b819ca81cdf60985531fc80b) )
- ROM_LOAD( "b25-33.rom", 0x08000, 0x04000, CRC(9a55fcb9) SHA1(e04d68cc0b80b79b5f4c19c14b2e87f226f45ac8) )
+ ROM_LOAD( "b25-35.10f", 0x00000, 0x04000, CRC(fec6f0c0) SHA1(f91d698fa0712659c2e6b382a8166b1cacc50a3f) )
+ ROM_LOAD( "b25-34.8f", 0x04000, 0x04000, CRC(02505dad) SHA1(28993c68a17929d6b819ca81cdf60985531fc80b) )
+ ROM_LOAD( "b25-33.7f", 0x08000, 0x04000, CRC(9a55fcb9) SHA1(e04d68cc0b80b79b5f4c19c14b2e87f226f45ac8) )
ROM_REGION( 0x20000, "gfx2", 0 ) /* fg tiles */
- ROM_LOAD( "b25-12.rom", 0x00000, 0x08000, CRC(15d08848) SHA1(e2e62d95a3f240664b5e0ac0f163a0d5cefa5312) )
- ROM_LOAD( "b25-15.rom", 0x08000, 0x08000, CRC(cdd2d408) SHA1(7e4d77f8725fa30d4d65e811d10e0b2c00b23cfe) )
- ROM_LOAD( "b25-14.rom", 0x10000, 0x08000, CRC(5a2aef4f) SHA1(60f4ab2582a924defb5241ab367826ae1f4b3f5e) )
- ROM_LOAD( "b25-13.rom", 0x18000, 0x08000, CRC(be21db2b) SHA1(7fc1809618f2432c9ec6eb33ce57a5faffd44974) )
+ ROM_LOAD( "b25-12.18f", 0x00000, 0x08000, CRC(15d08848) SHA1(e2e62d95a3f240664b5e0ac0f163a0d5cefa5312) )
+ ROM_LOAD( "b25-15.23f", 0x08000, 0x08000, CRC(cdd2d408) SHA1(7e4d77f8725fa30d4d65e811d10e0b2c00b23cfe) )
+ ROM_LOAD( "b25-14.21f", 0x10000, 0x08000, CRC(5a2aef4f) SHA1(60f4ab2582a924defb5241ab367826ae1f4b3f5e) )
+ ROM_LOAD( "b25-13.19f", 0x18000, 0x08000, CRC(be21db2b) SHA1(7fc1809618f2432c9ec6eb33ce57a5faffd44974) )
ROM_REGION( 0x20000, "gfx3", 0 ) /* bg tiles */
- ROM_LOAD( "b25-08.rom", 0x00000, 0x08000, CRC(883ccaa3) SHA1(90d686094eac6e80caf8e2cf90c00bb41a0d26e2) )
- ROM_LOAD( "b25-11.rom", 0x08000, 0x08000, CRC(d6ebd510) SHA1(d65e0db7756ebe6828bf637a6c915bb06082636c) )
- ROM_LOAD( "b25-10.rom", 0x10000, 0x08000, CRC(b9a61e81) SHA1(541e579664d583fbbf81111046115018fdaff073) )
- ROM_LOAD( "b25-09.rom", 0x18000, 0x08000, CRC(585411b7) SHA1(67c0f4b7ab303341d5481c4024dc4199acb7c279) )
+ ROM_LOAD( "b25-08.12f", 0x00000, 0x08000, CRC(883ccaa3) SHA1(90d686094eac6e80caf8e2cf90c00bb41a0d26e2) )
+ ROM_LOAD( "b25-11.16f", 0x08000, 0x08000, CRC(d6ebd510) SHA1(d65e0db7756ebe6828bf637a6c915bb06082636c) )
+ ROM_LOAD( "b25-10.15f", 0x10000, 0x08000, CRC(b9a61e81) SHA1(541e579664d583fbbf81111046115018fdaff073) )
+ ROM_LOAD( "b25-09.14f", 0x18000, 0x08000, CRC(585411b7) SHA1(67c0f4b7ab303341d5481c4024dc4199acb7c279) )
ROM_REGION( 0x40000, "scu", 0 ) /* sprites */
- ROM_LOAD( "b25-01.rom", 0x00000, 0x10000, CRC(42ec01fb) SHA1(646192a2e89f795ed016860cdcdc0b5ef645fca2) )
- ROM_LOAD( "b25-02.rom", 0x10000, 0x10000, CRC(6c0130b7) SHA1(8b6ad72848d03c3d4ee3acd35abbb3a0e678122c) )
- ROM_LOAD( "b25-03.rom", 0x20000, 0x10000, CRC(b923db99) SHA1(2f4be81afdf200586bc44b1e94553d84d16d0b62) )
- ROM_LOAD( "b25-04.rom", 0x30000, 0x10000, CRC(8059573c) SHA1(75bd19e504433438b85ed00e50e85fb98eebf4de) )
+ ROM_LOAD( "b25-01.14c", 0x00000, 0x10000, CRC(42ec01fb) SHA1(646192a2e89f795ed016860cdcdc0b5ef645fca2) )
+ ROM_LOAD( "b25-02.16c", 0x10000, 0x10000, CRC(6c0130b7) SHA1(8b6ad72848d03c3d4ee3acd35abbb3a0e678122c) )
+ ROM_LOAD( "b25-03.17c", 0x20000, 0x10000, CRC(b923db99) SHA1(2f4be81afdf200586bc44b1e94553d84d16d0b62) )
+ ROM_LOAD( "b25-04.19c", 0x30000, 0x10000, CRC(8059573c) SHA1(75bd19e504433438b85ed00e50e85fb98eebf4de) )
ROM_REGION( 0x260, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
ROM_LOAD( "82s129.b19", 0x000, 0x100, CRC(24e7d62f) SHA1(1c06a1ef1b6a722794ca1d5ee2c476ecaa5178a3) ) /* sprite priority control ?? */
@@ -556,13 +556,13 @@ ROM_END
ROM_START( wardnerj )
ROM_REGION( 0x40000, "maincpu", ROMREGION_ERASEFF ) /* Banked Z80 code */
- ROM_LOAD( "b25-17.bin", 0x00000, 0x08000, CRC(4164dca9) SHA1(1f02c0991d7c14230043e34cb4b8e089b467b234) ) /* Main Z80 code */
- ROM_LOAD( "b25-18.rom", 0x10000, 0x10000, CRC(9aab8ee2) SHA1(16fa44b75f4a3a5b1ff713690a299ecec2b5a4bf) ) /* OBJ ROMs */
- ROM_LOAD( "b25-19.rom", 0x20000, 0x10000, CRC(95b68813) SHA1(06ea1b1d6e2e6326ceb9324fc471d082fda6112e) )
- ROM_LOAD( "b25-20.bin", 0x38000, 0x08000, CRC(1113ad38) SHA1(88f89054954b1d2776ceaedc7a3605190808d7e5) )
+ ROM_LOAD( "b25-17.6m", 0x00000, 0x08000, CRC(4164dca9) SHA1(1f02c0991d7c14230043e34cb4b8e089b467b234) ) /* Main Z80 code */
+ ROM_LOAD( "b25-18.7m", 0x10000, 0x10000, CRC(9aab8ee2) SHA1(16fa44b75f4a3a5b1ff713690a299ecec2b5a4bf) ) /* OBJ ROMs */
+ ROM_LOAD( "b25-19.8m", 0x20000, 0x10000, CRC(95b68813) SHA1(06ea1b1d6e2e6326ceb9324fc471d082fda6112e) )
+ ROM_LOAD( "b25-20.10m", 0x38000, 0x08000, CRC(1113ad38) SHA1(88f89054954b1d2776ceaedc7a3605190808d7e5) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound Z80 code */
- ROM_LOAD( "b25-16.rom", 0x00000, 0x08000, CRC(e5202ff8) SHA1(15ae8c0bb16a20bee14e8d80d81c249404ab1463) )
+ ROM_LOAD( "b25-16.4k", 0x00000, 0x08000, CRC(e5202ff8) SHA1(15ae8c0bb16a20bee14e8d80d81c249404ab1463) )
ROM_REGION( 0x2000, "dsp", 0 ) /* Co-Processor TMS320C10 */
ROMX_LOAD( "82s137.1d", 0x0000, 0x0400, CRC(cc5b3f53) SHA1(33589665ac995cc4645b56bbcd6d1c1cd5368f88), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) ) /* msb */
@@ -575,27 +575,27 @@ ROM_START( wardnerj )
ROMX_LOAD( "82s131.1a", 0x0801, 0x0200, CRC(50452ff8) SHA1(76964fa9ee89a51cc71904e08cfc83bf81bb89aa), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) )
ROM_REGION( 0x0c000, "gfx1", 0 ) /* chars */
- ROM_LOAD( "b25-07.bin", 0x00000, 0x04000, CRC(50e329e0) SHA1(5d5fb7043457d952b28101acb909ed65bf13a2dc) )
- ROM_LOAD( "b25-06.bin", 0x04000, 0x04000, CRC(3bfeb6ae) SHA1(3a251f49901ccb17b5fedf81980d54e4f6f49d4d) )
- ROM_LOAD( "b25-05.bin", 0x08000, 0x04000, CRC(be36a53e) SHA1(320fc5b88ed1fce1aa8d8e76e1046206c138b35c) )
+ ROM_LOAD( "b25-07.10f", 0x00000, 0x04000, CRC(50e329e0) SHA1(5d5fb7043457d952b28101acb909ed65bf13a2dc) )
+ ROM_LOAD( "b25-06.8f", 0x04000, 0x04000, CRC(3bfeb6ae) SHA1(3a251f49901ccb17b5fedf81980d54e4f6f49d4d) )
+ ROM_LOAD( "b25-05.7f", 0x08000, 0x04000, CRC(be36a53e) SHA1(320fc5b88ed1fce1aa8d8e76e1046206c138b35c) )
ROM_REGION( 0x20000, "gfx2", 0 ) /* fg tiles */
- ROM_LOAD( "b25-12.rom", 0x00000, 0x08000, CRC(15d08848) SHA1(e2e62d95a3f240664b5e0ac0f163a0d5cefa5312) )
- ROM_LOAD( "b25-15.rom", 0x08000, 0x08000, CRC(cdd2d408) SHA1(7e4d77f8725fa30d4d65e811d10e0b2c00b23cfe) )
- ROM_LOAD( "b25-14.rom", 0x10000, 0x08000, CRC(5a2aef4f) SHA1(60f4ab2582a924defb5241ab367826ae1f4b3f5e) )
- ROM_LOAD( "b25-13.rom", 0x18000, 0x08000, CRC(be21db2b) SHA1(7fc1809618f2432c9ec6eb33ce57a5faffd44974) )
+ ROM_LOAD( "b25-12.18f", 0x00000, 0x08000, CRC(15d08848) SHA1(e2e62d95a3f240664b5e0ac0f163a0d5cefa5312) )
+ ROM_LOAD( "b25-15.23f", 0x08000, 0x08000, CRC(cdd2d408) SHA1(7e4d77f8725fa30d4d65e811d10e0b2c00b23cfe) )
+ ROM_LOAD( "b25-14.21f", 0x10000, 0x08000, CRC(5a2aef4f) SHA1(60f4ab2582a924defb5241ab367826ae1f4b3f5e) )
+ ROM_LOAD( "b25-13.19f", 0x18000, 0x08000, CRC(be21db2b) SHA1(7fc1809618f2432c9ec6eb33ce57a5faffd44974) )
ROM_REGION( 0x20000, "gfx3", 0 ) /* bg tiles */
- ROM_LOAD( "b25-08.rom", 0x00000, 0x08000, CRC(883ccaa3) SHA1(90d686094eac6e80caf8e2cf90c00bb41a0d26e2) )
- ROM_LOAD( "b25-11.rom", 0x08000, 0x08000, CRC(d6ebd510) SHA1(d65e0db7756ebe6828bf637a6c915bb06082636c) )
- ROM_LOAD( "b25-10.rom", 0x10000, 0x08000, CRC(b9a61e81) SHA1(541e579664d583fbbf81111046115018fdaff073) )
- ROM_LOAD( "b25-09.rom", 0x18000, 0x08000, CRC(585411b7) SHA1(67c0f4b7ab303341d5481c4024dc4199acb7c279) )
+ ROM_LOAD( "b25-08.12f", 0x00000, 0x08000, CRC(883ccaa3) SHA1(90d686094eac6e80caf8e2cf90c00bb41a0d26e2) )
+ ROM_LOAD( "b25-11.16f", 0x08000, 0x08000, CRC(d6ebd510) SHA1(d65e0db7756ebe6828bf637a6c915bb06082636c) )
+ ROM_LOAD( "b25-10.15f", 0x10000, 0x08000, CRC(b9a61e81) SHA1(541e579664d583fbbf81111046115018fdaff073) )
+ ROM_LOAD( "b25-09.14f", 0x18000, 0x08000, CRC(585411b7) SHA1(67c0f4b7ab303341d5481c4024dc4199acb7c279) )
ROM_REGION( 0x40000, "scu", 0 ) /* sprites */
- ROM_LOAD( "b25-01.rom", 0x00000, 0x10000, CRC(42ec01fb) SHA1(646192a2e89f795ed016860cdcdc0b5ef645fca2) )
- ROM_LOAD( "b25-02.rom", 0x10000, 0x10000, CRC(6c0130b7) SHA1(8b6ad72848d03c3d4ee3acd35abbb3a0e678122c) )
- ROM_LOAD( "b25-03.rom", 0x20000, 0x10000, CRC(b923db99) SHA1(2f4be81afdf200586bc44b1e94553d84d16d0b62) )
- ROM_LOAD( "b25-04.rom", 0x30000, 0x10000, CRC(8059573c) SHA1(75bd19e504433438b85ed00e50e85fb98eebf4de) )
+ ROM_LOAD( "b25-01.14c", 0x00000, 0x10000, CRC(42ec01fb) SHA1(646192a2e89f795ed016860cdcdc0b5ef645fca2) )
+ ROM_LOAD( "b25-02.16c", 0x10000, 0x10000, CRC(6c0130b7) SHA1(8b6ad72848d03c3d4ee3acd35abbb3a0e678122c) )
+ ROM_LOAD( "b25-03.17c", 0x20000, 0x10000, CRC(b923db99) SHA1(2f4be81afdf200586bc44b1e94553d84d16d0b62) )
+ ROM_LOAD( "b25-04.19c", 0x30000, 0x10000, CRC(8059573c) SHA1(75bd19e504433438b85ed00e50e85fb98eebf4de) )
ROM_REGION( 0x260, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
ROM_LOAD( "82s129.b19", 0x000, 0x100, CRC(24e7d62f) SHA1(1c06a1ef1b6a722794ca1d5ee2c476ecaa5178a3) ) /* sprite priority control ?? */
diff --git a/src/mame/drivers/warriorb.cpp b/src/mame/drivers/warriorb.cpp
index ddd0b8d3c12..d03e5dcb4fa 100644
--- a/src/mame/drivers/warriorb.cpp
+++ b/src/mame/drivers/warriorb.cpp
@@ -220,7 +220,7 @@ void warriorb_state::darius2d_map(address_map &map)
map(0x420000, 0x420007).rw(m_tc0110pcr[1], FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_word_w)); /* palette (2nd screen) */
map(0x600000, 0x6013ff).ram().share("spriteram");
map(0x800000, 0x80000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0x00ff);
-// AM_RANGE(0x820000, 0x820001) AM_WRITENOP // ???
+// map(0x820000, 0x820001).nopw(); // ???
map(0x830001, 0x830001).w(m_tc0140syt, FUNC(tc0140syt_device::master_port_w));
map(0x830003, 0x830003).rw(m_tc0140syt, FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
}
@@ -237,7 +237,7 @@ void warriorb_state::warriorb_map(address_map &map)
map(0x420000, 0x420007).rw(m_tc0110pcr[1], FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_word_w)); /* palette (2nd screen) */
map(0x600000, 0x6013ff).ram().share("spriteram");
map(0x800000, 0x80000f).rw(m_tc0510nio, FUNC(tc0510nio_device::read), FUNC(tc0510nio_device::write)).umask16(0x00ff);
-// AM_RANGE(0x820000, 0x820001) AM_WRITENOP // ? uses bits 0,2,3
+// map(0x820000, 0x820001).nopw(); // ? uses bits 0,2,3
map(0x830001, 0x830001).w(m_tc0140syt, FUNC(tc0140syt_device::master_port_w));
map(0x830003, 0x830003).rw(m_tc0140syt, FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
}
diff --git a/src/mame/drivers/wecleman.cpp b/src/mame/drivers/wecleman.cpp
index 09f16c90031..a76a3385ffc 100644
--- a/src/mame/drivers/wecleman.cpp
+++ b/src/mame/drivers/wecleman.cpp
@@ -276,6 +276,7 @@ TODO:
#include "cpu/m68000/m68000.h"
#include "cpu/m6809/m6809.h"
#include "cpu/z80/z80.h"
+#include "machine/adc0804.h"
#include "machine/gen_latch.h"
#include "sound/ym2151.h"
#include "speaker.h"
@@ -391,16 +392,16 @@ WRITE16_MEMBER(wecleman_state::selected_ip_w)
}
/* $140021.b - Return the previously selected input port's value */
-READ16_MEMBER(wecleman_state::selected_ip_r)
+uint8_t wecleman_state::selected_ip_r()
{
switch ( (m_selected_ip >> 5) & 3 )
{ // From WEC Le Mans Schems:
case 0: return ioport("ACCEL")->read(); // Accel - Schems: Accelevr
- case 1: return ~0; // ????? - Schems: Not Used
+ case 1: return 0; // ????? - Schems: Not Used
case 2: return ioport("STEER")->read(); // Wheel - Schems: Handlevr
- case 3: return ~0; // Table - Schems: Turnvr
+ case 3: return 0; // Table - Schems: Turnvr
- default: return ~0;
+ default: return 0;
}
}
@@ -539,8 +540,7 @@ void wecleman_state::wecleman_map(address_map &map)
map(0x140012, 0x140013).portr("IN1"); // ??
map(0x140014, 0x140015).portr("DSWA"); // DSW 2
map(0x140016, 0x140017).portr("DSWB"); // DSW 1
- map(0x140020, 0x140021).writeonly(); // Paired with writes to $140003
- map(0x140020, 0x140021).r(FUNC(wecleman_state::selected_ip_r)); // Accelerator or Wheel or ..
+ map(0x140021, 0x140021).rw("adc", FUNC(adc0804_device::read), FUNC(adc0804_device::write));
map(0x140030, 0x140031).nopw(); // toggles between 0 & 1 on hitting bumps and crashes (vibration?)
}
@@ -572,7 +572,7 @@ void wecleman_state::hotchase_map(address_map &map)
map(0x140012, 0x140013).portr("IN1"); // ?? bit 4 from sound cpu
map(0x140014, 0x140015).portr("DSW2"); // DSW 2
map(0x140016, 0x140017).portr("DSW1"); // DSW 1
- map(0x140020, 0x140021).r(FUNC(wecleman_state::selected_ip_r)).nopw(); // Paired with writes to $140003
+ map(0x140021, 0x140021).rw("adc", FUNC(adc0804_device::read), FUNC(adc0804_device::write)); // Paired with writes to $140003
map(0x140022, 0x140023).nopr(); // read and written at $601c0, unknown purpose
map(0x140030, 0x140031).nopw(); // signal to cabinet vibration motors?
}
@@ -764,7 +764,7 @@ static INPUT_PORTS_START( wecleman )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Right SW") // right sw
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_NAME("Left SW") // left sw
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE4 ) PORT_NAME("Thermo SW") // thermo
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) // from sound cpu ?
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("adc", adc0804_device, intr_r)
PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("DSWA") /* $140015.b */
@@ -861,7 +861,7 @@ static INPUT_PORTS_START( hotchase )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Right SW") // right sw
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_NAME("Left SW") // left sw
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE4 ) PORT_NAME("Thermo SW") // thermo
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) // from sound cpu
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("adc", adc0804_device, intr_r)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(wecleman_state, hotchase_sound_status_r)
PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNKNOWN )
@@ -1068,6 +1068,9 @@ void wecleman_state::wecleman(machine_config &config)
MCFG_MACHINE_START_OVERRIDE(wecleman_state, wecleman)
MCFG_MACHINE_RESET_OVERRIDE(wecleman_state, wecleman)
+ adc0804_device &adc(ADC0804(config, "adc", 640000)); // unknown "ADCCLK" (generated on video board?)
+ adc.vin_callback().set(FUNC(wecleman_state::selected_ip_r));
+
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60);
@@ -1144,6 +1147,9 @@ void wecleman_state::hotchase(machine_config &config)
MCFG_MACHINE_RESET_OVERRIDE(wecleman_state, hotchase)
MCFG_MACHINE_START_OVERRIDE(wecleman_state, hotchase)
+ adc0804_device &adc(ADC0804(config, "adc", 640000)); // unknown clock (generated on video board?)
+ adc.vin_callback().set(FUNC(wecleman_state::selected_ip_r));
+
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60);
diff --git a/src/mame/drivers/wico.cpp b/src/mame/drivers/wico.cpp
index 1ed154b7c08..71377155aaa 100644
--- a/src/mame/drivers/wico.cpp
+++ b/src/mame/drivers/wico.cpp
@@ -98,9 +98,9 @@ void wico_state::hcpu_map(address_map &map)
{
map(0x0000, 0x07ff).ram().share("sharedram");
map(0x1fe0, 0x1fe0).w(FUNC(wico_state::muxld_w));
- //AM_RANGE(0x1fe1, 0x1fe1) AM_WRITE(store_w)
+ //map(0x1fe1, 0x1fe1).w(FUNC(wico_state::store_w));
map(0x1fe2, 0x1fe2).w(FUNC(wico_state::muxen_w));
- //AM_RANGE(0x1fe3, 0x1fe3) AM_WRITE(csols_w)
+ //map(0x1fe3, 0x1fe3).w(FUNC(wico_state::csols_w));
map(0x1fe4, 0x1fe4).noprw();
map(0x1fe5, 0x1fe5).w("sn76494", FUNC(sn76494_device::write));
map(0x1fe6, 0x1fe6).w(FUNC(wico_state::wdogcl_w));
@@ -109,9 +109,9 @@ void wico_state::hcpu_map(address_map &map)
map(0x1fe9, 0x1fe9).w(FUNC(wico_state::dled1_w));
map(0x1fea, 0x1fea).r(FUNC(wico_state::gentmrcl_r));
map(0x1feb, 0x1feb).r(FUNC(wico_state::lampst_r));
- //AM_RANGE(0x1fec, 0x1fec) AM_READ(sast_r)
- //AM_RANGE(0x1fed, 0x1fed) AM_READ(solst1_r)
- //AM_RANGE(0x1fee, 0x1fee) AM_READ(solst0_r)
+ //map(0x1fec, 0x1fec).r(FUNC(wico_state::sast_r));
+ //map(0x1fed, 0x1fed).r(FUNC(wico_state::solst1_r));
+ //map(0x1fee, 0x1fee).r(FUNC(wico_state::solst0_r));
map(0x1fef, 0x1fef).r(FUNC(wico_state::switch_r));
map(0xf000, 0xffff).rom();
}
@@ -120,8 +120,8 @@ void wico_state::hcpu_map(address_map &map)
void wico_state::ccpu_map(address_map &map)
{
map(0x0000, 0x07ff).ram().share("sharedram"); // 2128 2k RAM
- //AM_RANGE(0x1fe0, 0x1fe0) AM_WRITE(muxld_w) // to display module
- //AM_RANGE(0x1fe1, 0x1fe1) AM_WRITE(store_w) // enable save to nvram
+ //map(0x1fe0, 0x1fe0).w(FUNC(wico_state::muxld_w)); // to display module
+ //map(0x1fe1, 0x1fe1).w(FUNC(wico_state::store_w)); // enable save to nvram
map(0x1fe2, 0x1fe2).w(FUNC(wico_state::muxen_w)); // digit to display on diagnostic LED; d0=L will disable main displays
map(0x1fe3, 0x1fe3).w(FUNC(wico_state::csols_w)); // solenoid column
map(0x1fe4, 0x1fe4).w(FUNC(wico_state::msols_w)); // solenoid row
@@ -131,11 +131,11 @@ void wico_state::ccpu_map(address_map &map)
map(0x1fe8, 0x1fe8).w(FUNC(wico_state::dled0_w)); // turn off diagnostic LED
map(0x1fe9, 0x1fe9).w(FUNC(wico_state::dled1_w)); // turn on diagnostic LED
map(0x1fea, 0x1fea).r(FUNC(wico_state::gentmrcl_r)); // enable IRQ on ccpu
- //AM_RANGE(0x1feb, 0x1feb) AM_READ(lampst_r) // lamps?
- //AM_RANGE(0x1fec, 0x1fec) AM_READ(sast_r) // a pwron pulse to d0 L->H
- //AM_RANGE(0x1fed, 0x1fed) AM_READ(solst1_r) // switches
- //AM_RANGE(0x1fee, 0x1fee) AM_READ(solst0_r) // switches
- //AM_RANGE(0x1fef, 0x1fef) AM_READ(switch_r) // switches
+ //map(0x1feb, 0x1feb).r(FUNC(wico_state::lampst_r)); // lamps?
+ //map(0x1fec, 0x1fec).r(FUNC(wico_state::sast_r)); // a pwron pulse to d0 L->H
+ //map(0x1fed, 0x1fed).r(FUNC(wico_state::solst1_r)); // switches
+ //map(0x1fee, 0x1fee).r(FUNC(wico_state::solst0_r)); // switches
+ //map(0x1fef, 0x1fef).r(FUNC(wico_state::switch_r)); // switches
map(0x4000, 0x40ff).ram().share("nvram"); // X2212 4bit x 256 NVRAM, stores only when store_w is active
map(0x8000, 0x9fff).rom();
map(0xe000, 0xffff).rom();
diff --git a/src/mame/drivers/wink.cpp b/src/mame/drivers/wink.cpp
index 725a831122c..6f54a302426 100644
--- a/src/mame/drivers/wink.cpp
+++ b/src/mame/drivers/wink.cpp
@@ -207,7 +207,7 @@ void wink_state::wink_io(address_map &map)
map(0xa0, 0xa0).r(FUNC(wink_state::player_inputs_r));
map(0xa4, 0xa4).portr("DSW1"); //dipswitch bank2
map(0xa8, 0xa8).portr("DSW2"); //dipswitch bank1
-// AM_RANGE(0xac, 0xac) AM_WRITENOP //protection - loads video xor unit (written only once at startup)
+// map(0xac, 0xac).nopw(); //protection - loads video xor unit (written only once at startup)
map(0xb0, 0xb0).portr("DSW3"); //unused inputs
map(0xb4, 0xb4).portr("DSW4"); //dipswitch bank3
map(0xc0, 0xdf).w(FUNC(wink_state::prot_w)); //load load protection-buffer from upper address bus
diff --git a/src/mame/drivers/wiz.cpp b/src/mame/drivers/wiz.cpp
index fa0228a83bb..22801a90a23 100644
--- a/src/mame/drivers/wiz.cpp
+++ b/src/mame/drivers/wiz.cpp
@@ -350,7 +350,7 @@ void wiz_state::wiz_main_map(address_map &map)
void wiz_state::stinger_main_map(address_map &map)
{
kungfut_main_map(map);
-// AM_RANGE(0xf008, 0xf00f) AM_WRITENOP // ?
+// map(0xf008, 0xf00f).nopw(); // ?
map(0xf800, 0xf800).r("watchdog", FUNC(watchdog_timer_device::reset_r));
map(0xf808, 0xf808).w(FUNC(wiz_state::stinger_explosion_w));
map(0xf80a, 0xf80a).w(FUNC(wiz_state::stinger_shot_w));
diff --git a/src/mame/drivers/x1.cpp b/src/mame/drivers/x1.cpp
index fe379981f14..65eeb7f0482 100644
--- a/src/mame/drivers/x1.cpp
+++ b/src/mame/drivers/x1.cpp
@@ -1355,7 +1355,7 @@ void x1_state::x1_io_banks(address_map &map)
{
x1_io_banks_common(map);
-// AM_RANGE(0x0700, 0x0701) TODO: user could install ym2151 on plain X1 too
+// map(0x0700, 0x0701) TODO: user could install ym2151 on plain X1 too
map(0x1000, 0x1000).mirror(0x00ff).w(FUNC(x1_state::x1_pal_b_w));
map(0x1100, 0x1100).mirror(0x00ff).w(FUNC(x1_state::x1_pal_r_w));
@@ -1401,7 +1401,7 @@ void x1_state::x1turbo_io_banks(address_map &map)
map(0x1fc3, 0x1fc3).w(FUNC(x1_state::z_chroma_key_w)); // Z only!
map(0x1fc4, 0x1fc4).w(FUNC(x1_state::z_extra_scroll_w)); // Z only!
map(0x1fc5, 0x1fc5).rw(FUNC(x1_state::x1turbo_gfxpal_r), FUNC(x1_state::x1turbo_gfxpal_w)); // Z only!
-// AM_RANGE(0x1fd0, 0x1fdf) AM_READ(x1_scrn_r) // Z only!
+// map(0x1fd0, 0x1fdf).r(FUNC(x1_state::x1_scrn_r)); // Z only!
map(0x1fd0, 0x1fd0).mirror(0x000f).w(FUNC(x1_state::x1_scrn_w));
map(0x1fe0, 0x1fe0).rw(FUNC(x1_state::x1turboz_blackclip_r), FUNC(x1_state::x1turbo_blackclip_w));
map(0x1ff0, 0x1ff0).portr("X1TURBO_DSW");
diff --git a/src/mame/drivers/x68k.cpp b/src/mame/drivers/x68k.cpp
index 8478428a4c8..0a2974c436e 100644
--- a/src/mame/drivers/x68k.cpp
+++ b/src/mame/drivers/x68k.cpp
@@ -1213,7 +1213,7 @@ void x68k_state::x68k_base_map(address_map &map)
map(0xe86000, 0xe87fff).rw(FUNC(x68k_state::areaset_r), FUNC(x68k_state::areaset_w));
map(0xe88000, 0xe89fff).rw(m_mfpdev, FUNC(mc68901_device::read), FUNC(mc68901_device::write)).umask16(0x00ff);
map(0xe8a000, 0xe8bfff).rw(m_rtc, FUNC(rp5c15_device::read), FUNC(rp5c15_device::write)).umask16(0x00ff);
-// AM_RANGE(0xe8c000, 0xe8dfff) AM_READWRITE(x68k_printer_r, x68k_printer_w)
+// map(0xe8c000, 0xe8dfff).rw(FUNC(x68k_state::x68k_printer_r), FUNC(x68k_state::x68k_printer_w));
map(0xe8e000, 0xe8ffff).rw(FUNC(x68k_state::sysport_r), FUNC(x68k_state::sysport_w));
map(0xe90000, 0xe91fff).rw(m_ym2151, FUNC(ym2151_device::read), FUNC(ym2151_device::write)).umask16(0x00ff);
map(0xe94000, 0xe94003).m(m_upd72065, FUNC(upd72065_device::map)).umask16(0x00ff);
@@ -1264,11 +1264,11 @@ void x68030_state::x68030_map(address_map &map)
x68k_base_map(map);
map(0xe82000, 0xe821ff).rw(m_gfxpalette, FUNC(palette_device::read32), FUNC(palette_device::write32)).share("gfxpalette");
map(0xe82200, 0xe823ff).rw(m_pcgpalette, FUNC(palette_device::read32), FUNC(palette_device::write32)).share("pcgpalette");
-// AM_RANGE(0xe8c000, 0xe8dfff) AM_READWRITE(x68k_printer_r, x68k_printer_w)
+// map(0xe8c000, 0xe8dfff).rw(FUNC(x68k_state::x68k_printer_r), FUNC(x68k_state::x68k_printer_w));
map(0xe92000, 0xe92003).r(m_okim6258, FUNC(okim6258_device::status_r)).umask32(0x00ff00ff).w(FUNC(x68030_state::adpcm_w)).umask32(0x00ff00ff);
map(0xe96020, 0xe9603f).rw(m_scsictrl, FUNC(mb89352_device::mb89352_r), FUNC(mb89352_device::mb89352_w)).umask32(0x00ff00ff);
- map(0xea0000, 0xea1fff).noprw();//AM_READWRITE16(exp_r, exp_w,0xffffffff) // external SCSI ROM and controller
+ map(0xea0000, 0xea1fff).noprw();//.rw(FUNC(x68030_state::exp_r), FUNC(x68030_state::exp_w)); // external SCSI ROM and controller
map(0xeafa80, 0xeafa8b).rw(FUNC(x68030_state::areaset_r), FUNC(x68030_state::enh_areaset_w));
map(0xfc0000, 0xfdffff).rom(); // internal SCSI ROM
}
diff --git a/src/mame/drivers/xavix.cpp b/src/mame/drivers/xavix.cpp
index ffba3abe833..46a9869aac7 100644
--- a/src/mame/drivers/xavix.cpp
+++ b/src/mame/drivers/xavix.cpp
@@ -1489,6 +1489,15 @@ void xavix_i2c_cart_state::xavix_i2c_jpopira(machine_config &config)
SOFTWARE_LIST(config, "cart_list_japan_sp").set_original("ekara_japan_sp");
}
+void xavix_cart_state::xavix_cart_evio(machine_config &config)
+{
+ xavix_cart(config);
+ NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1);
+
+ SOFTWARE_LIST(config, "cart_list_evio").set_original("evio");
+}
+
+
void xavix_cart_state::xavix_cart_ekara(machine_config &config)
{
xavix_cart(config);
@@ -1982,8 +1991,7 @@ CONS( 2003, taikodp, 0, 0, xavix_i2c_taiko, taikodp, xavix_i2c_car
CONS( 2004, jpopira, 0, 0, xavix_i2c_jpopira,jpopira, xavix_i2c_cart_state, init_xavix, "Takara / SSD Company LTD", "Jumping Popira (Japan)", MACHINE_IMPERFECT_SOUND /*|MACHINE_IS_BIOS_ROOT*/ )
-
-CONS( 2003, evio, 0, 0, xavix_nv, evio, xavix_state, init_xavix, "Tomy / SSD Company LTD", "Evio (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND /*|MACHINE_IS_BIOS_ROOT*/ ) // inputs? it's a violin controller
+CONS( 2003, evio, 0, 0, xavix_cart_evio, evio, xavix_cart_state, init_xavix, "Tomy / SSD Company LTD", "Evio (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND /*|MACHINE_IS_BIOS_ROOT*/ ) // inputs? it's a violin controller
// Let’s!TVプレイ 超にんきスポット!ころがしほーだい たまごっちりぞーと (Let's! TV Play Chou Ninki Spot! Korogashi-Houdai Tamagotchi Resort) (only on the Japanese list? http://test.shinsedai.co.jp/english/products/Applied/list.html ) This also allows you to use an IR reciever to import a Tamagotchi from compatible games
diff --git a/src/mame/drivers/xexex.cpp b/src/mame/drivers/xexex.cpp
index 22d1efeaeb7..35dd1323daa 100644
--- a/src/mame/drivers/xexex.cpp
+++ b/src/mame/drivers/xexex.cpp
@@ -357,7 +357,7 @@ void xexex_state::main_map(address_map &map)
map(0x0c8000, 0x0c800f).rw(m_k053250, FUNC(k053250_device::reg_r), FUNC(k053250_device::reg_w));
map(0x0ca000, 0x0ca01f).w(m_k054338, FUNC(k054338_device::word_w)); // CLTC
map(0x0cc000, 0x0cc01f).w(m_k053251, FUNC(k053251_device::write)).umask16(0x00ff); // priority encoder
-// AM_RANGE(0x0d0000, 0x0d001f) AM_DEVREADWRITE8("k053252", k053252_device, read, write, 0x00ff) // CCU
+// map(0x0d0000, 0x0d001f).rw(m_k053252, FUNC(k053252_device::read), FUNC(k053252_device::write)).umask16(0x00ff); // CCU
map(0x0d4000, 0x0d4001).w(FUNC(xexex_state::sound_irq_w));
map(0x0d6000, 0x0d601f).m(m_k054321, FUNC(k054321_device::main_map)).umask16(0x00ff);
map(0x0d8000, 0x0d8007).w(m_k056832, FUNC(k056832_device::b_word_w)); // VSCCS regs
diff --git a/src/mame/drivers/z100.cpp b/src/mame/drivers/z100.cpp
index 076f5ffb29c..d6515c0c7f5 100644
--- a/src/mame/drivers/z100.cpp
+++ b/src/mame/drivers/z100.cpp
@@ -368,11 +368,11 @@ void z100_state::z100_mem(address_map &map)
{
map.unmap_value_high();
map(0x00000, 0x3ffff).rw(FUNC(z100_state::ram_r), FUNC(z100_state::ram_w)).share("ram"); // 128*2 KB RAM
-// AM_RANGE(0xb0000,0xbffff) AM_ROM // expansion ROM
+// map(0xb0000,0xbffff).rom(); // expansion ROM
map(0xc0000, 0xeffff).rw(FUNC(z100_state::z100_vram_r), FUNC(z100_state::z100_vram_w)); // Blue / Red / Green
-// AM_RANGE(0xf0000,0xf0fff) // network card (NET-100)
-// AM_RANGE(0xf4000,0xf7fff) // MTRET-100 Firmware I expansion ROM
-// AM_RANGE(0xf8000,0xfbfff) // MTRET-100 Firmware II expansion ROM check ID 0x4550
+// map(0xf0000,0xf0fff) // network card (NET-100)
+// map(0xf4000,0xf7fff) // MTRET-100 Firmware I expansion ROM
+// map(0xf8000,0xfbfff) // MTRET-100 Firmware II expansion ROM check ID 0x4550
map(0xfc000, 0xfffff).rom().region("ipl", 0);
}
@@ -468,25 +468,25 @@ void z100_state::z100_io(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
-// AM_RANGE (0x00, 0x3f) reserved for non-ZDS vendors
-// AM_RANGE (0x40, 0x5f) secondary Multiport card (Z-204)
-// AM_RANGE (0x60, 0x7f) primary Multiport card (Z-204)
-// AM_RANGE (0x80, 0x83) development board
-// AM_RANGE (0x98, 0x9f) Z-205 expansion memory boards
-// AM_RANGE (0xa0, 0xa3) network card (NET-100)
-// AM_RANGE (0xa4, 0xa7) gateway (reserved)
-// AM_RANGE (0xac, 0xad) Z-217 secondary disk controller (winchester)
-// AM_RANGE (0xae, 0xaf) Z-217 primary disk controller (winchester)
+// map(0x00, 0x3f) reserved for non-ZDS vendors
+// map(0x40, 0x5f) secondary Multiport card (Z-204)
+// map(0x60, 0x7f) primary Multiport card (Z-204)
+// map(0x80, 0x83) development board
+// map(0x98, 0x9f) Z-205 expansion memory boards
+// map(0xa0, 0xa3) network card (NET-100)
+// map(0xa4, 0xa7) gateway (reserved)
+// map(0xac, 0xad) Z-217 secondary disk controller (winchester)
+// map(0xae, 0xaf) Z-217 primary disk controller (winchester)
map(0xb0, 0xb3).rw(m_fdc, FUNC(fd1797_device::read), FUNC(fd1797_device::write));
map(0xb4, 0xb4).w(FUNC(z100_state::floppy_select_w));
map(0xb5, 0xb5).w(FUNC(z100_state::floppy_motor_w));
// z-207 secondary disk controller (wd1797)
-// AM_RANGE (0xcd, 0xce) ET-100 CRT Controller
-// AM_RANGE (0xd4, 0xd7) ET-100 Trainer Parallel I/O
+// map(0xcd, 0xce) ET-100 CRT Controller
+// map(0xd4, 0xd7) ET-100 Trainer Parallel I/O
map(0xd8, 0xdb).rw(m_pia[0], FUNC(pia6821_device::read), FUNC(pia6821_device::write)); //video board
map(0xdc, 0xdc).w(m_crtc, FUNC(mc6845_device::address_w));
map(0xdd, 0xdd).w(m_crtc, FUNC(mc6845_device::register_w));
-// AM_RANGE (0xde, 0xde) light pen
+// map(0xde, 0xde) light pen
map(0xe0, 0xe3).rw(m_pia[1], FUNC(pia6821_device::read), FUNC(pia6821_device::write)); //main board
map(0xe4, 0xe7).rw("pit", FUNC(pit8253_device::read), FUNC(pit8253_device::write));
map(0xe8, 0xeb).rw(m_epci[0], FUNC(mc2661_device::read), FUNC(mc2661_device::write));
@@ -494,11 +494,11 @@ void z100_state::z100_io(address_map &map)
map(0xf0, 0xf1).rw(m_pics, FUNC(pic8259_device::read), FUNC(pic8259_device::write));
map(0xf2, 0xf3).rw(m_picm, FUNC(pic8259_device::read), FUNC(pic8259_device::write));
map(0xf4, 0xf5).rw("kbdc", FUNC(i8041a_device::upi41_master_r), FUNC(i8041a_device::upi41_master_w));
-// AM_RANGE (0xf6, 0xf6) expansion ROM is present (bit 0, active low)
+// map(0xf6, 0xf6) expansion ROM is present (bit 0, active low)
map(0xfb, 0xfb).rw(FUNC(z100_state::tmr_status_r), FUNC(z100_state::tmr_status_w));
map(0xfc, 0xfc).w(FUNC(z100_state::memory_ctrl_w));
-// AM_RANGE (0xfd, 0xfd) Hi-address latch
-// AM_RANGE (0xfe, 0xfe) Processor swap port
+// map(0xfd, 0xfd) Hi-address latch
+// map(0xfe, 0xfe) Processor swap port
map(0xff, 0xff).portr("DSW101");
}
diff --git a/src/mame/drivers/zn.cpp b/src/mame/drivers/zn.cpp
index 0059b906f9f..7690b88651c 100644
--- a/src/mame/drivers/zn.cpp
+++ b/src/mame/drivers/zn.cpp
@@ -1686,7 +1686,7 @@ void zn_state::psarc_snd_map(address_map &map)
void zn_state::beastrzrb_snd_map(address_map &map)
{ // Internal ROM Not dumped
-// AM_RANGE(0x0000, 0x0fff) AM_ROM
+// map(0x0000, 0x0fff).rom();
}
void zn_state::oki_map(address_map &map)
diff --git a/src/mame/drivers/zsbc3.cpp b/src/mame/drivers/zsbc3.cpp
index fa7f01f811f..ba1393e181c 100644
--- a/src/mame/drivers/zsbc3.cpp
+++ b/src/mame/drivers/zsbc3.cpp
@@ -71,7 +71,7 @@ void zsbc3_state::zsbc3_io(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
- map(0x08, 0x0b); //AM_DEVREADWRITE("pio", z80pio_device, read, write) // the control bytes appear to be for a PIO
+ map(0x08, 0x0b); //.rw("pio", FUNC(z80pio_device::read), FUNC(z80pio_device::write)); // the control bytes appear to be for a PIO
map(0x28, 0x2b).rw("sio", FUNC(z80sio_device::cd_ba_r), FUNC(z80sio_device::cd_ba_w));
map(0x30, 0x33).rw("ctc", FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
map(0x38, 0x38); // unknown device, init byte = C3
diff --git a/src/mame/etc/korgm1.cpp b/src/mame/etc/korgm1.cpp
index 6a5df1cd84c..47c0989e7d8 100644
--- a/src/mame/etc/korgm1.cpp
+++ b/src/mame/etc/korgm1.cpp
@@ -174,7 +174,7 @@ void korgm1_state::korgm1(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &korgm1_state::korgm1_map);
m_maincpu->set_addrmap(AS_IO, &korgm1_state::korgm1_io);
- CXD1095(config, "pio", 0);
+ CXD1095(config, "pio");
/* video hardware */
/* TODO: LCD actually */
diff --git a/src/mame/includes/8080bw.h b/src/mame/includes/8080bw.h
index fc7317155e9..c2feda4b058 100644
--- a/src/mame/includes/8080bw.h
+++ b/src/mame/includes/8080bw.h
@@ -15,6 +15,7 @@
#include "machine/eepromser.h"
#include "machine/timer.h"
+#include "sound/samples.h"
#include "sound/sn76477.h"
#include "sound/spkrdev.h"
@@ -34,9 +35,12 @@ public:
, m_audiocpu(*this, "audiocpu")
, m_schaser_effect_555_timer(*this, "schaser_sh_555")
, m_claybust_gun_on(*this, "claybust_gun")
+ , m_sn(*this, "snsnd")
+ , m_samples(*this, "samples")
, m_speaker(*this, "speaker")
, m_eeprom(*this, "eeprom")
, m_palette(*this, "palette")
+ , m_colorram(*this, "colorram")
, m_gunx(*this, "GUNX")
, m_guny(*this, "GUNY")
, m_timer_state(1)
@@ -90,9 +94,12 @@ private:
optional_device<cpu_device> m_audiocpu;
optional_device<timer_device> m_schaser_effect_555_timer;
optional_device<timer_device> m_claybust_gun_on;
+ optional_device<sn76477_device> m_sn;
+ optional_device<samples_device> m_samples;
optional_device<speaker_sound_device> m_speaker;
optional_device<eeprom_serial_93cxx_device> m_eeprom;
optional_device<palette_device> m_palette;
+ optional_shared_ptr<uint8_t> m_colorram;
/* misc game specific */
optional_ioport m_gunx;
@@ -101,6 +108,14 @@ private:
uint8_t m_screen_red;
uint8_t m_fleet_step;
+ std::unique_ptr<uint8_t[]> m_scattered_colorram;
+ std::unique_ptr<uint8_t[]> m_scattered_colorram2;
+
+ /* sound-related */
+ uint8_t m_port_1_last_extra;
+ uint8_t m_port_2_last_extra;
+ uint8_t m_port_3_last_extra;
+
attotime m_schaser_effect_555_time_remain;
int32_t m_schaser_effect_555_time_remain_savable;
int m_schaser_effect_555_is_low;
@@ -124,7 +139,6 @@ private:
DECLARE_WRITE8_MEMBER(spcewars_sh_port_w);
DECLARE_WRITE8_MEMBER(lrescue_sh_port_1_w);
DECLARE_WRITE8_MEMBER(lrescue_sh_port_2_w);
- DECLARE_WRITE8_MEMBER(cosmicmo_05_w);
DECLARE_WRITE8_MEMBER(cosmo_sh_port_2_w);
DECLARE_READ8_MEMBER(darthvdr_01_r);
DECLARE_WRITE8_MEMBER(darthvdr_00_w);
@@ -215,6 +229,8 @@ private:
inline void set_8_pixels( bitmap_rgb32 &bitmap, uint8_t y, uint8_t x, uint8_t data, int fore_color, int back_color );
void clear_extra_columns( bitmap_rgb32 &bitmap, int color );
+ void invaders_samples_audio(machine_config &config);
+
void astropal_io_map(address_map &map);
void attackfc_io_map(address_map &map);
void ballbomb_io_map(address_map &map);
diff --git a/src/mame/includes/cave.h b/src/mame/includes/cave.h
index 14cc4ce1b8d..d509a5aa203 100644
--- a/src/mame/includes/cave.h
+++ b/src/mame/includes/cave.h
@@ -15,6 +15,7 @@
#include "machine/gen_latch.h"
#include "machine/timer.h"
#include "sound/okim6295.h"
+#include "video/tmap038.h"
#include "emupal.h"
#include "screen.h"
#include "tilemap.h"
@@ -25,8 +26,6 @@ public:
cave_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_videoregs(*this, "videoregs.%u", 0)
- , m_vram(*this, "vram.%u", 0)
- , m_vctrl(*this, "vctrl.%u", 0)
, m_spriteram(*this, "spriteram.%u", 0)
, m_io_in0(*this, "IN0")
, m_touch_x(*this, "TOUCH%u_X", 1U)
@@ -48,6 +47,7 @@ public:
, m_gfxdecode(*this, "gfxdecode.%u", 0U)
, m_screen(*this, "screen.%u", 0U)
, m_palette(*this, "palette.%u", 0U)
+ , m_tilemap(*this, "tilemap.%u", 0U)
, m_soundlatch(*this, "soundlatch")
, m_startup(*this, "startup")
, m_led_outputs(*this, "led%u", 0U)
@@ -103,7 +103,7 @@ private:
void (cave_state::*m_get_sprite_info)(int chip);
void (cave_state::*m_sprite_draw)(int chip, int priority);
- void add_base_config(machine_config &config);
+ void add_base_config(machine_config &config, int layer);
void add_ymz(machine_config &config);
u16 irq_cause_r(offs_t offset);
@@ -124,8 +124,6 @@ private:
template<int Mask> void z80_rombank_w(u8 data);
template<int Mask> void oki1_bank_w(u8 data);
template<int Mask> void oki2_bank_w(u8 data);
- template<int Chip> void vram_w(offs_t offset, u16 data, u16 mem_mask);
- template<int Chip> void vram_8x8_w(offs_t offset, u16 data, u16 mem_mask);
void eeprom_w(u8 data);
void sailormn_eeprom_w(u8 data);
void hotdogst_eeprom_w(u8 data);
@@ -138,17 +136,12 @@ private:
void ppsatan_io_mux_w(offs_t offset, u16 data, u16 mem_mask);
template<int Player> u16 ppsatan_touch_r();
void ppsatan_out_w(offs_t offset, u16 data, u16 mem_mask);
- TILE_GET_INFO_MEMBER(sailormn_get_tile_info_2);
- template<int Chip, int Gfx> TILE_GET_INFO_MEMBER(get_tile_info);
+ void sailormn_get_banked_code(bool tiledim, u32 &color, u32 &pri, u32 &code);
DECLARE_MACHINE_RESET(sailormn);
- DECLARE_VIDEO_START(ddonpach);
- DECLARE_VIDEO_START(dfeveron);
- DECLARE_VIDEO_START(donpachi);
+ DECLARE_VIDEO_START(spr_4bpp);
+ DECLARE_VIDEO_START(spr_8bpp);
DECLARE_VIDEO_START(korokoro);
DECLARE_VIDEO_START(ppsatan);
- DECLARE_VIDEO_START(pwrinst2);
- DECLARE_VIDEO_START(sailormn);
- DECLARE_VIDEO_START(uopoko);
void cave_palette(palette_device &palette);
void dfeveron_palette(palette_device &palette);
void korokoro_palette(palette_device &palette);
@@ -183,8 +176,6 @@ private:
/* memory pointers */
optional_shared_ptr_array<u16, 4> m_videoregs;
- optional_shared_ptr_array<u16, 4> m_vram;
- optional_shared_ptr_array<u16, 4> m_vctrl;
optional_shared_ptr_array<u16, 4> m_spriteram;
optional_ioport m_io_in0;
@@ -235,10 +226,6 @@ private:
std::unique_ptr<sprite_cave []> m_sprite[4];
sprite_cave *m_sprite_table[4][MAX_PRIORITY][MAX_SPRITE_NUM + 1];
- tilemap_t *m_tilemap[4];
- bool m_tiledim[4];
- bool m_old_tiledim[4];
-
bitmap_ind16 m_sprite_zbuf[4];
u16 m_sprite_zbuf_baseval;
@@ -295,6 +282,7 @@ private:
optional_device_array<gfxdecode_device, 4> m_gfxdecode;
optional_device_array<screen_device, 4> m_screen;
optional_device_array<palette_device, 4> m_palette;
+ optional_device_array<tilemap038_device, 4> m_tilemap;
optional_device<generic_latch_16_device> m_soundlatch;
optional_device<timer_device> m_startup;
output_finder<9> m_led_outputs;
@@ -304,7 +292,7 @@ private:
inline void tilemap_draw(int chip, screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 flags, u32 priority, u32 priority2, int GFX);
void set_pens(int chip);
- void vh_start(int num, u16 sprcol_base, u16 sprcol_granularity);
+ void vh_start(u16 sprcol_base, u16 sprcol_granularity);
void get_sprite_info_cave(int chip);
void get_sprite_info_donpachi(int chip);
void sprite_init();
diff --git a/src/mame/includes/cischeat.h b/src/mame/includes/cischeat.h
index bfbd9d7f94e..3380f8c57f1 100644
--- a/src/mame/includes/cischeat.h
+++ b/src/mame/includes/cischeat.h
@@ -48,13 +48,13 @@ public:
DECLARE_WRITE16_MEMBER(scudhamm_oki_bank_w);
DECLARE_READ16_MEMBER(armchmp2_motor_status_r);
DECLARE_WRITE16_MEMBER(armchmp2_motor_command_w);
- DECLARE_READ16_MEMBER(armchmp2_analog_r);
+ uint8_t armchmp2_analog_r();
DECLARE_READ16_MEMBER(armchmp2_buttons_r);
DECLARE_WRITE16_MEMBER(armchmp2_leds_w);
DECLARE_WRITE16_MEMBER(bigrun_soundbank_w);
DECLARE_READ16_MEMBER(scudhamm_motor_status_r);
DECLARE_READ16_MEMBER(scudhamm_motor_pos_r);
- DECLARE_READ16_MEMBER(scudhamm_analog_r);
+ uint8_t scudhamm_analog_r();
DECLARE_READ16_MEMBER(bigrun_ip_select_r);
DECLARE_WRITE16_MEMBER(leds_out_w);
DECLARE_WRITE16_MEMBER(unknown_out_w);
diff --git a/src/mame/includes/cps1.h b/src/mame/includes/cps1.h
index 5bc48968064..a322d9315bf 100644
--- a/src/mame/includes/cps1.h
+++ b/src/mame/includes/cps1.h
@@ -362,6 +362,7 @@ protected:
int m_stars2y;
int m_last_sprite_offset; /* Offset of the last sprite */
+ bitmap_ind16 m_dummy_bitmap;
/* fcrash sound hw */
int m_sample_buffer1;
diff --git a/src/mame/includes/dday.h b/src/mame/includes/dday.h
index 8f163343ac0..915ef446637 100644
--- a/src/mame/includes/dday.h
+++ b/src/mame/includes/dday.h
@@ -63,7 +63,7 @@ private:
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
- required_device<ay8910_device> m_ay1;
+ required_device<ay8912_device> m_ay1;
DECLARE_READ8_MEMBER(dday_countdown_timer_r);
DECLARE_WRITE8_MEMBER(dday_bgvideoram_w);
diff --git a/src/mame/includes/goldstar.h b/src/mame/includes/goldstar.h
index 07d7e1139ba..95ec5b259ee 100644
--- a/src/mame/includes/goldstar.h
+++ b/src/mame/includes/goldstar.h
@@ -92,6 +92,7 @@ public:
void ladylinr_map(address_map &map);
void lucky8_map(address_map &map);
void common_decrypted_opcodes_map(address_map &map);
+ void super972_decrypted_opcodes_map(address_map &map);
void mbstar_map(address_map &map);
void megaline_portmap(address_map &map);
void ncb3_readwriteport(address_map &map);
@@ -242,6 +243,7 @@ public:
void init_flaming7();
void init_flam7_tw();
void init_luckylad();
+ void init_super972();
DECLARE_VIDEO_START(bingowng);
DECLARE_VIDEO_START(magical);
@@ -257,6 +259,7 @@ public:
void lucky8(machine_config &config);
void lucky8f(machine_config &config);
void lucky8k(machine_config &config);
+ void super972(machine_config &config);
void wcat3(machine_config &config);
void magodds(machine_config &config);
void flam7_w4(machine_config &config);
diff --git a/src/mame/includes/hh_sm510.h b/src/mame/includes/hh_sm510.h
index 67d727e4ca5..707a98f49a4 100644
--- a/src/mame/includes/hh_sm510.h
+++ b/src/mame/includes/hh_sm510.h
@@ -21,10 +21,12 @@ public:
m_maincpu(*this, "maincpu"),
m_speaker(*this, "speaker"),
m_inputs(*this, "IN.%u", 0),
+ m_io_ba(*this, "BA"),
+ m_io_b(*this, "B"),
m_out_x(*this, "%u.%u.%u", 0U, 0U, 0U),
m_inp_lines(0),
m_inp_fixed(-1),
- m_decay_pivot(7),
+ m_decay_pivot(8),
m_decay_len(17)
{ }
@@ -36,6 +38,7 @@ protected:
required_device<sm510_base_device> m_maincpu;
optional_device<speaker_sound_device> m_speaker;
optional_ioport_array<8+1> m_inputs; // max 8
+ optional_ioport m_io_ba, m_io_b;
output_finder<16, 16, 4> m_out_x;
// misc common
@@ -76,17 +79,30 @@ protected:
virtual void machine_start() override;
virtual void machine_reset() override;
- void common_base(machine_config &config, u16 width, u16 height);
- void sm500_base(machine_config &config, u16 width, u16 height);
- void sm510_base(machine_config &config, u16 width, u16 height);
-
- void common_sm511(machine_config &config, u16 width, u16 height);
-
- void konami_sm510(machine_config &config, u16 width, u16 height);
-
- void tiger_sm510_1bit(machine_config &config, u16 width, u16 height);
- void tiger_sm511_1bit(machine_config &config, u16 width, u16 height);
- void tiger_sm511_2bit(machine_config &config, u16 width, u16 height);
+ // machine configs
+ void mcfg_cpu_common(machine_config &config);
+ void mcfg_cpu_sm5a(machine_config &config);
+ void mcfg_cpu_kb1013vk12(machine_config &config);
+ void mcfg_cpu_sm510(machine_config &config);
+ void mcfg_cpu_sm511(machine_config &config);
+ void mcfg_cpu_sm512(machine_config &config);
+ void mcfg_svg_screen(machine_config &config, u16 width, u16 height, const char *tag = "screen");
+ void mcfg_sound_r1(machine_config &config);
+
+ void sm5a_common(machine_config &config, u16 width, u16 height);
+ void kb1013vk12_common(machine_config &config, u16 width, u16 height);
+ void sm510_common(machine_config &config, u16 width, u16 height);
+ void sm511_common(machine_config &config, u16 width, u16 height);
+ //void sm512_common(machine_config &config, u16 width, u16 height);
+
+ void sm510_dualh(machine_config &config, u16 leftwidth, u16 leftheight, u16 rightwidth, u16 rightheight);
+ void dualv_common(machine_config &config, u16 topwidth, u16 topheight, u16 botwidth, u16 botheight);
+ void sm510_dualv(machine_config &config, u16 topwidth, u16 topheight, u16 botwidth, u16 botheight);
+ void sm511_dualv(machine_config &config, u16 topwidth, u16 topheight, u16 botwidth, u16 botheight);
+ void sm512_dualv(machine_config &config, u16 topwidth, u16 topheight, u16 botwidth, u16 botheight);
+ void sm510_tiger(machine_config &config, u16 width, u16 height);
+ void sm511_tiger1bit(machine_config &config, u16 width, u16 height);
+ void sm511_tiger2bit(machine_config &config, u16 width, u16 height);
};
diff --git a/src/mame/includes/lwings.h b/src/mame/includes/lwings.h
index 7139936cfb3..99d27831877 100644
--- a/src/mame/includes/lwings.h
+++ b/src/mame/includes/lwings.h
@@ -25,6 +25,7 @@ public:
m_soundlatch(*this, "soundlatch") { }
void lwings(machine_config &config);
+ void sectionz(machine_config &config);
void trojan(machine_config &config);
void fball(machine_config &config);
void avengers(machine_config &config);
@@ -32,6 +33,11 @@ public:
void init_avengersb();
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+ virtual void video_start() override;
+
private:
/* memory pointers */
required_device<buffered_spriteram8_device> m_spriteram;
@@ -78,9 +84,6 @@ private:
TILE_GET_INFO_MEMBER(lwings_get_bg1_tile_info);
TILE_GET_INFO_MEMBER(trojan_get_bg1_tile_info);
TILE_GET_INFO_MEMBER(get_bg2_tile_info);
- virtual void machine_start() override;
- virtual void machine_reset() override;
- virtual void video_start() override;
DECLARE_VIDEO_START(trojan);
DECLARE_VIDEO_START(avengers);
DECLARE_VIDEO_START(avengersb);
diff --git a/src/mame/includes/mcatadv.h b/src/mame/includes/mcatadv.h
index 4e92fdb7838..1da2ee44144 100644
--- a/src/mame/includes/mcatadv.h
+++ b/src/mame/includes/mcatadv.h
@@ -6,6 +6,7 @@
#pragma once
#include "machine/watchdog.h"
+#include "video/tmap038.h"
#include "emupal.h"
#include "tilemap.h"
@@ -14,8 +15,6 @@ class mcatadv_state : public driver_device
public:
mcatadv_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
- , m_vram(*this, "vram_%u", 1)
- , m_scroll(*this, "scroll%u", 1)
, m_spriteram(*this, "spriteram")
, m_vidregs(*this, "vidregs")
, m_sprdata(*this, "sprdata")
@@ -25,6 +24,7 @@ public:
, m_watchdog(*this, "watchdog")
, m_gfxdecode(*this, "gfxdecode")
, m_palette(*this, "palette")
+ , m_tilemap(*this, "tilemap_%u", 0U)
{ }
void nost(machine_config &config);
@@ -32,18 +32,15 @@ public:
private:
/* memory pointers */
- required_shared_ptr_array<uint16_t, 2> m_vram;
- required_shared_ptr_array<uint16_t, 2> m_scroll;
- required_shared_ptr<uint16_t> m_spriteram;
- std::unique_ptr<uint16_t[]> m_spriteram_old;
- required_shared_ptr<uint16_t> m_vidregs;
- std::unique_ptr<uint16_t[]> m_vidregs_old;
+ required_shared_ptr<u16> m_spriteram;
+ std::unique_ptr<u16[]> m_spriteram_old;
+ required_shared_ptr<u16> m_vidregs;
+ std::unique_ptr<u16[]> m_vidregs_old;
- required_region_ptr<uint8_t> m_sprdata;
+ required_region_ptr<u8> m_sprdata;
required_memory_bank m_soundbank;
/* video-related */
- tilemap_t *m_tilemap[2];
int m_palette_bank[2];
/* devices */
@@ -52,14 +49,14 @@ private:
required_device<watchdog_timer_device> m_watchdog;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ optional_device_array<tilemap038_device, 2> m_tilemap;
- DECLARE_READ16_MEMBER(mcat_wd_r);
- DECLARE_WRITE8_MEMBER(mcatadv_sound_bw_w);
- template<int Chip> DECLARE_WRITE16_MEMBER(vram_w);
- template<int Chip> TILE_GET_INFO_MEMBER(get_mcatadv_tile_info);
+ u16 mcat_wd_r();
+ void mcatadv_sound_bw_w(u8 data);
+ template<int Chip> void get_banked_color(bool tiledim, u32 &color, u32 &pri, u32 &code);
virtual void machine_start() override;
virtual void video_start() override;
- uint32_t screen_update_mcatadv(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ u32 screen_update_mcatadv(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
DECLARE_WRITE_LINE_MEMBER(screen_vblank_mcatadv);
void draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect );
void mcatadv_draw_tilemap_part( screen_device &screen, int layer, int i, bitmap_ind16 &bitmap, const rectangle &cliprect );
diff --git a/src/mame/includes/megasys1.h b/src/mame/includes/megasys1.h
index 9b76bee4025..fd68d179b3b 100644
--- a/src/mame/includes/megasys1.h
+++ b/src/mame/includes/megasys1.h
@@ -14,6 +14,7 @@
#include "machine/gen_latch.h"
#include "machine/timer.h"
+#include "sound/msm5205.h"
#include "sound/okim6295.h"
#include "video/ms1_tmap.h"
#include "emupal.h"
@@ -31,6 +32,7 @@ public:
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_oki(*this, "oki%u", 1U),
+ m_p47b_adpcm(*this, "msm%u", 1U),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_screen(*this, "screen"),
@@ -94,6 +96,7 @@ private:
required_device<cpu_device> m_maincpu;
optional_device<cpu_device> m_audiocpu;
optional_device_array<okim6295_device, 2> m_oki;
+ optional_device_array<msm5205_device, 2> m_p47b_adpcm;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_device<screen_device> m_screen;
@@ -168,6 +171,7 @@ private:
void megasys1_set_vreg_flag(int which, int data);
template<int Chip> DECLARE_READ8_MEMBER(oki_status_r);
DECLARE_WRITE16_MEMBER(ram_w);
+ void p47b_adpcm_w(offs_t offset, u8 data);
DECLARE_MACHINE_RESET(megasys1);
DECLARE_VIDEO_START(megasys1);
@@ -192,6 +196,8 @@ private:
void stdragona_gfx_unmangle(const char *region);
void kickoffb_sound_map(address_map &map);
void p47b_sound_map(address_map &map);
+ void p47b_extracpu_prg_map(address_map &map);
+ void p47b_extracpu_io_map(address_map &map);
void megasys1A_map(address_map &map);
void megasys1A_sound_map(address_map &map);
void megasys1A_jitsupro_sound_map(address_map &map);
diff --git a/src/mame/includes/model2.h b/src/mame/includes/model2.h
index bd8f437a753..dbe87feb7d4 100644
--- a/src/mame/includes/model2.h
+++ b/src/mame/includes/model2.h
@@ -502,6 +502,7 @@ public:
void model2b_0229(machine_config &config);
void model2b_5881(machine_config &config);
void indy500(machine_config &config);
+ void overrev2b(machine_config &config);
void powsled(machine_config &config);
void rchase2(machine_config &config);
void gunblade(machine_config &config);
diff --git a/src/mame/includes/mustache.h b/src/mame/includes/mustache.h
index 25f8d451377..fc55e34dcf6 100644
--- a/src/mame/includes/mustache.h
+++ b/src/mame/includes/mustache.h
@@ -54,7 +54,6 @@ private:
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect );
- TIMER_DEVICE_CALLBACK_MEMBER(scanline);
void decrypted_opcodes_map(address_map &map);
void memmap(address_map &map);
};
diff --git a/src/mame/includes/mw8080bw.h b/src/mame/includes/mw8080bw.h
index 0aa65d4d0f6..c6d71f089cf 100644
--- a/src/mame/includes/mw8080bw.h
+++ b/src/mame/includes/mw8080bw.h
@@ -6,13 +6,17 @@
Midway 8080-based black and white hardware
****************************************************************************/
+#ifndef MAME_INCLUDES_MW8080BW_H
+#define MAME_INCLUDES_MW8080BW_H
+
+#pragma once
+
+#include "audio/mw8080bw.h"
#include "machine/mb14241.h"
#include "machine/timer.h"
#include "machine/watchdog.h"
#include "sound/discrete.h"
-#include "sound/sn76477.h"
-#include "sound/samples.h"
#include "screen.h"
@@ -33,278 +37,356 @@
#define MW8080BW_INT_TRIGGER_VBLANK_2 (1)
#define MW8080BW_60HZ (MW8080BW_PIXEL_CLOCK / MW8080BW_HTOTAL / MW8080BW_VTOTAL)
-/* +4 is added to HBSTART because the hardware displays that many pixels after
- setting HBLANK */
+// +4 is added to HBSTART because the hardware displays that many pixels after setting HBLANK
#define MW8080BW_HPIXCOUNT (MW8080BW_HBSTART + 4)
class mw8080bw_state : public driver_device
{
public:
- mw8080bw_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
+ mw8080bw_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
m_maincpu(*this,"maincpu"),
m_mb14241(*this,"mb14241"),
m_watchdog(*this, "watchdog"),
m_main_ram(*this, "main_ram"),
- m_colorram(*this, "colorram"),
- m_colorram2(*this, "colorram2"),
m_discrete(*this, "discrete"),
- m_samples(*this, "samples"),
- m_samples1(*this, "samples1"),
- m_samples2(*this, "samples2"),
- m_sn1(*this, "sn1"),
- m_sn2(*this, "sn2"),
- m_sn(*this, "snsnd"),
m_screen(*this, "screen")
{ }
void blueshrk(machine_config &config);
- void blueshrk_audio(machine_config &config);
- void boothill(machine_config &config);
- void boothill_audio(machine_config &config);
void bowler(machine_config &config);
- void bowler_audio(machine_config &config);
void checkmat(machine_config &config);
- void checkmat_audio(machine_config &config);
- void clowns(machine_config &config);
- void clowns_audio(machine_config &config);
- void desertgu(machine_config &config);
- void desertgu_audio(machine_config &config);
void dogpatch(machine_config &config);
- void dogpatch_audio(machine_config &config);
- void dplay(machine_config &config);
- void dplay_audio(machine_config &config);
- void gmissile(machine_config &config);
- void gmissile_audio(machine_config &config);
- void gunfight(machine_config &config);
- void gunfight_audio(machine_config &config);
void invad2ct(machine_config &config);
- void invad2ct_audio(machine_config &config);
void invaders(machine_config &config);
- void invaders_audio(machine_config &config);
- void invaders_samples_audio(machine_config &config);
- void m4(machine_config &config);
- void m4_audio(machine_config &config);
void maze(machine_config &config);
- void maze_audio(machine_config &config);
void mw8080bw_root(machine_config &config);
void phantom2(machine_config &config);
- void phantom2_audio(machine_config &config);
- void seawolf(machine_config &config);
- void seawolf_audio(machine_config &config);
void shuffle(machine_config &config);
- void shuffle_audio(machine_config &config);
- void spacwalk(machine_config &config);
- void spacwalk_audio(machine_config &config);
- void spcenctr(machine_config &config);
- void spcenctr_audio(machine_config &config);
void tornbase(machine_config &config);
- void tornbase_audio(machine_config &config);
void zzzap(machine_config &config);
- void zzzap_audio(machine_config &config);
+ DECLARE_INPUT_CHANGED_MEMBER(direct_coin_count);
- DECLARE_CUSTOM_INPUT_MEMBER(seawolf_erase_input_r);
DECLARE_CUSTOM_INPUT_MEMBER(tornbase_hit_left_input_r);
DECLARE_CUSTOM_INPUT_MEMBER(tornbase_hit_right_input_r);
DECLARE_CUSTOM_INPUT_MEMBER(tornbase_pitch_left_input_r);
DECLARE_CUSTOM_INPUT_MEMBER(tornbase_pitch_right_input_r);
DECLARE_CUSTOM_INPUT_MEMBER(tornbase_score_input_r);
- DECLARE_CUSTOM_INPUT_MEMBER(desertgu_gun_input_r);
- DECLARE_CUSTOM_INPUT_MEMBER(desertgu_dip_sw_0_1_r);
- DECLARE_CUSTOM_INPUT_MEMBER(dplay_pitch_left_input_r);
- DECLARE_CUSTOM_INPUT_MEMBER(dplay_pitch_right_input_r);
- DECLARE_CUSTOM_INPUT_MEMBER(clowns_controller_r);
- DECLARE_CUSTOM_INPUT_MEMBER(invaders_coin_input_r);
+ DECLARE_CUSTOM_INPUT_MEMBER(blueshrk_coin_input_r);
+
DECLARE_CUSTOM_INPUT_MEMBER(invaders_sw6_sw7_r);
DECLARE_CUSTOM_INPUT_MEMBER(invaders_sw5_r);
- DECLARE_CUSTOM_INPUT_MEMBER(blueshrk_coin_input_r);
DECLARE_CUSTOM_INPUT_MEMBER(invaders_in0_control_r);
DECLARE_CUSTOM_INPUT_MEMBER(invaders_in1_control_r);
DECLARE_CUSTOM_INPUT_MEMBER(invaders_in2_control_r);
- DECLARE_MACHINE_START(mw8080bw);
DECLARE_MACHINE_RESET(mw8080bw);
IRQ_CALLBACK_MEMBER(interrupt_vector);
protected:
+ virtual void machine_start() override;
+
+ u8 mw8080bw_shift_result_rev_r();
+
+ int invaders_is_cabinet_cocktail();
+
+ uint32_t screen_update_invaders(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ uint32_t screen_update_mw8080bw(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
- /* device/memory pointers */
+ // device/memory pointers
required_device<cpu_device> m_maincpu;
optional_device<mb14241_device> m_mb14241;
optional_device<watchdog_timer_device> m_watchdog;
required_shared_ptr<uint8_t> m_main_ram;
- optional_shared_ptr<uint8_t> m_colorram;
- optional_shared_ptr<uint8_t> m_colorram2;
optional_device<discrete_sound_device> m_discrete;
-
- /* other devices */
- optional_device<samples_device> m_samples;
- optional_device<samples_device> m_samples1;
- optional_device<samples_device> m_samples2;
- optional_device<sn76477_device> m_sn1;
- optional_device<sn76477_device> m_sn2;
- optional_device<sn76477_device> m_sn;
required_device<screen_device> m_screen;
- /* sound-related */
- uint8_t m_port_1_last;
- uint8_t m_port_2_last;
- uint8_t m_port_1_last_extra;
- uint8_t m_port_2_last_extra;
- uint8_t m_port_3_last_extra;
-
- /* misc game specific */
+ // misc game specific
uint8_t m_flip_screen;
- DECLARE_WRITE8_MEMBER(invaders_audio_1_w);
- DECLARE_WRITE8_MEMBER(invaders_audio_2_w);
-
- std::unique_ptr<uint8_t[]> m_scattered_colorram;
- std::unique_ptr<uint8_t[]> m_scattered_colorram2;
-
- uint32_t screen_update_invaders(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
- uint32_t screen_update_mw8080bw(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
-
private:
- /* misc game specific */
+ // misc game specific
uint16_t m_phantom2_cloud_counter;
- uint8_t m_rev_shift_res;
- uint8_t m_maze_tone_timing_state; /* output of IC C1, pin 5 */
- uint8_t m_desertgun_controller_select;
- uint8_t m_clowns_controller_select;
-
- uint8_t m_spcenctr_strobe_state;
- uint8_t m_spcenctr_trench_width;
- uint8_t m_spcenctr_trench_center;
- uint8_t m_spcenctr_trench_slope[16]; /* 16x4 bit RAM */
- uint8_t m_spcenctr_bright_control;
- uint8_t m_spcenctr_brightness;
-
- /* timers */
+ uint8_t m_maze_tone_timing_state; // output of IC C1, pin 5
+
+ // timers
emu_timer *m_interrupt_timer;
emu_timer *m_maze_tone_timer;
attotime m_interrupt_time;
- DECLARE_READ8_MEMBER(mw8080bw_shift_result_rev_r);
- DECLARE_READ8_MEMBER(mw8080bw_reversable_shift_result_r);
- DECLARE_WRITE8_MEMBER(mw8080bw_reversable_shift_count_w);
- DECLARE_WRITE8_MEMBER(seawolf_explosion_lamp_w);
- DECLARE_WRITE8_MEMBER(seawolf_periscope_lamp_w);
- DECLARE_WRITE8_MEMBER(gunfight_io_w);
DECLARE_WRITE8_MEMBER(tornbase_io_w);
DECLARE_WRITE8_MEMBER(maze_coin_counter_w);
DECLARE_WRITE8_MEMBER(maze_io_w);
DECLARE_WRITE8_MEMBER(checkmat_io_w);
- DECLARE_WRITE8_MEMBER(spcenctr_io_w);
DECLARE_READ8_MEMBER(bowler_shift_result_r);
DECLARE_WRITE8_MEMBER(bowler_lights_1_w);
DECLARE_WRITE8_MEMBER(bowler_lights_2_w);
- DECLARE_WRITE8_MEMBER(seawolf_audio_w);
- DECLARE_WRITE8_MEMBER(gunfight_audio_w);
DECLARE_WRITE8_MEMBER(zzzap_audio_1_w);
DECLARE_WRITE8_MEMBER(zzzap_audio_2_w);
- DECLARE_WRITE8_MEMBER(gmissile_audio_1_w);
- DECLARE_WRITE8_MEMBER(gmissile_audio_2_w);
- DECLARE_WRITE8_MEMBER(gmissile_audio_3_w);
- DECLARE_WRITE8_MEMBER(m4_audio_1_w);
- DECLARE_WRITE8_MEMBER(m4_audio_2_w);
- DECLARE_WRITE8_MEMBER(clowns_audio_1_w);
- DECLARE_WRITE8_MEMBER(phantom2_audio_1_w);
- DECLARE_WRITE8_MEMBER(phantom2_audio_2_w);
DECLARE_WRITE8_MEMBER(bowler_audio_2_w);
DECLARE_WRITE8_MEMBER(bowler_audio_3_w);
DECLARE_WRITE8_MEMBER(bowler_audio_4_w);
DECLARE_WRITE8_MEMBER(bowler_audio_5_w);
DECLARE_WRITE8_MEMBER(bowler_audio_6_w);
DECLARE_MACHINE_START(maze);
- DECLARE_MACHINE_START(boothill);
- DECLARE_MACHINE_START(desertgu);
- DECLARE_MACHINE_START(gmissile);
- DECLARE_MACHINE_START(m4);
- DECLARE_MACHINE_START(clowns);
- DECLARE_MACHINE_START(spcenctr);
DECLARE_MACHINE_START(phantom2);
DECLARE_MACHINE_START(invaders);
- DECLARE_SOUND_START(samples);
- uint32_t screen_update_spcenctr(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
uint32_t screen_update_phantom2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
DECLARE_WRITE_LINE_MEMBER(screen_vblank_phantom2);
TIMER_CALLBACK_MEMBER(maze_tone_timing_timer_callback);
TIMER_CALLBACK_MEMBER(interrupt_trigger);
- TIMER_DEVICE_CALLBACK_MEMBER(spcenctr_strobe_timer_callback);
- DECLARE_WRITE8_MEMBER(midway_tone_generator_lo_w);
- DECLARE_WRITE8_MEMBER(midway_tone_generator_hi_w);
DECLARE_WRITE8_MEMBER(tornbase_audio_w);
- DECLARE_WRITE8_MEMBER(boothill_audio_w);
DECLARE_WRITE8_MEMBER(checkmat_audio_w);
- DECLARE_WRITE8_MEMBER(desertgu_audio_1_w);
- DECLARE_WRITE8_MEMBER(desertgu_audio_2_w);
- DECLARE_WRITE8_MEMBER(dplay_audio_w);
- DECLARE_WRITE8_MEMBER(clowns_audio_2_w);
- DECLARE_WRITE8_MEMBER(spacwalk_audio_1_w);
- DECLARE_WRITE8_MEMBER(spacwalk_audio_2_w);
DECLARE_WRITE8_MEMBER(shuffle_audio_1_w);
DECLARE_WRITE8_MEMBER(shuffle_audio_2_w);
- DECLARE_WRITE8_MEMBER(dogpatch_audio_w);
- DECLARE_WRITE8_MEMBER(spcenctr_audio_1_w);
- DECLARE_WRITE8_MEMBER(spcenctr_audio_2_w);
- DECLARE_WRITE8_MEMBER(spcenctr_audio_3_w);
DECLARE_WRITE8_MEMBER(bowler_audio_1_w);
DECLARE_WRITE8_MEMBER(blueshrk_audio_w);
- DECLARE_WRITE8_MEMBER(invad2ct_audio_1_w);
- DECLARE_WRITE8_MEMBER(invad2ct_audio_2_w);
- DECLARE_WRITE8_MEMBER(invad2ct_audio_3_w);
- DECLARE_WRITE8_MEMBER(invad2ct_audio_4_w);
void maze_update_discrete();
void maze_write_discrete(uint8_t maze_tone_timing_state);
- uint8_t vpos_to_vysnc_chain_counter( int vpos );
- int vysnc_chain_counter_to_vpos( uint8_t counter, int vblank );
- void mw8080bw_create_interrupt_timer( );
- void mw8080bw_start_interrupt_timer( );
+ uint8_t vpos_to_vysnc_chain_counter(int vpos);
+ int vysnc_chain_counter_to_vpos(uint8_t counter, int vblank);
+ void mw8080bw_create_interrupt_timer();
+ void mw8080bw_start_interrupt_timer();
uint8_t tornbase_get_cabinet_type();
- int invaders_is_cabinet_cocktail();
+
+ void blueshrk_audio(machine_config &config);
+ void bowler_audio(machine_config &config);
+ void checkmat_audio(machine_config &config);
+ void maze_audio(machine_config &config);
+ void shuffle_audio(machine_config &config);
+ void tornbase_audio(machine_config &config);
+ void zzzap_audio(machine_config &config);
+
void blueshrk_io_map(address_map &map);
- void boothill_io_map(address_map &map);
void bowler_io_map(address_map &map);
void checkmat_io_map(address_map &map);
- void clowns_io_map(address_map &map);
- void desertgu_io_map(address_map &map);
void dogpatch_io_map(address_map &map);
- void dplay_io_map(address_map &map);
- void gmissile_io_map(address_map &map);
- void gunfight_io_map(address_map &map);
void invad2ct_io_map(address_map &map);
void invaders_io_map(address_map &map);
- void m4_io_map(address_map &map);
void main_map(address_map &map);
void maze_io_map(address_map &map);
void phantom2_io_map(address_map &map);
- void seawolf_io_map(address_map &map);
void shuffle_io_map(address_map &map);
- void spacwalk_io_map(address_map &map);
- void spcenctr_io_map(address_map &map);
void tornbase_io_map(address_map &map);
void zzzap_io_map(address_map &map);
};
-#define SEAWOLF_GUN_PORT_TAG ("GUN")
+#define SEAWOLF_ERASE_SW_PORT_TAG ("ERASESW")
+#define SEAWOLF_ERASE_DIP_PORT_TAG ("ERASEDIP")
+
+class seawolf_state : public mw8080bw_state
+{
+public:
+ seawolf_state(machine_config const &mconfig, device_type type, char const *tag) :
+ mw8080bw_state(mconfig, type, tag),
+ m_erase_sw(*this, SEAWOLF_ERASE_SW_PORT_TAG),
+ m_erase_dip(*this, SEAWOLF_ERASE_DIP_PORT_TAG),
+ m_exp_lamps(*this, "EXP_LAMP_%X", 0U),
+ m_torp_lamps(*this, "TORP_LAMP_%u", 1U),
+ m_ready_lamp(*this, "READY_LAMP"),
+ m_reload_lamp(*this, "RELOAD_LAMP")
+ {
+ }
+
+ void seawolf(machine_config &config);
+
+ DECLARE_CUSTOM_INPUT_MEMBER(erase_input_r);
+
+protected:
+ virtual void machine_start() override;
+
+private:
+ void explosion_lamp_w(u8 data);
+ void periscope_lamp_w(u8 data);
+
+ void io_map(address_map &map);
+
+ required_ioport m_erase_sw;
+ required_ioport m_erase_dip;
+ output_finder<16> m_exp_lamps;
+ output_finder<4> m_torp_lamps;
+ output_finder<> m_ready_lamp;
+ output_finder<> m_reload_lamp;
+};
+
+
+class gunfight_state : public mw8080bw_state
+{
+public:
+ gunfight_state(machine_config const &mconfig, device_type type, char const *tag) :
+ mw8080bw_state(mconfig, type, tag),
+ m_soundboard(*this, "soundboard")
+ {
+ }
+
+ void gunfight(machine_config &config);
+
+private:
+ void io_w(offs_t offset, u8 data);
+
+ void io_map(address_map &map);
+
+ required_device<gunfight_audio_device> m_soundboard;
+};
+
+
+class boothill_state : public mw8080bw_state
+{
+public:
+ boothill_state(machine_config const &mconfig, device_type type, char const *tag) :
+ mw8080bw_state(mconfig, type, tag)
+ {
+ }
+
+ void boothill(machine_config &config);
+ void gmissile(machine_config &config);
+ void m4(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+
+private:
+ u8 reversible_shift_result_r();
+ void reversible_shift_count_w(u8 data);
+
+ void boothill_io_map(address_map &map);
+ void gmissile_io_map(address_map &map);
+ void m4_io_map(address_map &map);
+
+ u8 m_rev_shift_res;
+};
-#define TORNBASE_CAB_TYPE_UPRIGHT_OLD (0)
-#define TORNBASE_CAB_TYPE_UPRIGHT_NEW (1)
-#define TORNBASE_CAB_TYPE_COCKTAIL (2)
#define DESERTGU_GUN_X_PORT_TAG ("GUNX")
#define DESERTGU_GUN_Y_PORT_TAG ("GUNY")
+#define DESERTGU_DIP_SW_0_1_SET_1_TAG ("DIPSW01SET1")
+#define DESERTGU_DIP_SW_0_1_SET_2_TAG ("DIPSW01SET2")
+
+class desertgu_state : public mw8080bw_state
+{
+public:
+ desertgu_state(machine_config const &mconfig, device_type type, char const *tag) :
+ mw8080bw_state(mconfig, type, tag),
+ m_gun_port(*this, { DESERTGU_GUN_Y_PORT_TAG, DESERTGU_GUN_X_PORT_TAG }),
+ m_dip_sw_0_1(*this, { DESERTGU_DIP_SW_0_1_SET_1_TAG, DESERTGU_DIP_SW_0_1_SET_2_TAG })
+ {
+ }
+
+ void desertgu(machine_config &config);
+
+ DECLARE_CUSTOM_INPUT_MEMBER(gun_input_r);
+ DECLARE_CUSTOM_INPUT_MEMBER(dip_sw_0_1_r);
+
+protected:
+ virtual void machine_start() override;
+
+private:
+ void io_map(address_map &map);
+
+ required_ioport_array<2> m_gun_port;
+ required_ioport_array<2> m_dip_sw_0_1;
+ u8 m_controller_select;
+};
+
+
+#define DPLAY_L_PITCH_PORT_TAG ("LPITCH")
+#define DPLAY_R_PITCH_PORT_TAG ("RPITCH")
+#define DPLAY_CAB_TYPE_PORT_TAG ("CAB")
+
+class dplay_state : public mw8080bw_state
+{
+public:
+ dplay_state(machine_config const &mconfig, device_type type, char const *tag) :
+ mw8080bw_state(mconfig, type, tag),
+ m_l_pitch(*this, DPLAY_L_PITCH_PORT_TAG),
+ m_r_pitch(*this, DPLAY_L_PITCH_PORT_TAG),
+ m_cab_type(*this, DPLAY_CAB_TYPE_PORT_TAG)
+ {
+ }
+
+ void dplay(machine_config &config);
+
+ DECLARE_CUSTOM_INPUT_MEMBER(dplay_pitch_left_input_r);
+ DECLARE_CUSTOM_INPUT_MEMBER(dplay_pitch_right_input_r);
+
+private:
+ void io_map(address_map &map);
+
+ required_ioport m_l_pitch;
+ required_ioport m_r_pitch;
+ required_ioport m_cab_type;
+};
+
+
+class clowns_state : public mw8080bw_state
+{
+public:
+ clowns_state(machine_config const &mconfig, device_type type, char const *tag) :
+ mw8080bw_state(mconfig, type, tag),
+ m_controllers(*this, "CONTP%u", 1U)
+ {
+ }
+
+ void clowns(machine_config &config);
+ void spacwalk(machine_config &config);
+
+ DECLARE_CUSTOM_INPUT_MEMBER(controller_r);
+
+protected:
+ virtual void machine_start() override;
+
+private:
+ void clowns_io_map(address_map &map);
+ void spacwalk_io_map(address_map &map);
+
+ required_ioport_array<2> m_controllers;
+ u8 m_controller_select;
+};
+
+
+class spcenctr_state : public mw8080bw_state
+{
+public:
+ spcenctr_state(machine_config const &mconfig, device_type type, char const *tag) :
+ mw8080bw_state(mconfig, type, tag),
+ m_soundboard(*this, "soundboard")
+ {
+ }
+
+ void spcenctr(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+
+private:
+ void io_w(offs_t offset, u8 data);
+
+ u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, rectangle const &cliprect);
+
+ void io_map(address_map &map);
+
+ required_device<spcenctr_audio_device> m_soundboard;
+ u8 m_trench_width;
+ u8 m_trench_center;
+ u8 m_trench_slope[16]; // 16x4 bit RAM
+ u8 m_bright_control;
+ u8 m_brightness;
+};
+
+
+#define TORNBASE_CAB_TYPE_UPRIGHT_OLD (0)
+#define TORNBASE_CAB_TYPE_UPRIGHT_NEW (1)
+#define TORNBASE_CAB_TYPE_COCKTAIL (2)
+
#define INVADERS_CAB_TYPE_PORT_TAG ("CAB")
#define INVADERS_P1_CONTROL_PORT_TAG ("CONTP1")
#define INVADERS_P2_CONTROL_PORT_TAG ("CONTP2")
-#define INVADERS_COIN_INPUT_PORT_TAG ("COIN")
#define INVADERS_SW6_SW7_PORT_TAG ("SW6SW7")
#define INVADERS_SW5_PORT_TAG ("SW5")
@@ -334,3 +416,4 @@ private:
extern const internal_layout layout_invaders;
+#endif // MAME_INCLUDES_MW8080BW_H
diff --git a/src/mame/includes/nemesis.h b/src/mame/includes/nemesis.h
index 3a6ee6fe785..7abce049384 100644
--- a/src/mame/includes/nemesis.h
+++ b/src/mame/includes/nemesis.h
@@ -94,7 +94,7 @@ private:
int m_irq1_on;
int m_irq2_on;
int m_irq4_on;
- uint16_t m_selected_ip; /* Copied from WEC Le Mans 24 driver, explicity needed for Hyper Crash */
+ uint8_t m_selected_ip; // needed for Hyper Crash
int m_gx400_irq1_cnt;
uint8_t m_frame_counter;
uint16_t m_scanline_counter;
@@ -124,8 +124,8 @@ private:
DECLARE_READ16_MEMBER(gx400_sharedram_word_r);
DECLARE_WRITE16_MEMBER(gx400_sharedram_word_w);
DECLARE_READ16_MEMBER(konamigt_input_word_r);
- DECLARE_WRITE16_MEMBER(selected_ip_word_w);
- DECLARE_READ16_MEMBER(selected_ip_word_r);
+ void selected_ip_w(uint8_t data);
+ uint8_t selected_ip_r();
DECLARE_WRITE16_MEMBER(bubsys_mcu_w);
DECLARE_READ8_MEMBER(wd_r);
DECLARE_WRITE_LINE_MEMBER(gfx_flipx_w);
diff --git a/src/mame/includes/pasopia.h b/src/mame/includes/pasopia.h
deleted file mode 100644
index 2fdd22986c8..00000000000
--- a/src/mame/includes/pasopia.h
+++ /dev/null
@@ -1,137 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Angelo Salese
-#define PASOPIA_KEYBOARD \
- PORT_START("KEY.0") \
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_SHIFT_2) \
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) \
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CAPS LOCK") PORT_CODE(KEYCODE_CAPSLOCK) \
- PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) \
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
- PORT_DIPSETTING( 0x08, DEF_STR( On ) ) \
- PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) \
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
- PORT_DIPSETTING( 0x10, DEF_STR( On ) ) \
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("KANA LOCK") \
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) \
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
- PORT_DIPSETTING( 0x40, DEF_STR( On ) ) \
- PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) \
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
- PORT_DIPSETTING( 0x80, DEF_STR( On ) ) \
- PORT_START("KEY.1") \
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD) \
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) \
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) \
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD) \
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD) \
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD) \
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD) \
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD) \
- PORT_START("KEY.2") \
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD) \
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD) \
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) \
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN) PORT_NAME("Down") \
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_UP) PORT_NAME("Up") \
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_HOME) PORT_NAME("Home") \
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL_PAD) \
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) \
- PORT_START("KEY.3") \
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("RIGHT") \
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Status?") \
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("BACKSPACE") PORT_CHAR(8) \
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR(9) \
- PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) \
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
- PORT_DIPSETTING( 0x10, DEF_STR( On ) ) \
- PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) \
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
- PORT_DIPSETTING( 0x20, DEF_STR( On ) ) \
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) \
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
- PORT_DIPSETTING( 0x40, DEF_STR( On ) ) \
- PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) \
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
- PORT_DIPSETTING( 0x80, DEF_STR( On ) ) \
- PORT_START("KEY.4") \
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_END) PORT_NAME("StatusLine") \
- PORT_DIPNAME( 0x02, 0x00, "4" ) \
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
- PORT_DIPSETTING( 0x02, DEF_STR( On ) ) \
- PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) \
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
- PORT_DIPSETTING( 0x04, DEF_STR( On ) ) \
- PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) \
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
- PORT_DIPSETTING( 0x08, DEF_STR( On ) ) \
- PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) \
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
- PORT_DIPSETTING( 0x10, DEF_STR( On ) ) \
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("LEFT") \
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) \
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
- PORT_DIPSETTING( 0x40, DEF_STR( On ) ) \
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_NAME("SPACE") PORT_CHAR(' ') \
- PORT_START("KEY.5") \
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_NAME("F1") \
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F2) PORT_NAME("F2") \
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F3) PORT_NAME("F3") \
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F4) PORT_NAME("F4") \
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F5) PORT_NAME("F5") \
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F6) PORT_NAME("F6") \
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F7) PORT_NAME("F7") \
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F8) PORT_NAME("F8") \
- PORT_START("KEY.6") \
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_NAME("1") PORT_CHAR('1') PORT_CHAR('!') \
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_NAME("0") PORT_CHAR('0') PORT_CHAR('0') \
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_NAME("4") PORT_CHAR('4') PORT_CHAR('$') \
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_NAME("R") PORT_CHAR('R') PORT_CHAR('r') \
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_NAME("Y") PORT_CHAR('Y') PORT_CHAR('y') \
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("_") PORT_CHAR('_') \
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_NAME("^") \
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Yen") \
- PORT_START("KEY.7") \
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_NAME("2") PORT_CHAR('2') PORT_CHAR('"') \
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_NAME("3") PORT_CHAR('3') PORT_CHAR('#') \
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_NAME("8") PORT_CHAR('8') PORT_CHAR('(') \
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_NAME("T") PORT_CHAR('T') PORT_CHAR('t') \
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_NAME("U") PORT_CHAR('U') PORT_CHAR('u') \
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_NAME("7") PORT_CHAR('7') PORT_CHAR('\'') \
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_NAME("@") PORT_CHAR('@') \
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("[ {") PORT_CHAR('[') PORT_CHAR('{') \
- PORT_START("KEY.8") \
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_NAME("-") PORT_CHAR('-') PORT_CHAR('=') \
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_NAME("5") PORT_CHAR('5') PORT_CHAR('%') \
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_NAME("6") PORT_CHAR('6') PORT_CHAR('&') \
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_NAME("F") PORT_CHAR('F') PORT_CHAR('f') \
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_NAME("H") PORT_CHAR('H') PORT_CHAR('h') \
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_NAME("9") PORT_CHAR('9') PORT_CHAR(')') \
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_NAME(": *") PORT_CHAR(':') PORT_CHAR('*') \
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME("] }") PORT_CHAR(']') PORT_CHAR('}') \
- PORT_START("KEY.9") \
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_NAME("Q") PORT_CHAR('Q') PORT_CHAR('q') \
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_NAME("W") PORT_CHAR('W') PORT_CHAR('w') \
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_NAME("E") PORT_CHAR('E') PORT_CHAR('e') \
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_NAME("G") PORT_CHAR('G') PORT_CHAR('g') \
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_NAME("J") PORT_CHAR('J') PORT_CHAR('j') \
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_NAME("I") PORT_CHAR('I') PORT_CHAR('i') \
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_NAME("O") PORT_CHAR('O') PORT_CHAR('o') \
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_NAME("P") PORT_CHAR('P') PORT_CHAR('p') \
- PORT_START("KEY.10") \
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_NAME("A") PORT_CHAR('A') PORT_CHAR('a') \
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_NAME("S") PORT_CHAR('S') PORT_CHAR('s') \
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_NAME("D") PORT_CHAR('D') PORT_CHAR('d') \
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_NAME("V") PORT_CHAR('V') PORT_CHAR('v') \
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_NAME("N") PORT_CHAR('N') PORT_CHAR('n') \
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_NAME("K") PORT_CHAR('K') PORT_CHAR('k') \
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_NAME("L") PORT_CHAR('L') PORT_CHAR('l') \
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_NAME("; +") PORT_CHAR(';') PORT_CHAR('+') \
- PORT_START("KEY.11") \
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_NAME("Z") PORT_CHAR('Z') PORT_CHAR('z') \
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_NAME("X") PORT_CHAR('X') PORT_CHAR('x') \
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_NAME("C") PORT_CHAR('C') PORT_CHAR('c') \
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_NAME("B") PORT_CHAR('B') PORT_CHAR('b') \
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_NAME("M") PORT_CHAR('M') PORT_CHAR('m') \
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_NAME(", <") PORT_CHAR(',') PORT_CHAR('<') \
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_NAME(". >") PORT_CHAR('.') PORT_CHAR('>') \
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_NAME("/ ?") PORT_CHAR('/') PORT_CHAR('?')
diff --git a/src/mame/includes/polepos.h b/src/mame/includes/polepos.h
index af7dde9f267..644bcc19962 100644
--- a/src/mame/includes/polepos.h
+++ b/src/mame/includes/polepos.h
@@ -11,6 +11,7 @@
#pragma once
#include "machine/74259.h"
+#include "machine/adc0804.h"
#include "machine/gen_latch.h"
#include "machine/timer.h"
#include "sound/namco.h"
@@ -31,6 +32,7 @@ public:
m_soundlatch(*this, "soundlatch"),
m_namco_sound(*this, "namco"),
m_latch(*this, "latch"),
+ m_adc(*this, "adc"),
m_sprite16_memory(*this, "sprite16_memory"),
m_road16_memory(*this, "road16_memory"),
m_alpha16_memory(*this, "alpha16_memory"),
@@ -61,6 +63,7 @@ private:
optional_device<generic_latch_8_device> m_soundlatch;
optional_device<namco_device> m_namco_sound;
required_device<ls259_device> m_latch;
+ required_device<adc0804_device> m_adc;
required_shared_ptr<uint16_t> m_sprite16_memory;
required_shared_ptr<uint16_t> m_road16_memory;
required_shared_ptr<uint16_t> m_alpha16_memory;
@@ -87,7 +90,7 @@ private:
uint8_t m_sub_irq_mask;
DECLARE_READ16_MEMBER(polepos2_ic25_r);
- DECLARE_READ8_MEMBER(adc_r);
+ uint8_t analog_r();
DECLARE_READ8_MEMBER(ready_r);
DECLARE_WRITE_LINE_MEMBER(iosel_w);
DECLARE_WRITE_LINE_MEMBER(gasel_w);
diff --git a/src/mame/includes/qix.h b/src/mame/includes/qix.h
index 3e01ce0af62..50dc529eee9 100644
--- a/src/mame/includes/qix.h
+++ b/src/mame/includes/qix.h
@@ -167,7 +167,6 @@ public:
protected:
virtual void machine_start() override;
- virtual void machine_reset() override;
private:
DECLARE_READ8_MEMBER(coin_r);
@@ -190,7 +189,8 @@ class zookeep_state : public qixmcu_state
{
public:
zookeep_state(const machine_config &mconfig, device_type type, const char *tag) :
- qixmcu_state(mconfig, type, tag)
+ qixmcu_state(mconfig, type, tag),
+ m_vidbank(*this, "bank1")
{ }
void zookeep(machine_config &config);
@@ -204,6 +204,8 @@ private:
void main_map(address_map &map);
void video_map(address_map &map);
+
+ required_memory_bank m_vidbank;
};
#endif // MAME_INCLUDES_QIX_H
diff --git a/src/mame/includes/segahang.h b/src/mame/includes/segahang.h
index 8c47ddccb1b..134e8dbec89 100644
--- a/src/mame/includes/segahang.h
+++ b/src/mame/includes/segahang.h
@@ -9,6 +9,7 @@
#include "cpu/m68000/m68000.h"
#include "cpu/mcs51/mcs51.h"
#include "cpu/z80/z80.h"
+#include "machine/adc0804.h"
#include "machine/i8255.h"
#include "machine/gen_latch.h"
#include "machine/segaic16.h"
@@ -31,6 +32,7 @@ public:
, m_mcu(*this, "mcu")
, m_i8255_1(*this, "i8255_1")
, m_i8255_2(*this, "i8255_2")
+ , m_adc(*this, "adc")
, m_sprites(*this, "sprites")
, m_segaic16vid(*this, "segaic16vid")
, m_segaic16road(*this, "segaic16road")
@@ -38,7 +40,7 @@ public:
, m_workram(*this, "workram")
, m_sharrier_video(false)
, m_adc_select(0)
- , m_adc_ports(*this, {"ADC0", "ADC1", "ADC2", "ADC3"})
+ , m_adc_ports(*this, "ADC%u", 0U)
, m_decrypted_opcodes(*this, "decrypted_opcodes")
, m_lamps(*this, "lamp%u", 0U)
{ }
@@ -82,6 +84,9 @@ private:
DECLARE_READ16_MEMBER( sharrier_io_r );
DECLARE_WRITE16_MEMBER( sharrier_io_w );
+ // ADC0804 read handler
+ uint8_t analog_r();
+
// Z80 sound CPU read/write handlers
DECLARE_READ8_MEMBER( sound_data_r );
@@ -129,6 +134,7 @@ private:
optional_device<i8751_device> m_mcu;
required_device<i8255_device> m_i8255_1;
required_device<i8255_device> m_i8255_2;
+ required_device<adc0804_device> m_adc;
required_device<sega_16bit_sprite_device> m_sprites;
required_device<segaic16_video_device> m_segaic16vid;
required_device<segaic16_road_device> m_segaic16road;
diff --git a/src/mame/includes/segaorun.h b/src/mame/includes/segaorun.h
index 03d21d99cc0..d2cc1c9146e 100644
--- a/src/mame/includes/segaorun.h
+++ b/src/mame/includes/segaorun.h
@@ -8,6 +8,7 @@
#include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h"
+#include "machine/adc0804.h"
#include "machine/i8255.h"
#include "machine/nvram.h"
#include "machine/segaic16.h"
@@ -31,6 +32,7 @@ public:
m_subcpu(*this, "subcpu"),
m_soundcpu(*this, "soundcpu"),
m_i8255(*this, "i8255"),
+ m_adc(*this, "adc"),
m_nvram(*this, "nvram"),
m_watchdog(*this, "watchdog"),
m_sprites(*this, "sprites"),
@@ -124,6 +126,7 @@ protected:
DECLARE_WRITE16_MEMBER( outrun_custom_io_w );
DECLARE_READ16_MEMBER( shangon_custom_io_r );
DECLARE_WRITE16_MEMBER( shangon_custom_io_w );
+ uint8_t analog_r();
// devices
required_device<sega_315_5195_mapper_device> m_mapper;
@@ -131,6 +134,7 @@ protected:
required_device<m68000_device> m_subcpu;
required_device<z80_device> m_soundcpu;
required_device<i8255_device> m_i8255;
+ required_device<adc0804_device> m_adc;
optional_device<nvram_device> m_nvram;
required_device<watchdog_timer_device> m_watchdog;
required_device<sega_16bit_sprite_device> m_sprites;
diff --git a/src/mame/includes/segas16a.h b/src/mame/includes/segas16a.h
index 9862f1cc662..638d119d035 100644
--- a/src/mame/includes/segas16a.h
+++ b/src/mame/includes/segas16a.h
@@ -72,7 +72,6 @@ public:
// game-specific driver init
void init_generic();
void init_dumpmtmt();
- void init_quartet();
void init_fantzonep();
void init_sjryukoa();
void init_aceattaca();
@@ -140,7 +139,6 @@ private:
// I8751 simulations
void dumpmtmt_i8751_sim();
- void quartet_i8751_sim();
// custom I/O handlers
DECLARE_READ16_MEMBER( aceattaca_custom_io_r );
diff --git a/src/mame/includes/segas16b.h b/src/mame/includes/segas16b.h
index f709f332871..16fe92e61ca 100644
--- a/src/mame/includes/segas16b.h
+++ b/src/mame/includes/segas16b.h
@@ -111,7 +111,6 @@ public:
void init_sdi_5358_small();
void init_fpointbla();
void init_altbeasj_5521();
- void init_ddux_5704();
void init_snapper();
void init_shinobi4_5521();
void init_defense_5358_small();
@@ -226,7 +225,6 @@ protected:
// i8751 simulations
void altbeast_common_i8751_sim(offs_t soundoffs, offs_t inputoffs, int alt_bank);
void altbeasj_i8751_sim();
- void ddux_i8751_sim();
void tturf_i8751_sim();
void wb3_i8751_sim();
diff --git a/src/mame/includes/segas32.h b/src/mame/includes/segas32.h
index a37e2f47414..5b99f191b74 100644
--- a/src/mame/includes/segas32.h
+++ b/src/mame/includes/segas32.h
@@ -25,30 +25,30 @@ class segas32_state : public device_t
public:
segas32_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- void init_alien3(void);
+ void init_alien3();
void init_arescue(int m_hasdsp);
- void init_arabfgt(void);
- void init_brival(void);
- void init_darkedge(void);
- void init_dbzvrvs(void);
- void init_f1en(void);
- void init_f1lap(void);
- void init_f1lapt(void);
- void init_ga2(void);
- void init_harddunk(void);
- void init_holo(void);
- void init_jpark(void);
- void init_orunners(void);
- void init_radm(void);
- void init_radr(void);
- void init_scross(void);
- void init_slipstrm(void);
- void init_sonic(void);
- void init_sonicp(void);
- void init_spidman(void);
- void init_svf(void);
- void init_jleague(void);
- void init_titlef(void);
+ void init_arabfgt();
+ void init_brival();
+ void init_darkedge();
+ void init_dbzvrvs();
+ void init_f1en();
+ void init_f1lap();
+ void init_f1lapt();
+ void init_ga2();
+ void init_harddunk();
+ void init_holo();
+ void init_jpark();
+ void init_orunners();
+ void init_radm();
+ void init_radr();
+ void init_scross();
+ void init_slipstrm();
+ void init_sonic();
+ void init_sonicp();
+ void init_spidman();
+ void init_svf();
+ void init_jleague();
+ void init_titlef();
cpu_device* maincpu() { return m_maincpu; }
@@ -68,7 +68,7 @@ public:
DECLARE_WRITE8_MEMBER(tilebank_external_w);
protected:
- segas32_state(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+ segas32_state(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, bool is_multi32);
typedef void (segas32_state::*sys32_output_callback)(int which, uint16_t data);
@@ -135,7 +135,6 @@ protected:
TIMER_CALLBACK_MEMBER(end_of_vblank_int);
TIMER_CALLBACK_MEMBER(update_sprites);
- void common_start(int multi32);
void system32_set_vblank(int state);
inline uint16_t xBBBBBGGGGGRRRRR_to_xBGRBBBBGGGGRRRR(uint16_t value);
inline uint16_t xBGRBBBBGGGGRRRR_to_xBBBBBGGGGGRRRRR(uint16_t value);
@@ -211,6 +210,7 @@ protected:
optional_shared_ptr<uint16_t> m_system32_workram;
required_shared_ptr<uint16_t> m_videoram;
required_shared_ptr<uint16_t> m_spriteram;
+ optional_shared_ptr<uint8_t> m_soundram;
optional_shared_ptr_array<uint16_t, 2> m_paletteram;
required_device<cpu_device> m_maincpu;
@@ -230,6 +230,8 @@ protected:
optional_memory_bank m_multipcm_bank_hi;
optional_memory_bank m_multipcm_bank_lo;
+ const bool m_is_multi32;
+
uint8_t m_v60_irq_control[0x10];
timer_device *m_v60_irq_timer[2];
uint8_t m_sound_irq_control[4];
@@ -243,7 +245,6 @@ protected:
uint16_t m_system32_displayenable[2];
uint16_t m_system32_tilebank_external;
uint16_t m_arescue_dsp_io[6];
- uint8_t m_is_multi32;
struct cache_entry *m_cache_head;
struct layer_info m_layer_data[11];
uint16_t m_mixer_control[2][0x40];
@@ -264,10 +265,6 @@ class segas32_regular_state : public segas32_state
{
public:
segas32_regular_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
-protected:
-// virtual void device_start() override;
-// virtual void device_reset() override;
};
class segas32_analog_state : public segas32_state
@@ -279,8 +276,6 @@ protected:
segas32_analog_state(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_add_mconfig(machine_config &config) override;
-// virtual void device_start() override;
-// virtual void device_reset() override;
};
class segas32_trackball_state : public segas32_state
@@ -291,7 +286,6 @@ public:
void system32_trackball_map(address_map &map);
protected:
virtual void device_add_mconfig(machine_config &config) override;
- virtual void device_start() override;
};
class segas32_4player_state : public segas32_state
@@ -303,8 +297,6 @@ protected:
segas32_4player_state(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_add_mconfig(machine_config &config) override;
-// virtual void device_start() override;
-// virtual void device_reset() override;
};
class segas32_v25_state : public segas32_4player_state
@@ -318,7 +310,6 @@ public:
protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
-// virtual void device_reset() override;
private:
void decrypt_protrom();
@@ -331,8 +322,6 @@ public:
protected:
virtual void device_add_mconfig(machine_config &config) override;
- virtual void device_start() override;
-// virtual void device_reset() override;
};
class segas32_cd_state : public segas32_state
@@ -349,7 +338,6 @@ public:
protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
-// virtual void device_reset() override;
private:
output_finder<16> m_lamps;
@@ -364,8 +352,6 @@ protected:
sega_multi32_state(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_add_mconfig(machine_config &config) override;
- virtual void device_start() override;
-// virtual void device_reset() override;
};
class sega_multi32_analog_state : public sega_multi32_state
@@ -381,7 +367,6 @@ public:
protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
-// virtual void device_reset() override;
private:
optional_ioport_array<8> m_analog_ports;
@@ -395,8 +380,6 @@ public:
protected:
virtual void device_add_mconfig(machine_config &config) override;
- virtual void device_start() override;
-// virtual void device_reset() override;
};
DECLARE_DEVICE_TYPE(SEGA_S32_PCB, segas32_state)
diff --git a/src/mame/includes/segaxbd.h b/src/mame/includes/segaxbd.h
index 1209b9f025a..b93f9be1a57 100644
--- a/src/mame/includes/segaxbd.h
+++ b/src/mame/includes/segaxbd.h
@@ -60,8 +60,7 @@ public:
protected:
// main CPU read/write handlers
- DECLARE_READ16_MEMBER(adc_r);
- DECLARE_WRITE16_MEMBER(adc_w);
+ uint8_t analog_r();
DECLARE_WRITE16_MEMBER(iocontrol_w);
// video updates
diff --git a/src/mame/includes/thomson.h b/src/mame/includes/thomson.h
index 6b4c6ef2939..c86c066e963 100644
--- a/src/mame/includes/thomson.h
+++ b/src/mame/includes/thomson.h
@@ -146,6 +146,7 @@ public:
m_biosbank(*this, TO8_BIOS_BANK),
m_cartlobank(*this, MO6_CART_LO),
m_carthibank(*this, MO6_CART_HI),
+ m_cart_rom(*this, "cartridge"),
m_thmfc(*this, "thmfc"),
m_floppy_led(*this, "floppy"),
m_floppy_image(*this, "floppy%u", 0U)
@@ -427,6 +428,7 @@ private:
optional_memory_bank m_biosbank;
optional_memory_bank m_cartlobank;
optional_memory_bank m_carthibank;
+ required_region_ptr<uint8_t> m_cart_rom;
required_device<thmfc1_device> m_thmfc;
output_finder<> m_floppy_led;
diff --git a/src/mame/includes/tmnt.h b/src/mame/includes/tmnt.h
index cf532358d85..6a0da21f451 100644
--- a/src/mame/includes/tmnt.h
+++ b/src/mame/includes/tmnt.h
@@ -52,9 +52,7 @@ public:
void tmnt2(machine_config &config);
void lgtnfght(machine_config &config);
void thndrx2(machine_config &config);
- void prmrsocr(machine_config &config);
void sunsetbl(machine_config &config);
- void glfgreat(machine_config &config);
void tmnt(machine_config &config);
void mia(machine_config &config);
void punkshot(machine_config &config);
@@ -63,7 +61,9 @@ public:
void init_tmnt();
void init_cuebrick();
-private:
+protected:
+ virtual void machine_start() override;
+
enum
{
TIMER_NMI
@@ -82,11 +82,7 @@ private:
int m_sorted_layer[3]; // this might not be necessary, but tmnt2 uses it in a strange way...
tilemap_t *m_roz_tilemap;
- int m_glfgreat_roz_rom_bank;
- int m_glfgreat_roz_char_bank;
- int m_glfgreat_roz_rom_mode;
int m_glfgreat_pixel;
- int m_prmrsocr_sprite_bank;
int m_blswhstl_rombank;
int m_tmnt_priorityflag;
int m_lastdim;
@@ -129,8 +125,6 @@ private:
DECLARE_WRITE16_MEMBER(k053245_scattered_word_w);
DECLARE_READ16_MEMBER(k053244_word_noA1_r);
DECLARE_WRITE16_MEMBER(k053244_word_noA1_w);
- DECLARE_WRITE16_MEMBER(prmrsocr_sound_irq_w);
- DECLARE_WRITE8_MEMBER(prmrsocr_audio_bankswitch_w);
DECLARE_READ8_MEMBER(tmnt_sres_r);
DECLARE_WRITE8_MEMBER(tmnt_sres_w);
DECLARE_WRITE8_MEMBER(sound_arm_nmi_w);
@@ -143,30 +137,19 @@ private:
DECLARE_WRITE16_MEMBER(blswhstl_eeprom_w);
DECLARE_READ16_MEMBER(thndrx2_eeprom_r);
DECLARE_WRITE16_MEMBER(thndrx2_eeprom_w);
- DECLARE_WRITE16_MEMBER(prmrsocr_eeprom_w);
DECLARE_WRITE8_MEMBER(cuebrick_nvbank_w);
DECLARE_WRITE16_MEMBER(ssriders_soundkludge_w);
- DECLARE_WRITE16_MEMBER(k053251_glfgreat_w);
DECLARE_WRITE16_MEMBER(tmnt2_1c0800_w);
DECLARE_WRITE16_MEMBER(tmnt_0a0000_w);
DECLARE_WRITE16_MEMBER(punkshot_0a0020_w);
DECLARE_WRITE16_MEMBER(lgtnfght_0a0018_w);
DECLARE_WRITE16_MEMBER(blswhstl_700300_w);
- DECLARE_READ16_MEMBER(glfgreat_rom_r);
- DECLARE_WRITE16_MEMBER(glfgreat_122000_w);
DECLARE_WRITE16_MEMBER(ssriders_eeprom_w);
DECLARE_WRITE16_MEMBER(ssriders_1c0300_w);
- DECLARE_WRITE16_MEMBER(prmrsocr_122000_w);
- DECLARE_READ16_MEMBER(prmrsocr_rom_r);
DECLARE_WRITE16_MEMBER(tmnt_priority_w);
- DECLARE_READ16_MEMBER(glfgreat_ball_r);
- DECLARE_WRITE8_MEMBER(glfgreat_sound_w);
DECLARE_WRITE8_MEMBER(tmnt_upd_start_w);
DECLARE_READ8_MEMBER(tmnt_upd_busy_r);
- TILE_GET_INFO_MEMBER(glfgreat_get_roz_tile_info);
- TILE_GET_INFO_MEMBER(prmrsocr_get_roz_tile_info);
- DECLARE_MACHINE_START(common);
DECLARE_MACHINE_RESET(common);
DECLARE_VIDEO_START(cuebrick);
DECLARE_VIDEO_START(mia);
@@ -174,9 +157,6 @@ private:
DECLARE_VIDEO_START(tmnt);
DECLARE_VIDEO_START(lgtnfght);
DECLARE_VIDEO_START(blswhstl);
- DECLARE_VIDEO_START(glfgreat);
- DECLARE_MACHINE_START(prmrsocr);
- DECLARE_VIDEO_START(prmrsocr);
uint32_t screen_update_mia(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_tmnt(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_punkshot(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@@ -197,7 +177,6 @@ private:
K051960_CB_MEMBER(thndrx2_sprite_callback);
K05324X_CB_MEMBER(lgtnfght_sprite_callback);
K05324X_CB_MEMBER(blswhstl_sprite_callback);
- K05324X_CB_MEMBER(prmrsocr_sprite_callback);
K052109_CB_MEMBER(mia_tile_callback);
K052109_CB_MEMBER(cuebrick_tile_callback);
K052109_CB_MEMBER(tmnt_tile_callback);
@@ -207,14 +186,10 @@ private:
void blswhstl_main_map(address_map &map);
void cuebrick_main_map(address_map &map);
- void glfgreat_audio_map(address_map &map);
- void glfgreat_main_map(address_map &map);
void lgtnfght_audio_map(address_map &map);
void lgtnfght_main_map(address_map &map);
void mia_audio_map(address_map &map);
void mia_main_map(address_map &map);
- void prmrsocr_audio_map(address_map &map);
- void prmrsocr_main_map(address_map &map);
void punkshot_audio_map(address_map &map);
void punkshot_main_map(address_map &map);
void ssriders_audio_map(address_map &map);
@@ -229,4 +204,66 @@ private:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
};
+class glfgreat_state : public tmnt_state
+{
+public:
+ glfgreat_state(const machine_config &mconfig, device_type type, const char *tag) :
+ tmnt_state(mconfig, type, tag),
+ m_analog_controller(*this, "CONTROL%c", 'A')
+ { }
+
+ void glfgreat(machine_config &config);
+
+private:
+ DECLARE_WRITE16_MEMBER(k053251_glfgreat_w);
+ uint8_t controller_r();
+ DECLARE_READ16_MEMBER(glfgreat_rom_r);
+ DECLARE_WRITE16_MEMBER(glfgreat_122000_w);
+ DECLARE_READ16_MEMBER(glfgreat_ball_r);
+ DECLARE_WRITE8_MEMBER(glfgreat_sound_w);
+
+ TILE_GET_INFO_MEMBER(glfgreat_get_roz_tile_info);
+ DECLARE_VIDEO_START(glfgreat);
+
+ void glfgreat_audio_map(address_map &map);
+ void glfgreat_main_map(address_map &map);
+
+ required_ioport_array<4> m_analog_controller;
+
+ uint8_t m_controller_select;
+ int m_roz_rom_bank;
+ int m_roz_char_bank;
+ int m_roz_rom_mode;
+};
+
+class prmrsocr_state : public tmnt_state
+{
+public:
+ prmrsocr_state(const machine_config &mconfig, device_type type, const char *tag) :
+ tmnt_state(mconfig, type, tag)
+ { }
+
+ void prmrsocr(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+
+private:
+ DECLARE_WRITE16_MEMBER(prmrsocr_sound_irq_w);
+ DECLARE_WRITE8_MEMBER(prmrsocr_audio_bankswitch_w);
+ DECLARE_WRITE16_MEMBER(prmrsocr_eeprom_w);
+ DECLARE_WRITE16_MEMBER(prmrsocr_122000_w);
+ DECLARE_READ16_MEMBER(prmrsocr_rom_r);
+
+ TILE_GET_INFO_MEMBER(prmrsocr_get_roz_tile_info);
+ DECLARE_VIDEO_START(prmrsocr);
+ K05324X_CB_MEMBER(prmrsocr_sprite_callback);
+
+ void prmrsocr_audio_map(address_map &map);
+ void prmrsocr_main_map(address_map &map);
+
+ int m_sprite_bank;
+ int m_roz_char_bank;
+};
+
#endif // MAME_INCLUDES_TMNT_H
diff --git a/src/mame/includes/wecleman.h b/src/mame/includes/wecleman.h
index 6b9fb170249..75352e1c2ef 100644
--- a/src/mame/includes/wecleman.h
+++ b/src/mame/includes/wecleman.h
@@ -93,7 +93,7 @@ private:
DECLARE_WRITE16_MEMBER(wecleman_protection_w);
DECLARE_WRITE16_MEMBER(irqctrl_w);
DECLARE_WRITE16_MEMBER(selected_ip_w);
- DECLARE_READ16_MEMBER(selected_ip_r);
+ uint8_t selected_ip_r();
DECLARE_WRITE16_MEMBER(blitter_w);
DECLARE_READ8_MEMBER(multiply_r);
DECLARE_WRITE8_MEMBER(multiply_w);
diff --git a/src/mame/includes/xavix.h b/src/mame/includes/xavix.h
index b9074189bd1..b6e8b593193 100644
--- a/src/mame/includes/xavix.h
+++ b/src/mame/includes/xavix.h
@@ -761,6 +761,7 @@ public:
void xavix_cart_ekara(machine_config &config);
void xavix_cart_popira(machine_config &config);
void xavix_cart_ddrfammt(machine_config &config);
+ void xavix_cart_evio(machine_config &config);
protected:
diff --git a/src/mame/layout/cashcatnz.lay b/src/mame/layout/cashcatnz.lay
index b006f76efbe..756a6480750 100644
--- a/src/mame/layout/cashcatnz.lay
+++ b/src/mame/layout/cashcatnz.lay
@@ -111,7 +111,7 @@
</rect>
<text string="PLAY 9">
<color red="0.0" green="0.0" blue="0.0" />
- <bounds x="0.1" y="0.2" width="0.8" height="0.3" />
+ <bounds x="0.1" y="0.1" width="0.8" height="0.3" />
</text>
<text string="LINES">
<color red="0.0" green="0.0" blue="0.0" />
diff --git a/src/mame/layout/seawolf.lay b/src/mame/layout/seawolf.lay
index ae60618816d..6b2defc7028 100644
--- a/src/mame/layout/seawolf.lay
+++ b/src/mame/layout/seawolf.lay
@@ -3,64 +3,33 @@
<element name="overlay">
<rect>
- <bounds left="0" top="0" right="4" bottom="3" />
<color red="0.25" green="0.5" blue="1" />
</rect>
</element>
-<!-- define periscope lamps -->
-
- <element name="lamp_1" defstate="0">
+ <element name="explamp" defstate="0">
<disk state="1">
- <color red="1.0" green="0.25" blue="0.10" />
- </disk>
- <disk state="0">
- <color red="0.25" green="0.05" blue="0.0" />
+ <color red="0.9" green="0.6" blue="0.2" />
</disk>
- <text string="1">
- <color red="0.0" green="0.0" blue="0.0" />
- <bounds x="0" y="0.2" width="1" height="0.6" />
- </text>
</element>
- <element name="lamp_2" defstate="0">
- <disk state="1">
- <color red="1.0" green="0.25" blue="0.10" />
- </disk>
- <disk state="0">
- <color red="0.25" green="0.05" blue="0.0" />
- </disk>
- <text string="2">
- <color red="0.0" green="0.0" blue="0.0" />
- <bounds x="0" y="0.2" width="1" height="0.6" />
- </text>
- </element>
-
- <element name="lamp_3" defstate="0">
- <disk state="1">
- <color red="1.0" green="0.25" blue="0.10" />
- </disk>
- <disk state="0">
- <color red="0.25" green="0.05" blue="0.0" />
- </disk>
- <text string="3">
- <color red="0.0" green="0.0" blue="0.0" />
- <bounds x="0" y="0.2" width="1" height="0.6" />
- </text>
- </element>
-
- <element name="lamp_4" defstate="0">
- <disk state="1">
- <color red="1.0" green="0.25" blue="0.10" />
- </disk>
- <disk state="0">
- <color red="0.25" green="0.05" blue="0.0" />
- </disk>
- <text string="4">
- <color red="0.0" green="0.0" blue="0.0" />
- <bounds x="0" y="0.2" width="1" height="0.6" />
- </text>
- </element>
+ <!-- define periscope lamps -->
+
+ <repeat count="4">
+ <param name="lampno" start="1" increment="1" />
+ <element name="lamp_~lampno~" defstate="0">
+ <disk state="1">
+ <color red="1.0" green="0.25" blue="0.10" />
+ </disk>
+ <disk state="0">
+ <color red="0.25" green="0.05" blue="0.0" />
+ </disk>
+ <text string="~lampno~">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.2" width="1" height="0.6" />
+ </text>
+ </element>
+ </repeat>
<element name="lamp_ready" defstate="0">
<disk state="1">
@@ -131,36 +100,84 @@
</element>
-<!-- NOTE: does not include explosion lamps yet -->
-
- <view name="Lamps + Color Overlay">
+ <view name="Lamps and Color Overlay">
<bounds left="0" top="-90" right="400" bottom="300" />
+
<screen index="0">
<bounds left="0" top="0" right="400" bottom="300" />
</screen>
- <overlay name="overlay" element="overlay">
+ <element ref="overlay" blend="multiply">
<bounds left="0" top="0" right="400" bottom="300" />
- </overlay>
-
- <bezel name="TORP_LAMP_1" element="lamp_1">
+ </element>
+
+ <element name="EXP_LAMP_0" ref="explamp" blend="add">
+ <bounds x="20.1" y="66.8" width="35" height="17.7" />
+ </element>
+ <element name="EXP_LAMP_1" ref="explamp" blend="add">
+ <bounds x="66.5" y="66.8" width="35" height="17.7" />
+ </element>
+ <element name="EXP_LAMP_2" ref="explamp" blend="add">
+ <bounds x="112.9" y="66.8" width="35" height="17.7" />
+ </element>
+ <element name="EXP_LAMP_3" ref="explamp" blend="add">
+ <bounds x="159.3" y="66.8" width="35" height="17.7" />
+ </element>
+ <element name="EXP_LAMP_4" ref="explamp" blend="add">
+ <bounds x="205.7" y="66.8" width="35" height="17.7" />
+ </element>
+ <element name="EXP_LAMP_5" ref="explamp" blend="add">
+ <bounds x="252.1" y="66.8" width="35" height="17.7" />
+ </element>
+ <element name="EXP_LAMP_6" ref="explamp" blend="add">
+ <bounds x="298.5" y="66.8" width="35" height="17.7" />
+ </element>
+ <element name="EXP_LAMP_7" ref="explamp" blend="add">
+ <bounds x="344.9" y="66.8" width="35" height="17.7" />
+ </element>
+ <element name="EXP_LAMP_8" ref="explamp" blend="add">
+ <bounds x="20.1" y="28.3" width="35" height="17.7" />
+ </element>
+ <element name="EXP_LAMP_9" ref="explamp" blend="add">
+ <bounds x="66.5" y="28.3" width="35" height="17.7" />
+ </element>
+ <element name="EXP_LAMP_A" ref="explamp" blend="add">
+ <bounds x="112.9" y="28.3" width="35" height="17.7" />
+ </element>
+ <element name="EXP_LAMP_B" ref="explamp" blend="add">
+ <bounds x="159.3" y="28.3" width="35" height="17.7" />
+ </element>
+ <element name="EXP_LAMP_C" ref="explamp" blend="add">
+ <bounds x="205.7" y="28.3" width="35" height="17.7" />
+ </element>
+ <element name="EXP_LAMP_D" ref="explamp" blend="add">
+ <bounds x="252.1" y="28.3" width="35" height="17.7" />
+ </element>
+ <element name="EXP_LAMP_E" ref="explamp" blend="add">
+ <bounds x="298.5" y="28.3" width="35" height="17.7" />
+ </element>
+ <element name="EXP_LAMP_F" ref="explamp" blend="add">
+ <bounds x="344.9" y="28.3" width="35" height="17.7" />
+ </element>
+
+ <element name="TORP_LAMP_4" ref="lamp_1">
<bounds x="117.5" y="-80" width="30" height="30" />
- </bezel>
- <bezel name="TORP_LAMP_2" element="lamp_2">
+ </element>
+ <element name="TORP_LAMP_3" ref="lamp_2">
<bounds x="162.5" y="-80" width="30" height="30" />
- </bezel>
- <bezel name="TORP_LAMP_3" element="lamp_3">
+ </element>
+ <element name="TORP_LAMP_2" ref="lamp_3">
<bounds x="207.5" y="-80" width="30" height="30" />
- </bezel>
- <bezel name="TORP_LAMP_4" element="lamp_4">
+ </element>
+ <element name="TORP_LAMP_1" ref="lamp_4">
<bounds x="252.5" y="-80" width="30" height="30" />
- </bezel>
+ </element>
- <bezel name="READY_LAMP" element="lamp_ready">
+ <element name="READY_LAMP" ref="lamp_ready">
<bounds x="117.5" y="-40" width="75" height="30" />
- </bezel>
- <bezel name="RELOAD_LAMP" element="lamp_reload">
+ </element>
+ <element name="RELOAD_LAMP" ref="lamp_reload">
<bounds x="207.5" y="-40" width="75" height="30" />
- </bezel>
+ </element>
</view>
@@ -168,9 +185,9 @@
<screen index="0">
<bounds left="0" top="0" right="400" bottom="300" />
</screen>
- <overlay name="overlay" element="overlay">
+ <element ref="overlay" blend="multiply">
<bounds left="0" top="0" right="400" bottom="300" />
- </overlay>
+ </element>
</view>
</mamelayout>
diff --git a/src/mame/layout/spcenctr.lay b/src/mame/layout/spcenctr.lay
index 7e66dbdad1f..8cb48717e62 100644
--- a/src/mame/layout/spcenctr.lay
+++ b/src/mame/layout/spcenctr.lay
@@ -1,45 +1,29 @@
<?xml version="1.0"?>
+<!--
+license:CC0
+copyright-holders:Vas Crabb
+Midway Space Encounters layout
+-->
<mamelayout version="2">
+ <element name="reflection" defstate="0"><rect state="1" /></element>
- <element name="lamp_red" defstate="0">
- <rect state="0">
- <color red="0" green="0" blue="0" />
- </rect>
- <rect state="1">
- <color red="1.0" green="0.25" blue="0.1" />
- </rect>
- </element>
-
- <element name="lamp_strobe" defstate="0">
- <rect state="0">
- <color red="0" green="0" blue="0" />
- </rect>
- <rect state="1">
- <color red="1" green="1" blue="1" />
- </rect>
- </element>
-
-
-<!-- NOTE: color overlay is known, -->
-<!-- but as of yet (10-2012) can't be created with internal .lay -->
-
- <view name="Lamps Reflection">
-
-<!-- left and right edges are stripped on the cabinet -->
+ <view name="Lamp/Strobe Reflection">
+ <!-- left and right edges are stripped on the cabinet -->
<bounds left="0" top="0" right="376" bottom="300" />
<screen index="0">
<bounds left="-8" top="0" right="392" bottom="300" />
</screen>
-<!-- lamp and strobe reflect onto the inner bezel (and screen) -->
- <bezel name="LAMP" element="lamp_red">
+ <!-- NOTE: color overlay is known, but as of yet (10-2012) can't be created with internal .lay -->
+
+ <!-- lamp and strobe reflect onto the inner bezel (and screen) -->
+ <element ref="reflection" name="LAMP" blend="add">
+ <color red="0.5" green="0.125" blue="0.05" />
<bounds left="0" top="0" right="376" bottom="300" />
- <color alpha="0.2" />
- </bezel>
- <bezel name="STROBE" element="lamp_strobe">
+ </element>
+ <element ref="reflection" name="STROBE" blend="add">
+ <color red="0.7" green="0.7" blue="0.7" />
<bounds left="0" top="0" right="376" bottom="300" />
- <color alpha="0.4" />
- </bezel>
-
+ </element>
</view>
</mamelayout>
diff --git a/src/mame/machine/6883sam.cpp b/src/mame/machine/6883sam.cpp
index 26b08accfa4..53dc0688c32 100644
--- a/src/mame/machine/6883sam.cpp
+++ b/src/mame/machine/6883sam.cpp
@@ -512,7 +512,7 @@ void sam6883_device::sam_space<_addrstart, _addrend>::point_specific_bank(const
// name the bank
auto tag = string_format("bank%04X_%c", addrstart, is_write ? 'w' : 'r');
- // determine "nop_addrstart" - where the bank ends, and above which is AM_NOP
+ // determine "nop_addrstart" - where the bank ends, and above which is .noprw();
uint32_t nop_addrstart = (length != ~0)
? std::min(addrend + 1, addrstart + length)
: addrend + 1;
diff --git a/src/mame/machine/dc-ctrl.h b/src/mame/machine/dc-ctrl.h
index bc22a757111..4d29af1da97 100644
--- a/src/mame/machine/dc-ctrl.h
+++ b/src/mame/machine/dc-ctrl.h
@@ -16,6 +16,13 @@ public:
template <uint8_t Which, typename T>
void set_port_tag(T &&port_tag) { port[Which].set_tag(std::forward<T>(port_tag)); }
+ template <uint8_t First = 0U, typename T, typename... U>
+ void set_port_tags(T &&first_tag, U &&... other_tags)
+ {
+ set_port_tag<First>(std::forward<T>(first_tag));
+ set_port_tags<First + 1>(std::forward<U>(other_tags)...);
+ }
+
// TODO: we probably don't need these setters
void set_model(const char *new_id) { model = new_id; }
void set_license(const char *new_license) { license = new_license; }
@@ -24,6 +31,8 @@ public:
void maple_w(const uint32_t *data, uint32_t in_size) override;
protected:
+ template <uint8_t First> void set_port_tags() { }
+
// device-level overrides
virtual void device_start() override;
diff --git a/src/mame/machine/decopincpu.cpp b/src/mame/machine/decopincpu.cpp
index 1357dfb2b1f..99f8dc9c678 100644
--- a/src/mame/machine/decopincpu.cpp
+++ b/src/mame/machine/decopincpu.cpp
@@ -31,7 +31,7 @@ void decocpu_type1_device::decocpu1_map(address_map &map)
map(0x2c00, 0x2c03).rw("pia2c", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // alphanumeric display
map(0x3000, 0x3003).rw("pia30", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // inputs
map(0x3400, 0x3403).rw("pia34", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // widget
- //AM_RANGE(0x4000, 0xffff) AM_ROM
+ //map(0x4000, 0xffff).rom();
}
void decocpu_type2_device::decocpu2_map(address_map &map)
@@ -44,7 +44,7 @@ void decocpu_type2_device::decocpu2_map(address_map &map)
map(0x2c00, 0x2c03).rw("pia2c", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // alphanumeric display
map(0x3000, 0x3003).rw("pia30", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // inputs
map(0x3400, 0x3403).rw("pia34", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // widget
- //AM_RANGE(0x4000, 0xffff) AM_ROM
+ //map(0x4000, 0xffff).rom();
}
static INPUT_PORTS_START( decocpu1 )
diff --git a/src/mame/machine/eispc_kb.cpp b/src/mame/machine/eispc_kb.cpp
new file mode 100644
index 00000000000..63d21058550
--- /dev/null
+++ b/src/mame/machine/eispc_kb.cpp
@@ -0,0 +1,412 @@
+// license:BSD-3-Clause
+// copyright-holders: Joakim Larsson Edström
+/**********************************************************************
+
+ Ericsson PC keyboard emulation
+
+ TTL-level bi-directional serial matrix keyboard
+
+ The mc6801 contains an internal ROM that handles scanning of the keyboard,
+ controlling the 2 or 3 LEDs and also the programming of the scan code for
+ a single programmable key.
+
+ There are two known variants of the keyboard. The first had the Ericsson
+ internal name "Sgt Pepper" where the hardware was OEMed/manufactured by
+ FACIT and had two LEDs while the second variant called "Roger Moore" had
+ three LEDs and was manufactured by Ericsson.
+
+ Both keyboard hooks up directly to the port of a 6801 MCU. There are
+ 16 column lines driven by Port 3 and Port 4 that goes low one at a time
+ during the scan process and when a key is pressed one of the six corresponding
+ row lines goes low and fed to through a 74HC04 inverter into port 1, where a
+ high bit means a key was pressed.
+
+ The connector has TX/Hold, Rx and Reset. Reset is connected directly to the
+ MCU so the host CPU can keep it in RESET until it needs the keyboard.
+ Rx is connected to the RX line of the SCI in the MCU, P23 - bit 3 of port 2.
+ Tx/Hold is bidirectional, connected to the TX line of the SCI in the MCU, P24
+ bit 4 of port 2, but can also be kept low by the host CPU to temporarily inhibit
+ the keyboard from sending more scan codes. This is sensed by P16 through a
+ 74HC04 inverter. The keyboard is specified to be able to buffer up to 20 scan codes.
+
+ The data is exchanged in both direction asynchronously at 1200 baud, 8 databits,
+ 1 start and 1 stop bit. At startup the host CPU sends a $00 (zero) byte to the
+ keyboard simultaneously with the MCU sending a $A5 to the CPU to ensure full
+ duplex operation. If the $A5 byte is not received EPC will display a "Keyboard
+ Error" message on the screen.
+
+ P17 and P20 are connected to LEDs on Caps Lock and Num Lock keys. The latter
+ keyboard variant Roger Moore also had a LED on Scroll Lock connected to P22.
+ P20, P21 and P22 are pulled high to bring the MCU into MODE 7 at RESET. NMI
+ and IRQ are pulled high and not connected to anything externally.
+
+ +--+--+--+--+--+-6x10K--o +5v
+ +-------+ | | | | | |
+ | P30|<------x--x--x--x--x--x--- COLUMNS x = 1N4448 diod towards P3/P4
+ | P31|<------x--x--x--x--x--x--- x 16 in serie with key button
+ | P32|<------x--x--x--x--x--x---
+ | P33|<------x--x--x--x--x--x--- A pressed button pulls a P1 row
+ | P34|<------x--x--x--x--x--x--- low when its P3/P4 column is
+ | P35|<------x--x--x--x--x--x--- being scanned
+ | P36|<------x--x--x--x--x--x---
+ | P37|<------x--x--x--x--x--x---
+ | P40|<------x--x--x--x--x--x---
+ | P41|<------x--x--x--x--x--x---
+ | P42|<------x--x--x--x--x--x---
+ | P43|<------x--x--x--x--x--x---
+ | P44|<------x--x--x--x--x--x---
+ | P45|<------x--x--x--x--x--x---
+ | P46|<------x--x--x--x--x--x---
+ | P47|<------x--x--x--x--x--x---
+ | | | | | | | |
+ | M6801 | | | | | | |
+ | | 6 x 74HC04 hex inverter
+ |P10-P15|<------+--+--+--+--+--+ ROWS x 6
+ +-------+
+
+ Credits
+ -------
+ The internal ROM was dumped in collaboration with Dalby Datormuseum, whom
+ also provided documentation and schematics of the keyboard
+
+ https://sites.google.com/site/dalbydatormuseum/home
+ https://github.com/MattisLind/6801reader
+
+ **********************************************************************/
+
+#include "emu.h"
+#include "eispc_kb.h"
+#include "cpu/m6800/m6801.h"
+
+//**************************************************************************
+// CONFIGURABLE LOGGING
+//**************************************************************************
+#define LOG_PORTS (1U << 1)
+#define LOG_RESET (1U << 2)
+#define LOG_BITS (1U << 3)
+#define LOG_UI (1U << 4)
+
+//#define VERBOSE (LOG_UI)
+//#define LOG_OUTPUT_STREAM std::cout
+
+#include "logmacro.h"
+
+#define LOGPORTS(...) LOGMASKED(LOG_PORTS, __VA_ARGS__)
+#define LOGRST(...) LOGMASKED(LOG_RESET, __VA_ARGS__)
+#define LOGBITS(...) LOGMASKED(LOG_BITS, __VA_ARGS__)
+#define LOGUI(...) LOGMASKED(LOG_UI, __VA_ARGS__)
+
+//**************************************************************************
+// MACROS / CONSTANTS
+//**************************************************************************
+
+#define M6801_TAG "mcu"
+
+namespace {
+
+INPUT_PORTS_START(eispc_kb)
+ PORT_START("P15")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("KP 6") PORT_CODE(KEYCODE_6_PAD) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR('6') PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) // 77
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("KP +") PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR('+') // 78
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("KP 5") PORT_CODE(KEYCODE_5_PAD) PORT_CHAR('5') // 76
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("* PRINT") PORT_CODE(KEYCODE_TILDE) PORT_CHAR('*') PORT_CHAR(UCHAR_MAMEKEY(PRTSCR)) // 55
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("R Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) // 54
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_') // 53
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(". :") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR(':') // 52
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F5") PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5)) // 63
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F6") PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6)) // 64
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNUSED ) // no scancode is sent
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) // 29
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(", ;") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR(';') // 51
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('D') PORT_CHAR('d') // 32
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_CHAR('x') // 45
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('C') PORT_CHAR('c') // 46
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('J') PORT_CHAR('j') // 36
+
+ PORT_START("P14")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNUSED ) // 00 - keyboard error
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("BREAK") PORT_CODE(KEYCODE_PAUSE) PORT_CHAR(UCHAR_MAMEKEY(PAUSE)) // 70
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("KP 7") PORT_CODE(KEYCODE_7_PAD) PORT_CHAR('7') PORT_CHAR(UCHAR_MAMEKEY(HOME)) // 71
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED ) // ff - keyboard error
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('^') PORT_CHAR('~') PORT_CHAR(']') // 27
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR(0x00e5) PORT_CHAR(0x00c5) PORT_CHAR('[') // 26 å Å
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('P') PORT_CHAR('p') // 25
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F1") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) // 59
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F2") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) // 60
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') // 17
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') // 18
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') // 24
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') // 19
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') // 20
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') // 21
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') // 23
+
+ PORT_START("P13")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_NUMLOCK) PORT_CHAR(UCHAR_MAMEKEY(NUMLOCK)) // 69
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNUSED ) // ff - keyboard error
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("BS DEL") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) PORT_CHAR(UCHAR_MAMEKEY(DEL)) // 14
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+') // 13
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_') // 12
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')') // 11
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(') // 10
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') // 02
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ESC") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC)) // 01
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@') // 03
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') // 04
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*') // 09
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') // 05
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') // 06
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^') // 07
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&') // 08
+
+ PORT_START("P12")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("KP 9") PORT_CODE(KEYCODE_9_PAD) PORT_CHAR('9') PORT_CHAR(UCHAR_MAMEKEY(PGUP)) // 73
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("KP -") PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) // 74
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("KP 8") PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_UP) PORT_CHAR('8') PORT_CHAR(UCHAR_MAMEKEY(UP)) // 72
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`') PORT_CHAR('~') // 41
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"') // 40
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':') // 39
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') // 38
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F3") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) // 61
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F4") PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4)) // 62
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') // 16
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("TAB") PORT_CODE(KEYCODE_TAB) PORT_CHAR(9) // 15
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') // 37
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') // 33
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') // 34
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') // 35
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') // 22
+
+ PORT_START("P11")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(COMMA_PAD)) // 83
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("RETURN") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) // 28
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("KP 0") PORT_CODE(KEYCODE_0_PAD) PORT_CHAR('0') PORT_CHAR(UCHAR_MAMEKEY(INSERT)) // 82
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED ) // 89 - no key
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNUSED ) // 86 - no key
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNUSED ) // 87 - no key
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED ) // 88 - no key
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F9") PORT_CODE(KEYCODE_F9) PORT_CHAR(UCHAR_MAMEKEY(F9)) // 67
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F10") PORT_CODE(KEYCODE_F10) PORT_CHAR(UCHAR_MAMEKEY(F10)) // 68
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNUSED ) // scan code ff - keyboard error
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') // 43
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CAPS LOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) // 58
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SHIFT LOCK") PORT_CODE(KEYCODE_LALT) // 56
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNUSED ) // 85 - no key
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') // 47
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') // 57
+
+ PORT_START("P10")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("KP 3") PORT_CODE(KEYCODE_3_PAD) PORT_CODE(KEYCODE_PGDN) // 81
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNUSED ) // ff - keyboard error
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("KP 2") PORT_CODE(KEYCODE_2_PAD) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(2_PAD)) // 80
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("NEW LINE") PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD)) // 84 (programmable, default is 28)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("KP 1") PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD)) // 79
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("KP 4") PORT_CODE(KEYCODE_4_PAD) PORT_CODE(KEYCODE_LEFT) PORT_CHAR('4') PORT_CHAR(UCHAR_MAMEKEY(LEFT)) // 75
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED ) // ff - keyboard error
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F7") PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7)) // 65
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F8") PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8)) // 66
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1) // 42
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') // 44
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') // 50
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') // 30
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') // 31
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') // 48
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') // 49
+INPUT_PORTS_END
+
+
+//-------------------------------------------------
+// ROM( eispc_kb )
+//-------------------------------------------------
+
+ROM_START( eispc_kb )
+ ROM_REGION( 0x800, M6801_TAG, 0 )
+ ROM_LOAD( "sgtpepper-1.2.bin", 0x000, 0x800, CRC(7107b841) SHA1(a939dd50622575c31fea9c7adb7a7db5403a7aca) )
+ROM_END
+
+} // anonymous namespace
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(EISPC_KB, eispc_keyboard_device, "eispc_kb", "Ericsson PC keyboard")
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// eispc_keyboard_device - constructor
+//-------------------------------------------------
+
+eispc_keyboard_device::eispc_keyboard_device(
+ machine_config const &mconfig,
+ char const *tag,
+ device_t *owner,
+ uint32_t clock)
+ : device_t(mconfig, EISPC_KB, tag, owner, clock)
+ , m_mcu(*this, M6801_TAG)
+ , m_rows(*this, "P1%u", 0)
+ , m_txd_cb(*this)
+ , m_rxd_high(true)
+ , m_txd_high(true)
+ , m_hold(true)
+ , m_col_select(0)
+{
+}
+
+WRITE_LINE_MEMBER(eispc_keyboard_device::rxd_w)
+{
+ LOGBITS("KBD bit presented: %d\n", state);
+ m_rxd_high = CLEAR_LINE != state;
+}
+
+WRITE_LINE_MEMBER(eispc_keyboard_device::hold_w)
+{
+ m_hold = CLEAR_LINE == state;
+}
+
+WRITE_LINE_MEMBER(eispc_keyboard_device::rst_line_w)
+{
+ if (state == CLEAR_LINE)
+ {
+ m_mcu->resume(SUSPEND_REASON_RESET);
+ //m_mcu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
+ LOGRST("KBD: Keyboard mcu reset line is cleared\n");
+ }
+ else
+ {
+ // set_input_line suspends with a true argument which causes "Keyboard error"
+ m_mcu->suspend(SUSPEND_REASON_RESET, false);
+ //m_mcu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
+ LOGRST("KBD: Keyboard mcu reset line is asserted\n");
+ }
+
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void eispc_keyboard_device::device_start()
+{
+ m_txd_cb.resolve_safe();
+
+ save_item(NAME(m_rxd_high));
+ save_item(NAME(m_txd_high));
+ save_item(NAME(m_col_select));
+
+ m_rxd_high = true;
+ m_txd_high = true;
+ m_col_select = 0;
+}
+
+
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void eispc_keyboard_device::device_add_mconfig(machine_config &config)
+{
+ M6801(config, m_mcu, XTAL(4'915'200)); // Crystal verified from schematics and visual inspection
+ m_mcu->set_addrmap(AS_PROGRAM, &eispc_keyboard_device::eispc_kb_mem);
+
+ m_mcu->in_p1_cb().set([this]
+ {
+ uint8_t data = 0; // Indicate what keys are pressed in selected column
+
+ for (int i = 0; i < 6; i++) data |= ( (~m_rows[i]->read() & m_col_select) ? 0x20 >> i : 0 );
+
+ // Update txd bit
+ data &= 0x3f;
+ data |= ((!m_hold || !m_txd_high) ? 0 : 0x40);
+
+ if ((data & 0x3f) != 0 && data != m_p1)
+ {
+ LOGUI("Reading port 1: %02x m_col_select:%04x\n", data, m_col_select);
+ m_p1 = data;
+ }
+ return data;
+ });
+
+ m_mcu->out_p1_cb().set([this](uint8_t data)
+ {
+ LOGPORTS("Writing %02x PORT 1\n", data);
+ });
+
+ m_mcu->in_p2_cb().set([this]
+ {
+ uint8_t data = M6801_MODE_7 | (m_rxd_high ? (1 << 3) : 0);
+ LOGPORTS("Reading port 2: %02x\n", data);
+ //LOGBITS("KBD: Reading rxd_high: %02x\n", m_rxd_high);
+ return data;
+ });
+
+ m_mcu->out_p2_cb().set([this](uint8_t data)
+ {
+ LOGPORTS("Writing port 2: %02x\n", data);
+ LOGBITS("KBD: writing bit: %02x\n", BIT(data, 4));
+ });
+
+ m_mcu->out_ser_tx_cb().set([this](bool state)
+ {
+ m_txd_high = CLEAR_LINE != state;
+ LOGBITS("KBD: writing bit: %02x\n", m_txd_high);
+ m_txd_cb(state);
+ });
+
+ m_mcu->in_p3_cb().set([this]
+ {
+ LOGPORTS("Reading Port 3\n");
+ return 0x00;
+ });
+
+ m_mcu->out_p3_cb().set([this](uint8_t data)
+ {
+ m_col_select &= 0xff00;
+ m_col_select |= ~data;
+ });
+
+ m_mcu->in_p4_cb().set([this]
+ {
+ LOGPORTS("Reading Port 4\n");
+ return 0x00;
+ });
+
+ m_mcu->out_p4_cb().set([this](uint8_t data)
+ {
+ m_col_select &= 0x00ff;
+ m_col_select |= (~data << 8);
+ });
+}
+
+//-------------------------------------------------
+// input_ports - device-specific input ports
+//-------------------------------------------------
+
+ioport_constructor eispc_keyboard_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( eispc_kb );
+}
+
+//-------------------------------------------------
+// ADDRESS_MAP( eispc_kb_mem )
+//-------------------------------------------------
+
+void eispc_keyboard_device::eispc_kb_mem(address_map &map)
+{
+ map(0x0000, 0x001f).rw(M6801_TAG, FUNC(m6801_cpu_device::m6801_io_r), FUNC(m6801_cpu_device::m6801_io_w));
+ map(0x0080, 0x00ff).ram();
+ map(0xf800, 0xffff).rom().region(M6801_TAG, 0);
+}
+
+//-------------------------------------------------
+// rom_region - device-specific ROM region
+//-------------------------------------------------
+
+const tiny_rom_entry *eispc_keyboard_device::device_rom_region() const
+{
+ return ROM_NAME( eispc_kb );
+}
diff --git a/src/mame/machine/eispc_kb.h b/src/mame/machine/eispc_kb.h
new file mode 100644
index 00000000000..eb582262f23
--- /dev/null
+++ b/src/mame/machine/eispc_kb.h
@@ -0,0 +1,43 @@
+// license:BSD-3-Clause
+// copyright-holders:Joakim Larsson Edström
+#ifndef MAME_MACHINE_EISPC_KB_H
+#define MAME_MACHINE_EISPC_KB_H
+
+#pragma once
+
+#include "cpu/m6800/m6801.h"
+
+DECLARE_DEVICE_TYPE(EISPC_KB, eispc_keyboard_device)
+
+class eispc_keyboard_device : public device_t
+{
+public:
+ auto txd_cb() { return m_txd_cb.bind(); }
+
+ eispc_keyboard_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock = 0);
+
+ DECLARE_INPUT_CHANGED_MEMBER(key);
+ DECLARE_WRITE_LINE_MEMBER(rxd_w);
+ DECLARE_WRITE_LINE_MEMBER(hold_w);
+ DECLARE_WRITE_LINE_MEMBER(rst_line_w);
+
+protected:
+ virtual void device_start() override;
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual ioport_constructor device_input_ports() const override;
+ virtual tiny_rom_entry const *device_rom_region() const override;
+
+ required_device<m6801_cpu_device> m_mcu;
+ required_ioport_array<6> m_rows;
+ devcb_write_line m_txd_cb; // Callback for KBD-> EPC
+
+ bool m_rxd_high; // state of Rx input line
+ bool m_txd_high; // state of Tx output line
+ bool m_hold;
+ uint16_t m_col_select;
+ uint8_t m_p1;
+
+ void eispc_kb_mem(address_map &map);
+};
+
+#endif // MAME_MACHINE_EISPC_KB_H
diff --git a/src/mame/machine/gaelco2.cpp b/src/mame/machine/gaelco2.cpp
index 4e206995643..b18c00bcfa2 100644
--- a/src/mame/machine/gaelco2.cpp
+++ b/src/mame/machine/gaelco2.cpp
@@ -167,13 +167,13 @@ void gaelco2_state::init_wrally2()
void gaelco2_state::shareram_w(offs_t offset, u8 data)
{
- // why isn't there an AM_SOMETHING macro for this?
+ // why isn't there address map functionality for this?
reinterpret_cast<u8 *>(m_shareram.target())[BYTE_XOR_BE(offset)] = data;
}
u8 gaelco2_state::shareram_r(offs_t offset)
{
- // why isn't there an AM_SOMETHING macro for this?
+ // why isn't there address map functionality for this?
return reinterpret_cast<u8 const *>(m_shareram.target())[BYTE_XOR_BE(offset)];
}
diff --git a/src/mame/machine/hec2hrp.cpp b/src/mame/machine/hec2hrp.cpp
index c9d8e551a5a..ffc1e0b1339 100644
--- a/src/mame/machine/hec2hrp.cpp
+++ b/src/mame/machine/hec2hrp.cpp
@@ -327,9 +327,9 @@ WRITE8_MEMBER(hec2hrp_state::color_a_w)
if (m_write_cassette==0)
{
m_cassette->change_state(
- CASSETTE_MOTOR_ENABLED ,
+ CASSETTE_MOTOR_ENABLED,
CASSETTE_MASK_MOTOR);
- // m_cassette->set_state((cassette_state)(CASSETTE_PLAY | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED ));
+ // m_cassette->set_state(CASSETTE_PLAY | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED);
}
}
else
@@ -349,8 +349,8 @@ WRITE8_MEMBER(hec2hrp_state::color_a_w)
m_counter_write = 6;
if (m_write_cassette==0)
{ /* C'est la 1er fois => record*/
- m_cassette->change_state(
- CASSETTE_MOTOR_ENABLED ,
+ m_cassette->change_state(
+ CASSETTE_MOTOR_ENABLED,
CASSETTE_MASK_MOTOR);
m_cassette->set_state(CASSETTE_RECORD);
m_write_cassette=1;
diff --git a/src/mame/machine/hng64_net.cpp b/src/mame/machine/hng64_net.cpp
index eb862354e57..1e6ed0eaa7b 100644
--- a/src/mame/machine/hng64_net.cpp
+++ b/src/mame/machine/hng64_net.cpp
@@ -116,20 +116,20 @@ void hng64_state::hng_comm_io_map(address_map &map)
map.global_mask(0xff);
/* Reserved for the KL5C80 internal hardware */
map(0x00, 0x07).rw(FUNC(hng64_state::hng64_comm_mmu_r), FUNC(hng64_state::hng64_comm_mmu_w));
-// AM_RANGE(0x08,0x1f) AM_NOP /* Reserved */
-// AM_RANGE(0x20,0x25) AM_READWRITE /* Timer/Counter B */ /* hng64 writes here */
-// AM_RANGE(0x27,0x27) AM_NOP /* Reserved */
-// AM_RANGE(0x28,0x2b) AM_READWRITE /* Timer/Counter A */ /* hng64 writes here */
-// AM_RANGE(0x2c,0x2f) AM_READWRITE /* Parallel port A */
-// AM_RANGE(0x30,0x33) AM_READWRITE /* Parallel port B */
-// AM_RANGE(0x34,0x37) AM_READWRITE /* Interrupt controller */ /* hng64 writes here */
-// AM_RANGE(0x38,0x39) AM_READWRITE /* Serial port */ /* hng64 writes here */
-// AM_RANGE(0x3a,0x3b) AM_READWRITE /* System control register */ /* hng64 writes here */
-// AM_RANGE(0x3c,0x3f) AM_NOP /* Reserved */
+// map(0x08, 0x1f).noprw(); /* Reserved */
+// map(0x20, 0x25).rw(hng64_state::)); /* Timer/Counter B */ /* hng64 writes here */
+// map(0x27, 0x27).noprw(); /* Reserved */
+// map(0x28, 0x2b).rw(hng64_state::)); /* Timer/Counter A */ /* hng64 writes here */
+// map(0x2c, 0x2f).rw(hng64_state::)); /* Parallel port A */
+// map(0x30, 0x33).rw(hng64_state::)); /* Parallel port B */
+// map(0x34, 0x37).rw(hng64_state::)); /* Interrupt controller */ /* hng64 writes here */
+// map(0x38, 0x39).rw(hng64_state::)); /* Serial port */ /* hng64 writes here */
+// map(0x3a, 0x3b).rw(hng64_state::)); /* System control register */ /* hng64 writes here */
+// map(0x3c, 0x3f).noprw(); /* Reserved */
/* General IO */
map(0x50, 0x57).rw(FUNC(hng64_state::hng64_com_share_r), FUNC(hng64_state::hng64_com_share_w));
-// AM_RANGE(0x72,0x72) AM_WRITE /* dunno yet */
+// map(0x72, 0x72).w(hng64_state::)); /* dunno yet */
}
diff --git a/src/mame/machine/jvs13551.h b/src/mame/machine/jvs13551.h
index 193877cdb16..ca04f387476 100644
--- a/src/mame/machine/jvs13551.h
+++ b/src/mame/machine/jvs13551.h
@@ -24,6 +24,12 @@ public:
template <uint8_t Which, typename T>
void set_port_tag(T &&port_tag) { port[Which].set_tag(std::forward<T>(port_tag)); }
+ template <uint8_t First = 0U, typename T, typename... U>
+ void set_port_tags(T &&first_tag, U &&... other_tags)
+ {
+ set_port_tag<First>(std::forward<T>(first_tag));
+ set_port_tags<First + 1>(std::forward<U>(other_tags)...);
+ }
virtual const tiny_rom_entry *device_rom_region() const override;
@@ -32,6 +38,8 @@ public:
void inc_coin(int coin);
protected:
+ template <uint8_t First> void set_port_tags() { }
+
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
diff --git a/src/mame/machine/mc8123.cpp b/src/mame/machine/mc8123.cpp
index 0ba137c78c3..8580f7dea09 100644
--- a/src/mame/machine/mc8123.cpp
+++ b/src/mame/machine/mc8123.cpp
@@ -59,7 +59,6 @@ The known games that use this CPU are:
CPU # Game Notes Seed Upper Limit
-------- ------------------------- ------------------ ------ -----
-317-5014 DakkoChan Jansoh NEC MC-8123B 206850 1C00
317-0029 Block Gal NEC MC-8123B 651 091755 1800?
317-0030 Perfect Billiard 9451EC 1C00
317-0040 Toki no Senshi - Chrono Soldier 068713 1c00
@@ -69,11 +68,15 @@ CPU # Game Notes Seed Upper Limit
317-0057 Fantasy Zone 2 ADFACE 1800
317-0064 Ufo Senshi Yohko Chan 880603 1C00
317-0066 Altered Beast (sound CPU) NEC MC-8123B 704 ED8600 1800
-317-5002 Gigas NEC MC-8123 638 234567 1C00
+317-5002 Gigas 1 & 2 NEC MC-8123 638 234567 1C00
+317-5004 Eagle Writer Not Dumped
+317-5005 Astro Flash Not Dumped
+317-5008 Perfect Billiard 9451EC 1C00
317-5012 Ganbare Chinsan Ooshoubu NEC MC-8123A 804B54 1C00
+317-5014 DakkoChan Jansoh NEC MC-8123B 206850 1C00
317-5??? Ninja Kid II (sound CPU) NEC MC-8123A 646 27998D 1800
317-???? Center Court (sound CPU) NEC MC-8123B 703 640506 1800
-312-???? Omega 861226 1C00?
+317-???? Omega 861226 1C00?
***************************************************************************/
diff --git a/src/mame/machine/megacd.cpp b/src/mame/machine/megacd.cpp
index 57cf8f61607..2872feaf9e9 100644
--- a/src/mame/machine/megacd.cpp
+++ b/src/mame/machine/megacd.cpp
@@ -82,7 +82,7 @@ void sega_segacd_device::segacd_map(address_map &map)
{
map(0x000000, 0x07ffff).ram().share("prgram");
map(0x080000, 0x0bffff).rw(FUNC(sega_segacd_device::segacd_sub_dataram_part1_r), FUNC(sega_segacd_device::segacd_sub_dataram_part1_w)).share("dataram");
- map(0x0c0000, 0x0dffff).rw(FUNC(sega_segacd_device::segacd_sub_dataram_part2_r), FUNC(sega_segacd_device::segacd_sub_dataram_part2_w)); //AM_SHARE("dataram2")
+ map(0x0c0000, 0x0dffff).rw(FUNC(sega_segacd_device::segacd_sub_dataram_part2_r), FUNC(sega_segacd_device::segacd_sub_dataram_part2_w)); //.share("dataram2");
map(0xfe0000, 0xfe3fff).rw(FUNC(sega_segacd_device::backupram_r), FUNC(sega_segacd_device::backupram_w)).umask16(0x00ff); // backup RAM, odd bytes only!
@@ -118,10 +118,10 @@ void sega_segacd_device::segacd_map(address_map &map)
map(0xff8062, 0xff8063).rw(FUNC(sega_segacd_device::segacd_imagebuffer_hdot_size_r), FUNC(sega_segacd_device::segacd_imagebuffer_hdot_size_w)); // Image buffer H dot size
map(0xff8064, 0xff8065).rw(FUNC(sega_segacd_device::segacd_imagebuffer_vdot_size_r), FUNC(sega_segacd_device::segacd_imagebuffer_vdot_size_w)); // Image buffer V dot size
map(0xff8066, 0xff8067).w(FUNC(sega_segacd_device::segacd_trace_vector_base_address_w));// Trace vector base address
-// AM_RANGE(0xff8068, 0xff8069) // Subcode address
+// map(0xff8068, 0xff8069) // Subcode address
-// AM_RANGE(0xff8100, 0xff817f) // Subcode buffer area
-// AM_RANGE(0xff8180, 0xff81ff) // mirror of subcode buffer area
+// map(0xff8100, 0xff817f) // Subcode buffer area
+// map(0xff8180, 0xff81ff) // mirror of subcode buffer area
}
diff --git a/src/mame/machine/megadriv.cpp b/src/mame/machine/megadriv.cpp
index f87c8e73919..ee96f0d1f17 100644
--- a/src/mame/machine/megadriv.cpp
+++ b/src/mame/machine/megadriv.cpp
@@ -463,7 +463,7 @@ void md_base_state::megadriv_map(address_map &map)
map(0xc00000, 0xc0001f).rw(m_vdp, FUNC(sega315_5313_device::vdp_r), FUNC(sega315_5313_device::vdp_w));
map(0xd00000, 0xd0001f).rw(m_vdp, FUNC(sega315_5313_device::vdp_r), FUNC(sega315_5313_device::vdp_w)); // the earth defend
map(0xe00000, 0xe0ffff).ram().mirror(0x1f0000).share("megadrive_ram");
-// AM_RANGE(0xff0000, 0xffffff) AM_READONLY
+// map(0xff0000, 0xffffff).readonly();
/* 0xe00000 - 0xffffff) == MAIN RAM (64kb, Mirrored, most games use ff0000 - ffffff) */
}
diff --git a/src/mame/machine/mie.h b/src/mame/machine/mie.h
index 9d7df4d4dd2..c5c08440705 100644
--- a/src/mame/machine/mie.h
+++ b/src/mame/machine/mie.h
@@ -32,6 +32,12 @@ public:
template <uint8_t Which, typename T>
void set_gpio_name(T &&gpio_port_tag) { gpio_port[Which].set_tag(std::forward<T>(gpio_port_tag)); }
+ template <uint8_t First = 0U, typename T, typename... U>
+ void set_gpio_names(T &&first_tag, U &&... other_tags)
+ {
+ set_gpio_name<First>(std::forward<T>(first_tag));
+ set_gpio_names<First + 1>(std::forward<U>(other_tags)...);
+ }
DECLARE_READ8_MEMBER(control_r);
DECLARE_WRITE8_MEMBER(control_w);
@@ -70,7 +76,10 @@ public:
void mie_map(address_map &map);
void mie_port(address_map &map);
+
protected:
+ template <uint8_t First> void set_gpio_names() { }
+
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
diff --git a/src/mame/machine/mpu4.cpp b/src/mame/machine/mpu4.cpp
index c7ba1927c32..540951a7193 100644
--- a/src/mame/machine/mpu4.cpp
+++ b/src/mame/machine/mpu4.cpp
@@ -2609,7 +2609,7 @@ void mpu4_state::mpu4_memmap(address_map &map)
map(0x0000, 0x07ff).ram().share("nvram");
map(0x0800, 0x0810).rw(FUNC(mpu4_state::characteriser_r), FUNC(mpu4_state::characteriser_w));
map(0x0850, 0x0850).rw(FUNC(mpu4_state::bankswitch_r), FUNC(mpu4_state::bankswitch_w)); /* write bank (rom page select) */
-/* AM_RANGE(0x08e0, 0x08e7) AM_READWRITE(68681_duart_r,68681_duart_w) */ //Runs hoppers
+/* map(0x08e0, 0x08e7).rw(FUNC(mpu4_state::68681_duart_r), FUNC(mpu4_state::68681_duart_w)); */ //Runs hoppers
map(0x0900, 0x0907).rw(m_6840ptm, FUNC(ptm6840_device::read), FUNC(ptm6840_device::write));/* PTM6840 IC2 */
map(0x0a00, 0x0a03).rw(m_pia3, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); /* PIA6821 IC3 */
map(0x0b00, 0x0b03).rw(m_pia4, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); /* PIA6821 IC4 */
diff --git a/src/mame/machine/mw8080bw.cpp b/src/mame/machine/mw8080bw.cpp
index cabace7c321..9942209eebd 100644
--- a/src/mame/machine/mw8080bw.cpp
+++ b/src/mame/machine/mw8080bw.cpp
@@ -109,7 +109,7 @@ void mw8080bw_state::mw8080bw_start_interrupt_timer( )
*
*************************************/
-MACHINE_START_MEMBER(mw8080bw_state,mw8080bw)
+void mw8080bw_state::machine_start()
{
mw8080bw_create_interrupt_timer();
}
diff --git a/src/mame/machine/namco_c139.cpp b/src/mame/machine/namco_c139.cpp
index b9f9df75aab..447c37346f4 100644
--- a/src/mame/machine/namco_c139.cpp
+++ b/src/mame/machine/namco_c139.cpp
@@ -38,9 +38,9 @@ void namco_c139_device::regs_map(address_map &map)
{
map(0x00, 0x01).r(FUNC(namco_c139_device::status_r)); // WRITE clears flags
map(0x02, 0x03).noprw(); // settings?
-// AM_RANGE(0x0a, 0x0b) // WRITE tx_w
-// AM_RANGE(0x0c, 0x0d) // READ rx_r
-// AM_RANGE(0x0e, 0x0f) //
+// map(0x0a, 0x0b) // WRITE tx_w
+// map(0x0c, 0x0d) // READ rx_r
+// map(0x0e, 0x0f) //
}
//-------------------------------------------------
diff --git a/src/mame/machine/nl_breakout.cpp b/src/mame/machine/nl_breakout.cpp
index 30bef51046b..3d57a511cf5 100644
--- a/src/mame/machine/nl_breakout.cpp
+++ b/src/mame/machine/nl_breakout.cpp
@@ -1,8 +1,11 @@
// license:GPL-2.0+
// copyright-holders:DICE Team,Couriersud
+
/*
* Changelog:
*
+ * - Drop dice syntax (Couriersud)
+ * - Fix brick display (Couriersud)
* - Added led and lamp components (Couriersud)
* - Start2 works (Couriersud)
* - Added discrete paddle potentiometers (Couriersud)
@@ -63,108 +66,98 @@
*
*/
+#include "netlist/devices/net_lib.h"
-// identify unknown devices in IDE
-
-#define NETLIST_DEVELOPMENT 0
-
-#include "netlist/nl_dice_compat.h"
-
-#define SLOW_BUT_ACCURATE 0
-
-//2 555 timers
-static Astable555Desc b2_555_desc(OHM(560.0), M_OHM(1.8), U_FARAD(0.1));
-
-static Mono555Desc c9_555_desc(OHM(47000.0), U_FARAD(1.0)); // R33, C21
-
-static CapacitorDesc c32_desc(U_FARAD(0.1));
-static CapacitorDesc c36_desc(N_FARAD(1.0*.7)); //0.001uF = 1nF - determines horizontal gap between bricks
-static CapacitorDesc c37_desc(P_FARAD(330.0));
+#define SLOW_BUT_ACCURATE (0)
-static Mono9602Desc n8_desc(K_OHM(33.0), U_FARAD(100.0), K_OHM(5.6), P_FARAD(0)); // No capacitor on 2nd 9602
-static Mono9602Desc f3_desc(K_OHM(47.0), U_FARAD(1.0), K_OHM(47.0), U_FARAD(1.0));
-
-static Mono9602Desc a7_desc(K_OHM(68.0), U_FARAD(1.0), K_OHM(22.0), U_FARAD(10.0));
-static Mono9602Desc a8_desc(K_OHM(27.0), U_FARAD(1.0), K_OHM(27.0), U_FARAD(1.0));
-
-CIRCUIT_LAYOUT( breakout )
+NETLIST_START(breakout)
#if (SLOW_BUT_ACCURATE)
- SOLVER(Solver, 48000)
+ //SOLVER(Solver, 48000)
+ SOLVER(Solver, 16000)
PARAM(Solver.ACCURACY, 1e-7) // less accuracy and diode will not work
+ PARAM(Solver.DYNAMIC_TS, 1)
+ PARAM(Solver.DYNAMIC_LTE, 1e-2)
+ PARAM(Solver.DYNAMIC_MIN_TIMESTEP, 1e-8)
PARAM(Solver.METHOD, "MAT_CR")
#else
- SOLVER(Solver, 48000)
- PARAM(Solver.ACCURACY, 1e-6)
- PARAM(Solver.DYNAMIC_TS, 0)
- //PARAM(Solver.LTE, 1e-10)
+ //SOLVER(Solver, 48000)
+ SOLVER(Solver, 16000)
+ PARAM(Solver.ACCURACY, 1e-4)
+ PARAM(Solver.DYNAMIC_TS, 1)
+ PARAM(Solver.DYNAMIC_LTE, 1e-2)
PARAM(Solver.DYNAMIC_MIN_TIMESTEP, 1e-8)
PARAM(Solver.METHOD, "MAT_CR")
#endif
PARAM(NETLIST.USE_DEACTIVATE, 1)
- // DIPSWITCH - Free game
+ //----------------------------------------------------------------
+ // Dip-Switch - Free game
+ //----------------------------------------------------------------
SWITCH(S1_1)
SWITCH(S1_2)
SWITCH(S1_3)
SWITCH(S1_4)
- SWITCH2(COIN1) // Coin 1
- SWITCH2(COIN2) // Coin 2
+ SWITCH2(COIN1) // Coin 1
+ SWITCH2(COIN2) // Coin 2
- SWITCH(START1) // Start 1
- SWITCH(START2) // Start 2
+ SWITCH(START1) // Start 1
+ SWITCH(START2) // Start 2
- SWITCH(SERVE) // Start 2
+ SWITCH(SERVE) // Start 2
- SWITCH(S2) // Cocktail
- SWITCH(S3) // 2 Plays / 25c
+ SWITCH(S2) // Cocktail
+ SWITCH(S3) // 2 Plays / 25c
SWITCH2(S4) // Three Balls / 5 Balls
ANALOG_INPUT(V5, 5)
ALIAS(VCC, V5)
-#define GNDD "GND", Q
-#define P "V5", Q
+ ALIAS(GNDD ,GND.Q)
+ ALIAS(P ,V5.Q)
//----------------------------------------------------------------
// Clock circuit
//----------------------------------------------------------------
+
#if (SLOW_BUT_ACCURATE)
MAINCLOCK(Y1, 14318000.0)
- CHIP("F1", 9316)
+ TTL_9316_DIP(F1)
NET_C(Y1.Q, F1.2)
- CONNECTION("F1", 14, "H1", 13)
- CONNECTION("F1", 13, "H1", 12)
- CONNECTION("F1", 15, "E1", 5)
- CONNECTION(P, "F1", 1)
- CONNECTION(P, "F1", 7)
- CONNECTION(P, "F1", 10)
- CONNECTION(GNDD, "F1", 3)
- CONNECTION(P, "F1", 4)
- CONNECTION(GNDD, "F1", 5)
- CONNECTION(GNDD, "F1", 6)
- CONNECTION("E1", 6, "F1", 9)
-
-#define CKBH "F1", 13
-#define DICECLOCK "H1", 11
+ NET_C(F1.14, H1.13)
+ NET_C(F1.13, H1.12)
+ NET_C(F1.15, E1.5)
+ NET_C(P, F1.1)
+ NET_C(P, F1.7)
+ NET_C(P, F1.10)
+ NET_C(GNDD, F1.3)
+ NET_C(P, F1.4)
+ NET_C(GNDD, F1.5)
+ NET_C(GNDD, F1.6)
+ NET_C(E1.6, F1.9)
+
+ ALIAS(CKBH, F1.13)
+ ALIAS(CLOCK, H1.11)
+
#else
/*
* 9316 2 3 4 5 6 7 8 9 10 11 12 13 14 15 2 3 4 5 6
* A 0 1 0 1 0 1 0 1 0 1 0 1 0 1
* B 1 1 0 0 1 1 0 0 1 1 0 0 1 1
- * CKBH 1 1 0 0 1 1 0 0 1 1 0 0 1 1 1 1
- * ^--- Pattern Start
- * CLOCK 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1
- * ^--- Pattern Start
- * <--------> 3 Clocks Offset
+ * CKBH 1 1 0 0 1 1 0 0 1 1 0 0 1 1
+ * ^--- Pattern Start
+ * CLOCK 1 0 1 1 1 0 1 1 1 0 1 1 1 0
+ * ^--- Pattern Start
+ * <------> 2 Clocks Offset
*/
- EXTCLOCK(Y2, 14318000.0, "2,6,2,6,2,2,2,6")
- EXTCLOCK(Y1, 14318000.0, "4,4,4,4,4,8")
- PARAM(Y2.OFFSET, 3.0 / 14318000.0 + 20.0e-9 )
-#define CKBH "Y1", Q
-#define DICECLOCK "Y2", Q
+ //EXTCLOCK(Y2, 14318000.0, "2,6,2,6,2,2,2,6")
+ EXTCLOCK(Y2, 14318000.0, "6,2,6,2,2,2,6,2")
+ EXTCLOCK(Y1, 14318000.0, "4,4,4,4,8,4")
+ PARAM(Y2.OFFSET, 1.047632350887E-07) // 1.5 clocks / 14318000.0
+ ALIAS(CKBH, Y1.Q)
+ ALIAS(CLOCK, Y2.Q)
NET_C(ttlhigh, H1.13)
NET_C(ttlhigh, H1.12)
@@ -199,359 +192,449 @@ CIRCUIT_LAYOUT( breakout )
NET_C(GND, CR5.A, Q2.E, C16.2, R25.2, Q3.E)
NET_C(CR5.K, Q2.B, antenna)
NET_C(Q2.C, C16.1, R25.1, Q3.B, R27.2)
- NET_C(R27.1, CR7.A, R31.2) //CR7.K == IN
+ NET_C(R27.1, CR7.A, R31.2) //CR7.K == IN
NET_C(R31.1, Q1.C)
NET_C(Q3.C, R26.2, CR3.A, CR4.A, E9.5) // E9.6 = Q Q3.C=QQ CR3.K = COIN*1 CR4.K = COIN*2
NET_C(R26.1, Q1.B, C19.2, R32.2)
NET_C(Q1.E, C19.1, R32.1, V5)
- #define LAT_Q "E9", 6
- #define Q_n "Q3", C
- #define COIN1_n "F8", 5
- #define COIN2_n "H9", 5
-
- CONNECTION("CR7", K, "D8", 11) //set
- CONNECTION("CR3", K, COIN1_n) //reset
- CONNECTION("CR4", K, COIN2_n) //reset
-
-
- CHIP_CAPACITOR(C32, &c32_desc)
- CHIP_CAPACITOR(C36, &c36_desc)
- CHIP_CAPACITOR(C37, &c37_desc)
-
- CHIP("A3", 7474)
- CHIP("A4", 7408)
- CHIP("A5", 7400)
- CHIP("A6", 7474)
- CHIP_9602_Mono(A7, &a7_desc)
- CHIP_9602_Mono(A8, &a8_desc)
-
- CHIP_555_Astable(B2, &b2_555_desc)
- CHIP("B3", 7402)
- CHIP("B4", 9316)
- CHIP("B5", 74193)
- CHIP("B6", 7400)
- CHIP("B7", 9316)
- CHIP("B8", 9316)
- CHIP("B9", 7408)
-
- CHIP("C2", 7400)
- CHIP("C3", 7400)
- CHIP("C4", 7486)
- CHIP("C5", 7404)
- CHIP("C6", 7486)
- CHIP("C7", 9316)
- CHIP("C8", 9316)
- //CHIP_555_Mono(C9, &c9_555_desc)
+ ALIAS(LAT_Q ,E9.6)
+ ALIAS(Q_n ,Q3.C)
+ ALIAS(COIN1_n ,F8.5)
+ ALIAS(COIN2_n ,H9.5)
+
+ NET_C(CR7.K, D8.11) //set
+ NET_C(CR3.K, COIN1_n) //reset
+ NET_C(CR4.K, COIN2_n) //reset
+
+
+ //static CapacitorDesc c32_desc(CAP_U(0.1));
+ //NETDEV_DELAY(C32) NETDEV_PARAMI(C32, L_TO_H, CAPACITOR_tc_lh((&c32_desc)->c, (&c32_desc)->r)) NETDEV_PARAMI(C32, H_TO_L, CAPACITOR_tc_hl((&c32_desc)->c, (&c32_desc)->r))
+
+ CAP(C32, CAP_U(0.1))
+ NET_C(GND, C32.2)
+
+#if (SLOW_BUT_ACCURATE)
+ CAP(C36, CAP_N(1.0)) //0.001uF = 1nF - determines horizontal gap between bricks
+ NET_C(GND, C36.2)
+#else
+ NETDEV_DELAY(C36)
+ PARAM(C36.L_TO_H, 93)
+ PARAM(C36.H_TO_L, 2)
+#endif
+
+ CAP(C37, CAP_P(330))
+ NET_C(GND, C37.2)
+
+ TTL_7474_DIP(A3)
+ TTL_7408_DIP(A4)
+ TTL_7400_DIP(A5)
+ TTL_7474_DIP(A6)
+
+
+ TTL_9602_DIP(A7)
+ NET_C(VCC, A7.16)
+ NET_C(GND, A7.8)
+ RES(R45, RES_K(68))
+ CAP(CC24, CAP_U(1))
+ RES(R46, RES_K(22))
+ NET_C(A7.1, CC24.1)
+ NET_C(A7.2, CC24.2)
+ NET_C(A7.2, R45.2)
+ NET_C(VCC, R45.1)
+ CAP(CC25, CAP_U(10))
+ NET_C(A7.15, CC25.1)
+ NET_C(A7.14, CC25.2)
+ NET_C(A7.14, R46.2)
+ NET_C(VCC, R46.1)
+
+ TTL_9602_DIP(A8)
+ NET_C(VCC, A8.16)
+ NET_C(GND, A8.8)
+ RES(R47, RES_K(27))
+ CAP(CC26, CAP_U(1))
+ RES(R48, RES_K(27))
+ NET_C(A8.1, CC26.1)
+ NET_C(A8.2, CC26.2)
+ NET_C(A8.2, R47.2)
+ NET_C(VCC, R47.1)
+ CAP(CC27, CAP_U(1))
+ NET_C(A8.15, CC27.1)
+ NET_C(A8.14, CC27.2)
+ NET_C(A8.14, R48.2)
+ NET_C(VCC, R48.1)
+
+ NE555_DIP(B2)
+ RES(R55, 560)
+ RES(R54, RES_M(1.8))
+ CAP(C34, CAP_U(0.1))
+ NET_C(B2.7, R55.1)
+ NET_C(B2.7, R54.1)
+ NET_C(B2.6, R54.2)
+ NET_C(B2.6, C34.1)
+ NET_C(B2.2, C34.1)
+ NET_C(R55.2, V5)
+ NET_C(C34.2, GND)
+ NET_C(B2.8, V5)
+ NET_C(B2.1, GND)
+ TTL_7402_DIP(B3)
+ TTL_9316_DIP(B4)
+ TTL_74193_DIP(B5)
+ TTL_7400_DIP(B6)
+ TTL_9316_DIP(B7)
+ TTL_9316_DIP(B8)
+ TTL_7408_DIP(B9)
+
+ TTL_7400_DIP(C2)
+ TTL_7400_DIP(C3)
+ TTL_7486_DIP(C4)
+ TTL_7404_DIP(C5)
+ TTL_7486_DIP(C6)
+ TTL_9316_DIP(C7)
+ TTL_9316_DIP(C8)
+
NE555_DIP(C9)
- CHIP("D2", 7432)
- CHIP("D3", 7474)
- CHIP("D4", 9316)
- CHIP("D5", 7474)
- CHIP("D6", 7408)
- CHIP("D7", 7411)
- CHIP("D8", 7400)
-// CHIP("D9", 4016) //quad bilateral switch
-
- CHIP("E1", 7404)
- CHIP("E2", 7486)
- CHIP("E3", 7402)
- CHIP("E4", 7432)
- CHIP("E5", 7408)
- CHIP("E6", 7474)
- CHIP("E7", 7402)
- CHIP("E8", 7474)
- CHIP("E9", 7404)
-
- CHIP("F2", 7411)
- CHIP_9602_Mono(F3, &f3_desc)
- CHIP("F4", 7474)
- CHIP("F5", 7474)
- CHIP("F6", 74193)
- CHIP("F7", 74279)
- CHIP("F8", 7474)
- CHIP("F9", 7404)
-
- CHIP("H1", 7437)
- CHIP("H2", 7408)
- CHIP("H3", 7427)
- CHIP("H4", 7400)
+ TTL_7432_DIP(D2)
+ TTL_7474_DIP(D3)
+ TTL_9316_DIP(D4)
+ TTL_7474_DIP(D5)
+ TTL_7408_DIP(D6)
+ TTL_7411_DIP(D7)
+ TTL_7400_DIP(D8)
+ // CHIP("D9", 4016) //quad bilateral switch
+
+ TTL_7404_DIP(E1)
+ TTL_7486_DIP(E2)
+ TTL_7402_DIP(E3)
+ TTL_7432_DIP(E4)
+ TTL_7408_DIP(E5)
+ TTL_7474_DIP(E6)
+ TTL_7402_DIP(E7)
+ TTL_7474_DIP(E8)
+ TTL_7404_DIP(E9)
+
+ TTL_7411_DIP(F2)
+
+ TTL_9602_DIP(F3)
+ NET_C(VCC, F3.16)
+ NET_C(GND, F3.8)
+ RES(R22, RES_K(47))
+ CAP(CC14, CAP_U(1))
+ RES(R23, RES_K(47))
+ NET_C(F3.1, CC14.1)
+ NET_C(F3.2, CC14.2)
+ NET_C(F3.2, R22.2)
+ NET_C(VCC, R22.1)
+ CAP(CC15, CAP_U(1))
+ NET_C(F3.15, CC15.1)
+ NET_C(F3.14, CC15.2)
+ NET_C(F3.14, R23.2)
+ NET_C(VCC, R23.1)
+
+ TTL_7474_DIP(F4)
+ TTL_7474_DIP(F5)
+ TTL_74193_DIP(F6)
+ TTL_74279_DIP(F7)
+ TTL_7474_DIP(F8)
+ TTL_7404_DIP(F9)
+
+ TTL_7437_DIP(H1)
+ TTL_7408_DIP(H2)
+ TTL_7427_DIP(H3)
+ TTL_7400_DIP(H4)
DM9312_DIP(H5)
- CHIP("H6", 9310)
- CHIP("H7", 7408) //sometimes looks like N7 on schematic
- //PARAM(H7.USE_DEACTIVATE, 0)
- CHIP("H8", 7474)
- CHIP("H9", 7474)
-
- CHIP("J1", 74175)
- CHIP("J2", 7404)
- CHIP("J3", 7402)
+ TTL_9310_DIP(H6)
+ TTL_7408_DIP(H7)
+
+ TTL_7474_DIP(H8)
+ TTL_7474_DIP(H9)
+
+ TTL_74175_DIP(J1)
+ TTL_7404_DIP(J2)
+ TTL_7402_DIP(J3)
DM9312_DIP(J4)
- CHIP("J5", 7448)
- CHIP("J6", 9310)
- CHIP("J7", 7420)
- CHIP("J8", 74279)
- CHIP("J9", 7410)
-
- CHIP("K1", 9316)
- CHIP("K2", 7486)
- CHIP("K3", 7430)
- CHIP("K4", 7408)
+ TTL_7448_DIP(J5)
+ TTL_9310_DIP(J6)
+ TTL_7420_DIP(J7)
+ TTL_74279_DIP(J8)
+ TTL_7410_DIP(J9)
+
+ TTL_9316_DIP(K1)
+ TTL_7486_DIP(K2)
+ TTL_7430_DIP(K3)
+ TTL_7408_DIP(K4)
DM9312_DIP(K5)
- CHIP("K6", 9310)
- CHIP("K7", 7486)
- CHIP("K8", 7474) //TODO: one more than bom?
- CHIP("K9", 74107)
-
- CHIP("L1", 9316)
- CHIP("L2", 7486)
- CHIP("L3", 82S16) //RAM
- CHIP("L4", 7411)
+ TTL_9310_DIP(K6)
+ TTL_7486_DIP(K7)
+ TTL_7474_DIP(K8)
+ TTL_74107_DIP(K9)
+
+ TTL_9316_DIP(L1)
+ TTL_7486_DIP(L2)
+ TTL_82S16_DIP(L3) // Ram chip
+ TTL_7411_DIP(L4)
DM9312_DIP(L5)
- CHIP("L6", 9310)
- CHIP("L7", 7486)
- CHIP("L8", 74193)
- CHIP("L9", 7400) //TODO: 1 more chip than on bom?
-
- CHIP("M1", 9316)
- CHIP("M2", 7483)
- CHIP("M3", 7486)
- CHIP("M4", 7410)
+ TTL_9310_DIP(L6)
+ TTL_7486_DIP(L7)
+ TTL_74193_DIP(L8)
+ TTL_7400_DIP(L9)
+
+ TTL_9316_DIP(M1)
+ TTL_7483_DIP(M2)
+ TTL_7486_DIP(M3)
+ TTL_7410_DIP(M4)
DM9312_DIP(M5)
- CHIP("M6", 9310)
- CHIP("M8", 7427)
- CHIP("M9", 7404)
-
- CHIP("N1", 9316)
- CHIP("N2", 7483)
- CHIP("N3", 7486)
- CHIP("N4", 7411)
+ TTL_9310_DIP(M6)
+ TTL_7427_DIP(M8)
+ TTL_7404_DIP(M9)
+
+ TTL_9316_DIP(N1)
+ TTL_7483_DIP(N2)
+ TTL_7486_DIP(N3)
+ TTL_7411_DIP(N4)
DM9312_DIP(N5)
- CHIP("N6", 9310)
- CHIP("N7", 7408) //sometimes looks like H7 on schematic
- CHIP_9602_Mono(N8, &n8_desc)
- CHIP("N9", 74192)
-
- //LM380 //speaker amplifier
- //LM323 //regulator
-
- //HSYNC and VSYNC
- #define H1_d "L1", 14
- #define H2_d "L1", 13
- #define H4_d "L1", 12
- #define H8_d "L1", 11
- #define H8_n "J2", 2
- #define H16_d "K1", 14
- #define H16_n "J2", 6
- #define H32_d "K1", 13
- #define H32_n "J2", 4
- #define H64_d "K1", 12
- #define H128_d "K1", 11
-
- #define V1_d "M1", 14
- #define V2_d "M1", 13
- #define V4_d "M1", 12
- #define V8_d "M1", 11
- #define V16_d "N1", 14
- #define V16_n "J2", 10
- #define V32_d "N1", 13
- #define V64_d "N1", 12
- #define V64I "H7", 11
- #define V64_n "M9", 10
- #define V128_d "N1", 11
-
- #define H1 "L2", 8
- #define H2 "L2", 11
- #define H4 "L2", 3
- #define H8 "L2", 6
- #define H16 "K2", 8
- #define H32 "K2", 11
- #define H64 "K2", 3
- #define H128 "K2", 6
-
- //#define V1
- #define V2 "M3", 3
- #define V4 "M3", 6
- #define V8 "M3", 11
- #define V16 "N3", 8
- #define V32 "N3", 3
- #define V64 "N3", 6
- #define V128 "N3", 11
-
- #define HSYNC "J1", 2
- #define HSYNC_n "J1", 3
- #define VSYNC "J1", 7
- #define VSYNC_n "J1", 6
- #define PSYNC "J1", 11
- #define PSYNC_n "J1", 10
- #define BSYNC "J1", 15
- #define BSYNC_n "J1", 14
-
- #define BALL "D7", 6
- #define BALL_DISPLAY "A4", 6
- #define PLAYFIELD "H4", 3
- #define SCORE "D3", 5
- #define VERT_TRIG_n "H1", 8
-
- #define SCLOCK "K1", 15
-
- #define PAD_n "K3", 8
- #define PAD_EN_n "C2", 8
-
- #define COIN "L9", 6
- #define CREDIT_1_OR_2 "L9", 3
- #define CREDIT_1_OR_2_n "F9", 8
- #define CREDIT2 "F9", 6
- #define CREDIT2_n "M8", 8
- #define CR_START1 "E8", 5
- #define CR_START1_n "E8", 6 //Schematic shows E8.6 as positive CR_START1, but this can't be right?
- #define CR_START2 "E8", 9
- #define CR_START2_n "E8", 8
- #define CSW1 "F9", 12
- #define CSW2 "F9", 2
-
- #define P2_CONDITIONAL "H1", 3
- #define P2_CONDITIONAL_dash "H7", 8
- #define PLAYER_2 "B4", 14
- #define PLAYER_2_n "M9", 8
-
- #define START_GAME "D8", 6
- #define START_GAME1_n "M9", 4
- #define START_GAME_n "M9", 6
-
- #define BG1_n "K8", 9
- #define BG1 "K8", 8
- #define BG2_n "K8", 5
- #define BG2 "K8", 6
-
- #define FREE_GAME_TONE "N7", 3
- #define BONUS_COIN "L9", 11
-
- #define SBD_n "D2", 11
-
- #define PLAY_CP "D2", 8
- #define PLGM2_n "F7", 7
- #define VB_HIT_n "A5", 6
-
- #define SERVE_n "SERVE", 1
- #define SERVE_WAIT "A3", 9
- #define SERVE_WAIT_n "A3", 8
-
- #define BRICK_DISPLAY "E3", 1
- #define BRICK_HIT "E6", 5
- #define BRICK_HIT_n "E6", 6
-
- //#define EGL "A4", 3
- #define EGL "C37" , 2
- #define EGL_n "C5", 2
-
- #define RAM_PLAYER1 "E7", 4
- #define A1 "H6", 14
- #define B1 "H6", 13
- #define C1 "H6", 12
- #define D1 "H6", 11
- #define E1 "J6", 14
- #define F1 "J6", 13
- #define G1 "J6", 12
- #define H01 "J6", 11
- #define I1 "K6", 14
- #define J1 "K6", 13
- #define K1 "K6", 12
- #define L1 "K6", 11
- #define A2 "N6", 14
- #define B2 "N6", 13
- #define C2 "N6", 12
- #define D2 "N6", 11
- #define E2s "M6", 14
- #define F2 "M6", 13
- #define G2 "M6", 12
- #define H02 "M6", 11 //TODO: better name for these signals
- #define I2 "L6", 14
- #define J2 "L6", 13
- #define K2 "L6", 12
- #define L2 "L6", 11
-
- #define CX0 "C6", 11
- #define CX1 "C6", 6
- #define X0 "C5", 10
- #define X1 "B6", 3
- #define X2 "C6", 3
- #define Y0 "B6", 11
- #define Y1 "B6", 6
- #define Y2 "A6", 6
- #define DN "C4", 3
- #define PC "D4", 12
- #define PD "D4", 11
- #define SU_n "D5", 8
- #define V_SLOW "C5", 8
-
- #define PLNR "E3", 4
- #define SCI_n "H4", 6
- #define SFL_n "E9", 12 //score flash
- #define TOP_n "E9", 2
-
- #define BP_HIT_n "A5", 8
- #define BTB_HIT_n "C3", 3
-
- #define SET_BRICKS "D3", 9
- #define SET_BRICKS_n "D3", 8
-
- #define BALL_A "B4", 13
- #define BALL_B "B4", 12
- #define BALL_C "B4", 11
-
- #define FPD1 "F3", 10
- #define FPD1_n "F3", 9
- #define FPD2 "F3", 6
- #define FPD2_n "F3", 7
-
- #define COUNT "N7", 11
- #define COUNT_1 "N7", 8
- #define COUNT_2 "N7", 6
-
- #define ATTRACT "E6", 8
- #define ATTRACT_n "E6", 9
-
- #define BRICK_SOUND "B8", 14
- #define P_HIT_SOUND "B7", 12
- #define VB_HIT_SOUND "B7", 11
-
- #define LH_SIDE "J3", 13
- #define RH_SIDE "H2", 3
- #define TOP_BOUND "K4", 6
-
- //Audio
- CONNECTION("M9", 2, "F6", 5)
- CONNECTION("M9", 2, "F7", 15)
- CONNECTION("F6", 13, "F7", 14)
- CONNECTION(START_GAME_n, "F6", 11)
- CONNECTION(P, "F6", 15)
- CONNECTION(P, "F6", 1)
- CONNECTION(P, "F6", 10)
- CONNECTION(P, "F6", 9)
- CONNECTION(GNDD, "F6", 14)
- CONNECTION("F7", 13, "J9", 2)
- CONNECTION(VSYNC, "J9", 1)
- CONNECTION("A7", 9, "J9", 13)
- CONNECTION("J9", 12, "F6", 4)
- CONNECTION("J9", 12, "A7", 11)
- CONNECTION(GNDD, "A7", 12)
- CONNECTION(ATTRACT_n, "A7", 13)
- CONNECTION("J9", 12, "A8", 11)
- CONNECTION(GNDD, "A8", 12)
- CONNECTION(ATTRACT_n, "A8", 13)
- CONNECTION(VB_HIT_n, "A7", 5)
- CONNECTION(GNDD, "A7", 4)
- CONNECTION(ATTRACT_n, "A7", 3)
- CONNECTION(BP_HIT_n, "A8", 5)
- CONNECTION(GNDD, "A8", 4)
- CONNECTION(ATTRACT_n, "A8", 3)
- CONNECTION("A8", 6, "B9", 13)
- CONNECTION(P_HIT_SOUND, "B9", 12)
- CONNECTION("A8", 10, "B9", 10)
- CONNECTION(BRICK_SOUND, "B9", 9)
- CONNECTION("A7", 6, "B9", 4)
- CONNECTION(VB_HIT_SOUND, "B9", 5)
+ TTL_9310_DIP(N6)
+ TTL_7408_DIP(N7)
+
+ TTL_9602_DIP(N8)
+ NET_C(VCC, N8.16)
+ NET_C(GND, N8.8)
+ RES(R2, RES_K(33))
+ CAP(CC2, CAP_U(100))
+ RES(R3, RES_K(5.6))
+ NET_C(N8.1, CC2.1)
+ NET_C(N8.2, CC2.2)
+ NET_C(N8.2, R2.2)
+ NET_C(VCC, R2.1)
+ NET_C(N8.14, R3.2)
+ NET_C(VCC, R3.1)
+ TTL_74192_DIP(N9)
+
+ //LM380 //speaker amplifier - not emulated
+ //LM323 //regulator - not emulated
+
+ //----------------------------------------------------------------
+ // HSYNC and VSYNC
+ //----------------------------------------------------------------
+
+ ALIAS(H1_d ,L1.14)
+ ALIAS(H2_d ,L1.13)
+ ALIAS(H4_d ,L1.12)
+ ALIAS(H8_d ,L1.11)
+ ALIAS(H8_n ,J2.2)
+ ALIAS(H16_d ,K1.14)
+ ALIAS(H16_n ,J2.6)
+ ALIAS(H32_d ,K1.13)
+ ALIAS(H32_n ,J2.4)
+ ALIAS(H64_d ,K1.12)
+ ALIAS(H128_d ,K1.11)
+
+ ALIAS(V1_d ,M1.14)
+ ALIAS(V2_d ,M1.13)
+ ALIAS(V4_d ,M1.12)
+ ALIAS(V8_d ,M1.11)
+ ALIAS(V16_d ,N1.14)
+ ALIAS(V16_n ,J2.10)
+ ALIAS(V32_d ,N1.13)
+ ALIAS(V64_d ,N1.12)
+ ALIAS(V64I ,H7.11)
+ ALIAS(V64_n ,M9.10)
+ ALIAS(V128_d ,N1.11)
+
+ ALIAS(H1 ,L2.8)
+ ALIAS(H2 ,L2.11)
+ ALIAS(H4 ,L2.3)
+ ALIAS(H8 ,L2.6)
+ ALIAS(H16 ,K2.8)
+ ALIAS(H32 ,K2.11)
+ ALIAS(H64 ,K2.3)
+ ALIAS(H128 ,K2.6)
+
+ ALIAS(V2 ,M3.3)
+ ALIAS(V4 ,M3.6)
+ ALIAS(V8 ,M3.11)
+ ALIAS(V16 ,N3.8)
+ ALIAS(V32 ,N3.3)
+ ALIAS(V64 ,N3.6)
+ ALIAS(V128 ,N3.11)
+
+ ALIAS(HSYNC ,J1.2)
+ ALIAS(HSYNC_n ,J1.3)
+ ALIAS(VSYNC ,J1.7)
+ ALIAS(VSYNC_n ,J1.6)
+ ALIAS(PSYNC ,J1.11)
+ ALIAS(PSYNC_n ,J1.10)
+ ALIAS(BSYNC ,J1.15)
+ ALIAS(BSYNC_n ,J1.14)
+
+ ALIAS(BALL ,D7.6)
+ ALIAS(BALL_DISPLAY ,A4.6)
+ ALIAS(PLAYFIELD ,H4.3)
+ ALIAS(SCORE ,D3.5)
+ ALIAS(VERT_TRIG_n ,H1.8)
+
+ ALIAS(SCLOCK ,K1.15)
+
+ ALIAS(PAD_n ,K3.8)
+ ALIAS(PAD_EN_n ,C2.8)
+
+ ALIAS(COIN ,L9.6)
+ ALIAS(CREDIT_1_OR_2 ,L9.3)
+ ALIAS(CREDIT_1_OR_2_n ,F9.8)
+ ALIAS(CREDIT2 ,F9.6)
+ ALIAS(CREDIT2_n ,M8.8)
+ ALIAS(CR_START1 ,E8.5)
+ ALIAS(CR_START1_n ,E8.6) //Schematic shows E8.6 as positive CR_START1, but this can't be right?
+ ALIAS(CR_START2 ,E8.9)
+ ALIAS(CR_START2_n ,E8.8)
+ ALIAS(CSW1 ,F9.12)
+ ALIAS(CSW2 ,F9.2)
+
+ ALIAS(P2_CONDITIONAL ,H1.3)
+ ALIAS(P2_CONDITIONAL_dash ,H7.8)
+ ALIAS(PLAYER_2 ,B4.14)
+ ALIAS(PLAYER_2_n ,M9.8)
+
+ ALIAS(START_GAME ,D8.6)
+ ALIAS(START_GAME1_n ,M9.4)
+ ALIAS(START_GAME_n ,M9.6)
+
+ ALIAS(BG1_n ,K8.9)
+ ALIAS(BG1 ,K8.8)
+ ALIAS(BG2_n ,K8.5)
+ ALIAS(BG2 ,K8.6)
+
+ ALIAS(FREE_GAME_TONE ,N7.3)
+ ALIAS(BONUS_COIN ,L9.11)
+
+ ALIAS(SBD_n ,D2.11)
+
+ ALIAS(PLAY_CP ,D2.8)
+ ALIAS(PLGM2_n ,F7.7)
+ ALIAS(VB_HIT_n ,A5.6)
+
+ ALIAS(SERVE_n ,SERVE.1)
+ ALIAS(SERVE_WAIT ,A3.9)
+ ALIAS(SERVE_WAIT_n ,A3.8)
+
+ ALIAS(BRICK_DISPLAY ,E3.1)
+ ALIAS(BRICK_HIT ,E6.5)
+ ALIAS(BRICK_HIT_n ,E6.6)
+
+ //ALIAS(EGL ,A4.3)
+ ALIAS(EGL ,C37.1)
+ ALIAS(EGL_n ,C5.2)
+
+ ALIAS(RAM_PLAYER1 ,E7.4)
+ ALIAS(A1 ,H6.14)
+ ALIAS(B1 ,H6.13)
+ ALIAS(C1 ,H6.12)
+ ALIAS(D1 ,H6.11)
+ ALIAS(E1 ,J6.14)
+ ALIAS(F1 ,J6.13)
+ ALIAS(G1 ,J6.12)
+ ALIAS(H01 ,J6.11)
+ ALIAS(I1 ,K6.14)
+ ALIAS(J1 ,K6.13)
+ ALIAS(K1 ,K6.12)
+ ALIAS(L1 ,K6.11)
+ ALIAS(A2 ,N6.14)
+ ALIAS(B2 ,N6.13)
+ ALIAS(C2 ,N6.12)
+ ALIAS(D2 ,N6.11)
+ ALIAS(E2s ,M6.14)
+ ALIAS(F2 ,M6.13)
+ ALIAS(G2 ,M6.12)
+ ALIAS(H02 ,M6.11)
+ ALIAS(I2 ,L6.14)
+ ALIAS(J2 ,L6.13)
+ ALIAS(K2 ,L6.12)
+ ALIAS(L2 ,L6.11)
+
+ ALIAS(CX0 ,C6.11)
+ ALIAS(CX1 ,C6.6)
+ ALIAS(X0 ,C5.10)
+ ALIAS(X1 ,B6.3)
+ ALIAS(X2 ,C6.3)
+ ALIAS(Y0 ,B6.11)
+ ALIAS(Y1 ,B6.6)
+ ALIAS(Y2 ,A6.6)
+ ALIAS(DN ,C4.3)
+ ALIAS(PC ,D4.12)
+ ALIAS(PD ,D4.11)
+ ALIAS(SU_n ,D5.8)
+ ALIAS(V_SLOW ,C5.8)
+
+ ALIAS(PLNR ,E3.4)
+ ALIAS(SCI_n ,H4.6)
+ ALIAS(SFL_n ,E9.12) // Score Flash
+ ALIAS(TOP_n ,E9.2)
+
+ ALIAS(BP_HIT_n ,A5.8)
+ ALIAS(BTB_HIT_n ,C3.3)
+
+ ALIAS(SET_BRICKS ,D3.9)
+ ALIAS(SET_BRICKS_n ,D3.8)
+
+ ALIAS(BALL_A ,B4.13)
+ ALIAS(BALL_B ,B4.12)
+ ALIAS(BALL_C ,B4.11)
+
+ ALIAS(FPD1 ,F3.10)
+ ALIAS(FPD1_n ,F3.9)
+ ALIAS(FPD2 ,F3.6)
+ ALIAS(FPD2_n ,F3.7)
+
+ ALIAS(COUNT ,N7.11)
+ ALIAS(COUNT_1 ,N7.8)
+ ALIAS(COUNT_2 ,N7.6)
+
+ ALIAS(ATTRACT ,E6.8)
+ ALIAS(ATTRACT_n ,E6.9)
+
+ ALIAS(BRICK_SOUND ,B8.14)
+ ALIAS(P_HIT_SOUND ,B7.12)
+ ALIAS(VB_HIT_SOUND ,B7.11)
+
+ ALIAS(LH_SIDE ,J3.13)
+ ALIAS(RH_SIDE ,H2.3)
+ ALIAS(TOP_BOUND ,K4.6)
+
+ //----------------------------------------------------------------
+ // Audio circuit
+ //----------------------------------------------------------------
+
+ NET_C(M9.2, F6.5)
+ NET_C(M9.2, F7.15)
+ NET_C(F6.13, F7.14)
+ NET_C(START_GAME_n, F6.11)
+ NET_C(P, F6.15)
+ NET_C(P, F6.1)
+ NET_C(P, F6.10)
+ NET_C(P, F6.9)
+ NET_C(GNDD, F6.14)
+ NET_C(F7.13, J9.2)
+ NET_C(VSYNC, J9.1)
+ NET_C(A7.9, J9.13)
+ NET_C(J9.12, F6.4)
+ NET_C(J9.12, A7.11)
+ NET_C(GNDD, A7.12)
+ NET_C(ATTRACT_n, A7.13)
+ NET_C(J9.12, A8.11)
+ NET_C(GNDD, A8.12)
+ NET_C(ATTRACT_n, A8.13)
+ NET_C(VB_HIT_n, A7.5)
+ NET_C(GNDD, A7.4)
+ NET_C(ATTRACT_n, A7.3)
+ NET_C(BP_HIT_n, A8.5)
+ NET_C(GNDD, A8.4)
+ NET_C(ATTRACT_n, A8.3)
+ NET_C(A8.6, B9.13)
+ NET_C(P_HIT_SOUND, B9.12)
+ NET_C(A8.10, B9.10)
+ NET_C(BRICK_SOUND, B9.9)
+ NET_C(A7.6, B9.4)
+ NET_C(VB_HIT_SOUND, B9.5)
NET_C(S1_1.1, GND)
NET_C(S1_2.1, GND)
@@ -573,1049 +656,1066 @@ CIRCUIT_LAYOUT( breakout )
NET_C(S1_3.2, R9.2)
NET_C(S1_4.2, R10.2)
- //Free Game Selector
- CONNECTION(I1, "K7", 2)
- //CONNECTION("S1", 15, "K7", 1)
- CONNECTION("S1_1", 2, "K7", 1)
- CONNECTION(J1, "K7", 12)
- //CONNECTION("S1", 14, "K7", 13)
- CONNECTION("S1_2", 2, "K7", 13)
- CONNECTION(K1, "K7", 5)
- //CONNECTION("S1", 6, "K7", 4)
- CONNECTION("S1_3", 2, "K7", 4)
- CONNECTION(L1, "K7", 9)
- //CONNECTION("S1", 7, "K7", 10)
- CONNECTION("S1_4", 2, "K7", 10)
-
- CONNECTION(I2, "L7", 2)
- //CONNECTION("S1", 15, "L7", 1)
- CONNECTION("S1_1", 2, "L7", 1)
- CONNECTION(J2, "L7", 12)
- //CONNECTION("S1", 14, "L7", 13)
- CONNECTION("S1_2", 2, "L7", 13)
- CONNECTION(K2, "L7", 5)
- //CONNECTION("S1", 6, "L7", 4)
- CONNECTION("S1_3", 2, "L7", 4)
- CONNECTION(L2, "L7", 9)
- //CONNECTION("S1", 7, "L7", 10)
- CONNECTION("S1_4", 2, "L7", 10)
-
-
- CONNECTION("K7", 3, "J7", 13)
- CONNECTION("K7", 11, "J7", 12)
- CONNECTION("K7", 6, "J7", 10)
- CONNECTION("K7", 8, "J7", 9)
-
- CONNECTION("L7", 3, "J7", 1)
- CONNECTION("L7", 11, "J7", 2)
- CONNECTION("L7", 6, "J7", 4)
- CONNECTION("L7", 8, "J7", 5)
-
- CONNECTION(START_GAME1_n, "J8", 12)
- CONNECTION(BG1_n, "J8", 11)
- CONNECTION("J7", 8, "J8", 10)
-
- CONNECTION(START_GAME1_n, "J8", 2)
- CONNECTION(BG2_n, "J8", 3)
- CONNECTION("J7", 6, "J8", 1)
-
- CONNECTION("J8", 9, "K8", 12)
- CONNECTION(EGL, "K8", 11)
- CONNECTION(P, "K8", 13)
- CONNECTION(LAT_Q, "K8", 10)
-
- CONNECTION("J8", 4, "K8", 2)
- CONNECTION(EGL, "K8", 3)
- CONNECTION(P, "K8", 1)
- CONNECTION(LAT_Q, "K8", 4)
-
- CONNECTION(P, "K9", 8)
- CONNECTION("J8", 9, "K9", 9)
- CONNECTION(GNDD, "K9", 11)
- CONNECTION(HSYNC_n, "K9", 10)
-
- CONNECTION(P, "K9", 1)
- CONNECTION("J8", 4, "K9", 12)
- CONNECTION(GNDD, "K9", 4)
- CONNECTION(HSYNC_n, "K9", 13)
-
- CONNECTION("K9", 6, "L9", 12)
- CONNECTION("K9", 2, "L9", 13)
-
- CONNECTION(P, "N8", 5)
- CONNECTION(BONUS_COIN, "N8", 4)
- CONNECTION(ATTRACT_n, "N8", 3)
-
- CONNECTION(V4_d, "N7", 2)
- CONNECTION("N8", 6, "N7", 1)
- //
- CONNECTION(GNDD, "M2", 13)
- CONNECTION(V1_d, "M2", 10)
- CONNECTION(V2_d, "M2", 8)
- CONNECTION(V4_d, "M2", 3)
- CONNECTION(V8_d, "M2", 1)
- CONNECTION(GNDD, "M2", 11)
- CONNECTION(P2_CONDITIONAL, "M2", 7)
- CONNECTION(GNDD, "M2", 4)
- CONNECTION(GNDD, "M2", 16)
-
- CONNECTION("M2", 14, "N2", 13)
- CONNECTION(V16_d, "N2", 10)
- CONNECTION(V32_d, "N2", 8)
- CONNECTION(V64_d, "N2", 3)
- CONNECTION(V128_d, "N2", 1)
- CONNECTION(GNDD, "N2", 11)
- CONNECTION(P2_CONDITIONAL, "N2", 7)
- CONNECTION(GNDD, "N2", 4)
- CONNECTION(GNDD, "N2", 16)
-
- CONNECTION("M2", 6, "M3", 2)
- CONNECTION(P2_CONDITIONAL, "M3", 1)
- CONNECTION("M2", 2, "M3", 5)
- CONNECTION(P2_CONDITIONAL, "M3", 4)
- CONNECTION("M2", 15, "M3", 12)
- CONNECTION(P2_CONDITIONAL, "M3", 13)
-
- CONNECTION(P2_CONDITIONAL, "N3", 10)
- CONNECTION("N2", 9, "N3", 9)
- CONNECTION(P2_CONDITIONAL, "N3", 1)
- CONNECTION("N2", 6, "N3", 2)
- CONNECTION(P2_CONDITIONAL, "N3", 4)
- CONNECTION("N2", 2, "N3", 5)
- CONNECTION(P2_CONDITIONAL, "N3", 13)
- CONNECTION("N2", 15, "N3", 12)
-
- CONNECTION(H1_d, "L2", 9)
- CONNECTION(P2_CONDITIONAL, "L2", 10)
- CONNECTION(H2_d, "L2", 12)
- CONNECTION(P2_CONDITIONAL, "L2", 13)
- CONNECTION(H4_d, "L2", 2)
- CONNECTION(P2_CONDITIONAL, "L2", 1)
- CONNECTION(H8_d, "L2", 5)
- CONNECTION(P2_CONDITIONAL, "L2", 4)
-
- CONNECTION(P2_CONDITIONAL, "K2", 10)
- CONNECTION(H16_d, "K2", 9)
- CONNECTION(P2_CONDITIONAL, "K2", 13)
- CONNECTION(H32_d, "K2", 12)
- CONNECTION(P2_CONDITIONAL, "K2", 1)
- CONNECTION(H64_d, "K2", 2)
- CONNECTION(P2_CONDITIONAL, "K2", 4)
- CONNECTION(H128_d, "K2", 5)
-
-
- CONNECTION(V64, "M9", 11)
- CONNECTION(H16, "J2", 5)
- CONNECTION(H32, "J2", 3)
- CONNECTION(V16, "J2", 11)
- CONNECTION(H8, "J2", 1)
-
- CONNECTION(DICECLOCK, "J1", 9)
- CONNECTION(SCLOCK, "J1", 4)
- CONNECTION("N4", 6, "J1", 5)
- CONNECTION(PAD_n, "J1", 12)
- CONNECTION(BALL_DISPLAY, "J1", 13)
- CONNECTION(P, "J1", 1)
-
- CONNECTION(P, "K1", 1)
- CONNECTION(P, "K1", 3)
- CONNECTION(P, "K1", 4)
- CONNECTION(P, "K1", 5)
- CONNECTION(P, "K1", 6)
- CONNECTION(P, "K1", 9)
- CONNECTION(P, "K1", 10)
- CONNECTION(DICECLOCK, "K1", 2)
- CONNECTION("L1", 15, "K1", 7)
-
- CONNECTION(P, "L1", 1)
- CONNECTION(P, "L1", 3)
- CONNECTION(GNDD, "L1", 4)
- CONNECTION(P, "L1", 5)
- CONNECTION(GNDD, "L1", 6)
- CONNECTION(VERT_TRIG_n, "L1", 9)
- CONNECTION(P, "L1", 10)
- CONNECTION(DICECLOCK, "L1", 2)
- CONNECTION(P, "L1", 7)
-
- CONNECTION(P, "N1", 1)
- CONNECTION(P, "N1", 10)
- CONNECTION(P, "N1", 3)
- CONNECTION(P, "N1", 4)
- CONNECTION(P, "N1", 5)
- CONNECTION(P, "N1", 6)
- CONNECTION(P, "N1", 9)
- CONNECTION(DICECLOCK, "N1", 2)
- CONNECTION("H2", 6, "N1", 7)
-
- CONNECTION("M1", 15, "H2", 5)
- CONNECTION("L1", 15, "H2", 4)
-
- CONNECTION(V128_d, "N4", 5)
- CONNECTION(V64_d, "N4", 3)
- CONNECTION(V32_d, "N4", 4)
- CONNECTION("N4", 6, "H1", 10)
- CONNECTION(VSYNC_n, "H1", 9)
-
- CONNECTION(P, "M1", 1)
- CONNECTION(GNDD, "M1", 3)
- CONNECTION(GNDD, "M1", 4)
- CONNECTION(P, "M1", 5)
- CONNECTION(GNDD, "M1", 6)
- CONNECTION(VERT_TRIG_n, "M1", 9)
- CONNECTION(DICECLOCK, "M1", 2)
- CONNECTION("L1", 15, "M1", 7)
- CONNECTION("K1", 15, "M1", 10)
-
-
- //9312 circuit
- CONNECTION(PLAYER_2, "M9", 9)
- CONNECTION(BALL_A, "C5", 5)
- CONNECTION(BALL_A, "C4", 13)
- CONNECTION(BALL_B, "C4", 12)
- CONNECTION(BALL_A, "A4", 13)
- CONNECTION(BALL_B, "A4", 12)
- CONNECTION(BALL_C, "C4", 10)
- CONNECTION("A4", 11, "C4", 9)
-
- CONNECTION(A2, "N5", 1)
- CONNECTION(E2s, "N5", 2)
- CONNECTION(I2, "N5", 3)
- CONNECTION("C5", 6, "N5", 4)
- CONNECTION(A1, "N5", 5)
- CONNECTION(E1, "N5", 6)
- CONNECTION(I1, "N5", 7)
- CONNECTION(PLAYER_2_n, "N5", 9)
- CONNECTION(H32_n, "N5", 10)
- CONNECTION(V16, "N5", 11)
- CONNECTION(V64, "N5", 12)
- CONNECTION(V128, "N5", 13)
-
- CONNECTION(B2, "M5", 1)
- CONNECTION(F2, "M5", 2)
- CONNECTION(J2, "M5", 3)
- CONNECTION("C4", 11, "M5", 4)
- CONNECTION(B1, "M5", 5)
- CONNECTION(F1, "M5", 6)
- CONNECTION(J1, "M5", 7)
- CONNECTION(PLAYER_2, "M5", 9)
- CONNECTION(H32_n, "M5", 10)
- CONNECTION(V16, "M5", 11)
- CONNECTION(V64, "M5", 12)
- CONNECTION(V128, "M5", 13)
-
- CONNECTION(C2, "L5", 1)
- CONNECTION(G2, "L5", 2)
- CONNECTION(K2, "L5", 3)
- CONNECTION("C4", 8, "L5", 4)
- CONNECTION(C1, "L5", 5)
- CONNECTION(G1, "L5", 6)
- CONNECTION(K1, "L5", 7)
- CONNECTION(GNDD, "L5", 9)
- CONNECTION(H32_n, "L5", 10)
- CONNECTION(V16, "L5", 11)
- CONNECTION(V64, "L5", 12)
- CONNECTION(V128, "L5", 13)
-
- CONNECTION(D2, "K5", 1)
- CONNECTION(H02, "K5", 2)
- CONNECTION(L2, "K5", 3)
- CONNECTION(GNDD, "K5", 4)
- CONNECTION(D1, "K5", 5)
- CONNECTION(H01, "K5", 6)
- CONNECTION(L1, "K5", 7)
- CONNECTION(GNDD, "K5", 9)
- CONNECTION(H32_n, "K5", 10)
- CONNECTION(V16, "K5", 11)
- CONNECTION(V64, "K5", 12)
- CONNECTION(V128, "K5", 13)
-
- CONNECTION(P, "J5", 4)
- CONNECTION(P, "J5", 3)
- CONNECTION("N5", 15, "J5", 7)
- CONNECTION("M5", 15, "J5", 1)
- CONNECTION("L5", 15, "J5", 2)
- CONNECTION("K5", 15, "J5", 6)
- CONNECTION(H32, "J5", 5)
-
- CONNECTION("J5", 13, "H5", 1)
- CONNECTION(GNDD, "H5", 2)
- CONNECTION(GNDD, "H5", 3)
- CONNECTION("J5", 14, "H5", 4)
- CONNECTION(GNDD, "H5", 5)
- CONNECTION(GNDD, "H5", 6)
- CONNECTION("J5", 10, "H5", 7)
- CONNECTION(GNDD, "H5", 9)
-
- CONNECTION(V4, "K4", 12)
- CONNECTION(V8, "K4", 13)
-
- CONNECTION("K4", 11, "H5", 10)
- CONNECTION(H2, "H5", 11)
- CONNECTION(H4, "H5", 12)
- CONNECTION(H8, "H5", 13)
-
- CONNECTION(H2, "L4", 3)
- CONNECTION(H4, "L4", 5)
- CONNECTION(H8, "L4", 4)
-
- CONNECTION("J5", 12 , "J4", 1)
- CONNECTION("J5", 11, "J4", 2)
- CONNECTION(GNDD, "J4", 3)
- CONNECTION(GNDD, "J4", 4)
- CONNECTION("J5", 15, "J4", 5)
- CONNECTION("J5", 9, "J4", 6)
- CONNECTION(GNDD, "J4", 7)
- CONNECTION(GNDD, "J4", 9)
- CONNECTION("L4", 6, "J4", 10)
- CONNECTION(H8, "J4", 11)
- CONNECTION(V4, "J4", 12)
- CONNECTION(V8, "J4", 13)
-
- CONNECTION("H5", 14, "H4", 13)
- CONNECTION("J4", 14, "H4", 12)
-
- //PADDLES
- CONNECTION(ATTRACT_n, "B2", 4)
-
- CONNECTION("B2", 3, "E9", 13)
- CONNECTION(PLAYER_2_n, "M3", 9)
- CONNECTION(V128, "M3", 10)
- CONNECTION(H64, "J3", 8)
- CONNECTION(H128, "J3", 9)
- CONNECTION(V32, "E3", 5)
- CONNECTION(V16_n, "E3", 6)
-
- CONNECTION(SFL_n, "M8", 1)
- CONNECTION("M3", 8, "M8", 2)
- CONNECTION(PLNR, "M8", 13)
- CONNECTION("J3", 10, "E9", 1)
- CONNECTION(V64, "E2", 5)
- CONNECTION(V32, "E2", 4)
- CONNECTION(PLNR, "E2", 10)
- CONNECTION(H16, "E2", 9)
-
- CONNECTION("M8", 12, "M8", 3)
- CONNECTION(TOP_n, "M8", 4)
- CONNECTION(TOP_n, "M8", 5)
- CONNECTION("H4", 11, "F2", 11)
- CONNECTION("E2", 6, "F2", 10)
- CONNECTION("E2", 8, "F2", 9)
-
- CONNECTION("M8", 6, "H4", 5)
- CONNECTION("F2", 8, "H4", 4)
-
-#if 0
- CONNECTION(PAD_EN_n, "PAD_EN_BUF", 1)
-
- CONNECTION("PAD_EN_BUF", 2, "C9", 4)
- CONNECTION("PAD_EN_BUF", 2, "C9", 2)
-#else
+ //----------------------------------------------------------------
+ // Free Game
+ //----------------------------------------------------------------
+
+ NET_C(I1, K7.2)
+ NET_C(S1_1.2, K7.1)
+ NET_C(J1, K7.12)
+
+ NET_C(S1_2.2, K7.13)
+ NET_C(K1, K7.5)
+
+ NET_C(S1_3.2, K7.4)
+ NET_C(L1, K7.9)
+
+ NET_C(S1_4.2, K7.10)
+
+ NET_C(I2, L7.2)
+ NET_C(S1_1.2, L7.1)
+ NET_C(J2, L7.12)
+ NET_C(S1_2.2, L7.13)
+ NET_C(K2, L7.5)
+ NET_C(S1_3.2, L7.4)
+ NET_C(L2, L7.9)
+ NET_C(S1_4.2, L7.10)
+
+ NET_C(K7.3, J7.13)
+ NET_C(K7.11, J7.12)
+ NET_C(K7.6, J7.10)
+ NET_C(K7.8, J7.9)
+
+ NET_C(L7.3, J7.1)
+ NET_C(L7.11, J7.2)
+ NET_C(L7.6, J7.4)
+ NET_C(L7.8, J7.5)
+
+ NET_C(START_GAME1_n, J8.12)
+ NET_C(BG1_n, J8.11)
+ NET_C(J7.8, J8.10)
+
+ NET_C(START_GAME1_n, J8.2)
+ NET_C(BG2_n, J8.3)
+ NET_C(J7.6, J8.1)
+
+ NET_C(J8.9, K8.12)
+ NET_C(EGL, K8.11)
+ NET_C(P, K8.13)
+ NET_C(LAT_Q, K8.10)
+
+ NET_C(J8.4, K8.2)
+ NET_C(EGL, K8.3)
+ NET_C(P, K8.1)
+ NET_C(LAT_Q, K8.4)
+
+ NET_C(P, K9.8)
+ NET_C(J8.9, K9.9)
+ NET_C(GNDD, K9.11)
+ NET_C(HSYNC_n, K9.10)
+
+ NET_C(P, K9.1)
+ NET_C(J8.4, K9.12)
+ NET_C(GNDD, K9.4)
+ NET_C(HSYNC_n, K9.13)
+
+ NET_C(K9.6, L9.12)
+ NET_C(K9.2, L9.13)
+
+ NET_C(P, N8.5)
+ NET_C(BONUS_COIN, N8.4)
+ NET_C(ATTRACT_n, N8.3)
+
+ NET_C(V4_d, N7.2)
+ NET_C(N8.6, N7.1)
+
+ NET_C(GNDD, M2.13)
+ NET_C(V1_d, M2.10)
+ NET_C(V2_d, M2.8)
+ NET_C(V4_d, M2.3)
+ NET_C(V8_d, M2.1)
+ NET_C(GNDD, M2.11)
+ NET_C(P2_CONDITIONAL, M2.7)
+ NET_C(GNDD, M2.4)
+ NET_C(GNDD, M2.16)
+
+ NET_C(M2.14, N2.13)
+ NET_C(V16_d, N2.10)
+ NET_C(V32_d, N2.8)
+ NET_C(V64_d, N2.3)
+ NET_C(V128_d, N2.1)
+ NET_C(GNDD, N2.11)
+ NET_C(P2_CONDITIONAL, N2.7)
+ NET_C(GNDD, N2.4)
+ NET_C(GNDD, N2.16)
+
+ NET_C(M2.6, M3.2)
+ NET_C(P2_CONDITIONAL, M3.1)
+ NET_C(M2.2, M3.5)
+ NET_C(P2_CONDITIONAL, M3.4)
+ NET_C(M2.15, M3.12)
+ NET_C(P2_CONDITIONAL, M3.13)
+
+ NET_C(P2_CONDITIONAL, N3.10)
+ NET_C(N2.9, N3.9)
+ NET_C(P2_CONDITIONAL, N3.1)
+ NET_C(N2.6, N3.2)
+ NET_C(P2_CONDITIONAL, N3.4)
+ NET_C(N2.2, N3.5)
+ NET_C(P2_CONDITIONAL, N3.13)
+ NET_C(N2.15, N3.12)
+
+ NET_C(H1_d, L2.9)
+ NET_C(P2_CONDITIONAL, L2.10)
+ NET_C(H2_d, L2.12)
+ NET_C(P2_CONDITIONAL, L2.13)
+ NET_C(H4_d, L2.2)
+ NET_C(P2_CONDITIONAL, L2.1)
+ NET_C(H8_d, L2.5)
+ NET_C(P2_CONDITIONAL, L2.4)
+
+ NET_C(P2_CONDITIONAL, K2.10)
+ NET_C(H16_d, K2.9)
+ NET_C(P2_CONDITIONAL, K2.13)
+ NET_C(H32_d, K2.12)
+ NET_C(P2_CONDITIONAL, K2.1)
+ NET_C(H64_d, K2.2)
+ NET_C(P2_CONDITIONAL, K2.4)
+ NET_C(H128_d, K2.5)
+
+ NET_C(V64, M9.11)
+ NET_C(H16, J2.5)
+ NET_C(H32, J2.3)
+ NET_C(V16, J2.11)
+ NET_C(H8, J2.1)
+
+ NET_C(CLOCK, J1.9)
+ NET_C(SCLOCK, J1.4)
+ NET_C(N4.6, J1.5)
+ NET_C(PAD_n, J1.12)
+ NET_C(BALL_DISPLAY, J1.13)
+ NET_C(P, J1.1)
+
+ NET_C(P, K1.1)
+ NET_C(P, K1.3)
+ NET_C(P, K1.4)
+ NET_C(P, K1.5)
+ NET_C(P, K1.6)
+ NET_C(P, K1.9)
+ NET_C(P, K1.10)
+ NET_C(CLOCK, K1.2)
+ NET_C(L1.15, K1.7)
+
+ NET_C(P, L1.1)
+ NET_C(P, L1.3)
+ NET_C(GNDD, L1.4)
+ NET_C(P, L1.5)
+ NET_C(GNDD, L1.6)
+ NET_C(VERT_TRIG_n, L1.9)
+ NET_C(P, L1.10)
+ NET_C(CLOCK, L1.2)
+ NET_C(P, L1.7)
+
+ NET_C(P, N1.1)
+ NET_C(P, N1.10)
+ NET_C(P, N1.3)
+ NET_C(P, N1.4)
+ NET_C(P, N1.5)
+ NET_C(P, N1.6)
+ NET_C(P, N1.9)
+ NET_C(CLOCK, N1.2)
+ NET_C(H2.6, N1.7)
+
+ NET_C(M1.15, H2.5)
+ NET_C(L1.15, H2.4)
+
+ NET_C(V128_d, N4.5)
+ NET_C(V64_d, N4.3)
+ NET_C(V32_d, N4.4)
+ NET_C(N4.6, H1.10)
+ NET_C(VSYNC_n, H1.9)
+
+ NET_C(P, M1.1)
+ NET_C(GNDD, M1.3)
+ NET_C(GNDD, M1.4)
+ NET_C(P, M1.5)
+ NET_C(GNDD, M1.6)
+ NET_C(VERT_TRIG_n, M1.9)
+ NET_C(CLOCK, M1.2)
+ NET_C(L1.15, M1.7)
+ NET_C(K1.15, M1.10)
+
+ NET_C(PLAYER_2, M9.9)
+ NET_C(BALL_A, C5.5)
+ NET_C(BALL_A, C4.13)
+ NET_C(BALL_B, C4.12)
+ NET_C(BALL_A, A4.13)
+ NET_C(BALL_B, A4.12)
+ NET_C(BALL_C, C4.10)
+ NET_C(A4.11, C4.9)
+
+ NET_C(A2, N5.1)
+ NET_C(E2s, N5.2)
+ NET_C(I2, N5.3)
+ NET_C(C5.6, N5.4)
+ NET_C(A1, N5.5)
+ NET_C(E1, N5.6)
+ NET_C(I1, N5.7)
+ NET_C(PLAYER_2_n, N5.9)
+ NET_C(H32_n, N5.10)
+ NET_C(V16, N5.11)
+ NET_C(V64, N5.12)
+ NET_C(V128, N5.13)
+
+ NET_C(B2, M5.1)
+ NET_C(F2, M5.2)
+ NET_C(J2, M5.3)
+ NET_C(C4.11, M5.4)
+ NET_C(B1, M5.5)
+ NET_C(F1, M5.6)
+ NET_C(J1, M5.7)
+ NET_C(PLAYER_2, M5.9)
+ NET_C(H32_n, M5.10)
+ NET_C(V16, M5.11)
+ NET_C(V64, M5.12)
+ NET_C(V128, M5.13)
+
+ NET_C(C2, L5.1)
+ NET_C(G2, L5.2)
+ NET_C(K2, L5.3)
+ NET_C(C4.8, L5.4)
+ NET_C(C1, L5.5)
+ NET_C(G1, L5.6)
+ NET_C(K1, L5.7)
+ NET_C(GNDD, L5.9)
+ NET_C(H32_n, L5.10)
+ NET_C(V16, L5.11)
+ NET_C(V64, L5.12)
+ NET_C(V128, L5.13)
+
+ NET_C(D2, K5.1)
+ NET_C(H02, K5.2)
+ NET_C(L2, K5.3)
+ NET_C(GNDD, K5.4)
+ NET_C(D1, K5.5)
+ NET_C(H01, K5.6)
+ NET_C(L1, K5.7)
+ NET_C(GNDD, K5.9)
+ NET_C(H32_n, K5.10)
+ NET_C(V16, K5.11)
+ NET_C(V64, K5.12)
+ NET_C(V128, K5.13)
+
+ NET_C(P, J5.4)
+ NET_C(P, J5.3)
+ NET_C(N5.15, J5.7)
+ NET_C(M5.15, J5.1)
+ NET_C(L5.15, J5.2)
+ NET_C(K5.15, J5.6)
+ NET_C(H32, J5.5)
+
+ NET_C(J5.13, H5.1)
+ NET_C(GNDD, H5.2)
+ NET_C(GNDD, H5.3)
+ NET_C(J5.14, H5.4)
+ NET_C(GNDD, H5.5)
+ NET_C(GNDD, H5.6)
+ NET_C(J5.10, H5.7)
+ NET_C(GNDD, H5.9)
+
+ NET_C(V4, K4.12)
+ NET_C(V8, K4.13)
+
+ NET_C(K4.11, H5.10)
+ NET_C(H2, H5.11)
+ NET_C(H4, H5.12)
+ NET_C(H8, H5.13)
+
+ NET_C(H2, L4.3)
+ NET_C(H4, L4.5)
+ NET_C(H8, L4.4)
+
+ NET_C(J5.12 , J4.1)
+ NET_C(J5.11, J4.2)
+ NET_C(GNDD, J4.3)
+ NET_C(GNDD, J4.4)
+ NET_C(J5.15, J4.5)
+ NET_C(J5.9, J4.6)
+ NET_C(GNDD, J4.7)
+ NET_C(GNDD, J4.9)
+ NET_C(L4.6, J4.10)
+ NET_C(H8, J4.11)
+ NET_C(V4, J4.12)
+ NET_C(V8, J4.13)
+
+ NET_C(H5.14, H4.13)
+ NET_C(J4.14, H4.12)
+
+ //----------------------------------------------------------------
+ // Paddles
+ //---------------------------------------------------------------
+
+ NET_C(ATTRACT_n, B2.4)
+
+ NET_C(B2.3, E9.13)
+ NET_C(PLAYER_2_n, M3.9)
+ NET_C(V128, M3.10)
+ NET_C(H64, J3.8)
+ NET_C(H128, J3.9)
+ NET_C(V32, E3.5)
+ NET_C(V16_n, E3.6)
+
+ NET_C(SFL_n, M8.1)
+ NET_C(M3.8, M8.2)
+ NET_C(PLNR, M8.13)
+ NET_C(J3.10, E9.1)
+ NET_C(V64, E2.5)
+ NET_C(V32, E2.4)
+ NET_C(PLNR, E2.10)
+ NET_C(H16, E2.9)
+
+ NET_C(M8.12, M8.3)
+ NET_C(TOP_n, M8.4)
+ NET_C(TOP_n, M8.5)
+ NET_C(H4.11, F2.11)
+ NET_C(E2.6, F2.10)
+ NET_C(E2.8, F2.9)
+
+ NET_C(M8.6, H4.5)
+ NET_C(F2.8, H4.4)
+
// NOTE: Stabilizing CAP C20 not modelled.
- CONNECTION(PAD_EN_n, "C9", 4)
- CONNECTION(PAD_EN_n, "C9", 2)
+
+ NET_C(PAD_EN_n, C9.4)
+ NET_C(PAD_EN_n, C9.2)
NET_C(C9.8, V5)
NET_C(C9.1, GND)
- RES(R53, RES_K(12)) // 12k
+ RES(R53, RES_K(12)) // 12k
CAP(C21, CAP_U(1))
NET_C(GND, C21.2, R53.2)
NET_C(C21.1, R53.1, C9.6, C9.7)
-#endif
+ NET_C(BTB_HIT_n, C5.3)
+ NET_C(P, F5.10)
+ NET_C(P, F5.12)
+ NET_C(C5.4, F5.11)
+ NET_C(SERVE_WAIT_n, F5.13)
+ NET_C(H64, E5.13)
+ NET_C(F5.9, E5.12)
+ NET_C(H128, E5.10)
+ NET_C(F5.8, E5.9)
+ NET_C(E5.11, E4.12)
+ NET_C(E5.8, E4.13)
+ NET_C(E4.11, D4.2)
+ NET_C(P, D4.3)
+ NET_C(P, D4.4)
+ NET_C(P, D4.5)
+ NET_C(P, D4.6)
+ NET_C(P, D4.9)
+ NET_C(P, D4.10)
+ NET_C(C3.11, D4.7)
+ NET_C(VSYNC_n, D4.1)
+
+ NET_C(D4.15, E4.10)
+ NET_C(H7.6, E4.9)
+ NET_C(C9.3, H7.5)
+ NET_C(PAD_EN_n, H7.4)
+ NET_C(E4.8, C3.12)
+ NET_C(ATTRACT_n, C3.13)
+ NET_C(H8, J3.2)
+ NET_C(H32, J3.3)
+
+ NET_C(C3.11, K3.12)
+ NET_C(H128, K3.5)
+ NET_C(H64, K3.6)
+ NET_C(H16, K3.11)
+ NET_C(H4, K3.4)
+ NET_C(J3.1, K3.1)
+ NET_C(P, K3.3)
+ NET_C(P, K3.2)
+
+ NET_C(V16_d, D7.1)
+ NET_C(V64_d, D7.13)
+ NET_C(V128_d, D7.2)
+ NET_C(D7.12, H1.4)
+ NET_C(V8_d, H1.5)
+ NET_C(H1.6, C2.4)
+ NET_C(H1.6, C2.5)
+ NET_C(V32_d, J2.9)
+ NET_C(J2.8, C2.10)
+ NET_C(C2.6, C2.9)
- CONNECTION(BTB_HIT_n, "C5", 3)
- CONNECTION(P, "F5", 10)
- CONNECTION(P, "F5", 12)
- CONNECTION("C5", 4, "F5", 11)
- CONNECTION(SERVE_WAIT_n, "F5", 13)
- CONNECTION(H64, "E5", 13)
- CONNECTION("F5", 9, "E5", 12)
- CONNECTION(H128, "E5", 10)
- CONNECTION("F5", 8, "E5", 9)
- CONNECTION("E5", 11, "E4", 12)
- CONNECTION("E5", 8, "E4", 13)
- CONNECTION("E4", 11, "D4", 2)
- CONNECTION(P, "D4", 3)
- CONNECTION(P, "D4", 4)
- CONNECTION(P, "D4", 5)
- CONNECTION(P, "D4", 6)
- CONNECTION(P, "D4", 9)
- CONNECTION(P, "D4", 10)
- CONNECTION("C3", 11, "D4", 7)
- CONNECTION(VSYNC_n, "D4", 1)
-
- CONNECTION("D4", 15, "E4", 10)
- CONNECTION("H7", 6, "E4", 9)
- CONNECTION("C9", 3, "H7", 5)
- CONNECTION(PAD_EN_n, "H7", 4)
- CONNECTION("E4", 8, "C3", 12)
- CONNECTION(ATTRACT_n, "C3", 13)
- CONNECTION(H8, "J3", 2)
- CONNECTION(H32, "J3", 3)
-
- CONNECTION("C3", 11, "K3", 12)
- CONNECTION(H128, "K3", 5)
- CONNECTION(H64, "K3", 6)
- CONNECTION(H16, "K3", 11)
- CONNECTION(H4, "K3", 4)
- CONNECTION("J3", 1, "K3", 1)
- CONNECTION(P, "K3", 3)
- CONNECTION(P, "K3", 2)
-
- CONNECTION(V16_d, "D7", 1)
- CONNECTION(V64_d, "D7", 13)
- CONNECTION(V128_d, "D7", 2)
- CONNECTION("D7", 12, "H1", 4)
- CONNECTION(V8_d, "H1", 5)
- CONNECTION("H1", 6, "C2", 4)
- CONNECTION("H1", 6, "C2", 5)
- CONNECTION(V32_d, "J2", 9)
- CONNECTION("J2", 8, "C2", 10)
- CONNECTION("C2", 6, "C2", 9)
-
-
- //SCORE
- CONNECTION(SCI_n, "D3", 4)
- CONNECTION(GNDD, "D3", 2)
- CONNECTION(GNDD, "D3", 3)
- CONNECTION(GNDD, "D3", 1)
-
- //PLAYER2_CONDITIONAL
- CONNECTION(PLAYER_2, "H7", 10)
-#if 0
- CONNECTION(GNDD, "S2", 1)
- CONNECTION(P, "S2", 2)
- CONNECTION("S2", 3, "H7", 9)
-#else
+ //----------------------------------------------------------------
+ // Score circuit
+ //---------------------------------------------------------------
+
+ NET_C(SCI_n, D3.4)
+ NET_C(GNDD, D3.2)
+ NET_C(GNDD, D3.3)
+ NET_C(GNDD, D3.1)
+
+ //----------------------------------------------------------------
+ // Player 2
+ //---------------------------------------------------------------
+
+ NET_C(PLAYER_2, H7.10)
NET_C(S2.2, GND)
NET_C(S2.1, H7.9)
RES(R18, RES_K(1))
NET_C(R18.2, V5)
NET_C(R18.1, S2.1)
-#endif
//A-L 1 and 2
- CONNECTION(SET_BRICKS_n, "B3", 2)
- CONNECTION(H2, "B3", 3)
- CONNECTION("B3", 1, "E7", 6)
- CONNECTION(PLAYER_2, "E7", 5)
- CONNECTION(P, "N6", 9)
- CONNECTION(P, "M6", 9)
- CONNECTION(P, "L6", 9)
- CONNECTION(P, "H6", 9)
- CONNECTION(P, "J6", 9)
- CONNECTION(P, "K6", 9)
-
- CONNECTION(P, "N6", 10)
- CONNECTION(PLAYER_2, "N6", 7)
- CONNECTION(COUNT_2, "N6", 2)
- CONNECTION(START_GAME_n, "N6", 1)
-
- CONNECTION("N6", 15, "M6", 10)
- CONNECTION(PLAYER_2, "M6", 7)
- CONNECTION(COUNT_2, "M6", 2)
- CONNECTION(START_GAME_n, "M6", 1)
-
- CONNECTION("M6", 15, "L6", 10)
- CONNECTION(PLAYER_2, "L6", 7)
- CONNECTION(COUNT_2, "L6", 2)
- CONNECTION(START_GAME_n, "L6", 1)
-
- CONNECTION(P, "H6", 10)
- CONNECTION(RAM_PLAYER1, "H6", 7)
- CONNECTION(COUNT_1, "H6", 2)
- CONNECTION(START_GAME_n, "H6", 1)
-
- CONNECTION("H6", 15, "J6", 10)
- CONNECTION(RAM_PLAYER1, "J6", 7)
- CONNECTION(COUNT_1, "J6", 2)
- CONNECTION(START_GAME_n, "J6", 1)
-
- CONNECTION("J6", 15, "K6", 10)
- CONNECTION(RAM_PLAYER1, "K6", 7)
- CONNECTION(COUNT_1, "K6", 2)
- CONNECTION(START_GAME_n, "K6", 1)
-
+ NET_C(SET_BRICKS_n, B3.2)
+ NET_C(H2, B3.3)
+ NET_C(B3.1, E7.6)
+ NET_C(PLAYER_2, E7.5)
+ NET_C(P, N6.9)
+ NET_C(P, M6.9)
+ NET_C(P, L6.9)
+ NET_C(P, H6.9)
+ NET_C(P, J6.9)
+ NET_C(P, K6.9)
+
+ NET_C(P, N6.10)
+ NET_C(PLAYER_2, N6.7)
+ NET_C(COUNT_2, N6.2)
+ NET_C(START_GAME_n, N6.1)
+
+ NET_C(N6.15, M6.10)
+ NET_C(PLAYER_2, M6.7)
+ NET_C(COUNT_2, M6.2)
+ NET_C(START_GAME_n, M6.1)
+
+ NET_C(M6.15, L6.10)
+ NET_C(PLAYER_2, L6.7)
+ NET_C(COUNT_2, L6.2)
+ NET_C(START_GAME_n, L6.1)
+
+ NET_C(P, H6.10)
+ NET_C(RAM_PLAYER1, H6.7)
+ NET_C(COUNT_1, H6.2)
+ NET_C(START_GAME_n, H6.1)
+
+ NET_C(H6.15, J6.10)
+ NET_C(RAM_PLAYER1, J6.7)
+ NET_C(COUNT_1, J6.2)
+ NET_C(START_GAME_n, J6.1)
+
+ NET_C(J6.15, K6.10)
+ NET_C(RAM_PLAYER1, K6.7)
+ NET_C(COUNT_1, K6.2)
+ NET_C(START_GAME_n, K6.1)
//CX0 and CX1
- CONNECTION(BRICK_HIT, "H2", 9)
- CONNECTION(H16_n, "H2", 10)
- CONNECTION(P, "D5", 10)
- CONNECTION(P, "D5", 12)
- CONNECTION("H2", 8, "D5", 11)
- CONNECTION(SERVE_WAIT_n, "D5", 13)
- CONNECTION(X0, "C6", 13)
- CONNECTION("D5", 9, "C6", 12)
- CONNECTION("D5", 9, "D6", 12)
- CONNECTION(DN, "D6", 13)
- CONNECTION("D6", 11, "C6", 4)
- CONNECTION(X1, "C6", 5)
-
- //COUNT1 and COUNT2
- CONNECTION(P, "N8", 11)
- CONNECTION(BRICK_HIT, "N8", 12)
- CONNECTION(ATTRACT_n, "N8", 13)
- CONNECTION("N8", 9, "N9", 11)
- CONNECTION(P, "N9", 15)
- CONNECTION(P, "N9", 5)
-
- CONNECTION(COUNT, "N9", 4)
- CONNECTION(START_GAME, "N9", 14)
- CONNECTION(H8_n, "N9", 1)
- CONNECTION(H16_n, "N9", 10)
- CONNECTION(GNDD, "N9", 9)
-
- CONNECTION("N9", 13, "N7", 13)
- CONNECTION(SCLOCK, "N7", 12)
-
- CONNECTION(PLAYER_2, "N7", 5)
- CONNECTION(COUNT, "N7", 4)
-
- CONNECTION(COUNT, "M9", 1)
- CONNECTION(COUNT, "N7", 10)
- CONNECTION(RAM_PLAYER1, "N7", 9)
-
-
- //Ball Logic
- CONNECTION(P, "C7", 1)
- CONNECTION(P, "C7", 10)
- CONNECTION(P, "C7", 7)
- CONNECTION(CX0, "C7", 3)
- CONNECTION(CX1, "C7", 4)
- CONNECTION(X2, "C7", 5)
- CONNECTION(GNDD, "C7", 6)
- CONNECTION("D8", 8, "C7", 9)
- CONNECTION("C7", 15, "C8", 7)
- CONNECTION("C7", 11, "C8", 10)
- CONNECTION("C7", 12, "D7", 10)
- CONNECTION("C7", 13, "D7", 11)
- CONNECTION(DICECLOCK, "C7", 2)
-
- CONNECTION(P, "C8", 1)
- CONNECTION(P, "C8", 3)
- CONNECTION(P, "C8", 4)
- CONNECTION(P, "C8", 5)
- CONNECTION(P, "C8", 6)
- CONNECTION(P, "C8", 9)
- CONNECTION(DICECLOCK, "C8", 2)
- CONNECTION("C8", 15, "B7", 7)
- CONNECTION("C7", 15, "B7", 10)
-
- CONNECTION(P, "B7", 1)
- CONNECTION(Y0, "B7", 3)
- CONNECTION(Y1, "B7", 4)
- CONNECTION(Y2, "B7", 5)
- CONNECTION(GNDD, "B7", 6)
- CONNECTION("D8", 8, "B7", 9)
- CONNECTION(DICECLOCK, "B7", 2)
- CONNECTION("B7", 15, "B8", 7)
-
- CONNECTION(VB_HIT_SOUND, "D7", 9)
-
- CONNECTION(P, "B8", 1)
- CONNECTION(P, "B8", 3)
- CONNECTION(P, "B8", 4)
- CONNECTION(P, "B8", 5)
- CONNECTION(P, "B8", 6)
- CONNECTION(P, "B8", 9)
- CONNECTION("C8", 15, "B8", 10)
- CONNECTION(DICECLOCK, "B8", 2)
-
- CONNECTION("B8", 15, "D8", 10)
- CONNECTION("B7", 15, "D8", 9)
-
- CONNECTION("D7", 8, "D7", 5)
- CONNECTION(P_HIT_SOUND, "D7", 4)
- CONNECTION("B8", 15, "D7", 3)
+ NET_C(BRICK_HIT, H2.9)
+ NET_C(H16_n, H2.10)
+ NET_C(P, D5.10)
+ NET_C(P, D5.12)
+ NET_C(H2.8, D5.11)
+ NET_C(SERVE_WAIT_n, D5.13)
+ NET_C(X0, C6.13)
+ NET_C(D5.9, C6.12)
+ NET_C(D5.9, D6.12)
+ NET_C(DN, D6.13)
+ NET_C(D6.11, C6.4)
+ NET_C(X1, C6.5)
+
+ //----------------------------------------------------------------
+ // COUNT1 and COUNT2
+ //---------------------------------------------------------------
+
+ NET_C(P, N8.11)
+ NET_C(BRICK_HIT, N8.12)
+ NET_C(ATTRACT_n, N8.13)
+ NET_C(N8.9, N9.11)
+ NET_C(P, N9.15)
+ NET_C(P, N9.5)
+
+ NET_C(COUNT, N9.4)
+ NET_C(START_GAME, N9.14)
+ NET_C(H8_n, N9.1)
+ NET_C(H16_n, N9.10)
+ NET_C(GNDD, N9.9)
+
+ NET_C(N9.13, N7.13)
+ NET_C(SCLOCK, N7.12)
+
+ NET_C(PLAYER_2, N7.5)
+ NET_C(COUNT, N7.4)
+ NET_C(COUNT, M9.1)
+ NET_C(COUNT, N7.10)
+ NET_C(RAM_PLAYER1, N7.9)
+
+ //----------------------------------------------------------------
+ // DSW - Free Game and Ball Logic
+ //---------------------------------------------------------------
+
+ NET_C(P, C7.1)
+ NET_C(P, C7.10)
+ NET_C(P, C7.7)
+ NET_C(CX0, C7.3)
+ NET_C(CX1, C7.4)
+ NET_C(X2, C7.5)
+ NET_C(GNDD, C7.6)
+ NET_C(D8.8, C7.9)
+ NET_C(C7.15, C8.7)
+ NET_C(C7.11, C8.10)
+ NET_C(C7.12, D7.10)
+ NET_C(C7.13, D7.11)
+ NET_C(CLOCK, C7.2)
+
+ NET_C(P, C8.1)
+ NET_C(P, C8.3)
+ NET_C(P, C8.4)
+ NET_C(P, C8.5)
+ NET_C(P, C8.6)
+ NET_C(P, C8.9)
+ NET_C(CLOCK, C8.2)
+ NET_C(C8.15, B7.7)
+ NET_C(C7.15, B7.10)
+
+ NET_C(P, B7.1)
+ NET_C(Y0, B7.3)
+ NET_C(Y1, B7.4)
+ NET_C(Y2, B7.5)
+ NET_C(GNDD, B7.6)
+ NET_C(D8.8, B7.9)
+ NET_C(CLOCK, B7.2)
+ NET_C(B7.15, B8.7)
+
+ NET_C(VB_HIT_SOUND, D7.9)
+
+ NET_C(P, B8.1)
+ NET_C(P, B8.3)
+ NET_C(P, B8.4)
+ NET_C(P, B8.5)
+ NET_C(P, B8.6)
+ NET_C(P, B8.9)
+ NET_C(C8.15, B8.10)
+ NET_C(CLOCK, B8.2)
+
+ NET_C(B8.15, D8.10)
+ NET_C(B7.15, D8.9)
+
+ NET_C(D7.8, D7.5)
+ NET_C(P_HIT_SOUND, D7.4)
+ NET_C(B8.15, D7.3)
+
+ //----------------------------------------------------------------
// RH and LH Sides
- CONNECTION(V128, "N4", 1)
- CONNECTION(V64, "N4", 2)
- CONNECTION(V16, "N4", 13)
- CONNECTION("N4", 12, "N4", 11)
- CONNECTION(V8, "N4", 10)
- CONNECTION(V4, "N4", 9)
- CONNECTION("N4", 8, "H2", 2)
- CONNECTION(V32, "H2", 1)
- CONNECTION("N4", 8, "J2", 13)
- CONNECTION("J2", 12, "J3", 11)
- CONNECTION(V32, "J3", 12)
+ //---------------------------------------------------------------
+
+ NET_C(V128, N4.1)
+ NET_C(V64, N4.2)
+ NET_C(V16, N4.13)
+ NET_C(N4.12, N4.11)
+ NET_C(V8, N4.10)
+ NET_C(V4, N4.9)
+ NET_C(N4.8, H2.2)
+ NET_C(V32, H2.1)
+ NET_C(N4.8, J2.13)
+ NET_C(J2.12, J3.11)
+ NET_C(V32, J3.12)
+ //----------------------------------------------------------------
// Top Bound
- CONNECTION(H128, "H3", 4)
- CONNECTION(H64, "H3", 5)
- CONNECTION(H32, "H3", 3)
- CONNECTION("H3", 6, "L4", 9)
- CONNECTION(H16, "L4", 10)
- CONNECTION(H8, "L4", 11)
- CONNECTION("L4", 8, "K4", 5)
- CONNECTION(VSYNC_n, "K4", 4)
+ //---------------------------------------------------------------
- //Cabinet type
+ NET_C(H128, H3.4)
+ NET_C(H64, H3.5)
+ NET_C(H32, H3.3)
+ NET_C(H3.6, L4.9)
+ NET_C(H16, L4.10)
+ NET_C(H8, L4.11)
+ NET_C(L4.8, K4.5)
+ NET_C(VSYNC_n, K4.4)
+ //----------------------------------------------------------------
+ // Cabinet type
+ //
+ // FIXME: missing?
+ //---------------------------------------------------------------
+
+ //----------------------------------------------------------------
// Coin Circuit
- CONNECTION("COIN1", 2, "F9", 13)
- CONNECTION("COIN1", 1, "F9", 11)
+ //---------------------------------------------------------------
+
+ NET_C(COIN1.2, F9.13)
+ NET_C(COIN1.1, F9.11)
NET_C(COIN1.Q, GND)
- //CONNECTION(CSW1, "F9", 11)
- CONNECTION(CSW1, "COIN1", 1)
-
- //CONNECTION("F9", 10, "F9", 13) //TODO: causes lots of bouncing, commented out since this trace is not implemented in gotcha
- CONNECTION("F9", 10, "COIN1", 2) //TODO: causes lots of bouncing, commented out since this trace is not implemented in gotcha
-
- CONNECTION(V64, "H7", 12)
- CONNECTION(V64, "H7", 13)
-
- CONNECTION(CSW1, "F8", 10)
- CONNECTION("F9", 10, "F8", 12)
- CONNECTION(V64I, "F8", 11)
- CONNECTION(P, "F8", 13)
- CONNECTION(P, "F8", 1)
- CONNECTION(V64I, "F8", 3)
- CONNECTION("F8", 9, "F8", 2)
- CONNECTION(CSW1, "F8", 4)
-
- CONNECTION("F8", 6, "H8", 12)
- CONNECTION(P, "H8", 10)
- CONNECTION(V16_d, "H8", 11)
- CONNECTION(P, "H8", 13)
- CONNECTION("H8", 9, "J8", 15)
- CONNECTION("H8", 9, "J9", 9)
- CONNECTION(V16_d, "J8", 14)
- CONNECTION("J8", 13, "J9", 10)
-
- CONNECTION(V4_d, "S3", 1)
- CONNECTION("S3", 2, "J9", 11)
+ NET_C(CSW1, COIN1.1)
+ NET_C(F9.10, COIN1.2)
+
+ NET_C(V64, H7.12)
+ NET_C(V64, H7.13)
+
+ NET_C(CSW1, F8.10)
+ NET_C(F9.10, F8.12)
+ NET_C(V64I, F8.11)
+ NET_C(P, F8.13)
+ NET_C(P, F8.1)
+ NET_C(V64I, F8.3)
+ NET_C(F8.9, F8.2)
+ NET_C(CSW1, F8.4)
+
+ NET_C(F8.6, H8.12)
+ NET_C(P, H8.10)
+ NET_C(V16_d, H8.11)
+ NET_C(P, H8.13)
+ NET_C(H8.9, J8.15)
+ NET_C(H8.9, J9.9)
+ NET_C(V16_d, J8.14)
+ NET_C(J8.13, J9.10)
+
+ NET_C(V4_d, S3.1)
+ NET_C(S3.2, J9.11)
RES(R15, RES_K(1))
NET_C(R15.1, V5)
NET_C(R15.2, S3.2)
- CONNECTION("J9", 8, "L9", 5)
- CONNECTION("J9", 6, "L9", 4)
+ NET_C(J9.8, L9.5)
+ NET_C(J9.6, L9.4)
- CONNECTION("COIN2", 2, "F9", 1)
- CONNECTION("COIN2", 1, "F9", 3)
+ NET_C(COIN2.2, F9.1)
+ NET_C(COIN2.1, F9.3)
NET_C(COIN2.Q, GND)
- CONNECTION(CSW2, "COIN2", 1)
- CONNECTION(CSW2, "H9", 10)
- CONNECTION("F9", 4, "H9", 12)
- CONNECTION("F9", 4, "COIN2", 2)
- CONNECTION(V64_n, "H9", 11)
- CONNECTION(V64_n, "H9", 3)
- CONNECTION(P, "H9", 13)
- CONNECTION("H9", 9, "H9", 2)
- CONNECTION(CSW2, "H9", 4)
- CONNECTION(P, "H9", 1)
-
- CONNECTION(P, "H8", 4)
- CONNECTION("H9", 6, "H8", 2)
- CONNECTION(V16_d, "H8", 3)
- CONNECTION(P, "H8", 1)
- CONNECTION("H8", 5, "J8", 6)
- CONNECTION(V16_d, "J8", 5)
- CONNECTION(P, "J9", 3)
- CONNECTION("H8", 5, "J9", 5)
- CONNECTION("J8", 7, "J9", 4)
-
- CONNECTION(P2_CONDITIONAL_dash, "E9", 9)
- CONNECTION("E9", 8, "H1", 1)
- CONNECTION("E9", 8, "H1", 2)
-
- //Start2 Input
- //Start1 Input
+ NET_C(CSW2, COIN2.1)
+ NET_C(CSW2, H9.10)
+ NET_C(F9.4, H9.12)
+ NET_C(F9.4, COIN2.2)
+ NET_C(V64_n, H9.11)
+ NET_C(V64_n, H9.3)
+ NET_C(P, H9.13)
+ NET_C(H9.9, H9.2)
+ NET_C(CSW2, H9.4)
+ NET_C(P, H9.1)
+
+ NET_C(P, H8.4)
+ NET_C(H9.6, H8.2)
+ NET_C(V16_d, H8.3)
+ NET_C(P, H8.1)
+ NET_C(H8.5, J8.6)
+ NET_C(V16_d, J8.5)
+ NET_C(P, J9.3)
+ NET_C(H8.5, J9.5)
+ NET_C(J8.7, J9.4)
+
+ NET_C(P2_CONDITIONAL_dash, E9.9)
+ NET_C(E9.8, H1.1)
+ NET_C(E9.8, H1.2)
+
+ //----------------------------------------------------------------
+ // Start 1 & 2 logic
+ //---------------------------------------------------------------
+
RES(R58, RES_K(1))
- //CONNECTION("START", 2, "E9", 11)
NET_C(START2.2, GND)
NET_C(R58.1, V5)
NET_C(START2.1, R58.2, E9.11)
- CONNECTION("E9", 10, "E8", 12)
- CONNECTION(P, "E8", 10)
- CONNECTION(V64I, "E8", 11)
+ NET_C(E9.10, E8.12)
+ NET_C(P, E8.10)
+ NET_C(V64I, E8.11)
- CONNECTION(V128_d, "F7", 2)
- CONNECTION(V128_d, "F7", 3)
- CONNECTION(CREDIT2_n, "F7", 1)
- CONNECTION(ATTRACT_n, "E7", 12)
- CONNECTION("F7", 4, "E7", 11)
- CONNECTION("E7", 13, "E8", 13)
+ NET_C(V128_d, F7.2)
+ NET_C(V128_d, F7.3)
+ NET_C(CREDIT2_n, F7.1)
+ NET_C(ATTRACT_n, E7.12)
+ NET_C(F7.4, E7.11)
+ NET_C(E7.13, E8.13)
//Start1 Input
RES(R57, RES_K(1))
- //CONNECTION("START", 1, "E9", 3)
NET_C(START1.2, GND)
NET_C(R57.1, V5)
NET_C(START1.1, R57.2, E9.3)
- CONNECTION("E9", 4, "E8", 2)
- CONNECTION(P, "E8", 4)
- CONNECTION(V64_d, "E8", 3)
-
+ NET_C(E9.4, E8.2)
+ NET_C(P, E8.4)
+ NET_C(V64_d, E8.3)
- CONNECTION(CREDIT_1_OR_2_n, "E7", 2)
- CONNECTION(ATTRACT_n, "E7", 3)
- CONNECTION("E7", 1, "E8", 1)
+ NET_C(CREDIT_1_OR_2_n, E7.2)
+ NET_C(ATTRACT_n, E7.3)
+ NET_C(E7.1, E8.1)
- CONNECTION(CR_START1_n, "D8", 4) // Schematic shows CR_START1 ?
- CONNECTION(CR_START2_n, "D8", 5)
+ NET_C(CR_START1_n, D8.4)
+ NET_C(CR_START2_n, D8.5)
+ NET_C(START_GAME, M9.3)
+ NET_C(START_GAME, M9.5)
- CONNECTION(START_GAME, "M9", 3)
- CONNECTION(START_GAME, "M9", 5)
+ NET_C(V32, D6.4)
+ NET_C(ATTRACT, D6.5)
+ NET_C(P, E6.10)
+ NET_C(START_GAME, E6.12)
+ NET_C(D6.6, E6.11)
+ NET_C(D6.3, E6.13)
- CONNECTION(V32, "D6", 4)
- CONNECTION(ATTRACT, "D6", 5)
- CONNECTION(P, "E6", 10)
- CONNECTION(START_GAME, "E6", 12)
- CONNECTION("D6", 6, "E6", 11)
- CONNECTION("D6", 3, "E6", 13)
+ NET_C(CREDIT_1_OR_2_n, D8.13)
+ NET_C(EGL, D8.12)
- //TODO: hows this whole latch stuff work? what about Q_n going to COIN1_n and COIN2_n
- CONNECTION(CREDIT_1_OR_2_n, "D8", 13)
- CONNECTION(EGL, "D8", 12)
+ NET_C(LAT_Q, D6.1)
+ NET_C(EGL_n, D6.2)
-
- CONNECTION(LAT_Q, "D6", 1)
- CONNECTION(EGL_n, "D6", 2)
-
- //Serve
+ //----------------------------------------------------------------
+ // Serve logic
+ //---------------------------------------------------------------
RES(R30, RES_K(1))
NET_C(SERVE.2, GND)
NET_C(SERVE.1, R30.2)
NET_C(R30.1, V5)
- CONNECTION(H64, "J3", 6)
- CONNECTION(H32, "J3", 5)
- CONNECTION("J3", 4, "L4", 13)
- CONNECTION(H128, "L4", 2)
- CONNECTION(H16, "L4", 1)
-
- CONNECTION(BALL_DISPLAY, "H2", 13)
- CONNECTION(H128, "H2", 12)
- CONNECTION("H2", 11, "C3", 9)
- CONNECTION(HSYNC, "C3", 10)
- CONNECTION("C3", 8, "B3", 5)
- CONNECTION(H8_d, "B3", 6)
- CONNECTION("B3", 4, "C3", 4)
- CONNECTION(H4, "C3", 5)
- CONNECTION("C3", 6, "A4", 9)
- CONNECTION(START_GAME1_n, "A4", 10)
-
- CONNECTION(SERVE_WAIT_n, "D2", 13)
-
- CONNECTION(SERVE_n, "D2", 12)
- CONNECTION(SERVE_n, "A3", 4)
- CONNECTION(P, "A3", 2)
- CONNECTION(ATTRACT, "A3", 3)
- CONNECTION(SERVE_WAIT, "A3", 1)
-
- CONNECTION(BALL, "E1", 13)
- CONNECTION("E1", 12, "B3", 8)
- CONNECTION("A3", 6, "B3", 9)
- CONNECTION("B3", 10, "B3", 11)
- CONNECTION(SERVE_WAIT_n, "B3", 12)
- CONNECTION("B3", 13, "A3", 12)
- CONNECTION("A4", 8, "A3", 10)
- CONNECTION("L4", 12, "A3", 11)
- CONNECTION(P, "A3", 13)
-
- //Set Bricks
- CONNECTION(P, "D3", 10)
- CONNECTION(P, "D3", 12)
- CONNECTION(START_GAME, "D3", 11)
- CONNECTION(SERVE_n, "D3", 13)
-
- //Playfield
- CONNECTION(LH_SIDE, "H3", 1)
- CONNECTION(TOP_BOUND, "H3", 13)
- CONNECTION(RH_SIDE, "H3", 2)
- CONNECTION("H3", 12, "H4", 2)
- CONNECTION("E1", 2, "C36", 1)
- CONNECTION("C36", 2, "H4", 1)
-
- CONNECTION(BALL_DISPLAY, "A5", 10)
- CONNECTION(PSYNC, "A5", 9)
- CONNECTION(BSYNC, "C3", 2)
- CONNECTION(TOP_BOUND, "C3", 1)
-
- CONNECTION(PC, "C4", 4)
- CONNECTION(PD, "C4", 5)
- CONNECTION(BP_HIT_n, "C5", 13)
- CONNECTION(PD, "A5", 1)
- CONNECTION("C5", 12, "A5", 2)
- CONNECTION(BSYNC, "A5", 5)
- CONNECTION(VSYNC, "A5", 4)
-
- CONNECTION("C5", 12, "A5", 13)
- CONNECTION("A5", 3, "A5", 12)
-
- CONNECTION(BRICK_HIT, "D5", 3)
- CONNECTION("E5", 3, "D5", 1)
- CONNECTION("D5", 6, "D5", 2)
- CONNECTION(BP_HIT_n, "D5", 4)
-
- CONNECTION(P, "A6", 10)
- CONNECTION("C4", 6, "A6", 12)
- CONNECTION(BP_HIT_n, "A6", 11)
- CONNECTION(P, "A6", 13)
-
- CONNECTION("A5", 3, "A6", 4)
- CONNECTION(V16_d, "A6", 2)
- CONNECTION(VB_HIT_n, "A6", 3)
- CONNECTION("A5", 11, "A6", 1)
-
- CONNECTION(P2_CONDITIONAL, "C6", 1)
- CONNECTION("D5", 5, "C6", 2)
- CONNECTION("D5", 6, "C4", 2)
- CONNECTION(P2_CONDITIONAL, "C4", 1)
-
- CONNECTION(V_SLOW, "B6", 12)
- CONNECTION("A6", 8, "B6", 13)
- CONNECTION(V_SLOW, "C6", 10)
- CONNECTION("A6", 5, "C6", 9)
-
- CONNECTION(Y0, "B6", 4)
- CONNECTION("C6", 8, "B6", 5)
-
- CONNECTION(X2, "D6", 10)
- CONNECTION("B6", 8, "D6", 9)
- CONNECTION("B5", 7, "B6", 9)
- CONNECTION("B5", 6, "B6", 10)
- CONNECTION(X0, "B6", 1)
- CONNECTION(X2, "B6", 2)
-
- CONNECTION("B5", 6, "C5", 11)
- CONNECTION("B5", 7, "C5", 9)
-
- CONNECTION(SU_n, "B5", 11)
- CONNECTION(P, "B5", 15)
- CONNECTION(P, "B5", 1)
- CONNECTION(P, "B5", 10)
- CONNECTION(P, "B5", 9)
- CONNECTION(P, "B5", 4)
- CONNECTION("D6", 8, "B5", 5)
- CONNECTION(SERVE_WAIT, "B5", 14)
-
- CONNECTION(BTB_HIT_n, "E5", 1)
- CONNECTION(SBD_n, "E5", 2)
-
- CONNECTION(BP_HIT_n, "E5", 4)
- CONNECTION(BTB_HIT_n, "E5", 5)
- CONNECTION("E5", 6, "F7", 11)
- CONNECTION("E5", 6, "F7", 12)
- CONNECTION(BRICK_HIT_n, "F7", 10)
- CONNECTION("F7", 9, "C2", 2)
- CONNECTION(BALL_DISPLAY, "C2", 1)
- CONNECTION("L3", 6, "E3", 11)
- CONNECTION("C2", 3, "E3", 12)
-
- CONNECTION(SET_BRICKS_n, "E6", 4)
- CONNECTION("E3", 13, "E6", 2)
- CONNECTION(CKBH, "E6", 3)
- CONNECTION("E3", 13, "D2", 2)
- CONNECTION(SET_BRICKS, "D2", 1)
- CONNECTION("D2", 3, "E6", 1)
-
- CONNECTION(BRICK_DISPLAY, "E1", 1)
- CONNECTION(H1, "K4", 9)
- CONNECTION(H2, "K4", 10)
- CONNECTION("K4", 8, "E3", 2)
- CONNECTION("L3", 6, "E3", 3)
-
- CONNECTION(ATTRACT_n, "C2", 13)
- CONNECTION(SET_BRICKS_n, "C2", 12)
- CONNECTION("C2", 11, "H3", 10)
- CONNECTION(FPD1, "H3", 9)
- CONNECTION(FPD2, "H3", 11)
- CONNECTION("H3", 8, "E1", 3)
- CONNECTION("E1", 4, "C32", 1)
- CONNECTION("C32", 2, "L3", 13)
- CONNECTION(H4, "L3", 2)
- CONNECTION(H8, "L3", 1)
- CONNECTION(H16, "L3", 15)
- CONNECTION(V32, "L3", 14)
- CONNECTION(V64, "L3", 7)
- CONNECTION(V128, "L3", 9)
- CONNECTION(V16, "L3", 10)
- CONNECTION(RAM_PLAYER1, "L3", 11)
- CONNECTION(H32, "L3", 3)
- CONNECTION(H128, "L3", 4)
- CONNECTION("H4", 8, "L3", 5)
-
- CONNECTION(V2, "M4", 5)
- CONNECTION(V4, "M4", 4)
- CONNECTION(V8, "M4", 3)
- CONNECTION("M4", 6, "H4", 9)
- CONNECTION(VSYNC_n, "K4", 2)
- CONNECTION(H64, "K4", 1)
- CONNECTION("K4", 3, "H4", 10)
- CONNECTION(FPD1_n, "F2", 13)
- CONNECTION(BRICK_HIT_n, "F2", 2)
- CONNECTION(FPD2_n, "F2", 1)
-
- CONNECTION("F2", 12, "L3", 12)
-
- //FPD circuits
- CONNECTION(K2, "M4", 2)
- CONNECTION(G2, "M4", 13)
- CONNECTION(D2, "M4", 1)
- CONNECTION(K1, "M4", 9)
- CONNECTION(G1, "M4", 10)
- CONNECTION(D1, "M4", 11)
- CONNECTION(BP_HIT_n, "E4", 2)
- CONNECTION("M4", 12, "E4", 1)
- CONNECTION(BP_HIT_n, "E4", 4)
- CONNECTION("M4", 8, "E4", 5)
-
- CONNECTION(P, "F4", 4)
- CONNECTION(P, "F4", 2)
- CONNECTION("E4", 3, "F4", 3)
- CONNECTION(START_GAME1_n, "F4", 1)
-
- CONNECTION(P, "F4", 10)
- CONNECTION(P, "F4", 12)
- CONNECTION("E4", 6, "F4", 11)
- CONNECTION(START_GAME1_n, "F4", 13)
-
- CONNECTION("F4", 6, "F3", 5)
- CONNECTION(GNDD, "F3", 4)
- CONNECTION("F4", 8, "F3", 11)
- CONNECTION(GNDD, "F3", 12)
-
- CONNECTION(P, "F3", 3)
- CONNECTION(P, "F3", 13)
-
-
- //CREDIT_COUNTER
- CONNECTION(BONUS_COIN, "E7", 8)
- CONNECTION(COIN, "E7", 9)
- CONNECTION(CR_START1_n, "H7", 2)
- CONNECTION(V8, "D8", 1)
- CONNECTION(CR_START2, "D8", 2)
- CONNECTION("D8", 3, "H7", 1)
-
- CONNECTION("L8", 12, "L8", 11) // not on schematic, on rollover load 16, keeps you from losing all credits
- CONNECTION(P, "L8", 15)
- CONNECTION(P, "L8", 1)
- CONNECTION(P, "L8", 10)
- CONNECTION(P, "L8", 9)
- CONNECTION("E7", 10, "L8", 5)
- CONNECTION("H7", 3, "L8", 4)
-
- CONNECTION(LAT_Q, "L9", 10)
- CONNECTION("L8", 13, "L9", 9)
- CONNECTION("L9", 8, "L8", 14)
- CONNECTION("L8", 7, "M8", 9)
- CONNECTION("L8", 6, "M8", 10)
- CONNECTION("L8", 2, "M8", 11)
- CONNECTION("L8", 3, "M9", 13)
-
- CONNECTION(CREDIT2_n, "F9", 5)
- CONNECTION(CREDIT2_n, "L9", 2)
- CONNECTION("M9", 12, "L9", 1)
- CONNECTION(CREDIT_1_OR_2, "F9", 9)
-
- //PLGM2_n
- CONNECTION(CR_START1_n, "F7", 6)
- CONNECTION(CR_START2_n, "F7", 5)
-
- //PLAY_CP
- CONNECTION(PLGM2_n, "F2", 5)
- CONNECTION(PLAYER_2, "F2", 4)
- CONNECTION(H1, "F2", 3)
-
- CONNECTION(P, "F5", 4)
- CONNECTION(P, "F5", 2)
- CONNECTION(SERVE_WAIT, "F5", 3)
- CONNECTION(H128, "F5", 1)
- CONNECTION("F2", 6, "D2", 9)
- CONNECTION("F5", 5, "D2", 10)
-
- //EGL
- CONNECTION(P, "B4", 10)
- CONNECTION(P, "B4", 7)
- CONNECTION(P, "B4", 9)
- CONNECTION(PLAY_CP, "B4", 2)
-
- CONNECTION(EGL, "C5", 1)
-
-
-
- CONNECTION(START_GAME1_n, "B4", 1)
- CONNECTION(BALL_A, "A4", 2)
- CONNECTION(BALL_B, "S4", 1) // Three balls
- CONNECTION(BALL_C, "S4", 2) // Five balls
- //CONNECTION("S4", 3, "A4", 1)
- NET_C(S4.Q, A4.1)
- CONNECTION("A4", 3, "C37", 1)
+ NET_C(H64, J3.6)
+ NET_C(H32, J3.5)
+ NET_C(J3.4, L4.13)
+ NET_C(H128, L4.2)
+ NET_C(H16, L4.1)
+
+ NET_C(BALL_DISPLAY, H2.13)
+ NET_C(H128, H2.12)
+ NET_C(H2.11, C3.9)
+ NET_C(HSYNC, C3.10)
+ NET_C(C3.8, B3.5)
+ NET_C(H8_d, B3.6)
+ NET_C(B3.4, C3.4)
+ NET_C(H4, C3.5)
+ NET_C(C3.6, A4.9)
+ NET_C(START_GAME1_n, A4.10)
+
+ NET_C(SERVE_WAIT_n, D2.13)
+
+ NET_C(SERVE_n, D2.12)
+ NET_C(SERVE_n, A3.4)
+ NET_C(P, A3.2)
+ NET_C(ATTRACT, A3.3)
+ NET_C(SERVE_WAIT, A3.1)
+
+ NET_C(BALL, E1.13)
+ NET_C(E1.12, B3.8)
+ NET_C(A3.6, B3.9)
+ NET_C(B3.10, B3.11)
+ NET_C(SERVE_WAIT_n, B3.12)
+ NET_C(B3.13, A3.12)
+ NET_C(A4.8, A3.10)
+ NET_C(L4.12, A3.11)
+ NET_C(P, A3.13)
- CONNECTION(SERVE_WAIT_n, "A4", 5)
- CONNECTION(BALL, "A4", 4)
+ //----------------------------------------------------------------
+ // Bricks logic
+ //---------------------------------------------------------------
- // Ball Circuit
+ NET_C(P, D3.10)
+ NET_C(P, D3.12)
+ NET_C(START_GAME, D3.11)
+ NET_C(SERVE_n, D3.13)
+ //----------------------------------------------------------------
+ // Playfield logic
+ //---------------------------------------------------------------
+
+ NET_C(LH_SIDE, H3.1)
+ NET_C(TOP_BOUND, H3.13)
+ NET_C(RH_SIDE, H3.2)
+ NET_C(H3.12, H4.2)
+ NET_C(E1.2, C36.1)
+#if (SLOW_BUT_ACCURATE)
+ NET_C(C36.1, H4.1)
+#else
+ NET_C(C36.2, H4.1)
+#endif
+ NET_C(BALL_DISPLAY, A5.10)
+ NET_C(PSYNC, A5.9)
+ NET_C(BSYNC, C3.2)
+ NET_C(TOP_BOUND, C3.1)
+
+ NET_C(PC, C4.4)
+ NET_C(PD, C4.5)
+ NET_C(BP_HIT_n, C5.13)
+ NET_C(PD, A5.1)
+ NET_C(C5.12, A5.2)
+ NET_C(BSYNC, A5.5)
+ NET_C(VSYNC, A5.4)
+
+ NET_C(C5.12, A5.13)
+ NET_C(A5.3, A5.12)
+
+ NET_C(BRICK_HIT, D5.3)
+ NET_C(E5.3, D5.1)
+ NET_C(D5.6, D5.2)
+ NET_C(BP_HIT_n, D5.4)
+
+ NET_C(P, A6.10)
+ NET_C(C4.6, A6.12)
+ NET_C(BP_HIT_n, A6.11)
+ NET_C(P, A6.13)
+
+ NET_C(A5.3, A6.4)
+ NET_C(V16_d, A6.2)
+ NET_C(VB_HIT_n, A6.3)
+ NET_C(A5.11, A6.1)
+
+ NET_C(P2_CONDITIONAL, C6.1)
+ NET_C(D5.5, C6.2)
+ NET_C(D5.6, C4.2)
+ NET_C(P2_CONDITIONAL, C4.1)
+
+ NET_C(V_SLOW, B6.12)
+ NET_C(A6.8, B6.13)
+ NET_C(V_SLOW, C6.10)
+ NET_C(A6.5, C6.9)
+
+ NET_C(Y0, B6.4)
+ NET_C(C6.8, B6.5)
+
+ NET_C(X2, D6.10)
+ NET_C(B6.8, D6.9)
+ NET_C(B5.7, B6.9)
+ NET_C(B5.6, B6.10)
+ NET_C(X0, B6.1)
+ NET_C(X2, B6.2)
+
+ NET_C(B5.6, C5.11)
+ NET_C(B5.7, C5.9)
+
+ NET_C(SU_n, B5.11)
+ NET_C(P, B5.15)
+ NET_C(P, B5.1)
+ NET_C(P, B5.10)
+ NET_C(P, B5.9)
+ NET_C(P, B5.4)
+ NET_C(D6.8, B5.5)
+ NET_C(SERVE_WAIT, B5.14)
+
+ NET_C(BTB_HIT_n, E5.1)
+ NET_C(SBD_n, E5.2)
+
+ NET_C(BP_HIT_n, E5.4)
+ NET_C(BTB_HIT_n, E5.5)
+ NET_C(E5.6, F7.11)
+ NET_C(E5.6, F7.12)
+ NET_C(BRICK_HIT_n, F7.10)
+ NET_C(F7.9, C2.2)
+ NET_C(BALL_DISPLAY, C2.1)
+ NET_C(L3.6, E3.11)
+ NET_C(C2.3, E3.12)
+
+ NET_C(SET_BRICKS_n, E6.4)
+ NET_C(E3.13, E6.2)
+ NET_C(CKBH, E6.3)
+ NET_C(E3.13, D2.2)
+ NET_C(SET_BRICKS, D2.1)
+ NET_C(D2.3, E6.1)
+
+ NET_C(BRICK_DISPLAY, E1.1)
+ NET_C(H1, K4.9)
+ NET_C(H2, K4.10)
+ NET_C(K4.8, E3.2)
+ NET_C(L3.6, E3.3)
+
+ NET_C(ATTRACT_n, C2.13)
+ NET_C(SET_BRICKS_n, C2.12)
+ NET_C(C2.11, H3.10)
+ NET_C(FPD1, H3.9)
+ NET_C(FPD2, H3.11)
+ NET_C(H3.8, E1.3)
+ NET_C(E1.4, C32.1)
+ NET_C(C32.1, L3.13)
+ NET_C(H4, L3.2)
+ NET_C(H8, L3.1)
+ NET_C(H16, L3.15)
+ NET_C(V32, L3.14)
+ NET_C(V64, L3.7)
+ NET_C(V128, L3.9)
+ NET_C(V16, L3.10)
+ NET_C(RAM_PLAYER1, L3.11)
+ NET_C(H32, L3.3)
+ NET_C(H128, L3.4)
+ NET_C(H4.8, L3.5)
+
+ NET_C(V2, M4.5)
+ NET_C(V4, M4.4)
+ NET_C(V8, M4.3)
+ NET_C(M4.6, H4.9)
+ NET_C(VSYNC_n, K4.2)
+ NET_C(H64, K4.1)
+ NET_C(K4.3, H4.10)
+ NET_C(FPD1_n, F2.13)
+ NET_C(BRICK_HIT_n, F2.2)
+ NET_C(FPD2_n, F2.1)
+
+ NET_C(F2.12, L3.12)
- // Video Summing
- CONNECTION(V16_d, "D2", 4)
- CONNECTION(V8_d, "D2", 5)
- CONNECTION("D2", 6, "E3", 8)
- CONNECTION(VSYNC_n, "E3", 9)
- CONNECTION(HSYNC_n, "E2", 12)
- CONNECTION("E3", 10, "E2", 13)
- CONNECTION(PSYNC, "B9", 1)
- CONNECTION(VSYNC_n, "B9", 2)
+ //----------------------------------------------------------------
+ // Hit circuits and start logic
+ //---------------------------------------------------------------
+
+ NET_C(K2, M4.2)
+ NET_C(G2, M4.13)
+ NET_C(D2, M4.1)
+ NET_C(K1, M4.9)
+ NET_C(G1, M4.10)
+ NET_C(D1, M4.11)
+ NET_C(BP_HIT_n, E4.2)
+ NET_C(M4.12, E4.1)
+ NET_C(BP_HIT_n, E4.4)
+ NET_C(M4.8, E4.5)
+
+ NET_C(P, F4.4)
+ NET_C(P, F4.2)
+ NET_C(E4.3, F4.3)
+ NET_C(START_GAME1_n, F4.1)
+
+ NET_C(P, F4.10)
+ NET_C(P, F4.12)
+ NET_C(E4.6, F4.11)
+ NET_C(START_GAME1_n, F4.13)
+
+ NET_C(F4.6, F3.5)
+ NET_C(GNDD, F3.4)
+ NET_C(F4.8, F3.11)
+ NET_C(GNDD, F3.12)
+
+ NET_C(P, F3.3)
+ NET_C(P, F3.13)
+
+ //----------------------------------------------------------------
+ // Credit counter logic
+ //---------------------------------------------------------------
+
+ NET_C(BONUS_COIN, E7.8)
+ NET_C(COIN, E7.9)
+ NET_C(CR_START1_n, H7.2)
+ NET_C(V8, D8.1)
+ NET_C(CR_START2, D8.2)
+ NET_C(D8.3, H7.1)
+
+ NET_C(L8.12, L8.11) // FIXME: not on schematic, on rollover load 16, keeps you from losing all credits
+ NET_C(P, L8.15)
+ NET_C(P, L8.1)
+ NET_C(P, L8.10)
+ NET_C(P, L8.9)
+ NET_C(E7.10, L8.5)
+ NET_C(H7.3, L8.4)
+
+ NET_C(LAT_Q, L9.10)
+ NET_C(L8.13, L9.9)
+ NET_C(L9.8, L8.14)
+ NET_C(L8.7, M8.9)
+ NET_C(L8.6, M8.10)
+ NET_C(L8.2, M8.11)
+ NET_C(L8.3, M9.13)
+
+ NET_C(CREDIT2_n, F9.5)
+ NET_C(CREDIT2_n, L9.2)
+ NET_C(M9.12, L9.1)
+ NET_C(CREDIT_1_OR_2, F9.9)
+
+ NET_C(CR_START1_n, F7.6)
+ NET_C(CR_START2_n, F7.5)
+
+ NET_C(PLGM2_n, F2.5)
+ NET_C(PLAYER_2, F2.4)
+ NET_C(H1, F2.3)
+
+ NET_C(P, F5.4)
+ NET_C(P, F5.2)
+ NET_C(SERVE_WAIT, F5.3)
+ NET_C(H128, F5.1)
+ NET_C(F2.6, D2.9)
+ NET_C(F5.5, D2.10)
+
+ NET_C(P, B4.10)
+ NET_C(P, B4.7)
+ NET_C(P, B4.9)
+ NET_C(PLAY_CP, B4.2)
+
+ NET_C(EGL, C5.1)
+
+ //----------------------------------------------------------------
+ // Ball logic
+ //---------------------------------------------------------------
+
+ NET_C(START_GAME1_n, B4.1)
+ NET_C(BALL_A, A4.2)
+ NET_C(BALL_B, S4.1) // Three balls
+ NET_C(BALL_C, S4.2) // Five balls
+ NET_C(S4.Q, A4.1)
+ NET_C(A4.3, C37.1)
+
+ NET_C(SERVE_WAIT_n, A4.5)
+ NET_C(BALL, A4.4)
+
+ //----------------------------------------------------------------
+ // Video output logic
+ //---------------------------------------------------------------
+
+ NET_C(V16_d, D2.4)
+ NET_C(V8_d, D2.5)
+ NET_C(D2.6, E3.8)
+ NET_C(VSYNC_n, E3.9)
+ NET_C(HSYNC_n, E2.12)
+ NET_C(E3.10, E2.13)
+ NET_C(PSYNC, B9.1)
+ NET_C(VSYNC_n, B9.2)
- // VIDEO SUMMING
RES(R41, RES_K(3.9))
RES(R42, RES_K(3.9))
RES(R43, RES_K(3.9))
RES(R51, RES_K(3.9))
RES(R52, RES_K(3.9))
-#if (0 && SLOW_BUT_ACCURATE)
+#if (SLOW_BUT_ACCURATE)
DIODE(CR6, "1N914")
NET_C(E2.11, CR6.K)
NET_C(CR6.A, R41.1, R42.1, R43.1, R51.1, R52.1)
#else
- //RES_SWITCH(CR6, E2.11, R41.1, GND)
RES_SWITCH(CR6, E2.11, R41.1, GND)
PARAM(CR6.RON, 1e20)
PARAM(CR6.ROFF, 1)
NET_C(R41.1, R42.1, R43.1, R51.1, R52.1)
#endif
- CONNECTION("R51", 2, PLAYFIELD)
- CONNECTION("R43", 2, BSYNC)
- CONNECTION("R52", 2, SCORE)
+ NET_C(R51.2, PLAYFIELD)
+ NET_C(R43.2, BSYNC)
+ NET_C(R52.2, SCORE)
NET_C(R41.2, B9.3)
NET_C(R42.2, V5)
ALIAS(videomix, R41.1)
- // Audio Summing
+ //----------------------------------------------------------------
+ // Audio logic
+ //---------------------------------------------------------------
+
RES(R36, RES_K(47))
RES(R37, RES_K(47))
RES(R38, RES_K(47))
RES(R39, RES_K(47))
- CONNECTION("R36", 2, "B9", 11)
- CONNECTION("R38", 2, "B9", 8)
- CONNECTION("R39", 2, FREE_GAME_TONE)
- CONNECTION("R37", 2, "B9", 6)
+ NET_C(R36.2, B9.11)
+ NET_C(R38.2, B9.8)
+ NET_C(R39.2, FREE_GAME_TONE)
+ NET_C(R37.2, B9.6)
NET_C(R36.1, R37.1, R38.1, R39.1)
ALIAS(sound, R36.1)
- // POTS
- POT2(POTP1, RES_K(5)) // 5k
- PARAM(POTP1.DIALLOG, 1) // Log Dial ...
- PARAM(POTP1.REVERSE, 1) // Log Dial ...
+ //----------------------------------------------------------------
+ // Potentiometer logic
+ //---------------------------------------------------------------
+
+ POT2(POTP1, RES_K(5)) // 5k
+ PARAM(POTP1.DIALLOG, 1) // Log Dial ...
+ PARAM(POTP1.REVERSE, 1) // Log Dial ...
NET_C(POTP1.1, V5)
- POT2(POTP2, RES_K(5)) // 5k
- PARAM(POTP2.DIALLOG, 1) // Log Dial ...
- PARAM(POTP2.REVERSE, 1) // Log Dial ...
+ POT2(POTP2, RES_K(5)) // 5k
+ PARAM(POTP2.DIALLOG, 1) // Log Dial ...
+ PARAM(POTP2.REVERSE, 1) // Log Dial ...
NET_C(POTP2.1, V5)
RES(R33, 47)
@@ -1624,7 +1724,7 @@ CIRCUIT_LAYOUT( breakout )
NET_C(D9.7, GND)
NET_C(D9.14, V5)
- CONNECTION(P2_CONDITIONAL_dash, "D9", 6)
+ NET_C(P2_CONDITIONAL_dash, D9.6)
NET_C(D9.12, E9.8)
NET_C(D9.8, POTP2.2) // Connect P2 dial here
NET_C(D9.11, POTP1.2)
@@ -1641,7 +1741,7 @@ CIRCUIT_LAYOUT( breakout )
/* Below is the upright cabinet configuration
* cocktail has two leds connected to R40.1 */
- CONNECTION(SERVE_WAIT_n, "R21", 2)
+ NET_C(SERVE_WAIT_n, R21.2)
NET_C(R21.1, R40.2)
NET_C(LED1.K, R40.1)
NET_C(LED1.A, V5)
@@ -1663,8 +1763,8 @@ CIRCUIT_LAYOUT( breakout )
// Coin Counter
//----------------------------------------------------------------
- CONNECTION(CSW1, "E2", 1)
- CONNECTION(CSW2, "E2", 2)
+ NET_C(CSW1, E2.1)
+ NET_C(CSW2, E2.2)
RES(R14, 150)
QBJT_SW(Q6, "2N5190")
DIODE(CR8, "1N4001")
@@ -1732,7 +1832,6 @@ CIRCUIT_LAYOUT( breakout )
NET_C(GND, F1.8)
#endif
-#if 1
// 163% -- manually optimized
HINT(B6.C, NO_DEACTIVATE)
HINT(C4.C, NO_DEACTIVATE)
@@ -1746,11 +1845,7 @@ CIRCUIT_LAYOUT( breakout )
HINT(H2.A, NO_DEACTIVATE)
HINT(H3.A, NO_DEACTIVATE)
HINT(J3.D, NO_DEACTIVATE)
-#if (USE_TRUTHTABLE_7448)
- HINT(J5.s, NO_DEACTIVATE) // 7448 needs to be disabled in all cases
-#else
- HINT(J5, NO_DEACTIVATE) // 7448 needs to be disabled in all cases
-#endif
+ HINT(J5, NO_DEACTIVATE) // 7448 needs to be disabled in all cases
HINT(J6, NO_DEACTIVATE)
HINT(J8.A, NO_DEACTIVATE)
HINT(J8.C, NO_DEACTIVATE)
@@ -1762,44 +1857,8 @@ CIRCUIT_LAYOUT( breakout )
HINT(M8.A, NO_DEACTIVATE)
HINT(N7.C, NO_DEACTIVATE)
-#else
- // 167% hints provided by log output - manually optimized
- HINT(M4.B, NO_DEACTIVATE) // 29.001761 197676 6816
- HINT(M3.C, NO_DEACTIVATE) // inf 129571 0
- HINT(N7.C, NO_DEACTIVATE) // inf 7850387 0 xx
- HINT(M3.B, NO_DEACTIVATE) // 23.234535 395870 17038
- HINT(M3.A, NO_DEACTIVATE) // 14.500880 197676 13632
- HINT(L7.C, NO_DEACTIVATE) // 122672.000000 122672 1
- HINT(L7.B, NO_DEACTIVATE) // 122672.000000 122672 1
- HINT(K7.D, NO_DEACTIVATE) // 122673.000000 122673 1
- HINT(K7.C, NO_DEACTIVATE) // 122672.000000 122672 1
- HINT(K7.B, NO_DEACTIVATE) // 122673.000000 122673 1
- HINT(K7.A, NO_DEACTIVATE) // 122673.000000 122673 1
- HINT(K4.D, NO_DEACTIVATE) // 1438.774735 4202661 2921 xx
- HINT(K4.B, NO_DEACTIVATE) // 3.939380 847790 215209 xx
- HINT(E2.B, NO_DEACTIVATE) // 108.050000 315506 2920 xx
- HINT(L7.D, NO_DEACTIVATE) // 122672.000000 122672 1
- HINT(E9.F, NO_DEACTIVATE) // inf 129571 0
- //HINT(J2.F, NO_DEACTIVATE) // 493.408951 959187 1944
- HINT(C5.C, NO_DEACTIVATE) // inf 195514 0
- HINT(M3.D, NO_DEACTIVATE) // 27.744898 418726 15092 xx
- HINT(J8.A, NO_DEACTIVATE) // 40890.000000 122670 3
- HINT(E3.B, NO_DEACTIVATE) // 203581.000000 203581 1
- HINT(M9.D, NO_DEACTIVATE) // inf 323268 0
- //HINT(L4.B, NO_DEACTIVATE) // 7.290053 1192536 163584
- HINT(J3.D, NO_DEACTIVATE) // 393.639951 957726 2433 xx
- HINT(L7.A, NO_DEACTIVATE) // inf 122672 0
- HINT(F2.A, NO_DEACTIVATE) // 286289.000000 286289 1
- HINT(M8.A, NO_DEACTIVATE) // 129571.000000 129571 1
- HINT(J7.B, NO_DEACTIVATE) // inf 122672 0
- //HINT(H2.A, NO_DEACTIVATE) // 393.839704 958212 2433
- HINT(H3.A, NO_DEACTIVATE) // 3.932473 850122 216180 xx
- HINT(J2.E, NO_DEACTIVATE) // 26.140344 203581 7788
- HINT(J7.A, NO_DEACTIVATE) // inf 122672 0
- HINT(J8.C, NO_DEACTIVATE) // 40890.000000 122670 3
-#endif
-CIRCUIT_LAYOUT_END
+NETLIST_END()
/*
* MCR106-2 model from http://www.duncanamps.com/
diff --git a/src/mame/machine/nl_pongd.cpp b/src/mame/machine/nl_pongdoubles.cpp
index 4d7ae1f98ff..4d7ae1f98ff 100644
--- a/src/mame/machine/nl_pongd.cpp
+++ b/src/mame/machine/nl_pongdoubles.cpp
diff --git a/src/mame/machine/nl_pongd.h b/src/mame/machine/nl_pongdoubles.h
index 2d7ff28b9a6..2d7ff28b9a6 100644
--- a/src/mame/machine/nl_pongd.h
+++ b/src/mame/machine/nl_pongdoubles.h
diff --git a/src/mame/machine/nl_pong.cpp b/src/mame/machine/nl_pongf.cpp
index 746f7e7e8c3..a5d3e510251 100644
--- a/src/mame/machine/nl_pong.cpp
+++ b/src/mame/machine/nl_pongf.cpp
@@ -14,7 +14,7 @@
#define FAST_CLOCK (1)
-NETLIST_START(pong_fast)
+NETLIST_START(pongf)
SOLVER(Solver, 48000)
PARAM(Solver.PARALLEL, 0) // Don't do parallel solvers
@@ -571,6 +571,7 @@ NETLIST_START(pong_fast)
NET_C(RV2.2, RV3.2)
ALIAS(videomix, RV3.2)
+
#if 1
HINT(clk, NO_DEACTIVATE)
HINT(ic_e1d, NO_DEACTIVATE)
@@ -593,17 +594,14 @@ NETLIST_START(pong_fast)
HINT(ic_b7d, NO_DEACTIVATE)
HINT(ic_a7a, NO_DEACTIVATE)
HINT(ic_g1a, NO_DEACTIVATE)
+
HINT(ic_c8a, NO_DEACTIVATE)
HINT(ic_c8b, NO_DEACTIVATE)
HINT(ic_d8b, NO_DEACTIVATE)
- HINT(ic_d6a, NO_DEACTIVATE)
+
HINT(ic_d6b, NO_DEACTIVATE)
HINT(ic_c6a, NO_DEACTIVATE)
HINT(ic_c6b, NO_DEACTIVATE)
- HINT(ic_e5b, NO_DEACTIVATE)
- HINT(ic_e4c, NO_DEACTIVATE)
- HINT(ic_d4b, NO_DEACTIVATE)
- HINT(ic_g1b, NO_DEACTIVATE)
#endif
diff --git a/src/mame/machine/nl_pong.h b/src/mame/machine/nl_pongf.h
index 0152f07e32b..80f96e6b7da 100644
--- a/src/mame/machine/nl_pong.h
+++ b/src/mame/machine/nl_pongf.h
@@ -1,4 +1,4 @@
// license:GPL-2.0+
// copyright-holders: Couriersud
-NETLIST_EXTERNAL(pong_fast)
+NETLIST_EXTERNAL(pongf)
diff --git a/src/mame/machine/nl_rebound.cpp b/src/mame/machine/nl_rebound.cpp
index 62deb191175..d6a2d96b9a2 100644
--- a/src/mame/machine/nl_rebound.cpp
+++ b/src/mame/machine/nl_rebound.cpp
@@ -69,16 +69,7 @@
#include "netlist/devices/net_lib.h"
#endif
-NETLIST_START(rebound_schematics)
- SOLVER(Solver, 48000)
- PARAM(Solver.DYNAMIC_TS, 1)
- PARAM(Solver.DYNAMIC_LTE, 1e-3)
- PARAM(Solver.DYNAMIC_MIN_TIMESTEP, 5e-7)
-
- PARAM(Solver.PARALLEL, 0) // Don't do parallel solvers
- PARAM(Solver.ACCURACY, 1e-9)
- PARAM(NETLIST.USE_DEACTIVATE, 1)
- HINT(F9.B, NO_DEACTIVATE)
+static NETLIST_START(rebound_schematics)
ANALOG_INPUT(V5, 5)
@@ -1293,3 +1284,19 @@ NETLIST_START(rebound_schematics)
J1.7, J2.7, J3.10, J4.7, J5.7, J6.7, J7.7, J8.8, J9.10,
K2.10, K3.8, K4.7, K5.7, K6.7, K7.8, K8.8, K9.10)
NETLIST_END()
+
+NETLIST_START(rebound)
+
+ LOCAL_SOURCE(rebound_schematics)
+ SOLVER(Solver, 48000)
+ PARAM(Solver.DYNAMIC_TS, 1)
+ PARAM(Solver.DYNAMIC_LTE, 1e-3)
+ PARAM(Solver.DYNAMIC_MIN_TIMESTEP, 5e-7)
+
+ PARAM(Solver.PARALLEL, 0) // Don't do parallel solvers
+ PARAM(Solver.ACCURACY, 1e-9)
+ PARAM(NETLIST.USE_DEACTIVATE, 1)
+ HINT(F9.B, NO_DEACTIVATE)
+ INCLUDE(rebound_schematics)
+
+NETLIST_END()
diff --git a/src/mame/machine/nl_rebound.h b/src/mame/machine/nl_rebound.h
index 9caa161e281..593df187502 100644
--- a/src/mame/machine/nl_rebound.h
+++ b/src/mame/machine/nl_rebound.h
@@ -1,4 +1,4 @@
// license:GPL-2.0+
// copyright-holders: Couriersud
-NETLIST_EXTERNAL(rebound_schematics)
+NETLIST_EXTERNAL(rebound)
diff --git a/src/mame/machine/nmk004.cpp b/src/mame/machine/nmk004.cpp
index 976c1ed6ec0..0ec810c6fe4 100644
--- a/src/mame/machine/nmk004.cpp
+++ b/src/mame/machine/nmk004.cpp
@@ -65,7 +65,7 @@ void nmk004_device::ym2203_irq_handler(int irq)
void nmk004_device::nmk004_sound_mem_map(address_map &map)
{
- //AM_RANGE(0x0000, 0x1fff) AM_ROM /* 0x0000 - 0x1fff = internal ROM */
+ //map(0x0000, 0x1fff).rom(); /* 0x0000 - 0x1fff = internal ROM */
map(0x2000, 0xefff).rom().region(":audiocpu", 0x2000);
map(0xf000, 0xf7ff).ram();
map(0xf800, 0xf801).rw(":ymsnd", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
diff --git a/src/mame/machine/qix.cpp b/src/mame/machine/qix.cpp
index 8cc23584abf..3fe4f112a1a 100644
--- a/src/mame/machine/qix.cpp
+++ b/src/mame/machine/qix.cpp
@@ -21,15 +21,14 @@
void qixmcu_state::machine_start()
{
- /* set up save states */
- save_item(NAME(m_68705_porta_out));
- save_item(NAME(m_coinctrl));
-}
+ qix_state::machine_start();
-void qixmcu_state::machine_reset()
-{
/* reset the coin counter register */
m_coinctrl = 0x00;
+
+ /* set up save states */
+ save_item(NAME(m_68705_porta_out));
+ save_item(NAME(m_coinctrl));
}
void zookeep_state::machine_start()
@@ -37,9 +36,9 @@ void zookeep_state::machine_start()
qixmcu_state::machine_start();
/* configure the banking */
- membank("bank1")->configure_entry(0, memregion("videocpu")->base() + 0xa000);
- membank("bank1")->configure_entry(1, memregion("videocpu")->base() + 0x10000);
- membank("bank1")->set_entry(0);
+ m_vidbank->configure_entry(0, memregion("videocpu")->base() + 0xa000);
+ m_vidbank->configure_entry(1, memregion("videocpu")->base() + 0x10000);
+ m_vidbank->set_entry(0);
}
/*************************************
@@ -63,7 +62,7 @@ WRITE_LINE_MEMBER(qix_state::qix_vsync_changed)
WRITE8_MEMBER(zookeep_state::bankswitch_w)
{
- membank("bank1")->set_entry((data >> 2) & 1);
+ m_vidbank->set_entry(BIT(data, 2));
/* not necessary, but technically correct */
qix_palettebank_w(space, offset, data);
}
diff --git a/src/mame/machine/segacrp2_device.cpp b/src/mame/machine/segacrp2_device.cpp
index 8fd7b4f5729..1a2676bd631 100644
--- a/src/mame/machine/segacrp2_device.cpp
+++ b/src/mame/machine/segacrp2_device.cpp
@@ -48,43 +48,37 @@
#include "emu.h"
#include "segacrp2_device.h"
-static void decode(uint8_t *rom, uint8_t *decrypted,
- const uint8_t xor_table[128],const int swap_table[128])
-{
- static const uint8_t swaptable[24][4] =
- {
- { 6,4,2,0 }, { 4,6,2,0 }, { 2,4,6,0 }, { 0,4,2,6 },
- { 6,2,4,0 }, { 6,0,2,4 }, { 6,4,0,2 }, { 2,6,4,0 },
- { 4,2,6,0 }, { 4,6,0,2 }, { 6,0,4,2 }, { 0,6,4,2 },
- { 4,0,6,2 }, { 0,4,6,2 }, { 6,2,0,4 }, { 2,6,0,4 },
- { 0,6,2,4 }, { 2,0,6,4 }, { 0,2,6,4 }, { 4,2,0,6 },
- { 2,4,0,6 }, { 4,0,2,6 }, { 2,0,4,6 }, { 0,2,4,6 },
- };
-
- for (int A = 0x0000;A < 0x8000;A++)
+static void decode(uint8_t *rom, uint8_t *decrypted, const uint8_t xor_table[128], const int swap_table[128])
+{
+ static const uint8_t swaptable[24][4] = {
+ { 6,4,2,0 }, { 4,6,2,0 }, { 2,4,6,0 }, { 0,4,2,6 },
+ { 6,2,4,0 }, { 6,0,2,4 }, { 6,4,0,2 }, { 2,6,4,0 },
+ { 4,2,6,0 }, { 4,6,0,2 }, { 6,0,4,2 }, { 0,6,4,2 },
+ { 4,0,6,2 }, { 0,4,6,2 }, { 6,2,0,4 }, { 2,6,0,4 },
+ { 0,6,2,4 }, { 2,0,6,4 }, { 0,2,6,4 }, { 4,2,0,6 },
+ { 2,4,0,6 }, { 4,0,2,6 }, { 2,0,4,6 }, { 0,2,4,6 } };
+
+ for (int a = 0x0000; a < 0x8000; a++)
{
- int row;
- uint8_t src;
const uint8_t *tbl;
+ const uint8_t src = rom[a];
- src = rom[A];
+ // pick the translation table from bits 0, 3, 6, 9, 12 and 14 of the address
+ const int row = bitswap<6>(a, 14, 12, 9, 6, 3, 0);
- /* pick the translation table from bits 0, 3, 6, 9, 12 and 14 of the address */
- row = (A & 1) + (((A >> 3) & 1) << 1) + (((A >> 6) & 1) << 2)
- + (((A >> 9) & 1) << 3) + (((A >> 12) & 1) << 4) + (((A >> 14) & 1) << 5);
+ // decode the opcodes
+ tbl = swaptable[swap_table[2 * row]];
+ decrypted[a] = bitswap<8>(src, 7, tbl[0], 5, tbl[1], 3, tbl[2], 1, tbl[3]) ^ xor_table[2 * row];
- /* decode the opcodes */
- tbl = swaptable[swap_table[2*row]];
- decrypted[A] = bitswap<8>(src,7,tbl[0],5,tbl[1],3,tbl[2],1,tbl[3]) ^ xor_table[2*row];
-
- /* decode the data */
- tbl = swaptable[swap_table[2*row+1]];
- rom[A] = bitswap<8>(src,7,tbl[0],5,tbl[1],3,tbl[2],1,tbl[3]) ^ xor_table[2*row+1];
+ // decode the data
+ tbl = swaptable[swap_table[2 * row + 1]];
+ rom[a] = bitswap<8>(src, 7, tbl[0], 5, tbl[1], 3, tbl[2], 1, tbl[3]) ^ xor_table[2 * row + 1];
}
}
+
DEFINE_DEVICE_TYPE(NEC_315_5136, nec_315_5136_device, "nec_315_5136", "Nec 315-5136")
DEFINE_DEVICE_TYPE(SEGA_315_5179, sega_315_5179_device, "sega_315_5179", "Sega 315-5179")
DEFINE_DEVICE_TYPE(SEGA_315_5178, sega_315_5178_device, "sega_315_5178", "Sega 315-5178")
@@ -98,263 +92,265 @@ DEFINE_DEVICE_TYPE(SEGA_317_0006, sega_317_0006_device, "sega_317_0006", "Sega 3
DEFINE_DEVICE_TYPE(SEGA_317_0007, sega_317_0007_device, "sega_317_0007", "Sega 317-0007")
+segacrp2_z80_device::segacrp2_z80_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
+ z80_device(mconfig, type, tag, owner, clock),
+ m_decrypted(*this, finder_base::DUMMY_TAG)
+{
+}
-segacrp2_z80_device::segacrp2_z80_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : z80_device(mconfig, type, tag, owner, clock)
-, m_decrypted(*this, finder_base::DUMMY_TAG) {}
-void segacrp2_z80_device::device_start() { z80_device::device_start(); decrypt(); }
-void segacrp2_z80_device::device_reset() { z80_device::device_reset(); }
-void segacrp2_z80_device::decrypt() { }
+void segacrp2_z80_device::device_start()
+{
+ z80_device::device_start();
+ decrypt();
+}
-nec_315_5136_device::nec_315_5136_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : segacrp2_z80_device(mconfig, NEC_315_5136, tag, owner, clock) {}
+nec_315_5136_device::nec_315_5136_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ segacrp2_z80_device(mconfig, NEC_315_5136, tag, owner, clock)
+{
+}
void nec_315_5136_device::decrypt()
{
// 315-5136
- static const uint8_t xor_table[128] =
- {
- 0x00,0x40, 0x10,0x50, 0x04,0x44, 0x14,0x54, 0x01,0x41, 0x11,0x51, 0x05,0x45, 0x15,0x55,
- 0x00,0x40, 0x10,0x50, 0x04,0x44, 0x14,0x54, 0x01,0x41, 0x11,0x51, 0x05,0x45, 0x15,0x55,
- 0x00,0x40, 0x10,0x50, 0x04,0x44, 0x14,0x54, 0x01,0x41, 0x11,0x51, 0x05,0x45, 0x15,0x55,
- 0x00,0x40, 0x10,0x50, 0x04,0x44, 0x14,0x54, 0x01,0x41, 0x11,0x51, 0x05,0x45, 0x15,0x55,
-
- 0x50,0x10, 0x44,0x04, 0x54,0x14, 0x41,0x01, 0x51,0x11, 0x45,0x05, 0x55,0x15, 0x40,0x00,
- 0x50,0x10, 0x44,0x04, 0x54,0x14, 0x41,0x01, 0x51,0x11, 0x45,0x05, 0x55,0x15, 0x40,0x00,
- 0x50,0x10, 0x44,0x04, 0x54,0x14, 0x41,0x01, 0x51,0x11, 0x45,0x05, 0x55,0x15, 0x40,0x00,
- 0x50,0x10, 0x44,0x04, 0x54,0x14, 0x41,0x01, 0x51,0x11, 0x45,0x05, 0x55,0x15, 0x40,0x00
- };
-
- static const int swap_table[128] =
- {
- 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,
- 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,
- 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
- 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
- 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,
- 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,
- 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
- 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,
- 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
- 0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,
- 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
- 0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,
- 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
- 0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x04
- };
+ static const uint8_t xor_table[128] = {
+ 0x00,0x40, 0x10,0x50, 0x04,0x44, 0x14,0x54, 0x01,0x41, 0x11,0x51, 0x05,0x45, 0x15,0x55,
+ 0x00,0x40, 0x10,0x50, 0x04,0x44, 0x14,0x54, 0x01,0x41, 0x11,0x51, 0x05,0x45, 0x15,0x55,
+ 0x00,0x40, 0x10,0x50, 0x04,0x44, 0x14,0x54, 0x01,0x41, 0x11,0x51, 0x05,0x45, 0x15,0x55,
+ 0x00,0x40, 0x10,0x50, 0x04,0x44, 0x14,0x54, 0x01,0x41, 0x11,0x51, 0x05,0x45, 0x15,0x55,
+
+ 0x50,0x10, 0x44,0x04, 0x54,0x14, 0x41,0x01, 0x51,0x11, 0x45,0x05, 0x55,0x15, 0x40,0x00,
+ 0x50,0x10, 0x44,0x04, 0x54,0x14, 0x41,0x01, 0x51,0x11, 0x45,0x05, 0x55,0x15, 0x40,0x00,
+ 0x50,0x10, 0x44,0x04, 0x54,0x14, 0x41,0x01, 0x51,0x11, 0x45,0x05, 0x55,0x15, 0x40,0x00,
+ 0x50,0x10, 0x44,0x04, 0x54,0x14, 0x41,0x01, 0x51,0x11, 0x45,0x05, 0x55,0x15, 0x40,0x00 };
+
+ static const int swap_table[128] = {
+ 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,
+ 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,
+ 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
+ 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
+ 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,
+ 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,
+ 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
+ 0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,
+ 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
+ 0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,
+ 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
+ 0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x04 };
decode(memregion(tag())->base(), m_decrypted, xor_table, swap_table);
}
-sega_315_5177_device::sega_315_5177_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : segacrp2_z80_device(mconfig, SEGA_315_5177, tag, owner, clock) {}
+
+sega_315_5177_device::sega_315_5177_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ segacrp2_z80_device(mconfig, SEGA_315_5177, tag, owner, clock)
+{
+}
void sega_315_5177_device::decrypt()
{
// 315-5177
- static const uint8_t xor_table[128] =
- {
- 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
- 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
- 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
- 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
- 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
- 0x05,0x55,0x50,0x14,
-
- 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
- 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
- 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
- 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
- 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
- 0x05,0x55,0x50,0x14,
- };
-
- static const int swap_table[128] =
- {
- 0,0,0,0,
- 1,1,1,1,1,
- 2,2,2,2,2,
- 3,3,3,3,
- 4,4,4,4,4,
- 5,5,5,5,5,
- 6,6,6,6,6,
- 7,7,7,7,7,
- 8,8,8,8,
- 9,9,9,9,9,
- 10,10,10,10,10,
- 11,11,11,11,11,
- 12,12,12,12,12,
- 13,13,
-
- 8,8,8,8,
- 9,9,9,9,9,
- 10,10,10,10,10,
- 11,11,11,11,
- 12,12,12,12,12,
- 13,13,13,13,13,
- 14,14,14,14,14,
- 15,15,15,15,15,
- 16,16,16,16,
- 17,17,17,17,17,
- 18,18,18,18,18,
- 19,19,19,19,19,
- 20,20,20,20,20,
- 21,21,
- };
+ static const uint8_t xor_table[128] = {
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,
+
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14 };
+
+ static const int swap_table[128] = {
+ 0,0,0,0,
+ 1,1,1,1,1,
+ 2,2,2,2,2,
+ 3,3,3,3,
+ 4,4,4,4,4,
+ 5,5,5,5,5,
+ 6,6,6,6,6,
+ 7,7,7,7,7,
+ 8,8,8,8,
+ 9,9,9,9,9,
+ 10,10,10,10,10,
+ 11,11,11,11,11,
+ 12,12,12,12,12,
+ 13,13,
+
+ 8,8,8,8,
+ 9,9,9,9,9,
+ 10,10,10,10,10,
+ 11,11,11,11,
+ 12,12,12,12,12,
+ 13,13,13,13,13,
+ 14,14,14,14,14,
+ 15,15,15,15,15,
+ 16,16,16,16,
+ 17,17,17,17,17,
+ 18,18,18,18,18,
+ 19,19,19,19,19,
+ 20,20,20,20,20,
+ 21,21 };
decode(memregion(tag())->base(), m_decrypted, xor_table, swap_table);
}
-sega_315_5176_device::sega_315_5176_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : segacrp2_z80_device(mconfig, SEGA_315_5176, tag, owner, clock) {}
+sega_315_5176_device::sega_315_5176_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ segacrp2_z80_device(mconfig, SEGA_315_5176, tag, owner, clock)
+{
+}
void sega_315_5176_device::decrypt()
{
- static const uint8_t xor_table[128] =
- {
- 0x44, 0x01, 0x51, 0x15, 0x40, 0x04, 0x54, 0x11, 0x45, 0x00, 0x50, 0x14,
- 0x41, 0x05, 0x55, 0x10, 0x44, 0x01, 0x51, 0x15, 0x40, 0x04, 0x54, 0x11,
- 0x45, 0x00, 0x50, 0x14, 0x41, 0x05, 0x55, 0x10, 0x44, 0x01, 0x51, 0x15,
- 0x40, 0x04, 0x54, 0x11, 0x45, 0x00, 0x50, 0x14, 0x41, 0x05, 0x55, 0x10,
- 0x44, 0x01, 0x51, 0x15, 0x40, 0x04, 0x54, 0x11, 0x45, 0x00, 0x50, 0x14,
- 0x41, 0x05, 0x55, 0x10,
-
- 0x44, 0x01, 0x51, 0x15, 0x40, 0x04, 0x54, 0x11, 0x45, 0x00, 0x50, 0x14,
- 0x41, 0x05, 0x55, 0x10, 0x44, 0x01, 0x51, 0x15, 0x40, 0x04, 0x54, 0x11,
- 0x45, 0x00, 0x50, 0x14, 0x41, 0x05, 0x55, 0x10, 0x44, 0x01, 0x51, 0x15,
- 0x40, 0x04, 0x54, 0x11, 0x45, 0x00, 0x50, 0x14, 0x41, 0x05, 0x55, 0x10,
- 0x44, 0x01, 0x51, 0x15, 0x40, 0x04, 0x54, 0x11, 0x45, 0x00, 0x50, 0x14,
- 0x41, 0x05, 0x55, 0x10,
- };
-
- static const int swap_table[128] =
- {
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03,
- 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04,
- 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07,
- 0x07, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x09,
- 0x09, 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x0a, 0x0a,
- 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0c,
-
- 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x09,
- 0x09, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0b,
- 0x0b, 0x0b, 0x0b, 0x0b, 0x0c, 0x0c, 0x0c, 0x0c,
- 0x0c, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0e,
- 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f,
- 0x0f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11,
- 0x11, 0x11, 0x11, 0x11, 0x12, 0x12, 0x12, 0x12,
- 0x12, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14,
- };
+ static const uint8_t xor_table[128] = {
+ 0x44, 0x01, 0x51, 0x15, 0x40, 0x04, 0x54, 0x11, 0x45, 0x00, 0x50, 0x14,
+ 0x41, 0x05, 0x55, 0x10, 0x44, 0x01, 0x51, 0x15, 0x40, 0x04, 0x54, 0x11,
+ 0x45, 0x00, 0x50, 0x14, 0x41, 0x05, 0x55, 0x10, 0x44, 0x01, 0x51, 0x15,
+ 0x40, 0x04, 0x54, 0x11, 0x45, 0x00, 0x50, 0x14, 0x41, 0x05, 0x55, 0x10,
+ 0x44, 0x01, 0x51, 0x15, 0x40, 0x04, 0x54, 0x11, 0x45, 0x00, 0x50, 0x14,
+ 0x41, 0x05, 0x55, 0x10,
+
+ 0x44, 0x01, 0x51, 0x15, 0x40, 0x04, 0x54, 0x11, 0x45, 0x00, 0x50, 0x14,
+ 0x41, 0x05, 0x55, 0x10, 0x44, 0x01, 0x51, 0x15, 0x40, 0x04, 0x54, 0x11,
+ 0x45, 0x00, 0x50, 0x14, 0x41, 0x05, 0x55, 0x10, 0x44, 0x01, 0x51, 0x15,
+ 0x40, 0x04, 0x54, 0x11, 0x45, 0x00, 0x50, 0x14, 0x41, 0x05, 0x55, 0x10,
+ 0x44, 0x01, 0x51, 0x15, 0x40, 0x04, 0x54, 0x11, 0x45, 0x00, 0x50, 0x14,
+ 0x41, 0x05, 0x55, 0x10 };
+
+ static const int swap_table[128] = {
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04,
+ 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07,
+ 0x07, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x09,
+ 0x09, 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x0a, 0x0a,
+ 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0c,
+
+ 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x09,
+ 0x09, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0c, 0x0c, 0x0c, 0x0c,
+ 0x0c, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0e,
+ 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f,
+ 0x0f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14 };
decode(memregion(tag())->base(), m_decrypted, xor_table, swap_table);
}
-sega_315_5162_device::sega_315_5162_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : segacrp2_z80_device(mconfig, SEGA_315_5162, tag, owner, clock) {}
+sega_315_5162_device::sega_315_5162_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ segacrp2_z80_device(mconfig, SEGA_315_5162, tag, owner, clock)
+{
+}
+
void sega_315_5162_device::decrypt()
{
// 315-5162
- static const uint8_t xor_table[128] =
- {
- 0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
- 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
- 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
- 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
- 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
- 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
- 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
- 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
- 0x00,
- };
-
- static const int swap_table[128] =
- {
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 12,
- };
+ static const uint8_t xor_table[128] = {
+ 0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
+ 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
+ 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
+ 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
+ 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
+ 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
+ 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
+ 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
+ 0x00 };
+
+ static const int swap_table[128] = {
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 12 };
decode(memregion(tag())->base(), m_decrypted, xor_table, swap_table);
}
+sega_315_5178_device::sega_315_5178_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ segacrp2_z80_device(mconfig, SEGA_315_5178, tag, owner, clock)
+{
+}
-sega_315_5178_device::sega_315_5178_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : segacrp2_z80_device(mconfig, SEGA_315_5178, tag, owner, clock) {}
void sega_315_5178_device::decrypt()
{ // 315-5178
- static const uint8_t xor_table[128] =
- {
- 0x00,0x55,0x45,0x05,0x11,0x41,0x01,0x14,0x44,0x50,0x10,
- 0x00,0x55,0x15,0x05,0x51,0x41,0x01,0x14,0x44,0x04,0x10,
- 0x40,0x55,0x15,0x05,0x51,0x11,
- 0x01,0x54,0x44,0x04,0x10,0x40,0x00,0x15,0x45,0x51,0x11,
- 0x01,0x54,0x14,0x04,0x50,0x40,0x00,0x15,0x45,0x05,0x11,
- 0x41,0x54,0x14,0x04,0x50,0x10,
- 0x00,0x55,0x45,0x05,0x11,0x41,0x01,0x14,
-
- 0x00,0x55,0x45,0x05,0x11,0x41,0x01,0x14,0x44,0x50,0x10,
- 0x00,0x55,0x15,0x05,0x51,0x41,0x01,0x14,0x44,0x04,0x10,
- 0x40,0x55,0x15,0x05,0x51,0x11,
- 0x01,0x54,0x44,0x04,0x10,0x40,0x00,0x15,0x45,0x51,0x11,
- 0x01,0x54,0x14,0x04,0x50,0x40,0x00,0x15,0x45,0x05,0x11,
- 0x41,0x54,0x14,0x04,0x50,0x10,
- 0x00,0x55,0x45,0x05,0x11,0x41,0x01,0x14,
- };
-
- static const int swap_table[128] =
- {
- 2,
- 3, 5, 7, 1, 3, 5, 7, 1, 3, 5, 7,
- 0, 2, 4, 6, 0, 2, 4, 6, 0, 2, 4,
- 5, 7, 1, 3, 5, 7, 1, 3, 5, 7, 1, 3,
- 4, 6, 0, 2, 4, 6, 0, 2, 4, 6,
- 8,
- 1, 3, 5, 7, 1, 3, 5, 7, 1, 3, 5,
- 6, 0, 2, 4, 6, 0, 2,
-
- 10,
- 11,13,15, 9,11,13,15, 9,11,13,15,
- 8,10,12,14, 8,10,12,14, 8,10,12,
- 13,15, 9,11,13,15, 9,11,13,15, 9,11,
- 12,14, 8,10,12,14, 8,10,12,14,
- 16,
- 9,11,13,15, 9,11,13,15, 9,11,13,
- 14, 8,10,12,14, 8,10,
- };
+ static const uint8_t xor_table[128] = {
+ 0x00,0x55,0x45,0x05,0x11,0x41,0x01,0x14,0x44,0x50,0x10,
+ 0x00,0x55,0x15,0x05,0x51,0x41,0x01,0x14,0x44,0x04,0x10,
+ 0x40,0x55,0x15,0x05,0x51,0x11,
+ 0x01,0x54,0x44,0x04,0x10,0x40,0x00,0x15,0x45,0x51,0x11,
+ 0x01,0x54,0x14,0x04,0x50,0x40,0x00,0x15,0x45,0x05,0x11,
+ 0x41,0x54,0x14,0x04,0x50,0x10,
+ 0x00,0x55,0x45,0x05,0x11,0x41,0x01,0x14,
+
+ 0x00,0x55,0x45,0x05,0x11,0x41,0x01,0x14,0x44,0x50,0x10,
+ 0x00,0x55,0x15,0x05,0x51,0x41,0x01,0x14,0x44,0x04,0x10,
+ 0x40,0x55,0x15,0x05,0x51,0x11,
+ 0x01,0x54,0x44,0x04,0x10,0x40,0x00,0x15,0x45,0x51,0x11,
+ 0x01,0x54,0x14,0x04,0x50,0x40,0x00,0x15,0x45,0x05,0x11,
+ 0x41,0x54,0x14,0x04,0x50,0x10,
+ 0x00,0x55,0x45,0x05,0x11,0x41,0x01,0x14 };
+
+ static const int swap_table[128] = {
+ 2,
+ 3, 5, 7, 1, 3, 5, 7, 1, 3, 5, 7,
+ 0, 2, 4, 6, 0, 2, 4, 6, 0, 2, 4,
+ 5, 7, 1, 3, 5, 7, 1, 3, 5, 7, 1, 3,
+ 4, 6, 0, 2, 4, 6, 0, 2, 4, 6,
+ 8,
+ 1, 3, 5, 7, 1, 3, 5, 7, 1, 3, 5,
+ 6, 0, 2, 4, 6, 0, 2,
+
+ 10,
+ 11,13,15, 9,11,13,15, 9,11,13,15,
+ 8,10,12,14, 8,10,12,14, 8,10,12,
+ 13,15, 9,11,13,15, 9,11,13,15, 9,11,
+ 12,14, 8,10,12,14, 8,10,12,14,
+ 16,
+ 9,11,13,15, 9,11,13,15, 9,11,13,
+ 14, 8,10,12,14, 8,10 };
decode(memregion(tag())->base(), m_decrypted, xor_table, swap_table);
}
+sega_315_5179_device::sega_315_5179_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ segacrp2_z80_device(mconfig, SEGA_315_5179, tag, owner, clock)
+{
+}
-sega_315_5179_device::sega_315_5179_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : segacrp2_z80_device(mconfig, SEGA_315_5179, tag, owner, clock) {}
void sega_315_5179_device::decrypt()
{ // 315-5179
- static const uint8_t xor_table[128] =
- {
- 0x00,0x45,0x41,0x14,0x10,0x55,0x51,0x01,0x04,0x40,0x45,0x11,0x14,0x50,
- 0x00,0x05,0x41,0x44,0x10,0x15,0x51,0x54,0x04,
- 0x00,0x45,0x41,0x14,0x10,0x55,0x05,0x01,0x44,0x40,0x15,0x11,0x54,0x50,
- 0x00,0x05,0x41,0x44,0x10,0x15,0x51,0x01,0x04,
- 0x40,0x45,0x11,0x14,0x50,0x55,0x05,0x01,0x44,0x40,0x15,0x11,0x54,0x04,
- 0x00,0x45,0x41,0x14,0x50,
- 0x00,0x05,0x41,0x44,0x10,0x15,0x51,0x54,0x04,
- 0x00,0x45,0x41,0x14,0x50,0x55,0x05,0x01,0x44,0x40,0x15,0x11,0x54,0x50,
- 0x00,0x05,0x41,0x44,0x10,0x55,0x51,0x01,0x04,
- 0x40,0x45,0x11,0x14,0x50,0x55,0x05,0x01,0x44,0x40,0x15,0x51,0x54,0x04,
- 0x00,0x45,0x41,0x14,0x10,0x55,0x51,0x01,0x04,
- 0x40,0x45,0x11,0x54,0x50,0x00,0x05,0x41,
- };
-
- static const int swap_table[128] =
- {
+ static const uint8_t xor_table[128] = {
+ 0x00,0x45,0x41,0x14,0x10,0x55,0x51,0x01,0x04,0x40,0x45,0x11,0x14,0x50,
+ 0x00,0x05,0x41,0x44,0x10,0x15,0x51,0x54,0x04,
+ 0x00,0x45,0x41,0x14,0x10,0x55,0x05,0x01,0x44,0x40,0x15,0x11,0x54,0x50,
+ 0x00,0x05,0x41,0x44,0x10,0x15,0x51,0x01,0x04,
+ 0x40,0x45,0x11,0x14,0x50,0x55,0x05,0x01,0x44,0x40,0x15,0x11,0x54,0x04,
+ 0x00,0x45,0x41,0x14,0x50,
+ 0x00,0x05,0x41,0x44,0x10,0x15,0x51,0x54,0x04,
+ 0x00,0x45,0x41,0x14,0x50,0x55,0x05,0x01,0x44,0x40,0x15,0x11,0x54,0x50,
+ 0x00,0x05,0x41,0x44,0x10,0x55,0x51,0x01,0x04,
+ 0x40,0x45,0x11,0x14,0x50,0x55,0x05,0x01,0x44,0x40,0x15,0x51,0x54,0x04,
+ 0x00,0x45,0x41,0x14,0x10,0x55,0x51,0x01,0x04,
+ 0x40,0x45,0x11,0x54,0x50,0x00,0x05,0x41 };
+
+ static const int swap_table[128] = {
8, 9,11,13,15, 0, 2, 4, 6,
8, 9,11,13,15, 1, 2, 4, 6,
8, 9,11,13,15, 1, 2, 4, 6,
@@ -370,8 +366,7 @@ void sega_315_5179_device::decrypt()
7, 1, 2, 4, 6, 0, 2, 3, 5,
7, 1, 3, 4, 6, 0, 2, 3, 5,
7, 1, 3, 4, 6, 0, 2, 4, 5,
- 7,
- };
+ 7 };
decode(memregion(tag())->base(), m_decrypted, xor_table, swap_table);
}
@@ -386,58 +381,70 @@ void sega_315_5179_device::decrypt()
static void sega_decode_317(uint8_t *rom, uint8_t *decrypted, int shift)
{
- static const uint8_t xor_table[128+3] =
- {
- 0x04,0x54,0x44,0x14,0x15,0x15,0x51,0x41,0x41,0x14,0x10,0x50,0x15,0x55,0x54,0x05,
- 0x04,0x41,0x51,0x01,0x05,0x10,0x55,0x51,0x05,0x05,0x54,0x11,0x45,0x05,0x04,0x14,
- 0x10,0x55,0x01,0x41,0x51,0x05,0x55,0x04,0x45,0x41,0x55,0x14,0x45,0x10,0x04,0x45,
- 0x55,0x50,0x40,0x00,0x11,0x45,0x15,0x00,0x01,0x00,0x40,0x00,0x01,0x45,0x11,0x00,
- 0x45,0x00,0x44,0x54,0x40,0x04,0x05,0x15,0x15,0x10,0x15,0x04,0x01,0x05,0x50,0x11,
- 0x00,0x44,0x44,0x04,0x04,0x01,0x50,0x05,0x51,0x00,0x45,0x44,0x50,0x15,0x54,0x40,
- 0x41,0x45,0x40,0x10,0x14,0x15,0x40,0x51,0x50,0x50,0x45,0x00,0x10,0x15,0x05,0x51,
- 0x50,0x44,0x01,0x15,0x40,0x04,0x01,0x44,0x50,0x44,0x50,0x50,0x50,0x10,0x44,0x04,
- 0x40,0x04,0x10,
- };
-
- static const int swap_table[128+3] =
- {
- 7, 7,12, 1,18,11, 8,23,21,17, 0,23,22, 0,21,15,
- 13,19,21,20,20,12,13,10,20, 0,14,18, 6,18, 3, 5,
- 5,20,20,13, 8, 0,20,18, 4,14, 8, 5,17, 6,22,10,
- 0,21, 0, 1, 6,11,17, 9,17, 3, 9,21, 0, 4,16, 1,
- 13,17,21, 5, 3, 7, 2,16,18,13, 6,19,11,23, 3,20,
- 3, 2,18,10,18,23,19,23, 3,15, 0,10, 5,12, 0, 0,
- 11,22, 8,14, 8, 6, 1,15, 7,11, 2,17,10,15, 8,21,
- 10, 0, 2, 6, 1, 1, 3, 1,12,18,16, 5, 0,15,17,15,
- 10,20, 1,
- };
+ static const uint8_t xor_table[128 + 3] = {
+ 0x04,0x54,0x44,0x14,0x15,0x15,0x51,0x41,0x41,0x14,0x10,0x50,0x15,0x55,0x54,0x05,
+ 0x04,0x41,0x51,0x01,0x05,0x10,0x55,0x51,0x05,0x05,0x54,0x11,0x45,0x05,0x04,0x14,
+ 0x10,0x55,0x01,0x41,0x51,0x05,0x55,0x04,0x45,0x41,0x55,0x14,0x45,0x10,0x04,0x45,
+ 0x55,0x50,0x40,0x00,0x11,0x45,0x15,0x00,0x01,0x00,0x40,0x00,0x01,0x45,0x11,0x00,
+ 0x45,0x00,0x44,0x54,0x40,0x04,0x05,0x15,0x15,0x10,0x15,0x04,0x01,0x05,0x50,0x11,
+ 0x00,0x44,0x44,0x04,0x04,0x01,0x50,0x05,0x51,0x00,0x45,0x44,0x50,0x15,0x54,0x40,
+ 0x41,0x45,0x40,0x10,0x14,0x15,0x40,0x51,0x50,0x50,0x45,0x00,0x10,0x15,0x05,0x51,
+ 0x50,0x44,0x01,0x15,0x40,0x04,0x01,0x44,0x50,0x44,0x50,0x50,0x50,0x10,0x44,0x04,
+ 0x40,0x04,0x10 };
+
+ static const int swap_table[128 + 3] = {
+ 7, 7,12, 1,18,11, 8,23,21,17, 0,23,22, 0,21,15,
+ 13,19,21,20,20,12,13,10,20, 0,14,18, 6,18, 3, 5,
+ 5,20,20,13, 8, 0,20,18, 4,14, 8, 5,17, 6,22,10,
+ 0,21, 0, 1, 6,11,17, 9,17, 3, 9,21, 0, 4,16, 1,
+ 13,17,21, 5, 3, 7, 2,16,18,13, 6,19,11,23, 3,20,
+ 3, 2,18,10,18,23,19,23, 3,15, 0,10, 5,12, 0, 0,
+ 11,22, 8,14, 8, 6, 1,15, 7,11, 2,17,10,15, 8,21,
+ 10, 0, 2, 6, 1, 1, 3, 1,12,18,16, 5, 0,15,17,15,
+ 10,20, 1 };
decode(rom, decrypted, xor_table + shift, swap_table + shift);
}
-sega_317_0004_device::sega_317_0004_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : segacrp2_z80_device(mconfig, SEGA_317_0004, tag, owner, clock) {}
+sega_317_0004_device::sega_317_0004_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ segacrp2_z80_device(mconfig, SEGA_317_0004, tag, owner, clock)
+{
+}
+
void sega_317_0004_device::decrypt()
{ // 317-0004
sega_decode_317(memregion(tag())->base(), m_decrypted, 0);
}
+sega_317_0005_device::sega_317_0005_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ segacrp2_z80_device(mconfig, SEGA_317_0005, tag, owner, clock)
+{
+}
-sega_317_0005_device::sega_317_0005_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : segacrp2_z80_device(mconfig, SEGA_317_0005, tag, owner, clock) {}
void sega_317_0005_device::decrypt()
{ // 317-0005
sega_decode_317(memregion(tag())->base(), m_decrypted, 1);
}
-sega_317_0006_device::sega_317_0006_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : segacrp2_z80_device(mconfig, SEGA_317_0006, tag, owner, clock) {}
+sega_317_0006_device::sega_317_0006_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ segacrp2_z80_device(mconfig, SEGA_317_0006, tag, owner, clock)
+{
+}
+
void sega_317_0006_device::decrypt()
{ // 317-0006
sega_decode_317(memregion(tag())->base(), m_decrypted, 2);
}
-sega_317_0007_device::sega_317_0007_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : segacrp2_z80_device(mconfig, SEGA_317_0007, tag, owner, clock) {}
+
+sega_317_0007_device::sega_317_0007_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ segacrp2_z80_device(mconfig, SEGA_317_0007, tag, owner, clock)
+{
+}
+
void sega_317_0007_device::decrypt()
{ // 317-0006
sega_decode_317(memregion(tag())->base(), m_decrypted, 3);
diff --git a/src/mame/machine/segacrp2_device.h b/src/mame/machine/segacrp2_device.h
index 4fe3875f511..a64f3fa5fe0 100644
--- a/src/mame/machine/segacrp2_device.h
+++ b/src/mame/machine/segacrp2_device.h
@@ -18,8 +18,7 @@ protected:
segacrp2_z80_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
- virtual void device_reset() override;
- virtual void decrypt();
+ virtual void decrypt() = 0;
required_shared_ptr<uint8_t> m_decrypted;
};
diff --git a/src/mame/machine/snes.cpp b/src/mame/machine/snes.cpp
index 419cb007816..fac15ca7b75 100644
--- a/src/mame/machine/snes.cpp
+++ b/src/mame/machine/snes.cpp
@@ -1035,7 +1035,7 @@ void snes_state::snes_init_timers()
// SNES hcounter has a 0-339 range. hblank starts at counter 260.
// clayfighter sets an HIRQ at 260, apparently it wants it to be before hdma kicks off, so we'll delay 2 pixels.
- m_hblank_offset = 274;
+ m_hblank_offset = 128;
m_hblank_timer->adjust(m_screen->time_until_pos(m_ppu->vtotal() - 1, m_hblank_offset));
}
diff --git a/src/mame/machine/sorcerer.cpp b/src/mame/machine/sorcerer.cpp
index 65cbdf6e1d7..8df04fabd50 100644
--- a/src/mame/machine/sorcerer.cpp
+++ b/src/mame/machine/sorcerer.cpp
@@ -491,7 +491,7 @@ void sorcerer_state::machine_reset()
m_wait = false;
m_fe = 0xff;
m_2c = 0;
- port_fe_w(space, 0, 0, 0xff);
+ port_fe_w(space, 0, 0, 0);
membank("boot")->set_entry(1);
timer_set(attotime::from_usec(10), TIMER_RESET);
diff --git a/src/mame/machine/taitocchip.cpp b/src/mame/machine/taitocchip.cpp
index 06021e23d85..c366ea984e4 100644
--- a/src/mame/machine/taitocchip.cpp
+++ b/src/mame/machine/taitocchip.cpp
@@ -207,7 +207,7 @@ void taito_cchip_device::mem68_w(offs_t offset, u8 data)
void taito_cchip_device::cchip_map(address_map &map)
{
- //AM_RANGE(0x0000, 0x0fff) AM_ROM // internal ROM of uPD7811
+ //map(0x0000, 0x0fff).rom(); // internal ROM of uPD7811
map(0x1000, 0x13ff).m(m_upd4464_bank, FUNC(address_map_bank_device::amap8));
map(0x1400, 0x17ff).rw(FUNC(taito_cchip_device::asic_r), FUNC(taito_cchip_device::asic_w));
map(0x2000, 0x3fff).rom().region("cchip_eprom", 0);
diff --git a/src/mame/machine/thomson.cpp b/src/mame/machine/thomson.cpp
index 763f114549f..f97ffe108ac 100644
--- a/src/mame/machine/thomson.cpp
+++ b/src/mame/machine/thomson.cpp
@@ -272,7 +272,7 @@ void thomson_state::thom_set_caps_led( int led )
DEVICE_IMAGE_LOAD_MEMBER( thomson_state::to7_cartridge )
{
int i,j;
- uint8_t* pos = memregion("maincpu" )->base() + 0x10000;
+ uint8_t* pos = &m_cart_rom[0];
offs_t size;
char name[129];
@@ -373,8 +373,7 @@ WRITE8_MEMBER( thomson_state::to7_cartridge_w )
/* read signal to 0000-0003 generates a bank switch */
READ8_MEMBER( thomson_state::to7_cartridge_r )
{
- uint8_t* pos = memregion( "maincpu" )->base() + 0x10000;
- uint8_t data = pos[offset + (m_thom_cart_bank % m_thom_cart_nb_banks) * 0x4000];
+ uint8_t data = m_cart_rom[offset + (m_thom_cart_bank % m_thom_cart_nb_banks) * 0x4000];
if ( !machine().side_effects_disabled() )
{
m_thom_cart_bank = offset & 3;
@@ -989,8 +988,7 @@ MACHINE_RESET_MEMBER( thomson_state, to7 )
MACHINE_START_MEMBER( thomson_state, to7 )
{
- address_space& space = m_maincpu->space(AS_PROGRAM);
- uint8_t* mem = memregion("maincpu")->base();
+ uint8_t* cartmem = &m_cart_rom[0];
uint8_t* ram = m_ram->pointer();
LOG (( "to7: machine start called\n" ));
@@ -1006,11 +1004,12 @@ MACHINE_START_MEMBER( thomson_state, to7 )
m_thom_vram = ram;
m_basebank->configure_entry( 0, ram + 0x4000);
m_vrambank->configure_entries( 0, 2, m_thom_vram, 0x2000 );
- m_cartbank->configure_entries( 0, 4, mem + 0x10000, 0x4000 );
+ m_cartbank->configure_entries( 0, 4, cartmem, 0x4000 );
m_basebank->set_entry( 0 );
m_vrambank->set_entry( 0 );
m_cartbank->set_entry( 0 );
+ address_space& space = m_maincpu->space(AS_PROGRAM);
space.unmap_readwrite(0x8000, 0xdfff);
if ( m_ram->size() > 24*1024 )
@@ -1032,7 +1031,7 @@ MACHINE_START_MEMBER( thomson_state, to7 )
save_item(NAME(m_thom_cart_bank));
save_item(NAME(m_to7_lightpen));
save_item(NAME(m_to7_lightpen_step));
- save_pointer(NAME((mem + 0x10000)), 0x10000 );
+ save_pointer(NAME(cartmem), 0x10000 );
machine().save().register_postload(save_prepost_delegate(FUNC(thomson_state::to7_update_cart_bank_postload),this));
}
@@ -1213,7 +1212,7 @@ MACHINE_RESET_MEMBER( thomson_state, to770 )
MACHINE_START_MEMBER( thomson_state, to770 )
{
- uint8_t* mem = memregion("maincpu")->base();
+ uint8_t* cartmem = &m_cart_rom[0];
uint8_t* ram = m_ram->pointer();
LOG (( "to770: machine start called\n" ));
@@ -1230,7 +1229,7 @@ MACHINE_START_MEMBER( thomson_state, to770 )
m_basebank->configure_entry( 0, ram + 0x4000);
m_rambank->configure_entries( 0, 6, ram + 0x8000, 0x4000 );
m_vrambank->configure_entries( 0, 2, m_thom_vram, 0x2000 );
- m_cartbank->configure_entries( 0, 4, mem + 0x10000, 0x4000 );
+ m_cartbank->configure_entries( 0, 4, cartmem, 0x4000 );
m_basebank->set_entry( 0 );
m_rambank->set_entry( 0 );
m_vrambank->set_entry( 0 );
@@ -1241,7 +1240,7 @@ MACHINE_START_MEMBER( thomson_state, to770 )
save_item(NAME(m_thom_cart_bank));
save_item(NAME(m_to7_lightpen));
save_item(NAME(m_to7_lightpen_step));
- save_pointer(NAME(mem + 0x10000), 0x10000 );
+ save_pointer(NAME(cartmem), 0x10000 );
machine().save().register_postload(save_prepost_delegate(FUNC(thomson_state::to770_update_ram_bank_postload), this));
machine().save().register_postload(save_prepost_delegate(FUNC(thomson_state::to7_update_cart_bank_postload), this));
}
@@ -1371,7 +1370,7 @@ WRITE8_MEMBER( thomson_state::mo5_gatearray_w )
DEVICE_IMAGE_LOAD_MEMBER( thomson_state::mo5_cartridge )
{
- uint8_t* pos = memregion("maincpu")->base() + 0x10000;
+ uint8_t* pos = &m_cart_rom[0];
uint64_t size, i;
int j;
char name[129];
@@ -1533,8 +1532,7 @@ WRITE8_MEMBER( thomson_state::mo5_cartridge_w )
/* read signal to bffc-bfff generates a bank switch */
READ8_MEMBER( thomson_state::mo5_cartridge_r )
{
- uint8_t* pos = memregion( "maincpu" )->base() + 0x10000;
- uint8_t data = pos[offset + 0xbffc + (m_thom_cart_bank % m_thom_cart_nb_banks) * 0x4000];
+ uint8_t data = m_cart_rom[offset + 0x3ffc + (m_thom_cart_bank % m_thom_cart_nb_banks) * 0x4000];
if ( !machine().side_effects_disabled() )
{
m_thom_cart_bank = offset & 3;
@@ -1593,6 +1591,7 @@ MACHINE_RESET_MEMBER( thomson_state, mo5 )
MACHINE_START_MEMBER( thomson_state, mo5 )
{
uint8_t* mem = memregion("maincpu")->base();
+ uint8_t* cartmem = &m_cart_rom[0];
uint8_t* ram = m_ram->pointer();
LOG (( "mo5: machine start called\n" ));
@@ -1609,7 +1608,8 @@ MACHINE_START_MEMBER( thomson_state, mo5 )
m_mo5_reg_cart = 0;
m_thom_vram = ram;
m_basebank->configure_entry( 0, ram + 0x4000);
- m_cartbank->configure_entries( 0, 4, mem + 0x10000, 0x4000 );
+ m_cartbank->configure_entry( 0, mem + 0x10000);
+ m_cartbank->configure_entries( 1, 3, cartmem + 0x4000, 0x4000 );
m_cartbank->configure_entries( 4, 4, ram + 0xc000, 0x4000 );
m_vrambank->configure_entries( 0, 2, m_thom_vram, 0x2000 );
m_basebank->set_entry( 0 );
@@ -1622,7 +1622,7 @@ MACHINE_START_MEMBER( thomson_state, mo5 )
save_item(NAME(m_to7_lightpen));
save_item(NAME(m_to7_lightpen_step));
save_item(NAME(m_mo5_reg_cart));
- save_pointer(NAME(mem + 0x10000), 0x10000 );
+ save_pointer(NAME(cartmem), 0x10000 );
machine().save().register_postload(save_prepost_delegate(FUNC(thomson_state::mo5_update_cart_bank_postload), this));
}
@@ -1938,8 +1938,7 @@ WRITE8_MEMBER( thomson_state::to9_cartridge_w )
/* read signal to 0000-0003 generates a bank switch */
READ8_MEMBER( thomson_state::to9_cartridge_r )
{
- uint8_t* pos = memregion( "maincpu" )->base() + 0x10000;
- uint8_t data = pos[offset + (m_thom_cart_bank % m_thom_cart_nb_banks) * 0x4000];
+ uint8_t data = m_cart_rom[offset + (m_thom_cart_bank % m_thom_cart_nb_banks) * 0x4000];
if ( !machine().side_effects_disabled() )
{
m_thom_cart_bank = offset & 3;
@@ -2535,6 +2534,7 @@ MACHINE_RESET_MEMBER( thomson_state, to9 )
MACHINE_START_MEMBER( thomson_state, to9 )
{
uint8_t* mem = memregion("maincpu")->base();
+ uint8_t* cartmem = &m_cart_rom[0];
uint8_t* ram = m_ram->pointer();
LOG (( "to9: machine start called\n" ));
@@ -2551,7 +2551,7 @@ MACHINE_START_MEMBER( thomson_state, to9 )
m_thom_vram = ram;
m_thom_cart_bank = 0;
m_vrambank->configure_entries( 0, 2, m_thom_vram, 0x2000 );
- m_cartbank->configure_entries( 0, 12, mem + 0x10000, 0x4000 );
+ m_cartbank->configure_entries( 0, 12, cartmem, 0x4000 );
m_basebank->configure_entry( 0, ram + 0x4000);
m_rambank->configure_entries( 0, 10, ram + 0x8000, 0x4000 );
m_vrambank->set_entry( 0 );
@@ -2565,7 +2565,7 @@ MACHINE_START_MEMBER( thomson_state, to9 )
save_item(NAME(m_to7_lightpen));
save_item(NAME(m_to7_lightpen_step));
save_item(NAME(m_to9_soft_bank));
- save_pointer(NAME(mem + 0x10000), 0x10000 );
+ save_pointer(NAME(cartmem), 0x10000 );
machine().save().register_postload(save_prepost_delegate(FUNC(thomson_state::to9_update_ram_bank_postload), this));
machine().save().register_postload(save_prepost_delegate(FUNC(thomson_state::to9_update_cart_bank_postload), this));
}
@@ -3139,8 +3139,7 @@ WRITE8_MEMBER( thomson_state::to8_cartridge_w )
/* read signal to 0000-0003 generates a bank switch */
READ8_MEMBER( thomson_state::to8_cartridge_r )
{
- uint8_t* pos = memregion( "maincpu" )->base() + 0x10000;
- uint8_t data = pos[offset + (m_thom_cart_bank % m_thom_cart_nb_banks) * 0x4000];
+ uint8_t data = m_cart_rom[offset + (m_thom_cart_bank % m_thom_cart_nb_banks) * 0x4000];
if ( !machine().side_effects_disabled() )
{
m_thom_cart_bank = offset & 3;
@@ -3167,7 +3166,7 @@ void thomson_state::to8_floppy_reset()
to7_floppy_reset();
if ( THOM_FLOPPY_INT )
m_thmfc->floppy_reset();
- m_flopbank->configure_entries( TO7_NB_FLOP_BANK, 2, mem + 0x30000, 0x2000 );
+ m_flopbank->configure_entries( TO7_NB_FLOP_BANK, 2, mem + 0x20000, 0x2000 );
}
@@ -3543,6 +3542,7 @@ MACHINE_RESET_MEMBER( thomson_state, to8 )
MACHINE_START_MEMBER( thomson_state, to8 )
{
uint8_t* mem = memregion("maincpu")->base();
+ uint8_t* cartmem = &m_cart_rom[0];
uint8_t* ram = m_ram->pointer();
LOG (( "to8: machine start called\n" ));
@@ -3558,7 +3558,8 @@ MACHINE_START_MEMBER( thomson_state, to8 )
/* memory */
m_thom_cart_bank = 0;
m_thom_vram = ram;
- m_cartbank->configure_entries( 0, 8, mem + 0x10000, 0x4000 );
+ m_cartbank->configure_entries( 0, 4, cartmem, 0x4000 );
+ m_cartbank->configure_entries( 4, 4, mem + 0x10000, 0x4000 );
if ( m_ram->size() == 256*1024 )
{
m_cartbank->configure_entries( 8, 16, ram, 0x4000 );
@@ -3577,7 +3578,7 @@ MACHINE_START_MEMBER( thomson_state, to8 )
m_vrambank->configure_entries( 0, 2, ram, 0x2000 );
m_syslobank->configure_entry( 0, ram + 0x6000);
m_syshibank->configure_entry( 0, ram + 0x4000);
- m_biosbank->configure_entries( 0, 2, mem + 0x30800, 0x2000 );
+ m_biosbank->configure_entries( 0, 2, mem + 0x20800, 0x2000 );
m_cartbank->set_entry( 0 );
m_vrambank->set_entry( 0 );
m_syslobank->set_entry( 0 );
@@ -3601,7 +3602,7 @@ MACHINE_START_MEMBER( thomson_state, to8 )
save_item(NAME(m_to8_lightpen_intr));
save_item(NAME(m_to8_data_vpage));
save_item(NAME(m_to8_cart_vpage));
- save_pointer(NAME(mem + 0x10000), 0x10000 );
+ save_pointer(NAME(cartmem), 0x10000 );
machine().save().register_postload(save_prepost_delegate(FUNC(thomson_state::to8_update_ram_bank_postload), this));
machine().save().register_postload(save_prepost_delegate(FUNC(thomson_state::to8_update_cart_bank_postload), this));
machine().save().register_postload(save_prepost_delegate(FUNC(thomson_state::to8_update_floppy_bank_postload), this));
@@ -3692,6 +3693,7 @@ MACHINE_RESET_MEMBER( thomson_state, to9p )
MACHINE_START_MEMBER( thomson_state, to9p )
{
uint8_t* mem = memregion("maincpu")->base();
+ uint8_t* cartmem = &m_cart_rom[0];
uint8_t* ram = m_ram->pointer();
LOG (( "to9p: machine start called\n" ));
@@ -3707,14 +3709,15 @@ MACHINE_START_MEMBER( thomson_state, to9p )
/* memory */
m_thom_cart_bank = 0;
m_thom_vram = ram;
- m_cartbank->configure_entries( 0, 8, mem + 0x10000, 0x4000 );
+ m_cartbank->configure_entries( 0, 4, cartmem, 0x4000 );
+ m_cartbank->configure_entries( 4, 4, mem + 0x10000, 0x4000 );
m_cartbank->configure_entries( 8, 32, ram, 0x4000 );
m_vrambank->configure_entries( 0, 2, ram, 0x2000 );
m_syslobank->configure_entry( 0, ram + 0x6000 );
m_syshibank->configure_entry( 0, ram + 0x4000 );
m_datalobank->configure_entries( 0, 32, ram + 0x2000, 0x4000 );
m_datahibank->configure_entries( 0, 32, ram + 0x0000, 0x4000 );
- m_biosbank->configure_entries( 0, 2, mem + 0x30800, 0x2000 );
+ m_biosbank->configure_entries( 0, 2, mem + 0x20800, 0x2000 );
m_cartbank->set_entry( 0 );
m_vrambank->set_entry( 0 );
m_syslobank->set_entry( 0 );
@@ -3738,7 +3741,7 @@ MACHINE_START_MEMBER( thomson_state, to9p )
save_item(NAME(m_to8_lightpen_intr));
save_item(NAME(m_to8_data_vpage));
save_item(NAME(m_to8_cart_vpage));
- save_pointer(NAME(mem + 0x10000), 0x10000 );
+ save_pointer(NAME(cartmem), 0x10000 );
machine().save().register_postload(save_prepost_delegate(FUNC(thomson_state::to8_update_ram_bank_postload), this));
machine().save().register_postload(save_prepost_delegate(FUNC(thomson_state::to8_update_cart_bank_postload), this));
machine().save().register_postload(save_prepost_delegate(FUNC(thomson_state::to8_update_floppy_bank_postload), this));
@@ -4008,8 +4011,7 @@ WRITE8_MEMBER( thomson_state::mo6_cartridge_w )
/* read signal generates a bank switch */
READ8_MEMBER( thomson_state::mo6_cartridge_r )
{
- uint8_t* pos = memregion( "maincpu" )->base() + 0x10000;
- uint8_t data = pos[offset + 0xbffc + (m_thom_cart_bank % m_thom_cart_nb_banks) * 0x4000];
+ uint8_t data = m_cart_rom[offset + 0x3ffc + (m_thom_cart_bank % m_thom_cart_nb_banks) * 0x4000];
if ( !machine().side_effects_disabled() )
{
m_thom_cart_bank = offset & 3;
@@ -4376,6 +4378,7 @@ MACHINE_RESET_MEMBER( thomson_state, mo6 )
MACHINE_START_MEMBER( thomson_state, mo6 )
{
uint8_t* mem = memregion("maincpu")->base();
+ uint8_t* cartmem = &m_cart_rom[0];
uint8_t* ram = m_ram->pointer();
LOG (( "mo6: machine start called\n" ));
@@ -4392,20 +4395,21 @@ MACHINE_START_MEMBER( thomson_state, mo6 )
m_thom_cart_bank = 0;
m_mo5_reg_cart = 0;
m_thom_vram = ram;
- m_cartlobank->configure_entries( 0, 4, mem + 0x10000, 0x4000 );
- m_cartlobank->configure_entries( 4, 2, mem + 0x1f000, 0x4000 );
- m_cartlobank->configure_entries( 6, 2, mem + 0x28000, 0x4000 );
+ m_cartlobank->configure_entries( 0, 4, cartmem, 0x4000 );
+ m_cartlobank->configure_entry( 4, cartmem + 0xf000 ); // FIXME: this is wrong
+ m_cartlobank->configure_entry( 5, mem + 0x13000 ); // FIXME: this is wrong
+ m_cartlobank->configure_entries( 6, 2, mem + 0x18000, 0x4000 );
m_cartlobank->configure_entries( 8, 8, ram + 0x3000, 0x4000 );
- m_carthibank->configure_entries( 0, 4, mem + 0x10000 + 0x1000, 0x4000 );
- m_carthibank->configure_entries( 4, 2, mem + 0x1f000 + 0x1000, 0x4000 );
- m_carthibank->configure_entries( 6, 2, mem + 0x28000 + 0x1000, 0x4000 );
+ m_carthibank->configure_entries( 0, 4, cartmem + 0x1000, 0x4000 );
+ m_carthibank->configure_entries( 4, 2, mem + 0x10000, 0x4000 );
+ m_carthibank->configure_entries( 6, 2, mem + 0x18000 + 0x1000, 0x4000 );
m_carthibank->configure_entries( 8, 8, ram, 0x4000 );
m_vrambank->configure_entries( 0, 2, ram, 0x2000 );
m_syslobank->configure_entry( 0, ram + 0x6000);
m_syshibank->configure_entry( 0, ram + 0x4000);
m_datalobank->configure_entries( 0, 8, ram + 0x2000, 0x4000 );
m_datahibank->configure_entries( 0, 8, ram + 0x0000, 0x4000 );
- m_biosbank->configure_entries( 0, 2, mem + 0x23000, 0x4000 );
+ m_biosbank->configure_entries( 0, 2, mem + 0x13000, 0x4000 );
m_cartlobank->set_entry( 0 );
m_carthibank->set_entry( 0 );
m_vrambank->set_entry( 0 );
@@ -4428,7 +4432,7 @@ MACHINE_START_MEMBER( thomson_state, mo6 )
save_item(NAME(m_to8_data_vpage));
save_item(NAME(m_to8_cart_vpage));
save_item(NAME(m_mo5_reg_cart));
- save_pointer(NAME(mem + 0x10000), 0x10000 );
+ save_pointer(NAME(cartmem), 0x10000 );
machine().save().register_postload(save_prepost_delegate(FUNC(thomson_state::mo6_update_ram_bank_postload), this));
machine().save().register_postload(save_prepost_delegate(FUNC(thomson_state::mo6_update_cart_bank_postload), this));
}
@@ -4598,6 +4602,7 @@ MACHINE_RESET_MEMBER( thomson_state, mo5nr )
MACHINE_START_MEMBER( thomson_state, mo5nr )
{
uint8_t* mem = memregion("maincpu")->base();
+ uint8_t* cartmem = &m_cart_rom[0];
uint8_t* ram = m_ram->pointer();
LOG (( "mo5nr: machine start called\n" ));
@@ -4615,20 +4620,21 @@ MACHINE_START_MEMBER( thomson_state, mo5nr )
m_mo5_reg_cart = 0;
m_thom_vram = ram;
- m_cartlobank->configure_entries( 0, 4, mem + 0x10000, 0x4000 );
- m_cartlobank->configure_entries( 4, 2, mem + 0x1f000, 0x4000 );
- m_cartlobank->configure_entries( 6, 2, mem + 0x28000, 0x4000 );
+ m_cartlobank->configure_entries( 0, 4, cartmem, 0x4000 );
+ m_cartlobank->configure_entry( 4, cartmem + 0xf000 ); // FIXME: this is wrong
+ m_cartlobank->configure_entry( 5, mem + 0x13000 ); // FIXME: this is wrong
+ m_cartlobank->configure_entries( 6, 2, mem + 0x18000, 0x4000 );
m_cartlobank->configure_entries( 8, 8, ram + 0x3000, 0x4000 );
- m_carthibank->configure_entries( 0, 4, mem + 0x10000 + 0x1000, 0x4000 );
- m_carthibank->configure_entries( 4, 2, mem + 0x1f000 + 0x1000, 0x4000 );
- m_carthibank->configure_entries( 6, 2, mem + 0x28000 + 0x1000, 0x4000 );
+ m_carthibank->configure_entries( 0, 4, cartmem + 0x1000, 0x4000 );
+ m_carthibank->configure_entries( 4, 2, mem + 0x10000, 0x4000 );
+ m_carthibank->configure_entries( 6, 2, mem + 0x18000 + 0x1000, 0x4000 );
m_carthibank->configure_entries( 8, 8, ram, 0x4000 );
m_vrambank->configure_entries( 0, 2, ram, 0x2000 );
m_syslobank->configure_entry( 0, ram + 0x6000);
m_syshibank->configure_entry( 0, ram + 0x4000);
m_datalobank->configure_entries( 0, 8, ram + 0x2000, 0x4000 );
m_datahibank->configure_entries( 0, 8, ram + 0x0000, 0x4000 );
- m_biosbank->configure_entries( 0, 2, mem + 0x23000, 0x4000 );
+ m_biosbank->configure_entries( 0, 2, mem + 0x13000, 0x4000 );
m_cartlobank->set_entry( 0 );
m_carthibank->set_entry( 0 );
m_vrambank->set_entry( 0 );
@@ -4651,7 +4657,7 @@ MACHINE_START_MEMBER( thomson_state, mo5nr )
save_item(NAME(m_to8_data_vpage));
save_item(NAME(m_to8_cart_vpage));
save_item(NAME(m_mo5_reg_cart));
- save_pointer(NAME(mem + 0x10000), 0x10000 );
+ save_pointer(NAME(cartmem), 0x10000 );
machine().save().register_postload(save_prepost_delegate(FUNC(thomson_state::mo6_update_ram_bank_postload), this));
machine().save().register_postload(save_prepost_delegate(FUNC(thomson_state::mo6_update_cart_bank_postload), this));
}
diff --git a/src/mame/machine/wangpckb.cpp b/src/mame/machine/wangpckb.cpp
index 41aa630bb7a..d115c50b45c 100644
--- a/src/mame/machine/wangpckb.cpp
+++ b/src/mame/machine/wangpckb.cpp
@@ -100,7 +100,7 @@ const tiny_rom_entry *wangpc_keyboard_device::device_rom_region() const
void wangpc_keyboard_device::wangpc_keyboard_io(address_map &map)
{
- //AM_RANGE(0x0000, 0xfeff) AM_READNOP
+ //map(0x0000, 0xfeff).nopr();
map(0x47, 0x58).mirror(0xff00).nopr();
map(0x00, 0x00).mirror(0xff00).w(SN76496_TAG, FUNC(sn76496_device::write));
}
diff --git a/src/mame/machine/wrally.cpp b/src/mame/machine/wrally.cpp
index 7721b6cbe31..ead13574cde 100644
--- a/src/mame/machine/wrally.cpp
+++ b/src/mame/machine/wrally.cpp
@@ -28,13 +28,13 @@ void wrally_state::machine_start()
WRITE8_MEMBER(wrally_state::shareram_w)
{
- // why isn't there an AM_SOMETHING macro for this?
+ // why isn't there address map functionality for this?
reinterpret_cast<u8 *>(m_shareram.target())[BYTE_XOR_BE(offset)] = data;
}
READ8_MEMBER(wrally_state::shareram_r)
{
- // why isn't there an AM_SOMETHING macro for this?
+ // why isn't there address map functionality for this?
return reinterpret_cast<u8 const *>(m_shareram.target())[BYTE_XOR_BE(offset)];
}
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 5e73fa378cb..c630d792b2e 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -2422,10 +2422,19 @@ ecs38632 // Elitegroup ECS-386/32 mainboard
ecsum386 // Elitegroup UM386 mainboard
fu340 // Abit FU340
smih0107 //
+elt286b // Chaintech ELT-286B-160B(E) motherboard (286)
+uni386w // UNICHIP 386W 367C REV 1.0 motherboard (386)
+mokp386sx // MORSE KP 386SX V2.21
at486 // 19?? IBM AT 486
atvga // 19?? AT VGA
at386sx // 19?? AT VGA 386sx
a433cc // J-Bond A433C-C/A450C-C
+anch386s // ANIX CH-386S-16/20/25G
+scamp386sx // motherboards using the SCAMPSX chipset (386sx)
+sh386sx20 // Shuttle 386SX REV 2.0A motherboard (386sx)
+ppm3333p // DTK Computer PPM-3333P
+scsxaio // Peacock 386sx Ver. 2.0 motherboard SCsxAIO (386sx)
+pcd204 // Philips PCD204 (PCD200 series, 286)
a486ap4 // ASUS PVI-486AP4
a486sp3 // ASUS PVI-486SP3
a486sp3g // ASUS PCI/I-486SP3G
@@ -2433,6 +2442,7 @@ aa486s // ASUS PCI/I-A486S
a486sv1 // ASUS VL/EISA-486SV1
a486sv2g // ASUS VL/I-486SV2G
mb8433uud // Biostar MB8433UUD-A
+mb133340 // Biostar MB-1333/40PMB-CH, rev B.3
c286lt // 1990 Commodore Laptop 286-LT
csl286 // Commodore SL 286-16
c386sx16 // 1990 Commodore 386SX-16
@@ -2458,13 +2468,14 @@ pcd4x // Siemens-Nixdorf PCD-4H and other 486 desktops
pcd4nl // 1995 Siemens-Nixdorf PCD-4NL 486 subnotebook
pcd4nd // 1993 Siemens-Nixdorf 486 notebook
ct386sx //
-wy220001 // WYSEpc
+wy220001 // WYSEpc 286
cxsxd //
ec1842 //
ec1849 //
ev1806 // Everex EV-1806
ev1815 // Everex EV-1815
ews286 // 1986 Ericsson WS286
+ficgiovt2 // FIC 486-GIO-VT2
ficpio2 // 1995 FIC 486-PIO-2
ficvipio // FIC 486-VIP-IO
ficvipio2 // FIC 486-VIP-IO2
@@ -2475,37 +2486,65 @@ kma202f // KMA-202F-12R motherboard (286)
cdtekg2 // CDTEK motherboard with Headland G2 chipset (286)
octekg2 // Octek motherboard with Headland G2 chipset (286)
olim203 // Olivetti 286 motherboard
-headg2 // 286 motherboards with Headland G2 chipset
+headg2 // motherboards with Headland G2 chipset (286)
mb1212c // Biostar MB-1212C motherboard (286)
bam16a0 // VIP-M21502A BAM16-A0 motherboard (286)
cmpa286 // CMP enterprise CO.LTD. motherboard (286)
suntac5 // 286 motherboards using the 5-chip SUNTAC chipset
ht12a // 286 motherboards using the Headland HT12/A chipset
+ht18c // 286 motherboards using the Headland HT18/C chipset
vlsi5 // 286 motherboards using the 5-chip VLSI chipset
sy012 // SY-012 16/25 386MB VER: 5.2 motherboard (386)
frxc402 // 386 motherboards using FOREX FRX46C402/FRX36C300/SIS85C206 chips
gs611606a // Goldstar P/N 611-606A Rev 1.0A motherboard (386)
dfi386 // DFI 386-20.REV0 motherboard (386)
+alacou // Alaris Cougar motherboard (386/IBM Blue Lightning)
+ges9051n // GES 9051N-386C VER -0.01 motherboard (386)
+cs8230 // motherboards using the Chips CS8230 chipset (386)
+mx83c305 // motherboards using the MX83C305(A)(FC), MX83C05(A)(FC) chipset
386sc // 386 SC Rev A2 motherboard
386sc2c //
-opti495xlc // Motherboards using the OPTi 82C495XLC chipset (386)
+td60c // TD60C motherboard (286)
+td70n // TD70N motherboard (386sx)
+td70a // TD70A and TD70AN motherboards (386sx)
+fic4386vchd // FIC 4386-VC-HD motherboard (386)
+opti495slc // motherboards using the OPTi495SLC chipset (386)
+opti495xlc // motherboards using the OPTi 82C495XLC chipset (386)
+op82c283 // motherboards using the Opti F82C206, Opti 82C283 chipset (386sx)
+op82c291 // motherboards using the OPTi 82C291 chipset (386sx)
+op82c381 // motherboards using the OPTi 82C381 chipset (386)
+op82c391 // motherboards using the OPTi 82C391 chipset (386)
+op386wb // OPTi 386WB VER.1.0
isa386u30 // Asus ISA-386U30 REV.2.2 motherboard (386)
isa386c // Asus ISA-386C motherboard (386)
pt581392 // Motherboard using the Forex FRX46C402 + FRX46C411 + SiS 85C206 chipset (386)
pem2530 // DTK PEM 2530 motherboard (386)
tam3340ma0 // TAM/33/40-MA0 (CM318R00,M31-R00)
-alim1429 // Motherboards using the ALi M1429 A1 and M1431 A2 chipset (386)
+alim1217 // motherboards using the ALi M1217 chipset (386sx)
+alim1419 // motherboards using the ALi M1419 chipset (386)
+alim1429 // motherboards using the ALi M1429 A1 and M1431 A2 chipset (386)
u3911v3 // Uniron U3911-V3 motherboard (286)
mkp286 // Morse KP-286 motherboard (286)
mba009 // HLB-286 MBA-009 motherboard (286)
pccm205 // PC-Chips M205 motherboard (286)
+pccm216 // PC-Chips M216 motherboard (286)
pccm321 // PC-Chips M321 motherboard (386)
pccm326 // PC-Chips M326 motherboard (386)
+pccm396f // PC-Chips M396F motherboard (386sx)
+pccm912 // PC-Chips M912 motherboard (486)
+pccm915i // PC-Chips M915i motherboard (486)
pccm919 // PC-Chips M919 motherboard (486)
+pt319a // Pint PT-319A motherboard (386sx)
snomi286 // Snobol Mini 286 motherboard (286)
sy019hi // Soyo SY-019H and SY-019I motherboards (386)
sm38640f // SM 386-40F motherboard (386)
-4nd04a // 386-4N-D04A motherboard (386)
+sisrabb // motherboards using the SiS Rabbit chipset (386)
+qdu386dx // QD-U386DX VER 1.0 motherboard (386)
+4nd04a
+um82c481af // motherboards using the UMC UM82C481AF chipset (386)
+um82c491f // motherboards using the UMC UM82C491F chipset (386)
+um82c493f // motherboards using the UMC UM82C491F + UM82C493F chipset or BIOTEQ equivalents (386)
+al486vd // Daewoo AL486V-D Rev:1.1 motherboard (386)
hot304 // Shuttle HOT-304
hot409 // Shuttle HOT-409
ibm5162 // 1986 IBM XT 5162 (XT w/80286)
@@ -2530,7 +2569,7 @@ n8810m16c // 1990 Nixdorf 8810 M16 Laptop - PC17 - CGA ver
n8810m16v // 1990 Nixdorf 8810 M16 Laptop - PC17 - VGA version
n8810m30 // 1990 Nixdorf 8810 M30
n8810m55 // 1986 Nixdorf 8810 M55
-//nws286 // 1988 Nokia WS286
+//nws286 // 1988 Nokia WS286
pc2386 //
qi600 // 1988 Apricot Qi 600 (Neptune Motherboard
qi900 // 1990 Apricot Qi 900 (Scorpion Motherboard)
@@ -2547,6 +2586,50 @@ xb42664a // 1990 Apricot XEN-S (Venus II Motherboard 386)
lion3500 // 1993 Lion 3500C/T notebook
o286foxii // Octek Fox II motherboard (286)
ocjagv // Octek Jaguar V motherboard (386)
+ocpanii // Octek Panther II motherboard (386sx)
+ochipcom // Octek Hippo COM motherboard (486)
+chn333sc // Chaintech 333SC motherboard (386)
+elt386sx // Elitegroup ELT-386SX-160BE motherboard (386sx)
+ms4138 // MSI MS-4138 motherboard (486)
+mbc18nb // Sanyo MBC-18NB notebook (386sx)
+tam25p2 // AUVA TAM/25-P2 motherboard (386)
+zito4dps // ZIDA Tomato board 4DPS (486)
+alator2 // Alaris Tornado 2 motherboard (486)
+ochipvlp // Octek Hippo VL+ motherboard (486)
+sto486wb // Auva-Cam-33-P2 = See-Thru Sto486Wb motherboard (486)
+ga486vf // Gigabyte GA-486VF motherboard (486)
+ga486vs // Gigabyte GA-486VS motherboard (486)
+amibaby // AMI Mark V Baby Screamer motherboard (386)
+ecsfx3000 // Elitegroup FX-3000 motherboard (386)
+frx386c // Micro-Express Inc. Forex 386 Cache
+um486 // Elitegroup UM486/UM486sx Rev.1.4. motherboard (486)
+um486v // Elitegroup UM486V-AIO motherboard (486)
+sm48650usc // Vintage Sprite SM 486-50USC motherboard (486)
+ch4slez1 // Chaintech 486SLE M106 4SLE-Z1 motherboard (486)
+ec4915aio // Elitegroup ECS UC4915 A AIO motherboard (486)
+via4386vio // Via 4386 VIO / Highscreen universal board (486)
+hot433 // Shuttle HOT-433 motherboard (486)
+abpb4 // Abit AB-PB4 motherboard (486)
+abpw4 // Abit AB-PW4 motherboard (486)
+ochawk // Octek Hawk motherboard (486)
+pt430 // Pine Technology PT-430 motherboard (486)
+ch491e // Chicony CH-491E motherboard (486)
+a486sv2 // Asus ISA-486SV2 motherboard (486)
+mb4d33 // Aquarius System (ASI) MB-4D33/50NR motherboard (486)
+uniwb4407 // UNICHIP 486 WB 4407 REV 1.0 motherboard (486)
+px486p3 // QDI PX486P3 motherboard (486)
+um8886 // 486 motherboards using the UMC UM8886BF/UM8881F chipset
+gete486vl // GENOA TurboExpress 486 VL motherboard (486)
+pck486dx // Peacock PCK 486 DX motherboard
+sis85c471 // 486 motherboards using the SiS 85C471/85C407 chipset
+um8498f // 486 motherboards using the UMC UM8498F, UM8496F chipset
+486ccv // Diamond Flower, Inc. (DFI) 486-CCV motherboard (486)
+alaleolx // RYC Alaris LEOPARD LX REV D (486)
+alim1489 // 486 motherboards using the ALi 1487/1489 chipset
+ms4125 // MSI MS-4125 motherboard (486)
+pkm0038s // DTK PKM-0038S aka Gemlight GMB-486SG motherboard (486)
+fic4386vcv // FIC 4386-VC-V motherboard (486)
+v4p895p3 // QDI V4P895P3/SMT V5.0 motherboard (486)
@source:atari_s1.cpp
aavenger //
@@ -12723,6 +12806,9 @@ splndrbt2 // (c) 1985 Alpha Denshi Co.
splndrbta // (c) 1985 Alpha Denshi Co.
splndrbtb // (c) 1985 Alpha Denshi Co.
+@source:eispc.cpp
+epc // 1984 Ericsson PC
+
@source:ertictac.cpp
ertictac // (c) 1992 Sisteme
ertictaca // (c) 1992 Sisteme
@@ -13290,7 +13376,7 @@ 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 //
+fmtownsv03 //
fmtownsftv // 1994 FM-Towns II FreshTV
fmtownshr // 1992 FM-Towns II HR
fmtownsmx // FM-Towns II MX
@@ -14651,6 +14737,7 @@ cmv801 // (c) 198? Corsica
cmwm // (c) 199? Dyna Electronics
crazybon // (c) 199? Sang Ho
crazybona // (c) 199? Sang Ho
+eldoradd // (c) 1991 Dyna Electronics
fb2010 // (c) 2009 Amcoe
fl7_3121 // (c) 199? Cyberdyne Systems, Inc.
fl7_50 // (c) 199? Cyberdyne Systems, Inc.
@@ -15386,6 +15473,7 @@ gnw_judge // Nintendo
gnw_lboat // Nintendo
gnw_lion // Nintendo
gnw_manhole // Nintendo
+gnw_manholeg // Nintendo
gnw_mario // Nintendo
gnw_mariocm // Nintendo
gnw_mbaway // Nintendo
@@ -15398,6 +15486,7 @@ gnw_popeye // Nintendo
gnw_rshower // Nintendo
gnw_sbuster // Nintendo
gnw_smb // Nintendo
+gnw_smbn // Nintendo
gnw_squish // Nintendo
gnw_ssparky // Nintendo
gnw_stennis // Nintendo
@@ -15644,7 +15733,7 @@ barricad // (c) 1976 Ramtek
brickyrd // (c) 1976 Ramtek
hitme // (c) 05/1976 Ramtek
hitme1 // (c) 05/1976 Ramtek
-m21 // (c) 08/1976 Mirco
+mirco21 // (c) 08/1976 Mirco
super21 // (c) 1978 Mirco
@source:hitpoker.cpp
@@ -18883,6 +18972,7 @@ m20 //
m40 //
@source:m24.cpp
+m21 // Olivetti M21 Portable
m24 //
m240 //
@@ -18959,6 +19049,7 @@ bchopper // (c) 1987
cosmccop // (c) 1991 (World)
dbreed // (c) 1989
dbreedm72 // (c) 1989
+dbreedm72j // (c) 1989 (Japan)
dkgensan // (c) 1990 (Japan)
dkgensanm72 // (c) 1990 (Japan)
dkgensanm82 // (c) 1990 (Japan)
@@ -22491,6 +22582,7 @@ m3razdaza //
m3razdazd //
m3replay // Instant Replay (Barcrest)
m3rockpl // Rock Pile (Pcp)
+m3rolla // Rollamatic (Barcrest)
m3rollem // Roll 'Em (Pcp)
m3rxchng // Royal Exchange Club (Barcrest)
m3scoop // Scoop (Peter Simper, prototype?)
@@ -30917,6 +31009,7 @@ gprnrs1
gprnrs16
ddrdismx // (c) 2006 Majesco / Konami [(c) 2001 Disney on title screen]
ddrstraw // (c) 2006 Majesco / Konami
+ablping
vgpocket
vgpmini
sy889
@@ -31677,7 +31770,6 @@ comport // Compaq Portable
dgone // 1984 Data General/One
eagle1600 //
eaglespirit // Eagle PC Spirit
-epc // 1984 Ericsson PC
eppc // 1985 Ericsson Portable PC
hyo88t // Hyosung Topstar 88T
ibm5550 //
@@ -37192,6 +37284,9 @@ 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:swtpc8212.cpp
+swtpc8212 //
+
@source:swyft.cpp
swyft //
@@ -37993,7 +38088,6 @@ t4490 // Terco 4490 Mill CNC Control (c) 1986
alcat258 //
loewe715 //
loewed //
-swtpc8212 //
teleguide //
@source:terracre.cpp
@@ -38294,6 +38388,9 @@ spellb79 //
@source:tk2000.cpp
tk2000 // Microdigital TK2000
+@source:tk635.cpp
+tk635 // (c) 199? Termtek
+
@source:tk80.cpp
ics8080 //
mikrolab //
@@ -38951,6 +39048,7 @@ tx0_8kw // 1962 MIT TX-0 (8kw RAM)
@source:tx1.cpp
buggyboy // (c) 1985 Tatsumi
+buggyboyb // (c) 1985 Tatsumi
buggyboyjr // (c) 1986 Tatsumi
tx1 // (c) 1983 Tatsumi + Atari, Namco and Taito license
tx1jb // (c) 1983 Tatsumi
@@ -38962,6 +39060,9 @@ blazlaz // (c) 1989 Hudson Soft
keith // (c) 1989 Hudson Soft
paclandp // (c) 1989 Namco
+@source:uchroma68.cpp
+uchroma68 // 1980 Motorola evaluation board for the MC6847
+
@source:uknc.cpp
uknc //
@@ -39340,14 +39441,17 @@ jak_dora //
jak_dorr //
jak_disn //
jak_disf //
-jak_disp //
+jak_dpr //
+jak_dprs //
jak_sith //
jak_sdoo //
jak_dbz //
jak_mpac //
+jak_capc //
jak_wof //
jak_spdm //
jak_pooh //
+jak_care //
jak_nick //
jak_sbfc //
lexizeus // Lexibook
diff --git a/src/mame/mess.flt b/src/mame/mess.flt
index 1804bde49e1..ead41c43c53 100644
--- a/src/mame/mess.flt
+++ b/src/mame/mess.flt
@@ -220,6 +220,7 @@ ec184x.cpp
ec65.cpp
ec7915.cpp
einstein.cpp
+eispc.cpp
elan_eu3a05.cpp
elan_eu3a14.cpp
electron.cpp
@@ -790,6 +791,7 @@ svision.cpp
svmu.cpp
swtpc.cpp
swtpc09.cpp
+swtpc8212.cpp
swyft.cpp
sym1.cpp
symbolics.cpp
@@ -843,6 +845,7 @@ timex.cpp
tispeak.cpp
tispellb.cpp
tk2000.cpp
+tk635.cpp
tk80.cpp
tk80bs.cpp
tm990189.cpp
@@ -877,6 +880,7 @@ tvboy.cpp
tvc.cpp
tvgame.cpp
tx0.cpp
+uchroma68.cpp
uknc.cpp
unichamp.cpp
unior.cpp
diff --git a/src/mame/video/cave.cpp b/src/mame/video/cave.cpp
index ef57301bcaa..c5ae187ff2b 100644
--- a/src/mame/video/cave.cpp
+++ b/src/mame/video/cave.cpp
@@ -59,62 +59,6 @@ Note: if MAME_DEBUG is defined, pressing:
#define SPRITE_VISIBLE_CAVE 0x04
-/***************************************************************************
-
- Tiles Format
-
- Offset: Bits: Value:
-
- 0.w fe-- ---- ---- --- Priority
- --dc ba98 ---- ---- Color
- ---- ---- 7654 3210
-
- 2.w Code
-
-
- When a row-scroll / row-select effect is enabled, the scroll values are
- fetched starting from tile RAM + $1000, 4 bytes per scan line:
-
- Offset: Value:
-
- 0.w Tilemap line to display
- 2.w X Scroll value
-
-***************************************************************************/
-
-template<int Chip, int Gfx>
-TILE_GET_INFO_MEMBER(cave_state::get_tile_info)
-{
- u16 *VRAM = m_vram[Chip];
- const bool TDIM = m_tiledim[Chip];
- u32 code, color, pri, tile;
-
- if (TDIM)
- {
- tile = (tile_index % (512 / 8)) / 2 + ((tile_index / (512 / 8)) / 2) * (512 / 16);
- code = (VRAM[tile * 2 + 0x0000 / 2] << 16) + VRAM[tile * 2 + 0x0002 / 2];
-
- color = (code & 0x3f000000) >> (32-8);
- pri = (code & 0xc0000000) >> (32-2);
- code = (code & 0x00ffffff) * 4;
-
- code += tile_index & 1;
- code += ((tile_index / (512 / 8)) & 1) * 2;
- }
- else
- {
- code = (VRAM[tile_index * 2 + 0x4000 / 2] << 16) + VRAM[tile_index * 2 + 0x4002 / 2];
-
- color = (code & 0x3f000000) >> (32 - 8);
- pri = (code & 0xc0000000) >> (32 - 2);
- code = (code & 0x00ffffff);
- }
-
- SET_TILE_INFO_MEMBER(Gfx, code, color, 0);
- tileinfo.category = pri;
-}
-
-
/* Sailormn: the lower 2 Megabytes of tiles banked */
void cave_state::sailormn_tilebank_w(int bank)
@@ -126,36 +70,13 @@ void cave_state::sailormn_tilebank_w(int bank)
}
}
-TILE_GET_INFO_MEMBER(cave_state::sailormn_get_tile_info_2)
+void cave_state::sailormn_get_banked_code(bool tiledim, u32 &color, u32 &pri, u32 &code)
{
- u32 code, color, pri;
-
- if (m_tiledim[2])
- {
- u32 tile;
- tile = (tile_index % (512 / 8)) / 2 + ((tile_index / (512 / 8)) / 2) * (512 / 16);
- code = (m_vram[2][tile * 2 + 0x0000 / 2] << 16) + m_vram[2][tile * 2 + 0x0002 / 2];
-
- color = (code & 0x3f000000) >> (32 - 8);
- pri = (code & 0xc0000000) >> (32 - 2);
- code = (code & 0x00ffffff) * 4;
-
- code += tile_index & 1;
- code += ((tile_index / (512 / 8)) & 1) * 2;
- }
- else
+ if (!tiledim)
{
- code = (m_vram[2][tile_index * 2 + 0x4000 / 2] << 16) + m_vram[2][tile_index * 2 + 0x4002 / 2];
-
- color = (code & 0x3f000000) >> (32 - 8);
- pri = (code & 0xc0000000) >> (32 - 2);
- code = (code & 0x00ffffff);
if ((code < 0x10000) && (m_sailormn_tilebank))
code += 0x40000;
}
-
- SET_TILE_INFO_MEMBER(2, code, color, 0);
- tileinfo.category = pri;
}
@@ -168,65 +89,11 @@ TILE_GET_INFO_MEMBER(cave_state::sailormn_get_tile_info_2)
***************************************************************************/
-void cave_state::vh_start(int num, u16 sprcol_base, u16 sprcol_granularity)
+void cave_state::vh_start(u16 sprcol_base, u16 sprcol_granularity)
{
m_sprite_base_pal = sprcol_base;
m_sprite_granularity = sprcol_granularity;
- m_tilemap[0] = nullptr;
- m_tilemap[1] = nullptr;
- m_tilemap[2] = nullptr;
- m_tilemap[3] = nullptr;
-
- m_tiledim[0] = false;
- m_tiledim[1] = false;
- m_tiledim[2] = false;
- m_tiledim[3] = false;
-
- m_old_tiledim[0] = false;
- m_old_tiledim[1] = false;
- m_old_tiledim[2] = false;
- m_old_tiledim[3] = false;
-
- assert((num >= 1) && (num <= 4));
-
- switch (num)
- {
- case 4:
- m_tilemap[3] = &machine().tilemap().create(*m_gfxdecode[0], tilemap_get_info_delegate(&cave_state::get_tile_info<3, 3>, "screen0_layer3",this), TILEMAP_SCAN_ROWS, 8, 8, 512 / 8, 512 / 8);
- m_tilemap[3]->set_transparent_pen(0);
- m_tilemap[3]->set_scroll_rows(1);
- m_tilemap[3]->set_scroll_cols(1);
- save_item(NAME(m_tiledim[3]));
- save_item(NAME(m_old_tiledim[3]));
-
- case 3:
- m_tilemap[2] = &machine().tilemap().create(*m_gfxdecode[0], tilemap_get_info_delegate(&cave_state::get_tile_info<2, 2>, "screen0_layer2",this), TILEMAP_SCAN_ROWS, 8, 8, 512 / 8, 512 / 8);
- m_tilemap[2]->set_transparent_pen(0);
- m_tilemap[2]->set_scroll_rows(1);
- m_tilemap[2]->set_scroll_cols(1);
- save_item(NAME(m_tiledim[2]));
- save_item(NAME(m_old_tiledim[2]));
-
- case 2:
- m_tilemap[1] = &machine().tilemap().create(*m_gfxdecode[0], tilemap_get_info_delegate(&cave_state::get_tile_info<1, 1>, "screen0_layer1",this), TILEMAP_SCAN_ROWS, 8, 8, 512 / 8, 512 / 8);
- m_tilemap[1]->set_transparent_pen(0);
- m_tilemap[1]->set_scroll_rows(1);
- m_tilemap[1]->set_scroll_cols(1);
- save_item(NAME(m_tiledim[1]));
- save_item(NAME(m_old_tiledim[1]));
-
- case 1:
- m_tilemap[0] = &machine().tilemap().create(*m_gfxdecode[0], tilemap_get_info_delegate(&cave_state::get_tile_info<0, 0>, "screen0_layer0",this), TILEMAP_SCAN_ROWS, 8, 8, 512 / 8, 512 / 8);
- m_tilemap[0]->set_transparent_pen(0);
- m_tilemap[0]->set_scroll_rows(1);
- m_tilemap[0]->set_scroll_cols(1);
- save_item(NAME(m_tiledim[0]));
- save_item(NAME(m_old_tiledim[0]));
-
- break;
- }
-
sprite_init();
m_layers_offs_x = 0x13;
@@ -255,48 +122,28 @@ void cave_state::vh_start(int num, u16 sprcol_base, u16 sprcol_granularity)
}
}
-// ddonpach esprade gaia guwange (8bpp tilemap)
-VIDEO_START_MEMBER(cave_state,ddonpach)
-{
- vh_start(3, 0, 256);
-}
-
-// dfeveron mazinger
-VIDEO_START_MEMBER(cave_state,dfeveron)
+// 4 bit sprite granularity
+VIDEO_START_MEMBER(cave_state,spr_4bpp)
{
- vh_start(2, 0, 16);
+ vh_start(0, 16);
}
-// donpachi hotdogst metmqstr
-VIDEO_START_MEMBER(cave_state,donpachi)
+// 8 bit sprite granularity
+VIDEO_START_MEMBER(cave_state,spr_8bpp)
{
- vh_start(3, 0, 16);
+ vh_start(0, 256);
}
// korokoro (different sprite base palette)
VIDEO_START_MEMBER(cave_state,korokoro)
{
- vh_start(1, 0x3c00, 16);
+ vh_start(0x3c00, 16);
}
// ppsatan (3 screen)
VIDEO_START_MEMBER(cave_state,ppsatan)
{
- vh_start(1, 0x3c00, 16);
- m_tilemap[2] = &machine().tilemap().create(*m_gfxdecode[2], tilemap_get_info_delegate(&cave_state::get_tile_info<2, 0>, "screen2_layer0",this), TILEMAP_SCAN_ROWS, 8, 8, 512 / 8, 512 / 8);
- m_tilemap[2]->set_transparent_pen(0);
- m_tilemap[2]->set_scroll_rows(1);
- m_tilemap[2]->set_scroll_cols(1);
- save_item(NAME(m_tiledim[2]));
- save_item(NAME(m_old_tiledim[2]));
-
- m_tilemap[1] = &machine().tilemap().create(*m_gfxdecode[1], tilemap_get_info_delegate(&cave_state::get_tile_info<1, 0>, "screen1_layer0",this), TILEMAP_SCAN_ROWS, 8, 8, 512 / 8, 512 / 8);
- m_tilemap[1]->set_transparent_pen(0);
- m_tilemap[1]->set_scroll_rows(1);
- m_tilemap[1]->set_scroll_cols(1);
- save_item(NAME(m_tiledim[1]));
- save_item(NAME(m_old_tiledim[1]));
-
+ vh_start(0x3c00, 16);
for (int chip = 1; chip < 3; chip++)
{
m_background_pen[chip] = m_gfxdecode[chip]->gfx(0)->colorbase() +
@@ -313,33 +160,6 @@ VIDEO_START_MEMBER(cave_state,ppsatan)
}
}
-// pwrinst2
-VIDEO_START_MEMBER(cave_state,pwrinst2)
-{
- vh_start(4, 0, 16);
-}
-
-// sailormn agallet
-VIDEO_START_MEMBER(cave_state,sailormn)
-{
- vh_start(2, 0, 16);
-
- /* Layer 2 (8x8) needs to be handled differently */
- m_tilemap[2] = &machine().tilemap().create(*m_gfxdecode[0], tilemap_get_info_delegate(FUNC(cave_state::sailormn_get_tile_info_2),this), TILEMAP_SCAN_ROWS, 8, 8, 512 / 8, 512 / 8);
-
- m_tilemap[2]->set_transparent_pen(0);
- m_tilemap[2]->set_scroll_rows(1);
- m_tilemap[2]->set_scroll_cols(1);
- save_item(NAME(m_tiledim[2]));
- save_item(NAME(m_old_tiledim[2]));
-}
-
-// uopoko tjumpman (8bpp tilemap, but single tilemap layer)
-VIDEO_START_MEMBER(cave_state,uopoko)
-{
- vh_start(1, 0, 256);
-}
-
/***************************************************************************
Sprites Drawing
@@ -1273,19 +1093,19 @@ inline void cave_state::tilemap_draw(int chip,
screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect,
u32 flags, u32 priority, u32 priority2, int GFX)
{
- tilemap_t *TILEMAP = m_tilemap[GFX];
- const u16 *VRAM = m_vram[GFX];
- const u16 *VCTRL = m_vctrl[GFX];
+ tilemap038_device *TILEMAP = m_tilemap[GFX];
/* Bail out if ... */
- if ((!TILEMAP) || /* no tilemap; */
- ((VCTRL[2] & 0x0003) != priority2) || /* tilemap's global priority not the requested one; */
- ((VCTRL[2] & 0x0010))) /* tilemap's disabled. */
+ if (!TILEMAP) /* no tilemap; */
return;
- const bool flipx = ~VCTRL[0] & 0x8000;
- const bool flipy = ~VCTRL[1] & 0x8000;
+ if (((TILEMAP->external() & 0x0003) != priority2) || /* tilemap's global priority not the requested one; */
+ ((!TILEMAP->enable()))) /* tilemap's disabled. */
+ return;
+
+ const bool flipx = TILEMAP->flipx();
+ const bool flipy = TILEMAP->flipy();
TILEMAP->set_flip((flipx ? TILEMAP_FLIPX : 0) | (flipy ? TILEMAP_FLIPY : 0));
int offs_x = m_layers_offs_x;
@@ -1296,15 +1116,15 @@ inline void cave_state::tilemap_draw(int chip,
/* An additional 8 pixel offset for layers with 8x8 tiles. Plus
Layer 0 is displaced by 1 pixel wrt Layer 1, so is Layer 2 wrt
Layer 1 */
- if (TILEMAP == m_tilemap[0]) offs_x -= (m_tiledim[0] ? 1 : (1 + 8));
- else if (TILEMAP == m_tilemap[1]) offs_x -= (m_tiledim[1] ? 2 : (2 + 8));
- else if (TILEMAP == m_tilemap[2]) offs_x -= (m_tiledim[2] ? 3 : (3 + 8));
- else if (TILEMAP == m_tilemap[3]) offs_x -= (m_tiledim[3] ? 4 : (4 + 8));
+ if (TILEMAP == m_tilemap[0]) offs_x -= (TILEMAP->tiledim() ? 1 : (1 + 8));
+ else if (TILEMAP == m_tilemap[1]) offs_x -= (TILEMAP->tiledim() ? 2 : (2 + 8));
+ else if (TILEMAP == m_tilemap[2]) offs_x -= (TILEMAP->tiledim() ? 3 : (3 + 8));
+ else if (TILEMAP == m_tilemap[3]) offs_x -= (TILEMAP->tiledim() ? 4 : (4 + 8));
- const int sx = VCTRL[0] - m_videoregs[chip][0] + (flipx ? (offs_x + 2) : -offs_x);
- const int sy = VCTRL[1] - m_videoregs[chip][1] + (flipy ? (offs_y + 2) : -offs_y);
+ const int sx = TILEMAP->scrollx() - m_videoregs[chip][0] + (flipx ? (offs_x + 2) : -offs_x);
+ const int sy = TILEMAP->scrolly() - m_videoregs[chip][1] + (flipy ? (offs_y + 2) : -offs_y);
- if (VCTRL[1] & 0x4000) // row-select
+ if (TILEMAP->rowselect_en()) // row-select
{
rectangle clip;
int endline, vramdata0, vramdata1;
@@ -1323,26 +1143,26 @@ inline void cave_state::tilemap_draw(int chip,
for (int startline = cliprect.min_y; startline <= cliprect.max_y;)
{
/* Find the largest slice */
- vramdata0 = (vramdata1 = VRAM[(0x1002 + (((sy + offs_row + startline) * 4) & 0x7ff)) / 2]);
+ vramdata0 = (vramdata1 = TILEMAP->rowselect(sy + offs_row + startline));
for (endline = startline + 1; endline <= cliprect.max_y; endline++)
- if ((++vramdata1) != VRAM[(0x1002 + (((sy + offs_row + endline) * 4) & 0x7ff)) / 2]) break;
+ if ((++vramdata1) != TILEMAP->rowselect(sy + offs_row + endline)) break;
TILEMAP->set_scrolly(0, vramdata0 - startline);
- if (VCTRL[0] & 0x4000) // row-scroll, row-select
+ if (TILEMAP->rowscroll_en()) // row-scroll, row-select
{
/*
Row-scroll:
A different scroll value is specified for each scan line.
- This is handled using tilemap_set_scroll_rows and calling
- tilemap_draw just once.
+ This is handled using tilemap->set_scroll_rows and calling
+ tilemap->draw just once.
*/
TILEMAP->set_scroll_rows(512);
for (int line = startline; line < endline; line++)
TILEMAP->set_scrollx((vramdata0 - startline + line) & 511,
- sx + VRAM[(0x1000 + (((sy + offs_row + line) * 4) & 0x7ff)) / 2]);
+ sx + TILEMAP->rowscroll(sy + offs_row + line));
}
else // no row-scroll, row-select
{
@@ -1366,18 +1186,18 @@ inline void cave_state::tilemap_draw(int chip,
startline = endline;
}
}
- else if (VCTRL[0] & 0x4000) // row-scroll, no row-select
+ else if (TILEMAP->rowscroll_en()) // row-scroll, no row-select
{
TILEMAP->set_scroll_rows(512);
for (int line = cliprect.min_y; line <= cliprect.max_y; line++)
TILEMAP->set_scrollx((line + sy) & 511,
- sx + VRAM[(0x1000+(((sy + offs_row + line) * 4) & 0x7ff)) / 2]);
+ sx + TILEMAP->rowscroll(sy + offs_row + line));
TILEMAP->set_scrolly(0, sy);
TILEMAP->draw(screen, bitmap, cliprect, flags, priority);
}
else
{
- /* DEF_STR(Normal) scrolling */
+ /* Normal scrolling */
TILEMAP->set_scroll_rows(1);
TILEMAP->set_scroll_cols(1);
TILEMAP->set_scrollx(0, sx);
@@ -1396,16 +1216,10 @@ u32 cave_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const
m_blit.baseaddr_zbuf = reinterpret_cast<u8 *>(m_sprite_zbuf[0].raw_pixptr(0));
m_blit.line_offset_zbuf = m_sprite_zbuf[0].rowbytes();
- /* Choose the tilemap to display (8x8 tiles or 16x16 tiles) */
for (int GFX = 0; GFX < 4; GFX++)
{
if (m_tilemap[GFX])
- {
- m_tiledim[GFX] = m_vctrl[GFX][1] & 0x2000;
- if (m_tiledim[GFX] != m_old_tiledim[GFX])
- m_tilemap[GFX]->mark_all_dirty();
- m_old_tiledim[GFX] = m_tiledim[GFX];
- }
+ m_tilemap[GFX]->prepare();
}
#ifdef MAME_DEBUG
@@ -1435,10 +1249,10 @@ u32 cave_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const
m_videoregs[0][4], m_videoregs[0][5], m_videoregs[0][6], m_videoregs[0][7]);
#endif
/* Show the scroll / flags registers of the selected layer */
- if ((m_tilemap[0]) && (msk & 0x000f)) popmessage("x:%04X y:%04X f:%04X", m_vctrl[0][0],m_vctrl[0][1],m_vctrl[0][2]);
- if ((m_tilemap[1]) && (msk & 0x00f0)) popmessage("x:%04X y:%04X f:%04X", m_vctrl[1][0],m_vctrl[1][1],m_vctrl[1][2]);
- if ((m_tilemap[2]) && (msk & 0x0f00)) popmessage("x:%04X y:%04X f:%04X", m_vctrl[2][0],m_vctrl[2][1],m_vctrl[2][2]);
- if ((m_tilemap[3]) && (msk & 0xf000)) popmessage("x:%04X y:%04X f:%04X", m_vctrl[3][0],m_vctrl[3][1],m_vctrl[3][2]);
+ if ((m_tilemap[0]) && (msk & 0x000f)) popmessage("x:%04X y:%04X f:%04X", m_tilemap[0]->vregs(0),m_tilemap[0]->vregs(1),m_tilemap[0]->vregs(2));
+ if ((m_tilemap[1]) && (msk & 0x00f0)) popmessage("x:%04X y:%04X f:%04X", m_tilemap[1]->vregs(0),m_tilemap[1]->vregs(1),m_tilemap[1]->vregs(2));
+ if ((m_tilemap[2]) && (msk & 0x0f00)) popmessage("x:%04X y:%04X f:%04X", m_tilemap[2]->vregs(0),m_tilemap[2]->vregs(1),m_tilemap[2]->vregs(2));
+ if ((m_tilemap[3]) && (msk & 0xf000)) popmessage("x:%04X y:%04X f:%04X", m_tilemap[3]->vregs(0),m_tilemap[3]->vregs(1),m_tilemap[3]->vregs(2));
}
/* Show the row / "column" scroll enable flags, when they change state */
@@ -1447,8 +1261,8 @@ u32 cave_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const
{
if (m_tilemap[GFX])
{
- m_rasflag |= (m_vctrl[GFX][0] & 0x4000) ? 0x0001 << (4*GFX) : 0;
- m_rasflag |= (m_vctrl[GFX][1] & 0x4000) ? 0x0002 << (4*GFX) : 0;
+ m_rasflag |= (m_tilemap[GFX]->vregs(0) & 0x4000) ? 0x0001 << (4*GFX) : 0;
+ m_rasflag |= (m_tilemap[GFX]->vregs(1) & 0x4000) ? 0x0002 << (4*GFX) : 0;
}
}
@@ -1540,10 +1354,7 @@ u32 cave_state::screen_update_ppsatan_core(screen_device &screen, bitmap_rgb32 &
m_blit.baseaddr_zbuf = reinterpret_cast<u8 *>(m_sprite_zbuf[chip].raw_pixptr(0));
m_blit.line_offset_zbuf = m_sprite_zbuf[chip].rowbytes();
- m_tiledim[chip] = m_vctrl[chip][1] & 0x2000;
- if (m_tiledim[chip] != m_old_tiledim[chip])
- m_tilemap[chip]->mark_all_dirty();
- m_old_tiledim[chip] = m_tiledim[chip];
+ m_tilemap[chip]->prepare();
sprite_check(chip, chip, screen, cliprect);
diff --git a/src/mame/video/cischeat.cpp b/src/mame/video/cischeat.cpp
index 750ecf21fae..c8fcdeeafa6 100644
--- a/src/mame/video/cischeat.cpp
+++ b/src/mame/video/cischeat.cpp
@@ -1009,11 +1009,11 @@ if ( machine().input().code_pressed(KEYCODE_Z) || machine().input().code_pressed
{
address_space &space = m_maincpu->space(AS_PROGRAM);
- popmessage("Cmd: %04X Pos:%04X Lim:%04X Inp:%04X",
+ popmessage("Cmd: %04X Pos:%04X Lim:%04X Inp:%02X",
m_scudhamm_motor_command,
scudhamm_motor_pos_r(space,0,0xffff),
scudhamm_motor_status_r(space,0,0xffff),
- scudhamm_analog_r(space,0,0xffff) );
+ scudhamm_analog_r() );
#if 0
// captflag
diff --git a/src/mame/video/cps1.cpp b/src/mame/video/cps1.cpp
index e3a033618f2..770e8b6fed2 100644
--- a/src/mame/video/cps1.cpp
+++ b/src/mame/video/cps1.cpp
@@ -2306,6 +2306,8 @@ void cps_state::video_start()
cps1_get_video_base(); /* Calculate base pointers */
cps1_get_video_base(); /* Calculate old base pointers */
+ m_screen->register_screen_bitmap(m_dummy_bitmap);
+
/* state save register */
save_item(NAME(m_scanline1));
save_item(NAME(m_scanline2));
@@ -2930,7 +2932,6 @@ void cps_state::cps1_render_layer( screen_device &screen, bitmap_ind16 &bitmap,
void cps_state::cps1_render_high_layer( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int layer )
{
- bitmap_ind16 dummy_bitmap;
switch (layer)
{
case 0:
@@ -2939,7 +2940,7 @@ void cps_state::cps1_render_high_layer( screen_device &screen, bitmap_ind16 &bit
case 1:
case 2:
case 3:
- m_bg_tilemap[layer - 1]->draw(screen, dummy_bitmap, cliprect, TILEMAP_DRAW_LAYER0, 1);
+ m_bg_tilemap[layer - 1]->draw(screen, m_dummy_bitmap, cliprect, TILEMAP_DRAW_LAYER0, 1);
break;
}
}
diff --git a/src/mame/video/legionna.cpp b/src/mame/video/legionna.cpp
index 8c311cb55df..4492f7d4d4b 100644
--- a/src/mame/video/legionna.cpp
+++ b/src/mame/video/legionna.cpp
@@ -85,10 +85,10 @@ void legionna_state::denjinmk_setgfxbank(u16 data)
void legionna_state::videowrite_cb_w(offs_t offset, u16 data)
{
- // AM_RANGE(0x101000, 0x1017ff) AM_RAM // _WRITE(background_w) AM_SHARE("back_data")
- // AM_RANGE(0x101800, 0x101fff) AM_RAM // _WRITE(foreground_w) AM_SHARE("fore_data")
- // AM_RANGE(0x102000, 0x1027ff) AM_RAM // _WRITE(midground_w) AM_SHARE("mid_data")
- // AM_RANGE(0x102800, 0x1037ff) AM_RAM // _WRITE(text_w) AM_SHARE("textram")
+ // map(0x101000, 0x1017ff).ram(); // .w(FUNC(legionna_state::background_w)).share("back_data");
+ // map(0x101800, 0x101fff).ram(); // .w(FUNC(legionna_state::foreground_w)).share("fore_data");
+ // map(0x102000, 0x1027ff).ram(); // .w(FUNC(legionna_state::midground_w)).share("mid_data");
+ // map(0x102800, 0x1037ff).ram(); // .w(FUNC(legionna_state::text_w)).share("textram");
if (offset < 0x800 / 2)
{
diff --git a/src/mame/video/mcatadv.cpp b/src/mame/video/mcatadv.cpp
index 30c6dd35c55..38b7da27c53 100644
--- a/src/mame/video/mcatadv.cpp
+++ b/src/mame/video/mcatadv.cpp
@@ -16,31 +16,16 @@ ToDo: Fix Sprites & Rowscroll/Select for Cocktail
#include <algorithm>
-template<int Chip>
-TILE_GET_INFO_MEMBER(mcatadv_state::get_mcatadv_tile_info)
-{
- int tileno = m_vram[Chip][tile_index * 2 + 1];
- int colour = (m_vram[Chip][tile_index * 2] & 0x3f00) >> 8;
- int pri = (m_vram[Chip][tile_index * 2] & 0xc000) >> 14;
-
- pri |= 0x8;
-
- SET_TILE_INFO_MEMBER(Chip,tileno,colour + m_palette_bank[Chip] * 0x40, 0);
- tileinfo.category = pri;
-}
-
void mcatadv_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect )
{
- uint16_t *source = (m_spriteram_old.get() + (m_spriteram.bytes() / 2) /2);
+ u16 *source = (m_spriteram_old.get() + (m_spriteram.bytes() / 2) /2);
source -= 4;
- uint16_t *finish = m_spriteram_old.get();
- int global_x = m_vidregs[0] - 0x184;
- int global_y = m_vidregs[1] - 0x1f1;
+ u16 *finish = m_spriteram_old.get();
+ int const global_x = m_vidregs[0] - 0x184;
+ int const global_y = m_vidregs[1] - 0x1f1;
- uint16_t *destline;
- uint8_t *priline;
- int sprmask = m_sprdata.bytes()-1;
+ u32 const sprmask = m_sprdata.bytes()-1;
int xstart, xend, xinc;
int ystart, yend, yinc;
@@ -57,9 +42,9 @@ void mcatadv_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, c
while (source >= finish)
{
- int pen = (source[0] & 0x3f00) >> 8;
- int tileno = source[1] & 0xffff;
- int pri = (source[0] & 0xc000) >> 14;
+ u32 const pen = (source[0] & 0x3f00) >> 8;
+ u32 const tileno = source[1] & 0xffff;
+ u8 pri = (source[0] & 0xc000) >> 14;
pri |= 0x8;
@@ -68,13 +53,9 @@ void mcatadv_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, c
int flipy = source[0] & 0x0040;
int flipx = source[0] & 0x0080;
- int height = ((source[3] & 0xf000) >> 12) * 16;
- int width = ((source[2] & 0xf000) >> 12) * 16;
- int offset = tileno * 256;
-
- int drawxpos, drawypos;
- int xcnt, ycnt;
- int pix;
+ int const height = ((source[3] & 0xf000) >> 12) * 16;
+ int const width = ((source[2] & 0xf000) >> 12) * 16;
+ u32 offset = tileno * 256;
if (x & 0x200) x-=0x400;
if (y & 0x200) y-=0x400;
@@ -97,26 +78,26 @@ void mcatadv_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, c
if(!flipy) { ystart = 0; yend = height; yinc = 1; }
else { ystart = height-1; yend = -1; yinc = -1; }
- for (ycnt = ystart; ycnt != yend; ycnt += yinc)
+ for (int ycnt = ystart; ycnt != yend; ycnt += yinc)
{
- drawypos = y + ycnt - global_y;
+ const int drawypos = y + ycnt - global_y;
if ((drawypos >= cliprect.min_y) && (drawypos <= cliprect.max_y))
{
- destline = &bitmap.pix16(drawypos);
- priline = &screen.priority().pix8(drawypos);
+ u16 *destline = &bitmap.pix16(drawypos);
+ u8 *priline = &screen.priority().pix8(drawypos);
- for (xcnt = xstart; xcnt != xend; xcnt += xinc)
+ for (int xcnt = xstart; xcnt != xend; xcnt += xinc)
{
- drawxpos = x + xcnt - global_x;
+ const int drawxpos = x + xcnt - global_x;
if ((drawxpos >= cliprect.min_x) && (drawxpos <= cliprect.max_x))
{
- int pridata = priline[drawxpos];
+ const int pridata = priline[drawxpos];
if (!(pridata & 0x10)) // if we haven't already drawn a sprite pixel here (sprite masking)
{
- pix = m_sprdata[(offset / 2)&sprmask];
+ u8 pix = m_sprdata[(offset / 2)&sprmask];
if (offset & 1)
pix = pix >> 4;
@@ -147,39 +128,38 @@ void mcatadv_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, c
void mcatadv_state::mcatadv_draw_tilemap_part( screen_device &screen, int layer, int i, bitmap_ind16 &bitmap, const rectangle &cliprect )
{
- int flip;
- uint32_t drawline;
+ if (!m_tilemap[layer]->enable())
+ return;
+
rectangle clip;
clip.min_x = cliprect.min_x;
clip.max_x = cliprect.max_x;
- for (drawline = cliprect.min_y; drawline <= cliprect.max_y; drawline++)
+ for (u32 drawline = cliprect.min_y; drawline <= cliprect.max_y; drawline++)
{
- int scrollx, scrolly;
-
clip.min_y = drawline;
clip.max_y = drawline;
- scrollx = (m_scroll[layer][0] & 0x1ff) - 0x194;
- scrolly = (m_scroll[layer][1] & 0x1ff) - 0x1df;
+ int scrollx = (m_tilemap[layer]->scrollx() & 0x1ff) - 0x194;
+ int scrolly = (m_tilemap[layer]->scrolly() & 0x1ff) - 0x1df;
- if ((m_scroll[layer][1] & 0x4000) == 0x4000)
+ if (m_tilemap[layer]->rowselect_en())
{
- int rowselect = m_vram[layer][0x1000 / 2 + (((drawline + scrolly) & 0x1ff) * 2) + 1];
+ const int rowselect = m_tilemap[layer]->rowselect(drawline + scrolly);
scrolly = rowselect - drawline;
}
- if ((m_scroll[layer][0] & 0x4000) == 0x4000)
+ if (m_tilemap[layer]->rowscroll_en())
{
- int rowscroll = m_vram[layer][0x1000 / 2 + (((drawline + scrolly) & 0x1ff) * 2) + 0];
+ const int rowscroll = m_tilemap[layer]->rowscroll(drawline + scrolly);
scrollx += rowscroll;
}
/* Global Flip */
- if (!(m_scroll[layer][0] & 0x8000)) scrollx -= 0x19;
- if (!(m_scroll[layer][1] & 0x8000)) scrolly -= 0x141;
- flip = ((m_scroll[layer][0] & 0x8000) ? 0 : TILEMAP_FLIPX) | ((m_scroll[layer][1] & 0x8000) ? 0 : TILEMAP_FLIPY);
+ if (m_tilemap[layer]->flipx()) scrollx -= 0x19;
+ if (m_tilemap[layer]->flipy()) scrolly -= 0x141;
+ int flip = (m_tilemap[layer]->flipx() ? TILEMAP_FLIPX : 0) | (m_tilemap[layer]->flipy() ? TILEMAP_FLIPY : 0);
m_tilemap[layer]->set_scrollx(0, scrollx);
m_tilemap[layer]->set_scrolly(0, scrolly);
@@ -189,45 +169,39 @@ void mcatadv_state::mcatadv_draw_tilemap_part( screen_device &screen, int layer,
}
}
-uint32_t mcatadv_state::screen_update_mcatadv(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+u32 mcatadv_state::screen_update_mcatadv(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- int i;
-
bitmap.fill(0x3f0, cliprect);
screen.priority().fill(0, cliprect);
- if (m_scroll[0][2] != m_palette_bank[0])
- {
- m_palette_bank[0] = m_scroll[0][2]&0xf;
- m_tilemap[0]->mark_all_dirty();
- }
-
- if (m_scroll[1][2] != m_palette_bank[1])
+ for (int i = 0; i < 2; i++)
{
- m_palette_bank[1] = m_scroll[1][2]&0xf;
- m_tilemap[1]->mark_all_dirty();
+ m_tilemap[i]->prepare();
+ if (m_tilemap[i]->external() != m_palette_bank[i])
+ {
+ m_palette_bank[i] = m_tilemap[i]->external()&0xf;
+ m_tilemap[i]->mark_all_dirty();
+ }
}
/*
popmessage("%02x %02x %02x %02x",
- (mcatadv_scroll1[0] & 0x4000) >> 8,
- (mcatadv_scroll1[1] & 0x4000) >> 8,
- (mcatadv_scroll2[0] & 0x4000) >> 8,
- (mcatadv_scroll2[1] & 0x4000) >> 8);
+ m_tilemap[0]->rowscroll_en(),
+ m_tilemap[0]->rowselect_en(),
+ m_tilemap[1]->rowscroll_en(),
+ m_tilemap[1]->rowselect_en());
*/
- for (i = 0; i <= 3; i++)
+ for (int i = 0; i <= 3; i++)
{
#ifdef MAME_DEBUG
if (!machine().input().code_pressed(KEYCODE_Q))
#endif
- if (!(m_scroll[0][2]&0x10))
mcatadv_draw_tilemap_part(screen, 0, i|0x8, bitmap, cliprect);
#ifdef MAME_DEBUG
if (!machine().input().code_pressed(KEYCODE_W))
#endif
- if (!(m_scroll[1][2]&0x10)) // tilemap flicker effect on large shadow, nost level 7
mcatadv_draw_tilemap_part(screen, 1, i|0x8, bitmap, cliprect);
}
@@ -242,14 +216,8 @@ uint32_t mcatadv_state::screen_update_mcatadv(screen_device &screen, bitmap_ind1
void mcatadv_state::video_start()
{
- m_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(mcatadv_state::get_mcatadv_tile_info<0>),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32);
- m_tilemap[0]->set_transparent_pen(0);
-
- m_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(mcatadv_state::get_mcatadv_tile_info<1>),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32);
- m_tilemap[1]->set_transparent_pen(0);
-
- m_spriteram_old = make_unique_clear<uint16_t[]>(m_spriteram.bytes() / 2);
- m_vidregs_old = std::make_unique<uint16_t[]>(m_vidregs.bytes() / 2);
+ m_spriteram_old = make_unique_clear<u16[]>(m_spriteram.bytes() / 2);
+ m_vidregs_old = std::make_unique<u16[]>(m_vidregs.bytes() / 2);
m_palette_bank[0] = m_palette_bank[1] = 0;
diff --git a/src/mame/video/mw8080bw.cpp b/src/mame/video/mw8080bw.cpp
index 2faa2adb3a4..d7479eb8824 100644
--- a/src/mame/video/mw8080bw.cpp
+++ b/src/mame/video/mw8080bw.cpp
@@ -19,21 +19,19 @@ uint32_t mw8080bw_state::screen_update_mw8080bw(screen_device &screen, bitmap_rg
while (1)
{
- /* plot the current pixel */
+ // plot the current pixel
pen_t pen = (video_data & 0x01) ? rgb_t::white() : rgb_t::black();
bitmap.pix32(y - MW8080BW_VCOUNTER_START_NO_VBLANK, x) = pen;
- /* next pixel */
+ // next pixel
video_data = video_data >> 1;
x = x + 1;
/* end of line? */
if (x == 0)
{
- /* yes, flush out the shift register */
- int i;
-
- for (i = 0; i < 4; i++)
+ // yes, flush out the shift register
+ for (int i = 0; i < 4; i++)
{
pen = (video_data & 0x01) ? rgb_t::white() : rgb_t::black();
bitmap.pix32(y - MW8080BW_VCOUNTER_START_NO_VBLANK, 256 + i) = pen;
@@ -41,18 +39,17 @@ uint32_t mw8080bw_state::screen_update_mw8080bw(screen_device &screen, bitmap_rg
video_data = video_data >> 1;
}
- /* next row, video_data is now 0, so the next line will start
- with 4 blank pixels */
+ // next row, video_data is now 0, so the next line will start with 4 blank pixels
y = y + 1;
- /* end of screen? */
+ // end of screen?
if (y == 0)
break;
}
/* the video RAM is read at every 8 pixels starting with pixel 4 */
else if ((x & 0x07) == 0x04)
{
- offs_t offs = ((offs_t)y << 5) | (x >> 3);
+ offs_t const offs = ((offs_t)y << 5) | (x >> 3);
video_data = m_main_ram[offs];
}
}
@@ -95,7 +92,7 @@ uint32_t mw8080bw_state::screen_update_mw8080bw(screen_device &screen, bitmap_rg
#define SPCENCTR_BRIGHTNESS_DECAY 10
-uint32_t mw8080bw_state::screen_update_spcenctr(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+uint32_t spcenctr_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
uint8_t line_buf[256]; /* 256x1 bit RAM */
@@ -105,41 +102,38 @@ uint32_t mw8080bw_state::screen_update_spcenctr(screen_device &screen, bitmap_rg
uint8_t draw_line = 0;
uint8_t draw_trench = 0;
uint8_t draw_floor = 0;
- uint8_t width = m_spcenctr_trench_width;
+ uint8_t width = m_trench_width;
uint8_t floor_width = width;
- uint8_t center = m_spcenctr_trench_center;
+ uint8_t center = m_trench_center;
memset(line_buf, 0, 256);
- if(m_spcenctr_bright_control)
- m_spcenctr_brightness = 255;
- else if(m_spcenctr_brightness > SPCENCTR_BRIGHTNESS_DECAY)
- m_spcenctr_brightness -= SPCENCTR_BRIGHTNESS_DECAY;
+ if (m_bright_control)
+ m_brightness = 255;
+ else if (m_brightness > SPCENCTR_BRIGHTNESS_DECAY)
+ m_brightness -= SPCENCTR_BRIGHTNESS_DECAY;
else
- m_spcenctr_brightness = 0;
+ m_brightness = 0;
while (1)
{
- /* plot the current pixel */
+ // plot the current pixel
uint8_t bit = video_data & 0x01;
pen_t pen = bit ? rgb_t::white() : rgb_t::black();
- /* possibly draw trench in the background, top of trench first */
- if (!(width & 0x80) && draw_trench)
+ if (!(width & 0x80) && draw_trench) // possibly draw trench in the background, top of trench first
{
line_buf[x] = draw_line;
if (!bit)
pen = draw_line ? SPCENCTR_TOP_TRENCH_LIGHT_RGB32_PEN : SPCENCTR_TOP_TRENCH_DARK_RGB32_PEN;
}
- /* sides of trench? */
- else if (!(floor_width & 0x80) && (draw_trench || draw_floor))
+ else if (!(floor_width & 0x80) && (draw_trench || draw_floor)) // sides of trench?
{
if (!bit)
pen = line_buf[x] ? SPCENCTR_SIDE_TRENCH_LIGHT_RGB32_PEN : SPCENCTR_SIDE_TRENCH_DARK_RGB32_PEN;
}
- /* bottom of trench? */
- else if (draw_floor)
+ else if (draw_floor) // bottom of trench?
{
line_buf[x] = line_buf[x - 1];
@@ -147,8 +141,8 @@ uint32_t mw8080bw_state::screen_update_spcenctr(screen_device &screen, bitmap_rg
pen = line_buf[x] ? SPCENCTR_BOTTOM_TRENCH_LIGHT_RGB32_PEN : SPCENCTR_BOTTOM_TRENCH_DARK_RGB32_PEN;
}
- if(m_spcenctr_brightness > (pen & 0xff))
- pen = rgb_t(m_spcenctr_brightness, m_spcenctr_brightness, m_spcenctr_brightness);
+ if (m_brightness > (pen & 0xff))
+ pen = rgb_t(m_brightness, m_brightness, m_brightness);
bitmap.pix32(y - MW8080BW_VCOUNTER_START_NO_VBLANK, x) = pen;
@@ -156,25 +150,19 @@ uint32_t mw8080bw_state::screen_update_spcenctr(screen_device &screen, bitmap_rg
width = width + ((center & 0x80) ? -1 : 1);
floor_width = floor_width + ((center & 0x80) ? -1 : 1);
- /* next pixel */
+ // next pixel
video_data = video_data >> 1;
x = x + 1;
- /* end of line? */
- if (x == 0)
+ if (x == 0) // end of line?
{
- offs_t offs;
- uint8_t trench_control;
-
- /* yes, flush out the shift register */
- int i;
-
- for (i = 0; i < 4; i++)
+ // yes, flush out the shift register
+ for (int i = 0; i < 4; i++)
{
- if(video_data & 0x01)
+ if (video_data & 0x01)
pen = rgb_t::white();
- else if(m_spcenctr_brightness)
- pen = rgb_t(m_spcenctr_brightness, m_spcenctr_brightness, m_spcenctr_brightness);
+ else if(m_brightness)
+ pen = rgb_t(m_brightness, m_brightness, m_brightness);
else
pen = rgb_t::black();
@@ -184,8 +172,8 @@ uint32_t mw8080bw_state::screen_update_spcenctr(screen_device &screen, bitmap_rg
}
/* update the trench control for the next line */
- offs = ((offs_t)y << 5) | 0x1f;
- trench_control = m_main_ram[offs];
+ offs_t const offs = ((offs_t)y << 5) | 0x1f;
+ uint8_t const trench_control = m_main_ram[offs];
if (trench_control & 0x40)
draw_trench = 1;
@@ -201,26 +189,24 @@ uint32_t mw8080bw_state::screen_update_spcenctr(screen_device &screen, bitmap_rg
draw_line = (trench_control & 0x80) >> 7;
- /* add the lower 2 bits stored in the slope array to width */
+ // add the lower 2 bits stored in the slope array to width
if (draw_trench)
- width = width + (m_spcenctr_trench_slope[y & 0x0f] & 0x03);
+ width = width + (m_trench_slope[y & 0x0f] & 0x03);
- /* add the higher 2 bits stored in the slope array to floor width */
+ // add the higher 2 bits stored in the slope array to floor width
if (draw_floor)
- floor_width = floor_width + ((m_spcenctr_trench_slope[y & 0x0f] & 0x0c) >> 2);
+ floor_width = floor_width + ((m_trench_slope[y & 0x0f] & 0x0c) >> 2);
- /* next row, video_data is now 0, so the next line will start
- with 4 blank pixels */
+ // next row, video_data is now 0, so the next line will start with 4 blank pixels
y = y + 1;
- /* end of screen? */
+ // end of screen?
if (y == 0)
break;
}
- /* the video RAM is read at every 8 pixels starting with pixel 4 */
- else if ((x & 0x07) == 0x04)
+ else if ((x & 0x07) == 0x04) // the video RAM is read at every 8 pixels starting with pixel 4
{
- offs_t offs = ((offs_t)y << 5) | (x >> 3);
+ offs_t const offs = ((offs_t)y << 5) | (x >> 3);
video_data = m_main_ram[offs];
}
}
@@ -365,40 +351,37 @@ WRITE_LINE_MEMBER(mw8080bw_state::screen_vblank_phantom2)
*************************************/
-/* the flip screen circuit is just a couple of relays on the monitor PCB */
+// the flip screen circuit is just a couple of relays on the monitor PCB
uint32_t mw8080bw_state::screen_update_invaders(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
uint8_t x = 0;
uint8_t y = MW8080BW_VCOUNTER_START_NO_VBLANK;
uint8_t video_data = 0;
- uint8_t flip = m_flip_screen;
while (1)
{
- /* plot the current pixel */
+ // plot the current pixel
pen_t pen = (video_data & 0x01) ? rgb_t::white() : rgb_t::black();
- if (flip)
+ if (m_flip_screen)
bitmap.pix32(MW8080BW_VBSTART - 1 - (y - MW8080BW_VCOUNTER_START_NO_VBLANK), MW8080BW_HPIXCOUNT - 1 - x) = pen;
else
bitmap.pix32(y - MW8080BW_VCOUNTER_START_NO_VBLANK, x) = pen;
- /* next pixel */
+ // next pixel
video_data = video_data >> 1;
x = x + 1;
- /* end of line? */
+ // end of line?
if (x == 0)
{
- /* yes, flush out the shift register */
- int i;
-
- for (i = 0; i < 4; i++)
+ // yes, flush out the shift register
+ for (int i = 0; i < 4; i++)
{
pen = (video_data & 0x01) ? rgb_t::white() : rgb_t::black();
- if (flip)
+ if (m_flip_screen)
bitmap.pix32(MW8080BW_VBSTART - 1 - (y - MW8080BW_VCOUNTER_START_NO_VBLANK), MW8080BW_HPIXCOUNT - 1 - (256 + i)) = pen;
else
bitmap.pix32(y - MW8080BW_VCOUNTER_START_NO_VBLANK, 256 + i) = pen;
@@ -406,18 +389,16 @@ uint32_t mw8080bw_state::screen_update_invaders(screen_device &screen, bitmap_rg
video_data = video_data >> 1;
}
- /* next row, video_data is now 0, so the next line will start
- with 4 blank pixels */
+ // next row, video_data is now 0, so the next line will start with 4 blank pixels
y = y + 1;
- /* end of screen? */
+ // end of screen?
if (y == 0)
break;
}
- /* the video RAM is read at every 8 pixels starting with pixel 4 */
- else if ((x & 0x07) == 0x04)
+ else if ((x & 0x07) == 0x04) // the video RAM is read at every 8 pixels starting with pixel 4
{
- offs_t offs = ((offs_t)y << 5) | (x >> 3);
+ offs_t const offs = (offs_t(y) << 5) | (x >> 3);
video_data = m_main_ram[offs];
}
}
diff --git a/src/mame/video/pc8401a.cpp b/src/mame/video/pc8401a.cpp
index 832b5c7cb1b..c851f937bc8 100644
--- a/src/mame/video/pc8401a.cpp
+++ b/src/mame/video/pc8401a.cpp
@@ -72,7 +72,7 @@ void pc8401a_state::pc8401a_video(machine_config &config)
m_screen_lcd->set_visarea(0, 480-1, 0, 128-1);
m_screen_lcd->set_palette("palette");
- SED1330(config, m_lcdc, 0);
+ SED1330(config, m_lcdc, 7.987_MHz_XTAL);
m_lcdc->set_screen(m_screen_lcd);
m_lcdc->set_addrmap(0, &pc8401a_state::pc8401a_lcdc);
}
@@ -91,7 +91,7 @@ void pc8500_state::pc8500_video(machine_config &config)
m_screen_lcd->set_visarea(0, 480-1, 0, 200-1);
m_screen_lcd->set_palette("palette");
- SED1330(config, m_lcdc, 0);
+ SED1330(config, m_lcdc, 8000000);
m_lcdc->set_screen(SCREEN_TAG);
m_lcdc->set_addrmap(0, &pc8500_state::pc8500_lcdc);
diff --git a/src/mame/video/qix.cpp b/src/mame/video/qix.cpp
index 8326e52278c..07d2af06ede 100644
--- a/src/mame/video/qix.cpp
+++ b/src/mame/video/qix.cpp
@@ -349,7 +349,7 @@ void zookeep_state::video_map(address_map &map)
map(0x9800, 0x9800).mirror(0x03ff).readonly().share("scanline_latch");
map(0x9c00, 0x9c00).mirror(0x03fe).w(m_crtc, FUNC(mc6845_device::address_w));
map(0x9c01, 0x9c01).mirror(0x03fe).rw(m_crtc, FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
- map(0xa000, 0xbfff).bankr("bank1");
+ map(0xa000, 0xbfff).bankr(m_vidbank);
map(0xc000, 0xffff).rom();
}
diff --git a/src/mame/video/segas16b.cpp b/src/mame/video/segas16b.cpp
index 7257076c005..fb96477975d 100644
--- a/src/mame/video/segas16b.cpp
+++ b/src/mame/video/segas16b.cpp
@@ -47,9 +47,8 @@ uint32_t segas16b_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
m_segaic16vid->tilemap_draw( screen, bitmap, cliprect, 0, segaic16_video_device::TILEMAP_BACKGROUND, 1 | TILEMAP_DRAW_OPAQUE, 0x00);
// draw background again, just to set the priorities on non-transparent pixels
- bitmap_ind16 dummy_bitmap;
- m_segaic16vid->tilemap_draw( screen, dummy_bitmap, cliprect, 0, segaic16_video_device::TILEMAP_BACKGROUND, 0, 0x01);
- m_segaic16vid->tilemap_draw( screen, dummy_bitmap, cliprect, 0, segaic16_video_device::TILEMAP_BACKGROUND, 1, 0x02);
+ m_segaic16vid->tilemap_draw( screen, bitmap, cliprect, 0, segaic16_video_device::TILEMAP_BACKGROUND, 0, 0x01);
+ m_segaic16vid->tilemap_draw( screen, bitmap, cliprect, 0, segaic16_video_device::TILEMAP_BACKGROUND, 1, 0x02);
// draw foreground
m_segaic16vid->tilemap_draw( screen, bitmap, cliprect, 0, segaic16_video_device::TILEMAP_FOREGROUND, 0, 0x02);
diff --git a/src/mame/video/segas32.cpp b/src/mame/video/segas32.cpp
index 9df59a5677f..9d62e0a6627 100644
--- a/src/mame/video/segas32.cpp
+++ b/src/mame/video/segas32.cpp
@@ -200,25 +200,20 @@
*
*************************************/
-void segas32_state::common_start(int multi32)
+void segas32_state::device_start()
{
- if(!m_gfxdecode->started())
+ if (!m_gfxdecode->started())
throw device_missing_dependencies();
m_vblank_end_int_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(segas32_state::end_of_vblank_int), this));
m_update_sprites_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(segas32_state::update_sprites), this));
- int tmap;
-
- /* remember whether or not we are multi32 */
- m_is_multi32 = multi32;
-
/* allocate a copy of spriteram in 32-bit format */
m_spriteram_32bit = std::make_unique<uint32_t[]>(0x20000/4);
/* allocate the tilemap cache */
m_cache_head = nullptr;
- for (tmap = 0; tmap < TILEMAP_CACHE_SIZE; tmap++)
+ for (int tmap = 0; tmap < TILEMAP_CACHE_SIZE; tmap++)
{
struct cache_entry *entry = auto_alloc(machine(), struct cache_entry);
@@ -231,12 +226,11 @@ void segas32_state::common_start(int multi32)
m_cache_head = entry;
}
-
/* allocate the bitmaps (a few extra for multi32) */
- for (tmap = 0; tmap < 9 + 2 * multi32; tmap++)
+ for (int bmap = 0; bmap < 9 + (m_is_multi32 ? 2 : 0); bmap++)
{
- m_layer_data[tmap].bitmap = auto_alloc(machine(), bitmap_ind16(416, 224));
- m_layer_data[tmap].transparent = auto_alloc_array_clear(machine(), uint8_t, 256);
+ m_layer_data[bmap].bitmap = auto_alloc(machine(), bitmap_ind16(416, 224));
+ m_layer_data[bmap].transparent = auto_alloc_array_clear(machine(), uint8_t, 256);
}
/* allocate pre-rendered solid lines of 0's and ffff's */
@@ -249,6 +243,10 @@ void segas32_state::common_start(int multi32)
m_videoram[0x1ff00/2] = 0x8000;
memset(m_mixer_control, 0xff, sizeof(m_mixer_control[0][0]) * 0x80 );
+
+ /* needs to be initialized to 0xff, otherwise f1en has bad sound (MT04531) */
+ if (m_soundram)
+ std::fill_n(&m_soundram[0], m_soundram.bytes() / sizeof(m_soundram[0]), 0xff);
}
diff --git a/src/mame/video/sgi_ge5.cpp b/src/mame/video/sgi_ge5.cpp
index 165a678ff1e..370913560bf 100644
--- a/src/mame/video/sgi_ge5.cpp
+++ b/src/mame/video/sgi_ge5.cpp
@@ -16,7 +16,6 @@
* TODO:
* - implement host dma
* - verify some operations
- * - tidy up latch/timing logic
* - implement single stepping
* - redo disassembly
* - save state
@@ -29,6 +28,7 @@
#define LOG_GENERAL (1U << 0)
#define LOG_TOKEN (1U << 1)
#define LOG_MEMORY (1U << 2)
+#define LOG_DMA (1U << 3)
//#define VERBOSE (LOG_GENERAL)
#include "logmacro.h"
@@ -343,7 +343,9 @@ void sgi_ge5_device::execute_run()
if (token < ARRAY_LENGTH(token_puc))
string = token_puc[token];
}
- else if (space(1).read_dword(0x50d) == 0x004d0005 || space(1).read_dword(0x536) == 0x12345678)
+ else if (space(1).read_dword(0x50d) == 0x004d0005
+ || space(1).read_dword(0x536) == 0x12345678
+ || space(1).read_dword(0x540) == 0x12345678)
{
if (token < ARRAY_LENGTH(token_gl))
string = token_gl[token];
@@ -398,6 +400,8 @@ void sgi_ge5_device::execute_run()
case 0xf: // dma cycle
if (--m_dma_count)
m_pc -= m_decode.secondary ? 2 : 1;
+ else
+ LOGMASKED(LOG_DMA, "dma complete\n");
break;
}
break;
@@ -546,6 +550,7 @@ void sgi_ge5_device::secondary()
switch (m_decode.immediate)
{
case 0: // TODO: assert dma ready
+ LOGMASKED(LOG_DMA, "dma ready\n");
break;
default: // assert interrupt
@@ -559,10 +564,12 @@ void sgi_ge5_device::secondary()
switch (m_decode.immediate)
{
case 0: // TODO: reset dma?
+ LOGMASKED(LOG_DMA, "dma reset\n");
break;
default: // load dma count
m_dma_count = m_bus;
+ LOGMASKED(LOG_DMA, "dma count %d\n", m_dma_count);
break;
}
break;
@@ -594,22 +601,26 @@ void sgi_ge5_device::command_w(offs_t offset, u16 data, u16 mem_mask)
break;
}
}
+template u32 sgi_ge5_device::code_r<false>(offs_t offset);
+template u32 sgi_ge5_device::code_r<true>(offs_t offset);
+template void sgi_ge5_device::code_w<false>(offs_t offset, u32 data, u32 mem_mask);
+template void sgi_ge5_device::code_w<true>(offs_t offset, u32 data, u32 mem_mask);
-u32 sgi_ge5_device::code_r(offs_t offset)
+template <bool High> u32 sgi_ge5_device::code_r(offs_t offset)
{
m_pc = offset | offs_t(m_mar & 0x7f) << 8;
u64 const data = space(0).read_qword(m_pc);
- return m_mar_msb ? u32(data >> 32) : u32(data);
+ return High ? u32(data >> 32) : u32(data);
}
-void sgi_ge5_device::code_w(offs_t offset, u32 data, u32 mem_mask)
+template <bool High> void sgi_ge5_device::code_w(offs_t offset, u32 data, u32 mem_mask)
{
m_pc = offset | offs_t(m_mar & 0x7f) << 8;
- LOGMASKED(LOG_MEMORY, "code_w msb %d offset 0x%08x data 0x%08x mask 0x%08x (%s)\n", m_mar_msb, m_pc, data, mem_mask, machine().describe_context());
+ LOGMASKED(LOG_MEMORY, "code_w msb %d offset 0x%08x data 0x%08x mask 0x%08x (%s)\n", High, m_pc, data, mem_mask, machine().describe_context());
- if (m_mar_msb)
+ if (High)
{
u64 const mask = u64(mem_mask & 0x000000ffU) << 32;
@@ -628,16 +639,14 @@ void sgi_ge5_device::code_w(offs_t offset, u32 data, u32 mem_mask)
u32 sgi_ge5_device::data_r(offs_t offset)
{
- // FIXME: 5 or 6 bits from MAR?
- m_memptr = offset | offs_t(m_mar & 0x1f) << 8;
+ m_memptr = offset | offs_t(m_mar & 0x3f) << 8;
return space(1).read_dword(m_memptr);
}
void sgi_ge5_device::data_w(offs_t offset, u32 data, u32 mem_mask)
{
- // FIXME: 5 or 6 bits from MAR?
- m_memptr = offset | offs_t(m_mar & 0x1f) << 8;
+ m_memptr = offset | offs_t(m_mar & 0x3f) << 8;
space(1).write_dword(m_memptr, data, mem_mask);
}
diff --git a/src/mame/video/sgi_ge5.h b/src/mame/video/sgi_ge5.h
index a45910be6f0..0596da7ba0d 100644
--- a/src/mame/video/sgi_ge5.h
+++ b/src/mame/video/sgi_ge5.h
@@ -42,15 +42,16 @@ public:
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override {}
- u32 code_r(offs_t offset);
+ u32 buffer_r(offs_t offset) { return m_bus; }
+
+ template <bool High> u32 code_r(offs_t offset);
u32 data_r(offs_t offset);
- void code_w(offs_t offset, u32 data, u32 mem_mask);
+ template <bool High> void code_w(offs_t offset, u32 data, u32 mem_mask);
void data_w(offs_t offset, u32 data, u32 mem_mask);
void command_w(offs_t offset, u16 data, u16 mem_mask);
u16 pc_r() { return m_pc; }
void mar_w(offs_t offset, u32 data, u32 mem_mask) { m_mar = offset & 0x7f; }
- void mar_msb_w(offs_t offset, u32 data, u32 mem_mask) { m_mar_msb = bool(offset); }
void cwen_w(int state) { m_cwen = bool(state); }
u32 finish_r(offs_t offset) { return m_finish[offset]; }
@@ -105,7 +106,6 @@ private:
bool m_re_drq;
// hq1 registers
- bool m_mar_msb;
u8 m_mar;
u16 m_pc;
unsigned m_sp;
diff --git a/src/mame/video/sgi_gr1.cpp b/src/mame/video/sgi_gr1.cpp
index 264c52d18a6..62ddad2b4a1 100644
--- a/src/mame/video/sgi_gr1.cpp
+++ b/src/mame/video/sgi_gr1.cpp
@@ -70,68 +70,74 @@ DEFINE_DEVICE_TYPE(SGI_GR1, sgi_gr1_device, "sgi_gr1", "SGI GR1 Graphics")
sgi_gr1_device::sgi_gr1_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock)
: device_t(mconfig, SGI_GR1, tag, owner, clock)
+ , m_bank(*this, "bank")
, m_screen(*this, "screen")
, m_ge(*this, "ge5")
, m_re(*this, "re2")
, m_xmap(*this, "xmap%u", 0U)
, m_cursor(*this, "cursor%u", 0U)
, m_ramdac(*this, "ramdac%u", 0U)
- , m_vblank_cb(*this)
, m_int_fifo_cb(*this)
{
}
static INPUT_PORTS_START(sgi_gr1)
PORT_START("options")
- PORT_DIPNAME(0x08, 0x08, "Turbo")
- PORT_DIPSETTING(0x00, DEF_STR(Yes))
- PORT_DIPSETTING(0x08, DEF_STR(No))
- PORT_DIPNAME(0x10, 0x00, "Z Buffer")
- PORT_DIPSETTING(0x00, DEF_STR(Yes))
- PORT_DIPSETTING(0x10, DEF_STR(No))
+ PORT_CONFNAME(0x08, 0x08, "Turbo")
+ PORT_CONFSETTING(0x00, DEF_STR(Yes))
+ PORT_CONFSETTING(0x08, DEF_STR(No))
+ PORT_CONFNAME(0x10, 0x00, "Z Buffer")
+ PORT_CONFSETTING(0x00, DEF_STR(Yes))
+ PORT_CONFSETTING(0x10, DEF_STR(No))
INPUT_PORTS_END
void sgi_gr1_device::map(address_map &map)
{
- // TODO: bank based on mar_msb
-
- map(0x0000, 0x03ff).rw(m_ge, FUNC(sgi_ge5_device::code_r), FUNC(sgi_ge5_device::code_w));
+ map(0x0000, 0x7fff).m(m_bank, FUNC(address_map_bank_device::amap32));
+}
- map(0x0400, 0x041f).rw(m_xmap[0], FUNC(sgi_xmap2_device::reg_r), FUNC(sgi_xmap2_device::reg_w)).umask32(0x000000ff);
- map(0x0420, 0x043f).rw(m_xmap[1], FUNC(sgi_xmap2_device::reg_r), FUNC(sgi_xmap2_device::reg_w)).umask32(0x000000ff);
- map(0x0440, 0x045f).rw(m_xmap[2], FUNC(sgi_xmap2_device::reg_r), FUNC(sgi_xmap2_device::reg_w)).umask32(0x000000ff);
- map(0x0460, 0x047f).rw(m_xmap[3], FUNC(sgi_xmap2_device::reg_r), FUNC(sgi_xmap2_device::reg_w)).umask32(0x000000ff);
- map(0x0480, 0x049f).rw(m_xmap[4], FUNC(sgi_xmap2_device::reg_r), FUNC(sgi_xmap2_device::reg_w)).umask32(0x000000ff);
- map(0x04a0, 0x04bf).lw8("xmap_broadcast",
+void sgi_gr1_device::map_bank(address_map &map)
+{
+ // bit 15 of the map offset represents mar_msb
+ map(0x0000, 0x03ff).rw(m_ge, FUNC(sgi_ge5_device::code_r<false>), FUNC(sgi_ge5_device::code_w<false>));
+ map(0x8000, 0x83ff).rw(m_ge, FUNC(sgi_ge5_device::code_r<true>), FUNC(sgi_ge5_device::code_w<true>));
+
+ map(0x8400, 0x841f).rw(m_xmap[0], FUNC(sgi_xmap2_device::reg_r), FUNC(sgi_xmap2_device::reg_w)).umask32(0x000000ff);
+ map(0x8420, 0x843f).rw(m_xmap[1], FUNC(sgi_xmap2_device::reg_r), FUNC(sgi_xmap2_device::reg_w)).umask32(0x000000ff);
+ map(0x8440, 0x845f).rw(m_xmap[2], FUNC(sgi_xmap2_device::reg_r), FUNC(sgi_xmap2_device::reg_w)).umask32(0x000000ff);
+ map(0x8460, 0x847f).rw(m_xmap[3], FUNC(sgi_xmap2_device::reg_r), FUNC(sgi_xmap2_device::reg_w)).umask32(0x000000ff);
+ map(0x8480, 0x849f).rw(m_xmap[4], FUNC(sgi_xmap2_device::reg_r), FUNC(sgi_xmap2_device::reg_w)).umask32(0x000000ff);
+ map(0x84a0, 0x84bf).lw8("xmap_broadcast",
[this](offs_t offset, u8 data)
{
for (sgi_xmap2_device *xmap : m_xmap)
xmap->reg_w(offset, data);
}).umask32(0x000000ff);
- map(0x04c0, 0x04c3).rw(FUNC(sgi_gr1_device::dr1_r), FUNC(sgi_gr1_device::dr1_w)).umask32(0xff000000);
- map(0x04e0, 0x04e3).rw(FUNC(sgi_gr1_device::dr0_r), FUNC(sgi_gr1_device::dr0_w)).umask32(0xff000000);
+ map(0x84c0, 0x84c3).rw(FUNC(sgi_gr1_device::dr1_r), FUNC(sgi_gr1_device::dr1_w)).umask32(0xff000000);
+ map(0x84e0, 0x84e3).rw(FUNC(sgi_gr1_device::dr0_r), FUNC(sgi_gr1_device::dr0_w)).umask32(0xff000000);
- map(0x0500, 0x050f).m(m_ramdac[0], FUNC(bt457_device::map)).umask32(0x000000ff);
- map(0x0520, 0x052f).m(m_ramdac[1], FUNC(bt457_device::map)).umask32(0x000000ff);
- map(0x0540, 0x054f).m(m_ramdac[2], FUNC(bt457_device::map)).umask32(0x000000ff);
+ map(0x8500, 0x850f).m(m_ramdac[0], FUNC(bt457_device::map)).umask32(0x000000ff);
+ map(0x8520, 0x852f).m(m_ramdac[1], FUNC(bt457_device::map)).umask32(0x000000ff);
+ map(0x8540, 0x854f).m(m_ramdac[2], FUNC(bt457_device::map)).umask32(0x000000ff);
- map(0x0560, 0x056f).m(m_cursor[0], FUNC(bt431_device::map)).umask32(0x000000ff);
- map(0x0580, 0x058f).m(m_cursor[1], FUNC(bt431_device::map)).umask32(0x000000ff);
+ map(0x8560, 0x856f).m(m_cursor[0], FUNC(bt431_device::map)).umask32(0x000000ff);
+ map(0x8580, 0x858f).m(m_cursor[1], FUNC(bt431_device::map)).umask32(0x000000ff);
- map(0x05a0, 0x05a3).rw(FUNC(sgi_gr1_device::dr4_r), FUNC(sgi_gr1_device::dr4_w)).umask32(0xff000000);
- map(0x05c0, 0x05c3).rw(FUNC(sgi_gr1_device::dr3_r), FUNC(sgi_gr1_device::dr3_w)).umask32(0xff000000);
- map(0x05e0, 0x05e3).rw(FUNC(sgi_gr1_device::dr2_r), FUNC(sgi_gr1_device::dr2_w)).umask32(0xff000000);
+ map(0x85a0, 0x85a3).rw(FUNC(sgi_gr1_device::dr4_r), FUNC(sgi_gr1_device::dr4_w)).umask32(0xff000000);
+ map(0x85c0, 0x85c3).rw(FUNC(sgi_gr1_device::dr3_r), FUNC(sgi_gr1_device::dr3_w)).umask32(0xff000000);
+ map(0x85e0, 0x85e3).rw(FUNC(sgi_gr1_device::dr2_r), FUNC(sgi_gr1_device::dr2_w)).umask32(0xff000000);
- map(0x0640, 0x783).w(m_ge, FUNC(sgi_ge5_device::command_w)).umask32(0xffff0000);
- map(0x0740, 0x743).r(m_ge, FUNC(sgi_ge5_device::pc_r)).umask32(0xffff0000);
+ map(0x8640, 0x8783).w(m_ge, FUNC(sgi_ge5_device::command_w)).umask32(0xffff0000);
+ map(0x8740, 0x8743).r(m_ge, FUNC(sgi_ge5_device::pc_r)).umask32(0xffff0000);
- map(0x0800, 0x0bff).rw(FUNC(sgi_gr1_device::fifo_r), FUNC(sgi_gr1_device::fifo_w));
- map(0x0c00, 0x0dff).w(m_ge, FUNC(sgi_ge5_device::mar_w));
- map(0x0e00, 0x0e07).w(m_ge, FUNC(sgi_ge5_device::mar_msb_w));
+ map(0x0800, 0x0bff).r(m_ge, FUNC(sgi_ge5_device::buffer_r)).mirror(0x8000);
+ map(0x0800, 0x0bff).w(FUNC(sgi_gr1_device::fifo_w)).mirror(0x8000);
+ map(0x0c00, 0x0dff).w(m_ge, FUNC(sgi_ge5_device::mar_w)).mirror(0x8000);
+ map(0x0e00, 0x0e07).lw32("mar_msb", [this](offs_t offset, u32 data) { m_bank->set_bank(offset); }).mirror(0x8000);
map(0x1400, 0x17ff).rw(m_ge, FUNC(sgi_ge5_device::data_r), FUNC(sgi_ge5_device::data_w));
- map(0x2000, 0x2007).rw(m_ge, FUNC(sgi_ge5_device::finish_r), FUNC(sgi_ge5_device::finish_w));
+ map(0x2000, 0x2007).rw(m_ge, FUNC(sgi_ge5_device::finish_r), FUNC(sgi_ge5_device::finish_w)).mirror(0x8000);
//map(0x207c, 0x207f); // gr1 vs gr2
}
@@ -140,7 +146,7 @@ void sgi_gr1_device::device_add_mconfig(machine_config &config)
{
unsigned pixel_clock = 107'352'000;
- //ADDRESS_MAP_BANK(config, m_ext).set_map(&lle_device_base::ext_map).set_options(ENDIANNESS_NATIVE, 8, 12, 0x100);
+ ADDRESS_MAP_BANK(config, m_bank).set_map(&sgi_gr1_device::map_bank).set_options(ENDIANNESS_NATIVE, 32, 32, 0x8000);
/*
* 1280x1024 @ 60Hz
@@ -160,11 +166,10 @@ void sgi_gr1_device::device_add_mconfig(machine_config &config)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_raw(pixel_clock, 1680, 246, 246 + 1280, 1065, 39, 39 + 1024);
m_screen->set_screen_update(m_re.finder_tag(), FUNC(sgi_re2_device::screen_update));
- m_screen->screen_vblank().set([this](int state) { m_vblank_cb(state); });
SGI_GE5(config, m_ge, 10_MHz_XTAL);
m_ge->fifo_empty().set([this]() { return int(m_fifo.empty()); });
- m_ge->fifo_read().set(FUNC(sgi_gr1_device::ge_fifo_r));
+ m_ge->fifo_read().set(FUNC(sgi_gr1_device::fifo_r));
m_ge->re_r().set(m_re, FUNC(sgi_re2_device::reg_r));
m_ge->re_w().set(m_re, FUNC(sgi_re2_device::reg_w));
@@ -194,7 +199,6 @@ ioport_constructor sgi_gr1_device::device_input_ports() const
void sgi_gr1_device::device_start()
{
- m_vblank_cb.resolve_safe();
m_int_fifo_cb.resolve_safe();
//save_item(NAME());
@@ -204,6 +208,8 @@ void sgi_gr1_device::device_start()
void sgi_gr1_device::device_reset()
{
+ m_bank->set_bank(0);
+
m_dr0 = DR0_GRF1EN | DR0_SMALLMON0;
m_dr1 = DR1_TURBO;
//m_dr2 = 0;
@@ -213,9 +219,74 @@ void sgi_gr1_device::device_reset()
m_fifo.clear();
}
+u8 sgi_gr1_device::dr0_r()
+{
+ LOG("dr0_r 0x%02x (%s)\n", m_dr0, machine().describe_context());
+
+ return m_dr0;
+}
+
+u8 sgi_gr1_device::dr1_r()
+{
+ LOG("dr1_r 0x%02x (%s)\n", m_dr1, machine().describe_context());
+
+ return m_dr1;
+}
+
+u8 sgi_gr1_device::dr2_r()
+{
+ LOG("dr2_r 0x%02x (%s)\n", m_dr2, machine().describe_context());
+
+ return m_dr2;
+}
+
+u8 sgi_gr1_device::dr3_r()
+{
+ LOG("dr3_r 0x%02x (%s)\n", m_dr3, machine().describe_context());
+
+ return m_dr3;
+}
+
+u8 sgi_gr1_device::dr4_r()
+{
+ LOG("dr4_r 0x%02x (%s)\n", m_dr4, machine().describe_context());
+
+ return (m_dr4 | (m_ge->suspended() ? 0 : DR4_GESTALL)) & DR4_RM;
+}
+
+void sgi_gr1_device::dr0_w(u8 data)
+{
+ LOG("dr0_w 0x%02x (%s)\n", data, machine().describe_context());
+
+ m_dr0 = (m_dr0 & ~DR0_WM) | (data & DR0_WM);
+}
+
+void sgi_gr1_device::dr1_w(u8 data)
+{
+ LOG("dr1_w 0x%02x (%s)\n", data, machine().describe_context());
+
+ m_dr1 = (m_dr1 & ~DR1_WM) | (data & DR1_WM);
+
+ m_ge->cwen_w(BIT(data, 1));
+}
+
+void sgi_gr1_device::dr2_w(u8 data)
+{
+ LOG("dr2_w 0x%02x (%s)\n", data, machine().describe_context());
+
+ m_dr2 = (m_dr2 & ~DR2_WM) | (data & DR2_WM);
+}
+
+void sgi_gr1_device::dr3_w(u8 data)
+{
+ LOG("dr3_w 0x%02x (%s)\n", data, machine().describe_context());
+
+ m_dr3 = (m_dr3 & ~DR3_WM) | (data & DR3_WM);
+}
+
void sgi_gr1_device::dr4_w(u8 data)
{
- LOG("dr4_w 0x%02x\n", data);
+ LOG("dr4_w 0x%02x (%s)\n", data, machine().describe_context());
m_dr4 = (m_dr4 & ~DR4_WM) | (data & DR4_WM);
@@ -223,7 +294,7 @@ void sgi_gr1_device::dr4_w(u8 data)
xmap->map_select_w(m_dr4 & DR4_MS);
}
-u64 sgi_gr1_device::ge_fifo_r()
+u64 sgi_gr1_device::fifo_r()
{
u64 data = m_fifo.dequeue();
@@ -241,7 +312,7 @@ u64 sgi_gr1_device::ge_fifo_r()
void sgi_gr1_device::fifo_w(offs_t offset, u32 data, u32 mem_mask)
{
- LOG("fifo_w 0x%010x\n", (u64(offset) << 32) | data);
+ LOG("fifo_w 0x%010x (%s)\n", (u64(offset) << 32) | data, machine().describe_context());
m_fifo.enqueue((u64(offset) << 32) | data);
diff --git a/src/mame/video/sgi_gr1.h b/src/mame/video/sgi_gr1.h
index 51a9304417f..a2aa6030e58 100644
--- a/src/mame/video/sgi_gr1.h
+++ b/src/mame/video/sgi_gr1.h
@@ -22,37 +22,43 @@ public:
static constexpr feature_type imperfect_features() { return feature::GRAPHICS; }
// configuration
- auto out_vblank() { return m_vblank_cb.bind(); }
- auto out_int_ge() { return subdevice<sgi_ge5_device>("ge5")->out_int(); }
+ auto out_vblank() { return subdevice<screen_device>("screen")->screen_vblank(); }
+ auto out_int() { return subdevice<sgi_ge5_device>("ge5")->out_int(); }
auto out_int_fifo() { return m_int_fifo_cb.bind(); }
+ u32 dma_r() { return subdevice<sgi_ge5_device>("ge5")->buffer_r(0); }
+ void dma_w(u32 data) { fifo_w(0, data, 0xffffffffU); }
+
void reset_w(int state);
- virtual void map(address_map &map);
+ void map(address_map &map);
protected:
+ void map_bank(address_map& map);
+
// device_t overrides
virtual ioport_constructor device_input_ports() const override;
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
virtual void device_reset() override;
- u8 dr0_r() { return m_dr0; }
- u8 dr1_r() { return m_dr1; }
- u8 dr2_r() { return m_dr2; }
- u8 dr3_r() { return m_dr3; }
- u8 dr4_r() { return (m_dr4 | (m_ge->suspended() ? 0 : DR4_GESTALL)) & DR4_RM; }
- void dr0_w(u8 data) { m_dr0 = (m_dr0 & ~DR0_WM) | (data & DR0_WM); }
- void dr1_w(u8 data) { m_dr1 = (m_dr1 & ~DR1_WM) | (data & DR1_WM); m_ge->cwen_w(BIT(data, 1)); }
- void dr2_w(u8 data) { m_dr2 = (m_dr2 & ~DR2_WM) | (data & DR2_WM); }
- void dr3_w(u8 data) { m_dr3 = (m_dr3 & ~DR3_WM) | (data & DR3_WM); }
+ // display registers
+ u8 dr0_r();
+ u8 dr1_r();
+ u8 dr2_r();
+ u8 dr3_r();
+ u8 dr4_r();
+ void dr0_w(u8 data);
+ void dr1_w(u8 data);
+ void dr2_w(u8 data);
+ void dr3_w(u8 data);
void dr4_w(u8 data);
- u64 ge_fifo_r();
- u32 fifo_r() { return u32(ge_fifo_r()); }
+ u64 fifo_r();
void fifo_w(offs_t offset, u32 data, u32 mem_mask);
private:
+ required_device<address_map_bank_device> m_bank;
required_device<screen_device> m_screen;
required_device<sgi_ge5_device> m_ge;
required_device<sgi_re2_device> m_re;
@@ -60,7 +66,6 @@ private:
required_device_array<bt431_device, 2> m_cursor;
required_device_array<bt457_device, 3> m_ramdac;
- devcb_write_line m_vblank_cb;
devcb_write_line m_int_fifo_cb;
enum dr0_mask : u8
diff --git a/src/mame/video/sgi_re2.cpp b/src/mame/video/sgi_re2.cpp
index 348f12c2bda..2dd2e810e6b 100644
--- a/src/mame/video/sgi_re2.cpp
+++ b/src/mame/video/sgi_re2.cpp
@@ -93,6 +93,9 @@ void sgi_re2_device::device_reset()
set_rdy(true);
set_drq(false);
+ for (u32 &reg : m_reg)
+ reg = 0;
+
// reset register values indicate presence of RE2
m_reg[REG_DZF] = 0;
m_reg[REG_DZF] = ~u32(0);
@@ -139,11 +142,11 @@ void sgi_re2_device::reg_w(offs_t offset, u32 data)
{
if (regmask[offset])
{
- if (offset != REG_RWDATA)
- LOGMASKED(LOG_REG, "reg_w register 0x%02x (%s) data 0x%x\n", offset, regname[offset], data);
-
m_reg[offset] = data & regmask[offset];
+ if (offset != REG_RWDATA)
+ LOGMASKED(LOG_REG, "reg_w register 0x%02x (%s) data 0x%x\n", offset, regname[offset], m_reg[offset]);
+
// special case register handling
switch (offset)
{
@@ -272,12 +275,12 @@ void sgi_re2_device::execute()
break;
case IR_READBUF:
- LOG("ri read buffer\n");
+ LOG("ri read buffer rwmode %d\n", m_reg[REG_RWMODE]);
read_buffer();
break;
case IR_WRITEBUF:
- LOG("write buffer\n");
+ LOG("write buffer rwmode %d\n", m_reg[REG_RWMODE]);
write_buffer();
break;
}
diff --git a/src/mame/video/sgi_xmap2.cpp b/src/mame/video/sgi_xmap2.cpp
index 82375db26d1..789387bc743 100644
--- a/src/mame/video/sgi_xmap2.cpp
+++ b/src/mame/video/sgi_xmap2.cpp
@@ -84,6 +84,8 @@ u8 sgi_xmap2_device::reg_r(offs_t offset)
return m_wid_aux;
else if (m_addr == 0x21)
return m_options;
+ else
+ logerror("read unknown address 0x%04x\n", m_addr);
break;
case 6: // address msb
@@ -164,6 +166,8 @@ void sgi_xmap2_device::reg_w(offs_t offset, u8 data)
}
else if (m_addr == 0x20)
m_wid_aux = BIT(data, 0);
+ else
+ logerror("write unknown address 0x%04x\n", m_addr);
break;
case 6: // address msb
diff --git a/src/mame/video/tmap038.cpp b/src/mame/video/tmap038.cpp
new file mode 100644
index 00000000000..ef66c49c868
--- /dev/null
+++ b/src/mame/video/tmap038.cpp
@@ -0,0 +1,266 @@
+// license:BSD-3-Clause
+// copyright-holders:Luca Elia, Paul Priest, David Haywood
+/* 038 Tilemap generator manufactured by NEC */
+
+/*
+ [ Scrolling Layers ]
+
+ Each 038 chip generates 1 layer. Up to 4 chips are used
+ (4 layers)
+
+ Layer Size: 512 x 512
+ Tiles: 8 x 8 & 16 x 16.
+
+ There are 2 tilemaps in memory, one per tiles dimension.
+ A bit decides which one gets displayed.
+ The tiles depth varies with games, from 16 to 256 colors.
+
+ A per layer row-scroll / row-select effect can be enabled:
+
+ a different scroll value is fetched (from tile RAM) for each
+ scan line, and a different tilemap line for each scan line
+
+
+
+***************************************************************************
+
+ Callbacks for the TileMap code
+
+ [ Tiles Format ]
+
+ Offset: Bits: Value:
+
+ 0.w fe-- ---- ---- --- Priority
+ --dc ba98 ---- ---- Color
+ ---- ---- 7654 3210
+
+ 2.w Code
+
+
+ When a row-scroll / row-select effect is enabled, the scroll values are
+ fetched starting from tile RAM + $1000, 4 bytes per scan line:
+
+ Offset: Value:
+
+ 0.w Tilemap line to display
+ 2.w X Scroll value
+
+***************************************************************************
+
+***************************************************************************
+
+ Layers Registers
+
+
+ Offset: Bits: Value:
+
+ 0.w f--- ---- ---- ---- 0 = Layer Flip X
+ -e-- ---- ---- ---- Activate Row-scroll
+ --d- ---- ---- ----
+ ---c ba9- ---- ----
+ ---- ---8 7654 3210 Scroll X
+
+ 2.w f--- ---- ---- ---- 0 = Layer Flip Y
+ -e-- ---- ---- ---- Activate Row-select
+ --d- ---- ---- ---- 0 = 8x8 tiles, 1 = 16x16 tiles
+ ---c ba9- ---- ----
+ ---- ---8 7654 3210 Scroll Y
+
+ 4.w fedc ba98 765- ----
+ ---- ---- ---4 ---- Layer Disable
+ ---- ---- ---- 3210 Varies*
+
+ *color bank for mcatadv or Layer-Layer priority for cave
+
+There are more!
+
+***************************************************************************
+
+TODO:
+ de-fragmentation and merge drawing behavior into tmap038.cpp
+
+***************************************************************************
+
+*/
+
+#include "emu.h"
+#include "tmap038.h"
+
+void tilemap038_device::vram_map(address_map &map)
+{
+ map(0x0000, 0x0fff).rw(FUNC(tilemap038_device::vram_16x16_r), FUNC(tilemap038_device::vram_16x16_w)).share("vram_16x16");
+ map(0x1000, 0x17ff).rw(FUNC(tilemap038_device::lineram_r), FUNC(tilemap038_device::lineram_w)).share("lineram");
+ map(0x1800, 0x3fff).ram().share("scratchpad"); // scratchpad?
+ map(0x4000, 0x7fff).rw(FUNC(tilemap038_device::vram_8x8_r), FUNC(tilemap038_device::vram_8x8_w)).share("vram_8x8");
+}
+
+void tilemap038_device::vram_writeonly_map(address_map &map)
+{
+ map(0x0000, 0x0fff).w(FUNC(tilemap038_device::vram_16x16_w)).share("vram_16x16");
+ map(0x1000, 0x17ff).w(FUNC(tilemap038_device::lineram_w)).share("lineram");
+ map(0x1800, 0x3fff).writeonly().share("scratchpad"); // scratchpad?
+ map(0x4000, 0x7fff).w(FUNC(tilemap038_device::vram_8x8_w)).share("vram_8x8");
+}
+
+void tilemap038_device::vram_16x16_map(address_map &map)
+{
+ map(0x0000, 0x0fff).rw(FUNC(tilemap038_device::vram_16x16_r), FUNC(tilemap038_device::vram_16x16_w)).share("vram_16x16");
+ map(0x1000, 0x17ff).rw(FUNC(tilemap038_device::lineram_r), FUNC(tilemap038_device::lineram_w)).share("lineram");
+ map(0x1800, 0x3fff).ram().share("scratchpad"); // scratchpad?
+}
+
+void tilemap038_device::vram_16x16_writeonly_map(address_map &map)
+{
+ map(0x0000, 0x0fff).w(FUNC(tilemap038_device::vram_16x16_w)).share("vram_16x16");
+ map(0x1000, 0x17ff).w(FUNC(tilemap038_device::lineram_w)).share("lineram");
+ map(0x1800, 0x3fff).writeonly().share("scratchpad"); // scratchpad?
+}
+
+/* Some games, that only ever use the 8x8 tiles and no line scroll,
+ use mirror ram. For example in donpachi, writes to 400000-403fff
+ and 408000-407fff both go to the 8x8 tilemap ram. Use this function
+ in this cases. Note that the get_tile_info function looks in the
+ 4000-7fff range for tiles, so we have to write the data there. */
+void tilemap038_device::vram_8x8_map(address_map &map)
+{
+ map(0x0000, 0x3fff).mirror(0x4000).rw(FUNC(tilemap038_device::vram_8x8_r), FUNC(tilemap038_device::vram_8x8_w)).share("vram_8x8");
+}
+
+DEFINE_DEVICE_TYPE(TMAP038, tilemap038_device, "tmap038", "038 Tilemap generator")
+
+tilemap038_device::tilemap038_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, TMAP038, tag, owner, clock)
+ , m_vram_8x8(*this, "vram_8x8")
+ , m_vram_16x16(*this, "vram_16x16")
+ , m_lineram(*this, "lineram")
+ , m_vregs(nullptr)
+ , m_tiledim(false)
+ , m_gfxdecode(*this, finder_base::DUMMY_TAG)
+ , m_gfxno(0)
+{
+}
+
+TILE_GET_INFO_MEMBER(tilemap038_device::get_tile_info)
+{
+ u32 tile, code, color, pri;
+
+ if (m_tiledim)
+ {
+ tile = (tile_index % (512 / 8)) / 2 + ((tile_index / (512 / 8)) / 2) * (512 / 16);
+ tile = (m_vram_16x16 != nullptr) ? ((m_vram_16x16[tile * 2] << 16) + m_vram_16x16[(tile * 2) + 1]) : 0;
+
+ color = (tile & 0x3f000000) >> (32 - 8);
+ pri = (tile & 0xc0000000) >> (32 - 2);
+ code = (tile & 0x0000ffff) * 4;
+
+ code ^= tile_index & 1;
+ code ^= ((tile_index / (512 / 8)) & 1) * 2;
+
+ if (!m_038_cb.isnull())
+ m_038_cb(true, color, pri, code);
+ }
+ else
+ {
+ tile = (m_vram_8x8 != nullptr) ? ((m_vram_8x8[tile_index * 2] << 16) + m_vram_8x8[(tile_index * 2) + 1]) : 0;
+
+ color = (tile & 0x3f000000) >> (32 - 8);
+ pri = (tile & 0xc0000000) >> (32 - 2);
+ code = (tile & 0x0003ffff);
+
+ if (!m_038_cb.isnull())
+ m_038_cb(false, color, pri, code);
+ }
+
+ SET_TILE_INFO_MEMBER(m_gfxno, code, color, 0);
+ tileinfo.category = pri;
+}
+
+
+void tilemap038_device::device_start()
+{
+ m_038_cb.bind_relative_to(*owner());
+ m_vregs = make_unique_clear<u16[]>(0x6/2);
+
+ if (m_vram_16x16 == nullptr && m_vram_8x8 == nullptr)
+ fatalerror("Tilemap 038 %s: VRAM not found",this->tag());
+
+ if (m_vram_8x8 == nullptr)
+ m_tiledim = true;
+ else if (m_vram_16x16 == nullptr)
+ m_tiledim = false;
+
+ m_tmap = &machine().tilemap().create(
+ *m_gfxdecode,
+ tilemap_get_info_delegate(FUNC(tilemap038_device::get_tile_info),this),
+ TILEMAP_SCAN_ROWS,
+ 8,8, 512 / 8,512 / 8);
+
+ m_tmap->set_transparent_pen(0);
+
+ set_scroll_rows(1); // Initialize scroll rows
+ set_scroll_cols(1); // Initialize scroll cols
+
+ save_item(NAME(m_tiledim));
+ save_pointer(NAME(m_vregs), 0x6/2);
+}
+
+void tilemap038_device::device_reset()
+{
+}
+
+u16 tilemap038_device::vram_8x8_r(offs_t offset)
+{
+ return m_vram_8x8[offset];
+}
+
+void tilemap038_device::vram_8x8_w(offs_t offset, u16 data, u16 mem_mask)
+{
+ COMBINE_DATA(&m_vram_8x8[offset]);
+ if (!m_tiledim)
+ m_tmap->mark_tile_dirty(offset/2);
+}
+
+u16 tilemap038_device::vram_16x16_r(offs_t offset)
+{
+ return m_vram_16x16[offset];
+}
+
+void tilemap038_device::vram_16x16_w(offs_t offset, u16 data, u16 mem_mask)
+{
+ COMBINE_DATA(&m_vram_16x16[offset]);
+ if (m_tiledim)
+ {
+ offset /= 2;
+ offset = (offset % (512 / 16)) * 2 + (offset / (512 / 16)) * (512 / 8) * 2;
+ m_tmap->mark_tile_dirty(offset + 0);
+ m_tmap->mark_tile_dirty(offset + 1);
+ m_tmap->mark_tile_dirty(offset + 0 + 512 / 8);
+ m_tmap->mark_tile_dirty(offset + 1 + 512 / 8);
+ }
+}
+
+void tilemap038_device::prepare()
+{
+ /* Enable layers */
+ m_tmap->enable(enable());
+
+ // refresh tile size
+ if (m_vram_8x8 != nullptr && m_vram_16x16 != nullptr)
+ {
+ const bool new_tiledim = BIT(m_vregs[1], 13);
+ if (m_tiledim != new_tiledim)
+ {
+ m_tmap->mark_all_dirty();
+ m_tiledim = new_tiledim;
+ }
+ }
+}
+
+void tilemap038_device::draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, u32 flags, u8 pri, u8 pri_mask) { draw_common(screen, bitmap, cliprect, flags, pri, pri_mask); }
+void tilemap038_device::draw(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 flags, u8 pri, u8 pri_mask) { draw_common(screen, bitmap, cliprect, flags, pri, pri_mask); }
+
+template<class _BitmapClass>
+void tilemap038_device::draw_common(screen_device &screen, _BitmapClass &bitmap, const rectangle &cliprect, u32 flags, u8 pri, u8 pri_mask)
+{
+ m_tmap->draw(screen, bitmap, cliprect, flags, pri, pri_mask);
+}
diff --git a/src/mame/video/tmap038.h b/src/mame/video/tmap038.h
new file mode 100644
index 00000000000..55833bd9bb2
--- /dev/null
+++ b/src/mame/video/tmap038.h
@@ -0,0 +1,106 @@
+// license:BSD-3-Clause
+// copyright-holders:Luca Elia, Paul Priest, David Haywood
+#ifndef MAME_VIDEO_TMAP038_H
+#define MAME_VIDEO_TMAP038_H
+
+#pragma once
+
+#include "tilemap.h"
+
+class tilemap038_device : public device_t
+{
+public:
+ tilemap038_device(const machine_config &mconfig, const char *tag, device_t *owner)
+ : tilemap038_device(mconfig, tag, owner, (u32)0)
+ {
+ }
+
+ tilemap038_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ // configurations
+ template <typename T> void set_gfxdecode_tag(T &&tag) { m_gfxdecode.set_tag(std::forward<T>(tag)); }
+ typedef device_delegate<void (bool tiledim, u32 &color, u32 &pri, u32 &code)> tmap038_cb_delegate;
+ void set_tile_callback(tmap038_cb_delegate cb) { m_038_cb = cb; }
+ void set_gfx(u16 no) { m_gfxno = no; }
+
+ // call to do the rendering etc.
+ template<class _BitmapClass>
+ void draw_common(screen_device &screen, _BitmapClass &bitmap, const rectangle &cliprect, u32 flags, u8 pri = 0, u8 pri_mask = ~0);
+
+ void prepare();
+ void draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, u32 flags, u8 pri = 0, u8 pri_mask = ~0);
+ void draw(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 flags, u8 pri = 0, u8 pri_mask = ~0);
+
+ // access
+ void vram_map(address_map &map);
+ void vram_8x8_map(address_map &map);
+ void vram_16x16_map(address_map &map);
+
+ void vram_writeonly_map(address_map &map);
+ void vram_16x16_writeonly_map(address_map &map);
+
+ u16 vram_8x8_r(offs_t offset);
+ void vram_8x8_w(offs_t offset, u16 data, u16 mem_mask);
+
+ u16 vram_16x16_r(offs_t offset);
+ void vram_16x16_w(offs_t offset, u16 data, u16 mem_mask);
+
+ u16 lineram_r(offs_t offset) { return m_lineram[offset]; }
+ void lineram_w(offs_t offset, u16 data, u16 mem_mask = ~0) { COMBINE_DATA(&m_lineram[offset]); }
+
+ u16 vregs_r(offs_t offset) { return m_vregs[offset]; }
+ void vregs_w(offs_t offset, u16 data, u16 mem_mask = ~0) { COMBINE_DATA(&m_vregs[offset]); }
+
+ void mark_all_dirty() { m_tmap->mark_all_dirty(); };
+ void set_flip(u32 attributes) { m_tmap->set_flip(attributes); }
+ void set_palette_offset(u32 offset) { m_tmap->set_palette_offset(offset); }
+ void set_scroll_rows(u32 scroll_rows) { m_tmap->set_scroll_rows(scroll_rows); }
+ void set_scroll_cols(u32 scroll_cols) { m_tmap->set_scroll_cols(scroll_cols); }
+ void set_scrollx(int which, int value) { m_tmap->set_scrollx(which, value); }
+ void set_scrolly(int which, int value) { m_tmap->set_scrolly(which, value); }
+
+ // getters
+ u16 lineram(offs_t offset) const { return m_lineram[offset]; }
+
+ u16 rowscroll(offs_t line) const { return rowscroll_en() ? m_lineram[((line & 0x1ff) * 2) + 0] : 0; }
+ u16 rowselect(offs_t line) const { return rowselect_en() ? m_lineram[((line & 0x1ff) * 2) + 1] : 0; }
+
+ u16 vregs(offs_t offset) const { return m_vregs[offset]; }
+
+ // vregs
+ bool flipx() const { return BIT(~m_vregs[0], 15); }
+ bool rowscroll_en() const { return BIT(m_vregs[0], 14) && (m_lineram != nullptr); }
+ u16 scrollx() const { return m_vregs[0] & 0x1ff; }
+
+ bool flipy() const { return BIT(~m_vregs[1], 15); }
+ bool rowselect_en() const { return BIT(m_vregs[1], 14) && (m_lineram != nullptr); }
+ bool tiledim() const { return m_tiledim; }
+ u16 scrolly() const { return m_vregs[1] & 0x1ff; }
+
+ bool enable() const { return BIT(~m_vregs[2], 4); }
+ u16 external() const { return m_vregs[2] & 0xf; }
+
+protected:
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+private:
+ TILE_GET_INFO_MEMBER(get_tile_info);
+ optional_shared_ptr<u16> m_vram_8x8;
+ optional_shared_ptr<u16> m_vram_16x16;
+ optional_shared_ptr<u16> m_lineram;
+ std::unique_ptr<u16[]> m_vregs;
+ bool m_tiledim;
+
+ // set when creating device
+ required_device<gfxdecode_device> m_gfxdecode;
+ u16 m_gfxno;
+
+ tmap038_cb_delegate m_038_cb;
+ tilemap_t* m_tmap;
+};
+
+
+DECLARE_DEVICE_TYPE(TMAP038, tilemap038_device)
+
+#endif // MAME_VIDEO_TMAP038_H
diff --git a/src/mame/video/tmnt.cpp b/src/mame/video/tmnt.cpp
index c50eab7e87b..24995b3b770 100644
--- a/src/mame/video/tmnt.cpp
+++ b/src/mame/video/tmnt.cpp
@@ -5,19 +5,19 @@
#include "includes/tmnt.h"
#include "screen.h"
-TILE_GET_INFO_MEMBER(tmnt_state::glfgreat_get_roz_tile_info)
+TILE_GET_INFO_MEMBER(glfgreat_state::glfgreat_get_roz_tile_info)
{
uint8_t *rom = memregion("user1")->base();
int code;
- tile_index += 0x40000 * m_glfgreat_roz_rom_bank;
+ tile_index += 0x40000 * m_roz_rom_bank;
code = rom[tile_index + 0x80000] + 256 * rom[tile_index] + 256 * 256 * ((rom[tile_index / 4 + 0x100000] >> (2 * (tile_index & 3))) & 3);
SET_TILE_INFO_MEMBER(0, code & 0x3fff, code >> 14, 0);
}
-TILE_GET_INFO_MEMBER(tmnt_state::prmrsocr_get_roz_tile_info)
+TILE_GET_INFO_MEMBER(prmrsocr_state::prmrsocr_get_roz_tile_info)
{
uint8_t *rom = memregion("user1")->base();
int code = rom[tile_index + 0x20000] + 256 * rom[tile_index];
@@ -184,7 +184,7 @@ if (machine().input().code_pressed(KEYCODE_E) && (*color & 0x80)) *color = machi
*color = m_sprite_colorbase + (*color & 0x1f);
}
-K05324X_CB_MEMBER(tmnt_state::prmrsocr_sprite_callback)
+K05324X_CB_MEMBER(prmrsocr_state::prmrsocr_sprite_callback)
{
int pri = 0x20 | ((*color & 0x60) >> 2);
if (pri <= m_layerpri[2])
@@ -196,7 +196,7 @@ K05324X_CB_MEMBER(tmnt_state::prmrsocr_sprite_callback)
else
*priority = 0xf0 | 0xcc | 0xaa;
- *code |= m_prmrsocr_sprite_bank << 14;
+ *code |= m_sprite_bank << 14;
*color = m_sprite_colorbase + (*color & 0x1f);
}
@@ -252,28 +252,30 @@ VIDEO_START_MEMBER(tmnt_state,lgtnfght)/* also tmnt2, ssriders */
save_item(NAME(m_lasten));
}
-VIDEO_START_MEMBER(tmnt_state,glfgreat)
+VIDEO_START_MEMBER(glfgreat_state,glfgreat)
{
- m_roz_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(tmnt_state::glfgreat_get_roz_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 512, 512);
+ m_roz_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(glfgreat_state::glfgreat_get_roz_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 512, 512);
m_roz_tilemap->set_transparent_pen(0);
- m_glfgreat_roz_rom_bank = 0;
- m_glfgreat_roz_char_bank = 0;
- m_glfgreat_roz_rom_mode = 0;
- save_item(NAME(m_glfgreat_roz_rom_bank));
- save_item(NAME(m_glfgreat_roz_char_bank));
- save_item(NAME(m_glfgreat_roz_rom_mode));
+ m_controller_select = 0;
+ m_roz_rom_bank = 0;
+ m_roz_char_bank = 0;
+ m_roz_rom_mode = 0;
+ save_item(NAME(m_controller_select));
+ save_item(NAME(m_roz_rom_bank));
+ save_item(NAME(m_roz_char_bank));
+ save_item(NAME(m_roz_rom_mode));
}
-VIDEO_START_MEMBER(tmnt_state,prmrsocr)
+VIDEO_START_MEMBER(prmrsocr_state,prmrsocr)
{
- m_roz_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(tmnt_state::prmrsocr_get_roz_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 512, 256);
+ m_roz_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(prmrsocr_state::prmrsocr_get_roz_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 512, 256);
m_roz_tilemap->set_transparent_pen(0);
- m_prmrsocr_sprite_bank = 0;
- m_glfgreat_roz_char_bank = 0;
- save_item(NAME(m_prmrsocr_sprite_bank));
- save_item(NAME(m_glfgreat_roz_char_bank));
+ m_sprite_bank = 0;
+ m_roz_char_bank = 0;
+ save_item(NAME(m_sprite_bank));
+ save_item(NAME(m_roz_char_bank));
}
VIDEO_START_MEMBER(tmnt_state,blswhstl)
@@ -373,20 +375,20 @@ WRITE16_MEMBER(tmnt_state::blswhstl_700300_w)
}
-READ16_MEMBER(tmnt_state::glfgreat_rom_r)
+READ16_MEMBER(glfgreat_state::glfgreat_rom_r)
{
- if (m_glfgreat_roz_rom_mode)
- return memregion("zoom")->base()[m_glfgreat_roz_char_bank * 0x80000 + offset];
+ if (m_roz_rom_mode)
+ return memregion("zoom")->base()[m_roz_char_bank * 0x80000 + offset];
else if (offset < 0x40000)
{
uint8_t *usr = memregion("user1")->base();
- return usr[offset + 0x80000 + m_glfgreat_roz_rom_bank * 0x40000] + 256 * usr[offset + m_glfgreat_roz_rom_bank * 0x40000];
+ return usr[offset + 0x80000 + m_roz_rom_bank * 0x40000] + 256 * usr[offset + m_roz_rom_bank * 0x40000];
}
else
- return memregion("user1")->base()[((offset & 0x3ffff) >> 2) + 0x100000 + m_glfgreat_roz_rom_bank * 0x10000];
+ return memregion("user1")->base()[((offset & 0x3ffff) >> 2) + 0x100000 + m_roz_rom_bank * 0x10000];
}
-WRITE16_MEMBER(tmnt_state::glfgreat_122000_w)
+WRITE16_MEMBER(glfgreat_state::glfgreat_122000_w)
{
if (ACCESSING_BITS_0_7)
{
@@ -394,25 +396,25 @@ WRITE16_MEMBER(tmnt_state::glfgreat_122000_w)
machine().bookkeeping().coin_counter_w(0, data & 0x01);
machine().bookkeeping().coin_counter_w(1, data & 0x02);
+ m_controller_select = (data & 0x0c) >> 2;
+
/* bit 4 = enable char ROM reading through the video RAM */
m_k052109->set_rmrd_line((data & 0x10) ? ASSERT_LINE : CLEAR_LINE);
/* bit 5 = 53596 tile rom bank selection */
- if (m_glfgreat_roz_rom_bank != (data & 0x20) >> 5)
+ if (m_roz_rom_bank != (data & 0x20) >> 5)
{
- m_glfgreat_roz_rom_bank = (data & 0x20) >> 5;
+ m_roz_rom_bank = (data & 0x20) >> 5;
m_roz_tilemap->mark_all_dirty();
}
/* bit 6,7 = 53596 char bank selection for ROM test */
- m_glfgreat_roz_char_bank = (data & 0xc0) >> 6;
-
- /* other bits unknown */
+ m_roz_char_bank = (data & 0xc0) >> 6;
}
if (ACCESSING_BITS_8_15)
{
/* bit 8 = 53596 char/rom selection for ROM test */
- m_glfgreat_roz_rom_mode = data & 0x100;
+ m_roz_rom_mode = data & 0x100;
}
}
@@ -452,7 +454,7 @@ WRITE16_MEMBER(tmnt_state::ssriders_1c0300_w)
}
}
-WRITE16_MEMBER(tmnt_state::prmrsocr_122000_w)
+WRITE16_MEMBER(prmrsocr_state::prmrsocr_122000_w)
{
if (ACCESSING_BITS_0_7)
{
@@ -464,19 +466,19 @@ WRITE16_MEMBER(tmnt_state::prmrsocr_122000_w)
m_k052109->set_rmrd_line((data & 0x10) ? ASSERT_LINE : CLEAR_LINE);
/* bit 6 = sprite ROM bank */
- m_prmrsocr_sprite_bank = (data & 0x40) >> 6;
- m_k053245->bankselect(m_prmrsocr_sprite_bank << 2);
+ m_sprite_bank = (data & 0x40) >> 6;
+ m_k053245->bankselect(m_sprite_bank << 2);
/* bit 7 = 53596 region selector for ROM test */
- m_glfgreat_roz_char_bank = (data & 0x80) >> 7;
+ m_roz_char_bank = (data & 0x80) >> 7;
/* other bits unknown (unused?) */
}
}
-READ16_MEMBER(tmnt_state::prmrsocr_rom_r)
+READ16_MEMBER(prmrsocr_state::prmrsocr_rom_r)
{
- if(m_glfgreat_roz_char_bank)
+ if(m_roz_char_bank)
return memregion("zoom")->base()[offset];
else
{
@@ -606,7 +608,7 @@ uint32_t tmnt_state::screen_update_lgtnfght(screen_device &screen, bitmap_ind16
}
-READ16_MEMBER(tmnt_state::glfgreat_ball_r)
+READ16_MEMBER(glfgreat_state::glfgreat_ball_r)
{
#ifdef MAME_DEBUG
popmessage("%04x", m_glfgreat_pixel);
diff --git a/src/osd/modules/debugger/win/consolewininfo.cpp b/src/osd/modules/debugger/win/consolewininfo.cpp
index a9811f5fc93..88367c09fc9 100644
--- a/src/osd/modules/debugger/win/consolewininfo.cpp
+++ b/src/osd/modules/debugger/win/consolewininfo.cpp
@@ -199,7 +199,7 @@ void consolewin_info::update_menu()
if (img.device().type() == CASSETTE)
{
- cassette_state const state = cassette_state(downcast<cassette_image_device *>(&img.device())->get_state() & CASSETTE_MASK_UISTATE);
+ cassette_state const state = downcast<cassette_image_device *>(&img.device())->get_state() & CASSETTE_MASK_UISTATE;
AppendMenu(devicesubmenu, MF_SEPARATOR, 0, nullptr);
AppendMenu(devicesubmenu, flags_for_exists | ((state == CASSETTE_STOPPED) ? MF_CHECKED : 0), new_item + DEVOPTION_CASSETTE_STOPPAUSE, TEXT("Pause/Stop"));
AppendMenu(devicesubmenu, flags_for_exists | ((state == CASSETTE_PLAY) ? MF_CHECKED : 0), new_item + DEVOPTION_CASSETTE_PLAY, TEXT("Play"));
@@ -208,9 +208,9 @@ void consolewin_info::update_menu()
AppendMenu(devicesubmenu, flags_for_exists, new_item + DEVOPTION_CASSETTE_FASTFORWARD, TEXT("Fast Forward"));
AppendMenu(devicesubmenu, MF_SEPARATOR, 0, nullptr);
// Motor state can be overriden by the driver
- cassette_state const motor_state = cassette_state(downcast<cassette_image_device *>(&img.device())->get_state() & CASSETTE_MASK_MOTOR);
+ cassette_state const motor_state = downcast<cassette_image_device *>(&img.device())->get_state() & CASSETTE_MASK_MOTOR;
AppendMenu(devicesubmenu, flags_for_exists | ((motor_state == CASSETTE_MOTOR_ENABLED) ? MF_CHECKED : 0), new_item + DEVOPTION_CASSETTE_MOTOR, TEXT("Motor"));
- cassette_state const speaker_state = cassette_state(downcast<cassette_image_device *>(&img.device())->get_state() & CASSETTE_MASK_SPEAKER);
+ cassette_state const speaker_state = downcast<cassette_image_device *>(&img.device())->get_state() & CASSETTE_MASK_SPEAKER;
AppendMenu(devicesubmenu, flags_for_exists | ((speaker_state == CASSETTE_SPEAKER_ENABLED) ? MF_CHECKED : 0), new_item + DEVOPTION_CASSETTE_SOUND, TEXT("Audio while Loading"));
}
}
diff --git a/src/osd/modules/file/posixptty.cpp b/src/osd/modules/file/posixptty.cpp
index 6e468cf172f..a590dc682e2 100644
--- a/src/osd/modules/file/posixptty.cpp
+++ b/src/osd/modules/file/posixptty.cpp
@@ -109,6 +109,9 @@ bool posix_check_ptty_path(std::string const &path)
osd_file::error posix_open_ptty(std::uint32_t openflags, osd_file::ptr &file, std::uint64_t &filesize, std::string &name)
{
+#if defined(__ANDROID__)
+ return osd_file::error::FAILURE;
+#else // defined(__ANDROID__)
#if (defined(sun) || defined(__sun)) && (defined(__SVR4) || defined(__svr4__))
int access = O_NOCTTY;
if (openflags & OPEN_FLAG_WRITE)
@@ -145,9 +148,6 @@ osd_file::error posix_open_ptty(std::uint32_t openflags, osd_file::ptr &file, st
::close(masterfd);
return errno_to_file_error(err);
}
-#elif defined(__ANDROID__)
- int masterfd = -1, slavefd = -1;
- char slavepath[PATH_MAX];
#else
struct termios tios;
std::memset(&tios, 0, sizeof(tios));
@@ -188,4 +188,5 @@ osd_file::error posix_open_ptty(std::uint32_t openflags, osd_file::ptr &file, st
::close(masterfd);
return osd_file::error::OUT_OF_MEMORY;
}
+#endif // defined(__ANDROID__)
}
diff --git a/src/osd/modules/input/input_x11.cpp b/src/osd/modules/input/input_x11.cpp
index 07ade15c764..6b66220e32a 100644
--- a/src/osd/modules/input/input_x11.cpp
+++ b/src/osd/modules/input/input_x11.cpp
@@ -312,6 +312,9 @@ public:
std::lock_guard<std::mutex> scope_lock(m_lock);
XEvent xevent;
+ // If X11 has become invalid for some reason, XPending will crash. Assert instead.
+ assert(m_display != nullptr);
+
//Get XInput events
while (XPending(m_display) != 0)
{
@@ -443,6 +446,17 @@ public:
{
}
+ virtual bool probe() override
+ {
+ // If there is no X server, X11 lightguns cannot be supported
+ if (XOpenDisplay(nullptr) == nullptr)
+ {
+ return false;
+ }
+
+ return true;
+ }
+
void input_init(running_machine &machine) override
{
int index;
@@ -454,6 +468,9 @@ public:
x11_event_manager::instance().initialize();
m_display = x11_event_manager::instance().display();
+ // If the X server has become invalid, a crash can occur
+ assert(m_display != nullptr);
+
// Loop through all 8 possible devices
for (index = 0; index < 8; index++)
{
@@ -573,10 +590,9 @@ private:
if (m_lightgun_map.initialized)
{
snprintf(tempname, ARRAY_LENGTH(tempname), "NC%d", index);
- devicelist()->create_device<x11_lightgun_device>(machine, tempname, tempname, *this);
- }
-
- return nullptr;
+ return devicelist()->create_device<x11_lightgun_device>(machine, tempname, tempname, *this);
+ } else
+ return nullptr;
}
return devicelist()->create_device<x11_lightgun_device>(machine, m_lightgun_map.map[index].name.c_str(), m_lightgun_map.map[index].name.c_str(), *this);
diff --git a/src/osd/modules/lib/osdlib_unix.cpp b/src/osd/modules/lib/osdlib_unix.cpp
index 178fb4594cb..2b0e7a3d780 100644
--- a/src/osd/modules/lib/osdlib_unix.cpp
+++ b/src/osd/modules/lib/osdlib_unix.cpp
@@ -90,13 +90,13 @@ void osd_free_executable(void *ptr, size_t size)
void osd_break_into_debugger(const char *message)
{
- #ifdef MAME_DEBUG
+#ifdef MAME_DEBUG
printf("MAME exception: %s\n", message);
printf("Attempting to fall into debugger\n");
kill(getpid(), SIGTRAP);
- #else
+#else
printf("Ignoring MAME exception: %s\n", message);
- #endif
+#endif
}
#ifdef SDLMAME_ANDROID
diff --git a/src/osd/modules/render/bgfx/chain.cpp b/src/osd/modules/render/bgfx/chain.cpp
index c7691973854..25dccf87eed 100644
--- a/src/osd/modules/render/bgfx/chain.cpp
+++ b/src/osd/modules/render/bgfx/chain.cpp
@@ -13,11 +13,14 @@
#include "slider.h"
#include "parameter.h"
#include "entryuniform.h"
+#include "valueuniform.h"
#include "texturemanager.h"
#include "targetmanager.h"
+#include "chainmanager.h"
#include "target.h"
#include "vertex.h"
#include "screen.h"
+#include "clear.h"
#include "modules/osdwindow.h"
#include "chain.h"
@@ -33,6 +36,7 @@ bgfx_chain::bgfx_chain(std::string name, std::string author, bool transform, tar
, m_target_list(target_list)
, m_current_time(0)
, m_screen_index(screen_index)
+ , m_has_converter(false)
{
for (bgfx_target* target : m_target_list)
{
@@ -138,3 +142,31 @@ uint32_t bgfx_chain::applicable_passes()
return applicable_passes;
}
+
+void bgfx_chain::prepend_converter(bgfx_effect *effect, chain_manager &chains)
+{
+ clear_state *clear = new clear_state(BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH | BGFX_CLEAR_STENCIL, 0, 1.0f, 0);
+ std::vector<bgfx_suppressor*> suppressors;
+
+ std::vector<bgfx_input_pair*> inputs;
+ std::vector<std::string> available_textures;
+ inputs.push_back(new bgfx_input_pair(0, "s_tex", "source", available_textures, "", chains, m_screen_index));
+ inputs.push_back(new bgfx_input_pair(1, "s_pal", "palette", available_textures, "", chains, m_screen_index));
+
+ std::vector<bgfx_entry_uniform*> uniforms;
+ float value = 1.0f;
+ float values[4] = { 1.0f, 1.0f, 0.0f, 0.0f };
+ uniforms.push_back(new bgfx_value_uniform(new bgfx_uniform("s_tex", bgfx::UniformType::Sampler), &value, 1));
+ uniforms.push_back(new bgfx_value_uniform(new bgfx_uniform("s_pal", bgfx::UniformType::Sampler), &value, 1));
+ uniforms.push_back(new bgfx_value_uniform(new bgfx_uniform("u_tex_size0", bgfx::UniformType::Vec4), values, 4));
+ uniforms.push_back(new bgfx_value_uniform(new bgfx_uniform("u_tex_size1", bgfx::UniformType::Vec4), values, 4));
+ uniforms.push_back(new bgfx_value_uniform(new bgfx_uniform("u_inv_tex_size0", bgfx::UniformType::Vec4), values, 4));
+ uniforms.push_back(new bgfx_value_uniform(new bgfx_uniform("u_inv_tex_size1", bgfx::UniformType::Vec4), values, 4));
+
+ m_entries.insert(m_entries.begin(), new bgfx_chain_entry("XXconvert", effect, clear, suppressors, inputs, uniforms, m_targets, "screen"));
+ m_has_converter = true;
+
+ const uint32_t screen_width = chains.targets().width(TARGET_STYLE_GUEST, m_screen_index);
+ const uint32_t screen_height = chains.targets().height(TARGET_STYLE_GUEST, m_screen_index);
+ m_targets.create_target("screen", bgfx::TextureFormat::RGBA8, screen_width, screen_height, TARGET_STYLE_GUEST, true, false, 1, m_screen_index);
+}
diff --git a/src/osd/modules/render/bgfx/chain.h b/src/osd/modules/render/bgfx/chain.h
index 157f92173cf..cb5668d3368 100644
--- a/src/osd/modules/render/bgfx/chain.h
+++ b/src/osd/modules/render/bgfx/chain.h
@@ -38,7 +38,10 @@ public:
std::vector<bgfx_slider*>& sliders() { return m_sliders; }
std::vector<bgfx_chain_entry*>& entries() { return m_entries; }
uint32_t applicable_passes();
- bool transform() { return m_transform; }
+ bool transform() const { return m_transform; }
+ bool has_converter() const { return m_has_converter; }
+
+ void prepend_converter(bgfx_effect *effect, chain_manager &chains);
private:
std::string m_name;
@@ -53,6 +56,7 @@ private:
std::map<std::string, bgfx_target*> m_target_map;
int64_t m_current_time;
uint32_t m_screen_index;
+ bool m_has_converter;
};
#endif // __DRAWBGFX_CHAIN__
diff --git a/src/osd/modules/render/bgfx/chainentry.h b/src/osd/modules/render/bgfx/chainentry.h
index 64130c5c93e..e143def6c56 100644
--- a/src/osd/modules/render/bgfx/chainentry.h
+++ b/src/osd/modules/render/bgfx/chainentry.h
@@ -11,8 +11,8 @@
#pragma once
-#ifndef __DRAWBGFX_CHAIN_ENTRY__
-#define __DRAWBGFX_CHAIN_ENTRY__
+#ifndef DRAWBGFX_CHAIN_ENTRY
+#define DRAWBGFX_CHAIN_ENTRY
#include <bgfx/bgfx.h>
diff --git a/src/osd/modules/render/bgfx/chainentryreader.cpp b/src/osd/modules/render/bgfx/chainentryreader.cpp
index bff221ec40c..d48b214f83d 100644
--- a/src/osd/modules/render/bgfx/chainentryreader.cpp
+++ b/src/osd/modules/render/bgfx/chainentryreader.cpp
@@ -84,7 +84,7 @@ bgfx_chain_entry* chain_entry_reader::read_from_value(const Value& value, std::s
texture_name = chains.options().value(option.c_str());
}
- if (texture_name != "" && texture_name != "screen")
+ if (texture_name != "" && texture_name != "screen" && texture_name != "palette")
{
if (selection == "")
{
diff --git a/src/osd/modules/render/bgfx/chainmanager.cpp b/src/osd/modules/render/bgfx/chainmanager.cpp
index 62df9be9613..eb22cb1d253 100644
--- a/src/osd/modules/render/bgfx/chainmanager.cpp
+++ b/src/osd/modules/render/bgfx/chainmanager.cpp
@@ -49,6 +49,7 @@ chain_manager::chain_manager(running_machine& machine, osd_options& options, tex
{
refresh_available_chains();
parse_chain_selections(options.bgfx_screen_chains());
+ init_texture_converters();
}
chain_manager::~chain_manager()
@@ -56,6 +57,15 @@ chain_manager::~chain_manager()
destroy_chains();
}
+void chain_manager::init_texture_converters()
+{
+ m_converters.push_back(nullptr);
+ m_converters.push_back(m_effects.effect("misc/texconv_palette16"));
+ m_converters.push_back(m_effects.effect("misc/texconv_rgb32"));
+ m_converters.push_back(nullptr);
+ m_converters.push_back(m_effects.effect("misc/texconv_yuy16"));
+}
+
void chain_manager::refresh_available_chains()
{
m_available_chains.clear();
@@ -288,17 +298,73 @@ bgfx_chain* chain_manager::screen_chain(uint32_t screen)
}
}
-void chain_manager::process_screen_quad(uint32_t view, uint32_t screen, render_primitive* prim, osd_window &window)
+void chain_manager::process_screen_quad(uint32_t view, uint32_t screen, render_primitive* prim, osd_window& window)
{
- uint16_t tex_width(prim->texture.width);
- uint16_t tex_height(prim->texture.height);
+ uint16_t tex_width(prim->texture.width);
+ uint16_t tex_height(prim->texture.height);
+
+ bgfx_texture* texture = screen < m_screen_textures.size() ? m_screen_textures[screen] : nullptr;
+ bgfx_texture* palette = screen < m_screen_palettes.size() ? m_screen_palettes[screen] : nullptr;
+
+ const uint32_t src_format = (prim->flags & PRIMFLAG_TEXFORMAT_MASK) >> PRIMFLAG_TEXFORMAT_SHIFT;
+ const bool needs_conversion = m_converters[src_format] != nullptr;
+ std::string screen_index = std::to_string(screen);
+ std::string source_name = "source" + screen_index;
+ std::string screen_name = "screen" + screen_index;
+ std::string palette_name = "palette" + screen_index;
+ std::string full_name = needs_conversion ? source_name : screen_name;
+ if (texture && (texture->width() != tex_width || texture->height() != tex_height))
+ {
+ m_textures.add_provider(full_name, nullptr);
+ delete texture;
+ texture = nullptr;
+
+ if (palette)
+ {
+ m_textures.add_provider(palette_name, nullptr);
+ delete palette;
+ palette = nullptr;
+ }
+ }
- const bgfx::Memory* mem = bgfx_util::mame_texture_data_to_bgfx_texture_data(prim->flags & PRIMFLAG_TEXFORMAT_MASK,
- tex_width, tex_height, prim->texture.rowpixels, prim->texture.palette, prim->texture.base);
+ bgfx::TextureFormat::Enum dst_format = bgfx::TextureFormat::RGBA8;
+ uint16_t pitch = tex_width;
+ const bgfx::Memory* mem = bgfx_util::mame_texture_data_to_bgfx_texture_data(dst_format, prim->flags & PRIMFLAG_TEXFORMAT_MASK,
+ tex_width, tex_height, prim->texture.rowpixels, prim->texture.palette, prim->texture.base, &pitch);
- std::string full_name = "screen" + std::to_string(screen);
- bgfx_texture *texture = new bgfx_texture(full_name, bgfx::TextureFormat::RGBA8, tex_width, tex_height, mem, BGFX_SAMPLER_U_CLAMP | BGFX_SAMPLER_V_CLAMP | BGFX_SAMPLER_MIN_POINT | BGFX_SAMPLER_MAG_POINT | BGFX_SAMPLER_MIP_POINT);
- m_textures.add_provider(full_name, texture);
+ if (texture == nullptr)
+ {
+ bgfx_texture *texture = new bgfx_texture(full_name, dst_format, tex_width, tex_height, mem, BGFX_SAMPLER_U_CLAMP | BGFX_SAMPLER_V_CLAMP | BGFX_SAMPLER_MIN_POINT | BGFX_SAMPLER_MAG_POINT | BGFX_SAMPLER_MIP_POINT, pitch);
+ m_textures.add_provider(full_name, texture);
+
+ if (prim->texture.palette)
+ {
+ uint16_t palette_width = (uint16_t)std::min(prim->texture.palette_length, 256U);
+ uint16_t palette_height = (uint16_t)std::max(prim->texture.palette_length / 256, 1U);
+ const bgfx::Memory *palmem = bgfx::copy(prim->texture.palette, palette_width * palette_height * 4);
+ palette = new bgfx_texture(palette_name, bgfx::TextureFormat::BGRA8, palette_width, palette_height, palmem, BGFX_SAMPLER_U_CLAMP | BGFX_SAMPLER_V_CLAMP | BGFX_SAMPLER_MIN_POINT | BGFX_SAMPLER_MAG_POINT | BGFX_SAMPLER_MIP_POINT, palette_width);
+ m_textures.add_provider(palette_name, palette);
+ }
+
+ if (screen >= m_screen_textures.size())
+ {
+ m_screen_textures.push_back(texture);
+ if (palette)
+ {
+ m_screen_palettes.push_back(palette);
+ }
+ }
+ }
+ else
+ {
+ texture->update(mem, pitch);
+
+ if (prim->texture.palette)
+ {
+ const bgfx::Memory *palmem = bgfx::copy(prim->texture.palette, palette->width() * palette->height() * 4);
+ palette->update(palmem);
+ }
+ }
const bool any_targets_rebuilt = m_targets.update_target_sizes(screen, tex_width, tex_height, TARGET_STYLE_GUEST);
if (any_targets_rebuilt)
@@ -313,11 +379,12 @@ void chain_manager::process_screen_quad(uint32_t view, uint32_t screen, render_p
}
bgfx_chain* chain = screen_chain(screen);
+ if (needs_conversion && !chain->has_converter())
+ {
+ chain->prepend_converter(m_converters[src_format], *this);
+ }
chain->process(prim, view, screen, m_textures, window, bgfx_util::get_blend_state(PRIMFLAG_GET_BLENDMODE(prim->flags)));
view += chain->applicable_passes();
-
- m_textures.add_provider(full_name, nullptr);
- delete texture;
}
std::vector<render_primitive*> chain_manager::count_screens(render_primitive* prim)
diff --git a/src/osd/modules/render/bgfx/chainmanager.h b/src/osd/modules/render/bgfx/chainmanager.h
index 4c76a02ee25..e03622d28f2 100644
--- a/src/osd/modules/render/bgfx/chainmanager.h
+++ b/src/osd/modules/render/bgfx/chainmanager.h
@@ -77,6 +77,8 @@ private:
void destroy_chains();
void reload_chains();
+ void init_texture_converters();
+
void refresh_available_chains();
void destroy_unloaded_chains();
void find_available_chains(std::string root, std::string path);
@@ -106,6 +108,9 @@ private:
std::vector<ui::menu_item> m_selection_sliders;
std::vector<std::unique_ptr<slider_state>> m_core_sliders;
std::vector<int32_t> m_current_chain;
+ std::vector<bgfx_texture*> m_screen_textures;
+ std::vector<bgfx_texture*> m_screen_palettes;
+ std::vector<bgfx_effect*> m_converters;
static const uint32_t CHAIN_NONE;
};
diff --git a/src/osd/modules/render/bgfx/effect.cpp b/src/osd/modules/render/bgfx/effect.cpp
index da5207f114b..9359faeb494 100644
--- a/src/osd/modules/render/bgfx/effect.cpp
+++ b/src/osd/modules/render/bgfx/effect.cpp
@@ -52,11 +52,5 @@ void bgfx_effect::submit(int view, uint64_t blend)
bgfx_uniform* bgfx_effect::uniform(std::string name)
{
std::map<std::string, bgfx_uniform*>::iterator iter = m_uniforms.find(name);
-
- if (iter != m_uniforms.end())
- {
- return iter->second;
- }
-
- return nullptr;
+ return iter != m_uniforms.end() ? iter->second : nullptr;
}
diff --git a/src/osd/modules/render/bgfx/entryuniform.h b/src/osd/modules/render/bgfx/entryuniform.h
index 4ba30250e6e..9c1462f360f 100644
--- a/src/osd/modules/render/bgfx/entryuniform.h
+++ b/src/osd/modules/render/bgfx/entryuniform.h
@@ -11,8 +11,8 @@
#pragma once
-#ifndef __DRAWBGFX_ENTRY_UNIFORM__
-#define __DRAWBGFX_ENTRY_UNIFORM__
+#ifndef DRAWBGFX_ENTRY_UNIFORM
+#define DRAWBGFX_ENTRY_UNIFORM
#include <bgfx/bgfx.h>
diff --git a/src/osd/modules/render/bgfx/inputpair.cpp b/src/osd/modules/render/bgfx/inputpair.cpp
index 98d0594e27a..8d4441ccffe 100644
--- a/src/osd/modules/render/bgfx/inputpair.cpp
+++ b/src/osd/modules/render/bgfx/inputpair.cpp
@@ -50,13 +50,23 @@ void bgfx_input_pair::bind(bgfx_effect *effect, const int32_t screen) const
std::string name = m_texture + std::to_string(screen);
bgfx_texture_handle_provider* provider = chains().textures().provider(name);
- bgfx_uniform *tex_size = effect->uniform("u_tex_size" + std::to_string(m_index));
- if (tex_size != nullptr)
+ if (!provider)
+ return;
+
+ bgfx_uniform *tex_size = effect->uniform("u_tex_size" + std::to_string(m_index));
+ if (tex_size && provider)
{
float values[2] = { float(provider->width()), float(provider->height()) };
tex_size->set(values, sizeof(float) * 2);
}
+ bgfx_uniform *inv_tex_size = effect->uniform("u_inv_tex_size" + std::to_string(m_index));
+ if (inv_tex_size && provider)
+ {
+ float values[2] = { 1.0f / float(provider->width()), 1.0f / float(provider->height()) };
+ inv_tex_size->set(values, sizeof(float) * 2);
+ }
+
bgfx::setTexture(m_index, effect->uniform(m_sampler)->handle(), chains().textures().handle(name));
}
diff --git a/src/osd/modules/render/bgfx/shaders/chains/hlsl/fs_chroma.sc b/src/osd/modules/render/bgfx/shaders/chains/hlsl/fs_chroma.sc
index 51bb14676d3..c0d8ba07ac7 100644
--- a/src/osd/modules/render/bgfx/shaders/chains/hlsl/fs_chroma.sc
+++ b/src/osd/modules/render/bgfx/shaders/chains/hlsl/fs_chroma.sc
@@ -22,11 +22,20 @@ void main()
vec4 cin = texture2D(s_tex, v_texcoord0);
vec4 cout = vec4(0.0, 0.0, 0.0, cin.a);
mat3 xy = mat3(u_chroma_a.xyz, u_chroma_b.xyz, u_chroma_c.xyz);
+
+#ifdef TRANSPOSED_XYZ_TO_sRGB
const mat3 XYZ_TO_sRGB = mat3(
3.2406, -0.9689, 0.0557,
-1.5372, 1.8758, -0.2040,
-0.4986, 0.0415, 1.0570
);
+#else
+ const mat3 XYZ_TO_sRGB = mat3(
+ 3.2406, -1.5372, -0.4986,
+ -0.9689, 1.8758, 0.0415,
+ 0.0557, -0.2040, 1.0570
+ );
+#endif
for (int i = 0; i < 3; ++i) {
float Y = u_y_gain[i] * cin[i];
diff --git a/src/osd/modules/render/bgfx/shaders/chains/misc/fs_blit_palette16.sc b/src/osd/modules/render/bgfx/shaders/chains/misc/fs_blit_palette16.sc
new file mode 100644
index 00000000000..82236d954a3
--- /dev/null
+++ b/src/osd/modules/render/bgfx/shaders/chains/misc/fs_blit_palette16.sc
@@ -0,0 +1,19 @@
+$input v_color0, v_texcoord0
+
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+
+#include "common.sh"
+
+// Samplers
+SAMPLER2D(s_tex, 0);
+SAMPLER2D(s_pal, 1);
+
+uniform vec4 u_inv_tex_size1;
+
+void main()
+{
+ vec2 palette_uv = texture2D(s_tex, v_texcoord0).rg;
+ palette_uv.xy = (palette_uv.xy * vec2(256.0, 256.0)) * u_inv_tex_size1.xy;
+ gl_FragColor = vec4(texture2D(s_pal, palette_uv).rgb, 1.0) * v_color0;
+}
diff --git a/src/osd/modules/render/bgfx/shaders/chains/misc/fs_blit_rgb32.sc b/src/osd/modules/render/bgfx/shaders/chains/misc/fs_blit_rgb32.sc
new file mode 100644
index 00000000000..4292e6cddc6
--- /dev/null
+++ b/src/osd/modules/render/bgfx/shaders/chains/misc/fs_blit_rgb32.sc
@@ -0,0 +1,14 @@
+$input v_color0, v_texcoord0
+
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+
+#include "common.sh"
+
+// Samplers
+SAMPLER2D(s_tex, 0);
+
+void main()
+{
+ gl_FragColor = vec4(texture2D(s_tex, v_texcoord0).rgb, 1.0) * v_color0;
+}
diff --git a/src/osd/modules/render/bgfx/shaders/chains/misc/fs_blit_yuy16.sc b/src/osd/modules/render/bgfx/shaders/chains/misc/fs_blit_yuy16.sc
new file mode 100644
index 00000000000..7f91cbc2db0
--- /dev/null
+++ b/src/osd/modules/render/bgfx/shaders/chains/misc/fs_blit_yuy16.sc
@@ -0,0 +1,37 @@
+$input v_color0, v_texcoord0
+
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+
+#include "common.sh"
+
+// Samplers
+SAMPLER2D(s_tex, 0);
+
+vec4 u_tex_size0;
+vec4 u_inv_tex_size0;
+
+vec3 ycc_to_rgb(float y, float cb, float cr)
+{
+ float r = saturate(y + 1.40200 * (cr - 0.5));
+ float g = saturate(y - 0.34414 * (cb - 0.5) - 0.71414 * (cr - 0.5));
+ float b = saturate(y + 1.77200 * (cb - 0.5));
+ return vec3(r, g, b);
+}
+
+void main()
+{
+ vec2 size_minus_one = u_tex_size0.xy - vec2(1.0, 1.0);
+ vec2 original_uv = round(v_texcoord0.xy * size_minus_one);
+ float mod_val = mod(original_uv.x, 2.0);
+ vec2 rounded_uv = round(vec2(original_uv.x - mod_val, original_uv.y));
+ vec2 next_uv = rounded_uv + vec2(1.0, 0.0);
+ vec2 srcpix0 = texture2D(s_tex, rounded_uv / size_minus_one).rg;
+ vec2 srcpix1 = texture2D(s_tex, next_uv / size_minus_one).rg;
+ float cr = srcpix1.r;
+ float cb = srcpix0.r;
+ if (mod_val < 1.0)
+ gl_FragColor = vec4(ycc_to_rgb(srcpix0.g, cb, cr), 1.0) * v_color0;
+ else
+ gl_FragColor = vec4(ycc_to_rgb(srcpix1.g, cb, cr), 1.0) * v_color0;
+}
diff --git a/src/osd/modules/render/bgfx/shaders/makefile b/src/osd/modules/render/bgfx/shaders/makefile
index 1ca45471b9b..c998f2564d9 100644
--- a/src/osd/modules/render/bgfx/shaders/makefile
+++ b/src/osd/modules/render/bgfx/shaders/makefile
@@ -12,25 +12,28 @@ SUBDIRS := $(patsubst .,,$(patsubst ./,,$(shell find . -type d)))
rebuild: main $(SUBDIRS)
endif
+.NOTPARALLEL:
$(SUBDIRS):
@echo $@
ifeq ($(OS),windows)
- @make -s --no-print-directory TARGET=0 SHADERS_DIR=$@/ clean all
- @make -s --no-print-directory TARGET=1 SHADERS_DIR=$@/ clean all
+ $(SILENT) $(MAKE) --no-print-directory TARGET=0 SHADERS_DIR=$@/ clean all SILENT="$(SILENT)"
+ $(SILENT) $(MAKE) --no-print-directory TARGET=1 SHADERS_DIR=$@/ clean all SILENT="$(SILENT)"
endif
- @make -s --no-print-directory TARGET=2 SHADERS_DIR=$@/ clean all
- @make -s --no-print-directory TARGET=3 SHADERS_DIR=$@/ clean all
- @make -s --no-print-directory TARGET=4 SHADERS_DIR=$@/ clean all
- @make -s --no-print-directory TARGET=5 SHADERS_DIR=$@/ clean all
+ $(SILENT) $(MAKE) --no-print-directory TARGET=2 SHADERS_DIR=$@/ clean all SILENT="$(SILENT)"
+ $(SILENT) $(MAKE) --no-print-directory TARGET=3 SHADERS_DIR=$@/ clean all SILENT="$(SILENT)"
+ $(SILENT) $(MAKE) --no-print-directory TARGET=4 SHADERS_DIR=$@/ clean all SILENT="$(SILENT)"
+ $(SILENT) $(MAKE) --no-print-directory TARGET=5 SHADERS_DIR=$@/ clean all SILENT="$(SILENT)"
+ $(SILENT) $(MAKE) --no-print-directory TARGET=7 SHADERS_DIR=$@/ clean all SILENT="$(SILENT)"
main:
ifeq ($(OS),windows)
- @make -s --no-print-directory TARGET=0 clean all
- @make -s --no-print-directory TARGET=1 clean all
+ $(SILENT) $(MAKE) --no-print-directory TARGET=0 clean all SILENT="$(SILENT)"
+ $(SILENT) $(MAKE) --no-print-directory TARGET=1 clean all SILENT="$(SILENT)"
endif
- @make -s --no-print-directory TARGET=2 clean all
- @make -s --no-print-directory TARGET=3 clean all
- @make -s --no-print-directory TARGET=4 clean all
- @make -s --no-print-directory TARGET=5 clean all
+ $(SILENT) $(MAKE) --no-print-directory TARGET=2 clean all SILENT="$(SILENT)"
+ $(SILENT) $(MAKE) --no-print-directory TARGET=3 clean all SILENT="$(SILENT)"
+ $(SILENT) $(MAKE) --no-print-directory TARGET=4 clean all SILENT="$(SILENT)"
+ $(SILENT) $(MAKE) --no-print-directory TARGET=5 clean all SILENT="$(SILENT)"
+ $(SILENT) $(MAKE) --no-print-directory TARGET=7 clean all SILENT="$(SILENT)"
.PHONY: main rebuild $(SUBDIRS)
diff --git a/src/osd/modules/render/bgfx/shaders/shader.mk b/src/osd/modules/render/bgfx/shaders/shader.mk
index e7db3cdc242..b9cf2f47cef 100644
--- a/src/osd/modules/render/bgfx/shaders/shader.mk
+++ b/src/osd/modules/render/bgfx/shaders/shader.mk
@@ -43,24 +43,24 @@ SHADER_PATH=shaders/dx11/$(SHADERS_DIR)
else
ifeq ($(TARGET), 2)
VS_FLAGS=--platform nacl
-FS_FLAGS=--platform nacl
+FS_FLAGS=--platform nacl --define TRANSPOSED_XYZ_TO_sRGB
SHADER_PATH=shaders/essl/$(SHADERS_DIR)
else
ifeq ($(TARGET), 3)
VS_FLAGS=--platform android
-FS_FLAGS=--platform android
+FS_FLAGS=--platform android --define TRANSPOSED_XYZ_TO_sRGB
CS_FLAGS=--platform android
SHADER_PATH=shaders/essl/$(SHADERS_DIR)
else
ifeq ($(TARGET), 4)
VS_FLAGS=--platform linux -p 120
-FS_FLAGS=--platform linux -p 120
+FS_FLAGS=--platform linux -p 120 --define TRANSPOSED_XYZ_TO_sRGB
CS_FLAGS=--platform linux -p 430
SHADER_PATH=shaders/glsl/$(SHADERS_DIR)
else
ifeq ($(TARGET), 5)
VS_FLAGS=--platform osx -p metal
-FS_FLAGS=--platform osx -p metal
+FS_FLAGS=--platform osx -p metal --define TRANSPOSED_XYZ_TO_sRGB
CS_FLAGS=--platform osx -p metal
SHADER_PATH=shaders/metal/$(SHADERS_DIR)
else
diff --git a/src/osd/modules/render/bgfx/suppressorreader.cpp b/src/osd/modules/render/bgfx/suppressorreader.cpp
index 77a109a264b..024a99e20f8 100644
--- a/src/osd/modules/render/bgfx/suppressorreader.cpp
+++ b/src/osd/modules/render/bgfx/suppressorreader.cpp
@@ -77,6 +77,7 @@ bgfx_suppressor* suppressor_reader::read_from_value(const Value& value, std::str
bool suppressor_reader::validate_parameters(const Value& value, std::string prefix)
{
+ if (!READER_CHECK(value["type"].IsString(), (prefix + "Value 'type' must be a string\n").c_str())) return false;
if (!READER_CHECK(value.HasMember("name"), (prefix + "Must have string value 'name'\n").c_str())) return false;
if (!READER_CHECK(value["name"].IsString(), (prefix + "Value 'name' must be a string\n").c_str())) return false;
if (!READER_CHECK(value.HasMember("value"), (prefix + "Must have numeric or array value 'value'\n").c_str())) return false;
diff --git a/src/osd/modules/render/bgfx/texture.cpp b/src/osd/modules/render/bgfx/texture.cpp
index ecbf51121ab..7b6747e0c54 100644
--- a/src/osd/modules/render/bgfx/texture.cpp
+++ b/src/osd/modules/render/bgfx/texture.cpp
@@ -32,7 +32,7 @@ bgfx_texture::bgfx_texture(std::string name, bgfx::TextureFormat::Enum format, u
}
}
-bgfx_texture::bgfx_texture(std::string name, bgfx::TextureFormat::Enum format, uint16_t width, uint16_t height, const bgfx::Memory* data, uint32_t flags)
+bgfx_texture::bgfx_texture(std::string name, bgfx::TextureFormat::Enum format, uint16_t width, uint16_t height, const bgfx::Memory* data, uint32_t flags, uint16_t pitch)
: m_name(name)
, m_format(format)
, m_width(width)
@@ -40,10 +40,16 @@ bgfx_texture::bgfx_texture(std::string name, bgfx::TextureFormat::Enum format, u
{
bgfx::TextureInfo info;
bgfx::calcTextureSize(info, width, height, 1, false, false, 1, format);
- m_texture = bgfx::createTexture2D(width, height, false, 1, format, flags, data);
+ m_texture = bgfx::createTexture2D(width, height, false, 1, format, flags, nullptr);
+ bgfx::updateTexture2D(m_texture, 0, 0, 0, 0, width, height, data, pitch);
}
bgfx_texture::~bgfx_texture()
{
bgfx::destroy(m_texture);
}
+
+void bgfx_texture::update(const bgfx::Memory *data, uint16_t pitch)
+{
+ bgfx::updateTexture2D(m_texture, 0, 0, 0, 0, m_width, m_height, data, pitch);
+}
diff --git a/src/osd/modules/render/bgfx/texture.h b/src/osd/modules/render/bgfx/texture.h
index 7cb6d988150..1d5b1dd9f6d 100644
--- a/src/osd/modules/render/bgfx/texture.h
+++ b/src/osd/modules/render/bgfx/texture.h
@@ -21,7 +21,7 @@ class bgfx_texture : public bgfx_texture_handle_provider
{
public:
bgfx_texture(std::string name, bgfx::TextureFormat::Enum format, uint16_t width, uint16_t height, uint32_t flags, void* data);
- bgfx_texture(std::string name, bgfx::TextureFormat::Enum format, uint16_t width, uint16_t height, const bgfx::Memory* data, uint32_t flags = BGFX_SAMPLER_U_CLAMP | BGFX_SAMPLER_V_CLAMP);
+ bgfx_texture(std::string name, bgfx::TextureFormat::Enum format, uint16_t width, uint16_t height, const bgfx::Memory* data, uint32_t flags = BGFX_SAMPLER_U_CLAMP | BGFX_SAMPLER_V_CLAMP, uint16_t pitch = UINT16_MAX);
virtual ~bgfx_texture();
// Getters
@@ -34,6 +34,8 @@ public:
virtual bgfx::TextureHandle texture() const override { return m_texture; }
virtual bool is_target() const override { return false; }
+ void update(const bgfx::Memory *data, uint16_t pitch = UINT16_MAX);
+
protected:
std::string m_name;
bgfx::TextureFormat::Enum m_format;
diff --git a/src/osd/modules/render/bgfx/texturemanager.cpp b/src/osd/modules/render/bgfx/texturemanager.cpp
index a5fbca97f35..e2614133205 100644
--- a/src/osd/modules/render/bgfx/texturemanager.cpp
+++ b/src/osd/modules/render/bgfx/texturemanager.cpp
@@ -116,8 +116,10 @@ bgfx::TextureHandle texture_manager::create_or_update_mame_texture(uint32_t form
}
else
{
- const bgfx::Memory* mem = bgfx_util::mame_texture_data_to_bgfx_texture_data(format, width, height, rowpixels, palette, base);
- bgfx::updateTexture2D(handle, 0, 0, 0, 0, (uint16_t)width, (uint16_t)height, mem);
+ bgfx::TextureFormat::Enum dst_format = bgfx::TextureFormat::BGRA8;
+ uint16_t pitch = width;
+ const bgfx::Memory* mem = bgfx_util::mame_texture_data_to_bgfx_texture_data(dst_format, format, width, height, rowpixels, palette, base, &pitch);
+ bgfx::updateTexture2D(handle, 0, 0, 0, 0, (uint16_t)width, (uint16_t)height, mem, pitch);
return handle;
}
}
@@ -142,8 +144,10 @@ bgfx::TextureHandle texture_manager::create_or_update_mame_texture(uint32_t form
}
else
{
- const bgfx::Memory* mem = bgfx_util::mame_texture_data_to_bgfx_texture_data(format, width, height, rowpixels, palette, base);
- bgfx::updateTexture2D(handle, 0, 0, 0, 0, (uint16_t)width, (uint16_t)height, mem);
+ bgfx::TextureFormat::Enum dst_format = bgfx::TextureFormat::BGRA8;
+ uint16_t pitch = width;
+ const bgfx::Memory* mem = bgfx_util::mame_texture_data_to_bgfx_texture_data(dst_format, format, width, height, rowpixels, palette, base, &pitch);
+ bgfx::updateTexture2D(handle, 0, 0, 0, 0, (uint16_t)width, (uint16_t)height, mem, pitch);
return handle;
}
}
@@ -151,9 +155,11 @@ bgfx::TextureHandle texture_manager::create_or_update_mame_texture(uint32_t form
}
}
- const bgfx::Memory* mem = bgfx_util::mame_texture_data_to_bgfx_texture_data(format, width, height, rowpixels, palette, base);
- handle = bgfx::createTexture2D(width, height, false, 1, bgfx::TextureFormat::RGBA8, flags, nullptr);
- bgfx::updateTexture2D(handle, 0, 0, 0, 0, (uint16_t)width, (uint16_t)height, mem);
+ bgfx::TextureFormat::Enum dst_format = bgfx::TextureFormat::BGRA8;
+ uint16_t pitch = width;
+ const bgfx::Memory* mem = bgfx_util::mame_texture_data_to_bgfx_texture_data(dst_format, format, width, height, rowpixels, palette, base, &pitch);
+ handle = bgfx::createTexture2D(width, height, false, 1, dst_format, flags, nullptr);
+ bgfx::updateTexture2D(handle, 0, 0, 0, 0, (uint16_t)width, (uint16_t)height, mem, pitch);
m_mame_textures[key] = { handle, seqid, width, height };
return handle;
diff --git a/src/osd/modules/render/bgfx/uniform.cpp b/src/osd/modules/render/bgfx/uniform.cpp
index ef33c11f128..dc81475ad59 100644
--- a/src/osd/modules/render/bgfx/uniform.cpp
+++ b/src/osd/modules/render/bgfx/uniform.cpp
@@ -29,7 +29,7 @@ bgfx_uniform::~bgfx_uniform()
void bgfx_uniform::upload()
{
- if (m_type != bgfx::UniformType::Int1)
+ if (m_type != bgfx::UniformType::Sampler)
{
bgfx::setUniform(m_handle, m_data);
}
@@ -42,7 +42,7 @@ bgfx_uniform* bgfx_uniform::set(float* value)
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::Sampler));
}
bgfx_uniform* bgfx_uniform::set_mat3(float* value)
@@ -69,7 +69,7 @@ size_t bgfx_uniform::get_size_for_type(bgfx::UniformType::Enum type)
case bgfx::UniformType::Vec4:
return sizeof(float) * 4;
- case bgfx::UniformType::Int1:
+ case bgfx::UniformType::Sampler:
return sizeof(int);
case bgfx::UniformType::Mat3:
diff --git a/src/osd/modules/render/bgfx/uniformreader.cpp b/src/osd/modules/render/bgfx/uniformreader.cpp
index 3e3cb5db318..c97ca484e48 100644
--- a/src/osd/modules/render/bgfx/uniformreader.cpp
+++ b/src/osd/modules/render/bgfx/uniformreader.cpp
@@ -11,7 +11,7 @@
#include "uniform.h"
const uniform_reader::string_to_enum uniform_reader::TYPE_NAMES[uniform_reader::TYPE_COUNT] = {
- { "int", bgfx::UniformType::Int1 },
+ { "int", bgfx::UniformType::Sampler },
{ "vec4", bgfx::UniformType::Vec4 },
{ "mat3", bgfx::UniformType::Mat3 },
{ "mat4", bgfx::UniformType::Mat4 }
diff --git a/src/osd/modules/render/bgfx/vertex.h b/src/osd/modules/render/bgfx/vertex.h
index 32b3c36064f..2036296a9d0 100644
--- a/src/osd/modules/render/bgfx/vertex.h
+++ b/src/osd/modules/render/bgfx/vertex.h
@@ -31,7 +31,7 @@ struct ScreenVertex
.end();
}
- static bgfx::VertexDecl ms_decl;
+ static bgfx::VertexLayout ms_decl;
};
#endif // __DRAWBGFX_VERTEX__
diff --git a/src/osd/modules/render/bgfxutil.cpp b/src/osd/modules/render/bgfxutil.cpp
index 5ba76cbd2a1..7114b6008d8 100644
--- a/src/osd/modules/render/bgfxutil.cpp
+++ b/src/osd/modules/render/bgfxutil.cpp
@@ -14,37 +14,57 @@
#include "render.h"
-const bgfx::Memory* bgfx_util::mame_texture_data_to_bgfx_texture_data(uint32_t format, int width, int height, int rowpixels, const rgb_t *palette, void *base)
+const bgfx::Memory* bgfx_util::mame_texture_data_to_bgfx_texture_data(bgfx::TextureFormat::Enum &dst_format, uint32_t src_format, int width, int height, int rowpixels, const rgb_t *palette, void *base, uint16_t *out_pitch)
{
- const bgfx::Memory* mem = bgfx::alloc(width * height * 4);
- uint32_t* data = reinterpret_cast<uint32_t*>(mem->data);
+ bgfx::TextureInfo info;
+ switch (src_format)
+ {
+ case PRIMFLAG_TEXFORMAT(TEXFORMAT_PALETTE16):
+ case PRIMFLAG_TEXFORMAT(TEXFORMAT_YUY16):
+ dst_format = bgfx::TextureFormat::RG8;
+ if (out_pitch)
+ *out_pitch = rowpixels * 2;
+ break;
+ case PRIMFLAG_TEXFORMAT(TEXFORMAT_ARGB32):
+ case PRIMFLAG_TEXFORMAT(TEXFORMAT_RGB32):
+ dst_format = bgfx::TextureFormat::BGRA8;
+ if (out_pitch)
+ *out_pitch = rowpixels * 4;
+ break;
+ }
+ bgfx::calcTextureSize(info, rowpixels, height, 1, false, false, 1, dst_format);
+ return bgfx::copy(base, info.storageSize);
+ /*const bgfx::Memory* mem = bgfx::alloc(width * height * 4);
+ uint32_t* dst = reinterpret_cast<uint32_t*>(mem->data);
uint16_t* src16 = reinterpret_cast<uint16_t*>(base);
uint32_t* src32 = reinterpret_cast<uint32_t*>(base);
for (int y = 0; y < height; y++)
{
- uint32_t* dst_line = data + y * width;
- uint16_t* src_line16 = src16 + y * rowpixels;
- uint32_t* src_line32 = src32 + y * rowpixels;
switch (format)
{
- case PRIMFLAG_TEXFORMAT(TEXFORMAT_PALETTE16):
- copy_util::copyline_palette16(dst_line, src_line16, width, palette);
- break;
- case PRIMFLAG_TEXFORMAT(TEXFORMAT_YUY16):
- copy_util::copyline_yuy16_to_argb(dst_line, src_line16, width, palette, 1);
- break;
- case PRIMFLAG_TEXFORMAT(TEXFORMAT_ARGB32):
- copy_util::copyline_argb32(dst_line, src_line32, width, palette);
- break;
- case PRIMFLAG_TEXFORMAT(TEXFORMAT_RGB32):
- copy_util::copyline_rgb32(dst_line, src_line32, width, palette);
- break;
- default:
- break;
+ case PRIMFLAG_TEXFORMAT(TEXFORMAT_PALETTE16):
+ copy_util::copyline_palette16(dst, src16, width, palette);
+ src16 += rowpixels;
+ break;
+ case PRIMFLAG_TEXFORMAT(TEXFORMAT_YUY16):
+ copy_util::copyline_yuy16_to_argb(dst, src16, width, palette, 1);
+ src16 += rowpixels;
+ break;
+ case PRIMFLAG_TEXFORMAT(TEXFORMAT_ARGB32):
+ copy_util::copyline_argb32(dst, src32, width, palette);
+ src32 += rowpixels;
+ break;
+ case PRIMFLAG_TEXFORMAT(TEXFORMAT_RGB32):
+ copy_util::copyline_rgb32(dst, src32, width, palette);
+ src32 += rowpixels;
+ break;
+ default:
+ break;
}
+ dst += width;
}
- return mem;
+ return mem;*/
}
uint64_t bgfx_util::get_blend_state(uint32_t blend)
diff --git a/src/osd/modules/render/bgfxutil.h b/src/osd/modules/render/bgfxutil.h
index c733987ef18..f1311858324 100644
--- a/src/osd/modules/render/bgfxutil.h
+++ b/src/osd/modules/render/bgfxutil.h
@@ -11,7 +11,7 @@
class bgfx_util
{
public:
- static const bgfx::Memory* mame_texture_data_to_bgfx_texture_data(uint32_t format, int width, int height, int rowpixels, const rgb_t *palette, void *base);
+ static const bgfx::Memory* mame_texture_data_to_bgfx_texture_data(bgfx::TextureFormat::Enum &dst_format, uint32_t format, int width, int height, int rowpixels, const rgb_t *palette, void *base, uint16_t *out_pitch = nullptr);
static uint64_t get_blend_state(uint32_t blend);
};
diff --git a/src/osd/modules/render/drawbgfx.cpp b/src/osd/modules/render/drawbgfx.cpp
index 3c15bc3cf96..a7677905353 100644
--- a/src/osd/modules/render/drawbgfx.cpp
+++ b/src/osd/modules/render/drawbgfx.cpp
@@ -278,6 +278,11 @@ int renderer_bgfx::create()
{
init.type = bgfx::RendererType::Direct3D11;
}
+// Throws exception on exit
+// else if (backend == "dx12" || backend == "d3d12")
+// {
+// init.type = bgfx::RendererType::Direct3D12;
+// }
else if (backend == "gles")
{
init.type = bgfx::RendererType::OpenGLES;
@@ -286,6 +291,10 @@ int renderer_bgfx::create()
{
init.type = bgfx::RendererType::OpenGL;
}
+ else if (backend == "vulkan")
+ {
+ init.type = bgfx::RendererType::Vulkan;
+ }
else if (backend == "metal")
{
init.type = bgfx::RendererType::Metal;
@@ -441,7 +450,7 @@ int renderer_bgfx::xy_to_render_target(int x, int y, int *xt, int *yt)
// drawbgfx_window_draw
//============================================================
-bgfx::VertexDecl ScreenVertex::ms_decl;
+bgfx::VertexLayout ScreenVertex::ms_decl;
void renderer_bgfx::put_packed_quad(render_primitive *prim, uint32_t hash, ScreenVertex* vertices)
{
@@ -1131,8 +1140,10 @@ void renderer_bgfx::process_atlas_packs(std::vector<std::vector<rectangle_packer
continue;
}
m_hash_to_entry[rect.hash()] = rect;
- const bgfx::Memory* mem = bgfx_util::mame_texture_data_to_bgfx_texture_data(rect.format(), rect.width(), rect.height(), rect.rowpixels(), rect.palette(), rect.base());
- bgfx::updateTexture2D(m_texture_cache->texture(), 0, 0, rect.x(), rect.y(), rect.width(), rect.height(), mem);
+ bgfx::TextureFormat::Enum dst_format = bgfx::TextureFormat::RGBA8;
+ uint16_t pitch = rect.width();
+ const bgfx::Memory* mem = bgfx_util::mame_texture_data_to_bgfx_texture_data(dst_format, rect.format(), rect.width(), rect.height(), rect.rowpixels(), rect.palette(), rect.base(), &pitch);
+ bgfx::updateTexture2D(m_texture_cache->texture(), 0, 0, rect.x(), rect.y(), rect.width(), rect.height(), mem, pitch);
}
}
}
diff --git a/src/osd/osdcore.h b/src/osd/osdcore.h
index 95233b4eb14..4c4cab081e6 100644
--- a/src/osd/osdcore.h
+++ b/src/osd/osdcore.h
@@ -1,18 +1,11 @@
// license:BSD-3-Clause
// copyright-holders:Aaron Giles
-/***************************************************************************
-
- osdcore.h
-
- Core OS-dependent code interface.
-
-****************************************************************************
-
- The prototypes in this file describe the interfaces that the MAME core
- and various tools rely upon to interact with the outside world. They are
- broken out into several categories.
-
-***************************************************************************/
+/// \file
+/// \brief Core OS-dependent code interface
+///
+/// The prototypes in this file describe the interfaces that the MAME
+/// core and various tools rely on to interact with the outside world.
+/// They are broken out into several categories.
#ifndef MAME_OSD_OSDCORE_H
#define MAME_OSD_OSDCORE_H
@@ -46,216 +39,188 @@
#endif
#endif
-/* flags controlling file access */
-#define OPEN_FLAG_READ 0x0001 /* open for read */
-#define OPEN_FLAG_WRITE 0x0002 /* open for write */
-#define OPEN_FLAG_CREATE 0x0004 /* create & truncate file */
-#define OPEN_FLAG_CREATE_PATHS 0x0008 /* create paths as necessary */
-#define OPEN_FLAG_NO_PRELOAD 0x0010 /* do not decompress on open */
+/// \defgroup openflags File open flags
+/// \{
+
+/// Open file for reading.
+#define OPEN_FLAG_READ 0x0001
+
+/// Open file for writing.
+#define OPEN_FLAG_WRITE 0x0002
+
+/// Create the file, or truncate it if it exists.
+#define OPEN_FLAG_CREATE 0x0004
-// osd_file is an interface which represents an open file/PTY/socket
+/// Create non-existent directories in the path.
+#define OPEN_FLAG_CREATE_PATHS 0x0008
+
+/// Do not decompress into memory on open.
+#define OPEN_FLAG_NO_PRELOAD 0x0010
+
+/// \}
+
+
+/// \brief Interface to file-like resources
+///
+/// This interface is used to access file-like and stream-like
+/// resources. Examples include plain files, TCP socket, named pipes,
+/// pseudo-terminals, and compressed archive members.
class osd_file
{
public:
- // error codes returned by routines below
+ /// \brief Result of a file operation
+ ///
+ /// Returned by most members of osd_file, and also used by other
+ /// classes that access files or other file-like resources.
enum class error
{
+ /// Operation completed successfully.
NONE,
+
+ /// Operation failed, but there is no more specific code to
+ /// describe the failure.
FAILURE,
+
+ /// Operation failed due to an error allocating memory.
OUT_OF_MEMORY,
+
+ /// The requested file, path or resource was not found.
NOT_FOUND,
+
+ /// Current permissions do not allow the requested access.
ACCESS_DENIED,
+
+ /// Requested access is not permitted because the file or
+ /// resource is currently open for exclusive access.
ALREADY_OPEN,
+
+ /// Request cannot be completed due to resource exhaustion
+ /// (maximum number of open files or other objects has been
+ /// reached).
TOO_MANY_FILES,
+
+ /// The request cannot be completed because invalid data was
+ /// encountered (for example an inconsistent filesystem, or a
+ /// corrupt archive file).
INVALID_DATA,
+
+ /// The requested access mode is invalid, or not appropriate for
+ /// the file or resource.
INVALID_ACCESS
};
+ /// \brief Smart pointer to a file handle
typedef std::unique_ptr<osd_file> ptr;
-
- /*-----------------------------------------------------------------------------
- osd_file::open: open a new file.
-
- Parameters:
-
- path - path to the file to open
-
- openflags - some combination of:
-
- OPEN_FLAG_READ - open the file for read access
- OPEN_FLAG_WRITE - open the file for write access
- OPEN_FLAG_CREATE - create/truncate the file when opening
- OPEN_FLAG_CREATE_PATHS - specifies that non-existant paths
- should be created if necessary
-
- file - reference to an osd_file::ptr to receive the newly-opened file
- handle; this is only valid if the function returns FILERR_NONE
-
- filesize - reference to a uint64_t to receive the size of the opened
- file; this is only valid if the function returns FILERR_NONE
-
- Return value:
-
- a file_error describing any error that occurred while opening
- the file, or FILERR_NONE if no error occurred
-
- Notes:
-
- This function is called by core_fopen and several other places in
- the core to access files. These functions will construct paths by
- concatenating various search paths held in the options.c options
- database with partial paths specified by the core. The core assumes
- that the path separator is the first character of the string
- PATH_SEPARATOR, but does not interpret any path separators in the
- search paths, so if you use a different path separator in a search
- path, you may get a mixture of PATH_SEPARATORs (from the core) and
- alternate path separators (specified by users and placed into the
- options database).
- -----------------------------------------------------------------------------*/
+ /// \brief Open a new file handle
+ ///
+ /// This function is called by core_fopen and several other places
+ /// in the core to access files. These functions will construct
+ /// paths by concatenating various search paths held in the
+ /// options.c options database with partial paths specified by the
+ /// core. The core assumes that the path separator is the first
+ /// character of the string PATH_SEPARATOR, but does not interpret
+ /// any path separators in the search paths, so if you use a
+ /// different path separator in a search path, you may get a mixture
+ /// of PATH_SEPARATORs (from the core) and alternate path separators
+ /// (specified by users and placed into the options database).
+ /// \param [in] path Path to the file to open.
+ /// \param [in] openflags Combination of #OPEN_FLAG_READ,
+ /// #OPEN_FLAG_WRITE, #OPEN_FLAG_CREATE and
+ /// #OPEN_FLAG_CREATE_PATHS specifying the requested access mode
+ /// and open behaviour.
+ /// \param [out] file Receives the file handle if the operation
+ /// succeeds. Not valid if the operation fails.
+ /// \param [out] filesize Receives the size of the opened file if
+ /// the operation succeeded. Not valid if the operation failed.
+ /// Will be zero for stream-like objects (e.g. TCP sockets or
+ /// named pipes).
+ /// \return Result of the operation.
static error open(std::string const &path, std::uint32_t openflags, ptr &file, std::uint64_t &filesize);
-
- /*-----------------------------------------------------------------------------
- osd_file::openpty: create a new PTY pair
-
- Parameters:
-
- file - reference to an osd_file::ptr to receive the handle of the master
- side of the newly-created PTY; this is only valid if the function
- returns FILERR_NONE
-
- name - reference to string where slave filename will be stored
-
- Return value:
-
- a file_error describing any error that occurred while creating the
- PTY, or FILERR_NONE if no error occurred
- -----------------------------------------------------------------------------*/
+ /// \brief Create a new pseudo-terminal (PTY) pair
+ ///
+ /// \param [out] file Receives the handle of the master side of the
+ /// pseudo-terminal if the operation succeeds. Not valid if the
+ /// operation fails.
+ /// \param [out] name Receives the name of the slave side of the
+ /// pseudo-terminal if the operation succeeds. Not valid if the
+ /// operation fails.
+ /// \return Result of the operation.
static error openpty(ptr &file, std::string &name);
-
- /*-----------------------------------------------------------------------------
- osd_file::~osd_file: close an open file
- -----------------------------------------------------------------------------*/
+ /// \brief Close an open file
virtual ~osd_file() { }
-
- /*-----------------------------------------------------------------------------
- osd_file::read: read from an open file
-
- Parameters:
-
- buffer - pointer to memory that will receive the data read
-
- offset - offset within the file to read from
-
- length - number of bytes to read from the file
-
- actual - reference to a uint32_t to receive the number of bytes actually
- read during the operation; valid only if the function returns
- FILERR_NONE
-
- Return value:
-
- a file_error describing any error that occurred while reading
- from the file, or FILERR_NONE if no error occurred
- -----------------------------------------------------------------------------*/
+ /// \brief Read from an open file
+ ///
+ /// Read data from an open file at specified offset. Note that the
+ /// seek and read are not guaranteed to be atomic, which may cause
+ /// issues in multi-threaded applications.
+ /// \param [out] buffer Pointer to memory that will receive the data
+ /// read.
+ /// \param [in] offset Byte offset within the file to read at,
+ /// relative to the start of the file. Ignored for stream-like
+ /// objects (e.g. TCP sockets or named pipes).
+ /// \param [in] length Number of bytes to read. Fewer bytes may be
+ /// read if the end of file is reached, or if no data is
+ /// available.
+ /// \param [out] actual Receives the number of bytes read if the
+ /// operation succeeds. Not valid if the operation fails.
+ /// \return Result of the operation.
virtual error read(void *buffer, std::uint64_t offset, std::uint32_t length, std::uint32_t &actual) = 0;
-
- /*-----------------------------------------------------------------------------
- osd_file::write: write to an open file
-
- Parameters:
-
- buffer - pointer to memory that contains the data to write
-
- offset - offset within the file to write to
-
- length - number of bytes to write to the file
-
- actual - reference to a uint32_t to receive the number of bytes actually
- written during the operation; valid only if the function returns
- FILERR_NONE
-
- Return value:
-
- a file_error describing any error that occurred while writing to
- the file, or FILERR_NONE if no error occurred
- -----------------------------------------------------------------------------*/
+ /// \brief Write to an open file
+ ///
+ /// Write data to an open file at specified offset. Note that the
+ /// seek and write are not guaranteed to be atomic, which may cause
+ /// issues in multi-threaded applications.
+ /// \param [in] buffer Pointer to memory containing data to write.
+ /// \param [in] offset Byte offset within the file to write at,
+ /// relative to the start of the file. Ignored for stream-like
+ /// objects (e.g. TCP sockets or named pipes).
+ /// \param [in] length Number of bytes to write.
+ /// \param [out] actual Receives the number of bytes written if the
+ /// operation succeeds. Not valid if the operation fails.
+ /// \return Result of the operation.
virtual error write(void const *buffer, std::uint64_t offset, std::uint32_t length, std::uint32_t &actual) = 0;
-
- /*-----------------------------------------------------------------------------
- osd_file::truncate: change the size of an open file
-
- Parameters:
-
-. offset - future size of the file
-
- Return value:
-
- a file_error describing any error that occurred while writing to
- the file, or FILERR_NONE if no error occurred
- -----------------------------------------------------------------------------*/
+ /// \brief Change the size of an open file
+ ///
+ /// \param [in] offset Desired size of the file.
+ /// \return Result of the operation.
virtual error truncate(std::uint64_t offset) = 0;
-
- /*-----------------------------------------------------------------------------
- osd_file::flush: 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 flushing file
- buffers, or FILERR_NONE if no error occurred
- -----------------------------------------------------------------------------*/
+ /// \brief Flush file buffers
+ ///
+ /// This flushes any data cached by the application, but does not
+ /// guarantee that all prior writes have reached persistent storage.
+ /// \return Result of the operation.
virtual error flush() = 0;
-
- /*-----------------------------------------------------------------------------
- osd_file::remove: deletes a file
-
- Parameters:
-
- filename - path to file to delete
-
- Return value:
-
- a file_error describing any error that occurred while deleting
- the file, or FILERR_NONE if no error occurred
- -----------------------------------------------------------------------------*/
+ /// \brief Delete a file
+ ///
+ /// \param [in] filename Path to the file to delete.
+ /// \return Result of the operation.
static error remove(std::string const &filename);
};
-
-/*-----------------------------------------------------------------------------
- osd_getenv: return pointer to environment variable
-
- Parameters:
-
- name - name of environment variable
-
- Return value:
-
- pointer to value
------------------------------------------------------------------------------*/
+/// \brief Get environment variable value
+///
+/// \param [in] name Name of the environment variable as a
+/// NUL-terminated string.
+/// \return Pointer to environment variable value as a NUL-terminated
+/// string if found, or nullptr if not found.
const char *osd_getenv(const char *name);
-/*-----------------------------------------------------------------------------
- osd_getpid: gets process id
-
- Return value:
- process id
------------------------------------------------------------------------------*/
+/// \brief Get current process ID
+///
+/// \return The process ID of the current process.
int osd_getpid();
+
/*-----------------------------------------------------------------------------
osd_get_physical_drive_geometry: if the given path points to a physical
drive, return the geometry of that drive
@@ -442,7 +407,7 @@ typedef uint64_t osd_ticks_t;
accurate. It is ok if this call is not ultra-fast, since it is
primarily used for once/frame synchronization.
-----------------------------------------------------------------------------*/
-osd_ticks_t osd_ticks(void);
+osd_ticks_t osd_ticks();
/*-----------------------------------------------------------------------------
@@ -457,7 +422,7 @@ osd_ticks_t osd_ticks(void);
an osd_ticks_t value which represents the number of ticks per
second
-----------------------------------------------------------------------------*/
-osd_ticks_t osd_ticks_per_second(void);
+osd_ticks_t osd_ticks_per_second();
/*-----------------------------------------------------------------------------
@@ -697,67 +662,42 @@ void osd_work_item_release(osd_work_item *item);
MISCELLANEOUS INTERFACES
***************************************************************************/
-/*-----------------------------------------------------------------------------
- osd_alloc_executable: allocate memory that can contain executable code
-
- Parameters:
-
- size - the number of bytes to allocate
-
- Return value:
-
- a pointer to the allocated memory
-
- Notes:
-
- On many systems, this call may acceptably map to malloc(). On systems
- where pages are tagged with "no execute" privileges, it may be
- necessary to perform some kind of special allocation to ensure that
- code placed into this buffer can be executed.
------------------------------------------------------------------------------*/
+/// \brief Allocate memory that can contain executable code
+///
+/// Allocated memory must be both writable and executable. Allocated
+/// memory must be freed by calling #osd_free_executable passing the
+/// same size.
+/// \param [in] size Number of bytes to allocate.
+/// \return Pointer to allocated memory, or nullptr if allocation
+/// failed.
+/// \sa osd_free_executable
void *osd_alloc_executable(size_t size);
-/*-----------------------------------------------------------------------------
- osd_free_executable: free memory allocated by osd_alloc_executable
-
- Parameters:
-
- ptr - the pointer returned from osd_alloc_executable
-
- size - the number of bytes originally requested
-
- Return value:
-
- None
------------------------------------------------------------------------------*/
+/// \brief Free memory allocated by osd_alloc_executable
+///
+/// \param [in] ptr Pointer returned by #osd_alloc_executable.
+/// \param [in] size Number of bytes originally requested. Must match
+/// the value passed to #osd_alloc_executable.
+/// \sa osd_alloc_executable
void osd_free_executable(void *ptr, size_t size);
-/*-----------------------------------------------------------------------------
- osd_break_into_debugger: break into the hosting system's debugger if one
- is attached
-
- Parameters:
-
- message - pointer to string to output to the debugger
-
- Return value:
-
- None.
-
- Notes:
-
- This function is called when an assertion or other important error
- occurs. If a debugger is attached to the current process, it should
- break into the debugger and display the given message.
------------------------------------------------------------------------------*/
+/// \brief Break into host debugger if attached
+///
+/// This function is called when a fatal error occurs. If a debugger is
+/// attached, it should break and display the specified message.
+/// \param [in] message Message to output to the debugger as a
+/// NUL-terminated string.
void osd_break_into_debugger(const char *message);
-/*-----------------------------------------------------------------------------
- osd_get_clipboard_text: retrieves text from the clipboard
------------------------------------------------------------------------------*/
-std::string osd_get_clipboard_text(void);
+
+/// \brief Get clipboard text
+///
+/// Gets current clipboard content as UTF-8 text. Returns an empty
+/// string if the clipboard contents cannot be converted to plain text.
+/// \return Clipboard contents or an empty string.
+std::string osd_get_clipboard_text();
/***************************************************************************
@@ -818,7 +758,8 @@ public:
};
//FIXME: really needed here?
-void osd_list_network_adapters(void);
+void osd_list_network_adapters();
+
/***************************************************************************
UNCATEGORIZED INTERFACES
@@ -847,21 +788,7 @@ const char *osd_get_volume_name(int idx);
src - source string
-----------------------------------------------------------------------------*/
-void osd_subst_env(std::string &dst,std::string const &src);
-
-/* ----- output management ----- */
-
-// output channels
-enum osd_output_channel
-{
- OSD_OUTPUT_CHANNEL_ERROR,
- OSD_OUTPUT_CHANNEL_WARNING,
- OSD_OUTPUT_CHANNEL_INFO,
- OSD_OUTPUT_CHANNEL_DEBUG,
- OSD_OUTPUT_CHANNEL_VERBOSE,
- OSD_OUTPUT_CHANNEL_LOG,
- OSD_OUTPUT_CHANNEL_COUNT
-};
+void osd_subst_env(std::string &dst, std::string const &src);
class osd_gpu
{
@@ -1014,6 +941,22 @@ public:
virtual void unbind_buffer(vertex_buffer_interface *vb) = 0;
};
+
+/// \defgroup osd_printf Diagnostic output functions
+/// \{
+
+// output channels
+enum osd_output_channel
+{
+ OSD_OUTPUT_CHANNEL_ERROR,
+ OSD_OUTPUT_CHANNEL_WARNING,
+ OSD_OUTPUT_CHANNEL_INFO,
+ OSD_OUTPUT_CHANNEL_DEBUG,
+ OSD_OUTPUT_CHANNEL_VERBOSE,
+ OSD_OUTPUT_CHANNEL_LOG,
+ OSD_OUTPUT_CHANNEL_COUNT
+};
+
class osd_output
{
public:
@@ -1037,35 +980,79 @@ private:
osd_output *m_chain = nullptr;
};
-
-// diagnostic output
void osd_vprintf_error(util::format_argument_pack<std::ostream> const &args);
void osd_vprintf_warning(util::format_argument_pack<std::ostream> const &args);
void osd_vprintf_info(util::format_argument_pack<std::ostream> const &args);
void osd_vprintf_verbose(util::format_argument_pack<std::ostream> const &args);
void osd_vprintf_debug(util::format_argument_pack<std::ostream> const &args);
+/// \brief Print error message
+///
+/// By default, error messages are sent to standard error. The relaxed
+/// format rules used by util::string_format apply.
+/// \param [in] fmt Message format string.
+/// \param [in] args Optional message format arguments.
+/// \sa util::string_format
template <typename Format, typename... Params> void osd_printf_error(Format &&fmt, Params &&...args)
{
return osd_vprintf_error(util::make_format_argument_pack(std::forward<Format>(fmt), std::forward<Params>(args)...));
}
+
+/// \brief Print warning message
+///
+/// By default, warning messages are sent to standard error. The
+/// relaxed format rules used by util::string_format apply.
+/// \param [in] fmt Message format string.
+/// \param [in] args Optional message format arguments.
+/// \sa util::string_format
template <typename Format, typename... Params> void osd_printf_warning(Format &&fmt, Params &&...args)
{
return osd_vprintf_warning(util::make_format_argument_pack(std::forward<Format>(fmt), std::forward<Params>(args)...));
}
+
+/// \brief Print informational message
+///
+/// By default, informational messages are sent to standard output.
+/// The relaxed format rules used by util::string_format apply.
+/// \param [in] fmt Message format string.
+/// \param [in] args Optional message format arguments.
+/// \sa util::string_format
template <typename Format, typename... Params> void osd_printf_info(Format &&fmt, Params &&...args)
{
return osd_vprintf_info(util::make_format_argument_pack(std::forward<Format>(fmt), std::forward<Params>(args)...));
}
+
+/// \brief Print verbose diagnostic message
+///
+/// Verbose diagnostic messages are disabled by default. If enabled,
+/// they are sent to standard output by default. The relaxed format
+/// rules used by util::string_format apply. Note that the format
+/// string and arguments will always be evaluated, even if verbose
+/// diagnostic messages are disabled.
+/// \param [in] fmt Message format string.
+/// \param [in] args Optional message format arguments.
+/// \sa util::string_format
template <typename Format, typename... Params> void osd_printf_verbose(Format &&fmt, Params &&...args)
{
return osd_vprintf_verbose(util::make_format_argument_pack(std::forward<Format>(fmt), std::forward<Params>(args)...));
}
+
+/// \brief Print debug message
+///
+/// By default, debug messages are sent to standard output for debug
+/// builds only. The relaxed format rules used by util::string_format
+/// apply. Note that the format string and arguments will always be
+/// evaluated, even if debug messages are disabled.
+/// \param [in] fmt Message format string.
+/// \param [in] args Optional message format arguments.
+/// \sa util::string_format
template <typename Format, typename... Params> void osd_printf_debug(Format &&fmt, Params &&...args)
{
return osd_vprintf_debug(util::make_format_argument_pack(std::forward<Format>(fmt), std::forward<Params>(args)...));
}
+/// \}
+
// returns command line arguments as an std::vector<std::string> in UTF-8
std::vector<std::string> osd_get_command_line(int argc, char *argv[]);