summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/devices/bus/a2bus/a2scsi.cpp2
-rw-r--r--src/devices/bus/a2bus/a2zipdrive.cpp107
-rw-r--r--src/devices/bus/a2bus/a2zipdrive.h18
-rw-r--r--src/devices/bus/astrocde/accessory.cpp112
-rw-r--r--src/devices/bus/astrocde/accessory.h99
-rw-r--r--src/devices/bus/astrocde/cassette.cpp91
-rw-r--r--src/devices/bus/astrocde/cassette.h18
-rw-r--r--src/devices/bus/astrocde/ctrl.cpp11
-rw-r--r--src/devices/bus/astrocde/ctrl.h57
-rw-r--r--src/devices/bus/astrocde/exp.cpp14
-rw-r--r--src/devices/bus/astrocde/exp.h4
-rw-r--r--src/devices/bus/astrocde/joy.h2
-rw-r--r--src/devices/bus/astrocde/lightpen.cpp87
-rw-r--r--src/devices/bus/astrocde/lightpen.h51
-rw-r--r--src/devices/bus/astrocde/ram.cpp61
-rw-r--r--src/devices/bus/astrocde/ram.h12
-rw-r--r--src/devices/bus/bbc/tube/tube.cpp12
-rw-r--r--src/devices/bus/bbc/tube/tube_32016.cpp210
-rw-r--r--src/devices/bus/bbc/tube/tube_32016.h71
-rw-r--r--src/devices/bus/bml3/bml3bus.h22
-rw-r--r--src/devices/bus/coco/coco_dcmodem.cpp5
-rw-r--r--src/devices/bus/coco/coco_orch90.cpp5
-rw-r--r--src/devices/bus/coco/coco_rs232.cpp5
-rw-r--r--src/devices/bus/coco/cococart.cpp6
-rw-r--r--src/devices/bus/cpc/cpc_rs232.cpp4
-rw-r--r--src/devices/bus/cpc/playcity.cpp4
-rw-r--r--src/devices/bus/hp_dio/hp98644.cpp4
-rw-r--r--src/devices/bus/isa/3c505.cpp4
-rw-r--r--src/devices/bus/isa/aha1542.cpp201
-rw-r--r--src/devices/bus/isa/aha1542.h54
-rw-r--r--src/devices/bus/isa/aha1542b.cpp401
-rw-r--r--src/devices/bus/isa/aha1542b.h59
-rw-r--r--src/devices/bus/isa/aha1542c.cpp387
-rw-r--r--src/devices/bus/isa/aha1542c.h96
-rw-r--r--src/devices/bus/isa/aha174x.cpp160
-rw-r--r--src/devices/bus/isa/aha174x.h61
-rw-r--r--src/devices/bus/isa/bt54x.cpp133
-rw-r--r--src/devices/bus/isa/bt54x.h43
-rw-r--r--src/devices/bus/isa/com.cpp8
-rw-r--r--src/devices/bus/isa/dcb.cpp70
-rw-r--r--src/devices/bus/isa/dcb.h43
-rw-r--r--src/devices/bus/isa/isa_cards.cpp18
-rw-r--r--src/devices/bus/isa/np600.cpp32
-rw-r--r--src/devices/bus/isa/np600.h5
-rw-r--r--src/devices/bus/isa/ultra12f.cpp64
-rw-r--r--src/devices/bus/isa/ultra12f.h38
-rw-r--r--src/devices/bus/mtx/sdx.cpp30
-rw-r--r--src/devices/bus/nes/konami.cpp14
-rw-r--r--src/devices/bus/nes/konami.h2
-rw-r--r--src/devices/bus/nes/mmc5.cpp16
-rw-r--r--src/devices/bus/nes/mmc5.h1
-rw-r--r--src/devices/bus/nes/namcot.cpp33
-rw-r--r--src/devices/bus/nes/namcot.h5
-rw-r--r--src/devices/bus/nubus/bootbug.cpp4
-rw-r--r--src/devices/bus/pc_kbd/pcat101.cpp331
-rw-r--r--src/devices/bus/pc_kbd/pcat101.h19
-rw-r--r--src/devices/bus/pofo/hpc102.cpp4
-rw-r--r--src/devices/bus/s100/wunderbus.cpp12
-rw-r--r--src/devices/bus/spectrum/exp.cpp5
-rw-r--r--src/devices/bus/spectrum/melodik.cpp2
-rw-r--r--src/devices/bus/spectrum/opus.cpp289
-rw-r--r--src/devices/bus/spectrum/opus.h75
-rw-r--r--src/devices/bus/svi3x8/expander/sv603.cpp8
-rw-r--r--src/devices/bus/svi3x8/slot/sv805.cpp4
-rw-r--r--src/devices/bus/vme/vme.cpp30
-rw-r--r--src/devices/bus/vme/vme.h1
-rw-r--r--src/devices/bus/vme/vme_mzr8300.cpp16
-rw-r--r--src/devices/bus/wangpc/mcc.cpp8
-rw-r--r--src/devices/bus/wangpc/wdc.cpp16
-rw-r--r--src/devices/cpu/h8/h83003.cpp3
-rw-r--r--src/devices/cpu/i386/cache.h46
-rw-r--r--src/devices/cpu/i386/i386.h2
-rw-r--r--src/devices/cpu/m68000/m68000.h17
-rw-r--r--src/devices/cpu/m68000/m68kcpu.cpp21
-rw-r--r--src/devices/cpu/m68000/m68kmmu.h2
-rw-r--r--src/devices/cpu/mcs51/mcs51.cpp12
-rw-r--r--src/devices/cpu/mcs51/mcs51.h4
-rw-r--r--src/devices/cpu/ns32000/ns32000.cpp160
-rw-r--r--src/devices/cpu/ns32000/ns32000.h149
-rw-r--r--src/devices/cpu/ns32000/ns32000dasm.cpp835
-rw-r--r--src/devices/cpu/ns32000/ns32000dasm.h117
-rw-r--r--src/devices/cpu/tms9900/tms9900.cpp8
-rw-r--r--src/devices/cpu/tms9900/tms9995.cpp8
-rw-r--r--src/devices/imagedev/flopdrv.cpp10
-rw-r--r--src/devices/imagedev/flopdrv.h2
-rw-r--r--src/devices/machine/68307.cpp8
-rw-r--r--src/devices/machine/68307.h2
-rw-r--r--src/devices/machine/74157.cpp20
-rw-r--r--src/devices/machine/74157.h17
-rw-r--r--src/devices/machine/aic6250.cpp17
-rw-r--r--src/devices/machine/aic6250.h9
-rw-r--r--src/devices/machine/f3853.cpp13
-rw-r--r--src/devices/machine/f3853.h2
-rw-r--r--src/devices/machine/fdc37c665gt.cpp8
-rw-r--r--src/devices/machine/fdc37c93x.cpp8
-rw-r--r--src/devices/machine/gen_latch.cpp26
-rw-r--r--src/devices/machine/gen_latch.h26
-rw-r--r--src/devices/machine/ins8154.cpp31
-rw-r--r--src/devices/machine/ins8154.h13
-rw-r--r--src/devices/machine/ins8250.cpp68
-rw-r--r--src/devices/machine/ins8250.h60
-rw-r--r--src/devices/machine/nscsi_cd.cpp16
-rw-r--r--src/devices/machine/spg110.cpp658
-rw-r--r--src/devices/machine/spg110.h190
-rw-r--r--src/devices/machine/spg110_video.cpp666
-rw-r--r--src/devices/machine/spg110_video.h171
-rw-r--r--src/devices/machine/spg2xx.cpp2109
-rw-r--r--src/devices/machine/spg2xx.h190
-rw-r--r--src/devices/machine/spg2xx_audio.h2
-rw-r--r--src/devices/machine/spg2xx_io.cpp1313
-rw-r--r--src/devices/machine/spg2xx_io.h183
-rw-r--r--src/devices/machine/spg2xx_sysdma.cpp117
-rw-r--r--src/devices/machine/spg2xx_sysdma.h46
-rw-r--r--src/devices/machine/spg2xx_video.cpp828
-rw-r--r--src/devices/machine/spg2xx_video.h137
-rw-r--r--src/devices/machine/tmp68301.cpp62
-rw-r--r--src/devices/machine/tmp68301.h24
-rw-r--r--src/devices/machine/tms5501.cpp3
-rw-r--r--src/devices/machine/upd765.cpp3
-rw-r--r--src/devices/machine/vrc5074.cpp4
-rw-r--r--src/devices/machine/z80ctc.cpp4
-rw-r--r--src/devices/machine/z80ctc.h4
-rw-r--r--src/devices/machine/z80dart.cpp8
-rw-r--r--src/devices/machine/z80dart.h26
-rw-r--r--src/devices/machine/z80sio.cpp8
-rw-r--r--src/devices/machine/z80sio.h28
-rw-r--r--src/devices/sound/c6280.cpp104
-rw-r--r--src/devices/sound/c6280.h9
-rw-r--r--src/devices/sound/es8712.cpp2
-rw-r--r--src/devices/sound/meg.cpp384
-rw-r--r--src/devices/sound/meg.h122
-rw-r--r--src/devices/sound/megd.cpp118
-rw-r--r--src/devices/sound/megd.h39
-rw-r--r--src/devices/sound/namco_163.cpp176
-rw-r--r--src/devices/sound/namco_163.h42
-rw-r--r--src/devices/sound/swp30.cpp61
-rw-r--r--src/devices/sound/swp30.h9
-rw-r--r--src/devices/sound/vrc6.cpp99
-rw-r--r--src/devices/sound/vrc6.h14
-rw-r--r--src/devices/sound/ym2413.cpp124
-rw-r--r--src/devices/sound/ym2413.h23
-rw-r--r--src/devices/video/mm5445.h4
-rw-r--r--src/devices/video/tms9927.cpp4
-rw-r--r--src/devices/video/tms9927.h2
-rw-r--r--src/devices/video/tms9928a.cpp12
-rw-r--r--src/emu/emupal.cpp36
-rw-r--r--src/emu/emupal.h60
-rw-r--r--src/emu/render.h2
-rw-r--r--src/emu/rendlay.cpp17
-rw-r--r--src/emu/xtal.cpp3
-rw-r--r--src/lib/formats/dsk_dsk.cpp6
-rw-r--r--src/lib/formats/opd_dsk.cpp61
-rw-r--r--src/lib/formats/opd_dsk.h38
-rw-r--r--src/lib/netlist/analog/nld_bjt.cpp622
-rw-r--r--src/lib/netlist/analog/nld_mosfet.cpp578
-rw-r--r--src/lib/netlist/analog/nld_mosfet.h21
-rw-r--r--src/lib/netlist/analog/nld_opamps.cpp8
-rw-r--r--src/lib/netlist/analog/nlid_twoterm.cpp98
-rw-r--r--src/lib/netlist/analog/nlid_twoterm.h246
-rw-r--r--src/lib/netlist/build/makefile6
-rw-r--r--src/lib/netlist/devices/net_lib.cpp1
-rw-r--r--src/lib/netlist/devices/net_lib.h1
-rw-r--r--src/lib/netlist/devices/nlid_proxy.cpp4
-rw-r--r--src/lib/netlist/macro/nlm_base.cpp14
-rw-r--r--src/lib/netlist/nl_base.cpp16
-rw-r--r--src/lib/netlist/nl_base.h31
-rw-r--r--src/lib/netlist/nl_config.h1
-rw-r--r--src/lib/netlist/nl_setup.cpp90
-rw-r--r--src/lib/netlist/nl_setup.h55
-rw-r--r--src/lib/netlist/nltypes.h13
-rw-r--r--src/lib/netlist/plib/palloc.h8
-rw-r--r--src/lib/netlist/plib/pfmtlog.h6
-rw-r--r--src/lib/netlist/plib/pparser.cpp2
-rw-r--r--src/lib/netlist/plib/ptime.h2
-rw-r--r--src/lib/netlist/plib/putil.h29
-rw-r--r--src/lib/netlist/solver/nld_matrix_solver.cpp2
-rw-r--r--src/lib/netlist/solver/nld_ms_direct2.h1
-rw-r--r--src/lib/netlist/solver/nld_solver.h2
-rw-r--r--src/mame/arcade.flt1
-rw-r--r--src/mame/audio/aztarac.cpp4
-rw-r--r--src/mame/audio/cage.cpp6
-rw-r--r--src/mame/audio/cchasm.cpp12
-rw-r--r--src/mame/audio/efo_zsu.cpp2
-rw-r--r--src/mame/audio/hyprolyb.cpp4
-rw-r--r--src/mame/audio/leland.cpp8
-rw-r--r--src/mame/audio/mario.cpp62
-rw-r--r--src/mame/audio/nichisnd.cpp4
-rw-r--r--src/mame/audio/rax.cpp8
-rw-r--r--src/mame/audio/redalert.cpp6
-rw-r--r--src/mame/audio/scramble.cpp2
-rw-r--r--src/mame/audio/snk6502.cpp3
-rw-r--r--src/mame/audio/snk6502.h1
-rw-r--r--src/mame/audio/starwars.cpp4
-rw-r--r--src/mame/audio/timeplt.cpp2
-rw-r--r--src/mame/drivers/a1supply.cpp10
-rw-r--r--src/mame/drivers/a5105.cpp17
-rw-r--r--src/mame/drivers/a51xx.cpp38
-rw-r--r--src/mame/drivers/abc1600.cpp6
-rw-r--r--src/mame/drivers/abc80.cpp2
-rw-r--r--src/mame/drivers/abc80x.cpp60
-rw-r--r--src/mame/drivers/ac1.cpp41
-rw-r--r--src/mame/drivers/acd.cpp5
-rw-r--r--src/mame/drivers/ace.cpp24
-rw-r--r--src/mame/drivers/aceex.cpp9
-rw-r--r--src/mame/drivers/acefruit.cpp28
-rw-r--r--src/mame/drivers/acesp.cpp12
-rw-r--r--src/mame/drivers/acommand.cpp36
-rw-r--r--src/mame/drivers/acrnsys.cpp2
-rw-r--r--src/mame/drivers/acrnsys1.cpp4
-rw-r--r--src/mame/drivers/acvirus.cpp9
-rw-r--r--src/mame/drivers/adm36.cpp202
-rw-r--r--src/mame/drivers/adp.cpp41
-rw-r--r--src/mame/drivers/aeroboto.cpp30
-rw-r--r--src/mame/drivers/aerofgt.cpp2
-rw-r--r--src/mame/drivers/agat.cpp16
-rw-r--r--src/mame/drivers/aim65.cpp4
-rw-r--r--src/mame/drivers/airbustr.cpp47
-rw-r--r--src/mame/drivers/airraid.cpp26
-rw-r--r--src/mame/drivers/albazc.cpp26
-rw-r--r--src/mame/drivers/albazg.cpp28
-rw-r--r--src/mame/drivers/aleisttl.cpp10
-rw-r--r--src/mame/drivers/alesis.cpp31
-rw-r--r--src/mame/drivers/alesis_qs.cpp9
-rw-r--r--src/mame/drivers/alg.cpp47
-rw-r--r--src/mame/drivers/alien.cpp26
-rw-r--r--src/mame/drivers/aliens.cpp2
-rw-r--r--src/mame/drivers/alinvade.cpp27
-rw-r--r--src/mame/drivers/alpha68k.cpp2
-rw-r--r--src/mame/drivers/alphasma.cpp27
-rw-r--r--src/mame/drivers/alphatro.cpp6
-rw-r--r--src/mame/drivers/alto1.cpp5
-rw-r--r--src/mame/drivers/alto2.cpp16
-rw-r--r--src/mame/drivers/alvg.cpp9
-rw-r--r--src/mame/drivers/amaticmg.cpp50
-rw-r--r--src/mame/drivers/ambush.cpp37
-rw-r--r--src/mame/drivers/amerihok.cpp65
-rw-r--r--src/mame/drivers/amico2k.cpp9
-rw-r--r--src/mame/drivers/amiga.cpp368
-rw-r--r--src/mame/drivers/ampoker2.cpp33
-rw-r--r--src/mame/drivers/ampro.cpp8
-rw-r--r--src/mame/drivers/ampscarp.cpp9
-rw-r--r--src/mame/drivers/amspdwy.cpp32
-rw-r--r--src/mame/drivers/amstr_pc.cpp17
-rw-r--r--src/mame/drivers/amstrad.cpp80
-rw-r--r--src/mame/drivers/amusco.cpp21
-rw-r--r--src/mame/drivers/amust.cpp14
-rw-r--r--src/mame/drivers/anes.cpp32
-rw-r--r--src/mame/drivers/apbeena.cpp85
-rw-r--r--src/mame/drivers/apc.cpp17
-rw-r--r--src/mame/drivers/apollo.cpp68
-rw-r--r--src/mame/drivers/apple1.cpp12
-rw-r--r--src/mame/drivers/apple2.cpp14
-rw-r--r--src/mame/drivers/apple2e.cpp4
-rw-r--r--src/mame/drivers/apple2gs.cpp6
-rw-r--r--src/mame/drivers/apple3.cpp2
-rw-r--r--src/mame/drivers/applix.cpp27
-rw-r--r--src/mame/drivers/apricot.cpp8
-rw-r--r--src/mame/drivers/apricotf.cpp31
-rw-r--r--src/mame/drivers/apricotp.cpp56
-rw-r--r--src/mame/drivers/aquarium.cpp42
-rw-r--r--src/mame/drivers/arachnid.cpp14
-rw-r--r--src/mame/drivers/arcadecl.cpp25
-rw-r--r--src/mame/drivers/argo.cpp23
-rw-r--r--src/mame/drivers/argox.cpp11
-rw-r--r--src/mame/drivers/arkanoid.cpp108
-rw-r--r--src/mame/drivers/armedf.cpp279
-rw-r--r--src/mame/drivers/arsystems.cpp32
-rw-r--r--src/mame/drivers/artmagic.cpp41
-rw-r--r--src/mame/drivers/asst128.cpp23
-rw-r--r--src/mame/drivers/asteroid.cpp18
-rw-r--r--src/mame/drivers/astrafr.cpp50
-rw-r--r--src/mame/drivers/astrcorp.cpp76
-rw-r--r--src/mame/drivers/astrof.cpp38
-rw-r--r--src/mame/drivers/astrohome.cpp23
-rw-r--r--src/mame/drivers/astropc.cpp11
-rw-r--r--src/mame/drivers/asuka.cpp2
-rw-r--r--src/mame/drivers/atarifb.cpp64
-rw-r--r--src/mame/drivers/atarig1.cpp26
-rw-r--r--src/mame/drivers/atarig42.cpp19
-rw-r--r--src/mame/drivers/atarigt.cpp20
-rw-r--r--src/mame/drivers/atarigx2.cpp18
-rw-r--r--src/mame/drivers/atarist.cpp16
-rw-r--r--src/mame/drivers/atarisy1.cpp42
-rw-r--r--src/mame/drivers/atarittl.cpp32
-rw-r--r--src/mame/drivers/atetris.cpp8
-rw-r--r--src/mame/drivers/atm.cpp13
-rw-r--r--src/mame/drivers/atom.cpp32
-rw-r--r--src/mame/drivers/atronic.cpp34
-rw-r--r--src/mame/drivers/avalnche.cpp31
-rw-r--r--src/mame/drivers/ave_arb.cpp50
-rw-r--r--src/mame/drivers/avigo.cpp20
-rw-r--r--src/mame/drivers/avt.cpp19
-rw-r--r--src/mame/drivers/aztarac.cpp30
-rw-r--r--src/mame/drivers/b16.cpp28
-rw-r--r--src/mame/drivers/b2m.cpp42
-rw-r--r--src/mame/drivers/backfire.cpp50
-rw-r--r--src/mame/drivers/badlands.cpp28
-rw-r--r--src/mame/drivers/badlandsbl.cpp28
-rw-r--r--src/mame/drivers/bailey.cpp10
-rw-r--r--src/mame/drivers/banctec.cpp23
-rw-r--r--src/mame/drivers/bankp.cpp31
-rw-r--r--src/mame/drivers/barata.cpp5
-rw-r--r--src/mame/drivers/batman.cpp20
-rw-r--r--src/mame/drivers/battlex.cpp38
-rw-r--r--src/mame/drivers/battlnts.cpp36
-rw-r--r--src/mame/drivers/bbusters.cpp2
-rw-r--r--src/mame/drivers/bcs3.cpp50
-rw-r--r--src/mame/drivers/beaminv.cpp23
-rw-r--r--src/mame/drivers/beathead.cpp24
-rw-r--r--src/mame/drivers/belatra.cpp9
-rw-r--r--src/mame/drivers/berzerk.cpp33
-rw-r--r--src/mame/drivers/bestleag.cpp41
-rw-r--r--src/mame/drivers/beta.cpp7
-rw-r--r--src/mame/drivers/bfcobra.cpp36
-rw-r--r--src/mame/drivers/bfm_ad5.cpp11
-rw-r--r--src/mame/drivers/bfm_sc2.cpp62
-rw-r--r--src/mame/drivers/bfm_swp.cpp21
-rw-r--r--src/mame/drivers/bgt.cpp11
-rw-r--r--src/mame/drivers/bigbord2.cpp16
-rw-r--r--src/mame/drivers/bigstrkb.cpp38
-rw-r--r--src/mame/drivers/bingo.cpp27
-rw-r--r--src/mame/drivers/bingoc.cpp62
-rw-r--r--src/mame/drivers/bingoman.cpp26
-rw-r--r--src/mame/drivers/bingowav.cpp6
-rw-r--r--src/mame/drivers/bionicc.cpp30
-rw-r--r--src/mame/drivers/bitgraph.cpp21
-rw-r--r--src/mame/drivers/bk.cpp8
-rw-r--r--src/mame/drivers/bking.cpp48
-rw-r--r--src/mame/drivers/blackt96.cpp41
-rw-r--r--src/mame/drivers/bladestl.cpp39
-rw-r--r--src/mame/drivers/blitz68k.cpp190
-rw-r--r--src/mame/drivers/blmbycar.cpp46
-rw-r--r--src/mame/drivers/blockout.cpp39
-rw-r--r--src/mame/drivers/blocktax.cpp24
-rw-r--r--src/mame/drivers/blstroid.cpp24
-rw-r--r--src/mame/drivers/blueprnt.cpp47
-rw-r--r--src/mame/drivers/blw700i.cpp23
-rw-r--r--src/mame/drivers/bmjr.cpp25
-rw-r--r--src/mame/drivers/bml3.cpp60
-rw-r--r--src/mame/drivers/bnstars.cpp67
-rw-r--r--src/mame/drivers/bntyhunt.cpp27
-rw-r--r--src/mame/drivers/bogeyman.cpp30
-rw-r--r--src/mame/drivers/bombjack.cpp4
-rw-r--r--src/mame/drivers/boogwing.cpp38
-rw-r--r--src/mame/drivers/bottom9.cpp2
-rw-r--r--src/mame/drivers/bowltry.cpp28
-rw-r--r--src/mame/drivers/boxer.cpp22
-rw-r--r--src/mame/drivers/br8641.cpp8
-rw-r--r--src/mame/drivers/bsktball.cpp24
-rw-r--r--src/mame/drivers/btime.cpp102
-rw-r--r--src/mame/drivers/bullet.cpp4
-rw-r--r--src/mame/drivers/busicom.cpp19
-rw-r--r--src/mame/drivers/buster.cpp25
-rw-r--r--src/mame/drivers/bw2.cpp2
-rw-r--r--src/mame/drivers/bwidow.cpp62
-rw-r--r--src/mame/drivers/bwing.cpp42
-rw-r--r--src/mame/drivers/by35.cpp32
-rw-r--r--src/mame/drivers/by68701.cpp9
-rw-r--r--src/mame/drivers/c10.cpp25
-rw-r--r--src/mame/drivers/c128.cpp14
-rw-r--r--src/mame/drivers/c64.cpp18
-rw-r--r--src/mame/drivers/c64dtv.cpp15
-rw-r--r--src/mame/drivers/c65.cpp28
-rw-r--r--src/mame/drivers/cabaret.cpp30
-rw-r--r--src/mame/drivers/calchase.cpp16
-rw-r--r--src/mame/drivers/calcune.cpp34
-rw-r--r--src/mame/drivers/calomega.cpp19
-rw-r--r--src/mame/drivers/calorie.cpp40
-rw-r--r--src/mame/drivers/camplynx.cpp34
-rw-r--r--src/mame/drivers/candela.cpp25
-rw-r--r--src/mame/drivers/canon_s80.cpp9
-rw-r--r--src/mame/drivers/canyon.cpp26
-rw-r--r--src/mame/drivers/capbowl.cpp39
-rw-r--r--src/mame/drivers/capcom.cpp9
-rw-r--r--src/mame/drivers/caprcyc.cpp10
-rw-r--r--src/mame/drivers/cardline.cpp29
-rw-r--r--src/mame/drivers/carjmbre.cpp32
-rw-r--r--src/mame/drivers/carpolo.cpp22
-rw-r--r--src/mame/drivers/carrera.cpp25
-rw-r--r--src/mame/drivers/casloopy.cpp29
-rw-r--r--src/mame/drivers/castle.cpp24
-rw-r--r--src/mame/drivers/caswin.cpp27
-rw-r--r--src/mame/drivers/cat.cpp24
-rw-r--r--src/mame/drivers/cave.cpp6
-rw-r--r--src/mame/drivers/cavepc.cpp29
-rw-r--r--src/mame/drivers/cball.cpp22
-rw-r--r--src/mame/drivers/cbasebal.cpp40
-rw-r--r--src/mame/drivers/cbm2.cpp36
-rw-r--r--src/mame/drivers/cbuster.cpp37
-rw-r--r--src/mame/drivers/cc40.cpp15
-rw-r--r--src/mame/drivers/cchance.cpp28
-rw-r--r--src/mame/drivers/cclimber.cpp88
-rw-r--r--src/mame/drivers/ccs2810.cpp4
-rw-r--r--src/mame/drivers/cdc721.cpp26
-rw-r--r--src/mame/drivers/cedar_magnet.cpp30
-rw-r--r--src/mame/drivers/cesclass.cpp29
-rw-r--r--src/mame/drivers/chaknpop.cpp28
-rw-r--r--src/mame/drivers/champbas.cpp170
-rw-r--r--src/mame/drivers/champbwl.cpp65
-rw-r--r--src/mame/drivers/chanbara.cpp26
-rw-r--r--src/mame/drivers/chance32.cpp33
-rw-r--r--src/mame/drivers/channelf.cpp112
-rw-r--r--src/mame/drivers/chaos.cpp13
-rw-r--r--src/mame/drivers/cheekyms.cpp28
-rw-r--r--src/mame/drivers/chicago.cpp10
-rw-r--r--src/mame/drivers/chihiro.cpp18
-rw-r--r--src/mame/drivers/chinagat.cpp2
-rw-r--r--src/mame/drivers/chsuper.cpp30
-rw-r--r--src/mame/drivers/circusc.cpp39
-rw-r--r--src/mame/drivers/cischeat.cpp215
-rw-r--r--src/mame/drivers/citycon.cpp26
-rw-r--r--src/mame/drivers/clayshoo.cpp26
-rw-r--r--src/mame/drivers/clcd.cpp24
-rw-r--r--src/mame/drivers/clowndwn.cpp20
-rw-r--r--src/mame/drivers/clpoker.cpp29
-rw-r--r--src/mame/drivers/clshroad.cpp72
-rw-r--r--src/mame/drivers/cmi.cpp35
-rw-r--r--src/mame/drivers/cmmb.cpp20
-rw-r--r--src/mame/drivers/cninja.cpp215
-rw-r--r--src/mame/drivers/cntsteer.cpp60
-rw-r--r--src/mame/drivers/cobra.cpp24
-rw-r--r--src/mame/drivers/coco12.cpp14
-rw-r--r--src/mame/drivers/coco3.cpp16
-rw-r--r--src/mame/drivers/cocoloco.cpp12
-rw-r--r--src/mame/drivers/coinmstr.cpp69
-rw-r--r--src/mame/drivers/coinmvga.cpp38
-rw-r--r--src/mame/drivers/combatsc.cpp2
-rw-r--r--src/mame/drivers/comebaby.cpp29
-rw-r--r--src/mame/drivers/commando.cpp18
-rw-r--r--src/mame/drivers/compgolf.cpp26
-rw-r--r--src/mame/drivers/compis.cpp10
-rw-r--r--src/mame/drivers/compucolor.cpp19
-rw-r--r--src/mame/drivers/comquest.cpp31
-rw-r--r--src/mame/drivers/comx35.cpp2
-rw-r--r--src/mame/drivers/contra.cpp30
-rw-r--r--src/mame/drivers/controlid.cpp19
-rw-r--r--src/mame/drivers/coolridr.cpp52
-rw-r--r--src/mame/drivers/cop01.cpp77
-rw-r--r--src/mame/drivers/copsnrob.cpp10
-rw-r--r--src/mame/drivers/corona.cpp175
-rw-r--r--src/mame/drivers/cosmicos.cpp3
-rw-r--r--src/mame/drivers/cps1.cpp6
-rw-r--r--src/mame/drivers/cps2.cpp57
-rw-r--r--src/mame/drivers/crbaloon.cpp31
-rw-r--r--src/mame/drivers/crimfght.cpp2
-rw-r--r--src/mame/drivers/crospang.cpp114
-rw-r--r--src/mame/drivers/crvision.cpp6
-rw-r--r--src/mame/drivers/csplayh5.cpp16
-rw-r--r--src/mame/drivers/cswat.cpp31
-rw-r--r--src/mame/drivers/ct486.cpp36
-rw-r--r--src/mame/drivers/cubo.cpp21
-rw-r--r--src/mame/drivers/cultures.cpp38
-rw-r--r--src/mame/drivers/cupidon.cpp21
-rw-r--r--src/mame/drivers/cvicny.cpp9
-rw-r--r--src/mame/drivers/cvs.cpp4
-rw-r--r--src/mame/drivers/cxhumax.cpp21
-rw-r--r--src/mame/drivers/cyberbal.cpp22
-rw-r--r--src/mame/drivers/cybertnk.cpp61
-rw-r--r--src/mame/drivers/cybstorm.cpp21
-rw-r--r--src/mame/drivers/cyclemb.cpp63
-rw-r--r--src/mame/drivers/cz101.cpp19
-rw-r--r--src/mame/drivers/d6800.cpp18
-rw-r--r--src/mame/drivers/d9final.cpp33
-rw-r--r--src/mame/drivers/dai.cpp27
-rw-r--r--src/mame/drivers/dambustr.cpp21
-rw-r--r--src/mame/drivers/darkmist.cpp27
-rw-r--r--src/mame/drivers/darkseal.cpp41
-rw-r--r--src/mame/drivers/daruma.cpp16
-rw-r--r--src/mame/drivers/dassault.cpp48
-rw-r--r--src/mame/drivers/datum.cpp11
-rw-r--r--src/mame/drivers/dblcrown.cpp26
-rw-r--r--src/mame/drivers/dblewing.cpp38
-rw-r--r--src/mame/drivers/dbz.cpp38
-rw-r--r--src/mame/drivers/dccons.cpp25
-rw-r--r--src/mame/drivers/dday.cpp24
-rw-r--r--src/mame/drivers/ddayjlc.cpp32
-rw-r--r--src/mame/drivers/ddealer.cpp31
-rw-r--r--src/mame/drivers/ddenlovr.cpp207
-rw-r--r--src/mame/drivers/ddragon.cpp8
-rw-r--r--src/mame/drivers/ddragon3.cpp108
-rw-r--r--src/mame/drivers/ddribble.cpp57
-rw-r--r--src/mame/drivers/dec0.cpp8
-rw-r--r--src/mame/drivers/dec8.cpp2
-rw-r--r--src/mame/drivers/deco156.cpp68
-rw-r--r--src/mame/drivers/deco32.cpp12
-rw-r--r--src/mame/drivers/deco_ld.cpp2
-rw-r--r--src/mame/drivers/deco_mlc.cpp70
-rw-r--r--src/mame/drivers/decocass.cpp177
-rw-r--r--src/mame/drivers/decstation.cpp10
-rw-r--r--src/mame/drivers/decwritr.cpp35
-rw-r--r--src/mame/drivers/deshoros.cpp26
-rw-r--r--src/mame/drivers/destroyr.cpp24
-rw-r--r--src/mame/drivers/dfruit.cpp28
-rw-r--r--src/mame/drivers/dgpix.cpp25
-rw-r--r--src/mame/drivers/diablo1300.cpp11
-rw-r--r--src/mame/drivers/didact.cpp4
-rw-r--r--src/mame/drivers/dietgo.cpp32
-rw-r--r--src/mame/drivers/digel804.cpp14
-rw-r--r--src/mame/drivers/digijet.cpp9
-rw-r--r--src/mame/drivers/dim68k.cpp24
-rw-r--r--src/mame/drivers/divebomb.cpp42
-rw-r--r--src/mame/drivers/diverboy.cpp35
-rw-r--r--src/mame/drivers/djboy.cpp70
-rw-r--r--src/mame/drivers/djmain.cpp58
-rw-r--r--src/mame/drivers/dkmb.cpp24
-rw-r--r--src/mame/drivers/dkong.cpp84
-rw-r--r--src/mame/drivers/dlair2.cpp28
-rw-r--r--src/mame/drivers/dmax8000.cpp11
-rw-r--r--src/mame/drivers/dmndrby.cpp33
-rw-r--r--src/mame/drivers/dms5000.cpp27
-rw-r--r--src/mame/drivers/dogfgt.cpp30
-rw-r--r--src/mame/drivers/dominob.cpp28
-rw-r--r--src/mame/drivers/dooyong.cpp294
-rw-r--r--src/mame/drivers/dorachan.cpp24
-rw-r--r--src/mame/drivers/dotrikun.cpp23
-rw-r--r--src/mame/drivers/dragon.cpp63
-rw-r--r--src/mame/drivers/dragrace.cpp30
-rw-r--r--src/mame/drivers/dreambal.cpp31
-rw-r--r--src/mame/drivers/dreamwld.cpp58
-rw-r--r--src/mame/drivers/drgnmst.cpp36
-rw-r--r--src/mame/drivers/dribling.cpp30
-rw-r--r--src/mame/drivers/drtomy.cpp29
-rw-r--r--src/mame/drivers/drw80pkr.cpp19
-rw-r--r--src/mame/drivers/dual68.cpp23
-rw-r--r--src/mame/drivers/duet16.cpp17
-rw-r--r--src/mame/drivers/dunhuang.cpp33
-rw-r--r--src/mame/drivers/dvk_kcgd.cpp13
-rw-r--r--src/mame/drivers/dvk_ksm.cpp13
-rw-r--r--src/mame/drivers/dynadice.cpp32
-rw-r--r--src/mame/drivers/egghunt.cpp2
-rw-r--r--src/mame/drivers/equites.cpp2
-rw-r--r--src/mame/drivers/esd16.cpp290
-rw-r--r--src/mame/drivers/espial.cpp2
-rw-r--r--src/mame/drivers/exterm.cpp4
-rw-r--r--src/mame/drivers/fantland.cpp2
-rw-r--r--src/mame/drivers/fcrash.cpp4
-rw-r--r--src/mame/drivers/fidel_as12.cpp2
-rw-r--r--src/mame/drivers/fidel_cc1.cpp221
-rw-r--r--src/mame/drivers/fidel_cc10.cpp8
-rw-r--r--src/mame/drivers/fidel_cc7.cpp14
-rw-r--r--src/mame/drivers/fidel_eag68k.cpp176
-rw-r--r--src/mame/drivers/fidel_elite.cpp5
-rw-r--r--src/mame/drivers/fidel_excel.cpp2
-rw-r--r--src/mame/drivers/fidel_sc12.cpp3
-rw-r--r--src/mame/drivers/fidel_vcc.cpp2
-rw-r--r--src/mame/drivers/finalizr.cpp32
-rw-r--r--src/mame/drivers/firebeat.cpp4
-rw-r--r--src/mame/drivers/firetrap.cpp2
-rw-r--r--src/mame/drivers/flipjack.cpp2
-rw-r--r--src/mame/drivers/flkatck.cpp2
-rw-r--r--src/mame/drivers/flower.cpp2
-rw-r--r--src/mame/drivers/freekick.cpp129
-rw-r--r--src/mame/drivers/fromanc2.cpp4
-rw-r--r--src/mame/drivers/fs3216.cpp12
-rw-r--r--src/mame/drivers/funkyjet.cpp1
-rw-r--r--src/mame/drivers/funworld.cpp921
-rw-r--r--src/mame/drivers/fuukifg2.cpp2
-rw-r--r--src/mame/drivers/gaelco2.cpp236
-rw-r--r--src/mame/drivers/gaelco3d.cpp2
-rw-r--r--src/mame/drivers/galaxian.cpp42
-rw-r--r--src/mame/drivers/galivan.cpp4
-rw-r--r--src/mame/drivers/galspnbl.cpp2
-rw-r--r--src/mame/drivers/gamemachine.cpp4
-rw-r--r--src/mame/drivers/gameplan.cpp3
-rw-r--r--src/mame/drivers/ghosteo.cpp2
-rw-r--r--src/mame/drivers/gladiatr.cpp8
-rw-r--r--src/mame/drivers/go2000.cpp2
-rw-r--r--src/mame/drivers/goal92.cpp2
-rw-r--r--src/mame/drivers/gsword.cpp2
-rw-r--r--src/mame/drivers/halleys.cpp2
-rw-r--r--src/mame/drivers/hh_hmcs40.cpp4
-rw-r--r--src/mame/drivers/hh_pic16.cpp2
-rw-r--r--src/mame/drivers/hh_sm510.cpp206
-rw-r--r--src/mame/drivers/hh_tms1k.cpp65
-rw-r--r--src/mame/drivers/himesiki.cpp2
-rw-r--r--src/mame/drivers/homedata.cpp4
-rw-r--r--src/mame/drivers/hotblock.cpp4
-rw-r--r--src/mame/drivers/hvyunit.cpp4
-rw-r--r--src/mame/drivers/inder.cpp4
-rw-r--r--src/mame/drivers/invqix.cpp2
-rw-r--r--src/mame/drivers/ironhors.cpp2
-rw-r--r--src/mame/drivers/isbc8010.cpp6
-rw-r--r--src/mame/drivers/itech8.cpp2
-rw-r--r--src/mame/drivers/jangou.cpp4
-rw-r--r--src/mame/drivers/joystand.cpp18
-rw-r--r--src/mame/drivers/kas89.cpp6
-rw-r--r--src/mame/drivers/kchamp.cpp88
-rw-r--r--src/mame/drivers/kickgoal.cpp4
-rw-r--r--src/mame/drivers/kingobox.cpp2
-rw-r--r--src/mame/drivers/kingpin.cpp2
-rw-r--r--src/mame/drivers/kncljoe.cpp2
-rw-r--r--src/mame/drivers/krz2000.cpp7
-rw-r--r--src/mame/drivers/ksayakyu.cpp4
-rw-r--r--src/mame/drivers/ladyfrog.cpp2
-rw-r--r--src/mame/drivers/lasso.cpp2
-rw-r--r--src/mame/drivers/limenko.cpp4
-rw-r--r--src/mame/drivers/looping.cpp2
-rw-r--r--src/mame/drivers/lordgun.cpp4
-rw-r--r--src/mame/drivers/ltcasino.cpp1008
-rw-r--r--src/mame/drivers/lwings.cpp4
-rw-r--r--src/mame/drivers/m63.cpp2
-rw-r--r--src/mame/drivers/m72.cpp65
-rw-r--r--src/mame/drivers/macrossp.cpp4
-rw-r--r--src/mame/drivers/magmax.cpp2
-rw-r--r--src/mame/drivers/matmania.cpp4
-rw-r--r--src/mame/drivers/mazerbla.cpp4
-rw-r--r--src/mame/drivers/megasys1.cpp2
-rw-r--r--src/mame/drivers/meijinsn.cpp2
-rw-r--r--src/mame/drivers/mephisto.cpp16
-rw-r--r--src/mame/drivers/metro.cpp7
-rw-r--r--src/mame/drivers/mgames.cpp62
-rw-r--r--src/mame/drivers/mikromik.cpp233
-rw-r--r--src/mame/drivers/mil4000.cpp2
-rw-r--r--src/mame/drivers/mirage.cpp1
-rw-r--r--src/mame/drivers/mirax.cpp2
-rw-r--r--src/mame/drivers/mitchell.cpp2
-rw-r--r--src/mame/drivers/mk14.cpp4
-rw-r--r--src/mame/drivers/mmm.cpp33
-rw-r--r--src/mame/drivers/model1.cpp2
-rw-r--r--src/mame/drivers/ms32.cpp4
-rw-r--r--src/mame/drivers/msisaac.cpp2
-rw-r--r--src/mame/drivers/mugsmash.cpp2
-rw-r--r--src/mame/drivers/namcos1.cpp12
-rw-r--r--src/mame/drivers/namcos2.cpp196
-rw-r--r--src/mame/drivers/nbmj8991.cpp2
-rw-r--r--src/mame/drivers/nbmj9195.cpp2
-rw-r--r--src/mame/drivers/neogeo.cpp6
-rw-r--r--src/mame/drivers/neoprint.cpp6
-rw-r--r--src/mame/drivers/niyanpai.cpp18
-rw-r--r--src/mame/drivers/nmg5.cpp2
-rw-r--r--src/mame/drivers/nmk16.cpp68
-rw-r--r--src/mame/drivers/novag_delta1.cpp43
-rw-r--r--src/mame/drivers/nyny.cpp6
-rw-r--r--src/mame/drivers/olibochu.cpp2
-rw-r--r--src/mame/drivers/omegrace.cpp2
-rw-r--r--src/mame/drivers/oneshot.cpp224
-rw-r--r--src/mame/drivers/onyx.cpp16
-rw-r--r--src/mame/drivers/othello.cpp4
-rw-r--r--src/mame/drivers/pasopia7.cpp4
-rw-r--r--src/mame/drivers/pbaction.cpp12
-rw-r--r--src/mame/drivers/pc1512.cpp2
-rw-r--r--src/mame/drivers/pcktgal.cpp2
-rw-r--r--src/mame/drivers/pgm.cpp4
-rw-r--r--src/mame/drivers/pktgaldx.cpp1
-rw-r--r--src/mame/drivers/pokechmp.cpp2
-rw-r--r--src/mame/drivers/polepos.cpp2
-rw-r--r--src/mame/drivers/pong.cpp24
-rw-r--r--src/mame/drivers/prehisle.cpp2
-rw-r--r--src/mame/drivers/proconn.cpp8
-rw-r--r--src/mame/drivers/pturn.cpp3
-rw-r--r--src/mame/drivers/quasar.cpp6
-rw-r--r--src/mame/drivers/quizpun2.cpp2
-rw-r--r--src/mame/drivers/r2dtank.cpp8
-rw-r--r--src/mame/drivers/r2dx_v33.cpp2
-rw-r--r--src/mame/drivers/rainbow.cpp2
-rw-r--r--src/mame/drivers/rastan.cpp2
-rw-r--r--src/mame/drivers/realbrk.cpp16
-rw-r--r--src/mame/drivers/retofinv.cpp2
-rw-r--r--src/mame/drivers/rockrage.cpp2
-rw-r--r--src/mame/drivers/rohga.cpp8
-rw-r--r--src/mame/drivers/ron.cpp4
-rw-r--r--src/mame/drivers/roul.cpp2
-rw-r--r--src/mame/drivers/royalmah.cpp2
-rw-r--r--src/mame/drivers/rt1715.cpp18
-rw-r--r--src/mame/drivers/sandscrp.cpp4
-rw-r--r--src/mame/drivers/sauro.cpp6
-rw-r--r--src/mame/drivers/sc2.cpp4
-rw-r--r--src/mame/drivers/scotrsht.cpp2
-rw-r--r--src/mame/drivers/scyclone.cpp8
-rw-r--r--src/mame/drivers/sega_beena.cpp58
-rw-r--r--src/mame/drivers/segahang.cpp2
-rw-r--r--src/mame/drivers/segas16a.cpp2
-rw-r--r--src/mame/drivers/segas16b.cpp2
-rw-r--r--src/mame/drivers/segas18.cpp3
-rw-r--r--src/mame/drivers/seicupbl.cpp66
-rw-r--r--src/mame/drivers/seta.cpp23
-rw-r--r--src/mame/drivers/seta2.cpp42
-rw-r--r--src/mame/drivers/sf.cpp2
-rw-r--r--src/mame/drivers/shootout.cpp8
-rw-r--r--src/mame/drivers/sigmab98.cpp12
-rw-r--r--src/mame/drivers/silvmil.cpp244
-rw-r--r--src/mame/drivers/simpl156.cpp1
-rw-r--r--src/mame/drivers/skyfox.cpp2
-rw-r--r--src/mame/drivers/sliver.cpp2
-rw-r--r--src/mame/drivers/snk.cpp8
-rw-r--r--src/mame/drivers/snk68.cpp2
-rw-r--r--src/mame/drivers/solomon.cpp2
-rw-r--r--src/mame/drivers/spec128.cpp20
-rw-r--r--src/mame/drivers/spectrum.cpp6
-rw-r--r--src/mame/drivers/speedspn.cpp2
-rw-r--r--src/mame/drivers/spg110.cpp298
-rw-r--r--src/mame/drivers/spinb.cpp8
-rw-r--r--src/mame/drivers/spy.cpp2
-rw-r--r--src/mame/drivers/srmp6.cpp2
-rw-r--r--src/mame/drivers/sshangha.cpp5
-rw-r--r--src/mame/drivers/sslam.cpp10
-rw-r--r--src/mame/drivers/statriv2.cpp135
-rw-r--r--src/mame/drivers/stfight.cpp73
-rw-r--r--src/mame/drivers/stratos.cpp4
-rw-r--r--src/mame/drivers/stuntair.cpp2
-rw-r--r--src/mame/drivers/suna16.cpp2
-rw-r--r--src/mame/drivers/suna8.cpp6
-rw-r--r--src/mame/drivers/supbtime.cpp1
-rw-r--r--src/mame/drivers/supduck.cpp10
-rw-r--r--src/mame/drivers/suprridr.cpp2
-rw-r--r--src/mame/drivers/system1.cpp6
-rw-r--r--src/mame/drivers/system16.cpp8
-rw-r--r--src/mame/drivers/tatsumi.cpp2
-rw-r--r--src/mame/drivers/tbowl.cpp2
-rw-r--r--src/mame/drivers/tecmo.cpp38
-rw-r--r--src/mame/drivers/tehkanwc.cpp4
-rw-r--r--src/mame/drivers/terracre.cpp4
-rw-r--r--src/mame/drivers/tetrisp2.cpp2
-rw-r--r--src/mame/drivers/tigeroad.cpp4
-rw-r--r--src/mame/drivers/tiki100.cpp8
-rw-r--r--src/mame/drivers/tispeak.cpp4
-rw-r--r--src/mame/drivers/titan_soc.cpp121
-rw-r--r--src/mame/drivers/toaplan1.cpp620
-rw-r--r--src/mame/drivers/toaplan2.cpp4
-rw-r--r--src/mame/drivers/toki.cpp2
-rw-r--r--src/mame/drivers/tryout.cpp2
-rw-r--r--src/mame/drivers/tsamurai.cpp42
-rw-r--r--src/mame/drivers/tumbleb.cpp91
-rw-r--r--src/mame/drivers/twincobr.cpp16
-rw-r--r--src/mame/drivers/uapce.cpp18
-rw-r--r--src/mame/drivers/unixpc.cpp2
-rw-r--r--src/mame/drivers/unkpoker.cpp173
-rw-r--r--src/mame/drivers/vamphalf.cpp2
-rw-r--r--src/mame/drivers/vaportra.cpp2
-rw-r--r--src/mame/drivers/vega.cpp9
-rw-r--r--src/mame/drivers/vegaeo.cpp2
-rw-r--r--src/mame/drivers/vii.cpp172
-rw-r--r--src/mame/drivers/vt100.cpp4
-rw-r--r--src/mame/drivers/wardner.cpp40
-rw-r--r--src/mame/drivers/wc90b.cpp2
-rw-r--r--src/mame/drivers/witch.cpp2
-rw-r--r--src/mame/drivers/wpc_dcs.cpp14
-rw-r--r--src/mame/drivers/wyvernf0.cpp2
-rw-r--r--src/mame/drivers/xavix.cpp364
-rw-r--r--src/mame/drivers/xbox.cpp12
-rw-r--r--src/mame/drivers/ymmu100.cpp444
-rw-r--r--src/mame/drivers/yunsun16.cpp2
-rw-r--r--src/mame/drivers/zerozone.cpp2
-rw-r--r--src/mame/drivers/zodiack.cpp2
-rw-r--r--src/mame/includes/apollo.h18
-rw-r--r--src/mame/includes/astrocde.h1
-rw-r--r--src/mame/includes/canyon.h2
-rw-r--r--src/mame/includes/cninja.h1
-rw-r--r--src/mame/includes/crospang.h64
-rw-r--r--src/mame/includes/ddragon.h2
-rw-r--r--src/mame/includes/dec0.h1
-rw-r--r--src/mame/includes/dragrace.h2
-rw-r--r--src/mame/includes/esd16.h78
-rw-r--r--src/mame/includes/fidelbase.h7
-rw-r--r--src/mame/includes/funworld.h9
-rw-r--r--src/mame/includes/gaelco2.h66
-rw-r--r--src/mame/includes/galaxian.h2
-rw-r--r--src/mame/includes/hh_tms1k.h4
-rw-r--r--src/mame/includes/m72.h4
-rw-r--r--src/mame/includes/mikromik.h13
-rw-r--r--src/mame/includes/ms32.h4
-rw-r--r--src/mame/includes/namcos1.h85
-rw-r--r--src/mame/includes/niyanpai.h4
-rw-r--r--src/mame/includes/nmk16.h2
-rw-r--r--src/mame/includes/oneshot.h57
-rw-r--r--src/mame/includes/realbrk.h4
-rw-r--r--src/mame/includes/seta.h4
-rw-r--r--src/mame/includes/seta2.h2
-rw-r--r--src/mame/includes/spectrum.h2
-rw-r--r--src/mame/includes/toaplan1.h292
-rw-r--r--src/mame/includes/tumbleb.h29
-rw-r--r--src/mame/includes/twincobr.h116
-rw-r--r--src/mame/includes/xavix.h106
-rw-r--r--src/mame/layout/aci_boris.lay27
-rw-r--r--src/mame/layout/alphie.lay38
-rw-r--r--src/mame/layout/ave_arb.lay88
-rw-r--r--src/mame/layout/breakout.lay6
-rw-r--r--src/mame/layout/cc40.lay12
-rw-r--r--src/mame/layout/chessmst.lay76
-rw-r--r--src/mame/layout/chessmstdm.lay52
-rw-r--r--src/mame/layout/ck_master.lay24
-rw-r--r--src/mame/layout/copycat.lay74
-rw-r--r--src/mame/layout/copycatm2.lay31
-rw-r--r--src/mame/layout/ctstein.lay49
-rw-r--r--src/mame/layout/cxg_ch2001.lay30
-rw-r--r--src/mame/layout/fidel_acr.lay100
-rw-r--r--src/mame/layout/fidel_as12.lay24
-rw-r--r--src/mame/layout/fidel_cc1.lay145
-rw-r--r--src/mame/layout/fidel_chesster.lay28
-rw-r--r--src/mame/layout/fidel_csc.lay24
-rw-r--r--src/mame/layout/fidel_des.lay24
-rw-r--r--src/mame/layout/fidel_desdis.lay28
-rw-r--r--src/mame/layout/fidel_desdis_68kg.lay28
-rw-r--r--src/mame/layout/fidel_desdis_68kr.lay28
-rw-r--r--src/mame/layout/fidel_eag.lay46
-rw-r--r--src/mame/layout/fidel_eag_68k.lay46
-rw-r--r--src/mame/layout/fidel_eas.lay24
-rw-r--r--src/mame/layout/fidel_eas_priv.lay26
-rw-r--r--src/mame/layout/fidel_ex.lay24
-rw-r--r--src/mame/layout/fidel_ex_68k.lay24
-rw-r--r--src/mame/layout/fidel_exd.lay24
-rw-r--r--src/mame/layout/fidel_pc.lay54
-rw-r--r--src/mame/layout/fidel_playmatic.lay24
-rw-r--r--src/mame/layout/fidel_sc12.lay24
-rw-r--r--src/mame/layout/fidel_sc6.lay24
-rw-r--r--src/mame/layout/fidel_sc8.lay24
-rw-r--r--src/mame/layout/fidel_sc9.lay24
-rw-r--r--src/mame/layout/fidel_su9.lay24
-rw-r--r--src/mame/layout/fidel_vsc.lay24
-rw-r--r--src/mame/layout/ltcasinn.lay43
-rw-r--r--src/mame/layout/ltcasino.lay64
-rw-r--r--src/mame/layout/matchme.lay131
-rw-r--r--src/mame/layout/matchnum.lay44
-rw-r--r--src/mame/layout/mephisto_academy.lay24
-rw-r--r--src/mame/layout/mephisto_lcd.lay24
-rw-r--r--src/mame/layout/mephisto_megaiv.lay16
-rw-r--r--src/mame/layout/mephisto_milano.lay24
-rw-r--r--src/mame/layout/mephisto_modena.lay24
-rw-r--r--src/mame/layout/mephisto_mondial2.lay12
-rw-r--r--src/mame/layout/mephisto_montec.lay16
-rw-r--r--src/mame/layout/mephisto_smondial2.lay16
-rw-r--r--src/mame/layout/novag_cforte.lay32
-rw-r--r--src/mame/layout/novag_delta1.lay283
-rw-r--r--src/mame/layout/novag_diablo68k.lay24
-rw-r--r--src/mame/layout/novag_presto.lay24
-rw-r--r--src/mame/layout/novag_scorpio68k.lay24
-rw-r--r--src/mame/layout/novag_sexpert.lay24
-rw-r--r--src/mame/layout/novag_sforte.lay32
-rw-r--r--src/mame/layout/novag_supercon.lay48
-rw-r--r--src/mame/layout/risc2500.lay100
-rw-r--r--src/mame/layout/sc2.lay180
-rw-r--r--src/mame/layout/simon.lay94
-rw-r--r--src/mame/layout/ssimon.lay184
-rw-r--r--src/mame/layout/ti74.lay12
-rw-r--r--src/mame/layout/ti95.lay6
-rw-r--r--src/mame/layout/touchme.lay115
-rw-r--r--src/mame/layout/zodiac.lay178
-rw-r--r--src/mame/machine/ajax.cpp2
-rw-r--r--src/mame/machine/apollo.cpp8
-rw-r--r--src/mame/machine/apollo_kbd.cpp19
-rw-r--r--src/mame/machine/apple3.cpp4
-rw-r--r--src/mame/machine/bublbobl.cpp2
-rw-r--r--src/mame/machine/decocass.cpp8
-rw-r--r--src/mame/machine/fidelbase.cpp52
-rw-r--r--src/mame/machine/gaelco2.cpp68
-rw-r--r--src/mame/machine/gdrom.cpp2
-rw-r--r--src/mame/machine/leland.cpp4
-rw-r--r--src/mame/machine/midyunit.cpp2
-rw-r--r--src/mame/machine/namcos1.cpp273
-rw-r--r--src/mame/machine/nl_breakout.cpp8
-rw-r--r--src/mame/machine/nl_rebound.cpp4
-rw-r--r--src/mame/machine/segacrp2_device.cpp43
-rw-r--r--src/mame/machine/seibucop/seibucop_dma.hxx2
-rw-r--r--src/mame/machine/thomflop.cpp25
-rw-r--r--src/mame/machine/tnzs.cpp2
-rw-r--r--src/mame/machine/toaplan1.cpp134
-rw-r--r--src/mame/machine/twincobr.cpp39
-rw-r--r--src/mame/machine/xavix.cpp240
-rw-r--r--src/mame/machine/xavix_adc.cpp100
-rw-r--r--src/mame/machine/xavix_adc.h50
-rw-r--r--src/mame/machine/xavix_anport.cpp81
-rw-r--r--src/mame/machine/xavix_anport.h41
-rw-r--r--src/mame/machine/xavix_math.cpp171
-rw-r--r--src/mame/machine/xavix_math.h34
-rw-r--r--src/mame/machine/xbox.cpp2
-rw-r--r--src/mame/mame.lst36
-rw-r--r--src/mame/mess.flt4
-rw-r--r--src/mame/video/astrocde.cpp8
-rw-r--r--src/mame/video/cischeat.cpp2
-rw-r--r--src/mame/video/cninja.cpp13
-rw-r--r--src/mame/video/cps1.cpp8
-rw-r--r--src/mame/video/crospang.cpp38
-rw-r--r--src/mame/video/decbac06.cpp14
-rw-r--r--src/mame/video/deco16ic.cpp19
-rw-r--r--src/mame/video/deco16ic.h5
-rw-r--r--src/mame/video/esd16.cpp106
-rw-r--r--src/mame/video/flstory.cpp4
-rw-r--r--src/mame/video/gaelco2.cpp247
-rw-r--r--src/mame/video/ginganin.cpp2
-rw-r--r--src/mame/video/itech32.cpp2
-rw-r--r--src/mame/video/ladyfrog.cpp4
-rw-r--r--src/mame/video/liberate.cpp6
-rw-r--r--src/mame/video/m92.cpp2
-rw-r--r--src/mame/video/megasys1.cpp6
-rw-r--r--src/mame/video/midtunit.cpp4
-rw-r--r--src/mame/video/midtview.ipp4
-rw-r--r--src/mame/video/mitchell.cpp2
-rw-r--r--src/mame/video/namcos1.cpp53
-rw-r--r--src/mame/video/nova2001.cpp6
-rw-r--r--src/mame/video/nycaptor.cpp4
-rw-r--r--src/mame/video/oneshot.cpp96
-rw-r--r--src/mame/video/psikyosh.cpp2
-rw-r--r--src/mame/video/seta2.cpp5
-rw-r--r--src/mame/video/system1.cpp2
-rw-r--r--src/mame/video/toaplan1.cpp687
-rw-r--r--src/mame/video/toaplan_scu.cpp58
-rw-r--r--src/mame/video/toaplan_scu.h4
-rw-r--r--src/mame/video/twincobr.cpp144
-rw-r--r--src/osd/modules/debugger/osx/disassemblyviewer.mm1
-rw-r--r--src/osd/modules/debugger/osx/memoryviewer.mm1
-rw-r--r--src/osd/modules/render/bgfx/shaders/chains/xbr/fs_xbr-lv3-noblend.sc6
-rw-r--r--src/osd/modules/render/drawogl.cpp32
-rw-r--r--src/tools/imgtool/filtbas.cpp2
-rw-r--r--src/tools/unidasm.cpp2
904 files changed, 26866 insertions, 16139 deletions
diff --git a/src/devices/bus/a2bus/a2scsi.cpp b/src/devices/bus/a2bus/a2scsi.cpp
index 014414e7e98..988ebfd0096 100644
--- a/src/devices/bus/a2bus/a2scsi.cpp
+++ b/src/devices/bus/a2bus/a2scsi.cpp
@@ -74,7 +74,7 @@ void a2bus_scsi_device::device_add_mconfig(machine_config &config)
{
NSCSI_BUS(config, m_scsibus);
NSCSI_CONNECTOR(config, "scsibus:0", scsi_devices, nullptr, false);
- NSCSI_CONNECTOR(config, "scsibus:1", scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsibus:1", scsi_devices, "cdrom", false);
NSCSI_CONNECTOR(config, "scsibus:2", scsi_devices, nullptr, false);
NSCSI_CONNECTOR(config, "scsibus:3", scsi_devices, nullptr, false);
NSCSI_CONNECTOR(config, "scsibus:4", scsi_devices, nullptr, false);
diff --git a/src/devices/bus/a2bus/a2zipdrive.cpp b/src/devices/bus/a2bus/a2zipdrive.cpp
index aaeb6ed6219..41034fab231 100644
--- a/src/devices/bus/a2bus/a2zipdrive.cpp
+++ b/src/devices/bus/a2bus/a2zipdrive.cpp
@@ -2,16 +2,19 @@
// copyright-holders:R. Belmont
/*********************************************************************
- a2zipdrive.c
+ a2zipdrive.cpp
ZIP Technologies ZipDrive IDE card
+ Parsons Engineering Focus Drive IDE card
- NOTE: No known dump exists of the formatter utility and the
+ These cards are very, very similar. Maybe Parsons designed both?
+
+ NOTE: No known dump exists of the Zip formatter utility and the
format of the custom partition record (block 0) that the card
expects has not yet been determined, so this is largely untested
and will work only with a drive dump from real h/w.
- PLEASE use it only on a backup copy of said dump and contact MESSdev
+ PLEASE use it only on a backup copy of said dump and contact MAMEdev
if you have one!
Partition block format:
@@ -29,6 +32,7 @@
//**************************************************************************
DEFINE_DEVICE_TYPE(A2BUS_ZIPDRIVE, a2bus_zipdrive_device, "a2zipdrv", "Zip Technologies ZipDrive")
+DEFINE_DEVICE_TYPE(A2BUS_FOCUSDRIVE, a2bus_focusdrive_device, "a2focdrv", "Parsons Engineering Focus Drive")
#define ZIPDRIVE_ROM_REGION "zipdrive_rom"
#define ZIPDRIVE_ATA_TAG "zipdrive_ata"
@@ -38,6 +42,11 @@ ROM_START( zipdrive )
ROM_LOAD( "zip drive - rom.bin", 0x000000, 0x002000, CRC(fd800a40) SHA1(46636bfed88c864139e3d2826661908a8c07c459) )
ROM_END
+ROM_START( focusdrive )
+ ROM_REGION(0x2000, ZIPDRIVE_ROM_REGION, 0)
+ ROM_LOAD( "focusrom.bin", 0x001000, 0x001000, CRC(0fd0ba25) SHA1(acf414aa145fcfa1c12aca0269f1f7ada82f1c04) )
+ROM_END
+
/***************************************************************************
FUNCTION PROTOTYPES
***************************************************************************/
@@ -60,6 +69,11 @@ const tiny_rom_entry *a2bus_zipdrivebase_device::device_rom_region() const
return ROM_NAME( zipdrive );
}
+const tiny_rom_entry *a2bus_focusdrive_device::device_rom_region() const
+{
+ return ROM_NAME( focusdrive );
+}
+
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
@@ -76,6 +90,11 @@ a2bus_zipdrive_device::a2bus_zipdrive_device(const machine_config &mconfig, cons
{
}
+a2bus_focusdrive_device::a2bus_focusdrive_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ a2bus_zipdrivebase_device(mconfig, A2BUS_FOCUSDRIVE, tag, owner, clock)
+{
+}
+
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -89,9 +108,12 @@ void a2bus_zipdrivebase_device::device_start()
void a2bus_zipdrivebase_device::device_reset()
{
- popmessage("Zip Drive partition format unknown, contact MESSdev if you have the software or a drive dump!");
}
+void a2bus_focusdrive_device::device_reset()
+{
+ m_rom[0x1c6c] = 0x03; // eat 3 IDE words here instead of 1, fixes a bug? in the original ROM
+}
/*-------------------------------------------------
read_c0nx - called for reads from this card's c0nx space
@@ -112,7 +134,7 @@ uint8_t a2bus_zipdrivebase_device::read_c0nx(uint8_t offset)
return m_ata->read_cs0(offset, 0xff);
case 8: // data port
- m_lastdata = m_ata->read_cs0(offset);
+ m_lastdata = m_ata->read_cs0(offset, 0xffff);
// printf("%04x @ IDE data\n", m_lastdata);
return m_lastdata&0xff;
@@ -120,13 +142,42 @@ uint8_t a2bus_zipdrivebase_device::read_c0nx(uint8_t offset)
return (m_lastdata>>8) & 0xff;
default:
- logerror("a2zipdrive: unhandled read @ C0n%x\n", offset);
+ logerror("unhandled read @ C0n%x\n", offset);
break;
}
return 0xff;
}
+uint8_t a2bus_focusdrive_device::read_c0nx(uint8_t offset)
+{
+ switch (offset)
+ {
+ case 8:
+ case 9:
+ case 0xa:
+ case 0xb:
+ case 0xc:
+ case 0xd:
+ case 0xe:
+ case 0xf:
+ return m_ata->read_cs0(offset&7, 0xff);
+
+ case 0: // data port
+ m_lastdata = m_ata->read_cs0(offset, 0xffff);
+ //printf("%04x @ IDE data\n", m_lastdata);
+ return m_lastdata&0xff;
+
+ case 1:
+ return (m_lastdata>>8) & 0xff;
+
+ default:
+ logerror("unhandled read @ C0n%x\n", offset);
+ break;
+ }
+
+ return 0xff;
+}
/*-------------------------------------------------
write_c0nx - called for writes to this card's c0nx space
@@ -157,7 +208,7 @@ void a2bus_zipdrivebase_device::write_c0nx(uint8_t offset, uint8_t data)
// printf("%02x to IDE data hi\n", data);
m_lastdata &= 0x00ff;
m_lastdata |= (data << 8);
- m_ata->write_cs0(0, m_lastdata);
+ m_ata->write_cs0(0, m_lastdata, 0xffff);
break;
default:
@@ -166,6 +217,48 @@ void a2bus_zipdrivebase_device::write_c0nx(uint8_t offset, uint8_t data)
}
}
+void a2bus_focusdrive_device::write_c0nx(uint8_t offset, uint8_t data)
+{
+ switch (offset)
+ {
+ case 8:
+ case 9:
+ case 0xa:
+ case 0xb:
+ case 0xc:
+ case 0xd:
+ case 0xe:
+ case 0xf:
+ // due to a bug in the 6502 firmware, eat data if DRQ is set
+ #if 0
+ while (m_ata->read_cs0(7, 0xff) & 0x08)
+ {
+ m_ata->read_cs0(0, 0xffff);
+ printf("eating 2 bytes to clear DRQ\n");
+ }
+ #endif
+// printf("%02x to IDE controller @ %x\n", data, offset);
+ m_ata->write_cs0(offset & 7, data, 0xff);
+ break;
+
+ case 0:
+// printf("%02x to IDE data lo\n", data);
+ m_lastdata = data;
+ break;
+
+ case 1:
+// printf("%02x to IDE data hi\n", data);
+ m_lastdata &= 0x00ff;
+ m_lastdata |= (data << 8);
+ m_ata->write_cs0(0, m_lastdata, 0xffff);
+ break;
+
+ default:
+ printf("focus: write %02x @ unhandled C0n%x\n", data, offset);
+ break;
+ }
+}
+
/*-------------------------------------------------
read_cnxx - called for reads from this card's cnxx space
-------------------------------------------------*/
diff --git a/src/devices/bus/a2bus/a2zipdrive.h b/src/devices/bus/a2bus/a2zipdrive.h
index 8187e04cdd2..9e3e68e79f2 100644
--- a/src/devices/bus/a2bus/a2zipdrive.h
+++ b/src/devices/bus/a2bus/a2zipdrive.h
@@ -5,8 +5,9 @@
a2zipdrive.h
ZIP Technologies ZipDrive IDE card
+ Parsons Engineering Focus Drive IDE card
- See important NOTE at the top of a2zipdrive.c!
+ See important NOTE at the top of a2zipdrive.cpp!
*********************************************************************/
@@ -44,8 +45,6 @@ protected:
required_device<ata_interface_device> m_ata;
uint8_t *m_rom;
-
-private:
uint16_t m_lastdata;
};
@@ -55,7 +54,20 @@ public:
a2bus_zipdrive_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
};
+class a2bus_focusdrive_device : public a2bus_zipdrivebase_device
+{
+public:
+ a2bus_focusdrive_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ virtual void device_reset() override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+ virtual uint8_t read_c0nx(uint8_t offset) override;
+ virtual void write_c0nx(uint8_t offset, uint8_t data) override;
+};
+
// device type definition
DECLARE_DEVICE_TYPE(A2BUS_ZIPDRIVE, a2bus_zipdrive_device)
+DECLARE_DEVICE_TYPE(A2BUS_FOCUSDRIVE, a2bus_focusdrive_device)
#endif // MAME_BUS_A2BUS_ZIPDRIVE_H
diff --git a/src/devices/bus/astrocde/accessory.cpp b/src/devices/bus/astrocde/accessory.cpp
new file mode 100644
index 00000000000..fe7727b855d
--- /dev/null
+++ b/src/devices/bus/astrocde/accessory.cpp
@@ -0,0 +1,112 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+
+#include "emu.h"
+#include "accessory.h"
+
+#include <cassert>
+
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(ASTROCADE_ACCESSORY_PORT, astrocade_accessory_port_device, "astrocade_accessory_port", "Bally Astrocade Accessory Port")
+
+
+//**************************************************************************
+// Bally Astrocade accessory interface
+//**************************************************************************
+
+device_astrocade_accessory_interface::device_astrocade_accessory_interface(const machine_config &mconfig, device_t &device)
+ : device_slot_card_interface(mconfig, device)
+ , m_port(dynamic_cast<astrocade_accessory_port_device *>(device.owner()))
+{
+}
+
+device_astrocade_accessory_interface::~device_astrocade_accessory_interface()
+{
+}
+
+void device_astrocade_accessory_interface::interface_validity_check(validity_checker &valid) const
+{
+ device_slot_card_interface::interface_validity_check(valid);
+
+ if (device().owner() && !m_port)
+ {
+ osd_printf_error("Owner device %s (%s) is not an astrocade_accessory_port_device\n", device().owner()->tag(), device().owner()->name());
+ }
+}
+
+void device_astrocade_accessory_interface::interface_pre_start()
+{
+ device_slot_card_interface::interface_pre_start();
+
+ if (m_port && !m_port->started())
+ throw device_missing_dependencies();
+}
+
+
+//**************************************************************************
+// Bally Astrocade accessory port
+//**************************************************************************
+
+astrocade_accessory_port_device::astrocade_accessory_port_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, ASTROCADE_ACCESSORY_PORT, tag, owner, clock)
+ , device_slot_interface(mconfig, *this)
+ , m_ltpen(0)
+ , m_ltpen_handler(*this)
+ , m_screen(*this, finder_base::DUMMY_TAG)
+ , m_device(nullptr)
+{
+}
+
+astrocade_accessory_port_device::~astrocade_accessory_port_device()
+{
+}
+
+void astrocade_accessory_port_device::device_validity_check(validity_checker &valid) const
+{
+ device_t *const card(get_card_device());
+ if (card && !dynamic_cast<device_astrocade_accessory_interface *>(card))
+ {
+ osd_printf_error("Card device %s (%s) does not implement device_astrocade_accessory_interface\n", card->tag(), card->name());
+ }
+}
+
+void astrocade_accessory_port_device::device_resolve_objects()
+{
+ device_astrocade_accessory_interface *const card(dynamic_cast<device_astrocade_accessory_interface *>(get_card_device()));
+ if (card)
+ {
+ m_device = card;
+ m_device->set_screen(m_screen);
+ }
+
+ m_ltpen_handler.resolve_safe();
+}
+
+void astrocade_accessory_port_device::device_start()
+{
+ device_t *const card(get_card_device());
+ if (card)
+ {
+ if (!m_device)
+ {
+ throw emu_fatalerror("astrocade_accessory_port_device: card device %s (%s) does not implement device_astrocade_accessory_interface\n", card->tag(), card->name());
+ }
+ }
+
+ save_item(NAME(m_ltpen));
+
+ m_ltpen = 0;
+
+ m_ltpen_handler(0);
+}
+
+#include "lightpen.h"
+
+void astrocade_accessories(device_slot_interface &device)
+{
+ device.option_add("lightpen", ASTROCADE_LIGHTPEN);
+}
diff --git a/src/devices/bus/astrocde/accessory.h b/src/devices/bus/astrocde/accessory.h
new file mode 100644
index 00000000000..d745e464cd2
--- /dev/null
+++ b/src/devices/bus/astrocde/accessory.h
@@ -0,0 +1,99 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+#ifndef MAME_BUS_ASTROCDE_ACCESSORY_H
+#define MAME_BUS_ASTROCDE_ACCESSORY_H
+
+#pragma once
+
+#include "screen.h"
+
+
+/***************************************************************************
+ FORWARD DECLARATIONS
+ ***************************************************************************/
+
+class device_astrocade_accessory_interface;
+
+
+/***************************************************************************
+ TYPE DEFINITIONS
+ ***************************************************************************/
+
+// ======================> astrocade_accessory_port_device
+
+class astrocade_accessory_port_device : public device_t, public device_slot_interface
+{
+public:
+ // construction/destruction
+ template <typename T, typename U>
+ astrocade_accessory_port_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&screen_tag, U &&opts, char const *dflt)
+ : astrocade_accessory_port_device(mconfig, tag, owner, 0U)
+ {
+ m_screen.set_tag(std::forward<T>(screen_tag));
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+ astrocade_accessory_port_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock = 0U);
+ virtual ~astrocade_accessory_port_device();
+
+ auto ltpen_handler() { return m_ltpen_handler.bind(); }
+
+protected:
+ // device_t implementation
+ virtual void device_validity_check(validity_checker &valid) const override ATTR_COLD;
+ virtual void device_resolve_objects() override;
+ virtual void device_start() override;
+
+ int m_ltpen;
+ devcb_write_line m_ltpen_handler;
+ required_device<screen_device> m_screen;
+
+private:
+ device_astrocade_accessory_interface *m_device;
+
+ friend class device_astrocade_accessory_interface;
+};
+
+
+// ======================> device_astrocade_accessory_interface
+
+class device_astrocade_accessory_interface : public device_slot_card_interface
+{
+public:
+ virtual ~device_astrocade_accessory_interface();
+
+ DECLARE_WRITE_LINE_MEMBER( write_ltpen ) { m_port->m_ltpen = state; m_port->m_ltpen_handler(state); }
+
+protected:
+ device_astrocade_accessory_interface(machine_config const &mconfig, device_t &device);
+
+ // device_interface implementation
+ virtual void interface_validity_check(validity_checker &valid) const override ATTR_COLD;
+ virtual void interface_pre_start() override;
+
+ void set_screen(screen_device *screen) { m_screen = screen; }
+ screen_device *m_screen;
+
+private:
+ astrocade_accessory_port_device *const m_port;
+
+ friend class astrocade_accessory_port_device;
+};
+
+
+/***************************************************************************
+ FUNCTIONS
+ ***************************************************************************/
+
+void astrocade_accessories(device_slot_interface &device);
+
+
+/***************************************************************************
+ DEVICE TYPES
+ ***************************************************************************/
+
+DECLARE_DEVICE_TYPE(ASTROCADE_ACCESSORY_PORT, astrocade_accessory_port_device)
+
+#endif // MAME_BUS_ASTROCDE_ACCESSORY_H
diff --git a/src/devices/bus/astrocde/cassette.cpp b/src/devices/bus/astrocde/cassette.cpp
index 789b0d7e175..3e4cc80deb8 100644
--- a/src/devices/bus/astrocde/cassette.cpp
+++ b/src/devices/bus/astrocde/cassette.cpp
@@ -1,5 +1,8 @@
// license:BSD-3-Clause
// copyright-holders:Ryan Holtz
+//
+// Decoding is done in hardware by an external box, and decoded bits are fed to bit 0 of the controller port,
+// with sync bits being fed to bit 1. The current HLE is not remotely accurate to hardware, but works.
#include "emu.h"
#include "cassette.h"
@@ -26,22 +29,102 @@ astrocade_cassette_device::~astrocade_cassette_device()
{
}
+void astrocade_cassette_device::device_start()
+{
+ save_item(NAME(m_cass_wave));
+ save_item(NAME(m_cass_delta));
+ save_item(NAME(m_cass_wave_ticks));
+ save_item(NAME(m_cass_cycles));
+ save_item(NAME(m_cass_mark));
+}
+
+void astrocade_cassette_device::device_reset()
+{
+ m_cass_wave = 0.0;
+ m_cass_delta = 0.0;
+ m_cass_wave_ticks = 0;
+ m_cass_cycles = 0;
+ m_cass_mark = false;
+}
+
uint8_t astrocade_cassette_device::read_handle()
{
- uint8_t data = m_cassette->input() > 0.0 ? 0 : 1;
- logerror("%s: Cassette Handle Read: %d\n", machine().describe_context(), data);
- return data;
+ if (m_cass_data.size())
+ {
+ const uint8_t data = m_cass_data.front();
+ m_cass_data.pop();
+ return data;
+ }
+ return 0;
}
uint8_t astrocade_cassette_device::read_knob()
{
- logerror("%s: Cassette Knob Read\n", machine().describe_context());
return 0;
}
+TIMER_DEVICE_CALLBACK_MEMBER(astrocade_cassette_device::check_cassette_wave)
+{
+ if (m_cassette->get_state() & CASSETTE_MOTOR_DISABLED)
+ return;
+
+ double old_cass_wave = m_cass_wave;
+ m_cass_wave = m_cassette->input();
+
+ bool cycled = false;
+ if (old_cass_wave != m_cass_wave)
+ {
+ double old_delta = m_cass_delta;
+ m_cass_delta = m_cass_wave - old_cass_wave;
+ if (old_delta < 0.0 && m_cass_delta > 0.0)
+ {
+ cycled = true;
+ }
+ }
+
+ if (cycled)
+ {
+ m_cass_mark = m_cass_wave_ticks <= 30;
+
+ m_cass_wave_ticks = 0;
+
+ m_cass_cycles++;
+ if (m_cass_mark)
+ {
+ if (m_cass_cycles >= 8)
+ {
+ m_cass_data.push(1);
+ m_cass_cycles = 0;
+ }
+ }
+ else
+ {
+ if (m_cass_cycles >= 4)
+ {
+ m_cass_data.push(0);
+ m_cass_cycles = 0;
+ }
+ }
+ }
+
+ m_cass_wave_ticks++;
+}
+
+TIMER_DEVICE_CALLBACK_MEMBER(astrocade_cassette_device::pulse_cassette_clock)
+{
+ if (m_cass_data.size())
+ {
+ write_ltpen(1);
+ write_ltpen(0);
+ }
+}
+
void astrocade_cassette_device::device_add_mconfig(machine_config &config)
{
CASSETTE(config, m_cassette);
m_cassette->set_default_state(CASSETTE_STOPPED);
m_cassette->set_interface("astrocade_cass");
+
+ TIMER(config, "kcs_hle").configure_periodic(FUNC(astrocade_cassette_device::check_cassette_wave), attotime::from_hz(48000));
+ TIMER(config, "kcs_clk").configure_periodic(FUNC(astrocade_cassette_device::pulse_cassette_clock), attotime::from_hz(300));
}
diff --git a/src/devices/bus/astrocde/cassette.h b/src/devices/bus/astrocde/cassette.h
index bcbfd697a50..d36e8a1bfd7 100644
--- a/src/devices/bus/astrocde/cassette.h
+++ b/src/devices/bus/astrocde/cassette.h
@@ -7,6 +7,10 @@
#include "ctrl.h"
#include "imagedev/cassette.h"
+#include "machine/timer.h"
+
+#include <queue>
+
/***************************************************************************
TYPE DEFINITIONS
@@ -15,7 +19,7 @@
// ======================> astrocade_cassette_device
class astrocade_cassette_device : public device_t,
- public device_astrocade_ctrl_interface
+ public device_astrocade_ctrl_interface
{
public:
static constexpr feature_type imperfect_features() { return feature::TAPE; }
@@ -30,11 +34,21 @@ public:
protected:
// device_t implementation
- virtual void device_start() override { }
+ virtual void device_start() override;
+ virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
+ TIMER_DEVICE_CALLBACK_MEMBER(check_cassette_wave);
+ TIMER_DEVICE_CALLBACK_MEMBER(pulse_cassette_clock);
+
private:
required_device<cassette_image_device> m_cassette;
+ double m_cass_wave;
+ double m_cass_delta;
+ uint32_t m_cass_wave_ticks;
+ uint32_t m_cass_cycles;
+ bool m_cass_mark;
+ std::queue<uint8_t> m_cass_data;
};
diff --git a/src/devices/bus/astrocde/ctrl.cpp b/src/devices/bus/astrocde/ctrl.cpp
index 16b8537eae4..89cd60ca6a5 100644
--- a/src/devices/bus/astrocde/ctrl.cpp
+++ b/src/devices/bus/astrocde/ctrl.cpp
@@ -54,6 +54,9 @@ void device_astrocade_ctrl_interface::interface_pre_start()
astrocade_ctrl_port_device::astrocade_ctrl_port_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, ASTROCADE_CTRL_PORT, tag, owner, clock)
, device_slot_interface(mconfig, *this)
+ , m_ltpen(0)
+ , m_ltpen_handler(*this)
+ , m_device(nullptr)
{
}
@@ -75,6 +78,8 @@ void astrocade_ctrl_port_device::device_resolve_objects()
device_astrocade_ctrl_interface *const card(dynamic_cast<device_astrocade_ctrl_interface *>(get_card_device()));
if (card)
m_device = card;
+
+ m_ltpen_handler.resolve_safe();
}
void astrocade_ctrl_port_device::device_start()
@@ -87,6 +92,12 @@ void astrocade_ctrl_port_device::device_start()
throw emu_fatalerror("astrocade_ctrl_port_device: card device %s (%s) does not implement device_astrocade_ctrl_interface\n", card->tag(), card->name());
}
}
+
+ save_item(NAME(m_ltpen));
+
+ m_ltpen = 0;
+
+ m_ltpen_handler(0);
}
uint8_t astrocade_ctrl_port_device::read_handle()
diff --git a/src/devices/bus/astrocde/ctrl.h b/src/devices/bus/astrocde/ctrl.h
index 7ff8acbde52..0cc34ea4dcc 100644
--- a/src/devices/bus/astrocde/ctrl.h
+++ b/src/devices/bus/astrocde/ctrl.h
@@ -10,37 +10,13 @@
FORWARD DECLARATIONS
***************************************************************************/
-class astrocade_ctrl_port_device;
+class device_astrocade_ctrl_interface;
/***************************************************************************
TYPE DEFINITIONS
***************************************************************************/
-// ======================> device_astrocade_ctrl_interface
-
-class device_astrocade_ctrl_interface : public device_slot_card_interface
-{
-public:
- virtual ~device_astrocade_ctrl_interface();
-
- virtual uint8_t read_handle() { return 0; }
- virtual uint8_t read_knob() { return 0; }
-
-protected:
- device_astrocade_ctrl_interface(machine_config const &mconfig, device_t &device);
-
- // device_interface implementation
- virtual void interface_validity_check(validity_checker &valid) const override ATTR_COLD;
- virtual void interface_pre_start() override;
-
-private:
- astrocade_ctrl_port_device *const m_port;
-
- friend class astrocade_ctrl_port_device;
-};
-
-
// ======================> astrocade_ctrl_port_device
class astrocade_ctrl_port_device : public device_t, public device_slot_interface
@@ -59,6 +35,8 @@ public:
astrocade_ctrl_port_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock = 0U);
virtual ~astrocade_ctrl_port_device();
+ auto ltpen_handler() { return m_ltpen_handler.bind(); }
+
uint8_t read_handle();
uint8_t read_knob();
@@ -68,6 +46,9 @@ protected:
virtual void device_resolve_objects() override;
virtual void device_start() override;
+ int m_ltpen;
+ devcb_write_line m_ltpen_handler;
+
private:
device_astrocade_ctrl_interface *m_device;
@@ -75,6 +56,32 @@ private:
};
+// ======================> device_astrocade_ctrl_interface
+
+class device_astrocade_ctrl_interface : public device_slot_card_interface
+{
+public:
+ virtual ~device_astrocade_ctrl_interface();
+
+ virtual uint8_t read_handle() { return 0; }
+ virtual uint8_t read_knob() { return 0; }
+
+ DECLARE_WRITE_LINE_MEMBER( write_ltpen ) { m_port->m_ltpen = state; m_port->m_ltpen_handler(state); }
+
+protected:
+ device_astrocade_ctrl_interface(machine_config const &mconfig, device_t &device);
+
+ // device_interface implementation
+ virtual void interface_validity_check(validity_checker &valid) const override ATTR_COLD;
+ virtual void interface_pre_start() override;
+
+private:
+ astrocade_ctrl_port_device *const m_port;
+
+ friend class astrocade_ctrl_port_device;
+};
+
+
/***************************************************************************
FUNCTIONS
***************************************************************************/
diff --git a/src/devices/bus/astrocde/exp.cpp b/src/devices/bus/astrocde/exp.cpp
index 40b6fbecbc4..9fe3c9f3fda 100644
--- a/src/devices/bus/astrocde/exp.cpp
+++ b/src/devices/bus/astrocde/exp.cpp
@@ -74,6 +74,14 @@ READ8_MEMBER(astrocade_exp_device::read)
return 0xff;
}
+READ8_MEMBER(astrocade_exp_device::read_io)
+{
+ if (m_card)
+ return m_card->read_io(space, offset);
+ else
+ return 0xff;
+}
+
/*-------------------------------------------------
write
-------------------------------------------------*/
@@ -83,3 +91,9 @@ WRITE8_MEMBER(astrocade_exp_device::write)
if (m_card)
m_card->write(space, offset, data);
}
+
+WRITE8_MEMBER(astrocade_exp_device::write_io)
+{
+ if (m_card)
+ m_card->write_io(space, offset, data);
+}
diff --git a/src/devices/bus/astrocde/exp.h b/src/devices/bus/astrocde/exp.h
index e6c97862224..a01db130974 100644
--- a/src/devices/bus/astrocde/exp.h
+++ b/src/devices/bus/astrocde/exp.h
@@ -14,6 +14,8 @@ public:
// reading and writing
virtual DECLARE_READ8_MEMBER(read) { return 0xff; }
virtual DECLARE_WRITE8_MEMBER(write) { }
+ virtual DECLARE_READ8_MEMBER(read_io) { return 0xff; }
+ virtual DECLARE_WRITE8_MEMBER(write_io) { }
protected:
device_astrocade_card_interface(const machine_config &mconfig, device_t &device);
@@ -46,6 +48,8 @@ public:
// reading and writing
virtual DECLARE_READ8_MEMBER(read);
virtual DECLARE_WRITE8_MEMBER(write);
+ virtual DECLARE_READ8_MEMBER(read_io);
+ virtual DECLARE_WRITE8_MEMBER(write_io);
protected:
bool m_card_mounted;
diff --git a/src/devices/bus/astrocde/joy.h b/src/devices/bus/astrocde/joy.h
index 1db02b9d28f..bb8f755c845 100644
--- a/src/devices/bus/astrocde/joy.h
+++ b/src/devices/bus/astrocde/joy.h
@@ -14,7 +14,7 @@
// ======================> astrocade_joy_device
class astrocade_joy_device : public device_t,
- public device_astrocade_ctrl_interface
+ public device_astrocade_ctrl_interface
{
public:
// construction/destruction
diff --git a/src/devices/bus/astrocde/lightpen.cpp b/src/devices/bus/astrocde/lightpen.cpp
new file mode 100644
index 00000000000..e31eed122be
--- /dev/null
+++ b/src/devices/bus/astrocde/lightpen.cpp
@@ -0,0 +1,87 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+
+#include "emu.h"
+#include "lightpen.h"
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(ASTROCADE_LIGHTPEN, astrocade_lightpen_device, "astrocade_lightpen", "Bally Astrocade Light Pen")
+
+
+//**************************************************************************
+// Bally Astrocade light pen input
+//**************************************************************************
+
+astrocade_lightpen_device::astrocade_lightpen_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, ASTROCADE_LIGHTPEN, tag, owner, clock)
+ , device_astrocade_accessory_interface(mconfig, *this)
+ , m_trigger(*this, "TRIGGER")
+ , m_lightx(*this, "LIGHTX")
+ , m_lighty(*this, "LIGHTY")
+ , m_pen_timer(nullptr)
+{
+}
+
+astrocade_lightpen_device::~astrocade_lightpen_device()
+{
+}
+
+void astrocade_lightpen_device::device_start()
+{
+ m_pen_timer = timer_alloc(TIMER_TRIGGER);
+
+ save_item(NAME(m_retrigger));
+}
+
+void astrocade_lightpen_device::device_reset()
+{
+ m_pen_timer->adjust(attotime::never);
+ m_retrigger = false;
+}
+
+void astrocade_lightpen_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+{
+ if (id == TIMER_TRIGGER)
+ {
+ write_ltpen(1);
+ write_ltpen(0);
+ if (m_retrigger)
+ m_pen_timer->adjust(m_screen->time_until_pos(m_lighty->read(), m_lightx->read()));
+ else
+ m_pen_timer->adjust(attotime::never);
+ }
+}
+
+INPUT_CHANGED_MEMBER( astrocade_lightpen_device::trigger )
+{
+ if (newval)
+ {
+ m_retrigger = true;
+ m_pen_timer->adjust(m_screen->time_until_pos(m_lighty->read(), m_lightx->read()));
+ }
+ else
+ {
+ m_retrigger = false;
+ m_pen_timer->adjust(attotime::never);
+ }
+}
+
+static INPUT_PORTS_START( astrocade_lightpen )
+ PORT_START("TRIGGER")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, astrocade_lightpen_device, trigger, nullptr)
+ PORT_BIT( 0xfe, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("LIGHTX")
+ PORT_BIT(0x1ff, 0x000, IPT_LIGHTGUN_X) PORT_MINMAX(0x000, 0x15f) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(45) PORT_KEYDELTA(15)
+
+ PORT_START("LIGHTY")
+ PORT_BIT(0x0ff, 0x000, IPT_LIGHTGUN_Y) PORT_MINMAX(0x000, 0x0f0) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(45) PORT_KEYDELTA(15)
+INPUT_PORTS_END
+
+ioport_constructor astrocade_lightpen_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( astrocade_lightpen );
+}
diff --git a/src/devices/bus/astrocde/lightpen.h b/src/devices/bus/astrocde/lightpen.h
new file mode 100644
index 00000000000..a0863d5d3e8
--- /dev/null
+++ b/src/devices/bus/astrocde/lightpen.h
@@ -0,0 +1,51 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+#ifndef MAME_BUS_ASTROCDE_LIGHTPEN_H
+#define MAME_BUS_ASTROCDE_LIGHTPEN_H
+
+#pragma once
+
+#include "accessory.h"
+
+
+/***************************************************************************
+ TYPE DEFINITIONS
+ ***************************************************************************/
+
+// ======================> astrocade_lightpen_device
+
+class astrocade_lightpen_device : public device_t,
+ public device_astrocade_accessory_interface
+{
+public:
+ // construction/destruction
+ astrocade_lightpen_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock = 0U);
+ virtual ~astrocade_lightpen_device();
+
+ DECLARE_INPUT_CHANGED_MEMBER( trigger );
+
+protected:
+ // device_t implementation
+ virtual void device_start() override;
+ virtual void device_reset() override;
+ virtual ioport_constructor device_input_ports() const override;
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+
+ static const device_timer_id TIMER_TRIGGER = 0;
+
+private:
+ required_ioport m_trigger;
+ required_ioport m_lightx;
+ required_ioport m_lighty;
+ emu_timer *m_pen_timer;
+ bool m_retrigger;
+};
+
+
+/***************************************************************************
+ DEVICE TYPES
+ ***************************************************************************/
+
+DECLARE_DEVICE_TYPE(ASTROCADE_LIGHTPEN, astrocade_lightpen_device)
+
+#endif // MAME_BUS_ASTROCDE_LIGHTPEN_H
diff --git a/src/devices/bus/astrocde/ram.cpp b/src/devices/bus/astrocde/ram.cpp
index 36d1ed9ab77..8f20b0256fa 100644
--- a/src/devices/bus/astrocde/ram.cpp
+++ b/src/devices/bus/astrocde/ram.cpp
@@ -21,10 +21,10 @@
switch and run it as a cartridge. This is useful for cartridge development.
Blue RAM -- available in 4K, 16K, and 32K. These also use an INS8154 chip,
- (not yet implemented) which has an additional $80 bytes of RAM mapped
- immediately after the end of the expansion address space. This memory
- can't be write protected. The INS8154 has I/O features needed for loading
- tape programs into Blue RAM BASIC, as well as running the Blue RAM Utility cart.
+ which has an additional $80 bytes of RAM mapped immediately after the end of
+ the expansion address space (not yet implemented). This memory can't be write
+ protected. The INS8154 has I/O features needed for loading tape programs into
+ Blue RAM BASIC, as well as running the Blue RAM Utility cart.
4K: $6000 to $6FFF (can't run VIPERSoft BASIC, because this program needs memory
past this range)
16K: $6000 to $9FFF
@@ -69,9 +69,11 @@ DEFINE_DEVICE_TYPE(ASTROCADE_RL64RAM, astrocade_rl64ram_device, "astroca
astrocade_blueram_4k_device::astrocade_blueram_4k_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, type, tag, owner, clock),
- device_astrocade_card_interface(mconfig, *this),
- m_write_prot(*this, "RAM_PROTECT")
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_astrocade_card_interface(mconfig, *this)
+ , m_write_prot(*this, "RAM_PROTECT")
+ , m_ramio(*this, "ramio")
+ , m_cassette(*this, "cassette")
{
}
@@ -163,7 +165,35 @@ WRITE8_MEMBER(astrocade_blueram_4k_device::write)
m_ram[offset - 0x1000] = data;
}
+READ8_MEMBER(astrocade_blueram_4k_device::read_io)
+{
+ return m_ramio->read_io(offset & 0x7f);
+}
+
+WRITE8_MEMBER(astrocade_blueram_4k_device::write_io)
+{
+ logerror("write_io: %04x = %02x\n", offset, data);
+ m_ramio->write_io(offset & 0x7f, data);
+}
+
+uint8_t astrocade_blueram_4k_device::porta_r()
+{
+ return 0;
+}
+
+uint8_t astrocade_blueram_4k_device::portb_r()
+{
+ return m_cassette->input() > 0.0 ? 1 : 0;
+}
+
+void astrocade_blueram_4k_device::porta_w(uint8_t data)
+{
+}
+void astrocade_blueram_4k_device::portb_w(uint8_t data)
+{
+ m_cassette->output(BIT(data, 0) ? +1 : -1);
+}
// Viper System 1 expansion has RAM in 0x6000-0x9fff
READ8_MEMBER(astrocade_viper_sys1_device::read)
@@ -207,3 +237,20 @@ WRITE8_MEMBER(astrocade_rl64ram_device::write)
if (!m_write_prot->read())
m_ram[offset] = data;
}
+
+/*-------------------------------------------------
+ machine configuration
+ -------------------------------------------------*/
+
+void astrocade_blueram_4k_device::device_add_mconfig(machine_config &config)
+{
+ CASSETTE(config, m_cassette);
+ m_cassette->set_default_state(CASSETTE_STOPPED);
+ m_cassette->set_interface("astrocade_cass");
+
+ INS8154(config, m_ramio);
+ m_ramio->out_a().set(FUNC(astrocade_blueram_4k_device::porta_w));
+ m_ramio->out_b().set(FUNC(astrocade_blueram_4k_device::portb_w));
+ m_ramio->in_a().set(FUNC(astrocade_blueram_4k_device::porta_r));
+ m_ramio->in_b().set(FUNC(astrocade_blueram_4k_device::portb_r));
+}
diff --git a/src/devices/bus/astrocde/ram.h b/src/devices/bus/astrocde/ram.h
index 83f9483d2e8..ee5ed884ef4 100644
--- a/src/devices/bus/astrocde/ram.h
+++ b/src/devices/bus/astrocde/ram.h
@@ -6,6 +6,8 @@
#pragma once
#include "exp.h"
+#include "imagedev/cassette.h"
+#include "machine/ins8154.h"
// ======================> astrocade_blueram_4k_device
@@ -22,15 +24,25 @@ public:
// reading and writing
virtual DECLARE_READ8_MEMBER(read) override;
virtual DECLARE_WRITE8_MEMBER(write) override;
+ virtual DECLARE_READ8_MEMBER(read_io) override;
+ virtual DECLARE_WRITE8_MEMBER(write_io) override;
+
+ uint8_t porta_r();
+ uint8_t portb_r();
+ void porta_w(uint8_t data);
+ void portb_w(uint8_t data);
protected:
astrocade_blueram_4k_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override { m_ram.resize(0x1000); save_item(NAME(m_ram)); }
virtual void device_reset() override { }
+ virtual void device_add_mconfig(machine_config &config) override;
std::vector<uint8_t> m_ram;
required_ioport m_write_prot;
+ required_device<ins8154_device> m_ramio;
+ required_device<cassette_image_device> m_cassette;
};
// ======================> astrocade_blueram_16k_device
diff --git a/src/devices/bus/bbc/tube/tube.cpp b/src/devices/bus/bbc/tube/tube.cpp
index c0ff49915a6..602ea3c845a 100644
--- a/src/devices/bus/bbc/tube/tube.cpp
+++ b/src/devices/bus/bbc/tube/tube.cpp
@@ -112,6 +112,7 @@ void bbc_tube_slot_device::host_w(offs_t offset, uint8_t data)
// slot devices
+#include "tube_32016.h"
#include "tube_6502.h"
#include "tube_80186.h"
#include "tube_80286.h"
@@ -133,7 +134,7 @@ void bbc_tube_devices(device_slot_interface &device)
{
device.option_add("6502", BBC_TUBE_6502); /* Acorn ANC01 6502 2nd processor */
device.option_add("z80", BBC_TUBE_Z80); /* Acorn ANC04 Z80 2nd processor */
- //device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */
+ device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */
device.option_add("arm", BBC_TUBE_ARM); /* Acorn ANC13 ARM Evaluation System */
device.option_add("80286", BBC_TUBE_80286); /* Acorn 80286 2nd Processor */
//device.option_add("a500", BBC_TUBE_A500); /* Acorn A500 2nd Processor */
@@ -142,8 +143,8 @@ void bbc_tube_devices(device_slot_interface &device)
//device.option_add("hdp68k", BBC_TUBE_HDP68K); /* Torch Unicorn (HDP68K) */
//device.option_add("x25", BBC_TUBE_X25); /* Econet X25 Gateway */
device.option_add("zep100", BBC_TUBE_ZEP100); /* Torch Z80 Communicator (ZEP100) (Torch) */
- //device.option_add("zep100l", BBC_TUBE_ZEP100L); /* Torch Z80 Communicator (ZEP100) (Acorn 8271) */
- //device.option_add("zep100w", BBC_TUBE_ZEP100W); /* Torch Z80 Communicator (ZEP100) (Acorn 1770) */
+ //device.option_add("zep100l", BBC_TUBE_ZEP100L); /* Torch Z80 Communicator (ZEP100) (Model B) */
+ //device.option_add("zep100w", BBC_TUBE_ZEP100W); /* Torch Z80 Communicator (ZEP100) (Model B+) */
/* Acorn ANC21 Universal 2nd Processor Unit */
device.option_add("65c102", BBC_TUBE_65C102); /* Acorn ADC06 65C102 co-processor */
device.option_add("80186", BBC_TUBE_80186); /* Acorn ADC08 80186 co-processor */
@@ -160,11 +161,12 @@ void bbc_extube_devices(device_slot_interface &device)
{
device.option_add("6502", BBC_TUBE_6502); /* Acorn ANC01 6502 2nd processor */
device.option_add("z80", BBC_TUBE_Z80); /* Acorn ANC04 Z80 2nd processor */
- //device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */
+ device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */
device.option_add("arm", BBC_TUBE_ARM); /* Acorn ANC13 ARM Evaluation System */
device.option_add("80286", BBC_TUBE_80286); /* Acorn 80286 2nd Processor */
//device.option_add("a500", BBC_TUBE_A500); /* Acorn A500 2nd Processor */
//device.option_add("pmsb2p", BBC_TUBE_PMSB2P); /* PMS B2P-6502 */
+ //device.option_add("zep100m", BBC_TUBE_ZEP100M); /* Torch Z80 Communicator (ZEP100) (Master) */
/* Acorn ANC21 Universal 2nd Processor Unit */
device.option_add("65c102", BBC_TUBE_65C102); /* Acorn ADC06 65C102 co-processor */
device.option_add("80186", BBC_TUBE_80186); /* Acorn ADC08 80186 co-processor */
@@ -181,7 +183,6 @@ void bbc_intube_devices(device_slot_interface &device)
{
device.option_add("65c102", BBC_TUBE_65C102); /* Acorn ADC06 65C102 co-processor */
device.option_add("80186", BBC_TUBE_80186); /* Acorn ADC08 80186 co-processor */
- //device.option_add("zep100m", BBC_TUBE_ZEP100M); /* Torch Z80 Communicator (ZEP100) (Master) */
//device.option_add("arm7", BBC_TUBE_ARM7); /* Sprow ARM7 co-processor */
device.option_add("rc6502", BBC_TUBE_RC6502); /* ReCo6502 (6502) */
device.option_add("rc65816", BBC_TUBE_RC65816); /* ReCo6502 (65816) */
@@ -196,6 +197,7 @@ void electron_tube_devices(device_slot_interface &device)
{
device.option_add("6502", BBC_TUBE_6502); /* Acorn ANC01 6502 2nd processor */
device.option_add("z80", BBC_TUBE_Z80); /* Acorn ANC04 Z80 2nd processor */
+ device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */
device.option_add("arm", BBC_TUBE_ARM); /* Acorn ANC13 ARM Evaluation System */
device.option_add("65c102", BBC_TUBE_65C102); /* Acorn ADC06 65C102 co-processor */
device.option_add("80186", BBC_TUBE_80186); /* Acorn ADC08 80186 co-processor */
diff --git a/src/devices/bus/bbc/tube/tube_32016.cpp b/src/devices/bus/bbc/tube/tube_32016.cpp
new file mode 100644
index 00000000000..7b6ac355e42
--- /dev/null
+++ b/src/devices/bus/bbc/tube/tube_32016.cpp
@@ -0,0 +1,210 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Acorn ANC05 32016 2nd processor
+
+ http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ANC05_320162ndproc.html
+
+ Acorn ANC06 Cambridge Co-Processor
+
+ http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ANC06_CamCoPro.html
+
+ IC1 (ULA) TUBE
+ IC2 (MMU) NS32082 Not fitted
+ IC3 (CPU) NS32016
+ IC4 (TCU) NS32201
+ IC20 (FPU) NS32081
+
+**********************************************************************/
+
+
+#include "emu.h"
+#include "tube_32016.h"
+#include "softlist_dev.h"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(BBC_TUBE_32016, bbc_tube_32016_device, "bbc_tube_32016", "Acorn 32016 2nd processor")
+
+
+//-------------------------------------------------
+// ADDRESS_MAP( tube_32016_mem )
+//-------------------------------------------------
+
+void bbc_tube_32016_device::tube_32016_mem(address_map &map)
+{
+ map(0x000000, 0xffffff).rw(FUNC(bbc_tube_32016_device::read), FUNC(bbc_tube_32016_device::write));
+ map(0xf90000, 0xf90001).portr("CONFIG");
+ map(0xfffff0, 0xffffff).rw("ula", FUNC(tube_device::parasite_r), FUNC(tube_device::parasite_w)).umask32(0x00ff);
+}
+
+//-------------------------------------------------
+// ROM( tube_32016 )
+//-------------------------------------------------
+
+ROM_START(tube_32016)
+ ROM_REGION(0x8000, "rom", 0)
+ ROM_DEFAULT_BIOS("200")
+ ROM_SYSTEM_BIOS(0, "200", "Pandora v2.00")
+ ROMX_LOAD("pan200lo.rom", 0x0000, 0x4000, CRC(b1980fd0) SHA1(8084f8896cd22953abefbd43c51e1a422b30e28d), ROM_SKIP(1) | ROM_BIOS(0)) // 0201-764-02 Pandora Lo
+ ROMX_LOAD("pan200hi.rom", 0x0001, 0x4000, CRC(cab98d6b) SHA1(dfad1f4180c50757a74fcfe3a0ee7d7b48eb1bee), ROM_SKIP(1) | ROM_BIOS(0)) // 0201-763-02 Pandora Hi
+ ROM_SYSTEM_BIOS(1, "100", "Pandora v1.00")
+ ROMX_LOAD("pan100.rom", 0x0000, 0x8000, BAD_DUMP CRC(75333006) SHA1(996cd120103039390c9b979b16c327bb95da72e4), ROM_BIOS(1)) // 0201-763-01, 0201-764-01 Pandora
+ ROM_SYSTEM_BIOS(2, "061", "Pandora v0.61")
+ ROMX_LOAD("pan061lo.rom", 0x0000, 0x4000, CRC(6f801b35) SHA1(ce31f7c10603f3d15a06a8e32bde40df0639e446), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD("pan061hi.rom", 0x0001, 0x4000, CRC(c00b1ab0) SHA1(e6a705232278c518340ddc69ea51af91965fa332), ROM_SKIP(1) | ROM_BIOS(2))
+ROM_END
+
+//-------------------------------------------------
+// INPUT_PORTS( tube_32016 )
+//-------------------------------------------------
+
+static INPUT_PORTS_START(tube_32016)
+ PORT_START("CONFIG")
+ PORT_DIPNAME(0x80, 0x80, "H") PORT_DIPLOCATION("LKS:1")
+ PORT_DIPSETTING(0x80, "FPU")
+ PORT_DIPSETTING(0x00, "No FPU")
+
+ PORT_DIPNAME(0x40, 0x00, "G") PORT_DIPLOCATION("LKS:2")
+ PORT_DIPSETTING(0x40, "MMU")
+ PORT_DIPSETTING(0x00, "No MMU")
+
+ PORT_DIPNAME(0x20, 0x00, "F") PORT_DIPLOCATION("LKS:3")
+ PORT_DIPSETTING(0x20, "Reserved")
+ PORT_DIPSETTING(0x00, "Reserved")
+
+ PORT_DIPNAME(0x10, 0x00, "E") PORT_DIPLOCATION("LKS:4")
+ PORT_DIPSETTING(0x10, "Reserved")
+ PORT_DIPSETTING(0x00, "Reserved")
+
+ PORT_DIPNAME(0x08, 0x00, "D") PORT_DIPLOCATION("LKS:5")
+ PORT_DIPSETTING(0x08, "Reserved")
+ PORT_DIPSETTING(0x00, "Reserved")
+
+ PORT_DIPNAME(0x04, 0x00, "C") PORT_DIPLOCATION("LKS:6")
+ PORT_DIPSETTING(0x04, "Reserved")
+ PORT_DIPSETTING(0x00, "Reserved")
+
+ PORT_DIPNAME(0x02, 0x00, "B") PORT_DIPLOCATION("LKS:7")
+ PORT_DIPSETTING(0x02, "Reserved")
+ PORT_DIPSETTING(0x00, "Reserved")
+
+ PORT_DIPNAME(0x01, 0x00, "A") PORT_DIPLOCATION("LKS:8")
+ PORT_DIPSETTING(0x01, "Reserved")
+ PORT_DIPSETTING(0x00, "Reserved")
+INPUT_PORTS_END
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void bbc_tube_32016_device::device_add_mconfig(machine_config &config)
+{
+ NS32016(config, m_maincpu, 12_MHz_XTAL / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &bbc_tube_32016_device::tube_32016_mem);
+
+ TUBE(config, m_ula);
+ m_ula->pnmi_handler().set_inputline(m_maincpu, INPUT_LINE_NMI);
+ m_ula->pirq_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
+
+ /* internal ram */
+ RAM(config, m_ram).set_default_size("1M").set_default_value(0);
+
+ /* software lists */
+ SOFTWARE_LIST(config, "flop_ls_32016").set_original("bbc_flop_32016");
+}
+
+//-------------------------------------------------
+// rom_region - device-specific ROM region
+//-------------------------------------------------
+
+const tiny_rom_entry *bbc_tube_32016_device::device_rom_region() const
+{
+ return ROM_NAME( tube_32016 );
+}
+
+//-------------------------------------------------
+// input_ports - device-specific input ports
+//-------------------------------------------------
+
+ioport_constructor bbc_tube_32016_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( tube_32016 );
+}
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// bbc_tube_32016_device - constructor
+//-------------------------------------------------
+
+bbc_tube_32016_device::bbc_tube_32016_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, BBC_TUBE_32016, tag, owner, clock)
+ , device_bbc_tube_interface(mconfig, *this)
+ , m_maincpu(*this, "maincpu")
+ , m_ula(*this, "ula")
+ , m_ram(*this, "ram")
+ , m_rom(*this, "rom")
+ , m_rom_enabled(true)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void bbc_tube_32016_device::device_start()
+{
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void bbc_tube_32016_device::device_reset()
+{
+ m_rom_enabled = true;
+}
+
+
+//**************************************************************************
+// IMPLEMENTATION
+//**************************************************************************
+
+uint8_t bbc_tube_32016_device::host_r(offs_t offset)
+{
+ return m_ula->host_r(offset);
+}
+
+void bbc_tube_32016_device::host_w(offs_t offset, uint8_t data)
+{
+ m_ula->host_w(offset, data);
+}
+
+
+READ8_MEMBER(bbc_tube_32016_device::read)
+{
+ uint16_t data = 0xffff;
+
+ if (m_rom_enabled)
+ data = m_rom->base()[offset & 0x3fff];
+ else if (offset < m_ram->size())
+ data = m_ram->pointer()[offset];
+
+ return data;
+}
+
+WRITE8_MEMBER(bbc_tube_32016_device::write)
+{
+ /* clear ROM select on first write */
+ if (!machine().side_effects_disabled()) m_rom_enabled = false;
+
+ if (offset < m_ram->size())
+ m_ram->pointer()[offset] = data;
+}
diff --git a/src/devices/bus/bbc/tube/tube_32016.h b/src/devices/bus/bbc/tube/tube_32016.h
new file mode 100644
index 00000000000..864b8173703
--- /dev/null
+++ b/src/devices/bus/bbc/tube/tube_32016.h
@@ -0,0 +1,71 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Acorn ANC05 32016 2nd processor
+
+ http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ANC05_320162ndproc.html
+
+ Acorn ANC06 Cambridge Co-Processor
+
+ http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ANC06_CamCoPro.html
+
+**********************************************************************/
+
+
+#ifndef MAME_BUS_BBC_TUBE_32016_H
+#define MAME_BUS_BBC_TUBE_32016_H
+
+#include "tube.h"
+#include "cpu/ns32000/ns32000.h"
+#include "machine/ram.h"
+#include "machine/tube.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> bbc_tube_32016_device
+
+class bbc_tube_32016_device :
+ public device_t,
+ public device_bbc_tube_interface
+{
+public:
+ // construction/destruction
+ bbc_tube_32016_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ // 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;
+
+ virtual uint8_t host_r(offs_t offset) override;
+ virtual void host_w(offs_t offset, uint8_t data) override;
+
+private:
+ required_device<ns32016_cpu_device> m_maincpu;
+ required_device<tube_device> m_ula;
+ required_device<ram_device> m_ram;
+ required_memory_region m_rom;
+
+ DECLARE_READ8_MEMBER(read);
+ DECLARE_WRITE8_MEMBER(write);
+
+ void tube_32016_mem(address_map &map);
+
+ bool m_rom_enabled;
+};
+
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(BBC_TUBE_32016, bbc_tube_32016_device)
+
+
+#endif /* MAME_BUS_BBC_TUBE_32016_H */
diff --git a/src/devices/bus/bml3/bml3bus.h b/src/devices/bus/bml3/bml3bus.h
index ddaa1c87dce..2132d376041 100644
--- a/src/devices/bus/bml3/bml3bus.h
+++ b/src/devices/bus/bml3/bml3bus.h
@@ -16,15 +16,6 @@
#define BML3BUS_MAX_SLOTS 6
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_BML3BUS_SLOT_ADD(_nbtag, _tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, BML3BUS_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- downcast<bml3bus_slot_device &>(*device).set_bml3bus_slot(_nbtag, _tag);
-
//**************************************************************************
// TYPE DEFINITIONS
@@ -37,7 +28,18 @@ class bml3bus_slot_device : public device_t,
{
public:
// construction/destruction
- bml3bus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ bml3bus_slot_device(machine_config const &mconfig, const char *tag, device_t *owner, const char *nbtag, T &&opts, const char *dflt)
+ : bml3bus_slot_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ set_bml3bus_slot(nbtag, tag);
+ }
+
+ bml3bus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
// device-level overrides
virtual void device_start() override;
diff --git a/src/devices/bus/coco/coco_dcmodem.cpp b/src/devices/bus/coco/coco_dcmodem.cpp
index 693b2457e51..bebd6c275d5 100644
--- a/src/devices/bus/coco/coco_dcmodem.cpp
+++ b/src/devices/bus/coco/coco_dcmodem.cpp
@@ -70,6 +70,11 @@ namespace
return memregion("eprom")->base();
}
+ virtual memory_region* get_cart_memregion() override
+ {
+ return memregion("eprom");
+ }
+
private:
// internal state
required_device<mos6551_device> m_uart;
diff --git a/src/devices/bus/coco/coco_orch90.cpp b/src/devices/bus/coco/coco_orch90.cpp
index 4023c7f2a0b..2ad8afdaae1 100644
--- a/src/devices/bus/coco/coco_orch90.cpp
+++ b/src/devices/bus/coco/coco_orch90.cpp
@@ -92,6 +92,11 @@ namespace
return memregion("eprom")->base();
}
+ virtual memory_region* get_cart_memregion() override
+ {
+ return memregion("eprom");
+ }
+
private:
WRITE8_MEMBER(write_left) { m_ldac->write(data); }
WRITE8_MEMBER(write_right) { m_rdac->write(data); }
diff --git a/src/devices/bus/coco/coco_rs232.cpp b/src/devices/bus/coco/coco_rs232.cpp
index e058a9d3f3c..5a124986792 100644
--- a/src/devices/bus/coco/coco_rs232.cpp
+++ b/src/devices/bus/coco/coco_rs232.cpp
@@ -68,6 +68,11 @@ namespace
return memregion("eprom")->base();
}
+ virtual memory_region* get_cart_memregion() override
+ {
+ return memregion("eprom");
+ }
+
private:
// internal state
required_device<mos6551_device> m_uart;
diff --git a/src/devices/bus/coco/cococart.cpp b/src/devices/bus/coco/cococart.cpp
index 93045e85230..6bf6360d24b 100644
--- a/src/devices/bus/coco/cococart.cpp
+++ b/src/devices/bus/coco/cococart.cpp
@@ -412,11 +412,11 @@ image_init_result cococart_slot_device::call_load()
{
memory_region *cart_mem = m_cart->get_cart_memregion();
uint8_t *base = cart_mem->base();
- offs_t read_length, cart_legnth = cart_mem->bytes();;
+ offs_t read_length, cart_length = cart_mem->bytes();;
if (!loaded_through_softlist())
{
- read_length = fread(base, cart_legnth);
+ read_length = fread(base, cart_length);
}
else
{
@@ -424,7 +424,7 @@ image_init_result cococart_slot_device::call_load()
memcpy(base, get_software_region("rom"), read_length);
}
- while (read_length < cart_legnth)
+ while (read_length < cart_length)
{
offs_t len = std::min(read_length, m_cart->get_cart_size() - read_length);
memcpy(base + read_length, base, len);
diff --git a/src/devices/bus/cpc/cpc_rs232.cpp b/src/devices/bus/cpc/cpc_rs232.cpp
index d4439ff1eaf..40fc0853539 100644
--- a/src/devices/bus/cpc/cpc_rs232.cpp
+++ b/src/devices/bus/cpc/cpc_rs232.cpp
@@ -137,12 +137,12 @@ WRITE_LINE_MEMBER(cpc_rs232_device::pit_out2_w)
READ8_MEMBER(cpc_rs232_device::dart_r)
{
- return m_dart->ba_cd_r(space,offset);
+ return m_dart->ba_cd_r(offset);
}
WRITE8_MEMBER(cpc_rs232_device::dart_w)
{
- m_dart->ba_cd_w(space,offset,data);
+ m_dart->ba_cd_w(offset,data);
}
READ8_MEMBER(cpc_rs232_device::pit_r)
diff --git a/src/devices/bus/cpc/playcity.cpp b/src/devices/bus/cpc/playcity.cpp
index 1e6f3b0cfa6..7d444abb03b 100644
--- a/src/devices/bus/cpc/playcity.cpp
+++ b/src/devices/bus/cpc/playcity.cpp
@@ -87,12 +87,12 @@ void cpc_playcity_device::device_reset()
READ8_MEMBER(cpc_playcity_device::ctc_r)
{
- return m_ctc->read(space,offset);
+ return m_ctc->read(offset);
}
WRITE8_MEMBER(cpc_playcity_device::ctc_w)
{
- m_ctc->write(space,offset,data);
+ m_ctc->write(offset,data);
if(offset == 0)
update_ymz_clock();
}
diff --git a/src/devices/bus/hp_dio/hp98644.cpp b/src/devices/bus/hp_dio/hp98644.cpp
index 004da09b55e..d3c347b6d31 100644
--- a/src/devices/bus/hp_dio/hp98644.cpp
+++ b/src/devices/bus/hp_dio/hp98644.cpp
@@ -193,7 +193,7 @@ READ16_MEMBER(dio16_98644_device::io_r)
case 0x0d:
case 0x0e:
case 0x0f:
- ret = m_uart->ins8250_r(space, offset & 0x07, mem_mask);
+ ret = m_uart->ins8250_r(offset & 0x07);
break;
}
@@ -230,7 +230,7 @@ WRITE16_MEMBER(dio16_98644_device::io_w)
case 0x0d:
case 0x0e:
case 0x0f:
- m_uart->ins8250_w(space, offset & 0x07, data, mem_mask);
+ m_uart->ins8250_w(offset & 0x07, data);
break;
}
}
diff --git a/src/devices/bus/isa/3c505.cpp b/src/devices/bus/isa/3c505.cpp
index 71548dcbdaa..37cd5ef346a 100644
--- a/src/devices/bus/isa/3c505.cpp
+++ b/src/devices/bus/isa/3c505.cpp
@@ -1644,7 +1644,9 @@ READ16_MEMBER(threecom3c505_device::read)
// omit excessive logging
if (data == last_data)
{
- uint32_t pc = space.device().state().pcbase();
+ // FIXME: space.device().state().pcbase() will crash mame with SIGSEGV (since mame0197)
+ uint32_t pc = 0; // space.device().state().pcbase();
+
if (pc == last_pc)
{
return data;
diff --git a/src/devices/bus/isa/aha1542.cpp b/src/devices/bus/isa/aha1542.cpp
deleted file mode 100644
index b044c88b171..00000000000
--- a/src/devices/bus/isa/aha1542.cpp
+++ /dev/null
@@ -1,201 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Darkstar
-/**********************************************************************
- *
- * Adaptec AHA-1542{,C,CF} SCSI Controller
- *
- **********************************************************************/
-
-/*
- PCB layout
- ----------
- Floppy SCSI
- +-----------+ +------------------+ +-
- +-----+-----------+-+------------------+--+
- | |
- | DIPSW DS1 |\
- | +-----+ | |
- | | | Y1 +---+ TRM TRM | |
- | | U3 | |U5 | |S|
- | U8 +-----+ +---+ |C|
- | +---+ +------+ +-------+ |S|
- | |U13| |U15 | Y2 | | |I|
- | +---+ +------+ | | | |
- | |U16 | |U17 | | |
- | +------+ +-------+ |/
- +-----------------------------------------+
- ||||||||| ||||||||||||||||||||||||| |
-
-
- DIPSW sw1 - sw8
- U3 Intel chip labelled "AHA-1542CF/552800-01 D/9346", probably FDC (82077)
- U5 Z84C0010VEC
- U8 EEPROM(?) labelled 545120A
- U13 CXK5864CM-10LL (64kbit SRAM)
- U15 M27C256B labelled "ADAPTEC INC/553801-00 C/MCODE 563D/(C) 1993"
- U16 M27C256B labelled "ADAPTEC INC/553601-00 C/BIOS C38D/(C) 1993"
- U17 AIC-7970Q
- Y1 XTAL SRX4054 93-38
- Y2 XTAL SRX4053 93-40
- TRM Dallas DS2107AS (SCSI termination)
- DS1 LED
-
-*/
-
-/*
- * The PCB has a couple of DIP switches:
- *
- * sw1 on enable termination
- * off software-controlled termination
- *
- * sw2 sw3 sw4 I/O Port
- * off off off 0x330 - 0x333 (default)
- * on off off 0x334 - 0x337
- * off on off 0x230 - 0x233
- * on on off 0x234 - 0x237
- * off off on 0x130 - 0x133
- * on off on 0x134 - 0x137
- * off on on reserved
- * on on on reserved
- *
- * sw5 on disable floppy interface
- * off enable floppy interface
- *
- * sw6 sw7 sw8 BIOS base address
- * off off off 0xdc000 (default)
- * on off off 0xd8000
- * off on off 0xd4000
- * on on off 0xd0000
- * off off on 0xcc000
- * on off on 0xc8000
- * off on on reserved
- * on on on BIOS disabled
- *
- * source: http://download.adaptec.com/pdfs/installation_guides/1540cfig.pdf
- */
-
-#include "emu.h"
-#include "aha1542.h"
-#include "cpu/z80/z80.h"
-
-// I/O Port interface
-// READ Port x+0: STATUS
-// WRITE Port x+0: CONTROL
-//
-// READ Port x+1: DATA
-// WRITE Port x+1: COMMAND
-//
-// READ Port x+2: INTERRUPT STATUS
-// WRITE Port x+2: (undefined?)
-//
-// R/W Port x+3: (undefined)
-
-// READ STATUS flags
-#define STAT_STST 0x80 // self-test in progress
-#define STAT_DIAGF 0x40 // internal diagnostic failure
-#define STAT_INIT 0x20 // mailbox initialization required
-#define STAT_IDLE 0x10 // HBA is idle
-#define STAT_CDFULL 0x08 // Command/Data output port is full
-#define STAT_DFULL 0x04 // Data input port is full
-#define STAT_INVCMD 0x01 // Invalid command
-
-// READ INTERRUPT STATUS flags
-#define INTR_ANY 0x80 // any interrupt
-#define INTR_SRCD 0x08 // SCSI reset detected
-#define INTR_HACC 0x04 // HA command complete
-#define INTR_MBOA 0x02 // MBO empty
-#define INTR_MBIF 0x01 // MBI full
-
-// WRITE CONTROL commands
-#define CTRL_HRST 0x80 // Hard reset
-#define CTRL_SRST 0x40 // Soft reset
-#define CTRL_IRST 0x20 // interrupt reset
-#define CTRL_SCRST 0x10 // SCSI bus reset
-
-// READ/WRITE DATA commands
-#define CMD_NOP 0x00 // No operation
-#define CMD_MBINIT 0x01 // mailbox initialization
-#define CMD_START_SCSI 0x02 // Start SCSI command
-#define CMD_BIOSCMD 0x03 // undocumented BIOS conmmand (shadow RAM etc.)
-#define CMD_INQUIRY 0x04 // Adapter inquiry
-#define CMD_EMBOI 0x05 // enable Mailbox Out Interrupt
-#define CMD_SELTIMEOUT 0x06 // Set SEL timeout
-#define CMD_BUSON_TIME 0x07 // set bus-On time
-#define CMD_BUSOFF_TIME 0x08 // set bus-off time
-#define CMD_DMASPEED 0x09 // set ISA DMA speed
-#define CMD_RETDEVS 0x0a // return installed devices
-#define CMD_RETCONF 0x0b // return configuration data
-#define CMD_TARGET 0x0c // set HBA to target mode
-#define CMD_RETSETUP 0x0d // return setup data
-#define CMD_ECHO 0x1f // ECHO command data (NetBSD says it is 0x1e)
-
-// these are for 1541C only:
-#define CMD_RETDEVSHI 0x23 // return devices 8-15 (from NetBSD)
-#define CMD_EXTBIOS 0x28 // return extended BIOS information
-#define CMD_MBENABLE 0x29 // set mailbox interface enable
-
-DEFINE_DEVICE_TYPE(AHA1542, aha1542_device, "aha1542", "AHA1542 SCSI Controller")
-
-#define Z84C0010_TAG "u5"
-
-READ8_MEMBER( aha1542_device::aha1542_r )
-{
- logerror("%s aha1542_r(): offset=%d\n", machine().describe_context(), offset);
- return 0xff;
-}
-
-WRITE8_MEMBER( aha1542_device::aha1542_w )
-{
- logerror("%s aha1542_w(): offset=%d data=0x%02x\n", machine().describe_context(), offset, data);
-}
-
-//-------------------------------------------------
-// ROM( aha1542 )
-//-------------------------------------------------
-
-ROM_START( aha1542 )
- ROM_REGION( 0x8000, "aha1542", 0 )
- ROM_LOAD( "553601-00.u16", 0x0000, 0x8000, CRC(ab22fc02) SHA1(f9f783e0272fc14ba3de32316997f1f6cadc67d0) ) /* Adaptec 1540CF/1542CF BIOS v2.01 */
-
- ROM_REGION( 0x8000, Z84C0010_TAG, 0 )
- ROM_LOAD( "553801-00.u15", 0x0000, 0x8000, CRC(7824397e) SHA1(35bc2c8fab31aad3190a478f2dc8f3a72958cf04) ) /* ADAPTEC, INC MCODE */
-ROM_END
-
-void aha1542_device::z84c0010_mem(address_map &map)
-{
- map(0x0000, 0x7fff).rom().region(Z84C0010_TAG, 0);
- map(0x8000, 0x800f).noprw(); // something is mapped there
- map(0x9000, 0xafff).ram(); // 2kb RAM chip
- map(0xe000, 0xe0ff).ram(); // probably PC<->Z80 communication area
- map(0xb000, 0xb000).noprw(); // something?
-}
-
-const tiny_rom_entry *aha1542_device::device_rom_region() const
-{
- return ROM_NAME( aha1542 );
-}
-
-void aha1542_device::device_add_mconfig(machine_config &config)
-{
- z80_device &cpu(Z80(config, Z84C0010_TAG, XTAL(12'000'000)));
- cpu.set_addrmap(AS_PROGRAM, &aha1542_device::z84c0010_mem);
-}
-
-aha1542_device::aha1542_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- device_t(mconfig, AHA1542, tag, owner, clock),
- device_isa16_card_interface(mconfig, *this)
-{
-}
-
-void aha1542_device::device_start()
-{
- set_isa_device();
- m_isa->install_rom(this, 0xdc000, 0xdffff, "aha1542", "aha1542");
- m_isa->install_device(0x330, 0x333, read8_delegate(FUNC( aha1542_device::aha1542_r ), this),
- write8_delegate(FUNC( aha1542_device::aha1542_w ), this) );
-}
-
-
-void aha1542_device::device_reset()
-{
-}
diff --git a/src/devices/bus/isa/aha1542.h b/src/devices/bus/isa/aha1542.h
deleted file mode 100644
index cc84c2ea55b..00000000000
--- a/src/devices/bus/isa/aha1542.h
+++ /dev/null
@@ -1,54 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Darkstar
-/**********************************************************************
- *
- * Adaptec AHA-1542{,C,CF} SCSI Controller
- *
- **********************************************************************
-
-
-
- **********************************************************************/
-
-#ifndef MAME_BUS_AHA1542_H
-#define MAME_BUS_AHA1542_H
-
-#pragma once
-
-
-#include "isa.h"
-
-//*********************************************************************
-// TYPE DEFINITIONS
-//*********************************************************************
-
-// ====================> aha1542_device
-
-class aha1542_device : public device_t,
- public device_isa16_card_interface
-{
-public:
- static constexpr feature_type unemulated_features() { return feature::DISK; }
- // construction/destruction
- aha1542_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
- DECLARE_READ8_MEMBER( aha1542_r );
- DECLARE_WRITE8_MEMBER( aha1542_w );
-
-protected:
- // device-level overrides
- virtual void device_start() override;
- virtual void device_reset() override;
-
- // optional information overrides
- virtual const tiny_rom_entry *device_rom_region() const override;
- virtual void device_add_mconfig(machine_config &config) override;
-
-private:
- void z84c0010_mem(address_map &map);
-};
-
-// device type definition
-DECLARE_DEVICE_TYPE(AHA1542, aha1542_device)
-
-#endif // MAME_BUS_AHA1542_H
diff --git a/src/devices/bus/isa/aha1542b.cpp b/src/devices/bus/isa/aha1542b.cpp
new file mode 100644
index 00000000000..087f9ef9611
--- /dev/null
+++ b/src/devices/bus/isa/aha1542b.cpp
@@ -0,0 +1,401 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ Adaptec AHA-1540/42A and AHA-1540/42B SCSI controllers
+
+ The alternate BIOSes using port 334h instead of 330h are provided due
+ to certain MIDI cards requiring the 330h port.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "aha1542b.h"
+
+#include "cpu/i8085/i8085.h"
+#include "machine/aic6250.h"
+#include "machine/nscsi_bus.h"
+#include "machine/nscsi_hd.h"
+
+
+DEFINE_DEVICE_TYPE(AHA1542A, aha1542a_device, "aha1542a", "AHA-1542A SCSI Controller")
+DEFINE_DEVICE_TYPE(AHA1542B, aha1542b_device, "aha1542b", "AHA-1542B SCSI Controller")
+
+
+aha154x_device::aha154x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_isa16_card_interface(mconfig, *this)
+ , m_fdc(*this, "fdc")
+ , m_bios(*this, "bios")
+{
+}
+
+aha1542a_device::aha1542a_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : aha154x_device(mconfig, AHA1542A, tag, owner, clock)
+{
+}
+
+aha1542b_device::aha1542b_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : aha154x_device(mconfig, AHA1542B, tag, owner, clock)
+{
+}
+
+void aha154x_device::device_start()
+{
+}
+
+void aha154x_device::i8085_map(address_map &map)
+{
+ map(0x0000, 0x3fff).rom().region("mcode", 0);
+ map(0x8000, 0x800f).m("scsi:7:scsic", FUNC(aic6250_device::map));
+ map(0xe000, 0xe7ff).ram();
+}
+
+static INPUT_PORTS_START(aha1542a)
+ PORT_START("SETUP")
+ PORT_DIPNAME(0x01, 0x01, "Synchronous Negotiation") PORT_DIPLOCATION("J1:1")
+ PORT_DIPSETTING(0x01, "Disabled")
+ PORT_DIPSETTING(0x00, "Enabled")
+ PORT_DIPNAME(0x02, 0x02, "Diagnostic Test Loop") PORT_DIPLOCATION("J1:2")
+ PORT_DIPSETTING(0x02, DEF_STR(Off))
+ PORT_DIPSETTING(0x00, DEF_STR(On))
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_CUSTOM) // Data accepted by host
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN)
+ PORT_DIPNAME(0x10, 0x10, "SCSI Parity Checking") PORT_DIPLOCATION("J1:3")
+ PORT_DIPSETTING(0x00, "Disabled")
+ PORT_DIPSETTING(0x10, "Enabled")
+ PORT_DIPNAME(0x60, 0x60, "DMA Transfer Speed") PORT_DIPLOCATION("J1:12,13")
+ PORT_DIPSETTING(0x60, "5.0 MB/s")
+ PORT_DIPSETTING(0x40, "5.7 MB/s")
+ PORT_DIPSETTING(0x20, "6.7 MB/s")
+ PORT_DIPSETTING(0x00, "8.0 MB/s")
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_CUSTOM) // SCSI reset
+
+ PORT_START("CONFIG")
+ PORT_DIPNAME(0x07, 0x07, "SCSI Address ID") PORT_DIPLOCATION("J1:4,5,6")
+ PORT_DIPSETTING(0x00, "0")
+ PORT_DIPSETTING(0x01, "1")
+ PORT_DIPSETTING(0x02, "2")
+ PORT_DIPSETTING(0x03, "3")
+ PORT_DIPSETTING(0x04, "4")
+ PORT_DIPSETTING(0x05, "5")
+ PORT_DIPSETTING(0x06, "6")
+ PORT_DIPSETTING(0x07, "7")
+ PORT_DIPNAME(0x18, 0x08, "DMA Channel") PORT_DIPLOCATION("J1:7,8")
+ PORT_DIPSETTING(0x00, "0")
+ PORT_DIPSETTING(0x08, "5")
+ PORT_DIPSETTING(0x10, "6")
+ PORT_DIPSETTING(0x18, "7")
+ PORT_DIPNAME(0xe0, 0xa0, "Interrupt Channel") PORT_DIPLOCATION("J1:9,10,11")
+ PORT_DIPSETTING(0xe0, "9")
+ PORT_DIPSETTING(0xc0, "10")
+ PORT_DIPSETTING(0xa0, "11")
+ PORT_DIPSETTING(0x80, "12")
+ PORT_DIPSETTING(0x60, "14")
+ PORT_DIPSETTING(0x40, "15")
+
+ PORT_START("DMAREQ")
+ PORT_DIPNAME(0xf, 0xd, "DMA Request") PORT_DIPLOCATION("J14:1,2,3,4")
+ PORT_DIPSETTING(0xe, "Channel 0")
+ PORT_DIPSETTING(0xd, "Channel 5")
+ PORT_DIPSETTING(0xb, "Channel 6")
+ PORT_DIPSETTING(0x7, "Channel 7")
+
+ PORT_START("DMAACK")
+ PORT_DIPNAME(0xf, 0xd, "DMA Acknowledge") PORT_DIPLOCATION("J15:1,2,3,4")
+ PORT_DIPSETTING(0xe, "Channel 0")
+ PORT_DIPSETTING(0xd, "Channel 5")
+ PORT_DIPSETTING(0xb, "Channel 6")
+ PORT_DIPSETTING(0x7, "Channel 7")
+
+ PORT_START("IRQ")
+ PORT_DIPNAME(0x3f, 0x3b, "Interrupt") PORT_DIPLOCATION("J16:1,2,3,4,5,6")
+ PORT_DIPSETTING(0x3e, "IRQ 9")
+ PORT_DIPSETTING(0x3d, "IRQ 10")
+ PORT_DIPSETTING(0x3b, "IRQ 11")
+ PORT_DIPSETTING(0x37, "IRQ 12")
+ PORT_DIPSETTING(0x2f, "IRQ 14")
+ PORT_DIPSETTING(0x1f, "IRQ 15")
+
+ PORT_START("BIOSWAIT")
+ PORT_DIPNAME(0xf, 0xe, "BIOS Wait State") PORT_DIPLOCATION("J7:1,2,3,4")
+ PORT_DIPSETTING(0xe, "Disabled")
+ PORT_DIPSETTING(0xd, "100 ns")
+ PORT_DIPSETTING(0xb, "200 ns")
+ PORT_DIPSETTING(0x7, "300 ns")
+
+ PORT_START("PORTADDR")
+ PORT_DIPNAME(0x7, 0x6, "I/O Port Address") PORT_DIPLOCATION("J6:1,2,3")
+ PORT_DIPSETTING(0x2, "130h")
+ PORT_DIPSETTING(0x3, "134h")
+ PORT_DIPSETTING(0x4, "230h")
+ PORT_DIPSETTING(0x5, "234h")
+ PORT_DIPSETTING(0x6, "330h")
+ PORT_DIPSETTING(0x7, "334h")
+
+ PORT_START("BIOSADDR")
+ PORT_DIPNAME(0x3, 0x3, "BIOS Base Address") PORT_DIPLOCATION("J10:2,1")
+ PORT_DIPSETTING(0x0, "0C8000h")
+ PORT_DIPSETTING(0x1, "0CC000h")
+ PORT_DIPSETTING(0x2, "0D8000h")
+ PORT_DIPSETTING(0x3, "0DC000h")
+ PORT_DIPNAME(0x4, 0x0, "System BIOS") PORT_DIPLOCATION("J10:3")
+ PORT_DIPSETTING(0x4, "Disabled")
+ PORT_DIPSETTING(0x0, "Enabled")
+
+ PORT_START("AUX")
+ PORT_DIPNAME(0x1, 0x1, DEF_STR(Unused)) PORT_DIPLOCATION("J9:1")
+ PORT_DIPSETTING(0x1, DEF_STR(Off))
+ PORT_DIPSETTING(0x0, DEF_STR(On))
+ PORT_DIPNAME(0x2, 0x2, DEF_STR(Unused)) PORT_DIPLOCATION("J9:2")
+ PORT_DIPSETTING(0x2, DEF_STR(Off))
+ PORT_DIPSETTING(0x0, DEF_STR(On))
+ PORT_DIPNAME(0x4, 0x4, DEF_STR(Unused)) PORT_DIPLOCATION("J9:3")
+ PORT_DIPSETTING(0x4, DEF_STR(Off))
+ PORT_DIPSETTING(0x0, DEF_STR(On))
+ PORT_DIPNAME(0x8, 0x8, "Automatic Request Sense") PORT_DIPLOCATION("J9:4")
+ PORT_DIPSETTING(0x0, "Disabled")
+ PORT_DIPSETTING(0x8, "Enabled")
+
+ PORT_START("FDCCFG")
+ PORT_DIPNAME(0x1, 0x1, "FDC Secondary Address") PORT_DIPLOCATION("J12:1")
+ PORT_DIPSETTING(0x0, "370h-377h")
+ PORT_DIPSETTING(0x1, "3F0h-3F7h")
+ PORT_DIPNAME(0x2, 0x0, "Flexible Disk Controller") PORT_DIPLOCATION("J13:1")
+ PORT_DIPSETTING(0x2, DEF_STR(Off))
+ PORT_DIPSETTING(0x0, DEF_STR(On))
+
+ PORT_START("FDCIRQ")
+ PORT_DIPNAME(0x7, 0x4, "FDC Interrupt") PORT_DIPLOCATION("J17:1,2,3")
+ PORT_DIPSETTING(0x4, "Channel 6")
+ PORT_DIPSETTING(0x1, "Channel 10")
+
+ PORT_START("FDCDREQ")
+ PORT_DIPNAME(0x7, 0x4, "FDC DMA Request") PORT_DIPLOCATION("J18:1,2,3")
+ PORT_DIPSETTING(0x4, "Channel 2")
+ PORT_DIPSETTING(0x1, "Channel 3")
+
+ PORT_START("FDCDACK")
+ PORT_DIPNAME(0x7, 0x4, "FDC DMA Acknowledge") PORT_DIPLOCATION("J19:1,2,3")
+ PORT_DIPSETTING(0x4, "Channel 2")
+ PORT_DIPSETTING(0x1, "Channel 3")
+INPUT_PORTS_END
+
+static INPUT_PORTS_START(aha1542b)
+ PORT_START("SETUP")
+ PORT_DIPNAME(0x01, 0x01, "Synchronous Negotiation") PORT_DIPLOCATION("J5:1")
+ PORT_DIPSETTING(0x01, "Disabled")
+ PORT_DIPSETTING(0x00, "Enabled")
+ PORT_DIPNAME(0x02, 0x02, "Diagnostic Test Loop") PORT_DIPLOCATION("J5:2")
+ PORT_DIPSETTING(0x02, DEF_STR(Off))
+ PORT_DIPSETTING(0x00, DEF_STR(On))
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_DIPNAME(0x10, 0x10, "SCSI Parity Checking") PORT_DIPLOCATION("J5:3")
+ PORT_DIPSETTING(0x00, "Disabled")
+ PORT_DIPSETTING(0x10, "Enabled")
+ PORT_DIPNAME(0x60, 0x60, "DMA Transfer Speed") PORT_DIPLOCATION("J5:12,13")
+ PORT_DIPSETTING(0x60, "5.0 MB/s")
+ PORT_DIPSETTING(0x40, "5.7 MB/s")
+ PORT_DIPSETTING(0x20, "6.7 MB/s")
+ PORT_DIPSETTING(0x00, "8.0 MB/s")
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
+
+ PORT_START("CONFIG")
+ PORT_DIPNAME(0x07, 0x07, "SCSI Address ID") PORT_DIPLOCATION("J5:4,5,6")
+ PORT_DIPSETTING(0x00, "0")
+ PORT_DIPSETTING(0x01, "1")
+ PORT_DIPSETTING(0x02, "2")
+ PORT_DIPSETTING(0x03, "3")
+ PORT_DIPSETTING(0x04, "4")
+ PORT_DIPSETTING(0x05, "5")
+ PORT_DIPSETTING(0x06, "6")
+ PORT_DIPSETTING(0x07, "7")
+ PORT_DIPNAME(0x18, 0x08, "DMA Channel") PORT_DIPLOCATION("J5:7,8")
+ PORT_DIPSETTING(0x00, "0")
+ PORT_DIPSETTING(0x08, "5")
+ PORT_DIPSETTING(0x10, "6")
+ PORT_DIPSETTING(0x18, "7")
+ PORT_DIPNAME(0xe0, 0xa0, "Interrupt Channel") PORT_DIPLOCATION("J5:9,10,11")
+ PORT_DIPSETTING(0xe0, "9")
+ PORT_DIPSETTING(0xc0, "10")
+ PORT_DIPSETTING(0xa0, "11")
+ PORT_DIPSETTING(0x80, "12")
+ PORT_DIPSETTING(0x60, "14")
+ PORT_DIPSETTING(0x40, "15")
+
+ PORT_START("DMAREQ")
+ PORT_DIPNAME(0xf, 0xd, "DMA Request") PORT_DIPLOCATION("J9:1,2,3,4")
+ PORT_DIPSETTING(0xe, "Channel 0")
+ PORT_DIPSETTING(0xd, "Channel 5")
+ PORT_DIPSETTING(0xb, "Channel 6")
+ PORT_DIPSETTING(0x7, "Channel 7")
+
+ PORT_START("DMAACK")
+ PORT_DIPNAME(0xf, 0xd, "DMA Acknowledge") PORT_DIPLOCATION("J9:5,6,7,8")
+ PORT_DIPSETTING(0xe, "Channel 0")
+ PORT_DIPSETTING(0xd, "Channel 5")
+ PORT_DIPSETTING(0xb, "Channel 6")
+ PORT_DIPSETTING(0x7, "Channel 7")
+
+ PORT_START("IRQ")
+ PORT_DIPNAME(0x3f, 0x3b, "Interrupt") PORT_DIPLOCATION("J9:9,10,11,12,13,14")
+ PORT_DIPSETTING(0x3e, "IRQ 9")
+ PORT_DIPSETTING(0x3d, "IRQ 10")
+ PORT_DIPSETTING(0x3b, "IRQ 11")
+ PORT_DIPSETTING(0x37, "IRQ 12")
+ PORT_DIPSETTING(0x2f, "IRQ 14")
+ PORT_DIPSETTING(0x1f, "IRQ 15")
+
+ PORT_START("BIOSWAIT")
+ PORT_DIPNAME(0x3, 0x3, "BIOS Wait State") PORT_DIPLOCATION("J7:5,6")
+ PORT_DIPSETTING(0x3, "Disabled")
+ PORT_DIPSETTING(0x2, "100 ns")
+ PORT_DIPSETTING(0x1, "200 ns")
+ PORT_DIPSETTING(0x0, "300 ns")
+
+ PORT_START("PORTADDR")
+ PORT_DIPNAME(0x7, 0x6, "I/O Port Address") PORT_DIPLOCATION("J7:2,3,4")
+ PORT_DIPSETTING(0x2, "130h")
+ PORT_DIPSETTING(0x3, "134h")
+ PORT_DIPSETTING(0x4, "230h")
+ PORT_DIPSETTING(0x5, "234h")
+ PORT_DIPSETTING(0x6, "330h")
+ PORT_DIPSETTING(0x7, "334h")
+
+ PORT_START("BIOSADDR")
+ PORT_DIPNAME(0x3, 0x3, "BIOS Base Address") PORT_DIPLOCATION("J7:8,7")
+ PORT_DIPSETTING(0x0, "0C8000h")
+ PORT_DIPSETTING(0x1, "0CC000h")
+ PORT_DIPSETTING(0x2, "0D8000h")
+ PORT_DIPSETTING(0x3, "0DC000h")
+ PORT_DIPNAME(0x4, 0x0, "System BIOS") PORT_DIPLOCATION("J6:1")
+ PORT_DIPSETTING(0x4, "Disabled")
+ PORT_DIPSETTING(0x0, "Enabled")
+
+ PORT_START("AUX")
+ PORT_DIPNAME(0x1, 0x1, DEF_STR(Unused)) PORT_DIPLOCATION("J6:2")
+ PORT_DIPSETTING(0x1, DEF_STR(Off))
+ PORT_DIPSETTING(0x0, DEF_STR(On))
+ PORT_DIPNAME(0x2, 0x2, DEF_STR(Unused)) PORT_DIPLOCATION("J6:3")
+ PORT_DIPSETTING(0x2, DEF_STR(Off))
+ PORT_DIPSETTING(0x0, DEF_STR(On))
+ PORT_DIPNAME(0x4, 0x4, DEF_STR(Unused)) PORT_DIPLOCATION("J6:4")
+ PORT_DIPSETTING(0x4, DEF_STR(Off))
+ PORT_DIPSETTING(0x0, DEF_STR(On))
+ PORT_DIPNAME(0x8, 0x8, "Automatic Request Sense") PORT_DIPLOCATION("J6:5")
+ PORT_DIPSETTING(0x0, "Disabled")
+ PORT_DIPSETTING(0x8, "Enabled")
+
+ PORT_START("FDCCFG")
+ PORT_DIPNAME(0x1, 0x1, "Floppy Secondary Address") PORT_DIPLOCATION("J7:1")
+ PORT_DIPSETTING(0x1, "170h-177h")
+ PORT_DIPSETTING(0x0, "1F0h-1F7h")
+ PORT_DIPNAME(0x2, 0x0, "Floppy Disk Controller") PORT_DIPLOCATION("J8:1")
+ PORT_DIPSETTING(0x2, DEF_STR(Off))
+ PORT_DIPSETTING(0x0, DEF_STR(On))
+ PORT_DIPNAME(0x4, 0x4, "Floppy Dual Channel Speed") PORT_DIPLOCATION("J8:8")
+ PORT_DIPSETTING(0x4, DEF_STR(Off))
+ PORT_DIPSETTING(0x0, DEF_STR(On))
+
+ PORT_START("FDCIRQ")
+ PORT_DIPNAME(0x3, 0x2, "FDC Interrupt") PORT_DIPLOCATION("J8:6,7")
+ PORT_DIPSETTING(0x2, "Channel 6")
+ PORT_DIPSETTING(0x1, "Channel 10")
+
+ PORT_START("FDCDREQ")
+ PORT_DIPNAME(0x3, 0x2, "FDC DMA Request") PORT_DIPLOCATION("J8:2,3")
+ PORT_DIPSETTING(0x2, "Channel 2")
+ PORT_DIPSETTING(0x1, "Channel 3")
+
+ PORT_START("FDCDACK")
+ PORT_DIPNAME(0x3, 0x2, "FDC DMA Acknowledge") PORT_DIPLOCATION("J8:4,5")
+ PORT_DIPSETTING(0x2, "Channel 2")
+ PORT_DIPSETTING(0x1, "Channel 3")
+INPUT_PORTS_END
+
+ioport_constructor aha1542a_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME(aha1542a);
+}
+
+ioport_constructor aha1542b_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME(aha1542b);
+}
+
+static void aha154x_scsi_devices(device_slot_interface &device)
+{
+ device.option_add("harddisk", NSCSI_HARDDISK);
+ device.option_add_internal("scsic", AIC6250);
+}
+
+void aha154x_device::scsic_config(device_t *device)
+{
+ device->set_clock(20'000'000);
+ downcast<aic6250_device &>(*device).int_cb().set_inputline("^^localcpu", I8085_RST65_LINE);
+ downcast<aic6250_device &>(*device).port_a_r_cb().set_ioport("^^SETUP");
+ downcast<aic6250_device &>(*device).port_b_r_cb().set_ioport("^^CONFIG");
+}
+
+void aha154x_device::device_add_mconfig(machine_config &config)
+{
+ i8085a_cpu_device &localcpu(I8085A(config, "localcpu", 10'000'000));
+ localcpu.set_addrmap(AS_PROGRAM, &aha154x_device::i8085_map);
+
+ NSCSI_BUS(config, "scsi");
+ NSCSI_CONNECTOR(config, "scsi:0", aha154x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:1", aha154x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:2", aha154x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:3", aha154x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:4", aha154x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:5", aha154x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:6", aha154x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:7", aha154x_scsi_devices, "scsic", true)
+ .set_option_machine_config("scsic", [this] (device_t *device) { scsic_config(device); });
+
+ DP8473(config, m_fdc, 24_MHz_XTAL);
+}
+
+
+ROM_START(aha1542a)
+ ROM_REGION(0x4000, "bios", 0)
+ ROM_LOAD("b_9700.bin", 0x0000, 0x4000, CRC(35f546e9) SHA1(f559b08f52044f53836021a83f56f628e32216bd))
+
+ ROM_REGION(0x4000, "mcode", 0)
+ ROM_LOAD("m_e7bc.bin", 0x0000, 0x4000, CRC(985b7a31) SHA1(bba0d84fa1b67ea71905953c25201fa2020cf465))
+ROM_END
+
+ROM_START(aha1542b)
+ ROM_REGION(0x4000, "bios", 0)
+ ROM_SYSTEM_BIOS(0, "v310", "AT/SCSI BIOS Version 3.10")
+ ROMX_LOAD("adaptec_inc_420412-00_b_bios_bc00_1990.bin", 0x0000, 0x4000, CRC(bd3f74e7) SHA1(c38d82fd50e5439812fa093e0d4f5fd136c63844), ROM_BIOS(0))
+ ROM_SYSTEM_BIOS(1, "v310a", "AT/SCSI BIOS Version 3.10A (port 334h)")
+ ROMX_LOAD("154xp334.bin", 0x0000, 0x4000, CRC(4911f232) SHA1(2e24ce380c6f7694c45484019857cb919e2a9965), ROM_BIOS(1))
+ ROM_SYSTEM_BIOS(2, "v311", "AT/SCSI BIOS Version 3.11")
+ ROMX_LOAD("bios_c900.u13", 0x0000, 0x4000, CRC(4660d0c1) SHA1(a581291de96836b6f6cc0b6244b8fa1ee333346a), ROM_BIOS(2))
+ ROM_SYSTEM_BIOS(3, "v320g", "AT/SCSI BIOS Version 3.20 (> 1 GB support)")
+ ROMX_LOAD("b_bd00.bin", 0x0000, 0x4000, CRC(2387197b) SHA1(703e1fe1ba924c02d617ac37ec7a20e12bef1cc7), ROM_BIOS(3))
+ ROM_SYSTEM_BIOS(4, "v320gt", "AT/SCSI BIOS Version 3.20 (extended timeout)")
+ ROMX_LOAD("b_b300.bin", 0x0000, 0x4000, CRC(4c5b07d8) SHA1(692e824f916f55519c9905839f5f6609f5e8c0a5), ROM_BIOS(4))
+ ROM_SYSTEM_BIOS(5, "v320a", "AT/SCSI BIOS Version 3.20Alt (port 334h)")
+ ROMX_LOAD("b_ac00.bin", 0x0000, 0x4000, CRC(becd6d08) SHA1(b5e7cbdeb241c1ff57602291e87c58ac0ee72d54), ROM_BIOS(5))
+
+ ROM_REGION(0x4000, "mcode", 0)
+ ROMX_LOAD("adaptec_inc_434108-00_a_mcode_fc8a_1990.bin", 0x0000, 0x4000, CRC(6801f89e) SHA1(33d36bc93734105b950414e7c433a283032838e9), ROM_BIOS(0))
+ ROMX_LOAD("adaptec_inc_434108-00_a_mcode_fc8a_1990.bin", 0x0000, 0x4000, CRC(6801f89e) SHA1(33d36bc93734105b950414e7c433a283032838e9), ROM_BIOS(1)) // assumed compatible with v310a BIOS
+ ROMX_LOAD("firmware_62d3.u12", 0x0000, 0x4000, CRC(6056ca33) SHA1(8dd4aaffcb107dbcc85ac87d878fa6093b904a20), ROM_BIOS(2))
+ ROMX_LOAD("m_3054.bin", 0x0000, 0x4000, CRC(461b1885) SHA1(50dc49b0fd88b116b83e3c71f58c758b618d1ddf), ROM_BIOS(3))
+ ROMX_LOAD("m_5d98.bin", 0x0000, 0x4000, CRC(f7d51536) SHA1(5ad1bb4bde3e8c30380b05d32ac273c781ab12a8), ROM_BIOS(4)) // also provided with v320g BIOS
+ ROMX_LOAD("m_3054.bin", 0x0000, 0x4000, CRC(461b1885) SHA1(50dc49b0fd88b116b83e3c71f58c758b618d1ddf), ROM_BIOS(5))
+ROM_END
+
+const tiny_rom_entry *aha1542a_device::device_rom_region() const
+{
+ return ROM_NAME(aha1542a);
+}
+
+const tiny_rom_entry *aha1542b_device::device_rom_region() const
+{
+ return ROM_NAME(aha1542b);
+}
diff --git a/src/devices/bus/isa/aha1542b.h b/src/devices/bus/isa/aha1542b.h
new file mode 100644
index 00000000000..88f18941909
--- /dev/null
+++ b/src/devices/bus/isa/aha1542b.h
@@ -0,0 +1,59 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ Adaptec AHA-1540/42A and AHA-1540/42B SCSI controllers
+
+***************************************************************************/
+
+#ifndef MAME_BUS_ISA_AHA1542B_H
+#define MAME_BUS_ISA_AHA1542B_H
+
+#pragma once
+
+#include "isa.h"
+#include "machine/upd765.h"
+
+class aha154x_device : public device_t, public device_isa16_card_interface
+{
+protected:
+ aha154x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
+
+ virtual void device_start() override;
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ void i8085_map(address_map &map);
+ void scsic_config(device_t *device);
+
+ required_device<upd765_family_device> m_fdc;
+ required_region_ptr<u8> m_bios;
+};
+
+class aha1542a_device : public aha154x_device
+{
+public:
+ aha1542a_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+
+protected:
+ virtual ioport_constructor device_input_ports() const override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+};
+
+class aha1542b_device : public aha154x_device
+{
+public:
+ aha1542b_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+
+protected:
+ virtual ioport_constructor device_input_ports() const override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+};
+
+DECLARE_DEVICE_TYPE(AHA1542A, aha1542a_device)
+DECLARE_DEVICE_TYPE(AHA1542B, aha1542b_device)
+
+#endif // MAME_BUS_ISA_AHA1542B_H
diff --git a/src/devices/bus/isa/aha1542c.cpp b/src/devices/bus/isa/aha1542c.cpp
new file mode 100644
index 00000000000..d5c35166b1f
--- /dev/null
+++ b/src/devices/bus/isa/aha1542c.cpp
@@ -0,0 +1,387 @@
+// license:BSD-3-Clause
+// copyright-holders:Darkstar
+/**********************************************************************
+ *
+ * Adaptec AHA-1542{C,CF,CP} SCSI Controller
+ *
+ **********************************************************************/
+
+/*
+Hardware info by Guru
+
+Adaptec 1993
+
+PCB Layout
+----------
+
+Adaptec AHA-1542CF/1542CF
+FCC ID: FGT1542CF
+FAB 545107-00 REV C
+ASSY 545106-00
+
+|-------|---------------|---|-------------------|--|
+| J1 | FLOPPY34 | | SCSI50 | |
+| |---------------| |-------------------| |
+| S1 DS1 |
+| |
+| |------| DS2107AS DS2107AS |--|
+| |PC8477| 24MHz Z84C0010 | |
+| PAL |BV-1 | |S |
+| | | |----------| | |
+| |------| | | |C |
+| 93C46.U11 20MHz | | | |
+| UM6264 MCODE.U15 |ADAPTEC | |S |
+| |AIC-7970Q | | |
+| BIOS.U16 | | |I |
+| | | | |
+| |----------| |--|
+| |
+|-| |--| |----|
+ |--------------| |-------------------------|
+
+Notes:
+ J1 - 4-position header for drive activity external LED connection
+ S1 - 8-position DIP Switch (See Table A)
+ PC8477BV-1 - National Semiconductor PC8477BV-1 'SuperFDC' Advanced Floppy Disk Controller (PLCC68)
+ This is software compatible with NEC uPD765 and pin compatible with Intel 82077AA
+ Labelled "AHA-1542CF/552800-01 F/9513"
+ Clock input 24.000MHz
+ SCSI - 50-pin Centronics style external SCSI connector (DDK 57AE-40500-21D)
+ Z84C0010 - Zilog Z84C0010VEC Z80 CPU. Clock input 20/2 [10.000MHz] sourced from AIC-7970Q (PLCC44)
+ 93C46.U11 - Atmel 93C46 128b x8-bit / 64b x16-bit (1kB) EEPROM labelled '545120A' (SOIC8)
+ 6264 - Unicorn Microelectronics UM6264BM-10L 8k x8-bit Static RAM (SOJ28)
+ MCODE.U15 - ST Microelectronics M27C256B 32k x8-bit EPROM labelled 'ADAPTEC INC 553801-00 E MCODE 4B81' (DIP28)
+ BIOS.U16 - ST Microelectronics M27C256B 32k x8-bit EPROM labelled 'ADAPTEC INC 553601-00 E BIOS 7600' (DIP28)
+ BIOS 0x7600h is revision 2.10
+ PAL - AMD PALCE16V8H-15JC/4 PAL (SOJ20)
+ AIC-7970Q - Adaptec AIC-7970Q Fast SCSI Controller IC. Clock input 20.000MHz (QFP144)
+ DS2107AS - Dallas DS2107AS SCSI Active Terminator (SOIC16)
+ DS1 - Internal Drive Activity LED
+ SCSI50 - 50-pin Right Angled Flat Cable Connector With Support For Up To 7 SCSI Drives
+ FLOPPY34 - 34-pin Right Angled Flat Cable Connector With Support For Up To 2 Floppy Drives (360kb,720kb,1.2MB,1.44MB)
+
+
+Table A - S1 DIP Switch Description
+-----------------------------------
+
+Default: All DIP Switches OFF (i.e. Settings changed via BIOS and saved in EEPROM)
+Software Defaults = *
+----------------------+-----+-----+-----+-----+-----+-----+-----+-----+
+ | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | SW7 | SW8 |
+----------------------|-----+-----+-----+-----+-----+-----+-----+-----+
+Termination Enabled | ON | | | | | | | |
+ Set In BIOS*| OFF | | | | | | | |
+----------------------+-----+-----+-----+-----+ | | | |
+I/O Port 330H*| | OFF | OFF | OFF | | | | |
+ 334H | | ON | OFF | OFF | | | | |
+ 230H | | OFF | ON | OFF | | | | |
+ 234H | | ON | ON | OFF | | | | |
+ 130H | | OFF | OFF | ON | | | | |
+ 134H | | ON | OFF | ON | | | | |
+ Reserved | | OFF | ON | ON | | | | |
+ Reserved | | ON | ON | ON | | | | |
+----------------------+-----+-----+-----+-----+-----+ | | |
+Enable Floppy Yes*| | OFF | | | |
+ No | | ON | | | |
+----------------------+-----------------------+-----+-----+-----+-----+
+BIOS Address DC000H*| | OFF | OFF | OFF |
+ D8000H | | ON | OFF | OFF |
+ D4000H | | OFF | ON | OFF |
+ D0000H | | ON | ON | OFF |
+ CC000H | | OFF | OFF | ON |
+ C8000H | | ON | OFF | ON |
+ Reserved | | OFF | ON | ON |
+ BIOS Disabled | | ON | ON | ON |
+----------------------+-----------------------------+-----+-----+-----+
+
+Documentation:
+Adaptec AHA-1540CF/1542CF Installation Guide
+http://download.adaptec.com/pdfs/installation_guides/aha1540cf_ig.pdf
+ */
+
+#include "emu.h"
+#include "aha1542c.h"
+#include "cpu/z80/z80.h"
+
+// I/O Port interface
+// READ Port x+0: STATUS
+// WRITE Port x+0: CONTROL
+//
+// READ Port x+1: DATA
+// WRITE Port x+1: COMMAND
+//
+// READ Port x+2: INTERRUPT STATUS
+// WRITE Port x+2: (undefined?)
+//
+// R/W Port x+3: (undefined)
+
+// READ STATUS flags
+#define STAT_STST 0x80 // self-test in progress
+#define STAT_DIAGF 0x40 // internal diagnostic failure
+#define STAT_INIT 0x20 // mailbox initialization required
+#define STAT_IDLE 0x10 // HBA is idle
+#define STAT_CDFULL 0x08 // Command/Data output port is full
+#define STAT_DFULL 0x04 // Data input port is full
+#define STAT_INVCMD 0x01 // Invalid command
+
+// READ INTERRUPT STATUS flags
+#define INTR_ANY 0x80 // any interrupt
+#define INTR_SRCD 0x08 // SCSI reset detected
+#define INTR_HACC 0x04 // HA command complete
+#define INTR_MBOA 0x02 // MBO empty
+#define INTR_MBIF 0x01 // MBI full
+
+// WRITE CONTROL commands
+#define CTRL_HRST 0x80 // Hard reset
+#define CTRL_SRST 0x40 // Soft reset
+#define CTRL_IRST 0x20 // interrupt reset
+#define CTRL_SCRST 0x10 // SCSI bus reset
+
+// READ/WRITE DATA commands
+#define CMD_NOP 0x00 // No operation
+#define CMD_MBINIT 0x01 // mailbox initialization
+#define CMD_START_SCSI 0x02 // Start SCSI command
+#define CMD_BIOSCMD 0x03 // undocumented BIOS conmmand (shadow RAM etc.)
+#define CMD_INQUIRY 0x04 // Adapter inquiry
+#define CMD_EMBOI 0x05 // enable Mailbox Out Interrupt
+#define CMD_SELTIMEOUT 0x06 // Set SEL timeout
+#define CMD_BUSON_TIME 0x07 // set bus-On time
+#define CMD_BUSOFF_TIME 0x08 // set bus-off time
+#define CMD_DMASPEED 0x09 // set ISA DMA speed
+#define CMD_RETDEVS 0x0a // return installed devices
+#define CMD_RETCONF 0x0b // return configuration data
+#define CMD_TARGET 0x0c // set HBA to target mode
+#define CMD_RETSETUP 0x0d // return setup data
+#define CMD_ECHO 0x1f // ECHO command data (NetBSD says it is 0x1e)
+
+// these are for 1541C only:
+#define CMD_RETDEVSHI 0x23 // return devices 8-15 (from NetBSD)
+#define CMD_EXTBIOS 0x28 // return extended BIOS information
+#define CMD_MBENABLE 0x29 // set mailbox interface enable
+
+DEFINE_DEVICE_TYPE(AHA1542C, aha1542c_device, "aha1542c", "AHA-1542C SCSI Controller")
+DEFINE_DEVICE_TYPE(AHA1542CF, aha1542cf_device, "aha1542cf", "AHA-1542CF SCSI Controller")
+DEFINE_DEVICE_TYPE(AHA1542CP, aha1542cp_device, "aha1542cp", "AHA-1542CP SCSI Controller")
+
+#define Z84C0010_TAG "z84c0010"
+
+READ8_MEMBER( aha1542c_device::aha1542_r )
+{
+ logerror("%s aha1542_r(): offset=%d\n", machine().describe_context(), offset);
+ return 0xff;
+}
+
+WRITE8_MEMBER( aha1542c_device::aha1542_w )
+{
+ logerror("%s aha1542_w(): offset=%d data=0x%02x\n", machine().describe_context(), offset, data);
+}
+
+
+ROM_START( aha1542c )
+ ROM_REGION( 0x8000, "aha1542", 0 )
+ ROM_SYSTEM_BIOS( 0, "v101", "AHA-1540C/1542C BIOS v1.01" )
+ ROMX_LOAD( "adaptec_inc_534201-00_d_bios_144c_1993.u15", 0x0000, 0x8000, CRC(35178004) SHA1(2b38f2e40cd02a1b32966ead7b202b0fca130cb8), ROM_BIOS(0) )
+ ROM_SYSTEM_BIOS( 1, "v102", "AHA-1540C/1542C BIOS v1.02" )
+ ROMX_LOAD( "b_91c5.bin", 0x0000, 0x8000, CRC(076ac252) SHA1(d640b980e85d07029d8ce11a52fa26ba0f93c5de), ROM_BIOS(1) )
+
+ ROM_REGION( 0x8000, Z84C0010_TAG, 0 )
+ ROMX_LOAD( "adaptec_inc_534001-00_d_mcode_a3c2_1993.u5", 0x0000, 0x8000, CRC(220dd5a2) SHA1(4fc51c9dd63b45a50edcd56baa706d61decbef38), ROM_BIOS(0) )
+ ROMX_LOAD( "m_866a.bin", 0x0000, 0x8000, CRC(ef09053a) SHA1(ae7900653357d5f32a2734bc13d9ec63bd805597), ROM_BIOS(1) )
+ROM_END
+
+ROM_START( aha1542cf )
+ ROM_REGION( 0x8000, "aha1542", 0 )
+ ROM_SYSTEM_BIOS( 0, "v201", "Adaptec 1540CF/1542CF BIOS v2.01" )
+ ROMX_LOAD( "adaptec_inc_553601-00_c_bios_c38d_1993.u16", 0x0000, 0x8000, CRC(ab22fc02) SHA1(f9f783e0272fc14ba3de32316997f1f6cadc67d0), ROM_BIOS(0) )
+ ROM_SYSTEM_BIOS( 1, "v210", "Adaptec 1540CF/1542CF BIOS v2.10" )
+ ROMX_LOAD( "adaptec_inc_553601-00_e_bios_7600_1994.u16", 0x0000, 0x8000, CRC(8f3a2692) SHA1(b9dbd49baeec55098195131d0ed1a9bfe8463640), ROM_BIOS(1) )
+ ROM_SYSTEM_BIOS( 2, "v211", "Adaptec 1540CF/1542CF BIOS v2.11" )
+ ROMX_LOAD( "adaptec_inc_553601-00_g_bios_b402_1995.u16", 0x0000, 0x8000, CRC(fddd0b83) SHA1(aabd227cb338d8812e0bb5c17c08ea06c5aedd36), ROM_BIOS(2) )
+
+ ROM_REGION( 0x8000, Z84C0010_TAG, 0 )
+ ROMX_LOAD( "adaptec_inc_553801-00_c_mcode_563d_1993.u15", 0x0000, 0x8000, CRC(7824397e) SHA1(35bc2c8fab31aad3190a478f2dc8f3a72958cf04), ROM_BIOS(0) )
+ ROMX_LOAD( "adaptec_inc_553801-00_e_mcode_4b81_1994.u15", 0x0000, 0x8000, CRC(dd651476) SHA1(cda508281302be53ebdcf8daa61754c89ad12111), ROM_BIOS(1) )
+ ROMX_LOAD( "adaptec_inc_553801-00_g_mcode_2cde_1995.u15", 0x0000, 0x8000, CRC(896873cd) SHA1(6edbdd9b0b15ef31ca0741cac31556d2d5266b6e), ROM_BIOS(2) )
+ROM_END
+
+ROM_START( aha1542cp )
+ ROM_REGION( 0x8000, "aha1542", 0 )
+ ROM_LOAD( "adaptec_inc_908501-00_d_bios_a91e_1995.u7", 0x0000, 0x8000, CRC(0646c35e) SHA1(3a7c2731abd8295438cfa1f2a525be53e9512b1a) )
+
+ ROM_REGION( 0x8000, Z84C0010_TAG, 0 )
+ ROM_LOAD( "908301-00_f_mcode_17c9.u12", 0x0000, 0x8000, CRC(04494022) SHA1(431dfc26312556ddd24fccc429b2b3e93bac5c2f) )
+ROM_END
+
+
+void aha1542c_device::local_latch_w(u8 data)
+{
+ m_eeprom->cs_write(BIT(data, 2));
+ m_eeprom->clk_write(BIT(data, 1));
+ m_eeprom->di_write(BIT(data, 0));
+ // TODO: several other bits are used
+}
+
+void aha1542c_device::z84c0010_mem(address_map &map)
+{
+ map(0x0000, 0x7fff).rom().region(Z84C0010_TAG, 0);
+ map(0x8000, 0x9fff).ram(); // 2kb RAM chip
+ map(0xa000, 0xa000).portr("SWITCHES");
+ map(0xb000, 0xb000).w(FUNC(aha1542c_device::local_latch_w));
+ map(0xe000, 0xe0ff).ram(); // probably PC<->Z80 communication area
+ map(0xe003, 0xe003).lr8("e003_r", []() { return 0x20; });
+}
+
+u8 aha1542cp_device::eeprom_r()
+{
+ // TODO: bits 4 and 5 are also used
+ return m_eeprom->do_read();
+}
+
+void aha1542cp_device::eeprom_w(u8 data)
+{
+ m_eeprom->cs_write(BIT(data, 2));
+ m_eeprom->clk_write(BIT(data, 1));
+ m_eeprom->di_write(BIT(data, 0));
+}
+
+void aha1542cp_device::local_mem(address_map &map)
+{
+ map(0x0000, 0x7fff).rom().region(Z84C0010_TAG, 0);
+ map(0x8000, 0x9fff).ram();
+ map(0xc000, 0xc000).portr("SWITCHES");
+ map(0xc001, 0xc001).rw(FUNC(aha1542cp_device::eeprom_r), FUNC(aha1542cp_device::eeprom_w));
+ map(0xe003, 0xe003).nopr();
+}
+
+static INPUT_PORTS_START( aha1542c )
+ PORT_START("SWITCHES")
+ PORT_DIPNAME(0x07, 0x07, "I/O Port Address") PORT_DIPLOCATION("S1:2,3,4")
+ PORT_DIPSETTING(0x07, "330-333h")
+ PORT_DIPSETTING(0x06, "334-337h")
+ PORT_DIPSETTING(0x05, "230-233h")
+ PORT_DIPSETTING(0x04, "234-237h")
+ PORT_DIPSETTING(0x03, "130-133h")
+ PORT_DIPSETTING(0x02, "134-137h")
+ PORT_DIPSETTING(0x00, "Diagnostics Only") // not documented
+ PORT_DIPNAME(0x08, 0x08, "SCSI Termination") PORT_DIPLOCATION("S1:1")
+ PORT_DIPSETTING(0x00, "Installed")
+ PORT_DIPSETTING(0x08, "Software Controlled")
+ PORT_DIPNAME(0x70, 0x70, "BIOS Address") PORT_DIPLOCATION("S1:6,7,8")
+ PORT_DIPSETTING(0x00, "Disabled")
+ PORT_DIPSETTING(0x20, "C8000h")
+ PORT_DIPSETTING(0x30, "CC000h")
+ PORT_DIPSETTING(0x40, "D0000h")
+ PORT_DIPSETTING(0x50, "D4000h")
+ PORT_DIPSETTING(0x60, "D8000h")
+ PORT_DIPSETTING(0x70, "DC000h")
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read)
+
+ PORT_START("FDC_CONFIG")
+ PORT_DIPNAME(0x1, 0x1, "Floppy Disk Controller") PORT_DIPLOCATION("S1:5")
+ PORT_DIPSETTING(0x0, "Disabled")
+ PORT_DIPSETTING(0x1, "Enabled")
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( aha1542cp )
+ PORT_START("SWITCHES")
+ PORT_DIPNAME(0x0e, 0x0e, "I/O Port Address") PORT_DIPLOCATION("S1:2,3,4")
+ PORT_DIPSETTING(0x0e, "330-333h")
+ PORT_DIPSETTING(0x0c, "334-337h")
+ PORT_DIPSETTING(0x0a, "230-233h")
+ PORT_DIPSETTING(0x08, "234-237h")
+ PORT_DIPSETTING(0x06, "130-133h")
+ PORT_DIPSETTING(0x04, "134-137h")
+ PORT_DIPSETTING(0x00, "Diagnostics Only") // not documented
+ PORT_DIPNAME(0x10, 0x10, "Plug and Play") PORT_DIPLOCATION("S1:1")
+ PORT_DIPSETTING(0x00, "Disabled")
+ PORT_DIPSETTING(0x10, "Enabled")
+ PORT_DIPNAME(0xe0, 0xe0, "BIOS Address") PORT_DIPLOCATION("S1:6,7,8")
+ PORT_DIPSETTING(0x00, "Disabled")
+ PORT_DIPSETTING(0x40, "C8000h")
+ PORT_DIPSETTING(0x60, "CC000h")
+ PORT_DIPSETTING(0x80, "D0000h")
+ PORT_DIPSETTING(0xa0, "D4000h")
+ PORT_DIPSETTING(0xc0, "D8000h")
+ PORT_DIPSETTING(0xe0, "DC000h")
+
+ PORT_START("FDC_CONFIG")
+ PORT_DIPNAME(0x1, 0x1, "Floppy Disk Controller") PORT_DIPLOCATION("S1:5")
+ PORT_DIPSETTING(0x0, "Disabled")
+ PORT_DIPSETTING(0x1, "Enabled")
+INPUT_PORTS_END
+
+ioport_constructor aha1542c_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( aha1542c );
+}
+
+ioport_constructor aha1542cp_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( aha1542cp );
+}
+
+const tiny_rom_entry *aha1542c_device::device_rom_region() const
+{
+ return ROM_NAME( aha1542c );
+}
+
+const tiny_rom_entry *aha1542cf_device::device_rom_region() const
+{
+ return ROM_NAME( aha1542cf );
+}
+
+const tiny_rom_entry *aha1542cp_device::device_rom_region() const
+{
+ return ROM_NAME( aha1542cp );
+}
+
+void aha1542c_device::device_add_mconfig(machine_config &config)
+{
+ z80_device &cpu(Z80(config, Z84C0010_TAG, 10'000'000));
+ cpu.set_addrmap(AS_PROGRAM, &aha1542c_device::z84c0010_mem);
+
+ EEPROM_93C46_16BIT(config, m_eeprom);
+}
+
+void aha1542cp_device::device_add_mconfig(machine_config &config)
+{
+ z80_device &cpu(Z80(config, Z84C0010_TAG, 10'000'000));
+ cpu.set_addrmap(AS_PROGRAM, &aha1542cp_device::local_mem);
+
+ EEPROM_93C46_16BIT(config, m_eeprom);
+}
+
+aha1542c_device::aha1542c_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_isa16_card_interface(mconfig, *this)
+ , m_eeprom(*this, "eeprom")
+{
+}
+
+aha1542c_device::aha1542c_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : aha1542c_device(mconfig, AHA1542C, tag, owner, clock)
+{
+}
+
+aha1542cf_device::aha1542cf_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : aha1542c_device(mconfig, AHA1542CF, tag, owner, clock)
+{
+}
+
+aha1542cp_device::aha1542cp_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : aha1542c_device(mconfig, AHA1542CP, tag, owner, clock)
+{
+}
+
+void aha1542c_device::device_start()
+{
+ set_isa_device();
+ m_isa->install_rom(this, 0xdc000, 0xdffff, "aha1542", "aha1542");
+ m_isa->install_device(0x330, 0x333, read8_delegate(FUNC( aha1542cf_device::aha1542_r ), this),
+ write8_delegate(FUNC( aha1542cf_device::aha1542_w ), this) );
+}
+
+
+void aha1542c_device::device_reset()
+{
+}
diff --git a/src/devices/bus/isa/aha1542c.h b/src/devices/bus/isa/aha1542c.h
new file mode 100644
index 00000000000..005c688c053
--- /dev/null
+++ b/src/devices/bus/isa/aha1542c.h
@@ -0,0 +1,96 @@
+// license:BSD-3-Clause
+// copyright-holders:Darkstar
+/**********************************************************************
+ *
+ * Adaptec AHA-1542{C,CF,CP} SCSI Controller
+ *
+ **********************************************************************
+
+
+
+ **********************************************************************/
+
+#ifndef MAME_BUS_AHA1542C_H
+#define MAME_BUS_AHA1542C_H
+
+#pragma once
+
+
+#include "isa.h"
+#include "machine/eepromser.h"
+
+//*********************************************************************
+// TYPE DEFINITIONS
+//*********************************************************************
+
+// ====================> aha1542cf_device
+
+class aha1542c_device : public device_t,
+ public device_isa16_card_interface
+{
+public:
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+ // construction/destruction
+ aha1542c_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ DECLARE_READ8_MEMBER( aha1542_r );
+ DECLARE_WRITE8_MEMBER( aha1542_w );
+
+protected:
+ aha1542c_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ void local_latch_w(u8 data);
+
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ // optional information overrides
+ virtual ioport_constructor device_input_ports() const override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ required_device<eeprom_serial_93cxx_device> m_eeprom;
+
+private:
+ void z84c0010_mem(address_map &map);
+};
+
+// ====================> aha1542cf_device
+
+class aha1542cf_device : public aha1542c_device
+{
+public:
+ // construction/destruction
+ aha1542cf_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ virtual const tiny_rom_entry *device_rom_region() const override;
+};
+
+// ====================> aha1542cp_device
+
+class aha1542cp_device : public aha1542c_device
+{
+public:
+ // construction/destruction
+ aha1542cp_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ 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:
+ u8 eeprom_r();
+ void eeprom_w(u8 data);
+
+ void local_mem(address_map &map);
+};
+
+// device type definitions
+DECLARE_DEVICE_TYPE(AHA1542C, aha1542c_device)
+DECLARE_DEVICE_TYPE(AHA1542CF, aha1542cf_device)
+DECLARE_DEVICE_TYPE(AHA1542CP, aha1542cp_device)
+
+#endif // MAME_BUS_AHA1542C_H
diff --git a/src/devices/bus/isa/aha174x.cpp b/src/devices/bus/isa/aha174x.cpp
new file mode 100644
index 00000000000..06b6ddf5f62
--- /dev/null
+++ b/src/devices/bus/isa/aha174x.cpp
@@ -0,0 +1,160 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ Adaptec AHA-1740/44 and AHA-1740A/42A Fast SCSI host adapters
+
+ These are actually EISA cards, though they also have a compatibility
+ mode that provides an interface like the older ISA AHA-154X series.
+
+ On the AHA-1740 and AHA-1744, the HPC microcode is stored in an EEPROM
+ (of unknown type), allowing it to be reprogrammed by the host. This is
+ not possible on the AHA-1740A and AHA-1744A, which use a conventional
+ 27C256 EPROM for the microcode. In both cases the HPC copies the code
+ to and then executes it out of RAM.
+
+ Though the AHA-1740 and AHA-1740A have different board layouts, they
+ share the following ICs:
+
+ AIC-565 Bus Auxiliary Interface Chip
+ AIC-575 EISA Configuration Chip
+ AIC-4600 HPC (HPC46003V20)
+ AIC-6251A SCSI Interface and Protocol Chip
+ IDT7201 512x9 FIFO (2 on board)
+ Intel 82355 Bus Master Interface Controller
+
+ AHA-1742A is the same as AHA-1740A, only with the FDC populated.
+
+ AHA-1744 uses the same layout as AHA-1740, but populates the area
+ around the SCSI port with DS36F95J differential drivers.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "aha174x.h"
+
+#include "machine/aic6250.h"
+//#include "machine/i82355.h"
+#include "machine/nscsi_bus.h"
+#include "machine/nscsi_hd.h"
+
+DEFINE_DEVICE_TYPE(AHA1740, aha1740_device, "aha1740", "AHA-1740 Fast SCSI Host Adapter")
+DEFINE_DEVICE_TYPE(AHA1742A, aha1742a_device, "aha1742a", "AHA-1742A Fast SCSI Host Adapter")
+
+
+aha174x_device::aha174x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_isa16_card_interface(mconfig, *this)
+ , m_hpc(*this, "hpc")
+ , m_bios(*this, "bios")
+{
+}
+
+aha1740_device::aha1740_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : aha174x_device(mconfig, AHA1740, tag, owner, clock)
+{
+}
+
+aha1742a_device::aha1742a_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : aha174x_device(mconfig, AHA1742A, tag, owner, clock)
+ , m_fdc(*this, "fdc")
+{
+}
+
+void aha174x_device::device_start()
+{
+}
+
+
+void aha174x_device::hpc_map(address_map &map)
+{
+ map(0x5000, 0x500f).m("scsi:7:scsic", FUNC(aic6251a_device::map));
+ map(0x8000, 0xffff).rom().region("mcode", 0);
+}
+
+static void aha174x_scsi_devices(device_slot_interface &device)
+{
+ device.option_add("harddisk", NSCSI_HARDDISK);
+ device.option_add_internal("scsic", AIC6251A);
+}
+
+void aha174x_device::scsic_config(device_t *device)
+{
+ device->set_clock(40_MHz_XTAL / 2); // divider not verified
+}
+
+void aha1740_device::device_add_mconfig(machine_config &config)
+{
+ HPC46003(config, m_hpc, 40_MHz_XTAL / 2);
+ m_hpc->set_addrmap(AS_PROGRAM, &aha1740_device::hpc_map);
+
+ NSCSI_BUS(config, "scsi");
+ NSCSI_CONNECTOR(config, "scsi:0", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:1", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:2", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:3", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:4", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:5", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:6", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:7", aha174x_scsi_devices, "scsic", true)
+ .set_option_machine_config("scsic", [this] (device_t *device) { scsic_config(device); });
+}
+
+void aha1742a_device::device_add_mconfig(machine_config &config)
+{
+ HPC46003(config, m_hpc, 40_MHz_XTAL / 2);
+ m_hpc->set_addrmap(AS_PROGRAM, &aha1742a_device::hpc_map);
+
+ NSCSI_BUS(config, "scsi");
+ NSCSI_CONNECTOR(config, "scsi:0", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:1", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:2", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:3", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:4", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:5", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:6", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:7", aha174x_scsi_devices, "scsic", true)
+ .set_option_machine_config("scsic", [this] (device_t *device) { scsic_config(device); });
+
+ N82077AA(config, m_fdc, 24_MHz_XTAL);
+}
+
+
+ROM_START(aha1740)
+ ROM_REGION(0x4000, "bios", 0)
+ ROM_LOAD("b_dc00.bin", 0x0000, 0x4000, CRC(056d75ec) SHA1(8ca143adfc7d20ad5d49f14dedabc8276454bf9e))
+
+ ROM_REGION16_LE(0x8000, "mcode", 0)
+ ROM_SYSTEM_BIOS(0, "v140st", "BIOS v1.40 (Standard Mode)")
+ ROMX_LOAD("standard.bin", 0x0000, 0x8000, CRC(8c15c6a2) SHA1(77e15b0244e3a814f53f957270e6474a8a839955), ROM_BIOS(0))
+ ROM_SYSTEM_BIOS(1, "v140en", "BIOS v1.40 (Enhanced Mode)")
+ ROMX_LOAD("enhanced.bin", 0x0000, 0x8000, CRC(84b3df89) SHA1(a718c3ea5443a609b4b20bfe48be18193737ad25), ROM_BIOS(1))
+ // Adaptec's help file claims that "the EEPROM on the board can hold firmware for both modes simultaneously."
+ // The AHA-174XA firmware images obviously have this, but the files provided here do not agree.
+ROM_END
+
+ROM_START(aha1742a)
+ ROM_REGION(0x4000, "bios", 0)
+ ROM_DEFAULT_BIOS("v140")
+ ROM_SYSTEM_BIOS(0, "v134", "BIOS v1.34")
+ ROMX_LOAD("adaptec_inc_450214-00_a_bios_8800_1991.u47", 0x0000, 0x4000, CRC(6cf06151) SHA1(0da45634b12b33fc886920d065cc8ffb2cf376b8), ROM_BIOS(0))
+ ROM_SYSTEM_BIOS(1, "v140", "BIOS v1.40")
+ ROMX_LOAD("adaptec_inc_450216-00_a_bios_dc00_1992.u47", 0x0000, 0x4000, CRC(056d75ec) SHA1(8ca143adfc7d20ad5d49f14dedabc8276454bf9e), ROM_BIOS(1))
+ ROM_SYSTEM_BIOS(2, "v140s", "BIOS v1.40 (Extended Timeout)")
+ ROMX_LOAD("b_f100.bin", 0x0000, 0x4000, CRC(b695acc0) SHA1(683112fafdf83d5eb89237d9215f7d6eacc6eeaf), ROM_BIOS(2))
+
+ ROM_REGION16_LE(0x8000, "mcode", 0)
+ ROMX_LOAD("adaptec_inc_450117-00_c_mcode_23a8_1991.u10", 0x0000, 0x8000, NO_DUMP, ROM_BIOS(0))
+ ROMX_LOAD("adaptec_inc_450113-00_d_mcode_b7d6_1992.u10", 0x0000, 0x8000, CRC(0a55a555) SHA1(ff400f56b33f0ad94e34564d7715a0773b335844), ROM_BIOS(1))
+ ROMX_LOAD("m_c7b8.bin", 0x0000, 0x8000, CRC(21282e86) SHA1(18cb3960dc47f2c14beb88f9680c1f66c4652b04), ROM_BIOS(2))
+ROM_END
+
+const tiny_rom_entry *aha1740_device::device_rom_region() const
+{
+ return ROM_NAME(aha1740);
+}
+
+const tiny_rom_entry *aha1742a_device::device_rom_region() const
+{
+ return ROM_NAME(aha1742a);
+}
diff --git a/src/devices/bus/isa/aha174x.h b/src/devices/bus/isa/aha174x.h
new file mode 100644
index 00000000000..f65ee7de93a
--- /dev/null
+++ b/src/devices/bus/isa/aha174x.h
@@ -0,0 +1,61 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ Adaptec AHA-1540/42A and AHA-1540/42B SCSI controllers
+
+***************************************************************************/
+
+#ifndef MAME_BUS_ISA_AHA174X_H
+#define MAME_BUS_ISA_AHA174X_H
+
+#pragma once
+
+#include "isa.h"
+#include "cpu/hpc/hpc.h"
+#include "machine/upd765.h"
+
+class aha174x_device : public device_t, public device_isa16_card_interface
+{
+protected:
+ aha174x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
+
+ virtual void device_start() override;
+
+ void hpc_map(address_map &map);
+ void scsic_config(device_t *device);
+
+ required_device<hpc46003_device> m_hpc;
+ required_region_ptr<u8> m_bios;
+};
+
+class aha1740_device : public aha174x_device
+{
+public:
+ aha1740_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+};
+
+class aha1742a_device : public aha174x_device
+{
+public:
+ aha1742a_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+ required_device<upd765_family_device> m_fdc;
+};
+
+DECLARE_DEVICE_TYPE(AHA1740, aha1740_device)
+DECLARE_DEVICE_TYPE(AHA1742A, aha1742a_device)
+
+#endif // MAME_BUS_ISA_AHA174X_H
diff --git a/src/devices/bus/isa/bt54x.cpp b/src/devices/bus/isa/bt54x.cpp
index baab0247854..d8ef31a848f 100644
--- a/src/devices/bus/isa/bt54x.cpp
+++ b/src/devices/bus/isa/bt54x.cpp
@@ -9,6 +9,9 @@
believed that these chips are largely compatible with each other, as
are the NCR 53CF94 and Emulex FAS216 SCSI controllers.
+ 2.41/2.21 is the last BIOS version compatible with revisions A-G of
+ the BT-542B.
+
***************************************************************************/
#include "emu.h"
@@ -19,10 +22,12 @@
#include "machine/nscsi_cd.h"
#include "machine/nscsi_hd.h"
+DEFINE_DEVICE_TYPE(BT542B, bt542b_device, "bt542b", "BusTek BT-542B SCSI Host Adapter") // Rev. G or earlier
+DEFINE_DEVICE_TYPE(BT542BH, bt542bh_device, "bt542bh", "BusLogic BT-542B SCSI Host Adapter (Rev. H)")
DEFINE_DEVICE_TYPE(BT545S, bt545s_device, "bt545s", "BusLogic BT-545S Fast SCSI Host Adapter")
-bt545s_device::bt545s_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
- : device_t(mconfig, BT545S, tag, owner, clock)
+bt54x_device::bt54x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, type, tag, owner, clock)
, device_isa16_card_interface(mconfig, *this)
, m_mpu(*this, "mpu")
, m_fdc(*this, "fdc")
@@ -30,50 +35,78 @@ bt545s_device::bt545s_device(const machine_config &mconfig, const char *tag, dev
{
}
-void bt545s_device::device_start()
+bt542b_device::bt542b_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : bt54x_device(mconfig, BT542B, tag, owner, clock)
+{
+}
+
+bt542bh_device::bt542bh_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : bt54x_device(mconfig, BT542BH, tag, owner, clock)
{
}
-u8 bt545s_device::local_status_r()
+bt545s_device::bt545s_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : bt54x_device(mconfig, BT545S, tag, owner, clock)
+{
+}
+
+void bt54x_device::device_start()
+{
+}
+
+u8 bt54x_device::local_status_r()
{
return 0;
}
-void bt545s_device::local_map(address_map &map)
+void bt54x_device::local_map(address_map &map)
{
map(0x00000, 0x01fff).ram();
//map(0x02000, 0x0201f).rw("busintf", FUNC(ncr86c05_device::local_read), FUNC(ncr86c05_device::local_write));
- map(0x02080, 0x0208f).m("scsi:7:fsc", FUNC(ncr53cf94_device::map));
- map(0x02180, 0x02180).r(FUNC(bt545s_device::local_status_r));
+ map(0x02080, 0x0208f).m("scsi:7:scsic", FUNC(ncr53cf94_device::map));
+ map(0x02180, 0x02180).r(FUNC(bt54x_device::local_status_r));
map(0xf8000, 0xfffff).rom().region("mpu", 0);
}
+static void scsi_devices(device_slot_interface &device)
+{
+ device.option_add("cdrom", NSCSI_CDROM);
+ device.option_add("harddisk", NSCSI_HARDDISK);
+ device.option_add_internal("scsic", NCR53C94);
+}
+
static void fast_scsi_devices(device_slot_interface &device)
{
- // FIXME: these device options are placeholders
device.option_add("cdrom", NSCSI_CDROM);
device.option_add("harddisk", NSCSI_HARDDISK);
- device.option_add_internal("fsc", NCR53CF94); // FAS216
+ device.option_add_internal("scsic", NCR53CF94); // FAS216
+}
+
+void bt54x_device::asc_config(device_t *device)
+{
+ ncr53c94_device &asc = downcast<ncr53c94_device &>(*device);
+
+ asc.set_clock(25_MHz_XTAL); // not verified; perhaps selectable? (40 MHz XTAL also on board)
+
+ asc.irq_handler_cb().set(m_mpu, FUNC(i80188_cpu_device::int0_w));
+ //asc.drq_handler_cb().set("busintf", FUNC(ncr86c05_device::dma_req_w));
}
-void bt545s_device::fsc_config(device_t *device)
+void bt54x_device::fsc_config(device_t *device)
{
ncr53cf94_device &fsc = downcast<ncr53cf94_device &>(*device);
fsc.set_clock(40_MHz_XTAL);
- fsc.irq_handler_cb().set(m_mpu, FUNC(i80188_cpu_device::int0_w)); // mostly polled
+ fsc.irq_handler_cb().set(m_mpu, FUNC(i80188_cpu_device::int0_w)); // mostly polled on BT-545S
//fsc.drq_handler_cb().set("busintf", FUNC(ncr86c05_device::dma_req_w));
}
-void bt545s_device::device_add_mconfig(machine_config &config)
+void bt54x_device::fsc_base(machine_config &config)
{
- I80188(config, m_mpu, 40_MHz_XTAL / 2); // SAB80188-1-N; clock guessed
- m_mpu->set_addrmap(AS_PROGRAM, &bt545s_device::local_map);
-
//ncr86c05_device &busintf(NCR86C05(config, "busintf", 0));
//busintf.mint_callback().set(m_mpu, FUNC(i80188_cpu_device::int1_w));
- //busintf.dma_ack_callback().set("scsi:7:fsc", FUNC(ncr53cf94_device::dma_w));
+ //busintf.dma_ack_callback().set("scsi:7:scsic", FUNC(ncr53cf94_device::dma_w));
NSCSI_BUS(config, "scsi");
NSCSI_CONNECTOR(config, "scsi:0", fast_scsi_devices, nullptr);
@@ -83,11 +116,67 @@ void bt545s_device::device_add_mconfig(machine_config &config)
NSCSI_CONNECTOR(config, "scsi:4", fast_scsi_devices, nullptr);
NSCSI_CONNECTOR(config, "scsi:5", fast_scsi_devices, nullptr);
NSCSI_CONNECTOR(config, "scsi:6", fast_scsi_devices, nullptr);
- NSCSI_CONNECTOR(config, "scsi:7", fast_scsi_devices, "fsc", true).set_option_machine_config("fsc", [this] (device_t *device) { fsc_config(device); });
+ NSCSI_CONNECTOR(config, "scsi:7", fast_scsi_devices, "scsic", true).set_option_machine_config("scsic", [this] (device_t *device) { fsc_config(device); });
+}
+
+void bt542b_device::device_add_mconfig(machine_config &config)
+{
+ I80188(config, m_mpu, 16_MHz_XTAL);
+ m_mpu->set_addrmap(AS_PROGRAM, &bt542b_device::local_map);
+
+ //ncr86c05_device &busintf(NCR86C05(config, "busintf", 0));
+ //busintf.mint_callback().set(m_mpu, FUNC(i80188_cpu_device::int1_w));
+ //busintf.dma_ack_callback().set("scsi:7:scsic", FUNC(ncr53c94_device::dma_w));
+
+ NSCSI_BUS(config, "scsi");
+ NSCSI_CONNECTOR(config, "scsi:0", scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:1", scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:2", scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:3", scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:4", scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:5", scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:6", scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:7", scsi_devices, "scsic", true).set_option_machine_config("scsic", [this] (device_t *device) { asc_config(device); });
+
+ DP8473(config, m_fdc, 24_MHz_XTAL);
+}
+
+void bt542bh_device::device_add_mconfig(machine_config &config)
+{
+ I80188(config, m_mpu, 40_MHz_XTAL / 2); // clock guessed
+ m_mpu->set_addrmap(AS_PROGRAM, &bt542bh_device::local_map);
+
+ fsc_base(config);
+
+ DP8473(config, m_fdc, 24_MHz_XTAL);
+}
+
+void bt545s_device::device_add_mconfig(machine_config &config)
+{
+ I80188(config, m_mpu, 40_MHz_XTAL / 2); // SAB80188-1-N; clock guessed
+ m_mpu->set_addrmap(AS_PROGRAM, &bt545s_device::local_map);
+
+ fsc_base(config);
PC8477A(config, m_fdc, 24_MHz_XTAL); // actually PC8477BV
}
+ROM_START(bt542b)
+ ROM_REGION(0x4000, "bios", 0) // "(C) Copyright 1991 BIOS Version 2.41"
+ ROM_LOAD("1000006-2.41_bustek.u15", 0x0000, 0x4000, CRC(5eb00d0f) SHA1(74a8bbae1c2b42f0c605b0ac98660f1e16ac5c4e))
+
+ ROM_REGION(0x8000, "mpu", 0) // "(C) Copyright 1991 BusTek Corporation 542B 91/12/14"
+ ROM_LOAD("1000005-2.21_bustek.u2", 0x0000, 0x8000, CRC(c2c66653) SHA1(054ba1ea71b2aaab31ab9dd5aca955d861f5333b))
+ROM_END
+
+ROM_START(bt542bh)
+ ROM_REGION(0x8000, "bios", 0) // "(C) Copyright 1992 BIOS Version 4.70M"
+ ROM_LOAD("5000006-4.70_buslogic.u15", 0x0000, 0x8000, CRC(f5a5e116) SHA1(d7b73015532838dc694edf24308ebbab6f4dd5bb))
+
+ ROM_REGION(0x8000, "mpu", 0) // "(C) Copyright 1992 BusLogic Inc. 542BH93/05/23"
+ ROM_LOAD("5000005-3.35_buslogic.u2", 0x0000, 0x8000, CRC(181966c3) SHA1(b9b327d50cd13f3e5b5b53892b18f233aff065b7))
+ROM_END
+
ROM_START(bt545s)
ROM_REGION(0x4000, "bios", 0) // "(C) Copyright 1992 BIOS Version 4.50"
ROM_LOAD("u15_27128_5002026-4.50.bin", 0x0000, 0x4000, CRC(1bd3247b) SHA1(9d46a99f4b3057e94ef422f387218de2c4553c1a))
@@ -96,6 +185,16 @@ ROM_START(bt545s)
ROM_LOAD("u2_27256_5002005-3.31.bin", 0x0000, 0x8000, CRC(20473714) SHA1(797a8dba182049949f7a5c14d8bef4b4e908305b))
ROM_END
+const tiny_rom_entry *bt542b_device::device_rom_region() const
+{
+ return ROM_NAME(bt542b);
+}
+
+const tiny_rom_entry *bt542bh_device::device_rom_region() const
+{
+ return ROM_NAME(bt542bh);
+}
+
const tiny_rom_entry *bt545s_device::device_rom_region() const
{
return ROM_NAME(bt545s);
diff --git a/src/devices/bus/isa/bt54x.h b/src/devices/bus/isa/bt54x.h
index 754d561978b..dfdd0009416 100644
--- a/src/devices/bus/isa/bt54x.h
+++ b/src/devices/bus/isa/bt54x.h
@@ -15,29 +15,60 @@
#include "cpu/i86/i186.h"
#include "machine/upd765.h"
-class bt545s_device : public device_t, public device_isa16_card_interface
+class bt54x_device : public device_t, public device_isa16_card_interface
{
public:
- bt545s_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
-
static constexpr feature_type unemulated_features() { return feature::DISK; }
protected:
- virtual void device_add_mconfig(machine_config &config) override;
- virtual const tiny_rom_entry *device_rom_region() const override;
+ bt54x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
+
virtual void device_start() override;
-private:
u8 local_status_r();
void local_map(address_map &map);
+ void asc_config(device_t *device);
void fsc_config(device_t *device);
+ void fsc_base(machine_config &config);
required_device<i80188_cpu_device> m_mpu;
required_device<upd765_family_device> m_fdc;
required_region_ptr<u8> m_bios;
};
+class bt542b_device : public bt54x_device
+{
+public:
+ bt542b_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+};
+
+class bt542bh_device : public bt54x_device
+{
+public:
+ bt542bh_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+};
+
+class bt545s_device : public bt54x_device
+{
+public:
+ bt545s_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+};
+
+DECLARE_DEVICE_TYPE(BT542B, bt542b_device)
+DECLARE_DEVICE_TYPE(BT542BH, bt542bh_device)
DECLARE_DEVICE_TYPE(BT545S, bt545s_device)
#endif // MAME_BUS_ISA_BT54X_H
diff --git a/src/devices/bus/isa/com.cpp b/src/devices/bus/isa/com.cpp
index e9ad68ebee3..6ab3c393ccd 100644
--- a/src/devices/bus/isa/com.cpp
+++ b/src/devices/bus/isa/com.cpp
@@ -118,10 +118,10 @@ isa8_com_device::isa8_com_device(const machine_config &mconfig, device_type type
void isa8_com_device::device_start()
{
set_isa_device();
- m_isa->install_device(0x03f8, 0x03ff, read8_delegate(FUNC(ins8250_device::ins8250_r), subdevice<ins8250_uart_device>("uart_0")), write8_delegate(FUNC(ins8250_device::ins8250_w), subdevice<ins8250_uart_device>("uart_0")) );
- m_isa->install_device(0x02f8, 0x02ff, read8_delegate(FUNC(ins8250_device::ins8250_r), subdevice<ins8250_uart_device>("uart_1")), write8_delegate(FUNC(ins8250_device::ins8250_w), subdevice<ins8250_uart_device>("uart_1")) );
-// m_isa->install_device(0x03e8, 0x03ef, read8_delegate(FUNC(ins8250_device::ins8250_r), subdevice<ins8250_uart_device>("uart_2")), write8_delegate(FUNC(ins8250_device::ins8250_w), subdevice<ins8250_uart_device>("uart_2")) );
-// m_isa->install_device(0x02e8, 0x02ef, read8_delegate(FUNC(ins8250_device::ins8250_r), subdevice<ins8250_uart_device>("uart_3")), write8_delegate(FUNC(ins8250_device::ins8250_w), subdevice<ins8250_uart_device>("uart_3")) );
+ m_isa->install_device(0x03f8, 0x03ff, read8sm_delegate(FUNC(ins8250_device::ins8250_r), subdevice<ins8250_uart_device>("uart_0")), write8sm_delegate(FUNC(ins8250_device::ins8250_w), subdevice<ins8250_uart_device>("uart_0")) );
+ m_isa->install_device(0x02f8, 0x02ff, read8sm_delegate(FUNC(ins8250_device::ins8250_r), subdevice<ins8250_uart_device>("uart_1")), write8sm_delegate(FUNC(ins8250_device::ins8250_w), subdevice<ins8250_uart_device>("uart_1")) );
+// m_isa->install_device(0x03e8, 0x03ef, read8sm_delegate(FUNC(ins8250_device::ins8250_r), subdevice<ins8250_uart_device>("uart_2")), write8sm_delegate(FUNC(ins8250_device::ins8250_w), subdevice<ins8250_uart_device>("uart_2")) );
+// m_isa->install_device(0x02e8, 0x02ef, read8sm_delegate(FUNC(ins8250_device::ins8250_r), subdevice<ins8250_uart_device>("uart_3")), write8sm_delegate(FUNC(ins8250_device::ins8250_w), subdevice<ins8250_uart_device>("uart_3")) );
}
//-------------------------------------------------
diff --git a/src/devices/bus/isa/dcb.cpp b/src/devices/bus/isa/dcb.cpp
new file mode 100644
index 00000000000..db5768d6758
--- /dev/null
+++ b/src/devices/bus/isa/dcb.cpp
@@ -0,0 +1,70 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ Novell Disk Coprocessor Board (DCB)
+
+ This special SCSI host adapter, later acquired by ADIC, was designed
+ for use with Novell NetWare.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "dcb.h"
+
+DEFINE_DEVICE_TYPE(NOVELL_DCB, novell_dcb_device, "novell_dcb", "Novell Disk Coprocessor Board (#738-133-001)")
+
+novell_dcb_device::novell_dcb_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, NOVELL_DCB, tag, owner, clock)
+ , device_isa16_card_interface(mconfig, *this)
+ , m_localcpu(*this, "localcpu")
+ , m_eeprom(*this, "eeprom")
+{
+}
+
+void novell_dcb_device::device_start()
+{
+}
+
+void novell_dcb_device::eeprom_w(u8 data)
+{
+ m_eeprom->cs_write(BIT(data, 5));
+ m_eeprom->clk_write(BIT(data, 6));
+ m_eeprom->di_write(BIT(data, 7));
+}
+
+u8 novell_dcb_device::misc_r()
+{
+ return m_eeprom->do_read() << 7;
+}
+
+void novell_dcb_device::mem_map(address_map &map)
+{
+ map(0x00000, 0x03fff).ram();
+ map(0xfe000, 0xfffff).rom().region("localcpu", 0);
+}
+
+void novell_dcb_device::io_map(address_map &map)
+{
+ map(0x0100, 0x0100).w(FUNC(novell_dcb_device::eeprom_w));
+ map(0x0180, 0x0180).r(FUNC(novell_dcb_device::misc_r));
+}
+
+void novell_dcb_device::device_add_mconfig(machine_config &config)
+{
+ I80188(config, m_localcpu, 16_MHz_XTAL);
+ m_localcpu->set_addrmap(AS_PROGRAM, &novell_dcb_device::mem_map);
+ m_localcpu->set_addrmap(AS_IO, &novell_dcb_device::io_map);
+
+ EEPROM_93C06_16BIT(config, m_eeprom); // NMC9306
+}
+
+ROM_START(novell_dcb)
+ ROM_REGION(0x2000, "localcpu", 0)
+ ROM_LOAD("817-186-001_rev_e_5800_11-04-86.bin", 0x0000, 0x2000, CRC(2e2037f4) SHA1(a13c0aab46084a0805256f1d2b8b8beaccc9e253))
+ROM_END
+
+const tiny_rom_entry *novell_dcb_device::device_rom_region() const
+{
+ return ROM_NAME(novell_dcb);
+}
diff --git a/src/devices/bus/isa/dcb.h b/src/devices/bus/isa/dcb.h
new file mode 100644
index 00000000000..fbca0303978
--- /dev/null
+++ b/src/devices/bus/isa/dcb.h
@@ -0,0 +1,43 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ Novell Disk Coprocessor Board (DCB)
+
+***************************************************************************/
+
+#ifndef MAME_BUS_ISA_DCB_H
+#define MAME_BUS_ISA_DCB_H
+
+#pragma once
+
+#include "isa.h"
+#include "cpu/i86/i186.h"
+#include "machine/eepromser.h"
+
+class novell_dcb_device : public device_t, public device_isa16_card_interface
+{
+public:
+ novell_dcb_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+ virtual void device_start() override;
+
+private:
+ void eeprom_w(u8 data);
+ u8 misc_r();
+
+ void mem_map(address_map &map);
+ void io_map(address_map &map);
+
+ required_device<i80188_cpu_device> m_localcpu;
+ required_device<eeprom_serial_93cxx_device> m_eeprom;
+};
+
+DECLARE_DEVICE_TYPE(NOVELL_DCB, novell_dcb_device)
+
+#endif // MAME_BUS_ISA_DCB_H
diff --git a/src/devices/bus/isa/isa_cards.cpp b/src/devices/bus/isa/isa_cards.cpp
index 5b52dbd0546..5b0c2315f38 100644
--- a/src/devices/bus/isa/isa_cards.cpp
+++ b/src/devices/bus/isa/isa_cards.cpp
@@ -31,13 +31,17 @@
#include "ide.h"
#include "xtide.h"
#include "side116.h"
-#include "aha1542.h"
+#include "aha1542b.h"
+#include "aha1542c.h"
+#include "aha174x.h"
#include "wd1002a_wx1.h"
#include "wd1007a.h"
#include "mcd.h"
#include "lbaenhancer.h"
#include "cl_sh260.h"
#include "bt54x.h"
+#include "dcb.h"
+#include "ultra12f.h"
// sound
#include "adlib.h"
@@ -153,7 +157,13 @@ void pc_isa16_cards(device_slot_interface &device)
// 16-bit
device.option_add("ide", ISA16_IDE);
device.option_add("ne2000", NE2000);
- device.option_add("aha1542", AHA1542);
+ device.option_add("aha1542a", AHA1542A);
+ device.option_add("aha1542b", AHA1542B);
+ device.option_add("aha1542c", AHA1542C);
+ device.option_add("aha1542cf", AHA1542CF);
+ device.option_add("aha1542cp", AHA1542CP);
+ device.option_add("aha1740", AHA1740); // actually an EISA card
+ device.option_add("aha1742a", AHA1742A); // actually an EISA card
device.option_add("gus",ISA16_GUS);
device.option_add("sblaster_16", ISA16_SOUND_BLASTER_16);
device.option_add("svga_s3", ISA16_SVGA_S3);
@@ -174,5 +184,9 @@ void pc_isa16_cards(device_slot_interface &device)
device.option_add("wd1007a", WD1007A);
device.option_add("ev346", EV346);
device.option_add("jc1310", JC1310);
+ device.option_add("bt542b", BT542B);
+ device.option_add("bt542bh", BT542BH);
device.option_add("bt545s", BT545S);
+ device.option_add("dcb", NOVELL_DCB);
+ device.option_add("ultra12f", ULTRA12F);
}
diff --git a/src/devices/bus/isa/np600.cpp b/src/devices/bus/isa/np600.cpp
index 064c1d40191..b38dc008347 100644
--- a/src/devices/bus/isa/np600.cpp
+++ b/src/devices/bus/isa/np600.cpp
@@ -11,7 +11,6 @@
#include "cpu/i86/i186.h"
#include "machine/74259.h"
-//#include "machine/i82586.h"
DEFINE_DEVICE_TYPE(NP600A3, np600a3_device, "np600a3", "InterLan NP600A-3 Intelligent Protocol Processor")
@@ -19,6 +18,7 @@ np600a3_device::np600a3_device(const machine_config &mconfig, const char *tag, d
: device_t(mconfig, NP600A3, tag, owner, clock)
, device_isa16_card_interface(mconfig, *this)
, m_npcpu(*this, "npcpu")
+ , m_lcc(*this, "lcc")
{
}
@@ -26,6 +26,18 @@ void np600a3_device::device_start()
{
}
+void np600a3_device::lcc_ca_w(u16 data)
+{
+ m_lcc->ca(0);
+ m_lcc->ca(1);
+}
+
+WRITE_LINE_MEMBER(np600a3_device::lcc_reset_w)
+{
+ if (!state)
+ m_lcc->reset();
+}
+
u16 np600a3_device::status_r()
{
return 0;
@@ -33,25 +45,35 @@ u16 np600a3_device::status_r()
void np600a3_device::mem_map(address_map &map)
{
- map(0x00000, 0x7ffff).ram(); // GM71256-12 x16
+ map(0x00000, 0x7ffff).ram().share("netram"); // GM71256-12 x16
map(0xfc000, 0xfffff).rom().region("npcpu", 0);
}
void np600a3_device::io_map(address_map &map)
{
- map(0x0070, 0x007f).w("latch70", FUNC(ls259_device::write_a0));
+ map(0x0000, 0x0001).w(FUNC(np600a3_device::lcc_ca_w));
+ map(0x0070, 0x007f).w("bitlatch", FUNC(ls259_device::write_a0));
map(0x0080, 0x0081).r(FUNC(np600a3_device::status_r));
}
+void np600a3_device::lcc_map(address_map &map)
+{
+ map(0x000000, 0x07ffff).ram().share("netram");
+ map(0xf80000, 0xffffff).ram().share("netram");
+}
+
void np600a3_device::device_add_mconfig(machine_config &config)
{
I80186(config, m_npcpu, 16_MHz_XTAL);
m_npcpu->set_addrmap(AS_PROGRAM, &np600a3_device::mem_map);
m_npcpu->set_addrmap(AS_IO, &np600a3_device::io_map);
- LS259(config, "latch70"); // U28
+ ls259_device &bitlatch(LS259(config, "bitlatch")); // U28
+ bitlatch.q_out_cb<4>().set(FUNC(np600a3_device::lcc_reset_w));
- //I82586(config, "enet", 20_MHz_XTAL);
+ I82586(config, m_lcc, 20_MHz_XTAL);
+ m_lcc->set_addrmap(0, &np600a3_device::lcc_map);
+ m_lcc->out_irq_cb().set(m_npcpu, FUNC(i80186_cpu_device::tmrin1_w));
}
ROM_START(np600a3)
diff --git a/src/devices/bus/isa/np600.h b/src/devices/bus/isa/np600.h
index 7831d804922..e1068b54758 100644
--- a/src/devices/bus/isa/np600.h
+++ b/src/devices/bus/isa/np600.h
@@ -12,6 +12,7 @@
#pragma once
#include "isa.h"
+#include "machine/i82586.h"
class np600a3_device : public device_t, public device_isa16_card_interface
{
@@ -26,12 +27,16 @@ protected:
virtual const tiny_rom_entry *device_rom_region() const override;
private:
+ void lcc_ca_w(u16 data);
+ DECLARE_WRITE_LINE_MEMBER(lcc_reset_w);
u16 status_r();
void mem_map(address_map &map);
void io_map(address_map &map);
+ void lcc_map(address_map &map);
required_device<cpu_device> m_npcpu;
+ required_device<i82586_device> m_lcc;
};
DECLARE_DEVICE_TYPE(NP600A3, np600a3_device)
diff --git a/src/devices/bus/isa/ultra12f.cpp b/src/devices/bus/isa/ultra12f.cpp
new file mode 100644
index 00000000000..f2f93507548
--- /dev/null
+++ b/src/devices/bus/isa/ultra12f.cpp
@@ -0,0 +1,64 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ UltraStor Ultra 12F ESDI Caching Disk Controller
+
+***************************************************************************/
+
+#include "emu.h"
+#include "ultra12f.h"
+
+DEFINE_DEVICE_TYPE(ULTRA12F, ultra12f_device, "ultra12f", "Ultra 12F ESDI Caching Disk Controller")
+
+ultra12f_device::ultra12f_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, ULTRA12F, tag, owner, clock)
+ , device_isa16_card_interface(mconfig, *this)
+ , m_hpc(*this, "hpc")
+ , m_bios(*this, "bios")
+{
+}
+
+void ultra12f_device::device_start()
+{
+ // Firmware EPROM has a couple of lines scrambled
+ u8 *firmware = memregion("firmware")->base();
+ for (offs_t b = 0; b < 0x8000; b += 0x100)
+ {
+ for (offs_t x = 0; x < 0x10; x++)
+ {
+ std::swap(firmware[b | x | 0x10], firmware[b | x | 0x80]);
+ std::swap(firmware[b | x | 0x30], firmware[b | x | 0xa0]);
+ std::swap(firmware[b | x | 0x50], firmware[b | x | 0xc0]);
+ std::swap(firmware[b | x | 0x70], firmware[b | x | 0xe0]);
+ }
+ }
+}
+
+void ultra12f_device::hpc_map(address_map &map)
+{
+ map(0x8000, 0xffff).rom().region("firmware", 0);
+}
+
+void ultra12f_device::device_add_mconfig(machine_config &config)
+{
+ HPC46003(config, m_hpc, 24_MHz_XTAL); // apparently a HPC46003V30 custom-labeled as "USC010-1-30"
+ m_hpc->set_addrmap(AS_PROGRAM, &ultra12f_device::hpc_map);
+}
+
+ROM_START(ultra12f)
+ ROM_REGION(0x4000, "bios", 0)
+ ROM_SYSTEM_BIOS(0, "v202", "UBIOS 2.02") // "Date : 04/05/90 Version 2.02"
+ ROMX_LOAD("38001-009.bin", 0x0000, 0x4000, CRC(b96c4839) SHA1(4e601c4ff1deae959c0807479d25de6db4e6cf3e), ROM_BIOS(0)) // 27C128, 150ns EPROM
+ ROM_SYSTEM_BIOS(1, "v300", "UBIOS 3.00") // "Date : 06/18/91 Version 3.00"
+ ROMX_LOAD("38001-010.bin", 0x0000, 0x4000, CRC(aa80d74e) SHA1(b507e6ead79e836969b8b6f2fa88ca99d6b354ad), ROM_BIOS(1)) // 27C128-12
+
+ ROM_REGION(0x8000, "firmware", 0)
+ ROMX_LOAD("28001-009.bin", 0x0000, 0x8000, CRC(0b6c74a1) SHA1(1a9eb5866f2104e94295d0915fe10c4c1745665b), ROM_BIOS(0)) // 27C256, 120ns EPROM
+ ROMX_LOAD("28001-012.bin", 0x0000, 0x8000, CRC(62fd2f69) SHA1(48d6e65001a262b3e99d373fa59e0672c5ec4284), ROM_BIOS(1)) // 27C256-12
+ROM_END
+
+const tiny_rom_entry *ultra12f_device::device_rom_region() const
+{
+ return ROM_NAME(ultra12f);
+}
diff --git a/src/devices/bus/isa/ultra12f.h b/src/devices/bus/isa/ultra12f.h
new file mode 100644
index 00000000000..6b259aefa6b
--- /dev/null
+++ b/src/devices/bus/isa/ultra12f.h
@@ -0,0 +1,38 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ UltraStor Ultra 12F ESDI Caching Disk Controller
+
+***************************************************************************/
+
+#ifndef MAME_BUS_ISA_ULTRA12F_H
+#define MAME_BUS_ISA_ULTRA12F_H
+
+#pragma once
+
+#include "isa.h"
+#include "cpu/hpc/hpc.h"
+
+class ultra12f_device : public device_t, public device_isa16_card_interface
+{
+public:
+ ultra12f_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+
+protected:
+ virtual void device_start() override;
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+private:
+ void hpc_map(address_map &map);
+
+ required_device<hpc_device> m_hpc;
+ required_region_ptr<u8> m_bios;
+};
+
+DECLARE_DEVICE_TYPE(ULTRA12F, ultra12f_device)
+
+#endif // MAME_BUS_ISA_ULTRA12F_H
diff --git a/src/devices/bus/mtx/sdx.cpp b/src/devices/bus/mtx/sdx.cpp
index 27f7285d6d2..44687e09f08 100644
--- a/src/devices/bus/mtx/sdx.cpp
+++ b/src/devices/bus/mtx/sdx.cpp
@@ -268,15 +268,15 @@ void mtx_sdxcpm_device::device_reset()
READ8_MEMBER(mtx_sdx_device::sdx_status_r)
{
/*
- bit description
- 0 Head load: 1 - head load on drive
- 1 Double-sided: 1 if drive double-sided
- 2 TPI: 0 - 48 TPI drive. 1 - 96 TPI drive
- 3 Track stepping rate: 0 - 12ms, 1 - 6ms
- 4 No. of drives: 0 - 1 drive, 1 - 2 drives
- 5 Ready: 1 - drive ready
- 6 Interrupt: 1 - FDC interrupt request
- 7 Data request: 1 - FDC data request
+ bit description
+ 0 Head load: 1 - head load on drive
+ 1 Double-sided: 1 if drive double-sided
+ 2 TPI: 0 - 48 TPI drive. 1 - 96 TPI drive
+ 3 Track stepping rate: 0 - 12ms, 1 - 6ms
+ 4 No. of drives: 0 - 1 drive, 1 - 2 drives
+ 5 Ready: 1 - drive ready
+ 6 Interrupt: 1 - FDC interrupt request
+ 7 Data request: 1 - FDC data request
*/
uint8_t data = 0x00;
@@ -297,12 +297,12 @@ READ8_MEMBER(mtx_sdx_device::sdx_status_r)
WRITE8_MEMBER(mtx_sdx_device::sdx_control_w)
{
/*
- bit description
- 0 Drive select: 0 - drive A, 1 - drive B
- 1 Side select: 0 - side 0, 1 - side 1
- 2 Motor on: 1 - turns drive motor on
- 3 Motor ready: 1 - drive motor ready
- 4 Density: 0 - FM, 1 - MFM
+ bit description
+ 0 Drive select: 0 - drive A, 1 - drive B
+ 1 Side select: 0 - side 0, 1 - side 1
+ 2 Motor on: 1 - turns drive motor on
+ 3 Motor ready: 1 - drive motor ready
+ 4 Density: 0 - FM, 1 - MFM
*/
m_control = data;
diff --git a/src/devices/bus/nes/konami.cpp b/src/devices/bus/nes/konami.cpp
index e979132223d..b936b06b48a 100644
--- a/src/devices/bus/nes/konami.cpp
+++ b/src/devices/bus/nes/konami.cpp
@@ -81,7 +81,7 @@ nes_konami_vrc6_device::nes_konami_vrc6_device(const machine_config &mconfig, co
}
nes_konami_vrc7_device::nes_konami_vrc7_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : nes_konami_vrc4_device(mconfig, NES_VRC7, tag, owner, clock), m_ym2413(*this, "ym")
+ : nes_konami_vrc4_device(mconfig, NES_VRC7, tag, owner, clock), m_vrc7snd(*this, "vrc7snd")
{
}
@@ -560,8 +560,6 @@ void nes_konami_vrc4_device::write_h(offs_t offset, uint8_t data)
In MESS: Supported. It also uses konami_irq (there are IRQ
issues though: see Akumajou Densetsu intro).
- TODO: Add sound capabilities support!
-
-------------------------------------------------*/
void nes_konami_vrc6_device::write_h(offs_t offset, uint8_t data)
@@ -644,7 +642,7 @@ void nes_konami_vrc6_device::device_add_mconfig(machine_config &config)
// TODO: this is not how VRC6 clock signaling works!
// The board uses the CLK pin in reality, not hardcoded NTSC values!
- VRC6(config, m_vrc6snd, XTAL(21'477'272)/12).add_route(ALL_OUTPUTS, "addon", 0.5);
+ VRC6(config, m_vrc6snd, XTAL(21'477'272)/12).add_route(ALL_OUTPUTS, "addon", 1.0);
}
/*-------------------------------------------------
@@ -681,11 +679,11 @@ void nes_konami_vrc7_device::write_h(offs_t offset, uint8_t data)
case 0x1010:
case 0x1018:
- m_ym2413->register_port_w(data);
+ m_vrc7snd->register_port_w(data);
break;
case 0x1030:
case 0x1038:
- m_ym2413->data_port_w(data);
+ m_vrc7snd->data_port_w(data);
break;
case 0x2000:
@@ -758,8 +756,6 @@ void nes_konami_vrc7_device::write_h(offs_t offset, uint8_t data)
// and has one output pin for audio, multiplexed for all 6 channels; OPLL has two output pins, one for
// FM and one for Rhythm, and has no special status pin.
-// FIXME: we currently emulate this as a base YM2413!
-
void nes_konami_vrc7_device::device_add_mconfig(machine_config &config)
{
// additional sound hardware
@@ -767,5 +763,5 @@ void nes_konami_vrc7_device::device_add_mconfig(machine_config &config)
// TODO: this is not how VRC7 clock signaling works!
// The board uses the CLK pin in reality, not hardcoded NTSC values!
- YM2413(config, m_ym2413, XTAL(21'477'272)/12).add_route(ALL_OUTPUTS, "addon", 0.5);
+ VRC7(config, m_vrc7snd, XTAL(21'477'272)/6).add_route(0, "addon", 1.0).add_route(1, "addon", 0.0);
}
diff --git a/src/devices/bus/nes/konami.h b/src/devices/bus/nes/konami.h
index ed8d0caea3c..86afa1832e1 100644
--- a/src/devices/bus/nes/konami.h
+++ b/src/devices/bus/nes/konami.h
@@ -157,7 +157,7 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
private:
- required_device<ym2413_device> m_ym2413;
+ required_device<vrc7snd_device> m_vrc7snd;
};
diff --git a/src/devices/bus/nes/mmc5.cpp b/src/devices/bus/nes/mmc5.cpp
index b512f914e8b..1feef95aa67 100644
--- a/src/devices/bus/nes/mmc5.cpp
+++ b/src/devices/bus/nes/mmc5.cpp
@@ -18,6 +18,7 @@
#include "emu.h"
#include "mmc5.h"
+#include "speaker.h"
#ifdef NES_PCB_DEBUG
#define VERBOSE 1
@@ -46,7 +47,7 @@ nes_exrom_device::nes_exrom_device(const machine_config &mconfig, const char *ta
, m_prg_mode(0), m_chr_mode(0), m_wram_protect_1(0), m_wram_protect_2(0), m_exram_control(0), m_wram_base(0), m_last_chr(0), m_ex1_chr(0)
, m_split_chr(0), m_ex1_bank(0), m_high_chr(0), m_split_scr(0), m_split_rev(0), m_split_ctrl(0), m_split_yst(0), m_split_bank(0), m_vcount(0)
, m_ppu(*this, ":ppu") // FIXME: this dependency should not exist
- , m_sound(*this, ":maincpu:nesapu") // FIXME: this is a hack, it should have extra channels, not pass to the existing APU!!!
+ , m_sound(*this, "mmc5snd") // FIXME: this is a hack, it should be separated device, similar not same as NES APU!!!
{
}
@@ -677,3 +678,16 @@ void nes_exrom_device::write_h(offs_t offset, uint8_t data)
else if (!m_prgram.empty())
m_prgram[(((m_ram_hi_banks[bank] & 3) * 0x2000) + (offset & 0x1fff)) & (m_prgram.size() - 1)] = data;
}
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void nes_exrom_device::device_add_mconfig(machine_config &config)
+{
+ // additional sound hardware
+ SPEAKER(config, "addon").front_center();
+
+ // TODO: temporary; will be separated device
+ NES_APU(config, m_sound, XTAL(21'477'272)/12).add_route(ALL_OUTPUTS, "addon", 0.50);
+}
diff --git a/src/devices/bus/nes/mmc5.h b/src/devices/bus/nes/mmc5.h
index 093a64471d0..86914fec177 100644
--- a/src/devices/bus/nes/mmc5.h
+++ b/src/devices/bus/nes/mmc5.h
@@ -36,6 +36,7 @@ public:
protected:
// device-level overrides
+ virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
void set_mirror(int page, int src);
diff --git a/src/devices/bus/nes/namcot.cpp b/src/devices/bus/nes/namcot.cpp
index e2898d6b9ba..256e5d65f3b 100644
--- a/src/devices/bus/nes/namcot.cpp
+++ b/src/devices/bus/nes/namcot.cpp
@@ -16,7 +16,6 @@
* Namcot 340 [mapper 210]
TODO:
- - add sound feature of Namcot-163
- Quinty is not working (same issue of Mendel Palace on TxROM boards, of course)
***********************************************************************************************************/
@@ -26,6 +25,8 @@
#include "namcot.h"
#include "ui/uimain.h"
+#include "speaker.h"
+
#ifdef NES_PCB_DEBUG
#define VERBOSE 1
#else
@@ -83,7 +84,7 @@ nes_namcot175_device::nes_namcot175_device(const machine_config &mconfig, const
}
nes_namcot163_device::nes_namcot163_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : nes_namcot340_device(mconfig, NES_NAMCOT163, tag, owner, clock), m_wram_protect(0), m_latch(0), m_chr_bank(0)
+ : nes_namcot340_device(mconfig, NES_NAMCOT163, tag, owner, clock), m_wram_protect(0), m_latch(0), m_chr_bank(0), m_namco163snd(*this, "n163")
{
}
@@ -550,13 +551,11 @@ void nes_namcot175_device::write_h(offs_t offset, uint8_t data)
Compared to Namcot-175 here we have mapper controlled
mirroring, NTRAM mapping to VRAM and additional
- sound hw inside the chip (currently unemulated) and
- some internal RAM.
+ sound hw inside the chip and some internal RAM.
iNES: mapper 19
- In MESS: Supported (with no emulation of the
- sound component)
+ In MESS: Supported
-------------------------------------------------*/
@@ -614,7 +613,7 @@ void nes_namcot163_device::write_l(offs_t offset, uint8_t data)
switch (offset & 0x1800)
{
case 0x0800:
- LOG_MMC(("Namcot-163 sound reg write, data: %02x\n", data));
+ m_namco163snd->data_w(data);
break;
default:
n340_lowrite(offset, data);
@@ -630,8 +629,7 @@ uint8_t nes_namcot163_device::read_l(offs_t offset)
switch (offset & 0x1800)
{
case 0x0800:
- LOG_MMC(("Namcot-163 sound reg read\n"));
- return 0;
+ return m_namco163snd->data_r();
default:
return n340_loread(offset);
}
@@ -667,7 +665,7 @@ void nes_namcot163_device::write_h(offs_t offset, uint8_t data)
set_mirror(page, data);
break;
case 0x6000:
- // TODO: data & 40 (or data & c0) disable sound if set
+ m_namco163snd->disable_w((data & 0x40) ? ASSERT_LINE : CLEAR_LINE);
prg8_89(data & 0x3f);
break;
case 0x6800:
@@ -677,10 +675,23 @@ void nes_namcot163_device::write_h(offs_t offset, uint8_t data)
case 0x7800:
// the lower 4 bits work *BOTH* as WRAM write protect *AND* as sound address!
m_wram_protect = data & 0x0f;
- LOG_MMC(("Namcot-163 sound address write, data: %02x\n", data));
+ m_namco163snd->addr_w(data);
break;
default:
n340_hiwrite(offset, data);
break;
}
}
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void nes_namcot163_device::device_add_mconfig(machine_config &config)
+{
+ // additional sound hardware
+ SPEAKER(config, "addon").front_center();
+
+ // TODO: Correct clock input / divider?
+ NAMCO_163(config, m_namco163snd, XTAL(21'477'272)/12).add_route(ALL_OUTPUTS, "addon", 0.5);
+}
diff --git a/src/devices/bus/nes/namcot.h b/src/devices/bus/nes/namcot.h
index bcf72f5bad4..1dcf237fa90 100644
--- a/src/devices/bus/nes/namcot.h
+++ b/src/devices/bus/nes/namcot.h
@@ -6,6 +6,7 @@
#pragma once
#include "nxrom.h"
+#include "sound/namco_163.h"
// ======================> nes_namcot3433_device
@@ -157,11 +158,13 @@ protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_add_mconfig(machine_config &config) override;
+
private:
void set_mirror(uint8_t page, uint8_t data);
uint8_t m_wram_protect, m_latch, m_chr_bank;
- // TODO: add emulation of the sound part of the chip
+ required_device<namco_163_sound_device> m_namco163snd;
};
diff --git a/src/devices/bus/nubus/bootbug.cpp b/src/devices/bus/nubus/bootbug.cpp
index bebfda194fa..24763b64dc2 100644
--- a/src/devices/bus/nubus/bootbug.cpp
+++ b/src/devices/bus/nubus/bootbug.cpp
@@ -115,10 +115,10 @@ void nubus_bootbug_device::device_reset()
WRITE32_MEMBER( nubus_bootbug_device::dev_w )
{
- m_uart->ins8250_w(space, offset, data & 0xff);
+ m_uart->ins8250_w(offset, data & 0xff);
}
READ32_MEMBER( nubus_bootbug_device::dev_r )
{
- return m_uart->ins8250_r(space, offset);
+ return m_uart->ins8250_r(offset);
}
diff --git a/src/devices/bus/pc_kbd/pcat101.cpp b/src/devices/bus/pc_kbd/pcat101.cpp
index e36a3062492..77dfca9cbb7 100644
--- a/src/devices/bus/pc_kbd/pcat101.cpp
+++ b/src/devices/bus/pc_kbd/pcat101.cpp
@@ -14,7 +14,8 @@
* 1391401 US English 101-key
*
* TODO
- * - matrix and mcu ports (skeleton only)
+ * - requires mask rom 6805u3 and timer
+ * - fix issue receiving commands
*/
#include "emu.h"
@@ -45,173 +46,184 @@ const tiny_rom_entry *ibm_pc_at_101_keyboard_device::device_rom_region() const
void ibm_pc_at_101_keyboard_device::device_add_mconfig(machine_config &config)
{
- M68705U3(config, m_maincpu, 0);
+ // FIXME: really a 6805U3 (mask ROM, not EPROM) part
+ M68705U3(config, m_mcu, 4_MHz_XTAL);
- //m_maincpu->portb_r_cb().set(FUNC(ibm_pc_at_101_keyboard_device::portb_r));
- //m_maincpu->portb_w_cb().set(FUNC(ibm_pc_at_101_keyboard_device::portb_w));
+ // ports A and C control the matrix column select
+ m_mcu->porta_w().set([this](u8 data) { m_porta = data; });
+ m_mcu->portc_w().set([this](u8 data) { m_portc = data; });
+
+ // port D reads the matrix row output
+ m_mcu->portd_r().set(FUNC(ibm_pc_at_101_keyboard_device::portd_r));
+
+ // port B controls clock I/O, data output and LED output
+ m_mcu->portb_r().set(FUNC(ibm_pc_at_101_keyboard_device::portb_r));
+ m_mcu->portb_w().set(FUNC(ibm_pc_at_101_keyboard_device::portb_w));
+
+ // TODO: timer is held high
+ //m_mcu->timer_r().set_constant(1);
}
-// FIXME: copied from ibm_pc_at_84_keyboard - probably completely wrong
INPUT_PORTS_START(ibm_pc_at_101_keyboard)
- PORT_START("column00")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F9) PORT_CHAR(UCHAR_MAMEKEY(F9))
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7))
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5))
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3))
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("col.0")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_MAMEKEY(RCONTROL))
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("column01")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F10) PORT_CHAR(UCHAR_MAMEKEY(F10))
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8))
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6))
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4))
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR(UCHAR_MAMEKEY(TAB))
+ PORT_START("col.1")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_MAMEKEY(LSHIFT))
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_MAMEKEY(RSHIFT))
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("column02")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT))
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("col.2")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR(UCHAR_MAMEKEY(TAB))
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`') PORT_CHAR('~')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("column03")
+ PORT_START("col.3")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("column04")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("col.4")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4))
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3))
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("column05")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("col.5")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
- PORT_START("column06")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("col.6")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5))
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F9) PORT_CHAR(UCHAR_MAMEKEY(F9))
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F10) PORT_CHAR(UCHAR_MAMEKEY(F10))
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
+
+ PORT_START("col.7")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
+
+ PORT_START("col.8")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6))
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("column07")
+ PORT_START("col.9")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7))
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8))
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("column08")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(')
+ PORT_START("col.a")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':')
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
- PORT_START("column09")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("col.b")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD))
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL))
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F11) PORT_CHAR(UCHAR_MAMEKEY(F11))
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD))
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_NUMLOCK) PORT_CHAR(UCHAR_MAMEKEY(NUMLOCK))
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
- PORT_START("column10")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_CUSTOM)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
+ PORT_START("col.c")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD))
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD))
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F12) PORT_CHAR(UCHAR_MAMEKEY(F12))
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD))
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD))
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD))
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
- PORT_START("column11")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`') PORT_CHAR('~')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("col.d")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD))
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD))
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PGUP) PORT_CHAR(UCHAR_MAMEKEY(PGUP))
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PGDN) PORT_CHAR(UCHAR_MAMEKEY(PGDN))
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD))
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD))
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(ASTERISK))
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD))
- PORT_START("column12")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("col.e")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME))
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(END))
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD))
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD))
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PAUSE) PORT_CHAR(UCHAR_MAMEKEY(PAUSE))
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
- PORT_START("column13")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 1 End") PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD))
+ PORT_START("col.f")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT))
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 4 " UTF8_LEFT) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD))
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 7 Home") PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PRTSCR) PORT_CHAR(UCHAR_MAMEKEY(PRTSCR))
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SCRLOCK) PORT_CHAR(UCHAR_MAMEKEY(SCRLOCK))
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("column14")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 0 Ins") PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD))
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad . Del") PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD))
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 2 " UTF8_DOWN) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD))
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD))
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 6 " UTF8_RIGHT) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD))
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 8 " UTF8_UP) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD))
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_NUMLOCK) PORT_CHAR(UCHAR_MAMEKEY(NUMLOCK))
-
- PORT_START("column15")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD))
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 3 PgDn") PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD))
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD))
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad * PrtSc") PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(ASTERISK))
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 9 PgUp") PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD))
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Scroll Lock Break") PORT_CODE(KEYCODE_SCRLOCK) PORT_CHAR(UCHAR_MAMEKEY(SCRLOCK))
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Sys Req")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RALT) PORT_CHAR(UCHAR_MAMEKEY(RALT))
INPUT_PORTS_END
ioport_constructor ibm_pc_at_101_keyboard_device::device_input_ports() const
@@ -222,8 +234,8 @@ ioport_constructor ibm_pc_at_101_keyboard_device::device_input_ports() const
ibm_pc_at_101_keyboard_device::ibm_pc_at_101_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, PC_KBD_IBM_PC_AT_101, tag, owner, clock)
, device_pc_kbd_interface(mconfig, *this)
- , m_maincpu(*this, "mcu")
- , m_column(*this, "column%02u", 0U)
+ , m_mcu(*this, "mcu")
+ , m_matrix(*this, "col.%x", 0U)
, m_leds(*this, "led%u", 0U)
{
}
@@ -237,5 +249,46 @@ void ibm_pc_at_101_keyboard_device::device_start()
void ibm_pc_at_101_keyboard_device::device_reset()
{
- m_maincpu->reset();
+ m_mcu->reset();
+}
+
+void ibm_pc_at_101_keyboard_device::data_write(int state)
+{
+ m_mcu->set_input_line(M68705_IRQ_LINE, state);
+}
+
+u8 ibm_pc_at_101_keyboard_device::portb_r()
+{
+ if (clock_signal())
+ return m_portb & ~0x02;
+ else
+ return m_portb | 0x02;
+}
+
+void ibm_pc_at_101_keyboard_device::portb_w(u8 data)
+{
+ m_leds[LED_CAPS] = BIT(data, 7) || BIT(data, 6) || BIT(data, 5);
+ m_leds[LED_NUM] = BIT(data, 4);
+ m_leds[LED_SCROLL] = BIT(data, 3);
+
+ m_portb = data;
+
+ m_pc_kbdc->data_write_from_kb(!BIT(data, 2));
+ m_pc_kbdc->clock_write_from_kb(!BIT(data, 0));
+}
+
+u8 ibm_pc_at_101_keyboard_device::portd_r()
+{
+ u8 data = 0xff;
+
+ for (unsigned i = 0; i < 8; i++)
+ {
+ if (!BIT(m_portc, i))
+ data &= m_matrix[i + 0]->read();
+
+ if (!BIT(m_porta, i))
+ data &= m_matrix[i + 8]->read();
+ }
+
+ return data;
}
diff --git a/src/devices/bus/pc_kbd/pcat101.h b/src/devices/bus/pc_kbd/pcat101.h
index e727335aa77..3fe43d5a6c8 100644
--- a/src/devices/bus/pc_kbd/pcat101.h
+++ b/src/devices/bus/pc_kbd/pcat101.h
@@ -33,14 +33,9 @@ protected:
virtual ioport_constructor device_input_ports() const override;
// device_pc_kbd_interface overrides
- virtual DECLARE_WRITE_LINE_MEMBER(clock_write) override { m_maincpu->set_input_line(M68705_IRQ_LINE, state); };
- virtual DECLARE_WRITE_LINE_MEMBER(data_write) override { };
+ virtual void data_write(int state) override;
private:
- // ports A, C: matrix column
- // port D: matrix row
- // port B: clock/data and leds
-
enum
{
LED_SCROLL = 0,
@@ -48,9 +43,17 @@ private:
LED_CAPS
};
- required_device<m68705_device> m_maincpu;
- required_ioport_array<16> m_column;
+ u8 portb_r();
+ void portb_w(u8 data);
+ u8 portd_r();
+
+ required_device<m68705_device> m_mcu;
+ required_ioport_array<16> m_matrix;
output_finder<3> m_leds;
+
+ u8 m_porta;
+ u8 m_portb;
+ u8 m_portc;
};
// device type definition
diff --git a/src/devices/bus/pofo/hpc102.cpp b/src/devices/bus/pofo/hpc102.cpp
index 42bc8b550fe..00838036bf0 100644
--- a/src/devices/bus/pofo/hpc102.cpp
+++ b/src/devices/bus/pofo/hpc102.cpp
@@ -110,7 +110,7 @@ uint8_t pofo_hpc102_device::nrdi_r(offs_t offset, uint8_t data, bool iom, bool b
if (!(offset & 0x08))
{
- data = m_uart->ins8250_r(machine().dummy_space(), offset & 0x07);
+ data = m_uart->ins8250_r(offset & 0x07);
}
}
@@ -133,7 +133,7 @@ void pofo_hpc102_device::nwri_w(offs_t offset, uint8_t data, bool iom, bool bcom
if (!(offset & 0x08))
{
- m_uart->ins8250_w(machine().dummy_space(), offset & 0x07, data);
+ m_uart->ins8250_w(offset & 0x07, data);
}
}
}
diff --git a/src/devices/bus/s100/wunderbus.cpp b/src/devices/bus/s100/wunderbus.cpp
index c7db4417dcb..64eb9638d74 100644
--- a/src/devices/bus/s100/wunderbus.cpp
+++ b/src/devices/bus/s100/wunderbus.cpp
@@ -388,15 +388,15 @@ uint8_t s100_wunderbus_device::s100_sinp_r(offs_t offset)
break;
case 1:
- data = m_ace1->ins8250_r(machine().dummy_space(), offset & 0x07);
+ data = m_ace1->ins8250_r(offset & 0x07);
break;
case 2:
- data = m_ace2->ins8250_r(machine().dummy_space(), offset & 0x07);
+ data = m_ace2->ins8250_r(offset & 0x07);
break;
case 3:
- data = m_ace3->ins8250_r(machine().dummy_space(), offset & 0x07);
+ data = m_ace3->ins8250_r(offset & 0x07);
break;
}
}
@@ -511,15 +511,15 @@ void s100_wunderbus_device::s100_sout_w(offs_t offset, uint8_t data)
break;
case 1:
- m_ace1->ins8250_w(machine().dummy_space(), offset & 0x07, data);
+ m_ace1->ins8250_w(offset & 0x07, data);
break;
case 2:
- m_ace2->ins8250_w(machine().dummy_space(), offset & 0x07, data);
+ m_ace2->ins8250_w(offset & 0x07, data);
break;
case 3:
- m_ace3->ins8250_w(machine().dummy_space(), offset & 0x07, data);
+ m_ace3->ins8250_w(offset & 0x07, data);
break;
}
}
diff --git a/src/devices/bus/spectrum/exp.cpp b/src/devices/bus/spectrum/exp.cpp
index b93be6c7162..850b9f88384 100644
--- a/src/devices/bus/spectrum/exp.cpp
+++ b/src/devices/bus/spectrum/exp.cpp
@@ -167,7 +167,7 @@ void spectrum_expansion_slot_device::mreq_w(offs_t offset, uint8_t data)
#include "melodik.h"
#include "mface.h"
#include "mikroplus.h"
-//#include "opus.h"
+#include "opus.h"
#include "plus2test.h"
//#include "plusd.h"
#include "protek.h"
@@ -190,7 +190,7 @@ void spectrum_expansion_devices(device_slot_interface &device)
device.option_add("mface128", SPECTRUM_MFACE128);
device.option_add("mikroplus", SPECTRUM_MIKROPLUS);
device.option_add("mprint", SPECTRUM_MPRINT);
- //device.option_add("opus", SPECTRUM_OPUS);
+ device.option_add("opus", SPECTRUM_OPUS);
//device.option_add("plusd", SPECTRUM_PLUSD);
device.option_add("protek", SPECTRUM_PROTEK);
device.option_add("specdrum", SPECTRUM_SPECDRUM);
@@ -209,6 +209,7 @@ void spec128_expansion_devices(device_slot_interface &device)
device.option_add("mface128", SPECTRUM_MFACE128);
device.option_add("mikroplus", SPECTRUM_MIKROPLUS);
device.option_add("mprint", SPECTRUM_MPRINT);
+ device.option_add("opus", SPECTRUM_OPUS);
device.option_add("plus2test", SPECTRUM_PLUS2TEST);
device.option_add("protek", SPECTRUM_PROTEK);
device.option_add("specdrum", SPECTRUM_SPECDRUM);
diff --git a/src/devices/bus/spectrum/melodik.cpp b/src/devices/bus/spectrum/melodik.cpp
index f6001bac35c..f6abc0f98d6 100644
--- a/src/devices/bus/spectrum/melodik.cpp
+++ b/src/devices/bus/spectrum/melodik.cpp
@@ -115,4 +115,4 @@ void spectrum_melodik_device::iorq_w(offs_t offset, uint8_t data)
break;
}
m_exp->iorq_w(offset, data);
-} \ No newline at end of file
+}
diff --git a/src/devices/bus/spectrum/opus.cpp b/src/devices/bus/spectrum/opus.cpp
new file mode 100644
index 00000000000..be73ef01e92
--- /dev/null
+++ b/src/devices/bus/spectrum/opus.cpp
@@ -0,0 +1,289 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Opus Discovery disc system
+
+**********************************************************************/
+
+
+#include "emu.h"
+#include "opus.h"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(SPECTRUM_OPUS, spectrum_opus_device, "spectrum_opus", "Opus Discovery")
+
+
+//-------------------------------------------------
+// INPUT_PORTS( opus )
+//-------------------------------------------------
+
+static INPUT_PORTS_START( opus )
+ PORT_START("JOY")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT) PORT_8WAY
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT) PORT_8WAY
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN) PORT_8WAY
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP) PORT_8WAY
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_BUTTON1)
+INPUT_PORTS_END
+
+//-------------------------------------------------
+// input_ports - device-specific input ports
+//-------------------------------------------------
+
+ioport_constructor spectrum_opus_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( opus );
+}
+
+//-------------------------------------------------
+// MACHINE_DRIVER( opus )
+//-------------------------------------------------
+
+FLOPPY_FORMATS_MEMBER( spectrum_opus_device::floppy_formats )
+ FLOPPY_OPD_FORMAT
+FLOPPY_FORMATS_END
+
+static void spectrum_floppies(device_slot_interface &device)
+{
+ device.option_add("35ssdd", FLOPPY_35_SSDD);
+ device.option_add("35dd", FLOPPY_35_DD);
+}
+
+ROM_START(opus)
+ ROM_REGION(0x2000, "rom", 0)
+ ROM_DEFAULT_BIOS("opus22")
+ ROM_SYSTEM_BIOS(0, "opus22", "Opus v2.2")
+ ROMX_LOAD("opus-22.rom", 0x0000, 0x2000, CRC(50f0eae0) SHA1(0eee1c503f71709fce8b7560dadc2d07d15edb80), ROM_BIOS(0))
+ ROM_SYSTEM_BIOS(1, "opus21", "Opus v2.1")
+ ROMX_LOAD("opus-21.rom", 0x0000, 0x2000, CRC(619973f9) SHA1(31999a68901392bba907cf5a15e264b6759f1a29), ROM_BIOS(1))
+ ROM_SYSTEM_BIOS(2, "opus222", "Opus v2.22")
+ ROMX_LOAD("opus-222.rom", 0x0000, 0x2000, CRC(08ce9949) SHA1(71f1c8a8b923f7751d1ff48d30b8e18a15b92591), ROM_BIOS(2))
+ ROM_SYSTEM_BIOS(3, "quickdos", "QuickDOS v2.31") // MegaSoft
+ ROMX_LOAD("quickdos-231.rom", 0x0000, 0x2000, CRC(d042b32a) SHA1(2975f7eb61d44e898cdd6e3196893e95637f17ff), ROM_BIOS(3))
+ ROM_SYSTEM_BIOS(4, "excom", "EXCOM v2.28") // Paul Cheffings
+ ROMX_LOAD("excom-228.rom", 0x0000, 0x2000, CRC(29257418) SHA1(098a812c4707251f647553a2abc1436afa38f43c), ROM_BIOS(4))
+ROM_END
+
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void spectrum_opus_device::device_add_mconfig(machine_config &config)
+{
+ WD1770(config, m_fdc, 16_MHz_XTAL / 2);
+ m_fdc->drq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(spectrum_expansion_slot_device::nmi_w));
+
+ FLOPPY_CONNECTOR(config, "fdc:0", spectrum_floppies, "35dd", spectrum_opus_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, "fdc:1", spectrum_floppies, "35dd", spectrum_opus_device::floppy_formats).enable_sound(true);
+
+ /* parallel printer port */
+ CENTRONICS(config, m_centronics, centronics_devices, "printer");
+ m_centronics->ack_handler().set(m_pia, FUNC(pia6821_device::ca2_w));
+ m_centronics->busy_handler().set(FUNC(spectrum_opus_device::busy_w));
+
+ /* pia */
+ PIA6821(config, m_pia, 0);
+ m_pia->writepa_handler().set(FUNC(spectrum_opus_device::pia_out_a));
+ m_pia->writepb_handler().set(FUNC(spectrum_opus_device::pia_out_b));
+ m_pia->cb2_handler().set("centronics", FUNC(centronics_device::write_strobe));
+
+ /* software list */
+ SOFTWARE_LIST(config, "flop_list").set_original("spectrum_flop_opus");
+
+ /* passthru without NMI */
+ SPECTRUM_EXPANSION_SLOT(config, m_exp, spectrum_expansion_devices, nullptr);
+ m_exp->irq_handler().set(DEVICE_SELF_OWNER, FUNC(spectrum_expansion_slot_device::irq_w));
+}
+
+const tiny_rom_entry *spectrum_opus_device::device_rom_region() const
+{
+ return ROM_NAME( opus );
+}
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// spectrum_opus_device - constructor
+//-------------------------------------------------
+
+spectrum_opus_device::spectrum_opus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, SPECTRUM_OPUS, tag, owner, clock)
+ , device_spectrum_expansion_interface(mconfig, *this)
+ , m_joy(*this, "JOY")
+ , m_rom(*this, "rom")
+ , m_pia(*this, "pia")
+ , m_fdc(*this, "fdc")
+ , m_floppy0(*this, "fdc:0")
+ , m_floppy1(*this, "fdc:1")
+ , m_centronics(*this, "centronics")
+ , m_exp(*this, "exp")
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void spectrum_opus_device::device_start()
+{
+ memset(m_ram, 0, sizeof(m_ram));
+
+ save_item(NAME(m_romcs));
+ save_item(NAME(m_ram));
+ save_item(NAME(m_last_pc));
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void spectrum_opus_device::device_reset()
+{
+ m_romcs = 0;
+ m_last_pc = 0x0000;
+}
+
+
+//**************************************************************************
+// IMPLEMENTATION
+//**************************************************************************
+
+READ_LINE_MEMBER(spectrum_opus_device::romcs)
+{
+ return m_romcs | m_exp->romcs();
+}
+
+void spectrum_opus_device::opcode_fetch(offs_t offset)
+{
+ m_exp->opcode_fetch(offset);
+
+ if (!machine().side_effects_disabled())
+ {
+ switch (m_last_pc)
+ {
+ case 0x0008: case 0x0048: case 0x1708:
+ m_romcs = 1;
+ break;
+ case 0x1748:
+ m_romcs = 0;
+ break;
+ }
+ }
+ m_last_pc = offset;
+}
+
+uint8_t spectrum_opus_device::iorq_r(offs_t offset)
+{
+ uint8_t data = m_exp->iorq_r(offset);
+
+ // PIA bit 7 is enable joystick and selected on A5 only
+ if (!BIT(m_pia->a_output(), 7) && (~offset & 0x20))
+ {
+ data &= m_joy->read() & 0x1f;
+ }
+ return data;
+}
+
+void spectrum_opus_device::iorq_w(offs_t offset, uint8_t data)
+{
+ m_exp->iorq_w(offset, data);
+}
+
+uint8_t spectrum_opus_device::mreq_r(offs_t offset)
+{
+ uint8_t data = 0xff;
+
+ if (m_romcs)
+ {
+ switch (offset & 0xf800)
+ {
+ case 0x0000: case 0x0800: case 0x1000: case 0x1800:
+ data = m_rom->base()[offset & 0x1fff];
+ break;
+ case 0x2000:
+ data = m_ram[offset & 0x7ff];
+ break;
+ case 0x2800:
+ data = m_fdc->read(offset & 0x03);
+ break;
+ case 0x3000:
+ data = m_pia->read(offset & 0x03);
+ break;
+ case 0x3800: // Extra 2K described in QuickDOS manual - not used
+ data = m_ram[offset & 0xfff];
+ break;
+ }
+ }
+
+ if (m_exp->romcs())
+ data &= m_exp->mreq_r(offset);
+
+ return data;
+}
+
+void spectrum_opus_device::mreq_w(offs_t offset, uint8_t data)
+{
+ if (m_romcs)
+ {
+ switch (offset & 0xf800)
+ {
+ case 0x2000:
+ m_ram[offset & 0x7ff] = data;
+ break;
+ case 0x2800:
+ m_fdc->write(offset & 0x03, data);
+ break;
+ case 0x3000:
+ m_pia->write(offset & 0x03, data);
+ break;
+ case 0x3800: // Extra 2K described in QuickDOS manual - not used
+ m_ram[offset & 0xfff] = data;
+ break;
+ }
+ }
+
+ if (m_exp->romcs())
+ m_exp->mreq_w(offset, data);
+}
+
+WRITE8_MEMBER(spectrum_opus_device::pia_out_a)
+{
+ floppy_image_device *floppy = nullptr;
+
+ // bit 0, 1: drive select
+ if (!BIT(data, 0)) floppy = m_floppy1->get_device();
+ if (!BIT(data, 1)) floppy = m_floppy0->get_device();
+ m_fdc->set_floppy(floppy);
+
+ // bit 4: side select
+ if (floppy)
+ floppy->ss_w(BIT(data, 4));
+
+ // bit 5: density
+ m_fdc->dden_w(BIT(data, 5));
+}
+
+WRITE8_MEMBER(spectrum_opus_device::pia_out_b)
+{
+ m_centronics->write_data1(BIT(data, 1));
+ m_centronics->write_data2(BIT(data, 2));
+ m_centronics->write_data3(BIT(data, 3));
+ m_centronics->write_data4(BIT(data, 4));
+ m_centronics->write_data5(BIT(data, 5));
+ m_centronics->write_data6(BIT(data, 6));
+ m_centronics->write_data7(BIT(data, 7));
+}
+
+WRITE_LINE_MEMBER(spectrum_opus_device::busy_w)
+{
+ m_pia->set_a_input(state << 6, 0xbf);
+}
diff --git a/src/devices/bus/spectrum/opus.h b/src/devices/bus/spectrum/opus.h
new file mode 100644
index 00000000000..8d72d8be94b
--- /dev/null
+++ b/src/devices/bus/spectrum/opus.h
@@ -0,0 +1,75 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Opus Discovery disc system
+
+**********************************************************************/
+
+#ifndef MAME_BUS_SPECTRUM_OPUS_H
+#define MAME_BUS_SPECTRUM_OPUS_H
+
+#include "exp.h"
+#include "softlist.h"
+#include "imagedev/floppy.h"
+#include "machine/wd_fdc.h"
+#include "machine/6821pia.h"
+#include "bus/centronics/ctronics.h"
+#include "formats/opd_dsk.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+class spectrum_opus_device:
+ public device_t,
+ public device_spectrum_expansion_interface
+
+{
+public:
+ // construction/destruction
+ spectrum_opus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ DECLARE_FLOPPY_FORMATS(floppy_formats);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual ioport_constructor device_input_ports() const override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+ virtual void opcode_fetch(offs_t offset) override;
+ virtual uint8_t mreq_r(offs_t offset) override;
+ virtual void mreq_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t iorq_r(offs_t offset) override;
+ virtual void iorq_w(offs_t offset, uint8_t data) override;
+ virtual DECLARE_READ_LINE_MEMBER(romcs) override;
+
+private:
+ DECLARE_WRITE8_MEMBER(pia_out_a);
+ DECLARE_WRITE8_MEMBER(pia_out_b);
+ DECLARE_WRITE_LINE_MEMBER(busy_w);
+
+ required_ioport m_joy;
+ required_memory_region m_rom;
+ required_device<pia6821_device> m_pia;
+ required_device<wd_fdc_device_base> m_fdc;
+ required_device<floppy_connector> m_floppy0;
+ required_device<floppy_connector> m_floppy1;
+ required_device<centronics_device> m_centronics;
+ required_device<spectrum_expansion_slot_device> m_exp;
+
+ int m_romcs;
+ uint8_t m_ram[4 * 1024];
+ offs_t m_last_pc;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(SPECTRUM_OPUS, spectrum_opus_device)
+
+#endif // MAME_BUS_SPECTRUM_OPUS_H
diff --git a/src/devices/bus/svi3x8/expander/sv603.cpp b/src/devices/bus/svi3x8/expander/sv603.cpp
index ce4a9f11bcf..fc8e8c86d96 100644
--- a/src/devices/bus/svi3x8/expander/sv603.cpp
+++ b/src/devices/bus/svi3x8/expander/sv603.cpp
@@ -36,10 +36,10 @@ const tiny_rom_entry *sv603_device::device_rom_region() const
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(sv603_device::device_add_mconfig)
+void sv603_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("snd", SN76489A, XTAL(10'738'635) / 3)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
+ SN76489A(config, m_snd, XTAL(10'738'635) / 3).add_route(ALL_OUTPUTS, "mono", 1.00);
// controller ports
COLECOVISION_CONTROL_PORT(config, m_joy[0], colecovision_control_port_devices, "hand");
@@ -50,7 +50,7 @@ MACHINE_CONFIG_START(sv603_device::device_add_mconfig)
// cartridge slot
COLECOVISION_CARTRIDGE_SLOT(config, m_cart, colecovision_cartridges, nullptr);
SOFTWARE_LIST(config, "cart_list").set_original("coleco");
-MACHINE_CONFIG_END
+}
//**************************************************************************
diff --git a/src/devices/bus/svi3x8/slot/sv805.cpp b/src/devices/bus/svi3x8/slot/sv805.cpp
index cdcaee6f167..a5ceadf3577 100644
--- a/src/devices/bus/svi3x8/slot/sv805.cpp
+++ b/src/devices/bus/svi3x8/slot/sv805.cpp
@@ -77,7 +77,7 @@ uint8_t sv805_device::iorq_r(offs_t offset)
case 0x2d:
case 0x2e:
case 0x2f:
- return m_uart->ins8250_r(machine().dummy_space(), offset & 0x07);
+ return m_uart->ins8250_r(offset & 0x07);
}
return 0xff;
@@ -95,7 +95,7 @@ void sv805_device::iorq_w(offs_t offset, uint8_t data)
case 0x2d:
case 0x2e:
case 0x2f:
- m_uart->ins8250_w(machine().dummy_space(), offset & 0x07, data);
+ m_uart->ins8250_w(offset & 0x07, data);
}
}
diff --git a/src/devices/bus/vme/vme.cpp b/src/devices/bus/vme/vme.cpp
index 757874abae2..61ca35c2199 100644
--- a/src/devices/bus/vme/vme.cpp
+++ b/src/devices/bus/vme/vme.cpp
@@ -359,6 +359,36 @@ void vme_device::install_device(vme_amod_t amod, offs_t start, offs_t end, read8
}
}
+void vme_device::install_device(vme_amod_t amod, offs_t start, offs_t end, read8smo_delegate rhandler, write8smo_delegate whandler, uint32_t mask)
+{
+ LOG("%s %s AM%d D%02x\n", tag(), FUNCNAME, amod, m_prgwidth);
+
+ LOG(" - width:%d\n", m_prgwidth);
+
+ // TODO: support address modifiers and buscycles other than single access cycles
+ switch(amod)
+ {
+ case A16_SC: break;
+ case A24_SC: break;
+ case A32_SC: break;
+ default: fatalerror("VME D8: Non supported Address modifier: AM%02x\n", amod);
+ }
+
+ switch(m_prgwidth)
+ {
+ case 16:
+ m_prgspace->install_readwrite_handler(start, end, rhandler, whandler, (uint16_t)(mask & 0x0000ffff));
+ break;
+ case 24:
+ m_prgspace->install_readwrite_handler(start, end, rhandler, whandler, (uint32_t)(mask & 0x00ffffff));
+ break;
+ case 32:
+ m_prgspace->install_readwrite_handler(start, end, rhandler, whandler, mask);
+ break;
+ default: fatalerror("VME D8: Bus width %d not supported\n", m_prgwidth);
+ }
+}
+
// D16 bit devices in A16, A24 and A32
void vme_device::install_device(vme_amod_t amod, offs_t start, offs_t end, read16_delegate rhandler, write16_delegate whandler, uint32_t mask)
{
diff --git a/src/devices/bus/vme/vme.h b/src/devices/bus/vme/vme.h
index 755330f7689..2849b07f8b3 100644
--- a/src/devices/bus/vme/vme.h
+++ b/src/devices/bus/vme/vme.h
@@ -183,6 +183,7 @@ public:
};
void install_device(vme_amod_t amod, offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler, uint32_t mask);
void install_device(vme_amod_t amod, offs_t start, offs_t end, read8sm_delegate rhandler, write8sm_delegate whandler, uint32_t mask);
+ void install_device(vme_amod_t amod, offs_t start, offs_t end, read8smo_delegate rhandler, write8smo_delegate whandler, uint32_t mask);
// void install_device(vme_amod_t amod, offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler);
void install_device(vme_amod_t amod, offs_t start, offs_t end, read16_delegate rhandler, write16_delegate whandler, uint32_t mask);
void install_device(vme_amod_t amod, offs_t start, offs_t end, read32_delegate rhandler, write32_delegate whandler, uint32_t mask);
diff --git a/src/devices/bus/vme/vme_mzr8300.cpp b/src/devices/bus/vme/vme_mzr8300.cpp
index 362beef2546..133c17e9f49 100644
--- a/src/devices/bus/vme/vme_mzr8300.cpp
+++ b/src/devices/bus/vme/vme_mzr8300.cpp
@@ -175,17 +175,17 @@ void vme_mzr8300_card_device::device_start()
// m_vme->static_set_custom_spaces(*this);
m_vme->install_device(vme_device::A16_SC, base + 0, base + 1, // Channel B - Data
- read8_delegate(FUNC(z80sio_device::db_r), subdevice<z80sio_device>("sio0")),
- write8_delegate(FUNC(z80sio_device::db_w), subdevice<z80sio_device>("sio0")), 0x00ff);
+ read8smo_delegate(FUNC(z80sio_device::db_r), subdevice<z80sio_device>("sio0")),
+ write8smo_delegate(FUNC(z80sio_device::db_w), subdevice<z80sio_device>("sio0")), 0x00ff);
m_vme->install_device(vme_device::A16_SC, base + 2, base + 3, // Channel B - Control
- read8_delegate(FUNC(z80sio_device::cb_r), subdevice<z80sio_device>("sio0")),
- write8_delegate(FUNC(z80sio_device::cb_w), subdevice<z80sio_device>("sio0")), 0x00ff);
+ read8smo_delegate(FUNC(z80sio_device::cb_r), subdevice<z80sio_device>("sio0")),
+ write8smo_delegate(FUNC(z80sio_device::cb_w), subdevice<z80sio_device>("sio0")), 0x00ff);
m_vme->install_device(vme_device::A16_SC, base + 4, base + 5, // Channel A - Data
- read8_delegate(FUNC(z80sio_device::da_r), subdevice<z80sio_device>("sio0")),
- write8_delegate(FUNC(z80sio_device::da_w), subdevice<z80sio_device>("sio0")), 0x00ff);
+ read8smo_delegate(FUNC(z80sio_device::da_r), subdevice<z80sio_device>("sio0")),
+ write8smo_delegate(FUNC(z80sio_device::da_w), subdevice<z80sio_device>("sio0")), 0x00ff);
m_vme->install_device(vme_device::A16_SC, base + 6, base + 7, // Channel A - Control
- read8_delegate(FUNC(z80sio_device::ca_r), subdevice<z80sio_device>("sio0")),
- write8_delegate(FUNC(z80sio_device::ca_w), subdevice<z80sio_device>("sio0")), 0x00ff);
+ read8smo_delegate(FUNC(z80sio_device::ca_r), subdevice<z80sio_device>("sio0")),
+ write8smo_delegate(FUNC(z80sio_device::ca_w), subdevice<z80sio_device>("sio0")), 0x00ff);
m_vme->install_device(vme_device::A16_SC, base + 0x10, base + 0x13, // Am9513
read8sm_delegate(FUNC(am9513_device::read8), subdevice<am9513_device>("stc")),
write8sm_delegate(FUNC(am9513_device::write8), subdevice<am9513_device>("stc")), 0x00ff);
diff --git a/src/devices/bus/wangpc/mcc.cpp b/src/devices/bus/wangpc/mcc.cpp
index 5b029ed38d2..a3419f7c373 100644
--- a/src/devices/bus/wangpc/mcc.cpp
+++ b/src/devices/bus/wangpc/mcc.cpp
@@ -143,7 +143,7 @@ uint16_t wangpc_mcc_device::wangpcbus_iorc_r(offs_t offset, uint16_t mem_mask)
case 0x06/2:
if (ACCESSING_BITS_0_7)
{
- data = 0xff00 | m_sio->cd_ba_r(machine().dummy_space(), offset >> 1);
+ data = 0xff00 | m_sio->cd_ba_r(offset >> 1);
}
break;
@@ -153,7 +153,7 @@ uint16_t wangpc_mcc_device::wangpcbus_iorc_r(offs_t offset, uint16_t mem_mask)
case 0x0e/2:
if (ACCESSING_BITS_0_7)
{
- data = 0xff00 | m_dart->cd_ba_r(machine().dummy_space(), offset >> 1);
+ data = 0xff00 | m_dart->cd_ba_r(offset >> 1);
}
break;
@@ -208,14 +208,14 @@ void wangpc_mcc_device::wangpcbus_aiowc_w(offs_t offset, uint16_t mem_mask, uint
case 0x02/2:
case 0x04/2:
case 0x06/2:
- m_sio->cd_ba_w(machine().dummy_space(), offset >> 1, data & 0xff);
+ m_sio->cd_ba_w(offset >> 1, data & 0xff);
break;
case 0x08/2:
case 0x0a/2:
case 0x0c/2:
case 0x0e/2:
- m_dart->cd_ba_w(machine().dummy_space(), offset >> 1, data & 0xff);
+ m_dart->cd_ba_w(offset >> 1, data & 0xff);
break;
case 0x12/2:
diff --git a/src/devices/bus/wangpc/wdc.cpp b/src/devices/bus/wangpc/wdc.cpp
index 2ad74d8c8fd..8b816a50ece 100644
--- a/src/devices/bus/wangpc/wdc.cpp
+++ b/src/devices/bus/wangpc/wdc.cpp
@@ -325,11 +325,11 @@ WRITE8_MEMBER( wangpc_wdc_device::status_w )
}
-READ8_MEMBER( wangpc_wdc_device::ctc_ch0_r ) { return m_ctc->read(machine().dummy_space(), 0); }
-WRITE8_MEMBER( wangpc_wdc_device::ctc_ch0_w ) { m_ctc->write(machine().dummy_space(), 0, data); }
-READ8_MEMBER( wangpc_wdc_device::ctc_ch1_r ) { return m_ctc->read(machine().dummy_space(), 1); }
-WRITE8_MEMBER( wangpc_wdc_device::ctc_ch1_w ) { m_ctc->write(machine().dummy_space(), 1, data); }
-READ8_MEMBER( wangpc_wdc_device::ctc_ch2_r ) { return m_ctc->read(machine().dummy_space(), 2); }
-WRITE8_MEMBER( wangpc_wdc_device::ctc_ch2_w ) { m_ctc->write(machine().dummy_space(), 2, data); }
-READ8_MEMBER( wangpc_wdc_device::ctc_ch3_r ) { return m_ctc->read(machine().dummy_space(), 3); }
-WRITE8_MEMBER( wangpc_wdc_device::ctc_ch3_w ) { m_ctc->write(machine().dummy_space(), 3, data); }
+READ8_MEMBER( wangpc_wdc_device::ctc_ch0_r ) { return m_ctc->read(0); }
+WRITE8_MEMBER( wangpc_wdc_device::ctc_ch0_w ) { m_ctc->write(0, data); }
+READ8_MEMBER( wangpc_wdc_device::ctc_ch1_r ) { return m_ctc->read(1); }
+WRITE8_MEMBER( wangpc_wdc_device::ctc_ch1_w ) { m_ctc->write(1, data); }
+READ8_MEMBER( wangpc_wdc_device::ctc_ch2_r ) { return m_ctc->read(2); }
+WRITE8_MEMBER( wangpc_wdc_device::ctc_ch2_w ) { m_ctc->write(2, data); }
+READ8_MEMBER( wangpc_wdc_device::ctc_ch3_r ) { return m_ctc->read(3); }
+WRITE8_MEMBER( wangpc_wdc_device::ctc_ch3_w ) { m_ctc->write(3, data); }
diff --git a/src/devices/cpu/h8/h83003.cpp b/src/devices/cpu/h8/h83003.cpp
index 4e3e59c15cf..7b7b468d7b5 100644
--- a/src/devices/cpu/h8/h83003.cpp
+++ b/src/devices/cpu/h8/h83003.cpp
@@ -136,7 +136,9 @@ void h83003_device::map(address_map &map)
map(0xffffd2, 0xffffd2).rw("port9", FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w));
map(0xffffd3, 0xffffd3).rw("porta", FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w));
map(0xffffd4, 0xffffd4).w("portb", FUNC(h8_port_device::ddr_w));
+ map(0xffffd5, 0xffffd5).w("portc", FUNC(h8_port_device::ddr_w));
map(0xffffd6, 0xffffd6).rw("portb", FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w));
+ map(0xffffd7, 0xffffd7).rw("portc", FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w));
map(0xffffda, 0xffffda).rw("port4", FUNC(h8_port_device::pcr_r), FUNC(h8_port_device::pcr_w));
map(0xffffe0, 0xffffe7).r("adc", FUNC(h8_adc_device::addr8_r));
@@ -167,6 +169,7 @@ void h83003_device::device_add_mconfig(machine_config &config)
H8_PORT(config, "port9", h8_device::PORT_9, 0x00, 0xc0);
H8_PORT(config, "porta", h8_device::PORT_A, 0x00, 0x00);
H8_PORT(config, "portb", h8_device::PORT_B, 0x00, 0x00);
+ H8_PORT(config, "portc", h8_device::PORT_C, 0x00, 0x00);
H8_TIMER16(config, "timer16", 5, 0xe0);
H8H_TIMER16_CHANNEL(config, "timer16:0", 2, 2, "intc", 24);
H8H_TIMER16_CHANNEL(config, "timer16:1", 2, 2, "intc", 28);
diff --git a/src/devices/cpu/i386/cache.h b/src/devices/cpu/i386/cache.h
index 548a1fb9f85..a04f2cacf2e 100644
--- a/src/devices/cpu/i386/cache.h
+++ b/src/devices/cpu/i386/cache.h
@@ -222,37 +222,37 @@ u8 memory[memorysize];
void readline(u8 *data, u32 address)
{
- for (int n = 0; n < 64; n++)
- data[n] = memory[address + n];
+ for (int n = 0; n < 64; n++)
+ data[n] = memory[address + n];
}
void writeline(u8 *data, u32 address)
{
- for (int n = 0; n < 64; n++)
- memory[address + n] = data[n];
+ for (int n = 0; n < 64; n++)
+ memory[address + n] = data[n];
}
void cache_tester()
{
- cpucache<18, 8, 6, 2> cache;
- bool r;
- u8 *data;
- int address;
- u8 value;
+ cpucache<18, 8, 6, 2> cache;
+ bool r;
+ u8 *data;
+ int address;
+ u8 value;
- for (int n = 0; n < memorysize; n++)
- memory[n] = 0xaa ^ n;
- address = std::rand() & (memorysize - 1);
- r = cache.search(address, &data);
- if (r == false)
- {
- r = cache.allocate(address, &data);
- if (r == true)
- writeline(data, cache.base(address));
- readline(data, cache.base(address));
- }
- value = data[address & 63];
- if (value != memory[address])
- printf("Error reading address %d\n\r", address);
+ for (int n = 0; n < memorysize; n++)
+ memory[n] = 0xaa ^ n;
+ address = std::rand() & (memorysize - 1);
+ r = cache.search(address, &data);
+ if (r == false)
+ {
+ r = cache.allocate(address, &data);
+ if (r == true)
+ writeline(data, cache.base(address));
+ readline(data, cache.base(address));
+ }
+ value = data[address & 63];
+ if (value != memory[address])
+ printf("Error reading address %d\n\r", address);
}
*/
diff --git a/src/devices/cpu/i386/i386.h b/src/devices/cpu/i386/i386.h
index d8422780710..90aab9f0667 100644
--- a/src/devices/cpu/i386/i386.h
+++ b/src/devices/cpu/i386/i386.h
@@ -1637,7 +1637,7 @@ protected:
virtual void device_start() override;
virtual void device_reset() override;
- virtual u8 mem_pr8(offs_t address) override { return opcode_read_cache<u8, NATIVE_ENDIAN_VALUE_LE_BE(0, 3)>(address); }
+ virtual u8 mem_pr8(offs_t address) override { return opcode_read_cache<u8, NATIVE_ENDIAN_VALUE_LE_BE(0, 3)>(address); }
virtual u16 mem_pr16(offs_t address) override { return opcode_read_cache<u16, NATIVE_ENDIAN_VALUE_LE_BE(0, 2)>(address); }
virtual u32 mem_pr32(offs_t address) override { return opcode_read_cache<u32, 0>(address); }
virtual u8 mem_prd8(offs_t address) override { return program_read_cache<u8, NATIVE_ENDIAN_VALUE_LE_BE(0, 3)>(address); }
diff --git a/src/devices/cpu/m68000/m68000.h b/src/devices/cpu/m68000/m68000.h
index d6afd83d534..0ee41f348b5 100644
--- a/src/devices/cpu/m68000/m68000.h
+++ b/src/devices/cpu/m68000/m68000.h
@@ -148,6 +148,7 @@ public:
void set_tas_write_callback(write8_delegate callback);
uint16_t get_fc();
void set_hmmu_enable(int enable);
+ int get_pmmu_enable() {return m_pmmu_enabled;};
void set_fpu_enable(int enable);
void set_buserror_details(uint32_t fault_addr, uint8_t rw, uint8_t fc);
@@ -377,21 +378,6 @@ protected:
const device_type type, uint32_t prg_data_width, uint32_t prg_address_bits, address_map_constructor internal_map);
};
-class m68301_device : public m68000_base_device
-{
-public:
- // construction/destruction
- m68301_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
- virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
-
- virtual uint32_t execute_min_cycles() const override { return 4; };
- virtual uint32_t execute_max_cycles() const override { return 158; };
-
- // device-level overrides
- virtual void device_start() override;
-};
-
@@ -649,7 +635,6 @@ public:
DECLARE_DEVICE_TYPE(M68000, m68000_device)
-DECLARE_DEVICE_TYPE(M68301, m68301_device)
DECLARE_DEVICE_TYPE(M68008, m68008_device)
DECLARE_DEVICE_TYPE(M68008PLCC, m68008plcc_device)
DECLARE_DEVICE_TYPE(M68010, m68010_device)
diff --git a/src/devices/cpu/m68000/m68kcpu.cpp b/src/devices/cpu/m68000/m68kcpu.cpp
index e875b377af3..851c27163ea 100644
--- a/src/devices/cpu/m68000/m68kcpu.cpp
+++ b/src/devices/cpu/m68000/m68kcpu.cpp
@@ -2019,11 +2019,6 @@ std::unique_ptr<util::disasm_interface> m68000_device::create_disassembler()
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68000);
}
-std::unique_ptr<util::disasm_interface> m68301_device::create_disassembler()
-{
- return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68000);
-}
-
std::unique_ptr<util::disasm_interface> m68008_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68008);
@@ -2362,7 +2357,6 @@ device_memory_interface::space_config_vector m68000_base_device::memory_space_co
DEFINE_DEVICE_TYPE(M68000, m68000_device, "m68000", "Motorola MC68000")
-DEFINE_DEVICE_TYPE(M68301, m68301_device, "m68301", "Motorola MC68301")
DEFINE_DEVICE_TYPE(M68008, m68008_device, "m68008", "Motorola MC68008")
DEFINE_DEVICE_TYPE(M68008PLCC, m68008plcc_device, "m68008plcc", "Motorola MC68008PLCC")
DEFINE_DEVICE_TYPE(M68010, m68010_device, "m68010", "Motorola MC68010")
@@ -2405,21 +2399,6 @@ m68000_device::m68000_device(const machine_config &mconfig, const char *tag, dev
-m68301_device::m68301_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : m68000_base_device(mconfig, tag, owner, clock, M68301, 16,24)
-{
-}
-
-
-void m68301_device::device_start()
-{
- init_cpu_m68000();
-}
-
-
-
-
-
/* m68008_device */
diff --git a/src/devices/cpu/m68000/m68kmmu.h b/src/devices/cpu/m68000/m68kmmu.h
index 114d89ff5c1..99481039b0f 100644
--- a/src/devices/cpu/m68000/m68kmmu.h
+++ b/src/devices/cpu/m68000/m68kmmu.h
@@ -33,7 +33,7 @@ static constexpr uint32_t M68K_MMU_DF_WP = 0x00000004;
static constexpr uint32_t M68K_MMU_DF_USED = 0x00000008;
static constexpr uint32_t M68K_MMU_DF_MODIFIED = 0x00000010;
static constexpr uint32_t M68K_MMU_DF_CI = 0x00000040;
-static constexpr uint32_t M68K_MMU_DF_SUPERVISOR = 0000000100;
+static constexpr uint32_t M68K_MMU_DF_SUPERVISOR = 0x00000100;
static constexpr uint32_t M68K_MMU_DF_ADDR_MASK = 0xfffffff0;
static constexpr uint32_t M68K_MMU_DF_IND_ADDR_MASK = 0xfffffffc;
diff --git a/src/devices/cpu/mcs51/mcs51.cpp b/src/devices/cpu/mcs51/mcs51.cpp
index 60d39a25139..c307c19a611 100644
--- a/src/devices/cpu/mcs51/mcs51.cpp
+++ b/src/devices/cpu/mcs51/mcs51.cpp
@@ -874,6 +874,8 @@ uint8_t mcs51_cpu_device::bit_address_r(uint8_t offset)
int distance; /* distance between bit addressable words */
/* 1 for normal bits, 8 for sfr bit addresses */
+ m_last_bit = offset;
+
//User defined bit addresses 0x20-0x2f (values are 0x0-0x7f)
if (offset < 0x80) {
distance = 1;
@@ -1358,6 +1360,8 @@ void mcs51_cpu_device::execute_op(uint8_t op)
m_recalc_parity = 0;
}
+ m_last_op = op;
+
switch( op )
{
case 0x00: nop(op); break; //NOP
@@ -1777,6 +1781,10 @@ void mcs51_cpu_device::check_irqs()
return;
}
+ // Hack to work around polling latency issue with JB INT0/INT1
+ if (m_last_op == 0x20 && ((int_vec == V_IE0 && m_last_bit == 0xb2) || (int_vec == V_IE1 && m_last_bit == 0xb3)))
+ PC = PPC + 3;
+
//Save current pc to stack, set pc to new interrupt vector
push_pc();
PC = int_vec;
@@ -2126,6 +2134,8 @@ void mcs51_cpu_device::device_start()
save_item(NAME(m_ppc));
save_item(NAME(m_pc));
+ save_item(NAME(m_last_op));
+ save_item(NAME(m_last_bit));
save_item(NAME(m_rwm) );
save_item(NAME(m_cur_irq_prio) );
save_item(NAME(m_last_line_state) );
@@ -2213,6 +2223,8 @@ void mcs51_cpu_device::device_reset()
/* Flag as NO IRQ in Progress */
m_irq_active = 0;
m_cur_irq_prio = -1;
+ m_last_op = 0;
+ m_last_bit = 0;
/* these are all defined reset states */
PC = 0;
diff --git a/src/devices/cpu/mcs51/mcs51.h b/src/devices/cpu/mcs51/mcs51.h
index e0d4028f493..bd7b6d7b085 100644
--- a/src/devices/cpu/mcs51/mcs51.h
+++ b/src/devices/cpu/mcs51/mcs51.h
@@ -122,6 +122,10 @@ protected:
uint8_t m_forced_inputs[4]; /* allow read even if configured as output */
+ // JB-related hacks
+ uint8_t m_last_op;
+ uint8_t m_last_bit;
+
int m_icount;
struct mcs51_uart
diff --git a/src/devices/cpu/ns32000/ns32000.cpp b/src/devices/cpu/ns32000/ns32000.cpp
new file mode 100644
index 00000000000..6bf23e28289
--- /dev/null
+++ b/src/devices/cpu/ns32000/ns32000.cpp
@@ -0,0 +1,160 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/*****************************************************************************
+*
+* ns32000.cpp
+*
+* NS32000 CPU family
+*
+*****************************************************************************/
+
+#include "emu.h"
+#include "ns32000.h"
+#include "ns32000dasm.h"
+#include "debugger.h"
+
+//**************************************************************************
+// DEVICE INTERFACE
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(NS32008, ns32008_cpu_device, "ns32008", "National Semiconductor NS32008")
+DEFINE_DEVICE_TYPE(NS32016, ns32016_cpu_device, "ns32016", "National Semiconductor NS32016")
+DEFINE_DEVICE_TYPE(NS32032, ns32032_cpu_device, "ns32032", "National Semiconductor NS32032")
+
+
+//-------------------------------------------------
+// ns32000_cpu_device - constructor
+//-------------------------------------------------
+
+ns32000_cpu_device::ns32000_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int databits, int addrbits)
+ : cpu_device(mconfig, type, tag, owner, clock)
+ , m_program_config("program", ENDIANNESS_LITTLE, databits, addrbits, 0)
+ , m_icount(0)
+{
+}
+
+ns32008_cpu_device::ns32008_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : ns32000_cpu_device(mconfig, NS32008, tag, owner, clock, 8, 24)
+{
+}
+
+ns32016_cpu_device::ns32016_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : ns32000_cpu_device(mconfig, NS32016, tag, owner, clock, 16, 24)
+{
+}
+
+ns32032_cpu_device::ns32032_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : ns32000_cpu_device(mconfig, NS32032, tag, owner, clock, 32, 24)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void ns32000_cpu_device::device_start()
+{
+ set_icountptr(m_icount);
+
+ save_item(NAME(m_pc));
+ save_item(NAME(m_r));
+ save_item(NAME(m_f));
+
+ state_add(STATE_GENPC, "GENPC", m_pc).noshow();
+ state_add(STATE_GENPCBASE, "CURPC", m_pc).noshow();
+
+ // dedicated registers
+ state_add(NS32000_PC, "PC", m_pc);
+ state_add(NS32000_SB, "SB", m_sb);
+ state_add(NS32000_FP, "FP", m_fp);
+ state_add(NS32000_SP1, "SP1", m_sp1);
+ state_add(NS32000_SP0, "SP0", m_sp0);
+ state_add(NS32000_INTBASE, "INTBASE", m_intbase);
+ state_add(NS32000_PSR, "PSR", m_psr);
+ state_add(NS32000_MOD, "MOD", m_mod);
+
+ // general registers
+ for (unsigned i = 0; i < 8; i++)
+ state_add(NS32000_R0 + i, util::string_format("R%d", i).c_str(), m_r[i]);
+
+ // floating point registers
+ //for (unsigned i = 0; i < 8; i++)
+ // state_add(NS32000_R7 + i, util::string_format("F%d", i).c_str(), m_f[i]);
+
+ // set our instruction counter
+ //set_icountptr(m_icount);
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void ns32000_cpu_device::device_reset()
+{
+ m_nmi_line = false;
+ m_irq_line = false;
+
+ m_pc = 0;
+}
+
+//-------------------------------------------------
+// execute_run - execute a timeslice's worth of
+// opcodes
+//-------------------------------------------------
+
+void ns32000_cpu_device::execute_run()
+{
+ while (m_icount > 0)
+ {
+ debugger_instruction_hook(m_pc);
+
+ m_icount--;
+ }
+}
+
+//-------------------------------------------------
+// execute_set_input - act on a changed input/
+// interrupt line
+//-------------------------------------------------
+
+void ns32000_cpu_device::execute_set_input(int inputnum, int state)
+{
+ switch (inputnum)
+ {
+ case INPUT_LINE_NMI:
+ // NMI is edge triggered
+ m_nmi_line = m_nmi_line || (state == ASSERT_LINE);
+ break;
+
+ case INPUT_LINE_IRQ0:
+ // IRQ is line triggered
+ m_irq_line = state == ASSERT_LINE;
+ break;
+ }
+}
+
+//-------------------------------------------------
+// memory_space_config - return the configuration
+// of the specified address space, or nullptr if
+// the space doesn't exist
+//-------------------------------------------------
+
+device_memory_interface::space_config_vector ns32000_cpu_device::memory_space_config() const
+{
+ return space_config_vector{ std::make_pair(AS_PROGRAM, &m_program_config) };
+}
+
+bool ns32000_cpu_device::memory_translate(int spacenum, int intention, offs_t &address)
+{
+ return true;
+}
+
+//-------------------------------------------------
+// disassemble - call the disassembly
+// helper function
+//-------------------------------------------------
+
+std::unique_ptr<util::disasm_interface> ns32000_cpu_device::create_disassembler()
+{
+ return std::make_unique<ns32000_disassembler>();
+}
diff --git a/src/devices/cpu/ns32000/ns32000.h b/src/devices/cpu/ns32000/ns32000.h
new file mode 100644
index 00000000000..7b17cafba99
--- /dev/null
+++ b/src/devices/cpu/ns32000/ns32000.h
@@ -0,0 +1,149 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/*****************************************************************************
+*
+* ns32000.h
+*
+* NS32000 CPU family
+*
+*****************************************************************************/
+
+#ifndef MAME_CPU_NS32016_NS32016_H
+#define MAME_CPU_NS32016_NS32016_H
+
+#pragma once
+
+
+/***********************************************************************
+ CONSTANTS
+***********************************************************************/
+
+
+
+/***********************************************************************
+ TYPE DEFINITIONS
+***********************************************************************/
+
+class ns32000_cpu_device : public cpu_device
+{
+public:
+ // construction/destruction
+ ns32000_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ ns32000_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int databits, int addrbits);
+
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ // device_execute_interface overrides
+ virtual u32 execute_min_cycles() const override { return 1; }
+ virtual u32 execute_max_cycles() const override { return 6; }
+ virtual u32 execute_input_lines() const override { return 2; }
+ virtual void execute_run() override;
+ virtual void execute_set_input(int inputnum, int state) override;
+ virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == INPUT_LINE_NMI; }
+
+
+ // device_memory_interface overrides
+ virtual space_config_vector memory_space_config() const override;
+ virtual bool memory_translate(int spacenum, int intention, offs_t &address) override;
+
+ // device_disasm_interface overrides
+ virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
+
+ // addressing modes
+ enum
+ {
+ ADDRESSING_MODE_REGISTER_0 = 0,
+ ADDRESSING_MODE_REGISTER_1,
+ ADDRESSING_MODE_REGISTER_2,
+ ADDRESSING_MODE_REGISTER_3,
+ ADDRESSING_MODE_REGISTER_4,
+ ADDRESSING_MODE_REGISTER_5,
+ ADDRESSING_MODE_REGISTER_6,
+ ADDRESSING_MODE_REGISTER_7,
+ ADDRESSING_MODE_REGISTER_0_RELATIVE,
+ ADDRESSING_MODE_REGISTER_1_RELATIVE,
+ ADDRESSING_MODE_REGISTER_2_RELATIVE,
+ ADDRESSING_MODE_REGISTER_3_RELATIVE,
+ ADDRESSING_MODE_REGISTER_4_RELATIVE,
+ ADDRESSING_MODE_REGISTER_5_RELATIVE,
+ ADDRESSING_MODE_REGISTER_6_RELATIVE,
+ ADDRESSING_MODE_REGISTER_7_RELATIVE,
+ ADDRESSING_MODE_FRAME_MEMORY_RELATIVE,
+ ADDRESSING_MODE_STACK_MEMORY_RELATIVE,
+ ADDRESSING_MODE_STATIC_MEMORY_RELATIVE,
+ ADDRESSING_MODE_RESERVED,
+ ADDRESSING_MODE_IMMEDIATE,
+ ADDRESSING_MODE_ABSOLUTE,
+ ADDRESSING_MODE_EXTERNAL,
+ ADDRESSING_MODE_TOP_OF_STACK,
+ ADDRESSING_MODE_FRAME_MEMORY,
+ ADDRESSING_MODE_STACK_MEMORY,
+ ADDRESSING_MODE_STATIC_MEMORY,
+ ADDRESSING_MODE_PROGRAM_MEMORY,
+ ADDRESSING_MODE_INDEX_BYTES,
+ ADDRESSING_MODE_INDEX_WORDS,
+ ADDRESSING_MODE_INDEX_DOUBLE_WORDS,
+ ADDRESSING_MODE_INDEX_QUAD_WORDS,
+ };
+
+ // registers
+ enum
+ {
+ NS32000_PC = 1,
+ NS32000_SB, NS32000_FP, NS32000_SP1, NS32000_SP0, NS32000_INTBASE, NS32000_PSR, NS32000_MOD,
+ NS32000_R0, NS32000_R1, NS32000_R2, NS32000_R3, NS32000_R4, NS32000_R5, NS32000_R6, NS32000_R7,
+ };
+
+private:
+ // configuration
+ address_space_config m_program_config;
+
+ // emulation state
+ int m_icount;
+
+ u32 m_pc;
+ u32 m_sb;
+ u32 m_fp;
+ u32 m_sp1;
+ u32 m_sp0;
+ u32 m_intbase;
+ u32 m_psr;
+ u32 m_mod;
+ u32 m_r[8];
+ u32 m_f[8];
+
+ u8 m_irq_line;
+ u8 m_nmi_line;
+};
+
+class ns32008_cpu_device : public ns32000_cpu_device
+{
+public:
+ ns32008_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+};
+
+class ns32016_cpu_device : public ns32000_cpu_device
+{
+public:
+ ns32016_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+};
+
+class ns32032_cpu_device : public ns32000_cpu_device
+{
+public:
+ ns32032_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+};
+
+/***********************************************************************
+ DEVICE TYPE DECLARATIONS
+***********************************************************************/
+
+DECLARE_DEVICE_TYPE(NS32008, ns32008_cpu_device)
+DECLARE_DEVICE_TYPE(NS32016, ns32016_cpu_device)
+DECLARE_DEVICE_TYPE(NS32032, ns32032_cpu_device)
+
+#endif // MAME_CPU_NS32016_NS32016_H
diff --git a/src/devices/cpu/ns32000/ns32000dasm.cpp b/src/devices/cpu/ns32000/ns32000dasm.cpp
new file mode 100644
index 00000000000..8bc25f48c60
--- /dev/null
+++ b/src/devices/cpu/ns32000/ns32000dasm.cpp
@@ -0,0 +1,835 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/*****************************************************************************
+*
+* ns32000dasm.cpp
+*
+* NS32000 CPU Disassembly
+*
+*****************************************************************************/
+
+#include "emu.h"
+#include "ns32000dasm.h"
+
+// instruction field extraction
+#define Format0cond(x) ((x >> 4) & 0x0f)
+
+#define Format1op(x) ((x >> 4) & 0x0f)
+
+#define Format2i(x) ((x >> 0) & 0x03)
+#define Format2op(x) ((x >> 4) & 0x07)
+#define Format2short(x) ((x >> 7) & 0x0f)
+#define Format2gen(x) ((x >> 11) & 0x1f)
+
+#define Format3i(x) ((x >> 0) & 0x03)
+#define Format3op(x) ((x >> 7) & 0x0f)
+#define Format3gen(x) ((x >> 11) & 0x1f)
+
+#define Format4i(x) ((x >> 0) & 0x03)
+#define Format4op(x) ((x >> 2) & 0x0f)
+#define Format4gen2(x) ((x >> 6) & 0x1f)
+#define Format4gen1(x) ((x >> 11) & 0x1f)
+
+#define Format5i(x) ((x >> 8) & 0x03)
+#define Format5op(x) ((x >> 10) & 0x07)
+#define Format5short(x) ((x >> 15) & 0x0f)
+
+#define Format6i(x) ((x >> 8) & 0x03)
+#define Format6op(x) ((x >> 10) & 0x0f)
+#define Format6gen2(x) ((x >> 14) & 0x1f)
+#define Format6gen1(x) ((x >> 19) & 0x1f)
+
+#define Format7i(x) ((x >> 8) & 0x03)
+#define Format7op(x) ((x >> 10) & 0x0f)
+#define Format7gen2(x) ((x >> 14) & 0x1f)
+#define Format7gen1(x) ((x >> 19) & 0x1f)
+
+#define Format8i(x) ((x >> 8) & 0x03)
+#define Format8op(x) (((x >> 8) & 0x04) | ((x >> 6) & 0x03))
+#define Format8reg(x) ((x >> 11) & 0x07)
+#define Format8gen2(x) ((x >> 14) & 0x1f)
+#define Format8gen1(x) ((x >> 19) & 0x1f)
+
+#define Format9i(x) ((x >> 8) & 0x03)
+#define Format9f(x) ((x >> 10) & 0x01)
+#define Format9op(x) ((x >> 11) & 0x07)
+#define Format9gen2(x) ((x >> 14) & 0x1f)
+#define Format9gen1(x) ((x >> 19) & 0x1f)
+
+#define Format11f(x) ((x >> 8) & 0x01)
+#define Format11op(x) ((x >> 10) & 0x0f)
+#define Format11gen2(x) ((x >> 14) & 0x1f)
+#define Format11gen1(x) ((x >> 19) & 0x1f)
+
+#define Format14i(x) ((x >> 8) & 0x01)
+#define Format14op(x) ((x >> 10) & 0x0f)
+#define Format14short(x) ((x >> 15) & 0x1f)
+#define Format14gen1(x) ((x >> 19) & 0x1f)
+
+// instructions
+const ns32000_disassembler::NS32000_OPCODE ns32000_disassembler::format0_op[1] =
+{
+ { "Bcond", DISP, 0, 0, 0, 0 }
+};
+const ns32000_disassembler::NS32000_OPCODE ns32000_disassembler::format1_op[16] =
+{
+ { "BSR", DISP, 0, 0, 0, STEP_OVER },
+ { "RET", DISP, 0, 0, 0, STEP_OUT },
+ { "CXP", DISP, 0, 0, 0, STEP_OVER },
+ { "RXP", DISP, 0, 0, 0, STEP_OUT },
+ { "RETT", 0, 0, 0, 0, STEP_OUT },
+ { "RETI", DISP, 0, 0, 0, STEP_OUT },
+ { "SAVE", IMM, 0, 0, 0, 0 },
+ { "RESTORE", IMM, 0, 0, 0, 0 },
+ { "ENTER", IMM, DISP, 0, 0, 0 },
+ { "EXIT", IMM, 0, 0, 0, 0 },
+ { "NOP", 0, 0, 0, 0, 0 },
+ { "WAIT", 0, 0, 0, 0, 0 },
+ { "DIA", 0, 0, 0, 0, 0 },
+ { "FLAG", 0, 0, 0, 0, 0 },
+ { "SVC", 0, 0, 0, 0, 0 },
+ { "BPT", 0, 0, 0, 0, 0 },
+};
+const ns32000_disassembler::NS32000_OPCODE ns32000_disassembler::format2_op[8] =
+{
+ { "ADDQi", QUICK, GEN | RMW | I, 0, 0, 0 },
+ { "CMPQi", QUICK, GEN | READ | I, 0, 0, 0 },
+ { "SPRi", SHORT, GEN | WRITE | I, 0, 0, 0 },
+ { "Scondi", GEN | WRITE | I, 0, 0, 0, 0 },
+ { "ACBi", QUICK, GEN | RMW | I, DISP, 0, 0 },
+ { "MOVQi", QUICK, GEN | WRITE | I, 0, 0, 0 },
+ { "LPRi", SHORT, GEN | READ | I, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+};
+const ns32000_disassembler::NS32000_OPCODE ns32000_disassembler::format3_op[16] =
+{
+ { "CXPD", GEN | ADDR, 0, 0, 0, STEP_OVER },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "BICPSRi", GEN | READ | I, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "JUMP", GEN | ADDR, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "BISPSRB", GEN | READ | B, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "ADJSPi", GEN | READ | I, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "JSR", GEN | ADDR, 0, 0, 0, STEP_OVER },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "CASEi", GEN | READ | I, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+};
+const ns32000_disassembler::NS32000_OPCODE ns32000_disassembler::format4_op[16] =
+{
+ { "ADDi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 },
+ { "CMPi", GEN | READ | I, GEN | READ | I, 0, 0, 0 },
+ { "BICi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "ADDCi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 },
+ { "MOVi", GEN | READ | I, GEN | WRITE | I, 0, 0, 0 },
+ { "ORi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "SUBi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 },
+ { "ADDR", GEN | ADDR, GEN | WRITE | D, 0, 0, 0 },
+ { "ANDi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "SUBCi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 },
+ { "TBITi", GEN | READ | I, GEN | REGADDR, 0, 0, 0 },
+ { "XORi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+};
+const ns32000_disassembler::NS32000_OPCODE ns32000_disassembler::format5_op[16] =
+{
+ { "MOVSi", OPTIONS, 0, 0, 0, 0 },
+ { "CMPSi", OPTIONS, 0, 0, 0, 0 },
+ { "SETCFG", SHORT, 0, 0, 0, 0 },
+ { "SKPSi", OPTIONS, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+};
+const ns32000_disassembler::NS32000_OPCODE ns32000_disassembler::format6_op[16] =
+{
+ { "ROTi", GEN | READ | B, GEN | RMW | I, 0, 0, 0 },
+ { "ASHi", GEN | READ | B, GEN | RMW | I, 0, 0, 0 },
+ { "CBITi", GEN | READ | I, GEN | REGADDR, 0, 0, 0 },
+ { "CBITIi", GEN | READ | I, GEN | REGADDR, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "LSHi", GEN | READ | B, GEN | RMW | I, 0, 0, 0 },
+ { "SBITi", GEN | READ | I, GEN | REGADDR, 0, 0, 0 },
+ { "SBITIi", GEN | READ | I, GEN | REGADDR, 0, 0, 0 },
+ { "NEGi", GEN | READ | I, GEN | WRITE | I, 0, 0, 0 },
+ { "NOTi", GEN | READ | I, GEN | WRITE | I, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "SUBPi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 },
+ { "ABSi", GEN | READ | I, GEN | READ | I, 0, 0, 0 },
+ { "COM", GEN | READ | I, GEN | WRITE | I, 0, 0, 0 },
+ { "IBITi", GEN | READ | I, GEN | REGADDR, 0, 0, 0 },
+ { "ADDPi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 },
+};
+const ns32000_disassembler::NS32000_OPCODE ns32000_disassembler::format7_op[16] =
+{
+ { "MOVMi", GEN | ADDR, GEN | ADDR, DISP, 0, 0 },
+ { "CMPMi", GEN | ADDR, GEN | ADDR, DISP, 0, 0 },
+ { "INSSi", GEN | READ | I, GEN | REGADDR, IMM, 0, 0 },
+ { "EXTSi", GEN | REGADDR, GEN | WRITE | I, IMM, 0, 0 },
+ { "MOVXBW", GEN | READ | B, GEN | WRITE | W, 0, 0, 0 },
+ { "MOVZBW", GEN | READ | B, GEN | WRITE | W, 0, 0, 0 },
+ { "MOVZiD", GEN | READ | I, GEN | WRITE | D, 0, 0, 0 },
+ { "MOVXiD", GEN | READ | I, GEN | WRITE | D, 0, 0, 0 },
+ { "MULi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 },
+ { "MEIi", GEN | READ | I, GEN | RMW | I2, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "DEIi", GEN | READ | I, GEN | RMW | I2, 0, 0, 0 },
+ { "QUOi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 },
+ { "REMi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 },
+ { "MODi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 },
+ { "DIVi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 },
+};
+const ns32000_disassembler::NS32000_OPCODE ns32000_disassembler::format8_op[] =
+{
+ { "EXTi", REG, GEN | REGADDR, GEN | WRITE | I, DISP, 0 },
+ { "CVTP", REG, GEN | ADDR, GEN | WRITE | D, 0, 0 },
+ { "INSi", REG, GEN | READ | I, GEN | REGADDR, DISP, 0 },
+ { "CHECKi", REG, GEN | ADDR, GEN | READ | I, 0, 0 },
+ { "INDEXi", REG, GEN | READ | I, GEN | READ | I, 0, 0 },
+ { "FFSi", GEN | READ | I, GEN | RMW | B, 0, 0, 0 },
+ { "MOVSUi", GEN | ADDR, GEN | ADDR, 0, 0, 0 },
+ { "MOVUSi", GEN | ADDR, GEN | ADDR, 0, 0, 0 }
+};
+const ns32000_disassembler::NS32000_OPCODE ns32000_disassembler::format9_op[] =
+{
+ { "MOVif", GEN | READ | I, GEN | WRITE | F, 0, 0, 0 },
+ { "LFSR", GEN | READ | D, 0, 0, 0, 0 },
+ { "MOVLF", GEN | READ | L, GEN | WRITE | F, 0, 0, 0 },
+ { "MOVFL", GEN | READ | F, GEN | WRITE | L, 0, 0, 0 },
+ { "ROUNDfi", GEN | READ | F, GEN | WRITE | I, 0, 0, 0 },
+ { "TRUNCfi", GEN | READ | F, GEN | WRITE | I, 0, 0, 0 },
+ { "SFSR", GEN | WRITE | D, 0, 0, 0, 0 },
+ { "FLOORfi", GEN | READ | F, GEN | WRITE | I, 0, 0, 0 },
+};
+const ns32000_disassembler::NS32000_OPCODE ns32000_disassembler::format11_op[] =
+{
+ { "ADDf", GEN | READ | F, GEN | RMW | F, 0, 0, 0 },
+ { "MOVf", GEN | READ | F, GEN | WRITE | F, 0, 0, 0 },
+ { "CMPf", GEN | READ | F, GEN | READ | F, 0, 0, 0 }, // POLYf
+ { "Trap (SLAVE)", 0, 0, 0, 0, 0 }, // DOTf
+ { "SUBf", GEN | READ | F, GEN | RMW | F, 0, 0, 0 }, // SCALBf
+ { "NEGf", GEN | READ | F, GEN | WRITE | F, 0, 0, 0 }, // LOGBf
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "DIVf", GEN | READ | F, GEN | RMW | F, 0, 0, 0 },
+ { "Trap (SLAVE)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "MULf", GEN | READ | F, GEN | RMW | F, 0, 0, 0 },
+ { "ABSf", GEN | READ | F, GEN | READ | F, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+};
+const ns32000_disassembler::NS32000_OPCODE ns32000_disassembler::format14_op[] =
+{
+ { "RDVAL", GEN | ADDR, 0, 0, 0, 0 },
+ { "WRVAL", GEN | ADDR, 0, 0, 0, 0 },
+ { "LMR", SHORT, GEN | READ | D, 0, 0, 0 },
+ { "SMR", SHORT, GEN | WRITE | D, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 }, // CINV
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+ { "Trap (UND)", 0, 0, 0, 0, 0 },
+};
+
+
+const char *const ns32000_disassembler::Format0[] =
+{
+ "Bcond"
+};
+const char *const ns32000_disassembler::Format1[] =
+{
+ "BSR", "RET", "CXP", "RXP", "RETT", "RETI", "SAVE", "RESTORE", "ENTER", "EXIT", "NOP", "WAIT", "DIA", "FLAG", "SVC", "BPT"
+};
+const char *const ns32000_disassembler::Format2[] =
+{
+ "ADDQi", "CMPQi", "SPRi", "Scondi", "ACBi", "MOVQi", "LPRi"
+};
+const char *const ns32000_disassembler::Format3[] =
+{
+ "CXPD", "Trap (UND)", "BICPSR", "Trap (UND)", "JUMP", "Trap (UND)", "BISPSR", "Trap (UND)", "Trap (UND)", "Trap (UND)", "ADJSPi", "Trap (UND)", "JSR", "Trap (UND)", "CASEi", "Trap (UND)"
+};
+const char *const ns32000_disassembler::Format4[] =
+{
+ "ADDi", "CMPi", "BICi", "Trap (UND)", "ADDCi", "MOVi", "ORi", "Trap (UND)", "SUBi", "ADDR", "ANDi", "Trap (UND)", "SUBCi", "TBITi", "XORi", "Trap (UND)"
+};
+const char *const ns32000_disassembler::Format5[] =
+{
+ "MOVSi", "CMPSi", "SETCFG", "SKPSi", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)"
+};
+const char *const ns32000_disassembler::Format6[] =
+{
+ "ROTi", "ASHi", "CBITi", "CBITIi", "Trap (UND)", "LSHi", "SBITi", "SBITIi", "NEGi", "NOTi", "Trap (UND)", "SUBPi", "ABSi", "COM", "IBITi", "ADDPi"
+};
+const char *const ns32000_disassembler::Format7[] =
+{
+ "MOVMi", "CMPMi", "INSSi", "EXTSi", "MOVXBW", "MOVZBW", "MOVZiD", "MOVXiD", "MULi", "MEIi", "Trap (UND)", "DEIi", "QUOi", "REMi", "MODi", "DIVi"
+};
+const char *const ns32000_disassembler::Format8[] =
+{
+ "EXTi", "CVTP", "INSi", "CHECKi", "INDEXi", "FFSi", "MOVSUi", "MOVUSi"
+};
+const char *const ns32000_disassembler::Format9[] =
+{
+ "MOVif", "LFSR", "MOVLF", "MOVFL", "ROUNDfi", "TRUNCfi", "SFSR", "FLOORfi"
+};
+const char *const ns32000_disassembler::Format11[] =
+{
+ "ADDf", "MOVf", "CMPf", "Trap (SLAVE)", "SUBf", "NEGf", "Trap (UND)", "Trap (UND)", "DIVf", "Trap (SLAVE)", "Trap (UND)", "Trap (UND)", "MULf", "ABSf", "Trap (UND)", "Trap (UND)"
+};
+const char *const ns32000_disassembler::Format14[] =
+{
+ "RDVAL", "WRVAL", "LMR", "SMR", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)"
+};
+
+// types
+const char *const ns32000_disassembler::iType[] =
+{
+ "B", "W", " ", "D"
+};
+const char *const ns32000_disassembler::fType[] =
+{
+ "L", "F"
+};
+const char *const ns32000_disassembler::cType[] =
+{
+ "Q", "D"
+};
+
+// index byte sizes
+const char *const ns32000_disassembler::indexSize[] =
+{
+ "B", "W", "D", "Q"
+};
+
+// short codes
+const char *const ns32000_disassembler::cond[] =
+{
+ "EQ", "NE", "CS", "CC", "HI", "LS", "GT", "LE", "FS", "FC", "LO", "HS", "LT", "GE", "R", "N"
+};
+const char *const ns32000_disassembler::areg[] =
+{
+ "US", "(reserved)", "(reserved)", "(reserved)", "(reserved)", "(reserved)", "(reserved)", "(reserved)", "FP", "SP", "SB", "(reserved)", "(reserved)", "PSR", "INTBASE", "MOD"
+};
+const char *const ns32000_disassembler::mreg[] =
+{
+ "BPR0", "BPR1", "(reserved)", "(reserved)", "(reserved)", "(reserved)", "(reserved)", "(reserved)", "(reserved)", "(reserved)", "MSR", "BCNT", "PTB0", "PTB1", "(reserved)", "EIA"
+};
+
+// register names
+const char *const ns32000_disassembler::R[] =
+{
+ "R0", "R1", "R2", "R3", "R4", "R5", "R6", "R7"
+};
+const char *const ns32000_disassembler::M[] =
+{
+ "FP", "SP", "SB"
+};
+const char *const ns32000_disassembler::PR[] =
+{
+ "UPSR", "DCR", "BPC", "DSR", "CAR", "", "", "", "FP", "SP", "SB", "USP", "CFG", "PSR", "INTBASE", "MOD"
+};
+
+int8_t ns32000_disassembler::short2int(uint8_t val)
+{
+ return (val & 0x08) ? val | 0xf0 : val;
+}
+
+std::string ns32000_disassembler::mnemonic_index(std::string form, std::string itype, std::string ftype)
+{
+ if (itype.size() && form.find('i') != std::string::npos)
+ form.replace(form.find('i'), 1, itype);
+ if (ftype.size() && form.find('f') != std::string::npos)
+ form.replace(form.find('f'), 1, ftype);
+ return form;
+}
+
+uint8_t ns32000_disassembler::opcode_format(uint8_t byte)
+{
+ switch (byte & 0x0f)
+ {
+ case 0x0a: return 0;
+ case 0x02: return 1;
+ case 0x0c:
+ case 0x0d:
+ case 0x0f:
+ if ((byte & 0x70) != 0x70)
+ return 2;
+ else
+ return 3;
+ }
+
+ if ((byte & 0x03) != 0x02) return 4;
+
+ switch (byte)
+ {
+ case 0x0e: return 5;
+ case 0x4e: return 6;
+ case 0xce: return 7;
+ case 0x2e:
+ case 0x6e:
+ case 0xae:
+ case 0xee: return 8;
+ case 0x3e: return 9;
+ case 0x7e: return 10;
+ case 0xbe: return 11;
+ case 0xfe: return 12;
+ case 0x9e: return 13;
+ case 0x1e: return 14;
+ }
+
+ return 99; /* unknown format */
+}
+
+inline std::string ns32000_disassembler::get_option_list(uint8_t cfg)
+{
+ std::string option_list;
+
+ option_list.append("[");
+ if (BIT(cfg, 0)) option_list.append("I,");
+ if (BIT(cfg, 1)) option_list.append("F,");
+ if (BIT(cfg, 2)) option_list.append("M,");
+ if (BIT(cfg, 3)) option_list.append("C,");
+ if (option_list.back() == ',') option_list.pop_back();
+ option_list.append("]");
+
+ return option_list;
+}
+
+inline std::string ns32000_disassembler::get_options(uint8_t opts)
+{
+ std::string options;
+
+ options.append(" ");
+ if ((opts & 0x02) == 0x02) options.append("B,");
+ if ((opts & 0x04) == 0x04) options.append("W,");
+ if ((opts & 0x0c) == 0x0c) options.append("U,");
+ if (options.back() == ',') options.pop_back();
+
+ return options;
+}
+
+inline int32_t ns32000_disassembler::get_disp(offs_t &pc, const data_buffer &opcodes)
+{
+ /* displacement can be upto 3 bytes */
+ uint32_t disp = bitswap<32>(opcodes.r32(pc), 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8, 23, 22, 21, 20, 19, 18, 17, 16, 31, 30, 29, 28, 27, 26, 25, 24);
+
+ switch ((disp >> 29) & 0x07)
+ {
+ case 0: case 1: /* 7 bit positive */
+ disp = (disp >> 24);
+ pc += 1;
+ break;
+
+ case 2: case 3: /* 7 bit negative */
+ disp = (disp >> 24) | 0xffffff80;
+ pc += 1;
+ break;
+
+ case 4: /* 14 bit positive */
+ disp = (disp >> 16) & 0x3fff;
+ pc += 2;
+ break;
+
+ case 5: /* 14 bit negative */
+ disp = (disp >> 16) | 0xffffc000;
+ pc += 2;
+ break;
+
+ case 6: /* 30 bit positive */
+ disp = disp & 0x3fffffff;
+ pc += 4;
+ break;
+
+ case 7: /* 30 bit negative */
+ pc += 4;
+ break;
+ }
+
+ return disp;
+}
+
+inline std::string ns32000_disassembler::get_reg_list(offs_t &pc, const data_buffer &opcodes, bool reverse)
+{
+ std::string reg_list;
+
+ uint8_t byte = opcodes.r8(pc++);
+
+ reg_list.append("[");
+ for (int i = 0; i < 8; i++)
+ {
+ if (BIT(byte, i)) reg_list.append(R[reverse ? (~i & 7) : (i & 7)]).append(",");
+ }
+ if (reg_list.back() == ',') reg_list.pop_back();
+ reg_list.append("]");
+
+ return reg_list;
+}
+
+void ns32000_disassembler::stream_gen(std::ostream &stream, u8 gen_addr, u8 op_len, offs_t &pc, const data_buffer &opcodes)
+{
+ uint8_t index_byte;
+ int32_t disp1, disp2;
+
+ switch (gen_addr)
+ {
+ case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07:
+ /* Register */
+ util::stream_format(stream, "%s", R[gen_addr & 0x07]);
+ break;
+ case 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f:
+ /* Register Relative */
+ disp1 = get_disp(pc, opcodes);
+ util::stream_format(stream, "%+d(%s)", disp1, R[gen_addr & 0x07]);
+ break;
+ case 0x10: case 0x11: case 0x12:
+ /* Memory Relative */
+ disp1 = get_disp(pc, opcodes);
+ disp2 = get_disp(pc, opcodes);
+ util::stream_format(stream, "#X%02X(#X%02X(%s))", disp2, disp1, M[gen_addr & 0x03]);
+ break;
+ case 0x13:
+ /* Reserved */
+ util::stream_format(stream, "(reserved)");
+ break;
+ case 0x14:
+ /* Immediate */
+ disp1 = bitswap<32>(opcodes.r32(pc), 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8, 23, 22, 21, 20, 19, 18, 17, 16, 31, 30, 29, 28, 27, 26, 25, 24);
+ util::stream_format(stream, "#X%02X", (op_len == 0 ? (disp1 >> 24) : (op_len == 1 ? (disp1 >> 16) : disp1)));
+ pc += op_len + 1;
+ break;
+ case 0x15:
+ /* Absolute */
+ disp1 = get_disp(pc, opcodes);
+ util::stream_format(stream, "@#X%02X", disp1);
+ break;
+ case 0x16:
+ /* External */
+ disp1 = get_disp(pc, opcodes);
+ disp2 = get_disp(pc, opcodes);
+ util::stream_format(stream, "EXT(%d)+%d", disp1, disp2);
+ break;
+ case 0x17:
+ /* Top Of Stack */
+ util::stream_format(stream, "TOS");
+ break;
+ case 0x18: case 0x19: case 0x1a:
+ /* Memory Space */
+ disp1 = get_disp(pc, opcodes);
+ util::stream_format(stream, "#X%02X(%s)", disp1, M[gen_addr & 0x03]);
+ break;
+ case 0x1b:
+ /* Memory Space */
+ disp1 = get_disp(pc, opcodes);
+ util::stream_format(stream, "#X%06X", m_base_pc + disp1);
+ break;
+ case 0x1c:
+ /* Scaled Index */
+ index_byte = opcodes.r8(pc++);
+ stream_gen(stream, index_byte >> 3, op_len, pc, opcodes);
+ util::stream_format(stream, "[%s:%c]", R[index_byte & 0x07], indexSize[gen_addr & 0x03]);
+ break;
+ }
+}
+
+offs_t ns32000_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer &params)
+{
+ uint32_t flags = SUPPORTED;
+
+ uint32_t opcode;
+ std::string mnemonic;
+ uint8_t temp8;
+
+ /* opcode can be upto 3 bytes */
+ opcode = opcodes.r32(pc);
+ m_base_pc = pc;
+
+ switch (opcode_format(opcode))
+ {
+ case 0: /* Format 0 */
+ pc += 1;
+ util::stream_format(stream, "%-8s #X%06X", std::string("B").append(cond[Format0cond(opcode)]), m_base_pc + get_disp(pc, opcodes));
+ break;
+
+ case 0x01: /* Format 1 */
+ pc += 1;
+ switch (Format1op(opcode))
+ {
+ case 0x00:
+ util::stream_format(stream, "%-8s #X%06X", Format1[Format1op(opcode)], m_base_pc + get_disp(pc, opcodes));
+ break;
+ case 0x01:
+ util::stream_format(stream, "%-8s #X%02X", Format1[Format1op(opcode)], get_disp(pc, opcodes) & 0xffffff);
+ break;
+ case 0x02:
+ util::stream_format(stream, "%-8s EXT(%d)", Format1[Format1op(opcode)], get_disp(pc, opcodes));
+ break;
+ case 0x03: case 0x04:
+ util::stream_format(stream, "%-8s #X%02X", Format1[Format1op(opcode)], get_disp(pc, opcodes) & 0xffffff);
+ break;
+ case 0x05:
+ util::stream_format(stream, "%-8s", Format1[Format1op(opcode)]);
+ break;
+ case 0x06:
+ util::stream_format(stream, "%-8s %s", Format1[Format1op(opcode)], get_reg_list(pc, opcodes, false));
+ break;
+ case 0x07: case 0x09:
+ util::stream_format(stream, "%-8s %s", Format1[Format1op(opcode)], get_reg_list(pc, opcodes, true));
+ break;
+ case 0x08:
+ util::stream_format(stream, "%-8s %s, %d", Format1[Format1op(opcode)], get_reg_list(pc, opcodes, false), get_disp(pc, opcodes));
+ break;
+ case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f:
+ util::stream_format(stream, "%-8s", Format1[Format1op(opcode)]);
+ break;
+ }
+ break;
+
+ case 0x02: /* Format 2 */
+ pc += 2;
+ mnemonic = mnemonic_index(Format2[Format2op(opcode)], iType[Format2i(opcode)], "");
+ switch (Format2op(opcode))
+ {
+ case 0x00: case 0x01: case 0x05:
+ util::stream_format(stream, "%-8s %+d, ", mnemonic, short2int(Format2short(opcode)));
+ stream_gen(stream, Format2gen(opcode), Format2i(opcode), pc, opcodes);
+ break;
+ case 0x02: case 0x06:
+ util::stream_format(stream, "%-8s %s, ", mnemonic, areg[Format2short(opcode)]);
+ stream_gen(stream, Format2gen(opcode), Format2i(opcode), pc, opcodes);
+ break;
+ case 0x03:
+ util::stream_format(stream, "%-8s ", std::string("S").append(cond[Format2short(opcode)]).append(iType[Format2i(opcode)]));
+ stream_gen(stream, Format2gen(opcode), Format2i(opcode), pc, opcodes);
+ break;
+ case 0x04:
+ util::stream_format(stream, "%-8s %+d, ", mnemonic, short2int(Format2short(opcode)));
+ stream_gen(stream, Format2gen(opcode), Format2i(opcode), pc, opcodes);
+ util::stream_format(stream, ", #X%06x", m_base_pc + get_disp(pc, opcodes));
+ break;
+ }
+ break;
+
+ case 0x03: /* Format 3 */
+ pc += 2;
+ mnemonic = mnemonic_index(Format3[Format3op(opcode)], iType[Format3i(opcode)], "");
+ switch (Format3op(opcode))
+ {
+ case 0x00: case 0x02: case 0x04: case 0x06: case 0x0a: case 0x0c: case 0x0e:
+ util::stream_format(stream, "%-8s ", mnemonic);
+ stream_gen(stream, Format3gen(opcode), Format3i(opcode), pc, opcodes);
+ break;
+ default: /* Trap */
+ util::stream_format(stream, "%-8s ", mnemonic);
+ break;
+ }
+ break;
+
+ case 0x04: /* Format 4 */
+ pc += 2;
+ mnemonic = mnemonic_index(Format4[Format4op(opcode)], iType[Format4i(opcode)], "");
+ util::stream_format(stream, "%-8s ", mnemonic);
+ stream_gen(stream, Format4gen1(opcode), Format4i(opcode), pc, opcodes);
+ util::stream_format(stream, ", ");
+ stream_gen(stream, Format4gen2(opcode), Format4i(opcode), pc, opcodes);
+ break;
+
+ case 0x05: /* Format 5 */
+ pc += 3;
+ mnemonic = mnemonic_index(Format5[Format5op(opcode)], iType[Format5i(opcode)], "");
+ switch ((opcode >> 10) & 0x0f)
+ {
+ case 0x00: case 0x01: case 0x03:
+ if (Format5short(opcode) & 0x01)
+ util::stream_format(stream, "%-8s %s", std::string(Format5[Format5op(opcode)]).append("T"), get_options(Format5short(opcode)));
+ else
+ util::stream_format(stream, "%-8s %s", mnemonic, get_options(Format5short(opcode)));
+ break;
+ case 0x02:
+ util::stream_format(stream, "%-8s %s", Format5[Format5op(opcode)], get_option_list(Format5short(opcode)));
+ break;
+ default: /* Trap */
+ util::stream_format(stream, "%-8s ", mnemonic);
+ break;
+ }
+ break;
+
+ case 0x06: /* Format 6 */
+ pc += 3;
+ mnemonic = mnemonic_index(Format6[Format6op(opcode)], iType[Format6i(opcode)], "");
+ switch ((opcode >> 10) & 0x0f)
+ {
+ case 0x00: case 0x01: case 0x02: case 0x03: case 0x05: case 0x06: case 0x07: case 0x08: case 0x09: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f:
+ util::stream_format(stream, "%-8s ", mnemonic);
+ stream_gen(stream, Format6gen1(opcode), Format6i(opcode), pc, opcodes);
+ util::stream_format(stream, ", ");
+ stream_gen(stream, Format6gen2(opcode), Format6i(opcode), pc, opcodes);
+ break;
+ default: /* Trap */
+ util::stream_format(stream, "%-8s ", mnemonic);
+ break;
+ }
+ break;
+
+ case 0x07: /* Format 7 */
+ pc += 3;
+ mnemonic = mnemonic_index(Format7[Format7op(opcode)], iType[Format7i(opcode)], "");
+ switch (Format7op(opcode))
+ {
+ case 0x00: case 0x01:
+ util::stream_format(stream, "%-8s ", mnemonic);
+ stream_gen(stream, Format7gen1(opcode), Format7i(opcode), pc, opcodes);
+ util::stream_format(stream, ", ");
+ stream_gen(stream, Format7gen2(opcode), Format7i(opcode), pc, opcodes);
+ util::stream_format(stream, ", %d", get_disp(pc, opcodes));
+ break;
+ case 0x02: case 0x03:
+ util::stream_format(stream, "%-8s ", mnemonic);
+ stream_gen(stream, Format7gen1(opcode), Format7i(opcode), pc, opcodes);
+ util::stream_format(stream, ", ");
+ stream_gen(stream, Format7gen2(opcode), Format7i(opcode), pc, opcodes);
+ temp8 = opcodes.r8(pc++);
+ util::stream_format(stream, ", %d, %d", temp8 >> 5, temp8 + 1);
+ break;
+ case 0x04: case 0x05: case 0x06: case 0x07: case 0x08: case 0x09: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f:
+ util::stream_format(stream, "%-8s ", mnemonic);
+ stream_gen(stream, Format7gen1(opcode), Format7i(opcode), pc, opcodes);
+ util::stream_format(stream, ", ");
+ stream_gen(stream, Format7gen2(opcode), Format7i(opcode), pc, opcodes);
+ break;
+ default: /* Trap */
+ util::stream_format(stream, "%-8s ", mnemonic);
+ break;
+ }
+ break;
+
+ case 0x08: /* Format 8 */
+ pc += 3;
+ mnemonic = mnemonic_index(Format8[Format8op(opcode)], iType[Format8i(opcode)], "");
+ switch (Format8op(opcode))
+ {
+ case 0x00: case 0x02:
+ util::stream_format(stream, "%-8s %s, ", mnemonic, R[Format8reg(opcode)]);
+ stream_gen(stream, Format8gen2(opcode), Format8i(opcode), pc, opcodes);
+ util::stream_format(stream, ", ");
+ stream_gen(stream, Format8gen1(opcode), Format8i(opcode), pc, opcodes);
+ util::stream_format(stream, ", %d", get_disp(pc, opcodes));
+ break;
+ case 0x01: case 0x03: case 0x04:
+ util::stream_format(stream, "%-8s %s, ", mnemonic, R[Format8reg(opcode)]);
+ stream_gen(stream, Format8gen2(opcode), Format8i(opcode), pc, opcodes);
+ util::stream_format(stream, ", ");
+ stream_gen(stream, Format8gen1(opcode), Format8i(opcode), pc, opcodes);
+ break;
+ case 0x05:
+ util::stream_format(stream, "%-8s ", mnemonic);
+ stream_gen(stream, Format8gen2(opcode), Format8i(opcode), pc, opcodes);
+ util::stream_format(stream, ", ");
+ stream_gen(stream, Format8gen1(opcode), Format8i(opcode), pc, opcodes);
+ break;
+ case 0x06:
+ if (Format8reg(opcode) == 0x01)
+ util::stream_format(stream, "%-8s ", std::string(Format8[Format8op(opcode)]).append(iType[Format8i(opcode)]));
+ else
+ util::stream_format(stream, "%-8s ", std::string(Format8[Format8op(opcode) + 1]).append(iType[Format8i(opcode)]));
+ stream_gen(stream, Format8gen2(opcode), Format8i(opcode), pc, opcodes);
+ util::stream_format(stream, ", ");
+ stream_gen(stream, Format8gen1(opcode), Format8i(opcode), pc, opcodes);
+ break;
+ }
+ break;
+
+ case 0x09: /* Format 9 */
+ pc += 3;
+ mnemonic = mnemonic_index(Format9[Format9op(opcode)], iType[Format9i(opcode)], fType[Format9f(opcode)]);
+ switch (Format9op(opcode))
+ {
+ case 0x00: case 0x02: case 0x04: case 0x05: case 0x07:
+ util::stream_format(stream, "%-8s ", mnemonic);
+ stream_gen(stream, Format9gen1(opcode), Format9i(opcode), pc, opcodes);
+ util::stream_format(stream, ", ");
+ stream_gen(stream, Format9gen2(opcode), Format9i(opcode), pc, opcodes);
+ break;
+ case 0x01: case 0x06:
+ util::stream_format(stream, "%-8s ", mnemonic);
+ stream_gen(stream, Format9gen1(opcode), Format9i(opcode), pc, opcodes);
+ break;
+ }
+ break;
+
+ case 0x0b: /* Format 11 */
+ pc += 3;
+ mnemonic = mnemonic_index(Format11[Format11op(opcode)], "", fType[Format11f(opcode)]);
+ switch (Format11op(opcode))
+ {
+ case 0x00: case 0x01: case 0x02: case 0x04: case 0x05 : case 0x08: case 0x0c : case 0x0d:
+ util::stream_format(stream, "%-8s ", mnemonic);
+ stream_gen(stream, Format11gen1(opcode), Format11f(opcode), pc, opcodes);
+ util::stream_format(stream, ",");
+ stream_gen(stream, Format11gen2(opcode), Format11f(opcode), pc, opcodes);
+ break;
+ default: /* Trap */
+ util::stream_format(stream, "%-8s ", mnemonic);
+ break;
+ }
+ break;
+
+ case 0x0a: /* Format 10 */
+ case 0x0c: /* Format 12 */
+ case 0x0d: /* Format 13 */
+ pc += 3;
+ util::stream_format(stream, "Trap (UND)");
+ break;
+
+ case 0x0e: /* Format 14 */
+ pc += 3;
+ mnemonic = mnemonic_index(Format14[Format14op(opcode)], iType[Format14i(opcode)], "");
+ switch (Format14op(opcode))
+ {
+ case 0x00: case 0x01:
+ util::stream_format(stream, "%-8s ", mnemonic);
+ stream_gen(stream, Format14gen1(opcode), Format14i(opcode), pc, opcodes);
+ break;
+ case 0x02: case 0x03:
+ util::stream_format(stream, "%-8s %s, ", mnemonic, mreg[Format14short(opcode)]);
+ stream_gen(stream, Format14gen1(opcode), Format14i(opcode), pc, opcodes);
+ break;
+ default: /* Trap */
+ util::stream_format(stream, "%-8s ", mnemonic);
+ break;
+ }
+ break;
+
+ default:
+ pc += 1;
+ util::stream_format(stream, "unknown instruction format");
+ break;
+ }
+
+ return (pc - m_base_pc) | flags;
+}
diff --git a/src/devices/cpu/ns32000/ns32000dasm.h b/src/devices/cpu/ns32000/ns32000dasm.h
new file mode 100644
index 00000000000..4cbf4cf3bda
--- /dev/null
+++ b/src/devices/cpu/ns32000/ns32000dasm.h
@@ -0,0 +1,117 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/*****************************************************************************
+*
+* ns32000dasm.cpp
+*
+* NS32000 CPU Disassembly
+*
+*****************************************************************************/
+
+#ifndef MAME_CPU_NS32000_NS32000DASM_H
+#define MAME_CPU_NS32000_NS32000DASM_H
+
+#pragma once
+
+class ns32000_disassembler : public util::disasm_interface
+{
+public:
+
+ ns32000_disassembler() = default;
+ virtual ~ns32000_disassembler() = default;
+
+ virtual u32 opcode_alignment() const override { return 1; }
+ virtual offs_t disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer &params) override;
+
+private:
+ /* implied operand attributes */
+ enum
+ {
+ REG = 16,
+ QUICK,
+ SHORT,
+ IMM,
+ DISP,
+ GEN,
+ OPTIONS,
+ };
+ /* access classes */
+ enum
+ {
+ READ = 8,
+ WRITE,
+ RMW,
+ ADDR,
+ REGADDR
+ };
+ /* length attributes */
+ enum
+ {
+ B = 0,
+ W = 1,
+ D = 3,
+ I,
+ I2,
+ F,
+ L
+ };
+ struct NS32000_OPCODE {
+ const char *mnemonic;
+ u32 operand1;
+ u32 operand;
+ u32 operand3;
+ u32 operand4;
+ offs_t dasm_flags;
+ };
+
+ static const NS32000_OPCODE format0_op[1];
+ static const NS32000_OPCODE format1_op[16];
+ static const NS32000_OPCODE format2_op[8];
+ static const NS32000_OPCODE format3_op[16];
+ static const NS32000_OPCODE format4_op[16];
+ static const NS32000_OPCODE format5_op[16];
+ static const NS32000_OPCODE format6_op[16];
+ static const NS32000_OPCODE format7_op[16];
+ static const NS32000_OPCODE format8_op[16];
+ static const NS32000_OPCODE format9_op[16];
+ static const NS32000_OPCODE format11_op[16];
+ static const NS32000_OPCODE format14_op[16];
+
+
+ static char const *const Format0[];
+ static char const *const Format1[];
+ static char const *const Format2[];
+ static char const *const Format3[];
+ static char const *const Format4[];
+ static char const *const Format5[];
+ static char const *const Format6[];
+ static char const *const Format7[];
+ static char const *const Format8[];
+ static char const *const Format9[];
+ static char const *const Format11[];
+ static char const *const Format14[];
+ static char const *const iType[];
+ static char const *const fType[];
+ static char const *const cType[];
+ static char const *const indexSize[];
+ static char const *const cond[];
+ static char const *const areg[];
+ static char const *const mreg[];
+ static char const *const R[];
+ static char const *const M[];
+ static char const *const PR[];
+
+ std::string mnemonic_index(std::string form, std::string itype, std::string ftype);
+ uint8_t opcode_format(uint8_t byte);
+ int8_t short2int(uint8_t val);
+ static inline int32_t get_disp(offs_t &pc, const data_buffer &opcodes);
+ static inline std::string get_option_list(uint8_t cfg);
+ static inline std::string get_options(uint8_t opts);
+ static inline std::string get_reg_list(offs_t &pc, const data_buffer &opcodes, bool reverse);
+
+ void stream_gen(std::ostream &stream, u8 gen_addr, u8 op_len, offs_t &pc, const data_buffer &opcodes);
+
+ u32 m_base_pc;
+};
+
+#endif
diff --git a/src/devices/cpu/tms9900/tms9900.cpp b/src/devices/cpu/tms9900/tms9900.cpp
index d1576197247..840fd5d631a 100644
--- a/src/devices/cpu/tms9900/tms9900.cpp
+++ b/src/devices/cpu/tms9900/tms9900.cpp
@@ -2167,6 +2167,7 @@ void tms99xx_device::alu_clr_swpb()
bool setstatus = true;
bool check_ov = true;
+ bool check_c = true;
switch (m_command)
{
@@ -2184,6 +2185,7 @@ void tms99xx_device::alu_clr_swpb()
// LAE
dest_new = ~src_val & 0xffff;
check_ov = false;
+ check_c = false;
break;
case NEG:
// LAECO
@@ -2226,7 +2228,7 @@ void tms99xx_device::alu_clr_swpb()
if (setstatus)
{
if (check_ov) set_status_bit(ST_OV, ((src_val & 0x8000)==sign) && ((dest_new & 0x8000)!=sign));
- set_status_bit(ST_C, (dest_new & 0x10000) != 0);
+ if (check_c) set_status_bit(ST_C, (dest_new & 0x10000) != 0);
m_current_value = dest_new & 0xffff;
compare_and_set_lae(m_current_value, 0);
}
@@ -2518,6 +2520,7 @@ void tms99xx_device::alu_shift()
uint16_t sign = 0;
uint32_t value;
int count;
+ bool check_ov = false;
switch (m_state)
{
@@ -2575,6 +2578,7 @@ void tms99xx_device::alu_shift()
case SLA:
carry = ((value & 0x8000)!=0);
value <<= 1;
+ check_ov = true;
if (carry != ((value&0x8000)!=0)) overflow = true;
break;
case SRC:
@@ -2587,7 +2591,7 @@ void tms99xx_device::alu_shift()
m_current_value = value & 0xffff;
set_status_bit(ST_C, carry);
- set_status_bit(ST_OV, overflow);
+ if (check_ov) set_status_bit(ST_OV, overflow); // only SLA
compare_and_set_lae(m_current_value, 0);
m_address = m_address_saved; // Register address
if (TRACE_STATUS) logerror("ST = %04x (val=%04x)\n", ST, m_current_value);
diff --git a/src/devices/cpu/tms9900/tms9995.cpp b/src/devices/cpu/tms9900/tms9995.cpp
index c52a6c5cc39..09509f4623e 100644
--- a/src/devices/cpu/tms9900/tms9995.cpp
+++ b/src/devices/cpu/tms9900/tms9995.cpp
@@ -3090,6 +3090,7 @@ void tms9995_device::alu_shift()
uint16_t sign = 0;
uint32_t value;
int count;
+ bool check_ov = false;
switch (m_inst_state)
{
@@ -3138,6 +3139,7 @@ void tms9995_device::alu_shift()
case SLA:
carry = ((value & 0x8000)!=0);
value <<= 1;
+ check_ov = true;
if (carry != ((value&0x8000)!=0)) overflow = true;
break;
case SRC:
@@ -3150,7 +3152,7 @@ void tms9995_device::alu_shift()
m_current_value = value & 0xffff;
set_status_bit(ST_C, carry);
- set_status_bit(ST_OV, overflow);
+ if (check_ov) set_status_bit(ST_OV, overflow); // only SLA
compare_and_set_lae(m_current_value, 0);
m_address = m_address_saved; // Register address
LOGMASKED(LOG_STATUS, "ST = %04x (val=%04x)\n", ST, m_current_value);
@@ -3168,6 +3170,7 @@ void tms9995_device::alu_single_arithm()
uint32_t src_val = m_current_value & 0x0000ffff;
uint16_t sign = 0;
bool check_ov = true;
+ bool check_c = true;
switch (m_command)
{
@@ -3218,6 +3221,7 @@ void tms9995_device::alu_single_arithm()
// LAE
dest_new = ~src_val & 0xffff;
check_ov = false;
+ check_c = false;
break;
case NEG:
// LAECO
@@ -3245,7 +3249,7 @@ void tms9995_device::alu_single_arithm()
}
if (check_ov) set_status_bit(ST_OV, ((src_val & 0x8000)==sign) && ((dest_new & 0x8000)!=sign));
- set_status_bit(ST_C, (dest_new & 0x10000) != 0);
+ if (check_c) set_status_bit(ST_C, (dest_new & 0x10000) != 0);
m_current_value = dest_new & 0xffff;
compare_and_set_lae(m_current_value, 0);
diff --git a/src/devices/imagedev/flopdrv.cpp b/src/devices/imagedev/flopdrv.cpp
index cc8f693ca84..bf42b1070ea 100644
--- a/src/devices/imagedev/flopdrv.cpp
+++ b/src/devices/imagedev/flopdrv.cpp
@@ -533,16 +533,6 @@ int floppy_get_drive_by_type(legacy_floppy_image_device *image,int ftype)
return -1;
}
-int floppy_get_count(running_machine &machine)
-{
- int cnt = 0;
- if (machine.device<legacy_floppy_image_device>(FLOPPY_0)) cnt++;
- if (machine.device<legacy_floppy_image_device>(FLOPPY_1)) cnt++;
- if (machine.device<legacy_floppy_image_device>(FLOPPY_2)) cnt++;
- if (machine.device<legacy_floppy_image_device>(FLOPPY_3)) cnt++;
- return cnt;
-}
-
/* drive select 0 */
WRITE_LINE_MEMBER( legacy_floppy_image_device::floppy_ds0_w )
diff --git a/src/devices/imagedev/flopdrv.h b/src/devices/imagedev/flopdrv.h
index 5751365260d..97ae6a77859 100644
--- a/src/devices/imagedev/flopdrv.h
+++ b/src/devices/imagedev/flopdrv.h
@@ -1,7 +1,6 @@
// license:BSD-3-Clause
// copyright-holders:Nathan Woods, Miodrag Milanovic
/* flopdrv provides simple emulation of a disc drive */
-/* the 8271, upd765 and wd179x use this */
#ifndef MAME_DEVICES_IMAGEDV_FLOPDRV_H
#define MAME_DEVICES_IMAGEDV_FLOPDRV_H
@@ -251,6 +250,5 @@ protected:
legacy_floppy_image_device *floppy_get_device(running_machine &machine,int drive);
legacy_floppy_image_device *floppy_get_device_by_type(running_machine &machine,int ftype,int drive);
int floppy_get_drive_by_type(legacy_floppy_image_device *image,int ftype);
-int floppy_get_count(running_machine &machine);
#endif // MAME_DEVICES_IMAGEDV_FLOPDRV_H
diff --git a/src/devices/machine/68307.cpp b/src/devices/machine/68307.cpp
index 3d670d40e4a..ae13e090488 100644
--- a/src/devices/machine/68307.cpp
+++ b/src/devices/machine/68307.cpp
@@ -90,6 +90,14 @@ void m68307_cpu_device::device_reset()
set_ipl(0);
}
+void m68307_cpu_device::m68k_reset_peripherals()
+{
+ m_duart->reset();
+
+ if (m_m68307MBUS) m_m68307MBUS->reset();
+ if (m_m68307TIMER) m_m68307TIMER->reset();
+}
+
/* todo: is it possible to calculate the address map based on CS when they change
and install handlers? Going through this logic for every memory access is
diff --git a/src/devices/machine/68307.h b/src/devices/machine/68307.h
index 591d0c9cced..6d5ef10b61c 100644
--- a/src/devices/machine/68307.h
+++ b/src/devices/machine/68307.h
@@ -44,6 +44,8 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 4; }
virtual uint32_t execute_max_cycles() const override { return 158; }
+ virtual void m68k_reset_peripherals() override;
+
private:
void set_ipl(int level);
DECLARE_WRITE_LINE_MEMBER(timer0_interrupt);
diff --git a/src/devices/machine/74157.cpp b/src/devices/machine/74157.cpp
index f5a68cc4465..1dc7eb1289b 100644
--- a/src/devices/machine/74157.cpp
+++ b/src/devices/machine/74157.cpp
@@ -35,7 +35,7 @@ DEFINE_DEVICE_TYPE(LS157_X2, ls157_x2_device, "ls157_x2", "74LS157 Quad 2-to-1 M
// ls157_device - constructor
//-------------------------------------------------
-ls157_device::ls157_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ls157_device::ls157_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: ls157_device(mconfig, LS157, tag, owner, clock, 0x0f)
{
}
@@ -58,7 +58,7 @@ ls157_device::ls157_device(const machine_config &mconfig, device_type type, cons
// ls157_x2_device - constructor
//-------------------------------------------------
-ls157_x2_device::ls157_x2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ls157_x2_device::ls157_x2_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: ls157_device(mconfig, LS157_X2, tag, owner, clock, 0xff)
{
}
@@ -92,7 +92,7 @@ void ls157_device::device_start()
// a_w -- write nibble to A1-A4
//-------------------------------------------------
-void ls157_device::write_a(u8 data)
+void ls157_device::a_w(u8 data)
{
m_a = data & m_data_mask;
update_output();
@@ -103,7 +103,7 @@ void ls157_device::write_a(u8 data)
// b_w -- write nibble to B1-B4
//-------------------------------------------------
-void ls157_device::write_b(u8 data)
+void ls157_device::b_w(u8 data)
{
m_b = data & m_data_mask;
update_output();
@@ -115,7 +115,7 @@ void ls157_device::write_b(u8 data)
// low nibble to B1-B4
//-------------------------------------------------
-void ls157_device::write_ab(u8 data)
+void ls157_device::ab_w(u8 data)
{
assert(m_data_mask == 0x0f);
m_a = data >> 4;
@@ -129,7 +129,7 @@ void ls157_device::write_ab(u8 data)
// low nibble to A1-A4
//-------------------------------------------------
-void ls157_device::write_ba(u8 data)
+void ls157_device::ba_w(u8 data)
{
assert(m_data_mask == 0x0f);
m_b = data >> 4;
@@ -143,7 +143,7 @@ void ls157_device::write_ba(u8 data)
// A1-A4 and write odd-numbered bits to B1-B4
//-------------------------------------------------
-void ls157_device::write_interleave(u8 data)
+void ls157_device::interleave_w(u8 data)
{
assert(m_data_mask == 0x0f);
m_b = bitswap<4>(data, 7, 5, 3, 1);
@@ -260,7 +260,7 @@ void ls157_device::update_output()
// DATA OUTPUTS
//**************************************************************************
-READ8_MEMBER(ls157_device::output_r)
+u8 ls157_device::output_r()
{
if (m_strobe)
return 0;
@@ -277,7 +277,7 @@ READ8_MEMBER(ls157_device::output_r)
DEFINE_DEVICE_TYPE(HC157, hc157_device, "hc157", "74HC157 Quad 2-to-1 Multiplexer")
-hc157_device::hc157_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+hc157_device::hc157_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: ls157_device(mconfig, HC157, tag, owner, clock, 0x0f)
{
}
@@ -289,7 +289,7 @@ hc157_device::hc157_device(const machine_config &mconfig, const char *tag, devic
DEFINE_DEVICE_TYPE(HCT157, hct157_device, "hct157", "74HCT157 Quad 2-to-1 Multiplexer")
-hct157_device::hct157_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+hct157_device::hct157_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: ls157_device(mconfig, HCT157, tag, owner, clock, 0x0f)
{
}
diff --git a/src/devices/machine/74157.h b/src/devices/machine/74157.h
index 4bd4685546c..52875cc0a76 100644
--- a/src/devices/machine/74157.h
+++ b/src/devices/machine/74157.h
@@ -42,16 +42,11 @@ public:
auto out_callback() { return m_out_cb.bind(); }
// data writes
- DECLARE_WRITE8_MEMBER(a_w) { write_a(data); }
- void write_a(u8 data);
- DECLARE_WRITE8_MEMBER(b_w) { write_b(data); }
- void write_b(u8 data);
- DECLARE_WRITE8_MEMBER(ab_w) { write_ab(data); }
- void write_ab(u8 data);
- DECLARE_WRITE8_MEMBER(ba_w) { write_ba(data); }
- void write_ba(u8 data);
- DECLARE_WRITE8_MEMBER(interleave_w) { write_interleave(data); }
- void write_interleave(u8 data);
+ void a_w(u8 data);
+ void b_w(u8 data);
+ void ab_w(u8 data);
+ void ba_w(u8 data);
+ void interleave_w(u8 data);
// data line writes
DECLARE_WRITE_LINE_MEMBER(a0_w);
@@ -68,7 +63,7 @@ public:
DECLARE_WRITE_LINE_MEMBER(strobe_w);
// output read
- DECLARE_READ8_MEMBER(output_r);
+ u8 output_r();
protected:
ls157_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 mask);
diff --git a/src/devices/machine/aic6250.cpp b/src/devices/machine/aic6250.cpp
index 769968569c8..adf90fe99b5 100644
--- a/src/devices/machine/aic6250.cpp
+++ b/src/devices/machine/aic6250.cpp
@@ -41,13 +41,14 @@
#include "logmacro.h"
-DEFINE_DEVICE_TYPE(AIC6250, aic6250_device, "aic6250", "Adaptec 6250 High-Performance SCSI Protocol Chip")
+DEFINE_DEVICE_TYPE(AIC6250, aic6250_device, "aic6250", "Adaptec AIC-6250 High-Performance SCSI Protocol Chip")
+DEFINE_DEVICE_TYPE(AIC6251A, aic6251a_device, "aic6251a", "Adaptec AIC-6251A Fast SCSI Protocol Chip")
static char const *const nscsi_phase[] = { "DATA OUT", "DATA IN", "COMMAND", "STATUS", "*", "*", "MESSAGE OUT", "MESSAGE IN" };
static char const *const aic6250_phase[] = { "DATA OUT", "*", "DATA IN", "*", "COMMAND", "MESSAGE OUT", "STATUS", "MESSAGE IN" };
-aic6250_device::aic6250_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : nscsi_device(mconfig, AIC6250, tag, owner, clock)
+aic6250_device::aic6250_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : nscsi_device(mconfig, type, tag, owner, clock)
, m_int_cb(*this)
, m_breq_cb(*this)
, m_port_a_r_cb(*this)
@@ -57,6 +58,16 @@ aic6250_device::aic6250_device(const machine_config &mconfig, const char *tag, d
{
}
+aic6250_device::aic6250_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : aic6250_device(mconfig, AIC6250, tag, owner, clock)
+{
+}
+
+aic6251a_device::aic6251a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : aic6250_device(mconfig, AIC6251A, tag, owner, clock)
+{
+}
+
void aic6250_device::map(address_map &map)
{
map(0x0, 0x0).rw(FUNC(aic6250_device::dma_count_l_r), FUNC(aic6250_device::dma_count_l_w));
diff --git a/src/devices/machine/aic6250.h b/src/devices/machine/aic6250.h
index 6dce153ca65..2a4ba02d118 100644
--- a/src/devices/machine/aic6250.h
+++ b/src/devices/machine/aic6250.h
@@ -34,6 +34,8 @@ public:
void dma16_w(u16 data);
protected:
+ aic6250_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
// standard device_interface overrides
virtual void device_start() override;
virtual void device_reset() override;
@@ -277,6 +279,13 @@ private:
util::fifo <u8, 8> m_fifo;
};
+class aic6251a_device : public aic6250_device
+{
+public:
+ aic6251a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+};
+
DECLARE_DEVICE_TYPE(AIC6250, aic6250_device)
+DECLARE_DEVICE_TYPE(AIC6251A, aic6251a_device)
#endif // MAME_MACHINE_AIC6250_H
diff --git a/src/devices/machine/f3853.cpp b/src/devices/machine/f3853.cpp
index 45511f334ab..26b06b858db 100644
--- a/src/devices/machine/f3853.cpp
+++ b/src/devices/machine/f3853.cpp
@@ -106,8 +106,9 @@ void f3851_device::device_resolve_objects()
void f3853_device::device_start()
{
// lookup table for 3851/3853 lfsr timer
+ m_value_to_cycle[0xff] = 0xff;
uint8_t reg = 0xfe; // Known to get 0xfe after 255 cycles
- for(int i = reg; i >= 0; i--)
+ for (int i = reg; i >= 0; i--)
{
m_value_to_cycle[reg] = i;
reg = reg << 1 | (BIT(reg,7) ^ BIT(reg,5) ^ BIT(reg,4) ^ BIT(reg,3) ^ 1);
@@ -189,25 +190,27 @@ IRQ_CALLBACK_MEMBER(f3853_device::int_acknowledge)
void f3853_device::timer_start(uint8_t value)
{
- attotime period = (value != 0xff) ? attotime::from_hz(clock()) * (m_value_to_cycle[value] * m_prescaler) : attotime::never;
+ attotime period = (value != 0xff) ? attotime::from_hz(clock()) * (m_prescaler * m_value_to_cycle[value]) : attotime::never;
m_timer->adjust(period);
}
TIMER_CALLBACK_MEMBER(f3853_device::timer_callback)
{
- if(m_timer_int_enable)
+ if (m_timer_int_enable)
{
m_request_flipflop = true;
set_interrupt_request_line();
}
- timer_start(0xfe);
+
+ // next timeout after 255 timer counts (prescaler doesn't reset)
+ m_timer->adjust(attotime::from_hz(clock()) * (m_prescaler * 0xff));
}
WRITE_LINE_MEMBER(f3853_device::ext_int_w)
{
- if(m_external_interrupt_line && !state && m_external_int_enable)
+ if (m_external_interrupt_line && !state && m_external_int_enable)
{
m_request_flipflop = true;
}
diff --git a/src/devices/machine/f3853.h b/src/devices/machine/f3853.h
index b880f56e9bc..762f46950fb 100644
--- a/src/devices/machine/f3853.h
+++ b/src/devices/machine/f3853.h
@@ -59,7 +59,7 @@
_I/O B0 20 |_____________| 21 DB0
F38T56 is internal in F3870
- note: STROBE is N/C on F3851
+ note: STROBE is N/C on F3851
*/
diff --git a/src/devices/machine/fdc37c665gt.cpp b/src/devices/machine/fdc37c665gt.cpp
index f2df880d2e8..2f2adb42976 100644
--- a/src/devices/machine/fdc37c665gt.cpp
+++ b/src/devices/machine/fdc37c665gt.cpp
@@ -16,11 +16,11 @@ READ8_MEMBER(fdc37c665gt_device::read)
if ((offset & 0x3f8) == 0x3f8)
{
- data = m_uart1->ins8250_r(space, offset & 7, mem_mask);
+ data = m_uart1->ins8250_r(offset & 7);
}
else if ((offset & 0x3f8) == 0x2f8)
{
- data = m_uart2->ins8250_r(space, offset & 7, mem_mask);
+ data = m_uart2->ins8250_r(offset & 7);
}
else
{
@@ -33,11 +33,11 @@ WRITE8_MEMBER(fdc37c665gt_device::write)
{
if ((offset & 0x3f8) == 0x3f8)
{
- m_uart1->ins8250_w(space, offset & 7, data, mem_mask);
+ m_uart1->ins8250_w(offset & 7, data);
}
else if ((offset & 0x3f8) == 0x2f8)
{
- m_uart2->ins8250_w(space, offset & 7, data, mem_mask);
+ m_uart2->ins8250_w(offset & 7, data);
}
else
{
diff --git a/src/devices/machine/fdc37c93x.cpp b/src/devices/machine/fdc37c93x.cpp
index 8ff5afc76d4..0d5b80f2d7d 100644
--- a/src/devices/machine/fdc37c93x.cpp
+++ b/src/devices/machine/fdc37c93x.cpp
@@ -581,12 +581,12 @@ void fdc37c93x_device::map_serial1(address_map &map)
READ8_MEMBER(fdc37c93x_device::serial1_read)
{
- return pc_serial1_comdev->ins8250_r(space, offset, mem_mask);
+ return pc_serial1_comdev->ins8250_r(offset);
}
WRITE8_MEMBER(fdc37c93x_device::serial1_write)
{
- pc_serial1_comdev->ins8250_w(space, offset, data, mem_mask);
+ pc_serial1_comdev->ins8250_w(offset, data);
}
void fdc37c93x_device::map_serial1_addresses()
@@ -610,12 +610,12 @@ void fdc37c93x_device::map_serial2(address_map &map)
READ8_MEMBER(fdc37c93x_device::serial2_read)
{
- return pc_serial2_comdev->ins8250_r(space, offset, mem_mask);
+ return pc_serial2_comdev->ins8250_r(offset);
}
WRITE8_MEMBER(fdc37c93x_device::serial2_write)
{
- pc_serial2_comdev->ins8250_w(space, offset, data, mem_mask);
+ pc_serial2_comdev->ins8250_w(offset, data);
}
void fdc37c93x_device::map_serial2_addresses()
diff --git a/src/devices/machine/gen_latch.cpp b/src/devices/machine/gen_latch.cpp
index 7f1b382e0ab..b96d39a14be 100644
--- a/src/devices/machine/gen_latch.cpp
+++ b/src/devices/machine/gen_latch.cpp
@@ -2,7 +2,7 @@
// copyright-holders:Miodrag Milanovic
/***************************************************************************
- Generic 8bit and 16 bit latch devices
+ Generic 8 bit and 16 bit latch devices
***************************************************************************/
@@ -89,14 +89,14 @@ void generic_latch_base_device::set_latch_written(bool latch_written)
}
}
-READ8_MEMBER(generic_latch_base_device::acknowledge_r)
+u8 generic_latch_base_device::acknowledge_r(address_space &space)
{
if (!machine().side_effects_disabled())
set_latch_written(false);
return space.unmap();
}
-WRITE8_MEMBER(generic_latch_base_device::acknowledge_w)
+void generic_latch_base_device::acknowledge_w(u8 data)
{
set_latch_written(false);
}
@@ -111,24 +111,24 @@ generic_latch_8_device::generic_latch_8_device(const machine_config &mconfig, co
{
}
-READ8_MEMBER( generic_latch_8_device::read )
+u8 generic_latch_8_device::read()
{
if (!has_separate_acknowledge() && !machine().side_effects_disabled())
set_latch_written(false);
return m_latched_value;
}
-WRITE8_MEMBER( generic_latch_8_device::write )
+void generic_latch_8_device::write(u8 data)
{
machine().scheduler().synchronize(timer_expired_delegate(FUNC(generic_latch_8_device::sync_callback), this), data);
}
-WRITE8_MEMBER( generic_latch_8_device::preset_w )
+void generic_latch_8_device::preset_w(u8 data)
{
- m_latched_value = 0xff;
+ m_latched_value = data;
}
-WRITE8_MEMBER( generic_latch_8_device::clear_w )
+void generic_latch_8_device::clear_w(u8 data)
{
m_latched_value = 0x00;
}
@@ -182,24 +182,24 @@ generic_latch_16_device::generic_latch_16_device(const machine_config &mconfig,
{
}
-READ16_MEMBER( generic_latch_16_device::read )
+u16 generic_latch_16_device::read()
{
if (!has_separate_acknowledge() && !machine().side_effects_disabled())
set_latch_written(false);
return m_latched_value;
}
-WRITE16_MEMBER( generic_latch_16_device::write )
+void generic_latch_16_device::write(u16 data)
{
machine().scheduler().synchronize(timer_expired_delegate(FUNC(generic_latch_16_device::sync_callback), this), data);
}
-WRITE16_MEMBER( generic_latch_16_device::preset_w )
+void generic_latch_16_device::preset_w(u16 data)
{
- m_latched_value = 0xffff;
+ m_latched_value = data;
}
-WRITE16_MEMBER( generic_latch_16_device::clear_w )
+void generic_latch_16_device::clear_w(u16 data)
{
m_latched_value = 0x0000;
}
diff --git a/src/devices/machine/gen_latch.h b/src/devices/machine/gen_latch.h
index d98bf428646..4080cbebe8d 100644
--- a/src/devices/machine/gen_latch.h
+++ b/src/devices/machine/gen_latch.h
@@ -2,7 +2,7 @@
// copyright-holders:Miodrag Milanovic
/***************************************************************************
- Generic 8bit and 16 bit latch devices
+ Generic 8 bit and 16 bit latch devices
***************************************************************************/
@@ -36,8 +36,8 @@ public:
DECLARE_READ_LINE_MEMBER(pending_r);
- DECLARE_READ8_MEMBER( acknowledge_r );
- DECLARE_WRITE8_MEMBER( acknowledge_w );
+ u8 acknowledge_r(address_space &space);
+ void acknowledge_w(u8 data = 0);
protected:
// construction/destruction
@@ -67,16 +67,14 @@ public:
// construction/destruction
generic_latch_8_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
- DECLARE_READ8_MEMBER( read );
- DECLARE_WRITE8_MEMBER( write );
+ u8 read();
+ void write(u8 data);
- DECLARE_WRITE8_MEMBER( preset_w );
- DECLARE_WRITE8_MEMBER( clear_w );
+ void preset_w(u8 data = 0xff);
+ void clear_w(u8 data = 0);
DECLARE_WRITE_LINE_MEMBER( preset );
DECLARE_WRITE_LINE_MEMBER( clear );
- void preset_w(u8 value) { m_latched_value = value; }
-
protected:
virtual void device_start() override;
@@ -95,16 +93,14 @@ public:
// construction/destruction
generic_latch_16_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
- DECLARE_READ16_MEMBER( read );
- DECLARE_WRITE16_MEMBER( write );
+ u16 read();
+ void write(u16 data);
- DECLARE_WRITE16_MEMBER( preset_w );
- DECLARE_WRITE16_MEMBER( clear_w );
+ void preset_w(u16 data = 0xffff);
+ void clear_w(u16 data = 0);
DECLARE_WRITE_LINE_MEMBER( preset );
DECLARE_WRITE_LINE_MEMBER( clear );
- void preset_w(u16 value) { m_latched_value = value; }
-
protected:
virtual void device_start() override;
diff --git a/src/devices/machine/ins8154.cpp b/src/devices/machine/ins8154.cpp
index ff1cd79906e..11943cdee2c 100644
--- a/src/devices/machine/ins8154.cpp
+++ b/src/devices/machine/ins8154.cpp
@@ -78,6 +78,7 @@ void ins8154_device::device_start()
save_item(NAME(m_mdr));
save_item(NAME(m_odra));
save_item(NAME(m_odrb));
+ save_item(NAME(m_ram));
}
@@ -97,7 +98,7 @@ void ins8154_device::device_reset()
}
-READ8_MEMBER(ins8154_device::ins8154_r)
+uint8_t ins8154_device::read_io(offs_t offset)
{
uint8_t val = 0xff;
@@ -146,7 +147,12 @@ READ8_MEMBER(ins8154_device::ins8154_r)
return val;
}
-WRITE8_MEMBER(ins8154_device::ins8154_porta_w)
+uint8_t ins8154_device::read_ram(offs_t offset)
+{
+ return m_ram[offset & 0x7f];
+}
+
+void ins8154_device::porta_w(uint8_t data)
{
m_out_a = data;
@@ -155,7 +161,7 @@ WRITE8_MEMBER(ins8154_device::ins8154_porta_w)
m_out_a_cb(offs_t(0), (data & m_odra) | (m_odra ^ 0xff));
}
-WRITE8_MEMBER(ins8154_device::ins8154_portb_w)
+void ins8154_device::portb_w(uint8_t data)
{
LOG("%s: INS8154 Write PortB %02x with odrb: %02x\n", machine().describe_context(), data, m_odrb);
m_out_b = data;
@@ -165,7 +171,7 @@ WRITE8_MEMBER(ins8154_device::ins8154_portb_w)
m_out_b_cb(offs_t(0), (data & m_odrb) | (m_odrb ^ 0xff));
}
-WRITE8_MEMBER(ins8154_device::ins8154_w)
+void ins8154_device::write_io(offs_t offset, uint8_t data)
{
if (offset > 0x24)
{
@@ -176,11 +182,11 @@ WRITE8_MEMBER(ins8154_device::ins8154_w)
switch (offset)
{
case 0x20:
- ins8154_porta_w(space, 0, data);
+ porta_w(data);
break;
case 0x21:
- ins8154_portb_w(space, 0, data);
+ portb_w(data);
break;
case 0x22:
@@ -205,12 +211,12 @@ WRITE8_MEMBER(ins8154_device::ins8154_w)
if (offset < 0x08)
{
LOGBITS("%s: INS8154 Port A set bit %02x\n", machine().describe_context(), offset & 0x07);
- ins8154_porta_w(space, 0, m_out_a |= (1 << (offset & 0x07)));
+ porta_w(m_out_a |= (1 << (offset & 0x07)));
}
else
{
LOGBITS("%s: INS8154 Port B set bit %02x\n", machine().describe_context(), offset & 0x07);
- ins8154_portb_w(space, 0, m_out_b |= (1 << (offset & 0x07)));
+ portb_w(m_out_b |= (1 << (offset & 0x07)));
}
}
else
@@ -219,14 +225,19 @@ WRITE8_MEMBER(ins8154_device::ins8154_w)
if (offset < 0x08)
{
LOGBITS("%s: INS8154 Port A clear bit %02x\n", machine().describe_context(), offset & 0x07);
- ins8154_porta_w(space, 0, m_out_a & ~(1 << (offset & 0x07)));
+ porta_w(m_out_a & ~(1 << (offset & 0x07)));
}
else
{
LOGBITS("%s: INS8154 Port B clear bit %02x\n", machine().describe_context(), offset & 0x07);
- ins8154_portb_w(space, 0, m_out_b & ~(1 << (offset & 0x07)));
+ portb_w(m_out_b & ~(1 << (offset & 0x07)));
}
}
break;
}
}
+
+void ins8154_device::write_ram(offs_t offset, uint8_t data)
+{
+ m_ram[offset & 0x7f] = data;
+}
diff --git a/src/devices/machine/ins8154.h b/src/devices/machine/ins8154.h
index 5ba94ab9cda..2ce40ec9e70 100644
--- a/src/devices/machine/ins8154.h
+++ b/src/devices/machine/ins8154.h
@@ -47,11 +47,13 @@ public:
auto out_b() { return m_out_b_cb.bind(); }
auto out_irq() { return m_out_irq_cb.bind(); }
- DECLARE_READ8_MEMBER( ins8154_r );
- DECLARE_WRITE8_MEMBER( ins8154_w );
+ uint8_t read_io(offs_t offset);
+ void write_io(offs_t offset, uint8_t data);
+ uint8_t read_ram(offs_t offset);
+ void write_ram(offs_t offset, uint8_t data);
- DECLARE_WRITE8_MEMBER( ins8154_porta_w );
- DECLARE_WRITE8_MEMBER( ins8154_portb_w );
+ void porta_w(uint8_t data);
+ void portb_w(uint8_t data);
protected:
// device-level overrides
@@ -77,6 +79,9 @@ private:
uint8_t m_mdr; /* Mode Definition Register */
uint8_t m_odra; /* Output Definition Register Port A */
uint8_t m_odrb; /* Output Definition Register Port B */
+
+ /* on-board RAM */
+ uint8_t m_ram[0x80];
};
diff --git a/src/devices/machine/ins8250.cpp b/src/devices/machine/ins8250.cpp
index d127ce0e40d..d586816c511 100644
--- a/src/devices/machine/ins8250.cpp
+++ b/src/devices/machine/ins8250.cpp
@@ -107,7 +107,7 @@ DEFINE_DEVICE_TYPE(NS16450, ns16450_device, "ns16450", "National Semiconductor
DEFINE_DEVICE_TYPE(NS16550, ns16550_device, "ns16550", "National Semiconductor NS16550 UART")
DEFINE_DEVICE_TYPE(PC16552D, pc16552_device, "pc16552d", "National Semiconductor PC16552D UART")
-ins8250_uart_device::ins8250_uart_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, dev_type device_type)
+ins8250_uart_device::ins8250_uart_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, dev_type device_type)
: device_t(mconfig, type, tag, owner, clock)
, device_serial_interface(mconfig, *this)
, m_device_type(device_type)
@@ -126,22 +126,22 @@ ins8250_uart_device::ins8250_uart_device(const machine_config &mconfig, device_t
m_regs.ier = 0;
}
-ins8250_device::ins8250_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ins8250_device::ins8250_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: ins8250_uart_device(mconfig, INS8250, tag, owner, clock, dev_type::INS8250)
{
}
-ns16450_device::ns16450_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ns16450_device::ns16450_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: ins8250_uart_device(mconfig, NS16450, tag, owner, clock, dev_type::NS16450)
{
}
-ns16550_device::ns16550_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ns16550_device::ns16550_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: ins8250_uart_device(mconfig, NS16550, tag, owner, clock, dev_type::NS16550)
{
}
-pc16552_device::pc16552_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+pc16552_device::pc16552_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, PC16552D, tag, owner, clock)
{
}
@@ -159,27 +159,27 @@ void pc16552_device::device_start()
#define COM_INT_PENDING_MODEM_STATUS_REGISTER 0x0008
#define COM_INT_PENDING_CHAR_TIMEOUT 0x0011
-static constexpr uint8_t INS8250_LSR_TSRE = 0x40;
-static constexpr uint8_t INS8250_LSR_THRE = 0x20;
-static constexpr uint8_t INS8250_LSR_BI = 0x10;
-static constexpr uint8_t INS8250_LSR_FE = 0x08;
-static constexpr uint8_t INS8250_LSR_PE = 0x04;
-static constexpr uint8_t INS8250_LSR_OE = 0x02;
-static constexpr uint8_t INS8250_LSR_DR = 0x01;
-
-static constexpr uint8_t INS8250_MCR_DTR = 0x01;
-static constexpr uint8_t INS8250_MCR_RTS = 0x02;
-static constexpr uint8_t INS8250_MCR_OUT1 = 0x04;
-static constexpr uint8_t INS8250_MCR_OUT2 = 0x08;
-static constexpr uint8_t INS8250_MCR_LOOPBACK = 0x10;
-
-static constexpr uint8_t INS8250_LCR_BITCOUNT_MASK= 0x03;
-static constexpr uint8_t INS8250_LCR_2STOP_BITS = 0x04;
-//static constexpr uint8_t INS8250_LCR_PEN = 0x08;
-//static constexpr uint8_t INS8250_LCR_EVEN_PAR = 0x10;
-//static constexpr uint8_t INS8250_LCR_PARITY = 0x20;
-//static constexpr uint8_t INS8250_LCR_BREAK = 0x40;
-static constexpr uint8_t INS8250_LCR_DLAB = 0x80;
+static constexpr u8 INS8250_LSR_TSRE = 0x40;
+static constexpr u8 INS8250_LSR_THRE = 0x20;
+static constexpr u8 INS8250_LSR_BI = 0x10;
+static constexpr u8 INS8250_LSR_FE = 0x08;
+static constexpr u8 INS8250_LSR_PE = 0x04;
+static constexpr u8 INS8250_LSR_OE = 0x02;
+static constexpr u8 INS8250_LSR_DR = 0x01;
+
+static constexpr u8 INS8250_MCR_DTR = 0x01;
+static constexpr u8 INS8250_MCR_RTS = 0x02;
+static constexpr u8 INS8250_MCR_OUT1 = 0x04;
+static constexpr u8 INS8250_MCR_OUT2 = 0x08;
+static constexpr u8 INS8250_MCR_LOOPBACK = 0x10;
+
+static constexpr u8 INS8250_LCR_BITCOUNT_MASK= 0x03;
+static constexpr u8 INS8250_LCR_2STOP_BITS = 0x04;
+//static constexpr u8 INS8250_LCR_PEN = 0x08;
+//static constexpr u8 INS8250_LCR_EVEN_PAR = 0x10;
+//static constexpr u8 INS8250_LCR_PARITY = 0x20;
+//static constexpr u8 INS8250_LCR_BREAK = 0x40;
+static constexpr u8 INS8250_LCR_DLAB = 0x80;
/* ints will continue to be set for as long as there are ints pending */
void ins8250_uart_device::update_interrupt()
@@ -257,7 +257,7 @@ void ins8250_uart_device::update_baud_rate()
tra_complete();
}
-WRITE8_MEMBER( ins8250_uart_device::ins8250_w )
+void ins8250_uart_device::ins8250_w(offs_t offset, u8 data)
{
int tmp;
@@ -399,7 +399,7 @@ WRITE8_MEMBER( ins8250_uart_device::ins8250_w )
}
}
-READ8_MEMBER( ins8250_uart_device::ins8250_r )
+u8 ins8250_uart_device::ins8250_r(offs_t offset)
{
int data = 0x0ff;
@@ -484,7 +484,7 @@ void ns16550_device::rcv_complete()
return;
}
- uint8_t errors = 0;
+ u8 errors = 0;
if (is_receive_framing_error())
errors |= INS8250_LSR_FE;
if (is_receive_parity_error())
@@ -578,7 +578,7 @@ void ins8250_uart_device::tra_callback()
void ins8250_uart_device::update_msr()
{
- uint8_t data;
+ u8 data;
int change;
if (m_regs.mcr & INS8250_MCR_LOOPBACK)
@@ -720,15 +720,15 @@ void ns16550_device::device_timer(emu_timer &timer, device_timer_id id, int para
}
}
-void ns16550_device::push_tx(uint8_t data)
+void ns16550_device::push_tx(u8 data)
{
m_tfifo[m_thead] = data;
++m_thead &= 0x0f;
}
-uint8_t ns16550_device::pop_rx()
+u8 ns16550_device::pop_rx()
{
- uint8_t data = m_rfifo[m_rtail];
+ u8 data = m_rfifo[m_rtail];
clear_int(COM_INT_PENDING_CHAR_TIMEOUT & ~1); // don't clear bit 1 yet
if(m_rnum)
@@ -758,7 +758,7 @@ uint8_t ns16550_device::pop_rx()
return data;
}
-void ns16550_device::set_fcr(uint8_t data)
+void ns16550_device::set_fcr(u8 data)
{
const int bytes_per_int[] = {1, 4, 8, 14};
if(!(data & 1))
diff --git a/src/devices/machine/ins8250.h b/src/devices/machine/ins8250.h
index 3047b8d6c05..5f9a6bd1793 100644
--- a/src/devices/machine/ins8250.h
+++ b/src/devices/machine/ins8250.h
@@ -27,8 +27,8 @@ public:
auto out_out1_callback() { return m_out_out1_cb.bind(); }
auto out_out2_callback() { return m_out_out2_cb.bind(); }
- DECLARE_WRITE8_MEMBER(ins8250_w);
- DECLARE_READ8_MEMBER(ins8250_r);
+ void ins8250_w(offs_t offset, u8 data);
+ u8 ins8250_r(offs_t offset);
DECLARE_WRITE_LINE_MEMBER(dcd_w);
DECLARE_WRITE_LINE_MEMBER(dsr_w);
@@ -46,7 +46,7 @@ protected:
NS16550A
};
- ins8250_uart_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, dev_type device_type);
+ ins8250_uart_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, dev_type device_type);
virtual void device_start() override;
virtual void device_reset() override;
@@ -54,9 +54,9 @@ protected:
virtual void tra_complete() override;
virtual void tra_callback() override;
- virtual void set_fcr(uint8_t data) { }
- virtual void push_tx(uint8_t data) { }
- virtual uint8_t pop_rx() { return 0; }
+ virtual void set_fcr(u8 data) { }
+ virtual void push_tx(u8 data) { }
+ virtual u8 pop_rx() { return 0; }
void trigger_int(int flag);
void clear_int(int flag);
@@ -65,20 +65,20 @@ protected:
const dev_type m_device_type;
struct {
- uint8_t thr; /* 0 -W transmitter holding register */
- uint8_t rbr; /* 0 R- receiver buffer register */
- uint8_t ier; /* 1 RW interrupt enable register */
- uint16_t dl; /* 0/1 RW divisor latch (if DLAB = 1) */
- uint8_t iir; /* 2 R- interrupt identification register */
- uint8_t fcr;
- uint8_t lcr; /* 3 RW line control register (bit 7: DLAB) */
- uint8_t mcr; /* 4 RW modem control register */
- uint8_t lsr; /* 5 R- line status register */
- uint8_t msr; /* 6 R- modem status register */
- uint8_t scr; /* 7 RW scratch register */
+ u8 thr; /* 0 -W transmitter holding register */
+ u8 rbr; /* 0 R- receiver buffer register */
+ u8 ier; /* 1 RW interrupt enable register */
+ u16 dl; /* 0/1 RW divisor latch (if DLAB = 1) */
+ u8 iir; /* 2 R- interrupt identification register */
+ u8 fcr;
+ u8 lcr; /* 3 RW line control register (bit 7: DLAB) */
+ u8 mcr; /* 4 RW modem control register */
+ u8 lsr; /* 5 R- line status register */
+ u8 msr; /* 6 R- modem status register */
+ u8 scr; /* 7 RW scratch register */
} m_regs;
private:
- uint8_t m_int_pending;
+ u8 m_int_pending;
devcb_write_line m_out_tx_cb;
devcb_write_line m_out_dtr_cb;
@@ -101,34 +101,34 @@ private:
class ins8250_device : public ins8250_uart_device
{
public:
- ins8250_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ ins8250_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
};
class ns16450_device : public ins8250_uart_device
{
public:
- ns16450_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ ns16450_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
};
class ns16550_device : public ins8250_uart_device
{
public:
- ns16550_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ ns16550_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 void rcv_complete() override;
virtual void tra_complete() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
- virtual void set_fcr(uint8_t data) override;
- virtual void push_tx(uint8_t data) override;
- virtual uint8_t pop_rx() override;
+ virtual void set_fcr(u8 data) override;
+ virtual void push_tx(u8 data) override;
+ virtual u8 pop_rx() override;
private:
void set_timer() { m_timeout->adjust(attotime::from_hz((clock()*4*8)/(m_regs.dl*16))); }
int m_rintlvl;
- uint8_t m_rfifo[16];
- uint8_t m_efifo[16];
- uint8_t m_tfifo[16];
+ u8 m_rfifo[16];
+ u8 m_efifo[16];
+ u8 m_tfifo[16];
int m_rhead, m_rtail, m_rnum;
int m_thead, m_ttail;
emu_timer *m_timeout;
@@ -137,10 +137,10 @@ private:
class pc16552_device : public device_t
{
public:
- pc16552_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ pc16552_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
- DECLARE_READ8_MEMBER(read) { return ((offset & 8) ? m_chan1 : m_chan0)->ins8250_r(space, offset & 7, mem_mask); }
- DECLARE_WRITE8_MEMBER(write) { ((offset & 8) ? m_chan1 : m_chan0)->ins8250_w(space, offset & 7, data, mem_mask); }
+ u8 read(offs_t offset) { return ((offset & 8) ? m_chan1 : m_chan0)->ins8250_r(offset & 7); }
+ void write(offs_t offset, u8 data) { ((offset & 8) ? m_chan1 : m_chan0)->ins8250_w(offset & 7, data); }
protected:
virtual void device_start() override;
diff --git a/src/devices/machine/nscsi_cd.cpp b/src/devices/machine/nscsi_cd.cpp
index 0446c600e9f..b58a179161a 100644
--- a/src/devices/machine/nscsi_cd.cpp
+++ b/src/devices/machine/nscsi_cd.cpp
@@ -378,6 +378,22 @@ void nscsi_cdrom_device::scsi_command()
scsi_cmdbuf[pos++] = 0x00; // Double meh
break;
+ case 0x01: // Read-write error recovery
+ scsi_cmdbuf[pos++] = 0x01; // PS, page id
+ scsi_cmdbuf[pos++] = 0x0a; // Page length
+ scsi_cmdbuf[pos++] = 0x01;
+ scsi_cmdbuf[pos++] = 0x01;
+ scsi_cmdbuf[pos++] = 0x00;
+ scsi_cmdbuf[pos++] = 0x00;
+ scsi_cmdbuf[pos++] = 0x00;
+ scsi_cmdbuf[pos++] = 0x00;
+ scsi_cmdbuf[pos++] = 0x00;
+ scsi_cmdbuf[pos++] = 0x00;
+ scsi_cmdbuf[pos++] = 0x00;
+ scsi_cmdbuf[pos++] = 0x00;
+ scsi_cmdbuf[pos++] = 0x00;
+ break;
+
case 0x02: // Disconnect/reconnect control parameters (guessed)
scsi_cmdbuf[pos++] = 0x82; // PS, page id
scsi_cmdbuf[pos++] = 0x0e; // Page length
diff --git a/src/devices/machine/spg110.cpp b/src/devices/machine/spg110.cpp
index df614deb314..060ae511f0c 100644
--- a/src/devices/machine/spg110.cpp
+++ b/src/devices/machine/spg110.cpp
@@ -17,352 +17,61 @@
DEFINE_DEVICE_TYPE(SPG110, spg110_device, "spg110", "SPG110 System-on-a-Chip")
spg110_device::spg110_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, type, tag, owner, clock),
- device_memory_interface(mconfig, *this),
- m_space_config("spg110", ENDIANNESS_BIG, 16, 32, 0, address_map_constructor(FUNC(spg110_device::map_video), this)),
- m_cpu(*this, finder_base::DUMMY_TAG),
- m_palette(*this, "palette"),
- m_gfxdecode(*this, "gfxdecode"),
- m_palram(*this, "palram")
+ : device_t(mconfig, type, tag, owner, clock)
+ , m_cpu(*this, finder_base::DUMMY_TAG)
+ , m_screen(*this, finder_base::DUMMY_TAG)
+ , m_spg_io(*this, "spg_io")
+ , m_spg_video(*this, "spg_video")
+ , m_porta_out(*this)
+ , m_portb_out(*this)
+ , m_portc_out(*this)
+ , m_porta_in(*this)
+ , m_portb_in(*this)
+ , m_portc_in(*this)
+ , m_adc_in{{*this}, {*this}}
+ , m_chip_sel(*this)
{
}
-template<spg110_device::flipx_t FlipX>
-void spg110_device::blit(const rectangle &cliprect, uint32_t line, uint32_t xoff, uint32_t yoff, uint32_t attr, uint32_t ctrl, uint32_t bitmap_addr, uint16_t tile)
-{
- address_space &space = m_cpu->space(AS_PROGRAM);
-
- int32_t h = 8 << ((attr & PAGE_TILE_HEIGHT_MASK) >> PAGE_TILE_HEIGHT_SHIFT);
- int32_t w = 8 << ((attr & PAGE_TILE_WIDTH_MASK) >> PAGE_TILE_WIDTH_SHIFT);
-
- uint32_t yflipmask = attr & TILE_Y_FLIP ? h - 1 : 0;
-
- uint32_t nc = ((attr & 0x0003) + 1) << 1;
-
- uint32_t palette_offset = (attr & 0x0f00) >> 4;
-
- palette_offset >>= nc;
- palette_offset <<= nc;
-
- uint32_t bits_per_row = nc * w / 16;
- uint32_t words_per_tile = bits_per_row * h;
- uint32_t m = bitmap_addr + words_per_tile * tile + bits_per_row * (line ^ yflipmask);
- uint32_t bits = 0;
- uint32_t nbits = 0;
- uint32_t y = line;
-
- int yy = (yoff + y) & 0x1ff;
- if (yy >= 0x01c0)
- yy -= 0x0200;
-
- if (yy > 240 || yy < 0)
- return;
-
- int y_index = yy * 320;
-
- for (int32_t x = FlipX ? (w - 1) : 0; FlipX ? x >= 0 : x < w; FlipX ? x-- : x++)
- {
- int xx = xoff + x;
-
- bits <<= nc;
-
- if (nbits < nc)
- {
- uint16_t b = space.read_word(m++ & 0x3fffff);
- //b = (b << 8) | (b >> 8);
- bits |= b << (nc - nbits);
- nbits += 16;
- }
- nbits -= nc;
-
- uint32_t pal = palette_offset + (bits >> 16);
- bits &= 0xffff;
-
- xx &= 0x01ff;
- if (xx >= 0x01c0)
- xx -= 0x0200;
-
- if (xx >= 0 && xx < 320)
- {
- // TODO, this is completely wrong for this palette system
- int pix_index = xx + y_index;
- uint16_t rawpal = m_palram[pal];
- const pen_t *pens = m_palette->pens();
- uint32_t paldata = pens[pal];
-
- if (!(rawpal & 0x8000))
- {
- m_screenbuf[pix_index] = paldata;
- }
- }
- }
-}
-
-void spg110_device::blit_page(const rectangle &cliprect, uint32_t scanline, int depth, uint32_t bitmap_addr, uint16_t *regs)
-{
- uint32_t xscroll = regs[0];
- uint32_t yscroll = regs[1];
- uint32_t attr = regs[2];
- uint32_t ctrl = regs[3];
- uint32_t tilemap = regs[4];
- uint32_t palette_map = regs[5];
- address_space &space2 = this->space(0);
-
- if (!(ctrl & PAGE_ENABLE_MASK))
- {
- return;
- }
-
- if (((attr & PAGE_DEPTH_FLAG_MASK) >> PAGE_DEPTH_FLAG_SHIFT) != depth)
- {
- return;
- }
-
- uint32_t tile_h = 8 << ((attr & PAGE_TILE_HEIGHT_MASK) >> PAGE_TILE_HEIGHT_SHIFT);
- uint32_t tile_w = 8 << ((attr & PAGE_TILE_WIDTH_MASK) >> PAGE_TILE_WIDTH_SHIFT);
-
- uint32_t tile_count_x = 512 / tile_w;
-
- uint32_t bitmap_y = (scanline + yscroll) & 0xff;
- uint32_t y0 = bitmap_y / tile_h;
- uint32_t tile_scanline = bitmap_y % tile_h;
- uint32_t tile_address = tile_count_x * y0;
-
- for (uint32_t x0 = 0; x0 < tile_count_x; x0++, tile_address++)
- {
- uint32_t yy = ((tile_h * y0 - yscroll + 0x10) & 0xff) - 0x10;
- uint32_t xx = (tile_w * x0 - xscroll) & 0x1ff;
- uint16_t tile = (ctrl & PAGE_WALLPAPER_MASK) ? space2.read_word(tilemap*2) : space2.read_word((tilemap + tile_address)*2);
- uint16_t palette = 0;
-
- if (!tile)
- continue;
-
- palette = space2.read_word(palette_map + tile_address / 2);
- if (x0 & 1)
- palette = (palette & 0xff00) >> 8;
- else
- palette = (palette & 0x00ff);
-
-
- bool flip_x = 0;//(tileattr & TILE_X_FLIP);
-
- if (flip_x)
- blit<FlipXOn>(cliprect, tile_scanline, xx, yy, attr, ctrl, bitmap_addr, tile);
- else
- blit<FlipXOff>(cliprect, tile_scanline, xx, yy, attr, ctrl, bitmap_addr, tile);
-
- }
-}
-
-
-/* correct, 4bpp gfxs */
-static const gfx_layout charlayout =
-{
- 8,8,
- RGN_FRAC(1,1),
- 4,
- { STEP4(0,1) },
- { 0*4,1*4,2*4,3*4,4*4,5*4,6*4,7*4 },
- { STEP8(0,4*8) },
- 8*8*4
-};
-
-static const gfx_layout charlayout6 =
-{
- 8,8,
- RGN_FRAC(1,1),
- 6,
- { 0,1,2,3,4,5 },
- { STEP8(0,6) },
- { STEP8(0,6*8) },
- 8*8*6
-};
-
-static const gfx_layout char16layout =
-{
- 16,16,
- RGN_FRAC(1,1),
- 4,
- { STEP4(0,1) },
- { 0*4,1*4,2*4,3*4,4*4,5*4,6*4,7*4, 8*4,9*4,10*4,11*4,12*4,13*4,14*4,15*4 },
- { STEP16(0,4*16) },
- 16*16*4
-};
-
-static const gfx_layout char32layout =
-{
- 32,32,
- RGN_FRAC(1,1),
- 4,
- { STEP4(0,1) },
- { STEP32(0,4) },
- { STEP32(0,4*32) },
- 32*32*4
-};
-
-
-
-static GFXDECODE_START( gfx )
- GFXDECODE_ENTRY( ":maincpu", 0, charlayout, 0, 16 )
- GFXDECODE_ENTRY( ":maincpu", 0, char16layout, 0, 16 )
- GFXDECODE_ENTRY( ":maincpu", 0, char32layout, 0, 16 )
- GFXDECODE_ENTRY( ":maincpu", 0, charlayout6, 0, 16 ) // correct for lots of the tiles inc. startup text
-GFXDECODE_END
-
-
-
-void spg110_device::device_add_mconfig(machine_config &config)
-{
-// PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 0x100);
-// PALETTE(config, m_palette).set_format(palette_device::RGB_565, 0x100);
-// PALETTE(config, m_palette).set_format(palette_device::IRGB_4444, 0x100);
-// PALETTE(config, m_palette).set_format(palette_device::RGBI_4444, 0x100);
-// PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 0x100);
- PALETTE(config, m_palette, palette_device::BLACK, 256);
-
- GFXDECODE(config, m_gfxdecode, m_palette, gfx);
-}
-
-
-device_memory_interface::space_config_vector spg110_device::memory_space_config() const
-{
- return space_config_vector {
- std::make_pair(0, &m_space_config)
- };
-}
spg110_device::spg110_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: spg110_device(mconfig, SPG110, tag, owner, clock)
{
}
-// irq source or similar?
-READ16_MEMBER(spg110_device::spg110_2063_r)
-{
- // checks for bits 0x20 and 0x08 in the IRQ function (all IRQs point to the same place)
- return 0x0008;
-}
-
-WRITE16_MEMBER(spg110_device::spg110_2063_w)
+WRITE_LINE_MEMBER(spg110_device::videoirq_w)
{
- // writes 0x28, probably clears the IRQ / IRQ sources? 0x63 is the same offset for this in spg2xx but bits used seem to be different
- m_cpu->set_state_unsynced(UNSP_IRQ0_LINE, CLEAR_LINE);
+ m_cpu->set_state_unsynced(UNSP_IRQ0_LINE, state);
}
-READ16_MEMBER(spg110_device::datasegment_r)
+void spg110_device::configure_spg_io(spg2xx_io_device* io)
{
- uint16_t val = m_cpu->get_ds();
- return val;
+ io->porta_in().set(FUNC(spg110_device::porta_r));
+ io->portb_in().set(FUNC(spg110_device::portb_r));
+ io->portc_in().set(FUNC(spg110_device::portc_r));
+ io->porta_out().set(FUNC(spg110_device::porta_w));
+ io->portb_out().set(FUNC(spg110_device::portb_w));
+ io->portc_out().set(FUNC(spg110_device::portc_w));
+ io->adc_in<0>().set(FUNC(spg110_device::adc_r<0>));
+ io->adc_in<1>().set(FUNC(spg110_device::adc_r<1>));
+ io->chip_select().set(FUNC(spg110_device::cs_w));
+// io->pal_read_callback().set(FUNC(spg110_device::get_pal_r));
+// io->write_timer_irq_callback().set(FUNC(spg110_device::timerirq_w));
+// io->write_uart_adc_irq_callback().set(FUNC(spg110_device::uartirq_w));
+// io->write_external_irq_callback().set(FUNC(spg110_device::extirq_w));
+// io->write_ffrq_tmr1_irq_callback().set(FUNC(spg110_device::ffreq1_w));
+// io->write_ffrq_tmr2_irq_callback().set(FUNC(spg110_device::ffreq2_w));
}
-WRITE16_MEMBER(spg110_device::datasegment_w)
+void spg110_device::device_add_mconfig(machine_config &config)
{
- m_cpu->set_ds(data & 0x3f);
-}
+ SPG24X_IO(config, m_spg_io, DERIVED_CLOCK(1, 1), m_cpu, m_screen);
+ configure_spg_io(m_spg_io);
-WRITE16_MEMBER(spg110_device::spg110_3221_w)
-{
- /* first write on startup? */
+ SPG110_VIDEO(config, m_spg_video, DERIVED_CLOCK(1, 1), m_cpu, m_screen);
+ m_spg_video->write_video_irq_callback().set(FUNC(spg110_device::videoirq_w));
}
-WRITE16_MEMBER(spg110_device::spg110_3223_w) { }
-WRITE16_MEMBER(spg110_device::spg110_3225_w) { }
-
-
-WRITE16_MEMBER(spg110_device::spg110_201c_w) { }
-WRITE16_MEMBER(spg110_device::spg110_2020_w) { }
-WRITE16_MEMBER(spg110_device::spg110_2042_w) { }
-WRITE16_MEMBER(spg110_device::spg110_2031_w) { }
-WRITE16_MEMBER(spg110_device::spg110_2032_w) { }
-WRITE16_MEMBER(spg110_device::spg110_2033_w) { }
-WRITE16_MEMBER(spg110_device::spg110_2034_w) { }
-WRITE16_MEMBER(spg110_device::spg110_2035_w) { }
-WRITE16_MEMBER(spg110_device::spg110_2036_w) { COMBINE_DATA(&m_2036_scroll); }
-WRITE16_MEMBER(spg110_device::spg110_2039_w) { }
-WRITE16_MEMBER(spg110_device::spg110_2037_w) { }
-WRITE16_MEMBER(spg110_device::spg110_203c_w) { }
-WRITE16_MEMBER(spg110_device::spg110_203d_w) { }
-WRITE16_MEMBER(spg110_device::spg110_2045_w) { }
-
-
-WRITE16_MEMBER(spg110_device::spg110_2028_w) { }
-WRITE16_MEMBER(spg110_device::spg110_2029_w) { }
-
-READ16_MEMBER(spg110_device::spg110_2028_r) { return 0x0000; }
-READ16_MEMBER(spg110_device::spg110_2029_r) { return 0x0000; }
-
-
-WRITE16_MEMBER(spg110_device::spg110_2050_w) { }
-WRITE16_MEMBER(spg110_device::spg110_2051_w) { }
-WRITE16_MEMBER(spg110_device::spg110_2052_w) { }
-WRITE16_MEMBER(spg110_device::spg110_2053_w) { }
-WRITE16_MEMBER(spg110_device::spg110_2054_w) { }
-WRITE16_MEMBER(spg110_device::spg110_2055_w) { }
-WRITE16_MEMBER(spg110_device::spg110_2056_w) { }
-WRITE16_MEMBER(spg110_device::spg110_2057_w) { }
-WRITE16_MEMBER(spg110_device::spg110_2058_w) { }
-WRITE16_MEMBER(spg110_device::spg110_2059_w) { }
-WRITE16_MEMBER(spg110_device::spg110_205a_w) { }
-WRITE16_MEMBER(spg110_device::spg110_205b_w) { }
-WRITE16_MEMBER(spg110_device::spg110_205c_w) { }
-WRITE16_MEMBER(spg110_device::spg110_205d_w) { }
-WRITE16_MEMBER(spg110_device::spg110_205e_w) { }
-WRITE16_MEMBER(spg110_device::spg110_205f_w) { }
-
-WRITE16_MEMBER(spg110_device::dma_unk_2061_w) { COMBINE_DATA(&m_dma_unk_2061); }
-WRITE16_MEMBER(spg110_device::dma_dst_step_w) { COMBINE_DATA(&m_dma_dst_step); }
-WRITE16_MEMBER(spg110_device::dma_unk_2067_w) { COMBINE_DATA(&m_dma_unk_2067); }
-WRITE16_MEMBER(spg110_device::dma_src_step_w) { COMBINE_DATA(&m_dma_src_step); }
-
-WRITE16_MEMBER(spg110_device::dma_dst_w) { COMBINE_DATA(&m_dma_dst); }
-WRITE16_MEMBER(spg110_device::dma_src_w) { COMBINE_DATA(&m_dma_src); }
-
-WRITE16_MEMBER(spg110_device::dma_len_trigger_w)
-{
- int length = data & 0x1fff;
-
- // this is presumably a counter that underflows to 0x1fff, because that's what the wait loop waits for?
- logerror("%s: (trigger len) %04x with values (unk) %04x (dststep) %04x (unk) %04x (src step) %04x | (dst) %04x (src) %04x\n", machine().describe_context(), data, m_dma_unk_2061, m_dma_dst_step, m_dma_unk_2067, m_dma_src_step, m_dma_dst, m_dma_src);
-
- if ((m_dma_unk_2061!=0x0000) || (m_dma_unk_2067 != 0x0000))
- fatalerror("unknown DMA params are not zero!\n");
-
- int source = m_dma_src;
- int dest = m_dma_dst;
-
- for (int i = 0; i < length; i++)
- {
- address_space &mem = m_cpu->space(AS_PROGRAM);
- uint16_t val = mem.read_word(source);
-
- this->space(0).write_word(dest * 2, val, 0xffff);
-
- source+=m_dma_src_step;
- dest+=m_dma_dst_step;
- }
-}
-
-READ16_MEMBER(spg110_device::dma_len_status_r)
-{
- return 0x1fff; // DMA related?
-}
-
-READ16_MEMBER(spg110_device::spg110_2037_r) { return 0x0000; }
-READ16_MEMBER(spg110_device::spg110_2042_r) { return 0x0000; }
-
-WRITE16_MEMBER(spg110_device::spg110_3200_w) { }
-WRITE16_MEMBER(spg110_device::spg110_3201_w) { }
-WRITE16_MEMBER(spg110_device::spg110_3203_w) { }
-WRITE16_MEMBER(spg110_device::spg110_3204_w) { }
-WRITE16_MEMBER(spg110_device::spg110_3206_w) { }
-WRITE16_MEMBER(spg110_device::spg110_3208_w) { }
-WRITE16_MEMBER(spg110_device::spg110_3209_w) { }
-
-READ16_MEMBER(spg110_device::spg110_3201_r) { return 0x0000; }
-READ16_MEMBER(spg110_device::spg110_3225_r) { return 0x0000; }
-READ16_MEMBER(spg110_device::spg110_322c_r) { return 0x0000; }
-
WRITE16_MEMBER(spg110_device::spg110_3100_w) { }
WRITE16_MEMBER(spg110_device::spg110_3101_w) { }
WRITE16_MEMBER(spg110_device::spg110_3102_w) { }
@@ -378,128 +87,60 @@ WRITE16_MEMBER(spg110_device::spg110_310d_w) { }
READ16_MEMBER(spg110_device::spg110_310f_r) { return 0x0000; }
-READ16_MEMBER(spg110_device::tmap0_regs_r) { return tmap0_regs[offset]; }
-READ16_MEMBER(spg110_device::tmap1_regs_r) { return tmap1_regs[offset]; }
-
-void spg110_device::tilemap_write_regs(int which, uint16_t* regs, int regno, uint16_t data)
-{
- switch (regno)
- {
- case 0x0: // Page X scroll
- logerror("video_w: Page %d X Scroll = %04x\n", which, data & 0x01ff);
- regs[regno] = data & 0x01ff;
- break;
-
- case 0x1: // Page Y scroll
- logerror("video_w: Page %d Y Scroll = %04x\n", which, data & 0x00ff);
- regs[regno] = data & 0x00ff;
- break;
-
- case 0x2: // Page Attributes
- // 'depth' (aka z value) can't be depth here as it is on spg2xx, or the scores in attract will be behind the table, it really seems to be per attribute bit instead
-
- logerror("video_w: Page %d Attributes = %04x (Depth:%d, Palette:%d, VSize:%d, HSize:%d, FlipY:%d, FlipX:%d, BPP:%d)\n", which, data
- , (data >> 12) & 3, (data >> 8) & 15, 8 << ((data >> 6) & 3), 8 << ((data >> 4) & 3), BIT(data, 3), BIT(data, 2), 2 * ((data & 3) + 1));
- regs[regno] = data;
- break;
-
- case 0x3: // Page Control
- logerror("video_w: Page %d Control = %04x (Blend:%d, HiColor:%d, RowScroll:%d, Enable:%d, Wallpaper:%d, RegSet:%d, Bitmap:%d)\n", which, data
- , BIT(data, 8), BIT(data, 7), BIT(data, 4), BIT(data, 3), BIT(data, 2), BIT(data, 1), BIT(data, 0));
- regs[regno] = data;
- break;
-
- case 0x4: // Page Tile Address
- logerror("video_w: Page %d Tile Address = %04x\n", which, data);
- regs[regno] = data;
- break;
-
- case 0x5: // Page Attribute Address
- logerror("video_w: Page %d Attribute Address = %04x\n", which, data);
- regs[regno] = data;
- break;
- }
-}
-
-
-WRITE16_MEMBER(spg110_device::tmap0_regs_w)
-{
- tilemap_write_regs(0, tmap0_regs,offset,data);
-}
-
-
-WRITE16_MEMBER(spg110_device::tmap1_regs_w)
-{
- tilemap_write_regs(1, tmap1_regs,offset,data);
-}
-
void spg110_device::map(address_map &map)
{
map(0x000000, 0x000fff).ram();
-
// vregs are at 2000?
- map(0x002010, 0x002015).rw(FUNC(spg110_device::tmap0_regs_r), FUNC(spg110_device::tmap0_regs_w));
- map(0x002016, 0x00201b).rw(FUNC(spg110_device::tmap1_regs_r), FUNC(spg110_device::tmap1_regs_w));
-
- map(0x00201c, 0x00201c).w(FUNC(spg110_device::spg110_201c_w));
+ map(0x002010, 0x002015).rw(m_spg_video, FUNC(spg110_video_device::tmap0_regs_r), FUNC(spg110_video_device::tmap0_regs_w));
+ map(0x002016, 0x00201b).rw(m_spg_video, FUNC(spg110_video_device::tmap1_regs_r), FUNC(spg110_video_device::tmap1_regs_w));
- map(0x002020, 0x002020).w(FUNC(spg110_device::spg110_2020_w));
+#if 1 // more vregs?
+ map(0x00201c, 0x00201c).w(m_spg_video, FUNC(spg110_video_device::spg110_201c_w));
- map(0x002028, 0x002028).rw(FUNC(spg110_device::spg110_2028_r), FUNC(spg110_device::spg110_2028_w));
- map(0x002029, 0x002029).rw(FUNC(spg110_device::spg110_2029_r), FUNC(spg110_device::spg110_2029_w));
+ map(0x002020, 0x002020).w(m_spg_video, FUNC(spg110_video_device::spg110_2020_w));
- map(0x002031, 0x002031).w(FUNC(spg110_device::spg110_2031_w)); // sometimes 14a?
- map(0x002032, 0x002032).w(FUNC(spg110_device::spg110_2032_w)); // always 14a?
- map(0x002033, 0x002033).w(FUNC(spg110_device::spg110_2033_w));
- map(0x002034, 0x002034).w(FUNC(spg110_device::spg110_2034_w));
- map(0x002035, 0x002035).w(FUNC(spg110_device::spg110_2035_w));
- map(0x002036, 0x002036).w(FUNC(spg110_device::spg110_2036_w)); // possible scroll register?
- map(0x002037, 0x002037).rw(FUNC(spg110_device::spg110_2037_r), FUNC(spg110_device::spg110_2037_w));
+ map(0x002028, 0x002028).rw(m_spg_video, FUNC(spg110_video_device::spg110_2028_r), FUNC(spg110_video_device::spg110_2028_w));
+ map(0x002029, 0x002029).rw(m_spg_video, FUNC(spg110_video_device::spg110_2029_r), FUNC(spg110_video_device::spg110_2029_w));
- map(0x002039, 0x002039).w(FUNC(spg110_device::spg110_2039_w));
+ map(0x002031, 0x002031).w(m_spg_video, FUNC(spg110_video_device::spg110_2031_w)); // sometimes 14a?
+ map(0x002032, 0x002032).w(m_spg_video, FUNC(spg110_video_device::spg110_2032_w)); // always 14a?
+ map(0x002033, 0x002033).w(m_spg_video, FUNC(spg110_video_device::spg110_2033_w));
+ map(0x002034, 0x002034).w(m_spg_video, FUNC(spg110_video_device::spg110_2034_w));
+ map(0x002035, 0x002035).w(m_spg_video, FUNC(spg110_video_device::spg110_2035_w));
+ map(0x002036, 0x002036).w(m_spg_video, FUNC(spg110_video_device::spg110_2036_w)); // possible scroll register?
+ map(0x002037, 0x002037).rw(m_spg_video, FUNC(spg110_video_device::spg110_2037_r), FUNC(spg110_video_device::spg110_2037_w));
- map(0x00203c, 0x00203c).w(FUNC(spg110_device::spg110_203c_w));
+ map(0x002039, 0x002039).w(m_spg_video, FUNC(spg110_video_device::spg110_2039_w));
- map(0x00203d, 0x00203d).w(FUNC(spg110_device::spg110_203d_w)); // possible scroll register?
+ map(0x00203c, 0x00203c).w(m_spg_video, FUNC(spg110_video_device::spg110_203c_w));
- map(0x002042, 0x002042).rw(FUNC(spg110_device::spg110_2042_r),FUNC(spg110_device::spg110_2042_w));
+ map(0x00203d, 0x00203d).w(m_spg_video, FUNC(spg110_video_device::spg110_203d_w)); // possible scroll register?
- map(0x002045, 0x002045).w(FUNC(spg110_device::spg110_2045_w));
+ map(0x002042, 0x002042).rw(m_spg_video, FUNC(spg110_video_device::spg110_2042_r),FUNC(spg110_video_device::spg110_2042_w));
- // seems to be 16 entries for.. something?
- map(0x002050, 0x002050).w(FUNC(spg110_device::spg110_2050_w));
- map(0x002051, 0x002051).w(FUNC(spg110_device::spg110_2051_w));
- map(0x002052, 0x002052).w(FUNC(spg110_device::spg110_2052_w));
- map(0x002053, 0x002053).w(FUNC(spg110_device::spg110_2053_w));
- map(0x002054, 0x002054).w(FUNC(spg110_device::spg110_2054_w));
- map(0x002055, 0x002055).w(FUNC(spg110_device::spg110_2055_w));
- map(0x002056, 0x002056).w(FUNC(spg110_device::spg110_2056_w));
- map(0x002057, 0x002057).w(FUNC(spg110_device::spg110_2057_w));
- map(0x002058, 0x002058).w(FUNC(spg110_device::spg110_2058_w));
- map(0x002059, 0x002059).w(FUNC(spg110_device::spg110_2059_w));
- map(0x00205a, 0x00205a).w(FUNC(spg110_device::spg110_205a_w));
- map(0x00205b, 0x00205b).w(FUNC(spg110_device::spg110_205b_w));
- map(0x00205c, 0x00205c).w(FUNC(spg110_device::spg110_205c_w));
- map(0x00205d, 0x00205d).w(FUNC(spg110_device::spg110_205d_w));
- map(0x00205e, 0x00205e).w(FUNC(spg110_device::spg110_205e_w));
- map(0x00205f, 0x00205f).w(FUNC(spg110_device::spg110_205f_w));
+ map(0x002045, 0x002045).w(m_spg_video, FUNC(spg110_video_device::spg110_2045_w));
+#endif
- //map(0x002010, 0x00205f).ram();
+ // seems to be 16 entries for.. something? on jak_capb these seem connected to the palette DMA operations, 0x2050 for 0x8000, 0x2051 for 0x8020, 0x2052 for 0x8040 etc. maybe 1 bit per pen?
+ map(0x002050, 0x00205f).ram().w(m_spg_video, FUNC(spg110_video_device::spg110_205x_w)).share("spg_video:palctrlram");
// everything (dma? and interrupt flag?!)
- map(0x002060, 0x002060).w(FUNC(spg110_device::dma_dst_w));
- map(0x002061, 0x002061).w(FUNC(spg110_device::dma_unk_2061_w));
- map(0x002062, 0x002062).rw(FUNC(spg110_device::dma_len_status_r),FUNC(spg110_device::dma_len_trigger_w));
- map(0x002063, 0x002063).rw(FUNC(spg110_device::spg110_2063_r),FUNC(spg110_device::spg110_2063_w)); // this looks like interrupt stuff and is checked in the irq like an irq source, but why in the middle of what otherwise look like some kind of DMA?
- map(0x002064, 0x002064).w(FUNC(spg110_device::dma_dst_step_w));
- map(0x002066, 0x002066).w(FUNC(spg110_device::dma_src_w));
- map(0x002067, 0x002067).w(FUNC(spg110_device::dma_unk_2067_w));
- map(0x002068, 0x002068).w(FUNC(spg110_device::dma_src_step_w));
-
- map(0x002200, 0x0022ff).ram(); // looks like per-pen brightness or similar? strange because palette isn't memory mapped here
-
- map(0x003000, 0x00307f).ram(); // sound registers? seems to be 8 long entries, only uses up to 0x7f?
+ map(0x002060, 0x002060).w(m_spg_video, FUNC(spg110_video_device::dma_dst_w));
+ map(0x002061, 0x002061).w(m_spg_video, FUNC(spg110_video_device::dma_unk_2061_w));
+ map(0x002062, 0x002062).rw(m_spg_video, FUNC(spg110_video_device::dma_len_status_r),FUNC(spg110_video_device::dma_len_trigger_w));
+ map(0x002063, 0x002063).rw(m_spg_video, FUNC(spg110_video_device::spg110_2063_r),FUNC(spg110_video_device::spg110_2063_w)); // Video IRQ source / ack (3 different things checked here instead of 2 on spg2xx?)
+ map(0x002064, 0x002064).w(m_spg_video, FUNC(spg110_video_device::dma_dst_step_w));
+ map(0x002065, 0x002065).rw(m_spg_video, FUNC(spg110_video_device::dma_manual_r), FUNC(spg110_video_device::dma_manual_w));
+ map(0x002066, 0x002066).w(m_spg_video, FUNC(spg110_video_device::dma_src_w));
+ map(0x002067, 0x002067).w(m_spg_video, FUNC(spg110_video_device::dma_unk_2067_w));
+ map(0x002068, 0x002068).w(m_spg_video, FUNC(spg110_video_device::dma_src_step_w));
+
+ map(0x002100, 0x0021ff).ram(); // jak_spdmo only
+ map(0x002200, 0x0022ff).ram(); // looks like per-pen brightness or similar? strange because palette isn't memory mapped here (maybe rowscroll?)
+
+#if 1 // sound registers? seems to be 8 long entries, only uses up to 0x7f? (register mapping seems similar to spg2xx, maybe with less channels?)
+ map(0x003000, 0x00307f).ram();
map(0x003080, 0x0030ff).ram();
map(0x003100, 0x003100).w(FUNC(spg110_device::spg110_3100_w));
@@ -518,157 +159,28 @@ void spg110_device::map(address_map &map)
map(0x00310d, 0x00310d).w(FUNC(spg110_device::spg110_310d_w));
map(0x00310f, 0x00310f).r(FUNC(spg110_device::spg110_310f_r));
+#endif
// 0032xx looks like it could be the same as 003d00 on spg2xx
- map(0x003200, 0x003200).w(FUNC(spg110_device::spg110_3200_w));
-
- map(0x003201, 0x003201).rw(FUNC(spg110_device::spg110_3201_r),FUNC(spg110_device::spg110_3201_w));
-
- map(0x003203, 0x003203).w(FUNC(spg110_device::spg110_3203_w));
- map(0x003204, 0x003204).w(FUNC(spg110_device::spg110_3204_w));
-
- map(0x003206, 0x003206).w(FUNC(spg110_device::spg110_3206_w));
-
- map(0x003208, 0x003208).w(FUNC(spg110_device::spg110_3208_w));
- map(0x003209, 0x003209).w(FUNC(spg110_device::spg110_3209_w));
-
- map(0x003221, 0x003221).w(FUNC(spg110_device::spg110_3221_w));
- map(0x003223, 0x003223).w(FUNC(spg110_device::spg110_3223_w));
- map(0x003225, 0x003225).rw(FUNC(spg110_device::spg110_3225_r),FUNC(spg110_device::spg110_3225_w));
- map(0x00322c, 0x00322c).r(FUNC(spg110_device::spg110_322c_r));
-
- map(0x00322f, 0x00322f).rw(FUNC(spg110_device::datasegment_r),FUNC(spg110_device::datasegment_w));
+ map(0x003200, 0x00322f).rw(m_spg_io, FUNC(spg2xx_io_device::io_r), FUNC(spg2xx_io_device::io_w));
}
-// this seems to be a different, non-cpu mapped space only accessible via the DMA?
-void spg110_device::map_video(address_map &map)
-{
- // are these addresses hardcoded, or can they move (in which case tilemap system isn't really suitable)
- map(0x00000, 0x03fff).ram(); // 2fff?
-
- map(0x04000, 0x04fff).ram(); // seems to be 3 blocks, almost certainly spritelist
-
-// map(0x08000, 0x081ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // probably? format unknown tho
- map(0x08000, 0x081ff).ram().share("palram");
-}
-
-
-/*
-TIMER_CALLBACK_MEMBER(spg110_device::test_timer)
-{
- //
-}
-*/
-
-
void spg110_device::device_start()
{
-// m_test_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(spg110_device::test_timer), this));
- save_item(NAME(m_dma_src_step));
- save_item(NAME(m_dma_dst_step));
- save_item(NAME(m_dma_unk_2061));
- save_item(NAME(m_dma_unk_2067));
- save_item(NAME(m_dma_dst));
- save_item(NAME(m_dma_src));
- save_item(NAME(m_bg_scrollx));
- save_item(NAME(m_bg_scrolly));
- save_item(NAME(m_2036_scroll));
-}
-
-void spg110_device::device_reset()
-{
- m_dma_src_step = 0;
- m_dma_dst_step = 0;
- m_dma_unk_2061 = 0;
- m_dma_unk_2067 = 0;
- m_dma_dst = 0;
- m_dma_src = 0;
- m_bg_scrollx = 0;
- m_bg_scrolly = 0;
- m_2036_scroll = 0;
-}
+ m_porta_out.resolve_safe();
+ m_portb_out.resolve_safe();
+ m_portc_out.resolve_safe();
+ m_porta_in.resolve_safe(0);
+ m_portb_in.resolve_safe(0);
+ m_portc_in.resolve_safe(0);
+ m_adc_in[0].resolve_safe(0x0fff);
+ m_adc_in[1].resolve_safe(0x0fff);
+ m_chip_sel.resolve_safe();
-double spg110_device::hue2rgb(double p, double q, double t)
-{
- if (t < 0) t += 1;
- if (t > 1) t -= 1;
- if (t < 1 / 6.0f) return p + (q - p) * 6 * t;
- if (t < 1 / 2.0f) return q;
- if (t < 2 / 3.0f) return p + (q - p) * (2 / 3.0f - t) * 6;
- return p;
}
-uint32_t spg110_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+void spg110_device::device_reset()
{
- // Palette, this is still wrong!
- int offs = 0;
- for (int index = 0;index < 256; index++)
- {
- uint16_t dat = m_palram[offs++];
-
- // llll lsss sshh hhhh
- int l_raw = (dat & 0xf800) >> 11;
- int sl_raw = (dat & 0x07c0) >> 6;
- int h_raw = (dat & 0x003f) >> 0;
-
- double l = (double)l_raw / 31.0f;
- double s = (double)sl_raw / 31.0f;
- double h = (double)h_raw / 47.0f;
-
- double r, g, b;
-
- if (s == 0) {
- r = g = b = l; // greyscale
- } else {
- double q = l < 0.5f ? l * (1 + s) : l + s - l * s;
- double p = 2 * l - q;
- r = hue2rgb(p, q, h + 1/3.0f);
- g = hue2rgb(p, q, h);
- b = hue2rgb(p, q, h - 1/3.0f);
- }
-
- int r_real = r * 255.0f;
- int g_real = g * 255.0f;
- int b_real = b * 255.0f;
-
- m_palette->set_pen_color(index, r_real, g_real, b_real);
- }
-
- memset(&m_screenbuf[320 * cliprect.min_y], 0, 4 * 320 * ((cliprect.max_y - cliprect.min_y) + 1));
-
- const uint32_t page1_addr = 0;//0x40 * m_video_regs[0x20];
- const uint32_t page2_addr = 0;//0x40 * m_video_regs[0x21];
- uint16_t *page1_regs = tmap0_regs;
- uint16_t *page2_regs = tmap1_regs;
-
- for (uint32_t scanline = (uint32_t)cliprect.min_y; scanline <= (uint32_t)cliprect.max_y; scanline++)
- {
- for (int i = 0; i < 4; i++)
- {
- blit_page(cliprect, scanline, i, page2_addr, page2_regs);
- blit_page(cliprect, scanline, i, page1_addr, page1_regs);
- //blit_sprites(cliprect, scanline, i);
- }
- }
-
- for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
- {
- uint32_t *dest = &bitmap.pix32(y, cliprect.min_x);
- uint32_t *src = &m_screenbuf[cliprect.min_x + 320 * y];
- memcpy(dest, src, sizeof(uint32_t) * ((cliprect.max_x - cliprect.min_x) + 1));
- }
-
- return 0;
}
-WRITE_LINE_MEMBER(spg110_device::vblank)
-{
- if (!state)
- {
- m_cpu->set_state_unsynced(UNSP_IRQ0_LINE, ASSERT_LINE);
- // m_test_timer->adjust(attotime::from_usec(100), 0);
- }
-
- return;
-}
diff --git a/src/devices/machine/spg110.h b/src/devices/machine/spg110.h
index dd51e1883b1..91a715fc755 100644
--- a/src/devices/machine/spg110.h
+++ b/src/devices/machine/spg110.h
@@ -9,28 +9,39 @@
//#include "spg2xx.h"
#include "cpu/unsp/unsp.h"
#include "emupal.h"
+#include "spg2xx_io.h"
+#include "spg110_video.h"
-
-class spg110_device : public device_t, public device_memory_interface
+class spg110_device : public device_t
{
public:
spg110_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
spg110_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- template <typename T>
- spg110_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&cpu_tag)
+ template <typename T, typename U>
+ spg110_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&cpu_tag, U &&screen_tag)
: spg110_device(mconfig, tag, owner, clock)
{
m_cpu.set_tag(std::forward<T>(cpu_tag));
+ m_screen.set_tag(std::forward<U>(screen_tag));
}
void map(address_map &map);
- void map_video(address_map &map);
- double hue2rgb(double p, double q, double t);
- uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
- DECLARE_WRITE_LINE_MEMBER(vblank);
+ auto porta_out() { return m_porta_out.bind(); }
+ auto portb_out() { return m_portb_out.bind(); }
+ auto portc_out() { return m_portc_out.bind(); }
+ auto porta_in() { return m_porta_in.bind(); }
+ auto portb_in() { return m_portb_in.bind(); }
+ auto portc_in() { return m_portc_in.bind(); }
+
+ template <size_t Line> auto adc_in() { return m_adc_in[Line].bind(); }
+
+ auto chip_select() { return m_chip_sel.bind(); }
+
+ uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { return m_spg_video->screen_update(screen,bitmap,cliprect); }
+ DECLARE_WRITE_LINE_MEMBER(vblank) { m_spg_video->vblank(state); }
protected:
virtual void device_start() override;
@@ -38,119 +49,13 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
- virtual space_config_vector memory_space_config() const override;
-
- address_space_config m_space_config;
-
private:
- enum
- {
- PAGE_ENABLE_MASK = 0x0008,
- PAGE_WALLPAPER_MASK = 0x0004,
-
- PAGE_DEPTH_FLAG_MASK = 0x3000,
- PAGE_DEPTH_FLAG_SHIFT = 12,
- PAGE_TILE_HEIGHT_MASK = 0x00c0,
- PAGE_TILE_HEIGHT_SHIFT = 6,
- PAGE_TILE_WIDTH_MASK = 0x0030,
- PAGE_TILE_WIDTH_SHIFT = 4,
-
- TILE_X_FLIP = 0x0004,
- TILE_Y_FLIP = 0x0008
- };
-
- enum flipx_t : bool
- {
- FlipXOff = false,
- FlipXOn = true
- };
required_device<unsp_device> m_cpu;
- required_device<palette_device> m_palette;
- required_device<gfxdecode_device> m_gfxdecode;
- required_shared_ptr<uint16_t> m_palram;
-
- //TIMER_CALLBACK_MEMBER(test_timer);
- //emu_timer *m_test_timer;
-
-
- DECLARE_WRITE16_MEMBER(spg110_201c_w);
- DECLARE_WRITE16_MEMBER(spg110_2020_w);
-
- DECLARE_WRITE16_MEMBER(spg110_2028_w);
- DECLARE_WRITE16_MEMBER(spg110_2029_w);
-
- DECLARE_READ16_MEMBER(spg110_2028_r);
- DECLARE_READ16_MEMBER(spg110_2029_r);
-
- DECLARE_WRITE16_MEMBER(spg110_2031_w);
- DECLARE_WRITE16_MEMBER(spg110_2032_w);
- DECLARE_WRITE16_MEMBER(spg110_2033_w);
- DECLARE_WRITE16_MEMBER(spg110_2034_w);
- DECLARE_WRITE16_MEMBER(spg110_2035_w);
- DECLARE_WRITE16_MEMBER(spg110_2036_w);
- DECLARE_WRITE16_MEMBER(spg110_2037_w);
- DECLARE_WRITE16_MEMBER(spg110_2039_w);
-
- DECLARE_WRITE16_MEMBER(spg110_203c_w);
- DECLARE_WRITE16_MEMBER(spg110_203d_w);
-
- DECLARE_WRITE16_MEMBER(spg110_2042_w);
-
- DECLARE_WRITE16_MEMBER(spg110_2045_w);
-
- DECLARE_WRITE16_MEMBER(spg110_2050_w);
- DECLARE_WRITE16_MEMBER(spg110_2051_w);
- DECLARE_WRITE16_MEMBER(spg110_2052_w);
- DECLARE_WRITE16_MEMBER(spg110_2053_w);
- DECLARE_WRITE16_MEMBER(spg110_2054_w);
- DECLARE_WRITE16_MEMBER(spg110_2055_w);
- DECLARE_WRITE16_MEMBER(spg110_2056_w);
- DECLARE_WRITE16_MEMBER(spg110_2057_w);
- DECLARE_WRITE16_MEMBER(spg110_2058_w);
- DECLARE_WRITE16_MEMBER(spg110_2059_w);
- DECLARE_WRITE16_MEMBER(spg110_205a_w);
- DECLARE_WRITE16_MEMBER(spg110_205b_w);
- DECLARE_WRITE16_MEMBER(spg110_205c_w);
- DECLARE_WRITE16_MEMBER(spg110_205d_w);
- DECLARE_WRITE16_MEMBER(spg110_205e_w);
- DECLARE_WRITE16_MEMBER(spg110_205f_w);
-
-
- DECLARE_READ16_MEMBER(spg110_2037_r);
- DECLARE_READ16_MEMBER(spg110_2042_r);
-
- DECLARE_WRITE16_MEMBER(dma_dst_w);
- DECLARE_WRITE16_MEMBER(dma_unk_2061_w);
- DECLARE_WRITE16_MEMBER(dma_len_trigger_w);
- DECLARE_WRITE16_MEMBER(spg110_2063_w);
- DECLARE_WRITE16_MEMBER(dma_dst_step_w);
- DECLARE_WRITE16_MEMBER(dma_src_w);
- DECLARE_WRITE16_MEMBER(dma_unk_2067_w);
- DECLARE_WRITE16_MEMBER(dma_src_step_w);
-
- DECLARE_READ16_MEMBER(dma_len_status_r);
- DECLARE_READ16_MEMBER(spg110_2063_r);
-
- DECLARE_WRITE16_MEMBER(spg110_3200_w);
- DECLARE_WRITE16_MEMBER(spg110_3201_w);
- DECLARE_WRITE16_MEMBER(spg110_3203_w);
- DECLARE_WRITE16_MEMBER(spg110_3204_w);
- DECLARE_WRITE16_MEMBER(spg110_3206_w);
- DECLARE_WRITE16_MEMBER(spg110_3208_w);
- DECLARE_WRITE16_MEMBER(spg110_3209_w);
-
- DECLARE_READ16_MEMBER(spg110_3201_r);
-
- DECLARE_WRITE16_MEMBER(spg110_3221_w);
- DECLARE_WRITE16_MEMBER(spg110_3223_w);
- DECLARE_WRITE16_MEMBER(spg110_3225_w);
-
- DECLARE_READ16_MEMBER(spg110_3225_r);
- DECLARE_READ16_MEMBER(spg110_322c_r);
-
- READ16_MEMBER(datasegment_r);
- WRITE16_MEMBER(datasegment_w);
+ required_device<screen_device> m_screen;
+
+ required_device<spg2xx_io_device> m_spg_io;
+ required_device<spg110_video_device> m_spg_video;
DECLARE_WRITE16_MEMBER(spg110_3100_w);
@@ -169,32 +74,29 @@ private:
DECLARE_READ16_MEMBER(spg110_310f_r);
- DECLARE_READ16_MEMBER(tmap0_regs_r);
- DECLARE_READ16_MEMBER(tmap1_regs_r);
- DECLARE_WRITE16_MEMBER(tmap0_regs_w);
- DECLARE_WRITE16_MEMBER(tmap1_regs_w);
-
- uint16_t tmap0_regs[0x6];
- uint16_t tmap1_regs[0x6];
-
- uint16_t m_dma_src_step;
- uint16_t m_dma_dst_step;
- uint16_t m_dma_unk_2061;
- uint16_t m_dma_unk_2067;
-
- uint16_t m_dma_dst;
- uint16_t m_dma_src;
-
- uint16_t m_bg_scrollx;
- uint16_t m_bg_scrolly;
- uint16_t m_2036_scroll;
-
- void tilemap_write_regs(int which, uint16_t* regs, int regno, uint16_t data);
-
- template<flipx_t FlipX>
- void blit(const rectangle &cliprect, uint32_t line, uint32_t xoff, uint32_t yoff, uint32_t attr, uint32_t ctrl, uint32_t bitmap_addr, uint16_t tile);
- void blit_page(const rectangle &cliprect, uint32_t scanline, int depth, uint32_t bitmap_addr, uint16_t *regs);
- uint32_t m_screenbuf[320 * 240];
+ devcb_write16 m_porta_out;
+ devcb_write16 m_portb_out;
+ devcb_write16 m_portc_out;
+ devcb_read16 m_porta_in;
+ devcb_read16 m_portb_in;
+ devcb_read16 m_portc_in;
+
+ devcb_read16 m_adc_in[2];
+
+ devcb_write8 m_chip_sel;
+
+ DECLARE_READ16_MEMBER(porta_r) { return m_porta_in(); }
+ DECLARE_READ16_MEMBER(portb_r) { return m_portb_in(); }
+ DECLARE_READ16_MEMBER(portc_r) { return m_portc_in(); }
+ DECLARE_WRITE16_MEMBER(porta_w) { m_porta_out(offset, data, mem_mask); }
+ DECLARE_WRITE16_MEMBER(portb_w) { m_portb_out(offset, data, mem_mask); }
+ DECLARE_WRITE16_MEMBER(portc_w) { m_portc_out(offset, data, mem_mask); }
+ template <size_t Line> DECLARE_READ16_MEMBER(adc_r) { return m_adc_in[Line](); }
+ DECLARE_WRITE8_MEMBER(cs_w) { m_chip_sel(offset, data, mem_mask); }
+ DECLARE_READ16_MEMBER(get_pal_r) { return 0; /*m_pal_flag;*/ }
+ void configure_spg_io(spg2xx_io_device* io);
+
+ DECLARE_WRITE_LINE_MEMBER(videoirq_w);
};
DECLARE_DEVICE_TYPE(SPG110, spg110_device)
diff --git a/src/devices/machine/spg110_video.cpp b/src/devices/machine/spg110_video.cpp
new file mode 100644
index 00000000000..9a9600b914d
--- /dev/null
+++ b/src/devices/machine/spg110_video.cpp
@@ -0,0 +1,666 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+
+#include "emu.h"
+#include "spg110_video.h"
+
+DEFINE_DEVICE_TYPE(SPG110_VIDEO, spg110_video_device, "spg110_video", "SPG110 System-on-a-Chip (Video)")
+
+spg110_video_device::spg110_video_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_memory_interface(mconfig, *this)
+ , m_space_config("spg110_video", ENDIANNESS_BIG, 16, 32, 0, address_map_constructor(FUNC(spg110_video_device::map_video), this))
+ , m_cpu(*this, finder_base::DUMMY_TAG)
+ , m_screen(*this, finder_base::DUMMY_TAG)
+ , m_palette(*this, "palette")
+ , m_gfxdecode(*this, "gfxdecode")
+ , m_palram(*this, "palram")
+ , m_palctrlram(*this, "palctrlram")
+ , m_sprtileno(*this, "sprtileno")
+ , m_sprattr1(*this, "sprattr1")
+ , m_sprattr2(*this, "sprattr2")
+ , m_video_irq_cb(*this)
+{
+}
+
+spg110_video_device::spg110_video_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : spg110_video_device(mconfig, SPG110_VIDEO, tag, owner, clock)
+{
+}
+
+template<spg110_video_device::flipx_t FlipX>
+void spg110_video_device::draw(const rectangle &cliprect, uint32_t line, uint32_t xoff, uint32_t yoff, uint32_t ctrl, uint32_t bitmap_addr, uint16_t tile, uint8_t yflipmask, uint8_t pal, int32_t h, int32_t w, uint8_t bpp)
+{
+ address_space &space = m_cpu->space(AS_PROGRAM);
+
+ uint32_t nc = (bpp + 1) << 1;
+
+ uint32_t palette_offset = pal;
+
+ palette_offset <<= nc;
+
+ uint32_t bits_per_row = nc * w / 16;
+ uint32_t words_per_tile = bits_per_row * h;
+ uint32_t m = bitmap_addr + words_per_tile * tile + bits_per_row * (line ^ yflipmask);
+ uint32_t bits = 0;
+ uint32_t nbits = 0;
+ uint32_t y = line;
+
+ int yy = (yoff + y) & 0x1ff;
+ if (yy >= 0x01c0)
+ yy -= 0x0200;
+
+ if (yy > 240 || yy < 0)
+ return;
+
+ int y_index = yy * 320;
+
+ for (int32_t x = FlipX ? (w - 1) : 0; FlipX ? x >= 0 : x < w; FlipX ? x-- : x++)
+ {
+ int xx = xoff + x;
+
+ bits <<= nc;
+
+ if (nbits < nc)
+ {
+ uint16_t b = space.read_word(m++ & 0x3fffff);
+ //b = (b << 8) | (b >> 8);
+ bits |= b << (nc - nbits);
+ nbits += 16;
+ }
+ nbits -= nc;
+
+ uint32_t pal = palette_offset + (bits >> 16);
+ bits &= 0xffff;
+
+ xx &= 0x01ff;
+ if (xx >= 0x01c0)
+ xx -= 0x0200;
+
+ if (xx >= 0 && xx < 320)
+ {
+ int pix_index = xx + y_index;
+ const pen_t *pens = m_palette->pens();
+ uint32_t paldata = pens[pal];
+
+ int transmap = m_palctrlram[(pal & 0xf0)>>4];
+
+ bool trans = false;
+
+ if (transmap & 0x10) // maybe values other than 0x010 have other meanings, like blending?
+ if ((pal & 0x0f) == (transmap & 0xf))
+ trans = true;
+
+ if (!trans)
+ {
+ m_screenbuf[pix_index] = paldata;
+ }
+ }
+ }
+}
+
+void spg110_video_device::draw_page(const rectangle &cliprect, uint32_t scanline, int priority, uint32_t bitmap_addr, uint16_t *regs)
+{
+ uint32_t xscroll = regs[0];
+ uint32_t yscroll = regs[1];
+ uint32_t attr = regs[2];
+ uint32_t ctrl = regs[3];
+ uint32_t tilemap = regs[4];
+ uint32_t palette_map = regs[5];
+ address_space &space2 = this->space(0);
+
+ if (!(ctrl & PAGE_ENABLE_MASK))
+ {
+ return;
+ }
+
+// if (((attr & PAGE_PRIORITY_FLAG_MASK) >> PAGE_PRIORITY_FLAG_SHIFT) != priority)
+// {
+// return;
+// }
+
+ uint8_t bpp = attr & 0x03;
+
+ uint32_t tile_h = 8 << ((attr & PAGE_TILE_HEIGHT_MASK) >> PAGE_TILE_HEIGHT_SHIFT);
+ uint32_t tile_w = 8 << ((attr & PAGE_TILE_WIDTH_MASK) >> PAGE_TILE_WIDTH_SHIFT);
+
+ uint32_t tile_count_x = 512 / tile_w;
+
+ uint32_t bitmap_y = (scanline + yscroll) & 0xff;
+ uint32_t y0 = bitmap_y / tile_h;
+ uint32_t tile_scanline = bitmap_y % tile_h;
+ uint32_t tile_address = tile_count_x * y0;
+
+ for (uint32_t x0 = 0; x0 < tile_count_x; x0++, tile_address++)
+ {
+ uint32_t yy = ((tile_h * y0 - yscroll + 0x10) & 0xff) - 0x10;
+ uint32_t xx = (tile_w * x0 - xscroll) & 0x1ff;
+ uint16_t tile = (ctrl & PAGE_WALLPAPER_MASK) ? space2.read_word(tilemap*2) : space2.read_word((tilemap + tile_address)*2);
+ uint16_t extra_attribute = 0;
+
+ if (!tile)
+ continue;
+
+ extra_attribute = space2.read_word((palette_map*2) + tile_address);
+ if (x0 & 1)
+ extra_attribute = (extra_attribute & 0x00ff);
+ else
+ extra_attribute = (extra_attribute & 0xff00) >> 8;
+
+ uint8_t pal = extra_attribute & 0x0f;
+ uint8_t pri = (extra_attribute & 0x30) >> 4;
+ bool flip_x = extra_attribute & 0x40;
+
+ if (pri == priority)
+ {
+
+ if (flip_x)
+ draw<FlipXOn>(cliprect, tile_scanline, xx, yy, ctrl, bitmap_addr, tile, 0, pal, tile_h, tile_w, bpp);
+ else
+ draw<FlipXOff>(cliprect, tile_scanline, xx, yy, ctrl, bitmap_addr, tile, 0, pal, tile_h, tile_w, bpp);
+ }
+
+ }
+}
+
+
+void spg110_video_device::draw_sprite(const rectangle &cliprect, uint32_t scanline, int priority, uint32_t base_addr)
+{
+
+ // m_sprtileno tttt tttt tttt tttt t = tile number (all bits?)
+ // m_sprattr1 xxxx xxxx yyyy yyyy x = low x bits, y = low y bits
+ // m_sprattr2 YXzz pppp hhww fFbb X = high x bit, z = priority, p = palette, h = height, w = width, f = flipy, F = flipx, b = bpp, Y = high y bit
+
+ uint16_t tile = m_sprtileno[base_addr];
+
+ if (!tile)
+ {
+ return;
+ }
+
+ uint32_t bitmap_addr = 0x40 * m_tilebase;
+ uint16_t attr1 = m_sprattr1[base_addr];
+ uint16_t attr2 = m_sprattr2[base_addr];
+
+ int x = (attr1 >> 8) & 0xff;
+ int y = (attr1) & 0xff;
+ uint8_t pri = (attr2 & 0x3000)>>12;
+ bool flip_x = (attr2 & 0x0004)>>2;
+ bool flip_y = (attr2 & 0x0008)>>3;
+
+ if (!(attr2 & 0x4000))
+ x+= 0x100;
+
+ if (!(attr2 & 0x8000))
+ y+= 0x100;
+
+ const uint32_t h = 8 << ((attr2 & PAGE_TILE_HEIGHT_MASK) >> PAGE_TILE_HEIGHT_SHIFT);
+ const uint32_t w = 8 << ((attr2 & PAGE_TILE_WIDTH_MASK) >> PAGE_TILE_WIDTH_SHIFT);
+
+// if (!(m_video_regs[0x42] & SPRITE_COORD_TL_MASK))
+// {
+// x = (160 + x) - w / 2;
+// y = (120 - y) - (h / 2) + 8;
+// }
+
+ y = 0x1ff - y - 128 + 1;
+ x = x - 128 + 32;
+
+ x -= (w / 2);
+ y -= (h / 2);
+
+ x &= 0x01ff;
+ y &= 0x01ff;
+
+ uint32_t tile_line = ((scanline - y)) % h;
+ int16_t test_y = (y + tile_line) & 0x1ff;
+ if (test_y >= 0x01c0)
+ test_y -= 0x0200;
+
+ if (test_y != scanline)
+ {
+ return;
+ }
+
+ //bool blend = (attr & 0x4000);
+ const uint8_t bpp = attr2 & 0x0003;
+ const uint32_t yflipmask = flip_y ? h - 1 : 0;
+ const uint32_t palette_offset = (attr2 & 0x0f00) >> 8;
+
+ if (pri == priority)
+ {
+ if (flip_x)
+ draw<FlipXOn>(cliprect, tile_line, x, y, 0, bitmap_addr, tile, yflipmask, palette_offset, h, w, bpp);
+ else
+ draw<FlipXOff>(cliprect, tile_line, x, y, 0, bitmap_addr, tile, yflipmask, palette_offset, h, w, bpp);
+ }
+}
+
+
+
+void spg110_video_device::draw_sprites(const rectangle &cliprect, uint32_t scanline, int priority)
+{
+ //if (!(m_video_regs[0x42] & SPRITE_ENABLE_MASK))
+ //{
+ // return;
+ //}
+
+ for (uint32_t n = 0; n < 256; n++)
+ {
+ draw_sprite(cliprect, scanline, priority, n);
+ }
+}
+
+
+/* correct, 4bpp gfxs */
+static const gfx_layout charlayout =
+{
+ 8,8,
+ RGN_FRAC(1,1),
+ 4,
+ { STEP4(0,1) },
+ { 0*4,1*4,2*4,3*4,4*4,5*4,6*4,7*4 },
+ { STEP8(0,4*8) },
+ 8*8*4
+};
+
+static const gfx_layout charlayout6 =
+{
+ 8,8,
+ RGN_FRAC(1,1),
+ 6,
+ { 0,1,2,3,4,5 },
+ { STEP8(0,6) },
+ { STEP8(0,6*8) },
+ 8*8*6
+};
+
+static const gfx_layout char16layout =
+{
+ 16,16,
+ RGN_FRAC(1,1),
+ 4,
+ { STEP4(0,1) },
+ { 0*4,1*4,2*4,3*4,4*4,5*4,6*4,7*4, 8*4,9*4,10*4,11*4,12*4,13*4,14*4,15*4 },
+ { STEP16(0,4*16) },
+ 16*16*4
+};
+
+static const gfx_layout char32layout =
+{
+ 32,32,
+ RGN_FRAC(1,1),
+ 4,
+ { STEP4(0,1) },
+ { STEP32(0,4) },
+ { STEP32(0,4*32) },
+ 32*32*4
+};
+
+
+
+static GFXDECODE_START( gfx )
+ GFXDECODE_ENTRY( ":maincpu", 0, charlayout, 0, 16 )
+ GFXDECODE_ENTRY( ":maincpu", 0, char16layout, 0, 16 )
+ GFXDECODE_ENTRY( ":maincpu", 0, char32layout, 0, 16 )
+ GFXDECODE_ENTRY( ":maincpu", 0, charlayout6, 0, 16 ) // correct for lots of the tiles inc. startup text
+GFXDECODE_END
+
+
+void spg110_video_device::device_add_mconfig(machine_config &config)
+{
+ PALETTE(config, m_palette).set_entries(0x100);
+
+ GFXDECODE(config, m_gfxdecode, m_palette, gfx);
+}
+
+
+device_memory_interface::space_config_vector spg110_video_device::memory_space_config() const
+{
+ return space_config_vector {
+ std::make_pair(0, &m_space_config)
+ };
+}
+
+
+// irq source or similar?
+READ16_MEMBER(spg110_video_device::spg110_2063_r)
+{
+ // checks for bits 0x20 and 0x08 in the IRQ function (all IRQs point to the same place)
+
+ // HACK! jak_spdo checks for 0x400 or 0x200 starting some of the games
+ return m_video_irq_status | 0x600;
+}
+
+WRITE16_MEMBER(spg110_video_device::spg110_2063_w)
+{
+ // writes 0x28, probably clears the IRQ / IRQ sources? 0x63 is the same offset for this in spg2xx but bits used seem to be different
+ const uint16_t old = m_video_irq_enable & m_video_irq_status;
+ m_video_irq_status &= ~data;
+ const uint16_t changed = old ^ (m_video_irq_enable & m_video_irq_status);
+ if (changed)
+ check_video_irq();
+}
+
+
+WRITE16_MEMBER(spg110_video_device::spg110_201c_w) { logerror("%s: 201c: %04x\n", machine().describe_context(), data); } // during startup text only
+WRITE16_MEMBER(spg110_video_device::spg110_2020_w) { COMBINE_DATA(&m_tilebase); logerror("%s: 2020: %04x\n", machine().describe_context(), data); } // confirmed as tile base, seems to apply to both layers and sprites, unlike spg2xx which has separate registers
+
+WRITE16_MEMBER(spg110_video_device::spg110_2028_w) { logerror("%s: 2028: %04x\n", machine().describe_context(), data); } // startup
+READ16_MEMBER(spg110_video_device::spg110_2028_r) { return 0x0000; }
+
+WRITE16_MEMBER(spg110_video_device::spg110_2029_w) { logerror("%s: 2029: %04x\n", machine().describe_context(), data); } // 0006, 0008 on startup
+READ16_MEMBER(spg110_video_device::spg110_2029_r) { return 0x0000; }
+
+WRITE16_MEMBER(spg110_video_device::spg110_2031_w) { logerror("%s: 2031: %04x\n", machine().describe_context(), data); } // 014a or 0000 when ball is in trap
+WRITE16_MEMBER(spg110_video_device::spg110_2032_w) { logerror("%s: 2032: %04x\n", machine().describe_context(), data); } // 014a most of the time, 0000 very rarely
+WRITE16_MEMBER(spg110_video_device::spg110_2033_w) { logerror("%s: 2033: %04x\n", machine().describe_context(), data); } // changes, situational, eg when pausing
+WRITE16_MEMBER(spg110_video_device::spg110_2034_w) { logerror("%s: 2034: %04x\n", machine().describe_context(), data); } // 0141 on every scene transition
+WRITE16_MEMBER(spg110_video_device::spg110_2035_w) { logerror("%s: 2035: %04x\n", machine().describe_context(), data); } // 0141 on every scene transition
+WRITE16_MEMBER(spg110_video_device::spg110_2036_w) { logerror("%s: 2036: %04x\n", machine().describe_context(), data); COMBINE_DATA(&m_2036_scroll); } // seems related to ball y position, not scrolling (possibly shadow sprite related?)
+
+READ16_MEMBER(spg110_video_device::spg110_2037_r) { return 0x0000; } // added to something from the PRNG
+WRITE16_MEMBER(spg110_video_device::spg110_2037_w) { logerror("%s: 2037: %04x\n", machine().describe_context(), data); } // 0126 (always?)
+
+WRITE16_MEMBER(spg110_video_device::spg110_2039_w) { logerror("%s: 2039: %04x\n", machine().describe_context(), data); } // 0803 on every scene transition
+
+WRITE16_MEMBER(spg110_video_device::spg110_203c_w) { logerror("%s: 203c: %04x\n", machine().describe_context(), data); } // 0006 on startup, twice
+
+WRITE16_MEMBER(spg110_video_device::spg110_203d_w) { logerror("%s: 203d: %04x\n", machine().describe_context(), data); } // changes, usually between scenes
+
+READ16_MEMBER(spg110_video_device::spg110_2042_r) { return 0x0000; }
+WRITE16_MEMBER(spg110_video_device::spg110_2042_w) { logerror("%s: 2042: %04x\n", machine().describe_context(), data); } // sets bit 0x0004, masks with 0xfffb etc.
+
+WRITE16_MEMBER(spg110_video_device::spg110_2045_w) { logerror("%s: 2045: %04x\n", machine().describe_context(), data); } // 0006 on startup, once
+
+
+WRITE16_MEMBER(spg110_video_device::spg110_205x_w)
+{
+ COMBINE_DATA(&m_palctrlram[offset]);
+}
+
+
+WRITE16_MEMBER(spg110_video_device::dma_unk_2061_w) { COMBINE_DATA(&m_dma_unk_2061); }
+WRITE16_MEMBER(spg110_video_device::dma_dst_step_w) { COMBINE_DATA(&m_dma_dst_step); }
+WRITE16_MEMBER(spg110_video_device::dma_unk_2067_w) { COMBINE_DATA(&m_dma_src_high); }
+WRITE16_MEMBER(spg110_video_device::dma_src_step_w) { COMBINE_DATA(&m_dma_src_step); }
+
+WRITE16_MEMBER(spg110_video_device::dma_dst_w) { COMBINE_DATA(&m_dma_dst); }
+WRITE16_MEMBER(spg110_video_device::dma_src_w) { COMBINE_DATA(&m_dma_src); }
+
+WRITE16_MEMBER(spg110_video_device::dma_len_trigger_w)
+{
+ int length = data & 0x1fff;
+
+ // this is presumably a counter that underflows to 0x1fff, because that's what the wait loop waits for?
+ logerror("%s: (trigger len) %04x with values (unk) %04x (dststep) %04x (unk) %04x (src step) %04x | (dst) %04x (src) %04x\n", machine().describe_context(), data, m_dma_unk_2061, m_dma_dst_step, m_dma_src_high, m_dma_src_step, m_dma_dst, m_dma_src);
+
+ if (m_dma_src_high != 0x0000)
+ {
+ logerror("unknown DMA params are not zero!\n");
+ }
+
+ int source = m_dma_src | m_dma_src_high << 16;
+ int dest = m_dma_dst;
+
+ for (int i = 0; i < length; i++)
+ {
+ address_space &mem = m_cpu->space(AS_PROGRAM);
+ uint16_t val = mem.read_word(source);
+
+ this->space(0).write_word(dest * 2, val, 0xffff);
+
+ source+=m_dma_src_step;
+ dest+=m_dma_dst_step;
+ }
+
+ // not sure, spiderman would suggest that some of these need to reset (unless a missing IRQ clears them)
+ m_dma_unk_2061 = 0;
+ m_dma_dst_step = 0;
+ m_dma_src_high = 0;
+ m_dma_src_step = 0;
+ m_dma_dst = 0;
+ m_dma_src = 0;
+
+ // HACK: it really seems this interrupt status is related to the DMA, but jak_capb doesn't ack it, so must also be a way to disable it?
+ if (m_is_spiderman)
+ {
+ const int i = 0x0002;
+
+ if (m_video_irq_enable & 1)
+ {
+ m_video_irq_status |= i;
+ check_video_irq();
+ }
+ }
+}
+
+WRITE16_MEMBER(spg110_video_device::dma_manual_w)
+{
+ this->space(0).write_word(m_dma_dst * 2, data, 0xffff);
+}
+
+READ16_MEMBER(spg110_video_device::dma_manual_r)
+{
+ uint16_t val = this->space(0).read_word(m_dma_dst * 2);
+ return val;
+}
+
+READ16_MEMBER(spg110_video_device::dma_len_status_r)
+{
+ return 0x1fff; // DMA related?
+}
+
+
+READ16_MEMBER(spg110_video_device::tmap0_regs_r) { return tmap0_regs[offset]; }
+READ16_MEMBER(spg110_video_device::tmap1_regs_r) { return tmap1_regs[offset]; }
+
+void spg110_video_device::tilemap_write_regs(int which, uint16_t* regs, int regno, uint16_t data)
+{
+ switch (regno)
+ {
+ case 0x0: // Page X scroll
+ logerror("video_w: Page %d X Scroll = %04x\n", which, data & 0x01ff);
+ regs[regno] = data & 0x01ff;
+ break;
+
+ case 0x1: // Page Y scroll
+ logerror("video_w: Page %d Y Scroll = %04x\n", which, data & 0x00ff);
+ regs[regno] = data & 0x00ff;
+ break;
+
+ case 0x2: // Page Attributes
+ // 'priority' can't be priority here as it is on spg2xx, or the scores in attract will be behind the table, it really seems to be per attribute bit instead
+
+ logerror("video_w: Page %d Attributes = %04x (Priority:%d, Palette:%d, VSize:%d, HSize:%d, FlipY:%d, FlipX:%d, BPP:%d)\n", which, data
+ , (data >> 12) & 3, (data >> 8) & 15, 8 << ((data >> 6) & 3), 8 << ((data >> 4) & 3), BIT(data, 3), BIT(data, 2), 2 * ((data & 3) + 1));
+ regs[regno] = data;
+ break;
+
+ case 0x3: // Page Control
+ logerror("video_w: Page %d Control = %04x (Blend:%d, HiColor:%d, RowScroll:%d, Enable:%d, Wallpaper:%d, RegSet:%d, Bitmap:%d)\n", which, data
+ , BIT(data, 8), BIT(data, 7), BIT(data, 4), BIT(data, 3), BIT(data, 2), BIT(data, 1), BIT(data, 0));
+ regs[regno] = data;
+ break;
+
+ case 0x4: // Page Tile Address
+ logerror("video_w: Page %d Tile Address = %04x\n", which, data);
+ regs[regno] = data;
+ break;
+
+ case 0x5: // Page Attribute Address
+ logerror("video_w: Page %d Attribute Address = %04x\n", which, data);
+ regs[regno] = data;
+ break;
+ }
+}
+
+
+WRITE16_MEMBER(spg110_video_device::tmap0_regs_w)
+{
+ tilemap_write_regs(0, tmap0_regs,offset,data);
+}
+
+
+WRITE16_MEMBER(spg110_video_device::tmap1_regs_w)
+{
+ tilemap_write_regs(1, tmap1_regs,offset,data);
+}
+
+// this seems to be a different, non-cpu mapped space only accessible via the DMA?
+void spg110_video_device::map_video(address_map &map)
+{
+ // are these addresses hardcoded, or can they move (in which case tilemap system isn't really suitable)
+ map(0x00000, 0x03fff).ram(); // 2fff?
+
+ map(0x04000, 0x041ff).ram().share("sprtileno"); // seems to be 3 blocks, almost certainly spritelist
+ map(0x04200, 0x043ff).ram().share("sprattr1");
+ map(0x04400, 0x045ff).ram().share("sprattr2");
+
+ map(0x08000, 0x081ff).ram().w(FUNC(spg110_video_device::palette_w)).share("palram"); // palette format unknown
+}
+
+void spg110_video_device::device_start()
+{
+ save_item(NAME(m_dma_src_step));
+ save_item(NAME(m_dma_dst_step));
+ save_item(NAME(m_dma_unk_2061));
+ save_item(NAME(m_dma_src_high));
+ save_item(NAME(m_dma_dst));
+ save_item(NAME(m_dma_src));
+ save_item(NAME(m_bg_scrollx));
+ save_item(NAME(m_bg_scrolly));
+ save_item(NAME(m_2036_scroll));
+
+ m_video_irq_cb.resolve();
+
+ if (!strcmp(machine().system().name, "jak_spdmo"))
+ m_is_spiderman = true;
+ else
+ m_is_spiderman = false;
+}
+
+void spg110_video_device::device_reset()
+{
+ m_dma_src_step = 0;
+ m_dma_dst_step = 0;
+ m_dma_unk_2061 = 0;
+ m_dma_src_high = 0;
+ m_dma_dst = 0;
+ m_dma_src = 0;
+ m_bg_scrollx = 0;
+ m_bg_scrolly = 0;
+ m_2036_scroll = 0;
+
+ // is there actually an enable register here?
+ m_video_irq_enable = 0xffff;
+ m_video_irq_status = 0x0000;
+}
+
+double spg110_video_device::hue2rgb(double p, double q, double t)
+{
+ if (t < 0) t += 1;
+ if (t > 1) t -= 1;
+ if (t < 1 / 6.0f) return p + (q - p) * 6 * t;
+ if (t < 1 / 2.0f) return q;
+ if (t < 2 / 3.0f) return p + (q - p) * (2 / 3.0f - t) * 6;
+ return p;
+}
+
+
+// wrong format!
+WRITE16_MEMBER(spg110_video_device::palette_w)
+{
+ // probably not
+ const double h_add = 0.65f;
+ const double h_divide = 43.2f;
+
+ COMBINE_DATA(&m_palram[offset]);
+
+ uint16_t dat = m_palram[offset];
+
+ // llll lsss sshh hhhh
+ int l_raw = (dat & 0xfe00) >> 10;
+ int sl_raw = (dat & 0x03c0) >> 6;
+ int h_raw = (dat & 0x003f) >> 0;
+
+ double l = (double)l_raw / 63.0f;
+ double s = (double)sl_raw / 15.0f;
+ double h = (double)h_raw / h_divide;
+
+ // probably not
+ h += h_add;
+
+ if (h>1.0f)
+ h-= 1.0f;
+
+ double r, g, b;
+
+ if (s == 0) {
+ r = g = b = l; // greyscale
+ } else {
+ double q = l < 0.5f ? l * (1 + s) : l + s - l * s;
+ double p = 2 * l - q;
+ r = hue2rgb(p, q, h + 1/3.0f);
+ g = hue2rgb(p, q, h);
+ b = hue2rgb(p, q, h - 1/3.0f);
+ }
+
+ int r_real = r * 255.0f;
+ int g_real = g * 255.0f;
+ int b_real = b * 255.0f;
+
+ m_palette->set_pen_color(offset, r_real, g_real, b_real);
+}
+
+uint32_t spg110_video_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+{
+ memset(&m_screenbuf[320 * cliprect.min_y], 0, 4 * 320 * ((cliprect.max_y - cliprect.min_y) + 1));
+
+ const uint32_t page1_addr = 0x40 * m_tilebase;//0x40 * m_video_regs[0x20];
+ const uint32_t page2_addr = 0x40 * m_tilebase;//0x40 * m_video_regs[0x21];
+ uint16_t *page1_regs = tmap0_regs;
+ uint16_t *page2_regs = tmap1_regs;
+
+ for (uint32_t scanline = (uint32_t)cliprect.min_y; scanline <= (uint32_t)cliprect.max_y; scanline++)
+ {
+ for (int i = 0; i < 4; i++)
+ {
+ draw_page(cliprect, scanline, i, page2_addr, page2_regs);
+ draw_page(cliprect, scanline, i, page1_addr, page1_regs);
+ draw_sprites(cliprect, scanline, i);
+ }
+ }
+
+ for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
+ {
+ uint32_t *dest = &bitmap.pix32(y, cliprect.min_x);
+ uint32_t *src = &m_screenbuf[cliprect.min_x + 320 * y];
+ memcpy(dest, src, sizeof(uint32_t) * ((cliprect.max_x - cliprect.min_x) + 1));
+ }
+
+ return 0;
+}
+
+WRITE_LINE_MEMBER(spg110_video_device::vblank)
+{
+ const int i = 0x0008;
+
+ if (!state)
+ {
+ m_video_irq_status &= ~i;
+ check_video_irq();
+ return;
+ }
+
+ if (m_video_irq_enable & 1)
+ {
+ m_video_irq_status |= i;
+ check_video_irq();
+ }
+}
+
+void spg110_video_device::check_video_irq()
+{
+ m_video_irq_cb((m_video_irq_status & m_video_irq_enable) ? ASSERT_LINE : CLEAR_LINE);
+} \ No newline at end of file
diff --git a/src/devices/machine/spg110_video.h b/src/devices/machine/spg110_video.h
new file mode 100644
index 00000000000..bd8a7fa8e04
--- /dev/null
+++ b/src/devices/machine/spg110_video.h
@@ -0,0 +1,171 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+
+#ifndef MAME_MACHINE_SPG110_VIDEO_H
+#define MAME_MACHINE_SPG110_VIDEO_H
+
+#pragma once
+
+#include "cpu/unsp/unsp.h"
+#include "emupal.h"
+#include "screen.h"
+//#include "machine/timer.h"
+
+
+class spg110_video_device : public device_t, public device_memory_interface
+
+{
+public:
+ spg110_video_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+ spg110_video_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ template <typename T, typename U>
+ spg110_video_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&cpu_tag, U &&screen_tag)
+ : spg110_video_device(mconfig, tag, owner, clock)
+ {
+ m_cpu.set_tag(std::forward<T>(cpu_tag));
+ m_screen.set_tag(std::forward<U>(screen_tag));
+ }
+
+ void map_video(address_map &map);
+
+ double hue2rgb(double p, double q, double t);
+ uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ DECLARE_WRITE_LINE_MEMBER(vblank);
+
+ DECLARE_WRITE16_MEMBER(spg110_201c_w);
+ DECLARE_WRITE16_MEMBER(spg110_2020_w);
+
+ DECLARE_WRITE16_MEMBER(spg110_2028_w);
+ DECLARE_WRITE16_MEMBER(spg110_2029_w);
+
+ DECLARE_READ16_MEMBER(spg110_2028_r);
+ DECLARE_READ16_MEMBER(spg110_2029_r);
+
+ DECLARE_WRITE16_MEMBER(spg110_2031_w);
+ DECLARE_WRITE16_MEMBER(spg110_2032_w);
+ DECLARE_WRITE16_MEMBER(spg110_2033_w);
+ DECLARE_WRITE16_MEMBER(spg110_2034_w);
+ DECLARE_WRITE16_MEMBER(spg110_2035_w);
+ DECLARE_WRITE16_MEMBER(spg110_2036_w);
+ DECLARE_WRITE16_MEMBER(spg110_2037_w);
+ DECLARE_WRITE16_MEMBER(spg110_2039_w);
+
+ DECLARE_WRITE16_MEMBER(spg110_203c_w);
+ DECLARE_WRITE16_MEMBER(spg110_203d_w);
+
+ DECLARE_WRITE16_MEMBER(spg110_2042_w);
+
+ DECLARE_WRITE16_MEMBER(spg110_2045_w);
+
+ DECLARE_WRITE16_MEMBER(spg110_205x_w);
+
+
+ DECLARE_READ16_MEMBER(spg110_2037_r);
+ DECLARE_READ16_MEMBER(spg110_2042_r);
+
+ DECLARE_WRITE16_MEMBER(dma_dst_w);
+ DECLARE_WRITE16_MEMBER(dma_unk_2061_w);
+ DECLARE_WRITE16_MEMBER(dma_len_trigger_w);
+ DECLARE_WRITE16_MEMBER(spg110_2063_w);
+ DECLARE_WRITE16_MEMBER(dma_dst_step_w);
+ DECLARE_WRITE16_MEMBER(dma_src_w);
+ DECLARE_WRITE16_MEMBER(dma_unk_2067_w);
+ DECLARE_WRITE16_MEMBER(dma_src_step_w);
+
+ DECLARE_READ16_MEMBER(dma_len_status_r);
+ DECLARE_READ16_MEMBER(spg110_2063_r);
+
+ DECLARE_READ16_MEMBER(dma_manual_r);
+ DECLARE_WRITE16_MEMBER(dma_manual_w);
+
+ DECLARE_READ16_MEMBER(tmap0_regs_r);
+ DECLARE_READ16_MEMBER(tmap1_regs_r);
+ DECLARE_WRITE16_MEMBER(tmap0_regs_w);
+ DECLARE_WRITE16_MEMBER(tmap1_regs_w);
+
+ auto write_video_irq_callback() { return m_video_irq_cb.bind(); };
+
+protected:
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ virtual space_config_vector memory_space_config() const override;
+
+ address_space_config m_space_config;
+
+private:
+ enum
+ {
+ PAGE_ENABLE_MASK = 0x0008,
+ PAGE_WALLPAPER_MASK = 0x0004,
+
+ PAGE_PRIORITY_FLAG_MASK = 0x3000,
+ PAGE_PRIORITY_FLAG_SHIFT = 12,
+ PAGE_TILE_HEIGHT_MASK = 0x00c0,
+ PAGE_TILE_HEIGHT_SHIFT = 6,
+ PAGE_TILE_WIDTH_MASK = 0x0030,
+ PAGE_TILE_WIDTH_SHIFT = 4,
+
+ TILE_X_FLIP = 0x0004,
+ TILE_Y_FLIP = 0x0008
+ };
+
+ enum flipx_t : bool
+ {
+ FlipXOff = false,
+ FlipXOn = true
+ };
+
+ required_device<unsp_device> m_cpu;
+ required_device<screen_device> m_screen;
+ required_device<palette_device> m_palette;
+ required_device<gfxdecode_device> m_gfxdecode;
+ required_shared_ptr<uint16_t> m_palram;
+ required_shared_ptr<uint16_t> m_palctrlram;
+ required_shared_ptr<uint16_t> m_sprtileno;
+ required_shared_ptr<uint16_t> m_sprattr1;
+ required_shared_ptr<uint16_t> m_sprattr2;
+
+ DECLARE_WRITE16_MEMBER(palette_w);
+
+ uint16_t tmap0_regs[0x6];
+ uint16_t tmap1_regs[0x6];
+
+ uint16_t m_dma_src_step;
+ uint16_t m_dma_dst_step;
+ uint16_t m_dma_unk_2061;
+ uint16_t m_dma_src_high;
+
+ uint16_t m_dma_dst;
+ uint16_t m_dma_src;
+
+ uint16_t m_bg_scrollx;
+ uint16_t m_bg_scrolly;
+ uint16_t m_2036_scroll;
+
+ uint16_t m_tilebase;
+
+ uint16_t m_video_irq_enable;
+ uint16_t m_video_irq_status;
+ void check_video_irq();
+
+ void tilemap_write_regs(int which, uint16_t* regs, int regno, uint16_t data);
+
+ template<flipx_t FlipX>
+ void draw(const rectangle &cliprect, uint32_t line, uint32_t xoff, uint32_t yoff, uint32_t ctrl, uint32_t bitmap_addr, uint16_t tile, uint8_t yflipmask, uint8_t pal, int32_t h, int32_t w, uint8_t bpp);
+ void draw_page(const rectangle &cliprect, uint32_t scanline, int priority, uint32_t bitmap_addr, uint16_t *regs);
+ void draw_sprite(const rectangle &cliprect, uint32_t scanline, int priority, uint32_t base_addr);
+ void draw_sprites(const rectangle &cliprect, uint32_t scanline, int priority);
+
+ uint32_t m_screenbuf[320 * 240];
+ bool m_is_spiderman;
+
+ devcb_write_line m_video_irq_cb;
+};
+
+DECLARE_DEVICE_TYPE(SPG110_VIDEO, spg110_video_device)
+
+#endif // MAME_MACHINE_SPG110_VIDEO_H
diff --git a/src/devices/machine/spg2xx.cpp b/src/devices/machine/spg2xx.cpp
index 5345f12b639..6d9d18fb3a2 100644
--- a/src/devices/machine/spg2xx.cpp
+++ b/src/devices/machine/spg2xx.cpp
@@ -17,55 +17,14 @@
DEFINE_DEVICE_TYPE(SPG24X, spg24x_device, "spg24x", "SPG240-series System-on-a-Chip")
DEFINE_DEVICE_TYPE(SPG28X, spg28x_device, "spg28x", "SPG280-series System-on-a-Chip")
-#define LOG_IO_READS (1U << 1)
-#define LOG_IO_WRITES (1U << 2)
-#define LOG_UNKNOWN_IO (1U << 3)
-#define LOG_IRQS (1U << 4)
-#define LOG_VLINES (1U << 5)
-#define LOG_GPIO (1U << 6)
-#define LOG_UART (1U << 7)
-#define LOG_I2C (1U << 8)
-#define LOG_DMA (1U << 9)
-#define LOG_SEGMENT (1U << 10)
-#define LOG_WATCHDOG (1U << 11)
-#define LOG_TIMERS (1U << 12)
-#define LOG_SPU_READS (1U << 13)
-#define LOG_SPU_WRITES (1U << 14)
-#define LOG_UNKNOWN_SPU (1U << 15)
-#define LOG_CHANNEL_READS (1U << 16)
-#define LOG_CHANNEL_WRITES (1U << 17)
-#define LOG_ENVELOPES (1U << 18)
-#define LOG_SAMPLES (1U << 19)
-#define LOG_RAMPDOWN (1U << 20)
-#define LOG_BEAT (1U << 21)
-#define LOG_PPU_READS (1U << 22)
-#define LOG_PPU_WRITES (1U << 23)
-#define LOG_UNKNOWN_PPU (1U << 24)
-#define LOG_FIQ (1U << 25)
-#define LOG_SIO (1U << 26)
-#define LOG_EXT_MEM (1U << 27)
-#define LOG_EXTINT (1U << 28)
-#define LOG_IO (LOG_IO_READS | LOG_IO_WRITES | LOG_IRQS | LOG_GPIO | LOG_UART | LOG_I2C | LOG_DMA | LOG_TIMERS | LOG_EXTINT | LOG_UNKNOWN_IO)
-#define LOG_CHANNELS (LOG_CHANNEL_READS | LOG_CHANNEL_WRITES)
-#define LOG_SPU (LOG_SPU_READS | LOG_SPU_WRITES | LOG_UNKNOWN_SPU | LOG_CHANNEL_READS | LOG_CHANNEL_WRITES \
- | LOG_ENVELOPES | LOG_SAMPLES | LOG_RAMPDOWN | LOG_BEAT)
-#define LOG_PPU (LOG_PPU_READS | LOG_PPU_WRITES | LOG_UNKNOWN_PPU)
-#define LOG_ALL (LOG_IO | LOG_SPU | LOG_PPU | LOG_VLINES | LOG_SEGMENT | LOG_FIQ)
-
-#define VERBOSE (0)
-#include "logmacro.h"
-
-#define SPG_DEBUG_VIDEO (0)
-
-#define IO_IRQ_ENABLE m_io_regs[0x21]
-#define IO_IRQ_STATUS m_io_regs[0x22]
-#define VIDEO_IRQ_ENABLE m_video_regs[0x62]
-#define VIDEO_IRQ_STATUS m_video_regs[0x63]
spg2xx_device::spg2xx_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, type, tag, owner, clock)
, device_mixer_interface(mconfig, *this, 2)
, m_spg_audio(*this, "spgaudio")
+ , m_spg_io(*this, "spgio")
+ , m_spg_sysdma(*this, "spgsysdma")
+ , m_spg_video(*this, "spgvideo")
, m_rowscrolloffset(15)
, m_porta_out(*this)
, m_portb_out(*this)
@@ -80,9 +39,6 @@ spg2xx_device::spg2xx_device(const machine_config &mconfig, device_type type, co
, m_chip_sel(*this)
, m_cpu(*this, finder_base::DUMMY_TAG)
, m_screen(*this, finder_base::DUMMY_TAG)
- , m_scrollram(*this, "scrollram")
- , m_paletteram(*this, "paletteram")
- , m_spriteram(*this, "spriteram")
{
}
@@ -99,28 +55,20 @@ spg28x_device::spg28x_device(const machine_config &mconfig, const char *tag, dev
void spg2xx_device::map(address_map &map)
{
map(0x000000, 0x0027ff).ram();
- map(0x002800, 0x0028ff).rw(FUNC(spg2xx_device::video_r), FUNC(spg2xx_device::video_w));
- map(0x002900, 0x002aff).ram().share("scrollram");
- map(0x002b00, 0x002bff).ram().share("paletteram");
- map(0x002c00, 0x002fff).ram().share("spriteram");
+ map(0x002800, 0x0028ff).rw(m_spg_video, FUNC(spg2xx_video_device::video_r), FUNC(spg2xx_video_device::video_w));
+ map(0x002900, 0x002aff).ram().share("spgvideo:scrollram");
+ map(0x002b00, 0x002bff).ram().share("spgvideo:paletteram");
+ map(0x002c00, 0x002fff).ram().share("spgvideo:spriteram");
map(0x003000, 0x0031ff).rw(m_spg_audio, FUNC(spg2xx_audio_device::audio_r), FUNC(spg2xx_audio_device::audio_w));
map(0x003200, 0x0033ff).rw(m_spg_audio, FUNC(spg2xx_audio_device::audio_phase_r), FUNC(spg2xx_audio_device::audio_phase_w));
map(0x003400, 0x0037ff).rw(m_spg_audio, FUNC(spg2xx_audio_device::audio_ctrl_r), FUNC(spg2xx_audio_device::audio_ctrl_w));
- map(0x003d00, 0x003eff).rw(FUNC(spg2xx_device::io_r), FUNC(spg2xx_device::io_w));
+ map(0x003d00, 0x003d2f).rw(m_spg_io, FUNC(spg2xx_io_device::io_r), FUNC(spg2xx_io_device::io_w));
+ map(0x003d30, 0x003dff).rw(m_spg_io, FUNC(spg2xx_io_device::io_extended_r), FUNC(spg2xx_io_device::io_extended_w));
+ map(0x003e00, 0x003e03).rw(m_spg_sysdma, FUNC(spg2xx_sysdma_device::dma_r), FUNC(spg2xx_sysdma_device::dma_w));
}
void spg2xx_device::device_start()
{
- for (uint8_t i = 0; i < 32; i++)
- {
- m_rgb5_to_rgb8[i] = (i << 3) | (i >> 2);
- }
- for (uint16_t i = 0; i < 0x8000; i++)
- {
- m_rgb555_to_rgb888[i] = (m_rgb5_to_rgb8[(i >> 10) & 0x1f] << 16) |
- (m_rgb5_to_rgb8[(i >> 5) & 0x1f] << 8) |
- (m_rgb5_to_rgb8[(i >> 0) & 0x1f] << 0);
- }
m_porta_out.resolve_safe();
m_portb_out.resolve_safe();
m_portc_out.resolve_safe();
@@ -134,2028 +82,115 @@ void spg2xx_device::device_start()
m_uart_tx.resolve_safe();
m_chip_sel.resolve_safe();
- m_tmb1 = timer_alloc(TIMER_TMB1);
- m_tmb2 = timer_alloc(TIMER_TMB2);
- m_tmb1->adjust(attotime::never);
- m_tmb2->adjust(attotime::never);
-
- m_screenpos_timer = timer_alloc(TIMER_SCREENPOS);
- m_screenpos_timer->adjust(attotime::never);
-
- m_uart_tx_timer = timer_alloc(TIMER_UART_TX);
- m_uart_tx_timer->adjust(attotime::never);
-
- m_uart_rx_timer = timer_alloc(TIMER_UART_RX);
- m_uart_rx_timer->adjust(attotime::never);
-
- m_4khz_timer = timer_alloc(TIMER_4KHZ);
- m_4khz_timer->adjust(attotime::never);
-
- m_timer_src_ab = timer_alloc(TIMER_SRC_AB);
- m_timer_src_ab->adjust(attotime::never);
-
- m_timer_src_c = timer_alloc(TIMER_SRC_C);
- m_timer_src_c->adjust(attotime::never);
-
- save_item(NAME(m_timer_a_preload));
- save_item(NAME(m_timer_b_preload));
- save_item(NAME(m_timer_b_divisor));
- save_item(NAME(m_timer_b_tick_rate));
-
- save_item(NAME(m_hide_page0));
- save_item(NAME(m_hide_page1));
- save_item(NAME(m_hide_sprites));
- save_item(NAME(m_debug_sprites));
- save_item(NAME(m_debug_blit));
- save_item(NAME(m_debug_palette));
- save_item(NAME(m_sprite_index_to_debug));
-
- save_item(NAME(m_io_regs));
- save_item(NAME(m_uart_rx_fifo));
- save_item(NAME(m_uart_rx_fifo_start));
- save_item(NAME(m_uart_rx_fifo_end));
- save_item(NAME(m_uart_rx_fifo_count));
- save_item(NAME(m_uart_rx_available));
- save_item(NAME(m_uart_rx_irq));
- save_item(NAME(m_uart_tx_irq));
-
- save_item(NAME(m_extint));
-
- save_item(NAME(m_video_regs));
save_item(NAME(m_sprite_limit));
save_item(NAME(m_pal_flag));
-
- save_item(NAME(m_2khz_divider));
- save_item(NAME(m_1khz_divider));
- save_item(NAME(m_4hz_divider));
-
- save_item(NAME(m_uart_baud_rate));
}
void spg2xx_device::device_reset()
{
- memset(m_video_regs, 0, 0x100 * sizeof(uint16_t));
- memset(m_io_regs, 0, 0x200 * sizeof(uint16_t));
-
- m_timer_a_preload = 0;
- m_timer_b_preload = 0;
- m_timer_b_divisor = 0;
- m_timer_b_tick_rate = 0;
-
- m_io_regs[0x23] = 0x0028;
- m_io_regs[0x2c] = 0x1418;
- m_io_regs[0x2d] = 0x1658;
-
- m_uart_rx_available = false;
- memset(m_uart_rx_fifo, 0, ARRAY_LENGTH(m_uart_rx_fifo));
- m_uart_rx_fifo_start = 0;
- m_uart_rx_fifo_end = 0;
- m_uart_rx_fifo_count = 0;
- m_uart_tx_irq = false;
- m_uart_rx_irq = false;
-
- memset(m_extint, 0, sizeof(bool) * 2);
-
- m_video_regs[0x36] = 0xffff;
- m_video_regs[0x37] = 0xffff;
- m_video_regs[0x3c] = 0x0020;
- m_video_regs[0x42] = 0x0001;
-
- m_hide_page0 = false;
- m_hide_page1 = false;
- m_hide_sprites = false;
- m_debug_sprites = false;
- m_debug_blit = false;
- m_debug_palette = false;
- m_sprite_index_to_debug = 0;
-
- m_4khz_timer->adjust(attotime::from_hz(4096), 0, attotime::from_hz(4096));
-
- m_2khz_divider = 0;
- m_1khz_divider = 0;
- m_4hz_divider = 0;
}
-WRITE_LINE_MEMBER(spg2xx_device::audioirq_w)
+WRITE_LINE_MEMBER(spg2xx_device::videoirq_w)
{
- if (state == ASSERT_LINE)
- {
- m_cpu->set_state_unsynced(UNSP_IRQ4_LINE, ASSERT_LINE);
- }
- else
- {
- m_cpu->set_state_unsynced(UNSP_IRQ4_LINE, CLEAR_LINE);
- }
+ m_cpu->set_state_unsynced(UNSP_IRQ0_LINE, state);
}
-READ16_MEMBER(spg2xx_device::space_r)
+WRITE_LINE_MEMBER(spg2xx_device::timerirq_w)
{
- address_space &cpuspace = m_cpu->space(AS_PROGRAM);
- return cpuspace.read_word(offset);
+ m_cpu->set_state_unsynced(UNSP_IRQ2_LINE, state);
}
-/*************************
-* Video Hardware *
-*************************/
-
-// Perform a lerp between a and b
-inline uint8_t spg2xx_device::mix_channel(uint8_t bottom, uint8_t top)
+WRITE_LINE_MEMBER(spg2xx_device::uartirq_w)
{
- uint8_t alpha = (m_video_regs[0x2a] & 3) << 6;
- return ((256 - alpha) * bottom + alpha * top) >> 8;
+ m_cpu->set_state_unsynced(UNSP_IRQ3_LINE, state);
}
-template<spg2xx_device::blend_enable_t Blend, spg2xx_device::rowscroll_enable_t RowScroll, spg2xx_device::flipx_t FlipX>
-void spg2xx_device::blit(const rectangle &cliprect, uint32_t line, uint32_t xoff, uint32_t yoff, uint32_t attr, uint32_t ctrl, uint32_t bitmap_addr, uint16_t tile)
-{
- address_space &space = m_cpu->space(AS_PROGRAM);
-
- int32_t h = 8 << ((attr & PAGE_TILE_HEIGHT_MASK) >> PAGE_TILE_HEIGHT_SHIFT);
- int32_t w = 8 << ((attr & PAGE_TILE_WIDTH_MASK) >> PAGE_TILE_WIDTH_SHIFT);
-
- uint32_t yflipmask = attr & TILE_Y_FLIP ? h - 1 : 0;
-
- uint32_t nc = ((attr & 0x0003) + 1) << 1;
-
- uint32_t palette_offset = (attr & 0x0f00) >> 4;
- if (SPG_DEBUG_VIDEO && m_debug_blit)
- {
- printf("s:%d line:%d xy:%08x,%08x attr:%08x ctrl:%08x bitmap_addr:%08x tile:%04x\n", cliprect.min_x, line, xoff, yoff, attr, ctrl, bitmap_addr, tile);
- printf("hw:%d,%d f:%d,%d yfm:%d ncols:%d pobs:%02x ", w, h, (attr & TILE_X_FLIP) ? 1 : 0, (attr & TILE_Y_FLIP) ? 1 : 0, yflipmask, nc, palette_offset);
- }
- palette_offset >>= nc;
- palette_offset <<= nc;
- if (SPG_DEBUG_VIDEO && m_debug_blit)
- {
- printf("poas:%02x\n", palette_offset);
- }
-
- uint32_t bits_per_row = nc * w / 16;
- uint32_t words_per_tile = bits_per_row * h;
- uint32_t m = bitmap_addr + words_per_tile * tile + bits_per_row * (line ^ yflipmask);
- uint32_t bits = 0;
- uint32_t nbits = 0;
- uint32_t y = line;
-
- int yy = (yoff + y) & 0x1ff;
- if (yy >= 0x01c0)
- yy -= 0x0200;
-
- if (yy > 240 || yy < 0)
- return;
-
- if (SPG_DEBUG_VIDEO && m_debug_blit)
- printf("%3d:\n", yy);
-
- int y_index = yy * 320;
-
- for (int32_t x = FlipX ? (w - 1) : 0; FlipX ? x >= 0 : x < w; FlipX ? x-- : x++)
- {
- int xx = xoff + x;
-
- bits <<= nc;
- if (SPG_DEBUG_VIDEO && m_debug_blit)
- printf(" %08x:%d ", bits, nbits);
- if (nbits < nc)
- {
- uint16_t b = space.read_word(m++ & 0x3fffff);
- b = (b << 8) | (b >> 8);
- bits |= b << (nc - nbits);
- nbits += 16;
- if (SPG_DEBUG_VIDEO && m_debug_blit)
- printf("(%04x:%08x:%d) ", b, bits, nbits);
- }
- nbits -= nc;
-
- uint32_t pal = palette_offset + (bits >> 16);
- if (SPG_DEBUG_VIDEO && m_debug_blit)
- printf("%02x:%02x:%04x ", bits >> 16, pal, bits & 0xffff);
- bits &= 0xffff;
-
- if (RowScroll)
- xx -= (int16_t)m_scrollram[(yy + m_rowscrolloffset) & 0x1ff];
-
- xx &= 0x01ff;
- if (xx >= 0x01c0)
- xx -= 0x0200;
-
- if (xx >= 0 && xx < 320)
- {
- int pix_index = xx + y_index;
-
- uint16_t rgb = m_paletteram[pal];
- if (SPG_DEBUG_VIDEO && m_debug_blit)
- printf("rgb:%04x ", rgb);
-
- if (!(rgb & 0x8000))
- {
- if (Blend)
- {
- if (SPG_DEBUG_VIDEO && m_debug_blit)
- printf("M\n");
- m_screenbuf[pix_index] = (mix_channel((uint8_t)(m_screenbuf[pix_index] >> 16), m_rgb5_to_rgb8[(rgb >> 10) & 0x1f]) << 16) |
- (mix_channel((uint8_t)(m_screenbuf[pix_index] >> 8), m_rgb5_to_rgb8[(rgb >> 5) & 0x1f]) << 8) |
- (mix_channel((uint8_t)(m_screenbuf[pix_index] >> 0), m_rgb5_to_rgb8[rgb & 0x1f]));
- }
- else
- {
- if (SPG_DEBUG_VIDEO && m_debug_blit)
- printf("S\n");
- m_screenbuf[pix_index] = m_rgb555_to_rgb888[rgb];
- }
- }
- else if (SPG_DEBUG_VIDEO && m_debug_blit)
- {
- printf("X\n");
- }
- }
- }
-}
-
-void spg2xx_device::blit_page(const rectangle &cliprect, uint32_t scanline, int depth, uint32_t bitmap_addr, uint16_t *regs)
-{
- uint32_t xscroll = regs[0];
- uint32_t yscroll = regs[1];
- uint32_t attr = regs[2];
- uint32_t ctrl = regs[3];
- uint32_t tilemap = regs[4];
- uint32_t palette_map = regs[5];
- address_space &space = m_cpu->space(AS_PROGRAM);
-
- if (!(ctrl & PAGE_ENABLE_MASK))
- {
- return;
- }
-
- if (((attr & PAGE_DEPTH_FLAG_MASK) >> PAGE_DEPTH_FLAG_SHIFT) != depth)
- {
- return;
- }
-
- uint32_t tile_h = 8 << ((attr & PAGE_TILE_HEIGHT_MASK) >> PAGE_TILE_HEIGHT_SHIFT);
- uint32_t tile_w = 8 << ((attr & PAGE_TILE_WIDTH_MASK) >> PAGE_TILE_WIDTH_SHIFT);
-
- uint32_t tile_count_x = 512 / tile_w;
-
- uint32_t bitmap_y = (scanline + yscroll) & 0xff;
- uint32_t y0 = bitmap_y / tile_h;
- uint32_t tile_scanline = bitmap_y % tile_h;
- uint32_t tile_address = tile_count_x * y0;
- if (SPG_DEBUG_VIDEO && machine().input().code_pressed(KEYCODE_H))
- printf("s:%3d | baddr:%08x | yscr:%3d | bity:%3d | y0:%2d | ts:%2d\n", scanline, bitmap_addr, yscroll, bitmap_y, y0, tile_scanline);
-
- if (SPG_DEBUG_VIDEO && machine().input().code_pressed(KEYCODE_EQUALS))
- m_debug_blit = true;
- for (uint32_t x0 = 0; x0 < tile_count_x; x0++, tile_address++)
- {
- uint32_t yy = ((tile_h * y0 - yscroll + 0x10) & 0xff) - 0x10;
- uint32_t xx = (tile_w * x0 - xscroll) & 0x1ff;
- uint16_t tile = (ctrl & PAGE_WALLPAPER_MASK) ? space.read_word(tilemap) : space.read_word(tilemap + tile_address);
- uint16_t palette = 0;
-
- if (!tile)
- continue;
-
- palette = (ctrl & PAGE_WALLPAPER_MASK) ? space.read_word(palette_map) : space.read_word(palette_map + tile_address / 2);
- if (x0 & 1)
- palette >>= 8;
-
- uint32_t tileattr = attr;
- uint32_t tilectrl = ctrl;
- if ((ctrl & 2) == 0)
- { // -(1) bld(1) flip(2) pal(4)
- tileattr &= ~0x000c;
- tileattr |= (palette >> 2) & 0x000c; // flip
-
- tileattr &= ~0x0f00;
- tileattr |= (palette << 8) & 0x0f00; // palette
-
- tilectrl &= ~0x0100;
- tilectrl |= (palette << 2) & 0x0100; // blend
- }
-
- bool blend = (tileattr & 0x4000 || tilectrl & 0x0100);
- bool row_scroll = (tilectrl & 0x0010);
- bool flip_x = (tileattr & TILE_X_FLIP);
-
- if (blend)
- {
- if (row_scroll)
- {
- if (flip_x)
- blit<BlendOn, RowScrollOn, FlipXOn>(cliprect, tile_scanline, xx, yy, tileattr, tilectrl, bitmap_addr, tile);
- else
- blit<BlendOn, RowScrollOn, FlipXOff>(cliprect, tile_scanline, xx, yy, tileattr, tilectrl, bitmap_addr, tile);
- }
- else
- {
- if (flip_x)
- blit<BlendOn, RowScrollOff, FlipXOn>(cliprect, tile_scanline, xx, yy, tileattr, tilectrl, bitmap_addr, tile);
- else
- blit<BlendOn, RowScrollOff, FlipXOff>(cliprect, tile_scanline, xx, yy, tileattr, tilectrl, bitmap_addr, tile);
- }
- }
- else
- {
- if (row_scroll)
- {
- if (flip_x)
- blit<BlendOff, RowScrollOn, FlipXOn>(cliprect, tile_scanline, xx, yy, tileattr, tilectrl, bitmap_addr, tile);
- else
- blit<BlendOff, RowScrollOn, FlipXOff>(cliprect, tile_scanline, xx, yy, tileattr, tilectrl, bitmap_addr, tile);
- }
- else
- {
- if (flip_x)
- blit<BlendOff, RowScrollOff, FlipXOn>(cliprect, tile_scanline, xx, yy, tileattr, tilectrl, bitmap_addr, tile);
- else
- blit<BlendOff, RowScrollOff, FlipXOff>(cliprect, tile_scanline, xx, yy, tileattr, tilectrl, bitmap_addr, tile);
- }
- }
- }
- if (SPG_DEBUG_VIDEO && machine().input().code_pressed(KEYCODE_EQUALS))
- m_debug_blit = false;
-}
-
-void spg2xx_device::blit_sprite(const rectangle &cliprect, uint32_t scanline, int depth, uint32_t base_addr)
-{
- uint32_t bitmap_addr = 0x40 * m_video_regs[0x22];
- uint16_t tile = m_spriteram[base_addr + 0];
- int16_t x = m_spriteram[base_addr + 1];
- int16_t y = m_spriteram[base_addr + 2];
- uint16_t attr = m_spriteram[base_addr + 3];
-
- if (!tile)
- {
- return;
- }
-
- if (((attr & PAGE_DEPTH_FLAG_MASK) >> PAGE_DEPTH_FLAG_SHIFT) != depth)
- {
- return;
- }
-
- const uint32_t h = 8 << ((attr & PAGE_TILE_HEIGHT_MASK) >> PAGE_TILE_HEIGHT_SHIFT);
- const uint32_t w = 8 << ((attr & PAGE_TILE_WIDTH_MASK) >> PAGE_TILE_WIDTH_SHIFT);
-
- if (!(m_video_regs[0x42] & SPRITE_COORD_TL_MASK))
- {
- x = (160 + x) - w / 2;
- y = (120 - y) - (h / 2) + 8;
- }
-
- x &= 0x01ff;
- y &= 0x01ff;
-
- uint32_t tile_line = ((scanline - y) + 0x200) % h;
- int16_t test_y = (y + tile_line) & 0x1ff;
- if (test_y >= 0x01c0)
- test_y -= 0x0200;
-
- if (test_y != scanline)
- {
- return;
- }
-
- bool blend = (attr & 0x4000);
- bool flip_x = (attr & TILE_X_FLIP);
-
-#if SPG_DEBUG_VIDEO
- if (m_debug_sprites && machine().input().code_pressed(KEYCODE_MINUS))
- m_debug_blit = true;
- if (blend)
- {
- if (flip_x)
- blit<BlendOn, RowScrollOff, FlipXOn>(cliprect, tile_line, x, y, attr, 0, bitmap_addr, tile);
- else
- blit<BlendOn, RowScrollOff, FlipXOff>(cliprect, tile_line, x, y, attr, 0, bitmap_addr, tile);
- }
- else
- {
- if (flip_x)
- blit<BlendOff, RowScrollOff, FlipXOn>(cliprect, tile_line, x, y, attr, 0, bitmap_addr, tile);
- else
- blit<BlendOff, RowScrollOff, FlipXOff>(cliprect, tile_line, x, y, attr, 0, bitmap_addr, tile);
- }
- m_debug_blit = false;
-#else
- if (blend)
- {
- if (flip_x)
- blit<BlendOn, RowScrollOff, FlipXOn>(cliprect, tile_line, x, y, attr, 0, bitmap_addr, tile);
- else
- blit<BlendOn, RowScrollOff, FlipXOff>(cliprect, tile_line, x, y, attr, 0, bitmap_addr, tile);
- }
- else
- {
- if (flip_x)
- blit<BlendOff, RowScrollOff, FlipXOn>(cliprect, tile_line, x, y, attr, 0, bitmap_addr, tile);
- else
- blit<BlendOff, RowScrollOff, FlipXOff>(cliprect, tile_line, x, y, attr, 0, bitmap_addr, tile);
- }
-#endif
-}
-
-void spg2xx_device::blit_sprites(const rectangle &cliprect, uint32_t scanline, int depth)
-{
- if (!(m_video_regs[0x42] & SPRITE_ENABLE_MASK))
- {
- return;
- }
-
-#if SPG_DEBUG_VIDEO
- if (!m_debug_sprites)
- {
-#endif
- for (uint32_t n = 0; n < m_sprite_limit; n++)
- {
- blit_sprite(cliprect, scanline, depth, 4 * n);
- }
-#if SPG_DEBUG_VIDEO
- }
- else
- {
- blit_sprite(cliprect, scanline, depth, 4 * m_sprite_index_to_debug);
- }
-#endif
-}
-
-void spg2xx_device::apply_saturation(const rectangle &cliprect)
-{
- static const float s_u8_to_float = 1.0f / 255.0f;
- static const float s_gray_r = 0.299f;
- static const float s_gray_g = 0.587f;
- static const float s_gray_b = 0.114f;
- const float sat_adjust = (0xff - (m_video_regs[0x3c] & 0x00ff)) / (float)(0xff - 0x20);
- for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
- {
- uint32_t *src = &m_screenbuf[cliprect.min_x + 320 * y];
- for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
- {
- const uint32_t src_rgb = *src;
- const float src_r = (uint8_t)(src_rgb >> 16) * s_u8_to_float;
- const float src_g = (uint8_t)(src_rgb >> 8) * s_u8_to_float;
- const float src_b = (uint8_t)(src_rgb >> 0) * s_u8_to_float;
- const float luma = src_r * s_gray_r + src_g * s_gray_g + src_b * s_gray_b;
- const float adjusted_r = luma + (src_r - luma) * sat_adjust;
- const float adjusted_g = luma + (src_g - luma) * sat_adjust;
- const float adjusted_b = luma + (src_b - luma) * sat_adjust;
- const int integer_r = (int)floor(adjusted_r * 255.0f);
- const int integer_g = (int)floor(adjusted_g * 255.0f);
- const int integer_b = (int)floor(adjusted_b * 255.0f);
- *src++ = (integer_r > 255 ? 0xff0000 : (integer_r < 0 ? 0 : ((uint8_t)integer_r << 16))) |
- (integer_g > 255 ? 0x00ff00 : (integer_g < 0 ? 0 : ((uint8_t)integer_g << 8))) |
- (integer_b > 255 ? 0x0000ff : (integer_b < 0 ? 0 : (uint8_t)integer_b));
- }
- }
-}
-
-void spg2xx_device::apply_fade(const rectangle &cliprect)
-{
- const uint16_t fade_offset = m_video_regs[0x30];
- for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
- {
- uint32_t *src = &m_screenbuf[cliprect.min_x + 320 * y];
- for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
- {
- const uint32_t src_rgb = *src;
- const uint8_t src_r = (src_rgb >> 16) & 0xff;
- const uint8_t src_g = (src_rgb >> 8) & 0xff;
- const uint8_t src_b = (src_rgb >> 0) & 0xff;
- const uint8_t r = src_r - fade_offset;
- const uint8_t g = src_g - fade_offset;
- const uint8_t b = src_b - fade_offset;
- *src++ = (r > src_r ? 0 : (r << 16)) |
- (g > src_g ? 0 : (g << 8)) |
- (b > src_b ? 0 : (b << 0));
- }
- }
-}
-
-uint32_t spg2xx_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
-{
- memset(&m_screenbuf[320 * cliprect.min_y], 0, 4 * 320 * ((cliprect.max_y - cliprect.min_y) + 1));
-
- const uint32_t page1_addr = 0x40 * m_video_regs[0x20];
- const uint32_t page2_addr = 0x40 * m_video_regs[0x21];
- uint16_t *page1_regs = m_video_regs + 0x10;
- uint16_t *page2_regs = m_video_regs + 0x16;
-
- for (uint32_t scanline = (uint32_t)cliprect.min_y; scanline <= (uint32_t)cliprect.max_y; scanline++)
- {
- for (int i = 0; i < 4; i++)
- {
- if (!SPG_DEBUG_VIDEO || !m_hide_page0)
- blit_page(cliprect, scanline, i, page1_addr, page1_regs);
- if (!SPG_DEBUG_VIDEO || !m_hide_page1)
- blit_page(cliprect, scanline, i, page2_addr, page2_regs);
- if (!SPG_DEBUG_VIDEO || !m_hide_sprites)
- blit_sprites(cliprect, scanline, i);
- }
- }
-
- if ((m_video_regs[0x3c] & 0x00ff) != 0x0020)
- {
- apply_saturation(cliprect);
- }
-
- if (m_video_regs[0x30] != 0)
- {
- apply_fade(cliprect);
- }
-
- for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
- {
- uint32_t *dest = &bitmap.pix32(y, cliprect.min_x);
- uint32_t *src = &m_screenbuf[cliprect.min_x + 320 * y];
- memcpy(dest, src, sizeof(uint32_t) * ((cliprect.max_x - cliprect.min_x) + 1));
- }
-
- if (SPG_DEBUG_VIDEO && m_debug_palette)
- {
- for (int y = cliprect.min_y; y <= cliprect.max_y && y < 128; y++)
- {
- const uint16_t high_nybble = (y / 8) << 4;
- uint32_t *dest = &bitmap.pix32(y, cliprect.min_x);
- for (int x = cliprect.min_x; x <= cliprect.max_x && x < 256; x++)
- {
- const uint16_t low_nybble = x / 16;
- const uint16_t palette_entry = high_nybble | low_nybble;
- const uint16_t color = m_paletteram[palette_entry];
- if (!(color & 0x8000))
- {
- *dest = m_rgb555_to_rgb888[color & 0x7fff];
- }
- dest++;
- }
- }
- }
-
- return 0;
-}
-
-void spg2xx_device::do_sprite_dma(uint32_t len)
-{
- address_space &mem = m_cpu->space(AS_PROGRAM);
-
- uint32_t src = m_video_regs[0x70] & 0x3fff;
- uint32_t dst = m_video_regs[0x71];
-
- for (uint32_t j = 0; j < len; j++)
- {
- m_spriteram[(dst + j) & 0x3ff] = mem.read_word(src + j);
- }
-
- m_video_regs[0x72] = 0;
- if (VIDEO_IRQ_ENABLE & 4)
- {
- const uint16_t old = VIDEO_IRQ_STATUS;
- VIDEO_IRQ_STATUS |= 4;
- const uint16_t changed = old ^ (VIDEO_IRQ_ENABLE & VIDEO_IRQ_STATUS);
- if (changed)
- check_video_irq();
- }
-}
-
-READ16_MEMBER(spg2xx_device::video_r)
-{
- switch (offset)
- {
- case 0x38: // Current Line
- LOGMASKED(LOG_VLINES, "video_r: Current Line: %04x\n", m_screen->vpos());
- return m_screen->vpos();
-
- case 0x62: // Video IRQ Enable
- LOGMASKED(LOG_IRQS, "video_r: Video IRQ Enable: %04x\n", VIDEO_IRQ_ENABLE);
- return VIDEO_IRQ_ENABLE;
-
- case 0x63: // Video IRQ Status
- LOGMASKED(LOG_IRQS, "video_r: Video IRQ Status: %04x\n", VIDEO_IRQ_STATUS);
- return VIDEO_IRQ_STATUS;
-
- default:
- LOGMASKED(LOG_UNKNOWN_PPU, "video_r: Unknown register %04x = %04x\n", 0x2800 + offset, m_video_regs[offset]);
- break;
- }
- return m_video_regs[offset];
-}
-
-WRITE16_MEMBER(spg2xx_device::video_w)
-{
- switch (offset)
- {
- case 0x10: // Page 1 X scroll
- LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 X Scroll = %04x\n", data & 0x01ff);
- m_video_regs[offset] = data & 0x01ff;
- break;
-
- case 0x11: // Page 1 Y scroll
- LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 Y Scroll = %04x\n", data & 0x00ff);
- m_video_regs[offset] = data & 0x00ff;
- break;
-
- case 0x12: // Page 1 Attributes
- LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 Attributes = %04x (Depth:%d, Palette:%d, VSize:%d, HSize:%d, FlipY:%d, FlipX:%d, BPP:%d)\n", data
- , (data >> 12) & 3, (data >> 8) & 15, 8 << ((data >> 6) & 3), 8 << ((data >> 4) & 3), BIT(data, 3), BIT(data, 2), 2 * ((data & 3) + 1));
- m_video_regs[offset] = data;
- break;
-
- case 0x13: // Page 1 Control
- LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 Control = %04x (Blend:%d, HiColor:%d, RowScroll:%d, Enable:%d, Wallpaper:%d, RegSet:%d, Bitmap:%d)\n", data
- , BIT(data, 8), BIT(data, 7), BIT(data, 4), BIT(data, 3), BIT(data, 2), BIT(data, 1), BIT(data, 0));
- m_video_regs[offset] = data;
- break;
-
- case 0x14: // Page 1 Tile Address
- LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 Tile Address = %04x\n", data & 0x1fff);
- m_video_regs[offset] = data;
- break;
-
- case 0x15: // Page 1 Attribute Address
- LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 Attribute Address = %04x\n", data & 0x1fff);
- m_video_regs[offset] = data;
- break;
-
- case 0x16: // Page 2 X scroll
- LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 X Scroll = %04x\n", data & 0x01ff);
- m_video_regs[offset] = data & 0x01ff;
- break;
-
- case 0x17: // Page 2 Y scroll
- LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 Y Scroll: %04x = %04x\n", 0x2800 | offset, data & 0x00ff);
- m_video_regs[offset] = data & 0x00ff;
- break;
-
- case 0x18: // Page 2 Attributes
- LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 Attributes = %04x (Depth:%d, Palette:%d, VSize:%d, HSize:%d, FlipY:%d, FlipX:%d, BPP:%d)\n", data
- , (data >> 12) & 3, (data >> 8) & 15, 8 << ((data >> 6) & 3), 8 << ((data >> 4) & 3), BIT(data, 3), BIT(data, 2), 2 * ((data & 3) + 1));
- m_video_regs[offset] = data;
- break;
-
- case 0x19: // Page 2 Control
- LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 Control = %04x (Blend:%d, HiColor:%d, RowScroll:%d, Enable:%d, Wallpaper:%d, RegSet:%d, Bitmap:%d)\n", data
- , BIT(data, 8), BIT(data, 7), BIT(data, 4), BIT(data, 3), BIT(data, 2), BIT(data, 1), BIT(data, 0));
- m_video_regs[offset] = data;
- break;
-
- case 0x1a: // Page 2 Tile Address
- LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 Tile Address = %04x\n", data & 0x1fff);
- m_video_regs[offset] = data;
- break;
-
- case 0x1b: // Page 2 Attribute Address
- LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 Attribute Address = %04x\n", data & 0x1fff);
- m_video_regs[offset] = data;
- break;
-
- case 0x20: // Page 1 Segment Address
- LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 Segment Address = %04x\n", data);
- m_video_regs[offset] = data;
- break;
-
- case 0x21: // Page 2 Segment Address
- LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 Segment Address = %04x\n", data);
- m_video_regs[offset] = data;
- break;
-
- case 0x22: // Sprite Segment Address
- LOGMASKED(LOG_PPU_WRITES, "video_w: Sprite Segment Address = %04x\n", data);
- m_video_regs[offset] = data;
- break;
-
- case 0x2a: // Blend Level Control
- LOGMASKED(LOG_PPU_WRITES, "video_w: Blend Level Control = %04x\n", data & 0x0003);
- m_video_regs[offset] = data & 0x0003;
- break;
-
- case 0x30: // Fade Effect Control
- LOGMASKED(LOG_PPU_WRITES, "video_w: Fade Effect Control = %04x\n", data & 0x00ff);
- m_video_regs[offset] = data & 0x00ff;
- break;
-
- case 0x36: // IRQ pos V
- case 0x37: // IRQ pos H
- m_video_regs[offset] = data & 0x01ff;
- LOGMASKED(LOG_IRQS, "video_w: Video IRQ Position: %04x,%04x (%04x)\n", m_video_regs[0x37], m_video_regs[0x36], 0x2800 | offset);
- if (m_video_regs[0x37] < 160 && m_video_regs[0x36] < 240)
- m_screenpos_timer->adjust(m_screen->time_until_pos(m_video_regs[0x36], m_video_regs[0x37] << 1));
- else
- m_screenpos_timer->adjust(attotime::never);
- break;
-
- case 0x39: // Latch 1st Line Pen Pulse
- LOGMASKED(LOG_PPU_WRITES, "video_w: Latch 1st Line Pen Pulse = %04x\n", data & 0x0001);
- m_video_regs[offset] = data & 0x0001;
- break;
-
- case 0x3c: // TV Control 1
- LOGMASKED(LOG_PPU_WRITES, "video_w: TV Control 1 = %04x (Hue:%02x, Saturation:%02x)\n", data, data >> 8, data & 0x00ff);
- m_video_regs[offset] = data;
- break;
-
- case 0x3d: // TV Control 2
- {
- static const char* const s_lpf_mode[4] = { "LPF1", "LPF2", "All", "Edge" };
- LOGMASKED(LOG_PPU_WRITES, "video_w: TV Control 2 = %04x (LPFMode:%s, Enable:%d, Interlace:%d)\n", data & 0x000f
- , s_lpf_mode[(data >> 2) & 3], BIT(data, 1), BIT(data, 0));
- m_video_regs[offset] = data & 0x000f;
- break;
- }
-
- case 0x3e: // Light Pen Y Position
- LOGMASKED(LOG_PPU_WRITES, "video_w: Light Pen Y (read only) = %04x\n", data & 0x01ff);
- break;
-
- case 0x3f: // Light Pen YXPosition
- LOGMASKED(LOG_PPU_WRITES, "video_w: Light Pen X (read only) = %04x\n", data & 0x01ff);
- break;
-
- case 0x42: // Sprite Control
- LOGMASKED(LOG_PPU_WRITES, "video_w: Sprite Control = %04x (TopLeft:%d, Enable:%d)\n", data & 0x0003, BIT(data, 1), BIT(data, 0));
- m_video_regs[offset] = data & 0x0003;
- break;
-
- case 0x62: // Video IRQ Enable
- {
- LOGMASKED(LOG_IRQS, "video_w: Video IRQ Enable = %04x (DMA:%d, Timing:%d, Blanking:%d)\n", data & 0x0007, BIT(data, 2), BIT(data, 1), BIT(data, 0));
- const uint16_t old = VIDEO_IRQ_ENABLE & VIDEO_IRQ_STATUS;
- VIDEO_IRQ_ENABLE = data & 0x0007;
- const uint16_t changed = old ^ (VIDEO_IRQ_ENABLE & VIDEO_IRQ_STATUS);
- if (changed)
- check_video_irq();
- break;
- }
-
- case 0x63: // Video IRQ Acknowledge
- {
- LOGMASKED(LOG_IRQS, "video_w: Video IRQ Acknowledge = %04x\n", data);
- const uint16_t old = VIDEO_IRQ_ENABLE & VIDEO_IRQ_STATUS;
- VIDEO_IRQ_STATUS &= ~data;
- const uint16_t changed = old ^ (VIDEO_IRQ_ENABLE & VIDEO_IRQ_STATUS);
- if (changed)
- check_video_irq();
- break;
- }
-
- case 0x70: // Sprite DMA Source
- LOGMASKED(LOG_DMA, "video_w: Sprite DMA Source = %04x\n", data & 0x3fff);
- m_video_regs[offset] = data & 0x3fff;
- break;
-
- case 0x71: // Sprite DMA Dest
- LOGMASKED(LOG_DMA, "video_w: Sprite DMA Dest = %04x\n", data & 0x03ff);
- m_video_regs[offset] = data & 0x03ff;
- break;
-
- case 0x72: // Sprite DMA Length
- {
- LOGMASKED(LOG_DMA, "video_w: Sprite DMA Length = %04x\n", data & 0x03ff);
- uint16_t length = data & 0x3ff;
- do_sprite_dma(length ? length : 0x400);
- break;
- }
-
- default:
- LOGMASKED(LOG_UNKNOWN_PPU, "video_w: Unknown register %04x = %04x\n", 0x2800 + offset, data);
- m_video_regs[offset] = data;
- break;
- }
-}
-
-WRITE_LINE_MEMBER(spg2xx_device::vblank)
-{
- if (!state)
- {
- VIDEO_IRQ_STATUS &= ~1;
- LOGMASKED(LOG_IRQS, "Setting video IRQ status to %04x\n", VIDEO_IRQ_STATUS);
- check_video_irq();
- return;
- }
-
-#if SPG_DEBUG_VIDEO
- if (machine().input().code_pressed_once(KEYCODE_5))
- m_hide_page0 = !m_hide_page0;
- if (machine().input().code_pressed_once(KEYCODE_6))
- m_hide_page1 = !m_hide_page1;
- if (machine().input().code_pressed_once(KEYCODE_7))
- m_hide_sprites = !m_hide_sprites;
- if (machine().input().code_pressed_once(KEYCODE_8))
- m_debug_sprites = !m_debug_sprites;
- if (machine().input().code_pressed_once(KEYCODE_9))
- m_sprite_index_to_debug--;
- if (machine().input().code_pressed_once(KEYCODE_0))
- m_sprite_index_to_debug++;
- if (machine().input().code_pressed_once(KEYCODE_L))
- m_debug_palette = !m_debug_palette;
-#endif
-
- if (VIDEO_IRQ_ENABLE & 1)
- {
- VIDEO_IRQ_STATUS |= 1;
- LOGMASKED(LOG_IRQS, "Setting video IRQ status to %04x\n", VIDEO_IRQ_STATUS);
- check_video_irq();
- }
-}
-
-void spg2xx_device::check_video_irq()
-{
- LOGMASKED(LOG_IRQS, "%ssserting IRQ0 (%04x, %04x)\n", (VIDEO_IRQ_STATUS & VIDEO_IRQ_ENABLE) ? "A" : "Dea", VIDEO_IRQ_STATUS, VIDEO_IRQ_ENABLE);
- m_cpu->set_state_unsynced(UNSP_IRQ0_LINE, (VIDEO_IRQ_STATUS & VIDEO_IRQ_ENABLE) ? ASSERT_LINE : CLEAR_LINE);
-}
-
-
-/*************************
-* Machine Hardware *
-*************************/
-
-void spg2xx_device::uart_rx(uint8_t data)
-{
- LOGMASKED(LOG_UART, "uart_rx: Pulling %02x into receive FIFO\n", data);
- if (BIT(m_io_regs[0x30], 6))
- {
- m_uart_rx_fifo[m_uart_rx_fifo_end] = data;
- m_uart_rx_fifo_end = (m_uart_rx_fifo_end + 1) % ARRAY_LENGTH(m_uart_rx_fifo);
- m_uart_rx_fifo_count++;
- if (m_uart_rx_timer->remaining() == attotime::never)
- m_uart_rx_timer->adjust(attotime::from_ticks(BIT(m_io_regs[0x30], 5) ? 11 : 10, m_uart_baud_rate));
- }
-}
-
-READ16_MEMBER(spg2xx_device::io_r)
-{
- static const char *const gpioregs[] = { "GPIO Data Port", "GPIO Buffer Port", "GPIO Direction Port", "GPIO Attribute Port", "GPIO IRQ/Latch Port" };
- static const char gpioports[] = { 'A', 'B', 'C' };
-
- uint16_t val = m_io_regs[offset];
-
- switch (offset)
- {
- case 0x01: case 0x06: case 0x0b: // GPIO Data Port A/B/C
- do_gpio(offset, false);
- LOGMASKED(LOG_GPIO, "%s: io_r: %s %c = %04x\n", machine().describe_context(), gpioregs[(offset - 1) % 5], gpioports[(offset - 1) / 5], m_io_regs[offset]);
- val = m_io_regs[offset];
- break;
-
- case 0x02: case 0x03: case 0x04: case 0x05:
- case 0x07: case 0x08: case 0x09: case 0x0a:
- case 0x0c: case 0x0d: case 0x0e: case 0x0f: // Other GPIO regs
- LOGMASKED(LOG_GPIO, "%s: io_r: %s %c = %04x\n", machine().describe_context(), gpioregs[(offset - 1) % 5], gpioports[(offset - 1) / 5], m_io_regs[offset]);
- break;
-
- case 0x10: // Timebase Control
- LOGMASKED(LOG_IO_READS, "io_r: Timebase Control = %04x\n", val);
- break;
-
- case 0x12: // Timer A Data
- LOGMASKED(LOG_IO_WRITES, "io_r: Timer A Data = %04x\n", val);
- break;
-
- case 0x1c: // Video line counter
- val = m_screen->vpos();
- LOGMASKED(LOG_VLINES, "io_r: Video Line = %04x\n", val);
- break;
-
- case 0x20: // System Control
- LOGMASKED(LOG_IO_READS, "io_r: System Control = %04x\n", val);
- break;
-
- case 0x21: // IRQ Control
- LOGMASKED(LOG_IRQS, "%s: io_r: I/O IRQ Control = %04x\n", machine().describe_context(), val);
- break;
-
- case 0x22: // IRQ Status
- LOGMASKED(LOG_IRQS, "%s: io_r: I/O IRQ Status = %04x\n", machine().describe_context(), val);
- break;
-
- case 0x23: // External Memory Control
- LOGMASKED(LOG_IO_READS, "%s: io_r: Ext. Memory Control = %04x\n", machine().describe_context(), val);
- break;
-
- case 0x25: // ADC Control
- LOGMASKED(LOG_IO_READS, "io_r: ADC Control = %04x\n", val);
- break;
-
- case 0x27: // ADC Data
- {
- m_io_regs[0x27] = 0;
- const uint16_t old = IO_IRQ_STATUS;
- IO_IRQ_STATUS &= ~0x2000;
- const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
- if (changed)
- check_irqs(changed);
- LOGMASKED(LOG_IO_READS, "%s: io_r: ADC Data = %04x\n", machine().describe_context(), val);
- break;
- }
-
- case 0x29: // Wakeup Source
- LOGMASKED(LOG_IO_READS, "io_r: Wakeup Source = %04x\n", val);
- break;
-
- case 0x2b:
- LOGMASKED(LOG_IO_READS, "io_r: NTSC/PAL = %04x\n", m_pal_flag);
- return m_pal_flag;
-
- case 0x2c: // PRNG 0
- {
- const uint16_t value = m_io_regs[0x2c];
- m_io_regs[0x2c] = ((value << 1) | (BIT(value, 14) ^ BIT(value, 13))) & 0x7fff;
- return value;
- }
-
- case 0x2d: // PRNG 1
- {
- const uint16_t value = m_io_regs[0x2d];
- m_io_regs[0x2d] = ((value << 1) | (BIT(value, 14) ^ BIT(value, 13))) & 0x7fff;
- return value;
- }
-
- case 0x2e: // FIQ Source Select
- LOGMASKED(LOG_FIQ, "io_r: FIQ Source Select = %04x\n", val);
- break;
-
- case 0x2f: // Data Segment
- val = m_cpu->get_ds();
- LOGMASKED(LOG_SEGMENT, "io_r: Data Segment = %04x\n", val);
- break;
-
- case 0x30: // UART Control
- LOGMASKED(LOG_UART, "%s: io_r: UART Control = %04x\n", machine().describe_context(), val);
- break;
-
- case 0x31: // UART Status
- //LOGMASKED(LOG_UART, "%s: io_r: UART Status = %04x\n", machine().describe_context(), val);
- break;
-
- case 0x36: // UART RX Data
- if (m_uart_rx_available)
- {
- m_io_regs[0x31] &= ~0x0081;
- LOGMASKED(LOG_UART, "UART Rx data is available, clearing bits\n");
- if (m_uart_rx_fifo_count)
- {
- LOGMASKED(LOG_UART, "Remaining count %d, value %02x\n", m_uart_rx_fifo_count, m_uart_rx_fifo[m_uart_rx_fifo_start]);
- m_io_regs[0x36] = m_uart_rx_fifo[m_uart_rx_fifo_start];
- val = m_io_regs[0x36];
- m_uart_rx_fifo_start = (m_uart_rx_fifo_start + 1) % ARRAY_LENGTH(m_uart_rx_fifo);
- m_uart_rx_fifo_count--;
-
- if (m_uart_rx_fifo_count == 0)
- {
- m_uart_rx_available = false;
- }
- else
- {
- LOGMASKED(LOG_UART, "Remaining count %d, setting up timer\n", m_uart_rx_fifo_count);
- //uart_receive_tick();
- if (m_uart_rx_timer->remaining() == attotime::never)
- m_uart_rx_timer->adjust(attotime::from_ticks(BIT(m_io_regs[0x30], 5) ? 11 : 10, m_uart_baud_rate));
- }
- }
- else
- {
- m_uart_rx_available = false;
- }
- }
- else
- {
- m_io_regs[0x37] |= 0x2000;
- }
- LOGMASKED(LOG_UART, "%s: io_r: UART Rx Data = %04x\n", machine().describe_context(), val);
- break;
-
- case 0x37: // UART Rx FIFO Control
- val &= ~0x0070;
- val |= (m_uart_rx_available ? 7 : 0) << 4;
- LOGMASKED(LOG_UART, "io_r: UART Rx FIFO Control = %04x\n", machine().describe_context(), val);
- break;
-
- case 0x51: // unknown, polled by ClickStart cartridges ( clikstrt )
- return 0x8000;
-
- case 0x59: // I2C Status
- LOGMASKED(LOG_I2C, "io_r: I2C Status = %04x\n", val);
- break;
-
- case 0x5e: // I2C Data In
- LOGMASKED(LOG_I2C, "io_r: I2C Data In = %04x\n", val);
- break;
-
- case 0x100: // DMA Source (L)
- LOGMASKED(LOG_DMA, "io_r: DMA Source (lo) = %04x\n", val);
- break;
-
- case 0x101: // DMA Source (H)
- LOGMASKED(LOG_DMA, "io_r: DMA Source (hi) = %04x\n", val);
- break;
-
- case 0x102: // DMA Length
- LOGMASKED(LOG_DMA, "io_r: DMA Length = %04x\n", 0);
- val = 0;
- break;
-
- case 0x103: // DMA Destination
- LOGMASKED(LOG_DMA, "io_r: DMA Dest = %04x\n", val);
- break;
-
- default:
- LOGMASKED(LOG_UNKNOWN_IO, "io_r: Unknown register %04x\n", 0x3d00 + offset);
- break;
- }
-
- return val;
-}
-
-void spg2xx_device::update_porta_special_modes()
-{
- static const char* const s_pa_special[4][16] =
- {
- // Input, Special 0
- // Input, Special 1
- // Output, Special 0
- // Output, Special 1
-
- { "LP", "ExtClk2", "ExtClk1", "-", "SDA", "SlvRDY", "-", "-", "SPICLK", "-", "RxD", "SPISSB", "-", "-", "-", "-" },
- { "-", "-", "-", "SCK", "-", "SWS", "-", "-", "-", "-", "-", "-", "IRQ2B", "-", "-", "IRQ1B" },
- { "-", "-", "-", "SCK", "SDA", "SWS", "-", "-", "SPICLK", "TxD", "-", "SPISSB", "TAPWM", "TM1", "TBPWM", "TM2" },
- { "CSB3", "CSB2", "CSB1", "SCK", "SDA", "VSYNC", "HSYNC", "SYSCLK3", "SPICLK", "TxD", "SWS", "SPISSB", "-", "VSYNC", "HSYNC", "CSYNC" },
- };
- for (int bit = 15; bit >= 0; bit--)
- {
- if (!BIT(m_io_regs[0x05], bit))
- continue;
- uint8_t type = (BIT(m_io_regs[0x03], bit) << 1) | BIT(m_io_regs[0x00], 0);
- LOGMASKED(LOG_GPIO, " Bit %2d: %s\n", bit, s_pa_special[type][bit]);
- }
-}
-
-void spg2xx_device::update_portb_special_modes()
-{
- static const char* const s_pb_special[4][8] =
- {
- // Input, Special 0
- // Input, Special 1
- // Output, Special 0
- // Output, Special 1
-
- { "-", "-", "-", "-", "-", "-", "SDA", "SlvRDY" },
- { "-", "-", "-", "-", "-", "-", "SDA", "SlvRDY" },
- { "VSYNC", "HSYNC", "CSYNC", "-", "-", "SCK", "SDA", "SWS" },
- { "CSB3", "CSB2", "CSB1", "TBPWM", "TM2", "-", "-", "SYSCLK2" },
- };
- for (int bit = 7; bit >= 0; bit--)
- {
- if (!BIT(m_io_regs[0x0a], bit))
- continue;
- uint8_t type = (BIT(m_io_regs[0x08], bit) << 1) | BIT(m_io_regs[0x00], 1);
- LOGMASKED(LOG_GPIO, " Bit %2d: %s\n", bit, s_pb_special[type][bit]);
- }
-}
-
-void spg2xx_device::update_timer_b_rate()
-{
- switch (m_io_regs[0x17] & 7)
- {
- case 0:
- case 1:
- case 5:
- case 6:
- case 7:
- m_timer_src_c->adjust(attotime::never);
- break;
- case 2:
- m_timer_src_c->adjust(attotime::from_hz(32768), 0, attotime::from_hz(32768));
- break;
- case 3:
- m_timer_src_c->adjust(attotime::from_hz(8192), 0, attotime::from_hz(8192));
- break;
- case 4:
- m_timer_src_c->adjust(attotime::from_hz(4096), 0, attotime::from_hz(4096));
- break;
- }
-}
-
-void spg2xx_device::update_timer_ab_src()
-{
- if (m_timer_b_tick_rate == 0)
- return;
-
- m_timer_b_divisor++;
- if (m_timer_b_divisor >= m_timer_b_tick_rate)
- {
- m_timer_b_divisor = 0;
- increment_timer_a();
- }
-}
-
-void spg2xx_device::increment_timer_a()
-{
- m_io_regs[0x12]++;
- if (m_io_regs[0x12] == 0)
- {
- m_io_regs[0x12] = m_timer_a_preload;
- const uint16_t old = IO_IRQ_STATUS;
- IO_IRQ_STATUS |= 0x0800;
- const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
- if (changed)
- {
- //printf("Timer A overflow\n");
- check_irqs(0x0800);
- }
- }
-}
-
-void spg2xx_device::update_timer_c_src()
-{
- m_io_regs[0x16]++;
- if (m_io_regs[0x16] == 0)
- {
- m_io_regs[0x16] = m_timer_b_preload;
- const uint16_t old = IO_IRQ_STATUS;
- IO_IRQ_STATUS |= 0x0400;
- const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
- if (changed)
- {
- printf("Timer B overflow\n");
- check_irqs(0x0400);
- }
- }
-}
-
-
-WRITE16_MEMBER(spg28x_device::io_w)
-{
- if (offset == 0x33)
- {
- m_io_regs[offset] = data;
- m_uart_baud_rate = 27000000 / (0x10000 - m_io_regs[0x33]);
- LOGMASKED(LOG_UART, "%s: io_w: UART Baud Rate scaler = %04x (%d baud)\n", machine().describe_context(), data, m_uart_baud_rate);
- }
- else
- {
- spg2xx_device::io_w(space, offset, data, mem_mask);
- }
-}
-
-WRITE16_MEMBER(spg2xx_device::io_w)
-{
- static const char *const gpioregs[] = { "GPIO Data Port", "GPIO Buffer Port", "GPIO Direction Port", "GPIO Attribute Port", "GPIO IRQ/Latch Port" };
- static const char gpioports[3] = { 'A', 'B', 'C' };
-
- switch (offset)
- {
- case 0x00: // GPIO special function select
- {
- LOGMASKED(LOG_GPIO, "%s: io_w: GPIO Configuration = %04x (IOBWake:%d, IOAWake:%d, IOBSpecSel:%d, IOASpecSel:%d)\n", machine().describe_context(), data
- , BIT(data, 4), BIT(data, 3), BIT(data, 1), BIT(data, 0));
- const uint16_t old = m_io_regs[offset];
- m_io_regs[offset] = data;
- const uint16_t changed = old ^ data;
- if (BIT(changed, 0))
- update_porta_special_modes();
- if (BIT(changed, 1))
- update_portb_special_modes();
- break;
- }
-
- case 0x01: case 0x06: case 0x0b: // GPIO data, port A/B/C
- offset++;
- // Intentional fallthrough - we redirect data register writes to the buffer register.
-
- case 0x02: case 0x04: // Port A
- case 0x07: case 0x09: // Port B
- case 0x0c: case 0x0d: case 0x0e: case 0x0f: // Port C
- LOGMASKED(LOG_GPIO, "%s: io_w: %s %c = %04x\n", machine().describe_context(), gpioregs[(offset - 1) % 5], gpioports[(offset - 1) / 5], data);
- m_io_regs[offset] = data;
- do_gpio(offset, true);
- break;
-
- case 0x03: // Port A Direction
- LOGMASKED(LOG_GPIO, "%s: io_w: GPIO Direction Port A = %04x\n", machine().describe_context(), data);
- m_io_regs[offset] = data;
- update_porta_special_modes();
- do_gpio(offset, true);
- break;
-
- case 0x08: // Port B Direction
- LOGMASKED(LOG_GPIO, "%s: io_w: GPIO Direction Port B = %04x\n", machine().describe_context(), data);
- m_io_regs[offset] = data;
- update_portb_special_modes();
- do_gpio(offset, true);
- break;
-
- case 0x05: // Port A Special
- LOGMASKED(LOG_GPIO, "%s: io_w: Port A Special Function Select: %04x\n", machine().describe_context(), data);
- m_io_regs[offset] = data;
- update_porta_special_modes();
- break;
-
- case 0x0a: // Port B Special
- LOGMASKED(LOG_GPIO, "%s: io_w: Port B Special Function Select: %04x\n", machine().describe_context(), data);
- m_io_regs[offset] = data;
- update_portb_special_modes();
- break;
-
- case 0x10: // Timebase Control
- {
- static const char* const s_tmb1_sel[2][4] =
- {
- { "8Hz", "16Hz", "32Hz", "64Hz" },
- { "12kHz", "24kHz", "40kHz", "40kHz" }
- };
- static const char* const s_tmb2_sel[2][4] =
- {
- { "128Hz", "256Hz", "512Hz", "1024Hz" },
- { "105kHz", "210kHz", "420kHz", "840kHz" }
- };
- static const uint32_t s_tmb1_freq[2][4] =
- {
- { 8, 16, 32, 64 },
- { 12000, 24000, 40000, 40000 }
- };
- static const uint32_t s_tmb2_freq[2][4] =
- {
- { 128, 256, 512, 1024 },
- { 105000, 210000, 420000, 840000 }
- };
- LOGMASKED(LOG_TIMERS, "io_w: Timebase Control = %04x (Source:%s, TMB2:%s, TMB1:%s)\n", data,
- BIT(data, 4) ? "27MHz" : "32768Hz", s_tmb2_sel[BIT(data, 4)][(data >> 2) & 3], s_tmb1_sel[BIT(data, 4)][data & 3]);
- m_io_regs[offset] = data;
- const uint8_t hifreq = BIT(data, 4);
- const uint32_t tmb1freq = s_tmb1_freq[hifreq][data & 3];
- m_tmb1->adjust(attotime::from_hz(tmb1freq), 0, attotime::from_hz(tmb1freq));
- const uint32_t tmb2freq = s_tmb2_freq[hifreq][(data >> 2) & 3];
- m_tmb2->adjust(attotime::from_hz(tmb2freq), 0, attotime::from_hz(tmb2freq));
- break;
- }
-
- case 0x11: // Timebase Clear
- LOGMASKED(LOG_TIMERS, "io_w: Timebase Clear = %04x\n", data);
- break;
-
- case 0x12: // Timer A Data
- LOGMASKED(LOG_TIMERS, "io_w: Timer A Data = %04x\n", data);
- m_io_regs[offset] = data;
- m_timer_a_preload = data;
- break;
-
- case 0x13: // Timer A Control
- {
- static const char* const s_source_a[8] = { "0", "0", "32768Hz", "8192Hz", "4096Hz", "1", "0", "ExtClk1" };
- static const char* const s_source_b[8] = { "2048Hz", "1024Hz", "256Hz", "TMB1", "4Hz", "2Hz", "1", "ExtClk2" };
- LOGMASKED(LOG_TIMERS, "io_w: Timer A Control = %04x (Source A:%s, Source B:%s)\n", data,
- s_source_a[data & 7], s_source_b[(data >> 3) & 7]);
- m_io_regs[offset] = data;
- int timer_a_rate = 0;
- switch (data & 7)
- {
- case 0:
- case 1:
- case 5:
- case 6:
- case 7:
- m_timer_src_ab->adjust(attotime::never);
- break;
- case 2:
- m_timer_src_ab->adjust(attotime::from_hz(32768), 0, attotime::from_hz(32768));
- timer_a_rate = 32768;
- break;
- case 3:
- m_timer_src_ab->adjust(attotime::from_hz(8192), 0, attotime::from_hz(8192));
- timer_a_rate = 8192;
- break;
- case 4:
- m_timer_src_ab->adjust(attotime::from_hz(4096), 0, attotime::from_hz(4096));
- timer_a_rate = 4096;
- break;
- }
- switch ((data >> 3) & 7)
- {
- case 0:
- m_timer_b_tick_rate = timer_a_rate / 2048;
- break;
- case 1:
- m_timer_b_tick_rate = timer_a_rate / 1024;
- break;
- case 2:
- m_timer_b_tick_rate = timer_a_rate / 256;
- break;
- case 3:
- m_timer_b_tick_rate = 0;
- break;
- case 4:
- m_timer_b_tick_rate = timer_a_rate / 4;
- break;
- case 5:
- m_timer_b_tick_rate = timer_a_rate / 2;
- break;
- case 6:
- m_timer_b_tick_rate = 1;
- break;
- case 7:
- m_timer_b_tick_rate = 0;
- break;
- }
- break;
- }
-
- case 0x15: // Timer A IRQ Clear
- {
- LOGMASKED(LOG_TIMERS, "io_w: Timer A IRQ Clear\n");
- const uint16_t old = IO_IRQ_STATUS;
- IO_IRQ_STATUS &= ~0x0800;
- const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
- if (changed)
- check_irqs(0x0800);
- break;
- }
-
- case 0x16: // Timer B Data
- LOGMASKED(LOG_TIMERS, "io_w: Timer B Data = %04x\n", data);
- m_io_regs[offset] = data;
- m_timer_b_preload = data;
- break;
-
- case 0x17: // Timer B Control
- {
- static const char* const s_source_c[8] = { "0", "0", "32768Hz", "8192Hz", "4096Hz", "1", "0", "ExtClk1" };
- LOGMASKED(LOG_TIMERS, "io_w: Timer B Control = %04x (Source C:%s)\n", data, s_source_c[data & 7]);
- m_io_regs[offset] = data;
- if (m_io_regs[0x18] == 1)
- {
- update_timer_b_rate();
- }
- break;
- }
-
- case 0x18: // Timer B Enable
- {
- LOGMASKED(LOG_TIMERS, "io_w: Timer B Enable = %04x\n", data);
- m_io_regs[offset] = data & 1;
- if (data & 1)
- {
- update_timer_b_rate();
- }
- else
- {
- m_timer_src_c->adjust(attotime::never);
- }
- break;
- }
-
- case 0x19: // Timer B IRQ Clear
- {
- LOGMASKED(LOG_TIMERS, "io_w: Timer B IRQ Clear\n");
- const uint16_t old = IO_IRQ_STATUS;
- IO_IRQ_STATUS &= ~0x0400;
- const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
- if (changed)
- check_irqs(0x0400);
- break;
- }
-
- case 0x20: // System Control
- {
- static const char* const s_sysclk[4] = { "13.5MHz", "27MHz", "27MHz NoICE", "54MHz" };
- static const char* const s_lvd_voltage[4] = { "2.7V", "2.9V", "3.1V", "3.3V" };
- static const char* const s_weak_strong[2] = { "Weak", "Strong" };
- LOGMASKED(LOG_IO_WRITES, "io_w: System Control = %04x (Watchdog:%d, Sleep:%d, SysClk:%s, SysClkInv:%d, LVROutEn:%d, LVREn:%d\n"
- , data, BIT(data, 15), BIT(data, 14), s_sysclk[(data >> 12) & 3], BIT(data, 11), BIT(data, 9), BIT(data, 8));
- LOGMASKED(LOG_IO_WRITES, " LVDEn:%d, LVDVoltSel:%s, 32kHzDisable:%d, StrWkMode:%s, VDACDisable:%d, ADACDisable:%d, ADACOutDisable:%d)\n"
- , BIT(data, 7), s_lvd_voltage[(data >> 5) & 3], BIT(data, 4), s_weak_strong[BIT(data, 3)], BIT(data, 2), BIT(data, 1), BIT(data, 0));
- m_io_regs[offset] = data;
- break;
- }
-
- case 0x21: // IRQ Enable
- {
- LOGMASKED(LOG_IRQS, "io_w: IRQ Enable = %04x\n", data);
- const uint16_t old = IO_IRQ_ENABLE;
- m_io_regs[offset] = data;
- const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
- if (changed)
- check_irqs(changed);
- break;
- }
-
- case 0x22: // IRQ Acknowledge
- {
- LOGMASKED(LOG_IRQS, "io_w: IRQ Acknowledge = %04x\n", data);
- const uint16_t old = IO_IRQ_STATUS;
- IO_IRQ_STATUS &= ~data;
- const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
- if (m_uart_rx_irq || m_uart_tx_irq)
- {
- LOGMASKED(LOG_IRQS | LOG_UART, "Re-setting UART IRQ due to still-unacknowledged Rx or Tx.\n");
- IO_IRQ_STATUS |= 0x0100;
- }
- if (changed)
- check_irqs(changed);
- break;
- }
-
- case 0x23: // External Memory Control
- {
- static const char* const s_bus_arb[8] =
- {
- "Forbidden", "Forbidden", "Forbidden", "Forbidden", "Forbidden", "1:SPU/2:PPU/3:CPU", "Forbidden", "1:PPU/2:SPU/3:CPU"
- };
- static const char* const s_addr_decode[4] =
- {
- "ROMCSB: 4000-3fffff, CSB1: ---, CSB2: ---, CSB3: ---",
- "ROMCSB: 4000-1fffff, CSB1: 200000-3fffff, CSB2: ---, CSB3: ---",
- "ROMCSB: 4000-0fffff, CSB1: 100000-1fffff, CSB2: 200000-2fffff, CSB3: 300000-3fffff",
- "ROMCSB: 4000-0fffff, CSB1: 100000-1fffff, CSB2: 200000-2fffff, CSB3: 300000-3fffff"
- };
- static const char* const s_ram_decode[16] =
- {
- "None", "None", "None", "None", "None", "None", "None", "None",
- "4KW, 3ff000-3fffff\n",
- "8KW, 3fe000-3fffff\n",
- "16KW, 3fc000-3fffff\n",
- "32KW, 3f8000-3fffff\n",
- "64KW, 3f0000-3fffff\n",
- "128KW, 3e0000-3fffff\n",
- "256KW, 3c0000-3fffff\n",
- "512KW, 380000-3fffff\n"
- };
- LOGMASKED(LOG_EXT_MEM, "io_w: Ext. Memory Control (not yet implemented) = %04x:\n", data);
- LOGMASKED(LOG_EXT_MEM, " WaitStates:%d, BusArbPrio:%s\n", (data >> 1) & 3, s_bus_arb[(data >> 3) & 7]);
- LOGMASKED(LOG_EXT_MEM, " ROMAddrDecode:%s\n", s_addr_decode[(data >> 6) & 3]);
- LOGMASKED(LOG_EXT_MEM, " RAMAddrDecode:%s\n", s_ram_decode[(data >> 8) & 15]);
- m_chip_sel((data >> 6) & 3);
- m_io_regs[offset] = data;
- break;
- }
-
- case 0x24: // Watchdog
- LOGMASKED(LOG_WATCHDOG, "io_w: Watchdog Pet = %04x\n", data);
- break;
-
- case 0x25: // ADC Control
- {
- LOGMASKED(LOG_IO_WRITES, "%s: io_w: ADC Control = %04x\n", machine().describe_context(), data);
- m_io_regs[offset] = data & ~0x1000;
- if (BIT(data, 0))
- {
- m_io_regs[0x27] = 0x8000 | (m_adc_in[BIT(data, 5)]() & 0x7fff);
- m_io_regs[0x25] |= 0x2000;
- }
- if (BIT(data, 12) && !BIT(m_io_regs[offset], 1))
- {
- const uint16_t old = IO_IRQ_STATUS;
- IO_IRQ_STATUS |= 0x2000;
- const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
- if (changed)
- {
- check_irqs(changed);
- }
- }
- break;
- }
-
- case 0x28: // Sleep Mode
- LOGMASKED(LOG_IO_WRITES, "io_w: Sleep Mode (%s enter value) = %04x\n", data == 0xaa55 ? "valid" : "invalid", data);
- m_io_regs[offset] = data;
- break;
-
- case 0x29: // Wakeup Source
- {
- m_io_regs[offset] = data;
- static const char* const s_sources[8] =
- {
- "TMB1", "TMB2", "2Hz", "4Hz", "1024Hz", "2048Hz", "4096Hz", "Key"
- };
-
- LOGMASKED(LOG_IO_WRITES, "io_w: Wakeup Source = %04x:\n", data);
- bool comma = false;
- char buf[1024];
- int char_idx = 0;
- for (int i = 7; i >= 0; i--)
- {
- if (BIT(data, i))
- {
- char_idx += sprintf(&buf[char_idx], "%s%s", comma ? ", " : "", s_sources[i]);
- comma = true;
- }
- }
- buf[char_idx] = 0;
- LOGMASKED(LOG_IO_WRITES, " %s\n", buf);
- break;
- }
-
- case 0x2c: // PRNG 0 seed
- LOGMASKED(LOG_IO_WRITES, "io_w: PRNG 0 seed = %04x\n", data & 0x7fff);
- m_io_regs[offset] = data & 0x7fff;
- break;
-
- case 0x2d: // PRNG 1 seed
- LOGMASKED(LOG_IO_WRITES, "io_w: PRNG 1 seed = %04x\n", data & 0x7fff);
- m_io_regs[offset] = data & 0x7fff;
- break;
-
- case 0x2e: // FIQ Source Select
- {
- static const char* const s_fiq_select[8] =
- {
- "PPU", "SPU Channel", "Timer A", "Timer B", "UART/SPI", "External", "Reserved", "None"
- };
- LOGMASKED(LOG_FIQ, "io_w: FIQ Source Select (not yet implemented) = %04x, %s\n", data, s_fiq_select[data & 7]);
- m_io_regs[offset] = data;
- break;
- }
-
- case 0x2f: // Data Segment
- m_cpu->set_ds(data & 0x3f);
- LOGMASKED(LOG_SEGMENT, "io_w: Data Segment = %04x\n", data);
- break;
-
- case 0x30: // UART Control
- {
- static const char* const s_9th_bit[4] = { "0", "1", "Odd", "Even" };
- LOGMASKED(LOG_UART, "%s: io_w: UART Control = %04x (TxEn:%d, RxEn:%d, Bits:%d, MultiProc:%d, 9thBit:%s, TxIntEn:%d, RxIntEn:%d\n",
- machine().describe_context(), data, BIT(data, 7), BIT(data, 6), BIT(data, 5) ? 9 : 8, BIT(data, 4), s_9th_bit[(data >> 2) & 3],
- BIT(data, 1), BIT(data, 0));
- const uint16_t changed = m_io_regs[offset] ^ data;
- m_io_regs[offset] = data;
- if (!BIT(data, 6))
- {
- m_uart_rx_available = false;
- m_io_regs[0x36] = 0;
- }
- if (BIT(changed, 7))
- {
- if (BIT(data, 7))
- {
- m_io_regs[0x31] |= 0x0002;
- }
- else
- {
- m_io_regs[0x31] &= ~0x0042;
- m_uart_tx_timer->adjust(attotime::never);
- }
- }
- break;
- }
-
- case 0x31: // UART Status
- LOGMASKED(LOG_UART, "%s: io_w: UART Status = %04x\n", machine().describe_context(), data);
- if (BIT(data, 0))
- {
- m_io_regs[0x31] &= ~1;
- m_uart_rx_irq = false;
- }
- if (BIT(data, 1))
- {
- m_io_regs[0x31] &= ~2;
- m_uart_tx_irq = false;
- }
- if (!m_uart_rx_irq && !m_uart_tx_irq)
- {
- const uint16_t old = IO_IRQ_STATUS;
- IO_IRQ_STATUS &= ~0x0100;
- const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
- if (changed)
- check_irqs(0x0100);
- }
- break;
-
- case 0x33: // UART Baud Rate (low byte)
- case 0x34: // UART Baud Rate (high byte)
- {
- m_io_regs[offset] = data;
- const uint32_t divisor = 16 * (0x10000 - ((m_io_regs[0x34] << 8) | m_io_regs[0x33]));
- LOGMASKED(LOG_UART, "%s: io_w: UART Baud Rate (%s byte): Baud rate = %d\n", offset == 0x33 ? "low" : "high", machine().describe_context(), 27000000 / divisor);
- m_uart_baud_rate = 27000000 / divisor;
- break;
- }
-
- case 0x35: // UART TX Data
- LOGMASKED(LOG_UART, "%s: io_w: UART Tx Data = %02x\n", machine().describe_context(), data & 0x00ff);
- m_io_regs[offset] = data;
- if (BIT(m_io_regs[0x30], 7))
- {
- LOGMASKED(LOG_UART, "io_w: UART Tx: Clearing ready bit, setting busy bit, setting up timer\n");
- m_uart_tx_timer->adjust(attotime::from_ticks(BIT(m_io_regs[0x30], 5) ? 11 : 10, m_uart_baud_rate));
- m_io_regs[0x31] &= ~0x0002;
- m_io_regs[0x31] |= 0x0040;
- }
- break;
-
- case 0x36: // UART RX Data
- LOGMASKED(LOG_UART, "%s: io_w: UART Rx Data (read-only) = %04x\n", machine().describe_context(), data);
- break;
-
- case 0x37: // UART Rx FIFO Control
- LOGMASKED(LOG_UART, "%s: io_w: UART Rx FIFO Control = %04x (Reset:%d, Overrun:%d, Underrun:%d, Count:%d, Threshold:%d)\n",
- machine().describe_context(), data, BIT(data, 15), BIT(data, 14), BIT(data, 13), (data >> 4) & 7, data & 7);
- if (data & 0x8000)
- {
- m_uart_rx_available = false;
- m_io_regs[0x36] = 0;
- }
- m_io_regs[offset] &= ~data & 0x6000;
- m_io_regs[offset] &= ~0x0007;
- m_io_regs[offset] |= data & 0x0007;
- break;
-
- case 0x50: // SIO Setup
- {
- static const char* const s_addr_mode[4] = { "16-bit", "None", "8-bit", "24-bit" };
- static const char* const s_baud_rate[4] = { "/16", "/4", "/8", "/32" };
- LOGMASKED(LOG_SIO, "io_w: SIO Setup (not implemented) = %04x (DS301Ready:%d, Start:%d, Auto:%d, IRQEn:%d, Width:%d, Related:%d\n", data
- , BIT(data, 11), BIT(data, 10), BIT(data, 9), BIT(data, 8), BIT(data, 7) ? 16 : 8, BIT(data, 6));
- LOGMASKED(LOG_SIO, " (Mode:%s, RWProtocol:%d, Rate:sysclk%s, AddrMode:%s)\n"
- , BIT(data, 5), BIT(data, 4), s_baud_rate[(data >> 2) & 3], s_addr_mode[data & 3]);
- break;
- }
-
- case 0x52: // SIO Start Address (low)
- LOGMASKED(LOG_SIO, "io_w: SIO Stat Address (low) (not implemented) = %04x\n", data);
- break;
-
- case 0x53: // SIO Start Address (hi)
- LOGMASKED(LOG_SIO, "io_w: SIO Stat Address (hi) (not implemented) = %04x\n", data);
- break;
-
- case 0x54: // SIO Data
- LOGMASKED(LOG_SIO, "io_w: SIO Data (not implemented) = %04x\n", data);
- break;
-
- case 0x55: // SIO Automatic Transmit Count
- LOGMASKED(LOG_SIO, "io_w: SIO Auto Transmit Count (not implemented) = %04x\n", data);
- break;
-
- case 0x58: // I2C Command
- LOGMASKED(LOG_I2C, "io_w: I2C Command = %04x\n", data);
- m_io_regs[offset] = data;
- do_i2c();
- break;
-
- case 0x59: // I2C Status / Acknowledge
- LOGMASKED(LOG_I2C, "io_w: I2C Acknowledge = %04x\n", data);
- m_io_regs[offset] &= ~data;
- break;
-
- case 0x5a: // I2C Access Mode
- LOGMASKED(LOG_I2C, "io_w: I2C Access Mode = %04x\n", data);
- m_io_regs[offset] = data;
- break;
-
- case 0x5b: // I2C Device Address
- LOGMASKED(LOG_I2C, "io_w: I2C Device Address = %04x\n", data);
- m_io_regs[offset] = data;
- break;
-
- case 0x5c: // I2C Sub-Address
- LOGMASKED(LOG_I2C, "io_w: I2C Sub-Address = %04x\n", data);
- m_io_regs[offset] = data;
- break;
-
- case 0x5d: // I2C Data Out
- LOGMASKED(LOG_I2C, "io_w: I2C Data Out = %04x\n", data);
- m_io_regs[offset] = data;
- break;
-
- case 0x5e: // I2C Data In
- LOGMASKED(LOG_I2C, "io_w: I2C Data In = %04x\n", data);
- m_io_regs[offset] = data;
- break;
-
- case 0x5f: // I2C Controller Mode
- LOGMASKED(LOG_I2C, "io_w: I2C Controller Mode = %04x\n", data);
- m_io_regs[offset] = data;
- break;
-
- case 0x100: // DMA Source (lo)
- LOGMASKED(LOG_DMA, "io_w: DMA Source (lo) = %04x\n", data);
- m_io_regs[offset] = data;
- break;
-
- case 0x101: // DMA Source (hi)
- LOGMASKED(LOG_DMA, "io_w: DMA Source (hi) = %04x\n", data);
- m_io_regs[offset] = data;
- break;
-
- case 0x103: // DMA Destination
- LOGMASKED(LOG_DMA, "io_w: DMA Dest = %04x\n", data);
- m_io_regs[offset] = data;
- break;
-
- case 0x102: // DMA Length
- LOGMASKED(LOG_DMA, "io_w: DMA Length = %04x\n", data);
- if (!(data & 0xc000)) // jak_dora writes 0xffff here which ends up trashing registers etc. why? such writes can't be valid
- do_cpu_dma(data);
-
- break;
-
- default:
- LOGMASKED(LOG_UNKNOWN_IO, "io_w: Unknown register %04x = %04x\n", 0x3d00 + offset, data);
- m_io_regs[offset] = data;
- break;
- }
-}
-
-void spg2xx_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
-{
- switch (id)
- {
- case TIMER_TMB1:
- {
- LOGMASKED(LOG_TIMERS, "TMB1 elapsed, setting IRQ Status bit 0 (old:%04x, new:%04x, enable:%04x)\n", IO_IRQ_STATUS, IO_IRQ_STATUS | 1, IO_IRQ_ENABLE);
- const uint16_t old = IO_IRQ_STATUS;
- IO_IRQ_STATUS |= 1;
- const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
- if (changed)
- check_irqs(0x0001);
- break;
- }
-
- case TIMER_TMB2:
- {
- LOGMASKED(LOG_TIMERS, "TMB2 elapsed, setting IRQ Status bit 1 (old:%04x, new:%04x, enable:%04x)\n", IO_IRQ_STATUS, IO_IRQ_STATUS | 2, IO_IRQ_ENABLE);
- const uint16_t old = IO_IRQ_STATUS;
- IO_IRQ_STATUS |= 2;
- const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
- if (changed)
- check_irqs(0x0002);
- break;
- }
-
- case TIMER_SCREENPOS:
- {
- if (VIDEO_IRQ_ENABLE & 2)
- {
- VIDEO_IRQ_STATUS |= 2;
- check_video_irq();
- }
- m_screen->update_partial(m_screen->vpos());
-
- // fire again, jak_dbz pinball needs this
- m_screenpos_timer->adjust(m_screen->time_until_pos(m_video_regs[0x36], m_video_regs[0x37] << 1));
- break;
- }
-
- case TIMER_UART_TX:
- uart_transmit_tick();
- break;
-
- case TIMER_UART_RX:
- uart_receive_tick();
- break;
-
- case TIMER_4KHZ:
- system_timer_tick();
- break;
-
- case TIMER_SRC_AB:
- update_timer_ab_src();
- break;
-
- case TIMER_SRC_C:
- update_timer_c_src();
- break;
- }
-}
-
-void spg2xx_device::system_timer_tick()
-{
- const uint16_t old = IO_IRQ_STATUS;
- uint16_t check_mask = 0x0040;
- IO_IRQ_STATUS |= 0x0040;
-
- m_2khz_divider++;
- if (m_2khz_divider == 2)
- {
- m_2khz_divider = 0;
- IO_IRQ_STATUS |= 0x0020;
- check_mask |= 0x0020;
-
- m_1khz_divider++;
- if (m_1khz_divider == 2)
- {
- m_1khz_divider = 0;
- IO_IRQ_STATUS |= 0x0010;
- check_mask |= 0x0010;
-
- m_4hz_divider++;
- if (m_4hz_divider == 256)
- {
- m_4hz_divider = 0;
- IO_IRQ_STATUS |= 0x0008;
- check_mask |= 0x0008;
- }
- }
- }
-
- const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
- if (changed)
- check_irqs(check_mask);
-}
-
-void spg2xx_device::uart_transmit_tick()
+WRITE_LINE_MEMBER(spg2xx_device::audioirq_w)
{
- LOGMASKED(LOG_UART, "uart_transmit_tick: Transmitting %02x, setting TxReady, clearing TxBusy\n", (uint8_t)m_io_regs[0x35]);
- m_uart_tx((uint8_t)m_io_regs[0x35]);
- m_io_regs[0x31] |= 0x0002;
- m_io_regs[0x31] &= ~0x0040;
- if (BIT(m_io_regs[0x30], 1))
- {
- const uint16_t old = IO_IRQ_STATUS;
- IO_IRQ_STATUS |= 0x0100;
- m_uart_tx_irq = true;
- LOGMASKED(LOG_UART, "uart_transmit_tick: Setting UART IRQ bit\n");
- if (IO_IRQ_STATUS != old)
- {
- LOGMASKED(LOG_UART, "uart_transmit_tick: Bit newly set, checking IRQs\n");
- check_irqs(0x0100);
- }
- }
+ m_cpu->set_state_unsynced(UNSP_IRQ4_LINE, state);
}
-void spg2xx_device::uart_receive_tick()
+WRITE_LINE_MEMBER(spg2xx_device::extirq_w)
{
- LOGMASKED(LOG_UART, "uart_receive_tick: Setting RBF and RxRDY\n");
- m_io_regs[0x31] |= 0x81;
- m_uart_rx_available = true;
- if (BIT(m_io_regs[0x30], 0))
- {
- LOGMASKED(LOG_UART, "uart_receive_tick: RxIntEn is set, setting rx_irq to true and setting UART IRQ\n");
- m_uart_rx_irq = true;
- IO_IRQ_STATUS |= 0x0100;
- check_irqs(0x0100);
- }
+ m_cpu->set_state_unsynced(UNSP_IRQ5_LINE, state);
}
-void spg2xx_device::extint_w(int channel, bool state)
+WRITE_LINE_MEMBER(spg2xx_device::ffreq1_w)
{
- LOGMASKED(LOG_EXTINT, "Setting extint channel %d to %s\n", channel, state ? "true" : "false");
- bool old = m_extint[channel];
- m_extint[channel] = state;
- if (old != state)
- {
- check_extint_irq(channel);
- }
+ m_cpu->set_state_unsynced(UNSP_IRQ6_LINE, state);
}
-void spg2xx_device::check_extint_irq(int channel)
+WRITE_LINE_MEMBER(spg2xx_device::ffreq2_w)
{
- LOGMASKED(LOG_EXTINT, "%sing extint %d interrupt\n", m_extint[channel] ? "rais" : "lower", channel + 1);
- const uint16_t mask = (channel == 0) ? 0x0200 : 0x1000;
- const uint16_t old_irq = IO_IRQ_STATUS;
- if (m_extint[channel])
- IO_IRQ_STATUS |= mask;
- else
- IO_IRQ_STATUS &= ~mask;
-
- if (old_irq != IO_IRQ_STATUS)
- {
- LOGMASKED(LOG_EXTINT, "extint IRQ changed, so checking interrupts\n");
- check_irqs(mask);
- }
+ m_cpu->set_state_unsynced(UNSP_IRQ7_LINE, state);
}
-void spg2xx_device::check_irqs(const uint16_t changed)
-{
- // {
- // m_cpu->set_state_unsynced(UNSP_IRQ1_LINE, ASSERT_LINE);
- // }
-
- if (changed & 0x0c00) // Timer A, Timer B IRQ
- {
- LOGMASKED(LOG_TIMERS, "%ssserting IRQ2 (%04x, %04x)\n", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0c00) ? "A" : "Dea", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0c00), changed);
- m_cpu->set_state_unsynced(UNSP_IRQ2_LINE, (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0c00) ? ASSERT_LINE : CLEAR_LINE);
- }
-
- if (changed & 0x2100) // UART, ADC IRQ
- {
- LOGMASKED(LOG_UART, "%ssserting IRQ3 (%04x, %04x)\n", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x2100) ? "A" : "Dea", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x2100), changed);
- m_cpu->set_state_unsynced(UNSP_IRQ3_LINE, (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x2100) ? ASSERT_LINE : CLEAR_LINE);
- }
- if (changed & 0x1200) // External IRQ
- {
- LOGMASKED(LOG_UART, "%ssserting IRQ5 (%04x, %04x)\n", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x1200) ? "A" : "Dea", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x1200), changed);
- m_cpu->set_state_unsynced(UNSP_IRQ5_LINE, (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x1200) ? ASSERT_LINE : CLEAR_LINE);
- }
- if (changed & 0x0070) // 1024Hz, 2048Hz, 4096Hz IRQ
- {
- LOGMASKED(LOG_TIMERS, "%ssserting IRQ6 (%04x, %04x)\n", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0070) ? "A" : "Dea", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0070), changed);
- m_cpu->set_state_unsynced(UNSP_IRQ6_LINE, (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0070) ? ASSERT_LINE : CLEAR_LINE);
- }
-
- if (changed & 0x008b) // TMB1, TMB2, 4Hz, key change IRQ
- {
- LOGMASKED(LOG_IRQS, "%ssserting IRQ7 (%04x, %04x)\n", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x008b) ? "A" : "Dea", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x008b), changed);
- m_cpu->set_state_unsynced(UNSP_IRQ7_LINE, (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x008b) ? ASSERT_LINE : CLEAR_LINE);
- }
-}
-
-uint16_t spg2xx_device::do_special_gpio(uint32_t index, uint16_t mask)
+READ16_MEMBER(spg2xx_device::space_r)
{
- uint16_t data = 0;
- switch (index)
- {
- case 0: // Port A
- if (mask & 0xe000)
- {
- const uint8_t csel = m_cpu->get_csb() & 0x0e;
- data = (csel << 12) & mask;
- }
- break;
- case 1: // Port B
- // To do
- break;
- case 2: // Port C
- // To do
- break;
- default:
- // Can't happen
- break;
- }
- return data;
+ address_space &cpuspace = m_cpu->space(AS_PROGRAM);
+ return cpuspace.read_word(offset);
}
-void spg2xx_device::do_gpio(uint32_t offset, bool write)
+void spg2xx_device::configure_spg_io(spg2xx_io_device* io)
{
- uint32_t index = (offset - 1) / 5;
- uint16_t buffer = m_io_regs[5 * index + 2];
- uint16_t dir = m_io_regs[5 * index + 3];
- uint16_t attr = m_io_regs[5 * index + 4];
- uint16_t special = m_io_regs[5 * index + 5];
-
- uint16_t push = dir;
- uint16_t pull = ~dir;
- uint16_t what = (buffer & (push | pull));
- what ^= (dir & ~attr);
- what &= ~special;
-
- switch (index)
- {
- case 0:
- if (write)
- m_porta_out(0, what, push &~ special);
- what = (what & ~pull);
- if (!write)
- what |= m_porta_in(0, pull &~ special) & pull;
- break;
- case 1:
- if (write)
- m_portb_out(0, what, push &~ special);
- what = (what & ~pull);
- if (!write)
- what |= m_portb_in(0, pull &~ special) & pull;
- break;
- case 2:
- if (write)
- m_portc_out(0, what, push &~ special);
- what = (what & ~pull);
- if (!write)
- what |= m_portc_in(0, pull &~ special) & pull;
- break;
- }
-
- what |= do_special_gpio(index, special);
- m_io_regs[5 * index + 1] = what;
+ io->porta_in().set(FUNC(spg2xx_device::porta_r));
+ io->portb_in().set(FUNC(spg2xx_device::portb_r));
+ io->portc_in().set(FUNC(spg2xx_device::portc_r));
+ io->porta_out().set(FUNC(spg2xx_device::porta_w));
+ io->portb_out().set(FUNC(spg2xx_device::portb_w));
+ io->portc_out().set(FUNC(spg2xx_device::portc_w));
+ io->adc_in<0>().set(FUNC(spg2xx_device::adc_r<0>));
+ io->adc_in<1>().set(FUNC(spg2xx_device::adc_r<1>));
+ io->eeprom_w().set(FUNC(spg2xx_device::eepromx_w));
+ io->eeprom_r().set(FUNC(spg2xx_device::eepromx_r));
+ io->uart_tx().set(FUNC(spg2xx_device::tx_w));
+ io->chip_select().set(FUNC(spg2xx_device::cs_w));
+ io->pal_read_callback().set(FUNC(spg2xx_device::get_pal_ntsc));
+ io->write_timer_irq_callback().set(FUNC(spg2xx_device::timerirq_w));
+ io->write_uart_adc_irq_callback().set(FUNC(spg2xx_device::uartirq_w));
+ io->write_external_irq_callback().set(FUNC(spg2xx_device::extirq_w));
+ io->write_ffrq_tmr1_irq_callback().set(FUNC(spg2xx_device::ffreq1_w));
+ io->write_ffrq_tmr2_irq_callback().set(FUNC(spg2xx_device::ffreq2_w));
}
-void spg2xx_device::do_i2c()
+void spg24x_device::device_add_mconfig(machine_config &config)
{
- const uint16_t addr = ((m_io_regs[0x5b] & 0x06) << 7) | (uint8_t)m_io_regs[0x5c];
-
- if (m_io_regs[0x58] & 0x40) // Serial EEPROM read
- m_io_regs[0x5e] = m_eeprom_r(addr);
- else
- m_eeprom_w(addr, m_io_regs[0x5d]);
-
- m_io_regs[0x59] |= 1;
-}
+ SPG2XX_AUDIO(config, m_spg_audio, DERIVED_CLOCK(1, 1));
+ m_spg_audio->write_irq_callback().set(FUNC(spg24x_device::audioirq_w));
+ m_spg_audio->space_read_callback().set(FUNC(spg24x_device::space_r));
-void spg2xx_device::do_cpu_dma(uint32_t len)
-{
- address_space &mem = m_cpu->space(AS_PROGRAM);
+ m_spg_audio->add_route(0, *this, 1.0, AUTO_ALLOC_INPUT, 0);
+ m_spg_audio->add_route(1, *this, 1.0, AUTO_ALLOC_INPUT, 1);
- uint32_t src = ((m_io_regs[0x101] & 0x3f) << 16) | m_io_regs[0x100];
- uint32_t dst = m_io_regs[0x103] & 0x3fff;
+ SPG24X_IO(config, m_spg_io, DERIVED_CLOCK(1, 1), m_cpu, m_screen);
+ configure_spg_io(m_spg_io);
- for (uint32_t j = 0; j < len; j++)
- {
- mem.write_word((dst + j) & 0x3fff, mem.read_word(src + j));
- }
+ SPG2XX_SYSDMA(config, m_spg_sysdma, DERIVED_CLOCK(1, 1), m_cpu);
- src += len;
- m_io_regs[0x100] = (uint16_t)src;
- m_io_regs[0x101] = (src >> 16) & 0x3f;
- m_io_regs[0x102] = 0;
- m_io_regs[0x103] = (dst + len) & 0x3fff;
+ SPG24X_VIDEO(config, m_spg_video, DERIVED_CLOCK(1, 1), m_cpu, m_screen);
+ m_spg_video->sprlimit_read_callback().set(FUNC(spg24x_device::get_sprlimit));
+ m_spg_video->rowscrolloffset_read_callback().set(FUNC(spg24x_device::get_rowscrolloffset));
+ m_spg_video->write_video_irq_callback().set(FUNC(spg24x_device::videoirq_w));
}
-void spg2xx_device::device_add_mconfig(machine_config &config)
+void spg28x_device::device_add_mconfig(machine_config &config)
{
SPG2XX_AUDIO(config, m_spg_audio, DERIVED_CLOCK(1, 1));
- m_spg_audio->write_irq_callback().set(FUNC(spg2xx_device::audioirq_w));
- m_spg_audio->space_read_callback().set(FUNC(spg2xx_device::space_r));
+ m_spg_audio->write_irq_callback().set(FUNC(spg28x_device::audioirq_w));
+ m_spg_audio->space_read_callback().set(FUNC(spg28x_device::space_r));
m_spg_audio->add_route(0, *this, 1.0, AUTO_ALLOC_INPUT, 0);
m_spg_audio->add_route(1, *this, 1.0, AUTO_ALLOC_INPUT, 1);
+
+ SPG28X_IO(config, m_spg_io, DERIVED_CLOCK(1, 1), m_cpu, m_screen);
+ configure_spg_io(m_spg_io);
+
+ SPG2XX_SYSDMA(config, m_spg_sysdma, DERIVED_CLOCK(1, 1), m_cpu);
+
+ SPG24X_VIDEO(config, m_spg_video, DERIVED_CLOCK(1, 1), m_cpu, m_screen);
+ m_spg_video->sprlimit_read_callback().set(FUNC(spg28x_device::get_sprlimit));
+ m_spg_video->rowscrolloffset_read_callback().set(FUNC(spg28x_device::get_rowscrolloffset));
+ m_spg_video->write_video_irq_callback().set(FUNC(spg28x_device::videoirq_w));
}
diff --git a/src/devices/machine/spg2xx.h b/src/devices/machine/spg2xx.h
index b35559d0dd3..806e8395c4d 100644
--- a/src/devices/machine/spg2xx.h
+++ b/src/devices/machine/spg2xx.h
@@ -36,6 +36,9 @@
#include "cpu/unsp/unsp.h"
#include "spg2xx_audio.h"
+#include "spg2xx_io.h"
+#include "spg2xx_sysdma.h"
+#include "spg2xx_video.h"
#include "screen.h"
class spg2xx_device : public device_t, public device_mixer_interface
@@ -64,14 +67,16 @@ public:
auto chip_select() { return m_chip_sel.bind(); }
- void uart_rx(uint8_t data);
-
- void extint_w(int channel, bool state);
+ required_device<spg2xx_audio_device> m_spg_audio;
+ required_device<spg2xx_io_device> m_spg_io;
+ required_device<spg2xx_sysdma_device> m_spg_sysdma;
+ required_device<spg2xx_video_device> m_spg_video;
- uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
- DECLARE_WRITE_LINE_MEMBER(vblank);
+ void extint_w(int channel, bool state) { m_spg_io->extint_w(channel, state); }
+ void uart_rx(uint8_t data) { m_spg_io->uart_rx(data); }
- required_device<spg2xx_audio_device> m_spg_audio;
+ DECLARE_WRITE_LINE_MEMBER(vblank) { m_spg_video->vblank(state); }
+ uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { return m_spg_video->screen_update(screen, bitmap, cliprect); }
protected:
spg2xx_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, const uint32_t sprite_limit)
@@ -80,132 +85,28 @@ protected:
m_sprite_limit = sprite_limit;
}
- virtual void device_add_mconfig(machine_config &config) override;
-
- enum
- {
- PAGE_ENABLE_MASK = 0x0008,
- PAGE_WALLPAPER_MASK = 0x0004,
-
- SPRITE_ENABLE_MASK = 0x0001,
- SPRITE_COORD_TL_MASK = 0x0002,
-
- PAGE_DEPTH_FLAG_MASK = 0x3000,
- PAGE_DEPTH_FLAG_SHIFT = 12,
- PAGE_TILE_HEIGHT_MASK = 0x00c0,
- PAGE_TILE_HEIGHT_SHIFT = 6,
- PAGE_TILE_WIDTH_MASK = 0x0030,
- PAGE_TILE_WIDTH_SHIFT = 4,
- TILE_X_FLIP = 0x0004,
- TILE_Y_FLIP = 0x0008
- };
-
- DECLARE_READ16_MEMBER(video_r);
- DECLARE_WRITE16_MEMBER(video_w);
-
- virtual DECLARE_READ16_MEMBER(io_r);
- virtual DECLARE_WRITE16_MEMBER(io_w);
-
+ DECLARE_WRITE_LINE_MEMBER(videoirq_w);
DECLARE_WRITE_LINE_MEMBER(audioirq_w);
- DECLARE_READ16_MEMBER(space_r);
+ DECLARE_WRITE_LINE_MEMBER(timerirq_w);
+ DECLARE_WRITE_LINE_MEMBER(uartirq_w);
+ DECLARE_WRITE_LINE_MEMBER(extirq_w);
+ DECLARE_WRITE_LINE_MEMBER(ffreq1_w);
+ DECLARE_WRITE_LINE_MEMBER(ffreq2_w);
- void check_extint_irq(int channel);
- void check_irqs(const uint16_t changed);
- inline void check_video_irq();
+ DECLARE_READ16_MEMBER(space_r);
void spg2xx_map(address_map &map);
- static const device_timer_id TIMER_TMB1 = 0;
- static const device_timer_id TIMER_TMB2 = 1;
- static const device_timer_id TIMER_SCREENPOS = 2;
- static const device_timer_id TIMER_BEAT = 3;
- static const device_timer_id TIMER_UART_TX = 4;
- static const device_timer_id TIMER_UART_RX = 5;
- static const device_timer_id TIMER_4KHZ = 6;
- static const device_timer_id TIMER_SRC_AB = 7;
- static const device_timer_id TIMER_SRC_C = 8;
-
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;
-
- void update_porta_special_modes();
- void update_portb_special_modes();
- void do_gpio(uint32_t offset, bool write);
- uint16_t do_special_gpio(uint32_t index, uint16_t mask);
-
- void update_timer_b_rate();
- void update_timer_ab_src();
- void update_timer_c_src();
- void increment_timer_a();
-
- void uart_transmit_tick();
- void uart_receive_tick();
-
- void system_timer_tick();
-
- void do_i2c();
- void do_cpu_dma(uint32_t len);
- void do_sprite_dma(uint32_t len);
-
- enum blend_enable_t : bool
- {
- BlendOff = false,
- BlendOn = true
- };
-
- enum rowscroll_enable_t : bool
- {
- RowScrollOff = false,
- RowScrollOn = true
- };
-
- enum flipx_t : bool
- {
- FlipXOff = false,
- FlipXOn = true
- };
-
- void apply_saturation(const rectangle &cliprect);
- void apply_fade(const rectangle &cliprect);
-
- template<blend_enable_t Blend, rowscroll_enable_t RowScroll, flipx_t FlipX>
- void blit(const rectangle &cliprect, uint32_t line, uint32_t xoff, uint32_t yoff, uint32_t attr, uint32_t ctrl, uint32_t bitmap_addr, uint16_t tile);
- void blit_page(const rectangle &cliprect, uint32_t scanline, int depth, uint32_t bitmap_addr, uint16_t *regs);
- void blit_sprite(const rectangle &cliprect, uint32_t scanline, int depth, uint32_t base_addr);
- void blit_sprites(const rectangle &cliprect, uint32_t scanline, int depth);
-
- uint8_t mix_channel(uint8_t a, uint8_t b);
-
- uint32_t m_screenbuf[320 * 240];
- uint8_t m_rgb5_to_rgb8[32];
- uint32_t m_rgb555_to_rgb888[0x8000];
-
- bool m_hide_page0;
- bool m_hide_page1;
- bool m_hide_sprites;
- bool m_debug_sprites;
- bool m_debug_blit;
- bool m_debug_palette;
- uint8_t m_sprite_index_to_debug;
-
-
- uint16_t m_io_regs[0x200];
- uint8_t m_uart_rx_fifo[8];
- uint8_t m_uart_rx_fifo_start;
- uint8_t m_uart_rx_fifo_end;
- uint8_t m_uart_rx_fifo_count;
- bool m_uart_rx_available;
- bool m_uart_rx_irq;
- bool m_uart_tx_irq;
-
- bool m_extint[2];
-
- uint16_t m_video_regs[0x100];
- uint32_t m_sprite_limit;
- int m_rowscrolloffset; // auto racing in 'zone60' minigames needs this to be 15, the JAKKS games (Star Wars Revenge of the sith - Gunship Battle, Wheel of Fortune, Namco Ms. Pac-Man 5-in-1 Pole Position) need it to be 0, where does it come from?
+ // TODO: these are fixed values, put them in relevant devices?
+ uint16_t m_sprite_limit;
+ uint16_t m_rowscrolloffset; // auto racing in 'zone60' minigames needs this to be 15, the JAKKS games (Star Wars Revenge of the sith - Gunship Battle, Wheel of Fortune, Namco Ms. Pac-Man 5-in-1 Pole Position) need it to be 0, where does it come from?
uint16_t m_pal_flag;
+ DECLARE_READ16_MEMBER(get_sprlimit) { return m_sprite_limit; }
+ DECLARE_READ16_MEMBER(get_rowscrolloffset) { return m_rowscrolloffset; }
+ DECLARE_READ16_MEMBER(get_pal_ntsc) { return m_pal_flag; }
devcb_write16 m_porta_out;
devcb_write16 m_portb_out;
@@ -223,31 +124,26 @@ protected:
devcb_write8 m_chip_sel;
- uint16_t m_timer_a_preload;
- uint16_t m_timer_b_preload;
- uint16_t m_timer_b_divisor;
- uint16_t m_timer_b_tick_rate;
-
- emu_timer *m_tmb1;
- emu_timer *m_tmb2;
- emu_timer *m_timer_src_ab;
- emu_timer *m_timer_src_c;
emu_timer *m_screenpos_timer;
- emu_timer *m_4khz_timer;
- uint32_t m_2khz_divider;
- uint32_t m_1khz_divider;
- uint32_t m_4hz_divider;
-
- uint32_t m_uart_baud_rate;
- emu_timer *m_uart_tx_timer;
- emu_timer *m_uart_rx_timer;
-
required_device<unsp_device> m_cpu;
required_device<screen_device> m_screen;
- required_shared_ptr<uint16_t> m_scrollram;
- required_shared_ptr<uint16_t> m_paletteram;
- required_shared_ptr<uint16_t> m_spriteram;
+
+ void configure_spg_io(spg2xx_io_device* io);
+
+ DECLARE_READ16_MEMBER(porta_r) { return m_porta_in(); }
+ DECLARE_READ16_MEMBER(portb_r) { return m_portb_in(); }
+ DECLARE_READ16_MEMBER(portc_r) { return m_portc_in(); }
+ DECLARE_WRITE16_MEMBER(porta_w) { m_porta_out(offset, data, mem_mask); }
+ DECLARE_WRITE16_MEMBER(portb_w) { m_portb_out(offset, data, mem_mask); }
+ DECLARE_WRITE16_MEMBER(portc_w) { m_portc_out(offset, data, mem_mask); }
+ template <size_t Line> DECLARE_READ16_MEMBER(adc_r) { return m_adc_in[Line](); }
+
+ DECLARE_WRITE8_MEMBER(eepromx_w) { m_eeprom_w(offset, data, mem_mask); }
+ DECLARE_READ8_MEMBER(eepromx_r) { return m_eeprom_r(); };
+
+ DECLARE_WRITE8_MEMBER(tx_w) { m_uart_tx(offset, data, mem_mask); }
+ DECLARE_WRITE8_MEMBER(cs_w) { m_chip_sel(offset, data, mem_mask); }
};
class spg24x_device : public spg2xx_device
@@ -262,6 +158,9 @@ public:
}
spg24x_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ virtual void device_add_mconfig(machine_config &config) override;
+
};
class spg28x_device : public spg2xx_device
@@ -277,7 +176,8 @@ public:
spg28x_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE16_MEMBER(io_w) override;
+ virtual void device_add_mconfig(machine_config &config) override;
+
};
DECLARE_DEVICE_TYPE(SPG24X, spg24x_device)
diff --git a/src/devices/machine/spg2xx_audio.h b/src/devices/machine/spg2xx_audio.h
index 2ea8b26651a..22f5108e405 100644
--- a/src/devices/machine/spg2xx_audio.h
+++ b/src/devices/machine/spg2xx_audio.h
@@ -204,7 +204,7 @@ protected:
AUDIO_CHAN_OFFSET_MASK = 0xf0f,
};
-
+
enum // at audio write offset 0x400 in spg2xx
{
diff --git a/src/devices/machine/spg2xx_io.cpp b/src/devices/machine/spg2xx_io.cpp
new file mode 100644
index 00000000000..f8daaef5bd0
--- /dev/null
+++ b/src/devices/machine/spg2xx_io.cpp
@@ -0,0 +1,1313 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+
+/* this is used by the SPG110, SPG24x and SPG28x
+ basic I/O behavior is definitely the same on the SPG110 but
+ the rest needs verifying */
+
+#include "emu.h"
+#include "spg2xx_io.h"
+
+DEFINE_DEVICE_TYPE(SPG24X_IO, spg24x_io_device, "spg24x_io", "SPG240-series System-on-a-Chip I/O")
+DEFINE_DEVICE_TYPE(SPG28X_IO, spg28x_io_device, "spg28x_io", "SPG280-series System-on-a-Chip I/O")
+
+#define LOG_IO_READS (1U << 1)
+#define LOG_IO_WRITES (1U << 2)
+#define LOG_UNKNOWN_IO (1U << 3)
+#define LOG_IRQS (1U << 4)
+#define LOG_VLINES (1U << 5)
+#define LOG_GPIO (1U << 6)
+#define LOG_UART (1U << 7)
+#define LOG_I2C (1U << 8)
+#define LOG_SEGMENT (1U << 10)
+#define LOG_WATCHDOG (1U << 11)
+#define LOG_TIMERS (1U << 12)
+#define LOG_FIQ (1U << 25)
+#define LOG_SIO (1U << 26)
+#define LOG_EXT_MEM (1U << 27)
+#define LOG_EXTINT (1U << 28)
+#define LOG_IO (LOG_IO_READS | LOG_IO_WRITES | LOG_IRQS | LOG_GPIO | LOG_UART | LOG_I2C | LOG_TIMERS | LOG_EXTINT | LOG_UNKNOWN_IO)
+#define LOG_ALL (LOG_IO | LOG_VLINES | LOG_SEGMENT | LOG_WATCHDOG | LOG_FIQ | LOG_SIO | LOG_EXT_MEM)
+
+#define VERBOSE (0)
+#include "logmacro.h"
+
+
+#define IO_IRQ_ENABLE m_io_regs[0x21]
+#define IO_IRQ_STATUS m_io_regs[0x22]
+
+spg2xx_io_device::spg2xx_io_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , m_porta_out(*this)
+ , m_portb_out(*this)
+ , m_portc_out(*this)
+ , m_porta_in(*this)
+ , m_portb_in(*this)
+ , m_portc_in(*this)
+ , m_adc_in{{*this}, {*this}}
+ , m_eeprom_w(*this)
+ , m_eeprom_r(*this)
+ , m_uart_tx(*this)
+ , m_chip_sel(*this)
+ , m_cpu(*this, finder_base::DUMMY_TAG)
+ , m_screen(*this, finder_base::DUMMY_TAG)
+ , m_pal_read_cb(*this)
+ , m_timer_irq_cb(*this)
+ , m_uart_adc_irq_cb(*this)
+ , m_external_irq_cb(*this)
+ , m_ffreq_tmr1_irq_cb(*this)
+ , m_ffreq_tmr2_irq_cb(*this)
+{
+}
+
+spg24x_io_device::spg24x_io_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : spg2xx_io_device(mconfig, SPG24X_IO, tag, owner, clock, 256)
+{
+}
+
+spg28x_io_device::spg28x_io_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : spg2xx_io_device(mconfig, SPG28X_IO, tag, owner, clock, 64)
+{
+}
+
+
+void spg2xx_io_device::device_start()
+{
+ m_porta_out.resolve_safe();
+ m_portb_out.resolve_safe();
+ m_portc_out.resolve_safe();
+ m_porta_in.resolve_safe(0);
+ m_portb_in.resolve_safe(0);
+ m_portc_in.resolve_safe(0);
+ m_adc_in[0].resolve_safe(0x0fff);
+ m_adc_in[1].resolve_safe(0x0fff);
+ m_eeprom_w.resolve_safe();
+ m_eeprom_r.resolve_safe(0);
+ m_uart_tx.resolve_safe();
+ m_chip_sel.resolve_safe();
+ m_pal_read_cb.resolve_safe(0);
+
+ m_timer_irq_cb.resolve();
+ m_uart_adc_irq_cb.resolve();
+ m_external_irq_cb.resolve();
+ m_ffreq_tmr1_irq_cb.resolve();
+ m_ffreq_tmr2_irq_cb.resolve();
+
+ m_tmb1 = timer_alloc(TIMER_TMB1);
+ m_tmb2 = timer_alloc(TIMER_TMB2);
+ m_tmb1->adjust(attotime::never);
+ m_tmb2->adjust(attotime::never);
+
+ m_uart_tx_timer = timer_alloc(TIMER_UART_TX);
+ m_uart_tx_timer->adjust(attotime::never);
+
+ m_uart_rx_timer = timer_alloc(TIMER_UART_RX);
+ m_uart_rx_timer->adjust(attotime::never);
+
+ m_4khz_timer = timer_alloc(TIMER_4KHZ);
+ m_4khz_timer->adjust(attotime::never);
+
+ m_timer_src_ab = timer_alloc(TIMER_SRC_AB);
+ m_timer_src_ab->adjust(attotime::never);
+
+ m_timer_src_c = timer_alloc(TIMER_SRC_C);
+ m_timer_src_c->adjust(attotime::never);
+
+ save_item(NAME(m_timer_a_preload));
+ save_item(NAME(m_timer_b_preload));
+ save_item(NAME(m_timer_b_divisor));
+ save_item(NAME(m_timer_b_tick_rate));
+
+ save_item(NAME(m_io_regs));
+
+ save_item(NAME(m_extint));
+
+ save_item(NAME(m_2khz_divider));
+ save_item(NAME(m_1khz_divider));
+ save_item(NAME(m_4hz_divider));
+
+ save_item(NAME(m_uart_baud_rate));
+
+}
+
+void spg2xx_io_device::device_reset()
+{
+ memset(m_io_regs, 0, 0x100 * sizeof(uint16_t));
+
+ m_timer_a_preload = 0;
+ m_timer_b_preload = 0;
+ m_timer_b_divisor = 0;
+ m_timer_b_tick_rate = 0;
+
+ m_io_regs[0x23] = 0x0028;
+ m_io_regs[0x2c] = 0x1418;
+ m_io_regs[0x2d] = 0x1658;
+
+ m_uart_rx_available = false;
+ memset(m_uart_rx_fifo, 0, ARRAY_LENGTH(m_uart_rx_fifo));
+ m_uart_rx_fifo_start = 0;
+ m_uart_rx_fifo_end = 0;
+ m_uart_rx_fifo_count = 0;
+ m_uart_tx_irq = false;
+ m_uart_rx_irq = false;
+
+ memset(m_extint, 0, sizeof(bool) * 2);
+
+ m_4khz_timer->adjust(attotime::from_hz(4096), 0, attotime::from_hz(4096));
+
+ m_2khz_divider = 0;
+ m_1khz_divider = 0;
+ m_4hz_divider = 0;
+}
+
+/*************************
+* Machine Hardware *
+*************************/
+
+void spg2xx_io_device::uart_rx(uint8_t data)
+{
+ LOGMASKED(LOG_UART, "uart_rx: Pulling %02x into receive FIFO\n", data);
+ if (BIT(m_io_regs[0x30], 6))
+ {
+ m_uart_rx_fifo[m_uart_rx_fifo_end] = data;
+ m_uart_rx_fifo_end = (m_uart_rx_fifo_end + 1) % ARRAY_LENGTH(m_uart_rx_fifo);
+ m_uart_rx_fifo_count++;
+ if (m_uart_rx_timer->remaining() == attotime::never)
+ m_uart_rx_timer->adjust(attotime::from_ticks(BIT(m_io_regs[0x30], 5) ? 11 : 10, m_uart_baud_rate));
+ }
+}
+
+READ16_MEMBER(spg2xx_io_device::io_r)
+{
+ static const char *const gpioregs[] = { "GPIO Data Port", "GPIO Buffer Port", "GPIO Direction Port", "GPIO Attribute Port", "GPIO IRQ/Latch Port" };
+ static const char gpioports[] = { 'A', 'B', 'C' };
+
+ uint16_t val = m_io_regs[offset];
+
+ switch (offset)
+ {
+ case 0x01: case 0x06: case 0x0b: // GPIO Data Port A/B/C
+ do_gpio(offset, false);
+ LOGMASKED(LOG_GPIO, "%s: io_r: %s %c = %04x\n", machine().describe_context(), gpioregs[(offset - 1) % 5], gpioports[(offset - 1) / 5], m_io_regs[offset]);
+ val = m_io_regs[offset];
+ break;
+
+ case 0x02: case 0x03: case 0x04: case 0x05:
+ case 0x07: case 0x08: case 0x09: case 0x0a:
+ case 0x0c: case 0x0d: case 0x0e: case 0x0f: // Other GPIO regs
+ LOGMASKED(LOG_GPIO, "%s: io_r: %s %c = %04x\n", machine().describe_context(), gpioregs[(offset - 1) % 5], gpioports[(offset - 1) / 5], m_io_regs[offset]);
+ break;
+
+ case 0x10: // Timebase Control
+ LOGMASKED(LOG_IO_READS, "io_r: Timebase Control = %04x\n", val);
+ break;
+
+ case 0x12: // Timer A Data
+ LOGMASKED(LOG_IO_WRITES, "io_r: Timer A Data = %04x\n", val);
+ break;
+
+ case 0x1c: // Video line counter
+ val = m_screen->vpos();
+ LOGMASKED(LOG_VLINES, "io_r: Video Line = %04x\n", val);
+ break;
+
+ case 0x20: // System Control
+ LOGMASKED(LOG_IO_READS, "io_r: System Control = %04x\n", val);
+ break;
+
+ case 0x21: // IRQ Control
+ LOGMASKED(LOG_IRQS, "%s: io_r: I/O IRQ Control = %04x\n", machine().describe_context(), val);
+ break;
+
+ case 0x22: // IRQ Status
+ LOGMASKED(LOG_IRQS, "%s: io_r: I/O IRQ Status = %04x\n", machine().describe_context(), val);
+ break;
+
+ case 0x23: // External Memory Control
+ LOGMASKED(LOG_IO_READS, "%s: io_r: Ext. Memory Control = %04x\n", machine().describe_context(), val);
+ break;
+
+ case 0x25: // ADC Control
+ LOGMASKED(LOG_IO_READS, "io_r: ADC Control = %04x\n", val);
+ break;
+
+ case 0x27: // ADC Data
+ {
+ m_io_regs[0x27] = 0;
+ const uint16_t old = IO_IRQ_STATUS;
+ IO_IRQ_STATUS &= ~0x2000;
+ const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
+ if (changed)
+ check_irqs(changed);
+ LOGMASKED(LOG_IO_READS, "%s: io_r: ADC Data = %04x\n", machine().describe_context(), val);
+ break;
+ }
+
+ case 0x29: // Wakeup Source
+ LOGMASKED(LOG_IO_READS, "io_r: Wakeup Source = %04x\n", val);
+ break;
+
+ case 0x2b:
+ {
+ uint16_t pal = m_pal_read_cb();
+ LOGMASKED(LOG_IO_READS, "io_r: NTSC/PAL = %04x\n", pal);
+ return pal;
+ }
+
+ case 0x2c: // PRNG 0
+ {
+ const uint16_t value = m_io_regs[0x2c];
+ m_io_regs[0x2c] = ((value << 1) | (BIT(value, 14) ^ BIT(value, 13))) & 0x7fff;
+ return value;
+ }
+
+ case 0x2d: // PRNG 1
+ {
+ const uint16_t value = m_io_regs[0x2d];
+ m_io_regs[0x2d] = ((value << 1) | (BIT(value, 14) ^ BIT(value, 13))) & 0x7fff;
+ return value;
+ }
+
+ case 0x2e: // FIQ Source Select
+ LOGMASKED(LOG_FIQ, "io_r: FIQ Source Select = %04x\n", val);
+ break;
+
+ case 0x2f: // Data Segment
+ val = m_cpu->get_ds();
+ LOGMASKED(LOG_SEGMENT, "io_r: Data Segment = %04x\n", val);
+ break;
+
+ default:
+ LOGMASKED(LOG_UNKNOWN_IO, "io_r: Unknown register %04x\n", 0x3d00 + offset);
+ break;
+ }
+
+ return val;
+}
+
+READ16_MEMBER(spg2xx_io_device::io_extended_r)
+{
+ // this set of registers might only be on the 24x not the 11x
+
+ offset += 0x30;
+
+ uint16_t val = m_io_regs[offset];
+
+ switch (offset)
+ {
+ case 0x30: // UART Control
+ LOGMASKED(LOG_UART, "%s: io_r: UART Control = %04x\n", machine().describe_context(), val);
+ break;
+
+ case 0x31: // UART Status
+ //LOGMASKED(LOG_UART, "%s: io_r: UART Status = %04x\n", machine().describe_context(), val);
+ break;
+
+ case 0x36: // UART RX Data
+ if (m_uart_rx_available)
+ {
+ m_io_regs[0x31] &= ~0x0081;
+ LOGMASKED(LOG_UART, "UART Rx data is available, clearing bits\n");
+ if (m_uart_rx_fifo_count)
+ {
+ LOGMASKED(LOG_UART, "Remaining count %d, value %02x\n", m_uart_rx_fifo_count, m_uart_rx_fifo[m_uart_rx_fifo_start]);
+ m_io_regs[0x36] = m_uart_rx_fifo[m_uart_rx_fifo_start];
+ val = m_io_regs[0x36];
+ m_uart_rx_fifo_start = (m_uart_rx_fifo_start + 1) % ARRAY_LENGTH(m_uart_rx_fifo);
+ m_uart_rx_fifo_count--;
+
+ if (m_uart_rx_fifo_count == 0)
+ {
+ m_uart_rx_available = false;
+ }
+ else
+ {
+ LOGMASKED(LOG_UART, "Remaining count %d, setting up timer\n", m_uart_rx_fifo_count);
+ //uart_receive_tick();
+ if (m_uart_rx_timer->remaining() == attotime::never)
+ m_uart_rx_timer->adjust(attotime::from_ticks(BIT(m_io_regs[0x30], 5) ? 11 : 10, m_uart_baud_rate));
+ }
+ }
+ else
+ {
+ m_uart_rx_available = false;
+ }
+ }
+ else
+ {
+ m_io_regs[0x37] |= 0x2000;
+ }
+ LOGMASKED(LOG_UART, "%s: io_r: UART Rx Data = %04x\n", machine().describe_context(), val);
+ break;
+
+ case 0x37: // UART Rx FIFO Control
+ val &= ~0x0070;
+ val |= (m_uart_rx_available ? 7 : 0) << 4;
+ LOGMASKED(LOG_UART, "io_r: UART Rx FIFO Control = %04x\n", machine().describe_context(), val);
+ break;
+
+ case 0x51: // unknown, polled by ClickStart cartridges ( clikstrt )
+ return 0x8000;
+
+ case 0x59: // I2C Status
+ LOGMASKED(LOG_I2C, "io_r: I2C Status = %04x\n", val);
+ break;
+
+ case 0x5e: // I2C Data In
+ LOGMASKED(LOG_I2C, "io_r: I2C Data In = %04x\n", val);
+ break;
+
+ default:
+ LOGMASKED(LOG_UNKNOWN_IO, "io_r: Unknown register %04x\n", 0x3d00 + offset);
+ break;
+ }
+
+ return val;
+}
+
+void spg2xx_io_device::update_porta_special_modes()
+{
+ static const char* const s_pa_special[4][16] =
+ {
+ // Input, Special 0
+ // Input, Special 1
+ // Output, Special 0
+ // Output, Special 1
+
+ { "LP", "ExtClk2", "ExtClk1", "-", "SDA", "SlvRDY", "-", "-", "SPICLK", "-", "RxD", "SPISSB", "-", "-", "-", "-" },
+ { "-", "-", "-", "SCK", "-", "SWS", "-", "-", "-", "-", "-", "-", "IRQ2B", "-", "-", "IRQ1B" },
+ { "-", "-", "-", "SCK", "SDA", "SWS", "-", "-", "SPICLK", "TxD", "-", "SPISSB", "TAPWM", "TM1", "TBPWM", "TM2" },
+ { "CSB3", "CSB2", "CSB1", "SCK", "SDA", "VSYNC", "HSYNC", "SYSCLK3", "SPICLK", "TxD", "SWS", "SPISSB", "-", "VSYNC", "HSYNC", "CSYNC" },
+ };
+ for (int bit = 15; bit >= 0; bit--)
+ {
+ if (!BIT(m_io_regs[0x05], bit))
+ continue;
+ uint8_t type = (BIT(m_io_regs[0x03], bit) << 1) | BIT(m_io_regs[0x00], 0);
+ LOGMASKED(LOG_GPIO, " Bit %2d: %s\n", bit, s_pa_special[type][bit]);
+ }
+}
+
+void spg2xx_io_device::update_portb_special_modes()
+{
+ static const char* const s_pb_special[4][8] =
+ {
+ // Input, Special 0
+ // Input, Special 1
+ // Output, Special 0
+ // Output, Special 1
+
+ { "-", "-", "-", "-", "-", "-", "SDA", "SlvRDY" },
+ { "-", "-", "-", "-", "-", "-", "SDA", "SlvRDY" },
+ { "VSYNC", "HSYNC", "CSYNC", "-", "-", "SCK", "SDA", "SWS" },
+ { "CSB3", "CSB2", "CSB1", "TBPWM", "TM2", "-", "-", "SYSCLK2" },
+ };
+ for (int bit = 7; bit >= 0; bit--)
+ {
+ if (!BIT(m_io_regs[0x0a], bit))
+ continue;
+ uint8_t type = (BIT(m_io_regs[0x08], bit) << 1) | BIT(m_io_regs[0x00], 1);
+ LOGMASKED(LOG_GPIO, " Bit %2d: %s\n", bit, s_pb_special[type][bit]);
+ }
+}
+
+void spg2xx_io_device::update_timer_b_rate()
+{
+ switch (m_io_regs[0x17] & 7)
+ {
+ case 0:
+ case 1:
+ case 5:
+ case 6:
+ case 7:
+ m_timer_src_c->adjust(attotime::never);
+ break;
+ case 2:
+ m_timer_src_c->adjust(attotime::from_hz(32768), 0, attotime::from_hz(32768));
+ break;
+ case 3:
+ m_timer_src_c->adjust(attotime::from_hz(8192), 0, attotime::from_hz(8192));
+ break;
+ case 4:
+ m_timer_src_c->adjust(attotime::from_hz(4096), 0, attotime::from_hz(4096));
+ break;
+ }
+}
+
+void spg2xx_io_device::update_timer_ab_src()
+{
+ if (m_timer_b_tick_rate == 0)
+ return;
+
+ m_timer_b_divisor++;
+ if (m_timer_b_divisor >= m_timer_b_tick_rate)
+ {
+ m_timer_b_divisor = 0;
+ increment_timer_a();
+ }
+}
+
+void spg2xx_io_device::increment_timer_a()
+{
+ m_io_regs[0x12]++;
+ if (m_io_regs[0x12] == 0)
+ {
+ m_io_regs[0x12] = m_timer_a_preload;
+ const uint16_t old = IO_IRQ_STATUS;
+ IO_IRQ_STATUS |= 0x0800;
+ const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
+ if (changed)
+ {
+ //printf("Timer A overflow\n");
+ check_irqs(0x0800);
+ }
+ }
+}
+
+void spg2xx_io_device::update_timer_c_src()
+{
+ m_io_regs[0x16]++;
+ if (m_io_regs[0x16] == 0)
+ {
+ m_io_regs[0x16] = m_timer_b_preload;
+ const uint16_t old = IO_IRQ_STATUS;
+ IO_IRQ_STATUS |= 0x0400;
+ const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
+ if (changed)
+ {
+ printf("Timer B overflow\n");
+ check_irqs(0x0400);
+ }
+ }
+}
+
+
+WRITE16_MEMBER(spg28x_io_device::io_extended_w)
+{
+ offset += 0x30;
+
+ if (offset == 0x33)
+ {
+ m_io_regs[offset] = data;
+ m_uart_baud_rate = 27000000 / (0x10000 - m_io_regs[0x33]);
+ LOGMASKED(LOG_UART, "%s: io_w: UART Baud Rate scaler = %04x (%d baud)\n", machine().describe_context(), data, m_uart_baud_rate);
+ }
+ else
+ {
+ spg2xx_io_device::io_extended_w(space, offset-0x30, data, mem_mask);
+ }
+}
+
+WRITE16_MEMBER(spg2xx_io_device::io_w)
+{
+ static const char *const gpioregs[] = { "GPIO Data Port", "GPIO Buffer Port", "GPIO Direction Port", "GPIO Attribute Port", "GPIO IRQ/Latch Port" };
+ static const char gpioports[3] = { 'A', 'B', 'C' };
+
+ switch (offset)
+ {
+ case 0x00: // GPIO special function select
+ {
+ LOGMASKED(LOG_GPIO, "%s: io_w: GPIO Configuration = %04x (IOBWake:%d, IOAWake:%d, IOBSpecSel:%d, IOASpecSel:%d)\n", machine().describe_context(), data
+ , BIT(data, 4), BIT(data, 3), BIT(data, 1), BIT(data, 0));
+ const uint16_t old = m_io_regs[offset];
+ m_io_regs[offset] = data;
+ const uint16_t changed = old ^ data;
+ if (BIT(changed, 0))
+ update_porta_special_modes();
+ if (BIT(changed, 1))
+ update_portb_special_modes();
+ break;
+ }
+
+ case 0x01: case 0x06: case 0x0b: // GPIO data, port A/B/C
+ offset++;
+ // Intentional fallthrough - we redirect data register writes to the buffer register.
+
+ case 0x02: case 0x04: // Port A
+ case 0x07: case 0x09: // Port B
+ case 0x0c: case 0x0d: case 0x0e: case 0x0f: // Port C
+ LOGMASKED(LOG_GPIO, "%s: io_w: %s %c = %04x\n", machine().describe_context(), gpioregs[(offset - 1) % 5], gpioports[(offset - 1) / 5], data);
+ m_io_regs[offset] = data;
+ do_gpio(offset, true);
+ break;
+
+ case 0x03: // Port A Direction
+ LOGMASKED(LOG_GPIO, "%s: io_w: GPIO Direction Port A = %04x\n", machine().describe_context(), data);
+ m_io_regs[offset] = data;
+ update_porta_special_modes();
+ do_gpio(offset, true);
+ break;
+
+ case 0x08: // Port B Direction
+ LOGMASKED(LOG_GPIO, "%s: io_w: GPIO Direction Port B = %04x\n", machine().describe_context(), data);
+ m_io_regs[offset] = data;
+ update_portb_special_modes();
+ do_gpio(offset, true);
+ break;
+
+ case 0x05: // Port A Special
+ LOGMASKED(LOG_GPIO, "%s: io_w: Port A Special Function Select: %04x\n", machine().describe_context(), data);
+ m_io_regs[offset] = data;
+ update_porta_special_modes();
+ break;
+
+ case 0x0a: // Port B Special
+ LOGMASKED(LOG_GPIO, "%s: io_w: Port B Special Function Select: %04x\n", machine().describe_context(), data);
+ m_io_regs[offset] = data;
+ update_portb_special_modes();
+ break;
+
+ case 0x10: // Timebase Control
+ {
+ static const char* const s_tmb1_sel[2][4] =
+ {
+ { "8Hz", "16Hz", "32Hz", "64Hz" },
+ { "12kHz", "24kHz", "40kHz", "40kHz" }
+ };
+ static const char* const s_tmb2_sel[2][4] =
+ {
+ { "128Hz", "256Hz", "512Hz", "1024Hz" },
+ { "105kHz", "210kHz", "420kHz", "840kHz" }
+ };
+ static const uint32_t s_tmb1_freq[2][4] =
+ {
+ { 8, 16, 32, 64 },
+ { 12000, 24000, 40000, 40000 }
+ };
+ static const uint32_t s_tmb2_freq[2][4] =
+ {
+ { 128, 256, 512, 1024 },
+ { 105000, 210000, 420000, 840000 }
+ };
+ LOGMASKED(LOG_TIMERS, "io_w: Timebase Control = %04x (Source:%s, TMB2:%s, TMB1:%s)\n", data,
+ BIT(data, 4) ? "27MHz" : "32768Hz", s_tmb2_sel[BIT(data, 4)][(data >> 2) & 3], s_tmb1_sel[BIT(data, 4)][data & 3]);
+ m_io_regs[offset] = data;
+ const uint8_t hifreq = BIT(data, 4);
+ const uint32_t tmb1freq = s_tmb1_freq[hifreq][data & 3];
+ m_tmb1->adjust(attotime::from_hz(tmb1freq), 0, attotime::from_hz(tmb1freq));
+ const uint32_t tmb2freq = s_tmb2_freq[hifreq][(data >> 2) & 3];
+ m_tmb2->adjust(attotime::from_hz(tmb2freq), 0, attotime::from_hz(tmb2freq));
+ break;
+ }
+
+ case 0x11: // Timebase Clear
+ LOGMASKED(LOG_TIMERS, "io_w: Timebase Clear = %04x\n", data);
+ break;
+
+ case 0x12: // Timer A Data
+ LOGMASKED(LOG_TIMERS, "io_w: Timer A Data = %04x\n", data);
+ m_io_regs[offset] = data;
+ m_timer_a_preload = data;
+ break;
+
+ case 0x13: // Timer A Control
+ {
+ static const char* const s_source_a[8] = { "0", "0", "32768Hz", "8192Hz", "4096Hz", "1", "0", "ExtClk1" };
+ static const char* const s_source_b[8] = { "2048Hz", "1024Hz", "256Hz", "TMB1", "4Hz", "2Hz", "1", "ExtClk2" };
+ LOGMASKED(LOG_TIMERS, "io_w: Timer A Control = %04x (Source A:%s, Source B:%s)\n", data,
+ s_source_a[data & 7], s_source_b[(data >> 3) & 7]);
+ m_io_regs[offset] = data;
+ int timer_a_rate = 0;
+ switch (data & 7)
+ {
+ case 0:
+ case 1:
+ case 5:
+ case 6:
+ case 7:
+ m_timer_src_ab->adjust(attotime::never);
+ break;
+ case 2:
+ m_timer_src_ab->adjust(attotime::from_hz(32768), 0, attotime::from_hz(32768));
+ timer_a_rate = 32768;
+ break;
+ case 3:
+ m_timer_src_ab->adjust(attotime::from_hz(8192), 0, attotime::from_hz(8192));
+ timer_a_rate = 8192;
+ break;
+ case 4:
+ m_timer_src_ab->adjust(attotime::from_hz(4096), 0, attotime::from_hz(4096));
+ timer_a_rate = 4096;
+ break;
+ }
+ switch ((data >> 3) & 7)
+ {
+ case 0:
+ m_timer_b_tick_rate = timer_a_rate / 2048;
+ break;
+ case 1:
+ m_timer_b_tick_rate = timer_a_rate / 1024;
+ break;
+ case 2:
+ m_timer_b_tick_rate = timer_a_rate / 256;
+ break;
+ case 3:
+ m_timer_b_tick_rate = 0;
+ break;
+ case 4:
+ m_timer_b_tick_rate = timer_a_rate / 4;
+ break;
+ case 5:
+ m_timer_b_tick_rate = timer_a_rate / 2;
+ break;
+ case 6:
+ m_timer_b_tick_rate = 1;
+ break;
+ case 7:
+ m_timer_b_tick_rate = 0;
+ break;
+ }
+ break;
+ }
+
+ case 0x15: // Timer A IRQ Clear
+ {
+ LOGMASKED(LOG_TIMERS, "io_w: Timer A IRQ Clear\n");
+ const uint16_t old = IO_IRQ_STATUS;
+ IO_IRQ_STATUS &= ~0x0800;
+ const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
+ if (changed)
+ check_irqs(0x0800);
+ break;
+ }
+
+ case 0x16: // Timer B Data
+ LOGMASKED(LOG_TIMERS, "io_w: Timer B Data = %04x\n", data);
+ m_io_regs[offset] = data;
+ m_timer_b_preload = data;
+ break;
+
+ case 0x17: // Timer B Control
+ {
+ static const char* const s_source_c[8] = { "0", "0", "32768Hz", "8192Hz", "4096Hz", "1", "0", "ExtClk1" };
+ LOGMASKED(LOG_TIMERS, "io_w: Timer B Control = %04x (Source C:%s)\n", data, s_source_c[data & 7]);
+ m_io_regs[offset] = data;
+ if (m_io_regs[0x18] == 1)
+ {
+ update_timer_b_rate();
+ }
+ break;
+ }
+
+ case 0x18: // Timer B Enable
+ {
+ LOGMASKED(LOG_TIMERS, "io_w: Timer B Enable = %04x\n", data);
+ m_io_regs[offset] = data & 1;
+ if (data & 1)
+ {
+ update_timer_b_rate();
+ }
+ else
+ {
+ m_timer_src_c->adjust(attotime::never);
+ }
+ break;
+ }
+
+ case 0x19: // Timer B IRQ Clear
+ {
+ LOGMASKED(LOG_TIMERS, "io_w: Timer B IRQ Clear\n");
+ const uint16_t old = IO_IRQ_STATUS;
+ IO_IRQ_STATUS &= ~0x0400;
+ const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
+ if (changed)
+ check_irqs(0x0400);
+ break;
+ }
+
+ case 0x20: // System Control
+ {
+ static const char* const s_sysclk[4] = { "13.5MHz", "27MHz", "27MHz NoICE", "54MHz" };
+ static const char* const s_lvd_voltage[4] = { "2.7V", "2.9V", "3.1V", "3.3V" };
+ static const char* const s_weak_strong[2] = { "Weak", "Strong" };
+ LOGMASKED(LOG_IO_WRITES, "io_w: System Control = %04x (Watchdog:%d, Sleep:%d, SysClk:%s, SysClkInv:%d, LVROutEn:%d, LVREn:%d\n"
+ , data, BIT(data, 15), BIT(data, 14), s_sysclk[(data >> 12) & 3], BIT(data, 11), BIT(data, 9), BIT(data, 8));
+ LOGMASKED(LOG_IO_WRITES, " LVDEn:%d, LVDVoltSel:%s, 32kHzDisable:%d, StrWkMode:%s, VDACDisable:%d, ADACDisable:%d, ADACOutDisable:%d)\n"
+ , BIT(data, 7), s_lvd_voltage[(data >> 5) & 3], BIT(data, 4), s_weak_strong[BIT(data, 3)], BIT(data, 2), BIT(data, 1), BIT(data, 0));
+ m_io_regs[offset] = data;
+ break;
+ }
+
+ case 0x21: // IRQ Enable
+ {
+ LOGMASKED(LOG_IRQS, "io_w: IRQ Enable = %04x\n", data);
+ const uint16_t old = IO_IRQ_ENABLE;
+ m_io_regs[offset] = data;
+ const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
+ if (changed)
+ check_irqs(changed);
+ break;
+ }
+
+ case 0x22: // IRQ Acknowledge
+ {
+ LOGMASKED(LOG_IRQS, "io_w: IRQ Acknowledge = %04x\n", data);
+ const uint16_t old = IO_IRQ_STATUS;
+ IO_IRQ_STATUS &= ~data;
+ const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
+ if (m_uart_rx_irq || m_uart_tx_irq)
+ {
+ LOGMASKED(LOG_IRQS | LOG_UART, "Re-setting UART IRQ due to still-unacknowledged Rx or Tx.\n");
+ IO_IRQ_STATUS |= 0x0100;
+ }
+ if (changed)
+ check_irqs(changed);
+ break;
+ }
+
+ case 0x23: // External Memory Control
+ {
+ static const char* const s_bus_arb[8] =
+ {
+ "Forbidden", "Forbidden", "Forbidden", "Forbidden", "Forbidden", "1:SPU/2:PPU/3:CPU", "Forbidden", "1:PPU/2:SPU/3:CPU"
+ };
+ static const char* const s_addr_decode[4] =
+ {
+ "ROMCSB: 4000-3fffff, CSB1: ---, CSB2: ---, CSB3: ---",
+ "ROMCSB: 4000-1fffff, CSB1: 200000-3fffff, CSB2: ---, CSB3: ---",
+ "ROMCSB: 4000-0fffff, CSB1: 100000-1fffff, CSB2: 200000-2fffff, CSB3: 300000-3fffff",
+ "ROMCSB: 4000-0fffff, CSB1: 100000-1fffff, CSB2: 200000-2fffff, CSB3: 300000-3fffff"
+ };
+ static const char* const s_ram_decode[16] =
+ {
+ "None", "None", "None", "None", "None", "None", "None", "None",
+ "4KW, 3ff000-3fffff\n",
+ "8KW, 3fe000-3fffff\n",
+ "16KW, 3fc000-3fffff\n",
+ "32KW, 3f8000-3fffff\n",
+ "64KW, 3f0000-3fffff\n",
+ "128KW, 3e0000-3fffff\n",
+ "256KW, 3c0000-3fffff\n",
+ "512KW, 380000-3fffff\n"
+ };
+ LOGMASKED(LOG_EXT_MEM, "io_w: Ext. Memory Control (not yet implemented) = %04x:\n", data);
+ LOGMASKED(LOG_EXT_MEM, " WaitStates:%d, BusArbPrio:%s\n", (data >> 1) & 3, s_bus_arb[(data >> 3) & 7]);
+ LOGMASKED(LOG_EXT_MEM, " ROMAddrDecode:%s\n", s_addr_decode[(data >> 6) & 3]);
+ LOGMASKED(LOG_EXT_MEM, " RAMAddrDecode:%s\n", s_ram_decode[(data >> 8) & 15]);
+ m_chip_sel((data >> 6) & 3);
+ m_io_regs[offset] = data;
+ break;
+ }
+
+ case 0x24: // Watchdog
+ LOGMASKED(LOG_WATCHDOG, "io_w: Watchdog Pet = %04x\n", data);
+ break;
+
+ case 0x25: // ADC Control
+ {
+ LOGMASKED(LOG_IO_WRITES, "%s: io_w: ADC Control = %04x\n", machine().describe_context(), data);
+ m_io_regs[offset] = data & ~0x1000;
+ if (BIT(data, 0))
+ {
+ m_io_regs[0x27] = 0x8000 | (m_adc_in[BIT(data, 5)]() & 0x7fff);
+ m_io_regs[0x25] |= 0x2000;
+ }
+ if (BIT(data, 12) && !BIT(m_io_regs[offset], 1))
+ {
+ const uint16_t old = IO_IRQ_STATUS;
+ IO_IRQ_STATUS |= 0x2000;
+ const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
+ if (changed)
+ {
+ check_irqs(changed);
+ }
+ }
+ break;
+ }
+
+ case 0x28: // Sleep Mode
+ LOGMASKED(LOG_IO_WRITES, "io_w: Sleep Mode (%s enter value) = %04x\n", data == 0xaa55 ? "valid" : "invalid", data);
+ m_io_regs[offset] = data;
+ break;
+
+ case 0x29: // Wakeup Source
+ {
+ m_io_regs[offset] = data;
+ static const char* const s_sources[8] =
+ {
+ "TMB1", "TMB2", "2Hz", "4Hz", "1024Hz", "2048Hz", "4096Hz", "Key"
+ };
+
+ LOGMASKED(LOG_IO_WRITES, "io_w: Wakeup Source = %04x:\n", data);
+ bool comma = false;
+ char buf[1024];
+ int char_idx = 0;
+ for (int i = 7; i >= 0; i--)
+ {
+ if (BIT(data, i))
+ {
+ char_idx += sprintf(&buf[char_idx], "%s%s", comma ? ", " : "", s_sources[i]);
+ comma = true;
+ }
+ }
+ buf[char_idx] = 0;
+ LOGMASKED(LOG_IO_WRITES, " %s\n", buf);
+ break;
+ }
+
+ case 0x2c: // PRNG 0 seed
+ LOGMASKED(LOG_IO_WRITES, "io_w: PRNG 0 seed = %04x\n", data & 0x7fff);
+ m_io_regs[offset] = data & 0x7fff;
+ break;
+
+ case 0x2d: // PRNG 1 seed
+ LOGMASKED(LOG_IO_WRITES, "io_w: PRNG 1 seed = %04x\n", data & 0x7fff);
+ m_io_regs[offset] = data & 0x7fff;
+ break;
+
+ case 0x2e: // FIQ Source Select
+ {
+ static const char* const s_fiq_select[8] =
+ {
+ "PPU", "SPU Channel", "Timer A", "Timer B", "UART/SPI", "External", "Reserved", "None"
+ };
+ LOGMASKED(LOG_FIQ, "io_w: FIQ Source Select (not yet implemented) = %04x, %s\n", data, s_fiq_select[data & 7]);
+ m_io_regs[offset] = data;
+ break;
+ }
+
+ case 0x2f: // Data Segment
+ m_cpu->set_ds(data & 0x3f);
+ LOGMASKED(LOG_SEGMENT, "io_w: Data Segment = %04x\n", data);
+ break;
+
+ default:
+ LOGMASKED(LOG_UNKNOWN_IO, "io_w: Unknown register %04x = %04x\n", 0x3d00 + offset, data);
+ m_io_regs[offset] = data;
+ break;
+ }
+}
+
+
+
+
+WRITE16_MEMBER(spg2xx_io_device::io_extended_w)
+{
+ // this set of registers might only be on the 24x not the 11x
+
+ offset += 0x30;
+
+ switch (offset)
+ {
+
+ case 0x30: // UART Control
+ {
+ static const char* const s_9th_bit[4] = { "0", "1", "Odd", "Even" };
+ LOGMASKED(LOG_UART, "%s: io_w: UART Control = %04x (TxEn:%d, RxEn:%d, Bits:%d, MultiProc:%d, 9thBit:%s, TxIntEn:%d, RxIntEn:%d\n",
+ machine().describe_context(), data, BIT(data, 7), BIT(data, 6), BIT(data, 5) ? 9 : 8, BIT(data, 4), s_9th_bit[(data >> 2) & 3],
+ BIT(data, 1), BIT(data, 0));
+ const uint16_t changed = m_io_regs[offset] ^ data;
+ m_io_regs[offset] = data;
+ if (!BIT(data, 6))
+ {
+ m_uart_rx_available = false;
+ m_io_regs[0x36] = 0;
+ }
+ if (BIT(changed, 7))
+ {
+ if (BIT(data, 7))
+ {
+ m_io_regs[0x31] |= 0x0002;
+ }
+ else
+ {
+ m_io_regs[0x31] &= ~0x0042;
+ m_uart_tx_timer->adjust(attotime::never);
+ }
+ }
+ break;
+ }
+
+ case 0x31: // UART Status
+ LOGMASKED(LOG_UART, "%s: io_w: UART Status = %04x\n", machine().describe_context(), data);
+ if (BIT(data, 0))
+ {
+ m_io_regs[0x31] &= ~1;
+ m_uart_rx_irq = false;
+ }
+ if (BIT(data, 1))
+ {
+ m_io_regs[0x31] &= ~2;
+ m_uart_tx_irq = false;
+ }
+ if (!m_uart_rx_irq && !m_uart_tx_irq)
+ {
+ const uint16_t old = IO_IRQ_STATUS;
+ IO_IRQ_STATUS &= ~0x0100;
+ const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
+ if (changed)
+ check_irqs(0x0100);
+ }
+ break;
+
+ case 0x33: // UART Baud Rate (low byte)
+ case 0x34: // UART Baud Rate (high byte)
+ {
+ m_io_regs[offset] = data;
+ const uint32_t divisor = 16 * (0x10000 - ((m_io_regs[0x34] << 8) | m_io_regs[0x33]));
+ LOGMASKED(LOG_UART, "%s: io_w: UART Baud Rate (%s byte): Baud rate = %d\n", offset == 0x33 ? "low" : "high", machine().describe_context(), 27000000 / divisor);
+ m_uart_baud_rate = 27000000 / divisor;
+ break;
+ }
+
+ case 0x35: // UART TX Data
+ LOGMASKED(LOG_UART, "%s: io_w: UART Tx Data = %02x\n", machine().describe_context(), data & 0x00ff);
+ m_io_regs[offset] = data;
+ if (BIT(m_io_regs[0x30], 7))
+ {
+ LOGMASKED(LOG_UART, "io_w: UART Tx: Clearing ready bit, setting busy bit, setting up timer\n");
+ m_uart_tx_timer->adjust(attotime::from_ticks(BIT(m_io_regs[0x30], 5) ? 11 : 10, m_uart_baud_rate));
+ m_io_regs[0x31] &= ~0x0002;
+ m_io_regs[0x31] |= 0x0040;
+ }
+ break;
+
+ case 0x36: // UART RX Data
+ LOGMASKED(LOG_UART, "%s: io_w: UART Rx Data (read-only) = %04x\n", machine().describe_context(), data);
+ break;
+
+ case 0x37: // UART Rx FIFO Control
+ LOGMASKED(LOG_UART, "%s: io_w: UART Rx FIFO Control = %04x (Reset:%d, Overrun:%d, Underrun:%d, Count:%d, Threshold:%d)\n",
+ machine().describe_context(), data, BIT(data, 15), BIT(data, 14), BIT(data, 13), (data >> 4) & 7, data & 7);
+ if (data & 0x8000)
+ {
+ m_uart_rx_available = false;
+ m_io_regs[0x36] = 0;
+ }
+ m_io_regs[offset] &= ~data & 0x6000;
+ m_io_regs[offset] &= ~0x0007;
+ m_io_regs[offset] |= data & 0x0007;
+ break;
+
+ case 0x50: // SIO Setup
+ {
+ static const char* const s_addr_mode[4] = { "16-bit", "None", "8-bit", "24-bit" };
+ static const char* const s_baud_rate[4] = { "/16", "/4", "/8", "/32" };
+ LOGMASKED(LOG_SIO, "io_w: SIO Setup (not implemented) = %04x (DS301Ready:%d, Start:%d, Auto:%d, IRQEn:%d, Width:%d, Related:%d\n", data
+ , BIT(data, 11), BIT(data, 10), BIT(data, 9), BIT(data, 8), BIT(data, 7) ? 16 : 8, BIT(data, 6));
+ LOGMASKED(LOG_SIO, " (Mode:%s, RWProtocol:%d, Rate:sysclk%s, AddrMode:%s)\n"
+ , BIT(data, 5), BIT(data, 4), s_baud_rate[(data >> 2) & 3], s_addr_mode[data & 3]);
+ break;
+ }
+
+ case 0x52: // SIO Start Address (low)
+ LOGMASKED(LOG_SIO, "io_w: SIO Stat Address (low) (not implemented) = %04x\n", data);
+ break;
+
+ case 0x53: // SIO Start Address (hi)
+ LOGMASKED(LOG_SIO, "io_w: SIO Stat Address (hi) (not implemented) = %04x\n", data);
+ break;
+
+ case 0x54: // SIO Data
+ LOGMASKED(LOG_SIO, "io_w: SIO Data (not implemented) = %04x\n", data);
+ break;
+
+ case 0x55: // SIO Automatic Transmit Count
+ LOGMASKED(LOG_SIO, "io_w: SIO Auto Transmit Count (not implemented) = %04x\n", data);
+ break;
+
+ case 0x58: // I2C Command
+ LOGMASKED(LOG_I2C, "io_w: I2C Command = %04x\n", data);
+ m_io_regs[offset] = data;
+ do_i2c();
+ break;
+
+ case 0x59: // I2C Status / Acknowledge
+ LOGMASKED(LOG_I2C, "io_w: I2C Acknowledge = %04x\n", data);
+ m_io_regs[offset] &= ~data;
+ break;
+
+ case 0x5a: // I2C Access Mode
+ LOGMASKED(LOG_I2C, "io_w: I2C Access Mode = %04x\n", data);
+ m_io_regs[offset] = data;
+ break;
+
+ case 0x5b: // I2C Device Address
+ LOGMASKED(LOG_I2C, "io_w: I2C Device Address = %04x\n", data);
+ m_io_regs[offset] = data;
+ break;
+
+ case 0x5c: // I2C Sub-Address
+ LOGMASKED(LOG_I2C, "io_w: I2C Sub-Address = %04x\n", data);
+ m_io_regs[offset] = data;
+ break;
+
+ case 0x5d: // I2C Data Out
+ LOGMASKED(LOG_I2C, "io_w: I2C Data Out = %04x\n", data);
+ m_io_regs[offset] = data;
+ break;
+
+ case 0x5e: // I2C Data In
+ LOGMASKED(LOG_I2C, "io_w: I2C Data In = %04x\n", data);
+ m_io_regs[offset] = data;
+ break;
+
+ case 0x5f: // I2C Controller Mode
+ LOGMASKED(LOG_I2C, "io_w: I2C Controller Mode = %04x\n", data);
+ m_io_regs[offset] = data;
+ break;
+
+ default:
+ LOGMASKED(LOG_UNKNOWN_IO, "io_w: Unknown register %04x = %04x\n", 0x3d00 + offset, data);
+ m_io_regs[offset] = data;
+ break;
+ }
+}
+
+void spg2xx_io_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+{
+ switch (id)
+ {
+ case TIMER_TMB1:
+ {
+ LOGMASKED(LOG_TIMERS, "TMB1 elapsed, setting IRQ Status bit 0 (old:%04x, new:%04x, enable:%04x)\n", IO_IRQ_STATUS, IO_IRQ_STATUS | 1, IO_IRQ_ENABLE);
+ const uint16_t old = IO_IRQ_STATUS;
+ IO_IRQ_STATUS |= 1;
+ const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
+ if (changed)
+ check_irqs(0x0001);
+ break;
+ }
+
+ case TIMER_TMB2:
+ {
+ LOGMASKED(LOG_TIMERS, "TMB2 elapsed, setting IRQ Status bit 1 (old:%04x, new:%04x, enable:%04x)\n", IO_IRQ_STATUS, IO_IRQ_STATUS | 2, IO_IRQ_ENABLE);
+ const uint16_t old = IO_IRQ_STATUS;
+ IO_IRQ_STATUS |= 2;
+ const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
+ if (changed)
+ check_irqs(0x0002);
+ break;
+ }
+
+ case TIMER_UART_TX:
+ uart_transmit_tick();
+ break;
+
+ case TIMER_UART_RX:
+ uart_receive_tick();
+ break;
+
+ case TIMER_4KHZ:
+ system_timer_tick();
+ break;
+
+ case TIMER_SRC_AB:
+ update_timer_ab_src();
+ break;
+
+ case TIMER_SRC_C:
+ update_timer_c_src();
+ break;
+ }
+}
+
+void spg2xx_io_device::system_timer_tick()
+{
+ const uint16_t old = IO_IRQ_STATUS;
+ uint16_t check_mask = 0x0040;
+ IO_IRQ_STATUS |= 0x0040;
+
+ m_2khz_divider++;
+ if (m_2khz_divider == 2)
+ {
+ m_2khz_divider = 0;
+ IO_IRQ_STATUS |= 0x0020;
+ check_mask |= 0x0020;
+
+ m_1khz_divider++;
+ if (m_1khz_divider == 2)
+ {
+ m_1khz_divider = 0;
+ IO_IRQ_STATUS |= 0x0010;
+ check_mask |= 0x0010;
+
+ m_4hz_divider++;
+ if (m_4hz_divider == 256)
+ {
+ m_4hz_divider = 0;
+ IO_IRQ_STATUS |= 0x0008;
+ check_mask |= 0x0008;
+ }
+ }
+ }
+
+ const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
+ if (changed)
+ check_irqs(check_mask);
+}
+
+void spg2xx_io_device::uart_transmit_tick()
+{
+ LOGMASKED(LOG_UART, "uart_transmit_tick: Transmitting %02x, setting TxReady, clearing TxBusy\n", (uint8_t)m_io_regs[0x35]);
+ m_uart_tx((uint8_t)m_io_regs[0x35]);
+ m_io_regs[0x31] |= 0x0002;
+ m_io_regs[0x31] &= ~0x0040;
+ if (BIT(m_io_regs[0x30], 1))
+ {
+ const uint16_t old = IO_IRQ_STATUS;
+ IO_IRQ_STATUS |= 0x0100;
+ m_uart_tx_irq = true;
+ LOGMASKED(LOG_UART, "uart_transmit_tick: Setting UART IRQ bit\n");
+ if (IO_IRQ_STATUS != old)
+ {
+ LOGMASKED(LOG_UART, "uart_transmit_tick: Bit newly set, checking IRQs\n");
+ check_irqs(0x0100);
+ }
+ }
+}
+
+void spg2xx_io_device::uart_receive_tick()
+{
+ LOGMASKED(LOG_UART, "uart_receive_tick: Setting RBF and RxRDY\n");
+ m_io_regs[0x31] |= 0x81;
+ m_uart_rx_available = true;
+ if (BIT(m_io_regs[0x30], 0))
+ {
+ LOGMASKED(LOG_UART, "uart_receive_tick: RxIntEn is set, setting rx_irq to true and setting UART IRQ\n");
+ m_uart_rx_irq = true;
+ IO_IRQ_STATUS |= 0x0100;
+ check_irqs(0x0100);
+ }
+}
+
+void spg2xx_io_device::extint_w(int channel, bool state)
+{
+ LOGMASKED(LOG_EXTINT, "Setting extint channel %d to %s\n", channel, state ? "true" : "false");
+ bool old = m_extint[channel];
+ m_extint[channel] = state;
+ if (old != state)
+ {
+ check_extint_irq(channel);
+ }
+}
+
+void spg2xx_io_device::check_extint_irq(int channel)
+{
+ LOGMASKED(LOG_EXTINT, "%sing extint %d interrupt\n", m_extint[channel] ? "rais" : "lower", channel + 1);
+ const uint16_t mask = (channel == 0) ? 0x0200 : 0x1000;
+ const uint16_t old_irq = IO_IRQ_STATUS;
+ if (m_extint[channel])
+ IO_IRQ_STATUS |= mask;
+ else
+ IO_IRQ_STATUS &= ~mask;
+
+ if (old_irq != IO_IRQ_STATUS)
+ {
+ LOGMASKED(LOG_EXTINT, "extint IRQ changed, so checking interrupts\n");
+ check_irqs(mask);
+ }
+}
+
+void spg2xx_io_device::check_irqs(const uint16_t changed)
+{
+ if (changed & 0x0c00) // Timer A, Timer B IRQ
+ {
+ LOGMASKED(LOG_TIMERS, "%ssserting IRQ2 (%04x, %04x)\n", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0c00) ? "A" : "Dea", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0c00), changed);
+ m_timer_irq_cb((IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0c00) ? ASSERT_LINE : CLEAR_LINE);
+ }
+
+ if (changed & 0x2100) // UART, ADC IRQ
+ {
+ LOGMASKED(LOG_UART, "%ssserting IRQ3 (%04x, %04x)\n", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x2100) ? "A" : "Dea", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x2100), changed);
+ m_uart_adc_irq_cb((IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x2100) ? ASSERT_LINE : CLEAR_LINE);
+ }
+
+ if (changed & 0x1200) // External IRQ
+ {
+ LOGMASKED(LOG_UART, "%ssserting IRQ5 (%04x, %04x)\n", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x1200) ? "A" : "Dea", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x1200), changed);
+ m_external_irq_cb((IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x1200) ? ASSERT_LINE : CLEAR_LINE);
+ }
+
+ if (changed & 0x0070) // 1024Hz, 2048Hz, 4096Hz IRQ
+ {
+ LOGMASKED(LOG_TIMERS, "%ssserting IRQ6 (%04x, %04x)\n", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0070) ? "A" : "Dea", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0070), changed); //m_cpu->set_state_unsynced(UNSP_IRQ6_LINE, (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0070) ? ASSERT_LINE : CLEAR_LINE);
+ m_ffreq_tmr1_irq_cb((IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0070) ? ASSERT_LINE : CLEAR_LINE);
+ }
+
+ if (changed & 0x008b) // TMB1, TMB2, 4Hz, key change IRQ
+ {
+ LOGMASKED(LOG_IRQS, "%ssserting IRQ7 (%04x, %04x)\n", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x008b) ? "A" : "Dea", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x008b), changed);
+ m_ffreq_tmr2_irq_cb((IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x008b) ? ASSERT_LINE : CLEAR_LINE);
+ }
+}
+
+uint16_t spg2xx_io_device::do_special_gpio(uint32_t index, uint16_t mask)
+{
+ uint16_t data = 0;
+ switch (index)
+ {
+ case 0: // Port A
+ if (mask & 0xe000)
+ {
+ const uint8_t csel = m_cpu->get_csb() & 0x0e;
+ data = (csel << 12) & mask;
+ }
+ break;
+ case 1: // Port B
+ // To do
+ break;
+ case 2: // Port C
+ // To do
+ break;
+ default:
+ // Can't happen
+ break;
+ }
+ return data;
+}
+
+void spg2xx_io_device::do_gpio(uint32_t offset, bool write)
+{
+ uint32_t index = (offset - 1) / 5;
+ uint16_t buffer = m_io_regs[5 * index + 2];
+ uint16_t dir = m_io_regs[5 * index + 3];
+ uint16_t attr = m_io_regs[5 * index + 4];
+ uint16_t special = m_io_regs[5 * index + 5];
+
+ uint16_t push = dir;
+ uint16_t pull = ~dir;
+ uint16_t what = (buffer & (push | pull));
+ what ^= (dir & ~attr);
+ what &= ~special;
+
+ switch (index)
+ {
+ case 0:
+ if (write)
+ m_porta_out(0, what, push &~ special);
+ what = (what & ~pull);
+ if (!write)
+ what |= m_porta_in(0, pull &~ special) & pull;
+ break;
+ case 1:
+ if (write)
+ m_portb_out(0, what, push &~ special);
+ what = (what & ~pull);
+ if (!write)
+ what |= m_portb_in(0, pull &~ special) & pull;
+ break;
+ case 2:
+ if (write)
+ m_portc_out(0, what, push &~ special);
+ what = (what & ~pull);
+ if (!write)
+ what |= m_portc_in(0, pull &~ special) & pull;
+ break;
+ }
+
+ what |= do_special_gpio(index, special);
+ m_io_regs[5 * index + 1] = what;
+}
+
+void spg2xx_io_device::do_i2c()
+{
+ const uint16_t addr = ((m_io_regs[0x5b] & 0x06) << 7) | (uint8_t)m_io_regs[0x5c];
+
+ if (m_io_regs[0x58] & 0x40) // Serial EEPROM read
+ m_io_regs[0x5e] = m_eeprom_r(addr);
+ else
+ m_eeprom_w(addr, m_io_regs[0x5d]);
+
+ m_io_regs[0x59] |= 1;
+}
diff --git a/src/devices/machine/spg2xx_io.h b/src/devices/machine/spg2xx_io.h
new file mode 100644
index 00000000000..d829915cbec
--- /dev/null
+++ b/src/devices/machine/spg2xx_io.h
@@ -0,0 +1,183 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+
+#ifndef MAME_MACHINE_SPG2XX_IO_H
+#define MAME_MACHINE_SPG2XX_IO_H
+
+#pragma once
+
+#include "cpu/unsp/unsp.h"
+#include "screen.h"
+
+class spg2xx_io_device : public device_t
+{
+public:
+ spg2xx_io_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ auto porta_out() { return m_porta_out.bind(); }
+ auto portb_out() { return m_portb_out.bind(); }
+ auto portc_out() { return m_portc_out.bind(); }
+ auto porta_in() { return m_porta_in.bind(); }
+ auto portb_in() { return m_portb_in.bind(); }
+ auto portc_in() { return m_portc_in.bind(); }
+
+ template <size_t Line> auto adc_in() { return m_adc_in[Line].bind(); }
+
+ auto eeprom_w() { return m_eeprom_w.bind(); }
+ auto eeprom_r() { return m_eeprom_r.bind(); }
+
+ auto uart_tx() { return m_uart_tx.bind(); }
+
+ auto chip_select() { return m_chip_sel.bind(); }
+
+ void uart_rx(uint8_t data);
+
+ void extint_w(int channel, bool state);
+
+ DECLARE_READ16_MEMBER(io_r);
+ DECLARE_WRITE16_MEMBER(io_w);
+
+ virtual DECLARE_READ16_MEMBER(io_extended_r);
+ virtual DECLARE_WRITE16_MEMBER(io_extended_w);
+
+
+ auto pal_read_callback() { return m_pal_read_cb.bind(); };
+
+ auto write_timer_irq_callback() { return m_timer_irq_cb.bind(); };
+ auto write_uart_adc_irq_callback() { return m_uart_adc_irq_cb.bind(); };
+ auto write_external_irq_callback() { return m_external_irq_cb.bind(); };
+ auto write_ffrq_tmr1_irq_callback() { return m_ffreq_tmr1_irq_cb.bind(); };
+ auto write_ffrq_tmr2_irq_callback() { return m_ffreq_tmr2_irq_cb.bind(); };
+
+protected:
+ spg2xx_io_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, const uint32_t sprite_limit)
+ : spg2xx_io_device(mconfig, type, tag, owner, clock)
+ {
+ }
+
+ void check_extint_irq(int channel);
+ void check_irqs(const uint16_t changed);
+
+ static const device_timer_id TIMER_TMB1 = 0;
+ static const device_timer_id TIMER_TMB2 = 1;
+
+ static const device_timer_id TIMER_UART_TX = 4;
+ static const device_timer_id TIMER_UART_RX = 5;
+ static const device_timer_id TIMER_4KHZ = 6;
+ static const device_timer_id TIMER_SRC_AB = 7;
+ static const device_timer_id TIMER_SRC_C = 8;
+
+ 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;
+
+ void update_porta_special_modes();
+ void update_portb_special_modes();
+ void do_gpio(uint32_t offset, bool write);
+ uint16_t do_special_gpio(uint32_t index, uint16_t mask);
+
+ void update_timer_b_rate();
+ void update_timer_ab_src();
+ void update_timer_c_src();
+ void increment_timer_a();
+
+ void uart_transmit_tick();
+ void uart_receive_tick();
+
+ void system_timer_tick();
+
+ void do_i2c();
+
+ uint16_t m_io_regs[0x100];
+
+ uint8_t m_uart_rx_fifo[8];
+ uint8_t m_uart_rx_fifo_start;
+ uint8_t m_uart_rx_fifo_end;
+ uint8_t m_uart_rx_fifo_count;
+ bool m_uart_rx_available;
+ bool m_uart_rx_irq;
+ bool m_uart_tx_irq;
+
+ bool m_extint[2];
+
+ devcb_write16 m_porta_out;
+ devcb_write16 m_portb_out;
+ devcb_write16 m_portc_out;
+ devcb_read16 m_porta_in;
+ devcb_read16 m_portb_in;
+ devcb_read16 m_portc_in;
+
+ devcb_read16 m_adc_in[2];
+
+ devcb_write8 m_eeprom_w;
+ devcb_read8 m_eeprom_r;
+
+ devcb_write8 m_uart_tx;
+
+ devcb_write8 m_chip_sel;
+
+ uint16_t m_timer_a_preload;
+ uint16_t m_timer_b_preload;
+ uint16_t m_timer_b_divisor;
+ uint16_t m_timer_b_tick_rate;
+
+ emu_timer *m_tmb1;
+ emu_timer *m_tmb2;
+ emu_timer *m_timer_src_ab;
+ emu_timer *m_timer_src_c;
+
+ emu_timer *m_4khz_timer;
+ uint32_t m_2khz_divider;
+ uint32_t m_1khz_divider;
+ uint32_t m_4hz_divider;
+
+ uint32_t m_uart_baud_rate;
+ emu_timer *m_uart_tx_timer;
+ emu_timer *m_uart_rx_timer;
+
+ required_device<unsp_device> m_cpu;
+ required_device<screen_device> m_screen;
+
+ devcb_read16 m_pal_read_cb;
+
+ devcb_write_line m_timer_irq_cb;
+ devcb_write_line m_uart_adc_irq_cb;
+ devcb_write_line m_external_irq_cb;
+ devcb_write_line m_ffreq_tmr1_irq_cb;
+ devcb_write_line m_ffreq_tmr2_irq_cb;
+};
+
+class spg24x_io_device : public spg2xx_io_device
+{
+public:
+ template <typename T, typename U>
+ spg24x_io_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&cpu_tag, U &&screen_tag)
+ : spg24x_io_device(mconfig, tag, owner, clock)
+ {
+ m_cpu.set_tag(std::forward<T>(cpu_tag));
+ m_screen.set_tag(std::forward<U>(screen_tag));
+ }
+
+ spg24x_io_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+};
+
+class spg28x_io_device : public spg2xx_io_device
+{
+public:
+ template <typename T, typename U>
+ spg28x_io_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&cpu_tag, U &&screen_tag)
+ : spg28x_io_device(mconfig, tag, owner, clock)
+ {
+ m_cpu.set_tag(std::forward<T>(cpu_tag));
+ m_screen.set_tag(std::forward<U>(screen_tag));
+ }
+
+ spg28x_io_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ virtual DECLARE_WRITE16_MEMBER(io_extended_w) override;
+};
+
+DECLARE_DEVICE_TYPE(SPG24X_IO, spg24x_io_device)
+DECLARE_DEVICE_TYPE(SPG28X_IO, spg28x_io_device)
+
+#endif // MAME_MACHINE_SPG2XX_IO_H
diff --git a/src/devices/machine/spg2xx_sysdma.cpp b/src/devices/machine/spg2xx_sysdma.cpp
new file mode 100644
index 00000000000..fe0d61ea395
--- /dev/null
+++ b/src/devices/machine/spg2xx_sysdma.cpp
@@ -0,0 +1,117 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+/*****************************************************************************
+
+ SunPlus SPG2xx-series SoC peripheral emulation (System DMA)
+
+**********************************************************************/
+
+#include "emu.h"
+#include "spg2xx_sysdma.h"
+
+DEFINE_DEVICE_TYPE(SPG2XX_SYSDMA, spg2xx_sysdma_device, "spg2xx_sysdma", "SPG240-series System-on-a-Chip System DMA")
+
+#define LOG_DMA (1U << 9)
+#define LOG_ALL (LOG_DMA)
+
+#define VERBOSE (0)
+#include "logmacro.h"
+
+
+
+spg2xx_sysdma_device::spg2xx_sysdma_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, SPG2XX_SYSDMA, tag, owner, clock)
+ , m_cpu(*this, finder_base::DUMMY_TAG)
+{
+}
+
+void spg2xx_sysdma_device::device_start()
+{
+ save_item(NAME(m_dma_regs));
+}
+
+void spg2xx_sysdma_device::device_reset()
+{
+ memset(m_dma_regs, 0, 0x4 * sizeof(uint16_t));
+}
+
+/*************************
+* Machine Hardware *
+*************************/
+
+READ16_MEMBER(spg2xx_sysdma_device::dma_r)
+{
+ offset &= 0x3;
+
+ uint16_t val = m_dma_regs[offset];
+ switch (offset)
+ {
+
+ case 0x000: // DMA Source (L)
+ LOGMASKED(LOG_DMA, "dma_r: DMA Source (lo) = %04x\n", val);
+ break;
+
+ case 0x001: // DMA Source (H)
+ LOGMASKED(LOG_DMA, "dma_r: DMA Source (hi) = %04x\n", val);
+ break;
+
+ case 0x002: // DMA Length
+ LOGMASKED(LOG_DMA, "dma_r: DMA Length = %04x\n", 0);
+ val = 0;
+ break;
+
+ case 0x003: // DMA Destination
+ LOGMASKED(LOG_DMA, "dma_r: DMA Dest = %04x\n", val);
+ break;
+ }
+
+ return val;
+}
+
+WRITE16_MEMBER(spg2xx_sysdma_device::dma_w)
+{
+ offset &= 0x3;
+
+ switch (offset)
+ {
+ case 0x000: // DMA Source (lo)
+ LOGMASKED(LOG_DMA, "dma_w: DMA Source (lo) = %04x\n", data);
+ m_dma_regs[offset] = data;
+ break;
+
+ case 0x001: // DMA Source (hi)
+ LOGMASKED(LOG_DMA, "dma_w: DMA Source (hi) = %04x\n", data);
+ m_dma_regs[offset] = data;
+ break;
+
+ case 0x002: // DMA Length
+ LOGMASKED(LOG_DMA, "dma_w: DMA Length = %04x\n", data);
+ if (!(data & 0xc000)) // jak_dora writes 0xffff here which ends up trashing registers etc. why? such writes can't be valid
+ do_cpu_dma(data);
+ break;
+
+ case 0x003: // DMA Destination
+ LOGMASKED(LOG_DMA, "dma_w: DMA Dest = %04x\n", data);
+ m_dma_regs[offset] = data;
+ break;
+ }
+}
+
+void spg2xx_sysdma_device::do_cpu_dma(uint32_t len)
+{
+ address_space &mem = m_cpu->space(AS_PROGRAM);
+
+ uint32_t src = ((m_dma_regs[0x001] & 0x3f) << 16) | m_dma_regs[0x000];
+ uint32_t dst = m_dma_regs[0x003] & 0x3fff;
+
+ for (uint32_t j = 0; j < len; j++)
+ {
+ mem.write_word((dst + j) & 0x3fff, mem.read_word(src + j));
+ }
+
+ src += len;
+ m_dma_regs[0x000] = (uint16_t)src;
+ m_dma_regs[0x001] = (src >> 16) & 0x3f;
+ m_dma_regs[0x002] = 0;
+ m_dma_regs[0x003] = (dst + len) & 0x3fff;
+}
diff --git a/src/devices/machine/spg2xx_sysdma.h b/src/devices/machine/spg2xx_sysdma.h
new file mode 100644
index 00000000000..bea7755bcd9
--- /dev/null
+++ b/src/devices/machine/spg2xx_sysdma.h
@@ -0,0 +1,46 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+/*****************************************************************************
+
+ SunPlus SPG2xx-series SoC peripheral emulation (System DMA)
+
+**********************************************************************/
+
+#ifndef MAME_MACHINE_SPG2XX_SYSDMA_H
+#define MAME_MACHINE_SPG2XX_SYSDMA_H
+
+#pragma once
+
+#include "cpu/unsp/unsp.h"
+
+DECLARE_DEVICE_TYPE(SPG2XX_SYSDMA, spg2xx_sysdma_device)
+
+
+class spg2xx_sysdma_device : public device_t
+{
+public:
+ template <typename T>
+ spg2xx_sysdma_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&cpu_tag)
+ : spg2xx_sysdma_device(mconfig, tag, owner, clock)
+ {
+ m_cpu.set_tag(std::forward<T>(cpu_tag));
+ }
+
+ spg2xx_sysdma_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ DECLARE_READ16_MEMBER(dma_r);
+ DECLARE_WRITE16_MEMBER(dma_w);
+
+protected:
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+private:
+ void do_cpu_dma(uint32_t len);
+
+ uint16_t m_dma_regs[0x4];
+
+ required_device<unsp_device> m_cpu;
+};
+
+
+#endif // MAME_MACHINE_SPG2XX_SYSDMA_H
diff --git a/src/devices/machine/spg2xx_video.cpp b/src/devices/machine/spg2xx_video.cpp
new file mode 100644
index 00000000000..daef752bc82
--- /dev/null
+++ b/src/devices/machine/spg2xx_video.cpp
@@ -0,0 +1,828 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+/*****************************************************************************
+
+ SunPlus SPG2xx-series SoC peripheral emulation (Video)
+
+**********************************************************************/
+
+#include "emu.h"
+#include "spg2xx_video.h"
+
+DEFINE_DEVICE_TYPE(SPG24X_VIDEO, spg24x_video_device, "spg24x_video", "SPG240-series System-on-a-Chip (Video)")
+
+#define LOG_IRQS (1U << 4)
+#define LOG_VLINES (1U << 5)
+#define LOG_DMA (1U << 9)
+#define LOG_PPU_READS (1U << 22)
+#define LOG_PPU_WRITES (1U << 23)
+#define LOG_UNKNOWN_PPU (1U << 24)
+#define LOG_PPU (LOG_PPU_READS | LOG_PPU_WRITES | LOG_UNKNOWN_PPU)
+#define LOG_ALL (LOG_IRQS | LOG_PPU | LOG_VLINES | LOG_DMA )
+
+#define VERBOSE (0)
+#include "logmacro.h"
+
+#define SPG_DEBUG_VIDEO (0)
+
+#define VIDEO_IRQ_ENABLE m_video_regs[0x62]
+#define VIDEO_IRQ_STATUS m_video_regs[0x63]
+
+spg2xx_video_device::spg2xx_video_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , m_sprlimit_read_cb(*this)
+ , m_rowscrolloffset_read_cb(*this)
+ , m_cpu(*this, finder_base::DUMMY_TAG)
+ , m_screen(*this, finder_base::DUMMY_TAG)
+ , m_scrollram(*this, "scrollram")
+ , m_paletteram(*this, "paletteram")
+ , m_spriteram(*this, "spriteram")
+ , m_video_irq_cb(*this)
+{
+}
+
+spg24x_video_device::spg24x_video_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : spg2xx_video_device(mconfig, SPG24X_VIDEO, tag, owner, clock)
+{
+}
+
+void spg2xx_video_device::device_start()
+{
+ for (uint8_t i = 0; i < 32; i++)
+ {
+ m_rgb5_to_rgb8[i] = (i << 3) | (i >> 2);
+ }
+ for (uint16_t i = 0; i < 0x8000; i++)
+ {
+ m_rgb555_to_rgb888[i] = (m_rgb5_to_rgb8[(i >> 10) & 0x1f] << 16) |
+ (m_rgb5_to_rgb8[(i >> 5) & 0x1f] << 8) |
+ (m_rgb5_to_rgb8[(i >> 0) & 0x1f] << 0);
+ }
+
+ m_screenpos_timer = timer_alloc(TIMER_SCREENPOS);
+ m_screenpos_timer->adjust(attotime::never);
+
+ save_item(NAME(m_hide_page0));
+ save_item(NAME(m_hide_page1));
+ save_item(NAME(m_hide_sprites));
+ save_item(NAME(m_debug_sprites));
+ save_item(NAME(m_debug_blit));
+ save_item(NAME(m_debug_palette));
+ save_item(NAME(m_sprite_index_to_debug));
+
+ save_item(NAME(m_video_regs));
+
+ m_sprlimit_read_cb.resolve_safe(0);
+ m_rowscrolloffset_read_cb.resolve_safe(0);
+
+ m_video_irq_cb.resolve();
+
+}
+
+void spg2xx_video_device::device_reset()
+{
+ memset(m_video_regs, 0, 0x100 * sizeof(uint16_t));
+
+ m_video_regs[0x36] = 0xffff;
+ m_video_regs[0x37] = 0xffff;
+ m_video_regs[0x3c] = 0x0020;
+ m_video_regs[0x42] = 0x0001;
+
+ m_hide_page0 = false;
+ m_hide_page1 = false;
+ m_hide_sprites = false;
+ m_debug_sprites = false;
+ m_debug_blit = false;
+ m_debug_palette = false;
+ m_sprite_index_to_debug = 0;
+}
+
+/*************************
+* Video Hardware *
+*************************/
+
+// Perform a lerp between a and b
+inline uint8_t spg2xx_video_device::mix_channel(uint8_t bottom, uint8_t top)
+{
+ uint8_t alpha = (m_video_regs[0x2a] & 3) << 6;
+ return ((256 - alpha) * bottom + alpha * top) >> 8;
+}
+
+template<spg2xx_video_device::blend_enable_t Blend, spg2xx_video_device::rowscroll_enable_t RowScroll, spg2xx_video_device::flipx_t FlipX>
+void spg2xx_video_device::draw(const rectangle &cliprect, uint32_t line, uint32_t xoff, uint32_t yoff, uint32_t bitmap_addr, uint16_t tile, int32_t h, int32_t w, uint8_t bpp, uint32_t yflipmask, uint32_t palette_offset)
+{
+ address_space &space = m_cpu->space(AS_PROGRAM);
+
+ uint32_t nc_bpp = ((bpp) + 1) << 1;
+
+ if (SPG_DEBUG_VIDEO && m_debug_blit)
+ {
+ printf("s:%d line:%d xy:%08x,%08x bitmap_addr:%08x tile:%04x\n", cliprect.min_x, line, xoff, yoff, bitmap_addr, tile);
+ printf("hw:%d,%d yfm:%d nc_bppols:%d pobs:%02x ", w, h, yflipmask, nc_bpp, palette_offset);
+ }
+ palette_offset >>= nc_bpp;
+ palette_offset <<= nc_bpp;
+ if (SPG_DEBUG_VIDEO && m_debug_blit)
+ {
+ printf("poas:%02x\n", palette_offset);
+ }
+
+ uint32_t bits_per_row = nc_bpp * w / 16;
+ uint32_t words_per_tile = bits_per_row * h;
+ uint32_t m = bitmap_addr + words_per_tile * tile + bits_per_row * (line ^ yflipmask);
+ uint32_t bits = 0;
+ uint32_t nbits = 0;
+ uint32_t y = line;
+
+ int yy = (yoff + y) & 0x1ff;
+ if (yy >= 0x01c0)
+ yy -= 0x0200;
+
+ if (yy > 240 || yy < 0)
+ return;
+
+ if (SPG_DEBUG_VIDEO && m_debug_blit)
+ printf("%3d:\n", yy);
+
+ int y_index = yy * 320;
+
+ for (int32_t x = FlipX ? (w - 1) : 0; FlipX ? x >= 0 : x < w; FlipX ? x-- : x++)
+ {
+ int xx = xoff + x;
+
+ bits <<= nc_bpp;
+ if (SPG_DEBUG_VIDEO && m_debug_blit)
+ printf(" %08x:%d ", bits, nbits);
+ if (nbits < nc_bpp)
+ {
+ uint16_t b = space.read_word(m++ & 0x3fffff);
+ b = (b << 8) | (b >> 8);
+ bits |= b << (nc_bpp - nbits);
+ nbits += 16;
+ if (SPG_DEBUG_VIDEO && m_debug_blit)
+ printf("(%04x:%08x:%d) ", b, bits, nbits);
+ }
+ nbits -= nc_bpp;
+
+ uint32_t pal = palette_offset + (bits >> 16);
+ if (SPG_DEBUG_VIDEO && m_debug_blit)
+ printf("%02x:%02x:%04x ", bits >> 16, pal, bits & 0xffff);
+ bits &= 0xffff;
+
+ if (RowScroll)
+ xx -= (int16_t)m_scrollram[(yy + m_rowscrolloffset_read_cb()) & 0x1ff];
+
+ xx &= 0x01ff;
+ if (xx >= 0x01c0)
+ xx -= 0x0200;
+
+ if (xx >= 0 && xx < 320)
+ {
+ int pix_index = xx + y_index;
+
+ uint16_t rgb = m_paletteram[pal];
+ if (SPG_DEBUG_VIDEO && m_debug_blit)
+ printf("rgb:%04x ", rgb);
+
+ if (!(rgb & 0x8000))
+ {
+ if (Blend)
+ {
+ if (SPG_DEBUG_VIDEO && m_debug_blit)
+ printf("M\n");
+ m_screenbuf[pix_index] = (mix_channel((uint8_t)(m_screenbuf[pix_index] >> 16), m_rgb5_to_rgb8[(rgb >> 10) & 0x1f]) << 16) |
+ (mix_channel((uint8_t)(m_screenbuf[pix_index] >> 8), m_rgb5_to_rgb8[(rgb >> 5) & 0x1f]) << 8) |
+ (mix_channel((uint8_t)(m_screenbuf[pix_index] >> 0), m_rgb5_to_rgb8[rgb & 0x1f]));
+ }
+ else
+ {
+ if (SPG_DEBUG_VIDEO && m_debug_blit)
+ printf("S\n");
+ m_screenbuf[pix_index] = m_rgb555_to_rgb888[rgb];
+ }
+ }
+ else if (SPG_DEBUG_VIDEO && m_debug_blit)
+ {
+ printf("X\n");
+ }
+ }
+ }
+}
+
+void spg2xx_video_device::draw_page(const rectangle &cliprect, uint32_t scanline, int priority, uint32_t bitmap_addr, uint16_t *regs)
+{
+ uint32_t xscroll = regs[0];
+ uint32_t yscroll = regs[1];
+ uint32_t attr = regs[2];
+ uint32_t ctrl = regs[3];
+ uint32_t tilemap = regs[4];
+ uint32_t palette_map = regs[5];
+ address_space &space = m_cpu->space(AS_PROGRAM);
+
+ if (!(ctrl & PAGE_ENABLE_MASK))
+ {
+ return;
+ }
+
+ if (((attr & PAGE_PRIORITY_FLAG_MASK) >> PAGE_PRIORITY_FLAG_SHIFT) != priority)
+ {
+ return;
+ }
+
+ uint32_t tile_h = 8 << ((attr & PAGE_TILE_HEIGHT_MASK) >> PAGE_TILE_HEIGHT_SHIFT);
+ uint32_t tile_w = 8 << ((attr & PAGE_TILE_WIDTH_MASK) >> PAGE_TILE_WIDTH_SHIFT);
+
+ uint32_t tile_count_x = 512 / tile_w;
+
+ uint32_t bitmap_y = (scanline + yscroll) & 0xff;
+ uint32_t y0 = bitmap_y / tile_h;
+ uint32_t tile_scanline = bitmap_y % tile_h;
+ uint32_t tile_address = tile_count_x * y0;
+ if (SPG_DEBUG_VIDEO && machine().input().code_pressed(KEYCODE_H))
+ printf("s:%3d | baddr:%08x | yscr:%3d | bity:%3d | y0:%2d | ts:%2d\n", scanline, bitmap_addr, yscroll, bitmap_y, y0, tile_scanline);
+
+ if (SPG_DEBUG_VIDEO && machine().input().code_pressed(KEYCODE_EQUALS))
+ m_debug_blit = true;
+ for (uint32_t x0 = 0; x0 < tile_count_x; x0++, tile_address++)
+ {
+ uint32_t yy = ((tile_h * y0 - yscroll + 0x10) & 0xff) - 0x10;
+ uint32_t xx = (tile_w * x0 - xscroll) & 0x1ff;
+ uint16_t tile = (ctrl & PAGE_WALLPAPER_MASK) ? space.read_word(tilemap) : space.read_word(tilemap + tile_address);
+ uint16_t palette = 0;
+
+ if (!tile)
+ continue;
+
+ palette = (ctrl & PAGE_WALLPAPER_MASK) ? space.read_word(palette_map) : space.read_word(palette_map + tile_address / 2);
+ if (x0 & 1)
+ palette >>= 8;
+
+ uint32_t tileattr = attr;
+ uint32_t tilectrl = ctrl;
+ if ((ctrl & 2) == 0)
+ { // -(1) bld(1) flip(2) pal(4)
+ tileattr &= ~0x000c;
+ tileattr |= (palette >> 2) & 0x000c; // flip
+
+ tileattr &= ~0x0f00;
+ tileattr |= (palette << 8) & 0x0f00; // palette
+
+ tilectrl &= ~0x0100;
+ tilectrl |= (palette << 2) & 0x0100; // blend
+ }
+
+ const bool blend = (tileattr & 0x4000 || tilectrl & 0x0100);
+ const bool row_scroll = (tilectrl & 0x0010);
+ const bool flip_x = (tileattr & TILE_X_FLIP);
+ const uint32_t yflipmask = tileattr & TILE_Y_FLIP ? tile_h - 1 : 0;
+ const uint32_t palette_offset = (tileattr & 0x0f00) >> 4;
+
+ const uint8_t bpp = tileattr & 0x0003;
+
+ if (blend)
+ {
+ if (row_scroll)
+ {
+ if (flip_x)
+ draw<BlendOn, RowScrollOn, FlipXOn>(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset);
+ else
+ draw<BlendOn, RowScrollOn, FlipXOff>(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset);
+ }
+ else
+ {
+ if (flip_x)
+ draw<BlendOn, RowScrollOff, FlipXOn>(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset);
+ else
+ draw<BlendOn, RowScrollOff, FlipXOff>(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset);
+ }
+ }
+ else
+ {
+ if (row_scroll)
+ {
+ if (flip_x)
+ draw<BlendOff, RowScrollOn, FlipXOn>(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset);
+ else
+ draw<BlendOff, RowScrollOn, FlipXOff>(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset);
+ }
+ else
+ {
+ if (flip_x)
+ draw<BlendOff, RowScrollOff, FlipXOn>(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset);
+ else
+ draw<BlendOff, RowScrollOff, FlipXOff>(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset);
+ }
+ }
+ }
+ if (SPG_DEBUG_VIDEO && machine().input().code_pressed(KEYCODE_EQUALS))
+ m_debug_blit = false;
+}
+
+void spg2xx_video_device::draw_sprite(const rectangle &cliprect, uint32_t scanline, int priority, uint32_t base_addr)
+{
+ uint32_t bitmap_addr = 0x40 * m_video_regs[0x22];
+ uint16_t tile = m_spriteram[base_addr + 0];
+ int16_t x = m_spriteram[base_addr + 1];
+ int16_t y = m_spriteram[base_addr + 2];
+ uint16_t attr = m_spriteram[base_addr + 3];
+
+ if (!tile)
+ {
+ return;
+ }
+
+ if (((attr & PAGE_PRIORITY_FLAG_MASK) >> PAGE_PRIORITY_FLAG_SHIFT) != priority)
+ {
+ return;
+ }
+
+ const uint32_t h = 8 << ((attr & PAGE_TILE_HEIGHT_MASK) >> PAGE_TILE_HEIGHT_SHIFT);
+ const uint32_t w = 8 << ((attr & PAGE_TILE_WIDTH_MASK) >> PAGE_TILE_WIDTH_SHIFT);
+
+ if (!(m_video_regs[0x42] & SPRITE_COORD_TL_MASK))
+ {
+ x = (160 + x) - w / 2;
+ y = (120 - y) - (h / 2) + 8;
+ }
+
+ x &= 0x01ff;
+ y &= 0x01ff;
+
+ uint32_t tile_line = ((scanline - y) + 0x200) % h;
+ int16_t test_y = (y + tile_line) & 0x1ff;
+ if (test_y >= 0x01c0)
+ test_y -= 0x0200;
+
+ if (test_y != scanline)
+ {
+ return;
+ }
+
+ bool blend = (attr & 0x4000);
+ bool flip_x = (attr & TILE_X_FLIP);
+ const uint8_t bpp = attr & 0x0003;
+ const uint32_t yflipmask = attr & TILE_Y_FLIP ? h - 1 : 0;
+ const uint32_t palette_offset = (attr & 0x0f00) >> 4;
+
+#if SPG_DEBUG_VIDEO
+ if (m_debug_sprites && machine().input().code_pressed(KEYCODE_MINUS))
+ m_debug_blit = true;
+ if (blend)
+ {
+ if (flip_x)
+ draw<BlendOn, RowScrollOff, FlipXOn>(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset);
+ else
+ draw<BlendOn, RowScrollOff, FlipXOff>(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset);
+ }
+ else
+ {
+ if (flip_x)
+ draw<BlendOff, RowScrollOff, FlipXOn>(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset);
+ else
+ draw<BlendOff, RowScrollOff, FlipXOff>(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset);
+ }
+ m_debug_blit = false;
+#else
+ if (blend)
+ {
+ if (flip_x)
+ draw<BlendOn, RowScrollOff, FlipXOn>(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset);
+ else
+ draw<BlendOn, RowScrollOff, FlipXOff>(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset);
+ }
+ else
+ {
+ if (flip_x)
+ draw<BlendOff, RowScrollOff, FlipXOn>(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset);
+ else
+ draw<BlendOff, RowScrollOff, FlipXOff>(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset);
+ }
+#endif
+}
+
+void spg2xx_video_device::draw_sprites(const rectangle &cliprect, uint32_t scanline, int priority)
+{
+ if (!(m_video_regs[0x42] & SPRITE_ENABLE_MASK))
+ {
+ return;
+ }
+
+#if SPG_DEBUG_VIDEO
+ if (!m_debug_sprites)
+ {
+#endif
+ for (uint32_t n = 0; n < m_sprlimit_read_cb(); n++)
+ {
+ draw_sprite(cliprect, scanline, priority, 4 * n);
+ }
+#if SPG_DEBUG_VIDEO
+ }
+ else
+ {
+ draw_sprite(cliprect, scanline, priority, 4 * m_sprite_index_to_debug);
+ }
+#endif
+}
+
+void spg2xx_video_device::apply_saturation(const rectangle &cliprect)
+{
+ static const float s_u8_to_float = 1.0f / 255.0f;
+ static const float s_gray_r = 0.299f;
+ static const float s_gray_g = 0.587f;
+ static const float s_gray_b = 0.114f;
+ const float sat_adjust = (0xff - (m_video_regs[0x3c] & 0x00ff)) / (float)(0xff - 0x20);
+ for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
+ {
+ uint32_t *src = &m_screenbuf[cliprect.min_x + 320 * y];
+ for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
+ {
+ const uint32_t src_rgb = *src;
+ const float src_r = (uint8_t)(src_rgb >> 16) * s_u8_to_float;
+ const float src_g = (uint8_t)(src_rgb >> 8) * s_u8_to_float;
+ const float src_b = (uint8_t)(src_rgb >> 0) * s_u8_to_float;
+ const float luma = src_r * s_gray_r + src_g * s_gray_g + src_b * s_gray_b;
+ const float adjusted_r = luma + (src_r - luma) * sat_adjust;
+ const float adjusted_g = luma + (src_g - luma) * sat_adjust;
+ const float adjusted_b = luma + (src_b - luma) * sat_adjust;
+ const int integer_r = (int)floor(adjusted_r * 255.0f);
+ const int integer_g = (int)floor(adjusted_g * 255.0f);
+ const int integer_b = (int)floor(adjusted_b * 255.0f);
+ *src++ = (integer_r > 255 ? 0xff0000 : (integer_r < 0 ? 0 : ((uint8_t)integer_r << 16))) |
+ (integer_g > 255 ? 0x00ff00 : (integer_g < 0 ? 0 : ((uint8_t)integer_g << 8))) |
+ (integer_b > 255 ? 0x0000ff : (integer_b < 0 ? 0 : (uint8_t)integer_b));
+ }
+ }
+}
+
+void spg2xx_video_device::apply_fade(const rectangle &cliprect)
+{
+ const uint16_t fade_offset = m_video_regs[0x30];
+ for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
+ {
+ uint32_t *src = &m_screenbuf[cliprect.min_x + 320 * y];
+ for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
+ {
+ const uint32_t src_rgb = *src;
+ const uint8_t src_r = (src_rgb >> 16) & 0xff;
+ const uint8_t src_g = (src_rgb >> 8) & 0xff;
+ const uint8_t src_b = (src_rgb >> 0) & 0xff;
+ const uint8_t r = src_r - fade_offset;
+ const uint8_t g = src_g - fade_offset;
+ const uint8_t b = src_b - fade_offset;
+ *src++ = (r > src_r ? 0 : (r << 16)) |
+ (g > src_g ? 0 : (g << 8)) |
+ (b > src_b ? 0 : (b << 0));
+ }
+ }
+}
+
+uint32_t spg2xx_video_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+{
+ memset(&m_screenbuf[320 * cliprect.min_y], 0, 4 * 320 * ((cliprect.max_y - cliprect.min_y) + 1));
+
+ const uint32_t page1_addr = 0x40 * m_video_regs[0x20];
+ const uint32_t page2_addr = 0x40 * m_video_regs[0x21];
+ uint16_t *page1_regs = m_video_regs + 0x10;
+ uint16_t *page2_regs = m_video_regs + 0x16;
+
+ for (uint32_t scanline = (uint32_t)cliprect.min_y; scanline <= (uint32_t)cliprect.max_y; scanline++)
+ {
+ for (int i = 0; i < 4; i++)
+ {
+ if (!SPG_DEBUG_VIDEO || !m_hide_page0)
+ draw_page(cliprect, scanline, i, page1_addr, page1_regs);
+ if (!SPG_DEBUG_VIDEO || !m_hide_page1)
+ draw_page(cliprect, scanline, i, page2_addr, page2_regs);
+ if (!SPG_DEBUG_VIDEO || !m_hide_sprites)
+ draw_sprites(cliprect, scanline, i);
+ }
+ }
+
+ if ((m_video_regs[0x3c] & 0x00ff) != 0x0020)
+ {
+ apply_saturation(cliprect);
+ }
+
+ if (m_video_regs[0x30] != 0)
+ {
+ apply_fade(cliprect);
+ }
+
+ for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
+ {
+ uint32_t *dest = &bitmap.pix32(y, cliprect.min_x);
+ uint32_t *src = &m_screenbuf[cliprect.min_x + 320 * y];
+ memcpy(dest, src, sizeof(uint32_t) * ((cliprect.max_x - cliprect.min_x) + 1));
+ }
+
+ if (SPG_DEBUG_VIDEO && m_debug_palette)
+ {
+ for (int y = cliprect.min_y; y <= cliprect.max_y && y < 128; y++)
+ {
+ const uint16_t high_nybble = (y / 8) << 4;
+ uint32_t *dest = &bitmap.pix32(y, cliprect.min_x);
+ for (int x = cliprect.min_x; x <= cliprect.max_x && x < 256; x++)
+ {
+ const uint16_t low_nybble = x / 16;
+ const uint16_t palette_entry = high_nybble | low_nybble;
+ const uint16_t color = m_paletteram[palette_entry];
+ if (!(color & 0x8000))
+ {
+ *dest = m_rgb555_to_rgb888[color & 0x7fff];
+ }
+ dest++;
+ }
+ }
+ }
+
+ return 0;
+}
+
+void spg2xx_video_device::do_sprite_dma(uint32_t len)
+{
+ address_space &mem = m_cpu->space(AS_PROGRAM);
+
+ uint32_t src = m_video_regs[0x70] & 0x3fff;
+ uint32_t dst = m_video_regs[0x71];
+
+ for (uint32_t j = 0; j < len; j++)
+ {
+ m_spriteram[(dst + j) & 0x3ff] = mem.read_word(src + j);
+ }
+
+ m_video_regs[0x72] = 0;
+ if (VIDEO_IRQ_ENABLE & 4)
+ {
+ const uint16_t old = VIDEO_IRQ_STATUS;
+ VIDEO_IRQ_STATUS |= 4;
+ const uint16_t changed = old ^ (VIDEO_IRQ_ENABLE & VIDEO_IRQ_STATUS);
+ if (changed)
+ check_video_irq();
+ }
+}
+
+READ16_MEMBER(spg2xx_video_device::video_r)
+{
+ switch (offset)
+ {
+ case 0x38: // Current Line
+ LOGMASKED(LOG_VLINES, "video_r: Current Line: %04x\n", m_screen->vpos());
+ return m_screen->vpos();
+
+ case 0x62: // Video IRQ Enable
+ LOGMASKED(LOG_IRQS, "video_r: Video IRQ Enable: %04x\n", VIDEO_IRQ_ENABLE);
+ return VIDEO_IRQ_ENABLE;
+
+ case 0x63: // Video IRQ Status
+ LOGMASKED(LOG_IRQS, "video_r: Video IRQ Status: %04x\n", VIDEO_IRQ_STATUS);
+ return VIDEO_IRQ_STATUS;
+
+ default:
+ LOGMASKED(LOG_UNKNOWN_PPU, "video_r: Unknown register %04x = %04x\n", 0x2800 + offset, m_video_regs[offset]);
+ break;
+ }
+ return m_video_regs[offset];
+}
+
+WRITE16_MEMBER(spg2xx_video_device::video_w)
+{
+ switch (offset)
+ {
+ case 0x10: // Page 1 X scroll
+ LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 X Scroll = %04x\n", data & 0x01ff);
+ m_video_regs[offset] = data & 0x01ff;
+ break;
+
+ case 0x11: // Page 1 Y scroll
+ LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 Y Scroll = %04x\n", data & 0x00ff);
+ m_video_regs[offset] = data & 0x00ff;
+ break;
+
+ case 0x12: // Page 1 Attributes
+ LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 Attributes = %04x (Depth:%d, Palette:%d, VSize:%d, HSize:%d, FlipY:%d, FlipX:%d, BPP:%d)\n", data
+ , (data >> 12) & 3, (data >> 8) & 15, 8 << ((data >> 6) & 3), 8 << ((data >> 4) & 3), BIT(data, 3), BIT(data, 2), 2 * ((data & 3) + 1));
+ m_video_regs[offset] = data;
+ break;
+
+ case 0x13: // Page 1 Control
+ LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 Control = %04x (Blend:%d, HiColor:%d, RowScroll:%d, Enable:%d, Wallpaper:%d, RegSet:%d, Bitmap:%d)\n", data
+ , BIT(data, 8), BIT(data, 7), BIT(data, 4), BIT(data, 3), BIT(data, 2), BIT(data, 1), BIT(data, 0));
+ m_video_regs[offset] = data;
+ break;
+
+ case 0x14: // Page 1 Tile Address
+ LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 Tile Address = %04x\n", data & 0x1fff);
+ m_video_regs[offset] = data;
+ break;
+
+ case 0x15: // Page 1 Attribute Address
+ LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 Attribute Address = %04x\n", data & 0x1fff);
+ m_video_regs[offset] = data;
+ break;
+
+ case 0x16: // Page 2 X scroll
+ LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 X Scroll = %04x\n", data & 0x01ff);
+ m_video_regs[offset] = data & 0x01ff;
+ break;
+
+ case 0x17: // Page 2 Y scroll
+ LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 Y Scroll: %04x = %04x\n", 0x2800 | offset, data & 0x00ff);
+ m_video_regs[offset] = data & 0x00ff;
+ break;
+
+ case 0x18: // Page 2 Attributes
+ LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 Attributes = %04x (Depth:%d, Palette:%d, VSize:%d, HSize:%d, FlipY:%d, FlipX:%d, BPP:%d)\n", data
+ , (data >> 12) & 3, (data >> 8) & 15, 8 << ((data >> 6) & 3), 8 << ((data >> 4) & 3), BIT(data, 3), BIT(data, 2), 2 * ((data & 3) + 1));
+ m_video_regs[offset] = data;
+ break;
+
+ case 0x19: // Page 2 Control
+ LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 Control = %04x (Blend:%d, HiColor:%d, RowScroll:%d, Enable:%d, Wallpaper:%d, RegSet:%d, Bitmap:%d)\n", data
+ , BIT(data, 8), BIT(data, 7), BIT(data, 4), BIT(data, 3), BIT(data, 2), BIT(data, 1), BIT(data, 0));
+ m_video_regs[offset] = data;
+ break;
+
+ case 0x1a: // Page 2 Tile Address
+ LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 Tile Address = %04x\n", data & 0x1fff);
+ m_video_regs[offset] = data;
+ break;
+
+ case 0x1b: // Page 2 Attribute Address
+ LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 Attribute Address = %04x\n", data & 0x1fff);
+ m_video_regs[offset] = data;
+ break;
+
+ case 0x20: // Page 1 Segment Address
+ LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 Segment Address = %04x\n", data);
+ m_video_regs[offset] = data;
+ break;
+
+ case 0x21: // Page 2 Segment Address
+ LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 Segment Address = %04x\n", data);
+ m_video_regs[offset] = data;
+ break;
+
+ case 0x22: // Sprite Segment Address
+ LOGMASKED(LOG_PPU_WRITES, "video_w: Sprite Segment Address = %04x\n", data);
+ m_video_regs[offset] = data;
+ break;
+
+ case 0x2a: // Blend Level Control
+ LOGMASKED(LOG_PPU_WRITES, "video_w: Blend Level Control = %04x\n", data & 0x0003);
+ m_video_regs[offset] = data & 0x0003;
+ break;
+
+ case 0x30: // Fade Effect Control
+ LOGMASKED(LOG_PPU_WRITES, "video_w: Fade Effect Control = %04x\n", data & 0x00ff);
+ m_video_regs[offset] = data & 0x00ff;
+ break;
+
+ case 0x36: // IRQ pos V
+ case 0x37: // IRQ pos H
+ m_video_regs[offset] = data & 0x01ff;
+ LOGMASKED(LOG_IRQS, "video_w: Video IRQ Position: %04x,%04x (%04x)\n", m_video_regs[0x37], m_video_regs[0x36], 0x2800 | offset);
+ if (m_video_regs[0x37] < 160 && m_video_regs[0x36] < 240)
+ m_screenpos_timer->adjust(m_screen->time_until_pos(m_video_regs[0x36], m_video_regs[0x37] << 1));
+ else
+ m_screenpos_timer->adjust(attotime::never);
+ break;
+
+ case 0x39: // Latch 1st Line Pen Pulse
+ LOGMASKED(LOG_PPU_WRITES, "video_w: Latch 1st Line Pen Pulse = %04x\n", data & 0x0001);
+ m_video_regs[offset] = data & 0x0001;
+ break;
+
+ case 0x3c: // TV Control 1
+ LOGMASKED(LOG_PPU_WRITES, "video_w: TV Control 1 = %04x (Hue:%02x, Saturation:%02x)\n", data, data >> 8, data & 0x00ff);
+ m_video_regs[offset] = data;
+ break;
+
+ case 0x3d: // TV Control 2
+ {
+ static const char* const s_lpf_mode[4] = { "LPF1", "LPF2", "All", "Edge" };
+ LOGMASKED(LOG_PPU_WRITES, "video_w: TV Control 2 = %04x (LPFMode:%s, Enable:%d, Interlace:%d)\n", data & 0x000f
+ , s_lpf_mode[(data >> 2) & 3], BIT(data, 1), BIT(data, 0));
+ m_video_regs[offset] = data & 0x000f;
+ break;
+ }
+
+ case 0x3e: // Light Pen Y Position
+ LOGMASKED(LOG_PPU_WRITES, "video_w: Light Pen Y (read only) = %04x\n", data & 0x01ff);
+ break;
+
+ case 0x3f: // Light Pen YXPosition
+ LOGMASKED(LOG_PPU_WRITES, "video_w: Light Pen X (read only) = %04x\n", data & 0x01ff);
+ break;
+
+ case 0x42: // Sprite Control
+ LOGMASKED(LOG_PPU_WRITES, "video_w: Sprite Control = %04x (TopLeft:%d, Enable:%d)\n", data & 0x0003, BIT(data, 1), BIT(data, 0));
+ m_video_regs[offset] = data & 0x0003;
+ break;
+
+ case 0x62: // Video IRQ Enable
+ {
+ LOGMASKED(LOG_IRQS, "video_w: Video IRQ Enable = %04x (DMA:%d, Timing:%d, Blanking:%d)\n", data & 0x0007, BIT(data, 2), BIT(data, 1), BIT(data, 0));
+ const uint16_t old = VIDEO_IRQ_ENABLE & VIDEO_IRQ_STATUS;
+ VIDEO_IRQ_ENABLE = data & 0x0007;
+ const uint16_t changed = old ^ (VIDEO_IRQ_ENABLE & VIDEO_IRQ_STATUS);
+ if (changed)
+ check_video_irq();
+ break;
+ }
+
+ case 0x63: // Video IRQ Acknowledge
+ {
+ LOGMASKED(LOG_IRQS, "video_w: Video IRQ Acknowledge = %04x\n", data);
+ const uint16_t old = VIDEO_IRQ_ENABLE & VIDEO_IRQ_STATUS;
+ VIDEO_IRQ_STATUS &= ~data;
+ const uint16_t changed = old ^ (VIDEO_IRQ_ENABLE & VIDEO_IRQ_STATUS);
+ if (changed)
+ check_video_irq();
+ break;
+ }
+
+ case 0x70: // Sprite DMA Source
+ LOGMASKED(LOG_DMA, "video_w: Sprite DMA Source = %04x\n", data & 0x3fff);
+ m_video_regs[offset] = data & 0x3fff;
+ break;
+
+ case 0x71: // Sprite DMA Dest
+ LOGMASKED(LOG_DMA, "video_w: Sprite DMA Dest = %04x\n", data & 0x03ff);
+ m_video_regs[offset] = data & 0x03ff;
+ break;
+
+ case 0x72: // Sprite DMA Length
+ {
+ LOGMASKED(LOG_DMA, "video_w: Sprite DMA Length = %04x\n", data & 0x03ff);
+ uint16_t length = data & 0x3ff;
+ do_sprite_dma(length ? length : 0x400);
+ break;
+ }
+
+ default:
+ LOGMASKED(LOG_UNKNOWN_PPU, "video_w: Unknown register %04x = %04x\n", 0x2800 + offset, data);
+ m_video_regs[offset] = data;
+ break;
+ }
+}
+
+WRITE_LINE_MEMBER(spg2xx_video_device::vblank)
+{
+ if (!state)
+ {
+ VIDEO_IRQ_STATUS &= ~1;
+ LOGMASKED(LOG_IRQS, "Setting video IRQ status to %04x\n", VIDEO_IRQ_STATUS);
+ check_video_irq();
+ return;
+ }
+
+#if SPG_DEBUG_VIDEO
+ if (machine().input().code_pressed_once(KEYCODE_5))
+ m_hide_page0 = !m_hide_page0;
+ if (machine().input().code_pressed_once(KEYCODE_6))
+ m_hide_page1 = !m_hide_page1;
+ if (machine().input().code_pressed_once(KEYCODE_7))
+ m_hide_sprites = !m_hide_sprites;
+ if (machine().input().code_pressed_once(KEYCODE_8))
+ m_debug_sprites = !m_debug_sprites;
+ if (machine().input().code_pressed_once(KEYCODE_9))
+ m_sprite_index_to_debug--;
+ if (machine().input().code_pressed_once(KEYCODE_0))
+ m_sprite_index_to_debug++;
+ if (machine().input().code_pressed_once(KEYCODE_L))
+ m_debug_palette = !m_debug_palette;
+#endif
+
+ if (VIDEO_IRQ_ENABLE & 1)
+ {
+ VIDEO_IRQ_STATUS |= 1;
+ LOGMASKED(LOG_IRQS, "Setting video IRQ status to %04x\n", VIDEO_IRQ_STATUS);
+ check_video_irq();
+ }
+}
+
+void spg2xx_video_device::check_video_irq()
+{
+ LOGMASKED(LOG_IRQS, "%ssserting IRQ0 (%04x, %04x)\n", (VIDEO_IRQ_STATUS & VIDEO_IRQ_ENABLE) ? "A" : "Dea", VIDEO_IRQ_STATUS, VIDEO_IRQ_ENABLE);
+ m_video_irq_cb((VIDEO_IRQ_STATUS & VIDEO_IRQ_ENABLE) ? ASSERT_LINE : CLEAR_LINE);
+}
+
+void spg2xx_video_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+{
+ switch (id)
+ {
+ case TIMER_SCREENPOS:
+ {
+ if (VIDEO_IRQ_ENABLE & 2)
+ {
+ VIDEO_IRQ_STATUS |= 2;
+ check_video_irq();
+ }
+ m_screen->update_partial(m_screen->vpos());
+
+ // fire again, jak_dbz pinball needs this
+ m_screenpos_timer->adjust(m_screen->time_until_pos(m_video_regs[0x36], m_video_regs[0x37] << 1));
+ break;
+ }
+ }
+}
diff --git a/src/devices/machine/spg2xx_video.h b/src/devices/machine/spg2xx_video.h
new file mode 100644
index 00000000000..064e3cb9757
--- /dev/null
+++ b/src/devices/machine/spg2xx_video.h
@@ -0,0 +1,137 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+/*****************************************************************************
+
+ SunPlus SPG2xx-series SoC peripheral emulation (Video)
+
+**********************************************************************/
+
+#ifndef MAME_MACHINE_SPG2XX_VIDEO_H
+#define MAME_MACHINE_SPG2XX_VIDEO_H
+
+#pragma once
+
+#include "cpu/unsp/unsp.h"
+#include "screen.h"
+
+class spg2xx_video_device : public device_t
+{
+public:
+ spg2xx_video_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ DECLARE_WRITE_LINE_MEMBER(vblank);
+
+ DECLARE_READ16_MEMBER(video_r);
+ DECLARE_WRITE16_MEMBER(video_w);
+
+ auto sprlimit_read_callback() { return m_sprlimit_read_cb.bind(); };
+ auto rowscrolloffset_read_callback() { return m_rowscrolloffset_read_cb.bind(); };
+
+ auto write_video_irq_callback() { return m_video_irq_cb.bind(); };
+
+protected:
+
+ enum
+ {
+ PAGE_ENABLE_MASK = 0x0008,
+ PAGE_WALLPAPER_MASK = 0x0004,
+
+ SPRITE_ENABLE_MASK = 0x0001,
+ SPRITE_COORD_TL_MASK = 0x0002,
+
+ PAGE_PRIORITY_FLAG_MASK = 0x3000,
+ PAGE_PRIORITY_FLAG_SHIFT = 12,
+ PAGE_TILE_HEIGHT_MASK = 0x00c0,
+ PAGE_TILE_HEIGHT_SHIFT = 6,
+ PAGE_TILE_WIDTH_MASK = 0x0030,
+ PAGE_TILE_WIDTH_SHIFT = 4,
+ TILE_X_FLIP = 0x0004,
+ TILE_Y_FLIP = 0x0008
+ };
+
+
+ inline void check_video_irq();
+
+ static const device_timer_id TIMER_SCREENPOS = 2;
+
+ 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;
+
+ void do_sprite_dma(uint32_t len);
+
+ enum blend_enable_t : bool
+ {
+ BlendOff = false,
+ BlendOn = true
+ };
+
+ enum rowscroll_enable_t : bool
+ {
+ RowScrollOff = false,
+ RowScrollOn = true
+ };
+
+ enum flipx_t : bool
+ {
+ FlipXOff = false,
+ FlipXOn = true
+ };
+
+ void apply_saturation(const rectangle &cliprect);
+ void apply_fade(const rectangle &cliprect);
+
+ template<blend_enable_t Blend, rowscroll_enable_t RowScroll, flipx_t FlipX>
+ void draw(const rectangle &cliprect, uint32_t line, uint32_t xoff, uint32_t yoff, uint32_t bitmap_addr, uint16_t tile, int32_t h, int32_t w, uint8_t bpp, uint32_t yflipmask, uint32_t palette_offset);
+ void draw_page(const rectangle &cliprect, uint32_t scanline, int priority, uint32_t bitmap_addr, uint16_t *regs);
+ void draw_sprite(const rectangle &cliprect, uint32_t scanline, int priority, uint32_t base_addr);
+ void draw_sprites(const rectangle &cliprect, uint32_t scanline, int priority);
+
+ uint8_t mix_channel(uint8_t a, uint8_t b);
+
+ uint32_t m_screenbuf[320 * 240];
+ uint8_t m_rgb5_to_rgb8[32];
+ uint32_t m_rgb555_to_rgb888[0x8000];
+
+ bool m_hide_page0;
+ bool m_hide_page1;
+ bool m_hide_sprites;
+ bool m_debug_sprites;
+ bool m_debug_blit;
+ bool m_debug_palette;
+ uint8_t m_sprite_index_to_debug;
+
+ uint16_t m_video_regs[0x100];
+
+ devcb_read16 m_sprlimit_read_cb;
+ devcb_read16 m_rowscrolloffset_read_cb;
+
+ emu_timer *m_screenpos_timer;
+
+ required_device<unsp_device> m_cpu;
+ required_device<screen_device> m_screen;
+ required_shared_ptr<uint16_t> m_scrollram;
+ required_shared_ptr<uint16_t> m_paletteram;
+ required_shared_ptr<uint16_t> m_spriteram;
+
+ devcb_write_line m_video_irq_cb;
+};
+
+class spg24x_video_device : public spg2xx_video_device
+{
+public:
+ template <typename T, typename U>
+ spg24x_video_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&cpu_tag, U &&screen_tag)
+ : spg24x_video_device(mconfig, tag, owner, clock)
+ {
+ m_cpu.set_tag(std::forward<T>(cpu_tag));
+ m_screen.set_tag(std::forward<U>(screen_tag));
+ }
+
+ spg24x_video_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+};
+
+DECLARE_DEVICE_TYPE(SPG24X_VIDEO, spg24x_video_device)
+
+#endif // MAME_MACHINE_SPG2XX_VIDEO_H
diff --git a/src/devices/machine/tmp68301.cpp b/src/devices/machine/tmp68301.cpp
index ebc710bcde5..1eea072c64a 100644
--- a/src/devices/machine/tmp68301.cpp
+++ b/src/devices/machine/tmp68301.cpp
@@ -23,7 +23,8 @@ DEFINE_DEVICE_TYPE(TMP68301, tmp68301_device, "tmp68301", "Toshiba TMP68301")
void tmp68301_device::tmp68301_regs(address_map &map)
{
-// AM_RANGE(0x000,0x3ff) AM_RAM
+ map(0x000, 0x3ff).rw(FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w));
+
map(0x080, 0x093).rw(FUNC(tmp68301_device::icr_r), FUNC(tmp68301_device::icr_w)).umask16(0x00ff);
map(0x094, 0x095).rw(FUNC(tmp68301_device::imr_r), FUNC(tmp68301_device::imr_w));
@@ -134,9 +135,7 @@ WRITE8_MEMBER(tmp68301_device::icr_w)
}
tmp68301_device::tmp68301_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, TMP68301, tag, owner, clock),
- device_memory_interface(mconfig, *this),
- m_cpu(*this, finder_base::DUMMY_TAG),
+ : m68000_device(mconfig, TMP68301, tag, owner, clock),
m_in_parallel_cb(*this),
m_out_parallel_cb(*this),
m_ipl(0),
@@ -145,8 +144,7 @@ tmp68301_device::tmp68301_device(const machine_config &mconfig, const char *tag,
m_iisr(0),
m_scr(0),
m_pdir(0),
- m_pdr(0),
- m_space_config("regs", ENDIANNESS_LITTLE, 16, 10, 0, address_map_constructor(FUNC(tmp68301_device::tmp68301_regs), this))
+ m_pdr(0)
{
memset(m_regs, 0, sizeof(m_regs));
memset(m_icr, 0, sizeof(m_icr));
@@ -159,13 +157,17 @@ tmp68301_device::tmp68301_device(const machine_config &mconfig, const char *tag,
void tmp68301_device::device_start()
{
- int i;
- for (i = 0; i < 3; i++)
+ m68000_device::device_start();
+
+ for (int i = 0; i < 3; i++)
m_tmp68301_timer[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tmp68301_device::timer_callback), this));
m_in_parallel_cb.resolve_safe(0);
m_out_parallel_cb.resolve_safe();
+ m_program->install_device(0xfffc00, 0xffffff, *this, &tmp68301_device::tmp68301_regs);
+ m_int_ack_callback = device_irq_acknowledge_delegate(FUNC(tmp68301_device::irq_callback), this);
+
save_item(NAME(m_regs));
save_item(NAME(m_icr));
save_item(NAME(m_ipl));
@@ -183,6 +185,8 @@ void tmp68301_device::device_start()
void tmp68301_device::device_reset()
{
+ m68000_device::device_reset();
+
m_ipr = 0;
m_iisr = 0;
m_imr = 0x7f7; // mask all irqs
@@ -190,40 +194,10 @@ void tmp68301_device::device_reset()
update_ipl();
}
-//-------------------------------------------------
-// memory_space_config - return a description of
-// any address spaces owned by this device
-//-------------------------------------------------
-
-device_memory_interface::space_config_vector tmp68301_device::memory_space_config() const
-{
- return space_config_vector {
- std::make_pair(0, &m_space_config)
- };
-}
-
//**************************************************************************
// INLINE HELPERS
//**************************************************************************
-//-------------------------------------------------
-// read_byte - read a byte at the given address
-//-------------------------------------------------
-
-inline uint16_t tmp68301_device::read_word(offs_t address)
-{
- return space(0).read_word(address << 1);
-}
-
-//-------------------------------------------------
-// write_byte - write a byte at the given address
-//-------------------------------------------------
-
-inline void tmp68301_device::write_word(offs_t address, uint16_t data)
-{
- space(0).write_word(address << 1, data);
-}
-
IRQ_CALLBACK_MEMBER(tmp68301_device::irq_callback)
{
uint8_t IVNR = m_regs[0x9a/2] & 0xe0; // Interrupt Vector Number Register (IVNR)
@@ -312,7 +286,7 @@ void tmp68301_device::update_timer(int i)
{
int scale = (TCR & 0x3c00)>>10; // P4..1
if (scale > 8) scale = 8;
- duration = attotime::from_hz(m_cpu->unscaled_clock()) * ((1 << scale) * max);
+ duration = attotime::from_hz(unscaled_clock()) * ((1 << scale) * max);
}
break;
}
@@ -343,9 +317,9 @@ void tmp68301_device::update_ipl()
if (new_ipl != m_ipl)
{
if (m_ipl != 0)
- m_cpu->set_input_line(m_ipl, CLEAR_LINE);
+ set_input_line(m_ipl, CLEAR_LINE);
if (new_ipl != 0)
- m_cpu->set_input_line(new_ipl, ASSERT_LINE);
+ set_input_line(new_ipl, ASSERT_LINE);
m_ipl = new_ipl;
}
@@ -366,18 +340,16 @@ uint8_t tmp68301_device::serial_interrupt_cause(int channel)
READ16_MEMBER( tmp68301_device::regs_r )
{
- return read_word(offset);
+ return m_regs[offset];
}
WRITE16_MEMBER( tmp68301_device::regs_w )
{
COMBINE_DATA(&m_regs[offset]);
- write_word(offset,m_regs[offset]);
-
if (!ACCESSING_BITS_0_7) return;
-// logerror("CPU #0 PC %06X: TMP68301 Reg %04X<-%04X & %04X\n", m_cpu->pc(),offset*2,data,mem_mask^0xffff);
+// logerror("CPU #0 PC %06X: TMP68301 Reg %04X<-%04X & %04X\n", >pc(),offset*2,data,mem_mask^0xffff);
switch( offset * 2 )
{
diff --git a/src/devices/machine/tmp68301.h b/src/devices/machine/tmp68301.h
index e019387802b..c350b9b0be6 100644
--- a/src/devices/machine/tmp68301.h
+++ b/src/devices/machine/tmp68301.h
@@ -16,27 +16,19 @@
-class tmp68301_device : public device_t,
- public device_memory_interface
+class tmp68301_device : public m68000_device
{
public:
tmp68301_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- template <typename T> void set_cputag(T &&tag) { m_cpu.set_tag(std::forward<T>(tag)); } // FIXME: M68000 ought to be a parent class, not an external object
auto in_parallel_callback() { return m_in_parallel_cb.bind(); }
auto out_parallel_callback() { return m_out_parallel_cb.bind(); }
- // Hardware Registers
- DECLARE_READ16_MEMBER( regs_r );
- DECLARE_WRITE16_MEMBER( regs_w );
-
// Interrupts
void external_interrupt_0();
void external_interrupt_1();
void external_interrupt_2();
- IRQ_CALLBACK_MEMBER(irq_callback);
-
private:
DECLARE_READ16_MEMBER(imr_r);
DECLARE_WRITE16_MEMBER(imr_w);
@@ -53,13 +45,18 @@ private:
DECLARE_READ8_MEMBER(icr_r);
DECLARE_WRITE8_MEMBER(icr_w);
+ // Hardware Registers
+ DECLARE_READ16_MEMBER( regs_r );
+ DECLARE_WRITE16_MEMBER( regs_w );
+
void tmp68301_regs(address_map &map);
+ IRQ_CALLBACK_MEMBER(irq_callback);
+
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
- virtual space_config_vector memory_space_config() const override;
private:
TIMER_CALLBACK_MEMBER(timer_callback);
@@ -78,11 +75,6 @@ private:
static constexpr uint16_t TIMER1_IRQ = 1 << 9;
static constexpr uint16_t TIMER2_IRQ = 1 << 10;
- inline uint16_t read_word(offs_t address);
- inline void write_word(offs_t address, uint16_t data);
-
- required_device<m68000_base_device> m_cpu;
-
devcb_read16 m_in_parallel_cb;
devcb_write16 m_out_parallel_cb;
@@ -100,8 +92,6 @@ private:
uint16_t m_pdir;
uint16_t m_pdr;
uint8_t m_icr[10];
-
- const address_space_config m_space_config;
};
DECLARE_DEVICE_TYPE(TMP68301, tmp68301_device)
diff --git a/src/devices/machine/tms5501.cpp b/src/devices/machine/tms5501.cpp
index f7581a30a72..d067497567a 100644
--- a/src/devices/machine/tms5501.cpp
+++ b/src/devices/machine/tms5501.cpp
@@ -263,6 +263,9 @@ READ8_MEMBER( tms5501_device::rst_r )
READ8_MEMBER( tms5501_device::sta_r )
{
+ if(is_transmit_register_empty())
+ m_sta |= STA_XBE;
+
uint8_t data = m_sta;
m_sta &= ~STA_OE;
diff --git a/src/devices/machine/upd765.cpp b/src/devices/machine/upd765.cpp
index d6dbe6cedea..64b844dd222 100644
--- a/src/devices/machine/upd765.cpp
+++ b/src/devices/machine/upd765.cpp
@@ -2292,6 +2292,9 @@ void upd765_family_device::read_id_start(floppy_info &fi)
return;
}
+ for(int i=0; i<4; i++)
+ cur_live.idbuf[i] = command[i+2];
+
read_id_continue(fi);
}
diff --git a/src/devices/machine/vrc5074.cpp b/src/devices/machine/vrc5074.cpp
index b04b689bd9b..0aeef7ebfdc 100644
--- a/src/devices/machine/vrc5074.cpp
+++ b/src/devices/machine/vrc5074.cpp
@@ -1008,7 +1008,7 @@ WRITE_LINE_MEMBER(vrc5074_device::uart_irq_callback)
READ32_MEMBER(vrc5074_device::serial_r)
{
- uint32_t result = m_uart->ins8250_r(space, offset>>1);
+ uint32_t result = m_uart->ins8250_r(offset>>1);
if (0 && LOG_NILE)
logerror("%s serial_r offset %03X = %08X (%08x)\n", machine().describe_context(), offset>>1, result, offset*4);
@@ -1017,7 +1017,7 @@ READ32_MEMBER(vrc5074_device::serial_r)
WRITE32_MEMBER(vrc5074_device::serial_w)
{
- m_uart->ins8250_w(space, offset>>1, data);
+ m_uart->ins8250_w(offset>>1, data);
if (PRINTF_SERIAL && offset == NREG_UARTTHR) {
static std::string debugStr;
printf("%c", data);
diff --git a/src/devices/machine/z80ctc.cpp b/src/devices/machine/z80ctc.cpp
index 1bd0f887397..74adf998feb 100644
--- a/src/devices/machine/z80ctc.cpp
+++ b/src/devices/machine/z80ctc.cpp
@@ -91,7 +91,7 @@ z80ctc_device::z80ctc_device(const machine_config &mconfig, const char *tag, dev
// read - standard handler for reading
//-------------------------------------------------
-READ8_MEMBER( z80ctc_device::read )
+uint8_t z80ctc_device::read(offs_t offset)
{
return m_channel[offset & 3]->read();
}
@@ -101,7 +101,7 @@ READ8_MEMBER( z80ctc_device::read )
// write - standard handler for writing
//-------------------------------------------------
-WRITE8_MEMBER( z80ctc_device::write )
+void z80ctc_device::write(offs_t offset, uint8_t data)
{
m_channel[offset & 3]->write(data);
}
diff --git a/src/devices/machine/z80ctc.h b/src/devices/machine/z80ctc.h
index 0b388eb3933..98dd852ddd2 100644
--- a/src/devices/machine/z80ctc.h
+++ b/src/devices/machine/z80ctc.h
@@ -88,8 +88,8 @@ public:
template <int Channel> void set_clk(const XTAL &xtal) { channel_config(Channel).set_clock(xtal); }
// read/write handlers
- DECLARE_READ8_MEMBER( read );
- DECLARE_WRITE8_MEMBER( write );
+ uint8_t read(offs_t offset);
+ void write(offs_t offset, uint8_t data);
DECLARE_WRITE_LINE_MEMBER( trg0 );
DECLARE_WRITE_LINE_MEMBER( trg1 );
DECLARE_WRITE_LINE_MEMBER( trg2 );
diff --git a/src/devices/machine/z80dart.cpp b/src/devices/machine/z80dart.cpp
index 05a7aef03f3..116f9264598 100644
--- a/src/devices/machine/z80dart.cpp
+++ b/src/devices/machine/z80dart.cpp
@@ -392,7 +392,7 @@ int z80dart_device::m1_r()
// cd_ba_r -
//-------------------------------------------------
-READ8_MEMBER( z80dart_device::cd_ba_r )
+uint8_t z80dart_device::cd_ba_r(offs_t offset)
{
int ba = BIT(offset, 0);
int cd = BIT(offset, 1);
@@ -406,7 +406,7 @@ READ8_MEMBER( z80dart_device::cd_ba_r )
// cd_ba_w -
//-------------------------------------------------
-WRITE8_MEMBER( z80dart_device::cd_ba_w )
+void z80dart_device::cd_ba_w(offs_t offset, uint8_t data)
{
int ba = BIT(offset, 0);
int cd = BIT(offset, 1);
@@ -423,7 +423,7 @@ WRITE8_MEMBER( z80dart_device::cd_ba_w )
// ba_cd_r -
//-------------------------------------------------
-READ8_MEMBER( z80dart_device::ba_cd_r )
+uint8_t z80dart_device::ba_cd_r(offs_t offset)
{
int ba = BIT(offset, 1);
int cd = BIT(offset, 0);
@@ -437,7 +437,7 @@ READ8_MEMBER( z80dart_device::ba_cd_r )
// ba_cd_w -
//-------------------------------------------------
-WRITE8_MEMBER( z80dart_device::ba_cd_w )
+void z80dart_device::ba_cd_w(offs_t offset, uint8_t data)
{
int ba = BIT(offset, 1);
int cd = BIT(offset, 0);
diff --git a/src/devices/machine/z80dart.h b/src/devices/machine/z80dart.h
index 6abceefa5d9..976eafe7f7b 100644
--- a/src/devices/machine/z80dart.h
+++ b/src/devices/machine/z80dart.h
@@ -418,20 +418,20 @@ public:
m_txcb = txb;
}
- DECLARE_READ8_MEMBER( cd_ba_r );
- DECLARE_WRITE8_MEMBER( cd_ba_w );
- DECLARE_READ8_MEMBER( ba_cd_r );
- DECLARE_WRITE8_MEMBER( ba_cd_w );
+ uint8_t cd_ba_r(offs_t offset);
+ void cd_ba_w(offs_t offset, uint8_t data);
+ uint8_t ba_cd_r(offs_t offset);
+ void ba_cd_w(offs_t offset, uint8_t data);
- DECLARE_READ8_MEMBER( da_r ) { return m_chanA->data_read(); }
- DECLARE_WRITE8_MEMBER( da_w ) { m_chanA->data_write(data); }
- DECLARE_READ8_MEMBER( db_r ) { return m_chanB->data_read(); }
- DECLARE_WRITE8_MEMBER( db_w ) { m_chanB->data_write(data); }
+ uint8_t da_r() { return m_chanA->data_read(); }
+ void da_w(uint8_t data) { m_chanA->data_write(data); }
+ uint8_t db_r() { return m_chanB->data_read(); }
+ void db_w(uint8_t data) { m_chanB->data_write(data); }
- DECLARE_READ8_MEMBER( ca_r ) { return m_chanA->control_read(); }
- DECLARE_WRITE8_MEMBER( ca_w ) { m_chanA->control_write(data); }
- DECLARE_READ8_MEMBER( cb_r ) { return m_chanB->control_read(); }
- DECLARE_WRITE8_MEMBER( cb_w ) { m_chanB->control_write(data); }
+ uint8_t ca_r() { return m_chanA->control_read(); }
+ void ca_w(uint8_t data) { m_chanA->control_write(data); }
+ uint8_t cb_r() { return m_chanB->control_read(); }
+ void cb_w(uint8_t data) { m_chanB->control_write(data); }
// interrupt acknowledge
int m1_r();
@@ -580,7 +580,7 @@ public:
// construction/destruction
i8274_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- DECLARE_READ8_MEMBER( inta_r ) { return m1_r(); };
+ uint8_t inta_r() { return m1_r(); };
};
diff --git a/src/devices/machine/z80sio.cpp b/src/devices/machine/z80sio.cpp
index 8337aeafdf6..b985340e576 100644
--- a/src/devices/machine/z80sio.cpp
+++ b/src/devices/machine/z80sio.cpp
@@ -845,7 +845,7 @@ int i8274_new_device::m1_r()
//-------------------------------------------------
// cd_ba_r -
//-------------------------------------------------
-READ8_MEMBER( z80sio_device::cd_ba_r )
+uint8_t z80sio_device::cd_ba_r(offs_t offset)
{
int ba = BIT(offset, 0);
int cd = BIT(offset, 1);
@@ -858,7 +858,7 @@ READ8_MEMBER( z80sio_device::cd_ba_r )
//-------------------------------------------------
// cd_ba_w -
//-------------------------------------------------
-WRITE8_MEMBER( z80sio_device::cd_ba_w )
+void z80sio_device::cd_ba_w(offs_t offset, uint8_t data)
{
int ba = BIT(offset, 0);
int cd = BIT(offset, 1);
@@ -874,7 +874,7 @@ WRITE8_MEMBER( z80sio_device::cd_ba_w )
//-------------------------------------------------
// ba_cd_r -
//-------------------------------------------------
-READ8_MEMBER( z80sio_device::ba_cd_r )
+uint8_t z80sio_device::ba_cd_r(offs_t offset)
{
int ba = BIT(offset, 1);
int cd = BIT(offset, 0);
@@ -887,7 +887,7 @@ READ8_MEMBER( z80sio_device::ba_cd_r )
//-------------------------------------------------
// ba_cd_w -
//-------------------------------------------------
-WRITE8_MEMBER( z80sio_device::ba_cd_w )
+void z80sio_device::ba_cd_w(offs_t offset, uint8_t data)
{
int ba = BIT(offset, 1);
int cd = BIT(offset, 0);
diff --git a/src/devices/machine/z80sio.h b/src/devices/machine/z80sio.h
index eff587dc281..fabe6a20bfc 100644
--- a/src/devices/machine/z80sio.h
+++ b/src/devices/machine/z80sio.h
@@ -305,20 +305,20 @@ public:
template <typename T> void set_cputag(T &&tag) { m_hostcpu.set_tag(std::forward<T>(tag)); }
- DECLARE_READ8_MEMBER( cd_ba_r );
- DECLARE_WRITE8_MEMBER( cd_ba_w );
- DECLARE_READ8_MEMBER( ba_cd_r );
- DECLARE_WRITE8_MEMBER( ba_cd_w );
-
- DECLARE_READ8_MEMBER( da_r ) { return m_chanA->data_read(); }
- DECLARE_WRITE8_MEMBER( da_w ) { m_chanA->data_write(data); }
- DECLARE_READ8_MEMBER( db_r ) { return m_chanB->data_read(); }
- DECLARE_WRITE8_MEMBER( db_w ) { m_chanB->data_write(data); }
-
- DECLARE_READ8_MEMBER( ca_r ) { return m_chanA->control_read(); }
- DECLARE_WRITE8_MEMBER( ca_w ) { m_chanA->control_write(data); }
- DECLARE_READ8_MEMBER( cb_r ) { return m_chanB->control_read(); }
- DECLARE_WRITE8_MEMBER( cb_w ) { m_chanB->control_write(data); }
+ uint8_t cd_ba_r(offs_t offset);
+ void cd_ba_w(offs_t offset, uint8_t data);
+ uint8_t ba_cd_r(offs_t offset);
+ void ba_cd_w(offs_t offset, uint8_t data);
+
+ uint8_t da_r() { return m_chanA->data_read(); }
+ void da_w(uint8_t data) { m_chanA->data_write(data); }
+ uint8_t db_r() { return m_chanB->data_read(); }
+ void db_w(uint8_t data) { m_chanB->data_write(data); }
+
+ uint8_t ca_r() { return m_chanA->control_read(); }
+ void ca_w(uint8_t data) { m_chanA->control_write(data); }
+ uint8_t cb_r() { return m_chanB->control_read(); }
+ void cb_w(uint8_t data) { m_chanB->control_write(data); }
// interrupt acknowledge
virtual int m1_r();
diff --git a/src/devices/sound/c6280.cpp b/src/devices/sound/c6280.cpp
index 0e5873c86de..6c6f2410166 100644
--- a/src/devices/sound/c6280.cpp
+++ b/src/devices/sound/c6280.cpp
@@ -92,16 +92,16 @@ void c6280_device::sound_stream_update(sound_stream &stream, stream_sample_t **i
if((ch >= 4) && (m_channel[ch].m_noise_control & 0x80))
{
/* Noise mode */
- uint32_t step = m_noise_freq_tab[(m_channel[ch].m_noise_control & 0x1F) ^ 0x1F];
+ uint32_t step = (m_channel[ch].m_noise_control & 0x1F) ^ 0x1F;
for (int i = 0; i < samples; i += 1)
{
static int data = 0;
- m_channel[ch].m_noise_counter += step;
- if(m_channel[ch].m_noise_counter >= 0x800)
+ if(m_channel[ch].m_noise_counter <= 0)
{
+ m_channel[ch].m_noise_counter = step << 2;
data = (machine().rand() & 1) ? 0x1F : 0;
}
- m_channel[ch].m_noise_counter &= 0x7FF;
+ m_channel[ch].m_noise_counter--;
outputs[0][i] += (int16_t)(vll * (data - 16));
outputs[1][i] += (int16_t)(vlr * (data - 16));
}
@@ -118,28 +118,40 @@ void c6280_device::sound_stream_update(sound_stream &stream, stream_sample_t **i
}
else
{
- if ((m_lfo_control & 0x80) && (ch < 2))
+ if ((m_lfo_control & 3) && (ch < 2))
{
if (ch == 0) // CH 0 only, CH 1 is muted
{
/* Waveform mode with LFO */
- uint32_t step = m_channel[0].m_frequency;
- uint16_t lfo_step = m_channel[1].m_frequency;
+ uint16_t lfo_step = m_channel[1].m_frequency ? m_channel[1].m_frequency : 0x1000;
for (int i = 0; i < samples; i += 1)
{
- int offset, lfooffset;
- int16_t data, lfo_data;
- lfooffset = (m_channel[1].m_counter >> 12) & 0x1F;
- m_channel[1].m_counter += m_wave_freq_tab[(lfo_step * m_lfo_frequency) & 0xfff]; // TODO : multiply? verify this from real hardware.
- m_channel[1].m_counter &= 0x1FFFF;
- lfo_data = m_channel[1].m_waveform[lfooffset];
- if (m_lfo_control & 3)
+ int32_t step = m_channel[0].m_frequency ? m_channel[0].m_frequency : 0x1000;
+ if (m_lfo_control & 0x80) // reset LFO
+ {
+ m_channel[1].m_tick = lfo_step * m_lfo_frequency;
+ m_channel[1].m_counter = 0;
+ }
+ else
+ {
+ int lfooffset = m_channel[1].m_counter;
+ m_channel[1].m_tick--;
+ if (m_channel[1].m_tick <= 0)
+ {
+ m_channel[1].m_tick = lfo_step * m_lfo_frequency; // TODO : multiply? verify this from real hardware.
+ m_channel[1].m_counter = (m_channel[1].m_counter + 1) & 0x1f;
+ }
+ int16_t lfo_data = m_channel[1].m_waveform[lfooffset];
step += ((lfo_data - 16) << (((m_lfo_control & 3)-1)<<1)); // verified from patent, TODO : same in real hardware?
-
- offset = (m_channel[0].m_counter >> 12) & 0x1F;
- m_channel[0].m_counter += m_wave_freq_tab[step & 0xfff];
- m_channel[0].m_counter &= 0x1FFFF;
- data = m_channel[0].m_waveform[offset];
+ }
+ int offset = m_channel[0].m_counter;
+ m_channel[0].m_tick--;
+ if (m_channel[0].m_tick <= 0)
+ {
+ m_channel[0].m_tick = step;
+ m_channel[0].m_counter = (m_channel[0].m_counter + 1) & 0x1f;
+ }
+ int16_t data = m_channel[0].m_waveform[offset];
outputs[0][i] += (int16_t)(vll * (data - 16));
outputs[1][i] += (int16_t)(vlr * (data - 16));
}
@@ -148,15 +160,17 @@ void c6280_device::sound_stream_update(sound_stream &stream, stream_sample_t **i
else
{
/* Waveform mode */
- uint32_t step = m_wave_freq_tab[m_channel[ch].m_frequency];
+ uint32_t step = m_channel[ch].m_frequency ? m_channel[ch].m_frequency : 0x1000;
for (int i = 0; i < samples; i += 1)
{
- int offset;
- int16_t data;
- offset = (m_channel[ch].m_counter >> 12) & 0x1F;
- m_channel[ch].m_counter += step;
- m_channel[ch].m_counter &= 0x1FFFF;
- data = m_channel[ch].m_waveform[offset];
+ int offset = m_channel[ch].m_counter;
+ m_channel[ch].m_tick--;
+ if (m_channel[ch].m_tick <= 0)
+ {
+ m_channel[ch].m_tick = step;
+ m_channel[ch].m_counter = (m_channel[ch].m_counter + 1) & 0x1f;
+ }
+ int16_t data = m_channel[ch].m_waveform[offset];
outputs[0][i] += (int16_t)(vll * (data - 16));
outputs[1][i] += (int16_t)(vlr * (data - 16));
}
@@ -205,6 +219,10 @@ WRITE8_MEMBER( c6280_device::c6280_w )
{
chan->m_index = 0;
}
+ if(((chan->m_control & 0x80) == 0) && (data & 0x80))
+ {
+ chan->m_tick = chan->m_frequency;
+ }
chan->m_control = data;
break;
@@ -261,38 +279,9 @@ c6280_device::c6280_device(const machine_config &mconfig, const char *tag, devic
{
}
-//-------------------------------------------------
-// calculate_clocks - (re)calculate clock-derived
-// members
-//-------------------------------------------------
-
-void c6280_device::calculate_clocks()
-{
- int rate = clock() / 16;
-
- /* Make waveform frequency table */
- for (int i = 0; i < 4096; i += 1)
- {
- double step = (16 * 4096) / (i + 1);
- m_wave_freq_tab[(1 + i) & 0xFFF] = (uint32_t)step;
- }
-
- /* Make noise frequency table */
- for (int i = 0; i < 32; i += 1)
- {
- double step = (16 * 32) / (i+1);
- m_noise_freq_tab[i] = (uint32_t)step;
- }
-
- if (m_stream != nullptr)
- m_stream->set_sample_rate(rate);
- else
- m_stream = machine().sound().stream_alloc(*this, 0, 2, rate);
-}
-
void c6280_device::device_clock_changed()
{
- calculate_clocks();
+ m_stream->set_sample_rate(clock());
}
//-------------------------------------------------
@@ -311,7 +300,7 @@ void c6280_device::device_start()
m_lfo_control = 0;
memset(m_channel, 0, sizeof(channel) * 8);
- calculate_clocks();
+ m_stream = machine().sound().stream_alloc(*this, 0, 2, clock());
/* Make volume table */
/* PSG has 48dB volume range spread over 32 steps */
@@ -338,5 +327,6 @@ void c6280_device::device_start()
save_item(NAME(m_channel[chan].m_noise_control), chan);
save_item(NAME(m_channel[chan].m_noise_counter), chan);
save_item(NAME(m_channel[chan].m_counter), chan);
+ save_item(NAME(m_channel[chan].m_tick), chan);
}
}
diff --git a/src/devices/sound/c6280.h b/src/devices/sound/c6280.h
index 5b7f94bce7f..0cfdc34799b 100644
--- a/src/devices/sound/c6280.h
+++ b/src/devices/sound/c6280.h
@@ -8,6 +8,8 @@
class c6280_device : public device_t, public device_sound_interface
{
public:
+ static constexpr feature_type imperfect_features() { return feature::SOUND; } // Incorrect / Not verified noise / LFO output
+
c6280_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// write only
@@ -22,8 +24,6 @@ protected:
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
private:
- void calculate_clocks();
-
struct channel {
uint16_t m_frequency;
uint8_t m_control;
@@ -32,8 +32,9 @@ private:
uint8_t m_index;
int16_t m_dda;
uint8_t m_noise_control;
- uint32_t m_noise_counter;
+ int32_t m_noise_counter;
uint32_t m_counter;
+ int32_t m_tick;
};
// internal state
@@ -44,8 +45,6 @@ private:
uint8_t m_lfo_control;
channel m_channel[8];
int16_t m_volume_table[32];
- uint32_t m_noise_freq_tab[32];
- uint32_t m_wave_freq_tab[4096];
};
DECLARE_DEVICE_TYPE(C6280, c6280_device)
diff --git a/src/devices/sound/es8712.cpp b/src/devices/sound/es8712.cpp
index e0b2699edd0..00ec7fe90d3 100644
--- a/src/devices/sound/es8712.cpp
+++ b/src/devices/sound/es8712.cpp
@@ -228,7 +228,7 @@ WRITE_LINE_MEMBER(es8712_device::msm_int)
}
else
{
- m_adpcm_select->write_ab(read_byte(m_base_offset));
+ m_adpcm_select->ab_w(read_byte(m_base_offset));
m_adpcm_select->select_w(m_adpcm_trigger);
m_adpcm_trigger ^= 1;
if (m_adpcm_trigger == 0)
diff --git a/src/devices/sound/meg.cpp b/src/devices/sound/meg.cpp
new file mode 100644
index 00000000000..a1f9d67b293
--- /dev/null
+++ b/src/devices/sound/meg.cpp
@@ -0,0 +1,384 @@
+// license:BSD-3-Clause
+// copyright-holders:Olivier Galibert
+
+// Yamaha MEG - Multiple effects generator
+//
+// Audio dsp dedicated to effects generation
+
+#include "emu.h"
+#include "debugger.h"
+#include "meg.h"
+
+DEFINE_DEVICE_TYPE(MEG, meg_device, "meg", "Multiple Effects Generator (HD62098 / XM309A00)")
+DEFINE_DEVICE_TYPE(MEGEMB, meg_embedded_device, "megemb", "Multiple Effects Generator (embedded)")
+
+void meg_base_device::prg_map(address_map &map)
+{
+ map(0, m_prg_size - 1).ram();
+}
+
+void meg_base_device::fp_map(address_map &map)
+{
+ map(0, m_prg_size - 1).ram();
+}
+
+void meg_base_device::offsets_map(address_map &map)
+{
+ map(0, 0x7f).ram();
+}
+
+meg_base_device::meg_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, u32 prg_size) :
+ cpu_device(mconfig, type, tag, owner, clock),
+ m_program_config("program", ENDIANNESS_BIG, 64, prg_size > 256 ? 9 : 8, -3, address_map_constructor(FUNC(meg_base_device::prg_map), this)),
+ m_fp_config("fp", ENDIANNESS_BIG, 16, prg_size > 256 ? 9 : 8, -1, address_map_constructor(FUNC(meg_base_device::fp_map), this)),
+ m_offsets_config("offsets", ENDIANNESS_BIG, 16, prg_size > 256 ? 7 : 7, -1, address_map_constructor(FUNC(meg_base_device::offsets_map), this)),
+ m_prg_size(prg_size)
+{
+}
+
+
+void meg_base_device::prg_w(u16 address, u64 opcode)
+{
+ m_program->write_qword(address, opcode);
+}
+
+void meg_base_device::fp_w(u16 address, u16 value)
+{
+ m_fp->write_word(address, value);
+}
+
+void meg_base_device::offset_w(u16 address, u16 value)
+{
+ m_offsets->write_word(address, value);
+}
+
+void meg_base_device::lfo_w(u8 reg, u16 value)
+{
+ m_lfo[reg] = value;
+
+ static const int dt[8] = { 0, 32, 64, 128, 256, 512, 1024, 2048 };
+ static const int sh[8] = { 0, 0, 1, 2, 3, 4, 5, 6 };
+
+ int scale = (value >> 5) & 7;
+ int step = ((value & 31) << sh[scale]) + dt[scale];
+ logerror("lfo_w %02x freq=%5.2f phase=%6.4f\n", reg, step * 44100.0/4194304, (value >> 8)/256.0);
+}
+
+void meg_base_device::map_w(u8 reg, u16 value)
+{
+ m_map[reg] = value;
+}
+
+u64 meg_base_device::prg_r(u16 address) const
+{
+ return m_program->read_qword(address);
+}
+
+u16 meg_base_device::fp_r(u16 address) const
+{
+ return m_fp->read_word(address);
+}
+
+u16 meg_base_device::offset_r(u16 address) const
+{
+ return m_offsets->read_word(address);
+}
+
+u16 meg_base_device::lfo_r(u8 reg) const
+{
+ return m_lfo[reg];
+}
+
+u16 meg_base_device::map_r(u8 reg) const
+{
+ return m_map[reg];
+}
+
+
+void meg_base_device::device_start()
+{
+ m_program = &space(AS_PROGRAM);
+ m_fp = &space(AS_FP);
+ m_offsets = &space(AS_OFFSETS);
+
+ state_add(STATE_GENPC, "GENPC", m_pc).noshow();
+ state_add(STATE_GENPCBASE, "CURPC", m_pc).noshow();
+ state_add(0, "PC", m_pc);
+
+ set_icountptr(m_icount);
+
+ save_item(NAME(m_lfo));
+ save_item(NAME(m_map));
+ save_item(NAME(m_pc));
+}
+
+void meg_base_device::device_reset()
+{
+ memset(m_lfo, 0, sizeof(m_lfo));
+ memset(m_map, 0, sizeof(m_map));
+ m_pc = 0;
+}
+
+uint32_t meg_base_device::execute_min_cycles() const
+{
+ return 1;
+}
+
+uint32_t meg_base_device::execute_max_cycles() const
+{
+ return 1;
+}
+
+uint32_t meg_base_device::execute_input_lines() const
+{
+ return 0;
+}
+
+void meg_base_device::execute_run()
+{
+ if(machine().debug_flags & DEBUG_FLAG_ENABLED)
+ debugger_instruction_hook(m_pc);
+ m_icount = 0;
+}
+
+device_memory_interface::space_config_vector meg_base_device::memory_space_config() const
+{
+ return space_config_vector {
+ std::make_pair(AS_PROGRAM, &m_program_config),
+ std::make_pair(AS_FP, &m_fp_config),
+ std::make_pair(AS_OFFSETS, &m_offsets_config)
+ };
+}
+
+void meg_base_device::state_import(const device_state_entry &entry)
+{
+}
+
+void meg_base_device::state_export(const device_state_entry &entry)
+{
+}
+
+void meg_base_device::state_string_export(const device_state_entry &entry, std::string &str) const
+{
+}
+
+std::unique_ptr<util::disasm_interface> meg_base_device::create_disassembler()
+{
+ return std::make_unique<meg_disassembler>(this);
+}
+
+meg_embedded_device::meg_embedded_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ meg_base_device(mconfig, MEGEMB, tag, owner, clock, 384)
+{
+}
+
+meg_device::meg_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ meg_base_device(mconfig, MEG, tag, owner, clock, 256)
+{
+}
+
+
+// vl70:
+// 6d1e: write 1, r0l
+// 6d26: write 2, r0l
+// 6d2e: read 2
+// 6d36: write 3, r0l
+// 6d3e: write reg 4:r0h, r0l
+// 6d52: write reg 5:r0h, r0l-1
+// 6d68: write 7, r0l
+// 6d70: write reg 8:r0h, r0l
+// 6d84: write reg 9:r0h, r0l
+// 6dac: write a, r0l
+// 6db4: write reg cd:r1l, r0
+// 6dd4: write reg e:r0h, r0l
+// 6dee: write reg f:r0h, r0l
+// 6e08: read 10,11
+// 6e1c: write reg 1213:r1l, r0
+// 6e3c: write reg 14:r0h, r0l
+// 6e50: write 15, r0l
+// 6e58: write reg 16:r0h, r0l
+// 6e6c: write reg 17:r0h, r0l
+// 6e80: write reg 18:e0h, e0l
+
+void meg_device::map(address_map &map)
+{
+ map(0x00, 0x00).w(FUNC(meg_device::select_w));
+ map(0x01, 0x01).w(FUNC(meg_device::s1_w));
+ map(0x02, 0x02).rw(FUNC(meg_device::s2_r), FUNC(meg_device::s2_w));
+ map(0x03, 0x03).w(FUNC(meg_device::s3_w));
+ map(0x04, 0x04).w(FUNC(meg_device::s4_w));
+ map(0x05, 0x05).w(FUNC(meg_device::s5_w));
+ map(0x07, 0x07).w(FUNC(meg_device::s7_w));
+ map(0x08, 0x08).w(FUNC(meg_device::s8_w));
+ map(0x09, 0x09).w(FUNC(meg_device::s9_w));
+ map(0x0a, 0x0a).w(FUNC(meg_device::sa_w));
+ map(0x0c, 0x0c).w(FUNC(meg_device::fph_w));
+ map(0x0d, 0x0d).w(FUNC(meg_device::fpl_w));
+ map(0x0e, 0x0e).w(FUNC(meg_device::se_w));
+ map(0x0f, 0x0f).w(FUNC(meg_device::sf_w));
+ map(0x10, 0x10).r(FUNC(meg_device::s10_r));
+ map(0x11, 0x11).r(FUNC(meg_device::s11_r));
+ map(0x12, 0x12).w(FUNC(meg_device::offseth_w));
+ map(0x13, 0x13).w(FUNC(meg_device::offsetl_w));
+ map(0x14, 0x14).w(FUNC(meg_device::s14_w));
+ map(0x15, 0x15).w(FUNC(meg_device::s15_w));
+ map(0x16, 0x16).w(FUNC(meg_device::s16_w));
+ map(0x17, 0x17).w(FUNC(meg_device::s17_w));
+ map(0x18, 0x18).w(FUNC(meg_device::s18_w));
+}
+
+u8 meg_device::s2_r()
+{
+ logerror("read r2 %s\n", machine().describe_context());
+ return 0x00;
+}
+
+void meg_device::select_w(u8 data)
+{
+ m_reg = data;
+}
+
+void meg_device::s1_w(u8 data)
+{
+ logerror("r1 %02x %s\n", data, machine().describe_context());
+}
+
+void meg_device::s2_w(u8 data)
+{
+ logerror("r2 %02x %s\n", data, machine().describe_context());
+}
+
+void meg_device::s3_w(u8 data)
+{
+ logerror("r3 %02x %s\n", data, machine().describe_context());
+}
+
+void meg_device::s4_w(u8 data)
+{
+ if(m_r4[m_reg] != data) {
+ m_r4[m_reg] = data;
+ logerror("r4[%02x] = %02x %s\n", m_reg, data, machine().describe_context());
+ }
+}
+
+void meg_device::s5_w(u8 data)
+{
+ if(m_r5[m_reg] != data) {
+ m_r5[m_reg] = data;
+ logerror("r5[%02x] = %02x %s\n", m_reg, data, machine().describe_context());
+ }
+}
+
+void meg_device::s7_w(u8 data)
+{
+ logerror("r7 %02x %s\n", data, machine().describe_context());
+}
+
+void meg_device::s8_w(u8 data)
+{
+ if(m_r8[m_reg] != data) {
+ m_r8[m_reg] = data;
+ logerror("r8[%02x] = %02x %s\n", m_reg, data, machine().describe_context());
+ }
+}
+
+
+void meg_device::s9_w(u8 data)
+{
+ if(m_r9[m_reg] != data) {
+ m_r9[m_reg] = data;
+ logerror("r9[%02x] = %02x %s\n", m_reg, data, machine().describe_context());
+ }
+}
+
+void meg_device::sa_w(u8 data)
+{
+ logerror("ra %02x %s\n", data, machine().describe_context());
+}
+
+void meg_device::fph_w(u8 data)
+{
+ fp_w(m_reg, (fp_r(m_reg) & 0x00ff) | (data << 8));
+}
+
+
+void meg_device::fpl_w(u8 data)
+{
+ fp_w(m_reg, (fp_r(m_reg) & 0xff00) | data);
+}
+
+void meg_device::se_w(u8 data)
+{
+ if(m_re[m_reg] != data) {
+ m_re[m_reg] = data;
+ logerror("re[%02x] = %02x %s\n", m_reg, data, machine().describe_context());
+ }
+}
+
+
+void meg_device::sf_w(u8 data)
+{
+ if(m_rf[m_reg] != data) {
+ m_rf[m_reg] = data;
+ logerror("rf[%02x] = %02x %s\n", m_reg, data, machine().describe_context());
+ }
+}
+
+u8 meg_device::s10_r()
+{
+ logerror("read r10 %s\n", machine().describe_context());
+ return 0x00;
+}
+
+u8 meg_device::s11_r()
+{
+ logerror("read r11 %s\n", machine().describe_context());
+ return 0x00;
+}
+
+void meg_device::offseth_w(u8 data)
+{
+ offset_w(m_reg, (offset_r(m_reg) & 0x00ff) | (data << 8));
+}
+
+void meg_device::offsetl_w(u8 data)
+{
+ offset_w(m_reg, (offset_r(m_reg) & 0xff00) | data);
+}
+
+void meg_device::s14_w(u8 data)
+{
+ if(m_r14[m_reg] != data) {
+ m_r14[m_reg] = data;
+ logerror("r14[%02x] = %02x %s\n", m_reg, data, machine().describe_context());
+ }
+}
+
+void meg_device::s15_w(u8 data)
+{
+ logerror("r15 %02x %s\n", data, machine().describe_context());
+}
+
+void meg_device::s16_w(u8 data)
+{
+ if(m_r16[m_reg] != data) {
+ m_r16[m_reg] = data;
+ logerror("r16[%02x] = %02x %s\n", m_reg, data, machine().describe_context());
+ }
+}
+
+void meg_device::s17_w(u8 data)
+{
+ if(m_r17[m_reg] != data) {
+ m_r17[m_reg] = data;
+ logerror("r17[%02x] = %02x %s\n", m_reg, data, machine().describe_context());
+ }
+}
+
+void meg_device::s18_w(u8 data)
+{
+ if(m_r18[m_reg] != data) {
+ m_r18[m_reg] = data;
+ logerror("r18[%02x] = %02x %s\n", m_reg, data, machine().describe_context());
+ }
+}
diff --git a/src/devices/sound/meg.h b/src/devices/sound/meg.h
new file mode 100644
index 00000000000..e9ff44f990a
--- /dev/null
+++ b/src/devices/sound/meg.h
@@ -0,0 +1,122 @@
+// license:BSD-3-Clause
+// copyright-holders:Olivier Galibert
+
+// Yamaha MEG - Multiple effects generator
+//
+// Audio dsp dedicated to effects generation
+
+#ifndef DEVICES_SOUND_MEG_H
+#define DEVICES_SOUND_MEG_H
+
+#pragma once
+
+#include "megd.h"
+
+
+class meg_base_device : public cpu_device, public meg_disassembler::info
+{
+public:
+ enum {
+ AS_FP = 1,
+ AS_OFFSETS = 2
+ };
+
+ meg_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, u32 prg_size);
+
+ void prg_w(u16 address, u64 opcode);
+ void fp_w(u16 address, u16 value);
+ void offset_w(u16 address, u16 value);
+ void lfo_w(u8 reg, u16 value);
+ void map_w(u8 reg, u16 value);
+ u64 prg_r(u16 address) const;
+ virtual u16 fp_r(u16 address) const override;
+ virtual u16 offset_r(u16 address) const override;
+ u16 lfo_r(u8 reg) const;
+ u16 map_r(u8 reg) const;
+
+protected:
+ virtual void device_start() override;
+ virtual void device_reset() override;
+ virtual uint32_t execute_min_cycles() const override;
+ virtual uint32_t execute_max_cycles() const override;
+ virtual uint32_t execute_input_lines() const override;
+ virtual void execute_run() override;
+ virtual space_config_vector memory_space_config() const override;
+ virtual void state_import(const device_state_entry &entry) override;
+ virtual void state_export(const device_state_entry &entry) override;
+ virtual void state_string_export(const device_state_entry &entry, std::string &str) const override;
+ virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
+
+private:
+ address_space_config m_program_config, m_fp_config, m_offsets_config;
+ address_space *m_program, *m_fp, *m_offsets;
+
+ u32 m_prg_size, m_pc;
+ int m_icount;
+
+ u16 m_lfo[0x18], m_map[8];
+
+ void prg_map(address_map &map);
+ void fp_map(address_map &map);
+ void offsets_map(address_map &map);
+};
+
+class meg_embedded_device : public meg_base_device
+{
+public:
+ meg_embedded_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 44100*384);
+};
+
+class meg_device : public meg_base_device
+{
+public:
+ meg_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 44100*256);
+ void map(address_map &map);
+
+private:
+ u8 m_r4[256];
+ u8 m_r5[256];
+ u8 m_r8[256];
+ u8 m_r9[256];
+ u8 m_re[256];
+ u8 m_rf[256];
+ u8 m_r12[256];
+ u8 m_r13[256];
+ u8 m_r14[256];
+ u8 m_r16[256];
+ u8 m_r17[256];
+ u8 m_r18[256];
+ u8 m_reg;
+ u8 s2_r();
+ u8 s10_r();
+ u8 s11_r();
+ void select_w(u8 reg);
+ void s1_w(u8 data);
+ void s2_w(u8 data);
+ void s3_w(u8 data);
+ void s4_w(u8 data);
+ void s5_w(u8 data);
+ void s7_w(u8 data);
+ void s8_w(u8 data);
+ void s9_w(u8 data);
+ void sa_w(u8 data);
+ void fph_w(u8 data);
+ void fpl_w(u8 data);
+ void se_w(u8 data);
+ void sf_w(u8 data);
+ void s10_w(u8 data);
+ void s11_w(u8 data);
+ void offseth_w(u8 data);
+ void offsetl_w(u8 data);
+ void s14_w(u8 data);
+ void s15_w(u8 data);
+ void s16_w(u8 data);
+ void s17_w(u8 data);
+ void s18_w(u8 data);
+};
+
+
+DECLARE_DEVICE_TYPE(MEG, meg_device)
+DECLARE_DEVICE_TYPE(MEGEMB, meg_embedded_device)
+
+#endif
diff --git a/src/devices/sound/megd.cpp b/src/devices/sound/megd.cpp
new file mode 100644
index 00000000000..2790a7ca69c
--- /dev/null
+++ b/src/devices/sound/megd.cpp
@@ -0,0 +1,118 @@
+// license:BSD-3-Clause
+// copyright-holders:Olivier Galibert
+
+// Yamaha MEG - Multiple effects generator
+//
+// Audio dsp dedicated to effects generation
+//
+// Disassembler
+
+#include "emu.h"
+#include "megd.h"
+
+meg_disassembler::meg_disassembler(info *inf) : m_info(inf)
+{
+}
+
+u32 meg_disassembler::opcode_alignment() const
+{
+ return 1;
+}
+
+std::string meg_disassembler::gfp(offs_t address) const
+{
+ if(!m_info)
+ return util::string_format("fp%03x", address);
+ s16 fp = m_info->fp_r(address);
+ return util::string_format("%g", fp / 16384.0);
+}
+
+std::string meg_disassembler::goffset(offs_t address) const
+{
+ return m_info ? util::string_format("%x", m_info->offset_r(address)) : util::string_format("of%02x", address);
+}
+
+u32 meg_disassembler::b(u64 opc, u32 start, u32 count)
+{
+ return (opc >> start) & ((1 << count) - 1);
+}
+
+void meg_disassembler::append(std::string &r, std::string e)
+{
+ if(r != "")
+ r += " ; ";
+ r += e;
+}
+
+// 33333333 33333333 22222222 22222222 11111111 11111111 00000000 00000000
+// fedcba98 76543210 fedcba98 76543210 fedcba98 76543210 fedcba98 76543210
+
+// 66665555 55555544 44444444 33333333 33222222 22221111 11111100 00000000
+// 32109876 54321098 76543210 98765432 10987654 32109876 54321098 76543210
+// XLB----- -rrrrrrr r--mmmmm m-MM---- -P-----* -----Arr rrrrrrmm mmmm----
+
+// m = low is read port, high is write port, memory register
+// r = low is read port, high is high port, rotating register
+
+// X = used for lo-fi variation only
+// L = lfo read
+// * = compute mul
+// A = mul input = m or r
+// P = P sent for register write
+// B = register write to mbuf
+// M = memory mode, none/read/write/read+1
+
+offs_t meg_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer &params)
+{
+ u64 opc = opcodes.r64(pc);
+
+ std::string r;
+
+ r = util::string_format("[m%02x]", b(opc, 39, 6));
+
+ if(b(opc, 62, 1))
+ append(r, "lfo");
+
+ if(b(opc, 23, 1))
+ switch(b(opc, 24, 2)) {
+ case 0:
+ if(b(opc, 18, 1))
+ append(r, util::string_format("p += %s*m%02x", gfp(pc), b(opc, 4, 6)));
+ else
+ append(r, util::string_format("p += %s*r%02x", gfp(pc), b(opc, 10, 8)));
+ break;
+ case 1:
+ append(r, util::string_format("p = %s*(r%02x+m%02x)", gfp(pc), b(opc, 10, 8), b(opc, 4, 6)));
+ break;
+ case 2:
+ append(r, util::string_format("p ?= %s*(r%02x+m%02x)", gfp(pc), b(opc, 10, 8), b(opc, 4, 6)));
+ break;
+ case 3:
+ if(b(opc, 18, 1))
+ append(r, util::string_format("p = %s*m%02x", gfp(pc), b(opc, 4, 6)));
+ else
+ append(r, util::string_format("p = %s*r%02x", gfp(pc), b(opc, 10, 8)));
+ break;
+ }
+
+ if(b(opc, 30, 1)) {
+ if(b(opc, 61, 1))
+ append(r, "mb = p");
+ else if(b(opc, 46, 1) == 1)
+ append(r, util::string_format("m%02x = p", b(opc, 39, 6)));
+ else
+ append(r, util::string_format("r%02x = p", b(opc, 47, 8)));
+ }
+
+ u32 memmode = b(opc, 36, 2);
+ if(memmode) {
+ static const char *modes[4] = { nullptr, "w", "r", "rw" };
+
+ append(r, util::string_format("mem_%s %x +%s", modes[memmode], b(opc, 33, 3), goffset(pc/3)));
+ r += util::string_format("-> m%02x", b(opcodes.r64(pc+2), 39, 6));
+ }
+
+ stream << r;
+
+ return 1 | SUPPORTED;
+}
diff --git a/src/devices/sound/megd.h b/src/devices/sound/megd.h
new file mode 100644
index 00000000000..59a13aa0ea4
--- /dev/null
+++ b/src/devices/sound/megd.h
@@ -0,0 +1,39 @@
+// license:BSD-3-Clause
+// copyright-holders:Olivier Galibert
+
+// Yamaha MEG - Multiple effects generator
+//
+// Audio dsp dedicated to effects generation
+//
+// Disassembler
+
+#ifndef DEVICES_SOUND_MEGD_H
+#define DEVICES_SOUND_MEGD_H
+
+#pragma once
+
+class meg_disassembler : public util::disasm_interface
+{
+public:
+ class info {
+ public:
+ virtual u16 fp_r(u16 address) const = 0;
+ virtual u16 offset_r(u16 address) const = 0;
+ };
+
+ meg_disassembler(info *inf = nullptr);
+
+ virtual u32 opcode_alignment() const override;
+ virtual offs_t disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer &params) override;
+
+private:
+ info *m_info;
+
+ std::string gfp(offs_t address) const;
+ std::string goffset(offs_t address) const;
+
+ static inline u32 b(u64 opc, u32 start, u32 count);
+ static inline void append(std::string &r, std::string e);
+};
+
+#endif
diff --git a/src/devices/sound/namco_163.cpp b/src/devices/sound/namco_163.cpp
new file mode 100644
index 00000000000..6fdde572537
--- /dev/null
+++ b/src/devices/sound/namco_163.cpp
@@ -0,0 +1,176 @@
+// license:BSD-3-Clause
+// copyright-holders:cam900
+/***************************************************************************
+
+ Namco 163 internal sound emulation by cam900
+ 4 bit wavetable (variable length), 1 ~ 8 channel
+ Reference : https://wiki.nesdev.com/w/index.php/Namco_163_audio
+
+***************************************************************************/
+
+#include "emu.h"
+#include "namco_163.h"
+
+
+DEFINE_DEVICE_TYPE(NAMCO_163, namco_163_sound_device, "namco_163_sound", "Namco 163 (Sound)")
+
+namco_163_sound_device::namco_163_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, NAMCO_163, tag, owner, clock)
+ , device_sound_interface(mconfig, *this)
+ , m_ram(nullptr)
+ , m_reg_addr(0x78)
+ , m_addr(0)
+ , m_inc(false)
+ , m_disable(false)
+ , m_stream(nullptr)
+{
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void namco_163_sound_device::device_start()
+{
+ m_ram = make_unique_clear<u8[]>(0x80);
+ m_stream = machine().sound().stream_alloc(*this, 0, 1, clock() / 15);
+
+ save_pointer(NAME(m_ram), 0x80);
+ save_item(NAME(m_reg_addr));
+ save_item(NAME(m_addr));
+ save_item(NAME(m_inc));
+ save_item(NAME(m_disable));
+}
+
+
+//-------------------------------------------------
+// device_clock_changed - called if the clock
+// changes
+//-------------------------------------------------
+
+void namco_163_sound_device::device_clock_changed()
+{
+ m_stream->set_sample_rate(clock() / 15);
+}
+
+
+inline s8 namco_163_sound_device::get_sample(u16 addr)
+{
+ return ((m_ram[(addr >> 1) & 0x7f] >> ((addr & 1) << 2)) & 0xf) - 8;
+}
+
+
+WRITE_LINE_MEMBER(namco_163_sound_device::disable_w)
+{
+ m_disable = state;
+}
+
+
+/********************************************************************************/
+
+/*
+ Register Map (in RAM)
+
+ 40 ffff ffff Channel 0 Frequency bits 0 - 7
+ 41 pppp pppp Channel 0 Phase bits 0 - 7
+ 42 ffff ffff Channel 0 Frequency bits 8 - 15
+ 43 pppp pppp Channel 0 Phase bits 8 - 15
+ 44 ---- --ff Channel 0 Frequency bits 16 - 17
+ llll ll-- Channel 0 Waveform Length (256 - (l * 4)) 4 bit samples
+ 45 pppp pppp Channel 0 Phase bits 16 - 23
+ 46 oooo oooo Channel 0 Waveform Offset at 4 bit samples
+ 47 ---- cccc Channel 0 Volume
+
+ 48 ffff ffff Channel 1 Frequency bits 0 - 7
+ 49 pppp pppp Channel 1 Phase bits 0 - 7
+ 4a ffff ffff Channel 1 Frequency bits 8 - 15
+ 4b pppp pppp Channel 1 Phase bits 8 - 15
+ 4c ---- --ff Channel 1 Frequency bits 16 - 17
+ llll ll-- Channel 1 Waveform Length (256 - (l * 4)) 4 bit samples
+ 4d pppp pppp Channel 1 Phase bits 16 - 23
+ 4e oooo oooo Channel 1 Waveform Offset at 4 bit samples
+ 4f ---- cccc Channel 1 Volume
+
+ .
+ .
+ .
+
+ 78 ffff ffff Channel 7 Frequency bits 0 - 7
+ 79 pppp pppp Channel 7 Phase bits 0 - 7
+ 7a ffff ffff Channel 7 Frequency bits 8 - 15
+ 7b pppp pppp Channel 7 Phase bits 8 - 15
+ 7c ---- --ff Channel 7 Frequency bits 16 - 17
+ llll ll-- Channel 7 Waveform Length (256 - (l * 4)) 4 bit samples
+ 7d pppp pppp Channel 7 Phase bits 16 - 23
+ 7e oooo oooo Channel 7 Waveform Offset at 4 bit samples
+ 7f ---- cccc Channel 7 Volume
+ -ccc ---- Enable channels
+ -000 ---- Enable channel 7 only
+ -001 ---- Enable channel 7, 6
+ -010 ---- Enable channel 7, 6, 5
+
+ .
+ .
+ .
+
+ -111 ---- Enable all channels
+*/
+
+void namco_163_sound_device::addr_w(u8 data)
+{
+ m_inc = data & 0x80;
+ m_addr = data & 0x7f;
+}
+
+
+void namco_163_sound_device::data_w(u8 data)
+{
+ m_stream->update();
+ m_ram[m_addr] = data;
+ if (m_inc)
+ m_addr = (m_addr + 1) & 0x7f;
+}
+
+
+u8 namco_163_sound_device::data_r()
+{
+ u8 val = m_ram[m_addr];
+ if (m_inc)
+ m_addr = (m_addr + 1) & 0x7f;
+
+ return val;
+}
+
+
+void namco_163_sound_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
+{
+ std::fill_n(&outputs[0][0], samples, 0);
+
+ if (m_disable)
+ return;
+
+ // Slightly noisy but closer to real hardware behavior
+ for (int s = 0; s < samples; s++)
+ {
+ u32 phase = (m_ram[m_reg_addr + 5] << 16) | (m_ram[m_reg_addr + 3] << 8) | m_ram[m_reg_addr + 1];
+ const u32 freq = ((m_ram[m_reg_addr + 4] & 0x3) << 16) | (m_ram[m_reg_addr + 2] << 8) | m_ram[m_reg_addr + 0];
+ const u16 length = 256 - (m_ram[m_reg_addr + 4] & 0xfc);
+ const u16 offset = m_ram[m_reg_addr + 6];
+ const u8 vol = m_ram[m_reg_addr + 7] & 0xf;
+
+ phase = (phase + freq) % (length << 16);
+ s32 output = get_sample((phase >> 16) + offset) * vol;
+
+ m_ram[m_reg_addr + 1] = phase & 0xff;
+ m_ram[m_reg_addr + 3] = phase >> 8;
+ m_ram[m_reg_addr + 5] = phase >> 16;
+
+ m_reg_addr += 8;
+ if (m_reg_addr >= 0x80)
+ {
+ m_reg_addr = 0x78 - ((m_ram[0x7f] & 0x70) >> 1);
+ }
+ outputs[0][s] = (output << 8);
+ }
+}
diff --git a/src/devices/sound/namco_163.h b/src/devices/sound/namco_163.h
new file mode 100644
index 00000000000..1256884242b
--- /dev/null
+++ b/src/devices/sound/namco_163.h
@@ -0,0 +1,42 @@
+// license:BSD-3-Clause
+// copyright-holders:cam900
+#ifndef MAME_SOUND_NAMCO_163_H
+#define MAME_SOUND_NAMCO_163_H
+
+#pragma once
+
+
+class namco_163_sound_device : public device_t,
+ public device_sound_interface
+{
+public:
+ namco_163_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ DECLARE_WRITE_LINE_MEMBER(disable_w);
+
+ void addr_w(u8 data);
+ void data_w(u8 data);
+ u8 data_r();
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_clock_changed() override;
+
+ // global sound parameters
+ std::unique_ptr<u8[]> m_ram;
+ u8 m_reg_addr;
+ u8 m_addr;
+ bool m_inc;
+ bool m_disable;
+ sound_stream *m_stream;
+
+ // internals
+ inline s8 get_sample(u16 addr);
+
+ virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
+};
+
+DECLARE_DEVICE_TYPE(NAMCO_163, namco_163_sound_device)
+
+#endif // MAME_SOUND_NAMCO_163_H
diff --git a/src/devices/sound/swp30.cpp b/src/devices/sound/swp30.cpp
index 56870df5ec7..f43df8084f9 100644
--- a/src/devices/sound/swp30.cpp
+++ b/src/devices/sound/swp30.cpp
@@ -150,8 +150,15 @@ DEFINE_DEVICE_TYPE(SWP30, swp30_device, "swp30", "Yamaha SWP30 sound chip")
swp30_device::swp30_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, SWP30, tag, owner, clock),
device_sound_interface(mconfig, *this),
- device_rom_interface(mconfig, *this, 25+2, ENDIANNESS_LITTLE, 32)
+ device_rom_interface(mconfig, *this, 25+2, ENDIANNESS_LITTLE, 32),
+ m_meg(*this, "meg")
{
+ (void)m_map;
+}
+
+void swp30_device::device_add_mconfig(machine_config &config)
+{
+ MEGEMB(config, m_meg);
}
void swp30_device::device_start()
@@ -160,7 +167,7 @@ void swp30_device::device_start()
// Attenuantion for panning is 4.4 floating point. That means 0
// to -96.3dB. Since it's a nice range, we assume it's the same
- // for other attenuation values. Computed value is is 1.16
+ // for other attenuation values. Computed value is 1.16
// format, to avoid overflow
for(int i=0; i<256; i++)
@@ -328,8 +335,8 @@ void swp30_device::map(address_map &map)
rchan(map, 0x27).rw(FUNC(swp30_device::prg_fp_r<3>), FUNC(swp30_device::prg_fp_w<3>));
rchan(map, 0x29).rw(FUNC(swp30_device::prg_fp_r<4>), FUNC(swp30_device::prg_fp_w<4>));
rchan(map, 0x2b).rw(FUNC(swp30_device::prg_fp_r<5>), FUNC(swp30_device::prg_fp_w<5>));
- rchan(map, 0x30).rw(FUNC(swp30_device::prg_int_r<0>), FUNC(swp30_device::prg_int_w<0>));
- rchan(map, 0x31).rw(FUNC(swp30_device::prg_int_r<1>), FUNC(swp30_device::prg_int_w<1>));
+ rchan(map, 0x30).rw(FUNC(swp30_device::prg_off_r<0>), FUNC(swp30_device::prg_off_w<0>));
+ rchan(map, 0x31).rw(FUNC(swp30_device::prg_off_r<1>), FUNC(swp30_device::prg_off_w<1>));
rchan(map, 0x3e).rw(FUNC(swp30_device::prg_lfo_r<0>), FUNC(swp30_device::prg_lfo_w<0>));
rchan(map, 0x3f).rw(FUNC(swp30_device::prg_lfo_r<1>), FUNC(swp30_device::prg_lfo_w<1>));
}
@@ -381,14 +388,14 @@ void swp30_device::prg_address_w(u16 data)
template<int sel> u16 swp30_device::prg_r()
{
constexpr offs_t shift = 48-16*sel;
- return m_program[m_program_address] >> shift;
+ return m_meg->prg_r(m_program_address) >> shift;
}
template<int sel> void swp30_device::prg_w(u16 data)
{
constexpr offs_t shift = 48-16*sel;
constexpr u64 mask = ~(u64(0xffff) << shift);
- m_program[m_program_address] = (m_program[m_program_address] & mask) | (u64(data) << shift);
+ m_meg->prg_w(m_program_address, (m_meg->prg_r(m_program_address) & mask) | (u64(data) << shift));
if(sel == 3) {
if(0)
@@ -402,14 +409,12 @@ template<int sel> void swp30_device::prg_w(u16 data)
template<int sel> u16 swp30_device::map_r()
{
- return m_map[sel];
+ return m_meg->map_r(sel);
}
template<int sel> void swp30_device::map_w(u16 data)
{
- m_map[sel] = data;
- if(0)
- logerror("map %d: type=%02x offset=%05x size=%05x\n", sel, data >> 11, (data & 0xff) << 10, 0x400 << ((data >> 8) & 7));
+ m_meg->map_w(sel, data);
}
@@ -656,54 +661,36 @@ void swp30_device::address_l_w(offs_t offset, u16 data)
}
-// MEG registers (Multiple Effects Generator)
+// MEG registers forwarding
template<int sel> u16 swp30_device::prg_fp_r(offs_t offset)
{
- offs_t adr = (offset >> 6)*6 + sel;
- return m_program_pfp[adr];
+ return m_meg->fp_r((offset >> 6)*6 + sel);
}
template<int sel> void swp30_device::prg_fp_w(offs_t offset, u16 data)
{
- offs_t adr = (offset >> 6)*6 + sel;
- m_program_pfp[adr] = data;
- if(0)
- logerror("prg_fp_w %03x, %04x\n", adr, data);
+ m_meg->fp_w((offset >> 6)*6 + sel, data);
}
-template<int sel> u16 swp30_device::prg_int_r(offs_t offset)
+template<int sel> u16 swp30_device::prg_off_r(offs_t offset)
{
- offs_t adr = (offset >> 6)*2 + sel;
- return m_program_pint[adr];
+ return m_meg->offset_r((offset >> 6)*2 + sel);
}
-template<int sel> void swp30_device::prg_int_w(offs_t offset, u16 data)
+template<int sel> void swp30_device::prg_off_w(offs_t offset, u16 data)
{
- offs_t adr = (offset >> 6)*2 + sel;
- m_program_pint[adr] = data;
- if(0)
- logerror("prg_int_w %02x, %04x\n", adr, data);
+ m_meg->offset_w((offset >> 6)*2 + sel, data);
}
template<int sel> u16 swp30_device::prg_lfo_r(offs_t offset)
{
- offs_t adr = (offset >> 6)*2 + sel;
- return m_program_plfo[adr];
+ return m_meg->lfo_r((offset >> 6)*2 + sel);
}
template<int sel> void swp30_device::prg_lfo_w(offs_t offset, u16 data)
{
- offs_t adr = (offset >> 6)*2 + sel;
- m_program_plfo[adr] = data;
-
- static const int dt[8] = { 0, 32, 64, 128, 256, 512, 1024, 2048 };
- static const int sh[8] = { 0, 0, 1, 2, 3, 4, 5, 6 };
-
- int scale = (data >> 5) & 7;
- int step = ((data & 31) << sh[scale]) + dt[scale];
- if(0)
- logerror("prg_lfo_w %02x freq=%5.2f phase=%6.4f\n", adr, step * 44100.0/4194304, (data >> 8)/256.0);
+ m_meg->lfo_w((offset >> 6)*2 + sel, data);
}
diff --git a/src/devices/sound/swp30.h b/src/devices/sound/swp30.h
index 56e24b453f0..dd95a8dd85f 100644
--- a/src/devices/sound/swp30.h
+++ b/src/devices/sound/swp30.h
@@ -8,6 +8,8 @@
#pragma once
+#include "meg.h"
+
class swp30_device : public device_t, public device_sound_interface, public device_rom_interface
{
public:
@@ -20,8 +22,11 @@ protected:
virtual void device_reset() override;
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
virtual void rom_bank_updated() override;
+ virtual void device_add_mconfig(machine_config &config) override;
private:
+ required_device<meg_embedded_device> m_meg;
+
sound_stream *m_stream;
s32 m_sample_increment[0x4000];
@@ -99,8 +104,8 @@ private:
// MEG registers
template<int sel> u16 prg_fp_r(offs_t offset);
template<int sel> void prg_fp_w(offs_t offset, u16 data);
- template<int sel> u16 prg_int_r(offs_t offset);
- template<int sel> void prg_int_w(offs_t offset, u16 data);
+ template<int sel> u16 prg_off_r(offs_t offset);
+ template<int sel> void prg_off_w(offs_t offset, u16 data);
template<int sel> u16 prg_lfo_r(offs_t offset);
template<int sel> void prg_lfo_w(offs_t offset, u16 data);
diff --git a/src/devices/sound/vrc6.cpp b/src/devices/sound/vrc6.cpp
index 29729fc9fcc..b769fde4043 100644
--- a/src/devices/sound/vrc6.cpp
+++ b/src/devices/sound/vrc6.cpp
@@ -2,7 +2,7 @@
// copyright-holders:R. Belmont
/***************************************************************************
- vrc6.c
+ vrc6.cpp
Konami VRC6 additional sound channels
Emulation by R. Belmont
@@ -16,8 +16,6 @@
#include "emu.h"
#include "vrc6.h"
-#define DISABLE_VRC6_SOUND // not ready yet
-
// device type definition
DEFINE_DEVICE_TYPE(VRC6, vrc6snd_device, "vrc6snd", "Konami VRC6 (Sound)")
@@ -29,10 +27,10 @@ DEFINE_DEVICE_TYPE(VRC6, vrc6snd_device, "vrc6snd", "Konami VRC6 (Sound)")
// vrc6snd_device - constructor
//-------------------------------------------------
-vrc6snd_device::vrc6snd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+vrc6snd_device::vrc6snd_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, VRC6, tag, owner, clock)
, device_sound_interface(mconfig, *this)
- , m_freqctrl(0), m_pulsectrl{ 0, 0 }, m_sawrate(0)
+ , m_freqctrl(0), m_pulsectrl{ 0, 0 }, m_sawrate(0), m_master_freq(0)
, m_pulsefrql{ 0, 0 }, m_pulsefrqh{ 0, 0 }, m_pulseduty{ 0, 0 }
, m_sawfrql(0), m_sawfrqh(0), m_sawclock(0), m_sawaccum(0)
, m_ticks{ 0, 0, 0 }
@@ -55,10 +53,12 @@ void vrc6snd_device::device_start()
m_ticks[0] = m_ticks[1] = m_ticks[2] = 0;
m_output[0] = m_output[1] = m_output[2] = 0;
m_pulseduty[0] = m_pulseduty[1] = 15;
+ m_master_freq = 0;
save_item(NAME(m_freqctrl));
save_item(NAME(m_pulsectrl));
save_item(NAME(m_sawrate));
+ save_item(NAME(m_master_freq));
save_item(NAME(m_sawaccum));
save_item(NAME(m_pulsefrql));
save_item(NAME(m_pulsefrqh));
@@ -85,6 +85,7 @@ void vrc6snd_device::device_reset()
m_output[0] = m_output[1] = m_output[2] = 0;
m_pulseduty[0] = m_pulseduty[1] = 15;
m_pulsefrqh[0] = m_pulsefrqh[1] = m_sawfrqh = 0;
+ m_master_freq = 0;
}
//-------------------------------------------------
@@ -94,27 +95,22 @@ void vrc6snd_device::device_reset()
void vrc6snd_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
{
- stream_sample_t *out = outputs[0];
- int16_t tmp;
- int i;
+ std::fill_n(&outputs[0][0], samples, 0);
// check global halt bit
if (m_freqctrl & 1)
- {
return;
- }
- for (i = 0; i < samples; i++)
+ for (int i = 0; i < samples; i++)
{
// update pulse1
if (m_pulsefrqh[0] & 0x80)
{
- m_ticks[0]--;
if (m_ticks[0] == 0)
{
- m_ticks[0] = m_pulsefrql[0] | (m_pulsefrqh[0] & 0xf)<<4;
+ m_ticks[0] = (m_pulsefrql[0] | ((m_pulsefrqh[0] & 0xf) << 8)) >> m_master_freq;
- m_pulseduty[0]--;
+ m_pulseduty[0] = (m_pulseduty[0] - 1) & 0xf;
if (m_pulsectrl[0] & 0x80)
{
m_output[0] = m_pulsectrl[0] & 0xf;
@@ -130,12 +126,9 @@ void vrc6snd_device::sound_stream_update(sound_stream &stream, stream_sample_t *
m_output[0] = 0;
}
}
-
- if (m_pulseduty[0] == 0)
- {
- m_pulseduty[0] = 15;
- }
}
+ else
+ m_ticks[0]--;
}
else
{
@@ -145,12 +138,11 @@ void vrc6snd_device::sound_stream_update(sound_stream &stream, stream_sample_t *
// update pulse2
if (m_pulsefrqh[1] & 0x80)
{
- m_ticks[1]--;
if (m_ticks[1] == 0)
{
- m_ticks[1] = m_pulsefrql[1] | (m_pulsefrqh[1] & 0xf)<<4;
+ m_ticks[1] = (m_pulsefrql[1] | ((m_pulsefrqh[1] & 0xf) << 8)) >> m_master_freq;
- m_pulseduty[1]--;
+ m_pulseduty[1] = (m_pulseduty[1] - 1) & 0xf;
if (m_pulsectrl[1] & 0x80)
{
m_output[1] = m_pulsectrl[1] & 0xf;
@@ -166,12 +158,9 @@ void vrc6snd_device::sound_stream_update(sound_stream &stream, stream_sample_t *
m_output[1] = 0;
}
}
-
- if (m_pulseduty[1] == 0)
- {
- m_pulseduty[1] = 15;
- }
}
+ else
+ m_ticks[1]--;
}
else
{
@@ -181,10 +170,9 @@ void vrc6snd_device::sound_stream_update(sound_stream &stream, stream_sample_t *
// update saw
if (m_sawfrqh & 0x80)
{
- m_ticks[2]--;
if (m_ticks[2] == 0)
{
- m_ticks[2] = m_sawfrql | (m_sawfrqh & 0xf)<<4;
+ m_ticks[2] = (m_sawfrql | ((m_sawfrqh & 0xf) << 8)) >> m_master_freq;
// only update on even steps
if ((m_sawclock > 0) && (!(m_sawclock & 1)))
@@ -200,6 +188,8 @@ void vrc6snd_device::sound_stream_update(sound_stream &stream, stream_sample_t *
m_output[2] = 0;
}
}
+ else
+ m_ticks[2]--;
}
else
{
@@ -207,10 +197,10 @@ void vrc6snd_device::sound_stream_update(sound_stream &stream, stream_sample_t *
}
// sum 2 4-bit pulses, 1 5-bit saw = unsigned 6 bit output
- tmp = (int16_t)(uint8_t)(m_output[0] + m_output[1] + m_output[2]);
+ s16 tmp = (s16)(u8)(m_output[0] + m_output[1] + m_output[2]);
tmp <<= 8;
- out[i] = tmp;
+ outputs[0][i] = tmp;
}
}
@@ -218,7 +208,7 @@ void vrc6snd_device::sound_stream_update(sound_stream &stream, stream_sample_t *
// write - write to the chip's registers
//---------------------------------------
-void vrc6snd_device::write(offs_t offset, uint8_t data)
+void vrc6snd_device::write(offs_t offset, u8 data)
{
switch (offset >> 8)
{
@@ -232,28 +222,43 @@ void vrc6snd_device::write(offs_t offset, uint8_t data)
case 1:
m_pulsefrql[0] = data;
- if (!(m_pulsefrqh[1] & 0x80))
+ if (!(m_pulsefrqh[0] & 0x80))
{
- m_ticks[0] &= ~0xff;
- m_ticks[0] |= m_pulsefrql[0];
+ m_ticks[0] = (m_pulsefrql[0] | ((m_pulsefrqh[0] & 0xf) << 8)) >> m_master_freq;
}
break;
case 2:
- #ifndef DISABLE_VRC6_SOUND
m_pulsefrqh[0] = data;
// if disabling channel, reset phase
if (!(data & 0x80))
{
m_pulseduty[0] = 15;
- m_ticks[0] &= 0xff;
- m_ticks[0] |= (m_pulsefrqh[0] & 0xf)<<4;
+ m_ticks[0] = (m_pulsefrql[0] | ((m_pulsefrqh[0] & 0xf) << 8)) >> m_master_freq;
}
- #endif
break;
case 3:
m_freqctrl = data;
+ if (m_freqctrl & 4)
+ m_master_freq = 0x8;
+ else if (m_freqctrl & 2)
+ m_master_freq = 0x4;
+ else
+ m_master_freq = 0;
+
+ if (!(m_pulsefrqh[0] & 0x80))
+ {
+ m_ticks[0] = (m_pulsefrql[0] | ((m_pulsefrqh[0] & 0xf) << 8)) >> m_master_freq;
+ }
+ if (!(m_pulsefrqh[1] & 0x80))
+ {
+ m_ticks[1] = (m_pulsefrql[1] | ((m_pulsefrqh[1] & 0xf) << 8)) >> m_master_freq;
+ }
+ if (!(m_sawfrqh & 0x80))
+ {
+ m_ticks[2] = (m_sawfrql | ((m_sawfrqh & 0xf) << 8)) >> m_master_freq;
+ }
break;
}
break;
@@ -270,22 +275,18 @@ void vrc6snd_device::write(offs_t offset, uint8_t data)
m_pulsefrql[1] = data;
if (!(m_pulsefrqh[1] & 0x80))
{
- m_ticks[1] &= ~0xff;
- m_ticks[1] |= m_pulsefrql[1];
+ m_ticks[1] = (m_pulsefrql[1] | ((m_pulsefrqh[1] & 0xf) << 8)) >> m_master_freq;
}
break;
case 2:
- #ifndef DISABLE_VRC6_SOUND
m_pulsefrqh[1] = data;
// if disabling channel, reset phase
if (!(data & 0x80))
{
m_pulseduty[1] = 15;
- m_ticks[1] &= 0xff;
- m_ticks[1] |= (m_pulsefrqh[1] & 0xf)<<4;
+ m_ticks[1] = (m_pulsefrql[1] | ((m_pulsefrqh[1] & 0xf) << 8)) >> m_master_freq;
}
- #endif
break;
}
break;
@@ -302,22 +303,18 @@ void vrc6snd_device::write(offs_t offset, uint8_t data)
m_sawfrql = data;
if (!(m_sawfrqh & 0x80))
{
- m_ticks[2] &= ~0xff;
- m_ticks[2] |= m_sawfrql;
+ m_ticks[2] = (m_sawfrql | ((m_sawfrqh & 0xf) << 8)) >> m_master_freq;
}
break;
case 2:
- #ifndef DISABLE_VRC6_SOUND
m_sawfrqh = data;
// if disabling channel, reset phase
if (!(data & 0x80))
{
m_sawaccum = 0;
- m_ticks[2] &= 0xff;
- m_ticks[2] |= (m_sawfrqh & 0xf)<<4;
+ m_ticks[2] = (m_sawfrql | ((m_sawfrqh & 0xf) << 8)) >> m_master_freq;
}
- #endif
break;
}
break;
diff --git a/src/devices/sound/vrc6.h b/src/devices/sound/vrc6.h
index a24d34a90c4..f1ea8f5c9e3 100644
--- a/src/devices/sound/vrc6.h
+++ b/src/devices/sound/vrc6.h
@@ -22,9 +22,9 @@ class vrc6snd_device : public device_t, public device_sound_interface
{
public:
// construction/destruction
- vrc6snd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ vrc6snd_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
- void write(offs_t offset, uint8_t data);
+ void write(offs_t offset, u8 data);
protected:
// device-level overrides
@@ -34,11 +34,11 @@ protected:
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
private:
- uint8_t m_freqctrl, m_pulsectrl[2], m_sawrate;
- uint8_t m_pulsefrql[2], m_pulsefrqh[2], m_pulseduty[2];
- uint8_t m_sawfrql, m_sawfrqh, m_sawclock, m_sawaccum;
- uint16_t m_ticks[3];
- uint8_t m_output[3];
+ u8 m_freqctrl, m_pulsectrl[2], m_sawrate, m_master_freq;
+ u8 m_pulsefrql[2], m_pulsefrqh[2], m_pulseduty[2];
+ u8 m_sawfrql, m_sawfrqh, m_sawclock, m_sawaccum;
+ u16 m_ticks[3];
+ u8 m_output[3];
sound_stream *m_stream;
};
diff --git a/src/devices/sound/ym2413.cpp b/src/devices/sound/ym2413.cpp
index 3935b1baa0e..755e66ea629 100644
--- a/src/devices/sound/ym2413.cpp
+++ b/src/devices/sound/ym2413.cpp
@@ -42,6 +42,8 @@ to do:
#include "emu.h"
#include "ym2413.h"
+#include <algorithm>
+
#define FREQ_SH 16 /* 16.16 fixed point (frequency calculations) */
#define EG_SH 16 /* 16.16 fixed point (EG timing) */
#define LFO_SH 24 /* 8.24 fixed point (LFO calculations) */
@@ -131,7 +133,7 @@ const uint32_t ym2413_device::sl_tab[16] = {
};
#undef SC
-const unsigned char ym2413_device::eg_inc[15*RATE_STEPS] = {
+const uint8_t ym2413_device::eg_inc[15*RATE_STEPS] = {
/*cycle:0 1 2 3 4 5 6 7*/
/* 0 */ 0,1, 0,1, 0,1, 0,1, /* rates 00..12 0 (increment by 0 or 1) */
@@ -158,7 +160,7 @@ const unsigned char ym2413_device::eg_inc[15*RATE_STEPS] = {
#define O(a) (a*RATE_STEPS)
/*note that there is no O(13) in this table - it's directly in the code */
-const unsigned char ym2413_device::eg_rate_select[16+64+16] = { /* Envelope Generator rates (16 + 64 rates + 16 RKS) */
+const uint8_t ym2413_device::eg_rate_select[16+64+16] = { /* Envelope Generator rates (16 + 64 rates + 16 RKS) */
/* 16 infinite time rates */
O(14),O(14),O(14),O(14),O(14),O(14),O(14),O(14),
O(14),O(14),O(14),O(14),O(14),O(14),O(14),O(14),
@@ -199,7 +201,7 @@ const unsigned char ym2413_device::eg_rate_select[16+64+16] = { /* Envelope Ge
/*mask 8191, 4095, 2047, 1023, 511, 255, 127, 63, 31, 15, 7, 3, 1, 0, 0, 0 */
#define O(a) (a*1)
-const unsigned char ym2413_device::eg_rate_shift[16+64+16] = { /* Envelope Generator counter shifts (16 + 64 rates + 16 RKS) */
+const uint8_t ym2413_device::eg_rate_shift[16+64+16] = { /* Envelope Generator counter shifts (16 + 64 rates + 16 RKS) */
/* 16 infinite time rates */
O(0),O(0),O(0),O(0),O(0),O(0),O(0),O(0),
O(0),O(0),O(0),O(0),O(0),O(0),O(0),O(0),
@@ -350,9 +352,10 @@ const int8_t ym2413_device::lfo_pm_table[8*8] = {
- waveform DC and DM select are 100% correct
*/
-const unsigned char ym2413_device::table[19][8] = {
+const uint8_t ym2413_device::table[19][8] = {
/* MULT MULT modTL DcDmFb AR/DR AR/DR SL/RR SL/RR */
/* 0 1 2 3 4 5 6 7 */
+/* These YM2413(OPLL) patch dumps are done via audio analysis (and a/b testing?) from Jarek and are known to be inaccurate */
{0x49, 0x4c, 0x4c, 0x12, 0x00, 0x00, 0x00, 0x00 }, //0
{0x61, 0x61, 0x1e, 0x17, 0xf0, 0x78, 0x00, 0x17 }, //1
@@ -385,9 +388,45 @@ const unsigned char ym2413_device::table[19][8] = {
/* drum instruments definitions */
/* MULTI MULTI modTL xxx AR/DR AR/DR SL/RR SL/RR */
/* 0 1 2 3 4 5 6 7 */
- {0x01, 0x01, 0x16, 0x00, 0xfd, 0xf8, 0x2f, 0x6d },/* BD(multi verified, modTL verified, mod env - verified(close), carr. env verifed) */
- {0x01, 0x01, 0x00, 0x00, 0xd8, 0xd8, 0xf9, 0xf8 },/* HH(multi verified), SD(multi not used) */
- {0x05, 0x01, 0x00, 0x00, 0xf8, 0xba, 0x49, 0x55 },/* TOM(multi,env verified), TOP CYM(multi verified, env verified) */
+/* old dumps via audio analysis (and a/b testing?) from Jarek */
+//{0x01, 0x01, 0x16, 0x00, 0xfd, 0xf8, 0x2f, 0x6d },/* BD(multi verified, modTL verified, mod env - verified(close), carr. env verifed) */
+//{0x01, 0x01, 0x00, 0x00, 0xd8, 0xd8, 0xf9, 0xf8 },/* HH(multi verified), SD(multi not used) */
+//{0x05, 0x01, 0x00, 0x00, 0xf8, 0xba, 0x49, 0x55 },/* TOM(multi,env verified), TOP CYM(multi verified, env verified) */
+/* Drums dumped from the VRC7 using debug mode, these are likely also correct for ym2413(OPLL) but need verification */
+ {0x01, 0x01, 0x18, 0x0f, 0xdf, 0xf8, 0x6a, 0x6d },/* BD */
+ {0x01, 0x01, 0x00, 0x00, 0xc8, 0xd8, 0xa7, 0x68 },/* HH, SD */
+ {0x05, 0x01, 0x00, 0x00, 0xf8, 0xaa, 0x59, 0x55 },/* TOM, TOP CYM */
+};
+
+// VRC7 Instruments : Dumped from internal ROM
+// reference : https://siliconpr0n.org/archive/doku.php?id=vendor:yamaha:opl2
+const uint8_t vrc7snd_device::vrc7_table[19][8] = {
+/* MULT MULT modTL DcDmFb AR/DR AR/DR SL/RR SL/RR */
+/* 0 1 2 3 4 5 6 7 */
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //0 (This is the user-defined instrument, should this default to anything?)
+
+ {0x03, 0x21, 0x05, 0x06, 0xe8, 0x81, 0x42, 0x27 }, //1
+ {0x13, 0x41, 0x14, 0x0d, 0xd8, 0xf6, 0x23, 0x12 }, //2
+ {0x11, 0x11, 0x08, 0x08, 0xfa, 0xb2, 0x20, 0x12 }, //3
+ {0x31, 0x61, 0x0c, 0x07, 0xa8, 0x64, 0x61, 0x27 }, //4
+ {0x32, 0x21, 0x1e, 0x06, 0xe1, 0x76, 0x01, 0x28 }, //5
+ {0x02, 0x01, 0x06, 0x00, 0xa3, 0xe2, 0xf4, 0xf4 }, //6
+ {0x21, 0x61, 0x1d, 0x07, 0x82, 0x81, 0x11, 0x07 }, //7
+ {0x23, 0x21, 0x22, 0x17, 0xa2, 0x72, 0x01, 0x17 }, //8
+ {0x35, 0x11, 0x25, 0x00, 0x40, 0x73, 0x72, 0x01 }, //9
+ {0xb5, 0x01, 0x0f, 0x0f, 0xa8, 0xa5, 0x51, 0x02 }, //A
+ {0x17, 0xc1, 0x24, 0x07, 0xf8, 0xf8, 0x22, 0x12 }, //B
+ {0x71, 0x23, 0x11, 0x06, 0x65, 0x74, 0x18, 0x16 }, //C
+ {0x01, 0x02, 0xd3, 0x05, 0xc9, 0x95, 0x03, 0x02 }, //D
+ {0x61, 0x63, 0x0c, 0x00, 0x94, 0xc0, 0x33, 0xf6 }, //E
+ {0x21, 0x72, 0x0d, 0x00, 0xc1, 0xd5, 0x56, 0x06 }, //F
+
+/* Drums (silent due to no RO output pin(?) on VRC7, but present internally; these are probably shared with YM2413) */
+/* MULTI MULTI modTL xxx AR/DR AR/DR SL/RR SL/RR */
+/* 0 1 2 3 4 5 6 7 */
+ {0x01, 0x01, 0x18, 0x0f, 0xdf, 0xf8, 0x6a, 0x6d },/* BD */
+ {0x01, 0x01, 0x00, 0x00, 0xc8, 0xd8, 0xa7, 0x68 },/* HH, SD */
+ {0x05, 0x01, 0x00, 0x00, 0xf8, 0xaa, 0x59, 0x55 },/* TOM, TOP CYM */
};
/* work table */
@@ -823,21 +862,21 @@ void ym2413_device::rhythm_calc( OPLL_CH *CH, unsigned int noise )
*/
/* base frequency derived from operator 1 in channel 7 */
- unsigned char bit7 = ((SLOT7_1->phase>>FREQ_SH)>>7)&1;
- unsigned char bit3 = ((SLOT7_1->phase>>FREQ_SH)>>3)&1;
- unsigned char bit2 = ((SLOT7_1->phase>>FREQ_SH)>>2)&1;
+ uint8_t bit7 = ((SLOT7_1->phase>>FREQ_SH)>>7)&1;
+ uint8_t bit3 = ((SLOT7_1->phase>>FREQ_SH)>>3)&1;
+ uint8_t bit2 = ((SLOT7_1->phase>>FREQ_SH)>>2)&1;
- unsigned char res1 = (bit2 ^ bit7) | bit3;
+ uint8_t res1 = (bit2 ^ bit7) | bit3;
/* when res1 = 0 phase = 0x000 | 0xd0; */
/* when res1 = 1 phase = 0x200 | (0xd0>>2); */
uint32_t phase = res1 ? (0x200|(0xd0>>2)) : 0xd0;
/* enable gate based on frequency of operator 2 in channel 8 */
- unsigned char bit5e= ((SLOT8_2->phase>>FREQ_SH)>>5)&1;
- unsigned char bit3e= ((SLOT8_2->phase>>FREQ_SH)>>3)&1;
+ uint8_t bit5e= ((SLOT8_2->phase>>FREQ_SH)>>5)&1;
+ uint8_t bit3e= ((SLOT8_2->phase>>FREQ_SH)>>3)&1;
- unsigned char res2 = (bit3e | bit5e);
+ uint8_t res2 = (bit3e | bit5e);
/* when res2 = 0 pass the phase from calculation above (res1); */
/* when res2 = 1 phase = 0x200 | (0xd0>>2); */
@@ -868,7 +907,7 @@ void ym2413_device::rhythm_calc( OPLL_CH *CH, unsigned int noise )
if( env < ENV_QUIET )
{
/* base frequency derived from operator 1 in channel 7 */
- unsigned char bit8 = ((SLOT7_1->phase>>FREQ_SH)>>8)&1;
+ uint8_t bit8 = ((SLOT7_1->phase>>FREQ_SH)>>8)&1;
/* when bit8 = 0 phase = 0x100; */
/* when bit8 = 1 phase = 0x200; */
@@ -894,21 +933,21 @@ void ym2413_device::rhythm_calc( OPLL_CH *CH, unsigned int noise )
if( env < ENV_QUIET )
{
/* base frequency derived from operator 1 in channel 7 */
- unsigned char bit7 = ((SLOT7_1->phase>>FREQ_SH)>>7)&1;
- unsigned char bit3 = ((SLOT7_1->phase>>FREQ_SH)>>3)&1;
- unsigned char bit2 = ((SLOT7_1->phase>>FREQ_SH)>>2)&1;
+ uint8_t bit7 = ((SLOT7_1->phase>>FREQ_SH)>>7)&1;
+ uint8_t bit3 = ((SLOT7_1->phase>>FREQ_SH)>>3)&1;
+ uint8_t bit2 = ((SLOT7_1->phase>>FREQ_SH)>>2)&1;
- unsigned char res1 = (bit2 ^ bit7) | bit3;
+ uint8_t res1 = (bit2 ^ bit7) | bit3;
/* when res1 = 0 phase = 0x000 | 0x100; */
/* when res1 = 1 phase = 0x200 | 0x100; */
uint32_t phase = res1 ? 0x300 : 0x100;
/* enable gate based on frequency of operator 2 in channel 8 */
- unsigned char bit5e= ((SLOT8_2->phase>>FREQ_SH)>>5)&1;
- unsigned char bit3e= ((SLOT8_2->phase>>FREQ_SH)>>3)&1;
+ uint8_t bit5e= ((SLOT8_2->phase>>FREQ_SH)>>5)&1;
+ uint8_t bit3e= ((SLOT8_2->phase>>FREQ_SH)>>3)&1;
- unsigned char res2 = (bit3e | bit5e);
+ uint8_t res2 = (bit3e | bit5e);
/* when res2 = 0 pass the phase from calculation above (res1); */
/* when res2 = 1 phase = 0x200 | 0x100; */
if (res2)
@@ -1635,11 +1674,14 @@ void ym2413_device::device_reset()
noise_rng = 1; /* noise shift register */
/* setup instruments table */
- for (int i=0; i<19; i++)
+ if (m_inst_table != nullptr)
{
- for (int c=0; c<8; c++)
+ for (int i=0; i<19; i++)
{
- inst_tab[i][c] = table[i][c];
+ for (int c=0; c<8; c++)
+ {
+ inst_tab[i][c] = m_inst_table[i][c];
+ }
}
}
@@ -1686,7 +1728,37 @@ void ym2413_device::data_port_w(u8 data)
DEFINE_DEVICE_TYPE(YM2413, ym2413_device, "ym2413", "Yamaha YM2413 OPLL")
ym2413_device::ym2413_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, YM2413, tag, owner, clock)
+ : ym2413_device(mconfig, YM2413, tag, owner, clock)
+{
+ for (int i = 0; i < 19; i++)
+ {
+ for (int c = 0; c < 8; c++)
+ {
+ m_inst_table[i][c] = table[i][c];
+ }
+ }
+}
+
+ym2413_device::ym2413_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, type, tag, owner, clock)
, device_sound_interface(mconfig, *this)
{
+ for (int i = 0; i < 19; i++)
+ {
+ std::fill_n(&m_inst_table[i][0], 8, 0);
+ }
+}
+
+DEFINE_DEVICE_TYPE(VRC7, vrc7snd_device, "vrc7snd", "Konami VRC7 (Sound)")
+
+vrc7snd_device::vrc7snd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : ym2413_device(mconfig, VRC7, tag, owner, clock)
+{
+ for (int i = 0; i < 19; i++)
+ {
+ for (int c = 0; c < 8; c++)
+ {
+ m_inst_table[i][c] = vrc7_table[i][c];
+ }
+ }
}
diff --git a/src/devices/sound/ym2413.h b/src/devices/sound/ym2413.h
index 32114624eff..1b0d9869770 100644
--- a/src/devices/sound/ym2413.h
+++ b/src/devices/sound/ym2413.h
@@ -17,6 +17,8 @@ public:
void data_port_w(u8 data);
protected:
+ ym2413_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
// device-level overrides
virtual void device_start() override;
virtual void device_clock_changed() override;
@@ -25,6 +27,8 @@ protected:
// sound stream update overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
+ uint8_t m_inst_table[19][8];
+
private:
struct OPLL_SLOT
{
@@ -106,13 +110,13 @@ private:
static const double ksl_tab[8*16];
static const uint32_t ksl_shift[4];
static const uint32_t sl_tab[16];
- static const unsigned char eg_inc[15*RATE_STEPS];
- static const unsigned char eg_rate_select[16+64+16];
- static const unsigned char eg_rate_shift[16+64+16];
+ static const uint8_t eg_inc[15*RATE_STEPS];
+ static const uint8_t eg_rate_select[16+64+16];
+ static const uint8_t eg_rate_shift[16+64+16];
static const uint8_t mul_tab[16];
static const uint8_t lfo_am_table[LFO_AM_TAB_ELEMENTS];
static const int8_t lfo_pm_table[8*8];
- static const unsigned char table[19][8];
+ static const uint8_t table[19][8];
int tl_tab[TL_TAB_LEN];
@@ -185,4 +189,15 @@ private:
DECLARE_DEVICE_TYPE(YM2413, ym2413_device)
+class vrc7snd_device : public ym2413_device
+{
+public:
+ vrc7snd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+private:
+ static const uint8_t vrc7_table[19][8];
+};
+
+DECLARE_DEVICE_TYPE(VRC7, vrc7snd_device)
+
#endif // MAME_SOUND_YM2413_H
diff --git a/src/devices/video/mm5445.h b/src/devices/video/mm5445.h
index 2ee2b8ed8cb..7d16d4f2ee2 100644
--- a/src/devices/video/mm5445.h
+++ b/src/devices/video/mm5445.h
@@ -37,8 +37,8 @@
VSS 20 |___________| 21 CLOCK IN
O# = OUTPUT BIT #
- MM5446, MM5448 don't have the brightness control pin, an extra output pin instead
- MM5447, MM5448 don't have the data enable pin(always enabled), but another extra output pin
+ MM5446, MM5448 don't have the brightness control pin, an extra output pin instead
+ MM5447, MM5448 don't have the data enable pin(always enabled), but another extra output pin
*/
diff --git a/src/devices/video/tms9927.cpp b/src/devices/video/tms9927.cpp
index bc8e187f8e8..7764aba05f7 100644
--- a/src/devices/video/tms9927.cpp
+++ b/src/devices/video/tms9927.cpp
@@ -54,6 +54,7 @@ tms9927_device::tms9927_device(const machine_config &mconfig, device_type type,
, m_selfload(*this, finder_base::DUMMY_TAG)
, m_reset(false)
, m_valid_config(false)
+ , m_custom_visarea(0, 0, 0, 0)
{
std::fill(std::begin(m_reg), std::end(m_reg), 0x00);
}
@@ -349,6 +350,9 @@ void tms9927_device::recompute_parameters(bool postload)
rectangle visarea(0, m_overscan_left + m_visible_hpix + m_overscan_right - 1,
0, m_overscan_top + m_visible_vpix + m_overscan_bottom - 1);
+ if (m_custom_visarea.width() > 1 && m_custom_visarea.height() > 1)
+ visarea = m_custom_visarea;
+
attotime refresh = clocks_to_attotime(HCOUNT * m_total_vpix);
osd_printf_debug("TMS9927: Total = %dx%d, Visible = %dx%d, HSync = %d-%d, VSync = %d-%d, Skew=%d, Upscroll=%d, Period=%f Hz\n", m_total_hpix, m_total_vpix, m_visible_hpix, m_visible_vpix, m_hsyn_start, m_hsyn_end, m_vsyn_start, m_vsyn_end, SKEW_BITS, m_start_datarow, refresh.as_hz());
diff --git a/src/devices/video/tms9927.h b/src/devices/video/tms9927.h
index 2e00344c1e7..7a23bd9fbe7 100644
--- a/src/devices/video/tms9927.h
+++ b/src/devices/video/tms9927.h
@@ -26,6 +26,7 @@ public:
m_overscan_top = top;
m_overscan_bottom = bottom;
}
+ void set_visarea(s16 minx, s16 maxx, s16 miny, s16 maxy) { m_custom_visarea.set(minx, maxx, miny, maxy); }
DECLARE_WRITE8_MEMBER(write);
DECLARE_READ8_MEMBER(read);
@@ -80,6 +81,7 @@ private:
bool m_valid_config;
uint16_t m_total_hpix, m_total_vpix;
uint16_t m_visible_hpix, m_visible_vpix;
+ rectangle m_custom_visarea;
uint16_t m_vsyn_start, m_vsyn_end;
uint16_t m_hsyn_start, m_hsyn_end;
diff --git a/src/devices/video/tms9928a.cpp b/src/devices/video/tms9928a.cpp
index 31486b77f8b..c068d8b4ce8 100644
--- a/src/devices/video/tms9928a.cpp
+++ b/src/devices/video/tms9928a.cpp
@@ -166,11 +166,11 @@ void tms9928a_device::write(offs_t offset, uint8_t data)
u8 tms9928a_device::vram_read()
{
- // prevent debugger from changing the address base
- if (machine().side_effects_disabled()) return 0;
-
uint8_t data = m_ReadAhead;
+ // prevent debugger from changing the address base
+ if (machine().side_effects_disabled()) return data;
+
m_ReadAhead = m_vram_space->read_byte(m_Addr);
m_Addr = (m_Addr + 1) & (m_vram_size - 1);
m_latch = 0;
@@ -193,11 +193,11 @@ void tms9928a_device::vram_write(u8 data)
u8 tms9928a_device::register_read()
{
- // prevent debugger from changing the internal state
- if (machine().side_effects_disabled()) return 0;
-
uint8_t data = m_StatusReg;
+ // prevent debugger from changing the internal state
+ if (machine().side_effects_disabled()) return data;
+
m_StatusReg = m_FifthSprite;
check_interrupt();
m_latch = 0;
diff --git a/src/emu/emupal.cpp b/src/emu/emupal.cpp
index 59b77d66ebf..6a998c4849e 100644
--- a/src/emu/emupal.cpp
+++ b/src/emu/emupal.cpp
@@ -337,6 +337,18 @@ palette_device &palette_device::set_format(rrrrggggbbbbrgbx_t, u32 entries)
return *this;
}
+palette_device &palette_device::set_format(xrgbrrrrggggbbbb_bit0_t, u32 entries)
+{
+ set_format(2, &raw_to_rgb_converter::xRGBRRRRGGGGBBBB_bit0_decoder, entries);
+ return *this;
+}
+
+palette_device &palette_device::set_format(xrgbrrrrggggbbbb_bit4_t, u32 entries)
+{
+ set_format(2, &raw_to_rgb_converter::xRGBRRRRGGGGBBBB_bit4_decoder, entries);
+ return *this;
+}
+
//**************************************************************************
// GENERIC WRITE HANDLERS
@@ -373,35 +385,35 @@ inline void palette_device::update_for_write(offs_t byte_offset, int bytes_modif
// write - write a byte to the base paletteram
//-------------------------------------------------
-WRITE8_MEMBER(palette_device::write8)
+void palette_device::write8(offs_t offset, u8 data)
{
m_paletteram.write8(offset, data);
update_for_write(offset, 1);
}
-WRITE16_MEMBER(palette_device::write16)
+void palette_device::write16(offs_t offset, u16 data, u16 mem_mask)
{
m_paletteram.write16(offset, data, mem_mask);
update_for_write(offset * 2, 2);
}
-WRITE32_MEMBER(palette_device::write32)
+void palette_device::write32(offs_t offset, u32 data, u32 mem_mask)
{
m_paletteram.write32(offset, data, mem_mask);
update_for_write(offset * 4, 4);
}
-READ8_MEMBER(palette_device::read8)
+u8 palette_device::read8(offs_t offset)
{
return m_paletteram.read8(offset);
}
-READ16_MEMBER(palette_device::read16)
+u16 palette_device::read16(offs_t offset)
{
return m_paletteram.read16(offset);
}
-READ32_MEMBER(palette_device::read32)
+u32 palette_device::read32(offs_t offset)
{
return m_paletteram.read32(offset);
}
@@ -412,24 +424,24 @@ READ32_MEMBER(palette_device::read32)
// paletteram
//-------------------------------------------------
-WRITE8_MEMBER(palette_device::write8_ext)
+void palette_device::write8_ext(offs_t offset, u8 data)
{
m_paletteram_ext.write8(offset, data);
update_for_write(offset, 1);
}
-WRITE16_MEMBER(palette_device::write16_ext)
+void palette_device::write16_ext(offs_t offset, u16 data, u16 mem_mask)
{
m_paletteram_ext.write16(offset, data, mem_mask);
update_for_write(offset * 2, 2);
}
-READ8_MEMBER(palette_device::read8_ext)
+u8 palette_device::read8_ext(offs_t offset)
{
return m_paletteram_ext.read8(offset);
}
-READ16_MEMBER(palette_device::read16_ext)
+u16 palette_device::read16_ext(offs_t offset)
{
return m_paletteram_ext.read16(offset);
}
@@ -440,7 +452,7 @@ READ16_MEMBER(palette_device::read16_ext)
// paletteram, updating indirect colors
//-------------------------------------------------
-WRITE8_MEMBER(palette_device::write_indirect)
+void palette_device::write_indirect(offs_t offset, u8 data)
{
m_paletteram.write8(offset, data);
update_for_write(offset, 1, true);
@@ -452,7 +464,7 @@ WRITE8_MEMBER(palette_device::write_indirect)
// paletteram, updating indirect colors
//-------------------------------------------------
-WRITE8_MEMBER(palette_device::write_indirect_ext)
+void palette_device::write_indirect_ext(offs_t offset, u8 data)
{
m_paletteram_ext.write8(offset, data);
update_for_write(offset, 1, true);
diff --git a/src/emu/emupal.h b/src/emu/emupal.h
index 0711bf1a296..b4f52ac2a55 100644
--- a/src/emu/emupal.h
+++ b/src/emu/emupal.h
@@ -97,36 +97,6 @@
//**************************************************************************
-// CONSTANTS
-//**************************************************************************
-
-// exotic 5-5-5 formats
-#define PALETTE_FORMAT_xRGBRRRRGGGGBBBB_bit0 raw_to_rgb_converter(2, &raw_to_rgb_converter::xRGBRRRRGGGGBBBB_bit0_decoder)
-#define PALETTE_FORMAT_xRGBRRRRGGGGBBBB_bit4 raw_to_rgb_converter(2, &raw_to_rgb_converter::xRGBRRRRGGGGBBBB_bit4_decoder)
-
-//**************************************************************************
-// DEVICE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_PALETTE_ADD(_tag, _entries) \
- MCFG_DEVICE_ADD(_tag, PALETTE, 0) \
- downcast<palette_device &>(*device).set_entries(_entries);
-
-
-#define MCFG_PALETTE_FORMAT(_format) \
- downcast<palette_device &>(*device).set_format(PALETTE_FORMAT_##_format);
-
-
-// not implemented yet
-#if 0
-#define MCFG_PALETTE_ADD_HARDCODED(_tag, _array) \
- MCFG_PALETTE_ADD(_tag, sizeof(_array) / 3) \
- downcast<palette_device &>(*device).set_init(palette_init_delegate(FUNC(palette_device::palette_init_RRRRGGGGBBBB_proms), downcast<palette_device *>(device)));
-#endif
-
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -273,7 +243,9 @@ public:
enum rgb_444_prom_t { RGB_444_PROMS, RRRRGGGGBBBB_PROMS };
// exotic formats
- enum rrrrggggbbbbrgbx_t { RRRRGGGGBBBBRGBx };
+ enum rrrrggggbbbbrgbx_t { RRRRGGGGBBBBRGBx };
+ enum xrgbrrrrggggbbbb_bit0_t { xRGBRRRRGGGGBBBB_bit0 };
+ enum xrgbrrrrggggbbbb_bit4_t { xRGBRRRRGGGGBBBB_bit4 };
// construction/destruction
palette_device(const machine_config &mconfig, const char *tag, device_t *owner, init_delegate &&init, u32 entries = 0U, u32 indirect = 0U);
@@ -358,6 +330,8 @@ public:
palette_device &set_format(grbx_888_t, u32 entries);
palette_device &set_format(bgrx_888_t, u32 entries);
palette_device &set_format(rrrrggggbbbbrgbx_t, u32 entries);
+ palette_device &set_format(xrgbrrrrggggbbbb_bit0_t, u32 entries);
+ palette_device &set_format(xrgbrrrrggggbbbb_bit4_t, u32 entries);
template <typename T> palette_device &set_format(T x, u32 entries, u32 indirect) { set_format(x, entries); set_indirect_entries(indirect); return *this; }
palette_device &set_membits(int membits) { m_membits = membits; m_membits_supplied = true; return *this; }
palette_device &set_endianness(endianness_t endianness) { m_endianness = endianness; m_endianness_supplied = true; return *this; }
@@ -404,18 +378,18 @@ public:
}
// generic read/write handlers
- DECLARE_READ8_MEMBER(read8);
- DECLARE_READ8_MEMBER(read8_ext);
- DECLARE_WRITE8_MEMBER(write8);
- DECLARE_WRITE8_MEMBER(write8_ext);
- DECLARE_WRITE8_MEMBER(write_indirect);
- DECLARE_WRITE8_MEMBER(write_indirect_ext);
- DECLARE_READ16_MEMBER(read16);
- DECLARE_READ16_MEMBER(read16_ext);
- DECLARE_WRITE16_MEMBER(write16);
- DECLARE_WRITE16_MEMBER(write16_ext);
- DECLARE_READ32_MEMBER(read32);
- DECLARE_WRITE32_MEMBER(write32);
+ u8 read8(offs_t offset);
+ u8 read8_ext(offs_t offset);
+ void write8(offs_t offset, u8 data);
+ void write8_ext(offs_t offset, u8 data);
+ void write_indirect(offs_t offset, u8 data);
+ void write_indirect_ext(offs_t offset, u8 data);
+ u16 read16(offs_t offset);
+ u16 read16_ext(offs_t offset);
+ void write16(offs_t offset, u16 data, u16 mem_mask = u16(~0));
+ void write16_ext(offs_t offset, u16 data, u16 mem_mask = u16(~0));
+ u32 read32(offs_t offset);
+ void write32(offs_t offset, u32 data, u32 mem_mask = u32(~0));
// helper to update palette when data changed
void update() { if (!m_init.isnull()) m_init(*this); }
diff --git a/src/emu/render.h b/src/emu/render.h
index 9660b8fc71f..93621ea92c1 100644
--- a/src/emu/render.h
+++ b/src/emu/render.h
@@ -852,6 +852,8 @@ public:
std::string m_input_tag; // input tag of this item
ioport_port * m_input_port; // input port of this item
ioport_value m_input_mask; // input mask of this item
+ u8 m_input_shift; // input mask rightshift for raw (trailing 0s)
+ bool m_input_raw; // get raw data from input port
screen_device * m_screen; // pointer to screen
int m_orientation; // orientation of this item
render_bounds m_bounds; // bounds of the item
diff --git a/src/emu/rendlay.cpp b/src/emu/rendlay.cpp
index b47d643e254..d083ba5510a 100644
--- a/src/emu/rendlay.cpp
+++ b/src/emu/rendlay.cpp
@@ -3283,6 +3283,8 @@ layout_view::item::item(
, m_input_tag(env.get_attribute_string(itemnode, "inputtag", ""))
, m_input_port(nullptr)
, m_input_mask(0)
+ , m_input_shift(0)
+ , m_input_raw(false)
, m_screen(nullptr)
, m_orientation(orientation_add(env.parse_orientation(itemnode.get_child("orientation")), orientation))
, m_color(render_color_multiply(env.parse_color(itemnode.get_child("color")), color))
@@ -3308,6 +3310,8 @@ layout_view::item::item(
if (index != -1)
m_screen = screen_device_iterator(env.machine().root_device()).byindex(index);
m_input_mask = env.get_attribute_int(itemnode, "inputmask", 0);
+ for (u32 mask = m_input_mask; (mask != 0) && (~mask & 1); mask >>= 1) m_input_shift++;
+ m_input_raw = env.get_attribute_int(itemnode, "inputraw", 0) == 1;
if (m_have_output && m_element)
m_output = m_element->default_state();
env.parse_bounds(itemnode.get_child("bounds"), m_rawbounds);
@@ -3380,9 +3384,16 @@ int layout_view::item::state() const
// if configured to an input, fetch the input value
if (m_input_port)
{
- ioport_field const *const field = m_input_port->field(m_input_mask);
- if (field)
- return ((m_input_port->read() ^ field->defvalue()) & m_input_mask) ? 1 : 0;
+ if (m_input_raw)
+ {
+ return (m_input_port->read() & m_input_mask) >> m_input_shift;
+ }
+ else
+ {
+ ioport_field const *const field = m_input_port->field(m_input_mask);
+ if (field)
+ return ((m_input_port->read() ^ field->defvalue()) & m_input_mask) ? 1 : 0;
+ }
}
}
diff --git a/src/emu/xtal.cpp b/src/emu/xtal.cpp
index bc84a77bf9e..02957f24467 100644
--- a/src/emu/xtal.cpp
+++ b/src/emu/xtal.cpp
@@ -123,6 +123,7 @@ const double XTAL::known_xtals[] = {
6'900'000, /* 6.9_MHz_XTAL BBN BitGraph CPU */
7'000'000, /* 7_MHz_XTAL Jaleco Mega System PCBs */
7'159'090, /* 7.15909_MHz_XTAL Blood Bros (2x NTSC subcarrier) */
+ 7'200'000, /* 7.2_MHz_XTAL Image Fight bootleg I80C031 MCU */
7'372'800, /* 7.3728_MHz_XTAL - */
7'864'300, /* 7.8643_MHz_XTAL Used on InterFlip games as video clock */
7'987'000, /* 7.987_MHz_XTAL PC9801-86 YM2608 clock */
@@ -202,6 +203,7 @@ const double XTAL::known_xtals[] = {
14'318'181, /* 14.318181_MHz_XTAL Extremely common, used on 100's of PCBs (4x NTSC subcarrier) */
14'580'000, /* 14.58_MHz_XTAL Fortune 32:16 Video Controller */
14'705'882, /* 14.705882_MHz_XTAL Aleck64 */
+ 14'728'000, /* 14.728_MHz_XTAL ADM 36 */
14'742'800, /* 14.7428_MHz_XTAL ADM 23 */
14'745'600, /* 14.7456_MHz_XTAL Namco System 12 & System Super 22/23 for JVS */
14'784'000, /* 14.784_MHz_XTAL Zenith Z-29 */
@@ -283,6 +285,7 @@ const double XTAL::known_xtals[] = {
23'961'600, /* 23.9616_MHz_XTAL Osborne 4 (Vixen) */
24'000'000, /* 24_MHz_XTAL Mario, 80's Data East games, 80's Konami games */
24'073'400, /* 24.0734_MHz_XTAL DEC Rainbow 100 */
+ 24'300'000, /* 24.3_MHz_XTAL ADM 36 132-column display clock */
24'576'000, /* 24.576_MHz_XTAL Pole Position h/w, Model 3 CPU board */
24'883'200, /* 24.8832_MHz_XTAL DEC VT100 */
25'000'000, /* 25_MHz_XTAL Namco System 22, Taito GNET, Dogyuun h/w */
diff --git a/src/lib/formats/dsk_dsk.cpp b/src/lib/formats/dsk_dsk.cpp
index 5b019fb53d1..c90579b68d0 100644
--- a/src/lib/formats/dsk_dsk.cpp
+++ b/src/lib/formats/dsk_dsk.cpp
@@ -362,6 +362,12 @@ bool dsk_format::load(io_generic *io, uint32_t form_factor, floppy_image *image)
skip = 2;
}
int tracks = header[0x30];
+
+ int img_tracks, img_heads;
+ image->get_maximal_geometry(img_tracks, img_heads);
+ if (tracks > img_tracks || heads > img_heads)
+ return false;
+
uint64_t track_offsets[84*2];
int cnt =0;
if (!extendformat) {
diff --git a/src/lib/formats/opd_dsk.cpp b/src/lib/formats/opd_dsk.cpp
new file mode 100644
index 00000000000..b45b58762ed
--- /dev/null
+++ b/src/lib/formats/opd_dsk.cpp
@@ -0,0 +1,61 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/***************************************************************************
+
+ Sinclair ZX Spectrum
+
+ Opus Discovery disk image formats
+
+***************************************************************************/
+
+#include "opd_dsk.h"
+
+
+opd_format::opd_format() : wd177x_format(formats)
+{
+}
+
+const char *opd_format::name() const
+{
+ return "opd";
+}
+
+const char *opd_format::description() const
+{
+ return "Opus Discovery disk image";
+}
+
+const char *opd_format::extensions() const
+{
+ return "opd,opu";
+}
+
+int opd_format::identify(io_generic *io, uint32_t form_factor)
+{
+ int type = find_size(io, form_factor);
+
+ if (type != -1)
+ return 90;
+ return 0;
+}
+
+int opd_format::get_image_offset(const format &f, int head, int track)
+{
+ return (f.track_count * head + track) * compute_track_size(f);
+}
+
+const opd_format::format opd_format::formats[] =
+{
+ { // 180k 40 track single sided double density - gaps unverified
+ floppy_image::FF_35, floppy_image::SSSD, floppy_image::MFM,
+ 2000, 18, 40, 1, 256, {}, 0, {}, 36, 22, 27
+ },
+ { // 360k 40 track double sided double density - gaps unverified
+ floppy_image::FF_35, floppy_image::DSSD, floppy_image::MFM,
+ 2000, 18, 40, 2, 256, {}, 0, {}, 36, 22, 27
+ },
+ {}
+};
+
+
+const floppy_format_type FLOPPY_OPD_FORMAT = &floppy_image_format_creator<opd_format>;
diff --git a/src/lib/formats/opd_dsk.h b/src/lib/formats/opd_dsk.h
new file mode 100644
index 00000000000..3eb018ca1dc
--- /dev/null
+++ b/src/lib/formats/opd_dsk.h
@@ -0,0 +1,38 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/***************************************************************************
+
+ Sinclair ZX Spectrum
+
+ Opus Discovery disk image formats
+
+***************************************************************************/
+
+#pragma once
+
+#ifndef OPD_DSK_H
+#define OPD_DSK_H
+
+#include "flopimg.h"
+#include "wd177x_dsk.h"
+
+
+class opd_format : public wd177x_format
+{
+public:
+ opd_format();
+
+ virtual int identify(io_generic *io, uint32_t form_factor) override;
+ virtual int get_image_offset(const format &f, int head, int track) override;
+ virtual const char *name() const override;
+ virtual const char *description() const override;
+ virtual const char *extensions() const override;
+
+private:
+ static const format formats[];
+};
+
+
+extern const floppy_format_type FLOPPY_OPD_FORMAT;
+
+#endif // OPD_DSK_H
diff --git a/src/lib/netlist/analog/nld_bjt.cpp b/src/lib/netlist/analog/nld_bjt.cpp
index 0f50a9103fb..aef920635fe 100644
--- a/src/lib/netlist/analog/nld_bjt.cpp
+++ b/src/lib/netlist/analog/nld_bjt.cpp
@@ -9,43 +9,45 @@
#include "netlist/nl_setup.h"
#include "nlid_twoterm.h"
+
#include <cmath>
namespace netlist
{
- namespace analog
- {
-
-class diode
+namespace analog
{
-public:
- diode() : m_Is(1e-15), m_VT(0.0258), m_VT_inv(1.0 / m_VT) {}
- diode(const nl_double Is, const nl_double n)
- {
- m_Is = Is;
- m_VT = 0.0258 * n;
- m_VT_inv = 1.0 / m_VT;
- }
- void set(const nl_double Is, const nl_double n)
- {
- m_Is = Is;
- m_VT = 0.0258 * n;
- m_VT_inv = 1.0 / m_VT;
- }
- nl_double I(const nl_double V) const { return m_Is * std::exp(V * m_VT_inv) - m_Is; }
- nl_double g(const nl_double V) const { return m_Is * m_VT_inv * std::exp(V * m_VT_inv); }
- nl_double V(const nl_double I) const { return std::log1p(I / m_Is) * m_VT; } // log1p(x)=log(1.0 + x)
- nl_double gI(const nl_double I) const { return m_VT_inv * (I + m_Is); }
+ using constants = plib::constants<nl_double>;
-private:
- nl_double m_Is;
- nl_double m_VT;
- nl_double m_VT_inv;
-};
+ class diode
+ {
+ public:
+ diode() : m_Is(1e-15), m_VT(0.0258), m_VT_inv(1.0 / m_VT) {}
+ diode(const nl_double Is, const nl_double n)
+ {
+ m_Is = Is;
+ m_VT = 0.0258 * n;
+ m_VT_inv = 1.0 / m_VT;
+ }
+ void set(const nl_double Is, const nl_double n)
+ {
+ m_Is = Is;
+ m_VT = 0.0258 * n;
+ m_VT_inv = 1.0 / m_VT;
+ }
+ nl_double I(const nl_double V) const { return m_Is * std::exp(V * m_VT_inv) - m_Is; }
+ nl_double g(const nl_double V) const { return m_Is * m_VT_inv * std::exp(V * m_VT_inv); }
+ nl_double V(const nl_double I) const { return std::log1p(I / m_Is) * m_VT; } // log1p(x)=log(1.0 + x)
+ nl_double gI(const nl_double I) const { return m_VT_inv * (I + m_Is); }
+
+ private:
+ nl_double m_Is;
+ nl_double m_VT;
+ nl_double m_VT_inv;
+ };
-// -----------------------------------------------------------------------------
-// nld_Q - Base classes
-// -----------------------------------------------------------------------------
+ // -----------------------------------------------------------------------------
+ // nld_Q - Base classes
+ // -----------------------------------------------------------------------------
/*! Class representing the bjt model paramers.
*
@@ -73,7 +75,7 @@ private:
* | | RBM | minimum base resistance at high currents | | RB | 10 | * |
* | | RE | emitter resistance | | 0 | 1 | * |
* | | RC | collector resistance | | 0 | 10 | * |
- * | | CJE | B-E zero-bias depletion capacitance | F | 0 | 2pF | * |
+ * | Y | CJE | B-E zero-bias depletion capacitance | F | 0 | 2pF | * |
* | | VJE | B-E built-in potential | V | 0.75 | 0.6 | |
* | | MJE | B-E junction exponential factor | - | 0.33 | 0.33 | |
* | | TF | ideal forward transit time | sec | 0 | 0.1ns | |
@@ -81,7 +83,7 @@ private:
* | | VTF | voltage describing VBC dependence of TF | V | infinite | | |
* | | ITF | high-current parameter for effect on TF | A | 0 | | * |
* | | PTF | excess phase at freq=1.0/(TF*2PI) Hz | deg | 0 | | |
- * | | CJC | B-C zero-bias depletion capacitance | F | 0 | 2pF | * |
+ * | Y | CJC | B-C zero-bias depletion capacitance | F | 0 | 2pF | * |
* | | VJC | B-C built-in potential | V | 0.75 | 0.5 | |
* | | MJC | B-C junction exponential factor | - | 0.33 | 0.5 | |
* | | XCJC | fraction of B-C depletion capacitance connected to internal base node | - | 1 | | |
@@ -95,337 +97,369 @@ private:
* | | KF | flicker-noise coefficient | - | 0 | | |
* | | AF | flicker-noise exponent | - | 1 | | |
* | | FC | coefficient for forward-bias depletion capacitance formula | - | 0.5 | | |
- * | | TNOM | Parameter measurement temperature | C | 27 | 50 | | */
+ * | | TNOM | Parameter measurement temperature | C | 27 | 50 | |
+ * */
class bjt_model_t : public param_model_t
{
public:
bjt_model_t(device_t &device, const pstring &name, const pstring &val)
: param_model_t(device, name, val)
- , m_IS(*this, "IS")
- , m_BF(*this, "BF")
- , m_NF(*this, "NF")
- , m_BR(*this, "BR")
- , m_NR(*this, "NR")
+ , m_IS (*this, "IS")
+ , m_BF (*this, "BF")
+ , m_NF (*this, "NF")
+ , m_BR (*this, "BR")
+ , m_NR (*this, "NR")
+ , m_CJE(*this, "CJE")
+ , m_CJC(*this, "CJC")
{}
- value_t m_IS; //!< transport saturation current
- value_t m_BF; //!< ideal maximum forward beta
- value_t m_NF; //!< forward current emission coefficient
- value_t m_BR; //!< ideal maximum reverse beta
- value_t m_NR; //!< reverse current emission coefficient
+ value_t m_IS; //!< transport saturation current
+ value_t m_BF; //!< ideal maximum forward beta
+ value_t m_NF; //!< forward current emission coefficient
+ value_t m_BR; //!< ideal maximum reverse beta
+ value_t m_NR; //!< reverse current emission coefficient
+ value_t m_CJE; //!< B-E zero-bias depletion capacitance
+ value_t m_CJC; //!< B-C zero-bias depletion capacitance
+
};
// Have a common start for transistors
-NETLIB_OBJECT(Q)
-{
-public:
- enum q_type {
- BJT_NPN,
- BJT_PNP
+ NETLIB_OBJECT(Q)
+ {
+ public:
+ enum q_type {
+ BJT_NPN,
+ BJT_PNP
+ };
+
+ NETLIB_CONSTRUCTOR(Q)
+ , m_model(*this, "MODEL", "NPN")
+ , m_qtype(BJT_NPN)
+ {
+ }
+
+ NETLIB_IS_DYNAMIC(true)
+
+ //NETLIB_RESETI();
+ NETLIB_UPDATEI();
+
+ q_type qtype() const { return m_qtype; }
+ bool is_qtype(q_type atype) const { return m_qtype == atype; }
+ void set_qtype(q_type atype) { m_qtype = atype; }
+ protected:
+
+ bjt_model_t m_model;
+ private:
+ q_type m_qtype;
};
- NETLIB_CONSTRUCTOR(Q)
- , m_model(*this, "MODEL", "NPN")
- , m_qtype(BJT_NPN)
+ NETLIB_OBJECT_DERIVED(QBJT, Q)
{
- }
-
- NETLIB_IS_DYNAMIC(true)
-
- //NETLIB_RESETI();
- NETLIB_UPDATEI();
+ public:
+ NETLIB_CONSTRUCTOR_DERIVED(QBJT, Q)
+ { }
- q_type qtype() const { return m_qtype; }
- bool is_qtype(q_type atype) const { return m_qtype == atype; }
- void set_qtype(q_type atype) { m_qtype = atype; }
-protected:
+ protected:
- bjt_model_t m_model;
-private:
- q_type m_qtype;
-};
+ private:
+ };
-NETLIB_OBJECT_DERIVED(QBJT, Q)
-{
-public:
- NETLIB_CONSTRUCTOR_DERIVED(QBJT, Q)
- { }
-protected:
-private:
-};
+ // -----------------------------------------------------------------------------
+ // nld_QBJT_switch
+ // -----------------------------------------------------------------------------
+ /*
+ * + - C
+ * B ----VVV----+ |
+ * | |
+ * Rb Rc
+ * Rb Rc
+ * Rb Rc
+ * | |
+ * +----+----+
+ * |
+ * E
+ */
-// -----------------------------------------------------------------------------
-// nld_QBJT_switch
-// -----------------------------------------------------------------------------
+ NETLIB_OBJECT_DERIVED(QBJT_switch, QBJT)
+ {
+ NETLIB_CONSTRUCTOR_DERIVED(QBJT_switch, QBJT)
+ , m_RB(*this, "m_RB", true)
+ , m_RC(*this, "m_RC", true)
+ , m_BC_dummy(*this, "m_BC", true)
+ , m_gB(1e-9)
+ , m_gC(1e-9)
+ , m_V(0.0)
+ , m_state_on(*this, "m_state_on", 0)
+ {
+ register_subalias("B", m_RB.m_P);
+ register_subalias("E", m_RB.m_N);
+ register_subalias("C", m_RC.m_P);
+ //register_term("_E1", m_RC.m_N);
+
+ //register_term("_B1", m_BC_dummy.m_P);
+ //register_term("_C1", m_BC_dummy.m_N);
+
+ connect(m_RB.m_N, m_RC.m_N);
+
+ connect(m_RB.m_P, m_BC_dummy.m_P);
+ connect(m_RC.m_P, m_BC_dummy.m_N);
+ }
+
+ NETLIB_RESETI();
+ NETLIB_UPDATEI();
+ NETLIB_UPDATE_PARAMI();
+ NETLIB_UPDATE_TERMINALSI();
+
+ private:
+ nld_twoterm m_RB;
+ nld_twoterm m_RC;
+
+ // FIXME: this is needed so we have all terminals belong to one net list
+
+ nld_twoterm m_BC_dummy;
+
+ nl_double m_gB; // base conductance / switch on
+ nl_double m_gC; // collector conductance / switch on
+ nl_double m_V; // internal voltage source
+ state_var<unsigned> m_state_on;
+
+ private:
+ };
+ // -----------------------------------------------------------------------------
+ // nld_QBJT_EB
+ // -----------------------------------------------------------------------------
-/*
- * + - C
- * B ----VVV----+ |
- * | |
- * Rb Rc
- * Rb Rc
- * Rb Rc
- * | |
- * +----+----+
- * |
- * E
- */
-NETLIB_OBJECT_DERIVED(QBJT_switch, QBJT)
-{
- NETLIB_CONSTRUCTOR_DERIVED(QBJT_switch, QBJT)
- , m_RB(*this, "m_RB", true)
- , m_RC(*this, "m_RC", true)
- , m_BC_dummy(*this, "m_BC", true)
- , m_gB(1e-9)
- , m_gC(1e-9)
- , m_V(0.0)
- , m_state_on(*this, "m_state_on", 0)
+ NETLIB_OBJECT_DERIVED(QBJT_EB, QBJT)
{
- register_subalias("B", m_RB.m_P);
- register_subalias("E", m_RB.m_N);
- register_subalias("C", m_RC.m_P);
- //register_term("_E1", m_RC.m_N);
+ public:
+ NETLIB_CONSTRUCTOR_DERIVED(QBJT_EB, QBJT)
+ , m_gD_BC(*this, "m_D_BC")
+ , m_gD_BE(*this, "m_D_BE")
+ , m_D_CB(*this, "m_D_CB", true)
+ , m_D_EB(*this, "m_D_EB", true)
+ , m_D_EC(*this, "m_D_EC", true)
+ , m_alpha_f(0)
+ , m_alpha_r(0)
+ {
+ register_subalias("E", m_D_EB.m_P); // Cathode
+ register_subalias("B", m_D_EB.m_N); // Anode
+
+ register_subalias("C", m_D_CB.m_P); // Cathode
+
+ connect(m_D_EB.m_P, m_D_EC.m_P);
+ connect(m_D_EB.m_N, m_D_CB.m_N);
+ connect(m_D_CB.m_P, m_D_EC.m_N);
+
+ if (m_model.m_CJE > 0.0)
+ {
+ create_and_register_subdevice("m_CJE", m_CJE);
+ connect("B", "m_CJE.1");
+ connect("E", "m_CJE.2");
+ }
+ if (m_model.m_CJC > 0.0)
+ {
+ create_and_register_subdevice("m_CJC", m_CJC);
+ connect("B", "m_CJC.1");
+ connect("C", "m_CJC.2");
+ }
+ }
+
+ protected:
+
+ NETLIB_RESETI();
+ NETLIB_UPDATEI();
+ NETLIB_UPDATE_PARAMI();
+ NETLIB_UPDATE_TERMINALSI();
+
+ private:
+ generic_diode<diode_e::BIPOLAR> m_gD_BC;
+ generic_diode<diode_e::BIPOLAR> m_gD_BE;
+
+ nld_twoterm m_D_CB; // gcc, gce - gcc, gec - gcc, gcc - gce | Ic
+ nld_twoterm m_D_EB; // gee, gec - gee, gce - gee, gee - gec | Ie
+ nld_twoterm m_D_EC; // 0, -gec, -gcc, 0 | 0
+
+ nl_double m_alpha_f;
+ nl_double m_alpha_r;
+
+ NETLIB_SUBXX(analog, C) m_CJE;
+ NETLIB_SUBXX(analog, C) m_CJC;
+ };
- //register_term("_B1", m_BC_dummy.m_P);
- //register_term("_C1", m_BC_dummy.m_N);
- connect(m_RB.m_N, m_RC.m_N);
+ // ----------------------------------------------------------------------------------------
+ // nld_Q
+ // ----------------------------------------------------------------------------------------
- connect(m_RB.m_P, m_BC_dummy.m_P);
- connect(m_RC.m_P, m_BC_dummy.m_N);
+ NETLIB_UPDATE(Q)
+ {
+ // netlist().solver()->schedule1();
}
- NETLIB_RESETI();
- NETLIB_UPDATEI();
- NETLIB_UPDATE_PARAMI();
- NETLIB_UPDATE_TERMINALSI();
+ // ----------------------------------------------------------------------------------------
+ // nld_QBJT_switch
+ // ----------------------------------------------------------------------------------------
-private:
- nld_twoterm m_RB;
- nld_twoterm m_RC;
- // FIXME: this is needed so we have all terminals belong to one net list
-
- nld_twoterm m_BC_dummy;
+ NETLIB_RESET(QBJT_switch)
+ {
+ NETLIB_NAME(Q)::reset();
- nl_double m_gB; // base conductance / switch on
- nl_double m_gC; // collector conductance / switch on
- nl_double m_V; // internal voltage source
- state_var<unsigned> m_state_on;
+ m_state_on = 0;
-private:
-};
+ m_RB.set_G_V_I(exec().gmin(), 0.0, 0.0);
+ m_RC.set_G_V_I(exec().gmin(), 0.0, 0.0);
-// -----------------------------------------------------------------------------
-// nld_QBJT_EB
-// -----------------------------------------------------------------------------
+ m_BC_dummy.set_G_V_I(exec().gmin() / 10.0, 0.0, 0.0);
+ }
-NETLIB_OBJECT_DERIVED(QBJT_EB, QBJT)
-{
-public:
- NETLIB_CONSTRUCTOR_DERIVED(QBJT_EB, QBJT)
- , m_gD_BC(*this, "m_D_BC")
- , m_gD_BE(*this, "m_D_BE")
- , m_D_CB(*this, "m_D_CB", true)
- , m_D_EB(*this, "m_D_EB", true)
- , m_D_EC(*this, "m_D_EC", true)
- , m_alpha_f(0)
- , m_alpha_r(0)
+ NETLIB_UPDATE(QBJT_switch)
{
- register_subalias("E", m_D_EB.m_P); // Cathode
- register_subalias("B", m_D_EB.m_N); // Anode
-
- register_subalias("C", m_D_CB.m_P); // Cathode
-
- connect(m_D_EB.m_P, m_D_EC.m_P);
- connect(m_D_EB.m_N, m_D_CB.m_N);
- connect(m_D_CB.m_P, m_D_EC.m_N);
+ if (!m_RB.m_P.net().isRailNet())
+ m_RB.m_P.solve_now(); // Basis
+ else if (!m_RB.m_N.net().isRailNet())
+ m_RB.m_N.solve_now(); // Emitter
+ else if (!m_RC.m_P.net().isRailNet())
+ m_RC.m_P.solve_now(); // Collector
}
-protected:
- NETLIB_RESETI();
- NETLIB_UPDATEI();
- NETLIB_UPDATE_PARAMI();
- NETLIB_UPDATE_TERMINALSI();
-
-private:
- generic_diode m_gD_BC;
- generic_diode m_gD_BE;
-
- nld_twoterm m_D_CB; // gcc, gce - gcc, gec - gcc, gcc - gce | Ic
- nld_twoterm m_D_EB; // gee, gec - gee, gce - gee, gee - gec | Ie
- nld_twoterm m_D_EC; // 0, -gec, -gcc, 0 | 0
-
- nl_double m_alpha_f;
- nl_double m_alpha_r;
-
-};
-
-
-// ----------------------------------------------------------------------------------------
-// nld_Q
-// ----------------------------------------------------------------------------------------
-
-NETLIB_UPDATE(Q)
-{
-// netlist().solver()->schedule1();
-}
-
-// ----------------------------------------------------------------------------------------
-// nld_QBJT_switch
-// ----------------------------------------------------------------------------------------
-
-
-NETLIB_RESET(QBJT_switch)
-{
- NETLIB_NAME(Q)::reset();
-
- m_state_on = 0;
-
- m_RB.set_G_V_I(exec().gmin(), 0.0, 0.0);
- m_RC.set_G_V_I(exec().gmin(), 0.0, 0.0);
-
- m_BC_dummy.set_G_V_I(exec().gmin() / 10.0, 0.0, 0.0);
-
-}
+ NETLIB_UPDATE_PARAM(QBJT_switch)
+ {
+ nl_double IS = m_model.m_IS;
+ nl_double BF = m_model.m_BF;
+ nl_double NF = m_model.m_NF;
+ //nl_double VJE = m_model.dValue("VJE", 0.75);
-NETLIB_UPDATE(QBJT_switch)
-{
- if (!m_RB.m_P.net().isRailNet())
- m_RB.m_P.solve_now(); // Basis
- else if (!m_RB.m_N.net().isRailNet())
- m_RB.m_N.solve_now(); // Emitter
- else if (!m_RC.m_P.net().isRailNet())
- m_RC.m_P.solve_now(); // Collector
-}
+ set_qtype((m_model.model_type() == "NPN") ? BJT_NPN : BJT_PNP);
+ nl_double alpha = BF / (1.0 + BF);
-NETLIB_UPDATE_PARAM(QBJT_switch)
-{
- nl_double IS = m_model.m_IS;
- nl_double BF = m_model.m_BF;
- nl_double NF = m_model.m_NF;
- //nl_double VJE = m_model.dValue("VJE", 0.75);
+ diode d(IS, NF);
- set_qtype((m_model.model_type() == "NPN") ? BJT_NPN : BJT_PNP);
+ // Assume 5mA Collector current for switch operation
- nl_double alpha = BF / (1.0 + BF);
+ m_V = d.V(0.005 / alpha);
- diode d(IS, NF);
+ /* Base current is 0.005 / beta
+ * as a rough estimate, we just scale the conductance down */
- // Assume 5mA Collector current for switch operation
+ m_gB = 1.0 / (m_V/(0.005 / BF));
- m_V = d.V(0.005 / alpha);
+ //m_gB = d.gI(0.005 / alpha);
- /* Base current is 0.005 / beta
- * as a rough estimate, we just scale the conductance down */
+ if (m_gB < exec().gmin())
+ m_gB = exec().gmin();
+ m_gC = d.gI(0.005); // very rough estimate
+ }
- m_gB = 1.0 / (m_V/(0.005 / BF));
+ NETLIB_UPDATE_TERMINALS(QBJT_switch)
+ {
+ const nl_double m = (is_qtype( BJT_NPN) ? 1 : -1);
+
+ const unsigned new_state = (m_RB.deltaV() * m > m_V ) ? 1 : 0;
+ if (m_state_on ^ new_state)
+ {
+ const nl_double gb = new_state ? m_gB : exec().gmin();
+ const nl_double gc = new_state ? m_gC : exec().gmin();
+ const nl_double v = new_state ? m_V * m : 0;
+
+ m_RB.set_G_V_I(gb, v, 0.0);
+ m_RC.set_G_V_I(gc, 0.0, 0.0);
+ m_state_on = new_state;
+ }
+ }
- //m_gB = d.gI(0.005 / alpha);
- if (m_gB < exec().gmin())
- m_gB = exec().gmin();
- m_gC = d.gI(0.005); // very rough estimate
-}
+ // ----------------------------------------------------------------------------------------
+ // nld_Q - Ebers Moll
+ // ----------------------------------------------------------------------------------------
-NETLIB_UPDATE_TERMINALS(QBJT_switch)
-{
- const nl_double m = (is_qtype( BJT_NPN) ? 1 : -1);
- const unsigned new_state = (m_RB.deltaV() * m > m_V ) ? 1 : 0;
- if (m_state_on ^ new_state)
+ NETLIB_UPDATE(QBJT_EB)
{
- const nl_double gb = new_state ? m_gB : exec().gmin();
- const nl_double gc = new_state ? m_gC : exec().gmin();
- const nl_double v = new_state ? m_V * m : 0;
-
- m_RB.set_G_V_I(gb, v, 0.0);
- m_RC.set_G_V_I(gc, 0.0, 0.0);
- m_state_on = new_state;
+ if (!m_D_EB.m_P.net().isRailNet())
+ m_D_EB.m_P.solve_now(); // Basis
+ else if (!m_D_EB.m_N.net().isRailNet())
+ m_D_EB.m_N.solve_now(); // Emitter
+ else
+ m_D_CB.m_N.solve_now(); // Collector
}
-}
+ NETLIB_RESET(QBJT_EB)
+ {
+ NETLIB_NAME(Q)::reset();
+ if (m_CJE)
+ {
+ m_CJE->reset();
+ m_CJE->m_C.setTo(m_model.m_CJE);
+ }
+ if (m_CJC)
+ {
+ m_CJC->reset();
+ m_CJC->m_C.setTo(m_model.m_CJC);
+ }
-// ----------------------------------------------------------------------------------------
-// nld_Q - Ebers Moll
-// ----------------------------------------------------------------------------------------
+ }
+ NETLIB_UPDATE_TERMINALS(QBJT_EB)
+ {
+ const nl_double polarity = (qtype() == BJT_NPN ? 1.0 : -1.0);
+
+ m_gD_BE.update_diode(-m_D_EB.deltaV() * polarity);
+ m_gD_BC.update_diode(-m_D_CB.deltaV() * polarity);
+
+ const nl_double gee = m_gD_BE.G();
+ const nl_double gcc = m_gD_BC.G();
+ const nl_double gec = m_alpha_r * gcc;
+ const nl_double gce = m_alpha_f * gee;
+ const nl_double sIe = -m_gD_BE.I() + m_alpha_r * m_gD_BC.I();
+ const nl_double sIc = m_alpha_f * m_gD_BE.I() - m_gD_BC.I();
+ const nl_double Ie = (sIe + gee * m_gD_BE.Vd() - gec * m_gD_BC.Vd()) * polarity;
+ const nl_double Ic = (sIc - gce * m_gD_BE.Vd() + gcc * m_gD_BC.Vd()) * polarity;
+
+ m_D_EB.set_mat( gee, gec - gee, -Ie,
+ gce - gee, gee - gec, Ie);
+ m_D_CB.set_mat( gcc, gce - gcc, -Ic,
+ gec - gcc, gcc - gce, Ic);
+ m_D_EC.set_mat( 0, -gec, 0,
+ -gce, 0, 0);
+ }
-NETLIB_UPDATE(QBJT_EB)
-{
- if (!m_D_EB.m_P.net().isRailNet())
- m_D_EB.m_P.solve_now(); // Basis
- else if (!m_D_EB.m_N.net().isRailNet())
- m_D_EB.m_N.solve_now(); // Emitter
- else
- m_D_CB.m_N.solve_now(); // Collector
-}
-
-NETLIB_RESET(QBJT_EB)
-{
- NETLIB_NAME(Q)::reset();
-}
-NETLIB_UPDATE_TERMINALS(QBJT_EB)
-{
- const nl_double polarity = (qtype() == BJT_NPN ? 1.0 : -1.0);
-
- m_gD_BE.update_diode(-m_D_EB.deltaV() * polarity);
- m_gD_BC.update_diode(-m_D_CB.deltaV() * polarity);
-
- const nl_double gee = m_gD_BE.G();
- const nl_double gcc = m_gD_BC.G();
- const nl_double gec = m_alpha_r * gcc;
- const nl_double gce = m_alpha_f * gee;
- const nl_double sIe = -m_gD_BE.I() + m_alpha_r * m_gD_BC.I();
- const nl_double sIc = m_alpha_f * m_gD_BE.I() - m_gD_BC.I();
- const nl_double Ie = (sIe + gee * m_gD_BE.Vd() - gec * m_gD_BC.Vd()) * polarity;
- const nl_double Ic = (sIc - gce * m_gD_BE.Vd() + gcc * m_gD_BC.Vd()) * polarity;
-
- m_D_EB.set_mat( gee, gec - gee, -Ie,
- gce - gee, gee - gec, Ie);
- m_D_CB.set_mat( gcc, gce - gcc, -Ic,
- gec - gcc, gcc - gce, Ic);
- m_D_EC.set_mat( 0, -gec, 0,
- -gce, 0, 0);
-}
-
-
-NETLIB_UPDATE_PARAM(QBJT_EB)
-{
- nl_double IS = m_model.m_IS;
- nl_double BF = m_model.m_BF;
- nl_double NF = m_model.m_NF;
- nl_double BR = m_model.m_BR;
- nl_double NR = m_model.m_NR;
- //nl_double VJE = m_model.dValue("VJE", 0.75);
+ NETLIB_UPDATE_PARAM(QBJT_EB)
+ {
+ nl_double IS = m_model.m_IS;
+ nl_double BF = m_model.m_BF;
+ nl_double NF = m_model.m_NF;
+ nl_double BR = m_model.m_BR;
+ nl_double NR = m_model.m_NR;
+ //nl_double VJE = m_model.dValue("VJE", 0.75);
- set_qtype((m_model.model_type() == "NPN") ? BJT_NPN : BJT_PNP);
+ set_qtype((m_model.model_type() == "NPN") ? BJT_NPN : BJT_PNP);
- m_alpha_f = BF / (1.0 + BF);
- m_alpha_r = BR / (1.0 + BR);
+ m_alpha_f = BF / (1.0 + BF);
+ m_alpha_r = BR / (1.0 + BR);
- m_gD_BE.set_param(IS / m_alpha_f, NF, exec().gmin());
- m_gD_BC.set_param(IS / m_alpha_r, NR, exec().gmin());
-}
+ m_gD_BE.set_param(IS / m_alpha_f, NF, exec().gmin(), constants::T0());
+ m_gD_BC.set_param(IS / m_alpha_r, NR, exec().gmin(), constants::T0());
+ }
- } //namespace analog
+} // namespace analog
- namespace devices {
- NETLIB_DEVICE_IMPL_NS(analog, QBJT_EB, "QBJT_EB", "MODEL")
- NETLIB_DEVICE_IMPL_NS(analog, QBJT_switch, "QBJT_SW", "MODEL")
- } // namespace devices
+namespace devices {
+ NETLIB_DEVICE_IMPL_NS(analog, QBJT_EB, "QBJT_EB", "MODEL")
+ NETLIB_DEVICE_IMPL_NS(analog, QBJT_switch, "QBJT_SW", "MODEL")
+} // namespace devices
} // namespace netlist
diff --git a/src/lib/netlist/analog/nld_mosfet.cpp b/src/lib/netlist/analog/nld_mosfet.cpp
new file mode 100644
index 00000000000..f941d06076a
--- /dev/null
+++ b/src/lib/netlist/analog/nld_mosfet.cpp
@@ -0,0 +1,578 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
+/*
+ * nld_mosfet.cpp
+ *
+ * Formulas in here based on the following Sources:
+ *
+ * https://www.imperial.ac.uk/pls/portallive/docs/1/7292573.PDF
+ * http://www3.imperial.ac.uk/pls/portallive/docs/1/56133736.PDF
+ * https://people.rit.edu/lffeee/SPICE_MOSFET_Model_Intro.pdf
+ * https://people.rit.edu/lffeee/SPICE.pdf
+ * http://web.mit.edu/course/6/6.012/SPR98/www/lectures/S98_Lecture10.pdf
+ * http://homepages.rpi.edu/~sawyes/Models_review.pdf
+ * http://jaco.ec.t.kanazawa-u.ac.jp/edu/mix/pdf/3.pdf
+ *
+ * Farid N. Naim, Circuit Simulation (Wiley-IEEE Press, 2010).
+ * Stefan Jahn, Michael Margraf, Vincent Habchi and Raimund Jacob, "Qucs Technical Papers" (2007)
+ *
+ */
+
+#include "netlist/solver/nld_solver.h"
+#include "netlist/nl_setup.h"
+#include "nlid_twoterm.h"
+
+#include <cmath>
+
+#define BODY_CONNECTED_TO_SOURCE (1)
+
+namespace netlist
+{
+namespace analog
+{
+
+ using constants = plib::constants<nl_double>;
+
+ // -----------------------------------------------------------------------------
+ // nld_FET - Base classes
+ // -----------------------------------------------------------------------------
+
+ /*! Class representing the nmos model paramers.
+ *
+ * This is the model representation of the nmos model. Typically, SPICE uses
+ * the following parameters. A "Y" in the first column indicates that the
+ * parameter is actually used in netlist.
+ *
+ * | NL? |Name | Description|Units |Default |Example |
+ * |:---:|------|-----------------------------------------------------------------------|-------|---------:|----------------:|
+ * | Y |Vto | Zero-bias threshold voltage | V | 0 | 1 |
+ * | Y |Kp | Transconductance parameter | A/V² | 0.00002 | 0.00003 |
+ * | Y |Gamma | Bulk threshold parameter | V^½ | 0 | 0.37 |
+ * | Y |Phi | Surface inversion potential | V | 0.6 | 0.65 |
+ * | Y |Lambda| Channel-length modulation (level 1 and 2 only) | 1/V | 0 | 0.02 |
+ * | |Rd | Drain ohmic resistance |W|0|1|
+ * | |Rs | Source ohmic resistance |W|0|1|
+ * | |Cbd | Zero-bias B-D junction capacitance |F|0|20f|
+ * | |Cbs | Zero-bias B-S junction capacitance |F|0|20f|
+ * | Y |Is | Bulk junction saturation current |A|0.00000000000001|1E-015|
+ * | Y |N | Bulk diode emission coefficient |-|1|*
+ * | |Pb | Bulk junction potential |V|0.8|0.87|8|
+ * | Y |Cgso | Gate-source overlap capacitance per meter channel width |F/m|0|0.00000000004|
+ * | Y |Cgdo | Gate-drain overlap capacitance per meter channel width |F/m|0|0.00000000004|*
+ * | Y |Cgbo | Gate-bulk overlap capacitance per meter channel width |F/m|0|0.0000000002|*
+ * | |Rsh | Drain and source diffusion sheet resistance |W|0|10|*
+ * | |Cj | Zero-bias bulk junction bottom capacitance per square meter of junction area|F/m²|0|0.0002|*
+ * | |Mj | Bulk junction bottom grading coefficient |-|0.5|0.5|*
+ * | |Cjsw | Zero-bias bulk junction sidewall capacitance per meter of junction perimeter|F/m|0|1p|*
+ * | |Mjsw | Bulk junction sidewall grading coefficient |-|.50 level 1 .33 level 2,3||
+ * | |Js | Bulk junction saturation current per square-meter of junction area|A/m|0|0.00000001|
+ * | Y |Tox | Oxide thickness |m|0.0000001|0.0000001|
+ * | Y |Nsub | Substrate doping |1/cm³|0|4000000000000000|
+ * | |Nss | Surface state density |1/cm²|0|10000000000|
+ * | |Nfs | Fast surface state |1/cm²|0|10000000000|*
+ * | |TPG | Type of gate material: +1 opp. to substrate -1 same as substrate 0 Al gate|-|1|
+ * | |Xj | Metallurgical junction depth |m|0|1µ|*
+ * | Y |Ld | Lateral diffusion |m|0|0.8µ|
+ * | Y |Uo | Surface mobility |cm²/V/s|600|700|
+ * | |Ucrit | Critical field for mobility degradation (level 2 only) |V/cm|10000|10000|
+ * | |Uexp | Critical field exponent in mobility degradation (level 2 only) |-|0|0.1|
+ * | |Utra | Transverse field coefficient (level 2 only) |-|0|0.3|*
+ * | |Vmax | Maximum carrier drift velocity (levels 2 & 3 only) |m/s|0|50000|
+ * | |Neff | Total channel-charge exponent (level 2 only) |-|1|5|
+ * | |Kf | Flicker noise coefficient |-|0|1E-026|
+ * | |Af | Flicker noise exponent |-|1|1.2|
+ * | |Fc | Coefficient for forward-bias depletion capacitance formula |-|0.5|
+ * | |Delta | Width effect on threshold voltage(levels 2 and 3) |-|0|1|
+ * | |Theta | Mobility modulation (level 3 only) |-|0|0.1|
+ * | |Eta | Static feedback (level 3 only) |-|0|1|
+ * | |Kappa | Saturation field (level 3 only) |0.2|0.5|
+ * | |Tnom | Parameter measurement temperature |ºC|27|50||
+ * | Y |L | Length scaling |-|100e-6||
+ * | Y |W | Width scaling |-|100e-6||
+ * */
+
+ class fet_model_t : public param_model_t
+ {
+ public:
+ fet_model_t(device_t &device, const pstring &name, const pstring &val)
+ : param_model_t(device, name, val)
+ , m_VTO(*this, "VTO")
+ , m_N(*this, "N")
+ , m_ISS(*this, "IS") // Haven't seen a model using ISS / ISD
+ , m_ISD(*this, "IS")
+ , m_LD(*this, "LD")
+ , m_L(*this, "L")
+ , m_W(*this, "W")
+ , m_TOX(*this, "TOX")
+ , m_KP(*this, "KP")
+ , m_UO(*this, "UO")
+ , m_PHI(*this, "PHI")
+ , m_NSUB(*this, "NSUB")
+ , m_GAMMA(*this, "GAMMA")
+ , m_LAMBDA(*this, "LAMBDA")
+ , m_RD(*this, "RD")
+ , m_RS(*this, "RS")
+ , m_CGSO(*this, "CGSO")
+ , m_CGDO(*this, "CGDO")
+ , m_CGBO(*this, "CGBO")
+ {}
+
+ value_t m_VTO; //!< Threshold voltage [V]
+ value_t m_N; //!< Bulk diode emission coefficient
+ value_t m_ISS; //!< Body diode saturation current
+ value_t m_ISD; //!< Body diode saturation current
+ value_t m_LD; //!< Lateral diffusion [m]
+ value_t m_L; //!< Length scaling
+ value_t m_W; //!< Width scaling
+ value_t m_TOX; //!< Oxide thickness
+ value_t m_KP; //!< Transconductance parameter [A/V²]
+ value_t m_UO; //!< Surface mobility [cm²/V/s]
+ value_t m_PHI; //!< Surface inversion potential [V]
+ value_t m_NSUB; //!< Substrate doping [1/cm³]
+ value_t m_GAMMA; //!< Bulk threshold parameter [V^½]
+ value_t m_LAMBDA; //!< Channel-length modulation [1/V]
+ value_t m_RD; //!< Drain ohmic resistance
+ value_t m_RS; //!< Source ohmic resistance
+ value_t m_CGSO; //!< Gate-source overlap capacitance per meter channel width
+ value_t m_CGDO; //!< Gate-drain overlap capacitance per meter channel width
+ value_t m_CGBO; //!< Gate-bulk overlap capacitance per meter channel width
+ };
+
+ // Have a common start for mosfets
+
+ NETLIB_OBJECT(FET)
+ {
+ public:
+ enum q_type {
+ FET_NMOS,
+ FET_PMOS
+ };
+
+ NETLIB_CONSTRUCTOR(FET)
+ , m_model(*this, "MODEL", "NMOS")
+ , m_qtype(FET_NMOS)
+ {
+ }
+
+ NETLIB_IS_DYNAMIC(true)
+
+ //NETLIB_RESETI();
+ NETLIB_UPDATEI() { }
+
+ q_type qtype() const { return m_qtype; }
+ bool is_qtype(q_type atype) const { return m_qtype == atype; }
+ void set_qtype(q_type atype) { m_qtype = atype; }
+ protected:
+
+ fet_model_t m_model;
+ private:
+ q_type m_qtype;
+ };
+
+ // -----------------------------------------------------------------------------
+ // nld_QBJT_EB
+ // -----------------------------------------------------------------------------
+
+ NETLIB_OBJECT_DERIVED(MOSFET, FET)
+ {
+ public:
+ NETLIB_CONSTRUCTOR_DERIVED(MOSFET, FET)
+ , m_DG(*this, "m_DG", true)
+ , m_SG(*this, "m_SG", true)
+ , m_SD(*this, "m_SD", true)
+ , m_D_BD(*this, "m_D_BD")
+#if (!BODY_CONNECTED_TO_SOURCE)
+ , m_D_BS(*this, "m_D_BS")
+#endif
+ , m_cap_gb(*this, "m_cap_gb")
+ , m_cap_gs(*this, "m_cap_gs")
+ , m_cap_gd(*this, "m_cap_gd")
+ , m_phi(0.0)
+ , m_gamma(0.0)
+ , m_vto(0.0)
+ , m_beta(0.0)
+ , m_lambda(0.0)
+ , m_Leff(0.0)
+ , m_CoxWL(0.0)
+ , m_polarity(qtype() == FET_NMOS ? 1.0 : -1.0)
+ , m_Cgb(0.0)
+ , m_Cgs(0.0)
+ , m_Cgd(0.0)
+
+ {
+ register_subalias("S", m_SG.m_P); // Source
+ register_subalias("G", m_SG.m_N); // Gate
+
+ register_subalias("D", m_DG.m_P); // Drain
+
+ connect(m_SG.m_P, m_SD.m_P);
+ connect(m_SG.m_N, m_DG.m_N);
+ connect(m_DG.m_P, m_SD.m_N);
+
+#if 0
+ if (m_model.m_CJE > 0.0)
+ {
+ create_and_register_subdevice("m_CJE", m_CJE);
+ connect("B", "m_CJE.1");
+ connect("E", "m_CJE.2");
+ }
+ if (m_model.m_CJC > 0.0)
+ {
+ create_and_register_subdevice("m_CJC", m_CJC);
+ connect("B", "m_CJC.1");
+ connect("C", "m_CJC.2");
+ }
+#endif
+ }
+
+ NETLIB_IS_TIMESTEP(true)
+
+ NETLIB_TIMESTEPI()
+ {
+ const nl_double Ugd = -m_DG.deltaV() * m_polarity; // Gate - Drain
+ const nl_double Ugs = -m_SG.deltaV() * m_polarity; // Gate - Source
+ const nl_double Ubs = 0.0; // Bulk - Source == 0 if connected
+ const nl_double Ugb = Ugs - Ubs;
+
+ m_cap_gb.timestep(m_Cgb, Ugb, step);
+ m_cap_gs.timestep(m_Cgs, Ugs, step);
+ m_cap_gd.timestep(m_Cgd, Ugd, step);
+ }
+
+ protected:
+
+ NETLIB_RESETI();
+ NETLIB_UPDATEI();
+ NETLIB_UPDATE_PARAMI();
+ NETLIB_UPDATE_TERMINALSI();
+
+ private:
+
+ nld_twoterm m_DG;
+ nld_twoterm m_SG;
+ nld_twoterm m_SD;
+
+ generic_diode<diode_e::MOS> m_D_BD;
+#if (!BODY_CONNECTED_TO_SOURCE)
+ generic_diode<diode_e::MOS> m_D_BS;
+#endif
+
+ generic_capacitor<capacitor_e::VARIABLE_CAPACITY> m_cap_gb;
+ generic_capacitor<capacitor_e::VARIABLE_CAPACITY> m_cap_gs;
+ generic_capacitor<capacitor_e::VARIABLE_CAPACITY> m_cap_gd;
+
+
+ nl_double m_phi;
+ nl_double m_gamma;
+ nl_double m_vto;
+ nl_double m_beta;
+ nl_double m_lambda;
+
+ /* used in capacitance calculation */
+ nl_double m_Leff;
+ nl_double m_CoxWL;
+ nl_double m_polarity;
+
+ /* capacitance values */
+
+ nl_double m_Cgb;
+ nl_double m_Cgs;
+ nl_double m_Cgd;
+
+ void set_cap(generic_capacitor<capacitor_e::VARIABLE_CAPACITY> cap,
+ nl_double capval, nl_double V,
+ nl_double &g11, nl_double &g12, nl_double &g21, nl_double &g22,
+ nl_double &I1, nl_double &I2)
+ {
+ const nl_double I = cap.Ieq(capval, V) * m_polarity;
+ const nl_double G = cap.G(capval);
+ g11 += G; g12 -= G; g21 -= G; g22 += G;
+ I1 -= I; I2 += I;
+ //printf("Cap: %g\n", capval);
+ }
+
+ void calculate_caps(nl_double Vgs, nl_double Vgd, nl_double Vth,
+ nl_double &Cgs, nl_double &Cgd, nl_double &Cgb)
+ {
+ nl_double Vctrl = Vgs - Vth * m_polarity;
+ // Cut off - now further differentiated into 3 different formulas
+ // Accumulation
+ if (Vctrl <= -m_phi)
+ {
+ Cgb = m_CoxWL;
+ Cgs = 0.0;
+ Cgd = 0.0;
+ }
+ else if (Vctrl <= -m_phi / 2.0)
+ {
+ Cgb = -Vctrl * m_CoxWL / m_phi;
+ Cgs = 0.0;
+ Cgd = 0.0;
+ }
+ // Depletion
+ else if (Vctrl <= 0)
+ {
+ Cgb = -Vctrl * m_CoxWL / m_phi;
+ Cgs = (Vctrl * m_CoxWL * (4.0 / 3.0) / m_phi + (2.0 / 3.0) * m_CoxWL);
+ Cgd = 0.0;
+ }
+ else
+ {
+ const nl_double Vdsat = Vctrl;
+ const nl_double Vds = Vgs - Vgd;
+ // saturation
+ if (Vdsat <= Vds)
+ {
+ Cgb = 0;
+ Cgs = (2.0 / 3.0) * m_CoxWL;
+ Cgd = 0;
+ }
+ else
+ {
+ // linear
+ const nl_double Sqr1 = std::pow(Vdsat - Vds, 2);
+ const nl_double Sqr2 = std::pow(2.0 * Vdsat - Vds, 2);
+ Cgb = 0;
+ Cgs = m_CoxWL * (1.0 - Sqr1 / Sqr2) * (2.0 / 3.0);
+ Cgd = m_CoxWL * (1.0 - Vdsat * Vdsat / Sqr2) * (2.0 / 3.0);
+ }
+ }
+ }
+ };
+
+ // ----------------------------------------------------------------------------------------
+ // nld_Q - Ebers Moll
+ // ----------------------------------------------------------------------------------------
+
+ NETLIB_UPDATE(MOSFET)
+ {
+ if (!m_SG.m_P.net().isRailNet())
+ m_SG.m_P.solve_now(); // Basis
+ else if (!m_SG.m_N.net().isRailNet())
+ m_SG.m_N.solve_now(); // Emitter
+ else
+ m_DG.m_N.solve_now(); // Collector
+ }
+
+ NETLIB_RESET(MOSFET)
+ {
+ NETLIB_NAME(FET)::reset();
+ }
+
+ NETLIB_UPDATE_TERMINALS(MOSFET)
+ {
+ const nl_double Vgd = -m_DG.deltaV() * m_polarity; // Gate - Drain
+ const nl_double Vgs = -m_SG.deltaV() * m_polarity; // Gate - Source
+ const nl_double Vbs = 0.0; // Bulk - Source == 0 if connected
+ const nl_double Vbd = m_SD.deltaV() * m_polarity; // Bulk - Drain = Source - Drain
+ const nl_double Vds = Vgs - Vgd;
+
+#if (!BODY_CONNECTED_TO_SOURCE)
+ m_D_BS.update_diode(Vbs);
+#endif
+ m_D_BD.update_diode(Vbd);
+
+ // Are we in forward mode ?
+ // in backward mode, just swap source and drain
+ const bool is_forward = Vds >= 0;
+
+ // calculate Vth
+ const nl_double Vbulk = is_forward ? Vbs : Vbd;
+ const nl_double phi_m_Vbulk = (m_phi > Vbulk) ? std::sqrt(m_phi - Vbulk) : 0.0;
+ const nl_double Vth = m_vto * m_polarity + m_gamma * (phi_m_Vbulk - std::sqrt(m_phi));
+
+ const nl_double Vctrl = (is_forward ? Vgs : Vgd) - Vth;
+
+ nl_double Ids, gm, gds, gmb;
+ const nl_double absVds = std::abs(Vds);
+
+ if (Vctrl <= 0.0)
+ {
+ // cutoff region
+ Ids = 0.0;
+ gm = 0.0;
+ gds = 0.0;
+ gmb = 0.0;
+ }
+ else
+ {
+ const nl_double beta = m_beta * (1.0 + m_lambda * absVds);
+ if (Vctrl <= absVds)
+ {
+ // saturation region
+ Ids = beta * Vctrl * Vctrl / 2.0;
+ gm = beta * Vctrl;
+ gds = m_lambda * m_beta * Vctrl * Vctrl / 2.0;
+ }
+ else
+ {
+ // linear region
+ Ids = beta * absVds * (Vctrl - absVds / 2);
+ gm = beta * absVds;
+ gds = beta * (Vctrl - absVds) + m_lambda * m_beta * absVds * (Vctrl - absVds / 2.0);
+ }
+
+ // backgate transconductance
+ const nl_double bgtc = (phi_m_Vbulk != 0.0) ? (m_gamma / phi_m_Vbulk / 2.0) : 0.0;
+ gmb = gm * bgtc;
+ }
+
+ // FIXME: these are needed to compute capacitance
+ // nl_double Udsat = pol * std::max (Utst, 0.0);
+ // Uon = pol * Vth;
+
+ // compute bulk diode equivalent currents
+
+ const nl_double IeqBD = m_D_BD.Ieq();
+ const nl_double gbd = m_D_BD.G();
+#if (!BODY_CONNECTED_TO_SOURCE)
+ const nl_double IeqBS = m_D_BS.Ieq();
+ const nl_double gbs = m_D_BS.G();
+#else
+ const nl_double IeqBS = 0.0;
+ const nl_double gbs = 0.0;
+#endif
+ // exchange controlling nodes if necessary
+ const nl_double gsource = is_forward ? (gm + gmb) : 0;
+ const nl_double gdrain = is_forward ? 0.0 : (gm + gmb);
+
+ const nl_double IeqDS = (is_forward) ?
+ Ids - gm * Vgs - gmb * Vbs - gds * Vds
+ : -Ids - gm * Vgd - gmb * Vbd - gds * Vds;
+
+ // IG = 0
+ nl_double IG = 0.0;
+ nl_double ID = (+IeqBD - IeqDS) * m_polarity;
+ nl_double IS = (+IeqBS + IeqDS) * m_polarity;
+ nl_double IB = (-IeqBD - IeqBS) * m_polarity;
+
+ nl_double gGG = 0.0;
+ nl_double gGD = 0.0;
+ nl_double gGS = 0.0;
+ nl_double gGB = 0.0;
+
+ nl_double gDG = gm;
+ nl_double gDD = gds + gbd - gdrain;
+ const nl_double gDS = -gds - gsource;
+ const nl_double gDB = gmb - gbd;
+
+ nl_double gSG = -gm;
+ const nl_double gSD = -gds + gdrain;
+ nl_double gSS = gbs + gds + gsource;
+ const nl_double gSB = -gbs - gmb;
+
+ nl_double gBG = 0.0;
+ const nl_double gBD = -gbd;
+ const nl_double gBS = -gbs;
+ nl_double gBB = gbs + gbd;
+
+ const nl_double Vgb = Vgs - Vbs;
+
+ if (is_forward)
+ calculate_caps(Vgs, Vgd, Vth, m_Cgs, m_Cgd, m_Cgb);
+ else
+ calculate_caps(Vgd, Vgs, Vth, m_Cgd, m_Cgs, m_Cgb);
+
+ set_cap(m_cap_gb, m_Cgb + m_model.m_CGBO * m_Leff, Vgb, gGG, gGB, gBG, gBB, IG, IB);
+ set_cap(m_cap_gs, m_Cgs + m_model.m_CGSO * m_model.m_W, Vgs, gGG, gGS, gSG, gSS, IG, IS);
+ set_cap(m_cap_gd, m_Cgd + m_model.m_CGDO * m_model.m_W, Vgd, gGG, gGD, gDG, gDD, IG, ID);
+
+ // Source connected to body, Diode S-B shorted!
+ const nl_double gSSBB = gSS + gBB + gBS + gSB;
+
+ // S G
+ m_SG.set_mat( gSSBB, gSG + gBG, +(IS + IB), // S
+ gGS + gGB, gGG, IG ); // G
+ // D G
+ m_DG.set_mat( gDD, gDG, +ID, // D
+ gGD, 0.0, 0.0 ); // G
+ // S D
+ m_SD.set_mat( 0.0, gSD + gBD, 0.0, // S
+ gDS + gDB, 0.0, 0.0); // D
+ }
+
+ NETLIB_UPDATE_PARAM(MOSFET)
+ {
+ set_qtype((m_model.model_type() == "NMOS") ? FET_NMOS : FET_PMOS);
+ m_polarity = qtype() == FET_NMOS ? 1.0 : -1.0;
+
+ /*
+ * From http://ltwiki.org/LTspiceHelp/LTspiceHelp/M_MOSFET.htm :
+ *
+ * VTO, KP, LAMBDA, PHI and GAMMA. These parameters are computed
+ * if the process parameters(NSUB, TOX,...) are given, but
+ * user-specified values always override.
+ *
+ * But couldn't find a formula for lambda anywhere
+ *
+ */
+
+ m_lambda = m_model.m_LAMBDA; // FIXME: m_lambda only set once
+
+ // calculate effective channel length
+ m_Leff = m_model.m_L - 2 * m_model.m_LD;
+ nl_assert_always(m_Leff > 0.0, "Effective Lateral diffusion would be negative for model " + m_model.name());
+
+ nl_double Cox = (m_model.m_TOX > 0.0) ? (constants::eps_SiO2() * constants::eps_0() / m_model.m_TOX) : 0.0;
+
+ // calculate DC transconductance coefficient
+ if (m_model.m_KP > 0)
+ m_beta = m_model.m_KP * m_model.m_W / m_Leff;
+ else if (Cox > 0 && m_model.m_UO > 0)
+ m_beta = m_model.m_UO * 1e-4 * Cox * m_model.m_W / m_Leff;
+ else
+ m_beta = 2e-5 * m_model.m_W / m_Leff;
+
+ // Bulk diodes
+
+ m_D_BD.set_param(m_model.m_ISD, m_model.m_N, exec().gmin(), constants::T0());
+#if (!BODY_CONNECTED_TO_SOURCE)
+ m_D_BS.set_param(m_model.m_ISS, m_model.m_N, exec().gmin(), constants::T0());
+#endif
+
+ //FIXME::UT can disappear
+ const double Vt = constants::T0() * constants::k_b() / constants::Q_e();
+
+ // calculate surface potential if not given
+
+ if (m_model.m_PHI > 0.0)
+ m_phi = m_model.m_PHI;
+ else if (m_model.m_NSUB > 0.0)
+ {
+ nl_assert_always(m_model.m_NSUB * 1e6 >= constants::NiSi(), "Error calculating phi for model " + m_model.name());
+ m_phi = 2 * Vt * std::log (m_model.m_NSUB * 1e6 / constants::NiSi());
+ }
+ else
+ m_phi = 0.6;
+
+ // calculate bulk threshold if not given
+ if (m_model.m_GAMMA > 0.0)
+ m_gamma = m_model.m_GAMMA;
+ else
+ {
+ if (Cox > 0.0 && m_model.m_NSUB > 0)
+ m_gamma = std::sqrt (2.0 * constants::Q_e() * constants::eps_Si() * constants::eps_0() * m_model.m_NSUB * 1e6) / Cox;
+ else
+ m_gamma = 0.0;
+ }
+
+ m_vto = m_model.m_VTO;
+ nl_assert_always(m_vto != 0.0, "Threshold voltage not specified for " + m_model.name());
+
+ /* FIXME: VTO if missing may be calculated from TPG, NSS and temperature. Usually models
+ * specify VTO so skip this here.
+ */
+
+ m_CoxWL = Cox * m_model.m_W * m_Leff;
+
+ //printf("Cox: %g\n", m_Cox);
+
+ }
+
+} // namespace analog
+
+namespace devices {
+ NETLIB_DEVICE_IMPL_NS(analog, MOSFET, "MOSFET", "MODEL")
+} // namespace devices
+
+} // namespace netlist
diff --git a/src/lib/netlist/analog/nld_mosfet.h b/src/lib/netlist/analog/nld_mosfet.h
new file mode 100644
index 00000000000..32011d709d8
--- /dev/null
+++ b/src/lib/netlist/analog/nld_mosfet.h
@@ -0,0 +1,21 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
+/*
+ * nld_mosfet.h
+ *
+ */
+
+#ifndef NLD_MOSFET_H_
+#define NLD_MOSFET_H_
+
+#include "netlist/nl_setup.h"
+
+// -----------------------------------------------------------------------------
+// Macros
+// -----------------------------------------------------------------------------
+
+#define MOSFET(name, model) \
+ NET_REGISTER_DEV(MOSFET, name) \
+ NETDEV_PARAMI(name, MODEL, model)
+
+#endif /* NLD_MOSFET_H_ */
diff --git a/src/lib/netlist/analog/nld_opamps.cpp b/src/lib/netlist/analog/nld_opamps.cpp
index 4b5a5f8ba38..8c3c655bfa9 100644
--- a/src/lib/netlist/analog/nld_opamps.cpp
+++ b/src/lib/netlist/analog/nld_opamps.cpp
@@ -129,10 +129,10 @@ namespace netlist
}
else if (m_type == 3)
{
- register_sub("CP1", m_CP);
- register_sub("EBUF", m_EBUF);
- register_sub("DN", m_DN, "D(IS=1e-15 N=1)");
- register_sub("DP", m_DP, "D(IS=1e-15 N=1)");
+ create_and_register_subdevice("CP1", m_CP);
+ create_and_register_subdevice("EBUF", m_EBUF);
+ create_and_register_subdevice("DN", m_DN, "D(IS=1e-15 N=1)");
+ create_and_register_subdevice("DP", m_DP, "D(IS=1e-15 N=1)");
//m_DP->m_model.setTo("D(IS=1e-15 N=1)");
//m_DN->m_model.setTo("D(IS=1e-15 N=1)");
diff --git a/src/lib/netlist/analog/nlid_twoterm.cpp b/src/lib/netlist/analog/nlid_twoterm.cpp
index f945100c652..5019c98c0e4 100644
--- a/src/lib/netlist/analog/nlid_twoterm.cpp
+++ b/src/lib/netlist/analog/nlid_twoterm.cpp
@@ -16,68 +16,6 @@ namespace netlist
{
namespace analog
{
-// ----------------------------------------------------------------------------------------
-// generic_diode
-// ----------------------------------------------------------------------------------------
-
-generic_diode::generic_diode(device_t &dev, const pstring &name)
- : m_Vd(dev, name + ".m_Vd", 0.7)
- , m_Id(dev, name + ".m_Id", 0.0)
- , m_G(dev, name + ".m_G", 1e-15)
- , m_Vt(0.0)
- , m_Vmin(0.0)
- , m_Is(0.0)
- , m_logIs(0.0)
- , m_n(0.0)
- , m_gmin(1e-15)
- , m_VtInv(0.0)
- , m_Vcrit(0.0)
-{
- set_param(1e-15, 1, 1e-15);
-}
-
-void generic_diode::set_param(const nl_double Is, const nl_double n, nl_double gmin)
-{
- static constexpr double csqrt2 = 1.414213562373095048801688724209; //std::sqrt(2.0);
- m_Is = Is;
- m_logIs = std::log(Is);
- m_n = n;
- m_gmin = gmin;
-
- m_Vt = 0.0258 * m_n;
- m_Vmin = -5.0 * m_Vt;
-
- m_Vcrit = m_Vt * std::log(m_Vt / m_Is / csqrt2);
- m_VtInv = 1.0 / m_Vt;
-}
-
-void generic_diode::update_diode(const nl_double nVd)
-{
- if (nVd < m_Vmin)
- {
- m_Vd = nVd;
- m_G = m_gmin;
- m_Id = - m_Is;
- }
- else if (nVd < m_Vcrit)
- {
- m_Vd = nVd;
- //m_Vd = m_Vd + 10.0 * m_Vt * std::tanh((nVd - m_Vd) / 10.0 / m_Vt);
- //const double IseVDVt = m_Is * std::exp(m_Vd * m_VtInv);
- const double IseVDVt = std::exp(m_logIs + m_Vd * m_VtInv);
- m_Id = IseVDVt - m_Is;
- m_G = IseVDVt * m_VtInv + m_gmin;
- }
- else
- {
- const double a = std::max((nVd - m_Vd) * m_VtInv, plib::constants<nl_double>::cast(-0.99));
- m_Vd = m_Vd + std::log1p(a) * m_Vt;
- //const double IseVDVt = m_Is * std::exp(m_Vd * m_VtInv);
- const double IseVDVt = std::exp(m_logIs + m_Vd * m_VtInv);
- m_Id = IseVDVt - m_Is;
- m_G = IseVDVt * m_VtInv + m_gmin;
- }
-}
// ----------------------------------------------------------------------------------------
// nld_twoterm
@@ -193,40 +131,14 @@ NETLIB_UPDATE_PARAM(POT2)
}
// ----------------------------------------------------------------------------------------
-// nld_C
-// ----------------------------------------------------------------------------------------
-
-NETLIB_RESET(C)
-{
- // FIXME: Startup conditions
- set_G_V_I(exec().gmin(), 0.0, -5.0 / exec().gmin());
- //set(exec().gmin(), 0.0, 0.0);
-}
-
-NETLIB_UPDATE_PARAM(C)
-{
- m_GParallel = exec().gmin();
-}
-
-NETLIB_TIMESTEP(C)
-{
- /* Gpar should support convergence */
- const nl_double G = m_C() / step + m_GParallel;
- const nl_double I = -G * deltaV();
- set_mat( G, -G, -I,
- -G, G, I);
- //set(G, 0.0, I);
-}
-
-// ----------------------------------------------------------------------------------------
// nld_L
// ----------------------------------------------------------------------------------------
NETLIB_RESET(L)
{
- m_GParallel = exec().gmin();
+ m_gmin = exec().gmin();
m_I = 0.0;
- m_G = m_GParallel;
+ m_G = m_gmin;
set_mat( m_G, -m_G, -m_I,
-m_G, m_G, m_I);
//set(1.0/NETLIST_GMIN, 0.0, -5.0 * NETLIST_GMIN);
@@ -240,7 +152,7 @@ NETLIB_TIMESTEP(L)
{
/* Gpar should support convergence */
m_I += m_I + m_G * deltaV();
- m_G = step / m_L() + m_GParallel;
+ m_G = step / m_L() + m_gmin;
set_mat( m_G, -m_G, -m_I,
-m_G, m_G, m_I);
//set(m_G, 0.0, m_I);
@@ -255,7 +167,7 @@ NETLIB_RESET(D)
nl_double Is = m_model.m_IS;
nl_double n = m_model.m_N;
- m_D.set_param(Is, n, exec().gmin());
+ m_D.set_param(Is, n, exec().gmin(), constants::T0());
set_G_V_I(m_D.G(), 0.0, m_D.Ieq());
}
@@ -264,7 +176,7 @@ NETLIB_UPDATE_PARAM(D)
nl_double Is = m_model.m_IS;
nl_double n = m_model.m_N;
- m_D.set_param(Is, n, exec().gmin());
+ m_D.set_param(Is, n, exec().gmin(), constants::T0());
}
NETLIB_UPDATE_TERMINALS(D)
diff --git a/src/lib/netlist/analog/nlid_twoterm.h b/src/lib/netlist/analog/nlid_twoterm.h
index 08c7235caf1..aaf35fe9e28 100644
--- a/src/lib/netlist/analog/nlid_twoterm.h
+++ b/src/lib/netlist/analog/nlid_twoterm.h
@@ -35,8 +35,11 @@
#include "netlist/nl_base.h"
#include "netlist/nl_setup.h"
+#include "netlist/solver/nld_solver.h"
#include "plib/pfunction.h"
+#include <cmath>
+
// -----------------------------------------------------------------------------
// Implementation
// -----------------------------------------------------------------------------
@@ -84,7 +87,7 @@ public:
void solve_now();
- void solve_later(netlist_time delay = netlist_time::from_nsec(1));
+ void solve_later(netlist_time delay = netlist_time::quantum());
void set_G_V_I(const nl_double G, const nl_double V, const nl_double I)
{
@@ -217,6 +220,131 @@ private:
param_logic_t m_Reverse;
};
+// -----------------------------------------------------------------------------
+// A generic capacitor model
+// -----------------------------------------------------------------------------
+
+enum class capacitor_e
+{
+ VARIABLE_CAPACITY,
+ CONSTANT_CAPACITY
+};
+
+template <capacitor_e TYPE>
+class generic_capacitor
+{
+};
+
+#if 1
+template <>
+class generic_capacitor<capacitor_e::VARIABLE_CAPACITY>
+{
+public:
+ generic_capacitor(device_t &dev, const pstring &name)
+ : m_h(dev, name + ".m_h", 0.0)
+ , m_c(dev, name + ".m_c", 0.0)
+ , m_v(dev, name + ".m_v", 0.0)
+ , m_gmin(0.0)
+ {
+ }
+
+ capacitor_e type() const { return capacitor_e::VARIABLE_CAPACITY; }
+
+ nl_double G(nl_double cap) const
+ {
+ //return m_h * (2.0 * cap - m_c) + m_gmin;
+ return m_h * 0.5 * (cap + m_c) + m_gmin;
+ }
+
+ nl_double Ieq(nl_double cap, nl_double v) const
+ {
+ plib::unused_var(v);
+// return m_h * (cap * v - m_charge) - G(cap) * v;
+ return -m_h * 0.5 * (cap + m_c) * m_v;
+ }
+
+ void timestep(nl_double cap, nl_double v, nl_double step)
+ {
+ m_h = 1.0 / step;
+ m_c = cap;
+ m_v = v;
+ }
+
+ void setparams(nl_double gmin) { m_gmin = gmin; }
+
+private:
+ state_var<double> m_h;
+ state_var<double> m_c;
+ state_var<double> m_v;
+ nl_double m_gmin;
+};
+#else
+template <>
+class generic_capacitor<capacitor_e::VARIABLE_CAPACITY>
+{
+public:
+ generic_capacitor(device_t &dev, const pstring &name)
+ : m_h(dev, name + ".m_h", 0.0)
+ , m_charge(dev, name + ".m_charge", 0.0)
+ , m_v(dev, name + ".m_v", 0.0)
+ , m_gmin(0.0)
+ {
+ }
+
+ constexpr capacitor_e type() const { return capacitor_e::VARIABLE_CAPACITY; }
+
+ constexpr nl_double G(nl_double cap) const
+ {
+ return cap * m_h + m_gmin;
+ }
+
+ constexpr nl_double Ieq(nl_double cap, nl_double v) const
+ {
+// return m_h * (cap * v - m_charge) - G(cap) * v;
+// return m_h * (cap * (v - m_v)) - G(cap) * v;
+ return -m_h * cap * m_v;
+ }
+
+ void timestep(nl_double cap, nl_double v, nl_double step)
+ {
+ m_h = 1.0 / step;
+ m_charge = m_charge + cap * (v - m_v);
+ m_v = v;
+ }
+
+ void setparams(nl_double gmin) { m_gmin = gmin; }
+
+private:
+ state_var<double> m_h;
+ state_var<double> m_charge;
+ state_var<double> m_v;
+ nl_double m_gmin;
+};
+#endif
+template <>
+class generic_capacitor<capacitor_e::CONSTANT_CAPACITY>
+{
+public:
+ generic_capacitor(device_t &dev, const pstring &name)
+ : m_h(dev, name + ".m_h", 0.0)
+ , m_gmin(0.0)
+ {
+ }
+
+ capacitor_e type() const { return capacitor_e::CONSTANT_CAPACITY; }
+ nl_double G(nl_double cap) const { return cap * m_h + m_gmin; }
+ nl_double Ieq(nl_double cap, nl_double v) const { return - G(cap) * v; }
+
+ void timestep(nl_double cap, nl_double v, nl_double step)
+ {
+ plib::unused_var(cap, v);
+ m_h = 1.0 / step;
+ }
+ void setparams(nl_double gmin) { m_gmin = gmin; }
+private:
+ state_var<nl_double> m_h;
+ nl_double m_gmin;
+};
// -----------------------------------------------------------------------------
// nld_C
@@ -227,25 +355,45 @@ NETLIB_OBJECT_DERIVED(C, twoterm)
public:
NETLIB_CONSTRUCTOR_DERIVED(C, twoterm)
, m_C(*this, "C", 1e-6)
- , m_GParallel(0.0)
+ , m_cap(*this, "m_cap")
{
- //register_term("1", m_P);
- //register_term("2", m_N);
}
NETLIB_IS_TIMESTEP(true)
- NETLIB_TIMESTEPI();
+ NETLIB_TIMESTEPI()
+ {
+ m_cap.timestep(m_C(), deltaV(), step);
+ if (m_cap.type() == capacitor_e::CONSTANT_CAPACITY)
+ {
+ const nl_double I = m_cap.Ieq(m_C(), deltaV());
+ const nl_double G = m_cap.G(m_C());
+ set_mat( G, -G, -I,
+ -G, G, I);
+ }
+ }
+
+ NETLIB_IS_DYNAMIC(m_cap.type() == capacitor_e::VARIABLE_CAPACITY)
+ NETLIB_UPDATE_TERMINALSI()
+ {
+ const nl_double I = m_cap.Ieq(m_C(), deltaV());
+ const nl_double G = m_cap.G(m_C());
+ set_mat( G, -G, -I,
+ -G, G, I);
+ }
param_double_t m_C;
- NETLIB_RESETI();
+ NETLIB_RESETI()
+ {
+ m_cap.setparams(exec().gmin());
+ }
protected:
//NETLIB_UPDATEI();
- NETLIB_UPDATE_PARAMI();
+ NETLIB_UPDATE_PARAMI() { }
private:
- nl_double m_GParallel;
-
+ //generic_capacitor<capacitor_e::VARIABLE_CAPACITY> m_cap;
+ generic_capacitor<capacitor_e::CONSTANT_CAPACITY> m_cap;
};
// -----------------------------------------------------------------------------
@@ -257,7 +405,7 @@ NETLIB_OBJECT_DERIVED(L, twoterm)
public:
NETLIB_CONSTRUCTOR_DERIVED(L, twoterm)
, m_L(*this, "L", 1e-6)
- , m_GParallel(0.0)
+ , m_gmin(0.0)
, m_G(0.0)
, m_I(0.0)
{
@@ -276,7 +424,7 @@ protected:
private:
param_double_t m_L;
- nl_double m_GParallel;
+ nl_double m_gmin;
nl_double m_G;
nl_double m_I;
};
@@ -285,14 +433,82 @@ private:
// A generic diode model to be used in other devices (Diode, BJT ...)
// -----------------------------------------------------------------------------
+enum class diode_e
+{
+ BIPOLAR,
+ MOS
+};
+
+template <diode_e TYPE>
class generic_diode
{
public:
- generic_diode(device_t &dev, const pstring &name);
+ generic_diode(device_t &dev, const pstring &name)
+ : m_Vd(dev, name + ".m_Vd", 0.7)
+ , m_Id(dev, name + ".m_Id", 0.0)
+ , m_G(dev, name + ".m_G", 1e-15)
+ , m_Vt(0.0)
+ , m_Vmin(0.0) // not used in MOS model
+ , m_Is(0.0)
+ , m_logIs(0.0)
+ , m_n(0.0)
+ , m_gmin(1e-15)
+ , m_VtInv(0.0)
+ , m_Vcrit(0.0)
+ {
+ set_param(1e-15, 1, 1e-15, 300.0);
+ }
- void update_diode(const double nVd);
+ void update_diode(const double nVd)
+ {
+ if (TYPE == diode_e::BIPOLAR && nVd < m_Vmin)
+ {
+ m_Vd = nVd;
+ m_G = m_gmin;
+ m_Id = - m_Is;
+ }
+ else if (TYPE == diode_e::MOS && nVd < constants::zero())
+ {
+ m_Vd = nVd;
+ m_G = m_Is * m_VtInv + m_gmin;
+ m_Id = m_G * m_Vd;
+ }
+ // FIXME: For MOS, stop here, the critical code path will not converge
+ else if (TYPE == diode_e::MOS || nVd < m_Vcrit)
+ {
+ m_Vd = nVd;
+ const double IseVDVt = std::exp(std::min(300.0, m_logIs + m_Vd * m_VtInv));
+ m_Id = IseVDVt - m_Is;
+ m_G = IseVDVt * m_VtInv + m_gmin;
+ }
+ else
+ {
+ const double a = std::max((nVd - m_Vd) * m_VtInv, constants::cast(-0.99));
+ m_Vd = m_Vd + std::log1p(a) * m_Vt;
+ //const double IseVDVt = m_Is * std::exp(m_Vd * m_VtInv);
+ const double IseVDVt = std::exp(m_logIs + m_Vd * m_VtInv);
+ m_Id = IseVDVt - m_Is;
+ m_G = IseVDVt * m_VtInv + m_gmin;
+ }
+ }
+
+
+ void set_param(const double Is, const double n, double gmin, double temp)
+ {
+ static constexpr double csqrt2 = 1.414213562373095048801688724209; //std::sqrt(2.0);
+ m_Is = Is;
+ m_logIs = std::log(Is);
+ m_n = n;
+ m_gmin = gmin;
+
+ m_Vt = m_n * temp * constants::k_b() / constants::Q_e();
+
+ m_Vmin = -5.0 * m_Vt;
+
+ m_Vcrit = m_Vt * std::log(m_Vt / m_Is / csqrt2);
+ m_VtInv = 1.0 / m_Vt;
+ }
- void set_param(const double Is, const double n, double gmin);
double I() const { return m_Id; }
double G() const { return m_G; }
@@ -391,7 +607,7 @@ protected:
private:
diode_model_t m_model;
- generic_diode m_D;
+ generic_diode<diode_e::BIPOLAR> m_D;
};
diff --git a/src/lib/netlist/build/makefile b/src/lib/netlist/build/makefile
index ea034440b5e..6179a0e5932 100644
--- a/src/lib/netlist/build/makefile
+++ b/src/lib/netlist/build/makefile
@@ -28,7 +28,7 @@ space :=
space +=
TIDY_FLAGS = $(subst $(space),,$(TIDY_FLAGSX))
-#TIDY_FLAGS = -checks=llvm-include-order,llvm-namespace-comment,modernize-use-override,modernize-use-using -fix
+TIDY_FLAGS = -checks=llvm-include-order,llvm-namespace-comment,modernize-use-override,modernize-use-using -fix
#TIDY_FLAGS = -checks=llvm-include-order -fix
#TIDY_FLAGS = -checks=llvm-namespace-comment -fix
#TIDY_FLAGS = -checks=modernize-use-override -fix
@@ -94,6 +94,7 @@ NLOBJS := \
$(NLOBJ)/nl_setup.o \
$(NLOBJ)/nl_factory.o \
$(NLOBJ)/analog/nld_bjt.o \
+ $(NLOBJ)/analog/nld_mosfet.o \
$(NLOBJ)/analog/nlid_fourterm.o \
$(NLOBJ)/analog/nld_switches.o \
$(NLOBJ)/analog/nlid_twoterm.o \
@@ -229,6 +230,9 @@ maketree: $(sort $(OBJDIRS))
native:
$(MAKE) CEXTRAFLAGS="-march=native -msse4.2 -Wall -Wpedantic -Wsign-compare -Wextra "
+gcc5:
+ $(MAKE) CC=g++-5 LD=g++-5 CEXTRAFLAGS="-march=native -msse4.2 -Wall -Wpedantic -Wsign-compare -Wextra "
+
clang:
$(MAKE) CC=clang++-9 LD=clang++-9 CEXTRAFLAGS="-march=native -Weverything -Werror -Wno-padded -Wno-weak-vtables -Wno-unused-template -Wno-missing-variable-declarations -Wno-float-equal -Wconversion -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-format-nonliteral -Wno-exit-time-destructors"
diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp
index 06778d49ec5..c0353f2489a 100644
--- a/src/lib/netlist/devices/net_lib.cpp
+++ b/src/lib/netlist/devices/net_lib.cpp
@@ -45,6 +45,7 @@ namespace devices
LIB_ENTRY(function) // only for macro devices - NO FEEDBACK loops
LIB_ENTRY(QBJT_EB)
LIB_ENTRY(QBJT_switch)
+ LIB_ENTRY(MOSFET)
LIB_ENTRY(logic_input_ttl)
LIB_ENTRY(logic_input)
LIB_ENTRY(analog_input)
diff --git a/src/lib/netlist/devices/net_lib.h b/src/lib/netlist/devices/net_lib.h
index 6cc6749eee6..abf58ccee16 100644
--- a/src/lib/netlist/devices/net_lib.h
+++ b/src/lib/netlist/devices/net_lib.h
@@ -92,6 +92,7 @@
#include "netlist/analog/nld_bjt.h"
#include "netlist/analog/nld_fourterm.h"
+#include "netlist/analog/nld_mosfet.h"
#include "netlist/analog/nld_opamps.h"
#include "netlist/analog/nld_switches.h"
#include "netlist/analog/nld_twoterm.h"
diff --git a/src/lib/netlist/devices/nlid_proxy.cpp b/src/lib/netlist/devices/nlid_proxy.cpp
index a2fd18e85a7..e40d3506cff 100644
--- a/src/lib/netlist/devices/nlid_proxy.cpp
+++ b/src/lib/netlist/devices/nlid_proxy.cpp
@@ -58,9 +58,9 @@ namespace netlist
if (supply_V == 0.0) supply_V = 5.0;
if (m_I.Q_Analog() > logic_family()->high_thresh_V(0.0, supply_V))
- out().push(1, NLTIME_FROM_NS(1));
+ out().push(1, netlist_time::quantum());
else if (m_I.Q_Analog() < logic_family()->low_thresh_V(0.0, supply_V))
- out().push(0, NLTIME_FROM_NS(1));
+ out().push(0, netlist_time::quantum());
else
{
// do nothing
diff --git a/src/lib/netlist/macro/nlm_base.cpp b/src/lib/netlist/macro/nlm_base.cpp
index 86f5a2f941c..2e4542de4b6 100644
--- a/src/lib/netlist/macro/nlm_base.cpp
+++ b/src/lib/netlist/macro/nlm_base.cpp
@@ -31,9 +31,16 @@ NETLIST_END()
* BJT Models
* ---------------------------------------------------------------------------*/
+static NETLIST_START(mosfet_models)
+ //NET_MODEL("NMOS _(VTO=0.0 N=1.0 IS=1E-14 KP=2E-5 UO=600 PHI=0.6 LD=0.0 L=1.0 TOX=1E-7 W=1.0 NSUB=0.0 GAMMA=0.0 RD=0.0 RS=0.0 LAMBDA=0.0)")
+ //NET_MODEL("PMOS _(VTO=0.0 N=1.0 IS=1E-14 KP=2E-5 UO=600 PHI=0.6 LD=0.0 L=1.0 TOX=1E-7 W=1.0 NSUB=0.0 GAMMA=0.0 RD=0.0 RS=0.0 LAMBDA=0.0)")
+ NET_MODEL("NMOS _(VTO=0.0 N=1.0 IS=1E-14 KP=0.0 UO=600 PHI=0.0 LD=0.0 L=100e-6 TOX=1E-7 W=100e-6 NSUB=0.0 GAMMA=0.0 RD=0.0 RS=0.0 LAMBDA=0.0 CGSO=0 CGDO=0 CGBO=0)")
+ NET_MODEL("PMOS _(VTO=0.0 N=1.0 IS=1E-14 KP=0.0 UO=600 PHI=0.0 LD=0.0 L=100e-6 TOX=1E-7 W=100e-6 NSUB=0.0 GAMMA=0.0 RD=0.0 RS=0.0 LAMBDA=0.0 CGSO=0 CGDO=0 CGBO=0)")
+NETLIST_END()
+
static NETLIST_START(bjt_models)
- NET_MODEL("NPN _(IS=1e-15 BF=100 NF=1 BR=1 NR=1)")
- NET_MODEL("PNP _(IS=1e-15 BF=100 NF=1 BR=1 NR=1)")
+ NET_MODEL("NPN _(IS=1e-15 BF=100 NF=1 BR=1 NR=1 CJE=0 CJC=0)")
+ NET_MODEL("PNP _(IS=1e-15 BF=100 NF=1 BR=1 NR=1 CJE=0 CJC=0)")
NET_MODEL("2SA1015 PNP(Is=295.1E-18 Xti=3 Eg=1.11 Vaf=100 Bf=110 Xtb=1.5 Br=10.45 Rc=15 Cjc=66.2p Mjc=1.054 Vjc=.75 Fc=.5 Cje=5p Mje=.3333 Vje=.75 Tr=10n Tf=1.661n VCEO=45V ICrating=150M MFG=Toshiba)")
NET_MODEL("2SC1815 NPN(Is=2.04f Xti=3 Eg=1.11 Vaf=6 Bf=400 Ikf=20m Xtb=1.5 Br=3.377 Rc=1 Cjc=1p Mjc=.3333 Vjc=.75 Fc=.5 Cje=25p Mje=.3333 Vje=.75 Tr=450n Tf=20n Itf=0 Vtf=0 Xtf=0 VCEO=45V ICrating=150M MFG=Toshiba)")
@@ -81,7 +88,9 @@ NETLIST_START(base)
LOCAL_SOURCE(diode_models)
LOCAL_SOURCE(bjt_models)
+ LOCAL_SOURCE(mosfet_models)
LOCAL_SOURCE(family_models)
+
LOCAL_SOURCE(TTL74XX_lib)
LOCAL_SOURCE(CD4XXX_lib)
LOCAL_SOURCE(OPAMP_lib)
@@ -89,6 +98,7 @@ NETLIST_START(base)
INCLUDE(diode_models)
INCLUDE(bjt_models)
+ INCLUDE(mosfet_models)
INCLUDE(family_models)
INCLUDE(TTL74XX_lib)
INCLUDE(CD4XXX_lib)
diff --git a/src/lib/netlist/nl_base.cpp b/src/lib/netlist/nl_base.cpp
index 166703c25af..ad048e899bf 100644
--- a/src/lib/netlist/nl_base.cpp
+++ b/src/lib/netlist/nl_base.cpp
@@ -988,12 +988,9 @@ pstring param_t::get_initial(const device_t &dev, bool *found)
return res;
}
-
const pstring param_model_t::model_type()
{
- if (m_map.size() == 0)
- state().setup().model_parse(this->Value(), m_map);
- return m_map["COREMODEL"];
+ return state().setup().models().model_type(value());
}
param_str_t::param_str_t(device_t &device, const pstring &name, const pstring &val)
@@ -1016,27 +1013,22 @@ param_ptr_t::param_ptr_t(device_t &device, const pstring &name, uint8_t * val)
void param_model_t::changed()
{
state().log().fatal(MF_1_MODEL_1_CAN_NOT_BE_CHANGED_AT_RUNTIME, name());
- m_map.clear();
}
const pstring param_model_t::model_value_str(const pstring &entity)
{
- if (m_map.size() == 0)
- state().setup().model_parse(this->Value(), m_map);
- return state().setup().model_value_str(m_map, entity);
+ return state().setup().models().model_value_str(value(), entity);
}
nl_double param_model_t::model_value(const pstring &entity)
{
- if (m_map.size() == 0)
- state().setup().model_parse(this->Value(), m_map);
- return state().setup().model_value(m_map, entity);
+ return state().setup().models().model_value(value(), entity);
}
plib::unique_ptr<plib::pistream> param_data_t::stream()
{
- return device().setup().get_data_stream(Value());
+ return device().setup().get_data_stream(value());
}
bool detail::core_terminal_t::is_logic() const NL_NOEXCEPT
diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h
index 323f2fa7a0b..c1f07a55af2 100644
--- a/src/lib/netlist/nl_base.h
+++ b/src/lib/netlist/nl_base.h
@@ -162,7 +162,7 @@ class NETLIB_NAME(name) : public device_t
#define nl_assert(x) do { if (0) if (!(x)) { /*throw nl_exception(plib::pfmt("assert: {1}:{2}: {3}")(__FILE__)(__LINE__)(#x) ); */} } while (0)
#define NL_NOEXCEPT noexcept
#endif
-#define nl_assert_always(x, msg) do { if (!(x)) throw nl_exception(plib::pfmt("Fatal error: {1}\nCaused by assert: {2}:{3}: {4}")(msg)(__FILE__)(__LINE__)(#x)); } while (0)
+#define nl_assert_always(x, msg) do { if (!(x)) throw nl_exception("Fatal error: {1}\nCaused by assert: {2}:{3}: {4}", msg, __FILE__, __LINE__, #x); } while (0)
//============================================================
// Namespace starts
@@ -223,6 +223,12 @@ namespace netlist
explicit nl_exception(const pstring &text //!< text to be passed
)
: plib::pexception(text) { }
+
+ template<typename... Args>
+ explicit nl_exception(const pstring &fmt //!< format to be used
+ , Args&&... args //!< arguments to be passed
+ )
+ : plib::pexception(plib::pfmt(fmt)(std::forward<Args>(args)...)) { }
};
/*! Logic families descriptors are used to create proxy devices.
@@ -1004,7 +1010,7 @@ namespace netlist
public:
param_str_t(device_t &device, const pstring &name, const pstring &val);
- const pstring &operator()() const NL_NOEXCEPT { return Value(); }
+ const pstring &operator()() const NL_NOEXCEPT { return value(); }
void setTo(const pstring &param) NL_NOEXCEPT
{
if (m_param != param)
@@ -1016,8 +1022,9 @@ namespace netlist
}
protected:
virtual void changed();
- const pstring &Value() const NL_NOEXCEPT { return m_param; }
+ const pstring &value() const NL_NOEXCEPT { return m_param; }
private:
+ PALIGNAS_CACHELINE()
pstring m_param;
};
@@ -1036,8 +1043,8 @@ namespace netlist
: m_value(param.model_value(name))
{
}
- const double &operator()() const noexcept { return m_value; }
- operator const double&() const noexcept { return m_value; }
+ double operator()() const noexcept { return m_value; }
+ operator double() const noexcept { return m_value; }
private:
const double m_value;
};
@@ -1055,7 +1062,6 @@ namespace netlist
void changed() override;
nl_double model_value(const pstring &entity) /*const*/;
private:
- detail::model_map_t m_map;
};
// -----------------------------------------------------------------------------
@@ -1086,7 +1092,7 @@ namespace netlist
param_rom_t(device_t &device, const pstring &name);
- const ST & operator[] (std::size_t n) NL_NOEXCEPT { return m_data[n]; }
+ ST operator[] (std::size_t n) const NL_NOEXCEPT { return m_data[n]; }
protected:
void changed() override
{
@@ -1189,10 +1195,9 @@ namespace netlist
const setup_t &setup() const;
template<class C, typename... Args>
- void register_sub(const pstring &name, pool_owned_ptr<C> &dev, const Args&... args)
+ void create_and_register_subdevice(const pstring &name, pool_owned_ptr<C> &dev, Args&&... args)
{
- //dev.reset(plib::palloc<C>(*this, name, args...));
- dev = pool().make_poolptr<C>(*this, name, args...);
+ dev = pool().make_poolptr<C>(*this, name, std::forward<Args>(args)...);
}
void register_subalias(const pstring &name, detail::core_terminal_t &term);
@@ -1396,7 +1401,7 @@ namespace netlist
void reset();
pstring m_name;
- netlist_t &m_netlist;
+ netlist_t &m_netlist;
plib::unique_ptr<plib::dynlib> m_lib; // external lib needs to be loaded as long as netlist exists
plib::state_manager_t m_state;
plib::unique_ptr<callbacks_t> m_callbacks;
@@ -1553,7 +1558,7 @@ namespace netlist
if (f != nullptr)
f->read(reinterpret_cast<plib::pistream::value_type *>(&m_data[0]),1<<AW);
else
- device.state().log().warning("Rom {1} not found", Value());
+ device.state().log().warning("Rom {1} not found", value());
}
inline void logic_input_t::inactivate() NL_NOEXCEPT
@@ -1705,7 +1710,7 @@ namespace netlist
if (newQ != m_my_net.Q_Analog())
{
m_my_net.set_Q_Analog(newQ);
- m_my_net.toggle_and_push_to_queue(NLTIME_FROM_NS(1));
+ m_my_net.toggle_and_push_to_queue(netlist_time::quantum());
}
}
diff --git a/src/lib/netlist/nl_config.h b/src/lib/netlist/nl_config.h
index faa5008ff56..98ca0e27370 100644
--- a/src/lib/netlist/nl_config.h
+++ b/src/lib/netlist/nl_config.h
@@ -89,6 +89,7 @@
// Use nano-second resolution - Sufficient for now
static constexpr const auto NETLIST_INTERNAL_RES = 1000000000;
+//static constexpr const auto NETLIST_INTERNAL_RES = 1000000000000;
static constexpr const auto NETLIST_CLOCK = NETLIST_INTERNAL_RES;
//#define NETLIST_INTERNAL_RES (UINT64_C(1000000000))
diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp
index a2f9dece076..3ae73b50f6f 100644
--- a/src/lib/netlist/nl_setup.cpp
+++ b/src/lib/netlist/nl_setup.cpp
@@ -32,17 +32,6 @@ namespace netlist
, m_frontier_cnt(0)
{ }
- void nlparse_t::register_model(const pstring &model_in)
- {
- auto pos = model_in.find(" ");
- if (pos == pstring::npos)
- log().fatal(MF_1_UNABLE_TO_PARSE_MODEL_1, model_in);
- pstring model = plib::ucase(plib::trim(plib::left(model_in, pos)));
- pstring def = plib::trim(model_in.substr(pos + 1));
- if (!m_models.insert({model, def}).second)
- log().fatal(MF_1_MODEL_ALREADY_EXISTS_1, model_in);
- }
-
void nlparse_t::register_alias(const pstring &alias, const pstring &out)
{
pstring alias_fqn = build_fqn(alias);
@@ -748,6 +737,7 @@ void setup_t::resolve_inputs()
detail::core_terminal_t *t1 = find_terminal(t1s);
detail::core_terminal_t *t2 = find_terminal(t2s);
+ //printf("%s %s\n", t1s.c_str(), t2s.c_str());
if (connect(*t1, *t2))
li = m_links.erase(li);
else
@@ -818,19 +808,21 @@ const log_type &setup_t::log() const
// ----------------------------------------------------------------------------------------
-// Model
+// Models
// ----------------------------------------------------------------------------------------
-static pstring model_string(detail::model_map_t &map)
+void models_t::register_model(pstring model_in)
{
- pstring ret = map["COREMODEL"] + "(";
- for (auto & i : map)
- ret = ret + i.first + "=" + i.second + " ";
-
- return ret + ")";
+ auto pos = model_in.find(" ");
+ if (pos == pstring::npos)
+ throw nl_exception(MF_1_UNABLE_TO_PARSE_MODEL_1, model_in);
+ pstring model = plib::ucase(plib::trim(plib::left(model_in, pos)));
+ pstring def = plib::trim(model_in.substr(pos + 1));
+ if (!m_models.insert({model, def}).second)
+ throw nl_exception(MF_1_MODEL_ALREADY_EXISTS_1, model_in);
}
-void setup_t::model_parse(const pstring &model_in, detail::model_map_t &map)
+void models_t::model_parse(const pstring &model_in, model_map_t &map)
{
pstring model = model_in;
std::size_t pos = 0;
@@ -844,7 +836,7 @@ void setup_t::model_parse(const pstring &model_in, detail::model_map_t &map)
key = plib::ucase(model);
auto i = m_models.find(key);
if (i == m_models.end())
- log().fatal(MF_1_MODEL_NOT_FOUND, model);
+ throw nl_exception(MF_1_MODEL_NOT_FOUND, model);
model = i->second;
}
pstring xmodel = plib::left(model, pos);
@@ -857,12 +849,12 @@ void setup_t::model_parse(const pstring &model_in, detail::model_map_t &map)
if (i != m_models.end())
model_parse(xmodel, map);
else
- log().fatal(MF_1_MODEL_NOT_FOUND, model_in);
+ throw nl_exception(MF_1_MODEL_NOT_FOUND, model_in);
}
pstring remainder = plib::trim(model.substr(pos + 1));
if (!plib::endsWith(remainder, ")"))
- log().fatal(MF_1_MODEL_ERROR_1, model);
+ throw nl_exception(MF_1_MODEL_ERROR_1, model);
// FIMXE: Not optimal
remainder = plib::left(remainder, remainder.size() - 1);
@@ -871,29 +863,48 @@ void setup_t::model_parse(const pstring &model_in, detail::model_map_t &map)
{
auto pose = pe.find("=");
if (pose == pstring::npos)
- log().fatal(MF_1_MODEL_ERROR_ON_PAIR_1, model);
+ throw nl_exception(MF_1_MODEL_ERROR_ON_PAIR_1, model);
map[plib::ucase(plib::left(pe, pose))] = pe.substr(pose + 1);
}
}
-const pstring setup_t::model_value_str(detail::model_map_t &map, const pstring &entity)
+pstring models_t::model_string(model_map_t &map)
+{
+ pstring ret = map["COREMODEL"] + "(";
+ for (auto & i : map)
+ ret = ret + i.first + "=" + i.second + " ";
+
+ return ret + ")";
+}
+
+pstring models_t::model_value_str(pstring model, pstring entity)
{
+ model_map_t &map = m_cache[model];
+
+ if (map.size() == 0)
+ model_parse(model , map);
+
pstring ret;
if (entity != plib::ucase(entity))
- log().fatal(MF_2_MODEL_PARAMETERS_NOT_UPPERCASE_1_2, entity,
+ throw nl_exception(MF_2_MODEL_PARAMETERS_NOT_UPPERCASE_1_2, entity,
model_string(map));
if (map.find(entity) == map.end())
- log().fatal(MF_2_ENTITY_1_NOT_FOUND_IN_MODEL_2, entity, model_string(map));
+ throw nl_exception(MF_2_ENTITY_1_NOT_FOUND_IN_MODEL_2, entity, model_string(map));
else
ret = map[entity];
return ret;
}
-nl_double setup_t::model_value(detail::model_map_t &map, const pstring &entity)
+nl_double models_t::model_value(pstring model, pstring entity)
{
- pstring tmp = model_value_str(map, entity);
+ model_map_t &map = m_cache[model];
+
+ if (map.size() == 0)
+ model_parse(model , map);
+
+ pstring tmp = model_value_str(model, entity);
nl_double factor = plib::constants<nl_double>::one();
auto p = std::next(tmp.begin(), static_cast<pstring::difference_type>(tmp.size() - 1));
@@ -909,11 +920,12 @@ nl_double setup_t::model_value(detail::model_map_t &map, const pstring &entity)
case 'a': factor = 1e-18; break;
default:
if (*p < '0' || *p > '9')
- log().fatal(MF_1_UNKNOWN_NUMBER_FACTOR_IN_1, entity);
+ throw nl_exception(MF_1_UNKNOWN_NUMBER_FACTOR_IN_1, entity);
}
if (factor != plib::constants<nl_double>::one())
tmp = plib::left(tmp, tmp.size() - 1);
// FIXME: check for errors
+ //printf("%s %s %e %e\n", entity.c_str(), tmp.c_str(), plib::pstonum<nl_double>(tmp), factor);
return plib::pstonum<nl_double>(tmp) * factor;
}
@@ -939,12 +951,10 @@ pool_owned_ptr<devices::nld_base_a_to_d_proxy> logic_family_std_proxy_t::create_
const logic_family_desc_t *setup_t::family_from_model(const pstring &model)
{
- detail::model_map_t map;
- model_parse(model, map);
- if (model_value_str(map, "TYPE") == "TTL")
+ if (m_models.model_value_str(model, "TYPE") == "TTL")
return family_TTL();
- if (model_value_str(map, "TYPE") == "CD4XXX")
+ if (m_models.model_value_str(model, "TYPE") == "CD4XXX")
return family_CD4XXX();
for (auto & e : m_nlstate.m_family_cache)
@@ -953,13 +963,13 @@ const logic_family_desc_t *setup_t::family_from_model(const pstring &model)
auto ret = plib::make_unique<logic_family_std_proxy_t>();
- ret->m_fixed_V = model_value(map, "FV");
- ret->m_low_thresh_PCNT = model_value(map, "IVL");
- ret->m_high_thresh_PCNT = model_value(map, "IVH");
- ret->m_low_VO = model_value(map, "OVL");
- ret->m_high_VO = model_value(map, "OVH");
- ret->m_R_low = model_value(map, "ORL");
- ret->m_R_high = model_value(map, "ORH");
+ ret->m_fixed_V = m_models.model_value(model, "FV");
+ ret->m_low_thresh_PCNT = m_models.model_value(model, "IVL");
+ ret->m_high_thresh_PCNT = m_models.model_value(model, "IVH");
+ ret->m_low_VO = m_models.model_value(model, "OVL");
+ ret->m_high_VO = m_models. model_value(model, "OVH");
+ ret->m_R_low = m_models.model_value(model, "ORL");
+ ret->m_R_high = m_models.model_value(model, "ORH");
auto retp = ret.get();
diff --git a/src/lib/netlist/nl_setup.h b/src/lib/netlist/nl_setup.h
index 2a6c19fdbc9..ed0248a48e6 100644
--- a/src/lib/netlist/nl_setup.h
+++ b/src/lib/netlist/nl_setup.h
@@ -202,8 +202,35 @@ namespace netlist
const type_t m_type;
};
+
// ----------------------------------------------------------------------------------------
- // setup_t
+ // Collection of models
+ // ----------------------------------------------------------------------------------------
+
+ class models_t
+ {
+ public:
+ void register_model(pstring model_in);
+ /* model / family related */
+
+ pstring model_value_str(pstring model, pstring entity);
+
+ double model_value(pstring model, pstring entity);
+
+ pstring model_type(pstring model) { return model_value_str(model, "COREMODEL"); }
+
+ private:
+ using model_map_t = std::unordered_map<pstring, pstring>;
+
+ void model_parse(const pstring &model, model_map_t &map);
+ pstring model_string(model_map_t &map);
+
+ std::unordered_map<pstring, pstring> m_models;
+ std::unordered_map<pstring, model_map_t> m_cache;
+ };
+
+ // ----------------------------------------------------------------------------------------
+ // nlparse_t
// ----------------------------------------------------------------------------------------
class nlparse_t
@@ -213,7 +240,7 @@ namespace netlist
nlparse_t(setup_t &netlist, log_type &log);
- void register_model(const pstring &model_in);
+ void register_model(const pstring &model_in) { m_models.register_model(model_in); }
void register_alias(const pstring &alias, const pstring &out);
void register_dippins_arr(const pstring &terms);
void register_dev(const pstring &classname, const pstring &name);
@@ -240,7 +267,6 @@ namespace netlist
/* include other files */
void include(const pstring &netlist_name);
- /* parse a source */
pstring build_fqn(const pstring &obj_name) const;
void register_alias_nofqn(const pstring &alias, const pstring &out);
@@ -276,8 +302,12 @@ namespace netlist
*/
setup_t &setup() { return m_setup; }
const setup_t &setup() const { return m_setup; }
+
+ models_t &models() { return m_models; }
+ const models_t &models() const { return m_models; }
+
protected:
- std::unordered_map<pstring, pstring> m_models;
+ models_t m_models;
std::stack<pstring> m_namespace_stack;
std::unordered_map<pstring, pstring> m_alias;
std::vector<link_t> m_links;
@@ -299,6 +329,10 @@ namespace netlist
unsigned m_frontier_cnt;
};
+ // ----------------------------------------------------------------------------------------
+ // setup_t
+ // ----------------------------------------------------------------------------------------
+
class setup_t : public nlparse_t
{
public:
@@ -323,24 +357,17 @@ namespace netlist
param_t *find_param(const pstring &param_in, bool required = true) const;
+ /* get family */
+ const logic_family_desc_t *family_from_model(const pstring &model);
+
void register_dynamic_log_devices();
void resolve_inputs();
plib::unique_ptr<plib::pistream> get_data_stream(const pstring &name);
-
factory::list_t &factory() { return m_factory; }
const factory::list_t &factory() const { return m_factory; }
- /* model / family related */
-
- const pstring model_value_str(detail::model_map_t &map, const pstring &entity);
- double model_value(detail::model_map_t &map, const pstring &entity);
-
- void model_parse(const pstring &model, detail::model_map_t &map);
-
- const logic_family_desc_t *family_from_model(const pstring &model);
-
/* helper - also used by nltool */
const pstring resolve_alias(const pstring &name) const;
diff --git a/src/lib/netlist/nltypes.h b/src/lib/netlist/nltypes.h
index 9abe8beebef..7d7582774b1 100644
--- a/src/lib/netlist/nltypes.h
+++ b/src/lib/netlist/nltypes.h
@@ -20,12 +20,20 @@
#include "plib/pstate.h"
#include "plib/pstring.h"
#include "plib/ptime.h"
+#include "plib/putil.h"
#include <cstdint>
#include <unordered_map>
namespace netlist
{
+ /*! @brief plib::constants struct specialized for nl_double
+ *
+ * This may be any of bool, uint8_t, uint16_t, uin32_t and uint64_t.
+ * The choice has little to no impact on performance.
+ */
+ using constants = plib::constants<nl_double>;
+
/*! @brief netlist_sig_t is the type used for logic signals.
*
* This may be any of bool, uint8_t, uint16_t, uin32_t and uint64_t.
@@ -108,11 +116,6 @@ namespace netlist
OUTPUT = 2, /*!< object is an output */
};
- /*! Type of the model map used.
- * This is used to hold all #Models in an unordered map
- */
- using model_map_t = std::unordered_map<pstring, pstring>;
-
} // namespace detail
#if (PHAS_INT128)
diff --git a/src/lib/netlist/plib/palloc.h b/src/lib/netlist/plib/palloc.h
index 830ce3ec525..15fede3a99b 100644
--- a/src/lib/netlist/plib/palloc.h
+++ b/src/lib/netlist/plib/palloc.h
@@ -15,9 +15,9 @@
#include <cstddef>
#include <cstdlib>
#include <memory>
+#include <type_traits>
#include <utility>
#include <vector>
-#include <type_traits>
#if defined(_WIN32) || defined(_WIN64) || defined(_MSC_VER)
#include <malloc.h>
@@ -147,6 +147,12 @@ namespace plib {
m_is_owned = false;
m_ptr = nullptr;
}
+
+ /**
+ * \brief Return @c true if the stored pointer is not null.
+ */
+ explicit operator bool() const noexcept { return m_ptr != nullptr; }
+
pointer release()
{
pointer tmp = m_ptr;
diff --git a/src/lib/netlist/plib/pfmtlog.h b/src/lib/netlist/plib/pfmtlog.h
index 4d13fa3424b..cb9b59c01ce 100644
--- a/src/lib/netlist/plib/pfmtlog.h
+++ b/src/lib/netlist/plib/pfmtlog.h
@@ -191,6 +191,12 @@ public:
return format_element(ptype_traits<T *>::size_spec(), ptype_traits<T *>::fmt_spec(), ptype_traits<T *>::cast(x));
}
+ template<typename X, typename Y, typename... Args>
+ pfmt &operator()(X&& x, Y && y, Args&&... args)
+ {
+ return ((*this)(std::forward<X>(x)))(std::forward<Y>(y), std::forward<Args>(args)...);
+ }
+
template<typename T>
pfmt &x(const T &x)
{
diff --git a/src/lib/netlist/plib/pparser.cpp b/src/lib/netlist/plib/pparser.cpp
index 83d6f9f5e29..5e1a231da81 100644
--- a/src/lib/netlist/plib/pparser.cpp
+++ b/src/lib/netlist/plib/pparser.cpp
@@ -285,9 +285,9 @@ ppreprocessor::ppreprocessor(defines_map_type *defines)
m_expr_sep.emplace_back(" ");
m_expr_sep.emplace_back("\t");
- m_defines.insert({"__PLIB_PREPROCESSOR__", define_t("__PLIB_PREPROCESSOR__", "1")});
if (defines != nullptr)
m_defines = *defines;
+ m_defines.insert({"__PLIB_PREPROCESSOR__", define_t("__PLIB_PREPROCESSOR__", "1")});
}
void ppreprocessor::error(const pstring &err)
diff --git a/src/lib/netlist/plib/ptime.h b/src/lib/netlist/plib/ptime.h
index 32ccc4f7b0d..250e1b8f683 100644
--- a/src/lib/netlist/plib/ptime.h
+++ b/src/lib/netlist/plib/ptime.h
@@ -112,7 +112,7 @@ namespace plib
static constexpr ptime from_sec(const internal_type s) noexcept { return ptime(s, UINT64_C( 1)); }
static constexpr ptime from_hz(const internal_type hz) noexcept { return ptime(1 , hz); }
static constexpr ptime from_raw(const internal_type raw) noexcept { return ptime(raw); }
- static constexpr ptime from_double(const double t) noexcept { return ptime(static_cast<internal_type>( t * static_cast<double>(RES)), RES); }
+ static constexpr ptime from_double(const double t) noexcept { return ptime(static_cast<internal_type>(t * static_cast<double>(RES) + 0.5), RES); }
static constexpr ptime zero() noexcept { return ptime(0, RES); }
static constexpr ptime quantum() noexcept { return ptime(1, RES); }
diff --git a/src/lib/netlist/plib/putil.h b/src/lib/netlist/plib/putil.h
index 0db2ae28ffb..e8145361d9d 100644
--- a/src/lib/netlist/plib/putil.h
+++ b/src/lib/netlist/plib/putil.h
@@ -66,6 +66,35 @@ namespace plib
static constexpr T one() noexcept { return static_cast<T>(1); }
static constexpr T two() noexcept { return static_cast<T>(2); }
+ /*!
+ * \brief Electric constant of vacuum
+ */
+ static constexpr T eps_0() noexcept { return static_cast<T>(8.854187817e-12); }
+ /*!
+ * \brief Relative permittivity of Silicon dioxide
+ */
+ static constexpr T eps_SiO2() noexcept { return static_cast<T>(3.9); }
+ /*!
+ * \brief Relative permittivity of Silicon
+ */
+ static constexpr T eps_Si() noexcept { return static_cast<T>(11.7); }
+ /*!
+ * \brief Boltzmann constant
+ */
+ static constexpr T k_b() noexcept { return static_cast<T>(1.38064852e-23); }
+ /*!
+ * \brief room temperature (gives VT = 0.02585 at T=300)
+ */
+ static constexpr T T0() noexcept { return static_cast<T>(300); }
+ /*!
+ * \brief Elementary charge
+ */
+ static constexpr T Q_e() noexcept { return static_cast<T>(1.6021765314e-19); }
+ /*!
+ * \brief Intrinsic carrier concentration in 1/m^3 of Silicon
+ */
+ static constexpr T NiSi() noexcept { return static_cast<T>(1.45e16); }
+
template <typename V>
static constexpr const T cast(V &&v) noexcept { return static_cast<T>(v); }
};
diff --git a/src/lib/netlist/solver/nld_matrix_solver.cpp b/src/lib/netlist/solver/nld_matrix_solver.cpp
index 1fe14b0f5e1..0a7bf5ef3c3 100644
--- a/src/lib/netlist/solver/nld_matrix_solver.cpp
+++ b/src/lib/netlist/solver/nld_matrix_solver.cpp
@@ -19,7 +19,7 @@ namespace devices
: m_railstart(0)
, m_last_V(0.0)
, m_DD_n_m_1(0.0)
- , m_h_n_m_1(1e-9)
+ , m_h_n_m_1(1e-12)
{
}
diff --git a/src/lib/netlist/solver/nld_ms_direct2.h b/src/lib/netlist/solver/nld_ms_direct2.h
index 1e7103f8672..01f77c3bc3c 100644
--- a/src/lib/netlist/solver/nld_ms_direct2.h
+++ b/src/lib/netlist/solver/nld_ms_direct2.h
@@ -44,6 +44,7 @@ namespace devices
const float_type v0 = (this->RHS(0) - b * v1) / a;
std::array<float_type, 2> new_V = {v0, v1};
+ this->m_stat_calculations++;
const float_type err = (newton_raphson ? this->delta(new_V) : 0.0);
this->store(new_V);
return (err > this->m_params.m_accuracy) ? 2 : 1;
diff --git a/src/lib/netlist/solver/nld_solver.h b/src/lib/netlist/solver/nld_solver.h
index c9ec967a72a..3580ca94996 100644
--- a/src/lib/netlist/solver/nld_solver.h
+++ b/src/lib/netlist/solver/nld_solver.h
@@ -48,7 +48,7 @@ namespace devices
, m_gmin(*this, "GMIN", 1e-9)
, m_pivot(*this, "PIVOT", false) // use pivoting - on supported solvers
, m_nr_loops(*this, "NR_LOOPS", 250) // Newton-Raphson loops
- , m_nr_recalc_delay(*this, "NR_RECALC_DELAY", NLTIME_FROM_NS(10).as_double()) // Delay to next solve attempt if nr loops exceeded
+ , m_nr_recalc_delay(*this, "NR_RECALC_DELAY", netlist_time::quantum().as_double()) // Delay to next solve attempt if nr loops exceeded
, m_parallel(*this, "PARALLEL", 0)
/* automatic time step */
diff --git a/src/mame/arcade.flt b/src/mame/arcade.flt
index 233d50a5f1d..5f490afbb11 100644
--- a/src/mame/arcade.flt
+++ b/src/mame/arcade.flt
@@ -1307,6 +1307,7 @@ unianapc.cpp
unico.cpp
unkfr.cpp
unkhorse.cpp
+unkpoker.cpp
upscope.cpp
usbilliards.cpp
usgames.cpp
diff --git a/src/mame/audio/aztarac.cpp b/src/mame/audio/aztarac.cpp
index 74a1b32bcdc..24d0a930fd3 100644
--- a/src/mame/audio/aztarac.cpp
+++ b/src/mame/audio/aztarac.cpp
@@ -21,7 +21,7 @@ WRITE16_MEMBER(aztarac_state::sound_w)
if (ACCESSING_BITS_0_7)
{
data &= 0xff;
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
m_sound_status ^= 0x21;
if (m_sound_status & 0x20)
m_audiocpu->set_input_line(0, HOLD_LINE);
@@ -32,7 +32,7 @@ READ8_MEMBER(aztarac_state::snd_command_r)
{
m_sound_status |= 0x01;
m_sound_status &= ~0x20;
- return m_soundlatch->read(space,offset);
+ return m_soundlatch->read();
}
READ8_MEMBER(aztarac_state::snd_status_r)
diff --git a/src/mame/audio/cage.cpp b/src/mame/audio/cage.cpp
index 71be3313f6a..9a3a3bec780 100644
--- a/src/mame/audio/cage.cpp
+++ b/src/mame/audio/cage.cpp
@@ -469,7 +469,7 @@ WRITE32_MEMBER( atari_cage_device::cage_to_main_w )
{
if (LOG_COMM)
logerror("%s Data from CAGE = %04X\n", machine().describe_context(), data);
- m_soundlatch->write(space, 0, data, mem_mask);
+ m_soundlatch->write(data);
m_cage_to_cpu_ready = 1;
update_control_lines();
}
@@ -489,10 +489,10 @@ READ32_MEMBER( atari_cage_device::cage_io_status_r )
uint16_t atari_cage_device::main_r()
{
if (LOG_COMM)
- logerror("%s:main read data = %04X\n", machine().describe_context(), m_soundlatch->read(machine().dummy_space(), 0, 0));
+ logerror("%s:main read data = %04X\n", machine().describe_context(), m_soundlatch->read());
m_cage_to_cpu_ready = 0;
update_control_lines();
- return m_soundlatch->read(machine().dummy_space(), 0, 0xffff);
+ return m_soundlatch->read();
}
diff --git a/src/mame/audio/cchasm.cpp b/src/mame/audio/cchasm.cpp
index f72a19ac0e5..6ca1bbf1240 100644
--- a/src/mame/audio/cchasm.cpp
+++ b/src/mame/audio/cchasm.cpp
@@ -41,13 +41,13 @@ READ8_MEMBER(cchasm_state::soundlatch2_r)
{
m_sound_flags &= ~0x80;
m_ctc->trg2(0);
- return m_soundlatch2->read(space, offset);
+ return m_soundlatch2->read();
}
WRITE8_MEMBER(cchasm_state::soundlatch4_w)
{
m_sound_flags |= 0x40;
- m_soundlatch4->write(space, offset, data);
+ m_soundlatch4->write(data);
m_maincpu->set_input_line(1, HOLD_LINE);
}
@@ -61,11 +61,11 @@ WRITE16_MEMBER(cchasm_state::io_w)
switch (offset & 0xf)
{
case 0:
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
break;
case 1:
m_sound_flags |= 0x80;
- m_soundlatch2->write(space, offset, data);
+ m_soundlatch2->write(data);
m_ctc->trg2(1);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
break;
@@ -81,10 +81,10 @@ READ16_MEMBER(cchasm_state::io_r)
switch (offset & 0xf)
{
case 0x0:
- return m_soundlatch3->read(space, offset) << 8;
+ return m_soundlatch3->read() << 8;
case 0x1:
m_sound_flags &= ~0x40;
- return m_soundlatch4->read(space,offset) << 8;
+ return m_soundlatch4->read() << 8;
case 0x2:
return (m_sound_flags| (ioport("IN3")->read() & 0x07) | 0x08) << 8;
case 0x5:
diff --git a/src/mame/audio/efo_zsu.cpp b/src/mame/audio/efo_zsu.cpp
index 785cb67a3a2..4c731aad393 100644
--- a/src/mame/audio/efo_zsu.cpp
+++ b/src/mame/audio/efo_zsu.cpp
@@ -78,7 +78,7 @@ cedar_magnet_sound_device::cedar_magnet_sound_device(const machine_config &mconf
WRITE8_MEMBER(efo_zsu_device::sound_command_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
}
diff --git a/src/mame/audio/hyprolyb.cpp b/src/mame/audio/hyprolyb.cpp
index e4a3c024219..6f52a35727b 100644
--- a/src/mame/audio/hyprolyb.cpp
+++ b/src/mame/audio/hyprolyb.cpp
@@ -43,7 +43,7 @@ void hyprolyb_adpcm_device::device_reset()
WRITE8_MEMBER( hyprolyb_adpcm_device::write )
{
- m_soundlatch2->write(m_audiocpu->space(AS_PROGRAM), offset, data);
+ m_soundlatch2->write(data);
m_adpcm_ready = 0x80;
}
@@ -73,7 +73,7 @@ READ8_MEMBER( hyprolyb_adpcm_device::ready_r )
READ8_MEMBER( hyprolyb_adpcm_device::data_r )
{
m_adpcm_ready = 0x00;
- return m_soundlatch2->read(m_audiocpu->space(AS_PROGRAM), offset);
+ return m_soundlatch2->read();
}
void hyprolyb_adpcm_device::vck_callback( int st )
diff --git a/src/mame/audio/leland.cpp b/src/mame/audio/leland.cpp
index 3d44fd2a539..c27e2871bdf 100644
--- a/src/mame/audio/leland.cpp
+++ b/src/mame/audio/leland.cpp
@@ -550,7 +550,7 @@ WRITE8_MEMBER( leland_80186_sound_device::leland_80186_command_lo_w )
{
if (LOG_COMM) logerror("%s:Write sound command latch lo = %02X\n", machine().describe_context(), data);
m_sound_command = (m_sound_command & 0xff00) | data;
- m_soundlatch->write(space, offset, m_sound_command);
+ m_soundlatch->write(m_sound_command);
}
@@ -558,7 +558,7 @@ WRITE8_MEMBER( leland_80186_sound_device::leland_80186_command_hi_w )
{
if (LOG_COMM) logerror("%s:Write sound command latch hi = %02X\n", machine().describe_context(), data);
m_sound_command = (m_sound_command & 0x00ff) | (data << 8);
- m_soundlatch->write(space, offset, m_sound_command);
+ m_soundlatch->write(m_sound_command);
}
@@ -730,8 +730,8 @@ READ16_MEMBER( leland_80186_sound_device::peripheral_r )
return ((m_clock_active << 1) & 0x7e);
case 1:
- if (LOG_COMM) logerror("%s:Read sound command latch = %02X\n", machine().describe_context(), m_soundlatch->read(space, offset));
- return m_soundlatch->read(space, offset);
+ if (LOG_COMM) logerror("%s:Read sound command latch = %02X\n", machine().describe_context(), m_soundlatch->read());
+ return m_soundlatch->read();
case 2:
if (ACCESSING_BITS_0_7)
diff --git a/src/mame/audio/mario.cpp b/src/mame/audio/mario.cpp
index f9b912e8305..94fa3f3da1e 100644
--- a/src/mame/audio/mario.cpp
+++ b/src/mame/audio/mario.cpp
@@ -25,21 +25,21 @@
#define ACTIVELOW_PORT_BIT(P,A,D) ((P & (~(1 << A))) | ((D ^ 1) << A))
#define ACTIVEHIGH_PORT_BIT(P,A,D) ((P & (~(1 << A))) | (D << A))
-#define I8035_T_R(M,N) ((m_soundlatch2->read(M,0) >> (N)) & 1)
-#define I8035_T_W_AH(M,N,D) do { m_portT = ACTIVEHIGH_PORT_BIT(m_portT,N,D); m_soundlatch2->write(M, 0, m_portT); } while (0)
+#define I8035_T_R(N) ((m_soundlatch2->read() >> (N)) & 1)
+#define I8035_T_W_AH(N,D) do { m_portT = ACTIVEHIGH_PORT_BIT(m_portT,N,D); m_soundlatch2->write(m_portT); } while (0)
-#define I8035_P1_R(M) (m_soundlatch3->read(M,0))
-#define I8035_P2_R(M) (m_soundlatch4->read(M,0))
-#define I8035_P1_W(M,D) m_soundlatch3->write(M,0,D)
+#define I8035_P1_R() (m_soundlatch3->read())
+#define I8035_P2_R() (m_soundlatch4->read())
+#define I8035_P1_W(D) m_soundlatch3->write(D)
#if (USE_8039)
-#define I8035_P2_W(M,D) do { m_soundlatch4->write(M,0,D); } while (0)
+#define I8035_P2_W(D) do { m_soundlatch4->write(D); } while (0)
#else
-#define I8035_P2_W(M,D) do { set_ea(((D) & 0x20) ? 0 : 1); m_soundlatch4->write(M,0,D); } while (0)
+#define I8035_P2_W(D) do { set_ea(((D) & 0x20) ? 0 : 1); m_soundlatch4->write(D); } while (0)
#endif
-#define I8035_P1_W_AH(M,B,D) I8035_P1_W(M,ACTIVEHIGH_PORT_BIT(I8035_P1_R(M),B,(D)))
-#define I8035_P2_W_AH(M,B,D) I8035_P2_W(M,ACTIVEHIGH_PORT_BIT(I8035_P2_R(M),B,(D)))
+#define I8035_P1_W_AH(B,D) I8035_P1_W(ACTIVEHIGH_PORT_BIT(I8035_P1_R(),B,(D)))
+#define I8035_P2_W_AH(B,D) I8035_P2_W(ACTIVEHIGH_PORT_BIT(I8035_P2_R(),B,(D)))
#if OLD_SOUND
@@ -446,19 +446,17 @@ void mario_state::sound_start()
void mario_state::sound_reset()
{
- address_space &space = m_audiocpu->space(AS_PROGRAM);
-
#if USE_8039
set_ea(1);
#endif
/* FIXME: convert to latch8 */
- m_soundlatch->clear_w(space, 0, 0);
- if (m_soundlatch2) m_soundlatch2->clear_w(space, 0, 0);
- if (m_soundlatch3) m_soundlatch3->clear_w(space, 0, 0);
- if (m_soundlatch4) m_soundlatch4->clear_w(space, 0, 0);
- if (m_soundlatch3) I8035_P1_W(space, 0x00); /* Input port */
- if (m_soundlatch4) I8035_P2_W(space, 0xff); /* Port is in high impedance state after reset */
+ m_soundlatch->clear_w();
+ if (m_soundlatch2) m_soundlatch2->clear_w();
+ if (m_soundlatch3) m_soundlatch3->clear_w();
+ if (m_soundlatch4) m_soundlatch4->clear_w();
+ if (m_soundlatch3) I8035_P1_W(0x00); /* Input port */
+ if (m_soundlatch4) I8035_P2_W(0xff); /* Port is in high impedance state after reset */
m_last = 0;
}
@@ -471,32 +469,32 @@ void mario_state::sound_reset()
READ8_MEMBER(mario_state::mario_sh_p1_r)
{
- return I8035_P1_R(space);
+ return I8035_P1_R();
}
READ8_MEMBER(mario_state::mario_sh_p2_r)
{
- return I8035_P2_R(space) & 0xEF; /* Bit 4 connected to GND! */
+ return I8035_P2_R() & 0xEF; /* Bit 4 connected to GND! */
}
READ_LINE_MEMBER(mario_state::mario_sh_t0_r)
{
- return I8035_T_R(machine().dummy_space(), 0);
+ return I8035_T_R(0);
}
READ_LINE_MEMBER(mario_state::mario_sh_t1_r)
{
- return I8035_T_R(machine().dummy_space(), 1);
+ return I8035_T_R(1);
}
READ8_MEMBER(mario_state::mario_sh_tune_r)
{
uint8_t *SND = memregion("audiocpu")->base();
uint16_t mask = memregion("audiocpu")->bytes()-1;
- uint8_t p2 = I8035_P2_R(space);
+ uint8_t p2 = I8035_P2_R();
if ((p2 >> 7) & 1)
- return m_soundlatch->read(space, offset);
+ return m_soundlatch->read();
else
return (SND[(0x1000 + (p2 & 0x0f) * 256 + offset) & mask]);
}
@@ -512,12 +510,12 @@ WRITE8_MEMBER(mario_state::mario_sh_sound_w)
WRITE8_MEMBER(mario_state::mario_sh_p1_w)
{
- I8035_P1_W(space, data);
+ I8035_P1_W(data);
}
WRITE8_MEMBER(mario_state::mario_sh_p2_w)
{
- I8035_P2_W(space, data);
+ I8035_P2_W(data);
}
/****************************************************************
@@ -539,7 +537,7 @@ WRITE8_MEMBER(mario_state::masao_sh_irqtrigger_w)
WRITE8_MEMBER(mario_state::mario_sh_tuneselect_w)
{
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
}
/* Sound 0 and 1 are pulsed !*/
@@ -576,22 +574,22 @@ WRITE8_MEMBER(mario_state::mario_sh3_w)
m_audiocpu->set_input_line(0,CLEAR_LINE);
break;
case 1: /* get coin */
- I8035_T_W_AH(space, 0,data & 1);
+ I8035_T_W_AH(0,data & 1);
break;
case 2: /* ice */
- I8035_T_W_AH(space, 1, data & 1);
+ I8035_T_W_AH(1, data & 1);
break;
case 3: /* crab */
- I8035_P1_W_AH(space, 0, data & 1);
+ I8035_P1_W_AH(0, data & 1);
break;
case 4: /* turtle */
- I8035_P1_W_AH(space, 1, data & 1);
+ I8035_P1_W_AH(1, data & 1);
break;
case 5: /* fly */
- I8035_P1_W_AH(space, 2, data & 1);
+ I8035_P1_W_AH(2, data & 1);
break;
case 6: /* coin */
- I8035_P1_W_AH(space, 3, data & 1);
+ I8035_P1_W_AH(3, data & 1);
break;
case 7: /* skid */
#if OLD_SOUND
diff --git a/src/mame/audio/nichisnd.cpp b/src/mame/audio/nichisnd.cpp
index f6dd3030111..5df8f043dca 100644
--- a/src/mame/audio/nichisnd.cpp
+++ b/src/mame/audio/nichisnd.cpp
@@ -61,7 +61,7 @@ WRITE8_MEMBER(nichisnd_device::soundbank_w)
WRITE8_MEMBER(nichisnd_device::soundlatch_clear_w)
{
- if (!(data & 0x01)) m_soundlatch->clear_w(space, 0, 0);
+ if (!(data & 0x01)) m_soundlatch->clear_w();
}
@@ -139,5 +139,5 @@ void nichisnd_device::device_reset()
// use this to connect to the sound board
WRITE8_MEMBER(nichisnd_device::sound_host_command_w)
{
- m_soundlatch->write(space,0,data);
+ m_soundlatch->write(data);
}
diff --git a/src/mame/audio/rax.cpp b/src/mame/audio/rax.cpp
index d294628464d..ee023e613a6 100644
--- a/src/mame/audio/rax.cpp
+++ b/src/mame/audio/rax.cpp
@@ -56,7 +56,7 @@ enum
WRITE16_MEMBER( acclaim_rax_device::data_w )
{
- m_data_in->write(space, 0, data, 0xffff);
+ m_data_in->write(data);
m_cpu->set_input_line(ADSP2181_IRQL0, ASSERT_LINE);
machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(5));
}
@@ -65,7 +65,7 @@ WRITE16_MEMBER( acclaim_rax_device::data_w )
READ16_MEMBER( acclaim_rax_device::data_r )
{
m_adsp_snd_pf0 = 1;
- return m_data_out->read(space, 0);
+ return m_data_out->read();
}
@@ -256,12 +256,12 @@ WRITE16_MEMBER( acclaim_rax_device::rom_bank_w )
READ16_MEMBER( acclaim_rax_device::host_r )
{
m_cpu->set_input_line(ADSP2181_IRQL0, CLEAR_LINE);
- return m_data_in->read(space, 0);
+ return m_data_in->read();
}
WRITE16_MEMBER( acclaim_rax_device::host_w )
{
- m_data_out->write(space, 0, data, 0xffff);
+ m_data_out->write(data);
m_adsp_snd_pf0 = 0;
}
diff --git a/src/mame/audio/redalert.cpp b/src/mame/audio/redalert.cpp
index a962dffd207..c6d93755eb8 100644
--- a/src/mame/audio/redalert.cpp
+++ b/src/mame/audio/redalert.cpp
@@ -66,7 +66,7 @@ WRITE8_MEMBER(redalert_state::redalert_analog_w)
WRITE8_MEMBER(redalert_state::redalert_audio_command_w)
{
/* the byte is connected to port A of the AY8910 */
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
/* D7 is also connected to the NMI input of the CPU -
the NMI is actually toggled by a 74121 (R1=27K, C10=330p) */
@@ -142,7 +142,7 @@ void redalert_state::sound_start()
WRITE8_MEMBER(redalert_state::redalert_voice_command_w)
{
- m_soundlatch2->write(space, 0, (data & 0x78) >> 3);
+ m_soundlatch2->write((data & 0x78) >> 3);
m_voicecpu->set_input_line(I8085_RST75_LINE, (~data & 0x80) ? ASSERT_LINE : CLEAR_LINE);
}
@@ -246,7 +246,7 @@ void redalert_state::ww3_audio(machine_config &config)
WRITE8_MEMBER(redalert_state::demoneye_audio_command_w)
{
/* the byte is connected to port A of the AY8910 */
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
diff --git a/src/mame/audio/scramble.cpp b/src/mame/audio/scramble.cpp
index 075d0fd235a..710568d899b 100644
--- a/src/mame/audio/scramble.cpp
+++ b/src/mame/audio/scramble.cpp
@@ -122,7 +122,7 @@ WRITE8_MEMBER(scramble_state::hotshock_sh_irqtrigger_w)
READ8_MEMBER( scramble_state::hotshock_soundlatch_r )
{
m_audiocpu->set_input_line(0, CLEAR_LINE);
- return m_soundlatch->read(m_audiocpu->space(AS_PROGRAM),0);
+ return m_soundlatch->read();
}
void scramble_state::sh_init()
diff --git a/src/mame/audio/snk6502.cpp b/src/mame/audio/snk6502.cpp
index 091186b79a2..94e647db077 100644
--- a/src/mame/audio/snk6502.cpp
+++ b/src/mame/audio/snk6502.cpp
@@ -995,7 +995,10 @@ WRITE8_MEMBER(sasuke_sound_device::sound_w)
m_samples->start(3, 3);
if (BIT(data & ~m_last_port1, 7))
+ {
+ m_custom->reset_offset(0); // TODO: why is this the only game that needs this when unmuting?
m_custom->unmute_channel(0);
+ }
else if (BIT(~data & m_last_port1, 7))
m_custom->mute_channel(0);
diff --git a/src/mame/audio/snk6502.h b/src/mame/audio/snk6502.h
index b237e7249a6..354fca29081 100644
--- a/src/mame/audio/snk6502.h
+++ b/src/mame/audio/snk6502.h
@@ -27,6 +27,7 @@ public:
void mute_channel(int channel);
void unmute_channel(int channel);
void set_sound0_stop_on_rollover(int value) { m_sound0_stop_on_rollover = value; }
+ void reset_offset(int channel) { m_tone_channels[channel].offset = 0; }
void speech_w(uint8_t data, const uint16_t *table, int start);
diff --git a/src/mame/audio/starwars.cpp b/src/mame/audio/starwars.cpp
index 8d962273545..2f9074f2f56 100644
--- a/src/mame/audio/starwars.cpp
+++ b/src/mame/audio/starwars.cpp
@@ -68,8 +68,8 @@ READ8_MEMBER(starwars_state::starwars_main_ready_flag_r)
WRITE8_MEMBER(starwars_state::starwars_soundrst_w)
{
- m_soundlatch->acknowledge_w(space, 0, 0);
- m_mainlatch->acknowledge_w(space, 0, 0);
+ m_soundlatch->acknowledge_w();
+ m_mainlatch->acknowledge_w();
/* reset sound CPU here */
m_audiocpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero);
diff --git a/src/mame/audio/timeplt.cpp b/src/mame/audio/timeplt.cpp
index c276cd3fcfe..78e41db51d2 100644
--- a/src/mame/audio/timeplt.cpp
+++ b/src/mame/audio/timeplt.cpp
@@ -128,7 +128,7 @@ WRITE8_MEMBER( timeplt_audio_device::filter_w )
WRITE8_MEMBER(timeplt_audio_device::sound_data_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
}
diff --git a/src/mame/drivers/a1supply.cpp b/src/mame/drivers/a1supply.cpp
index 991531caef3..964736feb25 100644
--- a/src/mame/drivers/a1supply.cpp
+++ b/src/mame/drivers/a1supply.cpp
@@ -87,11 +87,11 @@ void a1supply_state::video_start()
{
}
-MACHINE_CONFIG_START(a1supply_state::a1supply)
-
+void a1supply_state::a1supply(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, NETLIST_CLOCK)
- MCFG_NETLIST_SETUP(a1supply)
+ NETLIST_CPU(config, m_maincpu, NETLIST_CLOCK);
+ m_maincpu->set_constructor(netlist_a1supply);
/* video hardware */
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
@@ -101,7 +101,7 @@ MACHINE_CONFIG_START(a1supply_state::a1supply)
m_video->set_vert_params(V_TOTAL-22,V_TOTAL-19,V_TOTAL-12,V_TOTAL);
m_video->set_fieldcount(1);
m_video->set_threshold(0.30);
-MACHINE_CONFIG_END
+}
/***************************************************************************
diff --git a/src/mame/drivers/a5105.cpp b/src/mame/drivers/a5105.cpp
index f9f2d38e97d..037daf3feab 100644
--- a/src/mame/drivers/a5105.cpp
+++ b/src/mame/drivers/a5105.cpp
@@ -560,7 +560,8 @@ static const z80_daisy_config a5105_daisy_chain[] =
{ nullptr }
};
-MACHINE_CONFIG_START(a5105_state::a5105)
+void a5105_state::a5105(machine_config &config)
+{
/* basic machine hardware */
Z80(config, m_maincpu, XTAL(15'000'000) / 4);
m_maincpu->set_addrmap(AS_PROGRAM, &a5105_state::a5105_mem);
@@ -568,12 +569,12 @@ MACHINE_CONFIG_START(a5105_state::a5105)
m_maincpu->set_daisy_config(a5105_daisy_chain);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_UPDATE_DEVICE("upd7220", upd7220_device, screen_update)
- MCFG_SCREEN_SIZE(40*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0, 40*8-1, 0, 25*8-1)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(50);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ m_screen->set_screen_update("upd7220", FUNC(upd7220_device::screen_update));
+ m_screen->set_size(40*8, 32*8);
+ m_screen->set_visarea(0, 40*8-1, 0, 25*8-1);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_a5105);
PALETTE(config, m_palette, FUNC(a5105_state::a5105_palette), 16);
@@ -606,7 +607,7 @@ MACHINE_CONFIG_START(a5105_state::a5105)
/* internal ram */
RAM(config, RAM_TAG).set_default_size("64K");
-MACHINE_CONFIG_END
+}
/* ROM definition */
ROM_START( a5105 )
diff --git a/src/mame/drivers/a51xx.cpp b/src/mame/drivers/a51xx.cpp
index b3d2d2a3521..39ff383e87e 100644
--- a/src/mame/drivers/a51xx.cpp
+++ b/src/mame/drivers/a51xx.cpp
@@ -126,42 +126,42 @@ static GFXDECODE_START( gfx_a51xx )
GFXDECODE_ENTRY( "chargen", 0x0000, a51xx_charlayout, 0, 1 )
GFXDECODE_END
-MACHINE_CONFIG_START(a51xx_state::a5120)
+void a51xx_state::a5120(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu",Z80, XTAL(4'000'000))
- MCFG_DEVICE_PROGRAM_MAP(a5120_mem)
- MCFG_DEVICE_IO_MAP(a5120_io)
+ Z80(config, m_maincpu, XTAL(4'000'000));
+ m_maincpu->set_addrmap(AS_PROGRAM, &a51xx_state::a5120_mem);
+ m_maincpu->set_addrmap(AS_IO, &a51xx_state::a5120_io);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(640, 480)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
- MCFG_SCREEN_UPDATE_DRIVER(a51xx_state, screen_update_a5120)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_size(640, 480);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(a51xx_state::screen_update_a5120));
+ screen.set_palette("palette");
GFXDECODE(config, "gfxdecode", "palette", gfx_a51xx);
PALETTE(config, "palette", palette_device::MONOCHROME);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(a51xx_state::a5130)
+void a51xx_state::a5130(machine_config &config)
+{
a5120(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(a5130_mem)
- MCFG_DEVICE_IO_MAP(a5130_io)
+ m_maincpu->set_addrmap(AS_PROGRAM, &a51xx_state::a5130_mem);
+ m_maincpu->set_addrmap(AS_IO, &a51xx_state::a5130_io);
MCFG_MACHINE_RESET_OVERRIDE(a51xx_state,a5130)
/* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(a51xx_state, screen_update_a5130)
+ subdevice<screen_device>("screen")->set_screen_update(FUNC(a51xx_state::screen_update_a5130));
MCFG_VIDEO_START_OVERRIDE(a51xx_state,a5130)
-MACHINE_CONFIG_END
+}
/* ROM definition */
ROM_START( a5120 )
diff --git a/src/mame/drivers/abc1600.cpp b/src/mame/drivers/abc1600.cpp
index 3d1f1c7b419..0b04337d1cb 100644
--- a/src/mame/drivers/abc1600.cpp
+++ b/src/mame/drivers/abc1600.cpp
@@ -605,12 +605,12 @@ void abc1600_state::update_drdy2()
READ8_MEMBER( abc1600_state::dart_r )
{
- return m_dart->ba_cd_r(space, A2_A1 ^ 0x03);
+ return m_dart->ba_cd_r(A2_A1 ^ 0x03);
}
WRITE8_MEMBER( abc1600_state::dart_w )
{
- m_dart->ba_cd_w(space, A2_A1 ^ 0x03, data);
+ m_dart->ba_cd_w(A2_A1 ^ 0x03, data);
}
//-------------------------------------------------
@@ -873,7 +873,7 @@ void abc1600_state::machine_reset()
//**************************************************************************
//-------------------------------------------------
-// MACHINE_CONFIG( abc1600 )
+// machine_config( abc1600 )
//-------------------------------------------------
void abc1600_state::abc1600(machine_config &config)
diff --git a/src/mame/drivers/abc80.cpp b/src/mame/drivers/abc80.cpp
index b3ae56fd5cf..7e146613588 100644
--- a/src/mame/drivers/abc80.cpp
+++ b/src/mame/drivers/abc80.cpp
@@ -482,7 +482,7 @@ QUICKLOAD_LOAD_MEMBER( abc80_state, bac )
//**************************************************************************
//-------------------------------------------------
-// MACHINE_CONFIG( abc80 )
+// machine_config( abc80 )
//-------------------------------------------------
MACHINE_CONFIG_START(abc80_state::abc80)
diff --git a/src/mame/drivers/abc80x.cpp b/src/mame/drivers/abc80x.cpp
index 0bae43ca079..581c5ee516c 100644
--- a/src/mame/drivers/abc80x.cpp
+++ b/src/mame/drivers/abc80x.cpp
@@ -1049,7 +1049,7 @@ QUICKLOAD_LOAD_MEMBER( abc800_state, bac )
//**************************************************************************
//-------------------------------------------------
-// MACHINE_CONFIG( common )
+// machine_config( common )
//-------------------------------------------------
MACHINE_CONFIG_START(abc800_state::common)
@@ -1118,10 +1118,11 @@ MACHINE_CONFIG_END
//-------------------------------------------------
-// MACHINE_CONFIG( abc800c )
+// machine_config( abc800c )
//-------------------------------------------------
-MACHINE_CONFIG_START(abc800c_state::abc800c)
+void abc800c_state::abc800c(machine_config &config)
+{
common(config);
// basic machine hardware
@@ -1132,23 +1133,23 @@ MACHINE_CONFIG_START(abc800c_state::abc800c)
abc800c_video(config);
// peripheral hardware
- MCFG_DEVICE_MODIFY(ABC_KEYBOARD_PORT_TAG)
- MCFG_SLOT_DEFAULT_OPTION("abc800")
- MCFG_SLOT_FIXED(true)
+ abc_keyboard_port_device &kb(*subdevice<abc_keyboard_port_device>(ABC_KEYBOARD_PORT_TAG));
+ kb.set_default_option("abc800");
+ kb.set_fixed(true);
- MCFG_DEVICE_MODIFY(ABCBUS_TAG)
- MCFG_SLOT_DEFAULT_OPTION("abc830")
+ subdevice<abcbus_slot_device>(ABCBUS_TAG)->set_default_option("abc830");
// internal ram
RAM(config, RAM_TAG).set_default_size("16K").set_extra_options("32K");
-MACHINE_CONFIG_END
+}
//-------------------------------------------------
-// MACHINE_CONFIG( abc800m )
+// machine_config( abc800m )
//-------------------------------------------------
-MACHINE_CONFIG_START(abc800m_state::abc800m)
+void abc800m_state::abc800m(machine_config &config)
+{
common(config);
// basic machine hardware
@@ -1159,23 +1160,23 @@ MACHINE_CONFIG_START(abc800m_state::abc800m)
abc800m_video(config);
// peripheral hardware
- MCFG_DEVICE_MODIFY(ABC_KEYBOARD_PORT_TAG)
- MCFG_SLOT_DEFAULT_OPTION("abc800")
- MCFG_SLOT_FIXED(true)
+ abc_keyboard_port_device &kb(*subdevice<abc_keyboard_port_device>(ABC_KEYBOARD_PORT_TAG));
+ kb.set_default_option("abc800");
+ kb.set_fixed(true);
- MCFG_DEVICE_MODIFY(ABCBUS_TAG)
- MCFG_SLOT_DEFAULT_OPTION("abc830")
+ subdevice<abcbus_slot_device>(ABCBUS_TAG)->set_default_option("abc830");
// internal ram
RAM(config, RAM_TAG).set_default_size("16K").set_extra_options("32K");
-MACHINE_CONFIG_END
+}
//-------------------------------------------------
-// MACHINE_CONFIG( abc802 )
+// machine_config( abc802 )
//-------------------------------------------------
-MACHINE_CONFIG_START(abc802_state::abc802)
+void abc802_state::abc802(machine_config &config)
+{
common(config);
// basic machine hardware
@@ -1189,22 +1190,21 @@ MACHINE_CONFIG_START(abc802_state::abc802)
m_dart->out_dtrb_callback().set(FUNC(abc802_state::lrs_w));
m_dart->out_rtsb_callback().set(FUNC(abc802_state::mux80_40_w));
- MCFG_DEVICE_MODIFY(ABC_KEYBOARD_PORT_TAG)
- MCFG_SLOT_DEFAULT_OPTION("abc55")
+ subdevice<abc_keyboard_port_device>(ABC_KEYBOARD_PORT_TAG)->set_default_option("abc55");
- MCFG_DEVICE_MODIFY(ABCBUS_TAG)
- MCFG_SLOT_DEFAULT_OPTION("abc834")
+ subdevice<abcbus_slot_device>(ABCBUS_TAG)->set_default_option("abc834");
// internal ram
RAM(config, RAM_TAG).set_default_size("64K");
-MACHINE_CONFIG_END
+}
//-------------------------------------------------
-// MACHINE_CONFIG( abc806 )
+// machine_config( abc806 )
//-------------------------------------------------
-MACHINE_CONFIG_START(abc806_state::abc806)
+void abc806_state::abc806(machine_config &config)
+{
common(config);
// basic machine hardware
@@ -1219,18 +1219,16 @@ MACHINE_CONFIG_START(abc806_state::abc806)
m_dart->out_dtrb_callback().set(FUNC(abc806_state::keydtr_w));
- MCFG_DEVICE_MODIFY(ABC_KEYBOARD_PORT_TAG)
- MCFG_SLOT_DEFAULT_OPTION("abc77")
+ subdevice<abc_keyboard_port_device>(ABC_KEYBOARD_PORT_TAG)->set_default_option("abc77");
- MCFG_DEVICE_MODIFY(ABCBUS_TAG)
- MCFG_SLOT_DEFAULT_OPTION("abc832")
+ subdevice<abcbus_slot_device>(ABCBUS_TAG)->set_default_option("abc832");
// internal ram
RAM(config, RAM_TAG).set_default_size("160K").set_extra_options("544K");
// software list
SOFTWARE_LIST(config, "flop_list2").set_original("abc806");
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/ac1.cpp b/src/mame/drivers/ac1.cpp
index 877821ec2ff..c1e75686566 100644
--- a/src/mame/drivers/ac1.cpp
+++ b/src/mame/drivers/ac1.cpp
@@ -129,11 +129,12 @@ static INPUT_PORTS_START( ac1 )
INPUT_PORTS_END
/* Machine driver */
-MACHINE_CONFIG_START(ac1_state::ac1)
+void ac1_state::ac1(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, XTAL(8'000'000) / 4)
- MCFG_DEVICE_PROGRAM_MAP(ac1_mem)
- MCFG_DEVICE_IO_MAP(ac1_io)
+ Z80(config, m_maincpu, XTAL(8'000'000) / 4);
+ m_maincpu->set_addrmap(AS_PROGRAM, &ac1_state::ac1_mem);
+ m_maincpu->set_addrmap(AS_IO, &ac1_state::ac1_io);
z80pio_device& pio(Z80PIO(config, "z80pio", XTAL(8'000'000)/4));
pio.in_pa_callback().set(FUNC(ac1_state::ac1_port_a_r));
@@ -142,13 +143,13 @@ MACHINE_CONFIG_START(ac1_state::ac1)
pio.out_pb_callback().set(FUNC(ac1_state::ac1_port_b_w));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(64*6, 16*8)
- MCFG_SCREEN_VISIBLE_AREA(0, 64*6-1, 0, 16*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(ac1_state, screen_update_ac1)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_size(64*6, 16*8);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(ac1_state::screen_update_ac1));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_ac1);
@@ -158,19 +159,19 @@ MACHINE_CONFIG_START(ac1_state::ac1)
WAVE(config, "wave", "cassette").add_route(ALL_OUTPUTS, "mono", 0.25);
CASSETTE(config, m_cassette);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(ac1_state::ac1_32)
+void ac1_state::ac1_32(machine_config &config)
+{
ac1(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(ac1_32_mem)
+ m_maincpu->set_addrmap(AS_PROGRAM, &ac1_state::ac1_32_mem);
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_SIZE(64*6, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0, 64*6-1, 0, 32*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(ac1_state, screen_update_ac1_32)
-MACHINE_CONFIG_END
+ screen_device &screen(*subdevice<screen_device>("screen"));
+ screen.set_size(64*6, 32*8);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(ac1_state::screen_update_ac1_32));
+}
/* ROM definition */
ROM_START( ac1 )
diff --git a/src/mame/drivers/acd.cpp b/src/mame/drivers/acd.cpp
index 64ff4cd0863..4207ac70b57 100644
--- a/src/mame/drivers/acd.cpp
+++ b/src/mame/drivers/acd.cpp
@@ -26,8 +26,9 @@ private:
static INPUT_PORTS_START( acd )
INPUT_PORTS_END
-MACHINE_CONFIG_START(acd_state::acd)
-MACHINE_CONFIG_END
+void acd_state::acd(machine_config &config)
+{
+}
ROM_START( acd )
ROM_REGION( 0x10000, "maincpu", 0 )
diff --git a/src/mame/drivers/ace.cpp b/src/mame/drivers/ace.cpp
index 97574d561b1..9bb971d5e44 100644
--- a/src/mame/drivers/ace.cpp
+++ b/src/mame/drivers/ace.cpp
@@ -322,27 +322,27 @@ void aceal_state::machine_reset()
elem = 0;
}
-MACHINE_CONFIG_START(aceal_state::ace)
-
+void aceal_state::ace(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", I8080, MASTER_CLOCK/9) /* 2 MHz ? */
- MCFG_DEVICE_PROGRAM_MAP(main_map)
+ I8080(config, m_maincpu, MASTER_CLOCK/9); /* 2 MHz ? */
+ m_maincpu->set_addrmap(AS_PROGRAM, &aceal_state::main_map);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(4*8, 32*8-1, 2*8, 32*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(aceal_state, screen_update_ace)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(32*8, 32*8);
+ screen.set_visarea(4*8, 32*8-1, 2*8, 32*8-1);
+ screen.set_screen_update(FUNC(aceal_state::screen_update_ace));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_ace);
PALETTE(config, m_palette, palette_device::MONOCHROME);
/* sound hardware */
/* ???? */
-MACHINE_CONFIG_END
+}
/***************************************************************************
diff --git a/src/mame/drivers/aceex.cpp b/src/mame/drivers/aceex.cpp
index d4830b3906f..fcf2de94a0c 100644
--- a/src/mame/drivers/aceex.cpp
+++ b/src/mame/drivers/aceex.cpp
@@ -84,12 +84,13 @@ void aceex2814_state::machine_reset()
#define Y1_CLOCK 40320000
#define Y2_CLOCK 45342720
-MACHINE_CONFIG_START(aceex2814_state::aceex2814)
+void aceex2814_state::aceex2814(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", I80C31, Y2_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(aceex2814_map)
-MACHINE_CONFIG_END
+ I80C31(config, m_maincpu, Y2_CLOCK);
+ m_maincpu->set_addrmap(AS_PROGRAM, &aceex2814_state::aceex2814_map);
+}
ROM_START( aceex2814 )
ROM_REGION( 0x10000, "maincpu", 0 )
diff --git a/src/mame/drivers/acefruit.cpp b/src/mame/drivers/acefruit.cpp
index 49a05bdb9bc..c3ebc08de7b 100644
--- a/src/mame/drivers/acefruit.cpp
+++ b/src/mame/drivers/acefruit.cpp
@@ -626,33 +626,33 @@ static GFXDECODE_START( gfx_acefruit )
GFXDECODE_ENTRY( "gfx1", 0x1800, charlayout, 8, 4 )
GFXDECODE_END
-MACHINE_CONFIG_START(acefruit_state::acefruit)
-
+void acefruit_state::acefruit(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 2500000) /* 2.5MHz */
- MCFG_DEVICE_PROGRAM_MAP(acefruit_map)
- MCFG_DEVICE_IO_MAP(acefruit_io)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", acefruit_state, acefruit_vblank)
+ Z80(config, m_maincpu, 2500000); /* 2.5MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &acefruit_state::acefruit_map);
+ m_maincpu->set_addrmap(AS_IO, &acefruit_state::acefruit_io);
+ m_maincpu->set_vblank_int("screen", FUNC(acefruit_state::acefruit_vblank));
WATCHDOG_TIMER(config, "watchdog");
GFXDECODE(config, m_gfxdecode, m_palette, gfx_acefruit);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(512, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 511, 0, 255)
- MCFG_SCREEN_UPDATE_DRIVER(acefruit_state, screen_update_acefruit)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ m_screen->set_size(512, 256);
+ m_screen->set_visarea_full();
+ m_screen->set_screen_update(FUNC(acefruit_state::screen_update_acefruit));
+ m_screen->set_palette(m_palette);
PALETTE(config, m_palette, FUNC(acefruit_state::acefruit_palette), 16);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
/* sound hardware */
-MACHINE_CONFIG_END
+}
void acefruit_state::init_sidewndr()
{
diff --git a/src/mame/drivers/acesp.cpp b/src/mame/drivers/acesp.cpp
index 7f1b049ff2d..01584aaba1b 100644
--- a/src/mame/drivers/acesp.cpp
+++ b/src/mame/drivers/acesp.cpp
@@ -86,13 +86,13 @@ static INPUT_PORTS_START( ace_sp )
INPUT_PORTS_END
-MACHINE_CONFIG_START(ace_sp_state::ace_sp)
- MCFG_DEVICE_ADD("maincpu", HD6303Y, 1000000)
- MCFG_DEVICE_PROGRAM_MAP(ace_sp_map)
-
- MCFG_DEVICE_ADD("pia0", PIA6821, 0)
+void ace_sp_state::ace_sp(machine_config &config)
+{
+ HD6303Y(config, m_maincpu, 1000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &ace_sp_state::ace_sp_map);
-MACHINE_CONFIG_END
+ PIA6821(config, "pia0", 0);
+}
#define SP_CBOWL_SOUND \
diff --git a/src/mame/drivers/acommand.cpp b/src/mame/drivers/acommand.cpp
index 9864cbdb312..c3560e0ea95 100644
--- a/src/mame/drivers/acommand.cpp
+++ b/src/mame/drivers/acommand.cpp
@@ -468,21 +468,21 @@ TIMER_DEVICE_CALLBACK_MEMBER(acommand_state::acommand_scanline)
m_maincpu->set_input_line(3, HOLD_LINE);
}
-MACHINE_CONFIG_START(acommand_state::acommand)
-
+void acommand_state::acommand(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu",M68000,12000000)
- MCFG_DEVICE_PROGRAM_MAP(acommand_map)
+ M68000(config, m_maincpu, 12000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &acommand_state::acommand_map);
TIMER(config, "scantimer").configure_scanline(FUNC(acommand_state::acommand_scanline), "screen", 0, 1);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(acommand_state, screen_update_acommand)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ 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);
+ screen.set_screen_update(FUNC(acommand_state::screen_update_acommand));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_acommand);
PALETTE(config, m_palette).set_format(palette_device::RRRRGGGGBBBBRGBx, 0x4000);
@@ -494,14 +494,14 @@ MACHINE_CONFIG_START(acommand_state::acommand)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("oki1", OKIM6295, 2112000, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
+ OKIM6295(config, m_oki1, 2112000, okim6295_device::PIN7_HIGH); // clock frequency & pin 7 not verified
+ m_oki1->add_route(ALL_OUTPUTS, "lspeaker", 1.0);
+ m_oki1->add_route(ALL_OUTPUTS, "rspeaker", 1.0);
- MCFG_DEVICE_ADD("oki2", OKIM6295, 2112000, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
-MACHINE_CONFIG_END
+ OKIM6295(config, m_oki2, 2112000, okim6295_device::PIN7_HIGH); // clock frequency & pin 7 not verified
+ m_oki2->add_route(ALL_OUTPUTS, "lspeaker", 1.0);
+ m_oki2->add_route(ALL_OUTPUTS, "rspeaker", 1.0);
+}
/***************************************************************************
diff --git a/src/mame/drivers/acrnsys.cpp b/src/mame/drivers/acrnsys.cpp
index e7dcea8a45a..2eaa8aca2eb 100644
--- a/src/mame/drivers/acrnsys.cpp
+++ b/src/mame/drivers/acrnsys.cpp
@@ -123,7 +123,7 @@ void acrnsys_state::a6502_mem(address_map &map)
{
map.unmap_value_low();
map(0x0000, 0x03ff).ram();
- map(0x0e00, 0x0e7f).mirror(0x100).rw(m_ins8154, FUNC(ins8154_device::ins8154_r), FUNC(ins8154_device::ins8154_w));
+ map(0x0e00, 0x0e7f).mirror(0x100).rw(m_ins8154, FUNC(ins8154_device::read_io), FUNC(ins8154_device::write_io));
map(0xf000, 0xffff).rom().region("maincpu", 0);
}
diff --git a/src/mame/drivers/acrnsys1.cpp b/src/mame/drivers/acrnsys1.cpp
index af3e882cfee..e9ba3b9f17b 100644
--- a/src/mame/drivers/acrnsys1.cpp
+++ b/src/mame/drivers/acrnsys1.cpp
@@ -185,8 +185,8 @@ WRITE8_MEMBER( acrnsys1_state::acrnsys1_led_segment_w )
void acrnsys1_state::acrnsys1_map(address_map &map)
{
map(0x0000, 0x03ff).ram();
- map(0x0e00, 0x0e7f).mirror(0x100).rw("b1", FUNC(ins8154_device::ins8154_r), FUNC(ins8154_device::ins8154_w));
- map(0x0e80, 0x0eff).mirror(0x100).ram();
+ map(0x0e00, 0x0e7f).mirror(0x100).rw("b1", FUNC(ins8154_device::read_io), FUNC(ins8154_device::write_io));
+ map(0x0e80, 0x0eff).mirror(0x100).rw("b1", FUNC(ins8154_device::read_ram), FUNC(ins8154_device::write_ram));
map(0xf800, 0xf9ff).mirror(0x600).rom();
}
diff --git a/src/mame/drivers/acvirus.cpp b/src/mame/drivers/acvirus.cpp
index 79aaa6f16c8..a95efbdd4de 100644
--- a/src/mame/drivers/acvirus.cpp
+++ b/src/mame/drivers/acvirus.cpp
@@ -106,13 +106,14 @@ void acvirus_state::virus_map(address_map &map)
map(0x8000, 0xffff).bankr("rombank");
}
-MACHINE_CONFIG_START(acvirus_state::virus)
- MCFG_DEVICE_ADD("maincpu", I8052, XTAL(12'000'000))
- MCFG_DEVICE_PROGRAM_MAP(virus_map)
+void acvirus_state::virus(machine_config &config)
+{
+ I8052(config, m_maincpu, XTAL(12'000'000));
+ m_maincpu->set_addrmap(AS_PROGRAM, &acvirus_state::virus_map);
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
-MACHINE_CONFIG_END
+}
static INPUT_PORTS_START( virus )
INPUT_PORTS_END
diff --git a/src/mame/drivers/adm36.cpp b/src/mame/drivers/adm36.cpp
new file mode 100644
index 00000000000..2298543b7eb
--- /dev/null
+++ b/src/mame/drivers/adm36.cpp
@@ -0,0 +1,202 @@
+// license:BSD-3-Clause
+// copyright-holders:Robbbert,AJR
+/************************************************************************************************************
+
+ Skeleton driver for ADM 36 Video Display Terminal.
+
+ The detachable keyboard has not been dumped. It is controlled serially through the PIO.
+
+************************************************************************************************************/
+
+#include "emu.h"
+#include "bus/rs232/rs232.h"
+#include "cpu/z80/z80.h"
+#include "machine/er1400.h"
+#include "machine/z80ctc.h"
+#include "machine/z80pio.h"
+#include "machine/z80sio.h"
+#include "video/tms9927.h"
+#include "screen.h"
+
+
+class adm36_state : public driver_device
+{
+public:
+ adm36_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_earom(*this, "earom")
+ , m_vtac(*this, "vtac")
+ , m_chargen(*this, "chargen")
+ , m_vram(*this, "vram%u", 0U)
+ {
+ }
+
+ void adm36(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+private:
+ u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+
+ void pio_pa_w(u8 data);
+ u8 pio_pb_r();
+ void pio_pb_w(u8 data);
+ DECLARE_WRITE_LINE_MEMBER(vsyn_w);
+
+ void mem_map(address_map &map);
+ void io_map(address_map &map);
+
+ required_device<z80_device> m_maincpu;
+ required_device<er1400_device> m_earom;
+ required_device<crt5037_device> m_vtac;
+ required_region_ptr<u8> m_chargen;
+ required_shared_ptr_array<u8, 2> m_vram;
+
+ bool m_vsyn;
+};
+
+
+u32 adm36_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+{
+ return 0;
+}
+
+void adm36_state::machine_start()
+{
+ m_vsyn = false;
+
+ save_item(NAME(m_vsyn));
+}
+
+void adm36_state::machine_reset()
+{
+}
+
+void adm36_state::pio_pa_w(u8 data)
+{
+ m_earom->data_w(BIT(data, 0));
+}
+
+u8 adm36_state::pio_pb_r()
+{
+ return (m_earom->data_r() ? 0 : 1) | (m_vsyn ? 0x20 : 0);
+}
+
+void adm36_state::pio_pb_w(u8 data)
+{
+ m_earom->clock_w(!BIT(data, 4));
+ m_earom->c3_w(BIT(data, 3));
+ m_earom->c2_w(BIT(data, 2));
+ m_earom->c1_w(BIT(data, 1));
+}
+
+WRITE_LINE_MEMBER(adm36_state::vsyn_w)
+{
+ m_vsyn = bool(state);
+}
+
+void adm36_state::mem_map(address_map &map)
+{
+ map(0x0000, 0x2fff).rom().region("maincpu", 0);
+ map(0x6000, 0x67ff).ram(); // MK4802J-3 (U76)
+ map(0xe000, 0xefff).ram().share("vram0"); // 4x MK4118AN-1 (U66-U69)
+ map(0xf000, 0xffff).ram().share("vram1"); // 4x MK4118AN-1 (U81-U84)
+}
+
+void adm36_state::io_map(address_map &map)
+{
+ map.global_mask(0xff);
+ map(0x00, 0x03).mirror(0x0c).rw("ctc", FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
+ map(0x10, 0x13).mirror(0x0c).rw("sio", FUNC(z80sio_device::cd_ba_r), FUNC(z80sio_device::cd_ba_w));
+ map(0x20, 0x23).mirror(0x0c).rw("pio", FUNC(z80pio_device::read), FUNC(z80pio_device::write));
+ map(0x40, 0x4f).rw(m_vtac, FUNC(crt5037_device::read), FUNC(crt5037_device::write));
+}
+
+
+static INPUT_PORTS_START(adm36)
+INPUT_PORTS_END
+
+
+static const z80_daisy_config daisy_chain[] =
+{
+ { "ctc" },
+ { "sio" },
+ { "pio" },
+ { nullptr }
+};
+
+void adm36_state::adm36(machine_config &config)
+{
+ // basic machine hardware
+ Z80(config, m_maincpu, 14.728_MHz_XTAL / 6);
+ m_maincpu->set_addrmap(AS_PROGRAM, &adm36_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &adm36_state::io_map);
+ m_maincpu->set_daisy_config(daisy_chain);
+
+ z80pio_device &pio(Z80PIO(config, "pio", 14.728_MHz_XTAL / 6));
+ pio.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
+ pio.out_pa_callback().set(FUNC(adm36_state::pio_pa_w));
+ pio.in_pb_callback().set(FUNC(adm36_state::pio_pb_r));
+ pio.out_pb_callback().set(FUNC(adm36_state::pio_pb_w));
+
+ ER1400(config, m_earom);
+
+ //F3870(config, "keybcpu", 3.579545_MHz_XTAL);
+
+ z80ctc_device &ctc(Z80CTC(config, "ctc", 14.728_MHz_XTAL / 6));
+ ctc.intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
+ ctc.set_clk<0>(14.728_MHz_XTAL / 12);
+ ctc.set_clk<1>(14.728_MHz_XTAL / 12);
+ ctc.set_clk<2>(14.728_MHz_XTAL / 12);
+ ctc.set_clk<3>(14.728_MHz_XTAL / 12);
+ ctc.zc_callback<0>().set("sio", FUNC(z80sio_device::txca_w));
+ ctc.zc_callback<1>().set("sio", FUNC(z80sio_device::rxca_w));
+ ctc.zc_callback<2>().set("sio", FUNC(z80sio_device::txcb_w));
+ ctc.zc_callback<2>().append("sio", FUNC(z80sio_device::rxcb_w));
+
+ z80sio_device &sio(Z80SIO(config, "sio", 14.728_MHz_XTAL / 6)); // MK3887N
+ sio.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
+ sio.out_txda_callback().set("modem", FUNC(rs232_port_device::write_txd));
+ sio.out_rtsa_callback().set("modem", FUNC(rs232_port_device::write_rts));
+ sio.out_dtra_callback().set("modem", FUNC(rs232_port_device::write_dtr));
+ sio.out_txdb_callback().set("printer", FUNC(rs232_port_device::write_txd));
+ sio.out_dtrb_callback().set("printer", FUNC(rs232_port_device::write_rts));
+
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(14.728_MHz_XTAL, 936, 0, 720, 262, 0, 240);
+ //screen.set_raw(24.3_MHz_XTAL, 1548, 0, 1188, 262, 0, 240);
+ screen.set_screen_update(FUNC(adm36_state::screen_update));
+
+ CRT5037(config, m_vtac, 14.728_MHz_XTAL / 9);
+ m_vtac->set_char_width(9);
+ m_vtac->set_screen("screen");
+ m_vtac->vsyn_callback().set(FUNC(adm36_state::vsyn_w));
+
+ rs232_port_device &modem(RS232_PORT(config, "modem", default_rs232_devices, nullptr)); // RS-232C, RS-422A or 20mA current loop
+ modem.rxd_handler().set("sio", FUNC(z80sio_device::rxa_w));
+ modem.cts_handler().set("sio", FUNC(z80sio_device::ctsa_w));
+ modem.dcd_handler().set("sio", FUNC(z80sio_device::dcda_w));
+ modem.dsr_handler().set("pio", FUNC(z80pio_device::pb6_w));
+
+ rs232_port_device &printer(RS232_PORT(config, "printer", default_rs232_devices, nullptr));
+ printer.rxd_handler().set("sio", FUNC(z80sio_device::rxb_w));
+ printer.cts_handler().set("sio", FUNC(z80sio_device::ctsa_w));
+ printer.dcd_handler().set("sio", FUNC(z80sio_device::dcda_w));
+}
+
+
+ROM_START(adm36)
+ ROM_REGION(0x3000, "maincpu", 0)
+ ROM_LOAD("u71_136261-012.bin", 0x0000, 0x2000, CRC(f08315c7) SHA1(3943a5fc587e690df81aa9694e6e452673ec5513))
+ ROM_LOAD("u72_131671-015.bin", 0x2000, 0x1000, CRC(c397f4e2) SHA1(21513472fe4237bda8448a2ad85496757d4ece12))
+ // U73-U75 are empty sockets
+
+ ROM_REGION(0x1000, "chargen", 0)
+ ROM_LOAD("u56.bin", 0x0000, 0x1000, CRC(70e46897) SHA1(85b4360912fc05243b3b2df29bde5a3def94086b))
+ROM_END
+
+
+COMP(1981, adm36, 0, 0, adm36, adm36, adm36_state, empty_init, "Lear Siegler", "ADM 36 Video Display Terminal", MACHINE_IS_SKELETON)
diff --git a/src/mame/drivers/adp.cpp b/src/mame/drivers/adp.cpp
index e25c64cd256..50200fc0a47 100644
--- a/src/mame/drivers/adp.cpp
+++ b/src/mame/drivers/adp.cpp
@@ -540,11 +540,11 @@ void adp_state::fstation_hd63484_map(address_map &map)
map(0x80000, 0xfffff).ram();
}
-MACHINE_CONFIG_START(adp_state::quickjac)
-
- MCFG_DEVICE_ADD(m_maincpu, M68000, 8000000)
- MCFG_DEVICE_PROGRAM_MAP(quickjac_mem)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(adp_state, duart_iack_handler)
+void adp_state::quickjac(machine_config &config)
+{
+ M68000(config, m_maincpu, 8000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &adp_state::quickjac_mem);
+ m_maincpu->set_irq_acknowledge_callback(FUNC(adp_state::duart_iack_handler));
MCFG_MACHINE_START_OVERRIDE(adp_state,skattv)
MCFG_MACHINE_RESET_OVERRIDE(adp_state,skattv)
@@ -561,13 +561,13 @@ MACHINE_CONFIG_START(adp_state::quickjac)
MSM6242(config, "rtc", XTAL(32'768));
//rtc.out_int_handler().set(FUNC(adp_state::rtc_irq));
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
- MCFG_SCREEN_SIZE(384, 280)
- MCFG_SCREEN_VISIBLE_AREA(0, 384-1, 0, 280-1)
- MCFG_SCREEN_UPDATE_DEVICE("acrtc", hd63484_device, update_screen)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500));
+ screen.set_size(384, 280);
+ screen.set_visarea_full();
+ screen.set_screen_update("acrtc", FUNC(hd63484_device::update_screen));
+ screen.set_palette(m_palette);
PALETTE(config, m_palette, FUNC(adp_state::adp_palette), 0x10);
@@ -577,8 +577,7 @@ MACHINE_CONFIG_START(adp_state::quickjac)
ym2149_device &aysnd(YM2149(config, "aysnd", 3686400/2));
aysnd.port_a_read_callback().set_ioport("PA");
aysnd.add_route(ALL_OUTPUTS, "mono", 0.10);
-
-MACHINE_CONFIG_END
+}
void adp_state::skattv(machine_config &config)
{
@@ -617,18 +616,18 @@ void adp_state::funland(machine_config &config)
m_acrtc->set_addrmap(0, &adp_state::fstation_hd63484_map);
}
-MACHINE_CONFIG_START(adp_state::fstation)
+void adp_state::fstation(machine_config &config)
+{
funland(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(fstation_mem)
+ m_maincpu->set_addrmap(AS_PROGRAM, &adp_state::fstation_mem);
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_SIZE(640, 480)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
+ screen_device &screen(*subdevice<screen_device>("screen"));
+ screen.set_size(640, 480);
+ screen.set_visarea_full();
m_palette->set_init(FUNC(adp_state::fstation_palette));
-MACHINE_CONFIG_END
+}
ROM_START( quickjac )
diff --git a/src/mame/drivers/aeroboto.cpp b/src/mame/drivers/aeroboto.cpp
index cce96b7a489..9ec149faaa6 100644
--- a/src/mame/drivers/aeroboto.cpp
+++ b/src/mame/drivers/aeroboto.cpp
@@ -244,24 +244,24 @@ void aeroboto_state::machine_reset()
m_sy = 0;
}
-MACHINE_CONFIG_START(aeroboto_state::formatz)
-
+void aeroboto_state::formatz(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", MC6809, XTAL(10'000'000)/2) /* verified on pcb */
- MCFG_DEVICE_PROGRAM_MAP(main_map)
+ MC6809(config, m_maincpu, XTAL(10'000'000)/2); /* verified on pcb */
+ m_maincpu->set_addrmap(AS_PROGRAM, &aeroboto_state::main_map);
- MCFG_DEVICE_ADD("audiocpu", MC6809, XTAL(10'000'000)/4) /* verified on pcb */
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
+ MC6809(config, m_audiocpu, XTAL(10'000'000)/4); /* verified on pcb */
+ m_audiocpu->set_addrmap(AS_PROGRAM, &aeroboto_state::sound_map);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 31*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(aeroboto_state, screen_update_aeroboto)
- MCFG_SCREEN_PALETTE("palette")
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, aeroboto_state, vblank_irq))
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(32*8, 32*8);
+ screen.set_visarea(0*8, 31*8-1, 2*8, 30*8-1);
+ screen.set_screen_update(FUNC(aeroboto_state::screen_update_aeroboto));
+ screen.set_palette(m_palette);
+ screen.screen_vblank().set(FUNC(aeroboto_state::vblank_irq));
GFXDECODE(config, m_gfxdecode, m_palette, gfx_aeroboto);
@@ -279,7 +279,7 @@ MACHINE_CONFIG_START(aeroboto_state::formatz)
ay1.add_route(ALL_OUTPUTS, "mono", 0.25);
AY8910(config, "ay2", XTAL(10'000'000)/16).add_route(ALL_OUTPUTS, "mono", 0.25); /* verified on pcb */
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/aerofgt.cpp b/src/mame/drivers/aerofgt.cpp
index 0639b91322b..fdf4c27c720 100644
--- a/src/mame/drivers/aerofgt.cpp
+++ b/src/mame/drivers/aerofgt.cpp
@@ -76,7 +76,7 @@ Verification still needed for the other PCBs.
WRITE8_MEMBER(aerofgt_state::karatblzbl_soundlatch_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
diff --git a/src/mame/drivers/agat.cpp b/src/mame/drivers/agat.cpp
index ae9d8b1613d..b0d8cb1b2f8 100644
--- a/src/mame/drivers/agat.cpp
+++ b/src/mame/drivers/agat.cpp
@@ -1076,21 +1076,21 @@ static void agat7_cards(device_slot_interface &device)
// Nippel Co-processor (R65C02 clone + dual-ported RAM)
}
-MACHINE_CONFIG_START(agat7_state::agat7)
- MCFG_DEVICE_ADD(m_maincpu, M6502, XTAL(14'300'000) / 14)
- MCFG_DEVICE_PROGRAM_MAP(agat7_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER(A7_VIDEO_TAG ":a7screen", agat7_state, agat_vblank)
+void agat7_state::agat7(machine_config &config)
+{
+ M6502(config, m_maincpu, XTAL(14'300'000) / 14);
+ m_maincpu->set_addrmap(AS_PROGRAM, &agat7_state::agat7_map);
+ m_maincpu->set_vblank_int(A7_VIDEO_TAG ":a7screen", FUNC(agat7_state::agat_vblank));
TIMER(config, "scantimer").configure_scanline(FUNC(agat7_state::timer_irq), A7_VIDEO_TAG ":a7screen", 0, 1);
- MCFG_DEVICE_ADD(m_video, AGAT7VIDEO, RAM_TAG, "gfx1")
+ AGAT7VIDEO(config, m_video, RAM_TAG, "gfx1");
RAM(config, m_ram).set_default_size("32K").set_default_value(0);//.set_extra_options("64K,128K");
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD(A7_SPEAKER_TAG, SPEAKER_SOUND)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
+ SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 1.00);
/* /INH banking */
ADDRESS_MAP_BANK(config, m_upperbank).set_map(&agat7_state::inhbank_map).set_options(ENDIANNESS_LITTLE, 8, 32, 0x3000);
@@ -1132,7 +1132,7 @@ MACHINE_CONFIG_START(agat7_state::agat7)
CASSETTE(config,m_cassette);
m_cassette->set_default_state(CASSETTE_STOPPED);
-MACHINE_CONFIG_END
+}
/***************************************************************************
diff --git a/src/mame/drivers/aim65.cpp b/src/mame/drivers/aim65.cpp
index 0aa75c8b772..dc8a1dbed81 100644
--- a/src/mame/drivers/aim65.cpp
+++ b/src/mame/drivers/aim65.cpp
@@ -188,8 +188,8 @@ image_init_result aim65_state::load_cart(device_image_interface &image, generic_
MACHINE_CONFIG_START(aim65_state::aim65)
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M6502, AIM65_CLOCK) /* 1 MHz */
- MCFG_DEVICE_PROGRAM_MAP(aim65_mem)
+ M6502(config, m_maincpu, AIM65_CLOCK); /* 1 MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &aim65_state::aim65_mem);
config.set_default_layout(layout_aim65);
diff --git a/src/mame/drivers/airbustr.cpp b/src/mame/drivers/airbustr.cpp
index 9c83c3eff46..7e779e622ce 100644
--- a/src/mame/drivers/airbustr.cpp
+++ b/src/mame/drivers/airbustr.cpp
@@ -562,23 +562,23 @@ void airbustr_state::machine_reset()
/* Machine Driver */
-MACHINE_CONFIG_START(airbustr_state::airbustr)
-
+void airbustr_state::airbustr(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("master", Z80, XTAL(12'000'000)/2) /* verified on pcb */
- MCFG_DEVICE_PROGRAM_MAP(master_map)
- MCFG_DEVICE_IO_MAP(master_io_map)
+ Z80(config, m_master, XTAL(12'000'000)/2); /* verified on pcb */
+ m_master->set_addrmap(AS_PROGRAM, &airbustr_state::master_map);
+ m_master->set_addrmap(AS_IO, &airbustr_state::master_io_map);
TIMER(config, "scantimer").configure_scanline(FUNC(airbustr_state::airbustr_scanline), "screen", 0, 1);
- MCFG_DEVICE_ADD("slave", Z80, XTAL(12'000'000)/2) /* verified on pcb */
- MCFG_DEVICE_PROGRAM_MAP(slave_map)
- MCFG_DEVICE_IO_MAP(slave_io_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", airbustr_state, slave_interrupt) /* nmi signal from master cpu */
+ Z80(config, m_slave, XTAL(12'000'000)/2); /* verified on pcb */
+ m_slave->set_addrmap(AS_PROGRAM, &airbustr_state::slave_map);
+ m_slave->set_addrmap(AS_IO, &airbustr_state::slave_io_map);
+ m_slave->set_vblank_int("screen", FUNC(airbustr_state::slave_interrupt)); /* nmi signal from master cpu */
- MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(12'000'000)/2) /* verified on pcb */
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
- MCFG_DEVICE_IO_MAP(sound_io_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", airbustr_state, irq0_line_hold) // nmi are caused by sub cpu writing a sound command
+ Z80(config, m_audiocpu, XTAL(12'000'000)/2); /* verified on pcb */
+ m_audiocpu->set_addrmap(AS_PROGRAM, &airbustr_state::sound_map);
+ m_audiocpu->set_addrmap(AS_IO, &airbustr_state::sound_io_map);
+ m_audiocpu->set_vblank_int("screen", FUNC(airbustr_state::irq0_line_hold)); // nmi are caused by sub cpu writing a sound command
config.m_minimum_quantum = attotime::from_hz(6000); // Palette RAM is filled by sub cpu with data supplied by main cpu
// Maybe a high value is safer in order to avoid glitches
@@ -586,14 +586,14 @@ MACHINE_CONFIG_START(airbustr_state::airbustr)
WATCHDOG_TIMER(config, m_watchdog).set_time(attotime::from_seconds(3)); /* a guess, and certainly wrong */
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(57.4)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(airbustr_state, screen_update)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, airbustr_state, screen_vblank))
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(57.4);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ m_screen->set_size(32*8, 32*8);
+ m_screen->set_visarea(0, 32*8-1, 2*8, 30*8-1);
+ m_screen->set_screen_update(FUNC(airbustr_state::screen_update));
+ m_screen->screen_vblank().set(FUNC(airbustr_state::screen_vblank));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_airbustr);
PALETTE(config, m_palette).set_format(palette_device::xGRB_555, 768);
@@ -618,9 +618,8 @@ MACHINE_CONFIG_START(airbustr_state::airbustr)
ymsnd.add_route(2, "mono", 0.25);
ymsnd.add_route(3, "mono", 0.50);
- MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(12'000'000)/4, okim6295_device::PIN7_LOW) /* verified on pcb */
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
-MACHINE_CONFIG_END
+ OKIM6295(config, "oki", XTAL(12'000'000)/4, okim6295_device::PIN7_LOW).add_route(ALL_OUTPUTS, "mono", 0.80); /* verified on pcb */
+}
void airbustr_state::airbustrb(machine_config &config)
{
diff --git a/src/mame/drivers/airraid.cpp b/src/mame/drivers/airraid.cpp
index 02e407a0f8c..8835909b340 100644
--- a/src/mame/drivers/airraid.cpp
+++ b/src/mame/drivers/airraid.cpp
@@ -389,17 +389,17 @@ INPUT_PORTS_END
-MACHINE_CONFIG_START(airraid_state::airraid)
-
+void airraid_state::airraid(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD(m_maincpu, Z80,XTAL(12'000'000)/2) /* verified on pcb */
- MCFG_DEVICE_PROGRAM_MAP(airraid_map)
+ Z80(config, m_maincpu, XTAL(12'000'000)/2); /* verified on pcb */
+ m_maincpu->set_addrmap(AS_PROGRAM, &airraid_state::airraid_map);
TIMER(config, "scantimer").configure_scanline(FUNC(airraid_state::cshooter_scanline), "airraid_vid:screen", 0, 1);
- MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(14'318'181)/4) /* verified on pcb */
- MCFG_DEVICE_PROGRAM_MAP(airraid_sound_map)
- MCFG_DEVICE_OPCODES_MAP(airraid_sound_decrypted_opcodes_map)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("seibu_sound", seibu_sound_device, im0_vector_cb)
+ z80_device &audiocpu(Z80(config, "audiocpu", XTAL(14'318'181)/4)); /* verified on pcb */
+ audiocpu.set_addrmap(AS_PROGRAM, &airraid_state::airraid_sound_map);
+ audiocpu.set_addrmap(AS_OPCODES, &airraid_state::airraid_sound_decrypted_opcodes_map);
+ audiocpu.set_irq_acknowledge_callback("seibu_sound", FUNC(seibu_sound_device::im0_vector_cb));
config.m_perfect_cpu_quantum = subtag("maincpu");
@@ -422,14 +422,14 @@ MACHINE_CONFIG_START(airraid_state::airraid)
m_seibu_sound->ym_write_callback().set("ymsnd", FUNC(ym2151_device::write));
SEI80BU(config, "sei80bu", 0).set_device_rom_tag("audiocpu");
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(airraid_state::airraid_crypt)
+void airraid_state::airraid_crypt(machine_config &config)
+{
airraid(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_OPCODES, &airraid_state::decrypted_opcodes_map);
+}
diff --git a/src/mame/drivers/albazc.cpp b/src/mame/drivers/albazc.cpp
index efd285a48ce..dc83bed62e7 100644
--- a/src/mame/drivers/albazc.cpp
+++ b/src/mame/drivers/albazc.cpp
@@ -276,24 +276,24 @@ static GFXDECODE_START( gfx_hanaroku )
GFXDECODE_END
-MACHINE_CONFIG_START(albazc_state::hanaroku)
-
- MCFG_DEVICE_ADD("maincpu", Z80,6000000) /* ? MHz */
- MCFG_DEVICE_PROGRAM_MAP(hanaroku_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", albazc_state, irq0_line_hold)
+void albazc_state::hanaroku(machine_config &config)
+{
+ Z80(config, m_maincpu, 6000000); /* ? MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &albazc_state::hanaroku_map);
+ m_maincpu->set_vblank_int("screen", FUNC(albazc_state::irq0_line_hold));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
TICKET_DISPENSER(config, m_hopper, attotime::from_msec(50), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH );
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(64*8, 64*8)
- MCFG_SCREEN_VISIBLE_AREA(0, 48*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(albazc_state, screen_update_hanaroku)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(64*8, 64*8);
+ screen.set_visarea(0, 48*8-1, 2*8, 30*8-1);
+ screen.set_screen_update(FUNC(albazc_state::screen_update_hanaroku));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_hanaroku);
@@ -306,7 +306,7 @@ MACHINE_CONFIG_START(albazc_state::hanaroku)
aysnd.port_a_read_callback().set_ioport("DSW1");
aysnd.port_b_read_callback().set_ioport("DSW2");
aysnd.add_route(ALL_OUTPUTS, "mono", 0.50);
-MACHINE_CONFIG_END
+}
ROM_START( hanaroku )
diff --git a/src/mame/drivers/albazg.cpp b/src/mame/drivers/albazg.cpp
index 190c104741f..a2c11c23249 100644
--- a/src/mame/drivers/albazg.cpp
+++ b/src/mame/drivers/albazg.cpp
@@ -359,13 +359,13 @@ void albazg_state::machine_reset()
m_prot_lock = 0;
}
-MACHINE_CONFIG_START(albazg_state::yumefuda)
-
+void albazg_state::yumefuda(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80 , MASTER_CLOCK/2) /* xtal is 12 Mhz, unknown divider*/
- MCFG_DEVICE_PROGRAM_MAP(main_map)
- MCFG_DEVICE_IO_MAP(port_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", albazg_state, irq0_line_hold)
+ Z80(config, m_maincpu, MASTER_CLOCK/2); /* xtal is 12 Mhz, unknown divider*/
+ m_maincpu->set_addrmap(AS_PROGRAM, &albazg_state::main_map);
+ m_maincpu->set_addrmap(AS_IO, &albazg_state::port_map);
+ m_maincpu->set_vblank_int("screen", FUNC(albazg_state::irq0_line_hold));
EEPROM_93C46_16BIT(config, "eeprom");
@@ -377,13 +377,13 @@ MACHINE_CONFIG_START(albazg_state::yumefuda)
ppi.in_pc_callback().set(FUNC(albazg_state::mux_r));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0, 32*8-1, 0, 32*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(albazg_state, screen_update_yumefuda)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(32*8, 32*8);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(albazg_state::screen_update_yumefuda));
+ screen.set_palette("palette");
h46505_device &crtc(H46505(config, "crtc", MASTER_CLOCK/16)); /* hand tuned to get ~60 fps */
crtc.set_screen("screen");
@@ -402,7 +402,7 @@ MACHINE_CONFIG_START(albazg_state::yumefuda)
aysnd.port_b_read_callback().set_ioport("DSW2");
aysnd.port_a_write_callback().set(FUNC(albazg_state::yumefuda_output_w));
aysnd.add_route(ALL_OUTPUTS, "mono", 0.50);
-MACHINE_CONFIG_END
+}
/***************************************************************************************/
diff --git a/src/mame/drivers/aleisttl.cpp b/src/mame/drivers/aleisttl.cpp
index c5de63e532d..55792d80cf5 100644
--- a/src/mame/drivers/aleisttl.cpp
+++ b/src/mame/drivers/aleisttl.cpp
@@ -100,11 +100,11 @@ void sburners_state::video_start()
{
}
-MACHINE_CONFIG_START(sburners_state::sburners)
-
+void sburners_state::sburners(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, NETLIST_CLOCK)
- MCFG_NETLIST_SETUP(sburners)
+ NETLIST_CPU(config, m_maincpu, NETLIST_CLOCK);
+ m_maincpu->set_constructor(netlist_sburners);
/* video hardware */
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
@@ -114,7 +114,7 @@ MACHINE_CONFIG_START(sburners_state::sburners)
m_video->set_vert_params(V_TOTAL-22,V_TOTAL-19,V_TOTAL-12,V_TOTAL);
m_video->set_fieldcount(1);
m_video->set_threshold(0.30);
-MACHINE_CONFIG_END
+}
/***************************************************************************
diff --git a/src/mame/drivers/alesis.cpp b/src/mame/drivers/alesis.cpp
index f17df4c1bf8..f0784a972e9 100644
--- a/src/mame/drivers/alesis.cpp
+++ b/src/mame/drivers/alesis.cpp
@@ -414,7 +414,8 @@ HD44780_PIXEL_UPDATE(alesis_state::sr16_pixel_update)
bitmap.pix16(line*9 + y, pos*6 + x) = state;
}
-MACHINE_CONFIG_START(alesis_state::hr16)
+void alesis_state::hr16(machine_config &config)
+{
/* basic machine hardware */
I8031(config, m_maincpu, 12_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &alesis_state::hr16_mem);
@@ -424,13 +425,13 @@ MACHINE_CONFIG_START(alesis_state::hr16)
m_maincpu->port_out_cb<3>().set(FUNC(alesis_state::p3_w));
/* video hardware */
- MCFG_SCREEN_ADD("screen", LCD)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(6*16, 9*2)
- MCFG_SCREEN_VISIBLE_AREA(0, 6*16-1, 0, 9*2-1)
- MCFG_SCREEN_UPDATE_DEVICE("hd44780", hd44780_device, screen_update)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_size(6*16, 9*2);
+ screen.set_visarea_full();
+ screen.set_screen_update("hd44780", FUNC(hd44780_device::screen_update));
+ screen.set_palette("palette");
PALETTE(config, "palette", FUNC(alesis_state::alesis_palette), 2);
@@ -445,9 +446,10 @@ MACHINE_CONFIG_START(alesis_state::hr16)
ALESIS_DM3AG(config, "dm3ag", 12_MHz_XTAL/2);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(alesis_state::sr16)
+void alesis_state::sr16(machine_config &config)
+{
hr16(config);
/* basic machine hardware */
@@ -456,14 +458,15 @@ MACHINE_CONFIG_START(alesis_state::sr16)
m_maincpu->port_in_cb<1>().set_constant(0);
/* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_SIZE(6*8, 9*2)
- MCFG_SCREEN_VISIBLE_AREA(0, 6*8-1, 0, 9*2-1)
+ screen_device &screen(*subdevice<screen_device>("screen"));
+ screen.set_size(6*8, 9*2);
+ screen.set_visarea_full();
+
config.set_default_layout(layout_sr16);
m_lcdc->set_lcd_size(2, 8);
m_lcdc->set_pixel_update_cb(FUNC(alesis_state::sr16_pixel_update), this);
-MACHINE_CONFIG_END
+}
void alesis_state::mmt8(machine_config &config)
{
diff --git a/src/mame/drivers/alesis_qs.cpp b/src/mame/drivers/alesis_qs.cpp
index 0ad9d363649..09c55100e4e 100644
--- a/src/mame/drivers/alesis_qs.cpp
+++ b/src/mame/drivers/alesis_qs.cpp
@@ -51,10 +51,11 @@ void qs_state::qs7_prog_map(address_map &map)
map(0x00000, 0x3ffff).rom();
}
-MACHINE_CONFIG_START(qs_state::qs7)
+void qs_state::qs7(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", H83048, XTAL(10'000'000)) /* FIX-ME! Actual CPU is H8/510 and XTAL value is a guess */
- MCFG_DEVICE_PROGRAM_MAP(qs7_prog_map)
+ H83048(config, m_maincpu, XTAL(10'000'000)); /* FIX-ME! Actual CPU is H8/510 and XTAL value is a guess */
+ m_maincpu->set_addrmap(AS_PROGRAM, &qs_state::qs7_prog_map);
//MCFG_ALESIS_KEYSCAN_ASIC_ADD("keyscan")
@@ -76,7 +77,7 @@ MACHINE_CONFIG_START(qs_state::qs7)
//MCFG_PCMCIA_ADD("pcmcia")
//MIDI
//RS232
-MACHINE_CONFIG_END
+}
ROM_START( alesqs7 )
ROM_REGION( 0x80000, "maincpu", 0 )
diff --git a/src/mame/drivers/alg.cpp b/src/mame/drivers/alg.cpp
index d12a48319e2..e341d5dc1af 100644
--- a/src/mame/drivers/alg.cpp
+++ b/src/mame/drivers/alg.cpp
@@ -305,11 +305,11 @@ INPUT_PORTS_END
*
*************************************/
-MACHINE_CONFIG_START(alg_state::alg_r1)
-
+void alg_state::alg_r1(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_NTSC)
- MCFG_DEVICE_PROGRAM_MAP(main_map_r1)
+ M68000(config, m_maincpu, amiga_state::CLK_7M_NTSC);
+ m_maincpu->set_addrmap(AS_PROGRAM, &alg_state::main_map_r1);
ADDRESS_MAP_BANK(config, "overlay").set_map(&alg_state::overlay_512kb_map).set_options(ENDIANNESS_BIG, 16, 22, 0x200000);
@@ -333,13 +333,13 @@ MACHINE_CONFIG_START(alg_state::alg_r1)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- paula_8364_device &paula(PAULA_8364(config, "amiga", amiga_state::CLK_C1_NTSC));
- paula.add_route(0, "lspeaker", 0.25);
- paula.add_route(1, "rspeaker", 0.25);
- paula.add_route(2, "rspeaker", 0.25);
- paula.add_route(3, "lspeaker", 0.25);
- paula.mem_read_cb().set(FUNC(amiga_state::chip_ram_r));
- paula.int_cb().set(FUNC(amiga_state::paula_int_w));
+ PAULA_8364(config, m_paula, amiga_state::CLK_C1_NTSC);
+ m_paula->add_route(0, "lspeaker", 0.25);
+ m_paula->add_route(1, "rspeaker", 0.25);
+ m_paula->add_route(2, "rspeaker", 0.25);
+ m_paula->add_route(3, "lspeaker", 0.25);
+ m_paula->mem_read_cb().set(FUNC(amiga_state::chip_ram_r));
+ m_paula->int_cb().set(FUNC(amiga_state::paula_int_w));
m_laserdisc->add_route(0, "lspeaker", 1.0);
m_laserdisc->add_route(1, "rspeaker", 1.0);
@@ -359,32 +359,31 @@ MACHINE_CONFIG_START(alg_state::alg_r1)
m_fdc->write_dma_callback().set(FUNC(amiga_state::chip_ram_w));
m_fdc->dskblk_callback().set(FUNC(amiga_state::fdc_dskblk_w));
m_fdc->dsksyn_callback().set(FUNC(amiga_state::fdc_dsksyn_w));
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(alg_state::alg_r2)
+void alg_state::alg_r2(machine_config &config)
+{
alg_r1(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(main_map_r2)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &alg_state::main_map_r2);
+}
-MACHINE_CONFIG_START(alg_state::picmatic)
+void alg_state::picmatic(machine_config &config)
+{
alg_r1(config);
/* adjust for PAL specs */
- MCFG_DEVICE_REPLACE("maincpu", M68000, amiga_state::CLK_7M_PAL)
- MCFG_DEVICE_PROGRAM_MAP(main_map_picmatic)
+ m_maincpu->set_clock(amiga_state::CLK_7M_PAL);
+ m_maincpu->set_addrmap(AS_PROGRAM, &alg_state::main_map_picmatic);
config.device_remove("screen");
pal_video(config);
- MCFG_DEVICE_MODIFY("amiga")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_PAL)
+ m_paula->set_clock(amiga_state::CLK_C1_PAL);
m_cia_0->set_clock(amiga_state::CLK_E_PAL);
m_cia_1->set_clock(amiga_state::CLK_E_PAL);
- MCFG_DEVICE_MODIFY("fdc")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_PAL)
-MACHINE_CONFIG_END
+ m_fdc->set_clock(amiga_state::CLK_7M_PAL);
+}
diff --git a/src/mame/drivers/alien.cpp b/src/mame/drivers/alien.cpp
index fdb75504b26..f5d3d69e1dc 100644
--- a/src/mame/drivers/alien.cpp
+++ b/src/mame/drivers/alien.cpp
@@ -136,27 +136,27 @@ void alien_state::machine_reset()
//m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
}
-MACHINE_CONFIG_START(alien_state::alien)
+void alien_state::alien(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", SH4LE, MASTER_CLOCK) /* 200MHz */
- MCFG_DEVICE_PROGRAM_MAP(alien_map)
- MCFG_CPU_FORCE_NO_DRC()
+ SH4LE(config, m_maincpu, MASTER_CLOCK); /* 200MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &alien_state::alien_map);
+ m_maincpu->set_force_no_drc(true);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_UPDATE_DRIVER(alien_state, screen_update)
- MCFG_SCREEN_SIZE((32)*8, (32)*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_screen_update(FUNC(alien_state::screen_update));
+ screen.set_size((32)*8, (32)*8);
+ screen.set_visarea_full();
- MCFG_PALETTE_ADD("palette", 0x1000)
+ PALETTE(config, "palette").set_entries(0x1000);
/* sound hardware */
SPEAKER(config, "mono").front_center();
-
-MACHINE_CONFIG_END
+}
void alien_state::init_dkbanans()
{
diff --git a/src/mame/drivers/aliens.cpp b/src/mame/drivers/aliens.cpp
index f99907d2e3a..e57b00000bd 100644
--- a/src/mame/drivers/aliens.cpp
+++ b/src/mame/drivers/aliens.cpp
@@ -44,7 +44,7 @@ WRITE8_MEMBER(aliens_state::aliens_coin_counter_w)
WRITE8_MEMBER(aliens_state::aliens_sh_irqtrigger_w)
{
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
diff --git a/src/mame/drivers/alinvade.cpp b/src/mame/drivers/alinvade.cpp
index e77ae1747d4..a9138a1e94c 100644
--- a/src/mame/drivers/alinvade.cpp
+++ b/src/mame/drivers/alinvade.cpp
@@ -207,26 +207,25 @@ WRITE_LINE_MEMBER(alinvade_state::vblank_irq)
m_maincpu->set_input_line(0,HOLD_LINE);
}
-MACHINE_CONFIG_START(alinvade_state::alinvade)
-
+void alinvade_state::alinvade(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M6502,2000000) /* ? MHz */
- MCFG_DEVICE_PROGRAM_MAP(alinvade_map)
+ M6502(config, m_maincpu, 2000000); /* ? MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &alinvade_state::alinvade_map);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(128, 128)
- MCFG_SCREEN_VISIBLE_AREA(0, 128-1, 0, 128-1)
- MCFG_SCREEN_UPDATE_DRIVER(alinvade_state, screen_update)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, alinvade_state, vblank_irq))
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(128, 128);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(alinvade_state::screen_update));
+ screen.screen_vblank().set(FUNC(alinvade_state::vblank_irq));
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("discrete", DISCRETE, alinvade_discrete)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
-MACHINE_CONFIG_END
+ DISCRETE(config, m_discrete, alinvade_discrete).add_route(ALL_OUTPUTS, "mono", 1.0);
+}
diff --git a/src/mame/drivers/alpha68k.cpp b/src/mame/drivers/alpha68k.cpp
index 2f33da06c14..91cf03e1d66 100644
--- a/src/mame/drivers/alpha68k.cpp
+++ b/src/mame/drivers/alpha68k.cpp
@@ -291,7 +291,7 @@ WRITE8_MEMBER(alpha68k_state::outlatch_w)
//AT
WRITE8_MEMBER(alpha68k_state::tnextspc_soundlatch_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
//ZT
diff --git a/src/mame/drivers/alphasma.cpp b/src/mame/drivers/alphasma.cpp
index 4e89daeaa2f..afb54668e78 100644
--- a/src/mame/drivers/alphasma.cpp
+++ b/src/mame/drivers/alphasma.cpp
@@ -431,7 +431,8 @@ void alphasmart_state::machine_reset()
m_port_d = 0;
}
-MACHINE_CONFIG_START(alphasmart_state::alphasmart)
+void alphasmart_state::alphasmart(machine_config &config)
+{
/* basic machine hardware */
MC68HC11(config, m_maincpu, XTAL(8'000'000)/2); // MC68HC11D0, XTAL is 8 Mhz, unknown divider
m_maincpu->set_addrmap(AS_PROGRAM, &alphasmart_state::alphasmart_mem);
@@ -446,24 +447,24 @@ MACHINE_CONFIG_START(alphasmart_state::alphasmart)
RAM(config, RAM_TAG).set_default_size("128K");
/* video hardware */
- MCFG_SCREEN_ADD("screen", LCD)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_UPDATE_DRIVER(alphasmart_state, screen_update)
- MCFG_SCREEN_SIZE(6*40, 9*4)
- MCFG_SCREEN_VISIBLE_AREA(0, (6*40)-1, 0, (9*4)-1)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_screen_update(FUNC(alphasmart_state::screen_update));
+ screen.set_size(6*40, 9*4);
+ screen.set_visarea_full();
+ screen.set_palette("palette");
PALETTE(config, "palette", FUNC(alphasmart_state::alphasmart_palette), 2);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(asma2k_state::asma2k)
+void asma2k_state::asma2k(machine_config &config)
+{
alphasmart(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(asma2k_mem)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &asma2k_state::asma2k_mem);
+}
/* ROM definition */
ROM_START( asmapro )
diff --git a/src/mame/drivers/alphatro.cpp b/src/mame/drivers/alphatro.cpp
index a70fb3da764..86885ce5761 100644
--- a/src/mame/drivers/alphatro.cpp
+++ b/src/mame/drivers/alphatro.cpp
@@ -731,9 +731,9 @@ static void alphatro_floppies(device_slot_interface &device)
MACHINE_CONFIG_START(alphatro_state::alphatro)
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 16_MHz_XTAL / 4)
- MCFG_DEVICE_PROGRAM_MAP(alphatro_map)
- MCFG_DEVICE_IO_MAP(alphatro_io)
+ Z80(config, m_maincpu, 16_MHz_XTAL / 4);
+ m_maincpu->set_addrmap(AS_PROGRAM, &alphatro_state::alphatro_map);
+ m_maincpu->set_addrmap(AS_IO, &alphatro_state::alphatro_io);
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
diff --git a/src/mame/drivers/alto1.cpp b/src/mame/drivers/alto1.cpp
index 3031a9a937e..d59d46922e4 100644
--- a/src/mame/drivers/alto1.cpp
+++ b/src/mame/drivers/alto1.cpp
@@ -30,8 +30,9 @@ private:
static INPUT_PORTS_START( alto1 )
INPUT_PORTS_END
-MACHINE_CONFIG_START(alto1_state::alto1)
-MACHINE_CONFIG_END
+void alto1_state::alto1(machine_config &config)
+{
+}
ROM_START( alto1 )
ROM_REGION( 0x4000, "roms", 0 )
diff --git a/src/mame/drivers/alto2.cpp b/src/mame/drivers/alto2.cpp
index 4bdc14402f9..480666fc0d9 100644
--- a/src/mame/drivers/alto2.cpp
+++ b/src/mame/drivers/alto2.cpp
@@ -280,14 +280,15 @@ void alto2_state::alto2_iomem_map(address_map &map)
map(0, 2*ALTO2_RAM_SIZE-1).m(m_maincpu, FUNC(alto2_cpu_device::iomem_map));
}
-MACHINE_CONFIG_START(alto2_state::alto2)
+void alto2_state::alto2(machine_config &config)
+{
// Basic machine hardware
// SYSCLK is Display Control part A51 (tagged 29.4MHz) divided by 5(?)
// 5.8MHz according to de.wikipedia.org/wiki/Xerox_Alto
- MCFG_DEVICE_ADD("maincpu", ALTO2, XTAL(29'491'200)/5)
- MCFG_DEVICE_PROGRAM_MAP(alto2_ucode_map)
- MCFG_DEVICE_DATA_MAP(alto2_const_map)
- MCFG_DEVICE_IO_MAP(alto2_iomem_map)
+ ALTO2(config, m_maincpu, XTAL(29'491'200)/5);
+ m_maincpu->set_addrmap(AS_PROGRAM, &alto2_state::alto2_ucode_map);
+ m_maincpu->set_addrmap(AS_DATA, &alto2_state::alto2_const_map);
+ m_maincpu->set_addrmap(AS_IO, &alto2_state::alto2_iomem_map);
// Video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
@@ -302,12 +303,11 @@ MACHINE_CONFIG_START(alto2_state::alto2)
// Sound hardware
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
+ SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.80);
DIABLO_HD(config, DIABLO_HD_0, 3333333);
DIABLO_HD(config, DIABLO_HD_1, 3333333);
-MACHINE_CONFIG_END
+ }
/* Driver Init */
diff --git a/src/mame/drivers/alvg.cpp b/src/mame/drivers/alvg.cpp
index 150803c825a..64badefb851 100644
--- a/src/mame/drivers/alvg.cpp
+++ b/src/mame/drivers/alvg.cpp
@@ -45,11 +45,12 @@ void alvg_state::init_alvg()
{
}
-MACHINE_CONFIG_START(alvg_state::alvg)
+void alvg_state::alvg(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M65C02, 2000000)
- MCFG_DEVICE_PROGRAM_MAP(alvg_map)
-MACHINE_CONFIG_END
+ M65C02(config, m_maincpu, 2000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &alvg_state::alvg_map);
+}
/*----------------------------------------------------------------------------
/ A.G. Soccer Ball - A.G. Football has identical ROMs but different playfield
diff --git a/src/mame/drivers/amaticmg.cpp b/src/mame/drivers/amaticmg.cpp
index ae2f4f99c08..5c22c61027c 100644
--- a/src/mame/drivers/amaticmg.cpp
+++ b/src/mame/drivers/amaticmg.cpp
@@ -846,11 +846,12 @@ void amaticmg_state::machine_reset()
* Machine Drivers *
************************************/
-MACHINE_CONFIG_START(amaticmg_state::amaticmg)
+void amaticmg_state::amaticmg(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK) /* WRONG! */
- MCFG_DEVICE_PROGRAM_MAP(amaticmg_map)
- MCFG_DEVICE_IO_MAP(amaticmg_portmap)
+ Z80(config, m_maincpu, CPU_CLOCK); /* WRONG! */
+ m_maincpu->set_addrmap(AS_PROGRAM, &amaticmg_state::amaticmg_map);
+ m_maincpu->set_addrmap(AS_IO, &amaticmg_state::amaticmg_portmap);
// NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
@@ -866,13 +867,13 @@ MACHINE_CONFIG_START(amaticmg_state::amaticmg)
ppi1.out_pc_callback().set(FUNC(amaticmg_state::out_c_w));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(512, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1)
- MCFG_SCREEN_UPDATE_DRIVER(amaticmg_state, screen_update_amaticmg)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(512, 256);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(amaticmg_state::screen_update_amaticmg));
+ screen.set_palette(m_palette);
mc6845_device &crtc(MC6845(config, "crtc", CRTC_CLOCK));
crtc.set_screen("screen");
@@ -886,9 +887,8 @@ MACHINE_CONFIG_START(amaticmg_state::amaticmg)
/* sound hardware */
SPEAKER(config, "speaker").front_center();
- MCFG_DEVICE_ADD("ymsnd", YM3812, SND_CLOCK) /* Y3014B DAC */
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5)
-MACHINE_CONFIG_END
+ YM3812(config, "ymsnd", SND_CLOCK).add_route(ALL_OUTPUTS, "speaker", 0.5); /* Y3014B DAC */
+}
WRITE_LINE_MEMBER(amaticmg_state::amaticmg2_irq)
@@ -898,42 +898,40 @@ WRITE_LINE_MEMBER(amaticmg_state::amaticmg2_irq)
}
-MACHINE_CONFIG_START(amaticmg_state::amaticmg2)
+void amaticmg_state::amaticmg2(machine_config &config)
+{
amaticmg(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_IO_MAP(amaticmg2_portmap)
+ m_maincpu->set_addrmap(AS_IO, &amaticmg_state::amaticmg2_portmap);
I8255A(config, "ppi8255_2"); // MG4: 0x89 -> A:out; B:out; C(h):in; C(l):in.
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(amaticmg_state, screen_update_amaticmg2)
+ subdevice<screen_device>("screen")->set_screen_update(FUNC(amaticmg_state::screen_update_amaticmg2));
subdevice<mc6845_device>("crtc")->out_vsync_callback().set(FUNC(amaticmg_state::amaticmg2_irq));
m_gfxdecode->set_info(gfx_amaticmg2);
m_palette->set_init(FUNC(amaticmg_state::amaticmg2_palette));
m_palette->set_entries(0x10000);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(amaticmg_state::amaticmg4)
+void amaticmg_state::amaticmg4(machine_config &config)
+{
amaticmg(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_IO_MAP(amaticmg4_portmap)
+ m_maincpu->set_addrmap(AS_IO, &amaticmg_state::amaticmg4_portmap);
I8255A(config, "ppi8255_2"); // MG4: 0x89 -> A:out; B:out; C(h):in; C(l):in.
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(amaticmg_state, screen_update_amaticmg2)
+ subdevice<screen_device>("screen")->set_screen_update(FUNC(amaticmg_state::screen_update_amaticmg2));
subdevice<mc6845_device>("crtc")->out_vsync_callback().set(FUNC(amaticmg_state::amaticmg2_irq));
m_gfxdecode->set_info(gfx_amaticmg2);
m_palette->set_init(FUNC(amaticmg_state::amaticmg2_palette));
m_palette->set_entries(0x10000);
-MACHINE_CONFIG_END
+}
/************************************
diff --git a/src/mame/drivers/ambush.cpp b/src/mame/drivers/ambush.cpp
index 781d8d2074e..0e15f2331aa 100644
--- a/src/mame/drivers/ambush.cpp
+++ b/src/mame/drivers/ambush.cpp
@@ -724,21 +724,22 @@ WRITE8_MEMBER(ambush_state::output_latches_w)
// MACHINE DEFINTIONS
//**************************************************************************
-MACHINE_CONFIG_START(ambush_state::ambush_base)
- MCFG_DEVICE_ADD("maincpu", Z80, XTAL(18'432'000)/6)
- MCFG_DEVICE_PROGRAM_MAP(main_map)
- MCFG_DEVICE_IO_MAP(main_portmap)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", ambush_state, irq0_line_hold)
+void ambush_state::ambush_base(machine_config &config)
+{
+ z80_device &maincpu(Z80(config, "maincpu", XTAL(18'432'000)/6));
+ maincpu.set_addrmap(AS_PROGRAM, &ambush_state::main_map);
+ maincpu.set_addrmap(AS_IO, &ambush_state::main_portmap);
+ maincpu.set_vblank_int("screen", FUNC(ambush_state::irq0_line_hold));
WATCHDOG_TIMER(config, "watchdog");
MCFG_MACHINE_START_OVERRIDE(ambush_state, ambush)
// video hardware
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(18'432'000)/3, 384, 0, 256, 264, 16, 240)
- MCFG_SCREEN_UPDATE_DRIVER(ambush_state, screen_update)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(18'432'000)/3, 384, 0, 256, 264, 16, 240);
+ screen.set_screen_update(FUNC(ambush_state::screen_update));
+ screen.set_palette("palette");
GFXDECODE(config, m_gfxdecode, "palette", gfx_ambush);
@@ -753,7 +754,7 @@ MACHINE_CONFIG_START(ambush_state::ambush_base)
ay8912_device &ay2(AY8912(config, "ay2", XTAL(18'432'000)/6/2));
ay2.port_a_read_callback().set_ioport("joystick");
ay2.add_route(ALL_OUTPUTS, "mono", 0.33);
-MACHINE_CONFIG_END
+}
void ambush_state::ambush(machine_config &config)
{
@@ -770,10 +771,10 @@ void ambush_state::ambush(machine_config &config)
m_outlatch[1]->q_out_cb<7>().set(FUNC(ambush_state::coin_counter_2_w));
}
-MACHINE_CONFIG_START(ambush_state::mariobl)
+void ambush_state::mariobl(machine_config &config)
+{
ambush_base(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(bootleg_map)
+ subdevice<z80_device>("maincpu")->set_addrmap(AS_PROGRAM, &ambush_state::bootleg_map);
// To be verified: do these bootlegs only have one LS259?
ls259_device &outlatch(LS259(config, "outlatch"));
@@ -782,8 +783,7 @@ MACHINE_CONFIG_START(ambush_state::mariobl)
MCFG_MACHINE_START_OVERRIDE(ambush_state, mariobl)
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(ambush_state, screen_update_bootleg)
+ subdevice<screen_device>("screen")->set_screen_update(FUNC(ambush_state::screen_update_bootleg));
m_gfxdecode->set_info(gfx_mariobl);
@@ -796,7 +796,7 @@ MACHINE_CONFIG_START(ambush_state::mariobl)
ay8910_device &ay2(AY8910(config.replace(), "ay2", XTAL(18'432'000)/6/2));
ay2.port_a_read_callback().set_ioport("joystick");
ay2.add_route(ALL_OUTPUTS, "mono", 0.33);
-MACHINE_CONFIG_END
+}
void ambush_state::mariobla(machine_config &config)
{
@@ -809,7 +809,8 @@ void ambush_state::mariobla(machine_config &config)
outlatch.q_out_cb<6>().set_nop();
}
-MACHINE_CONFIG_START(ambush_state::dkong3abl)
+void ambush_state::dkong3abl(machine_config &config)
+{
mariobl(config);
MCFG_MACHINE_START_OVERRIDE(ambush_state, dkong3abl)
@@ -817,7 +818,7 @@ MACHINE_CONFIG_START(ambush_state::dkong3abl)
m_gfxdecode->set_info(gfx_dkong3abl);
subdevice<palette_device>("palette")->set_init(FUNC(ambush_state::dkong3_palette));
-MACHINE_CONFIG_END
+}
//**************************************************************************
diff --git a/src/mame/drivers/amerihok.cpp b/src/mame/drivers/amerihok.cpp
index c4e0da17d90..73276053c03 100644
--- a/src/mame/drivers/amerihok.cpp
+++ b/src/mame/drivers/amerihok.cpp
@@ -39,20 +39,44 @@ private:
virtual void machine_start() override;
virtual void machine_reset() override;
- DECLARE_WRITE8_MEMBER(control_w);
+ void control_w(u8 data);
+ void p2_w(u8 data);
+ u8 p3_r();
- required_device<cpu_device> m_maincpu;
+ required_device<z8_device> m_maincpu;
required_device<okim6376_device> m_oki;
void amerihok_data_map(address_map &map);
void amerihok_map(address_map &map);
+
+ u32 m_outputs[2];
+ u32 m_latched_outputs[2];
+ u8 m_old_p2;
};
-WRITE8_MEMBER(amerihok_state::control_w)
+void amerihok_state::control_w(u8 data)
{
m_oki->st_w(!BIT(data, 4));
m_oki->ch2_w(!BIT(data, 7));
}
+void amerihok_state::p2_w(u8 data)
+{
+ if (BIT(data, 5) && !BIT(m_old_p2, 5))
+ {
+ m_outputs[1] = (m_outputs[1] << 1) | BIT(m_outputs[0], 31);
+ m_outputs[0] = (m_outputs[0] << 1) | BIT(data, 6);
+ }
+
+ if (BIT(data, 7) && (m_outputs[0] != m_latched_outputs[0] || m_outputs[1] != m_latched_outputs[1]))
+ {
+ m_latched_outputs[0] = m_outputs[0];
+ m_latched_outputs[1] = m_outputs[1];
+ logerror("Outputs = %08X%08X\n", m_latched_outputs[1], m_latched_outputs[0]);
+ }
+
+ m_old_p2 = data;
+}
+
void amerihok_state::amerihok_map(address_map &map)
{
map(0x0000, 0xffff).rom().region("maincpu", 0);
@@ -60,17 +84,49 @@ void amerihok_state::amerihok_map(address_map &map)
void amerihok_state::amerihok_data_map(address_map &map)
{
+ map(0x1000, 0x1000).portr("1000");
map(0x2000, 0x2000).w(FUNC(amerihok_state::control_w));
+ map(0x3000, 0x3000).portr("3000");
map(0x4000, 0x4000).w(m_oki, FUNC(okim6376_device::write));
}
static INPUT_PORTS_START( amerihok )
+ PORT_START("1000")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_CODE(KEYCODE_Z)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_CODE(KEYCODE_X)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_CODE(KEYCODE_C)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON4) PORT_CODE(KEYCODE_V)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON5) PORT_CODE(KEYCODE_B)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_BUTTON6) PORT_CODE(KEYCODE_N)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_BUTTON7) PORT_CODE(KEYCODE_M)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_BUTTON8) PORT_CODE(KEYCODE_COMMA)
+
+ PORT_START("3000")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_A) PORT_NAME("Score Visitor")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_S) PORT_NAME("Score Home")
+ PORT_BIT(0xfc, IP_ACTIVE_HIGH, IPT_UNUSED)
+
+ PORT_START("P2")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON9) PORT_CODE(KEYCODE_STOP)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON10) PORT_CODE(KEYCODE_SLASH)
+ PORT_BIT(0xee, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("P3")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_READ_LINE_DEVICE_MEMBER("oki", okim6376_device, busy_r)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_COIN1)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_COIN2)
INPUT_PORTS_END
void amerihok_state::machine_start()
{
+ std::fill(std::begin(m_outputs), std::end(m_outputs), 0);
+ std::fill(std::begin(m_latched_outputs), std::end(m_latched_outputs), 0);
+
+ save_item(NAME(m_outputs));
+ save_item(NAME(m_latched_outputs));
}
void amerihok_state::machine_reset()
@@ -83,6 +139,9 @@ void amerihok_state::amerihok(machine_config &config)
Z8681(config, m_maincpu, 12_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &amerihok_state::amerihok_map);
m_maincpu->set_addrmap(AS_DATA, &amerihok_state::amerihok_data_map);
+ m_maincpu->p2_in_cb().set_ioport("P2");
+ m_maincpu->p2_out_cb().set(FUNC(amerihok_state::p2_w));
+ m_maincpu->p3_in_cb().set_ioport("P3");
/* sound hardware */
SPEAKER(config, "mono").front_center();
diff --git a/src/mame/drivers/amico2k.cpp b/src/mame/drivers/amico2k.cpp
index f6dcebdf5b7..cf3874d260c 100644
--- a/src/mame/drivers/amico2k.cpp
+++ b/src/mame/drivers/amico2k.cpp
@@ -215,10 +215,11 @@ void amico2k_state::machine_start()
save_item(NAME(m_segment));
}
-MACHINE_CONFIG_START(amico2k_state::amico2k)
+void amico2k_state::amico2k(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M6502, 1000000) /* 1MHz */
- MCFG_DEVICE_PROGRAM_MAP(amico2k_mem)
+ M6502(config, m_maincpu, 1000000); /* 1MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &amico2k_state::amico2k_mem);
/* video hardware */
config.set_default_layout(layout_amico2k);
@@ -228,7 +229,7 @@ MACHINE_CONFIG_START(amico2k_state::amico2k)
ppi.out_pa_callback().set(FUNC(amico2k_state::ppi_pa_w));
ppi.in_pb_callback().set(FUNC(amico2k_state::ppi_pb_r));
ppi.out_pb_callback().set(FUNC(amico2k_state::ppi_pb_w));
-MACHINE_CONFIG_END
+}
/* ROM definition */
diff --git a/src/mame/drivers/amiga.cpp b/src/mame/drivers/amiga.cpp
index f5e4b23132a..c963688ee98 100644
--- a/src/mame/drivers/amiga.cpp
+++ b/src/mame/drivers/amiga.cpp
@@ -1565,7 +1565,8 @@ static void amiga_floppies(device_slot_interface &device)
}
// basic elements common to all amigas
-MACHINE_CONFIG_START(amiga_state::amiga_base)
+void amiga_state::amiga_base(machine_config &config)
+{
// video
pal_video(config);
@@ -1591,13 +1592,13 @@ MACHINE_CONFIG_START(amiga_state::amiga_base)
// audio
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- paula_8364_device &paula(PAULA_8364(config, "amiga", amiga_state::CLK_C1_PAL));
- paula.add_route(0, "lspeaker", 0.50);
- paula.add_route(1, "rspeaker", 0.50);
- paula.add_route(2, "rspeaker", 0.50);
- paula.add_route(3, "lspeaker", 0.50);
- paula.mem_read_cb().set(FUNC(amiga_state::chip_ram_r));
- paula.int_cb().set(FUNC(amiga_state::paula_int_w));
+ PAULA_8364(config, m_paula, amiga_state::CLK_C1_PAL);
+ m_paula->add_route(0, "lspeaker", 0.50);
+ m_paula->add_route(1, "rspeaker", 0.50);
+ m_paula->add_route(2, "rspeaker", 0.50);
+ m_paula->add_route(3, "lspeaker", 0.50);
+ m_paula->mem_read_cb().set(FUNC(amiga_state::chip_ram_r));
+ m_paula->int_cb().set(FUNC(amiga_state::paula_int_w));
// floppy drives
AMIGA_FDC(config, m_fdc, amiga_state::CLK_7M_PAL);
@@ -1634,9 +1635,10 @@ MACHINE_CONFIG_START(amiga_state::amiga_base)
SOFTWARE_LIST(config, "apps_list").set_original("amiga_apps");
SOFTWARE_LIST(config, "flop_list").set_original("amiga_flop");
SOFTWARE_LIST(config, "ocs_list").set_original("amigaocs_flop");
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(a1000_state::a1000)
+void a1000_state::a1000(machine_config &config)
+{
amiga_base(config);
// keyboard
@@ -1649,31 +1651,30 @@ MACHINE_CONFIG_START(a1000_state::a1000)
.kbrst_cb().set(FUNC(a1000_state::kbreset_w));
// main cpu
- MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_PAL)
- MCFG_DEVICE_PROGRAM_MAP(a1000_mem)
+ M68000(config, m_maincpu, amiga_state::CLK_7M_PAL);
+ m_maincpu->set_addrmap(AS_PROGRAM, &a1000_state::a1000_mem);
ADDRESS_MAP_BANK(config, "overlay").set_map(&a1000_state::a1000_overlay_map).set_options(ENDIANNESS_BIG, 16, 22, 0x200000);
ADDRESS_MAP_BANK(config, "bootrom").set_map(&a1000_state::a1000_bootrom_map).set_options(ENDIANNESS_BIG, 16, 19, 0x40000);
SOFTWARE_LIST(config, "a1000_list").set_original("amiga_a1000");
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(a1000_state::a1000n)
+void a1000_state::a1000n(machine_config &config)
+{
a1000(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC)
+ m_maincpu->set_clock(amiga_state::CLK_7M_NTSC);
config.device_remove("screen");
ntsc_video(config);
- MCFG_DEVICE_MODIFY("amiga")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC)
+ m_paula->set_clock(amiga_state::CLK_C1_NTSC);
m_cia_0->set_clock(amiga_state::CLK_E_NTSC);
m_cia_1->set_clock(amiga_state::CLK_E_NTSC);
- MCFG_DEVICE_MODIFY("fdc")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC)
-MACHINE_CONFIG_END
+ m_fdc->set_clock(amiga_state::CLK_7M_NTSC);
+}
-MACHINE_CONFIG_START(a2000_state::a2000)
+void a2000_state::a2000(machine_config &config)
+{
amiga_base(config);
// keyboard
@@ -1686,8 +1687,8 @@ MACHINE_CONFIG_START(a2000_state::a2000)
.kbrst_cb().set(FUNC(a2000_state::kbreset_w));
// main cpu
- MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_PAL)
- MCFG_DEVICE_PROGRAM_MAP(a2000_mem)
+ M68000(config, m_maincpu, amiga_state::CLK_7M_PAL);
+ m_maincpu->set_addrmap(AS_PROGRAM, &a2000_state::a2000_mem);
ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_512kb_map).set_options(ENDIANNESS_BIG, 16, 22, 0x200000);
@@ -1708,24 +1709,23 @@ MACHINE_CONFIG_START(a2000_state::a2000)
ZORRO_SLOT(config, "zorro3", m_zorro, zorro2_cards, nullptr);
ZORRO_SLOT(config, "zorro4", m_zorro, zorro2_cards, nullptr);
ZORRO_SLOT(config, "zorro5", m_zorro, zorro2_cards, nullptr);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(a2000_state::a2000n)
+void a2000_state::a2000n(machine_config &config)
+{
a2000(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC)
+ m_maincpu->set_clock(amiga_state::CLK_7M_NTSC);
config.device_remove("screen");
ntsc_video(config);
- MCFG_DEVICE_MODIFY("amiga")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC)
+ m_paula->set_clock(amiga_state::CLK_C1_NTSC);
m_cia_0->set_clock(amiga_state::CLK_E_NTSC);
m_cia_1->set_clock(amiga_state::CLK_E_NTSC);
- MCFG_DEVICE_MODIFY("fdc")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC)
-MACHINE_CONFIG_END
+ m_fdc->set_clock(amiga_state::CLK_7M_NTSC);
+}
-MACHINE_CONFIG_START(a500_state::a500)
+void a500_state::a500(machine_config &config)
+{
amiga_base(config);
// keyboard
@@ -1735,8 +1735,8 @@ MACHINE_CONFIG_START(a500_state::a500)
kbd.krst_handler().set(FUNC(amiga_state::kbreset_w));
// main cpu
- MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_PAL)
- MCFG_DEVICE_PROGRAM_MAP(a500_mem)
+ M68000(config, m_maincpu, amiga_state::CLK_7M_PAL);
+ m_maincpu->set_addrmap(AS_PROGRAM, &a500_state::a500_mem);
ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_1mb_map).set_options(ENDIANNESS_BIG, 16, 22, 0x200000);
@@ -1745,23 +1745,22 @@ MACHINE_CONFIG_START(a500_state::a500)
m_side->int2_handler().set(FUNC(a500_state::side_int2_w));
m_side->int6_handler().set(FUNC(a500_state::side_int6_w));
ZORRO_SLOT(config, "slot", m_side, a500_expansion_cards, nullptr);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(a500_state::a500n)
+void a500_state::a500n(machine_config &config)
+{
a500(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC)
+ m_maincpu->set_clock(amiga_state::CLK_7M_NTSC);
config.device_remove("screen");
ntsc_video(config);
- MCFG_DEVICE_MODIFY("amiga")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC)
+ m_paula->set_clock(amiga_state::CLK_C1_NTSC);
m_cia_0->set_clock(amiga_state::CLK_E_NTSC);
m_cia_1->set_clock(amiga_state::CLK_E_NTSC);
- MCFG_DEVICE_MODIFY("fdc")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC)
-MACHINE_CONFIG_END
+ m_fdc->set_clock(amiga_state::CLK_7M_NTSC);
+}
-MACHINE_CONFIG_START(cdtv_state::cdtv)
+void cdtv_state::cdtv(machine_config &config)
+{
amiga_base(config);
// keyboard
@@ -1774,18 +1773,18 @@ MACHINE_CONFIG_START(cdtv_state::cdtv)
.kbrst_cb().set(FUNC(a1000_state::kbreset_w));
// main cpu
- MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_PAL)
- MCFG_DEVICE_PROGRAM_MAP(cdtv_mem)
+ M68000(config, m_maincpu, amiga_state::CLK_7M_PAL);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cdtv_state::cdtv_mem);
// remote control input converter
- MCFG_DEVICE_ADD("u75", M6502, XTAL(3'000'000))
- MCFG_DEVICE_PROGRAM_MAP(cdtv_rc_mem)
- MCFG_DEVICE_DISABLE()
+ m6502_device &u75(M6502(config, "u75", XTAL(3'000'000)));
+ u75.set_addrmap(AS_PROGRAM, &cdtv_state::cdtv_rc_mem);
+ u75.set_disable();
// lcd controller
#if 0
- MCFG_DEVICE_ADD("u62", LC6554, XTAL(4'000'000))
- MCFG_DEVICE_PROGRAM_MAP(lcd_mem)
+ lc6554_device &u62(LC6554(config, "u62", XTAL(4'000'000))); // device isn't emulated yet
+ u62.set_addrmap(AS_PROGRAM, &cdtv_state::lcd_mem);
#endif
ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_1mb_map).set_options(ENDIANNESS_BIG, 16, 22, 0x200000);
@@ -1807,40 +1806,38 @@ MACHINE_CONFIG_START(cdtv_state::cdtv)
m_dmac->io_write_handler().set(FUNC(cdtv_state::dmac_io_write));
m_dmac->int_handler().set(FUNC(cdtv_state::dmac_int_w));
- tpi6525_device &tpi(TPI6525(config, "u32", 0));
- tpi.out_irq_cb().set(FUNC(cdtv_state::tpi_int_w));
- tpi.out_pb_cb().set(FUNC(cdtv_state::tpi_port_b_write));
+ TPI6525(config, m_tpi, 0);
+ m_tpi->out_irq_cb().set(FUNC(cdtv_state::tpi_int_w));
+ m_tpi->out_pb_cb().set(FUNC(cdtv_state::tpi_port_b_write));
// cd-rom
CR511B(config, m_cdrom, 0);
- m_cdrom->scor_handler().set("u32", FUNC(tpi6525_device::i1_w)).invert();
- m_cdrom->stch_handler().set("u32", FUNC(tpi6525_device::i2_w)).invert();
- m_cdrom->sten_handler().set("u32", FUNC(tpi6525_device::i3_w));
- m_cdrom->xaen_handler().set("u32", FUNC(tpi6525_device::pb2_w));
- m_cdrom->drq_handler().set("u36", FUNC(amiga_dmac_device::xdreq_w));
- m_cdrom->dten_handler().set("u36", FUNC(amiga_dmac_device::xdreq_w));
+ m_cdrom->scor_handler().set(m_tpi, FUNC(tpi6525_device::i1_w)).invert();
+ m_cdrom->stch_handler().set(m_tpi, FUNC(tpi6525_device::i2_w)).invert();
+ m_cdrom->sten_handler().set(m_tpi, FUNC(tpi6525_device::i3_w));
+ m_cdrom->xaen_handler().set(m_tpi, FUNC(tpi6525_device::pb2_w));
+ m_cdrom->drq_handler().set(m_dmac, FUNC(amiga_dmac_device::xdreq_w));
+ m_cdrom->dten_handler().set(m_dmac, FUNC(amiga_dmac_device::xdreq_w));
// software
SOFTWARE_LIST(config, "cd_list").set_original("cdtv");
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(cdtv_state::cdtvn)
+void cdtv_state::cdtvn(machine_config &config)
+{
cdtv(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC)
+ m_maincpu->set_clock(amiga_state::CLK_7M_NTSC);
config.device_remove("screen");
ntsc_video(config);
- MCFG_DEVICE_MODIFY("amiga")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC)
+ m_paula->set_clock(amiga_state::CLK_C1_NTSC);
m_cia_0->set_clock(amiga_state::CLK_E_NTSC);
m_cia_1->set_clock(amiga_state::CLK_E_NTSC);
- MCFG_DEVICE_MODIFY("u36")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC)
- MCFG_DEVICE_MODIFY("fdc")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC)
-MACHINE_CONFIG_END
+ m_dmac->set_clock(amiga_state::CLK_7M_NTSC);
+ m_fdc->set_clock(amiga_state::CLK_7M_NTSC);
+}
-MACHINE_CONFIG_START(a3000_state::a3000)
+void a3000_state::a3000(machine_config &config)
+{
amiga_base(config);
// keyboard
@@ -1849,8 +1846,8 @@ MACHINE_CONFIG_START(a3000_state::a3000)
kbd.kdat_handler().set("cia_0", FUNC(mos8520_device::sp_w));
// main cpu
- MCFG_DEVICE_ADD("maincpu", M68030, XTAL(32'000'000) / 2)
- MCFG_DEVICE_PROGRAM_MAP(a3000_mem)
+ M68030(config, m_maincpu, XTAL(32'000'000) / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &a3000_state::a3000_mem);
ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_1mb_map32).set_options(ENDIANNESS_BIG, 32, 22, 0x200000);
@@ -1862,19 +1859,20 @@ MACHINE_CONFIG_START(a3000_state::a3000)
// software
SOFTWARE_LIST(config, "a3000_list").set_original("amiga_a3000");
SOFTWARE_LIST(config, "ecs_list").set_original("amigaecs_flop");
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(a3000_state::a3000n)
+void a3000_state::a3000n(machine_config &config)
+{
a3000(config);
config.device_remove("screen");
ntsc_video(config);
m_cia_0->set_clock(amiga_state::CLK_E_NTSC);
m_cia_1->set_clock(amiga_state::CLK_E_NTSC);
- MCFG_DEVICE_MODIFY("fdc")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC)
-MACHINE_CONFIG_END
+ m_fdc->set_clock(amiga_state::CLK_7M_NTSC);
+}
-MACHINE_CONFIG_START(a500p_state::a500p)
+void a500p_state::a500p(machine_config &config)
+{
amiga_base(config);
// keyboard
@@ -1884,8 +1882,8 @@ MACHINE_CONFIG_START(a500p_state::a500p)
kbd.krst_handler().set(FUNC(amiga_state::kbreset_w));
// main cpu
- MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_PAL)
- MCFG_DEVICE_PROGRAM_MAP(a500p_mem)
+ M68000(config, m_maincpu, amiga_state::CLK_7M_PAL);
+ m_maincpu->set_addrmap(AS_PROGRAM, &a500p_state::a500p_mem);
ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_1mb_map).set_options(ENDIANNESS_BIG, 16, 22, 0x200000);
@@ -1898,23 +1896,22 @@ MACHINE_CONFIG_START(a500p_state::a500p)
// software
SOFTWARE_LIST(config, "ecs_list").set_original("amigaecs_flop");
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(a500p_state::a500pn)
+void a500p_state::a500pn(machine_config &config)
+{
a500p(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC)
+ m_maincpu->set_clock(amiga_state::CLK_7M_NTSC);
config.device_remove("screen");
ntsc_video(config);
- MCFG_DEVICE_MODIFY("amiga")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC)
+ m_paula->set_clock(amiga_state::CLK_C1_NTSC);
m_cia_0->set_clock(amiga_state::CLK_E_NTSC);
m_cia_1->set_clock(amiga_state::CLK_E_NTSC);
- MCFG_DEVICE_MODIFY("fdc")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC)
-MACHINE_CONFIG_END
+ m_fdc->set_clock(amiga_state::CLK_7M_NTSC);
+}
-MACHINE_CONFIG_START(a600_state::a600)
+void a600_state::a600(machine_config &config)
+{
amiga_base(config);
// keyboard
@@ -1924,8 +1921,8 @@ MACHINE_CONFIG_START(a600_state::a600)
kbd.krst_handler().set(FUNC(amiga_state::kbreset_w));
// main cpu
- MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_PAL)
- MCFG_DEVICE_PROGRAM_MAP(a600_mem)
+ M68000(config, m_maincpu, amiga_state::CLK_7M_PAL);
+ m_maincpu->set_addrmap(AS_PROGRAM, &a600_state::a600_mem);
ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_2mb_map16).set_options(ENDIANNESS_BIG, 16, 22, 0x200000);
@@ -1944,25 +1941,23 @@ MACHINE_CONFIG_START(a600_state::a600)
// software
SOFTWARE_LIST(config, "ecs_list").set_original("amigaecs_flop");
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(a600_state::a600n)
+void a600_state::a600n(machine_config &config)
+{
a600(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC)
- MCFG_DEVICE_MODIFY("gayle")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_28M_NTSC / 2)
+ m_maincpu->set_clock(amiga_state::CLK_7M_NTSC);
+ subdevice<gayle_device>("gayle")->set_clock(amiga_state::CLK_28M_NTSC / 2);
config.device_remove("screen");
ntsc_video(config);
- MCFG_DEVICE_MODIFY("amiga")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC)
+ m_paula->set_clock(amiga_state::CLK_C1_NTSC);
m_cia_0->set_clock(amiga_state::CLK_E_NTSC);
m_cia_1->set_clock(amiga_state::CLK_E_NTSC);
- MCFG_DEVICE_MODIFY("fdc")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC)
-MACHINE_CONFIG_END
+ m_fdc->set_clock(amiga_state::CLK_7M_NTSC);
+}
-MACHINE_CONFIG_START(a1200_state::a1200)
+void a1200_state::a1200(machine_config &config)
+{
amiga_base(config);
// keyboard
@@ -1972,14 +1967,13 @@ MACHINE_CONFIG_START(a1200_state::a1200)
kbd.krst_handler().set(FUNC(amiga_state::kbreset_w));
// main cpu
- MCFG_DEVICE_ADD("maincpu", M68EC020, amiga_state::CLK_28M_PAL / 2)
- MCFG_DEVICE_PROGRAM_MAP(a1200_mem)
+ M68EC020(config, m_maincpu, amiga_state::CLK_28M_PAL / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &a1200_state::a1200_mem);
ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_2mb_map32).set_options(ENDIANNESS_BIG, 32, 22, 0x200000);
- MCFG_DEVICE_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga)
- MCFG_SCREEN_NO_PALETTE
+ m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga));
+ m_screen->set_palette(finder_base::DUMMY_TAG);
config.device_remove("palette");
@@ -1998,8 +1992,7 @@ MACHINE_CONFIG_START(a1200_state::a1200)
// keyboard
#if 0
- MCFG_DEVICE_MODIFY("kbd")
- MCFG_SLOT_DEFAULT_OPTION("a1200_us")
+ subdevice<amiga_keyboard_bus_device>("kbd").set_default_option("a1200_us");
#endif
// todo: pcmcia
@@ -2007,28 +2000,25 @@ MACHINE_CONFIG_START(a1200_state::a1200)
// software
SOFTWARE_LIST(config, "aga_list").set_original("amigaaga_flop");
SOFTWARE_LIST(config, "ecs_list").set_original("amigaecs_flop");
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(a1200_state::a1200n)
+void a1200_state::a1200n(machine_config &config)
+{
a1200(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_28M_NTSC / 2)
- MCFG_DEVICE_MODIFY("gayle")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_28M_NTSC / 2)
+ m_maincpu->set_clock(amiga_state::CLK_28M_NTSC / 2);
+ subdevice<gayle_device>("gayle")->set_clock(amiga_state::CLK_28M_NTSC / 2);
config.device_remove("screen");
ntsc_video(config);
- MCFG_DEVICE_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga)
- MCFG_SCREEN_NO_PALETTE
- MCFG_DEVICE_MODIFY("amiga")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC)
+ m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga));
+ m_screen->set_palette(finder_base::DUMMY_TAG);
+ m_paula->set_clock(amiga_state::CLK_C1_NTSC);
m_cia_0->set_clock(amiga_state::CLK_E_NTSC);
m_cia_1->set_clock(amiga_state::CLK_E_NTSC);
- MCFG_DEVICE_MODIFY("fdc")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC)
-MACHINE_CONFIG_END
+ m_fdc->set_clock(amiga_state::CLK_7M_NTSC);
+}
-MACHINE_CONFIG_START(a4000_state::a4000)
+void a4000_state::a4000(machine_config &config)
+{
amiga_base(config);
// keyboard
@@ -2037,14 +2027,13 @@ MACHINE_CONFIG_START(a4000_state::a4000)
kbd.kdat_handler().set("cia_0", FUNC(mos8520_device::sp_w));
// main cpu
- MCFG_DEVICE_ADD("maincpu", M68040, XTAL(50'000'000) / 2)
- MCFG_DEVICE_PROGRAM_MAP(a4000_mem)
+ M68040(config, m_maincpu, XTAL(50'000'000) / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &a4000_state::a4000_mem);
ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_2mb_map32).set_options(ENDIANNESS_BIG, 32, 22, 0x200000);
- MCFG_DEVICE_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga)
- MCFG_SCREEN_NO_PALETTE
+ m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga));
+ m_screen->set_palette(finder_base::DUMMY_TAG);
config.device_remove("palette");
@@ -2062,55 +2051,52 @@ MACHINE_CONFIG_START(a4000_state::a4000)
// software
SOFTWARE_LIST(config, "aga_list").set_original("amigaaga_flop");
SOFTWARE_LIST(config, "ecs_list").set_original("amigaecs_flop");
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(a4000_state::a4000n)
+void a4000_state::a4000n(machine_config &config)
+{
a4000(config);
config.device_remove("screen");
ntsc_video(config);
- MCFG_DEVICE_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga)
- MCFG_SCREEN_NO_PALETTE
- MCFG_DEVICE_MODIFY("amiga")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC)
+ m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga));
+ m_screen->set_palette(finder_base::DUMMY_TAG);
+ m_paula->set_clock(amiga_state::CLK_C1_NTSC);
m_cia_0->set_clock(amiga_state::CLK_E_NTSC);
m_cia_1->set_clock(amiga_state::CLK_E_NTSC);
- MCFG_DEVICE_MODIFY("fdc")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC)
-MACHINE_CONFIG_END
+ m_fdc->set_clock(amiga_state::CLK_7M_NTSC);
+}
-MACHINE_CONFIG_START(a4000_state::a400030)
+void a4000_state::a400030(machine_config &config)
+{
a4000(config);
// main cpu
- config.device_remove("maincpu");
- MCFG_DEVICE_ADD("maincpu", M68EC030, XTAL(50'000'000) / 2)
- MCFG_DEVICE_PROGRAM_MAP(a400030_mem)
+ M68EC030(config.replace(), m_maincpu, XTAL(50'000'000) / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &a4000_state::a400030_mem);
// todo: ide
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(a4000_state::a400030n)
+void a4000_state::a400030n(machine_config &config)
+{
a400030(config);
config.device_remove("screen");
ntsc_video(config);
- MCFG_DEVICE_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga)
- MCFG_SCREEN_NO_PALETTE
- MCFG_DEVICE_MODIFY("amiga")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC)
+ m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga));
+ m_screen->set_palette(finder_base::DUMMY_TAG);
+ m_paula->set_clock(amiga_state::CLK_C1_NTSC);
m_cia_0->set_clock(amiga_state::CLK_E_NTSC);
m_cia_1->set_clock(amiga_state::CLK_E_NTSC);
- MCFG_DEVICE_MODIFY("fdc")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC)
-MACHINE_CONFIG_END
+ m_fdc->set_clock(amiga_state::CLK_7M_NTSC);
+}
-MACHINE_CONFIG_START(cd32_state::cd32)
+void cd32_state::cd32(machine_config &config)
+{
amiga_base(config);
// main cpu
- MCFG_DEVICE_ADD("maincpu", M68EC020, amiga_state::CLK_28M_PAL / 2)
- MCFG_DEVICE_PROGRAM_MAP(cd32_mem)
+ M68EC020(config, m_maincpu, amiga_state::CLK_28M_PAL / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cd32_state::cd32_mem);
ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_2mb_map32).set_options(ENDIANNESS_BIG, 32, 22, 0x200000);
@@ -2124,68 +2110,62 @@ MACHINE_CONFIG_START(cd32_state::cd32)
akiko.sda_r_callback().set("i2cmem", FUNC(i2cmem_device::read_sda));
akiko.sda_w_callback().set("i2cmem", FUNC(i2cmem_device::write_sda));
- MCFG_DEVICE_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga)
- MCFG_SCREEN_NO_PALETTE
+ m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga));
+ m_screen->set_palette(finder_base::DUMMY_TAG);
config.device_remove("palette");
MCFG_VIDEO_START_OVERRIDE(amiga_state, amiga_aga)
- MCFG_DEVICE_ADD("cdda", CDDA)
- MCFG_SOUND_ROUTE(0, "lspeaker", 0.50)
- MCFG_SOUND_ROUTE(1, "rspeaker", 0.50)
+ CDDA(config, m_cdda);
+ m_cdda->add_route(0, "lspeaker", 0.50);
+ m_cdda->add_route(1, "rspeaker", 0.50);
m_cia_0->pa_wr_callback().set(FUNC(cd32_state::akiko_cia_0_port_a_write));
m_cia_0->sp_wr_callback().set_nop();
CDROM(config, "cdrom").set_interface("cd32_cdrom");
SOFTWARE_LIST(config, "cd_list").set_original("cd32");
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(cd32_state::cd32n)
+void cd32_state::cd32n(machine_config &config)
+{
cd32(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_28M_NTSC / 2)
+ m_maincpu->set_clock(amiga_state::CLK_28M_NTSC / 2);
config.device_remove("screen");
ntsc_video(config);
- MCFG_DEVICE_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga)
- MCFG_SCREEN_NO_PALETTE
- MCFG_DEVICE_MODIFY("amiga")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC)
+ m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga));
+ m_screen->set_palette(finder_base::DUMMY_TAG);
+ m_paula->set_clock(amiga_state::CLK_C1_NTSC);
m_cia_0->set_clock(amiga_state::CLK_E_NTSC);
m_cia_1->set_clock(amiga_state::CLK_E_NTSC);
- MCFG_DEVICE_MODIFY("fdc")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC)
-MACHINE_CONFIG_END
+ m_fdc->set_clock(amiga_state::CLK_7M_NTSC);
+}
-MACHINE_CONFIG_START(a4000_state::a4000t)
+void a4000_state::a4000t(machine_config &config)
+{
a4000(config);
// main cpu
- config.device_remove("maincpu");
- MCFG_DEVICE_ADD("maincpu", M68040, XTAL(50'000'000) / 2)
- MCFG_DEVICE_PROGRAM_MAP(a4000t_mem)
+ M68040(config.replace(), m_maincpu, XTAL(50'000'000) / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &a4000_state::a4000t_mem);
// todo: ide, zorro3, scsi, super dmac
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(a4000_state::a4000tn)
+void a4000_state::a4000tn(machine_config &config)
+{
a4000(config);
config.device_remove("screen");
ntsc_video(config);
- MCFG_DEVICE_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga)
- MCFG_SCREEN_NO_PALETTE
- MCFG_DEVICE_MODIFY("amiga")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC)
+ m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga));
+ m_screen->set_palette(finder_base::DUMMY_TAG);
+ m_paula->set_clock(amiga_state::CLK_C1_NTSC);
m_cia_0->set_clock(amiga_state::CLK_E_NTSC);
m_cia_1->set_clock(amiga_state::CLK_E_NTSC);
- MCFG_DEVICE_MODIFY("fdc")
- MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC)
-MACHINE_CONFIG_END
+ m_fdc->set_clock(amiga_state::CLK_7M_NTSC);
+}
//**************************************************************************
diff --git a/src/mame/drivers/ampoker2.cpp b/src/mame/drivers/ampoker2.cpp
index b5581f8e40f..4bd0e3570f7 100644
--- a/src/mame/drivers/ampoker2.cpp
+++ b/src/mame/drivers/ampoker2.cpp
@@ -1166,28 +1166,28 @@ GFXDECODE_END
* Machine Driver *
*************************/
-MACHINE_CONFIG_START(ampoker2_state::ampoker2)
-
+void ampoker2_state::ampoker2(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, MASTER_CLOCK/2) /* 3 MHz */
- MCFG_DEVICE_PROGRAM_MAP(program_map)
- MCFG_DEVICE_IO_MAP(io_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(ampoker2_state, nmi_line_pulse, 1536)
+ Z80(config, m_maincpu, MASTER_CLOCK/2); /* 3 MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &ampoker2_state::program_map);
+ m_maincpu->set_addrmap(AS_IO, &ampoker2_state::io_map);
+ m_maincpu->set_periodic_int(FUNC(ampoker2_state::nmi_line_pulse), attotime::from_hz(1536));
WATCHDOG_TIMER(config, m_watchdog).set_time(attotime::from_msec(200)); /* 200 ms, measured */
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
/* if VBLANK is used, the watchdog timer stop to work.
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
*/
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(20*8, 56*8-1, 2*8, 32*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(ampoker2_state, screen_update)
- MCFG_SCREEN_PALETTE("palette")
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(20*8, 56*8-1, 2*8, 32*8-1);
+ screen.set_screen_update(FUNC(ampoker2_state::screen_update));
+ screen.set_palette("palette");
GFXDECODE(config, m_gfxdecode, "palette", gfx_ampoker2);
PALETTE(config, "palette", FUNC(ampoker2_state::ampoker2_palette), 512);
@@ -1195,15 +1195,16 @@ MACHINE_CONFIG_START(ampoker2_state::ampoker2)
/* sound hardware */
SPEAKER(config, "mono").front_center();
AY8910(config, "aysnd", MASTER_CLOCK/4).add_route(ALL_OUTPUTS, "mono", 0.30); /* 1.5 MHz, measured */
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(ampoker2_state::sigma2k)
+void ampoker2_state::sigma2k(machine_config &config)
+{
ampoker2(config);
/* video hardware */
m_gfxdecode->set_info(gfx_sigma2k);
MCFG_VIDEO_START_OVERRIDE(ampoker2_state, sigma2k)
-MACHINE_CONFIG_END
+}
/*************************
diff --git a/src/mame/drivers/ampro.cpp b/src/mame/drivers/ampro.cpp
index 74a7b2e1f43..b5c7cbce501 100644
--- a/src/mame/drivers/ampro.cpp
+++ b/src/mame/drivers/ampro.cpp
@@ -88,17 +88,17 @@ WRITE8_MEMBER( ampro_state::port00_w )
READ8_MEMBER( ampro_state::io_r )
{
if (offset < 0x40)
- return m_ctc->read(space, offset>>4);
+ return m_ctc->read(offset>>4);
else
- return m_dart->ba_cd_r(space, offset>>2);
+ return m_dart->ba_cd_r(offset>>2);
}
WRITE8_MEMBER( ampro_state::io_w )
{
if (offset < 0x40)
- m_ctc->write(space, offset>>4, data);
+ m_ctc->write(offset>>4, data);
else
- m_dart->ba_cd_w(space, offset>>2, data);
+ m_dart->ba_cd_w(offset>>2, data);
}
void ampro_state::ampro_mem(address_map &map)
diff --git a/src/mame/drivers/ampscarp.cpp b/src/mame/drivers/ampscarp.cpp
index 05b72db1734..f9ca05e3442 100644
--- a/src/mame/drivers/ampscarp.cpp
+++ b/src/mame/drivers/ampscarp.cpp
@@ -37,10 +37,11 @@ void ampscarp_state::mem_map(address_map &map)
static INPUT_PORTS_START( ampscarp )
INPUT_PORTS_END
-MACHINE_CONFIG_START(ampscarp_state::ampscarp)
- MCFG_DEVICE_ADD("maincpu", MC68HC11, 8'000'000) // type and clock unknown
- MCFG_DEVICE_PROGRAM_MAP(mem_map)
-MACHINE_CONFIG_END
+void ampscarp_state::ampscarp(machine_config &config)
+{
+ MC68HC11(config, m_maincpu, 8'000'000); // type and clock unknown
+ m_maincpu->set_addrmap(AS_PROGRAM, &ampscarp_state::mem_map);
+}
ROM_START( ampscarp )
ROM_REGION( 0x20000, "maincpu", 0 )
diff --git a/src/mame/drivers/amspdwy.cpp b/src/mame/drivers/amspdwy.cpp
index cc817a8c466..373b1e92627 100644
--- a/src/mame/drivers/amspdwy.cpp
+++ b/src/mame/drivers/amspdwy.cpp
@@ -247,27 +247,27 @@ void amspdwy_state::machine_reset()
m_wheel_return[1] = 0;
}
-MACHINE_CONFIG_START(amspdwy_state::amspdwy)
-
+void amspdwy_state::amspdwy(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 3000000)
- MCFG_DEVICE_PROGRAM_MAP(amspdwy_map)
- MCFG_DEVICE_IO_MAP(amspdwy_portmap)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", amspdwy_state, irq0_line_hold) /* IRQ: 60Hz, NMI: retn */
+ Z80(config, m_maincpu, 3000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &amspdwy_state::amspdwy_map);
+ m_maincpu->set_addrmap(AS_IO, &amspdwy_state::amspdwy_portmap);
+ m_maincpu->set_vblank_int("screen", FUNC(amspdwy_state::irq0_line_hold)); /* IRQ: 60Hz, NMI: retn */
- MCFG_DEVICE_ADD("audiocpu", Z80, 3000000)
- MCFG_DEVICE_PROGRAM_MAP(amspdwy_sound_map)
+ Z80(config, m_audiocpu, 3000000);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &amspdwy_state::amspdwy_sound_map);
config.m_perfect_cpu_quantum = subtag("maincpu");
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(256, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0+16, 256-16-1)
- MCFG_SCREEN_UPDATE_DRIVER(amspdwy_state, screen_update_amspdwy)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ m_screen->set_size(256, 256);
+ m_screen->set_visarea(0, 256-1, 0+16, 256-16-1);
+ m_screen->set_screen_update(FUNC(amspdwy_state::screen_update_amspdwy));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_amspdwy);
PALETTE(config, m_palette).set_format(palette_device::BGR_233_inverted, 32);
@@ -283,7 +283,7 @@ MACHINE_CONFIG_START(amspdwy_state::amspdwy)
m_ym2151->irq_handler().set_inputline(m_audiocpu, 0);
m_ym2151->add_route(0, "lspeaker", 1.0);
m_ym2151->add_route(1, "rspeaker", 1.0);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/amstr_pc.cpp b/src/mame/drivers/amstr_pc.cpp
index 5ef0dec8787..3abea11e6d8 100644
--- a/src/mame/drivers/amstr_pc.cpp
+++ b/src/mame/drivers/amstr_pc.cpp
@@ -503,7 +503,8 @@ void amstrad_pc_state::cfg_fdc(device_t *device)
fdc1->set_default_option("35dd");
}
-MACHINE_CONFIG_START(amstrad_pc_state::pc200)
+void amstrad_pc_state::pc200(machine_config &config)
+{
/* basic machine hardware */
I8086(config, m_maincpu, 8000000);
m_maincpu->set_addrmap(AS_PROGRAM, &amstrad_pc_state::ppc640_map);
@@ -513,14 +514,12 @@ MACHINE_CONFIG_START(amstrad_pc_state::pc200)
PCNOPPI_MOTHERBOARD(config, "mb", 0).set_cputag(m_maincpu);
// FIXME: determine ISA bus clock
- MCFG_DEVICE_ADD("aga", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, "aga_pc200", true)
- MCFG_DEVICE_ADD("fdc", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, "fdc_xt", true)
- MCFG_SLOT_OPTION_MACHINE_CONFIG("fdc_xt", cfg_fdc)
- MCFG_DEVICE_ADD("com", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, "com", true)
- MCFG_SLOT_OPTION_MACHINE_CONFIG("com", cfg_com)
+ ISA8_SLOT(config, "aga", 0, "mb:isa", pc_isa8_cards, "aga_pc200", true);
+ ISA8_SLOT(config, "fdc", 0, "mb:isa", pc_isa8_cards, "fdc_xt", true).set_option_machine_config("fdc_xt", cfg_fdc);
+ ISA8_SLOT(config, "com", 0, "mb:isa", pc_isa8_cards, "com", true).set_option_machine_config("com", cfg_com);
- MCFG_DEVICE_ADD("isa1", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, nullptr, false)
- MCFG_DEVICE_ADD("isa2", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, nullptr, false)
+ ISA8_SLOT(config, "isa1", 0, "mb:isa", pc_isa8_cards, nullptr, false);
+ ISA8_SLOT(config, "isa2", 0, "mb:isa", pc_isa8_cards, nullptr, false);
/* printer */
pc_lpt_device &lpt0(PC_LPT(config, "lpt_0"));
@@ -539,7 +538,7 @@ MACHINE_CONFIG_START(amstrad_pc_state::pc200)
/* internal ram */
RAM(config, m_ram).set_default_size("640K").set_extra_options("512K");
-MACHINE_CONFIG_END
+}
void amstrad_pc_state::pc2086(machine_config &config)
{
diff --git a/src/mame/drivers/amstrad.cpp b/src/mame/drivers/amstrad.cpp
index 2c62608955a..c9280c9a6ed 100644
--- a/src/mame/drivers/amstrad.cpp
+++ b/src/mame/drivers/amstrad.cpp
@@ -905,10 +905,10 @@ void amstrad_centronics_devices(device_slot_interface &device)
MACHINE_CONFIG_START(amstrad_state::amstrad_base)
/* Machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 16_MHz_XTAL / 4)
- MCFG_DEVICE_PROGRAM_MAP(amstrad_mem)
- MCFG_DEVICE_IO_MAP(amstrad_io)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(amstrad_state,amstrad_cpu_acknowledge_int)
+ Z80(config, m_maincpu, 16_MHz_XTAL / 4);
+ m_maincpu->set_addrmap(AS_PROGRAM, &amstrad_state::amstrad_mem);
+ m_maincpu->set_addrmap(AS_IO, &amstrad_state::amstrad_io);
+ m_maincpu->set_irq_acknowledge_callback(FUNC(amstrad_state::amstrad_cpu_acknowledge_int));
config.m_minimum_quantum = attotime::from_hz(60);
@@ -922,12 +922,12 @@ MACHINE_CONFIG_START(amstrad_state::amstrad_base)
ppi.out_pc_callback().set(FUNC(amstrad_state::amstrad_ppi_portc_w));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(16_MHz_XTAL, 1024, 32, 32 + 640 + 64, 312, 56 + 15, 200 + 15)
- MCFG_SCREEN_UPDATE_DRIVER(amstrad_state, screen_update_amstrad)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, amstrad_state, screen_vblank_amstrad))
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(16_MHz_XTAL, 1024, 32, 32 + 640 + 64, 312, 56 + 15, 200 + 15);
+ m_screen->set_screen_update(FUNC(amstrad_state::screen_update_amstrad));
+ m_screen->screen_vblank().set(FUNC(amstrad_state::screen_vblank_amstrad));
+ m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE);
+ m_screen->set_palette(m_palette);
PALETTE(config, m_palette, FUNC(amstrad_state::amstrad_cpc_palette), 32);
@@ -965,7 +965,8 @@ MACHINE_CONFIG_START(amstrad_state::amstrad_base)
MACHINE_CONFIG_END
-MACHINE_CONFIG_START(amstrad_state::cpc464)
+void amstrad_state::cpc464(machine_config &config)
+{
amstrad_base(config);
cpc_expansion_slot_device &exp(CPC_EXPANSION_SLOT(config, "exp", 16_MHz_XTAL / 4, cpc464_exp_cards, nullptr));
@@ -977,7 +978,7 @@ MACHINE_CONFIG_START(amstrad_state::cpc464)
/* internal ram */
RAM(config, m_ram).set_default_size("64K").set_extra_options("128K,320K,576K");
-MACHINE_CONFIG_END
+}
void amstrad_state::cpc664(machine_config &config)
{
@@ -1018,21 +1019,22 @@ void amstrad_state::cpc6128(machine_config &config)
}
-MACHINE_CONFIG_START(amstrad_state::kccomp)
+void amstrad_state::kccomp(machine_config &config)
+{
cpc6128(config);
MCFG_MACHINE_START_OVERRIDE(amstrad_state,kccomp)
MCFG_MACHINE_RESET_OVERRIDE(amstrad_state,kccomp)
m_palette->set_init(FUNC(amstrad_state::kccomp_palette));
-MACHINE_CONFIG_END
+}
MACHINE_CONFIG_START(amstrad_state::cpcplus)
/* Machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 40_MHz_XTAL / 10)
- MCFG_DEVICE_PROGRAM_MAP(amstrad_mem)
- MCFG_DEVICE_IO_MAP(amstrad_io)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(amstrad_state,amstrad_cpu_acknowledge_int)
+ Z80(config, m_maincpu, 40_MHz_XTAL / 10);
+ m_maincpu->set_addrmap(AS_PROGRAM, &amstrad_state::amstrad_mem);
+ m_maincpu->set_addrmap(AS_IO, &amstrad_state::amstrad_io);
+ m_maincpu->set_irq_acknowledge_callback(FUNC(amstrad_state::amstrad_cpu_acknowledge_int));
config.m_minimum_quantum = attotime::from_hz(60);
@@ -1046,12 +1048,12 @@ MACHINE_CONFIG_START(amstrad_state::cpcplus)
ppi.out_pc_callback().set(FUNC(amstrad_state::amstrad_ppi_portc_w));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS((40_MHz_XTAL * 2) / 5, 1024, 32, 32 + 640 + 64, 312, 56 + 15, 200 + 15)
- MCFG_SCREEN_UPDATE_DRIVER(amstrad_state, screen_update_amstrad)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, amstrad_state, screen_vblank_amstrad))
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw((40_MHz_XTAL * 2) / 5, 1024, 32, 32 + 640 + 64, 312, 56 + 15, 200 + 15);
+ m_screen->set_screen_update(FUNC(amstrad_state::screen_update_amstrad));
+ m_screen->screen_vblank().set(FUNC(amstrad_state::screen_vblank_amstrad));
+ m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE);
+ m_screen->set_palette(m_palette);
PALETTE(config, m_palette, FUNC(amstrad_state::amstrad_plus_palette), 4096);
@@ -1105,12 +1107,13 @@ MACHINE_CONFIG_START(amstrad_state::cpcplus)
MACHINE_CONFIG_END
-MACHINE_CONFIG_START(amstrad_state::gx4000)
+void amstrad_state::gx4000(machine_config &config)
+{
/* Machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 40_MHz_XTAL / 10)
- MCFG_DEVICE_PROGRAM_MAP(amstrad_mem)
- MCFG_DEVICE_IO_MAP(amstrad_io)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(amstrad_state,amstrad_cpu_acknowledge_int)
+ Z80(config, m_maincpu, 40_MHz_XTAL / 10);
+ m_maincpu->set_addrmap(AS_PROGRAM, &amstrad_state::amstrad_mem);
+ m_maincpu->set_addrmap(AS_IO, &amstrad_state::amstrad_io);
+ m_maincpu->set_irq_acknowledge_callback(FUNC(amstrad_state::amstrad_cpu_acknowledge_int));
config.m_minimum_quantum = attotime::from_hz(60);
@@ -1124,12 +1127,12 @@ MACHINE_CONFIG_START(amstrad_state::gx4000)
ppi.out_pc_callback().set(FUNC(amstrad_state::amstrad_ppi_portc_w));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS((40_MHz_XTAL * 2) / 5, 1024, 32, 32 + 640 + 64, 312, 56 + 15, 200 + 15)
- MCFG_SCREEN_UPDATE_DRIVER(amstrad_state, screen_update_amstrad)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, amstrad_state, screen_vblank_amstrad))
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw((40_MHz_XTAL * 2) / 5, 1024, 32, 32 + 640 + 64, 312, 56 + 15, 200 + 15);
+ m_screen->set_screen_update(FUNC(amstrad_state::screen_update_amstrad));
+ m_screen->screen_vblank().set(FUNC(amstrad_state::screen_vblank_amstrad));
+ m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE);
+ m_screen->set_palette(m_palette);
PALETTE(config, m_palette, FUNC(amstrad_state::amstrad_plus_palette), 4096);
@@ -1153,10 +1156,11 @@ MACHINE_CONFIG_START(amstrad_state::gx4000)
/* internal ram */
RAM(config, m_ram).set_default_size("64K");
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(amstrad_state::aleste)
+void amstrad_state::aleste(machine_config &config)
+{
cpc6128(config);
MCFG_MACHINE_START_OVERRIDE(amstrad_state,aleste)
MCFG_MACHINE_RESET_OVERRIDE(amstrad_state,aleste)
@@ -1187,7 +1191,7 @@ MACHINE_CONFIG_START(amstrad_state::aleste)
/* internal ram */
m_ram->set_default_size("2M");
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/amusco.cpp b/src/mame/drivers/amusco.cpp
index 8c5c28053b6..aa5cf9db461 100644
--- a/src/mame/drivers/amusco.cpp
+++ b/src/mame/drivers/amusco.cpp
@@ -532,8 +532,8 @@ void amusco_state::amusco_palette(palette_device &palette) const
* Machine Drivers *
*************************/
-MACHINE_CONFIG_START(amusco_state::amusco)
-
+void amusco_state::amusco(machine_config &config)
+{
/* basic machine hardware */
I8088(config, m_maincpu, CPU_CLOCK); // 5 MHz ?
m_maincpu->set_addrmap(AS_PROGRAM, &amusco_state::mem_map);
@@ -574,12 +574,12 @@ MACHINE_CONFIG_START(amusco_state::amusco)
TICKET_DISPENSER(config, m_hopper, attotime::from_msec(30), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_HIGH);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(88*8, 27*10) // screen size: 88*8 27*10
- MCFG_SCREEN_VISIBLE_AREA(0*8, 74*8-1, 0*10, 24*10-1) // visible scr: 74*8 24*10
- MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ m_screen->set_size(88*8, 27*10); // screen size: 88*8 27*10
+ m_screen->set_visarea(0*8, 74*8-1, 0*10, 24*10-1); // visible scr: 74*8 24*10
+ m_screen->set_screen_update("crtc", FUNC(mc6845_device::screen_update));
GFXDECODE(config, m_gfxdecode, "palette", gfx_amusco);
PALETTE(config, "palette", FUNC(amusco_state::amusco_palette), 8*8);
@@ -595,9 +595,8 @@ MACHINE_CONFIG_START(amusco_state::amusco)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("sn", SN76489A, SND_CLOCK)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
-MACHINE_CONFIG_END
+ SN76489A(config, "sn", SND_CLOCK).add_route(ALL_OUTPUTS, "mono", 0.80);
+}
void amusco_state::draw88pkr(machine_config &config)
{
diff --git a/src/mame/drivers/amust.cpp b/src/mame/drivers/amust.cpp
index 42bb35a58ea..282c61e12f5 100644
--- a/src/mame/drivers/amust.cpp
+++ b/src/mame/drivers/amust.cpp
@@ -433,11 +433,12 @@ void amust_state::init_amust()
membank("bankw0")->configure_entry(0, &main[0xf800]);
}
-MACHINE_CONFIG_START(amust_state::amust)
+void amust_state::amust(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu",Z80, XTAL(16'000'000) / 4)
- MCFG_DEVICE_PROGRAM_MAP(mem_map)
- MCFG_DEVICE_IO_MAP(io_map)
+ Z80(config, m_maincpu, XTAL(16'000'000) / 4);
+ m_maincpu->set_addrmap(AS_PROGRAM, &amust_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &amust_state::io_map);
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER, rgb_t::green()));
@@ -451,8 +452,7 @@ MACHINE_CONFIG_START(amust_state::amust)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("beeper", BEEP, 800)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+ BEEP(config, m_beep, 800).add_route(ALL_OUTPUTS, "mono", 0.50);
/* Devices */
h46505_device &crtc(H46505(config, "crtc", XTAL(14'318'181) / 8));
@@ -503,7 +503,7 @@ MACHINE_CONFIG_START(amust_state::amust)
ppi2.in_pb_callback().set(FUNC(amust_state::port09_r));
ppi2.in_pc_callback().set(FUNC(amust_state::port0a_r));
ppi2.out_pc_callback().set(FUNC(amust_state::port0a_w));
-MACHINE_CONFIG_END
+}
/* ROM definition */
ROM_START( amust )
diff --git a/src/mame/drivers/anes.cpp b/src/mame/drivers/anes.cpp
index c7370d40d4a..44a6d42b748 100644
--- a/src/mame/drivers/anes.cpp
+++ b/src/mame/drivers/anes.cpp
@@ -156,29 +156,29 @@ void anes_state::machine_start()
-MACHINE_CONFIG_START(anes_state::anes)
+void anes_state::anes(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, XTAL(16'000'000) / 2) // Z0840008PSC
- MCFG_DEVICE_PROGRAM_MAP(prg_map)
- MCFG_DEVICE_IO_MAP(io_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", anes_state, irq0_line_hold)
+ z80_device &maincpu(Z80(config, "maincpu", XTAL(16'000'000) / 2)); // Z0840008PSC
+ maincpu.set_addrmap(AS_PROGRAM, &anes_state::prg_map);
+ maincpu.set_addrmap(AS_IO, &anes_state::io_map);
+ maincpu.set_vblank_int("screen", FUNC(anes_state::irq0_line_hold));
// all wrong
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0*8, 32*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(anes_state, screen_update)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(anes_state::screen_update));
+ screen.set_palette("palette");
- MCFG_PALETTE_ADD("palette", 0x100)
+ PALETTE(config, "palette").set_entries(0x100);
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("ym", YM2413, XTAL(3'579'545))
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
-MACHINE_CONFIG_END
+ YM2413(config, "ym", XTAL(3'579'545)).add_route(ALL_OUTPUTS, "mono", 0.30);
+}
ROM_START( tonpuu )
diff --git a/src/mame/drivers/apbeena.cpp b/src/mame/drivers/apbeena.cpp
deleted file mode 100644
index c83e72ef05e..00000000000
--- a/src/mame/drivers/apbeena.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:R. Belmont
-/***************************************************************************
-
- apbeena.cpp
-
- Skeleton driver for the Sega Advanced Pico BEENA
-
- H/W is custom Sega SoC with ARM7TDMI core at 81 MHz.
-
- TODO:
- Everything!
- Needs the internal BIOS dumped.
-
-***************************************************************************/
-
-#include "emu.h"
-#include "cpu/arm7/arm7.h"
-
-class beena_state : public driver_device
-{
-public:
- beena_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "arm7")
- { }
-
- void beena(machine_config &config);
-
-private:
- void machine_start() override;
- void machine_reset() override;
-
- void beena_arm7_map(address_map &map);
-
- required_device<arm7_cpu_device> m_maincpu;
-};
-
-void beena_state::beena_arm7_map(address_map &map)
-{
- map(0x00000000, 0x000001ff).rom().region("cart", 0);
- map(0x80000000, 0x807fffff).rom().region("cart", 0);
-}
-
-static INPUT_PORTS_START( beena )
-INPUT_PORTS_END
-
-void beena_state::machine_reset()
-{
-}
-
-void beena_state::machine_start()
-{
-}
-
-void beena_state::beena(machine_config &config)
-{
- ARM7_BE(config, m_maincpu, 81'000'000);
- m_maincpu->set_addrmap(AS_PROGRAM, &beena_state::beena_arm7_map);
-}
-
-ROM_START( apb_frpc )
- ROM_REGION32_BE( 0x80000, "bios", 0 ) // SoC internal BIOS
- ROM_LOAD16_WORD_SWAP( "beenabios.bin", 0x000000, 0x080000, NO_DUMP )
-
- ROM_REGION32_BE( 0x800000, "cart", 0 ) // cartridge ROM
- ROM_LOAD16_WORD_SWAP( "freshprettycure.bin", 0x000000, 0x800000, CRC(afa3466c) SHA1(b49914f97db95f611489487f558d13d7cceb3299) )
-
- ROM_REGION( 0x2000000, "pages", 0 ) // book pages
- ROM_LOAD( "0 - 0010.png", 0x000000, 0x186546b, CRC(6d3d8c91) SHA1(9909322c09277ddd306f10f9a04a897b0fe74961) )
- ROM_LOAD( "0 - 0011.png", 0x000000, 0x179d3a8, CRC(c3911254) SHA1(2d2932e97a0b20a9b5e5fd78a3bbad0f1e146813) )
- ROM_LOAD( "0 - 0005.png", 0x000000, 0x18998f4, CRC(16837cc0) SHA1(eb86b2943cf603a63cd5b94faa0d06ee8a3139d6) )
- ROM_LOAD( "0 - 0007.png", 0x000000, 0x195df07, CRC(efccbb5b) SHA1(83de26d52cb6578d8323551a289223c8a305e37d) )
- ROM_LOAD( "0 - 0008.png", 0x000000, 0x18a9dd8, CRC(7455ebb2) SHA1(34576eee067534535cda838a9e94794e2cfee585) )
- ROM_LOAD( "0 - 0002.png", 0x000000, 0x1e37a3d, CRC(62ae3535) SHA1(d8f6c19c466715df5a568ac7cac8dacb53f2e04a) )
- ROM_LOAD( "0 - 0004.png", 0x000000, 0x19a864d, CRC(edede3ea) SHA1(81914894358c74064aa5f9e980ac37f7140f80c3) )
- ROM_LOAD( "0 - 0003.png", 0x000000, 0x1ce4f16, CRC(fe6c72d9) SHA1(2c4412eb518fbac2e8519c87e53270d960ecab53) )
- ROM_LOAD( "0 - 0009.png", 0x000000, 0x17a5c57, CRC(59ead843) SHA1(29c4cd7929cfd68f41d65024ee5ca3cc62fa4a8b) )
- ROM_LOAD( "0 - 0006.png", 0x000000, 0x195b7e5, CRC(3e307e6d) SHA1(23ed9ab2a4122d7cb33d8d6174ca901b88647b4d) )
- ROM_LOAD( "0 - 0012.png", 0x000000, 0x187a9df, CRC(f1cdc95d) SHA1(aa926c9360edcecdaa3a9ce1b5e17ee61048cee4) )
- ROM_LOAD( "0 - 0001.png", 0x000000, 0x1ca26ec, CRC(d8e18a54) SHA1(887a96931bf622cb673f2550323ad3923eff337e) )
-ROM_END
-
-// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-CONS( 2009, apb_frpc, 0, 0, beena, beena, beena_state, empty_init, "Sega", "Advanced Pico BEENA: Issho ni Henshin Fresh Pretty Cure", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
diff --git a/src/mame/drivers/apc.cpp b/src/mame/drivers/apc.cpp
index e7d306c60c5..6d065a94df2 100644
--- a/src/mame/drivers/apc.cpp
+++ b/src/mame/drivers/apc.cpp
@@ -936,13 +936,13 @@ static void apc_floppies(device_slot_interface &device)
device.option_add("8", FLOPPY_8_DSDD);
}
-MACHINE_CONFIG_START(apc_state::apc)
-
+void apc_state::apc(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD(m_maincpu,I8086,MAIN_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(apc_map)
- MCFG_DEVICE_IO_MAP(apc_io)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("pic8259_master", pic8259_device, inta_cb)
+ I8086(config, m_maincpu, MAIN_CLOCK);
+ m_maincpu->set_addrmap(AS_PROGRAM, &apc_state::apc_map);
+ m_maincpu->set_addrmap(AS_IO, &apc_state::apc_io);
+ m_maincpu->set_irq_acknowledge_callback("pic8259_master", FUNC(pic8259_device::inta_cb));
PIT8253(config, m_pit, 0);
m_pit->set_clk<0>(MAIN_CLOCK); // heartbeat IRQ
@@ -1003,9 +1003,8 @@ MACHINE_CONFIG_START(apc_state::apc)
/* sound hardware */
SPEAKER(config, m_speaker).front_center();
- MCFG_DEVICE_ADD(m_sound, UPD1771C, MAIN_CLOCK) //uPD1771C-006
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
-MACHINE_CONFIG_END
+ UPD1771C(config, m_sound, MAIN_CLOCK).add_route(ALL_OUTPUTS, "mono", 1.00); //uPD1771C-006
+}
/***************************************************************************
diff --git a/src/mame/drivers/apollo.cpp b/src/mame/drivers/apollo.cpp
index eb071504cbc..6398cfbb1f3 100644
--- a/src/mame/drivers/apollo.cpp
+++ b/src/mame/drivers/apollo.cpp
@@ -1042,11 +1042,12 @@ READ_LINE_MEMBER( apollo_state::apollo_kbd_is_german )
MACHINE DRIVERS
***************************************************************************/
-MACHINE_CONFIG_START(apollo_state::dn3500)
+void apollo_state::dn3500(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD(MAINCPU, M68030, 25000000) /* 25 MHz 68030 */
- MCFG_DEVICE_PROGRAM_MAP(dn3500_map)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(apollo_state,apollo_irq_acknowledge)
+ M68030(config, m_maincpu, 25000000); /* 25 MHz 68030 */
+ m_maincpu->set_addrmap(AS_PROGRAM, &apollo_state::dn3500_map);
+ m_maincpu->set_irq_acknowledge_callback(FUNC(apollo_state::apollo_irq_acknowledge));
config.m_minimum_quantum = attotime::from_hz(60);
@@ -1057,14 +1058,15 @@ MACHINE_CONFIG_START(apollo_state::dn3500)
#ifdef APOLLO_XXL
apollo_stdio_device &stdio(APOLLO_STDIO(config, APOLLO_STDIO_TAG, 0));
- stdio.tx_callback().set(m_sio, FUNC(apollo_sio::rx_b_w));
+ stdio.tx_cb().set(m_sio, FUNC(apollo_sio::rx_b_w));
#endif
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(apollo_state::dsp3500)
- MCFG_DEVICE_ADD(MAINCPU, M68030, 25000000) /* 25 MHz 68030 */
- MCFG_DEVICE_PROGRAM_MAP(dsp3500_map)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(apollo_state,apollo_irq_acknowledge)
+void apollo_state::dsp3500(machine_config &config)
+{
+ M68030(config, m_maincpu, 25000000); /* 25 MHz 68030 */
+ m_maincpu->set_addrmap(AS_PROGRAM, &apollo_state::dsp3500_map);
+ m_maincpu->set_irq_acknowledge_callback(FUNC(apollo_state::apollo_irq_acknowledge));
config.m_minimum_quantum = attotime::from_hz(60);
apollo_terminal(config);
@@ -1074,7 +1076,7 @@ MACHINE_CONFIG_START(apollo_state::dsp3500)
/* terminal hardware */
config.set_default_layout(layout_apollo_dsp);
-MACHINE_CONFIG_END
+}
void apollo_state::dn3500_19i(machine_config &config)
{
@@ -1096,22 +1098,24 @@ void apollo_state::dn3500_15i(machine_config &config)
m_keyboard->german_cb().set(FUNC(apollo_state::apollo_kbd_is_german));
}
-MACHINE_CONFIG_START(apollo_state::dn3000)
+void apollo_state::dn3000(machine_config &config)
+{
dn3500(config);
- MCFG_DEVICE_REPLACE(MAINCPU, M68020PMMU, 12000000) /* 12 MHz */
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(apollo_state,apollo_irq_acknowledge)
- MCFG_DEVICE_PROGRAM_MAP(dn3000_map)
+ M68020PMMU(config.replace(), m_maincpu, 12000000); /* 12 MHz */
+ m_maincpu->set_irq_acknowledge_callback(FUNC(apollo_state::apollo_irq_acknowledge));
+ m_maincpu->set_addrmap(AS_PROGRAM, &apollo_state::dn3000_map);
config.device_remove( APOLLO_SIO2_TAG );
m_ram->set_default_size("8M").set_extra_options("4M");
// FIXME: is this interrupt really only connected on DN3000?
m_rtc->irq().set(FUNC(apollo_state::apollo_rtc_irq_function));
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(apollo_state::dsp3000)
- MCFG_DEVICE_ADD(MAINCPU, M68020PMMU, 12000000) /* 12 MHz */
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(apollo_state,apollo_irq_acknowledge)
- MCFG_DEVICE_PROGRAM_MAP(dsp3000_map)
+void apollo_state::dsp3000(machine_config &config)
+{
+ M68020PMMU(config, m_maincpu, 12000000); /* 12 MHz */
+ m_maincpu->set_irq_acknowledge_callback(FUNC(apollo_state::apollo_irq_acknowledge));
+ m_maincpu->set_addrmap(AS_PROGRAM, &apollo_state::dsp3000_map);
config.m_minimum_quantum = attotime::from_hz(60);
apollo_terminal(config);
@@ -1123,7 +1127,7 @@ MACHINE_CONFIG_START(apollo_state::dsp3000)
/* terminal hardware */
config.set_default_layout(layout_apollo_dsp);
-MACHINE_CONFIG_END
+}
void apollo_state::dn3000_19i(machine_config &config)
{
@@ -1145,16 +1149,18 @@ void apollo_state::dn3000_15i(machine_config &config)
m_keyboard->german_cb().set(FUNC(apollo_state::apollo_kbd_is_german));
}
-MACHINE_CONFIG_START(apollo_state::dn5500)
+void apollo_state::dn5500(machine_config &config)
+{
dn3500(config);
- MCFG_DEVICE_REPLACE(MAINCPU, M68040, 25000000) /* 25 MHz */
- MCFG_DEVICE_PROGRAM_MAP(dn5500_map)
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(apollo_state::dsp5500)
- MCFG_DEVICE_ADD(MAINCPU, M68040, 25000000) /* 25 MHz */
- MCFG_DEVICE_PROGRAM_MAP(dsp5500_map)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(apollo_state,apollo_irq_acknowledge)
+ M68040(config.replace(), m_maincpu, 25000000); /* 25 MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &apollo_state::dn5500_map);
+}
+
+void apollo_state::dsp5500(machine_config &config)
+{
+ M68040(config, m_maincpu, 25000000); /* 25 MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &apollo_state::dsp5500_map);
+ m_maincpu->set_irq_acknowledge_callback(FUNC(apollo_state::apollo_irq_acknowledge));
config.m_minimum_quantum = attotime::from_hz(60);
apollo_terminal(config);
@@ -1165,7 +1171,7 @@ MACHINE_CONFIG_START(apollo_state::dsp5500)
/* terminal hardware */
config.set_default_layout(layout_apollo_dsp);
-MACHINE_CONFIG_END
+}
void apollo_state::dn5500_19i(machine_config &config)
{
diff --git a/src/mame/drivers/apple1.cpp b/src/mame/drivers/apple1.cpp
index b6a1d60d281..72a660dfda5 100644
--- a/src/mame/drivers/apple1.cpp
+++ b/src/mame/drivers/apple1.cpp
@@ -595,14 +595,14 @@ static void apple1_cards(device_slot_interface &device)
}
MACHINE_CONFIG_START(apple1_state::apple1)
- MCFG_DEVICE_ADD(m_maincpu, M6502, 960000) // effective CPU speed
- MCFG_DEVICE_PROGRAM_MAP(apple1_map)
+ M6502(config, m_maincpu, 960000); // effective CPU speed
+ m_maincpu->set_addrmap(AS_PROGRAM, &apple1_state::apple1_map);
// video timings are identical to the Apple II, unsurprisingly
- MCFG_SCREEN_ADD(m_screen, RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(14'318'181), (65*7)*2, 0, (40*7)*2, 262, 0, 192)
- MCFG_SCREEN_UPDATE_DRIVER(apple1_state, screen_update)
- MCFG_SCREEN_PALETTE("palette")
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(XTAL(14'318'181), (65*7)*2, 0, (40*7)*2, 262, 0, 192);
+ m_screen->set_screen_update(FUNC(apple1_state::screen_update));
+ m_screen->set_palette("palette");
PALETTE(config, "palette", palette_device::MONOCHROME);
diff --git a/src/mame/drivers/apple2.cpp b/src/mame/drivers/apple2.cpp
index 47a60cf9807..4f4e9f3ba35 100644
--- a/src/mame/drivers/apple2.cpp
+++ b/src/mame/drivers/apple2.cpp
@@ -1492,14 +1492,15 @@ void apple2_state::space84(machine_config &config)
apple2p(config);
}
-MACHINE_CONFIG_START(apple2_state::apple2jp)
+void apple2_state::apple2jp(machine_config &config)
+{
apple2p(config);
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(apple2_state, screen_update_jp)
-MACHINE_CONFIG_END
+ m_screen->set_screen_update(FUNC(apple2_state::screen_update_jp));
+}
#if 0
-static MACHINE_CONFIG_START( laba2p )
+void apple2_state::laba2p(machine_config &config)
+{
apple2p(config);
MCFG_MACHINE_START_OVERRIDE(apple2_state,laba2p)
@@ -1509,8 +1510,7 @@ static MACHINE_CONFIG_START( laba2p )
// A2BUS_LAB_80COL("sl3", A2BUS_LAB_80COL).set_onboard(m_a2bus);
A2BUS_IWM_FDC("sl6", A2BUS_IWM_FDC).set_onboard(m_a2bus);
-
-MACHINE_CONFIG_END
+}
#endif
/***************************************************************************
diff --git a/src/mame/drivers/apple2e.cpp b/src/mame/drivers/apple2e.cpp
index 6ada5b9bc5c..3dfce268e3d 100644
--- a/src/mame/drivers/apple2e.cpp
+++ b/src/mame/drivers/apple2e.cpp
@@ -153,6 +153,7 @@ Address bus A0-A11 is Y0-Y11
#include "bus/a2bus/ssprite.h"
#include "bus/a2bus/ssbapple.h"
#include "bus/a2bus/transwarp.h"
+#include "bus/a2bus/a2vulcan.h"
#include "bus/rs232/rs232.h"
@@ -3955,6 +3956,7 @@ static void apple2_cards(device_slot_interface &device)
device.option_add("arcbd", A2BUS_ARCADEBOARD); /* Third Millenium Engineering Arcade Board */
device.option_add("midi", A2BUS_MIDI); /* Generic 6840+6850 MIDI board */
device.option_add("zipdrive", A2BUS_ZIPDRIVE); /* ZIP Technologies IDE card */
+ device.option_add("focusdrive", A2BUS_FOCUSDRIVE); /* Focus Drive IDE card */
device.option_add("echoiiplus", A2BUS_ECHOPLUS); /* Street Electronics Echo Plus (Echo II + Mockingboard clone) */
device.option_add("scsi", A2BUS_SCSI); /* Apple II SCSI Card */
device.option_add("applicard", A2BUS_APPLICARD); /* PCPI Applicard */
@@ -3977,6 +3979,8 @@ static void apple2_cards(device_slot_interface &device)
device.option_add("ssprite", A2BUS_SSPRITE); /* Synetix SuperSprite Board */
device.option_add("ssbapple", A2BUS_SSBAPPLE); /* SSB Apple speech board */
device.option_add("twarp", A2BUS_TRANSWARP); /* AE TransWarp accelerator */
+ device.option_add("vulcan", A2BUS_VULCAN); /* Applied Engineering Vulcan IDE drive */
+ device.option_add("vulcangold", A2BUS_VULCANGOLD); /* Applied Engineering Vulcan Gold IDE drive */
}
static void apple2eaux_cards(device_slot_interface &device)
diff --git a/src/mame/drivers/apple2gs.cpp b/src/mame/drivers/apple2gs.cpp
index 491c0dd1391..02c24e34e1e 100644
--- a/src/mame/drivers/apple2gs.cpp
+++ b/src/mame/drivers/apple2gs.cpp
@@ -85,6 +85,7 @@
#include "bus/a2bus/timemasterho.h"
#include "bus/a2bus/mouse.h"
#include "bus/a2bus/ezcgi.h"
+#include "bus/a2bus/a2vulcan.h"
//#include "bus/a2bus/pc_xporter.h"
// various timing standards
@@ -4041,7 +4042,7 @@ READ8_MEMBER(apple2gs_state::doc_adc_read)
int apple2gs_state::apple2_fdc_has_35()
{
- return (floppy_get_count(machine())); // - apple525_get_count(machine)) > 0;
+ return device_type_iterator<sonydriv_floppy_image_device>(*this).count(); // - apple525_get_count(machine)) > 0;
}
int apple2gs_state::apple2_fdc_has_525()
@@ -4522,6 +4523,7 @@ static void apple2_cards(device_slot_interface &device)
device.option_add("arcbd", A2BUS_ARCADEBOARD); /* Third Millenium Engineering Arcade Board */
device.option_add("midi", A2BUS_MIDI); /* Generic 6840+6850 MIDI board */
device.option_add("zipdrive", A2BUS_ZIPDRIVE); /* ZIP Technologies IDE card */
+ device.option_add("focusdrive", A2BUS_FOCUSDRIVE); /* Focus Drive IDE card */
device.option_add("echoiiplus", A2BUS_ECHOPLUS); /* Street Electronics Echo Plus (Echo II + Mockingboard clone) */
device.option_add("scsi", A2BUS_SCSI); /* Apple II SCSI Card */
device.option_add("applicard", A2BUS_APPLICARD); /* PCPI Applicard */
@@ -4539,6 +4541,8 @@ static void apple2_cards(device_slot_interface &device)
device.option_add("ezcgi", A2BUS_EZCGI); /* E-Z Color Graphics Interface */
device.option_add("ezcgi9938", A2BUS_EZCGI_9938); /* E-Z Color Graphics Interface (TMS9938) */
device.option_add("ezcgi9958", A2BUS_EZCGI_9958); /* E-Z Color Graphics Interface (TMS9958) */
+ device.option_add("vulcan", A2BUS_VULCAN); /* Applied Engineering Vulcan IDE drive */
+ device.option_add("vulcangold", A2BUS_VULCANGOLD); /* Applied Engineering Vulcan Gold IDE drive */
// device.option_add("magicmusician", A2BUS_MAGICMUSICIAN); /* Magic Musician Card */
// device.option_add("pcxport", A2BUS_PCXPORTER); /* Applied Engineering PC Transporter */
}
diff --git a/src/mame/drivers/apple3.cpp b/src/mame/drivers/apple3.cpp
index 10b7d2004f0..ecaa1453d03 100644
--- a/src/mame/drivers/apple3.cpp
+++ b/src/mame/drivers/apple3.cpp
@@ -25,6 +25,7 @@
#include "bus/a2bus/a2applicard.h"
#include "bus/a2bus/a2thunderclock.h"
#include "bus/a2bus/mouse.h"
+#include "bus/a2bus/a2zipdrive.h"
#include "bus/rs232/rs232.h"
@@ -44,6 +45,7 @@ static void apple3_cards(device_slot_interface &device)
device.option_add("applicard", A2BUS_APPLICARD); // PCPI Applicard
device.option_add("thclock", A2BUS_THUNDERCLOCK); // ThunderWare ThunderClock Plus - driver assumes slot 2 by default
device.option_add("mouse", A2BUS_MOUSE); // Apple II Mouse Card
+ device.option_add("focusdrive", A2BUS_FOCUSDRIVE); // Focus Drive IDE card
}
static void a3_floppies(device_slot_interface &device)
diff --git a/src/mame/drivers/applix.cpp b/src/mame/drivers/applix.cpp
index 4a031b8fafb..01b3043ef01 100644
--- a/src/mame/drivers/applix.cpp
+++ b/src/mame/drivers/applix.cpp
@@ -847,14 +847,15 @@ TIMER_DEVICE_CALLBACK_MEMBER(applix_state::cass_timer)
}
}
-MACHINE_CONFIG_START(applix_state::applix)
+void applix_state::applix(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, 30_MHz_XTAL / 4) // MC68000-P10 @ 7.5 MHz
- MCFG_DEVICE_PROGRAM_MAP(applix_mem)
+ M68000(config, m_maincpu, 30_MHz_XTAL / 4); // MC68000-P10 @ 7.5 MHz
+ m_maincpu->set_addrmap(AS_PROGRAM, &applix_state::applix_mem);
- MCFG_DEVICE_ADD("subcpu", Z80, 16_MHz_XTAL / 2) // Z80H
- MCFG_DEVICE_PROGRAM_MAP(subcpu_mem)
- MCFG_DEVICE_IO_MAP(subcpu_io)
+ z80_device &subcpu(Z80(config, "subcpu", 16_MHz_XTAL / 2)); // Z80H
+ subcpu.set_addrmap(AS_PROGRAM, &applix_state::subcpu_mem);
+ subcpu.set_addrmap(AS_IO, &applix_state::subcpu_io);
i8051_device &kbdcpu(I8051(config, "kbdcpu", 11060250));
kbdcpu.set_addrmap(AS_PROGRAM, &applix_state::keytronic_pc3270_program);
@@ -867,12 +868,12 @@ MACHINE_CONFIG_START(applix_state::applix)
kbdcpu.port_out_cb<3>().set(FUNC(applix_state::p3_write));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(640, 200)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1)
- MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_size(640, 200);
+ screen.set_visarea_full();
+ screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update));
PALETTE(config, m_palette, FUNC(applix_state::applix_palette), 16);
/* sound hardware */
@@ -918,7 +919,7 @@ MACHINE_CONFIG_START(applix_state::applix)
FLOPPY_CONNECTOR(config, "fdc:0", applix_floppies, "35dd", applix_state::floppy_formats).enable_sound(true);
FLOPPY_CONNECTOR(config, "fdc:1", applix_floppies, "35dd", applix_state::floppy_formats).enable_sound(true);
TIMER(config, "applix_c").configure_periodic(FUNC(applix_state::cass_timer), attotime::from_hz(100000));
-MACHINE_CONFIG_END
+}
/* ROM definition */
ROM_START( applix )
diff --git a/src/mame/drivers/apricot.cpp b/src/mame/drivers/apricot.cpp
index b27900d1abe..9d605409ffc 100644
--- a/src/mame/drivers/apricot.cpp
+++ b/src/mame/drivers/apricot.cpp
@@ -212,7 +212,7 @@ READ8_MEMBER( apricot_state::sio_da_r )
if (m_bus_locked)
return m_sio->m1_r();
- return m_sio->da_r(space, offset);
+ return m_sio->da_r();
}
READ8_MEMBER( apricot_state::sio_ca_r )
@@ -220,7 +220,7 @@ READ8_MEMBER( apricot_state::sio_ca_r )
if (m_bus_locked)
return m_sio->m1_r();
- return m_sio->ca_r(space, offset);
+ return m_sio->ca_r();
}
READ8_MEMBER( apricot_state::sio_cb_r )
@@ -228,7 +228,7 @@ READ8_MEMBER( apricot_state::sio_cb_r )
if (m_bus_locked)
return m_sio->m1_r();
- return m_sio->cb_r(space, offset);
+ return m_sio->cb_r();
}
READ8_MEMBER( apricot_state::sio_db_r )
@@ -236,7 +236,7 @@ READ8_MEMBER( apricot_state::sio_db_r )
if (m_bus_locked)
return m_sio->m1_r();
- return m_sio->db_r(space, offset);
+ return m_sio->db_r();
}
diff --git a/src/mame/drivers/apricotf.cpp b/src/mame/drivers/apricotf.cpp
index f94215f1183..93ec038ba5d 100644
--- a/src/mame/drivers/apricotf.cpp
+++ b/src/mame/drivers/apricotf.cpp
@@ -342,27 +342,28 @@ void apricotf_floppies(device_slot_interface &device)
//**************************************************************************
//-------------------------------------------------
-// MACHINE_CONFIG( act_f1 )
+// machine_config( act_f1 )
//-------------------------------------------------
-MACHINE_CONFIG_START(f1_state::act_f1)
+void f1_state::act_f1(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD(I8086_TAG, I8086, 14_MHz_XTAL / 4)
- MCFG_DEVICE_PROGRAM_MAP(act_f1_mem)
- MCFG_DEVICE_IO_MAP(act_f1_io)
+ I8086(config, m_maincpu, 14_MHz_XTAL / 4);
+ m_maincpu->set_addrmap(AS_PROGRAM, &f1_state::act_f1_mem);
+ m_maincpu->set_addrmap(AS_IO, &f1_state::act_f1_io);
INPUT_MERGER_ANY_HIGH(config, "irqs").output_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
/* video hardware */
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_UPDATE_DRIVER(f1_state, screen_update)
- MCFG_SCREEN_SIZE(640, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 256-1)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_PALETTE_ADD("palette", 16)
+ screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_screen_update(FUNC(f1_state::screen_update));
+ screen.set_size(640, 256);
+ screen.set_visarea_full();
+ screen.set_palette(m_palette);
+
+ PALETTE(config, m_palette).set_entries(16);
GFXDECODE(config, "gfxdecode", m_palette, gfx_act_f1);
/* Devices */
@@ -389,7 +390,7 @@ MACHINE_CONFIG_START(f1_state::act_f1)
FLOPPY_CONNECTOR(config, WD2797_TAG ":0", apricotf_floppies, "d32w", f1_state::floppy_formats);
FLOPPY_CONNECTOR(config, WD2797_TAG ":1", apricotf_floppies, "d32w", f1_state::floppy_formats);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/apricotp.cpp b/src/mame/drivers/apricotp.cpp
index 674fc70a5b7..2def89372c1 100644
--- a/src/mame/drivers/apricotp.cpp
+++ b/src/mame/drivers/apricotp.cpp
@@ -563,39 +563,40 @@ FLOPPY_FORMATS_END
//-------------------------------------------------
-// MACHINE_CONFIG( fp )
+// machine_config( fp )
//-------------------------------------------------
-MACHINE_CONFIG_START(fp_state::fp)
+void fp_state::fp(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD(I8086_TAG, I8086, 15_MHz_XTAL / 3)
- MCFG_DEVICE_PROGRAM_MAP(fp_mem)
- MCFG_DEVICE_IO_MAP(fp_io)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE(I8259A_TAG, pic8259_device, inta_cb)
+ I8086(config, m_maincpu, 15_MHz_XTAL / 3);
+ m_maincpu->set_addrmap(AS_PROGRAM, &fp_state::fp_mem);
+ m_maincpu->set_addrmap(AS_IO, &fp_state::fp_io);
+ m_maincpu->set_irq_acknowledge_callback(I8259A_TAG, FUNC(pic8259_device::inta_cb));
- MCFG_DEVICE_ADD(HD63B01V1_TAG, HD6301, 2000000)
- MCFG_DEVICE_PROGRAM_MAP(sound_mem)
- MCFG_DEVICE_DISABLE()
+ HD6301(config, m_soundcpu, 2000000);
+ m_soundcpu->set_addrmap(AS_PROGRAM, &fp_state::sound_mem);
+ m_soundcpu->set_disable();
/* video hardware */
config.set_default_layout(layout_apricotp);
- MCFG_SCREEN_ADD(SCREEN_LCD_TAG, LCD)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_UPDATE_DRIVER(fp_state, screen_update)
- MCFG_SCREEN_SIZE(640, 200)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_SCREEN_ADD(SCREEN_CRT_TAG, RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_UPDATE_DEVICE(MC6845_TAG, mc6845_device, screen_update)
- MCFG_SCREEN_SIZE(640, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 256-1)
-
- MCFG_PALETTE_ADD("palette", 16)
+ screen_device &screen_lcd(SCREEN(config, SCREEN_LCD_TAG, SCREEN_TYPE_RASTER));
+ screen_lcd.set_refresh_hz(50);
+ screen_lcd.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen_lcd.set_screen_update(FUNC(fp_state::screen_update));
+ screen_lcd.set_size(640, 200);
+ screen_lcd.set_visarea_full();
+ screen_lcd.set_palette("palette");
+
+ screen_device &screen_crt(SCREEN(config, SCREEN_CRT_TAG, SCREEN_TYPE_RASTER));
+ screen_crt.set_refresh_hz(50);
+ screen_crt.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen_crt.set_screen_update(MC6845_TAG, FUNC(mc6845_device::screen_update));
+ screen_crt.set_size(640, 256);
+ screen_crt.set_visarea_full();
+
+ PALETTE(config, "palette").set_entries(16);
GFXDECODE(config, "gfxdecode", "palette", gfx_act_f1);
MC6845(config, m_crtc, 4000000);
@@ -606,8 +607,7 @@ MACHINE_CONFIG_START(fp_state::fp)
// sound hardware
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD(SN76489AN_TAG, SN76489A, 2000000)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
+ SN76489A(config, SN76489AN_TAG, 2000000).add_route(ALL_OUTPUTS, "mono", 1.00);
/* Devices */
APRICOT_KEYBOARD(config, APRICOT_KEYBOARD_TAG, 0);
@@ -647,7 +647,7 @@ MACHINE_CONFIG_START(fp_state::fp)
/* internal ram */
RAM(config, RAM_TAG).set_default_size("256K").set_extra_options("512K,1M");
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/aquarium.cpp b/src/mame/drivers/aquarium.cpp
index bf714d07714..d4379d9181f 100644
--- a/src/mame/drivers/aquarium.cpp
+++ b/src/mame/drivers/aquarium.cpp
@@ -287,33 +287,33 @@ static GFXDECODE_START( gfx_aquarium )
GFXDECODE_ENTRY( "gfx4", 0, char5bpplayout, 0x400, 32 )
GFXDECODE_END
-MACHINE_CONFIG_START(aquarium_state::aquarium)
-
+void aquarium_state::aquarium(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(32'000'000)/2) // clock not verified on pcb
- MCFG_DEVICE_PROGRAM_MAP(main_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", aquarium_state, irq1_line_hold)
+ M68000(config, m_maincpu, XTAL(32'000'000)/2); // clock not verified on pcb
+ m_maincpu->set_addrmap(AS_PROGRAM, &aquarium_state::main_map);
+ m_maincpu->set_vblank_int("screen", FUNC(aquarium_state::irq1_line_hold));
- MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(32'000'000)/6) // clock not verified on pcb
- MCFG_DEVICE_PROGRAM_MAP(snd_map)
- MCFG_DEVICE_IO_MAP(snd_portmap)
+ Z80(config, m_audiocpu, XTAL(32'000'000)/6); // clock not verified on pcb
+ m_audiocpu->set_addrmap(AS_PROGRAM, &aquarium_state::snd_map);
+ m_audiocpu->set_addrmap(AS_IO, &aquarium_state::snd_portmap);
// Is this the actual IC type? Some other Excellent games from this period use a MAX693.
- MCFG_DEVICE_ADD("watchdog", MB3773, 0)
+ MB3773(config, m_watchdog, 0);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(64*8, 64*8)
- MCFG_SCREEN_VISIBLE_AREA(2*8, 42*8-1, 2*8, 34*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(aquarium_state, screen_update_aquarium)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ m_screen->set_size(64*8, 64*8);
+ m_screen->set_visarea(2*8, 42*8-1, 2*8, 34*8-1);
+ m_screen->set_screen_update(FUNC(aquarium_state::screen_update_aquarium));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_aquarium);
PALETTE(config, m_palette).set_format(palette_device::RRRRGGGGBBBBRGBx, 0x1000/2);
- MCFG_DEVICE_ADD("spritegen", EXCELLENT_SPRITE, 0)
+ EXCELLENT_SPRITE(config, m_sprgen, 0);
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
@@ -328,10 +328,10 @@ MACHINE_CONFIG_START(aquarium_state::aquarium)
ymsnd.add_route(0, "lspeaker", 0.45);
ymsnd.add_route(1, "rspeaker", 0.45);
- MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(1'056'000), okim6295_device::PIN7_HIGH) // pin 7 not verified
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.47)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.47)
-MACHINE_CONFIG_END
+ OKIM6295(config, m_oki, XTAL(1'056'000), okim6295_device::PIN7_HIGH); // pin 7 not verified
+ m_oki->add_route(ALL_OUTPUTS, "lspeaker", 0.47);
+ m_oki->add_route(ALL_OUTPUTS, "rspeaker", 0.47);
+}
ROM_START( aquarium )
ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 code */
diff --git a/src/mame/drivers/arachnid.cpp b/src/mame/drivers/arachnid.cpp
index a8c329f3187..fc63ada443a 100644
--- a/src/mame/drivers/arachnid.cpp
+++ b/src/mame/drivers/arachnid.cpp
@@ -420,13 +420,14 @@ void arachnid_state::machine_start()
***************************************************************************/
/*-------------------------------------------------
- MACHINE_CONFIG_START( arachnid )
+ machine_config( arachnid )
-------------------------------------------------*/
-MACHINE_CONFIG_START(arachnid_state::arachnid)
+void arachnid_state::arachnid(machine_config &config)
+{
// basic machine hardware
- MCFG_DEVICE_ADD(M6809_TAG, MC6809, 10.738635_MHz_XTAL / 3)
- MCFG_DEVICE_PROGRAM_MAP(arachnid_map)
+ MC6809(config, m_maincpu, 10.738635_MHz_XTAL / 3);
+ m_maincpu->set_addrmap(AS_PROGRAM, &arachnid_state::arachnid_map);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // MK48Z02 (or DS1220Y)
@@ -456,13 +457,12 @@ MACHINE_CONFIG_START(arachnid_state::arachnid)
// sound hardware
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 1.0);
ptm6840_device &ptm(PTM6840(config, PTM6840_TAG, 10.738635_MHz_XTAL / 3 / 4));
ptm.set_external_clocks(0, 0, 0);
ptm.o1_callback().set(FUNC(arachnid_state::ptm_o1_callback));
-MACHINE_CONFIG_END
+}
/***************************************************************************
ROMS
diff --git a/src/mame/drivers/arcadecl.cpp b/src/mame/drivers/arcadecl.cpp
index 40b621c324f..28153da28e3 100644
--- a/src/mame/drivers/arcadecl.cpp
+++ b/src/mame/drivers/arcadecl.cpp
@@ -320,11 +320,11 @@ GFXDECODE_END
*
*************************************/
-MACHINE_CONFIG_START(sparkz_state::sparkz)
-
+void sparkz_state::sparkz(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, MASTER_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(main_map)
+ M68000(config, m_maincpu, MASTER_CLOCK);
+ m_maincpu->set_addrmap(AS_PROGRAM, &sparkz_state::main_map);
EEPROM_2804(config, "eeprom").lock_after_write(true);
@@ -336,21 +336,20 @@ MACHINE_CONFIG_START(sparkz_state::sparkz)
palette.set_format(palette_device::IRGB_1555, 512);
palette.set_membits(8);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
/* note: these parameters are from published specs, not derived */
/* the board uses an SOS-2 chip to generate video signals */
- MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/2, 456, 0+12, 336+12, 262, 0, 240)
- MCFG_SCREEN_UPDATE_DRIVER(sparkz_state, screen_update)
- MCFG_SCREEN_PALETTE("palette")
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, sparkz_state, video_int_write_line))
+ m_screen->set_raw(MASTER_CLOCK/2, 456, 0+12, 336+12, 262, 0, 240);
+ m_screen->set_screen_update(FUNC(sparkz_state::screen_update));
+ m_screen->set_palette("palette");
+ m_screen->screen_vblank().set(FUNC(sparkz_state::video_int_write_line));
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("oki", OKIM6295, MASTER_CLOCK/4/3, okim6295_device::PIN7_LOW)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
-MACHINE_CONFIG_END
+ OKIM6295(config, m_oki, MASTER_CLOCK/4/3, okim6295_device::PIN7_LOW).add_route(ALL_OUTPUTS, "mono", 1.0);
+}
void arcadecl_state::arcadecl(machine_config &config)
{
diff --git a/src/mame/drivers/argo.cpp b/src/mame/drivers/argo.cpp
index 8cfe5601103..7b4eaa8eee0 100644
--- a/src/mame/drivers/argo.cpp
+++ b/src/mame/drivers/argo.cpp
@@ -350,20 +350,21 @@ uint32_t argo_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
return 0;
}
-MACHINE_CONFIG_START(argo_state::argo)
+void argo_state::argo(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 3500000)
- MCFG_DEVICE_PROGRAM_MAP(mem_map)
- MCFG_DEVICE_IO_MAP(io_map)
+ Z80(config, m_maincpu, 3500000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &argo_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &argo_state::io_map);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_UPDATE_DRIVER(argo_state, screen_update)
- MCFG_SCREEN_SIZE(640, 250)
- MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 249)
-MACHINE_CONFIG_END
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_screen_update(FUNC(argo_state::screen_update));
+ screen.set_size(640, 250);
+ screen.set_visarea_full();
+}
/* ROM definition */
ROM_START( argo )
diff --git a/src/mame/drivers/argox.cpp b/src/mame/drivers/argox.cpp
index d24fde057ca..964895d77a8 100644
--- a/src/mame/drivers/argox.cpp
+++ b/src/mame/drivers/argox.cpp
@@ -71,13 +71,14 @@ void os214_state::os214_io_map(address_map &map)
// ADDRESS_MAP_GLOBAL_MASK(0xff)
}
-MACHINE_CONFIG_START(os214_state::os214)
+void os214_state::os214(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", H83002, XTAL(16'000'000)) /* X1 xtal value is correct,
+ H83002(config, m_maincpu, XTAL(16'000'000)); /* X1 xtal value is correct,
but there can be some clock divider perhaps ? */
- MCFG_DEVICE_PROGRAM_MAP(os214_prg_map)
- MCFG_DEVICE_IO_MAP(os214_io_map)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &os214_state::os214_prg_map);
+ m_maincpu->set_addrmap(AS_IO, &os214_state::os214_io_map);
+}
void os214_state::init_os214()
{
diff --git a/src/mame/drivers/arkanoid.cpp b/src/mame/drivers/arkanoid.cpp
index 35264d11775..d2ef042afe2 100644
--- a/src/mame/drivers/arkanoid.cpp
+++ b/src/mame/drivers/arkanoid.cpp
@@ -1344,12 +1344,12 @@ Pixel clock: 3 MHz = 192 HTotal, assuming it's 6 MHz
#define ARKANOID_VBEND 16
#define ARKANOID_VBSTART 240
-MACHINE_CONFIG_START(arkanoid_state::arkanoid)
-
+void arkanoid_state::arkanoid(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, XTAL(12'000'000)/2) /* verified on pcb */
- MCFG_DEVICE_PROGRAM_MAP(arkanoid_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", arkanoid_state, irq0_line_hold)
+ Z80(config, m_maincpu, XTAL(12'000'000)/2); /* verified on pcb */
+ m_maincpu->set_addrmap(AS_PROGRAM, &arkanoid_state::arkanoid_map);
+ m_maincpu->set_vblank_int("screen", FUNC(arkanoid_state::irq0_line_hold));
WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 128); // 74LS393 at ic21, counts 128 vblanks before firing watchdog; z80 /RESET ls08 ic19 pin 9 input comes from ls04 ic20 pin 8, ls04 ic20 pin 9 input comes from ic21 ls393 pin 8, and ls393 is set to chain both 4 bit counters together
@@ -1359,14 +1359,14 @@ MACHINE_CONFIG_START(arkanoid_state::arkanoid)
config.m_minimum_quantum = attotime::from_hz(6000); // 100 CPU slices per second to synchronize between the MCU and the main CPU
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
-// MCFG_SCREEN_REFRESH_RATE(60)
-// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
-// MCFG_SCREEN_SIZE(32*8, 32*8)
-// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_RAW_PARAMS(ARKANOID_PIXEL_CLOCK,ARKANOID_HTOTAL,ARKANOID_HBEND,ARKANOID_HBSTART,ARKANOID_VTOTAL,ARKANOID_VBEND,ARKANOID_VBSTART)
- MCFG_SCREEN_UPDATE_DRIVER(arkanoid_state, screen_update_arkanoid)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+// screen.set_refresh_hz(60);
+// 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);
+ screen.set_raw(ARKANOID_PIXEL_CLOCK,ARKANOID_HTOTAL,ARKANOID_HBEND,ARKANOID_HBSTART,ARKANOID_VTOTAL,ARKANOID_VBEND,ARKANOID_VBSTART);
+ screen.set_screen_update(FUNC(arkanoid_state::screen_update_arkanoid));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_arkanoid);
PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 512);
@@ -1379,7 +1379,7 @@ MACHINE_CONFIG_START(arkanoid_state::arkanoid)
aysnd.port_a_read_callback().set_ioport("UNUSED");
aysnd.port_b_read_callback().set_ioport("DSW");
aysnd.add_route(ALL_OUTPUTS, "mono", 0.66);
-MACHINE_CONFIG_END
+}
void arkanoid_state::p3mcu(machine_config &config)
{
@@ -1401,15 +1401,15 @@ void arkanoid_state::p3mcuay(machine_config &config)
aysnd.add_route(ALL_OUTPUTS, "mono", 0.66);
}
-MACHINE_CONFIG_START(arkanoid_state::bootleg)
+void arkanoid_state::bootleg(machine_config &config)
+{
arkanoid(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(bootleg_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &arkanoid_state::bootleg_map);
config.device_remove("mcu");
-MACHINE_CONFIG_END
+}
void arkanoid_state::aysnd(machine_config &config)
{
@@ -1423,24 +1423,24 @@ void arkanoid_state::aysnd(machine_config &config)
}
-MACHINE_CONFIG_START(arkanoid_state::hexa)
-
+void arkanoid_state::hexa(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, XTAL(12'000'000)/2) /* Imported from arkanoid - correct? */
- MCFG_DEVICE_PROGRAM_MAP(hexa_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", arkanoid_state, irq0_line_hold)
+ Z80(config, m_maincpu, XTAL(12'000'000)/2); /* Imported from arkanoid - correct? */
+ m_maincpu->set_addrmap(AS_PROGRAM, &arkanoid_state::hexa_map);
+ m_maincpu->set_vblank_int("screen", FUNC(arkanoid_state::irq0_line_hold));
WATCHDOG_TIMER(config, "watchdog");
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
-// MCFG_SCREEN_REFRESH_RATE(60)
-// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
-// MCFG_SCREEN_SIZE(32*8, 32*8)
-// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_RAW_PARAMS(ARKANOID_PIXEL_CLOCK,ARKANOID_HTOTAL,ARKANOID_HBEND,ARKANOID_HBSTART,ARKANOID_VTOTAL,ARKANOID_VBEND,ARKANOID_VBSTART)
- MCFG_SCREEN_UPDATE_DRIVER(arkanoid_state, screen_update_hexa)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+// screen.set_refresh_hz(60);
+// 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);
+ screen.set_raw(ARKANOID_PIXEL_CLOCK,ARKANOID_HTOTAL,ARKANOID_HBEND,ARKANOID_HBSTART,ARKANOID_VTOTAL,ARKANOID_VBEND,ARKANOID_VBSTART);
+ screen.set_screen_update(FUNC(arkanoid_state::screen_update_hexa));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_hexa);
PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 256);
@@ -1451,39 +1451,39 @@ MACHINE_CONFIG_START(arkanoid_state::hexa)
aysnd.port_a_read_callback().set_ioport("INPUTS");
aysnd.port_b_read_callback().set_ioport("DSW");
aysnd.add_route(ALL_OUTPUTS, "mono", 0.50);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(arkanoid_state::hexaa)
+void arkanoid_state::hexaa(machine_config &config)
+{
hexa(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(hexaa_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", arkanoid_state, irq0_line_hold)
-
- MCFG_DEVICE_ADD("subcpu", Z80, XTAL(12'000'000)/2) // ?
- MCFG_DEVICE_PROGRAM_MAP(hexaa_sub_map)
- MCFG_DEVICE_IO_MAP(hexaa_sub_iomap)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &arkanoid_state::hexaa_map);
+ m_maincpu->set_vblank_int("screen", FUNC(arkanoid_state::irq0_line_hold));
+ z80_device &subcpu(Z80(config, "subcpu", XTAL(12'000'000)/2)); // ?
+ subcpu.set_addrmap(AS_PROGRAM, &arkanoid_state::hexaa_sub_map);
+ subcpu.set_addrmap(AS_IO, &arkanoid_state::hexaa_sub_iomap);
+}
-MACHINE_CONFIG_START(arkanoid_state::brixian)
+void arkanoid_state::brixian(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, XTAL(12'000'000)/2)
- MCFG_DEVICE_PROGRAM_MAP(brixian_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", arkanoid_state, irq0_line_hold)
+ Z80(config, m_maincpu, XTAL(12'000'000)/2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &arkanoid_state::brixian_map);
+ m_maincpu->set_vblank_int("screen", FUNC(arkanoid_state::irq0_line_hold));
/* there is a 68705 but it's only role appears to be to copy data to RAM at startup */
/* the RAM is also battery backed, making the 68705 almost redundant as long as the battery doesn't die(!) */
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
-// MCFG_SCREEN_REFRESH_RATE(60)
-// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
-// MCFG_SCREEN_SIZE(32*8, 32*8)
-// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_RAW_PARAMS(ARKANOID_PIXEL_CLOCK,ARKANOID_HTOTAL,ARKANOID_HBEND,ARKANOID_HBSTART,ARKANOID_VTOTAL,ARKANOID_VBEND,ARKANOID_VBSTART)
- MCFG_SCREEN_UPDATE_DRIVER(arkanoid_state, screen_update_hexa)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+// screen.set_refresh_hz(60);
+// 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);
+ screen.set_raw(ARKANOID_PIXEL_CLOCK,ARKANOID_HTOTAL,ARKANOID_HBEND,ARKANOID_HBSTART,ARKANOID_VTOTAL,ARKANOID_VBEND,ARKANOID_VBSTART);
+ screen.set_screen_update(FUNC(arkanoid_state::screen_update_hexa));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_arkanoid);
PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 512);
@@ -1494,7 +1494,7 @@ MACHINE_CONFIG_START(arkanoid_state::brixian)
aysnd.port_a_read_callback().set_ioport("INPUTS");
aysnd.port_b_read_callback().set_ioport("DSW");
aysnd.add_route(ALL_OUTPUTS, "mono", 0.50);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/armedf.cpp b/src/mame/drivers/armedf.cpp
index 650cef1b339..7c030762afa 100644
--- a/src/mame/drivers/armedf.cpp
+++ b/src/mame/drivers/armedf.cpp
@@ -391,12 +391,12 @@ WRITE16_MEMBER(armedf_state::bootleg_io_w)
WRITE16_MEMBER(armedf_state::sound_command_w)
{
if (ACCESSING_BITS_0_7)
- m_soundlatch->write(space, 0, ((data & 0x7f) << 1) | 1);
+ m_soundlatch->write(((data & 0x7f) << 1) | 1);
}
READ8_MEMBER(armedf_state::soundlatch_clear_r)
{
- m_soundlatch->clear_w(space, 0, 0);
+ m_soundlatch->clear_w();
return 0;
}
@@ -1271,26 +1271,26 @@ void armedf_state::terraf_sound(machine_config &config)
vref.add_route(0, "dac2", 1.0, DAC_VREF_POS_INPUT).add_route(0, "dac2", -1.0, DAC_VREF_NEG_INPUT);
}
-MACHINE_CONFIG_START(armedf_state::terraf)
-
+void armedf_state::terraf(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000)/2) // 8mhz?
- MCFG_DEVICE_PROGRAM_MAP(terraf_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", armedf_state, irq1_line_assert)
+ M68000(config, m_maincpu, XTAL(16'000'000)/2); // 8mhz?
+ m_maincpu->set_addrmap(AS_PROGRAM, &armedf_state::terraf_map);
+ m_maincpu->set_vblank_int("screen", FUNC(armedf_state::irq1_line_assert));
- MCFG_DEVICE_ADD("nb1414m4", NB1414M4, 0)
+ NB1414M4(config, m_nb1414m4, 0);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(57)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(12*8, (64-12)*8-1, 1*8, 31*8-1 )
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(57);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(12*8, (64-12)*8-1, 1*8, 31*8-1 );
+ screen.set_palette(m_palette);
+ screen.set_screen_update(FUNC(armedf_state::screen_update_armedf));
+ screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising));
MCFG_VIDEO_START_OVERRIDE(armedf_state,terraf)
- MCFG_SCREEN_UPDATE_DRIVER(armedf_state, screen_update_armedf)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising))
GFXDECODE(config, m_gfxdecode, m_palette, gfx_armedf);
PALETTE(config, m_palette).set_format(palette_device::xRGB_444, 2048);
@@ -1299,35 +1299,35 @@ MACHINE_CONFIG_START(armedf_state::terraf)
/* sound hardware */
terraf_sound(config);
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(armedf_state::terrafjb)
+}
+void armedf_state::terrafjb(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000)/2) // 8mhz
- MCFG_DEVICE_PROGRAM_MAP(terraf_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", armedf_state, irq1_line_assert)
+ M68000(config, m_maincpu, XTAL(16'000'000)/2); // 8mhz
+ m_maincpu->set_addrmap(AS_PROGRAM, &armedf_state::terraf_map);
+ m_maincpu->set_vblank_int("screen", FUNC(armedf_state::irq1_line_assert));
- MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(24'000'000)/6) // 4mhz
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
- MCFG_DEVICE_IO_MAP(sound_portmap)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(armedf_state, irq0_line_hold, XTAL(8'000'000)/2/512) // ?
+ z80_device &audiocpu(Z80(config, "audiocpu", XTAL(24'000'000)/6)); // 4mhz
+ audiocpu.set_addrmap(AS_PROGRAM, &armedf_state::sound_map);
+ audiocpu.set_addrmap(AS_IO, &armedf_state::sound_portmap);
+ audiocpu.set_periodic_int(FUNC(armedf_state::irq0_line_hold), attotime::from_hz(XTAL(8'000'000)/2/512)); // ?
- MCFG_DEVICE_ADD("extra", Z80, XTAL(16'000'000)/4) // 4mhz?
- MCFG_DEVICE_PROGRAM_MAP(terrafjb_extraz80_map)
- MCFG_DEVICE_IO_MAP(terrafjb_extraz80_portmap)
+ Z80(config, m_extra, XTAL(16'000'000)/4); // 4mhz?
+ m_extra->set_addrmap(AS_PROGRAM, &armedf_state::terrafjb_extraz80_map);
+ m_extra->set_addrmap(AS_IO, &armedf_state::terrafjb_extraz80_portmap);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(57)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(12*8, (64-12)*8-1, 1*8, 31*8-1 )
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(57);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(12*8, (64-12)*8-1, 1*8, 31*8-1 );
+ screen.set_palette(m_palette);
+ screen.set_screen_update(FUNC(armedf_state::screen_update_armedf));
+ screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising));
MCFG_VIDEO_START_OVERRIDE(armedf_state,terraf)
- MCFG_SCREEN_UPDATE_DRIVER(armedf_state, screen_update_armedf)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising))
GFXDECODE(config, m_gfxdecode, m_palette, gfx_armedf);
PALETTE(config, m_palette).set_format(palette_device::xRGB_444, 2048);
@@ -1339,15 +1339,14 @@ MACHINE_CONFIG_START(armedf_state::terrafjb)
GENERIC_LATCH_8(config, m_soundlatch);
- MCFG_DEVICE_ADD("ymsnd", YM3812, XTAL(24'000'000)/6) // 4mhz
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5)
+ YM3812(config, "ymsnd", XTAL(24'000'000)/6).add_route(ALL_OUTPUTS, "speaker", 0.5); // 4mhz
DAC_8BIT_R2R(config, "dac1", 0).add_route(ALL_OUTPUTS, "speaker", 0.8); // unknown DAC
DAC_8BIT_R2R(config, "dac2", 0).add_route(ALL_OUTPUTS, "speaker", 0.8); // unknown DAC
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
vref.add_route(0, "dac1", 1.0, DAC_VREF_POS_INPUT).add_route(0, "dac1", -1.0, DAC_VREF_NEG_INPUT);
vref.add_route(0, "dac2", 1.0, DAC_VREF_POS_INPUT).add_route(0, "dac2", -1.0, DAC_VREF_NEG_INPUT);
-MACHINE_CONFIG_END
+}
void armedf_state::terrafb(machine_config &config)
{
@@ -1355,26 +1354,26 @@ void armedf_state::terrafb(machine_config &config)
config.device_remove("nb1414m4");
}
-MACHINE_CONFIG_START(armedf_state::kozure)
-
+void armedf_state::kozure(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000)/2) // 8mhz
- MCFG_DEVICE_PROGRAM_MAP(kozure_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", armedf_state, irq1_line_assert)
+ M68000(config, m_maincpu, XTAL(16'000'000)/2); // 8mhz
+ m_maincpu->set_addrmap(AS_PROGRAM, &armedf_state::kozure_map);
+ m_maincpu->set_vblank_int("screen", FUNC(armedf_state::irq1_line_assert));
- MCFG_DEVICE_ADD("nb1414m4", NB1414M4, 0)
+ NB1414M4(config, m_nb1414m4, 0);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(12*8, (64-12)*8-1, 1*8, 31*8-1 ) // 320 x 240, trusted
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(12*8, (64-12)*8-1, 1*8, 31*8-1 ); // 320 x 240, trusted
+ screen.set_palette(m_palette);
+ screen.set_screen_update(FUNC(armedf_state::screen_update_armedf));
+ screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising));
MCFG_VIDEO_START_OVERRIDE(armedf_state,terraf)
- MCFG_SCREEN_UPDATE_DRIVER(armedf_state, screen_update_armedf)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising))
GFXDECODE(config, m_gfxdecode, m_palette, gfx_armedf);
PALETTE(config, m_palette).set_format(palette_device::xRGB_444, 2048);
@@ -1383,31 +1382,31 @@ MACHINE_CONFIG_START(armedf_state::kozure)
/* sound hardware */
terraf_sound(config);
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(armedf_state::armedf)
+}
+void armedf_state::armedf(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000)/2) // 8mhz
- MCFG_DEVICE_PROGRAM_MAP(armedf_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", armedf_state, irq1_line_assert)
+ M68000(config, m_maincpu, XTAL(16'000'000)/2); // 8mhz
+ m_maincpu->set_addrmap(AS_PROGRAM, &armedf_state::armedf_map);
+ m_maincpu->set_vblank_int("screen", FUNC(armedf_state::irq1_line_assert));
- MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(24'000'000)/6) // 4mhz
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
- MCFG_DEVICE_IO_MAP(sound_portmap)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(armedf_state, irq0_line_hold, XTAL(8'000'000)/2/512) // ?
+ z80_device &audiocpu(Z80(config, "audiocpu", XTAL(24'000'000)/6)); // 4mhz
+ audiocpu.set_addrmap(AS_PROGRAM, &armedf_state::sound_map);
+ audiocpu.set_addrmap(AS_IO, &armedf_state::sound_portmap);
+ audiocpu.set_periodic_int(FUNC(armedf_state::irq0_line_hold), attotime::from_hz(XTAL(8'000'000)/2/512)); // ?
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(57)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(12*8, (64-12)*8-1, 1*8, 31*8-1 )
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(57);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(12*8, (64-12)*8-1, 1*8, 31*8-1 );
+ screen.set_palette(m_palette);
+ screen.set_screen_update(FUNC(armedf_state::screen_update_armedf));
+ screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising));
MCFG_VIDEO_START_OVERRIDE(armedf_state,armedf)
- MCFG_SCREEN_UPDATE_DRIVER(armedf_state, screen_update_armedf)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising))
GFXDECODE(config, m_gfxdecode, m_palette, gfx_armedf);
PALETTE(config, m_palette).set_format(palette_device::xRGB_444, 2048);
@@ -1419,41 +1418,40 @@ MACHINE_CONFIG_START(armedf_state::armedf)
GENERIC_LATCH_8(config, m_soundlatch);
- MCFG_DEVICE_ADD("ymsnd", YM3812, XTAL(24'000'000)/6) // 4mhz
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5)
+ YM3812(config, "ymsnd", XTAL(24'000'000)/6).add_route(ALL_OUTPUTS, "speaker", 0.5); // 4mhz
DAC_8BIT_R2R(config, "dac1", 0).add_route(ALL_OUTPUTS, "speaker", 0.5); // unknown DAC
DAC_8BIT_R2R(config, "dac2", 0).add_route(ALL_OUTPUTS, "speaker", 0.5); // unknown DAC
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
vref.add_route(0, "dac1", 1.0, DAC_VREF_POS_INPUT).add_route(0, "dac1", -1.0, DAC_VREF_NEG_INPUT);
vref.add_route(0, "dac2", 1.0, DAC_VREF_POS_INPUT).add_route(0, "dac2", -1.0, DAC_VREF_NEG_INPUT);
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(armedf_state::cclimbr2)
+}
+void armedf_state::cclimbr2(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000)/2) // 8mhz
- MCFG_DEVICE_PROGRAM_MAP(cclimbr2_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", armedf_state, irq2_line_assert)
+ M68000(config, m_maincpu, XTAL(16'000'000)/2); // 8mhz
+ m_maincpu->set_addrmap(AS_PROGRAM, &armedf_state::cclimbr2_map);
+ m_maincpu->set_vblank_int("screen", FUNC(armedf_state::irq2_line_assert));
- MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(24'000'000)/6) // 4mhz
- MCFG_DEVICE_PROGRAM_MAP(cclimbr2_soundmap)
- MCFG_DEVICE_IO_MAP(sound_portmap)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(armedf_state, irq0_line_hold, XTAL(8'000'000)/2/512) // ?
+ z80_device &audiocpu(Z80(config, "audiocpu", XTAL(24'000'000)/6)); // 4mhz
+ audiocpu.set_addrmap(AS_PROGRAM, &armedf_state::cclimbr2_soundmap);
+ audiocpu.set_addrmap(AS_IO, &armedf_state::sound_portmap);
+ audiocpu.set_periodic_int(FUNC(armedf_state::irq0_line_hold), attotime::from_hz(XTAL(8'000'000)/2/512)); // ?
- MCFG_DEVICE_ADD("nb1414m4", NB1414M4, 0)
+ NB1414M4(config, m_nb1414m4, 0);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(14*8, (64-14)*8-1, 2*8, 30*8-1 )
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(14*8, (64-14)*8-1, 2*8, 30*8-1 );
+ screen.set_palette(m_palette);
+ screen.set_screen_update(FUNC(armedf_state::screen_update_armedf));
+ screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising));
MCFG_VIDEO_START_OVERRIDE(armedf_state,terraf)
- MCFG_SCREEN_UPDATE_DRIVER(armedf_state, screen_update_armedf)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising))
GFXDECODE(config, m_gfxdecode, m_palette, gfx_armedf);
PALETTE(config, m_palette).set_format(palette_device::xRGB_444, 2048);
@@ -1465,36 +1463,36 @@ MACHINE_CONFIG_START(armedf_state::cclimbr2)
GENERIC_LATCH_8(config, m_soundlatch);
- MCFG_DEVICE_ADD("ymsnd", YM3812, XTAL(24'000'000)/6) // or YM3526?
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5)
+ YM3812(config, "ymsnd", XTAL(24'000'000)/6).add_route(ALL_OUTPUTS, "speaker", 0.5); // or YM3526?
DAC_8BIT_R2R(config, "dac1", 0).add_route(ALL_OUTPUTS, "speaker", 0.4); // unknown DAC
DAC_8BIT_R2R(config, "dac2", 0).add_route(ALL_OUTPUTS, "speaker", 0.4); // unknown DAC
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
vref.add_route(0, "dac1", 1.0, DAC_VREF_POS_INPUT).add_route(0, "dac1", -1.0, DAC_VREF_NEG_INPUT);
vref.add_route(0, "dac2", 1.0, DAC_VREF_POS_INPUT).add_route(0, "dac2", -1.0, DAC_VREF_NEG_INPUT);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(armedf_state::legion_common)
+void armedf_state::legion_common(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000)/2) // 8mhz
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", armedf_state, irq2_line_assert)
+ M68000(config, m_maincpu, XTAL(16'000'000)/2); // 8mhz
+ m_maincpu->set_vblank_int("screen", FUNC(armedf_state::irq2_line_assert));
- MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(24'000'000)/6) // 4mhz
- MCFG_DEVICE_PROGRAM_MAP(cclimbr2_soundmap)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(armedf_state, irq0_line_hold, XTAL(8'000'000)/2/512) // ?
+ z80_device &audiocpu(Z80(config, "audiocpu", XTAL(24'000'000)/6)); // 4mhz
+ audiocpu.set_addrmap(AS_PROGRAM, &armedf_state::cclimbr2_soundmap);
+ audiocpu.set_periodic_int(FUNC(armedf_state::irq0_line_hold), attotime::from_hz(XTAL(8'000'000)/2/512)); // ?
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(14*8, (64-14)*8-1, 2*8, 30*8-1 )
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(14*8, (64-14)*8-1, 2*8, 30*8-1 );
+ screen.set_palette(m_palette);
+ screen.set_screen_update(FUNC(armedf_state::screen_update_armedf));
+ screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising));
MCFG_VIDEO_START_OVERRIDE(armedf_state,terraf)
- MCFG_SCREEN_UPDATE_DRIVER(armedf_state, screen_update_armedf)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising))
GFXDECODE(config, m_gfxdecode, m_palette, gfx_armedf);
PALETTE(config, m_palette).set_format(palette_device::xRGB_444, 2048);
@@ -1511,48 +1509,45 @@ MACHINE_CONFIG_START(armedf_state::legion_common)
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
vref.add_route(0, "dac1", 1.0, DAC_VREF_POS_INPUT).add_route(0, "dac1", -1.0, DAC_VREF_NEG_INPUT);
vref.add_route(0, "dac2", 1.0, DAC_VREF_POS_INPUT).add_route(0, "dac2", -1.0, DAC_VREF_NEG_INPUT);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(armedf_state::legion)
+void armedf_state::legion(machine_config &config)
+{
legion_common(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(legion_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &armedf_state::legion_map);
- MCFG_DEVICE_MODIFY("audiocpu")
- MCFG_DEVICE_IO_MAP(sound_3526_portmap)
+ subdevice<z80_device>("audiocpu")->set_addrmap(AS_IO, &armedf_state::sound_3526_portmap);
- MCFG_DEVICE_ADD("nb1414m4", NB1414M4, 0)
+ NB1414M4(config, m_nb1414m4, 0);
- MCFG_DEVICE_ADD("ymsnd", YM3526, XTAL(24'000'000)/6) // 4mhz
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5)
-MACHINE_CONFIG_END
+ YM3526(config, "ymsnd", XTAL(24'000'000)/6).add_route(ALL_OUTPUTS, "speaker", 0.5); // 4mhz
+}
-MACHINE_CONFIG_START(armedf_state::legionjb)
+void armedf_state::legionjb(machine_config &config)
+{
legion_common(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(legionjb_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &armedf_state::legionjb_map);
- MCFG_DEVICE_MODIFY("audiocpu")
- MCFG_DEVICE_IO_MAP(sound_portmap)
+ subdevice<z80_device>("audiocpu")->set_addrmap(AS_IO, &armedf_state::sound_portmap);
- MCFG_DEVICE_ADD("ymsnd", YM3812, XTAL(24'000'000)/6) // or YM3526?
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5)
-MACHINE_CONFIG_END
+ YM3812(config, "ymsnd", XTAL(24'000'000)/6).add_route(ALL_OUTPUTS, "speaker", 0.5); // or YM3526?
+}
-MACHINE_CONFIG_START(armedf_state::legionjb2)
+void armedf_state::legionjb2(machine_config &config)
+{
legionjb(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(legionjb2_map)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &armedf_state::legionjb2_map);
+}
-MACHINE_CONFIG_START(bigfghtr_state::bigfghtr)
+void bigfghtr_state::bigfghtr(machine_config &config)
+{
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000)/2) // verified
- MCFG_DEVICE_PROGRAM_MAP(bigfghtr_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", armedf_state, irq1_line_assert)
+ M68000(config, m_maincpu, XTAL(16'000'000)/2); // verified
+ m_maincpu->set_addrmap(AS_PROGRAM, &bigfghtr_state::bigfghtr_map);
+ m_maincpu->set_vblank_int("screen", FUNC(armedf_state::irq1_line_assert));
i8751_device &mcu(I8751(config, "mcu", XTAL(16'000'000)/2)); // verified
mcu.set_addrmap(AS_PROGRAM, &bigfghtr_state::bigfghtr_mcu_map);
@@ -1560,13 +1555,13 @@ MACHINE_CONFIG_START(bigfghtr_state::bigfghtr)
mcu.port_in_cb<1>().set_constant(0xdf); // bit 5: bus contention related?
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(16'000'000)/2,531,12*8,(64-12)*8, 254, 1*8, 31*8) // guess, matches 59.3 Hz from reference - measured at 59.1358Hz
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(16'000'000)/2,531,12*8,(64-12)*8, 254, 1*8, 31*8); // guess, matches 59.3 Hz from reference - measured at 59.1358Hz
+ screen.set_palette(m_palette);
+ screen.set_screen_update(FUNC(armedf_state::screen_update_armedf));
+ screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising));
MCFG_VIDEO_START_OVERRIDE(armedf_state,armedf)
- MCFG_SCREEN_UPDATE_DRIVER(armedf_state, screen_update_armedf)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising))
GFXDECODE(config, m_gfxdecode, m_palette, gfx_armedf);
PALETTE(config, m_palette).set_format(palette_device::xRGB_444, 2048);
@@ -1575,7 +1570,7 @@ MACHINE_CONFIG_START(bigfghtr_state::bigfghtr)
/* sound hardware */
terraf_sound(config);
-MACHINE_CONFIG_END
+}
/*************************************
*
diff --git a/src/mame/drivers/arsystems.cpp b/src/mame/drivers/arsystems.cpp
index f34be720572..8fffdfb3f08 100644
--- a/src/mame/drivers/arsystems.cpp
+++ b/src/mame/drivers/arsystems.cpp
@@ -300,11 +300,11 @@ INPUT_PORTS_END
*
*************************************/
-MACHINE_CONFIG_START(arcadia_amiga_state::arcadia)
-
+void arcadia_amiga_state::arcadia(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_NTSC)
- MCFG_DEVICE_PROGRAM_MAP(arcadia_map)
+ M68000(config, m_maincpu, amiga_state::CLK_7M_NTSC);
+ m_maincpu->set_addrmap(AS_PROGRAM, &arcadia_amiga_state::arcadia_map);
ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_512kb_map).set_options(ENDIANNESS_BIG, 16, 22, 0x200000);
@@ -321,13 +321,13 @@ MACHINE_CONFIG_START(arcadia_amiga_state::arcadia)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- paula_8364_device &paula(PAULA_8364(config, "amiga", amiga_state::CLK_C1_NTSC));
- paula.add_route(0, "lspeaker", 0.50);
- paula.add_route(1, "rspeaker", 0.50);
- paula.add_route(2, "rspeaker", 0.50);
- paula.add_route(3, "lspeaker", 0.50);
- paula.mem_read_cb().set(FUNC(amiga_state::chip_ram_r));
- paula.int_cb().set(FUNC(amiga_state::paula_int_w));
+ PAULA_8364(config, m_paula, amiga_state::CLK_C1_NTSC);
+ m_paula->add_route(0, "lspeaker", 0.50);
+ m_paula->add_route(1, "rspeaker", 0.50);
+ m_paula->add_route(2, "rspeaker", 0.50);
+ m_paula->add_route(3, "lspeaker", 0.50);
+ m_paula->mem_read_cb().set(FUNC(amiga_state::chip_ram_r));
+ m_paula->int_cb().set(FUNC(amiga_state::paula_int_w));
/* cia */
MOS8520(config, m_cia_0, amiga_state::CLK_E_NTSC);
@@ -347,15 +347,15 @@ MACHINE_CONFIG_START(arcadia_amiga_state::arcadia)
m_fdc->write_dma_callback().set(FUNC(amiga_state::chip_ram_w));
m_fdc->dskblk_callback().set(FUNC(amiga_state::fdc_dskblk_w));
m_fdc->dsksyn_callback().set(FUNC(amiga_state::fdc_dsksyn_w));
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(arcadia_amiga_state::argh)
+void arcadia_amiga_state::argh(machine_config &config)
+{
arcadia(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(argh_map)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &arcadia_amiga_state::argh_map);
+}
/*************************************
diff --git a/src/mame/drivers/artmagic.cpp b/src/mame/drivers/artmagic.cpp
index 74405910caa..79548718334 100644
--- a/src/mame/drivers/artmagic.cpp
+++ b/src/mame/drivers/artmagic.cpp
@@ -804,8 +804,8 @@ INPUT_PORTS_END
*
*************************************/
-MACHINE_CONFIG_START(artmagic_state::artmagic)
-
+void artmagic_state::artmagic(machine_config &config)
+{
/* basic machine hardware */
M68000(config, m_maincpu, MASTER_CLOCK_25MHz/2);
m_maincpu->set_addrmap(AS_PROGRAM, &artmagic_state::main_map);
@@ -827,40 +827,37 @@ MACHINE_CONFIG_START(artmagic_state::artmagic)
/* video hardware */
TLC34076(config, m_tlc34076, tlc34076_device::TLC34076_6_BIT);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK_40MHz/6, 428, 0, 320, 313, 0, 256)
- MCFG_SCREEN_UPDATE_DEVICE("tms", tms34010_device, tms340x0_rgb32)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(MASTER_CLOCK_40MHz/6, 428, 0, 320, 313, 0, 256);
+ screen.set_screen_update("tms", FUNC(tms34010_device::tms340x0_rgb32));
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("oki", OKIM6295, MASTER_CLOCK_40MHz/3/10, okim6295_device::PIN7_LOW)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.65)
-MACHINE_CONFIG_END
+ OKIM6295(config, m_oki, MASTER_CLOCK_40MHz/3/10, okim6295_device::PIN7_LOW).add_route(ALL_OUTPUTS, "mono", 0.65);
+}
-MACHINE_CONFIG_START(artmagic_state::cheesech)
+void artmagic_state::cheesech(machine_config &config)
+{
artmagic(config);
- MCFG_DEVICE_MODIFY("oki")
- MCFG_SOUND_ROUTES_RESET()
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
-MACHINE_CONFIG_END
+ m_oki->reset_routes();
+ m_oki->add_route(ALL_OUTPUTS, "mono", 1.0);
+}
-MACHINE_CONFIG_START(artmagic_state::stonebal)
+void artmagic_state::stonebal(machine_config &config)
+{
artmagic(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(stonebal_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &artmagic_state::stonebal_map);
- MCFG_DEVICE_MODIFY("tms")
- MCFG_DEVICE_PROGRAM_MAP(stonebal_tms_map)
+ m_tms->set_addrmap(AS_PROGRAM, &artmagic_state::stonebal_tms_map);
- MCFG_DEVICE_MODIFY("oki")
- MCFG_SOUND_ROUTES_RESET()
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.45)
-MACHINE_CONFIG_END
+ m_oki->reset_routes();
+ m_oki->add_route(ALL_OUTPUTS, "mono", 0.45);
+}
void artmagic_state::shtstar(machine_config &config)
{
diff --git a/src/mame/drivers/asst128.cpp b/src/mame/drivers/asst128.cpp
index f07914d5fe2..2de3a578e95 100644
--- a/src/mame/drivers/asst128.cpp
+++ b/src/mame/drivers/asst128.cpp
@@ -102,21 +102,22 @@ static DEVICE_INPUT_DEFAULTS_START( asst128 )
DEVICE_INPUT_DEFAULTS("DSW0", 0x30, 0x20)
DEVICE_INPUT_DEFAULTS_END
-MACHINE_CONFIG_START(asst128_state::asst128)
- MCFG_DEVICE_ADD("maincpu", I8086, 4772720)
- MCFG_DEVICE_PROGRAM_MAP(asst128_map)
- MCFG_DEVICE_IO_MAP(asst128_io)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259", pic8259_device, inta_cb)
+void asst128_state::asst128(machine_config &config)
+{
+ I8086(config, m_maincpu, 4772720);
+ m_maincpu->set_addrmap(AS_PROGRAM, &asst128_state::asst128_map);
+ m_maincpu->set_addrmap(AS_IO, &asst128_state::asst128_io);
+ m_maincpu->set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb));
- MCFG_DEVICE_ADD("mb", ASST128_MOTHERBOARD, 0)
- downcast<asst128_mb_device &>(*device).set_cputag("maincpu");
- MCFG_DEVICE_INPUT_DEFAULTS(asst128)
+ asst128_mb_device &mb(ASST128_MOTHERBOARD(config, "mb", 0));
+ mb.set_cputag(m_maincpu);
+ mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(asst128));
subdevice<cassette_image_device>("mb:cassette")->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED);
// FIXME: determine ISA bus clock
- MCFG_DEVICE_ADD("board0", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, "cga_mc1502", true)
- MCFG_DEVICE_ADD("board1", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, "lpt", true)
+ ISA8_SLOT(config, "board0", 0, "mb:isa", pc_isa8_cards, "cga_mc1502", true);
+ ISA8_SLOT(config, "board1", 0, "mb:isa", pc_isa8_cards, "lpt", true);
PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83).set_pc_kbdc_slot(subdevice("mb:pc_kbdc"));
@@ -128,7 +129,7 @@ MACHINE_CONFIG_START(asst128_state::asst128)
PC_JOY(config, "pc_joy");
RAM(config, RAM_TAG).set_default_size("512K").set_extra_options("64K, 128K, 256K");
-MACHINE_CONFIG_END
+}
ROM_START( asst128 )
ROM_REGION16_LE(0x10000,"bios", 0)
diff --git a/src/mame/drivers/asteroid.cpp b/src/mame/drivers/asteroid.cpp
index 6fb6fe5fb9a..53145eec6bf 100644
--- a/src/mame/drivers/asteroid.cpp
+++ b/src/mame/drivers/asteroid.cpp
@@ -811,18 +811,18 @@ void asteroid_state::astdelux(machine_config &config)
}
-MACHINE_CONFIG_START(asteroid_state::llander)
+void asteroid_state::llander(machine_config &config)
+{
asteroid_base(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(llander_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(asteroid_state, llander_interrupt, MASTER_CLOCK/4096/12)
+ m_maincpu->set_addrmap(AS_PROGRAM, &asteroid_state::llander_map);
+ m_maincpu->set_periodic_int(FUNC(asteroid_state::llander_interrupt), attotime::from_hz(MASTER_CLOCK/4096/12));
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_REFRESH_RATE(CLOCK_3KHZ/12/6)
- MCFG_SCREEN_VISIBLE_AREA(522, 1566, 270, 1070)
- MCFG_SCREEN_UPDATE_DEVICE("vector", vector_device, screen_update)
+ screen_device &screen(*subdevice<screen_device>("screen"));
+ screen.set_refresh_hz(CLOCK_3KHZ/12/6);
+ screen.set_visarea(522, 1566, 270, 1070);
+ screen.set_screen_update("vector", FUNC(vector_device::screen_update));
output_latch_device &outlatch(*subdevice<output_latch_device>("outlatch")); // LS174 at N11
outlatch.bit_handler<0>().set_output("lamp4"); // LAMP5 (COMMAND MISSION)
@@ -834,7 +834,7 @@ MACHINE_CONFIG_START(asteroid_state::llander)
/* sound hardware */
llander_sound(config);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/astrafr.cpp b/src/mame/drivers/astrafr.cpp
index dd80d010adb..1ad452a5c66 100644
--- a/src/mame/drivers/astrafr.cpp
+++ b/src/mame/drivers/astrafr.cpp
@@ -311,7 +311,8 @@ MACHINE_START_MEMBER(astrafr_state,astra_2e)
}
-MACHINE_CONFIG_START(astrafr_state::astrafr_dual)
+void astrafr_state::astrafr_dual(machine_config &config)
+{
M68340(config, m_maincpu, 16000000);
m_maincpu->set_addrmap(AS_PROGRAM, &astrafr_state::astrafr_master_map);
@@ -319,17 +320,19 @@ MACHINE_CONFIG_START(astrafr_state::astrafr_dual)
m_slavecpu->set_addrmap(AS_PROGRAM, &astrafr_state::astrafr_slave_map);
MCFG_MACHINE_START_OVERRIDE(astrafr_state, astra_common )
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(astrafr_state::astrafr_dual_2e)
+void astrafr_state::astrafr_dual_2e(machine_config &config)
+{
astrafr_dual(config);
MCFG_MACHINE_START_OVERRIDE(astrafr_state, astra_2e )
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(astrafr_state::astrafr_dual_37)
+void astrafr_state::astrafr_dual_37(machine_config &config)
+{
astrafr_dual(config);
MCFG_MACHINE_START_OVERRIDE(astrafr_state, astra_37 )
-MACHINE_CONFIG_END
+}
void astrafr_state::astrafr_dual_alt(machine_config &config)
{
@@ -340,28 +343,32 @@ void astrafr_state::astrafr_dual_alt(machine_config &config)
m_slavecpu->set_addrmap(AS_PROGRAM, &astrafr_state::astrafr_slave_map);
}
-MACHINE_CONFIG_START(astrafr_state::astrafr_dual_alt_37)
+void astrafr_state::astrafr_dual_alt_37(machine_config &config)
+{
astrafr_dual_alt(config);
MCFG_MACHINE_START_OVERRIDE(astrafr_state, astra_37 )
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(astrafr_state::astra_single)
+void astrafr_state::astra_single(machine_config &config)
+{
M68340(config, m_maincpu, 16000000);
m_maincpu->set_addrmap(AS_PROGRAM, &astrafr_state::astra_map);
MCFG_MACHINE_START_OVERRIDE(astrafr_state, astra_common )
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(astrafr_state::astra_single_37)
+void astrafr_state::astra_single_37(machine_config &config)
+{
astra_single(config);
MCFG_MACHINE_START_OVERRIDE(astrafr_state, astra_37 )
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(astrafr_state::astra_single_2e)
+void astrafr_state::astra_single_2e(machine_config &config)
+{
astra_single(config);
MCFG_MACHINE_START_OVERRIDE(astrafr_state, astra_2e )
-MACHINE_CONFIG_END
+}
MACHINE_START_MEMBER(astrafr_state,astra_57)
{
@@ -372,21 +379,24 @@ MACHINE_START_MEMBER(astrafr_state,astra_57)
}
-MACHINE_CONFIG_START(astrafr_state::astra_single_alt)
+void astrafr_state::astra_single_alt(machine_config &config)
+{
M68340(config, m_maincpu, 16000000);
m_maincpu->set_addrmap(AS_PROGRAM, &astrafr_state::astra_map);
MCFG_MACHINE_START_OVERRIDE(astrafr_state, astra_common )
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(astrafr_state::astra_single_alt_57)
+void astrafr_state::astra_single_alt_57(machine_config &config)
+{
astra_single_alt(config);
MCFG_MACHINE_START_OVERRIDE(astrafr_state, astra_57 )
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(astrafr_state::astra_single_alt_37)
+void astrafr_state::astra_single_alt_37(machine_config &config)
+{
astra_single_alt(config);
MCFG_MACHINE_START_OVERRIDE(astrafr_state, astra_37 )
-MACHINE_CONFIG_END
+}
/* are the ptM roms Master and ptS roms Slave?
or is as_partyd set actually the master, with the larger roms?
diff --git a/src/mame/drivers/astrcorp.cpp b/src/mame/drivers/astrcorp.cpp
index d36fc131700..3a106ec783a 100644
--- a/src/mame/drivers/astrcorp.cpp
+++ b/src/mame/drivers/astrcorp.cpp
@@ -544,26 +544,26 @@ TODO: understand if later hardware uses different parameters (XTAL is almost sur
#define ASTROCORP_VBEND 0
#define ASTROCORP_VBSTART 240
-MACHINE_CONFIG_START(astrocorp_state::showhand)
-
+void astrocorp_state::showhand(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(20'000'000) / 2)
- MCFG_DEVICE_PROGRAM_MAP(showhand_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", astrocorp_state, irq4_line_hold)
+ M68000(config, m_maincpu, XTAL(20'000'000) / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &astrocorp_state::showhand_map);
+ m_maincpu->set_vblank_int("screen", FUNC(astrocorp_state::irq4_line_hold));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
EEPROM_93C46_16BIT(config, "eeprom").default_data(showhand_default_eeprom, sizeof(showhand_default_eeprom));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
-// MCFG_SCREEN_REFRESH_RATE(58.846) // measured on pcb
-// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
-// MCFG_SCREEN_SIZE(320, 240)
-// MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 240-1)
- MCFG_SCREEN_RAW_PARAMS(ASTROCORP_PIXEL_CLOCK,ASTROCORP_HTOTAL,ASTROCORP_HBEND,320,ASTROCORP_VTOTAL,ASTROCORP_VBEND,ASTROCORP_VBSTART)
- MCFG_SCREEN_UPDATE_DRIVER(astrocorp_state, screen_update_astrocorp)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+// m_screen->set_refresh_hz(58.846); // measured on pcb
+// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+// m_screen->set_size(320, 240);
+// m_screen->set_visarea_full();
+ m_screen->set_raw(ASTROCORP_PIXEL_CLOCK,ASTROCORP_HTOTAL,ASTROCORP_HBEND,320,ASTROCORP_VTOTAL,ASTROCORP_VBEND,ASTROCORP_VBSTART);
+ m_screen->set_screen_update(FUNC(astrocorp_state::screen_update_astrocorp));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_astrocorp);
PALETTE(config, m_palette).set_format(palette_device::BGR_565, 0x100);
@@ -571,16 +571,15 @@ MACHINE_CONFIG_START(astrocorp_state::showhand)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(20'000'000)/20, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
-MACHINE_CONFIG_END
+ OKIM6295(config, m_oki, XTAL(20'000'000)/20, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0);
+}
-MACHINE_CONFIG_START(astrocorp_state::showhanc)
+void astrocorp_state::showhanc(machine_config &config)
+{
showhand(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(showhanc_map)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &astrocorp_state::showhanc_map);
+}
TIMER_DEVICE_CALLBACK_MEMBER(astrocorp_state::skilldrp_scanline)
@@ -594,11 +593,11 @@ TIMER_DEVICE_CALLBACK_MEMBER(astrocorp_state::skilldrp_scanline)
m_maincpu->set_input_line(2, HOLD_LINE);
}
-MACHINE_CONFIG_START(astrocorp_state::skilldrp)
-
+void astrocorp_state::skilldrp(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(24'000'000) / 2) // JX-1689F1028N GRX586.V5
- MCFG_DEVICE_PROGRAM_MAP(skilldrp_map)
+ M68000(config, m_maincpu, XTAL(24'000'000) / 2); // JX-1689F1028N GRX586.V5
+ m_maincpu->set_addrmap(AS_PROGRAM, &astrocorp_state::skilldrp_map);
TIMER(config, "scantimer").configure_scanline(FUNC(astrocorp_state::skilldrp_scanline), "screen", 0, 1);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
@@ -608,14 +607,14 @@ MACHINE_CONFIG_START(astrocorp_state::skilldrp)
TICKET_DISPENSER(config, m_hopper, attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW );
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
-// MCFG_SCREEN_REFRESH_RATE(58.846)
-// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
-// MCFG_SCREEN_SIZE(0x200, 0x100)
-// MCFG_SCREEN_VISIBLE_AREA(0, 0x200-1, 0, 0xf0-1)
- MCFG_SCREEN_RAW_PARAMS(ASTROCORP_PIXEL_CLOCK,ASTROCORP_HTOTAL,ASTROCORP_HBEND,512,ASTROCORP_VTOTAL,ASTROCORP_VBEND,ASTROCORP_VBSTART)
- MCFG_SCREEN_UPDATE_DRIVER(astrocorp_state, screen_update_astrocorp)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+// m_screen->set_refresh_hz(58.846);
+// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+// m_screen->set_size(0x200, 0x100);
+// m_screen->set_visarea(0, 0x200-1, 0, 0xf0-1);
+ m_screen->set_raw(ASTROCORP_PIXEL_CLOCK,ASTROCORP_HTOTAL,ASTROCORP_HBEND,512,ASTROCORP_VTOTAL,ASTROCORP_VBEND,ASTROCORP_VBSTART);
+ m_screen->set_screen_update(FUNC(astrocorp_state::screen_update_astrocorp));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_astrocorp);
PALETTE(config, m_palette).set_format(palette_device::BGR_565, 0x100);
@@ -623,16 +622,15 @@ MACHINE_CONFIG_START(astrocorp_state::skilldrp)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(24'000'000)/24, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
-MACHINE_CONFIG_END
+ OKIM6295(config, m_oki, XTAL(24'000'000)/24, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0);
+}
-MACHINE_CONFIG_START(astrocorp_state::speeddrp)
+void astrocorp_state::speeddrp(machine_config &config)
+{
skilldrp(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(speeddrp_map)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &astrocorp_state::speeddrp_map);
+}
/***************************************************************************
diff --git a/src/mame/drivers/astrof.cpp b/src/mame/drivers/astrof.cpp
index 44cb8ea63e4..7864d161b7c 100644
--- a/src/mame/drivers/astrof.cpp
+++ b/src/mame/drivers/astrof.cpp
@@ -926,68 +926,66 @@ void astrof_state::base(machine_config &config)
}
-MACHINE_CONFIG_START(astrof_state::astrof)
+void astrof_state::astrof(machine_config &config)
+{
base(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(astrof_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &astrof_state::astrof_map);
MCFG_MACHINE_START_OVERRIDE(astrof_state,astrof)
/* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(astrof_state, screen_update_astrof)
+ m_screen->set_screen_update(FUNC(astrof_state::screen_update_astrof));
/* audio hardware */
astrof_audio(config);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(astrof_state::abattle)
+void astrof_state::abattle(machine_config &config)
+{
astrof(config);
/* basic machine hardware */
MCFG_MACHINE_START_OVERRIDE(astrof_state,abattle)
MCFG_MACHINE_RESET_OVERRIDE(astrof_state,abattle)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(astrof_state::spfghmk2)
+void astrof_state::spfghmk2(machine_config &config)
+{
base(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(spfghmk2_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &astrof_state::spfghmk2_map);
MCFG_MACHINE_START_OVERRIDE(astrof_state,spfghmk2)
/* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(astrof_state, screen_update_astrof)
+ m_screen->set_screen_update(FUNC(astrof_state::screen_update_astrof));
/* audio hardware */
spfghmk2_audio(config);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(astrof_state::tomahawk)
+void astrof_state::tomahawk(machine_config &config)
+{
base(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(tomahawk_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &astrof_state::tomahawk_map);
MCFG_MACHINE_START_OVERRIDE(astrof_state,tomahawk)
/* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(astrof_state, screen_update_tomahawk)
+ m_screen->set_screen_update(FUNC(astrof_state::screen_update_tomahawk));
/* audio hardware */
tomahawk_audio(config);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/astrohome.cpp b/src/mame/drivers/astrohome.cpp
index b04948e5487..b4e49c93224 100644
--- a/src/mame/drivers/astrohome.cpp
+++ b/src/mame/drivers/astrohome.cpp
@@ -18,6 +18,7 @@
#include "bus/astrocde/exp.h"
#include "bus/astrocde/ram.h"
#include "bus/astrocde/ctrl.h"
+#include "bus/astrocde/accessory.h"
#include "softlist.h"
#include "speaker.h"
@@ -31,6 +32,7 @@ public:
, m_cart(*this, "cartslot")
, m_exp(*this, "exp")
, m_ctrl(*this, "ctrl%u", 1U)
+ , m_accessory(*this, "accessory")
, m_keypad(*this, "KEYPAD%u", 0U)
{ }
@@ -45,6 +47,7 @@ private:
required_device<astrocade_cart_slot_device> m_cart;
required_device<astrocade_exp_device> m_exp;
required_device_array<astrocade_ctrl_port_device, 4> m_ctrl;
+ required_device<astrocade_accessory_port_device> m_accessory;
required_ioport_array<4> m_keypad;
};
@@ -181,6 +184,8 @@ void astrocde_home_state::astrocde(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &astrocde_home_state::astrocade_mem);
m_maincpu->set_addrmap(AS_IO, &astrocde_home_state::astrocade_io);
+ config.m_perfect_cpu_quantum = subtag("maincpu");
+
MCFG_MACHINE_START_OVERRIDE(astrocde_home_state, astrocde)
/* video hardware */
@@ -192,10 +197,11 @@ void astrocde_home_state::astrocde(machine_config &config)
PALETTE(config, "palette", FUNC(astrocde_home_state::astrocade_palette), 512);
/* control ports */
- ASTROCADE_CTRL_PORT(config, m_ctrl[0], astrocade_controllers, "joy");
- ASTROCADE_CTRL_PORT(config, m_ctrl[1], astrocade_controllers, nullptr);
- ASTROCADE_CTRL_PORT(config, m_ctrl[2], astrocade_controllers, nullptr);
- ASTROCADE_CTRL_PORT(config, m_ctrl[3], astrocade_controllers, nullptr);
+ for (uint32_t port = 0; port < 4; port++)
+ {
+ ASTROCADE_CTRL_PORT(config, m_ctrl[port], astrocade_controllers, port == 0 ? "joy" : nullptr);
+ m_ctrl[port]->ltpen_handler().set(FUNC(astrocde_home_state::lightpen_trigger_w));
+ }
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -213,6 +219,10 @@ void astrocde_home_state::astrocde(machine_config &config)
/* cartridge */
ASTROCADE_CART_SLOT(config, m_cart, astrocade_cart, nullptr);
+ /* cartridge */
+ ASTROCADE_ACCESSORY_PORT(config, m_accessory, m_screen, astrocade_accessories, nullptr);
+ m_accessory->ltpen_handler().set(FUNC(astrocde_home_state::lightpen_trigger_w));
+
/* Software lists */
SOFTWARE_LIST(config, "cart_list").set_original("astrocde");
}
@@ -247,7 +257,7 @@ ROM_END
void astrocde_state::init_astrocde()
{
- m_video_config = AC_SOUND_PRESENT | AC_LIGHTPEN_INTS;
+ m_video_config = AC_SOUND_PRESENT;
}
MACHINE_START_MEMBER(astrocde_home_state, astrocde)
@@ -258,7 +268,10 @@ MACHINE_START_MEMBER(astrocde_home_state, astrocde)
// if no RAM is mounted and the handlers are installed, the system starts with garbage on screen and a RESET is necessary
// thus, install RAM only if an expansion is mounted
if (m_exp->get_card_mounted())
+ {
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x5000, 0xffff, read8_delegate(FUNC(astrocade_exp_device::read),(astrocade_exp_device*)m_exp), write8_delegate(FUNC(astrocade_exp_device::write),(astrocade_exp_device*)m_exp));
+ m_maincpu->space(AS_IO).install_readwrite_handler(0x0080, 0x00ff, 0x0000, 0x0000, 0xff00, read8_delegate(FUNC(astrocade_exp_device::read_io),(astrocade_exp_device*)m_exp), write8_delegate(FUNC(astrocade_exp_device::write_io),(astrocade_exp_device*)m_exp));
+ }
}
/*************************************
diff --git a/src/mame/drivers/astropc.cpp b/src/mame/drivers/astropc.cpp
index 810a97b111c..f9fd2241caa 100644
--- a/src/mame/drivers/astropc.cpp
+++ b/src/mame/drivers/astropc.cpp
@@ -51,12 +51,13 @@ INPUT_PORTS_END
-MACHINE_CONFIG_START(astropc_state::astropc)
+void astropc_state::astropc(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", I486, 40000000 ) // ??
- MCFG_DEVICE_PROGRAM_MAP(astropc_map)
- MCFG_DEVICE_IO_MAP(astropc_io)
-MACHINE_CONFIG_END
+ I486(config, m_maincpu, 40000000 ); // ??
+ m_maincpu->set_addrmap(AS_PROGRAM, &astropc_state::astropc_map);
+ m_maincpu->set_addrmap(AS_IO, &astropc_state::astropc_io);
+}
ROM_START( blackbd )
diff --git a/src/mame/drivers/asuka.cpp b/src/mame/drivers/asuka.cpp
index 5a56bfb3429..4e6dabd9abc 100644
--- a/src/mame/drivers/asuka.cpp
+++ b/src/mame/drivers/asuka.cpp
@@ -275,7 +275,7 @@ WRITE_LINE_MEMBER(asuka_state::asuka_msm5205_vck)
if (m_adpcm_ff)
{
- m_adpcm_select->write_ba(m_sound_data[m_adpcm_pos]);
+ m_adpcm_select->ba_w(m_sound_data[m_adpcm_pos]);
m_adpcm_pos = (m_adpcm_pos + 1) & 0xffff;
}
}
diff --git a/src/mame/drivers/atarifb.cpp b/src/mame/drivers/atarifb.cpp
index fb0f6ad1a47..127bfcbab2b 100644
--- a/src/mame/drivers/atarifb.cpp
+++ b/src/mame/drivers/atarifb.cpp
@@ -557,23 +557,23 @@ void atarifb_state::machine_reset()
m_counter_y_in2b = 0;
}
-MACHINE_CONFIG_START(atarifb_state::atarifb)
-
+void atarifb_state::atarifb(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M6502, 750000)
- MCFG_DEVICE_PROGRAM_MAP(atarifb_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(atarifb_state, irq0_line_hold, 4*60)
+ M6502(config, m_maincpu, 750000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &atarifb_state::atarifb_map);
+ m_maincpu->set_periodic_int(FUNC(atarifb_state::irq0_line_hold), attotime::from_hz(4*60));
WATCHDOG_TIMER(config, "watchdog");
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2037) /* 16.3ms * 1/8 = 2037.5. Is it 1/8th or 3/32nds? (1528?) */)
- MCFG_SCREEN_SIZE(38*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 38*8-1, 1*8, 31*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(atarifb_state, screen_update_atarifb)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2037) /* 16.3ms * 1/8 = 2037.5. Is it 1/8th or 3/32nds? (1528?) */);
+ m_screen->set_size(38*8, 32*8);
+ m_screen->set_visarea(0*8, 38*8-1, 1*8, 31*8-1);
+ m_screen->set_screen_update(FUNC(atarifb_state::screen_update_atarifb));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_atarifb);
PALETTE(config, m_palette, FUNC(atarifb_state::atarifb_palette), 12);
@@ -581,50 +581,46 @@ MACHINE_CONFIG_START(atarifb_state::atarifb)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("discrete", DISCRETE, atarifb_discrete)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.18)
-MACHINE_CONFIG_END
+ DISCRETE(config, m_discrete, atarifb_discrete).add_route(ALL_OUTPUTS, "mono", 0.18);
+}
-MACHINE_CONFIG_START(atarifb_state::atarifb4)
+void atarifb_state::atarifb4(machine_config &config)
+{
atarifb(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(atarifb4_map)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &atarifb_state::atarifb4_map);
+}
-MACHINE_CONFIG_START(atarifb_state::abaseb)
+void atarifb_state::abaseb(machine_config &config)
+{
atarifb(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(abaseb_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &atarifb_state::abaseb_map);
/* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(atarifb_state, screen_update_abaseb)
+ m_screen->set_screen_update(FUNC(atarifb_state::screen_update_abaseb));
/* sound hardware */
- MCFG_DEVICE_REPLACE("discrete", DISCRETE, abaseb_discrete)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.24)
-MACHINE_CONFIG_END
+ DISCRETE(config.replace(), m_discrete, abaseb_discrete).add_route(ALL_OUTPUTS, "mono", 0.24);
+}
-MACHINE_CONFIG_START(atarifb_state::soccer)
+void atarifb_state::soccer(machine_config &config)
+{
atarifb(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(soccer_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &atarifb_state::soccer_map);
/* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_VISIBLE_AREA(0*8, 38*8-1, 2*8, 32*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(atarifb_state, screen_update_soccer)
+ m_screen->set_visarea(0*8, 38*8-1, 2*8, 32*8-1);
+ m_screen->set_screen_update(FUNC(atarifb_state::screen_update_soccer));
m_gfxdecode->set_info(gfx_soccer);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/atarig1.cpp b/src/mame/drivers/atarig1.cpp
index eed910b7d63..a4d3de4453d 100644
--- a/src/mame/drivers/atarig1.cpp
+++ b/src/mame/drivers/atarig1.cpp
@@ -396,11 +396,11 @@ static const atari_rle_objects_config modesc_pitfight =
*
*************************************/
-MACHINE_CONFIG_START(atarig1_state::atarig1)
-
+void atarig1_state::atarig1(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, ATARI_CLOCK_14MHz)
- MCFG_DEVICE_PROGRAM_MAP(main_map)
+ M68000(config, m_maincpu, ATARI_CLOCK_14MHz);
+ m_maincpu->set_addrmap(AS_PROGRAM, &atarig1_state::main_map);
MCFG_MACHINE_START_OVERRIDE(atarig1_state,atarig1)
MCFG_MACHINE_RESET_OVERRIDE(atarig1_state,atarig1)
@@ -414,16 +414,16 @@ MACHINE_CONFIG_START(atarig1_state::atarig1)
PALETTE(config, "palette").set_format(palette_device::IRGB_1555, 1280);
/* initialize the playfield */
- MCFG_TILEMAP_ADD_STANDARD("playfield", "gfxdecode", 2, atarig1_state, get_playfield_tile_info, 8,8, SCAN_ROWS, 64,64)
- MCFG_TILEMAP_ADD_STANDARD_TRANSPEN("alpha", "gfxdecode", 2, atarig1_state, get_alpha_tile_info, 8,8, SCAN_ROWS, 64,32, 0)
+ TILEMAP(config, m_playfield_tilemap, m_gfxdecode, 2, 8,8, TILEMAP_SCAN_ROWS, 64,64).set_info_callback(FUNC(atarig1_state::get_playfield_tile_info));
+ TILEMAP(config, m_alpha_tilemap, m_gfxdecode, 2, 8,8, TILEMAP_SCAN_ROWS, 64,32, 0).set_info_callback(FUNC(atarig1_state::get_alpha_tile_info));
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
/* note: these parameters are from published specs, not derived */
- MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240)
- MCFG_SCREEN_UPDATE_DRIVER(atarig1_state, screen_update_atarig1)
- MCFG_SCREEN_PALETTE("palette")
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, atarig1_state, video_int_write_line))
+ m_screen->set_raw(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240);
+ m_screen->set_screen_update(FUNC(atarig1_state::screen_update_atarig1));
+ m_screen->set_palette("palette");
+ m_screen->screen_vblank().set(FUNC(atarig1_state::video_int_write_line));
MCFG_VIDEO_START_OVERRIDE(atarig1_state,atarig1)
@@ -434,7 +434,7 @@ MACHINE_CONFIG_START(atarig1_state::atarig1)
m_jsa->main_int_cb().set_inputline(m_maincpu, M68K_IRQ_2);
m_jsa->test_read_cb().set_ioport("IN0").bit(14);
m_jsa->add_route(ALL_OUTPUTS, "mono", 1.0);
-MACHINE_CONFIG_END
+}
void atarig1_state::hydrap(machine_config &config)
diff --git a/src/mame/drivers/atarig42.cpp b/src/mame/drivers/atarig42.cpp
index 5761fe7fe57..8878331f30f 100644
--- a/src/mame/drivers/atarig42.cpp
+++ b/src/mame/drivers/atarig42.cpp
@@ -515,10 +515,9 @@ static const atari_rle_objects_config modesc_0x400 =
*************************************/
MACHINE_CONFIG_START(atarig42_state::atarig42)
-
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, ATARI_CLOCK_14MHz)
- MCFG_DEVICE_PROGRAM_MAP(main_map)
+ M68000(config, m_maincpu, ATARI_CLOCK_14MHz);
+ m_maincpu->set_addrmap(AS_PROGRAM, &atarig42_state::main_map);
EEPROM_2816(config, "eeprom").lock_after_write(true);
@@ -529,16 +528,16 @@ MACHINE_CONFIG_START(atarig42_state::atarig42)
PALETTE(config, "palette").set_format(palette_device::IRGB_1555, 2048);
MCFG_TILEMAP_ADD_CUSTOM("playfield", "gfxdecode", 2, atarig42_state, get_playfield_tile_info, 8,8, atarig42_playfield_scan, 128,64)
- MCFG_TILEMAP_ADD_STANDARD_TRANSPEN("alpha", "gfxdecode", 2, atarig42_state, get_alpha_tile_info, 8,8, SCAN_ROWS, 64,32, 0)
+ TILEMAP(config, m_alpha_tilemap, m_gfxdecode, 2, 8,8, TILEMAP_SCAN_ROWS, 64,32, 0).set_info_callback(FUNC(atarig42_state::get_alpha_tile_info));
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
/* note: these parameters are from published specs, not derived */
/* the board uses an SOS chip to generate video signals */
- MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240)
- MCFG_SCREEN_UPDATE_DRIVER(atarig42_state, screen_update_atarig42)
- MCFG_SCREEN_PALETTE("palette")
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, atarig42_state, video_int_write_line))
+ m_screen->set_raw(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240);
+ m_screen->set_screen_update(FUNC(atarig42_state::screen_update_atarig42));
+ m_screen->set_palette("palette");
+ m_screen->screen_vblank().set(FUNC(atarig42_state::video_int_write_line));
MCFG_VIDEO_START_OVERRIDE(atarig42_state,atarig42)
diff --git a/src/mame/drivers/atarigt.cpp b/src/mame/drivers/atarigt.cpp
index 793c2a8ca42..d5850333303 100644
--- a/src/mame/drivers/atarigt.cpp
+++ b/src/mame/drivers/atarigt.cpp
@@ -806,9 +806,9 @@ static const atari_rle_objects_config modesc =
MACHINE_CONFIG_START(atarigt_state::atarigt)
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68EC020, ATARI_CLOCK_50MHz/2)
- MCFG_DEVICE_PROGRAM_MAP(main_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(atarigt_state, scanline_int_gen, 250)
+ M68EC020(config, m_maincpu, ATARI_CLOCK_50MHz/2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &atarigt_state::main_map);
+ m_maincpu->set_periodic_int(FUNC(atarigt_state::scanline_int_gen), attotime::from_hz(250));
MCFG_MACHINE_RESET_OVERRIDE(atarigt_state,atarigt)
@@ -816,18 +816,18 @@ MACHINE_CONFIG_START(atarigt_state::atarigt)
/* video hardware */
GFXDECODE(config, m_gfxdecode, m_palette, gfx_atarigt);
- MCFG_PALETTE_ADD("palette", MRAM_ENTRIES)
+ PALETTE(config, m_palette).set_entries(MRAM_ENTRIES);
MCFG_TILEMAP_ADD_CUSTOM("playfield", "gfxdecode", 2, atarigt_state, get_playfield_tile_info, 8,8, atarigt_playfield_scan, 128,64)
- MCFG_TILEMAP_ADD_STANDARD("alpha", "gfxdecode", 2, atarigt_state, get_alpha_tile_info, 8,8, SCAN_ROWS, 64, 32)
+ TILEMAP(config, m_alpha_tilemap, m_gfxdecode, 2, 8,8, TILEMAP_SCAN_ROWS, 64, 32).set_info_callback(FUNC(atarigt_state::get_alpha_tile_info));
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
/* note: these parameters are from published specs, not derived */
/* the board uses a pair of GALs to determine H and V parameters */
- MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240)
- MCFG_SCREEN_UPDATE_DRIVER(atarigt_state, screen_update_atarigt)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, atarigt_state, video_int_write_line))
+ m_screen->set_raw(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240);
+ m_screen->set_screen_update(FUNC(atarigt_state::screen_update_atarigt));
+ m_screen->screen_vblank().set(FUNC(atarigt_state::video_int_write_line));
MCFG_VIDEO_START_OVERRIDE(atarigt_state,atarigt)
diff --git a/src/mame/drivers/atarigx2.cpp b/src/mame/drivers/atarigx2.cpp
index e4d1ceba43d..f29764b4113 100644
--- a/src/mame/drivers/atarigx2.cpp
+++ b/src/mame/drivers/atarigx2.cpp
@@ -1488,8 +1488,8 @@ static const atari_rle_objects_config modesc_0x400 =
MACHINE_CONFIG_START(atarigx2_state::atarigx2)
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68EC020, ATARI_CLOCK_14MHz)
- MCFG_DEVICE_PROGRAM_MAP(main_map)
+ M68EC020(config, m_maincpu, ATARI_CLOCK_14MHz);
+ m_maincpu->set_addrmap(AS_PROGRAM, &atarigx2_state::main_map);
ADC0809(config, m_adc, ATARI_CLOCK_14MHz/16);
m_adc->in_callback<0>().set_ioport("A2D0");
@@ -1508,16 +1508,16 @@ MACHINE_CONFIG_START(atarigx2_state::atarigx2)
PALETTE(config, "palette").set_format(palette_device::IRGB_1555, 2048);
MCFG_TILEMAP_ADD_CUSTOM("playfield", "gfxdecode", 2, atarigx2_state, get_playfield_tile_info, 8,8, atarigx2_playfield_scan, 128,64)
- MCFG_TILEMAP_ADD_STANDARD_TRANSPEN("alpha", "gfxdecode", 2, atarigx2_state, get_alpha_tile_info, 8,8, SCAN_ROWS, 64,32, 0)
+ TILEMAP(config, m_alpha_tilemap, m_gfxdecode, 2, 8,8, TILEMAP_SCAN_ROWS, 64,32, 0).set_info_callback(FUNC(atarigx2_state::get_alpha_tile_info));
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
/* note: these parameters are from published specs, not derived */
/* the board uses a pair of GALs to determine H and V parameters */
- MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240)
- MCFG_SCREEN_UPDATE_DRIVER(atarigx2_state, screen_update_atarigx2)
- MCFG_SCREEN_PALETTE("palette")
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, atarigx2_state, video_int_write_line))
+ m_screen->set_raw(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240);
+ m_screen->set_screen_update(FUNC(atarigx2_state::screen_update_atarigx2));
+ m_screen->set_palette("palette");
+ m_screen->screen_vblank().set(FUNC(atarigx2_state::video_int_write_line));
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
diff --git a/src/mame/drivers/atarist.cpp b/src/mame/drivers/atarist.cpp
index c618f36c0d9..a6eb2d80444 100644
--- a/src/mame/drivers/atarist.cpp
+++ b/src/mame/drivers/atarist.cpp
@@ -2074,7 +2074,7 @@ void st_state::keyboard(machine_config &config)
}
//-------------------------------------------------
-// MACHINE_CONFIG( st )
+// machine_config( st )
//-------------------------------------------------
void st_state::st(machine_config &config)
@@ -2106,7 +2106,7 @@ void st_state::st(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( megast )
+// machine_config( megast )
//-------------------------------------------------
void megast_state::megast(machine_config &config)
@@ -2141,7 +2141,7 @@ void megast_state::megast(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( ste )
+// machine_config( ste )
//-------------------------------------------------
void ste_state::ste(machine_config &config)
@@ -2181,7 +2181,7 @@ void ste_state::ste(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( megaste )
+// machine_config( megaste )
//-------------------------------------------------
void megaste_state::megaste(machine_config &config)
@@ -2198,7 +2198,7 @@ void megaste_state::megaste(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( stbook )
+// machine_config( stbook )
//-------------------------------------------------
#if 0
void stbook_state::stbook(machine_config &config)
@@ -2282,7 +2282,7 @@ void stbook_state::stbook(machine_config &config)
#endif
//-------------------------------------------------
-// MACHINE_CONFIG( tt030 )
+// machine_config( tt030 )
//-------------------------------------------------
void ste_state::tt030(machine_config &config)
@@ -2292,7 +2292,7 @@ void ste_state::tt030(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( falcon )
+// machine_config( falcon )
//-------------------------------------------------
void ste_state::falcon(machine_config &config)
@@ -2302,7 +2302,7 @@ void ste_state::falcon(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( falcon40 )
+// machine_config( falcon40 )
//-------------------------------------------------
void ste_state::falcon40(machine_config &config)
diff --git a/src/mame/drivers/atarisy1.cpp b/src/mame/drivers/atarisy1.cpp
index 1d779105db3..7c9b8fbff0b 100644
--- a/src/mame/drivers/atarisy1.cpp
+++ b/src/mame/drivers/atarisy1.cpp
@@ -724,14 +724,14 @@ void atarisy1_state::add_adc(machine_config &config)
m_ajsint->output_handler().set(FUNC(atarisy1_state::joystick_int));
}
-MACHINE_CONFIG_START(atarisy1_state::atarisy1)
-
+void atarisy1_state::atarisy1(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68010, ATARI_CLOCK_14MHz/2)
- MCFG_DEVICE_PROGRAM_MAP(main_map)
+ M68010(config, m_maincpu, ATARI_CLOCK_14MHz/2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &atarisy1_state::main_map);
- MCFG_DEVICE_ADD("audiocpu", M6502, ATARI_CLOCK_14MHz/8)
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
+ M6502(config, m_audiocpu, ATARI_CLOCK_14MHz/8);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &atarisy1_state::sound_map);
MCFG_MACHINE_START_OVERRIDE(atarisy1_state,atarisy1)
MCFG_MACHINE_RESET_OVERRIDE(atarisy1_state,atarisy1)
@@ -756,20 +756,20 @@ MACHINE_CONFIG_START(atarisy1_state::atarisy1)
PALETTE(config, m_palette).set_format(palette_device::IRGB_4444, 1024);
- MCFG_TILEMAP_ADD_STANDARD("playfield", "gfxdecode", 2, atarisy1_state, get_playfield_tile_info, 8,8, SCAN_ROWS, 64,64)
- MCFG_TILEMAP_ADD_STANDARD_TRANSPEN("alpha", "gfxdecode", 2, atarisy1_state, get_alpha_tile_info, 8,8, SCAN_ROWS, 64,32, 0)
+ TILEMAP(config, m_playfield_tilemap, m_gfxdecode, 2, 8,8, TILEMAP_SCAN_ROWS, 64,64).set_info_callback(FUNC(atarisy1_state::get_playfield_tile_info));
+ TILEMAP(config, m_alpha_tilemap, m_gfxdecode, 2, 8,8, TILEMAP_SCAN_ROWS, 64,32, 0).set_info_callback(FUNC(atarisy1_state::get_alpha_tile_info));
ATARI_MOTION_OBJECTS(config, m_mob, 0, m_screen, atarisy1_state::s_mob_config);
m_mob->set_gfxdecode(m_gfxdecode);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
/* note: these parameters are from published specs, not derived */
/* video timing comes from an 82S163 (H) and an 82S129 (V) */
- MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240)
- MCFG_SCREEN_UPDATE_DRIVER(atarisy1_state, screen_update_atarisy1)
- MCFG_SCREEN_PALETTE(m_palette)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, atarisy1_state, video_int_write_line))
+ m_screen->set_raw(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240);
+ m_screen->set_screen_update(FUNC(atarisy1_state::screen_update_atarisy1));
+ m_screen->set_palette(m_palette);
+ m_screen->screen_vblank().set(FUNC(atarisy1_state::video_int_write_line));
MCFG_VIDEO_START_OVERRIDE(atarisy1_state,atarisy1)
@@ -784,13 +784,13 @@ MACHINE_CONFIG_START(atarisy1_state::atarisy1)
ymsnd.add_route(0, "lspeaker", 0.80);
ymsnd.add_route(1, "rspeaker", 0.80);
- MCFG_DEVICE_ADD("pokey", POKEY, ATARI_CLOCK_14MHz/8)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.40)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40)
+ pokey_device &pokey(POKEY(config, "pokey", ATARI_CLOCK_14MHz/8));
+ pokey.add_route(ALL_OUTPUTS, "lspeaker", 0.40);
+ pokey.add_route(ALL_OUTPUTS, "rspeaker", 0.40);
- MCFG_DEVICE_ADD("tms", TMS5220C, ATARI_CLOCK_14MHz/2/11)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
+ TMS5220C(config, m_tms, ATARI_CLOCK_14MHz/2/11);
+ m_tms->add_route(ALL_OUTPUTS, "lspeaker", 1.0);
+ m_tms->add_route(ALL_OUTPUTS, "rspeaker", 1.0);
/* via */
via6522_device &via(VIA6522(config, "via6522_0", ATARI_CLOCK_14MHz/8));
@@ -798,7 +798,7 @@ MACHINE_CONFIG_START(atarisy1_state::atarisy1)
via.readpb_handler().set(FUNC(atarisy1_state::via_pb_r));
via.writepa_handler().set(FUNC(atarisy1_state::via_pa_w));
via.writepb_handler().set(FUNC(atarisy1_state::via_pb_w));
-MACHINE_CONFIG_END
+}
void atarisy1_state::marble(machine_config &config)
{
diff --git a/src/mame/drivers/atarittl.cpp b/src/mame/drivers/atarittl.cpp
index f580f7a41b1..beeae807a92 100644
--- a/src/mame/drivers/atarittl.cpp
+++ b/src/mame/drivers/atarittl.cpp
@@ -37,7 +37,6 @@
TM-019 Pursuit (1975) K8P-B 90128 NO
TM-012,029,034 Quadrapong (1974) A000845 NO
TM-009 Qwak!/Quack (1974) A000937,A000953 YES 72074/37-2530N (K9)
- TM-001,023,029,032 Rebound/Spike/Volleyball (1974) A000517,A000846,SPIKE-(A or B) NO
TM-047 Shark JAWS (1975) A003806 YES 004182, 004183
TM-008,029 Space Race (1973) A000803 NO
TM-046 Steeplechase/Astroturf (1975) A003750 YES 003774 ROM Bugle (C8), 003773-01 "A" Horse (C4), 003773-02 "B" Horse (D4)
@@ -53,7 +52,7 @@
TM-018 Dodgeball/Dodgem (Not Produced/Released) (1975)
TM-024 Qwakers (Not Produced/Released) (1974?) (Kee Games clone of Qwak!?)
- - Information (current as of 21 Dec. 2016) on what logic chips (and some analog parts) are still needed to be emulated in the
+ - Information (current as of 27 Mar. 2019) on what logic chips (and some analog parts) are still needed to be emulated in the
netlist system per-game:
TM-057 (Stunt Cycle)
@@ -63,9 +62,7 @@
TM-055 (Indy 4)
7406 Hex Inverter Buffers/Drivers with O.C. H.V. Outputs (note: Might not be needed, could just clone from 7404)
- 7414 Hex Schmitt-Trigger Inverters
7417 Hex Buffers/Drivers
- 74164 8-bit Serial-In, Parallel-Out Shift Register
9301 1-of-10 Decoder
LM339 Quad Comparator
@@ -328,10 +325,11 @@ uint32_t stuntcyc_state::screen_update_stuntcyc(screen_device &screen, bitmap_rg
return 0;
}
-MACHINE_CONFIG_START(atarikee_state::atarikee)
+void atarikee_state::atarikee(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, NETLIST_CLOCK)
- MCFG_NETLIST_SETUP(atarikee)
+ NETLIST_CPU(config, m_maincpu, NETLIST_CLOCK);
+ m_maincpu->set_constructor(netlist_atarikee);
/* video hardware */
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
@@ -341,15 +339,15 @@ MACHINE_CONFIG_START(atarikee_state::atarikee)
m_video->set_vert_params(V_TOTAL-22,V_TOTAL-19,V_TOTAL-12,V_TOTAL);
m_video->set_fieldcount(1);
m_video->set_threshold(0.30);
-MACHINE_CONFIG_END
+}
//#define STUNTCYC_NL_CLOCK (14318181*69)
#define STUNTCYC_NL_CLOCK (SC_HTOTAL*SC_VTOTAL*60*140)
MACHINE_CONFIG_START(stuntcyc_state::stuntcyc)
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, STUNTCYC_NL_CLOCK)
- MCFG_NETLIST_SETUP(stuntcyc)
+ NETLIST_CPU(config, m_maincpu, STUNTCYC_NL_CLOCK);
+ m_maincpu->set_constructor(netlist_stuntcyc);
//MCFG_NETLIST_ANALOG_OUTPUT("maincpu", "vid0", "VIDEO_OUT", fixedfreq_device, update_vid, "fixfreq")
MCFG_NETLIST_LOGIC_OUTPUT("maincpu", "probe_bit0", "probe_bit0", stuntcyc_state, probe_bit0_cb, "")
@@ -362,9 +360,9 @@ MACHINE_CONFIG_START(stuntcyc_state::stuntcyc)
MCFG_NETLIST_LOGIC_OUTPUT("maincpu", "probe_clock", "probe_clock", stuntcyc_state, probe_clock_cb, "")
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_UPDATE_DRIVER(stuntcyc_state, screen_update_stuntcyc)
- MCFG_SCREEN_RAW_PARAMS(SC_HTOTAL*SC_VTOTAL*60, SC_HTOTAL, 0, SC_HTOTAL, SC_VTOTAL, 0, SC_VTOTAL)
+ SCREEN(config, m_probe_screen, SCREEN_TYPE_RASTER);
+ m_probe_screen->set_screen_update(FUNC(stuntcyc_state::screen_update_stuntcyc));
+ m_probe_screen->set_raw(SC_HTOTAL*SC_VTOTAL*60, SC_HTOTAL, 0, SC_HTOTAL, SC_VTOTAL, 0, SC_VTOTAL);
//FIXFREQ(config, m_video).set_screen("screen");
//m_video->set_monitor_clock(SC_VIDCLOCK);
//m_video->set_horz_params(SC_HTOTAL-67,SC_HTOTAL-40,SC_HTOTAL-8, SC_HTOTAL);
@@ -375,8 +373,7 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(gtrak10_state::gtrak10)
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, NETLIST_CLOCK)
- MCFG_NETLIST_SETUP(gtrak10)
+ NETLIST_CPU(config, "maincpu", NETLIST_CLOCK).set_constructor(netlist_gtrak10);
MCFG_NETLIST_ANALOG_OUTPUT("maincpu", "vid0", "VIDEO_OUT", fixedfreq_device, update_composite_monochrome, "fixfreq")
@@ -685,10 +682,6 @@ ROM_START( quadpong )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_END
-ROM_START( rebound )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
-ROM_END
-
ROM_START( spacrace )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_END
@@ -744,7 +737,6 @@ GAME(1975, tankii, 0, atarikee, 0, atarikee_state, empty_init,
//GAME(1974, pinpong, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Pin Pong [TTL]", MACHINE_IS_SKELETON)
//GAME(1975, pursuit, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Pursuit [TTL]", MACHINE_IS_SKELETON)
//GAME(1974, quadpong, eliminat, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Quadrapong [TTL]", MACHINE_IS_SKELETON)
-//GAME(1974, rebound, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari/Kee", "Rebound/Spike/Volleyball [TTL]", MACHINE_IS_SKELETON)
//GAME(1973, spacrace, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Space Race [TTL]", MACHINE_IS_SKELETON)
//GAME(1974, touchme, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Touch-Me [TTL]", MACHINE_IS_SKELETON) //?
//GAME(1974, worldcup, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "World Cup/World Cup Football [TTL]", MACHINE_IS_SKELETON)
diff --git a/src/mame/drivers/atetris.cpp b/src/mame/drivers/atetris.cpp
index 1b9d58ee07d..82b98b17fea 100644
--- a/src/mame/drivers/atetris.cpp
+++ b/src/mame/drivers/atetris.cpp
@@ -242,10 +242,10 @@ READ8_MEMBER(atetris_mcu_state::mcu_bus_r)
switch (m_mcu->p2_r() & 0xf0)
{
case 0x40:
- return m_soundlatch[1]->read(space, 0);
+ return m_soundlatch[1]->read();
case 0xf0:
- return m_soundlatch[0]->read(space, 0);
+ return m_soundlatch[0]->read();
default:
return 0xff;
@@ -261,8 +261,8 @@ WRITE8_MEMBER(atetris_mcu_state::mcu_p2_w)
WRITE8_MEMBER(atetris_mcu_state::mcu_reg_w)
{
// FIXME: a lot of sound writes seem to get lost this way; why doesn't that hurt?
- m_soundlatch[0]->write(space, 0, offset | 0x20);
- m_soundlatch[1]->write(space, 0, data);
+ m_soundlatch[0]->write(offset | 0x20);
+ m_soundlatch[1]->write(data);
}
diff --git a/src/mame/drivers/atm.cpp b/src/mame/drivers/atm.cpp
index f75c0f69974..99c9ffe7a0f 100644
--- a/src/mame/drivers/atm.cpp
+++ b/src/mame/drivers/atm.cpp
@@ -187,13 +187,14 @@ static GFXDECODE_START( gfx_atmtb2 )
GFXDECODE_END
-MACHINE_CONFIG_START(atm_state::atm)
+void atm_state::atm(machine_config &config)
+{
spectrum_128(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(atm_mem)
- MCFG_DEVICE_IO_MAP(atm_io)
- MCFG_DEVICE_OPCODES_MAP(atm_switch)
+ m_maincpu->set_addrmap(AS_PROGRAM, &atm_state::atm_mem);
+ m_maincpu->set_addrmap(AS_IO, &atm_state::atm_io);
+ m_maincpu->set_addrmap(AS_OPCODES, &atm_state::atm_switch);
+
MCFG_MACHINE_RESET_OVERRIDE(atm_state, atm )
BETA_DISK(config, m_beta, 0);
@@ -201,7 +202,7 @@ MACHINE_CONFIG_START(atm_state::atm)
subdevice<gfxdecode_device>("gfxdecode")->set_info(gfx_atm);
config.device_remove("exp");
-MACHINE_CONFIG_END
+}
void atm_state::atmtb2(machine_config &config)
{
diff --git a/src/mame/drivers/atom.cpp b/src/mame/drivers/atom.cpp
index 4d89b77cf24..5a46cf62aaa 100644
--- a/src/mame/drivers/atom.cpp
+++ b/src/mame/drivers/atom.cpp
@@ -710,8 +710,8 @@ FLOPPY_FORMATS_END0
MACHINE_CONFIG_START(atom_state::atom)
/* basic machine hardware */
- MCFG_DEVICE_ADD(SY6502_TAG, M6502, X2/4)
- MCFG_DEVICE_PROGRAM_MAP(atom_mem)
+ M6502(config, m_maincpu, X2/4);
+ m_maincpu->set_addrmap(AS_PROGRAM, &atom_state::atom_mem);
/* video hardware */
SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER);
@@ -722,8 +722,7 @@ MACHINE_CONFIG_START(atom_state::atom)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
+ SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 1.00);
/* devices */
TIMER(config, "hz2400").configure_periodic(FUNC(atom_state::cassette_output_tick), attotime::from_hz(4806));
@@ -784,8 +783,7 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(atomeb_state::atomeb)
atom(config);
- MCFG_DEVICE_MODIFY(SY6502_TAG)
- MCFG_DEVICE_PROGRAM_MAP(atomeb_mem)
+ m_maincpu->set_addrmap(AS_PROGRAM, &atomeb_state::atomeb_mem);
/* cartridges */
config.device_remove("cartslot");
@@ -866,11 +864,11 @@ void atom_state::atombb(machine_config &config)
MACHINE_DRIVER( prophet2 )
-------------------------------------------------*/
-//static MACHINE_CONFIG_START( prophet2 )
+//void atom_state::prophet2(machine_config &config)
+//{
// atom(config);
// /* basic machine hardware */
-// MCFG_DEVICE_MODIFY(SY6502_TAG)
-// MCFG_DEVICE_PROGRAM_MAP(prophet_mem)
+// m_maincpu->set_addrmap(AS_PROGRAM, &atom_state::prophet_mem);
//
// /* fdc */
// config.device_remove(I8271_TAG);
@@ -878,31 +876,29 @@ void atom_state::atombb(machine_config &config)
// config.device_remove(I8271_TAG ":1");
//
// /* internal ram */
-// MCFG_RAM_MODIFY(RAM_TAG)
-// MCFG_RAM_DEFAULT_SIZE("32K")
+// subdevice<ram_device>(RAM_TAG)->set_default_size("32K");
// /* Software lists */
// config.device_remove("rom_list");
// config.device_remove("flop_list");
-//MACHINE_CONFIG_END
+//}
/*-------------------------------------------------
MACHINE_DRIVER( prophet3 )
-------------------------------------------------*/
-//static MACHINE_CONFIG_START( prophet3 )
+//void atom_state::prophet3(machine_config &config)
+//{
// atom(config);
// /* basic machine hardware */
-// MCFG_DEVICE_MODIFY(SY6502_TAG)
-// MCFG_DEVICE_PROGRAM_MAP(prophet_mem)
+// m_maincpu->set_addrmap(AS_PROGRAM, &atom_state::prophet_mem);
//
// /* internal ram */
-// MCFG_RAM_MODIFY(RAM_TAG)
-// MCFG_RAM_DEFAULT_SIZE("32K")
+// subdevice<ram_device>(RAM_TAG)->set_default_size("32K");
// /* Software lists */
// config.device_remove("rom_list");
-//MACHINE_CONFIG_END
+//}
/*-------------------------------------------------
MACHINE_DRIVER( atommc )
diff --git a/src/mame/drivers/atronic.cpp b/src/mame/drivers/atronic.cpp
index f198a5e0e23..76f28412ad7 100644
--- a/src/mame/drivers/atronic.cpp
+++ b/src/mame/drivers/atronic.cpp
@@ -65,24 +65,24 @@ static INPUT_PORTS_START( atronic )
INPUT_PORTS_END
-MACHINE_CONFIG_START(atronic_state::atronic)
+void atronic_state::atronic(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z180, 6000000)
- MCFG_DEVICE_PROGRAM_MAP(atronic_map)
- MCFG_DEVICE_IO_MAP(atronic_portmap)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", atronic_state, irq0_line_hold)
-
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
- MCFG_SCREEN_UPDATE_DRIVER(atronic_state, screen_update)
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_PALETTE_ADD("palette", 8)
-
-MACHINE_CONFIG_END
+ Z180(config, m_maincpu, 6000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &atronic_state::atronic_map);
+ m_maincpu->set_addrmap(AS_IO, &atronic_state::atronic_portmap);
+ m_maincpu->set_vblank_int("screen", FUNC(atronic_state::irq0_line_hold));
+
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500));
+ screen.set_screen_update(FUNC(atronic_state::screen_update));
+ screen.set_size(32*8, 32*8);
+ screen.set_visarea_full();
+ screen.set_palette("palette");
+
+ PALETTE(config, "palette").set_entries(8);
+}
ROM_START( atronic )
diff --git a/src/mame/drivers/avalnche.cpp b/src/mame/drivers/avalnche.cpp
index 2789147e5b1..4782401e76e 100644
--- a/src/mame/drivers/avalnche.cpp
+++ b/src/mame/drivers/avalnche.cpp
@@ -215,12 +215,12 @@ void avalnche_state::machine_start()
save_item(NAME(m_avalance_video_inverted));
}
-MACHINE_CONFIG_START(avalnche_state::avalnche_base)
-
+void avalnche_state::avalnche_base(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M6502, 12.096_MHz_XTAL / 16) /* clock input is the "2H" signal divided by two */
- MCFG_DEVICE_PROGRAM_MAP(main_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(avalnche_state, nmi_line_pulse, 8*60)
+ M6502(config, m_maincpu, 12.096_MHz_XTAL / 16); /* clock input is the "2H" signal divided by two */
+ m_maincpu->set_addrmap(AS_PROGRAM, &avalnche_state::main_map);
+ m_maincpu->set_periodic_int(FUNC(avalnche_state::nmi_line_pulse), attotime::from_hz(8*60));
F9334(config, m_latch); // F8
m_latch->q_out_cb<0>().set_output("led0"); // 1 CREDIT LAMP
@@ -232,27 +232,28 @@ MACHINE_CONFIG_START(avalnche_state::avalnche_base)
WATCHDOG_TIMER(config, "watchdog");
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(12.096_MHz_XTAL / 2, 384, 0, 256, 262, 16, 256)
- MCFG_SCREEN_UPDATE_DRIVER(avalnche_state, screen_update_avalnche)
-MACHINE_CONFIG_END
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(12.096_MHz_XTAL / 2, 384, 0, 256, 262, 16, 256);
+ screen.set_screen_update(FUNC(avalnche_state::screen_update_avalnche));
+}
-MACHINE_CONFIG_START(avalnche_state::avalnche)
+void avalnche_state::avalnche(machine_config &config)
+{
avalnche_base(config);
/* sound hardware */
avalnche_sound(config);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(avalnche_state::acatch)
+void avalnche_state::acatch(machine_config &config)
+{
avalnche_base(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(catch_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &avalnche_state::catch_map);
/* sound hardware... */
acatch_sound(config);
-MACHINE_CONFIG_END
+}
/*************************************
diff --git a/src/mame/drivers/ave_arb.cpp b/src/mame/drivers/ave_arb.cpp
index 3ca879b461f..638c5533549 100644
--- a/src/mame/drivers/ave_arb.cpp
+++ b/src/mame/drivers/ave_arb.cpp
@@ -8,6 +8,9 @@
AVE Micro Systems ARB chess computer driver, in some regions redistributed
by Chafitz, and in Germany by Sandy Electronic.
+TODO:
+- verify gms40 module memory layout
+
*******************************************************************************
Auto Response Board (ARB) overview:
@@ -24,16 +27,21 @@ Known modules (*denotes not dumped yet):
- Sargon 2.5
- *Grand Master Series 3
- *Grand Master Series 3.5
-- *Grand Master Series 4.0
+- Grand Master Series 4.0
Newer modules included button label stickers for OPTIONS, Verify, Take Back, Clear.
+Around 2012, Steve Braid(aka Trilobyte/Steve UK) started manufacturing ARB V2 boards
+without a module slot. CPU and VIA were replaced with new WDC 14MHz-rated chips,
+running at 16MHz.
+
******************************************************************************/
#include "emu.h"
#include "includes/chessbase.h"
#include "cpu/m6502/m6502.h"
+#include "cpu/m6502/m65c02.h"
#include "machine/6522via.h"
#include "machine/nvram.h"
#include "sound/dac.h"
@@ -67,16 +75,18 @@ public:
// machine drivers
void arb(machine_config &config);
+ void v2(machine_config &config);
private:
// devices/pointers
required_device<cpu_device> m_maincpu;
required_device<via6522_device> m_via;
required_device<dac_bit_interface> m_dac;
- required_device<generic_slot_device> m_cart;
+ optional_device<generic_slot_device> m_cart;
// address maps
void main_map(address_map &map);
+ void v2_map(address_map &map);
// cartridge
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cartridge);
@@ -172,6 +182,13 @@ void arb_state::main_map(address_map &map)
map(0x8000, 0x800f).mirror(0x1ff0).rw(m_via, FUNC(via6522_device::read), FUNC(via6522_device::write));
}
+void arb_state::v2_map(address_map &map)
+{
+ map(0x0000, 0x7fff).ram().share("nvram"); // BS62LV256
+ map(0x8000, 0x800f).mirror(0x1ff0).rw(m_via, FUNC(via6522_device::read), FUNC(via6522_device::write));
+ map(0xa000, 0xffff).rom();
+}
+
/******************************************************************************
@@ -202,13 +219,13 @@ INPUT_PORTS_END
Machine Drivers
******************************************************************************/
-void arb_state::arb(machine_config &config)
+void arb_state::v2(machine_config &config)
{
/* basic machine hardware */
- M6502(config, m_maincpu, 4_MHz_XTAL/2);
- m_maincpu->set_addrmap(AS_PROGRAM, &arb_state::main_map);
+ M65C02(config, m_maincpu, 16_MHz_XTAL); // W65C02S6TPG-14
+ m_maincpu->set_addrmap(AS_PROGRAM, &arb_state::v2_map);
- VIA6522(config, m_via, 4_MHz_XTAL/4);
+ VIA6522(config, m_via, 16_MHz_XTAL); // W65C22S6TPG-14
m_via->writepa_handler().set(FUNC(arb_state::leds_w));
m_via->writepb_handler().set(FUNC(arb_state::control_w));
m_via->readpa_handler().set(FUNC(arb_state::input_r));
@@ -223,6 +240,17 @@ void arb_state::arb(machine_config &config)
SPEAKER(config, "speaker").front_center();
DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25);
VOLTAGE_REGULATOR(config, "vref").add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
+}
+
+void arb_state::arb(machine_config &config)
+{
+ v2(config);
+
+ /* basic machine hardware */
+ M6502(config.replace(), m_maincpu, 4_MHz_XTAL/2); // R6502P
+ m_maincpu->set_addrmap(AS_PROGRAM, &arb_state::main_map);
+
+ m_via->set_clock(4_MHz_XTAL/4); // R6522P
/* cartridge */
GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "arb", "bin");
@@ -243,6 +271,11 @@ ROM_START( arb )
// none here, it's in the module slot
ROM_END
+ROM_START( arbv2 )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "sargon_4.0", 0x0000, 0x10000, CRC(c519c9e8) SHA1(d7597d50c0f4f9aa6d990c8d3b485e39cb44ff06) ) // AT27C512R
+ROM_END
+
} // anonymous namespace
@@ -251,5 +284,6 @@ ROM_END
Drivers
******************************************************************************/
-/* YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS */
-CONS( 1980, arb, 0, 0, arb, arb, arb_state, empty_init, "AVE Micro Systems", "Auto Response Board", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
+/* YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS */
+CONS( 1980, arb, 0, 0, arb, arb, arb_state, empty_init, "AVE Micro Systems", "Auto Response Board", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
+CONS( 2012, arbv2, arb, 0, v2, arb, arb_state, empty_init, "hack (Steve Braid)", "ARB V2 Sargon 4.0", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
diff --git a/src/mame/drivers/avigo.cpp b/src/mame/drivers/avigo.cpp
index d916f462b86..c9984604763 100644
--- a/src/mame/drivers/avigo.cpp
+++ b/src/mame/drivers/avigo.cpp
@@ -751,9 +751,9 @@ void avigo_state::nvram_init(nvram_device &nvram, void *base, size_t size)
MACHINE_CONFIG_START(avigo_state::avigo)
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 4000000)
- MCFG_DEVICE_PROGRAM_MAP(avigo_mem)
- MCFG_DEVICE_IO_MAP(avigo_io)
+ Z80(config, m_maincpu, 4000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &avigo_state::avigo_mem);
+ m_maincpu->set_addrmap(AS_IO, &avigo_state::avigo_io);
config.m_minimum_quantum = attotime::from_hz(60);
NS16550(config, m_uart, XTAL(1'843'200));
@@ -770,13 +770,13 @@ MACHINE_CONFIG_START(avigo_state::avigo)
m_serport->cts_handler().set(m_uart, FUNC(ins8250_uart_device::cts_w));
/* video hardware */
- MCFG_SCREEN_ADD("screen", LCD)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_UPDATE_DRIVER(avigo_state, screen_update)
- MCFG_SCREEN_SIZE(AVIGO_SCREEN_WIDTH, AVIGO_SCREEN_HEIGHT + AVIGO_PANEL_HEIGHT)
- MCFG_SCREEN_VISIBLE_AREA(0, AVIGO_SCREEN_WIDTH-1, 0, AVIGO_SCREEN_HEIGHT + AVIGO_PANEL_HEIGHT -1)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_screen_update(FUNC(avigo_state::screen_update));
+ screen.set_size(AVIGO_SCREEN_WIDTH, AVIGO_SCREEN_HEIGHT + AVIGO_PANEL_HEIGHT);
+ screen.set_visarea_full();
+ screen.set_palette(m_palette);
config.set_default_layout(layout_avigo);
diff --git a/src/mame/drivers/avt.cpp b/src/mame/drivers/avt.cpp
index a361afe730e..2fca9828c07 100644
--- a/src/mame/drivers/avt.cpp
+++ b/src/mame/drivers/avt.cpp
@@ -956,7 +956,8 @@ WRITE_LINE_MEMBER( avt_state::avtbingo_w )
m_pio0->port_b_write(ioport("IN0")->read());
}
-MACHINE_CONFIG_START(avt_state::avt)
+void avt_state::avt(machine_config &config)
+{
/* basic machine hardware */
Z80(config, m_maincpu, CPU_CLOCK); /* guess */
m_maincpu->set_daisy_config(daisy_chain);
@@ -964,13 +965,13 @@ MACHINE_CONFIG_START(avt_state::avt)
m_maincpu->set_addrmap(AS_IO, &avt_state::avt_portmap);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1) /* 240x224 (through CRTC) */
- MCFG_SCREEN_UPDATE_DRIVER(avt_state, screen_update_avt)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(32*8, 32*8);
+ screen.set_visarea_full(); /* 240x224 (through CRTC) */
+ screen.set_screen_update(FUNC(avt_state::screen_update_avt));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_avt);
PALETTE(config, m_palette, FUNC(avt_state::avt_palette), 8*16);
@@ -1004,7 +1005,7 @@ MACHINE_CONFIG_START(avt_state::avt)
// PORT A d0-d7 = TP13,TP12,TP11,TP10,TP8,TP7,TP5,TP3
// PORT B d0-d7 = "Player2", DCOM, CCOM, BCOM, ACOM, LOCKOUT/TP6, TP4, 50/60HZ (held high, jumper on JP13 grounds it)
// DCOM,CCOM,BCOM,ACOM appear to be muxes
-MACHINE_CONFIG_END
+}
// Leave avtnfl as it was until more is learnt.
WRITE_LINE_MEMBER( avt_state::avtnfl_w )
diff --git a/src/mame/drivers/aztarac.cpp b/src/mame/drivers/aztarac.cpp
index 3da54644eb7..65b66adb159 100644
--- a/src/mame/drivers/aztarac.cpp
+++ b/src/mame/drivers/aztarac.cpp
@@ -149,17 +149,17 @@ INPUT_PORTS_END
*
*************************************/
-MACHINE_CONFIG_START(aztarac_state::aztarac)
-
+void aztarac_state::aztarac(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, 8000000)
- MCFG_DEVICE_PROGRAM_MAP(main_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", aztarac_state, irq4_line_hold)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(aztarac_state, irq_callback)
+ M68000(config, m_maincpu, 8000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &aztarac_state::main_map);
+ m_maincpu->set_vblank_int("screen", FUNC(aztarac_state::irq4_line_hold));
+ m_maincpu->set_irq_acknowledge_callback(FUNC(aztarac_state::irq_callback));
- MCFG_DEVICE_ADD("audiocpu", Z80, 2000000)
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(aztarac_state, snd_timed_irq, 100)
+ Z80(config, m_audiocpu, 2000000);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &aztarac_state::sound_map);
+ m_audiocpu->set_periodic_int(FUNC(aztarac_state::snd_timed_irq), attotime::from_hz(100));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1);
@@ -167,11 +167,11 @@ MACHINE_CONFIG_START(aztarac_state::aztarac)
/* video hardware */
VECTOR(config, m_vector, 0);
- MCFG_SCREEN_ADD("screen", VECTOR)
- MCFG_SCREEN_REFRESH_RATE(40)
- MCFG_SCREEN_SIZE(400, 300)
- MCFG_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 768-1)
- MCFG_SCREEN_UPDATE_DEVICE("vector", vector_device, screen_update)
+ SCREEN(config, m_screen, SCREEN_TYPE_VECTOR);
+ m_screen->set_refresh_hz(40);
+ m_screen->set_size(400, 300);
+ m_screen->set_visarea(0, 1024-1, 0, 768-1);
+ m_screen->set_screen_update("vector", FUNC(vector_device::screen_update));
/* sound hardware */
@@ -186,7 +186,7 @@ MACHINE_CONFIG_START(aztarac_state::aztarac)
AY8910(config, "ay3", 2000000).add_route(ALL_OUTPUTS, "mono", 0.15);
AY8910(config, "ay4", 2000000).add_route(ALL_OUTPUTS, "mono", 0.15);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/b16.cpp b/src/mame/drivers/b16.cpp
index f434bbb48e9..343c4eaf055 100644
--- a/src/mame/drivers/b16.cpp
+++ b/src/mame/drivers/b16.cpp
@@ -266,20 +266,21 @@ WRITE8_MEMBER(b16_state::memory_write_byte)
}
-MACHINE_CONFIG_START(b16_state::b16)
+void b16_state::b16(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD(m_maincpu, I8086, XTAL(14'318'181)/2) //unknown xtal
- MCFG_DEVICE_PROGRAM_MAP(b16_map)
- MCFG_DEVICE_IO_MAP(b16_io)
+ I8086(config, m_maincpu, XTAL(14'318'181)/2); //unknown xtal
+ m_maincpu->set_addrmap(AS_PROGRAM, &b16_state::b16_map);
+ m_maincpu->set_addrmap(AS_IO, &b16_state::b16_io);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_UPDATE_DRIVER(b16_state, screen_update)
- MCFG_SCREEN_SIZE(640, 400)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 400-1)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_screen_update(FUNC(b16_state::screen_update));
+ screen.set_size(640, 400);
+ screen.set_visarea_full();
+ screen.set_palette(m_palette);
H46505(config, m_mc6845, XTAL(14'318'181)/5); /* unknown clock, hand tuned to get ~60 fps */
m_mc6845->set_screen("screen");
@@ -291,10 +292,9 @@ MACHINE_CONFIG_START(b16_state::b16)
m_dma8237->out_memw_callback().set(FUNC(b16_state::memory_write_byte));
GFXDECODE(config, m_gfxdecode, m_palette, gfx_b16);
- MCFG_PALETTE_ADD(m_palette, 8)
+ PALETTE(config, m_palette).set_entries(8);
// MCFG_PALETTE_INIT_STANDARD(black_and_white) // TODO
-
-MACHINE_CONFIG_END
+}
/* ROM definition */
ROM_START( b16 )
diff --git a/src/mame/drivers/b2m.cpp b/src/mame/drivers/b2m.cpp
index 6aebb124f2c..2312cc3a958 100644
--- a/src/mame/drivers/b2m.cpp
+++ b/src/mame/drivers/b2m.cpp
@@ -187,22 +187,23 @@ static void b2m_floppies(device_slot_interface &device)
/* Machine driver */
-MACHINE_CONFIG_START(b2m_state::b2m)
+void b2m_state::b2m(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", I8080, 2000000)
- MCFG_DEVICE_PROGRAM_MAP(b2m_mem)
- MCFG_DEVICE_IO_MAP(b2m_io)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", b2m_state, b2m_vblank_interrupt)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("pic8259", pic8259_device, inta_cb)
+ I8080(config, m_maincpu, 2000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &b2m_state::b2m_mem);
+ m_maincpu->set_addrmap(AS_IO, &b2m_state::b2m_io);
+ m_maincpu->set_vblank_int("screen", FUNC(b2m_state::b2m_vblank_interrupt));
+ m_maincpu->set_irq_acknowledge_callback("pic8259", FUNC(pic8259_device::inta_cb));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(384, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 384-1, 0, 256-1)
- MCFG_SCREEN_UPDATE_DRIVER(b2m_state, screen_update_b2m)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_size(384, 256);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(b2m_state::screen_update_b2m));
+ screen.set_palette(m_palette);
PALETTE(config, m_palette, FUNC(b2m_state::b2m_palette), 4);
@@ -233,11 +234,10 @@ MACHINE_CONFIG_START(b2m_state::b2m)
/* sound */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
+ SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
/* uart */
- MCFG_DEVICE_ADD("uart", I8251, 0)
+ I8251(config, "uart", 0);
FD1793(config, m_fdc, 8_MHz_XTAL / 8);
m_fdc->drq_wr_callback().set(FUNC(b2m_state::b2m_fdc_drq));
@@ -248,13 +248,13 @@ MACHINE_CONFIG_START(b2m_state::b2m)
/* internal ram */
RAM(config, RAM_TAG).set_default_size("128K").set_default_value(0x00);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(b2m_state::b2mrom)
+void b2m_state::b2mrom(machine_config &config)
+{
b2m(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_IO_MAP(b2m_rom_io)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_IO, &b2m_state::b2m_rom_io);
+}
/* ROM definition */
diff --git a/src/mame/drivers/backfire.cpp b/src/mame/drivers/backfire.cpp
index 443da670dd9..a123d45916f 100644
--- a/src/mame/drivers/backfire.cpp
+++ b/src/mame/drivers/backfire.cpp
@@ -362,11 +362,11 @@ void backfire_state::machine_start()
{
}
-MACHINE_CONFIG_START(backfire_state::backfire)
-
+void backfire_state::backfire(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", ARM, 28000000/4) /* Unconfirmed */
- MCFG_DEVICE_PROGRAM_MAP(backfire_map)
+ ARM(config, m_maincpu, 28000000/4); /* Unconfirmed */
+ m_maincpu->set_addrmap(AS_PROGRAM, &backfire_state::backfire_map);
EEPROM_93C46_16BIT(config, "eeprom");
@@ -380,26 +380,25 @@ MACHINE_CONFIG_START(backfire_state::backfire)
GFXDECODE(config, "gfxdecode", m_palette, gfx_backfire);
config.set_default_layout(layout_dualhsxs);
- MCFG_SCREEN_ADD("lscreen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(40*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(backfire_state, screen_update_left)
- MCFG_SCREEN_PALETTE(m_palette)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, backfire_state, vbl_interrupt))
-
- MCFG_SCREEN_ADD("rscreen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(40*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(backfire_state, screen_update_right)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_lscreen, SCREEN_TYPE_RASTER);
+ m_lscreen->set_refresh_hz(60);
+ m_lscreen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ m_lscreen->set_size(40*8, 32*8);
+ m_lscreen->set_visarea(0*8, 40*8-1, 1*8, 31*8-1);
+ m_lscreen->set_screen_update(FUNC(backfire_state::screen_update_left));
+ m_lscreen->set_palette(m_palette);
+ m_lscreen->screen_vblank().set(FUNC(backfire_state::vbl_interrupt));
+
+ screen_device &rscreen(SCREEN(config, "rscreen", SCREEN_TYPE_RASTER));
+ rscreen.set_refresh_hz(60);
+ rscreen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ rscreen.set_size(40*8, 32*8);
+ rscreen.set_visarea(0*8, 40*8-1, 1*8, 31*8-1);
+ rscreen.set_screen_update(FUNC(backfire_state::screen_update_right));
+ rscreen.set_palette(m_palette);
DECO16IC(config, m_deco_tilegen[0], 0);
m_deco_tilegen[0]->set_screen(m_lscreen);
- m_deco_tilegen[0]->set_split(0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
@@ -416,7 +415,6 @@ MACHINE_CONFIG_START(backfire_state::backfire)
DECO16IC(config, m_deco_tilegen[1], 0);
m_deco_tilegen[1]->set_screen(m_lscreen);
- m_deco_tilegen[1]->set_split(0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
@@ -447,10 +445,10 @@ MACHINE_CONFIG_START(backfire_state::backfire)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("ymz", YMZ280B, 28000000 / 2)
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
-MACHINE_CONFIG_END
+ ymz280b_device &ymz(YMZ280B(config, "ymz", 28000000 / 2));
+ ymz.add_route(0, "lspeaker", 1.0);
+ ymz.add_route(1, "rspeaker", 1.0);
+}
/*
diff --git a/src/mame/drivers/badlands.cpp b/src/mame/drivers/badlands.cpp
index c31031e750c..d2d51288124 100644
--- a/src/mame/drivers/badlands.cpp
+++ b/src/mame/drivers/badlands.cpp
@@ -440,15 +440,15 @@ GFXDECODE_END
*
*************************************/
-MACHINE_CONFIG_START(badlands_state::badlands)
-
+void badlands_state::badlands(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, ATARI_CLOCK_14MHz/2)
- MCFG_DEVICE_PROGRAM_MAP(main_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", badlands_state, vblank_int)
+ M68000(config, m_maincpu, ATARI_CLOCK_14MHz/2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &badlands_state::main_map);
+ m_maincpu->set_vblank_int("screen", FUNC(badlands_state::vblank_int));
- MCFG_DEVICE_ADD("audiocpu", M6502, ATARI_CLOCK_14MHz/8)
- MCFG_DEVICE_PROGRAM_MAP(audio_map)
+ M6502(config, m_audiocpu, ATARI_CLOCK_14MHz/8);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &badlands_state::audio_map);
TIMER(config, "scantimer").configure_scanline(FUNC(badlands_state::sound_scanline), "screen", 0, 1);
MCFG_MACHINE_START_OVERRIDE(badlands_state,badlands)
@@ -464,18 +464,18 @@ MACHINE_CONFIG_START(badlands_state::badlands)
palette.set_format(palette_device::IRGB_1555, 256);
palette.set_membits(8);
- MCFG_TILEMAP_ADD_STANDARD("playfield", "gfxdecode", 2, badlands_state, get_playfield_tile_info, 8,8, SCAN_ROWS, 64,32)
+ TILEMAP(config, m_playfield_tilemap, m_gfxdecode, 2, 8,8, TILEMAP_SCAN_ROWS, 64,32).set_info_callback(FUNC(badlands_state::get_playfield_tile_info));
ATARI_MOTION_OBJECTS(config, m_mob, 0, m_screen, badlands_state::s_mob_config);
m_mob->set_gfxdecode(m_gfxdecode);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
/* note: these parameters are from published specs, not derived */
/* the board uses an SOS-2 chip to generate video signals */
- MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240)
- MCFG_SCREEN_UPDATE_DRIVER(badlands_state, screen_update_badlands)
- MCFG_SCREEN_PALETTE("palette")
+ m_screen->set_raw(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240);
+ m_screen->set_screen_update(FUNC(badlands_state::screen_update_badlands));
+ m_screen->set_palette("palette");
MCFG_VIDEO_START_OVERRIDE(badlands_state,badlands)
@@ -485,7 +485,7 @@ MACHINE_CONFIG_START(badlands_state::badlands)
SPEAKER(config, "mono").front_center();
YM2151(config, "ymsnd", ATARI_CLOCK_14MHz/4).add_route(0, "mono", 0.30).add_route(1, "mono", 0.30);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/badlandsbl.cpp b/src/mame/drivers/badlandsbl.cpp
index 4de71b6a8dc..fc49343a059 100644
--- a/src/mame/drivers/badlandsbl.cpp
+++ b/src/mame/drivers/badlandsbl.cpp
@@ -218,15 +218,15 @@ TIMER_DEVICE_CALLBACK_MEMBER(badlandsbl_state::bootleg_sound_scanline)
m_audiocpu->set_input_line(0, HOLD_LINE);
}
-MACHINE_CONFIG_START(badlandsbl_state::badlandsb)
-
+void badlandsbl_state::badlandsb(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(28'000'000)/4) /* Divisor estimated */
- MCFG_DEVICE_PROGRAM_MAP(bootleg_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", badlandsbl_state, irq1_line_hold) //vblank_int)
+ M68000(config, m_maincpu, XTAL(28'000'000)/4); /* Divisor estimated */
+ m_maincpu->set_addrmap(AS_PROGRAM, &badlandsbl_state::bootleg_map);
+ m_maincpu->set_vblank_int("screen", FUNC(badlandsbl_state::irq1_line_hold)); //vblank_int)
- MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(20'000'000)/12) /* Divisor estimated */
- MCFG_DEVICE_PROGRAM_MAP(bootleg_audio_map)
+ Z80(config, m_audiocpu, XTAL(20'000'000)/12); /* Divisor estimated */
+ m_audiocpu->set_addrmap(AS_PROGRAM, &badlandsbl_state::bootleg_audio_map);
TIMER(config, "scantimer").configure_scanline(FUNC(badlandsbl_state::bootleg_sound_scanline), "screen", 0, 1);
// config.m_perfect_cpu_quantum = subtag("maincpu");
@@ -241,18 +241,18 @@ MACHINE_CONFIG_START(badlandsbl_state::badlandsb)
palette.set_format(palette_device::IRGB_1555, 256);
palette.set_membits(8);
- MCFG_TILEMAP_ADD_STANDARD("playfield", "gfxdecode", 2, badlands_state, get_playfield_tile_info, 8,8, SCAN_ROWS, 64,32)
+ TILEMAP(config, m_playfield_tilemap, m_gfxdecode, 2, 8,8, TILEMAP_SCAN_ROWS, 64,32).set_info_callback(FUNC(badlands_state::get_playfield_tile_info));
// ATARI_MOTION_OBJECTS(config, m_mob, 0, m_screen, badlands_state::s_mob_config);
// m_mob->set_gfxdecode(m_gfxdecode);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
/* note: these parameters are from published specs, not derived */
/* the board uses an SOS-2 chip to generate video signals */
- MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240)
- MCFG_SCREEN_UPDATE_DRIVER(badlandsbl_state, screen_update_badlandsbl)
- MCFG_SCREEN_PALETTE("palette")
+ m_screen->set_raw(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240);
+ m_screen->set_screen_update(FUNC(badlandsbl_state::screen_update_badlandsbl));
+ m_screen->set_palette("palette");
MCFG_VIDEO_START_OVERRIDE(badlands_state,badlands)
@@ -260,7 +260,7 @@ MACHINE_CONFIG_START(badlandsbl_state::badlandsb)
SPEAKER(config, "mono").front_center();
YM2151(config, "ymsnd", XTAL(20'000'000)/8).add_route(0, "mono", 0.30).add_route(1, "mono", 0.30); /* Divisor estimated */
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/bailey.cpp b/src/mame/drivers/bailey.cpp
index 4307c565800..e77823ba5de 100644
--- a/src/mame/drivers/bailey.cpp
+++ b/src/mame/drivers/bailey.cpp
@@ -88,11 +88,11 @@ void bailey_state::video_start()
{
}
-MACHINE_CONFIG_START(bailey_state::bailey)
-
+void bailey_state::bailey(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, NETLIST_CLOCK)
- MCFG_NETLIST_SETUP(bailey)
+ NETLIST_CPU(config, m_maincpu, NETLIST_CLOCK);
+ m_maincpu->set_constructor(netlist_bailey);
/* video hardware */
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
@@ -102,7 +102,7 @@ MACHINE_CONFIG_START(bailey_state::bailey)
m_video->set_vert_params(V_TOTAL-22,V_TOTAL-19,V_TOTAL-12,V_TOTAL);
m_video->set_fieldcount(1);
m_video->set_threshold(0.30);
-MACHINE_CONFIG_END
+}
/***************************************************************************
diff --git a/src/mame/drivers/banctec.cpp b/src/mame/drivers/banctec.cpp
index 7162aac96f7..5daea29a7ac 100644
--- a/src/mame/drivers/banctec.cpp
+++ b/src/mame/drivers/banctec.cpp
@@ -136,24 +136,25 @@ static GFXDECODE_START( gfx_banctec )
GFXDECODE_ENTRY( "chargen", 0x00000, banctec_gfx_layout, 0, 1 )
GFXDECODE_END
-MACHINE_CONFIG_START(banctec_state::banctec)
+void banctec_state::banctec(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", I80C31, XTAL(11'059'200))
- MCFG_DEVICE_PROGRAM_MAP(banctec_mem)
+ I80C31(config, m_maincpu, XTAL(11'059'200));
+ m_maincpu->set_addrmap(AS_PROGRAM, &banctec_state::banctec_mem);
- MCFG_DEVICE_ADD("mcu", M6803, 4000000) /* Actual MCU is a Motorola 6803 and the clock frequency is still unknown */
- MCFG_DEVICE_PROGRAM_MAP(banctec_mcu_mem)
+ m6803_cpu_device &mcu(M6803(config, "mcu", 4000000)); /* Actual MCU is a Motorola 6803 and the clock frequency is still unknown */
+ mcu.set_addrmap(AS_PROGRAM, &banctec_state::banctec_mcu_mem);
// The video signal is generated by a R6545EAP character generator chip
// The U20 EPROM holds the image data for the character set.
// video hardware
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_SIZE((52+1)*8, (31+1)*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 25*8-1)
- MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_size((52+1)*8, (31+1)*8);
+ screen.set_visarea(0*8, 40*8-1, 0*8, 25*8-1);
+ screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update));
PALETTE(config, m_palette, palette_device::MONOCHROME);
GFXDECODE(config, "gfxdecode", m_palette, gfx_banctec);
@@ -163,7 +164,7 @@ MACHINE_CONFIG_START(banctec_state::banctec)
crtc.set_char_width(8);
crtc.set_update_row_callback(FUNC(banctec_state::crtc_update_row), this);
crtc.set_on_update_addr_change_callback(FUNC(banctec_state::crtc_addr), this);
-MACHINE_CONFIG_END
+}
ROM_START(banctec)
ROM_REGION(0x800, "maincpu", 0)
diff --git a/src/mame/drivers/bankp.cpp b/src/mame/drivers/bankp.cpp
index 35db3bbc218..843c6e9296e 100644
--- a/src/mame/drivers/bankp.cpp
+++ b/src/mame/drivers/bankp.cpp
@@ -293,20 +293,20 @@ INTERRUPT_GEN_MEMBER(bankp_state::vblank_irq)
device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
-MACHINE_CONFIG_START(bankp_state::bankp)
-
+void bankp_state::bankp(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, MASTER_CLOCK/6)
- MCFG_DEVICE_PROGRAM_MAP(bankp_map)
- MCFG_DEVICE_IO_MAP(bankp_io_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", bankp_state, vblank_irq)
+ Z80(config, m_maincpu, MASTER_CLOCK/6);
+ m_maincpu->set_addrmap(AS_PROGRAM, &bankp_state::bankp_map);
+ m_maincpu->set_addrmap(AS_IO, &bankp_state::bankp_io_map);
+ m_maincpu->set_vblank_int("screen", FUNC(bankp_state::vblank_irq));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART)
- MCFG_SCREEN_UPDATE_DRIVER(bankp_state, screen_update)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART);
+ screen.set_screen_update(FUNC(bankp_state::screen_update));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_bankp);
PALETTE(config, m_palette, FUNC(bankp_state::bankp_palette), 32*4+16*8, 32);
@@ -314,15 +314,12 @@ MACHINE_CONFIG_START(bankp_state::bankp)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("sn1", SN76489, MASTER_CLOCK/6)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ SN76489(config, "sn1", MASTER_CLOCK/6).add_route(ALL_OUTPUTS, "mono", 1.0);
- MCFG_DEVICE_ADD("sn2", SN76489, MASTER_CLOCK/6)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ SN76489(config, "sn2", MASTER_CLOCK/6).add_route(ALL_OUTPUTS, "mono", 1.0);
- MCFG_DEVICE_ADD("sn3", SN76489, MASTER_CLOCK/6)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
-MACHINE_CONFIG_END
+ SN76489(config, "sn3", MASTER_CLOCK/6).add_route(ALL_OUTPUTS, "mono", 1.0);
+}
diff --git a/src/mame/drivers/barata.cpp b/src/mame/drivers/barata.cpp
index 90e72d01e12..6e3e193ca05 100644
--- a/src/mame/drivers/barata.cpp
+++ b/src/mame/drivers/barata.cpp
@@ -307,7 +307,8 @@ READ8_MEMBER(barata_state::port2_r)
* Machine Drivers *
************************/
-MACHINE_CONFIG_START(barata_state::barata)
+void barata_state::barata(machine_config &config)
+{
/* basic machine hardware */
I8051(config, m_maincpu, CPU_CLOCK);
m_maincpu->port_out_cb<0>().set(FUNC(barata_state::port0_w));
@@ -322,7 +323,7 @@ MACHINE_CONFIG_START(barata_state::barata)
SPEAKER(config, "speaker").front_center();
/* TODO: add sound samples */
-MACHINE_CONFIG_END
+}
/*************************
* Rom Load *
diff --git a/src/mame/drivers/batman.cpp b/src/mame/drivers/batman.cpp
index efacf459faf..54f76b81007 100644
--- a/src/mame/drivers/batman.cpp
+++ b/src/mame/drivers/batman.cpp
@@ -183,11 +183,11 @@ GFXDECODE_END
*
*************************************/
-MACHINE_CONFIG_START(batman_state::batman)
-
+void batman_state::batman(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, ATARI_CLOCK_14MHz)
- MCFG_DEVICE_PROGRAM_MAP(main_map)
+ M68000(config, m_maincpu, ATARI_CLOCK_14MHz);
+ m_maincpu->set_addrmap(AS_PROGRAM, &batman_state::main_map);
EEPROM_2816(config, "eeprom").lock_after_write(true);
@@ -204,13 +204,13 @@ MACHINE_CONFIG_START(batman_state::batman)
TILEMAP(config, "vad:alpha", "gfxdecode", 2, 8, 8, TILEMAP_SCAN_ROWS, 64, 32, 0).set_info_callback(DEVICE_SELF_OWNER, FUNC(batman_state::get_alpha_tile_info));
ATARI_MOTION_OBJECTS(config, "vad:mob", 0, m_screen, batman_state::s_mob_config).set_gfxdecode("gfxdecode");
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
/* note: these parameters are from published specs, not derived */
/* the board uses a VAD chip to generate video signals */
- MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240)
- MCFG_SCREEN_UPDATE_DRIVER(batman_state, screen_update_batman)
- MCFG_SCREEN_PALETTE("palette")
+ m_screen->set_raw(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240);
+ m_screen->set_screen_update(FUNC(batman_state::screen_update_batman));
+ m_screen->set_palette("palette");
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -219,7 +219,7 @@ MACHINE_CONFIG_START(batman_state::batman)
m_jsa->main_int_cb().set_inputline(m_maincpu, M68K_IRQ_6);
m_jsa->test_read_cb().set_ioport("260010").bit(6);
m_jsa->add_route(ALL_OUTPUTS, "mono", 1.0);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/battlex.cpp b/src/mame/drivers/battlex.cpp
index 4896c37c772..da2d2a9f05d 100644
--- a/src/mame/drivers/battlex.cpp
+++ b/src/mame/drivers/battlex.cpp
@@ -291,42 +291,42 @@ void battlex_state::machine_reset()
m_in0_b4 = 0;
}
-MACHINE_CONFIG_START(battlex_state::battlex)
-
+void battlex_state::battlex(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80,XTAL(10'000'000)/4 ) // ?
- MCFG_DEVICE_PROGRAM_MAP(battlex_map)
- MCFG_DEVICE_IO_MAP(io_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(battlex_state, battlex_interrupt, 400) /* controls game speed? */
+ Z80(config, m_maincpu, XTAL(10'000'000)/4 ); // ?
+ m_maincpu->set_addrmap(AS_PROGRAM, &battlex_state::battlex_map);
+ m_maincpu->set_addrmap(AS_IO, &battlex_state::io_map);
+ m_maincpu->set_periodic_int(FUNC(battlex_state::battlex_interrupt), attotime::from_hz(400)); /* controls game speed? */
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(battlex_state, screen_update_battlex)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ 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);
+ screen.set_screen_update(FUNC(battlex_state::screen_update_battlex));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_battlex);
- MCFG_PALETTE_ADD("palette", 64 + 128)
+ PALETTE(config, m_palette).set_entries(64 + 128);
/* sound hardware */
SPEAKER(config, "mono").front_center();
AY8910(config, "ay1", XTAL(10'000'000)/8).add_route(ALL_OUTPUTS, "mono", 0.40); // ?
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(battlex_state::dodgeman)
+void battlex_state::dodgeman(machine_config &config)
+{
battlex(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_IO_MAP(dodgeman_io_map)
+ m_maincpu->set_addrmap(AS_IO, &battlex_state::dodgeman_io_map);
MCFG_VIDEO_START_OVERRIDE(battlex_state, dodgeman)
AY8910(config, "ay2", XTAL(10'000'000)/8).add_route(ALL_OUTPUTS, "mono", 0.40); // ?
-MACHINE_CONFIG_END
+}
/*************************************
diff --git a/src/mame/drivers/battlnts.cpp b/src/mame/drivers/battlnts.cpp
index 63108a148de..10af6e61f14 100644
--- a/src/mame/drivers/battlnts.cpp
+++ b/src/mame/drivers/battlnts.cpp
@@ -231,26 +231,26 @@ void battlnts_state::machine_reset()
m_spritebank = 0;
}
-MACHINE_CONFIG_START(battlnts_state::battlnts)
-
+void battlnts_state::battlnts(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", HD6309, XTAL(24'000'000) / 2 /* 3000000*4? */)
- MCFG_DEVICE_PROGRAM_MAP(battlnts_map)
+ HD6309(config, m_maincpu, XTAL(24'000'000) / 2 /* 3000000*4? */);
+ m_maincpu->set_addrmap(AS_PROGRAM, &battlnts_state::battlnts_map);
- MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(24'000'000) / 6 /* 3579545? */)
- MCFG_DEVICE_PROGRAM_MAP(battlnts_sound_map)
+ Z80(config, m_audiocpu, XTAL(24'000'000) / 6 /* 3579545? */);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &battlnts_state::battlnts_sound_map);
WATCHDOG_TIMER(config, "watchdog");
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(battlnts_state, screen_update_battlnts)
- MCFG_SCREEN_PALETTE("palette")
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, battlnts_state, vblank_irq))
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ 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);
+ screen.set_screen_update(FUNC(battlnts_state::screen_update_battlnts));
+ screen.set_palette("palette");
+ screen.screen_vblank().set(FUNC(battlnts_state::vblank_irq));
GFXDECODE(config, m_gfxdecode, "palette", gfx_battlnts);
PALETTE(config, "palette").set_format(palette_device::xBGR_555, 128);
@@ -270,12 +270,10 @@ MACHINE_CONFIG_START(battlnts_state::battlnts)
GENERIC_LATCH_8(config, "soundlatch");
- MCFG_DEVICE_ADD("ym1", YM3812, XTAL(24'000'000) / 8)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ YM3812(config, "ym1", XTAL(24'000'000) / 8).add_route(ALL_OUTPUTS, "mono", 1.0);
- MCFG_DEVICE_ADD("ym2", YM3812, XTAL(24'000'000) / 8)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
-MACHINE_CONFIG_END
+ YM3812(config, "ym2", XTAL(24'000'000) / 8).add_route(ALL_OUTPUTS, "mono", 1.0);
+}
/*************************************
diff --git a/src/mame/drivers/bbusters.cpp b/src/mame/drivers/bbusters.cpp
index 701d7eadabe..26b9f3ba59c 100644
--- a/src/mame/drivers/bbusters.cpp
+++ b/src/mame/drivers/bbusters.cpp
@@ -244,7 +244,7 @@ void bbusters_state::machine_start()
WRITE8_MEMBER(bbusters_state_base::sound_cpu_w)
{
- m_soundlatch[0]->write(space, 0, data&0xff);
+ m_soundlatch[0]->write(data&0xff);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
diff --git a/src/mame/drivers/bcs3.cpp b/src/mame/drivers/bcs3.cpp
index 802ab90ed8d..f9d9f12cc8a 100644
--- a/src/mame/drivers/bcs3.cpp
+++ b/src/mame/drivers/bcs3.cpp
@@ -384,8 +384,8 @@ void bcs3_state::init_bcs3d()
s_cols = 29;
}
-MACHINE_CONFIG_START(bcs3_state::bcs3)
-
+void bcs3_state::bcs3(machine_config &config)
+{
/* basic machine hardware */
Z80(config, m_maincpu, XTAL(5'000'000) /2);
m_maincpu->set_addrmap(AS_PROGRAM, &bcs3_state::bcs3_mem);
@@ -393,13 +393,13 @@ MACHINE_CONFIG_START(bcs3_state::bcs3)
m_maincpu->set_daisy_config(daisy_chain_intf);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(28*8, 12*10)
- MCFG_SCREEN_VISIBLE_AREA(0,28*8-1,0,12*10-1)
- MCFG_SCREEN_UPDATE_DRIVER(bcs3_state, screen_update_bcs3)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_size(28*8, 12*10);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(bcs3_state::screen_update_bcs3));
+ screen.set_palette("palette");
GFXDECODE(config, "gfxdecode", "palette", gfx_bcs3);
PALETTE(config, "palette", palette_device::MONOCHROME);
@@ -409,10 +409,10 @@ MACHINE_CONFIG_START(bcs3_state::bcs3)
m_ctc->zc_callback<1>().set(FUNC(bcs3_state::ctc_z1_w));
CASSETTE(config, m_cass);
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(bcs3_state::bcs3a)
+}
+void bcs3_state::bcs3a(machine_config &config)
+{
/* basic machine hardware */
Z80(config, m_maincpu, XTAL(7'000'000) /2);
m_maincpu->set_addrmap(AS_PROGRAM, &bcs3_state::bcs3a_mem);
@@ -420,13 +420,13 @@ MACHINE_CONFIG_START(bcs3_state::bcs3a)
m_maincpu->set_daisy_config(daisy_chain_intf);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(29*8, 12*10)
- MCFG_SCREEN_VISIBLE_AREA(0,29*8-1,0,12*10-1)
- MCFG_SCREEN_UPDATE_DRIVER(bcs3_state, screen_update_bcs3a)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_size(29*8, 12*10);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(bcs3_state::screen_update_bcs3a));
+ screen.set_palette("palette");
GFXDECODE(config, "gfxdecode", "palette", gfx_bcs3);
PALETTE(config, "palette", palette_device::MONOCHROME);
@@ -436,14 +436,14 @@ MACHINE_CONFIG_START(bcs3_state::bcs3a)
m_ctc->zc_callback<1>().set(FUNC(bcs3_state::ctc_z1_w));
CASSETTE(config, m_cass);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(bcs3_state::bcs3b)
+void bcs3_state::bcs3b(machine_config &config)
+{
bcs3a(config);
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_SIZE(40*8, 24*10)
- MCFG_SCREEN_VISIBLE_AREA(0,40*8-1,0,24*10-1)
-MACHINE_CONFIG_END
+ subdevice<screen_device>("screen")->set_size(40*8, 24*10);
+ subdevice<screen_device>("screen")->set_visarea(0, 40*8-1, 0, 24*10-1);
+}
/* ROM definition */
diff --git a/src/mame/drivers/beaminv.cpp b/src/mame/drivers/beaminv.cpp
index 4648b557265..3de767c935e 100644
--- a/src/mame/drivers/beaminv.cpp
+++ b/src/mame/drivers/beaminv.cpp
@@ -340,22 +340,21 @@ INPUT_PORTS_END
*
*************************************/
-MACHINE_CONFIG_START(beaminv_state::beaminv)
-
+void beaminv_state::beaminv(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 2000000) /* 2 MHz ? */
- MCFG_DEVICE_PROGRAM_MAP(main_map)
- MCFG_DEVICE_IO_MAP(main_io_map)
+ Z80(config, m_maincpu, 2000000); /* 2 MHz ? */
+ m_maincpu->set_addrmap(AS_PROGRAM, &beaminv_state::main_map);
+ m_maincpu->set_addrmap(AS_IO, &beaminv_state::main_io_map);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_SIZE(256, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 247, 16, 231)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_UPDATE_DRIVER(beaminv_state, screen_update_beaminv)
-
-MACHINE_CONFIG_END
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_size(256, 256);
+ m_screen->set_visarea(0, 247, 16, 231);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_screen_update(FUNC(beaminv_state::screen_update_beaminv));
+}
diff --git a/src/mame/drivers/beathead.cpp b/src/mame/drivers/beathead.cpp
index 7bafc37d61e..e5590015a80 100644
--- a/src/mame/drivers/beathead.cpp
+++ b/src/mame/drivers/beathead.cpp
@@ -333,11 +333,11 @@ INPUT_PORTS_END
*
*************************************/
-MACHINE_CONFIG_START(beathead_state::beathead)
-
+void beathead_state::beathead(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", ASAP, ATARI_CLOCK_14MHz)
- MCFG_DEVICE_PROGRAM_MAP(main_map)
+ ASAP(config, m_maincpu, ATARI_CLOCK_14MHz);
+ m_maincpu->set_addrmap(AS_PROGRAM, &beathead_state::main_map);
EEPROM_2804(config, "eeprom").lock_after_write(true);
@@ -346,13 +346,13 @@ MACHINE_CONFIG_START(beathead_state::beathead)
TIMER(config, m_scan_timer).configure_generic(FUNC(beathead_state::scanline_callback));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_UPDATE_DRIVER(beathead_state, screen_update)
- MCFG_SCREEN_SIZE(42*8, 262)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 42*8-1, 0*8, 30*8-1)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_screen_update(FUNC(beathead_state::screen_update));
+ m_screen->set_size(42*8, 262);
+ m_screen->set_visarea(0*8, 42*8-1, 0*8, 30*8-1);
+ m_screen->set_palette(m_palette);
PALETTE(config, m_palette);
m_palette->set_format(palette_device::IRGB_1555, 32768);
@@ -364,7 +364,7 @@ MACHINE_CONFIG_START(beathead_state::beathead)
ATARI_JSA_III(config, m_jsa, 0);
m_jsa->test_read_cb().set_ioport("IN2").bit(6);
m_jsa->add_route(ALL_OUTPUTS, "mono", 1.0);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/belatra.cpp b/src/mame/drivers/belatra.cpp
index 3f36955692a..39b3855f32c 100644
--- a/src/mame/drivers/belatra.cpp
+++ b/src/mame/drivers/belatra.cpp
@@ -70,14 +70,15 @@ void belatra_state::belatra_map(address_map &map)
static INPUT_PORTS_START( belatra )
INPUT_PORTS_END
-MACHINE_CONFIG_START(belatra_state::belatra)
- MCFG_DEVICE_ADD("maincpu", ARM7, 54000000) // guess...
- MCFG_DEVICE_PROGRAM_MAP(belatra_map)
+void belatra_state::belatra(machine_config &config)
+{
+ ARM7(config, m_maincpu, 54000000); // guess...
+ m_maincpu->set_addrmap(AS_PROGRAM, &belatra_state::belatra_map);
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
/* unknown sound */
-MACHINE_CONFIG_END
+}
ROM_START( merryjn )
diff --git a/src/mame/drivers/berzerk.cpp b/src/mame/drivers/berzerk.cpp
index 1741dac8e38..18cde8158e8 100644
--- a/src/mame/drivers/berzerk.cpp
+++ b/src/mame/drivers/berzerk.cpp
@@ -1120,39 +1120,38 @@ INPUT_PORTS_END
*
*************************************/
-MACHINE_CONFIG_START(berzerk_state::berzerk)
-
+void berzerk_state::berzerk(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, MAIN_CPU_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(berzerk_map)
- MCFG_DEVICE_IO_MAP(berzerk_io_map)
+ Z80(config, m_maincpu, MAIN_CPU_CLOCK);
+ m_maincpu->set_addrmap(AS_PROGRAM, &berzerk_state::berzerk_map);
+ m_maincpu->set_addrmap(AS_IO, &berzerk_state::berzerk_io_map);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
- MCFG_DEVICE_ADD("ls181_10c", TTL74181)
- MCFG_DEVICE_ADD("ls181_12c", TTL74181)
+ TTL74181(config, m_ls181_10c);
+ TTL74181(config, m_ls181_12c);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART)
- MCFG_SCREEN_UPDATE_DRIVER(berzerk_state, screen_update)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART);
+ m_screen->set_screen_update(FUNC(berzerk_state::screen_update));
/* audio hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("speech", S14001A, S14001_CLOCK/16/8) /* placeholder - the clock is software controllable */
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
+ S14001A(config, m_s14001a, S14001_CLOCK/16/8).add_route(ALL_OUTPUTS, "mono", 1.00); /* placeholder - the clock is software controllable */
EXIDY(config, m_custom, 0).add_route(ALL_OUTPUTS, "mono", 0.33);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(berzerk_state::frenzy)
+void berzerk_state::frenzy(machine_config &config)
+{
berzerk(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(frenzy_map)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &berzerk_state::frenzy_map);
+}
diff --git a/src/mame/drivers/bestleag.cpp b/src/mame/drivers/bestleag.cpp
index d8907d8e910..8916f5382fd 100644
--- a/src/mame/drivers/bestleag.cpp
+++ b/src/mame/drivers/bestleag.cpp
@@ -381,18 +381,19 @@ static GFXDECODE_START( gfx_bestleag )
GFXDECODE_ENTRY( "gfx2", 0, bestleag_char16layout, 0x300, 16 )
GFXDECODE_END
-MACHINE_CONFIG_START(bestleag_state::bestleag)
- MCFG_DEVICE_ADD("maincpu", M68000, 12000000)
- MCFG_DEVICE_PROGRAM_MAP(bestleag_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", bestleag_state, irq6_line_hold)
-
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(bestleag_state, screen_update_bestleag)
- MCFG_SCREEN_PALETTE(m_palette)
+void bestleag_state::bestleag(machine_config &config)
+{
+ M68000(config, m_maincpu, 12000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &bestleag_state::bestleag_map);
+ m_maincpu->set_vblank_int("screen", FUNC(bestleag_state::irq6_line_hold));
+
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ 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);
+ screen.set_screen_update(FUNC(bestleag_state::screen_update_bestleag));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_bestleag);
PALETTE(config, m_palette).set_format(palette_device::RRRRGGGGBBBBRGBx, 0x800);
@@ -400,16 +401,16 @@ MACHINE_CONFIG_START(bestleag_state::bestleag)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("oki", OKIM6295, 1000000, okim6295_device::PIN7_HIGH) /* Hand-tuned */
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.00)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.00)
-MACHINE_CONFIG_END
+ OKIM6295(config, m_oki, 1000000, okim6295_device::PIN7_HIGH); /* Hand-tuned */
+ m_oki->add_route(ALL_OUTPUTS, "lspeaker", 1.00);
+ m_oki->add_route(ALL_OUTPUTS, "rspeaker", 1.00);
+}
-MACHINE_CONFIG_START(bestleag_state::bestleaw)
+void bestleag_state::bestleaw(machine_config &config)
+{
bestleag(config);
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(bestleag_state, screen_update_bestleaw)
-MACHINE_CONFIG_END
+ subdevice<screen_device>("screen")->set_screen_update(FUNC(bestleag_state::screen_update_bestleaw));
+}
/* Rom Loading */
diff --git a/src/mame/drivers/beta.cpp b/src/mame/drivers/beta.cpp
index 77b4ed96a7c..45ad006e090 100644
--- a/src/mame/drivers/beta.cpp
+++ b/src/mame/drivers/beta.cpp
@@ -347,16 +347,15 @@ void beta_state::machine_start()
MACHINE_CONFIG_START(beta_state::beta)
/* basic machine hardware */
- MCFG_DEVICE_ADD(M6502_TAG, M6502, XTAL(4'000'000)/4)
- MCFG_DEVICE_PROGRAM_MAP(beta_mem)
+ M6502(config, m_maincpu, XTAL(4'000'000)/4);
+ m_maincpu->set_addrmap(AS_PROGRAM, &beta_state::beta_mem);
/* video hardware */
config.set_default_layout(layout_beta);
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
+ SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
/* devices */
mos6532_new_device &m6532(MOS6532_NEW(config, M6532_TAG, XTAL(4'000'000)/4));
diff --git a/src/mame/drivers/bfcobra.cpp b/src/mame/drivers/bfcobra.cpp
index ac979b2976c..f406329a2cd 100644
--- a/src/mame/drivers/bfcobra.cpp
+++ b/src/mame/drivers/bfcobra.cpp
@@ -1638,28 +1638,29 @@ INTERRUPT_GEN_MEMBER(bfcobra_state::vblank_gen)
update_irqs();
}
-MACHINE_CONFIG_START(bfcobra_state::bfcobra)
- MCFG_DEVICE_ADD("maincpu", Z80, Z80_XTAL)
- MCFG_DEVICE_PROGRAM_MAP(z80_prog_map)
- MCFG_DEVICE_IO_MAP(z80_io_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", bfcobra_state, vblank_gen)
+void bfcobra_state::bfcobra(machine_config &config)
+{
+ Z80(config, m_maincpu, Z80_XTAL);
+ m_maincpu->set_addrmap(AS_PROGRAM, &bfcobra_state::z80_prog_map);
+ m_maincpu->set_addrmap(AS_IO, &bfcobra_state::z80_io_map);
+ m_maincpu->set_vblank_int("screen", FUNC(bfcobra_state::vblank_gen));
- MCFG_DEVICE_ADD("audiocpu", MC6809, M6809_XTAL) // MC6809P
- MCFG_DEVICE_PROGRAM_MAP(m6809_prog_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(bfcobra_state, timer_irq, 1000)
+ MC6809(config, m_audiocpu, M6809_XTAL); // MC6809P
+ m_audiocpu->set_addrmap(AS_PROGRAM, &bfcobra_state::m6809_prog_map);
+ m_audiocpu->set_periodic_int(FUNC(bfcobra_state::timer_irq), attotime::from_hz(1000));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
/* TODO */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(512, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 512 - 1, 0, 256 - 1)
- MCFG_SCREEN_UPDATE_DRIVER(bfcobra_state, screen_update_bfcobra)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(512, 256);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(bfcobra_state::screen_update_bfcobra));
- MCFG_PALETTE_ADD("palette", 256)
+ PALETTE(config, m_palette).set_entries(256);
ramdac_device &ramdac(RAMDAC(config, "ramdac", 0, m_palette)); // MUSIC Semiconductor TR9C1710 RAMDAC or equivalent
ramdac.set_addrmap(0, &bfcobra_state::ramdac_map);
@@ -1669,8 +1670,7 @@ MACHINE_CONFIG_START(bfcobra_state::bfcobra)
AY8910(config, "aysnd", M6809_XTAL / 4).add_route(ALL_OUTPUTS, "mono", 0.20);
- MCFG_DEVICE_ADD("upd", UPD7759)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
+ UPD7759(config, m_upd7759).add_route(ALL_OUTPUTS, "mono", 0.40);
/* ACIAs */
ACIA6850(config, m_acia6850_0, 0);
@@ -1688,7 +1688,7 @@ MACHINE_CONFIG_START(bfcobra_state::bfcobra)
acia_clock.signal_handler().set(FUNC(bfcobra_state::write_acia_clock));
METERS(config, m_meters, 0).set_number(8);
-MACHINE_CONFIG_END
+}
/***************************************************************************
diff --git a/src/mame/drivers/bfm_ad5.cpp b/src/mame/drivers/bfm_ad5.cpp
index 82b05b6d69f..b97d231501a 100644
--- a/src/mame/drivers/bfm_ad5.cpp
+++ b/src/mame/drivers/bfm_ad5.cpp
@@ -79,15 +79,16 @@ INTERRUPT_GEN_MEMBER(adder5_state::ad5_fake_timer_int)
// m_maincpu->set_input_line_and_vector(5, HOLD_LINE, 0x8c);
}
-MACHINE_CONFIG_START(adder5_state::bfm_ad5)
- MCFG_DEVICE_ADD("maincpu", MCF5206E, 40000000) /* MCF5206eFT */
- MCFG_DEVICE_PROGRAM_MAP(ad5_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(adder5_state, ad5_fake_timer_int, 1000)
+void adder5_state::bfm_ad5(machine_config &config)
+{
+ MCF5206E(config, m_maincpu, 40000000); /* MCF5206eFT */
+ m_maincpu->set_addrmap(AS_PROGRAM, &adder5_state::ad5_map);
+ m_maincpu->set_periodic_int(FUNC(adder5_state::ad5_fake_timer_int), attotime::from_hz(1000));
MCF5206E_PERIPHERAL(config, "maincpu_onboard", 0);
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
/* unknown sound */
-MACHINE_CONFIG_END
+}
#include "bfm_ad5sw.hxx"
diff --git a/src/mame/drivers/bfm_sc2.cpp b/src/mame/drivers/bfm_sc2.cpp
index 9e8d5303a15..048bef99198 100644
--- a/src/mame/drivers/bfm_sc2.cpp
+++ b/src/mame/drivers/bfm_sc2.cpp
@@ -201,9 +201,9 @@ public:
, m_upd7759(*this, "upd")
, m_vfd0(*this, "vfd0")
, m_vfd1(*this, "vfd1")
+ , m_ym2413(*this, "ymsnd")
, m_strobein(*this, "STROBE%u", 0)
, m_rombank1(*this, "bank1")
- , m_ym2413(*this, "ymsnd")
, m_meters(*this, "meters")
, m_lamps(*this, "lamp%u", 0U)
{
@@ -272,6 +272,7 @@ protected:
required_device<cpu_device> m_maincpu;
required_device<upd7759_device> m_upd7759;
optional_device<bfm_bd1_device> m_vfd0, m_vfd1;
+ optional_device<ym2413_device> m_ym2413;
int m_sc2_show_door;
int m_sc2_door_state;
@@ -287,7 +288,6 @@ protected:
private:
required_ioport_array<12> m_strobein;
optional_memory_bank m_rombank1;
- optional_device<ym2413_device> m_ym2413;
optional_device<meters_device> m_meters; // scorpion2_vid doesn't use this (scorpion2_vidm does)
@@ -2277,11 +2277,12 @@ void bfm_sc2_state::machine_start()
save_state();
}
-MACHINE_CONFIG_START(bfm_sc2_vid_state::scorpion2_vid)
- MCFG_DEVICE_ADD("maincpu", M6809, MASTER_CLOCK/4 ) // 6809 CPU at 2 Mhz
- MCFG_DEVICE_PROGRAM_MAP(memmap_vid) // setup scorpion2 board memorymap
- MCFG_DEVICE_PERIODIC_INT_DRIVER(bfm_sc2_vid_state, timer_irq, 1000) // generate 1000 IRQ's per second
- config.m_minimum_quantum = attotime::from_hz(960); // needed for serial communication !!
+void bfm_sc2_vid_state::scorpion2_vid(machine_config &config)
+{
+ M6809(config, m_maincpu, MASTER_CLOCK/4); // 6809 CPU at 2 Mhz
+ m_maincpu->set_addrmap(AS_PROGRAM, &bfm_sc2_vid_state::memmap_vid); // setup scorpion2 board memorymap
+ m_maincpu->set_periodic_int(FUNC(bfm_sc2_vid_state::timer_irq), attotime::from_hz(1000)); // generate 1000 IRQ's per second
+ config.m_minimum_quantum = attotime::from_hz(960); // needed for serial communication !!
WATCHDOG_TIMER(config, "watchdog").set_time(PERIOD_OF_555_MONOSTABLE(120000,100e-9));
@@ -2295,18 +2296,17 @@ MACHINE_CONFIG_START(bfm_sc2_vid_state::scorpion2_vid)
BFM_ADDER2(config, "adder2", 0);
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("upd", UPD7759)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+ UPD7759(config, m_upd7759).add_route(ALL_OUTPUTS, "mono", 0.50);
- MCFG_DEVICE_ADD("ymsnd", YM2413, XTAL(3'579'545))
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
-MACHINE_CONFIG_END
+ YM2413(config, m_ym2413, XTAL(3'579'545)).add_route(ALL_OUTPUTS, "mono", 1.0);
+}
/* machine driver for scorpion2_vid board with meters (i.e. quintoon uk). Are we really sure the other games don't?*/
-MACHINE_CONFIG_START(bfm_sc2_vid_state::scorpion2_vidm)
+void bfm_sc2_vid_state::scorpion2_vidm(machine_config &config)
+{
scorpion2_vid(config);
_8meters(config);
-MACHINE_CONFIG_END
+}
@@ -3747,10 +3747,11 @@ void bfm_sc2_dmd_state::machine_start()
/* machine driver for scorpion2 board */
-MACHINE_CONFIG_START(bfm_sc2_awp_state::scorpion2)
- MCFG_DEVICE_ADD("maincpu", M6809, MASTER_CLOCK/4 )
- MCFG_DEVICE_PROGRAM_MAP(memmap_no_vid)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(bfm_sc2_awp_state, timer_irq, 1000)
+void bfm_sc2_awp_state::scorpion2(machine_config &config)
+{
+ M6809(config, m_maincpu, MASTER_CLOCK/4);
+ m_maincpu->set_addrmap(AS_PROGRAM, &bfm_sc2_awp_state::memmap_no_vid);
+ m_maincpu->set_periodic_int(FUNC(bfm_sc2_awp_state::timer_irq), attotime::from_hz(1000));
WATCHDOG_TIMER(config, "watchdog").set_time(PERIOD_OF_555_MONOSTABLE(120000,100e-9));
@@ -3758,11 +3759,9 @@ MACHINE_CONFIG_START(bfm_sc2_awp_state::scorpion2)
BFM_BD1(config, m_vfd1, 60, 1);
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("upd",UPD7759)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+ UPD7759(config, m_upd7759).add_route(ALL_OUTPUTS, "mono", 0.50);
- MCFG_DEVICE_ADD("ymsnd",YM2413, XTAL(3'579'545))
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ YM2413(config, m_ym2413, XTAL(3'579'545)).add_route(ALL_OUTPUTS, "mono", 1.0);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
NVRAM(config, "e2ram").set_custom_handler(FUNC(bfm_sc2_awp_state::e2ram_init));
@@ -3784,7 +3783,7 @@ MACHINE_CONFIG_START(bfm_sc2_awp_state::scorpion2)
m_reel[5]->optic_handler().set(FUNC(bfm_sc2_awp_state::reel_optic_cb<5>));
_8meters(config);
-MACHINE_CONFIG_END
+}
#if 0
void bfm_sc2_awp_state::scorpion2_3m(machine_config &config)
@@ -3807,20 +3806,19 @@ void bfm_sc2_awp_state::scorpion3(machine_config &config)
/* machine driver for scorpion2 board + matrix board */
-MACHINE_CONFIG_START(bfm_sc2_dmd_state::scorpion2_dm01)
+void bfm_sc2_dmd_state::scorpion2_dm01(machine_config &config)
+{
config.m_minimum_quantum = attotime::from_hz(960); // needed for serial communication !!
- MCFG_DEVICE_ADD("maincpu", M6809, MASTER_CLOCK/4 )
- MCFG_DEVICE_PROGRAM_MAP(memmap_no_vid)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(bfm_sc2_dmd_state, timer_irq, 1000)
+ M6809(config, m_maincpu, MASTER_CLOCK/4);
+ m_maincpu->set_addrmap(AS_PROGRAM, &bfm_sc2_dmd_state::memmap_no_vid);
+ m_maincpu->set_periodic_int(FUNC(bfm_sc2_dmd_state::timer_irq), attotime::from_hz(1000));
WATCHDOG_TIMER(config, "watchdog").set_time(PERIOD_OF_555_MONOSTABLE(120000,100e-9));
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("ymsnd",YM2413, XTAL(3'579'545))
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ YM2413(config, m_ym2413, XTAL(3'579'545)).add_route(ALL_OUTPUTS, "mono", 1.0);
- MCFG_DEVICE_ADD("upd",UPD7759)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+ UPD7759(config, m_upd7759).add_route(ALL_OUTPUTS, "mono", 0.50);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
NVRAM(config, "e2ram").set_custom_handler(FUNC(bfm_sc2_dmd_state::e2ram_init));
@@ -3844,7 +3842,7 @@ MACHINE_CONFIG_START(bfm_sc2_dmd_state::scorpion2_dm01)
m_reel[5]->optic_handler().set(FUNC(bfm_sc2_dmd_state::reel_optic_cb<5>));
_8meters(config);
-MACHINE_CONFIG_END
+}
void bfm_sc2_dmd_state::scorpion2_dm01_3m(machine_config &config)
{
diff --git a/src/mame/drivers/bfm_swp.cpp b/src/mame/drivers/bfm_swp.cpp
index 737fb1f05f7..85e2b22ab64 100644
--- a/src/mame/drivers/bfm_swp.cpp
+++ b/src/mame/drivers/bfm_swp.cpp
@@ -201,25 +201,24 @@ void bfm_swp_state::machine_start()
}
-MACHINE_CONFIG_START(bfm_swp_state::bfm_swp)
-
+void bfm_swp_state::bfm_swp(machine_config &config)
+{
/* basic machine hardware */
M68340(config, m_maincpu, 16000000);
m_maincpu->set_addrmap(AS_PROGRAM, &bfm_swp_state::bfm_swp_map);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_UPDATE_DRIVER(bfm_swp_state, screen_update)
- MCFG_SCREEN_SIZE(64*8, 64*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_screen_update(FUNC(bfm_swp_state::screen_update));
+ screen.set_size(64*8, 64*8);
+ screen.set_visarea(0*8, 32*8-1, 0*8, 32*8-1);
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("ymz", YMZ280B, 10000000 )
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
-MACHINE_CONFIG_END
+ YMZ280B(config, "ymz", 10000000).add_route(ALL_OUTPUTS, "mono", 1.0);
+}
ROM_START( c3_rtime )
ROM_REGION( 0x100000, "maincpu", 0 )
diff --git a/src/mame/drivers/bgt.cpp b/src/mame/drivers/bgt.cpp
index 4f2f90354a6..f9e6c432114 100644
--- a/src/mame/drivers/bgt.cpp
+++ b/src/mame/drivers/bgt.cpp
@@ -49,11 +49,12 @@ static INPUT_PORTS_START( bgt )
INPUT_PORTS_END
-MACHINE_CONFIG_START(bgt_state::bgt)
- MCFG_DEVICE_ADD("maincpu", V30, 12000000 ) // ? unknown CPU.. definitely x86 based tho
- MCFG_DEVICE_PROGRAM_MAP(bgt_map)
- MCFG_DEVICE_IO_MAP(bgt_io)
-MACHINE_CONFIG_END
+void bgt_state::bgt(machine_config &config)
+{
+ V30(config, m_maincpu, 12000000); // ? unknown CPU.. definitely x86 based tho
+ m_maincpu->set_addrmap(AS_PROGRAM, &bgt_state::bgt_map);
+ m_maincpu->set_addrmap(AS_IO, &bgt_state::bgt_io);
+}
ROM_START( bg_ddb )
ROM_REGION( 0x100000, "maincpu", 0 )
diff --git a/src/mame/drivers/bigbord2.cpp b/src/mame/drivers/bigbord2.cpp
index c32d45dffe8..0c49250c480 100644
--- a/src/mame/drivers/bigbord2.cpp
+++ b/src/mame/drivers/bigbord2.cpp
@@ -548,7 +548,8 @@ MC6845_UPDATE_ROW( bigbord2_state::crtc_update_row )
#define MAIN_CLOCK 8_MHz_XTAL / 2
-MACHINE_CONFIG_START(bigbord2_state::bigbord2)
+void bigbord2_state::bigbord2(machine_config &config)
+{
/* basic machine hardware */
Z80(config, m_maincpu, MAIN_CLOCK);
m_maincpu->set_addrmap(AS_PROGRAM, &bigbord2_state::bigbord2_mem);
@@ -556,9 +557,9 @@ MACHINE_CONFIG_START(bigbord2_state::bigbord2)
m_maincpu->set_daisy_config(daisy_chain);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(10.69425_MHz_XTAL, 700, 0, 560, 260, 0, 240)
- MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(10.69425_MHz_XTAL, 700, 0, 560, 260, 0, 240);
+ screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update));
GFXDECODE(config, "gfxdecode", m_palette, gfx_crt8002);
PALETTE(config, m_palette, palette_device::MONOCHROME);
@@ -615,7 +616,7 @@ MACHINE_CONFIG_START(bigbord2_state::bigbord2)
m_syslatch1->q_out_cb<6>().set(FUNC(bigbord2_state::disk_motor_w)); // MOTOR
m_syslatch1->q_out_cb<7>().set("beeper", FUNC(beep_device::set_state)); // BELL
- MCFG_DEVICE_ADD("outlatch1", LS259, 0) // U96
+ LS259(config, "outlatch1", 0); // U96
/* keyboard */
generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0));
@@ -623,9 +624,8 @@ MACHINE_CONFIG_START(bigbord2_state::bigbord2)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("beeper", BEEP, 950) // actual frequency is unknown
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
-MACHINE_CONFIG_END
+ BEEP(config, "beeper", 950).add_route(ALL_OUTPUTS, "mono", 0.50); // actual frequency is unknown
+}
/* ROMs */
diff --git a/src/mame/drivers/bigstrkb.cpp b/src/mame/drivers/bigstrkb.cpp
index e77eedb6992..a74d01c7885 100644
--- a/src/mame/drivers/bigstrkb.cpp
+++ b/src/mame/drivers/bigstrkb.cpp
@@ -200,21 +200,21 @@ GFXDECODE_END
/* Machine Driver */
-MACHINE_CONFIG_START(bigstrkb_state::bigstrkb)
-
- MCFG_DEVICE_ADD("maincpu", M68000, 12000000)
- MCFG_DEVICE_PROGRAM_MAP(bigstrkb_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", bigstrkb_state, irq6_line_hold)
+void bigstrkb_state::bigstrkb(machine_config &config)
+{
+ M68000(config, m_maincpu, 12000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &bigstrkb_state::bigstrkb_map);
+ m_maincpu->set_vblank_int("screen", FUNC(bigstrkb_state::irq6_line_hold));
GFXDECODE(config, m_gfxdecode, m_palette, gfx_bigstrkb);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(bigstrkb_state, screen_update)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ 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);
+ screen.set_screen_update(FUNC(bigstrkb_state::screen_update));
+ screen.set_palette(m_palette);
PALETTE(config, m_palette).set_format(palette_device::RRRRGGGGBBBBRGBx, 0x400);
@@ -222,14 +222,14 @@ MACHINE_CONFIG_START(bigstrkb_state::bigstrkb)
SPEAKER(config, "rspeaker").front_right();
// YM2151(config, "ymsnd", 4000000);
- MCFG_DEVICE_ADD("oki1", OKIM6295, 4000000, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.30)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.30)
+ okim6295_device &oki1(OKIM6295(config, "oki1", 4000000, okim6295_device::PIN7_HIGH));
+ oki1.add_route(ALL_OUTPUTS, "lspeaker", 0.30);
+ oki1.add_route(ALL_OUTPUTS, "rspeaker", 0.30);
- MCFG_DEVICE_ADD("oki2", OKIM6295, 4000000, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.30)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.30)
-MACHINE_CONFIG_END
+ okim6295_device &oki2(OKIM6295(config, "oki2", 4000000, okim6295_device::PIN7_HIGH));
+ oki2.add_route(ALL_OUTPUTS, "lspeaker", 0.30);
+ oki2.add_route(ALL_OUTPUTS, "rspeaker", 0.30);
+}
/* Rom Loading */
diff --git a/src/mame/drivers/bingo.cpp b/src/mame/drivers/bingo.cpp
index 1be53b0a822..b00b4794f7b 100644
--- a/src/mame/drivers/bingo.cpp
+++ b/src/mame/drivers/bingo.cpp
@@ -46,11 +46,12 @@ void bingo_state::init_bingo()
{
}
-MACHINE_CONFIG_START(bingo_state::bingo)
+void bingo_state::bingo(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", S2650, 1000000)
- MCFG_DEVICE_PROGRAM_MAP(bingo_map)
-MACHINE_CONFIG_END
+ S2650(config, m_maincpu, 1000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &bingo_state::bingo_map);
+}
class seeben_state : public driver_device
{
@@ -89,11 +90,12 @@ void seeben_state::init_seeben()
{
}
-MACHINE_CONFIG_START(seeben_state::seeben)
+void seeben_state::seeben(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", I8085A, 1000000)
- MCFG_DEVICE_PROGRAM_MAP(seeben_map)
-MACHINE_CONFIG_END
+ I8085A(config, m_maincpu, 1000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &seeben_state::seeben_map);
+}
class splin_state : public driver_device
{
@@ -134,11 +136,12 @@ void splin_state::init_splin()
{
}
-MACHINE_CONFIG_START(splin_state::splin)
+void splin_state::splin(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", I80186, 16000000)
- MCFG_DEVICE_PROGRAM_MAP(splin_map)
-MACHINE_CONFIG_END
+ I80186(config, m_maincpu, 16000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &splin_state::splin_map);
+}
ROM_START(cntinntl)
ROM_REGION(0x8000, "maincpu", 0)
diff --git a/src/mame/drivers/bingoc.cpp b/src/mame/drivers/bingoc.cpp
index e6a55bd123d..1b16e332a72 100644
--- a/src/mame/drivers/bingoc.cpp
+++ b/src/mame/drivers/bingoc.cpp
@@ -109,7 +109,7 @@ READ8_MEMBER(bingoc_state::sound_test_r)
#else
WRITE16_MEMBER(bingoc_state::main_sound_latch_w)
{
- m_soundlatch->write(space,0,data&0xff);
+ m_soundlatch->write(data&0xff);
m_soundcpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
#endif
@@ -168,40 +168,40 @@ static INPUT_PORTS_START( bingoc )
INPUT_PORTS_END
-MACHINE_CONFIG_START(bingoc_state::bingoc)
-
- MCFG_DEVICE_ADD("maincpu", M68000,8000000) /* ? MHz */
- MCFG_DEVICE_PROGRAM_MAP(main_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", bingoc_state, irq2_line_hold)
+void bingoc_state::bingoc(machine_config &config)
+{
+ M68000(config, m_maincpu, 8000000); /* ? MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &bingoc_state::main_map);
+ m_maincpu->set_vblank_int("screen", FUNC(bingoc_state::irq2_line_hold));
- MCFG_DEVICE_ADD("soundcpu", Z80,4000000) /* ? MHz */
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
- MCFG_DEVICE_IO_MAP(sound_io)
+ Z80(config, m_soundcpu, 4000000); /* ? MHz */
+ m_soundcpu->set_addrmap(AS_PROGRAM, &bingoc_state::sound_map);
+ m_soundcpu->set_addrmap(AS_IO, &bingoc_state::sound_io);
#if SOUND_TEST
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", bingoc_state, nmi_line_pulse)
+ m_soundcpu->set_vblank_int("screen", FUNC(bingoc_state::nmi_line_pulse));
#endif
- MCFG_DEVICE_ADD("uart1", I8251, 4000000) // unknown
- MCFG_DEVICE_ADD("uart2", I8251, 4000000) // unknown
- MCFG_DEVICE_ADD("uart3", I8251, 4000000) // unknown
- MCFG_DEVICE_ADD("uart4", I8251, 4000000) // unknown
- MCFG_DEVICE_ADD("uart5", I8251, 4000000) // unknown
- MCFG_DEVICE_ADD("uart6", I8251, 4000000) // unknown
- MCFG_DEVICE_ADD("uart7", I8251, 4000000) // unknown
- MCFG_DEVICE_ADD("uart8", I8251, 4000000) // unknown
+ I8251(config, "uart1", 4000000); // unknown
+ I8251(config, "uart2", 4000000); // unknown
+ I8251(config, "uart3", 4000000); // unknown
+ I8251(config, "uart4", 4000000); // unknown
+ I8251(config, "uart5", 4000000); // unknown
+ I8251(config, "uart6", 4000000); // unknown
+ I8251(config, "uart7", 4000000); // unknown
+ I8251(config, "uart8", 4000000); // unknown
- MCFG_DEVICE_ADD("io", SEGA_315_5338A, 0) // ?
+ SEGA_315_5338A(config, "io", 0); // ?
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(512, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1)
- MCFG_SCREEN_UPDATE_DRIVER(bingoc_state, screen_update_bingoc)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(512, 256);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(bingoc_state::screen_update_bingoc));
+ screen.set_palette("palette");
- MCFG_PALETTE_ADD("palette", 0x100)
+ PALETTE(config, "palette").set_entries(0x100);
SPEAKER(config, "lspeaker").front_left(); //might just be mono...
@@ -211,10 +211,10 @@ MACHINE_CONFIG_START(bingoc_state::bingoc)
YM2151(config, "ymsnd", 7159160/2).add_route(0, "lspeaker", 1.0).add_route(1, "rspeaker", 1.0);
- MCFG_DEVICE_ADD("upd", UPD7759)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
-MACHINE_CONFIG_END
+ UPD7759(config, m_upd7759);
+ m_upd7759->add_route(ALL_OUTPUTS, "lspeaker", 1.0);
+ m_upd7759->add_route(ALL_OUTPUTS, "rspeaker", 1.0);
+}
ROM_START( bingoc )
ROM_REGION( 0x40000, "maincpu", 0 )
diff --git a/src/mame/drivers/bingoman.cpp b/src/mame/drivers/bingoman.cpp
index 17da5720752..db3196dd5fb 100644
--- a/src/mame/drivers/bingoman.cpp
+++ b/src/mame/drivers/bingoman.cpp
@@ -379,28 +379,28 @@ void bingoman_state::bingoman_palette(palette_device &palette) const
{
}
-MACHINE_CONFIG_START(bingoman_state::bingoman)
-
+void bingoman_state::bingoman(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", H83002, XTAL(20'000'000)) /* TODO: correct CPU type */
- MCFG_DEVICE_PROGRAM_MAP(bingoman_prg_map)
- MCFG_DEVICE_IO_MAP(bingoman_io_map)
+ H83002(config, m_maincpu, XTAL(20'000'000)); /* TODO: correct CPU type */
+ m_maincpu->set_addrmap(AS_PROGRAM, &bingoman_state::bingoman_prg_map);
+ m_maincpu->set_addrmap(AS_IO, &bingoman_state::bingoman_io_map);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
- MCFG_SCREEN_UPDATE_DRIVER(bingoman_state, screen_update)
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500));
+ screen.set_screen_update(FUNC(bingoman_state::screen_update));
+ screen.set_size(32*8, 32*8);
+ screen.set_visarea_full();
+ screen.set_palette("palette");
GFXDECODE(config, "gfxdecode", "palette", gfx_bingoman);
PALETTE(config, "palette", FUNC(bingoman_state::bingoman_palette), 8);
/* sound hardware */
SPEAKER(config, "mono").front_center();
-MACHINE_CONFIG_END
+}
/***************************************************************************
diff --git a/src/mame/drivers/bingowav.cpp b/src/mame/drivers/bingowav.cpp
index f2284300fc5..9286efd3343 100644
--- a/src/mame/drivers/bingowav.cpp
+++ b/src/mame/drivers/bingowav.cpp
@@ -82,7 +82,6 @@ void bingowav_state::bingowav_main_map(address_map &map)
map(0x140000, 0x140001).nopr();
map(0x150001, 0x150001).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x150003, 0x150003).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
- map(0xfffc00, 0xffffff).rw("maintmp", FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w));
}
void bingowav_state::bingowav_audio_map(address_map &map)
@@ -114,12 +113,9 @@ INPUT_PORTS_END
void bingowav_state::bingowav(machine_config &config)
{
- M68000(config, m_maincpu, 12000000); // actually TMP63803F-16
+ TMP68301(config, m_maincpu, 12000000); // actually TMP63803F-16
m_maincpu->set_addrmap(AS_PROGRAM, &bingowav_state::bingowav_main_map);
- tmp68301_device &tmp68301(TMP68301(config, "maintmp", 0)); // wrong
- tmp68301.set_cputag(m_maincpu);
-
te7750_device &mainioh(TE7750(config, "mainioh"));
mainioh.ios_cb().set_constant(5);
diff --git a/src/mame/drivers/bionicc.cpp b/src/mame/drivers/bionicc.cpp
index 47c348b84f3..635b9ef7c6f 100644
--- a/src/mame/drivers/bionicc.cpp
+++ b/src/mame/drivers/bionicc.cpp
@@ -108,7 +108,7 @@ WRITE8_MEMBER(bionicc_state::mcu_shared_w)
WRITE8_MEMBER(bionicc_state::out1_w)
{
- m_soundlatch->write(space,0,data);
+ m_soundlatch->write(data);
}
WRITE8_MEMBER(bionicc_state::out3_w)
@@ -388,21 +388,21 @@ void bionicc_state::machine_reset()
m_scroll[3] = 0;
}
-MACHINE_CONFIG_START(bionicc_state::bionicc)
-
+void bionicc_state::bionicc(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(24'000'000) / 2) /* 12 MHz - verified in schematics */
- MCFG_DEVICE_PROGRAM_MAP(main_map)
+ M68000(config, m_maincpu, XTAL(24'000'000) / 2); /* 12 MHz - verified in schematics */
+ m_maincpu->set_addrmap(AS_PROGRAM, &bionicc_state::main_map);
TIMER(config, "scantimer").configure_scanline(FUNC(bionicc_state::scanline), "screen", 0, 1);
- MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(14'318'181) / 4) /* EXO3 C,B=GND, A=5V ==> Divisor 2^2 */
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
+ z80_device &audiocpu(Z80(config, "audiocpu", XTAL(14'318'181) / 4)); /* EXO3 C,B=GND, A=5V ==> Divisor 2^2 */
+ audiocpu.set_addrmap(AS_PROGRAM, &bionicc_state::sound_map);
/* FIXME: interrupt timing
* schematics indicate that nmi_line is set on M680000 access with AB1=1
* and IOCS=0 (active low), see pages A-1/10, A-4/10 in schematics
*/
- MCFG_DEVICE_PERIODIC_INT_DRIVER(bionicc_state, nmi_line_pulse, 4*60)
+ audiocpu.set_periodic_int(FUNC(bionicc_state::nmi_line_pulse), attotime::from_hz(4*60));
/* Protection MCU Intel C8751H-88 runs at 24MHz / 4 = 6MHz */
I8751(config, m_mcu, XTAL(24'000'000) / 4);
@@ -411,16 +411,16 @@ MACHINE_CONFIG_START(bionicc_state::bionicc)
m_mcu->port_out_cb<3>().set(FUNC(bionicc_state::out3_w));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
/* FIXME: should be 257 visible horizontal pixels, first visible pixel should be repeated, back porch/front porch should be separated */
- MCFG_SCREEN_RAW_PARAMS(XTAL(24'000'000) / 4, 386, 0, 256, 260, 16, 240)
- MCFG_SCREEN_UPDATE_DRIVER(bionicc_state, screen_update)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising))
- MCFG_SCREEN_PALETTE(m_palette)
+ screen.set_raw(XTAL(24'000'000) / 4, 386, 0, 256, 260, 16, 240);
+ screen.set_screen_update(FUNC(bionicc_state::screen_update));
+ screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_bionicc);
- MCFG_DEVICE_ADD("spritegen", TIGEROAD_SPRITE, 0)
+ TIGEROAD_SPRITE(config, m_spritegen, 0);
PALETTE(config, m_palette).set_format(2, &bionicc_state::RRRRGGGGBBBBIIII, 1024);
@@ -431,7 +431,7 @@ MACHINE_CONFIG_START(bionicc_state::bionicc)
GENERIC_LATCH_8(config, m_soundlatch);
YM2151(config, "ymsnd", XTAL(14'318'181) / 4).add_route(0, "mono", 0.60).add_route(1, "mono", 0.60);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/bitgraph.cpp b/src/mame/drivers/bitgraph.cpp
index 07a98fdb25e..4d8c2f6e2c6 100644
--- a/src/mame/drivers/bitgraph.cpp
+++ b/src/mame/drivers/bitgraph.cpp
@@ -492,14 +492,15 @@ void bitgraph_state::machine_reset()
}
-MACHINE_CONFIG_START(bitgraph_state::bg_motherboard)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(40)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(1024, 768)
- MCFG_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 768-1)
- MCFG_SCREEN_UPDATE_DRIVER(bitgraph_state, screen_update)
- MCFG_SCREEN_PALETTE("palette")
+void bitgraph_state::bg_motherboard(machine_config &config)
+{
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(40);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ m_screen->set_size(1024, 768);
+ m_screen->set_visarea_full();
+ m_screen->set_screen_update(FUNC(bitgraph_state::screen_update));
+ m_screen->set_palette("palette");
PALETTE(config, "palette", palette_device::MONOCHROME);
@@ -551,13 +552,13 @@ MACHINE_CONFIG_START(bitgraph_state::bg_motherboard)
m_pia->readpb_handler().set(FUNC(bitgraph_state::pia_pb_r));
m_pia->writepb_handler().set(FUNC(bitgraph_state::pia_pb_w));
- MCFG_DEVICE_ADD(EAROM_TAG, ER2055, 0)
+ ER2055(config, m_earom, 0);
SPEAKER(config, "mono").front_center();
AY8912(config, m_psg, XTAL(1'294'400));
m_psg->port_a_write_callback().set(FUNC(bitgraph_state::earom_write));
m_psg->add_route(ALL_OUTPUTS, "mono", 1.00);
-MACHINE_CONFIG_END
+}
#ifdef UNUSED_FUNCTION
void bitgraph_state::bg_ppu(machine_config &config)
diff --git a/src/mame/drivers/bk.cpp b/src/mame/drivers/bk.cpp
index 60dd90a8033..5094b821dde 100644
--- a/src/mame/drivers/bk.cpp
+++ b/src/mame/drivers/bk.cpp
@@ -193,12 +193,12 @@ void bk_state::bk0010(machine_config &config)
SOFTWARE_LIST(config, "cass_list").set_original("bk0010");
}
-MACHINE_CONFIG_START(bk_state::bk0010fd)
+void bk_state::bk0010fd(machine_config &config)
+{
bk0010(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(bk0010fd_mem)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &bk_state::bk0010fd_mem);
+}
/* ROM definition */
diff --git a/src/mame/drivers/bking.cpp b/src/mame/drivers/bking.cpp
index 3e6917692ef..7243c7be871 100644
--- a/src/mame/drivers/bking.cpp
+++ b/src/mame/drivers/bking.cpp
@@ -42,7 +42,7 @@ WRITE8_MEMBER(bking_state::bking_sndnmi_enable_w)
WRITE8_MEMBER(bking_state::bking_soundlatch_w)
{
- m_soundlatch->write(space, offset, bitswap<8>(data, 0, 1, 2, 3, 4, 5, 6, 7));
+ m_soundlatch->write(bitswap<8>(data, 0, 1, 2, 3, 4, 5, 6, 7));
}
WRITE8_MEMBER(bking_state::bking3_addr_l_w)
@@ -389,33 +389,33 @@ MACHINE_RESET_MEMBER(bking_state,bking3)
m_addr_l = 0;
}
-MACHINE_CONFIG_START(bking_state::bking)
-
+void bking_state::bking(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("main_cpu", Z80, XTAL(12'000'000)/4) /* 3 MHz */
- MCFG_DEVICE_PROGRAM_MAP(bking_map)
- MCFG_DEVICE_IO_MAP(bking_io_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", bking_state, irq0_line_hold)
+ z80_device &maincpu(Z80(config, "main_cpu", XTAL(12'000'000)/4)); /* 3 MHz */
+ maincpu.set_addrmap(AS_PROGRAM, &bking_state::bking_map);
+ maincpu.set_addrmap(AS_IO, &bking_state::bking_io_map);
+ maincpu.set_vblank_int("screen", FUNC(bking_state::irq0_line_hold));
- MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(6'000'000)/2) /* 3 MHz */
- MCFG_DEVICE_PROGRAM_MAP(bking_audio_map)
+ Z80(config, m_audiocpu, XTAL(6'000'000)/2); /* 3 MHz */
+ m_audiocpu->set_addrmap(AS_PROGRAM, &bking_state::bking_audio_map);
/* interrupts (from Jungle King hardware, might be wrong): */
/* - no interrupts synced with vblank */
/* - NMI triggered by the main CPU */
/* - periodic IRQ, with frequency 6000000/(4*16*16*10*16) = 36.621 Hz, */
- MCFG_DEVICE_PERIODIC_INT_DRIVER(bking_state, irq0_line_hold, (double)6000000/(4*16*16*10*16))
+ m_audiocpu->set_periodic_int(FUNC(bking_state::irq0_line_hold), attotime::from_hz((double)6000000/(4*16*16*10*16)));
WATCHDOG_TIMER(config, "watchdog");
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(bking_state, screen_update_bking)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, bking_state, screen_vblank_bking))
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ m_screen->set_size(32*8, 32*8);
+ m_screen->set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
+ m_screen->set_screen_update(FUNC(bking_state::screen_update_bking));
+ m_screen->screen_vblank().set(FUNC(bking_state::screen_vblank_bking));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_bking);
PALETTE(config, m_palette, FUNC(bking_state::bking_palette), 4*8 + 4*4 + 4*2 + 4*2);
@@ -438,22 +438,22 @@ MACHINE_CONFIG_START(bking_state::bking)
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(bking_state::bking3)
+void bking_state::bking3(machine_config &config)
+{
bking(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("main_cpu")
- MCFG_DEVICE_IO_MAP(bking3_io_map)
+ subdevice<z80_device>("main_cpu")->set_addrmap(AS_IO, &bking_state::bking3_io_map);
- MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU, XTAL(3'000'000)) /* xtal is 3MHz, divided by 4 internally */
+ TAITO68705_MCU(config, m_bmcu, XTAL(3'000'000)); /* xtal is 3MHz, divided by 4 internally */
MCFG_MACHINE_START_OVERRIDE(bking_state,bking3)
MCFG_MACHINE_RESET_OVERRIDE(bking_state,bking3)
config.m_minimum_quantum = attotime::from_hz(6000);
-MACHINE_CONFIG_END
+}
/***************************************************************************
diff --git a/src/mame/drivers/blackt96.cpp b/src/mame/drivers/blackt96.cpp
index 58c2ca104f9..690fab53182 100644
--- a/src/mame/drivers/blackt96.cpp
+++ b/src/mame/drivers/blackt96.cpp
@@ -477,10 +477,11 @@ void blackt96_state::tile_callback(int &tile, int& fx, int& fy, int& region)
}
-MACHINE_CONFIG_START(blackt96_state::blackt96)
- MCFG_DEVICE_ADD("maincpu", M68000, 18000000 /2)
- MCFG_DEVICE_PROGRAM_MAP(blackt96_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", blackt96_state, irq1_line_hold)
+void blackt96_state::blackt96(machine_config &config)
+{
+ M68000(config, m_maincpu, 18000000 /2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &blackt96_state::blackt96_map);
+ m_maincpu->set_vblank_int("screen", FUNC(blackt96_state::irq1_line_hold));
pic16c57_device &audiocpu(PIC16C57(config, "audiocpu", 8000000)); /* ? */
audiocpu.write_a().set(FUNC(blackt96_state::blackt96_soundio_port_a_w));
@@ -491,14 +492,14 @@ MACHINE_CONFIG_START(blackt96_state::blackt96)
GFXDECODE(config, m_gfxdecode, m_palette, gfx_blackt96);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(256, 256)
-// MCFG_SCREEN_VISIBLE_AREA(0*8, 16*32-1, 0*8, 16*32-1)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 256-1, 2*8, 240-1)
- MCFG_SCREEN_UPDATE_DRIVER(blackt96_state, screen_update_blackt96)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(256, 256);
+// screen.set_visarea(0*8, 16*32-1, 0*8, 16*32-1);
+ screen.set_visarea(0*8, 256-1, 2*8, 240-1);
+ screen.set_screen_update(FUNC(blackt96_state::screen_update_blackt96));
+ screen.set_palette(m_palette);
PALETTE(config, m_palette).set_format(palette_device::xRGB_444, 0x800);
@@ -510,15 +511,15 @@ MACHINE_CONFIG_START(blackt96_state::blackt96)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("oki1", OKIM6295, 8000000/8, okim6295_device::PIN7_HIGH) // music
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.47)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.47)
- MCFG_DEVICE_ADDRESS_MAP(0, oki1_map)
+ OKIM6295(config, m_oki[0], 8000000/8, okim6295_device::PIN7_HIGH); // music
+ m_oki[0]->add_route(ALL_OUTPUTS, "lspeaker", 0.47);
+ m_oki[0]->add_route(ALL_OUTPUTS, "rspeaker", 0.47);
+ m_oki[0]->set_addrmap(0, &blackt96_state::oki1_map);
- MCFG_DEVICE_ADD("oki2", OKIM6295, 8000000/8, okim6295_device::PIN7_HIGH) // sfx
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.47)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.47)
-MACHINE_CONFIG_END
+ OKIM6295(config, m_oki[1], 8000000/8, okim6295_device::PIN7_HIGH); // sfx
+ m_oki[1]->add_route(ALL_OUTPUTS, "lspeaker", 0.47);
+ m_oki[1]->add_route(ALL_OUTPUTS, "rspeaker", 0.47);
+}
ROM_START( blackt96 )
diff --git a/src/mame/drivers/bladestl.cpp b/src/mame/drivers/bladestl.cpp
index 9642568b377..1897ab49c91 100644
--- a/src/mame/drivers/bladestl.cpp
+++ b/src/mame/drivers/bladestl.cpp
@@ -300,31 +300,31 @@ void bladestl_state::machine_reset()
for (i = 0; i < 4 ; i++)
m_last_track[i] = 0;
- m_soundlatch->acknowledge_w(machine().dummy_space(), 0, 0);
+ m_soundlatch->acknowledge_w();
}
-MACHINE_CONFIG_START(bladestl_state::bladestl)
-
+void bladestl_state::bladestl(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD(m_maincpu, HD6309E, XTAL(24'000'000) / 8) // divider not verified (from 007342 custom)
- MCFG_DEVICE_PROGRAM_MAP(main_map)
+ HD6309E(config, m_maincpu, XTAL(24'000'000) / 8); // divider not verified (from 007342 custom)
+ m_maincpu->set_addrmap(AS_PROGRAM, &bladestl_state::main_map);
TIMER(config, "scantimer").configure_scanline(FUNC(bladestl_state::bladestl_scanline), "screen", 0, 1);
- MCFG_DEVICE_ADD(m_audiocpu, MC6809E, XTAL(24'000'000) / 16)
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
+ MC6809E(config, m_audiocpu, XTAL(24'000'000) / 16);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &bladestl_state::sound_map);
config.m_minimum_quantum = attotime::from_hz(600);
WATCHDOG_TIMER(config, "watchdog");
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(bladestl_state, screen_update_bladestl)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ 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);
+ screen.set_screen_update(FUNC(bladestl_state::screen_update_bladestl));
+ screen.set_palette("palette");
GFXDECODE(config, m_gfxdecode, "palette", gfx_bladestl);
PALETTE(config, "palette", FUNC(bladestl_state::bladestl_palette)).set_format(palette_device::xBGR_555, 32 + 16*16, 32+16);
@@ -360,13 +360,10 @@ MACHINE_CONFIG_START(bladestl_state::bladestl)
ymsnd.add_route(2, "filter3", 0.45);
ymsnd.add_route(3, "mono", 0.45);
- MCFG_DEVICE_ADD(m_filter1, FILTER_RC)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
- MCFG_DEVICE_ADD(m_filter2, FILTER_RC)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
- MCFG_DEVICE_ADD(m_filter3, FILTER_RC)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
-MACHINE_CONFIG_END
+ FILTER_RC(config, m_filter1).add_route(ALL_OUTPUTS, "mono", 1.0);
+ FILTER_RC(config, m_filter2).add_route(ALL_OUTPUTS, "mono", 1.0);
+ FILTER_RC(config, m_filter3).add_route(ALL_OUTPUTS, "mono", 1.0);
+}
/*************************************
diff --git a/src/mame/drivers/blitz68k.cpp b/src/mame/drivers/blitz68k.cpp
index cb9ee10da3d..30df7046f1b 100644
--- a/src/mame/drivers/blitz68k.cpp
+++ b/src/mame/drivers/blitz68k.cpp
@@ -1720,24 +1720,25 @@ void blitz68k_state::ramdac_config(machine_config &config)
ramdac.set_addrmap(0, &blitz68k_state::ramdac_map);
}
-MACHINE_CONFIG_START(blitz68k_state::ilpag)
- MCFG_DEVICE_ADD(m_maincpu, M68000, 11059200 ) // ?
- MCFG_DEVICE_PROGRAM_MAP(ilpag_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", blitz68k_state, irq4_line_hold) //3 & 6 used, mcu comms?
-
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(512, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1)
- MCFG_SCREEN_UPDATE_DRIVER(blitz68k_state, screen_update_blitz68k)
+void blitz68k_state::ilpag(machine_config &config)
+{
+ M68000(config, m_maincpu, 11059200 ); // ?
+ m_maincpu->set_addrmap(AS_PROGRAM, &blitz68k_state::ilpag_map);
+ m_maincpu->set_vblank_int("screen", FUNC(blitz68k_state::irq4_line_hold)); //3 & 6 used, mcu comms?
+
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(512, 256);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(blitz68k_state::screen_update_blitz68k));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
ramdac_config(config);
MCFG_VIDEO_START_OVERRIDE(blitz68k_state,blitz68k)
-MACHINE_CONFIG_END
+}
/*
20089f = 1 -> menu
@@ -1777,29 +1778,30 @@ TIMER_DEVICE_CALLBACK_MEMBER(blitz68k_state::steaser_mcu_sim)
}
-MACHINE_CONFIG_START(blitz68k_state::steaser)
+void blitz68k_state::steaser(machine_config &config)
+{
ilpag(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(steaser_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", blitz68k_state, irq5_line_hold) //3, 4 & 6 used, mcu comms?
+ m_maincpu->set_addrmap(AS_PROGRAM, &blitz68k_state::steaser_map);
+ m_maincpu->set_vblank_int("screen", FUNC(blitz68k_state::irq5_line_hold)); //3, 4 & 6 used, mcu comms?
TIMER(config, "coinsim").configure_periodic(FUNC(blitz68k_state::steaser_mcu_sim), attotime::from_hz(10000));
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(blitz68k_state::cjffruit)
- MCFG_DEVICE_ADD(m_maincpu, M68000, XTAL(22'118'400)/2)
- MCFG_DEVICE_PROGRAM_MAP(cjffruit_map)
+void blitz68k_state::cjffruit(machine_config &config)
+{
+ M68000(config, m_maincpu, XTAL(22'118'400)/2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &blitz68k_state::cjffruit_map);
// MC68HC705C8P (Sound MCU)
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(512, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-8-1)
- MCFG_SCREEN_UPDATE_DRIVER(blitz68k_state, screen_update_blitz68k)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(512, 256);
+ screen.set_visarea(0, 512-1, 0, 256-8-1);
+ screen.set_screen_update(FUNC(blitz68k_state::screen_update_blitz68k));
R6545_1(config, m_crtc, XTAL(22'118'400)/8);
m_crtc->set_screen("screen");
@@ -1811,13 +1813,14 @@ MACHINE_CONFIG_START(blitz68k_state::cjffruit)
ramdac_config(config);
MCFG_VIDEO_START_OVERRIDE(blitz68k_state,blitz68k)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(blitz68k_state::bankrob)
- MCFG_DEVICE_ADD(m_maincpu, M68000, XTAL(11'059'200))
- MCFG_DEVICE_PROGRAM_MAP(bankrob_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", blitz68k_state, irq3_line_hold) // protection prevents correct irq frequency by crtc
+void blitz68k_state::bankrob(machine_config &config)
+{
+ M68000(config, m_maincpu, XTAL(11'059'200));
+ m_maincpu->set_addrmap(AS_PROGRAM, &blitz68k_state::bankrob_map);
+ m_maincpu->set_vblank_int("screen", FUNC(blitz68k_state::irq3_line_hold)); // protection prevents correct irq frequency by crtc
// irq 2 reads from MCUs
// MC68HC705C8P (MCU1)
@@ -1826,12 +1829,12 @@ MACHINE_CONFIG_START(blitz68k_state::bankrob)
// NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(512, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0+4, 256-1-4)
- MCFG_SCREEN_UPDATE_DRIVER(blitz68k_state, screen_update_blitz68k)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(512, 256);
+ screen.set_visarea(0, 512-1, 0+4, 256-1-4);
+ screen.set_screen_update(FUNC(blitz68k_state::screen_update_blitz68k));
H46505(config, m_crtc, XTAL(11'059'200)/4);
m_crtc->set_screen("screen");
@@ -1843,25 +1846,26 @@ MACHINE_CONFIG_START(blitz68k_state::bankrob)
ramdac_config(config);
MCFG_VIDEO_START_OVERRIDE(blitz68k_state,blitz68k)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(blitz68k_state::bankroba)
- MCFG_DEVICE_ADD(m_maincpu, M68000, XTAL(11'059'200) )
- MCFG_DEVICE_PROGRAM_MAP(bankroba_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", blitz68k_state, irq5_line_hold) // protection prevents correct irq frequency by crtc
+void blitz68k_state::bankroba(machine_config &config)
+{
+ M68000(config, m_maincpu, XTAL(11'059'200));
+ m_maincpu->set_addrmap(AS_PROGRAM, &blitz68k_state::bankroba_map);
+ m_maincpu->set_vblank_int("screen", FUNC(blitz68k_state::irq5_line_hold)); // protection prevents correct irq frequency by crtc
// irq 3,4 read from MCUs
// MC68HC705C8P (MCU)
// NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(512, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0+7, 256-1)
- MCFG_SCREEN_UPDATE_DRIVER(blitz68k_state, screen_update_blitz68k)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(512, 256);
+ screen.set_visarea(0, 512-1, 0+7, 256-1);
+ screen.set_screen_update(FUNC(blitz68k_state::screen_update_blitz68k));
H46505(config, m_crtc, XTAL(11'059'200)/4);
m_crtc->set_screen("screen");
@@ -1873,24 +1877,25 @@ MACHINE_CONFIG_START(blitz68k_state::bankroba)
ramdac_config(config);
MCFG_VIDEO_START_OVERRIDE(blitz68k_state,blitz68k_addr_factor1)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(blitz68k_state::deucesw2)
- MCFG_DEVICE_ADD(m_maincpu, M68000, XTAL(22'118'400) / 2)
- MCFG_DEVICE_PROGRAM_MAP(deucesw2_map)
+void blitz68k_state::deucesw2(machine_config &config)
+{
+ M68000(config, m_maincpu, XTAL(22'118'400) / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &blitz68k_state::deucesw2_map);
// irq 2 reads from MCUs
// MC68HC705C8P (MCU)
// NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(512, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1)
- MCFG_SCREEN_UPDATE_DRIVER(blitz68k_state, screen_update_blitz68k)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(512, 256);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(blitz68k_state::screen_update_blitz68k));
R6545_1(config, m_crtc, XTAL(22'118'400)/8);
m_crtc->set_screen("screen");
@@ -1902,13 +1907,14 @@ MACHINE_CONFIG_START(blitz68k_state::deucesw2)
ramdac_config(config);
MCFG_VIDEO_START_OVERRIDE(blitz68k_state,blitz68k)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(blitz68k_state::dualgame)
- MCFG_DEVICE_ADD(m_maincpu, M68000, XTAL(11'059'200) )
- MCFG_DEVICE_PROGRAM_MAP(dualgame_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", blitz68k_state, irq2_line_hold) // lev 2 = MCUs, lev 3 = vblank
+void blitz68k_state::dualgame(machine_config &config)
+{
+ M68000(config, m_maincpu, XTAL(11'059'200));
+ m_maincpu->set_addrmap(AS_PROGRAM, &blitz68k_state::dualgame_map);
+ m_maincpu->set_vblank_int("screen", FUNC(blitz68k_state::irq2_line_hold)); // lev 2 = MCUs, lev 3 = vblank
// MC68HC705C8P (MCU1)
@@ -1916,12 +1922,12 @@ MACHINE_CONFIG_START(blitz68k_state::dualgame)
// NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(512, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0+4, 256-1-4)
- MCFG_SCREEN_UPDATE_DRIVER(blitz68k_state, screen_update_blitz68k)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(512, 256);
+ screen.set_visarea(0, 512-1, 0+4, 256-1-4);
+ screen.set_screen_update(FUNC(blitz68k_state::screen_update_blitz68k));
H46505(config, m_crtc, XTAL(11'059'200)/4);
m_crtc->set_screen("screen");
@@ -1933,24 +1939,25 @@ MACHINE_CONFIG_START(blitz68k_state::dualgame)
ramdac_config(config);
MCFG_VIDEO_START_OVERRIDE(blitz68k_state,blitz68k)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(blitz68k_state::hermit)
- MCFG_DEVICE_ADD(m_maincpu, M68000, XTAL(22'118'400)/2 )
- MCFG_DEVICE_PROGRAM_MAP(hermit_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", blitz68k_state, irq1_line_hold) // protection prevents correct irq frequency by crtc
+void blitz68k_state::hermit(machine_config &config)
+{
+ M68000(config, m_maincpu, XTAL(22'118'400)/2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &blitz68k_state::hermit_map);
+ m_maincpu->set_vblank_int("screen", FUNC(blitz68k_state::irq1_line_hold)); // protection prevents correct irq frequency by crtc
// MC68HC705C8P (MCU)
// NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(512, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0+4, 256-1-4)
- MCFG_SCREEN_UPDATE_DRIVER(blitz68k_state, screen_update_blitz68k)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(512, 256);
+ screen.set_visarea(0, 512-1, 0+4, 256-1-4);
+ screen.set_screen_update(FUNC(blitz68k_state::screen_update_blitz68k));
H46505(config, m_crtc, XTAL(22'118'400)/8);
m_crtc->set_screen("screen");
@@ -1962,12 +1969,13 @@ MACHINE_CONFIG_START(blitz68k_state::hermit)
ramdac_config(config);
MCFG_VIDEO_START_OVERRIDE(blitz68k_state,blitz68k)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(blitz68k_state::maxidbl)
- MCFG_DEVICE_ADD(m_maincpu, M68000, XTAL(11'059'200))
- MCFG_DEVICE_PROGRAM_MAP(maxidbl_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", blitz68k_state, irq3_line_hold) // protection prevents correct irq frequency by crtc
+void blitz68k_state::maxidbl(machine_config &config)
+{
+ M68000(config, m_maincpu, XTAL(11'059'200));
+ m_maincpu->set_addrmap(AS_PROGRAM, &blitz68k_state::maxidbl_map);
+ m_maincpu->set_vblank_int("screen", FUNC(blitz68k_state::irq3_line_hold)); // protection prevents correct irq frequency by crtc
// irq 2 reads from MCUs
// MC68HC705C8P (MCU1)
@@ -1978,12 +1986,12 @@ MACHINE_CONFIG_START(blitz68k_state::maxidbl)
// NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(512, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1)
- MCFG_SCREEN_UPDATE_DRIVER(blitz68k_state, screen_update_blitz68k_noblit)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(512, 256);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(blitz68k_state::screen_update_blitz68k_noblit));
H46505(config, m_crtc, XTAL(11'059'200)/4);
m_crtc->set_screen("screen");
diff --git a/src/mame/drivers/blmbycar.cpp b/src/mame/drivers/blmbycar.cpp
index d2d83eaa0f2..827c4be384f 100644
--- a/src/mame/drivers/blmbycar.cpp
+++ b/src/mame/drivers/blmbycar.cpp
@@ -364,24 +364,24 @@ MACHINE_RESET_MEMBER(blmbycar_state,blmbycar)
}
-MACHINE_CONFIG_START(blmbycar_state::blmbycar)
-
+void blmbycar_state::blmbycar(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(24'000'000)/2) /* 12MHz */
- MCFG_DEVICE_PROGRAM_MAP(blmbycar_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", blmbycar_state, irq1_line_hold)
+ M68000(config, m_maincpu, XTAL(24'000'000)/2); /* 12MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &blmbycar_state::blmbycar_map);
+ m_maincpu->set_vblank_int("screen", FUNC(blmbycar_state::irq1_line_hold));
MCFG_MACHINE_START_OVERRIDE(blmbycar_state,blmbycar)
MCFG_MACHINE_RESET_OVERRIDE(blmbycar_state,blmbycar)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(0x180, 0x100)
- MCFG_SCREEN_VISIBLE_AREA(0, 0x180-1, 0, 0x100-1)
- MCFG_SCREEN_UPDATE_DRIVER(blmbycar_state, screen_update)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(0x180, 0x100);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(blmbycar_state::screen_update));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_blmbycar);
@@ -394,10 +394,10 @@ MACHINE_CONFIG_START(blmbycar_state::blmbycar)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(1'000'000), okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified
- MCFG_DEVICE_ADDRESS_MAP(0, blmbycar_oki_map)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
-MACHINE_CONFIG_END
+ okim6295_device &oki(OKIM6295(config, "oki", XTAL(1'000'000), okim6295_device::PIN7_HIGH)); // clock frequency & pin 7 not verified
+ oki.set_addrmap(0, &blmbycar_state::blmbycar_oki_map);
+ oki.add_route(ALL_OUTPUTS, "mono", 1.0);
+}
MACHINE_START_MEMBER(blmbycar_state,watrball)
@@ -412,21 +412,21 @@ MACHINE_RESET_MEMBER(blmbycar_state,watrball)
m_retvalue = 0;
}
-MACHINE_CONFIG_START(blmbycar_state::watrball)
+void blmbycar_state::watrball(machine_config &config)
+{
blmbycar(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(watrball_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &blmbycar_state::watrball_map);
MCFG_MACHINE_START_OVERRIDE(blmbycar_state,watrball)
MCFG_MACHINE_RESET_OVERRIDE(blmbycar_state,watrball)
/* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_VISIBLE_AREA(0, 0x180-1, 16, 0x100-1)
-MACHINE_CONFIG_END
+ screen_device &screen(*subdevice<screen_device>("screen"));
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_visarea(0, 0x180-1, 16, 0x100-1);
+}
/***************************************************************************
diff --git a/src/mame/drivers/blockout.cpp b/src/mame/drivers/blockout.cpp
index 9ffdb8bde97..e3a4b9fc722 100644
--- a/src/mame/drivers/blockout.cpp
+++ b/src/mame/drivers/blockout.cpp
@@ -304,26 +304,25 @@ TIMER_DEVICE_CALLBACK_MEMBER(blockout_state::blockout_scanline)
m_maincpu->set_input_line(5, ASSERT_LINE);
}
-MACHINE_CONFIG_START(blockout_state::blockout)
-
+void blockout_state::blockout(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, MAIN_CLOCK) /* MRH - 8.76 makes gfx/adpcm samples sync better -- but 10 is correct speed*/
- MCFG_DEVICE_PROGRAM_MAP(main_map)
+ M68000(config, m_maincpu, MAIN_CLOCK); /* MRH - 8.76 makes gfx/adpcm samples sync better -- but 10 is correct speed*/
+ m_maincpu->set_addrmap(AS_PROGRAM, &blockout_state::main_map);
TIMER(config, "scantimer").configure_scanline(FUNC(blockout_state::blockout_scanline), "screen", 0, 1);
- MCFG_DEVICE_ADD("audiocpu", Z80, AUDIO_CLOCK) /* 3.579545 MHz */
- MCFG_DEVICE_PROGRAM_MAP(audio_map)
+ Z80(config, m_audiocpu, AUDIO_CLOCK); /* 3.579545 MHz */
+ m_audiocpu->set_addrmap(AS_PROGRAM, &blockout_state::audio_map);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
/* assume same as ddragon3 with adjusted visible display area */
- MCFG_SCREEN_RAW_PARAMS(XTAL(28'000'000) / 4, 448, 0, 320, 272, 10, 250)
- MCFG_SCREEN_UPDATE_DRIVER(blockout_state, screen_update_blockout)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_PALETTE_ADD("palette", 513)
+ m_screen->set_raw(XTAL(28'000'000) / 4, 448, 0, 320, 272, 10, 250);
+ m_screen->set_screen_update(FUNC(blockout_state::screen_update_blockout));
+ m_screen->set_palette(m_palette);
+ PALETTE(config, m_palette).set_entries(513);
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
@@ -337,16 +336,16 @@ MACHINE_CONFIG_START(blockout_state::blockout)
ymsnd.add_route(0, "lspeaker", 0.60);
ymsnd.add_route(1, "rspeaker", 0.60);
- MCFG_DEVICE_ADD("oki", OKIM6295, 1056000, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50)
-MACHINE_CONFIG_END
+ okim6295_device &oki(OKIM6295(config, "oki", 1056000, okim6295_device::PIN7_HIGH));
+ oki.add_route(ALL_OUTPUTS, "lspeaker", 0.50);
+ oki.add_route(ALL_OUTPUTS, "rspeaker", 0.50);
+}
-MACHINE_CONFIG_START(blockout_state::agress)
+void blockout_state::agress(machine_config &config)
+{
blockout(config);
- MCFG_DEVICE_MODIFY( "maincpu" )
- MCFG_DEVICE_PROGRAM_MAP(agress_map)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &blockout_state::agress_map);
+}
/*************************************
*
diff --git a/src/mame/drivers/blocktax.cpp b/src/mame/drivers/blocktax.cpp
index 396213fb843..1b43e664755 100644
--- a/src/mame/drivers/blocktax.cpp
+++ b/src/mame/drivers/blocktax.cpp
@@ -73,24 +73,24 @@ void blocktax_state::blocktax_map(address_map &map)
static INPUT_PORTS_START( blocktax )
INPUT_PORTS_END
-MACHINE_CONFIG_START(blocktax_state::blocktax)
- MCFG_DEVICE_ADD("maincpu", I80C51, 30_MHz_XTAL/2) /* P89C51RD2HBA (80C51 with internal flash rom) */
+void blocktax_state::blocktax(machine_config &config)
+{
+ I80C51(config, m_maincpu, 30_MHz_XTAL/2); /* P89C51RD2HBA (80C51 with internal flash rom) */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(blocktax_state, screen_update_blocktax)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(0*8, 32*8-1, 0*8, 32*8-1);
+ screen.set_screen_update(FUNC(blocktax_state::screen_update_blocktax));
+ screen.set_palette("palette");
PALETTE(config, "palette").set_format(palette_device::xRGB_555, 0x200);
SPEAKER(config, "speaker").front_center();
- MCFG_DEVICE_ADD("oki", OKIM6295, 30_MHz_XTAL/16, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.00)
-MACHINE_CONFIG_END
+ OKIM6295(config, "oki", 30_MHz_XTAL/16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "speaker", 1.00); // clock frequency & pin 7 not verified
+}
ROM_START( blocktax )
ROM_REGION( 0x10000, "maincpu", 0 ) /* Internal MCU Flash */
diff --git a/src/mame/drivers/blstroid.cpp b/src/mame/drivers/blstroid.cpp
index bbbeb3f719c..2cb3789e2f1 100644
--- a/src/mame/drivers/blstroid.cpp
+++ b/src/mame/drivers/blstroid.cpp
@@ -175,11 +175,11 @@ GFXDECODE_END
*
*************************************/
-MACHINE_CONFIG_START(blstroid_state::blstroid)
-
+void blstroid_state::blstroid(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, ATARI_CLOCK_14MHz/2)
- MCFG_DEVICE_PROGRAM_MAP(main_map)
+ M68000(config, m_maincpu, ATARI_CLOCK_14MHz/2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &blstroid_state::main_map);
EEPROM_2804(config, "eeprom").lock_after_write(true);
@@ -190,19 +190,19 @@ MACHINE_CONFIG_START(blstroid_state::blstroid)
PALETTE(config, "palette").set_format(palette_device::xRGB_555, 512);
- MCFG_TILEMAP_ADD_STANDARD("playfield", "gfxdecode", 2, blstroid_state, get_playfield_tile_info, 16,8, SCAN_ROWS, 64,64)
+ TILEMAP(config, m_playfield_tilemap, m_gfxdecode, 2, 16,8, TILEMAP_SCAN_ROWS, 64,64).set_info_callback(FUNC(blstroid_state::get_playfield_tile_info));
ATARI_MOTION_OBJECTS(config, m_mob, 0, m_screen, blstroid_state::s_mob_config);
m_mob->set_gfxdecode(m_gfxdecode);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
/* note: these parameters are from published specs, not derived */
/* the board uses an SOS-2 chip to generate video signals */
- MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz, 456*2, 0, 320*2, 262, 0, 240)
- MCFG_SCREEN_UPDATE_DRIVER(blstroid_state, screen_update_blstroid)
- MCFG_SCREEN_PALETTE("palette")
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, blstroid_state, video_int_write_line))
+ m_screen->set_raw(ATARI_CLOCK_14MHz, 456*2, 0, 320*2, 262, 0, 240);
+ m_screen->set_screen_update(FUNC(blstroid_state::screen_update_blstroid));
+ m_screen->set_palette("palette");
+ m_screen->screen_vblank().set(FUNC(blstroid_state::video_int_write_line));
MCFG_VIDEO_START_OVERRIDE(blstroid_state,blstroid)
@@ -217,7 +217,7 @@ MACHINE_CONFIG_START(blstroid_state::blstroid)
m_jsa->add_route(1, "rspeaker", 1.0);
config.device_remove("jsa:pokey");
config.device_remove("jsa:tms");
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/blueprnt.cpp b/src/mame/drivers/blueprnt.cpp
index b579f2f0c9e..b99d4516e5b 100644
--- a/src/mame/drivers/blueprnt.cpp
+++ b/src/mame/drivers/blueprnt.cpp
@@ -85,7 +85,7 @@ READ8_MEMBER(blueprnt_state::grasspin_sh_dipsw_r)
WRITE8_MEMBER(blueprnt_state::blueprnt_sound_command_w)
{
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
@@ -346,17 +346,17 @@ void blueprnt_state::machine_reset()
}
-MACHINE_CONFIG_START(blueprnt_state::blueprnt)
-
+void blueprnt_state::blueprnt(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 7000000/2) // 3.5 MHz
- MCFG_DEVICE_PROGRAM_MAP(blueprnt_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", blueprnt_state, irq0_line_hold)
-
- MCFG_DEVICE_ADD("audiocpu", Z80, 10000000/2/2/2) // 1.25 MHz (2H)
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
- MCFG_DEVICE_IO_MAP(sound_io)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(blueprnt_state, irq0_line_hold, 4*60) // IRQs connected to 32V
+ Z80(config, m_maincpu, 7000000/2); // 3.5 MHz
+ m_maincpu->set_addrmap(AS_PROGRAM, &blueprnt_state::blueprnt_map);
+ m_maincpu->set_vblank_int("screen", FUNC(blueprnt_state::irq0_line_hold));
+
+ Z80(config, m_audiocpu, 10000000/2/2/2); // 1.25 MHz (2H)
+ m_audiocpu->set_addrmap(AS_PROGRAM, &blueprnt_state::sound_map);
+ m_audiocpu->set_addrmap(AS_IO, &blueprnt_state::sound_io);
+ m_audiocpu->set_periodic_int(FUNC(blueprnt_state::irq0_line_hold), attotime::from_hz(4*60)); // IRQs connected to 32V
// NMIs are caused by the main CPU
config.m_perfect_cpu_quantum = subtag("maincpu");
@@ -364,14 +364,15 @@ MACHINE_CONFIG_START(blueprnt_state::blueprnt)
WATCHDOG_TIMER(config, "watchdog");
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ 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);
+ screen.set_screen_update(FUNC(blueprnt_state::screen_update_blueprnt));
+ screen.set_palette(m_palette);
+
MCFG_VIDEO_START_OVERRIDE(blueprnt_state, blueprnt)
- MCFG_SCREEN_UPDATE_DRIVER(blueprnt_state, screen_update_blueprnt)
- MCFG_SCREEN_PALETTE(m_palette)
GFXDECODE(config, m_gfxdecode, m_palette, gfx_blueprnt);
PALETTE(config, m_palette, FUNC(blueprnt_state::blueprnt_palette), 128*4+8);
@@ -390,15 +391,15 @@ MACHINE_CONFIG_START(blueprnt_state::blueprnt)
ay2.port_a_read_callback().set_ioport("DILSW1");
ay2.port_b_read_callback().set_ioport("DILSW2");
ay2.add_route(ALL_OUTPUTS, "mono", 0.25);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(blueprnt_state::grasspin)
+void blueprnt_state::grasspin(machine_config &config)
+{
blueprnt(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(grasspin_map)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &blueprnt_state::grasspin_map);
+}
/*************************************
*
diff --git a/src/mame/drivers/blw700i.cpp b/src/mame/drivers/blw700i.cpp
index 088a1d60ff0..8fec247e2b5 100644
--- a/src/mame/drivers/blw700i.cpp
+++ b/src/mame/drivers/blw700i.cpp
@@ -268,19 +268,20 @@ static INPUT_PORTS_START( lw700i )
INPUT_PORTS_END
-MACHINE_CONFIG_START(lw700i_state::lw700i)
- MCFG_DEVICE_ADD("maincpu", H83003, XTAL(16'000'000))
- MCFG_DEVICE_PROGRAM_MAP(main_map)
- MCFG_DEVICE_IO_MAP(io_map)
+void lw700i_state::lw700i(machine_config &config)
+{
+ H83003(config, m_maincpu, XTAL(16'000'000));
+ m_maincpu->set_addrmap(AS_PROGRAM, &lw700i_state::main_map);
+ m_maincpu->set_addrmap(AS_IO, &lw700i_state::io_map);
TIMER(config, "scantimer").configure_scanline(FUNC(lw700i_state::vbl_interrupt), "screen", 0, 1);
- MCFG_SCREEN_ADD("screen", LCD)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_UPDATE_DRIVER(lw700i_state, screen_update)
- MCFG_SCREEN_SIZE(640, 400)
- MCFG_SCREEN_VISIBLE_AREA(0, 480, 0, 128)
-MACHINE_CONFIG_END
+ SCREEN(config, m_screen, SCREEN_TYPE_LCD);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ m_screen->set_screen_update(FUNC(lw700i_state::screen_update));
+ m_screen->set_size(640, 400);
+ m_screen->set_visarea(0, 480, 0, 128);
+}
ROM_START(blw700i)
ROM_REGION(0x200000, "maincpu", 0) /* H8/3003 program ROM */
diff --git a/src/mame/drivers/bmjr.cpp b/src/mame/drivers/bmjr.cpp
index 3433b79859f..a1bee2628d3 100644
--- a/src/mame/drivers/bmjr.cpp
+++ b/src/mame/drivers/bmjr.cpp
@@ -337,21 +337,22 @@ void bmjr_state::machine_reset()
m_cass->change_state(CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR);
}
-MACHINE_CONFIG_START(bmjr_state::bmjr)
+void bmjr_state::bmjr(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu",M6800, XTAL(4'000'000)/4) //unknown clock / divider
- MCFG_DEVICE_PROGRAM_MAP(bmjr_mem)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", bmjr_state, irq0_line_hold)
+ M6800(config, m_maincpu, XTAL(4'000'000)/4); //unknown clock / divider
+ m_maincpu->set_addrmap(AS_PROGRAM, &bmjr_state::bmjr_mem);
+ m_maincpu->set_vblank_int("screen", FUNC(bmjr_state::irq0_line_hold));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(256, 192)
- MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0, 192-1)
- MCFG_SCREEN_UPDATE_DRIVER(bmjr_state, screen_update_bmjr)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_size(256, 192);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(bmjr_state::screen_update_bmjr));
+ screen.set_palette("palette");
PALETTE(config, "palette", palette_device::BRG_3BIT);
GFXDECODE(config, "gfxdecode", "palette", gfx_bmjr);
@@ -363,7 +364,7 @@ MACHINE_CONFIG_START(bmjr_state::bmjr)
/* Devices */
CASSETTE(config, m_cass);
-MACHINE_CONFIG_END
+}
/* ROM definition */
ROM_START( bmjr )
diff --git a/src/mame/drivers/bml3.cpp b/src/mame/drivers/bml3.cpp
index fb6a85e44d6..1764a848202 100644
--- a/src/mame/drivers/bml3.cpp
+++ b/src/mame/drivers/bml3.cpp
@@ -939,21 +939,22 @@ static void bml3_cards(device_slot_interface &device)
}
-MACHINE_CONFIG_START(bml3_state::bml3_common)
+void bml3_state::bml3_common(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD(m_maincpu, MC6809, CPU_EXT_CLOCK)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", bml3_state, bml3_timer_firq)
-// MCFG_DEVICE_PERIODIC_INT_DRIVER(bml3_state, bml3_firq, 45)
+ MC6809(config, m_maincpu, CPU_EXT_CLOCK);
+ m_maincpu->set_vblank_int("screen", FUNC(bml3_state::bml3_timer_firq));
+// m_maincpu->set_periodic_int(FUNC(bml3_state::bml3_firq), attotime::fromhz(45));
// MCFG_MACHINE_RESET_OVERRIDE(bml3_state,bml3)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2400)) /* Service manual specifies "Raster return period" as 2.4 ms (p.64), although the total vertical non-displaying time seems to be 4 ms. */
- MCFG_SCREEN_SIZE(640, 400)
- MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 200-1)
- MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2400)); /* Service manual specifies "Raster return period" as 2.4 ms (p.64), although the total vertical non-displaying time seems to be 4 ms. */
+ screen.set_size(640, 400);
+ screen.set_visarea(0, 320-1, 0, 200-1);
+ screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update));
PALETTE(config, m_palette, palette_device::BRG_3BIT);
/* Devices */
@@ -1000,19 +1001,18 @@ MACHINE_CONFIG_START(bml3_state::bml3_common)
User may want to switch this to MP-1802 (5.25" DS/DD).
Note it isn't feasible to use both, as they each place boot ROM at F800.
*/
- MCFG_BML3BUS_SLOT_ADD("bml3bus", "sl1", bml3_cards, "bml3mp1805")
- MCFG_BML3BUS_SLOT_ADD("bml3bus", "sl2", bml3_cards, nullptr)
- MCFG_BML3BUS_SLOT_ADD("bml3bus", "sl3", bml3_cards, nullptr)
- MCFG_BML3BUS_SLOT_ADD("bml3bus", "sl4", bml3_cards, nullptr)
- MCFG_BML3BUS_SLOT_ADD("bml3bus", "sl5", bml3_cards, nullptr)
- MCFG_BML3BUS_SLOT_ADD("bml3bus", "sl6", bml3_cards, "bml3kanji")
-
-MACHINE_CONFIG_END
+ BML3BUS_SLOT(config, "sl1", "bml3bus", bml3_cards, "bml3mp1805");
+ BML3BUS_SLOT(config, "sl2", "bml3bus", bml3_cards, nullptr);
+ BML3BUS_SLOT(config, "sl3", "bml3bus", bml3_cards, nullptr);
+ BML3BUS_SLOT(config, "sl4", "bml3bus", bml3_cards, nullptr);
+ BML3BUS_SLOT(config, "sl5", "bml3bus", bml3_cards, nullptr);
+ BML3BUS_SLOT(config, "sl6", "bml3bus", bml3_cards, "bml3kanji");
+}
-MACHINE_CONFIG_START(bml3_state::bml3)
+void bml3_state::bml3(machine_config &config)
+{
bml3_common(config);
- MCFG_DEVICE_MODIFY( "maincpu" )
- MCFG_DEVICE_PROGRAM_MAP(bml3_mem)
+ m_maincpu->set_addrmap(AS_PROGRAM, &bml3_state::bml3_mem);
#if 0
// TODO: slot device for sound card
@@ -1024,23 +1024,23 @@ MACHINE_CONFIG_START(bml3_state::bml3)
m_ym2203->add_route(2, "mono", 0.50);
m_ym2203->add_route(3, "mono", 0.50);
#endif
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(bml3_state::bml3mk2)
+void bml3_state::bml3mk2(machine_config &config)
+{
bml3_common(config);
- MCFG_DEVICE_MODIFY( "maincpu" )
- MCFG_DEVICE_PROGRAM_MAP(bml3mk2_mem)
+ m_maincpu->set_addrmap(AS_PROGRAM, &bml3_state::bml3mk2_mem);
// TODO: anything to add here?
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(bml3_state::bml3mk5)
+void bml3_state::bml3mk5(machine_config &config)
+{
bml3_common(config);
- MCFG_DEVICE_MODIFY( "maincpu" )
- MCFG_DEVICE_PROGRAM_MAP(bml3mk5_mem)
+ m_maincpu->set_addrmap(AS_PROGRAM, &bml3_state::bml3mk5_mem);
// TODO: anything to add here?
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/bnstars.cpp b/src/mame/drivers/bnstars.cpp
index b0fca21dd6d..62be3100cf4 100644
--- a/src/mame/drivers/bnstars.cpp
+++ b/src/mame/drivers/bnstars.cpp
@@ -809,17 +809,17 @@ void bnstars_state::bnstars_sound_map(address_map &map)
}
-MACHINE_CONFIG_START(bnstars_state::bnstars)
-
+void bnstars_state::bnstars(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", V70, 20000000) // 20MHz
- MCFG_DEVICE_PROGRAM_MAP(bnstars_map)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(ms32_state,irq_callback)
+ V70(config, m_maincpu, 20000000); // 20MHz
+ m_maincpu->set_addrmap(AS_PROGRAM, &bnstars_state::bnstars_map);
+ m_maincpu->set_irq_acknowledge_callback(FUNC(ms32_state::irq_callback));
TIMER(config, "scantimer").configure_scanline(FUNC(bnstars_state::ms32_interrupt), "lscreen", 0, 1);
- MCFG_DEVICE_ADD("audiocpu", Z80, 4000000) // Unverified; it's possibly higher than 4MHz
- MCFG_DEVICE_PROGRAM_MAP(bnstars_sound_map)
+ Z80(config, m_audiocpu, 4000000); // Unverified; it's possibly higher than 4MHz
+ m_audiocpu->set_addrmap(AS_PROGRAM, &bnstars_state::bnstars_sound_map);
config.m_minimum_quantum = attotime::from_hz(60000);
@@ -835,21 +835,21 @@ MACHINE_CONFIG_START(bnstars_state::bnstars)
config.set_default_layout(layout_dualhsxs);
- MCFG_SCREEN_ADD("lscreen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(40*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 28*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(bnstars_state, screen_update_bnstars_left)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &lscreen(SCREEN(config, "lscreen", SCREEN_TYPE_RASTER));
+ lscreen.set_refresh_hz(60);
+ lscreen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ lscreen.set_size(40*8, 32*8);
+ lscreen.set_visarea(0*8, 40*8-1, 0*8, 28*8-1);
+ lscreen.set_screen_update(FUNC(bnstars_state::screen_update_bnstars_left));
+ lscreen.set_palette("palette");
- MCFG_SCREEN_ADD("rscreen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(40*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 28*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(bnstars_state, screen_update_bnstars_right)
- MCFG_SCREEN_PALETTE("palette2")
+ screen_device &rscreen(SCREEN(config, "rscreen", SCREEN_TYPE_RASTER));
+ rscreen.set_refresh_hz(60);
+ rscreen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ rscreen.set_size(40*8, 32*8);
+ rscreen.set_visarea(0*8, 40*8-1, 0*8, 28*8-1);
+ rscreen.set_screen_update(FUNC(bnstars_state::screen_update_bnstars_right));
+ rscreen.set_palette("palette2");
/* sound hardware */
@@ -859,19 +859,18 @@ MACHINE_CONFIG_START(bnstars_state::bnstars)
GENERIC_LATCH_8(config, m_soundlatch);
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI);
- MCFG_DEVICE_ADD("ymf1", YMF271, 16934400)
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
-// MCFG_SOUND_ROUTE(2, "lspeaker", 1.0) Output 2/3 not used?
-// MCFG_SOUND_ROUTE(3, "rspeaker", 1.0)
-
- MCFG_DEVICE_ADD("ymf2", YMF271, 16934400)
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
-// MCFG_SOUND_ROUTE(2, "lspeaker", 1.0) Output 2/3 not used?
-// MCFG_SOUND_ROUTE(3, "rspeaker", 1.0)
-
-MACHINE_CONFIG_END
+ ymf271_device &ymf1(YMF271(config, "ymf1", 16934400));
+ ymf1.add_route(0, "lspeaker", 1.0);
+ ymf1.add_route(1, "rspeaker", 1.0);
+// ymf1.add_route(2, "lspeaker", 1.0); Output 2/3 not used?
+// ymf1.add_route(3, "rspeaker", 1.0);
+
+ ymf271_device &ymf2(YMF271(config, "ymf2", 16934400));
+ ymf2.add_route(0, "lspeaker", 1.0);
+ ymf2.add_route(1, "rspeaker", 1.0);
+// ymf2.add_route(2, "lspeaker", 1.0); Output 2/3 not used?
+// ymf2.add_route(3, "rspeaker", 1.0);
+}
ROM_START( bnstars1 )
diff --git a/src/mame/drivers/bntyhunt.cpp b/src/mame/drivers/bntyhunt.cpp
index 780947f4050..d77a0ee1e28 100644
--- a/src/mame/drivers/bntyhunt.cpp
+++ b/src/mame/drivers/bntyhunt.cpp
@@ -53,22 +53,23 @@ static INPUT_PORTS_START( bntyhunt )
INPUT_PORTS_END
-MACHINE_CONFIG_START(bntyhunt_state::bntyhunt)
+void bntyhunt_state::bntyhunt(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", PENTIUM, 200000000) /* Probably a Pentium or higher .. ?? Mhz*/
- MCFG_DEVICE_PROGRAM_MAP(bntyhunt_map)
+ PENTIUM(config, m_maincpu, 200000000); /* Probably a Pentium or higher .. ?? Mhz*/
+ m_maincpu->set_addrmap(AS_PROGRAM, &bntyhunt_state::bntyhunt_map);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_UPDATE_DRIVER(bntyhunt_state, screen_update)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0*8, 32*8-1)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_PALETTE_ADD("palette", 0x100)
-MACHINE_CONFIG_END
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_screen_update(FUNC(bntyhunt_state::screen_update));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea_full();
+ screen.set_palette("palette");
+
+ PALETTE(config, "palette").set_entries(0x100);
+}
ROM_START(bntyhunt)
diff --git a/src/mame/drivers/bogeyman.cpp b/src/mame/drivers/bogeyman.cpp
index 806df1a1e95..2b93e910767 100644
--- a/src/mame/drivers/bogeyman.cpp
+++ b/src/mame/drivers/bogeyman.cpp
@@ -229,24 +229,24 @@ WRITE8_MEMBER(bogeyman_state::colbank_w)
}
}
-MACHINE_CONFIG_START(bogeyman_state::bogeyman)
-
+void bogeyman_state::bogeyman(machine_config &config)
+{
// basic machine hardware
- MCFG_DEVICE_ADD("maincpu", M6502, 1500000) /* Verified */
- MCFG_DEVICE_PROGRAM_MAP(bogeyman_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(bogeyman_state, irq0_line_hold, 16*60) // Controls sound
+ M6502(config, m_maincpu, 1500000); /* Verified */
+ m_maincpu->set_addrmap(AS_PROGRAM, &bogeyman_state::bogeyman_map);
+ m_maincpu->set_periodic_int(FUNC(bogeyman_state::irq0_line_hold), attotime::from_hz(16*60)); // Controls sound
// video hardware
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
-// MCFG_SCREEN_REFRESH_RATE(60)
-// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
-// MCFG_SCREEN_SIZE(32*8, 32*8)
-// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
+// screen.set_refresh_hz(60);
+// screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+// screen.set_size(32*8, 32*8);
+// screen.set_visarea(0*8, 32*8-1, 1*8, 31*8-1);
// DECO video CRTC, unverified
- MCFG_SCREEN_RAW_PARAMS(XTAL(12'000'000)/2,384,0,256,272,8,248)
- MCFG_SCREEN_UPDATE_DRIVER(bogeyman_state, screen_update)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen.set_raw(XTAL(12'000'000)/2,384,0,256,272,8,248);
+ screen.set_screen_update(FUNC(bogeyman_state::screen_update));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_bogeyman);
PALETTE(config, m_palette, FUNC(bogeyman_state::bogeyman_palette)).set_format(palette_device::BGR_233_inverted, 16 + 256);
@@ -260,7 +260,7 @@ MACHINE_CONFIG_START(bogeyman_state::bogeyman)
m_ay1->add_route(ALL_OUTPUTS, "mono", 0.30);
YM2149(config, m_ay2, 1500000).add_route(ALL_OUTPUTS, "mono", 0.30); /* Verified */
-MACHINE_CONFIG_END
+}
/* ROMs */
diff --git a/src/mame/drivers/bombjack.cpp b/src/mame/drivers/bombjack.cpp
index f9874712a8b..c884dc89d10 100644
--- a/src/mame/drivers/bombjack.cpp
+++ b/src/mame/drivers/bombjack.cpp
@@ -110,9 +110,9 @@ READ8_MEMBER(bombjack_state::soundlatch_read_and_clear)
{
// An extra flip-flop is used to clear the LS273 after reading it through a LS245
// (this flip-flop is then cleared in sync with the sound CPU clock)
- uint8_t res = m_soundlatch->read(space, 0);
+ uint8_t res = m_soundlatch->read();
if (!machine().side_effects_disabled())
- m_soundlatch->clear_w(space, 0, 0);
+ m_soundlatch->clear_w();
return res;
}
diff --git a/src/mame/drivers/boogwing.cpp b/src/mame/drivers/boogwing.cpp
index 689c35361e0..177c93873d8 100644
--- a/src/mame/drivers/boogwing.cpp
+++ b/src/mame/drivers/boogwing.cpp
@@ -336,13 +336,13 @@ DECO16IC_BANK_CB_MEMBER(boogwing_state::bank_callback2)
return offset;
}
-MACHINE_CONFIG_START(boogwing_state::boogwing)
-
+void boogwing_state::boogwing(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, MAIN_XTAL/2) /* DE102 */
- MCFG_DEVICE_PROGRAM_MAP(boogwing_map)
- MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", boogwing_state, irq6_line_hold)
+ M68000(config, m_maincpu, MAIN_XTAL/2); /* DE102 */
+ m_maincpu->set_addrmap(AS_PROGRAM, &boogwing_state::boogwing_map);
+ m_maincpu->set_addrmap(AS_OPCODES, &boogwing_state::decrypted_opcodes_map);
+ m_maincpu->set_vblank_int("screen", FUNC(boogwing_state::irq6_line_hold));
H6280(config, m_audiocpu, SOUND_XTAL/4);
m_audiocpu->set_addrmap(AS_PROGRAM, &boogwing_state::audio_map);
@@ -350,19 +350,18 @@ MACHINE_CONFIG_START(boogwing_state::boogwing)
m_audiocpu->add_route(ALL_OUTPUTS, "rspeaker", 0);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(MAIN_XTAL / 4, 442, 0, 320, 274, 8, 248) // same as robocop2(cninja.cpp)? verify this from real pcb.
- MCFG_SCREEN_UPDATE_DRIVER(boogwing_state, screen_update_boogwing)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(MAIN_XTAL / 4, 442, 0, 320, 274, 8, 248); // same as robocop2(cninja.cpp)? verify this from real pcb.
+ screen.set_screen_update(FUNC(boogwing_state::screen_update_boogwing));
GFXDECODE(config, "gfxdecode", m_deco_ace, gfx_boogwing);
- MCFG_DEVICE_ADD("spriteram1", BUFFERED_SPRITERAM16)
- MCFG_DEVICE_ADD("spriteram2", BUFFERED_SPRITERAM16)
+ BUFFERED_SPRITERAM16(config, m_spriteram[0]);
+ BUFFERED_SPRITERAM16(config, m_spriteram[1]);
DECO_ACE(config, m_deco_ace, 0);
DECO16IC(config, m_deco_tilegen[0], 0);
- m_deco_tilegen[0]->set_split(0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
@@ -378,7 +377,6 @@ MACHINE_CONFIG_START(boogwing_state::boogwing)
m_deco_tilegen[0]->set_gfxdecode_tag("gfxdecode");
DECO16IC(config, m_deco_tilegen[1], 0);
- m_deco_tilegen[1]->set_split(0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
@@ -419,14 +417,14 @@ MACHINE_CONFIG_START(boogwing_state::boogwing)
ymsnd.add_route(0, "lspeaker", 0.80);
ymsnd.add_route(1, "rspeaker", 0.80);
- MCFG_DEVICE_ADD("oki1", OKIM6295, SOUND_XTAL/32, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.40)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.40)
+ OKIM6295(config, m_oki[0], SOUND_XTAL/32, okim6295_device::PIN7_HIGH);
+ m_oki[0]->add_route(ALL_OUTPUTS, "lspeaker", 1.40);
+ m_oki[0]->add_route(ALL_OUTPUTS, "rspeaker", 1.40);
- MCFG_DEVICE_ADD("oki2", OKIM6295, SOUND_XTAL/16, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.30)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.30)
-MACHINE_CONFIG_END
+ OKIM6295(config, m_oki[1], SOUND_XTAL/16, okim6295_device::PIN7_HIGH);
+ m_oki[1]->add_route(ALL_OUTPUTS, "lspeaker", 0.30);
+ m_oki[1]->add_route(ALL_OUTPUTS, "rspeaker", 0.30);
+}
/**********************************************************************************/
diff --git a/src/mame/drivers/bottom9.cpp b/src/mame/drivers/bottom9.cpp
index 15e3c7f6167..a03988f867a 100644
--- a/src/mame/drivers/bottom9.cpp
+++ b/src/mame/drivers/bottom9.cpp
@@ -90,7 +90,7 @@ WRITE8_MEMBER(bottom9_state::bottom9_bankedram2_w)
if (m_k052109_selected)
k052109_051960_w(space, offset + 0x2000, data);
else
- m_palette->write8(space, offset, data);
+ m_palette->write8(offset, data);
}
WRITE8_MEMBER(bottom9_state::bankswitch_w)
diff --git a/src/mame/drivers/bowltry.cpp b/src/mame/drivers/bowltry.cpp
index d22bf158a38..a9d16c6c9d1 100644
--- a/src/mame/drivers/bowltry.cpp
+++ b/src/mame/drivers/bowltry.cpp
@@ -99,24 +99,24 @@ uint32_t bowltry_state::screen_update_bowltry(screen_device &screen, bitmap_rgb3
-MACHINE_CONFIG_START(bowltry_state::bowltry)
- MCFG_DEVICE_ADD("maincpu", H83008, 16000000 )
- MCFG_DEVICE_PROGRAM_MAP( bowltry_map )
-// MCFG_DEVICE_VBLANK_INT_DRIVER("screen", bowltry_state, irq0_line_hold) // uses vector $64, IMIAB according to the manual (timer/compare B, internal to the CPU)
+void bowltry_state::bowltry(machine_config &config)
+{
+ H83008(config, m_maincpu, 16000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &bowltry_state::bowltry_map);
+// m_maincpu->set_vblank_int("screen", FUNC(bowltry_state::irq0_line_hold)); // uses vector $64, IMIAB according to the manual (timer/compare B, internal to the CPU)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0*8, 32*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(bowltry_state, screen_update_bowltry)
- //MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(bowltry_state::screen_update_bowltry));
+ //screen.set_palette("palette");
- //MCFG_PALETTE_ADD("palette", 65536)
+ //PALETTE(config, "palette").set_entries(65536);
/* tt5665 sound */
-
-MACHINE_CONFIG_END
+}
ROM_START( bowltry )
ROM_REGION( 0x080000, "maincpu", 0 )
diff --git a/src/mame/drivers/boxer.cpp b/src/mame/drivers/boxer.cpp
index 73f44c564aa..0eccc410514 100644
--- a/src/mame/drivers/boxer.cpp
+++ b/src/mame/drivers/boxer.cpp
@@ -491,27 +491,27 @@ void boxer_state::machine_reset()
}
-MACHINE_CONFIG_START(boxer_state::boxer)
-
+void boxer_state::boxer(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M6502, MASTER_CLOCK / 16)
- MCFG_DEVICE_PROGRAM_MAP(boxer_map)
+ M6502(config, m_maincpu, MASTER_CLOCK / 16);
+ m_maincpu->set_addrmap(AS_PROGRAM, &boxer_state::boxer_map);
WATCHDOG_TIMER(config, "watchdog");
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_SIZE(256, 262)
- MCFG_SCREEN_VISIBLE_AREA(8, 247, 0, 239)
- MCFG_SCREEN_UPDATE_DRIVER(boxer_state, screen_update)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_size(256, 262);
+ m_screen->set_visarea(8, 247, 0, 239);
+ m_screen->set_screen_update(FUNC(boxer_state::screen_update));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_boxer);
PALETTE(config, m_palette, FUNC(boxer_state::boxer_palette), 4);
/* sound hardware */
-MACHINE_CONFIG_END
+}
/*************************************
diff --git a/src/mame/drivers/br8641.cpp b/src/mame/drivers/br8641.cpp
index 95c4d452321..b58495a71d5 100644
--- a/src/mame/drivers/br8641.cpp
+++ b/src/mame/drivers/br8641.cpp
@@ -158,7 +158,8 @@ static const z80_daisy_config daisy_chain_intf[] =
-MACHINE_CONFIG_START(brandt8641_state::brandt8641)
+void brandt8641_state::brandt8641(machine_config &config)
+{
/* basic machine hardware */
Z80(config, m_maincpu, XTAL(4'000'000)); // U4 ,4MHz crystal on board
m_maincpu->set_addrmap(AS_PROGRAM, &brandt8641_state::brandt8641_mem);
@@ -167,8 +168,7 @@ MACHINE_CONFIG_START(brandt8641_state::brandt8641)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("beeper", BEEP, 2000)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+ BEEP(config, m_beep, 2000).add_route(ALL_OUTPUTS, "mono", 0.50);
// Z80APIO U9
// Z80APIO U14
@@ -186,7 +186,7 @@ MACHINE_CONFIG_START(brandt8641_state::brandt8641)
m_pio3->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
Z80CTC(config, "ctc", XTAL(4'000'000)); // Z80CTC U8
-MACHINE_CONFIG_END
+}
/* ROM definition */
ROM_START( br8641 )
diff --git a/src/mame/drivers/bsktball.cpp b/src/mame/drivers/bsktball.cpp
index b15237bf44e..d1b786f94ed 100644
--- a/src/mame/drivers/bsktball.cpp
+++ b/src/mame/drivers/bsktball.cpp
@@ -238,11 +238,11 @@ void bsktball_state::machine_reset()
}
-MACHINE_CONFIG_START(bsktball_state::bsktball)
-
+void bsktball_state::bsktball(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M6502,750000)
- MCFG_DEVICE_PROGRAM_MAP(main_map)
+ M6502(config, m_maincpu, 750000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &bsktball_state::main_map);
TIMER(config, "scantimer").configure_scanline(FUNC(bsktball_state::bsktball_scanline), "screen", 0, 1);
f9334_device &outlatch(F9334(config, "outlatch")); // M6
@@ -255,13 +255,13 @@ MACHINE_CONFIG_START(bsktball_state::bsktball)
outlatch.q_out_cb<7>().set(FUNC(bsktball_state::nmion_w)); // NMI On
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(32*8, 28*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 28*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(bsktball_state, screen_update_bsktball)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(32*8, 28*8);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(bsktball_state::screen_update_bsktball));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_bsktball);
PALETTE(config, m_palette, FUNC(bsktball_state::bsktball_palette), 2*4 + 4*4*4*4, 4);
@@ -270,7 +270,7 @@ MACHINE_CONFIG_START(bsktball_state::bsktball)
SPEAKER(config, "mono").front_center();
DISCRETE(config, m_discrete, bsktball_discrete).add_route(ALL_OUTPUTS, "mono", 1.0);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/btime.cpp b/src/mame/drivers/btime.cpp
index 2998cf45386..8a7301793ae 100644
--- a/src/mame/drivers/btime.cpp
+++ b/src/mame/drivers/btime.cpp
@@ -1277,23 +1277,23 @@ MACHINE_RESET_MEMBER(btime_state,mmonkey)
m_protection_ret = 0;
}
-MACHINE_CONFIG_START(btime_state::btime)
-
+void btime_state::btime(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", DECO_CPU7, HCLK2) /* seletable between H2/H4 via jumper */
- MCFG_DEVICE_PROGRAM_MAP(btime_map)
+ DECO_CPU7(config, m_maincpu, HCLK2); /* selectable between H2/H4 via jumper */
+ m_maincpu->set_addrmap(AS_PROGRAM, &btime_state::btime_map);
- MCFG_DEVICE_ADD("audiocpu", M6502, HCLK1/3/2)
- MCFG_DEVICE_PROGRAM_MAP(audio_map)
+ M6502(config, m_audiocpu, HCLK1/3/2);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &btime_state::audio_map);
TIMER(config, "8vck").configure_scanline(FUNC(btime_state::audio_nmi_gen), "screen", 0, 8);
INPUT_MERGER_ALL_HIGH(config, "audionmi").output_handler().set_inputline(m_audiocpu, INPUT_LINE_NMI);
/* video hardware */
- MCFG_SCREEN_ADD(m_screen, RASTER)
- MCFG_SCREEN_RAW_PARAMS(HCLK, 384, 8, 248, 272, 8, 248)
- MCFG_SCREEN_UPDATE_DRIVER(btime_state, screen_update_btime)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(HCLK, 384, 8, 248, 272, 8, 248);
+ m_screen->set_screen_update(FUNC(btime_state::screen_update_btime));
+ m_screen->set_palette(m_palette);
MCFG_MACHINE_START_OVERRIDE(btime_state,btime)
MCFG_MACHINE_RESET_OVERRIDE(btime_state,btime)
@@ -1322,33 +1322,33 @@ MACHINE_CONFIG_START(btime_state::btime)
ay2.add_route(1, "discrete", 1.0, 4);
ay2.add_route(2, "discrete", 1.0, 5);
- MCFG_DEVICE_ADD("discrete", DISCRETE, btime_sound_discrete)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
-MACHINE_CONFIG_END
+ DISCRETE(config, "discrete", btime_sound_discrete).add_route(ALL_OUTPUTS, "mono", 1.0);
+}
-MACHINE_CONFIG_START(btime_state::cookrace)
+void btime_state::cookrace(machine_config &config)
+{
btime(config);
/* basic machine hardware */
- MCFG_DEVICE_REPLACE("maincpu", DECO_C10707, HCLK2)
- MCFG_DEVICE_PROGRAM_MAP(cookrace_map)
+ DECO_C10707(config.replace(), m_maincpu, HCLK2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &btime_state::cookrace_map);
- MCFG_DEVICE_MODIFY("audiocpu")
- MCFG_DEVICE_PROGRAM_MAP(audio_map)
+ m_audiocpu->set_addrmap(AS_PROGRAM, &btime_state::audio_map);
/* video hardware */
m_gfxdecode->set_info(gfx_cookrace);
m_screen->set_screen_update(FUNC(btime_state::screen_update_cookrace));
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(btime_state::lnc)
+void btime_state::lnc(machine_config &config)
+{
btime(config);
/* basic machine hardware */
- MCFG_DEVICE_REPLACE("maincpu", DECO_C10707, HCLK2)
- MCFG_DEVICE_PROGRAM_MAP(lnc_map)
+ DECO_C10707(config.replace(), m_maincpu, HCLK2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &btime_state::lnc_map);
MCFG_MACHINE_RESET_OVERRIDE(btime_state,lnc)
@@ -1359,7 +1359,7 @@ MACHINE_CONFIG_START(btime_state::lnc)
m_palette->set_init(FUNC(btime_state::lnc_palette));
m_screen->set_screen_update(FUNC(btime_state::screen_update_lnc));
-MACHINE_CONFIG_END
+}
void btime_state::wtennis(machine_config &config)
@@ -1371,24 +1371,24 @@ void btime_state::wtennis(machine_config &config)
}
-MACHINE_CONFIG_START(btime_state::mmonkey)
+void btime_state::mmonkey(machine_config &config)
+{
wtennis(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(mmonkey_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &btime_state::mmonkey_map);
MCFG_MACHINE_START_OVERRIDE(btime_state,mmonkey)
MCFG_MACHINE_RESET_OVERRIDE(btime_state,mmonkey)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(btime_state::bnj)
+void btime_state::bnj(machine_config &config)
+{
btime(config);
/* basic machine hardware */
- MCFG_DEVICE_REPLACE("maincpu", DECO_C10707, HCLK4)
- MCFG_DEVICE_CLOCK(HCLK4)
- MCFG_DEVICE_PROGRAM_MAP(bnj_map)
+ DECO_C10707(config.replace(), m_maincpu, HCLK4);
+ m_maincpu->set_addrmap(AS_PROGRAM, &btime_state::bnj_map);
/* video hardware */
m_gfxdecode->set_info(gfx_bnj);
@@ -1397,24 +1397,25 @@ MACHINE_CONFIG_START(btime_state::bnj)
m_screen->set_screen_update(FUNC(btime_state::screen_update_bnj));
m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); // 256 * 240, confirmed
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(btime_state::sdtennis)
+void btime_state::sdtennis(machine_config &config)
+{
bnj(config);
/* basic machine hardware */
- MCFG_DEVICE_REPLACE("audiocpu", DECO_C10707, HCLK1/3/2)
- MCFG_DEVICE_PROGRAM_MAP(audio_map)
-MACHINE_CONFIG_END
+ DECO_C10707(config.replace(), m_audiocpu, HCLK1/3/2);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &btime_state::audio_map);
+}
-MACHINE_CONFIG_START(btime_state::zoar)
+void btime_state::zoar(machine_config &config)
+{
btime(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(zoar_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &btime_state::zoar_map);
/* video hardware */
m_gfxdecode->set_info(gfx_zoar);
@@ -1433,19 +1434,18 @@ MACHINE_CONFIG_START(btime_state::zoar)
ay8910_device &ay2(AY8910(config.replace(), "ay2", HCLK1));
ay2.add_route(ALL_OUTPUTS, "mono", 0.23);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(btime_state::disco)
+void btime_state::disco(machine_config &config)
+{
btime(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_CLOCK(HCLK4)
- MCFG_DEVICE_PROGRAM_MAP(disco_map)
+ m_maincpu->set_clock(HCLK4);
+ m_maincpu->set_addrmap(AS_PROGRAM, &btime_state::disco_map);
- MCFG_DEVICE_MODIFY("audiocpu")
- MCFG_DEVICE_PROGRAM_MAP(disco_audio_map)
+ m_audiocpu->set_addrmap(AS_PROGRAM, &btime_state::disco_audio_map);
m_soundlatch->set_separate_acknowledge(true);
@@ -1456,19 +1456,19 @@ MACHINE_CONFIG_START(btime_state::disco)
MCFG_VIDEO_START_OVERRIDE(btime_state,disco)
m_screen->set_screen_update(FUNC(btime_state::screen_update_disco));
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(btime_state::tisland)
+void btime_state::tisland(machine_config &config)
+{
btime(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(tisland_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &btime_state::tisland_map);
/* video hardware */
m_gfxdecode->set_info(gfx_zoar);
-MACHINE_CONFIG_END
+}
/***************************************************************************
diff --git a/src/mame/drivers/bullet.cpp b/src/mame/drivers/bullet.cpp
index 507b00c5c3d..c14f216c834 100644
--- a/src/mame/drivers/bullet.cpp
+++ b/src/mame/drivers/bullet.cpp
@@ -1103,7 +1103,7 @@ void bulletf_state::machine_reset()
//**************************************************************************
//-------------------------------------------------
-// MACHINE_CONFIG( bullet )
+// machine_config( bullet )
//-------------------------------------------------
void bullet_state::bullet(machine_config &config)
@@ -1184,7 +1184,7 @@ void bullet_state::bullet(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( bulletf )
+// machine_config( bulletf )
//-------------------------------------------------
void bulletf_state::bulletf(machine_config &config)
diff --git a/src/mame/drivers/busicom.cpp b/src/mame/drivers/busicom.cpp
index 63ab41c8e12..c12e1a7f9a3 100644
--- a/src/mame/drivers/busicom.cpp
+++ b/src/mame/drivers/busicom.cpp
@@ -224,7 +224,8 @@ void busicom_state::machine_reset()
//static const char layout_busicom [] = "busicom";
-MACHINE_CONFIG_START(busicom_state::busicom)
+void busicom_state::busicom(machine_config &config)
+{
/* basic machine hardware */
I4004(config, m_maincpu, 750000);
m_maincpu->set_rom_map(&busicom_state::busicom_rom);
@@ -234,18 +235,18 @@ MACHINE_CONFIG_START(busicom_state::busicom)
m_maincpu->set_ram_ports_map(&busicom_state::busicom_mp);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(40*17, 44*11)
- MCFG_SCREEN_VISIBLE_AREA(0, 40*17-1, 0, 44*11-1)
- MCFG_SCREEN_UPDATE_DRIVER(busicom_state, screen_update_busicom)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_size(40*17, 44*11);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(busicom_state::screen_update_busicom));
+ screen.set_palette(m_palette);
PALETTE(config, m_palette, FUNC(busicom_state::busicom_palette), 16);
TIMER(config, "busicom_timer").configure_periodic(FUNC(busicom_state::timer_callback), attotime::from_msec(28*2));
-MACHINE_CONFIG_END
+}
/* ROM definition */
ROM_START( busicom )
diff --git a/src/mame/drivers/buster.cpp b/src/mame/drivers/buster.cpp
index 89fa36f74c6..c207b414280 100644
--- a/src/mame/drivers/buster.cpp
+++ b/src/mame/drivers/buster.cpp
@@ -322,20 +322,21 @@ static GFXDECODE_START( gfx_buster )
GFXDECODE_END
-MACHINE_CONFIG_START(buster_state::buster)
+void buster_state::buster(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80,XTAL(3'579'545)) /* ? MHz */
- MCFG_DEVICE_PROGRAM_MAP(mainmap)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", buster_state, irq0_line_hold)
+ Z80(config, m_maincpu, XTAL(3'579'545)); /* ? MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &buster_state::mainmap);
+ m_maincpu->set_vblank_int("screen", FUNC(buster_state::irq0_line_hold));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(256, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 256-16-1)
- MCFG_SCREEN_UPDATE_DRIVER(buster_state, screen_update_buster)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(256, 256);
+ screen.set_visarea(0, 256-1, 16, 256-16-1);
+ screen.set_screen_update(FUNC(buster_state::screen_update_buster));
+ screen.set_palette(m_palette);
mc6845_device &crtc(MC6845(config, "crtc", XTAL(3'579'545)/4)); //unknown clock / type
crtc.set_screen("screen");
@@ -349,7 +350,7 @@ MACHINE_CONFIG_START(buster_state::buster)
SPEAKER(config, "mono").front_center();
AY8910(config, "aysnd", 1500000/2).add_route(ALL_OUTPUTS, "mono", 0.25);
-MACHINE_CONFIG_END
+}
ROM_START( buster )
diff --git a/src/mame/drivers/bw2.cpp b/src/mame/drivers/bw2.cpp
index 0d8430fe6fe..43a624e86c2 100644
--- a/src/mame/drivers/bw2.cpp
+++ b/src/mame/drivers/bw2.cpp
@@ -539,7 +539,7 @@ void bw2_state::machine_start()
//**************************************************************************
//-------------------------------------------------
-// MACHINE_CONFIG( bw2 )
+// machine_config( bw2 )
//-------------------------------------------------
void bw2_state::bw2(machine_config &config)
diff --git a/src/mame/drivers/bwidow.cpp b/src/mame/drivers/bwidow.cpp
index 70d8d85dda0..e0879582c50 100644
--- a/src/mame/drivers/bwidow.cpp
+++ b/src/mame/drivers/bwidow.cpp
@@ -763,22 +763,22 @@ INPUT_PORTS_END
*
*************************************/
-MACHINE_CONFIG_START(bwidow_state::bwidow)
-
+void bwidow_state::bwidow(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M6502, MASTER_CLOCK / 8)
- MCFG_DEVICE_PROGRAM_MAP(bwidow_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(bwidow_state, irq0_line_assert, CLOCK_3KHZ / 12)
+ M6502(config, m_maincpu, MASTER_CLOCK / 8);
+ m_maincpu->set_addrmap(AS_PROGRAM, &bwidow_state::bwidow_map);
+ m_maincpu->set_periodic_int(FUNC(bwidow_state::irq0_line_assert), attotime::from_hz(CLOCK_3KHZ / 12));
- MCFG_DEVICE_ADD("earom", ER2055)
+ ER2055(config, m_earom);
/* video hardware */
VECTOR(config, "vector", 0);
- MCFG_SCREEN_ADD("screen", VECTOR)
- MCFG_SCREEN_REFRESH_RATE(CLOCK_3KHZ / 12 / 4)
- MCFG_SCREEN_SIZE(400, 300)
- MCFG_SCREEN_VISIBLE_AREA(0, 480, 0, 440)
- MCFG_SCREEN_UPDATE_DEVICE("vector", vector_device, screen_update)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_VECTOR));
+ screen.set_refresh_hz(CLOCK_3KHZ / 12 / 4);
+ screen.set_size(400, 300);
+ screen.set_visarea(0, 480, 0, 440);
+ screen.set_screen_update("vector", FUNC(vector_device::screen_update));
avg_device &avg(AVG(config, "avg", 0));
avg.set_vector_tag("vector");
@@ -786,54 +786,52 @@ MACHINE_CONFIG_START(bwidow_state::bwidow)
/* sound hardware */
bwidow_audio(config);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(bwidow_state::bwidowp)
+void bwidow_state::bwidowp(machine_config &config)
+{
bwidow(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(bwidowp_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &bwidow_state::bwidowp_map);
WATCHDOG_TIMER(config, "watchdog");
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(bwidow_state::gravitar)
+void bwidow_state::gravitar(machine_config &config)
+{
bwidow(config);
/* basic machine hardware */
/* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_VISIBLE_AREA(0, 420, 0, 400)
+ subdevice<screen_device>("screen")->set_visarea(0, 420, 0, 400);
/* sound hardware */
gravitar_audio(config);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(bwidow_state::lunarbat)
+void bwidow_state::lunarbat(machine_config &config)
+{
gravitar(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(spacduel_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &bwidow_state::spacduel_map);
/* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_VISIBLE_AREA(0, 500, 0, 440)
-MACHINE_CONFIG_END
+ subdevice<screen_device>("screen")->set_visarea(0, 500, 0, 440);
+}
-MACHINE_CONFIG_START(bwidow_state::spacduel)
+void bwidow_state::spacduel(machine_config &config)
+{
gravitar(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(spacduel_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &bwidow_state::spacduel_map);
/* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_VISIBLE_AREA(0, 540, 0, 400)
-MACHINE_CONFIG_END
+ subdevice<screen_device>("screen")->set_visarea(0, 540, 0, 400);
+}
diff --git a/src/mame/drivers/bwing.cpp b/src/mame/drivers/bwing.cpp
index a1ac29aed36..b7c493e2dc9 100644
--- a/src/mame/drivers/bwing.cpp
+++ b/src/mame/drivers/bwing.cpp
@@ -89,7 +89,7 @@ WRITE8_MEMBER(bwing_state::bwp1_ctrl_w)
m_subcpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); // SNMI
else
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(DECO16_IRQ_LINE, HOLD_LINE); // SNDREQ
}
break;
@@ -363,36 +363,36 @@ void bwing_state::bwing_postload()
}
-MACHINE_CONFIG_START(bwing_state::bwing)
-
+void bwing_state::bwing(machine_config &config)
+{
// basic machine hardware
- MCFG_DEVICE_ADD("maincpu", MC6809E, 2000000)
- MCFG_DEVICE_PROGRAM_MAP(bwp1_map)
+ MC6809E(config, m_maincpu, 2000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &bwing_state::bwp1_map);
- MCFG_DEVICE_ADD("sub", MC6809E, 2000000)
- MCFG_DEVICE_PROGRAM_MAP(bwp2_map)
+ MC6809E(config, m_subcpu, 2000000);
+ m_subcpu->set_addrmap(AS_PROGRAM, &bwing_state::bwp2_map);
- MCFG_DEVICE_ADD("audiocpu", DECO16, 2000000)
- MCFG_DEVICE_PROGRAM_MAP(bwp3_map)
- MCFG_DEVICE_IO_MAP(bwp3_io_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(bwing_state, bwp3_interrupt, 1000)
+ DECO16(config, m_audiocpu, 2000000);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &bwing_state::bwp3_map);
+ m_audiocpu->set_addrmap(AS_IO, &bwing_state::bwp3_io_map);
+ m_audiocpu->set_periodic_int(FUNC(bwing_state::bwp3_interrupt), attotime::from_hz(1000));
config.m_minimum_quantum = attotime::from_hz(18000); // high enough?
ADDRESS_MAP_BANK(config, "vrambank").set_map(&bwing_state::bank_map).set_options(ENDIANNESS_BIG, 8, 15, 0x2000);
// video hardware
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(600)) // must be long enough for polling
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(bwing_state, screen_update)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(600)); // must be long enough for polling
+ screen.set_size(32*8, 32*8);
+ screen.set_visarea(0*8, 32*8-1, 1*8, 31*8-1);
+ screen.set_screen_update(FUNC(bwing_state::screen_update));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_bwing);
- MCFG_PALETTE_ADD("palette", 64)
+ PALETTE(config, m_palette).set_entries(64);
// sound hardware
@@ -408,7 +408,7 @@ MACHINE_CONFIG_START(bwing_state::bwing)
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
-MACHINE_CONFIG_END
+}
//****************************************************************************
// ROM Maps
diff --git a/src/mame/drivers/by35.cpp b/src/mame/drivers/by35.cpp
index 7ae2922d4e1..88e703ca13a 100644
--- a/src/mame/drivers/by35.cpp
+++ b/src/mame/drivers/by35.cpp
@@ -1092,10 +1092,11 @@ DISCRETE_SOUND_END
-MACHINE_CONFIG_START(by35_state::by35)
+void by35_state::by35(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M6800, 530000) // No xtal, just 2 chips forming a multivibrator oscillator around 530KHz
- MCFG_DEVICE_PROGRAM_MAP(by35_map)
+ M6800(config, m_maincpu, 530000); // No xtal, just 2 chips forming a multivibrator oscillator around 530KHz
+ m_maincpu->set_addrmap(AS_PROGRAM, &by35_state::by35_map);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // 'F' filled causes Credit Display to be blank on first startup
@@ -1132,34 +1133,35 @@ MACHINE_CONFIG_START(by35_state::by35)
m_pia_u11->irqb_handler().set_inputline("maincpu", M6800_IRQ_LINE);
TIMER(config, "timer_d_freq").configure_periodic(FUNC(by35_state::u11_timer), attotime::from_hz(317)); // 555 timer
TIMER(config, m_display_refresh_timer).configure_generic(FUNC(by35_state::timer_d_pulse)); // 555 Active pulse length
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(as2888_state::as2888_audio)
+void as2888_state::as2888_audio(machine_config &config)
+{
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("discrete", DISCRETE, as2888_discrete)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
+ DISCRETE(config, m_discrete, as2888_discrete).add_route(ALL_OUTPUTS, "mono", 1.00);
m_pia_u11->writepb_handler().set(FUNC(as2888_state::u11_b_as2888_w));
m_pia_u11->cb2_handler().set(FUNC(as2888_state::u11_cb2_as2888_w));
TIMER(config, "timer_s_freq").configure_periodic(FUNC(as2888_state::timer_s), attotime::from_hz(353000)); // Inverter clock on AS-2888 sound board
TIMER(config, m_snd_sustain_timer).configure_generic(FUNC(as2888_state::timer_as2888));
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(as2888_state::as2888)
+void as2888_state::as2888(machine_config &config)
+{
by35(config);
as2888_audio(config);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(by35_state::nuovo)
+void by35_state::nuovo(machine_config &config)
+{
by35(config);
- MCFG_DEVICE_REPLACE("maincpu", M6802, 2000000) // ? MHz ? Large crystal next to CPU, schematics don't indicate speed.
- MCFG_DEVICE_PROGRAM_MAP(nuovo_map)
-
-MACHINE_CONFIG_END
+ M6802(config.replace(), m_maincpu, 2000000); // ? MHz ? Large crystal next to CPU, schematics don't indicate speed.
+ m_maincpu->set_addrmap(AS_PROGRAM, &by35_state::nuovo_map);
+}
diff --git a/src/mame/drivers/by68701.cpp b/src/mame/drivers/by68701.cpp
index 4f341501499..9a95b171784 100644
--- a/src/mame/drivers/by68701.cpp
+++ b/src/mame/drivers/by68701.cpp
@@ -46,11 +46,12 @@ void by68701_state::init_by68701()
{
}
-MACHINE_CONFIG_START(by68701_state::by68701)
+void by68701_state::by68701(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M6803, 3579545/4)
- MCFG_DEVICE_PROGRAM_MAP(by68701_map)
-MACHINE_CONFIG_END
+ M6803(config, m_maincpu, 3579545/4);
+ m_maincpu->set_addrmap(AS_PROGRAM, &by68701_state::by68701_map);
+}
/*------------------
/ Flash Gordon
diff --git a/src/mame/drivers/c10.cpp b/src/mame/drivers/c10.cpp
index d58145bc62a..59462dfbea2 100644
--- a/src/mame/drivers/c10.cpp
+++ b/src/mame/drivers/c10.cpp
@@ -159,23 +159,24 @@ static GFXDECODE_START( gfx_c10 )
GFXDECODE_END
-MACHINE_CONFIG_START(c10_state::c10)
+void c10_state::c10(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, XTAL(8'000'000) / 2)
- MCFG_DEVICE_PROGRAM_MAP(c10_mem)
- MCFG_DEVICE_IO_MAP(c10_io)
+ Z80(config, m_maincpu, XTAL(8'000'000) / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &c10_state::c10_mem);
+ m_maincpu->set_addrmap(AS_IO, &c10_state::c10_io);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_UPDATE_DRIVER(c10_state, screen_update)
- MCFG_SCREEN_SIZE(640, 250)
- MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 249)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_screen_update(FUNC(c10_state::screen_update));
+ screen.set_size(640, 250);
+ screen.set_visarea_full();
+ screen.set_palette("palette");
GFXDECODE(config, "gfxdecode", "palette", gfx_c10);
PALETTE(config, "palette", palette_device::MONOCHROME);
-MACHINE_CONFIG_END
+}
void c10_state::init_c10()
{
diff --git a/src/mame/drivers/c128.cpp b/src/mame/drivers/c128.cpp
index 3879b635d2b..9e5c25375b1 100644
--- a/src/mame/drivers/c128.cpp
+++ b/src/mame/drivers/c128.cpp
@@ -1629,7 +1629,7 @@ void c128_state::machine_reset()
//**************************************************************************
//-------------------------------------------------
-// MACHINE_CONFIG( ntsc )
+// machine_config( ntsc )
//-------------------------------------------------
void c128_state::ntsc(machine_config &config)
@@ -1783,7 +1783,7 @@ void c128_state::ntsc(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( c128 )
+// machine_config( c128 )
//-------------------------------------------------
void c128_state::c128(machine_config &config)
@@ -1796,7 +1796,7 @@ void c128_state::c128(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( c128dcr )
+// machine_config( c128dcr )
//-------------------------------------------------
void c128_state::c128dcr(machine_config &config)
@@ -1809,7 +1809,7 @@ void c128_state::c128dcr(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( c128d81 )
+// machine_config( c128d81 )
//-------------------------------------------------
void c128_state::c128d81(machine_config &config)
@@ -1824,7 +1824,7 @@ void c128_state::c128d81(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( pal )
+// machine_config( pal )
//-------------------------------------------------
void c128_state::pal(machine_config &config)
@@ -1978,7 +1978,7 @@ void c128_state::pal(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( c128pal )
+// machine_config( c128pal )
//-------------------------------------------------
void c128_state::c128pal(machine_config &config)
@@ -1991,7 +1991,7 @@ void c128_state::c128pal(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( c128dcrp )
+// machine_config( c128dcrp )
//-------------------------------------------------
void c128_state::c128dcrp(machine_config &config)
diff --git a/src/mame/drivers/c64.cpp b/src/mame/drivers/c64.cpp
index 0344221dd7f..d532e00c410 100644
--- a/src/mame/drivers/c64.cpp
+++ b/src/mame/drivers/c64.cpp
@@ -1260,7 +1260,7 @@ void c64_state::machine_reset()
//**************************************************************************
//-------------------------------------------------
-// MACHINE_CONFIG( ntsc )
+// machine_config( ntsc )
//-------------------------------------------------
void c64_state::ntsc(machine_config &config)
@@ -1380,7 +1380,7 @@ void c64_state::ntsc(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( pet64 )
+// machine_config( pet64 )
//-------------------------------------------------
void c64_state::pet64(machine_config &config)
@@ -1391,7 +1391,7 @@ void c64_state::pet64(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( ntsc_sx )
+// machine_config( ntsc_sx )
//-------------------------------------------------
void sx64_state::ntsc_sx(machine_config &config)
@@ -1409,7 +1409,7 @@ void sx64_state::ntsc_sx(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( ntsc_dx )
+// machine_config( ntsc_dx )
//-------------------------------------------------
void sx64_state::ntsc_dx(machine_config &config)
@@ -1422,7 +1422,7 @@ void sx64_state::ntsc_dx(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( ntsc_c )
+// machine_config( ntsc_c )
//-------------------------------------------------
void c64c_state::ntsc_c(machine_config &config)
@@ -1436,7 +1436,7 @@ void c64c_state::ntsc_c(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( pal )
+// machine_config( pal )
//-------------------------------------------------
void c64_state::pal(machine_config &config)
@@ -1556,7 +1556,7 @@ void c64_state::pal(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( pal_sx )
+// machine_config( pal_sx )
//-------------------------------------------------
void sx64_state::pal_sx(machine_config &config)
@@ -1574,7 +1574,7 @@ void sx64_state::pal_sx(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( pal_c )
+// machine_config( pal_c )
//-------------------------------------------------
void c64c_state::pal_c(machine_config &config)
@@ -1588,7 +1588,7 @@ void c64c_state::pal_c(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( pal_gs )
+// machine_config( pal_gs )
//-------------------------------------------------
void c64gs_state::pal_gs(machine_config &config)
diff --git a/src/mame/drivers/c64dtv.cpp b/src/mame/drivers/c64dtv.cpp
index d8843f8b1ec..ba115565d03 100644
--- a/src/mame/drivers/c64dtv.cpp
+++ b/src/mame/drivers/c64dtv.cpp
@@ -49,14 +49,15 @@ INPUT_PORTS_END
// MACHINE DRIVERS
//**************************************************************************
-MACHINE_CONFIG_START(c64dtv_state::c64dtv)
+void c64dtv_state::c64dtv(machine_config &config)
+{
// video hardware
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_UPDATE_DRIVER(c64dtv_state, screen_update)
- MCFG_SCREEN_SIZE(640,480)
- MCFG_SCREEN_VISIBLE_AREA(0,639, 0,479)
- MCFG_SCREEN_REFRESH_RATE(30)
-MACHINE_CONFIG_END
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_screen_update(FUNC(c64dtv_state::screen_update));
+ screen.set_size(640,480);
+ screen.set_visarea_full();
+ screen.set_refresh_hz(30);
+}
diff --git a/src/mame/drivers/c65.cpp b/src/mame/drivers/c65.cpp
index 82a47b11fad..69d0e552db1 100644
--- a/src/mame/drivers/c65.cpp
+++ b/src/mame/drivers/c65.cpp
@@ -684,12 +684,12 @@ WRITE_LINE_MEMBER(c65_state::cia0_irq)
// c65_irq(state || m_vicirq);
}
-MACHINE_CONFIG_START(c65_state::c65)
-
+void c65_state::c65(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M4510, MAIN_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(c65_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", c65_state, vic3_vblank_irq)
+ M4510(config, m_maincpu, MAIN_CLOCK);
+ m_maincpu->set_addrmap(AS_PROGRAM, &c65_state::c65_map);
+ m_maincpu->set_vblank_int("screen", FUNC(c65_state::vic3_vblank_irq));
MOS6526(config, m_cia0, MAIN_CLOCK);
m_cia0->set_tod_clock(60);
@@ -707,14 +707,14 @@ MACHINE_CONFIG_START(c65_state::c65)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
-// MCFG_SCREEN_REFRESH_RATE(60)
-// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
- MCFG_SCREEN_UPDATE_DRIVER(c65_state, screen_update)
-// MCFG_SCREEN_SIZE(32*8, 32*8)
-// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1)
- MCFG_SCREEN_RAW_PARAMS(MAIN_CLOCK*4, 910, 0, 640, 262, 0, 200) // mods needed
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+// m_screen->set_refresh_hz(60);
+// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500));
+ m_screen->set_screen_update(FUNC(c65_state::screen_update));
+// m_screen->set_size(32*8, 32*8);
+// m_screen->set_visarea(0*8, 32*8-1, 0*8, 32*8-1);
+ m_screen->set_raw(MAIN_CLOCK*4, 910, 0, 640, 262, 0, 200); // mods needed
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_c65);
@@ -727,7 +727,7 @@ MACHINE_CONFIG_START(c65_state::c65)
// software list
SOFTWARE_LIST(config, "flop_list").set_original("c65_flop");
-MACHINE_CONFIG_END
+}
/***************************************************************************
diff --git a/src/mame/drivers/cabaret.cpp b/src/mame/drivers/cabaret.cpp
index b4510bf9fc2..eaf24dac033 100644
--- a/src/mame/drivers/cabaret.cpp
+++ b/src/mame/drivers/cabaret.cpp
@@ -365,12 +365,13 @@ INTERRUPT_GEN_MEMBER(cabaret_state::cabaret_interrupt)
device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
-MACHINE_CONFIG_START(cabaret_state::cabaret)
+void cabaret_state::cabaret(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z180, XTAL(12'000'000) / 2)
- MCFG_DEVICE_PROGRAM_MAP(cabaret_map)
- MCFG_DEVICE_IO_MAP(cabaret_portmap)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cabaret_state, cabaret_interrupt)
+ Z180(config, m_maincpu, XTAL(12'000'000) / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cabaret_state::cabaret_map);
+ m_maincpu->set_addrmap(AS_IO, &cabaret_state::cabaret_portmap);
+ m_maincpu->set_vblank_int("screen", FUNC(cabaret_state::cabaret_interrupt));
i8255_device &ppi1(I8255(config, "ppi1"));
ppi1.in_pa_callback().set_ioport("BUTTONS2");
@@ -389,22 +390,21 @@ MACHINE_CONFIG_START(cabaret_state::cabaret)
ppi3.in_pc_callback().set_ioport("DSW2");
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(512, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1)
- MCFG_SCREEN_UPDATE_DRIVER(cabaret_state, screen_update_cabaret)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(512, 256);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(cabaret_state::screen_update_cabaret));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_cabaret);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 0x800);
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("ymsnd", YM2413, XTAL(3'579'545))
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
-MACHINE_CONFIG_END
+ YM2413(config, "ymsnd", XTAL(3'579'545)).add_route(ALL_OUTPUTS, "mono", 1.0);
+}
void cabaret_state::init_cabaret()
diff --git a/src/mame/drivers/calchase.cpp b/src/mame/drivers/calchase.cpp
index 087b93dbda9..6d9f8322993 100644
--- a/src/mame/drivers/calchase.cpp
+++ b/src/mame/drivers/calchase.cpp
@@ -678,10 +678,10 @@ void calchase_state::machine_reset()
}
MACHINE_CONFIG_START(calchase_state::calchase)
- MCFG_DEVICE_ADD("maincpu", PENTIUM, 133000000) // Cyrix 686MX-PR200 CPU
- MCFG_DEVICE_PROGRAM_MAP(calchase_map)
- MCFG_DEVICE_IO_MAP(calchase_io)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("pic8259_1", pic8259_device, inta_cb)
+ PENTIUM(config, m_maincpu, 133000000); // Cyrix 686MX-PR200 CPU
+ m_maincpu->set_addrmap(AS_PROGRAM, &calchase_state::calchase_map);
+ m_maincpu->set_addrmap(AS_IO, &calchase_state::calchase_io);
+ m_maincpu->set_irq_acknowledge_callback("pic8259_1", FUNC(pic8259_device::inta_cb));
pcat_common(config);
@@ -710,10 +710,10 @@ MACHINE_CONFIG_START(calchase_state::calchase)
MACHINE_CONFIG_END
MACHINE_CONFIG_START(calchase_state::hostinv)
- MCFG_DEVICE_ADD("maincpu", PENTIUM, 133000000) // Cyrix 686MX-PR200 CPU
- MCFG_DEVICE_PROGRAM_MAP(calchase_map)
- MCFG_DEVICE_IO_MAP(calchase_io)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("pic8259_1", pic8259_device, inta_cb)
+ PENTIUM(config, m_maincpu, 133000000); // Cyrix 686MX-PR200 CPU
+ m_maincpu->set_addrmap(AS_PROGRAM, &calchase_state::calchase_map);
+ m_maincpu->set_addrmap(AS_IO, &calchase_state::calchase_io);
+ m_maincpu->set_irq_acknowledge_callback("pic8259_1", FUNC(pic8259_device::inta_cb));
pcat_common(config);
diff --git a/src/mame/drivers/calcune.cpp b/src/mame/drivers/calcune.cpp
index 30b07a721b9..3ac491ca372 100644
--- a/src/mame/drivers/calcune.cpp
+++ b/src/mame/drivers/calcune.cpp
@@ -249,23 +249,23 @@ MACHINE_START_MEMBER(calcune_state,calcune)
m_vdp2->stop_timers();
}
-MACHINE_CONFIG_START(calcune_state::calcune)
- MCFG_DEVICE_ADD("maincpu", M68000, MASTER_CLOCK_NTSC / 7) /* 7.67 MHz */
- MCFG_DEVICE_PROGRAM_MAP(calcune_map)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(calcune_state,genesis_int_callback)
+void calcune_state::calcune(machine_config &config)
+{
+ M68000(config, m_maincpu, MASTER_CLOCK_NTSC / 7); /* 7.67 MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &calcune_state::calcune_map);
+ m_maincpu->set_irq_acknowledge_callback(FUNC(calcune_state::genesis_int_callback));
- MCFG_DEVICE_ADD("z80", Z80, MASTER_CLOCK_NTSC / 15) /* 3.58 MHz */
- MCFG_DEVICE_DISABLE() /* no code is ever uploaded for the Z80, so it's unused here even if it is present on the PCB */
+ Z80(config, "z80", MASTER_CLOCK_NTSC / 15).set_disable(); /* 3.58 MHz, no code is ever uploaded for the Z80, so it's unused here even if it is present on the PCB */
MCFG_MACHINE_START_OVERRIDE(calcune_state,calcune)
MCFG_MACHINE_RESET_OVERRIDE(calcune_state,calcune)
- MCFG_SCREEN_ADD("megadriv", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) // Vblank handled manually.
- MCFG_SCREEN_SIZE(64*8, 620)
- MCFG_SCREEN_VISIBLE_AREA(0, 40*8-1, 0, 28*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(calcune_state, screen_update_calcune)
+ screen_device &screen(SCREEN(config, "megadriv", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); // Vblank handled manually.
+ screen.set_size(64*8, 620);
+ screen.set_visarea(0, 40*8-1, 0, 28*8-1);
+ screen.set_screen_update(FUNC(calcune_state::screen_update_calcune));
SEGA315_5313(config, m_vdp, MASTER_CLOCK_NTSC, m_maincpu);
m_vdp->set_is_pal(false);
@@ -293,7 +293,7 @@ MACHINE_CONFIG_START(calcune_state::calcune)
TIMER(config, "scantimer").configure_scanline("gen_vdp", FUNC(sega315_5313_device::megadriv_scanline_timer_callback_alt_timing), "megadriv", 0, 1);
TIMER(config, "scantimer2").configure_scanline("gen_vdp2", FUNC(sega315_5313_device::megadriv_scanline_timer_callback_alt_timing), "megadriv", 0, 1);
- MCFG_PALETTE_ADD("palette", 0xc0*2)
+ PALETTE(config, m_palette).set_entries(0xc0*2);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
@@ -301,10 +301,10 @@ MACHINE_CONFIG_START(calcune_state::calcune)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("ymz", YMZ280B, XTAL(16'934'400))
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
-MACHINE_CONFIG_END
+ ymz280b_device &ymz(YMZ280B(config, "ymz", XTAL(16'934'400)));
+ ymz.add_route(0, "lspeaker", 1.0);
+ ymz.add_route(1, "rspeaker", 1.0);
+}
void calcune_state::init_calcune()
{
diff --git a/src/mame/drivers/calomega.cpp b/src/mame/drivers/calomega.cpp
index ebc3b18c442..7ab70433082 100644
--- a/src/mame/drivers/calomega.cpp
+++ b/src/mame/drivers/calomega.cpp
@@ -2570,7 +2570,8 @@ WRITE_LINE_MEMBER(calomega_state::write_acia_clock)
* Machine Drivers *
*************************************************/
-MACHINE_CONFIG_START(calomega_state::sys903)
+void calomega_state::sys903(machine_config &config)
+{
/* basic machine hardware */
M6502(config, m_maincpu, CPU_CLOCK); /* confirmed */
m_maincpu->set_addrmap(AS_PROGRAM, &calomega_state::sys903_map);
@@ -2588,13 +2589,13 @@ MACHINE_CONFIG_START(calomega_state::sys903)
m_pia[1]->writepb_handler().set(FUNC(calomega_state::s903_mux_w));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE((39+1)*8, (31+1)*8) /* Taken from MC6845 init, registers 00 & 04. Normally programmed with (value-1) */
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 31*8-1) /* Taken from MC6845 init, registers 01 & 06 */
- MCFG_SCREEN_UPDATE_DRIVER(calomega_state, screen_update_calomega)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size((39+1)*8, (31+1)*8); /* Taken from MC6845 init, registers 00 & 04. Normally programmed with (value-1) */
+ screen.set_visarea(0*8, 32*8-1, 0*8, 31*8-1); /* Taken from MC6845 init, registers 01 & 06 */
+ screen.set_screen_update(FUNC(calomega_state::screen_update_calomega));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_calomega);
PALETTE(config, m_palette, FUNC(calomega_state::calomega_palette), 256); // or 128? is the upper half of the PROMs really valid colors?
@@ -2616,7 +2617,7 @@ MACHINE_CONFIG_START(calomega_state::sys903)
clock_device &aciabaud(CLOCK(config, "aciabaud", UART_CLOCK));
aciabaud.signal_handler().set(FUNC(calomega_state::write_acia_clock));
-MACHINE_CONFIG_END
+}
void calomega_state::s903mod(machine_config &config)
diff --git a/src/mame/drivers/calorie.cpp b/src/mame/drivers/calorie.cpp
index 7f834415829..ad1109fffdf 100644
--- a/src/mame/drivers/calorie.cpp
+++ b/src/mame/drivers/calorie.cpp
@@ -250,8 +250,8 @@ WRITE8_MEMBER(calorie_state::calorie_flipscreen_w)
READ8_MEMBER(calorie_state::calorie_soundlatch_r)
{
- uint8_t latch = m_soundlatch->read(space, 0);
- m_soundlatch->clear_w(space, 0, 0);
+ uint8_t latch = m_soundlatch->read();
+ m_soundlatch->clear_w();
return latch;
}
@@ -465,28 +465,28 @@ void calorie_state::machine_reset()
}
-MACHINE_CONFIG_START(calorie_state::calorie)
-
+void calorie_state::calorie(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80,4000000) /* 4 MHz */
- MCFG_DEVICE_PROGRAM_MAP(calorie_map)
- MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", calorie_state, irq0_line_hold)
+ Z80(config, m_maincpu, 4000000); /* 4 MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &calorie_state::calorie_map);
+ m_maincpu->set_addrmap(AS_OPCODES, &calorie_state::decrypted_opcodes_map);
+ m_maincpu->set_vblank_int("screen", FUNC(calorie_state::irq0_line_hold));
- MCFG_DEVICE_ADD("audiocpu", Z80,3000000) /* 3 MHz */
- MCFG_DEVICE_PROGRAM_MAP(calorie_sound_map)
- MCFG_DEVICE_IO_MAP(calorie_sound_io_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(calorie_state, irq0_line_hold, 64)
+ z80_device &audiocpu(Z80(config, "audiocpu", 3000000)); /* 3 MHz */
+ audiocpu.set_addrmap(AS_PROGRAM, &calorie_state::calorie_sound_map);
+ audiocpu.set_addrmap(AS_IO, &calorie_state::calorie_sound_io_map);
+ audiocpu.set_periodic_int(FUNC(calorie_state::irq0_line_hold), attotime::from_hz(64));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(256, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 256-16-1)
- MCFG_SCREEN_UPDATE_DRIVER(calorie_state, screen_update_calorie)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(256, 256);
+ screen.set_visarea(0, 256-1, 16, 256-16-1);
+ screen.set_screen_update(FUNC(calorie_state::screen_update_calorie));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_calorie);
PALETTE(config, m_palette).set_format(palette_device::xBGR_444, 0x100);
@@ -501,7 +501,7 @@ MACHINE_CONFIG_START(calorie_state::calorie)
YM2149(config, "ay2", 1500000).add_route(ALL_OUTPUTS, "mono", 0.8);
YM2149(config, "ay3", 1500000).add_route(ALL_OUTPUTS, "mono", 0.8);
-MACHINE_CONFIG_END
+}
void calorie_state::caloriee(machine_config &config)
{
diff --git a/src/mame/drivers/camplynx.cpp b/src/mame/drivers/camplynx.cpp
index be69800ca53..4252753af13 100644
--- a/src/mame/drivers/camplynx.cpp
+++ b/src/mame/drivers/camplynx.cpp
@@ -867,7 +867,8 @@ void camplynx_state::lynx_disk(machine_config &config)
FLOPPY_CONNECTOR(config, m_floppy1, camplynx_floppies, "525qd", camplynx_state::camplynx_floppy_formats).enable_sound(true);
}
-MACHINE_CONFIG_START(camplynx_state::lynx48k)
+void camplynx_state::lynx48k(machine_config &config)
+{
/* basic machine hardware */
Z80(config, m_maincpu, 24_MHz_XTAL / 6);
m_maincpu->set_addrmap(AS_PROGRAM, &camplynx_state::lynx48k_mem);
@@ -876,12 +877,12 @@ MACHINE_CONFIG_START(camplynx_state::lynx48k)
MCFG_MACHINE_RESET_OVERRIDE(camplynx_state, lynx48k)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(512, 480)
- MCFG_SCREEN_VISIBLE_AREA(0, 511, 0, 479)
- MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_size(512, 480);
+ screen.set_visarea_full();
+ screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update));
lynx_common(config);
@@ -900,7 +901,7 @@ MACHINE_CONFIG_START(camplynx_state::lynx48k)
/* software lists */
SOFTWARE_LIST(config, "cass_list").set_original("camplynx_cass");
-MACHINE_CONFIG_END
+}
void camplynx_state::lynx96k(machine_config &config)
{
@@ -914,7 +915,8 @@ void camplynx_state::lynx96k(machine_config &config)
SOFTWARE_LIST(config, "flop_list").set_original("camplynx_flop").set_filter("96K");
}
-MACHINE_CONFIG_START(camplynx_state::lynx128k)
+void camplynx_state::lynx128k(machine_config &config)
+{
/* basic machine hardware */
Z80(config, m_maincpu, 24_MHz_XTAL / 4);
m_maincpu->set_addrmap(AS_PROGRAM, &camplynx_state::lynx128k_mem);
@@ -923,12 +925,12 @@ MACHINE_CONFIG_START(camplynx_state::lynx128k)
MCFG_MACHINE_RESET_OVERRIDE(camplynx_state, lynx128k)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(512, 480)
- MCFG_SCREEN_VISIBLE_AREA(0, 511, 0, 479)
- MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_size(512, 480);
+ screen.set_visarea_full();
+ screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update));
lynx_common(config);
@@ -950,7 +952,7 @@ MACHINE_CONFIG_START(camplynx_state::lynx128k)
/* software lists */
SOFTWARE_LIST(config, "cass_list").set_original("camplynx_cass");
SOFTWARE_LIST(config, "flop_list").set_original("camplynx_flop").set_filter("128K");
-MACHINE_CONFIG_END
+}
void camplynx_state::init_lynx48k()
{
diff --git a/src/mame/drivers/candela.cpp b/src/mame/drivers/candela.cpp
index 471b9a0c9bc..09528cc6d03 100644
--- a/src/mame/drivers/candela.cpp
+++ b/src/mame/drivers/candela.cpp
@@ -714,9 +714,10 @@ void can09t_state::can09t(machine_config &config)
#define CAN09_X1_CLOCK 22.1184_MHz_XTAL /* UKI 22118.40 Khz */
#define CAN09_CPU_CLOCK (CAN09_X1_CLOCK / 16) /* ~1.38MHz Divider needs to be check but is the most likelly */
-MACHINE_CONFIG_START(can09_state::can09)
- MCFG_DEVICE_ADD("maincpu", MC6809E, CAN09_CPU_CLOCK) // MC68A09EP
- MCFG_DEVICE_PROGRAM_MAP(can09_map)
+void can09_state::can09(machine_config &config)
+{
+ MC6809E(config, m_maincpu, CAN09_CPU_CLOCK); // MC68A09EP
+ m_maincpu->set_addrmap(AS_PROGRAM, &can09_state::can09_map);
/* RAM banks */
RAM(config, RAM_TAG).set_default_size("768K");
@@ -752,11 +753,11 @@ MACHINE_CONFIG_START(can09_state::can09)
/* screen - totally faked value for now */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_RAW_PARAMS(4_MHz_XTAL / 2, 512, 0, 512, 576, 0, 576)
- MCFG_SCREEN_UPDATE_DRIVER(can09_state, screen_update)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(50);
+ screen.set_raw(4_MHz_XTAL / 2, 512, 0, 512, 576, 0, 576);
+ screen.set_screen_update(FUNC(can09_state::screen_update));
+ screen.set_palette("palette");
PALETTE(config, "palette", palette_device::MONOCHROME);
/* Floppy */
@@ -782,11 +783,11 @@ MACHINE_CONFIG_START(can09_state::can09)
/* 0xFF93 0xE034 (PIA1 Port B) = 0x18 - Write Data on Port B */
#if 1
- MCFG_DEVICE_ADD(PIA2_TAG, PIA6821, 0) // CPU board
- MCFG_DEVICE_ADD("acia1", ACIA6850, 0) // CPU board
- MCFG_DEVICE_ADD("acia2", ACIA6850, 0) // CPU board
+ PIA6821(config, PIA2_TAG, 0); // CPU board
+ ACIA6850(config, "acia1", 0); // CPU board
+ ACIA6850(config, "acia2", 0); // CPU board
#endif
-MACHINE_CONFIG_END
+}
ROM_START( can09t ) /* The smaller grey computer */
ROM_REGION(0x10000, "roms", 0)
diff --git a/src/mame/drivers/canon_s80.cpp b/src/mame/drivers/canon_s80.cpp
index ab08eab9614..d103fa2cfcc 100644
--- a/src/mame/drivers/canon_s80.cpp
+++ b/src/mame/drivers/canon_s80.cpp
@@ -39,11 +39,12 @@ void canons80_state::canons80_map(address_map &map)
map(0x8000, 0xffff).rom();
}
-MACHINE_CONFIG_START(canons80_state::canons80)
+void canons80_state::canons80(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", HD6301, 5000000) /* hd63a01xop 5 MHz guessed: TODO: check on PCB */
- MCFG_DEVICE_PROGRAM_MAP(canons80_map)
-MACHINE_CONFIG_END
+ hd6301_cpu_device &maincpu(HD6301(config, "maincpu", 5000000)); /* hd63a01xop 5 MHz guessed: TODO: check on PCB */
+ maincpu.set_addrmap(AS_PROGRAM, &canons80_state::canons80_map);
+}
void canons80_state::init_canons80()
{
diff --git a/src/mame/drivers/canyon.cpp b/src/mame/drivers/canyon.cpp
index 340b7c3e99d..22e5d3b0822 100644
--- a/src/mame/drivers/canyon.cpp
+++ b/src/mame/drivers/canyon.cpp
@@ -239,11 +239,11 @@ GFXDECODE_END
*
*************************************/
-MACHINE_CONFIG_START(canyon_state::canyon)
-
+void canyon_state::canyon(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M6502, 12.096_MHz_XTAL / 16)
- MCFG_DEVICE_PROGRAM_MAP(main_map)
+ M6502(config, m_maincpu, 12.096_MHz_XTAL / 16);
+ m_maincpu->set_addrmap(AS_PROGRAM, &canyon_state::main_map);
F9334(config, m_outlatch); // C7
m_outlatch->q_out_cb<0>().set("discrete", FUNC(discrete_device::write_line<CANYON_WHISTLE1_EN>));
@@ -256,11 +256,11 @@ MACHINE_CONFIG_START(canyon_state::canyon)
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 8);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(12.096_MHz_XTAL / 2, 384, 0, 256, 262, 0, 240) // HSYNC = 15,750 Hz
- MCFG_SCREEN_UPDATE_DRIVER(canyon_state, screen_update_canyon)
- MCFG_SCREEN_PALETTE(m_palette)
- MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", m6502_device::NMI_LINE))
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(12.096_MHz_XTAL / 2, 384, 0, 256, 262, 0, 240); // HSYNC = 15,750 Hz
+ screen.set_screen_update(FUNC(canyon_state::screen_update_canyon));
+ screen.set_palette(m_palette);
+ screen.screen_vblank().set_inputline(m_maincpu, m6502_device::NMI_LINE);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_canyon);
PALETTE(config, m_palette, FUNC(canyon_state::canyon_palette), 4);
@@ -269,10 +269,10 @@ MACHINE_CONFIG_START(canyon_state::canyon)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("discrete", DISCRETE, canyon_discrete)
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
-MACHINE_CONFIG_END
+ DISCRETE(config, m_discrete, canyon_discrete);
+ m_discrete->add_route(0, "lspeaker", 1.0);
+ m_discrete->add_route(1, "rspeaker", 1.0);
+}
diff --git a/src/mame/drivers/capbowl.cpp b/src/mame/drivers/capbowl.cpp
index 63dc7f8bf21..40c47292461 100644
--- a/src/mame/drivers/capbowl.cpp
+++ b/src/mame/drivers/capbowl.cpp
@@ -198,7 +198,7 @@ WRITE8_MEMBER(capbowl_state::track_reset_w)
WRITE8_MEMBER(capbowl_state::sndcmd_w)
{
m_audiocpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE);
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
}
@@ -316,30 +316,30 @@ void capbowl_state::machine_reset()
}
-MACHINE_CONFIG_START(capbowl_state::capbowl)
-
+void capbowl_state::capbowl(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", MC6809E, MASTER_CLOCK / 4) // MC68B09EP
- MCFG_DEVICE_PROGRAM_MAP(capbowl_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", capbowl_state, interrupt)
+ MC6809E(config, m_maincpu, MASTER_CLOCK / 4); // MC68B09EP
+ m_maincpu->set_addrmap(AS_PROGRAM, &capbowl_state::capbowl_map);
+ m_maincpu->set_vblank_int("screen", FUNC(capbowl_state::interrupt));
// watchdog: 555 timer 16 cycles, edge triggered, ~0.3s
attotime const period = PERIOD_OF_555_ASTABLE(100000.0, 100000.0, 0.1e-6);
WATCHDOG_TIMER(config, m_watchdog).set_time(period * 16 - period / 2);
- MCFG_DEVICE_ADD("audiocpu", MC6809E, MASTER_CLOCK / 4) // MC68B09EP
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
+ MC6809E(config, m_audiocpu, MASTER_CLOCK / 4); // MC68B09EP
+ m_audiocpu->set_addrmap(AS_PROGRAM, &capbowl_state::sound_map);
NVRAM(config, "nvram", nvram_device::DEFAULT_RANDOM);
TICKET_DISPENSER(config, "ticket", attotime::from_msec(100), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_SIZE(360, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 359, 0, 244)
- MCFG_SCREEN_REFRESH_RATE(57)
- MCFG_SCREEN_UPDATE_DRIVER(capbowl_state, screen_update)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_size(360, 256);
+ m_screen->set_visarea(0, 359, 0, 244);
+ m_screen->set_refresh_hz(57);
+ m_screen->set_screen_update(FUNC(capbowl_state::screen_update));
TMS34061(config, m_tms34061, 0);
m_tms34061->set_rowshift(8); /* VRAM address is (row << rowshift) | col */
@@ -364,21 +364,20 @@ MACHINE_CONFIG_START(capbowl_state::capbowl)
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(capbowl_state::bowlrama)
+void capbowl_state::bowlrama(machine_config &config)
+{
capbowl(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(bowlrama_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &capbowl_state::bowlrama_map);
/* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_VISIBLE_AREA(0, 359, 0, 239)
-MACHINE_CONFIG_END
+ m_screen->set_visarea(0, 359, 0, 239);
+}
diff --git a/src/mame/drivers/capcom.cpp b/src/mame/drivers/capcom.cpp
index 5bfc2af9c90..9ce5ced5903 100644
--- a/src/mame/drivers/capcom.cpp
+++ b/src/mame/drivers/capcom.cpp
@@ -46,11 +46,12 @@ void capcom_state::init_capcom()
{
}
-MACHINE_CONFIG_START(capcom_state::capcom)
+void capcom_state::capcom(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, 16670000) // M68306
- MCFG_DEVICE_PROGRAM_MAP(capcom_map)
-MACHINE_CONFIG_END
+ M68000(config, m_maincpu, 16670000); // M68306
+ m_maincpu->set_addrmap(AS_PROGRAM, &capcom_state::capcom_map);
+}
/*-------------------------------------------------------------------
/ Airborne (03/96)
diff --git a/src/mame/drivers/caprcyc.cpp b/src/mame/drivers/caprcyc.cpp
index ef07509a8f3..c4debe1e3b6 100644
--- a/src/mame/drivers/caprcyc.cpp
+++ b/src/mame/drivers/caprcyc.cpp
@@ -63,17 +63,17 @@ INPUT_PORTS_END
***************************************************************************/
-MACHINE_CONFIG_START(caprcyc_state::caprcyc)
-
+void caprcyc_state::caprcyc(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", VR4300BE, 100000000) // cpu configuration is unknown
- MCFG_DEVICE_PROGRAM_MAP(caprcyc_map)
+ VR4300BE(config, m_maincpu, 100000000); // cpu configuration is unknown
+ m_maincpu->set_addrmap(AS_PROGRAM, &caprcyc_state::caprcyc_map);
/* no video! */
/* sound hardware */
//..
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/cardline.cpp b/src/mame/drivers/cardline.cpp
index 2b41aedbbf6..a9eeb335eda 100644
--- a/src/mame/drivers/cardline.cpp
+++ b/src/mame/drivers/cardline.cpp
@@ -326,8 +326,8 @@ void cardline_state::cardline_palette(palette_device &palette) const
}
}
-MACHINE_CONFIG_START(cardline_state::cardline)
-
+void cardline_state::cardline(machine_config &config)
+{
/* basic machine hardware */
I80C32(config, m_maincpu, MASTER_CLOCK);
m_maincpu->set_port_forced_input(1, 0x10);
@@ -338,14 +338,14 @@ MACHINE_CONFIG_START(cardline_state::cardline)
//m_maincpu->set_vblank_int("screen", FUNC(cardline_state::irq1_line_hold));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(64*8, 35*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0*8, 32*8-1)
- //MCFG_SCREEN_UPDATE_DRIVER(cardline_state, screen_update_cardline)
- //MCFG_SCREEN_PALETTE(m_palette)
- MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(64*8, 35*8);
+ screen.set_visarea(0*8, 64*8-1, 0*8, 32*8-1);
+ //screen.set_screen_update(FUNC(cardline_state::screen_update_cardline));
+ //screen.set_palette(m_palette);
+ screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update));
GFXDECODE(config, m_gfxdecode, m_palette, gfx_cardline);
PALETTE(config, m_palette, FUNC(cardline_state::cardline_palette), 512);
@@ -365,11 +365,10 @@ MACHINE_CONFIG_START(cardline_state::cardline)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("oki", OKIM6295, 1056000, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
-
-MACHINE_CONFIG_END
+ okim6295_device &oki(OKIM6295(config, "oki", 1056000, okim6295_device::PIN7_HIGH)); // clock frequency & pin 7 not verified
+ oki.add_route(ALL_OUTPUTS, "lspeaker", 1.0);
+ oki.add_route(ALL_OUTPUTS, "rspeaker", 1.0);
+}
/***************************************************************************
diff --git a/src/mame/drivers/carjmbre.cpp b/src/mame/drivers/carjmbre.cpp
index 57be932e911..e482a16d989 100644
--- a/src/mame/drivers/carjmbre.cpp
+++ b/src/mame/drivers/carjmbre.cpp
@@ -356,25 +356,25 @@ static GFXDECODE_START( gfx_carjmbre )
GFXDECODE_END
-MACHINE_CONFIG_START(carjmbre_state::carjmbre)
-
+void carjmbre_state::carjmbre(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, XTAL(18'432'000)/6)
- MCFG_DEVICE_PROGRAM_MAP(main_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", carjmbre_state, vblank_nmi)
+ Z80(config, m_maincpu, XTAL(18'432'000)/6);
+ m_maincpu->set_addrmap(AS_PROGRAM, &carjmbre_state::main_map);
+ m_maincpu->set_vblank_int("screen", FUNC(carjmbre_state::vblank_nmi));
- MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(18'432'000)/6/2)
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
- MCFG_DEVICE_IO_MAP(sound_io_map)
+ Z80(config, m_audiocpu, XTAL(18'432'000)/6/2);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &carjmbre_state::sound_map);
+ m_audiocpu->set_addrmap(AS_IO, &carjmbre_state::sound_io_map);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(carjmbre_state, screen_update)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(32*8, 32*8);
+ screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
+ screen.set_screen_update(FUNC(carjmbre_state::screen_update));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_carjmbre);
PALETTE(config, m_palette, FUNC(carjmbre_state::carjmbre_palette), 64);
@@ -387,7 +387,7 @@ MACHINE_CONFIG_START(carjmbre_state::carjmbre)
AY8910(config, "ay1", XTAL(18'432'000)/6/2).add_route(ALL_OUTPUTS, "mono", 0.25);
AY8910(config, "ay2", XTAL(18'432'000)/6/2).add_route(ALL_OUTPUTS, "mono", 0.25);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/carpolo.cpp b/src/mame/drivers/carpolo.cpp
index 07f3b2906e9..3063e809d50 100644
--- a/src/mame/drivers/carpolo.cpp
+++ b/src/mame/drivers/carpolo.cpp
@@ -231,8 +231,8 @@ GFXDECODE_END
*
*************************************/
-MACHINE_CONFIG_START(carpolo_state::carpolo)
-
+void carpolo_state::carpolo(machine_config &config)
+{
/* basic machine hardware */
M6502(config, m_maincpu, XTAL(11'289'000)/12); /* 940.75 kHz */
m_maincpu->set_addrmap(AS_PROGRAM, &carpolo_state::main_map);
@@ -279,18 +279,18 @@ MACHINE_CONFIG_START(carpolo_state::carpolo)
m_ttl74153_1k->zb_cb().set(FUNC(carpolo_state::ls153_zb_w)); // pia1 pb4
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(256, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 239, 0, 255)
- MCFG_SCREEN_UPDATE_DRIVER(carpolo_state, screen_update)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, carpolo_state, screen_vblank))
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(256, 256);
+ screen.set_visarea(0, 239, 0, 255);
+ screen.set_screen_update(FUNC(carpolo_state::screen_update));
+ screen.screen_vblank().set(FUNC(carpolo_state::screen_vblank));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_carpolo);
PALETTE(config, m_palette, FUNC(carpolo_state::carpolo_palette), 12*2+2*16+4*2);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/carrera.cpp b/src/mame/drivers/carrera.cpp
index 6ba9a74ecc3..5cccb69c5c6 100644
--- a/src/mame/drivers/carrera.cpp
+++ b/src/mame/drivers/carrera.cpp
@@ -315,20 +315,21 @@ void carrera_state::carrera_palette(palette_device &palette) const
}
-MACHINE_CONFIG_START(carrera_state::carrera)
+void carrera_state::carrera(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, MASTER_CLOCK / 6)
- MCFG_DEVICE_PROGRAM_MAP(carrera_map)
- MCFG_DEVICE_IO_MAP(io_map)
+ Z80(config, m_maincpu, MASTER_CLOCK / 6);
+ m_maincpu->set_addrmap(AS_PROGRAM, &carrera_state::carrera_map);
+ m_maincpu->set_addrmap(AS_IO, &carrera_state::io_map);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(512, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1)
- MCFG_SCREEN_UPDATE_DRIVER(carrera_state, screen_update_carrera)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(512, 256);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(carrera_state::screen_update_carrera));
+ screen.set_palette(m_palette);
mc6845_device &crtc(MC6845(config, "crtc", MASTER_CLOCK / 16));
crtc.set_screen("screen");
@@ -347,7 +348,7 @@ MACHINE_CONFIG_START(carrera_state::carrera)
aysnd.port_a_read_callback().set(FUNC(carrera_state::unknown_r));
aysnd.port_b_read_callback().set(FUNC(carrera_state::unknown_r));
aysnd.add_route(ALL_OUTPUTS, "mono", 1.00);
-MACHINE_CONFIG_END
+}
ROM_START( carrera )
diff --git a/src/mame/drivers/casloopy.cpp b/src/mame/drivers/casloopy.cpp
index 417a3ceca75..a11cf3b67c6 100644
--- a/src/mame/drivers/casloopy.cpp
+++ b/src/mame/drivers/casloopy.cpp
@@ -520,24 +520,23 @@ DEVICE_IMAGE_LOAD_MEMBER( casloopy_state, loopy_cart )
MACHINE_CONFIG_START(casloopy_state::casloopy)
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu",SH2A,8000000)
- MCFG_DEVICE_PROGRAM_MAP(casloopy_map)
+ SH2A(config, m_maincpu, 8000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &casloopy_state::casloopy_map);
-// MCFG_DEVICE_ADD("subcpu",V60,8000000)
-// MCFG_DEVICE_PROGRAM_MAP(casloopy_sub_map)
+// v60_device &subcpu(V60(config, "subcpu", 8000000));
+// subcpu.set_addrmap(AS_PROGRAM, &casloopy_state::casloopy_sub_map);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(8000000, 444, 0, 256, 263, 0, 224)
-
-// MCFG_SCREEN_REFRESH_RATE(60)
-// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
-// MCFG_SCREEN_SIZE(444, 263)
-// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(casloopy_state, screen_update)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_PALETTE_ADD("palette", 512)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(8000000, 444, 0, 256, 263, 0, 224);
+// m_screen->set_refresh_hz(60);
+// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500));
+// m_screen->set_size(444, 263);
+// m_screen->set_visarea(0*8, 32*8-1, 0*8, 32*8-1);
+ m_screen->set_screen_update(FUNC(casloopy_state::screen_update));
+ m_screen->set_palette(m_palette);
+
+ PALETTE(config, m_palette).set_entries(512);
GFXDECODE(config, m_gfxdecode, m_palette, gfxdecode_device::empty);
diff --git a/src/mame/drivers/castle.cpp b/src/mame/drivers/castle.cpp
index 1ab9a1b4209..7a10dfd8331 100644
--- a/src/mame/drivers/castle.cpp
+++ b/src/mame/drivers/castle.cpp
@@ -84,13 +84,14 @@ static INPUT_PORTS_START( castrev )
INPUT_PORTS_END
-MACHINE_CONFIG_START(castle_state::castle_V1rvE)
- MCFG_DEVICE_ADD("maincpu", HD6303Y, 1000000)
- MCFG_DEVICE_PROGRAM_MAP(V1rvE_mastermap)
+void castle_state::castle_V1rvE(machine_config &config)
+{
+ HD6303Y(config, m_maincpu, 1000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &castle_state::V1rvE_mastermap);
- MCFG_DEVICE_ADD("slavecpu", HD6303Y, 1000000)
- MCFG_DEVICE_PROGRAM_MAP(V1rvE_slavemap)
-MACHINE_CONFIG_END
+ hd6303y_cpu_device &slavecpu(HD6303Y(config, "slavecpu", 1000000));
+ slavecpu.set_addrmap(AS_PROGRAM, &castle_state::V1rvE_slavemap);
+}
@@ -102,12 +103,13 @@ void castle_state::V2rvA_map(address_map &map)
}
-MACHINE_CONFIG_START(castle_state::castle_V2rvA)
- MCFG_DEVICE_ADD("maincpu", HD6303Y, 1000000)
- MCFG_DEVICE_PROGRAM_MAP(V2rvA_map)
+void castle_state::castle_V2rvA(machine_config &config)
+{
+ HD6303Y(config, m_maincpu, 1000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &castle_state::V2rvA_map);
- MCFG_DEVICE_ADD("pia", PIA6821)
-MACHINE_CONFIG_END
+ PIA6821(config, "pia");
+}
ROM_START( castrev )
diff --git a/src/mame/drivers/caswin.cpp b/src/mame/drivers/caswin.cpp
index d9dffa9b6fd..36dd70252f3 100644
--- a/src/mame/drivers/caswin.cpp
+++ b/src/mame/drivers/caswin.cpp
@@ -333,21 +333,22 @@ void caswin_state::caswin_palette(palette_device &palette) const
}
-MACHINE_CONFIG_START(caswin_state::vvillage)
+void caswin_state::vvillage(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 4000000) /* ? MHz */
- MCFG_DEVICE_PROGRAM_MAP(vvillage_mem)
- MCFG_DEVICE_IO_MAP(vvillage_io)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", caswin_state, irq0_line_hold)
+ Z80(config, m_maincpu, 4000000); /* ? MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &caswin_state::vvillage_mem);
+ m_maincpu->set_addrmap(AS_IO, &caswin_state::vvillage_io);
+ m_maincpu->set_vblank_int("screen", FUNC(caswin_state::irq0_line_hold));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(256, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 256-16-1)
- MCFG_SCREEN_UPDATE_DRIVER(caswin_state, screen_update_vvillage)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(256, 256);
+ screen.set_visarea(0, 256-1, 16, 256-16-1);
+ screen.set_screen_update(FUNC(caswin_state::screen_update_vvillage));
+ screen.set_palette("palette");
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
@@ -360,7 +361,7 @@ MACHINE_CONFIG_START(caswin_state::vvillage)
aysnd.port_a_read_callback().set_ioport("DSW1");
aysnd.port_b_read_callback().set_ioport("DSW2");
aysnd.add_route(ALL_OUTPUTS, "mono", 0.40);
-MACHINE_CONFIG_END
+}
ROM_START( caswin )
ROM_REGION( 0x8000, "maincpu", 0 )
diff --git a/src/mame/drivers/cat.cpp b/src/mame/drivers/cat.cpp
index 95bb7baffc5..8fb88335a64 100644
--- a/src/mame/drivers/cat.cpp
+++ b/src/mame/drivers/cat.cpp
@@ -1054,23 +1054,23 @@ WRITE_LINE_MEMBER(cat_state::prn_ack_ff) // switch the flipflop state on the ris
#endif
}
-MACHINE_CONFIG_START(cat_state::cat)
-
+void cat_state::cat(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu",M68000, XTAL(19'968'000)/4)
- MCFG_DEVICE_PROGRAM_MAP(cat_mem)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(cat_state,cat_int_ack)
+ M68000(config, m_maincpu, XTAL(19'968'000)/4);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cat_state::cat_mem);
+ m_maincpu->set_irq_acknowledge_callback(FUNC(cat_state::cat_int_ack));
MCFG_MACHINE_START_OVERRIDE(cat_state,cat)
MCFG_MACHINE_RESET_OVERRIDE(cat_state,cat)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(672, 344)
- MCFG_SCREEN_VISIBLE_AREA(0, 672-1, 0, 344-1)
- MCFG_SCREEN_UPDATE_DRIVER(cat_state, screen_update_cat)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_size(672, 344);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(cat_state::screen_update_cat));
MCFG_VIDEO_START_OVERRIDE(cat_state,cat)
@@ -1091,7 +1091,7 @@ MACHINE_CONFIG_START(cat_state::cat)
SPEAKER_SOUND(config, "speaker").add_route(ALL_OUTPUTS, "mono", 1.00);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
-MACHINE_CONFIG_END
+}
ROM_START( cat )
ROM_REGION( 0x40000, "maincpu", ROMREGION_ERASEFF )
diff --git a/src/mame/drivers/cave.cpp b/src/mame/drivers/cave.cpp
index 54047855bc0..9b1dde95e6e 100644
--- a/src/mame/drivers/cave.cpp
+++ b/src/mame/drivers/cave.cpp
@@ -242,7 +242,7 @@ WRITE16_MEMBER(cave_state::sound_cmd_w)
{
// m_sound_flag[0] = 1;
// m_sound_flag[1] = 1;
- m_soundlatch->write(space, offset, data, mem_mask);
+ m_soundlatch->write(data);
m_maincpu->spin_until_time(attotime::from_usec(50)); // Allow the other cpu to reply
}
@@ -250,14 +250,14 @@ WRITE16_MEMBER(cave_state::sound_cmd_w)
READ8_MEMBER(cave_state::soundlatch_lo_r)
{
// m_sound_flag[0] = 0;
- return m_soundlatch->read(space, offset, 0x00ff) & 0xff;
+ return m_soundlatch->read() & 0xff;
}
/* Sound CPU: read the high 8 bits of the 16 bit sound latch */
READ8_MEMBER(cave_state::soundlatch_hi_r)
{
// m_sound_flag[1] = 0;
- return m_soundlatch->read(space, offset, 0xff00) >> 8;
+ return m_soundlatch->read() >> 8;
}
/* Main CPU: read the latch written by the sound CPU (acknowledge) */
diff --git a/src/mame/drivers/cavepc.cpp b/src/mame/drivers/cavepc.cpp
index b5d03cd967a..56455c256db 100644
--- a/src/mame/drivers/cavepc.cpp
+++ b/src/mame/drivers/cavepc.cpp
@@ -112,23 +112,24 @@ void cavepc_state::machine_reset()
membank("bank1")->set_base(memregion("bios")->base() + 0x30000);
}
-MACHINE_CONFIG_START(cavepc_state::cavepc)
+void cavepc_state::cavepc(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", PENTIUM3, 200000000) /* AMD Athlon 64 X2 5050e Brisbane 2.60GHz, 1024KB L2 Cache ! */
- MCFG_DEVICE_PROGRAM_MAP(cavepc_map)
- MCFG_DEVICE_IO_MAP(cavepc_io)
+ PENTIUM3(config, m_maincpu, 200000000); /* AMD Athlon 64 X2 5050e Brisbane 2.60GHz, 1024KB L2 Cache ! */
+ m_maincpu->set_addrmap(AS_PROGRAM, &cavepc_state::cavepc_map);
+ m_maincpu->set_addrmap(AS_IO, &cavepc_state::cavepc_io);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(640, 480)
- MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 199)
- MCFG_SCREEN_UPDATE_DRIVER(cavepc_state, screen_update_cavepc)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_PALETTE_ADD("palette", 16)
-MACHINE_CONFIG_END
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(640, 480);
+ screen.set_visarea(0, 639, 0, 199);
+ screen.set_screen_update(FUNC(cavepc_state::screen_update_cavepc));
+ screen.set_palette("palette");
+
+ PALETTE(config, "palette").set_entries(16);
+}
diff --git a/src/mame/drivers/cball.cpp b/src/mame/drivers/cball.cpp
index 37c9e8f1426..31cfcddf6fe 100644
--- a/src/mame/drivers/cball.cpp
+++ b/src/mame/drivers/cball.cpp
@@ -264,27 +264,27 @@ static GFXDECODE_START( gfx_cball )
GFXDECODE_END
-MACHINE_CONFIG_START(cball_state::cball)
-
+void cball_state::cball(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M6800, XTAL(12'096'000) / 16) /* ? */
- MCFG_DEVICE_PROGRAM_MAP(cpu_map)
+ M6800(config, m_maincpu, XTAL(12'096'000) / 16); /* ? */
+ m_maincpu->set_addrmap(AS_PROGRAM, &cball_state::cpu_map);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_SIZE(256, 262)
- MCFG_SCREEN_VISIBLE_AREA(0, 255, 0, 223)
- MCFG_SCREEN_UPDATE_DRIVER(cball_state, screen_update)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_size(256, 262);
+ m_screen->set_visarea(0, 255, 0, 223);
+ m_screen->set_screen_update(FUNC(cball_state::screen_update));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_cball);
PALETTE(config, m_palette, FUNC(cball_state::cball_palette), 6);
/* sound hardware */
-MACHINE_CONFIG_END
+}
ROM_START( cball )
diff --git a/src/mame/drivers/cbasebal.cpp b/src/mame/drivers/cbasebal.cpp
index 8c22084cf2f..304bcd0f7ca 100644
--- a/src/mame/drivers/cbasebal.cpp
+++ b/src/mame/drivers/cbasebal.cpp
@@ -71,7 +71,7 @@ WRITE8_MEMBER(cbasebal_state::bankedram_w)
break;
case 1:
if (offset < 0x800)
- m_palette->write8(space, offset, data);
+ m_palette->write8(offset, data);
break;
default:
cbasebal_scrollram_w(space, offset, data);
@@ -261,26 +261,26 @@ void cbasebal_state::machine_reset()
m_scroll_y[1] = 0;
}
-MACHINE_CONFIG_START(cbasebal_state::cbasebal)
-
+void cbasebal_state::cbasebal(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 6000000) /* ??? */
- MCFG_DEVICE_PROGRAM_MAP(cbasebal_map)
- MCFG_DEVICE_IO_MAP(cbasebal_portmap)
- MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cbasebal_state, irq0_line_hold) /* ??? */
+ Z80(config, m_maincpu, 6000000); /* ??? */
+ m_maincpu->set_addrmap(AS_PROGRAM, &cbasebal_state::cbasebal_map);
+ m_maincpu->set_addrmap(AS_IO, &cbasebal_state::cbasebal_portmap);
+ m_maincpu->set_addrmap(AS_OPCODES, &cbasebal_state::decrypted_opcodes_map);
+ m_maincpu->set_vblank_int("screen", FUNC(cbasebal_state::irq0_line_hold)); /* ??? */
EEPROM_93C46_16BIT(config, "eeprom");
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 2*8, 30*8-1 )
- MCFG_SCREEN_UPDATE_DRIVER(cbasebal_state, screen_update_cbasebal)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(8*8, (64-8)*8-1, 2*8, 30*8-1 );
+ screen.set_screen_update(FUNC(cbasebal_state::screen_update_cbasebal));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_cbasebal);
@@ -289,12 +289,10 @@ MACHINE_CONFIG_START(cbasebal_state::cbasebal)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("oki", OKIM6295, 1056000, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+ OKIM6295(config, "oki", 1056000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.50); // clock frequency & pin 7 not verified
- MCFG_DEVICE_ADD("ymsnd", YM2413, 3579545)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
-MACHINE_CONFIG_END
+ YM2413(config, "ymsnd", 3579545).add_route(ALL_OUTPUTS, "mono", 1.0);
+}
diff --git a/src/mame/drivers/cbm2.cpp b/src/mame/drivers/cbm2.cpp
index b208483c91c..069ee861e7e 100644
--- a/src/mame/drivers/cbm2.cpp
+++ b/src/mame/drivers/cbm2.cpp
@@ -2219,7 +2219,7 @@ MACHINE_RESET_MEMBER( p500_state, p500 )
//**************************************************************************
//-------------------------------------------------
-// MACHINE_CONFIG( 128k )
+// machine_config( 128k )
//-------------------------------------------------
void cbm2_state::_128k(machine_config &config)
@@ -2229,7 +2229,7 @@ void cbm2_state::_128k(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( 256k )
+// machine_config( 256k )
//-------------------------------------------------
void cbm2_state::_256k(machine_config &config)
@@ -2239,7 +2239,7 @@ void cbm2_state::_256k(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( p500_ntsc )
+// machine_config( p500_ntsc )
//-------------------------------------------------
void p500_state::p500_ntsc(machine_config &config)
@@ -2376,7 +2376,7 @@ void p500_state::p500_ntsc(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( p500_pal )
+// machine_config( p500_pal )
//-------------------------------------------------
void p500_state::p500_pal(machine_config &config)
@@ -2510,7 +2510,7 @@ void p500_state::p500_pal(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( cbm2lp_ntsc )
+// machine_config( cbm2lp_ntsc )
//-------------------------------------------------
void cbm2_state::cbm2lp_ntsc(machine_config &config)
@@ -2640,7 +2640,7 @@ void cbm2_state::cbm2lp_ntsc(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( b128 )
+// machine_config( b128 )
//-------------------------------------------------
void cbm2_state::b128(machine_config &config)
@@ -2651,7 +2651,7 @@ void cbm2_state::b128(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( b256 )
+// machine_config( b256 )
//-------------------------------------------------
void cbm2_state::b256(machine_config &config)
@@ -2662,7 +2662,7 @@ void cbm2_state::b256(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( cbm2lp_pal )
+// machine_config( cbm2lp_pal )
//-------------------------------------------------
void cbm2_state::cbm2lp_pal(machine_config &config)
@@ -2674,7 +2674,7 @@ void cbm2_state::cbm2lp_pal(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( cbm610 )
+// machine_config( cbm610 )
//-------------------------------------------------
void cbm2_state::cbm610(machine_config &config)
@@ -2685,7 +2685,7 @@ void cbm2_state::cbm610(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( cbm620 )
+// machine_config( cbm620 )
//-------------------------------------------------
void cbm2_state::cbm620(machine_config &config)
@@ -2696,7 +2696,7 @@ void cbm2_state::cbm620(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( cbm2hp_ntsc )
+// machine_config( cbm2hp_ntsc )
//-------------------------------------------------
void cbm2_state::cbm2hp_ntsc(machine_config &config)
@@ -2707,7 +2707,7 @@ void cbm2_state::cbm2hp_ntsc(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( b128hp )
+// machine_config( b128hp )
//-------------------------------------------------
void cbm2hp_state::b128hp(machine_config &config)
@@ -2718,7 +2718,7 @@ void cbm2hp_state::b128hp(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( b256hp )
+// machine_config( b256hp )
//-------------------------------------------------
void cbm2hp_state::b256hp(machine_config &config)
@@ -2729,7 +2729,7 @@ void cbm2hp_state::b256hp(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( bx256hp )
+// machine_config( bx256hp )
//-------------------------------------------------
void cbm2hp_state::bx256hp(machine_config &config)
@@ -2763,7 +2763,7 @@ void cbm2hp_state::bx256hp(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( cbm2hp_pal )
+// machine_config( cbm2hp_pal )
//-------------------------------------------------
void cbm2_state::cbm2hp_pal(machine_config &config)
@@ -2778,7 +2778,7 @@ void cbm2_state::cbm2hp_pal(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( cbm710 )
+// machine_config( cbm710 )
//-------------------------------------------------
void cbm2hp_state::cbm710(machine_config &config)
@@ -2789,7 +2789,7 @@ void cbm2hp_state::cbm710(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( cbm720 )
+// machine_config( cbm720 )
//-------------------------------------------------
void cbm2hp_state::cbm720(machine_config &config)
@@ -2800,7 +2800,7 @@ void cbm2hp_state::cbm720(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( cbm730 )
+// machine_config( cbm730 )
//-------------------------------------------------
void cbm2hp_state::cbm730(machine_config &config)
diff --git a/src/mame/drivers/cbuster.cpp b/src/mame/drivers/cbuster.cpp
index 188da21cdcf..87e1bed2fb9 100644
--- a/src/mame/drivers/cbuster.cpp
+++ b/src/mame/drivers/cbuster.cpp
@@ -64,7 +64,7 @@ WRITE16_MEMBER(cbuster_state::twocrude_control_w)
return;
case 2: /* Sound CPU write */
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
return;
case 4: /* Protection, maybe this is a PAL on the board?
@@ -299,23 +299,23 @@ void cbuster_state::machine_reset()
m_pri = 0;
}
-MACHINE_CONFIG_START(cbuster_state::twocrude)
-
+void cbuster_state::twocrude(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(24'000'000)/2) /* Custom chip 59 @ 12MHz Verified */
- MCFG_DEVICE_PROGRAM_MAP(twocrude_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cbuster_state, irq4_line_assert)/* VBL */
+ M68000(config, m_maincpu, XTAL(24'000'000)/2); /* Custom chip 59 @ 12MHz Verified */
+ m_maincpu->set_addrmap(AS_PROGRAM, &cbuster_state::twocrude_map);
+ m_maincpu->set_vblank_int("screen", FUNC(cbuster_state::irq4_line_assert)); /* VBL */
H6280(config, m_audiocpu, XTAL(24'000'000)/4); /* Custom chip 45, 6MHz Verified */
m_audiocpu->set_addrmap(AS_PROGRAM, &cbuster_state::sound_map);
m_audiocpu->add_route(ALL_OUTPUTS, "mono", 0); // internal sound unused
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(58)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(cbuster_state, screen_update_twocrude)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(58);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(529));
+ screen.set_size(32*8, 32*8);
+ screen.set_visarea(0*8, 32*8-1, 1*8, 31*8-1);
+ screen.set_screen_update(FUNC(cbuster_state::screen_update_twocrude));
GFXDECODE(config, "gfxdecode", m_palette, gfx_cbuster);
PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 2048);
@@ -323,7 +323,6 @@ MACHINE_CONFIG_START(cbuster_state::twocrude)
BUFFERED_SPRITERAM16(config, m_spriteram);
DECO16IC(config, m_deco_tilegen[0], 0);
- m_deco_tilegen[0]->set_split(0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
@@ -339,7 +338,6 @@ MACHINE_CONFIG_START(cbuster_state::twocrude)
m_deco_tilegen[0]->set_gfxdecode_tag("gfxdecode");
DECO16IC(config, m_deco_tilegen[1], 0);
- m_deco_tilegen[1]->set_split(0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
@@ -365,19 +363,16 @@ MACHINE_CONFIG_START(cbuster_state::twocrude)
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, 0);
// YM2203_PITCH_HACK - Pitch is too low at 1.3425MHz (see also stfight.cpp)
- MCFG_DEVICE_ADD("ym1", YM2203, XTAL(32'220'000)/24 * 3) /* 1.3425MHz Verified */
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
+ YM2203(config, "ym1", XTAL(32'220'000)/24 * 3).add_route(ALL_OUTPUTS, "mono", 0.60); /* 1.3425MHz Verified */
ym2151_device &ym2(YM2151(config, "ym2", XTAL(32'220'000)/9)); /* 3.58MHz Verified */
ym2.irq_handler().set_inputline(m_audiocpu, 1); /* IRQ2 */
ym2.add_route(ALL_OUTPUTS, "mono", 0.45);
- MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'220'000)/32, okim6295_device::PIN7_HIGH) /* 1.0068MHz Verified */
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
+ OKIM6295(config, "oki1", XTAL(32'220'000)/32, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.75); /* 1.0068MHz Verified */
- MCFG_DEVICE_ADD("oki2", OKIM6295, XTAL(32'220'000)/16, okim6295_device::PIN7_HIGH) /* 2.01375MHz Verified */
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
-MACHINE_CONFIG_END
+ OKIM6295(config, "oki2", XTAL(32'220'000)/16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.60); /* 2.01375MHz Verified */
+}
/******************************************************************************/
diff --git a/src/mame/drivers/cc40.cpp b/src/mame/drivers/cc40.cpp
index 8736bed7f98..e333a96ba3a 100644
--- a/src/mame/drivers/cc40.cpp
+++ b/src/mame/drivers/cc40.cpp
@@ -598,15 +598,14 @@ MACHINE_CONFIG_START(cc40_state::cc40)
NVRAM(config, "sysram.2", nvram_device::DEFAULT_ALL_0);
/* video hardware */
- MCFG_SCREEN_ADD("screen", LCD)
- MCFG_SCREEN_REFRESH_RATE(60) // arbitrary
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
- MCFG_SCREEN_SIZE(6*31+1, 9*1+1+1)
- MCFG_SCREEN_VISIBLE_AREA(0, 6*31, 0, 9*1+1)
- //screen.set_visarea_full();
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
+ screen.set_refresh_hz(60); // arbitrary
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500));
+ screen.set_size(6*31+1, 9*1+1+1);
+ screen.set_visarea_full();
config.set_default_layout(layout_cc40);
- MCFG_SCREEN_UPDATE_DEVICE("hd44780", hd44780_device, screen_update)
- MCFG_SCREEN_PALETTE("palette")
+ screen.set_screen_update("hd44780", FUNC(hd44780_device::screen_update));
+ screen.set_palette("palette");
PALETTE(config, "palette", FUNC(cc40_state::cc40_palette), 3);
diff --git a/src/mame/drivers/cchance.cpp b/src/mame/drivers/cchance.cpp
index e3d9a4cd3af..a57966eaee3 100644
--- a/src/mame/drivers/cchance.cpp
+++ b/src/mame/drivers/cchance.cpp
@@ -217,11 +217,11 @@ void cchance_state::machine_reset()
m_bell_io = 0;
}
-MACHINE_CONFIG_START(cchance_state::cchance)
-
- MCFG_DEVICE_ADD("maincpu", Z80,4000000) /* ? MHz */
- MCFG_DEVICE_PROGRAM_MAP(main_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cchance_state, irq0_line_hold)
+void cchance_state::cchance(machine_config &config)
+{
+ Z80(config, m_maincpu, 4000000); /* ? MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &cchance_state::main_map);
+ m_maincpu->set_vblank_int("screen", FUNC(cchance_state::irq0_line_hold));
GFXDECODE(config, "gfxdecode", m_palette, gfx_cchance);
@@ -229,14 +229,14 @@ MACHINE_CONFIG_START(cchance_state::cchance)
m_seta001->set_gfxdecode_tag("gfxdecode");
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(57.5)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(cchance_state, screen_update_tnzs)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cchance_state, screen_vblank_tnzs))
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(57.5);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ m_screen->set_size(32*8, 32*8);
+ m_screen->set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
+ m_screen->set_screen_update(FUNC(cchance_state::screen_update_tnzs));
+ m_screen->screen_vblank().set(FUNC(cchance_state::screen_vblank_tnzs));
+ m_screen->set_palette(m_palette);
PALETTE(config, m_palette, FUNC(cchance_state::prompalette), 512);
@@ -246,7 +246,7 @@ MACHINE_CONFIG_START(cchance_state::cchance)
aysnd.port_a_read_callback().set_ioport("DSW1");
aysnd.port_b_read_callback().set_ioport("DSW2");
aysnd.add_route(ALL_OUTPUTS, "mono", 0.25);
-MACHINE_CONFIG_END
+}
ROM_START( cchance )
ROM_REGION( 0x10000, "maincpu", 0 )
diff --git a/src/mame/drivers/cclimber.cpp b/src/mame/drivers/cclimber.cpp
index 688276e222d..803c089a1ba 100644
--- a/src/mame/drivers/cclimber.cpp
+++ b/src/mame/drivers/cclimber.cpp
@@ -255,7 +255,7 @@ void cclimber_state::machine_start()
WRITE8_MEMBER(cclimber_state::swimmer_sh_soundlatch_w)
{
- m_soundlatch->write(space,offset,data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff);
}
@@ -1105,33 +1105,33 @@ WRITE_LINE_MEMBER(cclimber_state::bagmanf_vblank_irq)
m_maincpu->set_input_line(0, HOLD_LINE);
}
-MACHINE_CONFIG_START(cclimber_state::root)
-
+void cclimber_state::root(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD(m_maincpu, Z80, XTAL(18'432'000)/3/2) /* 3.072 MHz */
- MCFG_DEVICE_PROGRAM_MAP(cclimber_map)
- MCFG_DEVICE_IO_MAP(cclimber_portmap)
+ Z80(config, m_maincpu, XTAL(18'432'000)/3/2); /* 3.072 MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &cclimber_state::cclimber_map);
+ m_maincpu->set_addrmap(AS_IO, &cclimber_state::cclimber_portmap);
- MCFG_DEVICE_ADD(m_mainlatch, LS259, 0)
+ LS259(config, m_mainlatch, 0);
m_mainlatch->q_out_cb<0>().set(FUNC(cclimber_state::nmi_mask_w));
m_mainlatch->q_out_cb<1>().set(FUNC(cclimber_state::flip_screen_x_w));
m_mainlatch->q_out_cb<2>().set(FUNC(cclimber_state::flip_screen_y_w));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(cclimber_state, screen_update_cclimber)
- MCFG_SCREEN_PALETTE(m_palette)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cclimber_state, vblank_irq))
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ 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);
+ screen.set_screen_update(FUNC(cclimber_state::screen_update_cclimber));
+ screen.set_palette(m_palette);
+ screen.screen_vblank().set(FUNC(cclimber_state::vblank_irq));
GFXDECODE(config, m_gfxdecode, m_palette, gfx_cclimber);
PALETTE(config, m_palette, FUNC(cclimber_state::cclimber_palette), 16*4+8*4);
MCFG_VIDEO_START_OVERRIDE(cclimber_state,cclimber)
-MACHINE_CONFIG_END
+}
void cclimber_state::cclimber(machine_config &config)
@@ -1186,7 +1186,8 @@ void cclimber_state::bagmanf(machine_config &config)
}
-MACHINE_CONFIG_START(cclimber_state::yamato)
+void cclimber_state::yamato(machine_config &config)
+{
root(config);
/* basic machine hardware */
@@ -1196,15 +1197,15 @@ MACHINE_CONFIG_START(cclimber_state::yamato)
maincpu.set_addrmap(AS_OPCODES, &cclimber_state::yamato_decrypted_opcodes_map);
maincpu.set_decrypted_tag(":decrypted_opcodes");
- MCFG_DEVICE_ADD("audiocpu", Z80, 3072000) /* 3.072 MHz ? */
- MCFG_DEVICE_PROGRAM_MAP(yamato_audio_map)
- MCFG_DEVICE_IO_MAP(yamato_audio_portmap)
+ Z80(config, m_audiocpu, 3072000); /* 3.072 MHz ? */
+ m_audiocpu->set_addrmap(AS_PROGRAM, &cclimber_state::yamato_audio_map);
+ m_audiocpu->set_addrmap(AS_IO, &cclimber_state::yamato_audio_portmap);
/* video hardware */
m_palette->set_entries(16*4+8*4+256);
m_palette->set_init(FUNC(cclimber_state::yamato_palette));
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(cclimber_state, screen_update_yamato)
+
+ subdevice<screen_device>("screen")->set_screen_update(FUNC(cclimber_state::screen_update_yamato));
/* audio hardware */
SPEAKER(config, "speaker").front_center();
@@ -1212,10 +1213,11 @@ MACHINE_CONFIG_START(cclimber_state::yamato)
AY8910(config, "ay1", XTAL(18'432'000)/12).add_route(ALL_OUTPUTS, "speaker", 0.25); /* 1.536 MHz */
AY8910(config, "ay2", XTAL(18'432'000)/12).add_route(ALL_OUTPUTS, "speaker", 0.25); /* 1.536 MHz */
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(cclimber_state::toprollr)
+void cclimber_state::toprollr(machine_config &config)
+{
cclimber(config);
sega_315_5018_device &maincpu(SEGA_315_5018(config.replace(), m_maincpu, XTAL(18'432'000)/3/2)); /* 3.072 MHz */
@@ -1236,36 +1238,36 @@ MACHINE_CONFIG_START(cclimber_state::toprollr)
MCFG_VIDEO_START_OVERRIDE(cclimber_state,toprollr)
subdevice<screen_device>("screen")->set_screen_update(FUNC(cclimber_state::screen_update_toprollr));
-MACHINE_CONFIG_END
-
+}
-MACHINE_CONFIG_START(cclimber_state::swimmer)
+void cclimber_state::swimmer(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD(m_maincpu, Z80, XTAL(18'432'000)/6) /* verified on pcb */
- MCFG_DEVICE_PROGRAM_MAP(swimmer_map)
+ Z80(config, m_maincpu, XTAL(18'432'000)/6); /* verified on pcb */
+ m_maincpu->set_addrmap(AS_PROGRAM, &cclimber_state::swimmer_map);
- MCFG_DEVICE_ADD(m_mainlatch, LS259, 0)
+ LS259(config, m_mainlatch, 0);
m_mainlatch->q_out_cb<0>().set(FUNC(cclimber_state::nmi_mask_w));
m_mainlatch->q_out_cb<1>().set(FUNC(cclimber_state::flip_screen_x_w));
m_mainlatch->q_out_cb<2>().set(FUNC(cclimber_state::flip_screen_y_w));
m_mainlatch->q_out_cb<3>().set(FUNC(cclimber_state::sidebg_enable_w));
m_mainlatch->q_out_cb<4>().set(FUNC(cclimber_state::palette_bank_w));
- MCFG_DEVICE_ADD("audiocpu", Z80,XTAL(4'000'000)/2) /* verified on pcb */
- MCFG_DEVICE_PROGRAM_MAP(swimmer_audio_map)
- MCFG_DEVICE_IO_MAP(swimmer_audio_portmap)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(cclimber_state, nmi_line_pulse, (double)4000000/16384) /* IRQs are triggered by the main CPU */
+ Z80(config, m_audiocpu, XTAL(4'000'000)/2); /* verified on pcb */
+ m_audiocpu->set_addrmap(AS_PROGRAM, &cclimber_state::swimmer_audio_map);
+ m_audiocpu->set_addrmap(AS_IO, &cclimber_state::swimmer_audio_portmap);
+ m_audiocpu->set_periodic_int(FUNC(cclimber_state::nmi_line_pulse), attotime::from_hz((double)4000000/16384)); /* IRQs are triggered by the main CPU */
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60.57) /* verified on pcb */
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(cclimber_state, screen_update_swimmer)
- MCFG_SCREEN_PALETTE(m_palette)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cclimber_state, vblank_irq))
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60.57); /* 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);
+ screen.set_screen_update(FUNC(cclimber_state::screen_update_swimmer));
+ screen.set_palette(m_palette);
+ screen.screen_vblank().set(FUNC(cclimber_state::vblank_irq));
GFXDECODE(config, m_gfxdecode, m_palette, gfx_swimmer);
PALETTE(config, m_palette, FUNC(cclimber_state::swimmer_palette), 32*8+4*8+1);
@@ -1280,7 +1282,7 @@ MACHINE_CONFIG_START(cclimber_state::swimmer)
AY8910(config, "ay1", XTAL(4'000'000)/2).add_route(ALL_OUTPUTS, "speaker", 0.25); /* verified on pcb */
AY8910(config, "ay2", XTAL(4'000'000)/2).add_route(ALL_OUTPUTS, "speaker", 0.25); /* verified on pcb */
-MACHINE_CONFIG_END
+}
void cclimber_state::guzzler(machine_config &config)
{
diff --git a/src/mame/drivers/ccs2810.cpp b/src/mame/drivers/ccs2810.cpp
index 0c31b362ec6..9372ecc73f6 100644
--- a/src/mame/drivers/ccs2810.cpp
+++ b/src/mame/drivers/ccs2810.cpp
@@ -173,7 +173,7 @@ READ8_MEMBER(ccs_state::io_read)
{
// A7-A3 are compared against jumper settings
if (m_ser_en->read() && (offset & 0x00f8) == m_ser_addr_sel->read())
- return m_ins8250->ins8250_r(space, offset & 7);
+ return m_ins8250->ins8250_r(offset & 7);
return 0xff;
}
@@ -182,7 +182,7 @@ WRITE8_MEMBER(ccs_state::io_write)
{
// A7-A3 are compared against jumper settings
if (m_ser_en->read() && (offset & 0x00f8) == m_ser_addr_sel->read())
- m_ins8250->ins8250_w(space, offset & 7, data);
+ m_ins8250->ins8250_w(offset & 7, data);
}
void ccs_state::ccs2810_mem(address_map &map)
diff --git a/src/mame/drivers/cdc721.cpp b/src/mame/drivers/cdc721.cpp
index bec2d25e4af..c6825c48a8e 100644
--- a/src/mame/drivers/cdc721.cpp
+++ b/src/mame/drivers/cdc721.cpp
@@ -268,7 +268,7 @@ uint32_t cdc721_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap
{
uint16_t ma = m_videoram[y * 2] | m_videoram[y * 2 + 1] << 8;
- for (ra = 0; ra < 16; ra++)
+ for (ra = 0; ra < 15; ra++)
{
uint16_t *p = &bitmap.pix16(sy++);
@@ -304,12 +304,13 @@ uint32_t cdc721_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap
return 0;
}
-MACHINE_CONFIG_START(cdc721_state::cdc721)
+void cdc721_state::cdc721(machine_config &config)
+{
// basic machine hardware
- MCFG_DEVICE_ADD("maincpu", Z80, 6_MHz_XTAL) // Zilog Z8400B (Z80B)
- MCFG_DEVICE_PROGRAM_MAP(mem_map)
- MCFG_DEVICE_IO_MAP(io_map)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(cdc721_state, restart_cb)
+ Z80(config, m_maincpu, 6_MHz_XTAL); // Zilog Z8400B (Z80B)
+ m_maincpu->set_addrmap(AS_PROGRAM, &cdc721_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &cdc721_state::io_map);
+ m_maincpu->set_irq_acknowledge_callback(FUNC(cdc721_state::restart_cb));
ADDRESS_MAP_BANK(config, "block0").set_map(&cdc721_state::block0_map).set_options(ENDIANNESS_LITTLE, 8, 32, 0x4000);
ADDRESS_MAP_BANK(config, "block4").set_map(&cdc721_state::block4_map).set_options(ENDIANNESS_LITTLE, 8, 32, 0x4000);
@@ -319,13 +320,10 @@ MACHINE_CONFIG_START(cdc721_state::cdc721)
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // MCM51L01C45 (256x4) + battery
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_UPDATE_DRIVER(cdc721_state, screen_update)
- MCFG_SCREEN_SIZE(640, 480)
- MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 479)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(12.936_MHz_XTAL, 800, 0, 640, 539, 0, 450);
+ screen.set_screen_update(FUNC(cdc721_state::screen_update));
+ screen.set_palette("palette");
PALETTE(config, "palette", FUNC(cdc721_state::cdc721_palette), 3);
GFXDECODE(config, "gfxdecode", "palette", gfx_cdc721);
@@ -398,7 +396,7 @@ MACHINE_CONFIG_START(cdc721_state::cdc721)
chb.ri_handler().set("pbuart", FUNC(ins8250_device::ri_w));
INPUT_MERGER_ANY_HIGH(config, "int2").output_handler().set(FUNC(cdc721_state::int_w<2>)); // 74S05 (open collector)
-MACHINE_CONFIG_END
+}
ROM_START( cdc721 )
ROM_REGION( 0x4000, "resident", 0 )
diff --git a/src/mame/drivers/cedar_magnet.cpp b/src/mame/drivers/cedar_magnet.cpp
index 219e83956f3..4c545df2b14 100644
--- a/src/mame/drivers/cedar_magnet.cpp
+++ b/src/mame/drivers/cedar_magnet.cpp
@@ -767,13 +767,13 @@ INTERRUPT_GEN_MEMBER(cedar_magnet_state::irq)
m_cedsprite->irq_hold();
}
-MACHINE_CONFIG_START(cedar_magnet_state::cedar_magnet)
-
+void cedar_magnet_state::cedar_magnet(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80,4000000) /* ? MHz */
- MCFG_DEVICE_PROGRAM_MAP(cedar_magnet_map)
- MCFG_DEVICE_IO_MAP(cedar_magnet_io)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cedar_magnet_state, irq)
+ Z80(config, m_maincpu, 4000000); /* ? MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &cedar_magnet_state::cedar_magnet_map);
+ m_maincpu->set_addrmap(AS_IO, &cedar_magnet_state::cedar_magnet_io);
+ m_maincpu->set_vblank_int("screen", FUNC(cedar_magnet_state::irq));
ADDRESS_MAP_BANK(config, "bank0").set_map(&cedar_magnet_state::cedar_bank0).set_options(ENDIANNESS_LITTLE, 8, 18, 0x10000);
ADDRESS_MAP_BANK(config, "mb_sub_ram").set_map(&cedar_magnet_state::cedar_magnet_mainboard_sub_ram_map).set_options(ENDIANNESS_LITTLE, 8, 18, 0x10000);
@@ -794,15 +794,15 @@ MACHINE_CONFIG_START(cedar_magnet_state::cedar_magnet)
m_ic49_pio->out_pb_callback().set(FUNC(cedar_magnet_state::ic49_pio_pb_w));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(256, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 256-8-1, 0, 192-1)
- MCFG_SCREEN_UPDATE_DRIVER(cedar_magnet_state, screen_update_cedar_magnet)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(256, 256);
+ screen.set_visarea(0, 256-8-1, 0, 192-1);
+ screen.set_screen_update(FUNC(cedar_magnet_state::screen_update_cedar_magnet));
+ screen.set_palette(m_palette);
- MCFG_PALETTE_ADD("palette", 0x400)
+ PALETTE(config, m_palette).set_entries(0x400);
CEDAR_MAGNET_SOUND(config, m_cedsound, 0);
CEDAR_MAGNET_PLANE(config, m_cedplane0, 0);
@@ -812,7 +812,7 @@ MACHINE_CONFIG_START(cedar_magnet_state::cedar_magnet)
CEDAR_MAGNET_FLOP(config, "flop", 0);
config.m_perfect_cpu_quantum = subtag("maincpu");
-MACHINE_CONFIG_END
+}
#define BIOS_ROM \
diff --git a/src/mame/drivers/cesclass.cpp b/src/mame/drivers/cesclass.cpp
index abbe6c160c1..a8633d13ae7 100644
--- a/src/mame/drivers/cesclass.cpp
+++ b/src/mame/drivers/cesclass.cpp
@@ -248,29 +248,28 @@ void cesclassic_state::cesclassic_palette(palette_device &palette) const
palette.set_pen_color(i, pal2bit(i), 0, 0);
}
-MACHINE_CONFIG_START(cesclassic_state::cesclassic)
-
- MCFG_DEVICE_ADD("maincpu", M68000, 24000000/2 )
- MCFG_DEVICE_PROGRAM_MAP(cesclassic_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("l_lcd", cesclassic_state, irq2_line_assert) // TODO: unknown sources
- MCFG_DEVICE_PERIODIC_INT_DRIVER(cesclassic_state, irq3_line_assert, 60*8)
+void cesclassic_state::cesclassic(machine_config &config)
+{
+ M68000(config, m_maincpu, 24000000/2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cesclassic_state::cesclassic_map);
+ m_maincpu->set_vblank_int("l_lcd", FUNC(cesclassic_state::irq2_line_assert)); // TODO: unknown sources
+ m_maincpu->set_periodic_int(FUNC(cesclassic_state::irq3_line_assert), attotime::from_hz(60*8));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
/* video hardware */
- MCFG_SCREEN_ADD("l_lcd", LCD)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
- MCFG_SCREEN_UPDATE_DRIVER(cesclassic_state, screen_update)
- MCFG_SCREEN_SIZE(8*16*2, 8*8+3*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 8*16*2-1, 0*8, 8*8-1)
+ screen_device &screen(SCREEN(config, "l_lcd", SCREEN_TYPE_LCD));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500));
+ screen.set_screen_update(FUNC(cesclassic_state::screen_update));
+ screen.set_size(8*16*2, 8*8+3*8);
+ screen.set_visarea(0*8, 8*16*2-1, 0*8, 8*8-1);
PALETTE(config, m_palette, FUNC(cesclassic_state::cesclassic_palette), 4);
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("oki", OKIM6295, 24000000/16, okim6295_device::PIN7_LOW)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5)
-MACHINE_CONFIG_END
+ OKIM6295(config, m_oki, 24000000/16, okim6295_device::PIN7_LOW).add_route(ALL_OUTPUTS, "mono", 0.5);
+}
ROM_START(hrclass)
diff --git a/src/mame/drivers/chaknpop.cpp b/src/mame/drivers/chaknpop.cpp
index 0bbc792177f..01feb17a84e 100644
--- a/src/mame/drivers/chaknpop.cpp
+++ b/src/mame/drivers/chaknpop.cpp
@@ -362,24 +362,24 @@ void chaknpop_state::machine_reset()
m_flip_y = 0;
}
-MACHINE_CONFIG_START(chaknpop_state::chaknpop)
-
+void chaknpop_state::chaknpop(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, XTAL(18'000'000) / 6) // Verified on PCB
- MCFG_DEVICE_PROGRAM_MAP(chaknpop_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", chaknpop_state, irq0_line_hold)
+ Z80(config, m_maincpu, XTAL(18'000'000) / 6); // Verified on PCB
+ m_maincpu->set_addrmap(AS_PROGRAM, &chaknpop_state::chaknpop_map);
+ m_maincpu->set_vblank_int("screen", FUNC(chaknpop_state::irq0_line_hold));
- MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU, XTAL(18'000'000) / 6) // Verified on PCB
+ TAITO68705_MCU(config, m_bmcu, XTAL(18'000'000) / 6); // Verified on PCB
config.m_minimum_quantum = attotime::from_hz(6000); // 100 CPU slices per frame - a high value to ensure proper synchronization of the CPUs
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(59.1828)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(chaknpop_state, screen_update)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(59.1828);
+ 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);
+ screen.set_screen_update(FUNC(chaknpop_state::screen_update));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_chaknpop);
PALETTE(config, m_palette, FUNC(chaknpop_state::chaknpop_palette), 1024);
@@ -396,7 +396,7 @@ MACHINE_CONFIG_START(chaknpop_state::chaknpop)
ay2.port_a_write_callback().set(FUNC(chaknpop_state::unknown_port_1_w)); // ??
ay2.port_b_write_callback().set(FUNC(chaknpop_state::unknown_port_2_w)); // ??
ay2.add_route(ALL_OUTPUTS, "mono", 0.10);
-MACHINE_CONFIG_END
+}
/***************************************************************************
diff --git a/src/mame/drivers/champbas.cpp b/src/mame/drivers/champbas.cpp
index 97f1fc12b41..8bc7082d3a3 100644
--- a/src/mame/drivers/champbas.cpp
+++ b/src/mame/drivers/champbas.cpp
@@ -519,12 +519,12 @@ INTERRUPT_GEN_MEMBER(champbas_state::vblank_irq)
}
-MACHINE_CONFIG_START(champbas_state::talbot)
-
+void champbas_state::talbot(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, XTAL(18'432'000)/6)
- MCFG_DEVICE_PROGRAM_MAP(champbasj_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", champbas_state, vblank_irq)
+ Z80(config, m_maincpu, XTAL(18'432'000)/6);
+ m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::champbasj_map);
+ m_maincpu->set_vblank_int("screen", FUNC(champbas_state::vblank_irq));
LS259(config, m_mainlatch);
m_mainlatch->q_out_cb<0>().set(FUNC(champbas_state::irq_enable_w));
@@ -536,18 +536,18 @@ MACHINE_CONFIG_START(champbas_state::talbot)
m_mainlatch->q_out_cb<6>().set(FUNC(champbas_state::mcu_start_w));
m_mainlatch->q_out_cb<7>().set(FUNC(champbas_state::mcu_switch_w));
- MCFG_DEVICE_ADD("alpha_8201", ALPHA_8201, XTAL(18'432'000)/6/8)
+ ALPHA_8201(config, m_alpha_8201, XTAL(18'432'000)/6/8);
config.m_perfect_cpu_quantum = subtag("alpha_8201:mcu");
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 0x10);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(champbas_state, screen_update_champbas)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_size(32*8, 32*8);
+ screen.set_visarea(0, 32*8-1, 2*8, 30*8-1);
+ screen.set_screen_update(FUNC(champbas_state::screen_update_champbas));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_talbot);
PALETTE(config, m_palette, FUNC(champbas_state::champbas_palette), 512, 32);
@@ -558,15 +558,15 @@ MACHINE_CONFIG_START(champbas_state::talbot)
GENERIC_LATCH_8(config, "soundlatch");
AY8910(config, "ay1", XTAL(18'432'000)/12).add_route(ALL_OUTPUTS, "speaker", 0.5);
-MACHINE_CONFIG_END
-
+}
-MACHINE_CONFIG_START(champbas_state::champbas)
+void champbas_state::champbas(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, XTAL(18'432'000)/6)
- MCFG_DEVICE_PROGRAM_MAP(champbas_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", champbas_state, vblank_irq)
+ Z80(config, m_maincpu, XTAL(18'432'000)/6);
+ m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::champbas_map);
+ m_maincpu->set_vblank_int("screen", FUNC(champbas_state::vblank_irq));
LS259(config, m_mainlatch); // 9D; 8G on Champion Baseball II Double Board Configuration
m_mainlatch->q_out_cb<0>().set(FUNC(champbas_state::irq_enable_w));
@@ -578,18 +578,18 @@ MACHINE_CONFIG_START(champbas_state::champbas)
m_mainlatch->q_out_cb<6>().set_nop(); // no MCU
m_mainlatch->q_out_cb<7>().set_nop(); // no MCU
- MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(18'432'000)/6)
- MCFG_DEVICE_PROGRAM_MAP(champbas_sound_map)
+ z80_device &audiocpu(Z80(config, "audiocpu", XTAL(18'432'000)/6));
+ audiocpu.set_addrmap(AS_PROGRAM, &champbas_state::champbas_sound_map);
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 0x10);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(champbas_state, screen_update_champbas)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_size(32*8, 32*8);
+ screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
+ screen.set_screen_update(FUNC(champbas_state::screen_update_champbas));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_champbas);
PALETTE(config, m_palette, FUNC(champbas_state::champbas_palette), 512, 32);
@@ -605,70 +605,70 @@ MACHINE_CONFIG_START(champbas_state::champbas)
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(champbas_state::champbasj)
+void champbas_state::champbasj(machine_config &config)
+{
champbas(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(champbasj_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::champbasj_map);
m_mainlatch->q_out_cb<6>().set(FUNC(champbas_state::mcu_start_w));
m_mainlatch->q_out_cb<7>().set(FUNC(champbas_state::mcu_switch_w));
- MCFG_DEVICE_ADD("alpha_8201", ALPHA_8201, XTAL(18'432'000)/6/8) // note: 8302 rom on champbb2 (same device!)
+ ALPHA_8201(config, m_alpha_8201, XTAL(18'432'000)/6/8); // note: 8302 rom on champbb2 (same device!)
config.m_perfect_cpu_quantum = subtag("alpha_8201:mcu");
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(champbas_state::champbasja)
+void champbas_state::champbasja(machine_config &config)
+{
champbas(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(champbasja_map)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::champbasja_map);
+}
-MACHINE_CONFIG_START(champbas_state::champbasjb)
+void champbas_state::champbasjb(machine_config &config)
+{
champbas(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(champbasjb_map)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::champbasjb_map);
+}
-MACHINE_CONFIG_START(champbas_state::champbb2)
+void champbas_state::champbb2(machine_config &config)
+{
champbasj(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(champbb2_map)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::champbb2_map);
+}
-MACHINE_CONFIG_START(champbas_state::champbb2j)
+void champbas_state::champbb2j(machine_config &config)
+{
champbb2(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(champbb2j_map)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::champbb2j_map);
+}
-MACHINE_CONFIG_START(champbas_state::tbasebal)
+void champbas_state::tbasebal(machine_config &config)
+{
champbas(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(tbasebal_map)
-
- MCFG_DEVICE_ADD("mcu", M68705P3, XTAL(18'432'000)/6) // ?Mhz
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::tbasebal_map);
+ M68705P3(config, "mcu", XTAL(18'432'000)/6); // ?Mhz
+}
-MACHINE_CONFIG_START(exctsccr_state::exctsccr)
+void exctsccr_state::exctsccr(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, XTAL(18'432'000)/6 )
- MCFG_DEVICE_PROGRAM_MAP(exctsccr_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", exctsccr_state, vblank_irq)
+ Z80(config, m_maincpu, XTAL(18'432'000)/6);
+ m_maincpu->set_addrmap(AS_PROGRAM, &exctsccr_state::exctsccr_map);
+ m_maincpu->set_vblank_int("screen", FUNC(exctsccr_state::vblank_irq));
LS259(config, m_mainlatch);
m_mainlatch->q_out_cb<0>().set(FUNC(exctsccr_state::irq_enable_w));
@@ -680,27 +680,27 @@ MACHINE_CONFIG_START(exctsccr_state::exctsccr)
m_mainlatch->q_out_cb<6>().set(FUNC(exctsccr_state::mcu_start_w));
m_mainlatch->q_out_cb<7>().set(FUNC(exctsccr_state::mcu_switch_w));
- MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(14'318'181)/4 )
- MCFG_DEVICE_PROGRAM_MAP(exctsccr_sound_map)
- MCFG_DEVICE_IO_MAP(exctsccr_sound_io_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(exctsccr_state, nmi_line_pulse, 4000) // 4 kHz, updates the dac
+ Z80(config, m_audiocpu, XTAL(14'318'181)/4);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &exctsccr_state::exctsccr_sound_map);
+ m_audiocpu->set_addrmap(AS_IO, &exctsccr_state::exctsccr_sound_io_map);
+ m_audiocpu->set_periodic_int(FUNC(exctsccr_state::nmi_line_pulse), attotime::from_hz(4000)); // 4 kHz, updates the dac
timer_device &exc_snd_irq(TIMER(config, "exc_snd_irq"));
exc_snd_irq.configure_periodic(FUNC(exctsccr_state::exctsccr_sound_irq), attotime::from_hz(75)); // irq source unknown, determines music tempo
exc_snd_irq.set_start_delay(attotime::from_hz(75));
- MCFG_DEVICE_ADD("alpha_8201", ALPHA_8201, XTAL(18'432'000)/6/8) // note: 8302 rom, or 8303 on exctscc2 (same device!)
+ ALPHA_8201(config, m_alpha_8201, XTAL(18'432'000)/6/8); // note: 8302 rom, or 8303 on exctscc2 (same device!)
config.m_perfect_cpu_quantum = subtag("alpha_8201:mcu");
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 0x10);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60.54)
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(exctsccr_state, screen_update_exctsccr)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60.54);
+ screen.set_size(32*8, 32*8);
+ screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
+ screen.set_screen_update(FUNC(exctsccr_state::screen_update_exctsccr));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_exctsccr);
PALETTE(config, m_palette, FUNC(exctsccr_state::exctsccr_palette), 512, 32);
@@ -724,15 +724,15 @@ MACHINE_CONFIG_START(exctsccr_state::exctsccr)
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
vref.add_route(0, "dac1", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac1", -1.0, DAC_VREF_NEG_INPUT);
vref.add_route(0, "dac2", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac2", -1.0, DAC_VREF_NEG_INPUT);
-MACHINE_CONFIG_END
+}
/* Bootleg running on a modified Champion Baseball board */
-MACHINE_CONFIG_START(exctsccr_state::exctsccrb)
-
+void exctsccr_state::exctsccrb(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, XTAL(18'432'000)/6)
- MCFG_DEVICE_PROGRAM_MAP(exctsccrb_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", exctsccr_state, vblank_irq)
+ Z80(config, m_maincpu, XTAL(18'432'000)/6);
+ m_maincpu->set_addrmap(AS_PROGRAM, &exctsccr_state::exctsccrb_map);
+ m_maincpu->set_vblank_int("screen", FUNC(exctsccr_state::vblank_irq));
LS259(config, m_mainlatch);
m_mainlatch->q_out_cb<0>().set(FUNC(exctsccr_state::irq_enable_w));
@@ -744,21 +744,21 @@ MACHINE_CONFIG_START(exctsccr_state::exctsccrb)
m_mainlatch->q_out_cb<6>().set(FUNC(exctsccr_state::mcu_start_w));
m_mainlatch->q_out_cb<7>().set(FUNC(exctsccr_state::mcu_switch_w));
- MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(18'432'000)/6)
- MCFG_DEVICE_PROGRAM_MAP(champbas_sound_map)
+ Z80(config, m_audiocpu, XTAL(18'432'000)/6);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &exctsccr_state::champbas_sound_map);
- MCFG_DEVICE_ADD("alpha_8201", ALPHA_8201, XTAL(18'432'000)/6/8) // champbasj 8201 on pcb, though unused
+ ALPHA_8201(config, m_alpha_8201, XTAL(18'432'000)/6/8); // champbasj 8201 on pcb, though unused
config.m_perfect_cpu_quantum = subtag("alpha_8201:mcu");
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 0x10);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(exctsccr_state, screen_update_exctsccr)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_size(32*8, 32*8);
+ screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
+ screen.set_screen_update(FUNC(exctsccr_state::screen_update_exctsccr));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_exctsccr);
PALETTE(config, m_palette, FUNC(exctsccr_state::exctsccr_palette), 512, 32);
@@ -774,7 +774,7 @@ MACHINE_CONFIG_START(exctsccr_state::exctsccrb)
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/champbwl.cpp b/src/mame/drivers/champbwl.cpp
index bcba22c6383..2998b5b976c 100644
--- a/src/mame/drivers/champbwl.cpp
+++ b/src/mame/drivers/champbwl.cpp
@@ -489,12 +489,12 @@ WRITE_LINE_MEMBER(champbwl_state::screen_vblank_champbwl)
}
-MACHINE_CONFIG_START(champbwl_state::champbwl)
-
+void champbwl_state::champbwl(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 16000000/4) /* 4MHz */
- MCFG_DEVICE_PROGRAM_MAP(champbwl_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", champbwl_state, irq0_line_hold)
+ Z80(config, m_maincpu, 16000000/4); /* 4MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &champbwl_state::champbwl_map);
+ m_maincpu->set_vblank_int("screen", FUNC(champbwl_state::irq0_line_hold));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
@@ -505,14 +505,14 @@ MACHINE_CONFIG_START(champbwl_state::champbwl)
m_seta001->set_gfxdecode_tag("gfxdecode");
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(57.5)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(champbwl_state, screen_update_champbwl)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, champbwl_state, screen_vblank_champbwl))
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(57.5);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(0*8, 48*8-1, 1*8, 31*8-1);
+ screen.set_screen_update(FUNC(champbwl_state::screen_update_champbwl));
+ screen.screen_vblank().set(FUNC(champbwl_state::screen_vblank_champbwl));
+ screen.set_palette(m_palette);
GFXDECODE(config, "gfxdecode", m_palette, gfx_champbwl);
PALETTE(config, m_palette, FUNC(champbwl_state::champbwl_palette), 512);
@@ -521,10 +521,10 @@ MACHINE_CONFIG_START(champbwl_state::champbwl)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("x1snd", X1_010, 16000000)
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
-MACHINE_CONFIG_END
+ X1_010(config, m_x1, 16000000);
+ m_x1->add_route(0, "lspeaker", 1.0);
+ m_x1->add_route(1, "rspeaker", 1.0);
+}
@@ -553,12 +553,12 @@ MACHINE_START_MEMBER(champbwl_state,doraemon)
m_mainbank->configure_entries(0, 4, &ROM[0], 0x4000);
}
-MACHINE_CONFIG_START(champbwl_state::doraemon)
-
+void champbwl_state::doraemon(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, XTAL(14'318'181)/4)
- MCFG_DEVICE_PROGRAM_MAP(doraemon_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", champbwl_state, irq0_line_hold)
+ Z80(config, m_maincpu, XTAL(14'318'181)/4);
+ m_maincpu->set_addrmap(AS_PROGRAM, &champbwl_state::doraemon_map);
+ m_maincpu->set_vblank_int("screen", FUNC(champbwl_state::irq0_line_hold));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
@@ -570,23 +570,22 @@ MACHINE_CONFIG_START(champbwl_state::doraemon)
MCFG_MACHINE_START_OVERRIDE(champbwl_state,doraemon)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(320, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 16, 256-16-1)
- MCFG_SCREEN_UPDATE_DRIVER(champbwl_state, screen_update_doraemon)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, champbwl_state, screen_vblank_doraemon))
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(320, 256);
+ screen.set_visarea(0, 320-1, 16, 256-16-1);
+ screen.set_screen_update(FUNC(champbwl_state::screen_update_doraemon));
+ screen.screen_vblank().set(FUNC(champbwl_state::screen_vblank_doraemon));
+ screen.set_palette(m_palette);
GFXDECODE(config, "gfxdecode", m_palette, gfx_champbwl);
PALETTE(config, m_palette, FUNC(champbwl_state::champbwl_palette), 512);
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("x1snd", X1_010, XTAL(14'318'181))
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
-MACHINE_CONFIG_END
+ X1_010(config, m_x1, XTAL(14'318'181)).add_route(ALL_OUTPUTS, "mono", 1.0);
+}
diff --git a/src/mame/drivers/chanbara.cpp b/src/mame/drivers/chanbara.cpp
index 290badcd9b2..352aeb368de 100644
--- a/src/mame/drivers/chanbara.cpp
+++ b/src/mame/drivers/chanbara.cpp
@@ -394,22 +394,22 @@ void chanbara_state::machine_reset()
m_scrollhi = 0;
}
-MACHINE_CONFIG_START(chanbara_state::chanbara)
-
- MCFG_DEVICE_ADD("maincpu", MC6809E, XTAL(12'000'000)/8)
- MCFG_DEVICE_PROGRAM_MAP(chanbara_map)
+void chanbara_state::chanbara(machine_config &config)
+{
+ MC6809E(config, m_maincpu, XTAL(12'000'000)/8);
+ m_maincpu->set_addrmap(AS_PROGRAM, &chanbara_state::chanbara_map);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
-// MCFG_SCREEN_REFRESH_RATE(57.4122)
-// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
-// MCFG_SCREEN_SIZE(32*8, 32*8)
-// MCFG_SCREEN_VISIBLE_AREA(0, 32*8-1, 2*8, 30*8-1)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+// screen.set_refresh_hz(57.4122);
+// screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+// screen.set_size(32*8, 32*8);
+// screen.set_visarea(0, 32*8-1, 2*8, 30*8-1);
// DECO video CRTC
- MCFG_SCREEN_RAW_PARAMS(XTAL(12'000'000)/2,384,0,256,272,16,240)
- MCFG_SCREEN_UPDATE_DRIVER(chanbara_state, screen_update_chanbara)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen.set_raw(XTAL(12'000'000)/2,384,0,256,272,16,240);
+ screen.set_screen_update(FUNC(chanbara_state::screen_update_chanbara));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_chanbara);
@@ -422,7 +422,7 @@ MACHINE_CONFIG_START(chanbara_state::chanbara)
ymsnd.port_a_write_callback().set(FUNC(chanbara_state::chanbara_ay_out_0_w));
ymsnd.port_b_write_callback().set(FUNC(chanbara_state::chanbara_ay_out_1_w));
ymsnd.add_route(ALL_OUTPUTS, "mono", 1.0);
-MACHINE_CONFIG_END
+}
ROM_START( chanbara )
diff --git a/src/mame/drivers/chance32.cpp b/src/mame/drivers/chance32.cpp
index 7169627c897..4e95975b043 100644
--- a/src/mame/drivers/chance32.cpp
+++ b/src/mame/drivers/chance32.cpp
@@ -458,23 +458,23 @@ void chance32_state::machine_reset()
}
-MACHINE_CONFIG_START(chance32_state::chance32)
-
+void chance32_state::chance32(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80,12000000/2)
- MCFG_DEVICE_PROGRAM_MAP(chance32_map)
- MCFG_DEVICE_IO_MAP(chance32_portmap)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", chance32_state, irq0_line_hold)
+ Z80(config, m_maincpu, 12000000/2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &chance32_state::chance32_map);
+ m_maincpu->set_addrmap(AS_IO, &chance32_state::chance32_portmap);
+ m_maincpu->set_vblank_int("screen", FUNC(chance32_state::irq0_line_hold));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(52.786)
-// MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(40*16, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0, 35*16-1, 0, 29*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(chance32_state, screen_update_chance32)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(52.786);
+// screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(40*16, 32*8);
+ screen.set_visarea(0, 35*16-1, 0, 29*8-1);
+ screen.set_screen_update(FUNC(chance32_state::screen_update_chance32));
+ screen.set_palette("palette");
h46505_device &crtc(H46505(config, "crtc", 12000000/16)); /* 52.786 Hz (similar to Major Poker) */
crtc.set_screen("screen");
@@ -488,9 +488,8 @@ MACHINE_CONFIG_START(chance32_state::chance32)
SPEAKER(config, "mono").front_center();
/* clock at 1050 kHz match the 8000 Hz samples stored inside the ROM */
- MCFG_DEVICE_ADD("oki", OKIM6295, 1.056_MHz_XTAL, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
-MACHINE_CONFIG_END
+ OKIM6295(config, "oki", 1.056_MHz_XTAL, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); // clock frequency & pin 7 not verified
+}
ROM_START( chance32 )
diff --git a/src/mame/drivers/channelf.cpp b/src/mame/drivers/channelf.cpp
index 5927fad742d..529a911e10d 100644
--- a/src/mame/drivers/channelf.cpp
+++ b/src/mame/drivers/channelf.cpp
@@ -207,107 +207,107 @@ void channelf_state::channelf_cart(machine_config &config)
SOFTWARE_LIST(config, "cart_list").set_original("channelf");
}
-MACHINE_CONFIG_START(channelf_state::channelf)
+void channelf_state::channelf(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", F8, 3.579545_MHz_XTAL/2) /* Colorburst/2 */
- MCFG_DEVICE_PROGRAM_MAP(channelf_map)
- MCFG_DEVICE_IO_MAP(channelf_io)
+ F8(config, m_maincpu, 3.579545_MHz_XTAL/2); /* Colorburst/2 */
+ m_maincpu->set_addrmap(AS_PROGRAM, &channelf_state::channelf_map);
+ m_maincpu->set_addrmap(AS_IO, &channelf_state::channelf_io);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(128, 64)
- MCFG_SCREEN_VISIBLE_AREA(4, 112 - 7, 4, 64 - 3)
- MCFG_SCREEN_UPDATE_DRIVER(channelf_state, screen_update_channelf)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_size(128, 64);
+ screen.set_visarea(4, 112 - 7, 4, 64 - 3);
+ screen.set_screen_update(FUNC(channelf_state::screen_update_channelf));
+ screen.set_palette("palette");
PALETTE(config, "palette", FUNC(channelf_state::channelf_palette), 8);
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("custom", CHANNELF_SOUND)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
+ CHANNELF_SOUND(config, m_custom).add_route(ALL_OUTPUTS, "mono", 1.00);
channelf_cart(config);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(channelf_state::sabavdpl)
+void channelf_state::sabavdpl(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", F8, 4_MHz_XTAL/2) /* PAL speed */
- MCFG_DEVICE_PROGRAM_MAP(channelf_map)
- MCFG_DEVICE_IO_MAP(channelf_io)
+ F8(config, m_maincpu, 4_MHz_XTAL/2); /* PAL speed */
+ m_maincpu->set_addrmap(AS_PROGRAM, &channelf_state::channelf_map);
+ m_maincpu->set_addrmap(AS_IO, &channelf_state::channelf_io);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(4623)) /* approximate */
- MCFG_SCREEN_SIZE(128, 64)
- MCFG_SCREEN_VISIBLE_AREA(4, 112 - 7, 4, 64 - 3)
- MCFG_SCREEN_UPDATE_DRIVER(channelf_state, screen_update_channelf)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(4623)); /* approximate */
+ screen.set_size(128, 64);
+ screen.set_visarea(4, 112 - 7, 4, 64 - 3);
+ screen.set_screen_update(FUNC(channelf_state::screen_update_channelf));
+ screen.set_palette("palette");
PALETTE(config, "palette", FUNC(channelf_state::channelf_palette), 8);
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("custom", CHANNELF_SOUND)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
+ CHANNELF_SOUND(config, m_custom).add_route(ALL_OUTPUTS, "mono", 1.00);
channelf_cart(config);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(channelf_state::channlf2)
+void channelf_state::channlf2(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", F8, 3.579545_MHz_XTAL/2) /* Colorburst / 2 */
- MCFG_DEVICE_PROGRAM_MAP(channelf_map)
- MCFG_DEVICE_IO_MAP(channelf_io)
+ F8(config, m_maincpu, 3.579545_MHz_XTAL/2); /* Colorburst / 2 */
+ m_maincpu->set_addrmap(AS_PROGRAM, &channelf_state::channelf_map);
+ m_maincpu->set_addrmap(AS_IO, &channelf_state::channelf_io);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(128, 64)
- MCFG_SCREEN_VISIBLE_AREA(4, 112 - 7, 4, 64 - 3)
- MCFG_SCREEN_UPDATE_DRIVER(channelf_state, screen_update_channelf)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_size(128, 64);
+ screen.set_visarea(4, 112 - 7, 4, 64 - 3);
+ screen.set_screen_update(FUNC(channelf_state::screen_update_channelf));
+ screen.set_palette("palette");
PALETTE(config, "palette", FUNC(channelf_state::channelf_palette), 8);
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("custom", CHANNELF_SOUND)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
+ CHANNELF_SOUND(config, m_custom).add_route(ALL_OUTPUTS, "mono", 1.00);
channelf_cart(config);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(channelf_state::sabavpl2)
+void channelf_state::sabavpl2(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", F8, 4_MHz_XTAL/2) /* PAL speed */
- MCFG_DEVICE_PROGRAM_MAP(channelf_map)
- MCFG_DEVICE_IO_MAP(channelf_io)
+ F8(config, m_maincpu, 4_MHz_XTAL/2); /* PAL speed */
+ m_maincpu->set_addrmap(AS_PROGRAM, &channelf_state::channelf_map);
+ m_maincpu->set_addrmap(AS_IO, &channelf_state::channelf_io);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(4623)) /* approximate */
- MCFG_SCREEN_SIZE(128, 64)
- MCFG_SCREEN_VISIBLE_AREA(4, 112 - 7, 4, 64 - 3)
- MCFG_SCREEN_UPDATE_DRIVER(channelf_state, screen_update_channelf)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(4623)); /* approximate */
+ screen.set_size(128, 64);
+ screen.set_visarea(4, 112 - 7, 4, 64 - 3);
+ screen.set_screen_update(FUNC(channelf_state::screen_update_channelf));
+ screen.set_palette("palette");
PALETTE(config, "palette", FUNC(channelf_state::channelf_palette), 8);
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("custom", CHANNELF_SOUND)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+ CHANNELF_SOUND(config, m_custom).add_route(ALL_OUTPUTS, "mono", 0.50);
channelf_cart(config);
-MACHINE_CONFIG_END
+}
ROM_START( channelf )
ROM_REGION(0x10000,"maincpu",0)
diff --git a/src/mame/drivers/chaos.cpp b/src/mame/drivers/chaos.cpp
index 91be9688c35..b21f9ec811b 100644
--- a/src/mame/drivers/chaos.cpp
+++ b/src/mame/drivers/chaos.cpp
@@ -148,17 +148,18 @@ void chaos_state::machine_reset()
memcpy(m_p_ram+0x7000, ROM+0x3000, 0x1000);
}
-MACHINE_CONFIG_START(chaos_state::chaos)
+void chaos_state::chaos(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", S2650, XTAL(1'000'000))
- MCFG_DEVICE_PROGRAM_MAP(mem_map)
- MCFG_DEVICE_IO_MAP(io_map)
- MCFG_DEVICE_DATA_MAP(data_map)
+ S2650(config, m_maincpu, XTAL(1'000'000));
+ m_maincpu->set_addrmap(AS_PROGRAM, &chaos_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &chaos_state::io_map);
+ m_maincpu->set_addrmap(AS_DATA, &chaos_state::data_map);
/* video hardware */
GENERIC_TERMINAL(config, m_terminal, 0);
m_terminal->set_keyboard_callback(FUNC(chaos_state::kbd_put));
-MACHINE_CONFIG_END
+}
/* ROM definition */
ROM_START( chaos )
diff --git a/src/mame/drivers/cheekyms.cpp b/src/mame/drivers/cheekyms.cpp
index a13c1bc7f9f..e1d29578682 100644
--- a/src/mame/drivers/cheekyms.cpp
+++ b/src/mame/drivers/cheekyms.cpp
@@ -121,30 +121,30 @@ INTERRUPT_GEN_MEMBER(cheekyms_state::vblank_irq)
}
-MACHINE_CONFIG_START(cheekyms_state::cheekyms)
-
+void cheekyms_state::cheekyms(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80,5000000/2) /* 2.5 MHz */
- MCFG_DEVICE_PROGRAM_MAP(main_map)
- MCFG_DEVICE_IO_MAP(io_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cheekyms_state, vblank_irq)
+ Z80(config, m_maincpu, 5000000/2); /* 2.5 MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &cheekyms_state::main_map);
+ m_maincpu->set_addrmap(AS_IO, &cheekyms_state::io_map);
+ m_maincpu->set_vblank_int("screen", FUNC(cheekyms_state::vblank_irq));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 4*8, 28*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(cheekyms_state, screen_update)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ m_screen->set_size(32*8, 32*8);
+ m_screen->set_visarea(0*8, 32*8-1, 4*8, 28*8-1);
+ m_screen->set_screen_update(FUNC(cheekyms_state::screen_update));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_cheekyms);
PALETTE(config, m_palette, FUNC(cheekyms_state::cheekyms_palette), 0xc0);
/* audio hardware */
CHEEKY_MOUSE_AUDIO(config, m_sound_board, 0);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/chicago.cpp b/src/mame/drivers/chicago.cpp
index e58d99d8501..aa26674789a 100644
--- a/src/mame/drivers/chicago.cpp
+++ b/src/mame/drivers/chicago.cpp
@@ -94,11 +94,11 @@ void chicago_state::video_start()
{
}
-MACHINE_CONFIG_START(chicago_state::chicago)
-
+void chicago_state::chicago(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, NETLIST_CLOCK)
- MCFG_NETLIST_SETUP(chicago)
+ NETLIST_CPU(config, m_maincpu, NETLIST_CLOCK);
+ m_maincpu->set_constructor(netlist_chicago);
/* video hardware */
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
@@ -108,7 +108,7 @@ MACHINE_CONFIG_START(chicago_state::chicago)
m_video->set_vert_params(V_TOTAL-22,V_TOTAL-19,V_TOTAL-12,V_TOTAL);
m_video->set_fieldcount(1);
m_video->set_threshold(0.30);
-MACHINE_CONFIG_END
+}
/***************************************************************************
diff --git a/src/mame/drivers/chihiro.cpp b/src/mame/drivers/chihiro.cpp
index fc1ea2d0e52..751dd6d191d 100644
--- a/src/mame/drivers/chihiro.cpp
+++ b/src/mame/drivers/chihiro.cpp
@@ -1862,24 +1862,20 @@ void chihiro_state::an2131sc_configuration(device_t *device)
MCFG_OHCI_HLEAN2131SC_REGION(":others", 0x2080)
}
-MACHINE_CONFIG_START(chihiro_state::chihiro_base)
+void chihiro_state::chihiro_base(machine_config &config)
+{
xbox_base(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(chihiro_map)
- MCFG_DEVICE_IO_MAP(chihiro_map_io)
+ m_maincpu->set_addrmap(AS_PROGRAM, &chihiro_state::chihiro_map);
+ m_maincpu->set_addrmap(AS_IO, &chihiro_state::chihiro_map_io);
- //BUS_MASTER_IDE_CONTROLLER(config, "ide").options(ide_baseboard, nullptr, "bb", true);
- MCFG_DEVICE_MODIFY(":pci:09.0:ide:0")
- MCFG_DEVICE_SLOT_INTERFACE(ide_baseboard, nullptr, true)
- MCFG_DEVICE_MODIFY(":pci:09.0:ide:1")
- MCFG_DEVICE_SLOT_INTERFACE(ide_baseboard, "bb", true)
+ subdevice<ide_controller_32_device>(":pci:09.0:ide")->options(ide_baseboard, nullptr, "bb", true);
OHCI_USB_CONNECTOR(config, ":pci:02.0:port1", usb_baseboard, "an2131qc", true).set_option_machine_config("an2131qc", an2131qc_configuration);
OHCI_USB_CONNECTOR(config, ":pci:02.0:port2", usb_baseboard, "an2131sc", true).set_option_machine_config("an2131sc", an2131sc_configuration);
OHCI_USB_CONNECTOR(config, ":pci:02.0:port3", usb_baseboard, nullptr, false);
OHCI_USB_CONNECTOR(config, ":pci:02.0:port4", usb_baseboard, nullptr, false);
- MCFG_DEVICE_ADD("jvs_master", JVS_MASTER, 0)
+ JVS_MASTER(config, "jvs_master", 0);
sega_837_13551_device &sega837(SEGA_837_13551(config, "837_13551", 0, "jvs_master"));
sega837.set_port_tag<0>("TILT");
sega837.set_port_tag<1>("P1");
@@ -1893,7 +1889,7 @@ MACHINE_CONFIG_START(chihiro_state::chihiro_base)
sega837.set_port_tag<9>("A6");
sega837.set_port_tag<10>("A7");
sega837.set_port_tag<11>("OUTPUT");
-MACHINE_CONFIG_END
+}
void chihiro_state::chihirogd(machine_config &config)
{
diff --git a/src/mame/drivers/chinagat.cpp b/src/mame/drivers/chinagat.cpp
index a01a688822c..38d578349f8 100644
--- a/src/mame/drivers/chinagat.cpp
+++ b/src/mame/drivers/chinagat.cpp
@@ -186,7 +186,7 @@ WRITE8_MEMBER(chinagat_state::interrupt_w)
switch (offset)
{
case 0: /* 3e00 - SND irq */
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
break;
case 1: /* 3e01 - NMI ack */
diff --git a/src/mame/drivers/chsuper.cpp b/src/mame/drivers/chsuper.cpp
index d4db4037f48..e8e4407e7c1 100644
--- a/src/mame/drivers/chsuper.cpp
+++ b/src/mame/drivers/chsuper.cpp
@@ -364,27 +364,27 @@ void chsuper_state::ramdac_map(address_map &map)
* Machine Drivers *
***************************/
-MACHINE_CONFIG_START(chsuper_state::chsuper)
-
+void chsuper_state::chsuper(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z180, XTAL(12'000'000) / 4) /* HD64180RP8, 8 MHz? */
- MCFG_DEVICE_PROGRAM_MAP(chsuper_prg_map)
- MCFG_DEVICE_IO_MAP(chsuper_portmap)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", chsuper_state, irq0_line_hold)
+ Z180(config, m_maincpu, XTAL(12'000'000) / 4); /* HD64180RP8, 8 MHz? */
+ m_maincpu->set_addrmap(AS_PROGRAM, &chsuper_state::chsuper_prg_map);
+ m_maincpu->set_addrmap(AS_IO, &chsuper_state::chsuper_portmap);
+ m_maincpu->set_vblank_int("screen", FUNC(chsuper_state::irq0_line_hold));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(57)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_UPDATE_DRIVER(chsuper_state, screen_update)
- MCFG_SCREEN_SIZE(64*8, 64*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 0, 30*8-1)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(57);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_screen_update(FUNC(chsuper_state::screen_update));
+ screen.set_size(64*8, 64*8);
+ screen.set_visarea(0*8, 48*8-1, 0, 30*8-1);
+ screen.set_palette(m_palette);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_chsuper);
- MCFG_PALETTE_ADD("palette", 0x100)
+ PALETTE(config, m_palette).set_entries(0x100);
ramdac_device &ramdac(RAMDAC(config, "ramdac", 0, m_palette));
ramdac.set_addrmap(0, &chsuper_state::ramdac_map);
@@ -396,7 +396,7 @@ MACHINE_CONFIG_START(chsuper_state::chsuper)
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
-MACHINE_CONFIG_END
+}
/***************************
diff --git a/src/mame/drivers/circusc.cpp b/src/mame/drivers/circusc.cpp
index a5a75eb1491..111971420a4 100644
--- a/src/mame/drivers/circusc.cpp
+++ b/src/mame/drivers/circusc.cpp
@@ -344,11 +344,11 @@ WRITE_LINE_MEMBER(circusc_state::vblank_irq)
m_maincpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE);
}
-MACHINE_CONFIG_START(circusc_state::circusc)
-
+void circusc_state::circusc(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", KONAMI1, 2048000) /* 2 MHz? */
- MCFG_DEVICE_PROGRAM_MAP(circusc_map)
+ KONAMI1(config, m_maincpu, 2048000); /* 2 MHz? */
+ m_maincpu->set_addrmap(AS_PROGRAM, &circusc_state::circusc_map);
ls259_device &mainlatch(LS259(config, "mainlatch")); // 2C
mainlatch.q_out_cb<0>().set(FUNC(circusc_state::flipscreen_w)); // FLIP
@@ -360,18 +360,18 @@ MACHINE_CONFIG_START(circusc_state::circusc)
WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 8);
- MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(14'318'181)/4)
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
+ Z80(config, m_audiocpu, XTAL(14'318'181)/4);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &circusc_state::sound_map);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(circusc_state, screen_update_circusc)
- MCFG_SCREEN_PALETTE(m_palette)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, circusc_state, vblank_irq))
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ 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);
+ screen.set_screen_update(FUNC(circusc_state::screen_update_circusc));
+ screen.set_palette(m_palette);
+ screen.screen_vblank().set(FUNC(circusc_state::vblank_irq));
GFXDECODE(config, m_gfxdecode, m_palette, gfx_circusc);
PALETTE(config, m_palette, FUNC(circusc_state::circusc_palette), 16*16 + 16*16, 32);
@@ -381,19 +381,16 @@ MACHINE_CONFIG_START(circusc_state::circusc)
GENERIC_LATCH_8(config, "soundlatch");
- MCFG_DEVICE_ADD("sn1", SN76496, XTAL(14'318'181)/8)
- MCFG_SOUND_ROUTE(0, "fltdisc", 1.0, 0)
+ SN76496(config, m_sn_1, XTAL(14'318'181)/8).add_route(0, "fltdisc", 1.0, 0);
- MCFG_DEVICE_ADD("sn2", SN76496, XTAL(14'318'181)/8)
- MCFG_SOUND_ROUTE(0, "fltdisc", 1.0, 1)
+ SN76496(config, m_sn_2, XTAL(14'318'181)/8).add_route(0, "fltdisc", 1.0, 1);
DAC_8BIT_R2R(config, "dac", 0).add_route(0, "fltdisc", 1.0, 2); // ls374.7g + r44+r45+r47+r48+r50+r56+r57+r58+r59 (20k) + r46+r49+r51+r52+r53+r54+r55 (10k) + upc324.3h
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
- MCFG_DEVICE_ADD("fltdisc", DISCRETE, circusc_discrete)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
-MACHINE_CONFIG_END
+ DISCRETE(config, m_discrete, circusc_discrete).add_route(ALL_OUTPUTS, "mono", 1.0);
+}
diff --git a/src/mame/drivers/cischeat.cpp b/src/mame/drivers/cischeat.cpp
index d4392aaf2b9..f3917a6c2a9 100644
--- a/src/mame/drivers/cischeat.cpp
+++ b/src/mame/drivers/cischeat.cpp
@@ -1949,37 +1949,37 @@ WRITE_LINE_MEMBER(cischeat_state::sound_irq)
-MACHINE_CONFIG_START(cischeat_state::bigrun)
-
+void cischeat_state::bigrun(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("cpu1", M68000, 10000000)
- MCFG_DEVICE_PROGRAM_MAP(bigrun_map)
+ M68000(config, m_cpu1, 10000000);
+ m_cpu1->set_addrmap(AS_PROGRAM, &cischeat_state::bigrun_map);
TIMER(config, "scantimer").configure_scanline(FUNC(cischeat_state::bigrun_scanline), "screen", 0, 1);
- MCFG_DEVICE_ADD("cpu2", M68000, 10000000)
- MCFG_DEVICE_PROGRAM_MAP(bigrun_map2)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cischeat_state, irq4_line_hold)
+ M68000(config, m_cpu2, 10000000);
+ m_cpu2->set_addrmap(AS_PROGRAM, &cischeat_state::bigrun_map2);
+ m_cpu2->set_vblank_int("screen", FUNC(cischeat_state::irq4_line_hold));
- MCFG_DEVICE_ADD("cpu3", M68000, 10000000)
- MCFG_DEVICE_PROGRAM_MAP(bigrun_map3)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cischeat_state, irq4_line_hold)
+ M68000(config, m_cpu3, 10000000);
+ m_cpu3->set_addrmap(AS_PROGRAM, &cischeat_state::bigrun_map3);
+ m_cpu3->set_vblank_int("screen", FUNC(cischeat_state::irq4_line_hold));
- MCFG_DEVICE_ADD("soundcpu", M68000, 6000000)
- MCFG_DEVICE_PROGRAM_MAP(bigrun_sound_map)
+ M68000(config, m_soundcpu, 6000000);
+ m_soundcpu->set_addrmap(AS_PROGRAM, &cischeat_state::bigrun_sound_map);
// timing set by the YM irqhandler
-// MCFG_DEVICE_PERIODIC_INT_DRIVER(cischeat_state, irq4_line_hold, 16*30)
+// m_soundcpu->set_periodic_int(FUNC(cischeat_state::irq4_line_hold), attotime::from_hz(16*30));
config.m_minimum_quantum = attotime::from_hz(1200);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(256, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0+16, 256-16-1)
- MCFG_SCREEN_UPDATE_DRIVER(cischeat_state, screen_update_bigrun)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ m_screen->set_size(256, 256);
+ m_screen->set_visarea(0, 256-1, 0+16, 256-16-1);
+ m_screen->set_screen_update(FUNC(cischeat_state::screen_update_bigrun));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_bigrun);
PALETTE(config, m_palette, palette_device::BLACK).set_format(palette_device::RRRRGGGGBBBBRGBx, 0x4000/2);
@@ -2002,36 +2002,32 @@ MACHINE_CONFIG_START(cischeat_state::bigrun)
ymsnd.add_route(0, "lspeaker", 0.50);
ymsnd.add_route(1, "rspeaker", 0.50);
- MCFG_DEVICE_ADD("oki1", OKIM6295, 4000000, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.25)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.25)
+ OKIM6295(config, m_oki1, 4000000, okim6295_device::PIN7_HIGH); // clock frequency & pin 7 not verified
+ m_oki1->add_route(ALL_OUTPUTS, "lspeaker", 0.25);
+ m_oki1->add_route(ALL_OUTPUTS, "rspeaker", 0.25);
- MCFG_DEVICE_ADD("oki2", OKIM6295, 4000000, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.25)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.25)
-MACHINE_CONFIG_END
+ OKIM6295(config, m_oki2, 4000000, okim6295_device::PIN7_HIGH); // clock frequency & pin 7 not verified
+ m_oki2->add_route(ALL_OUTPUTS, "lspeaker", 0.25);
+ m_oki2->add_route(ALL_OUTPUTS, "rspeaker", 0.25);
+}
-MACHINE_CONFIG_START(cischeat_state::cischeat)
+void cischeat_state::cischeat(machine_config &config)
+{
bigrun(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("cpu1")
- MCFG_DEVICE_PROGRAM_MAP(cischeat_map)
+ m_cpu1->set_addrmap(AS_PROGRAM, &cischeat_state::cischeat_map);
- MCFG_DEVICE_MODIFY("cpu2")
- MCFG_DEVICE_PROGRAM_MAP(cischeat_map2)
+ m_cpu2->set_addrmap(AS_PROGRAM, &cischeat_state::cischeat_map2);
- MCFG_DEVICE_MODIFY("cpu3")
- MCFG_DEVICE_PROGRAM_MAP(cischeat_map3)
+ m_cpu3->set_addrmap(AS_PROGRAM, &cischeat_state::cischeat_map3);
- MCFG_DEVICE_MODIFY("soundcpu")
- MCFG_DEVICE_PROGRAM_MAP(cischeat_sound_map)
+ m_soundcpu->set_addrmap(AS_PROGRAM, &cischeat_state::cischeat_sound_map);
/* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0+16, 256-16-8-1)
- MCFG_SCREEN_UPDATE_DRIVER(cischeat_state, screen_update_cischeat)
+ m_screen->set_visarea(0, 256-1, 0+16, 256-16-8-1);
+ m_screen->set_screen_update(FUNC(cischeat_state::screen_update_cischeat));
m_gfxdecode->set_info(gfx_cischeat);
m_palette->set_format(palette_device::RRRRGGGGBBBBRGBx, 0x8000/2);
@@ -2044,27 +2040,24 @@ MACHINE_CONFIG_START(cischeat_state::cischeat)
m_tmap[2]->set_colorbase(0x6c00/2);
m_tmap[2]->set_bits_per_color_code(5);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(cischeat_state::f1gpstar)
+void cischeat_state::f1gpstar(machine_config &config)
+{
bigrun(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("cpu1")
- MCFG_DEVICE_CLOCK(12000000)
- MCFG_DEVICE_PROGRAM_MAP(f1gpstar_map)
+ m_cpu1->set_clock(12000000);
+ m_cpu1->set_addrmap(AS_PROGRAM, &cischeat_state::f1gpstar_map);
- MCFG_DEVICE_MODIFY("cpu2")
- MCFG_DEVICE_CLOCK(12000000)
- MCFG_DEVICE_PROGRAM_MAP(f1gpstar_map2)
+ m_cpu2->set_clock(12000000);
+ m_cpu2->set_addrmap(AS_PROGRAM, &cischeat_state::f1gpstar_map2);
- MCFG_DEVICE_MODIFY("cpu3")
- MCFG_DEVICE_CLOCK(12000000)
- MCFG_DEVICE_PROGRAM_MAP(f1gpstar_map3)
+ m_cpu3->set_clock(12000000);
+ m_cpu3->set_addrmap(AS_PROGRAM, &cischeat_state::f1gpstar_map3);
- MCFG_DEVICE_MODIFY("soundcpu")
- MCFG_DEVICE_PROGRAM_MAP(f1gpstar_sound_map)
+ m_soundcpu->set_addrmap(AS_PROGRAM, &cischeat_state::f1gpstar_sound_map);
/* video hardware */
m_gfxdecode->set_info(gfx_f1gpstar);
@@ -2076,34 +2069,32 @@ MACHINE_CONFIG_START(cischeat_state::f1gpstar)
m_tmap[2]->set_colorbase(0x6e00/2);
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(cischeat_state, screen_update_f1gpstar)
-MACHINE_CONFIG_END
+ m_screen->set_screen_update(FUNC(cischeat_state::screen_update_f1gpstar));
+}
-MACHINE_CONFIG_START(cischeat_state::f1gpstr2)
+void cischeat_state::f1gpstr2(machine_config &config)
+{
f1gpstar(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("cpu1")
- MCFG_DEVICE_PROGRAM_MAP(f1gpstr2_map)
+ m_cpu1->set_addrmap(AS_PROGRAM, &cischeat_state::f1gpstr2_map);
- MCFG_DEVICE_MODIFY("soundcpu")
- MCFG_DEVICE_PROGRAM_MAP(f1gpstr2_sound_map)
+ m_soundcpu->set_addrmap(AS_PROGRAM, &cischeat_state::f1gpstr2_sound_map);
- MCFG_DEVICE_ADD("cpu5", M68000, 10000000)
- MCFG_DEVICE_PROGRAM_MAP(f1gpstr2_io_map)
+ M68000(config, m_cpu5, 10000000);
+ m_cpu5->set_addrmap(AS_PROGRAM, &cischeat_state::f1gpstr2_io_map);
config.m_minimum_quantum = attotime::from_hz(12000);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(wildplt_state::wildplt)
+void wildplt_state::wildplt(machine_config &config)
+{
f1gpstr2(config);
- MCFG_DEVICE_MODIFY("cpu1")
- MCFG_DEVICE_PROGRAM_MAP(wildplt_map)
-MACHINE_CONFIG_END
+ m_cpu1->set_addrmap(AS_PROGRAM, &wildplt_state::wildplt_map);
+}
/**************************************************************************
@@ -2128,24 +2119,24 @@ TIMER_DEVICE_CALLBACK_MEMBER(cischeat_state::scudhamm_scanline)
m_maincpu->set_input_line(2, HOLD_LINE);
}
-MACHINE_CONFIG_START(cischeat_state::scudhamm)
-
+void cischeat_state::scudhamm(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu",M68000, 12000000)
- MCFG_DEVICE_PROGRAM_MAP(scudhamm_map)
+ M68000(config, m_maincpu, 12000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cischeat_state::scudhamm_map);
TIMER(config, "scantimer").configure_scanline(FUNC(cischeat_state::scudhamm_scanline), "screen", 0, 1);
WATCHDOG_TIMER(config, m_watchdog);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK)
- MCFG_SCREEN_REFRESH_RATE(30) //TODO: wrong!
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500 * 3) /* not accurate */)
- MCFG_SCREEN_SIZE(256, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0 +16, 256-1 -16)
- MCFG_SCREEN_UPDATE_DRIVER(cischeat_state, screen_update_scudhamm)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
+ m_screen->set_refresh_hz(30); //TODO: wrong!
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500 * 3) /* not accurate */);
+ m_screen->set_size(256, 256);
+ m_screen->set_visarea(0, 256-1, 0 +16, 256-1 -16);
+ m_screen->set_screen_update(FUNC(cischeat_state::screen_update_scudhamm));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_scudhamm);
PALETTE(config, m_palette, palette_device::BLACK).set_format(palette_device::RRRRGGGGBBBBRGBx, 0x8000/2);
@@ -2158,14 +2149,14 @@ MACHINE_CONFIG_START(cischeat_state::scudhamm)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("oki1", OKIM6295, 4000000/2, okim6295_device::PIN7_HIGH) // pin 7 not verified
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.5)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.5)
+ OKIM6295(config, m_oki1, 4000000/2, okim6295_device::PIN7_HIGH); // pin 7 not verified
+ m_oki1->add_route(ALL_OUTPUTS, "lspeaker", 0.5);
+ m_oki1->add_route(ALL_OUTPUTS, "rspeaker", 0.5);
- MCFG_DEVICE_ADD("oki2", OKIM6295, 4000000/2, okim6295_device::PIN7_HIGH) // pin 7 not verified
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.5)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.5)
-MACHINE_CONFIG_END
+ OKIM6295(config, m_oki2, 4000000/2, okim6295_device::PIN7_HIGH); // pin 7 not verified
+ m_oki2->add_route(ALL_OUTPUTS, "lspeaker", 0.5);
+ m_oki2->add_route(ALL_OUTPUTS, "rspeaker", 0.5);
+}
/**************************************************************************
@@ -2183,14 +2174,14 @@ TIMER_DEVICE_CALLBACK_MEMBER(cischeat_state::armchamp2_scanline)
m_maincpu->set_input_line(4, HOLD_LINE);
}
-MACHINE_CONFIG_START(cischeat_state::armchmp2)
+void cischeat_state::armchmp2(machine_config &config)
+{
scudhamm(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(armchmp2_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &cischeat_state::armchmp2_map);
subdevice<timer_device>("scantimer")->set_callback(FUNC(cischeat_state::armchamp2_scanline));
-MACHINE_CONFIG_END
+}
/**************************************************************************
@@ -2215,11 +2206,11 @@ TIMER_DEVICE_CALLBACK_MEMBER(cischeat_state::captflag_scanline)
m_maincpu->set_input_line(3, HOLD_LINE);
}
-MACHINE_CONFIG_START(cischeat_state::captflag)
-
+void cischeat_state::captflag(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu",M68000, XTAL(24'000'000) / 2) // TMP68000P-12
- MCFG_DEVICE_PROGRAM_MAP(captflag_map)
+ M68000(config, m_maincpu, XTAL(24'000'000) / 2); // TMP68000P-12
+ m_maincpu->set_addrmap(AS_PROGRAM, &cischeat_state::captflag_map);
TIMER(config, "scantimer").configure_scanline(FUNC(cischeat_state::captflag_scanline), "screen", 0, 1);
TICKET_DISPENSER(config, m_captflag_hopper, attotime::from_msec(2000), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH );
@@ -2228,14 +2219,14 @@ MACHINE_CONFIG_START(cischeat_state::captflag)
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
-// MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK)
- MCFG_SCREEN_REFRESH_RATE(30) //TODO: wrong!
-// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500 * 3) /* not accurate */)
- MCFG_SCREEN_SIZE(256, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0 +16, 256-1 -16)
- MCFG_SCREEN_UPDATE_DRIVER(cischeat_state, screen_update_scudhamm)
- MCFG_SCREEN_PALETTE("palette")
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+// m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
+ m_screen->set_refresh_hz(30); //TODO: wrong!
+// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500 * 3) /* not accurate */);
+ m_screen->set_size(256, 256);
+ m_screen->set_visarea(0, 256-1, 0 +16, 256-1 -16);
+ m_screen->set_screen_update(FUNC(cischeat_state::screen_update_scudhamm));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_scudhamm);
PALETTE(config, m_palette, palette_device::BLACK).set_format(palette_device::RRRRGGGGBBBBRGBx, 0x8000/2);
@@ -2255,16 +2246,16 @@ MACHINE_CONFIG_START(cischeat_state::captflag)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("oki1", OKIM6295, 4000000/2, okim6295_device::PIN7_HIGH) // pin 7 not verified
- MCFG_DEVICE_ADDRESS_MAP(0, captflag_oki1_map)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.5)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.5)
+ OKIM6295(config, m_oki1, 4000000/2, okim6295_device::PIN7_HIGH); // pin 7 not verified
+ m_oki1->set_addrmap(0, &cischeat_state::captflag_oki1_map);
+ m_oki1->add_route(ALL_OUTPUTS, "lspeaker", 0.5);
+ m_oki1->add_route(ALL_OUTPUTS, "rspeaker", 0.5);
- MCFG_DEVICE_ADD("oki2", OKIM6295, 4000000/2, okim6295_device::PIN7_HIGH) // pin 7 not verified
- MCFG_DEVICE_ADDRESS_MAP(0, captflag_oki2_map)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.5)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.5)
-MACHINE_CONFIG_END
+ OKIM6295(config, m_oki2, 4000000/2, okim6295_device::PIN7_HIGH); // pin 7 not verified
+ m_oki2->set_addrmap(0, &cischeat_state::captflag_oki2_map);
+ m_oki2->add_route(ALL_OUTPUTS, "lspeaker", 0.5);
+ m_oki2->add_route(ALL_OUTPUTS, "rspeaker", 0.5);
+}
/***************************************************************************
diff --git a/src/mame/drivers/citycon.cpp b/src/mame/drivers/citycon.cpp
index 5f440903871..47ea952a56e 100644
--- a/src/mame/drivers/citycon.cpp
+++ b/src/mame/drivers/citycon.cpp
@@ -198,22 +198,22 @@ void citycon_state::machine_reset()
}
-MACHINE_CONFIG_START(citycon_state::citycon)
-
+void citycon_state::citycon(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", MC6809, CPU_CLOCK) // HD68B09P
- MCFG_DEVICE_PROGRAM_MAP(citycon_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", citycon_state, irq0_line_assert)
+ MC6809(config, m_maincpu, CPU_CLOCK); // HD68B09P
+ m_maincpu->set_addrmap(AS_PROGRAM, &citycon_state::citycon_map);
+ m_maincpu->set_vblank_int("screen", FUNC(citycon_state::irq0_line_assert));
- MCFG_DEVICE_ADD("audiocpu", MC6809E, MASTER_CLOCK / 32) // schematics allow for either a 6809 or 6809E; HD68A09EP found on one actual PCB
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", citycon_state, irq0_line_hold) // actually unused, probably it was during development
+ mc6809e_device &audiocpu(MC6809E(config, "audiocpu", MASTER_CLOCK / 32)); // schematics allow for either a 6809 or 6809E; HD68A09EP found on one actual PCB
+ audiocpu.set_addrmap(AS_PROGRAM, &citycon_state::sound_map);
+ audiocpu.set_vblank_int("screen", FUNC(citycon_state::irq0_line_hold)); // actually unused, probably it was during development
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART)
- MCFG_SCREEN_UPDATE_DRIVER(citycon_state, screen_update_citycon)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART);
+ screen.set_screen_update(FUNC(citycon_state::screen_update_citycon));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_citycon);
PALETTE(config, m_palette, palette_device::BLACK).set_format(palette_device::RGBx_444, 640+1024); // 640 real palette + 1024 virtual palette
@@ -233,7 +233,7 @@ MACHINE_CONFIG_START(citycon_state::citycon)
ymsnd.add_route(1, "mono", 0.40);
ymsnd.add_route(2, "mono", 0.40);
ymsnd.add_route(3, "mono", 0.20);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/clayshoo.cpp b/src/mame/drivers/clayshoo.cpp
index bddff8b1082..3c571d811a0 100644
--- a/src/mame/drivers/clayshoo.cpp
+++ b/src/mame/drivers/clayshoo.cpp
@@ -322,30 +322,30 @@ void clayshoo_state::machine_reset()
m_analog_port_val = 0;
}
-MACHINE_CONFIG_START(clayshoo_state::clayshoo)
-
+void clayshoo_state::clayshoo(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80,5068000/4) /* 5.068/4 Mhz (divider is a guess) */
- MCFG_DEVICE_PROGRAM_MAP(main_map)
- MCFG_DEVICE_IO_MAP(main_io_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", clayshoo_state, irq0_line_hold)
+ Z80(config, m_maincpu, 5068000/4); /* 5.068/4 Mhz (divider is a guess) */
+ m_maincpu->set_addrmap(AS_PROGRAM, &clayshoo_state::main_map);
+ m_maincpu->set_addrmap(AS_IO, &clayshoo_state::main_io_map);
+ m_maincpu->set_vblank_int("screen", FUNC(clayshoo_state::irq0_line_hold));
WATCHDOG_TIMER(config, "watchdog");
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_SIZE(256, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 255, 64, 255)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_UPDATE_DRIVER(clayshoo_state, screen_update_clayshoo)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_size(256, 256);
+ screen.set_visarea(0, 255, 64, 255);
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_screen_update(FUNC(clayshoo_state::screen_update_clayshoo));
I8255A(config, "ppi8255_0");
i8255_device &ppi1(I8255A(config, "ppi8255_1"));
ppi1.out_pa_callback().set(FUNC(clayshoo_state::input_port_select_w));
ppi1.in_pb_callback().set(FUNC(clayshoo_state::input_port_r));
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/clcd.cpp b/src/mame/drivers/clcd.cpp
index 136ccc419de..4e2f60a1795 100644
--- a/src/mame/drivers/clcd.cpp
+++ b/src/mame/drivers/clcd.cpp
@@ -657,10 +657,11 @@ static INPUT_PORTS_START( clcd )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // clears screen and goes into infinite loop
INPUT_PORTS_END
-MACHINE_CONFIG_START(clcd_state::clcd)
+void clcd_state::clcd(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M65C02, 2000000)
- MCFG_DEVICE_PROGRAM_MAP(clcd_mem)
+ M65C02(config, m_maincpu, 2000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &clcd_state::clcd_mem);
INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline("maincpu", m65c02_device::IRQ_LINE);
@@ -712,24 +713,23 @@ MACHINE_CONFIG_START(clcd_state::clcd)
m_rtc->set_default_24h(true);
/* video hardware */
- MCFG_SCREEN_ADD("screen", LCD)
- MCFG_SCREEN_REFRESH_RATE(80)
- MCFG_SCREEN_UPDATE_DRIVER(clcd_state, screen_update)
- MCFG_SCREEN_SIZE(480, 128)
- MCFG_SCREEN_VISIBLE_AREA(0, 480-1, 0, 128-1)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
+ screen.set_refresh_hz(80);
+ screen.set_screen_update(FUNC(clcd_state::screen_update));
+ screen.set_size(480, 128);
+ screen.set_visarea_full();
+ screen.set_palette("palette");
PALETTE(config, "palette", FUNC(clcd_state::clcd_palette), 2);
// sound hardware
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
+ SPEAKER_SOUND(config, "speaker").add_route(ALL_OUTPUTS, "mono", 0.25);
RAM(config, "ram").set_default_size("128K").set_extra_options("32K,64K").set_default_value(0);
NVRAM(config, "nvram").set_custom_handler(FUNC(clcd_state::nvram_init));
-MACHINE_CONFIG_END
+}
ROM_START( clcd )
diff --git a/src/mame/drivers/clowndwn.cpp b/src/mame/drivers/clowndwn.cpp
index 2fe069950f8..e31862cef12 100644
--- a/src/mame/drivers/clowndwn.cpp
+++ b/src/mame/drivers/clowndwn.cpp
@@ -56,21 +56,21 @@ void clowndwn_state::machine_reset()
}
-MACHINE_CONFIG_START(clowndwn_state::clowndwn)
-
+void clowndwn_state::clowndwn(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M6802, 8000000) // unknown type and clock
- MCFG_DEVICE_PROGRAM_MAP(clowndwn_map)
+ M6802(config, m_maincpu, 8000000); // unknown type and clock
+ m_maincpu->set_addrmap(AS_PROGRAM, &clowndwn_state::clowndwn_map);
- MCFG_DEVICE_ADD("pia0", PIA6821, 0)
- MCFG_DEVICE_ADD("pia1", PIA6821, 0)
- MCFG_DEVICE_ADD("pia2", PIA6821, 0)
- MCFG_DEVICE_ADD("pia3", PIA6821, 0)
- MCFG_DEVICE_ADD("pia4", PIA6821, 0)
+ PIA6821(config, "pia0", 0);
+ PIA6821(config, "pia1", 0);
+ PIA6821(config, "pia2", 0);
+ PIA6821(config, "pia3", 0);
+ PIA6821(config, "pia4", 0);
/* sound hardware */
SPEAKER(config, "mono").front_center();
-MACHINE_CONFIG_END
+}
// has
diff --git a/src/mame/drivers/clpoker.cpp b/src/mame/drivers/clpoker.cpp
index d80eb9e38eb..71f1c76c27a 100644
--- a/src/mame/drivers/clpoker.cpp
+++ b/src/mame/drivers/clpoker.cpp
@@ -253,11 +253,12 @@ static GFXDECODE_START( gfx_clpoker )
GFXDECODE_END
-MACHINE_CONFIG_START(clpoker_state::clpoker)
+void clpoker_state::clpoker(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, XTAL(12'000'000) / 3) // Z0840004PSC, divider not verified
- MCFG_DEVICE_PROGRAM_MAP(prg_map)
- MCFG_DEVICE_IO_MAP(io_map)
+ Z80(config, m_maincpu, XTAL(12'000'000) / 3); // Z0840004PSC, divider not verified
+ m_maincpu->set_addrmap(AS_PROGRAM, &clpoker_state::prg_map);
+ m_maincpu->set_addrmap(AS_IO, &clpoker_state::io_map);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // HY6116ALP-12
@@ -273,16 +274,16 @@ MACHINE_CONFIG_START(clpoker_state::clpoker)
TICKET_DISPENSER(config, m_hopper, attotime::from_msec(60), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60) // wrong
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) // wrong
- MCFG_SCREEN_SIZE(64*8, 32*8) // wrong
- MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0*8, 32*8-1) // probably right
- MCFG_SCREEN_UPDATE_DRIVER(clpoker_state, screen_update)
- MCFG_SCREEN_PALETTE("palette")
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, clpoker_state, vblank_w))
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60); // wrong
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); // wrong
+ screen.set_size(64*8, 32*8); // wrong
+ screen.set_visarea_full(); // probably right
+ screen.set_screen_update(FUNC(clpoker_state::screen_update));
+ screen.set_palette("palette");
+ screen.screen_vblank().set(FUNC(clpoker_state::vblank_w));
- MCFG_PALETTE_ADD("palette", 0x100)
+ PALETTE(config, "palette").set_entries(0x100);
ramdac_device &ramdac(RAMDAC(config, "ramdac", 0, "palette")); // HM86171
ramdac.set_addrmap(0, &clpoker_state::ramdac_map);
@@ -294,7 +295,7 @@ MACHINE_CONFIG_START(clpoker_state::clpoker)
aysnd.port_a_read_callback().set_ioport("DSW1");
aysnd.port_b_read_callback().set_ioport("DSW2");
aysnd.add_route(ALL_OUTPUTS, "mono", 0.30);
-MACHINE_CONFIG_END
+}
ROM_START( clpoker )
diff --git a/src/mame/drivers/clshroad.cpp b/src/mame/drivers/clshroad.cpp
index 4c443919ac8..f908f05a46b 100644
--- a/src/mame/drivers/clshroad.cpp
+++ b/src/mame/drivers/clshroad.cpp
@@ -272,16 +272,16 @@ INTERRUPT_GEN_MEMBER(clshroad_state::sound_timer_irq)
device.execute().set_input_line(0, HOLD_LINE);
}
-MACHINE_CONFIG_START(clshroad_state::firebatl)
-
+void clshroad_state::firebatl(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, MAIN_CLOCK) /* ? */
- MCFG_DEVICE_PROGRAM_MAP(clshroad_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", clshroad_state, vblank_irq)
+ Z80(config, m_maincpu, MAIN_CLOCK); /* ? */
+ m_maincpu->set_addrmap(AS_PROGRAM, &clshroad_state::clshroad_map);
+ m_maincpu->set_vblank_int("screen", FUNC(clshroad_state::vblank_irq));
- MCFG_DEVICE_ADD("audiocpu", Z80, MAIN_CLOCK) /* ? */
- MCFG_DEVICE_PROGRAM_MAP(clshroad_sound_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(clshroad_state, sound_timer_irq, 120) /* periodic interrupt, don't know about the frequency */
+ Z80(config, m_audiocpu, MAIN_CLOCK); /* ? */
+ m_audiocpu->set_addrmap(AS_PROGRAM, &clshroad_state::clshroad_sound_map);
+ m_audiocpu->set_periodic_int(FUNC(clshroad_state::sound_timer_irq), attotime::from_hz(120)); /* periodic interrupt, don't know about the frequency */
ls259_device &mainlatch(LS259(config, "mainlatch"));
mainlatch.q_out_cb<0>().set_inputline(m_audiocpu, INPUT_LINE_RESET).invert();
@@ -290,13 +290,13 @@ MACHINE_CONFIG_START(clshroad_state::firebatl)
mainlatch.q_out_cb<4>().set(FUNC(clshroad_state::flipscreen_w));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(0x120, 0x100)
- MCFG_SCREEN_VISIBLE_AREA(0, 0x120-1, 0x0+16, 0x100-16-1)
- MCFG_SCREEN_UPDATE_DRIVER(clshroad_state, screen_update)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(0x120, 0x100);
+ screen.set_visarea(0, 0x120-1, 0x0+16, 0x100-16-1);
+ screen.set_screen_update(FUNC(clshroad_state::screen_update));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_firebatl);
PALETTE(config, m_palette, FUNC(clshroad_state::firebatl_palette), 512+64*4, 256);
@@ -306,21 +306,20 @@ MACHINE_CONFIG_START(clshroad_state::firebatl)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("custom", WIPING_CUSTOM, 96000)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(clshroad_state::clshroad)
+ WIPING_CUSTOM(config, "custom", 96000).add_route(ALL_OUTPUTS, "mono", 1.0);
+}
+void clshroad_state::clshroad(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, MAIN_CLOCK) /* ? real speed unknown. 3MHz is too low and causes problems */
- MCFG_DEVICE_PROGRAM_MAP(clshroad_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", clshroad_state, vblank_irq)
+ Z80(config, m_maincpu, MAIN_CLOCK); /* ? real speed unknown. 3MHz is too low and causes problems */
+ m_maincpu->set_addrmap(AS_PROGRAM, &clshroad_state::clshroad_map);
+ m_maincpu->set_vblank_int("screen", FUNC(clshroad_state::vblank_irq));
- MCFG_DEVICE_ADD("audiocpu", Z80, MAIN_CLOCK) /* ? */
- MCFG_DEVICE_PROGRAM_MAP(clshroad_sound_map)
- //MCFG_DEVICE_VBLANK_INT_DRIVER("screen", clshroad_state, irq0_line_hold) /* IRQ, no NMI */
- MCFG_DEVICE_PERIODIC_INT_DRIVER(clshroad_state, sound_timer_irq, 60) /* periodic interrupt, don't know about the frequency */
+ Z80(config, m_audiocpu, MAIN_CLOCK); /* ? */
+ m_audiocpu->set_addrmap(AS_PROGRAM, &clshroad_state::clshroad_sound_map);
+ //m_audiocpu->set_vblank_int("screen", FUNC(clshroad_state::irq0_line_hold)); /* IRQ, no NMI */
+ m_audiocpu->set_periodic_int(FUNC(clshroad_state::sound_timer_irq), attotime::from_hz(60)); /* periodic interrupt, don't know about the frequency */
ls259_device &mainlatch(LS259(config, "mainlatch"));
mainlatch.q_out_cb<0>().set_nop(); // never writes here?
@@ -329,13 +328,13 @@ MACHINE_CONFIG_START(clshroad_state::clshroad)
mainlatch.q_out_cb<4>().set(FUNC(clshroad_state::flipscreen_w));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(0x120, 0x100)
- MCFG_SCREEN_VISIBLE_AREA(0, 0x120-1, 0x0+16, 0x100-16-1)
- MCFG_SCREEN_UPDATE_DRIVER(clshroad_state, screen_update)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(0x120, 0x100);
+ screen.set_visarea(0, 0x120-1, 0x0+16, 0x100-16-1);
+ screen.set_screen_update(FUNC(clshroad_state::screen_update));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_clshroad);
PALETTE(config, m_palette, FUNC(clshroad_state::clshroad_palette), 256);
@@ -345,9 +344,8 @@ MACHINE_CONFIG_START(clshroad_state::clshroad)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("custom", WIPING_CUSTOM, 96000)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
-MACHINE_CONFIG_END
+ WIPING_CUSTOM(config, "custom", 96000).add_route(ALL_OUTPUTS, "mono", 1.0);
+}
/***************************************************************************
diff --git a/src/mame/drivers/cmi.cpp b/src/mame/drivers/cmi.cpp
index 742537c6b29..148e0386fd8 100644
--- a/src/mame/drivers/cmi.cpp
+++ b/src/mame/drivers/cmi.cpp
@@ -2158,29 +2158,30 @@ static void cmi2x_floppies(device_slot_interface &device)
device.option_add("8dssd", FLOPPY_8_DSSD);
}
-MACHINE_CONFIG_START(cmi_state::cmi2x)
- MCFG_DEVICE_ADD("maincpu1", MC6809E, Q209_CPU_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(maincpu1_map)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(cmi_state, cpu1_interrupt_callback)
+void cmi_state::cmi2x(machine_config &config)
+{
+ MC6809E(config, m_maincpu1, Q209_CPU_CLOCK);
+ m_maincpu1->set_addrmap(AS_PROGRAM, &cmi_state::maincpu1_map);
+ m_maincpu1->set_irq_acknowledge_callback(FUNC(cmi_state::cpu1_interrupt_callback));
config.m_perfect_cpu_quantum = subtag("maincpu1");
- MCFG_DEVICE_ADD("maincpu2", MC6809E, Q209_CPU_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(maincpu2_map)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(cmi_state, cpu2_interrupt_callback)
+ MC6809E(config, m_maincpu2, Q209_CPU_CLOCK);
+ m_maincpu2->set_addrmap(AS_PROGRAM, &cmi_state::maincpu2_map);
+ m_maincpu2->set_irq_acknowledge_callback(FUNC(cmi_state::cpu2_interrupt_callback));
config.m_perfect_cpu_quantum = subtag("maincpu2");
- MCFG_DEVICE_ADD("muskeys", M6802, 4_MHz_XTAL)
- MCFG_DEVICE_PROGRAM_MAP(muskeys_map)
+ M6802(config, m_muskeyscpu, 4_MHz_XTAL);
+ m_muskeyscpu->set_addrmap(AS_PROGRAM, &cmi_state::muskeys_map);
- MCFG_DEVICE_ADD("alphakeys", M6802, 3.84_MHz_XTAL)
- MCFG_DEVICE_PROGRAM_MAP(alphakeys_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(cmi_state, irq0_line_hold, 3.84_MHz_XTAL / 400) // TODO: PIA controls this
+ M6802(config, m_alphakeyscpu, 3.84_MHz_XTAL);
+ m_alphakeyscpu->set_addrmap(AS_PROGRAM, &cmi_state::alphakeys_map);
+ m_alphakeyscpu->set_periodic_int(FUNC(cmi_state::irq0_line_hold), attotime::from_hz(3.84_MHz_XTAL / 400)); // TODO: PIA controls this
- MCFG_DEVICE_ADD("smptemidi", M68000, 20_MHz_XTAL / 2)
- MCFG_DEVICE_PROGRAM_MAP(midicpu_map)
+ M68000(config, m_midicpu, 20_MHz_XTAL / 2);
+ m_midicpu->set_addrmap(AS_PROGRAM, &cmi_state::midicpu_map);
- MCFG_DEVICE_ADD("cmi07cpu", MC6809E, Q209_CPU_CLOCK) // ?
- MCFG_DEVICE_PROGRAM_MAP(cmi07cpu_map)
+ MC6809E(config, m_cmi07cpu, Q209_CPU_CLOCK); // ?
+ m_cmi07cpu->set_addrmap(AS_PROGRAM, &cmi_state::cmi07cpu_map);
/* alpha-numeric display */
DL1416T(config, m_dp1, u32(0));
@@ -2324,7 +2325,7 @@ MACHINE_CONFIG_START(cmi_state::cmi2x)
cmi01a_device &cmi01a_7(CMI01A_CHANNEL_CARD(config, "cmi01a_7", 0));
cmi01a_7.add_route(ALL_OUTPUTS, "mono", 0.25);
cmi01a_7.irq_callback().set(FUNC(cmi_state::channel_irq<0>));
-MACHINE_CONFIG_END
+}
ROM_START( cmi2x )
/* Q133 Processor control card */
diff --git a/src/mame/drivers/cmmb.cpp b/src/mame/drivers/cmmb.cpp
index 6dab344cdc1..8b8a811fe07 100644
--- a/src/mame/drivers/cmmb.cpp
+++ b/src/mame/drivers/cmmb.cpp
@@ -416,22 +416,22 @@ void cmmb_state::machine_reset()
}
-MACHINE_CONFIG_START(cmmb_state::cmmb)
-
+void cmmb_state::cmmb(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M65SC02, MAIN_CLOCK/5) // Unknown clock, but chip rated for 14MHz
- MCFG_DEVICE_PROGRAM_MAP(cmmb_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cmmb_state, vblank_irq)
+ M65SC02(config, m_maincpu, MAIN_CLOCK/5); // Unknown clock, but chip rated for 14MHz
+ m_maincpu->set_addrmap(AS_PROGRAM, &cmmb_state::cmmb_map);
+ m_maincpu->set_vblank_int("screen", FUNC(cmmb_state::vblank_irq));
AT29C020(config, "at29c020");
ADDRESS_MAP_BANK(config, "bnk2000").set_map(&cmmb_state::bnk2000_map).set_options(ENDIANNESS_LITTLE, 8, 32, 0x8000);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(MAIN_CLOCK/12, 384, 0, 256, 264, 0, 240) // TBD, not real measurements
- MCFG_SCREEN_UPDATE_DRIVER(cmmb_state, screen_update_cmmb)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(MAIN_CLOCK/12, 384, 0, 256, 264, 0, 240); // TBD, not real measurements
+ screen.set_screen_update(FUNC(cmmb_state::screen_update_cmmb));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_cmmb);
@@ -440,7 +440,7 @@ MACHINE_CONFIG_START(cmmb_state::cmmb)
/* sound hardware */
// SPEAKER(config, "mono").front_center();
// AY8910(config, "aysnd", 8000000/4).add_route(ALL_OUTPUTS, "mono", 0.30);
-MACHINE_CONFIG_END
+}
/***************************************************************************
diff --git a/src/mame/drivers/cninja.cpp b/src/mame/drivers/cninja.cpp
index 754914d6e9f..a2b6418ac47 100644
--- a/src/mame/drivers/cninja.cpp
+++ b/src/mame/drivers/cninja.cpp
@@ -791,11 +791,11 @@ MACHINE_RESET_MEMBER(cninja_state,robocop2)
m_priority = 0;
}
-MACHINE_CONFIG_START(cninja_state::cninja)
-
+void cninja_state::cninja(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(24'000'000) / 2)
- MCFG_DEVICE_PROGRAM_MAP(cninja_map)
+ M68000(config, m_maincpu, XTAL(24'000'000) / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cninja_state::cninja_map);
h6280_device &audiocpu(H6280(config, m_audiocpu, XTAL(32'220'000) / 8));
audiocpu.set_addrmap(AS_PROGRAM, &cninja_state::sound_map);
@@ -808,18 +808,17 @@ MACHINE_CONFIG_START(cninja_state::cninja)
irq.vblank_irq_callback().set_inputline(m_maincpu, 5);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(24'000'000) / 4, 376, 0, 256, 274, 8, 248)
- MCFG_SCREEN_UPDATE_DRIVER(cninja_state, screen_update_cninja)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(XTAL(24'000'000) / 4, 376, 0, 256, 274, 8, 248);
+ m_screen->set_screen_update(FUNC(cninja_state::screen_update_cninja));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_cninja);
PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 2048);
- MCFG_DEVICE_ADD("spriteram1", BUFFERED_SPRITERAM16)
+ BUFFERED_SPRITERAM16(config, m_spriteram[0]);
DECO16IC(config, m_deco_tilegen[0], 0);
- m_deco_tilegen[0]->set_split(1);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
@@ -833,7 +832,6 @@ MACHINE_CONFIG_START(cninja_state::cninja)
m_deco_tilegen[0]->set_gfxdecode_tag(m_gfxdecode);
DECO16IC(config, m_deco_tilegen[1], 0);
- m_deco_tilegen[1]->set_split(0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
@@ -863,8 +861,7 @@ MACHINE_CONFIG_START(cninja_state::cninja)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("ym1", YM2203, XTAL(32'220'000) / 8)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
+ YM2203(config, "ym1", XTAL(32'220'000) / 8).add_route(ALL_OUTPUTS, "mono", 0.60);
ym2151_device &ym2(YM2151(config, "ym2", XTAL(32'220'000) / 9));
ym2.irq_handler().set_inputline(m_audiocpu, 1); /* IRQ2 */
@@ -872,22 +869,20 @@ MACHINE_CONFIG_START(cninja_state::cninja)
ym2.add_route(0, "mono", 0.45);
ym2.add_route(1, "mono", 0.45);
- MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
-
- MCFG_DEVICE_ADD("oki2", OKIM6295, XTAL(32'220'000) / 16, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
-MACHINE_CONFIG_END
+ OKIM6295(config, "oki1", XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.75);
+ OKIM6295(config, m_oki2, XTAL(32'220'000) / 16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.60);
+}
-MACHINE_CONFIG_START(cninja_state::stoneage)
+void cninja_state::stoneage(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(24'000'000) / 2)
- MCFG_DEVICE_PROGRAM_MAP(cninja_map)
+ M68000(config, m_maincpu, XTAL(24'000'000) / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cninja_state::cninja_map);
- MCFG_DEVICE_ADD("audiocpu", Z80, 3579545)
- MCFG_DEVICE_PROGRAM_MAP(stoneage_s_map)
+ Z80(config, m_audiocpu, 3579545);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &cninja_state::stoneage_s_map);
deco_irq_device &irq(DECO_IRQ(config, "irq", 0));
irq.set_screen_tag(m_screen);
@@ -895,21 +890,22 @@ MACHINE_CONFIG_START(cninja_state::stoneage)
irq.raster2_irq_callback().set_inputline(m_maincpu, 4);
irq.vblank_irq_callback().set_inputline(m_maincpu, 5);
+ MCFG_VIDEO_START_OVERRIDE(cninja_state,cninja)
+
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(24'000'000) / 4, 376, 0, 256, 274, 8, 248)
- MCFG_SCREEN_UPDATE_DRIVER(cninja_state, screen_update_cninja)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(XTAL(24'000'000) / 4, 376, 0, 256, 274, 8, 248);
+ m_screen->set_screen_update(FUNC(cninja_state::screen_update_cninja));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_cninja);
PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 2048);
MCFG_VIDEO_START_OVERRIDE(cninja_state,stoneage)
- MCFG_DEVICE_ADD("spriteram1", BUFFERED_SPRITERAM16)
+ BUFFERED_SPRITERAM16(config, m_spriteram[0]);
DECO16IC(config, m_deco_tilegen[0], 0);
- m_deco_tilegen[0]->set_split(1);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
@@ -923,7 +919,6 @@ MACHINE_CONFIG_START(cninja_state::stoneage)
m_deco_tilegen[0]->set_gfxdecode_tag(m_gfxdecode);
DECO16IC(config, m_deco_tilegen[1], 0);
- m_deco_tilegen[1]->set_split(0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
@@ -958,35 +953,33 @@ MACHINE_CONFIG_START(cninja_state::stoneage)
ymsnd.add_route(0, "mono", 0.45);
ymsnd.add_route(1, "mono", 0.45);
- MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
-MACHINE_CONFIG_END
+ OKIM6295(config, "oki1", XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.75);
+}
-MACHINE_CONFIG_START(cninja_state::cninjabl2)
+void cninja_state::cninjabl2(machine_config &config)
+{
stoneage(config);
- MCFG_DEVICE_MODIFY("audiocpu")
- MCFG_DEVICE_PROGRAM_MAP(cninjabl2_s_map)
+ m_audiocpu->set_addrmap(AS_PROGRAM, &cninja_state::cninjabl2_s_map);
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(cninja_state, screen_update_cninjabl2)
+ m_screen->set_screen_update(FUNC(cninja_state::screen_update_cninjabl2));
m_ioprot->soundlatch_irq_cb().set_inputline(m_audiocpu, INPUT_LINE_IRQ0);
config.device_remove("ymsnd");
- MCFG_DEVICE_REPLACE("oki1", OKIM6295, XTAL(32'220'000) / 32, okim6295_device::PIN7_LOW)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
- MCFG_DEVICE_ADDRESS_MAP(0, cninjabl2_oki_map)
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(cninja_state::cninjabl)
+ okim6295_device &oki1(OKIM6295(config.replace(), "oki1", XTAL(32'220'000) / 32, okim6295_device::PIN7_LOW));
+ oki1.add_route(ALL_OUTPUTS, "mono", 1.0);
+ oki1.set_addrmap(0, &cninja_state::cninjabl2_oki_map);
+}
+void cninja_state::cninjabl(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(24'000'000) / 2)
- MCFG_DEVICE_PROGRAM_MAP(cninjabl_map)
+ M68000(config, m_maincpu, XTAL(24'000'000) / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cninja_state::cninjabl_map);
- MCFG_DEVICE_ADD("audiocpu", Z80, 3579545)
- MCFG_DEVICE_PROGRAM_MAP(cninjabl_sound_map)
+ Z80(config, m_audiocpu, 3579545);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &cninja_state::cninjabl_sound_map);
deco_irq_device &irq(DECO_IRQ(config, "irq", 0));
irq.set_screen_tag(m_screen);
@@ -995,18 +988,17 @@ MACHINE_CONFIG_START(cninja_state::cninjabl)
irq.vblank_irq_callback().set_inputline(m_maincpu, 5);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(24'000'000) / 4, 376, 0, 256, 274, 8, 248)
- MCFG_SCREEN_UPDATE_DRIVER(cninja_state, screen_update_cninjabl)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(XTAL(24'000'000) / 4, 376, 0, 256, 274, 8, 248);
+ m_screen->set_screen_update(FUNC(cninja_state::screen_update_cninjabl));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_cninjabl);
PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 2048);
- MCFG_DEVICE_ADD("spriteram1", BUFFERED_SPRITERAM16)
+ BUFFERED_SPRITERAM16(config, m_spriteram[0]);
DECO16IC(config, m_deco_tilegen[0], 0);
- m_deco_tilegen[0]->set_split(1);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
@@ -1020,7 +1012,6 @@ MACHINE_CONFIG_START(cninja_state::cninjabl)
m_deco_tilegen[0]->set_gfxdecode_tag(m_gfxdecode);
DECO16IC(config, m_deco_tilegen[1], 0);
- m_deco_tilegen[1]->set_split(0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
@@ -1046,16 +1037,15 @@ MACHINE_CONFIG_START(cninja_state::cninjabl)
ymsnd.add_route(0, "mono", 0.45);
ymsnd.add_route(1, "mono", 0.45);
- MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
-MACHINE_CONFIG_END
-
+ OKIM6295(config, "oki1", XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.75);
+}
-MACHINE_CONFIG_START(cninja_state::edrandy)
+void cninja_state::edrandy(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(24'000'000) / 2)
- MCFG_DEVICE_PROGRAM_MAP(edrandy_map)
+ M68000(config, m_maincpu, XTAL(24'000'000) / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cninja_state::edrandy_map);
h6280_device &audiocpu(H6280(config, m_audiocpu, XTAL(32'220'000) / 8));
audiocpu.set_addrmap(AS_PROGRAM, &cninja_state::sound_map);
@@ -1068,18 +1058,17 @@ MACHINE_CONFIG_START(cninja_state::edrandy)
irq.vblank_irq_callback().set_inputline(m_maincpu, 5);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(24'000'000) / 4, 376, 0, 256, 274, 8, 248)
- MCFG_SCREEN_UPDATE_DRIVER(cninja_state, screen_update_edrandy)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(XTAL(24'000'000) / 4, 376, 0, 256, 274, 8, 248);
+ m_screen->set_screen_update(FUNC(cninja_state::screen_update_edrandy));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_cninja);
PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 2048);
- MCFG_DEVICE_ADD("spriteram1", BUFFERED_SPRITERAM16)
+ BUFFERED_SPRITERAM16(config, m_spriteram[0]);
DECO16IC(config, m_deco_tilegen[0], 0);
- m_deco_tilegen[0]->set_split(0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
@@ -1093,7 +1082,6 @@ MACHINE_CONFIG_START(cninja_state::edrandy)
m_deco_tilegen[0]->set_gfxdecode_tag(m_gfxdecode);
DECO16IC(config, m_deco_tilegen[1], 0);
- m_deco_tilegen[1]->set_split(0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
@@ -1122,8 +1110,7 @@ MACHINE_CONFIG_START(cninja_state::edrandy)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("ym1", YM2203, XTAL(32'220'000) / 8)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
+ YM2203(config, "ym1", XTAL(32'220'000) / 8).add_route(ALL_OUTPUTS, "mono", 0.60);
ym2151_device &ym2(YM2151(config, "ym2", XTAL(32'220'000) / 9));
ym2.irq_handler().set_inputline(m_audiocpu, 1); /* IRQ2 */
@@ -1131,19 +1118,17 @@ MACHINE_CONFIG_START(cninja_state::edrandy)
ym2.add_route(0, "mono", 0.45);
ym2.add_route(1, "mono", 0.45);
- MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
-
- MCFG_DEVICE_ADD("oki2", OKIM6295, XTAL(32'220'000) / 16, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
-MACHINE_CONFIG_END
+ OKIM6295(config, "oki1", XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.75);
+ OKIM6295(config, m_oki2, XTAL(32'220'000) / 16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.60);
+}
-MACHINE_CONFIG_START(cninja_state::robocop2)
+void cninja_state::robocop2(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(28'000'000) / 2)
- MCFG_DEVICE_PROGRAM_MAP(robocop2_map)
+ M68000(config, m_maincpu, XTAL(28'000'000) / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cninja_state::robocop2_map);
h6280_device &audiocpu(H6280(config, m_audiocpu, XTAL(32'220'000) / 8));
audiocpu.set_addrmap(AS_PROGRAM, &cninja_state::sound_map);
@@ -1157,10 +1142,10 @@ MACHINE_CONFIG_START(cninja_state::robocop2)
irq.vblank_irq_callback().set_inputline(m_maincpu, 5);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(28'000'000) / 4, 442, 0, 320, 274, 8, 248)
- MCFG_SCREEN_UPDATE_DRIVER(cninja_state, screen_update_robocop2)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(XTAL(28'000'000) / 4, 442, 0, 320, 274, 8, 248);
+ m_screen->set_screen_update(FUNC(cninja_state::screen_update_robocop2));
+ m_screen->set_palette(m_palette);
MCFG_MACHINE_START_OVERRIDE(cninja_state,robocop2)
MCFG_MACHINE_RESET_OVERRIDE(cninja_state,robocop2)
@@ -1168,10 +1153,9 @@ MACHINE_CONFIG_START(cninja_state::robocop2)
GFXDECODE(config, m_gfxdecode, m_palette, gfx_robocop2);
PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 2048);
- MCFG_DEVICE_ADD("spriteram1", BUFFERED_SPRITERAM16)
+ BUFFERED_SPRITERAM16(config, m_spriteram[0]);
DECO16IC(config, m_deco_tilegen[0], 0);
- m_deco_tilegen[0]->set_split(0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
@@ -1186,7 +1170,6 @@ MACHINE_CONFIG_START(cninja_state::robocop2)
m_deco_tilegen[0]->set_gfxdecode_tag(m_gfxdecode);
DECO16IC(config, m_deco_tilegen[1], 0);
- m_deco_tilegen[1]->set_split(0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
@@ -1217,9 +1200,9 @@ MACHINE_CONFIG_START(cninja_state::robocop2)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("ym1", YM2203, XTAL(32'220'000) / 8)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.60)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.60)
+ ym2203_device &ym1(YM2203(config, "ym1", XTAL(32'220'000) / 8));
+ ym1.add_route(ALL_OUTPUTS, "lspeaker", 0.60);
+ ym1.add_route(ALL_OUTPUTS, "rspeaker", 0.60);
ym2151_device &ym2(YM2151(config, "ym2", XTAL(32'220'000) / 9));
ym2.irq_handler().set_inputline(m_audiocpu, 1); /* IRQ2 */
@@ -1227,22 +1210,22 @@ MACHINE_CONFIG_START(cninja_state::robocop2)
ym2.add_route(0, "lspeaker", 0.45);
ym2.add_route(1, "rspeaker", 0.45);
- MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.75)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.75)
-
- MCFG_DEVICE_ADD("oki2", OKIM6295, XTAL(32'220'000) / 16, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.60)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.60)
-MACHINE_CONFIG_END
+ okim6295_device &oki1(OKIM6295(config, "oki1", XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH));
+ oki1.add_route(ALL_OUTPUTS, "lspeaker", 0.75);
+ oki1.add_route(ALL_OUTPUTS, "rspeaker", 0.75);
+ OKIM6295(config, m_oki2, XTAL(32'220'000) / 16, okim6295_device::PIN7_HIGH);
+ m_oki2->add_route(ALL_OUTPUTS, "lspeaker", 0.60);
+ m_oki2->add_route(ALL_OUTPUTS, "rspeaker", 0.60);
+}
-MACHINE_CONFIG_START(cninja_state::mutantf)
+void cninja_state::mutantf(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(28'000'000) / 2)
- MCFG_DEVICE_PROGRAM_MAP(mutantf_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cninja_state, irq6_line_hold)
+ M68000(config, m_maincpu, XTAL(28'000'000) / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cninja_state::mutantf_map);
+ m_maincpu->set_vblank_int("screen", FUNC(cninja_state::irq6_line_hold));
h6280_device &audiocpu(H6280(config, m_audiocpu, XTAL(32'220'000) / 8));
audiocpu.set_addrmap(AS_PROGRAM, &cninja_state::sound_map_mutantf);
@@ -1250,9 +1233,9 @@ MACHINE_CONFIG_START(cninja_state::mutantf)
audiocpu.add_route(ALL_OUTPUTS, "rspeaker", 0);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(28'000'000) / 4, 442, 0, 320, 274, 8, 248) // same as robocop2? verify this from real pcb
- MCFG_SCREEN_UPDATE_DRIVER(cninja_state, screen_update_mutantf)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(XTAL(28'000'000) / 4, 442, 0, 320, 274, 8, 248); // same as robocop2? verify this from real pcb
+ m_screen->set_screen_update(FUNC(cninja_state::screen_update_mutantf));
MCFG_MACHINE_START_OVERRIDE(cninja_state,robocop2)
MCFG_MACHINE_RESET_OVERRIDE(cninja_state,robocop2)
@@ -1261,11 +1244,10 @@ MACHINE_CONFIG_START(cninja_state::mutantf)
GFXDECODE(config, m_gfxdecode, m_palette, gfx_mutantf);
PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 2048);
- MCFG_DEVICE_ADD("spriteram1", BUFFERED_SPRITERAM16)
- MCFG_DEVICE_ADD("spriteram2", BUFFERED_SPRITERAM16)
+ BUFFERED_SPRITERAM16(config, m_spriteram[0]);
+ BUFFERED_SPRITERAM16(config, m_spriteram[1]);
DECO16IC(config, m_deco_tilegen[0], 0);
- m_deco_tilegen[0]->set_split(0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
@@ -1281,7 +1263,6 @@ MACHINE_CONFIG_START(cninja_state::mutantf)
m_deco_tilegen[0]->set_gfxdecode_tag(m_gfxdecode);
DECO16IC(config, m_deco_tilegen[1], 0);
- m_deco_tilegen[1]->set_split(0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
@@ -1320,14 +1301,14 @@ MACHINE_CONFIG_START(cninja_state::mutantf)
ymsnd.add_route(0, "lspeaker", 0.45);
ymsnd.add_route(1, "rspeaker", 0.45);
- MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.75)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.75)
+ okim6295_device &oki1(OKIM6295(config, "oki1", XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH));
+ oki1.add_route(ALL_OUTPUTS, "lspeaker", 0.75);
+ oki1.add_route(ALL_OUTPUTS, "rspeaker", 0.75);
- MCFG_DEVICE_ADD("oki2", OKIM6295, XTAL(32'220'000) / 16, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.60)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.60)
-MACHINE_CONFIG_END
+ OKIM6295(config, m_oki2, XTAL(32'220'000) / 16, okim6295_device::PIN7_HIGH);
+ m_oki2->add_route(ALL_OUTPUTS, "lspeaker", 0.60);
+ m_oki2->add_route(ALL_OUTPUTS, "rspeaker", 0.60);
+}
/**********************************************************************************/
diff --git a/src/mame/drivers/cntsteer.cpp b/src/mame/drivers/cntsteer.cpp
index 2a1fd5ff109..d22c8ac16ef 100644
--- a/src/mame/drivers/cntsteer.cpp
+++ b/src/mame/drivers/cntsteer.cpp
@@ -512,7 +512,7 @@ WRITE8_MEMBER(cntsteer_state::gekitsui_sub_irq_ack)
WRITE8_MEMBER(cntsteer_state::cntsteer_sound_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
@@ -919,19 +919,19 @@ MACHINE_RESET_MEMBER(cntsteer_state,cntsteer)
MACHINE_RESET_CALL_MEMBER(zerotrgt);
}
-MACHINE_CONFIG_START(cntsteer_state::cntsteer)
-
+void cntsteer_state::cntsteer(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", MC6809E, 2000000) /* MC68B09E */
- MCFG_DEVICE_PROGRAM_MAP(cntsteer_cpu1_map)
+ MC6809E(config, m_maincpu, 2000000); /* MC68B09E */
+ m_maincpu->set_addrmap(AS_PROGRAM, &cntsteer_state::cntsteer_cpu1_map);
- MCFG_DEVICE_ADD("subcpu", MC6809E, 2000000) /* MC68B09E */
- MCFG_DEVICE_PROGRAM_MAP(cntsteer_cpu2_map)
-// MCFG_DEVICE_DISABLE()
+ MC6809E(config, m_subcpu, 2000000); /* MC68B09E */
+ m_subcpu->set_addrmap(AS_PROGRAM, &cntsteer_state::cntsteer_cpu2_map);
+// m_subcpu->set_disable();
- MCFG_DEVICE_ADD("audiocpu", M6502, 1500000) /* ? */
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(cntsteer_state, sound_interrupt, 480)
+ M6502(config, m_audiocpu, 1500000); /* ? */
+ m_audiocpu->set_addrmap(AS_PROGRAM, &cntsteer_state::sound_map);
+ m_audiocpu->set_periodic_int(FUNC(cntsteer_state::sound_interrupt), attotime::from_hz(480));
MCFG_MACHINE_START_OVERRIDE(cntsteer_state,cntsteer)
MCFG_MACHINE_RESET_OVERRIDE(cntsteer_state,cntsteer)
@@ -971,20 +971,20 @@ MACHINE_CONFIG_START(cntsteer_state::cntsteer)
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(cntsteer_state::zerotrgt)
+}
+void cntsteer_state::zerotrgt(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", MC6809E, 2000000) /* ? */
- MCFG_DEVICE_PROGRAM_MAP(gekitsui_cpu1_map)
+ MC6809E(config, m_maincpu, 2000000); /* ? */
+ m_maincpu->set_addrmap(AS_PROGRAM, &cntsteer_state::gekitsui_cpu1_map);
- MCFG_DEVICE_ADD("subcpu", MC6809E, 2000000) /* ? */
- MCFG_DEVICE_PROGRAM_MAP(gekitsui_cpu2_map)
+ MC6809E(config, m_subcpu, 2000000); /* ? */
+ m_subcpu->set_addrmap(AS_PROGRAM, &cntsteer_state::gekitsui_cpu2_map);
- MCFG_DEVICE_ADD("audiocpu", M6502, 1500000) /* ? */
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(cntsteer_state, sound_interrupt, 480)
+ M6502(config, m_audiocpu, 1500000); /* ? */
+ m_audiocpu->set_addrmap(AS_PROGRAM, &cntsteer_state::sound_map);
+ m_audiocpu->set_periodic_int(FUNC(cntsteer_state::sound_interrupt), attotime::from_hz(480));
config.m_minimum_quantum = attotime::from_hz(6000);
@@ -992,14 +992,14 @@ MACHINE_CONFIG_START(cntsteer_state::zerotrgt)
MCFG_MACHINE_RESET_OVERRIDE(cntsteer_state,zerotrgt)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(256, 256)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(cntsteer_state, screen_update_zerotrgt)
- MCFG_SCREEN_PALETTE(m_palette)
- MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI)) // ?
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(256, 256);
+ screen.set_visarea(0*8, 32*8-1, 1*8, 31*8-1);
+ screen.set_screen_update(FUNC(cntsteer_state::screen_update_zerotrgt));
+ screen.set_palette(m_palette);
+ screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI); // ?
GFXDECODE(config, m_gfxdecode, m_palette, gfx_zerotrgt);
PALETTE(config, m_palette, FUNC(cntsteer_state::zerotrgt_palette), 256);
@@ -1014,7 +1014,7 @@ MACHINE_CONFIG_START(cntsteer_state::zerotrgt)
AY8910(config, "ay1", 1500000).add_route(ALL_OUTPUTS, "speaker", 0.5);
AY8910(config, "ay2", 1500000).add_route(ALL_OUTPUTS, "speaker", 0.5);
-MACHINE_CONFIG_END
+}
/***************************************************************************/
diff --git a/src/mame/drivers/cobra.cpp b/src/mame/drivers/cobra.cpp
index 3d358b5edaa..035c9ac6ea7 100644
--- a/src/mame/drivers/cobra.cpp
+++ b/src/mame/drivers/cobra.cpp
@@ -3305,25 +3305,23 @@ MACHINE_CONFIG_START(cobra_state::cobra)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_SIZE(512, 400)
- MCFG_SCREEN_VISIBLE_AREA(0, 511, 0, 399)
- MCFG_SCREEN_UPDATE_DRIVER(cobra_state, screen_update_cobra)
- MCFG_PALETTE_ADD("palette", 65536)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_size(512, 400);
+ m_screen->set_visarea_full();
+ m_screen->set_screen_update(FUNC(cobra_state::screen_update_cobra));
+ PALETTE(config, m_palette).set_entries(65536);
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("rfsnd", RF5C400, XTAL(16'934'400))
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
+ rf5c400_device &rfsnd(RF5C400(config, "rfsnd", XTAL(16'934'400)));
+ rfsnd.add_route(0, "lspeaker", 1.0);
+ rfsnd.add_route(1, "rspeaker", 1.0);
- MCFG_DEVICE_ADD(m_dmadac[0], DMADAC)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
+ DMADAC(config, m_dmadac[0]).add_route(ALL_OUTPUTS, "lspeaker", 1.0);
- MCFG_DEVICE_ADD(m_dmadac[1], DMADAC)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
+ DMADAC(config, m_dmadac[1]).add_route(ALL_OUTPUTS, "rspeaker", 1.0);
M48T58(config, "m48t58", 0);
diff --git a/src/mame/drivers/coco12.cpp b/src/mame/drivers/coco12.cpp
index 8de06298232..45e0049cbef 100644
--- a/src/mame/drivers/coco12.cpp
+++ b/src/mame/drivers/coco12.cpp
@@ -378,7 +378,7 @@ void t4426_cart(device_slot_interface &device)
}
//-------------------------------------------------
-// MACHINE_CONFIG_START( coco_sound )
+// machine_config( coco_sound )
//-------------------------------------------------
void coco_state::coco_sound(machine_config &config)
@@ -399,7 +399,7 @@ void coco_state::coco_sound(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG ( coco_floating )
+// machine_config ( coco_floating )
//-------------------------------------------------
void coco_state::coco_floating_map(address_map &map)
@@ -427,12 +427,12 @@ static DEVICE_INPUT_DEFAULTS_START( printer )
DEVICE_INPUT_DEFAULTS_END
//-------------------------------------------------
-// MACHINE_CONFIG
+// machine_config
//-------------------------------------------------
-MACHINE_CONFIG_START(coco12_state::coco)
- MCFG_DEVICE_MODIFY(":")
- MCFG_DEVICE_CLOCK(XTAL(14'318'181) / 16)
+void coco12_state::coco(machine_config &config)
+{
+ this->set_clock(XTAL(14'318'181) / 16);
// basic machine hardware
MC6809E(config, m_maincpu, DERIVED_CLOCK(1, 1));
@@ -499,7 +499,7 @@ MACHINE_CONFIG_START(coco12_state::coco)
SOFTWARE_LIST(config, "coco_cart_list").set_original("coco_cart").set_filter("COCO");
SOFTWARE_LIST(config, "coco_flop_list").set_original("coco_flop").set_filter("COCO");
SOFTWARE_LIST(config, "dragon_cart_list").set_compatible("dragon_cart");
-MACHINE_CONFIG_END
+}
void coco12_state::cocoh(machine_config &config)
{
diff --git a/src/mame/drivers/coco3.cpp b/src/mame/drivers/coco3.cpp
index c341b6f3215..9c985218e0b 100644
--- a/src/mame/drivers/coco3.cpp
+++ b/src/mame/drivers/coco3.cpp
@@ -242,9 +242,9 @@ DEVICE_INPUT_DEFAULTS_END
// MACHINE CONFIGURATION
//**************************************************************************
-MACHINE_CONFIG_START(coco3_state::coco3)
- MCFG_DEVICE_MODIFY(":")
- MCFG_DEVICE_CLOCK(XTAL(28'636'363) / 32)
+void coco3_state::coco3(machine_config &config)
+{
+ this->set_clock(XTAL(28'636'363) / 32);
// basic machine hardware
MC6809E(config, m_maincpu, DERIVED_CLOCK(1, 1));
@@ -329,12 +329,12 @@ MACHINE_CONFIG_START(coco3_state::coco3)
SOFTWARE_LIST(config, "cart_list").set_original("coco_cart").set_filter("COCO3");
SOFTWARE_LIST(config, "flop_list").set_original("coco_flop").set_filter("COCO3");
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(coco3_state::coco3p)
+void coco3_state::coco3p(machine_config &config)
+{
coco3(config);
- MCFG_DEVICE_MODIFY(":")
- MCFG_DEVICE_CLOCK(XTAL(28'475'000) / 32)
+ this->set_clock(XTAL(28'475'000) / 32);
// An additional 4.433618 MHz XTAL is required for PAL color encoding
GIME_PAL(config.replace(), m_gime, XTAL(28'475'000), MAINCPU_TAG, RAM_TAG, CARTRIDGE_TAG, MAINCPU_TAG);
@@ -344,7 +344,7 @@ MACHINE_CONFIG_START(coco3_state::coco3p)
m_gime->irq_wr_callback().set(FUNC(coco3_state::gime_irq_w));
m_gime->firq_wr_callback().set(FUNC(coco3_state::gime_firq_w));
m_gime->floating_bus_rd_callback().set(FUNC(coco3_state::floating_bus_r));
-MACHINE_CONFIG_END
+}
void coco3_state::coco3h(machine_config &config)
{
diff --git a/src/mame/drivers/cocoloco.cpp b/src/mame/drivers/cocoloco.cpp
index 6b1f8bbd68a..202477886be 100644
--- a/src/mame/drivers/cocoloco.cpp
+++ b/src/mame/drivers/cocoloco.cpp
@@ -514,14 +514,14 @@ INPUT_PORTS_END
MACHINE_CONFIG_START(cocoloco_state::cocoloco)
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M6502, CPU_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(cocoloco_map)
+ M6502(config, m_maincpu, CPU_CLOCK);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cocoloco_state::cocoloco_map);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(CPU_CLOCK * 4, 384, 0, 256, 262, 0, 256) // TODO: not accurate, ~50 Hz
- MCFG_SCREEN_UPDATE_DRIVER(cocoloco_state, screen_update)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(CPU_CLOCK * 4, 384, 0, 256, 262, 0, 256); // TODO: not accurate, ~50 Hz
+ screen.set_screen_update(FUNC(cocoloco_state::screen_update));
+ screen.set_palette(m_palette);
PALETTE(config, m_palette, FUNC(cocoloco_state::cocoloco_palette), 0x10);
diff --git a/src/mame/drivers/coinmstr.cpp b/src/mame/drivers/coinmstr.cpp
index 443f1bfdab2..5abd1acc21e 100644
--- a/src/mame/drivers/coinmstr.cpp
+++ b/src/mame/drivers/coinmstr.cpp
@@ -1255,10 +1255,11 @@ uint32_t coinmstr_state::screen_update_coinmstr(screen_device &screen, bitmap_in
}
-MACHINE_CONFIG_START(coinmstr_state::coinmstr)
- MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK) // 7 MHz.
- MCFG_DEVICE_PROGRAM_MAP(coinmstr_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", coinmstr_state, irq0_line_hold)
+void coinmstr_state::coinmstr(machine_config &config)
+{
+ Z80(config, m_maincpu, CPU_CLOCK); // 7 MHz.
+ m_maincpu->set_addrmap(AS_PROGRAM, &coinmstr_state::coinmstr_map);
+ m_maincpu->set_vblank_int("screen", FUNC(coinmstr_state::irq0_line_hold));
pia6821_device &pia0(PIA6821(config, "pia0", 0));
pia0.readpa_handler().set_ioport("PIA0.A");
@@ -1273,16 +1274,16 @@ MACHINE_CONFIG_START(coinmstr_state::coinmstr)
pia2.readpb_handler().set_ioport("PIA2.B");
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(64*8, 64*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 46*8-1, 0*8, 32*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(coinmstr_state, screen_update_coinmstr)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(64*8, 64*8);
+ screen.set_visarea(0*8, 46*8-1, 0*8, 32*8-1);
+ screen.set_screen_update(FUNC(coinmstr_state::screen_update_coinmstr));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_coinmstr);
- MCFG_PALETTE_ADD("palette", 46*32*4)
+ PALETTE(config, m_palette).set_entries(46*32*4);
h46505_device &crtc(H46505(config, "crtc", 14000000 / 16));
crtc.set_screen("screen");
@@ -1295,39 +1296,39 @@ MACHINE_CONFIG_START(coinmstr_state::coinmstr)
ay8910_device &aysnd(AY8910(config, "aysnd", SND_CLOCK));
aysnd.port_a_read_callback().set_ioport("DSW1");
aysnd.add_route(ALL_OUTPUTS, "mono", 0.25);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(coinmstr_state::quizmstr)
+void coinmstr_state::quizmstr(machine_config &config)
+{
coinmstr(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_IO_MAP(quizmstr_io_map)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_IO, &coinmstr_state::quizmstr_io_map);
+}
-MACHINE_CONFIG_START(coinmstr_state::trailblz)
+void coinmstr_state::trailblz(machine_config &config)
+{
coinmstr(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_IO_MAP(trailblz_io_map)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_IO, &coinmstr_state::trailblz_io_map);
+}
-MACHINE_CONFIG_START(coinmstr_state::supnudg2)
+void coinmstr_state::supnudg2(machine_config &config)
+{
coinmstr(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_IO_MAP(supnudg2_io_map)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_IO, &coinmstr_state::supnudg2_io_map);
+}
-MACHINE_CONFIG_START(coinmstr_state::pokeroul)
+void coinmstr_state::pokeroul(machine_config &config)
+{
coinmstr(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_IO_MAP(pokeroul_io_map)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_IO, &coinmstr_state::pokeroul_io_map);
+}
-MACHINE_CONFIG_START(coinmstr_state::jpcoin)
+void coinmstr_state::jpcoin(machine_config &config)
+{
coinmstr(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(jpcoin_map)
- MCFG_DEVICE_IO_MAP(jpcoin_io_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &coinmstr_state::jpcoin_map);
+ m_maincpu->set_addrmap(AS_IO, &coinmstr_state::jpcoin_io_map);
// NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
-MACHINE_CONFIG_END
+}
/*
diff --git a/src/mame/drivers/coinmvga.cpp b/src/mame/drivers/coinmvga.cpp
index 00fcb00a8d7..3c3e47934dc 100644
--- a/src/mame/drivers/coinmvga.cpp
+++ b/src/mame/drivers/coinmvga.cpp
@@ -636,33 +636,33 @@ void coinmvga_state::ramdac2_map(address_map &map)
}
-MACHINE_CONFIG_START(coinmvga_state::coinmvga)
-
+void coinmvga_state::coinmvga(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", H83007, CPU_CLOCK) /* xtal */
- MCFG_DEVICE_PROGRAM_MAP(coinmvga_map)
- MCFG_DEVICE_IO_MAP(coinmvga_io_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", coinmvga_state, vblank_irq) /* wrong, fix me */
+ H83007(config, m_maincpu, CPU_CLOCK); /* xtal */
+ m_maincpu->set_addrmap(AS_PROGRAM, &coinmvga_state::coinmvga_map);
+ m_maincpu->set_addrmap(AS_IO, &coinmvga_state::coinmvga_io_map);
+ m_maincpu->set_vblank_int("screen", FUNC(coinmvga_state::vblank_irq)); /* wrong, fix me */
// NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(640,480)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
- MCFG_SCREEN_UPDATE_DRIVER(coinmvga_state, screen_update_coinmvga)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(640,480);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(coinmvga_state::screen_update_coinmvga));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_coinmvga);
GFXDECODE(config, "gfxdecode2", m_palette2, gfx_coinmvga2);
- MCFG_PALETTE_ADD("palette", 256)
+ PALETTE(config, m_palette).set_entries(256);
ramdac_device &ramdac(RAMDAC(config, "ramdac", 0, m_palette));
ramdac.set_addrmap(0, &coinmvga_state::ramdac_map);
- MCFG_PALETTE_ADD("palette2", 16)
+ PALETTE(config, m_palette2).set_entries(16);
ramdac_device &ramdac2(RAMDAC(config, "ramdac2", 0, m_palette2));
ramdac2.set_addrmap(0, &coinmvga_state::ramdac2_map);
@@ -670,10 +670,10 @@ MACHINE_CONFIG_START(coinmvga_state::coinmvga)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("ymz", YMZ280B, SND_CLOCK)
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
-MACHINE_CONFIG_END
+ ymz280b_device &ymz(YMZ280B(config, "ymz", SND_CLOCK));
+ ymz.add_route(0, "lspeaker", 1.0);
+ ymz.add_route(1, "rspeaker", 1.0);
+}
/*************************
diff --git a/src/mame/drivers/combatsc.cpp b/src/mame/drivers/combatsc.cpp
index c0381746fb0..c1ae7af450b 100644
--- a/src/mame/drivers/combatsc.cpp
+++ b/src/mame/drivers/combatsc.cpp
@@ -202,7 +202,7 @@ WRITE8_MEMBER(combatsc_state::combatscb_io_w)
switch (offset)
{
case 0x400: combatscb_priority_w(space, 0, data); break;
- case 0x800: m_soundlatch->write(space, offset, data); break;
+ case 0x800: m_soundlatch->write(data); break;
case 0xc00: combatsc_vreg_w(space, 0, data); break;
default: m_io_ram[offset] = data; break;
}
diff --git a/src/mame/drivers/comebaby.cpp b/src/mame/drivers/comebaby.cpp
index 65bf27731f4..da1e49c37a9 100644
--- a/src/mame/drivers/comebaby.cpp
+++ b/src/mame/drivers/comebaby.cpp
@@ -236,25 +236,26 @@ static INPUT_PORTS_START( comebaby )
INPUT_PORTS_END
-MACHINE_CONFIG_START(comebaby_state::comebaby)
+void comebaby_state::comebaby(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", PENTIUM2, (66666666*19)/2) /* Actually a Celeron */
- MCFG_DEVICE_PROGRAM_MAP(comebaby_map)
- MCFG_DEVICE_IO_MAP(comebaby_io)
+ PENTIUM2(config, m_maincpu, (66666666*19)/2); /* Actually a Celeron */
+ m_maincpu->set_addrmap(AS_PROGRAM, &comebaby_state::comebaby_map);
+ m_maincpu->set_addrmap(AS_IO, &comebaby_state::comebaby_io);
pcat_common(config);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_UPDATE_DRIVER(comebaby_state, screen_update)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0*8, 32*8-1)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_PALETTE_ADD("palette", 0x100)
-MACHINE_CONFIG_END
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_screen_update(FUNC(comebaby_state::screen_update));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea_full();
+ screen.set_palette("palette");
+
+ PALETTE(config, "palette").set_entries(0x100);
+}
ROM_START(comebaby)
diff --git a/src/mame/drivers/commando.cpp b/src/mame/drivers/commando.cpp
index 442db94c3d1..4c310d24464 100644
--- a/src/mame/drivers/commando.cpp
+++ b/src/mame/drivers/commando.cpp
@@ -252,16 +252,16 @@ void commando_state::machine_reset()
}
-MACHINE_CONFIG_START(commando_state::commando)
-
+void commando_state::commando(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, PHI_MAIN) // ???
- MCFG_DEVICE_PROGRAM_MAP(commando_map)
- MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map)
+ Z80(config, m_maincpu, PHI_MAIN); // ???
+ m_maincpu->set_addrmap(AS_PROGRAM, &commando_state::commando_map);
+ m_maincpu->set_addrmap(AS_OPCODES, &commando_state::decrypted_opcodes_map);
- MCFG_DEVICE_ADD("audiocpu", Z80, PHI_B) // 3 MHz
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(commando_state, irq0_line_hold, 4*60)
+ Z80(config, m_audiocpu, PHI_B); // 3 MHz
+ m_audiocpu->set_addrmap(AS_PROGRAM, &commando_state::sound_map);
+ m_audiocpu->set_periodic_int(FUNC(commando_state::irq0_line_hold), attotime::from_hz(4*60));
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
@@ -287,7 +287,7 @@ MACHINE_CONFIG_START(commando_state::commando)
YM2203(config, "ym1", PHI_B/2).add_route(ALL_OUTPUTS, "mono", 0.15);
YM2203(config, "ym2", PHI_B/2).add_route(ALL_OUTPUTS, "mono", 0.15);
-MACHINE_CONFIG_END
+}
/* ROMs */
diff --git a/src/mame/drivers/compgolf.cpp b/src/mame/drivers/compgolf.cpp
index bada8ab9c80..14c334fee6f 100644
--- a/src/mame/drivers/compgolf.cpp
+++ b/src/mame/drivers/compgolf.cpp
@@ -222,21 +222,21 @@ void compgolf_state::machine_reset()
m_scrolly_hi = 0;
}
-MACHINE_CONFIG_START(compgolf_state::compgolf)
-
+void compgolf_state::compgolf(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", MC6809E, 2000000) // HD68B09EP
- MCFG_DEVICE_PROGRAM_MAP(compgolf_map)
+ MC6809E(config, m_maincpu, 2000000); // HD68B09EP
+ m_maincpu->set_addrmap(AS_PROGRAM, &compgolf_state::compgolf_map);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(256, 256)
- MCFG_SCREEN_VISIBLE_AREA(1*8, 32*8-1, 1*8, 31*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(compgolf_state, screen_update_compgolf)
- MCFG_SCREEN_PALETTE(m_palette)
- MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(256, 256);
+ screen.set_visarea(1*8, 32*8-1, 1*8, 31*8-1);
+ screen.set_screen_update(FUNC(compgolf_state::screen_update_compgolf));
+ screen.set_palette(m_palette);
+ screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI);
PALETTE(config, m_palette, FUNC(compgolf_state::compgolf_palette), 0x100);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_compgolf);
@@ -249,7 +249,7 @@ MACHINE_CONFIG_START(compgolf_state::compgolf)
ymsnd.port_a_write_callback().set(FUNC(compgolf_state::compgolf_scrollx_lo_w));
ymsnd.port_b_write_callback().set(FUNC(compgolf_state::compgolf_scrolly_lo_w));
ymsnd.add_route(ALL_OUTPUTS, "mono", 1.0);
-MACHINE_CONFIG_END
+}
/*************************************
diff --git a/src/mame/drivers/compis.cpp b/src/mame/drivers/compis.cpp
index 18543289904..8883140629e 100644
--- a/src/mame/drivers/compis.cpp
+++ b/src/mame/drivers/compis.cpp
@@ -199,7 +199,7 @@ READ16_MEMBER( compis_state::pcs6_2_3_r )
{
if (ACCESSING_BITS_0_7)
{
- return m_mpsc->inta_r(space, 0);
+ return m_mpsc->inta_r();
}
else
{
@@ -222,7 +222,7 @@ READ16_MEMBER( compis_state::pcs6_4_5_r )
{
if (ACCESSING_BITS_0_7)
{
- return m_mpsc->cd_ba_r(space, offset & 0x03);
+ return m_mpsc->cd_ba_r(offset & 0x03);
}
else
{
@@ -237,7 +237,7 @@ WRITE16_MEMBER( compis_state::pcs6_4_5_w )
{
if (ACCESSING_BITS_0_7)
{
- m_mpsc->cd_ba_w(space, offset & 0x03, data);
+ m_mpsc->cd_ba_w(offset & 0x03, data);
}
else
{
@@ -734,7 +734,7 @@ void compis_state::machine_reset()
//**************************************************************************
//-------------------------------------------------
-// MACHINE_CONFIG( compis )
+// machine_config( compis )
//-------------------------------------------------
void compis_state::compis(machine_config &config)
@@ -829,7 +829,7 @@ void compis_state::compis(machine_config &config)
//-------------------------------------------------
-// MACHINE_CONFIG( compis2 )
+// machine_config( compis2 )
//-------------------------------------------------
void compis_state::compis2(machine_config &config)
diff --git a/src/mame/drivers/compucolor.cpp b/src/mame/drivers/compucolor.cpp
index fea08626904..7be709ab659 100644
--- a/src/mame/drivers/compucolor.cpp
+++ b/src/mame/drivers/compucolor.cpp
@@ -395,17 +395,18 @@ void compucolor2_state::machine_reset()
m_rs232->write_dtr(1);
}
-MACHINE_CONFIG_START(compucolor2_state::compucolor2)
+void compucolor2_state::compucolor2(machine_config &config)
+{
// basic machine hardware
- MCFG_DEVICE_ADD(I8080_TAG, I8080, XTAL(17'971'200)/9)
- MCFG_DEVICE_PROGRAM_MAP(compucolor2_mem)
- MCFG_DEVICE_IO_MAP(compucolor2_io)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(compucolor2_state,int_ack)
+ I8080(config, m_maincpu, XTAL(17'971'200)/9);
+ m_maincpu->set_addrmap(AS_PROGRAM, &compucolor2_state::compucolor2_mem);
+ m_maincpu->set_addrmap(AS_IO, &compucolor2_state::compucolor2_io);
+ m_maincpu->set_irq_acknowledge_callback(FUNC(compucolor2_state::int_ack));
// video hardware
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(17'971'200)/2, 93*6, 0, 64*6, 268, 0, 256)
- MCFG_SCREEN_UPDATE_DRIVER(compucolor2_state, screen_update)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(17'971'200)/2, 93*6, 0, 64*6, 268, 0, 256);
+ screen.set_screen_update(FUNC(compucolor2_state::screen_update));
PALETTE(config, m_palette, palette_device::RGB_3BIT);
@@ -439,7 +440,7 @@ MACHINE_CONFIG_START(compucolor2_state::compucolor2)
// software list
SOFTWARE_LIST(config, "flop_list").set_original("compclr2_flop");
-MACHINE_CONFIG_END
+}
ROM_START( compclr2 )
ROM_REGION( 0x4000, I8080_TAG, 0 )
diff --git a/src/mame/drivers/comquest.cpp b/src/mame/drivers/comquest.cpp
index 0afa37d849f..acec184d755 100644
--- a/src/mame/drivers/comquest.cpp
+++ b/src/mame/drivers/comquest.cpp
@@ -214,11 +214,12 @@ void comquest_state::machine_reset()
}
-MACHINE_CONFIG_START(comquest_state::comquest)
+void comquest_state::comquest(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M6805, 4000000) /* 4000000? */
- /*MCFG_DEVICE_ADD("maincpu", HD63705, 4000000) instruction set looks like m6805/m6808 */
- /*MCFG_DEVICE_ADD("maincpu", M68705, 4000000) instruction set looks like m6805/m6808 */
+ M6805(config, m_maincpu, 4000000); /* 4000000? */
+ /* HD63705(config, m_maincpu, 4000000); instruction set looks like m6805/m6808 */
+ /* M68705(config, m_maincpu, 4000000); instruction set looks like m6805/m6808 */
/*
8 bit bus, integrated io, serial io?,
@@ -244,25 +245,25 @@ MACHINE_CONFIG_START(comquest_state::comquest)
not epson e0c88
*/
- MCFG_DEVICE_PROGRAM_MAP(comquest_mem)
+ m_maincpu->set_addrmap(AS_PROGRAM, &comquest_state::comquest_mem);
/* video hardware */
- MCFG_SCREEN_ADD("screen", LCD)
- MCFG_SCREEN_REFRESH_RATE(30)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(64*4, 128) /* 160 x 102 */
- MCFG_SCREEN_VISIBLE_AREA(0, 64*4-1, 0, 128-1)
- MCFG_SCREEN_UPDATE_DRIVER(comquest_state, screen_update_comquest)
- MCFG_SCREEN_PALETTE("palette")
-
- GFXDECODE(config, "gfxdecode", "palette", gfx_comquest );
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
+ screen.set_refresh_hz(30);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_size(64*4, 128); /* 160 x 102 */
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(comquest_state::screen_update_comquest));
+ screen.set_palette("palette");
+
+ GFXDECODE(config, "gfxdecode", "palette", gfx_comquest);
PALETTE(config, "palette", palette_device::MONOCHROME);
/* sound hardware */
/* unknown ? */
-MACHINE_CONFIG_END
+}
ROM_START(comquest)
// ROM_REGION(0x10000,"maincpu",0)
diff --git a/src/mame/drivers/comx35.cpp b/src/mame/drivers/comx35.cpp
index bf3ed801e55..c6b10c873db 100644
--- a/src/mame/drivers/comx35.cpp
+++ b/src/mame/drivers/comx35.cpp
@@ -592,7 +592,7 @@ void comx35_state::machine_reset()
//**************************************************************************
//-------------------------------------------------
-// MACHINE_CONFIG( pal )
+// machine_config( pal )
//-------------------------------------------------
void comx35_state::base(machine_config &config, const XTAL clock)
diff --git a/src/mame/drivers/contra.cpp b/src/mame/drivers/contra.cpp
index 5501a2e8367..b8990718f0c 100644
--- a/src/mame/drivers/contra.cpp
+++ b/src/mame/drivers/contra.cpp
@@ -206,27 +206,27 @@ void contra_state::machine_reset()
m_audiocpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
}
-MACHINE_CONFIG_START(contra_state::contra)
-
+void contra_state::contra(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", HD6309E, XTAL(24'000'000) / 8) /* 3000000? (HD63C09EP) */
- MCFG_DEVICE_PROGRAM_MAP(contra_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", contra_state, contra_interrupt)
+ HD6309E(config, m_maincpu, XTAL(24'000'000) / 8); /* 3000000? (HD63C09EP) */
+ m_maincpu->set_addrmap(AS_PROGRAM, &contra_state::contra_map);
+ m_maincpu->set_vblank_int("screen", FUNC(contra_state::contra_interrupt));
- MCFG_DEVICE_ADD("audiocpu", MC6809E, XTAL(24'000'000)/8) /* 3000000? (HD68B09EP) */
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
+ MC6809E(config, m_audiocpu, XTAL(24'000'000)/8); /* 3000000? (HD68B09EP) */
+ m_audiocpu->set_addrmap(AS_PROGRAM, &contra_state::sound_map);
config.m_minimum_quantum = attotime::from_hz(6000); /* enough for the sound CPU to read all commands */
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(37*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 35*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(contra_state, screen_update_contra)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ m_screen->set_size(37*8, 32*8);
+ m_screen->set_visarea(0*8, 35*8-1, 2*8, 30*8-1);
+ m_screen->set_screen_update(FUNC(contra_state::screen_update_contra));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_contra);
@@ -247,7 +247,7 @@ MACHINE_CONFIG_START(contra_state::contra)
GENERIC_LATCH_8(config, "soundlatch");
YM2151(config, "ymsnd", XTAL(3'579'545)).add_route(0, "lspeaker", 0.60).add_route(1, "rspeaker", 0.60);
-MACHINE_CONFIG_END
+}
ROM_START( contra )
diff --git a/src/mame/drivers/controlid.cpp b/src/mame/drivers/controlid.cpp
index 926eaea65f2..f026d795baa 100644
--- a/src/mame/drivers/controlid.cpp
+++ b/src/mame/drivers/controlid.cpp
@@ -144,7 +144,8 @@ void controlidx628_state::controlidx628_palette(palette_device &palette) const
* Machine Driver *
*************************/
-MACHINE_CONFIG_START(controlidx628_state::controlidx628)
+void controlidx628_state::controlidx628(machine_config &config)
+{
// basic machine hardware
at89s52_device &maincpu(AT89S52(config, "maincpu", XTAL(11'059'200)));
maincpu.set_addrmap(AS_IO, &controlidx628_state::io_map);
@@ -156,18 +157,18 @@ MACHINE_CONFIG_START(controlidx628_state::controlidx628)
maincpu.port_out_cb<3>().set(FUNC(controlidx628_state::p3_w));
// video hardware
- MCFG_SCREEN_ADD("screen", LCD)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not accurate
- MCFG_SCREEN_SIZE(132, 65)
- MCFG_SCREEN_VISIBLE_AREA(3, 130, 0, 63)
- MCFG_SCREEN_UPDATE_DEVICE("nt7534", nt7534_device, screen_update)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate
+ screen.set_size(132, 65);
+ screen.set_visarea(3, 130, 0, 63);
+ screen.set_screen_update("nt7534", FUNC(nt7534_device::screen_update));
+ screen.set_palette("palette");
PALETTE(config, "palette", FUNC(controlidx628_state::controlidx628_palette), 2);
NT7534(config, m_lcdc);
-MACHINE_CONFIG_END
+}
/*************************
diff --git a/src/mame/drivers/coolridr.cpp b/src/mame/drivers/coolridr.cpp
index aea75c76552..b58f7718fb7 100644
--- a/src/mame/drivers/coolridr.cpp
+++ b/src/mame/drivers/coolridr.cpp
@@ -3219,16 +3219,17 @@ WRITE_LINE_MEMBER(coolridr_state::scsp2_to_sh1_irq)
#define MAIN_CLOCK XTAL(28'636'363)
-MACHINE_CONFIG_START(coolridr_state::coolridr)
- MCFG_DEVICE_ADD("maincpu", SH2, MAIN_CLOCK) // 28 MHz
- MCFG_DEVICE_PROGRAM_MAP(system_h1_map)
+void coolridr_state::coolridr(machine_config &config)
+{
+ SH2(config, m_maincpu, MAIN_CLOCK); // 28 MHz
+ m_maincpu->set_addrmap(AS_PROGRAM, &coolridr_state::system_h1_map);
TIMER(config, "scantimer").configure_scanline(FUNC(coolridr_state::interrupt_main), "screen", 0, 1);
- MCFG_DEVICE_ADD("soundcpu", M68000, 22579000/2) // 22.579 MHz XTAL / 2 = 11.2895 MHz
- MCFG_DEVICE_PROGRAM_MAP(system_h1_sound_map)
+ M68000(config, m_soundcpu, 22579000/2); // 22.579 MHz XTAL / 2 = 11.2895 MHz
+ m_soundcpu->set_addrmap(AS_PROGRAM, &coolridr_state::system_h1_sound_map);
- MCFG_DEVICE_ADD("sub", SH1, 16000000) // SH7032 HD6417032F20!! 16 MHz
- MCFG_DEVICE_PROGRAM_MAP(coolridr_submap)
+ SH1(config, m_subcpu, 16000000); // SH7032 HD6417032F20!! 16 MHz
+ m_subcpu->set_addrmap(AS_PROGRAM, &coolridr_state::coolridr_submap);
TIMER(config, "scantimer2").configure_scanline(FUNC(coolridr_state::interrupt_sub), "screen", 0, 1);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
@@ -3247,19 +3248,19 @@ MACHINE_CONFIG_START(coolridr_state::coolridr)
GFXDECODE(config, m_gfxdecode, m_palette, gfx_coolridr);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_SIZE(640, 512)
- MCFG_SCREEN_VISIBLE_AREA(CLIPMINX_FULL,CLIPMAXX_FULL, CLIPMINY_FULL, CLIPMAXY_FULL)
- MCFG_SCREEN_UPDATE_DRIVER(coolridr_state, screen_update<0>)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_size(640, 512);
+ m_screen->set_visarea(CLIPMINX_FULL,CLIPMAXX_FULL, CLIPMINY_FULL, CLIPMAXY_FULL);
+ m_screen->set_screen_update(FUNC(coolridr_state::screen_update<0>));
+ m_screen->set_palette(m_palette);
- MCFG_SCREEN_ADD("screen2", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_SIZE(640, 512)
- MCFG_SCREEN_VISIBLE_AREA(CLIPMINX_FULL,CLIPMAXX_FULL, CLIPMINY_FULL, CLIPMAXY_FULL)
- MCFG_SCREEN_UPDATE_DRIVER(coolridr_state, screen_update<1>)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen2(SCREEN(config, "screen2", SCREEN_TYPE_RASTER));
+ screen2.set_refresh_hz(60);
+ screen2.set_size(640, 512);
+ screen2.set_visarea(CLIPMINX_FULL,CLIPMAXX_FULL, CLIPMINY_FULL, CLIPMAXY_FULL);
+ screen2.set_screen_update(FUNC(coolridr_state::screen_update<1>));
+ screen2.set_palette(m_palette);
PALETTE(config, m_palette, palette_device::RGB_555);
@@ -3280,20 +3281,19 @@ MACHINE_CONFIG_START(coolridr_state::coolridr)
scsp2.main_irq_cb().set(FUNC(coolridr_state::scsp2_to_sh1_irq));
scsp2.add_route(0, "lspeaker", 1.0);
scsp2.add_route(1, "rspeaker", 1.0);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(coolridr_state::aquastge)
+void coolridr_state::aquastge(machine_config &config)
+{
coolridr(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(aquastge_h1_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &coolridr_state::aquastge_h1_map);
- MCFG_DEVICE_MODIFY("sub")
- MCFG_DEVICE_PROGRAM_MAP(aquastge_submap)
+ m_subcpu->set_addrmap(AS_PROGRAM, &coolridr_state::aquastge_submap);
sega_315_5649_device &io(SEGA_315_5649(config.replace(), "io", 0));
io.in_pc_callback().set_ioport("IN0");
io.in_pd_callback().set_ioport("IN1");
-MACHINE_CONFIG_END
+}
ROM_START( coolridr )
ROM_REGION( 0x200000, "maincpu", 0 ) /* SH2 code */
diff --git a/src/mame/drivers/cop01.cpp b/src/mame/drivers/cop01.cpp
index 75ee04124aa..06a8329f43a 100644
--- a/src/mame/drivers/cop01.cpp
+++ b/src/mame/drivers/cop01.cpp
@@ -79,13 +79,13 @@ Mighty Guy board layout:
WRITE8_MEMBER(cop01_state::cop01_sound_command_w)
{
- m_soundlatch->write(space, offset, data);
- m_audiocpu->set_input_line(0, ASSERT_LINE );
+ m_soundlatch->write(data);
+ m_audiocpu->set_input_line(0, ASSERT_LINE);
}
READ8_MEMBER(cop01_state::cop01_sound_command_r)
{
- int res = (m_soundlatch->read(space, offset) & 0x7f) << 1;
+ int res = (m_soundlatch->read() & 0x7f) << 1;
/* bit 0 seems to be a timer */
if ((m_audiocpu->total_cycles() / TIMER_RATE) & 1)
@@ -446,27 +446,27 @@ void cop01_state::machine_reset()
}
-MACHINE_CONFIG_START(cop01_state::cop01)
-
+void cop01_state::cop01(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, MAINCPU_CLOCK/2) /* unknown clock / divider */
- MCFG_DEVICE_PROGRAM_MAP(cop01_map)
- MCFG_DEVICE_IO_MAP(io_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cop01_state, irq0_line_assert)
+ Z80(config, m_maincpu, MAINCPU_CLOCK/2); /* unknown clock / divider */
+ m_maincpu->set_addrmap(AS_PROGRAM, &cop01_state::cop01_map);
+ m_maincpu->set_addrmap(AS_IO, &cop01_state::io_map);
+ m_maincpu->set_vblank_int("screen", FUNC(cop01_state::irq0_line_assert));
- MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(3'000'000)) /* unknown clock / divider, hand-tuned to match audio reference */
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
- MCFG_DEVICE_IO_MAP(audio_io_map)
+ Z80(config, m_audiocpu, XTAL(3'000'000)); /* unknown clock / divider, hand-tuned to match audio reference */
+ m_audiocpu->set_addrmap(AS_PROGRAM, &cop01_state::sound_map);
+ m_audiocpu->set_addrmap(AS_IO, &cop01_state::audio_io_map);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(cop01_state, screen_update_cop01)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ 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);
+ screen.set_screen_update(FUNC(cop01_state::screen_update_cop01));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_cop01);
PALETTE(config, m_palette, FUNC(cop01_state::cop01_palette), 16+8*16+16*16, 256);
@@ -481,31 +481,31 @@ MACHINE_CONFIG_START(cop01_state::cop01)
AY8910(config, "ay2", 1250000).add_route(ALL_OUTPUTS, "mono", 0.25); /* unknown clock / divider, hand-tuned to match audio reference */
AY8910(config, "ay3", 1250000).add_route(ALL_OUTPUTS, "mono", 0.25); /* unknown clock / divider, hand-tuned to match audio reference */
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(mightguy_state::mightguy)
+}
+void mightguy_state::mightguy(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, MAINCPU_CLOCK/2) /* unknown divider */
- MCFG_DEVICE_PROGRAM_MAP(cop01_map)
- MCFG_DEVICE_IO_MAP(mightguy_io_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cop01_state, irq0_line_assert)
+ Z80(config, m_maincpu, MAINCPU_CLOCK/2); /* unknown divider */
+ m_maincpu->set_addrmap(AS_PROGRAM, &mightguy_state::cop01_map);
+ m_maincpu->set_addrmap(AS_IO, &mightguy_state::mightguy_io_map);
+ m_maincpu->set_vblank_int("screen", FUNC(cop01_state::irq0_line_assert));
- MCFG_DEVICE_ADD("audiocpu", Z80, AUDIOCPU_CLOCK/2) /* unknown divider */
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
- MCFG_DEVICE_IO_MAP(mightguy_audio_io_map)
+ Z80(config, m_audiocpu, AUDIOCPU_CLOCK/2); /* unknown divider */
+ m_audiocpu->set_addrmap(AS_PROGRAM, &mightguy_state::sound_map);
+ m_audiocpu->set_addrmap(AS_IO, &mightguy_state::mightguy_audio_io_map);
NB1412M2(config, m_prot, XTAL(8'000'000)/2); // divided by 2 maybe
m_prot->dac_callback().set("dac", FUNC(dac_byte_interface::data_w));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(cop01_state, screen_update_cop01)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ 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);
+ screen.set_screen_update(FUNC(cop01_state::screen_update_cop01));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_cop01);
PALETTE(config, m_palette, FUNC(cop01_state::cop01_palette), 16+8*16+16*16, 256);
@@ -515,14 +515,13 @@ MACHINE_CONFIG_START(mightguy_state::mightguy)
GENERIC_LATCH_8(config, m_soundlatch);
- MCFG_DEVICE_ADD("ymsnd", YM3526, AUDIOCPU_CLOCK/2) /* unknown divider */
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ YM3526(config, "ymsnd", AUDIOCPU_CLOCK/2).add_route(ALL_OUTPUTS, "mono", 1.0); /* unknown divider */
DAC_8BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "mono", 0.5); // unknown DAC
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/copsnrob.cpp b/src/mame/drivers/copsnrob.cpp
index cff3ebf65f7..061158521e4 100644
--- a/src/mame/drivers/copsnrob.cpp
+++ b/src/mame/drivers/copsnrob.cpp
@@ -248,11 +248,11 @@ void copsnrob_state::machine_reset()
}
-MACHINE_CONFIG_START(copsnrob_state::copsnrob)
-
+void copsnrob_state::copsnrob(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M6502,14318180/16) /* 894886.25 kHz */
- MCFG_DEVICE_PROGRAM_MAP(main_map)
+ M6502(config, m_maincpu, 14318180/16); /* 894886.25 kHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &copsnrob_state::main_map);
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
@@ -267,7 +267,7 @@ MACHINE_CONFIG_START(copsnrob_state::copsnrob)
PALETTE(config, m_palette, palette_device::MONOCHROME);
copsnrob_audio(config);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/corona.cpp b/src/mame/drivers/corona.cpp
index 83e220434c4..6cec44a583e 100644
--- a/src/mame/drivers/corona.cpp
+++ b/src/mame/drivers/corona.cpp
@@ -526,14 +526,14 @@ uint32_t corona_state::screen_update_luckyrlt(screen_device &screen, bitmap_ind1
WRITE8_MEMBER(corona_state::sound_latch_w)
{
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
m_soundcpu->set_input_line(0, ASSERT_LINE);
}
READ8_MEMBER(corona_state::sound_latch_r)
{
m_soundcpu->set_input_line(0, CLEAR_LINE);
- return m_soundlatch->read(space, 0);
+ return m_soundlatch->read();
}
@@ -1385,28 +1385,29 @@ INPUT_PORTS_END
* Machine Drivers *
*******************************************/
-MACHINE_CONFIG_START(corona_state::winner81)
+void corona_state::winner81(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, WC81_MAIN_XTAL/8) /* measured */
- MCFG_DEVICE_PROGRAM_MAP(winner81_map)
- MCFG_DEVICE_IO_MAP(winner81_cpu_io_map)
+ Z80(config, m_maincpu, WC81_MAIN_XTAL/8); /* measured */
+ m_maincpu->set_addrmap(AS_PROGRAM, &corona_state::winner81_map);
+ m_maincpu->set_addrmap(AS_IO, &corona_state::winner81_cpu_io_map);
- MCFG_DEVICE_ADD("soundcpu", Z80, WC81_MAIN_XTAL/10) /* measured */
- MCFG_DEVICE_PROGRAM_MAP(winner81_sound_map)
- MCFG_DEVICE_IO_MAP(winner81_sound_cpu_io_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(corona_state, nmi_line_pulse, 244) /* 244 Hz (1MHz/16/16/16) */
+ Z80(config, m_soundcpu, WC81_MAIN_XTAL/10); /* measured */
+ m_soundcpu->set_addrmap(AS_PROGRAM, &corona_state::winner81_sound_map);
+ m_soundcpu->set_addrmap(AS_IO, &corona_state::winner81_sound_cpu_io_map);
+ m_soundcpu->set_periodic_int(FUNC(corona_state::nmi_line_pulse), attotime::from_hz(244)); /* 244 Hz (1MHz/16/16/16) */
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) //not accurate
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(corona_state, screen_update_winner)
- MCFG_SCREEN_PALETTE("palette")
- MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); //not accurate
+ m_screen->set_size(32*8, 32*8);
+ m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1);
+ m_screen->set_screen_update(FUNC(corona_state::screen_update_winner));
+ m_screen->set_palette("palette");
+ m_screen->screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI);
PALETTE(config, "palette", FUNC(corona_state::corona_palette), 0x100);
@@ -1415,30 +1416,31 @@ MACHINE_CONFIG_START(corona_state::winner81)
GENERIC_LATCH_8(config, m_soundlatch);
AY8912(config, "aysnd", AY_CLK1).add_route(ALL_OUTPUTS, "mono", 1.0); /* measured */
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(corona_state::winner82)
+void corona_state::winner82(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, WC82_MAIN_XTAL/8) /* measured */
- MCFG_DEVICE_PROGRAM_MAP(winner82_map)
- MCFG_DEVICE_IO_MAP(winner82_cpu_io_map)
+ Z80(config, m_maincpu, WC82_MAIN_XTAL/8); /* measured */
+ m_maincpu->set_addrmap(AS_PROGRAM, &corona_state::winner82_map);
+ m_maincpu->set_addrmap(AS_IO, &corona_state::winner82_cpu_io_map);
- MCFG_DEVICE_ADD("soundcpu", Z80, WC82_MAIN_XTAL/8) /* measured */
- MCFG_DEVICE_PROGRAM_MAP(winner82_sound_map) /* IM1 instead of NMI */
- MCFG_DEVICE_IO_MAP(winner82_sound_cpu_io_map)
+ Z80(config, m_soundcpu, WC82_MAIN_XTAL/8); /* measured */
+ m_soundcpu->set_addrmap(AS_PROGRAM, &corona_state::winner82_sound_map); /* IM1 instead of NMI */
+ m_soundcpu->set_addrmap(AS_IO, &corona_state::winner82_sound_cpu_io_map);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) //not accurate
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(corona_state, screen_update_winner)
- MCFG_SCREEN_PALETTE("palette")
- MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); //not accurate
+ m_screen->set_size(32*8, 32*8);
+ m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1);
+ m_screen->set_screen_update(FUNC(corona_state::screen_update_winner));
+ m_screen->set_palette("palette");
+ m_screen->screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI);
PALETTE(config, "palette", FUNC(corona_state::corona_palette), 0x100);
@@ -1447,31 +1449,32 @@ MACHINE_CONFIG_START(corona_state::winner82)
GENERIC_LATCH_8(config, m_soundlatch);
AY8910(config, "aysnd", AY_CLK2).add_route(ALL_OUTPUTS, "mono", 1.0); /* measured */
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(corona_state::re800)
+void corona_state::re800(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, RE_MAIN_XTAL/8) /* measured 2MHz */
- MCFG_DEVICE_PROGRAM_MAP(re800_map)
- MCFG_DEVICE_IO_MAP(re800_cpu_io_map)
+ Z80(config, m_maincpu, RE_MAIN_XTAL/8); /* measured 2MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &corona_state::re800_map);
+ m_maincpu->set_addrmap(AS_IO, &corona_state::re800_cpu_io_map);
- MCFG_DEVICE_ADD("soundcpu", Z80, RE_MAIN_XTAL/8) /* measured 2MHz */
- MCFG_DEVICE_PROGRAM_MAP(re800_sound_map)
- MCFG_DEVICE_IO_MAP(re800_sound_cpu_io_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(corona_state, nmi_line_pulse, 244) /* 244 Hz (1MHz/16/16/16) */
+ Z80(config, m_soundcpu, RE_MAIN_XTAL/8); /* measured 2MHz */
+ m_soundcpu->set_addrmap(AS_PROGRAM, &corona_state::re800_sound_map);
+ m_soundcpu->set_addrmap(AS_IO, &corona_state::re800_sound_cpu_io_map);
+ m_soundcpu->set_periodic_int(FUNC(corona_state::nmi_line_pulse), attotime::from_hz(244)); /* 244 Hz (1MHz/16/16/16) */
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) //not accurate
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 32*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(corona_state, screen_update_winner)
- MCFG_SCREEN_PALETTE("palette")
- MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); //not accurate
+ m_screen->set_size(32*8, 32*8);
+ m_screen->set_visarea(0*8, 32*8-1, 1*8, 32*8-1);
+ m_screen->set_screen_update(FUNC(corona_state::screen_update_winner));
+ m_screen->set_palette("palette");
+ m_screen->screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI);
PALETTE(config, "palette", FUNC(corona_state::corona_palette), 0x100);
@@ -1480,30 +1483,31 @@ MACHINE_CONFIG_START(corona_state::re800)
GENERIC_LATCH_8(config, m_soundlatch);
AY8912(config, "aysnd", AY_CLK2).add_route(ALL_OUTPUTS, "mono", 1.0);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(corona_state::rcirulet)
+void corona_state::rcirulet(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, RE_MAIN_XTAL/8) /* measured 2MHz */
- MCFG_DEVICE_PROGRAM_MAP(re800_map)
- MCFG_DEVICE_IO_MAP(re800_cpu_io_map)
+ Z80(config, m_maincpu, RE_MAIN_XTAL/8); /* measured 2MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &corona_state::re800_map);
+ m_maincpu->set_addrmap(AS_IO, &corona_state::re800_cpu_io_map);
- MCFG_DEVICE_ADD("soundcpu", Z80, RE_MAIN_XTAL/8) /* measured 2MHz */
- MCFG_DEVICE_PROGRAM_MAP(winner82_sound_map) /* IM1 instead of NMI */
- MCFG_DEVICE_IO_MAP(winner82_sound_cpu_io_map)
+ Z80(config, m_soundcpu, RE_MAIN_XTAL/8); /* measured 2MHz */
+ m_soundcpu->set_addrmap(AS_PROGRAM, &corona_state::winner82_sound_map); /* IM1 instead of NMI */
+ m_soundcpu->set_addrmap(AS_IO, &corona_state::winner82_sound_cpu_io_map);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) //not accurate
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 32*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(corona_state, screen_update_winner)
- MCFG_SCREEN_PALETTE("palette")
- MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); //not accurate
+ m_screen->set_size(32*8, 32*8);
+ m_screen->set_visarea(0*8, 32*8-1, 1*8, 32*8-1);
+ m_screen->set_screen_update(FUNC(corona_state::screen_update_winner));
+ m_screen->set_palette("palette");
+ m_screen->screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI);
PALETTE(config, "palette", FUNC(corona_state::corona_palette), 0x100);
@@ -1512,31 +1516,32 @@ MACHINE_CONFIG_START(corona_state::rcirulet)
GENERIC_LATCH_8(config, m_soundlatch);
AY8912(config, "aysnd", AY_CLK2).add_route(ALL_OUTPUTS, "mono", 1.0);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(corona_state::luckyrlt)
+void corona_state::luckyrlt(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, RE_MAIN_XTAL/8) /* measured 2MHz */
- MCFG_DEVICE_PROGRAM_MAP(luckyrlt_map)
- MCFG_DEVICE_IO_MAP(luckyrlt_cpu_io_map)
+ Z80(config, m_maincpu, RE_MAIN_XTAL/8); /* measured 2MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &corona_state::luckyrlt_map);
+ m_maincpu->set_addrmap(AS_IO, &corona_state::luckyrlt_cpu_io_map);
- MCFG_DEVICE_ADD("soundcpu", Z80, RE_MAIN_XTAL/8) /* measured 2MHz */
- MCFG_DEVICE_PROGRAM_MAP(luckyrlt_sound_map)
- MCFG_DEVICE_IO_MAP(luckyrlt_sound_cpu_io_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(corona_state, nmi_line_pulse, 244) /* 244 Hz (1MHz/16/16/16) */
+ Z80(config, m_soundcpu, RE_MAIN_XTAL/8); /* measured 2MHz */
+ m_soundcpu->set_addrmap(AS_PROGRAM, &corona_state::luckyrlt_sound_map);
+ m_soundcpu->set_addrmap(AS_IO, &corona_state::luckyrlt_sound_cpu_io_map);
+ m_soundcpu->set_periodic_int(FUNC(corona_state::nmi_line_pulse), attotime::from_hz(244)); /* 244 Hz (1MHz/16/16/16) */
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) //not accurate
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(corona_state, screen_update_luckyrlt)
- MCFG_SCREEN_PALETTE("palette")
- MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); //not accurate
+ m_screen->set_size(32*8, 32*8);
+ m_screen->set_visarea(0*8, 32*8-1, 1*8, 30*8-1);
+ m_screen->set_screen_update(FUNC(corona_state::screen_update_luckyrlt));
+ m_screen->set_palette("palette");
+ m_screen->screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI);
PALETTE(config, "palette", FUNC(corona_state::corona_palette), 0x100);
@@ -1545,7 +1550,7 @@ MACHINE_CONFIG_START(corona_state::luckyrlt)
GENERIC_LATCH_8(config, m_soundlatch);
AY8912(config, "aysnd", AY_CLK1).add_route(ALL_OUTPUTS, "mono", 1.0);
-MACHINE_CONFIG_END
+}
/**************** Corona Co,LTD. Hardware ****************
diff --git a/src/mame/drivers/cosmicos.cpp b/src/mame/drivers/cosmicos.cpp
index bca91f96fc8..628e0446309 100644
--- a/src/mame/drivers/cosmicos.cpp
+++ b/src/mame/drivers/cosmicos.cpp
@@ -533,8 +533,7 @@ MACHINE_CONFIG_START(cosmicos_state::cosmicos)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
+ SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
CDP1864(config, m_cti, 1.75_MHz_XTAL).set_screen(SCREEN_TAG);
m_cti->inlace_cb().set_constant(0);
diff --git a/src/mame/drivers/cps1.cpp b/src/mame/drivers/cps1.cpp
index 0d0394a4e40..331e605040c 100644
--- a/src/mame/drivers/cps1.cpp
+++ b/src/mame/drivers/cps1.cpp
@@ -299,15 +299,15 @@ WRITE8_MEMBER(cps_state::cps1_oki_pin7_w)
WRITE16_MEMBER(cps_state::cps1_soundlatch_w)
{
if (ACCESSING_BITS_0_7)
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
else
- m_soundlatch->write(space, 0, data >> 8);
+ m_soundlatch->write(data >> 8);
}
WRITE16_MEMBER(cps_state::cps1_soundlatch2_w)
{
if (ACCESSING_BITS_0_7)
- m_soundlatch2->write(space, 0, data & 0xff);
+ m_soundlatch2->write(data & 0xff);
}
WRITE16_MEMBER(cps_state::cps1_coinctrl_w)
diff --git a/src/mame/drivers/cps2.cpp b/src/mame/drivers/cps2.cpp
index 0dc9143e303..40abe058624 100644
--- a/src/mame/drivers/cps2.cpp
+++ b/src/mame/drivers/cps2.cpp
@@ -1295,61 +1295,62 @@ MACHINE_START_MEMBER(cps2_state,cps2)
}
-MACHINE_CONFIG_START(cps2_state::cps2)
-
+void cps2_state::cps2(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000))
- MCFG_DEVICE_PROGRAM_MAP(cps2_map)
- MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map)
+ M68000(config, m_maincpu, XTAL(16'000'000));
+ m_maincpu->set_addrmap(AS_PROGRAM, &cps2_state::cps2_map);
+ m_maincpu->set_addrmap(AS_OPCODES, &cps2_state::decrypted_opcodes_map);
TIMER(config, "scantimer").configure_scanline(FUNC(cps2_state::cps2_interrupt), "screen", 0, 1);
- MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(8'000'000))
- MCFG_DEVICE_PROGRAM_MAP(qsound_sub_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(cps2_state, irq0_line_hold, 250) // measured
+ Z80(config, m_audiocpu, XTAL(8'000'000));
+ m_audiocpu->set_addrmap(AS_PROGRAM, &cps2_state::qsound_sub_map);
+ m_audiocpu->set_periodic_int(FUNC(cps2_state::irq0_line_hold), attotime::from_hz(250)); // measured
MCFG_MACHINE_START_OVERRIDE(cps2_state, cps2)
EEPROM_93C46_16BIT(config, "eeprom");
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
- MCFG_SCREEN_RAW_PARAMS(CPS_PIXEL_CLOCK, CPS_HTOTAL, CPS_HBEND, CPS_HBSTART, CPS_VTOTAL, CPS_VBEND, CPS_VBSTART)
- MCFG_SCREEN_UPDATE_DRIVER(cps2_state, screen_update_cps2)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cps2_state, screen_vblank_cps1))
- MCFG_SCREEN_PALETTE("palette")
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
+ m_screen->set_raw(CPS_PIXEL_CLOCK, CPS_HTOTAL, CPS_HBEND, CPS_HBSTART, CPS_VTOTAL, CPS_VBEND, CPS_VBSTART);
+ m_screen->set_screen_update(FUNC(cps2_state::screen_update_cps2));
+ m_screen->screen_vblank().set(FUNC(cps2_state::screen_vblank_cps1));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_cps1);
- MCFG_PALETTE_ADD("palette", 0xc00)
+ PALETTE(config, m_palette).set_entries(0xc00);
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("qsound", QSOUND)
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
-MACHINE_CONFIG_END
+ QSOUND(config, m_qsound);
+ m_qsound->add_route(0, "lspeaker", 1.0);
+ m_qsound->add_route(1, "rspeaker", 1.0);
+}
-MACHINE_CONFIG_START(cps2_state::dead_cps2)
+void cps2_state::dead_cps2(machine_config &config)
+{
cps2(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(dead_cps2_map)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &cps2_state::dead_cps2_map);
+}
-MACHINE_CONFIG_START(cps2_state::gigaman2)
+void cps2_state::gigaman2(machine_config &config)
+{
cps2(config);
config.device_remove("audiocpu");
// gigaman2 has an AT89C4051 (8051) MCU as an audio cpu, no qsound.
config.device_remove("qsound");
- MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(32'000'000)/32, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.47)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.47)
-MACHINE_CONFIG_END
+ OKIM6295(config, m_oki, XTAL(32'000'000)/32, okim6295_device::PIN7_HIGH); // clock frequency & pin 7 not verified
+ m_oki->add_route(ALL_OUTPUTS, "lspeaker", 0.47);
+ m_oki->add_route(ALL_OUTPUTS, "rspeaker", 0.47);
+}
/*************************************
*
diff --git a/src/mame/drivers/crbaloon.cpp b/src/mame/drivers/crbaloon.cpp
index 4d24798c54b..ff32e1de93e 100644
--- a/src/mame/drivers/crbaloon.cpp
+++ b/src/mame/drivers/crbaloon.cpp
@@ -361,31 +361,30 @@ INTERRUPT_GEN_MEMBER(crbaloon_state::vblank_irq)
}
-MACHINE_CONFIG_START(crbaloon_state::crbaloon)
-
+void crbaloon_state::crbaloon(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, CRBALOON_MASTER_XTAL / 3)
- MCFG_DEVICE_PROGRAM_MAP(main_map)
- MCFG_DEVICE_IO_MAP(main_io_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", crbaloon_state, vblank_irq)
+ Z80(config, m_maincpu, CRBALOON_MASTER_XTAL / 3);
+ m_maincpu->set_addrmap(AS_PROGRAM, &crbaloon_state::main_map);
+ m_maincpu->set_addrmap(AS_IO, &crbaloon_state::main_io_map);
+ m_maincpu->set_vblank_int("screen", FUNC(crbaloon_state::vblank_irq));
/* video hardware */
GFXDECODE(config, m_gfxdecode, "palette", gfx_crbaloon);
PALETTE(config, "palette", FUNC(crbaloon_state::crbaloon_palette), 32);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 28*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(crbaloon_state, screen_update_crbaloon)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_video_attributes(VIDEO_ALWAYS_UPDATE);
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(32*8, 32*8);
+ screen.set_visarea(0*8, 32*8-1, 0*8, 28*8-1);
+ screen.set_screen_update(FUNC(crbaloon_state::screen_update_crbaloon));
+ screen.set_palette("palette");
/* audio hardware */
crbaloon_audio(config);
-
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/crimfght.cpp b/src/mame/drivers/crimfght.cpp
index 861696da537..b56c39cac2f 100644
--- a/src/mame/drivers/crimfght.cpp
+++ b/src/mame/drivers/crimfght.cpp
@@ -57,7 +57,7 @@ WRITE8_MEMBER(crimfght_state::k052109_051960_w)
WRITE8_MEMBER(crimfght_state::sound_w)
{
// writing the latch asserts the irq line
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE);
}
diff --git a/src/mame/drivers/crospang.cpp b/src/mame/drivers/crospang.cpp
index fb3b3c4a6d0..1d0f7970c4b 100644
--- a/src/mame/drivers/crospang.cpp
+++ b/src/mame/drivers/crospang.cpp
@@ -40,15 +40,15 @@
/* main cpu */
-void crospang_state::crospang_base_map(address_map &map)
+void crospang_state::base_map(address_map &map)
{
map(0x000000, 0x0fffff).rom().nopw(); // writes to rom quite often
- map(0x100000, 0x100001).w(FUNC(crospang_state::bestri_tilebank_select_w));
- map(0x10000e, 0x10000f).w(FUNC(crospang_state::bestri_tilebank_data_w));
+ map(0x100000, 0x100001).w(FUNC(crospang_state::tilebank_select_w));
+ map(0x10000e, 0x10000f).w(FUNC(crospang_state::tilebank_data_w));
- map(0x120000, 0x1207ff).ram().w(FUNC(crospang_state::crospang_fg_videoram_w)).share("fg_videoram");
- map(0x122000, 0x1227ff).ram().w(FUNC(crospang_state::crospang_bg_videoram_w)).share("bg_videoram");
+ map(0x120000, 0x1207ff).ram().w(FUNC(crospang_state::fg_videoram_w)).share("fg_videoram");
+ map(0x122000, 0x1227ff).ram().w(FUNC(crospang_state::bg_videoram_w)).share("bg_videoram");
map(0x200000, 0x2005ff).ram().w("palette", FUNC(palette_device::write16)).share("palette");
map(0x210000, 0x2107ff).ram().share("spriteram");
map(0x270001, 0x270001).w(m_soundlatch, FUNC(generic_latch_8_device::write));
@@ -62,31 +62,31 @@ void crospang_state::crospang_base_map(address_map &map)
void crospang_state::crospang_map(address_map &map)
{
- crospang_base_map(map);
+ base_map(map);
- map(0x100002, 0x100003).w(FUNC(crospang_state::crospang_fg_scrolly_w));
- map(0x100004, 0x100005).w(FUNC(crospang_state::crospang_bg_scrollx_w));
- map(0x100006, 0x100007).w(FUNC(crospang_state::crospang_bg_scrolly_w));
- map(0x100008, 0x100009).w(FUNC(crospang_state::crospang_fg_scrollx_w));
+ map(0x100002, 0x100003).w(FUNC(crospang_state::fg_scrolly_w));
+ map(0x100004, 0x100005).w(FUNC(crospang_state::bg_scrollx_w));
+ map(0x100006, 0x100007).w(FUNC(crospang_state::bg_scrolly_w));
+ map(0x100008, 0x100009).w(FUNC(crospang_state::fg_scrollx_w));
map(0x320000, 0x32ffff).ram();
}
void crospang_state::pitapat_map(address_map &map)
{
- crospang_base_map(map);
+ base_map(map);
- map(0x100002, 0x100003).w(FUNC(crospang_state::crospang_fg_scrolly_w));
- map(0x100004, 0x100005).w(FUNC(crospang_state::crospang_bg_scrollx_w));
- map(0x100006, 0x100007).w(FUNC(crospang_state::crospang_bg_scrolly_w));
- map(0x100008, 0x100009).w(FUNC(crospang_state::crospang_fg_scrollx_w));
+ map(0x100002, 0x100003).w(FUNC(crospang_state::fg_scrolly_w));
+ map(0x100004, 0x100005).w(FUNC(crospang_state::bg_scrollx_w));
+ map(0x100006, 0x100007).w(FUNC(crospang_state::bg_scrolly_w));
+ map(0x100008, 0x100009).w(FUNC(crospang_state::fg_scrollx_w));
map(0x300000, 0x30ffff).ram();
}
void crospang_state::bestri_map(address_map &map)
{
- crospang_base_map(map);
+ base_map(map);
map(0x100004, 0x100005).w(FUNC(crospang_state::bestri_fg_scrollx_w));
map(0x100006, 0x100007).w(FUNC(crospang_state::bestri_fg_scrolly_w));
@@ -98,7 +98,7 @@ void crospang_state::bestri_map(address_map &map)
void crospang_state::bestria_map(address_map &map)
{
- crospang_base_map(map);
+ base_map(map);
map(0x100006, 0x100007).w(FUNC(crospang_state::bestri_fg_scrollx_w));
map(0x100008, 0x100009).w(FUNC(crospang_state::bestri_fg_scrolly_w));
@@ -110,13 +110,13 @@ void crospang_state::bestria_map(address_map &map)
/* sound cpu */
-void crospang_state::crospang_sound_map(address_map &map)
+void crospang_state::sound_map(address_map &map)
{
map(0x0000, 0xbfff).rom();
map(0xc000, 0xc7ff).ram();
}
-void crospang_state::crospang_sound_io_map(address_map &map)
+void crospang_state::sound_io_map(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x01).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write));
@@ -393,33 +393,42 @@ static const gfx_layout tlayout =
RGN_FRAC(1,2),
4,
{ RGN_FRAC(1,2)+8, RGN_FRAC(1,2)+0, 8, 0 },
- { 32*8+0, 32*8+1, 32*8+2, 32*8+3, 32*8+4, 32*8+5, 32*8+6, 32*8+7,
- 0, 1, 2, 3, 4, 5, 6, 7 },
- { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
- 8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 },
+ { STEP8(8*2*16,1), STEP8(0,1) },
+ { STEP16(0,8*2) },
+ 64*8
+};
+
+static const gfx_layout tlayout_alt =
+{
+ 16,16,
+ RGN_FRAC(1,2),
+ 4,
+ { 8, 0, RGN_FRAC(1,2)+8, RGN_FRAC(1,2)+0 },
+ { STEP8(0,1), STEP8(8*2*16,1) },
+ { STEP16(0,8*2) },
64*8
};
static GFXDECODE_START( gfx_crospang )
- GFXDECODE_ENTRY( "gfx2", 0, tlayout, 0, 64 ) /* Tiles 16x16 */
- GFXDECODE_ENTRY( "gfx1", 0, tlayout, 0, 64 ) /* Sprites 16x16 */
+ GFXDECODE_ENTRY( "gfx2", 0, tlayout, 0, 64 ) /* Sprites 16x16 */
+ GFXDECODE_ENTRY( "gfx1", 0, tlayout_alt, 0, 64 ) /* Tiles 16x16 */
GFXDECODE_END
void crospang_state::machine_start()
{
- save_item(NAME(m_bestri_tilebank));
- save_item(NAME(m_bestri_tilebankselect));
+ save_item(NAME(m_tilebank));
+ save_item(NAME(m_tilebankselect));
}
void crospang_state::machine_reset()
{
- m_bestri_tilebank[0] = 0x00;
- m_bestri_tilebank[1] = 0x01;
- m_bestri_tilebank[2] = 0x02;
- m_bestri_tilebank[3] = 0x03;
+ m_tilebank[0] = 0x00;
+ m_tilebank[1] = 0x01;
+ m_tilebank[2] = 0x02;
+ m_tilebank[3] = 0x03;
- m_bestri_tilebankselect = 0;
+ m_tilebankselect = 0;
}
void crospang_state::crospang(machine_config &config)
@@ -430,8 +439,8 @@ void crospang_state::crospang(machine_config &config)
m_maincpu->set_vblank_int("screen", FUNC(crospang_state::irq6_line_hold));
z80_device &audiocpu(Z80(config, "audiocpu", XTAL(14'318'181)/4)); /* 3.579545MHz */
- audiocpu.set_addrmap(AS_PROGRAM, &crospang_state::crospang_sound_map);
- audiocpu.set_addrmap(AS_IO, &crospang_state::crospang_sound_io_map);
+ audiocpu.set_addrmap(AS_PROGRAM, &crospang_state::sound_map);
+ audiocpu.set_addrmap(AS_IO, &crospang_state::sound_io_map);
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
@@ -439,7 +448,7 @@ void crospang_state::crospang(machine_config &config)
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
screen.set_size(64*8, 64*8);
screen.set_visarea(0, 40*8-1, 0, 30*8-1);
- screen.set_screen_update(FUNC(crospang_state::screen_update_crospang));
+ screen.set_screen_update(FUNC(crospang_state::screen_update));
screen.set_palette("palette");
PALETTE(config, "palette").set_format(palette_device::xRGB_555, 0x300);
@@ -743,34 +752,9 @@ ROM_START( pitapat )
ROM_LOAD16_BYTE( "ud17", 0x080001, 0x40000, CRC(d4c67e2e) SHA1(e684b58333d64f5961983b42f56c61bb0bea2e5c) )
ROM_END
-void crospang_state::tumblepb_gfx1_rearrange()
-{
- uint8_t *rom = memregion("gfx1")->base();
- int len = memregion("gfx1")->bytes();
- int i;
-
- /* gfx data is in the wrong order */
- for (i = 0; i < len; i++)
- {
- if ((i & 0x20) == 0)
- {
- int t = rom[i]; rom[i] = rom[i + 0x20]; rom[i + 0x20] = t;
- }
- }
- /* low/high half are also swapped */
- for (i = 0; i < len / 2; i++)
- {
- int t = rom[i]; rom[i] = rom[i + len / 2]; rom[i + len / 2] = t;
- }
-}
-
-void crospang_state::init_crospang()
-{
- tumblepb_gfx1_rearrange();
-}
-GAME( 1998, crospang, 0, crospang, crospang, crospang_state, init_crospang, ROT0, "F2 System", "Cross Pang", MACHINE_SUPPORTS_SAVE )
-GAME( 1997, heuksun, 0, crospang, heuksun, crospang_state, init_crospang, ROT0, "Oksan / F2 System", "Heuk Sun Baek Sa (Korea)", MACHINE_SUPPORTS_SAVE )
-GAME( 1998, bestri, 0, bestri, bestri, crospang_state, init_crospang, ROT0, "F2 System", "Bestri (Korea, set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1998, bestria, bestri, bestria, bestri, crospang_state, init_crospang, ROT0, "F2 System", "Bestri (Korea, set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1997, pitapat, 0, pitapat, pitapat, crospang_state, init_crospang, ROT0, "F2 System", "Pitapat Puzzle", MACHINE_SUPPORTS_SAVE ) // Test Mode calls it 'Puzzle Ball'
+GAME( 1998, crospang, 0, crospang, crospang, crospang_state, empty_init, ROT0, "F2 System", "Cross Pang", MACHINE_SUPPORTS_SAVE )
+GAME( 1997, heuksun, 0, crospang, heuksun, crospang_state, empty_init, ROT0, "Oksan / F2 System", "Heuk Sun Baek Sa (Korea)", MACHINE_SUPPORTS_SAVE )
+GAME( 1998, bestri, 0, bestri, bestri, crospang_state, empty_init, ROT0, "F2 System", "Bestri (Korea, set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1998, bestria, bestri, bestria, bestri, crospang_state, empty_init, ROT0, "F2 System", "Bestri (Korea, set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1997, pitapat, 0, pitapat, pitapat, crospang_state, empty_init, ROT0, "F2 System", "Pitapat Puzzle", MACHINE_SUPPORTS_SAVE ) // Test Mode calls it 'Puzzle Ball'
diff --git a/src/mame/drivers/crvision.cpp b/src/mame/drivers/crvision.cpp
index 642e80b867f..081d886b9fb 100644
--- a/src/mame/drivers/crvision.cpp
+++ b/src/mame/drivers/crvision.cpp
@@ -780,7 +780,7 @@ void crvision_state::creativision(machine_config &config)
}
/*-------------------------------------------------
- MACHINE_CONFIG_START( ntsc )
+ machine_config( ntsc )
-------------------------------------------------*/
void crvision_state::ntsc(machine_config &config)
@@ -795,7 +795,7 @@ void crvision_state::ntsc(machine_config &config)
}
/*-------------------------------------------------
- MACHINE_CONFIG_START( pal )
+ machine_config( pal )
-------------------------------------------------*/
void crvision_pal_state::pal(machine_config &config)
@@ -810,7 +810,7 @@ void crvision_pal_state::pal(machine_config &config)
}
/*-------------------------------------------------
- MACHINE_CONFIG_START( lasr2001 )
+ machine_config( lasr2001 )
-------------------------------------------------*/
void laser2001_state::lasr2001(machine_config &config)
diff --git a/src/mame/drivers/csplayh5.cpp b/src/mame/drivers/csplayh5.cpp
index 6ac1e75b7ec..bca9301e1ca 100644
--- a/src/mame/drivers/csplayh5.cpp
+++ b/src/mame/drivers/csplayh5.cpp
@@ -49,14 +49,12 @@ public:
csplayh5_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
- m_tmp68301(*this, "tmp68301"),
m_nichisnd(*this, "nichisnd"),
m_key(*this, "KEY.%u", 0),
m_region_maincpu(*this, "maincpu")
{ }
- required_device<cpu_device> m_maincpu;
- required_device<tmp68301_device> m_tmp68301;
+ required_device<tmp68301_device> m_maincpu;
required_device<nichisnd_device> m_nichisnd;
required_ioport_array<5> m_key;
required_memory_region m_region_maincpu;
@@ -142,8 +140,6 @@ void csplayh5_state::csplayh5_map(address_map &map)
map(0x800000, 0xbfffff).rom().region("blit_gfx", 0); // GFX ROM routes here
map(0xc00000, 0xc7ffff).ram().share("nvram").mirror(0x380000); // work RAM
-
- map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
}
#if USE_H8
@@ -330,7 +326,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(csplayh5_state::csplayh5_irq)
int scanline = param;
if(scanline == 212*2)
- m_tmp68301->external_interrupt_0();
+ m_maincpu->external_interrupt_0();
}
WRITE_LINE_MEMBER(csplayh5_state::csplayh5_vdp0_interrupt)
@@ -361,16 +357,12 @@ WRITE16_MEMBER(csplayh5_state::tmp68301_parallel_port_w)
void csplayh5_state::csplayh5(machine_config &config)
{
/* basic machine hardware */
- M68000(config, m_maincpu, 16000000); /* TMP68301-16 */
+ TMP68301(config, m_maincpu, 16000000); /* TMP68301-16 */
m_maincpu->set_addrmap(AS_PROGRAM, &csplayh5_state::csplayh5_map);
- m_maincpu->set_irq_acknowledge_callback("tmp68301", FUNC(tmp68301_device::irq_callback));
+ m_maincpu->out_parallel_callback().set(FUNC(csplayh5_state::tmp68301_parallel_port_w));
TIMER(config, "scantimer", 0).configure_scanline(timer_device::expired_delegate(FUNC(csplayh5_state::csplayh5_irq), this), "screen", 0, 1);
- TMP68301(config, m_tmp68301, 0);
- m_tmp68301->set_cputag(m_maincpu);
- m_tmp68301->out_parallel_callback().set(FUNC(csplayh5_state::tmp68301_parallel_port_w));
-
#if USE_H8
h830002_device &subcpu(H83002(config, "subcpu", DVD_CLOCK/2)); /* unknown divider */
subcpu.set_addrmap(AS_PROGRAM, &csplayh5_state::csplayh5_sub_map);
diff --git a/src/mame/drivers/cswat.cpp b/src/mame/drivers/cswat.cpp
index 2a9918b6ada..7052a3b98d3 100644
--- a/src/mame/drivers/cswat.cpp
+++ b/src/mame/drivers/cswat.cpp
@@ -257,30 +257,29 @@ void cswat_state::machine_start()
save_item(NAME(m_nmi_enabled));
}
-MACHINE_CONFIG_START(cswat_state::cswat)
-
+void cswat_state::cswat(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", MC6809E, XTAL(18'432'000)/3/4) // HD68A09EP, 1.5MHz?
- MCFG_DEVICE_PROGRAM_MAP(cswat_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cswat_state, irq0_line_assert)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(cswat_state, nmi_handler, 300) // ?
+ MC6809E(config, m_maincpu, XTAL(18'432'000)/3/4); // HD68A09EP, 1.5MHz?
+ m_maincpu->set_addrmap(AS_PROGRAM, &cswat_state::cswat_map);
+ m_maincpu->set_vblank_int("screen", FUNC(cswat_state::irq0_line_assert));
+ m_maincpu->set_periodic_int(FUNC(cswat_state::nmi_handler), attotime::from_hz(300)); // ?
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
- MCFG_SCREEN_SIZE(36*8, 28*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 0*8, 28*8-1)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_SCREEN_UPDATE_DRIVER(cswat_state, screen_update_cswat)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500));
+ screen.set_size(36*8, 28*8);
+ screen.set_visarea_full();
+ screen.set_palette("palette");
+ screen.set_screen_update(FUNC(cswat_state::screen_update_cswat));
GFXDECODE(config, "gfxdecode", "palette", gfx_cswat);
- MCFG_PALETTE_ADD("palette", 4*256)
+ PALETTE(config, "palette").set_entries(4*256);
/* sound hardware */
// TODO
-MACHINE_CONFIG_END
+}
/***************************************************************************
diff --git a/src/mame/drivers/ct486.cpp b/src/mame/drivers/ct486.cpp
index c9ed963917e..0cd1035ad38 100644
--- a/src/mame/drivers/ct486.cpp
+++ b/src/mame/drivers/ct486.cpp
@@ -110,11 +110,12 @@ void ct486_state::ct486_io(address_map &map)
// MACHINE DRIVERS
//**************************************************************************
-MACHINE_CONFIG_START(ct486_state::ct486)
- MCFG_DEVICE_ADD("maincpu", I486, XTAL(25'000'000))
- MCFG_DEVICE_PROGRAM_MAP(ct486_map)
- MCFG_DEVICE_IO_MAP(ct486_io)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("cs4031", cs4031_device, int_ack_r)
+void ct486_state::ct486(machine_config &config)
+{
+ I486(config, m_maincpu, XTAL(25'000'000));
+ m_maincpu->set_addrmap(AS_PROGRAM, &ct486_state::ct486_map);
+ m_maincpu->set_addrmap(AS_IO, &ct486_state::ct486_io);
+ m_maincpu->set_irq_acknowledge_callback("cs4031", FUNC(cs4031_device::int_ack_r));
CS4031(config, m_cs4031, XTAL(25'000'000), "maincpu", "isa", "bios", "keybc");
// cpu connections
@@ -166,29 +167,28 @@ MACHINE_CONFIG_START(ct486_state::ct486)
m_isabus->drq5_callback().set(m_cs4031, FUNC(cs4031_device::dreq5_w));
m_isabus->drq6_callback().set(m_cs4031, FUNC(cs4031_device::dreq6_w));
m_isabus->drq7_callback().set(m_cs4031, FUNC(cs4031_device::dreq7_w));
- MCFG_DEVICE_ADD("board1", ISA16_SLOT, 0, "isabus", pc_isa16_cards, "fdcsmc", true)
- MCFG_DEVICE_ADD("board2", ISA16_SLOT, 0, "isabus", pc_isa16_cards, "comat", true)
- MCFG_DEVICE_ADD("board3", ISA16_SLOT, 0, "isabus", pc_isa16_cards, "ide", true)
- MCFG_DEVICE_ADD("board4", ISA16_SLOT, 0, "isabus", pc_isa16_cards, "lpt", true)
- MCFG_DEVICE_ADD("isa1", ISA16_SLOT, 0, "isabus", pc_isa16_cards, "svga_et4k", false)
- MCFG_DEVICE_ADD("isa2", ISA16_SLOT, 0, "isabus", pc_isa16_cards, nullptr, false)
- MCFG_DEVICE_ADD("isa3", ISA16_SLOT, 0, "isabus", pc_isa16_cards, nullptr, false)
- MCFG_DEVICE_ADD("isa4", ISA16_SLOT, 0, "isabus", pc_isa16_cards, nullptr, false)
- MCFG_DEVICE_ADD("isa5", ISA16_SLOT, 0, "isabus", pc_isa16_cards, nullptr, false)
+ ISA16_SLOT(config, "board1", 0, "isabus", pc_isa16_cards, "fdcsmc", true);
+ ISA16_SLOT(config, "board2", 0, "isabus", pc_isa16_cards, "comat", true);
+ ISA16_SLOT(config, "board3", 0, "isabus", pc_isa16_cards, "ide", true);
+ ISA16_SLOT(config, "board4", 0, "isabus", pc_isa16_cards, "lpt", true);
+ ISA16_SLOT(config, "isa1", 0, "isabus", pc_isa16_cards, "svga_et4k", false);
+ ISA16_SLOT(config, "isa2", 0, "isabus", pc_isa16_cards, nullptr, false);
+ ISA16_SLOT(config, "isa3", 0, "isabus", pc_isa16_cards, nullptr, false);
+ ISA16_SLOT(config, "isa4", 0, "isabus", pc_isa16_cards, nullptr, false);
+ ISA16_SLOT(config, "isa5", 0, "isabus", pc_isa16_cards, nullptr, false);
// sound hardware
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+ SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.50);
// video hardware
- MCFG_PALETTE_ADD("palette", 256) // todo: really needed?
+ PALETTE(config, "palette").set_entries(256); // todo: really needed?
/* software lists */
SOFTWARE_LIST(config, "pc_disk_list").set_original("ibm5150");
SOFTWARE_LIST(config, "at_disk_list").set_original("ibm5170");
SOFTWARE_LIST(config, "at_cdrom_list").set_original("ibm5170_cdrom");
-MACHINE_CONFIG_END
+}
//**************************************************************************
diff --git a/src/mame/drivers/cubo.cpp b/src/mame/drivers/cubo.cpp
index 64a9790afe3..4d2df329d95 100644
--- a/src/mame/drivers/cubo.cpp
+++ b/src/mame/drivers/cubo.cpp
@@ -1030,11 +1030,11 @@ static INPUT_PORTS_START( mgprem11 )
INPUT_PORTS_END
-MACHINE_CONFIG_START(cubo_state::cubo)
-
+void cubo_state::cubo(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68EC020, amiga_state::CLK_28M_PAL / 2)
- MCFG_DEVICE_PROGRAM_MAP(cubo_mem)
+ M68EC020(config, m_maincpu, amiga_state::CLK_28M_PAL / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cubo_state::cubo_mem);
ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_2mb_map32).set_options(ENDIANNESS_BIG, 32, 22, 0x200000);
@@ -1050,9 +1050,8 @@ MACHINE_CONFIG_START(cubo_state::cubo)
// video hardware
pal_video(config);
- MCFG_DEVICE_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga)
- MCFG_SCREEN_NO_PALETTE
+ m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga));
+ m_screen->set_palette(finder_base::DUMMY_TAG);
MCFG_VIDEO_START_OVERRIDE(amiga_state, amiga_aga)
@@ -1068,9 +1067,9 @@ MACHINE_CONFIG_START(cubo_state::cubo)
paula.mem_read_cb().set(FUNC(amiga_state::chip_ram_r));
paula.int_cb().set(FUNC(amiga_state::paula_int_w));
- MCFG_DEVICE_ADD("cdda", CDDA)
- MCFG_SOUND_ROUTE(0, "lspeaker", 0.50)
- MCFG_SOUND_ROUTE(1, "rspeaker", 0.50)
+ CDDA(config, m_cdda);
+ m_cdda->add_route(0, "lspeaker", 0.50);
+ m_cdda->add_route(1, "rspeaker", 0.50);
/* cia */
// these are setup differently on other amiga drivers (needed for floppy to work) which is correct / why?
@@ -1093,7 +1092,7 @@ MACHINE_CONFIG_START(cubo_state::cubo)
m_fdc->write_dma_callback().set(FUNC(amiga_state::chip_ram_w));
m_fdc->dskblk_callback().set(FUNC(amiga_state::fdc_dskblk_w));
m_fdc->dsksyn_callback().set(FUNC(amiga_state::fdc_dsksyn_w));
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/cultures.cpp b/src/mame/drivers/cultures.cpp
index 1d9f7de846b..23e0fc58f67 100644
--- a/src/mame/drivers/cultures.cpp
+++ b/src/mame/drivers/cultures.cpp
@@ -404,37 +404,35 @@ void cultures_state::machine_reset()
-MACHINE_CONFIG_START(cultures_state::cultures)
-
+void cultures_state::cultures(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, MCLK/2) /* 8.000 MHz */
- MCFG_DEVICE_PROGRAM_MAP(cultures_map)
- MCFG_DEVICE_IO_MAP(cultures_io_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cultures_state, cultures_interrupt)
+ Z80(config, m_maincpu, MCLK/2); /* 8.000 MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &cultures_state::cultures_map);
+ m_maincpu->set_addrmap(AS_IO, &cultures_state::cultures_io_map);
+ m_maincpu->set_vblank_int("screen", FUNC(cultures_state::cultures_interrupt));
ADDRESS_MAP_BANK(config, "vrambank").set_map(&cultures_state::vrambank_map).set_options(ENDIANNESS_LITTLE, 8, 15, 0x4000);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 0*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(cultures_state, screen_update_cultures)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(0*8, 48*8-1, 0*8, 30*8-1);
+ screen.set_screen_update(FUNC(cultures_state::screen_update_cultures));
+ screen.set_palette("palette");
GFXDECODE(config, m_gfxdecode, "palette", gfx_cultures);
- MCFG_PALETTE_ADD("palette", 0x3000/2)
- MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB_bit0)
+ PALETTE(config, "palette").set_format(palette_device::xRGBRRRRGGGGBBBB_bit0, 0x3000/2);
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("oki", OKIM6295, MCLK/8, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
- MCFG_DEVICE_ADDRESS_MAP(0, oki_map)
-
-MACHINE_CONFIG_END
+ okim6295_device &oki(OKIM6295(config, "oki", MCLK/8, okim6295_device::PIN7_HIGH)); // clock frequency & pin 7 not verified
+ oki.add_route(ALL_OUTPUTS, "mono", 0.30);
+ oki.set_addrmap(0, &cultures_state::oki_map);
+}
/*
diff --git a/src/mame/drivers/cupidon.cpp b/src/mame/drivers/cupidon.cpp
index 96cdaf46259..d6c776f615b 100644
--- a/src/mame/drivers/cupidon.cpp
+++ b/src/mame/drivers/cupidon.cpp
@@ -103,24 +103,25 @@ static INPUT_PORTS_START( cupidon )
INPUT_PORTS_END
-MACHINE_CONFIG_START(cupidon_state::cupidon)
+void cupidon_state::cupidon(machine_config &config)
+{
M68340(config, m_maincpu, 16000000); // The access to 3FF00 at the start would suggest this is a 68340 so probably 16 or 25 mhz?
m_maincpu->set_addrmap(AS_PROGRAM, &cupidon_state::cupidon_map);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0*8, 32*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(cupidon_state, screen_update_cupidon)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(0*8, 64*8-1, 0*8, 32*8-1);
+ screen.set_screen_update(FUNC(cupidon_state::screen_update_cupidon));
+ screen.set_palette("palette");
- MCFG_PALETTE_ADD("palette", 0x10000)
+ PALETTE(config, "palette").set_entries(0x10000);
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
/* unknown sound, probably DAC driven using 68340 DMA */
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/cvicny.cpp b/src/mame/drivers/cvicny.cpp
index 12a03f7ee71..7d5dca51587 100644
--- a/src/mame/drivers/cvicny.cpp
+++ b/src/mame/drivers/cvicny.cpp
@@ -135,14 +135,15 @@ static INPUT_PORTS_START( cvicny )
INPUT_PORTS_END
-MACHINE_CONFIG_START(cvicny_state::cvicny)
+void cvicny_state::cvicny(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu",Z80, XTAL(2'000'000))
- MCFG_DEVICE_PROGRAM_MAP(cvicny_mem)
+ Z80(config, m_maincpu, XTAL(2'000'000));
+ m_maincpu->set_addrmap(AS_PROGRAM, &cvicny_state::cvicny_mem);
/* video hardware */
config.set_default_layout(layout_cvicny);
-MACHINE_CONFIG_END
+}
/* ROM definition */
ROM_START( cvicny )
diff --git a/src/mame/drivers/cvs.cpp b/src/mame/drivers/cvs.cpp
index 66c87ae485f..f5b527639a0 100644
--- a/src/mame/drivers/cvs.cpp
+++ b/src/mame/drivers/cvs.cpp
@@ -376,7 +376,7 @@ READ8_MEMBER(cvs_state::cvs_speech_command_r)
{
/* FIXME: this was by observation on board ???
* -bit 7 is TMS status (active LO) */
- return ((m_tms5110->ctl_r(space, 0) ^ 1) << 7) | (m_soundlatch->read(space, 0) & 0x7f);
+ return ((m_tms5110->ctl_r(space, 0) ^ 1) << 7) | (m_soundlatch->read() & 0x7f);
}
@@ -432,7 +432,7 @@ WRITE8_MEMBER(cvs_state::audio_command_w)
{
LOG(("data %02x\n", data));
/* cause interrupt on audio CPU if bit 7 set */
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
cvs_slave_cpu_interrupt(data & 0x80 ? 1 : 0);
}
diff --git a/src/mame/drivers/cxhumax.cpp b/src/mame/drivers/cxhumax.cpp
index c256cc23952..3f990dd8a32 100644
--- a/src/mame/drivers/cxhumax.cpp
+++ b/src/mame/drivers/cxhumax.cpp
@@ -1055,26 +1055,27 @@ void cxhumax_state::machine_reset()
memset(m_gxa_cmd_regs,0,sizeof(m_gxa_cmd_regs));
}
-MACHINE_CONFIG_START(cxhumax_state::cxhumax)
- MCFG_DEVICE_ADD("maincpu", ARM920T, 180000000) // CX24175 (RevC up?)
- MCFG_DEVICE_PROGRAM_MAP(cxhumax_map)
+void cxhumax_state::cxhumax(machine_config &config)
+{
+ ARM920T(config, m_maincpu, 180000000); // CX24175 (RevC up?)
+ m_maincpu->set_addrmap(AS_PROGRAM, &cxhumax_state::cxhumax_map);
INTEL_28F320J3D(config, "flash");
I2CMEM(config, "eeprom", 0).set_data_size(0x2000);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(1920, 1080)
- MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 1080-1)
- MCFG_SCREEN_UPDATE_DRIVER(cxhumax_state, screen_update_cxhumax)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_size(1920, 1080);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(cxhumax_state::screen_update_cxhumax));
PALETTE(config, "palette", palette_device::MONOCHROME);
GENERIC_TERMINAL(config, m_terminal, 0);
-MACHINE_CONFIG_END
+}
ROM_START( hxhdci2k )
ROM_REGION( 0x400000, "flash", 0 )
diff --git a/src/mame/drivers/cyberbal.cpp b/src/mame/drivers/cyberbal.cpp
index 120ab37491d..dc1bb096aa3 100644
--- a/src/mame/drivers/cyberbal.cpp
+++ b/src/mame/drivers/cyberbal.cpp
@@ -487,11 +487,11 @@ void cyberbal_state::cyberbalt(machine_config &config)
SLAPSTIC(config, "slapstic", 116, true);
}
-MACHINE_CONFIG_START(cyberbal2p_state::cyberbal2p)
-
+void cyberbal2p_state::cyberbal2p(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, ATARI_CLOCK_14MHz/2)
- MCFG_DEVICE_PROGRAM_MAP(cyberbal2p_map)
+ M68000(config, m_maincpu, ATARI_CLOCK_14MHz/2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cyberbal2p_state::cyberbal2p_map);
EEPROM_2816(config, "eeprom").lock_after_write(true);
@@ -509,14 +509,14 @@ MACHINE_CONFIG_START(cyberbal2p_state::cyberbal2p)
m_mob->set_config(cyberbal2p_state::s_mob_config);
m_mob->set_gfxdecode("gfxdecode");
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
/* note: these parameters are from published specs, not derived */
/* the board uses an SOS-2 chip to generate video signals */
- MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz, 456*2, 0, 336*2, 262, 0, 240)
- MCFG_SCREEN_UPDATE_DRIVER(cyberbal2p_state, screen_update_cyberbal2p)
- MCFG_SCREEN_PALETTE("palette")
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cyberbal2p_state, video_int_write_line))
+ m_screen->set_raw(ATARI_CLOCK_14MHz, 456*2, 0, 336*2, 262, 0, 240);
+ m_screen->set_screen_update(FUNC(cyberbal2p_state::screen_update_cyberbal2p));
+ m_screen->set_palette("palette");
+ m_screen->screen_vblank().set(FUNC(cyberbal2p_state::video_int_write_line));
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -525,7 +525,7 @@ MACHINE_CONFIG_START(cyberbal2p_state::cyberbal2p)
m_jsa->main_int_cb().set_inputline(m_maincpu, M68K_IRQ_3);
m_jsa->test_read_cb().set_ioport("IN2").bit(15);
m_jsa->add_route(ALL_OUTPUTS, "mono", 1.0);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/cybertnk.cpp b/src/mame/drivers/cybertnk.cpp
index bbdc9169587..fa85d13f0d3 100644
--- a/src/mame/drivers/cybertnk.cpp
+++ b/src/mame/drivers/cybertnk.cpp
@@ -513,7 +513,7 @@ WRITE8_MEMBER( cybertnk_state::sound_cmd_w )
}
else if (offset == 1)
{
- m_soundlatch->write(space, offset, data & 0xff);
+ m_soundlatch->write(data & 0xff);
}
}
@@ -819,38 +819,39 @@ GFXDECODE_END
*/
-MACHINE_CONFIG_START(cybertnk_state::cybertnk)
- MCFG_DEVICE_ADD("maincpu", M68000,XTAL(20'000'000)/2)
- MCFG_DEVICE_PROGRAM_MAP(master_mem)
- MCFG_DEVICE_VBLANK_INT_DRIVER("lscreen", cybertnk_state, irq1_line_assert)
+void cybertnk_state::cybertnk(machine_config &config)
+{
+ M68000(config, m_maincpu, XTAL(20'000'000)/2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cybertnk_state::master_mem);
+ m_maincpu->set_vblank_int("lscreen", FUNC(cybertnk_state::irq1_line_assert));
- MCFG_DEVICE_ADD("slave", M68000,XTAL(20'000'000)/2)
- MCFG_DEVICE_PROGRAM_MAP(slave_mem)
- MCFG_DEVICE_VBLANK_INT_DRIVER("lscreen", cybertnk_state, irq3_line_hold)
+ m68000_device &slave(M68000(config, "slave", XTAL(20'000'000)/2));
+ slave.set_addrmap(AS_PROGRAM, &cybertnk_state::slave_mem);
+ slave.set_vblank_int("lscreen", FUNC(cybertnk_state::irq3_line_hold));
- MCFG_DEVICE_ADD("audiocpu", Z80,XTAL(3'579'545))
- MCFG_DEVICE_PROGRAM_MAP(sound_mem)
+ Z80(config, m_audiocpu, XTAL(3'579'545));
+ m_audiocpu->set_addrmap(AS_PROGRAM, &cybertnk_state::sound_mem);
config.m_minimum_quantum = attotime::from_hz(60000); //arbitrary value, needed to get the communication to work
/* video hardware */
config.set_default_layout(layout_dualhsxs);
- MCFG_SCREEN_ADD("lscreen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 28*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(cybertnk_state, screen_update_cybertnk_left)
- MCFG_SCREEN_PALETTE(m_palette)
-
- MCFG_SCREEN_ADD("rscreen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 28*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(cybertnk_state, screen_update_cybertnk_right)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &lscreen(SCREEN(config, "lscreen", SCREEN_TYPE_RASTER));
+ lscreen.set_refresh_hz(60);
+ lscreen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ lscreen.set_size(32*8, 32*8);
+ lscreen.set_visarea(0*8, 32*8-1, 0*8, 28*8-1);
+ lscreen.set_screen_update(FUNC(cybertnk_state::screen_update_cybertnk_left));
+ lscreen.set_palette(m_palette);
+
+ screen_device &rscreen(SCREEN(config, "rscreen", SCREEN_TYPE_RASTER));
+ rscreen.set_refresh_hz(60);
+ rscreen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ rscreen.set_size(32*8, 32*8);
+ rscreen.set_visarea(0*8, 32*8-1, 0*8, 28*8-1);
+ rscreen.set_screen_update(FUNC(cybertnk_state::screen_update_cybertnk_right));
+ rscreen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_cybertnk);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 0x4000);
@@ -862,13 +863,11 @@ MACHINE_CONFIG_START(cybertnk_state::cybertnk)
GENERIC_LATCH_8(config, m_soundlatch);
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, 0, HOLD_LINE);
- // Splited output per chip
- MCFG_DEVICE_ADD("ym1", Y8950, XTAL(3'579'545))
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
+ // Split output per chip
+ Y8950(config, "ym1", XTAL(3'579'545)).add_route(ALL_OUTPUTS, "lspeaker", 1.0);
- MCFG_DEVICE_ADD("ym2", Y8950, XTAL(3'579'545))
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
-MACHINE_CONFIG_END
+ Y8950(config, "ym2", XTAL(3'579'545)).add_route(ALL_OUTPUTS, "rspeaker", 1.0);
+}
/***************************************************************************
diff --git a/src/mame/drivers/cybstorm.cpp b/src/mame/drivers/cybstorm.cpp
index ebf8d211bfc..17ec3230508 100644
--- a/src/mame/drivers/cybstorm.cpp
+++ b/src/mame/drivers/cybstorm.cpp
@@ -222,11 +222,11 @@ GFXDECODE_END
*
*************************************/
-MACHINE_CONFIG_START(cybstorm_state::round2)
-
+void cybstorm_state::round2(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68EC020, ATARI_CLOCK_14MHz)
- MCFG_DEVICE_PROGRAM_MAP(main_map)
+ M68EC020(config, m_maincpu, ATARI_CLOCK_14MHz);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cybstorm_state::main_map);
EEPROM_2816(config, "eeprom").lock_after_write(true);
@@ -245,15 +245,14 @@ MACHINE_CONFIG_START(cybstorm_state::round2)
GFXDECODE(config, m_gfxdecode, "palette", gfx_cybstorm);
PALETTE(config, "palette").set_format(palette_device::IRGB_1555, 32768);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_PALETTE("palette")
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_palette("palette");
+ m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
/* note: these parameters are from published specs, not derived */
/* the board uses an SOS-2 chip to generate video signals */
- MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240)
-
- MCFG_SCREEN_UPDATE_DRIVER(cybstorm_state, screen_update_cybstorm)
-MACHINE_CONFIG_END
+ m_screen->set_raw(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240);
+ m_screen->set_screen_update(FUNC(cybstorm_state::screen_update_cybstorm));
+}
void cybstorm_state::cybstorm(machine_config &config)
diff --git a/src/mame/drivers/cyclemb.cpp b/src/mame/drivers/cyclemb.cpp
index a41c93dca08..7c5e4a10c77 100644
--- a/src/mame/drivers/cyclemb.cpp
+++ b/src/mame/drivers/cyclemb.cpp
@@ -404,7 +404,7 @@ WRITE8_MEMBER(cyclemb_state::cyclemb_bankswitch_w)
#if 0
WRITE8_MEMBER(cyclemb_state::sound_cmd_w)
{
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
#endif
@@ -418,7 +418,7 @@ READ8_MEMBER(cyclemb_state::mcu_status_r)
WRITE8_MEMBER(cyclemb_state::sound_cmd_w)//actually ciom
{
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
#endif
@@ -561,7 +561,7 @@ WRITE8_MEMBER( cyclemb_state::skydest_i8741_0_w )
m_mcu[0].txd = data;
m_mcu[1].rst = 0;
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
if(m_mcu[0].txd == 0x41)
m_mcu[0].state = 1;
@@ -627,7 +627,7 @@ READ8_MEMBER(cyclemb_state::skydest_i8741_1_r)
if(m_mcu[1].rst == 1)
return 0x40;
- return m_soundlatch->read(space,0);
+ return m_soundlatch->read();
}
WRITE8_MEMBER(cyclemb_state::skydest_i8741_1_w)
@@ -639,7 +639,7 @@ WRITE8_MEMBER(cyclemb_state::skydest_i8741_1_w)
m_mcu[1].rst = 1;
}
//else
- // m_soundlatch->clear_w(space, 0, 0);
+ // m_soundlatch->clear_w();
}
@@ -976,26 +976,27 @@ static GFXDECODE_START( gfx_cyclemb )
GFXDECODE_ENTRY( "sprite_data", 0, spritelayout_32x32, 0x00, 0x40 )
GFXDECODE_END
-MACHINE_CONFIG_START(cyclemb_state::cyclemb)
+void cyclemb_state::cyclemb(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, XTAL(18'000'000)/3) // Z8400BPS
- MCFG_DEVICE_PROGRAM_MAP(cyclemb_map)
- MCFG_DEVICE_IO_MAP(cyclemb_io)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cyclemb_state, irq0_line_hold)
+ Z80(config, m_maincpu, XTAL(18'000'000)/3); // Z8400BPS
+ m_maincpu->set_addrmap(AS_PROGRAM, &cyclemb_state::cyclemb_map);
+ m_maincpu->set_addrmap(AS_IO, &cyclemb_state::cyclemb_io);
+ m_maincpu->set_vblank_int("screen", FUNC(cyclemb_state::irq0_line_hold));
- MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(18'000'000)/6)
- MCFG_DEVICE_PROGRAM_MAP(cyclemb_sound_map)
- MCFG_DEVICE_IO_MAP(cyclemb_sound_io)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(cyclemb_state, irq0_line_hold, 60)
+ Z80(config, m_audiocpu, XTAL(18'000'000)/6);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &cyclemb_state::cyclemb_sound_map);
+ m_audiocpu->set_addrmap(AS_IO, &cyclemb_state::cyclemb_sound_io);
+ m_audiocpu->set_periodic_int(FUNC(cyclemb_state::irq0_line_hold), attotime::from_hz(60));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(cyclemb_state, screen_update_cyclemb)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ 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);
+ screen.set_screen_update(FUNC(cyclemb_state::screen_update_cyclemb));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_cyclemb);
PALETTE(config, m_palette, FUNC(cyclemb_state::cyclemb_palette), 256);
@@ -1010,20 +1011,20 @@ MACHINE_CONFIG_START(cyclemb_state::cyclemb)
// ymsnd.irq_handler().set(FUNC(cyclemb_state::ym_irq));
// ymsnd.port_b_read_callback().set_ioport("UNK");
ymsnd.add_route(ALL_OUTPUTS, "mono", 0.50);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(cyclemb_state::skydest)
+void cyclemb_state::skydest(machine_config &config)
+{
cyclemb(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_IO_MAP(skydest_io)
+ m_maincpu->set_addrmap(AS_IO, &cyclemb_state::skydest_io);
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(2*8, 34*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(cyclemb_state, screen_update_skydest)
+ screen_device &screen(*subdevice<screen_device>("screen"));
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(2*8, 34*8-1, 2*8, 30*8-1);
+ screen.set_screen_update(FUNC(cyclemb_state::screen_update_skydest));
-// MCFG_PALETTE_INIT_OWNER(cyclemb_state,skydest)
-MACHINE_CONFIG_END
+// m_palette->set_init(FUNC(cyclemb_state::skydest));
+}
/***************************************************************************
diff --git a/src/mame/drivers/cz101.cpp b/src/mame/drivers/cz101.cpp
index 8c4de1be0fd..3ece028eed4 100644
--- a/src/mame/drivers/cz101.cpp
+++ b/src/mame/drivers/cz101.cpp
@@ -381,7 +381,8 @@ void cz101_state::machine_reset()
// MACHINE DEFINTIONS
//**************************************************************************
-MACHINE_CONFIG_START( cz101_state::cz101 )
+void cz101_state::cz101(machine_config &config)
+{
UPD7810(config, m_maincpu, 10_MHz_XTAL); // actually 7811, but internal ROM disabled
m_maincpu->set_addrmap(AS_PROGRAM, &cz101_state::maincpu_map);
m_maincpu->pa_in_cb().set(FUNC(cz101_state::port_a_r));
@@ -392,13 +393,13 @@ MACHINE_CONFIG_START( cz101_state::cz101 )
CLOCK(config, "midi_clock", 2_MHz_XTAL)/*.signal_handler().set(m_maincpu, FUNC(upd7810_device::sck_w))*/; // not supported yet
// video hardware
- MCFG_SCREEN_ADD("screen", LCD)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(6*16+1, 19)
- MCFG_SCREEN_VISIBLE_AREA(0, 6*16, 0, 19-1)
- MCFG_SCREEN_UPDATE_DEVICE("hd44780", hd44780_device, screen_update)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_size(6*16+1, 19);
+ screen.set_visarea_full();
+ screen.set_screen_update("hd44780", FUNC(hd44780_device::screen_update));
+ screen.set_palette("palette");
PALETTE(config, "palette", FUNC(cz101_state::cz101_palette), 3);
@@ -407,7 +408,7 @@ MACHINE_CONFIG_START( cz101_state::cz101 )
m_hd44780->set_pixel_update_cb(FUNC(cz101_state::lcd_pixel_update), this);
config.set_default_layout(layout_cz101);
-MACHINE_CONFIG_END
+}
//**************************************************************************
diff --git a/src/mame/drivers/d6800.cpp b/src/mame/drivers/d6800.cpp
index 005868fdd12..fac7892b7b5 100644
--- a/src/mame/drivers/d6800.cpp
+++ b/src/mame/drivers/d6800.cpp
@@ -408,17 +408,17 @@ QUICKLOAD_LOAD_MEMBER( d6800_state, d6800 )
MACHINE_CONFIG_START(d6800_state::d6800)
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu",M6800, XTAL(4'000'000)/4)
- MCFG_DEVICE_PROGRAM_MAP(d6800_map)
+ M6800(config, m_maincpu, XTAL(4'000'000)/4);
+ m_maincpu->set_addrmap(AS_PROGRAM, &d6800_state::d6800_map);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_SIZE(64, 32)
- MCFG_SCREEN_VISIBLE_AREA(0, 63, 0, 31)
- MCFG_SCREEN_UPDATE_DRIVER(d6800_state, screen_update_d6800)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(25))
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(50);
+ screen.set_size(64, 32);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(d6800_state::screen_update_d6800));
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(25));
+ screen.set_palette("palette");
PALETTE(config, "palette", palette_device::MONOCHROME);
diff --git a/src/mame/drivers/d9final.cpp b/src/mame/drivers/d9final.cpp
index c91d37e472a..7590a51ce4b 100644
--- a/src/mame/drivers/d9final.cpp
+++ b/src/mame/drivers/d9final.cpp
@@ -302,37 +302,36 @@ void d9final_state::machine_start()
membank("bank1")->set_entry(0);
}
-MACHINE_CONFIG_START(d9final_state::d9final)
+void d9final_state::d9final(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 24000000/4)/* ? MHz */
- MCFG_DEVICE_PROGRAM_MAP(d9final_map)
- MCFG_DEVICE_IO_MAP(d9final_io)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", d9final_state, irq0_line_hold)
+ Z80(config, m_maincpu, 24000000/4); /* ? MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &d9final_state::d9final_map);
+ m_maincpu->set_addrmap(AS_IO, &d9final_state::d9final_io);
+ m_maincpu->set_vblank_int("screen", FUNC(d9final_state::irq0_line_hold));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // Sharp LH5116D-10 + battery
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(512, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 16, 256-16-1)
- MCFG_SCREEN_UPDATE_DRIVER(d9final_state, screen_update)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(512, 256);
+ screen.set_visarea(0, 512-1, 16, 256-16-1);
+ screen.set_screen_update(FUNC(d9final_state::screen_update));
+ screen.set_palette("palette");
GFXDECODE(config, m_gfxdecode, "palette", gfx_d9final);
PALETTE(config, "palette", palette_device::BLACK).set_format(palette_device::xBRG_444, 0x400);
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("ymsnd", YM2413, XTAL(3'579'545))
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5)
+ YM2413(config, "ymsnd", XTAL(3'579'545)).add_route(ALL_OUTPUTS, "mono", 0.5);
- //MCFG_DEVICE_ADD("essnd", ES8712, 24000000/3) // clock unknown
- //MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ //ES8712(config, "essnd", 24000000/3).add_route(ALL_OUTPUTS, "mono", 1.0); // clock unknown
RTC62421(config, "rtc", XTAL(32'768)); // internal oscillator
-MACHINE_CONFIG_END
+}
ROM_START( d9final )
diff --git a/src/mame/drivers/dai.cpp b/src/mame/drivers/dai.cpp
index e06e90ba308..9791381e4c0 100644
--- a/src/mame/drivers/dai.cpp
+++ b/src/mame/drivers/dai.cpp
@@ -187,12 +187,13 @@ static GFXDECODE_START( gfx_dai )
GFXDECODE_END
/* machine definition */
-MACHINE_CONFIG_START(dai_state::dai)
+void dai_state::dai(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", I8080, 2000000)
- MCFG_DEVICE_PROGRAM_MAP(dai_mem)
- MCFG_DEVICE_IO_MAP(dai_io)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(dai_state,int_ack)
+ I8080(config, m_maincpu, 2000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &dai_state::dai_mem);
+ m_maincpu->set_addrmap(AS_IO, &dai_state::dai_io);
+ m_maincpu->set_irq_acknowledge_callback(FUNC(dai_state::int_ack));
config.m_minimum_quantum = attotime::from_hz(60);
PIT8253(config, m_pit, 0);
@@ -206,13 +207,13 @@ MACHINE_CONFIG_START(dai_state::dai)
I8255(config, "ppi8255");
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(1056, 542)
- MCFG_SCREEN_VISIBLE_AREA(0, 1056-1, 0, 302-1)
- MCFG_SCREEN_UPDATE_DRIVER(dai_state, screen_update_dai)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_size(1056, 542);
+ screen.set_visarea(0, 1056-1, 0, 302-1);
+ screen.set_screen_update(FUNC(dai_state::screen_update_dai));
+ screen.set_palette(m_palette);
GFXDECODE(config, "gfxdecode", m_palette, gfx_dai);
PALETTE(config, m_palette, FUNC(dai_state::dai_palette), ARRAY_LENGTH(s_palette));
@@ -241,7 +242,7 @@ MACHINE_CONFIG_START(dai_state::dai)
/* software lists */
SOFTWARE_LIST(config, "cass_list").set_original("dai_cass");
-MACHINE_CONFIG_END
+}
ROM_START(dai)
diff --git a/src/mame/drivers/dambustr.cpp b/src/mame/drivers/dambustr.cpp
index 42b6fdc1f75..9c185d0b378 100644
--- a/src/mame/drivers/dambustr.cpp
+++ b/src/mame/drivers/dambustr.cpp
@@ -261,10 +261,11 @@ void dambustr_state::init_dambustr()
-MACHINE_CONFIG_START(dambustr_state::dambustr)
+void dambustr_state::dambustr(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 18432000/6) /* 3.072 MHz */
- MCFG_DEVICE_PROGRAM_MAP(dambustr_map)
+ Z80(config, m_maincpu, 18432000/6); /* 3.072 MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &dambustr_state::dambustr_map);
MCFG_MACHINE_RESET_OVERRIDE(dambustr_state,galaxold)
@@ -276,12 +277,12 @@ MACHINE_CONFIG_START(dambustr_state::dambustr)
WATCHDOG_TIMER(config, "watchdog");
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(16000.0/132/2)
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(dambustr_state, screen_update_dambustr)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(16000.0/132/2);
+ m_screen->set_size(32*8, 32*8);
+ m_screen->set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
+ m_screen->set_screen_update(FUNC(dambustr_state::screen_update_dambustr));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_dambustr);
PALETTE(config, m_palette, FUNC(dambustr_state::dambustr_palette), 32+2+64+8); // 32 for the characters, 2 for the bullets, 64 for the stars, 8 for the background
@@ -292,7 +293,7 @@ MACHINE_CONFIG_START(dambustr_state::dambustr)
SPEAKER(config, "speaker").front_center();
galaxian_audio(config);
-MACHINE_CONFIG_END
+}
ROM_START( dambustr )
diff --git a/src/mame/drivers/darkmist.cpp b/src/mame/drivers/darkmist.cpp
index 36306862d63..58cd566b3e6 100644
--- a/src/mame/drivers/darkmist.cpp
+++ b/src/mame/drivers/darkmist.cpp
@@ -239,23 +239,24 @@ TIMER_DEVICE_CALLBACK_MEMBER(darkmist_state::scanline)
-MACHINE_CONFIG_START(darkmist_state::darkmist)
+void darkmist_state::darkmist(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80,4000000) /* ? MHz */
- MCFG_DEVICE_PROGRAM_MAP(memmap)
- MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map)
+ Z80(config, m_maincpu, 4000000); /* ? MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &darkmist_state::memmap);
+ m_maincpu->set_addrmap(AS_OPCODES, &darkmist_state::decrypted_opcodes_map);
TIMER(config, "scantimer").configure_scanline(FUNC(darkmist_state::scanline), "screen", 0, 1);
- MCFG_DEVICE_ADD("t5182", T5182, 0)
+ T5182(config, m_t5182, 0);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(256, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 256-16-1)
- MCFG_SCREEN_UPDATE_DRIVER(darkmist_state, screen_update)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ m_screen->set_size(256, 256);
+ m_screen->set_visarea(0, 256-1, 16, 256-16-1);
+ m_screen->set_screen_update(FUNC(darkmist_state::screen_update));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_darkmist);
PALETTE(config, m_palette, FUNC(darkmist_state::darkmist_palette));
@@ -269,7 +270,7 @@ MACHINE_CONFIG_START(darkmist_state::darkmist)
ymsnd.irq_handler().set(m_t5182, FUNC(t5182_device::ym2151_irq_handler));
ymsnd.add_route(0, "mono", 1.0);
ymsnd.add_route(1, "mono", 1.0);
-MACHINE_CONFIG_END
+}
ROM_START( darkmist )
ROM_REGION( 0x18000, "maincpu", 0 )
diff --git a/src/mame/drivers/darkseal.cpp b/src/mame/drivers/darkseal.cpp
index 836a9e017b0..d812725b8cd 100644
--- a/src/mame/drivers/darkseal.cpp
+++ b/src/mame/drivers/darkseal.cpp
@@ -201,33 +201,32 @@ GFXDECODE_END
/******************************************************************************/
-MACHINE_CONFIG_START(darkseal_state::darkseal)
-
+void darkseal_state::darkseal(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD(m_maincpu, M68000, XTAL(24'000'000)/2) /* Custom chip 59 */
- MCFG_DEVICE_PROGRAM_MAP(darkseal_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", darkseal_state, irq6_line_assert)/* VBL */
+ M68000(config, m_maincpu, XTAL(24'000'000)/2); /* Custom chip 59 */
+ m_maincpu->set_addrmap(AS_PROGRAM, &darkseal_state::darkseal_map);
+ m_maincpu->set_vblank_int("screen", FUNC(darkseal_state::irq6_line_assert)); /* VBL */
H6280(config, m_audiocpu, XTAL(32'220'000)/4); /* Custom chip 45, Audio section crystal is 32.220 MHz */
m_audiocpu->set_addrmap(AS_PROGRAM, &darkseal_state::sound_map);
m_audiocpu->add_route(ALL_OUTPUTS, "mono", 0); // internal sound unused
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(58)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(darkseal_state, screen_update)
- MCFG_SCREEN_PALETTE("colors")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(58);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(529));
+ screen.set_size(32*8, 32*8);
+ screen.set_visarea(0*8, 32*8-1, 1*8, 31*8-1);
+ screen.set_screen_update(FUNC(darkseal_state::screen_update));
+ screen.set_palette(m_palette);
GFXDECODE(config, "gfxdecode", m_palette, gfx_darkseal);
- MCFG_PALETTE_ADD(m_palette, 2048)
+ PALETTE(config, m_palette).set_entries(2048);
- MCFG_DEVICE_ADD(m_spriteram, BUFFERED_SPRITERAM16)
+ BUFFERED_SPRITERAM16(config, m_spriteram);
DECO16IC(config, m_deco_tilegen[0], 0);
- m_deco_tilegen[0]->set_split(0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x64);
m_deco_tilegen[0]->set_pf2_size(DECO_64x64); // both these tilemaps need to be twice the y size of usual!
m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
@@ -241,7 +240,6 @@ MACHINE_CONFIG_START(darkseal_state::darkseal)
m_deco_tilegen[0]->set_gfxdecode_tag("gfxdecode");
DECO16IC(config, m_deco_tilegen[1], 0);
- m_deco_tilegen[1]->set_split(0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
@@ -264,20 +262,17 @@ MACHINE_CONFIG_START(darkseal_state::darkseal)
GENERIC_LATCH_8(config, m_soundlatch);
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, 0);
- MCFG_DEVICE_ADD("ym1", YM2203, XTAL(32'220'000)/8)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.45)
+ YM2203(config, "ym1", XTAL(32'220'000)/8).add_route(ALL_OUTPUTS, "mono", 0.45);
ym2151_device &ym2(YM2151(config, "ym2", XTAL(32'220'000)/9));
ym2.irq_handler().set_inputline(m_audiocpu, 1); // IRQ2
ym2.add_route(0, "mono", 0.55);
ym2.add_route(1, "mono", 0.55);
- MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'220'000)/32, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ OKIM6295(config, "oki1", XTAL(32'220'000)/32, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0);
- MCFG_DEVICE_ADD("oki2", OKIM6295, XTAL(32'220'000)/16, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
-MACHINE_CONFIG_END
+ OKIM6295(config, "oki2", XTAL(32'220'000)/16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.60);
+}
/******************************************************************************/
diff --git a/src/mame/drivers/daruma.cpp b/src/mame/drivers/daruma.cpp
index 2a4946ba9fb..1ac8fd665f1 100644
--- a/src/mame/drivers/daruma.cpp
+++ b/src/mame/drivers/daruma.cpp
@@ -118,17 +118,17 @@ static INPUT_PORTS_START( daruma )
INPUT_PORTS_END
-MACHINE_CONFIG_START(daruma_state::daruma)
+void daruma_state::daruma(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", I80C32,11059200) //verified on pcb
- MCFG_DEVICE_PROGRAM_MAP(mem_prg)
- MCFG_DEVICE_IO_MAP(mem_io)
+ I80C32(config, m_maincpu, 11059200); //verified on pcb
+ m_maincpu->set_addrmap(AS_PROGRAM, &daruma_state::mem_prg);
+ m_maincpu->set_addrmap(AS_IO, &daruma_state::mem_io);
// TODO: ports
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND)
- MCFG_SOUND_ROUTE(0, "mono", 1.00)
+ SPEAKER_SOUND(config, m_speaker).add_route(0, "mono", 1.00);
/* TODO:
config.set_default_layout(layout_daruma);
@@ -136,9 +136,9 @@ MACHINE_CONFIG_START(daruma_state::daruma)
Motors: MTA011
http://pdf.datasheetcatalog.com/datasheet/Shindengen/mXstzvq.pdf
- The motor controller suposedly is used to cut the paper strip out after finishing printing something.
+ The motor controller supposedly is used to cut the paper strip out after finishing printing something.
*/
-MACHINE_CONFIG_END
+}
ROM_START( ds348 )
ROM_REGION( 0x10000, "maincpu", 0 )
diff --git a/src/mame/drivers/dassault.cpp b/src/mame/drivers/dassault.cpp
index 6addb4cf626..6dac523c34a 100644
--- a/src/mame/drivers/dassault.cpp
+++ b/src/mame/drivers/dassault.cpp
@@ -522,16 +522,16 @@ void dassault_state::machine_reset()
m_priority = 0;
}
-MACHINE_CONFIG_START(dassault_state::dassault)
-
+void dassault_state::dassault(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(28'000'000)/2) /* 14MHz - Accurate */
- MCFG_DEVICE_PROGRAM_MAP(dassault_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dassault_state, irq4_line_assert)
+ M68000(config, m_maincpu, XTAL(28'000'000)/2); /* 14MHz - Accurate */
+ m_maincpu->set_addrmap(AS_PROGRAM, &dassault_state::dassault_map);
+ m_maincpu->set_vblank_int("screen", FUNC(dassault_state::irq4_line_assert));
- MCFG_DEVICE_ADD("sub", M68000, XTAL(28'000'000)/2) /* 14MHz - Accurate */
- MCFG_DEVICE_PROGRAM_MAP(dassault_sub_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dassault_state, irq5_line_assert)
+ M68000(config, m_subcpu, XTAL(28'000'000)/2); /* 14MHz - Accurate */
+ m_subcpu->set_addrmap(AS_PROGRAM, &dassault_state::dassault_sub_map);
+ m_subcpu->set_vblank_int("screen", FUNC(dassault_state::irq5_line_assert));
H6280(config, m_audiocpu, XTAL(32'220'000)/8); /* Accurate */
m_audiocpu->set_addrmap(AS_PROGRAM, &dassault_state::sound_map);
@@ -546,18 +546,17 @@ MACHINE_CONFIG_START(dassault_state::dassault)
sharedram.intr_callback().set_inputline("sub", M68K_IRQ_6);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(28'000'000) / 4, 442, 0, 320, 274, 8, 248) // same as robocop2(cninja.cpp)? verify this from real pcb.
- MCFG_SCREEN_UPDATE_DRIVER(dassault_state, screen_update_dassault)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(28'000'000) / 4, 442, 0, 320, 274, 8, 248); // same as robocop2(cninja.cpp)? verify this from real pcb.
+ screen.set_screen_update(FUNC(dassault_state::screen_update_dassault));
GFXDECODE(config, "gfxdecode", m_palette, gfx_dassault);
PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 4096);
- MCFG_DEVICE_ADD("spriteram1", BUFFERED_SPRITERAM16)
- MCFG_DEVICE_ADD("spriteram2", BUFFERED_SPRITERAM16)
+ BUFFERED_SPRITERAM16(config, m_spriteram[0]);
+ BUFFERED_SPRITERAM16(config, m_spriteram[1]);
DECO16IC(config, m_deco_tilegen[0], 0);
- m_deco_tilegen[0]->set_split(0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
@@ -573,7 +572,6 @@ MACHINE_CONFIG_START(dassault_state::dassault)
m_deco_tilegen[0]->set_gfxdecode_tag("gfxdecode");
DECO16IC(config, m_deco_tilegen[1], 0);
- m_deco_tilegen[1]->set_split(0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
@@ -603,9 +601,9 @@ MACHINE_CONFIG_START(dassault_state::dassault)
GENERIC_LATCH_8(config, m_soundlatch);
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, 0); // IRQ1
- MCFG_DEVICE_ADD("ym1", YM2203, XTAL(32'220'000)/8)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.40)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40)
+ ym2203_device &ym1(YM2203(config, "ym1", XTAL(32'220'000)/8));
+ ym1.add_route(ALL_OUTPUTS, "lspeaker", 0.40);
+ ym1.add_route(ALL_OUTPUTS, "rspeaker", 0.40);
ym2151_device &ym2(YM2151(config, "ym2", XTAL(32'220'000)/9));
ym2.irq_handler().set_inputline(m_audiocpu, 1);
@@ -613,14 +611,14 @@ MACHINE_CONFIG_START(dassault_state::dassault)
ym2.add_route(0, "lspeaker", 0.45);
ym2.add_route(1, "rspeaker", 0.45);
- MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'220'000)/32, okim6295_device::PIN7_HIGH) // verified
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50)
+ okim6295_device &oki1(OKIM6295(config, "oki1", XTAL(32'220'000)/32, okim6295_device::PIN7_HIGH)); // verified
+ oki1.add_route(ALL_OUTPUTS, "lspeaker", 0.50);
+ oki1.add_route(ALL_OUTPUTS, "rspeaker", 0.50);
- MCFG_DEVICE_ADD("oki2", OKIM6295, XTAL(32'220'000)/16, okim6295_device::PIN7_HIGH) // verified
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.25)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.25)
-MACHINE_CONFIG_END
+ OKIM6295(config, m_oki2, XTAL(32'220'000)/16, okim6295_device::PIN7_HIGH); // verified
+ m_oki2->add_route(ALL_OUTPUTS, "lspeaker", 0.25);
+ m_oki2->add_route(ALL_OUTPUTS, "rspeaker", 0.25);
+}
/**********************************************************************************/
diff --git a/src/mame/drivers/datum.cpp b/src/mame/drivers/datum.cpp
index d774b737b66..6b957acd9a1 100644
--- a/src/mame/drivers/datum.cpp
+++ b/src/mame/drivers/datum.cpp
@@ -182,10 +182,11 @@ WRITE8_MEMBER( datum_state::pb_w )
}
-MACHINE_CONFIG_START(datum_state::datum)
+void datum_state::datum(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu",M6802, XTAL(4'000'000)) // internally divided to 1 MHz
- MCFG_DEVICE_PROGRAM_MAP(datum_mem)
+ M6802(config, m_maincpu, XTAL(4'000'000)); // internally divided to 1 MHz
+ m_maincpu->set_addrmap(AS_PROGRAM, &datum_state::datum_mem);
/* video hardware */
config.set_default_layout(layout_datum);
@@ -202,8 +203,8 @@ MACHINE_CONFIG_START(datum_state::datum)
pia2.irqa_handler().set_inputline("maincpu", M6802_IRQ_LINE);
pia2.irqb_handler().set_inputline("maincpu", M6802_IRQ_LINE);
- MCFG_DEVICE_ADD("acia", ACIA6850, 0) // rs232
-MACHINE_CONFIG_END
+ ACIA6850(config, "acia", 0); // rs232
+}
/* ROM definition */
diff --git a/src/mame/drivers/dblcrown.cpp b/src/mame/drivers/dblcrown.cpp
index b4169a16577..55eab934533 100644
--- a/src/mame/drivers/dblcrown.cpp
+++ b/src/mame/drivers/dblcrown.cpp
@@ -599,24 +599,24 @@ It needs at least 64 instances because 0xa05b will be eventually nuked by the vb
}
-MACHINE_CONFIG_START(dblcrown_state::dblcrown)
-
+void dblcrown_state::dblcrown(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(dblcrown_map)
- MCFG_DEVICE_IO_MAP(dblcrown_io)
+ Z80(config, m_maincpu, CPU_CLOCK);
+ m_maincpu->set_addrmap(AS_PROGRAM, &dblcrown_state::dblcrown_map);
+ m_maincpu->set_addrmap(AS_IO, &dblcrown_state::dblcrown_io);
TIMER(config, "scantimer").configure_scanline(FUNC(dblcrown_state::dblcrown_irq_scanline), "screen", 0, 1);
WATCHDOG_TIMER(config, m_watchdog).set_time(attotime::from_msec(1000)); /* 1000 ms. (minimal of MAX693A watchdog long timeout period with internal oscillator) */
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
- MCFG_SCREEN_UPDATE_DRIVER(dblcrown_state, screen_update)
- MCFG_SCREEN_SIZE(64*8, 64*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500));
+ screen.set_screen_update(FUNC(dblcrown_state::screen_update));
+ screen.set_size(64*8, 64*8);
+ screen.set_visarea(0*8, 40*8-1, 2*8, 30*8-1);
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_dblcrown);
@@ -632,7 +632,7 @@ MACHINE_CONFIG_START(dblcrown_state::dblcrown)
/* sound hardware */
SPEAKER(config, "mono").front_center();
YMZ284(config, "ymz", SND_CLOCK).add_route(ALL_OUTPUTS, "mono", 0.75);
-MACHINE_CONFIG_END
+}
/***************************************************************************
diff --git a/src/mame/drivers/dblewing.cpp b/src/mame/drivers/dblewing.cpp
index dc7ae8b18f6..c38f2a3f567 100644
--- a/src/mame/drivers/dblewing.cpp
+++ b/src/mame/drivers/dblewing.cpp
@@ -352,17 +352,17 @@ DECOSPR_PRIORITY_CB_MEMBER(dblewing_state::pri_callback)
return 0; // sprites always on top?
}
-MACHINE_CONFIG_START(dblewing_state::dblewing)
-
+void dblewing_state::dblewing(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(28'000'000)/2) /* DE102 */
- MCFG_DEVICE_PROGRAM_MAP(dblewing_map)
- MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dblewing_state, irq6_line_hold)
+ M68000(config, m_maincpu, XTAL(28'000'000)/2); /* DE102 */
+ m_maincpu->set_addrmap(AS_PROGRAM, &dblewing_state::dblewing_map);
+ m_maincpu->set_addrmap(AS_OPCODES, &dblewing_state::decrypted_opcodes_map);
+ m_maincpu->set_vblank_int("screen", FUNC(dblewing_state::irq6_line_hold));
- MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(32'220'000)/9)
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
- MCFG_DEVICE_IO_MAP(sound_io)
+ Z80(config, m_audiocpu, XTAL(32'220'000)/9);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &dblewing_state::sound_map);
+ m_audiocpu->set_addrmap(AS_IO, &dblewing_state::sound_io);
INPUT_MERGER_ANY_HIGH(config, "soundirq").output_handler().set_inputline(m_audiocpu, 0);
@@ -370,19 +370,18 @@ MACHINE_CONFIG_START(dblewing_state::dblewing)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(58.443)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(dblewing_state, screen_update_dblewing)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(58.443);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(0*8, 40*8-1, 1*8, 31*8-1);
+ screen.set_screen_update(FUNC(dblewing_state::screen_update_dblewing));
+ screen.set_palette("palette");
PALETTE(config, "palette").set_format(palette_device::xBGR_444, 4096);
GFXDECODE(config, "gfxdecode", "palette", gfx_dblewing);
DECO16IC(config, m_deco_tilegen, 0);
- m_deco_tilegen->set_split(0);
m_deco_tilegen->set_pf1_size(DECO_64x32);
m_deco_tilegen->set_pf2_size(DECO_64x32);
m_deco_tilegen->set_pf1_trans_mask(0x0f);
@@ -418,9 +417,8 @@ MACHINE_CONFIG_START(dblewing_state::dblewing)
ymsnd.irq_handler().set("soundirq", FUNC(input_merger_device::in_w<1>));
ymsnd.add_route(ALL_OUTPUTS, "mono", 1.0);
- MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(28'000'000)/28, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
-MACHINE_CONFIG_END
+ OKIM6295(config, "oki", XTAL(28'000'000)/28, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.00);
+}
diff --git a/src/mame/drivers/dbz.cpp b/src/mame/drivers/dbz.cpp
index 392a6f667b7..aba4c725577 100644
--- a/src/mame/drivers/dbz.cpp
+++ b/src/mame/drivers/dbz.cpp
@@ -97,7 +97,7 @@ WRITE16_MEMBER(dbz_state::dbzcontrol_w)
WRITE16_MEMBER(dbz_state::dbz_sound_command_w)
{
- m_soundlatch->write(space, 0, data >> 8);
+ m_soundlatch->write(data >> 8);
}
WRITE16_MEMBER(dbz_state::dbz_sound_cause_nmi)
@@ -324,25 +324,25 @@ void dbz_state::machine_reset()
m_control = 0;
}
-MACHINE_CONFIG_START(dbz_state::dbz)
-
+void dbz_state::dbz(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, 16000000)
- MCFG_DEVICE_PROGRAM_MAP(dbz_map)
+ M68000(config, m_maincpu, 16000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &dbz_state::dbz_map);
TIMER(config, "scantimer").configure_scanline(FUNC(dbz_state::dbz_scanline), "screen", 0, 1);
- MCFG_DEVICE_ADD("audiocpu", Z80, 4000000)
- MCFG_DEVICE_PROGRAM_MAP(dbz_sound_map)
- MCFG_DEVICE_IO_MAP(dbz_sound_io_map)
+ Z80(config, m_audiocpu, 4000000);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &dbz_state::dbz_sound_map);
+ m_audiocpu->set_addrmap(AS_IO, &dbz_state::dbz_sound_io_map);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(55)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(64*8, 40*8)
- MCFG_SCREEN_VISIBLE_AREA(0, 48*8-1, 0, 32*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(dbz_state, screen_update_dbz)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(55);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(64*8, 40*8);
+ screen.set_visarea(0, 48*8-1, 0, 32*8-1);
+ screen.set_screen_update(FUNC(dbz_state::screen_update_dbz));
+ screen.set_palette("palette");
GFXDECODE(config, m_gfxdecode, "palette", gfx_dbz);
@@ -382,10 +382,10 @@ MACHINE_CONFIG_START(dbz_state::dbz)
ymsnd.add_route(0, "lspeaker", 1.0);
ymsnd.add_route(1, "rspeaker", 1.0);
- MCFG_DEVICE_ADD("oki", OKIM6295, 1056000, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
-MACHINE_CONFIG_END
+ okim6295_device &oki(OKIM6295(config, "oki", 1056000, okim6295_device::PIN7_HIGH));
+ oki.add_route(ALL_OUTPUTS, "lspeaker", 1.0);
+ oki.add_route(ALL_OUTPUTS, "rspeaker", 1.0);
+}
/**********************************************************************************/
diff --git a/src/mame/drivers/dccons.cpp b/src/mame/drivers/dccons.cpp
index e4c43a85cf1..062def2d2e3 100644
--- a/src/mame/drivers/dccons.cpp
+++ b/src/mame/drivers/dccons.cpp
@@ -593,7 +593,8 @@ void dc_cons_state::gdrom_config(device_t *device)
MCFG_SOUND_ROUTE(1, "^^aica", 1.0)
}
-MACHINE_CONFIG_START(dc_cons_state::dc)
+void dc_cons_state::dc(machine_config &config)
+{
/* basic machine hardware */
SH4LE(config, m_maincpu, CPU_CLOCK);
m_maincpu->set_md(0, 1);
@@ -611,8 +612,8 @@ MACHINE_CONFIG_START(dc_cons_state::dc)
TIMER(config, "scantimer").configure_scanline(FUNC(dc_state::dc_scanline), "screen", 0, 1);
- MCFG_DEVICE_ADD("soundcpu", ARM7, ((XTAL(33'868'800)*2)/3)/8) // AICA bus clock is 2/3rds * 33.8688. ARM7 gets 1 bus cycle out of each 8.
- MCFG_DEVICE_PROGRAM_MAP(dc_audio_map)
+ ARM7(config, m_soundcpu, ((XTAL(33'868'800)*2)/3)/8); // AICA bus clock is 2/3rds * 33.8688. ARM7 gets 1 bus cycle out of each 8.
+ m_soundcpu->set_addrmap(AS_PROGRAM, &dc_cons_state::dc_audio_map);
MCFG_MACHINE_RESET_OVERRIDE(dc_cons_state,dc_console )
@@ -658,10 +659,10 @@ MACHINE_CONFIG_START(dc_cons_state::dc)
dcctrl3.set_port_tag<7>("P4:A5");
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(13458568*2, 857, 0, 640, 524, 0, 480) /* TODO: where pclk actually comes? */
- MCFG_SCREEN_UPDATE_DEVICE("powervr2", powervr2_device, screen_update)
- MCFG_PALETTE_ADD("palette", 0x1000)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(13458568*2, 857, 0, 640, 524, 0, 480); /* TODO: where pclk actually comes? */
+ screen.set_screen_update("powervr2", FUNC(powervr2_device::screen_update));
+ PALETTE(config, "palette").set_entries(0x1000);
POWERVR2(config, m_powervr2, 0);
m_powervr2->irq_callback().set(FUNC(dc_state::pvr_irq));
@@ -680,13 +681,13 @@ MACHINE_CONFIG_START(dc_cons_state::dc)
ATA_INTERFACE(config, m_ata, 0);
m_ata->irq_handler().set(FUNC(dc_cons_state::ata_interrupt));
- MCFG_DEVICE_MODIFY("ata:0")
- MCFG_SLOT_OPTION_ADD("gdrom", GDROM)
- MCFG_SLOT_OPTION_MACHINE_CONFIG("gdrom", gdrom_config)
- MCFG_SLOT_DEFAULT_OPTION("gdrom")
+ ata_slot_device &ata_0(*subdevice<ata_slot_device>("ata:0"));
+ ata_0.option_add("gdrom", GDROM);
+ ata_0.set_option_machine_config("gdrom", gdrom_config);
+ ata_0.set_default_option("gdrom");
SOFTWARE_LIST(config, "cd_list").set_original("dc");
-MACHINE_CONFIG_END
+}
#define ROM_LOAD_BIOS(bios,name,offset,length,hash) \
diff --git a/src/mame/drivers/dday.cpp b/src/mame/drivers/dday.cpp
index 00d67128fb4..7a061fc3215 100644
--- a/src/mame/drivers/dday.cpp
+++ b/src/mame/drivers/dday.cpp
@@ -254,21 +254,21 @@ void dday_state::machine_reset()
}
-MACHINE_CONFIG_START(dday_state::dday)
-
+void dday_state::dday(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 2000000) /* 2 MHz ? */
- MCFG_DEVICE_PROGRAM_MAP(dday_map)
+ Z80(config, m_maincpu, 2000000); /* 2 MHz ? */
+ m_maincpu->set_addrmap(AS_PROGRAM, &dday_state::dday_map);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 28*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(dday_state, screen_update_dday)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ m_screen->set_size(32*8, 32*8);
+ m_screen->set_visarea(0*8, 32*8-1, 0*8, 28*8-1);
+ m_screen->set_screen_update(FUNC(dday_state::screen_update_dday));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_dday);
PALETTE(config, m_palette, FUNC(dday_state::dday_palette), 256).enable_shadows();
@@ -279,7 +279,7 @@ MACHINE_CONFIG_START(dday_state::dday)
AY8910(config, m_ay1, 1000000).add_route(ALL_OUTPUTS, "mono", 0.25);
AY8910(config, "ay2", 1000000).add_route(ALL_OUTPUTS, "mono", 0.25);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/ddayjlc.cpp b/src/mame/drivers/ddayjlc.cpp
index b4418cc9fc3..95662ced4bb 100644
--- a/src/mame/drivers/ddayjlc.cpp
+++ b/src/mame/drivers/ddayjlc.cpp
@@ -349,7 +349,7 @@ WRITE8_MEMBER(ddayjlc_state::bg2_w)
WRITE8_MEMBER(ddayjlc_state::sound_w)
{
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff);
}
@@ -599,26 +599,26 @@ void ddayjlc_state::ddayjlc_palette(palette_device &palette) const
palette.set_pen_color(0x203, rgb_t(0xff, 0xff, 0xff));
}
-MACHINE_CONFIG_START(ddayjlc_state::ddayjlc)
-
+void ddayjlc_state::ddayjlc(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80,12000000/3)
- MCFG_DEVICE_PROGRAM_MAP(main_map)
+ Z80(config, m_maincpu, 12000000/3);
+ m_maincpu->set_addrmap(AS_PROGRAM, &ddayjlc_state::main_map);
- MCFG_DEVICE_ADD("audiocpu", Z80, 12000000/4)
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
+ Z80(config, m_audiocpu, 12000000/4);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &ddayjlc_state::sound_map);
config.m_minimum_quantum = attotime::from_hz(6000);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(ddayjlc_state, screen_update_ddayjlc)
- MCFG_SCREEN_PALETTE(m_palette)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, ddayjlc_state, vblank_irq))
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ 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);
+ screen.set_screen_update(FUNC(ddayjlc_state::screen_update_ddayjlc));
+ screen.set_palette(m_palette);
+ screen.screen_vblank().set(FUNC(ddayjlc_state::vblank_irq));
GFXDECODE(config, m_gfxdecode, m_palette, gfx_ddayjlc);
PALETTE(config, m_palette, FUNC(ddayjlc_state::ddayjlc_palette), 0x200+4);
@@ -632,7 +632,7 @@ MACHINE_CONFIG_START(ddayjlc_state::ddayjlc)
ay1.add_route(ALL_OUTPUTS, "mono", 1.0);
AY8910(config, "ay2", 12000000/6).add_route(ALL_OUTPUTS, "mono", 1.0);
-MACHINE_CONFIG_END
+}
ROM_START( ddayjlc )
diff --git a/src/mame/drivers/ddealer.cpp b/src/mame/drivers/ddealer.cpp
index e98802e3bde..d46ca085054 100644
--- a/src/mame/drivers/ddealer.cpp
+++ b/src/mame/drivers/ddealer.cpp
@@ -628,33 +628,32 @@ void ddealer_state::machine_reset()
m_coin_input = 0;
}
-MACHINE_CONFIG_START(ddealer_state::ddealer)
-
- MCFG_DEVICE_ADD("maincpu" , M68000, XTAL(16'000'000)/2) /* 8MHz */
- MCFG_DEVICE_PROGRAM_MAP(ddealer_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", ddealer_state, irq4_line_hold)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(ddealer_state, irq1_line_hold, 90)//guess, controls music tempo, 112 is way too fast
+void ddealer_state::ddealer(machine_config &config)
+{
+ M68000(config, m_maincpu, XTAL(16'000'000)/2); /* 8MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &ddealer_state::ddealer_map);
+ m_maincpu->set_vblank_int("screen", FUNC(ddealer_state::irq4_line_hold));
+ m_maincpu->set_periodic_int(FUNC(ddealer_state::irq1_line_hold), attotime::from_hz(90)); //guess, controls music tempo, 112 is way too fast
// M50747 or NMK-110 8131 MCU
GFXDECODE(config, m_gfxdecode, m_palette, gfx_ddealer);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(512, 256)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(ddealer_state, screen_update)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(512, 256);
+ screen.set_visarea(0*8, 48*8-1, 2*8, 30*8-1);
+ screen.set_screen_update(FUNC(ddealer_state::screen_update));
+ screen.set_palette(m_palette);
PALETTE(config, m_palette).set_format(palette_device::RRRRGGGGBBBBRGBx, 0x200);
TIMER(config, "coinsim").configure_periodic(FUNC(ddealer_state::mcu_sim), attotime::from_hz(10000));
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("ymsnd", YM2203, XTAL(6'000'000) / 8) /* 7.5KHz */
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
-MACHINE_CONFIG_END
+ YM2203(config, "ymsnd", XTAL(6'000'000) / 8).add_route(ALL_OUTPUTS, "mono", 0.40); /* 7.5KHz */
+}
diff --git a/src/mame/drivers/ddenlovr.cpp b/src/mame/drivers/ddenlovr.cpp
index b9a52077718..e05af0653f3 100644
--- a/src/mame/drivers/ddenlovr.cpp
+++ b/src/mame/drivers/ddenlovr.cpp
@@ -4331,8 +4331,8 @@ void dynax_state::htengoku_banked_map(address_map &map)
map(0x80000, 0x801ff).w(FUNC(dynax_state::tenkai_palette_w));
}
-MACHINE_CONFIG_START(ddenlovr_state::htengoku)
-
+void ddenlovr_state::htengoku(machine_config &config)
+{
/* basic machine hardware */
Z80(config, m_maincpu, 20000000 / 4);
m_maincpu->set_addrmap(AS_PROGRAM, &ddenlovr_state::htengoku_mem_map);
@@ -4392,7 +4392,7 @@ MACHINE_CONFIG_START(ddenlovr_state::htengoku)
/* devices */
msm6242_device &rtc(MSM6242(config, "rtc", XTAL(32'768)));
rtc.out_int_handler().set("mainirq", FUNC(rst_pos_buffer_device::rst1_w));
-MACHINE_CONFIG_END
+}
/***************************************************************************
@@ -9692,8 +9692,8 @@ WRITE_LINE_MEMBER(ddenlovr_state::ddenlovr_irq)
m_maincpu->set_input_line(M68K_IRQ_1, HOLD_LINE);
}
-MACHINE_CONFIG_START(ddenlovr_state::ddenlovr)
-
+void ddenlovr_state::ddenlovr(machine_config &config)
+{
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(24'000'000) / 2);
m_maincpu->set_addrmap(AS_PROGRAM, &ddenlovr_state::ddenlovr_map);
@@ -9730,14 +9730,14 @@ MACHINE_CONFIG_START(ddenlovr_state::ddenlovr)
YMZ284(config, "aysnd", XTAL(28'636'363) / 16).add_route(ALL_OUTPUTS, "mono", 0.30); // or /8 ?
- okim6295_device &oki(OKIM6295(config, "oki", XTAL(28'636'363) / 28, okim6295_device::PIN7_HIGH));
- oki.add_route(ALL_OUTPUTS, "mono", 0.80);
+ OKIM6295(config, m_oki, XTAL(28'636'363) / 28, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.80);
/* devices */
RTC72421(config, "rtc", XTAL(32'768)); // internal oscillator
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(ddenlovr_state::ddenlovj)
+void ddenlovr_state::ddenlovj(machine_config &config)
+{
ddenlovr(config);
/* basic machine hardware */
@@ -9748,7 +9748,7 @@ MACHINE_CONFIG_START(ddenlovr_state::ddenlovj)
m_mainlatch->q_out_cb<5>().set(FUNC(ddenlovr_state::ddenlovr_blitter_irq_ack_w));
RTC62421(config.replace(), "rtc", XTAL(32'768)); // internal oscillator
-MACHINE_CONFIG_END
+}
void ddenlovr_state::ddenlovrk(machine_config &config)
{
@@ -10061,7 +10061,7 @@ void ddenlovr_state::kotbinyo(machine_config &config)
m_screen->set_visarea(0, 336-1-1, 1+4, 256-15-1+4);
m_screen->set_screen_update(FUNC(ddenlovr_state::screen_update_ddenlovr));
m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE);
- m_screen->set_palette("palette");
+ m_screen->set_palette(m_palette);
m_screen->screen_vblank().set(FUNC(ddenlovr_state::hanakanz_irq));
PALETTE(config, m_palette).set_entries(0x200);
@@ -10431,7 +10431,8 @@ void ddenlovr_state::mjflove(machine_config &config)
AY8910(config, "aysnd", 28636363/8).add_route(ALL_OUTPUTS, "mono", 0.30);
}
-MACHINE_CONFIG_START(ddenlovr_state::hparadis)
+void ddenlovr_state::hparadis(machine_config &config)
+{
quizchq(config);
/* basic machine hardware */
@@ -10445,30 +10446,30 @@ MACHINE_CONFIG_START(ddenlovr_state::hparadis)
config.device_remove("rtc");
MCFG_MACHINE_START_OVERRIDE(ddenlovr_state,hparadis)
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(ddenlovr_state::jongtei)
+}
+void ddenlovr_state::jongtei(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu",Z80, XTAL(20'000'000) / 2) // KL5C80A12
- MCFG_DEVICE_PROGRAM_MAP(hanakanz_map)
- MCFG_DEVICE_IO_MAP(jongtei_portmap)
+ Z80(config, m_maincpu, XTAL(20'000'000) / 2); // KL5C80A12
+ m_maincpu->set_addrmap(AS_PROGRAM, &ddenlovr_state::hanakanz_map);
+ m_maincpu->set_addrmap(AS_IO, &ddenlovr_state::jongtei_portmap);
MCFG_MACHINE_START_OVERRIDE(ddenlovr_state,hanakanz)
MCFG_MACHINE_RESET_OVERRIDE(ddenlovr_state,ddenlovr)
/* video hardware */
- MCFG_SCREEN_ADD(m_screen, RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(336, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 336-1, 5, 256-11-1)
- MCFG_SCREEN_UPDATE_DRIVER(ddenlovr_state, screen_update_ddenlovr)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE)
- MCFG_SCREEN_PALETTE("palette")
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, ddenlovr_state, hanakanz_irq))
-
- MCFG_PALETTE_ADD("palette", 0x200)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ m_screen->set_size(336, 256);
+ m_screen->set_visarea(0, 336-1, 5, 256-11-1);
+ m_screen->set_screen_update(FUNC(ddenlovr_state::screen_update_ddenlovr));
+ m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE);
+ m_screen->set_palette(m_palette);
+ m_screen->screen_vblank().set(FUNC(ddenlovr_state::hanakanz_irq));
+
+ PALETTE(config, m_palette).set_entries(0x200);
blitter_irq().set(FUNC(ddenlovr_state::mjflove_blitter_irq));
@@ -10479,29 +10480,27 @@ MACHINE_CONFIG_START(ddenlovr_state::jongtei)
YM2413(config, "ym2413", XTAL(28'636'363) / 8).add_route(ALL_OUTPUTS, "mono", 0.80);
- MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(28'636'363) / 28, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
+ OKIM6295(config, m_oki, XTAL(28'636'363) / 28, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.80);
/* devices */
MSM6242(config, "rtc", XTAL(32'768)).out_int_handler().set(FUNC(ddenlovr_state::hanakanz_rtc_irq));
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(ddenlovr_state::mjgnight)
+void ddenlovr_state::mjgnight(machine_config &config)
+{
jongtei(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_IO_MAP(mjgnight_portmap)
+ m_maincpu->set_addrmap(AS_IO, &ddenlovr_state::mjgnight_portmap);
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_SIZE(336, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 336-1, 5-4, 256-11-1-4)
-MACHINE_CONFIG_END
+ m_screen->set_size(336, 256);
+ m_screen->set_visarea(0, 336-1, 5-4, 256-11-1-4);
+}
/***************************************************************************
Mahjong Seiryu Densetsu
***************************************************************************/
-MACHINE_CONFIG_START(ddenlovr_state::sryudens)
-
+void ddenlovr_state::sryudens(machine_config &config)
+{
/* basic machine hardware */
tmpz84c015_device &maincpu(TMPZ84C015(config, m_maincpu, XTAL(16'000'000) / 2)); // ?
maincpu.set_addrmap(AS_PROGRAM, &ddenlovr_state::sryudens_map);
@@ -10513,17 +10512,17 @@ MACHINE_CONFIG_START(ddenlovr_state::sryudens)
MCFG_MACHINE_RESET_OVERRIDE(ddenlovr_state,ddenlovr)
/* video hardware */
- MCFG_SCREEN_ADD(m_screen, RASTER)
- MCFG_SCREEN_REFRESH_RATE(60.8532) // VSync 60.8532Hz, HSync 15.2790kHz
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(336, 256+22)
- MCFG_SCREEN_VISIBLE_AREA(0, 336-1, 0+5, 256-12-1)
- MCFG_SCREEN_UPDATE_DRIVER(ddenlovr_state, screen_update_ddenlovr)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE)
- MCFG_SCREEN_PALETTE("palette")
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("maincpu", tmpz84c015_device, trg0))
-
- MCFG_PALETTE_ADD("palette", 0x100)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60.8532); // VSync 60.8532Hz, HSync 15.2790kHz
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ m_screen->set_size(336, 256+22);
+ m_screen->set_visarea(0, 336-1, 0+5, 256-12-1);
+ m_screen->set_screen_update(FUNC(ddenlovr_state::screen_update_ddenlovr));
+ m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE);
+ m_screen->set_palette(m_palette);
+ m_screen->screen_vblank().set(m_maincpu, FUNC(tmpz84c015_device::trg0));
+
+ PALETTE(config, m_palette).set_entries(0x100);
blitter_irq().set(FUNC(ddenlovr_state::mjflove_blitter_irq));
@@ -10536,20 +10535,19 @@ MACHINE_CONFIG_START(ddenlovr_state::sryudens)
YMZ284(config, "aysnd", XTAL(28'636'363) / 8).add_route(ALL_OUTPUTS, "mono", 0.30);
- MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(28'636'363) / 28, okim6295_device::PIN7_HIGH) // ?
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
+ OKIM6295(config, m_oki, XTAL(28'636'363) / 28, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.80); // ?
/* devices */
RTC62421(config, "rtc", XTAL(32'768)).out_int_handler().set(m_maincpu, FUNC(tmpz84c015_device::trg1)); // internal oscillator
-MACHINE_CONFIG_END
+}
/***************************************************************************
Mahjong Janshin Plus
***************************************************************************/
// PCB: NM7001004
-MACHINE_CONFIG_START(ddenlovr_state::janshinp)
-
+void ddenlovr_state::janshinp(machine_config &config)
+{
/* basic machine hardware */
tmpz84c015_device &maincpu(TMPZ84C015(config, m_maincpu, XTAL(16'000'000) / 2));
maincpu.set_addrmap(AS_PROGRAM, &ddenlovr_state::janshinp_map);
@@ -10561,17 +10559,17 @@ MACHINE_CONFIG_START(ddenlovr_state::janshinp)
MCFG_MACHINE_RESET_OVERRIDE(ddenlovr_state,ddenlovr)
/* video hardware */
- MCFG_SCREEN_ADD(m_screen, RASTER)
- MCFG_SCREEN_REFRESH_RATE(60.8532) // VSync 60.8532Hz, HSync 15.2790kHz ?
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(336, 256+22)
- MCFG_SCREEN_VISIBLE_AREA(0, 336-1, 0+5, 256-12-1)
- MCFG_SCREEN_UPDATE_DRIVER(ddenlovr_state, screen_update_ddenlovr)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE)
- MCFG_SCREEN_PALETTE("palette")
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("maincpu", tmpz84c015_device, trg0))
-
- MCFG_PALETTE_ADD("palette", 0x100)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60.8532); // VSync 60.8532Hz, HSync 15.2790kHz ?
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ m_screen->set_size(336, 256+22);
+ m_screen->set_visarea(0, 336-1, 0+5, 256-12-1);
+ m_screen->set_screen_update(FUNC(ddenlovr_state::screen_update_ddenlovr));
+ m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE);
+ m_screen->set_palette(m_palette);
+ m_screen->screen_vblank().set(m_maincpu, FUNC(tmpz84c015_device::trg0));
+
+ PALETTE(config, m_palette).set_entries(0x100);
blitter_irq().set(FUNC(ddenlovr_state::mjflove_blitter_irq));
@@ -10584,12 +10582,11 @@ MACHINE_CONFIG_START(ddenlovr_state::janshinp)
YMZ284(config, "aysnd", XTAL(28'636'363) / 8).add_route(ALL_OUTPUTS, "mono", 0.30);
- MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(28'636'363) / 28, okim6295_device::PIN7_HIGH) // ?
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
+ OKIM6295(config, m_oki, XTAL(28'636'363) / 28, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.80); // ?
/* devices */
MSM6242(config, "rtc", XTAL(32'768)).out_int_handler().set(m_maincpu, FUNC(tmpz84c015_device::trg1));
-MACHINE_CONFIG_END
+}
// Same PCB as janshinp
void ddenlovr_state::dtoyoken(machine_config &config)
@@ -10618,8 +10615,8 @@ MACHINE_START_MEMBER(ddenlovr_state,seljan2)
MACHINE_START_CALL_MEMBER(ddenlovr);
}
-MACHINE_CONFIG_START(ddenlovr_state::seljan2)
-
+void ddenlovr_state::seljan2(machine_config &config)
+{
/* basic machine hardware */
tmpz84c015_device &maincpu(TMPZ84C015(config, m_maincpu, XTAL(16'000'000) / 2));
maincpu.set_addrmap(AS_PROGRAM, &ddenlovr_state::seljan2_map);
@@ -10631,17 +10628,17 @@ MACHINE_CONFIG_START(ddenlovr_state::seljan2)
MCFG_MACHINE_RESET_OVERRIDE(ddenlovr_state,ddenlovr)
/* video hardware */
- MCFG_SCREEN_ADD(m_screen, RASTER)
- MCFG_SCREEN_REFRESH_RATE(60.8532) // VSync 60.8532Hz, HSync 15.2790kHz ?
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(336, 256+22)
- MCFG_SCREEN_VISIBLE_AREA(0, 336-1, 0+5, 256-12-1)
- MCFG_SCREEN_UPDATE_DRIVER(ddenlovr_state, screen_update_ddenlovr)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE)
- MCFG_SCREEN_PALETTE("palette")
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("maincpu", tmpz84c015_device, trg0))
-
- MCFG_PALETTE_ADD("palette", 0x100)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60.8532); // VSync 60.8532Hz, HSync 15.2790kHz ?
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ m_screen->set_size(336, 256+22);
+ m_screen->set_visarea(0, 336-1, 0+5, 256-12-1);
+ m_screen->set_screen_update(FUNC(ddenlovr_state::screen_update_ddenlovr));
+ m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE);
+ m_screen->set_palette(m_palette);
+ m_screen->screen_vblank().set(m_maincpu, FUNC(tmpz84c015_device::trg0));
+
+ PALETTE(config, m_palette).set_entries(0x100);
blitter_irq().set("maincpu", FUNC(tmpz84c015_device::pa7_w)).invert(); // PA bit 7 = blitter busy
@@ -10657,12 +10654,11 @@ MACHINE_CONFIG_START(ddenlovr_state::seljan2)
aysnd.port_b_write_callback().set(FUNC(ddenlovr_state::ddenlovr_select_w));
aysnd.add_route(ALL_OUTPUTS, "mono", 0.30);
- MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(28'636'363) / 28, okim6295_device::PIN7_HIGH) // ?
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
+ OKIM6295(config, m_oki, XTAL(28'636'363) / 28, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.80); // ?
/* devices */
MSM6242(config, "rtc", XTAL(32'768)).out_int_handler().set(m_maincpu, FUNC(tmpz84c015_device::trg1));
-MACHINE_CONFIG_END
+}
/***************************************************************************
@@ -10670,28 +10666,28 @@ MACHINE_CONFIG_END
***************************************************************************/
-MACHINE_CONFIG_START(ddenlovr_state::daimyojn)
-
+void ddenlovr_state::daimyojn(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu",Z80, XTAL(20'000'000) / 2)
- MCFG_DEVICE_PROGRAM_MAP(hanakanz_map)
- MCFG_DEVICE_IO_MAP(daimyojn_portmap)
+ Z80(config, m_maincpu, XTAL(20'000'000) / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &ddenlovr_state::hanakanz_map);
+ m_maincpu->set_addrmap(AS_IO, &ddenlovr_state::daimyojn_portmap);
MCFG_MACHINE_START_OVERRIDE(ddenlovr_state,mjflove)
MCFG_MACHINE_RESET_OVERRIDE(ddenlovr_state,ddenlovr)
/* video hardware */
- MCFG_SCREEN_ADD(m_screen, RASTER)
- MCFG_SCREEN_REFRESH_RATE(59.7922) // HSync 15.4248kHz
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(336, 256+22)
- MCFG_SCREEN_VISIBLE_AREA(0, 336-1-1, 1, 256-15-1)
- MCFG_SCREEN_UPDATE_DRIVER(ddenlovr_state, screen_update_ddenlovr)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE)
- MCFG_SCREEN_PALETTE("palette")
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, ddenlovr_state, hanakanz_irq))
-
- MCFG_PALETTE_ADD("palette", 0x200)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(59.7922); // HSync 15.4248kHz
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ m_screen->set_size(336, 256+22);
+ m_screen->set_visarea(0, 336-1-1, 1, 256-15-1);
+ m_screen->set_screen_update(FUNC(ddenlovr_state::screen_update_ddenlovr));
+ m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE);
+ m_screen->set_palette(m_palette);
+ m_screen->screen_vblank().set(FUNC(ddenlovr_state::hanakanz_irq));
+
+ PALETTE(config, m_palette).set_entries(0x200);
MCFG_VIDEO_START_OVERRIDE(ddenlovr_state,hanakanz) // blitter commands in the roms are shuffled around
@@ -10700,12 +10696,11 @@ MACHINE_CONFIG_START(ddenlovr_state::daimyojn)
YM2413(config, "ym2413", XTAL(28'636'363) / 8).add_route(ALL_OUTPUTS, "mono", 0.80);
- MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(28'636'363) / 28, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
+ OKIM6295(config, m_oki, XTAL(28'636'363) / 28, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.80);
/* devices */
MSM6242(config, "rtc", XTAL(32'768)).out_int_handler().set(FUNC(ddenlovr_state::hanakanz_rtc_irq));
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/ddragon.cpp b/src/mame/drivers/ddragon.cpp
index 19efd23349f..ce4f861d11c 100644
--- a/src/mame/drivers/ddragon.cpp
+++ b/src/mame/drivers/ddragon.cpp
@@ -260,7 +260,7 @@ WRITE8_MEMBER(darktowr_state::darktowr_bankswitch_w)
*
*************************************/
-void ddragon_state::ddragon_interrupt_ack(address_space &space, offs_t offset, uint8_t data)
+void ddragon_state::ddragon_interrupt_ack(offs_t offset, uint8_t data)
{
switch (offset)
{
@@ -277,7 +277,7 @@ void ddragon_state::ddragon_interrupt_ack(address_space &space, offs_t offset, u
break;
case 3: /* 380e - SND IRQ and latch */
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
break;
case 4: /* 380f - MCU IRQ */
@@ -290,14 +290,14 @@ void ddragon_state::ddragon_interrupt_ack(address_space &space, offs_t offset, u
READ8_MEMBER(ddragon_state::ddragon_interrupt_r)
{
- ddragon_interrupt_ack(space, offset, 0xff);
+ ddragon_interrupt_ack(offset, 0xff);
return 0xff;
}
WRITE8_MEMBER(ddragon_state::ddragon_interrupt_w)
{
- ddragon_interrupt_ack(space, offset, data);
+ ddragon_interrupt_ack(offset, data);
}
diff --git a/src/mame/drivers/ddragon3.cpp b/src/mame/drivers/ddragon3.cpp
index 88f096a3d5f..746b587b3a3 100644
--- a/src/mame/drivers/ddragon3.cpp
+++ b/src/mame/drivers/ddragon3.cpp
@@ -206,7 +206,7 @@ WRITE8_MEMBER(ddragon3_state::oki_bankswitch_w)
WRITE16_MEMBER(wwfwfest_state::wwfwfest_soundwrite)
{
// upper byte is always set to 0x31 for some reason
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
}
@@ -255,7 +255,7 @@ READ16_MEMBER(wwfwfest_state::wwfwfest_paletteram_r)
WRITE16_MEMBER(wwfwfest_state::wwfwfest_paletteram_w)
{
offset = (offset & 0x000f) | (offset & 0x7fc0) >> 2;
- m_palette->write16(space, offset, data, mem_mask);
+ m_palette->write16(offset, data, mem_mask);
}
/*- Priority Control -*/
@@ -820,22 +820,22 @@ void ddragon3_state::machine_reset()
m_bg_tilebase = 0;
}
-MACHINE_CONFIG_START(ddragon3_state::ddragon3)
-
+void ddragon3_state::ddragon3(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, 20_MHz_XTAL / 2)
- MCFG_DEVICE_PROGRAM_MAP(ddragon3_map)
+ M68000(config, m_maincpu, 20_MHz_XTAL / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &ddragon3_state::ddragon3_map);
TIMER(config, "scantimer").configure_scanline(FUNC(ddragon3_state::ddragon3_scanline), "screen", 0, 1);
- MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(3'579'545))
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
+ Z80(config, m_audiocpu, XTAL(3'579'545));
+ m_audiocpu->set_addrmap(AS_PROGRAM, &ddragon3_state::sound_map);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(28_MHz_XTAL / 4, 448, 0, 320, 272, 8, 248) /* HTOTAL and VTOTAL are guessed */
- MCFG_SCREEN_UPDATE_DRIVER(ddragon3_state, screen_update_ddragon3)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising))
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(28_MHz_XTAL / 4, 448, 0, 320, 272, 8, 248); /* HTOTAL and VTOTAL are guessed */
+ m_screen->set_screen_update(FUNC(ddragon3_state::screen_update_ddragon3));
+ m_screen->screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_ddragon3);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 768);
@@ -854,66 +854,62 @@ MACHINE_CONFIG_START(ddragon3_state::ddragon3)
ym2151.add_route(0, "lspeaker", 0.50);
ym2151.add_route(1, "rspeaker", 0.50);
- MCFG_DEVICE_ADD("oki", OKIM6295, 1.056_MHz_XTAL, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.50)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.50)
-MACHINE_CONFIG_END
+ OKIM6295(config, m_oki, 1.056_MHz_XTAL, okim6295_device::PIN7_HIGH);
+ m_oki->add_route(ALL_OUTPUTS, "lspeaker", 1.50);
+ m_oki->add_route(ALL_OUTPUTS, "rspeaker", 1.50);
+}
-MACHINE_CONFIG_START(ddragon3_state::ddragon3b)
+void ddragon3_state::ddragon3b(machine_config &config)
+{
ddragon3(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(dd3b_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &ddragon3_state::dd3b_map);
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_VBLANK_CALLBACK(NOOP)
-MACHINE_CONFIG_END
+ m_screen->screen_vblank().set_nop();
+}
-MACHINE_CONFIG_START(ddragon3_state::ctribe)
+void ddragon3_state::ctribe(machine_config &config)
+{
ddragon3(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(ctribe_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &ddragon3_state::ctribe_map);
- MCFG_DEVICE_MODIFY("audiocpu")
- MCFG_DEVICE_PROGRAM_MAP(ctribe_sound_map)
+ m_audiocpu->set_addrmap(AS_PROGRAM, &ddragon3_state::ctribe_sound_map);
m_palette->set_format(palette_device::xBGR_444, 768);
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(ddragon3_state, screen_update_ctribe)
- MCFG_SCREEN_VBLANK_CALLBACK(NOOP)
+ m_screen->set_screen_update(FUNC(ddragon3_state::screen_update_ctribe));
+ m_screen->screen_vblank().set_nop();
- MCFG_DEVICE_MODIFY("ym2151")
- MCFG_SOUND_ROUTES_RESET()
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.20)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.20)
-
- MCFG_DEVICE_MODIFY("oki")
- MCFG_SOUND_ROUTES_RESET()
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.80)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.80)
-MACHINE_CONFIG_END
+ ym2151_device &ym2151(*subdevice<ym2151_device>("ym2151"));
+ ym2151.reset_routes();
+ ym2151.add_route(0, "lspeaker", 1.20);
+ ym2151.add_route(1, "rspeaker", 1.20);
+ m_oki->reset_routes();
+ m_oki->add_route(ALL_OUTPUTS, "lspeaker", 0.80);
+ m_oki->add_route(ALL_OUTPUTS, "rspeaker", 0.80);
+}
-MACHINE_CONFIG_START(wwfwfest_state::wwfwfest)
+void wwfwfest_state::wwfwfest(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, 24_MHz_XTAL / 2) /* 24 crystal, 12 rated chip */
- MCFG_DEVICE_PROGRAM_MAP(main_map)
+ M68000(config, m_maincpu, 24_MHz_XTAL / 2); /* 24 crystal, 12 rated chip */
+ m_maincpu->set_addrmap(AS_PROGRAM, &wwfwfest_state::main_map);
TIMER(config, "scantimer").configure_scanline(FUNC(ddragon3_state::ddragon3_scanline), "screen", 0, 1);
- MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(3'579'545))
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
+ Z80(config, m_audiocpu, XTAL(3'579'545));
+ m_audiocpu->set_addrmap(AS_PROGRAM, &wwfwfest_state::sound_map);
/* video hardware */
BUFFERED_SPRITERAM16(config, m_spriteram);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(28_MHz_XTAL / 4, 448, 0, 320, 272, 8, 248) /* HTOTAL and VTOTAL are guessed */
- MCFG_SCREEN_UPDATE_DRIVER(wwfwfest_state, screen_update_wwfwfest)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising))
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(28_MHz_XTAL / 4, 448, 0, 320, 272, 8, 248); /* HTOTAL and VTOTAL are guessed */
+ m_screen->set_screen_update(FUNC(wwfwfest_state::screen_update_wwfwfest));
+ m_screen->screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_wwfwfest);
PALETTE(config, m_palette).set_format(palette_device::xBGR_444, 8192);
@@ -929,14 +925,14 @@ MACHINE_CONFIG_START(wwfwfest_state::wwfwfest)
ym2151.add_route(0, "mono", 0.45);
ym2151.add_route(1, "mono", 0.45);
- MCFG_DEVICE_ADD("oki", OKIM6295, 1.056_MHz_XTAL, okim6295_device::PIN7_HIGH) /* Verified - Pin 7 tied to +5VDC */
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.90)
-MACHINE_CONFIG_END
+ OKIM6295(config, m_oki, 1.056_MHz_XTAL, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.90); /* Verified - Pin 7 tied to +5VDC */
+}
-MACHINE_CONFIG_START(wwfwfest_state::wwfwfstb)
+void wwfwfest_state::wwfwfstb(machine_config &config)
+{
wwfwfest(config);
MCFG_VIDEO_START_OVERRIDE(wwfwfest_state,wwfwfstb)
-MACHINE_CONFIG_END
+}
/*************************************
diff --git a/src/mame/drivers/ddribble.cpp b/src/mame/drivers/ddribble.cpp
index c5b4a7a09b7..e632afca03c 100644
--- a/src/mame/drivers/ddribble.cpp
+++ b/src/mame/drivers/ddribble.cpp
@@ -257,33 +257,33 @@ void ddribble_state::machine_reset()
m_charbank[1] = 0;
}
-MACHINE_CONFIG_START(ddribble_state::ddribble)
-
+void ddribble_state::ddribble(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD(m_maincpu, MC6809E, XTAL(18'432'000)/12) /* verified on pcb */
- MCFG_DEVICE_PROGRAM_MAP(cpu0_map)
+ MC6809E(config, m_maincpu, XTAL(18'432'000)/12); /* verified on pcb */
+ m_maincpu->set_addrmap(AS_PROGRAM, &ddribble_state::cpu0_map);
- MCFG_DEVICE_ADD(m_cpu1, MC6809E, XTAL(18'432'000)/12) /* verified on pcb */
- MCFG_DEVICE_PROGRAM_MAP(cpu1_map)
+ MC6809E(config, m_cpu1, XTAL(18'432'000)/12); /* verified on pcb */
+ m_cpu1->set_addrmap(AS_PROGRAM, &ddribble_state::cpu1_map);
- MCFG_DEVICE_ADD("cpu2", MC6809E, XTAL(18'432'000)/12) /* verified on pcb */
- MCFG_DEVICE_PROGRAM_MAP(cpu2_map)
+ mc6809e_device &cpu2(MC6809E(config, "cpu2", XTAL(18'432'000)/12)); /* verified on pcb */
+ cpu2.set_addrmap(AS_PROGRAM, &ddribble_state::cpu2_map);
config.m_minimum_quantum = attotime::from_hz(6000); /* we need heavy synch */
WATCHDOG_TIMER(config, "watchdog");
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
-/* MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 2*8, 30*8-1) */
- MCFG_SCREEN_UPDATE_DRIVER(ddribble_state, screen_update_ddribble)
- MCFG_SCREEN_PALETTE("palette")
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, ddribble_state, vblank_irq))
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ 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);
+/* screen.set_size(64*8, 32*8);
+ screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); */
+ screen.set_screen_update(FUNC(ddribble_state::screen_update_ddribble));
+ screen.set_palette("palette");
+ screen.screen_vblank().set(FUNC(ddribble_state::vblank_irq));
GFXDECODE(config, m_gfxdecode, "palette", gfx_ddribble);
PALETTE(config, "palette", FUNC(ddribble_state::ddribble_palette)).set_format(palette_device::xBGR_555, 64 + 256, 64);
@@ -299,17 +299,16 @@ MACHINE_CONFIG_START(ddribble_state::ddribble)
ymsnd.add_route(2, "filter3", 0.25);
ymsnd.add_route(3, "mono", 0.25);
- MCFG_DEVICE_ADD(m_vlm, VLM5030, XTAL(3'579'545)) /* verified on pcb */
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
- MCFG_DEVICE_ADDRESS_MAP(0, vlm_map)
-
- MCFG_DEVICE_ADD(m_filter1, FILTER_RC)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
- MCFG_DEVICE_ADD(m_filter2, FILTER_RC)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
- MCFG_DEVICE_ADD(m_filter3, FILTER_RC)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
-MACHINE_CONFIG_END
+ VLM5030(config, m_vlm, XTAL(3'579'545)); /* verified on pcb */
+ m_vlm->add_route(ALL_OUTPUTS, "mono", 1.0);
+ m_vlm->set_addrmap(0, &ddribble_state::vlm_map);
+
+ FILTER_RC(config, m_filter1).add_route(ALL_OUTPUTS, "mono", 1.0);
+
+ FILTER_RC(config, m_filter2).add_route(ALL_OUTPUTS, "mono", 1.0);
+
+ FILTER_RC(config, m_filter3).add_route(ALL_OUTPUTS, "mono", 1.0);
+}
ROM_START( ddribble )
diff --git a/src/mame/drivers/dec0.cpp b/src/mame/drivers/dec0.cpp
index 105f03a1b83..5cd6700491b 100644
--- a/src/mame/drivers/dec0.cpp
+++ b/src/mame/drivers/dec0.cpp
@@ -363,7 +363,7 @@ WRITE16_MEMBER(dec0_state::dec0_control_w)
case 4: /* 6502 sound cpu */
if (ACCESSING_BITS_0_7)
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
break;
case 6: /* Intel 8751 microcontroller - Bad Dudes, Heavy Barrel, Birdy Try only */
@@ -398,7 +398,7 @@ WRITE16_MEMBER(dec0_automat_state::automat_control_w)
{
case 0xe: /* z80 sound cpu */
if (ACCESSING_BITS_0_7)
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
break;
case 12: /* DMA flag */
@@ -425,7 +425,7 @@ WRITE16_MEMBER(dec0_automat_state::automat_control_w)
WRITE16_MEMBER(dec0_state::midres_sound_w)
{
if (ACCESSING_BITS_0_7)
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
}
/******************************************************************************/
@@ -795,7 +795,7 @@ READ16_MEMBER( dec0_automat_state::automat_palette_r )
WRITE16_MEMBER( dec0_automat_state::automat_palette_w )
{
offset ^=0xf;
- m_palette->write16(space, offset, data, mem_mask);
+ m_palette->write16(offset, data, mem_mask);
}
diff --git a/src/mame/drivers/dec8.cpp b/src/mame/drivers/dec8.cpp
index c753f285d4e..1b1a1c7ddc1 100644
--- a/src/mame/drivers/dec8.cpp
+++ b/src/mame/drivers/dec8.cpp
@@ -361,7 +361,7 @@ WRITE8_MEMBER(dec8_state::csilver_control_w)
WRITE8_MEMBER(dec8_state::dec8_sound_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(m6502_device::NMI_LINE, ASSERT_LINE);
m_m6502_timer->adjust(m_audiocpu->cycles_to_attotime(3));
}
diff --git a/src/mame/drivers/deco156.cpp b/src/mame/drivers/deco156.cpp
index 82ffa6910b2..dbb66553328 100644
--- a/src/mame/drivers/deco156.cpp
+++ b/src/mame/drivers/deco156.cpp
@@ -329,27 +329,26 @@ DECOSPR_PRIORITY_CB_MEMBER(deco156_state::pri_callback)
return 0;
}
-MACHINE_CONFIG_START(deco156_state::hvysmsh)
-
+void deco156_state::hvysmsh(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", ARM, 28000000) /* Unconfirmed */
- MCFG_DEVICE_PROGRAM_MAP(hvysmsh_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", deco156_state, deco32_vbl_interrupt)
+ ARM(config, m_maincpu, 28000000); /* Unconfirmed */
+ m_maincpu->set_addrmap(AS_PROGRAM, &deco156_state::hvysmsh_map);
+ m_maincpu->set_vblank_int("screen", FUNC(deco156_state::deco32_vbl_interrupt));
EEPROM_93C46_16BIT(config, "eeprom");
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(58)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529))
- MCFG_SCREEN_SIZE(40*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(deco156_state, screen_update)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(58);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(529));
+ screen.set_size(40*8, 32*8);
+ screen.set_visarea(0*8, 40*8-1, 1*8, 31*8-1);
+ screen.set_screen_update(FUNC(deco156_state::screen_update));
GFXDECODE(config, "gfxdecode", m_palette, gfx_hvysmsh);
PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 1024);
DECO16IC(config, m_deco_tilegen, 0);
- m_deco_tilegen->set_split(0);
m_deco_tilegen->set_pf1_size(DECO_64x32);
m_deco_tilegen->set_pf2_size(DECO_64x32);
m_deco_tilegen->set_pf1_trans_mask(0x0f);
@@ -373,36 +372,35 @@ MACHINE_CONFIG_START(deco156_state::hvysmsh)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("oki1", OKIM6295, 28000000/28, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
-
- MCFG_DEVICE_ADD("oki2", OKIM6295, 28000000/14, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.35)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.35)
-MACHINE_CONFIG_END
+ OKIM6295(config, m_oki1, 28000000/28, okim6295_device::PIN7_HIGH);
+ m_oki1->add_route(ALL_OUTPUTS, "lspeaker", 1.0);
+ m_oki1->add_route(ALL_OUTPUTS, "rspeaker", 1.0);
-MACHINE_CONFIG_START(deco156_state::wcvol95)
+ OKIM6295(config, m_oki2, 28000000/14, okim6295_device::PIN7_HIGH);
+ m_oki2->add_route(ALL_OUTPUTS, "lspeaker", 0.35);
+ m_oki2->add_route(ALL_OUTPUTS, "rspeaker", 0.35);
+}
+void deco156_state::wcvol95(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", ARM, 28000000) /* Unconfirmed */
- MCFG_DEVICE_PROGRAM_MAP(wcvol95_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", deco156_state, deco32_vbl_interrupt)
+ ARM(config, m_maincpu, 28000000); /* Unconfirmed */
+ m_maincpu->set_addrmap(AS_PROGRAM, &deco156_state::wcvol95_map);
+ m_maincpu->set_vblank_int("screen", FUNC(deco156_state::deco32_vbl_interrupt));
EEPROM_93C46_16BIT(config, "eeprom");
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(58)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529))
- MCFG_SCREEN_SIZE(40*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(deco156_state, screen_update)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(58);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(529));
+ screen.set_size(40*8, 32*8);
+ screen.set_visarea(0*8, 40*8-1, 1*8, 31*8-1);
+ screen.set_screen_update(FUNC(deco156_state::screen_update));
GFXDECODE(config, "gfxdecode", m_palette, gfx_hvysmsh);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 1024);
DECO16IC(config, m_deco_tilegen, 0);
- m_deco_tilegen->set_split(0);
m_deco_tilegen->set_pf1_size(DECO_64x32);
m_deco_tilegen->set_pf2_size(DECO_64x32);
m_deco_tilegen->set_pf1_trans_mask(0x0f);
@@ -426,10 +424,10 @@ MACHINE_CONFIG_START(deco156_state::wcvol95)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("ymz", YMZ280B, 28000000 / 2)
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
-MACHINE_CONFIG_END
+ ymz280b_device &ymz(YMZ280B(config, "ymz", 28000000 / 2));
+ ymz.add_route(0, "lspeaker", 1.0);
+ ymz.add_route(1, "rspeaker", 1.0);
+}
/**********************************************************************************/
diff --git a/src/mame/drivers/deco32.cpp b/src/mame/drivers/deco32.cpp
index 026b633b546..7d20995e28a 100644
--- a/src/mame/drivers/deco32.cpp
+++ b/src/mame/drivers/deco32.cpp
@@ -1881,7 +1881,6 @@ void captaven_state::captaven(machine_config &config)
PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 2048);
DECO16IC(config, m_deco_tilegen[0], 0);
- m_deco_tilegen[0]->set_split(0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
@@ -1895,7 +1894,6 @@ void captaven_state::captaven(machine_config &config)
m_deco_tilegen[0]->set_gfxdecode_tag(m_gfxdecode);
DECO16IC(config, m_deco_tilegen[1], 0); // pf3 is in 8bpp mode, pf4 is not used
- m_deco_tilegen[1]->set_split(0);
m_deco_tilegen[1]->set_pf1_size(DECO_32x32);
m_deco_tilegen[1]->set_pf2_size(DECO_32x32);
m_deco_tilegen[1]->set_pf1_trans_mask(0xff);
@@ -1962,7 +1960,6 @@ void fghthist_state::fghthist(machine_config &config)
PALETTE(config, m_palette).set_entries(2048);
DECO16IC(config, m_deco_tilegen[0], 0);
- m_deco_tilegen[0]->set_split(0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
@@ -1978,7 +1975,6 @@ void fghthist_state::fghthist(machine_config &config)
m_deco_tilegen[0]->set_gfxdecode_tag(m_gfxdecode);
DECO16IC(config, m_deco_tilegen[1], 0);
- m_deco_tilegen[1]->set_split(0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
@@ -2087,7 +2083,6 @@ void dragngun_state::dragngun(machine_config &config)
BUFFERED_SPRITERAM32(config, m_spriteram);
DECO16IC(config, m_deco_tilegen[0], 0);
- m_deco_tilegen[0]->set_split(0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
@@ -2103,7 +2098,6 @@ void dragngun_state::dragngun(machine_config &config)
m_deco_tilegen[0]->set_gfxdecode_tag(m_gfxdecode);
DECO16IC(config, m_deco_tilegen[1], 0);
- m_deco_tilegen[1]->set_split(0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
m_deco_tilegen[1]->set_pf1_trans_mask(0xff);
@@ -2215,7 +2209,6 @@ void dragngun_state::lockload(machine_config &config)
PALETTE(config, m_palette).set_entries(2048);
DECO16IC(config, m_deco_tilegen[0], 0);
- m_deco_tilegen[0]->set_split(0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
@@ -2231,7 +2224,6 @@ void dragngun_state::lockload(machine_config &config)
m_deco_tilegen[0]->set_gfxdecode_tag(m_gfxdecode);
DECO16IC(config, m_deco_tilegen[1], 0);
- m_deco_tilegen[1]->set_split(0);
m_deco_tilegen[1]->set_pf1_size(DECO_32x32);
m_deco_tilegen[1]->set_pf2_size(DECO_32x32); // lockload definitely wants pf34 half width..
m_deco_tilegen[1]->set_pf1_trans_mask(0xff);
@@ -2295,7 +2287,6 @@ void nslasher_state::tattass(machine_config &config)
DECO_ACE(config, m_deco_ace, 0);
DECO16IC(config, m_deco_tilegen[0], 0);
- m_deco_tilegen[0]->set_split(0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
@@ -2311,7 +2302,6 @@ void nslasher_state::tattass(machine_config &config)
m_deco_tilegen[0]->set_gfxdecode_tag(m_gfxdecode);
DECO16IC(config, m_deco_tilegen[1], 0);
- m_deco_tilegen[1]->set_split(0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
@@ -2371,7 +2361,6 @@ void nslasher_state::nslasher(machine_config &config)
DECO_ACE(config, m_deco_ace, 0);
DECO16IC(config, m_deco_tilegen[0], 0);
- m_deco_tilegen[0]->set_split(0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
@@ -2387,7 +2376,6 @@ void nslasher_state::nslasher(machine_config &config)
m_deco_tilegen[0]->set_gfxdecode_tag(m_gfxdecode);
DECO16IC(config, m_deco_tilegen[1], 0);
- m_deco_tilegen[1]->set_split(0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
diff --git a/src/mame/drivers/deco_ld.cpp b/src/mame/drivers/deco_ld.cpp
index 8caa719787b..c4fe0e9a003 100644
--- a/src/mame/drivers/deco_ld.cpp
+++ b/src/mame/drivers/deco_ld.cpp
@@ -255,7 +255,7 @@ uint32_t deco_ld_state::screen_update_rblaster(screen_device &screen, bitmap_ind
WRITE8_MEMBER(deco_ld_state::decold_sound_cmd_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
diff --git a/src/mame/drivers/deco_mlc.cpp b/src/mame/drivers/deco_mlc.cpp
index d902574728e..b3639af5000 100644
--- a/src/mame/drivers/deco_mlc.cpp
+++ b/src/mame/drivers/deco_mlc.cpp
@@ -507,24 +507,24 @@ void deco_mlc_state::machine_reset()
m_vbl_i = 0xffffffff;
}
-MACHINE_CONFIG_START(deco_mlc_state::avengrgs)
-
+void deco_mlc_state::avengrgs(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD(m_maincpu, SH2, 42000000/2) /* 21 MHz clock confirmed on real board */
- MCFG_DEVICE_PROGRAM_MAP(avengrgs_map)
+ SH2(config, m_maincpu, 42000000/2); /* 21 MHz clock confirmed on real board */
+ m_maincpu->set_addrmap(AS_PROGRAM, &deco_mlc_state::avengrgs_map);
EEPROM_93C46_16BIT(config, m_eeprom); /* Actually 93c45 */
TIMER(config, m_raster_irq_timer).configure_generic(FUNC(deco_mlc_state::interrupt_gen));
/* video hardware */
- MCFG_SCREEN_ADD(m_screen, RASTER)
- MCFG_SCREEN_REFRESH_RATE(58)
- MCFG_SCREEN_SIZE(40*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(deco_mlc_state, screen_update)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, deco_mlc_state, screen_vblank_mlc))
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_SCANLINE)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(58);
+ m_screen->set_size(40*8, 32*8);
+ m_screen->set_visarea(0*8, 40*8-1, 1*8, 31*8-1);
+ m_screen->set_screen_update(FUNC(deco_mlc_state::screen_update));
+ m_screen->screen_vblank().set(FUNC(deco_mlc_state::screen_vblank_mlc));
+ m_screen->set_video_attributes(VIDEO_UPDATE_SCANLINE);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_deco_mlc);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 2048);
@@ -534,29 +534,29 @@ MACHINE_CONFIG_START(deco_mlc_state::avengrgs)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD(m_ymz, YMZ280B, 42000000 / 3)
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(deco_mlc_state::mlc)
+ YMZ280B(config, m_ymz, 42000000 / 3);
+ m_ymz->add_route(0, "lspeaker", 1.0);
+ m_ymz->add_route(1, "rspeaker", 1.0);
+}
+void deco_mlc_state::mlc(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD(m_maincpu, ARM,42000000/6) /* 42 MHz -> 7MHz clock confirmed on real board */
- MCFG_DEVICE_PROGRAM_MAP(decomlc_map)
+ ARM(config, m_maincpu, 42000000/6); /* 42 MHz -> 7MHz clock confirmed on real board */
+ m_maincpu->set_addrmap(AS_PROGRAM, &deco_mlc_state::decomlc_map);
EEPROM_93C46_16BIT(config, m_eeprom); /* Actually 93c45 */
TIMER(config, m_raster_irq_timer).configure_generic(FUNC(deco_mlc_state::interrupt_gen));
/* video hardware */
- MCFG_SCREEN_ADD(m_screen, RASTER)
- MCFG_SCREEN_REFRESH_RATE(58)
- MCFG_SCREEN_SIZE(40*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(deco_mlc_state, screen_update)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, deco_mlc_state, screen_vblank_mlc))
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_SCANLINE)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(58);
+ m_screen->set_size(40*8, 32*8);
+ m_screen->set_visarea(0*8, 40*8-1, 1*8, 31*8-1);
+ m_screen->set_screen_update(FUNC(deco_mlc_state::screen_update));
+ m_screen->screen_vblank().set(FUNC(deco_mlc_state::screen_vblank_mlc));
+ m_screen->set_video_attributes(VIDEO_UPDATE_SCANLINE);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_deco_mlc);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 2048);
@@ -569,10 +569,10 @@ MACHINE_CONFIG_START(deco_mlc_state::mlc)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD(m_ymz, YMZ280B, 42000000 / 3)
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
-MACHINE_CONFIG_END
+ YMZ280B(config, m_ymz, 42000000 / 3);
+ m_ymz->add_route(0, "lspeaker", 1.0);
+ m_ymz->add_route(1, "rspeaker", 1.0);
+}
void deco_mlc_state::mlc_6bpp(machine_config &config)
{
@@ -581,16 +581,16 @@ void deco_mlc_state::mlc_6bpp(machine_config &config)
m_gfxdecode->set_info(gfx_6bpp);
}
-MACHINE_CONFIG_START(deco_mlc_state::mlc_5bpp)
+void deco_mlc_state::mlc_5bpp(machine_config &config)
+{
mlc(config);
m_gfxdecode->set_info(gfx_5bpp);
// TODO: mono? ch.0 doesn't output any sound in-game
- MCFG_DEVICE_MODIFY("ymz")
- MCFG_SOUND_ROUTE(1, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(0, "rspeaker", 1.0)
-MACHINE_CONFIG_END
+ m_ymz->add_route(1, "lspeaker", 1.0);
+ m_ymz->add_route(0, "rspeaker", 1.0);
+}
/***************************************************************************/
diff --git a/src/mame/drivers/decocass.cpp b/src/mame/drivers/decocass.cpp
index 3ef0719f32a..8f86b713c48 100644
--- a/src/mame/drivers/decocass.cpp
+++ b/src/mame/drivers/decocass.cpp
@@ -950,14 +950,14 @@ void decocass_state::decocass_palette(palette_device &palette) const
}
-MACHINE_CONFIG_START(decocass_state::decocass)
-
+void decocass_state::decocass(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", DECO_222, HCLK4) /* the earlier revision board doesn't have the 222 but must have the same thing implemented in logic for the M6502 */
- MCFG_DEVICE_PROGRAM_MAP(decocass_map)
+ DECO_222(config, m_maincpu, HCLK4); /* the earlier revision board doesn't have the 222 but must have the same thing implemented in logic for the M6502 */
+ m_maincpu->set_addrmap(AS_PROGRAM, &decocass_state::decocass_map);
- MCFG_DEVICE_ADD("audiocpu", M6502, HCLK1/3/2)
- MCFG_DEVICE_PROGRAM_MAP(decocass_sound_map)
+ M6502(config, m_audiocpu, HCLK1/3/2);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &decocass_state::decocass_sound_map);
TIMER(config, "audionmi").configure_scanline(FUNC(decocass_state::decocass_audio_nmi_gen), "screen", 0, 8);
I8041(config, m_mcu, HCLK);
@@ -973,10 +973,10 @@ MACHINE_CONFIG_START(decocass_state::decocass)
DECOCASS_TAPE(config, m_cassette, 0);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(HCLK, 384, 0*8, 256, 272, 1*8, 248)
- MCFG_SCREEN_UPDATE_DRIVER(decocass_state, screen_update_decocass)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(HCLK, 384, 0*8, 256, 272, 1*8, 248);
+ m_screen->set_screen_update(FUNC(decocass_state::screen_update_decocass));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_decocass);
PALETTE(config, m_palette, FUNC(decocass_state::decocass_palette), 64, 32);
@@ -990,249 +990,280 @@ MACHINE_CONFIG_START(decocass_state::decocass)
AY8910(config, "ay1", HCLK2).add_route(ALL_OUTPUTS, "mono", 0.40);
AY8910(config, "ay2", HCLK2).add_route(ALL_OUTPUTS, "mono", 0.40);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type1_state::ctsttape)
+void decocass_type1_state::ctsttape(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,ctsttape)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type1_state::cprogolfj)
+void decocass_type1_state::cprogolfj(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,cprogolfj)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type1_state::cdsteljn)
+void decocass_type1_state::cdsteljn(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,cdsteljn)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type1_state::cmanhat)
+void decocass_type1_state::cmanhat(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,cmanhat)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type3_state::cfishing)
+void decocass_type3_state::cfishing(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,cfishing)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type1_state::chwy)
+void decocass_type1_state::chwy(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,chwy)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type1_state::cterrani)
+void decocass_type1_state::cterrani(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,cterrani)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type1_state::castfant)
+void decocass_type1_state::castfant(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,castfant)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type1_state::csuperas)
+void decocass_type1_state::csuperas(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,csuperas)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type1_state::cocean1a) /* 10 */
+void decocass_type1_state::cocean1a(machine_config &config) /* 10 */
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,cocean1a)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type1_state::clocknch)
+void decocass_type1_state::clocknch(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,clocknch)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type1_state::clocknchj)
+void decocass_type1_state::clocknchj(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,clocknchj)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type1_state::cfboy0a1) /* 12 */
+void decocass_type1_state::cfboy0a1(machine_config &config) /* 12 */
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,cfboy0a1)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type1_state::cprogolf)
+void decocass_type1_state::cprogolf(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,cprogolf)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type1_state::cluckypo)
+void decocass_type1_state::cluckypo(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,cluckypo)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type1_state::ctisland)
+void decocass_type1_state::ctisland(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,ctisland)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type1_state::ctisland3)
+void decocass_type1_state::ctisland3(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,ctisland3)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type1_state::cexplore)
+void decocass_type1_state::cexplore(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,cexplore)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type3_state::cbtime)
+void decocass_type3_state::cbtime(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,cbtime)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type3_state::cburnrub)
+void decocass_type3_state::cburnrub(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,cburnrub)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type3_state::cgraplop)
+void decocass_type3_state::cgraplop(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,cgraplop)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type3_state::cgraplop2)
+void decocass_type3_state::cgraplop2(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,cgraplop2)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type3_state::clapapa)
+void decocass_type3_state::clapapa(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,clapapa)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type3_state::cskater)
+void decocass_type3_state::cskater(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,cskater)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type3_state::cprobowl)
+void decocass_type3_state::cprobowl(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,cprobowl)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type3_state::cnightst)
+void decocass_type3_state::cnightst(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,cnightst)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type3_state::cpsoccer)
+void decocass_type3_state::cpsoccer(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,cpsoccer)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type3_state::csdtenis)
+void decocass_type3_state::csdtenis(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,csdtenis)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type3_state::czeroize)
+void decocass_type3_state::czeroize(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,czeroize)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type3_state::cppicf)
+void decocass_type3_state::cppicf(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,cppicf)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decocass_type3_state::cfghtice)
+void decocass_type3_state::cfghtice(machine_config &config)
+{
decocass(config);
/* basic machine hardware */
MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,cfghtice)
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/decstation.cpp b/src/mame/drivers/decstation.cpp
index 93e23d9fb0c..4d7d412e1a9 100644
--- a/src/mame/drivers/decstation.cpp
+++ b/src/mame/drivers/decstation.cpp
@@ -543,7 +543,8 @@ static void dec_scsi_devices(device_slot_interface &device)
device.option_add_internal("asc", NCR53C94);
}
-MACHINE_CONFIG_START(decstation_state::kn01)
+void decstation_state::kn01(machine_config &config)
+{
R2000(config, m_maincpu, 16.67_MHz_XTAL, 65536, 131072);
m_maincpu->set_endianness(ENDIANNESS_LITTLE);
m_maincpu->set_fpu(mips1_device_base::MIPS_R3010Av4);
@@ -565,9 +566,10 @@ MACHINE_CONFIG_START(decstation_state::kn01)
MC146818(config, m_rtc, XTAL(32'768));
m_rtc->set_binary(true);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(decstation_state::kn02ba)
+void decstation_state::kn02ba(machine_config &config)
+{
R3000A(config, m_maincpu, 33.333_MHz_XTAL, 65536, 131072);
m_maincpu->set_endianness(ENDIANNESS_LITTLE);
m_maincpu->set_fpu(mips1_device_base::MIPS_R3010Av4);
@@ -626,7 +628,7 @@ MACHINE_CONFIG_START(decstation_state::kn02ba)
NSCSI_CONNECTOR(config, "scsibus:5", dec_scsi_devices, nullptr);
NSCSI_CONNECTOR(config, "scsibus:6", dec_scsi_devices, nullptr);
NSCSI_CONNECTOR(config, "scsibus:7", dec_scsi_devices, "asc", true).set_option_machine_config("asc", [this] (device_t *device) { ncr5394(device); });
-MACHINE_CONFIG_END
+}
static INPUT_PORTS_START( decstation )
PORT_START("UNUSED") // unused IN0
diff --git a/src/mame/drivers/decwritr.cpp b/src/mame/drivers/decwritr.cpp
index 63d6637136b..bcd83f09b89 100644
--- a/src/mame/drivers/decwritr.cpp
+++ b/src/mame/drivers/decwritr.cpp
@@ -408,25 +408,25 @@ void decwriter_state::machine_reset()
// MACHINE DRIVERS
//**************************************************************************
-MACHINE_CONFIG_START(decwriter_state::la120)
-
- MCFG_DEVICE_ADD("maincpu", I8080A, XTAL(18'000'000) / 9) // 18Mhz xtal on schematics, using an i8224 clock divider/reset sanitizer IC
- MCFG_DEVICE_PROGRAM_MAP(la120_mem)
- MCFG_DEVICE_IO_MAP(la120_io)
- //MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("prtlsi", dc305_device, inta_cb)
+void decwriter_state::la120(machine_config &config)
+{
+ I8080A(config, m_maincpu, XTAL(18'000'000) / 9); // 18Mhz xtal on schematics, using an i8224 clock divider/reset sanitizer IC
+ m_maincpu->set_addrmap(AS_PROGRAM, &decwriter_state::la120_mem);
+ m_maincpu->set_addrmap(AS_IO, &decwriter_state::la120_io);
+ //m_maincpu->set_irq_acknowledge_callback("prtlsi", FUNC(dc305_device::inta_cb));
/* video hardware */
//TODO: no actual screen! has 8 leds above the keyboard (similar to vt100/vk100) and has 4 7segment leds for showing an error code.
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_UPDATE_DRIVER(decwriter_state, screen_update)
- MCFG_SCREEN_SIZE(640,480)
- MCFG_SCREEN_VISIBLE_AREA(0,639, 0,479)
- MCFG_SCREEN_REFRESH_RATE(30)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_screen_update(FUNC(decwriter_state::screen_update));
+ screen.set_size(640,480);
+ screen.set_visarea_full();
+ screen.set_refresh_hz(30);
- //MCFG_DEVICE_ADD("prtlsi", DC305, XTAL(18'000'000) / 9)
- //MCFG_DC305_OUT_RXC_CB(WRITELINE("usart", i8251_device, write_rxc))
- //MCFG_DC305_OUT_TXC_CB(WRITELINE("usart", i8251_device, write_txc))
- //MCFG_DC305_OUT_INT_CB(WRITELINE("mainint", input_merger_device, in_w<0>))
+ //dc305_device &prtlsi(DC305(config, "prtlsi", XTAL(18'000'000) / 9));
+ //prtlsi.out_rxc_cb().set("usart", FUNC(i8251_device, write_rxc));
+ //prtlsi.out_txc_cb().set("usart", FUNC(i8251_device, write_txc));
+ //prtlsi.out_int_cb().set("mainint", FUNC(input_merger_device::in_w<0>));
LS259(config, m_ledlatch); // E2 on keyboard
m_ledlatch->q_out_cb<0>().set_output("led1").invert(); // ON LINE
@@ -442,8 +442,7 @@ MACHINE_CONFIG_START(decwriter_state::la120)
/* audio hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("beeper", BEEP, 786) // TODO: LA120 speaker is controlled by asic; VT100 has: 7.945us per serial clock = ~125865.324hz, / 160 clocks per char = ~ 786 hz
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+ BEEP(config, m_speaker, 786).add_route(ALL_OUTPUTS, "mono", 0.50); // TODO: LA120 speaker is controlled by asic; VT100 has: 7.945us per serial clock = ~125865.324hz, / 160 clocks per char = ~ 786 hz
/* i8251 */
I8251(config, "usart", XTAL(18'000'000) / 9);
@@ -461,7 +460,7 @@ MACHINE_CONFIG_START(decwriter_state::la120)
*/
ER1400(config, m_nvm);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/deshoros.cpp b/src/mame/drivers/deshoros.cpp
index cb489a945da..8dfda215b70 100644
--- a/src/mame/drivers/deshoros.cpp
+++ b/src/mame/drivers/deshoros.cpp
@@ -266,21 +266,21 @@ void destiny_state::machine_reset()
bank_select_w(m_maincpu->space(AS_PROGRAM), 0, 0);
}
-MACHINE_CONFIG_START(destiny_state::destiny)
-
+void destiny_state::destiny(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M6809, XTAL(4'000'000)/2)
- MCFG_DEVICE_PROGRAM_MAP(main_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(destiny_state, irq0_line_hold, 50) // timer irq controls update speed, frequency needs to be determined yet (2MHz through three 74LS390)
+ M6809(config, m_maincpu, XTAL(4'000'000)/2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &destiny_state::main_map);
+ m_maincpu->set_periodic_int(FUNC(destiny_state::irq0_line_hold), attotime::from_hz(50)); // timer irq controls update speed, frequency needs to be determined yet (2MHz through three 74LS390)
/* video hardware (dummy) */
- MCFG_SCREEN_ADD("screen", LCD)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(6*16, 9*2)
- MCFG_SCREEN_VISIBLE_AREA(0, 6*16-1, 0, 9*2-1)
- MCFG_SCREEN_UPDATE_DRIVER(destiny_state, screen_update_destiny)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_size(6*16, 9*2);
+ screen.set_visarea_full();
+ screen.set_screen_update(FUNC(destiny_state::screen_update_destiny));
+ screen.set_palette("palette");
PALETTE(config, "palette", palette_device::MONOCHROME);
@@ -288,7 +288,7 @@ MACHINE_CONFIG_START(destiny_state::destiny)
SPEAKER(config, "mono").front_center();
BEEP(config, m_beeper, 800); // TODO: determine exact frequency thru schematics
m_beeper->add_route(ALL_OUTPUTS, "mono", 0.50);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/destroyr.cpp b/src/mame/drivers/destroyr.cpp
index d51dd8c033c..33c33c66d7b 100644
--- a/src/mame/drivers/destroyr.cpp
+++ b/src/mame/drivers/destroyr.cpp
@@ -465,12 +465,12 @@ void destroyr_state::machine_start()
save_item(NAME(m_potsense));
}
-MACHINE_CONFIG_START(destroyr_state::destroyr)
-
+void destroyr_state::destroyr(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M6800, XTAL(12'096'000) / 16)
- MCFG_DEVICE_PROGRAM_MAP(destroyr_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(destroyr_state, irq0_line_assert, 4*60)
+ M6800(config, m_maincpu, XTAL(12'096'000) / 16);
+ m_maincpu->set_addrmap(AS_PROGRAM, &destroyr_state::destroyr_map);
+ m_maincpu->set_periodic_int(FUNC(destroyr_state::irq0_line_assert), attotime::from_hz(4*60));
f9334_device &outlatch(F9334(config, "outlatch")); // F8
outlatch.q_out_cb<0>().set_output("led0").invert(); // LED 1
@@ -485,18 +485,18 @@ MACHINE_CONFIG_START(destroyr_state::destroyr)
WATCHDOG_TIMER(config, m_watchdog);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_SIZE(256, 262)
- MCFG_SCREEN_VISIBLE_AREA(0, 255, 0, 239)
- MCFG_SCREEN_UPDATE_DRIVER(destroyr_state, screen_update)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_size(256, 262);
+ m_screen->set_visarea(0, 255, 0, 239);
+ m_screen->set_screen_update(FUNC(destroyr_state::screen_update));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_destroyr);
PALETTE(config, m_palette, FUNC(destroyr_state::destroyr_palette), 8);
/* sound hardware */
-MACHINE_CONFIG_END
+}
ROM_START( destroyr )
diff --git a/src/mame/drivers/dfruit.cpp b/src/mame/drivers/dfruit.cpp
index 1d5838668c5..634c4a59914 100644
--- a/src/mame/drivers/dfruit.cpp
+++ b/src/mame/drivers/dfruit.cpp
@@ -371,28 +371,28 @@ TIMER_DEVICE_CALLBACK_MEMBER(dfruit_state::dfruit_irq_scanline)
#define MASTER_CLOCK XTAL(14'000'000)
-MACHINE_CONFIG_START(dfruit_state::dfruit)
-
+void dfruit_state::dfruit(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu",Z80,MASTER_CLOCK/2) //!!! TC0091LVC !!!
- MCFG_DEVICE_PROGRAM_MAP(dfruit_map)
+ Z80(config, m_maincpu, MASTER_CLOCK/2); //!!! TC0091LVC !!!
+ m_maincpu->set_addrmap(AS_PROGRAM, &dfruit_state::dfruit_map);
TIMER(config, "scantimer").configure_scanline(FUNC(dfruit_state::dfruit_irq_scanline), "screen", 0, 1);
//MCFG_MACHINE_START_OVERRIDE(dfruit_state,4enraya)
//MCFG_MACHINE_RESET_OVERRIDE(dfruit_state,4enraya)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(dfruit_state, screen_update)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, dfruit_state, screen_vblank))
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(0*8, 40*8-1, 2*8, 30*8-1);
+ screen.set_screen_update(FUNC(dfruit_state::screen_update));
+ screen.screen_vblank().set(FUNC(dfruit_state::screen_vblank));
+ screen.set_palette("palette");
GFXDECODE(config, "gfxdecode", "palette", gfx_dfruit);
- MCFG_PALETTE_ADD("palette", 0x100)
+ PALETTE(config, "palette").set_entries(0x100);
TC0091LVC(config, m_vdp, 0);
m_vdp->set_gfxdecode_tag("gfxdecode");
@@ -408,7 +408,7 @@ MACHINE_CONFIG_START(dfruit_state::dfruit)
opn.port_a_read_callback().set_ioport("IN4");
opn.port_b_read_callback().set_ioport("IN5");
opn.add_route(ALL_OUTPUTS, "mono", 0.30);
-MACHINE_CONFIG_END
+}
/***************************************************************************
diff --git a/src/mame/drivers/dgpix.cpp b/src/mame/drivers/dgpix.cpp
index ad3d02361e2..7e855c2e3c3 100644
--- a/src/mame/drivers/dgpix.cpp
+++ b/src/mame/drivers/dgpix.cpp
@@ -431,10 +431,11 @@ void dgpix_state::machine_reset()
}
-MACHINE_CONFIG_START(dgpix_state::dgpix)
- MCFG_DEVICE_ADD("maincpu", E132XT, 20000000*4) /* 4x internal multiplier */
- MCFG_DEVICE_PROGRAM_MAP(cpu_map)
- MCFG_DEVICE_IO_MAP(io_map)
+void dgpix_state::dgpix(machine_config &config)
+{
+ E132XT(config, m_maincpu, 20000000*4); /* 4x internal multiplier */
+ m_maincpu->set_addrmap(AS_PROGRAM, &dgpix_state::cpu_map);
+ m_maincpu->set_addrmap(AS_IO, &dgpix_state::io_map);
/*
unknown 16bit sound cpu, embedded inside the KS0164 sound chip
@@ -444,19 +445,19 @@ MACHINE_CONFIG_START(dgpix_state::dgpix)
NVRAM(config, "nvram", nvram_device::DEFAULT_NONE);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(512, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 319, 0, 239)
- MCFG_SCREEN_UPDATE_DRIVER(dgpix_state, screen_update_dgpix)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(512, 256);
+ screen.set_visarea(0, 319, 0, 239);
+ screen.set_screen_update(FUNC(dgpix_state::screen_update_dgpix));
+ screen.set_palette("palette");
PALETTE(config, "palette", palette_device::BGR_555);
/* sound hardware */
// KS0164 sound chip
-MACHINE_CONFIG_END
+}
/*
diff --git a/src/mame/drivers/diablo1300.cpp b/src/mame/drivers/diablo1300.cpp
index 868a3f7867b..692ad0730c5 100644
--- a/src/mame/drivers/diablo1300.cpp
+++ b/src/mame/drivers/diablo1300.cpp
@@ -176,12 +176,13 @@ void diablo1300_state::machine_reset()
{
}
-MACHINE_CONFIG_START( diablo1300_state::diablo1300 )
+void diablo1300_state::diablo1300(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", DIABLO1300, XTAL(1'689'600))
- MCFG_DEVICE_PROGRAM_MAP(diablo1300_map)
- MCFG_DEVICE_DATA_MAP(diablo1300_data_map)
-MACHINE_CONFIG_END
+ DIABLO1300(config, m_maincpu, XTAL(1'689'600));
+ m_maincpu->set_addrmap(AS_PROGRAM, &diablo1300_state::diablo1300_map);
+ m_maincpu->set_addrmap(AS_DATA, &diablo1300_state::diablo1300_data_map);
+}
ROM_START( diablo )
ROM_REGION( 0x10000, "maincpu", ROMREGION_16BIT )
diff --git a/src/mame/drivers/didact.cpp b/src/mame/drivers/didact.cpp
index d0b969a2a5f..0fa835eb64f 100644
--- a/src/mame/drivers/didact.cpp
+++ b/src/mame/drivers/didact.cpp
@@ -649,8 +649,8 @@ void modulab_state::modulab_map(address_map &map)
// map(0x0800, 0x13ff).ram().mirror(0xe000); // expansion port area consisting of 3 chip selects each selecting 0x3ff byte addresses
map(0x1400, 0x17ff).rom().mirror(0xe000).region("maincpu", 0x0000);
map(0x1800, 0x187f).rw(FUNC(modulab_state::io_r), FUNC(modulab_state::io_w)).mirror(0xe200);
- map(0x1900, 0x197f).rw(m_pia1, FUNC(ins8154_device::ins8154_r), FUNC(ins8154_device::ins8154_w)).mirror(0xe200);
- map(0x1980, 0x19ff).ram().mirror(0xe200); // 8154 internal RAM
+ map(0x1900, 0x197f).rw(m_pia1, FUNC(ins8154_device::read_io), FUNC(ins8154_device::write_io)).mirror(0xe200);
+ map(0x1980, 0x19ff).rw(m_pia1, FUNC(ins8154_device::read_ram), FUNC(ins8154_device::write_ram)).mirror(0xe200);
map(0x1c00, 0x1fff).rom().mirror(0xe000).region("maincpu", 0x0400);
}
diff --git a/src/mame/drivers/dietgo.cpp b/src/mame/drivers/dietgo.cpp
index 5243065a098..656aa5e8d18 100644
--- a/src/mame/drivers/dietgo.cpp
+++ b/src/mame/drivers/dietgo.cpp
@@ -205,33 +205,32 @@ DECO16IC_BANK_CB_MEMBER(dietgo_state::bank_callback)
return (bank & 0x70) << 8;
}
-MACHINE_CONFIG_START(dietgo_state::dietgo)
-
+void dietgo_state::dietgo(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(28'000'000)/2) /* DE102 (verified on pcb) */
- MCFG_DEVICE_PROGRAM_MAP(dietgo_map)
- MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dietgo_state, irq6_line_hold)
+ M68000(config, m_maincpu, XTAL(28'000'000)/2); /* DE102 (verified on pcb) */
+ m_maincpu->set_addrmap(AS_PROGRAM, &dietgo_state::dietgo_map);
+ m_maincpu->set_addrmap(AS_OPCODES, &dietgo_state::decrypted_opcodes_map);
+ m_maincpu->set_vblank_int("screen", FUNC(dietgo_state::irq6_line_hold));
H6280(config, m_audiocpu, XTAL(32'220'000)/4/3); /* Custom chip 45; XIN is 32.220MHZ/4, verified on pcb */
m_audiocpu->set_addrmap(AS_PROGRAM, &dietgo_state::sound_map);
m_audiocpu->add_route(ALL_OUTPUTS, "mono", 0); // internal sound unused
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(58)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(40*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(dietgo_state, screen_update)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(58);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(40*8, 32*8);
+ screen.set_visarea(0*8, 40*8-1, 1*8, 31*8-1);
+ screen.set_screen_update(FUNC(dietgo_state::screen_update));
+ screen.set_palette("palette");
PALETTE(config, "palette").set_format(palette_device::xBGR_888, 1024);
GFXDECODE(config, "gfxdecode", "palette", gfx_dietgo);
DECO16IC(config, m_deco_tilegen, 0);
- m_deco_tilegen->set_split(0);
m_deco_tilegen->set_pf1_size(DECO_64x32);
m_deco_tilegen->set_pf2_size(DECO_64x32);
m_deco_tilegen->set_pf1_trans_mask(0x0f);
@@ -265,9 +264,8 @@ MACHINE_CONFIG_START(dietgo_state::dietgo)
ymsnd.irq_handler().set_inputline(m_audiocpu, 1); /* IRQ2 */
ymsnd.add_route(ALL_OUTPUTS, "mono", 0.45);
- MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(32'220'000)/32, okim6295_device::PIN7_HIGH) /* verified on pcb */
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
-MACHINE_CONFIG_END
+ OKIM6295(config, "oki", XTAL(32'220'000)/32, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.60); /* verified on pcb */
+}
/* Diet Go Go */
diff --git a/src/mame/drivers/digel804.cpp b/src/mame/drivers/digel804.cpp
index fc01f97e320..254f36741dc 100644
--- a/src/mame/drivers/digel804.cpp
+++ b/src/mame/drivers/digel804.cpp
@@ -631,11 +631,12 @@ WRITE_LINE_MEMBER( ep804_state::ep804_acia_irq_w )
{
}
-MACHINE_CONFIG_START(digel804_state::digel804)
+void digel804_state::digel804(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD(m_maincpu, Z80, 3.6864_MHz_XTAL/2) /* Z80A, X1(aka E0 on schematics): 3.6864Mhz */
- MCFG_DEVICE_PROGRAM_MAP(z80_mem_804_1_4)
- MCFG_DEVICE_IO_MAP(z80_io_1_4)
+ Z80(config, m_maincpu, 3.6864_MHz_XTAL/2); /* Z80A, X1(aka E0 on schematics): 3.6864Mhz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &digel804_state::z80_mem_804_1_4);
+ m_maincpu->set_addrmap(AS_IO, &digel804_state::z80_io_1_4);
config.m_minimum_quantum = attotime::from_hz(60);
ROC10937(config, m_vfd); // RIGHT_TO_LEFT
@@ -669,9 +670,8 @@ MACHINE_CONFIG_START(digel804_state::digel804)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
-MACHINE_CONFIG_END
+ SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
+}
void ep804_state::ep804(machine_config &config)
{
diff --git a/src/mame/drivers/digijet.cpp b/src/mame/drivers/digijet.cpp
index 21da2bc0113..f7644ae3353 100644
--- a/src/mame/drivers/digijet.cpp
+++ b/src/mame/drivers/digijet.cpp
@@ -50,11 +50,12 @@ void digijet_state::io_map(address_map &map)
static INPUT_PORTS_START( digijet )
INPUT_PORTS_END
-MACHINE_CONFIG_START(digijet_state::digijet)
+void digijet_state::digijet(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD(I8049_TAG, I8049, XTAL(11'000'000))
- MCFG_DEVICE_IO_MAP(io_map)
-MACHINE_CONFIG_END
+ I8049(config, m_maincpu, XTAL(11'000'000));
+ m_maincpu->set_addrmap(AS_IO, &digijet_state::io_map);
+}
ROM_START( digijet )
ROM_REGION( 0x800, I8049_TAG, 0 )
diff --git a/src/mame/drivers/dim68k.cpp b/src/mame/drivers/dim68k.cpp
index c9d74be39ab..ab51d8c4d88 100644
--- a/src/mame/drivers/dim68k.cpp
+++ b/src/mame/drivers/dim68k.cpp
@@ -311,25 +311,25 @@ void dim68k_state::kbd_put(u8 data)
m_term_data = data;
}
-MACHINE_CONFIG_START(dim68k_state::dim68k)
+void dim68k_state::dim68k(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(10'000'000))
- MCFG_DEVICE_PROGRAM_MAP(dim68k_mem)
+ M68000(config, m_maincpu, XTAL(10'000'000));
+ m_maincpu->set_addrmap(AS_PROGRAM, &dim68k_state::dim68k_mem);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
- MCFG_SCREEN_SIZE(640, 480)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 250-1)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update));
+ screen.set_size(640, 480);
+ screen.set_visarea(0, 640-1, 0, 250-1);
PALETTE(config, m_palette, palette_device::MONOCHROME);
GFXDECODE(config, "gfxdecode", m_palette, gfx_dim68k);
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+ SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.50);
/* Devices */
UPD765A(config, "fdc", 8'000'000, true, true); // these options unknown
@@ -347,7 +347,7 @@ MACHINE_CONFIG_START(dim68k_state::dim68k)
// software lists
SOFTWARE_LIST(config, "flop_list").set_original("dim68k");
-MACHINE_CONFIG_END
+}
/*
68000
diff --git a/src/mame/drivers/divebomb.cpp b/src/mame/drivers/divebomb.cpp
index a0002de0685..c33052b34a1 100644
--- a/src/mame/drivers/divebomb.cpp
+++ b/src/mame/drivers/divebomb.cpp
@@ -386,19 +386,19 @@ GFXDECODE_END
*
*************************************/
-MACHINE_CONFIG_START(divebomb_state::divebomb)
-
- MCFG_DEVICE_ADD("fgcpu", Z80,XTAL1/4) // ?
- MCFG_DEVICE_PROGRAM_MAP(divebomb_fgcpu_map)
- MCFG_DEVICE_IO_MAP(divebomb_fgcpu_iomap)
+void divebomb_state::divebomb(machine_config &config)
+{
+ Z80(config, m_fgcpu, XTAL1/4); // ?
+ m_fgcpu->set_addrmap(AS_PROGRAM, &divebomb_state::divebomb_fgcpu_map);
+ m_fgcpu->set_addrmap(AS_IO, &divebomb_state::divebomb_fgcpu_iomap);
- MCFG_DEVICE_ADD("spritecpu", Z80,XTAL1/4) // ?
- MCFG_DEVICE_PROGRAM_MAP(divebomb_spritecpu_map)
- MCFG_DEVICE_IO_MAP(divebomb_spritecpu_iomap)
+ Z80(config, m_spritecpu, XTAL1/4); // ?
+ m_spritecpu->set_addrmap(AS_PROGRAM, &divebomb_state::divebomb_spritecpu_map);
+ m_spritecpu->set_addrmap(AS_IO, &divebomb_state::divebomb_spritecpu_iomap);
- MCFG_DEVICE_ADD("rozcpu", Z80,XTAL1/4) // ?
- MCFG_DEVICE_PROGRAM_MAP(divebomb_rozcpu_map)
- MCFG_DEVICE_IO_MAP(divebomb_rozcpu_iomap)
+ Z80(config, m_rozcpu, XTAL1/4); // ?
+ m_rozcpu->set_addrmap(AS_PROGRAM, &divebomb_state::divebomb_rozcpu_map);
+ m_rozcpu->set_addrmap(AS_IO, &divebomb_state::divebomb_rozcpu_iomap);
config.m_perfect_cpu_quantum = subtag("fgcpu");
@@ -452,19 +452,13 @@ MACHINE_CONFIG_START(divebomb_state::divebomb)
SPEAKER(config, "mono").front_center();
// All frequencies unverified
- MCFG_DEVICE_ADD("sn0", SN76489, XTAL1/8)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
- MCFG_DEVICE_ADD("sn1", SN76489, XTAL1/8)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
- MCFG_DEVICE_ADD("sn2", SN76489, XTAL1/8)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
- MCFG_DEVICE_ADD("sn3", SN76489, XTAL1/8)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
- MCFG_DEVICE_ADD("sn4", SN76489, XTAL1/8)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
- MCFG_DEVICE_ADD("sn5", SN76489, XTAL1/8)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
-MACHINE_CONFIG_END
+ SN76489(config, "sn0", XTAL1/8).add_route(ALL_OUTPUTS, "mono", 0.15);
+ SN76489(config, "sn1", XTAL1/8).add_route(ALL_OUTPUTS, "mono", 0.15);
+ SN76489(config, "sn2", XTAL1/8).add_route(ALL_OUTPUTS, "mono", 0.15);
+ SN76489(config, "sn3", XTAL1/8).add_route(ALL_OUTPUTS, "mono", 0.15);
+ SN76489(config, "sn4", XTAL1/8).add_route(ALL_OUTPUTS, "mono", 0.15);
+ SN76489(config, "sn5", XTAL1/8).add_route(ALL_OUTPUTS, "mono", 0.15);
+}
diff --git a/src/mame/drivers/diverboy.cpp b/src/mame/drivers/diverboy.cpp
index 2d40f4bb4c9..304cacca37e 100644
--- a/src/mame/drivers/diverboy.cpp
+++ b/src/mame/drivers/diverboy.cpp
@@ -151,7 +151,7 @@ WRITE16_MEMBER(diverboy_state::soundcmd_w)
{
if (ACCESSING_BITS_0_7)
{
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
}
@@ -274,25 +274,25 @@ void diverboy_state::machine_start()
{
}
-MACHINE_CONFIG_START(diverboy_state::diverboy)
-
- MCFG_DEVICE_ADD("maincpu", M68000, 12000000) /* guess */
- MCFG_DEVICE_PROGRAM_MAP(diverboy_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", diverboy_state, irq6_line_hold)
+void diverboy_state::diverboy(machine_config &config)
+{
+ M68000(config, m_maincpu, 12000000); /* guess */
+ m_maincpu->set_addrmap(AS_PROGRAM, &diverboy_state::diverboy_map);
+ m_maincpu->set_vblank_int("screen", FUNC(diverboy_state::irq6_line_hold));
- MCFG_DEVICE_ADD("audiocpu", Z80, 4000000)
- MCFG_DEVICE_PROGRAM_MAP(snd_map)
+ Z80(config, m_audiocpu, 4000000);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &diverboy_state::snd_map);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_diverboy);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8+4, 40*8+1, 2*8, 32*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(diverboy_state, screen_update_diverboy)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ m_screen->set_size(64*8, 32*8);
+ m_screen->set_visarea(0*8+4, 40*8+1, 2*8, 32*8-1);
+ m_screen->set_screen_update(FUNC(diverboy_state::screen_update_diverboy));
+ m_screen->set_palette(m_palette);
PALETTE(config, m_palette).set_format(palette_device::xBGR_444, 0x400);
@@ -301,9 +301,8 @@ MACHINE_CONFIG_START(diverboy_state::diverboy)
GENERIC_LATCH_8(config, m_soundlatch);
- MCFG_DEVICE_ADD("oki", OKIM6295, 1320000, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
-MACHINE_CONFIG_END
+ OKIM6295(config, m_oki, 1320000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.50); // clock frequency & pin 7 not verified
+}
/*
diff --git a/src/mame/drivers/djboy.cpp b/src/mame/drivers/djboy.cpp
index e9f84591e37..c6e8dcdcea1 100644
--- a/src/mame/drivers/djboy.cpp
+++ b/src/mame/drivers/djboy.cpp
@@ -273,11 +273,11 @@ WRITE8_MEMBER(djboy_state::beast_p0_w)
{
if (!BIT(m_beast_p0, 1) && BIT(data, 1))
{
- m_slavelatch->write(space, 0, m_beast_p1);
+ m_slavelatch->write(m_beast_p1);
}
if (BIT(data, 0) == 0)
- m_beastlatch->acknowledge_w(space, 0, data);
+ m_beastlatch->acknowledge_w();
m_beast_p0 = data;
}
@@ -285,7 +285,7 @@ WRITE8_MEMBER(djboy_state::beast_p0_w)
READ8_MEMBER(djboy_state::beast_p1_r)
{
if (BIT(m_beast_p0, 0) == 0)
- return m_beastlatch->read(space, 0);
+ return m_beastlatch->read();
else
return 0; // ?
}
@@ -478,22 +478,22 @@ void djboy_state::machine_reset()
m_scrolly = 0;
}
-MACHINE_CONFIG_START(djboy_state::djboy)
-
- MCFG_DEVICE_ADD("mastercpu", Z80, 12_MHz_XTAL / 2) // 6.000MHz, verified
- MCFG_DEVICE_PROGRAM_MAP(mastercpu_am)
- MCFG_DEVICE_IO_MAP(mastercpu_port_am)
+void djboy_state::djboy(machine_config &config)
+{
+ Z80(config, m_mastercpu, 12_MHz_XTAL / 2); // 6.000MHz, verified
+ m_mastercpu->set_addrmap(AS_PROGRAM, &djboy_state::mastercpu_am);
+ m_mastercpu->set_addrmap(AS_IO, &djboy_state::mastercpu_port_am);
TIMER(config, "scantimer").configure_scanline(FUNC(djboy_state::djboy_scanline), "screen", 0, 1);
- MCFG_DEVICE_ADD("slavecpu", Z80, 12_MHz_XTAL / 2) // 6.000MHz, verified
- MCFG_DEVICE_PROGRAM_MAP(slavecpu_am)
- MCFG_DEVICE_IO_MAP(slavecpu_port_am)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", djboy_state, irq0_line_hold)
+ Z80(config, m_slavecpu, 12_MHz_XTAL / 2); // 6.000MHz, verified
+ m_slavecpu->set_addrmap(AS_PROGRAM, &djboy_state::slavecpu_am);
+ m_slavecpu->set_addrmap(AS_IO, &djboy_state::slavecpu_port_am);
+ m_slavecpu->set_vblank_int("screen", FUNC(djboy_state::irq0_line_hold));
- MCFG_DEVICE_ADD("soundcpu", Z80, 12_MHz_XTAL / 2) // 6.000MHz, verified
- MCFG_DEVICE_PROGRAM_MAP(soundcpu_am)
- MCFG_DEVICE_IO_MAP(soundcpu_port_am)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", djboy_state, irq0_line_hold)
+ Z80(config, m_soundcpu, 12_MHz_XTAL / 2); // 6.000MHz, verified
+ m_soundcpu->set_addrmap(AS_PROGRAM, &djboy_state::soundcpu_am);
+ m_soundcpu->set_addrmap(AS_IO, &djboy_state::soundcpu_port_am);
+ m_soundcpu->set_vblank_int("screen", FUNC(djboy_state::irq0_line_hold));
I80C51(config, m_beast, 12_MHz_XTAL / 2); // 6.000MHz, verified
m_beast->port_in_cb<0>().set(FUNC(djboy_state::beast_p0_r));
@@ -513,17 +513,17 @@ MACHINE_CONFIG_START(djboy_state::djboy)
m_beastlatch->data_pending_callback().set_inputline(m_beast, INPUT_LINE_IRQ0);
m_beastlatch->set_separate_acknowledge(true);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(57.5)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(256, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 256-16-1)
- MCFG_SCREEN_UPDATE_DRIVER(djboy_state, screen_update_djboy)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, djboy_state, screen_vblank_djboy))
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(57.5);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(256, 256);
+ screen.set_visarea(0, 256-1, 16, 256-16-1);
+ screen.set_screen_update(FUNC(djboy_state::screen_update_djboy));
+ screen.screen_vblank().set(FUNC(djboy_state::screen_vblank_djboy));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_djboy);
- MCFG_PALETTE_ADD("palette", 0x200)
+ PALETTE(config, m_palette).set_entries(0x200);
KANEKO_PANDORA(config, m_pandora, 0);
m_pandora->set_gfxdecode_tag(m_gfxdecode);
@@ -534,18 +534,18 @@ MACHINE_CONFIG_START(djboy_state::djboy)
GENERIC_LATCH_8(config, m_soundlatch);
m_soundlatch->data_pending_callback().set_inputline(m_soundcpu, INPUT_LINE_NMI);
- MCFG_DEVICE_ADD("ymsnd", YM2203, 12_MHz_XTAL / 4) // 3.000MHz, verified
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.40)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40)
+ ym2203_device &ymsnd(YM2203(config, "ymsnd", 12_MHz_XTAL / 4)); // 3.000MHz, verified
+ ymsnd.add_route(ALL_OUTPUTS, "lspeaker", 0.40);
+ ymsnd.add_route(ALL_OUTPUTS, "rspeaker", 0.40);
- MCFG_DEVICE_ADD("oki_l", OKIM6295, 12_MHz_XTAL / 8, okim6295_device::PIN7_LOW) // 1.500MHz, verified
- MCFG_DEVICE_ROM("oki")
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50)
+ okim6295_device &oki_l(OKIM6295(config, "oki_l", 12_MHz_XTAL / 8, okim6295_device::PIN7_LOW)); // 1.500MHz, verified
+ oki_l.set_device_rom_tag("oki");
+ oki_l.add_route(ALL_OUTPUTS, "lspeaker", 0.50);
- MCFG_DEVICE_ADD("oki_r", OKIM6295, 12_MHz_XTAL / 8, okim6295_device::PIN7_LOW) // 1.500MHz, verified
- MCFG_DEVICE_ROM("oki")
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50)
-MACHINE_CONFIG_END
+ okim6295_device &oki_r(OKIM6295(config, "oki_r", 12_MHz_XTAL / 8, okim6295_device::PIN7_LOW)); // 1.500MHz, verified
+ oki_r.set_device_rom_tag("oki");
+ oki_r.add_route(ALL_OUTPUTS, "rspeaker", 0.50);
+}
ROM_START( djboy )
diff --git a/src/mame/drivers/djmain.cpp b/src/mame/drivers/djmain.cpp
index 1239d9c5df1..11354990fbc 100644
--- a/src/mame/drivers/djmain.cpp
+++ b/src/mame/drivers/djmain.cpp
@@ -1379,25 +1379,25 @@ void djmain_state::machine_reset()
*
*************************************/
-MACHINE_CONFIG_START(djmain_state::djmainj)
-
+void djmain_state::djmainj(machine_config &config)
+{
/* basic machine hardware */
// popn3 works 9.6 MHz or slower in some songs */
- //MCFG_DEVICE_ADD("maincpu", M68EC020, 18432000/2) /* 9.216 MHz!? */
- MCFG_DEVICE_ADD("maincpu", M68EC020, 32000000/4) /* 8.000 MHz!? */
- MCFG_DEVICE_PROGRAM_MAP(maincpu_djmainj)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", djmain_state, vb_interrupt)
+ //M68EC020(config, m_maincpu, 18432000/2); /* 9.216 MHz!? */
+ M68EC020(config, m_maincpu, 32000000/4); /* 8.000 MHz!? */
+ m_maincpu->set_addrmap(AS_PROGRAM, &djmain_state::maincpu_djmainj);
+ m_maincpu->set_vblank_int("screen", FUNC(djmain_state::vb_interrupt));
ATA_INTERFACE(config, m_ata).options(ata_devices, "hdd", nullptr, true);
m_ata->irq_handler().set(FUNC(djmain_state::ide_interrupt));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(58)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(64*8, 64*8)
- MCFG_SCREEN_VISIBLE_AREA(12, 512-12-1, 0, 384-1)
- MCFG_SCREEN_UPDATE_DRIVER(djmain_state, screen_update_djmain)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(58);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(64*8, 64*8);
+ screen.set_visarea(12, 512-12-1, 0, 384-1);
+ screen.set_screen_update(FUNC(djmain_state::screen_update_djmain));
PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 0x4440 / 4);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_djmain);
@@ -1413,28 +1413,28 @@ MACHINE_CONFIG_START(djmain_state::djmainj)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("k054539_1", K054539, XTAL(18'432'000))
- MCFG_DEVICE_ADDRESS_MAP(0, k054539_map)
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
+ k054539_device &k054539_1(K054539(config, "k054539_1", XTAL(18'432'000)));
+ k054539_1.set_addrmap(0, &djmain_state::k054539_map);
+ k054539_1.add_route(0, "lspeaker", 1.0);
+ k054539_1.add_route(1, "rspeaker", 1.0);
- MCFG_DEVICE_ADD("k054539_2", K054539, XTAL(18'432'000))
- MCFG_DEVICE_ADDRESS_MAP(0, k054539_map)
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
-MACHINE_CONFIG_END
+ k054539_device &k054539_2(K054539(config, "k054539_2", XTAL(18'432'000)));
+ k054539_2.set_addrmap(0, &djmain_state::k054539_map);
+ k054539_2.add_route(0, "lspeaker", 1.0);
+ k054539_2.add_route(1, "rspeaker", 1.0);
+}
-MACHINE_CONFIG_START(djmain_state::djmainu)
+void djmain_state::djmainu(machine_config &config)
+{
djmainj(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(maincpu_djmainu)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &djmain_state::maincpu_djmainu);
+}
-MACHINE_CONFIG_START(djmain_state::djmaina)
+void djmain_state::djmaina(machine_config &config)
+{
djmainj(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(maincpu_djmaina)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &djmain_state::maincpu_djmaina);
+}
diff --git a/src/mame/drivers/dkmb.cpp b/src/mame/drivers/dkmb.cpp
index 617f45138cf..02684188d89 100644
--- a/src/mame/drivers/dkmb.cpp
+++ b/src/mame/drivers/dkmb.cpp
@@ -119,24 +119,24 @@ static INPUT_PORTS_START( dkmb )
INPUT_PORTS_END
-MACHINE_CONFIG_START(dkmb_state::dkmb)
-
- MCFG_DEVICE_ADD("maincpu", PPC603R, 75'000'000) // Actually MPC603RRX266LC
- MCFG_DEVICE_PROGRAM_MAP(main_map)
+void dkmb_state::dkmb(machine_config &config)
+{
+ PPC603R(config, m_maincpu, 75'000'000); // Actually MPC603RRX266LC
+ m_maincpu->set_addrmap(AS_PROGRAM, &dkmb_state::main_map);
- MCFG_DEVICE_ADD("pic", PIC16C56, 4'000'000) // Actually PIC12C508, clock not verified
+ PIC16C56(config, "pic", 4'000'000); // Actually PIC12C508, clock not verified
- MCFG_SCREEN_ADD("screen", RASTER) // wrong
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_UPDATE_DRIVER(dkmb_state, screen_update)
- MCFG_SCREEN_SIZE(1024, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 256-1)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); // wrong
+ screen.set_refresh_hz(60);
+ screen.set_screen_update(FUNC(dkmb_state::screen_update));
+ screen.set_size(1024, 256);
+ screen.set_visarea_full();
- MCFG_PALETTE_ADD("palette", 65536)
+ PALETTE(config, "palette").set_entries(65536);
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
-MACHINE_CONFIG_END
+}
ROM_START( dkmb )
diff --git a/src/mame/drivers/dkong.cpp b/src/mame/drivers/dkong.cpp
index 55af4b84ce7..9be28348ab8 100644
--- a/src/mame/drivers/dkong.cpp
+++ b/src/mame/drivers/dkong.cpp
@@ -1692,11 +1692,11 @@ WRITE_LINE_MEMBER(dkong_state::busreq_w )
m_dma8257->hlda_w(state);
}
-MACHINE_CONFIG_START(dkong_state::dkong_base)
-
+void dkong_state::dkong_base(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD(m_maincpu, Z80, CLOCK_1H)
- MCFG_DEVICE_PROGRAM_MAP(dkong_map)
+ Z80(config, m_maincpu, CLOCK_1H);
+ m_maincpu->set_addrmap(AS_PROGRAM, &dkong_state::dkong_map);
MCFG_MACHINE_START_OVERRIDE(dkong_state,dkong2b)
MCFG_MACHINE_RESET_OVERRIDE(dkong_state,dkong)
@@ -1710,19 +1710,20 @@ MACHINE_CONFIG_START(dkong_state::dkong_base)
m_dma8257->set_reverse_rw_mode(1); // why?
/* video hardware */
- MCFG_SCREEN_ADD(m_screen, RASTER)
- MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART)
- MCFG_SCREEN_UPDATE_DRIVER(dkong_state, screen_update_dkong)
- MCFG_SCREEN_PALETTE(m_palette)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, dkong_state, vblank_irq))
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART);
+ m_screen->set_screen_update(FUNC(dkong_state::screen_update_dkong));
+ m_screen->set_palette(m_palette);
+ m_screen->screen_vblank().set(FUNC(dkong_state::vblank_irq));
GFXDECODE(config, m_gfxdecode, m_palette, gfx_dkong);
PALETTE(config, m_palette, FUNC(dkong_state::dkong2b_palette), DK2B_PALETTE_LENGTH);
MCFG_VIDEO_START_OVERRIDE(dkong_state,dkong)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(dkong_state::radarscp)
+void dkong_state::radarscp(machine_config &config)
+{
dkong_base(config);
/* basic machine hardware */
@@ -1732,9 +1733,10 @@ MACHINE_CONFIG_START(dkong_state::radarscp)
/* sound hardware */
radarscp_audio(config);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(dkong_state::radarscp1)
+void dkong_state::radarscp1(machine_config &config)
+{
dkong_base(config);
/* basic machine hardware */
@@ -1744,10 +1746,11 @@ MACHINE_CONFIG_START(dkong_state::radarscp1)
/* sound hardware */
radarscp1_audio(config);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(dkong_state::dkong2b)
+void dkong_state::dkong2b(machine_config &config)
+{
dkong_base(config);
/* basic machine hardware */
@@ -1758,7 +1761,7 @@ MACHINE_CONFIG_START(dkong_state::dkong2b)
dkong2b_audio(config);
WATCHDOG_TIMER(config, m_watchdog);
-MACHINE_CONFIG_END
+}
void dkong_state::dk_braze(machine_config &config)
{
@@ -1788,12 +1791,12 @@ void dkong_state::dk3_braze(machine_config &config)
EEPROM_93C46_8BIT(config, "eeprom");
}
-MACHINE_CONFIG_START(dkong_state::dkong3)
-
+void dkong_state::dkong3(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD(m_maincpu, Z80, XTAL(8'000'000) / 2) /* verified in schematics */
- MCFG_DEVICE_PROGRAM_MAP(dkong3_map)
- MCFG_DEVICE_IO_MAP(dkong3_io_map)
+ Z80(config, m_maincpu, XTAL(8'000'000) / 2); /* verified in schematics */
+ m_maincpu->set_addrmap(AS_PROGRAM, &dkong_state::dkong3_map);
+ m_maincpu->set_addrmap(AS_IO, &dkong_state::dkong3_io_map);
MCFG_MACHINE_START_OVERRIDE(dkong_state, dkong3)
@@ -1818,27 +1821,28 @@ MACHINE_CONFIG_START(dkong_state::dkong3)
/* sound hardware */
dkong3_audio(config);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(dkong_state::dkongjr)
+void dkong_state::dkongjr(machine_config &config)
+{
dkong_base(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(dkongjr_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &dkong_state::dkongjr_map);
/* sound hardware */
dkongjr_audio(config);
WATCHDOG_TIMER(config, m_watchdog);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(dkong_state::pestplce)
+void dkong_state::pestplce(machine_config &config)
+{
dkongjr(config);
/* video hardware */
m_palette->set_init(FUNC(dkong_state::dkong2b_palette)); // wrong!
m_screen->set_screen_update(FUNC(dkong_state::screen_update_pestplce));
-MACHINE_CONFIG_END
+}
void dkong_state::dkong3b(machine_config &config)
{
@@ -1893,35 +1897,35 @@ void dkong_state::spclforc(machine_config &config)
*
*************************************/
-MACHINE_CONFIG_START(dkong_state::strtheat)
+void dkong_state::strtheat(machine_config &config)
+{
dkong2b(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_IO_MAP(epos_readport)
+ m_maincpu->set_addrmap(AS_IO, &dkong_state::epos_readport);
MCFG_MACHINE_RESET_OVERRIDE(dkong_state,strtheat)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(dkong_state::drakton)
+void dkong_state::drakton(machine_config &config)
+{
dkong2b(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_IO_MAP(epos_readport)
+ m_maincpu->set_addrmap(AS_IO, &dkong_state::epos_readport);
MCFG_MACHINE_RESET_OVERRIDE(dkong_state,drakton)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(dkong_state::drktnjr)
+void dkong_state::drktnjr(machine_config &config)
+{
dkongjr(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_IO_MAP(epos_readport)
+ m_maincpu->set_addrmap(AS_IO, &dkong_state::epos_readport);
MCFG_MACHINE_RESET_OVERRIDE(dkong_state,drakton)
-MACHINE_CONFIG_END
+}
/*************************************
*
diff --git a/src/mame/drivers/dlair2.cpp b/src/mame/drivers/dlair2.cpp
index 2ce7003e0d7..daf30d47ebb 100644
--- a/src/mame/drivers/dlair2.cpp
+++ b/src/mame/drivers/dlair2.cpp
@@ -183,22 +183,22 @@ INTERRUPT_GEN_MEMBER(dlair2_state::dlair2_timer_irq)
device.execute().set_input_line_and_vector(0,HOLD_LINE,0x20/4);
}
-MACHINE_CONFIG_START(dlair2_state::dlair2)
-
+void dlair2_state::dlair2(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", I8088 , MAIN_CLOCK/3) /* Schematics show I8088 "max" CPU */
- MCFG_DEVICE_PROGRAM_MAP(dlair2_map)
- MCFG_DEVICE_IO_MAP(dlair2_io)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(dlair2_state, dlair2_timer_irq, 60) // timer irq, TODO: timing
+ I8088(config, m_maincpu, MAIN_CLOCK/3); /* Schematics show I8088 "max" CPU */
+ m_maincpu->set_addrmap(AS_PROGRAM, &dlair2_state::dlair2_map);
+ m_maincpu->set_addrmap(AS_IO, &dlair2_state::dlair2_io);
+ m_maincpu->set_periodic_int(FUNC(dlair2_state::dlair2_timer_irq), attotime::from_hz(60)); // timer irq, TODO: timing
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
- MCFG_SCREEN_UPDATE_DRIVER(dlair2_state, screen_update)
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500));
+ screen.set_screen_update(FUNC(dlair2_state::screen_update));
+ screen.set_size(32*8, 32*8);
+ screen.set_visarea_full();
+ screen.set_palette("palette");
// GFXDECODE(config, "gfxdecode", "palette", gfx_dlair2);
@@ -206,7 +206,7 @@ MACHINE_CONFIG_START(dlair2_state::dlair2)
/* sound hardware */
SPEAKER(config, "mono").front_center();
-MACHINE_CONFIG_END
+}
/***************************************************************************
diff --git a/src/mame/drivers/dmax8000.cpp b/src/mame/drivers/dmax8000.cpp
index f6a0a6cfae7..fea238d8e2e 100644
--- a/src/mame/drivers/dmax8000.cpp
+++ b/src/mame/drivers/dmax8000.cpp
@@ -152,11 +152,12 @@ static void floppies(device_slot_interface &device)
}
-MACHINE_CONFIG_START(dmax8000_state::dmax8000)
+void dmax8000_state::dmax8000(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 4'000'000) // no idea what crystal is used, but 4MHz clock is confirmed
- MCFG_DEVICE_PROGRAM_MAP(dmax8000_mem)
- MCFG_DEVICE_IO_MAP(dmax8000_io)
+ Z80(config, m_maincpu, 4'000'000); // no idea what crystal is used, but 4MHz clock is confirmed
+ m_maincpu->set_addrmap(AS_PROGRAM, &dmax8000_state::dmax8000_mem);
+ m_maincpu->set_addrmap(AS_IO, &dmax8000_state::dmax8000_io);
MCFG_MACHINE_RESET_OVERRIDE(dmax8000_state, dmax8000)
z80ctc_device &ctc(Z80CTC(config, "ctc", 4_MHz_XTAL));
@@ -198,7 +199,7 @@ MACHINE_CONFIG_START(dmax8000_state::dmax8000)
// this is all guess
rtc.set_mode24(0); // 12 hour
rtc.set_day1(1); // monday
-MACHINE_CONFIG_END
+}
/* ROM definition */
diff --git a/src/mame/drivers/dmndrby.cpp b/src/mame/drivers/dmndrby.cpp
index 00f63ad35a8..25b833b0540 100644
--- a/src/mame/drivers/dmndrby.cpp
+++ b/src/mame/drivers/dmndrby.cpp
@@ -115,7 +115,7 @@ private:
WRITE8_MEMBER(dmndrby_state::dderby_sound_w)
{
- m_soundlatch->write(space,0,data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
@@ -535,27 +535,28 @@ INTERRUPT_GEN_MEMBER(dmndrby_state::dderby_timer_irq)
m_maincpu->set_input_line_and_vector(0, HOLD_LINE, 0xcf); /* RST 08h */
}
-MACHINE_CONFIG_START(dmndrby_state::dderby)
+void dmndrby_state::dderby(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80,4000000) /* ? MHz */
- MCFG_DEVICE_PROGRAM_MAP(memmap)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dmndrby_state, dderby_irq)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(dmndrby_state, dderby_timer_irq, 244/2)
+ Z80(config, m_maincpu, 4000000); /* ? MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &dmndrby_state::memmap);
+ m_maincpu->set_vblank_int("screen", FUNC(dmndrby_state::dderby_irq));
+ m_maincpu->set_periodic_int(FUNC(dmndrby_state::dderby_timer_irq), attotime::from_hz(244/2));
- MCFG_DEVICE_ADD("audiocpu", Z80, 4000000) /* verified on schematics */
- MCFG_DEVICE_PROGRAM_MAP(dderby_sound_map)
+ Z80(config, m_audiocpu, 4000000); /* verified on schematics */
+ m_audiocpu->set_addrmap(AS_PROGRAM, &dmndrby_state::dderby_sound_map);
config.m_minimum_quantum = attotime::from_hz(6000);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(256, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 256-16-1)
- MCFG_SCREEN_UPDATE_DRIVER(dmndrby_state, screen_update_dderby)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(256, 256);
+ screen.set_visarea(0, 256-1, 16, 256-16-1);
+ screen.set_screen_update(FUNC(dmndrby_state::screen_update_dderby));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_dmndrby);
PALETTE(config, m_palette, FUNC(dmndrby_state::dmndrby_palette), 0x300, 0x20);
@@ -565,7 +566,7 @@ MACHINE_CONFIG_START(dmndrby_state::dderby)
GENERIC_LATCH_8(config, m_soundlatch);
AY8910(config, "ay1", 1789750).add_route(ALL_OUTPUTS, "mono", 0.35); // frequency guessed
-MACHINE_CONFIG_END
+}
ROM_START( dmndrby )
diff --git a/src/mame/drivers/dms5000.cpp b/src/mame/drivers/dms5000.cpp
index 06e14ea41c0..1eb4a93cc4a 100644
--- a/src/mame/drivers/dms5000.cpp
+++ b/src/mame/drivers/dms5000.cpp
@@ -94,25 +94,26 @@ uint32_t dms5000_state::screen_update_dms5000(screen_device &screen, bitmap_ind1
return 0;
}
-MACHINE_CONFIG_START(dms5000_state::dms5000)
+void dms5000_state::dms5000(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu",I8086, XTAL(9'830'400))
- MCFG_DEVICE_PROGRAM_MAP(dms5000_mem)
- MCFG_DEVICE_IO_MAP(dms5000_io)
+ I8086(config, m_maincpu, XTAL(9'830'400));
+ m_maincpu->set_addrmap(AS_PROGRAM, &dms5000_state::dms5000_mem);
+ m_maincpu->set_addrmap(AS_IO, &dms5000_state::dms5000_io);
- MCFG_DEVICE_ADD("cntlatch", LS259, 0) // V34
+ LS259(config, "cntlatch", 0); // V34
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(640, 480)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
- MCFG_SCREEN_UPDATE_DRIVER(dms5000_state, screen_update_dms5000)
- MCFG_SCREEN_PALETTE("palette")
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(50);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ m_screen->set_size(640, 480);
+ m_screen->set_visarea_full();
+ m_screen->set_screen_update(FUNC(dms5000_state::screen_update_dms5000));
+ m_screen->set_palette("palette");
PALETTE(config, "palette", palette_device::MONOCHROME);
-MACHINE_CONFIG_END
+}
/* ROM definition */
ROM_START( dms5000 )
diff --git a/src/mame/drivers/dogfgt.cpp b/src/mame/drivers/dogfgt.cpp
index 90943c3da50..b419707cf60 100644
--- a/src/mame/drivers/dogfgt.cpp
+++ b/src/mame/drivers/dogfgt.cpp
@@ -227,26 +227,26 @@ void dogfgt_state::machine_reset()
}
-MACHINE_CONFIG_START(dogfgt_state::dogfgt)
-
+void dogfgt_state::dogfgt(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD(m_maincpu, M6502, 1500000) /* 1.5 MHz ???? */
- MCFG_DEVICE_PROGRAM_MAP(main_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(dogfgt_state, irq0_line_hold, 16*60) /* ? controls music tempo */
+ M6502(config, m_maincpu, 1500000); /* 1.5 MHz ???? */
+ m_maincpu->set_addrmap(AS_PROGRAM, &dogfgt_state::main_map);
+ m_maincpu->set_periodic_int(FUNC(dogfgt_state::irq0_line_hold), attotime::from_hz(16*60)); /* ? controls music tempo */
- MCFG_DEVICE_ADD(m_subcpu, M6502, 1500000) /* 1.5 MHz ???? */
- MCFG_DEVICE_PROGRAM_MAP(sub_map)
+ M6502(config, m_subcpu, 1500000); /* 1.5 MHz ???? */
+ m_subcpu->set_addrmap(AS_PROGRAM, &dogfgt_state::sub_map);
config.m_minimum_quantum = attotime::from_hz(6000);
/* video hardware */
- MCFG_SCREEN_ADD(m_screen, RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(dogfgt_state, screen_update)
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ m_screen->set_size(32*8, 32*8);
+ m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1);
+ m_screen->set_screen_update(FUNC(dogfgt_state::screen_update));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_dogfgt);
PALETTE(config, m_palette, FUNC(dogfgt_state::dogfgt_palette)).set_format(palette_device::BGR_233, 16 + 64);
@@ -256,7 +256,7 @@ MACHINE_CONFIG_START(dogfgt_state::dogfgt)
AY8910(config, m_ay[0], 1500000).add_route(ALL_OUTPUTS, "mono", 0.30);
AY8910(config, m_ay[1], 1500000).add_route(ALL_OUTPUTS, "mono", 0.30);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/dominob.cpp b/src/mame/drivers/dominob.cpp
index 913b7da384e..3daa7ceede5 100644
--- a/src/mame/drivers/dominob.cpp
+++ b/src/mame/drivers/dominob.cpp
@@ -302,22 +302,22 @@ static GFXDECODE_START( gfx_dominob )
GFXDECODE_END
-MACHINE_CONFIG_START(dominob_state::dominob)
-
+void dominob_state::dominob(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80,XTAL(12'000'000)/2)
- MCFG_DEVICE_PROGRAM_MAP(memmap)
- MCFG_DEVICE_IO_MAP(portmap)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dominob_state, irq0_line_hold)
+ Z80(config, m_maincpu, XTAL(12'000'000)/2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &dominob_state::memmap);
+ m_maincpu->set_addrmap(AS_IO, &dominob_state::portmap);
+ m_maincpu->set_vblank_int("screen", FUNC(dominob_state::irq0_line_hold));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(59.1524)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 32*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(dominob_state, screen_update_dominob)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(59.1524);
+ 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, 32*8-1);
+ screen.set_screen_update(FUNC(dominob_state::screen_update_dominob));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_dominob);
PALETTE(config, m_palette).set_format(palette_device::xRGB_444, 512);
@@ -327,7 +327,7 @@ MACHINE_CONFIG_START(dominob_state::dominob)
ym2149_device &aysnd(YM2149(config, "aysnd", XTAL(12'000'000)/4));
aysnd.port_b_read_callback().set_ioport("DSW");
aysnd.add_route(ALL_OUTPUTS, "mono", 0.30);
-MACHINE_CONFIG_END
+}
/***************************************************************************
diff --git a/src/mame/drivers/dooyong.cpp b/src/mame/drivers/dooyong.cpp
index 0a7836e1d07..64acce48ce0 100644
--- a/src/mame/drivers/dooyong.cpp
+++ b/src/mame/drivers/dooyong.cpp
@@ -1447,7 +1447,8 @@ void dooyong_z80_ym2203_state::sound_2203(machine_config &config)
ym2.add_route(ALL_OUTPUTS, "mono", 0.40);
}
-MACHINE_CONFIG_START(dooyong_z80_state::sound_2151)
+void dooyong_z80_state::sound_2151(machine_config &config)
+{
SPEAKER(config, "mono").front_center();
GENERIC_LATCH_8(config, "soundlatch");
@@ -1457,11 +1458,11 @@ MACHINE_CONFIG_START(dooyong_z80_state::sound_2151)
ymsnd.add_route(0, "mono", 0.50);
ymsnd.add_route(1, "mono", 0.50);
- MCFG_DEVICE_ADD("oki", OKIM6295, 1_MHz_XTAL, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
-MACHINE_CONFIG_END
+ OKIM6295(config, "oki", 1_MHz_XTAL, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.60);
+}
-MACHINE_CONFIG_START(dooyong_state::sound_2151_4mhz)
+void dooyong_state::sound_2151_4mhz(machine_config &config)
+{
SPEAKER(config, "mono").front_center();
GENERIC_LATCH_8(config, "soundlatch");
@@ -1471,33 +1472,32 @@ MACHINE_CONFIG_START(dooyong_state::sound_2151_4mhz)
ymsnd.add_route(0, "mono", 0.50);
ymsnd.add_route(1, "mono", 0.50);
- MCFG_DEVICE_ADD("oki", OKIM6295, 16_MHz_XTAL/16, okim6295_device::PIN7_HIGH) /* 1MHz (16MHz/16 for most, 8Mhz/8 for Super-X) */
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(dooyong_z80_ym2203_state::lastday)
+ OKIM6295(config, "oki", 16_MHz_XTAL/16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.60); /* 1MHz (16MHz/16 for most, 8Mhz/8 for Super-X) */
+}
+void dooyong_z80_ym2203_state::lastday(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 16_MHz_XTAL/2) /* 8MHz verified for Last Day / D-day */
- MCFG_DEVICE_PROGRAM_MAP(lastday_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dooyong_state, irq0_line_hold)
+ Z80(config, m_maincpu, 16_MHz_XTAL/2); /* 8MHz verified for Last Day / D-day */
+ m_maincpu->set_addrmap(AS_PROGRAM, &dooyong_z80_ym2203_state::lastday_map);
+ m_maincpu->set_vblank_int("screen", FUNC(dooyong_state::irq0_line_hold));
- MCFG_DEVICE_ADD("audiocpu", Z80, 16_MHz_XTAL/4) /* 4MHz verified for Last Day / D-day */
- MCFG_DEVICE_PROGRAM_MAP(lastday_sound_map)
+ Z80(config, m_audiocpu, 16_MHz_XTAL/4); /* 4MHz verified for Last Day / D-day */
+ m_audiocpu->set_addrmap(AS_PROGRAM, &dooyong_z80_ym2203_state::lastday_sound_map);
MCFG_MACHINE_START_OVERRIDE(dooyong_z80_ym2203_state, cpu_z80)
/* video hardware */
- MCFG_DEVICE_ADD(m_spriteram, BUFFERED_SPRITERAM8)
+ BUFFERED_SPRITERAM8(config, m_spriteram);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 )
- MCFG_SCREEN_UPDATE_DRIVER(dooyong_z80_ym2203_state, screen_update_lastday)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(m_spriteram, buffered_spriteram8_device, vblank_copy_rising))
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(8*8, (64-8)*8-1, 1*8, 31*8-1 );
+ screen.set_screen_update(FUNC(dooyong_z80_ym2203_state::screen_update_lastday));
+ screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_rising));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_lastday);
PALETTE(config, m_palette).set_format(palette_device::xBGR_444, 1024);
@@ -1524,31 +1524,31 @@ MACHINE_CONFIG_START(dooyong_z80_ym2203_state::lastday)
ym2.irq_handler().set("soundirq", FUNC(input_merger_any_high_device::in_w<1>));
ym2.port_a_read_callback().set(FUNC(dooyong_z80_ym2203_state::unk_r));
ym2.add_route(ALL_OUTPUTS, "mono", 0.40);
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(dooyong_z80_ym2203_state::gulfstrm)
+}
+void dooyong_z80_ym2203_state::gulfstrm(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 8000000) /* ??? */
- MCFG_DEVICE_PROGRAM_MAP(gulfstrm_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dooyong_state, irq0_line_hold)
+ Z80(config, m_maincpu, 8000000); /* ??? */
+ m_maincpu->set_addrmap(AS_PROGRAM, &dooyong_z80_ym2203_state::gulfstrm_map);
+ m_maincpu->set_vblank_int("screen", FUNC(dooyong_state::irq0_line_hold));
- MCFG_DEVICE_ADD("audiocpu", Z80, 8000000) /* ??? */
- MCFG_DEVICE_PROGRAM_MAP(lastday_sound_map)
+ Z80(config, m_audiocpu, 8000000); /* ??? */
+ m_audiocpu->set_addrmap(AS_PROGRAM, &dooyong_z80_ym2203_state::lastday_sound_map);
MCFG_MACHINE_START_OVERRIDE(dooyong_z80_ym2203_state, cpu_z80)
/* video hardware */
- MCFG_DEVICE_ADD(m_spriteram, BUFFERED_SPRITERAM8)
+ BUFFERED_SPRITERAM8(config, m_spriteram);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 )
- MCFG_SCREEN_UPDATE_DRIVER(dooyong_z80_ym2203_state, screen_update_gulfstrm)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(m_spriteram, buffered_spriteram8_device, vblank_copy_rising))
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(8*8, (64-8)*8-1, 1*8, 31*8-1 );
+ screen.set_screen_update(FUNC(dooyong_z80_ym2203_state::screen_update_gulfstrm));
+ screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_rising));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_lastday);
PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 1024);
@@ -1561,31 +1561,31 @@ MACHINE_CONFIG_START(dooyong_z80_ym2203_state::gulfstrm)
/* sound hardware */
sound_2203(config); /* 3.579545MHz */
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(dooyong_z80_ym2203_state::pollux)
+}
+void dooyong_z80_ym2203_state::pollux(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 16_MHz_XTAL/2) /* 8Mhz */
- MCFG_DEVICE_PROGRAM_MAP(pollux_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dooyong_state, irq0_line_hold)
+ Z80(config, m_maincpu, 16_MHz_XTAL/2); /* 8Mhz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &dooyong_z80_ym2203_state::pollux_map);
+ m_maincpu->set_vblank_int("screen", FUNC(dooyong_state::irq0_line_hold));
- MCFG_DEVICE_ADD("audiocpu", Z80, 16_MHz_XTAL/4) /* 4Mhz */
- MCFG_DEVICE_PROGRAM_MAP(pollux_sound_map)
+ Z80(config, m_audiocpu, 16_MHz_XTAL/4); /* 4Mhz */
+ m_audiocpu->set_addrmap(AS_PROGRAM, &dooyong_z80_ym2203_state::pollux_sound_map);
MCFG_MACHINE_START_OVERRIDE(dooyong_z80_ym2203_state, cpu_z80)
/* video hardware */
- MCFG_DEVICE_ADD(m_spriteram, BUFFERED_SPRITERAM8)
+ BUFFERED_SPRITERAM8(config, m_spriteram);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 )
- MCFG_SCREEN_UPDATE_DRIVER(dooyong_z80_ym2203_state, screen_update_pollux)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(m_spriteram, buffered_spriteram8_device, vblank_copy_rising))
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(8*8, (64-8)*8-1, 1*8, 31*8-1 );
+ screen.set_screen_update(FUNC(dooyong_z80_ym2203_state::screen_update_pollux));
+ screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_rising));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_lastday);
PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 1024*2);
@@ -1598,31 +1598,31 @@ MACHINE_CONFIG_START(dooyong_z80_ym2203_state::pollux)
/* sound hardware */
sound_2203(config); /* 3.579545MHz or 4Mhz ??? */
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(dooyong_z80_state::bluehawk)
+}
+void dooyong_z80_state::bluehawk(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 8000000) /* ??? */
- MCFG_DEVICE_PROGRAM_MAP(bluehawk_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dooyong_state, irq0_line_hold)
+ Z80(config, m_maincpu, 8000000); /* ??? */
+ m_maincpu->set_addrmap(AS_PROGRAM, &dooyong_z80_state::bluehawk_map);
+ m_maincpu->set_vblank_int("screen", FUNC(dooyong_state::irq0_line_hold));
- MCFG_DEVICE_ADD("audiocpu", Z80, 4000000) /* ??? */
- MCFG_DEVICE_PROGRAM_MAP(bluehawk_sound_map)
+ Z80(config, m_audiocpu, 4000000); /* ??? */
+ m_audiocpu->set_addrmap(AS_PROGRAM, &dooyong_z80_state::bluehawk_sound_map);
MCFG_MACHINE_START_OVERRIDE(dooyong_z80_state, cpu_z80)
/* video hardware */
- MCFG_DEVICE_ADD(m_spriteram, BUFFERED_SPRITERAM8)
+ BUFFERED_SPRITERAM8(config, m_spriteram);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 )
- MCFG_SCREEN_UPDATE_DRIVER(dooyong_z80_state, screen_update_bluehawk)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(m_spriteram, buffered_spriteram8_device, vblank_copy_rising))
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(8*8, (64-8)*8-1, 1*8, 31*8-1 );
+ screen.set_screen_update(FUNC(dooyong_z80_state::screen_update_bluehawk));
+ screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_rising));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_bluehawk);
PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 1024);
@@ -1637,31 +1637,31 @@ MACHINE_CONFIG_START(dooyong_z80_state::bluehawk)
/* sound hardware */
sound_2151(config); /* 3.579545MHz or 4Mhz ??? */
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(dooyong_z80_state::flytiger)
+}
+void dooyong_z80_state::flytiger(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 16_MHz_XTAL/2) /* 8MHz */
- MCFG_DEVICE_PROGRAM_MAP(flytiger_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dooyong_state, irq0_line_hold)
+ Z80(config, m_maincpu, 16_MHz_XTAL/2); /* 8MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &dooyong_z80_state::flytiger_map);
+ m_maincpu->set_vblank_int("screen", FUNC(dooyong_state::irq0_line_hold));
- MCFG_DEVICE_ADD("audiocpu", Z80, 16_MHz_XTAL/4) /* 4Mhz */
- MCFG_DEVICE_PROGRAM_MAP(bluehawk_sound_map)
+ Z80(config, m_audiocpu, 16_MHz_XTAL/4); /* 4Mhz */
+ m_audiocpu->set_addrmap(AS_PROGRAM, &dooyong_z80_state::bluehawk_sound_map);
MCFG_MACHINE_START_OVERRIDE(dooyong_z80_state, cpu_z80)
/* video hardware */
- MCFG_DEVICE_ADD(m_spriteram, BUFFERED_SPRITERAM8)
+ BUFFERED_SPRITERAM8(config, m_spriteram);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 )
- MCFG_SCREEN_UPDATE_DRIVER(dooyong_z80_state, screen_update_flytiger)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(m_spriteram, buffered_spriteram8_device, vblank_copy_rising))
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(8*8, (64-8)*8-1, 1*8, 31*8-1 );
+ screen.set_screen_update(FUNC(dooyong_z80_state::screen_update_flytiger));
+ screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_rising));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_flytiger);
PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 1024*2);
@@ -1675,28 +1675,28 @@ MACHINE_CONFIG_START(dooyong_z80_state::flytiger)
/* sound hardware */
sound_2151(config);
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(dooyong_z80_state::primella)
+}
+void dooyong_z80_state::primella(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 16_MHz_XTAL/2) /* 8MHz */
- MCFG_DEVICE_PROGRAM_MAP(primella_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dooyong_state, irq0_line_hold)
+ Z80(config, m_maincpu, 16_MHz_XTAL/2); /* 8MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &dooyong_z80_state::primella_map);
+ m_maincpu->set_vblank_int("screen", FUNC(dooyong_state::irq0_line_hold));
- MCFG_DEVICE_ADD("audiocpu", Z80, 16_MHz_XTAL/4) /* 4MHz */
- MCFG_DEVICE_PROGRAM_MAP(bluehawk_sound_map)
+ Z80(config, m_audiocpu, 16_MHz_XTAL/4); /* 4MHz */
+ m_audiocpu->set_addrmap(AS_PROGRAM, &dooyong_z80_state::bluehawk_sound_map);
MCFG_MACHINE_START_OVERRIDE(dooyong_z80_state, cpu_z80)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 0*8, 32*8-1 )
- MCFG_SCREEN_UPDATE_DRIVER(dooyong_z80_state, screen_update_primella)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(8*8, (64-8)*8-1, 0*8, 32*8-1 );
+ screen.set_screen_update(FUNC(dooyong_z80_state::screen_update_primella));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_primella);
PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 1024);
@@ -1711,7 +1711,7 @@ MACHINE_CONFIG_START(dooyong_z80_state::primella)
/* sound hardware */
sound_2151_4mhz(config); /* PCB has only 1 OSC at 16Mhz */
-MACHINE_CONFIG_END
+}
TIMER_DEVICE_CALLBACK_MEMBER(dooyong_68k_state::scanline)
@@ -1726,26 +1726,26 @@ TIMER_DEVICE_CALLBACK_MEMBER(dooyong_68k_state::scanline)
}
-MACHINE_CONFIG_START(rshark_state::dooyong_68k)
-
+void rshark_state::dooyong_68k(machine_config &config)
+{
// basic machine hardware
- MCFG_DEVICE_ADD("maincpu", M68000, 8_MHz_XTAL) // 8MHz measured on Super-X
+ M68000(config, m_maincpu, 8_MHz_XTAL); // 8MHz measured on Super-X
TIMER(config, "scantimer").configure_scanline(FUNC(rshark_state::scanline), "screen", 0, 1);
- MCFG_DEVICE_ADD("audiocpu", Z80, 8_MHz_XTAL/2) // 4MHz measured on Super-X
- MCFG_DEVICE_PROGRAM_MAP(bluehawk_sound_map)
+ Z80(config, m_audiocpu, 8_MHz_XTAL/2); // 4MHz measured on Super-X
+ m_audiocpu->set_addrmap(AS_PROGRAM, &rshark_state::bluehawk_sound_map);
// video hardware
- MCFG_DEVICE_ADD(m_spriteram, BUFFERED_SPRITERAM16)
+ BUFFERED_SPRITERAM16(config, m_spriteram);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not accurate
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(rshark_state, screen_update_rshark)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(m_spriteram, buffered_spriteram16_device, vblank_copy_rising))
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(8*8, (64-8)*8-1, 1*8, 31*8-1);
+ screen.set_screen_update(FUNC(rshark_state::screen_update_rshark));
+ screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_rshark);
PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 2048);
@@ -1760,43 +1760,43 @@ MACHINE_CONFIG_START(rshark_state::dooyong_68k)
// sound hardware
sound_2151_4mhz(config);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(rshark_state::rshark)
+void rshark_state::rshark(machine_config &config)
+{
dooyong_68k(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(rshark_map)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &rshark_state::rshark_map);
+}
-MACHINE_CONFIG_START(rshark_state::superx)
+void rshark_state::superx(machine_config &config)
+{
dooyong_68k(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(superx_map)
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(popbingo_state::popbingo)
+ m_maincpu->set_addrmap(AS_PROGRAM, &rshark_state::superx_map);
+}
+void popbingo_state::popbingo(machine_config &config)
+{
// basic machine hardware
- MCFG_DEVICE_ADD("maincpu", M68000, 20_MHz_XTAL/2) // 10MHz measured
- MCFG_DEVICE_PROGRAM_MAP(popbingo_map)
+ M68000(config, m_maincpu, 20_MHz_XTAL/2); // 10MHz measured
+ m_maincpu->set_addrmap(AS_PROGRAM, &popbingo_state::popbingo_map);
TIMER(config, "scantimer").configure_scanline(FUNC(popbingo_state::scanline), "screen", 0, 1);
- MCFG_DEVICE_ADD("audiocpu", Z80, 16_MHz_XTAL/4) // 4MHz measured
- MCFG_DEVICE_PROGRAM_MAP(bluehawk_sound_map)
+ Z80(config, m_audiocpu, 16_MHz_XTAL/4); // 4MHz measured
+ m_audiocpu->set_addrmap(AS_PROGRAM, &popbingo_state::bluehawk_sound_map);
// video hardware
- MCFG_DEVICE_ADD(m_spriteram, BUFFERED_SPRITERAM16)
+ BUFFERED_SPRITERAM16(config, m_spriteram);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not accurate
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(popbingo_state, screen_update_popbingo)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(m_spriteram, buffered_spriteram16_device, vblank_copy_rising))
- MCFG_SCREEN_PALETTE(m_palette)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate
+ m_screen->set_size(64*8, 32*8);
+ m_screen->set_visarea(8*8, (64-8)*8-1, 1*8, 31*8-1);
+ m_screen->set_screen_update(FUNC(popbingo_state::screen_update_popbingo));
+ m_screen->screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_popbingo);
PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 2048);
@@ -1808,7 +1808,7 @@ MACHINE_CONFIG_START(popbingo_state::popbingo)
// sound hardware
sound_2151_4mhz(config);
-MACHINE_CONFIG_END
+}
} // anonymous namespace
diff --git a/src/mame/drivers/dorachan.cpp b/src/mame/drivers/dorachan.cpp
index a4c377f8cf2..9c08186054f 100644
--- a/src/mame/drivers/dorachan.cpp
+++ b/src/mame/drivers/dorachan.cpp
@@ -226,23 +226,23 @@ void dorachan_state::machine_reset()
m_prot_value = 0;
}
-MACHINE_CONFIG_START(dorachan_state::dorachan)
-
+void dorachan_state::dorachan(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 2000000)
- MCFG_DEVICE_PROGRAM_MAP(dorachan_map)
- MCFG_DEVICE_IO_MAP(dorachan_io_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(dorachan_state, irq0_line_hold, 2*60)
+ Z80(config, m_maincpu, 2000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &dorachan_state::dorachan_map);
+ m_maincpu->set_addrmap(AS_IO, &dorachan_state::dorachan_io_map);
+ m_maincpu->set_periodic_int(FUNC(dorachan_state::irq0_line_hold), attotime::from_hz(2*60));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_UPDATE_DRIVER(dorachan_state, screen_update_dorachan)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_size(32*8, 32*8);
+ m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_screen_update(FUNC(dorachan_state::screen_update_dorachan));
PALETTE(config, m_palette, palette_device::BGR_3BIT);
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/dotrikun.cpp b/src/mame/drivers/dotrikun.cpp
index cc4a1a22bec..0a379652e2c 100644
--- a/src/mame/drivers/dotrikun.cpp
+++ b/src/mame/drivers/dotrikun.cpp
@@ -197,26 +197,27 @@ void dotrikun_state::machine_reset()
m_color = 0;
}
-MACHINE_CONFIG_START(dotrikun_state::dotrikun)
-
+void dotrikun_state::dotrikun(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, MASTER_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(dotrikun_map)
- MCFG_DEVICE_IO_MAP(io_map)
+ Z80(config, m_maincpu, MASTER_CLOCK);
+ m_maincpu->set_addrmap(AS_PROGRAM, &dotrikun_state::dotrikun_map);
+ m_maincpu->set_addrmap(AS_IO, &dotrikun_state::io_map);
+
TIMER(config, "scanline_on").configure_scanline(FUNC(dotrikun_state::scanline_on), "screen", 0, 1);
TIMER(config, m_scanline_off_timer).configure_generic(FUNC(dotrikun_state::scanline_off));
TIMER(config, m_interrupt_timer).configure_generic(FUNC(dotrikun_state::interrupt));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK, 128+128, 0, 128, 192+64, 0, 192)
- MCFG_SCREEN_UPDATE_DRIVER(dotrikun_state, screen_update)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE)
- MCFG_SCREEN_PALETTE("palette")
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(MASTER_CLOCK, 128+128, 0, 128, 192+64, 0, 192);
+ m_screen->set_screen_update(FUNC(dotrikun_state::screen_update));
+ m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE);
+ m_screen->set_palette("palette");
PALETTE(config, "palette", palette_device::RGB_3BIT);
/* no sound hardware */
-MACHINE_CONFIG_END
+}
/***************************************************************************
diff --git a/src/mame/drivers/dragon.cpp b/src/mame/drivers/dragon.cpp
index 82ddfb2d936..c336b62b628 100644
--- a/src/mame/drivers/dragon.cpp
+++ b/src/mame/drivers/dragon.cpp
@@ -187,13 +187,13 @@ static void dragon_alpha_floppies(device_slot_interface &device)
device.option_add("dd", FLOPPY_35_DD);
}
-MACHINE_CONFIG_START(dragon_state::dragon_base)
- MCFG_DEVICE_MODIFY(":")
- MCFG_DEVICE_CLOCK(14.218_MHz_XTAL / 16)
+void dragon_state::dragon_base(machine_config &config)
+{
+ this->set_clock(14.218_MHz_XTAL / 16);
// basic machine hardware
- MCFG_DEVICE_ADD("maincpu", MC6809E, DERIVED_CLOCK(1, 1))
- MCFG_DEVICE_PROGRAM_MAP(dragon_mem)
+ MC6809E(config, m_maincpu, DERIVED_CLOCK(1, 1));
+ m_maincpu->set_addrmap(AS_PROGRAM, &dragon_state::dragon_mem);
// devices
pia6821_device &pia0(PIA6821(config, PIA0_TAG, 0));
@@ -243,9 +243,10 @@ MACHINE_CONFIG_START(dragon_state::dragon_base)
SOFTWARE_LIST(config, "dragon_cass_list").set_original("dragon_cass");
SOFTWARE_LIST(config, "dragon_flop_list").set_original("dragon_flop");
SOFTWARE_LIST(config, "coco_cart_list").set_compatible("coco_cart");
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(dragon_state::dragon32)
+void dragon_state::dragon32(machine_config &config)
+{
dragon_base(config);
// internal ram
RAM(config, m_ram).set_default_size("32K").set_extra_options("64K");
@@ -255,7 +256,7 @@ MACHINE_CONFIG_START(dragon_state::dragon32)
cartslot.cart_callback().set([this] (int state) { cart_w(state != 0); }); // lambda because name is overloaded
cartslot.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI);
cartslot.halt_callback().set_inputline(m_maincpu, INPUT_LINE_HALT);
-MACHINE_CONFIG_END
+}
void dragon64_state::dragon64(machine_config &config)
{
@@ -278,13 +279,14 @@ void dragon64_state::dragon64(machine_config &config)
SOFTWARE_LIST(config, "dragon_os9_list").set_original("dragon_os9");
}
-MACHINE_CONFIG_START(dragon64_state::dragon64h)
+void dragon64_state::dragon64h(machine_config &config)
+{
dragon64(config);
// Replace M6809 with HD6309
- MCFG_DEVICE_REPLACE(MAINCPU_TAG, HD6309E, DERIVED_CLOCK(1, 1))
- MCFG_DEVICE_PROGRAM_MAP(dragon_mem)
+ HD6309E(config.replace(), m_maincpu, DERIVED_CLOCK(1, 1));
+ m_maincpu->set_addrmap(AS_PROGRAM, &dragon64_state::dragon_mem);
m_ram->set_default_size("64K");
-MACHINE_CONFIG_END
+}
void dragon200e_state::dragon200e(machine_config &config)
{
@@ -293,15 +295,16 @@ void dragon200e_state::dragon200e(machine_config &config)
m_vdg->set_get_char_rom(FUNC(dragon200e_state::char_rom_r));
}
-MACHINE_CONFIG_START(d64plus_state::d64plus)
+void d64plus_state::d64plus(machine_config &config)
+{
dragon64(config);
// video hardware
- MCFG_SCREEN_ADD("plus_screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(640, 264)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 264-1)
- MCFG_SCREEN_UPDATE_DEVICE("crtc", hd6845_device, screen_update)
+ screen_device &plus_screen(SCREEN(config, "plus_screen", SCREEN_TYPE_RASTER));
+ plus_screen.set_refresh_hz(50);
+ plus_screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ plus_screen.set_size(640, 264);
+ plus_screen.set_visarea_full();
+ plus_screen.set_screen_update("crtc", FUNC(hd6845_device::screen_update));
PALETTE(config, m_palette, palette_device::MONOCHROME);
// crtc
@@ -310,7 +313,7 @@ MACHINE_CONFIG_START(d64plus_state::d64plus)
m_crtc->set_show_border_area(false);
m_crtc->set_char_width(8);
m_crtc->set_update_row_callback(FUNC(d64plus_state::crtc_update_row), this);
-MACHINE_CONFIG_END
+}
void dragon_alpha_state::dgnalpha(machine_config &config)
{
@@ -356,10 +359,10 @@ void dragon_alpha_state::dgnalpha(machine_config &config)
SOFTWARE_LIST(config, "dragon_os9_list").set_original("dragon_os9");
}
-MACHINE_CONFIG_START(dragon64_state::tanodr64)
+void dragon64_state::tanodr64(machine_config &config)
+{
dragon64(config);
- MCFG_DEVICE_MODIFY(":")
- MCFG_DEVICE_CLOCK(14.318181_MHz_XTAL / 16)
+ this->set_clock(14.318181_MHz_XTAL / 16);
m_sam->set_clock(14.318181_MHz_XTAL);
@@ -371,17 +374,17 @@ MACHINE_CONFIG_START(dragon64_state::tanodr64)
m_vdg->input_callback().set(m_sam, FUNC(sam6883_device::display_read));
// cartridge
- MCFG_DEVICE_MODIFY(CARTRIDGE_TAG)
- MCFG_DEVICE_SLOT_INTERFACE(dragon_cart, "sdtandy_fdc", false)
-MACHINE_CONFIG_END
+ subdevice<cococart_slot_device>(CARTRIDGE_TAG)->set_default_option("sdtandy_fdc");
+}
-MACHINE_CONFIG_START(dragon64_state::tanodr64h)
+void dragon64_state::tanodr64h(machine_config &config)
+{
tanodr64(config);
// Replace M6809 CPU with HD6309 CPU
- MCFG_DEVICE_REPLACE(MAINCPU_TAG, HD6309E, DERIVED_CLOCK(1, 1))
- MCFG_DEVICE_PROGRAM_MAP(dragon_mem)
+ HD6309E(config.replace(), m_maincpu, DERIVED_CLOCK(1, 1));
+ m_maincpu->set_addrmap(AS_PROGRAM, &dragon64_state::dragon_mem);
m_ram->set_default_size("64K");
-MACHINE_CONFIG_END
+}
/***************************************************************************
diff --git a/src/mame/drivers/dragrace.cpp b/src/mame/drivers/dragrace.cpp
index ac22a6b9920..876a8a1527c 100644
--- a/src/mame/drivers/dragrace.cpp
+++ b/src/mame/drivers/dragrace.cpp
@@ -272,24 +272,24 @@ void dragrace_state::machine_reset()
m_gear[1] = 0;
}
-MACHINE_CONFIG_START(dragrace_state::dragrace)
-
+void dragrace_state::dragrace(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M6800, 12.096_MHz_XTAL / 12)
- MCFG_DEVICE_PROGRAM_MAP(dragrace_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(dragrace_state, irq0_line_hold, 4*60)
+ M6800(config, m_maincpu, 12.096_MHz_XTAL / 12);
+ m_maincpu->set_addrmap(AS_PROGRAM, &dragrace_state::dragrace_map);
+ m_maincpu->set_periodic_int(FUNC(dragrace_state::irq0_line_hold), attotime::from_hz(4*60));
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 8);
TIMER(config, "frame_timer").configure_periodic(FUNC(dragrace_state::dragrace_frame_callback), attotime::from_hz(60));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_SIZE(256, 262)
- MCFG_SCREEN_VISIBLE_AREA(0, 255, 0, 239)
- MCFG_SCREEN_UPDATE_DRIVER(dragrace_state, screen_update_dragrace)
- MCFG_SCREEN_PALETTE("palette")
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_size(256, 262);
+ m_screen->set_visarea(0, 255, 0, 239);
+ m_screen->set_screen_update(FUNC(dragrace_state::screen_update_dragrace));
+ m_screen->set_palette("palette");
GFXDECODE(config, m_gfxdecode, "palette", gfx_dragrace);
PALETTE(config, "palette", FUNC(dragrace_state::dragrace_palette), 16);
@@ -298,9 +298,9 @@ MACHINE_CONFIG_START(dragrace_state::dragrace)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("discrete", DISCRETE, dragrace_discrete)
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
+ DISCRETE(config, m_discrete, dragrace_discrete);
+ m_discrete->add_route(0, "lspeaker", 1.0);
+ m_discrete->add_route(1, "rspeaker", 1.0);
f9334_device &latch_f5(F9334(config, "latch_f5")); // F5
latch_f5.parallel_out_cb().set(FUNC(dragrace_state::speed1_w)).mask(0x1f); // set 3SPEED1-7SPEED1
@@ -324,7 +324,7 @@ MACHINE_CONFIG_START(dragrace_state::dragrace)
latch_e5.q_out_cb<3>().set(m_discrete, FUNC(discrete_device::write_line<DRAGRACE_MOTOR2_EN>)); // Motor2 enable
latch_e5.q_out_cb<5>().set(m_discrete, FUNC(discrete_device::write_line<DRAGRACE_HITONE_EN>)); // HiTone enable
latch_e5.q_out_cb<7>().set_output("led1"); // Player 2 Start Lamp
-MACHINE_CONFIG_END
+}
ROM_START( dragrace )
diff --git a/src/mame/drivers/dreambal.cpp b/src/mame/drivers/dreambal.cpp
index 84da2840c07..6040f329c5f 100644
--- a/src/mame/drivers/dreambal.cpp
+++ b/src/mame/drivers/dreambal.cpp
@@ -311,21 +311,21 @@ void dreambal_state::machine_reset()
}
// xtals = 28.000, 9.8304
-MACHINE_CONFIG_START(dreambal_state::dreambal)
-
+void dreambal_state::dreambal(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, 28000000/2)
- MCFG_DEVICE_PROGRAM_MAP(dreambal_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dreambal_state, irq6_line_hold) // 5 valid too?
+ M68000(config, m_maincpu, 28000000/2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &dreambal_state::dreambal_map);
+ m_maincpu->set_vblank_int("screen", FUNC(dreambal_state::irq6_line_hold)); // 5 valid too?
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(58)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(dreambal_state, screen_update_dreambal)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(58);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(0*8, 40*8-1, 1*8, 31*8-1);
+ screen.set_screen_update(FUNC(dreambal_state::screen_update_dreambal));
+ screen.set_palette("palette");
PALETTE(config, "palette").set_format(palette_device::xBGR_444, 0x400/2);
GFXDECODE(config, "gfxdecode", "palette", gfx_dreambal);
@@ -338,7 +338,6 @@ MACHINE_CONFIG_START(dreambal_state::dreambal)
m_deco104->port_c_cb().set_ioport("DSW");
DECO16IC(config, m_deco_tilegen, 0);
- m_deco_tilegen->set_split(0);
m_deco_tilegen->set_pf1_size(DECO_64x32);
m_deco_tilegen->set_pf2_size(DECO_64x32);
m_deco_tilegen->set_pf1_trans_mask(0x0f);
@@ -356,10 +355,8 @@ MACHINE_CONFIG_START(dreambal_state::dreambal)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("oki", OKIM6295, 9830400/8, okim6295_device::PIN7_HIGH)
-
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
-MACHINE_CONFIG_END
+ OKIM6295(config, "oki", 9830400/8, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.00);
+}
diff --git a/src/mame/drivers/dreamwld.cpp b/src/mame/drivers/dreamwld.cpp
index cc93023d745..8267c94898b 100644
--- a/src/mame/drivers/dreamwld.cpp
+++ b/src/mame/drivers/dreamwld.cpp
@@ -746,48 +746,46 @@ void dreamwld_state::machine_reset()
}
-MACHINE_CONFIG_START(dreamwld_state::baryon)
-
+void dreamwld_state::baryon(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68EC020, XTAL(32'000'000)/2) /* 16MHz verified */
- MCFG_DEVICE_PROGRAM_MAP(baryon_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dreamwld_state, irq4_line_hold)
+ M68EC020(config, m_maincpu, XTAL(32'000'000)/2); /* 16MHz verified */
+ m_maincpu->set_addrmap(AS_PROGRAM, &dreamwld_state::baryon_map);
+ m_maincpu->set_vblank_int("screen", FUNC(dreamwld_state::irq4_line_hold));
- MCFG_DEVICE_ADD("mcu", AT89C52, XTAL(32'000'000)/2) /* AT89C52 or 87(C)52, unknown clock (value from docs) */
- MCFG_DEVICE_DISABLE() /* Internal ROM aren't dumped */
+ AT89C52(config, "mcu", XTAL(32'000'000)/2).set_disable(); /* AT89C52 or 87(C)52, unknown clock (value from docs), internal ROMs aren't dumped */
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(57.793)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
- MCFG_SCREEN_SIZE(512,256)
- MCFG_SCREEN_VISIBLE_AREA(0, 308-1, 0, 224-1)
- MCFG_SCREEN_UPDATE_DRIVER(dreamwld_state, screen_update_dreamwld)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, dreamwld_state, screen_vblank_dreamwld))
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(57.793);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500));
+ screen.set_size(512,256);
+ screen.set_visarea(0, 308-1, 0, 224-1);
+ screen.set_screen_update(FUNC(dreamwld_state::screen_update_dreamwld));
+ screen.screen_vblank().set(FUNC(dreamwld_state::screen_vblank_dreamwld));
+ screen.set_palette(m_palette);
PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 0x1000);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_dreamwld);
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'000'000)/32, okim6295_device::PIN7_LOW) /* 1MHz verified */
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
- MCFG_DEVICE_ADDRESS_MAP(0, oki1_map)
-MACHINE_CONFIG_END
+ okim6295_device &oki1(OKIM6295(config, "oki1", XTAL(32'000'000)/32, okim6295_device::PIN7_LOW)); /* 1MHz verified */
+ oki1.add_route(ALL_OUTPUTS, "mono", 1.00);
+ oki1.set_addrmap(0, &dreamwld_state::oki1_map);
+}
-MACHINE_CONFIG_START(dreamwld_state::dreamwld)
+void dreamwld_state::dreamwld(machine_config &config)
+{
baryon(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(dreamwld_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dreamwld_state, irq4_line_hold)
+ m_maincpu->set_addrmap(AS_PROGRAM, &dreamwld_state::dreamwld_map);
- MCFG_DEVICE_ADD("oki2", OKIM6295, XTAL(32'000'000)/32, okim6295_device::PIN7_LOW) /* 1MHz verified */
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
- MCFG_DEVICE_ADDRESS_MAP(0, oki2_map)
-MACHINE_CONFIG_END
+ okim6295_device &oki2(OKIM6295(config, "oki2", XTAL(32'000'000)/32, okim6295_device::PIN7_LOW)); /* 1MHz verified */
+ oki2.add_route(ALL_OUTPUTS, "mono", 1.00);
+ oki2.set_addrmap(0, &dreamwld_state::oki2_map);
+}
/*
@@ -1023,7 +1021,7 @@ ROM_START( rolcrush )
ROM_LOAD( "mx27c4000_5.bin", 0x000000, 0x80000, CRC(7afa6adb) SHA1(d4049e1068a5f7abf0e14d0b9fbbbc6dfb5d0170) )
ROM_REGION( 0x80000, "oki2", ROMREGION_ERASE00 ) /* OKI Samples - 2nd chip (neither OKI or rom is present, empty sockets) */
- /* not populared */
+ /* not populated */
ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprite Tiles - decoded */
ROM_LOAD( "m27c160.8.bin", 0x000000, 0x200000, CRC(a509bc36) SHA1(aaa008e07e4b24ff9dbcee5925d6516d1662931c) )
@@ -1057,7 +1055,7 @@ ROM_START( rolcrusha )
ROM_LOAD( "5", 0x000000, 0x80000, CRC(7afa6adb) SHA1(d4049e1068a5f7abf0e14d0b9fbbbc6dfb5d0170) )
ROM_REGION( 0x80000, "oki2", ROMREGION_ERASE00 ) /* OKI Samples - 2nd chip (neither OKI or rom is present, empty sockets) */
- /* not populared */
+ /* not populated */
ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprite Tiles - decoded */
ROM_LOAD( "8", 0x000000, 0x200000, CRC(01446191) SHA1(b106ed6c085fad617552972db78866a3346e4553) )
@@ -1219,7 +1217,7 @@ ROM_START( gaialast )
ROM_LOAD( "1", 0x000000, 0x80000, CRC(2dbad410) SHA1(bb788ea14bb605be9af9c8f8adec94ad1c17ab55) )
ROM_REGION( 0x80000, "oki2", ROMREGION_ERASE00 ) /* OKI Samples - 2nd chip (neither OKI or rom is present, empty sockets) */
- /* not populared */
+ /* not populated */
ROM_REGION( 0x800000, "gfx1", 0 ) /* Sprite Tiles - decoded */
ROM_LOAD( "10", 0x000000, 0x200000, CRC(5822ef93) SHA1(8ce22c30f8027f35c5f72eb6ce57a74540dd55da) )
diff --git a/src/mame/drivers/drgnmst.cpp b/src/mame/drivers/drgnmst.cpp
index 67be3d857a5..5928ea8497c 100644
--- a/src/mame/drivers/drgnmst.cpp
+++ b/src/mame/drivers/drgnmst.cpp
@@ -373,11 +373,11 @@ void drgnmst_state::machine_reset()
m_oki_bank[0] = 0;
}
-MACHINE_CONFIG_START(drgnmst_state::drgnmst)
-
- MCFG_DEVICE_ADD("maincpu", M68000, 12_MHz_XTAL) /* Confirmed */
- MCFG_DEVICE_PROGRAM_MAP(drgnmst_main_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", drgnmst_state, irq2_line_hold)
+void drgnmst_state::drgnmst(machine_config &config)
+{
+ M68000(config, m_maincpu, 12_MHz_XTAL); /* Confirmed */
+ m_maincpu->set_addrmap(AS_PROGRAM, &drgnmst_state::drgnmst_main_map);
+ m_maincpu->set_vblank_int("screen", FUNC(drgnmst_state::irq2_line_hold));
PIC16C55(config, m_audiocpu, 32_MHz_XTAL / 8); /* 4MHz - Confirmed */
m_audiocpu->read_a().set(FUNC(drgnmst_state::pic16c5x_port0_r));
@@ -389,26 +389,26 @@ MACHINE_CONFIG_START(drgnmst_state::drgnmst)
GFXDECODE(config, m_gfxdecode, m_palette, gfx_drgnmst);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(64*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(8*8, 56*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(drgnmst_state, screen_update)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(64*8, 32*8);
+ screen.set_visarea(8*8, 56*8-1, 2*8, 30*8-1);
+ screen.set_screen_update(FUNC(drgnmst_state::screen_update));
+ screen.set_palette(m_palette);
PALETTE(config, m_palette).set_format(2, &drgnmst_state::drgnmst_IIIIRRRRGGGGBBBB, 0x2000);
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("oki1", OKIM6295, 32_MHz_XTAL / 32, okim6295_device::PIN7_HIGH)
- MCFG_DEVICE_ADDRESS_MAP(0, drgnmst_oki1_map)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
+ OKIM6295(config, m_oki[0], 32_MHz_XTAL / 32, okim6295_device::PIN7_HIGH);
+ m_oki[0]->set_addrmap(0, &drgnmst_state::drgnmst_oki1_map);
+ m_oki[0]->add_route(ALL_OUTPUTS, "mono", 1.00);
- MCFG_DEVICE_ADD("oki2", OKIM6295, 32_MHz_XTAL / 32, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
-MACHINE_CONFIG_END
+ OKIM6295(config, m_oki[1], 32_MHz_XTAL / 32, okim6295_device::PIN7_HIGH);
+ m_oki[1]->add_route(ALL_OUTPUTS, "mono", 1.00);
+}
ROM_START( drgnmst )
diff --git a/src/mame/drivers/dribling.cpp b/src/mame/drivers/dribling.cpp
index 736a9ed58fe..107dedfec10 100644
--- a/src/mame/drivers/dribling.cpp
+++ b/src/mame/drivers/dribling.cpp
@@ -268,13 +268,13 @@ void dribling_state::machine_reset()
}
-MACHINE_CONFIG_START(dribling_state::dribling)
-
+void dribling_state::dribling(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 5000000)
- MCFG_DEVICE_PROGRAM_MAP(dribling_map)
- MCFG_DEVICE_IO_MAP(io_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dribling_state, dribling_irq_gen)
+ Z80(config, m_maincpu, 20_MHz_XTAL / 4); // XTAL verified, divider not
+ m_maincpu->set_addrmap(AS_PROGRAM, &dribling_state::dribling_map);
+ m_maincpu->set_addrmap(AS_IO, &dribling_state::io_map);
+ m_maincpu->set_vblank_int("screen", FUNC(dribling_state::dribling_irq_gen));
I8255A(config, m_ppi8255_0);
m_ppi8255_0->in_pa_callback().set(FUNC(dribling_state::dsr_r));
@@ -290,19 +290,19 @@ MACHINE_CONFIG_START(dribling_state::dribling)
WATCHDOG_TIMER(config, m_watchdog);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(256, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 255, 40, 255)
- MCFG_SCREEN_UPDATE_DRIVER(dribling_state, screen_update_dribling)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(256, 256);
+ screen.set_visarea(0, 255, 40, 255);
+ screen.set_screen_update(FUNC(dribling_state::screen_update_dribling));
+ screen.set_palette("palette");
PALETTE(config, "palette", FUNC(dribling_state::dribling_palette), 256);
/* sound hardware */
-MACHINE_CONFIG_END
+}
diff --git a/src/mame/drivers/drtomy.cpp b/src/mame/drivers/drtomy.cpp
index 35e0857e9cb..722585083db 100644
--- a/src/mame/drivers/drtomy.cpp
+++ b/src/mame/drivers/drtomy.cpp
@@ -306,22 +306,22 @@ void drtomy_state::machine_reset()
m_oki_bank = 0;
}
-MACHINE_CONFIG_START(drtomy_state::drtomy)
-
+void drtomy_state::drtomy(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000,24000000/2) /* ? MHz */
- MCFG_DEVICE_PROGRAM_MAP(drtomy_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", drtomy_state, irq6_line_hold)
+ M68000(config, m_maincpu, 24000000/2); /* ? MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &drtomy_state::drtomy_map);
+ m_maincpu->set_vblank_int("screen", FUNC(drtomy_state::irq6_line_hold));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(32*16, 32*16)
- MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 16, 256-1)
- MCFG_SCREEN_UPDATE_DRIVER(drtomy_state, screen_update_drtomy)
- MCFG_SCREEN_PALETTE(m_palette)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(32*16, 32*16);
+ screen.set_visarea(0, 320-1, 16, 256-1);
+ screen.set_screen_update(FUNC(drtomy_state::screen_update_drtomy));
+ screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_drtomy);
PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 1024);
@@ -329,9 +329,8 @@ MACHINE_CONFIG_START(drtomy_state::drtomy)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("oki", OKIM6295, 26000000/16, okim6295_device::PIN7_LOW)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.8)
-MACHINE_CONFIG_END
+ OKIM6295(config, m_oki, 26000000/16, okim6295_device::PIN7_LOW).add_route(ALL_OUTPUTS, "mono", 0.8);
+}
ROM_START( drtomy )
diff --git a/src/mame/drivers/drw80pkr.cpp b/src/mame/drivers/drw80pkr.cpp
index f3cd2adb424..4cbdce3e6f1 100644
--- a/src/mame/drivers/drw80pkr.cpp
+++ b/src/mame/drivers/drw80pkr.cpp
@@ -451,7 +451,8 @@ INPUT_PORTS_END
* Machine Driver *
*************************/
-MACHINE_CONFIG_START(drw80pkr_state::drw80pkr)
+void drw80pkr_state::drw80pkr(machine_config &config)
+{
// basic machine hardware
I8039(config, m_maincpu, CPU_CLOCK);
m_maincpu->set_addrmap(AS_PROGRAM, &drw80pkr_state::map);
@@ -468,13 +469,13 @@ MACHINE_CONFIG_START(drw80pkr_state::drw80pkr)
m_maincpu->set_vblank_int("screen", FUNC(drw80pkr_state::irq0_line_hold));
// video hardware
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE((31+1)*8, (31+1)*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 24*8-1, 0*8, 27*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(drw80pkr_state, screen_update)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size((31+1)*8, (31+1)*8);
+ screen.set_visarea(0*8, 24*8-1, 0*8, 27*8-1);
+ screen.set_screen_update(FUNC(drw80pkr_state::screen_update));
+ screen.set_palette("palette");
GFXDECODE(config, m_gfxdecode, "palette", gfx_drw80pkr);
PALETTE(config, "palette", FUNC(drw80pkr_state::drw80pkr_palette), 16 * 16);
@@ -485,7 +486,7 @@ MACHINE_CONFIG_START(drw80pkr_state::drw80pkr)
SPEAKER(config, "mono").front_center();
AY8912(config, m_aysnd, 20000000/12).add_route(ALL_OUTPUTS, "mono", 0.75);
-MACHINE_CONFIG_END
+}
/*************************
* Rom Load *
diff --git a/src/mame/drivers/dual68.cpp b/src/mame/drivers/dual68.cpp
index e17ff9fb232..e49dbf70b65 100644
--- a/src/mame/drivers/dual68.cpp
+++ b/src/mame/drivers/dual68.cpp
@@ -93,24 +93,25 @@ void dual68_state::kbd_put(u8 data)
//m_term_data = data;
}
-MACHINE_CONFIG_START(dual68_state::dual68)
+void dual68_state::dual68(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, 16_MHz_XTAL / 2) // MC68000L8
- MCFG_DEVICE_PROGRAM_MAP(dual68_mem)
+ M68000(config, m_maincpu, 16_MHz_XTAL / 2); // MC68000L8
+ m_maincpu->set_addrmap(AS_PROGRAM, &dual68_state::dual68_mem);
- MCFG_DEVICE_ADD("siocpu", I8085A, 9.8304_MHz_XTAL) // NEC D8085AC-2
- MCFG_DEVICE_PROGRAM_MAP(sio4_mem)
- MCFG_DEVICE_IO_MAP(sio4_io)
+ i8085a_cpu_device &siocpu(I8085A(config, "siocpu", 9.8304_MHz_XTAL)); // NEC D8085AC-2
+ siocpu.set_addrmap(AS_PROGRAM, &dual68_state::sio4_mem);
+ siocpu.set_addrmap(AS_IO, &dual68_state::sio4_io);
/* video hardware */
GENERIC_TERMINAL(config, m_terminal, 0);
m_terminal->set_keyboard_callback(FUNC(dual68_state::kbd_put));
- MCFG_DEVICE_ADD("usart1", MC2661, 9.8304_MHz_XTAL / 2) // SCN2661B
- MCFG_DEVICE_ADD("usart2", MC2661, 9.8304_MHz_XTAL / 2) // SCN2661B
- MCFG_DEVICE_ADD("usart3", MC2661, 9.8304_MHz_XTAL / 2) // SCN2661B
- MCFG_DEVICE_ADD("usart4", MC2661, 9.8304_MHz_XTAL / 2) // SCN2661B
-MACHINE_CONFIG_END
+ MC2661(config, "usart1", 9.8304_MHz_XTAL / 2); // SCN2661B
+ MC2661(config, "usart2", 9.8304_MHz_XTAL / 2); // SCN2661B
+ MC2661(config, "usart3", 9.8304_MHz_XTAL / 2); // SCN2661B
+ MC2661(config, "usart4", 9.8304_MHz_XTAL / 2); // SCN2661B
+}
/* ROM definition */
ROM_START( dual68 )
diff --git a/src/mame/drivers/duet16.cpp b/src/mame/drivers/duet16.cpp
index 07f469bf14e..a0d31db2481 100644
--- a/src/mame/drivers/duet16.cpp
+++ b/src/mame/drivers/duet16.cpp
@@ -353,7 +353,8 @@ static DEVICE_INPUT_DEFAULTS_START(keyboard)
DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_2 )
DEVICE_INPUT_DEFAULTS_END
-MACHINE_CONFIG_START(duet16_state::duet16)
+void duet16_state::duet16(machine_config &config)
+{
I8086(config, m_maincpu, 24_MHz_XTAL / 3);
m_maincpu->set_addrmap(AS_PROGRAM, &duet16_state::duet16_mem);
m_maincpu->set_addrmap(AS_IO, &duet16_state::duet16_io);
@@ -423,16 +424,16 @@ MACHINE_CONFIG_START(duet16_state::duet16)
crtc.set_char_width(8);
crtc.set_update_row_callback(FUNC(duet16_state::crtc_update_row), this);
- MCFG_PALETTE_ADD("palette", 8)
+ PALETTE(config, m_pal).set_entries(8);
PALETTE(config, m_chrpal, palette_device::BRG_3BIT);
GFXDECODE(config, "gfxdecode", m_chrpal, gfx_duet16);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_SIZE(640, 480)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
- MCFG_SCREEN_UPDATE_DEVICE("crtc", h46505_device, screen_update)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_size(640, 480);
+ m_screen->set_visarea_full();
+ m_screen->set_screen_update("crtc", FUNC(h46505_device::screen_update));
MSM58321(config, m_rtc, 32768_Hz_XTAL);
m_rtc->d0_handler().set(FUNC(duet16_state::rtc_d0_w));
@@ -442,7 +443,7 @@ MACHINE_CONFIG_START(duet16_state::duet16)
m_rtc->busy_handler().set(FUNC(duet16_state::rtc_busy_w));
m_rtc->set_year0(1980);
m_rtc->set_default_24h(true);
-MACHINE_CONFIG_END
+}
ROM_START(duet16)
ROM_REGION(0x2000, "rom", 0)
diff --git a/src/mame/drivers/dunhuang.cpp b/src/mame/drivers/dunhuang.cpp
index 163ae690c7b..2ef9246b647 100644
--- a/src/mame/drivers/dunhuang.cpp
+++ b/src/mame/drivers/dunhuang.cpp
@@ -804,27 +804,27 @@ void dunhuang_state::machine_reset()
}
-MACHINE_CONFIG_START(dunhuang_state::dunhuang)
-
+void dunhuang_state::dunhuang(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80,12000000/2)
- MCFG_DEVICE_PROGRAM_MAP(dunhuang_map)
- MCFG_DEVICE_IO_MAP(dunhuang_io_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dunhuang_state, irq0_line_hold)
+ Z80(config, m_maincpu, 12000000/2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &dunhuang_state::dunhuang_map);
+ m_maincpu->set_addrmap(AS_IO, &dunhuang_state::dunhuang_io_map);
+ m_maincpu->set_vblank_int("screen", FUNC(dunhuang_state::irq0_line_hold));
WATCHDOG_TIMER(config, "watchdog").set_time(attotime::from_seconds(5));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(512, 256)
- MCFG_SCREEN_VISIBLE_AREA(0+8, 512-8-1, 0+16, 256-16-1)
- MCFG_SCREEN_UPDATE_DRIVER(dunhuang_state, screen_update)
- MCFG_SCREEN_PALETTE("palette")
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ m_screen->set_size(512, 256);
+ m_screen->set_visarea(0+8, 512-8-1, 0+16, 256-16-1);
+ m_screen->set_screen_update(FUNC(dunhuang_state::screen_update));
+ m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_dunhuang);
- MCFG_PALETTE_ADD("palette", 0x100)
+ PALETTE(config, m_palette).set_entries(0x100);
ramdac_device &ramdac(RAMDAC(config, "ramdac", 0, m_palette)); // HMC HM86171 VGA 256 colour RAMDAC
ramdac.set_addrmap(0, &dunhuang_state::ramdac_map);
@@ -839,9 +839,8 @@ MACHINE_CONFIG_START(dunhuang_state::dunhuang)
ay8910.port_a_write_callback().set(FUNC(dunhuang_state::input_w));
ay8910.add_route(ALL_OUTPUTS, "mono", 0.30);
- MCFG_DEVICE_ADD("oki", OKIM6295, 12000000/8, okim6295_device::PIN7_HIGH)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
-MACHINE_CONFIG_END
+ OKIM6295(config, "oki", 12000000/8, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.80);
+}
/***************************************************************************
diff --git a/src/mame/drivers/dvk_kcgd.cpp b/src/mame/drivers/dvk_kcgd.cpp
index 68ad6b8f872..d654e026898 100644
--- a/src/mame/drivers/dvk_kcgd.cpp
+++ b/src/mame/drivers/dvk_kcgd.cpp
@@ -346,7 +346,8 @@ static GFXDECODE_START( gfx_kcgd )
GFXDECODE_ENTRY("maincpu", 0112236, kcgd_charlayout, 0, 1)
GFXDECODE_END
-MACHINE_CONFIG_START(kcgd_state::kcgd)
+void kcgd_state::kcgd(machine_config &config)
+{
K1801VM2(config, m_maincpu, XTAL(30'800'000)/4);
m_maincpu->set_addrmap(AS_PROGRAM, &kcgd_state::kcgd_mem);
m_maincpu->set_initial_mode(0100000);
@@ -355,12 +356,12 @@ MACHINE_CONFIG_START(kcgd_state::kcgd)
scantimer.configure_periodic(FUNC(kcgd_state::scanline_callback), attotime::from_hz(50*28*11)); // XXX verify
scantimer.set_start_delay(attotime::from_hz(XTAL(30'800'000)/KCGD_HORZ_START));
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_UPDATE_DRIVER(kcgd_state, screen_update)
- MCFG_SCREEN_RAW_PARAMS(XTAL(30'800'000), KCGD_TOTAL_HORZ, KCGD_HORZ_START,
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_screen_update(FUNC(kcgd_state::screen_update));
+ m_screen->set_raw(XTAL(30'800'000), KCGD_TOTAL_HORZ, KCGD_HORZ_START,
KCGD_HORZ_START+KCGD_DISP_HORZ, KCGD_TOTAL_VERT, KCGD_VERT_START,
KCGD_VERT_START+KCGD_DISP_VERT);
- MCFG_SCREEN_PALETTE(m_palette)
+ m_screen->set_palette(m_palette);
PALETTE(config, m_palette, FUNC(kcgd_state::kcgd_palette), 16);
@@ -372,7 +373,7 @@ MACHINE_CONFIG_START(kcgd_state::kcgd)
clock_device &keyboard_clock(CLOCK(config, "keyboard_clock", 4800*16));
keyboard_clock.signal_handler().set(FUNC(kcgd_state::write_keyboard_clock));
#endif
-MACHINE_CONFIG_END
+}
ROM_START( dvk_kcgd )
ROM_REGION16_BE(0x100000,"maincpu", ROMREGION_ERASE00)
diff --git a/src/mame/drivers/dvk_ksm.cpp b/src/mame/drivers/dvk_ksm.cpp
index 1dc84215d1a..a1e0b109afa 100644
--- a/src/mame/drivers/dvk_ksm.cpp
+++ b/src/mame/drivers/dvk_ksm.cpp
@@ -414,11 +414,12 @@ static GFXDECODE_START( gfx_ksm )
GFXDECODE_ENTRY("chargen", 0x0000, ksm_charlayout, 0, 1)
GFXDECODE_END
-MACHINE_CONFIG_START(ksm_state::ksm)
- MCFG_DEVICE_ADD("maincpu", I8080, XTAL(15'400'000)/10)
- MCFG_DEVICE_PROGRAM_MAP(ksm_mem)
- MCFG_DEVICE_IO_MAP(ksm_io)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("pic8259", pic8259_device, inta_cb)
+void ksm_state::ksm(machine_config &config)
+{
+ I8080(config, m_maincpu, XTAL(15'400'000)/10);
+ m_maincpu->set_addrmap(AS_PROGRAM, &ksm_state::ksm_mem);
+ m_maincpu->set_addrmap(AS_IO, &ksm_state::ksm_io);
+ m_maincpu->set_irq_acknowledge_callback("pic8259", FUNC(pic8259_device::inta_cb));
TIMER(config, "scantimer").configure_scanline(FUNC(ksm_state::scanline_callback), "screen", 0, 1);
@@ -464,7 +465,7 @@ MACHINE_CONFIG_START(ksm_state::ksm)
// baud rate is supposed to be 4800 but keyboard is slightly faster
clock_device &keyboard_clock(CLOCK(config, "keyboard_clock", 4960*16));
keyboard_clock.signal_handler().set(FUNC(ksm_state::write_keyboard_clock));
-MACHINE_CONFIG_END
+}
ROM_START( dvk_ksm )
ROM_REGION(0x1000, "maincpu", ROMREGION_ERASE00)
diff --git a/src/mame/drivers/dynadice.cpp b/src/mame/drivers/dynadice.cpp
index 7456a37d451..73048c13abd 100644
--- a/src/mame/drivers/dynadice.cpp
+++ b/src/mame/drivers/dynadice.cpp
@@ -260,28 +260,28 @@ void dynadice_state::machine_reset()
m_ay_data = 0;
}
-MACHINE_CONFIG_START(dynadice_state::dynadice)
-
+void dynadice_state::dynadice(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD(m_maincpu, I8080, 18.432_MHz_XTAL / 8)
- MCFG_DEVICE_PROGRAM_MAP(dynadice_map)
- MCFG_DEVICE_IO_MAP(dynadice_io_map)
+ I8080(config, m_maincpu, 18.432_MHz_XTAL / 8);
+ m_maincpu->set_addrmap(AS_PROGRAM, &dynadice_state::dynadice_map);
+ m_maincpu->set_addrmap(AS_IO, &dynadice_state::dynadice_io_map);
- MCFG_DEVICE_ADD("audiocpu", Z80, 18.432_MHz_XTAL / 6)
- MCFG_DEVICE_PROGRAM_MAP(dynadice_sound_map)
- MCFG_DEVICE_IO_MAP(dynadice_sound_io_map)
+ z80_device &audiocpu(Z80(config, "audiocpu", 18.432_MHz_XTAL / 6));
+ audiocpu.set_addrmap(AS_PROGRAM, &dynadice_state::dynadice_sound_map);
+ audiocpu.set_addrmap(AS_IO, &dynadice_state::dynadice_sound_io_map);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(256+16, 256)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 34*8-1, 3*8, 28*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(dynadice_state, screen_update)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(256+16, 256);
+ screen.set_visarea(0*8, 34*8-1, 3*8, 28*8-1);
+ screen.set_screen_update(FUNC(dynadice_state::screen_update));
+ screen.set_palette("palette");
GFXDECODE(config, m_gfxdecode, "palette", gfx_dynadice);
PALETTE(config, "palette", palette_device::BRG_3BIT);
@@ -291,7 +291,7 @@ MACHINE_CONFIG_START(dynadice_state::dynadice)
GENERIC_LATCH_8(config, "soundlatch");
AY8910(config, m_ay8910, 2000000).add_route(ALL_OUTPUTS, "mono", 1.0);
-MACHINE_CONFIG_END
+}
ROM_START( dynadice )
ROM_REGION( 0x10000, "maincpu", 0 )
diff --git a/src/mame/drivers/egghunt.cpp b/src/mame/drivers/egghunt.cpp
index 29d48c6fe2e..b01bd8a025a 100644
--- a/src/mame/drivers/egghunt.cpp
+++ b/src/mame/drivers/egghunt.cpp
@@ -227,7 +227,7 @@ WRITE8_MEMBER(egghunt_state::egghunt_vidram_bank_w)
WRITE8_MEMBER(egghunt_state::egghunt_soundlatch_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
diff --git a/src/mame/drivers/equites.cpp b/src/mame/drivers/equites.cpp
index ebec71eb31d..b3b34eecd71 100644
--- a/src/mame/drivers/equites.cpp
+++ b/src/mame/drivers/equites.cpp
@@ -444,7 +444,7 @@ WRITE8_MEMBER(equites_state::equites_c0f8_w)
case 7: // c0ff: sound command latch clear
// Note: solder pad CP1 on the pcb would allow to disable this
- m_soundlatch->clear_w(space, 0, 0);
+ m_soundlatch->clear_w();
break;
}
}
diff --git a/src/mame/drivers/esd16.cpp b/src/mame/drivers/esd16.cpp
index a012af3cc94..094df3194e7 100644
--- a/src/mame/drivers/esd16.cpp
+++ b/src/mame/drivers/esd16.cpp
@@ -85,70 +85,66 @@ ToDo:
***************************************************************************/
-WRITE16_MEMBER(esd16_state::esd16_sound_command_w)
+void esd16_state::sound_command_w(u8 data)
{
- if (ACCESSING_BITS_0_7)
- {
- m_soundlatch->write(space, 0, data & 0xff);
- m_audiocpu->set_input_line(0, ASSERT_LINE); // Generate an IRQ
- m_maincpu->spin_until_time(attotime::from_usec(50)); // Allow the other CPU to reply
- }
+ m_soundlatch->write(data & 0xff);
+ m_maincpu->spin_until_time(attotime::from_usec(50)); // Allow the other CPU to reply
}
-WRITE16_MEMBER(esd16_state::hedpanic_platform_w)
+template<unsigned Layer>
+void esd16_state::vram_w(offs_t offset, u16 data, u16 mem_mask)
+{
+ COMBINE_DATA(&m_vram[Layer][offset]);
+ m_tilemap[Layer]->mark_tile_dirty(offset);
+ m_tilemap_16x16[Layer]->mark_tile_dirty(offset);
+}
+
+void esd16_state::hedpanic_platform_w(u16 data)
{
int offsets = m_headpanic_platform_x[0] + 0x40 * m_headpanic_platform_y[0];
- m_vram_1[offsets] = data;
- m_tilemap_1_16x16->mark_tile_dirty(offsets);
+ m_vram[1][offsets] = data;
+ m_tilemap[1]->mark_tile_dirty(offsets);
+ m_tilemap_16x16[1]->mark_tile_dirty(offsets);
}
-READ16_MEMBER(esd16_state::esd_eeprom_r)
+u8 esd16_state::eeprom_r()
{
- if (ACCESSING_BITS_8_15)
- {
- return ((m_eeprom->do_read() & 0x01) << 15);
- }
-
-// logerror("(0x%06x) unk EEPROM read: %04x\n", m_maincpu->pc(), mem_mask);
- return 0;
+ return ((m_eeprom->do_read() & 0x01) << 7);
}
-WRITE16_MEMBER(esd16_state::esd_eeprom_w)
+void esd16_state::eeprom_w(u8 data)
{
- if (ACCESSING_BITS_8_15)
- ioport("EEPROMOUT")->write(data, 0xffff);
-
-// logerror("(0x%06x) Unk EEPROM write: %04x %04x\n", m_maincpu->pc(), data, mem_mask);
+ m_io_eepromout->write(data, 0xff);
}
-void esd16_state::esd16_io_area_dsw(address_map &map, u32 base)
+void esd16_state::io_area_dsw(address_map &map, u32 base)
{
map(base + 0x0, base + 0x1).nopw(); /* Irq Ack */
map(base + 0x2, base + 0x3).portr("P1_P2");
map(base + 0x4, base + 0x5).portr("SYSTEM");
map(base + 0x6, base + 0x7).portr("DSW");
- map(base + 0x8, base + 0x9).w(FUNC(esd16_state::esd16_tilemap0_color_w));
+ map(base + 0x8, base + 0x9).w(FUNC(esd16_state::tilemap0_color_w));
map(base + 0xa, base + 0xb).nopw(); /* Unknown */
- map(base + 0xc, base + 0xd).w(FUNC(esd16_state::esd16_sound_command_w));
+ map(base + 0xd, base + 0xd).w(FUNC(esd16_state::sound_command_w));
map(base + 0xe, base + 0xf).nopw(); /* n/c */
}
-void esd16_state::esd16_io_area_eeprom(address_map &map, u32 base)
+void esd16_state::io_area_eeprom(address_map &map, u32 base)
{
map(base + 0x0, base + 0x1).nopw(); /* Irq Ack */
map(base + 0x2, base + 0x3).portr("P1_P2");
map(base + 0x4, base + 0x5).portr("SYSTEM");
- map(base + 0x6, base + 0x7).r(FUNC(esd16_state::esd_eeprom_r));
- map(base + 0x8, base + 0x9).w(FUNC(esd16_state::esd16_tilemap0_color_w));
+ map(base + 0x6, base + 0x6).r(FUNC(esd16_state::eeprom_r));
+ map(base + 0x8, base + 0x9).w(FUNC(esd16_state::tilemap0_color_w));
map(base + 0xa, base + 0xb).nopw(); /* Unknown */
- map(base + 0xc, base + 0xd).w(FUNC(esd16_state::esd16_sound_command_w));
- map(base + 0xe, base + 0xf).w(FUNC(esd16_state::esd_eeprom_w));
+ map(base + 0xd, base + 0xd).w(FUNC(esd16_state::sound_command_w));
+ map(base + 0xe, base + 0xf).w(FUNC(esd16_state::eeprom_w));
}
-void esd16_state::esd16_vid_attr_area(address_map &map, u32 base)
+void esd16_state::vid_attr_area(address_map &map, u32 base)
{
map(base + 0x0, base + 0x3).writeonly().share("scroll_0");
map(base + 0x4, base + 0x7).writeonly().share("scroll_1");
@@ -158,20 +154,20 @@ void esd16_state::esd16_vid_attr_area(address_map &map, u32 base)
map(base + 0xe, base + 0xf).writeonly().share("head_layersize");
}
-void esd16_state::esd16_palette_area(address_map &map, u32 base)
+void esd16_state::palette_area(address_map &map, u32 base)
{
map(base + 0x000, base + 0xfff).ram().w("palette", FUNC(palette_device::write16)).share("palette");
}
-void esd16_state::esd16_sprite_area(address_map &map, u32 base)
+void esd16_state::sprite_area(address_map &map, u32 base)
{
map(base + 0x000, base + 0x7ff).writeonly().share("spriteram").mirror(0x000800);
}
-void esd16_state::esd16_vram_area(address_map &map, u32 base)
+void esd16_state::vram_area(address_map &map, u32 base)
{
- map(base + 0x00000, base + 0x03fff).w(FUNC(esd16_state::esd16_vram_0_w)).share("vram_0").mirror(0x4000);
- map(base + 0x20000, base + 0x23fff).w(FUNC(esd16_state::esd16_vram_1_w)).share("vram_1").mirror(0x4000);
+ map(base + 0x00000, base + 0x03fff).w(FUNC(esd16_state::vram_w<0>)).share("vram_0").mirror(0x4000);
+ map(base + 0x20000, base + 0x23fff).w(FUNC(esd16_state::vram_w<1>)).share("vram_1").mirror(0x4000);
}
/*** Memory Maps ***/
@@ -181,11 +177,11 @@ void esd16_state::multchmp_map(address_map &map)
map(0x000000, 0x07ffff).rom();
map(0x100000, 0x10ffff).ram();
- esd16_palette_area(map, 0x200000);
- esd16_sprite_area(map, 0x300000);
- esd16_vram_area(map, 0x400000);
- esd16_vid_attr_area(map, 0x500000);
- esd16_io_area_dsw(map, 0x600000);
+ palette_area(map, 0x200000);
+ sprite_area(map, 0x300000);
+ vram_area(map, 0x400000);
+ vid_attr_area(map, 0x500000);
+ io_area_dsw(map, 0x600000);
map(0x700008, 0x70000b).nopr(); // unused protection?
}
@@ -196,13 +192,13 @@ void esd16_state::jumppop_map(address_map &map)
map(0x120000, 0x123fff).ram();
map(0x1a0000, 0x1a7fff).ram();
- esd16_palette_area(map, 0x140000);
- esd16_sprite_area(map, 0x160000);
- esd16_io_area_dsw(map, 0x180000);
- esd16_vram_area(map, 0x300000);
- esd16_vid_attr_area(map, 0x380000);
+ palette_area(map, 0x140000);
+ sprite_area(map, 0x160000);
+ io_area_dsw(map, 0x180000);
+ vram_area(map, 0x300000);
+ vid_attr_area(map, 0x380000);
- map(0x180008, 0x180009).w(FUNC(esd16_state::esd16_tilemap0_color_jumppop_w)); // todo
+ map(0x180008, 0x180009).w(FUNC(esd16_state::tilemap0_color_jumppop_w)); // todo
}
void esd16_state::hedpanic_map(address_map &map)
@@ -210,11 +206,11 @@ void esd16_state::hedpanic_map(address_map &map)
map(0x000000, 0x07ffff).rom();
map(0x100000, 0x10ffff).ram();
- esd16_palette_area(map, 0x800000);
- esd16_sprite_area(map, 0x900000);
- esd16_vram_area(map, 0xa00000);
- esd16_vid_attr_area(map, 0xb00000);
- esd16_io_area_eeprom(map, 0xc00000);
+ palette_area(map, 0x800000);
+ sprite_area(map, 0x900000);
+ vram_area(map, 0xa00000);
+ vid_attr_area(map, 0xb00000);
+ io_area_eeprom(map, 0xc00000);
map(0xd00008, 0xd00009).w(FUNC(esd16_state::hedpanic_platform_w)); // protection
}
@@ -226,11 +222,11 @@ void esd16_state::mchampdx_map(address_map &map)
map(0x000000, 0x07ffff).rom();
map(0x200000, 0x20ffff).ram();
- esd16_vram_area(map, 0x300000);
- esd16_palette_area(map, 0x400000);
- esd16_io_area_eeprom(map, 0x500000);
- esd16_sprite_area(map, 0x600000);
- esd16_vid_attr_area(map, 0x700000);
+ vram_area(map, 0x300000);
+ palette_area(map, 0x400000);
+ io_area_eeprom(map, 0x500000);
+ sprite_area(map, 0x600000);
+ vid_attr_area(map, 0x700000);
map(0xd00008, 0xd00009).w(FUNC(esd16_state::hedpanic_platform_w)); // not used in mchampdx?
}
@@ -242,11 +238,11 @@ void esd16_state::tangtang_map(address_map &map)
map(0x000000, 0x07ffff).rom();
map(0x700000, 0x70ffff).ram();
- esd16_palette_area(map, 0x100000);
- esd16_sprite_area(map, 0x200000);
- esd16_vram_area(map, 0x300000);
- esd16_vid_attr_area(map, 0x400000);
- esd16_io_area_eeprom(map, 0x500000);
+ palette_area(map, 0x100000);
+ sprite_area(map, 0x200000);
+ vram_area(map, 0x300000);
+ vid_attr_area(map, 0x400000);
+ io_area_eeprom(map, 0x500000);
map(0x600008, 0x600009).w(FUNC(esd16_state::hedpanic_platform_w));
}
@@ -259,34 +255,26 @@ void esd16_state::tangtang_map(address_map &map)
***************************************************************************/
-WRITE8_MEMBER(esd16_state::esd16_sound_rombank_w)
+void esd16_state::sound_rombank_w(u8 data)
{
- int bank = data & 0xf;
- membank("bank1")->set_entry(bank);
+ m_audiobank->set_entry(data & 0xf);
}
-void esd16_state::multchmp_sound_map(address_map &map)
+void esd16_state::sound_map(address_map &map)
{
map(0x0000, 0x7fff).rom(); // ROM
- map(0x8000, 0xbfff).bankr("bank1"); // Banked ROM
+ map(0x8000, 0xbfff).bankr("audiobank"); // Banked ROM
map(0xf800, 0xffff).ram(); // RAM
}
-READ8_MEMBER(esd16_state::esd16_sound_command_r)
-{
- /* Clear IRQ only after reading the command, or some get lost */
- m_audiocpu->set_input_line(0, CLEAR_LINE);
- return m_soundlatch->read(space, 0);
-}
-
-void esd16_state::multchmp_sound_io_map(address_map &map)
+void esd16_state::sound_io_map(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x01).w("ymsnd", FUNC(ym3812_device::write)); // YM3812
map(0x02, 0x02).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); // M6295
- map(0x03, 0x03).r(FUNC(esd16_state::esd16_sound_command_r)); // From Main CPU
+ map(0x03, 0x03).r(m_soundlatch, FUNC(generic_latch_8_device::read)); // From Main CPU
map(0x04, 0x04).nopw(); // ? $00, $30
- map(0x05, 0x05).w(FUNC(esd16_state::esd16_sound_rombank_w)); // ROM Bank
+ map(0x05, 0x05).w(FUNC(esd16_state::sound_rombank_w)); // ROM Bank
map(0x06, 0x06).noprw(); // ? At the start / ? 1 (End of NMI routine)
}
@@ -484,9 +472,9 @@ static INPUT_PORTS_START( hedpanic )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START( "EEPROMOUT" )
- PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write)
- PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write)
- PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write)
INPUT_PORTS_END
@@ -521,9 +509,9 @@ static INPUT_PORTS_START( swatpolc )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START( "EEPROMOUT" )
- PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write)
- PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write)
- PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write)
INPUT_PORTS_END
/***************************************************************************
@@ -542,10 +530,8 @@ static const gfx_layout jumppop_sprite_16x16x4 =
RGN_FRAC(1,2),
4,
{ RGN_FRAC(1,2)+8, RGN_FRAC(1,2)+0, 8, 0 },
- { 32*8+0, 32*8+1, 32*8+2, 32*8+3, 32*8+4, 32*8+5, 32*8+6, 32*8+7,
- 0, 1, 2, 3, 4, 5, 6, 7 },
- { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
- 8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 },
+ { STEP8(8*2*16,1), STEP8(0,1) },
+ { STEP16(0,8*2) },
64*8
};
@@ -554,9 +540,9 @@ static const gfx_layout hedpanic_sprite_16x16x5 =
16,16,
RGN_FRAC(1,3),
5,
- { RGN_FRAC(2,3), RGN_FRAC(0,3), RGN_FRAC(0,3)+8, RGN_FRAC(1,3),RGN_FRAC(1,3)+8 },
- { 256+0,256+1,256+2,256+3,256+4,256+5,256+6,256+7,0,1,2,3,4,5,6,7 },
- { 0*16,1*16,2*16,3*16,4*16,5*16,6*16,7*16,8*16,9*16,10*16,11*16,12*16,13*16,14*16,15*16 },
+ { RGN_FRAC(2,3), RGN_FRAC(0,3), RGN_FRAC(0,3)+8, RGN_FRAC(1,3),RGN_FRAC(1,3)+8 },
+ { STEP8(8*2*16,1), STEP8(0,1) },
+ { STEP16(0,8*2) },
16*32,
};
@@ -565,9 +551,9 @@ static const gfx_layout hedpanic_layout_8x8x8 =
8,8,
RGN_FRAC(1,1),
8,
- { 0,1,2,3,4,5,6,7 },
- { 0*8,2*8,1*8,3*8,4*8,6*8,5*8,7*8 },
- { 0*64,1*64,2*64,3*64,4*64,5*64,6*64,7*64 },
+ { STEP8(0,1) },
+ { STEP8(0,8) },
+ { STEP8(0,8*8) },
64*8,
};
@@ -576,12 +562,9 @@ static const gfx_layout hedpanic_layout_16x16x8 =
16,16,
RGN_FRAC(1,1),
8,
- { 0,1,2,3,4,5,6,7 },
- { 0*8,2*8,1*8,3*8,4*8,6*8,5*8,7*8,
- 64*8+0*8,64*8+2*8,64*8+1*8,64*8+3*8,64*8+4*8,64*8+6*8,64*8+5*8,64*8+7*8 },
- { 0*64,1*64,2*64,3*64,4*64,5*64,6*64,7*64,
- 128*8+0*64,128*8+1*64,128*8+2*64,128*8+3*64,128*8+4*64,128*8+5*64,128*8+6*64,128*8+7*64
- },
+ { STEP8(0,1) },
+ { STEP8(0,8), STEP8(8*8*8,8) },
+ { STEP8(0,8*8), STEP8(8*8*8*2,8*8) },
256*8,
};
@@ -611,19 +594,18 @@ void esd16_state::machine_start()
{
uint8_t *AUDIO = memregion("audiocpu")->base();
- membank("bank1")->configure_entries(0, 16, &AUDIO[0x0000], 0x4000);
+ m_audiobank->configure_entries(0, 16, &AUDIO[0x0000], 0x4000);
- save_item(NAME(m_tilemap0_color));
- save_item(NAME(m_tilemap1_color));
+ save_item(NAME(m_tilemap_color));
}
void esd16_state::machine_reset()
{
- m_tilemap0_color = 0;
- m_tilemap1_color = 0;
+ m_tilemap_color[0] = 0;
+ m_tilemap_color[1] = 0;
}
-DECOSPR_PRIORITY_CB_MEMBER(esd16_state::hedpanic_pri_callback)
+DECOSPR_PRIORITY_CB_MEMBER(esd16_state::pri_callback)
{
if (pri & 0x8000)
return 0xfffe; // under "tilemap 1"
@@ -639,35 +621,33 @@ void esd16_state::esd16(machine_config &config)
m_maincpu->set_vblank_int("screen", FUNC(esd16_state::irq6_line_hold));
Z80(config, m_audiocpu, XTAL(16'000'000)/4); /* 4MHz */
- m_audiocpu->set_addrmap(AS_PROGRAM, &esd16_state::multchmp_sound_map);
- m_audiocpu->set_addrmap(AS_IO, &esd16_state::multchmp_sound_io_map);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &esd16_state::sound_map);
+ m_audiocpu->set_addrmap(AS_IO, &esd16_state::sound_io_map);
m_audiocpu->set_periodic_int(FUNC(esd16_state::nmi_line_pulse), attotime::from_hz(32*60)); /* IRQ By Main CPU */
-
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
screen.set_size(0x140, 0x100);
screen.set_visarea(0, 0x140-1, 0+8, 0x100-8-1);
- screen.set_screen_update(FUNC(esd16_state::screen_update_hedpanic));
+ screen.set_screen_update(FUNC(esd16_state::screen_update));
screen.set_palette("palette");
DECO_SPRITE(config, m_sprgen, 0);
m_sprgen->set_gfx_region(0);
m_sprgen->set_is_bootleg(true);
- m_sprgen->set_pri_callback(FUNC(esd16_state::hedpanic_pri_callback), this);
+ m_sprgen->set_pri_callback(FUNC(esd16_state::pri_callback), this);
m_sprgen->set_flipallx(1);
m_sprgen->set_gfxdecode_tag(m_gfxdecode);
GFXDECODE(config, m_gfxdecode, "palette", gfx_esd16);
PALETTE(config, "palette").set_format(palette_device::xRGB_555, 0x1000/2);
-
/* sound hardware */
SPEAKER(config, "mono").front_center();
- GENERIC_LATCH_8(config, m_soundlatch);
+ GENERIC_LATCH_8(config, m_soundlatch).data_pending_callback().set_inputline(m_audiocpu, 0);
YM3812(config, "ymsnd", XTAL(16'000'000)/4).add_route(ALL_OUTPUTS, "mono", 0.30); /* 4MHz */
@@ -808,12 +788,12 @@ ROM_START( multchmp )
ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */
ROM_LOAD32_BYTE( "esd9.fu28", 0x000000, 0x080000, CRC(6652c04a) SHA1(178e1d42847506d869ef79db2f7e10df05e9ef76) )
- ROM_LOAD32_BYTE( "esd11.fu29", 0x000001, 0x080000, CRC(9bafd8ee) SHA1(db18be05431d4b6d4207e19fa4ed8701621aaa19) )
- ROM_LOAD32_BYTE( "esd7.fu26", 0x000002, 0x080000, CRC(a783a003) SHA1(1ff61a049485c5b599c458a8bf7f48027d14f8e0) )
+ ROM_LOAD32_BYTE( "esd11.fu29", 0x000002, 0x080000, CRC(9bafd8ee) SHA1(db18be05431d4b6d4207e19fa4ed8701621aaa19) )
+ ROM_LOAD32_BYTE( "esd7.fu26", 0x000001, 0x080000, CRC(a783a003) SHA1(1ff61a049485c5b599c458a8bf7f48027d14f8e0) )
ROM_LOAD32_BYTE( "esd5.fu27", 0x000003, 0x080000, CRC(299f32c2) SHA1(274752444f6ddba16eeefc02c3e78525c079b3d8) )
ROM_LOAD32_BYTE( "esd10.fu31", 0x200000, 0x080000, CRC(d815974b) SHA1(3e528a5df79fa7dc0f38b0ee7f2f3a0ebc97a369) )
- ROM_LOAD32_BYTE( "esd12.fu33", 0x200001, 0x080000, CRC(c6b86001) SHA1(11a63b56df30ab7b85ce4568d2a24e96a125735a) )
- ROM_LOAD32_BYTE( "esd8.fu30", 0x200002, 0x080000, CRC(22861af2) SHA1(1e74e85517cb8fd5fb4bda6e9d9d54046e31f653) )
+ ROM_LOAD32_BYTE( "esd12.fu33", 0x200002, 0x080000, CRC(c6b86001) SHA1(11a63b56df30ab7b85ce4568d2a24e96a125735a) )
+ ROM_LOAD32_BYTE( "esd8.fu30", 0x200001, 0x080000, CRC(22861af2) SHA1(1e74e85517cb8fd5fb4bda6e9d9d54046e31f653) )
ROM_LOAD32_BYTE( "esd6.fu32", 0x200003, 0x080000, CRC(e2689bb2) SHA1(1da9b1f7335d5c2d1c2f8353fccf91c0109d2e9d) )
ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
@@ -837,12 +817,12 @@ ROM_START( multchmpk )
ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */
ROM_LOAD32_BYTE( "multchmp.u31", 0x000000, 0x080000, CRC(b1e4e9e3) SHA1(1a7393e9073b028b4170393b3788ad8cb86c0c78) )
- ROM_LOAD32_BYTE( "multchmp.u33", 0x000001, 0x080000, CRC(e4c0ec96) SHA1(74152108e4d05f4aff9d38919f212fcb8c87cef3) )
- ROM_LOAD32_BYTE( "multchmp.u29", 0x000002, 0x080000, CRC(01bd1399) SHA1(b717ccffe0af92a42a0879736d34d3ad71840233) )
+ ROM_LOAD32_BYTE( "multchmp.u33", 0x000002, 0x080000, CRC(e4c0ec96) SHA1(74152108e4d05f4aff9d38919f212fcb8c87cef3) )
+ ROM_LOAD32_BYTE( "multchmp.u29", 0x000001, 0x080000, CRC(01bd1399) SHA1(b717ccffe0af92a42a0879736d34d3ad71840233) )
ROM_LOAD32_BYTE( "multchmp.u27", 0x000003, 0x080000, CRC(dc42704e) SHA1(58a04a47ffc6d6ae0e4d49e466b1c58b37ad741a) )
ROM_LOAD32_BYTE( "multchmp.u32", 0x200000, 0x080000, CRC(f05cb5b4) SHA1(1b33e60942238e39d61ae59e9317b99e83595ab1) )
- ROM_LOAD32_BYTE( "multchmp.u34", 0x200001, 0x080000, CRC(bffaaccc) SHA1(d9ab248e2c7c639666e3717cfc5d8c8468a1bde2) )
- ROM_LOAD32_BYTE( "multchmp.u30", 0x200002, 0x080000, CRC(c6b4cc18) SHA1(d9097b85584272cfe4989a40d622ef1feeee6775) )
+ ROM_LOAD32_BYTE( "multchmp.u34", 0x200002, 0x080000, CRC(bffaaccc) SHA1(d9ab248e2c7c639666e3717cfc5d8c8468a1bde2) )
+ ROM_LOAD32_BYTE( "multchmp.u30", 0x200001, 0x080000, CRC(c6b4cc18) SHA1(d9097b85584272cfe4989a40d622ef1feeee6775) )
ROM_LOAD32_BYTE( "multchmp.u28", 0x200003, 0x080000, CRC(449991fa) SHA1(fd93e420a04cb8bea5421aa9cbe079bd3e7d4924) )
ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
@@ -866,12 +846,12 @@ ROM_START( multchmpa ) /* Also found on a ESD 10-10-98 PCB which looks identical
ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */
ROM_LOAD32_BYTE( "esd9.fu28", 0x000000, 0x080000, CRC(a3cfe895) SHA1(a8dc0d5d9e64d4c5112177b8f20b5bdb86ca73af) )
- ROM_LOAD32_BYTE( "esd11.fu29", 0x000001, 0x080000, CRC(d3c1855e) SHA1(bb547d4a45a745e9ae4a6727087cdf325105de90) )
- ROM_LOAD32_BYTE( "esd7.fu26", 0x000002, 0x080000, CRC(042d59ff) SHA1(8e45a4757e07d8aaf50b151d8849c1a27424e64b) )
+ ROM_LOAD32_BYTE( "esd11.fu29", 0x000002, 0x080000, CRC(d3c1855e) SHA1(bb547d4a45a745e9ae4a6727087cdf325105de90) )
+ ROM_LOAD32_BYTE( "esd7.fu26", 0x000001, 0x080000, CRC(042d59ff) SHA1(8e45a4757e07d8aaf50b151d8849c1a27424e64b) )
ROM_LOAD32_BYTE( "esd5.fu27", 0x000003, 0x080000, CRC(ed5b4e58) SHA1(82c3ee9e2525c0b370a29d5560c21ec6380d1a43) )
ROM_LOAD32_BYTE( "esd10.fu31", 0x200000, 0x080000, CRC(396d77b6) SHA1(f22449a7f9f50e172e36db4f399c14e527409884) )
- ROM_LOAD32_BYTE( "esd12.fu33", 0x200001, 0x080000, CRC(a68848a8) SHA1(915239a961d76af6a1a567eb89b1569f158e714e) )
- ROM_LOAD32_BYTE( "esd8.fu30", 0x200002, 0x080000, CRC(fa8cd2d3) SHA1(ddc1b98867e6d2eee458bf35a933e7cdc59f4c7e) )
+ ROM_LOAD32_BYTE( "esd12.fu33", 0x200002, 0x080000, CRC(a68848a8) SHA1(915239a961d76af6a1a567eb89b1569f158e714e) )
+ ROM_LOAD32_BYTE( "esd8.fu30", 0x200001, 0x080000, CRC(fa8cd2d3) SHA1(ddc1b98867e6d2eee458bf35a933e7cdc59f4c7e) )
ROM_LOAD32_BYTE( "esd6.fu32", 0x200003, 0x080000, CRC(97fde7b1) SHA1(b3610f6fcc1367ff079dc01121c86bc1e1f4c7a2) )
ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
@@ -949,8 +929,8 @@ ROM_START( mchampdx )
ROM_FILL( 0x500000, 0x100000, 0x00 )
ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */
- ROM_LOAD16_BYTE( "rom.fu35", 0x000000, 0x200000, CRC(ba46f3dc) SHA1(4ac7695bdf4237654481f7f74f8650d70a51e691) )
- ROM_LOAD16_BYTE( "rom.fu34", 0x000001, 0x200000, CRC(2895cf09) SHA1(88756fcd589af1986c3881d4080f086afc11b498) )
+ ROM_LOAD32_WORD( "rom.fu35", 0x000000, 0x200000, CRC(ba46f3dc) SHA1(4ac7695bdf4237654481f7f74f8650d70a51e691) )
+ ROM_LOAD32_WORD( "rom.fu34", 0x000002, 0x200000, CRC(2895cf09) SHA1(88756fcd589af1986c3881d4080f086afc11b498) )
ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
ROM_LOAD( "esd4.su10", 0x00000, 0x40000, CRC(2fbe94ab) SHA1(1bc4a33ec93a80fb598722d2b50bdf3ccaaa984a) )
@@ -975,8 +955,8 @@ ROM_START( mchampdxa )
ROM_FILL( 0x500000, 0x100000, 0x00 )
ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */
- ROM_LOAD16_BYTE( "rom.fu35", 0x000000, 0x200000, CRC(ba46f3dc) SHA1(4ac7695bdf4237654481f7f74f8650d70a51e691) )
- ROM_LOAD16_BYTE( "rom.fu34", 0x000001, 0x200000, CRC(2895cf09) SHA1(88756fcd589af1986c3881d4080f086afc11b498) )
+ ROM_LOAD32_WORD( "rom.fu35", 0x000000, 0x200000, CRC(ba46f3dc) SHA1(4ac7695bdf4237654481f7f74f8650d70a51e691) )
+ ROM_LOAD32_WORD( "rom.fu34", 0x000002, 0x200000, CRC(2895cf09) SHA1(88756fcd589af1986c3881d4080f086afc11b498) )
ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
ROM_LOAD( "esd4.su10", 0x00000, 0x40000, CRC(2fbe94ab) SHA1(1bc4a33ec93a80fb598722d2b50bdf3ccaaa984a) )
@@ -1001,8 +981,8 @@ ROM_START( mchampdxb )
ROM_FILL( 0x500000, 0x100000, 0x00 )
ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */
- ROM_LOAD16_BYTE( "ver1114_fu35", 0x000000, 0x200000, CRC(c515c704) SHA1(c1657534314e66a25c38f70a12f14d2225ab89cc) ) // SMT Flash MX chips
- ROM_LOAD16_BYTE( "ver1114_fu34", 0x000001, 0x200000, CRC(39d448bb) SHA1(07cd6e30a25d1c0caeef0f95f23df0ca6a2c7a26) )
+ ROM_LOAD32_WORD( "ver1114_fu35", 0x000000, 0x200000, CRC(c515c704) SHA1(c1657534314e66a25c38f70a12f14d2225ab89cc) ) // SMT Flash MX chips
+ ROM_LOAD32_WORD( "ver1114_fu34", 0x000002, 0x200000, CRC(39d448bb) SHA1(07cd6e30a25d1c0caeef0f95f23df0ca6a2c7a26) )
ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
ROM_LOAD( "esd4.su10", 0x00000, 0x40000, CRC(2fbe94ab) SHA1(1bc4a33ec93a80fb598722d2b50bdf3ccaaa984a) )
@@ -1114,8 +1094,8 @@ ROM_START( hedpanic ) /* Story line & game instructions in English */
ROM_FILL( 0x500000, 0x100000, 0x00 )
ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */
- ROM_LOAD16_BYTE( "esd8.fu35", 0x000000, 0x200000, CRC(23aceb4f) SHA1(35d9ebc33b9e1515e47750cfcdfc0bf8bf44b71d) )
- ROM_LOAD16_BYTE( "esd9.fu34", 0x000001, 0x200000, CRC(76b46cd2) SHA1(679cbf50ae5935e8848868081ecef4ec66424f6c) )
+ ROM_LOAD32_WORD( "esd8.fu35", 0x000000, 0x200000, CRC(23aceb4f) SHA1(35d9ebc33b9e1515e47750cfcdfc0bf8bf44b71d) )
+ ROM_LOAD32_WORD( "esd9.fu34", 0x000002, 0x200000, CRC(76b46cd2) SHA1(679cbf50ae5935e8848868081ecef4ec66424f6c) )
ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
ROM_LOAD( "esd4.su10", 0x000000, 0x020000, CRC(3c11c590) SHA1(cb33845c3dc0501fff8055c2d66f412881089df1) ) /* AT27010 mask rom */
@@ -1141,8 +1121,8 @@ ROM_START( hedpanicf ) /* Story line in Japanese, game instructions in English *
ROM_FILL( 0x500000, 0x100000, 0x00 )
ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */
- ROM_LOAD16_BYTE( "esd8.fu35", 0x000000, 0x200000, CRC(23aceb4f) SHA1(35d9ebc33b9e1515e47750cfcdfc0bf8bf44b71d) )
- ROM_LOAD16_BYTE( "esd9.fu34", 0x000001, 0x200000, CRC(76b46cd2) SHA1(679cbf50ae5935e8848868081ecef4ec66424f6c) )
+ ROM_LOAD32_WORD( "esd8.fu35", 0x000000, 0x200000, CRC(23aceb4f) SHA1(35d9ebc33b9e1515e47750cfcdfc0bf8bf44b71d) )
+ ROM_LOAD32_WORD( "esd9.fu34", 0x000002, 0x200000, CRC(76b46cd2) SHA1(679cbf50ae5935e8848868081ecef4ec66424f6c) )
ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
ROM_LOAD( "esd4.su10", 0x000000, 0x020000, CRC(3c11c590) SHA1(cb33845c3dc0501fff8055c2d66f412881089df1) ) /* AT27010 mask rom */
@@ -1168,8 +1148,8 @@ ROM_START( hedpanica ) /* Story line & game instructions in English, copyright y
ROM_FILL( 0x500000, 0x100000, 0x00 )
ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */
- ROM_LOAD16_BYTE( "fu35", 0x000000, 0x200000, CRC(9b5a45c5) SHA1(fbd8bc6ccc068d2cc7fe4f575fa0847f53e786ab) )
- ROM_LOAD16_BYTE( "fu34", 0x000001, 0x200000, CRC(8f2099cc) SHA1(40795ae5fb8de613c2d5b6147992c153695bf698) )
+ ROM_LOAD32_WORD( "fu35", 0x000000, 0x200000, CRC(9b5a45c5) SHA1(fbd8bc6ccc068d2cc7fe4f575fa0847f53e786ab) )
+ ROM_LOAD32_WORD( "fu34", 0x000002, 0x200000, CRC(8f2099cc) SHA1(40795ae5fb8de613c2d5b6147992c153695bf698) )
ROM_REGION( 0x80000, "oki", 0 ) /* Samples */
ROM_LOAD( "esd4.bin", 0x000000, 0x080000, CRC(5692fe92) SHA1(4423039cb437ab36d198b212ef394bf1704be404) ) /* SU10 */
@@ -1195,8 +1175,8 @@ ROM_START( hedpanico ) /* Story line & game instructions in English, copyright y
ROM_FILL( 0x500000, 0x100000, 0x00 )
ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */
- ROM_LOAD16_BYTE( "sm3.fu35", 0x000000, 0x200000, CRC(94dd4cfc) SHA1(a3f9c49611f0bc9d26166dafb44e2c5ebbb31127) )
- ROM_LOAD16_BYTE( "sm4.fu34", 0x000001, 0x200000, CRC(6da0fb9e) SHA1(c4e7487953f45c5f6ce2ebe558b4c325f6ec54eb) )
+ ROM_LOAD32_WORD( "sm3.fu35", 0x000000, 0x200000, CRC(94dd4cfc) SHA1(a3f9c49611f0bc9d26166dafb44e2c5ebbb31127) )
+ ROM_LOAD32_WORD( "sm4.fu34", 0x000002, 0x200000, CRC(6da0fb9e) SHA1(c4e7487953f45c5f6ce2ebe558b4c325f6ec54eb) )
ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
ROM_LOAD( "esd4.rom", 0x000000, 0x020000, CRC(d7ca6806) SHA1(8ad668bfb5b7561cc0f3e36dfc3c936b136a4274) ) /* SU10 */
@@ -1273,8 +1253,8 @@ ROM_START( deluxe5 ) /* Deluxe 5 */
ROM_LOAD16_BYTE( "am27c020.ju07", 0x100000, 0x040000, CRC(d414c3af) SHA1(9299b07a8c7a3e30a1bb6028204a049a7cb510f7) )
ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */
- ROM_LOAD16_BYTE( "fu35", 0x000000, 0x200000, CRC(ae10242a) SHA1(f3d18c0cb7951b5f7ee47aa2856b7554088328ed) ) /* No labels on the flash roms */
- ROM_LOAD16_BYTE( "fu34", 0x000001, 0x200000, CRC(248b8c05) SHA1(fe7bcc05ae0dd0a27c6ba4beb4ac155a8f3d7f7e) ) /* No labels on the flash roms */
+ ROM_LOAD32_WORD( "fu35", 0x000000, 0x200000, CRC(ae10242a) SHA1(f3d18c0cb7951b5f7ee47aa2856b7554088328ed) ) /* No labels on the flash roms */
+ ROM_LOAD32_WORD( "fu34", 0x000002, 0x200000, CRC(248b8c05) SHA1(fe7bcc05ae0dd0a27c6ba4beb4ac155a8f3d7f7e) ) /* No labels on the flash roms */
ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
ROM_LOAD( "esd4.su10", 0x00000, 0x20000, CRC(23f2b7d9) SHA1(328c951d14674760df68486841c933bad0d59fe3) ) /* AT27C010 mask rom */
@@ -1299,8 +1279,8 @@ ROM_START( deluxe5a ) /* Deluxe 5 */
ROM_LOAD16_BYTE( "am27c020.ju07", 0x100000, 0x040000, CRC(d414c3af) SHA1(9299b07a8c7a3e30a1bb6028204a049a7cb510f7) )
ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */
- ROM_LOAD16_BYTE( "fu35", 0x000000, 0x200000, CRC(ae10242a) SHA1(f3d18c0cb7951b5f7ee47aa2856b7554088328ed) ) /* No labels on the flash roms */
- ROM_LOAD16_BYTE( "fu34", 0x000001, 0x200000, CRC(248b8c05) SHA1(fe7bcc05ae0dd0a27c6ba4beb4ac155a8f3d7f7e) ) /* No labels on the flash roms */
+ ROM_LOAD32_WORD( "fu35", 0x000000, 0x200000, CRC(ae10242a) SHA1(f3d18c0cb7951b5f7ee47aa2856b7554088328ed) ) /* No labels on the flash roms */
+ ROM_LOAD32_WORD( "fu34", 0x000002, 0x200000, CRC(248b8c05) SHA1(fe7bcc05ae0dd0a27c6ba4beb4ac155a8f3d7f7e) ) /* No labels on the flash roms */
ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
ROM_LOAD( "esd4.su10", 0x00000, 0x20000, CRC(23f2b7d9) SHA1(328c951d14674760df68486841c933bad0d59fe3) ) /* AT27C010 mask rom */
@@ -1325,8 +1305,8 @@ ROM_START( deluxe5b ) /* Deluxe 5 */
ROM_LOAD16_BYTE( "am27c020.ju07", 0x100000, 0x040000, CRC(d414c3af) SHA1(9299b07a8c7a3e30a1bb6028204a049a7cb510f7) )
ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */
- ROM_LOAD16_BYTE( "fu35", 0x000000, 0x200000, CRC(ae10242a) SHA1(f3d18c0cb7951b5f7ee47aa2856b7554088328ed) ) /* No labels on the flash roms */
- ROM_LOAD16_BYTE( "fu34", 0x000001, 0x200000, CRC(248b8c05) SHA1(fe7bcc05ae0dd0a27c6ba4beb4ac155a8f3d7f7e) ) /* No labels on the flash roms */
+ ROM_LOAD32_WORD( "fu35", 0x000000, 0x200000, CRC(ae10242a) SHA1(f3d18c0cb7951b5f7ee47aa2856b7554088328ed) ) /* No labels on the flash roms */
+ ROM_LOAD32_WORD( "fu34", 0x000002, 0x200000, CRC(248b8c05) SHA1(fe7bcc05ae0dd0a27c6ba4beb4ac155a8f3d7f7e) ) /* No labels on the flash roms */
ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
ROM_LOAD( "esd4.su10", 0x00000, 0x20000, CRC(23f2b7d9) SHA1(328c951d14674760df68486841c933bad0d59fe3) ) /* AT27C010 mask rom */
@@ -1352,8 +1332,8 @@ ROM_START( deluxe4u ) /* Deluxe 4 U - Removes Blackjack game, but otherwise same
ROM_LOAD16_BYTE( "am27c020.ju07", 0x100000, 0x040000, CRC(d414c3af) SHA1(9299b07a8c7a3e30a1bb6028204a049a7cb510f7) )
ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */
- ROM_LOAD16_BYTE( "fu35", 0x000000, 0x200000, CRC(6df14570) SHA1(fa4fc64c984d6a94fe61ec809ec515e840388704) ) /* Specific to Deluxe 4 U - No labels on the flash roms */
- ROM_LOAD16_BYTE( "fu34", 0x000001, 0x200000, CRC(93175d6d) SHA1(691832134f43e17bb767dff080b2736288961414) ) /* Specific to Deluxe 4 U - No labels on the flash roms */
+ ROM_LOAD32_WORD( "fu35", 0x000000, 0x200000, CRC(6df14570) SHA1(fa4fc64c984d6a94fe61ec809ec515e840388704) ) /* Specific to Deluxe 4 U - No labels on the flash roms */
+ ROM_LOAD32_WORD( "fu34", 0x000002, 0x200000, CRC(93175d6d) SHA1(691832134f43e17bb767dff080b2736288961414) ) /* Specific to Deluxe 4 U - No labels on the flash roms */
ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
ROM_LOAD( "esd4.su10", 0x00000, 0x20000, CRC(23f2b7d9) SHA1(328c951d14674760df68486841c933bad0d59fe3) ) /* AT27C010 mask rom */
@@ -1432,8 +1412,8 @@ ROM_START( tangtang )
ROM_LOAD16_BYTE( "xju08.bin", 0x100000, 0x040000, CRC(ecc2d8c7) SHA1(1aabdf7204fcdff8d46cb50de8b097e3775dddf3) )
ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */
- ROM_LOAD16_BYTE( "fu35.bin", 0x000000, 0x200000, CRC(84f3f833) SHA1(f84e41d93dc47a58ada800b921a7e5902b7631cd) )
- ROM_LOAD16_BYTE( "fu34.bin", 0x000001, 0x200000, CRC(bf91f543) SHA1(7c149fed8b8044850cd6b798622a91c45336cd47) )
+ ROM_LOAD32_WORD( "fu35.bin", 0x000000, 0x200000, CRC(84f3f833) SHA1(f84e41d93dc47a58ada800b921a7e5902b7631cd) )
+ ROM_LOAD32_WORD( "fu34.bin", 0x000002, 0x200000, CRC(bf91f543) SHA1(7c149fed8b8044850cd6b798622a91c45336cd47) )
ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
ROM_LOAD( "esd4.su10", 0x00000, 0x20000, CRC(f2dfb02d) SHA1(04001488697aad3e5b2d15c9f5a81dc2b7d0952c) )
@@ -1508,8 +1488,8 @@ ROM_START( swatpolc ) /* SWAT Police */
ROM_LOAD16_BYTE( "esd5.ju07", 0x200000, 0x080000, CRC(d2c27f03) SHA1(7cbdf7f7ff17df16ca81823f69e82ae1cf96b714) )
ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */
- ROM_LOAD16_BYTE( "fu35", 0x000000, 0x200000, CRC(c55897c5) SHA1(f6e0ef1c2fcfe6a511fe787a3abeff4da16d1b54) ) /* No labels on the flash roms */
- ROM_LOAD16_BYTE( "fu34", 0x000001, 0x200000, CRC(7117a6a2) SHA1(17c0ab02698cffa0582ed2d2b7dbb7fed8cd9393) ) /* No labels on the flash roms */
+ ROM_LOAD32_WORD( "fu35", 0x000000, 0x200000, CRC(c55897c5) SHA1(f6e0ef1c2fcfe6a511fe787a3abeff4da16d1b54) ) /* No labels on the flash roms */
+ ROM_LOAD32_WORD( "fu34", 0x000002, 0x200000, CRC(7117a6a2) SHA1(17c0ab02698cffa0582ed2d2b7dbb7fed8cd9393) ) /* No labels on the flash roms */
ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
ROM_LOAD( "at27c020.su10", 0x00000, 0x40000, CRC(c43efec2) SHA1(4ef328d8703b81328de09ecc4328763aba06e883) ) /* AT27C020 mask rom with no label */
@@ -1618,8 +1598,8 @@ ROM_START( jumppop )
ROM_LOAD( "sp1.bin", 0x100000, 0x100000, CRC(7eae782e) SHA1(a33c544ad9516ec409c209968e72f63e7cdb934b) )
ROM_REGION( 0x200000, "bgs", 0 )
- ROM_LOAD16_BYTE( "bg1.bin", 0x000000, 0x100000, CRC(5b37f943) SHA1(fe73b839f29d4c32823418711b22f85a5f583ec2) )
- ROM_LOAD16_BYTE( "bg0.bin", 0x000001, 0x100000, CRC(35a1363d) SHA1(66c550b0bdea7c8b079f186f5e044f731d31bc58) )
+ ROM_LOAD32_WORD( "bg1.bin", 0x000000, 0x100000, CRC(5b37f943) SHA1(fe73b839f29d4c32823418711b22f85a5f583ec2) )
+ ROM_LOAD32_WORD( "bg0.bin", 0x000002, 0x100000, CRC(35a1363d) SHA1(66c550b0bdea7c8b079f186f5e044f731d31bc58) )
ROM_REGION( 0x80000, "oki", 0 ) /* Oki samples */
ROM_LOAD( "samples.bin", 0x00000, 0x40000, CRC(066f30a7) SHA1(6bdd0210001c597819f7132ffa1dc1b1d55b4e0a) )
@@ -1642,8 +1622,8 @@ ROM_START( jumppope ) /* Running on an original ESD 11-09-98 PCB with original E
ROM_REGION( 0x200000, "bgs", 0 )
ROM_LOAD32_BYTE( "esd5.fu28", 0x000000, 0x080000, CRC(0d47f821) SHA1(fc1ef080eb05990909e25d5db59918f1f4e90a67) ) // [even 1/2] 99.769974%, [even 2/2] 99.267578%
- ROM_LOAD32_BYTE( "esd6.fu29", 0x000001, 0x080000, CRC(c01af40d) SHA1(fce0244027d4d4eb5cff1809cf8f404bfe016455) ) // [even 1/2] 99.778366%, [even 2/2] 99.267578%
- ROM_LOAD32_BYTE( "esd4.fu26", 0x000002, 0x080000, CRC(97b409be) SHA1(3a4344ca8ffb0aee046e3c0bab2d7c3f7c0eb204) ) // [odd 1/2] 99.763107%, [odd 2/2] 99.267578%
+ ROM_LOAD32_BYTE( "esd6.fu29", 0x000002, 0x080000, CRC(c01af40d) SHA1(fce0244027d4d4eb5cff1809cf8f404bfe016455) ) // [even 1/2] 99.778366%, [even 2/2] 99.267578%
+ ROM_LOAD32_BYTE( "esd4.fu26", 0x000001, 0x080000, CRC(97b409be) SHA1(3a4344ca8ffb0aee046e3c0bab2d7c3f7c0eb204) ) // [odd 1/2] 99.763107%, [odd 2/2] 99.267578%
ROM_LOAD32_BYTE( "esd3.fu27", 0x000003, 0x080000, CRC(3358a693) SHA1(2e368e5c26755bbe6d04838015fd4ca5e43ccfb5) ) // [odd 1/2] 99.784470%, [odd 2/2] 99.267578%
ROM_REGION( 0x80000, "oki", 0 ) /* Oki samples */
diff --git a/src/mame/drivers/espial.cpp b/src/mame/drivers/espial.cpp
index a222b72a6d6..74d539b2225 100644
--- a/src/mame/drivers/espial.cpp
+++ b/src/mame/drivers/espial.cpp
@@ -96,7 +96,7 @@ INTERRUPT_GEN_MEMBER(espial_state::espial_sound_nmi_gen)
WRITE8_MEMBER(espial_state::espial_master_soundlatch_w)
{
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
diff --git a/src/mame/drivers/exterm.cpp b/src/mame/drivers/exterm.cpp
index fdc3b8337dc..08498e86355 100644
--- a/src/mame/drivers/exterm.cpp
+++ b/src/mame/drivers/exterm.cpp
@@ -174,8 +174,8 @@ WRITE16_MEMBER(exterm_state::output_port_0_w)
WRITE8_MEMBER(exterm_state::sound_latch_w)
{
// data is latched independently for both sound CPUs
- m_soundlatch[0]->write(space, 0, data);
- m_soundlatch[1]->write(space, 0, data);
+ m_soundlatch[0]->write(data);
+ m_soundlatch[1]->write(data);
}
diff --git a/src/mame/drivers/fantland.cpp b/src/mame/drivers/fantland.cpp
index 4299704624b..1f1acef77df 100644
--- a/src/mame/drivers/fantland.cpp
+++ b/src/mame/drivers/fantland.cpp
@@ -74,7 +74,7 @@ WRITE8_MEMBER(fantland_state::nmi_enable_w)
WRITE8_MEMBER(fantland_state::soundlatch_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
diff --git a/src/mame/drivers/fcrash.cpp b/src/mame/drivers/fcrash.cpp
index 0bc74f47002..e00e92efb17 100644
--- a/src/mame/drivers/fcrash.cpp
+++ b/src/mame/drivers/fcrash.cpp
@@ -102,7 +102,7 @@ WRITE16_MEMBER( cps_state::fcrash_soundlatch_w )
{
if (ACCESSING_BITS_0_7)
{
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
}
@@ -111,7 +111,7 @@ WRITE16_MEMBER(cps_state::cawingbl_soundlatch_w)
{
if (ACCESSING_BITS_8_15)
{
- m_soundlatch->write(space, 0, data >> 8);
+ m_soundlatch->write(data >> 8);
m_audiocpu->set_input_line(0, HOLD_LINE);
machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(50)); /* boost the interleave or some voices get dropped */
}
diff --git a/src/mame/drivers/fidel_as12.cpp b/src/mame/drivers/fidel_as12.cpp
index 9b27dc53940..d81aa784ea5 100644
--- a/src/mame/drivers/fidel_as12.cpp
+++ b/src/mame/drivers/fidel_as12.cpp
@@ -145,8 +145,6 @@ void as12_state::as12(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &as12_state::div_trampoline);
ADDRESS_MAP_BANK(config, m_mainmap).set_map(&as12_state::main_map).set_options(ENDIANNESS_LITTLE, 8, 16);
- TIMER(config, "dummy_timer").configure_periodic(timer_device::expired_delegate(), attotime::from_hz(4_MHz_XTAL));
-
const attotime irq_period = attotime::from_hz(585); // from 556 timer (22nF, 110K, 1K)
TIMER(config, m_irq_on).configure_periodic(FUNC(as12_state::irq_on<M6502_IRQ_LINE>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(15250)); // active for 15.25us
diff --git a/src/mame/drivers/fidel_cc1.cpp b/src/mame/drivers/fidel_cc1.cpp
new file mode 100644
index 00000000000..cfee2fdda67
--- /dev/null
+++ b/src/mame/drivers/fidel_cc1.cpp
@@ -0,0 +1,221 @@
+// license:BSD-3-Clause
+// copyright-holders:hap
+// thanks-to:Berger, Sean Riddle
+/******************************************************************************
+*
+* fidel_cc1.cpp, subdriver of machine/fidelbase.cpp, machine/chessbase.cpp
+
+Fidelity's 1st generation chess computers:
+- *Chess Challenger
+- *Chess Challenger 3
+- *Chess Challenger 10 (UCC10)
+
+* denotes not dumped (actually CC1 is dumped, but with half of the contents missing)
+
+TODO:
+- driver is untested, but it should be easy to get working when a good dump
+ shows up (or a rom of CC3, even)
+
+*******************************************************************************
+
+Chess Challenger (1)
+--------------------
+This is the world's 1st released dedicated chess computer. Oddly, the rows/columns
+are reversed: left to right is 1-8, bottom to top is A-H, eg. pawn from D2 to D4
+is 4B to 4D here.
+
+PCB label PC-P-86, P179 C-2 7.77
+NEC 8080AF @ 2MHz(18MHz XTAL through a 8224)
+Everything goes via a NEC B8228, its special features are unused.
+NEC 2316A ROM(2KB), 4*2101AL RAM(0.5KB total)
+8255C for I/O, 4*7seg display + 2 extra leds, 12-key keypad
+
+Chess Challenger 3 is on the same hardware, but with double ROM size, and they
+corrected the reversed chess notation. It was also offered as an upgrade to CC1.
+
+Chess Challenger 10 version 'C'(model UCC10) is on (nearly) the same PCB too,
+label P179 C-3 9.77, with a small daughterboard for 8KB ROM. Again, it was also
+offered as an upgrade to CC1, or CC3.
+
+******************************************************************************/
+
+#include "emu.h"
+#include "includes/fidelbase.h"
+
+#include "cpu/i8085/i8085.h"
+#include "machine/i8255.h"
+
+// internal artwork
+#include "fidel_cc1.lh" // clickable
+
+
+namespace {
+
+class cc1_state : public fidelbase_state
+{
+public:
+ cc1_state(const machine_config &mconfig, device_type type, const char *tag) :
+ fidelbase_state(mconfig, type, tag),
+ m_ppi8255(*this, "ppi8255"),
+ m_delay(*this, "delay")
+ { }
+
+ // machine drivers
+ void cc1(machine_config &config);
+
+private:
+ // devices/pointers
+ required_device<i8255_device> m_ppi8255;
+ optional_device<timer_device> m_delay;
+
+ // address maps
+ void main_map(address_map &map);
+ void main_io(address_map &map);
+
+ // I/O handlers
+ void prepare_display();
+ DECLARE_READ8_MEMBER(ppi_porta_r);
+ DECLARE_WRITE8_MEMBER(ppi_portb_w);
+ DECLARE_WRITE8_MEMBER(ppi_portc_w);
+};
+
+
+/******************************************************************************
+ Devices, I/O
+******************************************************************************/
+
+// misc handlers
+
+void cc1_state::prepare_display()
+{
+ // 4 7segs + 2 leds
+ set_display_segmask(0xf, 0x7f);
+ display_matrix(7, 6, m_7seg_data, m_led_select);
+}
+
+
+// I8255 PPI
+
+READ8_MEMBER(cc1_state::ppi_porta_r)
+{
+ // 74148(priority encoder) I0-I7: inputs
+ // d0-d2: 74148 S0-S2, d3: 74148 GS
+ u8 data = count_leading_zeros(m_inp_matrix[0]->read()) - 24;
+
+ // d5-d7: more inputs (direct)
+ data |= ~m_inp_matrix[1]->read() << 5 & 0xe0;
+
+ // d4: 555 Q
+ return data | ((m_delay->enabled()) ? 0x10 : 0);
+}
+
+WRITE8_MEMBER(cc1_state::ppi_portb_w)
+{
+ // d0-d6: digit segment data
+ m_7seg_data = bitswap<7>(data,0,1,2,3,4,5,6);
+ prepare_display();
+}
+
+WRITE8_MEMBER(cc1_state::ppi_portc_w)
+{
+ // d6: trigger monostable 555 (R=15K, C=1uF)
+ if (~data & m_led_select & 0x40 && !m_delay->enabled())
+ m_delay->adjust(attotime::from_msec(17));
+
+ // d0-d3: digit select
+ // d4: check led, d5: lose led
+ m_led_select = data;
+ prepare_display();
+}
+
+
+
+/******************************************************************************
+ Address Maps
+******************************************************************************/
+
+void cc1_state::main_map(address_map &map)
+{
+ map.global_mask(0x1fff);
+ map(0x0000, 0x0fff).rom();
+ map(0x1000, 0x11ff).mirror(0x0e00).ram();
+}
+
+void cc1_state::main_io(address_map &map)
+{
+ map.global_mask(0x0f);
+ map(0x00, 0x03).mirror(0x04).rw(m_ppi8255, FUNC(i8255_device::read), FUNC(i8255_device::write));
+}
+
+
+
+/******************************************************************************
+ Input Ports
+******************************************************************************/
+
+static INPUT_PORTS_START( cc1 )
+ PORT_START("IN.0")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("1") PORT_CODE(KEYCODE_1)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("2") PORT_CODE(KEYCODE_2)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("3") PORT_CODE(KEYCODE_3)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("4") PORT_CODE(KEYCODE_4)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("5") PORT_CODE(KEYCODE_5)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("6") PORT_CODE(KEYCODE_6)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("7") PORT_CODE(KEYCODE_7)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("8") PORT_CODE(KEYCODE_8)
+
+ PORT_START("IN.1")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("9") PORT_CODE(KEYCODE_9)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("0") PORT_CODE(KEYCODE_0)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS)
+
+ PORT_START("RESET")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RE") PORT_CODE(KEYCODE_R) PORT_CHANGED_MEMBER(DEVICE_SELF, cc1_state, reset_button, nullptr)
+INPUT_PORTS_END
+
+
+
+/******************************************************************************
+ Machine Drivers
+******************************************************************************/
+
+void cc1_state::cc1(machine_config &config)
+{
+ /* basic machine hardware */
+ I8080A(config, m_maincpu, 18_MHz_XTAL/9);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cc1_state::main_map);
+ m_maincpu->set_addrmap(AS_IO, &cc1_state::main_io);
+
+ I8255(config, m_ppi8255);
+ m_ppi8255->in_pa_callback().set(FUNC(cc1_state::ppi_porta_r));
+ m_ppi8255->out_pb_callback().set(FUNC(cc1_state::ppi_portb_w));
+ m_ppi8255->tri_pb_callback().set_constant(0);
+ m_ppi8255->out_pc_callback().set(FUNC(cc1_state::ppi_portc_w));
+
+ TIMER(config, "delay").configure_generic(timer_device::expired_delegate());
+
+ TIMER(config, "display_decay").configure_periodic(FUNC(cc1_state::display_decay_tick), attotime::from_msec(1));
+ config.set_default_layout(layout_fidel_cc1);
+}
+
+
+
+/******************************************************************************
+ ROM Definitions
+******************************************************************************/
+
+ROM_START( cc1 )
+ ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
+ ROM_LOAD( "d2316ac_011", 0x0000, 0x0800, BAD_DUMP CRC(e27f9816) SHA1(ad9881b3bf8341829a27e86de27805fc2ccb5f7d) ) // A4 line was broken
+ROM_END
+
+} // anonymous namespace
+
+
+
+/******************************************************************************
+ Drivers
+******************************************************************************/
+
+// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
+CONS( 1977, cc1, 0, 0, cc1, cc1, cc1_state, empty_init, "Fidelity Electronics", "Chess Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NO_SOUND_HW | MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/fidel_cc10.cpp b/src/mame/drivers/fidel_cc10.cpp
index 2989db64f32..128332a5001 100644
--- a/src/mame/drivers/fidel_cc10.cpp
+++ b/src/mame/drivers/fidel_cc10.cpp
@@ -13,14 +13,12 @@ TODO:
Fidelity Chess Challenger 10 (CCX)
-------------------
-4 versions are known to exist: A,B,C,D. Strangely, version C(UCC10) has an 8080
-instead of Z80. Chess Challenger 1,3 and 7 also run on very similar hardware.
+3 versions are known to exist: A,B,C. Strangely, version C(UCC10) has an 8080
+instead of Z80 and no beeper, it's on CC1-based hardware.
Z80A CPU @ 4MHz, NEC D8255C
4KB ROM(NEC 2332A), 2*256 bytes RAM(4*NEC 2111AL-4)
-
The beeper is via a 556 timer, fixed-frequency at around 1300-1400Hz.
-Not all hardware configurations include the beeper.
Checker Challenger 4 (ACR) is on the same PCB, twice less RAM and the beeper gone.
@@ -268,8 +266,8 @@ void ccx_state::acr(machine_config &config)
m_ppi8255->tri_pa_callback().set_constant(0);
m_ppi8255->in_pb_callback().set_constant(0);
m_ppi8255->out_pb_callback().set(FUNC(ccx_state::ppi_portb_w));
- m_ppi8255->in_pc_callback().set(FUNC(ccx_state::ppi_portc_r));
m_ppi8255->tri_pb_callback().set_constant(0);
+ m_ppi8255->in_pc_callback().set(FUNC(ccx_state::ppi_portc_r));
m_ppi8255->out_pc_callback().set(FUNC(ccx_state::ppi_portc_w));
TIMER(config, "display_decay").configure_periodic(FUNC(ccx_state::display_decay_tick), attotime::from_msec(1));
diff --git a/src/mame/drivers/fidel_cc7.cpp b/src/mame/drivers/fidel_cc7.cpp
index 36bd7756dc7..40ca74b4b0f 100644
--- a/src/mame/drivers/fidel_cc7.cpp
+++ b/src/mame/drivers/fidel_cc7.cpp
@@ -7,10 +7,10 @@
*******************************************************************************
-Fidelity Chess Challenger 7 (BCC)
+Fidelity Chess Challenger 7 (CC7, BCC)
------------------------
-model CC7 is an older version
-RE information from netlist by Berger
+It was Fidelity's most sold chess computer. model CC7 is an older version.
+CC7 known serial numbers range from 1979 to 1980. BCC from 1980 to 1983.
Zilog Z80A, 3.579MHz from XTAL
Z80 IRQ/NMI unused, no timer IC.
@@ -19,6 +19,8 @@ This is a cost-reduced design from CC10, no special I/O chips.
Backgammon Challenger (BKC) is the same PCB, with the speaker connection going
to the display panel instead.
+RE information from netlist by Berger (a BCC model)
+
Memory map:
-----------
0000-0FFF: 4K 2332 ROM CN19103N BCC-REVB.
@@ -225,6 +227,11 @@ ROM_START( cc7 ) // model BCC
ROM_LOAD( "cn19103n_bcc-revb", 0x0000, 0x1000, CRC(a397d471) SHA1(9b12bc442fccee40f4d8500c792bc9d886c5e1a5) ) // 2332
ROM_END
+ROM_START( cc7o ) // model CC7, PCB label 510-380
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "101-32016", 0x0000, 0x1000, CRC(b9076c52) SHA1(09b17ac6cd6a1c5c62aea3649f3367bcf4405598) ) // 2332
+ROM_END
+
ROM_START( backgamc ) // model BKC, PCB label P-380A-5
ROM_REGION( 0x10000, "maincpu", 0 )
@@ -241,5 +248,6 @@ ROM_END
// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
CONS( 1979, cc7, 0, 0, bcc, bcc, bcc_state, empty_init, "Fidelity Electronics", "Chess Challenger 7 (model BCC, rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1979, cc7o, cc7, 0, bcc, bcc, bcc_state, empty_init, "Fidelity Electronics", "Chess Challenger 7 (model CC7)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1979, backgamc, 0, 0, bkc, bkc, bcc_state, empty_init, "Fidelity Electronics", "Backgammon Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NO_SOUND_HW )
diff --git a/src/mame/drivers/fidel_eag68k.cpp b/src/mame/drivers/fidel_eag68k.cpp
index 0f7e002dbe2..6405d2fc4b1 100644
--- a/src/mame/drivers/fidel_eag68k.cpp
+++ b/src/mame/drivers/fidel_eag68k.cpp
@@ -11,12 +11,10 @@ Excel 68000 I/O is very similar to EAG, so it's handled in this driver as well
TODO:
- USART is not emulated
-- V5 CPU comms is unemulated, it's still playable but not at all as intended
-- V9(68030 @ 32MHz) is faster than V10(68040 @ 25MHz) but it should be the other
- way around, culprit is unemulated cache?
- V11 CPU should be M68EC060, not yet emulated. Now using M68EC040 in its place
at twice the frequency due to lack of superscalar.
-- V11 beeper is too high pitched, obviously related to wrong CPU type too
+- V11 beeper is too high pitched, related to wrong CPU type too? But even at 72MHz
+ it's still wrong, so maybe waitstates or clock divider on I/O access.
*******************************************************************************
@@ -38,8 +36,7 @@ I/O is via TTL, overall very similar to EAG.
Elite Avant Garde (EAG, model 6114)
-----------------------------------
-There are 5 versions of model 6114(V1 to V5). The one emulated here came from a V2,
-but is practically emulated as a V4.
+There are 5 versions of model 6114(V1 to V5):
V1: 128KB DRAM, no EEPROM
V2: 128KB DRAM
@@ -78,7 +75,7 @@ Memory map: (of what is known)
300000-30000F W hi d0: NE591: 7seg data
300000-30000F W lo d0: NE591: LED data
300000-30000F R lo d7: 74259: keypad rows 0-7
-400000-400001 W lo d0-d3: 74145/7442: led/keypad mux, buzzer out
+400000-400007 W lo d0: 74259,74145/7442: led/keypad mux, buzzer out
400000-4????? R hi: external module slot
700002-700003 R lo d7: 74251: keypad row 8
604000-607FFF: 16KB EEPROM
@@ -158,6 +155,7 @@ B0000x-xxxxxx: see V7, -800000
#include "includes/fidelbase.h"
#include "cpu/m68000/m68000.h"
+#include "machine/gen_latch.h"
#include "machine/ram.h"
#include "machine/nvram.h"
#include "sound/volt_reg.h"
@@ -179,7 +177,8 @@ public:
{ }
// machine drivers
- void eag(machine_config &config);
+ void eagv2(machine_config &config);
+ void eagv3(machine_config &config);
void eagv5(machine_config &config);
void eagv7(machine_config &config);
void eagv9(machine_config &config);
@@ -197,8 +196,7 @@ protected:
// address maps
void eag_map(address_map &map);
void eagv7_map(address_map &map);
- void eagv11_map(address_map &map);
- void eagv5_slave_map(address_map &map);
+ void eagv10_map(address_map &map);
// I/O handlers
void prepare_display();
@@ -209,6 +207,35 @@ protected:
DECLARE_WRITE8_MEMBER(digit_w);
};
+class eagv5_state : public eag_state
+{
+public:
+ eagv5_state(const machine_config &mconfig, device_type type, const char *tag) :
+ eag_state(mconfig, type, tag),
+ m_subcpu(*this, "subcpu"),
+ m_mainlatch(*this, "mainlatch"),
+ m_sublatch(*this, "sublatch")
+ { }
+
+ // machine drivers
+ void eagv5(machine_config &config);
+
+private:
+ // devices/pointers
+ required_device<cpu_device> m_subcpu;
+ required_device<generic_latch_8_device> m_mainlatch;
+ required_device<generic_latch_8_device> m_sublatch;
+
+ // address maps
+ void main_map(address_map &map);
+ void sub_map(address_map &map);
+
+ // I/O handlers
+ DECLARE_WRITE8_MEMBER(reset_subcpu_w);
+ DECLARE_READ8_MEMBER(main_ack_r);
+ DECLARE_READ8_MEMBER(sub_ack_r);
+};
+
class excel68k_state : public eag_state
{
public:
@@ -226,12 +253,10 @@ private:
void fex68k_map(address_map &map);
void fex68km2_map(address_map &map);
void fex68km3_map(address_map &map);
-
- // I/O handlers, mux_w is a little different
- virtual DECLARE_WRITE8_MEMBER(mux_w) override;
};
+
/******************************************************************************
Devices, I/O
******************************************************************************/
@@ -249,10 +274,14 @@ void eag_state::prepare_display()
WRITE8_MEMBER(eag_state::mux_w)
{
- // d0-d3: 74145 A-D
+ // a1-a3,d0: 74259
+ u8 mask = 1 << offset;
+ m_led_select = (m_led_select & ~mask) | ((data & 1) ? mask : 0);
+
+ // 74259 Q0-Q3: 74145 A-D (Q4-Q7 N/C)
// 74145 0-8: input mux, digit/led select
// 74145 9: speaker out
- u16 sel = 1 << (data & 0xf);
+ u16 sel = 1 << (m_led_select & 0xf);
m_dac->write(BIT(sel, 9));
m_inp_mux = sel & 0x1ff;
prepare_display();
@@ -285,16 +314,24 @@ WRITE8_MEMBER(eag_state::digit_w)
}
-// fex68k-specific
+// EAG V5
-WRITE8_MEMBER(excel68k_state::mux_w)
+WRITE8_MEMBER(eagv5_state::reset_subcpu_w)
{
- // a1-a3,d0: 74259
- u8 mask = 1 << offset;
- m_led_select = (m_led_select & ~mask) | ((data & 1) ? mask : 0);
+ // reset subcpu, from trigger to monostable 555 (R1=47K, C1=1uF)
+ m_subcpu->pulse_input_line(INPUT_LINE_RESET, attotime::from_msec(52));
+}
- // 74259 Q0-Q3: 74145 A-D (Q4-Q7 N/C)
- eag_state::mux_w(space, offset, m_led_select & 0xf);
+READ8_MEMBER(eagv5_state::main_ack_r)
+{
+ // d8,d9: latches ack state
+ return (m_mainlatch->pending_r() << 1 ^ 2) | m_sublatch->pending_r();
+}
+
+READ8_MEMBER(eagv5_state::sub_ack_r)
+{
+ // d8,d9: latches ack state
+ return (m_sublatch->pending_r() << 1 ^ 2) | m_mainlatch->pending_r();
}
@@ -342,13 +379,28 @@ void eag_state::eag_map(address_map &map)
map(0x104000, 0x107fff).ram();
map(0x300000, 0x30000f).mirror(0x000010).w(FUNC(eag_state::digit_w)).umask16(0xff00).nopr();
map(0x300000, 0x30000f).mirror(0x000010).rw(FUNC(eag_state::input1_r), FUNC(eag_state::leds_w)).umask16(0x00ff);
+ map(0x400000, 0x400007).w(FUNC(eag_state::mux_w)).umask16(0x00ff);
map(0x400000, 0x407fff).r(FUNC(eag_state::cartridge_r)).umask16(0xff00);
- map(0x400001, 0x400001).w(FUNC(eag_state::mux_w));
- map(0x400002, 0x400007).nopw(); // ?
map(0x604000, 0x607fff).ram().share("nvram");
map(0x700003, 0x700003).r(FUNC(eag_state::input2_r));
}
+void eagv5_state::main_map(address_map &map)
+{
+ eag_map(map);
+ map(0x500000, 0x500000).r(m_sublatch, FUNC(generic_latch_8_device::read)).w(m_mainlatch, FUNC(generic_latch_8_device::write));
+ map(0x500002, 0x500002).rw(FUNC(eagv5_state::main_ack_r), FUNC(eagv5_state::reset_subcpu_w));
+}
+
+void eagv5_state::sub_map(address_map &map)
+{
+ map(0x000000, 0x00ffff).rom();
+ map(0x000001, 0x000001).mirror(0x00fffe).w(m_sublatch, FUNC(generic_latch_8_device::write));
+ map(0x044000, 0x047fff).ram();
+ map(0x140000, 0x140000).r(FUNC(eagv5_state::sub_ack_r));
+ map(0x140001, 0x140001).r(m_mainlatch, FUNC(generic_latch_8_device::read));
+}
+
void eag_state::eagv7_map(address_map &map)
{
map(0x000000, 0x01ffff).rom();
@@ -356,34 +408,26 @@ void eag_state::eagv7_map(address_map &map)
map(0x200000, 0x2fffff).ram();
map(0x300000, 0x30000f).mirror(0x000010).w(FUNC(eag_state::digit_w)).umask32(0xff00ff00).nopr();
map(0x300000, 0x30000f).mirror(0x000010).rw(FUNC(eag_state::input1_r), FUNC(eag_state::leds_w)).umask32(0x00ff00ff);
+ map(0x400000, 0x400007).w(FUNC(eag_state::mux_w)).umask32(0x00ff00ff);
map(0x400000, 0x407fff).r(FUNC(eag_state::cartridge_r)).umask32(0xff00ff00);
- map(0x400001, 0x400001).w(FUNC(eag_state::mux_w));
- map(0x400004, 0x400007).nopw(); // ?
map(0x604000, 0x607fff).ram().share("nvram");
map(0x700003, 0x700003).r(FUNC(eag_state::input2_r));
map(0x800000, 0x807fff).ram();
}
-void eag_state::eagv11_map(address_map &map)
+void eag_state::eagv10_map(address_map &map)
{
map(0x00000000, 0x0001ffff).rom();
map(0x00200000, 0x003fffff).ram();
map(0x00b00000, 0x00b0000f).mirror(0x00000010).w(FUNC(eag_state::digit_w)).umask32(0xff00ff00).nopr();
map(0x00b00000, 0x00b0000f).mirror(0x00000010).rw(FUNC(eag_state::input1_r), FUNC(eag_state::leds_w)).umask32(0x00ff00ff);
+ map(0x00c00000, 0x00c00007).w(FUNC(eag_state::mux_w)).umask32(0x00ff00ff);
map(0x00c00000, 0x00c07fff).r(FUNC(eag_state::cartridge_r)).umask32(0xff00ff00);
- map(0x00c00001, 0x00c00001).w(FUNC(eag_state::mux_w));
- map(0x00c00004, 0x00c00007).nopw(); // ?
map(0x00e04000, 0x00e07fff).ram().share("nvram");
map(0x00f00003, 0x00f00003).r(FUNC(eag_state::input2_r));
map(0x01000000, 0x0101ffff).ram();
}
-void eag_state::eagv5_slave_map(address_map &map)
-{
- map(0x000000, 0x00ffff).rom();
- map(0x044000, 0x047fff).ram();
-}
-
/******************************************************************************
@@ -477,7 +521,7 @@ void eag_state::eag_base(machine_config &config)
M68000(config, m_maincpu, 16_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eag_map);
- const attotime irq_period = attotime::from_hz(4.9152_MHz_XTAL/0x2000); // 600Hz
+ const attotime irq_period = attotime::from_hz(4.9152_MHz_XTAL/0x2000); // 4060 Q13, 600Hz
TIMER(config, m_irq_on).configure_periodic(FUNC(eag_state::irq_on<M68K_IRQ_2>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(8250)); // active for 8.25us
TIMER(config, "irq_off").configure_periodic(FUNC(eag_state::irq_off<M68K_IRQ_2>), irq_period);
@@ -499,21 +543,41 @@ void eag_state::eag_base(machine_config &config)
SOFTWARE_LIST(config, "cart_list").set_original("fidel_scc");
}
-void eag_state::eag(machine_config &config)
+void eag_state::eagv2(machine_config &config)
{
eag_base(config);
- RAM(config, m_ram).set_default_size("1M").set_extra_options("128K, 512K, 1M");
+
+ /* basic machine hardware */
+ RAM(config, m_ram).set_extra_options("128K, 512K, 1M");
+ m_ram->set_default_size("128K");
}
-void eag_state::eagv5(machine_config &config)
+void eag_state::eagv3(machine_config &config)
{
- eag(config);
+ eagv2(config);
/* basic machine hardware */
- m_ram->set_default_size("128K");
+ m_ram->set_default_size("512K");
+}
- m68000_device &subcpu(M68000(config, "subcpu", 16_MHz_XTAL));
- subcpu.set_addrmap(AS_PROGRAM, &eag_state::eagv5_slave_map);
+void eagv5_state::eagv5(machine_config &config)
+{
+ eagv2(config);
+
+ /* basic machine hardware */
+ m_maincpu->set_addrmap(AS_PROGRAM, &eagv5_state::main_map);
+
+ M68000(config, m_subcpu, 16_MHz_XTAL);
+ m_subcpu->set_addrmap(AS_PROGRAM, &eagv5_state::sub_map);
+ m_subcpu->set_periodic_int(FUNC(eagv5_state::irq2_line_hold), attotime::from_hz(16_MHz_XTAL/0x4000)); // 4060 Q14, ~1kHz
+
+ GENERIC_LATCH_8(config, m_mainlatch);
+ GENERIC_LATCH_8(config, m_sublatch);
+ m_sublatch->data_pending_callback().set_inputline(m_maincpu, M68K_IRQ_1); // IPL0
+
+ // gen_latch syncs on write, but this is still needed with tight cpu comms
+ // (not that it locks up or anything, but it will calculate moves much slower if timing is off)
+ config.m_perfect_cpu_quantum = subtag("maincpu");
}
void eag_state::eagv7(machine_config &config)
@@ -521,7 +585,7 @@ void eag_state::eagv7(machine_config &config)
eag_base(config);
/* basic machine hardware */
- M68020(config.replace(), m_maincpu, 20_MHz_XTAL);
+ M68020(config.replace(), m_maincpu, 20_MHz_XTAL); // also seen with 25MHz XTAL
m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv7_map);
}
@@ -530,7 +594,7 @@ void eag_state::eagv9(machine_config &config)
eagv7(config);
/* basic machine hardware */
- M68030(config.replace(), m_maincpu, 32_MHz_XTAL);
+ M68030(config.replace(), m_maincpu, 32_MHz_XTAL/2); // also seen with 40MHz XTAL
m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv7_map);
}
@@ -540,7 +604,7 @@ void eag_state::eagv10(machine_config &config)
/* basic machine hardware */
M68040(config.replace(), m_maincpu, 25_MHz_XTAL);
- m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv11_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv10_map);
}
void eag_state::eagv11(machine_config &config)
@@ -549,7 +613,7 @@ void eag_state::eagv11(machine_config &config)
/* basic machine hardware */
M68EC040(config.replace(), m_maincpu, 36_MHz_XTAL*2*2); // wrong! should be M68EC060 @ 72MHz
- m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv11_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv10_map);
m_maincpu->set_periodic_int(FUNC(eag_state::irq2_line_hold), attotime::from_hz(600));
config.device_remove("irq_on"); // 8.25us is too long
@@ -593,24 +657,24 @@ ROM_START( fex68km3 ) // model 6098, PCB label 510.1120B01
ROM_END
-ROM_START( feagv2 ) // from a V2 board
+ROM_START( feagv2 )
ROM_REGION16_BE( 0x20000, "maincpu", 0 )
ROM_LOAD16_BYTE("6114_e5_yellow.u22", 0x00000, 0x10000, CRC(f9c7bada) SHA1(60e545f829121b9a4f1100d9e85ac83797715e80) ) // 27c512
ROM_LOAD16_BYTE("6114_o5_green.u19", 0x00001, 0x10000, CRC(04f97b22) SHA1(8b2845dd115498f7b385e8948eca6a5893c223d1) ) // "
ROM_END
-ROM_START( feagv2a ) // from a V3 board
+ROM_START( feagv3 )
ROM_REGION16_BE( 0x20000, "maincpu", 0 )
ROM_LOAD16_BYTE("elite_1.6_e.u22", 0x00000, 0x10000, CRC(c8b89ccc) SHA1(d62e0a72f54b793ab8853468a81255b62f874658) )
ROM_LOAD16_BYTE("elite_1.6_o.u19", 0x00001, 0x10000, CRC(904c7061) SHA1(742110576cf673321440bc81a4dae4c949b49e38) )
ROM_END
ROM_START( feagv5 )
- ROM_REGION( 0x20000, "maincpu", 0 )
+ ROM_REGION( 0x20000, "maincpu", 0 ) // PCB label 510.1136A01
ROM_LOAD16_BYTE("master_e", 0x00000, 0x10000, CRC(e424bddc) SHA1(ff03656addfe5c47f06df2efb4602f43a9e19d96) )
ROM_LOAD16_BYTE("master_o", 0x00001, 0x10000, CRC(33a00894) SHA1(849460332b1ac10d452ca3631eb99f5597511b73) )
- ROM_REGION( 0x10000, "subcpu", 0 )
+ ROM_REGION( 0x10000, "subcpu", 0 ) // PCB label 510.1138B01
ROM_LOAD16_BYTE("slave_e", 0x00000, 0x08000, CRC(eea4de52) SHA1(a64ca8a44b431e2fa7f00e44cab7e6aa2d4a9403) )
ROM_LOAD16_BYTE("slave_o", 0x00001, 0x08000, CRC(35fe2fdf) SHA1(731da12ee290bad9bc03cffe281c8cc48e555dfb) )
ROM_END
@@ -663,11 +727,11 @@ CONS( 1987, fex68kb, fex68k, 0, fex68k, excel68k, excel68k_state, empty_ini
CONS( 1988, fex68km2, fex68k, 0, fex68km2, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach II (rev. C+)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1988, fex68km3, fex68k, 0, fex68km3, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach III Master", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
-CONS( 1989, feagv2, 0, 0, eag, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-2/3/4, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
-CONS( 1989, feagv2a, feagv2, 0, eag, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-2/3/4, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
-CONS( 1989, feagv5, feagv2, 0, eagv5, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6114-5)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_NOT_WORKING )
+CONS( 1989, feagv2, 0, 0, eagv2, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
+CONS( 1989, feagv3, feagv2, 0, eagv3, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
+CONS( 1989, feagv5, feagv2, 0, eagv5, eag, eagv5_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-5)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1990, feagv7, feagv2, 0, eagv7, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-7, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1990, feagv7a, feagv2, 0, eagv7, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-7, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1990, feagv9, feagv2, 0, eagv9, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-9)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
-CONS( 1990, feagv10, feagv2, 0, eagv10, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-10)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
-CONS( 2002, feagv11, feagv2, 0, eagv11, eag, eag_state, empty_init, "hack (Wilfried Bucke)", "Elite Avant Garde (model 6117-11)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
+CONS( 1990, feagv10, feagv2, 0, eagv10, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-10)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
+CONS( 2002, feagv11, feagv2, 0, eagv11, eag, eag_state, empty_init, "hack (Wilfried Bucke)", "Elite Avant Garde (model 6117-11)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING | MACHINE_IMPERFECT_SOUND )
diff --git a/src/mame/drivers/fidel_elite.cpp b/src/mame/drivers/fidel_elite.cpp
index b3b2bc3ac56..65dc0419162 100644
--- a/src/mame/drivers/fidel_elite.cpp
+++ b/src/mame/drivers/fidel_elite.cpp
@@ -321,8 +321,6 @@ void elite_state::pc(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &elite_state::div_trampoline);
ADDRESS_MAP_BANK(config, m_mainmap).set_map(&elite_state::pc_map).set_options(ENDIANNESS_LITTLE, 8, 16);
- TIMER(config, "dummy_timer").configure_periodic(timer_device::expired_delegate(), attotime::from_hz(4_MHz_XTAL));
-
const attotime irq_period = attotime::from_hz(38.4_kHz_XTAL/64); // through 4060 IC, 600Hz
TIMER(config, m_irq_on).configure_periodic(FUNC(elite_state::irq_on<M6502_IRQ_LINE>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_hz(38.4_kHz_XTAL*2)); // edge!
@@ -354,7 +352,6 @@ void elite_state::eas(machine_config &config)
/* basic machine hardware */
m_maincpu->set_clock(3_MHz_XTAL);
m_mainmap->set_addrmap(AS_PROGRAM, &elite_state::eas_map);
- TIMER(config.replace(), "dummy_timer").configure_periodic(timer_device::expired_delegate(), attotime::from_hz(3_MHz_XTAL));
I8255(config, m_ppi8255); // port B: input, port A & C: output
m_ppi8255->out_pa_callback().set(FUNC(elite_state::ppi_porta_w));
@@ -374,7 +371,6 @@ void elite_state::eas_priv(machine_config &config)
/* basic machine hardware */
M65C02(config.replace(), m_maincpu, 3.579545_MHz_XTAL); // UM6502C
m_maincpu->set_addrmap(AS_PROGRAM, &elite_state::div_trampoline);
- TIMER(config.replace(), "dummy_timer").configure_periodic(timer_device::expired_delegate(), attotime::from_hz(3.579545_MHz_XTAL));
config.set_default_layout(layout_fidel_eas_priv);
}
@@ -386,7 +382,6 @@ void elite_state::eag(machine_config &config)
/* basic machine hardware */
m_maincpu->set_clock(5_MHz_XTAL); // R65C02P4
m_mainmap->set_addrmap(AS_PROGRAM, &elite_state::eag_map);
- TIMER(config.replace(), "dummy_timer").configure_periodic(timer_device::expired_delegate(), attotime::from_hz(5_MHz_XTAL));
config.device_remove("nvram");
NVRAM(config, "nvram.ic8", nvram_device::DEFAULT_ALL_0);
diff --git a/src/mame/drivers/fidel_excel.cpp b/src/mame/drivers/fidel_excel.cpp
index f1aeeeddad2..11fc4f12107 100644
--- a/src/mame/drivers/fidel_excel.cpp
+++ b/src/mame/drivers/fidel_excel.cpp
@@ -518,6 +518,6 @@ CONS( 1985, fexcela, fexcel, 0, fexcel, fexcel, excel_state, empty_in
CONS( 1986, fexcelp, 0, 0, fexcelp, fexcel, excel_state, empty_init, "Fidelity Electronics", "The Par Excellence", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1986, fexcelpb, fexcelp, 0, fexcelp, fexcel, excel_state, empty_init, "Fidelity Electronics", "The Par Excellence (rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
-CONS( 1986, granits, fexcelp, 0, granits, fexcel, excel_state, empty_init, "hack (RCS)", "Granit 'S'", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
+CONS( 1986, granits, fexcelp, 0, granits, fexcel, excel_state, empty_init, "hack (RCS)", "Granit S", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1988, fdes2000, fexcelp, 0, fdes2000, fdes, excel_state, empty_init, "Fidelity Electronics", "Designer 2000", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1988, fdes2100, fexcelp, 0, fdes2100, fdes, excel_state, empty_init, "Fidelity Electronics", "Designer 2100", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
diff --git a/src/mame/drivers/fidel_sc12.cpp b/src/mame/drivers/fidel_sc12.cpp
index 49859191df4..87cf7de0cf9 100644
--- a/src/mame/drivers/fidel_sc12.cpp
+++ b/src/mame/drivers/fidel_sc12.cpp
@@ -174,8 +174,6 @@ void sc12_state::sc12(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &sc12_state::div_trampoline);
ADDRESS_MAP_BANK(config, m_mainmap).set_map(&sc12_state::main_map).set_options(ENDIANNESS_LITTLE, 8, 16);
- TIMER(config, "dummy_timer").configure_periodic(timer_device::expired_delegate(), attotime::from_hz(3_MHz_XTAL));
-
const attotime irq_period = attotime::from_hz(630); // from 556 timer (22nF, 102K, 1K)
TIMER(config, m_irq_on).configure_periodic(FUNC(sc12_state::irq_on<M6502_IRQ_LINE>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(15250)); // active for 15.25us
@@ -202,7 +200,6 @@ void sc12_state::sc12b(machine_config &config)
/* basic machine hardware */
m_maincpu->set_clock(4_MHz_XTAL); // R65C02P4
- TIMER(config.replace(), "dummy_timer").configure_periodic(timer_device::expired_delegate(), attotime::from_hz(4_MHz_XTAL));
// change irq timer frequency
const attotime irq_period = attotime::from_hz(596); // from 556 timer (22nF, 82K+26K, 1K)
diff --git a/src/mame/drivers/fidel_vcc.cpp b/src/mame/drivers/fidel_vcc.cpp
index 9dc11d87f53..b54bddd4990 100644
--- a/src/mame/drivers/fidel_vcc.cpp
+++ b/src/mame/drivers/fidel_vcc.cpp
@@ -151,7 +151,7 @@ void vcc_state::machine_start()
{
fidelbase_state::machine_start();
- // game relies on RAM initialized filled with 1
+ // game relies on RAM filled with FF at power-on
for (int i = 0; i < 0x400; i++)
m_maincpu->space(AS_PROGRAM).write_byte(i + 0x4000, 0xff);
}
diff --git a/src/mame/drivers/finalizr.cpp b/src/mame/drivers/finalizr.cpp
index 3d818910126..1f4a85cc9e8 100644
--- a/src/mame/drivers/finalizr.cpp
+++ b/src/mame/drivers/finalizr.cpp
@@ -195,7 +195,7 @@ static INPUT_PORTS_START( finalizr )
PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
-static INPUT_PORTS_START( finalizrb )
+static INPUT_PORTS_START( finalizra )
PORT_INCLUDE( finalizr )
PORT_MODIFY("DSW2")
@@ -336,6 +336,31 @@ ROM_START( finalizr )
ROM_LOAD( "523h12.10f", 0x0140, 0x0100, CRC(53166a2a) SHA1(6cdde206036df7176679711f7888d72acee27c8f) ) /* sprites */
ROM_END
+ROM_START( finalizra )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "1.9c", 0x4000, 0x4000, CRC(7d464e5c) SHA1(45b1591a6be713dfc58ab657e61531ea2b9263c1) )
+ ROM_LOAD( "2.12c", 0x8000, 0x4000, CRC(383dc94e) SHA1(f192e16e83ae34cc97af07072a4dc68e7c4c362c) )
+ ROM_LOAD( "3.13c", 0xc000, 0x4000, CRC(ce177f6e) SHA1(034cbe0c1e2baf9577741b3c222a8b4a8ac8c919) )
+
+ ROM_REGION( 0x1000, "audiocpu", 0 ) /* 8039 */
+ ROM_LOAD( "d8749hd.bin", 0x0000, 0x0800, BAD_DUMP CRC(978dfc33) SHA1(13d24ce577b88bf6ec2e970d36dc67a7ec691c55) ) /* this comes from the bootleg, the original has a custom IC */
+
+ ROM_REGION( 0x20000, "gfx1", 0 )
+ ROM_LOAD16_BYTE( "523h04.5e", 0x00000, 0x4000, CRC(c056d710) SHA1(3fe0ab7ef3bce7298c2a073d0985c33f9dc40062) )
+ ROM_LOAD16_BYTE( "523h07.5f", 0x00001, 0x4000, CRC(50e512ba) SHA1(f916afb9df1872f9de571d20b9045b20d9172eaa) )
+ ROM_LOAD16_BYTE( "523h05.6e", 0x08000, 0x4000, CRC(ae0d0f76) SHA1(6dd0119e4ba7ebb32ba1ca6395f80d18f1617ce8) )
+ ROM_LOAD16_BYTE( "523h08.6f", 0x08001, 0x4000, CRC(79f44e17) SHA1(cb32edc4df9f2209f13fc258fec4e67ee91badef) )
+ ROM_LOAD16_BYTE( "523h06.7e", 0x10000, 0x4000, CRC(d2db9689) SHA1(ceb5913716b4da2ddff2e837ddaa04d91e52f9e1) )
+ ROM_LOAD16_BYTE( "523h09.7f", 0x10001, 0x4000, CRC(8896dc85) SHA1(91493c6b69655de482f0c2a0cb3662fc0d1b6e45) )
+ /* 18000-1ffff empty */
+
+ ROM_REGION( 0x0240, "proms", 0 ) /* PROMs at 2F & 3F are MMI 63S081N (or compatibles), PROMs at 10F & 11F are MMI 6301-1N (or compatibles) */
+ ROM_LOAD( "523h10.2f", 0x0000, 0x0020, CRC(ec15dd15) SHA1(710384b154a9363fdc88edffda252f1d60e000dc) ) /* palette */
+ ROM_LOAD( "523h11.3f", 0x0020, 0x0020, CRC(54be2e83) SHA1(3200abc7f2238d62d7204ef57a6daa2df150538d) ) /* palette */
+ ROM_LOAD( "523h13.11f", 0x0040, 0x0100, CRC(4e0647a0) SHA1(fb87f878456b8b76bb2c028cb890d2a5c1c3e388) ) /* characters */
+ ROM_LOAD( "523h12.10f", 0x0140, 0x0100, CRC(53166a2a) SHA1(6cdde206036df7176679711f7888d72acee27c8f) ) /* sprites */
+ROM_END
+
ROM_START( finalizrb )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "finalizr.5", 0x4000, 0x8000, CRC(a55e3f14) SHA1(47f6da214b36cc56be547fa4313afcc5572508a2) )
@@ -362,5 +387,6 @@ ROM_END
-GAME( 1985, finalizr, 0, finalizr, finalizr, finalizr_state, empty_init, ROT90, "Konami", "Finalizer - Super Transformation", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-GAME( 1985, finalizrb, finalizr, finalizr, finalizrb, finalizr_state, empty_init, ROT90, "bootleg", "Finalizer - Super Transformation (bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1985, finalizr, 0, finalizr, finalizr, finalizr_state, empty_init, ROT90, "Konami", "Finalizer - Super Transformation (set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1985, finalizra, finalizr, finalizr, finalizra, finalizr_state, empty_init, ROT90, "Konami", "Finalizer - Super Transformation (set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1985, finalizrb, finalizr, finalizr, finalizra, finalizr_state, empty_init, ROT90, "bootleg", "Finalizer - Super Transformation (bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/firebeat.cpp b/src/mame/drivers/firebeat.cpp
index 2bb69eb3511..2341bbcbbbb 100644
--- a/src/mame/drivers/firebeat.cpp
+++ b/src/mame/drivers/firebeat.cpp
@@ -489,12 +489,12 @@ READ32_MEMBER(firebeat_state::keyboard_wheel_r )
READ8_MEMBER(firebeat_state::midi_uart_r )
{
- return m_duart_midi->read(space, offset >> 6);
+ return m_duart_midi->read(offset >> 6);
}
WRITE8_MEMBER(firebeat_state::midi_uart_w )
{
- m_duart_midi->write(space, offset >> 6, data);
+ m_duart_midi->write(offset >> 6, data);
}
WRITE_LINE_MEMBER(firebeat_state::midi_uart_ch0_irq_callback)
diff --git a/src/mame/drivers/firetrap.cpp b/src/mame/drivers/firetrap.cpp
index bdf1a5eeb8b..638303b51ca 100644
--- a/src/mame/drivers/firetrap.cpp
+++ b/src/mame/drivers/firetrap.cpp
@@ -339,7 +339,7 @@ WRITE_LINE_MEMBER(firetrap_state::firetrap_adpcm_int)
WRITE8_MEMBER(firetrap_state::adpcm_data_w)
{
m_audiocpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
- m_adpcm_select->write_ba(data);
+ m_adpcm_select->ba_w(data);
}
WRITE8_MEMBER(firetrap_state::flip_screen_w)
diff --git a/src/mame/drivers/flipjack.cpp b/src/mame/drivers/flipjack.cpp
index 49710b33951..6fa9210f59a 100644
--- a/src/mame/drivers/flipjack.cpp
+++ b/src/mame/drivers/flipjack.cpp
@@ -262,7 +262,7 @@ WRITE8_MEMBER(flipjack_state::layer_w)
WRITE8_MEMBER(flipjack_state::soundlatch_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
if (BIT(data, 7))
m_audiocpu->set_input_line(0, ASSERT_LINE);
}
diff --git a/src/mame/drivers/flkatck.cpp b/src/mame/drivers/flkatck.cpp
index d58e65bda44..59ca6d48324 100644
--- a/src/mame/drivers/flkatck.cpp
+++ b/src/mame/drivers/flkatck.cpp
@@ -69,7 +69,7 @@ WRITE8_MEMBER(flkatck_state::flkatck_ls138_w)
flkatck_bankswitch_w(space, 0, data);
break;
case 0x05: /* sound code number */
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
break;
case 0x06: /* Cause interrupt on audio CPU */
m_audiocpu->set_input_line(0, HOLD_LINE);
diff --git a/src/mame/drivers/flower.cpp b/src/mame/drivers/flower.cpp
index eca0e8d727e..e007c8decf4 100644
--- a/src/mame/drivers/flower.cpp
+++ b/src/mame/drivers/flower.cpp
@@ -316,7 +316,7 @@ WRITE8_MEMBER(flower_state::coin_counter_w)
WRITE8_MEMBER(flower_state::sound_command_w)
{
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
if(m_audio_nmi_enable == true)
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
diff --git a/src/mame/drivers/freekick.cpp b/src/mame/drivers/freekick.cpp
index 4aafbbef37e..bbda9f6c448 100644
--- a/src/mame/drivers/freekick.cpp
+++ b/src/mame/drivers/freekick.cpp
@@ -42,6 +42,68 @@ TODO:
To enter Test Mode - press Button1 durning RESET (code at $79d)
+****************************************************************************
+
+ Perfect Billiard/Gigas Omega
+ ---------------------- -----
+
+ GND A1 B1 GND GND 1A 1B GND
+ GND A2 B2 GND GND 2A 2B GND
+ +5V A3 B3 +5V +5V 3A 3B GND
+ +5V A4 B4 +5V +5V 4A 4B GND
+ +12V A5 B5 +12V +12V 5A 5B GND
+ SPEAKER(+) A6 B6 SPEAKER(-) SPEAKER(+) 6A 6B SPEAKER(-)
+ COIN METER 1 A7 B7 COIN METER 2 COIN A 7A 7B COUNTER B
+ COIN SW1 A8 B8 COIN SW2 COUNTER A 8A 8B COIN B
+ 1P START A9 B9 2P START 1P START 9A 9B 2P START
+ 1P UP A10 B10 2P UP COIN EMPTY SW 10A 10B
+ 1P DOWN A11 B11 2P DOWN 11A 11B
+ 1P LEFT A12 B12 2P LEFT 12A 12B
+ 1P RIGHT A13 B13 2P RIGHT 13A 13B
+ 1P SHOOT A14 B14 2P SHOOT 1P SHOOT 14A 14B 2P SHOOT
+ A15 B15 15A 15B
+ RED A16 B16 BLUE RED 16A 16B BLUE
+ GREEN A17 B17 SYNC GREEN 17A 17B SYNC
+ GND A18 B18 GND GND 18A 18B GND
+ 1P L 19A 19B 2P L
+ 1P R 20A 20B 2P R
+ +5V 21A 21B GND
+ AC IN 22A 22B AC OUT
+
+ Counter Run/Free Kick
+ ---------------------
+
+ GND 1B 1A GND
+ GND 2B 2A GND
+ +5V 3B 3A +5V
+ +5V 4B 4A +5V
+ 5B 5A
+ +12V 6B 6A +12V
+ INPUT PREVENTION KEY 7B 7A INPUT PREVENTION KEY
+ COUNTER B 8B 8A COUNTER A
+ 9B 9A
+ SPEAKER(-) 10B 10A SPEAKER(+)
+ 11B 11A
+ GREEN 12B 12A RED
+ SYNC 13B 13A BLUE
+ 14B 14A GND
+ 15B 15A
+ COIN B(SERVICE) 16B 16A COIN A
+ 2P START 17B 17A 1P START
+ 2P UP 18B 18A 1P UP
+ 2P DOWN 19B 19A 1P DOWN
+ 2P LEFT 20B 20A 1P LEFT
+ 2P RIGHT 21B 21A 1P RIGHT
+ 2P PUSH 1 22B 22A 1P PUSH 1
+ 2P PUSH 2 23B 23A 1P PUSH 2
+ 24B 24A
+ 2PL (Sensor Dial) 25B 25A 1PL (Sensor Dial)
+ 2PR (Sensor Dial) 26B 26A 1PR (Sensor Dial)
+ GND 27B 27A GND
+ GND 28B 28A GND
+
+****************************************************************************
+
*/
#include "emu.h"
@@ -1395,31 +1457,63 @@ ROM_END
// Omega code/gfx looks to be based on gigas mk2, given the "MarkII" graphic in the gfx roms and gigas MarkII style continue numbers etc
// PCB is marked "K.K NS6102-A" and seems to be somewhere between gigas hardware and freekick hardware (3x dipswitch arrays)
// Supposedly an extremely limited release with ~10 PCBs produced.
-ROM_START( omega )
+// A second PCB found with the CPU (under a metal cap) to be a NEC MC-8123 317-5002 - same as Gigas & Gigas Mark II, however
+// neither Omega set will work with the 317-5002 key in MAME, so maybe the CPU was factory reprogrammed?
+// A single byte difference at 0x1120 in 17.M10 (when decoded) looks like a legit bug fix as it changes a branch
+// which incorrectly jumps over a bit of initialization code
+
+ROM_START( omega ) // ROM at M10 labeled "17" to indicate a later Bug fix version
+ ROM_REGION(0xc000, "maincpu", 0) // encrypted
+ ROM_LOAD( "17.m10", 0x0000, 0x4000, CRC(c7de0993) SHA1(35ecd464935faba1dc7d0dbf48e1b17153626bfd) ) // 27128
+ ROM_LOAD( "8.n10", 0x4000, 0x8000, CRC(9bb61910) SHA1(f8a1210dbf93e901e246e6adf4cd905acc3ef376) ) // 27256
+
+ ROM_REGION(0x2000, "maincpu:key", 0) // MC8123 key
+ ROM_LOAD( "omega.key", 0x0000, 0x2000, CRC(0a63943f) SHA1(9e581ea0c5bf6c0ed5d402d3bab053766b8e44c2) )
+
+ ROM_REGION(0xc000, "gfx1", 0)
+ ROM_LOAD( "4.f10", 0x00000, 0x04000, CRC(bf780a8e) SHA1(53bfabf74f1a7782c6c1803498a24da0bf8db995) ) // 27128
+ ROM_LOAD( "5.h10", 0x04000, 0x04000, CRC(b491647f) SHA1(88017033a781ecc49a83241bc49e2077a480ac2b) ) // 27128
+ ROM_LOAD( "6.j10", 0x08000, 0x04000, CRC(65beba5b) SHA1(e6d61dc52dcbb30570b48d7b1d7807dd0be41400) ) // 27128
+
+ ROM_REGION(0xc000, "gfx2", 0)
+ ROM_LOAD( "3.d10", 0x00000, 0x04000, CRC(c678b202) SHA1(ee93385e11158ccaf51a22d813bd7020c04cfdad) ) // 27128
+ ROM_LOAD( "1.a10", 0x04000, 0x04000, CRC(e0aeada9) SHA1(ed00f6dca4f9701ff89390922d39341b179597c7) ) // 27128
+ ROM_LOAD( "2.c10", 0x08000, 0x04000, CRC(dbc0a47f) SHA1(b617c5a10c655e7befaeaecd9ce736e972285e6b) ) // 27128
+
+ ROM_REGION(0x600, "proms", 0)
+ ROM_LOAD( "tbp24s10n.3f", 0x0000, 0x100, CRC(75ec7472) SHA1(868811e838c570a0f576a0ece249cab2d4274d65) ) /* Or compatible type prom like the 82S129 */
+ ROM_LOAD( "tbp24s10n.4f", 0x0100, 0x100, CRC(5113a114) SHA1(3a5ab68c93d1f2c05ceb0311e12a54fd124d8435) )
+ ROM_LOAD( "tbp24s10n.3g", 0x0200, 0x100, CRC(b6b5d4a0) SHA1(2b7ba59a6c185326e11ce8ccd96b3c8cfd652fdf) )
+ ROM_LOAD( "tbp24s10n.4g", 0x0300, 0x100, CRC(931bc299) SHA1(f116f1d6a4324b86b0aae0a5a040236b3a4fd12d) )
+ ROM_LOAD( "tbp24s10n.3e", 0x0400, 0x100, CRC(899e089d) SHA1(5a485d3ef7d2102451ff76452cac106061cc5cd6) )
+ ROM_LOAD( "tbp24s10n.4e", 0x0500, 0x100, CRC(28321dd8) SHA1(4ba0f6c381ef929a476d4d7aa71b1397c48a644e) )
+ROM_END
+
+ROM_START( omegaa ) // ROM at M10 labeled "7" to indicate the original version skipping some initialization code
ROM_REGION(0xc000, "maincpu", 0) // encrypted
- ROM_LOAD("17.m10", 0x0000, 0x4000, CRC(c7de0993) SHA1(35ecd464935faba1dc7d0dbf48e1b17153626bfd)) // 27128
- ROM_LOAD("8.n10", 0x4000, 0x8000, CRC(9bb61910) SHA1(f8a1210dbf93e901e246e6adf4cd905acc3ef376)) // 27256
+ ROM_LOAD( "7.m10", 0x0000, 0x4000, CRC(6e7d77e1) SHA1(7675cea41391595cd7a3e1893478185989f4c319) ) // 27128
+ ROM_LOAD( "8.n10", 0x4000, 0x8000, CRC(9bb61910) SHA1(f8a1210dbf93e901e246e6adf4cd905acc3ef376) ) // 27256
ROM_REGION(0x2000, "maincpu:key", 0) // MC8123 key
- ROM_LOAD("omega.key", 0x0000, 0x2000, CRC(0a63943f) SHA1(9e581ea0c5bf6c0ed5d402d3bab053766b8e44c2))
+ ROM_LOAD( "omega.key", 0x0000, 0x2000, CRC(0a63943f) SHA1(9e581ea0c5bf6c0ed5d402d3bab053766b8e44c2) )
ROM_REGION(0xc000, "gfx1", 0)
- ROM_LOAD("4.f10", 0x00000, 0x04000, CRC(bf780a8e) SHA1(53bfabf74f1a7782c6c1803498a24da0bf8db995)) // 27128
- ROM_LOAD("5.h10", 0x04000, 0x04000, CRC(b491647f) SHA1(88017033a781ecc49a83241bc49e2077a480ac2b)) // 27128
- ROM_LOAD("6.j10", 0x08000, 0x04000, CRC(65beba5b) SHA1(e6d61dc52dcbb30570b48d7b1d7807dd0be41400)) // 27128
+ ROM_LOAD( "4.f10", 0x00000, 0x04000, CRC(bf780a8e) SHA1(53bfabf74f1a7782c6c1803498a24da0bf8db995) ) // 27128
+ ROM_LOAD( "5.h10", 0x04000, 0x04000, CRC(b491647f) SHA1(88017033a781ecc49a83241bc49e2077a480ac2b) ) // 27128
+ ROM_LOAD( "6.j10", 0x08000, 0x04000, CRC(65beba5b) SHA1(e6d61dc52dcbb30570b48d7b1d7807dd0be41400) ) // 27128
ROM_REGION(0xc000, "gfx2", 0)
- ROM_LOAD("3.d10", 0x00000, 0x04000, CRC(c678b202) SHA1(ee93385e11158ccaf51a22d813bd7020c04cfdad)) // 27128
- ROM_LOAD("1.a10", 0x04000, 0x04000, CRC(e0aeada9) SHA1(ed00f6dca4f9701ff89390922d39341b179597c7)) // 27128
- ROM_LOAD("2.c10", 0x08000, 0x04000, CRC(dbc0a47f) SHA1(b617c5a10c655e7befaeaecd9ce736e972285e6b)) // 27128
+ ROM_LOAD( "3.d10", 0x00000, 0x04000, CRC(c678b202) SHA1(ee93385e11158ccaf51a22d813bd7020c04cfdad) ) // 27128
+ ROM_LOAD( "1.a10", 0x04000, 0x04000, CRC(e0aeada9) SHA1(ed00f6dca4f9701ff89390922d39341b179597c7) ) // 27128
+ ROM_LOAD( "2.c10", 0x08000, 0x04000, CRC(dbc0a47f) SHA1(b617c5a10c655e7befaeaecd9ce736e972285e6b) ) // 27128
ROM_REGION(0x600, "proms", 0)
- ROM_LOAD("tbp24s10n.3f", 0x0000, 0x100, CRC(75ec7472) SHA1(868811e838c570a0f576a0ece249cab2d4274d65) ) /* Or compatible type prom like the 82S129 */
- ROM_LOAD("tbp24s10n.4f", 0x0100, 0x100, CRC(5113a114) SHA1(3a5ab68c93d1f2c05ceb0311e12a54fd124d8435) )
- ROM_LOAD("tbp24s10n.3g", 0x0200, 0x100, CRC(b6b5d4a0) SHA1(2b7ba59a6c185326e11ce8ccd96b3c8cfd652fdf) )
- ROM_LOAD("tbp24s10n.4g", 0x0300, 0x100, CRC(931bc299) SHA1(f116f1d6a4324b86b0aae0a5a040236b3a4fd12d) )
- ROM_LOAD("tbp24s10n.3e", 0x0400, 0x100, CRC(899e089d) SHA1(5a485d3ef7d2102451ff76452cac106061cc5cd6) )
- ROM_LOAD("tbp24s10n.4e", 0x0500, 0x100, CRC(28321dd8) SHA1(4ba0f6c381ef929a476d4d7aa71b1397c48a644e) )
+ ROM_LOAD( "tbp24s10n.3f", 0x0000, 0x100, CRC(75ec7472) SHA1(868811e838c570a0f576a0ece249cab2d4274d65) ) /* Or compatible type prom like the 82S129 */
+ ROM_LOAD( "tbp24s10n.4f", 0x0100, 0x100, CRC(5113a114) SHA1(3a5ab68c93d1f2c05ceb0311e12a54fd124d8435) )
+ ROM_LOAD( "tbp24s10n.3g", 0x0200, 0x100, CRC(b6b5d4a0) SHA1(2b7ba59a6c185326e11ce8ccd96b3c8cfd652fdf) )
+ ROM_LOAD( "tbp24s10n.4g", 0x0300, 0x100, CRC(931bc299) SHA1(f116f1d6a4324b86b0aae0a5a040236b3a4fd12d) )
+ ROM_LOAD( "tbp24s10n.3e", 0x0400, 0x100, CRC(899e089d) SHA1(5a485d3ef7d2102451ff76452cac106061cc5cd6) )
+ ROM_LOAD( "tbp24s10n.4e", 0x0500, 0x100, CRC(28321dd8) SHA1(4ba0f6c381ef929a476d4d7aa71b1397c48a644e) )
ROM_END
@@ -1465,7 +1559,8 @@ GAME( 1986, gigasb, gigas, gigas, gigas, freekick_state, init_gigas
GAME( 1986, oigas, gigas , oigas, gigas, freekick_state, init_gigasb, ROT270, "bootleg", "Oigas (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, gigasm2, 0, gigasm, gigasm2, freekick_state, init_gigas, ROT270, "Sega", "Gigas Mark II (MC-8123, 317-5002)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, gigasm2b, gigasm2, gigas, gigasm2, freekick_state, init_gigasb, ROT270, "bootleg", "Gigas Mark II (bootleg)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, omega, 0, omega, omega, freekick_state, init_gigas, ROT270, "Nihon System", "Omega", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, omega, 0, omega, omega, freekick_state, init_gigas, ROT270, "Nihon System", "Omega", MACHINE_SUPPORTS_SAVE ) // Bug fix version
+GAME( 1986, omegaa, omega, omega, omega, freekick_state, init_gigas, ROT270, "Nihon System", "Omega (earlier)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, pbillrd, 0, pbillrd, pbillrd, freekick_state, empty_init, ROT0, "Nihon System", "Perfect Billiard", MACHINE_SUPPORTS_SAVE )
GAME( 1987, pbillrds, pbillrd, pbillrdm, pbillrd, freekick_state, init_pbillrds, ROT0, "Nihon System", "Perfect Billiard (MC-8123, 317-0030)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, pbillrdsa, pbillrd, pbillrdm, pbillrd, freekick_state, init_pbillrds, ROT0, "Nihon System", "Perfect Billiard (MC-8123, 317-5008)", MACHINE_SUPPORTS_SAVE ) // sticker on CPU module different (wrong?) functionality the same
diff --git a/src/mame/drivers/fromanc2.cpp b/src/mame/drivers/fromanc2.cpp
index b9aec13b2ea..8bd66cfc0fb 100644
--- a/src/mame/drivers/fromanc2.cpp
+++ b/src/mame/drivers/fromanc2.cpp
@@ -37,8 +37,8 @@
WRITE16_MEMBER(fromanc2_state::sndcmd_w)
{
- m_soundlatch->write(space, offset, (data >> 8) & 0xff); // 1P (LEFT)
- m_soundlatch2->write(space, offset, data & 0xff); // 2P (RIGHT)
+ m_soundlatch->write((data >> 8) & 0xff); // 1P (LEFT)
+ m_soundlatch2->write(data & 0xff); // 2P (RIGHT)
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
m_sndcpu_nmi_flag = 0;
diff --git a/src/mame/drivers/fs3216.cpp b/src/mame/drivers/fs3216.cpp
index cbe6aa178df..19dbda235b7 100644
--- a/src/mame/drivers/fs3216.cpp
+++ b/src/mame/drivers/fs3216.cpp
@@ -58,8 +58,8 @@ private:
u16 irq_r();
IRQ_CALLBACK_MEMBER(intack);
- DECLARE_READ8_MEMBER(ctc_r);
- DECLARE_WRITE8_MEMBER(ctc_w);
+ u8 ctc_r(offs_t offset);
+ void ctc_w(offs_t offset, u8 data);
u16 earom_recall_r();
u16 earom_store_r();
@@ -226,14 +226,14 @@ IRQ_CALLBACK_MEMBER(fs3216_state::intack)
return m_vecprom[irqline];
}
-READ8_MEMBER(fs3216_state::ctc_r)
+u8 fs3216_state::ctc_r(offs_t offset)
{
- return m_ctc->read(space, offset >> 1);
+ return m_ctc->read(offset >> 1);
}
-WRITE8_MEMBER(fs3216_state::ctc_w)
+void fs3216_state::ctc_w(offs_t offset, u8 data)
{
- m_ctc->write(space, offset >> 1, data);
+ m_ctc->write(offset >> 1, data);
}
u16 fs3216_state::earom_recall_r()
diff --git a/src/mame/drivers/funkyjet.cpp b/src/mame/drivers/funkyjet.cpp
index 2c2b8f0cef0..00d81fe3716 100644
--- a/src/mame/drivers/funkyjet.cpp
+++ b/src/mame/drivers/funkyjet.cpp
@@ -334,7 +334,6 @@ void funkyjet_state::funkyjet(machine_config &config)
PALETTE(config, "palette").set_format(palette_device::xBGR_444, 1024);
DECO16IC(config, m_deco_tilegen, 0);
- m_deco_tilegen->set_split(0);
m_deco_tilegen->set_pf1_size(DECO_64x32);
m_deco_tilegen->set_pf2_size(DECO_64x32);
m_deco_tilegen->set_pf1_trans_mask(0x0f);
diff --git a/src/mame/drivers/funworld.cpp b/src/mame/drivers/funworld.cpp
index 313a1b7a88a..7aaf94a31ef 100644
--- a/src/mame/drivers/funworld.cpp
+++ b/src/mame/drivers/funworld.cpp
@@ -101,7 +101,7 @@
* Unknown Fun World A7-11 game 1, Fun World, 1985.
* Unknown Fun World A7-11 game 2, Fun World, 1985.
* Unknown Fun World A0-1 game, Fun World, 1991.
- * Joker Card (Epoxy brick CPU), Fun World, 1991.
+ * Joker Card / Multi Card (Epoxy brick CPU), Fun World, 1991.
*****************************************************************************************
@@ -472,6 +472,17 @@
The only visible changes are in the NVRAM, where the $0000 offset hasn't the JMP $C210 instruction
injected at the start...
+
+ * Joker Card / Multi Card (Epoxy brick CPU)
+
+ These series are running in a derivative hardware with epoxy CPU brick.
+ CPU is RP65C02A, with 2x Toshiba TC5565APL-10 RAMs. 1x Intel D27128A ROM.
+ and 1x PAL16L8B.
+
+ The main program is inside the battery backed RAM, and need to be dumped.
+ See more notes below in the ROM loading.
+
+
*****************************************************************************************
Memory Map (generic)
@@ -1203,20 +1214,23 @@ void funworld_state::saloon_map(address_map &map)
{
map(0x0000, 0x07ff).ram().share("nvram");
map(0x0800, 0x0800).portr("IN0");
+ map(0x0801, 0x0801).portr("IN1");
+ map(0x0802, 0x0802).portr("IN2"); // maybe
map(0x0808, 0x0808).portr("IN3"); // maybe
- map(0x0802, 0x0802).portr("IN4"); // maybe
- map(0x0a01, 0x0a01).portr("IN1");
+ map(0x0810, 0x0810).nopw();
+ map(0x0a00, 0x0a00).portr("IN4");
+ map(0x0a01, 0x0a01).portr("IN5");
+ map(0x081b, 0x081b).portw("I2C_CK");
map(0x081c, 0x081c).w("crtc", FUNC(mc6845_device::address_w));
map(0x081d, 0x081d).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
- map(0x1000, 0x1000).portr("IN2");
+ map(0x1000, 0x1000).portr("I2C_DI").portw("I2C_DO");
map(0x1800, 0x1800).r("ay8910", FUNC(ay8910_device::data_r));
map(0x1800, 0x1801).w("ay8910", FUNC(ay8910_device::address_data_w));
-// AM_RANGE(0x2000, 0x2000) AM_READNOP /* some unknown reads... maybe a DSW */
+ map(0x2000, 0x2003).nopr(); // check for extra ROM in $2000. if exist just jump to $2100
map(0x6000, 0x6fff).ram().w(FUNC(funworld_state::funworld_videoram_w)).share("videoram");
map(0x7000, 0x7fff).ram().w(FUNC(funworld_state::funworld_colorram_w)).share("colorram");
map(0x8000, 0xffff).rom();
}
-
/*
Unknown R/W
-----------
@@ -1259,7 +1273,7 @@ void funworld_state::intergames_map(address_map &map)
map(0x8000, 0xffff).rom();
}
-void funworld_state::fw_a7_11_map(address_map &map)
+void funworld_state::fw_brick_map(address_map &map)
{
map(0x0000, 0x07ff).ram().share("nvram");
map(0x0800, 0x0803).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
@@ -1270,12 +1284,11 @@ void funworld_state::fw_a7_11_map(address_map &map)
map(0x0e01, 0x0e01).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
map(0x2000, 0x2fff).ram().w(FUNC(funworld_state::funworld_videoram_w)).share("videoram");
map(0x3000, 0x3fff).ram().w(FUNC(funworld_state::funworld_colorram_w)).share("colorram");
- map(0x4000, 0x4000).nopr();
- map(0x8000, 0xbfff).ram();
+ map(0x4000, 0x7fff).nopr(); // check for the brick RAM programming ROM.
+ map(0x8000, 0xbfff).ram().share("nvram1");
map(0xc000, 0xffff).rom();
}
-
/*************************
* Input ports *
*************************/
@@ -2469,91 +2482,95 @@ INPUT_PORTS_END
static INPUT_PORTS_START( saloon )
- PORT_START("IN0")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-1") PORT_CODE(KEYCODE_1)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-2") PORT_CODE(KEYCODE_2)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-3") PORT_CODE(KEYCODE_3)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-4") PORT_CODE(KEYCODE_4)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-5") PORT_CODE(KEYCODE_5)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-6") PORT_CODE(KEYCODE_6)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-7") PORT_CODE(KEYCODE_7)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-8") PORT_CODE(KEYCODE_8)
-
- PORT_START("IN1")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-1") PORT_CODE(KEYCODE_Q)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-2") PORT_CODE(KEYCODE_W)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-3") PORT_CODE(KEYCODE_E)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-4") PORT_CODE(KEYCODE_R)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-5") PORT_CODE(KEYCODE_T)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-6") PORT_CODE(KEYCODE_Y)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-7") PORT_CODE(KEYCODE_U)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-8") PORT_CODE(KEYCODE_I)
-
- PORT_START("IN2")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-1") PORT_CODE(KEYCODE_A)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-2") PORT_CODE(KEYCODE_S)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-3") PORT_CODE(KEYCODE_D)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-4") PORT_CODE(KEYCODE_F)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-5") PORT_CODE(KEYCODE_G)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-6") PORT_CODE(KEYCODE_H)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-7") PORT_CODE(KEYCODE_J)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-8") PORT_CODE(KEYCODE_K)
-
- PORT_START("IN3")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- PORT_START("IN4")
+ PORT_START("IN0") // 0800h
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Play / Start / Enter") // ok
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-2") PORT_CODE(KEYCODE_2) // funcion aun no detectada
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Stop 4 / High / Menu Dwn") // ok
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Cancel / Take / Autohold / Exit") // ok
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Menu") // ok
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Menu-Up") PORT_CODE(KEYCODE_6) // ok -> revisar otra funcionalidad
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Stop 1") // ok
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Stop 5 / Bet") // ok
+
+ PORT_START("IN1") // 0801h
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("1-1") PORT_CODE(KEYCODE_A)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("1-2") PORT_CODE(KEYCODE_S)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("1-3") PORT_CODE(KEYCODE_D)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("1-4") PORT_CODE(KEYCODE_F)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("1-5") PORT_CODE(KEYCODE_G)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("1-6") PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("1-7") PORT_CODE(KEYCODE_J)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("1-8") PORT_CODE(KEYCODE_K)
+
+ PORT_START("IN2") // 0802h
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Stop 2 / Low") // ok
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) // ok
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+ PORT_START("IN3") // 0808h
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) // ok
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) // PROBADO: NO HACE NADA
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // PROBADO: NO HACE NADA
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Credits IN/OUT") // ok
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) // PROBADO: NO HACE NADA
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_NAME("Keyout (Scarico Coin)") // ok
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) // PROBADO: NO HACE NADA
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Warm Reset") PORT_CODE(KEYCODE_R)// OK
+
+ PORT_START("IN4") // 0A00h
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4-1") PORT_CODE(KEYCODE_1_PAD)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4-2") PORT_CODE(KEYCODE_2_PAD)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4-3") PORT_CODE(KEYCODE_3_PAD)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4-4") PORT_CODE(KEYCODE_4_PAD)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4-5") PORT_CODE(KEYCODE_5_PAD)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4-6") PORT_CODE(KEYCODE_6_PAD)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4-7") PORT_CODE(KEYCODE_7_PAD)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4-8") PORT_CODE(KEYCODE_8_PAD)
+
+ PORT_START("IN5") // 0A01h
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5-1") PORT_CODE(KEYCODE_Q)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5-2") PORT_CODE(KEYCODE_L)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5-3") PORT_CODE(KEYCODE_E)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5-4") PORT_CODE(KEYCODE_0)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5-5") PORT_CODE(KEYCODE_T)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5-6") PORT_CODE(KEYCODE_Y)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5-7") PORT_CODE(KEYCODE_U)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5-8") PORT_CODE(KEYCODE_I)
+
+ PORT_START("I2C_CK") // 081Bh
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("i2cmem" , i2cmem_device, write_scl) // Serial Clock
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("I2C_DI") // 1000h Input
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_READ_LINE_DEVICE_MEMBER("i2cmem", i2cmem_device, read_sda) // Serial Data In
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_START("DSW")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-1") PORT_CODE(KEYCODE_Z)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-2") PORT_CODE(KEYCODE_X)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-3") PORT_CODE(KEYCODE_C)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-4") PORT_CODE(KEYCODE_V)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-5") PORT_CODE(KEYCODE_B)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-6") PORT_CODE(KEYCODE_N)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-7") PORT_CODE(KEYCODE_M)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-8") PORT_CODE(KEYCODE_L)
-
- PORT_START("SW1")
- PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_START("I2C_DO") // 1000h Output
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("i2cmem", i2cmem_device, write_sda) // Serial Data Out
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( funquiz )
@@ -2936,6 +2953,13 @@ static INPUT_PORTS_START( royal )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
+static INPUT_PORTS_START( fw_brick1 )
+ PORT_INCLUDE( novoplay )
+ PORT_MODIFY("DSW")
+ PORT_DIPNAME( 0x20, 0x00, "Game Type" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x20, "Multi Card (without Jokers)" )
+ PORT_DIPSETTING( 0x00, "Joker Card (with Jokers)" )
+INPUT_PORTS_END
/*************************
* Graphics Layouts *
@@ -3110,6 +3134,11 @@ void funworld_state::fw1stpal(machine_config &config)
ay8910.port_a_write_callback().set(FUNC(funworld_state::funworld_lamp_a_w));
ay8910.port_b_write_callback().set(FUNC(funworld_state::funworld_lamp_b_w));
ay8910.add_route(ALL_OUTPUTS, "mono", 2.5); /* analyzed to avoid clips */
+
+ /* Serial Memory */
+ i2cmem_device &m_i2cmem(I2CMEM(config, "i2cmem", 0));
+ m_i2cmem.set_data_size(256);
+ m_i2cmem.set_e0(1);
}
@@ -3181,6 +3210,8 @@ void funworld_state::saloon(machine_config &config)
fw1stpal(config);
R65C02(config.replace(), m_maincpu, CPU_CLOCK); /* 2MHz */
m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::saloon_map);
+ config.device_remove("pia0");
+ config.device_remove("pia1");
}
@@ -3228,7 +3259,8 @@ void funworld_state::fw_brick_1(machine_config &config)
{
fw1stpal(config);
R65C02(config.replace(), m_maincpu, CPU_CLOCK); /* 2MHz */
- m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::fw_a7_11_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::fw_brick_map);
+ NVRAM(config, "nvram1", nvram_device::DEFAULT_ALL_0);
// m_gfxdecode->set_info(gfx_fw2ndpal);
}
@@ -3237,10 +3269,555 @@ void funworld_state::fw_brick_2(machine_config &config)
{
fw2ndpal(config);
R65C02(config.replace(), m_maincpu, CPU_CLOCK); /* 2MHz */
- m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::fw_a7_11_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::fw_brick_map);
+ NVRAM(config, "nvram1", nvram_device::DEFAULT_ALL_0);
// m_gfxdecode->set_info(gfx_fw2ndpal);
}
+// TO-DO: clean up and relocate, when convenient, all the opcode-encryption stuff
+
+class royalcrdf_state : public funworld_state
+{
+public:
+ royalcrdf_state(const machine_config &mconfig, device_type type, const char* tag)
+ : funworld_state(mconfig, type, tag)
+ {
+ }
+
+ void royalcrdf(machine_config& config);
+
+ void driver_init() override;
+
+private:
+ cpu_device* _maincpu {};
+ DECLARE_READ8_MEMBER(royalcrdf_opcode_r);
+
+ void royalcrdf_opcodes_map(address_map& map);
+};
+
+READ8_MEMBER(royalcrdf_state::royalcrdf_opcode_r)
+{
+ // address-based data bitswap; 4 address bits are involved, but only
+ // 5 different bitswaps exist, with clear regularities, so the
+ // hardware is probably selecting the appropiate one by
+ // applying passive logic to the address bits; we encode it
+ // indexed by all the involved address bits instead. A notable fact is that
+ // all the permutations in royalcrdf & multiwin are odd-parity ones,
+ // so an intriguing possibility is that the hardware be applying
+ // a fixed odd number (3 would suffice) of address-dependent
+ // 1-bit-to-1-bit bitswaps; furthermore, in both sets one of the
+ // bitswaps is equal to the one applied to all the data (but notice
+ // that, in those cases, we are applying it twice to opcodes here)
+ constexpr std::array<std::array<int,4>,16> bs{ // bitswaps for data bits 1,2,5 & 7, in that order
+ 1,5,2,7,
+ 1,5,2,7,
+ 5,1,7,2,
+ 7,2,5,1,
+ 1,5,2,7,
+ 1,5,2,7,
+ 5,2,1,7,
+ 7,2,5,1,
+ 1,5,2,7,
+ 1,5,2,7,
+ 5,1,7,2,
+ 1,7,5,2,
+ 1,5,2,7,
+ 1,5,2,7,
+ 5,2,1,7,
+ 1,7,5,2,
+ };
+
+ // xor masks, dependent on the same address bits than the bitswaps,
+ // and with the same 5-values structure
+ constexpr std::array<uint8_t,16> xm {
+ 0x02, 0x02, 0xa6, 0x82, 0x02, 0x02, 0x06, 0x82, 0x02, 0x02, 0xa6, 0x00, 0x02, 0x02, 0x06, 0x00
+ };
+
+ uint8_t data {_maincpu->space(AS_PROGRAM).read_byte(offset)};
+ unsigned idx {bitswap<4>(offset, 8,5,2,1)};
+
+ return bitswap<8>(data, bs[idx][3],6,bs[idx][2],4,3,bs[idx][1],bs[idx][0],0) ^ xm[idx];
+}
+
+void royalcrdf_state::royalcrdf_opcodes_map(address_map &map)
+{
+ map(0x0000, 0xffff).r(FUNC(royalcrdf_state::royalcrdf_opcode_r));
+}
+
+void royalcrdf_state::driver_init()
+{
+ uint8_t *ROM = memregion("maincpu")->base();
+ for (int x = 0x8000; x < 0x10000; x++)
+ {
+ ROM[x] = bitswap<8>(ROM[x]^0x22,2,6,7,4,3,1,5,0);
+ }
+}
+
+void royalcrdf_state::royalcrdf(machine_config &config)
+{
+ fw2ndpal(config);
+
+ _maincpu = reinterpret_cast<cpu_device*>(config.device("maincpu"));
+ _maincpu->set_addrmap(AS_OPCODES, &royalcrdf_state::royalcrdf_opcodes_map);
+}
+
+class multiwin_state : public funworld_state
+{
+public:
+ multiwin_state(const machine_config &mconfig, device_type type, const char* tag)
+ : funworld_state(mconfig, type, tag)
+ {
+ }
+
+ void multiwin(machine_config& config);
+
+ void driver_init() override;
+
+private:
+ cpu_device* _maincpu {};
+ DECLARE_READ8_MEMBER(multiwin_opcode_r);
+
+ void multiwin_opcodes_map(address_map& map);
+};
+
+READ8_MEMBER(multiwin_state::multiwin_opcode_r)
+{
+ // same general encryption scheme than the one used by the EVONA Royald Card set;
+ // 4 address bits determine which bitswap+xor is applied to the opcodes; in this case,
+ // one of the address bits don't have effect on the bitswap, just on the xor;
+ // again, we have just five different bitswaps, and the hardware is probably using
+ // passive logic on the address bits to do the selection
+ constexpr std::array<std::array<int,5>,8> bs { // bitswaps for data bits 0,2,4,5 & 7, in that order
+ 5,2,4,0,7,
+ 4,0,2,7,5,
+ 7,4,5,2,0,
+ 4,0,2,7,5,
+ 2,7,0,5,4,
+ 4,0,2,7,5,
+ 0,5,7,4,2,
+ 4,0,2,7,5,
+ };
+
+ // xor masks
+ constexpr std::array<uint8_t,16> xm {
+ 0x00, 0x00, 0x10, 0x00, 0x20, 0x00, 0x30, 0x00, 0x00, 0xb5, 0x10, 0xb5, 0x20, 0xb5, 0x30, 0xb5
+ };
+
+ uint8_t data {_maincpu->space(AS_PROGRAM).read_byte(offset)};
+ unsigned idx {bitswap<4>(offset, 6,9,5,3)};
+
+ return bitswap<8>(data, bs[idx&7][4],6,bs[idx&7][3],bs[idx&7][2],3,bs[idx&7][1],1,bs[idx&7][0]) ^ xm[idx];
+}
+
+void multiwin_state::multiwin_opcodes_map(address_map &map)
+{
+ map(0x0000, 0xffff).r(FUNC(multiwin_state::multiwin_opcode_r));
+}
+
+void multiwin_state::driver_init()
+{
+ uint8_t *ROM = memregion("maincpu")->base();
+ for (int x = 0x8000; x < 0x10000; x++)
+ {
+ ROM[x] = bitswap<8>(ROM[x]^0x91,5,6,7,2,3,0,1,4);
+ }
+}
+
+void multiwin_state::multiwin(machine_config &config)
+{
+ fw2ndpal(config);
+
+ _maincpu = reinterpret_cast<cpu_device*>(config.device("maincpu"));
+ _maincpu->set_addrmap(AS_OPCODES, &multiwin_state::multiwin_opcodes_map);
+}
+
+
+class powercrd_state : public funworld_state
+{
+public:
+ powercrd_state(const machine_config &mconfig, device_type type, const char* tag)
+ : funworld_state(mconfig, type, tag)
+ {
+ }
+
+ void powercrd(machine_config& config);
+
+private:
+ cpu_device* _maincpu {};
+ DECLARE_READ8_MEMBER(powercrd_opcode_r);
+
+ void powercrd_opcodes_map(address_map& map);
+};
+
+READ8_MEMBER(powercrd_state::powercrd_opcode_r)
+{
+ // encryption controlled by the lower two bits of the address; no clear structure is
+ // seen in the tables, so it looks like a lookup into randomly or pseudorandomly
+ // generated permutation tables; all opcodes in the [8da0, 9e0b) & [c000, ef80) are
+ // believed to be covered by these tables; errors could be lurking in the least used opcodes;
+ // this same encryption scheme (with different tables) is seen in megacard & jokercrd
+
+ constexpr uint8_t UNKN {0xfc};
+
+ constexpr std::array<std::array<uint8_t,256>,4> decryption_tables
+ {
+ //_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f
+ 0xe8, 0x29, UNKN, UNKN, 0x85, UNKN, 0x18, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xd5, // 0_
+ UNKN, UNKN, 0xa6, 0x4c, UNKN, UNKN, 0x84, UNKN, UNKN, UNKN, 0x69, UNKN, 0x91, 0x38, 0xa8, UNKN, // 1_
+ UNKN, 0x9d, 0xd8, 0x49, 0xc0, UNKN, 0x66, UNKN, UNKN, 0xe6, 0xb9, 0xad, UNKN, UNKN, UNKN, 0x10, // 2_
+ UNKN, 0xd0, UNKN, 0x92, UNKN, UNKN, 0x74, UNKN, 0x9e, UNKN, UNKN, UNKN, UNKN, 0xb1, UNKN, 0x3d, // 3_
+ 0xa5, 0xc4, UNKN, UNKN, UNKN, 0xce, 0x6a, 0x3a, UNKN, UNKN, UNKN, UNKN, 0xa2, UNKN, UNKN, UNKN, // 4_
+ 0x9c, UNKN, UNKN, UNKN, UNKN, 0x79, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 5_
+ UNKN, 0xed, UNKN, UNKN, UNKN, UNKN, 0xc9, 0x99, UNKN, 0xa9, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 6_
+ UNKN, UNKN, 0xc8, UNKN, 0xe0, 0x2d, UNKN, 0x7d, UNKN, UNKN, 0x80, 0x64, 0xf0, UNKN, UNKN, UNKN, // 7_
+ UNKN, UNKN, UNKN, UNKN, 0x98, UNKN, UNKN, UNKN, 0xbd, UNKN, UNKN, UNKN, 0x1a, UNKN, UNKN, UNKN, // 8_
+ UNKN, 0x30, UNKN, UNKN, 0xc6, 0x90, UNKN, UNKN, UNKN, 0x6d, 0xee, UNKN, UNKN, UNKN, 0xe4, UNKN, // 9_
+ UNKN, 0x68, UNKN, UNKN, UNKN, UNKN, UNKN, 0x0d, 0x95, UNKN, 0x8e, 0x40, UNKN, 0x20, 0xb2, UNKN, // a_
+ UNKN, UNKN, UNKN, UNKN, UNKN, 0x65, UNKN, UNKN, UNKN, UNKN, UNKN, 0xa4, UNKN, UNKN, 0x05, UNKN, // b_
+ UNKN, UNKN, 0xba, 0x8a, UNKN, UNKN, UNKN, 0x60, 0xf8, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // c_
+ 0xdd, UNKN, UNKN, UNKN, 0xaa, 0xe9, 0x8d, 0xa0, UNKN, 0xb5, UNKN, 0xca, UNKN, UNKN, 0x0a, UNKN, // d_
+ 0x2a, UNKN, UNKN, UNKN, 0xb0, UNKN, UNKN, 0x48, UNKN, UNKN, UNKN, UNKN, UNKN, 0x4a, 0xcd, 0x45, // e_
+ UNKN, UNKN, UNKN, 0x09, UNKN, UNKN, 0xc5, UNKN, UNKN, 0x88, 0xae, UNKN, 0x86, UNKN, 0xda, 0x8c, // f_
+
+ //_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f
+ UNKN, UNKN, UNKN, 0xae, UNKN, 0x4e, 0xda, UNKN, UNKN, UNKN, 0x60, UNKN, UNKN, UNKN, UNKN, 0x64, // 0_
+ 0xa0, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x86, 0x9c, 0x88, 0xe4, 0xc4, UNKN, UNKN, 0x95, // 1_
+ 0x2a, UNKN, 0xe0, UNKN, UNKN, 0x99, UNKN, UNKN, 0x90, UNKN, UNKN, UNKN, 0x6c, 0x49, UNKN, UNKN, // 2_
+ 0xf0, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x66, UNKN, 0x11, 0xee, UNKN, UNKN, 0x4c, // 3_
+ 0xb0, UNKN, UNKN, 0x45, 0xc6, UNKN, UNKN, UNKN, UNKN, 0xcd, UNKN, UNKN, 0xc8, 0x1a, UNKN, UNKN, // 4_
+ UNKN, UNKN, 0x09, 0x91, UNKN, 0xc9, 0xf8, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x92, 0x20, 0xa4, // 5_
+ UNKN, 0x65, UNKN, 0xe8, UNKN, 0xd8, 0x3d, UNKN, UNKN, UNKN, UNKN, UNKN, 0x80, 0xbd, 0x84, UNKN, // 6_
+ UNKN, UNKN, UNKN, 0x68, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 7_
+ 0xaa, UNKN, UNKN, UNKN, UNKN, UNKN, 0x0d, 0x18, UNKN, UNKN, UNKN, 0x8a, UNKN, UNKN, UNKN, 0x26, // 8_
+ 0xc0, UNKN, UNKN, UNKN, 0x3a, 0xc5, UNKN, 0x6d, 0xe9, UNKN, 0x4a, 0xb9, UNKN, 0x05, 0x0a, UNKN, // 9_
+ UNKN, 0xfa, UNKN, UNKN, UNKN, 0xd5, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x48, UNKN, // a_
+ 0x10, UNKN, 0xf9, 0x5a, UNKN, 0xa2, UNKN, UNKN, UNKN, UNKN, UNKN, 0xa9, UNKN, 0xa6, UNKN, UNKN, // b_
+ 0xca, UNKN, UNKN, 0x85, UNKN, UNKN, UNKN, UNKN, UNKN, 0xb2, UNKN, UNKN, UNKN, 0x9d, UNKN, 0x7a, // c_
+ UNKN, 0x79, 0xa5, UNKN, UNKN, 0xb1, UNKN, 0x8e, 0xad, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // d_
+ UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x2d, UNKN, UNKN, UNKN, 0x8d, UNKN, UNKN, UNKN, 0xb5, 0xce, // e_
+ UNKN, UNKN, 0x38, UNKN, 0xe6, UNKN, UNKN, 0xd0, 0x69, UNKN, UNKN, 0x29, UNKN, UNKN, UNKN, UNKN, // f_
+
+ //_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f
+ UNKN, UNKN, 0x30, 0xb5, 0x49, 0xb0, UNKN, 0xc5, UNKN, 0x1a, UNKN, UNKN, UNKN, UNKN, 0x90, UNKN, // 0_
+ UNKN, UNKN, UNKN, UNKN, 0xaa, UNKN, UNKN, 0x2d, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 1_
+ UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x4a, 0x9a, UNKN, 0xfa, UNKN, UNKN, 0x5a, UNKN, 0xae, UNKN, // 2_
+ UNKN, UNKN, 0xe0, UNKN, UNKN, UNKN, 0x8d, 0x0a, UNKN, UNKN, 0xed, UNKN, 0x88, UNKN, UNKN, UNKN, // 3_
+ UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xee, UNKN, UNKN, UNKN, 0xb1, UNKN, 0x9c, UNKN, 0x0d, // 4_
+ 0x4c, UNKN, 0x69, UNKN, UNKN, 0xa9, UNKN, UNKN, 0x05, 0xa4, UNKN, 0x4e, UNKN, UNKN, UNKN, UNKN, // 5_
+ 0xc6, UNKN, UNKN, 0xbd, 0x09, UNKN, UNKN, UNKN, UNKN, 0x20, UNKN, 0x3a, 0xc0, UNKN, UNKN, UNKN, // 6_
+ 0xa0, UNKN, UNKN, UNKN, 0x80, UNKN, 0x95, UNKN, UNKN, UNKN, 0xe8, UNKN, 0xd0, UNKN, UNKN, UNKN, // 7_
+ 0x60, 0xe9, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x40, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 8_
+ UNKN, UNKN, 0x9d, UNKN, UNKN, UNKN, UNKN, 0xa5, UNKN, UNKN, 0xf0, UNKN, UNKN, UNKN, UNKN, UNKN, // 9_
+ UNKN, 0x38, UNKN, 0xca, 0xa2, 0x8e, UNKN, 0xb9, UNKN, 0xa6, 0xcd, 0x2a, UNKN, UNKN, UNKN, UNKN, // a_
+ UNKN, UNKN, 0xad, UNKN, UNKN, UNKN, UNKN, UNKN, 0xf8, UNKN, UNKN, 0x11, 0xce, UNKN, UNKN, UNKN, // b_
+ UNKN, UNKN, 0xda, UNKN, UNKN, UNKN, 0x6c, UNKN, UNKN, UNKN, UNKN, 0x8a, UNKN, UNKN, UNKN, UNKN, // c_
+ UNKN, UNKN, UNKN, 0x84, UNKN, UNKN, UNKN, UNKN, 0xc9, UNKN, 0x7a, UNKN, 0x48, 0xd8, UNKN, 0x18, // d_
+ 0xe6, UNKN, UNKN, 0x68, UNKN, 0x29, UNKN, UNKN, 0xc4, 0x65, UNKN, UNKN, 0xa8, UNKN, 0x85, UNKN, // e_
+ UNKN, 0xc8, 0xd5, 0xe4, UNKN, 0x7d, 0x10, UNKN, UNKN, UNKN, 0x25, UNKN, UNKN, 0x1d, 0x64, UNKN, // f_
+
+ //_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f
+ UNKN, 0x99, 0xf0, UNKN, UNKN, UNKN, 0xae, UNKN, UNKN, UNKN, UNKN, 0x64, UNKN, UNKN, 0x2a, UNKN, // 0_
+ 0xb5, UNKN, 0xa6, UNKN, UNKN, 0x65, UNKN, 0xf8, UNKN, UNKN, UNKN, 0x58, UNKN, UNKN, 0xc8, UNKN, // 1_
+ 0x1a, UNKN, UNKN, UNKN, 0x09, 0x91, UNKN, 0xe0, UNKN, UNKN, UNKN, 0xad, UNKN, UNKN, UNKN, UNKN, // 2_
+ UNKN, 0xa4, 0xb0, UNKN, 0xd9, 0xe4, 0xd0, UNKN, UNKN, 0x5a, 0x2d, UNKN, UNKN, 0x4c, 0xa0, UNKN, // 3_
+ 0x85, UNKN, 0x49, UNKN, UNKN, UNKN, UNKN, UNKN, 0x88, UNKN, UNKN, 0xbd, 0x69, 0x95, UNKN, UNKN, // 4_
+ UNKN, 0xe9, UNKN, UNKN, UNKN, UNKN, UNKN, 0x80, 0x0d, UNKN, UNKN, 0x30, UNKN, UNKN, UNKN, 0x9d, // 5_
+ UNKN, UNKN, UNKN, 0x26, UNKN, 0xd5, 0x1d, UNKN, 0x4e, UNKN, 0xe8, UNKN, UNKN, UNKN, UNKN, 0x05, // 6_
+ 0xa5, UNKN, UNKN, UNKN, 0x68, UNKN, UNKN, 0xcd, UNKN, UNKN, UNKN, UNKN, UNKN, 0x25, UNKN, UNKN, // 7_
+ UNKN, UNKN, UNKN, 0xc9, UNKN, UNKN, UNKN, 0xa2, UNKN, UNKN, 0x45, UNKN, UNKN, 0xa8, UNKN, UNKN, // 8_
+ 0x9a, UNKN, 0xca, UNKN, UNKN, UNKN, UNKN, UNKN, 0xe6, UNKN, UNKN, UNKN, UNKN, UNKN, 0x60, 0x8d, // 9_
+ UNKN, UNKN, UNKN, UNKN, UNKN, 0xda, 0xee, 0xb2, 0x7d, UNKN, UNKN, 0x84, UNKN, UNKN, 0xaa, UNKN, // a_
+ 0x90, UNKN, UNKN, 0x6d, 0xb1, UNKN, UNKN, UNKN, UNKN, 0x78, UNKN, UNKN, 0x8e, UNKN, 0xc0, 0x40, // b_
+ UNKN, UNKN, 0x38, 0xc6, UNKN, UNKN, UNKN, UNKN, UNKN, 0xd8, UNKN, UNKN, 0x0a, UNKN, UNKN, 0xb9, // c_
+ UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xfa, UNKN, UNKN, UNKN, UNKN, 0x10, 0x20, // d_
+ UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xa9, UNKN, UNKN, UNKN, UNKN, 0xc5, UNKN, // e_
+ UNKN, 0x86, 0x29, 0x4a, UNKN, UNKN, 0x18, 0x98, UNKN, UNKN, UNKN, 0x9c, UNKN, 0x7a, UNKN, 0x48, // f_
+ };
+
+ uint8_t data {_maincpu->space(AS_PROGRAM).read_byte(offset)};
+ return decryption_tables[offset&3][data];
+}
+
+void powercrd_state::powercrd_opcodes_map(address_map &map)
+{
+ map(0x0000, 0xffff).r(FUNC(powercrd_state::powercrd_opcode_r));
+}
+
+void powercrd_state::powercrd(machine_config &config)
+{
+ fw2ndpal(config);
+
+ _maincpu = reinterpret_cast<cpu_device*>(config.device("maincpu"));
+ _maincpu->set_addrmap(AS_OPCODES, &powercrd_state::powercrd_opcodes_map);
+}
+
+class megacard_state : public funworld_state
+{
+public:
+ megacard_state(const machine_config &mconfig, device_type type, const char* tag)
+ : funworld_state(mconfig, type, tag)
+ {
+ }
+
+ void megacard(machine_config& config);
+
+private:
+ cpu_device* _maincpu {};
+ DECLARE_READ8_MEMBER(megacard_opcode_r);
+
+ void megacard_opcodes_map(address_map& map);
+};
+
+READ8_MEMBER(megacard_state::megacard_opcode_r)
+{
+ // all opcodes in the [c000, fc80) range are believed to be covered by these tables;
+ // errors could be lurking in the least used opcodes
+
+ constexpr uint8_t UNKN {0xfc};
+
+ constexpr std::array<std::array<uint8_t,256>,4> decryption_tables
+ {
+ //_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f
+ UNKN, 0x6c, UNKN, UNKN, UNKN, 0xfa, 0x38, UNKN, UNKN, 0x4c, 0xd8, UNKN, 0xe8, UNKN, 0xc5, UNKN, // 0_
+ UNKN, 0xa6, 0x91, UNKN, UNKN, UNKN, UNKN, 0x58, 0xa0, 0xe0, 0xb9, 0x4e, UNKN, UNKN, UNKN, 0x78, // 1_
+ 0xe9, 0xee, UNKN, 0xca, 0x85, UNKN, 0xe6, UNKN, UNKN, UNKN, 0xcd, UNKN, UNKN, UNKN, UNKN, UNKN, // 2_
+ UNKN, UNKN, UNKN, UNKN, 0x90, UNKN, UNKN, 0x64, UNKN, UNKN, 0x45, 0x60, UNKN, UNKN, 0x69, UNKN, // 3_
+ UNKN, UNKN, 0xea, 0xf8, 0x7a, UNKN, UNKN, 0x1a, UNKN, UNKN, UNKN, UNKN, UNKN, 0xb1, UNKN, 0x80, // 4_
+ UNKN, UNKN, 0x84, UNKN, UNKN, UNKN, UNKN, 0x49, UNKN, UNKN, 0x7c, UNKN, 0x20, 0x8a, 0xed, UNKN, // 5_
+ 0x8c, UNKN, UNKN, UNKN, 0x5a, UNKN, UNKN, UNKN, 0xa8, 0xa9, UNKN, 0x6d, 0xc9, 0x95, UNKN, 0xda, // 6_
+ 0xaa, 0xe4, UNKN, UNKN, UNKN, UNKN, 0x8e, 0xae, 0x3a, 0xc0, UNKN, 0xd5, 0x92, UNKN, UNKN, UNKN, // 7_
+ 0xc6, UNKN, UNKN, UNKN, UNKN, UNKN, 0x48, UNKN, UNKN, 0x86, 0x9c, UNKN, UNKN, 0xc8, UNKN, UNKN, // 8_
+ UNKN, 0x68, UNKN, UNKN, UNKN, UNKN, UNKN, 0xd0, 0xa2, UNKN, UNKN, UNKN, UNKN, 0x25, UNKN, 0xa5, // 9_
+ UNKN, 0x9d, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xbd, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xa4, // a_
+ UNKN, UNKN, UNKN, 0xb2, UNKN, 0x29, UNKN, 0x09, UNKN, UNKN, UNKN, 0xb0, UNKN, UNKN, 0xb5, UNKN, // b_
+ UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x0a, UNKN, UNKN, 0x7d, UNKN, 0xf0, UNKN, 0x00, // c_
+ UNKN, UNKN, UNKN, UNKN, 0x2d, UNKN, UNKN, UNKN, 0x4a, 0x88, 0x05, UNKN, UNKN, 0x10, 0xce, UNKN, // d_
+ UNKN, UNKN, 0xc4, UNKN, 0x18, UNKN, UNKN, UNKN, 0x99, 0xf9, UNKN, UNKN, UNKN, UNKN, UNKN, 0xdd, // e_
+ 0x11, UNKN, 0x26, UNKN, 0x65, 0x98, UNKN, 0xad, 0x2a, UNKN, UNKN, 0x8d, UNKN, UNKN, UNKN, UNKN, // f_
+
+ //_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f
+ UNKN, UNKN, UNKN, 0x18, UNKN, UNKN, UNKN, 0x8e, UNKN, UNKN, UNKN, UNKN, UNKN, 0xaa, 0xcd, 0x0a, // 0_
+ 0xe6, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xad, UNKN, UNKN, UNKN, UNKN, // 1_
+ UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x69, UNKN, 0xd0, UNKN, UNKN, UNKN, UNKN, UNKN, 0x2d, UNKN, // 2_
+ UNKN, 0x88, UNKN, UNKN, UNKN, 0x98, UNKN, 0x99, UNKN, 0xb1, UNKN, UNKN, 0x9c, 0x1a, UNKN, UNKN, // 3_
+ UNKN, 0x7a, 0xae, 0xa2, 0xca, 0xba, UNKN, 0x25, UNKN, UNKN, 0x10, UNKN, 0xea, 0x79, 0x8a, UNKN, // 4_
+ UNKN, 0x60, UNKN, UNKN, UNKN, UNKN, 0x84, 0xd8, 0xa9, UNKN, UNKN, UNKN, 0xe9, UNKN, 0xda, UNKN, // 5_
+ 0xc0, UNKN, UNKN, 0x3d, 0x8d, UNKN, UNKN, UNKN, UNKN, 0x68, UNKN, 0x92, UNKN, 0x48, UNKN, UNKN, // 6_
+ 0x9d, 0x49, 0x95, 0xc6, 0xb0, UNKN, 0x40, UNKN, UNKN, UNKN, 0x05, UNKN, UNKN, UNKN, UNKN, UNKN, // 7_
+ UNKN, 0x0d, UNKN, UNKN, UNKN, UNKN, 0xa4, UNKN, UNKN, 0x30, UNKN, 0x66, UNKN, UNKN, 0xa5, UNKN, // 8_
+ 0x64, UNKN, 0x29, UNKN, UNKN, 0x86, UNKN, 0xb2, UNKN, UNKN, UNKN, UNKN, UNKN, 0x2a, 0x6d, 0x3a, // 9_
+ 0x38, UNKN, UNKN, 0x91, UNKN, UNKN, UNKN, 0xbd, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xd5, UNKN, // a_
+ UNKN, UNKN, UNKN, UNKN, 0xb5, 0xf8, UNKN, UNKN, UNKN, 0xc5, UNKN, UNKN, UNKN, 0x09, UNKN, UNKN, // b_
+ UNKN, UNKN, UNKN, UNKN, 0x11, 0x90, 0x4c, UNKN, 0x85, UNKN, UNKN, UNKN, 0x4a, UNKN, UNKN, UNKN, // c_
+ UNKN, UNKN, 0x20, 0xb9, UNKN, UNKN, UNKN, UNKN, 0x00, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // d_
+ UNKN, 0x80, 0x65, UNKN, UNKN, 0xe8, 0xc9, UNKN, UNKN, UNKN, UNKN, UNKN, 0xee, 0xf0, UNKN, UNKN, // e_
+ UNKN, 0xa0, 0xc8, UNKN, UNKN, UNKN, 0xc4, UNKN, 0x4e, 0xe0, 0xa8, UNKN, 0x45, UNKN, UNKN, 0xa6, // f_
+
+ //_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f
+ UNKN, 0x86, UNKN, UNKN, 0xe6, 0xc9, UNKN, 0x1a, UNKN, 0xdd, 0x88, UNKN, UNKN, UNKN, UNKN, 0x8e, // 0_
+ UNKN, 0xe0, UNKN, UNKN, 0x4c, 0xd0, UNKN, 0x64, UNKN, 0xa4, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 1_
+ UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xee, UNKN, 0x74, UNKN, 0xa0, UNKN, 0xed, UNKN, 0xe9, // 2_
+ UNKN, 0xd9, UNKN, UNKN, UNKN, UNKN, 0x0a, UNKN, 0x49, UNKN, 0x1d, 0xa2, UNKN, 0x8d, UNKN, 0x00, // 3_
+ 0xa9, UNKN, UNKN, 0xea, UNKN, UNKN, UNKN, UNKN, UNKN, 0xf0, 0xfa, UNKN, UNKN, UNKN, UNKN, 0x84, // 4_
+ UNKN, UNKN, 0x38, UNKN, 0xbd, UNKN, 0x9d, 0x92, 0xb1, UNKN, 0x95, UNKN, 0xe8, 0x45, UNKN, UNKN, // 5_
+ UNKN, UNKN, 0xb5, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x85, UNKN, UNKN, // 6_
+ UNKN, UNKN, UNKN, UNKN, 0xa6, 0xa5, 0xe4, 0x09, UNKN, 0x29, UNKN, 0x5a, 0x90, UNKN, 0xc0, UNKN, // 7_
+ 0xca, UNKN, UNKN, UNKN, 0x18, UNKN, UNKN, UNKN, UNKN, 0x66, UNKN, UNKN, UNKN, 0x68, UNKN, UNKN, // 8_
+ 0x98, 0xb0, 0x26, 0xc4, UNKN, 0x2d, UNKN, UNKN, UNKN, UNKN, 0xc6, UNKN, UNKN, UNKN, 0xd8, UNKN, // 9_
+ UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x3d, UNKN, UNKN, UNKN, UNKN, UNKN, 0xaa, UNKN, UNKN, // a_
+ 0xce, 0x10, UNKN, 0x05, 0x80, 0x48, UNKN, UNKN, UNKN, 0xf8, 0x0d, UNKN, UNKN, UNKN, UNKN, UNKN, // b_
+ UNKN, UNKN, UNKN, UNKN, 0x91, 0xc5, UNKN, UNKN, UNKN, 0x9c, UNKN, 0x30, 0xc8, UNKN, UNKN, UNKN, // c_
+ 0x69, 0x60, 0x9a, 0xb2, UNKN, UNKN, 0x2a, UNKN, 0x65, UNKN, UNKN, UNKN, 0x25, UNKN, 0x79, 0x6a, // d_
+ UNKN, 0x20, 0xb9, UNKN, 0x3a, 0xd5, UNKN, 0x4a, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x99, 0xa8, // e_
+ UNKN, UNKN, UNKN, UNKN, 0xda, UNKN, UNKN, UNKN, UNKN, 0xcd, UNKN, 0x7a, 0xad, UNKN, UNKN, UNKN, // f_
+
+ //_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f
+ UNKN, UNKN, UNKN, 0x60, UNKN, UNKN, 0xb1, UNKN, UNKN, UNKN, 0x29, UNKN, 0x8e, 0x74, 0x9a, 0xea, // 0_
+ UNKN, 0x6d, UNKN, 0x92, 0xb5, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x7d, 0xb9, 0xa2, UNKN, 0x6a, // 1_
+ UNKN, UNKN, UNKN, 0xb0, 0xc4, UNKN, UNKN, 0x2d, UNKN, 0x79, 0x8a, UNKN, UNKN, UNKN, 0xa0, UNKN, // 2_
+ UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xa4, 0x1a, UNKN, 0xaa, 0x80, UNKN, UNKN, // 3_
+ UNKN, UNKN, 0x10, UNKN, 0x3a, UNKN, UNKN, UNKN, 0x8d, UNKN, UNKN, UNKN, UNKN, 0xf8, UNKN, 0x25, // 4_
+ UNKN, UNKN, 0x40, UNKN, 0x85, UNKN, 0x95, UNKN, UNKN, 0xcd, UNKN, UNKN, 0x4c, 0x98, UNKN, UNKN, // 5_
+ UNKN, 0x68, UNKN, 0xe9, 0x9e, 0x09, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x5a, 0xee, // 6_
+ UNKN, 0x86, UNKN, UNKN, UNKN, 0xd5, UNKN, 0xa5, 0x65, UNKN, UNKN, UNKN, UNKN, 0x4e, 0xe0, 0x90, // 7_
+ UNKN, UNKN, 0xc0, 0xce, UNKN, UNKN, UNKN, 0xad, UNKN, UNKN, UNKN, 0x88, UNKN, UNKN, UNKN, UNKN, // 8_
+ UNKN, 0xda, UNKN, UNKN, UNKN, 0xb2, UNKN, 0x7a, UNKN, UNKN, UNKN, UNKN, 0x91, UNKN, UNKN, 0xc5, // 9_
+ UNKN, UNKN, 0x05, 0xe6, UNKN, UNKN, 0x49, UNKN, UNKN, 0x0d, 0x9d, 0x4a, UNKN, UNKN, 0xc8, UNKN, // a_
+ UNKN, UNKN, UNKN, UNKN, 0x20, UNKN, 0x1d, UNKN, UNKN, 0xd0, UNKN, UNKN, 0xfa, UNKN, 0xbd, UNKN, // b_
+ UNKN, UNKN, UNKN, UNKN, 0x2a, UNKN, UNKN, 0x0a, UNKN, UNKN, 0xca, UNKN, 0x9c, 0x69, UNKN, UNKN, // c_
+ 0x00, 0xd8, 0x38, UNKN, UNKN, UNKN, 0xa6, UNKN, UNKN, UNKN, 0xc6, UNKN, UNKN, UNKN, UNKN, UNKN, // d_
+ UNKN, 0xc9, UNKN, UNKN, UNKN, UNKN, 0x64, 0x48, UNKN, UNKN, 0xa8, UNKN, 0xe8, UNKN, UNKN, UNKN, // e_
+ UNKN, UNKN, 0xa9, UNKN, 0xf0, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x18, UNKN, UNKN, UNKN, UNKN, // f_
+ };
+
+ uint8_t data {_maincpu->space(AS_PROGRAM).read_byte(offset)};
+ return decryption_tables[offset&3][data];
+}
+
+void megacard_state::megacard_opcodes_map(address_map &map)
+{
+ map(0x0000, 0xffff).r(FUNC(megacard_state::megacard_opcode_r));
+}
+
+void megacard_state::megacard(machine_config &config)
+{
+ fw2ndpal(config);
+
+ _maincpu = reinterpret_cast<cpu_device*>(config.device("maincpu"));
+ _maincpu->set_addrmap(AS_OPCODES, &megacard_state::megacard_opcodes_map);
+}
+
+class jokercrd_state : public funworld_state
+{
+public:
+ jokercrd_state(const machine_config &mconfig, device_type type, const char* tag)
+ : funworld_state(mconfig, type, tag)
+ {
+ }
+
+ void jokercrd(machine_config& config);
+
+private:
+ cpu_device* _maincpu {};
+ DECLARE_READ8_MEMBER(jokercrd_opcode_r);
+
+ void jokercrd_opcodes_map(address_map& map);
+};
+
+READ8_MEMBER(jokercrd_state::jokercrd_opcode_r)
+{
+ // even when errors could be lurking in the least used opcodes,
+ // all of them in the [8050,b369) & [c000, f063) ranges are believed
+ // to be covered by these tables, with the exception of the one @c0f1:
+
+ // c0da: a6 6a ldx $6a
+ // c0dc: ad 5c 00 lda $005c
+ // c0df: 29 3f and #$3f
+ // c0e1: 85 70 sta $70
+ // c0e3: 20 fa c0 jsr $c0fa
+ // c0e6: a5 70 lda $70
+ // c0e8: 9d 33 02 sta $0233, x
+ // c0eb: a2 00 ldx #$00
+ // c0ed: e4 6a cpx $6a
+ // c0ef: f0 08 beq $c0f9
+ // c0f1: XX 33 02 nop #$33 #$02 [YYY $0233, x]
+ // c0f4: f0 e4 beq $c0da
+ // c0f6: e8 inx
+ // c0f7: 80 f4 bra $c0ed
+ // c0f9: 60 rts
+ //
+ // c0fa: ad 4b 07 lda $074b
+ // c0fd: 0d 4c 07 ora $074c
+ // c100: d0 01 bne $c103
+ // c102: 60 rts
+ // c103: a5 70 lda $70
+ // c105: 29 30 and #$30
+ // c107: 09 01 ora #$01
+ // c109: 85 70 sta $70
+ // c10b: 60 rts
+
+ // it should be noted, however, that the subroutine @c0da seems to be called just from here:
+ // c044: 64 6a stz $6a
+ // c046: 20 da c0 jsr $c0da
+ // and, if no interrupt is messing with the accesed data, the STZ @c044 should make the BEQ @c0ef
+ // become an inconditional jump, converting the opcode @c0f1 in dead code
+
+
+ constexpr uint8_t UNKN {0xfc};
+
+ constexpr std::array<std::array<uint8_t,256>,4> decryption_tables
+ {
+ //_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f
+ UNKN, UNKN, UNKN, 0x3d, 0xe0, UNKN, UNKN, 0xb0, UNKN, 0xa0, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 0_
+ UNKN, UNKN, 0x4a, 0x65, 0x18, 0x64, 0xad, UNKN, 0x90, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 1_
+ UNKN, UNKN, 0x49, UNKN, 0xa8, 0x8c, 0x20, UNKN, UNKN, 0xf8, UNKN, UNKN, 0xe6, UNKN, 0x88, UNKN, // 2_
+ UNKN, UNKN, UNKN, UNKN, 0xb2, UNKN, UNKN, UNKN, UNKN, 0x58, 0x38, 0x45, UNKN, UNKN, UNKN, UNKN, // 3_
+ UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xd5, 0xa5, 0xa9, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 4_
+ UNKN, UNKN, UNKN, UNKN, 0xda, 0xa2, UNKN, 0x4e, 0x1a, UNKN, 0xe4, UNKN, UNKN, UNKN, 0x0c, 0x98, // 5_
+ 0xa6, UNKN, UNKN, UNKN, 0x9c, 0xfa, UNKN, 0xbd, UNKN, 0xae, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 6_
+ UNKN, UNKN, 0xc0, 0xc5, UNKN, UNKN, UNKN, UNKN, UNKN, 0xcd, UNKN, UNKN, UNKN, 0x8a, UNKN, 0x80, // 7_
+ UNKN, UNKN, 0x95, UNKN, UNKN, UNKN, UNKN, UNKN, 0x8e, UNKN, UNKN, UNKN, UNKN, 0x68, UNKN, UNKN, // 8_
+ 0xb1, UNKN, UNKN, UNKN, UNKN, 0xd0, 0x0d, 0xc9, UNKN, UNKN, UNKN, UNKN, 0x29, 0x3a, 0xc8, 0x8d, // 9_
+ 0xc6, 0xee, 0x25, UNKN, 0x05, 0x6e, UNKN, 0x2a, UNKN, 0x85, UNKN, UNKN, 0xd8, UNKN, 0xce, UNKN, // a_
+ UNKN, UNKN, UNKN, 0xe9, 0xc4, 0xe8, UNKN, UNKN, 0x99, 0x6a, 0x0a, UNKN, 0x84, UNKN, UNKN, UNKN, // b_
+ UNKN, UNKN, UNKN, 0x9d, 0x2d, 0x10, UNKN, UNKN, UNKN, UNKN, UNKN, 0xaa, UNKN, UNKN, 0x11, UNKN, // c_
+ UNKN, 0xb9, 0x86, UNKN, 0xca, UNKN, UNKN, UNKN, UNKN, UNKN, 0x7a, UNKN, 0xf0, 0x09, 0x4c, UNKN, // d_
+ 0x60, 0x78, UNKN, UNKN, UNKN, 0x48, 0x5a, UNKN, UNKN, UNKN, 0x79, UNKN, UNKN, UNKN, UNKN, 0xba, // e_
+ UNKN, UNKN, 0x6d, 0x92, UNKN, 0x26, UNKN, UNKN, 0xb5, UNKN, 0x69, UNKN, UNKN, 0xa4, UNKN, 0x1d, // f_
+
+ //_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f
+ UNKN, UNKN, UNKN, UNKN, 0x48, UNKN, UNKN, 0x0c, UNKN, 0x60, 0x6d, 0x20, 0xda, UNKN, 0xf0, UNKN, // 0_
+ UNKN, 0xcd, 0x95, UNKN, UNKN, 0xae, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x8e, UNKN, 0x29, UNKN, // 1_
+ 0x90, UNKN, UNKN, UNKN, 0x69, 0xb5, UNKN, UNKN, UNKN, UNKN, 0xd0, 0xad, UNKN, UNKN, UNKN, 0x9a, // 2_
+ 0xb6, 0x40, UNKN, 0xd5, 0xfa, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xa4, UNKN, 0x88, UNKN, // 3_
+ UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x2a, UNKN, UNKN, UNKN, 0xa2, UNKN, UNKN, UNKN, UNKN, UNKN, // 4_
+ 0xee, UNKN, UNKN, UNKN, 0x64, UNKN, 0xb0, 0x9d, UNKN, UNKN, UNKN, 0x80, UNKN, 0xf8, 0xe8, UNKN, // 5_
+ UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x91, UNKN, 0xb9, 0x8a, UNKN, UNKN, UNKN, 0x10, UNKN, // 6_
+ 0x4a, UNKN, UNKN, 0xc8, 0x9c, 0x4e, UNKN, UNKN, UNKN, UNKN, 0xb2, 0x85, 0x45, 0xc9, UNKN, UNKN, // 7_
+ 0x1a, UNKN, UNKN, 0xe9, UNKN, UNKN, UNKN, UNKN, UNKN, 0xca, UNKN, 0xc6, UNKN, 0xb1, UNKN, UNKN, // 8_
+ 0x1d, UNKN, 0xa8, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xc5, // 9_
+ 0xe0, UNKN, 0xa0, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x30, UNKN, 0x0d, UNKN, 0x8d, // a_
+ UNKN, 0x86, UNKN, UNKN, 0xd9, 0xbd, UNKN, UNKN, 0x05, 0xaa, UNKN, 0x38, UNKN, 0x18, 0xe4, UNKN, // b_
+ UNKN, 0xa6, UNKN, 0xa5, 0xc0, 0x2d, UNKN, UNKN, UNKN, UNKN, UNKN, 0x4c, 0x84, UNKN, 0x6e, UNKN, // c_
+ UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x19, 0x65, UNKN, UNKN, UNKN, 0xce, 0x7a, UNKN, 0x3a, // d_
+ UNKN, 0x7d, UNKN, 0x0a, 0x49, UNKN, UNKN, UNKN, 0xe6, 0xd8, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // e_
+ UNKN, UNKN, UNKN, UNKN, 0x09, 0xa9, 0x25, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x5a, UNKN, 0x68, // f_
+
+ //_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f
+ UNKN, 0x20, UNKN, UNKN, UNKN, 0x8e, UNKN, UNKN, UNKN, 0xb0, 0x85, 0x3d, UNKN, 0x86, UNKN, UNKN, // 0_
+ 0x18, UNKN, UNKN, UNKN, 0x8a, 0xad, 0x79, 0x98, UNKN, UNKN, 0xc0, UNKN, 0x30, UNKN, 0x10, UNKN, // 1_
+ UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xe4, UNKN, UNKN, UNKN, 0x29, UNKN, UNKN, UNKN, UNKN, // 2_
+ 0x9e, 0x6d, 0xa6, UNKN, 0xc9, 0x6e, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 3_
+ UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xaa, UNKN, 0x9c, 0x09, UNKN, UNKN, UNKN, 0xfa, UNKN, // 4_
+ UNKN, 0x69, UNKN, UNKN, 0x2d, UNKN, UNKN, UNKN, UNKN, UNKN, 0xc4, UNKN, 0x1a, 0x4c, 0x5a, UNKN, // 5_
+ UNKN, UNKN, 0xe9, UNKN, 0xb1, UNKN, 0x0c, 0xee, 0xda, 0xb2, 0xce, UNKN, 0x74, UNKN, UNKN, UNKN, // 6_
+ 0x7d, 0x0d, 0x48, UNKN, UNKN, UNKN, 0xf8, 0xd8, UNKN, UNKN, 0x0a, UNKN, UNKN, 0x45, 0xc6, UNKN, // 7_
+ UNKN, UNKN, UNKN, UNKN, UNKN, 0x26, UNKN, UNKN, UNKN, 0xc5, UNKN, UNKN, UNKN, 0xae, UNKN, UNKN, // 8_
+ 0xa9, UNKN, 0x90, 0x3a, UNKN, UNKN, 0x6c, UNKN, 0x64, UNKN, UNKN, 0xd5, UNKN, UNKN, UNKN, UNKN, // 9_
+ UNKN, 0x7a, UNKN, 0x05, 0xa8, UNKN, UNKN, 0x60, UNKN, UNKN, 0xa4, 0x8d, 0x2a, UNKN, UNKN, UNKN, // a_
+ UNKN, UNKN, UNKN, UNKN, 0xa0, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x92, 0x66, // b_
+ UNKN, UNKN, 0xd0, 0xf0, UNKN, UNKN, 0x38, 0xbd, 0xa2, UNKN, 0xed, 0x9d, 0x80, UNKN, 0xa5, UNKN, // c_
+ UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x99, UNKN, 0x88, UNKN, 0xcd, UNKN, 0xe8, // d_
+ 0xca, 0xb5, 0x49, 0x68, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xe6, 0xe0, 0x4a, UNKN, // e_
+ UNKN, UNKN, UNKN, 0xc8, UNKN, 0xb9, 0x91, UNKN, UNKN, UNKN, UNKN, 0x65, 0x95, UNKN, UNKN, UNKN, // f_
+
+ //_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f
+ 0x65, UNKN, UNKN, UNKN, 0x30, UNKN, UNKN, UNKN, 0x8e, UNKN, UNKN, 0xda, 0x2d, 0xc4, UNKN, 0x68, // 0_
+ UNKN, 0xa2, UNKN, UNKN, 0x2a, 0xa6, UNKN, UNKN, UNKN, 0x86, UNKN, UNKN, 0x60, UNKN, 0xe6, 0xa4, // 1_
+ UNKN, 0x84, UNKN, UNKN, 0xbd, UNKN, UNKN, UNKN, UNKN, UNKN, 0xce, 0xe4, 0xf8, 0xa0, UNKN, 0x8d, // 2_
+ UNKN, 0xcd, UNKN, UNKN, UNKN, 0x88, 0x4a, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 3_
+ 0xd8, UNKN, UNKN, UNKN, 0x40, 0x11, UNKN, UNKN, 0xaa, 0x79, UNKN, 0x98, UNKN, 0x85, UNKN, UNKN, // 4_
+ 0x9a, 0xc6, UNKN, UNKN, 0x74, UNKN, UNKN, UNKN, UNKN, 0x95, 0xdd, UNKN, UNKN, 0x6d, UNKN, UNKN, // 5_
+ 0x8a, 0x6e, UNKN, UNKN, 0x18, 0xc5, UNKN, 0xf9, UNKN, 0xb0, 0x7a, UNKN, UNKN, UNKN, UNKN, 0xc0, // 6_
+ 0x99, UNKN, UNKN, 0x10, 0x90, 0x38, 0x09, UNKN, UNKN, UNKN, 0xe0, UNKN, UNKN, UNKN, UNKN, UNKN, // 7_
+ UNKN, UNKN, UNKN, 0xb5, UNKN, 0x4c, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xfa, UNKN, UNKN, // 8_
+ UNKN, UNKN, 0x6a, 0x29, UNKN, UNKN, 0x5a, 0xae, UNKN, 0x3a, UNKN, 0x9c, UNKN, 0x0d, 0x49, 0xee, // 9_
+ UNKN, UNKN, UNKN, UNKN, 0xa5, 0x69, 0xf0, UNKN, 0x80, UNKN, 0xc8, UNKN, UNKN, UNKN, 0xb9, UNKN, // a_
+ 0x1a, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x0c, UNKN, UNKN, UNKN, UNKN, UNKN, // b_
+ UNKN, UNKN, UNKN, UNKN, 0x64, UNKN, UNKN, 0xb2, 0x9d, UNKN, UNKN, 0xca, UNKN, UNKN, 0x0a, 0x05, // c_
+ UNKN, UNKN, UNKN, 0x91, UNKN, UNKN, UNKN, 0x92, UNKN, UNKN, UNKN, 0xed, UNKN, UNKN, UNKN, UNKN, // d_
+ UNKN, 0xec, 0x20, UNKN, 0xad, 0xd0, UNKN, 0x3d, UNKN, 0xb1, 0x6c, 0x66, UNKN, 0x4e, UNKN, 0xd5, // e_
+ 0xe9, UNKN, UNKN, 0xa9, UNKN, UNKN, 0xe8, UNKN, UNKN, 0xc9, 0xa8, UNKN, UNKN, 0x48, UNKN, UNKN, // f_
+ };
+
+ uint8_t data {_maincpu->space(AS_PROGRAM).read_byte(offset)};
+ return decryption_tables[offset&3][data];
+}
+
+void jokercrd_state::jokercrd_opcodes_map(address_map &map)
+{
+ map(0x0000, 0xffff).r(FUNC(jokercrd_state::jokercrd_opcode_r));
+}
+
+void jokercrd_state::jokercrd(machine_config &config)
+{
+ fw2ndpal(config);
+
+ _maincpu = reinterpret_cast<cpu_device*>(config.device("maincpu"));
+ _maincpu->set_addrmap(AS_OPCODES, &jokercrd_state::jokercrd_opcodes_map);
+}
+
+
/*************************
* Rom Load *
@@ -4429,9 +5006,9 @@ ROM_START( pool10e )
ROM_LOAD( "am27s29.u25", 0x0000, 0x0200, CRC(2c315cbf) SHA1(f3f91329f2b8388decf26a050f8fb7da38694218) )
ROM_REGION( 0x3000, "plds", 0 )
- ROM_LOAD( "palce16v8h.u5", 0x0000, 0x0892, NO_DUMP ) /* read protected */
- ROM_LOAD( "palce20v8h.u22", 0x1000, 0x0a92, NO_DUMP ) /* read protected */
- ROM_LOAD( "palce20v8h.u23", 0x2000, 0x0a92, NO_DUMP ) /* read protected */
+ ROM_LOAD( "palce16v8h.u5", 0x0000, 0x0892, BAD_DUMP CRC(123d539a) SHA1(cccf0cbae3175b091a998eedf4aa44a55b679400) ) /* read protected */
+ ROM_LOAD( "palce20v8h.u22", 0x1000, 0x0a92, BAD_DUMP CRC(ba2a021f) SHA1(e9c5970f80c7446c91282d53cfe97c92353dce7d) ) /* read protected */
+ ROM_LOAD( "palce20v8h.u23", 0x2000, 0x0a92, BAD_DUMP CRC(ba2a021f) SHA1(e9c5970f80c7446c91282d53cfe97c92353dce7d) ) /* read protected */
ROM_END
@@ -6064,14 +6641,32 @@ ROM_START( saloon )
ROM_LOAD( "1s.bin", 0x8000, 0x8000, CRC(66938330) SHA1(09118d607eff7121472db7d2cc24079e063dc7cf) )
ROM_REGION( 0x10000, "gfx1", 0 )
- ROM_LOAD( "2s.bin", 0x0000, 0x8000, CRC(39a792d5) SHA1(45c956a4a33587238a24eed602039115db1bb4b6) )
- ROM_LOAD( "3s.bin", 0x8000, 0x8000, CRC(babc0964) SHA1(f084465cc34ea7ac19091d3e75ef7d55c48273ae) )
+ ROM_LOAD( "3s.bin", 0x0000, 0x8000, CRC(babc0964) SHA1(f084465cc34ea7ac19091d3e75ef7d55c48273ae) )
+ ROM_LOAD( "2s.bin", 0x8000, 0x8000, CRC(39a792d5) SHA1(45c956a4a33587238a24eed602039115db1bb4b6) )
/* looks strange */
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "82s147_saloon.bin", 0x0000, 0x0200, CRC(f424ccc1) SHA1(6df1215f58cca786e9f0ea4bf35407cf7fe21d83) )
+
+ ROM_REGION( 0x0100, "i2cmem", 0 )
+ ROM_LOAD( "saloon_i2c.bin", 0x0000, 0x0100, CRC(57e9ce5a) SHA1(3a8420a8ed50faf31a30c01f9438f1df95e5789a) )
ROM_END
+ROM_START( nevadafw )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "1s.bin", 0x8000, 0x8000, CRC(66938330) SHA1(09118d607eff7121472db7d2cc24079e063dc7cf) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "3s.bin", 0x0000, 0x8000, CRC(babc0964) SHA1(f084465cc34ea7ac19091d3e75ef7d55c48273ae) )
+ ROM_LOAD( "2s.bin", 0x8000, 0x8000, CRC(39a792d5) SHA1(45c956a4a33587238a24eed602039115db1bb4b6) )
+
+ /* looks strange */
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147_saloon.bin", 0x0000, 0x0200, CRC(f424ccc1) SHA1(6df1215f58cca786e9f0ea4bf35407cf7fe21d83) )
+
+ ROM_REGION( 0x0100, "i2cmem", 0 )
+ ROM_LOAD( "nevada_i2c.bin", 0x0000, 0x0100, CRC(cdb519db) SHA1(b7781cebee3c8f788a78f8fec9314ae5af513514) )
+ROM_END
/**** Fun World Quiz ****
@@ -6480,9 +7075,32 @@ ROM_START( fw_a0_1 )
ROM_END
/*
- Joker Card
+ Joker Card / Multi Card
Funworld.
+ This game is running in a derivative hardware with epoxy CPU brick.
+ CPU is a 65C02, with two 5565 RAMs and one 27128 ROM.
+ Also there are present some PLD and logic. (see above).
+
+ The main program is inside the battery backed RAM, and need to be dumped.
+ These RAMs are connected to the mainboard battery, so once the Brick is unplugged,
+ the battery stops to feed the RAM and the program just vanish.
+
+ From factory, they used the central connector to plug a module with the game program,
+ and then the code inside the ROM check for offset $4000 onward if the module is
+ present through some sort of checksum. If the module is present, the code will
+ copy the range 4000-7fff (the game program inside the external module) to the
+ 8000-bfff location, where is the battery backed RAM inside the brick.
+
+ We need to find a new working board and reverse the central connector, to construct
+ some interface that allows us to dump the content of the internal battery backed RAM.
+
+ For debug purposes, we plugged an external game code from another similar game, that
+ matches all calls from the original ROM code. We suspect is the same code with different
+ language (English instead German). With this external code the game is completely playable.
+
+ ----
+
CPU epoxy brick marked "76AF".
Epoxy Brick contents:
@@ -6495,6 +7113,7 @@ ROM_END
- LOGIC: 1x HD74HC241P.
1x M74LS245P.
1x SN74LS139N.
+
*/
ROM_START( jokcrdep )
ROM_REGION( 0x10000, "maincpu", 0 )
@@ -6504,6 +7123,12 @@ ROM_START( jokcrdep )
ROM_LOAD( "200_zg_2.bin", 0x0000, 0x8000, CRC(ba994fc3) SHA1(95d2a802c38d7249f10eb2bbe46edfb9b14b6faa) )
ROM_LOAD( "200_zg_1.bin", 0x8000, 0x8000, CRC(367db105) SHA1(400b82dc9e0be4c17a02add009aab3c43dd901f8) )
+ ROM_REGION( 0x0800, "nvram", 0 )
+ ROM_LOAD( "joker_nvram.bin", 0x0000, 0x0800, CRC(92019972) SHA1(E6D1E231CD2CE27E718ED9482DBE9DDC8612EB67) ) // Default NVRAM.
+
+ ROM_REGION( 0x4000, "nvram1", 0 )
+ ROM_LOAD( "e-0.bin", 0x0000, 0x4000, BAD_DUMP CRC(8FD42F3B) SHA1(208209761DE046189070B88AD4340C8D7FF55F1F) ) // Internal suicide program. Taken from Novo Play.
+
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "sn82s147n.bin", 0x0000, 0x0200, CRC(f990a9ae) SHA1(f7133798b5f20dd5b8dbe5d1a6876341710d93a8) )
ROM_END
@@ -6637,8 +7262,8 @@ void funworld_state::init_saloon()
Low 11 bits of address are scrambled.
Color:
- Still trying....
-
+ Data has bits 2-3-5-6-7 scrambled.
+ Address has the 8 lower bits scrambled.
*************************************************/
{
@@ -6652,6 +7277,9 @@ void funworld_state::init_saloon()
uint8_t *prom = memregion("proms")->base();
int sizep = memregion("proms")->bytes();
+ popmessage(" Please: Start with <2> and <Z> buttons pressed to run system properly");
+
+
/*****************************
* Program ROM decryption *
*****************************/
@@ -6674,6 +7302,7 @@ void funworld_state::init_saloon()
int a = ((i & 0xff00) | bitswap<8>(i & 0xff, 2, 0, 1, 3, 4, 5, 6, 7));
rom[a] = buffer[i];
}
+
}
@@ -6717,74 +7346,12 @@ void funworld_state::init_saloon()
}
m_palette->update();
-}
-void funworld_state::init_multiwin()
-/*****************************************************
+ // inversion for i2c clock generation in i2c_rx routine
+ rom[0xbf23] = 0x60; // ex 70h
+ rom[0xbf2a] = 0x70; // ex 60h
- This only decrypt the text strings.
- Need more work to get the opcodes properly decrypted
-
-******************************************************/
-{
- uint8_t *ROM = memregion("maincpu")->base();
- for (int x = 0x8000; x < 0x10000; x++)
- {
- ROM[x] = ROM[x] ^ 0x91;
- ROM[x] = bitswap<8>(ROM[x],5,6,7,2,3,0,1,4);
-
- uint8_t code = ROM[x];
-
- /* decrypt code here */
- ROM[x+0x10000] = code;
- }
-}
-
-
-void funworld_state::init_royalcdc()
-{
-/*****************************************************
-
- This only decrypt the text strings.
- The opcode encryption seems to be conditional, and
- bits of the XOR (and bitswap?) can be turned on and
- off, possibly depending on the address
-
-******************************************************/
-
- uint8_t *ROM = memregion("maincpu")->base();
- for (int x = 0x8000; x < 0x10000; x++)
- {
- ROM[x] = ROM[x] ^ 0x22;
- // this seems correct for the data, plaintext decrypts fine
- ROM[x] = bitswap<8>(ROM[x],2,6,7,4,3,1,5,0);
-
- // the code uses different encryption, there are conflicts here
- // so it's probably address based
- uint8_t code = ROM[x];
- if (code==0x12) code = 0x10; // ^0x02
- else if (code==0x1a) code = 0x18; // ^0x02
- else if (code==0x20) code = 0xa2; // ^0x82
- else if (code==0x26) code = 0xa2; // ^0x84
- else if (code==0x39) code = 0xbd; // ^0x84
- else if (code==0x5a) code = 0x58; // ^0x02
- else if (code==0x5c) code = 0xd8; // ^0x84
- else if (code==0x84) code = 0xa2; // ^0x26
- else if (code==0x8f) code = 0xa9; // ^0x26
- else if (code==0xaf) code = 0xa9; // ^0x06
- else if (code==0xa2) code = 0x80; // ^0x22
- else if (code==0xa3) code = 0x85; // ^0x26
- else if (code==0xa8) code = 0x8e; // ^0x26
- else if (code==0xa9) code = 0x8d; // ^0x24
- else if (code==0xbb) code = 0xbd; // ^0x06
- else if (code==0xc8) code = 0xca; // ^0x02
- else if (code==0xc6) code = 0xe0; // ^0x26
- else if (code==0xce) code = 0xe8; // ^0x26
- else if (code==0xf4) code = 0xd0; // ^0x24
-
- ROM[x+0x10000] = code;
- }
}
@@ -7239,7 +7806,7 @@ GAMEL( 1991, royalcrdc, royalcrd, royalcd2, royalcrd, funworld_state, empty_ini
GAMEL( 1991, royalcrdd, royalcrd, royalcd1, royalcrd, funworld_state, empty_init, ROT0, "TAB Austria", "Royal Card (Austrian, set 5)", 0, layout_royalcrd )
GAMEL( 1991, royalcrde, royalcrd, royalcd1, royalcrd, funworld_state, empty_init, ROT0, "TAB Austria", "Royal Card (Austrian, set 6)", 0, layout_jollycrd )
GAMEL( 1991, royalcrdt, royalcrd, royalcd1, royalcrd, funworld_state, empty_init, ROT0, "TAB Austria", "Royal Card (TAB original)", 0, layout_jollycrd )
-GAME( 1991, royalcrdf, royalcrd, royalcd1, royalcrd, funworld_state, init_royalcdc, ROT0, "Evona Electronic","Royal Card (Slovak, encrypted)", MACHINE_NOT_WORKING )
+GAME( 1991, royalcrdf, royalcrd, royalcrdf,royalcrd, royalcrdf_state,driver_init, ROT0, "Evona Electronic","Royal Card (Slovak, encrypted)", MACHINE_NOT_WORKING )
GAMEL( 1990, royalcrdg, royalcrd, royalcd1, royalcrd, funworld_state, empty_init, ROT0, "bootleg", "Royal Card (Austrian, set 7, CMC C1030 HW)", 0, layout_jollycrd ) // big CPLD
GAMEL( 1991, royalcrdh, royalcrd, royalcd2, royalcrd, funworld_state, empty_init, ROT0, "TAB Austria", "Royal Card (Austrian, set 8)", 0, layout_jollycrd )
GAMEL( 1991, royalcdfr, royalcrd, royalcd1, royalcrd, funworld_state, empty_init, ROT0, "TAB Austria", "Royal Card (French)", 0, layout_jollycrd )
@@ -7270,11 +7837,12 @@ GAMEL( 198?, jolyjokrb, jolyjokr, fw1stpal, funworld, funworld_state, empty_ini
GAMEL( 198?, jolyjokrc, jolyjokr, fw1stpal, funworld, funworld_state, empty_init, ROT0, "Apple Time", "Jolly Joker (Apple Time)", MACHINE_NOT_WORKING, layout_jollycrd ) // bad program ROM...
// Encrypted games...
-GAME( 1992, multiwin, 0, fw1stpal, funworld, funworld_state, init_multiwin, ROT0, "Fun World", "Multi Win (Ver.0167, encrypted)", MACHINE_NOT_WORKING )
-GAME( 1993, powercrd, 0, fw2ndpal, funworld, funworld_state, empty_init, ROT0, "Fun World", "Power Card (Ver 0263, encrypted)", MACHINE_NOT_WORKING ) // clone of Bonus Card.
-GAME( 1993, megacard, 0, fw2ndpal, funworld, funworld_state, empty_init, ROT0, "Fun World", "Mega Card (Ver.0210, encrypted)", MACHINE_NOT_WORKING )
-GAME( 1993, jokercrd, 0, fw2ndpal, funworld, funworld_state, empty_init, ROT0, "Vesely Svet", "Joker Card (Ver.A267BC, encrypted)", MACHINE_NOT_WORKING )
-GAME( 198?, saloon, 0, saloon, saloon, funworld_state, init_saloon, ROT0, "<unknown>", "Saloon (French, encrypted)", MACHINE_NOT_WORKING )
+GAME( 1992, multiwin, 0, multiwin, funworld, multiwin_state, driver_init, ROT0, "Fun World", "Multi Win (Ver.0167, encrypted)", MACHINE_NOT_WORKING)
+GAME( 1993, powercrd, 0, powercrd, funworld, powercrd_state, empty_init, ROT0, "Fun World", "Power Card (Ver 0263, encrypted)", MACHINE_NOT_WORKING ) // clone of Bonus Card.
+GAME( 1993, megacard, 0, megacard, funworld, megacard_state, empty_init, ROT0, "Fun World", "Mega Card (Ver.0210, encrypted)", MACHINE_NOT_WORKING )
+GAME( 1993, jokercrd, 0, jokercrd, funworld, jokercrd_state, empty_init, ROT0, "Vesely Svet", "Joker Card (Ver.A267BC, encrypted)", MACHINE_NOT_WORKING )
+GAME( 198?, saloon, 0, saloon, saloon, funworld_state, init_saloon, ROT0, "<unknown>", "Saloon (French, encrypted)", 0)
+GAME( 198?, nevadafw, 0, saloon, saloon, funworld_state, init_saloon, ROT0, "<unknown>", "Nevada (French, encrypted)", 0)
// Encrypted TAB blue PCB...
GAMEL( 199?, jolycdit, jollycrd, cuoreuno, jolycdit, funworld_state, init_tabblue, ROT0, "bootleg", "Jolly Card (Italian, blue TAB board, encrypted)", 0, layout_royalcrd )
@@ -7291,15 +7859,14 @@ GAME( 199?, mongolnw, 0, royalcd1, royalcrd, funworld_state, init_mong
GAME( 199?, soccernw, 0, royalcd1, royalcrd, funworld_state, init_soccernw, ROT0, "<unknown>", "Soccer New (Italian)", MACHINE_UNEMULATED_PROTECTION )
// Other games...
-GAME( 198?, funquiz, 0, funquiz, funquiz, funworld_state, empty_init, ROT0, "Fun World", "Fun World Quiz (Austrian)", 0 )
-GAMEL( 1986, novoplay, 0, fw2ndpal, novoplay, funworld_state, empty_init, ROT0, "Admiral/Novomatic","Novo Play Multi Card / Club Card", 0, layout_novoplay )
-GAME( 1991, intrgmes, 0, intrgmes, funworld, funworld_state, empty_init, ROT0, "Inter Games", "unknown Inter Games poker", MACHINE_NOT_WORKING )
-GAMEL( 1985, fw_a7_11, 0, fw_brick_2, funworld, funworld_state, empty_init, ROT0, "Fun World", "unknown Fun World A7-11 game 1", MACHINE_NOT_WORKING, layout_jollycrd )
-GAMEL( 1985, fw_a7_11a, fw_a7_11, fw_brick_1, funworld, funworld_state, empty_init, ROT0, "Fun World", "unknown Fun World A7-11 game 2", MACHINE_NOT_WORKING, layout_jollycrd )
-GAMEL( 1991, fw_a0_1, 0, fw_brick_2, funworld, funworld_state, empty_init, ROT0, "Fun World", "unknown Fun World A0-1 game", MACHINE_NOT_WORKING, layout_jollycrd )
-GAMEL( 1991, jokcrdep, 0, fw_brick_2, funworld, funworld_state, empty_init, ROT0, "Fun World", "Joker Card (Epoxy brick CPU)" , MACHINE_NOT_WORKING, layout_jollycrd )
+GAME( 198?, funquiz, 0, funquiz, funquiz, funworld_state, empty_init, ROT0, "Fun World", "Fun World Quiz (Austrian)", 0 )
+GAMEL( 1986, novoplay, 0, fw2ndpal, novoplay, funworld_state, empty_init, ROT0, "Admiral/Novomatic","Novo Play Multi Card / Club Card", 0, layout_novoplay )
+GAME( 1991, intrgmes, 0, intrgmes, funworld, funworld_state, empty_init, ROT0, "Inter Games", "unknown Inter Games poker", MACHINE_NOT_WORKING )
+GAMEL( 1985, fw_a7_11, 0, fw_brick_2, fw_brick1, funworld_state, empty_init, ROT0, "Fun World", "unknown Fun World A7-11 game 1", MACHINE_NOT_WORKING, layout_jollycrd )
+GAMEL( 1985, fw_a7_11a, fw_a7_11, fw_brick_2, fw_brick1, funworld_state, empty_init, ROT0, "Fun World", "unknown Fun World A7-11 game 2", MACHINE_NOT_WORKING, layout_jollycrd )
+GAMEL( 1991, fw_a0_1, 0, fw_brick_2, fw_brick1, funworld_state, empty_init, ROT0, "Fun World", "unknown Fun World A0-1 game", MACHINE_NOT_WORKING, layout_jollycrd )
+GAMEL( 1991, jokcrdep, 0, fw_brick_2, fw_brick1, funworld_state, empty_init, ROT0, "Fun World", "Joker Card / Multi Card (Epoxy brick CPU)", MACHINE_NOT_WORKING, layout_jollycrd )
// These are 2-in-1 stealth boards, they can run the Poker game, or, using completely separate hardware on the same PCB, a NES / MSX Multigames!
GAMEL( 1991, royalcrd_nes, royalcrd, royalcd2, royalcrd, funworld_state, empty_init, ROT0, "bootleg", "Royal Card (stealth with NES multigame)", MACHINE_NOT_WORKING, layout_jollycrd )
GAMEL( 1991, royalcrd_msx, royalcrd, royalcd2, royalcrd, funworld_state, empty_init, ROT0, "bootleg", "Royal Card (stealth with MSX multigame)", MACHINE_NOT_WORKING, layout_jollycrd )
-
diff --git a/src/mame/drivers/fuukifg2.cpp b/src/mame/drivers/fuukifg2.cpp
index c30d173c010..a2342012754 100644
--- a/src/mame/drivers/fuukifg2.cpp
+++ b/src/mame/drivers/fuukifg2.cpp
@@ -77,7 +77,7 @@ WRITE16_MEMBER(fuuki16_state::vregs_w)
WRITE8_MEMBER( fuuki16_state::sound_command_w )
{
- m_soundlatch->write(space,0,data & 0xff);
+ m_soundlatch->write(data & 0xff);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
// m_maincpu->spin_until_time(attotime::from_usec(50)); // Allow the other CPU to reply
machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(50)); // Fixes glitching in rasters
diff --git a/src/mame/drivers/gaelco2.cpp b/src/mame/drivers/gaelco2.cpp
index 66dd20ad350..5faa1cf89aa 100644
--- a/src/mame/drivers/gaelco2.cpp
+++ b/src/mame/drivers/gaelco2.cpp
@@ -85,18 +85,18 @@ void gaelco2_state::mcu_hostmem_map(address_map &map)
void gaelco2_state::maniacsq_map(address_map &map)
{
- map(0x000000, 0x03ffff).rom(); /* ROM */
- map(0x200000, 0x20ffff).ram().w(FUNC(gaelco2_state::gaelco2_vram_w)).share("spriteram"); /* Video RAM */
+ map(0x000000, 0x03ffff).rom(); /* ROM */
+ map(0x200000, 0x20ffff).ram().w(FUNC(gaelco2_state::vram_w)).share("spriteram"); /* Video RAM */
map(0x202890, 0x2028ff).rw("gaelco", FUNC(gaelco_gae1_device::gaelcosnd_r), FUNC(gaelco_gae1_device::gaelcosnd_w)); /* Sound Registers */
- map(0x210000, 0x211fff).ram().w(FUNC(gaelco2_state::gaelco2_palette_w)).share("paletteram"); /* Palette */
- map(0x218004, 0x218009).ram().share("vregs"); /* Video Registers */
- map(0x300000, 0x300001).portr("IN0"); /* DSW #1 + Input 1P */
- map(0x300002, 0x300003).portr("IN1"); /* DSW #2 + Input 2P */
- map(0x30004a, 0x30004b).nopw(); /* Sound muting? */
- map(0x320000, 0x320001).portr("COIN"); /* COINSW + SERVICESW */
- map(0x500000, 0x500001).w(FUNC(gaelco2_state::alighunt_coin_w)); /* Coin lockout + counters */
- map(0xfe0000, 0xfe7fff).ram(); /* Work RAM */
- map(0xfe8000, 0xfeffff).ram().share("shareram"); /* Work RAM */
+ map(0x210000, 0x211fff).ram().w(FUNC(gaelco2_state::palette_w)).share("paletteram"); /* Palette */
+ map(0x218004, 0x218009).ram().w(FUNC(gaelco2_state::vregs_w)).share("vregs"); /* Video Registers */
+ map(0x300000, 0x300001).portr("IN0"); /* DSW #1 + Input 1P */
+ map(0x300002, 0x300003).portr("IN1"); /* DSW #2 + Input 2P */
+ map(0x30004a, 0x30004b).nopw(); /* Sound muting? */
+ map(0x320000, 0x320001).portr("COIN"); /* COINSW + SERVICESW */
+ map(0x500000, 0x500001).w(FUNC(gaelco2_state::alighunt_coin_w)); /* Coin lockout + counters */
+ map(0xfe0000, 0xfe7fff).ram(); /* Work RAM */
+ map(0xfe8000, 0xfeffff).ram().share("shareram"); /* Work RAM */
}
@@ -193,7 +193,7 @@ void gaelco2_state::maniacsq(machine_config &config)
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_size(64*16, 32*16);
screen.set_visarea(0, 320-1, 16, 256-1);
- screen.set_screen_update(FUNC(gaelco2_state::screen_update_gaelco2));
+ screen.set_screen_update(FUNC(gaelco2_state::screen_update));
screen.screen_vblank().set("spriteram", FUNC(buffered_spriteram16_device::vblank_copy_rising));
screen.set_palette(m_palette);
@@ -449,10 +449,10 @@ INPUT_PORTS_END
void gaelco2_state::saltcrdi_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
- map(0x200000, 0x20ffff).ram().w(FUNC(gaelco2_state::gaelco2_vram_w)).share("spriteram");
+ map(0x200000, 0x20ffff).ram().w(FUNC(gaelco2_state::vram_w)).share("spriteram");
map(0x202890, 0x2028ff).rw("gaelco", FUNC(gaelco_gae1_device::gaelcosnd_r), FUNC(gaelco_gae1_device::gaelcosnd_w));
- map(0x210000, 0x211fff).ram().w(FUNC(gaelco2_state::gaelco2_palette_w)).share("paletteram");
- map(0x218004, 0x218009).ram().share("vregs");
+ map(0x210000, 0x211fff).ram().w(FUNC(gaelco2_state::palette_w)).share("paletteram");
+ map(0x218004, 0x218009).ram().w(FUNC(gaelco2_state::vregs_w)).share("vregs");
map(0x300000, 0x300001).portr("IN0");
map(0x310000, 0x310001).portr("DSW");
map(0x320000, 0x320001).portr("COIN");
@@ -476,7 +476,7 @@ void gaelco2_state::saltcrdi(machine_config &config)
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_size(64*16, 32*16);
screen.set_visarea(0, 384-1, 16, 256-1);
- screen.set_screen_update(FUNC(gaelco2_state::screen_update_gaelco2));
+ screen.set_screen_update(FUNC(gaelco2_state::screen_update));
screen.screen_vblank().set("spriteram", FUNC(buffered_spriteram16_device::vblank_copy_rising));
screen.set_palette(m_palette);
@@ -558,19 +558,19 @@ Note 1x 28x2 edge connector
void gaelco2_state::play2000_map(address_map &map)
{
- map(0x000000, 0x03ffff).rom(); /* ROM */
- map(0x100000, 0x100001).portr("IN0"); /* Coins + other buttons? */
+ map(0x000000, 0x03ffff).rom(); /* ROM */
+ map(0x100000, 0x100001).portr("IN0"); /* Coins + other buttons? */
map(0x110000, 0x110001).portr("IN1");
- map(0x200000, 0x20ffff).ram().w(FUNC(gaelco2_state::gaelco2_vram_w)).share("spriteram"); /* Video RAM */
+ map(0x200000, 0x20ffff).ram().w(FUNC(gaelco2_state::vram_w)).share("spriteram"); /* Video RAM */
map(0x202890, 0x2028ff).rw("gaelco", FUNC(gaelco_gae1_device::gaelcosnd_r), FUNC(gaelco_gae1_device::gaelcosnd_w)); /* Sound Registers */
- map(0x214000, 0x214fff).ram().w(FUNC(gaelco2_state::gaelco2_palette_w)).share("paletteram"); /* Palette */
- map(0x215000, 0x217fff).ram(); /* Written to, but unused? */
- map(0x218000, 0x218003).ram(); /* Written to, but unused? */
- map(0x218004, 0x218009).ram().share("vregs"); /* Video Registers */
- map(0x21800a, 0x218fff).ram(); /* Written to, but unused? */
+ map(0x214000, 0x214fff).ram().w(FUNC(gaelco2_state::palette_w)).share("paletteram"); /* Palette */
+ map(0x215000, 0x217fff).ram(); /* Written to, but unused? */
+ 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(0xfe0000, 0xfe7fff).ram(); /* Work RAM */
- map(0xfe8000, 0xfeffff).ram().share("shareram"); /* Work RAM */
+ map(0xfe0000, 0xfe7fff).ram(); /* Work RAM */
+ map(0xfe8000, 0xfeffff).ram().share("shareram"); /* Work RAM */
}
static INPUT_PORTS_START( play2000 )
@@ -732,7 +732,7 @@ void gaelco2_state::play2000(machine_config &config)
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_size(64*16, 32*16);
screen.set_visarea(0, 384-1, 16, 256-1);
- screen.set_screen_update(FUNC(gaelco2_state::screen_update_gaelco2));
+ screen.set_screen_update(FUNC(gaelco2_state::screen_update));
screen.screen_vblank().set("spriteram", FUNC(buffered_spriteram16_device::vblank_copy_rising));
screen.set_palette(m_palette);
@@ -757,30 +757,30 @@ void gaelco2_state::play2000(machine_config &config)
BANG
============================================================================*/
-READ16_MEMBER(bang_state::p1_gun_x){return (m_light0_x->read() * 320 / 0x100) + 1;}
-READ16_MEMBER(bang_state::p1_gun_y){return (m_light0_y->read() * 240 / 0x100) - 4;}
-READ16_MEMBER(bang_state::p2_gun_x){return (m_light1_x->read() * 320 / 0x100) + 1;}
-READ16_MEMBER(bang_state::p2_gun_y){return (m_light1_y->read() * 240 / 0x100) - 4;}
+u16 bang_state::p1_gun_x(){return (m_light0_x->read() * 320 / 0x100) + 1;}
+u16 bang_state::p1_gun_y(){return (m_light0_y->read() * 240 / 0x100) - 4;}
+u16 bang_state::p2_gun_x(){return (m_light1_x->read() * 320 / 0x100) + 1;}
+u16 bang_state::p2_gun_y(){return (m_light1_y->read() * 240 / 0x100) - 4;}
void bang_state::bang_map(address_map &map)
{
- map(0x000000, 0x0fffff).rom(); /* ROM */
- map(0x200000, 0x20ffff).ram().w(FUNC(bang_state::gaelco2_vram_w)).share("spriteram"); /* Video RAM */
+ map(0x000000, 0x0fffff).rom(); /* ROM */
+ map(0x200000, 0x20ffff).ram().w(FUNC(bang_state::vram_w)).share("spriteram"); /* Video RAM */
map(0x202890, 0x2028ff).rw("gaelco", FUNC(gaelco_cg1v_device::gaelcosnd_r), FUNC(gaelco_cg1v_device::gaelcosnd_w)); /* Sound Registers */
- map(0x210000, 0x211fff).ram().w(FUNC(bang_state::gaelco2_palette_w)).share("paletteram"); /* Palette */
- map(0x218004, 0x218009).readonly(); /* Video Registers */
- map(0x218004, 0x218007).writeonly().share("vregs"); /* Video Registers */
- map(0x218008, 0x218009).nopw(); /* CLR INT Video */
+ map(0x210000, 0x211fff).ram().w(FUNC(bang_state::palette_w)).share("paletteram"); /* Palette */
+ map(0x218004, 0x218009).readonly(); /* Video Registers */
+ map(0x218004, 0x218007).w(FUNC(bang_state::vregs_w)).share("vregs"); /* Video Registers */
+ map(0x218008, 0x218009).nopw(); /* CLR INT Video */
map(0x300000, 0x300001).portr("P1");
- map(0x300002, 0x300003).nopr(); /* Random number generator? */
- map(0x300000, 0x30000f).w(m_mainlatch, FUNC(ls259_device::write_d0)).umask16(0x00ff); /* Coin Counters & serial EEPROM */
+ map(0x300002, 0x300003).nopr(); /* Random number generator? */
+ map(0x300000, 0x30000f).w(m_mainlatch, FUNC(ls259_device::write_d0)).umask16(0x00ff); /* Coin Counters & serial EEPROM */
map(0x300010, 0x300011).portr("P2");
map(0x300020, 0x300021).portr("COIN");
- map(0x310000, 0x310001).r(FUNC(bang_state::p1_gun_x)).w(FUNC(bang_state::bang_clr_gun_int_w)); /* Gun 1P X */ /* CLR INT Gun */
- map(0x310002, 0x310003).r(FUNC(bang_state::p2_gun_x)); /* Gun 2P X */
- map(0x310004, 0x310005).r(FUNC(bang_state::p1_gun_y)); /* Gun 1P Y */
- map(0x310006, 0x310007).r(FUNC(bang_state::p2_gun_y)); /* Gun 2P Y */
- map(0xfe0000, 0xfeffff).ram(); /* Work RAM */
+ map(0x310000, 0x310001).r(FUNC(bang_state::p1_gun_x)).w(FUNC(bang_state::bang_clr_gun_int_w)); /* Gun 1P X */ /* CLR INT Gun */
+ map(0x310002, 0x310003).r(FUNC(bang_state::p2_gun_x)); /* Gun 2P X */
+ map(0x310004, 0x310005).r(FUNC(bang_state::p1_gun_y)); /* Gun 1P Y */
+ map(0x310006, 0x310007).r(FUNC(bang_state::p2_gun_y)); /* Gun 2P Y */
+ map(0xfe0000, 0xfeffff).ram(); /* Work RAM */
}
@@ -838,7 +838,7 @@ void bang_state::bang(machine_config &config)
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_size(64*16, 32*16);
screen.set_visarea(0, 320-1, 16, 256-1);
- screen.set_screen_update(FUNC(gaelco2_state::screen_update_gaelco2));
+ screen.set_screen_update(FUNC(gaelco2_state::screen_update));
screen.screen_vblank().set("spriteram", FUNC(buffered_spriteram16_device::vblank_copy_rising));
screen.set_palette(m_palette);
@@ -970,18 +970,18 @@ ROM_END
void gaelco2_state::alighunt_map(address_map &map)
{
- map(0x000000, 0x0fffff).rom(); /* ROM */
- map(0x200000, 0x20ffff).ram().w(FUNC(gaelco2_state::gaelco2_vram_w)).share("spriteram"); /* Video RAM */
- map(0x202890, 0x2028ff).rw("gaelco", FUNC(gaelco_gae1_device::gaelcosnd_r), FUNC(gaelco_gae1_device::gaelcosnd_w)); /* Sound Registers */
- map(0x210000, 0x211fff).ram().w(FUNC(gaelco2_state::gaelco2_palette_w)).share("paletteram"); /* Palette */
- map(0x218004, 0x218009).ram().share("vregs"); /* Video Registers */
- map(0x300000, 0x300001).portr("IN0"); /* DSW #1 + Input 1P */
- map(0x300002, 0x300003).portr("IN1"); /* DSW #2 + Input 2P */
- map(0x320000, 0x320001).portr("COIN"); /* COINSW + SERVICESW */
- map(0x500000, 0x500001).w(FUNC(gaelco2_state::alighunt_coin_w)); /* Coin lockout + counters */
- map(0x500006, 0x500007).nopw(); /* ??? */
- map(0xfe0000, 0xfe7fff).ram(); /* Work RAM */
- map(0xfe8000, 0xfeffff).ram().share("shareram"); /* Work RAM (shared with D5002FP) */
+ map(0x000000, 0x0fffff).rom(); /* ROM */
+ map(0x200000, 0x20ffff).ram().w(FUNC(gaelco2_state::vram_w)).share("spriteram"); /* Video RAM */
+ map(0x202890, 0x2028ff).rw("gaelco", FUNC(gaelco_gae1_device::gaelcosnd_r), FUNC(gaelco_gae1_device::gaelcosnd_w)); /* Sound Registers */
+ map(0x210000, 0x211fff).ram().w(FUNC(gaelco2_state::palette_w)).share("paletteram"); /* Palette */
+ map(0x218004, 0x218009).ram().w(FUNC(gaelco2_state::vregs_w)).share("vregs"); /* Video Registers */
+ map(0x300000, 0x300001).portr("IN0"); /* DSW #1 + Input 1P */
+ map(0x300002, 0x300003).portr("IN1"); /* DSW #2 + Input 2P */
+ map(0x320000, 0x320001).portr("COIN"); /* COINSW + SERVICESW */
+ map(0x500000, 0x500001).w(FUNC(gaelco2_state::alighunt_coin_w)); /* Coin lockout + counters */
+ map(0x500006, 0x500007).nopw(); /* ??? */
+ map(0xfe0000, 0xfe7fff).ram(); /* Work RAM */
+ map(0xfe8000, 0xfeffff).ram().share("shareram"); /* Work RAM (shared with D5002FP) */
}
@@ -1077,7 +1077,7 @@ void gaelco2_state::alighunt(machine_config &config)
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_size(64*16, 32*16);
screen.set_visarea(0, 320-1, 16, 256-1);
- screen.set_screen_update(FUNC(gaelco2_state::screen_update_gaelco2));
+ screen.set_screen_update(FUNC(gaelco2_state::screen_update));
screen.screen_vblank().set("spriteram", FUNC(buffered_spriteram16_device::vblank_copy_rising));
screen.set_palette(m_palette);
@@ -1240,18 +1240,18 @@ ROM_END
void gaelco2_state::touchgo_map(address_map &map)
{
- map(0x000000, 0x0fffff).rom(); /* ROM */
- map(0x200000, 0x20ffff).ram().w(FUNC(gaelco2_state::gaelco2_vram_w)).share("spriteram"); /* Video RAM */
- map(0x202890, 0x2028ff).rw("gaelco", FUNC(gaelco_gae1_device::gaelcosnd_r), FUNC(gaelco_gae1_device::gaelcosnd_w)); /* Sound Registers */
- map(0x210000, 0x211fff).ram().w(FUNC(gaelco2_state::gaelco2_palette_w)).share("paletteram"); /* Palette */
- map(0x218004, 0x218009).ram().share("vregs"); /* Video Registers */
- map(0x300000, 0x300001).portr("IN0"); /* DSW #1 + Input 1P */
- map(0x300002, 0x300003).portr("IN1"); /* DSW #2 + Input 2P */
- map(0x300004, 0x300005).portr("IN2"); /* COINSW + Input 3P */
- map(0x300006, 0x300007).portr("IN3"); /* SERVICESW + Input 4P */
- map(0x500000, 0x500001).select(0x0038).w(FUNC(gaelco2_state::wrally2_latch_w)); /* Coin counters */
- map(0xfe0000, 0xfe7fff).ram(); /* Work RAM */
- map(0xfe8000, 0xfeffff).ram().share("shareram"); /* Work RAM (shared with D5002FP) */
+ map(0x000000, 0x0fffff).rom(); /* ROM */
+ map(0x200000, 0x20ffff).ram().w(FUNC(gaelco2_state::vram_w)).share("spriteram"); /* Video RAM */
+ map(0x202890, 0x2028ff).rw("gaelco", FUNC(gaelco_gae1_device::gaelcosnd_r), FUNC(gaelco_gae1_device::gaelcosnd_w)); /* Sound Registers */
+ map(0x210000, 0x211fff).ram().w(FUNC(gaelco2_state::palette_w)).share("paletteram"); /* Palette */
+ map(0x218004, 0x218009).ram().w(FUNC(gaelco2_state::vregs_w)).share("vregs"); /* Video Registers */
+ map(0x300000, 0x300001).portr("IN0"); /* DSW #1 + Input 1P */
+ map(0x300002, 0x300003).portr("IN1"); /* DSW #2 + Input 2P */
+ map(0x300004, 0x300005).portr("IN2"); /* COINSW + Input 3P */
+ map(0x300006, 0x300007).portr("IN3"); /* SERVICESW + Input 4P */
+ map(0x500000, 0x500001).select(0x0038).w(FUNC(gaelco2_state::wrally2_latch_w)); /* Coin counters */
+ map(0xfe0000, 0xfe7fff).ram(); /* Work RAM */
+ map(0xfe8000, 0xfeffff).ram().share("shareram"); /* Work RAM (shared with D5002FP) */
}
@@ -1386,7 +1386,7 @@ void gaelco2_state::touchgo(machine_config &config)
lscreen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
lscreen.set_size(64*16, 32*16);
lscreen.set_visarea(0, 480-1, 16, 256-1);
- lscreen.set_screen_update(FUNC(gaelco2_state::screen_update_gaelco2_left));
+ lscreen.set_screen_update(FUNC(gaelco2_state::screen_update_left));
lscreen.set_palette(m_palette);
screen_device &rscreen(SCREEN(config, "rscreen", SCREEN_TYPE_RASTER));
@@ -1394,7 +1394,7 @@ void gaelco2_state::touchgo(machine_config &config)
rscreen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
rscreen.set_size(64*16, 32*16);
rscreen.set_visarea(0, 480-1, 16, 256-1);
- rscreen.set_screen_update(FUNC(gaelco2_state::screen_update_gaelco2_right));
+ rscreen.set_screen_update(FUNC(gaelco2_state::screen_update_right));
rscreen.screen_vblank().set("spriteram", FUNC(buffered_spriteram16_device::vblank_copy_rising));
rscreen.set_palette(m_palette);
@@ -1620,18 +1620,18 @@ ROM_END
void gaelco2_state::snowboar_map(address_map &map)
{
- map(0x000000, 0x0fffff).rom(); /* ROM */
- map(0x200000, 0x20ffff).ram().w(FUNC(gaelco2_state::gaelco2_vram_w)).share("spriteram"); /* Video RAM */
- map(0x202890, 0x2028ff).rw("gaelco", FUNC(gaelco_cg1v_device::gaelcosnd_r), FUNC(gaelco_cg1v_device::gaelcosnd_w)); /* Sound Registers */
- map(0x210000, 0x211fff).ram().w(FUNC(gaelco2_state::gaelco2_palette_w)).share("paletteram"); /* Palette */
- map(0x212000, 0x213fff).ram(); /* Extra RAM */
- map(0x218004, 0x218009).ram().share("vregs"); /* Video Registers */
+ map(0x000000, 0x0fffff).rom(); /* ROM */
+ map(0x200000, 0x20ffff).ram().w(FUNC(gaelco2_state::vram_w)).share("spriteram"); /* Video RAM */
+ map(0x202890, 0x2028ff).rw("gaelco", FUNC(gaelco_cg1v_device::gaelcosnd_r), FUNC(gaelco_cg1v_device::gaelcosnd_w)); /* Sound Registers */
+ map(0x210000, 0x211fff).ram().w(FUNC(gaelco2_state::palette_w)).share("paletteram"); /* Palette */
+ map(0x212000, 0x213fff).ram(); /* Extra RAM */
+ map(0x218004, 0x218009).ram().w(FUNC(gaelco2_state::vregs_w)).share("vregs"); /* Video Registers */
map(0x300000, 0x300001).portr("P1");
- map(0x300000, 0x30000f).w(m_mainlatch, FUNC(ls259_device::write_d0)).umask16(0x00ff); /* Coin Counters & serial EEPROM */
+ map(0x300000, 0x30000f).w(m_mainlatch, FUNC(ls259_device::write_d0)).umask16(0x00ff); /* Coin Counters & serial EEPROM */
map(0x300010, 0x300011).portr("P2");
map(0x300020, 0x300021).portr("COIN");
map(0x310000, 0x31ffff).rw(FUNC(gaelco2_state::snowboar_protection_r), FUNC(gaelco2_state::snowboar_protection_w)).share("snowboar_prot"); /* Protection */
- map(0xfe0000, 0xfeffff).ram(); /* Work RAM */
+ map(0xfe0000, 0xfeffff).ram(); /* Work RAM */
}
@@ -1691,7 +1691,7 @@ void gaelco2_state::snowboar(machine_config &config)
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_size(64*16, 32*16);
screen.set_visarea(0, 384-1, 16, 256-1);
- screen.set_screen_update(FUNC(gaelco2_state::screen_update_gaelco2));
+ screen.set_screen_update(FUNC(gaelco2_state::screen_update));
screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising));
screen.set_palette(m_palette);
@@ -1735,7 +1735,7 @@ void gaelco2_state::maniacsqs(machine_config &config)
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_size(64*16, 32*16);
screen.set_visarea(0, 320-1, 16, 256-1);
- screen.set_screen_update(FUNC(gaelco2_state::screen_update_gaelco2));
+ screen.set_screen_update(FUNC(gaelco2_state::screen_update));
screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising));
screen.set_palette(m_palette);
@@ -1853,19 +1853,19 @@ ROM_END
void wrally2_state::wrally2_map(address_map &map)
{
- map(0x000000, 0x0fffff).rom(); /* ROM */
- map(0x200000, 0x20ffff).ram().w(FUNC(wrally2_state::gaelco2_vram_w)).share("spriteram"); /* Video RAM */
+ map(0x000000, 0x0fffff).rom(); /* ROM */
+ map(0x200000, 0x20ffff).ram().w(FUNC(wrally2_state::vram_w)).share("spriteram"); /* Video RAM */
map(0x202890, 0x2028ff).rw("gaelco", FUNC(gaelco_gae1_device::gaelcosnd_r), FUNC(gaelco_gae1_device::gaelcosnd_w)); /* Sound Registers */
- map(0x210000, 0x211fff).ram().w(FUNC(wrally2_state::gaelco2_palette_w)).share("paletteram"); /* Palette */
- map(0x212000, 0x213fff).ram(); /* Extra RAM */
- map(0x218004, 0x218009).ram().share("vregs"); /* Video Registers */
- map(0x300000, 0x300001).portr("IN0"); /* DIPSW #2 + Inputs 1P */
- map(0x300002, 0x300003).portr("IN1"); /* DIPSW #1 */
- map(0x300004, 0x300005).portr("IN2"); /* Inputs 2P + COINSW */
- map(0x300006, 0x300007).portr("IN3"); /* SERVICESW */
- map(0x400000, 0x400001).select(0x0038).w(FUNC(wrally2_state::wrally2_latch_w)); /* Coin counters, etc. */
- map(0xfe0000, 0xfe7fff).ram(); /* Work RAM */
- map(0xfe8000, 0xfeffff).ram().share("shareram"); /* Work RAM (shared with D5002FP) */
+ map(0x210000, 0x211fff).ram().w(FUNC(wrally2_state::palette_w)).share("paletteram"); /* Palette */
+ map(0x212000, 0x213fff).ram(); /* Extra RAM */
+ map(0x218004, 0x218009).ram().w(FUNC(wrally2_state::vregs_w)).share("vregs"); /* Video Registers */
+ map(0x300000, 0x300001).portr("IN0"); /* DIPSW #2 + Inputs 1P */
+ map(0x300002, 0x300003).portr("IN1"); /* DIPSW #1 */
+ map(0x300004, 0x300005).portr("IN2"); /* Inputs 2P + COINSW */
+ map(0x300006, 0x300007).portr("IN3"); /* SERVICESW */
+ map(0x400000, 0x400001).select(0x0038).w(FUNC(wrally2_state::wrally2_latch_w)); /* Coin counters, etc. */
+ map(0xfe0000, 0xfe7fff).ram(); /* Work RAM */
+ map(0xfe8000, 0xfeffff).ram().share("shareram"); /* Work RAM (shared with D5002FP) */
}
@@ -1984,7 +1984,7 @@ void wrally2_state::wrally2(machine_config &config)
lscreen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
lscreen.set_size(384, 32*16);
lscreen.set_visarea(0, 384-1, 16, 256-1);
- lscreen.set_screen_update(FUNC(gaelco2_state::screen_update_gaelco2_left));
+ lscreen.set_screen_update(FUNC(gaelco2_state::screen_update_left));
lscreen.set_palette(m_palette);
screen_device &rscreen(SCREEN(config, "rscreen", SCREEN_TYPE_RASTER));
@@ -1992,7 +1992,7 @@ void wrally2_state::wrally2(machine_config &config)
rscreen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
rscreen.set_size(384, 32*16);
rscreen.set_visarea(0, 384-1, 16, 256-1);
- rscreen.set_screen_update(FUNC(gaelco2_state::screen_update_gaelco2_right));
+ rscreen.set_screen_update(FUNC(gaelco2_state::screen_update_right));
rscreen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising));
rscreen.set_palette(m_palette);
@@ -2298,36 +2298,36 @@ ROM_END
-GAME( 1994, aligator, 0, alighunt_d5002fp, alighunt, gaelco2_state, init_alighunt, ROT0, "Gaelco", "Alligator Hunt (World, protected)", 0 )
-GAME( 1994, aligators, aligator, alighunt_d5002fp, alighunt, gaelco2_state, init_alighunt, ROT0, "Gaelco", "Alligator Hunt (Spain, protected)", 0 )
-GAME( 1994, aligatorun, aligator, alighunt, alighunt, gaelco2_state, init_alighunt, ROT0, "Gaelco", "Alligator Hunt (unprotected, set 1)", 0 )
-GAME( 1994, aligatoruna, aligator, alighunt, alighunt, gaelco2_state, init_alighunt, ROT0, "Gaelco", "Alligator Hunt (unprotected, set 2)", 0 ) // strange version, starts on space stages, but clearly a recompile not a trivial hack of the above, show version maybe?
+GAME( 1994, aligator, 0, alighunt_d5002fp, alighunt, gaelco2_state, init_alighunt, ROT0, "Gaelco", "Alligator Hunt (World, protected)", 0 )
+GAME( 1994, aligators, aligator, alighunt_d5002fp, alighunt, gaelco2_state, init_alighunt, ROT0, "Gaelco", "Alligator Hunt (Spain, protected)", 0 )
+GAME( 1994, aligatorun, aligator, alighunt, alighunt, gaelco2_state, init_alighunt, ROT0, "Gaelco", "Alligator Hunt (unprotected, set 1)", 0 )
+GAME( 1994, aligatoruna, aligator, alighunt, alighunt, gaelco2_state, init_alighunt, ROT0, "Gaelco", "Alligator Hunt (unprotected, set 2)", 0 ) // strange version, starts on space stages, but clearly a recompile not a trivial hack of the above, show version maybe?
-GAME( 1995, touchgo, 0, touchgo_d5002fp, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch & Go (World)", MACHINE_IMPERFECT_SOUND )
-GAME( 1995, touchgon, touchgo, touchgo_d5002fp, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch & Go (Non North America)", MACHINE_IMPERFECT_SOUND )
-GAME( 1995, touchgoe, touchgo, touchgo_d5002fp, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch & Go (earlier revision)", MACHINE_IMPERFECT_SOUND )
-GAME( 1995, touchgok, touchgo, touchgo, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch & Go (Korea, unprotected)", MACHINE_IMPERFECT_SOUND ) // doesn't say 'Korea' but was sourced there, shows 2 copyright lines like the 'earlier revision'
+GAME( 1995, touchgo, 0, touchgo_d5002fp, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch & Go (World)", MACHINE_IMPERFECT_SOUND )
+GAME( 1995, touchgon, touchgo, touchgo_d5002fp, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch & Go (Non North America)", MACHINE_IMPERFECT_SOUND )
+GAME( 1995, touchgoe, touchgo, touchgo_d5002fp, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch & Go (earlier revision)", MACHINE_IMPERFECT_SOUND )
+GAME( 1995, touchgok, touchgo, touchgo, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch & Go (Korea, unprotected)", MACHINE_IMPERFECT_SOUND ) // doesn't say 'Korea' but was sourced there, shows 2 copyright lines like the 'earlier revision'
-GAME( 1995, wrally2, 0, wrally2, wrally2, wrally2_state, init_wrally2, ROT0, "Gaelco", "World Rally 2: Twin Racing (mask ROM version)", 0 )
-GAME( 1995, wrally2a, wrally2, wrally2, wrally2, wrally2_state, empty_init, ROT0, "Gaelco", "World Rally 2: Twin Racing (EPROM version)", 0 )
+GAME( 1995, wrally2, 0, wrally2, wrally2, wrally2_state, init_wrally2, ROT0, "Gaelco", "World Rally 2: Twin Racing (mask ROM version)", 0 )
+GAME( 1995, wrally2a, wrally2, wrally2, wrally2, wrally2_state, empty_init, ROT0, "Gaelco", "World Rally 2: Twin Racing (EPROM version)", 0 )
// All sets identify as Version 1.0, but are clearly different revisions
-GAME( 1996, maniacsq, 0, maniacsq_d5002fp, maniacsq, gaelco2_state, empty_init, ROT0, "Gaelco", "Maniac Square (protected, Version 1.0, Checksum DEEE)", 0 )
-GAME( 1996, maniacsqa, maniacsq, maniacsq_d5002fp, maniacsq, gaelco2_state, empty_init, ROT0, "Gaelco", "Maniac Square (protected, Version 1.0, Checksum CF2D)", 0 )
-GAME( 1996, maniacsqu, maniacsq, maniacsq, maniacsq, gaelco2_state, empty_init, ROT0, "Gaelco", "Maniac Square (unprotected, Version 1.0, Checksum BB73)", 0 )
-GAME( 1996, maniacsqs, maniacsq, maniacsqs, snowboar, gaelco2_state, empty_init, ROT0, "Gaelco", "Maniac Square (unprotected, Version 1.0, Checksum 66B1, 960419/1 PCB)", 0 ) // Official version on Snow Board Championship PCB, doesn't use the protection
+GAME( 1996, maniacsq, 0, maniacsq_d5002fp, maniacsq, gaelco2_state, empty_init, ROT0, "Gaelco", "Maniac Square (protected, Version 1.0, Checksum DEEE)", 0 )
+GAME( 1996, maniacsqa, maniacsq, maniacsq_d5002fp, maniacsq, gaelco2_state, empty_init, ROT0, "Gaelco", "Maniac Square (protected, Version 1.0, Checksum CF2D)", 0 )
+GAME( 1996, maniacsqu, maniacsq, maniacsq, maniacsq, gaelco2_state, empty_init, ROT0, "Gaelco", "Maniac Square (unprotected, Version 1.0, Checksum BB73)", 0 )
+GAME( 1996, maniacsqs, maniacsq, maniacsqs, snowboar, gaelco2_state, empty_init, ROT0, "Gaelco", "Maniac Square (unprotected, Version 1.0, Checksum 66B1, 960419/1 PCB)", 0 ) // Official version on Snow Board Championship PCB, doesn't use the protection
-GAME( 1996, snowboar, 0, snowboar, snowboar, gaelco2_state, empty_init, ROT0, "Gaelco", "Snow Board Championship (Version 2.1)", 0 )
-GAME( 1996, snowboara, snowboar, snowboar, snowboar, gaelco2_state, init_snowboar, ROT0, "Gaelco", "Snow Board Championship (Version 2.0)", 0 )
+GAME( 1996, snowboar, 0, snowboar, snowboar, gaelco2_state, init_snowboar, ROT0, "Gaelco", "Snow Board Championship (Version 2.1)", 0 )
+GAME( 1996, snowboara, snowboar, snowboar, snowboar, gaelco2_state, init_snowboara, ROT0, "Gaelco", "Snow Board Championship (Version 2.0)", 0 )
-GAME( 1998, bang, 0, bang, bang, bang_state, init_bang, ROT0, "Gaelco", "Bang!", 0 )
-GAME( 1998, bangj, bang, bang, bang, bang_state, init_bang, ROT0, "Gaelco", "Gun Gabacho (Japan)", 0 )
+GAME( 1998, bang, 0, bang, bang, bang_state, init_bang, ROT0, "Gaelco", "Bang!", 0 )
+GAME( 1998, bangj, bang, bang, bang, bang_state, init_bang, ROT0, "Gaelco", "Gun Gabacho (Japan)", 0 )
// 2-in-1 gambling game, appears to be cloned Gaelco hardware complete with DS5002FP, or possibly manufactured by Gaelco for Nova Desitec but without any Gaelco branding.
// these are Italian versions, English versions also exist
-GAME( 1999, play2000, 0, play2000, play2000, gaelco2_state, init_play2000, ROT0, "Nova Desitec", "Play 2000 (Super Slot & Gran Tesoro) (v7.0i) (Italy)", 0 )
-GAME( 1999, play2000_50i,play2000, play2000, play2000, gaelco2_state, empty_init, ROT0, "Nova Desitec", "Play 2000 (Super Slot & Gran Tesoro) (v5.0i) (Italy)", MACHINE_NOT_WORKING ) // bad dump
-GAME( 1999, play2000_40i,play2000, play2000, play2000, gaelco2_state, init_play2000, ROT0, "Nova Desitec", "Play 2000 (Super Slot & Gran Tesoro) (v4.0i) (Italy)", 0 )
+GAME( 1999, play2000, 0, play2000, play2000, gaelco2_state, init_play2000, ROT0, "Nova Desitec", "Play 2000 (Super Slot & Gran Tesoro) (v7.0i) (Italy)", 0 )
+GAME( 1999, play2000_50i,play2000, play2000, play2000, gaelco2_state, empty_init, ROT0, "Nova Desitec", "Play 2000 (Super Slot & Gran Tesoro) (v5.0i) (Italy)", MACHINE_NOT_WORKING ) // bad dump
+GAME( 1999, play2000_40i,play2000, play2000, play2000, gaelco2_state, init_play2000, ROT0, "Nova Desitec", "Play 2000 (Super Slot & Gran Tesoro) (v4.0i) (Italy)", 0 )
// Gym exercise bike
-GAME( 1997, saltcrdi, 0, saltcrdi, saltcrdi, gaelco2_state, empty_init, ROT0, "Salter Fitness / Gaelco", "Pro Tele Cardioline (Salter Fitness Bike V.1.0, Checksum 02AB)", MACHINE_NOT_WORKING ) // there are other machines in the Cardioline series, without TV displays
+GAME( 1997, saltcrdi, 0, saltcrdi, saltcrdi, gaelco2_state, empty_init, ROT0, "Salter Fitness / Gaelco", "Pro Tele Cardioline (Salter Fitness Bike V.1.0, Checksum 02AB)", MACHINE_NOT_WORKING ) // there are other machines in the Cardioline series, without TV displays
diff --git a/src/mame/drivers/gaelco3d.cpp b/src/mame/drivers/gaelco3d.cpp
index 50ec35f225a..2c6498c9886 100644
--- a/src/mame/drivers/gaelco3d.cpp
+++ b/src/mame/drivers/gaelco3d.cpp
@@ -213,7 +213,7 @@ void gaelco3d_state::machine_reset()
{
MACHINE_RESET_CALL_MEMBER( common );
m_tms_offset_xor = 0;
- m_soundlatch->acknowledge_w(machine().dummy_space(), 0, 0);
+ m_soundlatch->acknowledge_w();
}
diff --git a/src/mame/drivers/galaxian.cpp b/src/mame/drivers/galaxian.cpp
index c3213bc002e..80f07246f8e 100644
--- a/src/mame/drivers/galaxian.cpp
+++ b/src/mame/drivers/galaxian.cpp
@@ -681,17 +681,15 @@ WRITE_LINE_MEMBER(galaxian_state::vblank_interrupt_w)
m_maincpu->set_input_line(m_irq_line, ASSERT_LINE);
}
-WRITE_LINE_MEMBER(galaxian_state::tenspot_interrupt_w)
+INPUT_CHANGED_MEMBER(galaxian_state::tenspot_fake)
{
- vblank_interrupt_w(state);
-
- if (m_fake_select.read_safe(0x00))
+ if (newval)
{
m_tenspot_current_game++;
m_tenspot_current_game%=10;
tenspot_set_game_bank(m_tenspot_current_game, 1);
- m_maincpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero);
}
+ m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE);
}
WRITE8_MEMBER(galaxian_state::irq_enable_w)
@@ -957,7 +955,7 @@ WRITE8_MEMBER(galaxian_state::explorer_sound_control_w)
READ8_MEMBER(galaxian_state::explorer_sound_latch_r)
{
m_audiocpu->set_input_line(0, CLEAR_LINE);
- return m_soundlatch->read(m_audiocpu->space(AS_PROGRAM), 0);
+ return m_soundlatch->read();
}
@@ -1351,7 +1349,7 @@ WRITE8_MEMBER(galaxian_state::kingball_sound1_w)
WRITE8_MEMBER(galaxian_state::kingball_sound2_w)
{
m_kingball_sound = (m_kingball_sound & ~0x02) | (data << 1);
- m_soundlatch->write(space, 0, m_kingball_sound | 0xf0);
+ m_soundlatch->write(m_kingball_sound | 0xf0);
}
@@ -1427,7 +1425,7 @@ READ8_MEMBER(galaxian_state::jumpbug_protection_r)
WRITE8_MEMBER(galaxian_state::checkman_sound_command_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
@@ -3254,7 +3252,7 @@ static INPUT_PORTS_START( tenspot )
PORT_DIPUNKNOWN( 0x80, 0x80 )
PORT_START("FAKE_SELECT") /* fake button to move onto next game - until select rom is understood! */
- PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Next Game (Fake)") PORT_IMPULSE(1)
+ PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Next Game (Fake)") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, galaxian_state, tenspot_fake, nullptr)
PORT_MODIFY("IN0")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY
@@ -6165,9 +6163,6 @@ void galaxian_state::tenspot(machine_config &config)
/* separate tile/sprite ROMs */
m_gfxdecode->set_info(gfx_tenspot);
-
- /* video hardware */
- m_screen->screen_vblank().set(FUNC(galaxian_state::tenspot_interrupt_w));
}
void galaxian_state::zigzag(machine_config &config)
@@ -7040,6 +7035,12 @@ void galaxian_state::init_nolock()
space.unmap_write(0x6002, 0x6002, 0x7f8);
}
+// The first rom loads at 0800, then 1800, 2800?, 3800 and 4800.
+// Unfortunately the 3rd rom appears to be total garbage.
+// Each block of 256 bytes is in reverse order. Some code
+// is missing: 00xx, 4Axx, 10xx, 11xx at least. The game
+// uses 0200-05FF as RAM. It also accesses 6000, 6800, 700x, 7800.
+// Perhaps the missing code was stored in battery-backed RAM?
void galaxian_state::init_warofbugg()
{
uint8_t* romdata = memregion("maincpu")->base();
@@ -7047,9 +7048,10 @@ void galaxian_state::init_warofbugg()
uint8_t buf[0x4000];
memcpy(buf, romdata, 0x4000);
- // the rom data is at the very least, backwards, but there still seems to be missing code
- for (int i = 0; i < 0x4000; i++)
- romdata[i] = buf[i^0x7ff];
+ // unscramble each block
+ for (int i = 0; i < 0x40; i++)
+ for (int j = 0; j < 0x100; j++)
+ romdata[i*256+j] = buf[i*256+(j^0xff)];
init_nolock();
@@ -8465,11 +8467,11 @@ ROM_END
ROM_START( warofbugg )
ROM_REGION( 0x4000, "maincpu", 0 )
- ROM_LOAD( "wotbg-u-1.bin", 0x0000, 0x0800, CRC(f43ff0a8) SHA1(b87abeb8af9105fa8fba78f9a68363bd89066e7f) )
- ROM_LOAD( "wotbg-v-2.bin", 0x0800, 0x0800, CRC(eb7a028b) SHA1(8c822ae11d3cc04f749a7cd639d15b9fc830ab35) )
- ROM_LOAD( "wotbg-w-3.bin", 0x1000, 0x0800, CRC(693e0e50) SHA1(00b19969cee0f95bfb8251c2df133ff2c9ae3b00) )
- ROM_LOAD( "wotbg-y-4.bin", 0x1800, 0x0800, CRC(885d4982) SHA1(4aeaf514a9413a9cb9a971fd258c6cf46ca66fc4) )
- ROM_LOAD( "wotbg-z-5.bin", 0x2000, 0x0800, CRC(60041ef2) SHA1(cced5837a037ac5cd8fa6260d69d8e33de5ecd48) )
+ ROM_LOAD( "wotbg-u-1.bin", 0x0000, 0x0800, CRC(f43ff0a8) SHA1(b87abeb8af9105fa8fba78f9a68363bd89066e7f) ) // -> 0800
+ ROM_LOAD( "wotbg-v-2.bin", 0x0800, 0x0800, CRC(eb7a028b) SHA1(8c822ae11d3cc04f749a7cd639d15b9fc830ab35) ) // -> 1800
+ ROM_LOAD( "wotbg-w-3.bin", 0x1000, 0x0800, CRC(693e0e50) SHA1(00b19969cee0f95bfb8251c2df133ff2c9ae3b00) ) // -> ???? garbage
+ ROM_LOAD( "wotbg-y-4.bin", 0x1800, 0x0800, CRC(885d4982) SHA1(4aeaf514a9413a9cb9a971fd258c6cf46ca66fc4) ) // -> 3800
+ ROM_LOAD( "wotbg-z-5.bin", 0x2000, 0x0800, CRC(60041ef2) SHA1(cced5837a037ac5cd8fa6260d69d8e33de5ecd48) ) // -> 4800
ROM_REGION( 0x1000, "gfx1", 0 )
ROM_LOAD( "warofbug.1k", 0x0000, 0x0800, CRC(8100fa85) SHA1(06641c431cace36dec98b87555f62e72f3e53a31) )
diff --git a/src/mame/drivers/galivan.cpp b/src/mame/drivers/galivan.cpp
index 1bcf2709313..bc6fa8cdb8a 100644
--- a/src/mame/drivers/galivan.cpp
+++ b/src/mame/drivers/galivan.cpp
@@ -44,12 +44,12 @@ TODO
WRITE8_MEMBER(galivan_state::galivan_sound_command_w)
{
- m_soundlatch->write(space,0,((data & 0x7f) << 1) | 1);
+ m_soundlatch->write(((data & 0x7f) << 1) | 1);
}
READ8_MEMBER(galivan_state::soundlatch_clear_r)
{
- m_soundlatch->clear_w(space, 0, 0);
+ m_soundlatch->clear_w();
return 0;
}
diff --git a/src/mame/drivers/galspnbl.cpp b/src/mame/drivers/galspnbl.cpp
index 266975edcf0..a9334dce508 100644
--- a/src/mame/drivers/galspnbl.cpp
+++ b/src/mame/drivers/galspnbl.cpp
@@ -51,7 +51,7 @@ WRITE16_MEMBER(galspnbl_state::soundcommand_w)
{
if (ACCESSING_BITS_0_7)
{
- m_soundlatch->write(space,offset,data & 0xff);
+ m_soundlatch->write(data & 0xff);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
}
diff --git a/src/mame/drivers/gamemachine.cpp b/src/mame/drivers/gamemachine.cpp
index 2fd5afb363b..b746176d95e 100644
--- a/src/mame/drivers/gamemachine.cpp
+++ b/src/mame/drivers/gamemachine.cpp
@@ -40,7 +40,7 @@ Calculator:
Shooting Gallery:
[RET] [Cyc] [Zig] [Rnd] [ ] [ ] [ ] [ ] [ ] [ ] * Cyclic, Zigzag, Random
- [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
+ [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] * + any of 20 buttons for shooting target
Black Jack:
[RET] [Dl ] [ ] [ ] [ ] [ ] [ ] [ ] [Hit] [Stn] * Deal, Hit, Stand
@@ -111,7 +111,7 @@ static NETLIST_START(nl_gamemachine)
CAP(C1, CAP_P(50))
CAP(C2, CAP_U(0.001))
- CAP(C3, CAP_U(0.002)) // Schematics state this as 2pF, doesn't make sense, this looks like a ladder layout
+ CAP(C3, CAP_U(0.002))
CAP(C4, CAP_U(0.005))
CAP(C5, CAP_U(0.010))
diff --git a/src/mame/drivers/gameplan.cpp b/src/mame/drivers/gameplan.cpp
index 57fdb0a0629..b663151fc37 100644
--- a/src/mame/drivers/gameplan.cpp
+++ b/src/mame/drivers/gameplan.cpp
@@ -167,8 +167,7 @@ WRITE_LINE_MEMBER(gameplan_state::r6532_irq)
WRITE8_MEMBER(gameplan_state::r6532_soundlatch_w)
{
- address_space &progspace = m_maincpu->space(AS_PROGRAM);
- m_soundlatch->write(progspace, 0, data);
+ m_soundlatch->write(data);
}
diff --git a/src/mame/drivers/ghosteo.cpp b/src/mame/drivers/ghosteo.cpp
index 2ef6214f5f8..6f9e166c67a 100644
--- a/src/mame/drivers/ghosteo.cpp
+++ b/src/mame/drivers/ghosteo.cpp
@@ -185,7 +185,7 @@ WRITE8_MEMBER( ghosteo_state::qs1000_p3_w )
membank("qs1000:bank")->set_entry(data & 0x07);
if (!BIT(data, 5))
- m_soundlatch->acknowledge_w(space, 0, !BIT(data, 5));
+ m_soundlatch->acknowledge_w();
}
diff --git a/src/mame/drivers/gladiatr.cpp b/src/mame/drivers/gladiatr.cpp
index a641ea11a38..3bb329ab9ea 100644
--- a/src/mame/drivers/gladiatr.cpp
+++ b/src/mame/drivers/gladiatr.cpp
@@ -254,14 +254,14 @@ WRITE8_MEMBER(ppking_state::cpu2_irq_ack_w)
WRITE8_MEMBER(gladiatr_state_base::adpcm_command_w)
{
- m_soundlatch->write(space,0,data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
}
READ8_MEMBER(gladiatr_state_base::adpcm_command_r)
{
m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
- return m_soundlatch->read(space,0);
+ return m_soundlatch->read();
}
WRITE_LINE_MEMBER(gladiatr_state_base::flipscreen_w)
@@ -550,7 +550,7 @@ WRITE8_MEMBER(ppking_state::ppking_qx0_w)
m_mcu[0].txd = data;
m_mcu[1].rst = 0;
- m_soundlatch2->write(space, 0, data & 0xff);
+ m_soundlatch2->write(data & 0xff);
mcu_input_check();
@@ -580,7 +580,7 @@ READ8_MEMBER(ppking_state::ppking_qx1_r)
if(m_mcu[1].rst == 1)
return 0x40;
- return m_soundlatch2->read(space,0);
+ return m_soundlatch2->read();
}
READ8_MEMBER(ppking_state::ppking_qx3_r)
diff --git a/src/mame/drivers/go2000.cpp b/src/mame/drivers/go2000.cpp
index a841c6a9f03..588c2b10b1c 100644
--- a/src/mame/drivers/go2000.cpp
+++ b/src/mame/drivers/go2000.cpp
@@ -85,7 +85,7 @@ private:
WRITE16_MEMBER(go2000_state::sound_cmd_w)
{
- m_soundlatch->write(space, offset, data & 0xff);
+ m_soundlatch->write(data & 0xff);
m_soundcpu->set_input_line(0, HOLD_LINE);
}
diff --git a/src/mame/drivers/goal92.cpp b/src/mame/drivers/goal92.cpp
index 11828b83cf4..d9a83a4058a 100644
--- a/src/mame/drivers/goal92.cpp
+++ b/src/mame/drivers/goal92.cpp
@@ -24,7 +24,7 @@ WRITE16_MEMBER(goal92_state::goal92_sound_command_w)
{
if (ACCESSING_BITS_8_15)
{
- m_soundlatch->write(space, 0, (data >> 8) & 0xff);
+ m_soundlatch->write((data >> 8) & 0xff);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
}
diff --git a/src/mame/drivers/gsword.cpp b/src/mame/drivers/gsword.cpp
index 43ef1af09de..2343771b234 100644
--- a/src/mame/drivers/gsword.cpp
+++ b/src/mame/drivers/gsword.cpp
@@ -395,7 +395,7 @@ WRITE8_MEMBER(gsword_state::nmi_set_w)
WRITE8_MEMBER(gsword_state::sound_command_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
diff --git a/src/mame/drivers/halleys.cpp b/src/mame/drivers/halleys.cpp
index c4278cadb6f..f6c23f9dc17 100644
--- a/src/mame/drivers/halleys.cpp
+++ b/src/mame/drivers/halleys.cpp
@@ -1603,7 +1603,7 @@ WRITE8_MEMBER(halleys_state::sndnmi_msk_w)
WRITE8_MEMBER(halleys_state::soundcommand_w)
{
m_io_ram[0x8a] = data;
- m_soundlatch->write(space,offset,data);
+ m_soundlatch->write(data);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
diff --git a/src/mame/drivers/hh_hmcs40.cpp b/src/mame/drivers/hh_hmcs40.cpp
index b1a48703efa..3e06972b1cb 100644
--- a/src/mame/drivers/hh_hmcs40.cpp
+++ b/src/mame/drivers/hh_hmcs40.cpp
@@ -1773,7 +1773,7 @@ READ8_MEMBER(pairmtch_state::input_r)
WRITE8_MEMBER(pairmtch_state::sound_w)
{
// R5x: soundlatch (to audiocpu R2x)
- m_soundlatch[0]->write(space, 0, bitswap<8>(data,7,6,5,4,0,1,2,3));
+ m_soundlatch[0]->write(bitswap<8>(data,7,6,5,4,0,1,2,3));
}
// handlers: audiocpu side
@@ -1781,7 +1781,7 @@ WRITE8_MEMBER(pairmtch_state::sound_w)
WRITE8_MEMBER(pairmtch_state::sound2_w)
{
// R2x: soundlatch (to maincpu R5x)
- m_soundlatch[1]->write(space, 0, bitswap<8>(data,7,6,5,4,0,1,2,3));
+ m_soundlatch[1]->write(bitswap<8>(data,7,6,5,4,0,1,2,3));
}
WRITE16_MEMBER(pairmtch_state::speaker_w)
diff --git a/src/mame/drivers/hh_pic16.cpp b/src/mame/drivers/hh_pic16.cpp
index 0301dea356b..86d067360bd 100644
--- a/src/mame/drivers/hh_pic16.cpp
+++ b/src/mame/drivers/hh_pic16.cpp
@@ -858,7 +858,7 @@ static INPUT_PORTS_START( matchme )
PORT_CONFSETTING( 0x02^0x07, "3" )
PORT_CONFSETTING( 0x04^0x07, "4" )
PORT_CONFNAME( 0x08, 0x08, DEF_STR( Difficulty ) )
- PORT_CONFSETTING( 0x08, "Amateur" ) // AMR
+ PORT_CONFSETTING( 0x08, "Amateur" ) // AM
PORT_CONFSETTING( 0x00, "Professional" ) // PRO
PORT_START("IN.4") // another fake
diff --git a/src/mame/drivers/hh_sm510.cpp b/src/mame/drivers/hh_sm510.cpp
index aacc0a98ba0..f7365320e96 100644
--- a/src/mame/drivers/hh_sm510.cpp
+++ b/src/mame/drivers/hh_sm510.cpp
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:hap, Sean Riddle, algestam
+// copyright-holders:hap, Sean Riddle, Henrik Algestam
// thanks-to:Igor, ChoccyHobNob, RColtrane
/***************************************************************************
@@ -16,9 +16,8 @@ TODO:
confident that it's same)
- Currently there is no accurate way to dump the SM511/SM511 melody ROM
electronically. For the ones that weren't decapped, they were read by
- playing back all melody data and reconstructing it to ROM.
- Visual(decap) verification is wanted for:
- * gnw_climber, gnw_bjack
+ playing back all melody data and reconstructing it to ROM. Visual(decap)
+ verification is wanted for: gnw_bfight, gnw_bjack, gnw_climber
- identify lcd segments for tgaiden
****************************************************************************
@@ -29,8 +28,9 @@ Trivia: Most of the Nintendo G&W have built-in cheats, likely kept in by
Nintendo to test the game. These were not accessible to users of course,
but for the sake of fun they're (usually) available on MAME.
-BTANB: On some of the earlier G&W games, eg. gnw_mmouse, gnw_pchute, gnw_fire,
-the controls still work after game over, this happens on the real thing too.
+BTANB: On some of the earlier G&W games, eg. gnw_fire, gnw_mmouse, gnw_pchute,
+gnw_popeye, the controls still work after game over, this happens on the real
+thing too.
Game list (* denotes not emulated yet)
@@ -46,7 +46,7 @@ CN-07* g ? Helmet (aka Headache)
LN-08* g ? Lion
PR-21 ws SM5A Parachute
OC-22 ws SM5A Octopus
-PP-23* ws SM5A? Popeye
+PP-23 ws SM5A Popeye
FP-24* ws SM5A Chef
MC-25 ws SM5A Mickey Mouse
EG-26 ws SM5A Egg (near-certainly same ROM as MC-25, but LCD differs)
@@ -85,7 +85,7 @@ NH-103 nws SM510 Manhole
TF-104 nws SM510 Tropical Fish
YM-105 nws SM511 Super Mario Bros.
DR-106 nws SM511 Climber
-BF-107* nws SM511? Balloon Fight
+BF-107 nws SM511 Balloon Fight
MJ-108* nws SM511? Mario The Juggler
BU-201 sc SM510? Spitball Sparky
UD-202* sc SM510? Crab Grab
@@ -94,7 +94,7 @@ 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)
DR-802* cs SM511 Climber "
-BF-803* cs SM511? Balloon Fight "
+BF-803* cs SM511 Balloon Fight "
YM-901-S* x SM511 Super Mario Bros. "
RGW-001 (2010 Ball remake) is on different hardware, ATmega169PV MCU.
@@ -1411,6 +1411,97 @@ ROM_END
/***************************************************************************
+ Nintendo Game & Watch: Popeye (model PP-23)
+ * PCB label PP-23 Y
+ * Sharp SM5A label PP-23 52YD (no decap)
+ * lcd screen with custom segments, 1-bit sound
+
+ This is the wide screen version, there's also tabletop and panorama versions.
+
+***************************************************************************/
+
+class gnw_popeye_state : public hh_sm510_state
+{
+public:
+ gnw_popeye_state(const machine_config &mconfig, device_type type, const char *tag) :
+ hh_sm510_state(mconfig, type, tag)
+ { }
+
+ void gnw_popeye(machine_config &config);
+};
+
+// config
+
+static INPUT_PORTS_START( gnw_popeye )
+ PORT_START("IN.0") // R2
+ PORT_CONFNAME( 0x01, 0x00, "Infinite Lives (Cheat)") // when cheat is activated, not all segments are lit on the ACL reset screen
+ PORT_CONFSETTING( 0x00, DEF_STR( Off ) )
+ PORT_CONFSETTING( 0x01, DEF_STR( On ) )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) // same as 0x01?
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) // reset?
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) // alarm test?
+
+ PORT_START("IN.1") // R3
+ PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("IN.2") // R4
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) PORT_NAME("Time")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) PORT_NAME("Game B")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) PORT_NAME("Game A")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SERVICE2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) PORT_NAME("Alarm")
+
+ PORT_START("BA")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) PORT_16WAY
+
+ PORT_START("B")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) PORT_16WAY
+
+ PORT_START("ACL")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, acl_button, nullptr) PORT_NAME("ACL")
+INPUT_PORTS_END
+
+void gnw_popeye_state::gnw_popeye(machine_config &config)
+{
+ /* basic machine hardware */
+ SM5A(config, m_maincpu);
+ m_maincpu->set_r_mask_option(sm510_base_device::RMASK_DIRECT); // confirmed
+ m_maincpu->write_segs().set(FUNC(hh_sm510_state::sm500_lcd_segment_w));
+ m_maincpu->read_k().set(FUNC(hh_sm510_state::input_r));
+ m_maincpu->write_r().set(FUNC(hh_sm510_state::piezo_input_w));
+ m_maincpu->read_ba().set_ioport("BA");
+ m_maincpu->read_b().set_ioport("B");
+
+ /* video hardware */
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
+ screen.set_svg_region("svg");
+ screen.set_refresh_hz(50);
+ screen.set_size(1604, 1080);
+ screen.set_visarea_full();
+
+ TIMER(config, "display_decay").configure_periodic(FUNC(hh_sm510_state::display_decay_tick), attotime::from_msec(1));
+
+ /* sound hardware */
+ SPEAKER(config, "mono").front_center();
+ SPEAKER_SOUND(config, m_speaker);
+ m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
+}
+
+// roms
+
+ROM_START( gnw_popeye )
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "pp-23", 0x0000, 0x0740, CRC(49987769) SHA1(ad90659a3ce7169a4df16367c5307435d9f9d956) )
+
+ ROM_REGION( 218428, "svg", 0)
+ ROM_LOAD( "gnw_popeye.svg", 0, 218428, CRC(b2c3fdf2) SHA1(5e782f25f9ff432a292e67efc7f5653cf2a81b60) )
+ROM_END
+
+
+
+
+
+/***************************************************************************
+
Nintendo Game & Watch: Mickey Mouse (model MC-25), Egg (model EG-26)
* Sharp SM5A label ?
* lcd screen with custom segments, 1-bit sound
@@ -3275,6 +3366,7 @@ 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 ?)
* lcd screen with custom segments, 1-bit sound
@@ -3462,6 +3554,100 @@ ROM_END
/***************************************************************************
+ Nintendo Game & Watch: Balloon Fight (model: see below)
+ * PCB label DR-106 (same PCB as in Climber (new wide screen version))
+ * Sharp SM511 label BF-107 9031B (new wide screen version) (no decap)
+ * lcd screen with custom segments, 1-bit sound
+
+ First released in 1986 on Crystal Screen (model BF-803), rereleased on
+ New Wide Screen in 1988 (model BF-107). The graphic LCD elements look the same
+ in both versions but the graphical background is slightly different.
+ Until further proof, it's assumed that the ROM is the same for both models.
+
+***************************************************************************/
+
+class gnw_bfight_state : public hh_sm510_state
+{
+public:
+ gnw_bfight_state(const machine_config &mconfig, device_type type, const char *tag) :
+ hh_sm510_state(mconfig, type, tag)
+ { }
+
+ void gnw_bfight(machine_config &config);
+};
+
+// config
+
+static INPUT_PORTS_START( gnw_bfight )
+ PORT_START("IN.0") // S1
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) PORT_NAME("Time")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) PORT_NAME("Game")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) PORT_NAME("Alarm")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("IN.1") // S2
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr)
+
+ PORT_START("IN.2") // S3
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) // Eject
+ PORT_BIT( 0x0e, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("ACL")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, acl_button, nullptr) PORT_NAME("ACL")
+
+ PORT_START("B") // MCU B(beta) pin pulled to GND
+ PORT_CONFNAME( 0x01, 0x01, "Infinite Lives (Cheat)")
+ PORT_CONFSETTING( 0x01, DEF_STR( Off ) )
+ PORT_CONFSETTING( 0x00, DEF_STR( On ) )
+INPUT_PORTS_END
+
+void gnw_bfight_state::gnw_bfight(machine_config &config)
+{
+ /* basic machine hardware */
+ SM511(config, m_maincpu);
+ m_maincpu->write_segs().set(FUNC(hh_sm510_state::sm510_lcd_segment_w));
+ m_maincpu->read_k().set(FUNC(hh_sm510_state::input_r));
+ 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_b().set_ioport("B");
+
+ /* video hardware */
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
+ screen.set_svg_region("svg");
+ screen.set_refresh_hz(50);
+ screen.set_size(1549, 1080);
+ screen.set_visarea_full();
+
+ TIMER(config, "display_decay").configure_periodic(FUNC(hh_sm510_state::display_decay_tick), attotime::from_msec(1));
+
+ /* sound hardware */
+ SPEAKER(config, "mono").front_center();
+ SPEAKER_SOUND(config, m_speaker);
+ m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
+}
+
+// roms
+
+ROM_START( gnw_bfight )
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "bf-107.program", 0x0000, 0x1000, CRC(4c8d07ed) SHA1(a8974dff85d5f3bacaadb71b86e9b30994b6d129) )
+
+ ROM_REGION( 0x100, "maincpu:melody", 0 )
+ ROM_LOAD( "bf-107.melody", 0x000, 0x100, BAD_DUMP CRC(aadc22a1) SHA1(f6e5572232eb9e83f6833073e1e1e99776245c50) ) // decap needed for verification
+
+ ROM_REGION( 558341, "svg", 0)
+ ROM_LOAD( "gnw_bfight.svg", 0, 558341, CRC(f0d61fe8) SHA1(b0b56224a967e4b26836c0f7e3015d13b42ae5cc) )
+ROM_END
+
+
+
+
+
+/***************************************************************************
+
Nintendo Micro Vs. System: Boxing (model BX-301)
* Sharp SM511 label BX-301 287C (die label KMS73B, KMS744)
* wide lcd screen with custom segments, 1-bit sound
@@ -8776,6 +8962,7 @@ CONS( 1991, kgarfld, 0, 0, kgarfld, kgarfld, kgarfld_state,
// Nintendo G&W: wide screen
CONS( 1981, gnw_pchute, 0, 0, gnw_pchute, gnw_pchute, gnw_pchute_state, empty_init, "Nintendo", "Game & Watch: Parachute", MACHINE_SUPPORTS_SAVE )
CONS( 1981, gnw_octopus, 0, 0, gnw_octopus, gnw_octopus, gnw_octopus_state, empty_init, "Nintendo", "Game & Watch: Octopus", MACHINE_SUPPORTS_SAVE )
+CONS( 1981, gnw_popeye, 0, 0, gnw_popeye, gnw_popeye, gnw_popeye_state, empty_init, "Nintendo", "Game & Watch: Popeye (wide screen)", MACHINE_SUPPORTS_SAVE )
CONS( 1981, gnw_mmouse, 0, 0, gnw_mmouse, gnw_mmouse, gnw_mmouse_state, empty_init, "Nintendo", "Game & Watch: Mickey Mouse", MACHINE_SUPPORTS_SAVE )
CONS( 1981, gnw_egg, gnw_mmouse, 0, gnw_egg, gnw_mmouse, gnw_mmouse_state, empty_init, "Nintendo", "Game & Watch: Egg", MACHINE_SUPPORTS_SAVE )
CONS( 1984, nupogodi, gnw_mmouse, 0, nupogodi, gnw_mmouse, gnw_mmouse_state, empty_init, "Elektronika", "Nu, pogodi!", MACHINE_SUPPORTS_SAVE )
@@ -8804,6 +8991,7 @@ CONS( 1983, gnw_manhole, 0, 0, gnw_manhole, gnw_manhole, gnw_manhole_st
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( 1988, gnw_climber, 0, 0, gnw_climber, gnw_climber, gnw_climber_state, empty_init, "Nintendo", "Game & Watch: Climber (new wide screen)", MACHINE_SUPPORTS_SAVE )
+CONS( 1988, gnw_bfight, 0, 0, gnw_bfight, gnw_bfight, gnw_bfight_state, empty_init, "Nintendo", "Game & Watch: Balloon Fight (new wide screen)", MACHINE_SUPPORTS_SAVE )
// Nintendo G&W: micro vs. system (actually, no official Game & Watch logo anywhere)
CONS( 1984, gnw_boxing, 0, 0, gnw_boxing, gnw_boxing, gnw_boxing_state, empty_init, "Nintendo", "Micro Vs. System: Boxing", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp
index 37b19a1b17d..3a650e9cd06 100644
--- a/src/mame/drivers/hh_tms1k.cpp
+++ b/src/mame/drivers/hh_tms1k.cpp
@@ -228,7 +228,7 @@
#include "tcfballa.lh"
#include "timaze.lh"
#include "xl25.lh" // clickable
-#include "zodiac.lh"
+#include "zodiac.lh" // clickable
//#include "hh_tms1k_test.lh" // common test-layout - use external artwork
@@ -394,6 +394,17 @@ u8 hh_tms1k_state::read_rotated_inputs(int columns, u8 rowmask)
return ret;
}
+void hh_tms1k_state::switch_change(int sel, u32 mask, bool next)
+{
+ // config switches (for direct control)
+ ioport_field *inp = m_inp_matrix[sel]->field(mask);
+
+ if (next && inp->has_next_setting())
+ inp->select_next_setting();
+ else if (!next && inp->has_previous_setting())
+ inp->select_previous_setting();
+}
+
INPUT_CHANGED_MEMBER(hh_tms1k_state::reset_button)
{
// when an input is directly wired to MCU INIT pin
@@ -1213,7 +1224,7 @@ static INPUT_PORTS_START( zodiac )
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter") PORT_CHAR(13)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME("Clear") PORT_CHAR(8)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME("Clear") PORT_CHAR(8)
PORT_START("IN.5") // R8
PORT_CONFNAME( 0x03, 0x01, "Mode")
@@ -6724,6 +6735,12 @@ static INPUT_PORTS_START( simon )
PORT_CONFSETTING( 0x04, "2" )
PORT_CONFSETTING( 0x08, "3" )
PORT_CONFSETTING( 0x01, "4" )
+
+ PORT_START("SWITCH") // fake
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_prev<0>, 0x07)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_next<0>, 0x07)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_prev<3>, 0x0f)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_next<3>, 0x0f)
INPUT_PORTS_END
void simon_state::simon(machine_config &config)
@@ -6882,6 +6899,14 @@ static INPUT_PORTS_START( ssimon )
PORT_CONFSETTING( 0x00, "Simple" )
PORT_CONFSETTING( 0x01, "Normal" )
PORT_CONFSETTING( 0x02, "Super" )
+
+ PORT_START("SWITCH") // fake
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_prev<0>, 0x0f)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_next<0>, 0x0f)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_prev<4>, 0x0f)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_next<4>, 0x0f)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_prev<6>, 0x03)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_next<6>, 0x03)
INPUT_PORTS_END
void ssimon_state::ssimon(machine_config &config)
@@ -8373,8 +8398,6 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
- TIMER_DEVICE_CALLBACK_MEMBER(show_arm_position);
-
DECLARE_WRITE16_MEMBER(write_r);
DECLARE_WRITE16_MEMBER(write_o);
DECLARE_READ8_MEMBER(read_k);
@@ -8383,13 +8406,6 @@ public:
// handlers
-TIMER_DEVICE_CALLBACK_MEMBER(alphie_state::show_arm_position)
-{
- // arm position 1(up) to 5(down)
- output().set_value("q_pos", 32 - count_leading_zeros(m_inp_matrix[1]->read()));
- output().set_value("a_pos", 32 - count_leading_zeros(m_inp_matrix[2]->read()));
-}
-
WRITE16_MEMBER(alphie_state::write_r)
{
// R1-R5, input mux (using d5 for Vss)
@@ -8419,17 +8435,25 @@ READ8_MEMBER(alphie_state::read_k)
// config
-static const ioport_value alphie_armpos_table[5] = { 0x01, 0x02, 0x04, 0x08, 0x10 };
-
static INPUT_PORTS_START( alphie )
PORT_START("IN.0") // K1
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, power_button, true)
PORT_START("IN.1") // K2
- PORT_BIT( 0x1f, 0x00, IPT_POSITIONAL_V ) PORT_PLAYER(2) PORT_POSITIONS(5) PORT_REMAP_TABLE(alphie_armpos_table) PORT_SENSITIVITY(10) PORT_KEYDELTA(1) PORT_CENTERDELTA(0) PORT_NAME("Question Arm")
+ PORT_CONFNAME( 0x1f, 0x01, "Question" )
+ PORT_CONFSETTING( 0x01, "1" )
+ PORT_CONFSETTING( 0x02, "2" )
+ PORT_CONFSETTING( 0x04, "3" )
+ PORT_CONFSETTING( 0x08, "4" )
+ PORT_CONFSETTING( 0x10, "5" )
PORT_START("IN.2") // K4
- PORT_BIT( 0x1f, 0x00, IPT_POSITIONAL_V ) PORT_POSITIONS(5) PORT_REMAP_TABLE(alphie_armpos_table) PORT_SENSITIVITY(10) PORT_KEYDELTA(1) PORT_CENTERDELTA(0) PORT_NAME("Answer Arm")
+ PORT_CONFNAME( 0x1f, 0x01, "Answer" )
+ PORT_CONFSETTING( 0x01, "1" )
+ PORT_CONFSETTING( 0x02, "2" )
+ PORT_CONFSETTING( 0x04, "3" )
+ PORT_CONFSETTING( 0x08, "4" )
+ PORT_CONFSETTING( 0x10, "5" )
PORT_START("IN.3") // K8
PORT_CONFNAME( 0x0f, 0x01, "Activity" )
@@ -8437,6 +8461,14 @@ static INPUT_PORTS_START( alphie )
PORT_CONFSETTING( 0x02, "Lunar Landing" )
PORT_CONFSETTING( 0x04, "Robot Land" )
PORT_CONFSETTING( 0x08, "Tunes" )
+
+ PORT_START("SWITCH") // fake
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_UP ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_prev<1>, 0x1f) PORT_NAME("Question Arm Up")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_DOWN ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_next<1>, 0x1f) PORT_NAME("Question Arm Down")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_UP ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_prev<2>, 0x1f) PORT_NAME("Answer Arm Up")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_DOWN ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_next<2>, 0x1f) PORT_NAME("Answer Arm Down")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_prev<3>, 0x0f) PORT_NAME("Activity Selector Left")
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_next<3>, 0x0f) PORT_NAME("Activity Selector Right")
INPUT_PORTS_END
// output PLA is guessed
@@ -8455,7 +8487,6 @@ void alphie_state::alphie(machine_config &config)
m_maincpu->r().set(FUNC(alphie_state::write_r));
m_maincpu->o().set(FUNC(alphie_state::write_o));
- TIMER(config, "arm_position").configure_periodic(FUNC(alphie_state::show_arm_position), attotime::from_msec(50));
TIMER(config, "display_decay").configure_periodic(FUNC(hh_tms1k_state::display_decay_tick), attotime::from_msec(1));
config.set_default_layout(layout_alphie);
@@ -10326,7 +10357,7 @@ COMP( 1980, mathmagi, 0, 0, mathmagi, mathmagi, mathmagi_state, emp
CONS( 1979, bcheetah, 0, 0, bcheetah, bcheetah, bcheetah_state, empty_init, "Bandai", "System Control Car: Cheetah", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW | MACHINE_MECHANICAL ) // ***
CONS( 1978, amaztron, 0, 0, amaztron, amaztron, amaztron_state, empty_init, "Coleco", "Amaze-A-Tron", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) // ***
-COMP( 1979, zodiac, 0, 0, zodiac, zodiac, zodiac_state, empty_init, "Coleco", "Zodiac - The Astrology Computer", MACHINE_SUPPORTS_SAVE )
+COMP( 1979, zodiac, 0, 0, zodiac, zodiac, zodiac_state, empty_init, "Coleco", "Zodiac - The Astrology Computer", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1978, cqback, 0, 0, cqback, cqback, cqback_state, empty_init, "Coleco", "Electronic Quarterback", MACHINE_SUPPORTS_SAVE )
CONS( 1979, h2hfootb, 0, 0, h2hfootb, h2hfootb, h2hfootb_state, empty_init, "Coleco", "Head to Head: Electronic Football", MACHINE_SUPPORTS_SAVE )
CONS( 1979, h2hbaskb, 0, 0, h2hbaskb, h2hbaskb, h2hbaskb_state, empty_init, "Coleco", "Head to Head: Electronic Basketball (TMS1000 version)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/himesiki.cpp b/src/mame/drivers/himesiki.cpp
index 11450a4f99c..d785957e74f 100644
--- a/src/mame/drivers/himesiki.cpp
+++ b/src/mame/drivers/himesiki.cpp
@@ -117,7 +117,7 @@ WRITE8_MEMBER(himesiki_state::himesiki_rombank_w)
WRITE8_MEMBER(himesiki_state::himesiki_sound_w)
{
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
m_subcpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
diff --git a/src/mame/drivers/homedata.cpp b/src/mame/drivers/homedata.cpp
index b43a51f46fa..e0d202ed7d9 100644
--- a/src/mame/drivers/homedata.cpp
+++ b/src/mame/drivers/homedata.cpp
@@ -311,7 +311,7 @@ WRITE8_MEMBER(homedata_state::mrokumei_sound_bank_w)
WRITE8_MEMBER(homedata_state::mrokumei_sound_cmd_w)
{
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
@@ -430,7 +430,7 @@ READ8_MEMBER(homedata_state::pteacher_keyboard_r)
READ8_MEMBER(homedata_state::pteacher_upd7807_porta_r)
{
if (!BIT(m_upd7807_portc, 6))
- m_upd7807_porta = m_soundlatch->read(space, 0);
+ m_upd7807_porta = m_soundlatch->read();
else
logerror("%s: read PA with PC *not* clear\n", machine().describe_context());
diff --git a/src/mame/drivers/hotblock.cpp b/src/mame/drivers/hotblock.cpp
index c053f266313..edc22b3f467 100644
--- a/src/mame/drivers/hotblock.cpp
+++ b/src/mame/drivers/hotblock.cpp
@@ -92,7 +92,7 @@ READ8_MEMBER(hotblock_state::video_read)
if (m_port0 & 0x20) // port 0 = a8 e8 -- palette
{
if (offset < 0x200)
- return m_palette->read8(space, offset);
+ return m_palette->read8(offset);
return 0;
}
@@ -130,7 +130,7 @@ WRITE8_MEMBER(hotblock_state::video_write)
if (m_port0 & 0x20) // port 0 = a8 e8 -- palette
{
if (offset < 0x200)
- m_palette->write8(space, offset, data);
+ m_palette->write8(offset, data);
}
else // port 0 = 88 c8
{
diff --git a/src/mame/drivers/hvyunit.cpp b/src/mame/drivers/hvyunit.cpp
index 8290f0d6837..fc0b73138ff 100644
--- a/src/mame/drivers/hvyunit.cpp
+++ b/src/mame/drivers/hvyunit.cpp
@@ -327,10 +327,10 @@ READ8_MEMBER(hvyunit_state::mermaid_p0_r)
WRITE8_MEMBER(hvyunit_state::mermaid_p0_w)
{
if (!BIT(m_mermaid_p[0], 1) && BIT(data, 1))
- m_slavelatch->write(space, 0, m_mermaid_p[1]);
+ m_slavelatch->write(m_mermaid_p[1]);
if (BIT(data, 0) == 0)
- m_mermaid_p[1] = m_mermaidlatch->read(space, 0);
+ m_mermaid_p[1] = m_mermaidlatch->read();
m_mermaid_p[0] = data;
}
diff --git a/src/mame/drivers/inder.cpp b/src/mame/drivers/inder.cpp
index 5ba2087af90..9cfa448e438 100644
--- a/src/mame/drivers/inder.cpp
+++ b/src/mame/drivers/inder.cpp
@@ -1268,9 +1268,9 @@ WRITE8_MEMBER( inder_state::sndbank_w )
void inder_state::update_mus()
{
if ((m_sound_addr < 0x40000) && (m_sndbank != 0xff))
- m_13->write_ba(m_p_speech[m_sound_addr]);
+ m_13->ba_w(m_p_speech[m_sound_addr]);
else
- m_13->write_ba(0);
+ m_13->ba_w(0);
}
WRITE_LINE_MEMBER( inder_state::qc7a_w )
diff --git a/src/mame/drivers/invqix.cpp b/src/mame/drivers/invqix.cpp
index 536e7f6e8fc..bfd2ffeba4d 100644
--- a/src/mame/drivers/invqix.cpp
+++ b/src/mame/drivers/invqix.cpp
@@ -2,7 +2,7 @@
// copyright-holders:R. Belmont
/***************************************************************************
- invqix.c
+ invqix.cpp
Space Invaders / Qix Silver Anniversary Edition
Taito/Namco America inc.
diff --git a/src/mame/drivers/ironhors.cpp b/src/mame/drivers/ironhors.cpp
index 421898ca5f9..a5d64a49be4 100644
--- a/src/mame/drivers/ironhors.cpp
+++ b/src/mame/drivers/ironhors.cpp
@@ -436,7 +436,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(ironhors_state::farwest_scanline_tick)
READ8_MEMBER(ironhors_state::farwest_soundlatch_r)
{
- return m_soundlatch->read(m_soundcpu->space(AS_PROGRAM), 0);
+ return m_soundlatch->read();
}
void ironhors_state::farwest(machine_config &config)
diff --git a/src/mame/drivers/isbc8010.cpp b/src/mame/drivers/isbc8010.cpp
index f6537974f96..d13e49b7fa4 100644
--- a/src/mame/drivers/isbc8010.cpp
+++ b/src/mame/drivers/isbc8010.cpp
@@ -224,9 +224,9 @@ void isbc8010_state::isbc8010(machine_config &config)
// hd6402.read_si_callback().set(FUNC(sdk80_state::nascom1_hd6402_si));
// hd6402.write_so_callback().set(FUNC(sdk80_state::nascom1_hd6402_so));
-// clock_device &uart_clock(CLOCK(config, "uart_clock", (XTAL(16'000'000) / 16) / 256));
-// uart_clock.signal_handler().set("hd6402", FUNC(ay31015_device::write_tcp));
-// uart_clock.signal_handler().append("hd6402", FUNC(ay31015_device::write_rcp));
+// clock_device &uart_clock(CLOCK(config, "uart_clock", (XTAL(16'000'000) / 16) / 256));
+// uart_clock.signal_handler().set("hd6402", FUNC(ay31015_device::write_tcp));
+// uart_clock.signal_handler().append("hd6402", FUNC(ay31015_device::write_rcp));
/* Devices */
// i8279_device &kbdc(I8279(config, "i8279", 3100000)); // based on divider
diff --git a/src/mame/drivers/itech8.cpp b/src/mame/drivers/itech8.cpp
index aa4b51c5d35..79886c8b5f3 100644
--- a/src/mame/drivers/itech8.cpp
+++ b/src/mame/drivers/itech8.cpp
@@ -814,7 +814,7 @@ WRITE8_MEMBER(itech8_state::gtg2_sound_data_w)
((data & 0x5d) << 1) |
((data & 0x20) >> 3) |
((data & 0x02) << 5);
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
}
diff --git a/src/mame/drivers/jangou.cpp b/src/mame/drivers/jangou.cpp
index f35b4a257f1..7a5f2409031 100644
--- a/src/mame/drivers/jangou.cpp
+++ b/src/mame/drivers/jangou.cpp
@@ -260,14 +260,14 @@ READ8_MEMBER(jangou_state::input_system_r)
WRITE8_MEMBER(jangou_state::sound_latch_w)
{
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
m_cpu_1->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
}
READ8_MEMBER(jangou_state::sound_latch_r)
{
m_cpu_1->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
- return m_soundlatch->read(space, 0);
+ return m_soundlatch->read();
}
/* Jangou HC-55516 CVSD */
diff --git a/src/mame/drivers/joystand.cpp b/src/mame/drivers/joystand.cpp
index 633de6a096e..2d6544d7069 100644
--- a/src/mame/drivers/joystand.cpp
+++ b/src/mame/drivers/joystand.cpp
@@ -106,7 +106,6 @@ public:
joystand_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
- m_tmp68301(*this, "tmp68301"),
m_palette(*this, "palette"),
m_bg15_palette(*this, "bg15_palette"),
m_gfxdecode(*this, "gfxdecode"),
@@ -142,8 +141,7 @@ protected:
private:
// devices
- required_device<cpu_device> m_maincpu;
- required_device<tmp68301_device> m_tmp68301;
+ required_device<tmp68301_device> m_maincpu;
required_device<palette_device> m_palette;
required_device<palette_device> m_bg15_palette;
required_device<gfxdecode_device> m_gfxdecode;
@@ -479,8 +477,6 @@ void joystand_state::joystand_map(address_map &map)
map(0xe00020, 0xe00021).r(FUNC(joystand_state::e00020_r)); // master slot
map(0xe80040, 0xe8005f).rw("rtc", FUNC(msm6242_device::read), FUNC(msm6242_device::write)).umask16(0x00ff);
-
- map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
}
@@ -584,21 +580,17 @@ void joystand_state::machine_reset()
INTERRUPT_GEN_MEMBER(joystand_state::joystand_interrupt)
{
// VBlank is connected to INT1 (external interrupts pin 1)
- m_tmp68301->external_interrupt_1();
+ m_maincpu->external_interrupt_1();
}
void joystand_state::joystand(machine_config &config)
{
// basic machine hardware
- M68000(config, m_maincpu, XTAL(16'000'000)); // !! TMP68301 !!
+ TMP68301(config, m_maincpu, XTAL(16'000'000));
m_maincpu->set_addrmap(AS_PROGRAM, &joystand_state::joystand_map);
m_maincpu->set_vblank_int("screen", FUNC(joystand_state::joystand_interrupt));
- m_maincpu->set_irq_acknowledge_callback("tmp68301", FUNC(tmp68301_device::irq_callback));
-
- TMP68301(config, m_tmp68301, 0);
- m_tmp68301->set_cputag(m_maincpu);
- m_tmp68301->in_parallel_callback().set(FUNC(joystand_state::eeprom_r));
- m_tmp68301->out_parallel_callback().set(FUNC(joystand_state::eeprom_w));
+ m_maincpu->in_parallel_callback().set(FUNC(joystand_state::eeprom_r));
+ m_maincpu->out_parallel_callback().set(FUNC(joystand_state::eeprom_w));
// video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
diff --git a/src/mame/drivers/kas89.cpp b/src/mame/drivers/kas89.cpp
index 5de1f4a17af..8cb66d12e2b 100644
--- a/src/mame/drivers/kas89.cpp
+++ b/src/mame/drivers/kas89.cpp
@@ -389,14 +389,14 @@ WRITE8_MEMBER(kas89_state::sound_comm_w)
else
{
- m_soundlatch->write(space, 0, data);
- m_audiocpu->set_input_line(0, ASSERT_LINE );
+ m_soundlatch->write(data);
+ m_audiocpu->set_input_line(0, ASSERT_LINE);
}
}
WRITE8_MEMBER(kas89_state::int_ack_w)
{
- m_audiocpu->set_input_line(0, CLEAR_LINE );
+ m_audiocpu->set_input_line(0, CLEAR_LINE);
}
diff --git a/src/mame/drivers/kchamp.cpp b/src/mame/drivers/kchamp.cpp
index f207a1dda29..8c4a19ef8b3 100644
--- a/src/mame/drivers/kchamp.cpp
+++ b/src/mame/drivers/kchamp.cpp
@@ -681,6 +681,92 @@ ROM_START( kchampvs2 )
ROM_LOAD( "lt.k8", 0x0200, 0x0100, CRC(ba4a5651) SHA1(77e81bd64ab59a7466d20eabdff4be241e963c52) ) /* blue */
ROM_END
+// This version has a mix of the "Karate Champ (US VS version, set 1)" ROMs and a few ROMs unique to "Taisen Karate Dou (Japan VS version)" along with 1 completely unique program ROM.
+// The only difference is instead of "My hero" as found in the later US sets it says "My hero deserves the fair".
+ROM_START( kchampvs3 )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "bs24.d13", 0x00000, 0x02000, CRC(829da69b) SHA1(3266e7686e537f34ee5ce4cccc349eb12fc65038) )
+ ROM_LOAD( "bs23.d11", 0x02000, 0x02000, CRC(091f810e) SHA1(283edb08ce106835185a1c2d6b88f7544d75f3b4) )
+ ROM_LOAD( "bs22.d10", 0x04000, 0x02000, CRC(d4df2a52) SHA1(60d6cb1cb51c6f80a0f88913d4152ab8bda752d6) )
+ ROM_LOAD( "bs21.d8", 0x06000, 0x02000, CRC(80839912) SHA1(4a3c6ad8eba756ae8e89faf42b72b41f85731e67) ) // only unique ROM
+ ROM_LOAD( "bs20.d7", 0x08000, 0x02000, CRC(623a467b) SHA1(5f150c67632f8e32769b75aa0615d0eb018afdc4) )
+ ROM_LOAD( "bs19.d6", 0x0a000, 0x02000, CRC(43e196c4) SHA1(8029798ea0a560603c3dcde56db5a1ccde58c514) )
+ ROM_CONTINUE( 0x0e000, 0x02000 )
+
+ ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU */
+ ROM_LOAD( "bs18.d4", 0x00000, 0x02000, CRC(eaa646eb) SHA1(cbd48f4d5d225b71c2dd0b14f420838561e3f83e) )
+ ROM_LOAD( "bs17.d2", 0x02000, 0x02000, CRC(d71031ad) SHA1(b168f4ef4feb4195305404df699acecb731eab02) )
+ ROM_LOAD( "bs16.d1", 0x04000, 0x02000, CRC(6f811c43) SHA1(1d33ac8129562ab709bd7396b4c2457b6db99277) )
+
+ ROM_REGION( 0x08000, "gfx1", 0 )
+ ROM_LOAD( "bs12.k1", 0x00000, 0x02000, CRC(4c574ecd) SHA1(86914eef33da73463ba6261eecae75209d24fac1) )
+ ROM_LOAD( "bs13.k3", 0x02000, 0x02000, CRC(750b66af) SHA1(c7824994b977d4e846f3ecadfcfc51331f52b6f4) )
+ ROM_LOAD( "bs14.k5", 0x04000, 0x02000, CRC(9ad6227c) SHA1(708af5e70927040cf7f2ae6f792344c19099530c) )
+ ROM_LOAD( "bs15.k6", 0x06000, 0x02000, CRC(3b6d5de5) SHA1(288fffcbc9369db5c75e7e0d6181612de6f12da3) )
+
+ ROM_REGION( 0x18000, "gfx2", 0 ) // 00, 06, 03 and 09 match the karatevs set
+ ROM_LOAD( "bs00.a1", 0x00000, 0x02000, CRC(c46a8b88) SHA1(a47e56a6dc7f36b896b8156e77a1da7e8be2332e) )
+ ROM_LOAD( "bs06.c1", 0x02000, 0x02000, CRC(cf8982ff) SHA1(aafb249503ad51f64b1f31ea2d869dfc0e065d19) )
+ ROM_LOAD( "bs01.a3", 0x04000, 0x02000, CRC(b4842ea9) SHA1(471475f65edbd292b9162ad50e5cb0c7144845b0) )
+ ROM_LOAD( "bs07.c3", 0x06000, 0x02000, CRC(8cd166a5) SHA1(4b623c4c0025d75b3ed9746f8b6730bf3e65d85a) )
+ ROM_LOAD( "bs02.a5", 0x08000, 0x02000, CRC(4cbd3aa3) SHA1(a9a683dcc4f52b18450659a20434a4d2a7b411d9) )
+ ROM_LOAD( "bs08.c5", 0x0a000, 0x02000, CRC(6be342a6) SHA1(0b8ac7ef7c6a6464fbc027a9fd17fa7ce1ffd962) )
+ ROM_LOAD( "bs03.a6", 0x0c000, 0x02000, CRC(bde8a52b) SHA1(1a0800472caf8c79a15cc977dad1a7bc97c74b2b) )
+ ROM_LOAD( "bs09.c6", 0x0e000, 0x02000, CRC(e9a5f945) SHA1(e6b21912bee97de06819c8ac85a45bbc70030f88) )
+ ROM_LOAD( "bs04.a8", 0x10000, 0x02000, CRC(7346db8a) SHA1(d2b2c1700ae0ff9c614a9981a3da3d69879e9f25) )
+ ROM_LOAD( "bs10.c8", 0x12000, 0x02000, CRC(b78714fc) SHA1(4df7f15c37d56a9d66d0049aad65b32063e5c29a) )
+ ROM_LOAD( "bs05.a10", 0x14000, 0x02000, CRC(b2557102) SHA1(ec4285029fc3ee1ad0adb05f363b234c67f8903d) )
+ ROM_LOAD( "bs11.c10", 0x16000, 0x02000, CRC(c85aba0e) SHA1(4be21b38623c2a8ae7f1e7397fb002e4cb9e4614) )
+
+ ROM_REGION( 0x0300, "proms", 0 )
+ ROM_LOAD( "br27.k10", 0x0000, 0x0100, CRC(f683c54a) SHA1(92893990456b92f04a2be98b8e9626e97b7a2562) ) /* red */
+ ROM_LOAD( "br26.k9", 0x0100, 0x0100, CRC(3ddbb6c4) SHA1(0eca5594d6812bc79f8b78f83fe003877d20c973) ) /* green */
+ ROM_LOAD( "br25.k8", 0x0200, 0x0100, CRC(ba4a5651) SHA1(77e81bd64ab59a7466d20eabdff4be241e963c52) ) /* blue */
+ROM_END
+
+// This version has a mix of the "Karate Champ (US VS version, set 1)" ROMs and a few ROMs unique to "Taisen Karate Dou (Japan VS version)".
+// It displays the dialog balloon in red with a boat below it.
+ROM_START( kchampvs4 )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "bs24.d13", 0x00000, 0x02000, CRC(829da69b) SHA1(3266e7686e537f34ee5ce4cccc349eb12fc65038) )
+ ROM_LOAD( "bs23.d11", 0x02000, 0x02000, CRC(091f810e) SHA1(283edb08ce106835185a1c2d6b88f7544d75f3b4) )
+ ROM_LOAD( "bs22.d10", 0x04000, 0x02000, CRC(d4df2a52) SHA1(60d6cb1cb51c6f80a0f88913d4152ab8bda752d6) )
+ ROM_LOAD( "bs21.d8", 0x06000, 0x02000, CRC(3d4ef0da) SHA1(228c8e47bb7123b69746506402edb875a43d7af5) )
+ ROM_LOAD( "bs20.d7", 0x08000, 0x02000, CRC(623a467b) SHA1(5f150c67632f8e32769b75aa0615d0eb018afdc4) )
+ ROM_LOAD( "bs19.d6", 0x0a000, 0x02000, CRC(43e196c4) SHA1(8029798ea0a560603c3dcde56db5a1ccde58c514) )
+ ROM_CONTINUE( 0x0e000, 0x02000 )
+
+ ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU */
+ ROM_LOAD( "bs18.d4", 0x00000, 0x02000, CRC(eaa646eb) SHA1(cbd48f4d5d225b71c2dd0b14f420838561e3f83e) )
+ ROM_LOAD( "bs17.d2", 0x02000, 0x02000, CRC(d71031ad) SHA1(b168f4ef4feb4195305404df699acecb731eab02) )
+ ROM_LOAD( "bs16.d1", 0x04000, 0x02000, CRC(6f811c43) SHA1(1d33ac8129562ab709bd7396b4c2457b6db99277) )
+
+ ROM_REGION( 0x08000, "gfx1", 0 )
+ ROM_LOAD( "bs12.k1", 0x00000, 0x02000, CRC(4c574ecd) SHA1(86914eef33da73463ba6261eecae75209d24fac1) )
+ ROM_LOAD( "bs13.k3", 0x02000, 0x02000, CRC(750b66af) SHA1(c7824994b977d4e846f3ecadfcfc51331f52b6f4) )
+ ROM_LOAD( "bs14.k5", 0x04000, 0x02000, CRC(9ad6227c) SHA1(708af5e70927040cf7f2ae6f792344c19099530c) )
+ ROM_LOAD( "bs15.k6", 0x06000, 0x02000, CRC(3b6d5de5) SHA1(288fffcbc9369db5c75e7e0d6181612de6f12da3) )
+
+ ROM_REGION( 0x18000, "gfx2", 0 ) // 00, 06, 03 and 09 match the karatevs set
+ ROM_LOAD( "bs00.a1", 0x00000, 0x02000, CRC(c46a8b88) SHA1(a47e56a6dc7f36b896b8156e77a1da7e8be2332e) )
+ ROM_LOAD( "bs06.c1", 0x02000, 0x02000, CRC(cf8982ff) SHA1(aafb249503ad51f64b1f31ea2d869dfc0e065d19) )
+ ROM_LOAD( "bs01.a3", 0x04000, 0x02000, CRC(b4842ea9) SHA1(471475f65edbd292b9162ad50e5cb0c7144845b0) )
+ ROM_LOAD( "bs07.c3", 0x06000, 0x02000, CRC(8cd166a5) SHA1(4b623c4c0025d75b3ed9746f8b6730bf3e65d85a) )
+ ROM_LOAD( "bs02.a5", 0x08000, 0x02000, CRC(4cbd3aa3) SHA1(a9a683dcc4f52b18450659a20434a4d2a7b411d9) )
+ ROM_LOAD( "bs08.c5", 0x0a000, 0x02000, CRC(6be342a6) SHA1(0b8ac7ef7c6a6464fbc027a9fd17fa7ce1ffd962) )
+ ROM_LOAD( "bs03.a6", 0x0c000, 0x02000, CRC(bde8a52b) SHA1(1a0800472caf8c79a15cc977dad1a7bc97c74b2b) )
+ ROM_LOAD( "bs09.c6", 0x0e000, 0x02000, CRC(e9a5f945) SHA1(e6b21912bee97de06819c8ac85a45bbc70030f88) )
+ ROM_LOAD( "bs04.a8", 0x10000, 0x02000, CRC(7346db8a) SHA1(d2b2c1700ae0ff9c614a9981a3da3d69879e9f25) )
+ ROM_LOAD( "bs10.c8", 0x12000, 0x02000, CRC(b78714fc) SHA1(4df7f15c37d56a9d66d0049aad65b32063e5c29a) )
+ ROM_LOAD( "bs05.a10", 0x14000, 0x02000, CRC(b2557102) SHA1(ec4285029fc3ee1ad0adb05f363b234c67f8903d) )
+ ROM_LOAD( "bs11.c10", 0x16000, 0x02000, CRC(c85aba0e) SHA1(4be21b38623c2a8ae7f1e7397fb002e4cb9e4614) )
+
+ ROM_REGION( 0x0300, "proms", 0 )
+ ROM_LOAD( "br27.k10", 0x0000, 0x0100, CRC(f683c54a) SHA1(92893990456b92f04a2be98b8e9626e97b7a2562) ) /* red */
+ ROM_LOAD( "br26.k9", 0x0100, 0x0100, CRC(3ddbb6c4) SHA1(0eca5594d6812bc79f8b78f83fe003877d20c973) ) /* green */
+ ROM_LOAD( "br25.k8", 0x0200, 0x0100, CRC(ba4a5651) SHA1(77e81bd64ab59a7466d20eabdff4be241e963c52) ) /* blue */
+ROM_END
+
ROM_START( karatevs )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "br24.d13", 0x00000, 0x02000, CRC(ea9cda49) SHA1(7d753a8d391418d0fe5231eb88b3627f7d3fd99e) )
@@ -772,4 +858,6 @@ GAME( 1984, kchamp, 0, kchamp, kchamp, kchamp_state, empty_init,
GAME( 1984, karatedo, kchamp, kchamp, kchamp, kchamp_state, empty_init, ROT90, "Data East Corporation", "Karate Dou (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1984, kchampvs, kchamp, kchampvs, kchampvs, kchamp_state, init_kchampvs, ROT90, "Data East USA", "Karate Champ (US VS version, set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1984, kchampvs2, kchamp, kchampvs, kchampvs, kchamp_state, init_kchampvs2, ROT90, "Data East USA", "Karate Champ (US VS version, set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1984, kchampvs3, kchamp, kchampvs, kchampvs, kchamp_state, init_kchampvs, ROT90, "Data East USA", "Karate Champ (US VS version, set 3)", MACHINE_SUPPORTS_SAVE )
+GAME( 1984, kchampvs4, kchamp, kchampvs, kchampvs, kchamp_state, init_kchampvs, ROT90, "Data East USA", "Karate Champ (US VS version, set 4)", MACHINE_SUPPORTS_SAVE )
GAME( 1984, karatevs, kchamp, kchampvs, kchampvs, kchamp_state, init_kchampvs, ROT90, "Data East Corporation", "Taisen Karate Dou (Japan VS version)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/kickgoal.cpp b/src/mame/drivers/kickgoal.cpp
index 4520698d0c7..96c206769aa 100644
--- a/src/mame/drivers/kickgoal.cpp
+++ b/src/mame/drivers/kickgoal.cpp
@@ -385,7 +385,7 @@ WRITE8_MEMBER(kickgoal_state::soundio_port_c_w)
{
if (!(data & 0x10))
{
- m_pic_portb = m_soundlatch->read(space, 0);
+ m_pic_portb = m_soundlatch->read();
m_sound_command_sent = 0x00;
}
}
@@ -412,7 +412,7 @@ WRITE8_MEMBER(kickgoal_state::soundio_port_c_w)
WRITE16_MEMBER(kickgoal_state::to_pic_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_sound_command_sent = 0x20;
}
diff --git a/src/mame/drivers/kingobox.cpp b/src/mame/drivers/kingobox.cpp
index 575bd849403..68d6f3776ae 100644
--- a/src/mame/drivers/kingobox.cpp
+++ b/src/mame/drivers/kingobox.cpp
@@ -47,7 +47,7 @@ void kingofb_state::scroll_interrupt_w(uint8_t data)
void kingofb_state::sound_command_w(uint8_t data)
{
- m_soundlatch->write(machine().dummy_space(), 0, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff);
}
diff --git a/src/mame/drivers/kingpin.cpp b/src/mame/drivers/kingpin.cpp
index 0273e41542a..b0cf004626e 100644
--- a/src/mame/drivers/kingpin.cpp
+++ b/src/mame/drivers/kingpin.cpp
@@ -69,7 +69,7 @@ private:
WRITE8_MEMBER(kingpin_state::sound_nmi_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
diff --git a/src/mame/drivers/kncljoe.cpp b/src/mame/drivers/kncljoe.cpp
index 74d90fec1c6..670a8c18638 100644
--- a/src/mame/drivers/kncljoe.cpp
+++ b/src/mame/drivers/kncljoe.cpp
@@ -39,7 +39,7 @@ Updates:
WRITE8_MEMBER(kncljoe_state::sound_cmd_w)
{
if ((data & 0x80) == 0)
- m_soundlatch->write(space, 0, data & 0x7f);
+ m_soundlatch->write(data & 0x7f);
else
m_soundcpu->set_input_line(0, ASSERT_LINE);
}
diff --git a/src/mame/drivers/krz2000.cpp b/src/mame/drivers/krz2000.cpp
index fe2b785a0be..71e62fb3c10 100644
--- a/src/mame/drivers/krz2000.cpp
+++ b/src/mame/drivers/krz2000.cpp
@@ -65,17 +65,12 @@ void k2000_state::k2000_map(address_map &map)
map(0x000000, 0x0fffff).rom().region("maincpu", 0);
map(0x100000, 0x11ffff).ram(); // is this area banked between RAM (write of 0x20 to 7e0001) vs setup/SU ROM (write of 0x30 to 7e0001) ?
// byte writes to 7e0000-7e0001 - unknown, possibly banking or status?
- map(0xfffc00, 0xffffff).rw("tmp68301", FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
}
void k2000_state::k2000(machine_config &config)
{
- M68301(config, m_maincpu, XTAL(12'000'000));
+ TMP68301(config, m_maincpu, XTAL(12'000'000));
m_maincpu->set_addrmap(AS_PROGRAM, &k2000_state::k2000_map);
- m_maincpu->set_irq_acknowledge_callback("tmp68301", FUNC(tmp68301_device::irq_callback));
-
- tmp68301_device &tmp68301(TMP68301(config, "tmp68301", 0));
- tmp68301.set_cputag(m_maincpu);
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
diff --git a/src/mame/drivers/ksayakyu.cpp b/src/mame/drivers/ksayakyu.cpp
index f0ca353b282..2bb6b96cad4 100644
--- a/src/mame/drivers/ksayakyu.cpp
+++ b/src/mame/drivers/ksayakyu.cpp
@@ -93,7 +93,7 @@ WRITE8_MEMBER(ksayakyu_state::bank_select_w)
WRITE8_MEMBER(ksayakyu_state::latch_w)
{
m_sound_status &= ~0x80;
- m_soundlatch->write(space, 0, data | 0x80);
+ m_soundlatch->write(data | 0x80);
}
READ8_MEMBER(ksayakyu_state::sound_status_r)
@@ -104,7 +104,7 @@ READ8_MEMBER(ksayakyu_state::sound_status_r)
WRITE8_MEMBER(ksayakyu_state::tomaincpu_w)
{
m_sound_status |= 0x80;
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
}
READ8_MEMBER(ksayakyu_state::int_ack_r)
diff --git a/src/mame/drivers/ladyfrog.cpp b/src/mame/drivers/ladyfrog.cpp
index 718eabb91b7..8bbe47e89fa 100644
--- a/src/mame/drivers/ladyfrog.cpp
+++ b/src/mame/drivers/ladyfrog.cpp
@@ -89,7 +89,7 @@ TIMER_CALLBACK_MEMBER(ladyfrog_state::nmi_callback)
WRITE8_MEMBER(ladyfrog_state::sound_command_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
machine().scheduler().synchronize(timer_expired_delegate(FUNC(ladyfrog_state::nmi_callback),this), data);
}
diff --git a/src/mame/drivers/lasso.cpp b/src/mame/drivers/lasso.cpp
index f5ecc749f62..2b4be527c75 100644
--- a/src/mame/drivers/lasso.cpp
+++ b/src/mame/drivers/lasso.cpp
@@ -52,7 +52,7 @@ INPUT_CHANGED_MEMBER(lasso_state::coin_inserted)
/* Write to the sound latch and generate an IRQ on the sound CPU */
WRITE8_MEMBER(lasso_state::sound_command_w)
{
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
diff --git a/src/mame/drivers/limenko.cpp b/src/mame/drivers/limenko.cpp
index bb0fe8a026e..6d7c3a7b9b2 100644
--- a/src/mame/drivers/limenko.cpp
+++ b/src/mame/drivers/limenko.cpp
@@ -198,7 +198,7 @@ WRITE8_MEMBER(limenko_state::qs1000_p3_w)
membank("qs1000:bank")->set_entry(data & 0x07);
if (!BIT(data, 5))
- m_soundlatch->acknowledge_w(space, 0, !BIT(data, 5));
+ m_soundlatch->acknowledge_w();
}
/*****************************************************************************************************
@@ -273,7 +273,7 @@ READ8_MEMBER(limenko_state::spotty_sound_r)
// check m_spotty_sound_cmd bits...
if(m_spotty_sound_cmd == 0xf7)
- return m_soundlatch->read(space,0);
+ return m_soundlatch->read();
else
return m_oki->read();
}
diff --git a/src/mame/drivers/looping.cpp b/src/mame/drivers/looping.cpp
index 04202e11ff0..86448a1593b 100644
--- a/src/mame/drivers/looping.cpp
+++ b/src/mame/drivers/looping.cpp
@@ -419,7 +419,7 @@ WRITE_LINE_MEMBER(looping_state::looping_spcint)
WRITE8_MEMBER(looping_state::looping_soundlatch_w)
{
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(INT_9980A_LEVEL2, ASSERT_LINE);
}
diff --git a/src/mame/drivers/lordgun.cpp b/src/mame/drivers/lordgun.cpp
index 575d80e3a3c..5e488dee5ac 100644
--- a/src/mame/drivers/lordgun.cpp
+++ b/src/mame/drivers/lordgun.cpp
@@ -272,8 +272,8 @@ READ16_MEMBER(lordgun_state::lordgun_gun_1_y_r)
WRITE16_MEMBER(lordgun_state::soundlatch_w)
{
- if (ACCESSING_BITS_0_7) m_soundlatch->write(space, 0, (data >> 0) & 0xff);
- if (ACCESSING_BITS_8_15) m_soundlatch2->write(space, 0, (data >> 8) & 0xff);
+ if (ACCESSING_BITS_0_7) m_soundlatch->write((data >> 0) & 0xff);
+ if (ACCESSING_BITS_8_15) m_soundlatch2->write((data >> 8) & 0xff);
m_soundcpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
diff --git a/src/mame/drivers/ltcasino.cpp b/src/mame/drivers/ltcasino.cpp
index e6fb14e2898..65d28465663 100644
--- a/src/mame/drivers/ltcasino.cpp
+++ b/src/mame/drivers/ltcasino.cpp
@@ -1,18 +1,17 @@
-// license:BSD-3-Clause
-// copyright-holders:Pierpaolo Prazzoli, David Haywood
-/*
+// license: BSD-3-Clause
+// copyright-holders: Pierpaolo Prazzoli, David Haywood, Dirk Best
+/***************************************************************************
-Little Casino
-Mini Vegas 4in1
+ Little Casino
+ Mini Vegas 4in1
-Non-Payout 'Gambling' style games.
+ Non-Payout 'Gambling' style games.
-TODO:
+ TODO:
+ - color version of the first version is undumped?
+ - figure out the rest of the dipswitches
+ - keyboard
-inputs (dips multiplexed?)
-colours (there are 2 flyers which show different colours?)
-hook up TMS9937 and 2 x 6821 PIAs
-etc.
Mini Vegas
CC-089 (c) Entertainment Enterprises Ltd. 1983
@@ -53,60 +52,238 @@ Other: Hitachi HD46821P 1MHz NMOS Peripheral Interface Adapter (PIA) x 2
D1 - Power On Diode
44 pin edge connector
-*/
+
+***************************************************************************/
#include "emu.h"
#include "cpu/m6502/m6502.h"
+#include "machine/6821pia.h"
#include "sound/ay8910.h"
+#include "video/tms9927.h"
#include "emupal.h"
#include "screen.h"
#include "speaker.h"
+#include "ltcasino.lh"
+#include "ltcasinn.lh"
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
class ltcasino_state : public driver_device
{
public:
ltcasino_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
- m_tile_num_ram(*this, "tile_nuram"),
- m_tile_atr_ram(*this, "tile_atr_ram"),
m_maincpu(*this, "maincpu"),
- m_gfxdecode(*this, "gfxdecode")
+ m_pia(*this, "pia%u", 0U),
+ m_vtc(*this, "vtc"),
+ m_video_ram(*this, "video_ram"),
+ m_attribute_ram(*this, "attribute_ram"),
+ m_gfxdecode(*this, "gfxdecode"),
+ m_lamps(*this, "button_%u", 0U),
+ m_tilemap(nullptr)
{ }
void init_mv4in1();
- void ltcasino(machine_config &config);
-protected:
- virtual void video_start() override;
+ void ltcasino(machine_config &config);
+ void ltcasinn(machine_config &config);
private:
- required_shared_ptr<uint8_t> m_tile_num_ram;
- required_shared_ptr<uint8_t> m_tile_atr_ram;
required_device<cpu_device> m_maincpu;
+ required_device_array<pia6821_device, 2> m_pia;
+ required_device<crt5037_device> m_vtc;
+ required_shared_ptr<uint8_t> m_video_ram;
+ required_shared_ptr<uint8_t> m_attribute_ram;
required_device<gfxdecode_device> m_gfxdecode;
+ output_finder<5> m_lamps;
tilemap_t *m_tilemap;
- DECLARE_WRITE8_MEMBER(tile_num_w);
- DECLARE_WRITE8_MEMBER(tile_atr_w);
+ void main_map(address_map &map);
- TILE_GET_INFO_MEMBER(get_tile_info);
- void ltcasino_palette(palette_device &palette) const;
+ void ltcasinn_palette(palette_device &palette) const;
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ TILE_GET_INFO_MEMBER(ltcasino_tile_info);
+ TILE_GET_INFO_MEMBER(ltcasinn_tile_info);
- void main_map(address_map &map);
+ void machine_start_ltcasino();
+ void machine_start_ltcasinn();
+
+ DECLARE_WRITE8_MEMBER(output_r_w);
+ DECLARE_WRITE8_MEMBER(output_t_w);
};
-/* Video */
+//**************************************************************************
+// ADDRESS MAPS
+//**************************************************************************
+
+void ltcasino_state::main_map(address_map &map)
+{
+ map.unmap_value_high();
+ map(0x0000, 0x07ff).ram();
+ map(0x8000, 0xcfff).rom();
+ map(0xd000, 0xd7ff).ram().share(m_video_ram);
+ map(0xe000, 0xe7ff).ram().share(m_attribute_ram);
+ map(0xec00, 0xec03).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0xec10, 0xec13).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0xec20, 0xec21).r("aysnd", FUNC(ay8910_device::data_r));
+ map(0xec20, 0xec21).w("aysnd", FUNC(ay8910_device::data_address_w));
+ map(0xec30, 0xec3f).rw("vtc", FUNC(crt5037_device::read), FUNC(crt5037_device::write));
+ map(0xf000, 0xffff).rom();
+}
+
+
+//**************************************************************************
+// INPUT PORT DEFINITIONS
+//**************************************************************************
+
+static INPUT_PORTS_START( ltcasino )
+ PORT_START("COIN")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_COIN1) PORT_WRITE_LINE_DEVICE_MEMBER("pia0", pia6821_device, ca1_w)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_COIN2) PORT_WRITE_LINE_DEVICE_MEMBER("pia0", pia6821_device, cb1_w)
+
+ PORT_START("Q")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD1) PORT_NAME("Button 1")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD2) PORT_NAME("Button 2")
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD3) PORT_NAME("Button 3")
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD4) PORT_NAME("Button 4")
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5) PORT_NAME("Button 5")
+ PORT_DIPNAME(0x20, 0x00, "Enable Craps") // off to enter service
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x00, DEF_STR( On ))
+ PORT_DIPNAME(0x40, 0x00, "Enable Poker") // off to enter service
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x00, DEF_STR( On ))
+ PORT_DIPNAME(0x80, 0x00, "Enable Black Jack") // off to enter service
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x00, DEF_STR( On ))
+
+ PORT_START("S")
+ PORT_DIPUNKNOWN_DIPLOC(0x01, IP_ACTIVE_LOW, "DSW3:1")
+ PORT_DIPUNKNOWN_DIPLOC(0x02, IP_ACTIVE_LOW, "DSW3:2")
+ PORT_DIPUNKNOWN_DIPLOC(0x04, IP_ACTIVE_LOW, "DSW3:3")
+ PORT_DIPUNKNOWN_DIPLOC(0x08, IP_ACTIVE_LOW, "DSW3:4")
+ PORT_DIPUNKNOWN_DIPLOC(0x10, IP_ACTIVE_LOW, "DSW3:5")
+ PORT_DIPNAME(0x60, 0x00, DEF_STR( Service_Mode ))
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x60, DEF_STR( On ))
+ PORT_DIPLOCATION("DSW3:6,7")
+ PORT_DIPNAME(0x80, 0x00, DEF_STR( Demo_Sounds ))
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x00, DEF_STR( On ))
+ PORT_DIPLOCATION("DSW3:8")
+
+ PORT_START("A")
+ PORT_DIPNAME(0x03, 0x03, "Hands to Start")
+ PORT_DIPSETTING( 0x03, "3")
+ PORT_DIPSETTING( 0x02, "4")
+ PORT_DIPSETTING( 0x01, "5")
+ PORT_DIPSETTING( 0x00, "6")
+ PORT_DIPLOCATION("A:1,2")
+ PORT_DIPNAME(0x0c, 0x0c, DEF_STR( Coinage ))
+ PORT_DIPSETTING( 0x00, DEF_STR( 2C_2C ))
+ PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ))
+ PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ))
+ PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ))
+ PORT_DIPLOCATION("A:3,4")
+ PORT_DIPNAME(0x10, 0x10, "Coin Limit")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x10, DEF_STR( On )) // limits to 15 coins
+ PORT_DIPLOCATION("A:5")
+ PORT_DIPNAME(0x20, 0x00, DEF_STR( Unknown ))
+ PORT_DIPSETTING( 0x00, DEF_STR( On )) // needs to be 0 or ltcasinn can reset on coin-up
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ))
+ PORT_DIPLOCATION("A:6")
+ PORT_DIPUNKNOWN_DIPLOC(0x40, IP_ACTIVE_LOW, "A:7")
+ PORT_DIPNAME(0x80, 0x80, "Screen Mode")
+ PORT_DIPSETTING( 0x80, "60 Hz")
+ PORT_DIPSETTING( 0x00, "50 Hz")
+ PORT_DIPLOCATION("A:8")
+
+ PORT_START("B")
+ PORT_DIPNAME(0x01, 0x01, "Show High Scores") // When it's OFF, it doesn't show or allow High Scores
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x01, DEF_STR( On ))
+ PORT_DIPLOCATION("B:1")
+ PORT_DIPUNKNOWN_DIPLOC(0x02, IP_ACTIVE_LOW, "B:2")
+ PORT_DIPUNKNOWN_DIPLOC(0x04, IP_ACTIVE_LOW, "B:3")
+ PORT_DIPUNKNOWN_DIPLOC(0x08, IP_ACTIVE_LOW, "B:4")
+ PORT_DIPUNKNOWN_DIPLOC(0x10, IP_ACTIVE_LOW, "B:5")
+ PORT_DIPUNKNOWN_DIPLOC(0x20, IP_ACTIVE_LOW, "B:6")
+ PORT_DIPNAME(0x40, 0x40, "Bonus Hand")
+ PORT_DIPSETTING( 0x40, "100000 & 200000")
+ PORT_DIPSETTING( 0x00, DEF_STR( None ))
+ PORT_DIPLOCATION("B:7")
+ PORT_DIPNAME(0x80, 0x80, "Demo") // some kind of demo play?
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x00, DEF_STR( On ))
+ PORT_DIPLOCATION("B:8")
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( ltcasinn )
+ PORT_INCLUDE(ltcasino)
+
+ PORT_MODIFY("COIN")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_MODIFY("B")
+ PORT_DIPNAME(0x02, 0x02, "Memory Test") // tests d000 to d7ff
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x02, DEF_STR( On ))
+ PORT_DIPLOCATION("B:2")
+
+ PORT_MODIFY("S")
+ PORT_DIPNAME(0x01, 0x01, "Keyboard")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x00, DEF_STR( On ))
+ PORT_DIPLOCATION("DSW3:1")
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( mv4in1 )
+ PORT_INCLUDE(ltcasino)
+
+ PORT_MODIFY("Q")
+ PORT_DIPNAME(0x20, 0x00, "Enable Dice") // must be off to enter service
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x00, DEF_STR( On ))
+ PORT_DIPNAME(0x40, 0x00, "Enable Poker") // must be off to enter service
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x00, DEF_STR( On ))
+ PORT_DIPNAME(0x80, 0x00, "Enable 21") // must be off to enter service
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x00, DEF_STR( On ))
+
+ PORT_MODIFY("S")
+ PORT_DIPNAME(0x01, 0x01, "Keyboard")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x00, DEF_STR( On ))
+ PORT_DIPLOCATION("DSW3:1")
+INPUT_PORTS_END
+
+
+//**************************************************************************
+// VIDEO EMULATION
+//**************************************************************************
-void ltcasino_state::ltcasino_palette(palette_device &palette) const
+void ltcasino_state::ltcasinn_palette(palette_device &palette) const
{
- for (int i = 0; i < 64; i++)
+ for (int i = 0; i < 8; i++)
{
- palette.set_pen_color(2*i+0, pal1bit(i >> 0), pal1bit(i >> 2), pal1bit(i >> 1));
- palette.set_pen_color(2*i+1, pal1bit(i >> 3), pal1bit(i >> 5), pal1bit(i >> 4));
+ // basic 3 bit palette
+ palette.set_indirect_color(i, rgb_t(pal1bit(i >> 0), pal1bit(i >> 2), pal1bit(i >> 1)));
+
+ // setup pen colors for the drawgfx system
+ for (int j = 0; j < 8; j++)
+ {
+ palette.set_pen_indirect((j << 4) | (i << 1) | 0, i);
+ palette.set_pen_indirect((j << 4) | (i << 1) | 1, j);
+ }
}
}
@@ -116,676 +293,178 @@ void ltcasino_state::ltcasino_palette(palette_device &palette) const
---- x--- unknown (used by ltcasino)
---- -xxx background color
*/
-TILE_GET_INFO_MEMBER(ltcasino_state::get_tile_info)
+TILE_GET_INFO_MEMBER(ltcasino_state::ltcasino_tile_info)
{
- int tileno = m_tile_num_ram[tile_index];
- // TODO: wtf +1 on attribute offset otherwise glitches occurs on left side of objects?
- int colour = m_tile_atr_ram[(tile_index+1) & 0x7ff];
+ uint16_t code = m_video_ram[tile_index];
+ // +1 on attribute offset otherwise glitches occurs on left side of objects?
+ uint8_t attr = m_attribute_ram[(tile_index + 1) & 0x7ff];
- tileno += (colour & 0x80) << 1;
+ code |= BIT(attr, 7) << 8;
- SET_TILE_INFO_MEMBER(0,tileno,((colour & 0x70) >> 1) | (colour & 7),0);
+ SET_TILE_INFO_MEMBER(0, code, 0, 0);
}
-void ltcasino_state::video_start()
+TILE_GET_INFO_MEMBER(ltcasino_state::ltcasinn_tile_info)
{
- m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(ltcasino_state::get_tile_info),this),TILEMAP_SCAN_ROWS,8, 8,64,32);
+ uint16_t code = m_video_ram[tile_index];
+ // +1 on attribute offset otherwise glitches occurs on left side of objects?
+ uint8_t attr = m_attribute_ram[(tile_index + 1) & 0x7ff];
+
+ code |= BIT(attr, 7) << 8;
+
+ SET_TILE_INFO_MEMBER(0, code, ((attr & 0x70) >> 1) | (attr & 7), 0);
}
uint32_t ltcasino_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- m_tilemap->draw(screen, bitmap, cliprect, 0,0);
+ m_tilemap->mark_all_dirty();
+ m_tilemap->draw(screen, bitmap, cliprect, 0, 0);
+
return 0;
}
-WRITE8_MEMBER(ltcasino_state::tile_num_w)
+static const gfx_layout tiles8x8_layout =
{
- m_tile_num_ram[offset] = data;
- m_tilemap->mark_tile_dirty(offset);
-}
+ 8,8,
+ RGN_FRAC(1,1),
+ 1,
+ { 0 },
+ { 7, 6, 5, 4, 3, 2, 1, 0 },
+ { STEP8(0,8) },
+ 8*8
+};
-WRITE8_MEMBER(ltcasino_state::tile_atr_w)
-{
- m_tile_atr_ram[offset] = data;
- m_tilemap->mark_tile_dirty((offset + 1) & 0x7ff);
-}
+static GFXDECODE_START( gfx_ltcasino )
+ GFXDECODE_ENTRY("gfx1", 0, tiles8x8_layout, 0, 1)
+GFXDECODE_END
+static GFXDECODE_START( gfx_ltcasinn )
+ GFXDECODE_ENTRY("gfx1", 0, tiles8x8_layout, 0, 64)
+GFXDECODE_END
-void ltcasino_state::main_map(address_map &map)
+
+//**************************************************************************
+// MACHINE EMULATION
+//**************************************************************************
+
+void ltcasino_state::init_mv4in1()
{
- map(0x0000, 0x7fff).ram();
- map(0x8000, 0xcfff).rom();
- map(0xd000, 0xd7ff).ram().w(FUNC(ltcasino_state::tile_num_w)).share(m_tile_num_ram);
- map(0xd800, 0xdfff).ram();
- map(0xe000, 0xe7ff).ram().w(FUNC(ltcasino_state::tile_atr_w)).share(m_tile_atr_ram);
- map(0xe800, 0xebff).ram();
-
- map(0xec00, 0xec00).portr("IN0"); // PIA 6821 n. 1
- map(0xec01, 0xec01).portr("IN1");
- map(0xec02, 0xec02).portr("IN2");
- map(0xec03, 0xec03).portr("IN3");
- map(0xec10, 0xec10).portr("IN4"); // PIA 6821 n. 2
- map(0xec12, 0xec12).portr("IN5");
+ uint8_t *rom = memregion("maincpu")->base();
+ for (int i = 0; i < 0x10000; i++)
+ rom[i] = bitswap<8>(rom[i], 7, 6, 5, 4, 3, 1, 2, 0);
+}
- map(0xec20, 0xec21).r("aysnd", FUNC(ay8910_device::data_r));
- map(0xec20, 0xec21).w("aysnd", FUNC(ay8910_device::data_address_w));
- map(0xec30, 0xec3f).ram(); // TMS9937
- map(0xec3e, 0xec3e).nopr(); //not used
- map(0xf000, 0xffff).rom();
+void ltcasino_state::machine_start_ltcasino()
+{
+ m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(ltcasino_state::ltcasino_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
+ m_lamps.resolve();
}
+void ltcasino_state::machine_start_ltcasinn()
+{
+ m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(ltcasino_state::ltcasinn_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
+ m_lamps.resolve();
+}
-static INPUT_PORTS_START( ltcasino )
- PORT_START("IN0") /* Q in service */
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD1 )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD2 )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD3 )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD4 )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 )
- PORT_DIPNAME( 0x20, 0x00, "Enable Craps" ) //off to enter service
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x00, "Enable Poker" ) //off to enter service
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x00, "Enable Black Jack" ) //off to enter service
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
- PORT_START("IN1")
- PORT_DIPNAME( 0x01, 0x00, "1" )
- 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_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 )
-
- PORT_START("IN2") /* R in service */
- PORT_DIPNAME( 0x01, 0x00, "2" )
- 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 ) )
-
- PORT_START("IN3")
- PORT_DIPNAME( 0x01, 0x00, "3" )
- 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, 0x40, "?" ) //set this LOW after insert a coin
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN2 )
-
- PORT_START("IN4") /* S in service */
- PORT_DIPNAME( 0x01, 0x00, "4" )
- 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 ) ) //off to enter service
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_SERVICE( 0x40, IP_ACTIVE_HIGH ) //service?
- PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
- PORT_START("IN5") /* T in service */
- PORT_DIPNAME( 0x01, 0x00, "5" )
- 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 ) )
-
- PORT_START("IN6") // B in service
- PORT_DIPNAME( 0x01, 0x01, "6" ) // from 1 to 0x40 seem affect the credit
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Free_Play ) ) //ok?
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
- PORT_START("BUTTONS") // A in service
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON6 )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON7 )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON8 )
-INPUT_PORTS_END
+WRITE8_MEMBER(ltcasino_state::output_r_w)
+{
+ // 7------- unknown (toggles rapidly)
+ // -6------ unknown (toggles rapidly)
+ // --5----- coin counter
+ // ---43210 button lamps 5 to 1
+
+ m_lamps[0] = BIT(data, 0); // button 1
+ m_lamps[1] = BIT(data, 1); // button 2
+ m_lamps[2] = BIT(data, 2); // button 3
+ m_lamps[3] = BIT(data, 3); // button 4
+ m_lamps[4] = BIT(data, 4); // button 5
+
+ machine().bookkeeping().coin_counter_w(0, BIT(data, 5));
+}
-static INPUT_PORTS_START( ltcasinn )
- PORT_START("IN0") /* Q in service */
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 ) //start?
- 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 ) ) //off to enter service
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) //off to enter service
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) //off to enter service
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
- PORT_START("IN1")
- PORT_DIPNAME( 0x01, 0x00, "1" )
- 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, "Reset?" )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x80, DEF_STR( On ) )
-
- PORT_START("IN2") /* R in service */
- PORT_DIPNAME( 0x01, 0x00, "2" )
- 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 ) )
-
- PORT_START("IN3")
- PORT_DIPNAME( 0x01, 0x00, "3" )
- 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 ) ) //off to get the race start
- 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 ) )
-
- PORT_START("IN4") /* S in service */
- PORT_DIPNAME( 0x01, 0x01, "Plug the Keyboard" )
- 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 ) ) //off to enter service
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_SERVICE( 0x40, IP_ACTIVE_HIGH ) //service?
- PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
- PORT_START("IN5") /* T in service */
- PORT_DIPNAME( 0x01, 0x00, "5" )
- 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 ) )
-
- PORT_START("IN6") // B in service
- PORT_DIPNAME( 0x01, 0x01, "6" )
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Free_Play ) )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
-
- PORT_START("BUTTONS") // A in service
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON6 )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON7 )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON8 )
-INPUT_PORTS_END
+WRITE8_MEMBER(ltcasino_state::output_t_w)
+{
+ // 76543210 unknown
+ logerror("output_t_w: %02x\n", data);
+}
-static INPUT_PORTS_START( mv4in1 )
- PORT_START("IN0")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD1 )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD2 )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD3 )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD4 )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 )
-
- PORT_DIPNAME( 0x20, 0x00, "Enable Dice" ) // must be off to enter service
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x00, "Enable Poker" ) // must be off to enter service
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x00, "Enable 21" ) // must be off to enter service
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
- PORT_START("IN1")
- 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_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 )
-
- PORT_START("IN2") // Shows as "R" in service mode
- 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 ) )
-
- PORT_START("IN3")
- 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, 0x40, "?" ) //set this LOW after insert a coin
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN2 )
-
- PORT_START("IN4") // Shows as "S" in service mode
- PORT_DIPNAME( 0x01, 0x01, "Keyboard" )
- 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 ) ) //off to enter service
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_SERVICE( 0x40, IP_ACTIVE_HIGH ) //service?
- PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
- PORT_START("IN5") // Shows as "T" in service mode
- PORT_DIPNAME( 0x01, 0x00, "5" )
- 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 ) )
-
- PORT_START("IN6") // B in service
- PORT_DIPNAME( 0x01, 0x01, "6" ) // from 1 to 0x40 seem affect the credit
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Free_Play ) ) //ok?
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
- PORT_START("BUTTONS") // A in service
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON6 )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON7 )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON8 )
-INPUT_PORTS_END
+//**************************************************************************
+// MACHINE DEFINTIONS
+//**************************************************************************
-static const gfx_layout tiles8x8_layout =
+void ltcasino_state::ltcasino(machine_config &config)
{
- 8,8,
- RGN_FRAC(1,1),
- 1,
- { 0 },
- { 7, 6, 5, 4, 3, 2, 1, 0 },
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
- 8*8
-};
+ M6502(config, m_maincpu, 18.432_MHz_XTAL/16); // clock unknown
+ m_maincpu->set_addrmap(AS_PROGRAM, &ltcasino_state::main_map);
+ PIA6821(config, m_pia[0], 0);
+ m_pia[0]->readpa_handler().set_ioport("Q");
+ m_pia[0]->writepb_handler().set(FUNC(ltcasino_state::output_r_w));
-static GFXDECODE_START( gfx_ltcasino )
- GFXDECODE_ENTRY( "gfx1", 0, tiles8x8_layout, 0, 64 )
-GFXDECODE_END
+ PIA6821(config, m_pia[1], 0);
+ m_pia[1]->readpa_handler().set_ioport("S");
+ m_pia[1]->writepb_handler().set(FUNC(ltcasino_state::output_t_w));
+ MCFG_MACHINE_START_OVERRIDE(ltcasino_state, ltcasino)
-void ltcasino_state::ltcasino(machine_config &config)
-{
- /* basic machine hardware */
- M6502(config, m_maincpu, XTAL(18'432'000)/9); /* 2.048MHz ?? (or 18.432MHz/8 = 2.304MHz) - not verified */
- m_maincpu->set_addrmap(AS_PROGRAM, &ltcasino_state::main_map);
- m_maincpu->set_vblank_int("screen", FUNC(ltcasino_state::irq0_line_hold));
+ // video hardware
+ CRT5037(config, m_vtc, 18.432_MHz_XTAL/16); // this clock gives about 61/51 hz
+ m_vtc->set_char_width(8);
+ m_vtc->set_screen("screen");
+ m_vtc->set_visarea(48, 463, 0, 255);
+ m_vtc->vsyn_callback().set_inputline("maincpu", 0); // ?
+ m_vtc->vsyn_callback().append(m_pia[0], FUNC(pia6821_device::cb2_w)); // ?
- /* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
- screen.set_refresh_hz(60);
- screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
- screen.set_size(64*8, 32*8);
- screen.set_visarea(6*8, 58*8-1, 0, 32*8-1);
+ screen.set_raw(18.432_MHz_XTAL/2, 560, 48, 464, 268, 0, 256);
screen.set_screen_update(FUNC(ltcasino_state::screen_update));
screen.set_palette("palette");
GFXDECODE(config, m_gfxdecode, "palette", gfx_ltcasino);
- PALETTE(config, "palette", FUNC(ltcasino_state::ltcasino_palette), 2*64);
- /* sound hardware */
+ PALETTE(config, "palette", palette_device::MONOCHROME);
+
+ // sound hardware
SPEAKER(config, "mono").front_center();
- ay8910_device &aysnd(AY8910(config, "aysnd", XTAL(18'432'000)/18)); /* 1.024MHz ?? (or 18.432MHz/16 = 1.152MHz) - not verified */
- aysnd.port_a_read_callback().set_ioport("BUTTONS");
- aysnd.port_b_read_callback().set_ioport("IN6");
- //ltcasino -> pc: F3F3 (A in service) and F3FD (B in service)
+ ay8910_device &aysnd(AY8910(config, "aysnd", 18.432_MHz_XTAL/16)); // clock unknown
+ aysnd.port_a_read_callback().set_ioport("A");
+ aysnd.port_b_read_callback().set_ioport("B");
aysnd.add_route(ALL_OUTPUTS, "mono", 0.4);
}
+void ltcasino_state::ltcasinn(machine_config &config)
+{
+ ltcasino(config);
+
+ MCFG_MACHINE_START_OVERRIDE(ltcasino_state, ltcasinn)
+
+ config.device_remove("palette");
+ PALETTE(config, "palette", FUNC(ltcasino_state::ltcasinn_palette), 128, 8);
+
+ m_gfxdecode->set_info(gfx_ltcasinn);
+}
+
+
+//**************************************************************************
+// ROM DEFINITIONS
+//**************************************************************************
ROM_START( ltcasino )
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "a", 0x8000, 0x1000, CRC(14909fee) SHA1(bf53fa65da7f013ea1ac6b4942cdfdb34ef16252) )
- ROM_LOAD( "b", 0x9800, 0x0800, CRC(1473f854) SHA1(eadaec1f6d653e61458bc262945c20140f4530eb) )
- ROM_LOAD( "c", 0xa800, 0x0800, CRC(7a07004b) SHA1(62bd0f3d12b7eada6fc271abea60569aca7262b0) )
- ROM_LOAD( "d", 0xb800, 0x0800, CRC(5148cafc) SHA1(124039f48784bf032f612714db73fb67a216a1e7) )
- ROM_LOAD( "e", 0xc800, 0x0800, CRC(5f9e103a) SHA1(b0e9ace4c3962c06e5250fac16a245dca711350f) )
- ROM_LOAD( "f", 0xf000, 0x1000, CRC(7345aada) SHA1(6640f5eb1130c8f1cb197eb12b8e6403c7f8d34d) )
+ ROM_LOAD( "a", 0x8000, 0x1000, CRC(14909fee) SHA1(bf53fa65da7f013ea1ac6b4942cdfdb34ef16252) )
+ ROM_LOAD( "b", 0x9800, 0x0800, CRC(1473f854) SHA1(eadaec1f6d653e61458bc262945c20140f4530eb) )
+ ROM_LOAD( "c", 0xa800, 0x0800, CRC(7a07004b) SHA1(62bd0f3d12b7eada6fc271abea60569aca7262b0) )
+ ROM_LOAD( "d", 0xb800, 0x0800, CRC(5148cafc) SHA1(124039f48784bf032f612714db73fb67a216a1e7) )
+ ROM_LOAD( "e", 0xc800, 0x0800, CRC(5f9e103a) SHA1(b0e9ace4c3962c06e5250fac16a245dca711350f) )
+ ROM_LOAD( "f", 0xf000, 0x1000, CRC(7345aada) SHA1(6640f5eb1130c8f1cb197eb12b8e6403c7f8d34d) )
ROM_REGION( 0x0800, "gfx1", 0 )
- ROM_LOAD( "v", 0x0000, 0x0800, CRC(f1f75675) SHA1(8f3777e6b2a3f824f94b28669cac501ec02bbf36) )
+ ROM_LOAD( "v", 0x0000, 0x0800, CRC(f1f75675) SHA1(8f3777e6b2a3f824f94b28669cac501ec02bbf36) )
ROM_END
-
ROM_START( ltcasinn )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "lc2_ra.bin", 0x8000, 0x1000, CRC(1a595442) SHA1(b8fe3e5ed2024a57187c0ce547c1bbef2429ed63) )
@@ -801,26 +480,23 @@ ROM_END
ROM_START( mv4in1 )
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "g.ic13", 0x8000, 0x1000, CRC(ac33bd85) SHA1(fd555f70d0a7040473d35ec38e19185671a471ea) )
- ROM_LOAD( "f.ic14", 0x9000, 0x1000, CRC(f95c87d1) SHA1(df5ed53722ec55a97eabe10b0ed3f1ba32cbe55f) )
- ROM_LOAD( "e.ic15", 0xa000, 0x1000, CRC(e525fcf2) SHA1(f1ec0c514e25ec4a1caf737ff8a962c81fb2706a) )
- ROM_LOAD( "d.ic16", 0xb000, 0x1000, CRC(ab34673f) SHA1(520a173a342a27b5f9d995e6f53c3a2f0f359f9e) )
- ROM_LOAD( "c.ic17", 0xc000, 0x1000, CRC(e384edf4) SHA1(99042528ce2b35191248d90162ca06a1a585667c) )
- ROM_LOAD( "b.ic18", 0xf000, 0x1000, CRC(3450b862) SHA1(816d13fd8d03c299c1dbecf971ee5fae2f1d64bc) )
+ ROM_LOAD( "g.ic13", 0x8000, 0x1000, CRC(ac33bd85) SHA1(fd555f70d0a7040473d35ec38e19185671a471ea) )
+ ROM_LOAD( "f.ic14", 0x9000, 0x1000, CRC(f95c87d1) SHA1(df5ed53722ec55a97eabe10b0ed3f1ba32cbe55f) )
+ ROM_LOAD( "e.ic15", 0xa000, 0x1000, CRC(e525fcf2) SHA1(f1ec0c514e25ec4a1caf737ff8a962c81fb2706a) )
+ ROM_LOAD( "d.ic16", 0xb000, 0x1000, CRC(ab34673f) SHA1(520a173a342a27b5f9d995e6f53c3a2f0f359f9e) )
+ ROM_LOAD( "c.ic17", 0xc000, 0x1000, CRC(e384edf4) SHA1(99042528ce2b35191248d90162ca06a1a585667c) )
+ ROM_LOAD( "b.ic18", 0xf000, 0x1000, CRC(3450b862) SHA1(816d13fd8d03c299c1dbecf971ee5fae2f1d64bc) )
ROM_REGION( 0x1000, "gfx1", 0 )
- ROM_LOAD( "a.ic19", 0x0000, 0x1000, CRC(a25c125e) SHA1(e0ba83ccddbd82a2bf52585ae0accb9192cbb00e) )
+ ROM_LOAD( "a.ic19", 0x0000, 0x1000, CRC(a25c125e) SHA1(e0ba83ccddbd82a2bf52585ae0accb9192cbb00e) )
ROM_END
-void ltcasino_state::init_mv4in1()
-{
- uint8_t *rom = memregion("maincpu")->base();
- for (int i = 0; i < 0x10000; i++)
- rom[i]=bitswap<8>(rom[i],7,6,5,4,3,1,2,0);
-}
-
+//**************************************************************************
+// SYSTEM DRIVERS
+//**************************************************************************
-GAME( 1982, ltcasino, 0, ltcasino, ltcasino, ltcasino_state, empty_init, ROT0, "Digital Controls Inc.", "Little Casino (older)", MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1983, mv4in1, ltcasino, ltcasino, mv4in1, ltcasino_state, init_mv4in1, ROT0, "Entertainment Enterprises, Ltd.", "Mini Vegas 4in1", MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1984, ltcasinn, 0, ltcasino, ltcasinn, ltcasino_state, empty_init, ROT0, "Digital Controls Inc.", "Little Casino (newer)", MACHINE_NOT_WORKING )
+// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROTATION COMPANY FULLNAME FLAGS
+GAMEL( 1982, ltcasino, 0, ltcasino, ltcasino, ltcasino_state, empty_init, ROT0, "Digital Controls Inc.", "Little Casino (older)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK, layout_ltcasino )
+GAMEL( 1983, mv4in1, ltcasino, ltcasinn, mv4in1, ltcasino_state, init_mv4in1, ROT0, "Entertainment Enterprises, Ltd.", "Mini Vegas 4in1", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK, layout_ltcasinn )
+GAMEL( 1984, ltcasinn, 0, ltcasinn, ltcasinn, ltcasino_state, empty_init, ROT0, "Digital Controls Inc.", "Little Casino (newer)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK, layout_ltcasinn )
diff --git a/src/mame/drivers/lwings.cpp b/src/mame/drivers/lwings.cpp
index f96736b6c7e..cac34b47796 100644
--- a/src/mame/drivers/lwings.cpp
+++ b/src/mame/drivers/lwings.cpp
@@ -139,7 +139,7 @@ WRITE8_MEMBER(lwings_state::avengers_protection_w)
else if (pc == 0x0445)
{
m_soundstate = 0x80;
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
}
}
@@ -1766,7 +1766,7 @@ ROM_END
void lwings_state::init_avengersb()
{
/* set up protection handlers */
- m_maincpu->space(AS_PROGRAM).install_write_handler(0xf80c, 0xf80c, write8_delegate(FUNC(generic_latch_8_device::write), (generic_latch_8_device*)m_soundlatch));
+ m_maincpu->space(AS_PROGRAM).install_write_handler(0xf80c, 0xf80c, write8smo_delegate(FUNC(generic_latch_8_device::write), (generic_latch_8_device*)m_soundlatch));
}
diff --git a/src/mame/drivers/m63.cpp b/src/mame/drivers/m63.cpp
index cebcc902653..36043376f5b 100644
--- a/src/mame/drivers/m63.cpp
+++ b/src/mame/drivers/m63.cpp
@@ -457,7 +457,7 @@ READ8_MEMBER(m63_state::snddata_r)
{
switch (m_p2 & 0xf0)
{
- case 0x60: return m_soundlatch->read(space, 0); ;
+ case 0x60: return m_soundlatch->read();
case 0x70: return memregion("user1")->base()[((m_p1 & 0x1f) << 8) | offset];
}
return 0xff;
diff --git a/src/mame/drivers/m72.cpp b/src/mame/drivers/m72.cpp
index 25acbf8901e..c1546b33b77 100644
--- a/src/mame/drivers/m72.cpp
+++ b/src/mame/drivers/m72.cpp
@@ -1080,6 +1080,11 @@ void m72_state::poundfor_sound_portmap(address_map &map)
map(0x42, 0x42).rw("soundlatch", FUNC(generic_latch_8_device::read), FUNC(generic_latch_8_device::acknowledge_w));
}
+void m72_state::i80c31_mem_map(address_map &map)
+{
+ map(0x0000, 0x1fff).rom().region("mcu", 0);
+}
+
void m72_state::mcu_io_map(address_map &map)
{
/* External access */
@@ -1876,11 +1881,21 @@ void m72_state::m72_8751(machine_config &config)
mculatch.data_pending_callback().set_inputline(m_mcu, MCS51_INT1_LINE);
mculatch.set_separate_acknowledge(true);
- I8751(config, m_mcu, XTAL(8'000'000)); /* Uses its own XTAL */
- m_mcu->set_addrmap(AS_IO, &m72_state::mcu_io_map);
- m_mcu->port_out_cb<1>().set(FUNC(m72_state::mcu_port1_w));
+ i8751_device &mcu(I8751(config, m_mcu, XTAL(8'000'000))); /* Uses its own XTAL */
+ mcu.set_addrmap(AS_IO, &m72_state::mcu_io_map);
+ mcu.port_out_cb<1>().set(FUNC(m72_state::mcu_port1_w));
}
+void m72_state::imgfightb(machine_config &config)
+{
+ m72_8751(config);
+ i80c31_device &mcu(I80C31(config.replace(), m_mcu, XTAL(7'200'000)));
+ mcu.set_addrmap(AS_PROGRAM, &m72_state::i80c31_mem_map);
+ mcu.set_addrmap(AS_IO, &m72_state::mcu_io_map);
+ mcu.port_out_cb<1>().set(FUNC(m72_state::mcu_port1_w));
+
+ // TODO: uses 6116 type RAM instead of MB8421 and MB8431
+}
void m72_state::rtype(machine_config &config)
{
@@ -2672,6 +2687,49 @@ ROM_START( imgfightj )
ROM_LOAD( "if-c-v1.bin", 0x10000, 0x10000, CRC(45b68bf5) SHA1(2fb28793019ca85b3b6d7c4c31eedff1d71f2d83) )
ROM_END
+ROM_START( imgfightb ) // mostly identical to imgfightj content-wise, it's a 4 PCB stack bootleg with flying wires
+ ROM_REGION( 0x100000, "maincpu", 0 ) // identical, but ic111.9e
+ ROM_LOAD16_BYTE( "ic108.9b", 0x00001, 0x10000, CRC(592d2d80) SHA1(d54916a9bfe4b65a972b62202af706135e73518d) )
+ ROM_LOAD16_BYTE( "ic89.7b", 0x00000, 0x10000, CRC(61f89056) SHA1(3e0724dbc2b00a30193ea6cfac8b4331055d4fd4) )
+ ROM_LOAD16_BYTE( "ic111.9e", 0x40001, 0x10000, CRC(da50622e) SHA1(32c75b6270d401a6825632c66f3026cae7b5b81f) ) // slight difference: 99.998474%: 0x1116 from 0x09 to 0x0d
+ ROM_RELOAD( 0xc0001, 0x10000 )
+ ROM_LOAD16_BYTE( "ic110.9d", 0x60001, 0x10000, CRC(0e0aefcd) SHA1(f5056a2d0612d912aff1e0eccb1182de7ae16990) )
+ ROM_RELOAD( 0xe0001, 0x10000 )
+ ROM_LOAD16_BYTE( "ic92.7e", 0x40000, 0x10000, CRC(38fce272) SHA1(4fe4d0838d21f3022b440a32ec69b25e936e62dd) )
+ ROM_RELOAD( 0xc0000, 0x10000 )
+ ROM_LOAD16_BYTE( "ic91.7d", 0x60000, 0x10000, CRC(d69c0722) SHA1(ef18e7b7057f19caaa61d0b8c07d2d0c6e0a555e) )
+ ROM_RELOAD( 0xe0000, 0x10000 )
+
+ ROM_REGION( 0x10000, "mcu", 0 )
+ ROM_LOAD( "25.ic27.2l", 0x00000, 0x2000, CRC(d83359a2) SHA1(2d486bf4a873abfe591e0d9383f9e230f47bc42a) ) // i80c31 instead of i8751, contents identical to imgfightj MCU, with second half padded with 0xff
+
+ ROM_REGION( 0x080000, "sprites", 0 ) // half size ROMs, but identical content
+ ROM_LOAD( "ic96.7k", 0x00000, 0x10000, CRC(d4febb03) SHA1(6fe53b198bdcef1708ff134c64af9c064e274e1b) ) /* sprites */
+ ROM_LOAD( "ic97.7l", 0x10000, 0x10000, CRC(973d7bbc) SHA1(409242ddc7eb90564a15b222641e53d11ab1e04a) )
+ ROM_LOAD( "ic115.9k", 0x20000, 0x10000, CRC(2328880b) SHA1(a35c77a7d04614dbfbca4c79bb3e729115129ee4) )
+ ROM_LOAD( "ic116.9l", 0x30000, 0x10000, CRC(6da001ea) SHA1(473ed89b77809b3b76bfa9f5ca4008c9534cdbb4) )
+ ROM_LOAD( "ic94.7h", 0x40000, 0x10000, CRC(92bc7fda) SHA1(521d4a29e06eb8790fdeeba968f99a389f50a24e) )
+ ROM_LOAD( "ic95.7j", 0x50000, 0x10000, CRC(e63a5918) SHA1(fd3374866f922cef72c0678aa751ad1e6f95a12a) )
+ ROM_LOAD( "ic113.9h", 0x60000, 0x10000, CRC(27caec8e) SHA1(cc1943ba9548715425e799f418750cd70c3f88da) )
+ ROM_LOAD( "ic114.9j", 0x70000, 0x10000, CRC(1933eb65) SHA1(4c24cfd059c11875f53b57cc020fbdbac903bd4a) )
+
+ ROM_REGION( 0x040000, "gfx2", 0 ) // identical
+ ROM_LOAD( "ic30.3d", 0x00000, 0x10000, CRC(34ee2d77) SHA1(38826e0318aa8da893fa4c93f217288c015df606) ) /* tiles #1 */
+ ROM_LOAD( "ic31.3e", 0x10000, 0x10000, CRC(6bd2845b) SHA1(149cf14f919590da88b9a8e254690da010709862) )
+ ROM_LOAD( "ic29.3c", 0x20000, 0x10000, CRC(090d50e5) SHA1(4f2a7c76320b3f8dafae90a246187e034fe7562b) )
+ ROM_LOAD( "ic32.3f", 0x30000, 0x10000, CRC(3a8e3083) SHA1(8a75d556790b6bea41ead1a5f95589dd293bdf4e) )
+
+ ROM_REGION( 0x040000, "gfx3", 0 ) // identical
+ ROM_LOAD( "ic35.3k", 0x00000, 0x10000, CRC(b425c829) SHA1(0ccd487dba00bb7cb0ff5d1c67f8fee3e68df5d8) ) /* tiles #2 */
+ ROM_LOAD( "ic36.3l", 0x10000, 0x10000, CRC(e9bfe23e) SHA1(f97a68dbdce7e06d07faab19acf7625cdc8eeaa8) )
+ ROM_LOAD( "ic34.3j", 0x20000, 0x10000, CRC(256e50f2) SHA1(9e9fda4f1f1449548942c0da4478f61fe0d263d1) )
+ ROM_LOAD( "ic33.3h", 0x30000, 0x10000, CRC(4c682785) SHA1(f61f1227e0ad629fdfca106306b17a9f6a9959e3) )
+
+ ROM_REGION( 0x20000, "samples", 0 ) /* samples, identical */
+ ROM_LOAD( "ic28.lower.2n.bin", 0x00000, 0x10000, CRC(cb64a194) SHA1(940fad6b9147bccc8290e112f5973f8ea062b52f) )
+ ROM_LOAD( "ic28.lower.2n.bin", 0x10000, 0x10000, CRC(45b68bf5) SHA1(2fb28793019ca85b3b6d7c4c31eedff1d71f2d83) )
+ROM_END
+
ROM_START( loht )
ROM_REGION( 0x100000, "maincpu", 0 )
ROM_LOAD16_BYTE( "tom_c-h0.rom", 0x00001, 0x20000, CRC(a63204b6) SHA1(d217bc70650a1a1bbe0cf536ec3bb678f670718d) )
@@ -3830,6 +3888,7 @@ GAME( 1988, nspiritj, nspirit, m72_8751, nspirit, m72_state, init_m
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, m72_8751, 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, 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?)
GAME( 1989, lohtj, loht, m72_8751, loht, m72_state, init_m72_8751, ROT0, "Irem", "Legend of Hero Tonma (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // waits for japan warning screen, works with our mcu dump (Japan Version)
diff --git a/src/mame/drivers/macrossp.cpp b/src/mame/drivers/macrossp.cpp
index 62ae2e8c7f5..d0fe5b3b565 100644
--- a/src/mame/drivers/macrossp.cpp
+++ b/src/mame/drivers/macrossp.cpp
@@ -310,7 +310,7 @@ WRITE32_MEMBER(macrossp_state::macrossp_soundcmd_w)
if (ACCESSING_BITS_16_31)
{
//logerror("%08x write soundcmd %08x (%08x)\n",m_maincpu->pc(),data,mem_mask);
- m_soundlatch->write(space, 0, data >> 16, 0xffff);
+ m_soundlatch->write(data >> 16);
m_sndpending = 1;
m_audiocpu->set_input_line(2, HOLD_LINE);
/* spin for a while to let the sound CPU read the command */
@@ -322,7 +322,7 @@ READ16_MEMBER(macrossp_state::macrossp_soundcmd_r)
{
// logerror("%06x read soundcmd\n",m_audiocpu->pc());
m_sndpending = 0;
- return m_soundlatch->read(space, offset, mem_mask);
+ return m_soundlatch->read();
}
WRITE16_MEMBER(macrossp_state::palette_fade_w)
diff --git a/src/mame/drivers/magmax.cpp b/src/mame/drivers/magmax.cpp
index 647abfb29a6..0b3aef9ecb9 100644
--- a/src/mame/drivers/magmax.cpp
+++ b/src/mame/drivers/magmax.cpp
@@ -40,7 +40,7 @@ WRITE16_MEMBER(magmax_state::cpu_irq_ack_w)
READ8_MEMBER(magmax_state::sound_r)
{
- return (m_soundlatch->read(space, 0) << 1) | m_LS74_q;
+ return (m_soundlatch->read() << 1) | m_LS74_q;
}
WRITE8_MEMBER(magmax_state::ay8910_portB_0_w)
diff --git a/src/mame/drivers/matmania.cpp b/src/mame/drivers/matmania.cpp
index 003d1281534..4b75f814977 100644
--- a/src/mame/drivers/matmania.cpp
+++ b/src/mame/drivers/matmania.cpp
@@ -58,13 +58,13 @@ READ8_MEMBER(matmania_state::maniach_mcu_status_r)
WRITE8_MEMBER(matmania_state::matmania_sh_command_w)
{
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
}
WRITE8_MEMBER(matmania_state::maniach_sh_command_w)
{
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE);
}
diff --git a/src/mame/drivers/mazerbla.cpp b/src/mame/drivers/mazerbla.cpp
index c5cdaa330d3..14c437ef855 100644
--- a/src/mame/drivers/mazerbla.cpp
+++ b/src/mame/drivers/mazerbla.cpp
@@ -962,8 +962,8 @@ void mazerbla_state::machine_reset()
if (m_soundlatch.found())
{
- m_soundlatch->clear_w(machine().dummy_space(), 0, 0);
- m_soundlatch->acknowledge_w(machine().dummy_space(), 0, 0);
+ m_soundlatch->clear_w();
+ m_soundlatch->acknowledge_w();
}
for (i = 0; i < 4; i++)
diff --git a/src/mame/drivers/megasys1.cpp b/src/mame/drivers/megasys1.cpp
index 34b19cf50a4..c0ae6c43862 100644
--- a/src/mame/drivers/megasys1.cpp
+++ b/src/mame/drivers/megasys1.cpp
@@ -571,7 +571,7 @@ void megasys1_state::z80_sound_map(address_map &map)
{
map(0x0000, 0x3fff).rom();
map(0xc000, 0xc7ff).ram();
- map(0xe000, 0xe000).lr8("soundlatch_r_z", [this](address_space &space, offs_t offset){ return m_soundlatch[0]->read(space, 0) & 0xff; });
+ map(0xe000, 0xe000).lr8("soundlatch_r_z", [this](){ return m_soundlatch[0]->read() & 0xff; });
map(0xf000, 0xf000).nopw(); /* ?? */
}
diff --git a/src/mame/drivers/meijinsn.cpp b/src/mame/drivers/meijinsn.cpp
index 044f9e47e00..fab8e143cfa 100644
--- a/src/mame/drivers/meijinsn.cpp
+++ b/src/mame/drivers/meijinsn.cpp
@@ -118,7 +118,7 @@ private:
WRITE16_MEMBER(meijinsn_state::sound_w)
{
if (ACCESSING_BITS_0_7)
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
}
READ16_MEMBER(meijinsn_state::alpha_mcu_r)
diff --git a/src/mame/drivers/mephisto.cpp b/src/mame/drivers/mephisto.cpp
index 10831424658..d1c142e3194 100644
--- a/src/mame/drivers/mephisto.cpp
+++ b/src/mame/drivers/mephisto.cpp
@@ -415,11 +415,11 @@ void mephisto_state::init_mephisto()
***************************************************************************/
-/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
-CONS( 1984, mm2, mm4, 0, mm2, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto MM2 Schachcomputer", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1986, rebel5, mm4, 0, rebel5, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto Rebell 5,0 Schachcomputer", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1987, mm4, 0, 0, mephisto, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto 4 Schachcomputer", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1987, mm4tk, mm4, 0, mm4tk, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto 4 Schachcomputer Turbo Kit + HG440", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1990, mm5, mm4, 0, mephisto, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto 5.1 Schachcomputer", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1990, mm50, mm4, 0, mephisto, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto 5.0 Schachcomputer", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1990, mm5tk, mm4, 0, mm4tk, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto 5.1 Schachcomputer Turbo Kit + HG550", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME, FLAGS */
+CONS( 1984, mm2, mm4, 0, mm2, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto MM II", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1986, rebel5, mm4, 0, rebel5, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto Rebell 5.0", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1987, mm4, 0, 0, mephisto, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto MM IV", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1987, mm4tk, mm4, 0, mm4tk, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto MM IV (TurboKit + HG440)", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1990, mm5, mm4, 0, mephisto, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto MM V (V5.1)", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1990, mm50, mm4, 0, mephisto, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto MM V (V5.0)", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1990, mm5tk, mm4, 0, mm4tk, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto MM V (V5.1) (TurboKit + HG550)", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
diff --git a/src/mame/drivers/metro.cpp b/src/mame/drivers/metro.cpp
index f707ab3cb4d..989513f433e 100644
--- a/src/mame/drivers/metro.cpp
+++ b/src/mame/drivers/metro.cpp
@@ -292,10 +292,9 @@ WRITE_LINE_MEMBER(metro_state::puzzlet_vblank_irq)
READ_LINE_MEMBER(metro_state::rxd_r)
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- uint8_t data = m_soundlatch->read(space, 0);
+ uint8_t data = m_soundlatch->read();
- m_soundlatch->write(space, 0, data >> 1);
+ m_soundlatch->write(data >> 1);
return data & 1;
@@ -303,7 +302,7 @@ READ_LINE_MEMBER(metro_state::rxd_r)
WRITE8_MEMBER(metro_state::soundlatch_w)
{
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); // seen rxd_r
m_maincpu->spin_until_interrupt();
m_busy_sndcpu = 1;
diff --git a/src/mame/drivers/mgames.cpp b/src/mame/drivers/mgames.cpp
index 7da4899e525..82e504689fc 100644
--- a/src/mame/drivers/mgames.cpp
+++ b/src/mame/drivers/mgames.cpp
@@ -238,6 +238,8 @@ public:
void mgames(machine_config &config);
private:
+ tilemap_t *m_tilemap;
+
DECLARE_READ8_MEMBER(mixport_r);
DECLARE_WRITE8_MEMBER(outport0_w);
DECLARE_WRITE8_MEMBER(outport1_w);
@@ -247,12 +249,14 @@ private:
DECLARE_WRITE8_MEMBER(outport5_w);
DECLARE_WRITE8_MEMBER(outport6_w);
DECLARE_WRITE8_MEMBER(outport7_w);
+
void mgames_palette(palette_device &palette) const;
uint32_t screen_update_mgames(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ TILE_GET_INFO_MEMBER(tile_info);
+
void main_map(address_map &map);
- virtual void machine_start() override { m_lamps.resolve(); }
- virtual void video_start() override;
+ virtual void machine_start() override;
uint8_t m_output[8];
required_shared_ptr<uint8_t> m_video;
@@ -263,41 +267,40 @@ private:
output_finder<9> m_lamps;
};
+TILE_GET_INFO_MEMBER( mgames_state::tile_info )
+{
+ uint8_t code = m_video[tile_index];
+ uint8_t color = m_video[tile_index + 0x400] & 0x3f;
+
+ SET_TILE_INFO_MEMBER(0, code, color, 0);
+}
-void mgames_state::video_start()
+void mgames_state::machine_start()
{
+ m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(mgames_state::tile_info), this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32);
+
+ m_lamps.resolve();
}
uint32_t mgames_state::screen_update_mgames(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- gfx_element *const gfx = m_gfxdecode->gfx(0);
+ m_tilemap->mark_all_dirty();
+ m_tilemap->draw(screen, bitmap, cliprect, 0, 0);
- int count = 0;
- for (int y = 0; y < 32; y++)
- {
- for (int x = 0; x < 32; x++)
- {
- uint16_t const dat = m_video[count];
- uint16_t const col = m_video[count + 0x400] & 0x7f;
- gfx->opaque(bitmap, cliprect, dat, col, 0, 0, x * 16, y * 16);
- count++;
- }
- }
return 0;
}
void mgames_state::mgames_palette(palette_device &palette) const
{
- for (int i = 0; i < 0x100; i++)
+ for (int i = 0; i < 64; i++)
{
- rgb_t color;
-
- if (i & 0x01)
- color = rgb_t(pal2bit((i & 0x6) >> 1), pal2bit((i & 0x18) >> 3), pal2bit((i & 0x60) >> 5));
- else
- color = rgb_t::black();
-
- palette.set_pen_color(i, color);
+ palette.set_indirect_color(i, rgb_t(
+ pal2bit((i >> 0) & 3),
+ pal2bit((i >> 2) & 3),
+ pal2bit((i >> 4) & 3)
+ ));
+ palette.set_pen_indirect(i * 2 + 0, 0); // all tiles black background
+ palette.set_pen_indirect(i * 2 + 1, i);
}
}
@@ -622,20 +625,19 @@ static INPUT_PORTS_START( mgames )
INPUT_PORTS_END
-static const gfx_layout tiles16x16_layout =
+static const gfx_layout gfx_16x16x1 =
{
16,16,
RGN_FRAC(1,1),
1,
{ 0 },
- { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
- { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
- 8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16},
+ { STEP16(0,1) },
+ { STEP16(0,16) },
16*16
};
static GFXDECODE_START( gfx_mgames )
- GFXDECODE_ENTRY( "gfx1", 0, tiles16x16_layout, 0, 0x100 )
+ GFXDECODE_ENTRY( "gfx1", 0, gfx_16x16x1, 0, 64 )
GFXDECODE_END
@@ -658,7 +660,7 @@ void mgames_state::mgames(machine_config &config)
screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_mgames);
- PALETTE(config, m_palette, FUNC(mgames_state::mgames_palette), 0x200);
+ PALETTE(config, m_palette, FUNC(mgames_state::mgames_palette), 128, 64);
/* sound hardware */
// to do...
diff --git a/src/mame/drivers/mikromik.cpp b/src/mame/drivers/mikromik.cpp
index f122675dd3c..043c2c50188 100644
--- a/src/mame/drivers/mikromik.cpp
+++ b/src/mame/drivers/mikromik.cpp
@@ -54,6 +54,7 @@
#include "emu.h"
#include "includes/mikromik.h"
+#include "machine/74259.h"
#include "softlist.h"
//#define VERBOSE 1
@@ -89,43 +90,7 @@ READ8_MEMBER( mm1_state::read )
if (mmu & MMU_IOEN)
{
- switch ((offset >> 4) & 0x07)
- {
- case 0:
- data = m_dmac->read(offset & 0x0f);
- break;
-
- case 1:
- data = m_mpsc->cd_ba_r(space, offset & 0x03);
- break;
-
- case 2:
- data = m_crtc->read(space, offset & 0x01);
- break;
-
- case 3:
- data = m_pit->read(offset & 0x03);
- break;
-
- case 4:
- data = m_iop->read(space, 0);
- break;
-
- case 5:
- if (BIT(offset, 0))
- {
- data = m_fdc->fifo_r();
- }
- else
- {
- data = m_fdc->msr_r();
- }
- break;
-
- case 7:
- data = m_hgdc->read(offset & 0x01);
- break;
- }
+ data = m_io->read8(offset & 0x7f);
}
else
{
@@ -158,43 +123,7 @@ WRITE8_MEMBER( mm1_state::write )
if (mmu & MMU_IOEN)
{
- switch ((offset >> 4) & 0x07)
- {
- case 0:
- m_dmac->write(offset & 0x0f, data);
- break;
-
- case 1:
- m_mpsc->cd_ba_w(space, offset & 0x03, data);
- break;
-
- case 2:
- m_crtc->write(space, offset & 0x01, data);
- break;
-
- case 3:
- m_pit->write(offset & 0x03, data);
- break;
-
- case 4:
- m_iop->write(space, 0, data);
- break;
-
- case 5:
- if (BIT(offset, 0))
- {
- m_fdc->fifo_w(data);
- }
- break;
-
- case 6:
- ls259_w(space, offset & 0x07, data);
- break;
-
- case 7:
- m_hgdc->write(offset & 0x01, data);
- break;
- }
+ m_io->write8(offset & 0x7f, data);
}
else
{
@@ -207,53 +136,88 @@ WRITE8_MEMBER( mm1_state::write )
//-------------------------------------------------
-// ls259_w -
+// a8_w -
//-------------------------------------------------
-WRITE8_MEMBER( mm1_state::ls259_w )
+WRITE_LINE_MEMBER( mm1_state::a8_w )
{
- int d = BIT(data, 0);
+ LOG("IC24 A8 %u\n", state);
+ m_a8 = state;
+}
- switch (offset)
- {
- case 0: // IC24 A8
- LOG("IC24 A8 %u\n", d);
- m_a8 = d;
- break;
-
- case 1: // RECALL
- LOG("RECALL %u\n", d);
- m_recall = d;
- if (d) m_fdc->soft_reset();
- break;
-
- case 2: // _RV28/RX21
- m_rx21 = d;
- break;
-
- case 3: // _TX21
- m_tx21 = d;
- break;
-
- case 4: // _RCL
- m_rcl = d;
- break;
-
- case 5: // _INTC
- m_intc = d;
- break;
-
- case 6: // LLEN
- LOG("LLEN %u\n", d);
- m_llen = d;
- break;
-
- case 7: // MOTOR ON
- LOG("MOTOR %u\n", d);
- m_floppy0->mon_w(!d);
- m_floppy1->mon_w(!d);
- break;
- }
+
+//-------------------------------------------------
+// recall_w -
+//-------------------------------------------------
+
+WRITE_LINE_MEMBER( mm1_state::recall_w )
+{
+ LOG("RECALL %u\n", state);
+ m_recall = state;
+ if (state) m_fdc->soft_reset();
+}
+
+
+//-------------------------------------------------
+// rx21_w -
+//-------------------------------------------------
+
+WRITE_LINE_MEMBER( mm1_state::rx21_w )
+{
+ m_rx21 = state;
+}
+
+
+//-------------------------------------------------
+// tx21_w -
+//-------------------------------------------------
+
+WRITE_LINE_MEMBER( mm1_state::tx21_w )
+{
+ m_tx21 = state;
+}
+
+
+//-------------------------------------------------
+// rcl_w -
+//-------------------------------------------------
+
+WRITE_LINE_MEMBER( mm1_state::rcl_w )
+{
+ m_rcl = state;
+}
+
+
+//-------------------------------------------------
+// intc_w -
+//-------------------------------------------------
+
+WRITE_LINE_MEMBER( mm1_state::intc_w )
+{
+ m_intc = state;
+}
+
+
+//-------------------------------------------------
+// llen_w -
+//-------------------------------------------------
+
+WRITE_LINE_MEMBER( mm1_state::llen_w )
+{
+ LOG("LLEN %u\n", state);
+ m_llen = state;
+}
+
+
+//-------------------------------------------------
+// motor_on_w -
+//-------------------------------------------------
+
+WRITE_LINE_MEMBER( mm1_state::motor_on_w )
+{
+ LOG("MOTOR %u\n", state);
+ m_floppy0->mon_w(!state);
+ m_floppy1->mon_w(!state);
}
@@ -271,6 +235,18 @@ void mm1_state::mm1_map(address_map &map)
map(0x0000, 0xffff).rw(FUNC(mm1_state::read), FUNC(mm1_state::write));
}
+void mm1_state::mmu_io_map(address_map &map)
+{
+ map(0x00, 0x0f).rw(m_dmac, FUNC(am9517a_device::read), FUNC(am9517a_device::write));
+ map(0x10, 0x13).mirror(0x0c).rw(m_mpsc, FUNC(upd7201_device::cd_ba_r), FUNC(upd7201_device::cd_ba_w));
+ map(0x20, 0x21).mirror(0x0e).rw(m_crtc, FUNC(i8275_device::read), FUNC(i8275_device::write));
+ map(0x30, 0x33).mirror(0x0c).rw(m_pit, FUNC(pit8253_device::read), FUNC(pit8253_device::write));
+ map(0x40, 0x40).mirror(0x0f).rw(m_iop, FUNC(i8212_device::read), FUNC(i8212_device::write));
+ map(0x50, 0x51).mirror(0x0e).m(m_fdc, FUNC(upd765a_device::map));
+ map(0x60, 0x67).mirror(0x08).w("outlatch", FUNC(ls259_device::write_d0));
+ map(0x70, 0x71).mirror(0x0e).rw(m_hgdc, FUNC(upd7220_device::read), FUNC(upd7220_device::write));
+}
+
//**************************************************************************
@@ -437,14 +413,6 @@ void mm1_state::machine_start()
void mm1_state::machine_reset()
{
- address_space &program = m_maincpu->space(AS_PROGRAM);
-
- // reset LS259
- for (int i = 0; i < 8; i++)
- {
- ls259_w(program, i, 0);
- }
-
// reset FDC
m_fdc->reset();
}
@@ -470,10 +438,25 @@ void mm1_state::mm1(machine_config &config)
config.m_perfect_cpu_quantum = subtag(I8085A_TAG);
// peripheral hardware
+ ADDRESS_MAP_BANK(config, m_io);
+ m_io->set_addrmap(0, &mm1_state::mmu_io_map);
+ m_io->set_data_width(8);
+ m_io->set_addr_width(7);
+
I8212(config, m_iop, 0);
m_iop->int_wr_callback().set_inputline(m_maincpu, I8085_RST65_LINE);
m_iop->di_rd_callback().set(KB_TAG, FUNC(mm1_keyboard_device::read));
+ ls259_device &outlatch(LS259(config, "outlatch"));
+ outlatch.q_out_cb<0>().set(FUNC(mm1_state::a8_w)); // IC24 A8
+ outlatch.q_out_cb<1>().set(FUNC(mm1_state::recall_w)); // RECALL
+ outlatch.q_out_cb<2>().set(FUNC(mm1_state::rx21_w)); // _RV28/RX21
+ outlatch.q_out_cb<3>().set(FUNC(mm1_state::tx21_w)); // _TX21
+ outlatch.q_out_cb<4>().set(FUNC(mm1_state::rcl_w)); // _RCL
+ outlatch.q_out_cb<5>().set(FUNC(mm1_state::intc_w)); // _INTC
+ outlatch.q_out_cb<6>().set(FUNC(mm1_state::llen_w)); // LLEN
+ outlatch.q_out_cb<7>().set(FUNC(mm1_state::motor_on_w)); // MOTOR ON
+
AM9517A(config, m_dmac, 6.144_MHz_XTAL/2);
m_dmac->out_hreq_callback().set(FUNC(mm1_state::dma_hrq_w));
m_dmac->out_eop_callback().set(FUNC(mm1_state::dma_eop_w));
diff --git a/src/mame/drivers/mil4000.cpp b/src/mame/drivers/mil4000.cpp
index 3c7e1efb736..d4e37d14353 100644
--- a/src/mame/drivers/mil4000.cpp
+++ b/src/mame/drivers/mil4000.cpp
@@ -589,7 +589,7 @@ void mil4000_state::mil4000(machine_config &config)
void mil4000_state::chewheel(machine_config &config)
{
mil4000(config);
-
+
m_maincpu->set_addrmap(AS_PROGRAM, &mil4000_state::chewheel_map); /* 2MHz */
}
diff --git a/src/mame/drivers/mirage.cpp b/src/mame/drivers/mirage.cpp
index 49f970c0b9d..92107fedea7 100644
--- a/src/mame/drivers/mirage.cpp
+++ b/src/mame/drivers/mirage.cpp
@@ -315,7 +315,6 @@ void miragemj_state::mirage(machine_config &config)
PALETTE(config, "palette").set_format(palette_device::xBGR_555, 1024);
DECO16IC(config, m_deco_tilegen, 0);
- m_deco_tilegen->set_split(0);
m_deco_tilegen->set_pf1_size(DECO_64x32);
m_deco_tilegen->set_pf2_size(DECO_64x32);
m_deco_tilegen->set_pf1_trans_mask(0x0f);
diff --git a/src/mame/drivers/mirax.cpp b/src/mame/drivers/mirax.cpp
index 41946d23965..8a4f47b3c80 100644
--- a/src/mame/drivers/mirax.cpp
+++ b/src/mame/drivers/mirax.cpp
@@ -296,7 +296,7 @@ WRITE_LINE_MEMBER(mirax_state::nmi_mask_w)
WRITE8_MEMBER(mirax_state::sound_cmd_w)
{
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
diff --git a/src/mame/drivers/mitchell.cpp b/src/mame/drivers/mitchell.cpp
index 5bddb9f9bdb..bc3baaef96c 100644
--- a/src/mame/drivers/mitchell.cpp
+++ b/src/mame/drivers/mitchell.cpp
@@ -433,7 +433,7 @@ void mitchell_state::mstworld_sound_map(address_map &map)
WRITE8_MEMBER(mitchell_state::mstworld_sound_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
diff --git a/src/mame/drivers/mk14.cpp b/src/mame/drivers/mk14.cpp
index eaf6bb8b5c9..076e88fe577 100644
--- a/src/mame/drivers/mk14.cpp
+++ b/src/mame/drivers/mk14.cpp
@@ -117,8 +117,8 @@ void mk14_state::mem_map(address_map &map)
map.unmap_value_high();
map.global_mask(0x0fff);
map(0x000, 0x1ff).mirror(0x600).rom(); // ROM
- map(0x800, 0x87f).mirror(0x600).rw("ic8", FUNC(ins8154_device::ins8154_r), FUNC(ins8154_device::ins8154_w)); // I/O
- map(0x880, 0x8ff).mirror(0x600).ram(); // 128 I/O chip RAM
+ map(0x800, 0x87f).mirror(0x600).rw("ic8", FUNC(ins8154_device::read_io), FUNC(ins8154_device::write_io)); // I/O
+ map(0x880, 0x8ff).mirror(0x600).rw("ic8", FUNC(ins8154_device::read_ram), FUNC(ins8154_device::write_ram)); // 128 bytes I/O chip RAM
map(0x900, 0x9ff).mirror(0x400).rw(FUNC(mk14_state::keyboard_r), FUNC(mk14_state::display_w));
map(0xb00, 0xbff).ram(); // VDU RAM
map(0xf00, 0xfff).ram(); // Standard RAM
diff --git a/src/mame/drivers/mmm.cpp b/src/mame/drivers/mmm.cpp
index 0f077d6d761..2e2e2f9dc45 100644
--- a/src/mame/drivers/mmm.cpp
+++ b/src/mame/drivers/mmm.cpp
@@ -26,9 +26,12 @@ public:
void mmm(machine_config &config);
private:
- DECLARE_WRITE8_MEMBER(strobe_w);
- DECLARE_READ8_MEMBER(inputs_r);
- DECLARE_WRITE8_MEMBER(ay_porta_w);
+ void strobe_w(u8 data);
+ u8 inputs_r();
+ void ay_porta_w(u8 data);
+
+ u8 ctc_r(offs_t offset);
+ void ctc_w(offs_t offset, u8 data);
void io_map(address_map &map);
void mem_map(address_map &map);
@@ -40,12 +43,12 @@ private:
};
-WRITE8_MEMBER(mmm_state::strobe_w)
+void mmm_state::strobe_w(u8 data)
{
m_strobe = data;
}
-READ8_MEMBER(mmm_state::inputs_r)
+u8 mmm_state::inputs_r()
{
u8 result = 0xff;
for (int i = 0; i < 8; i++)
@@ -54,11 +57,21 @@ READ8_MEMBER(mmm_state::inputs_r)
return result;
}
-WRITE8_MEMBER(mmm_state::ay_porta_w)
+void mmm_state::ay_porta_w(u8 data)
{
logerror("Writing %02X to AY-3-8910 port A\n", data);
}
+u8 mmm_state::ctc_r(offs_t offset)
+{
+ return m_ctc->read(offset >> 4);
+}
+
+void mmm_state::ctc_w(offs_t offset, u8 data)
+{
+ m_ctc->write(offset >> 4, data);
+}
+
void mmm_state::mem_map(address_map &map)
{
map(0x0000, 0x3fff).rom();
@@ -72,13 +85,7 @@ void mmm_state::io_map(address_map &map)
map(0x03, 0x03).w("aysnd", FUNC(ay8910_device::address_w));
map(0x04, 0x04).w("aysnd", FUNC(ay8910_device::data_w));
map(0x05, 0x05).r("aysnd", FUNC(ay8910_device::data_r));
- map(0x06, 0x06).select(0x30).lrw8("ctc_rw",
- [this](address_space &space, offs_t offset, u8 mem_mask) {
- return m_ctc->read(space, offset >> 4, mem_mask);
- },
- [this](address_space &space, offs_t offset, u8 data, u8 mem_mask) {
- m_ctc->write(space, offset >> 4, data, mem_mask);
- });
+ map(0x06, 0x06).select(0x30).rw(FUNC(mmm_state::ctc_r), FUNC(mmm_state::ctc_w));
map(0x07, 0x07).r(FUNC(mmm_state::inputs_r));
}
diff --git a/src/mame/drivers/model1.cpp b/src/mame/drivers/model1.cpp
index 8c50750fe83..cda8f528396 100644
--- a/src/mame/drivers/model1.cpp
+++ b/src/mame/drivers/model1.cpp
@@ -890,7 +890,7 @@ WRITE16_MEMBER(model1_state::md0_w)
WRITE16_MEMBER(model1_state::p_w)
{
uint16_t old = m_paletteram16[offset];
- m_palette->write16(space, offset, data, mem_mask);
+ m_palette->write16(offset, data, mem_mask);
if(0 && m_paletteram16[offset] != old)
logerror("XVIDEO: p_w %x, %04x @ %04x (%x)\n", offset, data, mem_mask, m_maincpu->pc());
}
diff --git a/src/mame/drivers/ms32.cpp b/src/mame/drivers/ms32.cpp
index 431ee15cae4..83b746c473a 100644
--- a/src/mame/drivers/ms32.cpp
+++ b/src/mame/drivers/ms32.cpp
@@ -522,7 +522,7 @@ READ32_MEMBER(ms32_state::ms32_read_inputs3)
WRITE32_MEMBER(ms32_state::ms32_sound_w)
{
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
// give the Z80 time to respond
m_maincpu->spin_until_time(attotime::from_usec(40));
@@ -1657,7 +1657,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(ms32_state::ms32_interrupt)
READ8_MEMBER(ms32_state::latch_r)
{
- return m_soundlatch->read(space,0)^0xff;
+ return m_soundlatch->read()^0xff;
}
WRITE8_MEMBER(ms32_state::ms32_snd_bank_w)
diff --git a/src/mame/drivers/msisaac.cpp b/src/mame/drivers/msisaac.cpp
index 6aeb46add8f..37c029fda7e 100644
--- a/src/mame/drivers/msisaac.cpp
+++ b/src/mame/drivers/msisaac.cpp
@@ -36,7 +36,7 @@ TIMER_CALLBACK_MEMBER(msisaac_state::nmi_callback)
WRITE8_MEMBER(msisaac_state::sound_command_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
machine().scheduler().synchronize(timer_expired_delegate(FUNC(msisaac_state::nmi_callback),this), data);
}
diff --git a/src/mame/drivers/mugsmash.cpp b/src/mame/drivers/mugsmash.cpp
index 55d8c7d9358..8e4b03d8ea0 100644
--- a/src/mame/drivers/mugsmash.cpp
+++ b/src/mame/drivers/mugsmash.cpp
@@ -60,7 +60,7 @@ WRITE16_MEMBER(mugsmash_state::mugsmash_reg2_w)
switch (offset)
{
case 1:
- m_soundlatch->write(space, 1, data & 0xff);
+ m_soundlatch->write(data & 0xff);
break;
default:
diff --git a/src/mame/drivers/namcos1.cpp b/src/mame/drivers/namcos1.cpp
index a8ed56b9b95..458bedf556e 100644
--- a/src/mame/drivers/namcos1.cpp
+++ b/src/mame/drivers/namcos1.cpp
@@ -347,12 +347,12 @@ C - uses sub board with support for player 3 and 4 controls
/**********************************************************************/
-WRITE8_MEMBER(namcos1_state::audiocpu_irq_ack_w)
+void namcos1_state::audiocpu_irq_ack_w(u8 data)
{
m_audiocpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
}
-WRITE8_MEMBER(namcos1_state::mcu_irq_ack_w)
+void namcos1_state::mcu_irq_ack_w(u8 data)
{
m_mcu->set_input_line(HD6301_IRQ_LINE, CLEAR_LINE);
}
@@ -366,20 +366,20 @@ READ8_MEMBER(namcos1_state::dsw_r)
// ------1- ls257 dsw selector 3y
// -------0 ls257 dsw selector 4y
- m_dsw_sel->write_ba(m_io_dipsw->read());
+ m_dsw_sel->ba_w(m_io_dipsw->read());
m_dsw_sel->select_w(BIT(offset, 1));
- return 0xf0 | bitswap<4>(m_dsw_sel->output_r(space, 0), 0, 1, 2, 3);
+ return 0xf0 | bitswap<4>(m_dsw_sel->output_r(), 0, 1, 2, 3);
}
-WRITE8_MEMBER(namcos1_state::coin_w)
+void namcos1_state::coin_w(u8 data)
{
machine().bookkeeping().coin_lockout_global_w(BIT(~data, 0));
machine().bookkeeping().coin_counter_w(0, BIT(data, 1));
machine().bookkeeping().coin_counter_w(1, BIT(data, 2));
}
-WRITE8_MEMBER(namcos1_state::dac_gain_w)
+void namcos1_state::dac_gain_w(u8 data)
{
/* DAC0 (GAIN0 = bit0, GAIN1 = bit2) */
int dac0_gain = (BIT(data, 2) << 1) | BIT(data, 0);
diff --git a/src/mame/drivers/namcos2.cpp b/src/mame/drivers/namcos2.cpp
index d3343cb5054..0b03529e90e 100644
--- a/src/mame/drivers/namcos2.cpp
+++ b/src/mame/drivers/namcos2.cpp
@@ -2332,8 +2332,8 @@ ROM_START( assault )
NAMCOS2_GFXROM_LOAD_128K( "atshape.bin", 0x000000, CRC(dfcad82b) SHA1(9c3826b8dc36fa0d71c0de7f8be3479d9a025803) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */
- NAMCOS2_DATA_LOAD_E_128K( "at1dat0.bin", 0x000000, CRC(844890f4) SHA1(1be30760acd81fae836301d81d6adbb3e5941373) )
- NAMCOS2_DATA_LOAD_O_128K( "at1dat1.bin", 0x000000, CRC(21715313) SHA1(97c6edae6a5f1df434f1dcf7be307b5e006e72a6) )
+ NAMCOS2_DATA_LOAD_E_128K( "at1dat0.13s", 0x000000, CRC(844890f4) SHA1(1be30760acd81fae836301d81d6adbb3e5941373) )
+ NAMCOS2_DATA_LOAD_O_128K( "at1dat1.13p", 0x000000, CRC(21715313) SHA1(97c6edae6a5f1df434f1dcf7be307b5e006e72a6) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "atvoi1.bin", 0x000000, 0x080000, CRC(d36a649e) SHA1(30173f32c6ec9dda6b8946baa14266e828b0324e) )
@@ -2383,8 +2383,8 @@ ROM_START( assaultj )
NAMCOS2_GFXROM_LOAD_128K( "atshape.bin", 0x000000, CRC(dfcad82b) SHA1(9c3826b8dc36fa0d71c0de7f8be3479d9a025803) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */
- NAMCOS2_DATA_LOAD_E_128K( "at1dat0.bin", 0x000000, CRC(844890f4) SHA1(1be30760acd81fae836301d81d6adbb3e5941373) )
- NAMCOS2_DATA_LOAD_O_128K( "at1dat1.bin", 0x000000, CRC(21715313) SHA1(97c6edae6a5f1df434f1dcf7be307b5e006e72a6) )
+ NAMCOS2_DATA_LOAD_E_128K( "at1dat0.13s", 0x000000, CRC(844890f4) SHA1(1be30760acd81fae836301d81d6adbb3e5941373) )
+ NAMCOS2_DATA_LOAD_O_128K( "at1dat1.13p", 0x000000, CRC(21715313) SHA1(97c6edae6a5f1df434f1dcf7be307b5e006e72a6) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "atvoi1.bin", 0x000000, 0x080000, CRC(d36a649e) SHA1(30173f32c6ec9dda6b8946baa14266e828b0324e) )
@@ -2434,8 +2434,8 @@ ROM_START( assaultp )
NAMCOS2_GFXROM_LOAD_128K( "atshape.bin", 0x000000, CRC(dfcad82b) SHA1(9c3826b8dc36fa0d71c0de7f8be3479d9a025803) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */
- NAMCOS2_DATA_LOAD_E_128K( "at1dat0.bin", 0x000000, CRC(844890f4) SHA1(1be30760acd81fae836301d81d6adbb3e5941373) )
- NAMCOS2_DATA_LOAD_O_128K( "at1dat1.bin", 0x000000, CRC(21715313) SHA1(97c6edae6a5f1df434f1dcf7be307b5e006e72a6) )
+ NAMCOS2_DATA_LOAD_E_128K( "at1dat0.13s", 0x000000, CRC(844890f4) SHA1(1be30760acd81fae836301d81d6adbb3e5941373) )
+ NAMCOS2_DATA_LOAD_O_128K( "at1dat1.13p", 0x000000, CRC(21715313) SHA1(97c6edae6a5f1df434f1dcf7be307b5e006e72a6) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "atvoi1.bin", 0x000000, 0x080000, CRC(d36a649e) SHA1(30173f32c6ec9dda6b8946baa14266e828b0324e) )
@@ -2484,8 +2484,8 @@ ROM_START( burnforc )
NAMCOS2_GFXROM_LOAD_128K( "bu_shape.bin", 0x000000,CRC(80a6b722) SHA1(2c24327a890310c5e8086dc6821627108a88c62e) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */
- NAMCOS2_DATA_LOAD_E_128K( "bu1_dat0.bin", 0x000000, CRC(e0a9d92f) SHA1(15042e6d7b31bec08ccdf36e89fdb4b6fb62fa4b) )
- NAMCOS2_DATA_LOAD_O_128K( "bu1_dat1.bin", 0x000000, CRC(5fe54b73) SHA1(a5d4895f0a4523be20de40ccaa74f8fad0d5df7d) )
+ NAMCOS2_DATA_LOAD_E_128K( "bu1_dat0.13s", 0x000000, CRC(e0a9d92f) SHA1(15042e6d7b31bec08ccdf36e89fdb4b6fb62fa4b) )
+ NAMCOS2_DATA_LOAD_O_128K( "bu1_dat1.13p", 0x000000, CRC(5fe54b73) SHA1(a5d4895f0a4523be20de40ccaa74f8fad0d5df7d) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "bu_voi-1.bin", 0x000000, 0x080000, CRC(99d8a239) SHA1(1ebc586048e757ac0ac68dc9cc171f4849e67cef) )
@@ -2533,8 +2533,8 @@ ROM_START( burnforco )
NAMCOS2_GFXROM_LOAD_128K( "bu_shape.bin", 0x000000,CRC(80a6b722) SHA1(2c24327a890310c5e8086dc6821627108a88c62e) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */
- NAMCOS2_DATA_LOAD_E_128K( "bu1_dat0.bin", 0x000000, CRC(e0a9d92f) SHA1(15042e6d7b31bec08ccdf36e89fdb4b6fb62fa4b) )
- NAMCOS2_DATA_LOAD_O_128K( "bu1_dat1.bin", 0x000000, CRC(5fe54b73) SHA1(a5d4895f0a4523be20de40ccaa74f8fad0d5df7d) )
+ NAMCOS2_DATA_LOAD_E_128K( "bu1_dat0.13s", 0x000000, CRC(e0a9d92f) SHA1(15042e6d7b31bec08ccdf36e89fdb4b6fb62fa4b) )
+ NAMCOS2_DATA_LOAD_O_128K( "bu1_dat1.13p", 0x000000, CRC(5fe54b73) SHA1(a5d4895f0a4523be20de40ccaa74f8fad0d5df7d) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "bu_voi-1.bin", 0x000000, 0x080000, CRC(99d8a239) SHA1(1ebc586048e757ac0ac68dc9cc171f4849e67cef) )
@@ -2575,8 +2575,8 @@ ROM_START( cosmogng )
ROM_LOAD( "co1sha0.bin", 0x000000, 0x80000, CRC(063a70cc) SHA1(c3179d55d57c47d3fef49d45e45b88c4d8250548) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */
- NAMCOS2_DATA_LOAD_E_128K( "co1dat0.bin", 0x000000, CRC(b53da2ae) SHA1(a7fe63668d50928d5d2e2249a5f377c7e8dfc6a5) )
- NAMCOS2_DATA_LOAD_O_128K( "co1dat1.bin", 0x000000, CRC(d21ad10b) SHA1(dcf2d4cc048ea57507952a9a35390af7de5cfe34) )
+ NAMCOS2_DATA_LOAD_E_128K( "co1dat0.13s", 0x000000, CRC(b53da2ae) SHA1(a7fe63668d50928d5d2e2249a5f377c7e8dfc6a5) )
+ NAMCOS2_DATA_LOAD_O_128K( "co1dat1.13p", 0x000000, CRC(d21ad10b) SHA1(dcf2d4cc048ea57507952a9a35390af7de5cfe34) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "co2voi1.bin", 0x000000, 0x080000, CRC(5a301349) SHA1(e333ea5955a66ac8d7c94cd50047efaf6fa95b15) )
@@ -2618,8 +2618,8 @@ ROM_START( cosmogngj )
ROM_LOAD( "co1sha0.bin", 0x000000, 0x80000, CRC(063a70cc) SHA1(c3179d55d57c47d3fef49d45e45b88c4d8250548) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */
- NAMCOS2_DATA_LOAD_E_128K( "co1dat0.bin", 0x000000, CRC(b53da2ae) SHA1(a7fe63668d50928d5d2e2249a5f377c7e8dfc6a5) )
- NAMCOS2_DATA_LOAD_O_128K( "co1dat1.bin", 0x000000, CRC(d21ad10b) SHA1(dcf2d4cc048ea57507952a9a35390af7de5cfe34) )
+ NAMCOS2_DATA_LOAD_E_128K( "co1dat0.13s", 0x000000, CRC(b53da2ae) SHA1(a7fe63668d50928d5d2e2249a5f377c7e8dfc6a5) )
+ NAMCOS2_DATA_LOAD_O_128K( "co1dat1.13p", 0x000000, CRC(d21ad10b) SHA1(dcf2d4cc048ea57507952a9a35390af7de5cfe34) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "co1voi1.bin", 0x000000, 0x080000, CRC(b5ba8f15) SHA1(9e54b9ba1cd44353782adf337376dff9eec4e937) )
@@ -2668,8 +2668,8 @@ ROM_START( dirtfoxj )
NAMCOS2_GFXROM_LOAD_128K( "df1_sha.bin", 0x000000, CRC(9a7c9a9b) SHA1(06221ae8d3f6bebbb5a7ab2eaaf35b9922389115) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */
- NAMCOS2_DATA_LOAD_E_256K( "df1_dat0.bin", 0x000000, CRC(f5851c85) SHA1(e99c05891622cdaab394630b7b2678968e6761d7) )
- NAMCOS2_DATA_LOAD_O_256K( "df1_dat1.bin", 0x000000, CRC(1a31e46b) SHA1(4be7115893b27d6a3dc38c97dcb41eafebb423cd) )
+ NAMCOS2_DATA_LOAD_E_256K( "df1_dat0.13s", 0x000000, CRC(f5851c85) SHA1(e99c05891622cdaab394630b7b2678968e6761d7) )
+ NAMCOS2_DATA_LOAD_O_256K( "df1_dat1.13p", 0x000000, CRC(1a31e46b) SHA1(4be7115893b27d6a3dc38c97dcb41eafebb423cd) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "df1_voi1.bin", 0x000000, 0x080000, CRC(15053904) SHA1(b8ca7e5e53249dbee8284ce1e5c0e6438e64b2cf) )
@@ -2712,8 +2712,8 @@ ROM_START( dsaber )
ROM_LOAD( "shape.bin", 0x000000, 0x80000, CRC(698e7a3e) SHA1(4d41bf0242626ca1448d1f650c84b5987a7f6597) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */
- NAMCOS2_DATA_LOAD_E_128K( "do1 dat0.data0", 0x000000, CRC(3e53331f) SHA1(3dd4c133f587361f30ab1b890f5b05749d5838e3) )
- NAMCOS2_DATA_LOAD_O_128K( "do1 dat1.data1", 0x000000, CRC(d5427f11) SHA1(af8d8153dc60044616a6b0571831c53c09fefda1) )
+ NAMCOS2_DATA_LOAD_E_128K( "do1 dat0.13s", 0x000000, CRC(3e53331f) SHA1(3dd4c133f587361f30ab1b890f5b05749d5838e3) )
+ NAMCOS2_DATA_LOAD_O_128K( "do1 dat1.13p", 0x000000, CRC(d5427f11) SHA1(af8d8153dc60044616a6b0571831c53c09fefda1) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "do voi-1a.voice1", 0x000000, 0x080000, CRC(dadf6a57) SHA1(caba21fc6b62d140f6d8231411ce82ae0ad2837a) )
@@ -2760,8 +2760,8 @@ ROM_START( dsabera )
ROM_LOAD( "shape.bin", 0x000000, 0x80000, CRC(698e7a3e) SHA1(4d41bf0242626ca1448d1f650c84b5987a7f6597) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */
- NAMCOS2_DATA_LOAD_E_128K( "do1 dat0.data0", 0x000000, CRC(3e53331f) SHA1(3dd4c133f587361f30ab1b890f5b05749d5838e3) )
- NAMCOS2_DATA_LOAD_O_128K( "do1 dat1.data1", 0x000000, CRC(d5427f11) SHA1(af8d8153dc60044616a6b0571831c53c09fefda1) )
+ NAMCOS2_DATA_LOAD_E_128K( "do1 dat0.13s", 0x000000, CRC(3e53331f) SHA1(3dd4c133f587361f30ab1b890f5b05749d5838e3) )
+ NAMCOS2_DATA_LOAD_O_128K( "do1 dat1.13p", 0x000000, CRC(d5427f11) SHA1(af8d8153dc60044616a6b0571831c53c09fefda1) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "do voi-1a.voice1", 0x000000, 0x080000, CRC(dadf6a57) SHA1(caba21fc6b62d140f6d8231411ce82ae0ad2837a) )
@@ -2807,8 +2807,8 @@ ROM_START( dsaberj )
ROM_LOAD( "shape.bin", 0x000000, 0x80000, CRC(698e7a3e) SHA1(4d41bf0242626ca1448d1f650c84b5987a7f6597) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */
- NAMCOS2_DATA_LOAD_E_128K( "do1 dat0.data0", 0x000000, CRC(3e53331f) SHA1(3dd4c133f587361f30ab1b890f5b05749d5838e3) )
- NAMCOS2_DATA_LOAD_O_128K( "do1 dat1.data1", 0x000000, CRC(d5427f11) SHA1(af8d8153dc60044616a6b0571831c53c09fefda1) )
+ NAMCOS2_DATA_LOAD_E_128K( "do1 dat0.13s", 0x000000, CRC(3e53331f) SHA1(3dd4c133f587361f30ab1b890f5b05749d5838e3) )
+ NAMCOS2_DATA_LOAD_O_128K( "do1 dat1.13p", 0x000000, CRC(d5427f11) SHA1(af8d8153dc60044616a6b0571831c53c09fefda1) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "do voi-1a.voice1", 0x000000, 0x080000, CRC(dadf6a57) SHA1(caba21fc6b62d140f6d8231411ce82ae0ad2837a) )
@@ -3119,8 +3119,8 @@ ROM_START( finalap2 )
NAMCOS2_GFXROM_LOAD_256K( "fls2sha", 0x000000, CRC(f7b40a85) SHA1(a458a1cc0dae757fe8a15cb5f5ae46d3c033df00) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */
- NAMCOS2_DATA_LOAD_E_256K( "fls2dat0", 0x000000, CRC(f1af432c) SHA1(c514261a49ceb5c3ba0246519ba5d02e9a20d950) )
- NAMCOS2_DATA_LOAD_O_256K( "fls2dat1", 0x000000, CRC(8719533e) SHA1(98d2767da6f7f67da7af15e8cfed95adb04b7427) )
+ NAMCOS2_DATA_LOAD_E_256K( "fls2dat0.13s", 0x000000, CRC(f1af432c) SHA1(c514261a49ceb5c3ba0246519ba5d02e9a20d950) )
+ NAMCOS2_DATA_LOAD_O_256K( "fls2dat1.13p", 0x000000, CRC(8719533e) SHA1(98d2767da6f7f67da7af15e8cfed95adb04b7427) )
ROM_REGION( 0x100, "c45_road:clut", 0 ) /* PROM for road colors */
ROM_LOAD( "fl1-3.5b", 0, 0x100, CRC(d179d99a) SHA1(4e64f284c74d2b77f893bd28aaa6489084056aa2) )
@@ -3174,8 +3174,8 @@ ROM_START( finalap2j )
NAMCOS2_GFXROM_LOAD_256K( "fls2sha", 0x000000, BAD_DUMP CRC(f7b40a85) SHA1(a458a1cc0dae757fe8a15cb5f5ae46d3c033df00) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */
- NAMCOS2_DATA_LOAD_E_256K( "fls2dat0", 0x000000, CRC(f1af432c) SHA1(c514261a49ceb5c3ba0246519ba5d02e9a20d950) )
- NAMCOS2_DATA_LOAD_O_256K( "fls2dat1", 0x000000, CRC(8719533e) SHA1(98d2767da6f7f67da7af15e8cfed95adb04b7427) )
+ NAMCOS2_DATA_LOAD_E_256K( "fls2dat0.13s", 0x000000, CRC(f1af432c) SHA1(c514261a49ceb5c3ba0246519ba5d02e9a20d950) )
+ NAMCOS2_DATA_LOAD_O_256K( "fls2dat1.13p", 0x000000, CRC(8719533e) SHA1(98d2767da6f7f67da7af15e8cfed95adb04b7427) )
ROM_REGION( 0x100, "c45_road:clut", 0 ) /* PROM for road colors */
ROM_LOAD( "fl1-3.5b", 0, 0x100, CRC(d179d99a) SHA1(4e64f284c74d2b77f893bd28aaa6489084056aa2) )
@@ -3460,8 +3460,8 @@ ROM_START( finalap3bl ) // bootleg set
NAMCOS2_GFXROM_LOAD_256K( "flt2_sha.bin", 0x000000, CRC(6986565b) SHA1(df95f2ad5d1e938551d33153f2dcc4711ffd0eba) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
- NAMCOS2_DATA_LOAD_E_128K( "flt1d0", 0x000000, CRC(80004966) SHA1(112b2a9b0ea792d5dbff1b9cf904da788aeede29) )
- NAMCOS2_DATA_LOAD_O_128K( "flt1d1", 0x000000, CRC(a2e93e8c) SHA1(9c8a5431a79153a70eb6939d16e0a5a6be235e75) )
+ NAMCOS2_DATA_LOAD_E_128K( "flt1d0.13s", 0x000000, CRC(80004966) SHA1(112b2a9b0ea792d5dbff1b9cf904da788aeede29) )
+ NAMCOS2_DATA_LOAD_O_128K( "flt1d1.13p", 0x000000, CRC(a2e93e8c) SHA1(9c8a5431a79153a70eb6939d16e0a5a6be235e75) )
ROM_REGION( 0x100, "c45_road:clut", 0 ) /* prom for road colors */
ROM_LOAD( "fl1-3.5b", 0, 0x100, CRC(d179d99a) SHA1(4e64f284c74d2b77f893bd28aaa6489084056aa2) )
@@ -3519,10 +3519,10 @@ ROM_START( finehour )
NAMCOS2_GFXROM_LOAD_256K( "fh1_sha.bin", 0x000000, CRC(15875eb0) SHA1(9225df6b01897938488461ebf0717e6d7b81d562) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
- NAMCOS2_DATA_LOAD_E_128K( "fh1_dt0.bin", 0x000000, CRC(2441c26f) SHA1(429c8f12f7bef3e62153ac8b9e00ea870db36a7b) )
- NAMCOS2_DATA_LOAD_O_128K( "fh1_dt1.bin", 0x000000, CRC(48154deb) SHA1(d6fde316f90bc847f60fa8d997504da34337ffa4) )
- NAMCOS2_DATA_LOAD_E_128K( "fh1_dt2.bin", 0x100000, CRC(12453ba4) SHA1(26ad0da6e56ece6f1ba0b0cf23d2fdae2ce24100) )
- NAMCOS2_DATA_LOAD_O_128K( "fh1_dt3.bin", 0x100000, CRC(50bab9da) SHA1(9c18e5fb810123f9d17042212e0878172e220d2a) )
+ NAMCOS2_DATA_LOAD_E_128K( "fh1_dt0.13s", 0x000000, CRC(2441c26f) SHA1(429c8f12f7bef3e62153ac8b9e00ea870db36a7b) )
+ NAMCOS2_DATA_LOAD_O_128K( "fh1_dt1.13p", 0x000000, CRC(48154deb) SHA1(d6fde316f90bc847f60fa8d997504da34337ffa4) )
+ NAMCOS2_DATA_LOAD_E_128K( "fh1_dt2.13r", 0x100000, CRC(12453ba4) SHA1(26ad0da6e56ece6f1ba0b0cf23d2fdae2ce24100) )
+ NAMCOS2_DATA_LOAD_O_128K( "fh1_dt3.13n", 0x100000, CRC(50bab9da) SHA1(9c18e5fb810123f9d17042212e0878172e220d2a) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "fh1_vo1.bin", 0x000000, 0x080000, CRC(07560fc7) SHA1(76f3855f5a4567dc65d513e37072072c2a011e7e) )
@@ -3737,8 +3737,8 @@ ROM_START( fourtrax )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
NAMCOS2_DATA_LOAD_E_256K( "fx_dat0.13s", 0x000000, CRC(63abf69b) SHA1(6776991eeff434bf9720f49ad6e62c37fc7ddf40) )
- NAMCOS2_DATA_LOAD_O_256K( "fx_dat1.13r", 0x000000, CRC(725bed14) SHA1(bbf886ac7f8c2c7857bc0b5d7f8fc7e63e8e9559) )
- NAMCOS2_DATA_LOAD_E_256K( "fx_dat2.13p", 0x100000, CRC(71e4a5a0) SHA1(a0188c920a43c5e69e25464627094b6b6ed26a59) )
+ NAMCOS2_DATA_LOAD_O_256K( "fx_dat1.13p", 0x000000, CRC(725bed14) SHA1(bbf886ac7f8c2c7857bc0b5d7f8fc7e63e8e9559) )
+ NAMCOS2_DATA_LOAD_E_256K( "fx_dat2.13r", 0x100000, CRC(71e4a5a0) SHA1(a0188c920a43c5e69e25464627094b6b6ed26a59) )
NAMCOS2_DATA_LOAD_O_256K( "fx_dat3.13n", 0x100000, CRC(605725f7) SHA1(b94ce0ec37f879a5e46a097058cb2dd57e2281f1) )
ROM_REGION( 0x100, "c45_road:clut", 0 ) /* prom for road colors */
@@ -3796,8 +3796,8 @@ ROM_START( fourtraxj )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
NAMCOS2_DATA_LOAD_E_256K( "fx_dat0.13s", 0x000000, CRC(63abf69b) SHA1(6776991eeff434bf9720f49ad6e62c37fc7ddf40) )
- NAMCOS2_DATA_LOAD_O_256K( "fx_dat1.13r", 0x000000, CRC(725bed14) SHA1(bbf886ac7f8c2c7857bc0b5d7f8fc7e63e8e9559) )
- NAMCOS2_DATA_LOAD_E_256K( "fx_dat2.13p", 0x100000, CRC(71e4a5a0) SHA1(a0188c920a43c5e69e25464627094b6b6ed26a59) )
+ NAMCOS2_DATA_LOAD_O_256K( "fx_dat1.13p", 0x000000, CRC(725bed14) SHA1(bbf886ac7f8c2c7857bc0b5d7f8fc7e63e8e9559) )
+ NAMCOS2_DATA_LOAD_E_256K( "fx_dat2.13r", 0x100000, CRC(71e4a5a0) SHA1(a0188c920a43c5e69e25464627094b6b6ed26a59) )
NAMCOS2_DATA_LOAD_O_256K( "fx_dat3.13n", 0x100000, CRC(605725f7) SHA1(b94ce0ec37f879a5e46a097058cb2dd57e2281f1) )
ROM_REGION( 0x100, "c45_road:clut", 0 ) /* prom for road colors */
@@ -3866,8 +3866,8 @@ ROM_START( fourtraxa )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
NAMCOS2_DATA_LOAD_E_256K( "fx_dat0.13s", 0x000000, CRC(63abf69b) SHA1(6776991eeff434bf9720f49ad6e62c37fc7ddf40) )
- NAMCOS2_DATA_LOAD_O_256K( "fx_dat1.13r", 0x000000, CRC(725bed14) SHA1(bbf886ac7f8c2c7857bc0b5d7f8fc7e63e8e9559) )
- NAMCOS2_DATA_LOAD_E_256K( "fx_dat2.13p", 0x100000, CRC(71e4a5a0) SHA1(a0188c920a43c5e69e25464627094b6b6ed26a59) )
+ NAMCOS2_DATA_LOAD_O_256K( "fx_dat1.13p", 0x000000, CRC(725bed14) SHA1(bbf886ac7f8c2c7857bc0b5d7f8fc7e63e8e9559) )
+ NAMCOS2_DATA_LOAD_E_256K( "fx_dat2.13r", 0x100000, CRC(71e4a5a0) SHA1(a0188c920a43c5e69e25464627094b6b6ed26a59) )
NAMCOS2_DATA_LOAD_O_256K( "fx_dat3.13n", 0x100000, CRC(605725f7) SHA1(b94ce0ec37f879a5e46a097058cb2dd57e2281f1) )
ROM_REGION( 0x100, "c45_road:clut", 0 ) /* prom for road colors */
@@ -3917,10 +3917,10 @@ ROM_START( marvland )
NAMCOS2_GFXROM_LOAD_256K( "mv1-sha.bin", 0x000000, CRC(a47db5d3) SHA1(110e26412aa84f229773049112709be457b7a6ff) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
- NAMCOS2_DATA_LOAD_E_128K( "mv2_dat0", 0x000000, CRC(62e6318b) SHA1(5c26bc054298f2a0980f7e82ba1844bc9f5eff98) )
- NAMCOS2_DATA_LOAD_O_128K( "mv2_dat1", 0x000000, CRC(8a6902ca) SHA1(272e8699b872b3a50d72090b43c57493e6642bfe) )
- NAMCOS2_DATA_LOAD_E_128K( "mv2_dat2", 0x100000, CRC(f5c6408c) SHA1(568fb08d0763dc91674d708fa2d15ca952956145) )
- NAMCOS2_DATA_LOAD_O_128K( "mv2_dat3", 0x100000, CRC(6df76955) SHA1(fcfb520399acdd3776f66944121d6980552d3100) )
+ NAMCOS2_DATA_LOAD_E_128K( "mv2_dat0.13s", 0x000000, CRC(62e6318b) SHA1(5c26bc054298f2a0980f7e82ba1844bc9f5eff98) )
+ NAMCOS2_DATA_LOAD_O_128K( "mv2_dat1.13p", 0x000000, CRC(8a6902ca) SHA1(272e8699b872b3a50d72090b43c57493e6642bfe) )
+ NAMCOS2_DATA_LOAD_E_128K( "mv2_dat2.13r", 0x100000, CRC(f5c6408c) SHA1(568fb08d0763dc91674d708fa2d15ca952956145) )
+ NAMCOS2_DATA_LOAD_O_128K( "mv2_dat3.13n", 0x100000, CRC(6df76955) SHA1(fcfb520399acdd3776f66944121d6980552d3100) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "mv1-voi1.bin", 0x000000, 0x080000, CRC(de5cac09) SHA1(2d73e54c4f159e52db2c403a59d6c137cce6f53e) )
@@ -3965,8 +3965,8 @@ ROM_START( marvlandj )
NAMCOS2_GFXROM_LOAD_256K( "mv1-sha.bin", 0x000000, CRC(a47db5d3) SHA1(110e26412aa84f229773049112709be457b7a6ff) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
- NAMCOS2_DATA_LOAD_E_128K( "mv1-dat0.bin", 0x000000, CRC(e15f412e) SHA1(d3ff006d4577540a690c912e94897a1b638ac265) )
- NAMCOS2_DATA_LOAD_O_128K( "mv1-dat1.bin", 0x000000, CRC(73e1545a) SHA1(a04034e56fef69fb2a2eb88f2f392c376e52d00d) )
+ NAMCOS2_DATA_LOAD_E_128K( "mv1-dat0.13s", 0x000000, CRC(e15f412e) SHA1(d3ff006d4577540a690c912e94897a1b638ac265) )
+ NAMCOS2_DATA_LOAD_O_128K( "mv1-dat1.13p", 0x000000, CRC(73e1545a) SHA1(a04034e56fef69fb2a2eb88f2f392c376e52d00d) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "mv1-voi1.bin", 0x000000, 0x080000, CRC(de5cac09) SHA1(2d73e54c4f159e52db2c403a59d6c137cce6f53e) )
@@ -4152,8 +4152,8 @@ ROM_START( mirninja )
NAMCOS2_GFXROM_LOAD_128K( "mn_sha.bin", 0x000000, CRC(c28af90f) SHA1(8b7f95375eb32c3e30c2a55b7f543235f56d3a13) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
- NAMCOS2_DATA_LOAD_E_128K( "mn1_dat0.bin", 0x000000, CRC(104bcca8) SHA1(e8368d0dc51bf0653143bf2261d7ed5b54d92941) )
- NAMCOS2_DATA_LOAD_O_128K( "mn1_dat1.bin", 0x000000, CRC(d2a918fb) SHA1(032b7a7bcc60c41325e7b35df9a932e68cdd0788) )
+ NAMCOS2_DATA_LOAD_E_128K( "mn1_dat0.13s", 0x000000, CRC(104bcca8) SHA1(e8368d0dc51bf0653143bf2261d7ed5b54d92941) )
+ NAMCOS2_DATA_LOAD_O_128K( "mn1_dat1.13p", 0x000000, CRC(d2a918fb) SHA1(032b7a7bcc60c41325e7b35df9a932e68cdd0788) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "mn_voi1.bin", 0x000000, 0x080000, CRC(2ca3573c) SHA1(b2af101730de4ccc68acc1ed143c21a8c81f64db) )
@@ -4205,8 +4205,8 @@ ROM_START( ordyne )
NAMCOS2_GFXROM_LOAD_128K( "or_shape.shape", 0x000000, CRC(7aec9dee) SHA1(2e774e4cff69173b4524d6b25a6a449ba5498a6a) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
- NAMCOS2_DATA_LOAD_E_128K( "or1_d0.data0", 0x000000, CRC(de214f7a) SHA1(59883c7886b403306c30e51d7f49225483792650) )
- NAMCOS2_DATA_LOAD_O_128K( "or1_d1.data1", 0x000000, CRC(25e3e6c8) SHA1(ad093f15edaea71f6c7226c6e4f3c2130d418013) )
+ NAMCOS2_DATA_LOAD_E_128K( "or1_d0.13s", 0x000000, CRC(de214f7a) SHA1(59883c7886b403306c30e51d7f49225483792650) )
+ NAMCOS2_DATA_LOAD_O_128K( "or1_d1.13p", 0x000000, CRC(25e3e6c8) SHA1(ad093f15edaea71f6c7226c6e4f3c2130d418013) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "or_voi1.voice1", 0x000000, 0x080000, CRC(369e0bca) SHA1(2a921bb373dd043bd7b2a30e5e46ec3b8b3b5c8d) )
@@ -4261,8 +4261,8 @@ ROM_START( ordyneje )
NAMCOS2_GFXROM_LOAD_128K( "or_shape.shape", 0x000000, CRC(7aec9dee) SHA1(2e774e4cff69173b4524d6b25a6a449ba5498a6a) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
- NAMCOS2_DATA_LOAD_E_128K( "or1_d0.data0", 0x000000, CRC(de214f7a) SHA1(59883c7886b403306c30e51d7f49225483792650) )
- NAMCOS2_DATA_LOAD_O_128K( "or1_d1.data1", 0x000000, CRC(25e3e6c8) SHA1(ad093f15edaea71f6c7226c6e4f3c2130d418013) )
+ NAMCOS2_DATA_LOAD_E_128K( "or1_d0.13s", 0x000000, CRC(de214f7a) SHA1(59883c7886b403306c30e51d7f49225483792650) )
+ NAMCOS2_DATA_LOAD_O_128K( "or1_d1.13p", 0x000000, CRC(25e3e6c8) SHA1(ad093f15edaea71f6c7226c6e4f3c2130d418013) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "or_voi1.voice1", 0x000000, 0x080000, CRC(369e0bca) SHA1(2a921bb373dd043bd7b2a30e5e46ec3b8b3b5c8d) )
@@ -4317,8 +4317,8 @@ ROM_START( ordynej )
NAMCOS2_GFXROM_LOAD_128K( "or_shape.shape", 0x000000, CRC(7aec9dee) SHA1(2e774e4cff69173b4524d6b25a6a449ba5498a6a) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
- NAMCOS2_DATA_LOAD_E_128K( "or1_d0.data0", 0x000000, CRC(de214f7a) SHA1(59883c7886b403306c30e51d7f49225483792650) )
- NAMCOS2_DATA_LOAD_O_128K( "or1_d1.data1", 0x000000, CRC(25e3e6c8) SHA1(ad093f15edaea71f6c7226c6e4f3c2130d418013) )
+ NAMCOS2_DATA_LOAD_E_128K( "or1_d0.13s", 0x000000, CRC(de214f7a) SHA1(59883c7886b403306c30e51d7f49225483792650) )
+ NAMCOS2_DATA_LOAD_O_128K( "or1_d1.13p", 0x000000, CRC(25e3e6c8) SHA1(ad093f15edaea71f6c7226c6e4f3c2130d418013) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "or_voi1.voice1", 0x000000, 0x080000, CRC(369e0bca) SHA1(2a921bb373dd043bd7b2a30e5e46ec3b8b3b5c8d) )
@@ -4376,8 +4376,8 @@ ROM_START( phelios )
NAMCOS2_GFXROM_LOAD_128K( "ps_shape.shape", 0x000000, CRC(58e26fcf) SHA1(9edc3b54964f923ed07ee878520ccf3f188f04ad) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
- NAMCOS2_DATA_LOAD_E_128K( "ps2_dat0.data0", 0x000000, CRC(ee4194b0) SHA1(a0c2a807db70164ed761e5ad04301e5ae1173e7a) )
- NAMCOS2_DATA_LOAD_O_128K( "ps2_dat1.data1", 0x000000, CRC(5b22d714) SHA1(f6cb1fe661f7691269840245f06875845fd6eb33) )
+ NAMCOS2_DATA_LOAD_E_128K( "ps2_dat0.13s", 0x000000, CRC(ee4194b0) SHA1(a0c2a807db70164ed761e5ad04301e5ae1173e7a) )
+ NAMCOS2_DATA_LOAD_O_128K( "ps2_dat1.13p", 0x000000, CRC(5b22d714) SHA1(f6cb1fe661f7691269840245f06875845fd6eb33) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "ps_voi-1.voice1", 0x000000, 0x080000, CRC(f67376ed) SHA1(b54257aad34c6ad03d5b040e6a5dda94a48b6780) )
@@ -4431,8 +4431,8 @@ ROM_START( pheliosj )
NAMCOS2_GFXROM_LOAD_128K( "ps_shape.shape", 0x000000, CRC(58e26fcf) SHA1(9edc3b54964f923ed07ee878520ccf3f188f04ad) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
- NAMCOS2_DATA_LOAD_E_128K( "ps1_dat0.data0", 0x000000, CRC(ee4194b0) SHA1(a0c2a807db70164ed761e5ad04301e5ae1173e7a) ) /* Same DATA as World set, but labeled PS1 */
- NAMCOS2_DATA_LOAD_O_128K( "ps1_dat1.data1", 0x000000, CRC(5b22d714) SHA1(f6cb1fe661f7691269840245f06875845fd6eb33) ) /* Same DATA as World set, but labeled PS1 */
+ NAMCOS2_DATA_LOAD_E_128K( "ps1_dat0.13s", 0x000000, CRC(ee4194b0) SHA1(a0c2a807db70164ed761e5ad04301e5ae1173e7a) ) /* Same DATA as World set, but labeled PS1 */
+ NAMCOS2_DATA_LOAD_O_128K( "ps1_dat1.13p", 0x000000, CRC(5b22d714) SHA1(f6cb1fe661f7691269840245f06875845fd6eb33) ) /* Same DATA as World set, but labeled PS1 */
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "ps_voi-1.voice1", 0x000000, 0x080000, CRC(f67376ed) SHA1(b54257aad34c6ad03d5b040e6a5dda94a48b6780) )
@@ -4472,9 +4472,9 @@ ROM_START( rthun2 )
ROM_LOAD( "shape.bin", 0x000000, 0x80000, CRC(cf58fbbe) SHA1(fbe3b2f0c3267b298993d6238d97b119e13e07f6) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
- NAMCOS2_DATA_LOAD_E_128K( "rst1_data0.bin", 0x000000, CRC(0baf44ee) SHA1(5135d634f76893adb26a32976a69e2d47e2385c6) )
- NAMCOS2_DATA_LOAD_O_128K( "rst1_data1.bin", 0x000000, CRC(58a8daac) SHA1(c13ae8fc25b748a006c6db5b4b7ae593738544e8) )
- NAMCOS2_DATA_LOAD_E_128K( "rst1_data2.bin", 0x100000, CRC(8e850a2a) SHA1(e5230e80a23ca6d09c2c53f443ecf70cc74075d7) )
+ NAMCOS2_DATA_LOAD_E_128K( "rst1_data0.13s", 0x000000, CRC(0baf44ee) SHA1(5135d634f76893adb26a32976a69e2d47e2385c6) )
+ NAMCOS2_DATA_LOAD_O_128K( "rst1_data1.13p", 0x000000, CRC(58a8daac) SHA1(c13ae8fc25b748a006c6db5b4b7ae593738544e8) )
+ NAMCOS2_DATA_LOAD_E_128K( "rst1_data2.13r", 0x100000, CRC(8e850a2a) SHA1(e5230e80a23ca6d09c2c53f443ecf70cc74075d7) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "rst1_voi1.bin", 0x000000, 0x080000, CRC(e42027cd) SHA1(fa3a81118c7f112289c27023236dec2e9cbc78b5) )
@@ -4515,9 +4515,9 @@ ROM_START( rthun2j )
ROM_LOAD( "shape.bin", 0x000000, 0x80000, CRC(cf58fbbe) SHA1(fbe3b2f0c3267b298993d6238d97b119e13e07f6) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
- NAMCOS2_DATA_LOAD_E_128K( "rst1_data0.bin", 0x000000, CRC(0baf44ee) SHA1(5135d634f76893adb26a32976a69e2d47e2385c6) )
- NAMCOS2_DATA_LOAD_O_128K( "rst1_data1.bin", 0x000000, CRC(58a8daac) SHA1(c13ae8fc25b748a006c6db5b4b7ae593738544e8) )
- NAMCOS2_DATA_LOAD_E_128K( "rst1_data2.bin", 0x100000, CRC(8e850a2a) SHA1(e5230e80a23ca6d09c2c53f443ecf70cc74075d7) )
+ NAMCOS2_DATA_LOAD_E_128K( "rst1_data0.13s", 0x000000, CRC(0baf44ee) SHA1(5135d634f76893adb26a32976a69e2d47e2385c6) )
+ NAMCOS2_DATA_LOAD_O_128K( "rst1_data1.13p", 0x000000, CRC(58a8daac) SHA1(c13ae8fc25b748a006c6db5b4b7ae593738544e8) )
+ NAMCOS2_DATA_LOAD_E_128K( "rst1_data2.13r", 0x100000, CRC(8e850a2a) SHA1(e5230e80a23ca6d09c2c53f443ecf70cc74075d7) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "rst1_voi1.bin", 0x000000, 0x080000, CRC(e42027cd) SHA1(fa3a81118c7f112289c27023236dec2e9cbc78b5) )
@@ -4667,10 +4667,10 @@ ROM_START( sgunner2 )
ROM_LOAD( "sns_sha0.bin", 0x000000, 0x80000, CRC(0374fd67) SHA1(2f09536ef4f8e1aa719108e73642feb376d6efff) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
- NAMCOS2_DATA_LOAD_E_128K( "sns_dat0.bin", 0x000000, CRC(48295d93) SHA1(2b314128d5ed7d30895967dbd2ecd8f1dfdc61ca) )
- NAMCOS2_DATA_LOAD_O_128K( "sns_dat1.bin", 0x000000, CRC(b44cc656) SHA1(7126ef28bf174c6c560469fa6dc4cfb439811850) )
- NAMCOS2_DATA_LOAD_E_128K( "sns_dat2.bin", 0x100000, CRC(ca2ae645) SHA1(8addc8ed8244d0ff4c03909e865e3f15934963f1) )
- NAMCOS2_DATA_LOAD_O_128K( "sns_dat3.bin", 0x100000, CRC(203bb018) SHA1(36e20ab81ed69a941e13518ff2ae52acd6b22a78) )
+ NAMCOS2_DATA_LOAD_E_128K( "sns_dat0.13s", 0x000000, CRC(48295d93) SHA1(2b314128d5ed7d30895967dbd2ecd8f1dfdc61ca) )
+ NAMCOS2_DATA_LOAD_O_128K( "sns_dat1.13p", 0x000000, CRC(b44cc656) SHA1(7126ef28bf174c6c560469fa6dc4cfb439811850) )
+ NAMCOS2_DATA_LOAD_E_128K( "sns_dat2.13r", 0x100000, CRC(ca2ae645) SHA1(8addc8ed8244d0ff4c03909e865e3f15934963f1) )
+ NAMCOS2_DATA_LOAD_O_128K( "sns_dat3.13n", 0x100000, CRC(203bb018) SHA1(36e20ab81ed69a941e13518ff2ae52acd6b22a78) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "sns_voi1.bin", 0x000000, 0x080000, CRC(219c97f7) SHA1(d4b1d81e3d0e2585bc2fa305c0d80beef15b2a9f) )
@@ -4719,10 +4719,10 @@ ROM_START( sgunner2j )
ROM_LOAD( "sns_sha0.bin", 0x000000, 0x80000, CRC(0374fd67) SHA1(2f09536ef4f8e1aa719108e73642feb376d6efff) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
- NAMCOS2_DATA_LOAD_E_128K( "sns_dat0.bin", 0x000000, CRC(48295d93) SHA1(2b314128d5ed7d30895967dbd2ecd8f1dfdc61ca) )
- NAMCOS2_DATA_LOAD_O_128K( "sns_dat1.bin", 0x000000, CRC(b44cc656) SHA1(7126ef28bf174c6c560469fa6dc4cfb439811850) )
- NAMCOS2_DATA_LOAD_E_128K( "sns_dat2.bin", 0x100000, CRC(ca2ae645) SHA1(8addc8ed8244d0ff4c03909e865e3f15934963f1) )
- NAMCOS2_DATA_LOAD_O_128K( "sns_dat3.bin", 0x100000, CRC(203bb018) SHA1(36e20ab81ed69a941e13518ff2ae52acd6b22a78) )
+ NAMCOS2_DATA_LOAD_E_128K( "sns_dat0.13s", 0x000000, CRC(48295d93) SHA1(2b314128d5ed7d30895967dbd2ecd8f1dfdc61ca) )
+ NAMCOS2_DATA_LOAD_O_128K( "sns_dat1.13p", 0x000000, CRC(b44cc656) SHA1(7126ef28bf174c6c560469fa6dc4cfb439811850) )
+ NAMCOS2_DATA_LOAD_E_128K( "sns_dat2.13r", 0x100000, CRC(ca2ae645) SHA1(8addc8ed8244d0ff4c03909e865e3f15934963f1) )
+ NAMCOS2_DATA_LOAD_O_128K( "sns_dat3.13n", 0x100000, CRC(203bb018) SHA1(36e20ab81ed69a941e13518ff2ae52acd6b22a78) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "sns_voi1.bin", 0x000000, 0x080000, CRC(219c97f7) SHA1(d4b1d81e3d0e2585bc2fa305c0d80beef15b2a9f) )
@@ -4809,8 +4809,8 @@ ROM_START( sws92 )
ROM_LOAD( "sss_sha0.bin", 0x000000, 0x80000, CRC(b71a731a) SHA1(29eab0ad5618f54e6c790d20f7dc895afae6c709) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
- NAMCOS2_DATA_LOAD_E_256K( "sss1dat0.bin", 0x000000, CRC(db3e6aec) SHA1(928960e3dc9c8225e695d12e9b18fbb7f151c151) )
- NAMCOS2_DATA_LOAD_O_256K( "sss1dat1.bin", 0x000000, CRC(463b5ba8) SHA1(029dce2e7ee50181392b6ef409bbd192105fb065) )
+ NAMCOS2_DATA_LOAD_E_256K( "sss1dat0.13s", 0x000000, CRC(db3e6aec) SHA1(928960e3dc9c8225e695d12e9b18fbb7f151c151) )
+ NAMCOS2_DATA_LOAD_O_256K( "sss1dat1.13p", 0x000000, CRC(463b5ba8) SHA1(029dce2e7ee50181392b6ef409bbd192105fb065) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "ss_voi1.bin", 0x000000, 0x080000, CRC(503e51b7) SHA1(2e159fcc9bb0bef9a3476ae233bc8d61fabbb4bd) )
@@ -4852,10 +4852,10 @@ ROM_START( sws92g )
ROM_LOAD( "sss_sha0.bin", 0x000000, 0x80000, CRC(b71a731a) SHA1(29eab0ad5618f54e6c790d20f7dc895afae6c709) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
- NAMCOS2_DATA_LOAD_E_256K( "sss1dat0.bin", 0x000000, CRC(db3e6aec) SHA1(928960e3dc9c8225e695d12e9b18fbb7f151c151) )
- NAMCOS2_DATA_LOAD_O_256K( "sss1dat1.bin", 0x000000, CRC(463b5ba8) SHA1(029dce2e7ee50181392b6ef409bbd192105fb065) )
- NAMCOS2_DATA_LOAD_E_256K( "ssg1dat2.bin", 0x080000, CRC(754128aa) SHA1(459ffb08bcd905644d6019e5b25870dcb1e2b418) )
- NAMCOS2_DATA_LOAD_O_256K( "ssg1dat3.bin", 0x080000, CRC(cb3fed01) SHA1(68887d46fd07cd8fb67d58f37e74a6aefdae4328) )
+ NAMCOS2_DATA_LOAD_E_256K( "sss1dat0.13s", 0x000000, CRC(db3e6aec) SHA1(928960e3dc9c8225e695d12e9b18fbb7f151c151) )
+ NAMCOS2_DATA_LOAD_O_256K( "sss1dat1.13p", 0x000000, CRC(463b5ba8) SHA1(029dce2e7ee50181392b6ef409bbd192105fb065) )
+ NAMCOS2_DATA_LOAD_E_256K( "ssg1dat2.13r", 0x080000, CRC(754128aa) SHA1(459ffb08bcd905644d6019e5b25870dcb1e2b418) )
+ NAMCOS2_DATA_LOAD_O_256K( "ssg1dat3.13n", 0x080000, CRC(cb3fed01) SHA1(68887d46fd07cd8fb67d58f37e74a6aefdae4328) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "ss_voi1.bin", 0x000000, 0x080000, CRC(503e51b7) SHA1(2e159fcc9bb0bef9a3476ae233bc8d61fabbb4bd) )
@@ -4897,8 +4897,8 @@ ROM_START( sws93 )
ROM_LOAD( "sst_sha0.bin", 0x000000, 0x80000, CRC(4f64d4bd) SHA1(0eb5311448cfd91b1e139b64b2f35b5179237e58) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
- NAMCOS2_DATA_LOAD_E_512K( "sst1dat0.bin", 0x000000, CRC(b99c9656) SHA1(ac9e6bf46204dad70caf0d75614a20af0269a07f) )
- NAMCOS2_DATA_LOAD_O_512K( "sst1dat1.bin", 0x000000, CRC(60cf6281) SHA1(c02a5bf8f4f94cbe8b0448c9457af53cd1c043d0) )
+ NAMCOS2_DATA_LOAD_E_512K( "sst1dat0.13s", 0x000000, CRC(b99c9656) SHA1(ac9e6bf46204dad70caf0d75614a20af0269a07f) )
+ NAMCOS2_DATA_LOAD_O_512K( "sst1dat1.13p", 0x000000, CRC(60cf6281) SHA1(c02a5bf8f4f94cbe8b0448c9457af53cd1c043d0) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "ss_voi1.bin", 0x000000, 0x080000, CRC(503e51b7) SHA1(2e159fcc9bb0bef9a3476ae233bc8d61fabbb4bd) )
@@ -4939,9 +4939,9 @@ ROM_START( suzuka8h )
ROM_LOAD( "eh2-sha0.bin", 0x000000, 0x80000, CRC(7f24619c) SHA1(0d19ab621cb42c5315be9a6b56f6711fc46ffff7) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
- NAMCOS2_DATA_LOAD_E_256K( "eh1-d0.bin", 0x000000, CRC(b43e5dfa) SHA1(7e24ee46169532cdb5c504239f7961f8d17e86e4) )
- NAMCOS2_DATA_LOAD_O_256K( "eh1-d1.bin", 0x000000, CRC(9825d5bf) SHA1(720f0e90c69a2e0c48889d510a15102768226a67) )
- NAMCOS2_DATA_LOAD_O_256K( "eh1-d3.bin", 0x100000, CRC(f46d301f) SHA1(70797fd584735844539553efcad53e11239ec10e) )
+ NAMCOS2_DATA_LOAD_E_256K( "eh1-d0.13s", 0x000000, CRC(b43e5dfa) SHA1(7e24ee46169532cdb5c504239f7961f8d17e86e4) )
+ NAMCOS2_DATA_LOAD_O_256K( "eh1-d1.13p", 0x000000, CRC(9825d5bf) SHA1(720f0e90c69a2e0c48889d510a15102768226a67) )
+ NAMCOS2_DATA_LOAD_O_256K( "eh1-d3.13n", 0x100000, CRC(f46d301f) SHA1(70797fd584735844539553efcad53e11239ec10e) )
ROM_REGION( 0x100, "c45_road:clut", 0 ) /* prom for road colors */
ROM_LOAD( "ehs1_landdt.10w", 0, 0x100, CRC(cde7e8a6) SHA1(860273daf2e649418746adf50a67ae33f9f3740c) )
@@ -4986,9 +4986,9 @@ ROM_START( suzuka8hj )
ROM_LOAD( "eh1-sha0.bin", 0x000000, 0x80000, CRC(39585cf9) SHA1(8cc18b5745ab2cf50d4df0a17fc1a57771db28ab) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
- NAMCOS2_DATA_LOAD_E_256K( "eh1-d0.bin", 0x000000, CRC(b43e5dfa) SHA1(7e24ee46169532cdb5c504239f7961f8d17e86e4) )
- NAMCOS2_DATA_LOAD_O_256K( "eh1-d1.bin", 0x000000, CRC(9825d5bf) SHA1(720f0e90c69a2e0c48889d510a15102768226a67) )
- NAMCOS2_DATA_LOAD_O_256K( "eh1-d3.bin", 0x100000, CRC(f46d301f) SHA1(70797fd584735844539553efcad53e11239ec10e) )
+ NAMCOS2_DATA_LOAD_E_256K( "eh1-d0.13s", 0x000000, CRC(b43e5dfa) SHA1(7e24ee46169532cdb5c504239f7961f8d17e86e4) )
+ NAMCOS2_DATA_LOAD_O_256K( "eh1-d1.13p", 0x000000, CRC(9825d5bf) SHA1(720f0e90c69a2e0c48889d510a15102768226a67) )
+ NAMCOS2_DATA_LOAD_O_256K( "eh1-d3.13n", 0x100000, CRC(f46d301f) SHA1(70797fd584735844539553efcad53e11239ec10e) )
ROM_REGION( 0x100, "c45_road:clut", 0 ) /* prom for road colors */
ROM_LOAD( "ehs1_landdt.10w", 0, 0x100, CRC(cde7e8a6) SHA1(860273daf2e649418746adf50a67ae33f9f3740c) )
@@ -5039,8 +5039,8 @@ ROM_START( suzuk8h2 )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
NAMCOS2_DATA_LOAD_E_512K( "ehs1-dat0.13s", 0x000000, CRC(12a202fb) SHA1(dca1b88cb524d54a699d4f6003854cfc980e084b) )
- NAMCOS2_DATA_LOAD_O_512K( "ehs1-dat1.13r", 0x000000, CRC(91790905) SHA1(988af294959dbb8636f808347b44897a133d3203) )
- NAMCOS2_DATA_LOAD_E_512K( "ehs1-dat2.13p", 0x100000, CRC(087da1f3) SHA1(e9c4ba0383e883502c0f45ae6e6d5daba4eccb01) )
+ NAMCOS2_DATA_LOAD_O_512K( "ehs1-dat1.13p", 0x000000, CRC(91790905) SHA1(988af294959dbb8636f808347b44897a133d3203) )
+ NAMCOS2_DATA_LOAD_E_512K( "ehs1-dat2.13r", 0x100000, CRC(087da1f3) SHA1(e9c4ba0383e883502c0f45ae6e6d5daba4eccb01) )
NAMCOS2_DATA_LOAD_O_512K( "ehs1-dat3.13n", 0x100000, CRC(85aecb3f) SHA1(00ab6104dee0cd0fbdb0235b88b41e4d26794f98) )
ROM_REGION( 0x100, "c45_road:clut", 0 ) /* prom for road colors */
@@ -5092,8 +5092,8 @@ ROM_START( suzuk8h2j )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
NAMCOS2_DATA_LOAD_E_512K( "ehs1-dat0.13s", 0x000000, CRC(12a202fb) SHA1(dca1b88cb524d54a699d4f6003854cfc980e084b) )
- NAMCOS2_DATA_LOAD_O_512K( "ehs1-dat1.13r", 0x000000, CRC(91790905) SHA1(988af294959dbb8636f808347b44897a133d3203) )
- NAMCOS2_DATA_LOAD_E_512K( "ehs1-dat2.13p", 0x100000, CRC(087da1f3) SHA1(e9c4ba0383e883502c0f45ae6e6d5daba4eccb01) )
+ NAMCOS2_DATA_LOAD_O_512K( "ehs1-dat1.13p", 0x000000, CRC(91790905) SHA1(988af294959dbb8636f808347b44897a133d3203) )
+ NAMCOS2_DATA_LOAD_E_512K( "ehs1-dat2.13r", 0x100000, CRC(087da1f3) SHA1(e9c4ba0383e883502c0f45ae6e6d5daba4eccb01) )
NAMCOS2_DATA_LOAD_O_512K( "ehs1-dat3.13n", 0x100000, CRC(85aecb3f) SHA1(00ab6104dee0cd0fbdb0235b88b41e4d26794f98) )
ROM_REGION( 0x100, "c45_road:clut", 0 ) /* prom for road colors */
@@ -5148,8 +5148,8 @@ ROM_START( valkyrie )
NAMCOS2_GFXROM_LOAD_128K( "wdshape.bin", 0x000000, CRC(3b5e0249) SHA1(259bbabf57a8ad739c646c56aad6d0b92e10adcd) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
- NAMCOS2_DATA_LOAD_E_128K( "wd1dat0.bin", 0x000000, CRC(ea209f48) SHA1(5e73a745dc2faaa4ce6c633d4072d41e9e494276) )
- NAMCOS2_DATA_LOAD_O_128K( "wd1dat1.bin", 0x000000, CRC(04b48ada) SHA1(aa046f8856bdd5b56d481c2c12ad2808c6517a5f) )
+ NAMCOS2_DATA_LOAD_E_128K( "wd1dat0.13s", 0x000000, CRC(ea209f48) SHA1(5e73a745dc2faaa4ce6c633d4072d41e9e494276) )
+ NAMCOS2_DATA_LOAD_O_128K( "wd1dat1.13p", 0x000000, CRC(04b48ada) SHA1(aa046f8856bdd5b56d481c2c12ad2808c6517a5f) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "wd1voi1.bin", 0x000000, 0x040000, CRC(f1ace193) SHA1(dd13bdf4b99c6bf4e356d623ff2e3da72db331dd) )
@@ -5198,10 +5198,10 @@ ROM_START( kyukaidk )
NAMCOS2_GFXROM_LOAD_128K( "ky1_sha.bin", 0x000000, CRC(380a20d7) SHA1(9627d2e0192779d50bfb25d5c19976275818c310) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
- NAMCOS2_DATA_LOAD_E_128K( "ky1_d0.bin", 0x000000, CRC(c9cf399d) SHA1(90cba42781b1e03ecc3f5b802d740ace6b88baaa) )
- NAMCOS2_DATA_LOAD_O_128K( "ky1_d1.bin", 0x000000, CRC(6d4f21b9) SHA1(f234a785f61969be684d2a4aed59616f125d72fc) )
- NAMCOS2_DATA_LOAD_E_128K( "ky1_d2.bin", 0x100000, CRC(eb6d19c8) SHA1(c9fdb33fe191d3c4d284db7cbb05d852551a998d) )
- NAMCOS2_DATA_LOAD_O_128K( "ky1_d3.bin", 0x100000, CRC(95674701) SHA1(9a8832837b9a3f8b75437717ea84d86261bfce59) )
+ NAMCOS2_DATA_LOAD_E_128K( "ky1_d0.13s", 0x000000, CRC(c9cf399d) SHA1(90cba42781b1e03ecc3f5b802d740ace6b88baaa) )
+ NAMCOS2_DATA_LOAD_O_128K( "ky1_d1.13p", 0x000000, CRC(6d4f21b9) SHA1(f234a785f61969be684d2a4aed59616f125d72fc) )
+ NAMCOS2_DATA_LOAD_E_128K( "ky1_d2.13r", 0x100000, CRC(eb6d19c8) SHA1(c9fdb33fe191d3c4d284db7cbb05d852551a998d) )
+ NAMCOS2_DATA_LOAD_O_128K( "ky1_d3.13n", 0x100000, CRC(95674701) SHA1(9a8832837b9a3f8b75437717ea84d86261bfce59) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "ky1_v1.bin", 0x000000, 0x080000, CRC(5ff81aec) SHA1(0535eda474de0a4aa3b48649b04afe2b7a8619c9) )
@@ -5245,10 +5245,10 @@ ROM_START( kyukaidko )
NAMCOS2_GFXROM_LOAD_128K( "ky1_sha.bin", 0x000000, CRC(380a20d7) SHA1(9627d2e0192779d50bfb25d5c19976275818c310) )
ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */
- NAMCOS2_DATA_LOAD_E_128K( "ky1_d0.bin", 0x000000, CRC(c9cf399d) SHA1(90cba42781b1e03ecc3f5b802d740ace6b88baaa) )
- NAMCOS2_DATA_LOAD_O_128K( "ky1_d1.bin", 0x000000, CRC(6d4f21b9) SHA1(f234a785f61969be684d2a4aed59616f125d72fc) )
- NAMCOS2_DATA_LOAD_E_128K( "ky1_d2.bin", 0x100000, CRC(eb6d19c8) SHA1(c9fdb33fe191d3c4d284db7cbb05d852551a998d) )
- NAMCOS2_DATA_LOAD_O_128K( "ky1_d3.bin", 0x100000, CRC(95674701) SHA1(9a8832837b9a3f8b75437717ea84d86261bfce59) )
+ NAMCOS2_DATA_LOAD_E_128K( "ky1_d0.13s", 0x000000, CRC(c9cf399d) SHA1(90cba42781b1e03ecc3f5b802d740ace6b88baaa) )
+ NAMCOS2_DATA_LOAD_O_128K( "ky1_d1.13p", 0x000000, CRC(6d4f21b9) SHA1(f234a785f61969be684d2a4aed59616f125d72fc) )
+ NAMCOS2_DATA_LOAD_E_128K( "ky1_d2.13r", 0x100000, CRC(eb6d19c8) SHA1(c9fdb33fe191d3c4d284db7cbb05d852551a998d) )
+ NAMCOS2_DATA_LOAD_O_128K( "ky1_d3.13n", 0x100000, CRC(95674701) SHA1(9a8832837b9a3f8b75437717ea84d86261bfce59) )
ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
ROM_LOAD( "ky1_v1.bin", 0x000000, 0x080000, CRC(5ff81aec) SHA1(0535eda474de0a4aa3b48649b04afe2b7a8619c9) )
diff --git a/src/mame/drivers/nbmj8991.cpp b/src/mame/drivers/nbmj8991.cpp
index c42bd8cae89..0099eeea68f 100644
--- a/src/mame/drivers/nbmj8991.cpp
+++ b/src/mame/drivers/nbmj8991.cpp
@@ -44,7 +44,7 @@ Notes:
WRITE8_MEMBER(nbmj8991_state::soundbank_w)
{
- if (!(data & 0x80)) m_soundlatch->clear_w(space, 0, 0);
+ if (!(data & 0x80)) m_soundlatch->clear_w();
membank("bank1")->set_entry(data & 0x03);
}
diff --git a/src/mame/drivers/nbmj9195.cpp b/src/mame/drivers/nbmj9195.cpp
index 6d113bd3ddf..ccf226021ef 100644
--- a/src/mame/drivers/nbmj9195.cpp
+++ b/src/mame/drivers/nbmj9195.cpp
@@ -205,7 +205,7 @@ READ8_MEMBER(nbmj9195_state::others_cpu_portc_r)
WRITE8_MEMBER(nbmj9195_state::soundcpu_porte_w)
{
- if (!(data & 0x01)) m_soundlatch->clear_w(space, 0, 0);
+ if (!(data & 0x01)) m_soundlatch->clear_w();
}
diff --git a/src/mame/drivers/neogeo.cpp b/src/mame/drivers/neogeo.cpp
index 3832b156820..638e1cce022 100644
--- a/src/mame/drivers/neogeo.cpp
+++ b/src/mame/drivers/neogeo.cpp
@@ -991,7 +991,7 @@ WRITE8_MEMBER(mvs_state::io_control_w)
WRITE8_MEMBER(neogeo_base_state::audio_command_w)
{
// glitches in s1945p without the boost_interleave here
- m_soundlatch->write(space, offset, data, mem_mask);
+ m_soundlatch->write(data);
machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(50));
}
@@ -1092,7 +1092,7 @@ WRITE16_MEMBER(neogeo_base_state::memcard_w)
CUSTOM_INPUT_MEMBER(neogeo_base_state::get_audio_result)
{
- uint8_t ret = m_soundlatch2->read(m_audiocpu->space(AS_PROGRAM), 0);
+ uint8_t ret = m_soundlatch2->read();
return ret;
}
@@ -1648,7 +1648,7 @@ void neogeo_base_state::machine_reset()
{
// disable audiocpu NMI
m_audionmi->in_w<1>(0);
- m_soundlatch->acknowledge_r(machine().dummy_space(), 0);
+ m_soundlatch->acknowledge_w();
m_maincpu->reset();
diff --git a/src/mame/drivers/neoprint.cpp b/src/mame/drivers/neoprint.cpp
index 2a86c3a906f..a074b6c05f7 100644
--- a/src/mame/drivers/neoprint.cpp
+++ b/src/mame/drivers/neoprint.cpp
@@ -224,7 +224,7 @@ WRITE8_MEMBER(neoprint_state::audio_cpu_clear_nmi_w)
WRITE8_MEMBER(neoprint_state::audio_command_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
audio_cpu_assert_nmi();
@@ -237,7 +237,7 @@ WRITE8_MEMBER(neoprint_state::audio_command_w)
READ8_MEMBER(neoprint_state::audio_command_r)
{
- uint8_t ret = m_soundlatch->read(space, 0);
+ uint8_t ret = m_soundlatch->read();
//if (LOG_CPU_COMM) logerror(" AUD CPU PC %04x: audio_command_r %02x\n", m_audiocpu->pc(), ret);
@@ -916,6 +916,6 @@ GAME( 1997, npusagif, 0, neoprint, neoprint, neoprint_state, init_9
GAME( 1998, 98best44, 0, neoprint, neoprint, neoprint_state, init_98best44, ROT0, "SNK", "Neo Print - '98 NeoPri Best 44 (Japan) (T4i 3.07)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
GAME( 1998, npsprg98, 0, neoprint, neoprint, neoprint_state, init_npmillen, ROT0, "SNK", "Neo Print - Spring '98 (T4i 3.07)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
GAME( 1999, npmillen, 0, neoprint, neoprint, neoprint_state, init_npmillen, ROT0, "SNK", "Neo Print - Millennium Multi Shot Edition (World) (T4i 3.07)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
-GAME( 1999, npfpit, 0, neoprint, neoprint, neoprint_state, init_npmillen, ROT0, "SNK", "Neo Print - Fuyo Pri Iitoko Tori (Japan) (T4i 3.07)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
+GAME( 1999, npfpit, 0, neoprint, neoprint, neoprint_state, init_npmillen, ROT0, "SNK", "Neo Print - Fuyu Pri Iitoko-dori (Japan) (T4i 3.07)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
GAME( 1996, nprsp, 0, nprsp, neoprint, neoprint_state, init_nprsp, ROT0, "SNK", "NeopriSP Retro Collection (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
GAME( 1996, npssr2, 0, nprsp, neoprint, neoprint_state, init_nprsp, ROT0, "SNK", "Neo Print Special: Sekai Ryokou 2 (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/niyanpai.cpp b/src/mame/drivers/niyanpai.cpp
index 47a75a37d65..5cdbd6a3f82 100644
--- a/src/mame/drivers/niyanpai.cpp
+++ b/src/mame/drivers/niyanpai.cpp
@@ -154,8 +154,6 @@ void niyanpai_state::niyanpai_map(address_map &map)
map(0x240a01, 0x240a01).w(FUNC(niyanpai_state::clutsel_0_w));
map(0x240c01, 0x240c01).w(FUNC(niyanpai_state::clutsel_1_w));
map(0x240e01, 0x240e01).w(FUNC(niyanpai_state::clutsel_2_w));
-
- map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
}
void niyanpai_state::musobana_map(address_map &map)
@@ -193,8 +191,6 @@ void niyanpai_state::musobana_map(address_map &map)
map(0x280000, 0x280001).r(FUNC(niyanpai_state::dipsw_r));
map(0x280200, 0x280201).r(FUNC(niyanpai_state::musobana_inputport_0_r));
map(0x280400, 0x280401).portr("SYSTEM");
-
- map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
}
void niyanpai_state::mhhonban_map(address_map &map)
@@ -234,8 +230,6 @@ void niyanpai_state::mhhonban_map(address_map &map)
map(0x280000, 0x280001).r(FUNC(niyanpai_state::dipsw_r));
map(0x280200, 0x280201).r(FUNC(niyanpai_state::musobana_inputport_0_r));
map(0x280400, 0x280401).portr("SYSTEM");
-
- map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
}
void niyanpai_state::zokumahj_map(address_map &map)
@@ -274,8 +268,6 @@ void niyanpai_state::zokumahj_map(address_map &map)
map(0x280000, 0x280001).r(FUNC(niyanpai_state::dipsw_r));
map(0x280200, 0x280201).r(FUNC(niyanpai_state::musobana_inputport_0_r));
map(0x280400, 0x280401).portr("SYSTEM");
-
- map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
}
@@ -687,20 +679,16 @@ INPUT_PORTS_END
WRITE_LINE_MEMBER(niyanpai_state::vblank_irq)
{
if (state)
- m_tmp68301->external_interrupt_0();
+ m_maincpu->external_interrupt_0();
}
void niyanpai_state::niyanpai(machine_config &config)
{
/* basic machine hardware */
- M68000(config, m_maincpu, 12288000/2); /* TMP68301, 6.144 MHz */
+ TMP68301(config, m_maincpu, 12288000/2); /* TMP68301, 6.144 MHz */
m_maincpu->set_addrmap(AS_PROGRAM, &niyanpai_state::niyanpai_map);
- m_maincpu->set_irq_acknowledge_callback("tmp68301", FUNC(tmp68301_device::irq_callback));
-
- TMP68301(config, m_tmp68301, 0);
- m_tmp68301->set_cputag(m_maincpu);
- m_tmp68301->out_parallel_callback().set(FUNC(niyanpai_state::tmp68301_parallel_port_w));
+ m_maincpu->out_parallel_callback().set(FUNC(niyanpai_state::tmp68301_parallel_port_w));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
diff --git a/src/mame/drivers/nmg5.cpp b/src/mame/drivers/nmg5.cpp
index 29f0938e8b5..f3867cd07b0 100644
--- a/src/mame/drivers/nmg5.cpp
+++ b/src/mame/drivers/nmg5.cpp
@@ -335,7 +335,7 @@ WRITE16_MEMBER(nmg5_state::vram_w)
WRITE8_MEMBER(nmg5_state::soundlatch_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_soundcpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
diff --git a/src/mame/drivers/nmk16.cpp b/src/mame/drivers/nmk16.cpp
index 027d15ebbc6..3d2b78fb778 100644
--- a/src/mame/drivers/nmk16.cpp
+++ b/src/mame/drivers/nmk16.cpp
@@ -7371,25 +7371,15 @@ ROM_START( redhawke ) /* Excellent Co., Ldt license (no code scramble), (c) 1997
ROM_LOAD( "5", 0x00000, 0x40000, CRC(e911ce33) SHA1(a29c4dea98a22235122303325c63c15fadd3431d) )
ROM_END
+void nmk16_state::init_redhawki()
+{
+ decryptcode( machine(), 23, 22, 21, 20, 19, 18, 15, 16, 17, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 );
+}
+
ROM_START( redhawki )
ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 Code */
- ROM_LOAD16_BYTE( "rhit-2.bin", 0x000000, 0x004000, CRC(30cade0e) SHA1(2123ca858bcaed5165739107ccc2830561af0b38) )
- ROM_CONTINUE(0x20000,0x4000)
- ROM_CONTINUE(0x10000,0x4000)
- ROM_CONTINUE(0x30000,0x4000)
- ROM_CONTINUE(0x08000,0x4000)
- ROM_CONTINUE(0x28000,0x4000)
- ROM_CONTINUE(0x18000,0x4000)
- ROM_CONTINUE(0x38000,0x4000)
-
- ROM_LOAD16_BYTE( "rhit-3.bin", 0x000001, 0x004000, CRC(37dbb3c2) SHA1(d1f8258f357b885d38f87d288f98046dbd7d56aa) )
- ROM_CONTINUE(0x20001,0x4000)
- ROM_CONTINUE(0x10001,0x4000)
- ROM_CONTINUE(0x30001,0x4000)
- ROM_CONTINUE(0x08001,0x4000)
- ROM_CONTINUE(0x28001,0x4000)
- ROM_CONTINUE(0x18001,0x4000)
- ROM_CONTINUE(0x38001,0x4000)
+ ROM_LOAD16_BYTE( "rhit-2.bin", 0x000000, 0x020000, CRC(30cade0e) SHA1(2123ca858bcaed5165739107ccc2830561af0b38) )
+ ROM_LOAD16_BYTE( "rhit-3.bin", 0x000001, 0x020000, CRC(37dbb3c2) SHA1(d1f8258f357b885d38f87d288f98046dbd7d56aa) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 Code */
ROM_LOAD( "1.bin", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) )
@@ -7408,41 +7398,15 @@ ROM_START( redhawki )
ROM_LOAD( "5", 0x00000, 0x40000, CRC(e911ce33) SHA1(a29c4dea98a22235122303325c63c15fadd3431d) )
ROM_END
+void nmk16_state::init_redhawkg()
+{
+ decryptcode( machine(), 23, 22, 21, 20, 19, 18, 15, 14, 16, 17, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 );
+}
+
ROM_START( redhawkg ) // original Afega PCB with Delta Coin sticker
ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 Code */
- ROM_LOAD16_BYTE( "2.bin", 0x000000, 0x002000, CRC(ccd459eb) SHA1(677b03f1e3973f0e1f09272d336c2dd9da8f843c) )
- ROM_CONTINUE(0x20000,0x2000)
- ROM_CONTINUE(0x10000,0x2000)
- ROM_CONTINUE(0x30000,0x2000)
- ROM_CONTINUE(0x04000,0x2000)
- ROM_CONTINUE(0x24000,0x2000)
- ROM_CONTINUE(0x14000,0x2000)
- ROM_CONTINUE(0x34000,0x2000)
- ROM_CONTINUE(0x08000,0x2000)
- ROM_CONTINUE(0x28000,0x2000)
- ROM_CONTINUE(0x18000,0x2000)
- ROM_CONTINUE(0x38000,0x2000)
- ROM_CONTINUE(0x0c000,0x2000)
- ROM_CONTINUE(0x2c000,0x2000)
- ROM_CONTINUE(0x1c000,0x2000)
- ROM_CONTINUE(0x3c000,0x2000)
-
- ROM_LOAD16_BYTE( "3.bin", 0x000001, 0x002000, CRC(483802fd) SHA1(4ec2b15bc89c12806dab78ae30f5fe24e26d46eb) )
- ROM_CONTINUE(0x20001,0x2000)
- ROM_CONTINUE(0x10001,0x2000)
- ROM_CONTINUE(0x30001,0x2000)
- ROM_CONTINUE(0x04001,0x2000)
- ROM_CONTINUE(0x24001,0x2000)
- ROM_CONTINUE(0x14001,0x2000)
- ROM_CONTINUE(0x34001,0x2000)
- ROM_CONTINUE(0x08001,0x2000)
- ROM_CONTINUE(0x28001,0x2000)
- ROM_CONTINUE(0x18001,0x2000)
- ROM_CONTINUE(0x38001,0x2000)
- ROM_CONTINUE(0x0c001,0x2000)
- ROM_CONTINUE(0x2c001,0x2000)
- ROM_CONTINUE(0x1c001,0x2000)
- ROM_CONTINUE(0x3c001,0x2000)
+ ROM_LOAD16_BYTE( "2.bin", 0x000000, 0x020000, CRC(ccd459eb) SHA1(677b03f1e3973f0e1f09272d336c2dd9da8f843c) )
+ ROM_LOAD16_BYTE( "3.bin", 0x000001, 0x020000, CRC(483802fd) SHA1(4ec2b15bc89c12806dab78ae30f5fe24e26d46eb) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 Code */
ROM_LOAD( "1.bin", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) )
@@ -8458,8 +8422,8 @@ GAME( 1995, dolmen, 0, twinactn, dolmen, nmk16_state, empty
GAME( 1998, stagger1, 0, stagger1, stagger1, nmk16_state, empty_init, ROT270, "Afega", "Stagger I (Japan)", 0 )
GAME( 1997, redhawk, stagger1, stagger1, stagger1, nmk16_state, init_redhawk, ROT270, "Afega (New Vision Ent. license)", "Red Hawk (US)", 0 )
-GAME( 1997, redhawki, stagger1, redhawki, stagger1, nmk16_state, empty_init, ROT0, "Afega (Hea Dong Corp license)", "Red Hawk (Italy)", 0 ) // bootleg? strange scroll regs
-GAME( 1997, redhawkg, stagger1, redhawki, stagger1, nmk16_state, empty_init, ROT0, "Afega", "Red Hawk (Greece)", 0 )
+GAME( 1997, redhawki, stagger1, redhawki, stagger1, nmk16_state, init_redhawki, ROT0, "Afega (Hea Dong Corp license)", "Red Hawk (Italy)", 0 ) // bootleg? strange scroll regs
+GAME( 1997, redhawkg, stagger1, redhawki, stagger1, nmk16_state, init_redhawkg, ROT0, "Afega", "Red Hawk (Greece)", 0 )
GAME( 1997, redhawke, stagger1, stagger1, stagger1, nmk16_state, empty_init, ROT270, "Afega (Excellent Co. license)", "Red Hawk (Excellent Co., Ltd)", 0 )
GAME( 1997, redhawkk, stagger1, stagger1, stagger1, nmk16_state, empty_init, ROT270, "Afega", "Red Hawk (Korea)", 0 )
GAME( 1997, redhawkb, stagger1, redhawkb, redhawkb, nmk16_state, empty_init, ROT0, "bootleg", "Vince (bootleg of Red Hawk)", 0 )
diff --git a/src/mame/drivers/novag_delta1.cpp b/src/mame/drivers/novag_delta1.cpp
index ccf7a530e6f..27a04716eb5 100644
--- a/src/mame/drivers/novag_delta1.cpp
+++ b/src/mame/drivers/novag_delta1.cpp
@@ -11,12 +11,6 @@ Novag Delta-1, the chess engine seems similar to Boris (see aci_boris.cpp)
- 4KB ROM(2332A), 256 bytes RAM(2*2111A-4)
- 4-digit 7seg panel, no sound, no chessboard
-TODO:
-- After the computer is done calculating its move, sometimes it will blank the
- display, making game progress impossible. CPU bug, or unexpected interrupt?
- An easy way to repro this is by repeatedly pressing enter without inputting
- a move: it's a feature to make it play against itself.
-
******************************************************************************/
#include "emu.h"
@@ -26,7 +20,7 @@ TODO:
#include "machine/f3853.h"
// internal artwork
-#include "novag_delta1.lh"
+#include "novag_delta1.lh" // clickable
namespace {
@@ -41,6 +35,9 @@ public:
// machine drivers
void delta1(machine_config &config);
+protected:
+ virtual void machine_start() override;
+
private:
// address maps
void main_map(address_map &map);
@@ -50,8 +47,24 @@ private:
DECLARE_WRITE8_MEMBER(mux_w);
DECLARE_WRITE8_MEMBER(digit_w);
DECLARE_READ8_MEMBER(input_r);
+
+ TIMER_DEVICE_CALLBACK_MEMBER(blink) { m_blink = !m_blink; }
+ bool m_blink;
};
+void delta1_state::machine_start()
+{
+ novagbase_state::machine_start();
+
+ // zerofill/register for savestates
+ m_blink = false;
+ save_item(NAME(m_blink));
+
+ // game reads from uninitialized RAM while it's thinking
+ for (int i = 0; i < 0x100; i++)
+ m_maincpu->space(AS_PROGRAM).write_byte(i + 0x2000, machine().rand());
+}
+
/******************************************************************************
Devices, I/O
@@ -61,7 +74,7 @@ private:
WRITE8_MEMBER(delta1_state::mux_w)
{
- // IO00-02: MC14028B A-C (IO03: GND)
+ // IO00-02: MC14028B A-C (D to GND)
// MC14028B Q3-Q7: input mux
// MC14028B Q4-Q7: digit select through 75492
u16 sel = 1 << (~data & 7);
@@ -77,14 +90,15 @@ WRITE8_MEMBER(delta1_state::mux_w)
READ8_MEMBER(delta1_state::input_r)
{
// IO04-07: multiplexed inputs
- return read_inputs(5) << 4 | m_led_select;
+ // IO03: GND
+ return read_inputs(5) << 4 | m_led_select | 8;
}
WRITE8_MEMBER(delta1_state::digit_w)
{
- // IO17: segment commons, active low (always 0?)
+ // IO17: R/C circuit to segment commons (for automated blinking)
// IO10-16: digit segments A-G
- data = (data & 0x80) ? 0 : (data & 0x7f);
+ data = (data & 0x80 && m_blink) ? 0 : (data & 0x7f);
m_7seg_data = bitswap<7>(data, 0,1,2,3,4,5,6);
}
@@ -116,7 +130,7 @@ void delta1_state::main_io(address_map &map)
static INPUT_PORTS_START( delta1 )
PORT_START("IN.0")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_NAME("Time Set")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Time Set")
PORT_BIT(0x0d, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("IN.1")
@@ -140,7 +154,7 @@ static INPUT_PORTS_START( delta1 )
PORT_START("IN.4")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("FP / Black Bishop") // find position
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("EP / Black Knight") // enter position
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("Color / Black Pawn")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("Change Color / Black Pawn")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter")
PORT_START("RESET") // not on matrix
@@ -164,6 +178,7 @@ void delta1_state::delta1(machine_config &config)
f3853_device &f3853(F3853(config, "f3853", 2000000));
f3853.int_req_callback().set_inputline("maincpu", F8_INPUT_LINE_INT_REQ);
+ TIMER(config, "display_blink").configure_periodic(FUNC(delta1_state::blink), attotime::from_msec(250)); // approximation
TIMER(config, "display_decay").configure_periodic(FUNC(delta1_state::display_decay_tick), attotime::from_msec(1));
config.set_default_layout(layout_novag_delta1);
}
@@ -188,4 +203,4 @@ ROM_END
******************************************************************************/
// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
-CONS( 1979, ccdelta1, 0, 0, delta1, delta1, delta1_state, empty_init, "Novag", "Chess Champion: Delta-1", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW | MACHINE_NOT_WORKING )
+CONS( 1979, ccdelta1, 0, 0, delta1, delta1, delta1_state, empty_init, "Novag", "Chess Champion: Delta-1", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW | MACHINE_CLICKABLE_ARTWORK )
diff --git a/src/mame/drivers/nyny.cpp b/src/mame/drivers/nyny.cpp
index 70c933ae030..df6f824ec22 100644
--- a/src/mame/drivers/nyny.cpp
+++ b/src/mame/drivers/nyny.cpp
@@ -371,14 +371,14 @@ MC6845_END_UPDATE( nyny_state::crtc_end_update )
WRITE8_MEMBER(nyny_state::audio_1_command_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(M6802_IRQ_LINE, HOLD_LINE);
}
WRITE8_MEMBER(nyny_state::audio_1_answer_w)
{
- m_soundlatch3->write(space, 0, data);
+ m_soundlatch3->write(data);
m_maincpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE);
}
@@ -398,7 +398,7 @@ WRITE8_MEMBER(nyny_state::nyny_ay8910_37_port_a_w)
WRITE8_MEMBER(nyny_state::audio_2_command_w)
{
- m_soundlatch2->write(space, 0, (data & 0x60) >> 5);
+ m_soundlatch2->write((data & 0x60) >> 5);
m_audiocpu2->set_input_line(M6802_IRQ_LINE, BIT(data, 7) ? CLEAR_LINE : ASSERT_LINE);
}
diff --git a/src/mame/drivers/olibochu.cpp b/src/mame/drivers/olibochu.cpp
index 8f3db209f83..1b54945cdcb 100644
--- a/src/mame/drivers/olibochu.cpp
+++ b/src/mame/drivers/olibochu.cpp
@@ -263,7 +263,7 @@ WRITE8_MEMBER(olibochu_state::sound_command_w)
for (c = 15; c >= 0; c--)
if (m_cmd & (1 << c)) break;
- if (c >= 0) m_soundlatch->write(space, 0, 15 - c);
+ if (c >= 0) m_soundlatch->write(15 - c);
}
diff --git a/src/mame/drivers/omegrace.cpp b/src/mame/drivers/omegrace.cpp
index e1533bfd65a..464628c8aa3 100644
--- a/src/mame/drivers/omegrace.cpp
+++ b/src/mame/drivers/omegrace.cpp
@@ -356,7 +356,7 @@ WRITE8_MEMBER(omegrace_state::omegrace_leds_w)
WRITE8_MEMBER(omegrace_state::omegrace_soundlatch_w)
{
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
diff --git a/src/mame/drivers/oneshot.cpp b/src/mame/drivers/oneshot.cpp
index 695db6e8ae9..6a66a1b596a 100644
--- a/src/mame/drivers/oneshot.cpp
+++ b/src/mame/drivers/oneshot.cpp
@@ -35,6 +35,85 @@ NOTE: An eBay auction of the PCB shows "1996.9.16 PROMAT" on the JAMMA+ adapter
One Shot One Kill. This information was used for the year & manufacturer.
Also listed in an Approved Game list on a HK government site as "Promet"
+
+Main board:
++---------------------------------------------+
+| 5MHz +------------+ |
+|VOL YM3812 Z80A M6295 |25x6 row pin| |
+| YM3014 6116 PAL +------------+ |
+| PAL |
+| +---------+ |
+| KM681000LP | ACTEL | |
+| | A1020A | |
+| KM681000LP | PL84C | |
+|J +---------+ |
+|A |
+|M +---------++---------+ |
+|M MB.ROM | Cypress || ACTEL | |
+|A KM6264 | CY7C384A|| A1020A | |
+| KM6264 PAL | -XJC || PL84C | |
+| +---------++---------+ |
+| PAL PAL KM681000LP |
+| DSW2 6 6116 KM681000LP PAL |
+| 8 6116 PAL |
+| DSW1 0 +------------+ |
+| 27MHz 0 CXK58256 |25x4 row pin| |
+|LED 12MHz 0 CXK58256 +------------+ |
++---------------------------------------------+
+
+ CPU: 68000, Z80A
+Sound: YM3812/YM3014 + OKI M6295 (badged as K-666/K-664 + AD-65)
+ OSC: 27MHz, 12MHz & 5MHz
+ RAM: Samsung KM681000LP-10 128Kx8 Low power SRAM x 4
+ Samsung KM6264AL-10 8Kx8 Low power SRAM x 2
+ Sony CXK58256-10L 32Kx8 High speed SRAM x 2
+ UMC UM6116K-2 2Kx8 SRAM x 3
+Other: Cypress CY7C384A 2K Very high speed Gate CMOS FPGA
+ Actel A1020A FPGA
+ DSW 8 position dipswitch x 2
+ LED - Power LED
+ VOL - Volume adjust pot
+Connectors to ROM board:
+ 25 pins by 6 rows & 25 pins by 4 rows
+
+Rom board:
++-----------------------+
+| +------------+ |
+| |25x6 row pin| |
+| +------------+ |
+| U15* UI8 |
+| |
+| UA2 UI8A |
+| |
+| U14* UI11 |
+| |
+| UA22 UI11A |
+| |
+| UA24 UI13 |
+| |
+| +---------+ UI13A |
+| | ACTEL | |
+| | A1020A | UI16 |
+| | PL84C | |
+| +---------+ UI16A |
+| +------------+ |
+| |25x4 row pin| |
+| +------------+ |
++-----------------------+
+
+Note: * denotes unpopulated
+
+Other: Actel A1020A FPGA
+Connectors to main board:
+ 25 pins by 6 rows & 25 pins by 4 rows
+
+For One Shot One Kill:
+ There is an additional board that connects to the JAMMA connector that has some logic chips,
+ a JAMMA edge connector and two 4 pin headers to connect the light guns as well as a 2 wire jumper
+ that connects to some ROM board logic chips (assumed) for light gun input. Also the YM3812 sound
+ chip appears to be unpopulated for One Shot One Kill.
+ The ROM board for One Shot One Kill has 8 additional logic chips along the front edge of the PCB
+
*/
#include "emu.h"
@@ -50,9 +129,9 @@ NOTE: An eBay auction of the PCB shows "1996.9.16 PROMAT" on the JAMMA+ adapter
#include "speaker.h"
-READ16_MEMBER(oneshot_state::oneshot_in0_word_r)
+u16 oneshot_state::oneshot_in0_word_r()
{
- int data = ioport("DSW1")->read();
+ const u16 data = m_io_dsw1->read();
switch (data & 0x0c)
{
@@ -73,7 +152,7 @@ READ16_MEMBER(oneshot_state::oneshot_in0_word_r)
return data;
}
-READ16_MEMBER(oneshot_state::oneshot_gun_x_p1_r)
+u16 oneshot_state::oneshot_gun_x_p1_r()
{
/* shots must be in a different location to register */
m_p1_wobble ^= 1;
@@ -81,12 +160,12 @@ READ16_MEMBER(oneshot_state::oneshot_gun_x_p1_r)
return m_gun_x_p1 ^ m_p1_wobble;
}
-READ16_MEMBER(oneshot_state::oneshot_gun_y_p1_r)
+u16 oneshot_state::oneshot_gun_y_p1_r()
{
return m_gun_y_p1;
}
-READ16_MEMBER(oneshot_state::oneshot_gun_x_p2_r)
+u16 oneshot_state::oneshot_gun_x_p2_r()
{
/* shots must be in a different location to register */
m_p2_wobble ^= 1;
@@ -94,34 +173,32 @@ READ16_MEMBER(oneshot_state::oneshot_gun_x_p2_r)
return m_gun_x_p2 ^ m_p2_wobble;
}
-READ16_MEMBER(oneshot_state::oneshot_gun_y_p2_r)
+u16 oneshot_state::oneshot_gun_y_p2_r()
{
return m_gun_y_p2;
}
-WRITE16_MEMBER(oneshot_state::soundbank_w)
+void oneshot_state::soundbank_w(u8 data)
{
- if (ACCESSING_BITS_0_7)
- {
- m_oki->set_rom_bank((data & 0x03) ^ 0x03);
- }
+ m_oki->set_rom_bank((data & 0x03) ^ 0x03);
}
-void oneshot_state::oneshot_map(address_map &map)
+void oneshot_state::mem_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
map(0x080000, 0x087fff).ram();
map(0x0c0000, 0x0c07ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
- map(0x120000, 0x120fff).ram().share("sprites");
- map(0x180000, 0x180fff).ram().w(FUNC(oneshot_state::oneshot_mid_videoram_w)).share("mid_videoram"); // some people , girl etc.
- map(0x181000, 0x181fff).ram().w(FUNC(oneshot_state::oneshot_fg_videoram_w)).share("fg_videoram"); // credits etc.
- map(0x182000, 0x182fff).ram().w(FUNC(oneshot_state::oneshot_bg_videoram_w)).share("bg_videoram"); // credits etc.
+ map(0x120000, 0x120fff).ram().share("spriteram");
+ //map(0x13f000, 0x13f000).noprw(); // Unknown read / writes
+ map(0x180000, 0x180fff).ram().w(FUNC(oneshot_state::mid_videoram_w)).share("mid_videoram"); // some people , girl etc.
+ map(0x181000, 0x181fff).ram().w(FUNC(oneshot_state::fg_videoram_w)).share("fg_videoram"); // credits etc.
+ map(0x182000, 0x182fff).ram().w(FUNC(oneshot_state::bg_videoram_w)).share("bg_videoram"); // credits etc.
map(0x188000, 0x18800f).writeonly().share("scroll"); // scroll registers
map(0x190003, 0x190003).r("soundlatch", FUNC(generic_latch_8_device::read));
map(0x190011, 0x190011).w("soundlatch", FUNC(generic_latch_8_device::write));
- map(0x190018, 0x190019).w(FUNC(oneshot_state::soundbank_w));
+ map(0x190019, 0x190019).w(FUNC(oneshot_state::soundbank_w));
map(0x190026, 0x190027).r(FUNC(oneshot_state::oneshot_gun_x_p1_r));
map(0x19002e, 0x19002f).r(FUNC(oneshot_state::oneshot_gun_x_p2_r));
map(0x190036, 0x190037).r(FUNC(oneshot_state::oneshot_gun_y_p1_r));
@@ -133,7 +210,7 @@ void oneshot_state::oneshot_map(address_map &map)
map(0x19c034, 0x19c035).portr("P2");
}
-void oneshot_state::oneshot_sound_map(address_map &map)
+void oneshot_state::sound_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0x8000).rw("soundlatch", FUNC(generic_latch_8_device::read), FUNC(generic_latch_8_device::write));
@@ -316,10 +393,8 @@ static const gfx_layout oneshot16x16_layout =
RGN_FRAC(1,8),
8,
{ RGN_FRAC(0,8),RGN_FRAC(1,8),RGN_FRAC(2,8),RGN_FRAC(3,8),RGN_FRAC(4,8),RGN_FRAC(5,8),RGN_FRAC(6,8),RGN_FRAC(7,8) },
- { 0,1,2,3,4,5,6,7,
- 64+0,64+1,64+2,64+3,64+4,64+5,64+6,64+7 },
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
- 128+0*8, 128+1*8, 128+2*8, 128+3*8, 128+4*8, 128+5*8, 128+6*8, 128+7*8 },
+ { STEP8(0,1), STEP8(8*8,1) },
+ { STEP8(0,8), STEP8(8*8*2,8) },
16*16
};
@@ -329,15 +404,15 @@ static const gfx_layout oneshot8x8_layout =
RGN_FRAC(1,8),
8,
{ RGN_FRAC(0,8),RGN_FRAC(1,8),RGN_FRAC(2,8),RGN_FRAC(3,8),RGN_FRAC(4,8),RGN_FRAC(5,8),RGN_FRAC(6,8),RGN_FRAC(7,8) },
- { 0,1,2,3,4,5,6,7 },
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
+ { STEP8(0,1) },
+ { STEP8(0,8) },
8*8
};
static GFXDECODE_START( gfx_oneshot )
- GFXDECODE_ENTRY( "gfx1", 0, oneshot16x16_layout, 0x00, 4 ) /* sprites */
- GFXDECODE_ENTRY( "gfx1", 0, oneshot8x8_layout, 0x00, 4 ) /* sprites */
+ GFXDECODE_ENTRY( "gfx1", 0, oneshot16x16_layout, 0, 4 ) /* sprites */
+ GFXDECODE_ENTRY( "gfx1", 0, oneshot8x8_layout, 0, 4 ) /* sprites */
GFXDECODE_END
void oneshot_state::machine_start()
@@ -365,11 +440,11 @@ void oneshot_state::machine_reset()
void oneshot_state::oneshot(machine_config &config)
{
/* basic machine hardware */
- M68000(config, m_maincpu, 12000000);
- m_maincpu->set_addrmap(AS_PROGRAM, &oneshot_state::oneshot_map);
+ M68000(config, m_maincpu, 12_MHz_XTAL);
+ m_maincpu->set_addrmap(AS_PROGRAM, &oneshot_state::mem_map);
m_maincpu->set_vblank_int("screen", FUNC(oneshot_state::irq4_line_hold));
- Z80(config, "audiocpu", 5000000).set_addrmap(AS_PROGRAM, &oneshot_state::oneshot_sound_map);
+ Z80(config, "audiocpu", 5_MHz_XTAL).set_addrmap(AS_PROGRAM, &oneshot_state::sound_map); // Not verified
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
@@ -387,11 +462,11 @@ void oneshot_state::oneshot(machine_config &config)
GENERIC_LATCH_8(config, "soundlatch");
- ym3812_device &ymsnd(YM3812(config, "ymsnd", 3500000));
+ ym3812_device &ymsnd(YM3812(config, "ymsnd", 5_MHz_XTAL/2)); // 2.5MHz or 3MHz (12MHz/4) - clock frequency not verified
ymsnd.irq_handler().set_inputline("audiocpu", 0);
ymsnd.add_route(ALL_OUTPUTS, "mono", 1.0);
- OKIM6295(config, m_oki, 1056000, okim6295_device::PIN7_HIGH); // clock frequency & pin 7 not verified
+ OKIM6295(config, m_oki, 5_MHz_XTAL/4, okim6295_device::PIN7_HIGH); // 1.25MHz??? - clock frequency & pin 7 not verified
m_oki->add_route(ALL_OUTPUTS, "mono", 1.0);
}
@@ -401,6 +476,13 @@ void oneshot_state::maddonna(machine_config &config)
subdevice<screen_device>("screen")->set_screen_update(FUNC(oneshot_state::screen_update_maddonna));
}
+void oneshot_state::komocomo(machine_config &config)
+{
+ oneshot(config);
+ subdevice<screen_device>("screen")->set_screen_update(FUNC(oneshot_state::screen_update_komocomo));
+}
+
+
ROM_START( oneshot )
ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 Code */
@@ -411,21 +493,21 @@ ROM_START( oneshot )
ROM_LOAD( "1shot.ua2", 0x00000, 0x010000, CRC(f655b80e) SHA1(2574a812c35801755c187a47f46ccdb0983c5feb) )
ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */
- ROM_LOAD( "1shot-ui.16a",0x000000, 0x080000, CRC(f765f9a2) SHA1(f6c386e0421fcb0e420585dd27d9dad951bb2556) )
- ROM_LOAD( "1shot-ui.13a",0x080000, 0x080000, CRC(3361b5d8) SHA1(f7db674d479765d4e58fb663aa5e13dde2abcce7) )
- ROM_LOAD( "1shot-ui.11a",0x100000, 0x080000, CRC(8f8bd027) SHA1(fbec952ab5604c8e20c5e7cfd2844f4fe5441186) )
- ROM_LOAD( "1shot-ui.08a",0x180000, 0x080000, CRC(254b1701) SHA1(163bfa70508fca20be70dd0af8b768ab6bf211b9) )
- ROM_LOAD( "1shot-ui.16", 0x200000, 0x080000, CRC(ff246b27) SHA1(fef6029030268174ef9648b8f437aeda68475346) )
- ROM_LOAD( "1shot-ui.13", 0x280000, 0x080000, CRC(80342e83) SHA1(2ac2b300382a607a539d2b0982ab596f05be3ad3) )
- ROM_LOAD( "1shot-ui.11", 0x300000, 0x080000, CRC(b8938345) SHA1(318cf0d070db786680a45811bbd765fa37caaf62) )
- ROM_LOAD( "1shot-ui.08", 0x380000, 0x080000, CRC(c9953bef) SHA1(21917a9dcc0afaeec20672ad863d0c9d583369e3) )
+ ROM_LOAD( "1shot-ui.16a", 0x000000, 0x080000, CRC(f765f9a2) SHA1(f6c386e0421fcb0e420585dd27d9dad951bb2556) )
+ ROM_LOAD( "1shot-ui.13a", 0x080000, 0x080000, CRC(3361b5d8) SHA1(f7db674d479765d4e58fb663aa5e13dde2abcce7) )
+ ROM_LOAD( "1shot-ui.11a", 0x100000, 0x080000, CRC(8f8bd027) SHA1(fbec952ab5604c8e20c5e7cfd2844f4fe5441186) )
+ ROM_LOAD( "1shot-ui.08a", 0x180000, 0x080000, CRC(254b1701) SHA1(163bfa70508fca20be70dd0af8b768ab6bf211b9) )
+ ROM_LOAD( "1shot-ui.16", 0x200000, 0x080000, CRC(ff246b27) SHA1(fef6029030268174ef9648b8f437aeda68475346) )
+ ROM_LOAD( "1shot-ui.13", 0x280000, 0x080000, CRC(80342e83) SHA1(2ac2b300382a607a539d2b0982ab596f05be3ad3) )
+ ROM_LOAD( "1shot-ui.11", 0x300000, 0x080000, CRC(b8938345) SHA1(318cf0d070db786680a45811bbd765fa37caaf62) )
+ ROM_LOAD( "1shot-ui.08", 0x380000, 0x080000, CRC(c9953bef) SHA1(21917a9dcc0afaeec20672ad863d0c9d583369e3) )
ROM_REGION( 0x100000, "oki", 0 ) /* Samples */
ROM_LOAD( "1shot.u15", 0x000000, 0x080000, CRC(e3759a47) SHA1(1159335924a6d68a0a24bfbe0c9182107f3f05f8) )
ROM_LOAD( "1shot.u14", 0x080000, 0x080000, CRC(222e33f8) SHA1(2665afdf4cb1a29325df62efc1843a4b2cf34a4e) )
ROM_REGION( 0x10000, "user1", 0 )
- ROM_LOAD( "1shot.mb", 0x00000, 0x10000, CRC(6b213183) SHA1(599c59d155d11edb151bfaed1d24ef964462a447) ) // motherboard rom, zooming?
+ ROM_LOAD( "1shot.mb", 0x00000, 0x10000, CRC(6b213183) SHA1(599c59d155d11edb151bfaed1d24ef964462a447) ) // motherboard rom, unknown purpose
ROM_END
ROM_START( maddonna )
@@ -441,28 +523,54 @@ ROM_START( maddonna )
ROM_LOAD( "maddonna.b7", 0x080000, 0x080000, CRC(4920d2ec) SHA1(e72a374bca81ffa4f925326455e007df7227ae08) )
ROM_LOAD( "maddonna.b9", 0x100000, 0x080000, CRC(3a8a3feb) SHA1(832654902963c163644134431fd1221e1895cfec) )
ROM_LOAD( "maddonna.b11", 0x180000, 0x080000, CRC(6f9b7fdf) SHA1(14ced1d43eae3b6db4a0a4c12fb26cbd13eb7428) )
- ROM_LOAD( "maddonna.b6", 0x200000, 0x080000, CRC(b02e9e0e) SHA1(6e527a2bfda0f4f420c10139c75dac2704e08d08) )
- ROM_LOAD( "maddonna.b8", 0x280000, 0x080000, CRC(03f1de40) SHA1(bb0c0525155404c0740ac5f048f71ae7651a5941) )
- ROM_LOAD( "maddonna.b10", 0x300000, 0x080000, CRC(87936423) SHA1(dda42f3685427edad7686d9712ff07d2fd9bf57e) )
- ROM_LOAD( "maddonna.b12", 0x380000, 0x080000, CRC(879ab23c) SHA1(5288016542a10e60ccb28a930d8dfe4db41c6fc6) )
+ ROM_LOAD( "maddonna.b6", 0x200000, 0x080000, CRC(b02e9e0e) SHA1(6e527a2bfda0f4f420c10139c75dac2704e08d08) )
+ ROM_LOAD( "maddonna.b8", 0x280000, 0x080000, CRC(03f1de40) SHA1(bb0c0525155404c0740ac5f048f71ae7651a5941) )
+ ROM_LOAD( "maddonna.b10", 0x300000, 0x080000, CRC(87936423) SHA1(dda42f3685427edad7686d9712ff07d2fd9bf57e) )
+ ROM_LOAD( "maddonna.b12", 0x380000, 0x080000, CRC(879ab23c) SHA1(5288016542a10e60ccb28a930d8dfe4db41c6fc6) )
ROM_REGION( 0x100000, "oki", ROMREGION_ERASE00 ) /* Samples */
/* no samples for this game */
ROM_REGION( 0x10000, "user1", 0 )
- ROM_LOAD( "x1", 0x00000, 0x10000, CRC(6b213183) SHA1(599c59d155d11edb151bfaed1d24ef964462a447) ) // motherboard rom, zooming?
+ ROM_LOAD( "x1", 0x00000, 0x10000, CRC(6b213183) SHA1(599c59d155d11edb151bfaed1d24ef964462a447) ) // motherboard rom, unknown purpose
ROM_END
-// The tiles containing the copyright string (tiles 0x3979 onwards) differ in this set.
-// Both versions have tiles containing the 'Tuning - Germany' copyright messages, but
-// the parent set has additional tiles containing the '(c)Copyright 1995' which is shown
-// on the title screen.
-//
-// The lack of these tiles in this set causes all subsequent tiles to be shifted. It is
-// likely that the correct program roms for this set either don't show '(c)Copyright 1995'
-// or display it using the regular font instead.
+ROM_START( komocomo ) // ROM PCB marked : GAME B/D TOPnew1 002
+ ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 Code */
+ ROM_LOAD16_BYTE( "11.ua24", 0x00000, 0x10000, CRC(31c18579) SHA1(da97207afced0cf844b111752e9f634a49bc7115) )
+ ROM_LOAD16_BYTE( "10.ua22", 0x00001, 0x10000, CRC(fa839c0f) SHA1(53aee489e694e5777bd5ac20aa2b51c2c9e5493a) )
+
+ ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 Code */
+ ROM_LOAD( "9.ua2", 0x00000, 0x010000, CRC(f2080071) SHA1(68cbae9559879b2dc19c41a7efbd13ab4a569d3f) )
+
+ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */
+ ROM_LOAD( "8.ui16a", 0x000000, 0x080000, CRC(11ac04ab) SHA1(321a7af3bdf47fa0ec1f7bbd758dd1023b409a06) )
+ ROM_LOAD( "6.ui13a", 0x080000, 0x080000, CRC(bb498592) SHA1(f7946a40d35ae0726860dd65f1aaf1c145d51afd) )
+ ROM_LOAD( "4.ui11a", 0x100000, 0x080000, CRC(d22dd6d8) SHA1(f466167d088275cdc973535401895272d48c8079) )
+ ROM_LOAD( "2.ui8a", 0x180000, 0x080000, CRC(cc5360f8) SHA1(61670b970a71af8f008052a98c10127f8b412a85) )
+ ROM_LOAD( "7.ui16", 0x200000, 0x080000, CRC(dc71de75) SHA1(adc8f51acf34e41b94a740dc2b7a66b23a7ffcf5) )
+ ROM_LOAD( "5.ui13", 0x280000, 0x080000, CRC(56bc3719) SHA1(947d7fe45273052fbd666ad8e9bef9818c6e3104) )
+ ROM_LOAD( "3.ui11", 0x300000, 0x080000, CRC(646073d1) SHA1(87593ccbe9419da2ea70763784acc12221b5bed8) )
+ ROM_LOAD( "1.ui8", 0x380000, 0x080000, CRC(58ba6622) SHA1(ee5a759ab22a663da5bba1db5fec23958bfee771) )
+
+ ROM_REGION( 0x100000, "oki", ROMREGION_ERASE00 ) /* Samples */
+ /* no samples for this game */
+
+ ROM_REGION( 0x10000, "user1", 0 )
+ ROM_LOAD( "12.bin", 0x00000, 0x10000, CRC(6b213183) SHA1(599c59d155d11edb151bfaed1d24ef964462a447) ) // motherboard rom, unknown purpose
+ROM_END
+
+
+/* The tiles containing the copyright string (tiles 0x3979 onwards) differ in this set.
+ Both versions have tiles containing the 'Tuning - Germany' copyright messages, but
+ the parent set has additional tiles containing the '(c)Copyright 1995' which is shown
+ on the title screen.
+
+ The lack of these tiles in this set causes all subsequent tiles to be shifted. It is
+ likely that the correct program roms for this set either don't show '(c)Copyright 1995'
+ or display it using the regular font instead. */
-ROM_START( maddonnb )
+ROM_START( maddonnab )
ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 Code */
/* program roms missing in this dump, gfx don't seem 100% correct for other ones */
ROM_LOAD16_BYTE( "maddonnb.b16", 0x00000, 0x20000, NO_DUMP )
@@ -485,11 +593,13 @@ ROM_START( maddonnb )
/* no samples for this game */
ROM_REGION( 0x10000, "user1", 0 )
- ROM_LOAD( "x1", 0x00000, 0x10000, CRC(6b213183) SHA1(599c59d155d11edb151bfaed1d24ef964462a447) ) // motherboard rom, zooming?
+ ROM_LOAD( "x1", 0x00000, 0x10000, CRC(6b213183) SHA1(599c59d155d11edb151bfaed1d24ef964462a447) ) // motherboard rom, unknown purpose
ROM_END
+// all sets have a large (unused) PROMAT logo in them
+GAME( 1995, maddonna, 0, maddonna, maddonna, oneshot_state, empty_init, ROT0, "Promat (Tuning license)", "Mad Donna (Tuning, set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1995, maddonnab,maddonna, maddonna, maddonna, oneshot_state, empty_init, ROT0, "Promat (Tuning license)", "Mad Donna (Tuning, set 2)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
+GAME( 1995, komocomo, maddonna, komocomo, maddonna, oneshot_state, empty_init, ROT0, "bootleg", "Komo Como (Topmar, bootleg?)", MACHINE_SUPPORTS_SAVE ) // shows TOPMAR (an anagram of PROMAT) on the side, possibly a hack of the original PROMAT version
-GAME( 1995, maddonna, 0, maddonna, maddonna, oneshot_state, empty_init, ROT0, "Tuning", "Mad Donna (set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1995, maddonnb, maddonna, maddonna, maddonna, oneshot_state, empty_init, ROT0, "Tuning", "Mad Donna (set 2)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
GAME( 1996, oneshot, 0, oneshot, oneshot , oneshot_state, empty_init, ROT0, "Promat", "One Shot One Kill", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/onyx.cpp b/src/mame/drivers/onyx.cpp
index 2159d1f04a4..c7b013307a6 100644
--- a/src/mame/drivers/onyx.cpp
+++ b/src/mame/drivers/onyx.cpp
@@ -98,14 +98,14 @@ void onyx_state::z8002_m1_w(uint8_t data)
void onyx_state::c8002_io(address_map &map)
{
- map(0xff00, 0xff07).lrw8("sio1_rw", [this](address_space &space, offs_t offset, u8 mem_mask) { return m_sio[0]->cd_ba_r(space, offset >> 1, mem_mask); }, [this](address_space &space, offs_t offset, u8 data, u8 mem_mask) { m_sio[0]->cd_ba_w(space, offset >> 1, data, mem_mask); });
- map(0xff08, 0xff0f).lrw8("sio2_rw", [this](address_space &space, offs_t offset, u8 mem_mask) { return m_sio[1]->cd_ba_r(space, offset >> 1, mem_mask); }, [this](address_space &space, offs_t offset, u8 data, u8 mem_mask) { m_sio[1]->cd_ba_w(space, offset >> 1, data, mem_mask); });
- map(0xff10, 0xff17).lrw8("sio3_rw", [this](address_space &space, offs_t offset, u8 mem_mask) { return m_sio[2]->cd_ba_r(space, offset >> 1, mem_mask); }, [this](address_space &space, offs_t offset, u8 data, u8 mem_mask) { m_sio[2]->cd_ba_w(space, offset >> 1, data, mem_mask); });
- map(0xff18, 0xff1f).lrw8("sio4_rw", [this](address_space &space, offs_t offset, u8 mem_mask) { return m_sio[3]->cd_ba_r(space, offset >> 1, mem_mask); }, [this](address_space &space, offs_t offset, u8 data, u8 mem_mask) { m_sio[3]->cd_ba_w(space, offset >> 1, data, mem_mask); });
- map(0xff20, 0xff27).lrw8("sio5_rw", [this](address_space &space, offs_t offset, u8 mem_mask) { return m_sio[4]->cd_ba_r(space, offset >> 1, mem_mask); }, [this](address_space &space, offs_t offset, u8 data, u8 mem_mask) { m_sio[4]->cd_ba_w(space, offset >> 1, data, mem_mask); });
- map(0xff30, 0xff37).lrw8("ctc1_rw", [this](address_space &space, offs_t offset, u8 mem_mask) { return m_ctc[0]->read(space, offset >> 1, mem_mask); }, [this](address_space &space, offs_t offset, u8 data, u8 mem_mask) { m_ctc[0]->write(space, offset >> 1, data, mem_mask); });
- map(0xff38, 0xff3f).lrw8("ctc2_rw", [this](address_space &space, offs_t offset, u8 mem_mask) { return m_ctc[1]->read(space, offset >> 1, mem_mask); }, [this](address_space &space, offs_t offset, u8 data, u8 mem_mask) { m_ctc[1]->write(space, offset >> 1, data, mem_mask); });
- map(0xff40, 0xff47).lrw8("ctc3_rw", [this](address_space &space, offs_t offset, u8 mem_mask) { return m_ctc[2]->read(space, offset >> 1, mem_mask); }, [this](address_space &space, offs_t offset, u8 data, u8 mem_mask) { m_ctc[2]->write(space, offset >> 1, data, mem_mask); });
+ map(0xff00, 0xff07).lrw8("sio1_rw", [this](offs_t offset) { return m_sio[0]->cd_ba_r(offset >> 1); }, [this](offs_t offset, u8 data) { m_sio[0]->cd_ba_w(offset >> 1, data); });
+ map(0xff08, 0xff0f).lrw8("sio2_rw", [this](offs_t offset) { return m_sio[1]->cd_ba_r(offset >> 1); }, [this](offs_t offset, u8 data) { m_sio[1]->cd_ba_w(offset >> 1, data); });
+ map(0xff10, 0xff17).lrw8("sio3_rw", [this](offs_t offset) { return m_sio[2]->cd_ba_r(offset >> 1); }, [this](offs_t offset, u8 data) { m_sio[2]->cd_ba_w(offset >> 1, data); });
+ map(0xff18, 0xff1f).lrw8("sio4_rw", [this](offs_t offset) { return m_sio[3]->cd_ba_r(offset >> 1); }, [this](offs_t offset, u8 data) { m_sio[3]->cd_ba_w(offset >> 1, data); });
+ map(0xff20, 0xff27).lrw8("sio5_rw", [this](offs_t offset) { return m_sio[4]->cd_ba_r(offset >> 1); }, [this](offs_t offset, u8 data) { m_sio[4]->cd_ba_w(offset >> 1, data); });
+ map(0xff30, 0xff37).lrw8("ctc1_rw", [this](offs_t offset) { return m_ctc[0]->read(offset >> 1); }, [this](offs_t offset, u8 data) { m_ctc[0]->write(offset >> 1, data); });
+ map(0xff38, 0xff3f).lrw8("ctc2_rw", [this](offs_t offset) { return m_ctc[1]->read(offset >> 1); }, [this](offs_t offset, u8 data) { m_ctc[1]->write(offset >> 1, data); });
+ map(0xff40, 0xff47).lrw8("ctc3_rw", [this](offs_t offset) { return m_ctc[2]->read(offset >> 1); }, [this](offs_t offset, u8 data) { m_ctc[2]->write(offset >> 1, data); });
map(0xff50, 0xff57).lrw8("pio1_rw", [this](address_space &space, offs_t offset, u8 mem_mask) { return m_pio[0]->read(space, offset >> 1, mem_mask); }, [this](address_space &space, offs_t offset, u8 data, u8 mem_mask) { m_pio[0]->write(space, offset >> 1, data, mem_mask); });
map(0xff58, 0xff5f).lrw8("pio2_rw", [this](address_space &space, offs_t offset, u8 mem_mask) { return m_pio[1]->read(space, offset >> 1, mem_mask); }, [this](address_space &space, offs_t offset, u8 data, u8 mem_mask) { m_pio[1]->write(space, offset >> 1, data, mem_mask); });
map(0xffb9, 0xffb9).w(FUNC(onyx_state::z8002_m1_w));
diff --git a/src/mame/drivers/othello.cpp b/src/mame/drivers/othello.cpp
index b7588ab04c4..513ea3fbe3e 100644
--- a/src/mame/drivers/othello.cpp
+++ b/src/mame/drivers/othello.cpp
@@ -234,8 +234,8 @@ void othello_state::main_portmap(address_map &map)
READ8_MEMBER(othello_state::latch_r)
{
- int retval = m_soundlatch->read(space, 0);
- m_soundlatch->clear_w(space, 0, 0);
+ int retval = m_soundlatch->read();
+ m_soundlatch->clear_w();
return retval;
}
diff --git a/src/mame/drivers/pasopia7.cpp b/src/mame/drivers/pasopia7.cpp
index 96ba59b0c1c..3ee610c955f 100644
--- a/src/mame/drivers/pasopia7.cpp
+++ b/src/mame/drivers/pasopia7.cpp
@@ -630,7 +630,7 @@ READ8_MEMBER( pasopia7_state::pasopia7_io_r )
}
else
if(io_port >= 0x28 && io_port <= 0x2b)
- return m_ctc->read(space,io_port & 3);
+ return m_ctc->read(io_port & 3);
else
if(io_port >= 0x30 && io_port <= 0x33)
return m_pio->read(space, io_port & 3);
@@ -681,7 +681,7 @@ WRITE8_MEMBER( pasopia7_state::pasopia7_io_w )
}
else
if(io_port >= 0x28 && io_port <= 0x2b)
- m_ctc->write(space, io_port & 3, data);
+ m_ctc->write(io_port & 3, data);
else
if(io_port >= 0x30 && io_port <= 0x33)
m_pio->write(space, io_port & 3, data);
diff --git a/src/mame/drivers/pbaction.cpp b/src/mame/drivers/pbaction.cpp
index e327f926ff3..1fa8cc13dc6 100644
--- a/src/mame/drivers/pbaction.cpp
+++ b/src/mame/drivers/pbaction.cpp
@@ -107,7 +107,7 @@ Stephh's notes (based on the game Z80 code and some tests) :
WRITE8_MEMBER(pbaction_state::pbaction_sh_command_w)
{
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
m_soundcommand_timer->adjust(attotime::zero, 0);
}
@@ -154,7 +154,7 @@ READ8_MEMBER(pbaction_state::sound_data_r)
{
if (!machine().side_effects_disabled())
m_audiocpu->set_input_line(0, CLEAR_LINE);
- return m_soundlatch->read(space, 0);
+ return m_soundlatch->read();
}
WRITE8_MEMBER(pbaction_state::sound_irq_ack_w)
@@ -235,23 +235,23 @@ WRITE8_MEMBER(pbaction_tecfri_state::sub8008_w)
WRITE8_MEMBER(pbaction_tecfri_state::subtomain_w)
{
- //m_subtomainlatch->write(space, offset, data); // where does this go if it can't go to maincpu?
+ //m_subtomainlatch->write(data); // where does this go if it can't go to maincpu?
}
READ8_MEMBER(pbaction_tecfri_state::maintosub_r)
{
- return m_maintosublatch->read(space, offset);
+ return m_maintosublatch->read();
}
READ8_MEMBER(pbaction_tecfri_state::subcpu_r)
{
return 0x00; // other values stop the flippers from working? are there different inputs from the custom cabinet in here somehow?
-// return m_subtomainlatch->read(space, offset);
+// return m_subtomainlatch->read();
}
WRITE8_MEMBER(pbaction_tecfri_state::subcpu_w)
{
- m_maintosublatch->write(space, offset, data);
+ m_maintosublatch->write(data);
m_subcommand_timer->adjust(attotime::zero, 0);
}
diff --git a/src/mame/drivers/pc1512.cpp b/src/mame/drivers/pc1512.cpp
index 6063960ff70..b2eab2cf561 100644
--- a/src/mame/drivers/pc1512.cpp
+++ b/src/mame/drivers/pc1512.cpp
@@ -568,7 +568,7 @@ READ8_MEMBER( pc1640_state::io_r )
else if (addr >= 0x3b0 && addr <= 0x3df) { decoded = true; }
else if (addr >= 0x3f4 && addr <= 0x3f4) { data = m_fdc->fdc->msr_r(); decoded = true; }
else if (addr >= 0x3f5 && addr <= 0x3f5) { data = m_fdc->fdc->fifo_r(); decoded = true; }
- else if (addr >= 0x3f8 && addr <= 0x3ff) { data = m_uart->ins8250_r(space, offset & 0x07); decoded = true; }
+ else if (addr >= 0x3f8 && addr <= 0x3ff) { data = m_uart->ins8250_r(offset & 0x07); decoded = true; }
if (decoded)
{
diff --git a/src/mame/drivers/pcktgal.cpp b/src/mame/drivers/pcktgal.cpp
index 5a2c05a40d0..30c34152edd 100644
--- a/src/mame/drivers/pcktgal.cpp
+++ b/src/mame/drivers/pcktgal.cpp
@@ -43,7 +43,7 @@ WRITE8_MEMBER(pcktgal_state::sound_bank_w)
WRITE8_MEMBER(pcktgal_state::sound_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
diff --git a/src/mame/drivers/pgm.cpp b/src/mame/drivers/pgm.cpp
index 2f3ac8a9cf8..bc98846a054 100644
--- a/src/mame/drivers/pgm.cpp
+++ b/src/mame/drivers/pgm.cpp
@@ -282,7 +282,7 @@ WRITE16_MEMBER(pgm_state::m68k_l1_w)
{
if (PGMLOGERROR)
logerror("SL 1 m68.w %02x (%06x) IRQ\n", data & 0xff, m_maincpu->pc());
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_soundcpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
}
@@ -291,7 +291,7 @@ WRITE8_MEMBER(pgm_state::z80_l3_w)
{
if (PGMLOGERROR)
logerror("SL 3 z80.w %02x (%04x)\n", data, m_soundcpu->pc());
- m_soundlatch3->write(space, 0, data);
+ m_soundlatch3->write(data);
}
diff --git a/src/mame/drivers/pktgaldx.cpp b/src/mame/drivers/pktgaldx.cpp
index 2bbb8596766..1c757dc4336 100644
--- a/src/mame/drivers/pktgaldx.cpp
+++ b/src/mame/drivers/pktgaldx.cpp
@@ -360,7 +360,6 @@ void pktgaldx_state::pktgaldx(machine_config &config)
GFXDECODE(config, m_gfxdecode, m_palette, gfx_pktgaldx);
DECO16IC(config, m_deco_tilegen, 0);
- m_deco_tilegen->set_split(0);
m_deco_tilegen->set_pf1_size(DECO_64x32);
m_deco_tilegen->set_pf2_size(DECO_64x32);
m_deco_tilegen->set_pf1_trans_mask(0x0f);
diff --git a/src/mame/drivers/pokechmp.cpp b/src/mame/drivers/pokechmp.cpp
index 11662fdc8c7..3d56bb32c3a 100644
--- a/src/mame/drivers/pokechmp.cpp
+++ b/src/mame/drivers/pokechmp.cpp
@@ -74,7 +74,7 @@ WRITE8_MEMBER(pokechmp_state::pokechmp_sound_bank_w)
WRITE8_MEMBER(pokechmp_state::pokechmp_sound_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
diff --git a/src/mame/drivers/polepos.cpp b/src/mame/drivers/polepos.cpp
index 583ca54b1a4..6d4f1b5ca95 100644
--- a/src/mame/drivers/polepos.cpp
+++ b/src/mame/drivers/polepos.cpp
@@ -951,7 +951,7 @@ void polepos_state::polepos(machine_config &config)
WRITE8_MEMBER(polepos_state::bootleg_soundlatch_w)
{
if (m_soundlatch.found()) // topracern also uses this; no idea what it should do there
- m_soundlatch->write(space, 0, data | 0xfc);
+ m_soundlatch->write(data | 0xfc);
}
void polepos_state::topracern_io(address_map &map)
diff --git a/src/mame/drivers/pong.cpp b/src/mame/drivers/pong.cpp
index 787657ba675..515789872e3 100644
--- a/src/mame/drivers/pong.cpp
+++ b/src/mame/drivers/pong.cpp
@@ -4,6 +4,7 @@
Pong (c) 1972 Atari
Pong Doubles (c) 1973 Atari
+Rebound (c) 1974 Atari
Breakout (c) 1976 Atari
driver by Couriersud
@@ -27,6 +28,7 @@ driver by Couriersud
TM-0?? Dr. Pong/Puppy Pong/Snoopy Pong (1974) A001433? NO
422,TM-029 Superpong (1974) A000423 NO
TM-014,029 Pong Doubles/Coupe Davis (1973) A000785 NO
+ TM-001,023,029,032 Rebound/Spike/Volleyball (1974) A000517,A000846,SPIKE-(A or B) NO
TM-058 Breakout/Breakout Cocktail/Consolette (1976) A004533 NO
Notes:
@@ -41,6 +43,7 @@ TODO: Dr. Pong, Pong In-A-Barrel, Puppy Pong, Snoopy Pong, and Cocktail Pong are
be verified.
TODO: Superpong is believed to use the Pong (Rev E) PCB with some minor modifications, this
needs to be verified.
+TODO: Volleyball...
***************************************************************************/
@@ -675,6 +678,7 @@ ROM_START( rebound ) /* dummy to satisfy game entry*/
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_END
+
/* // 100% TTL - NO ROMS
ROM_START( pongbarl ) // dummy to satisfy game entry
@@ -721,12 +725,14 @@ GAMEL( 1974, rebound, 0, rebound, rebound, rebound_state, empty_init, ROT0
GAMEL( 1976, breakout, 0, breakout, breakout, breakout_state, empty_init, ROT90, "Atari", "Breakout [TTL]", MACHINE_SUPPORTS_SAVE, layout_breakout)
// 100% TTL
-//GAME( 1973, coupedav, pongd, pongd, pongd, driver_device, empty_init, ROT0, "Atari France", "Coupe Davis [TTL]", MACHINE_SUPPORTS_SAVE)
-//GAME( 1973, pongbarl, pong, pong, pong, driver_device, empty_init, ROT0, "Atari", "Pong In-A-Barrel [TTL]", MACHINE_SUPPORTS_SAVE)
-//GAME( 1974, cktpong, pong, pong, pong, driver_device, empty_init, ROT0, "Atari / National Entertainment Co.", "Cocktail Pong [TTL]", MACHINE_SUPPORTS_SAVE)
-//GAME( 1974, drpong, pong, pong, pong, driver_device, empty_init, ROT0, "Atari", "Dr. Pong [TTL]", MACHINE_SUPPORTS_SAVE)
-//GAME( 1974, pupppong, pong, pong, pong, driver_device, empty_init, ROT0, "Atari", "Puppy Pong [TTL]", MACHINE_SUPPORTS_SAVE)
-//GAME( 1974, snoopong, pong, pong, pong, driver_device, empty_init, ROT0, "Atari", "Snoopy Pong [TTL]", MACHINE_SUPPORTS_SAVE)
-//GAME( 1974, suprpong, 0, suprpong, pong, driver_device, empty_init, ROT0, "Atari", "Superpong [TTL]", MACHINE_SUPPORTS_SAVE)
-//GAMEL( 1976, breakckt, breakout, breakout, breakout, driver_device, empty_init, ROT90, "Atari", "Breakout Cocktail [TTL]", MACHINE_SUPPORTS_SAVE, layout_breakckt)
-//GAMEL( 1976, consolet, breakout, breakout, breakout, driver_device, empty_init, ROT90, "Atari Europe", "Consolette [TTL]", MACHINE_SUPPORTS_SAVE, layout_consolet)
+//GAMEL(1974, spike, rebound, rebound, rebound, rebound_state, empty_init, ROT0, "Atari/Kee", "Spike [TTL]", MACHINE_IS_SKELETON)
+//GAMEL(1974, volleyball, rebound, rebound, rebound, rebound_state, empty_init, ROT0, "Atari", "Volleyball [TTL]", MACHINE_IS_SKELETON)
+//GAME( 1973, coupedav, pongd, pongd, pongd, pong_state, empty_init, ROT0, "Atari France", "Coupe Davis [TTL]", MACHINE_SUPPORTS_SAVE)
+//GAME( 1973, pongbarl, pong, pong, pong, pong_state, empty_init, ROT0, "Atari", "Pong In-A-Barrel [TTL]", MACHINE_SUPPORTS_SAVE)
+//GAME( 1974, cktpong, pong, pong, pong, pong_state, empty_init, ROT0, "Atari / National Entertainment Co.", "Cocktail Pong [TTL]", MACHINE_SUPPORTS_SAVE)
+//GAME( 1974, drpong, pong, pong, pong, pong_state, empty_init, ROT0, "Atari", "Dr. Pong [TTL]", MACHINE_SUPPORTS_SAVE)
+//GAME( 1974, pupppong, pong, pong, pong, pong_state, empty_init, ROT0, "Atari", "Puppy Pong [TTL]", MACHINE_SUPPORTS_SAVE)
+//GAME( 1974, snoopong, pong, pong, pong, pong_state, empty_init, ROT0, "Atari", "Snoopy Pong [TTL]", MACHINE_SUPPORTS_SAVE)
+//GAME( 1974, suprpong, 0, suprpong, pong, pong_state, empty_init, ROT0, "Atari", "Superpong [TTL]", MACHINE_SUPPORTS_SAVE)
+//GAMEL( 1976, breakckt, breakout, breakout, breakout, breakout_state, empty_init, ROT90, "Atari", "Breakout Cocktail [TTL]", MACHINE_SUPPORTS_SAVE, layout_breakckt)
+//GAMEL( 1976, consolet, breakout, breakout, breakout, breakout_state, empty_init, ROT90, "Atari Europe", "Consolette [TTL]", MACHINE_SUPPORTS_SAVE, layout_consolet)
diff --git a/src/mame/drivers/prehisle.cpp b/src/mame/drivers/prehisle.cpp
index 15421ccff07..9bed8d3cc2e 100644
--- a/src/mame/drivers/prehisle.cpp
+++ b/src/mame/drivers/prehisle.cpp
@@ -24,7 +24,7 @@
WRITE16_MEMBER(prehisle_state::soundcmd_w)
{
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
diff --git a/src/mame/drivers/proconn.cpp b/src/mame/drivers/proconn.cpp
index 949c1cc24f4..45f469e39b6 100644
--- a/src/mame/drivers/proconn.cpp
+++ b/src/mame/drivers/proconn.cpp
@@ -61,9 +61,9 @@ public:
private:
template <unsigned N> DECLARE_WRITE8_MEMBER( ay_w ) { m_ay->address_data_w(N, data); }
- template <unsigned N> DECLARE_WRITE8_MEMBER( ctc_w ) { m_z80ctc->write(space, N, data); }
+ template <unsigned N> DECLARE_WRITE8_MEMBER( ctc_w ) { m_z80ctc->write(N, data); }
- template <unsigned N> DECLARE_WRITE8_MEMBER( sio_w ) { m_z80sio->cd_ba_w(space, N, data); }
+ template <unsigned N> DECLARE_WRITE8_MEMBER( sio_w ) { m_z80sio->cd_ba_w(N, data); }
template <unsigned N> DECLARE_WRITE8_MEMBER( pio1_w ) { m_z80pio[0]->write(space, N, data); }
template <unsigned N> DECLARE_WRITE8_MEMBER( pio2_w ) { m_z80pio[1]->write(space, N, data); }
@@ -71,9 +71,9 @@ private:
template <unsigned N> DECLARE_WRITE8_MEMBER( pio4_w ) { m_z80pio[3]->write(space, N, data); }
template <unsigned N> DECLARE_WRITE8_MEMBER( pio5_w ) { m_z80pio[4]->write(space, N, data); }
- template <unsigned N> DECLARE_READ8_MEMBER( ctc_r ) { return m_z80ctc->read(space, N); }
+ template <unsigned N> DECLARE_READ8_MEMBER( ctc_r ) { return m_z80ctc->read(N); }
- template <unsigned N> DECLARE_READ8_MEMBER( sio_r ) { return m_z80sio->cd_ba_r(space, N); }
+ template <unsigned N> DECLARE_READ8_MEMBER( sio_r ) { return m_z80sio->cd_ba_r(N); }
template <unsigned N> DECLARE_READ8_MEMBER( pio1_r ) { return m_z80pio[0]->read(space, N); }
template <unsigned N> DECLARE_READ8_MEMBER( pio2_r ) { return m_z80pio[1]->read(space, N); }
diff --git a/src/mame/drivers/pturn.cpp b/src/mame/drivers/pturn.cpp
index 14d50a76a92..41d42fb1870 100644
--- a/src/mame/drivers/pturn.cpp
+++ b/src/mame/drivers/pturn.cpp
@@ -512,8 +512,7 @@ void pturn_state::machine_start()
void pturn_state::machine_reset()
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- m_soundlatch->clear_w(space,0,0);
+ m_soundlatch->clear_w();
m_nmi_sub = false;
}
diff --git a/src/mame/drivers/quasar.cpp b/src/mame/drivers/quasar.cpp
index 3edcfd88703..f14c2e4a4ab 100644
--- a/src/mame/drivers/quasar.cpp
+++ b/src/mame/drivers/quasar.cpp
@@ -95,17 +95,17 @@ WRITE8_MEMBER(quasar_state::quasar_sh_command_w)
// lower nibble = command to I8035
// not necessarily like this, but it seems to work better than direct mapping
// (although schematics has it as direct - but then the schematics are wrong elsewhere to!)
- m_soundlatch->write(space, 0, (data & 8) + ((data >> 1) & 3) + ((data << 2) & 4));
+ m_soundlatch->write((data & 8) + ((data >> 1) & 3) + ((data << 2) & 4));
}
READ8_MEMBER(quasar_state::quasar_sh_command_r)
{
- return m_soundlatch->read(space, 0) + (ioport("DSW2")->read() & 0x30);
+ return m_soundlatch->read() + (ioport("DSW2")->read() & 0x30);
}
READ_LINE_MEMBER(quasar_state::audio_t1_r)
{
- return (m_soundlatch->read(machine().dummy_space(), 0) == 0);
+ return (m_soundlatch->read() == 0);
}
// memory map taken from the manual
diff --git a/src/mame/drivers/quizpun2.cpp b/src/mame/drivers/quizpun2.cpp
index 08a258ad216..ef4be0ec9ec 100644
--- a/src/mame/drivers/quizpun2.cpp
+++ b/src/mame/drivers/quizpun2.cpp
@@ -326,7 +326,7 @@ WRITE8_MEMBER(quizpun2_state::irq_ack)
WRITE8_MEMBER(quizpun2_state::soundlatch_w)
{
- m_soundlatch->write(space, 0, data ^ 0x80);
+ m_soundlatch->write(data ^ 0x80);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
diff --git a/src/mame/drivers/r2dtank.cpp b/src/mame/drivers/r2dtank.cpp
index dff5a7cfa5a..f97d9f48f16 100644
--- a/src/mame/drivers/r2dtank.cpp
+++ b/src/mame/drivers/r2dtank.cpp
@@ -142,7 +142,7 @@ WRITE_LINE_MEMBER(r2dtank_state::main_cpu_irq)
READ8_MEMBER(r2dtank_state::audio_command_r)
{
- uint8_t ret = m_soundlatch->read(space, 0);
+ uint8_t ret = m_soundlatch->read();
if (LOG_AUDIO_COMM) logerror("%08X CPU#1 Audio Command Read: %x\n", m_audiocpu->pc(), ret);
@@ -152,7 +152,7 @@ if (LOG_AUDIO_COMM) logerror("%08X CPU#1 Audio Command Read: %x\n", m_audiocpu
WRITE8_MEMBER(r2dtank_state::audio_command_w)
{
- m_soundlatch->write(space, 0, ~data);
+ m_soundlatch->write(~data);
m_audiocpu->set_input_line(M6802_IRQ_LINE, HOLD_LINE);
if (LOG_AUDIO_COMM) logerror("%08X CPU#0 Audio Command Write: %x\n", m_maincpu->pc(), data^0xff);
@@ -161,7 +161,7 @@ if (LOG_AUDIO_COMM) logerror("%08X CPU#0 Audio Command Write: %x\n", m_maincp
READ8_MEMBER(r2dtank_state::audio_answer_r)
{
- uint8_t ret = m_soundlatch2->read(space, 0);
+ uint8_t ret = m_soundlatch2->read();
if (LOG_AUDIO_COMM) logerror("%08X CPU#0 Audio Answer Read: %x\n", m_maincpu->pc(), ret);
return ret;
@@ -174,7 +174,7 @@ WRITE8_MEMBER(r2dtank_state::audio_answer_w)
if (m_audiocpu->pc() == 0xfb12)
data = 0x00;
- m_soundlatch2->write(space, 0, data);
+ m_soundlatch2->write(data);
m_maincpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE);
if (LOG_AUDIO_COMM) logerror("%08X CPU#1 Audio Answer Write: %x\n", m_audiocpu->pc(), data);
diff --git a/src/mame/drivers/r2dx_v33.cpp b/src/mame/drivers/r2dx_v33.cpp
index 09d63385d51..0fa581fbea7 100644
--- a/src/mame/drivers/r2dx_v33.cpp
+++ b/src/mame/drivers/r2dx_v33.cpp
@@ -376,7 +376,7 @@ WRITE16_MEMBER(r2dx_v33_state::r2dx_paldma_w)
{
uint16_t palval = space.read_word(src);
src += 2;
- m_palette->write16(space, i, palval, 0xffff);
+ m_palette->write16(i, palval);
}
}
diff --git a/src/mame/drivers/rainbow.cpp b/src/mame/drivers/rainbow.cpp
index 8a5a415c846..d743b9afad3 100644
--- a/src/mame/drivers/rainbow.cpp
+++ b/src/mame/drivers/rainbow.cpp
@@ -2756,7 +2756,7 @@ WRITE8_MEMBER(rainbow_state::diagnostic_w) // 8088 (port 0A WRITTEN). Fig.4-28 +
// Install 8088 read / write handler once loopback test is over
if ( !(data & 32) && (m_diagnostic & 32) )
{
- io.install_readwrite_handler(0x40, 0x43, READ8_DEVICE_DELEGATE(m_mpsc, upd7201_new_device,cd_ba_r), WRITE8_DEVICE_DELEGATE(m_mpsc, upd7201_new_device, cd_ba_w) );
+ io.install_readwrite_handler(0x40, 0x43, read8sm_delegate(FUNC(upd7201_new_device::cd_ba_r), &*m_mpsc), write8sm_delegate(FUNC(upd7201_new_device::cd_ba_w), &*m_mpsc));
logerror("\n **** COMM HANDLER INSTALLED **** ");
//popmessage("Autoboot from drive %c", m_p_nvram[0xab] ? (64 + m_p_nvram[0xab]) : 0x3F );
}
diff --git a/src/mame/drivers/rastan.cpp b/src/mame/drivers/rastan.cpp
index 93a5a5797ac..66367df97c9 100644
--- a/src/mame/drivers/rastan.cpp
+++ b/src/mame/drivers/rastan.cpp
@@ -184,7 +184,7 @@ WRITE_LINE_MEMBER(rastan_state::rastan_msm5205_vck)
if (m_adpcm_ff)
{
- m_adpcm_sel->write_ba(m_adpcm_data[m_adpcm_pos]);
+ m_adpcm_sel->ba_w(m_adpcm_data[m_adpcm_pos]);
m_adpcm_pos = (m_adpcm_pos + 1) & 0xffff;
}
}
diff --git a/src/mame/drivers/realbrk.cpp b/src/mame/drivers/realbrk.cpp
index c1a07c2cbd8..5bcc5ab632a 100644
--- a/src/mame/drivers/realbrk.cpp
+++ b/src/mame/drivers/realbrk.cpp
@@ -174,7 +174,6 @@ void realbrk_state::base_mem(address_map &map)
map(0x606000, 0x60600f).ram().w(FUNC(realbrk_state::vregs_w)).share("vregs"); // Scroll + Video Regs
map(0x800000, 0x800003).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write)).umask16(0xff00); // YMZ280
map(0xfe0000, 0xfeffff).ram(); // RAM
- map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
}
/*realbrk specific memory map*/
@@ -218,7 +217,6 @@ void realbrk_state::dai2kaku_mem(address_map &map)
map(0xc00002, 0xc00003).portr("IN1"); // Coins
map(0xc00004, 0xc00005).ram().r(FUNC(realbrk_state::realbrk_dsw_r)).share("dsw_select"); // DSW select
map(0xff0000, 0xfffbff).ram(); // RAM
- map(0xfffd0a, 0xfffd0b).w(FUNC(realbrk_state::dai2kaku_flipscreen_w)); // Hack! Parallel port data register
}
/***************************************************************************
@@ -764,19 +762,15 @@ WRITE_LINE_MEMBER(realbrk_state::vblank_irq)
{
/* VBlank is connected to INT1 (external interrupts pin 1) */
if (state)
- m_tmp68301->external_interrupt_1();
+ m_maincpu->external_interrupt_1();
}
void realbrk_state::realbrk(machine_config &config)
{
/* basic machine hardware */
- M68000(config, m_maincpu, XTAL(32'000'000) / 2); /* !! TMP68301 !! */
+ TMP68301(config, m_maincpu, XTAL(32'000'000) / 2);
m_maincpu->set_addrmap(AS_PROGRAM, &realbrk_state::realbrk_mem);
- m_maincpu->set_irq_acknowledge_callback("tmp68301", FUNC(tmp68301_device::irq_callback));
-
- TMP68301(config, m_tmp68301, 0);
- m_tmp68301->set_cputag(m_maincpu);
- m_tmp68301->out_parallel_callback().set(FUNC(realbrk_state::realbrk_flipscreen_w));
+ m_maincpu->out_parallel_callback().set(FUNC(realbrk_state::realbrk_flipscreen_w));
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
@@ -809,8 +803,7 @@ void realbrk_state::pkgnsh(machine_config &config)
realbrk(config);
m_maincpu->set_addrmap(AS_PROGRAM, &realbrk_state::pkgnsh_mem);
-
- m_tmp68301->out_parallel_callback().set_nop();
+ m_maincpu->out_parallel_callback().set_nop();
}
void realbrk_state::pkgnshdx(machine_config &config)
@@ -825,6 +818,7 @@ void realbrk_state::dai2kaku(machine_config &config)
realbrk(config);
m_maincpu->set_addrmap(AS_PROGRAM, &realbrk_state::dai2kaku_mem);
+ m_maincpu->out_parallel_callback().set(FUNC(realbrk_state::dai2kaku_flipscreen_w));
m_gfxdecode->set_info(gfx_dai2kaku);
m_screen->set_screen_update(FUNC(realbrk_state::screen_update_dai2kaku));
diff --git a/src/mame/drivers/retofinv.cpp b/src/mame/drivers/retofinv.cpp
index bb0be85c97b..b951cce01fc 100644
--- a/src/mame/drivers/retofinv.cpp
+++ b/src/mame/drivers/retofinv.cpp
@@ -132,7 +132,7 @@ READ8_MEMBER(retofinv_state::cpu0_mf800_r)
WRITE8_MEMBER(retofinv_state::soundcommand_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
diff --git a/src/mame/drivers/rockrage.cpp b/src/mame/drivers/rockrage.cpp
index 803b9859ffa..4d28a96862c 100644
--- a/src/mame/drivers/rockrage.cpp
+++ b/src/mame/drivers/rockrage.cpp
@@ -81,7 +81,7 @@ WRITE8_MEMBER(rockrage_state::rockrage_bankswitch_w)
WRITE8_MEMBER(rockrage_state::rockrage_sh_irqtrigger_w)
{
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE);
}
diff --git a/src/mame/drivers/rohga.cpp b/src/mame/drivers/rohga.cpp
index da1d4c8d39d..00b983b2e0a 100644
--- a/src/mame/drivers/rohga.cpp
+++ b/src/mame/drivers/rohga.cpp
@@ -901,7 +901,6 @@ void rohga_state::rohga(machine_config &config)
m_decocomn->set_palette_tag(m_palette);
DECO16IC(config, m_deco_tilegen[0], 0);
- m_deco_tilegen[0]->set_split(0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x64);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
@@ -917,7 +916,6 @@ void rohga_state::rohga(machine_config &config)
m_deco_tilegen[0]->set_gfxdecode_tag("gfxdecode");
DECO16IC(config, m_deco_tilegen[1], 0);
- m_deco_tilegen[1]->set_split(0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
@@ -993,7 +991,6 @@ void rohga_state::wizdfire(machine_config &config)
m_decocomn->set_palette_tag(m_palette);
DECO16IC(config, m_deco_tilegen[0], 0);
- m_deco_tilegen[0]->set_split(0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
@@ -1009,7 +1006,6 @@ void rohga_state::wizdfire(machine_config &config)
m_deco_tilegen[0]->set_gfxdecode_tag("gfxdecode");
DECO16IC(config, m_deco_tilegen[1], 0);
- m_deco_tilegen[1]->set_split(0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
@@ -1090,7 +1086,6 @@ void rohga_state::nitrobal(machine_config &config)
m_decocomn->set_palette_tag(m_palette);
DECO16IC(config, m_deco_tilegen[0], 0);
- m_deco_tilegen[0]->set_split(0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_32x32);
m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
@@ -1106,7 +1101,6 @@ void rohga_state::nitrobal(machine_config &config)
m_deco_tilegen[0]->set_gfxdecode_tag("gfxdecode");
DECO16IC(config, m_deco_tilegen[1], 0);
- m_deco_tilegen[1]->set_split(0);
m_deco_tilegen[1]->set_pf1_size(DECO_32x32);
m_deco_tilegen[1]->set_pf2_size(DECO_32x32);
m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
@@ -1188,7 +1182,6 @@ void rohga_state::schmeisr(machine_config &config)
m_decocomn->set_palette_tag(m_palette);
DECO16IC(config, m_deco_tilegen[0], 0);
- m_deco_tilegen[0]->set_split(0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x64);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
@@ -1204,7 +1197,6 @@ void rohga_state::schmeisr(machine_config &config)
m_deco_tilegen[0]->set_gfxdecode_tag("gfxdecode");
DECO16IC(config, m_deco_tilegen[1], 0);
- m_deco_tilegen[1]->set_split(0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
diff --git a/src/mame/drivers/ron.cpp b/src/mame/drivers/ron.cpp
index a2f6d8d91b2..7b8a5294888 100644
--- a/src/mame/drivers/ron.cpp
+++ b/src/mame/drivers/ron.cpp
@@ -2,7 +2,7 @@
// copyright-holders:Angelo Salese, AJR
/***************************************************************************
- Ron II Mah-Jongg (c) 1981 Sanritsu
+ Futari Mahjong Ron II (c) 1981 Sanritsu
TODO:
- colors;
@@ -559,4 +559,4 @@ ROM_START( ron2 )
ROM_LOAD( "82s129_4.2m", 0x100, 0x100, CRC(f3c05d59) SHA1(bd48963aa9f2bedaa0c1fd031d7c93089161d1d9) )
ROM_END
-GAME( 1981, ron2, 0, ron, ron, ron_state, empty_init, ROT270, "Sanritsu", "Ron II Mah-Jongg", MACHINE_IMPERFECT_SOUND | MACHINE_WRONG_COLORS )
+GAME( 1981, ron2, 0, ron, ron, ron_state, empty_init, ROT270, "Sanritsu", "Futari Mahjong Ron II", MACHINE_IMPERFECT_SOUND | MACHINE_WRONG_COLORS )
diff --git a/src/mame/drivers/roul.cpp b/src/mame/drivers/roul.cpp
index 51e23dcbb38..69939afd1f8 100644
--- a/src/mame/drivers/roul.cpp
+++ b/src/mame/drivers/roul.cpp
@@ -200,7 +200,7 @@ WRITE8_MEMBER(roul_state::blitter_cmd_w)
WRITE8_MEMBER(roul_state::sound_latch_w)
{
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
m_soundcpu->set_input_line(0, HOLD_LINE);
}
diff --git a/src/mame/drivers/royalmah.cpp b/src/mame/drivers/royalmah.cpp
index e7911dd960b..9e081d51c1a 100644
--- a/src/mame/drivers/royalmah.cpp
+++ b/src/mame/drivers/royalmah.cpp
@@ -948,7 +948,7 @@ READ8_MEMBER(royalmah_state::jansou_6405_r)
WRITE8_MEMBER(royalmah_state::jansou_sound_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
diff --git a/src/mame/drivers/rt1715.cpp b/src/mame/drivers/rt1715.cpp
index 2ac070f25fd..8cc7fbb8309 100644
--- a/src/mame/drivers/rt1715.cpp
+++ b/src/mame/drivers/rt1715.cpp
@@ -363,11 +363,11 @@ void rt1715_state::rt1715_base_io(address_map &map)
map.global_mask(0xff);
map(0x08, 0x0b).rw(m_ctc0, FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
map(0x0c, 0x0f).rw(m_sio0, FUNC(z80sio_device::ba_cd_r), FUNC(z80sio_device::ba_cd_w));
-// map(0x10, 0x13).rw(m_ctc1, FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
-// map(0x14, 0x17).rw(m_sio1, FUNC(z80sio_device::ba_cd_r), FUNC(z80sio_device::ba_cd_w));
+// map(0x10, 0x13).rw(m_ctc1, FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
+// map(0x14, 0x17).rw(m_sio1, FUNC(z80sio_device::ba_cd_r), FUNC(z80sio_device::ba_cd_w));
map(0x18, 0x19).rw(m_crtc, FUNC(i8275_device::read), FUNC(i8275_device::write));
-// map(0x2c, 0x2f) // LT107CS -- serial DSR?
-// map(0x30, 0x33) // LT111CS -- serial SEL? (data rate selector)
+// map(0x2c, 0x2f) // LT107CS -- serial DSR?
+// map(0x30, 0x33) // LT111CS -- serial SEL? (data rate selector)
}
void rt1715_state::rt1715_io(address_map &map)
@@ -377,9 +377,9 @@ void rt1715_state::rt1715_io(address_map &map)
map(0x00, 0x03).rw("a71", FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt)); // floppy data
map(0x04, 0x07).rw("a72", FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt)); // floppy control/status
map(0x20, 0x20).w(FUNC(rt1715_state::rt1715_floppy_enable));
-// map(0x24, 0x27).w(FUNC(rt1715_state::rt1715_rom_enable)); // MEMCS0
+// map(0x24, 0x27).w(FUNC(rt1715_state::rt1715_rom_enable)); // MEMCS0
map(0x28, 0x2b).w(FUNC(rt1715_state::rt1715_rom_disable)); // MEMCS1
-// map(0x34, 0x37) // BWSCS (read: memory start address, write: switch chargen)
+// map(0x34, 0x37) // BWSCS (read: memory start address, write: switch chargen)
}
void rt1715_state::rt1715w_mem(address_map &map)
@@ -403,14 +403,14 @@ void rt1715_state::rt1715w_io(address_map &map)
map(0x00, 0x00).rw(m_dma, FUNC(z80dma_device::bus_r), FUNC(z80dma_device::bus_w)); // A2
map(0x04, 0x07).rw(m_ctc2, FUNC(z80ctc_device::read), FUNC(z80ctc_device::write)); // A4
-// map(0x1a, 0x1b) // chargen write protection
+// map(0x1a, 0x1b) // chargen write protection
map(0x1c, 0x1d).m(m_fdc, FUNC(i8272a_device::map));
map(0x20, 0x23).w(FUNC(rt1715_state::rt1715w_krfd_w)); // KRFD -- FD-Steuerregister (A45)
map(0x24, 0x27).w(FUNC(rt1715_state::rt1715w_set_bank)); // BR (A62, A63)
map(0x28, 0x2b).w(FUNC(rt1715_state::rt1715w_floppy_motor)); // MOS
map(0x34, 0x37).portr("S8"); // KON -- Konfigurations-schalter FD (config switch -- A114, DIP S8)
-// map(0x38, 0x3b) // SR (RST1) -- Ru:cksetzen von Flip-Flops im FD
-// map(0x3c, 0x3f) // RST (RST2) -- Ru:cksetzen von Flip-Flops in V.24 (Pru:ftechnik)
+// map(0x38, 0x3b) // SR (RST1) -- Ru:cksetzen von Flip-Flops im FD
+// map(0x3c, 0x3f) // RST (RST2) -- Ru:cksetzen von Flip-Flops in V.24 (Pru:ftechnik)
// used via DMA only
map(0x40, 0x40).r(m_fdc, FUNC(i8272a_device::msr_r));
map(0x41, 0x41).rw(m_fdc, FUNC(i8272a_device::dma_r), FUNC(i8272a_device::dma_w));
diff --git a/src/mame/drivers/sandscrp.cpp b/src/mame/drivers/sandscrp.cpp
index 979af82096b..b7d812576f9 100644
--- a/src/mame/drivers/sandscrp.cpp
+++ b/src/mame/drivers/sandscrp.cpp
@@ -268,14 +268,14 @@ template<int Latch>
READ8_MEMBER(sandscrp_state::soundlatch_r)
{
m_latch_full[Latch] = 0;
- return m_soundlatch[Latch]->read(space,0);
+ return m_soundlatch[Latch]->read();
}
template<int Latch>
WRITE8_MEMBER(sandscrp_state::soundlatch_w)
{
m_latch_full[Latch] = 1;
- m_soundlatch[Latch]->write(space,0,data);
+ m_soundlatch[Latch]->write(data);
}
void sandscrp_state::sandscrp_mem(address_map &map)
diff --git a/src/mame/drivers/sauro.cpp b/src/mame/drivers/sauro.cpp
index fa40c602acc..8c6399d45df 100644
--- a/src/mame/drivers/sauro.cpp
+++ b/src/mame/drivers/sauro.cpp
@@ -141,13 +141,13 @@ void sauro_state::machine_start()
WRITE8_MEMBER(sauro_state::sauro_sound_command_w)
{
data |= 0x80;
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
}
READ8_MEMBER(sauro_state::sauro_sound_command_r)
{
- int ret = m_soundlatch->read(space, offset);
- m_soundlatch->clear_w(space, offset, 0);
+ int ret = m_soundlatch->read();
+ m_soundlatch->clear_w();
return ret;
}
diff --git a/src/mame/drivers/sc2.cpp b/src/mame/drivers/sc2.cpp
index e2c170bd01e..a6bacd50ea2 100644
--- a/src/mame/drivers/sc2.cpp
+++ b/src/mame/drivers/sc2.cpp
@@ -260,5 +260,5 @@ ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
-COMP( 1981, sc2, 0, 0, sc2, sc2, sc2_state, empty_init, "VEB Mikroelektronik Erfurt", "Schachcomputer SC 2 (rev. E)", MACHINE_SUPPORTS_SAVE )
-COMP( 1981, sc2a, sc2, 0, sc2, sc2, sc2_state, empty_init, "VEB Mikroelektronik Erfurt", "Schachcomputer SC 2", MACHINE_SUPPORTS_SAVE )
+COMP( 1981, sc2, 0, 0, sc2, sc2, sc2_state, empty_init, "VEB Mikroelektronik Erfurt", "Schachcomputer SC 2 (rev. E)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+COMP( 1981, sc2a, sc2, 0, sc2, sc2, sc2_state, empty_init, "VEB Mikroelektronik Erfurt", "Schachcomputer SC 2", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
diff --git a/src/mame/drivers/scotrsht.cpp b/src/mame/drivers/scotrsht.cpp
index b8685aacfac..a8de6f17167 100644
--- a/src/mame/drivers/scotrsht.cpp
+++ b/src/mame/drivers/scotrsht.cpp
@@ -60,7 +60,7 @@ WRITE_LINE_MEMBER(scotrsht_state::vblank_irq)
WRITE8_MEMBER(scotrsht_state::soundlatch_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
diff --git a/src/mame/drivers/scyclone.cpp b/src/mame/drivers/scyclone.cpp
index 020e76915c5..81e84ef52f0 100644
--- a/src/mame/drivers/scyclone.cpp
+++ b/src/mame/drivers/scyclone.cpp
@@ -534,24 +534,24 @@ WRITE8_MEMBER(scyclone_state::snd_3001_w)
// need to clear the latch somewhere, the command value is written back here and at 3005
// after acknowledging a command
// might actually reset the DACs as there are (at least) 2 of them?
- m_soundlatch->clear_w(space, 0, data);
+ m_soundlatch->clear_w();
}
/*
WRITE8_MEMBER(scyclone_state::snd_3003_w)
{
-// m_soundlatch->clear_w(space, 0, data);
+// m_soundlatch->clear_w();
}
WRITE8_MEMBER(scyclone_state::snd_3004_w)
{
-// m_soundlatch->clear_w(space, 0, data);
+// m_soundlatch->clear_w();
}
*/
WRITE8_MEMBER(scyclone_state::snd_3005_w)
{
-// m_soundlatch->clear_w(space, 0, data);
+// m_soundlatch->clear_w();
}
diff --git a/src/mame/drivers/sega_beena.cpp b/src/mame/drivers/sega_beena.cpp
index 10ceb7c14c0..001d50d03b7 100644
--- a/src/mame/drivers/sega_beena.cpp
+++ b/src/mame/drivers/sega_beena.cpp
@@ -1,36 +1,46 @@
// license:BSD-3-Clause
-// copyright-holders:David Haywood
+// copyright-holders:R. Belmont
/******************************************************************************
Sega Beena
- non-video 'book' based learning system, like LeapPad etc.
+ apbeena.cpp
- unknown CPU type (inside Sega custom?)
+ Skeleton driver for the Sega Advanced Pico BEENA
+
+ H/W is custom Sega SoC with ARM7TDMI core at 81 MHz.
+
+ TODO:
+ Everything!
+ Needs the internal BIOS dumped.
+ Component list / PCB diagram
cartridge ROM has 'edinburgh' in the header, maybe a system codename?
ROM is also full of OGG files containing the string 'Encoded with Speex speex-1.0.4'
as well as .mid files for music
- TODO: component list!
-
*******************************************************************************/
#include "emu.h"
#include "bus/generic/slot.h"
#include "bus/generic/carts.h"
+#include "cpu/arm7/arm7.h"
#include "softlist.h"
#include "speaker.h"
+#include "screen.h"
+
class sega_beena_state : public driver_device
{
public:
sega_beena_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "arm7")
, m_cart(*this, "cartslot")
, m_cart_region(nullptr)
+ , m_bank(*this, "cartbank")
{ }
void sega_beena(machine_config &config);
@@ -39,12 +49,24 @@ private:
virtual void machine_start() override;
virtual void machine_reset() override;
+ uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart);
+ void beena_arm7_map(address_map &map);
+
+ required_device<arm7_cpu_device> m_maincpu;
required_device<generic_slot_device> m_cart;
memory_region *m_cart_region;
+ optional_memory_bank m_bank;
};
+void sega_beena_state::beena_arm7_map(address_map &map)
+{
+ map(0x00000000, 0x000001ff).rom().bankr("cartbank");
+ map(0x80000000, 0x807fffff).rom().bankr("cartbank");
+}
+
void sega_beena_state::machine_start()
{
// if there's a cart, override the standard mapping
@@ -52,6 +74,9 @@ void sega_beena_state::machine_start()
{
std::string region_tag;
m_cart_region = memregion(region_tag.assign(m_cart->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
+
+ m_bank->configure_entries(0, (m_cart_region->bytes() + 0x7fffff) / 0x800000, m_cart_region->base(), 0x800000);
+ m_bank->set_entry(0);
}
}
@@ -66,6 +91,7 @@ DEVICE_IMAGE_LOAD_MEMBER(sega_beena_state, cart)
m_cart->rom_alloc(size, GENERIC_ROM16_WIDTH, ENDIANNESS_LITTLE);
m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
+
return image_init_result::PASS;
}
@@ -73,11 +99,22 @@ static INPUT_PORTS_START( sega_beena )
INPUT_PORTS_END
+uint32_t sega_beena_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+{
+ return 0;
+}
+
void sega_beena_state::sega_beena(machine_config &config)
{
- // unknown CPU
+ ARM7_BE(config, m_maincpu, 81'000'000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &sega_beena_state::beena_arm7_map);
- // no screen
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(640, 480);
+ screen.set_visarea(0, 640-1, 0, 480-1);
+ screen.set_screen_update(FUNC(sega_beena_state::screen_update));
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
@@ -85,15 +122,16 @@ void sega_beena_state::sega_beena(machine_config &config)
GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "sega_beena_cart");
m_cart->set_width(GENERIC_ROM16_WIDTH);
m_cart->set_device_load(device_image_load_delegate(&sega_beena_state::device_image_load_cart, this));
+ m_cart->set_must_be_loaded(true);
SOFTWARE_LIST(config, "cart_list").set_original("sega_beena_cart");
}
ROM_START( beena )
- ROM_REGION( 0x100000, "maincpu", ROMREGION_ERASEFF )
- // no BIOS or internal to CPU
+ ROM_REGION32_BE( 0x80000, "bios", 0 ) // SoC internal BIOS
+ ROM_LOAD16_WORD_SWAP( "beenabios.bin", 0x000000, 0x080000, NO_DUMP )
ROM_END
// year, name, parent, compat, machine, input, class, init, company, fullname, flags
-CONS( 200?, beena, 0, 0, sega_beena, sega_beena, sega_beena_state, empty_init, "Sega", "Beena", MACHINE_IS_SKELETON )
+CONS( 2009, beena, 0, 0, sega_beena, sega_beena, sega_beena_state, empty_init, "Sega", "Advanced Pico BEENA", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/segahang.cpp b/src/mame/drivers/segahang.cpp
index 547192894ba..84cc3e77bab 100644
--- a/src/mame/drivers/segahang.cpp
+++ b/src/mame/drivers/segahang.cpp
@@ -301,7 +301,7 @@ READ8_MEMBER( segahang_state::sound_data_r )
{
// assert ACK
m_i8255_1->pc6_w(CLEAR_LINE);
- return m_soundlatch->read(space, 0);
+ return m_soundlatch->read();
}
diff --git a/src/mame/drivers/segas16a.cpp b/src/mame/drivers/segas16a.cpp
index a9f15030879..5f45d7f174e 100644
--- a/src/mame/drivers/segas16a.cpp
+++ b/src/mame/drivers/segas16a.cpp
@@ -318,7 +318,7 @@ READ8_MEMBER( segas16a_state::sound_data_r )
{
// assert ACK
m_i8255->pc6_w(CLEAR_LINE);
- return m_soundlatch->read(space, 0);
+ return m_soundlatch->read();
}
diff --git a/src/mame/drivers/segas16b.cpp b/src/mame/drivers/segas16b.cpp
index 1b13df462e6..93dfe82841f 100644
--- a/src/mame/drivers/segas16b.cpp
+++ b/src/mame/drivers/segas16b.cpp
@@ -966,7 +966,7 @@ void segas16b_state::memory_mapper(sega_315_5195_mapper_device &mapper, uint8_t
WRITE16_MEMBER( segas16b_state::sound_w16 )
{
if (m_soundlatch != nullptr)
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
if (m_soundcpu != nullptr)
m_soundcpu->set_input_line(0, HOLD_LINE);
}
diff --git a/src/mame/drivers/segas18.cpp b/src/mame/drivers/segas18.cpp
index 8ab3a2752e8..ad5e6afac73 100644
--- a/src/mame/drivers/segas18.cpp
+++ b/src/mame/drivers/segas18.cpp
@@ -2749,6 +2749,9 @@ ROM_END
Moonwalker, Sega System 18
CPU: FD1094 (317-0158)
ROM Board: 171-5873B
+ Main board: 837-7530-01
+ Game BD: 833-7528-01 MOONWALKER
+ ROM Board: 834-7529-01
*/
ROM_START( mwalku )
ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code - custom cpu 317-0158
diff --git a/src/mame/drivers/seicupbl.cpp b/src/mame/drivers/seicupbl.cpp
index 37408e10c00..a052a287d03 100644
--- a/src/mame/drivers/seicupbl.cpp
+++ b/src/mame/drivers/seicupbl.cpp
@@ -11,6 +11,13 @@
- tilemap chip drawings might be merged between this and other
Seibu implementations.
+OSC: 40MHz, 15MHz & 8MHz
+
+Measured clocks:
+ MC68000P12F - 14.99MHz
+ Z0840006PSC - 3.996MHz
+ OKI M6295 - 0.999MHz
+
***************************************************************************/
@@ -25,8 +32,6 @@
#include "speaker.h"
-#define MAIN_CLOCK XTAL(8'000'000)
-
class seicupbl_state : public driver_device
{
public:
@@ -551,7 +556,7 @@ static GFXDECODE_START( gfx_seicupbl_csb )
GFXDECODE_ENTRY( "char", 0, cupsocsb_8x8_tilelayout, 48*16, 16 )
GFXDECODE_ENTRY( "gfx3", 0, cupsocsb_tilelayout, 0*16, 32 )
GFXDECODE_ENTRY( "gfx4", 0, cupsocsb_tilelayout, 32*16, 16 ) /* unused */
- GFXDECODE_ENTRY( "sprite", 0, cupsocsb_spritelayout, 0*16, 8*16 )
+ GFXDECODE_ENTRY( "sprite", 0, cupsocsb_spritelayout, 0*16, 8*16 )
GFXDECODE_ENTRY( "gfx5", 0, cupsocsb_tilelayout, 32*16, 16 )
GFXDECODE_ENTRY( "gfx6", 0, cupsocsb_tilelayout, 16*16, 16 )
GFXDECODE_END
@@ -560,14 +565,14 @@ GFXDECODE_END
void seicupbl_state::cupsocbl(machine_config &config)
{
/* basic machine hardware */
- M68000(config, m_maincpu, 12000000);
+ M68000(config, m_maincpu, 15_MHz_XTAL); // 15MHz verified
m_maincpu->set_addrmap(AS_PROGRAM, &seicupbl_state::cupsocbl_mem);
m_maincpu->set_vblank_int("screen", FUNC(seicupbl_state::irq4_line_hold)); /* VBL */
SEIBU_COP_BOOTLEG(config, "seibucop_boot", m_maincpu);
/*Different Sound hardware*/
- Z80(config, m_audiocpu, 14318180/4);
+ Z80(config, m_audiocpu, 8_MHz_XTAL/2); // 4MHz verified
m_audiocpu->set_addrmap(AS_PROGRAM, &seicupbl_state::cupsocbl_sound_mem);
//m_audiocpu->set_periodic_int("screen", FUNC(seicupbl_state::nmi_line_pulse));
@@ -597,7 +602,7 @@ void seicupbl_state::cupsocbl(machine_config &config)
GENERIC_LATCH_8(config, m_soundlatch);
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI);
- OKIM6295(config, m_oki, 1000000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0);
+ OKIM6295(config, m_oki, 8_MHz_XTAL/8, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); // 1MHz verified
}
@@ -621,10 +626,12 @@ Seibu Cup Soccer - Seibu - Bootleg
1 x oki 6295
sc_01 (prg)
sc_02 and sc_03 (data)
+8MHz & 40MHz OSC
(prg)
-1 x 68000
+1 x 68000P12
sc_04 and sc_05
+15MHz OSC
(gfx)
2 x ti tpc1020
@@ -700,26 +707,31 @@ ROM_START( cupsocsb )
ROM_LOAD16_BYTE( "sc_14.bin", 0x00001, 0x080000, CRC(566086c2) SHA1(b7d09ce978f99ecc0d1975b31330ed49317701d5) )
ROM_END
-/* slight changes in the program roms compared to above set, all remaining roms were the same */
+/* slight changes in the program roms compared to above set, all remaining roms were the same
+ main PCB is marked: "SOCCER 1", "rev.5" and "lc" on component side ("lc" is the Italian for "Lato Componenti" which translates to "Components Side")
+ main PCB is marked: "SOCCER 1", "rev.5" and "ls" on component side ("ls" is the Italian for "Lato Saldature" which translates to "Solders Side")
+ ROMs PCB is marked: "CALCIO 2", "rev.3" and "lc" on component side ("CALCIO is the Italian for "SOCCER"; "lc" is the Italian for "Lato Componenti" which translates to "Components Side")
+ ROMs PCB is marked: "CALCIO 2", "rev.3" and "ls" on component side ("CALCIO is the Italian for "SOCCER"; "ls" is the Italian for "Lato Saldature" which translates to "Solders Side")
+ main PCB is labelled: "SOCCER" on solder side */
ROM_START( cupsocsb2 )
ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
- ROM_LOAD16_BYTE( "4", 0x00001, 0x80000, CRC(83db76f8) SHA1(ffcd0a728de58871b945c15cc27da374b587e170) ) // sldh
- ROM_LOAD16_BYTE( "5", 0x00000, 0x80000, CRC(c01e88c6) SHA1(8f90261792343c92ddd877ab8a2480b5aac82961) ) // sldh
+ ROM_LOAD16_BYTE( "4.27040.u11", 0x00001, 0x80000, CRC(83db76f8) SHA1(ffcd0a728de58871b945c15cc27da374b587e170) ) // actually was a 27c4001
+ ROM_LOAD16_BYTE( "5.27040.u17", 0x00000, 0x80000, CRC(c01e88c6) SHA1(8f90261792343c92ddd877ab8a2480b5aac82961) ) // actually was a 27c4001
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 code */
- ROM_LOAD( "sc_01.bin", 0x000000, 0x08000, CRC(cea39d6d) SHA1(f0b79c03ffafdd1e57673d6d4836becbe415110b) )
+ ROM_LOAD( "1.27512.u20", 0x000000, 0x08000, CRC(cea39d6d) SHA1(f0b79c03ffafdd1e57673d6d4836becbe415110b) ) // 27c512
ROM_CONTINUE( 0x000000, 0x08000 )
ROM_REGION( 0x200000, "sprite", ROMREGION_INVERT ) /* bootleg sprite gfx */
- ROM_LOAD( "sc_07.bin", 0x000000, 0x080000, CRC(dcb29d01) SHA1(72b4234622605f0ab03f21fdb6a61c6dac36000d) )
- ROM_LOAD( "sc_06.bin", 0x080000, 0x080000, CRC(2dc70e05) SHA1(f1d0beb8428a7e1d7c7818e6719abdc543b2fa80) )
+ ROM_LOAD( "7.27040.u86", 0x000000, 0x080000, CRC(dcb29d01) SHA1(72b4234622605f0ab03f21fdb6a61c6dac36000d) ) // actually was a 27c4001
+ ROM_LOAD( "6.27040.u87", 0x080000, 0x080000, CRC(2dc70e05) SHA1(f1d0beb8428a7e1d7c7818e6719abdc543b2fa80) ) // actually was a 27c4001
ROM_COPY( "sprite", 0x00000, 0x100000, 0x100000 )
ROM_REGION( 0x200000, "test1", 0 ) /* bootleg tile gfx */
- ROM_LOAD16_BYTE( "sc_09.bin", 0x000000, 0x080000, CRC(695b6342) SHA1(dfccb43789021ba2568b9284ae61e64f7f89b152) )
- ROM_LOAD16_BYTE( "sc_10.bin", 0x000001, 0x080000, CRC(27e172b8) SHA1(ed86db2f42c8061607d46f2407b0130aaf692a02) )
- ROM_LOAD16_BYTE( "sc_08.bin", 0x100000, 0x080000, CRC(637120f3) SHA1(b4b2ad192e46ff80d4cb440d7fb6dac215a353ed) )
- ROM_LOAD16_BYTE( "sc_11.bin", 0x100001, 0x080000, CRC(0cd5ca5e) SHA1(a59665e543e9383355de2576e6693348ec356591) )
+ ROM_LOAD16_BYTE( "9.27040.u36", 0x000000, 0x080000, CRC(695b6342) SHA1(dfccb43789021ba2568b9284ae61e64f7f89b152) ) // actually was a 27c4001
+ ROM_LOAD16_BYTE( "10.27040.u37", 0x000001, 0x080000, CRC(27e172b8) SHA1(ed86db2f42c8061607d46f2407b0130aaf692a02) ) // actually was a 27c4001
+ ROM_LOAD16_BYTE( "8.27040.u38", 0x100000, 0x080000, CRC(637120f3) SHA1(b4b2ad192e46ff80d4cb440d7fb6dac215a353ed) ) // actually was a 27c4001
+ ROM_LOAD16_BYTE( "11.27040.u39", 0x100001, 0x080000, CRC(0cd5ca5e) SHA1(a59665e543e9383355de2576e6693348ec356591) ) // actually was a 27c4001
ROM_REGION( 0x020000, "char", ROMREGION_INVERT )
ROM_COPY( "test1", 0x080000, 0x00000, 0x020000 )
@@ -737,9 +749,11 @@ ROM_START( cupsocsb2 )
ROM_REGION( 0x080000, "gfx6", ROMREGION_INVERT ) /* LBK tiles */
ROM_COPY( "gfx5", 0x00000, 0x00000, 0x080000 )
+ // A dump of 02.u26 from a second PCB had 3 different bytes: 0x8000 from 0x80 to 0xff; 0x10000 from 0xa4 to 0x4a; 0x18000 from 0x4a to 0xa4.
+ // However the first dump matches all the other sets and all the other ROMs from the second PCB match the ones from the first.
ROM_REGION( 0x100000, "adpcm", ROMREGION_ERASEFF ) /* ADPCM samples */
- ROM_LOAD( "sc_02.bin", 0x000000, 0x020000, CRC(a70d4f03) SHA1(c2482e624c8a828a94206a36d10c1021ad8ca1d0) )
- ROM_LOAD( "sc_03.bin", 0x080000, 0x080000, CRC(6e254d12) SHA1(857779dbd276b688201a8ea3afd5817e38acad2e) )
+ ROM_LOAD( "2.27010.u26", 0x000000, 0x020000, CRC(a70d4f03) SHA1(c2482e624c8a828a94206a36d10c1021ad8ca1d0) ) // 27c010a
+ ROM_LOAD( "3.27040.u25", 0x080000, 0x080000, CRC(6e254d12) SHA1(857779dbd276b688201a8ea3afd5817e38acad2e) ) // actually was a 27c4001
ROM_REGION( 0x200000, "oki", ROMREGION_ERASEFF )
ROM_COPY( "adpcm", 0x00000, 0x000000, 0x20000 ) //bank 0
@@ -756,11 +770,11 @@ ROM_START( cupsocsb2 )
/* these are maths tables, for whatever COP replacement the bootlegs use */
ROM_REGION( 0x500000, "unknown0", 0 )
- ROM_LOAD16_BYTE( "sc_13.bin", 0x00000, 0x010000, CRC(229bddd8) SHA1(0924bf29db9c5a970546f154e7752697fdce6a58) )
- ROM_LOAD16_BYTE( "sc_12.bin", 0x00001, 0x010000, CRC(dabfa826) SHA1(0db587c846755491b169ef7751ba8e7cdc2607e6) )
+ ROM_LOAD16_BYTE( "13.bin", 0x00000, 0x010000, CRC(229bddd8) SHA1(0924bf29db9c5a970546f154e7752697fdce6a58) ) // 27c512
+ ROM_LOAD16_BYTE( "12.bin", 0x00001, 0x010000, CRC(dabfa826) SHA1(0db587c846755491b169ef7751ba8e7cdc2607e6) ) // 27c512
ROM_REGION( 0x500000, "unknown1", 0 )
- ROM_LOAD16_BYTE( "sc_15.bin", 0x00000, 0x080000, CRC(8fd87e65) SHA1(acc9fd0289fa9ab60bec16d3e642039380e5180a) )
- ROM_LOAD16_BYTE( "sc_14.bin", 0x00001, 0x080000, CRC(566086c2) SHA1(b7d09ce978f99ecc0d1975b31330ed49317701d5) )
+ ROM_LOAD16_BYTE( "15.bin", 0x00000, 0x080000, CRC(8fd87e65) SHA1(acc9fd0289fa9ab60bec16d3e642039380e5180a) ) // 27c4001
+ ROM_LOAD16_BYTE( "14.bin", 0x00001, 0x080000, CRC(566086c2) SHA1(b7d09ce978f99ecc0d1975b31330ed49317701d5) ) // 27c4001
ROM_END
ROM_START( cupsocsb3 )
@@ -825,6 +839,6 @@ ROM_START( cupsocsb3 )
ROM_END
-GAME( 1992, cupsocsb, cupsoc, cupsocbl, cupsoc, seicupbl_state, empty_init, ROT0, "bootleg", "Seibu Cup Soccer :Selection: (bootleg, set 1)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING )
-GAME( 1992, cupsocsb2,cupsoc, cupsocbl, cupsoc, seicupbl_state, empty_init, ROT0, "bootleg", "Seibu Cup Soccer :Selection: (bootleg, set 2)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING )
-GAME( 1992, cupsocsb3,cupsoc, cupsocbl, cupsoc, seicupbl_state, empty_init, ROT0, "bootleg", "Seibu Cup Soccer :Selection: (bootleg, set 3)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING )
+GAME( 1992, cupsocsb, cupsoc, cupsocbl, cupsoc, seicupbl_state, empty_init, ROT0, "bootleg", "Seibu Cup Soccer :Selection: (bootleg, set 1)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING )
+GAME( 1992, cupsocsb2, cupsoc, cupsocbl, cupsoc, seicupbl_state, empty_init, ROT0, "bootleg", "Seibu Cup Soccer :Selection: (bootleg, set 2)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING )
+GAME( 1992, cupsocsb3, cupsoc, cupsocbl, cupsoc, seicupbl_state, empty_init, ROT0, "bootleg", "Seibu Cup Soccer :Selection: (bootleg, set 3)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/seta.cpp b/src/mame/drivers/seta.cpp
index 5db192687f8..791819745e0 100644
--- a/src/mame/drivers/seta.cpp
+++ b/src/mame/drivers/seta.cpp
@@ -1579,11 +1579,11 @@ WRITE16_MEMBER(seta_state::sub_ctrl_w)
break;
case 4/2: // not sure
- if (ACCESSING_BITS_0_7) if(m_soundlatch[0] != nullptr) m_soundlatch[0]->write(space, 0, data & 0xff);
+ if (ACCESSING_BITS_0_7) if(m_soundlatch[0] != nullptr) m_soundlatch[0]->write(data & 0xff);
break;
case 6/2: // not sure
- if (ACCESSING_BITS_0_7) if(m_soundlatch[1] != nullptr) m_soundlatch[1]->write(space, 0, data & 0xff);
+ if (ACCESSING_BITS_0_7) if(m_soundlatch[1] != nullptr) m_soundlatch[1]->write(data & 0xff);
break;
}
@@ -2923,7 +2923,6 @@ void kiwame_state::kiwame_map(address_map &map)
map(0xc00000, 0xc03fff).rw(m_x1, FUNC(x1_010_device::word_r), FUNC(x1_010_device::word_w)); // Sound
map(0xd00000, 0xd00009).r(FUNC(kiwame_state::input_r)); // mahjong panel
map(0xe00000, 0xe00003).r(FUNC(kiwame_state::seta_dsw_r)); // DSW
- map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w));
}
@@ -3063,7 +3062,7 @@ void seta_state::umanclub_map(address_map &map)
WRITE8_MEMBER(seta_state::utoukond_sound_control_w)
{
if (!BIT(data, 6))
- m_soundlatch[0]->acknowledge_w(space, 0, 0);
+ m_soundlatch[0]->acknowledge_w();
// other bits used for banking? (low nibble seems to always be 2)
}
@@ -3559,7 +3558,7 @@ WRITE8_MEMBER(seta_state::calibr50_sub_bankswitch_w)
// Bit 3: NMICLR
if (!BIT(data, 3))
- m_soundlatch[0]->acknowledge_w(space, 0, 0);
+ m_soundlatch[0]->acknowledge_w();
// Bit 2: IRQCLR
if (!BIT(data, 2))
@@ -3571,7 +3570,7 @@ WRITE8_MEMBER(seta_state::calibr50_sub_bankswitch_w)
WRITE8_MEMBER(seta_state::calibr50_soundlatch2_w)
{
- m_soundlatch[1]->write(space,0,data);
+ m_soundlatch[1]->write(data);
m_subcpu->spin_until_time(attotime::from_usec(50)); // Allow the other cpu to reply
}
@@ -8039,7 +8038,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(seta_state::calibr50_interrupt)
void usclssic_state::machine_start()
{
- m_buttonmux->write_ab(0xff);
+ m_buttonmux->ab_w(0xff);
}
@@ -9275,19 +9274,15 @@ void seta_state::triplfun(machine_config &config)
WRITE_LINE_MEMBER(kiwame_state::kiwame_vblank)
{
if (state)
- m_tmp68301->external_interrupt_0();
+ m_maincpu->external_interrupt_0();
}
void kiwame_state::kiwame(machine_config &config)
{
/* basic machine hardware */
- M68000(config, m_maincpu, 16000000); /* 16 MHz */
+ TMP68301(config, m_maincpu, 16000000); /* 16 MHz */
m_maincpu->set_addrmap(AS_PROGRAM, &kiwame_state::kiwame_map);
- m_maincpu->set_irq_acknowledge_callback("tmp68301", FUNC(tmp68301_device::irq_callback));
-
- tmp68301_device &tmp68301(TMP68301(config, "tmp68301", 0));
- tmp68301.set_cputag(m_maincpu);
- tmp68301.out_parallel_callback().set(FUNC(kiwame_state::row_select_w));
+ m_maincpu->out_parallel_callback().set(FUNC(kiwame_state::row_select_w));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
diff --git a/src/mame/drivers/seta2.cpp b/src/mame/drivers/seta2.cpp
index c91a63dd12c..147a4ecb235 100644
--- a/src/mame/drivers/seta2.cpp
+++ b/src/mame/drivers/seta2.cpp
@@ -196,7 +196,6 @@ void seta2_state::grdians_map(address_map &map)
map(0xc50000, 0xc5ffff).ram(); // cleared
map(0xc60000, 0xc6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
map(0xe00010, 0xe0001f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
- map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
}
/***************************************************************************
@@ -235,7 +234,6 @@ void seta2_state::gundamex_map(address_map &map)
map(0xc50000, 0xc5ffff).ram(); // cleared
map(0xc60000, 0xc6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
map(0xe00010, 0xe0001f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
- map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
}
@@ -292,7 +290,6 @@ void seta2_state::mj4simai_map(address_map &map)
map(0xc00000, 0xc3ffff).ram().share("spriteram"); // Sprites
map(0xc40000, 0xc4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0xc60000, 0xc6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
- map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
}
@@ -316,7 +313,6 @@ void seta2_state::myangel_map(address_map &map)
map(0xc00000, 0xc3ffff).ram().share("spriteram"); // Sprites
map(0xc40000, 0xc4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0xc60000, 0xc6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
- map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
}
@@ -340,7 +336,6 @@ void seta2_state::myangel2_map(address_map &map)
map(0xd00000, 0xd3ffff).ram().share("spriteram"); // Sprites
map(0xd40000, 0xd4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0xd60000, 0xd6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
- map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
}
@@ -383,7 +378,6 @@ void seta2_state::pzlbowl_map(address_map &map)
map(0x840000, 0x84ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0x860000, 0x86003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
map(0x900000, 0x903fff).rw("x1snd", FUNC(x1_010_device::word_r), FUNC(x1_010_device::word_w)); // Sound
- map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
}
@@ -416,7 +410,6 @@ void seta2_state::penbros_map(address_map &map)
map(0x500302, 0x500303).portr("DSW2");
map(0x500300, 0x50030f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff);
map(0xb60000, 0xb6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs");
- map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w));
}
void seta2_state::ablastb_map(address_map &map)
@@ -482,7 +475,6 @@ void seta2_state::reelquak_map(address_map &map)
map(0xc00000, 0xc3ffff).ram().share("spriteram"); // Sprites
map(0xc40000, 0xc4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0xc60000, 0xc6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
- map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
}
@@ -497,7 +489,6 @@ void seta2_state::namcostr_map(address_map &map)
map(0x200000, 0x20ffff).ram(); // RAM
map(0xc00000, 0xc3ffff).ram().share("spriteram"); // Sprites
map(0xc60000, 0xc6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
- map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
}
@@ -540,8 +531,6 @@ void seta2_state::samshoot_map(address_map &map)
map(0x860000, 0x86003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
map(0x900000, 0x903fff).rw("x1snd", FUNC(x1_010_device::word_r), FUNC(x1_010_device::word_w)); // Sound
-
- map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
}
@@ -635,7 +624,6 @@ void staraudi_state::staraudi_map(address_map &map)
map(0xc40000, 0xc4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0xc50000, 0xc5ffff).ram(); // cleared
map(0xc60000, 0xc6003f).ram().w(FUNC(staraudi_state::vregs_w)).share("vregs"); // Video Registers
- map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
}
@@ -694,7 +682,6 @@ void seta2_state::telpacfl_map(address_map &map)
map(0xd00006, 0xd00007).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
// AM_RANGE(0xe00000, 0xe00001) AM_WRITE
map(0xe00010, 0xe0001f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
- map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
}
@@ -2301,23 +2288,19 @@ GFXDECODE_END
INTERRUPT_GEN_MEMBER(seta2_state::seta2_interrupt)
{
/* VBlank is connected to INT0 (external interrupts pin 0) */
- m_tmp68301->external_interrupt_0();
+ downcast<tmp68301_device &>(*m_maincpu).external_interrupt_0();
}
INTERRUPT_GEN_MEMBER(seta2_state::samshoot_interrupt)
{
- m_tmp68301->external_interrupt_2(); // to do: hook up x1-10 interrupts
+ downcast<tmp68301_device &>(*m_maincpu).external_interrupt_2(); // to do: hook up x1-10 interrupts
}
void seta2_state::seta2(machine_config &config)
{
- M68301(config, m_maincpu, XTAL(50'000'000)/3); // !! TMP68301 !!
+ TMP68301(config, m_maincpu, XTAL(50'000'000)/3); // !! TMP68301 !!
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::mj4simai_map);
m_maincpu->set_vblank_int("screen", FUNC(seta2_state::seta2_interrupt));
- m_maincpu->set_irq_acknowledge_callback("tmp68301", FUNC(tmp68301_device::irq_callback));
-
- TMP68301(config, m_tmp68301, 0);
- m_tmp68301->set_cputag(m_maincpu);
WATCHDOG_TIMER(config, "watchdog");
@@ -2349,8 +2332,8 @@ void seta2_state::gundamex(machine_config &config)
seta2(config);
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::gundamex_map);
- m_tmp68301->in_parallel_callback().set(FUNC(seta2_state::gundamex_eeprom_r));
- m_tmp68301->out_parallel_callback().set(FUNC(seta2_state::gundamex_eeprom_w));
+ downcast<tmp68301_device &>(*m_maincpu).in_parallel_callback().set(FUNC(seta2_state::gundamex_eeprom_r));
+ downcast<tmp68301_device &>(*m_maincpu).out_parallel_callback().set(FUNC(seta2_state::gundamex_eeprom_w));
EEPROM_93C46_16BIT(config, "eeprom");
@@ -2414,8 +2397,6 @@ void seta2_state::ablastb(machine_config &config)
M68000(config.replace(), m_maincpu, XTAL(16'000'000)); // TMP68HC000P-16
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::ablastb_map);
m_maincpu->set_vblank_int("screen", FUNC(seta2_state::irq2_line_hold));
-
- config.device_remove("tmp68301");
}
void seta2_state::reelquak(machine_config &config)
@@ -2423,7 +2404,7 @@ void seta2_state::reelquak(machine_config &config)
seta2(config);
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::reelquak_map);
- m_tmp68301->out_parallel_callback().set(FUNC(seta2_state::reelquak_leds_w));
+ downcast<tmp68301_device &>(*m_maincpu).out_parallel_callback().set(FUNC(seta2_state::reelquak_leds_w));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
TICKET_DISPENSER(config, m_dispenser, attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW);
@@ -2438,7 +2419,7 @@ void seta2_state::samshoot(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::samshoot_map);
m_maincpu->set_periodic_int(FUNC(seta2_state::samshoot_interrupt), attotime::from_hz(60));
- m_tmp68301->in_parallel_callback().set_ioport("DSW2");
+ downcast<tmp68301_device &>(*m_maincpu).in_parallel_callback().set_ioport("DSW2");
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
@@ -2467,7 +2448,7 @@ void seta2_state::telpacfl(machine_config &config)
seta2(config);
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::telpacfl_map);
- m_tmp68301->in_parallel_callback().set_ioport("KNOB");
+ downcast<tmp68301_device &>(*m_maincpu).in_parallel_callback().set_ioport("KNOB");
EEPROM_93C46_16BIT(config, "eeprom"); // not hooked up, seems unused
@@ -2570,13 +2551,10 @@ void funcube_state::funcube3(machine_config &config)
void seta2_state::namcostr(machine_config &config)
{
- M68301(config, m_maincpu, XTAL(50'000'000)/3); // !! TMP68301 !!
+ TMP68301(config, m_maincpu, XTAL(50'000'000)/3); // !! TMP68301 !!
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::namcostr_map);
m_maincpu->set_vblank_int("screen", FUNC(seta2_state::seta2_interrupt));
- m_maincpu->set_irq_acknowledge_callback("tmp68301", FUNC(tmp68301_device::irq_callback));
-
- TMP68301(config, m_tmp68301, 0); // does this have a ticket dispenser?
- m_tmp68301->set_cputag(m_maincpu);
+ // does this have a ticket dispenser?
// video hardware
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
diff --git a/src/mame/drivers/sf.cpp b/src/mame/drivers/sf.cpp
index 4fd07309f70..ae3f4045808 100644
--- a/src/mame/drivers/sf.cpp
+++ b/src/mame/drivers/sf.cpp
@@ -134,7 +134,7 @@ WRITE8_MEMBER(sf_state::coin_w)
WRITE8_MEMBER(sf_state::soundcmd_w)
{
- m_soundlatch->write(space, offset, data & 0xff);
+ m_soundlatch->write(data & 0xff);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
diff --git a/src/mame/drivers/shootout.cpp b/src/mame/drivers/shootout.cpp
index 32193741630..82713d8b766 100644
--- a/src/mame/drivers/shootout.cpp
+++ b/src/mame/drivers/shootout.cpp
@@ -60,17 +60,17 @@ WRITE8_MEMBER(shootout_state::bankswitch_w)
READ8_MEMBER(shootout_state::sound_cpu_command_r)
{
- m_audiocpu->set_input_line (INPUT_LINE_NMI, CLEAR_LINE);
- return (m_soundlatch->read (space, 0));
+ m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
+ return m_soundlatch->read();
}
WRITE8_MEMBER(shootout_state::sound_cpu_command_w)
{
- m_soundlatch->write( space, offset, data );
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
// Allow the other CPU to reply. This fixes the missing music on the title screen (parent set).
- m_maincpu->spin_until_time (attotime :: from_usec (200));
+ m_maincpu->spin_until_time(attotime::from_usec(200));
}
WRITE8_MEMBER(shootout_state::flipscreen_w)
diff --git a/src/mame/drivers/sigmab98.cpp b/src/mame/drivers/sigmab98.cpp
index d42c03ae818..5b317cc662f 100644
--- a/src/mame/drivers/sigmab98.cpp
+++ b/src/mame/drivers/sigmab98.cpp
@@ -1674,7 +1674,7 @@ WRITE8_MEMBER(sigmab98_state::gocowboy_4400_w)
}
else if ((offset >= 0x2000) && (offset < 0x2200))
{
- m_palette->write8(space, offset-0x2000, data);
+ m_palette->write8(offset-0x2000, data);
return;
}
else if ((offset >= 0x2800) && (offset < 0x2880))
@@ -1765,7 +1765,7 @@ WRITE8_MEMBER(sigmab98_state::gocowboy_dc00_w)
return;
case 0x64: // (72000) PALETTERAM
- m_palette->write8(space, offset, data);
+ m_palette->write8(offset, data);
return;
}
@@ -1992,7 +1992,7 @@ WRITE8_MEMBER(sigmab98_state::haekaka_b000_w)
case 0x67: // PALETTERAM + VTABLE + VREGS
if (offset < 0x200)
{
- m_palette->write8(space, offset, data);
+ m_palette->write8(offset, data);
return;
}
else if ((offset >= 0x800) && (offset < 0x880))
@@ -2248,7 +2248,7 @@ WRITE8_MEMBER(sigmab98_state::itazuram_nvram_palette_w)
{
if (m_rambank == 0x64)
{
- m_palette->write8(space, offset, data);
+ m_palette->write8(offset, data);
}
else if (m_rambank == 0x52)
{
@@ -2265,7 +2265,7 @@ WRITE8_MEMBER(sigmab98_state::itazuram_palette_w)
if (m_rombank == 0x6c)
{
if (offset < 0x200)
- m_palette->write8(space, offset, data);
+ m_palette->write8(offset, data);
}
else
{
@@ -2497,7 +2497,7 @@ WRITE8_MEMBER(sigmab98_state::tdoboon_c000_w)
case 0x66: // PALETTERAM + VTABLE
if (offset < 0x200)
{
- m_palette->write8(space, offset, data);
+ m_palette->write8(offset, data);
return;
}
else if ((offset >= 0x800) && (offset < 0x880))
diff --git a/src/mame/drivers/silvmil.cpp b/src/mame/drivers/silvmil.cpp
index 6b3ff2be93e..dfd7e380e28 100644
--- a/src/mame/drivers/silvmil.cpp
+++ b/src/mame/drivers/silvmil.cpp
@@ -53,8 +53,6 @@ public:
void puzzlove(machine_config &config);
void silvmil(machine_config &config);
- void init_silvmil();
-
private:
/* devices */
required_device<cpu_device> m_maincpu;
@@ -63,94 +61,91 @@ private:
required_device<generic_latch_8_device> m_soundlatch;
/* memory pointers */
- required_shared_ptr<uint16_t> m_bg_videoram;
- required_shared_ptr<uint16_t> m_fg_videoram;
- required_shared_ptr<uint16_t> m_spriteram;
+ required_shared_ptr<u16> m_bg_videoram;
+ required_shared_ptr<u16> m_fg_videoram;
+ required_shared_ptr<u16> m_spriteram;
/* video-related */
tilemap_t *m_bg_layer;
tilemap_t *m_fg_layer;
- int m_silvmil_tilebank[4];
- int m_whichbank;
-
- DECLARE_WRITE16_MEMBER(silvmil_tilebank_w)
- {
- m_silvmil_tilebank[m_whichbank] = (data>>8) & 0x1f;
-
- // printf("%08x tilebank_w %04x (which = %04x)\n",pc, data, m_whichbank);
- m_fg_layer->mark_all_dirty();
- m_bg_layer->mark_all_dirty();
- }
-
- DECLARE_WRITE16_MEMBER(silvmil_tilebank1_w)
- {
- m_whichbank = (data>>8)&0x3;
- }
-
- DECLARE_WRITE16_MEMBER(silvmil_fg_scrolly_w)
- {
- m_fg_layer->set_scrolly(0, data + 8);
- }
-
- DECLARE_WRITE16_MEMBER(silvmil_bg_scrolly_w)
- {
- m_bg_layer->set_scrolly(0, data + 8);
- }
-
- DECLARE_WRITE16_MEMBER(silvmil_fg_scrollx_w)
- {
- m_fg_layer->set_scrollx(0, data);
- }
-
- DECLARE_WRITE16_MEMBER(silvmil_bg_scrollx_w)
- {
- m_bg_layer->set_scrollx(0, data + 4);
- }
-
-
- DECLARE_WRITE16_MEMBER(silvmil_fg_videoram_w)
- {
- COMBINE_DATA(&m_fg_videoram[offset]);
- m_fg_layer->mark_tile_dirty(offset);
- }
-
- DECLARE_WRITE16_MEMBER(silvmil_bg_videoram_w)
- {
- COMBINE_DATA(&m_bg_videoram[offset]);
- m_bg_layer->mark_tile_dirty(offset);
- }
-
- DECLARE_WRITE16_MEMBER(silvmil_soundcmd_w)
- {
- if (ACCESSING_BITS_0_7)
- {
- m_soundlatch->write(space, 0, data & 0xff);
- machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(20));
-
- }
- }
+ int m_tilebank[4];
+ int m_whichbank;
+
+ void tilebank_w(u16 data);
+ void tilebank1_w(u16 data);
+ void fg_scrolly_w(u16 data);
+ void bg_scrolly_w(u16 data);
+ void fg_scrollx_w(u16 data);
+ void bg_scrollx_w(u16 data);
+ void fg_videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void bg_videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void soundcmd_w(u8 data);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
- TILEMAP_MAPPER_MEMBER(deco16_scan_rows);
+ TILEMAP_MAPPER_MEMBER(scan_rows);
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
- uint32_t screen_update_silvmil(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- void tumblepb_gfx1_rearrange();
+ u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- void silvmil_map(address_map &map);
- void silvmil_sound_map(address_map &map);
+ void mem_map(address_map &map);
+ void sound_map(address_map &map);
};
+void silvmil_state::tilebank_w(u16 data)
+{
+ m_tilebank[m_whichbank] = (data >> 8) & 0x1f;
+
+// printf("%08x tilebank_w %04x (which = %04x)\n",pc, data, m_whichbank);
+ m_fg_layer->mark_all_dirty();
+ m_bg_layer->mark_all_dirty();
+}
+
+void silvmil_state::tilebank1_w(u16 data)
+{
+ m_whichbank = (data >> 8) & 0x3;
+}
+
+void silvmil_state::fg_scrolly_w(u16 data)
+{
+ m_fg_layer->set_scrolly(0, data + 8);
+}
+
+void silvmil_state::bg_scrolly_w(u16 data)
+{
+ m_bg_layer->set_scrolly(0, data + 8);
+}
+
+void silvmil_state::fg_scrollx_w(u16 data)
+{
+ m_fg_layer->set_scrollx(0, data);
+}
+
+void silvmil_state::bg_scrollx_w(u16 data)
+{
+ m_bg_layer->set_scrollx(0, data + 4);
+}
+
+void silvmil_state::fg_videoram_w(offs_t offset, u16 data, u16 mem_mask)
+{
+ COMBINE_DATA(&m_fg_videoram[offset]);
+ m_fg_layer->mark_tile_dirty(offset);
+}
+
+void silvmil_state::bg_videoram_w(offs_t offset, u16 data, u16 mem_mask)
+{
+ COMBINE_DATA(&m_bg_videoram[offset]);
+ m_bg_layer->mark_tile_dirty(offset);
+}
TILE_GET_INFO_MEMBER(silvmil_state::get_bg_tile_info)
{
int data = m_bg_videoram[tile_index];
int tile = data & 0x3ff;
int color = (data >> 12) & 0x0f;
- int bank = m_silvmil_tilebank[(data&0xc00)>>10]*0x400;
+ int bank = m_tilebank[(data & 0xc00) >> 10] * 0x400;
SET_TILE_INFO_MEMBER(1, tile + bank, color + 0x20, 0);
}
@@ -160,12 +155,12 @@ TILE_GET_INFO_MEMBER(silvmil_state::get_fg_tile_info)
int data = m_fg_videoram[tile_index];
int tile = data & 0x3ff;
int color = (data >> 12) & 0x0f;
- int bank = m_silvmil_tilebank[(data&0xc00)>>10]*0x400;
+ int bank = m_tilebank[(data & 0xc00) >> 10] * 0x400;
SET_TILE_INFO_MEMBER(1, tile + bank, color + 0x10, 0);
}
-TILEMAP_MAPPER_MEMBER(silvmil_state::deco16_scan_rows)
+TILEMAP_MAPPER_MEMBER(silvmil_state::scan_rows)
{
/* logical (col,row) -> memory offset */
return (col & 0x1f) + ((row & 0x1f) << 5) + ((col & 0x20) << 5) + ((row & 0x20) << 6);
@@ -173,13 +168,13 @@ TILEMAP_MAPPER_MEMBER(silvmil_state::deco16_scan_rows)
void silvmil_state::video_start()
{
- m_bg_layer = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(silvmil_state::get_bg_tile_info),this), tilemap_mapper_delegate(FUNC(silvmil_state::deco16_scan_rows),this), 16, 16, 64, 32);
- m_fg_layer = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(silvmil_state::get_fg_tile_info),this), tilemap_mapper_delegate(FUNC(silvmil_state::deco16_scan_rows),this), 16, 16, 64, 32);
+ m_bg_layer = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(silvmil_state::get_bg_tile_info),this), tilemap_mapper_delegate(FUNC(silvmil_state::scan_rows),this), 16, 16, 64, 32);
+ m_fg_layer = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(silvmil_state::get_fg_tile_info),this), tilemap_mapper_delegate(FUNC(silvmil_state::scan_rows),this), 16, 16, 64, 32);
m_fg_layer->set_transparent_pen(0);
}
-uint32_t silvmil_state::screen_update_silvmil(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+u32 silvmil_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_bg_layer->draw(screen, bitmap, cliprect, 0, 0);
m_fg_layer->draw(screen, bitmap, cliprect, 0, 0);
@@ -188,22 +183,28 @@ uint32_t silvmil_state::screen_update_silvmil(screen_device &screen, bitmap_ind1
}
-void silvmil_state::silvmil_map(address_map &map)
+void silvmil_state::soundcmd_w(u8 data)
+{
+ m_soundlatch->write(data & 0xff);
+ machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(20));
+}
+
+void silvmil_state::mem_map(address_map &map)
{
map(0x000000, 0x0fffff).rom();
- map(0x100000, 0x100001).w(FUNC(silvmil_state::silvmil_tilebank1_w));
- map(0x100002, 0x100003).w(FUNC(silvmil_state::silvmil_fg_scrollx_w));
- map(0x100004, 0x100005).w(FUNC(silvmil_state::silvmil_fg_scrolly_w));
- map(0x100006, 0x100007).w(FUNC(silvmil_state::silvmil_bg_scrollx_w));
- map(0x100008, 0x100009).w(FUNC(silvmil_state::silvmil_bg_scrolly_w));
- map(0x10000e, 0x10000f).w(FUNC(silvmil_state::silvmil_tilebank_w));
+ map(0x100000, 0x100001).w(FUNC(silvmil_state::tilebank1_w));
+ map(0x100002, 0x100003).w(FUNC(silvmil_state::fg_scrollx_w));
+ map(0x100004, 0x100005).w(FUNC(silvmil_state::fg_scrolly_w));
+ map(0x100006, 0x100007).w(FUNC(silvmil_state::bg_scrollx_w));
+ map(0x100008, 0x100009).w(FUNC(silvmil_state::bg_scrolly_w));
+ map(0x10000e, 0x10000f).w(FUNC(silvmil_state::tilebank_w));
- map(0x120000, 0x120fff).ram().w(FUNC(silvmil_state::silvmil_fg_videoram_w)).share("fg_videoram");
- map(0x122000, 0x122fff).ram().w(FUNC(silvmil_state::silvmil_bg_videoram_w)).share("bg_videoram");
+ map(0x120000, 0x120fff).ram().w(FUNC(silvmil_state::fg_videoram_w)).share("fg_videoram");
+ map(0x122000, 0x122fff).ram().w(FUNC(silvmil_state::bg_videoram_w)).share("bg_videoram");
map(0x200000, 0x2005ff).ram().w("palette", FUNC(palette_device::write16)).share("palette");
map(0x210000, 0x2107ff).ram().share("spriteram");
- map(0x270000, 0x270001).w(FUNC(silvmil_state::silvmil_soundcmd_w));
+ map(0x270001, 0x270001).w(FUNC(silvmil_state::soundcmd_w));
map(0x280000, 0x280001).portr("P1_P2");
map(0x280002, 0x280003).portr("COIN");
map(0x280004, 0x280005).portr("DSW");
@@ -366,44 +367,53 @@ static const gfx_layout tlayout =
RGN_FRAC(1,2),
4,
{ RGN_FRAC(1,2)+8, RGN_FRAC(1,2)+0, 8, 0 },
- { 32*8+0, 32*8+1, 32*8+2, 32*8+3, 32*8+4, 32*8+5, 32*8+6, 32*8+7,
- 0, 1, 2, 3, 4, 5, 6, 7 },
- { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
- 8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 },
+ { STEP8(8*2*16,1), STEP8(0,1) },
+ { STEP16(0,8*2) },
+ 64*8
+};
+
+static const gfx_layout tlayout_alt =
+{
+ 16,16,
+ RGN_FRAC(1,2),
+ 4,
+ { 8, 0, RGN_FRAC(1,2)+8, RGN_FRAC(1,2)+0 },
+ { STEP8(0,1), STEP8(8*2*16,1) },
+ { STEP16(0,8*2) },
64*8
};
static GFXDECODE_START( gfx_silvmil )
- GFXDECODE_ENTRY( "gfx2", 0, tlayout, 0, 64 ) /* Tiles 16x16 */
- GFXDECODE_ENTRY( "gfx1", 0, tlayout, 0, 64 ) /* Sprites 16x16 */
+ GFXDECODE_ENTRY( "gfx2", 0, tlayout, 0, 64 ) /* Sprites 16x16 */
+ GFXDECODE_ENTRY( "gfx1", 0, tlayout_alt, 0, 64 ) /* Tiles 16x16 */
GFXDECODE_END
void silvmil_state::machine_start()
{
- save_item(NAME(m_silvmil_tilebank));
+ save_item(NAME(m_tilebank));
save_item(NAME(m_whichbank));
}
void silvmil_state::machine_reset()
{
- m_silvmil_tilebank[0] = 0;
- m_silvmil_tilebank[1] = 0;
- m_silvmil_tilebank[2] = 0;
- m_silvmil_tilebank[3] = 0;
+ m_tilebank[0] = 0;
+ m_tilebank[1] = 0;
+ m_tilebank[2] = 0;
+ m_tilebank[3] = 0;
m_whichbank = 0;
}
-void silvmil_state::silvmil_sound_map(address_map &map)
+void silvmil_state::sound_map(address_map &map)
{
map(0x0000, 0xbfff).rom();
- map(0xd000, 0xd7ff).ram();
map(0xc000, 0xc001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
map(0xc002, 0xc002).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)).mirror(1);
map(0xc006, 0xc006).r(m_soundlatch, FUNC(generic_latch_8_device::read));
map(0xc00f, 0xc00f).nopw(); // ??
+ map(0xd000, 0xd7ff).ram();
}
@@ -411,12 +421,11 @@ void silvmil_state::silvmil(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(12'000'000)); /* Verified */
- m_maincpu->set_addrmap(AS_PROGRAM, &silvmil_state::silvmil_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &silvmil_state::mem_map);
m_maincpu->set_vblank_int("screen", FUNC(silvmil_state::irq6_line_hold));
z80_device &audiocpu(Z80(config, "audiocpu", XTAL(4'096'000))); /* Verified */
- audiocpu.set_addrmap(AS_PROGRAM, &silvmil_state::silvmil_sound_map);
-
+ audiocpu.set_addrmap(AS_PROGRAM, &silvmil_state::sound_map);
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
@@ -424,7 +433,7 @@ void silvmil_state::silvmil(machine_config &config)
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
screen.set_size(64*8, 64*8);
screen.set_visarea(0, 40*8-1, 0, 30*8-1);
- screen.set_screen_update(FUNC(silvmil_state::screen_update_silvmil));
+ screen.set_screen_update(FUNC(silvmil_state::screen_update));
screen.set_palette("palette");
PALETTE(config, "palette").set_format(palette_device::xRGB_555, 0x300);
@@ -572,32 +581,7 @@ ROM_START( puzzlovek )
ROM_LOAD16_BYTE( "8.u56", 0x100001, 0x80000, CRC(95b5f049) SHA1(1104dac1fbf6a894b7d8294b3f44a0edbf363157) ) // sldh
ROM_END
-void silvmil_state::tumblepb_gfx1_rearrange()
-{
- uint8_t *rom = memregion("gfx1")->base();
- int len = memregion("gfx1")->bytes();
- int i;
-
- /* gfx data is in the wrong order */
- for (i = 0; i < len; i++)
- {
- if ((i & 0x20) == 0)
- {
- int t = rom[i]; rom[i] = rom[i + 0x20]; rom[i + 0x20] = t;
- }
- }
- /* low/high half are also swapped */
- for (i = 0; i < len / 2; i++)
- {
- int t = rom[i]; rom[i] = rom[i + len / 2]; rom[i + len / 2] = t;
- }
-}
-
-void silvmil_state::init_silvmil()
-{
- tumblepb_gfx1_rearrange();
-}
-GAME( 1995, silvmil, 0, silvmil, silvmil, silvmil_state, init_silvmil, ROT270, "Para", "Silver Millennium", MACHINE_SUPPORTS_SAVE )
-GAME( 1994, puzzlove, 0, puzzlove, puzzlove, silvmil_state, init_silvmil, ROT0, "Para", "PuzzLove", MACHINE_SUPPORTS_SAVE )
-GAME( 1994, puzzlovek, puzzlove, puzzlovek, puzzlovek, silvmil_state, init_silvmil, ROT0, "Para", "PuzzLove (Korea)", MACHINE_SUPPORTS_SAVE )
+GAME( 1995, silvmil, 0, silvmil, silvmil, silvmil_state, empty_init, ROT270, "Para", "Silver Millennium", MACHINE_SUPPORTS_SAVE )
+GAME( 1994, puzzlove, 0, puzzlove, puzzlove, silvmil_state, empty_init, ROT0, "Para", "PuzzLove", MACHINE_SUPPORTS_SAVE )
+GAME( 1994, puzzlovek, puzzlove, puzzlovek, puzzlovek, silvmil_state, empty_init, ROT0, "Para", "PuzzLove (Korea)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/simpl156.cpp b/src/mame/drivers/simpl156.cpp
index a203d88f76d..afd62eb23c9 100644
--- a/src/mame/drivers/simpl156.cpp
+++ b/src/mame/drivers/simpl156.cpp
@@ -426,7 +426,6 @@ void simpl156_state::chainrec(machine_config &config)
GFXDECODE(config, "gfxdecode", m_palette, gfx_simpl156);
DECO16IC(config, m_deco_tilegen, 0);
- m_deco_tilegen->set_split(0);
m_deco_tilegen->set_pf1_size(DECO_64x32);
m_deco_tilegen->set_pf2_size(DECO_64x32);
m_deco_tilegen->set_pf1_trans_mask(0x0f);
diff --git a/src/mame/drivers/skyfox.cpp b/src/mame/drivers/skyfox.cpp
index 52124948780..93d8938768b 100644
--- a/src/mame/drivers/skyfox.cpp
+++ b/src/mame/drivers/skyfox.cpp
@@ -42,7 +42,7 @@ WRITE8_MEMBER(skyfox_state::skyfox_vregs_w)
break;
case 1:
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
break;
default:
diff --git a/src/mame/drivers/sliver.cpp b/src/mame/drivers/sliver.cpp
index 6b40485c904..97a02dc5dc6 100644
--- a/src/mame/drivers/sliver.cpp
+++ b/src/mame/drivers/sliver.cpp
@@ -351,7 +351,7 @@ WRITE16_MEMBER(sliver_state::io_data_w)
WRITE16_MEMBER(sliver_state::sound_w)
{
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
m_audiocpu->set_input_line(MCS51_INT0_LINE, HOLD_LINE);
}
diff --git a/src/mame/drivers/snk.cpp b/src/mame/drivers/snk.cpp
index 20d356abcb0..85309fbb9fd 100644
--- a/src/mame/drivers/snk.cpp
+++ b/src/mame/drivers/snk.cpp
@@ -363,14 +363,14 @@ TIMER_CALLBACK_MEMBER(snk_state::sgladiat_sndirq_update_callback)
WRITE8_MEMBER(snk_state::sgladiat_soundlatch_w)
{
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sgladiat_sndirq_update_callback),this), CMDIRQ_BUSY_ASSERT);
}
READ8_MEMBER(snk_state::sgladiat_soundlatch_r)
{
machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sgladiat_sndirq_update_callback),this), BUSY_CLEAR);
- return m_soundlatch->read(space,0);
+ return m_soundlatch->read();
}
READ8_MEMBER(snk_state::sgladiat_sound_nmi_ack_r)
@@ -461,7 +461,7 @@ WRITE_LINE_MEMBER(snk_state::ymirq_callback_2)
WRITE8_MEMBER(snk_state::snk_soundlatch_w)
{
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sndirq_update_callback),this), CMDIRQ_BUSY_ASSERT);
}
@@ -507,7 +507,7 @@ READ8_MEMBER(snk_state::tnk3_ymirq_ack_r)
READ8_MEMBER(snk_state::tnk3_busy_clear_r)
{
// it's uncertain whether the latch should be cleared here or when it's read
- m_soundlatch->clear_w(space, 0, 0);
+ m_soundlatch->clear_w();
machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sndirq_update_callback),this), BUSY_CLEAR);
return 0xff;
}
diff --git a/src/mame/drivers/snk68.cpp b/src/mame/drivers/snk68.cpp
index 0f7c8e1e3ff..29303aae434 100644
--- a/src/mame/drivers/snk68.cpp
+++ b/src/mame/drivers/snk68.cpp
@@ -99,7 +99,7 @@ WRITE16_MEMBER(snk68_state::protection_w)
WRITE8_MEMBER(snk68_state::sound_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_soundcpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); // caused by 74123
}
diff --git a/src/mame/drivers/solomon.cpp b/src/mame/drivers/solomon.cpp
index 39cdefa9b9d..55ce2429728 100644
--- a/src/mame/drivers/solomon.cpp
+++ b/src/mame/drivers/solomon.cpp
@@ -19,7 +19,7 @@ driver by Mirko Buffoni
WRITE8_MEMBER(solomon_state::solomon_sh_command_w)
{
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
diff --git a/src/mame/drivers/spec128.cpp b/src/mame/drivers/spec128.cpp
index 5e15f436fb1..b005bb8fae9 100644
--- a/src/mame/drivers/spec128.cpp
+++ b/src/mame/drivers/spec128.cpp
@@ -165,9 +165,18 @@ resulting mess can be seen in the F4 viewer display.
/****************************************************************************************************/
/* Spectrum 128 specific functions */
+READ8_MEMBER(spectrum_state::spectrum_128_opcode_fetch_r)
+{
+ /* this allows expansion devices to act upon opcode fetches from MEM addresses */
+ if (BIT(m_port_7ffd_data, 4))
+ m_exp->opcode_fetch(offset);
+
+ return m_maincpu->space(AS_PROGRAM).read_byte(offset);
+}
+
WRITE8_MEMBER( spectrum_state::spectrum_128_bank1_w )
{
- if (m_exp->romcs())
+ if (m_exp->romcs() && BIT(m_port_7ffd_data, 4))
m_exp->mreq_w(offset, data);
}
@@ -175,7 +184,7 @@ READ8_MEMBER( spectrum_state::spectrum_128_bank1_r )
{
uint8_t data;
- if (m_exp->romcs())
+ if (m_exp->romcs() && BIT(m_port_7ffd_data, 4))
{
data = m_exp->mreq_r(offset);
}
@@ -251,6 +260,11 @@ void spectrum_state::spectrum_128_mem(address_map &map)
map(0xc000, 0xffff).bankrw("bank4");
}
+void spectrum_state::spectrum_128_fetch(address_map &map)
+{
+ map(0x0000, 0xffff).r(FUNC(spectrum_state::spectrum_128_opcode_fetch_r));
+}
+
MACHINE_RESET_MEMBER(spectrum_state,spectrum_128)
{
uint8_t *messram = m_ram->pointer();
@@ -298,7 +312,7 @@ void spectrum_state::spectrum_128(machine_config &config)
Z80(config.replace(), m_maincpu, X1_128_SINCLAIR / 5);
m_maincpu->set_addrmap(AS_PROGRAM, &spectrum_state::spectrum_128_mem);
m_maincpu->set_addrmap(AS_IO, &spectrum_state::spectrum_128_io);
- m_maincpu->set_addrmap(AS_OPCODES, &spectrum_state::spectrum_fetch);
+ m_maincpu->set_addrmap(AS_OPCODES, &spectrum_state::spectrum_128_fetch);
m_maincpu->set_vblank_int("screen", FUNC(spectrum_state::spec_interrupt));
config.m_minimum_quantum = attotime::from_hz(60);
diff --git a/src/mame/drivers/spectrum.cpp b/src/mame/drivers/spectrum.cpp
index bbb41ad9c56..26d8263160f 100644
--- a/src/mame/drivers/spectrum.cpp
+++ b/src/mame/drivers/spectrum.cpp
@@ -424,7 +424,7 @@ READ8_MEMBER(spectrum_state::spectrum_port_fe_r)
/* Issue 2 Spectrums default to having bits 5, 6 & 7 set.
Issue 3 Spectrums default to having bits 5 & 7 set and bit 6 reset. */
- if (m_io_config->read() & 0x80)
+ if ((m_io_config->read() & 0x80) == 0)
data ^= (0x40);
return data;
@@ -443,8 +443,8 @@ void spectrum_state::spectrum_mem(address_map &map)
{
map(0x0000, 0x3fff).rw(FUNC(spectrum_state::spectrum_rom_r), FUNC(spectrum_state::spectrum_rom_w));
map(0x4000, 0x5aff).ram().share("video_ram");
- // AM_RANGE(0x5b00, 0x7fff) AM_RAM
- // AM_RANGE(0x8000, 0xffff) AM_RAM
+ //map(0x5b00, 0x7fff).ram();
+ //map(0x8000, 0xffff).ram();
}
void spectrum_state::spectrum_fetch(address_map &map)
diff --git a/src/mame/drivers/speedspn.cpp b/src/mame/drivers/speedspn.cpp
index 9b77b916489..2310135280a 100644
--- a/src/mame/drivers/speedspn.cpp
+++ b/src/mame/drivers/speedspn.cpp
@@ -80,7 +80,7 @@ WRITE8_MEMBER(speedspn_state::rombank_w)
WRITE8_MEMBER(speedspn_state::sound_w)
{
- m_soundlatch->write(space, 1, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
diff --git a/src/mame/drivers/spg110.cpp b/src/mame/drivers/spg110.cpp
index e75bbe4faaa..27bfebe6475 100644
--- a/src/mame/drivers/spg110.cpp
+++ b/src/mame/drivers/spg110.cpp
@@ -9,7 +9,7 @@
"SunPlus PA7801" ( known as Sunplus SPG110? )
Classic Arcade Pinball
EA Sports (NHL95 + Madden 95)
- Spiderman 5-in-1 (original release)
+ Spiderman 5-in-1 (original release)
*******************************************************************************/
@@ -32,6 +32,8 @@ public:
void spg110_base(machine_config &config);
+ DECLARE_CUSTOM_INPUT_MEMBER(plunger_r);
+
protected:
required_device<unsp_device> m_maincpu;
@@ -47,14 +49,291 @@ protected:
void spg110_game_state::mem_map(address_map &map)
{
- map(0x004000, 0x0fffff).rom().region("maincpu", 0x8000);
+ map(0x004000, 0x3fffff).rom().region("maincpu", 0x8000);
map(0x000000, 0x003fff).m(m_spg, FUNC(spg110_device::map));
}
-static INPUT_PORTS_START( spg110 )
+static INPUT_PORTS_START( jak_capb )
+ PORT_START("PA")
+ PORT_DIPNAME( 0x0001, 0x0000, "PA" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0001, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( On ) )
+ PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Menu")
+ PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Left Flipper") // there are 2 physical buttons connected to this
+ PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Nudge")// nudge (motion control)
+ PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Right Flipper") // there are 2 physical buttons connected to this
+ PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x1000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x2000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x4000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( On ) )
+
+ PORT_START("PB")
+ PORT_DIPNAME( 0x0001, 0x0000, "PB" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0001, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0400, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0400, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0800, DEF_STR( On ) )
+ PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x1000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x2000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x4000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( On ) )
+
+ PORT_START("PC")
+ PORT_DIPNAME( 0x0001, 0x0000, "PC" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0001, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0400, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0400, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0800, DEF_STR( On ) )
+ PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x1000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x2000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x4000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( On ) )
+
+ PORT_START("JOYX")
+ PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("JOYY")
+ PORT_BIT( 0x03ff, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(DEVICE_SELF, spg110_game_state, plunger_r, nullptr)
+
+ PORT_START("JOYY_REAL")
+ PORT_BIT(0x00ff, 0x0000, IPT_PEDAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(100) PORT_MINMAX(0x00,0x00ff) PORT_NAME("Plunger") PORT_CENTERDELTA(255)
INPUT_PORTS_END
+CUSTOM_INPUT_MEMBER(spg110_game_state::plunger_r)
+{
+ // this is only needed because our PORT_CENTERDELTA doesn't work if set > 255 (and is limited in the menu to that) such a value that doesn't center quickly enough for the plunger to be effective
+ return ioport("JOYY_REAL")->read()<<2;
+}
+
+
+static INPUT_PORTS_START( jak_spdmo )
+ PORT_START("PA")
+ PORT_BIT( 0x001f, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Menu / Pause")
+ PORT_BIT( 0x00c0, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON4 )
+ PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON3 )
+ PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_BUTTON2 )
+ PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_BUTTON1 )
+ PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) PORT_NAME("Joypad Right")
+ PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) PORT_NAME("Joypad Left")
+ PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) PORT_NAME("Joypad Down")
+ PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1) PORT_NAME("Joypad Up")
+
+ PORT_START("PB")
+ PORT_DIPNAME( 0x0001, 0x0000, "PB" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0001, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0400, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0400, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0800, DEF_STR( On ) )
+ PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x1000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x2000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x4000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( On ) )
+
+ PORT_START("PC")
+ PORT_DIPNAME( 0x0001, 0x0000, "PC" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0001, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0400, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0400, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0800, DEF_STR( On ) )
+ PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x1000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x2000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x4000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( On ) )
+
+ PORT_START("JOYX")
+
+ PORT_START("JOYY")
+
+INPUT_PORTS_END
+
void spg110_game_state::spg110_base(machine_config &config)
{
UNSP(config, m_maincpu, XTAL(27'000'000));
@@ -72,11 +351,16 @@ void spg110_game_state::spg110_base(machine_config &config)
// m_spg->add_route(ALL_OUTPUTS, "lspeaker", 0.5);
// m_spg->add_route(ALL_OUTPUTS, "rspeaker", 0.5);
- SPG110(config, m_spg, XTAL(27'000'000), "maincpu");
+ SPG110(config, m_spg, XTAL(27'000'000), m_maincpu, m_screen);
+ m_spg->porta_in().set_ioport("PA");
+ m_spg->portb_in().set_ioport("PB");
+ m_spg->portc_in().set_ioport("PC");
+ m_spg->adc_in<0>().set_ioport("JOYX");
+ m_spg->adc_in<1>().set_ioport("JOYY");
}
ROM_START( jak_capb )
- ROM_REGION( 0x200000, "maincpu", ROMREGION_ERASE00 )
+ ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "classicarcadepinball.bin", 0x000000, 0x200000, CRC(b643dab0) SHA1(f57d546758ba442e28b5f0f48b3819b2fc2eb7f7) )
ROM_END
@@ -87,5 +371,5 @@ ROM_START( jak_spdmo )
ROM_END
// JAKKS Pacific Inc TV games
-CONS( 2004, jak_capb, 0, 0, spg110_base, spg110, spg110_game_state, empty_init, "JAKKS Pacific Inc / HotGen Ltd", "Classic Arcade Pinball (JAKKS Pacific TV Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
-CONS( 2004, jak_spdmo, jak_spdm, 0, spg110_base, spg110, spg110_game_state, empty_init, "JAKKS Pacific Inc / Digital Eclipse", "Spider-Man (JAKKS Pacific TV Game) (older hardare)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // this is the smaller more 'square' style joystick that was originally released before the GameKey slot was added.
+CONS( 2004, jak_capb, 0, 0, spg110_base, jak_capb, spg110_game_state, empty_init, "JAKKS Pacific Inc / HotGen Ltd", "Classic Arcade Pinball (JAKKS Pacific TV Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+CONS( 2004, jak_spdmo, jak_spdm, 0, spg110_base, jak_spdmo, spg110_game_state, empty_init, "JAKKS Pacific Inc / Digital Eclipse", "Spider-Man (JAKKS Pacific TV Game) (older hardare)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // this is the smaller more 'square' style joystick that was originally released before the GameKey slot was added.
diff --git a/src/mame/drivers/spinb.cpp b/src/mame/drivers/spinb.cpp
index 022c4f13c90..26bf27e48fa 100644
--- a/src/mame/drivers/spinb.cpp
+++ b/src/mame/drivers/spinb.cpp
@@ -461,17 +461,17 @@ WRITE8_MEMBER( spinb_state::sndbank_m_w )
void spinb_state::update_sound_a()
{
if (m_sndbank_a != 0xff)
- m_ic14a->write_ba(m_p_audio[m_sound_addr_a]);
+ m_ic14a->ba_w(m_p_audio[m_sound_addr_a]);
else
- m_ic14a->write_ba(0);
+ m_ic14a->ba_w(0);
}
void spinb_state::update_sound_m()
{
if (m_sndbank_m != 0xff)
- m_ic14m->write_ba(m_p_music[m_sound_addr_m]);
+ m_ic14m->ba_w(m_p_music[m_sound_addr_m]);
else
- m_ic14m->write_ba(0);
+ m_ic14m->ba_w(0);
}
WRITE_LINE_MEMBER( spinb_state::ic5a_w )
diff --git a/src/mame/drivers/spy.cpp b/src/mame/drivers/spy.cpp
index 434b002b8ff..d3120763e23 100644
--- a/src/mame/drivers/spy.cpp
+++ b/src/mame/drivers/spy.cpp
@@ -64,7 +64,7 @@ WRITE8_MEMBER(spy_state::spy_bankedram1_w)
{
if (m_rambank & 1)
{
- m_palette->write8(space,offset,data);
+ m_palette->write8(offset,data);
}
else if (m_rambank & 2)
{
diff --git a/src/mame/drivers/srmp6.cpp b/src/mame/drivers/srmp6.cpp
index 2643a5ee1b6..587883e1d4a 100644
--- a/src/mame/drivers/srmp6.cpp
+++ b/src/mame/drivers/srmp6.cpp
@@ -525,7 +525,7 @@ WRITE16_MEMBER(srmp6_state::paletteram_w)
{
int brg = m_brightness & 0x7f;
- m_palette->write16(space, offset, data, mem_mask);
+ m_palette->write16(offset, data, mem_mask);
if (brg & 0x40)
{
diff --git a/src/mame/drivers/sshangha.cpp b/src/mame/drivers/sshangha.cpp
index 1200d740f49..f69005d99a4 100644
--- a/src/mame/drivers/sshangha.cpp
+++ b/src/mame/drivers/sshangha.cpp
@@ -184,7 +184,7 @@ WRITE16_MEMBER(sshangha_state::palette_w)
case 0x600: offset = (offset & 0x1ff) | 0x400; break;
}
- m_palette->write16(space, offset, data, mem_mask);
+ m_palette->write16(offset, data, mem_mask);
}
READ16_MEMBER(sshangha_state::palette_r)
@@ -196,7 +196,7 @@ READ16_MEMBER(sshangha_state::palette_r)
case 0x400: offset = (offset & 0x1ff) | 0x000; break;
case 0x600: offset = (offset & 0x1ff) | 0x400; break;
}
- return m_palette->read16(space, offset, mem_mask);
+ return m_palette->read16(offset);
}
void sshangha_state::sshangha_map(address_map &map)
@@ -434,7 +434,6 @@ void sshangha_state::sshangha(machine_config &config)
PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 0x4000);
DECO16IC(config, m_tilegen, 0);
- m_tilegen->set_split(0);
m_tilegen->set_pf1_size(DECO_64x32);
m_tilegen->set_pf2_size(DECO_64x32);
m_tilegen->set_pf1_trans_mask(0x0f);
diff --git a/src/mame/drivers/sslam.cpp b/src/mame/drivers/sslam.cpp
index 634bfc7eb90..6cb9436f92d 100644
--- a/src/mame/drivers/sslam.cpp
+++ b/src/mame/drivers/sslam.cpp
@@ -366,7 +366,7 @@ WRITE8_MEMBER(sslam_state::sslam_snd_w)
WRITE16_MEMBER(powerbls_state::powerbls_sound_w)
{
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
m_audiocpu->set_input_line(MCS51_INT1_LINE, HOLD_LINE);
}
@@ -426,12 +426,10 @@ READ8_MEMBER(sslam_state::playmark_snd_command_r)
{
uint8_t data = 0;
- if ((m_oki_control & 0x38) == 0x30) {
- data = m_soundlatch->read(space,0);
- }
- else if ((m_oki_control & 0x38) == 0x28) {
+ if ((m_oki_control & 0x38) == 0x30)
+ data = m_soundlatch->read();
+ else if ((m_oki_control & 0x38) == 0x28)
data = (m_oki->read() & 0x0f);
- }
return data;
}
diff --git a/src/mame/drivers/statriv2.cpp b/src/mame/drivers/statriv2.cpp
index f798427b117..00a9eac52f7 100644
--- a/src/mame/drivers/statriv2.cpp
+++ b/src/mame/drivers/statriv2.cpp
@@ -65,8 +65,7 @@ PROM use is unknown
Issues:
* statusbj - very glitchy, bad video, seems to spin
* hangman - keys are weird, spinner is busted
- *
-quaquiz2 - no inputs, needs NVRAM
+ * quaquiz2 - no inputs, needs NVRAM
*/
@@ -95,7 +94,9 @@ public:
{ }
void statriv2(machine_config &config);
+ void statusbj(machine_config &config);
void funcsino(machine_config &config);
+ void tripdraw(machine_config &config);
void statriv2v(machine_config &config);
void init_addr_xlh();
@@ -112,7 +113,7 @@ private:
required_device<tms9927_device> m_tms;
required_shared_ptr<uint8_t> m_videoram;
tilemap_t *m_tilemap;
- required_shared_ptr<uint8_t> m_question_offset;
+ optional_shared_ptr<uint8_t> m_question_offset;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
uint8_t m_question_offset_low;
@@ -129,12 +130,15 @@ private:
TILE_GET_INFO_MEMBER(vertical_tile_info);
virtual void video_start() override;
void statriv2_palette(palette_device &palette) const;
+ void check_coin_status();
DECLARE_VIDEO_START(vertical);
uint32_t screen_update_statriv2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(statriv2_interrupt);
+ INTERRUPT_GEN_MEMBER(tripdraw_interrupt);
- void statriv2_io_map(address_map &map);
void statriv2_map(address_map &map);
+ void statusbj_io_map(address_map &map);
+ void statriv2_io_map(address_map &map);
};
@@ -229,19 +233,30 @@ uint32_t statriv2_state::screen_update_statriv2(screen_device &screen, bitmap_in
*
*************************************/
-INTERRUPT_GEN_MEMBER(statriv2_state::statriv2_interrupt)
+void statriv2_state::check_coin_status()
{
uint8_t new_coin = ioport("COIN")->read();
/* check the coin inputs once per frame */
m_latched_coin |= new_coin & (new_coin ^ m_last_coin);
m_last_coin = new_coin;
+}
+
+INTERRUPT_GEN_MEMBER(statriv2_state::statriv2_interrupt)
+{
+ check_coin_status();
device.execute().set_input_line(I8085_RST75_LINE, ASSERT_LINE);
device.execute().set_input_line(I8085_RST75_LINE, CLEAR_LINE);
}
+INTERRUPT_GEN_MEMBER(statriv2_state::tripdraw_interrupt)
+{
+ check_coin_status();
+ device.execute().set_input_line(I8085_RST55_LINE, ASSERT_LINE);
+ device.execute().set_input_line(I8085_RST55_LINE, CLEAR_LINE);
+}
/*************************************
*
@@ -255,7 +270,7 @@ READ8_MEMBER(statriv2_state::question_data_r)
uint32_t qromsize = memregion("questions")->bytes();
uint32_t address;
- if (m_question_offset_high == 0xff)
+ if (m_question_offset_high == 0xff && !machine().side_effects_disabled())
m_question_offset[m_question_offset_low]++;
address = m_question_offset[m_question_offset_low];
@@ -302,15 +317,20 @@ void statriv2_state::statriv2_map(address_map &map)
map(0xc800, 0xcfff).ram().w(FUNC(statriv2_state::statriv2_videoram_w)).share("videoram");
}
-void statriv2_state::statriv2_io_map(address_map &map)
+void statriv2_state::statusbj_io_map(address_map &map)
{
map(0x20, 0x23).rw("ppi8255", FUNC(i8255_device::read), FUNC(i8255_device::write));
- map(0x28, 0x2b).r(FUNC(statriv2_state::question_data_r)).writeonly().share("question_offset");
map(0xb0, 0xb1).w("aysnd", FUNC(ay8910_device::address_data_w));
map(0xb1, 0xb1).r("aysnd", FUNC(ay8910_device::data_r));
map(0xc0, 0xcf).rw(m_tms, FUNC(tms9927_device::read), FUNC(tms9927_device::write));
}
+void statriv2_state::statriv2_io_map(address_map &map)
+{
+ statusbj_io_map(map);
+ map(0x28, 0x2b).r(FUNC(statriv2_state::question_data_r)).writeonly().share("question_offset");
+}
+
/*************************************
*
@@ -387,6 +407,42 @@ static INPUT_PORTS_START( funcsino )
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
INPUT_PORTS_END
+static INPUT_PORTS_START( tripdraw )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_BET )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Draw") PORT_CODE(KEYCODE_3)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Discard 1 / Lo")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Discard 2")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Discard 3 / Double")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Discard 4")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Discard 5 / Hi")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Stand") PORT_CODE(KEYCODE_4)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(DEVICE_SELF, statriv2_state, latched_coin_r, "COIN")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_DIPNAME( 0x10, 0x10, "DIP switch? 10" )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, "DIP switch? 20" )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, "DIP switch? 40" )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, "DIP switch? 80" )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( On ) )
+
+ PORT_START("IN2")
+ PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START("COIN")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
+INPUT_PORTS_END
+
static INPUT_PORTS_START( bigcsino ) // flyer shows 8 buttons on the cabinet
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_BET ) PORT_NAME("Play")
@@ -642,6 +698,12 @@ void statriv2_state::statriv2(machine_config &config)
AY8910(config, "aysnd", MASTER_CLOCK/8).add_route(ALL_OUTPUTS, "mono", 1.0);
}
+void statriv2_state::statusbj(machine_config &config)
+{
+ statriv2(config);
+ m_maincpu->set_addrmap(AS_IO, &statriv2_state::statusbj_io_map); // no question data
+}
+
void statriv2_state::statriv2v(machine_config &config)
{
statriv2(config);
@@ -656,13 +718,20 @@ void statriv2_state::statriv2v(machine_config &config)
void statriv2_state::funcsino(machine_config &config)
{
- statriv2(config);
+ statusbj(config);
/* basic machine hardware */
m_maincpu->set_clock(MASTER_CLOCK/2); /* 3 MHz?? seems accurate */
}
+void statriv2_state::tripdraw(machine_config &config)
+{
+ statusbj(config);
+
+ /* basic machine hardware */
+ m_maincpu->set_vblank_int("screen", FUNC(statriv2_state::tripdraw_interrupt));
+}
/*************************************
@@ -1623,11 +1692,11 @@ void statriv2_state::init_laserdisc()
*
*************************************/
-GAME( 1981, statusbj, 0, statriv2, statusbj, statriv2_state, empty_init, ROT0, "Status Games", "Status Black Jack (V1.0c)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, statusbj, 0, statusbj, statusbj, statriv2_state, empty_init, ROT0, "Status Games", "Status Black Jack (V1.0c)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, funcsino, 0, funcsino, funcsino, statriv2_state, empty_init, ROT0, "Status Games", "Status Fun Casino (V1.3s)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, tripdraw, 0, statriv2, funcsino, statriv2_state, empty_init, ROT0, "Status Games", "Tripple Draw (V3.1 s)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
-GAME( 1984, bigcsino, 0, statriv2, bigcsino, statriv2_state, empty_init, ROT0, "Status Games", "Big Casino", MACHINE_SUPPORTS_SAVE )
-GAME( 1984, hangman, 0, statriv2, hangman, statriv2_state, init_addr_lmh, ROT0, "Status Games", "Hangman", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, tripdraw, 0, tripdraw, tripdraw, statriv2_state, empty_init, ROT0, "Status Games", "Tripple Draw (V3.1 s)", MACHINE_SUPPORTS_SAVE )
+GAME( 1984, bigcsino, 0, statusbj, bigcsino, statriv2_state, empty_init, ROT0, "Status Games", "Big Casino", MACHINE_SUPPORTS_SAVE )
+GAME( 1984, hangman, 0, statusbj, hangman, statriv2_state, init_addr_lmh, ROT0, "Status Games", "Hangman", MACHINE_SUPPORTS_SAVE )
GAME( 1984, trivquiz, 0, statriv2, statriv2, statriv2_state, init_addr_lhx, ROT0, "Status Games", "Triv Quiz", MACHINE_SUPPORTS_SAVE )
GAME( 1984, statriv2, 0, statriv2, statriv2, statriv2_state, init_addr_xlh, ROT0, "Status Games", "Triv Two", MACHINE_SUPPORTS_SAVE )
GAME( 1985, statriv2v, statriv2, statriv2v, statriv2, statriv2_state, init_addr_xlh, ROT90, "Status Games", "Triv Two (Vertical)", MACHINE_SUPPORTS_SAVE )
@@ -1641,23 +1710,23 @@ GAME( 1986, supertr2, 0, statriv2, supertr2, statriv2_state, init_addr
GAME( 1988, supertr3, 0, statriv2, supertr2, statriv2_state, init_addr_lmh, ROT0, "Status Games", "Super Triv III", MACHINE_SUPPORTS_SAVE )
GAME( 1988, nsupertr3, supertr3, statriv2, supertr2, statriv2_state, init_addr_lmh, ROT0, "Status Games", "New Super Triv III", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) // new questions don't appear correctly, coinage problems
// The following Casino Strip sets don't show the version on screen (at least without the laserdisc video). It was taken from the rom labels / from the Dragon's Lair Project archive.
-GAME( 1984, cs1_spp, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip I (Poker version, for Pioneer LD, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
-GAME( 1984, cs1_spp2, cs1_spp, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip I (Poker version, for Pioneer LD, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
-GAME( 1988, cs2_sps, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip II (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
-GAME( 1992, cs3_qps, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Quantum Industries", "Casino Strip III (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
-GAME( 1985, cs5_spp, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip V (Poker version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
-GAME( 1985, cs5_ssp, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip V (Shooting Game version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
-GAME( 1988, cs6_sps, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip VI (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
-GAME( 1985, cs6_ssp, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip VI (Shooting Game version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
-GAME( 1986, cs8_ssp, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip VIII (Shooting Game version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
-GAME( 1985, cs8_spp, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip VIII (Poker version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
-GAME( 1988, cs8_sps, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip VIII (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
-GAME( 1992, cs9_qps, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Quantum Industries", "Casino Strip IX (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
-GAME( 1985, cs9_spp, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip IX (Poker version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
-GAME( 1988, cs10_sps, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip X (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
-GAME( 1988, cs11_ssp, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip XI (Shooting Game version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
-GAME( 1988, cs11_sps, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip XI (Poker version, for Sony LD, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
-GAME( 1988, cs11_sps2, cs11_sps, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip XI (Poker version, for Sony LD, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
-GAME( 1988, cs12_sps, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip XII (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
-GAME( 1996, cspe_qps, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Quantum Industries", "Casino Strip Private Eyes / All Start (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
-GAME( 1993, csv1_qps, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Quantum Industries", "Casino Strip Vivid 1 (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+GAME( 1984, cs1_spp, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip I (Poker version, for Pioneer LD, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+GAME( 1984, cs1_spp2, cs1_spp, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip I (Poker version, for Pioneer LD, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+GAME( 1988, cs2_sps, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip II (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+GAME( 1992, cs3_qps, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Quantum Industries", "Casino Strip III (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+GAME( 1985, cs5_spp, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip V (Poker version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+GAME( 1985, cs5_ssp, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip V (Shooting Game version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+GAME( 1988, cs6_sps, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip VI (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+GAME( 1985, cs6_ssp, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip VI (Shooting Game version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+GAME( 1986, cs8_ssp, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip VIII (Shooting Game version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+GAME( 1985, cs8_spp, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip VIII (Poker version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+GAME( 1988, cs8_sps, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip VIII (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+GAME( 1992, cs9_qps, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Quantum Industries", "Casino Strip IX (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+GAME( 1985, cs9_spp, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip IX (Poker version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+GAME( 1988, cs10_sps, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip X (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+GAME( 1988, cs11_ssp, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip XI (Shooting Game version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+GAME( 1988, cs11_sps, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip XI (Poker version, for Sony LD, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+GAME( 1988, cs11_sps2, cs11_sps, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip XI (Poker version, for Sony LD, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+GAME( 1988, cs12_sps, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip XII (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+GAME( 1996, cspe_qps, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Quantum Industries", "Casino Strip Private Eyes / All Start (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+GAME( 1993, csv1_qps, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Quantum Industries", "Casino Strip Vivid 1 (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/stfight.cpp b/src/mame/drivers/stfight.cpp
index 13518046e1a..3d2a73da697 100644
--- a/src/mame/drivers/stfight.cpp
+++ b/src/mame/drivers/stfight.cpp
@@ -253,6 +253,13 @@ TODO:
- Each version of empcity/stfight has a different protection code stored in the
MCU (at $1D2) so each 68705 will need to be dumped.
We currently use hacked versions of the empcityu MCU for each different set.
+ Currently, the following protection codes are known:
+ 06 USA
+ 08 Japan
+ 09 Benelux
+ 0d Italy
+ 0f Germany
+ The France version doesn't care for the protection code.
*****************************************************************************/
@@ -870,7 +877,7 @@ ROM_START( empcityi ) // very similar to above set
ROM_LOAD( "19.7w", 0x08000, 0x8000, CRC(5170a057) SHA1(9222f9febc222fa0c2eead258ad77c857f6d40c8) )
ROM_REGION( 0x10000, "stfight_vid:fg_map", 0 ) /* foreground map data */
- ROM_LOAD( "9.7c", 0x00000, 0x8000, CRC(8ceaf4fe) SHA1(5698f2ff44c109825b8d9d0b6dd2426624df668b) )
+ ROM_LOAD( "9.7c", 0x00000, 0x8000, CRC(8ceaf4fe) SHA1(5698f2ff44c109825b8d9d0b6dd2426624df668b) )
ROM_LOAD( "10.8c", 0x08000, 0x8000, CRC(5a1a227a) SHA1(24928ab218824ae1f5380398ceb90dcad525cc08) )
ROM_REGION( 0x10000, "stfight_vid:bg_map", 0 ) /* background map data */
@@ -899,6 +906,69 @@ ROM_START( empcityi ) // very similar to above set
ROM_LOAD( "5j", 0x00000, 0x8000, CRC(1b8d0c07) SHA1(c163ccd2b7ed6c84facc075eb1564ca399f3ba17) )
ROM_END
+// This set doesn't seem to check for the protection code in the MCU
+ROM_START( empcityfr )
+ ROM_REGION( 2*0x18000, "maincpu", 0 ) /* 96k for code + 96k for decrypted opcodes */
+ ROM_LOAD( "pr.4t", 0x00000, 0x8000, CRC(aa1f84ac) SHA1(b484b85270091511860f5b4041099c5335ff1204) )
+ ROM_LOAD( "pr.2t", 0x10000, 0x8000, CRC(af381247) SHA1(93812d6b6a2dead07670b789597d23f29b8f0c5d) )
+
+ ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for the second CPU */
+ ROM_LOAD( "092-5c", 0x0000, 0x8000, CRC(6a8cb7a6) SHA1(dc123cc48d3623752b78e7c23dd8d2f5adf84f92) )
+
+ ROM_REGION( 0x0800, "mcu", 0 )
+ ROM_LOAD( "empcityu_68705.3j", 0x0000, 0x0800, BAD_DUMP CRC(182f7616) SHA1(38b4f23a559ae13f8ca1b974407a2a40fc52879f) )
+
+ ROM_REGION( 0x02000, "stfight_vid:tx_gfx", 0 ) /* character data */
+ ROM_LOAD( "17.2n", 0x0000, 0x2000, CRC(1b3706b5) SHA1(61f069329a7a836523ffc8cce915b0d0129fd896) )
+
+ ROM_REGION( 0x20000, "stfight_vid:fg_gfx", 0 ) /* foreground tile pixel data */
+ ROM_LOAD( "115.4c", 0x10000, 0x8000, CRC(2c6caa5f) SHA1(f6893cb87004979ead331897c684f995f850447e) )
+ ROM_LOAD( "116.5c", 0x18000, 0x8000, CRC(e11ded31) SHA1(e3e634ad324d51e52d79dd79e5e6e5697cb8d21f) )
+ ROM_LOAD( "113.2c", 0x00000, 0x8000, CRC(0c099a31) SHA1(dabaf8edc59e4954941cd8176031a358f45a1956) )
+ ROM_LOAD( "114.3c", 0x08000, 0x8000, CRC(3cc77c31) SHA1(13d2324df5a322d499c9959a6bb3a844edaefb45) )
+
+ ROM_REGION( 0x20000, "stfight_vid:bg_gfx", 0 ) /* background tile pixel data */
+ ROM_LOAD( "109.4j", 0x10000, 0x8000, CRC(0ae48dd3) SHA1(ca3d9aeb9f4343c379cef9282e408fbf8aa67d99) )
+ ROM_LOAD( "110.5j", 0x18000, 0x8000, CRC(debf5d76) SHA1(eb18c35166eb5f93be98b3c30c7d909c0a68eada) )
+ ROM_LOAD( "097.2j", 0x00000, 0x8000, CRC(8261ecfe) SHA1(5817f4a0458a949298414fe09c86bbcf50be52f3) )
+ ROM_LOAD( "108.3j", 0x08000, 0x8000, CRC(71137301) SHA1(087a9f401939bc30f1dafa9916e8d8c564595a57) )
+
+ ROM_REGION( 0x20000, "stfight_vid:spr_gfx", 0 ) /* sprite data */
+ ROM_LOAD( "095.8w", 0x10000, 0x8000, CRC(8299f247) SHA1(71891f7b1fbfaed14c3854b7f6e10a3ddb4bd479) )
+ ROM_LOAD( "096.9w", 0x18000, 0x8000, CRC(b57dc037) SHA1(69ac79a95ba9ace7c9ca7af480a4a10176be5ace) )
+ ROM_LOAD( "093.6w", 0x00000, 0x8000, CRC(68acd627) SHA1(f98ff9ccb0913711079a2988e8dd08695fb5e107) )
+ ROM_LOAD( "094.7w", 0x08000, 0x8000, CRC(5170a057) SHA1(9222f9febc222fa0c2eead258ad77c857f6d40c8) )
+
+ ROM_REGION( 0x10000, "stfight_vid:fg_map", 0 ) /* foreground map data */
+ ROM_LOAD( "117.7c", 0x00000, 0x8000, CRC(8ceaf4fe) SHA1(5698f2ff44c109825b8d9d0b6dd2426624df668b) )
+ ROM_LOAD( "118.8c", 0x08000, 0x8000, CRC(5a1a227a) SHA1(24928ab218824ae1f5380398ceb90dcad525cc08) )
+
+ ROM_REGION( 0x10000, "stfight_vid:bg_map", 0 ) /* background map data */
+ ROM_LOAD( "111.7j", 0x00000, 0x8000, CRC(27a310bc) SHA1(dd30d72bc33b0bf7ddaf3ab730e028f51b20152a) )
+ ROM_LOAD( "112.8j", 0x08000, 0x8000, CRC(3d19ce18) SHA1(38f691a23c96ef672637965c1a13f6d1595f9d51) )
+
+ ROM_REGION( 0x0100, "stfight_vid:tx_clut", 0 )
+ ROM_LOAD( "82s129.006", 0x0000, 0x0100, CRC(f9424b5b) SHA1(e3bc23213406d35d54f1221f17f25d433df273a2) ) /* text lookup table */
+
+ ROM_REGION( 0x0100, "stfight_vid:fg_clut", 0 )
+ ROM_LOAD_NIB_HIGH( "82s129.002", 0x0000, 0x0100, CRC(c883d49b) SHA1(e84900ccf6f27e5043e43c0d85ea1e4eee7e52d3) ) /* fg lookup table */
+ ROM_LOAD_NIB_LOW( "82s129.003", 0x0000, 0x0100, CRC(af81882a) SHA1(b1008c991bd8d1157b3479e465ab286c70418b58) )
+
+ ROM_REGION( 0x0100, "stfight_vid:bg_clut", 0 )
+ ROM_LOAD_NIB_HIGH( "82s129.004", 0x0000, 0x0100, CRC(1831ce7c) SHA1(57afbee9225f0efd63895a5f522e96dc87ca2616) ) /* bg lookup table */
+ ROM_LOAD_NIB_LOW( "82s129.005", 0x0000, 0x0100, CRC(96cb6293) SHA1(1dcdeaa995e6ffa3753b742842c5ffe0f68ef8cd) )
+
+ ROM_REGION( 0x0100, "stfight_vid:spr_clut", 0 )
+ ROM_LOAD_NIB_HIGH( "82s129.052", 0x0000, 0x0100, CRC(3d915ffc) SHA1(921be6d5e5fc0fdee9c9f545c1c4a0c334e9844c) ) /* sprite lookup table */
+ ROM_LOAD_NIB_LOW( "82s129.066", 0x0000, 0x0100, CRC(51e8832f) SHA1(ed8c00559e7a02bb8c11861d747c8c64c01b7437) )
+
+ ROM_REGION( 0x0800, "proms", 0 )
+ ROM_LOAD( "82s129.015", 0x0700, 0x0100, CRC(0eaf5158) SHA1(bafd4108708f66cd7b280e47152b108f3e254fc9) ) /* timing? (not used) */
+
+ ROM_REGION( 0x08000, "adpcm", 0 ) /* ADPCM voice data */
+ ROM_LOAD( "091.5j", 0x00000, 0x8000, CRC(1b8d0c07) SHA1(c163ccd2b7ed6c84facc075eb1564ca399f3ba17) )
+ROM_END
+
ROM_START( stfightgb )
ROM_REGION( 2*0x18000, "maincpu", 0 ) /* 96k for code + 96k for decrypted opcodes */
ROM_LOAD( "1.4t", 0x00000, 0x8000, CRC(0ce5ca11) SHA1(f753107a0c4ce52fe761ea2edce4c5e96169dfbd) )
@@ -1066,6 +1136,7 @@ GAME( 1986, empcity, 0, stfight, stfight, stfight_state, init_empcity,
GAME( 1986, empcityu, empcity, stfight, stfight, stfight_state, init_stfight, ROT0, "Seibu Kaihatsu (Taito / Romstar license)", "Empire City: 1931 (US)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // different title logo
GAME( 1986, empcityj, empcity, stfight, stfight, stfight_state, init_stfight, ROT0, "Seibu Kaihatsu (Taito license)", "Empire City: 1931 (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1986, empcityi, empcity, stfight, stfight, stfight_state, init_stfight, ROT0, "Seibu Kaihatsu (Eurobed license)", "Empire City: 1931 (Italy)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1986, empcityfr, empcity, stfight, stfight, stfight_state, init_stfight, ROT0, "Seibu Kaihatsu (Norad license)", "Empire City: 1931 (France)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1986, stfight, empcity, stfight, stfight, stfight_state, init_stfight, ROT0, "Seibu Kaihatsu (Tuning license)", "Street Fight (Germany)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1986, stfighta, empcity, stfight, stfight, stfight_state, init_stfight, ROT0, "Seibu Kaihatsu", "Street Fight (bootleg?)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1986, stfightgb, empcity, stfight, stfight, stfight_state, init_stfight, ROT0, "Seibu Kaihatsu (Tuning license)", "Street Fight (Germany - Benelux)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/stratos.cpp b/src/mame/drivers/stratos.cpp
index 8d47399822a..42b7a8364e8 100644
--- a/src/mame/drivers/stratos.cpp
+++ b/src/mame/drivers/stratos.cpp
@@ -375,5 +375,5 @@ ROM_START( stratos )
ROM_FILL(0x00000, 0x10000, 0xff)
ROM_END
-/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
-CONS( 1986, stratos, 0, 0, stratos, stratos, stratos_state, init_stratos, "Saitek", "Kasparov Stratos Chess Computer", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
+/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
+CONS( 1986, stratos, 0, 0, stratos, stratos, stratos_state, init_stratos, "SciSys", "Kasparov Chess Computer: Stratos", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
diff --git a/src/mame/drivers/stuntair.cpp b/src/mame/drivers/stuntair.cpp
index 3fcf547ecd6..9cce11f085f 100644
--- a/src/mame/drivers/stuntair.cpp
+++ b/src/mame/drivers/stuntair.cpp
@@ -320,7 +320,7 @@ WRITE8_MEMBER(stuntair_state::stuntair_sound_w)
{
// each command is written three times: with bit 7 set, then with bit 7 clear, then with bit 7 set again
// the 3 highest bits are ignored by the sound program
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(INPUT_LINE_NMI, BIT(data, 7) ? CLEAR_LINE : ASSERT_LINE);
}
diff --git a/src/mame/drivers/suna16.cpp b/src/mame/drivers/suna16.cpp
index 6449ad12a1e..fd7d424ab66 100644
--- a/src/mame/drivers/suna16.cpp
+++ b/src/mame/drivers/suna16.cpp
@@ -49,7 +49,7 @@ WRITE16_MEMBER(suna16_state::soundlatch_w)
{
if (ACCESSING_BITS_0_7)
{
- m_soundlatch->write(space, 0, data & 0xff );
+ m_soundlatch->write(data & 0xff);
}
if (data & ~0xff) logerror("CPU#0 PC %06X - Sound latch unknown bits: %04X\n", m_maincpu->pc(), data);
}
diff --git a/src/mame/drivers/suna8.cpp b/src/mame/drivers/suna8.cpp
index b71d7ccef27..9fd70f3ba0c 100644
--- a/src/mame/drivers/suna8.cpp
+++ b/src/mame/drivers/suna8.cpp
@@ -608,7 +608,7 @@ WRITE8_MEMBER(suna8_state::rranger_bankswitch_w)
*/
READ8_MEMBER(suna8_state::rranger_soundstatus_r)
{
- m_soundlatch2->read(space, offset);
+ m_soundlatch2->read();
return 0x02;
}
@@ -784,7 +784,7 @@ WRITE8_MEMBER(suna8_state::brickzn_multi_w)
*/
uint8_t remap = (m_remap_sound ? bitswap<8>(data, 7,6,3,4,5,2,1,0) : data);
- m_soundlatch->write(space, 0, remap);
+ m_soundlatch->write(remap);
logerror("CPU #0 - PC %04X: soundlatch = %02X (->%02X)\n",m_maincpu->pc(),data,remap);
}
@@ -1038,7 +1038,7 @@ WRITE8_MEMBER(suna8_state::starfigh_rombank_latch_w)
WRITE8_MEMBER(suna8_state::starfigh_sound_latch_w)
{
if ( !(m_rombank_latch & 0x20) )
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
}
/*
diff --git a/src/mame/drivers/supbtime.cpp b/src/mame/drivers/supbtime.cpp
index 11639322f48..261b06aee32 100644
--- a/src/mame/drivers/supbtime.cpp
+++ b/src/mame/drivers/supbtime.cpp
@@ -357,7 +357,6 @@ void supbtime_state::supbtime(machine_config &config)
PALETTE(config, "palette").set_format(palette_device::xBGR_444, 1024);
DECO16IC(config, m_deco_tilegen, 0);
- m_deco_tilegen->set_split(0);
m_deco_tilegen->set_pf1_size(DECO_64x32);
m_deco_tilegen->set_pf2_size(DECO_64x32);
m_deco_tilegen->set_pf1_trans_mask(0x0f);
diff --git a/src/mame/drivers/supduck.cpp b/src/mame/drivers/supduck.cpp
index 5a18c908aa1..d90dc44bee5 100644
--- a/src/mame/drivers/supduck.cpp
+++ b/src/mame/drivers/supduck.cpp
@@ -220,7 +220,7 @@ WRITE16_MEMBER(supduck_state::supduck_4002_w)
{
data &= mem_mask;
- m_soundlatch->write(space, 0, (data>>8));
+ m_soundlatch->write((data>>8));
m_audiocpu->set_input_line(0, HOLD_LINE);
}
@@ -442,7 +442,8 @@ void supduck_state::machine_reset()
}
-MACHINE_CONFIG_START(supduck_state::supduck)
+void supduck_state::supduck(machine_config &config)
+{
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(8'000'000)); /* Verified on PCB */
m_maincpu->set_addrmap(AS_PROGRAM, &supduck_state::main_map);
@@ -467,8 +468,7 @@ MACHINE_CONFIG_START(supduck_state::supduck)
TIGEROAD_SPRITE(config, m_spritegen, 0);
- MCFG_PALETTE_ADD("palette", 0x800/2)
- MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB_bit4)
+ PALETTE(config, m_palette).set_format(palette_device::xRGBRRRRGGGGBBBB_bit4, 0x800/2);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -478,7 +478,7 @@ MACHINE_CONFIG_START(supduck_state::supduck)
okim6295_device &oki(OKIM6295(config, "oki", XTAL(8'000'000)/8, okim6295_device::PIN7_HIGH)); // 1MHz - Verified on PCB, pin 7 not verified
oki.add_route(ALL_OUTPUTS, "mono", 1.0);
oki.set_addrmap(0, &supduck_state::oki_map);
-MACHINE_CONFIG_END
+}
/***************************************************************************
diff --git a/src/mame/drivers/suprridr.cpp b/src/mame/drivers/suprridr.cpp
index de1c458ea2d..5c401d2e7a7 100644
--- a/src/mame/drivers/suprridr.cpp
+++ b/src/mame/drivers/suprridr.cpp
@@ -100,7 +100,7 @@ void suprridr_state::machine_start()
void suprridr_state::machine_reset()
{
- m_soundlatch->acknowledge_w(machine().dummy_space(), 0, 0);
+ m_soundlatch->acknowledge_w();
}
/*************************************
diff --git a/src/mame/drivers/system1.cpp b/src/mame/drivers/system1.cpp
index f5deda2c5f1..b21ae6a6fcf 100644
--- a/src/mame/drivers/system1.cpp
+++ b/src/mame/drivers/system1.cpp
@@ -529,7 +529,7 @@ READ8_MEMBER(system1_state::sound_data_r)
{
m_ppi8255->pc6_w(0);
m_ppi8255->pc6_w(1);
- return m_soundlatch->read(space, offset);
+ return m_soundlatch->read();
}
/* if we have a Z80 PIO, get the data from the port and toggle the strobe */
@@ -548,7 +548,7 @@ READ8_MEMBER(system1_state::sound_data_r)
WRITE8_MEMBER(system1_state::soundport_w)
{
/* boost interleave when communicating with the sound CPU */
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100));
}
@@ -5631,7 +5631,7 @@ GAME( 1985, shtngmste, shtngmst, sys2m, shtngmst, system1_state, i
GAME( 1986, gardiab, gardia, sys2_317_0007, gardia, system1_state, init_bank44, ROT270, "bootleg", "Gardia (317-0007?, bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1986, gardiaj, gardia, sys2_317_0006, gardia, system1_state, init_bank44, ROT270, "Coreland / Sega", "Gardia (Japan, 317-0006)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1986, wboysys2, wboy, sys2_315_5177, wboysys2, system1_state, init_bank0c, ROT0, "Escape (Sega license)", "Wonder Boy (system 2, set 1, 315-5177)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, wboysys2a, wboy, sys2_315_5176, wboysys2, system1_state, init_bank0c, ROT0, "Escape (Sega license)", "Wonder Boy (system 2, set 2, 315-5176)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
+GAME( 1986, wboysys2a, wboy, sys2_315_5176, wboysys2, system1_state, init_bank0c, ROT0, "Escape (Sega license)", "Wonder Boy (system 2, set 2, 315-5176)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, tokisens, 0, sys2xb, tokisens, system1_state, init_tokisens, ROT90, "Sega", "Toki no Senshi - Chrono Soldier (MC-8123, 317-0040)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, tokisensa, tokisens, sys2, tokisensa, system1_state, init_bank0c, ROT90, "Sega", "Toki no Senshi - Chrono Soldier (prototype?)", MACHINE_SUPPORTS_SAVE ) // or bootleg?
GAME( 1987, wbml, 0, sys2xb, wbml, system1_state, init_wbml, ROT0, "Sega / Westone", "Wonder Boy in Monster Land (Japan New Ver., MC-8123, 317-0043)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/system16.cpp b/src/mame/drivers/system16.cpp
index 83b760a1f4a..56846e6c522 100644
--- a/src/mame/drivers/system16.cpp
+++ b/src/mame/drivers/system16.cpp
@@ -111,7 +111,7 @@ WRITE16_MEMBER(segas1x_bootleg_state::sound_command_nmi_w)
{
if (ACCESSING_BITS_0_7)
{
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
m_soundcpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
}
@@ -120,7 +120,7 @@ WRITE16_MEMBER(segas1x_bootleg_state::sound_command_irq_w)
{
if (ACCESSING_BITS_0_7)
{
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
m_soundcpu->set_input_line(0, HOLD_LINE);
}
}
@@ -128,7 +128,7 @@ WRITE16_MEMBER(segas1x_bootleg_state::sound_command_irq_w)
READ8_MEMBER(segas1x_bootleg_state::sound_command_irq_r)
{
m_soundcpu->set_input_line(0, CLEAR_LINE);
- return m_soundlatch->read(space, 0, 0xff);
+ return m_soundlatch->read();
}
WRITE8_MEMBER(segas1x_bootleg_state::soundbank_msm_w)
@@ -4043,7 +4043,7 @@ void segas1x_bootleg_state::init_astormb2()
init_sys18bl_oki();
m_maincpu->space(AS_PROGRAM).unmap_write(0xa00006, 0xa00007);
- m_maincpu->space(AS_PROGRAM).install_write_handler(0xa00006, 0xa00007, write8_delegate(FUNC(generic_latch_8_device::write), (generic_latch_8_device*)m_soundlatch), 0x00ff);
+ m_maincpu->space(AS_PROGRAM).install_write_handler(0xa00006, 0xa00007, write8smo_delegate(FUNC(generic_latch_8_device::write), (generic_latch_8_device*)m_soundlatch), 0x00ff);
}
/*************************************
diff --git a/src/mame/drivers/tatsumi.cpp b/src/mame/drivers/tatsumi.cpp
index 51aa5849fda..431265ca5c0 100644
--- a/src/mame/drivers/tatsumi.cpp
+++ b/src/mame/drivers/tatsumi.cpp
@@ -175,7 +175,7 @@
WRITE8_MEMBER(cyclwarr_state::cyclwarr_sound_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
diff --git a/src/mame/drivers/tbowl.cpp b/src/mame/drivers/tbowl.cpp
index 9f28339519e..ee03744b36b 100644
--- a/src/mame/drivers/tbowl.cpp
+++ b/src/mame/drivers/tbowl.cpp
@@ -427,7 +427,7 @@ void tbowl_state::machine_reset()
m_adpcm_pos[0] = m_adpcm_pos[1] = 0;
m_adpcm_end[0] = m_adpcm_end[1] = 0;
m_adpcm_data[0] = m_adpcm_data[1] = -1;
- m_soundlatch->acknowledge_w(machine().dummy_space(), 0, 0);
+ m_soundlatch->acknowledge_w();
}
void tbowl_state::tbowl(machine_config &config)
diff --git a/src/mame/drivers/tecmo.cpp b/src/mame/drivers/tecmo.cpp
index 1bd6b20a1ae..e22740d0f5d 100644
--- a/src/mame/drivers/tecmo.cpp
+++ b/src/mame/drivers/tecmo.cpp
@@ -1221,6 +1221,39 @@ ROM_END
ROM_START( gemini )
ROM_REGION( 0x20000, "maincpu", 0 )
+ ROM_LOAD( "4-5s", 0x00000, 0x10000, CRC(ce71e27a) SHA1(5aac0434edd39e444687d9988c7f49e0752a4900) ) /* c000-ffff is not used */
+ ROM_LOAD( "5-6s", 0x10000, 0x10000, CRC(216784a9) SHA1(ec74a3753e5b6384b875125ec0db7beea0a6aa6d) ) /* banked at f000-f7ff */
+
+ ROM_REGION( 0x10000, "soundcpu", 0 )
+ ROM_LOAD( "gw03-5h.rom", 0x0000, 0x8000, CRC(9bc79596) SHA1(61de9ddd45140e8ed88173294bd26147e2abfa21) )
+
+ ROM_REGION( 0x08000, "gfx1", 0 )
+ ROM_LOAD( "gw02-3h.rom", 0x00000, 0x08000, CRC(7acc8d35) SHA1(05056e9f077e7571b314390b508c72d56ad0f43b) ) /* characters */
+
+ ROM_REGION( 0x40000, "gfx2", 0 )
+ ROM_LOAD( "gw06-1c.rom", 0x00000, 0x10000, CRC(4ea51631) SHA1(9aee0f1ba210ac953dc193cfc739322966b6de8a) ) /* sprites */
+ ROM_LOAD( "gw07-1d.rom", 0x10000, 0x10000, CRC(da42637e) SHA1(9885c52823279f26871092c77bdbe027df08268f) ) /* sprites */
+ ROM_LOAD( "gw08-1f.rom", 0x20000, 0x10000, CRC(0b4e8d70) SHA1(55069f3df1c8db83f306d46b8262fd23585e6013) ) /* sprites */
+ ROM_LOAD( "gw09-1h.rom", 0x30000, 0x10000, CRC(b65c5e4c) SHA1(699e1a9e72b8d94edae7382ba119fe5da113514d) ) /* sprites */
+
+ ROM_REGION( 0x40000, "gfx3", 0 )
+ ROM_LOAD( "gw10-1n.rom", 0x00000, 0x10000, CRC(5e84cd4f) SHA1(e85320291027a16619c87fc2365448367bda454a) ) /* tiles #1 */
+ ROM_LOAD( "gw11-2na.rom", 0x10000, 0x10000, CRC(08b458e1) SHA1(b3426faa57dca51dc053db44fa4968425d8bf3ee) ) /* tiles #1 */
+ ROM_LOAD( "gw12-2nb.rom", 0x20000, 0x10000, CRC(229c9714) SHA1(f4f47d6b379c973c22f9ae7d7bec7041cdf3f737) ) /* tiles #1 */
+ ROM_LOAD( "gw13-3n.rom", 0x30000, 0x10000, CRC(c5dfaf47) SHA1(c3202ca8c7f3c5c7dc9acdc09c1c894e168ef9fe) ) /* tiles #1 */
+
+ ROM_REGION( 0x40000, "gfx4", 0 )
+ ROM_LOAD( "gw14-1r.rom", 0x00000, 0x10000, CRC(9c10e5b5) SHA1(a81399b85d8f3ddca26883ec3535cb9044c35ada) ) /* tiles #2 */
+ ROM_LOAD( "gw15-2ra.rom", 0x10000, 0x10000, CRC(4cd18cfa) SHA1(c197a098a7c1e5220aad039383a40702fe7c4f21) ) /* tiles #2 */
+ ROM_LOAD( "gw16-2rb.rom", 0x20000, 0x10000, CRC(f911c7be) SHA1(3f49f6c4734f2b644d93c4a54249aae6ff080e1d) ) /* tiles #2 */
+ ROM_LOAD( "gw17-3r.rom", 0x30000, 0x10000, CRC(79a9ce25) SHA1(74e3917b8e7a920ceb2135d7ef8fb2f2c5176b21) ) /* tiles #2 */
+
+ ROM_REGION( 0x8000, "adpcm", 0 ) /* ADPCM samples */
+ ROM_LOAD( "gw01-6a.rom", 0x0000, 0x8000, CRC(d78afa05) SHA1(b02a739b045f5cddf943ce59226ef234463eeebe) )
+ROM_END
+
+ROM_START( geminij )
+ ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD( "gw04-5s.rom", 0x00000, 0x10000, CRC(ff9de855) SHA1(34167af8456a081f68b338f10d4319ce1e703fd4) ) /* c000-ffff is not used */
ROM_LOAD( "gw05-6s.rom", 0x10000, 0x10000, CRC(5a6947a9) SHA1(18b7aeb0f0e2c396bc759118dd7c45fd6070b804) ) /* banked at f000-f7ff */
@@ -1320,8 +1353,9 @@ GAME( 1986, rygar, 0, rygar, rygar, tecmo_state, init_rygar,
GAME( 1986, rygar2, rygar, rygar, rygar, tecmo_state, init_rygar, ROT0, "Tecmo", "Rygar (US set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, rygar3, rygar, rygar, rygar, tecmo_state, init_rygar, ROT0, "Tecmo", "Rygar (US set 3 Old Version)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, rygarj, rygar, rygar, rygar, tecmo_state, init_rygar, ROT0, "Tecmo", "Argus no Senshi (Japan)", MACHINE_SUPPORTS_SAVE )
-GAME( 1987, gemini, 0, gemini, gemini, tecmo_state, init_gemini, ROT90, "Tecmo", "Gemini Wing (Japan)", MACHINE_SUPPORTS_SAVE ) // Japan regional warning screen
-GAME( 1987, geminib, gemini, geminib, gemini, tecmo_state, init_gemini, ROT90, "bootleg", "Gemini Wing (bootleg)", MACHINE_SUPPORTS_SAVE ) // Japan regional warning screen
+GAME( 1987, gemini, 0, gemini, gemini, tecmo_state, init_gemini, ROT90, "Tecmo", "Gemini Wing (World)", MACHINE_SUPPORTS_SAVE ) // No regional "Warning, if you are playing ..." screen
+GAME( 1987, geminij, gemini, gemini, gemini, tecmo_state, init_gemini, ROT90, "Tecmo", "Gemini Wing (Japan)", MACHINE_SUPPORTS_SAVE ) // Japan regional warning screen
+GAME( 1987, geminib, gemini, geminib, gemini, tecmo_state, init_gemini, ROT90, "bootleg", "Gemini Wing (bootleg)", MACHINE_SUPPORTS_SAVE ) // regional warning screen is blanked (still get a delay)
GAME( 1988, silkworm, 0, silkworm, silkworm, tecmo_state, init_silkworm, ROT0, "Tecmo", "Silk Worm (World)", MACHINE_SUPPORTS_SAVE ) // No regional "Warning, if you are playing ..." screen
GAME( 1988, silkwormj, silkworm, silkworm, silkworm, tecmo_state, init_silkworm, ROT0, "Tecmo", "Silk Worm (Japan)", MACHINE_SUPPORTS_SAVE ) // Japan regional warning screen
GAME( 1988, silkwormp, silkworm, silkwormp, silkwormp, tecmo_state, init_silkworm, ROT0, "Tecmo", "Silk Worm (prototype)", MACHINE_SUPPORTS_SAVE ) // prototype
diff --git a/src/mame/drivers/tehkanwc.cpp b/src/mame/drivers/tehkanwc.cpp
index 84fcb199fc9..f14ac0b5601 100644
--- a/src/mame/drivers/tehkanwc.cpp
+++ b/src/mame/drivers/tehkanwc.cpp
@@ -157,7 +157,7 @@ WRITE8_MEMBER(tehkanwc_state::track_1_reset_w)
WRITE8_MEMBER(tehkanwc_state::sound_command_w)
{
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
@@ -175,7 +175,7 @@ void tehkanwc_state::device_timer(emu_timer &timer, device_timer_id id, int para
WRITE8_MEMBER(tehkanwc_state::sound_answer_w)
{
- m_soundlatch2->write(space, 0, data);
+ m_soundlatch2->write(data);
/* in Gridiron, the sound CPU goes in a tight loop after the self test, */
/* probably waiting to be reset by a watchdog */
diff --git a/src/mame/drivers/terracre.cpp b/src/mame/drivers/terracre.cpp
index 745c79bf475..1199b72a951 100644
--- a/src/mame/drivers/terracre.cpp
+++ b/src/mame/drivers/terracre.cpp
@@ -95,12 +95,12 @@ AT-2
WRITE16_MEMBER(terracre_state::amazon_sound_w)
{
- m_soundlatch->write(space,0,((data & 0x7f) << 1) | 1);
+ m_soundlatch->write(((data & 0x7f) << 1) | 1);
}
READ8_MEMBER(terracre_state::soundlatch_clear_r)
{
- m_soundlatch->clear_w(space,0,0);
+ m_soundlatch->clear_w();
return 0;
}
diff --git a/src/mame/drivers/tetrisp2.cpp b/src/mame/drivers/tetrisp2.cpp
index 5947f894901..ba2f9a316c8 100644
--- a/src/mame/drivers/tetrisp2.cpp
+++ b/src/mame/drivers/tetrisp2.cpp
@@ -582,7 +582,7 @@ READ16_MEMBER(stepstag_state::stepstag_pc2main_r)
WRITE16_MEMBER(stepstag_state::stepstag_soundlatch_word_w)
{
- m_soundlatch->write(space, offset, data, mem_mask);
+ m_soundlatch->write(data);
m_subcpu->set_input_line(M68K_IRQ_6, HOLD_LINE);
diff --git a/src/mame/drivers/tigeroad.cpp b/src/mame/drivers/tigeroad.cpp
index 0b77fcf66e2..581115eb59a 100644
--- a/src/mame/drivers/tigeroad.cpp
+++ b/src/mame/drivers/tigeroad.cpp
@@ -61,7 +61,7 @@ single plane board.
WRITE16_MEMBER(tigeroad_state::tigeroad_soundcmd_w)
{
if (ACCESSING_BITS_8_15)
- m_soundlatch->write(space,offset,data >> 8);
+ m_soundlatch->write(data >> 8);
}
@@ -76,7 +76,7 @@ WRITE8_MEMBER(tigeroad_state::msm5205_w)
WRITE8_MEMBER(f1dream_state::out1_w)
{
- m_soundlatch->write(space,2,data);
+ m_soundlatch->write(data);
}
WRITE8_MEMBER(f1dream_state::out3_w)
diff --git a/src/mame/drivers/tiki100.cpp b/src/mame/drivers/tiki100.cpp
index 28c4802139f..11e533f549d 100644
--- a/src/mame/drivers/tiki100.cpp
+++ b/src/mame/drivers/tiki100.cpp
@@ -98,7 +98,7 @@ READ8_MEMBER( tiki100_state::iorq_r )
break;
case 0x01: // SERS
- data = m_dart->cd_ba_r(space, offset & 0x03);
+ data = m_dart->cd_ba_r(offset & 0x03);
break;
case 0x02: // PARS
@@ -119,7 +119,7 @@ READ8_MEMBER( tiki100_state::iorq_r )
break;
case 0x06: // TIMS
- data = m_ctc->read(space, offset & 0x03);
+ data = m_ctc->read(offset & 0x03);
break;
}
@@ -137,7 +137,7 @@ WRITE8_MEMBER( tiki100_state::iorq_w )
break;
case 0x01: // SERS
- m_dart->cd_ba_w(space, offset & 0x03, data);
+ m_dart->cd_ba_w(offset & 0x03, data);
break;
case 0x02: // PARS
@@ -170,7 +170,7 @@ WRITE8_MEMBER( tiki100_state::iorq_w )
break;
case 0x06: // TIMS
- m_ctc->write(space, offset & 0x03, data);
+ m_ctc->write(offset & 0x03, data);
break;
case 0x07: // SYL
diff --git a/src/mame/drivers/tispeak.cpp b/src/mame/drivers/tispeak.cpp
index b177626bcbe..ca5be1e1769 100644
--- a/src/mame/drivers/tispeak.cpp
+++ b/src/mame/drivers/tispeak.cpp
@@ -374,7 +374,7 @@ keyboard, VFD display, and use the SC-01 speech chip. --> driver k28.cpp
- MCU: TMS1400 MP7324
- TMS51xx: TMS5110A
- VSM: 16KB CM62084
- - LCD: unknown 8*16-seg
+ - LCD: SMOS SMC1112 MCU to 8*14-seg display
K28 modules:
@@ -394,7 +394,7 @@ K28 modules:
TODO:
- why doesn't lantutor work?
- - identify and emulate k28 LCD
+ - emulate k28 LCD
- emulate other known devices
diff --git a/src/mame/drivers/titan_soc.cpp b/src/mame/drivers/titan_soc.cpp
new file mode 100644
index 00000000000..5f8852cc892
--- /dev/null
+++ b/src/mame/drivers/titan_soc.cpp
@@ -0,0 +1,121 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+/************************************************************************
+
+ Titan 1.0C (System on a Chip - ARM based processor)
+
+ used by
+
+ Atari / Colecovision / Intellivision Flashback (not dumped)
+ TecToy Mega Drive 4
+
+
+ Notes:
+
+ It is possible to connect a debug terminal
+ Has a USB port for user to plug in a flash drive etc.
+ 4MB RAM
+
+ Emulators run on the ARM, games don't use some modes 100% correctly compared to original
+ hardware, only correct for the included emulator. Some games are not emulation based.
+
+*/
+
+#include "emu.h"
+#include "cpu/arm7/arm7.h"
+#include "cpu/arm7/arm7core.h"
+#include "emupal.h"
+#include "screen.h"
+
+class titan_soc_state : public driver_device
+{
+public:
+ titan_soc_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_mainram(*this, "mainram"),
+ m_maincpu(*this, "maincpu")
+ { }
+
+ void titan_soc(machine_config &config);
+
+ void init_titan_soc();
+
+private:
+ required_shared_ptr<uint32_t> m_mainram;
+ required_device<cpu_device> m_maincpu;
+
+ virtual void machine_reset() override;
+ virtual void video_start() override;
+ uint32_t screen_update_titan_soc(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ void map(address_map &map);
+};
+
+
+
+void titan_soc_state::map(address_map &map)
+{
+ map(0x00000000, 0x0007ffff).ram().share("mainram");
+}
+
+static INPUT_PORTS_START( titan_soc )
+
+INPUT_PORTS_END
+
+
+void titan_soc_state::video_start()
+{
+}
+
+uint32_t titan_soc_state::screen_update_titan_soc(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+{
+ return 0;
+}
+
+void titan_soc_state::machine_reset()
+{
+}
+
+void titan_soc_state::titan_soc(machine_config &config)
+{
+ /* basic machine hardware */
+ ARM920T(config, m_maincpu, 200000000); // type + clock unknown
+ m_maincpu->set_addrmap(AS_PROGRAM, &titan_soc_state::map);
+
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
+ screen.set_size(320, 256);
+ screen.set_visarea(0, 320-1, 0, 256-1);
+ screen.set_screen_update(FUNC(titan_soc_state::screen_update_titan_soc));
+
+ PALETTE(config, "palette").set_entries(256);
+}
+
+
+
+ROM_START( megadri4 )
+ ROM_REGION( 0x80000, "serial", 0 ) // this was only dumped from one of the PCBS, not sure which one, might not be correct for both
+ ROM_LOAD( "25l4005a - rom de boot megadrive4.bin", 0x000000, 0x80000, CRC(1b5c3c31) SHA1(97f301ae441ca23d3c52a901319e375654920867) )
+
+ ROM_REGION( 0x08400000, "flash", 0 )
+ ROM_LOAD( "ic9 megadrive4 titan.bin", 0x000000, 0x08400000, CRC(ed92b81a) SHA1(a3d51a2febf670820d6df009660b96ff6407f475) )
+ROM_END
+
+ROM_START( megadri4a )
+ ROM_REGION( 0x80000, "serial", 0 ) // this was only dumped from one of the PCBS, not sure which one, might not be correct for both
+ ROM_LOAD( "25l4005a - rom de boot megadrive4.bin", 0x000000, 0x80000, CRC(1b5c3c31) SHA1(97f301ae441ca23d3c52a901319e375654920867) )
+
+ ROM_REGION( 0x08400000, "flash", 0 )
+ ROM_LOAD( "ic9 megadrive4 titan segunda placa.bin", 0x000000, 0x08400000, CRC(4b423898) SHA1(293127d2f6169717a7fbfcf18f13e4b1735236f7) )
+ROM_END
+
+
+
+void titan_soc_state::init_titan_soc()
+{
+ // can either run directly from serial ROM, or copies it to RAM on startup
+ memcpy(m_mainram, memregion("serial")->base(), 0x80000);
+}
+
+CONS( 2009, megadri4, 0, 0, titan_soc, titan_soc, titan_soc_state, init_titan_soc, "Tectoy (licensed from Sega)", "Mega Drive 4 / Guitar Idol (set 1)", MACHINE_IS_SKELETON )
+CONS( 2009, megadri4a, megadri4, 0, titan_soc, titan_soc, titan_soc_state, init_titan_soc, "Tectoy (licensed from Sega)", "Mega Drive 4 / Guitar Idol (set 2)", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/toaplan1.cpp b/src/mame/drivers/toaplan1.cpp
index 525d8674285..4aed7c0aac4 100644
--- a/src/mame/drivers/toaplan1.cpp
+++ b/src/mame/drivers/toaplan1.cpp
@@ -623,43 +623,43 @@ void toaplan1_rallybik_state::rallybik_main_map(address_map &map)
map(0x040000, 0x07ffff).rom();
map(0x080000, 0x083fff).ram();
map(0x0c0000, 0x0c0fff).ram().share("spriteram");
- map(0x100000, 0x100001).w(FUNC(toaplan1_rallybik_state::toaplan1_bcu_flipscreen_w));
- map(0x100002, 0x100003).rw(FUNC(toaplan1_rallybik_state::toaplan1_tileram_offs_r), FUNC(toaplan1_rallybik_state::toaplan1_tileram_offs_w));
- map(0x100004, 0x100007).rw(FUNC(toaplan1_rallybik_state::rallybik_tileram16_r), FUNC(toaplan1_rallybik_state::toaplan1_tileram16_w));
- map(0x100010, 0x10001f).rw(FUNC(toaplan1_rallybik_state::toaplan1_scroll_regs_r), FUNC(toaplan1_rallybik_state::toaplan1_scroll_regs_w));
+ map(0x100001, 0x100001).w(FUNC(toaplan1_rallybik_state::bcu_flipscreen_w));
+ map(0x100002, 0x100003).rw(FUNC(toaplan1_rallybik_state::tileram_offs_r), FUNC(toaplan1_rallybik_state::tileram_offs_w));
+ map(0x100004, 0x100007).rw(FUNC(toaplan1_rallybik_state::tileram_r), FUNC(toaplan1_rallybik_state::tileram_w));
+ map(0x100010, 0x10001f).rw(FUNC(toaplan1_rallybik_state::scroll_regs_r), FUNC(toaplan1_rallybik_state::scroll_regs_w));
map(0x140000, 0x140001).portr("VBLANK");
-// AM_RANGE(0x140000, 0x140001) AM_WRITE(?? video frame related ??)
- map(0x140002, 0x140003).w(FUNC(toaplan1_rallybik_state::toaplan1_intenable_w));
- map(0x140008, 0x14000f).w(FUNC(toaplan1_rallybik_state::toaplan1_bcu_control_w));
- map(0x144000, 0x1447ff).ram().w(FUNC(toaplan1_rallybik_state::toaplan1_bgpalette_w)).share("bgpalette");
- map(0x146000, 0x1467ff).ram().w(FUNC(toaplan1_rallybik_state::toaplan1_fgpalette_w)).share("fgpalette");
- map(0x180000, 0x180fff).rw(FUNC(toaplan1_rallybik_state::toaplan1_shared_r), FUNC(toaplan1_rallybik_state::toaplan1_shared_w));
- map(0x1c0000, 0x1c0003).w(FUNC(toaplan1_rallybik_state::toaplan1_tile_offsets_w));
- map(0x1c8000, 0x1c8001).w(FUNC(toaplan1_rallybik_state::toaplan1_reset_sound_w));
+// map(0x140000, 0x140001).w(?? video frame related ??)
+ map(0x140003, 0x140003).w(FUNC(toaplan1_rallybik_state::intenable_w));
+ map(0x140008, 0x14000f).w(FUNC(toaplan1_rallybik_state::bcu_control_w));
+ map(0x144000, 0x1447ff).ram().w(FUNC(toaplan1_rallybik_state::bgpalette_w)).share("bgpalette");
+ map(0x146000, 0x1467ff).ram().w(FUNC(toaplan1_rallybik_state::fgpalette_w)).share("fgpalette");
+ map(0x180000, 0x180fff).rw(FUNC(toaplan1_rallybik_state::shared_r), FUNC(toaplan1_rallybik_state::shared_w)).umask16(0x00ff);
+ map(0x1c0000, 0x1c0003).w(FUNC(toaplan1_rallybik_state::tile_offsets_w));
+ map(0x1c8001, 0x1c8001).w(FUNC(toaplan1_rallybik_state::reset_sound_w));
}
void toaplan1_state::truxton_main_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
map(0x080000, 0x083fff).ram();
- map(0x0c0000, 0x0c0001).r(FUNC(toaplan1_state::toaplan1_frame_done_r));
- map(0x0c0002, 0x0c0003).rw(FUNC(toaplan1_state::toaplan1_spriteram_offs_r), FUNC(toaplan1_state::toaplan1_spriteram_offs_w));
- map(0x0c0004, 0x0c0005).rw(FUNC(toaplan1_state::toaplan1_spriteram16_r), FUNC(toaplan1_state::toaplan1_spriteram16_w));
- map(0x0c0006, 0x0c0007).rw(FUNC(toaplan1_state::toaplan1_spritesizeram16_r), FUNC(toaplan1_state::toaplan1_spritesizeram16_w));
- map(0x100000, 0x100001).w(FUNC(toaplan1_state::toaplan1_bcu_flipscreen_w));
- map(0x100002, 0x100003).rw(FUNC(toaplan1_state::toaplan1_tileram_offs_r), FUNC(toaplan1_state::toaplan1_tileram_offs_w));
- map(0x100004, 0x100007).rw(FUNC(toaplan1_state::toaplan1_tileram16_r), FUNC(toaplan1_state::toaplan1_tileram16_w));
- map(0x100010, 0x10001f).rw(FUNC(toaplan1_state::toaplan1_scroll_regs_r), FUNC(toaplan1_state::toaplan1_scroll_regs_w));
+ map(0x0c0000, 0x0c0001).r(FUNC(toaplan1_state::frame_done_r));
+ map(0x0c0002, 0x0c0003).rw(FUNC(toaplan1_state::spriteram_offs_r), FUNC(toaplan1_state::spriteram_offs_w));
+ map(0x0c0004, 0x0c0005).rw(FUNC(toaplan1_state::spriteram_r), FUNC(toaplan1_state::spriteram_w));
+ map(0x0c0006, 0x0c0007).rw(FUNC(toaplan1_state::spritesizeram_r), FUNC(toaplan1_state::spritesizeram_w));
+ map(0x100001, 0x100001).w(FUNC(toaplan1_state::bcu_flipscreen_w));
+ map(0x100002, 0x100003).rw(FUNC(toaplan1_state::tileram_offs_r), FUNC(toaplan1_state::tileram_offs_w));
+ map(0x100004, 0x100007).rw(FUNC(toaplan1_state::tileram_r), FUNC(toaplan1_state::tileram_w));
+ map(0x100010, 0x10001f).rw(FUNC(toaplan1_state::scroll_regs_r), FUNC(toaplan1_state::scroll_regs_w));
map(0x140000, 0x140001).portr("VBLANK");
-// AM_RANGE(0x140000, 0x140001) AM_WRITE(?? video frame related ??)
- map(0x140002, 0x140003).w(FUNC(toaplan1_state::toaplan1_intenable_w));
- map(0x140008, 0x14000f).w(FUNC(toaplan1_state::toaplan1_bcu_control_w));
- map(0x144000, 0x1447ff).ram().w(FUNC(toaplan1_state::toaplan1_bgpalette_w)).share("bgpalette");
- map(0x146000, 0x1467ff).ram().w(FUNC(toaplan1_state::toaplan1_fgpalette_w)).share("fgpalette");
- map(0x180000, 0x180fff).rw(FUNC(toaplan1_state::toaplan1_shared_r), FUNC(toaplan1_state::toaplan1_shared_w));
- map(0x1c0000, 0x1c0003).w(FUNC(toaplan1_state::toaplan1_tile_offsets_w));
- map(0x1c0006, 0x1c0007).w(FUNC(toaplan1_state::toaplan1_fcu_flipscreen_w));
- map(0x1d0000, 0x1d0001).w(FUNC(toaplan1_state::toaplan1_reset_sound_w));
+// map(0x140000, 0x140001).w(?? video frame related ??)
+ map(0x140003, 0x140003).w(FUNC(toaplan1_state::intenable_w));
+ map(0x140008, 0x14000f).w(FUNC(toaplan1_state::bcu_control_w));
+ map(0x144000, 0x1447ff).ram().w(FUNC(toaplan1_state::bgpalette_w)).share("bgpalette");
+ map(0x146000, 0x1467ff).ram().w(FUNC(toaplan1_state::fgpalette_w)).share("fgpalette");
+ map(0x180000, 0x180fff).rw(FUNC(toaplan1_state::shared_r), FUNC(toaplan1_state::shared_w)).umask16(0x00ff);
+ map(0x1c0000, 0x1c0003).w(FUNC(toaplan1_state::tile_offsets_w));
+ map(0x1c0006, 0x1c0006).w(FUNC(toaplan1_state::fcu_flipscreen_w));
+ map(0x1d0001, 0x1d0001).w(FUNC(toaplan1_state::reset_sound_w));
}
void toaplan1_state::hellfire_main_map(address_map &map)
@@ -667,23 +667,23 @@ void toaplan1_state::hellfire_main_map(address_map &map)
map(0x000000, 0x03ffff).rom();
map(0x040000, 0x047fff).ram();
map(0x080000, 0x080001).portr("VBLANK");
-// AM_RANGE(0x080000, 0x080001) AM_WRITE(?? video frame related ??)
- map(0x080002, 0x080003).w(FUNC(toaplan1_state::toaplan1_intenable_w));
- map(0x080008, 0x08000f).w(FUNC(toaplan1_state::toaplan1_bcu_control_w));
- map(0x084000, 0x0847ff).ram().w(FUNC(toaplan1_state::toaplan1_bgpalette_w)).share("bgpalette");
- map(0x086000, 0x0867ff).ram().w(FUNC(toaplan1_state::toaplan1_fgpalette_w)).share("fgpalette");
- map(0x0c0000, 0x0c0fff).rw(FUNC(toaplan1_state::toaplan1_shared_r), FUNC(toaplan1_state::toaplan1_shared_w));
- map(0x100000, 0x100001).w(FUNC(toaplan1_state::toaplan1_bcu_flipscreen_w));
- map(0x100002, 0x100003).rw(FUNC(toaplan1_state::toaplan1_tileram_offs_r), FUNC(toaplan1_state::toaplan1_tileram_offs_w));
- map(0x100004, 0x100007).rw(FUNC(toaplan1_state::toaplan1_tileram16_r), FUNC(toaplan1_state::toaplan1_tileram16_w));
- map(0x100010, 0x10001f).rw(FUNC(toaplan1_state::toaplan1_scroll_regs_r), FUNC(toaplan1_state::toaplan1_scroll_regs_w));
- map(0x140000, 0x140001).r(FUNC(toaplan1_state::toaplan1_frame_done_r));
- map(0x140002, 0x140003).rw(FUNC(toaplan1_state::toaplan1_spriteram_offs_r), FUNC(toaplan1_state::toaplan1_spriteram_offs_w));
- map(0x140004, 0x140005).rw(FUNC(toaplan1_state::toaplan1_spriteram16_r), FUNC(toaplan1_state::toaplan1_spriteram16_w));
- map(0x140006, 0x140007).rw(FUNC(toaplan1_state::toaplan1_spritesizeram16_r), FUNC(toaplan1_state::toaplan1_spritesizeram16_w));
- map(0x180000, 0x180003).w(FUNC(toaplan1_state::toaplan1_tile_offsets_w));
- map(0x180006, 0x180007).w(FUNC(toaplan1_state::toaplan1_fcu_flipscreen_w));
- map(0x180008, 0x180009).w(FUNC(toaplan1_state::toaplan1_reset_sound_w));
+// map(0x080000, 0x080001).w(?? video frame related ??)
+ map(0x080003, 0x080003).w(FUNC(toaplan1_state::intenable_w));
+ map(0x080008, 0x08000f).w(FUNC(toaplan1_state::bcu_control_w));
+ map(0x084000, 0x0847ff).ram().w(FUNC(toaplan1_state::bgpalette_w)).share("bgpalette");
+ map(0x086000, 0x0867ff).ram().w(FUNC(toaplan1_state::fgpalette_w)).share("fgpalette");
+ map(0x0c0000, 0x0c0fff).rw(FUNC(toaplan1_state::shared_r), FUNC(toaplan1_state::shared_w)).umask16(0x00ff);
+ map(0x100001, 0x100001).w(FUNC(toaplan1_state::bcu_flipscreen_w));
+ map(0x100002, 0x100003).rw(FUNC(toaplan1_state::tileram_offs_r), FUNC(toaplan1_state::tileram_offs_w));
+ map(0x100004, 0x100007).rw(FUNC(toaplan1_state::tileram_r), FUNC(toaplan1_state::tileram_w));
+ map(0x100010, 0x10001f).rw(FUNC(toaplan1_state::scroll_regs_r), FUNC(toaplan1_state::scroll_regs_w));
+ map(0x140000, 0x140001).r(FUNC(toaplan1_state::frame_done_r));
+ map(0x140002, 0x140003).rw(FUNC(toaplan1_state::spriteram_offs_r), FUNC(toaplan1_state::spriteram_offs_w));
+ map(0x140004, 0x140005).rw(FUNC(toaplan1_state::spriteram_r), FUNC(toaplan1_state::spriteram_w));
+ map(0x140006, 0x140007).rw(FUNC(toaplan1_state::spritesizeram_r), FUNC(toaplan1_state::spritesizeram_w));
+ map(0x180000, 0x180003).w(FUNC(toaplan1_state::tile_offsets_w));
+ map(0x180006, 0x180006).w(FUNC(toaplan1_state::fcu_flipscreen_w));
+ map(0x180009, 0x180009).w(FUNC(toaplan1_state::reset_sound_w));
}
void toaplan1_state::zerowing_main_map(address_map &map)
@@ -691,156 +691,156 @@ void toaplan1_state::zerowing_main_map(address_map &map)
map(0x000000, 0x00ffff).rom();
map(0x040000, 0x07ffff).rom();
map(0x080000, 0x087fff).ram();
- map(0x0c0000, 0x0c0003).w(FUNC(toaplan1_state::toaplan1_tile_offsets_w));
- map(0x0c0006, 0x0c0007).w(FUNC(toaplan1_state::toaplan1_fcu_flipscreen_w));
+ map(0x0c0000, 0x0c0003).w(FUNC(toaplan1_state::tile_offsets_w));
+ map(0x0c0006, 0x0c0006).w(FUNC(toaplan1_state::fcu_flipscreen_w));
map(0x400000, 0x400001).portr("VBLANK");
-// AM_RANGE(0x400000, 0x400001) AM_WRITE(?? video frame related ??)
- map(0x400002, 0x400003).w(FUNC(toaplan1_state::toaplan1_intenable_w));
- map(0x400008, 0x40000f).w(FUNC(toaplan1_state::toaplan1_bcu_control_w));
- map(0x404000, 0x4047ff).ram().w(FUNC(toaplan1_state::toaplan1_bgpalette_w)).share("bgpalette");
- map(0x406000, 0x4067ff).ram().w(FUNC(toaplan1_state::toaplan1_fgpalette_w)).share("fgpalette");
- map(0x440000, 0x440fff).rw(FUNC(toaplan1_state::toaplan1_shared_r), FUNC(toaplan1_state::toaplan1_shared_w));
- map(0x480000, 0x480001).w(FUNC(toaplan1_state::toaplan1_bcu_flipscreen_w));
- map(0x480002, 0x480003).rw(FUNC(toaplan1_state::toaplan1_tileram_offs_r), FUNC(toaplan1_state::toaplan1_tileram_offs_w));
- map(0x480004, 0x480007).rw(FUNC(toaplan1_state::toaplan1_tileram16_r), FUNC(toaplan1_state::toaplan1_tileram16_w));
- map(0x480010, 0x48001f).rw(FUNC(toaplan1_state::toaplan1_scroll_regs_r), FUNC(toaplan1_state::toaplan1_scroll_regs_w));
- map(0x4c0000, 0x4c0001).r(FUNC(toaplan1_state::toaplan1_frame_done_r));
- map(0x4c0002, 0x4c0003).rw(FUNC(toaplan1_state::toaplan1_spriteram_offs_r), FUNC(toaplan1_state::toaplan1_spriteram_offs_w));
- map(0x4c0004, 0x4c0005).rw(FUNC(toaplan1_state::toaplan1_spriteram16_r), FUNC(toaplan1_state::toaplan1_spriteram16_w));
- map(0x4c0006, 0x4c0007).rw(FUNC(toaplan1_state::toaplan1_spritesizeram16_r), FUNC(toaplan1_state::toaplan1_spritesizeram16_w));
+// map(0x400000, 0x400001).w(?? video frame related ??)
+ map(0x400003, 0x400003).w(FUNC(toaplan1_state::intenable_w));
+ map(0x400008, 0x40000f).w(FUNC(toaplan1_state::bcu_control_w));
+ map(0x404000, 0x4047ff).ram().w(FUNC(toaplan1_state::bgpalette_w)).share("bgpalette");
+ map(0x406000, 0x4067ff).ram().w(FUNC(toaplan1_state::fgpalette_w)).share("fgpalette");
+ map(0x440000, 0x440fff).rw(FUNC(toaplan1_state::shared_r), FUNC(toaplan1_state::shared_w)).umask16(0x00ff);
+ map(0x480001, 0x480001).w(FUNC(toaplan1_state::bcu_flipscreen_w));
+ map(0x480002, 0x480003).rw(FUNC(toaplan1_state::tileram_offs_r), FUNC(toaplan1_state::tileram_offs_w));
+ map(0x480004, 0x480007).rw(FUNC(toaplan1_state::tileram_r), FUNC(toaplan1_state::tileram_w));
+ map(0x480010, 0x48001f).rw(FUNC(toaplan1_state::scroll_regs_r), FUNC(toaplan1_state::scroll_regs_w));
+ map(0x4c0000, 0x4c0001).r(FUNC(toaplan1_state::frame_done_r));
+ map(0x4c0002, 0x4c0003).rw(FUNC(toaplan1_state::spriteram_offs_r), FUNC(toaplan1_state::spriteram_offs_w));
+ map(0x4c0004, 0x4c0005).rw(FUNC(toaplan1_state::spriteram_r), FUNC(toaplan1_state::spriteram_w));
+ map(0x4c0006, 0x4c0007).rw(FUNC(toaplan1_state::spritesizeram_r), FUNC(toaplan1_state::spritesizeram_w));
}
-void toaplan1_state::demonwld_main_map(address_map &map)
+void toaplan1_demonwld_state::main_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
map(0x400000, 0x400001).portr("VBLANK");
-// AM_RANGE(0x400000, 0x400001) AM_WRITE(?? video frame related ??)
- map(0x400002, 0x400003).w(FUNC(toaplan1_state::toaplan1_intenable_w));
- map(0x400008, 0x40000f).w(FUNC(toaplan1_state::toaplan1_bcu_control_w));
- map(0x404000, 0x4047ff).ram().w(FUNC(toaplan1_state::toaplan1_bgpalette_w)).share("bgpalette");
- map(0x406000, 0x4067ff).ram().w(FUNC(toaplan1_state::toaplan1_fgpalette_w)).share("fgpalette");
- map(0x600000, 0x600fff).rw(FUNC(toaplan1_state::toaplan1_shared_r), FUNC(toaplan1_state::toaplan1_shared_w));
- map(0x800000, 0x800001).w(FUNC(toaplan1_state::toaplan1_bcu_flipscreen_w));
- map(0x800002, 0x800003).rw(FUNC(toaplan1_state::toaplan1_tileram_offs_r), FUNC(toaplan1_state::toaplan1_tileram_offs_w));
- map(0x800004, 0x800007).rw(FUNC(toaplan1_state::toaplan1_tileram16_r), FUNC(toaplan1_state::toaplan1_tileram16_w));
- map(0x800010, 0x80001f).rw(FUNC(toaplan1_state::toaplan1_scroll_regs_r), FUNC(toaplan1_state::toaplan1_scroll_regs_w));
- map(0xa00000, 0xa00001).r(FUNC(toaplan1_state::toaplan1_frame_done_r));
- map(0xa00002, 0xa00003).rw(FUNC(toaplan1_state::toaplan1_spriteram_offs_r), FUNC(toaplan1_state::toaplan1_spriteram_offs_w));
- map(0xa00004, 0xa00005).rw(FUNC(toaplan1_state::toaplan1_spriteram16_r), FUNC(toaplan1_state::toaplan1_spriteram16_w));
- map(0xa00006, 0xa00007).rw(FUNC(toaplan1_state::toaplan1_spritesizeram16_r), FUNC(toaplan1_state::toaplan1_spritesizeram16_w));
+// map(0x400000, 0x400001).w(?? video frame related ??)
+ map(0x400003, 0x400003).w(FUNC(toaplan1_demonwld_state::intenable_w));
+ map(0x400008, 0x40000f).w(FUNC(toaplan1_demonwld_state::bcu_control_w));
+ map(0x404000, 0x4047ff).ram().w(FUNC(toaplan1_demonwld_state::bgpalette_w)).share("bgpalette");
+ map(0x406000, 0x4067ff).ram().w(FUNC(toaplan1_demonwld_state::fgpalette_w)).share("fgpalette");
+ map(0x600000, 0x600fff).rw(FUNC(toaplan1_demonwld_state::shared_r), FUNC(toaplan1_demonwld_state::shared_w)).umask16(0x00ff);
+ map(0x800001, 0x800001).w(FUNC(toaplan1_demonwld_state::bcu_flipscreen_w));
+ map(0x800002, 0x800003).rw(FUNC(toaplan1_demonwld_state::tileram_offs_r), FUNC(toaplan1_demonwld_state::tileram_offs_w));
+ map(0x800004, 0x800007).rw(FUNC(toaplan1_demonwld_state::tileram_r), FUNC(toaplan1_demonwld_state::tileram_w));
+ map(0x800010, 0x80001f).rw(FUNC(toaplan1_demonwld_state::scroll_regs_r), FUNC(toaplan1_demonwld_state::scroll_regs_w));
+ map(0xa00000, 0xa00001).r(FUNC(toaplan1_demonwld_state::frame_done_r));
+ map(0xa00002, 0xa00003).rw(FUNC(toaplan1_demonwld_state::spriteram_offs_r), FUNC(toaplan1_demonwld_state::spriteram_offs_w));
+ map(0xa00004, 0xa00005).rw(FUNC(toaplan1_demonwld_state::spriteram_r), FUNC(toaplan1_demonwld_state::spriteram_w));
+ map(0xa00006, 0xa00007).rw(FUNC(toaplan1_demonwld_state::spritesizeram_r), FUNC(toaplan1_demonwld_state::spritesizeram_w));
map(0xc00000, 0xc03fff).ram();
- map(0xe00000, 0xe00003).w(FUNC(toaplan1_state::toaplan1_tile_offsets_w));
- map(0xe00006, 0xe00007).w(FUNC(toaplan1_state::toaplan1_fcu_flipscreen_w));
- map(0xe00008, 0xe00009).w(FUNC(toaplan1_state::toaplan1_reset_sound_w));
- map(0xe0000a, 0xe0000b).w(FUNC(toaplan1_state::demonwld_dsp_ctrl_w)); /* DSP Comms control */
+ map(0xe00000, 0xe00003).w(FUNC(toaplan1_demonwld_state::tile_offsets_w));
+ map(0xe00006, 0xe00006).w(FUNC(toaplan1_demonwld_state::fcu_flipscreen_w));
+ map(0xe00009, 0xe00009).w(FUNC(toaplan1_demonwld_state::reset_sound_w));
+ map(0xe0000b, 0xe0000b).w(FUNC(toaplan1_demonwld_state::dsp_ctrl_w)); /* DSP Comms control */
}
-void toaplan1_state::samesame_main_map(address_map &map)
+void toaplan1_samesame_state::main_map(address_map &map)
{
map(0x000000, 0x00ffff).rom();
map(0x040000, 0x07ffff).rom();
- map(0x080000, 0x080003).w(FUNC(toaplan1_state::toaplan1_tile_offsets_w));
- map(0x080006, 0x080007).w(FUNC(toaplan1_state::toaplan1_fcu_flipscreen_w));
+ map(0x080000, 0x080003).w(FUNC(toaplan1_samesame_state::tile_offsets_w));
+ map(0x080006, 0x080006).w(FUNC(toaplan1_samesame_state::fcu_flipscreen_w));
map(0x0c0000, 0x0c3fff).ram(); /* Frame done at $c1ada */
map(0x100000, 0x100001).portr("VBLANK");
-// AM_RANGE(0x100000, 0x100001) AM_WRITE(?? video frame related ??)
- map(0x100002, 0x100003).w(FUNC(toaplan1_state::toaplan1_intenable_w));
- map(0x100008, 0x10000f).w(FUNC(toaplan1_state::toaplan1_bcu_control_w));
- map(0x104000, 0x1047ff).ram().w(FUNC(toaplan1_state::toaplan1_bgpalette_w)).share("bgpalette");
- map(0x106000, 0x1067ff).ram().w(FUNC(toaplan1_state::toaplan1_fgpalette_w)).share("fgpalette");
+// map(0x100000, 0x100001).w(?? video frame related ??)
+ map(0x100003, 0x100003).w(FUNC(toaplan1_samesame_state::intenable_w));
+ map(0x100008, 0x10000f).w(FUNC(toaplan1_samesame_state::bcu_control_w));
+ map(0x104000, 0x1047ff).ram().w(FUNC(toaplan1_samesame_state::bgpalette_w)).share("bgpalette");
+ map(0x106000, 0x1067ff).ram().w(FUNC(toaplan1_samesame_state::fgpalette_w)).share("fgpalette");
map(0x140000, 0x140001).portr("P1");
map(0x140002, 0x140003).portr("P2");
map(0x140004, 0x140005).portr("DSWA");
map(0x140006, 0x140007).portr("DSWB");
map(0x140008, 0x140009).portr("SYSTEM");
- map(0x14000a, 0x14000b).r(FUNC(toaplan1_state::samesame_port_6_word_r)); /* Territory, and MCU ready */
- map(0x14000c, 0x14000d).w(FUNC(toaplan1_state::samesame_coin_w)); /* Coin counter/lockout */
- map(0x14000e, 0x14000f).w(FUNC(toaplan1_state::samesame_mcu_w)); /* Commands sent to HD647180 */
- map(0x180000, 0x180001).w(FUNC(toaplan1_state::toaplan1_bcu_flipscreen_w));
- map(0x180002, 0x180003).rw(FUNC(toaplan1_state::toaplan1_tileram_offs_r), FUNC(toaplan1_state::toaplan1_tileram_offs_w));
- map(0x180004, 0x180007).rw(FUNC(toaplan1_state::toaplan1_tileram16_r), FUNC(toaplan1_state::toaplan1_tileram16_w));
- map(0x180010, 0x18001f).rw(FUNC(toaplan1_state::toaplan1_scroll_regs_r), FUNC(toaplan1_state::toaplan1_scroll_regs_w));
- map(0x1c0000, 0x1c0001).r(FUNC(toaplan1_state::toaplan1_frame_done_r));
-// AM_RANGE(0x1c0000, 0x1c0001) AM_WRITE(?? disable sprite refresh ??)
- map(0x1c0002, 0x1c0003).rw(FUNC(toaplan1_state::toaplan1_spriteram_offs_r), FUNC(toaplan1_state::toaplan1_spriteram_offs_w));
- map(0x1c0004, 0x1c0005).rw(FUNC(toaplan1_state::toaplan1_spriteram16_r), FUNC(toaplan1_state::toaplan1_spriteram16_w));
- map(0x1c0006, 0x1c0007).rw(FUNC(toaplan1_state::toaplan1_spritesizeram16_r), FUNC(toaplan1_state::toaplan1_spritesizeram16_w));
+ map(0x14000b, 0x14000b).r(FUNC(toaplan1_samesame_state::port_6_word_r)); /* Territory, and MCU ready */
+ map(0x14000d, 0x14000d).w(FUNC(toaplan1_samesame_state::coin_w)); /* Coin counter/lockout */
+ map(0x14000f, 0x14000f).w(FUNC(toaplan1_samesame_state::mcu_w)); /* Commands sent to HD647180 */
+ map(0x180001, 0x180001).w(FUNC(toaplan1_samesame_state::bcu_flipscreen_w));
+ map(0x180002, 0x180003).rw(FUNC(toaplan1_samesame_state::tileram_offs_r), FUNC(toaplan1_samesame_state::tileram_offs_w));
+ map(0x180004, 0x180007).rw(FUNC(toaplan1_samesame_state::tileram_r), FUNC(toaplan1_samesame_state::tileram_w));
+ map(0x180010, 0x18001f).rw(FUNC(toaplan1_samesame_state::scroll_regs_r), FUNC(toaplan1_samesame_state::scroll_regs_w));
+ map(0x1c0000, 0x1c0001).r(FUNC(toaplan1_samesame_state::frame_done_r));
+// map(0x1c0000, 0x1c0001).w(?? disable sprite refresh ??)
+ map(0x1c0002, 0x1c0003).rw(FUNC(toaplan1_samesame_state::spriteram_offs_r), FUNC(toaplan1_samesame_state::spriteram_offs_w));
+ map(0x1c0004, 0x1c0005).rw(FUNC(toaplan1_samesame_state::spriteram_r), FUNC(toaplan1_samesame_state::spriteram_w));
+ map(0x1c0006, 0x1c0007).rw(FUNC(toaplan1_samesame_state::spritesizeram_r), FUNC(toaplan1_samesame_state::spritesizeram_w));
}
void toaplan1_state::outzone_main_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
- map(0x100000, 0x100001).r(FUNC(toaplan1_state::toaplan1_frame_done_r));
- map(0x100002, 0x100003).rw(FUNC(toaplan1_state::toaplan1_spriteram_offs_r), FUNC(toaplan1_state::toaplan1_spriteram_offs_w));
- map(0x100004, 0x100005).rw(FUNC(toaplan1_state::toaplan1_spriteram16_r), FUNC(toaplan1_state::toaplan1_spriteram16_w));
- map(0x100006, 0x100007).rw(FUNC(toaplan1_state::toaplan1_spritesizeram16_r), FUNC(toaplan1_state::toaplan1_spritesizeram16_w));
- map(0x140000, 0x140fff).rw(FUNC(toaplan1_state::toaplan1_shared_r), FUNC(toaplan1_state::toaplan1_shared_w));
- map(0x200000, 0x200001).w(FUNC(toaplan1_state::toaplan1_bcu_flipscreen_w));
- map(0x200002, 0x200003).rw(FUNC(toaplan1_state::toaplan1_tileram_offs_r), FUNC(toaplan1_state::toaplan1_tileram_offs_w));
- map(0x200004, 0x200007).rw(FUNC(toaplan1_state::toaplan1_tileram16_r), FUNC(toaplan1_state::toaplan1_tileram16_w));
- map(0x200010, 0x20001f).rw(FUNC(toaplan1_state::toaplan1_scroll_regs_r), FUNC(toaplan1_state::toaplan1_scroll_regs_w));
+ map(0x100000, 0x100001).r(FUNC(toaplan1_state::frame_done_r));
+ map(0x100002, 0x100003).rw(FUNC(toaplan1_state::spriteram_offs_r), FUNC(toaplan1_state::spriteram_offs_w));
+ map(0x100004, 0x100005).rw(FUNC(toaplan1_state::spriteram_r), FUNC(toaplan1_state::spriteram_w));
+ map(0x100006, 0x100007).rw(FUNC(toaplan1_state::spritesizeram_r), FUNC(toaplan1_state::spritesizeram_w));
+ map(0x140000, 0x140fff).rw(FUNC(toaplan1_state::shared_r), FUNC(toaplan1_state::shared_w)).umask16(0x00ff);
+ map(0x200001, 0x200001).w(FUNC(toaplan1_state::bcu_flipscreen_w));
+ map(0x200002, 0x200003).rw(FUNC(toaplan1_state::tileram_offs_r), FUNC(toaplan1_state::tileram_offs_w));
+ map(0x200004, 0x200007).rw(FUNC(toaplan1_state::tileram_r), FUNC(toaplan1_state::tileram_w));
+ map(0x200010, 0x20001f).rw(FUNC(toaplan1_state::scroll_regs_r), FUNC(toaplan1_state::scroll_regs_w));
map(0x240000, 0x243fff).ram();
map(0x300000, 0x300001).portr("VBLANK");
-// AM_RANGE(0x300000, 0x300001) AM_WRITE(?? video frame related ??)
- map(0x300002, 0x300003).w(FUNC(toaplan1_state::toaplan1_intenable_w));
- map(0x300008, 0x30000f).w(FUNC(toaplan1_state::toaplan1_bcu_control_w));
- map(0x304000, 0x3047ff).ram().w(FUNC(toaplan1_state::toaplan1_bgpalette_w)).share("bgpalette");
- map(0x306000, 0x3067ff).ram().w(FUNC(toaplan1_state::toaplan1_fgpalette_w)).share("fgpalette");
- map(0x340000, 0x340003).w(FUNC(toaplan1_state::toaplan1_tile_offsets_w));
- map(0x340006, 0x340007).w(FUNC(toaplan1_state::toaplan1_fcu_flipscreen_w));
+// map(0x300000, 0x300001).w(?? video frame related ??)
+ map(0x300003, 0x300003).w(FUNC(toaplan1_state::intenable_w));
+ map(0x300008, 0x30000f).w(FUNC(toaplan1_state::bcu_control_w));
+ map(0x304000, 0x3047ff).ram().w(FUNC(toaplan1_state::bgpalette_w)).share("bgpalette");
+ map(0x306000, 0x3067ff).ram().w(FUNC(toaplan1_state::fgpalette_w)).share("fgpalette");
+ map(0x340000, 0x340003).w(FUNC(toaplan1_state::tile_offsets_w));
+ map(0x340006, 0x340006).w(FUNC(toaplan1_state::fcu_flipscreen_w));
}
void toaplan1_state::outzonecv_main_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
-// AM_RANGE(0x040000, 0x07ffff) AM_ROM
+// map(0x040000, 0x07ffff).rom();
map(0x080000, 0x087fff).ram();
- map(0x0c0000, 0x0c0003).w(FUNC(toaplan1_state::toaplan1_tile_offsets_w));
- map(0x0c0006, 0x0c0007).w(FUNC(toaplan1_state::toaplan1_fcu_flipscreen_w));
+ map(0x0c0000, 0x0c0003).w(FUNC(toaplan1_state::tile_offsets_w));
+ map(0x0c0006, 0x0c0006).w(FUNC(toaplan1_state::fcu_flipscreen_w));
map(0x400000, 0x400001).portr("VBLANK");
-// AM_RANGE(0x400000, 0x400001) AM_WRITE(?? video frame related ??)
- map(0x400002, 0x400003).w(FUNC(toaplan1_state::toaplan1_intenable_w));
- map(0x400008, 0x40000f).w(FUNC(toaplan1_state::toaplan1_bcu_control_w));
- map(0x404000, 0x4047ff).ram().w(FUNC(toaplan1_state::toaplan1_bgpalette_w)).share("bgpalette");
- map(0x406000, 0x4067ff).ram().w(FUNC(toaplan1_state::toaplan1_fgpalette_w)).share("fgpalette");
- map(0x440000, 0x440fff).rw(FUNC(toaplan1_state::toaplan1_shared_r), FUNC(toaplan1_state::toaplan1_shared_w));
- map(0x480000, 0x480001).w(FUNC(toaplan1_state::toaplan1_bcu_flipscreen_w));
- map(0x480002, 0x480003).rw(FUNC(toaplan1_state::toaplan1_tileram_offs_r), FUNC(toaplan1_state::toaplan1_tileram_offs_w));
- map(0x480004, 0x480007).rw(FUNC(toaplan1_state::toaplan1_tileram16_r), FUNC(toaplan1_state::toaplan1_tileram16_w));
- map(0x480010, 0x48001f).rw(FUNC(toaplan1_state::toaplan1_scroll_regs_r), FUNC(toaplan1_state::toaplan1_scroll_regs_w));
- map(0x4c0000, 0x4c0001).r(FUNC(toaplan1_state::toaplan1_frame_done_r));
- map(0x4c0002, 0x4c0003).rw(FUNC(toaplan1_state::toaplan1_spriteram_offs_r), FUNC(toaplan1_state::toaplan1_spriteram_offs_w));
- map(0x4c0004, 0x4c0005).rw(FUNC(toaplan1_state::toaplan1_spriteram16_r), FUNC(toaplan1_state::toaplan1_spriteram16_w));
- map(0x4c0006, 0x4c0007).rw(FUNC(toaplan1_state::toaplan1_spritesizeram16_r), FUNC(toaplan1_state::toaplan1_spritesizeram16_w));
+// map(0x400000, 0x400001).w(?? video frame related ??)
+ map(0x400003, 0x400003).w(FUNC(toaplan1_state::intenable_w));
+ map(0x400008, 0x40000f).w(FUNC(toaplan1_state::bcu_control_w));
+ map(0x404000, 0x4047ff).ram().w(FUNC(toaplan1_state::bgpalette_w)).share("bgpalette");
+ map(0x406000, 0x4067ff).ram().w(FUNC(toaplan1_state::fgpalette_w)).share("fgpalette");
+ map(0x440000, 0x440fff).rw(FUNC(toaplan1_state::shared_r), FUNC(toaplan1_state::shared_w)).umask16(0x00ff);
+ map(0x480001, 0x480001).w(FUNC(toaplan1_state::bcu_flipscreen_w));
+ map(0x480002, 0x480003).rw(FUNC(toaplan1_state::tileram_offs_r), FUNC(toaplan1_state::tileram_offs_w));
+ map(0x480004, 0x480007).rw(FUNC(toaplan1_state::tileram_r), FUNC(toaplan1_state::tileram_w));
+ map(0x480010, 0x48001f).rw(FUNC(toaplan1_state::scroll_regs_r), FUNC(toaplan1_state::scroll_regs_w));
+ map(0x4c0000, 0x4c0001).r(FUNC(toaplan1_state::frame_done_r));
+ map(0x4c0002, 0x4c0003).rw(FUNC(toaplan1_state::spriteram_offs_r), FUNC(toaplan1_state::spriteram_offs_w));
+ map(0x4c0004, 0x4c0005).rw(FUNC(toaplan1_state::spriteram_r), FUNC(toaplan1_state::spriteram_w));
+ map(0x4c0006, 0x4c0007).rw(FUNC(toaplan1_state::spritesizeram_r), FUNC(toaplan1_state::spritesizeram_w));
}
void toaplan1_state::vimana_main_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
- map(0x080000, 0x080003).w(FUNC(toaplan1_state::toaplan1_tile_offsets_w));
- map(0x080006, 0x080007).w(FUNC(toaplan1_state::toaplan1_fcu_flipscreen_w));
- map(0x0c0000, 0x0c0001).r(FUNC(toaplan1_state::toaplan1_frame_done_r));
- map(0x0c0002, 0x0c0003).rw(FUNC(toaplan1_state::toaplan1_spriteram_offs_r), FUNC(toaplan1_state::toaplan1_spriteram_offs_w));
- map(0x0c0004, 0x0c0005).rw(FUNC(toaplan1_state::toaplan1_spriteram16_r), FUNC(toaplan1_state::toaplan1_spriteram16_w));
- map(0x0c0006, 0x0c0007).rw(FUNC(toaplan1_state::toaplan1_spritesizeram16_r), FUNC(toaplan1_state::toaplan1_spritesizeram16_w));
+ map(0x080000, 0x080003).w(FUNC(toaplan1_state::tile_offsets_w));
+ map(0x080006, 0x080006).w(FUNC(toaplan1_state::fcu_flipscreen_w));
+ map(0x0c0000, 0x0c0001).r(FUNC(toaplan1_state::frame_done_r));
+ map(0x0c0002, 0x0c0003).rw(FUNC(toaplan1_state::spriteram_offs_r), FUNC(toaplan1_state::spriteram_offs_w));
+ map(0x0c0004, 0x0c0005).rw(FUNC(toaplan1_state::spriteram_r), FUNC(toaplan1_state::spriteram_w));
+ map(0x0c0006, 0x0c0007).rw(FUNC(toaplan1_state::spritesizeram_r), FUNC(toaplan1_state::spritesizeram_w));
map(0x400000, 0x400001).portr("VBLANK");
-// AM_RANGE(0x400000, 0x400001) AM_WRITE(?? video frame related ??)
- map(0x400002, 0x400003).w(FUNC(toaplan1_state::toaplan1_intenable_w));
- map(0x400008, 0x40000f).w(FUNC(toaplan1_state::toaplan1_bcu_control_w));
- map(0x404000, 0x4047ff).ram().w(FUNC(toaplan1_state::toaplan1_bgpalette_w)).share("bgpalette");
- map(0x406000, 0x4067ff).ram().w(FUNC(toaplan1_state::toaplan1_fgpalette_w)).share("fgpalette");
- map(0x440000, 0x4407ff).rw(FUNC(toaplan1_state::toaplan1_shared_r), FUNC(toaplan1_state::toaplan1_shared_w)); /* inputs, coins and sound handled by 647180 MCU via this space */
+// map(0x400000, 0x400001).w(?? video frame related ??)
+ map(0x400003, 0x400003).w(FUNC(toaplan1_state::intenable_w));
+ map(0x400008, 0x40000f).w(FUNC(toaplan1_state::bcu_control_w));
+ map(0x404000, 0x4047ff).ram().w(FUNC(toaplan1_state::bgpalette_w)).share("bgpalette");
+ map(0x406000, 0x4067ff).ram().w(FUNC(toaplan1_state::fgpalette_w)).share("fgpalette");
+ map(0x440000, 0x4407ff).rw(FUNC(toaplan1_state::shared_r), FUNC(toaplan1_state::shared_w)).umask16(0x00ff); /* inputs, coins and sound handled by 647180 MCU via this space */
map(0x480000, 0x487fff).ram();
- map(0x4c0000, 0x4c0001).w(FUNC(toaplan1_state::toaplan1_bcu_flipscreen_w));
- map(0x4c0002, 0x4c0003).rw(FUNC(toaplan1_state::toaplan1_tileram_offs_r), FUNC(toaplan1_state::toaplan1_tileram_offs_w));
- map(0x4c0004, 0x4c0007).rw(FUNC(toaplan1_state::toaplan1_tileram16_r), FUNC(toaplan1_state::toaplan1_tileram16_w));
- map(0x4c0010, 0x4c001f).rw(FUNC(toaplan1_state::toaplan1_scroll_regs_r), FUNC(toaplan1_state::toaplan1_scroll_regs_w));
+ map(0x4c0001, 0x4c0001).w(FUNC(toaplan1_state::bcu_flipscreen_w));
+ map(0x4c0002, 0x4c0003).rw(FUNC(toaplan1_state::tileram_offs_r), FUNC(toaplan1_state::tileram_offs_w));
+ map(0x4c0004, 0x4c0007).rw(FUNC(toaplan1_state::tileram_r), FUNC(toaplan1_state::tileram_w));
+ map(0x4c0010, 0x4c001f).rw(FUNC(toaplan1_state::scroll_regs_r), FUNC(toaplan1_state::scroll_regs_w));
}
/***************************** Z80 Memory Map *******************************/
-void toaplan1_state::toaplan1_sound_map(address_map &map)
+void toaplan1_state::sound_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0x87ff).ram().share("sharedram");
@@ -864,7 +864,7 @@ void toaplan1_state::truxton_sound_io_map(address_map &map)
map(0x00, 0x00).portr("P1");
map(0x10, 0x10).portr("P2");
map(0x20, 0x20).portr("SYSTEM");
- map(0x30, 0x30).w(FUNC(toaplan1_state::toaplan1_coin_w)); /* Coin counter/lockout */
+ map(0x30, 0x30).w(FUNC(toaplan1_state::coin_w)); /* Coin counter/lockout */
map(0x40, 0x40).portr("DSWA");
map(0x50, 0x50).portr("DSWB");
map(0x60, 0x61).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write));
@@ -877,7 +877,7 @@ void toaplan1_state::hellfire_sound_io_map(address_map &map)
map(0x00, 0x00).portr("DSWA");
map(0x10, 0x10).portr("DSWB");
map(0x20, 0x20).portr("TJUMP");
- map(0x30, 0x30).w(FUNC(toaplan1_state::toaplan1_coin_w)); /* Coin counter/lockout */
+ map(0x30, 0x30).w(FUNC(toaplan1_state::coin_w)); /* Coin counter/lockout */
map(0x40, 0x40).portr("P1");
map(0x50, 0x50).portr("P2");
map(0x60, 0x60).portr("SYSTEM");
@@ -893,16 +893,16 @@ void toaplan1_state::zerowing_sound_io_map(address_map &map)
map(0x28, 0x28).portr("DSWB");
map(0x80, 0x80).portr("SYSTEM");
map(0x88, 0x88).portr("TJUMP");
- map(0xa0, 0xa0).w(FUNC(toaplan1_state::toaplan1_coin_w)); /* Coin counter/lockout */
+ map(0xa0, 0xa0).w(FUNC(toaplan1_state::coin_w)); /* Coin counter/lockout */
map(0xa8, 0xa9).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write));
}
-void toaplan1_state::demonwld_sound_io_map(address_map &map)
+void toaplan1_demonwld_state::sound_io_map(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x01).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write));
map(0x20, 0x20).portr("TJUMP");
- map(0x40, 0x40).w(FUNC(toaplan1_state::toaplan1_coin_w)); /* Coin counter/lockout */
+ map(0x40, 0x40).w(FUNC(toaplan1_demonwld_state::coin_w)); /* Coin counter/lockout */
map(0x60, 0x60).portr("SYSTEM");
map(0x80, 0x80).portr("P1");
map(0xa0, 0xa0).portr("DSWB");
@@ -914,7 +914,7 @@ void toaplan1_state::outzone_sound_io_map(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x01).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write));
- map(0x04, 0x04).w(FUNC(toaplan1_state::toaplan1_coin_w)); /* Coin counter/lockout */
+ map(0x04, 0x04).w(FUNC(toaplan1_state::coin_w)); /* Coin counter/lockout */
map(0x08, 0x08).portr("DSWA");
map(0x0c, 0x0c).portr("DSWB");
map(0x10, 0x10).portr("SYSTEM");
@@ -926,18 +926,18 @@ void toaplan1_state::outzone_sound_io_map(address_map &map)
/***************************** TMS32010 Memory Map **************************/
-void toaplan1_state::dsp_program_map(address_map &map)
+void toaplan1_demonwld_state::dsp_program_map(address_map &map)
{
map(0x000, 0x7ff).rom();
}
/* $000 - 08F TMS32010 Internal Data RAM in Data Address Space */
-void toaplan1_state::dsp_io_map(address_map &map)
+void toaplan1_demonwld_state::dsp_io_map(address_map &map)
{
- map(0, 0).w(FUNC(toaplan1_state::demonwld_dsp_addrsel_w));
- map(1, 1).rw(FUNC(toaplan1_state::demonwld_dsp_r), FUNC(toaplan1_state::demonwld_dsp_w));
- map(3, 3).w(FUNC(toaplan1_state::demonwld_dsp_bio_w));
+ map(0, 0).w(FUNC(toaplan1_demonwld_state::dsp_addrsel_w));
+ map(1, 1).rw(FUNC(toaplan1_demonwld_state::dsp_r), FUNC(toaplan1_demonwld_state::dsp_w));
+ map(3, 3).w(FUNC(toaplan1_demonwld_state::dsp_bio_w));
}
@@ -976,57 +976,57 @@ void toaplan1_state::vimana_hd647180_io_map(address_map &map)
map(0x81, 0x81).portr("P2");
map(0x82, 0x82).portr("DSWA");
map(0x83, 0x83).portr("SYSTEM");
- map(0x84, 0x84).w(FUNC(toaplan1_state::toaplan1_coin_w)); // Coin counter/lockout // needs verify
+ map(0x84, 0x84).w(FUNC(toaplan1_state::coin_w)); // Coin counter/lockout // needs verify
map(0x87, 0x87).rw("ymsnd", FUNC(ym3812_device::status_port_r), FUNC(ym3812_device::control_port_w));
map(0x8f, 0x8f).rw("ymsnd", FUNC(ym3812_device::read_port_r), FUNC(ym3812_device::write_port_w));
}
-READ8_MEMBER(toaplan1_state::vimana_dswb_invert_r)
+u8 toaplan1_state::vimana_dswb_invert_r()
{
- return ioport("DSWB")->read() ^ 0xFF;
+ return m_dswb_io->read() ^ 0xFF;
}
-READ8_MEMBER(toaplan1_state::vimana_tjump_invert_r)
+u8 toaplan1_state::vimana_tjump_invert_r()
{
- return (ioport("TJUMP")->read() ^ 0xFF)|0xC0; // high 2 bits of port G always read as 1
+ return (m_tjump_io->read() ^ 0xFF)|0xC0; // high 2 bits of port G always read as 1
}
-WRITE16_MEMBER(toaplan1_state::samesame_mcu_w)
+void toaplan1_samesame_state::mcu_w(u8 data)
{
m_to_mcu = data;
m_cmdavailable = 1;
};
-READ8_MEMBER(toaplan1_state::samesame_soundlatch_r)
+u8 toaplan1_samesame_state::soundlatch_r()
{
return m_to_mcu;
};
-WRITE8_MEMBER(toaplan1_state::samesame_sound_done_w)
+void toaplan1_samesame_state::sound_done_w(u8 data)
{
m_to_mcu = data;
m_cmdavailable = 0;
}
-READ8_MEMBER(toaplan1_state::samesame_cmdavailable_r)
+u8 toaplan1_samesame_state::cmdavailable_r()
{
if (m_cmdavailable) return 0xff;
else return 0x00;
};
-void toaplan1_state::samesame_hd647180_mem_map(address_map &map)
+void toaplan1_samesame_state::hd647180_mem_map(address_map &map)
{
map(0x00000, 0x03fff).rom(); /* Internal 16k byte ROM */
map(0x0fe00, 0x0ffff).ram(); /* Internal 512 byte RAM */
}
-void toaplan1_state::samesame_hd647180_io_map(address_map &map)
+void toaplan1_samesame_state::hd647180_io_map(address_map &map)
{
map.global_mask(0xff);
- map(0x63, 0x63).r(FUNC(toaplan1_state::samesame_cmdavailable_r));
- map(0xa0, 0xa0).r(FUNC(toaplan1_state::samesame_soundlatch_r));
- map(0xb0, 0xb0).w(FUNC(toaplan1_state::samesame_sound_done_w));
+ map(0x63, 0x63).r(FUNC(toaplan1_samesame_state::cmdavailable_r));
+ map(0xa0, 0xa0).r(FUNC(toaplan1_samesame_state::soundlatch_r));
+ map(0xb0, 0xb0).w(FUNC(toaplan1_samesame_state::sound_done_w));
map(0x80, 0x80).rw("ymsnd", FUNC(ym3812_device::status_port_r), FUNC(ym3812_device::control_port_w));
map(0x81, 0x81).rw("ymsnd", FUNC(ym3812_device::read_port_r), FUNC(ym3812_device::write_port_w));
@@ -1618,6 +1618,39 @@ static INPUT_PORTS_START( samesame2 )
PORT_BIT( 0xf2, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Mask bit 2 aswell */
INPUT_PORTS_END
+static INPUT_PORTS_START( jiaojiao )
+ PORT_INCLUDE( fireshrk )
+
+ PORT_MODIFY("P2")
+ TOAPLAN1_PLAYER_INPUT( 2, IPT_UNKNOWN )
+
+ PORT_MODIFY("DSWA") /* DSW A */
+ PORT_DIPNAME( 0x30, 0x00, DEF_STR( Coin_A ) )
+ PORT_DIPSETTING( 0x30, DEF_STR( 4C_1C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x01)
+ PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x01)
+ PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x01)
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x01)
+ PORT_DIPSETTING( 0x20, DEF_STR( 2C_1C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x00)
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x00)
+ PORT_DIPSETTING( 0x30, DEF_STR( 2C_3C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x00)
+ PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x00)
+ PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coin_B ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_2C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x01)
+ PORT_DIPSETTING( 0x40, DEF_STR( 1C_3C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x01)
+ PORT_DIPSETTING( 0x80, DEF_STR( 1C_4C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x01)
+ PORT_DIPSETTING( 0xc0, DEF_STR( 1C_6C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x01)
+ PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x00)
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x00)
+ PORT_DIPSETTING( 0xc0, DEF_STR( 2C_3C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x00)
+ PORT_DIPSETTING( 0x40, DEF_STR( 1C_2C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x00)
+
+ PORT_MODIFY("TJUMP") /* Territory Jumper Block */
+ PORT_DIPNAME( 0x01, 0x00, "Coinage Style" )
+ PORT_DIPSETTING( 0x01, "Fire Shark" )
+ PORT_DIPSETTING( 0x00, "Same! Same! Same!" )
+ PORT_BIT( 0xf2, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Mask bit 2 aswell */
+INPUT_PORTS_END
+
/* verified from M68000 and Z80 code */
static INPUT_PORTS_START( outzone )
PORT_INCLUDE( toaplan1_3b )
@@ -1875,25 +1908,25 @@ static const gfx_layout tilelayout =
RGN_FRAC(1,2), /* 16384/32768 tiles */
4, /* 4 bits per pixel */
{ RGN_FRAC(1,2)+8, RGN_FRAC(1,2), 8, 0 },
- { 0, 1, 2, 3, 4, 5, 6, 7 },
- { 0, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
+ { STEP8(0,1) },
+ { STEP8(0,8*2) },
16*8 /* every tile takes 16 consecutive bytes */
};
static GFXDECODE_START( gfx_toaplan1 )
- GFXDECODE_ENTRY( "gfx1", 0x00000, tilelayout, 0, 64 )
- GFXDECODE_ENTRY( "gfx2", 0x00000, tilelayout, 64*16, 64 )
+ GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 64 )
+ GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 64*16, 64 )
GFXDECODE_END
static GFXDECODE_START( gfx_rallybik )
- GFXDECODE_ENTRY( "gfx1", 0x00000, tilelayout, 0, 64 )
+ GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 64 )
GFXDECODE_END
-#define PIXEL_CLOCK (XTAL(28'000'000)/4)
+#define PIXEL_CLOCK (XTAL(28'000'000) / 4)
-// HTOTAL and VTOTAL taken from CRTC registers (toaplan1_bcu_control_w)
+// HTOTAL and VTOTAL taken from CRTC registers (bcu_control_w)
// rallybik, demonwld and outzone program a larger VTOTAL than the other
// games, giving them a lower frame rate
@@ -1913,8 +1946,8 @@ void toaplan1_rallybik_state::rallybik(machine_config &config)
M68000(config, m_maincpu, XTAL(10'000'000));
m_maincpu->set_addrmap(AS_PROGRAM, &toaplan1_rallybik_state::rallybik_main_map);
- Z80(config, m_audiocpu, XTAL(28'000'000)/8);
- m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_rallybik_state::toaplan1_sound_map);
+ Z80(config, m_audiocpu, XTAL(28'000'000) / 8);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_rallybik_state::sound_map);
m_audiocpu->set_addrmap(AS_IO, &toaplan1_rallybik_state::rallybik_sound_io_map);
config.m_minimum_quantum = attotime::from_hz(600);
@@ -1925,14 +1958,12 @@ void toaplan1_rallybik_state::rallybik(machine_config &config)
coinlatch.q_out_cb<6>().set(FUNC(toaplan1_rallybik_state::coin_lockout_1_w));
coinlatch.q_out_cb<7>().set(FUNC(toaplan1_rallybik_state::coin_lockout_2_w));
- MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,toaplan1)
-
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL55, VBEND, VBSTART);
- m_screen->set_screen_update(FUNC(toaplan1_rallybik_state::screen_update_rallybik));
- m_screen->screen_vblank().set(FUNC(toaplan1_rallybik_state::screen_vblank_rallybik));
+ m_screen->set_screen_update(FUNC(toaplan1_rallybik_state::screen_update));
+ m_screen->screen_vblank().set(FUNC(toaplan1_rallybik_state::screen_vblank));
m_screen->set_palette(m_palette);
TOAPLAN_SCU(config, m_spritegen, 0);
@@ -1942,8 +1973,6 @@ void toaplan1_rallybik_state::rallybik(machine_config &config)
GFXDECODE(config, m_gfxdecode, m_palette, gfx_rallybik);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, (64*16)+(64*16));
- MCFG_VIDEO_START_OVERRIDE(toaplan1_rallybik_state,rallybik)
-
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -1958,31 +1987,27 @@ void toaplan1_state::truxton(machine_config &config)
M68000(config, m_maincpu, XTAL(10'000'000));
m_maincpu->set_addrmap(AS_PROGRAM, &toaplan1_state::truxton_main_map);
- Z80(config, m_audiocpu, XTAL(28'000'000)/8);
- m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::toaplan1_sound_map);
+ Z80(config, m_audiocpu, XTAL(28'000'000) / 8);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::sound_map);
m_audiocpu->set_addrmap(AS_IO, &toaplan1_state::truxton_sound_io_map);
config.m_minimum_quantum = attotime::from_hz(600);
- MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,toaplan1)
-
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART);
- m_screen->set_screen_update(FUNC(toaplan1_state::screen_update_toaplan1));
- m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank_toaplan1));
+ m_screen->set_screen_update(FUNC(toaplan1_state::screen_update));
+ m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_toaplan1);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, (64*16)+(64*16));
- MCFG_VIDEO_START_OVERRIDE(toaplan1_state,toaplan1)
-
/* sound hardware */
SPEAKER(config, "mono").front_center();
- YM3812(config, m_ymsnd, XTAL(28'000'000)/8);
+ YM3812(config, m_ymsnd, XTAL(28'000'000) / 8);
m_ymsnd->irq_handler().set_inputline(m_audiocpu, 0);
m_ymsnd->add_route(ALL_OUTPUTS, "mono", 1.0);
}
@@ -1993,31 +2018,27 @@ void toaplan1_state::hellfire(machine_config &config)
M68000(config, m_maincpu, XTAL(10'000'000));
m_maincpu->set_addrmap(AS_PROGRAM, &toaplan1_state::hellfire_main_map);
- Z80(config, m_audiocpu, XTAL(28'000'000)/8);
- m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::toaplan1_sound_map);
+ Z80(config, m_audiocpu, XTAL(28'000'000) / 8);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::sound_map);
m_audiocpu->set_addrmap(AS_IO, &toaplan1_state::hellfire_sound_io_map);
config.m_minimum_quantum = attotime::from_hz(600);
- MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,toaplan1)
-
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND+16, VBSTART+16);
- m_screen->set_screen_update(FUNC(toaplan1_state::screen_update_toaplan1));
- m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank_toaplan1));
+ m_screen->set_screen_update(FUNC(toaplan1_state::screen_update));
+ m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_toaplan1);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, (64*16)+(64*16));
- MCFG_VIDEO_START_OVERRIDE(toaplan1_state,toaplan1)
-
/* sound hardware */
SPEAKER(config, "mono").front_center();
- YM3812(config, m_ymsnd, XTAL(28'000'000)/8);
+ YM3812(config, m_ymsnd, XTAL(28'000'000) / 8);
m_ymsnd->irq_handler().set_inputline(m_audiocpu, 0);
m_ymsnd->add_route(ALL_OUTPUTS, "mono", 1.0);
}
@@ -2028,8 +2049,8 @@ void toaplan1_state::zerowing(machine_config &config)
M68000(config, m_maincpu, XTAL(10'000'000));
m_maincpu->set_addrmap(AS_PROGRAM, &toaplan1_state::zerowing_main_map);
- Z80(config, m_audiocpu, XTAL(28'000'000)/8);
- m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::toaplan1_sound_map);
+ Z80(config, m_audiocpu, XTAL(28'000'000) / 8);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::sound_map);
m_audiocpu->set_addrmap(AS_IO, &toaplan1_state::zerowing_sound_io_map);
config.m_minimum_quantum = attotime::from_hz(600);
@@ -2040,94 +2061,86 @@ void toaplan1_state::zerowing(machine_config &config)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND+16, VBSTART+16);
- m_screen->set_screen_update(FUNC(toaplan1_state::screen_update_toaplan1));
- m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank_toaplan1));
+ m_screen->set_screen_update(FUNC(toaplan1_state::screen_update));
+ m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_toaplan1);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, (64*16)+(64*16));
- MCFG_VIDEO_START_OVERRIDE(toaplan1_state,toaplan1)
-
/* sound hardware */
SPEAKER(config, "mono").front_center();
- YM3812(config, m_ymsnd, XTAL(28'000'000)/8);
+ YM3812(config, m_ymsnd, XTAL(28'000'000) / 8);
m_ymsnd->irq_handler().set_inputline(m_audiocpu, 0);
m_ymsnd->add_route(ALL_OUTPUTS, "mono", 1.0);
}
-void toaplan1_state::demonwld(machine_config &config)
+void toaplan1_demonwld_state::demonwld(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(10'000'000));
- m_maincpu->set_addrmap(AS_PROGRAM, &toaplan1_state::demonwld_main_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &toaplan1_demonwld_state::main_map);
- Z80(config, m_audiocpu, XTAL(28'000'000)/8);
- m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::toaplan1_sound_map);
- m_audiocpu->set_addrmap(AS_IO, &toaplan1_state::demonwld_sound_io_map);
+ Z80(config, m_audiocpu, XTAL(28'000'000) / 8);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_demonwld_state::sound_map);
+ m_audiocpu->set_addrmap(AS_IO, &toaplan1_demonwld_state::sound_io_map);
- TMS32010(config, m_dsp, XTAL(28'000'000)/2);
- m_dsp->set_addrmap(AS_PROGRAM, &toaplan1_state::dsp_program_map);
- m_dsp->set_addrmap(AS_IO, &toaplan1_state::dsp_io_map);
- m_dsp->bio().set(FUNC(toaplan1_state::demonwld_bio_r));
+ TMS32010(config, m_dsp, XTAL(28'000'000) / 2);
+ m_dsp->set_addrmap(AS_PROGRAM, &toaplan1_demonwld_state::dsp_program_map);
+ m_dsp->set_addrmap(AS_IO, &toaplan1_demonwld_state::dsp_io_map);
+ m_dsp->bio().set(FUNC(toaplan1_demonwld_state::bio_r));
config.m_minimum_quantum = attotime::from_hz(600);
- MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,demonwld)
-
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL55, VBEND+16, VBSTART+16);
- m_screen->set_screen_update(FUNC(toaplan1_state::screen_update_toaplan1));
- m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank_toaplan1));
+ m_screen->set_screen_update(FUNC(toaplan1_demonwld_state::screen_update));
+ m_screen->screen_vblank().set(FUNC(toaplan1_demonwld_state::screen_vblank));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_toaplan1);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, (64*16)+(64*16));
- MCFG_VIDEO_START_OVERRIDE(toaplan1_state,toaplan1)
-
/* sound hardware */
SPEAKER(config, "mono").front_center();
- YM3812(config, m_ymsnd, XTAL(28'000'000)/8);
+ YM3812(config, m_ymsnd, XTAL(28'000'000) / 8);
m_ymsnd->irq_handler().set_inputline(m_audiocpu, 0);
m_ymsnd->add_route(ALL_OUTPUTS, "mono", 1.0);
}
-void toaplan1_state::samesame(machine_config &config)
+void toaplan1_samesame_state::samesame(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(10'000'000));
- m_maincpu->set_addrmap(AS_PROGRAM, &toaplan1_state::samesame_main_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &toaplan1_samesame_state::main_map);
- Z180(config, m_audiocpu, XTAL(28'000'000)/8); /* HD647180XOFS6 CPU */
- m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::samesame_hd647180_mem_map);
- m_audiocpu->set_addrmap(AS_IO, &toaplan1_state::samesame_hd647180_io_map);
+ Z180(config, m_audiocpu, XTAL(28'000'000) / 8); /* HD647180XOFS6 CPU */
+ m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_samesame_state::hd647180_mem_map);
+ m_audiocpu->set_addrmap(AS_IO, &toaplan1_samesame_state::hd647180_io_map);
config.m_perfect_cpu_quantum = subtag("maincpu");
- MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,zerowing)
+ MCFG_MACHINE_RESET_OVERRIDE(toaplan1_samesame_state,zerowing)
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART);
- m_screen->set_screen_update(FUNC(toaplan1_state::screen_update_toaplan1));
- m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank_samesame));
+ m_screen->set_screen_update(FUNC(toaplan1_samesame_state::screen_update));
+ m_screen->screen_vblank().set(FUNC(toaplan1_samesame_state::screen_vblank));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_toaplan1);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, (64*16)+(64*16));
- MCFG_VIDEO_START_OVERRIDE(toaplan1_state,toaplan1)
-
/* sound hardware */
SPEAKER(config, "mono").front_center();
- YM3812(config, m_ymsnd, XTAL(28'000'000)/8);
+ YM3812(config, m_ymsnd, XTAL(28'000'000) / 8);
m_ymsnd->irq_handler().set_inputline(m_audiocpu, 0);
m_ymsnd->add_route(ALL_OUTPUTS, "mono", 1.0);
}
@@ -2138,8 +2151,8 @@ void toaplan1_state::outzone(machine_config &config)
M68000(config, m_maincpu, XTAL(10'000'000));
m_maincpu->set_addrmap(AS_PROGRAM, &toaplan1_state::outzone_main_map);
- Z80(config, m_audiocpu, XTAL(28'000'000)/8);
- m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::toaplan1_sound_map);
+ Z80(config, m_audiocpu, XTAL(28'000'000) / 8);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::sound_map);
m_audiocpu->set_addrmap(AS_IO, &toaplan1_state::outzone_sound_io_map);
config.m_minimum_quantum = attotime::from_hz(600);
@@ -2150,19 +2163,17 @@ void toaplan1_state::outzone(machine_config &config)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL55, VBEND, VBSTART);
- m_screen->set_screen_update(FUNC(toaplan1_state::screen_update_toaplan1));
- m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank_toaplan1));
+ m_screen->set_screen_update(FUNC(toaplan1_state::screen_update));
+ m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_toaplan1);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, (64*16)+(64*16));
- MCFG_VIDEO_START_OVERRIDE(toaplan1_state,toaplan1)
-
/* sound hardware */
SPEAKER(config, "mono").front_center();
- YM3812(config, m_ymsnd, XTAL(28'000'000)/8);
+ YM3812(config, m_ymsnd, XTAL(28'000'000) / 8);
m_ymsnd->irq_handler().set_inputline(m_audiocpu, 0);
m_ymsnd->add_route(ALL_OUTPUTS, "mono", 1.0);
}
@@ -2173,8 +2184,8 @@ void toaplan1_state::outzonecv(machine_config &config)
M68000(config, m_maincpu, XTAL(10'000'000));
m_maincpu->set_addrmap(AS_PROGRAM, &toaplan1_state::outzonecv_main_map);
- Z80(config, m_audiocpu, XTAL(28'000'000)/8);
- m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::toaplan1_sound_map);
+ Z80(config, m_audiocpu, XTAL(28'000'000) / 8);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::sound_map);
m_audiocpu->set_addrmap(AS_IO, &toaplan1_state::zerowing_sound_io_map);
config.m_minimum_quantum = attotime::from_hz(600);
@@ -2185,19 +2196,17 @@ void toaplan1_state::outzonecv(machine_config &config)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART);
- m_screen->set_screen_update(FUNC(toaplan1_state::screen_update_toaplan1));
- m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank_toaplan1));
+ m_screen->set_screen_update(FUNC(toaplan1_state::screen_update));
+ m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_toaplan1);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, (64*16)+(64*16));
- MCFG_VIDEO_START_OVERRIDE(toaplan1_state,toaplan1)
-
/* sound hardware */
SPEAKER(config, "mono").front_center();
- YM3812(config, m_ymsnd, XTAL(28'000'000)/8);
+ YM3812(config, m_ymsnd, XTAL(28'000'000) / 8);
m_ymsnd->irq_handler().set_inputline(m_audiocpu, 0);
m_ymsnd->add_route(ALL_OUTPUTS, "mono", 1.0);
}
@@ -2208,31 +2217,29 @@ void toaplan1_state::vimana(machine_config &config)
M68000(config, m_maincpu, XTAL(10'000'000)); /* verified on pcb */
m_maincpu->set_addrmap(AS_PROGRAM, &toaplan1_state::vimana_main_map);
- Z180(config, m_audiocpu, XTAL(28'000'000)/8); /* HD647180XOFS6 CPU */
+ Z180(config, m_audiocpu, XTAL(28'000'000) / 8); /* HD647180XOFS6 CPU */
m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::vimana_hd647180_mem_map);
m_audiocpu->set_addrmap(AS_IO, &toaplan1_state::vimana_hd647180_io_map);
config.m_minimum_quantum = attotime::from_hz(600);
- MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,vimana)
+ MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,zerowing)
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART);
- m_screen->set_screen_update(FUNC(toaplan1_state::screen_update_toaplan1));
- m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank_toaplan1));
+ m_screen->set_screen_update(FUNC(toaplan1_state::screen_update));
+ m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_toaplan1);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, (64*16)+(64*16));
- MCFG_VIDEO_START_OVERRIDE(toaplan1_state,toaplan1)
-
/* sound hardware */
SPEAKER(config, "mono").front_center();
- YM3812(config, m_ymsnd, XTAL(28'000'000)/8); /* verified on pcb */
+ YM3812(config, m_ymsnd, XTAL(28'000'000) / 8); /* verified on pcb */
m_ymsnd->irq_handler().set_inputline(m_audiocpu, 0);
m_ymsnd->add_route(ALL_OUTPUTS, "mono", 1.0);
}
@@ -2818,8 +2825,8 @@ ROM_END
ROM_START( fireshrkd )
ROM_REGION( 0x080000, "maincpu", 0 ) /* Main 68K code */
- ROM_LOAD16_BYTE( "o17_09dyn.8j",0x000000, 0x10000, CRC(e25eee27) SHA1(1ff3f838123180a0b6672c9beee6c0f0092a0f94) )
- ROM_LOAD16_BYTE( "o17_10dyn.8l",0x000001, 0x10000, CRC(c4c58cf6) SHA1(5867ecf66cd6c16cfcc54a581d3f4a8b666fd839) )
+ ROM_LOAD16_BYTE( "o17_09dyn.8j",0x000000, 0x10000, CRC(e25eee27) SHA1(1ff3f838123180a0b6672c9beee6c0f0092a0f94) ) /* Identical halves */
+ ROM_LOAD16_BYTE( "o17_10dyn.8l",0x000001, 0x10000, CRC(c4c58cf6) SHA1(5867ecf66cd6c16cfcc54a581d3f4a8b666fd839) ) /* Identical halves */
ROM_LOAD16_BYTE( "o17_11ii.7j", 0x040000, 0x20000, CRC(6beac378) SHA1(041ba98a89a4bac32575858db8a061bdf7804594) )
ROM_LOAD16_BYTE( "o17_12ii.7l", 0x040001, 0x20000, CRC(6adb6eb5) SHA1(9b6e63aa50d271c2bb0b4cf822fc6f3684f10230) )
@@ -2845,8 +2852,8 @@ ROM_END
ROM_START( fireshrkdh )
ROM_REGION( 0x080000, "maincpu", 0 ) /* Main 68K code */
- ROM_LOAD16_BYTE( "o17_09dyh.8j",0x000000, 0x10000, CRC(7b4c14dd) SHA1(d40dcf223f16c0f507aeb282d1524dbf1349c536) )
- ROM_LOAD16_BYTE( "o17_10dyh.8l",0x000001, 0x10000, CRC(a3f159f9) SHA1(afc9630ca38da730f7cf4954d1333954e8d75787) )
+ ROM_LOAD16_BYTE( "o17_09dyh.8j",0x000000, 0x10000, CRC(7b4c14dd) SHA1(d40dcf223f16c0f507aeb282d1524dbf1349c536) ) /* Identical halves */
+ ROM_LOAD16_BYTE( "o17_10dyh.8l",0x000001, 0x10000, CRC(a3f159f9) SHA1(afc9630ca38da730f7cf4954d1333954e8d75787) ) /* Identical halves */
ROM_LOAD16_BYTE( "o17_11ii.7j", 0x040000, 0x20000, CRC(6beac378) SHA1(041ba98a89a4bac32575858db8a061bdf7804594) )
ROM_LOAD16_BYTE( "o17_12ii.7l", 0x040001, 0x20000, CRC(6adb6eb5) SHA1(9b6e63aa50d271c2bb0b4cf822fc6f3684f10230) )
@@ -3127,57 +3134,42 @@ ROM_START( vimanaj )
ROM_END
-void toaplan1_state::init_toaplan1()
-{
- toaplan1_driver_savestate();
-}
-
-void toaplan1_state::init_demonwld()
-{
- toaplan1_driver_savestate();
- demonwld_driver_savestate();
-}
-
-
-
-
-
-GAME( 1988, rallybik, 0, rallybik, rallybik, toaplan1_rallybik_state, init_toaplan1, ROT270, "Toaplan / Taito Corporation", "Rally Bike / Dash Yarou", 0 )
+GAME( 1988, rallybik, 0, rallybik, rallybik, toaplan1_rallybik_state, empty_init, ROT270, "Toaplan / Taito Corporation", "Rally Bike / Dash Yarou", 0 )
-GAME( 1988, truxton, 0, truxton, truxton, toaplan1_state, init_toaplan1, ROT270, "Toaplan / Taito Corporation", "Truxton / Tatsujin", 0 )
+GAME( 1988, truxton, 0, truxton, truxton, toaplan1_state, empty_init, ROT270, "Toaplan / Taito Corporation", "Truxton / Tatsujin", 0 )
-GAME( 1989, hellfire, 0, hellfire, hellfire, toaplan1_state, init_toaplan1, ROT0, "Toaplan (Taito license)", "Hellfire (2P set)", 0 )
-GAME( 1989, hellfire1, hellfire, hellfire, hellfire1, toaplan1_state, init_toaplan1, ROT0, "Toaplan (Taito license)", "Hellfire (1P set)", 0 )
-GAME( 1989, hellfire2a, hellfire, hellfire, hellfire2a,toaplan1_state, init_toaplan1, ROT0, "Toaplan (Taito license)", "Hellfire (2P set, older)", 0 )
-GAME( 1989, hellfire1a, hellfire, hellfire, hellfire1a,toaplan1_state, init_toaplan1, ROT0, "Toaplan (Taito license)", "Hellfire (1P set, older)", 0 )
+GAME( 1989, hellfire, 0, hellfire, hellfire, toaplan1_state, empty_init, ROT0, "Toaplan (Taito license)", "Hellfire (2P set)", 0 )
+GAME( 1989, hellfire1, hellfire, hellfire, hellfire1, toaplan1_state, empty_init, ROT0, "Toaplan (Taito license)", "Hellfire (1P set)", 0 )
+GAME( 1989, hellfire2a, hellfire, hellfire, hellfire2a,toaplan1_state, empty_init, ROT0, "Toaplan (Taito license)", "Hellfire (2P set, older)", 0 )
+GAME( 1989, hellfire1a, hellfire, hellfire, hellfire1a,toaplan1_state, empty_init, ROT0, "Toaplan (Taito license)", "Hellfire (1P set, older)", 0 )
-GAME( 1989, zerowing, 0, zerowing, zerowing2, toaplan1_state, init_toaplan1, ROT0, "Toaplan", "Zero Wing (2P set)", 0 )
-GAME( 1989, zerowing1, zerowing, zerowing, zerowing, toaplan1_state, init_toaplan1, ROT0, "Toaplan", "Zero Wing (1P set)", 0 )
-GAME( 1989, zerowingw, zerowing, zerowing, zerowing2, toaplan1_state, init_toaplan1, ROT0, "Toaplan (Williams license)", "Zero Wing (2P set, Williams license)", 0 )
+GAME( 1989, zerowing, 0, zerowing, zerowing2, toaplan1_state, empty_init, ROT0, "Toaplan", "Zero Wing (2P set)", 0 )
+GAME( 1989, zerowing1, zerowing, zerowing, zerowing, toaplan1_state, empty_init, ROT0, "Toaplan", "Zero Wing (1P set)", 0 )
+GAME( 1989, zerowingw, zerowing, zerowing, zerowing2, toaplan1_state, empty_init, ROT0, "Toaplan (Williams license)", "Zero Wing (2P set, Williams license)", 0 )
-GAME( 1990, demonwld, 0, demonwld, demonwld, toaplan1_state, init_demonwld, ROT0, "Toaplan", "Demon's World / Horror Story (set 1)", 0 )
-GAME( 1989, demonwld1, demonwld, demonwld, demonwld, toaplan1_state, init_demonwld, ROT0, "Toaplan", "Demon's World / Horror Story (set 2)", 0 )
-GAME( 1989, demonwld2, demonwld, demonwld, demonwld1, toaplan1_state, init_demonwld, ROT0, "Toaplan", "Demon's World / Horror Story (set 3)", 0 )
-GAME( 1989, demonwld3, demonwld, demonwld, demonwld1, toaplan1_state, init_demonwld, ROT0, "Toaplan", "Demon's World / Horror Story (set 4)", 0 )
-GAME( 1989, demonwld4, demonwld, demonwld, demonwld1, toaplan1_state, init_demonwld, ROT0, "Toaplan", "Demon's World / Horror Story (set 5)", 0 )
+GAME( 1990, demonwld, 0, demonwld, demonwld, toaplan1_demonwld_state, empty_init, ROT0, "Toaplan", "Demon's World / Horror Story (set 1)", 0 )
+GAME( 1989, demonwld1, demonwld, demonwld, demonwld, toaplan1_demonwld_state, empty_init, ROT0, "Toaplan", "Demon's World / Horror Story (set 2)", 0 )
+GAME( 1989, demonwld2, demonwld, demonwld, demonwld1, toaplan1_demonwld_state, empty_init, ROT0, "Toaplan", "Demon's World / Horror Story (set 3)", 0 )
+GAME( 1989, demonwld3, demonwld, demonwld, demonwld1, toaplan1_demonwld_state, empty_init, ROT0, "Toaplan", "Demon's World / Horror Story (set 4)", 0 )
+GAME( 1989, demonwld4, demonwld, demonwld, demonwld1, toaplan1_demonwld_state, empty_init, ROT0, "Toaplan", "Demon's World / Horror Story (set 5)", 0 )
-GAME( 1990, fireshrk, 0, samesame, fireshrk, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Fire Shark", 0 )
-GAME( 1989, fireshrka, fireshrk, samesame, fireshrka, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Fire Shark (earlier)", 0 )
-GAME( 1990, fireshrkd, fireshrk, samesame, samesame2, toaplan1_state, init_toaplan1, ROT270, "Toaplan (Dooyong license)", "Fire Shark (Korea, set 1, easier)", 0 )
-GAME( 1990, fireshrkdh, fireshrk, samesame, samesame2, toaplan1_state, init_toaplan1, ROT270, "Toaplan (Dooyong license)", "Fire Shark (Korea, set 2, harder)", 0 )
-GAME( 1989, samesame, fireshrk, samesame, samesame, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Same! Same! Same! (1P set)", 0 )
-GAME( 1989, samesame2, fireshrk, samesame, samesame2, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Same! Same! Same! (2P set)", 0 )
-GAME( 1990, samesamecn, fireshrk, samesame, samesame2, toaplan1_state, init_toaplan1, ROT270, "Toaplan (Hong Kong Honest Trading license)", "Jiao! Jiao! Jiao! (China, 2P set)", 0 )
-GAME( 2015, samesamenh, fireshrk, samesame, samesame, toaplan1_state, init_toaplan1, ROT270, "hack (trap15)", "Same! Same! Same! (1P set, NEW VER! hack)", 0 )
+GAME( 1990, fireshrk, 0, samesame, fireshrk, toaplan1_samesame_state, empty_init, ROT270, "Toaplan", "Fire Shark", 0 )
+GAME( 1989, fireshrka, fireshrk, samesame, fireshrka, toaplan1_samesame_state, empty_init, ROT270, "Toaplan", "Fire Shark (earlier)", 0 )
+GAME( 1990, fireshrkd, fireshrk, samesame, samesame2, toaplan1_samesame_state, empty_init, ROT270, "Toaplan (Dooyong license)", "Fire Shark (Korea, set 1, easier)", 0 )
+GAME( 1990, fireshrkdh, fireshrk, samesame, samesame2, toaplan1_samesame_state, empty_init, ROT270, "Toaplan (Dooyong license)", "Fire Shark (Korea, set 2, harder)", 0 )
+GAME( 1989, samesame, fireshrk, samesame, samesame, toaplan1_samesame_state, empty_init, ROT270, "Toaplan", "Same! Same! Same! (1P set)", 0 )
+GAME( 1989, samesame2, fireshrk, samesame, samesame2, toaplan1_samesame_state, empty_init, ROT270, "Toaplan", "Same! Same! Same! (2P set)", 0 )
+GAME( 1990, samesamecn, fireshrk, samesame, jiaojiao, toaplan1_samesame_state, empty_init, ROT270, "Toaplan (Hong Kong Honest Trading license)", "Jiao! Jiao! Jiao! (China, 2P set)", 0 )
+GAME( 2015, samesamenh, fireshrk, samesame, samesame, toaplan1_samesame_state, empty_init, ROT270, "hack (trap15)", "Same! Same! Same! (1P set, NEW VER! hack)", 0 )
-GAME( 1990, outzone, 0, outzone, outzone, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Out Zone", 0 )
-GAME( 1990, outzoneh, outzone, outzone, outzone, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Out Zone (harder)", 0 )
-GAME( 1990, outzonea, outzone, outzone, outzonea, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Out Zone (old set)", 0 )
-GAME( 1990, outzoneb, outzone, outzone, outzonea, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Out Zone (older set)", 0 )
-GAME( 1990, outzonec, outzone, outzone, outzonec, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Out Zone (oldest set)", MACHINE_IMPERFECT_SOUND ) // prototype?
-GAME( 1990, outzonecv, outzone, outzonecv,outzone, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Out Zone (Zero Wing TP-015 PCB conversion)", 0 )
+GAME( 1990, outzone, 0, outzone, outzone, toaplan1_state, empty_init, ROT270, "Toaplan", "Out Zone", 0 )
+GAME( 1990, outzoneh, outzone, outzone, outzone, toaplan1_state, empty_init, ROT270, "Toaplan", "Out Zone (harder)", 0 )
+GAME( 1990, outzonea, outzone, outzone, outzonea, toaplan1_state, empty_init, ROT270, "Toaplan", "Out Zone (old set)", 0 )
+GAME( 1990, outzoneb, outzone, outzone, outzonea, toaplan1_state, empty_init, ROT270, "Toaplan", "Out Zone (older set)", 0 )
+GAME( 1990, outzonec, outzone, outzone, outzonec, toaplan1_state, empty_init, ROT270, "Toaplan", "Out Zone (oldest set)", MACHINE_IMPERFECT_SOUND ) // prototype?
+GAME( 1990, outzonecv, outzone, outzonecv,outzone, toaplan1_state, empty_init, ROT270, "Toaplan", "Out Zone (Zero Wing TP-015 PCB conversion)", 0 )
// has various licenses / regions depending on jumpers, including Tecmo
-GAME( 1991, vimana, 0, vimana, vimana, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Vimana (World, set 1)", 0 )
-GAME( 1991, vimanan, vimana, vimana, vimanan, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Vimana (World, set 2)", 0 )
-GAME( 1991, vimanaj, vimana, vimana, vimanaj, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Vimana (Japan)", 0 )
+GAME( 1991, vimana, 0, vimana, vimana, toaplan1_state, empty_init, ROT270, "Toaplan", "Vimana (World, set 1)", 0 )
+GAME( 1991, vimanan, vimana, vimana, vimanan, toaplan1_state, empty_init, ROT270, "Toaplan", "Vimana (World, set 2)", 0 )
+GAME( 1991, vimanaj, vimana, vimana, vimanaj, toaplan1_state, empty_init, ROT270, "Toaplan", "Vimana (Japan)", 0 )
diff --git a/src/mame/drivers/toaplan2.cpp b/src/mame/drivers/toaplan2.cpp
index e0294a4002b..d8b92603e19 100644
--- a/src/mame/drivers/toaplan2.cpp
+++ b/src/mame/drivers/toaplan2.cpp
@@ -771,14 +771,14 @@ READ16_MEMBER(toaplan2_state::batrider_z80rom_r)
// these two latches are always written together, via a single move.l instruction
WRITE8_MEMBER(toaplan2_state::batrider_soundlatch_w)
{
- m_soundlatch->write(space, offset, data & 0xff);
+ m_soundlatch->write(data & 0xff);
m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
}
WRITE8_MEMBER(toaplan2_state::batrider_soundlatch2_w)
{
- m_soundlatch2->write(space, offset, data & 0xff);
+ m_soundlatch2->write(data & 0xff);
m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
}
diff --git a/src/mame/drivers/toki.cpp b/src/mame/drivers/toki.cpp
index 88bca68e625..20dabd1812b 100644
--- a/src/mame/drivers/toki.cpp
+++ b/src/mame/drivers/toki.cpp
@@ -105,7 +105,7 @@ Notes:
WRITE16_MEMBER(toki_state::tokib_soundcommand_w)
{
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
diff --git a/src/mame/drivers/tryout.cpp b/src/mame/drivers/tryout.cpp
index 5a30afd1faf..99b6ba0e83d 100644
--- a/src/mame/drivers/tryout.cpp
+++ b/src/mame/drivers/tryout.cpp
@@ -35,7 +35,7 @@ WRITE8_MEMBER(tryout_state::nmi_ack_w)
WRITE8_MEMBER(tryout_state::sound_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
diff --git a/src/mame/drivers/tsamurai.cpp b/src/mame/drivers/tsamurai.cpp
index 11816fbd3b6..1b6cde80e5f 100644
--- a/src/mame/drivers/tsamurai.cpp
+++ b/src/mame/drivers/tsamurai.cpp
@@ -341,7 +341,7 @@ READ8_MEMBER(tsamurai_state::vsgongf_a100_r)
WRITE8_MEMBER(tsamurai_state::vsgongf_sound_command_w)
{
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
@@ -461,6 +461,16 @@ static INPUT_PORTS_START( tsamurai )
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
INPUT_PORTS_END
+static INPUT_PORTS_START( tsamuraih )
+ PORT_INCLUDE( tsamurai )
+
+ PORT_MODIFY("DSW2")
+ PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x00, "2" )
+ PORT_DIPSETTING( 0x01, "3" )
+ PORT_DIPSETTING( 0x02, "4" )
+ PORT_DIPSETTING( 0x03, "254 (Cheat)")
+INPUT_PORTS_END
static INPUT_PORTS_START( ladymstr )
PORT_INCLUDE( tsamurai )
@@ -1388,22 +1398,22 @@ void tsamurai_state::init_the26thz()
m_maincpu->space(AS_PROGRAM).install_read_handler(0xd803, 0xd803, read8_delegate(FUNC(tsamurai_state::tsamurai_unknown_d803_r), this));
}
-GAME( 1984, vsgongf, 0, vsgongf, vsgongf, tsamurai_state, empty_init, ROT90, "Kaneko", "VS Gong Fight", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE | MACHINE_UNEMULATED_PROTECTION )
-GAME( 1984, ringfgt, vsgongf, vsgongf, vsgongf, tsamurai_state, empty_init, ROT90, "Kaneko (Taito license)", "Ring Fighter (set 1)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE )
-GAME( 1984, ringfgt2, vsgongf, vsgongf, vsgongf, tsamurai_state, empty_init, ROT90, "Kaneko (Taito license)", "Ring Fighter (set 2)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE )
+GAME( 1984, vsgongf, 0, vsgongf, vsgongf, tsamurai_state, empty_init, ROT90, "Kaneko", "VS Gong Fight", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE | MACHINE_UNEMULATED_PROTECTION )
+GAME( 1984, ringfgt, vsgongf, vsgongf, vsgongf, tsamurai_state, empty_init, ROT90, "Kaneko (Taito license)", "Ring Fighter (set 1)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE )
+GAME( 1984, ringfgt2, vsgongf, vsgongf, vsgongf, tsamurai_state, empty_init, ROT90, "Kaneko (Taito license)", "Ring Fighter (set 2)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE )
-GAME( 1985, tsamurai, 0, tsamurai, tsamurai, tsamurai_state, empty_init, ROT90, "Kaneko / Taito", "Samurai Nihon-Ichi (set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1985, tsamurai2, tsamurai, tsamurai, tsamurai, tsamurai_state, empty_init, ROT90, "Kaneko / Taito", "Samurai Nihon-Ichi (set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1985, tsamuraih, tsamurai, tsamurai, tsamurai, tsamurai_state, empty_init, ROT90, "bootleg", "Samurai Nihon-Ichi (bootleg, harder)", MACHINE_SUPPORTS_SAVE )
+GAME( 1985, tsamurai, 0, tsamurai, tsamurai, tsamurai_state, empty_init, ROT90, "Kaneko / Taito", "Samurai Nihon-Ichi (set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1985, tsamurai2, tsamurai, tsamurai, tsamurai, tsamurai_state, empty_init, ROT90, "Kaneko / Taito", "Samurai Nihon-Ichi (set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1985, tsamuraih, tsamurai, tsamurai, tsamuraih, tsamurai_state, empty_init, ROT90, "bootleg", "Samurai Nihon-Ichi (bootleg, harder)", MACHINE_SUPPORTS_SAVE )
-GAME( 1985, ladymstr, 0, tsamurai, ladymstr, tsamurai_state, empty_init, ROT90, "Kaneko / Taito", "Lady Master of Kung Fu (set 1, newer)", MACHINE_SUPPORTS_SAVE )
-GAME( 1985, ladymstr2, ladymstr, tsamurai, ladymstr, tsamurai_state, empty_init, ROT90, "Kaneko / Taito", "Lady Master of Kung Fu (set 2, older)", MACHINE_SUPPORTS_SAVE )
-GAME( 1985, nunchaku, ladymstr, tsamurai, nunchaku, tsamurai_state, empty_init, ROT90, "Kaneko / Taito", "Nunchackun", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE )
+GAME( 1985, ladymstr, 0, tsamurai, ladymstr, tsamurai_state, empty_init, ROT90, "Kaneko / Taito", "Lady Master of Kung Fu (set 1, newer)", MACHINE_SUPPORTS_SAVE )
+GAME( 1985, ladymstr2, ladymstr, tsamurai, ladymstr, tsamurai_state, empty_init, ROT90, "Kaneko / Taito", "Lady Master of Kung Fu (set 2, older)", MACHINE_SUPPORTS_SAVE )
+GAME( 1985, nunchaku, ladymstr, tsamurai, nunchaku, tsamurai_state, empty_init, ROT90, "Kaneko / Taito", "Nunchackun", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE )
-GAME( 1985, yamagchi, 0, tsamurai, yamagchi, tsamurai_state, empty_init, ROT90, "Kaneko / Taito", "Go Go Mr. Yamaguchi / Yuke Yuke Yamaguchi-kun", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE )
+GAME( 1985, yamagchi, 0, tsamurai, yamagchi, tsamurai_state, empty_init, ROT90, "Kaneko / Taito", "Go Go Mr. Yamaguchi / Yuke Yuke Yamaguchi-kun", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE )
-GAME( 1986, m660, 0, m660, m660, tsamurai_state, empty_init, ROT90, "Wood Place Inc. (Taito America Corporation license)", "Mission 660 (US)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, m660j, m660, m660, m660, tsamurai_state, empty_init, ROT90, "Wood Place Inc. (Taito Corporation license)", "Mission 660 (Japan)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, m660b, m660, m660, m660, tsamurai_state, empty_init, ROT90, "bootleg", "Mission 660 (bootleg)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, alphaxz, m660, m660, m660, tsamurai_state, empty_init, ROT90, "Ed Co. Ltd. (Wood Place Inc. license)", "The Alphax Z (Japan)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, the26thz, m660, m660, m660, tsamurai_state, init_the26thz, ROT90, "Ed Co. Ltd. (Taito license)", "The 26th Z (Japan, location test)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, m660, 0, m660, m660, tsamurai_state, empty_init, ROT90, "Wood Place Inc. (Taito America Corporation license)", "Mission 660 (US)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, m660j, m660, m660, m660, tsamurai_state, empty_init, ROT90, "Wood Place Inc. (Taito Corporation license)", "Mission 660 (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, m660b, m660, m660, m660, tsamurai_state, empty_init, ROT90, "bootleg", "Mission 660 (bootleg)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, alphaxz, m660, m660, m660, tsamurai_state, empty_init, ROT90, "Ed Co. Ltd. (Wood Place Inc. license)", "The Alphax Z (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, the26thz, m660, m660, m660, tsamurai_state, init_the26thz, ROT90, "Ed Co. Ltd. (Taito license)", "The 26th Z (Japan, location test)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/tumbleb.cpp b/src/mame/drivers/tumbleb.cpp
index 0b91a31aacf..44f4cf76f6f 100644
--- a/src/mame/drivers/tumbleb.cpp
+++ b/src/mame/drivers/tumbleb.cpp
@@ -304,6 +304,7 @@ Stephh's notes (based on the games M68000 code and some tests) :
#include "cpu/m68000/m68000.h"
#include "cpu/h6280/h6280.h"
#include "cpu/mcs51/mcs51.h" // for semicom mcu
+#include "cpu/pic16c5x/pic16c5x.h"
#include "machine/decocrpt.h"
#include "sound/ym2151.h"
#include "sound/3812intf.h"
@@ -667,7 +668,7 @@ void tumbleb_state::tumblepopba_main_map(address_map &map)
map(0x322000, 0x322fff).w(FUNC(tumbleb_state::tumblepb_pf2_data_w)).share("pf2_data");
}
-void tumbleb_state::funkyjetb_map(address_map &map)
+void tumbleb_pic_state::funkyjetb_map(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x120000, 0x1207ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
@@ -676,13 +677,19 @@ void tumbleb_state::funkyjetb_map(address_map &map)
map(0x1d0382, 0x1d0383).portr("DSW");
map(0x242102, 0x242103).portr("SYSTEM");
map(0x200000, 0x2007ff).ram(); // writes 0x180
- map(0x300000, 0x30000f).w(FUNC(tumbleb_state::tumblepb_control_0_w));
- map(0x320000, 0x320fff).w(FUNC(tumbleb_state::tumblepb_pf1_data_w)).share("pf1_data");
- map(0x322000, 0x322fff).w(FUNC(tumbleb_state::tumblepb_pf2_data_w)).share("pf2_data");
- //map(0x340000, 0x340bff).ram().share("pf1_rowscroll");
+ map(0x300000, 0x30000f).w(FUNC(tumbleb_pic_state::tumblepb_control_0_w));
+ map(0x320000, 0x320fff).ram().w(FUNC(tumbleb_pic_state::tumblepb_pf1_data_w)).share("pf1_data");
+ map(0x322000, 0x322fff).ram().w(FUNC(tumbleb_pic_state::tumblepb_pf2_data_w)).share("pf2_data");
+ map(0x340000, 0x340bff).ram().share("pf1_rowscroll");
//map(0x342000, 0x342bff).ram().share("pf2_rowscroll");
}
+void tumbleb_pic_state::funkyjetb_oki_map(address_map &map)
+{
+ map(0x00000, 0x37fff).rom().region("oki", 0);
+ map(0x38000, 0x3ffff).bankr("okibank");
+}
+
void tumbleb_state::unico_base_map(address_map &map)
{
map(0x100000, 0x100003).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)).umask16(0x00ff);
@@ -750,7 +757,7 @@ void tumbleb_state::htchctch_main_map(address_map &map)
WRITE16_MEMBER(tumbleb_state::jumpkids_sound_w)
{
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
@@ -786,11 +793,55 @@ void tumbleb_state::pangpang_main_map(address_map &map)
/******************************************************************************/
+void tumbleb_pic_state::oki_bank_w(uint8_t data)
+{
+ m_okibank->set_entry(data & 0x0f);
+}
+
+uint8_t tumbleb_pic_state::pic_data_r()
+{
+ return m_pic_data;
+}
+
+void tumbleb_pic_state::pic_data_w(uint8_t data)
+{
+ m_pic_data = data;
+}
+
+void tumbleb_pic_state::pic_ctrl_w(uint8_t data)
+{
+ if (!BIT(data, 2))
+ {
+ if (!BIT(data, 0))
+ m_pic_data = m_oki->read();
+ else if (!BIT(data, 1))
+ {
+ logerror("OKI write: %02X\n", m_pic_data);
+ m_oki->write(m_pic_data);
+ }
+ }
+
+ if (!BIT(data, 4))
+ m_pic_data = m_soundlatch->read();
+ if (!BIT(data, 5))
+ m_soundlatch->acknowledge_w();
+}
+
+void tumbleb_pic_state::driver_start()
+{
+ m_pic_data = 0xff;
+ save_item(NAME(m_pic_data));
+
+ m_okibank->configure_entries(0, 16, memregion("oki")->base(), 0x8000);
+}
+
+/******************************************************************************/
+
WRITE16_MEMBER(tumbleb_state::semicom_soundcmd_w)
{
if (ACCESSING_BITS_0_7)
{
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
// needed for Super Trio which reads the sound with polling
// m_maincpu->spin_until_time(attotime::from_usec(100));
machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(20));
@@ -2141,12 +2192,24 @@ void tumbleb_state::tumbleb2(machine_config &config)
OKIM6295(config, m_oki, 8000000/10, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.70);
}
-void tumbleb_state::funkyjetb(machine_config &config)
+void tumbleb_pic_state::funkyjetb(machine_config &config)
{
tumbleb2(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &tumbleb_state::funkyjetb_map);
- m_maincpu->set_vblank_int("screen", FUNC(tumbleb_state::irq6_line_hold));
+ m_maincpu->set_addrmap(AS_PROGRAM, &tumbleb_pic_state::funkyjetb_map);
+ m_maincpu->set_vblank_int("screen", FUNC(tumbleb_pic_state::irq6_line_hold));
+
+ GENERIC_LATCH_8(config, m_soundlatch);
+ m_soundlatch->set_separate_acknowledge(true);
+
+ pic16c57_device &pic(PIC16C57(config, "pic", 4'000'000)); // unknown clock
+ pic.write_a().set(FUNC(tumbleb_pic_state::oki_bank_w));
+ pic.read_b().set(FUNC(tumbleb_pic_state::pic_data_r));
+ pic.write_b().set(FUNC(tumbleb_pic_state::pic_data_w));
+ pic.read_c().set(m_soundlatch, FUNC(generic_latch_8_device::pending_r)).bit(6);
+ pic.write_c().set(FUNC(tumbleb_pic_state::pic_ctrl_w));
+
+ m_oki->set_addrmap(0, &tumbleb_pic_state::funkyjetb_oki_map);
}
void tumbleb_state::jumpkids(machine_config &config)
@@ -2549,8 +2612,8 @@ ROM_START( funkyjetb )
ROM_LOAD16_BYTE( "4-27c020.bin", 0x00000, 0x40000, CRC(4e5bfda3) SHA1(b1bcc4ad1343d379de9a143a72a84db9830c8fa0) )
ROM_LOAD16_BYTE( "3-27c020.bin", 0x00001, 0x40000, CRC(e253e20c) SHA1(6fe1704872bf807ed24f500c997f62c880f6c5c1) )
- ROM_REGION( 0x2000, "pic", 0 ) /* Sound CPU */
- ROM_LOAD( "1-pic16c57-xt.bin", 0x00000, 0x2000, NO_DUMP ) // protected
+ ROM_REGION( 0x1000, "pic", 0 ) /* Sound CPU */
+ ROM_LOAD( "1-pic16c57-xt.bin", 0x00000, 0x1000, CRC(653ed006) SHA1(38b7c7b3f40d73e2e7c4361c918eaf4bba2bdc3c) ) // From decap
ROM_REGION( 0x080000, "tilegfx", 0 )
ROM_LOAD16_BYTE( "5-27c020.bin", 0x000000, 0x40000, CRC(f75ff923) SHA1(4177e94ba1e3a82861d0277ba5d0abc24482ffe2) )
@@ -3712,7 +3775,7 @@ void tumbleb_state::init_chokchok()
init_htchctch();
/* different palette format, closer to tumblep -- is this controlled by a register? the palette was right with the hatch catch trojan */
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x140000, 0x140fff, write16_delegate(FUNC(palette_device::write16), m_palette.target()));
+ m_maincpu->space(AS_PROGRAM).install_write_handler(0x140000, 0x140fff, write16s_delegate(FUNC(palette_device::write16), m_palette.target()));
/* slightly different banking */
m_maincpu->space(AS_PROGRAM).install_write_handler(0x100002, 0x100003, write16_delegate(FUNC(tumbleb_state::chokchok_tilebank_w),this));
@@ -3756,7 +3819,7 @@ GAME( 1991, tumbleb, tumblep, tumblepb, tumblepb, tumbleb_state, init_tumble
GAME( 1991, tumbleb2, tumblep, tumbleb2, tumblepb, tumbleb_state, init_tumbleb2, ROT0, "bootleg", "Tumble Pop (bootleg with PIC)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // PIC is protected, sound simulation not 100%
GAME( 1991, tumblepba,tumblep, tumblepba, tumblepb, tumbleb_state, init_tumblepba,ROT0, "bootleg (Playmark)", "Tumble Pop (Playmark bootleg)", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) // Playmark stickers on ROMs, offset pf1_alt tilemap, OKI not hooked up
-GAME( 1992, funkyjetb,funkyjet,funkyjetb, tumblepb, tumbleb_state, init_tumblepb, ROT0, "bootleg", "Funky Jet (bootleg)", MACHINE_NO_SOUND | MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // wrong palette, inputs not working, undumped PIC driving an OKI
+GAME( 1992, funkyjetb,funkyjet,funkyjetb, tumblepb, tumbleb_pic_state, init_tumblepb, ROT0, "bootleg", "Funky Jet (bootleg)", MACHINE_NO_SOUND | MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // wrong palette, inputs not working, undumped PIC driving an OKI
GAME( 1993, jumpkids, 0, jumpkids, tumblepb, tumbleb_state, init_jumpkids, ROT0, "Comad", "Jump Kids", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/twincobr.cpp b/src/mame/drivers/twincobr.cpp
index 8bb8cefa7a3..13260ae4e60 100644
--- a/src/mame/drivers/twincobr.cpp
+++ b/src/mame/drivers/twincobr.cpp
@@ -413,7 +413,7 @@ void twincobr_state::main_program_map(address_map &map)
map(0x078008, 0x078009).portr("VBLANK"); /* V-Blank & FShark Coin/Start */
map(0x07800b, 0x07800b).w(m_coinlatch, FUNC(ls259_device::write_nibble_d0)); /* Flying Shark DSP Comms & coin stuff */
map(0x07800d, 0x07800d).w(m_mainlatch, FUNC(ls259_device::write_nibble_d0)); /* Twin Cobra DSP Comms & system control */
- map(0x07a000, 0x07afff).rw(FUNC(twincobr_state::twincobr_sharedram_r), FUNC(twincobr_state::twincobr_sharedram_w)); /* 16-bit on 68000 side, 8-bit on Z80 side */
+ map(0x07a000, 0x07afff).rw(FUNC(twincobr_state::twincobr_sharedram_r), FUNC(twincobr_state::twincobr_sharedram_w)).umask16(0x00ff); /* 16-bit on 68000 side, 8-bit on Z80 side */
map(0x07e000, 0x07e001).rw(FUNC(twincobr_state::twincobr_txram_r), FUNC(twincobr_state::twincobr_txram_w)); /* data for text video RAM */
map(0x07e002, 0x07e003).rw(FUNC(twincobr_state::twincobr_bgram_r), FUNC(twincobr_state::twincobr_bgram_w)); /* data for bg video RAM */
map(0x07e004, 0x07e005).rw(FUNC(twincobr_state::twincobr_fgram_r), FUNC(twincobr_state::twincobr_fgram_w)); /* data for fg video RAM */
@@ -626,8 +626,8 @@ static const gfx_layout charlayout =
RGN_FRAC(1,3), /* 2048 characters */
3, /* 3 bits per pixel */
{ RGN_FRAC(0,3), RGN_FRAC(1,3), RGN_FRAC(2,3) },
- { 0, 1, 2, 3, 4, 5, 6, 7 },
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
+ { STEP8(0,1) },
+ { STEP8(0,8) },
8*8 /* every char takes 8 consecutive bytes */
};
@@ -637,8 +637,8 @@ static const gfx_layout tilelayout =
RGN_FRAC(1,4), /* 4096/8192 tiles */
4, /* 4 bits per pixel */
{ RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) },
- { 0, 1, 2, 3, 4, 5, 6, 7 },
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
+ { STEP8(0,1) },
+ { STEP8(0,8) },
8*8 /* every tile takes 8 consecutive bytes */
};
@@ -667,8 +667,6 @@ void twincobr_state::twincobr(machine_config &config)
config.m_minimum_quantum = attotime::from_hz(6000);
- MCFG_MACHINE_RESET_OVERRIDE(twincobr_state,twincobr)
-
LS259(config, m_mainlatch);
m_mainlatch->q_out_cb<2>().set(FUNC(twincobr_state::int_enable_w));
m_mainlatch->q_out_cb<3>().set(FUNC(twincobr_state::flipscreen_w));
@@ -698,7 +696,7 @@ void twincobr_state::twincobr(machine_config &config)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
m_screen->set_raw(28_MHz_XTAL/4, 446, 0, 320, 286, 0, 240);
- m_screen->set_screen_update(FUNC(twincobr_state::screen_update_toaplan0));
+ m_screen->set_screen_update(FUNC(twincobr_state::screen_update));
m_screen->screen_vblank().set(m_spriteram16, FUNC(buffered_spriteram16_device::vblank_copy_rising));
m_screen->screen_vblank().append(FUNC(twincobr_state::twincobr_vblank_irq));
m_screen->set_palette(m_palette);
@@ -1296,7 +1294,7 @@ ROM_END
void twincobr_state::init_twincobr()
{
- twincobr_driver_savestate();
+ driver_savestate();
}
diff --git a/src/mame/drivers/uapce.cpp b/src/mame/drivers/uapce.cpp
index 8d0f0f93e16..7c400fd56d2 100644
--- a/src/mame/drivers/uapce.cpp
+++ b/src/mame/drivers/uapce.cpp
@@ -33,6 +33,24 @@
-x1 Victory Run standardd Hucard
-x1 Plexiglass control panel overlay (used)
+In the August 1989 issue of Vending Times magazine:
+https://archive.org/details/VendingTimesVOL29NO10August1989Clearscan/page/n69
+https://archive.org/details/VendingTimesVOL29NO10August1989Clearscan/page/n99
+there was a list of all of the available UA produced HU-Cards about to be released.
+- Legendary Axe
+- Victory Run
+- Keith Courage in the Alpha Zones
+- World Class Baseball
+- Power Golf
+- Blazing Lazers
+- Dungeon Explorer
+- Alien Crush
+- China Warrior
+- Military Madness
+- JJ and Jeff
+and said that six to ten more new game cards would be available by the end of the year.
+It also shows game marquees for Victory Run and Power League.
+
In the February 1990 issue of Video Games & Computer Entertainment magazine, there was a list of
all of the available UA produced Hu-Cards (at the current time of the article was published).
The article mentions that the UA Hu-Cards were not compatible with the TG-16 gaming console.
diff --git a/src/mame/drivers/unixpc.cpp b/src/mame/drivers/unixpc.cpp
index 0f95c0417cf..a85c694d87a 100644
--- a/src/mame/drivers/unixpc.cpp
+++ b/src/mame/drivers/unixpc.cpp
@@ -266,7 +266,7 @@ WRITE16_MEMBER(unixpc_state::disk_control_w)
// TODO: bits 0-2 = head select
- m_hdc->drdy_w(BIT(data, 3) && m_hdr0->exists());
+ m_hdc->drdy_w(BIT(data, 3) && m_hdr0->exists());
if (!BIT(data, 4))
m_hdc->reset();
diff --git a/src/mame/drivers/unkpoker.cpp b/src/mame/drivers/unkpoker.cpp
new file mode 100644
index 00000000000..c5b3462dc42
--- /dev/null
+++ b/src/mame/drivers/unkpoker.cpp
@@ -0,0 +1,173 @@
+// license:BSD-3-Clause
+// copyright-holders:
+/****************************************************************************************
+
+Unknown Color Poker Game
+------------------------------
+
+8080A CPU
+
+Four 2716 eproms
+
+Six 2102 Rams
+
+Two 2112 Rams
+
+Two 5101 Rams (Low Power Versions, one connected to Battery)
+
+Four position DIP Switch - DIP 1 changes on screen text from
+normal to high lighted as seen pics. Other DIPS unknown.
+
+Sound?
+
+Date of manufacture unknown. Latest date codes on logic chips is 1980.
+
+Chaneman 3/20/2019
+
+
+TODO: everything
+
+*******************************************************************************************/
+
+#include "emu.h"
+#include "cpu/i8085/i8085.h"
+#include "machine/nvram.h"
+
+#include "screen.h"
+#include "emupal.h"
+#include "speaker.h"
+
+class unkpoker_state : public driver_device
+{
+public:
+ unkpoker_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this,"maincpu"),
+ m_videoram(*this, "videoram"),
+ m_chargen(*this, "gfx1")
+ { }
+
+ void unkpoker(machine_config &config);
+
+private:
+ uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ void mem_map(address_map &map);
+ void io_map(address_map &map);
+
+ required_device<cpu_device> m_maincpu;
+ required_shared_ptr<uint8_t> m_videoram;
+ required_region_ptr<u8> m_chargen;
+};
+
+
+uint32_t unkpoker_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) // taken from video21.cpp
+{
+ uint16_t sy = 0, ma = 0;
+
+ for (uint8_t y = 0; y < 28; y++)
+ {
+ for (uint8_t ra = 0; ra < 8; ra++)
+ {
+ uint16_t *p = &bitmap.pix16(sy++);
+
+ for (uint16_t x = 0; x < 32; x++)
+ {
+ uint8_t chr = m_videoram[x + ma] & 0x7f;
+ uint8_t gfx = m_chargen[(chr << 3) | ra];
+
+ /* Display a scanline of a character */
+ *p++ = BIT(gfx, 7);
+ *p++ = BIT(gfx, 6);
+ *p++ = BIT(gfx, 5);
+ *p++ = BIT(gfx, 4);
+ *p++ = BIT(gfx, 3);
+ *p++ = BIT(gfx, 2);
+ *p++ = BIT(gfx, 1);
+ *p++ = BIT(gfx, 0);
+ }
+ }
+ ma += 32;
+ }
+ return 0;
+}
+
+
+void unkpoker_state::mem_map(address_map &map) {
+ map(0x0000,0x0fff).rom();
+ map(0x1000,0x1fff).ram();
+ map(0x8000,0x83ff).ram().share("videoram");
+}
+
+void unkpoker_state::io_map(address_map &map) {
+ map(0x01,0x01).portr("IN");
+ map(0x02,0x02).portr("DSW");
+}
+
+
+static INPUT_PORTS_START( unkpoker )
+ PORT_START("IN")
+ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+ PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "DSW:1")
+ PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "DSW:2")
+ PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "DSW:3")
+ PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "DSW:4")
+INPUT_PORTS_END
+
+
+static const gfx_layout tiles8x8_layout =
+{
+ 8,8,
+ RGN_FRAC(1,1),
+ 1,
+ { 0 },
+ { 0, 1, 2, 3, 4, 5, 6, 7 },
+ { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
+ 8*8
+};
+
+
+static GFXDECODE_START( gfx_unkpoker )
+ GFXDECODE_ENTRY( "gfx1", 0, tiles8x8_layout, 0, 1 )
+GFXDECODE_END
+
+
+void unkpoker_state::unkpoker(machine_config &config)
+{
+ /* basic machine hardware */
+ I8080A(config, m_maincpu, 2000000); // guessed
+ m_maincpu->set_addrmap(AS_PROGRAM, &unkpoker_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &unkpoker_state::io_map);
+
+ //NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
+
+ /* video hardware */
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(256, 256);
+ screen.set_visarea(0, 255, 0, 255);
+ screen.set_screen_update(FUNC(unkpoker_state::screen_update));
+ screen.set_palette("palette");
+
+ GFXDECODE(config, "gfxdecode", "palette", gfx_unkpoker);
+ PALETTE(config, "palette", palette_device::RGB_3BIT);
+
+ /* sound hardware */
+ SPEAKER(config, "mono").front_center();
+}
+
+
+ROM_START( unkpoker )
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "cdpat.13b", 0x0000, 0x0800, CRC(c3f3040f) SHA1(ed1916bcd9e1e80502fcff5ddd599c101a226e7c) )
+ ROM_LOAD( "cdpat.11b", 0x0800, 0x0800, CRC(16a97398) SHA1(737192dd0e1b3083f1facd327a83d98a0b7f4d66) )
+
+ ROM_REGION( 0x1000, "gfx1", 0 )
+ ROM_LOAD( "cd.3b", 0x0000, 0x0800, CRC(e3997d7d) SHA1(6c595c70afedc7aef024215d153fe31b418adc25) )
+ ROM_LOAD( "cd.3c", 0x0800, 0x0800, CRC(b61adb76) SHA1(9805593fc6d9b01e4a63bfc35e5442c4c547c103) )
+ROM_END
+
+GAME(1980?, unkpoker, 0, unkpoker, unkpoker, unkpoker_state, empty_init, ROT0, "<unknown>", "unknown 1980 poker game", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE)
diff --git a/src/mame/drivers/vamphalf.cpp b/src/mame/drivers/vamphalf.cpp
index a4366848760..50fde56e844 100644
--- a/src/mame/drivers/vamphalf.cpp
+++ b/src/mame/drivers/vamphalf.cpp
@@ -495,7 +495,7 @@ WRITE16_MEMBER(vamphalf_state::boonggab_lamps_w)
WRITE8_MEMBER( vamphalf_state::qs1000_p3_w )
{
if (!BIT(data, 5))
- m_soundlatch->acknowledge_w(space, 0, !BIT(data, 5));
+ m_soundlatch->acknowledge_w();
membank("qs1000:data")->set_entry(data & 7);
}
diff --git a/src/mame/drivers/vaportra.cpp b/src/mame/drivers/vaportra.cpp
index 4f7015df8a4..373baa71c97 100644
--- a/src/mame/drivers/vaportra.cpp
+++ b/src/mame/drivers/vaportra.cpp
@@ -233,7 +233,6 @@ void vaportra_state::vaportra(machine_config &config)
PALETTE(config, m_palette).set_entries(1280);
DECO16IC(config, m_deco_tilegen[0], 0);
- m_deco_tilegen[0]->set_split(0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
@@ -249,7 +248,6 @@ void vaportra_state::vaportra(machine_config &config)
m_deco_tilegen[0]->set_gfxdecode_tag("gfxdecode");
DECO16IC(config, m_deco_tilegen[1], 0);
- m_deco_tilegen[1]->set_split(0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
diff --git a/src/mame/drivers/vega.cpp b/src/mame/drivers/vega.cpp
index fc174a80f47..f4046254162 100644
--- a/src/mame/drivers/vega.cpp
+++ b/src/mame/drivers/vega.cpp
@@ -139,7 +139,6 @@ private:
int m_tmp;
int m_t1;
- uint8_t m_ins8154_ram[0x80];
uint8_t m_txt_ram[0x400];
vega_obj m_obj[NUM_OBJ];
@@ -204,12 +203,12 @@ WRITE8_MEMBER(vega_state::extern_w)
if(m_p2_data&0x40) /* P26 connected to M/IO pin */
{
- m_ins8154_ram[offset&0x7f]=data;
+ m_ins8154->write_ram(offset, data);
}
else
{
//register w ?
- m_ins8154->ins8154_w(space,offset&0x7f,data);
+ m_ins8154->write_io(offset & 0x7f, data);
}
}
break;
@@ -332,12 +331,12 @@ READ8_MEMBER(vega_state::extern_r)
if(m_p2_data&0x40) /* P26 connected to M/IO pin */
{
- return m_ins8154_ram[offset&0x7f];
+ return m_ins8154->read_ram(offset);
}
else
{
//register r ?
- return m_ins8154->ins8154_r(space,offset&0x7f);
+ return m_ins8154->read_io(offset & 0x7f);
}
}
#if 0
diff --git a/src/mame/drivers/vegaeo.cpp b/src/mame/drivers/vegaeo.cpp
index 6783050ab0b..d51c1255e12 100644
--- a/src/mame/drivers/vegaeo.cpp
+++ b/src/mame/drivers/vegaeo.cpp
@@ -75,7 +75,7 @@ WRITE8_MEMBER( vegaeo_state::qs1000_p3_w )
membank("qs1000:bank")->set_entry(data & 0x07);
if (!BIT(data, 5))
- m_soundlatch->acknowledge_w(space, 0, !BIT(data, 5));
+ m_soundlatch->acknowledge_w();
}
WRITE8_MEMBER(vegaeo_state::vram_w)
diff --git a/src/mame/drivers/vii.cpp b/src/mame/drivers/vii.cpp
index 98567f1c082..761347e3aea 100644
--- a/src/mame/drivers/vii.cpp
+++ b/src/mame/drivers/vii.cpp
@@ -9,69 +9,69 @@
die markings show
"SunPlus QL8041" ( also known as Sunplus SPG240 & PAC300 )
- (all GameKeyReady units?)
- Disney Princess (GKR)
- Wheel of Fortune (GKR)
- JAKKS WWE (GKR)
- Fantastic 4 (GKR)
- Justice League (GKR)
- Dora the Explorer Nursery Rhyme (GKR)
- Dora the Explorer Play Park (GKR)
- Spiderman 5-in-1 (GKR)
- etc.
-
- (other non GKR JAKKS games)
- X-Men (Wolverine pad)
- Avatar: The Last Airbender
-
- (other games)
- Mattel Classic Sports
+ (all GameKeyReady units?)
+ Disney Princess (GKR)
+ Wheel of Fortune (GKR)
+ JAKKS WWE (GKR)
+ Fantastic 4 (GKR)
+ Justice League (GKR)
+ Dora the Explorer Nursery Rhyme (GKR)
+ Dora the Explorer Play Park (GKR)
+ Spiderman 5-in-1 (GKR)
+ etc.
+
+ (other non GKR JAKKS games)
+ X-Men (Wolverine pad)
+ Avatar: The Last Airbender
+
+ (other games)
+ Mattel Classic Sports
"SunPlus QL8041C" ( known as Sunplus SPG2??, seems to be compatible with above, so probably just a chip revision )
-
- Clickstart ( see clickstart.cpp instead)
- Wheel of Fortune 2nd Edition
- Spider-man - Villain Roundup
- "SunPlus QU7074-P69A"
+ Clickstart ( see clickstart.cpp instead)
+ Wheel of Fortune 2nd Edition
+ Spider-man - Villain Roundup
- The Batman
+ "SunPlus QU7074-P69A"
- ---
+ The Batman
+
+ ---
It is unknown if the following are close to this architecture or not (no dumps yet)
"SunPlus QU7073-P69A"
- Mortal Kombat
-
- "Sunplus PU7799-P680?" (difficult to read)
+ Mortal Kombat
+
+ "Sunplus PU7799-P680?" (difficult to read)
- Mission Paintball
+ Mission Paintball
"Sunplus QL8167"
- Disney Princess (newer?)
- Go Diego Go
- Shrek - Over the Hedge (this unit shows a GameKey Unlock More Games' on startup, but has no port, not even on the internal PCB)
- Marvel Heroes (Spider-man)
- Spiderman 3 (Movie - black)
+ Disney Princess Magical Adventure
+ Go Diego Go
+ Shrek - Over the Hedge (this unit shows a 'GameKey Unlock More Games' on startup, but has no port, not even on the internal PCB)
+ Marvel Heroes (Spider-man)
+ Spiderman 3 (Movie - black)
- ---
+ ---
- These are definitely different
+ These are definitely different
"SunPlus PA7801" ( known as Sunplus SPG110? ) see spg110.cpp instead
- Classic Arcade Pinball
- EA Sports (NHL95 + Madden 95)
- Spiderman 5-in-1 (original release)
+ Classic Arcade Pinball
+ EA Sports (NHL95 + Madden 95)
+ Spiderman 5-in-1 (original release)
- "GCM394" (this is clearly newer, has extra opcodes, different internal map etc.)
+ "GCM394" (this is clearly newer, has extra opcodes, different internal map etc.)
- Smart Fit Park
+ Smart Fit Park
- Status:
+ Status:
Mostly working
@@ -89,10 +89,10 @@
jak_pooh:
In the 'Light Tag' minigame (select the rock) you can't move left with the DRC (ok with -nodrc)
and the game usually softlocks when you find a friend (with or without DRC)
- 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?)
+ 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?)
vii:
When loading a cart from file manager, sometimes MAME will crash.
@@ -115,11 +115,6 @@
TODO:
Work out how to access the hidden TEST menus for all games (most JAKKS games should have one at least)
- Also on this hardware:
-
- name PCB ID ROM width TSOP pads ROM size SEEPROM die markings
- Dream Life ? x16 48 not dumped no Sunplus
-
*******************************************************************************/
#include "emu.h"
@@ -338,6 +333,20 @@ private:
};
+class dreamlif_state : public spg2xx_game_state
+{
+public:
+ dreamlif_state(const machine_config &mconfig, device_type type, const char *tag)
+ : spg2xx_game_state(mconfig, type, tag)
+ { }
+
+ void dreamlif(machine_config &config);
+
+ DECLARE_READ16_MEMBER(portb_r);
+ DECLARE_WRITE16_MEMBER(portb_w);
+};
+
+
/*************************
* Machine Hardware *
@@ -1031,6 +1040,24 @@ static INPUT_PORTS_START( rad_crik )
PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
+static INPUT_PORTS_START( dreamlif )
+ PORT_START("P1")
+ PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
+ PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
+ PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
+ PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
+ PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 )
+ PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("A")
+ PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("B")
+ PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("C")
+ PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Yes")
+ PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("No")
+ PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // must be low or the Tiger logo gets skipped, also must be low for service mode (hold pause while booting) to work
+ PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_NAME("Pause")
+ PORT_BIT( 0xf000, IP_ACTIVE_HIGH, IPT_UNUSED )
+INPUT_PORTS_END
+
+
// there is a speaker volume for the 'guitar' mode, but it's presumably an analog feature, not read by the game.
static INPUT_PORTS_START( icanguit )
PORT_START("P1")
@@ -1120,7 +1147,7 @@ static INPUT_PORTS_START( icanguit )
PORT_START("P3_1")
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
+ PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
PORT_BIT( 0xfffc, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_START("P3_2")
@@ -1130,7 +1157,7 @@ static INPUT_PORTS_START( icanguit )
PORT_START("P3_3")
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Pause")
- PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
+ PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
PORT_BIT( 0xfffc, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_START("P3_4")
@@ -1149,7 +1176,7 @@ INPUT_PORTS_END
// this has an entire piano keyboard + extras
// there is a volume dial for the internal speakers when used in non-TV mode, but presumably it is not CPU visible
// there should be a metronome key, but nothing seems to have that effect, maybe due to incomplete sound emulation?
-static INPUT_PORTS_START( icanpian )
+static INPUT_PORTS_START( icanpian )
PORT_START("P1")
// uses multiplexed ports instead, see below
@@ -1207,7 +1234,7 @@ static INPUT_PORTS_START( icanpian )
PORT_START("P3_0")
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Change Instrument")
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Cycle Hands")
- PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Display Mode 1")
+ PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Display Mode 1")
PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Display Mode 2")
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Display Mode 3")
PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Display Mode 4")
@@ -1218,9 +1245,9 @@ static INPUT_PORTS_START( icanpian )
PORT_START("P3_1")
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("Tempo Up")
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME("Tempo Default")
- PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("Tempo Down")
- PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("Pause")
- PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Metronome") // is one of these the metronome button?
+ PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("Tempo Down")
+ PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("Pause")
+ PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Metronome")
PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_UNUSED ) // will skip intro scenes etc. like other buttons but no more physical buttons on KB to map here
PORT_BIT( 0xffc0, IP_ACTIVE_HIGH, IPT_UNKNOWN )
@@ -1390,6 +1417,21 @@ static INPUT_PORTS_START( lexizeus ) // how many buttons does this have? I acci
INPUT_PORTS_END
+READ16_MEMBER(dreamlif_state::portb_r)
+{
+ // some kind of EEPROM device?
+ logerror("%s: portb_r\n", machine().describe_context());
+ return 0x0000;
+}
+
+WRITE16_MEMBER(dreamlif_state::portb_w)
+{
+ // some kind of EEPROM device?
+ logerror("%s: portb_w (%04x)\n", machine().describe_context(), data);
+}
+
+
+
READ16_MEMBER(icanguit_state::porta_r)
{
//logerror("%s: porta_r\n", machine().describe_context());
@@ -1916,6 +1958,17 @@ void spg2xx_game_state::rad_skat(machine_config &config)
NVRAM(config, m_nvram, nvram_device::DEFAULT_ALL_1);
}
+void dreamlif_state::dreamlif(machine_config &config)
+{
+ SPG24X(config, m_spg, XTAL(27'000'000), m_maincpu, m_screen);
+ spg2xx_base(config);
+
+ m_spg->porta_in().set_ioport("P1");
+ m_spg->portb_in().set(FUNC(dreamlif_state::portb_r));
+ m_spg->portb_out().set(FUNC(dreamlif_state::portb_w));
+
+}
+
void spg2xx_game_state::rad_skatp(machine_config &config)
{
rad_skat(config);
@@ -2352,10 +2405,9 @@ CONS( 2007, rad_fb2, 0, 0, rad_skat, rad_fb2, spg2xx_game_state, ini
CONS( 2005, mattelcs, 0, 0, rad_skat, mattelcs, spg2xx_game_state, empty_init, "Mattel", "Mattel Classic Sports", MACHINE_IMPERFECT_SOUND )
// Hasbro games
-CONS( 2007, dreamlif, 0, 0, rad_skat, rad_crik, spg2xx_game_state, empty_init, "Hasbro", "Dream Life", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
-
-
+CONS( 2005, dreamlif, 0, 0, dreamlif, dreamlif, dreamlif_state, empty_init, "Hasbro", "Dream Life (Version 1.0, Feb 07 2005)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+// Fisher-Price games
CONS( 2007, icanguit, 0, 0, icanguit, icanguit, icanguit_state, empty_init, "Fisher-Price", "I Can Play Guitar", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
CONS( 2006, icanpian, 0, 0, icanpian, icanpian, icanguit_state, empty_init, "Fisher-Price", "I Can Play Piano", MACHINE_IMPERFECT_SOUND ) // 2006 date from Manual
diff --git a/src/mame/drivers/vt100.cpp b/src/mame/drivers/vt100.cpp
index 3d3549a77db..b31c3326608 100644
--- a/src/mame/drivers/vt100.cpp
+++ b/src/mame/drivers/vt100.cpp
@@ -214,12 +214,12 @@ void vt100_state::vt100_io(address_map &map)
u8 vt100_state::printer_r(offs_t offset)
{
- return m_printer_uart->ins8250_r(machine().dummy_space(), offset >> 2);
+ return m_printer_uart->ins8250_r(offset >> 2);
}
void vt100_state::printer_w(offs_t offset, u8 data)
{
- m_printer_uart->ins8250_w(machine().dummy_space(), offset >> 2, data);
+ m_printer_uart->ins8250_w(offset >> 2, data);
}
void vt100_state::vt102_io(address_map &map)
diff --git a/src/mame/drivers/wardner.cpp b/src/mame/drivers/wardner.cpp
index a89ab9a1b35..9665ae01fa9 100644
--- a/src/mame/drivers/wardner.cpp
+++ b/src/mame/drivers/wardner.cpp
@@ -181,14 +181,14 @@ void wardner_state::main_program_map(address_map &map)
{
map(0x0000, 0x6fff).rom();
map(0x7000, 0x7fff).ram();
- map(0x8000, 0x8fff).w(FUNC(wardner_state::wardner_sprite_w)); // AM_SHARE("spriteram8")
- map(0xa000, 0xafff).w(m_palette, FUNC(palette_device::write8)); // AM_SHARE("palette")
+ map(0x8000, 0x8fff).w(FUNC(wardner_state::wardner_sprite_w)); // .share("spriteram8")
+ map(0xa000, 0xafff).w(m_palette, FUNC(palette_device::write8)); // .share("palette")
map(0xc000, 0xc7ff).writeonly().share("sharedram");
map(0x8000, 0xffff).r(m_membank, FUNC(address_map_bank_device::read8));
}
// Overlapped RAM/Banked ROM
-// Can't use AM_RANGE(0x00000, 0x3ffff) for ROM because the shared pointers get messed up somehow
+// Can't use map(0x00000, 0x3ffff) for ROM because the shared pointers get messed up somehow
void wardner_state::main_bank_map(address_map &map)
{
map(0x00000, 0x00fff).r(FUNC(wardner_state::wardner_sprite_r)).share("spriteram8");
@@ -338,24 +338,24 @@ INPUT_PORTS_END
static const gfx_layout charlayout =
{
- 8,8, /* 8*8 characters */
- 2048, /* 2048 characters */
- 3, /* 3 bits per pixel */
- { 0*2048*8*8, 1*2048*8*8, 2*2048*8*8 }, /* the bitplanes are separated */
- { 0, 1, 2, 3, 4, 5, 6, 7 },
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
- 8*8 /* every char takes 8 consecutive bytes */
+ 8,8, /* 8*8 characters */
+ RGN_FRAC(1,3), /* 2048 characters */
+ 3, /* 3 bits per pixel */
+ { RGN_FRAC(0,3), RGN_FRAC(1,3), RGN_FRAC(2,3) }, /* the bitplanes are separated */
+ { STEP8(0,1) },
+ { STEP8(0,8) },
+ 8*8 /* every char takes 8 consecutive bytes */
};
static const gfx_layout tilelayout =
{
- 8,8, /* 8*8 tiles */
- 4096, /* 4096 tiles */
- 4, /* 4 bits per pixel */
- { 0*4096*8*8, 1*4096*8*8, 2*4096*8*8, 3*4096*8*8 }, /* the bitplanes are separated */
- { 0, 1, 2, 3, 4, 5, 6, 7 },
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
- 8*8 /* every tile takes 8 consecutive bytes */
+ 8,8, /* 8*8 tiles */
+ RGN_FRAC(1,4), /* 4096 tiles */
+ 4, /* 4 bits per pixel */
+ { RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) }, /* the bitplanes are separated */
+ { STEP8(0,1) },
+ { STEP8(0,8) },
+ 8*8 /* every tile takes 8 consecutive bytes */
};
@@ -369,12 +369,12 @@ GFXDECODE_END
void wardner_state::driver_start()
{
/* Save-State stuff in src/machine/twincobr.cpp */
- twincobr_driver_savestate();
+ driver_savestate();
}
void wardner_state::machine_reset()
{
- MACHINE_RESET_CALL_MEMBER(twincobr);
+ twincobr_state::machine_reset();
m_membank->set_bank(0);
}
@@ -429,7 +429,7 @@ void wardner_state::wardner(machine_config &config)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
m_screen->set_raw(14_MHz_XTAL/2, 446, 0, 320, 286, 0, 240);
- m_screen->set_screen_update(FUNC(wardner_state::screen_update_toaplan0));
+ m_screen->set_screen_update(FUNC(wardner_state::screen_update));
m_screen->screen_vblank().set(m_spriteram8, FUNC(buffered_spriteram8_device::vblank_copy_rising));
m_screen->screen_vblank().append(FUNC(wardner_state::wardner_vblank_irq));
m_screen->set_palette(m_palette);
diff --git a/src/mame/drivers/wc90b.cpp b/src/mame/drivers/wc90b.cpp
index 8a92726da2d..b658ebe7a41 100644
--- a/src/mame/drivers/wc90b.cpp
+++ b/src/mame/drivers/wc90b.cpp
@@ -113,7 +113,7 @@ WRITE8_MEMBER(wc90b_state::bankswitch1_w)
WRITE8_MEMBER(wc90b_state::sound_command_w)
{
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
diff --git a/src/mame/drivers/witch.cpp b/src/mame/drivers/witch.cpp
index 79b6dad6827..ba620398e0e 100644
--- a/src/mame/drivers/witch.cpp
+++ b/src/mame/drivers/witch.cpp
@@ -1002,7 +1002,7 @@ void keirinou_state::keirinou(machine_config &config)
PALETTE(config.replace(), m_palette).set_entries(0x200+0x80);
m_gfxdecode->set_info(gfx_keirinou);
-// MCFG_PALETTE_FORMAT(IIBBGGRR)
+// m_palette->set_format(palette_device::IIBBGGRR, 0x200+0x80);
// Keirin Ou does have two individual PPIs (NEC D8255AC-2)
m_ppi[0]->out_pc_callback().set(FUNC(keirinou_state::write_keirinou_a002));
diff --git a/src/mame/drivers/wpc_dcs.cpp b/src/mame/drivers/wpc_dcs.cpp
index 710d5995733..3c14a1f7fe4 100644
--- a/src/mame/drivers/wpc_dcs.cpp
+++ b/src/mame/drivers/wpc_dcs.cpp
@@ -860,6 +860,19 @@ ROM_START(sttng_l3)
ROM_LOAD16_BYTE("ng_u8_s.l1", 0xc00000, 0x080000, CRC(c9fb065e) SHA1(c148178ee0ea787acc88078db01d17073e75fdc7))
ROM_END
+ROM_START(sttng_l5)
+ ROM_REGION(0x80000, "maincpu", 0)
+ ROM_LOAD("trek_lx5.rom", 0x00000, 0x80000, CRC(e004f3a7) SHA1(c724641106115e3f14bbe3998771823d0ac12d69))
+ ROM_REGION16_LE(0x1000000, "dcs",0)
+ ROM_LOAD16_BYTE("ng_u2_s.l1", 0x000000, 0x080000, CRC(c3bd7bf5) SHA1(2476ff90232a52d667a407fac81ee4db028b94e5))
+ ROM_LOAD16_BYTE("ng_u3_s.l1", 0x200000, 0x080000, CRC(9456cac7) SHA1(83e415e0f21bb5418f3677dbc13433e056c523ab))
+ ROM_LOAD16_BYTE("ng_u4_s.l1", 0x400000, 0x080000, CRC(179d22a4) SHA1(456b7189e23d4e2bd7e2a6249fa2a73bf0e12194))
+ ROM_LOAD16_BYTE("ng_u5_s.l1", 0x600000, 0x080000, CRC(231a3e72) SHA1(081b1a042e62ccb723788059d6c1e00b9b32c778))
+ ROM_LOAD16_BYTE("ng_u6_s.l1", 0x800000, 0x080000, CRC(bb21377d) SHA1(229fb42a1f8b22727a809e5d63f26f045a2adda5))
+ ROM_LOAD16_BYTE("ng_u7_s.l1", 0xa00000, 0x080000, CRC(d81b39f0) SHA1(3443e7327c755b85a5b390f7fcd0e9923890425a))
+ ROM_LOAD16_BYTE("ng_u8_s.l1", 0xc00000, 0x080000, CRC(c9fb065e) SHA1(c148178ee0ea787acc88078db01d17073e75fdc7))
+ROM_END
+
/*-------------
/ Addams Family Values (Coin Dropper)
@@ -893,6 +906,7 @@ GAME(1994, pop_lx5, 0, wpc_dcs, wpc_dcs, wpc_dcs_state, init_pop
GAME(1994, pop_la4, pop_lx5, wpc_dcs, wpc_dcs, wpc_dcs_state, init_pop, ROT0, "Bally", "Popeye Saves The Earth (LA-4)", MACHINE_MECHANICAL)
GAME(1994, pop_pa3, pop_lx5, wpc_dcs, wpc_dcs, wpc_dcs_state, init_pop, ROT0, "Bally", "Popeye Saves The Earth (PA-3)", MACHINE_MECHANICAL)
GAME(1994, sttng_l7, 0, wpc_dcs, wpc_dcs, wpc_dcs_state, init_sttng, ROT0, "Williams", "Star Trek: The Next Generation (LX-7)", MACHINE_MECHANICAL)
+GAME(1994, sttng_l5, sttng_l7, wpc_dcs, wpc_dcs, wpc_dcs_state, init_sttng, ROT0, "Williams", "Star Trek: The Next Generation (LX-5)", MACHINE_MECHANICAL)
GAME(1994, sttng_x7, sttng_l7, wpc_dcs, wpc_dcs, wpc_dcs_state, init_sttng, ROT0, "Williams", "Star Trek: The Next Generation (LX-7 Special)", MACHINE_MECHANICAL)
GAME(1993, sttng_p8, sttng_l7, wpc_dcs, wpc_dcs, wpc_dcs_state, init_sttng, ROT0, "Williams", "Star Trek: The Next Generation (P-8)", MACHINE_MECHANICAL)
GAME(1993, sttng_p5, sttng_l7, wpc_dcs, wpc_dcs, wpc_dcs_state, init_sttng, ROT0, "Williams", "Star Trek: The Next Generation (P-5)", MACHINE_MECHANICAL)
diff --git a/src/mame/drivers/wyvernf0.cpp b/src/mame/drivers/wyvernf0.cpp
index 932feb70810..f7162038ce4 100644
--- a/src/mame/drivers/wyvernf0.cpp
+++ b/src/mame/drivers/wyvernf0.cpp
@@ -373,7 +373,7 @@ TIMER_CALLBACK_MEMBER(wyvernf0_state::nmi_callback)
WRITE8_MEMBER(wyvernf0_state::sound_command_w)
{
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
machine().scheduler().synchronize(timer_expired_delegate(FUNC(wyvernf0_state::nmi_callback),this), data);
}
diff --git a/src/mame/drivers/xavix.cpp b/src/mame/drivers/xavix.cpp
index e5f3630d937..f0f9f8b4570 100644
--- a/src/mame/drivers/xavix.cpp
+++ b/src/mame/drivers/xavix.cpp
@@ -371,18 +371,18 @@ void xavix_state::xavix_lowbus_map(address_map &map)
map(0x7a80, 0x7a80).rw(FUNC(xavix_state::ioevent_enable_r), FUNC(xavix_state::ioevent_enable_w));
map(0x7a81, 0x7a81).rw(FUNC(xavix_state::ioevent_irqstate_r), FUNC(xavix_state::ioevent_irqack_w));
- // Mouse?
- map(0x7b00, 0x7b00).rw(FUNC(xavix_state::mouse_7b00_r), FUNC(xavix_state::mouse_7b00_w));
- map(0x7b01, 0x7b01).rw(FUNC(xavix_state::mouse_7b01_r), FUNC(xavix_state::mouse_7b01_w));
- map(0x7b10, 0x7b10).rw(FUNC(xavix_state::mouse_7b10_r), FUNC(xavix_state::mouse_7b10_w));
- map(0x7b11, 0x7b11).rw(FUNC(xavix_state::mouse_7b11_r), FUNC(xavix_state::mouse_7b11_w));
+ // Mouse / Trackball?
+ map(0x7b00, 0x7b00).rw("anport", FUNC(xavix_anport_device::mouse_7b00_r), FUNC(xavix_anport_device::mouse_7b00_w));
+ map(0x7b01, 0x7b01).rw("anport", FUNC(xavix_anport_device::mouse_7b01_r), FUNC(xavix_anport_device::mouse_7b01_w));
+ map(0x7b10, 0x7b10).rw("anport", FUNC(xavix_anport_device::mouse_7b10_r), FUNC(xavix_anport_device::mouse_7b10_w));
+ map(0x7b11, 0x7b11).rw("anport", FUNC(xavix_anport_device::mouse_7b11_r), FUNC(xavix_anport_device::mouse_7b11_w));
// Lightgun / pen 2 control
//map(0x7b18, 0x7b1b)
// ADC registers
- map(0x7b80, 0x7b80).rw(FUNC(xavix_state::adc_7b80_r), FUNC(xavix_state::adc_7b80_w)); // rad_snow (not often)
- map(0x7b81, 0x7b81).rw(FUNC(xavix_state::adc_7b81_r), FUNC(xavix_state::adc_7b81_w)); // written (often, m_trck, analog related?)
+ map(0x7b80, 0x7b80).rw("adc", FUNC(xavix_adc_device::adc_7b80_r), FUNC(xavix_adc_device::adc_7b80_w)); // rad_snow (not often)
+ map(0x7b81, 0x7b81).rw("adc", FUNC(xavix_adc_device::adc_7b81_r), FUNC(xavix_adc_device::adc_7b81_w)); // written (often, m_trck, analog related?)
// Sleep control
//map(0x7b82, 0x7b83)
@@ -394,11 +394,11 @@ void xavix_state::xavix_lowbus_map(address_map &map)
map(0x7c03, 0x7c03).r(FUNC(xavix_state::timer_curval_r));
// Barrel Shifter registers
- map(0x7ff0, 0x7ff1).rw(FUNC(xavix_state::barrel_r), FUNC(xavix_state::barrel_w));
+ map(0x7ff0, 0x7ff1).rw("math", FUNC(xavix_math_device::barrel_r), FUNC(xavix_math_device::barrel_w));
// Multiply / Divide registers
- map(0x7ff2, 0x7ff4).rw(FUNC(xavix_state::mult_param_r), FUNC(xavix_state::mult_param_w));
- map(0x7ff5, 0x7ff6).rw(FUNC(xavix_state::mult_r), FUNC(xavix_state::mult_w));
+ map(0x7ff2, 0x7ff4).rw("math", FUNC(xavix_math_device::mult_param_r), FUNC(xavix_math_device::mult_param_w));
+ map(0x7ff5, 0x7ff6).rw("math", FUNC(xavix_math_device::mult_r), FUNC(xavix_math_device::mult_w));
// CPU Vector registers
map(0x7ff9, 0x7ff9).w(FUNC(xavix_state::vector_enable_w)); // enables / disables the custom vectors
@@ -889,202 +889,12 @@ static INPUT_PORTS_START( popira2 ) // player 2 buttons have heavy latency, prob
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_POWER_OFF ) PORT_NAME("Power Switch") // pressing this will turn the game off.
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_MODIFY("AN0") // 00
- PORT_DIPNAME( 0x0001, 0x0001, "AN0" )
- PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // buttons respond in a strange way if these are high
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P2 Pad 1") PORT_PLAYER(2)
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P2 Pad 2") PORT_PLAYER(2)
-
- PORT_MODIFY("AN1") // 01
- PORT_DIPNAME( 0x0001, 0x0001, "AN1" )
- PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // buttons respond in a strange way if these are high
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P2 Pad 3") PORT_PLAYER(2)
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("P2 Pad 4") PORT_PLAYER(2)
-
- PORT_MODIFY("AN2") // 02
- PORT_DIPNAME( 0x0001, 0x0001, "AN2" )
- PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
-
-
- PORT_MODIFY("AN3") // 03
- PORT_DIPNAME( 0x0001, 0x0001, "AN3" )
- PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
-
-
-
- PORT_MODIFY("AN4") // 10
- PORT_DIPNAME( 0x0001, 0x0001, "AN4" )
- PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
-
-
- PORT_MODIFY("AN5") // 11
- PORT_DIPNAME( 0x0001, 0x0001, "AN5" )
- PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
-
- PORT_MODIFY("AN6") // 12
- PORT_DIPNAME( 0x0001, 0x0001, "AN6" )
- PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
-
-
- PORT_MODIFY("AN7") // 13
- PORT_DIPNAME( 0x0001, 0x0001, "AN7" )
- PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ // main input processing code is at 028059, which ends with setting a timer (028079) to read analog ports and get these buttons that way. main timer handler is at 00eb77, which reads ports via the ADC. $c3 where ports are stored is also checked at 00e6f4
+ PORT_START("P2")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P2 Pad 1") PORT_PLAYER(2)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P2 Pad 2") PORT_PLAYER(2)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P2 Pad 3") PORT_PLAYER(2)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("P2 Pad 4") PORT_PLAYER(2)
INPUT_PORTS_END
@@ -1235,8 +1045,12 @@ static INPUT_PORTS_START( ttv_mx )
PORT_MODIFY("IN0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) // Accel
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) // Brake
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Pause")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_NAME("Motion Up") // you tilt the device, but actual inputs are digital
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_NAME("Motion Down")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_NAME("Motion Left")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_NAME("Motion Right")
INPUT_PORTS_END
@@ -1286,6 +1100,47 @@ static INPUT_PORTS_START( epo_epp )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
INPUT_PORTS_END
+// there is also a rumble output, likely mapped to one of the port bits
+static INPUT_PORTS_START( epo_guru )
+ PORT_INCLUDE(xavix)
+
+ PORT_MODIFY("IN0")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 )
+
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) // used in the 'from behind' game at least
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
+
+ PORT_MODIFY("MOUSE1X")
+// PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(6) PORT_KEYDELTA(16) PORT_PLAYER(1) PORT_MINMAX(0x44,0xbc)
+ PORT_BIT( 0x1f, 0x10, IPT_AD_STICK_X ) PORT_SENSITIVITY(6) PORT_KEYDELTA(16) PORT_PLAYER(1) // PORT_MINMAX(0x44,0xbc)
+
+ /*
+ (0x20 is subtracted from value returned in read handler)
+
+ main game
+ 00 still
+ 01 - 3c right
+ 3d - 78 left - 78 is a nice slow left but invalid for the sub game
+ 79 - 7f right
+ 80 - 87 left
+ 88 - c3 right
+ c4 - ff left
+
+ sub game (break-out)
+ 00 still
+ 01 - 3f right
+ 40 - 7f left
+ 80 still
+ 81 - bf right
+ c0 - ff left
+
+ so valid range seems to be c4-ff (left), 00 (still), 01-3c (right) even if this means the slowest speed going left is faster than the slowest speed going right
+ maybe actual range is 5 bits either way?
+ 4 bits either way seems to work best in practice
+
+ */
+INPUT_PORTS_END
+
static INPUT_PORTS_START( epo_efdx )
PORT_INCLUDE(xavix_i2c)
@@ -1387,6 +1242,24 @@ void xavix_state::xavix(machine_config &config)
ADDRESS_MAP_BANK(config, "lowbus").set_map(&xavix_state::xavix_lowbus_map).set_options(ENDIANNESS_LITTLE, 8, 24, 0x8000);
+ XAVIX_ADC(config, m_adc, 0);
+ m_adc->read_0_callback().set(FUNC(xavix_state::adc0_r));
+ m_adc->read_1_callback().set(FUNC(xavix_state::adc1_r));
+ m_adc->read_2_callback().set(FUNC(xavix_state::adc2_r));
+ m_adc->read_3_callback().set(FUNC(xavix_state::adc3_r));
+ m_adc->read_4_callback().set(FUNC(xavix_state::adc4_r));
+ m_adc->read_5_callback().set(FUNC(xavix_state::adc5_r));
+ m_adc->read_6_callback().set(FUNC(xavix_state::adc6_r));
+ m_adc->read_7_callback().set(FUNC(xavix_state::adc7_r));
+
+ XAVIX_ANPORT(config, m_anport, 0);
+ m_anport->read_0_callback().set(FUNC(xavix_state::anport0_r));
+ m_anport->read_1_callback().set(FUNC(xavix_state::anport1_r));
+ m_anport->read_2_callback().set(FUNC(xavix_state::anport2_r));
+ m_anport->read_3_callback().set(FUNC(xavix_state::anport3_r));
+
+ XAVIX_MATH(config, m_math, 0);
+
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60);
@@ -1415,6 +1288,14 @@ void xavix_state::xavix(machine_config &config)
m_sound->add_route(1, "rspeaker", 1.0);
}
+void xavix_guru_state::xavix_guru(machine_config &config)
+{
+ xavix_nv(config);
+
+ m_anport->read_2_callback().set(FUNC(xavix_guru_state::guru_anport2_r));
+}
+
+
void xavix_i2c_state::xavix_i2c_24lc02(machine_config &config)
{
xavix(config);
@@ -1438,6 +1319,16 @@ void xavix_i2c_state::xavix_i2c_24lc04(machine_config &config)
I2CMEM(config, "i2cmem", 0).set_page_size(16).set_data_size(0x200); // 24LC04 on Nostalgia games, 24C04 on others
}
+void xavix_i2c_ltv_tam_state::xavix_i2c_24lc04_tam(machine_config &config)
+{
+ xavix_i2c_24lc04(config);
+
+ m_anport->read_0_callback().set(FUNC(xavix_i2c_ltv_tam_state::tam_anport0_r));
+ m_anport->read_1_callback().set(FUNC(xavix_i2c_ltv_tam_state::tam_anport1_r));
+ m_anport->read_2_callback().set(FUNC(xavix_i2c_ltv_tam_state::tam_anport2_r));
+ m_anport->read_3_callback().set(FUNC(xavix_i2c_ltv_tam_state::tam_anport3_r));
+}
+
void xavix_i2c_state::xavix_i2c_24c08(machine_config &config)
{
xavix(config);
@@ -1521,6 +1412,16 @@ void xavix_state::xavix2000_nv(machine_config &config)
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1);
}
+void xavix_2000_nv_sdb_state::xavix2000_nv_sdb(machine_config &config)
+{
+ xavix2000_nv(config);
+
+ m_anport->read_0_callback().set(FUNC(xavix_2000_nv_sdb_state::sdb_anport0_r));
+ m_anport->read_1_callback().set(FUNC(xavix_2000_nv_sdb_state::sdb_anport1_r));
+ m_anport->read_2_callback().set(FUNC(xavix_2000_nv_sdb_state::sdb_anport2_r));
+ m_anport->read_3_callback().set(FUNC(xavix_2000_nv_sdb_state::sdb_anport3_r));
+}
+
void xavix_i2c_state::xavix2000_i2c_24c04(machine_config &config)
{
xavix2000(config);
@@ -1624,6 +1525,43 @@ void xavix_cart_state::xavix_cart_popira(machine_config &config)
SOFTWARE_LIST(config, "cart_list_japan_sp").set_original("ekara_japan_sp");
}
+// see code at 028060, using table from 00eb6d for conversion
+READ8_MEMBER(xavix_popira2_cart_state::popira2_adc0_r)
+{
+ uint8_t p2 = m_p2->read() & 0x03;
+ switch (p2)
+ {
+ case 0x00: return 0xa0;
+ case 0x01: return 0x60;
+ case 0x02: return 0x10;
+ case 0x03: return 0x00;
+ }
+
+ return 0x00;
+}
+
+READ8_MEMBER(xavix_popira2_cart_state::popira2_adc1_r)
+{
+ uint8_t p2 = (m_p2->read() >> 2) & 0x03;
+ switch (p2)
+ {
+ case 0x00: return 0xa0;
+ case 0x01: return 0x60;
+ case 0x02: return 0x10;
+ case 0x03: return 0x00;
+ }
+
+ return 0x00;
+}
+
+void xavix_popira2_cart_state::xavix_cart_popira2(machine_config &config)
+{
+ xavix_cart_popira(config);
+
+ m_adc->read_0_callback().set(FUNC(xavix_popira2_cart_state::popira2_adc0_r));
+ m_adc->read_1_callback().set(FUNC(xavix_popira2_cart_state::popira2_adc1_r));
+}
+
void xavix_cart_state::xavix_cart_ddrfammt(machine_config &config)
{
xavix_cart(config);
@@ -2007,7 +1945,7 @@ CONS( 2006, epo_epp3, 0, 0, xavix, epo_epp, xavix_state,
CONS( 200?, epo_efdx, 0, 0, xavix_i2c_24c08, epo_efdx, xavix_i2c_state, init_epo_efdx, "Epoch / SSD Company LTD", "Excite Fishing DX (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
-CONS( 2005, epo_guru, 0, 0, xavix, xavix, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Gururin World (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2005, epo_guru, 0, 0, xavix_guru, epo_guru, xavix_guru_state, init_xavix, "Epoch / SSD Company LTD", "Gururin World (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
CONS( 2002, epo_dmon, 0, 0, xavix_i2c_24c02, xavix_i2c,xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "Doraemon Wakuwaku Kuukihou (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // full / proper title?
@@ -2037,7 +1975,7 @@ CONS( 2001, ddrfammt, 0, 0, xavix_cart_ddrfammt,ddrfammt, xavix_cart_
CONS( 2000, popira, 0, 0, xavix_cart_popira,popira, xavix_cart_state, init_xavix, "Takara / SSD Company LTD", "Popira (Japan)", MACHINE_IMPERFECT_SOUND/*|MACHINE_IS_BIOS_ROOT*/ ) // The original Popira is a single yellow unit
-CONS( 2002, popira2, 0, 0, xavix_cart_popira,popira2, xavix_popira2_cart_state, init_xavix, "Takara / SSD Company LTD", "Popira 2 (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND/*|MACHINE_IS_BIOS_ROOT*/ ) // Popira 2 is a set of 2 blue & green linked units (2nd unit is just a controller, no CPU or TV out)
+CONS( 2002, popira2, 0, 0, xavix_cart_popira2,popira2, xavix_popira2_cart_state, init_xavix, "Takara / SSD Company LTD", "Popira 2 (Japan)", MACHINE_IMPERFECT_SOUND/*|MACHINE_IS_BIOS_ROOT*/ ) // Popira 2 is a set of 2 blue & green linked units (2nd unit is just a controller, no CPU or TV out)
CONS( 2003, taikodp, 0, 0, xavix_i2c_taiko, taikodp, xavix_i2c_cart_state, init_xavix, "Takara / SSD Company LTD", "Taiko De Popira (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND /*|MACHINE_IS_BIOS_ROOT*/ ) // inputs? are the drums analog?
@@ -2048,7 +1986,7 @@ CONS( 2003, evio, 0, 0, xavix_nv, evio, xavix_state,
// 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
-CONS( 2006, ltv_tam, 0, 0, xavix_i2c_24lc04, ltv_tam,xavix_i2c_ltv_tam_state, init_xavix, "Bandai / SSD Company LTD", "Let's! TV Play Chou Ninki Spot! Korogashi-Houdai Tamagotchi Resort (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2006, ltv_tam, 0, 0, xavix_i2c_24lc04_tam, ltv_tam,xavix_i2c_ltv_tam_state, init_xavix, "Bandai / SSD Company LTD", "Let's! TV Play Chou Ninki Spot! Korogashi-Houdai Tamagotchi Resort (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
/* SuperXaviX(?) (XaviX 2000 type CPU) hardware titles (2nd XaviX generation?)
@@ -2056,7 +1994,7 @@ CONS( 2006, ltv_tam, 0, 0, xavix_i2c_24lc04, ltv_tam,xavix_i2c_ltv_
these use the SSD 2000 NEC 85605-621 type CPU
XavixPort Golf is "SSD 2003 SuperXaviX MXIC 2003 3009" (not dumped yet, but actually marked as SuperXaviX unlike the others!)
-
+
This CPU type adds extra opcodes that don't appear to be present in the 97/98 types
It does not appear to support the bitmap modes or 16-bit ROMs found in the 2002 type
*/
@@ -2098,7 +2036,7 @@ ROM_START( ban_onep )
ROM_END
CONS( 2002, epo_ebox, 0, 0, xavix2000_nv, epo_epp, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Excite Boxing (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // doesn't use XaviX2000 extra opcodes, but had that type of CPU
-CONS( 2004, epo_sdb, 0, 0, xavix2000_nv, epo_sdb, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Super Dash Ball (Japan)", MACHINE_IMPERFECT_SOUND )
+CONS( 2004, epo_sdb, 0, 0, xavix2000_nv_sdb, epo_sdb, xavix_2000_nv_sdb_state, init_xavix, "Epoch / SSD Company LTD", "Super Dash Ball (Japan)", MACHINE_IMPERFECT_SOUND )
CONS( 2005, ttv_sw, 0, 0, xavix2000_i2c_24c02, ttv_lotr, xavix_i2c_lotr_state, init_xavix, "Tiger / SSD Company LTD", "Star Wars Saga Edition - Lightsaber Battle Game", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
CONS( 2005, ttv_lotr, 0, 0, xavix2000_i2c_24c02, ttv_lotr, xavix_i2c_lotr_state, init_xavix, "Tiger / SSD Company LTD", "Lord Of The Rings - Warrior of Middle-Earth", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
diff --git a/src/mame/drivers/xbox.cpp b/src/mame/drivers/xbox.cpp
index 1452d3ce5c3..d711932aa4f 100644
--- a/src/mame/drivers/xbox.cpp
+++ b/src/mame/drivers/xbox.cpp
@@ -170,26 +170,24 @@ void xbox_ata_devices(device_slot_interface &device)
device.option_add("cdrom", ATAPI_CDROM);
}
-MACHINE_CONFIG_START(xbox_state::xbox)
+void xbox_state::xbox(machine_config &config)
+{
xbox_base(config);
m_maincpu->set_addrmap(AS_PROGRAM, &xbox_state::xbox_map);
m_maincpu->set_addrmap(AS_IO, &xbox_state::xbox_map_io);
- MCFG_DEVICE_MODIFY(":pci:09.0:ide:0")
- MCFG_DEVICE_SLOT_INTERFACE(xbox_ata_devices, "hdd", true)
- MCFG_DEVICE_MODIFY(":pci:09.0:ide:1")
- MCFG_DEVICE_SLOT_INTERFACE(xbox_ata_devices, "cdrom", true)
+ subdevice<ide_controller_32_device>(":pci:09.0:ide")->options(xbox_ata_devices, "hdd", "cdrom", true);
OHCI_USB_CONNECTOR(config, ":pci:02.0:port1", usb_xbox, nullptr, false);
OHCI_USB_CONNECTOR(config, ":pci:02.0:port2", usb_xbox, nullptr, false);
OHCI_USB_CONNECTOR(config, ":pci:02.0:port3", usb_xbox, "xbox_controller", false);
OHCI_USB_CONNECTOR(config, ":pci:02.0:port4", usb_xbox, nullptr, false);
-/* sound hardware */
+ /* sound hardware */
SPEAKER(config, "mono").front_center();
OHCI_GAME_CONTROLLER(config, "ohci_gamepad", 0);
-MACHINE_CONFIG_END
+}
/***************************************************************************
diff --git a/src/mame/drivers/ymmu100.cpp b/src/mame/drivers/ymmu100.cpp
index c363f3c33ce..86a2de6af84 100644
--- a/src/mame/drivers/ymmu100.cpp
+++ b/src/mame/drivers/ymmu100.cpp
@@ -132,9 +132,11 @@
#include "bus/midi/midiinport.h"
#include "bus/midi/midioutport.h"
#include "cpu/h8/h83002.h"
+#include "cpu/h8/h83003.h"
#include "cpu/h8/h8s2655.h"
#include "video/hd44780.h"
#include "sound/swp30.h"
+#include "sound/meg.h"
#include "debugger.h"
#include "screen.h"
@@ -163,6 +165,32 @@ static INPUT_PORTS_START( mu100 )
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
INPUT_PORTS_END
+static INPUT_PORTS_START( vl70 )
+ PORT_START("B0")
+ PORT_BIT(0x83, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Play") PORT_CODE(KEYCODE_A)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Effect") PORT_CODE(KEYCODE_F)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Midi/WX") PORT_CODE(KEYCODE_X)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Exit") PORT_CODE(KEYCODE_BACKSPACE)
+
+ PORT_START("B1")
+ PORT_BIT(0x83, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Edit") PORT_CODE(KEYCODE_E)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Mode") PORT_CODE(KEYCODE_M)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Part -") PORT_CODE(KEYCODE_OPENBRACE)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Select <") PORT_CODE(KEYCODE_COMMA)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Part +") PORT_CODE(KEYCODE_CLOSEBRACE)
+
+ PORT_START("B2")
+ PORT_BIT(0x83, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Util") PORT_CODE(KEYCODE_U)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Breath") PORT_CODE(KEYCODE_B)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Value -") PORT_CODE(KEYCODE_MINUS)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Select >") PORT_CODE(KEYCODE_STOP)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Value +") PORT_CODE(KEYCODE_EQUALS)
+INPUT_PORTS_END
+
class mu100_state : public driver_device
{
public:
@@ -170,12 +198,19 @@ public:
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_mu80cpu(*this, "mu80cpu")
+ , m_vl70cpu(*this, "vl70cpu")
, m_swp30(*this, "swp30")
+ , m_meg(*this, "meg")
, m_lcd(*this, "lcd")
, m_ioport_p7(*this, "P7")
, m_ioport_p8(*this, "P8")
+ , m_ioport_b0(*this, "B0")
+ , m_ioport_b1(*this, "B1")
+ , m_ioport_b2(*this, "B2")
{ }
+ void vl70(machine_config &config);
+ void mu50(machine_config &config);
void mu80(machine_config &config);
void mu100(machine_config &config);
@@ -259,7 +294,7 @@ public:
}
protected:
- virtual u16 adc7_r();
+ virtual u16 adc_type_r();
private:
enum {
@@ -269,6 +304,12 @@ private:
};
enum {
+ P6_LCD_RS = 0x04,
+ P6_LCD_RW = 0x02,
+ P6_LCD_ENABLE = 0x01
+ };
+
+ enum {
PA_LCD_RS = 0x02,
PA_LCD_ENABLE = 0x20,
PA_LCD_RW = 0x40
@@ -276,19 +317,26 @@ private:
optional_device<h8s2655_device> m_maincpu;
optional_device<h83002_device> m_mu80cpu;
- required_device<swp30_device> m_swp30;
+ optional_device<h83003_device> m_vl70cpu;
+ optional_device<swp30_device> m_swp30;
+ optional_device<meg_device> m_meg;
required_device<hd44780_device> m_lcd;
- required_ioport m_ioport_p7;
- required_ioport m_ioport_p8;
-
- u8 cur_p1, cur_p2, cur_p3, cur_p5, cur_p6, cur_pa, cur_pb, cur_pf, cur_pg;
- u8 cur_ic32;
+ optional_ioport m_ioport_p7;
+ optional_ioport m_ioport_p8;
+ optional_ioport m_ioport_b0;
+ optional_ioport m_ioport_b1;
+ optional_ioport m_ioport_b2;
+
+ u8 cur_p1, cur_p2, cur_p3, cur_p5, cur_p6, cur_pa, cur_pb, cur_pc, cur_pf, cur_pg;
+ u8 cur_ic32, cur_leds;
float contrast;
- u16 adc0_r();
- u16 adc2_r();
- u16 adc4_r();
- u16 adc6_r();
+ u16 adc_zero_r();
+ u16 adc_ar_r();
+ u16 adc_al_r();
+ u16 adc_midisw_r();
+ u16 adc_battery_r();
+ u16 adc_breath_r();
void p1_w(u16 data);
u16 p1_r();
@@ -301,12 +349,27 @@ private:
u16 pa_r();
void pb_w(u16 data);
u16 pb_r();
+ void p6_w_mu80(u16 data);
+ u16 p6_r_mu80();
void pa_w_mu80(u16 data);
u16 pa_r_mu80();
void pb_w_mu80(u16 data);
u16 pb_r_mu80();
+ void p6_w_vl70(u16 data);
+ u16 p6_r_vl70();
+ void pa_w_vl70(u16 data);
+ u16 pa_r_vl70();
+ void pb_w_vl70(u16 data);
+ void pc_w_vl70(u16 data);
+ u16 pc_r_vl70();
void pf_w(u16 data);
void pg_w(u16 data);
+ void p6_w_mu50(u16 data);
+ u16 p6_r_mu50();
+ void pa_w_mu50(u16 data);
+ u16 pa_r_mu50();
+ u16 pb_r_mu50();
+ void pb_w_mu50(u16 data);
float lightlevel(const u8 *src, const u8 *render);
u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
@@ -315,6 +378,9 @@ private:
void mu100_map(address_map &map);
void mu80_iomap(address_map &map);
void mu80_map(address_map &map);
+ void mu50_iomap(address_map &map);
+ void vl70_iomap(address_map &map);
+ void vl70_map(address_map &map);
void swp30_map(address_map &map);
};
@@ -325,7 +391,7 @@ public:
{ }
private:
- virtual u16 adc7_r() override;
+ virtual u16 adc_type_r() override;
};
void mu100_state::prg_write_tap(offs_t address, u16 data, u16 mem_mask)
@@ -488,7 +554,8 @@ void mu100_state::chan_write_tap(offs_t address, u16 data, u16 mem_mask)
void mu100_state::machine_start()
{
- cur_p1 = cur_p2 = cur_p3 = cur_p5 = cur_p6 = cur_pa = cur_pf = cur_pg = cur_ic32 = 0xff;
+ cur_p1 = cur_p2 = cur_p3 = cur_p5 = cur_p6 = cur_pa = cur_pc = cur_pf = cur_pg = cur_ic32 = 0xff;
+ cur_leds = 0x00;
contrast = 1.0;
}
@@ -526,7 +593,7 @@ u32 mu100_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, cons
}
for(int i=0; i<6; i++)
- if(cur_ic32 & (1 << (i == 5 ? 7 : i))) {
+ if(cur_leds & (1 << i)) {
int x = 830 + 40*(i & 1);
int y = 55 + 65*(i >> 1);
for(int yy=-9; yy <= 9; yy++) {
@@ -543,6 +610,14 @@ void mu100_state::mu80_map(address_map &map)
{
map(0x000000, 0x07ffff).rom().region("mu80cpu", 0);
map(0x200000, 0x20ffff).ram(); // 64K work RAM
+ map(0x440000, 0x44001f).m(m_meg, FUNC(meg_device::map));
+}
+
+void mu100_state::vl70_map(address_map &map)
+{
+ map(0x000000, 0x1fffff).rom().region("vl70cpu", 0);
+ map(0x200000, 0x20ffff).ram(); // 64K work RAM
+ map(0x600000, 0x60001f).m(m_meg, FUNC(meg_device::map));
}
void mu100_state::mu100_map(address_map &map)
@@ -552,38 +627,49 @@ void mu100_state::mu100_map(address_map &map)
map(0x400000, 0x401fff).m(m_swp30, FUNC(swp30_device::map));
}
-u16 mu100_state::adc0_r()
+// Grounded adc input
+u16 mu100_state::adc_zero_r()
{
- // logerror("adc0_r\n");
return 0;
}
-u16 mu100_state::adc2_r()
+// Analog input right (also sent to the swp)
+u16 mu100_state::adc_ar_r()
+{
+ return 0;
+}
+
+// Analog input left (also sent to the swp)
+u16 mu100_state::adc_al_r()
{
- logerror("adc2_r\n");
return 0;
}
// Put the host switch to pure midi
-u16 mu100_state::adc4_r()
+u16 mu100_state::adc_midisw_r()
{
return 0;
}
// Battery level
-u16 mu100_state::adc6_r()
+u16 mu100_state::adc_battery_r()
{
- logerror("adc6_r\n");
- return 0x3ff;
+ return 0x200;
+}
+
+// Breath controller
+u16 mu100_state::adc_breath_r()
+{
+ return 0x000;
}
// model detect. pulled to GND (0) on MU100, to 0.5Vcc on the card version, to Vcc on MU100R
-u16 mu100_state::adc7_r()
+u16 mu100_state::adc_type_r()
{
return 0;
}
-u16 mu100r_state::adc7_r()
+u16 mu100r_state::adc_type_r()
{
return 0x3ff;
}
@@ -670,8 +756,10 @@ u16 mu100_state::pa_r()
void mu100_state::pf_w(u16 data)
{
- if(!(cur_pf & 0x01) && (data & 0x01))
+ if(!(cur_pf & 0x01) && (data & 0x01)) {
cur_ic32 = cur_p1;
+ cur_leds = (cur_p1 & 0x1f) | ((cur_p1 & 0x80) >> 2);
+ }
cur_pf = data;
}
@@ -696,19 +784,31 @@ u16 mu100_state::pb_r_mu80()
else
return m_lcd->control_read();
} else
+ {
+ if(!(cur_pa & 0x10)) {
+ u8 val = 0xff;
+ if(!(cur_ic32 & 0x20))
+ val &= m_ioport_p7->read();
+ if(!(cur_ic32 & 0x40))
+ val &= m_ioport_p8->read();
+ return val;
+ }
+
return 0x00;
+ }
}
- if(!(cur_pa & 0x10)) {
- u8 val = 0xff;
- if(!(cur_ic32 & 0x20))
- val &= m_ioport_p7->read();
- if(!(cur_ic32 & 0x40))
- val &= m_ioport_p8->read();
- return val;
- }
+ return cur_pb;
+}
- return cur_pa;
+void mu100_state::p6_w_mu80(u16 data)
+{
+ cur_p6 = data;
+}
+
+u16 mu100_state::p6_r_mu80()
+{
+ return cur_p6;
}
void mu100_state::pa_w_mu80(u16 data)
@@ -724,7 +824,9 @@ void mu100_state::pa_w_mu80(u16 data)
}
if(!(cur_pa & 0x08) && (data & 0x08))
+ {
cur_ic32 = cur_pb;
+ }
cur_pa = data;
}
@@ -733,15 +835,166 @@ u16 mu100_state::pa_r_mu80()
{
return cur_pa;
}
+
+void mu100_state::p6_w_vl70(u16 data)
+{
+ if(!(cur_p6 & P6_LCD_ENABLE) && (data & P6_LCD_ENABLE)) {
+ if(!(cur_p6 & P6_LCD_RW)) {
+ if(cur_p6 & P6_LCD_RS)
+ m_lcd->data_write(cur_pa);
+ else
+ m_lcd->control_write(cur_pa);
+ }
+ }
+
+ cur_p6 = data;
+}
+
+void mu100_state::pb_w_vl70(u16 data)
+{
+ cur_leds = bitswap<6>((data >> 2) ^ 0x3f, 5, 3, 1, 4, 2, 0);
+}
+
+void mu100_state::pc_w_vl70(u16 data)
+{
+ cur_pc = data;
+}
+
+u16 mu100_state::pc_r_vl70()
+{
+ u8 r = 0xff;
+ if(!(cur_pc & 0x01))
+ r &= m_ioport_b0->read();
+ if(!(cur_pc & 0x02))
+ r &= m_ioport_b1->read();
+ if(!(cur_pc & 0x80))
+ r &= m_ioport_b2->read();
+ return r;
+}
+
+u16 mu100_state::p6_r_vl70()
+{
+ return cur_p6;
+}
+
+void mu100_state::pa_w_vl70(u16 data)
+{
+ cur_pa = data;
+}
+
+u16 mu100_state::pa_r_vl70()
+{
+ if((cur_p6 & P6_LCD_ENABLE)) {
+ if(cur_p6 & P6_LCD_RW)
+ {
+ if(cur_p6 & P6_LCD_RS)
+ return m_lcd->data_read();
+ else
+ return m_lcd->control_read();
+ } else
+ return 0x00;
+ }
+
+ return cur_pa;
+}
+
+void mu100_state::p6_w_mu50(u16 data)
+{
+ data ^= P6_LCD_ENABLE;
+ if(!(cur_p6 & P6_LCD_ENABLE) && (data & P6_LCD_ENABLE)) {
+ if(!(cur_p6 & P6_LCD_RW)) {
+ if(cur_p6 & P6_LCD_RS)
+ m_lcd->data_write(cur_pa);
+ else
+ m_lcd->control_write(cur_pa);
+ }
+ }
+
+// if(!(cur_pa9 & 0x08) && (data & 0x08))
+// cur_ic32 = cur_pa;
+
+ cur_p6 = data;
+}
+
+u16 mu100_state::p6_r_mu50()
+{
+ return cur_p6;
+}
+
+u16 mu100_state::pb_r_mu50()
+{
+ return cur_pb;
+}
+
+void mu100_state::pb_w_mu50(u16 data)
+{
+ cur_pb = data;
+}
+
+void mu100_state::pa_w_mu50(u16 data)
+{
+ cur_pa = data;
+}
+
+u16 mu100_state::pa_r_mu50()
+{
+ if((cur_p6 & P6_LCD_ENABLE)) {
+ if(cur_p6 & P6_LCD_RW)
+ {
+ if(cur_p6 & P6_LCD_RS)
+ return m_lcd->data_read();
+ else
+ return m_lcd->control_read();
+ } else
+ return 0x00;
+ }
+ return cur_pa;
+}
+
void mu100_state::mu80_iomap(address_map &map)
{
+ map(h8_device::PORT_6, h8_device::PORT_6).rw(FUNC(mu100_state::p6_r_mu80), FUNC(mu100_state::p6_w_mu80));
map(h8_device::PORT_A, h8_device::PORT_A).rw(FUNC(mu100_state::pa_r_mu80), FUNC(mu100_state::pa_w_mu80));
map(h8_device::PORT_B, h8_device::PORT_B).rw(FUNC(mu100_state::pb_r_mu80), FUNC(mu100_state::pb_w_mu80));
- map(h8_device::ADC_0, h8_device::ADC_0).r(FUNC(mu100_state::adc0_r));
- map(h8_device::ADC_2, h8_device::ADC_2).r(FUNC(mu100_state::adc2_r));
- map(h8_device::ADC_4, h8_device::ADC_4).r(FUNC(mu100_state::adc4_r));
- map(h8_device::ADC_6, h8_device::ADC_6).r(FUNC(mu100_state::adc6_r));
- map(h8_device::ADC_7, h8_device::ADC_7).r(FUNC(mu100_state::adc7_r));
+ map(h8_device::ADC_0, h8_device::ADC_0).r(FUNC(mu100_state::adc_ar_r));
+ map(h8_device::ADC_1, h8_device::ADC_1).r(FUNC(mu100_state::adc_zero_r));
+ map(h8_device::ADC_2, h8_device::ADC_2).r(FUNC(mu100_state::adc_al_r));
+ map(h8_device::ADC_3, h8_device::ADC_3).r(FUNC(mu100_state::adc_zero_r));
+ map(h8_device::ADC_4, h8_device::ADC_4).r(FUNC(mu100_state::adc_midisw_r));
+ map(h8_device::ADC_5, h8_device::ADC_6).r(FUNC(mu100_state::adc_zero_r));
+ map(h8_device::ADC_6, h8_device::ADC_6).r(FUNC(mu100_state::adc_battery_r));
+ map(h8_device::ADC_7, h8_device::ADC_7).r(FUNC(mu100_state::adc_zero_r)); // inputmod from the gate array
+}
+
+void mu100_state::mu50_iomap(address_map &map)
+{
+ map(h8_device::PORT_6, h8_device::PORT_6).rw(FUNC(mu100_state::p6_r_mu50), FUNC(mu100_state::p6_w_mu50));
+ map(h8_device::PORT_A, h8_device::PORT_A).rw(FUNC(mu100_state::pa_r_mu50), FUNC(mu100_state::pa_w_mu50));
+ map(h8_device::PORT_B, h8_device::PORT_B).rw(FUNC(mu100_state::pb_r_mu50), FUNC(mu100_state::pb_w_mu50));
+ map(h8_device::ADC_0, h8_device::ADC_0).r(FUNC(mu100_state::adc_ar_r));
+ map(h8_device::ADC_1, h8_device::ADC_1).r(FUNC(mu100_state::adc_zero_r));
+ map(h8_device::ADC_2, h8_device::ADC_2).r(FUNC(mu100_state::adc_al_r));
+ map(h8_device::ADC_3, h8_device::ADC_3).r(FUNC(mu100_state::adc_zero_r));
+ map(h8_device::ADC_4, h8_device::ADC_4).r(FUNC(mu100_state::adc_midisw_r));
+ map(h8_device::ADC_5, h8_device::ADC_6).r(FUNC(mu100_state::adc_zero_r));
+ map(h8_device::ADC_6, h8_device::ADC_6).r(FUNC(mu100_state::adc_battery_r));
+ map(h8_device::ADC_7, h8_device::ADC_7).r(FUNC(mu100_state::adc_zero_r)); // inputmod from the gate array
+}
+
+void mu100_state::vl70_iomap(address_map &map)
+{
+ map(h8_device::PORT_6, h8_device::PORT_6).rw(FUNC(mu100_state::p6_r_vl70), FUNC(mu100_state::p6_w_vl70));
+ map(h8_device::PORT_A, h8_device::PORT_A).rw(FUNC(mu100_state::pa_r_vl70), FUNC(mu100_state::pa_w_vl70));
+ map(h8_device::PORT_B, h8_device::PORT_B).w(FUNC(mu100_state::pb_w_vl70));
+ map(h8_device::PORT_C, h8_device::PORT_C).rw(FUNC(mu100_state::pc_r_vl70), FUNC(mu100_state::pc_w_vl70));
+ map(h8_device::ADC_0, h8_device::ADC_0).r(FUNC(mu100_state::adc_breath_r));
+ map(h8_device::ADC_1, h8_device::ADC_6).r(FUNC(mu100_state::adc_zero_r));
+ map(h8_device::ADC_2, h8_device::ADC_2).r(FUNC(mu100_state::adc_midisw_r));
+ map(h8_device::ADC_3, h8_device::ADC_6).r(FUNC(mu100_state::adc_zero_r));
+ map(h8_device::ADC_4, h8_device::ADC_4).r(FUNC(mu100_state::adc_battery_r));
+ map(h8_device::ADC_5, h8_device::ADC_6).r(FUNC(mu100_state::adc_zero_r));
+ map(h8_device::ADC_6, h8_device::ADC_6).r(FUNC(mu100_state::adc_zero_r));
+ map(h8_device::ADC_7, h8_device::ADC_7).r(FUNC(mu100_state::adc_zero_r));
}
void mu100_state::mu100_iomap(address_map &map)
@@ -754,11 +1007,14 @@ void mu100_state::mu100_iomap(address_map &map)
map(h8_device::PORT_A, h8_device::PORT_A).rw(FUNC(mu100_state::pa_r), FUNC(mu100_state::pa_w));
map(h8_device::PORT_F, h8_device::PORT_F).w(FUNC(mu100_state::pf_w));
map(h8_device::PORT_G, h8_device::PORT_G).w(FUNC(mu100_state::pg_w));
- map(h8_device::ADC_0, h8_device::ADC_0).r(FUNC(mu100_state::adc0_r));
- map(h8_device::ADC_2, h8_device::ADC_2).r(FUNC(mu100_state::adc2_r));
- map(h8_device::ADC_4, h8_device::ADC_4).r(FUNC(mu100_state::adc4_r));
- map(h8_device::ADC_6, h8_device::ADC_6).r(FUNC(mu100_state::adc6_r));
- map(h8_device::ADC_7, h8_device::ADC_7).r(FUNC(mu100_state::adc7_r));
+ map(h8_device::ADC_0, h8_device::ADC_0).r(FUNC(mu100_state::adc_ar_r));
+ map(h8_device::ADC_1, h8_device::ADC_1).r(FUNC(mu100_state::adc_zero_r));
+ map(h8_device::ADC_2, h8_device::ADC_2).r(FUNC(mu100_state::adc_al_r));
+ map(h8_device::ADC_1, h8_device::ADC_3).r(FUNC(mu100_state::adc_zero_r));
+ map(h8_device::ADC_4, h8_device::ADC_4).r(FUNC(mu100_state::adc_midisw_r));
+ map(h8_device::ADC_5, h8_device::ADC_5).r(FUNC(mu100_state::adc_zero_r));
+ map(h8_device::ADC_6, h8_device::ADC_6).r(FUNC(mu100_state::adc_battery_r));
+ map(h8_device::ADC_7, h8_device::ADC_7).r(FUNC(mu100_state::adc_type_r));
}
void mu100_state::swp30_map(address_map &map)
@@ -824,11 +1080,54 @@ void mu100_state::mu80(machine_config &config)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
+ // In truth, dual swp-20
+ SWP30(config, m_swp30);
+ m_swp30->set_addrmap(0, &mu100_state::swp30_map);
+ m_swp30->add_route(0, "lspeaker", 1.0);
+ m_swp30->add_route(1, "rspeaker", 1.0);
+
+ MEG(config, m_meg);
+
+ auto &mdin_a(MIDI_PORT(config, "mdin_a"));
+ midiin_slot(mdin_a);
+ mdin_a.rxd_handler().set("mu80cpu:sci1", FUNC(h8_sci_device::rx_w));
+
+ auto &mdin_b(MIDI_PORT(config, "mdin_b"));
+ midiin_slot(mdin_b);
+ mdin_b.rxd_handler().set("mu80cpu:sci0", FUNC(h8_sci_device::rx_w));
+
+ auto &mdout(MIDI_PORT(config, "mdout"));
+ midiout_slot(mdout);
+ m_mu80cpu->subdevice<h8_sci_device>("sci0")->tx_handler().set(mdout, FUNC(midi_port_device::write_txd));
+}
+
+void mu100_state::mu50(machine_config &config)
+{
+ H83002(config, m_mu80cpu, 16_MHz_XTAL);
+ m_mu80cpu->set_addrmap(AS_PROGRAM, &mu100_state::mu80_map);
+ m_mu80cpu->set_addrmap(AS_IO, &mu100_state::mu50_iomap);
+
+ HD44780(config, m_lcd);
+ m_lcd->set_lcd_size(4, 20);
+
+ auto &screen = SCREEN(config, "screen", SCREEN_TYPE_LCD);
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate, asynchronous updating anyway */
+ screen.set_screen_update(FUNC(mu100_state::screen_update));
+ screen.set_size(900, 241);
+ screen.set_visarea(0, 899, 0, 240);
+
+ SPEAKER(config, "lspeaker").front_left();
+ SPEAKER(config, "rspeaker").front_right();
+
+ // In truth, dual swp-20
SWP30(config, m_swp30);
m_swp30->set_addrmap(0, &mu100_state::swp30_map);
m_swp30->add_route(0, "lspeaker", 1.0);
m_swp30->add_route(1, "rspeaker", 1.0);
+ MEG(config, m_meg);
+
auto &mdin_a(MIDI_PORT(config, "mdin_a"));
midiin_slot(mdin_a);
mdin_a.rxd_handler().set("mu80cpu:sci1", FUNC(h8_sci_device::rx_w));
@@ -842,6 +1141,40 @@ void mu100_state::mu80(machine_config &config)
m_mu80cpu->subdevice<h8_sci_device>("sci0")->tx_handler().set(mdout, FUNC(midi_port_device::write_txd));
}
+void mu100_state::vl70(machine_config &config)
+{
+ H83003(config, m_vl70cpu, 10_MHz_XTAL);
+ m_vl70cpu->set_addrmap(AS_PROGRAM, &mu100_state::vl70_map);
+ m_vl70cpu->set_addrmap(AS_IO, &mu100_state::vl70_iomap);
+
+ HD44780(config, m_lcd);
+ m_lcd->set_lcd_size(4, 20);
+
+ auto &screen = SCREEN(config, "screen", SCREEN_TYPE_LCD);
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate, asynchronous updating anyway */
+ screen.set_screen_update(FUNC(mu100_state::screen_update));
+ screen.set_size(900, 241);
+ screen.set_visarea(0, 899, 0, 240);
+
+ SPEAKER(config, "lspeaker").front_left();
+ SPEAKER(config, "rspeaker").front_right();
+
+ MEG(config, m_meg);
+
+ auto &mdin_a(MIDI_PORT(config, "mdin_a"));
+ midiin_slot(mdin_a);
+ mdin_a.rxd_handler().set("vl70cpu:sci1", FUNC(h8_sci_device::rx_w));
+
+ auto &mdin_b(MIDI_PORT(config, "mdin_b"));
+ midiin_slot(mdin_b);
+ mdin_b.rxd_handler().set("vl70cpu:sci0", FUNC(h8_sci_device::rx_w));
+
+ auto &mdout(MIDI_PORT(config, "mdout"));
+ midiout_slot(mdout);
+ m_vl70cpu->subdevice<h8_sci_device>("sci0")->tx_handler().set(mdout, FUNC(midi_port_device::write_txd));
+}
+
#define ROM_LOAD16_WORD_SWAP_BIOS(bios,name,offset,length,hash) \
ROMX_LOAD(name, offset, length, hash, ROM_GROUPWORD | ROM_REVERSE | ROM_BIOS(bios))
@@ -897,7 +1230,28 @@ ROM_START( mu80 )
ROM_LOAD( "mu100-font.bin", 0x0000, 0x1000, BAD_DUMP CRC(a7d6c1d6) SHA1(9f0398d678bdf607cb34d83ee535f3b7fcc97c41) )
ROM_END
+ROM_START( mu50 )
+ ROM_REGION( 0x80000, "mu80cpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "yamaha_mu50.bin", 0x000000, 0x080000, CRC(507168ad) SHA1(58c41f10d292cac35ef0e8f93029fbc4685df586) )
+
+ ROM_REGION( 0x1800000, "swp30", ROMREGION_ERASE00 )
+
+ ROM_REGION( 0x1000, "lcd", 0)
+ // Hand made, 3 characters unused
+ ROM_LOAD( "mu100-font.bin", 0x0000, 0x1000, BAD_DUMP CRC(a7d6c1d6) SHA1(9f0398d678bdf607cb34d83ee535f3b7fcc97c41) )
+ROM_END
+
+ROM_START( vl70 )
+ ROM_REGION( 0x200000, "vl70cpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "vl70m_v111_27c160.bin", 0x000000, 0x200000, CRC(efdba9f0) SHA1(cfa9fb7d2a991e4752393c9677e4ddcbe10866c7) )
+
+ ROM_REGION( 0x1000, "lcd", 0)
+ // Hand made, 3 characters unused
+ ROM_LOAD( "mu100-font.bin", 0x0000, 0x1000, BAD_DUMP CRC(a7d6c1d6) SHA1(9f0398d678bdf607cb34d83ee535f3b7fcc97c41) )
+ROM_END
+
CONS( 1997, mu100, 0, 0, mu100, mu100, mu100_state, empty_init, "Yamaha", "MU100", MACHINE_NOT_WORKING )
CONS( 1997, mu100r, mu100, 0, mu100, mu100, mu100r_state, empty_init, "Yamaha", "MU100 Rackable version", MACHINE_NOT_WORKING )
CONS( 1994, mu80, mu100, 0, mu80, mu100, mu100_state, empty_init, "Yamaha", "MU80", MACHINE_NOT_WORKING )
-
+CONS( 1996, vl70, mu100, 0, vl70, vl70, mu100_state, empty_init, "Yamaha", "VL70-m", MACHINE_NOT_WORKING )
+CONS( 1995, mu50, mu100, 0, mu50, mu100, mu100_state, empty_init, "Yamaha", "MU50", MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/yunsun16.cpp b/src/mame/drivers/yunsun16.cpp
index 6d89fc31b09..3ee2f5391a3 100644
--- a/src/mame/drivers/yunsun16.cpp
+++ b/src/mame/drivers/yunsun16.cpp
@@ -159,7 +159,7 @@ WRITE8_MEMBER(magicbub_state::magicbub_sound_command_w)
// HACK: the game continuously sends this. It'll play the oki sample number 0 on each voice. That sample is 00000-00000.
if ((data & 0xff) != 0x3a)
{
- m_soundlatch->write(space, 0, data & 0xff);
+ m_soundlatch->write(data & 0xff);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
}
diff --git a/src/mame/drivers/zerozone.cpp b/src/mame/drivers/zerozone.cpp
index bf6df337d4c..ce2c7c71a35 100644
--- a/src/mame/drivers/zerozone.cpp
+++ b/src/mame/drivers/zerozone.cpp
@@ -44,7 +44,7 @@ WRITE16_MEMBER( zerozone_state::sound_w )
{
if (ACCESSING_BITS_8_15)
{
- m_soundlatch->write(space, offset, data >> 8);
+ m_soundlatch->write(data >> 8);
m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff);
}
}
diff --git a/src/mame/drivers/zodiack.cpp b/src/mame/drivers/zodiack.cpp
index 705d99273af..b8d34577f7f 100644
--- a/src/mame/drivers/zodiack.cpp
+++ b/src/mame/drivers/zodiack.cpp
@@ -129,7 +129,7 @@ INTERRUPT_GEN_MEMBER(zodiack_state::zodiack_sound_nmi_gen)
WRITE8_MEMBER( zodiack_state::master_soundlatch_w )
{
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
diff --git a/src/mame/includes/apollo.h b/src/mame/includes/apollo.h
index a0be6cfa14a..de0ff49865e 100644
--- a/src/mame/includes/apollo.h
+++ b/src/mame/includes/apollo.h
@@ -90,11 +90,6 @@ uint8_t apollo_get_ram_config_byte(void);
//apollo_get_node_id - get the node id
uint32_t apollo_get_node_id(void);
-#if 0
- // should be called by the CPU core before executing each instruction
-int apollo_instruction_hook(m68000_base_device *device, offs_t curpc);
-#endif
-
void apollo_set_cache_status_register(device_t *device,uint8_t mask, uint8_t data);
/*----------- machine/apollo.cpp -----------*/
@@ -265,7 +260,6 @@ public:
void select_dma_channel(int channel, bool state);
DECLARE_WRITE_LINE_MEMBER(apollo_reset_instr_callback);
- DECLARE_READ32_MEMBER(apollo_instruction_hook);
void common(machine_config &config);
void apollo(machine_config &config);
@@ -687,14 +681,14 @@ public:
private:
// device-level overrides
- virtual void device_start();
- virtual void device_reset();
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
+ 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;
// serial overrides
- virtual void rcv_complete(); // Rx completed receiving byte
- virtual void tra_complete(); // Tx completed sending byte
- virtual void tra_callback(); // Tx send bit
+ virtual void rcv_complete() override; // Rx completed receiving byte
+ virtual void tra_complete() override; // Tx completed sending byte
+ virtual void tra_callback() override; // Tx send bit
TIMER_CALLBACK_MEMBER( poll_timer );
void xmit_char(uint8_t data);
diff --git a/src/mame/includes/astrocde.h b/src/mame/includes/astrocde.h
index 9d5d437d627..9b1301b3897 100644
--- a/src/mame/includes/astrocde.h
+++ b/src/mame/includes/astrocde.h
@@ -129,6 +129,7 @@ public:
DECLARE_READ8_MEMBER(profpac_videoram_r);
DECLARE_WRITE8_MEMBER(profpac_videoram_w);
DECLARE_INPUT_CHANGED_MEMBER(spacezap_monitor);
+ DECLARE_WRITE_LINE_MEMBER(lightpen_trigger_w);
void init_profpac();
void init_spacezap();
void init_robby();
diff --git a/src/mame/includes/canyon.h b/src/mame/includes/canyon.h
index 09553046039..8fc9ce9f167 100644
--- a/src/mame/includes/canyon.h
+++ b/src/mame/includes/canyon.h
@@ -63,7 +63,7 @@ private:
required_shared_ptr<uint8_t> m_videoram;
required_device<f9334_device> m_outlatch;
- required_device<discrete_device> m_discrete;
+ required_device<discrete_sound_device> m_discrete;
/* video-related */
tilemap_t *m_bg_tilemap;
diff --git a/src/mame/includes/cninja.h b/src/mame/includes/cninja.h
index 7c7113d5d65..c0a07a7999e 100644
--- a/src/mame/includes/cninja.h
+++ b/src/mame/includes/cninja.h
@@ -64,6 +64,7 @@ public:
void init_cninjabl2();
DECLARE_MACHINE_START(robocop2);
DECLARE_MACHINE_RESET(robocop2);
+ DECLARE_VIDEO_START(cninja);
DECLARE_VIDEO_START(stoneage);
DECLARE_VIDEO_START(mutantf);
uint32_t screen_update_cninja(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
diff --git a/src/mame/includes/crospang.h b/src/mame/includes/crospang.h
index 45fe72ef674..c470eeaaab7 100644
--- a/src/mame/includes/crospang.h
+++ b/src/mame/includes/crospang.h
@@ -27,16 +27,27 @@ public:
, m_soundlatch(*this, "soundlatch")
{ }
+ void crospang(machine_config &config);
+ void bestri(machine_config &config);
+ void bestria(machine_config &config);
+ void pitapat(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+ virtual void video_start() override;
+
+private:
/* memory pointers */
- required_shared_ptr<uint16_t> m_fg_videoram;
- required_shared_ptr<uint16_t> m_bg_videoram;
- required_shared_ptr<uint16_t> m_spriteram;
+ required_shared_ptr<u16> m_fg_videoram;
+ required_shared_ptr<u16> m_bg_videoram;
+ required_shared_ptr<u16> m_spriteram;
/* video-related */
tilemap_t *m_bg_layer;
tilemap_t *m_fg_layer;
- uint8_t m_bestri_tilebank[4];
- uint8_t m_bestri_tilebankselect;
+ u8 m_tilebank[4];
+ u8 m_tilebankselect;
/* devices */
required_device<cpu_device> m_maincpu;
@@ -44,37 +55,28 @@ public:
required_device<gfxdecode_device> m_gfxdecode;
required_device<generic_latch_8_device> m_soundlatch;
- DECLARE_WRITE16_MEMBER(bestri_tilebank_data_w);
- DECLARE_WRITE16_MEMBER(bestri_tilebank_select_w);
- DECLARE_WRITE16_MEMBER(bestri_bg_scrolly_w);
- DECLARE_WRITE16_MEMBER(bestri_fg_scrolly_w);
- DECLARE_WRITE16_MEMBER(bestri_fg_scrollx_w);
- DECLARE_WRITE16_MEMBER(bestri_bg_scrollx_w);
- DECLARE_WRITE16_MEMBER(crospang_fg_scrolly_w);
- DECLARE_WRITE16_MEMBER(crospang_bg_scrolly_w);
- DECLARE_WRITE16_MEMBER(crospang_fg_scrollx_w);
- DECLARE_WRITE16_MEMBER(crospang_bg_scrollx_w);
- DECLARE_WRITE16_MEMBER(crospang_fg_videoram_w);
- DECLARE_WRITE16_MEMBER(crospang_bg_videoram_w);
- void init_crospang();
+ void tilebank_data_w(u16 data);
+ void tilebank_select_w(u16 data);
+ void bestri_bg_scrolly_w(u16 data);
+ void bestri_fg_scrolly_w(u16 data);
+ void bestri_fg_scrollx_w(u16 data);
+ void bestri_bg_scrollx_w(u16 data);
+ void fg_scrolly_w(u16 data);
+ void bg_scrolly_w(u16 data);
+ void fg_scrollx_w(u16 data);
+ void bg_scrollx_w(u16 data);
+ void fg_videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void bg_videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
- virtual void machine_start() override;
- virtual void machine_reset() override;
- virtual void video_start() override;
- uint32_t screen_update_crospang(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- void tumblepb_gfx1_rearrange();
- void crospang(machine_config &config);
- void bestri(machine_config &config);
- void bestria(machine_config &config);
- void pitapat(machine_config &config);
+ u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ void base_map(address_map &map);
void bestri_map(address_map &map);
void bestria_map(address_map &map);
- void pitapat_map(address_map &map);
- void crospang_base_map(address_map &map);
void crospang_map(address_map &map);
- void crospang_sound_io_map(address_map &map);
- void crospang_sound_map(address_map &map);
+ void pitapat_map(address_map &map);
+ void sound_io_map(address_map &map);
+ void sound_map(address_map &map);
};
#endif // MAME_INCLUDES_CROSPANG_H
diff --git a/src/mame/includes/ddragon.h b/src/mame/includes/ddragon.h
index 8b6e164597f..db4a5313ee2 100644
--- a/src/mame/includes/ddragon.h
+++ b/src/mame/includes/ddragon.h
@@ -123,7 +123,7 @@ private:
optional_region_ptr_array<uint8_t, 2> m_adpcm_rom;
- void ddragon_interrupt_ack(address_space &space, offs_t offset, uint8_t data);
+ void ddragon_interrupt_ack(offs_t offset, uint8_t data);
void dd_adpcm_int(int chip);
/* video/ddragon.c */
diff --git a/src/mame/includes/dec0.h b/src/mame/includes/dec0.h
index da3d10686dc..d3ccfe67c48 100644
--- a/src/mame/includes/dec0.h
+++ b/src/mame/includes/dec0.h
@@ -5,7 +5,6 @@
#pragma once
-#include "machine/74157.h"
#include "cpu/h6280/h6280.h"
#include "cpu/mcs51/mcs51.h"
#include "machine/74157.h"
diff --git a/src/mame/includes/dragrace.h b/src/mame/includes/dragrace.h
index 459d36ad141..5ee3b611cfb 100644
--- a/src/mame/includes/dragrace.h
+++ b/src/mame/includes/dragrace.h
@@ -77,7 +77,7 @@ private:
int m_gear[2];
/* devices */
- required_device<discrete_device> m_discrete;
+ required_device<discrete_sound_device> m_discrete;
required_device<cpu_device> m_maincpu;
required_device<watchdog_timer_device> m_watchdog;
required_device<gfxdecode_device> m_gfxdecode;
diff --git a/src/mame/includes/esd16.h b/src/mame/includes/esd16.h
index 126880dcda9..62682d3f280 100644
--- a/src/mame/includes/esd16.h
+++ b/src/mame/includes/esd16.h
@@ -19,14 +19,14 @@ class esd16_state : public driver_device
public:
esd16_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
- m_vram_0(*this, "vram_0"),
- m_vram_1(*this, "vram_1"),
- m_scroll_0(*this, "scroll_0"),
- m_scroll_1(*this, "scroll_1"),
+ m_vram(*this, "vram_%u", 0U),
+ m_scroll(*this, "scroll_%u", 0U),
m_spriteram(*this, "spriteram"),
m_head_layersize(*this, "head_layersize"),
m_headpanic_platform_x(*this, "platform_x"),
m_headpanic_platform_y(*this, "platform_y"),
+ m_audiobank(*this, "audiobank"),
+ m_io_eepromout(*this, "EEPROMOUT"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_gfxdecode(*this, "gfxdecode"),
@@ -49,22 +49,20 @@ protected:
private:
/* memory pointers */
- required_shared_ptr<uint16_t> m_vram_0;
- required_shared_ptr<uint16_t> m_vram_1;
- required_shared_ptr<uint16_t> m_scroll_0;
- required_shared_ptr<uint16_t> m_scroll_1;
- required_shared_ptr<uint16_t> m_spriteram;
- required_shared_ptr<uint16_t> m_head_layersize;
- required_shared_ptr<uint16_t> m_headpanic_platform_x;
- required_shared_ptr<uint16_t> m_headpanic_platform_y;
+ required_shared_ptr_array<u16, 2> m_vram;
+ required_shared_ptr_array<u16, 2> m_scroll;
+ required_shared_ptr<u16> m_spriteram;
+ required_shared_ptr<u16> m_head_layersize;
+ required_shared_ptr<u16> m_headpanic_platform_x;
+ required_shared_ptr<u16> m_headpanic_platform_y;
+
+ optional_memory_bank m_audiobank;
+ optional_ioport m_io_eepromout;
/* video-related */
- tilemap_t *m_tilemap_0_16x16;
- tilemap_t *m_tilemap_1_16x16;
- tilemap_t *m_tilemap_0;
- tilemap_t *m_tilemap_1;
- int m_tilemap0_color;
- int m_tilemap1_color;
+ tilemap_t *m_tilemap_16x16[2];
+ tilemap_t *m_tilemap[2];
+ int m_tilemap_color[2];
/* devices */
required_device<cpu_device> m_maincpu;
@@ -74,36 +72,32 @@ private:
optional_device<eeprom_serial_93cxx_device> m_eeprom;
required_device<generic_latch_8_device> m_soundlatch;
- DECLARE_WRITE16_MEMBER(esd16_sound_command_w);
- DECLARE_WRITE16_MEMBER(hedpanic_platform_w);
- DECLARE_READ16_MEMBER(esd_eeprom_r);
- DECLARE_WRITE16_MEMBER(esd_eeprom_w);
- DECLARE_WRITE8_MEMBER(esd16_sound_rombank_w);
- DECLARE_READ8_MEMBER(esd16_sound_command_r);
- DECLARE_WRITE16_MEMBER(esd16_vram_0_w);
- DECLARE_WRITE16_MEMBER(esd16_vram_1_w);
- DECLARE_WRITE16_MEMBER(esd16_tilemap0_color_w);
- DECLARE_WRITE16_MEMBER(esd16_tilemap0_color_jumppop_w);
- TILE_GET_INFO_MEMBER(get_tile_info_0);
- TILE_GET_INFO_MEMBER(get_tile_info_0_16x16);
- TILE_GET_INFO_MEMBER(get_tile_info_1);
- TILE_GET_INFO_MEMBER(get_tile_info_1_16x16);
- uint32_t screen_update_hedpanic(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- DECOSPR_PRIORITY_CB_MEMBER(hedpanic_pri_callback);
+ void sound_command_w(u8 data);
+ void hedpanic_platform_w(u16 data);
+ u8 eeprom_r();
+ void eeprom_w(u8 data);
+ void sound_rombank_w(u8 data);
+ template<unsigned Layer> void vram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void tilemap0_color_w(u16 data);
+ void tilemap0_color_jumppop_w(u16 data);
+ template<unsigned Layer> TILE_GET_INFO_MEMBER(get_tile_info);
+ template<unsigned Layer> TILE_GET_INFO_MEMBER(get_tile_info_16x16);
+ u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ DECOSPR_PRIORITY_CB_MEMBER(pri_callback);
void hedpanic_map(address_map &map);
void jumppop_map(address_map &map);
void mchampdx_map(address_map &map);
void multchmp_map(address_map &map);
- void multchmp_sound_io_map(address_map &map);
- void multchmp_sound_map(address_map &map);
+ void sound_io_map(address_map &map);
+ void sound_map(address_map &map);
void tangtang_map(address_map &map);
- void esd16_io_area_dsw(address_map &map, u32 base);
- void esd16_io_area_eeprom(address_map &map, u32 base);
- void esd16_vid_attr_area(address_map &map, u32 base);
- void esd16_palette_area(address_map &map, u32 base);
- void esd16_sprite_area(address_map &map, u32 base);
- void esd16_vram_area(address_map &map, u32 base);
+ void io_area_dsw(address_map &map, u32 base);
+ void io_area_eeprom(address_map &map, u32 base);
+ void palette_area(address_map &map, u32 base);
+ void sprite_area(address_map &map, u32 base);
+ void vid_attr_area(address_map &map, u32 base);
+ void vram_area(address_map &map, u32 base);
};
#endif // MAME_INCLUDES_ESD16_H
diff --git a/src/mame/includes/fidelbase.h b/src/mame/includes/fidelbase.h
index 1a232d9bab5..938c01cb1df 100644
--- a/src/mame/includes/fidelbase.h
+++ b/src/mame/includes/fidelbase.h
@@ -31,7 +31,6 @@ public:
m_irq_on(*this, "irq_on"),
m_rombank(*this, "rombank"),
m_mainmap(*this, "mainmap"),
- m_div_config(*this, "div_config"),
m_speech(*this, "speech"),
m_speech_rom(*this, "speech"),
m_language(*this, "language"),
@@ -42,13 +41,14 @@ public:
// in case reset button is directly tied to maincpu reset pin
virtual DECLARE_INPUT_CHANGED_MEMBER(reset_button) { m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); }
+ DECLARE_INPUT_CHANGED_MEMBER(div_changed) { div_refresh(newval); }
+
protected:
// devices/pointers
required_device<cpu_device> m_maincpu;
optional_device<timer_device> m_irq_on;
optional_memory_bank m_rombank;
optional_device<address_map_bank_device> m_mainmap;
- optional_ioport m_div_config;
optional_device<s14001a_device> m_speech;
optional_region_ptr<u8> m_speech_rom;
optional_region_ptr<u8> m_language;
@@ -71,7 +71,10 @@ protected:
u8 div_trampoline_r(offs_t offset);
void div_set_cpu_freq(offs_t offset);
void div_trampoline(address_map &map);
+ void div_refresh(ioport_value val = 0xff);
u16 m_div_status;
+ ioport_value m_div_config;
+ emu_timer *m_div_timer;
virtual void machine_start() override;
virtual void machine_reset() override;
diff --git a/src/mame/includes/funworld.h b/src/mame/includes/funworld.h
index 34859d8d5e8..69666f020e8 100644
--- a/src/mame/includes/funworld.h
+++ b/src/mame/includes/funworld.h
@@ -6,6 +6,7 @@
#pragma once
#include "emupal.h"
+#include "machine/i2cmem.h"
class funworld_state : public driver_device
{
@@ -17,6 +18,7 @@ public:
m_videoram(*this, "videoram"),
m_colorram(*this, "colorram"),
m_palette(*this, "palette"),
+ m_i2cmem(*this, "i2cmem"),
m_lamps(*this, "lamp%u", 0U)
{ }
@@ -33,8 +35,6 @@ public:
void fw_brick_2(machine_config &config);
void init_saloon();
- void init_royalcdc();
- void init_multiwin();
void init_mongolnw();
void init_soccernw();
void init_tabblue();
@@ -69,7 +69,7 @@ private:
void cuoreuno_map(address_map &map);
void funquiz_map(address_map &map);
void funworld_map(address_map &map);
- void fw_a7_11_map(address_map &map);
+ void fw_brick_map(address_map &map);
void intergames_map(address_map &map);
void saloon_map(address_map &map);
void witchryl_map(address_map &map);
@@ -77,6 +77,7 @@ private:
required_shared_ptr<uint8_t> m_videoram;
required_shared_ptr<uint8_t> m_colorram;
required_device<palette_device> m_palette;
+ optional_device<i2cmem_device> m_i2cmem;
output_finder<8> m_lamps;
};
@@ -132,4 +133,4 @@ private:
void chinatow_map(address_map &map);
};
-#endif // MAME_INCLUDES_FUNWORLD_H
+#endif // MAME_INCLUDES_FUNWORLD_H \ No newline at end of file
diff --git a/src/mame/includes/gaelco2.h b/src/mame/includes/gaelco2.h
index e92b2329471..ccacfef6737 100644
--- a/src/mame/includes/gaelco2.h
+++ b/src/mame/includes/gaelco2.h
@@ -10,18 +10,18 @@
class gaelco2_state : public driver_device
{
public:
- gaelco2_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this,"maincpu"),
+ gaelco2_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
m_mainlatch(*this, "mainlatch"),
- m_spriteram(*this,"spriteram"),
+ m_spriteram(*this, "spriteram"),
m_eeprom(*this, "eeprom"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_global_spritexoff(0),
m_vregs(*this, "vregs"),
m_snowboar_protection(*this, "snowboar_prot"),
- m_generic_paletteram_16(*this, "paletteram"),
+ m_paletteram(*this, "paletteram"),
m_shareram(*this, "shareram")
{ }
@@ -38,6 +38,7 @@ public:
void init_touchgo();
void init_snowboar();
+ void init_snowboara();
void init_alighunt();
void init_wrally2();
void init_play2000();
@@ -48,9 +49,9 @@ public:
DECLARE_VIDEO_START(gaelco2);
DECLARE_VIDEO_START(gaelco2_dual);
- uint32_t screen_update_gaelco2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- uint32_t screen_update_gaelco2_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- uint32_t screen_update_gaelco2_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ u32 screen_update_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ u32 screen_update_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
protected:
required_device<m68000_device> m_maincpu;
@@ -60,28 +61,27 @@ protected:
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
- DECLARE_WRITE16_MEMBER(gaelco2_vram_w);
- DECLARE_WRITE16_MEMBER(gaelco2_palette_w);
+ void vram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void vregs_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void palette_w(offs_t offset, u16 data, u16 mem_mask = ~0);
- DECLARE_WRITE16_MEMBER(wrally2_latch_w);
+ void wrally2_latch_w(offs_t offset, u16 data);
void mcu_hostmem_map(address_map &map);
private:
- DECLARE_WRITE8_MEMBER(shareram_w);
- DECLARE_READ8_MEMBER(shareram_r);
- DECLARE_WRITE16_MEMBER(alighunt_coin_w);
+ void shareram_w(offs_t offset, u8 data);
+ u8 shareram_r(offs_t offset);
+ void alighunt_coin_w(u16 data);
DECLARE_WRITE_LINE_MEMBER(coin3_counter_w);
DECLARE_WRITE_LINE_MEMBER(coin4_counter_w);
- DECLARE_READ16_MEMBER(snowboar_protection_r);
- DECLARE_WRITE16_MEMBER(snowboar_protection_w);
- TILE_GET_INFO_MEMBER(get_tile_info_gaelco2_screen0);
- TILE_GET_INFO_MEMBER(get_tile_info_gaelco2_screen1);
- TILE_GET_INFO_MEMBER(get_tile_info_gaelco2_screen0_dual);
- TILE_GET_INFO_MEMBER(get_tile_info_gaelco2_screen1_dual);
+ u16 snowboar_protection_r();
+ void snowboar_protection_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ template<unsigned Layer> TILE_GET_INFO_MEMBER(get_tile_info);
+ template<unsigned Layer> TILE_GET_INFO_MEMBER(get_tile_info_dual);
void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int mask);
- uint32_t dual_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int index);
- void gaelco2_ROM16_split_gfx(const char *src_reg, const char *dst_reg, int start, int length, int dest1, int dest2);
+ u32 dual_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int index);
+ void ROM16_split_gfx(const char *src_reg, const char *dst_reg, int start, int length, int dest1, int dest2);
void alighunt_map(address_map &map);
void maniacsq_map(address_map &map);
@@ -90,17 +90,17 @@ private:
void touchgo_map(address_map &map);
void saltcrdi_map(address_map &map);
- uint32_t snowboard_latch;
+ u32 m_snowboard_latch;
- uint16_t *m_videoram;
+ u16 *m_videoram;
tilemap_t *m_pant[2];
int m_dual_monitor;
int m_global_spritexoff;
- required_shared_ptr<uint16_t> m_vregs;
- optional_shared_ptr<uint16_t> m_snowboar_protection;
- required_shared_ptr<uint16_t> m_generic_paletteram_16;
- optional_shared_ptr<uint16_t> m_shareram;
+ required_shared_ptr<u16> m_vregs;
+ optional_shared_ptr<u16> m_snowboar_protection;
+ required_shared_ptr<u16> m_paletteram;
+ optional_shared_ptr<u16> m_shareram;
};
@@ -127,11 +127,11 @@ private:
int m_clr_gun_int;
- DECLARE_READ16_MEMBER(p1_gun_x);
- DECLARE_READ16_MEMBER(p1_gun_y);
- DECLARE_READ16_MEMBER(p2_gun_x);
- DECLARE_READ16_MEMBER(p2_gun_y);
- DECLARE_WRITE16_MEMBER(bang_clr_gun_int_w);
+ u16 p1_gun_x();
+ u16 p1_gun_y();
+ u16 p2_gun_x();
+ u16 p2_gun_y();
+ void bang_clr_gun_int_w(u16 data);
TIMER_DEVICE_CALLBACK_MEMBER(bang_irq);
void bang_map(address_map &map);
};
diff --git a/src/mame/includes/galaxian.h b/src/mame/includes/galaxian.h
index 651c145ce1a..a6b7bdef871 100644
--- a/src/mame/includes/galaxian.h
+++ b/src/mame/includes/galaxian.h
@@ -239,7 +239,7 @@ public:
void tenspot_set_game_bank(int bank, int from_game);
uint32_t screen_update_galaxian(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
DECLARE_WRITE_LINE_MEMBER(vblank_interrupt_w);
- DECLARE_WRITE_LINE_MEMBER(tenspot_interrupt_w);
+ DECLARE_INPUT_CHANGED_MEMBER(tenspot_fake);
TIMER_DEVICE_CALLBACK_MEMBER(checkmaj_irq0_gen);
TIMER_DEVICE_CALLBACK_MEMBER(scramble_stars_blink_timer);
TIMER_DEVICE_CALLBACK_MEMBER(timefgtr_scanline);
diff --git a/src/mame/includes/hh_tms1k.h b/src/mame/includes/hh_tms1k.h
index 234a2f9b4be..c595772468b 100644
--- a/src/mame/includes/hh_tms1k.h
+++ b/src/mame/includes/hh_tms1k.h
@@ -62,6 +62,10 @@ public:
virtual DECLARE_WRITE_LINE_MEMBER(auto_power_off);
virtual void power_off();
+ void switch_change(int sel, u32 mask, bool next);
+ template<int Sel> DECLARE_INPUT_CHANGED_MEMBER(switch_next) { if (newval) switch_change(Sel, (u32)(uintptr_t)param, true); }
+ template<int Sel> DECLARE_INPUT_CHANGED_MEMBER(switch_prev) { if (newval) switch_change(Sel, (u32)(uintptr_t)param, false); }
+
// display common
int m_display_wait; // led/lamp off-delay in milliseconds (default 33ms)
int m_display_maxy; // display matrix number of rows
diff --git a/src/mame/includes/m72.h b/src/mame/includes/m72.h
index a3af6dab5a0..50dc9fbbdf7 100644
--- a/src/mame/includes/m72.h
+++ b/src/mame/includes/m72.h
@@ -78,6 +78,7 @@ public:
void rtype2(machine_config &config);
void m82(machine_config &config);
void rtype(machine_config &config);
+ void imgfightb(machine_config &config);
void init_dkgenm72();
void init_bchopper();
@@ -92,7 +93,7 @@ public:
private:
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_soundcpu;
- optional_device<i8751_device> m_mcu;
+ optional_device<cpu_device> m_mcu;
optional_device<mb8421_mb8431_16_device> m_dpram;
optional_device<dac_byte_interface> m_dac;
optional_device<m72_audio_device> m_audio;
@@ -238,6 +239,7 @@ private:
void m84_cpu1_common_map(address_map &map);
void m84_portmap(address_map &map);
void m84_v33_portmap(address_map &map);
+ void i80c31_mem_map(address_map &map);
void mcu_io_map(address_map &map);
void poundfor_portmap(address_map &map);
void poundfor_sound_portmap(address_map &map);
diff --git a/src/mame/includes/mikromik.h b/src/mame/includes/mikromik.h
index 07f5e65b582..46c7dfa33c6 100644
--- a/src/mame/includes/mikromik.h
+++ b/src/mame/includes/mikromik.h
@@ -10,6 +10,7 @@
#include "formats/mm_dsk.h"
#include "imagedev/floppy.h"
#include "machine/am9517a.h"
+#include "machine/bankdev.h"
#include "machine/i8212.h"
#include "machine/mm1kb.h"
#include "machine/pit8253.h"
@@ -40,6 +41,7 @@ public:
mm1_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, I8085A_TAG),
+ m_io(*this, "io"),
m_iop(*this, I8212_TAG),
m_dmac(*this, I8237_TAG),
m_pit(*this, I8253_TAG),
@@ -76,6 +78,7 @@ protected:
private:
required_device<i8085a_cpu_device> m_maincpu;
+ required_device<address_map_bank_device> m_io;
required_device<i8212_device> m_iop;
required_device<am9517a_device> m_dmac;
required_device<pit8253_device> m_pit;
@@ -116,7 +119,14 @@ private:
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
- DECLARE_WRITE8_MEMBER( ls259_w );
+ DECLARE_WRITE_LINE_MEMBER( a8_w );
+ DECLARE_WRITE_LINE_MEMBER( recall_w );
+ DECLARE_WRITE_LINE_MEMBER( rx21_w );
+ DECLARE_WRITE_LINE_MEMBER( tx21_w );
+ DECLARE_WRITE_LINE_MEMBER( rcl_w );
+ DECLARE_WRITE_LINE_MEMBER( intc_w );
+ DECLARE_WRITE_LINE_MEMBER( llen_w );
+ DECLARE_WRITE_LINE_MEMBER( motor_on_w );
DECLARE_WRITE_LINE_MEMBER( dma_hrq_w );
DECLARE_READ8_MEMBER( mpsc_dack_r );
DECLARE_WRITE8_MEMBER( mpsc_dack_w );
@@ -136,6 +146,7 @@ private:
UPD7220_DISPLAY_PIXELS_MEMBER( hgdc_display_pixels );
void mm1_palette(palette_device &palette) const;
void mm1_map(address_map &map);
+ void mmu_io_map(address_map &map);
void mm1_upd7220_map(address_map &map);
};
diff --git a/src/mame/includes/ms32.h b/src/mame/includes/ms32.h
index acdece07691..2a11409fedb 100644
--- a/src/mame/includes/ms32.h
+++ b/src/mame/includes/ms32.h
@@ -17,9 +17,9 @@ public:
driver_device(mconfig, type, tag),
m_palette(*this, "palette"),
m_gfxdecode(*this, "gfxdecode"),
+ m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_soundlatch(*this, "soundlatch"),
- m_maincpu(*this, "maincpu"),
m_screen(*this, "screen"),
m_mainram(*this, "mainram"),
m_roz_ctrl(*this, "roz_ctrl"),
@@ -71,12 +71,12 @@ protected:
int m_reverse_sprite_order;
int m_flipscreen;
+ required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
optional_device<generic_latch_8_device> m_soundlatch;
private:
- required_device<cpu_device> m_maincpu;
optional_device<screen_device> m_screen;
optional_shared_ptr<uint32_t> m_mainram;
optional_shared_ptr<uint32_t> m_roz_ctrl;
diff --git a/src/mame/includes/namcos1.h b/src/mame/includes/namcos1.h
index 13be3197c3e..3b8f0604e29 100644
--- a/src/mame/includes/namcos1.h
+++ b/src/mame/includes/namcos1.h
@@ -33,6 +33,9 @@ public:
m_rom(*this, "user1"),
m_soundbank(*this, "soundbank"),
m_mcubank(*this, "mcubank"),
+ m_io_in(*this, "IN%u", 0U),
+ m_io_control(*this, "CONTROL%u", 0U),
+ m_io_paddle(*this, "PADDLE%u", 0U),
m_io_dipsw(*this, "DIPSW"),
m_dsw_sel(*this, "dsw_sel")
{ }
@@ -63,6 +66,12 @@ public:
void init_dspirit();
void init_pistoldm();
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+ virtual void video_start() override;
+ void driver_init() override;
+
private:
required_device<mc6809e_device> m_maincpu;
required_device<mc6809e_device> m_subcpu;
@@ -74,13 +83,16 @@ private:
required_device_array<dac_8bit_r2r_device, 2> m_dac;
required_device<gfxdecode_device> m_gfxdecode;
- required_shared_ptr<uint8_t> m_spriteram;
- required_shared_ptr<uint8_t> m_triram;
- required_region_ptr<uint8_t> m_rom;
+ required_shared_ptr<u8> m_spriteram;
+ required_shared_ptr<u8> m_triram;
+ required_region_ptr<u8> m_rom;
required_memory_bank m_soundbank;
required_memory_bank m_mcubank;
+ optional_ioport_array<4> m_io_in;
+ optional_ioport_array<2> m_io_control;
+ optional_ioport_array<2> m_io_paddle;
required_ioport m_io_dipsw;
required_device<ls157_device> m_dsw_sel;
@@ -91,51 +103,50 @@ private:
int m_key_swap4;
int m_key_bottom4;
int m_key_top4;
- unsigned int m_key_quotient;
- unsigned int m_key_reminder;
- unsigned int m_key_numerator_high_word;
- uint8_t m_key[8];
+ u32 m_key_quotient;
+ u32 m_key_reminder;
+ u32 m_key_numerator_high_word;
+ u8 m_key[8];
int m_mcu_patch_data;
int m_reset;
int m_input_count;
int m_strobe;
int m_strobe_count;
int m_stored_input[2];
- int m_copy_sprites;
- uint8_t m_drawmode_table[16];
+ bool m_copy_sprites;
+ u8 m_drawmode_table[16];
DECLARE_WRITE_LINE_MEMBER(subres_w);
- DECLARE_WRITE8_MEMBER(audiocpu_irq_ack_w);
- DECLARE_WRITE8_MEMBER(mcu_irq_ack_w);
+ void audiocpu_irq_ack_w(u8 data);
+ void mcu_irq_ack_w(u8 data);
DECLARE_READ8_MEMBER(dsw_r);
- DECLARE_WRITE8_MEMBER(coin_w);
- DECLARE_WRITE8_MEMBER(dac_gain_w);
- DECLARE_WRITE8_MEMBER(sound_bankswitch_w);
- DECLARE_WRITE8_MEMBER(mcu_bankswitch_w);
- DECLARE_WRITE8_MEMBER(mcu_patch_w);
- DECLARE_READ8_MEMBER(quester_paddle_r);
- DECLARE_READ8_MEMBER(berabohm_buttons_r);
- DECLARE_READ8_MEMBER(faceoff_inputs_r);
- DECLARE_WRITE8_MEMBER(spriteram_w);
- DECLARE_WRITE8_MEMBER(_3dcs_w);
- DECLARE_READ8_MEMBER(no_key_r);
- DECLARE_WRITE8_MEMBER(no_key_w);
- DECLARE_READ8_MEMBER(key_type1_r);
- DECLARE_WRITE8_MEMBER(key_type1_w);
- DECLARE_READ8_MEMBER(key_type2_r);
- DECLARE_WRITE8_MEMBER(key_type2_w);
- DECLARE_READ8_MEMBER(key_type3_r);
- DECLARE_WRITE8_MEMBER(key_type3_w);
-
- virtual void machine_start() override;
- virtual void machine_reset() override;
- virtual void video_start() override;
- void driver_init() override;
-
- void TilemapCB(uint16_t code, int *tile, int *mask);
+ void coin_w(u8 data);
+ void dac_gain_w(u8 data);
+ void sound_bankswitch_w(u8 data);
+ void mcu_bankswitch_w(u8 data);
+ void mcu_patch_w(u8 data);
+ u8 quester_paddle_r(offs_t offset);
+ u8 berabohm_buttons_r(offs_t offset);
+ u8 faceoff_inputs_r(offs_t offset);
+ void spriteram_w(offs_t offset, u8 data);
+ void _3dcs_w(offs_t offset, u8 data);
+ u8 no_key_r(offs_t offset);
+ void no_key_w(offs_t offset, u8 data);
+ u8 key_type1_r(offs_t offset);
+ void key_type1_w(offs_t offset, u8 data);
+ u8 key_type2_r(offs_t offset);
+ void key_type2_w(offs_t offset, u8 data);
+ u8 key_type3_r(offs_t offset);
+ void key_type3_w(offs_t offset, u8 data);
+
+ void key_type_1_init(int key_id);
+ void key_type_2_init(int key_id);
+ void key_type_3_init(int key_id, int reg, int rng, int swap4_arg, int swap4, int bottom4, int top4);
+
+ void TilemapCB(u16 code, int *tile, int *mask);
void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
DECLARE_WRITE_LINE_MEMBER(screen_vblank);
void main_map(address_map &map);
diff --git a/src/mame/includes/niyanpai.h b/src/mame/includes/niyanpai.h
index edf272a87ef..3f3a73be2ba 100644
--- a/src/mame/includes/niyanpai.h
+++ b/src/mame/includes/niyanpai.h
@@ -15,7 +15,6 @@ public:
niyanpai_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag) ,
m_maincpu(*this, "maincpu"),
- m_tmp68301(*this, "tmp68301"),
m_screen(*this, "screen"),
m_palette(*this, "palette") { }
@@ -34,8 +33,7 @@ private:
TIMER_BLITTER
};
- required_device<cpu_device> m_maincpu;
- required_device<tmp68301_device> m_tmp68301;
+ required_device<tmp68301_device> m_maincpu;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
diff --git a/src/mame/includes/nmk16.h b/src/mame/includes/nmk16.h
index 0b4b92ea079..6865d96b6c2 100644
--- a/src/mame/includes/nmk16.h
+++ b/src/mame/includes/nmk16.h
@@ -83,6 +83,8 @@ public:
void init_ssmissin();
void init_hachamf_prot();
void init_redhawk();
+ void init_redhawkg();
+ void init_redhawki();
void init_tdragon_prot();
void init_bubl2000();
void init_banked_audiocpu();
diff --git a/src/mame/includes/oneshot.h b/src/mame/includes/oneshot.h
index aaa3fd9dcff..b38e88fbbbd 100644
--- a/src/mame/includes/oneshot.h
+++ b/src/mame/includes/oneshot.h
@@ -13,11 +13,14 @@ class oneshot_state : public driver_device
public:
oneshot_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
- m_sprites(*this, "sprites"),
+ m_spriteram(*this, "spriteram"),
m_bg_videoram(*this, "bg_videoram"),
m_mid_videoram(*this, "mid_videoram"),
m_fg_videoram(*this, "fg_videoram"),
m_scroll(*this, "scroll"),
+ m_io_dsw1(*this, "DSW1"),
+ m_io_lightgun_x(*this, "LIGHT%u_X", 0U),
+ m_io_lightgun_y(*this, "LIGHT%u_Y", 0U),
m_maincpu(*this, "maincpu"),
m_oki(*this, "oki"),
m_gfxdecode(*this, "gfxdecode"),
@@ -25,6 +28,7 @@ public:
{ }
void maddonna(machine_config &config);
+ void komocomo(machine_config &config);
void oneshot(machine_config &config);
protected:
@@ -34,11 +38,15 @@ protected:
private:
/* memory pointers */
- required_shared_ptr<uint16_t> m_sprites;
- required_shared_ptr<uint16_t> m_bg_videoram;
- required_shared_ptr<uint16_t> m_mid_videoram;
- required_shared_ptr<uint16_t> m_fg_videoram;
- required_shared_ptr<uint16_t> m_scroll;
+ required_shared_ptr<u16> m_spriteram;
+ required_shared_ptr<u16> m_bg_videoram;
+ required_shared_ptr<u16> m_mid_videoram;
+ required_shared_ptr<u16> m_fg_videoram;
+ required_shared_ptr<u16> m_scroll;
+
+ optional_ioport m_io_dsw1;
+ optional_ioport_array<2> m_io_lightgun_x;
+ optional_ioport_array<2> m_io_lightgun_y;
/* video-related */
tilemap_t *m_bg_tilemap;
@@ -60,24 +68,25 @@ private:
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
- DECLARE_READ16_MEMBER(oneshot_in0_word_r);
- DECLARE_READ16_MEMBER(oneshot_gun_x_p1_r);
- DECLARE_READ16_MEMBER(oneshot_gun_y_p1_r);
- DECLARE_READ16_MEMBER(oneshot_gun_x_p2_r);
- DECLARE_READ16_MEMBER(oneshot_gun_y_p2_r);
- DECLARE_WRITE16_MEMBER(oneshot_bg_videoram_w);
- DECLARE_WRITE16_MEMBER(oneshot_mid_videoram_w);
- DECLARE_WRITE16_MEMBER(oneshot_fg_videoram_w);
- DECLARE_WRITE16_MEMBER(soundbank_w);
- TILE_GET_INFO_MEMBER(get_oneshot_bg_tile_info);
- TILE_GET_INFO_MEMBER(get_oneshot_mid_tile_info);
- TILE_GET_INFO_MEMBER(get_oneshot_fg_tile_info);
- uint32_t screen_update_oneshot(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- uint32_t screen_update_maddonna(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- void draw_crosshairs( bitmap_ind16 &bitmap, const rectangle &cliprect );
- void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
- void oneshot_map(address_map &map);
- void oneshot_sound_map(address_map &map);
+ u16 oneshot_in0_word_r();
+ u16 oneshot_gun_x_p1_r();
+ u16 oneshot_gun_y_p1_r();
+ u16 oneshot_gun_x_p2_r();
+ u16 oneshot_gun_y_p2_r();
+ void bg_videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void mid_videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void fg_videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void soundbank_w(u8 data);
+ TILE_GET_INFO_MEMBER(get_bg_tile_info);
+ TILE_GET_INFO_MEMBER(get_mid_tile_info);
+ TILE_GET_INFO_MEMBER(get_fg_tile_info);
+ u32 screen_update_oneshot(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ u32 screen_update_maddonna(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ u32 screen_update_komocomo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ void draw_crosshairs();
+ void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
+ void mem_map(address_map &map);
+ void sound_map(address_map &map);
};
#endif // MAME_INCLUDES_ONESHOT_H
diff --git a/src/mame/includes/realbrk.h b/src/mame/includes/realbrk.h
index 14a548366eb..179674e17a0 100644
--- a/src/mame/includes/realbrk.h
+++ b/src/mame/includes/realbrk.h
@@ -15,7 +15,6 @@ public:
realbrk_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
- m_tmp68301(*this, "tmp68301"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
@@ -37,8 +36,7 @@ public:
void pkgnshdx(machine_config &config);
private:
- required_device<cpu_device> m_maincpu;
- required_device<tmp68301_device> m_tmp68301;
+ required_device<tmp68301_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
diff --git a/src/mame/includes/seta.h b/src/mame/includes/seta.h
index 41c0352f772..387f4591674 100644
--- a/src/mame/includes/seta.h
+++ b/src/mame/includes/seta.h
@@ -364,7 +364,7 @@ class kiwame_state : public seta_state
public:
kiwame_state(const machine_config &mconfig, device_type type, const char *tag) :
seta_state(mconfig, type, tag),
- m_tmp68301(*this, "tmp68301"),
+ m_maincpu(*this, "maincpu"),
m_key(*this, "KEY%u", 0U)
{ }
@@ -377,7 +377,7 @@ private:
void kiwame_map(address_map &map);
- required_device<tmp68301_device> m_tmp68301;
+ required_device<tmp68301_device> m_maincpu;
required_ioport_array<5> m_key;
uint16_t m_kiwame_row_select;
diff --git a/src/mame/includes/seta2.h b/src/mame/includes/seta2.h
index a40e22c4cbc..61fc336788e 100644
--- a/src/mame/includes/seta2.h
+++ b/src/mame/includes/seta2.h
@@ -28,7 +28,6 @@ public:
m_screen(*this, "screen"),
m_palette(*this, "palette"),
- m_tmp68301(*this, "tmp68301"),
m_oki(*this, "oki"),
m_eeprom(*this, "eeprom"),
m_flash(*this, "flash"),
@@ -119,7 +118,6 @@ protected:
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
- optional_device<tmp68301_device> m_tmp68301;
optional_device<okim9810_device> m_oki;
optional_device<eeprom_serial_93cxx_device> m_eeprom;
optional_device<intelfsh16_device> m_flash;
diff --git a/src/mame/includes/spectrum.h b/src/mame/includes/spectrum.h
index 083080a6617..a239808c7e9 100644
--- a/src/mame/includes/spectrum.h
+++ b/src/mame/includes/spectrum.h
@@ -158,6 +158,7 @@ protected:
DECLARE_READ8_MEMBER(spectrum_port_fe_r);
DECLARE_READ8_MEMBER(spectrum_port_ula_r);
+ DECLARE_READ8_MEMBER(spectrum_128_opcode_fetch_r);
DECLARE_WRITE8_MEMBER(spectrum_128_bank1_w);
DECLARE_READ8_MEMBER(spectrum_128_bank1_r);
DECLARE_WRITE8_MEMBER(spectrum_128_port_7ffd_w);
@@ -216,6 +217,7 @@ protected:
void spectrum_128_io(address_map &map);
void spectrum_128_mem(address_map &map);
+ void spectrum_128_fetch(address_map &map);
void spectrum_io(address_map &map);
void spectrum_mem(address_map &map);
void spectrum_fetch(address_map &map);
diff --git a/src/mame/includes/toaplan1.h b/src/mame/includes/toaplan1.h
index b687bd71173..b884f1ca4f4 100644
--- a/src/mame/includes/toaplan1.h
+++ b/src/mame/includes/toaplan1.h
@@ -24,18 +24,17 @@ public:
m_bgpaletteram(*this, "bgpalette"),
m_fgpaletteram(*this, "fgpalette"),
m_sharedram(*this, "sharedram"),
+ m_dswb_io(*this, "DSWB"),
+ m_tjump_io(*this, "TJUMP"),
m_spriteram(*this, "spriteram"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_ymsnd(*this, "ymsnd"),
- m_dsp(*this, "dsp"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette")
{ }
- void demonwld(machine_config &config);
- void samesame(machine_config &config);
void truxton(machine_config &config);
void outzone(machine_config &config);
void vimana(machine_config &config);
@@ -43,161 +42,112 @@ public:
void hellfire(machine_config &config);
void zerowing(machine_config &config);
- void init_toaplan1();
- void init_demonwld();
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+ virtual void video_start() override;
- DECLARE_MACHINE_RESET(toaplan1);
+ required_shared_ptr<u16> m_bgpaletteram;
+ required_shared_ptr<u16> m_fgpaletteram;
-protected:
- required_shared_ptr<uint16_t> m_bgpaletteram;
- required_shared_ptr<uint16_t> m_fgpaletteram;
+ optional_shared_ptr<u8> m_sharedram;
- optional_shared_ptr<uint8_t> m_sharedram;
+ optional_ioport m_dswb_io;
+ optional_ioport m_tjump_io;
int m_intenable;
- /* Demon world */
- int m_dsp_on;
- int m_dsp_bio;
- int m_dsp_execute;
- uint32_t m_dsp_addr_w;
- uint32_t m_main_ram_seg;
-
- std::unique_ptr<uint16_t[]> m_pf4_tilevram16; /* || Drawn in this order */
- std::unique_ptr<uint16_t[]> m_pf3_tilevram16; /* || */
- std::unique_ptr<uint16_t[]> m_pf2_tilevram16; /* \||/ */
- std::unique_ptr<uint16_t[]> m_pf1_tilevram16; /* \/ */
-
- optional_shared_ptr<uint16_t> m_spriteram;
- std::unique_ptr<uint16_t[]> m_buffered_spriteram;
- std::unique_ptr<uint16_t[]> m_spritesizeram16;
- std::unique_ptr<uint16_t[]> m_buffered_spritesizeram16;
-
- int32_t m_bcu_flipscreen; /* Tile controller flip flag */
- int32_t m_fcu_flipscreen; /* Sprite controller flip flag */
-
- int32_t m_pf_voffs;
- int32_t m_spriteram_offs;
-
- int32_t m_pf1_scrollx;
- int32_t m_pf1_scrolly;
- int32_t m_pf2_scrollx;
- int32_t m_pf2_scrolly;
- int32_t m_pf3_scrollx;
- int32_t m_pf3_scrolly;
- int32_t m_pf4_scrollx;
- int32_t m_pf4_scrolly;
+ std::unique_ptr<u16[]> m_tilevram[4];
+ /*
+ std::unique_ptr<u16[]> m_tilevram[3]; // || Drawn in this order
+ std::unique_ptr<u16[]> m_tilevram[2]; // ||
+ std::unique_ptr<u16[]> m_tilevram[1]; // \||/
+ std::unique_ptr<u16[]> m_tilevram[0]; // \/
+ */
+
+ optional_shared_ptr<u16> m_spriteram;
+ std::unique_ptr<u16[]> m_buffered_spriteram;
+ std::unique_ptr<u16[]> m_spritesizeram;
+ std::unique_ptr<u16[]> m_buffered_spritesizeram;
+
+ s32 m_bcu_flipscreen; /* Tile controller flip flag */
+ s32 m_fcu_flipscreen; /* Sprite controller flip flag */
+
+ s32 m_pf_voffs;
+ s32 m_spriteram_offs;
+
+ s32 m_scrollx[4];
+ s32 m_scrolly[4];
#ifdef MAME_DEBUG
- int m_display_pf1;
- int m_display_pf2;
- int m_display_pf3;
- int m_display_pf4;
+ int m_display_pf[4];
int m_displog;
#endif
- int32_t m_tiles_offsetx;
- int32_t m_tiles_offsety;
-
- tilemap_t *m_pf1_tilemap;
- tilemap_t *m_pf2_tilemap;
- tilemap_t *m_pf3_tilemap;
- tilemap_t *m_pf4_tilemap;
-
- DECLARE_WRITE16_MEMBER(toaplan1_intenable_w);
- DECLARE_WRITE16_MEMBER(demonwld_dsp_addrsel_w);
- DECLARE_READ16_MEMBER(demonwld_dsp_r);
- DECLARE_WRITE16_MEMBER(demonwld_dsp_w);
- DECLARE_WRITE16_MEMBER(demonwld_dsp_bio_w);
- DECLARE_READ_LINE_MEMBER(demonwld_bio_r);
- DECLARE_WRITE16_MEMBER(demonwld_dsp_ctrl_w);
- DECLARE_READ16_MEMBER(samesame_port_6_word_r);
- DECLARE_READ16_MEMBER(toaplan1_shared_r);
- DECLARE_WRITE16_MEMBER(toaplan1_shared_w);
- DECLARE_WRITE16_MEMBER(toaplan1_reset_sound_w);
- DECLARE_WRITE8_MEMBER(toaplan1_coin_w);
- DECLARE_WRITE16_MEMBER(samesame_coin_w);
-
- DECLARE_READ16_MEMBER(toaplan1_frame_done_r);
- DECLARE_WRITE16_MEMBER(toaplan1_tile_offsets_w);
- DECLARE_WRITE16_MEMBER(toaplan1_bcu_flipscreen_w);
- DECLARE_WRITE16_MEMBER(toaplan1_fcu_flipscreen_w);
- DECLARE_READ16_MEMBER(toaplan1_spriteram_offs_r);
- DECLARE_WRITE16_MEMBER(toaplan1_spriteram_offs_w);
- DECLARE_WRITE16_MEMBER(toaplan1_bgpalette_w);
- DECLARE_WRITE16_MEMBER(toaplan1_fgpalette_w);
- DECLARE_READ16_MEMBER(toaplan1_spriteram16_r);
- DECLARE_WRITE16_MEMBER(toaplan1_spriteram16_w);
- DECLARE_READ16_MEMBER(toaplan1_spritesizeram16_r);
- DECLARE_WRITE16_MEMBER(toaplan1_spritesizeram16_w);
- DECLARE_WRITE16_MEMBER(toaplan1_bcu_control_w);
- DECLARE_READ16_MEMBER(toaplan1_tileram_offs_r);
- DECLARE_WRITE16_MEMBER(toaplan1_tileram_offs_w);
- DECLARE_READ16_MEMBER(toaplan1_tileram16_r);
- DECLARE_WRITE16_MEMBER(toaplan1_tileram16_w);
- DECLARE_READ16_MEMBER(toaplan1_scroll_regs_r);
- DECLARE_WRITE16_MEMBER(toaplan1_scroll_regs_w);
+ s32 m_tiles_offsetx;
+ s32 m_tiles_offsety;
+
+ tilemap_t *m_tilemap[4];
+
+ void intenable_w(u8 data);
+ u8 shared_r(offs_t offset);
+ void shared_w(offs_t offset, u8 data);
+ void reset_sound_w(u8 data);
+ void coin_w(u8 data);
+
+ u16 frame_done_r();
+ DECLARE_WRITE16_MEMBER(tile_offsets_w);
+ void bcu_flipscreen_w(u8 data);
+ void fcu_flipscreen_w(u8 data);
+ u16 spriteram_offs_r();
+ void spriteram_offs_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void bgpalette_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void fgpalette_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ u16 spriteram_r();
+ void spriteram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ u16 spritesizeram_r();
+ void spritesizeram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void bcu_control_w(offs_t offset, u16 data);
+ u16 tileram_offs_r();
+ void tileram_offs_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ u16 tileram_r(offs_t offset);
+ void tileram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ u16 scroll_regs_r(offs_t offset);
+ void scroll_regs_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+
+ u8 vimana_dswb_invert_r();
+ u8 vimana_tjump_invert_r();
+
+ template<unsigned Layer> TILE_GET_INFO_MEMBER(get_tile_info);
- // Fire Shark sound
- uint8_t m_to_mcu;
- uint8_t m_cmdavailable;
-
- DECLARE_READ8_MEMBER(vimana_dswb_invert_r);
- DECLARE_READ8_MEMBER(vimana_tjump_invert_r);
- DECLARE_WRITE16_MEMBER(samesame_mcu_w);
- DECLARE_READ8_MEMBER(samesame_soundlatch_r);
- DECLARE_WRITE8_MEMBER(samesame_sound_done_w);
- DECLARE_READ8_MEMBER(samesame_cmdavailable_r);
-
- TILE_GET_INFO_MEMBER(get_pf1_tile_info);
- TILE_GET_INFO_MEMBER(get_pf2_tile_info);
- TILE_GET_INFO_MEMBER(get_pf3_tile_info);
- TILE_GET_INFO_MEMBER(get_pf4_tile_info);
-
- DECLARE_VIDEO_START(toaplan1);
DECLARE_MACHINE_RESET(zerowing);
- DECLARE_MACHINE_RESET(demonwld);
- DECLARE_MACHINE_RESET(vimana);
- uint32_t screen_update_toaplan1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
-
- DECLARE_WRITE_LINE_MEMBER(screen_vblank_toaplan1);
- DECLARE_WRITE_LINE_MEMBER(screen_vblank_samesame);
- void toaplan1_interrupt();
-
- void demonwld_restore_dsp();
- void toaplan1_create_tilemaps();
- void toaplan1_vram_alloc();
- void toaplan1_spritevram_alloc();
- void toaplan1_set_scrolls();
+ u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ DECLARE_WRITE_LINE_MEMBER(screen_vblank);
+ void interrupt();
+
+ void create_tilemaps();
+ void vram_alloc();
+ void spritevram_alloc();
+ void set_scrolls();
void register_common();
- void toaplan1_log_vram();
+ void log_vram();
void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect );
- void demonwld_dsp(int enable);
- void toaplan1_reset_sound();
- void toaplan1_driver_savestate();
- void demonwld_driver_savestate();
- DECLARE_WRITE_LINE_MEMBER(toaplan1_reset_callback);
+ void reset_sound();
+ DECLARE_WRITE_LINE_MEMBER(reset_callback);
required_device<m68000_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<ym3812_device> m_ymsnd;
- optional_device<tms32010_device> m_dsp;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
- void dsp_io_map(address_map &map);
- void dsp_program_map(address_map &map);
- void demonwld_main_map(address_map &map);
- void demonwld_sound_io_map(address_map &map);
void hellfire_main_map(address_map &map);
void hellfire_sound_io_map(address_map &map);
void outzone_main_map(address_map &map);
void outzone_sound_io_map(address_map &map);
void outzonecv_main_map(address_map &map);
- void samesame_hd647180_io_map(address_map &map);
- void samesame_hd647180_mem_map(address_map &map);
- void samesame_main_map(address_map &map);
- void toaplan1_sound_map(address_map &map);
+ void sound_map(address_map &map);
void truxton_main_map(address_map &map);
void truxton_sound_io_map(address_map &map);
void vimana_hd647180_io_map(address_map &map);
@@ -218,19 +168,91 @@ public:
void rallybik(machine_config &config);
+protected:
+ virtual void video_start() override;
+
private:
DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w);
DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
DECLARE_WRITE_LINE_MEMBER(coin_lockout_1_w);
DECLARE_WRITE_LINE_MEMBER(coin_lockout_2_w);
- DECLARE_READ16_MEMBER(rallybik_tileram16_r);
- DECLARE_VIDEO_START(rallybik);
- uint32_t screen_update_rallybik(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- DECLARE_WRITE_LINE_MEMBER(screen_vblank_rallybik);
+ u16 tileram_r(offs_t offset);
+ u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ DECLARE_WRITE_LINE_MEMBER(screen_vblank);
required_device<toaplan_scu_device> m_spritegen;
void rallybik_main_map(address_map &map);
void rallybik_sound_io_map(address_map &map);
};
+class toaplan1_demonwld_state : public toaplan1_state
+{
+public:
+ toaplan1_demonwld_state(const machine_config &mconfig, device_type type, const char *tag) :
+ toaplan1_state(mconfig, type, tag),
+ m_dsp(*this, "dsp")
+ {
+ }
+
+ void demonwld(machine_config &config);
+
+protected:
+ virtual void device_post_load() override;
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+private:
+ /* Demon world */
+ int m_dsp_on;
+ int m_dsp_bio;
+ int m_dsp_execute;
+ u32 m_dsp_addr_w;
+ u32 m_main_ram_seg;
+
+ void dsp_addrsel_w(u16 data);
+ u16 dsp_r();
+ void dsp_w(u16 data);
+ void dsp_bio_w(u16 data);
+ DECLARE_READ_LINE_MEMBER(bio_r);
+ void dsp_ctrl_w(u8 data);
+ void dsp_int_w(int enable);
+
+ required_device<tms32010_device> m_dsp;
+ void dsp_io_map(address_map &map);
+ void dsp_program_map(address_map &map);
+ void main_map(address_map &map);
+ void sound_io_map(address_map &map);
+};
+
+class toaplan1_samesame_state : public toaplan1_state
+{
+public:
+ toaplan1_samesame_state(const machine_config &mconfig, device_type type, const char *tag) :
+ toaplan1_state(mconfig, type, tag)
+ {
+ }
+
+ void samesame(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+
+private:
+ // Fire Shark sound
+ u8 m_to_mcu;
+ u8 m_cmdavailable;
+
+ void mcu_w(u8 data);
+ u8 soundlatch_r();
+ void sound_done_w(u8 data);
+ u8 cmdavailable_r();
+ u8 port_6_word_r();
+
+ DECLARE_WRITE_LINE_MEMBER(screen_vblank);
+
+ void hd647180_io_map(address_map &map);
+ void hd647180_mem_map(address_map &map);
+ void main_map(address_map &map);
+};
+
#endif // MAME_INCLUDES_TOAPLAN1_H
diff --git a/src/mame/includes/tumbleb.h b/src/mame/includes/tumbleb.h
index 54263124dae..cc4f15aee52 100644
--- a/src/mame/includes/tumbleb.h
+++ b/src/mame/includes/tumbleb.h
@@ -47,7 +47,6 @@ public:
void chokchok(machine_config &config);
void cookbib_mcu(machine_config &config);
void jumpkids(machine_config &config);
- void funkyjetb(machine_config &config);
void init_dquizgo();
void init_jumpkids();
@@ -64,7 +63,7 @@ public:
void init_magipur();
void init_carket();
-private:
+protected:
/* memory pointers */
optional_shared_ptr<uint16_t> m_mainram;
required_shared_ptr<uint16_t> m_spriteram;
@@ -177,7 +176,33 @@ private:
void suprtrio_sound_map(address_map &map);
void tumblepopb_main_map(address_map &map);
void tumblepopba_main_map(address_map &map);
+};
+
+class tumbleb_pic_state : public tumbleb_state
+{
+public:
+ tumbleb_pic_state(const machine_config &mconfig, device_type type, const char *tag) :
+ tumbleb_state(mconfig, type, tag),
+ m_okibank(*this, "okibank")
+ { }
+
+ void funkyjetb(machine_config &config);
+
+protected:
+ virtual void driver_start() override;
+
+private:
+ void oki_bank_w(uint8_t data);
+ uint8_t pic_data_r();
+ void pic_data_w(uint8_t data);
+ void pic_ctrl_w(uint8_t data);
+
void funkyjetb_map(address_map &map);
+ void funkyjetb_oki_map(address_map &map);
+
+ required_memory_bank m_okibank;
+
+ uint8_t m_pic_data;
};
#endif // MAME_INCLUDES_TUMBLEB_H
diff --git a/src/mame/includes/twincobr.h b/src/mame/includes/twincobr.h
index 5bcda60c5bc..e212a0fe71c 100644
--- a/src/mame/includes/twincobr.h
+++ b/src/mame/includes/twincobr.h
@@ -43,50 +43,52 @@ public:
void init_twincobr();
protected:
+ virtual void device_post_load() override;
+ virtual void machine_reset() override;
virtual void video_start() override;
- optional_shared_ptr<uint8_t> m_sharedram;
+ optional_shared_ptr<u8> m_sharedram;
optional_device<buffered_spriteram8_device> m_spriteram8;
optional_device<buffered_spriteram16_device> m_spriteram16;
- int32_t m_fg_rom_bank;
- int32_t m_bg_ram_bank;
+ u32 m_fg_rom_bank;
+ u32 m_bg_ram_bank;
int m_intenable;
int m_dsp_on;
int m_dsp_bio;
int m_fsharkbt_8741;
int m_dsp_execute;
- uint32_t m_dsp_addr_w;
- uint32_t m_main_ram_seg;
- std::unique_ptr<uint16_t[]> m_bgvideoram16;
- std::unique_ptr<uint16_t[]> m_fgvideoram16;
- std::unique_ptr<uint16_t[]> m_txvideoram16;
+ u32 m_dsp_addr_w;
+ u32 m_main_ram_seg;
+ std::unique_ptr<u16[]> m_bgvideoram16;
+ std::unique_ptr<u16[]> m_fgvideoram16;
+ std::unique_ptr<u16[]> m_txvideoram16;
size_t m_bgvideoram_size;
size_t m_fgvideoram_size;
size_t m_txvideoram_size;
- int32_t m_txscrollx;
- int32_t m_txscrolly;
- int32_t m_fgscrollx;
- int32_t m_fgscrolly;
- int32_t m_bgscrollx;
- int32_t m_bgscrolly;
- int32_t m_txoffs;
- int32_t m_fgoffs;
- int32_t m_bgoffs;
- int32_t m_display_on;
+ s32 m_txscrollx;
+ s32 m_txscrolly;
+ s32 m_fgscrollx;
+ s32 m_fgscrolly;
+ s32 m_bgscrollx;
+ s32 m_bgscrolly;
+ s32 m_txoffs;
+ s32 m_fgoffs;
+ s32 m_bgoffs;
+ s32 m_display_on;
tilemap_t *m_bg_tilemap;
tilemap_t *m_fg_tilemap;
tilemap_t *m_tx_tilemap;
- DECLARE_WRITE16_MEMBER(twincobr_dsp_addrsel_w);
- DECLARE_READ16_MEMBER(twincobr_dsp_r);
- DECLARE_WRITE16_MEMBER(twincobr_dsp_w);
- DECLARE_WRITE16_MEMBER(wardner_dsp_addrsel_w);
- DECLARE_READ16_MEMBER(wardner_dsp_r);
- DECLARE_WRITE16_MEMBER(wardner_dsp_w);
- DECLARE_WRITE16_MEMBER(twincobr_dsp_bio_w);
- DECLARE_READ16_MEMBER(fsharkbt_dsp_r);
- DECLARE_WRITE16_MEMBER(fsharkbt_dsp_w);
+ void twincobr_dsp_addrsel_w(u16 data);
+ u16 twincobr_dsp_r();
+ void twincobr_dsp_w(u16 data);
+ void wardner_dsp_addrsel_w(u16 data);
+ u16 wardner_dsp_r();
+ void wardner_dsp_w(u16 data);
+ void twincobr_dsp_bio_w(u16 data);
+ u16 fsharkbt_dsp_r();
+ void fsharkbt_dsp_w(u16 data);
DECLARE_READ_LINE_MEMBER(twincobr_bio_r);
DECLARE_WRITE_LINE_MEMBER(int_enable_w);
DECLARE_WRITE_LINE_MEMBER(dsp_int_w);
@@ -94,47 +96,45 @@ protected:
DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
DECLARE_WRITE_LINE_MEMBER(coin_lockout_1_w);
DECLARE_WRITE_LINE_MEMBER(coin_lockout_2_w);
- DECLARE_READ16_MEMBER(twincobr_sharedram_r);
- DECLARE_WRITE16_MEMBER(twincobr_sharedram_w);
- DECLARE_WRITE16_MEMBER(twincobr_txoffs_w);
- DECLARE_READ16_MEMBER(twincobr_txram_r);
- DECLARE_WRITE16_MEMBER(twincobr_txram_w);
- DECLARE_WRITE16_MEMBER(twincobr_bgoffs_w);
- DECLARE_READ16_MEMBER(twincobr_bgram_r);
- DECLARE_WRITE16_MEMBER(twincobr_bgram_w);
- DECLARE_WRITE16_MEMBER(twincobr_fgoffs_w);
- DECLARE_READ16_MEMBER(twincobr_fgram_r);
- DECLARE_WRITE16_MEMBER(twincobr_fgram_w);
- DECLARE_WRITE16_MEMBER(twincobr_txscroll_w);
- DECLARE_WRITE16_MEMBER(twincobr_bgscroll_w);
- DECLARE_WRITE16_MEMBER(twincobr_fgscroll_w);
- DECLARE_WRITE16_MEMBER(twincobr_exscroll_w);
- DECLARE_WRITE8_MEMBER(wardner_txlayer_w);
- DECLARE_WRITE8_MEMBER(wardner_bglayer_w);
- DECLARE_WRITE8_MEMBER(wardner_fglayer_w);
- DECLARE_WRITE8_MEMBER(wardner_txscroll_w);
- DECLARE_WRITE8_MEMBER(wardner_bgscroll_w);
- DECLARE_WRITE8_MEMBER(wardner_fgscroll_w);
- DECLARE_WRITE8_MEMBER(wardner_exscroll_w);
- DECLARE_READ8_MEMBER(wardner_videoram_r);
- DECLARE_WRITE8_MEMBER(wardner_videoram_w);
- DECLARE_READ8_MEMBER(wardner_sprite_r);
- DECLARE_WRITE8_MEMBER(wardner_sprite_w);
+ u8 twincobr_sharedram_r(offs_t offset);
+ void twincobr_sharedram_w(offs_t offset, u8 data);
+ void twincobr_txoffs_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ u16 twincobr_txram_r();
+ void twincobr_txram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void twincobr_bgoffs_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ u16 twincobr_bgram_r();
+ void twincobr_bgram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void twincobr_fgoffs_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ u16 twincobr_fgram_r();
+ void twincobr_fgram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void twincobr_txscroll_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void twincobr_bgscroll_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void twincobr_fgscroll_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void twincobr_exscroll_w(offs_t offset, u16 data);
+ void wardner_txlayer_w(offs_t offset, u8 data);
+ void wardner_bglayer_w(offs_t offset, u8 data);
+ void wardner_fglayer_w(offs_t offset, u8 data);
+ void wardner_txscroll_w(offs_t offset, u8 data);
+ void wardner_bgscroll_w(offs_t offset, u8 data);
+ void wardner_fgscroll_w(offs_t offset, u8 data);
+ void wardner_exscroll_w(offs_t offset, u8 data);
+ u8 wardner_videoram_r(offs_t offset);
+ void wardner_videoram_w(offs_t offset, u8 data);
+ u8 wardner_sprite_r(offs_t offset);
+ void wardner_sprite_w(offs_t offset, u8 data);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
TILE_GET_INFO_MEMBER(get_tx_tile_info);
- DECLARE_MACHINE_RESET(twincobr);
- uint32_t screen_update_toaplan0(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
DECLARE_WRITE_LINE_MEMBER(twincobr_vblank_irq);
DECLARE_WRITE_LINE_MEMBER(wardner_vblank_irq);
- void twincobr_restore_dsp();
void twincobr_create_tilemaps();
DECLARE_WRITE_LINE_MEMBER(display_on_w);
DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
DECLARE_WRITE_LINE_MEMBER(bg_ram_bank_w);
DECLARE_WRITE_LINE_MEMBER(fg_rom_bank_w);
- void twincobr_log_vram();
- void twincobr_driver_savestate();
+ void log_vram();
+ void driver_savestate();
required_device<cpu_device> m_maincpu;
required_device<tms32010_device> m_dsp;
required_device<toaplan_scu_device> m_spritegen;
diff --git a/src/mame/includes/xavix.h b/src/mame/includes/xavix.h
index 9bcd83ac4cc..3f60c7ce8b7 100644
--- a/src/mame/includes/xavix.h
+++ b/src/mame/includes/xavix.h
@@ -20,6 +20,9 @@
#include "machine/xavix_madfb_ball.h"
#include "machine/xavix2002_io.h"
#include "machine/xavix_io.h"
+#include "machine/xavix_adc.h"
+#include "machine/xavix_anport.h"
+#include "machine/xavix_math.h"
class xavix_sound_device : public device_t, public device_sound_interface
{
@@ -101,6 +104,9 @@ public:
m_region(*this, "REGION"),
m_gfxdecode(*this, "gfxdecode"),
m_sound(*this, "xavix_sound"),
+ m_adc(*this, "adc"),
+ m_anport(*this, "anport"),
+ m_math(*this, "math"),
m_xavix2002io(*this, "xavix2002io")
{ }
@@ -275,24 +281,6 @@ private:
uint8_t m_ioevent_active;
void process_ioevent(uint8_t bits);
- DECLARE_READ8_MEMBER(mouse_7b00_r);
- DECLARE_READ8_MEMBER(mouse_7b01_r);
- DECLARE_READ8_MEMBER(mouse_7b10_r);
- DECLARE_READ8_MEMBER(mouse_7b11_r);
-
- DECLARE_WRITE8_MEMBER(mouse_7b00_w);
- DECLARE_WRITE8_MEMBER(mouse_7b01_w);
- DECLARE_WRITE8_MEMBER(mouse_7b10_w);
- DECLARE_WRITE8_MEMBER(mouse_7b11_w);
-
- DECLARE_READ8_MEMBER(adc_7b80_r);
- DECLARE_WRITE8_MEMBER(adc_7b80_w);
- DECLARE_READ8_MEMBER(adc_7b81_r);
- DECLARE_WRITE8_MEMBER(adc_7b81_w);
- TIMER_CALLBACK_MEMBER(adc_timer_done);
- emu_timer *m_adc_timer;
- uint8_t m_adc_control;
-
DECLARE_WRITE8_MEMBER(slotreg_7810_w);
DECLARE_WRITE8_MEMBER(rom_dmatrg_w);
@@ -323,8 +311,6 @@ private:
uint8_t m_io0_direction;
uint8_t m_io1_direction;
- uint8_t m_adc_inlatch;
-
DECLARE_READ8_MEMBER(nmi_vector_lo_r);
DECLARE_READ8_MEMBER(nmi_vector_hi_r);
DECLARE_READ8_MEMBER(irq_vector_lo_r);
@@ -466,16 +452,20 @@ private:
return 0xff;
}
- DECLARE_READ8_MEMBER(mult_r);
- DECLARE_WRITE8_MEMBER(mult_w);
- DECLARE_READ8_MEMBER(mult_param_r);
- DECLARE_WRITE8_MEMBER(mult_param_w);
-
- uint8_t m_barrel_params[2];
- DECLARE_READ8_MEMBER(barrel_r);
- DECLARE_WRITE8_MEMBER(barrel_w);
+ DECLARE_READ8_MEMBER(adc0_r) { return m_an_in[0]->read(); };
+ DECLARE_READ8_MEMBER(adc1_r) { return m_an_in[1]->read(); };
+ DECLARE_READ8_MEMBER(adc2_r) { return m_an_in[2]->read(); };
+ DECLARE_READ8_MEMBER(adc3_r) { return m_an_in[3]->read(); };
+ DECLARE_READ8_MEMBER(adc4_r) { return m_an_in[4]->read(); };
+ DECLARE_READ8_MEMBER(adc5_r) { return m_an_in[5]->read(); };
+ DECLARE_READ8_MEMBER(adc6_r) { return m_an_in[6]->read(); };
+ DECLARE_READ8_MEMBER(adc7_r) { return m_an_in[7]->read(); };
+ DECLARE_READ8_MEMBER(anport0_r) { logerror("%s: unhandled anport0_r\n", machine().describe_context()); return 0xff; };
+ DECLARE_READ8_MEMBER(anport1_r) { logerror("%s: unhandled anport1_r\n", machine().describe_context()); return 0xff; };
+ DECLARE_READ8_MEMBER(anport2_r) { logerror("%s: unhandled anport2_r\n", machine().describe_context()); return 0xff; };
+ DECLARE_READ8_MEMBER(anport3_r) { logerror("%s: unhandled anport3_r\n", machine().describe_context()); return 0xff; };
void update_irqs();
uint8_t m_irqsource;
@@ -486,9 +476,6 @@ private:
uint8_t m_irq_vector_lo_data;
uint8_t m_irq_vector_hi_data;
- uint8_t m_multparams[3];
- uint8_t m_multresults[2];
-
uint8_t m_spritefragment_dmaparam1[2];
uint8_t m_spritefragment_dmaparam2[2];
@@ -575,6 +562,9 @@ private:
DECLARE_READ8_MEMBER(sound_regram_read_cb);
protected:
+ required_device<xavix_adc_device> m_adc;
+ required_device<xavix_anport_device> m_anport;
+ required_device<xavix_math_device> m_math;
optional_device<xavix2002_io_device> m_xavix2002io;
uint8_t m_extbusctrl[3];
@@ -590,6 +580,42 @@ protected:
DECLARE_WRITE8_MEMBER(extended_extbus_reg2_w);
};
+class xavix_guru_state : public xavix_state
+{
+public:
+ xavix_guru_state(const machine_config &mconfig, device_type type, const char *tag)
+ : xavix_state(mconfig, type, tag)
+ { }
+
+ void xavix_guru(machine_config &config);
+
+protected:
+
+private:
+ DECLARE_READ8_MEMBER(guru_anport2_r) { uint8_t ret = m_mouse1x->read()-0x10; return ret; }
+};
+
+
+class xavix_2000_nv_sdb_state : public xavix_state
+{
+public:
+ xavix_2000_nv_sdb_state(const machine_config &mconfig, device_type type, const char *tag)
+ : xavix_state(mconfig, type, tag)
+ { }
+
+ void xavix2000_nv_sdb(machine_config &config);
+
+protected:
+
+private:
+ DECLARE_READ8_MEMBER(sdb_anport0_r) { return m_mouse0x->read()^0x7f; }
+ DECLARE_READ8_MEMBER(sdb_anport1_r) { return m_mouse0y->read()^0x7f; }
+ DECLARE_READ8_MEMBER(sdb_anport2_r) { return m_mouse1x->read()^0x7f; }
+ DECLARE_READ8_MEMBER(sdb_anport3_r) { return m_mouse1y->read()^0x7f; }
+
+};
+
+
class xavix_i2c_state : public xavix_state
{
public:
@@ -636,8 +662,16 @@ public:
: xavix_i2c_state(mconfig, type, tag)
{ }
+ void xavix_i2c_24lc04_tam(machine_config &config);
+
private:
virtual void write_io1(uint8_t data, uint8_t direction) override;
+
+private:
+ DECLARE_READ8_MEMBER(tam_anport0_r) { return m_mouse0x->read()^0x7f; }
+ DECLARE_READ8_MEMBER(tam_anport1_r) { return m_mouse0y->read()^0x7f; }
+ DECLARE_READ8_MEMBER(tam_anport2_r) { return m_mouse1x->read()^0x7f; }
+ DECLARE_READ8_MEMBER(tam_anport3_r) { return m_mouse1y->read()^0x7f; }
};
@@ -917,14 +951,22 @@ class xavix_popira2_cart_state : public xavix_cart_state
{
public:
xavix_popira2_cart_state(const machine_config &mconfig, device_type type, const char *tag)
- : xavix_cart_state(mconfig,type,tag)
+ : xavix_cart_state(mconfig,type,tag),
+ m_p2(*this, "P2")
{ }
+ void xavix_cart_popira2(machine_config &config);
+
DECLARE_CUSTOM_INPUT_MEMBER(i2c_r);
protected:
virtual void write_io1(uint8_t data, uint8_t direction) override;
+private:
+ DECLARE_READ8_MEMBER(popira2_adc0_r);
+ DECLARE_READ8_MEMBER(popira2_adc1_r);
+
+ required_ioport m_p2;
};
diff --git a/src/mame/layout/aci_boris.lay b/src/mame/layout/aci_boris.lay
index 4314ab83d86..d96e325c0b9 100644
--- a/src/mame/layout/aci_boris.lay
+++ b/src/mame/layout/aci_boris.lay
@@ -5,6 +5,7 @@
<element name="black"><rect><color red="0.16" green="0.16" blue="0.16" /></rect></element>
<element name="disk_white"><disk><color red="0.8" green="0.8" blue="0.8" /></disk></element>
+ <element name="disk_white2"><disk><color red="0.73" green="0.73" blue="0.73" /></disk></element>
<element name="button" defstate="0">
<rect state="0"><color red="0.55" green="0.55" blue="0.55" /></rect>
@@ -35,11 +36,11 @@
<element name="digitq" defstate="28536"><led16seg><color red="0.8" green="0.35" blue="0.05" /></led16seg></element>
<element name="digitk" defstate="28668"><led16seg><color red="0.8" green="0.35" blue="0.05" /></led16seg></element>
- <element name="text_u1"><text string="from" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
- <element name="text_u2"><text string="to" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
- <element name="text_u3"><text string="hrs" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
- <element name="text_u4"><text string="min" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
- <element name="text_u5"><text string="sec" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_u1"><text string="from" align="1"><color red="0.72" green="0.72" blue="0.72" /></text></element>
+ <element name="text_u2"><text string="to" align="1"><color red="0.72" green="0.72" blue="0.72" /></text></element>
+ <element name="text_u3"><text string="hrs" align="1"><color red="0.72" green="0.72" blue="0.72" /></text></element>
+ <element name="text_u4"><text string="min" align="1"><color red="0.72" green="0.72" blue="0.72" /></text></element>
+ <element name="text_u5"><text string="sec" align="1"><color red="0.72" green="0.72" blue="0.72" /></text></element>
<element name="text_l01a"><text string="G" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l01b"><text string="7" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
@@ -88,14 +89,14 @@
<bezel name="digit1" element="digit"><bounds x="16.50" y="18.3" width="2.75" height="4.125" /></bezel>
<bezel name="digit0" element="digit"><bounds x="19.25" y="18.3" width="2.75" height="4.125" /></bezel>
- <bezel element="disk_white"><bounds x="1.125" y="23" width="0.5" height="0.5" /></bezel>
- <bezel element="disk_white"><bounds x="3.875" y="23" width="0.5" height="0.5" /></bezel>
- <bezel element="disk_white"><bounds x="6.625" y="23" width="0.5" height="0.5" /></bezel>
- <bezel element="disk_white"><bounds x="9.375" y="23" width="0.5" height="0.5" /></bezel>
- <bezel element="disk_white"><bounds x="12.125" y="23" width="0.5" height="0.5" /></bezel>
- <bezel element="disk_white"><bounds x="14.875" y="23" width="0.5" height="0.5" /></bezel>
- <bezel element="disk_white"><bounds x="17.625" y="23" width="0.5" height="0.5" /></bezel>
- <bezel element="disk_white"><bounds x="20.375" y="23" width="0.5" height="0.5" /></bezel>
+ <bezel element="disk_white2"><bounds x="1.125" y="23" width="0.5" height="0.5" /></bezel>
+ <bezel element="disk_white2"><bounds x="3.875" y="23" width="0.5" height="0.5" /></bezel>
+ <bezel element="disk_white2"><bounds x="6.625" y="23" width="0.5" height="0.5" /></bezel>
+ <bezel element="disk_white2"><bounds x="9.375" y="23" width="0.5" height="0.5" /></bezel>
+ <bezel element="disk_white2"><bounds x="12.125" y="23" width="0.5" height="0.5" /></bezel>
+ <bezel element="disk_white2"><bounds x="14.875" y="23" width="0.5" height="0.5" /></bezel>
+ <bezel element="disk_white2"><bounds x="17.625" y="23" width="0.5" height="0.5" /></bezel>
+ <bezel element="disk_white2"><bounds x="20.375" y="23" width="0.5" height="0.5" /></bezel>
<bezel element="text_u1"><bounds x="1.125" y="15.8" width="6" height="1.8" /></bezel>
<bezel element="text_u2"><bounds x="9.375" y="15.8" width="6" height="1.8" /></bezel>
diff --git a/src/mame/layout/alphie.lay b/src/mame/layout/alphie.lay
index 259af608f92..6d417825279 100644
--- a/src/mame/layout/alphie.lay
+++ b/src/mame/layout/alphie.lay
@@ -10,19 +10,34 @@
<disk state="1"><color red="1.0" green="0.2" blue="0.23" /></disk>
</element>
+ <element name="nothing" defstate="0">
+ <text string=" "><color red="0" green="0" blue="0" /></text>
+ </element>
+
+ <element name="switch_qa" defstate="0">
+ <text string=" "><color red="0" green="0" blue="0" /></text>
+ <text state="0x01" string="1"><color red="0.95" green="0.95" blue="0.95" /></text>
+ <text state="0x02" string="2"><color red="0.95" green="0.95" blue="0.95" /></text>
+ <text state="0x04" string="3"><color red="0.95" green="0.95" blue="0.95" /></text>
+ <text state="0x08" string="4"><color red="0.95" green="0.95" blue="0.95" /></text>
+ <text state="0x10" string="5"><color red="0.95" green="0.95" blue="0.95" /></text>
+ </element>
+ <element name="switch_act" defstate="0">
+ <text string=" "><color red="0" green="0" blue="0" /></text>
+ <text state="0x01" string="S"><color red="0.95" green="0.95" blue="0.95" /></text>
+ <text state="0x02" string="*"><color red="0.95" green="0.95" blue="0.95" /></text>
+ <text state="0x04" string="X"><color red="0.95" green="0.95" blue="0.95" /></text>
+ <text state="0x08" string="&#x266a;"><color red="0.95" green="0.95" blue="0.95" /></text> <!-- music note -->
+ </element>
+
<element name="text_1"><text string="1"><color red="0.75" green="0.75" blue="0.75" /></text></element>
<element name="text_2"><text string="2"><color red="0.75" green="0.75" blue="0.75" /></text></element>
<element name="text_3"><text string="3"><color red="0.75" green="0.75" blue="0.75" /></text></element>
<element name="text_4"><text string="4"><color red="0.75" green="0.75" blue="0.75" /></text></element>
<element name="text_5"><text string="5"><color red="0.75" green="0.75" blue="0.75" /></text></element>
<element name="text_q"><text string="Question:" align="1"><color red="0.75" green="0.75" blue="0.75" /></text></element>
- <element name="text_a"><text string="Answer:" align="1"><color red="0.75" green="0.75" blue="0.75" /></text></element>
-
- <element name="counter" defstate="1">
- <simplecounter maxstate="9" digits="1">
- <color red="0.95" green="0.95" blue="0.95" />
- </simplecounter>
- </element>
+ <element name="text_ans"><text string="Answer:" align="1"><color red="0.75" green="0.75" blue="0.75" /></text></element>
+ <element name="text_act"><text string="Activity:" align="1"><color red="0.75" green="0.75" blue="0.75" /></text></element>
<!-- build screen -->
@@ -45,9 +60,12 @@
<bezel element="static_gray"><bounds x="6" y="0.5" width="0.2" height="13" /></bezel>
<bezel element="text_q"><bounds x="8" y="0" width="10" height="2" /></bezel>
- <bezel element="text_a"><bounds x="8" y="3" width="10" height="2" /></bezel>
- <bezel name="q_pos" element="counter"><bounds x="15" y="0" width="2" height="2" /></bezel>
- <bezel name="a_pos" element="counter"><bounds x="15" y="3" width="2" height="2" /></bezel>
+ <bezel element="text_ans"><bounds x="8" y="3" width="10" height="2" /></bezel>
+ <bezel element="text_act"><bounds x="8" y="6" width="10" height="2" /></bezel>
+ <bezel element="nothing" inputtag="DUMMY" inputmask="0x01"><bounds x="14" y="-1" width="4" height="10" /></bezel>
+ <bezel element="switch_qa" inputtag="IN.1" inputmask="0x1f" inputraw="1"><bounds x="15" y="0" width="2" height="2" /></bezel>
+ <bezel element="switch_qa" inputtag="IN.2" inputmask="0x1f" inputraw="1"><bounds x="15" y="3" width="2" height="2" /></bezel>
+ <bezel element="switch_act" inputtag="IN.3" inputmask="0x0f" inputraw="1"><bounds x="15" y="6" width="2" height="2" /></bezel>
</view>
</mamelayout>
diff --git a/src/mame/layout/ave_arb.lay b/src/mame/layout/ave_arb.lay
index 6a3c9a4c502..99c5e158b96 100644
--- a/src/mame/layout/ave_arb.lay
+++ b/src/mame/layout/ave_arb.lay
@@ -120,12 +120,12 @@
<element name="text_s3"><text string="Take Back" align="1"><color red="0.55" green="0.55" blue="0.55" /></text></element>
<element name="text_s4"><text string="Clear" align="1"><color red="0.55" green="0.55" blue="0.55" /></text></element>
- <element name="text_r11"><text string="&#x2659;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_r21"><text string="&#x2658;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_r31"><text string="&#x2657;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_r41"><text string="&#x2656;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_r51"><text string="&#x2655;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_r61"><text string="&#x2654;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_r11"><text string="[P]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_r21"><text string="[N]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_r31"><text string="[B]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_r41"><text string="[R]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_r51"><text string="[Q]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_r61"><text string="[K]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_r71"><text string="W"><color red="0.81" green="0.8" blue="0.79" /></text></element> <!-- White -->
<element name="text_r81"><text string="B"><color red="0.81" green="0.8" blue="0.79" /></text></element> <!-- Black -->
@@ -368,44 +368,44 @@
<!-- right side -->
- <bezel element="text_l0"><bounds x="88.6" y="22.75" width="2.5" height="1.5" /></bezel>
- <bezel element="text_l1"><bounds x="88.6" y="25.75" width="2.5" height="1.5" /></bezel>
- <bezel element="text_l2"><bounds x="88.6" y="28.75" width="2.5" height="1.5" /></bezel>
- <bezel element="text_l3"><bounds x="88.6" y="31.75" width="2.5" height="1.5" /></bezel>
- <bezel element="text_l4"><bounds x="88.6" y="34.75" width="2.5" height="1.5" /></bezel>
- <bezel element="text_l5"><bounds x="88.6" y="37.75" width="2.5" height="1.5" /></bezel>
- <bezel element="text_l6"><bounds x="88.6" y="43.25" width="2.5" height="1.5" /></bezel>
-
- <bezel element="text_r11"><bounds x="92.5" y="22.2" width="3" height="2.5" /></bezel>
- <bezel element="text_r21"><bounds x="92.5" y="25.2" width="3" height="2.5" /></bezel>
- <bezel element="text_r31"><bounds x="92.5" y="28.2" width="3" height="2.5" /></bezel>
- <bezel element="text_r41"><bounds x="92.5" y="31.2" width="3" height="2.5" /></bezel>
- <bezel element="text_r51"><bounds x="92.5" y="34.2" width="3" height="2.5" /></bezel>
- <bezel element="text_r61"><bounds x="92.5" y="37.2" width="3" height="2.5" /></bezel>
- <bezel element="text_r71"><bounds x="92.5" y="43.25" width="3" height="1.5" /></bezel>
- <bezel element="text_r81"><bounds x="92.5" y="46.25" width="3" height="1.5" /></bezel>
-
- <bezel element="text_s1"><bounds x="97.8" y="21.25" width="10" height="1.5" /></bezel>
- <bezel element="text_s2"><bounds x="97.8" y="33.25" width="10" height="1.5" /></bezel>
- <bezel element="text_s3"><bounds x="97.8" y="36.25" width="10" height="1.5" /></bezel>
- <bezel element="text_s4"><bounds x="97.8" y="41.75" width="10" height="1.5" /></bezel>
-
- <bezel element="text_r12"><bounds x="87.5" y="13.25" width="7" height="1.5" /></bezel>
- <bezel element="text_r22"><bounds x="87.5" y="17.25" width="7" height="1.5" /></bezel>
-
- <bezel element="text_r32"><bounds x="97.8" y="22.75" width="10" height="1.5" /></bezel>
- <bezel element="text_r42"><bounds x="97.8" y="25.75" width="10" height="1.5" /></bezel>
- <bezel element="text_r52"><bounds x="97.8" y="28.75" width="10" height="1.5" /></bezel>
- <bezel element="text_r62"><bounds x="97.8" y="31.75" width="10" height="1.5" /></bezel>
- <bezel element="text_r72"><bounds x="97.8" y="34.75" width="10" height="1.5" /></bezel>
- <bezel element="text_r82"><bounds x="97.8" y="37.75" width="10" height="1.5" /></bezel>
- <bezel element="text_r92"><bounds x="97.8" y="43.25" width="10" height="1.5" /></bezel>
- <bezel element="text_ra2"><bounds x="97.8" y="46.25" width="10" height="1.5" /></bezel>
-
- <bezel element="text_r13"><bounds x="93.5" y="51.75" width="10" height="1.5" /></bezel>
- <bezel element="text_r23"><bounds x="93.5" y="54.75" width="10" height="1.5" /></bezel>
- <bezel element="text_r33"><bounds x="93.5" y="60.25" width="10" height="1.5" /></bezel>
- <bezel element="text_r43"><bounds x="93.5" y="63.25" width="10" height="1.5" /></bezel>
+ <bezel element="text_l0"><bounds x="88.6" y="22.65" width="2.5" height="1.5" /></bezel>
+ <bezel element="text_l1"><bounds x="88.6" y="25.65" width="2.5" height="1.5" /></bezel>
+ <bezel element="text_l2"><bounds x="88.6" y="28.65" width="2.5" height="1.5" /></bezel>
+ <bezel element="text_l3"><bounds x="88.6" y="31.65" width="2.5" height="1.5" /></bezel>
+ <bezel element="text_l4"><bounds x="88.6" y="34.65" width="2.5" height="1.5" /></bezel>
+ <bezel element="text_l5"><bounds x="88.6" y="37.65" width="2.5" height="1.5" /></bezel>
+ <bezel element="text_l6"><bounds x="88.6" y="43.15" width="2.5" height="1.5" /></bezel>
+
+ <bezel element="text_r11"><bounds x="92.25" y="22.65" width="3.5" height="1.5" /></bezel>
+ <bezel element="text_r21"><bounds x="92.25" y="25.65" width="3.5" height="1.5" /></bezel>
+ <bezel element="text_r31"><bounds x="92.25" y="28.65" width="3.5" height="1.5" /></bezel>
+ <bezel element="text_r41"><bounds x="92.25" y="31.65" width="3.5" height="1.5" /></bezel>
+ <bezel element="text_r51"><bounds x="92.25" y="34.65" width="3.5" height="1.5" /></bezel>
+ <bezel element="text_r61"><bounds x="92.25" y="37.65" width="3.5" height="1.5" /></bezel>
+ <bezel element="text_r71"><bounds x="92.5" y="43.15" width="3" height="1.5" /></bezel>
+ <bezel element="text_r81"><bounds x="92.5" y="46.15" width="3" height="1.5" /></bezel>
+
+ <bezel element="text_s1"><bounds x="97.8" y="21.15" width="10" height="1.5" /></bezel>
+ <bezel element="text_s2"><bounds x="97.8" y="33.15" width="10" height="1.5" /></bezel>
+ <bezel element="text_s3"><bounds x="97.8" y="36.15" width="10" height="1.5" /></bezel>
+ <bezel element="text_s4"><bounds x="97.8" y="41.65" width="10" height="1.5" /></bezel>
+
+ <bezel element="text_r12"><bounds x="87.5" y="13.15" width="7" height="1.5" /></bezel>
+ <bezel element="text_r22"><bounds x="87.5" y="17.15" width="7" height="1.5" /></bezel>
+
+ <bezel element="text_r32"><bounds x="97.8" y="22.65" width="10" height="1.5" /></bezel>
+ <bezel element="text_r42"><bounds x="97.8" y="25.65" width="10" height="1.5" /></bezel>
+ <bezel element="text_r52"><bounds x="97.8" y="28.65" width="10" height="1.5" /></bezel>
+ <bezel element="text_r62"><bounds x="97.8" y="31.65" width="10" height="1.5" /></bezel>
+ <bezel element="text_r72"><bounds x="97.8" y="34.65" width="10" height="1.5" /></bezel>
+ <bezel element="text_r82"><bounds x="97.8" y="37.65" width="10" height="1.5" /></bezel>
+ <bezel element="text_r92"><bounds x="97.8" y="43.15" width="10" height="1.5" /></bezel>
+ <bezel element="text_ra2"><bounds x="97.8" y="46.15" width="10" height="1.5" /></bezel>
+
+ <bezel element="text_r13"><bounds x="93.5" y="51.65" width="10" height="1.5" /></bezel>
+ <bezel element="text_r23"><bounds x="93.5" y="54.65" width="10" height="1.5" /></bezel>
+ <bezel element="text_r33"><bounds x="93.5" y="60.15" width="10" height="1.5" /></bezel>
+ <bezel element="text_r43"><bounds x="93.5" y="63.15" width="10" height="1.5" /></bezel>
<bezel name="8.7" element="led2"><bounds x="91" y="22.75" width="1.5" height="1.5" /></bezel>
<bezel name="8.6" element="led2"><bounds x="91" y="25.75" width="1.5" height="1.5" /></bezel>
diff --git a/src/mame/layout/breakout.lay b/src/mame/layout/breakout.lay
index 1677851b6b0..1d656beb018 100644
--- a/src/mame/layout/breakout.lay
+++ b/src/mame/layout/breakout.lay
@@ -22,15 +22,15 @@
<color red="1" green="1" blue="0.25" />
</rect>
<rect>
- <bounds left="0" top="88" right="192" bottom="236" />
+ <bounds left="0" top="88" right="192" bottom="231" />
<color red="1" green="1" blue="1" />
</rect>
<rect>
- <bounds left="0" top="236" right="192" bottom="244" />
+ <bounds left="0" top="231" right="192" bottom="238" />
<color red="0.125" green="0.125" blue="1" />
</rect>
<rect>
- <bounds left="0" top="244" right="192" bottom="258" />
+ <bounds left="0" top="238" right="192" bottom="244" />
<color red="1" green="1" blue="1" />
</rect>
</element>
diff --git a/src/mame/layout/cc40.lay b/src/mame/layout/cc40.lay
index 2f97e22b6de..266029af2de 100644
--- a/src/mame/layout/cc40.lay
+++ b/src/mame/layout/cc40.lay
@@ -9,20 +9,20 @@
<element name="ind_left" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
- <text string="&#x25c0;" align="1" state="0">
+ <text string="&#x25c4;" align="1" state="0">
<color red="0.515" green="0.537" blue="0.548" />
</text>
- <text string="&#x25c0;" align="1" state="1">
+ <text string="&#x25c4;" align="1" state="1">
<color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_right" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
- <text string="&#x25b6;" align="2" state="0">
+ <text string="&#x25ba;" align="2" state="0">
<color red="0.515" green="0.537" blue="0.548" />
</text>
- <text string="&#x25b6;" align="2" state="1">
+ <text string="&#x25ba;" align="2" state="1">
<color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
@@ -162,11 +162,11 @@
<!-- draw top row of lcd indicators -->
<bezel name="lamp10" element="ind_left">
- <bounds x="1.5" y="2" width="20" height="7" />
+ <bounds x="1.5" y="2.5" width="20" height="5.5" />
</bezel>
<bezel name="lamp4" element="ind_right">
- <bounds x="167.5" y="2" width="20" height="7" />
+ <bounds x="167.5" y="2.5" width="20" height="5.5" />
</bezel>
<bezel name="lamp11" element="ind_shift">
diff --git a/src/mame/layout/chessmst.lay b/src/mame/layout/chessmst.lay
index 6fb7883b80b..77c04215faa 100644
--- a/src/mame/layout/chessmst.lay
+++ b/src/mame/layout/chessmst.lay
@@ -194,12 +194,12 @@
<element name="text_hint"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="HINT" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_white"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="WHITE" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_black"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="BLACK" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
- <element name="text_king" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="&#x2654;" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
- <element name="text_queen" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="&#x2655;" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
- <element name="text_rook" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="&#x2656;" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
- <element name="text_bishop" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="&#x2657;" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
- <element name="text_knight" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="&#x2658;" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
- <element name="text_pawn" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="&#x2659;" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
+ <element name="text_king" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="[K]" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
+ <element name="text_queen" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="[Q]" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
+ <element name="text_rook" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="[R]" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
+ <element name="text_bishop" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="[B]" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
+ <element name="text_knight" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="[N]" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
+ <element name="text_pawn" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="[P]" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_change"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="CHANGE" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_halt"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="HALT" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_reset"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="RESET" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
@@ -208,19 +208,19 @@
<element name="text_cms"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="CM'S" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="piece" defstate="0">
- <text string="&#x265a;" state="1"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265b;" state="2"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265c;" state="3"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265d;" state="4"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265e;" state="5"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265f;" state="6"><color red="0.27" green="0.25" blue="0.25" /></text>
-
- <text string="&#x265a;" state="7"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265b;" state="8"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265c;" state="9"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265d;" state="10"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265e;" state="11"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265f;" state="12"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[K]" state="1"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[Q]" state="2"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[R]" state="3"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[B]" state="4"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[N]" state="5"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[P]" state="6"><color red="0.27" green="0.25" blue="0.25" /></text>
+
+ <text string="[K]" state="7"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[Q]" state="8"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[R]" state="9"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[B]" state="10"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[N]" state="11"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[P]" state="12"><color red="0.71" green="0.7" blue="0.69" /></text>
<!-- selected pieces -->
<disk state="17"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
@@ -236,19 +236,19 @@
<disk state="27"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
<disk state="28"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
- <text string="&#x265a;" state="17"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265b;" state="18"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265c;" state="19"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265d;" state="20"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265e;" state="21"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265f;" state="22"><color red="0.27" green="0.25" blue="0.25" /></text>
-
- <text string="&#x265a;" state="23"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265b;" state="24"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265c;" state="25"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265d;" state="26"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265e;" state="27"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265f;" state="28"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[K]" state="17"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[Q]" state="18"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[R]" state="19"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[B]" state="20"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[N]" state="21"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[P]" state="22"><color red="0.27" green="0.25" blue="0.25" /></text>
+
+ <text string="[K]" state="23"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[Q]" state="24"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[R]" state="25"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[B]" state="26"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[N]" state="27"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[P]" state="28"><color red="0.71" green="0.7" blue="0.69" /></text>
</element>
<!-- build screen -->
@@ -558,12 +558,12 @@
<bezel element="text_reset"> <bounds x="92.5" y="82" width="10" height="2" /></bezel>
<bezel element="text_halt"> <bounds x="107.5" y="82" width="8" height="2" /></bezel>
- <bezel element="text_pawn"> <bounds x="95" y="18" width="4" height="4" /></bezel>
- <bezel element="text_knight"> <bounds x="95" y="25" width="4" height="4" /></bezel>
- <bezel element="text_bishop"> <bounds x="95" y="32" width="4" height="4" /></bezel>
- <bezel element="text_rook"> <bounds x="95" y="39" width="4" height="4" /></bezel>
- <bezel element="text_queen"> <bounds x="95" y="46" width="4" height="4" /></bezel>
- <bezel element="text_king"> <bounds x="95" y="53" width="4" height="4" /></bezel>
+ <bezel element="text_pawn"> <bounds x="95" y="18.5" width="4" height="2.6" /></bezel>
+ <bezel element="text_knight"> <bounds x="95" y="25.5" width="4" height="2.6" /></bezel>
+ <bezel element="text_bishop"> <bounds x="95" y="32.5" width="4" height="2.6" /></bezel>
+ <bezel element="text_rook"> <bounds x="95" y="39.5" width="4" height="2.6" /></bezel>
+ <bezel element="text_queen"> <bounds x="95" y="46.5" width="4" height="2.6" /></bezel>
+ <bezel element="text_king"> <bounds x="95" y="53.5" width="4" height="2.6" /></bezel>
<bezel element="text_white"> <bounds x="90" y="61" width="9" height="1.8" /></bezel>
<bezel element="text_black"> <bounds x="90" y="68" width="9" height="1.8" /></bezel>
diff --git a/src/mame/layout/chessmstdm.lay b/src/mame/layout/chessmstdm.lay
index 82ea39b96e5..1a8bb373c8a 100644
--- a/src/mame/layout/chessmstdm.lay
+++ b/src/mame/layout/chessmstdm.lay
@@ -205,19 +205,19 @@
<element name="text_move_back"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="MOVE BACK" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="piece" defstate="0">
- <text string="&#x265a;" state="1"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265b;" state="2"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265c;" state="3"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265d;" state="4"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265e;" state="5"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265f;" state="6"><color red="0.27" green="0.25" blue="0.25" /></text>
-
- <text string="&#x265a;" state="7"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265b;" state="8"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265c;" state="9"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265d;" state="10"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265e;" state="11"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265f;" state="12"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[K]" state="1"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[Q]" state="2"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[R]" state="3"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[B]" state="4"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[N]" state="5"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[P]" state="6"><color red="0.27" green="0.25" blue="0.25" /></text>
+
+ <text string="[K]" state="7"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[Q]" state="8"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[R]" state="9"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[B]" state="10"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[N]" state="11"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[P]" state="12"><color red="0.71" green="0.7" blue="0.69" /></text>
<!-- selected pieces -->
<disk state="17"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
@@ -233,19 +233,19 @@
<disk state="27"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
<disk state="28"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
- <text string="&#x265a;" state="17"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265b;" state="18"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265c;" state="19"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265d;" state="20"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265e;" state="21"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265f;" state="22"><color red="0.27" green="0.25" blue="0.25" /></text>
-
- <text string="&#x265a;" state="23"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265b;" state="24"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265c;" state="25"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265d;" state="26"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265e;" state="27"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265f;" state="28"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[K]" state="17"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[Q]" state="18"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[R]" state="19"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[B]" state="20"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[N]" state="21"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[P]" state="22"><color red="0.27" green="0.25" blue="0.25" /></text>
+
+ <text string="[K]" state="23"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[Q]" state="24"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[R]" state="25"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[B]" state="26"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[N]" state="27"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[P]" state="28"><color red="0.71" green="0.7" blue="0.69" /></text>
</element>
<!-- build screen -->
diff --git a/src/mame/layout/ck_master.lay b/src/mame/layout/ck_master.lay
index 1b16de82f8a..0801c5a1f9b 100644
--- a/src/mame/layout/ck_master.lay
+++ b/src/mame/layout/ck_master.lay
@@ -67,27 +67,27 @@
<element name="text_king">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x2654;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_queen">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x2655;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_rook">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x2656;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_bishop">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x2657;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_knight">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x2658;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_pawn">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x2659;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
@@ -284,12 +284,12 @@
<bezel element="text_l14"><bounds x="91.4" y="74.250" width="12.5" height="1.5" /></bezel>
<bezel element="text_l15"><bounds x="91.4" y="79.583" width="12.5" height="1.5" /></bezel>
- <bezel element="text_king"><bounds x="91.4" y="24.500" width="12.5" height="5" /></bezel>
- <bezel element="text_queen"><bounds x="91.4" y="29.833" width="12.5" height="5" /></bezel>
- <bezel element="text_rook"><bounds x="91.4" y="35.166" width="12.5" height="5" /></bezel>
- <bezel element="text_bishop"><bounds x="91.4" y="40.500" width="12.5" height="5" /></bezel>
- <bezel element="text_knight"><bounds x="91.4" y="45.833" width="12.5" height="5" /></bezel>
- <bezel element="text_pawn"><bounds x="91.4" y="51.166" width="12.5" height="5" /></bezel>
+ <bezel element="text_king"><bounds x="91.4" y="25.200" width="12.5" height="3" /></bezel>
+ <bezel element="text_queen"><bounds x="91.4" y="30.533" width="12.5" height="3" /></bezel>
+ <bezel element="text_rook"><bounds x="91.4" y="35.866" width="12.5" height="3" /></bezel>
+ <bezel element="text_bishop"><bounds x="91.4" y="41.200" width="12.5" height="3" /></bezel>
+ <bezel element="text_knight"><bounds x="91.4" y="46.533" width="12.5" height="3" /></bezel>
+ <bezel element="text_pawn"><bounds x="91.4" y="51.866" width="12.5" height="3" /></bezel>
<bezel element="black"><bounds x="96.25" y="57.75" width="2.5" height="2.5" /></bezel>
<bezel element="white"><bounds x="96.5" y="58" width="2.0" height="2.0" /></bezel>
diff --git a/src/mame/layout/copycat.lay b/src/mame/layout/copycat.lay
index da61dd4d5a6..418915877b9 100644
--- a/src/mame/layout/copycat.lay
+++ b/src/mame/layout/copycat.lay
@@ -9,28 +9,57 @@
<element name="static_green"><rect><color red="0.3" green="0.9" blue="0.3" /></rect></element>
<element name="static_yellow"><rect><color red="0.9" green="0.9" blue="0.3" /></rect></element>
<element name="static_orange"><rect><color red="0.9" green="0.6" blue="0.3" /></rect></element>
+ <element name="disk_red"><disk><color red="0.9" green="0.3" blue="0.3" /></disk></element>
+ <element name="disk_green"><disk><color red="0.3" green="0.9" blue="0.3" /></disk></element>
+ <element name="disk_yellow"><disk><color red="0.9" green="0.9" blue="0.3" /></disk></element>
+ <element name="disk_orange"><disk><color red="0.9" green="0.6" blue="0.3" /></disk></element>
<element name="text_b1"><text string="REPLAY"><color red="0.9" green="0.89" blue="0.8" /></text></element>
<element name="text_b2"><text string="PLAY"><color red="0.9" green="0.89" blue="0.8" /></text></element>
<element name="text_b3"><text string="BEST PLAY"><color red="0.9" green="0.89" blue="0.8" /></text></element>
+ <element name="text_s1"><text string="SKILL:" align="1"><color red="0.9" green="0.89" blue="0.8" /></text></element>
+ <element name="text_s2"><text string="GAME:" align="1"><color red="0.9" green="0.89" blue="0.8" /></text></element>
+
+ <element name="nothing"><text string=" "></text></element>
+
+ <element name="switch" defstate="0">
+ <text string=" "><color red="0" green="0" blue="0" /></text>
+ <text state="0x01" string="1" align="1"><color red="0.9" green="0.89" blue="0.8" /></text>
+ <text state="0x02" string="2" align="1"><color red="0.9" green="0.89" blue="0.8" /></text>
+ <text state="0x04" string="3" align="1"><color red="0.9" green="0.89" blue="0.8" /></text>
+ <text state="0x08" string="4" align="1"><color red="0.9" green="0.89" blue="0.8" /></text>
+ </element>
+
+ <element name="text_rg">
+ <disk><color red="0.9" green="0.89" blue="0.8" /></disk>
+ <text string="&#x25ba;">
+ <color red="0.3" green="0.9" blue="0.3" />
+ </text>
+ </element>
+ <element name="text_ro">
+ <disk><color red="0.9" green="0.89" blue="0.8" /></disk>
+ <text string="&#x25ba;">
+ <color red="0.8" green="0.6" blue="0.3" />
+ </text>
+ </element>
<element name="hlh" defstate="0">
<text string=" ">
- <bounds x="0.0" y="0.0" width="2.0" height="1.0" />
+ <bounds x="0.0" y="0.0" width="3.0" height="1.0" />
<color red="0.0" green="0.0" blue="0.0" />
</text>
<disk state="1">
- <bounds x="0.57" y="0.07" width="0.86" height="0.86" />
+ <bounds x="1.07" y="0.07" width="0.86" height="0.86" />
<color red="0.0" green="0.0" blue="0.0" />
</disk>
</element>
<element name="hlv" defstate="0">
<text string=" ">
- <bounds x="0.0" y="0.0" width="1.0" height="2.0" />
+ <bounds x="0.0" y="0.0" width="1.0" height="3.0" />
<color red="0.0" green="0.0" blue="0.0" />
</text>
<disk state="1">
- <bounds x="0.07" y="0.57" width="0.86" height="0.86" />
+ <bounds x="0.07" y="1.07" width="0.86" height="0.86" />
<color red="0.0" green="0.0" blue="0.0" />
</disk>
</element>
@@ -83,21 +112,44 @@
<bezel element="hlb" inputtag="IN.3" inputmask="0x02"><bounds x="5.625" y="5.875" width="0.75" height="0.75" /><color alpha="0.25" /></bezel>
<bezel element="hlb" inputtag="IN.3" inputmask="0x01"><bounds x="6.9375" y="6" width="0.5" height="0.5" /><color alpha="0.25" /></bezel>
- <bezel element="text_b1"><bounds x="4.0625" y="6.75" width="1.5" height="0.25" /></bezel>
- <bezel element="text_b2"><bounds x="5.125" y="6.75" width="1.75" height="0.25" /></bezel>
- <bezel element="text_b3"><bounds x="6.2375" y="6.75" width="1.9" height="0.25" /></bezel>
+ <bezel element="text_b1"><bounds x="4.0625" y="6.7" width="1.5" height="0.25" /></bezel>
+ <bezel element="text_b2"><bounds x="5.125" y="6.7" width="1.75" height="0.25" /></bezel>
+ <bezel element="text_b3"><bounds x="6.2375" y="6.7" width="1.9" height="0.25" /></bezel>
+
+ <bezel element="nothing" inputtag="DUMMY" inputmask="0x01"><bounds x="6.25" y="4.9" width="1.2" height="0.5" /></bezel>
+ <bezel element="switch" inputtag="IN.1" inputmask="0x0f" inputraw="1"><bounds x="6.3" y="4.925" width="1" height="0.25" /></bezel>
+ <bezel element="text_s1"><bounds x="5.15" y="4.925" width="1.5" height="0.25" /></bezel>
+ <bezel element="text_ro"><bounds x="5.825" y="4.875" width="0.35" height="0.35" /></bezel>
+ <bezel element="nothing" inputtag="IN.1" inputmask="0x0f" inputraw="1"><bounds x="5.8" y="4.85" width="0.4" height="0.4" /></bezel>
+
+ <bezel element="nothing" inputtag="DUMMY" inputmask="0x01"><bounds x="6.25" y="7.2" width="1.2" height="0.5" /></bezel>
+ <bezel element="switch" inputtag="IN.2" inputmask="0x07" inputraw="1"><bounds x="6.3" y="7.275" width="1" height="0.25" /></bezel>
+ <bezel element="text_s2"><bounds x="5.15" y="7.275" width="1.5" height="0.25" /></bezel>
+ <bezel element="text_rg"><bounds x="5.825" y="7.225" width="0.35" height="0.35" /></bezel>
+ <bezel element="nothing" inputtag="IN.2" inputmask="0x07" inputraw="1"><bounds x="5.8" y="7.2" width="0.4" height="0.4" /></bezel>
<!-- main buttons and leds -->
+ <bezel element="disk_red"><bounds x="1" y="3" width="2" height="2" /></bezel>
+ <bezel element="disk_red"><bounds x="1" y="7" width="2" height="2" /></bezel>
<bezel element="static_red"><bounds x="1" y="4" width="2" height="4" /></bezel>
+
+ <bezel element="disk_yellow"><bounds x="3" y="1" width="2" height="2" /></bezel>
+ <bezel element="disk_yellow"><bounds x="7" y="1" width="2" height="2" /></bezel>
<bezel element="static_yellow"><bounds x="4" y="1" width="4" height="2" /></bezel>
+
+ <bezel element="disk_orange"><bounds x="9" y="3" width="2" height="2" /></bezel>
+ <bezel element="disk_orange"><bounds x="9" y="7" width="2" height="2" /></bezel>
<bezel element="static_orange"><bounds x="9" y="4" width="2" height="4" /></bezel>
+
+ <bezel element="disk_green"><bounds x="3" y="9" width="2" height="2" /></bezel>
+ <bezel element="disk_green"><bounds x="7" y="9" width="2" height="2" /></bezel>
<bezel element="static_green"><bounds x="4" y="9" width="4" height="2" /></bezel>
- <bezel element="hlv" inputtag="IN.0" inputmask="0x02"><bounds x="1" y="4" width="2" height="4" /><color alpha="0.15" /></bezel>
- <bezel element="hlh" inputtag="IN.0" inputmask="0x08"><bounds x="4" y="1" width="4" height="2" /><color alpha="0.15" /></bezel>
- <bezel element="hlv" inputtag="IN.0" inputmask="0x04"><bounds x="9" y="4" width="2" height="4" /><color alpha="0.15" /></bezel>
- <bezel element="hlh" inputtag="IN.0" inputmask="0x01"><bounds x="4" y="9" width="4" height="2" /><color alpha="0.15" /></bezel>
+ <bezel element="hlv" inputtag="IN.0" inputmask="0x02"><bounds x="1" y="3" width="2" height="6" /><color alpha="0.15" /></bezel>
+ <bezel element="hlh" inputtag="IN.0" inputmask="0x08"><bounds x="3" y="1" width="6" height="2" /><color alpha="0.15" /></bezel>
+ <bezel element="hlv" inputtag="IN.0" inputmask="0x04"><bounds x="9" y="3" width="2" height="6" /><color alpha="0.15" /></bezel>
+ <bezel element="hlh" inputtag="IN.0" inputmask="0x01"><bounds x="3" y="9" width="6" height="2" /><color alpha="0.15" /></bezel>
<bezel name="0.0" element="ledg"><bounds x="5.75" y="8.25" width="0.5" height="0.5" /></bezel>
<bezel name="0.1" element="ledr"><bounds x="3.25" y="5.75" width="0.5" height="0.5" /></bezel>
diff --git a/src/mame/layout/copycatm2.lay b/src/mame/layout/copycatm2.lay
index 832fa9e339c..4c515df4c9e 100644
--- a/src/mame/layout/copycatm2.lay
+++ b/src/mame/layout/copycatm2.lay
@@ -9,6 +9,10 @@
<element name="static_green"><rect><color red="0.3" green="0.9" blue="0.3" /></rect></element>
<element name="static_yellow"><rect><color red="0.9" green="0.9" blue="0.3" /></rect></element>
<element name="static_orange"><rect><color red="0.9" green="0.6" blue="0.3" /></rect></element>
+ <element name="disk_red"><disk><color red="0.9" green="0.3" blue="0.3" /></disk></element>
+ <element name="disk_green"><disk><color red="0.3" green="0.9" blue="0.3" /></disk></element>
+ <element name="disk_yellow"><disk><color red="0.9" green="0.9" blue="0.3" /></disk></element>
+ <element name="disk_orange"><disk><color red="0.9" green="0.6" blue="0.3" /></disk></element>
<element name="text_u"><text string="REPLAY"><color red="0.9" green="0.89" blue="0.8" /></text></element>
<element name="text_d"><text string="Same Game Again"><color red="0.9" green="0.89" blue="0.8" /></text></element>
@@ -17,21 +21,21 @@
<element name="hlh" defstate="0">
<text string=" ">
- <bounds x="0.0" y="0.0" width="2.0" height="1.0" />
+ <bounds x="0.0" y="0.0" width="3.0" height="1.0" />
<color red="0.0" green="0.0" blue="0.0" />
</text>
<disk state="1">
- <bounds x="0.57" y="0.07" width="0.86" height="0.86" />
+ <bounds x="1.07" y="0.07" width="0.86" height="0.86" />
<color red="0.0" green="0.0" blue="0.0" />
</disk>
</element>
<element name="hlv" defstate="0">
<text string=" ">
- <bounds x="0.0" y="0.0" width="1.0" height="2.0" />
+ <bounds x="0.0" y="0.0" width="1.0" height="3.0" />
<color red="0.0" green="0.0" blue="0.0" />
</text>
<disk state="1">
- <bounds x="0.07" y="0.57" width="0.86" height="0.86" />
+ <bounds x="0.07" y="1.07" width="0.86" height="0.86" />
<color red="0.0" green="0.0" blue="0.0" />
</disk>
</element>
@@ -73,15 +77,26 @@
<!-- main buttons and leds -->
+ <bezel element="disk_red"><bounds x="1" y="3" width="2" height="2" /></bezel>
+ <bezel element="disk_red"><bounds x="1" y="7" width="2" height="2" /></bezel>
<bezel element="static_red"><bounds x="1" y="4" width="2" height="4" /></bezel>
+
+ <bezel element="disk_yellow"><bounds x="3" y="1" width="2" height="2" /></bezel>
+ <bezel element="disk_yellow"><bounds x="7" y="1" width="2" height="2" /></bezel>
<bezel element="static_yellow"><bounds x="4" y="1" width="4" height="2" /></bezel>
+
+ <bezel element="disk_orange"><bounds x="9" y="3" width="2" height="2" /></bezel>
+ <bezel element="disk_orange"><bounds x="9" y="7" width="2" height="2" /></bezel>
<bezel element="static_orange"><bounds x="9" y="4" width="2" height="4" /></bezel>
+
+ <bezel element="disk_green"><bounds x="3" y="9" width="2" height="2" /></bezel>
+ <bezel element="disk_green"><bounds x="7" y="9" width="2" height="2" /></bezel>
<bezel element="static_green"><bounds x="4" y="9" width="4" height="2" /></bezel>
- <bezel element="hlv" inputtag="IN.0" inputmask="0x02"><bounds x="1" y="4" width="2" height="4" /><color alpha="0.15" /></bezel>
- <bezel element="hlh" inputtag="IN.0" inputmask="0x04"><bounds x="4" y="1" width="4" height="2" /><color alpha="0.15" /></bezel>
- <bezel element="hlv" inputtag="IN.0" inputmask="0x01"><bounds x="9" y="4" width="2" height="4" /><color alpha="0.15" /></bezel>
- <bezel element="hlh" inputtag="IN.0" inputmask="0x08"><bounds x="4" y="9" width="4" height="2" /><color alpha="0.15" /></bezel>
+ <bezel element="hlv" inputtag="IN.0" inputmask="0x02"><bounds x="1" y="3" width="2" height="6" /><color alpha="0.15" /></bezel>
+ <bezel element="hlh" inputtag="IN.0" inputmask="0x04"><bounds x="3" y="1" width="6" height="2" /><color alpha="0.15" /></bezel>
+ <bezel element="hlv" inputtag="IN.0" inputmask="0x01"><bounds x="9" y="3" width="2" height="6" /><color alpha="0.15" /></bezel>
+ <bezel element="hlh" inputtag="IN.0" inputmask="0x08"><bounds x="3" y="9" width="6" height="2" /><color alpha="0.15" /></bezel>
<bezel name="0.3" element="ledg"><bounds x="5.75" y="8.25" width="0.5" height="0.5" /></bezel>
<bezel name="0.1" element="ledr"><bounds x="3.25" y="5.75" width="0.5" height="0.5" /></bezel>
diff --git a/src/mame/layout/ctstein.lay b/src/mame/layout/ctstein.lay
index d86f5caa719..a38d1f9bcfe 100644
--- a/src/mame/layout/ctstein.lay
+++ b/src/mame/layout/ctstein.lay
@@ -3,6 +3,7 @@
<!-- define elements -->
+ <element name="static_black"><rect><color red="0" green="0" blue="0" /></rect></element>
<element name="static_white"><rect><color red="0.75" green="0.73" blue="0.7" /></rect></element>
<element name="static_white2"><rect><color red="0.6" green="0.59" blue="0.57" /></rect></element>
@@ -22,6 +23,43 @@
<rect><color red="0.6" green="0.59" blue="0.57" /></rect>
<text string="GAME"><color red="0.0" green="0.0" blue="0.0" /></text>
</element>
+ <element name="text_dif">
+ <rect><color red="0.6" green="0.59" blue="0.57" /></rect>
+ <text string="DIFFICULTY"><color red="0.0" green="0.0" blue="0.0" /></text>
+ </element>
+ <element name="text_1">
+ <rect><color red="0.6" green="0.59" blue="0.57" /></rect>
+ <text string="1"><color red="0.0" green="0.0" blue="0.0" /></text>
+ </element>
+ <element name="text_2">
+ <rect><color red="0.6" green="0.59" blue="0.57" /></rect>
+ <text string="2"><color red="0.0" green="0.0" blue="0.0" /></text>
+ </element>
+ <element name="text_3">
+ <rect><color red="0.6" green="0.59" blue="0.57" /></rect>
+ <text string="3"><color red="0.0" green="0.0" blue="0.0" /></text>
+ </element>
+ <element name="text_4">
+ <rect><color red="0.6" green="0.59" blue="0.57" /></rect>
+ <text string="4"><color red="0.0" green="0.0" blue="0.0" /></text>
+ </element>
+
+ <element name="switch1" defstate="0">
+ <text string=" "><color red="0" green="0" blue="0" /></text>
+ <disk state="0x0e"><color red="0.4" green="0.4" blue="0.4" /></disk>
+ </element>
+ <element name="switch2" defstate="0">
+ <text string=" "><color red="0" green="0" blue="0" /></text>
+ <disk state="0x0d"><color red="0.4" green="0.4" blue="0.4" /></disk>
+ </element>
+ <element name="switch3" defstate="0">
+ <text string=" "><color red="0" green="0" blue="0" /></text>
+ <disk state="0x0b"><color red="0.4" green="0.4" blue="0.4" /></disk>
+ </element>
+ <element name="switch4" defstate="0">
+ <text string=" "><color red="0" green="0" blue="0" /></text>
+ <disk state="0x07"><color red="0.4" green="0.4" blue="0.4" /></disk>
+ </element>
<element name="lamp_r" defstate="0">
<rect state="0"><color red="0.5" green="0.15" blue="0.1" /></rect>
@@ -95,5 +133,16 @@
<bezel element="text_game"><bounds x="25.8" y="18.5" width="3" height="0.75" /></bezel>
<bezel element="button_r" inputtag="IN.1" inputmask="0x01"><bounds x="24" y="18" width="2" height="2" /></bezel>
+ <bezel element="text_dif"><bounds x="21.2" y="6.6" width="7.6" height="0.75" /></bezel>
+ <bezel element="static_black"><bounds x="23.5" y="7.5" width="3.0" height="0.7" /></bezel>
+ <bezel element="switch1" inputtag="IN.0" inputmask="0x0f" inputraw="1"><bounds x="23.4" y="7.4" width="0.9" height="0.9" /></bezel>
+ <bezel element="switch2" inputtag="IN.0" inputmask="0x0f" inputraw="1"><bounds x="24.166" y="7.4" width="0.9" height="0.9" /></bezel>
+ <bezel element="switch3" inputtag="IN.0" inputmask="0x0f" inputraw="1"><bounds x="24.933" y="7.4" width="0.9" height="0.9" /></bezel>
+ <bezel element="switch4" inputtag="IN.0" inputmask="0x0f" inputraw="1"><bounds x="25.7" y="7.4" width="0.9" height="0.9" /></bezel>
+ <bezel element="text_1"><bounds x="23.4" y="8.3" width="0.9" height="0.75" /></bezel>
+ <bezel element="text_2"><bounds x="24.166" y="8.3" width="0.9" height="0.75" /></bezel>
+ <bezel element="text_3"><bounds x="24.933" y="8.3" width="0.9" height="0.75" /></bezel>
+ <bezel element="text_4"><bounds x="25.7" y="8.3" width="0.9" height="0.75" /></bezel>
+
</view>
</mamelayout>
diff --git a/src/mame/layout/cxg_ch2001.lay b/src/mame/layout/cxg_ch2001.lay
index d2bdb0dcb52..d1767a91f7a 100644
--- a/src/mame/layout/cxg_ch2001.lay
+++ b/src/mame/layout/cxg_ch2001.lay
@@ -115,27 +115,27 @@
<element name="text_p1">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265a;"><color red="0.01" green="0.01" blue="0.01" /></text>
+ <text string="[K]"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_p2">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265b;"><color red="0.01" green="0.01" blue="0.01" /></text>
+ <text string="[Q]"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_p3">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265c;"><color red="0.01" green="0.01" blue="0.01" /></text>
+ <text string="[R]"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_p4">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265d;"><color red="0.01" green="0.01" blue="0.01" /></text>
+ <text string="[B]"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_p5">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265e;"><color red="0.01" green="0.01" blue="0.01" /></text>
+ <text string="[N]"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_p6">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265f;"><color red="0.01" green="0.01" blue="0.01" /></text>
+ <text string="[P]"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_b1"><text string="Set up"><color red="0.81" green="0.8" blue="0.79" /></text></element>
@@ -379,37 +379,43 @@
<bezel element="white"><bounds x="20.2" y="89.2" width="7.6" height="9" /></bezel>
<bezel element="static_black"><bounds x="20.5" y="89.5" width="7" height="8.4" /></bezel>
<bezel name="8.1" element="led2"><bounds x="23.25" y="90" width="1.5" height="1.5" /></bezel>
- <bezel element="text_p1"><bounds x="21" y="91.8" width="6" height="2" /></bezel>
+ <bezel element="white"><bounds x="21" y="91.8" width="6" height="2" /></bezel>
+ <bezel element="text_p1"><bounds x="21" y="91.9" width="6" height="1.5" /></bezel>
<bezel element="butr" inputtag="IN.8" inputmask="0x02"><bounds x="21" y="94.3" width="6" height="2" /></bezel>
<bezel element="white"><bounds x="28.2" y="89.2" width="7.6" height="9" /></bezel>
<bezel element="static_black"><bounds x="28.5" y="89.5" width="7" height="8.4" /></bezel>
<bezel name="8.2" element="led2"><bounds x="31.25" y="90" width="1.5" height="1.5" /></bezel>
- <bezel element="text_p2"><bounds x="29" y="91.8" width="6" height="2" /></bezel>
+ <bezel element="white"><bounds x="29" y="91.8" width="6" height="2" /></bezel>
+ <bezel element="text_p2"><bounds x="29" y="91.9" width="6" height="1.5" /></bezel>
<bezel element="butr" inputtag="IN.8" inputmask="0x04"><bounds x="29" y="94.3" width="6" height="2" /></bezel>
<bezel element="white"><bounds x="36.2" y="89.2" width="7.6" height="9" /></bezel>
<bezel element="static_black"><bounds x="36.5" y="89.5" width="7" height="8.4" /></bezel>
<bezel name="8.3" element="led2"><bounds x="39.25" y="90" width="1.5" height="1.5" /></bezel>
- <bezel element="text_p3"><bounds x="37" y="91.8" width="6" height="2" /></bezel>
+ <bezel element="white"><bounds x="37" y="91.8" width="6" height="2" /></bezel>
+ <bezel element="text_p3"><bounds x="37" y="91.9" width="6" height="1.5" /></bezel>
<bezel element="butr" inputtag="IN.8" inputmask="0x08"><bounds x="37" y="94.3" width="6" height="2" /></bezel>
<bezel element="white"><bounds x="20.2" y="98.7" width="7.6" height="9" /></bezel>
<bezel element="static_black"><bounds x="20.5" y="99" width="7" height="8.4" /></bezel>
<bezel name="8.4" element="led2"><bounds x="23.25" y="99.5" width="1.5" height="1.5" /></bezel>
- <bezel element="text_p4"><bounds x="21" y="101.3" width="6" height="2" /></bezel>
+ <bezel element="white"><bounds x="21" y="101.3" width="6" height="2" /></bezel>
+ <bezel element="text_p4"><bounds x="21" y="101.4" width="6" height="1.5" /></bezel>
<bezel element="butr" inputtag="IN.8" inputmask="0x10"><bounds x="21" y="103.8" width="6" height="2" /></bezel>
<bezel element="white"><bounds x="28.2" y="98.7" width="7.6" height="9" /></bezel>
<bezel element="static_black"><bounds x="28.5" y="99" width="7" height="8.4" /></bezel>
<bezel name="8.5" element="led2"><bounds x="31.25" y="99.5" width="1.5" height="1.5" /></bezel>
- <bezel element="text_p5"><bounds x="29" y="101.3" width="6" height="2" /></bezel>
+ <bezel element="white"><bounds x="29" y="101.3" width="6" height="2" /></bezel>
+ <bezel element="text_p5"><bounds x="29" y="101.4" width="6" height="1.5" /></bezel>
<bezel element="butr" inputtag="IN.8" inputmask="0x20"><bounds x="29" y="103.8" width="6" height="2" /></bezel>
<bezel element="white"><bounds x="36.2" y="98.7" width="7.6" height="9" /></bezel>
<bezel element="static_black"><bounds x="36.5" y="99" width="7" height="8.4" /></bezel>
<bezel name="8.6" element="led2"><bounds x="39.25" y="99.5" width="1.5" height="1.5" /></bezel>
- <bezel element="text_p6"><bounds x="37" y="101.3" width="6" height="2" /></bezel>
+ <bezel element="white"><bounds x="37" y="101.3" width="6" height="2" /></bezel>
+ <bezel element="text_p6"><bounds x="37" y="101.4" width="6" height="1.5" /></bezel>
<bezel element="butr" inputtag="IN.8" inputmask="0x40"><bounds x="37" y="103.8" width="6" height="2" /></bezel>
<bezel element="white"><bounds x="46.5" y="89.2" width="7" height="9" /></bezel>
diff --git a/src/mame/layout/fidel_acr.lay b/src/mame/layout/fidel_acr.lay
index 9c448b2ab6d..9deb9b09222 100644
--- a/src/mame/layout/fidel_acr.lay
+++ b/src/mame/layout/fidel_acr.lay
@@ -118,56 +118,56 @@
<!-- button panel -->
- <bezel element="static_gray"><bounds x="0" y="20" width="4" height="3" /></bezel>
- <bezel element="static_gray"><bounds x="4.5" y="20" width="4" height="3" /></bezel>
- <bezel element="static_gray"><bounds x="9" y="20" width="4" height="3" /></bezel>
- <bezel element="static_gray"><bounds x="13.5" y="20" width="4" height="3" /></bezel>
- <bezel element="static_gray"><bounds x="0" y="24" width="4" height="3" /></bezel>
- <bezel element="static_gray"><bounds x="4.5" y="24" width="4" height="3" /></bezel>
- <bezel element="static_gray"><bounds x="9" y="24" width="4" height="3" /></bezel>
- <bezel element="static_gray"><bounds x="13.5" y="24" width="4" height="3" /></bezel>
- <bezel element="static_gray"><bounds x="0" y="28" width="4" height="3" /></bezel>
- <bezel element="static_gray"><bounds x="4.5" y="28" width="4" height="3" /></bezel>
- <bezel element="static_gray"><bounds x="9" y="28" width="4" height="3" /></bezel>
- <bezel element="static_gray"><bounds x="13.5" y="28" width="4" height="3" /></bezel>
- <bezel element="static_gray"><bounds x="0" y="32" width="4" height="3" /></bezel>
- <bezel element="static_gray"><bounds x="4.5" y="32" width="4" height="3" /></bezel>
- <bezel element="static_gray"><bounds x="9" y="32" width="4" height="3" /></bezel>
- <bezel element="static_gray"><bounds x="13.5" y="32" width="4" height="3" /></bezel>
-
- <bezel element="text_b1"><bounds x="0.1" y="20.5" width="3.8" height="2" /></bezel>
- <bezel element="text_b2"><bounds x="4.6" y="20.5" width="3.8" height="2" /></bezel>
- <bezel element="text_b3"><bounds x="9.1" y="20.5" width="3.8" height="2" /></bezel>
- <bezel element="text_b4"><bounds x="13.6" y="20.5" width="3.8" height="2" /></bezel>
- <bezel element="text_b5"><bounds x="0.1" y="24.5" width="3.8" height="2" /></bezel>
- <bezel element="text_b6"><bounds x="4.6" y="24.5" width="3.8" height="2" /></bezel>
- <bezel element="text_b7"><bounds x="9.1" y="24.5" width="3.8" height="2" /></bezel>
- <bezel element="text_b8"><bounds x="13.6" y="24.5" width="3.8" height="2" /></bezel>
- <bezel element="text_b9"><bounds x="0.1" y="28.5" width="3.8" height="2" /></bezel>
- <bezel element="text_b10"><bounds x="4.6" y="28.5" width="3.8" height="2" /></bezel>
- <bezel element="text_b11"><bounds x="9.1" y="28.5" width="3.8" height="2" /></bezel>
- <bezel element="text_b12"><bounds x="13.6" y="28.5" width="3.8" height="2" /></bezel>
- <bezel element="text_b13"><bounds x="0.1" y="32.5" width="3.8" height="2" /></bezel>
- <bezel element="text_b14"><bounds x="4.6" y="32.5" width="3.8" height="2" /></bezel>
- <bezel element="text_b15"><bounds x="9.1" y="32.5" width="3.8" height="2" /></bezel>
- <bezel element="text_b16"><bounds x="13.6" y="32.5" width="3.8" height="2" /></bezel>
-
- <bezel element="hl" inputtag="RESET" inputmask="0x01"><bounds x="0" y="20" width="4" height="3" /><color alpha="0.2" /></bezel>
- <bezel element="hl" inputtag="IN.1" inputmask="0x01"><bounds x="4.5" y="20" width="4" height="3" /><color alpha="0.2" /></bezel>
- <bezel element="hl" inputtag="IN.2" inputmask="0x01"><bounds x="9" y="20" width="4" height="3" /><color alpha="0.2" /></bezel>
- <bezel element="hl" inputtag="IN.3" inputmask="0x01"><bounds x="13.5" y="20" width="4" height="3" /><color alpha="0.2" /></bezel>
- <bezel element="hl" inputtag="IN.0" inputmask="0x02"><bounds x="0" y="24" width="4" height="3" /><color alpha="0.2" /></bezel>
- <bezel element="hl" inputtag="IN.1" inputmask="0x02"><bounds x="4.5" y="24" width="4" height="3" /><color alpha="0.2" /></bezel>
- <bezel element="hl" inputtag="IN.2" inputmask="0x02"><bounds x="9" y="24" width="4" height="3" /><color alpha="0.2" /></bezel>
- <bezel element="hl" inputtag="IN.3" inputmask="0x02"><bounds x="13.5" y="24" width="4" height="3" /><color alpha="0.2" /></bezel>
- <bezel element="hl" inputtag="IN.0" inputmask="0x04"><bounds x="0" y="28" width="4" height="3" /><color alpha="0.2" /></bezel>
- <bezel element="hl" inputtag="IN.1" inputmask="0x04"><bounds x="4.5" y="28" width="4" height="3" /><color alpha="0.2" /></bezel>
- <bezel element="hl" inputtag="IN.2" inputmask="0x04"><bounds x="9" y="28" width="4" height="3" /><color alpha="0.2" /></bezel>
- <bezel element="hl" inputtag="IN.3" inputmask="0x04"><bounds x="13.5" y="28" width="4" height="3" /><color alpha="0.2" /></bezel>
- <bezel element="hl" inputtag="IN.0" inputmask="0x08"><bounds x="0" y="32" width="4" height="3" /><color alpha="0.2" /></bezel>
- <bezel element="hl" inputtag="IN.1" inputmask="0x08"><bounds x="4.5" y="32" width="4" height="3" /><color alpha="0.2" /></bezel>
- <bezel element="hl" inputtag="IN.2" inputmask="0x08"><bounds x="9" y="32" width="4" height="3" /><color alpha="0.2" /></bezel>
- <bezel element="hl" inputtag="IN.3" inputmask="0x08"><bounds x="13.5" y="32" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="static_gray"><bounds x="0" y="20" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="4.5" y="20" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="9" y="20" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="13.5" y="20" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="0" y="24" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="4.5" y="24" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="9" y="24" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="13.5" y="24" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="0" y="28" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="4.5" y="28" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="9" y="28" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="13.5" y="28" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="0" y="32" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="4.5" y="32" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="9" y="32" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="13.5" y="32" width="4" height="3.5" /></bezel>
+
+ <bezel element="text_b1"><bounds x="0.1" y="20.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b2"><bounds x="4.6" y="20.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b3"><bounds x="9.1" y="20.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b4"><bounds x="13.6" y="20.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b5"><bounds x="0.1" y="24.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b6"><bounds x="4.6" y="24.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b7"><bounds x="9.1" y="24.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b8"><bounds x="13.6" y="24.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b9"><bounds x="0.1" y="28.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b10"><bounds x="4.6" y="28.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b11"><bounds x="9.1" y="28.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b12"><bounds x="13.6" y="28.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b13"><bounds x="0.1" y="32.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b14"><bounds x="4.6" y="32.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b15"><bounds x="9.1" y="32.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b16"><bounds x="13.6" y="32.75" width="3.8" height="2" /></bezel>
+
+ <bezel element="hl" inputtag="RESET" inputmask="0x01"><bounds x="0" y="20" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x01"><bounds x="4.5" y="20" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x01"><bounds x="9" y="20" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x01"><bounds x="13.5" y="20" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x02"><bounds x="0" y="24" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x02"><bounds x="4.5" y="24" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x02"><bounds x="9" y="24" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x02"><bounds x="13.5" y="24" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x04"><bounds x="0" y="28" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x04"><bounds x="4.5" y="28" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x04"><bounds x="9" y="28" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x04"><bounds x="13.5" y="28" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x08"><bounds x="0" y="32" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x08"><bounds x="4.5" y="32" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x08"><bounds x="9" y="32" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x08"><bounds x="13.5" y="32" width="4" height="3.5" /><color alpha="0.2" /></bezel>
</view>
</mamelayout>
diff --git a/src/mame/layout/fidel_as12.lay b/src/mame/layout/fidel_as12.lay
index 4dc77023405..09bb2259205 100644
--- a/src/mame/layout/fidel_as12.lay
+++ b/src/mame/layout/fidel_as12.lay
@@ -96,12 +96,12 @@
<text string="H"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
- <element name="text_l3"><text string="&#x265a;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_l4"><text string="&#x265b;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_l5"><text string="&#x265c;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_l6"><text string="&#x265d;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_l7"><text string="&#x265e;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_l8"><text string="&#x265f;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_l3"><text string="[K]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_l4"><text string="[Q]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_l5"><text string="[R]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_l6"><text string="[B]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_l7"><text string="[N]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_l8"><text string="[P]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_r1"><text string="RE"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_r2"><text string="CL"><color red="0.81" green="0.8" blue="0.79" /></text></element>
@@ -339,12 +339,12 @@
<!-- right side -->
- <bezel element="text_l3"><bounds x="90.8" y="31.25" width="4" height="4" /></bezel>
- <bezel element="text_l4"><bounds x="90.8" y="37.75" width="4" height="4" /></bezel>
- <bezel element="text_l5"><bounds x="90.8" y="44.25" width="4" height="4" /></bezel>
- <bezel element="text_l6"><bounds x="90.8" y="50.75" width="4" height="4" /></bezel>
- <bezel element="text_l7"><bounds x="90.8" y="57.25" width="4" height="4" /></bezel>
- <bezel element="text_l8"><bounds x="90.8" y="63.75" width="4" height="4" /></bezel>
+ <bezel element="text_l3"><bounds x="90.6" y="32.4" width="4" height="2" /></bezel>
+ <bezel element="text_l4"><bounds x="90.6" y="38.9" width="4" height="2" /></bezel>
+ <bezel element="text_l5"><bounds x="90.6" y="45.4" width="4" height="2" /></bezel>
+ <bezel element="text_l6"><bounds x="90.6" y="51.9" width="4" height="2" /></bezel>
+ <bezel element="text_l7"><bounds x="90.6" y="58.4" width="4" height="2" /></bezel>
+ <bezel element="text_l8"><bounds x="90.6" y="64.9" width="4" height="2" /></bezel>
<bezel element="text_r1"><bounds x="93.25" y="19.0" width="4" height="2" /></bezel>
<bezel element="text_r2"><bounds x="93.25" y="25.5" width="4" height="2" /></bezel>
diff --git a/src/mame/layout/fidel_cc1.lay b/src/mame/layout/fidel_cc1.lay
new file mode 100644
index 00000000000..718cbd3da8a
--- /dev/null
+++ b/src/mame/layout/fidel_cc1.lay
@@ -0,0 +1,145 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+<!-- define elements -->
+
+ <element name="static_gray"><rect><color red="0.6" green="0.6" blue="0.6" /></rect></element>
+
+ <element name="digit" defstate="0">
+ <led7seg><color red="1.0" green="0.1" blue="0.15" /></led7seg>
+ </element>
+
+ <element name="led" defstate="0">
+ <disk state="1"><color red="1.0" green="0.1" blue="0.15" /></disk>
+ <disk state="0"><color red="0.1" green="0.01" blue="0.015" /></disk>
+ </element>
+
+ <element name="hl" defstate="0">
+ <text string=" ">
+ <bounds x="0.0" y="0.0" width="1.0" height="1.0" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </text>
+ <rect state="1">
+ <bounds x="0.0" y="0.0" width="1.0" height="1.0" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </rect>
+ </element>
+
+ <element name="text_check"><text string="CHECK"><color red="0.6" green="0.6" blue="0.6" /></text></element>
+ <element name="text_lose"><text string="I LOSE"><color red="0.6" green="0.6" blue="0.6" /></text></element>
+ <element name="text_from"><text string="FROM"><color red="0.6" green="0.6" blue="0.6" /></text></element>
+ <element name="text_to"><text string="TO"><color red="0.6" green="0.6" blue="0.6" /></text></element>
+
+ <element name="text_b1">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="RE"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b2">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="DM"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b3">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="CL"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b4">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="EN"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b5">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="1A"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b6">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="2b"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b7">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="3C"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b8">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="4d"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b9">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="5E"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b10">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="6F"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b11">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="7g"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b12">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="8H"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="-0.5" right="18" top="7.7" bottom="32" />
+
+ <!-- 7segs/leds -->
+
+ <bezel element="text_check"><bounds x="1" y="8.2" width="8" height="2" /></bezel>
+ <bezel element="text_lose"><bounds x="10.5" y="8.2" width="8" height="2" /></bezel>
+ <bezel name="4.a" element="led"><bounds x="0" y="8.5" width="1.5" height="1.5" /></bezel>
+ <bezel name="5.a" element="led"><bounds x="9.5" y="8.5" width="1.5" height="1.5" /></bezel>
+
+ <bezel element="text_from"><bounds x="0" y="17.2" width="8" height="2" /></bezel>
+ <bezel element="text_to"><bounds x="9.5" y="17.2" width="8" height="2" /></bezel>
+
+ <bezel name="digit0" element="digit"><bounds x="0" y="11" width="4" height="6" /></bezel>
+ <bezel name="digit1" element="digit"><bounds x="4" y="11" width="4" height="6" /></bezel>
+ <bezel name="digit2" element="digit"><bounds x="9.5" y="11" width="4" height="6" /></bezel>
+ <bezel name="digit3" element="digit"><bounds x="13.5" y="11" width="4" height="6" /></bezel>
+
+ <!-- button panel -->
+
+ <bezel element="static_gray"><bounds x="0" y="20" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="4.5" y="20" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="9" y="20" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="13.5" y="20" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="0" y="24" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="4.5" y="24" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="9" y="24" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="13.5" y="24" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="0" y="28" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="4.5" y="28" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="9" y="28" width="4" height="3.5" /></bezel>
+ <bezel element="static_gray"><bounds x="13.5" y="28" width="4" height="3.5" /></bezel>
+
+ <bezel element="text_b1"><bounds x="0.1" y="20.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b2"><bounds x="4.6" y="20.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b3"><bounds x="9.1" y="20.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b4"><bounds x="13.6" y="20.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b5"><bounds x="0.1" y="24.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b6"><bounds x="4.6" y="24.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b7"><bounds x="9.1" y="24.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b8"><bounds x="13.6" y="24.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b9"><bounds x="0.1" y="28.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b10"><bounds x="4.6" y="28.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b11"><bounds x="9.1" y="28.75" width="3.8" height="2" /></bezel>
+ <bezel element="text_b12"><bounds x="13.6" y="28.75" width="3.8" height="2" /></bezel>
+
+ <bezel element="hl" inputtag="RESET" inputmask="0x01"><bounds x="0" y="20" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x01"><bounds x="4.5" y="20" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x02"><bounds x="9" y="20" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x04"><bounds x="13.5" y="20" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x01"><bounds x="0" y="24" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x02"><bounds x="4.5" y="24" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x04"><bounds x="9" y="24" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x08"><bounds x="13.5" y="24" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x10"><bounds x="0" y="28" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x20"><bounds x="4.5" y="28" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x40"><bounds x="9" y="28" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x80"><bounds x="13.5" y="28" width="4" height="3.5" /><color alpha="0.2" /></bezel>
+
+ </view>
+</mamelayout>
diff --git a/src/mame/layout/fidel_chesster.lay b/src/mame/layout/fidel_chesster.lay
index 1927d9d7e6a..28489afddd9 100644
--- a/src/mame/layout/fidel_chesster.lay
+++ b/src/mame/layout/fidel_chesster.lay
@@ -179,36 +179,36 @@
<element name="text_king">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265a;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_queen">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265b;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_rook">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265c;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_bishop">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265d;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_knight">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265e;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_pawn">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265f;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<!-- build screen -->
<view name="Internal Layout">
- <bounds left="-7" right="93" top="-2" bottom="103" />
+ <bounds left="-7" right="93" top="-2" bottom="102.5" />
- <bezel element="white"><bounds x="-7.5" y="-2.5" width="101" height="106" /></bezel>
+ <bezel element="white"><bounds x="-7.5" y="-2.5" width="101" height="105.5" /></bezel>
<!-- chessboard coords -->
@@ -388,12 +388,12 @@
<bezel element="text_u5"><bounds x="64" y="96.3" width="10" height="1.8" /></bezel>
<bezel element="text_u6"><bounds x="73" y="96.3" width="10" height="1.8" /></bezel>
- <bezel element="text_king"><bounds x="3" y="98" width="10" height="4" /></bezel>
- <bezel element="text_queen"><bounds x="12" y="98" width="10" height="4" /></bezel>
- <bezel element="text_rook"><bounds x="21" y="98" width="10" height="4" /></bezel>
- <bezel element="text_bishop"><bounds x="55" y="98" width="10" height="4" /></bezel>
- <bezel element="text_knight"><bounds x="64" y="98" width="10" height="4" /></bezel>
- <bezel element="text_pawn"><bounds x="73" y="98" width="10" height="4" /></bezel>
+ <bezel element="text_king"><bounds x="3" y="98.5" width="10" height="2.65" /></bezel>
+ <bezel element="text_queen"><bounds x="12" y="98.5" width="10" height="2.65" /></bezel>
+ <bezel element="text_rook"><bounds x="21" y="98.5" width="10" height="2.65" /></bezel>
+ <bezel element="text_bishop"><bounds x="55" y="98.5" width="10" height="2.65" /></bezel>
+ <bezel element="text_knight"><bounds x="64" y="98.5" width="10" height="2.65" /></bezel>
+ <bezel element="text_pawn"><bounds x="73" y="98.5" width="10" height="2.65" /></bezel>
<bezel element="disk_black"><bounds x="6" y="92" width="4" height="4" /></bezel>
<bezel element="disk_black"><bounds x="15" y="92" width="4" height="4" /></bezel>
diff --git a/src/mame/layout/fidel_csc.lay b/src/mame/layout/fidel_csc.lay
index cf28d647df5..31fa291eaa4 100644
--- a/src/mame/layout/fidel_csc.lay
+++ b/src/mame/layout/fidel_csc.lay
@@ -126,27 +126,27 @@
</element>
<element name="text_king">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x265a;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_queen">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x265b;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_rook">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x265c;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_bishop">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x265d;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_knight">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x265e;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_pawn">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x265f;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_tm">
@@ -419,12 +419,12 @@
<bezel element="text_re"><bounds x="88.2" y="15.2" width="5" height="3" /></bezel>
<bezel element="text_cl"><bounds x="88.2" y="24" width="5" height="3" /></bezel>
- <bezel element="text_king"><bounds x="88.2" y="32.1" width="5" height="4" /></bezel>
- <bezel element="text_queen"><bounds x="88.2" y="40.9" width="5" height="4" /></bezel>
- <bezel element="text_bishop"><bounds x="88.2" y="49.7" width="5" height="4" /></bezel>
- <bezel element="text_knight"><bounds x="88.2" y="58.5" width="5" height="4" /></bezel>
- <bezel element="text_rook"><bounds x="88.2" y="67.3" width="5" height="4" /></bezel>
- <bezel element="text_pawn"><bounds x="88.2" y="76.1" width="5" height="4" /></bezel>
+ <bezel element="text_king"><bounds x="88.2" y="32.8" width="5" height="3" /></bezel>
+ <bezel element="text_queen"><bounds x="88.2" y="41.6" width="5" height="3" /></bezel>
+ <bezel element="text_bishop"><bounds x="88.2" y="50.4" width="5" height="3" /></bezel>
+ <bezel element="text_knight"><bounds x="88.2" y="59.2" width="5" height="3" /></bezel>
+ <bezel element="text_rook"><bounds x="88.2" y="68" width="5" height="3" /></bezel>
+ <bezel element="text_pawn"><bounds x="88.2" y="76.8" width="5" height="3" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x80"><bounds x="87" y="13" width="7.4" height="7.4" /><color alpha="0.3" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x40"><bounds x="87" y="21.8" width="7.4" height="7.4" /><color alpha="0.3" /></bezel>
diff --git a/src/mame/layout/fidel_des.lay b/src/mame/layout/fidel_des.lay
index 238b0b5562d..1fbe3d751d2 100644
--- a/src/mame/layout/fidel_des.lay
+++ b/src/mame/layout/fidel_des.lay
@@ -189,27 +189,27 @@
<element name="text_tl7">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265a;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_tl6">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265b;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_tl5">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265c;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_tl4">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265d;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_tl3">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265e;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_tl2">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265f;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
@@ -407,12 +407,12 @@
<bezel element="white"><bounds x="87.3" y="64.3" width="7.4" height="3.4" /></bezel>
<bezel element="white"><bounds x="87.3" y="73.3" width="7.4" height="3.4" /></bezel>
- <bezel element="text_tl7"><bounds x="87" y="11.6" width="6" height="3.5" /></bezel>
- <bezel element="text_tl6"><bounds x="87" y="21.6" width="6" height="3.5" /></bezel>
- <bezel element="text_tl5"><bounds x="87" y="31.6" width="6" height="3.5" /></bezel>
- <bezel element="text_tl4"><bounds x="87" y="41.6" width="6" height="3.5" /></bezel>
- <bezel element="text_tl3"><bounds x="87" y="51.6" width="6" height="3.5" /></bezel>
- <bezel element="text_tl2"><bounds x="87" y="61.6" width="6" height="3.5" /></bezel>
+ <bezel element="text_tl7"><bounds x="87" y="12" width="6" height="2.5" /></bezel>
+ <bezel element="text_tl6"><bounds x="87" y="22" width="6" height="2.5" /></bezel>
+ <bezel element="text_tl5"><bounds x="87" y="32" width="6" height="2.5" /></bezel>
+ <bezel element="text_tl4"><bounds x="87" y="42" width="6" height="2.5" /></bezel>
+ <bezel element="text_tl3"><bounds x="87" y="52" width="6" height="2.5" /></bezel>
+ <bezel element="text_tl2"><bounds x="87" y="62" width="6" height="2.5" /></bezel>
<bezel element="disk_black"><bounds x="87" y="5" width="6" height="6" /></bezel>
<bezel element="disk_black"><bounds x="87" y="15" width="6" height="6" /></bezel>
diff --git a/src/mame/layout/fidel_desdis.lay b/src/mame/layout/fidel_desdis.lay
index 84b93b034fc..3ebeaaea932 100644
--- a/src/mame/layout/fidel_desdis.lay
+++ b/src/mame/layout/fidel_desdis.lay
@@ -191,36 +191,36 @@
<element name="text_king">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265a;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_queen">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265b;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_rook">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265c;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_bishop">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265d;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_knight">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265e;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_pawn">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265f;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<!-- build screen -->
<view name="Internal Layout">
- <bounds left="-7" right="93" top="-2" bottom="103" />
+ <bounds left="-7" right="93" top="-2" bottom="102.5" />
- <bezel element="white"><bounds x="-7.5" y="-2.5" width="101" height="106" /></bezel>
+ <bezel element="white"><bounds x="-7.5" y="-2.5" width="101" height="105.5" /></bezel>
<!-- chessboard coords -->
@@ -400,12 +400,12 @@
<bezel element="text_u5"><bounds x="64" y="96.3" width="10" height="1.8" /></bezel>
<bezel element="text_u6"><bounds x="73" y="96.3" width="10" height="1.8" /></bezel>
- <bezel element="text_king"><bounds x="3" y="98" width="10" height="4" /></bezel>
- <bezel element="text_queen"><bounds x="12" y="98" width="10" height="4" /></bezel>
- <bezel element="text_rook"><bounds x="21" y="98" width="10" height="4" /></bezel>
- <bezel element="text_bishop"><bounds x="55" y="98" width="10" height="4" /></bezel>
- <bezel element="text_knight"><bounds x="64" y="98" width="10" height="4" /></bezel>
- <bezel element="text_pawn"><bounds x="73" y="98" width="10" height="4" /></bezel>
+ <bezel element="text_king"><bounds x="3" y="98.5" width="10" height="2.65" /></bezel>
+ <bezel element="text_queen"><bounds x="12" y="98.5" width="10" height="2.65" /></bezel>
+ <bezel element="text_rook"><bounds x="21" y="98.5" width="10" height="2.65" /></bezel>
+ <bezel element="text_bishop"><bounds x="55" y="98.5" width="10" height="2.65" /></bezel>
+ <bezel element="text_knight"><bounds x="64" y="98.5" width="10" height="2.65" /></bezel>
+ <bezel element="text_pawn"><bounds x="73" y="98.5" width="10" height="2.65" /></bezel>
<bezel element="disk_black"><bounds x="6" y="92" width="4" height="4" /></bezel>
<bezel element="disk_black"><bounds x="15" y="92" width="4" height="4" /></bezel>
diff --git a/src/mame/layout/fidel_desdis_68kg.lay b/src/mame/layout/fidel_desdis_68kg.lay
index e3f2d8cdc9b..8929b48c261 100644
--- a/src/mame/layout/fidel_desdis_68kg.lay
+++ b/src/mame/layout/fidel_desdis_68kg.lay
@@ -195,36 +195,36 @@
<element name="text_king">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265a;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_queen">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265b;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_rook">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265c;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_bishop">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265d;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_knight">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265e;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_pawn">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265f;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<!-- build screen -->
<view name="Internal Layout">
- <bounds left="-7" right="93" top="-2" bottom="103" />
+ <bounds left="-7" right="93" top="-2" bottom="102.5" />
- <bezel element="white"><bounds x="-7.5" y="-2.5" width="101" height="106" /></bezel>
+ <bezel element="white"><bounds x="-7.5" y="-2.5" width="101" height="105.5" /></bezel>
<!-- chessboard coords -->
@@ -404,12 +404,12 @@
<bezel element="text_u5"><bounds x="64" y="96.3" width="10" height="1.8" /></bezel>
<bezel element="text_u6"><bounds x="73" y="96.3" width="10" height="1.8" /></bezel>
- <bezel element="text_king"><bounds x="3" y="98" width="10" height="4" /></bezel>
- <bezel element="text_queen"><bounds x="12" y="98" width="10" height="4" /></bezel>
- <bezel element="text_rook"><bounds x="21" y="98" width="10" height="4" /></bezel>
- <bezel element="text_bishop"><bounds x="55" y="98" width="10" height="4" /></bezel>
- <bezel element="text_knight"><bounds x="64" y="98" width="10" height="4" /></bezel>
- <bezel element="text_pawn"><bounds x="73" y="98" width="10" height="4" /></bezel>
+ <bezel element="text_king"><bounds x="3" y="98.5" width="10" height="2.65" /></bezel>
+ <bezel element="text_queen"><bounds x="12" y="98.5" width="10" height="2.65" /></bezel>
+ <bezel element="text_rook"><bounds x="21" y="98.5" width="10" height="2.65" /></bezel>
+ <bezel element="text_bishop"><bounds x="55" y="98.5" width="10" height="2.65" /></bezel>
+ <bezel element="text_knight"><bounds x="64" y="98.5" width="10" height="2.65" /></bezel>
+ <bezel element="text_pawn"><bounds x="73" y="98.5" width="10" height="2.65" /></bezel>
<bezel element="disk_black"><bounds x="6" y="92" width="4" height="4" /></bezel>
<bezel element="disk_black"><bounds x="15" y="92" width="4" height="4" /></bezel>
diff --git a/src/mame/layout/fidel_desdis_68kr.lay b/src/mame/layout/fidel_desdis_68kr.lay
index d07f864435a..7d1a93d8b0e 100644
--- a/src/mame/layout/fidel_desdis_68kr.lay
+++ b/src/mame/layout/fidel_desdis_68kr.lay
@@ -190,36 +190,36 @@
<element name="text_king">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265a;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_queen">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265b;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_rook">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265c;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_bishop">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265d;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_knight">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265e;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_pawn">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265f;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<!-- build screen -->
<view name="Internal Layout">
- <bounds left="-7" right="93" top="-2" bottom="103" />
+ <bounds left="-7" right="93" top="-2" bottom="102.5" />
- <bezel element="white"><bounds x="-7.5" y="-2.5" width="101" height="106" /></bezel>
+ <bezel element="white"><bounds x="-7.5" y="-2.5" width="101" height="105.5" /></bezel>
<!-- chessboard coords -->
@@ -399,12 +399,12 @@
<bezel element="text_u5"><bounds x="64" y="96.3" width="10" height="1.8" /></bezel>
<bezel element="text_u6"><bounds x="73" y="96.3" width="10" height="1.8" /></bezel>
- <bezel element="text_king"><bounds x="3" y="98" width="10" height="4" /></bezel>
- <bezel element="text_queen"><bounds x="12" y="98" width="10" height="4" /></bezel>
- <bezel element="text_rook"><bounds x="21" y="98" width="10" height="4" /></bezel>
- <bezel element="text_bishop"><bounds x="55" y="98" width="10" height="4" /></bezel>
- <bezel element="text_knight"><bounds x="64" y="98" width="10" height="4" /></bezel>
- <bezel element="text_pawn"><bounds x="73" y="98" width="10" height="4" /></bezel>
+ <bezel element="text_king"><bounds x="3" y="98.5" width="10" height="2.65" /></bezel>
+ <bezel element="text_queen"><bounds x="12" y="98.5" width="10" height="2.65" /></bezel>
+ <bezel element="text_rook"><bounds x="21" y="98.5" width="10" height="2.65" /></bezel>
+ <bezel element="text_bishop"><bounds x="55" y="98.5" width="10" height="2.65" /></bezel>
+ <bezel element="text_knight"><bounds x="64" y="98.5" width="10" height="2.65" /></bezel>
+ <bezel element="text_pawn"><bounds x="73" y="98.5" width="10" height="2.65" /></bezel>
<bezel element="disk_black"><bounds x="6" y="92" width="4" height="4" /></bezel>
<bezel element="disk_black"><bounds x="15" y="92" width="4" height="4" /></bezel>
diff --git a/src/mame/layout/fidel_eag.lay b/src/mame/layout/fidel_eag.lay
index 1ed8c3879c8..7583ea36c32 100644
--- a/src/mame/layout/fidel_eag.lay
+++ b/src/mame/layout/fidel_eag.lay
@@ -111,12 +111,12 @@
<text string="H"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
- <element name="text_r11"><text string="&#x265a;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_r21"><text string="&#x265b;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_r31"><text string="&#x265c;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_r41"><text string="&#x265d;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_r51"><text string="&#x265e;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_r61"><text string="&#x265f;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_r11"><text string="[K]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_r21"><text string="[Q]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_r31"><text string="[R]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_r41"><text string="[B]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_r51"><text string="[N]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_r61"><text string="[P]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_r12"><text string="PB" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_r22"><text string="PV" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element>
@@ -375,21 +375,21 @@
<!-- right side -->
- <bezel element="text_r11"><bounds x="91.5" y="29.3" width="2.5" height="2" /></bezel>
- <bezel element="text_r21"><bounds x="91.5" y="31.8" width="2.5" height="2" /></bezel>
- <bezel element="text_r31"><bounds x="91.5" y="34.3" width="2.5" height="2" /></bezel>
- <bezel element="text_r41"><bounds x="91.5" y="36.8" width="2.5" height="2" /></bezel>
- <bezel element="text_r51"><bounds x="91.5" y="39.3" width="2.5" height="2" /></bezel>
- <bezel element="text_r61"><bounds x="91.5" y="41.8" width="2.5" height="2" /></bezel>
-
- <bezel element="text_r12"><bounds x="96.8" y="29.75" width="10" height="1.5" /></bezel>
- <bezel element="text_r22"><bounds x="96.8" y="32.25" width="10" height="1.5" /></bezel>
- <bezel element="text_r32"><bounds x="96.8" y="34.75" width="10" height="1.5" /></bezel>
- <bezel element="text_r42"><bounds x="96.8" y="37.25" width="10" height="1.5" /></bezel>
- <bezel element="text_r52"><bounds x="96.8" y="39.75" width="10" height="1.5" /></bezel>
- <bezel element="text_r62"><bounds x="96.8" y="42.25" width="10" height="1.5" /></bezel>
- <bezel element="text_r72"><bounds x="96.8" y="44.75" width="10" height="1.5" /></bezel>
- <bezel element="text_r82"><bounds x="96.8" y="47.25" width="10" height="1.5" /></bezel>
+ <bezel element="text_r11"><bounds x="91.6" y="29.65" width="2.5" height="1.5" /></bezel>
+ <bezel element="text_r21"><bounds x="91.6" y="32.15" width="2.5" height="1.5" /></bezel>
+ <bezel element="text_r31"><bounds x="91.6" y="34.65" width="2.5" height="1.5" /></bezel>
+ <bezel element="text_r41"><bounds x="91.6" y="37.15" width="2.5" height="1.5" /></bezel>
+ <bezel element="text_r51"><bounds x="91.6" y="39.65" width="2.5" height="1.5" /></bezel>
+ <bezel element="text_r61"><bounds x="91.6" y="42.15" width="2.5" height="1.5" /></bezel>
+
+ <bezel element="text_r12"><bounds x="96.8" y="29.65" width="10" height="1.5" /></bezel>
+ <bezel element="text_r22"><bounds x="96.8" y="32.15" width="10" height="1.5" /></bezel>
+ <bezel element="text_r32"><bounds x="96.8" y="34.65" width="10" height="1.5" /></bezel>
+ <bezel element="text_r42"><bounds x="96.8" y="37.15" width="10" height="1.5" /></bezel>
+ <bezel element="text_r52"><bounds x="96.8" y="39.65" width="10" height="1.5" /></bezel>
+ <bezel element="text_r62"><bounds x="96.8" y="42.15" width="10" height="1.5" /></bezel>
+ <bezel element="text_r72"><bounds x="96.8" y="44.65" width="10" height="1.5" /></bezel>
+ <bezel element="text_r82"><bounds x="96.8" y="47.15" width="10" height="1.5" /></bezel>
<bezel element="text_r92"><bounds x="96.8" y="49.5" width="10" height="1.5" /></bezel>
<bezel element="text_r93"><bounds x="96.8" y="51" width="10" height="1.5" /></bezel>
@@ -411,8 +411,8 @@
<bezel element="bt" inputtag="IN.8" inputmask="0x01"><bounds x="94" y="47" width="2" height="2" /></bezel>
<bezel element="bt" inputtag="IN.2" inputmask="0x100"><bounds x="94" y="49.5" width="2" height="2" /></bezel>
- <bezel element="text_rx2"><bounds x="96.8" y="79.75" width="10" height="1.5" /></bezel>
- <bezel element="text_ry2"><bounds x="96.8" y="82.25" width="10" height="1.5" /></bezel>
+ <bezel element="text_rx2"><bounds x="96.8" y="79.65" width="10" height="1.5" /></bezel>
+ <bezel element="text_ry2"><bounds x="96.8" y="82.15" width="10" height="1.5" /></bezel>
<bezel element="text_rx1"><bounds x="88" y="78.75" width="6" height="1" /></bezel>
<bezel element="text_ry1"><bounds x="88" y="81.25" width="5.5" height="1" /></bezel>
diff --git a/src/mame/layout/fidel_eag_68k.lay b/src/mame/layout/fidel_eag_68k.lay
index 938daaa40f4..6e3555b4e1a 100644
--- a/src/mame/layout/fidel_eag_68k.lay
+++ b/src/mame/layout/fidel_eag_68k.lay
@@ -111,12 +111,12 @@
<text string="H"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
- <element name="text_r11"><text string="&#x265a;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_r21"><text string="&#x265b;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_r31"><text string="&#x265c;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_r41"><text string="&#x265d;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_r51"><text string="&#x265e;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_r61"><text string="&#x265f;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_r11"><text string="[K]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_r21"><text string="[Q]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_r31"><text string="[R]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_r41"><text string="[B]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_r51"><text string="[N]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_r61"><text string="[P]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_r12"><text string="PB" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_r22"><text string="PV" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element>
@@ -375,21 +375,21 @@
<!-- right side -->
- <bezel element="text_r11"><bounds x="91.5" y="29.3" width="2.5" height="2" /></bezel>
- <bezel element="text_r21"><bounds x="91.5" y="31.8" width="2.5" height="2" /></bezel>
- <bezel element="text_r31"><bounds x="91.5" y="34.3" width="2.5" height="2" /></bezel>
- <bezel element="text_r41"><bounds x="91.5" y="36.8" width="2.5" height="2" /></bezel>
- <bezel element="text_r51"><bounds x="91.5" y="39.3" width="2.5" height="2" /></bezel>
- <bezel element="text_r61"><bounds x="91.5" y="41.8" width="2.5" height="2" /></bezel>
-
- <bezel element="text_r12"><bounds x="96.8" y="29.75" width="10" height="1.5" /></bezel>
- <bezel element="text_r22"><bounds x="96.8" y="32.25" width="10" height="1.5" /></bezel>
- <bezel element="text_r32"><bounds x="96.8" y="34.75" width="10" height="1.5" /></bezel>
- <bezel element="text_r42"><bounds x="96.8" y="37.25" width="10" height="1.5" /></bezel>
- <bezel element="text_r52"><bounds x="96.8" y="39.75" width="10" height="1.5" /></bezel>
- <bezel element="text_r62"><bounds x="96.8" y="42.25" width="10" height="1.5" /></bezel>
- <bezel element="text_r72"><bounds x="96.8" y="44.75" width="10" height="1.5" /></bezel>
- <bezel element="text_r82"><bounds x="96.8" y="47.25" width="10" height="1.5" /></bezel>
+ <bezel element="text_r11"><bounds x="91.6" y="29.65" width="2.5" height="1.5" /></bezel>
+ <bezel element="text_r21"><bounds x="91.6" y="32.15" width="2.5" height="1.5" /></bezel>
+ <bezel element="text_r31"><bounds x="91.6" y="34.65" width="2.5" height="1.5" /></bezel>
+ <bezel element="text_r41"><bounds x="91.6" y="37.15" width="2.5" height="1.5" /></bezel>
+ <bezel element="text_r51"><bounds x="91.6" y="39.65" width="2.5" height="1.5" /></bezel>
+ <bezel element="text_r61"><bounds x="91.6" y="42.15" width="2.5" height="1.5" /></bezel>
+
+ <bezel element="text_r12"><bounds x="96.8" y="29.65" width="10" height="1.5" /></bezel>
+ <bezel element="text_r22"><bounds x="96.8" y="32.15" width="10" height="1.5" /></bezel>
+ <bezel element="text_r32"><bounds x="96.8" y="34.65" width="10" height="1.5" /></bezel>
+ <bezel element="text_r42"><bounds x="96.8" y="37.15" width="10" height="1.5" /></bezel>
+ <bezel element="text_r52"><bounds x="96.8" y="39.65" width="10" height="1.5" /></bezel>
+ <bezel element="text_r62"><bounds x="96.8" y="42.15" width="10" height="1.5" /></bezel>
+ <bezel element="text_r72"><bounds x="96.8" y="44.65" width="10" height="1.5" /></bezel>
+ <bezel element="text_r82"><bounds x="96.8" y="47.15" width="10" height="1.5" /></bezel>
<bezel element="text_r92"><bounds x="96.8" y="49.5" width="10" height="1.5" /></bezel>
<bezel element="text_r93"><bounds x="96.8" y="51" width="10" height="1.5" /></bezel>
@@ -411,8 +411,8 @@
<bezel element="bt" inputtag="IN.8" inputmask="0x80"><bounds x="94" y="47" width="2" height="2" /></bezel>
<bezel element="bt" inputtag="IN.2" inputmask="0x100"><bounds x="94" y="49.5" width="2" height="2" /></bezel>
- <bezel element="text_rx2"><bounds x="96.8" y="79.75" width="10" height="1.5" /></bezel>
- <bezel element="text_ry2"><bounds x="96.8" y="82.25" width="10" height="1.5" /></bezel>
+ <bezel element="text_rx2"><bounds x="96.8" y="79.65" width="10" height="1.5" /></bezel>
+ <bezel element="text_ry2"><bounds x="96.8" y="82.15" width="10" height="1.5" /></bezel>
<bezel element="text_rx1"><bounds x="88" y="78.75" width="6" height="1" /></bezel>
<bezel element="text_ry1"><bounds x="88" y="81.25" width="5.5" height="1" /></bezel>
diff --git a/src/mame/layout/fidel_eas.lay b/src/mame/layout/fidel_eas.lay
index 57bc6dc6f89..ed98c3a7675 100644
--- a/src/mame/layout/fidel_eas.lay
+++ b/src/mame/layout/fidel_eas.lay
@@ -102,12 +102,12 @@
<text string="H"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
- <element name="text_p1"><text string="&#x265a;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_p2"><text string="&#x265b;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_p3"><text string="&#x265c;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_p4"><text string="&#x265d;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_p5"><text string="&#x265e;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_p6"><text string="&#x265f;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_p1"><text string="[K]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_p2"><text string="[Q]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_p3"><text string="[R]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_p4"><text string="[B]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_p5"><text string="[N]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_p6"><text string="[P]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_b1"><text string="GAME"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_b1a"><text string="CONTROL"><color red="0.81" green="0.8" blue="0.79" /></text></element>
@@ -373,12 +373,12 @@
<bezel element="but" inputtag="IN.1" inputmask="0x100"><bounds x="65.1" y="94" width="1.5" height="1.5" /></bezel>
<bezel element="but" inputtag="IN.2" inputmask="0x100"><bounds x="68.1" y="94" width="1.5" height="1.5" /></bezel>
- <bezel element="text_p1"><bounds x="41" y="91.3" width="3.5" height="2.6" /></bezel>
- <bezel element="text_p2"><bounds x="44" y="91.3" width="3.5" height="2.6" /></bezel>
- <bezel element="text_p3"><bounds x="47" y="91.3" width="3.5" height="2.6" /></bezel>
- <bezel element="text_p4"><bounds x="50" y="91.3" width="3.5" height="2.6" /></bezel>
- <bezel element="text_p5"><bounds x="53" y="91.3" width="3.5" height="2.6" /></bezel>
- <bezel element="text_p6"><bounds x="56" y="91.3" width="3.5" height="2.6" /></bezel>
+ <bezel element="text_p1"><bounds x="41" y="92.1" width="3.5" height="1.5" /></bezel>
+ <bezel element="text_p2"><bounds x="44" y="92.1" width="3.5" height="1.5" /></bezel>
+ <bezel element="text_p3"><bounds x="47" y="92.1" width="3.5" height="1.5" /></bezel>
+ <bezel element="text_p4"><bounds x="50" y="92.1" width="3.5" height="1.5" /></bezel>
+ <bezel element="text_p5"><bounds x="53" y="92.1" width="3.5" height="1.5" /></bezel>
+ <bezel element="text_p6"><bounds x="56" y="92.1" width="3.5" height="1.5" /></bezel>
<bezel element="text_b1"><bounds x="30.9" y="95.8" width="7.5" height="1.5" /></bezel>
<bezel element="text_b1a"><bounds x="30.9" y="97.3" width="7.5" height="1.5" /></bezel>
diff --git a/src/mame/layout/fidel_eas_priv.lay b/src/mame/layout/fidel_eas_priv.lay
index bef26febedf..7d67442371f 100644
--- a/src/mame/layout/fidel_eas_priv.lay
+++ b/src/mame/layout/fidel_eas_priv.lay
@@ -55,12 +55,12 @@
<element name="text_g"><text string="G"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_h"><text string="H"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_p1"><text string="&#x265a;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_p2"><text string="&#x265b;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_p3"><text string="&#x265c;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_p4"><text string="&#x265d;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_p5"><text string="&#x265e;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_p6"><text string="&#x265f;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_p1"><text string="[K]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_p2"><text string="[Q]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_p3"><text string="[R]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_p4"><text string="[B]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_p5"><text string="[N]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_p6"><text string="[P]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_b1"><text string="GAME"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_b1a"><text string="CONTROL"><color red="0.81" green="0.8" blue="0.79" /></text></element>
@@ -388,16 +388,16 @@
<bezel element="but" inputtag="IN.1" inputmask="0x100"><bounds x="122.1" y="66.7" width="1.5" height="1.5" /></bezel>
<bezel element="but" inputtag="IN.2" inputmask="0x100"><bounds x="125.1" y="66.7" width="1.5" height="1.5" /></bezel>
- <bezel element="text_p1"><bounds x="100.1" y="64" width="3.5" height="2.6" /></bezel>
- <bezel element="text_p2"><bounds x="103.1" y="64" width="3.5" height="2.6" /></bezel>
- <bezel element="text_p3"><bounds x="106.1" y="64" width="3.5" height="2.6" /></bezel>
- <bezel element="text_p4"><bounds x="109.1" y="64" width="3.5" height="2.6" /></bezel>
- <bezel element="text_p5"><bounds x="112.1" y="64" width="3.5" height="2.6" /></bezel>
- <bezel element="text_p6"><bounds x="115.1" y="64" width="3.5" height="2.6" /></bezel>
+ <bezel element="text_p1"><bounds x="100.1" y="64.5" width="3.5" height="1.5" /></bezel>
+ <bezel element="text_p2"><bounds x="103.1" y="64.5" width="3.5" height="1.5" /></bezel>
+ <bezel element="text_p3"><bounds x="106.1" y="64.5" width="3.5" height="1.5" /></bezel>
+ <bezel element="text_p4"><bounds x="109.1" y="64.5" width="3.5" height="1.5" /></bezel>
+ <bezel element="text_p5"><bounds x="112.1" y="64.5" width="3.5" height="1.5" /></bezel>
+ <bezel element="text_p6"><bounds x="115.1" y="64.5" width="3.5" height="1.5" /></bezel>
<bezel element="text_b1"><bounds x="90" y="68.5" width="7.5" height="1.5" /></bezel>
<bezel element="text_b1a"><bounds x="90" y="70" width="7.5" height="1.5" /></bezel>
- <bezel element="text_b2"><bounds x="93" y="65" width="7.5" height="1.5" /></bezel>
+ <bezel element="text_b2"><bounds x="93" y="64.6" width="7.5" height="1.5" /></bezel>
<bezel element="text_b3"><bounds x="100.1" y="68.5" width="3.5" height="1.5" /></bezel>
<bezel element="text_b4"><bounds x="103.1" y="68.5" width="3.5" height="1.5" /></bezel>
diff --git a/src/mame/layout/fidel_ex.lay b/src/mame/layout/fidel_ex.lay
index db62eda88ba..53ed6b53cee 100644
--- a/src/mame/layout/fidel_ex.lay
+++ b/src/mame/layout/fidel_ex.lay
@@ -192,27 +192,27 @@
<element name="text_tl7">
<rect><color red="0.17" green="0.15" blue="0.15" /></rect>
- <text string="&#x265a;"><color red="0.65" green="0.15" blue="0.14" /></text>
+ <text string="[K]"><color red="0.65" green="0.15" blue="0.14" /></text>
</element>
<element name="text_tl6">
<rect><color red="0.17" green="0.15" blue="0.15" /></rect>
- <text string="&#x265b;"><color red="0.65" green="0.15" blue="0.14" /></text>
+ <text string="[Q]"><color red="0.65" green="0.15" blue="0.14" /></text>
</element>
<element name="text_tl5">
<rect><color red="0.17" green="0.15" blue="0.15" /></rect>
- <text string="&#x265c;"><color red="0.65" green="0.15" blue="0.14" /></text>
+ <text string="[R]"><color red="0.65" green="0.15" blue="0.14" /></text>
</element>
<element name="text_tl4">
<rect><color red="0.17" green="0.15" blue="0.15" /></rect>
- <text string="&#x265d;"><color red="0.65" green="0.15" blue="0.14" /></text>
+ <text string="[B]"><color red="0.65" green="0.15" blue="0.14" /></text>
</element>
<element name="text_tl3">
<rect><color red="0.17" green="0.15" blue="0.15" /></rect>
- <text string="&#x265e;"><color red="0.65" green="0.15" blue="0.14" /></text>
+ <text string="[N]"><color red="0.65" green="0.15" blue="0.14" /></text>
</element>
<element name="text_tl2">
<rect><color red="0.17" green="0.15" blue="0.15" /></rect>
- <text string="&#x265f;"><color red="0.65" green="0.15" blue="0.14" /></text>
+ <text string="[P]"><color red="0.65" green="0.15" blue="0.14" /></text>
</element>
@@ -403,12 +403,12 @@
<bezel element="black"><bounds x="86" y="2" width="10" height="82" /></bezel>
- <bezel element="text_tl7"><bounds x="87" y="16" width="8" height="3" /></bezel>
- <bezel element="text_tl6"><bounds x="87" y="25" width="8" height="3" /></bezel>
- <bezel element="text_tl5"><bounds x="87" y="34" width="8" height="3" /></bezel>
- <bezel element="text_tl4"><bounds x="87" y="43" width="8" height="3" /></bezel>
- <bezel element="text_tl3"><bounds x="87" y="52" width="8" height="3" /></bezel>
- <bezel element="text_tl2"><bounds x="87" y="61" width="8" height="3" /></bezel>
+ <bezel element="text_tl7"><bounds x="87" y="16.2" width="8" height="2.5" /></bezel>
+ <bezel element="text_tl6"><bounds x="87" y="25.2" width="8" height="2.5" /></bezel>
+ <bezel element="text_tl5"><bounds x="87" y="34.2" width="8" height="2.5" /></bezel>
+ <bezel element="text_tl4"><bounds x="87" y="43.2" width="8" height="2.5" /></bezel>
+ <bezel element="text_tl3"><bounds x="87" y="52.2" width="8" height="2.5" /></bezel>
+ <bezel element="text_tl2"><bounds x="87" y="61.2" width="8" height="2.5" /></bezel>
<bezel element="redb"><bounds x="87" y="9" width="8" height="4" /></bezel>
<bezel element="redb"><bounds x="87" y="19" width="8" height="4" /></bezel>
diff --git a/src/mame/layout/fidel_ex_68k.lay b/src/mame/layout/fidel_ex_68k.lay
index 5429357f828..741ee8e6912 100644
--- a/src/mame/layout/fidel_ex_68k.lay
+++ b/src/mame/layout/fidel_ex_68k.lay
@@ -192,27 +192,27 @@
<element name="text_tl7">
<rect><color red="0.17" green="0.15" blue="0.15" /></rect>
- <text string="&#x265a;"><color red="0.65" green="0.15" blue="0.14" /></text>
+ <text string="[K]"><color red="0.65" green="0.15" blue="0.14" /></text>
</element>
<element name="text_tl6">
<rect><color red="0.17" green="0.15" blue="0.15" /></rect>
- <text string="&#x265b;"><color red="0.65" green="0.15" blue="0.14" /></text>
+ <text string="[Q]"><color red="0.65" green="0.15" blue="0.14" /></text>
</element>
<element name="text_tl5">
<rect><color red="0.17" green="0.15" blue="0.15" /></rect>
- <text string="&#x265c;"><color red="0.65" green="0.15" blue="0.14" /></text>
+ <text string="[R]"><color red="0.65" green="0.15" blue="0.14" /></text>
</element>
<element name="text_tl4">
<rect><color red="0.17" green="0.15" blue="0.15" /></rect>
- <text string="&#x265d;"><color red="0.65" green="0.15" blue="0.14" /></text>
+ <text string="[B]"><color red="0.65" green="0.15" blue="0.14" /></text>
</element>
<element name="text_tl3">
<rect><color red="0.17" green="0.15" blue="0.15" /></rect>
- <text string="&#x265e;"><color red="0.65" green="0.15" blue="0.14" /></text>
+ <text string="[N]"><color red="0.65" green="0.15" blue="0.14" /></text>
</element>
<element name="text_tl2">
<rect><color red="0.17" green="0.15" blue="0.15" /></rect>
- <text string="&#x265f;"><color red="0.65" green="0.15" blue="0.14" /></text>
+ <text string="[P]"><color red="0.65" green="0.15" blue="0.14" /></text>
</element>
@@ -479,12 +479,12 @@
<bezel element="black"><bounds x="86" y="2" width="10" height="82" /></bezel>
- <bezel element="text_tl7"><bounds x="87" y="16" width="8" height="3" /></bezel>
- <bezel element="text_tl6"><bounds x="87" y="25" width="8" height="3" /></bezel>
- <bezel element="text_tl5"><bounds x="87" y="34" width="8" height="3" /></bezel>
- <bezel element="text_tl4"><bounds x="87" y="43" width="8" height="3" /></bezel>
- <bezel element="text_tl3"><bounds x="87" y="52" width="8" height="3" /></bezel>
- <bezel element="text_tl2"><bounds x="87" y="61" width="8" height="3" /></bezel>
+ <bezel element="text_tl7"><bounds x="87" y="16.2" width="8" height="2.5" /></bezel>
+ <bezel element="text_tl6"><bounds x="87" y="25.2" width="8" height="2.5" /></bezel>
+ <bezel element="text_tl5"><bounds x="87" y="34.2" width="8" height="2.5" /></bezel>
+ <bezel element="text_tl4"><bounds x="87" y="43.2" width="8" height="2.5" /></bezel>
+ <bezel element="text_tl3"><bounds x="87" y="52.2" width="8" height="2.5" /></bezel>
+ <bezel element="text_tl2"><bounds x="87" y="61.2" width="8" height="2.5" /></bezel>
<bezel element="redb"><bounds x="87" y="9" width="8" height="4" /></bezel>
<bezel element="redb"><bounds x="87" y="19" width="8" height="4" /></bezel>
diff --git a/src/mame/layout/fidel_exd.lay b/src/mame/layout/fidel_exd.lay
index e72cf5b9490..88b7dede003 100644
--- a/src/mame/layout/fidel_exd.lay
+++ b/src/mame/layout/fidel_exd.lay
@@ -196,27 +196,27 @@
<element name="text_tl7">
<rect><color red="0.17" green="0.15" blue="0.15" /></rect>
- <text string="&#x265a;"><color red="0.65" green="0.15" blue="0.14" /></text>
+ <text string="[K]"><color red="0.65" green="0.15" blue="0.14" /></text>
</element>
<element name="text_tl6">
<rect><color red="0.17" green="0.15" blue="0.15" /></rect>
- <text string="&#x265b;"><color red="0.65" green="0.15" blue="0.14" /></text>
+ <text string="[Q]"><color red="0.65" green="0.15" blue="0.14" /></text>
</element>
<element name="text_tl5">
<rect><color red="0.17" green="0.15" blue="0.15" /></rect>
- <text string="&#x265c;"><color red="0.65" green="0.15" blue="0.14" /></text>
+ <text string="[R]"><color red="0.65" green="0.15" blue="0.14" /></text>
</element>
<element name="text_tl4">
<rect><color red="0.17" green="0.15" blue="0.15" /></rect>
- <text string="&#x265d;"><color red="0.65" green="0.15" blue="0.14" /></text>
+ <text string="[B]"><color red="0.65" green="0.15" blue="0.14" /></text>
</element>
<element name="text_tl3">
<rect><color red="0.17" green="0.15" blue="0.15" /></rect>
- <text string="&#x265e;"><color red="0.65" green="0.15" blue="0.14" /></text>
+ <text string="[N]"><color red="0.65" green="0.15" blue="0.14" /></text>
</element>
<element name="text_tl2">
<rect><color red="0.17" green="0.15" blue="0.15" /></rect>
- <text string="&#x265f;"><color red="0.65" green="0.15" blue="0.14" /></text>
+ <text string="[P]"><color red="0.65" green="0.15" blue="0.14" /></text>
</element>
@@ -429,12 +429,12 @@
<bezel element="black"><bounds x="86" y="2" width="10" height="82" /></bezel>
- <bezel element="text_tl7"><bounds x="87" y="16" width="8" height="3" /></bezel>
- <bezel element="text_tl6"><bounds x="87" y="25" width="8" height="3" /></bezel>
- <bezel element="text_tl5"><bounds x="87" y="34" width="8" height="3" /></bezel>
- <bezel element="text_tl4"><bounds x="87" y="43" width="8" height="3" /></bezel>
- <bezel element="text_tl3"><bounds x="87" y="52" width="8" height="3" /></bezel>
- <bezel element="text_tl2"><bounds x="87" y="61" width="8" height="3" /></bezel>
+ <bezel element="text_tl7"><bounds x="87" y="16.2" width="8" height="2.5" /></bezel>
+ <bezel element="text_tl6"><bounds x="87" y="25.2" width="8" height="2.5" /></bezel>
+ <bezel element="text_tl5"><bounds x="87" y="34.2" width="8" height="2.5" /></bezel>
+ <bezel element="text_tl4"><bounds x="87" y="43.2" width="8" height="2.5" /></bezel>
+ <bezel element="text_tl3"><bounds x="87" y="52.2" width="8" height="2.5" /></bezel>
+ <bezel element="text_tl2"><bounds x="87" y="61.2" width="8" height="2.5" /></bezel>
<bezel element="redb"><bounds x="87" y="9" width="8" height="4" /></bezel>
<bezel element="redb"><bounds x="87" y="19" width="8" height="4" /></bezel>
diff --git a/src/mame/layout/fidel_pc.lay b/src/mame/layout/fidel_pc.lay
index 5750625e5c2..aab54f67632 100644
--- a/src/mame/layout/fidel_pc.lay
+++ b/src/mame/layout/fidel_pc.lay
@@ -107,12 +107,12 @@
<text string="H"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
- <element name="text_r11"><text string="&#x265a;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_r21"><text string="&#x265b;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_r31"><text string="&#x265c;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_r41"><text string="&#x265d;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_r51"><text string="&#x265e;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_r61"><text string="&#x265f;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_r11"><text string="[K]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_r21"><text string="[Q]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_r31"><text string="[R]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_r41"><text string="[B]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_r51"><text string="[N]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_r61"><text string="[P]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_r12"><text string="RESET" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_r22"><text string="spk" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element>
@@ -362,27 +362,27 @@
<!-- right side -->
- <bezel element="text_r11"><bounds x="91.5" y="15.6" width="3" height="2.5" /></bezel>
- <bezel element="text_r21"><bounds x="91.5" y="18.6" width="3" height="2.5" /></bezel>
- <bezel element="text_r31"><bounds x="91.5" y="21.6" width="3" height="2.5" /></bezel>
- <bezel element="text_r41"><bounds x="91.5" y="24.6" width="3" height="2.5" /></bezel>
- <bezel element="text_r51"><bounds x="91.5" y="27.6" width="3" height="2.5" /></bezel>
- <bezel element="text_r61"><bounds x="91.5" y="30.6" width="3" height="2.5" /></bezel>
-
- <bezel element="text_r12"><bounds x="96.8" y="8.25" width="10" height="1.5" /></bezel>
- <bezel element="text_r22"><bounds x="96.8" y="11.25" width="10" height="1.5" /></bezel>
- <bezel element="text_r32"><bounds x="96.8" y="16.25" width="10" height="1.5" /></bezel>
- <bezel element="text_r42"><bounds x="96.8" y="19.25" width="10" height="1.5" /></bezel>
- <bezel element="text_r52"><bounds x="96.8" y="22.25" width="10" height="1.5" /></bezel>
- <bezel element="text_r62"><bounds x="96.8" y="25.25" width="10" height="1.5" /></bezel>
- <bezel element="text_r72"><bounds x="96.8" y="28.25" width="10" height="1.5" /></bezel>
- <bezel element="text_r82"><bounds x="96.8" y="31.25" width="10" height="1.5" /></bezel>
- <bezel element="text_r92"><bounds x="96.8" y="36.25" width="10" height="1.5" /></bezel>
- <bezel element="text_ra2"><bounds x="96.8" y="39.25" width="10" height="1.5" /></bezel>
- <bezel element="text_rb2"><bounds x="96.8" y="42.25" width="10" height="1.5" /></bezel>
-
- <bezel element="text_r13"><bounds x="92.5" y="47.25" width="10" height="1.5" /></bezel>
- <bezel element="text_r23"><bounds x="92.5" y="50.25" width="10" height="1.5" /></bezel>
+ <bezel element="text_r11"><bounds x="91.5" y="16.15" width="3" height="1.5" /></bezel>
+ <bezel element="text_r21"><bounds x="91.5" y="19.15" width="3" height="1.5" /></bezel>
+ <bezel element="text_r31"><bounds x="91.5" y="22.15" width="3" height="1.5" /></bezel>
+ <bezel element="text_r41"><bounds x="91.5" y="25.15" width="3" height="1.5" /></bezel>
+ <bezel element="text_r51"><bounds x="91.5" y="28.15" width="3" height="1.5" /></bezel>
+ <bezel element="text_r61"><bounds x="91.5" y="31.15" width="3" height="1.5" /></bezel>
+
+ <bezel element="text_r12"><bounds x="96.8" y="8.15" width="10" height="1.5" /></bezel>
+ <bezel element="text_r22"><bounds x="96.8" y="11.15" width="10" height="1.5" /></bezel>
+ <bezel element="text_r32"><bounds x="96.8" y="16.15" width="10" height="1.5" /></bezel>
+ <bezel element="text_r42"><bounds x="96.8" y="19.15" width="10" height="1.5" /></bezel>
+ <bezel element="text_r52"><bounds x="96.8" y="22.15" width="10" height="1.5" /></bezel>
+ <bezel element="text_r62"><bounds x="96.8" y="25.15" width="10" height="1.5" /></bezel>
+ <bezel element="text_r72"><bounds x="96.8" y="28.15" width="10" height="1.5" /></bezel>
+ <bezel element="text_r82"><bounds x="96.8" y="31.15" width="10" height="1.5" /></bezel>
+ <bezel element="text_r92"><bounds x="96.8" y="36.15" width="10" height="1.5" /></bezel>
+ <bezel element="text_ra2"><bounds x="96.8" y="39.15" width="10" height="1.5" /></bezel>
+ <bezel element="text_rb2"><bounds x="96.8" y="42.15" width="10" height="1.5" /></bezel>
+
+ <bezel element="text_r13"><bounds x="92.5" y="47.15" width="10" height="1.5" /></bezel>
+ <bezel element="text_r23"><bounds x="92.5" y="50.15" width="10" height="1.5" /></bezel>
<bezel name="8.8" element="led2"><bounds x="90" y="16.25" width="1.5" height="1.5" /></bezel>
<bezel name="8.9" element="led2"><bounds x="90" y="19.25" width="1.5" height="1.5" /></bezel>
diff --git a/src/mame/layout/fidel_playmatic.lay b/src/mame/layout/fidel_playmatic.lay
index 9834870d937..907a4dbab03 100644
--- a/src/mame/layout/fidel_playmatic.lay
+++ b/src/mame/layout/fidel_playmatic.lay
@@ -96,12 +96,12 @@
<text string="H"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
- <element name="text_l3"><text string="&#x2654;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_l4"><text string="&#x2655;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_l5"><text string="&#x2656;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_l6"><text string="&#x2657;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_l7"><text string="&#x2658;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_l8"><text string="&#x2659;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_l3"><text string="[K]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_l4"><text string="[Q]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_l5"><text string="[R]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_l6"><text string="[B]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_l7"><text string="[N]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_l8"><text string="[P]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_r1"><text string="RE"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_r2"><text string="CL"><color red="0.81" green="0.8" blue="0.79" /></text></element>
@@ -337,12 +337,12 @@
<!-- not included here: 2 on/off switches for power and module enable, each with green led when on -->
- <bezel element="text_l3"><bounds x="88.25" y="39.75" width="4" height="4" /></bezel>
- <bezel element="text_l4"><bounds x="88.25" y="43.75" width="4" height="4" /></bezel>
- <bezel element="text_l5"><bounds x="88.25" y="47.75" width="4" height="4" /></bezel>
- <bezel element="text_l6"><bounds x="88.25" y="51.75" width="4" height="4" /></bezel>
- <bezel element="text_l7"><bounds x="88.25" y="55.75" width="4" height="4" /></bezel>
- <bezel element="text_l8"><bounds x="88.25" y="59.75" width="4" height="4" /></bezel>
+ <bezel element="text_l3"><bounds x="88" y="41" width="4" height="2" /></bezel>
+ <bezel element="text_l4"><bounds x="88" y="45" width="4" height="2" /></bezel>
+ <bezel element="text_l5"><bounds x="88" y="49" width="4" height="2" /></bezel>
+ <bezel element="text_l6"><bounds x="88" y="53" width="4" height="2" /></bezel>
+ <bezel element="text_l7"><bounds x="88" y="57" width="4" height="2" /></bezel>
+ <bezel element="text_l8"><bounds x="88" y="61" width="4" height="2" /></bezel>
<bezel element="text_r1"><bounds x="93.25" y="33" width="4" height="2" /></bezel>
<bezel element="text_r2"><bounds x="93.25" y="37" width="4" height="2" /></bezel>
diff --git a/src/mame/layout/fidel_sc12.lay b/src/mame/layout/fidel_sc12.lay
index 69fc90284a5..80631d7d880 100644
--- a/src/mame/layout/fidel_sc12.lay
+++ b/src/mame/layout/fidel_sc12.lay
@@ -233,27 +233,27 @@
<element name="text_king">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x2654;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_queen">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x2655;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_rook">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x2656;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_bishop">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x2657;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_knight">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x2658;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_pawn">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x2659;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
@@ -479,12 +479,12 @@
<!-- right side -->
- <bezel element="text_king"><bounds x="87.7" y="20.6" width="4.6" height="4" /></bezel>
- <bezel element="text_queen"><bounds x="87.7" y="29.9" width="4.6" height="4" /></bezel>
- <bezel element="text_rook"><bounds x="87.7" y="39.2" width="4.6" height="4" /></bezel>
- <bezel element="text_bishop"><bounds x="87.7" y="48.5" width="4.6" height="4" /></bezel>
- <bezel element="text_knight"><bounds x="87.7" y="57.8" width="4.6" height="4" /></bezel>
- <bezel element="text_pawn"><bounds x="87.7" y="67.1" width="4.6" height="4" /></bezel>
+ <bezel element="text_king"><bounds x="87.7" y="21.4" width="4.6" height="2.5" /></bezel>
+ <bezel element="text_queen"><bounds x="87.7" y="30.7" width="4.6" height="2.5" /></bezel>
+ <bezel element="text_rook"><bounds x="87.7" y="40.0" width="4.6" height="2.5" /></bezel>
+ <bezel element="text_bishop"><bounds x="87.7" y="49.3" width="4.6" height="2.5" /></bezel>
+ <bezel element="text_knight"><bounds x="87.7" y="58.6" width="4.6" height="2.5" /></bezel>
+ <bezel element="text_pawn"><bounds x="87.7" y="67.9" width="4.6" height="2.5" /></bezel>
<bezel element="disk_black"><bounds x="87" y="3.1" width="6" height="6" /></bezel>
<bezel element="disk_black"><bounds x="87" y="12.4" width="6" height="6" /></bezel>
diff --git a/src/mame/layout/fidel_sc6.lay b/src/mame/layout/fidel_sc6.lay
index f3cbcd49389..d64dce25d7c 100644
--- a/src/mame/layout/fidel_sc6.lay
+++ b/src/mame/layout/fidel_sc6.lay
@@ -134,27 +134,27 @@
<element name="text_king">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x2654;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_queen">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x2655;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_rook">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x2656;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_bishop">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x2657;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_knight">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x2658;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_pawn">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x2659;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
@@ -306,12 +306,12 @@
<!-- right side -->
- <bezel element="text_king"><bounds x="84.01" y="31.1" width="6" height="6" /></bezel>
- <bezel element="text_queen"><bounds x="84.01" y="39.9" width="6" height="6" /></bezel>
- <bezel element="text_rook"><bounds x="84.01" y="48.7" width="6" height="6" /></bezel>
- <bezel element="text_bishop"><bounds x="84.01" y="57.5" width="6" height="6" /></bezel>
- <bezel element="text_knight"><bounds x="84.01" y="66.3" width="6" height="6" /></bezel>
- <bezel element="text_pawn"><bounds x="84.01" y="75.1" width="6" height="6" /></bezel>
+ <bezel element="text_king"><bounds x="84.01" y="32.8" width="5.5" height="3" /></bezel>
+ <bezel element="text_queen"><bounds x="84.01" y="41.6" width="5.5" height="3" /></bezel>
+ <bezel element="text_rook"><bounds x="84.01" y="50.4" width="5.5" height="3" /></bezel>
+ <bezel element="text_bishop"><bounds x="84.01" y="59.2" width="5.5" height="3" /></bezel>
+ <bezel element="text_knight"><bounds x="84.01" y="68" width="5.5" height="3" /></bezel>
+ <bezel element="text_pawn"><bounds x="84.01" y="76.8" width="5.5" height="3" /></bezel>
<bezel element="disk_black"><bounds x="89" y="13" width="7.4" height="7.4" /></bezel>
<bezel element="disk_black"><bounds x="89" y="21.8" width="7.4" height="7.4" /></bezel>
diff --git a/src/mame/layout/fidel_sc8.lay b/src/mame/layout/fidel_sc8.lay
index bb624815da6..a7ba743dbc4 100644
--- a/src/mame/layout/fidel_sc8.lay
+++ b/src/mame/layout/fidel_sc8.lay
@@ -110,27 +110,27 @@
</element>
<element name="text_king">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x265a;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_queen">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x265b;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_rook">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x265c;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_bishop">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x265d;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_knight">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x265e;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_pawn">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x265f;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
@@ -378,12 +378,12 @@
<bezel element="text_re"><bounds x="88.2" y="15.2" width="5" height="3" /></bezel>
<bezel element="text_cl"><bounds x="88.2" y="24" width="5" height="3" /></bezel>
- <bezel element="text_king"><bounds x="88.2" y="32.1" width="5" height="4" /></bezel>
- <bezel element="text_queen"><bounds x="88.2" y="40.9" width="5" height="4" /></bezel>
- <bezel element="text_bishop"><bounds x="88.2" y="49.7" width="5" height="4" /></bezel>
- <bezel element="text_knight"><bounds x="88.2" y="58.5" width="5" height="4" /></bezel>
- <bezel element="text_rook"><bounds x="88.2" y="67.3" width="5" height="4" /></bezel>
- <bezel element="text_pawn"><bounds x="88.2" y="76.1" width="5" height="4" /></bezel>
+ <bezel element="text_king"><bounds x="88.2" y="32.8" width="5" height="3" /></bezel>
+ <bezel element="text_queen"><bounds x="88.2" y="41.6" width="5" height="3" /></bezel>
+ <bezel element="text_bishop"><bounds x="88.2" y="50.4" width="5" height="3" /></bezel>
+ <bezel element="text_knight"><bounds x="88.2" y="59.2" width="5" height="3" /></bezel>
+ <bezel element="text_rook"><bounds x="88.2" y="68" width="5" height="3" /></bezel>
+ <bezel element="text_pawn"><bounds x="88.2" y="76.8" width="5" height="3" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x80"><bounds x="87" y="13" width="7.4" height="7.4" /><color alpha="0.3" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x40"><bounds x="87" y="21.8" width="7.4" height="7.4" /><color alpha="0.3" /></bezel>
diff --git a/src/mame/layout/fidel_sc9.lay b/src/mame/layout/fidel_sc9.lay
index b3685ea7e91..fef85f4013c 100644
--- a/src/mame/layout/fidel_sc9.lay
+++ b/src/mame/layout/fidel_sc9.lay
@@ -137,27 +137,27 @@
<element name="text_king">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x2654;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_queen">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x2655;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_rook">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x2656;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_bishop">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x2657;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_knight">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x2658;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_pawn">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x2659;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
@@ -385,12 +385,12 @@
<bezel name="8.7" element="led"><bounds x="91.95" y="7.25" width="1.5" height="1.5" /></bezel>
- <bezel element="text_king"><bounds x="84.01" y="31.1" width="6" height="6" /></bezel>
- <bezel element="text_queen"><bounds x="84.01" y="39.9" width="6" height="6" /></bezel>
- <bezel element="text_rook"><bounds x="84.01" y="48.7" width="6" height="6" /></bezel>
- <bezel element="text_bishop"><bounds x="84.01" y="57.5" width="6" height="6" /></bezel>
- <bezel element="text_knight"><bounds x="84.01" y="66.3" width="6" height="6" /></bezel>
- <bezel element="text_pawn"><bounds x="84.01" y="75.1" width="6" height="6" /></bezel>
+ <bezel element="text_king"><bounds x="84.01" y="32.8" width="5.7" height="3" /></bezel>
+ <bezel element="text_queen"><bounds x="84.01" y="41.6" width="5.7" height="3" /></bezel>
+ <bezel element="text_rook"><bounds x="84.01" y="50.4" width="5.7" height="3" /></bezel>
+ <bezel element="text_bishop"><bounds x="84.01" y="59.2" width="5.7" height="3" /></bezel>
+ <bezel element="text_knight"><bounds x="84.01" y="68" width="5.7" height="3" /></bezel>
+ <bezel element="text_pawn"><bounds x="84.01" y="76.8" width="5.7" height="3" /></bezel>
<bezel element="disk_black"><bounds x="89" y="13" width="7.4" height="7.4" /></bezel>
<bezel element="disk_black"><bounds x="89" y="21.8" width="7.4" height="7.4" /></bezel>
diff --git a/src/mame/layout/fidel_su9.lay b/src/mame/layout/fidel_su9.lay
index 043cdf1f704..e722afc8d17 100644
--- a/src/mame/layout/fidel_su9.lay
+++ b/src/mame/layout/fidel_su9.lay
@@ -151,27 +151,27 @@
<element name="text_king">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x2654;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_queen">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x2655;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_rook">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x2656;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_bishop">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x2657;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_knight">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x2658;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_pawn">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x2659;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_tmp">
@@ -424,12 +424,12 @@
<bezel name="0.7" element="led"><bounds x="91.95" y="7.25" width="1.5" height="1.5" /></bezel>
- <bezel element="text_king"><bounds x="84.01" y="31.1" width="6" height="6" /></bezel>
- <bezel element="text_queen"><bounds x="84.01" y="39.9" width="6" height="6" /></bezel>
- <bezel element="text_rook"><bounds x="84.01" y="48.7" width="6" height="6" /></bezel>
- <bezel element="text_bishop"><bounds x="84.01" y="57.5" width="6" height="6" /></bezel>
- <bezel element="text_knight"><bounds x="84.01" y="66.3" width="6" height="6" /></bezel>
- <bezel element="text_pawn"><bounds x="84.01" y="75.1" width="6" height="6" /></bezel>
+ <bezel element="text_king"><bounds x="84.01" y="32.8" width="5.7" height="3" /></bezel>
+ <bezel element="text_queen"><bounds x="84.01" y="41.6" width="5.7" height="3" /></bezel>
+ <bezel element="text_rook"><bounds x="84.01" y="50.4" width="5.7" height="3" /></bezel>
+ <bezel element="text_bishop"><bounds x="84.01" y="59.2" width="5.7" height="3" /></bezel>
+ <bezel element="text_knight"><bounds x="84.01" y="68" width="5.7" height="3" /></bezel>
+ <bezel element="text_pawn"><bounds x="84.01" y="76.8" width="5.7" height="3" /></bezel>
<bezel element="disk_black"><bounds x="89" y="13" width="7.4" height="7.4" /></bezel>
<bezel element="disk_black"><bounds x="89" y="21.8" width="7.4" height="7.4" /></bezel>
diff --git a/src/mame/layout/fidel_vsc.lay b/src/mame/layout/fidel_vsc.lay
index cc112db62f3..24ad2352d88 100644
--- a/src/mame/layout/fidel_vsc.lay
+++ b/src/mame/layout/fidel_vsc.lay
@@ -124,27 +124,27 @@
</element>
<element name="text_king">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x265a;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_queen">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x265b;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_rook">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x265c;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_bishop">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x265d;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_knight">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x265e;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_pawn">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
- <text string="&#x265f;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_tm">
@@ -417,12 +417,12 @@
<bezel element="text_re"><bounds x="88.2" y="15.2" width="5" height="3" /></bezel>
<bezel element="text_cl"><bounds x="88.2" y="24" width="5" height="3" /></bezel>
- <bezel element="text_king"><bounds x="88.2" y="32.1" width="5" height="4" /></bezel>
- <bezel element="text_queen"><bounds x="88.2" y="40.9" width="5" height="4" /></bezel>
- <bezel element="text_bishop"><bounds x="88.2" y="49.7" width="5" height="4" /></bezel>
- <bezel element="text_knight"><bounds x="88.2" y="58.5" width="5" height="4" /></bezel>
- <bezel element="text_rook"><bounds x="88.2" y="67.3" width="5" height="4" /></bezel>
- <bezel element="text_pawn"><bounds x="88.2" y="76.1" width="5" height="4" /></bezel>
+ <bezel element="text_king"><bounds x="88.2" y="32.8" width="5" height="3" /></bezel>
+ <bezel element="text_queen"><bounds x="88.2" y="41.6" width="5" height="3" /></bezel>
+ <bezel element="text_bishop"><bounds x="88.2" y="50.4" width="5" height="3" /></bezel>
+ <bezel element="text_knight"><bounds x="88.2" y="59.2" width="5" height="3" /></bezel>
+ <bezel element="text_rook"><bounds x="88.2" y="68" width="5" height="3" /></bezel>
+ <bezel element="text_pawn"><bounds x="88.2" y="76.8" width="5" height="3" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x80"><bounds x="87" y="13" width="7.4" height="7.4" /><color alpha="0.3" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x40"><bounds x="87" y="21.8" width="7.4" height="7.4" /><color alpha="0.3" /></bezel>
diff --git a/src/mame/layout/ltcasinn.lay b/src/mame/layout/ltcasinn.lay
new file mode 100644
index 00000000000..1312ce35425
--- /dev/null
+++ b/src/mame/layout/ltcasinn.lay
@@ -0,0 +1,43 @@
+<?xml version="1.0"?>
+
+<!--
+license: CC0
+copyright-holders: Dirk Best
+Simple layout for Little Casino (color) and clones
+-->
+
+<mamelayout version="2">
+ <element name="background">
+ </element>
+ <element name="button" defstate="0">
+ <rect state="0">
+ <color red="0.2" green="0.2" blue="0.2" />
+ </rect>
+ <rect state="1">
+ <color red="0.8" green="0.8" blue="0.8" />
+ </rect>
+ </element>
+ <view name="Buttons">
+ <backdrop element="background">
+ <bounds x="0" y="0" width="640" height="580" />
+ </backdrop>
+ <screen index="0">
+ <bounds left="0" top="0" right="640" bottom="480" />
+ </screen>
+ <cpanel name="button_0" element="button" inputtag="Q" inputmask="0x01">
+ <bounds x="80" y="505" width="70" height="35" />
+ </cpanel>
+ <cpanel name="button_1" element="button" inputtag="Q" inputmask="0x02">
+ <bounds x="180" y="505" width="70" height="35" />
+ </cpanel>
+ <cpanel name="button_2" element="button" inputtag="Q" inputmask="0x04">
+ <bounds x="280" y="505" width="70" height="35" />
+ </cpanel>
+ <cpanel name="button_3" element="button" inputtag="Q" inputmask="0x08">
+ <bounds x="380" y="505" width="70" height="35" />
+ </cpanel>
+ <cpanel name="button_4" element="button" inputtag="Q" inputmask="0x10">
+ <bounds x="480" y="505" width="70" height="35" />
+ </cpanel>
+ </view>
+</mamelayout>
diff --git a/src/mame/layout/ltcasino.lay b/src/mame/layout/ltcasino.lay
new file mode 100644
index 00000000000..6e0c12e72c8
--- /dev/null
+++ b/src/mame/layout/ltcasino.lay
@@ -0,0 +1,64 @@
+<?xml version="1.0"?>
+
+<!--
+license: CC0
+copyright-holders: Dirk Best
+Simple layout for Little Casino (monochrome)
+-->
+
+<mamelayout version="2">
+ <element name="background">
+ </element>
+ <element name="overlay">
+ <rect>
+ <bounds left="0" top="0" right="640" bottom="70" />
+ <color red="0.18" green="0.85" blue="0.33" />
+ </rect>
+ <rect>
+ <bounds left="0" top="75" right="640" bottom="240" />
+ <color red="0.10" green="0.44" blue="0.72" />
+ </rect>
+ <rect>
+ <bounds left="0" top="240" right="640" bottom="410" />
+ <color red="0.77" green="0.14" blue="0.14" />
+ </rect>
+ <rect>
+ <bounds left="0" top="415" right="640" bottom="480" />
+ <color red="0.18" green="0.85" blue="0.33" />
+ </rect>
+ </element>
+ <element name="button" defstate="0">
+ <rect state="0">
+ <color red="0.2" green="0.2" blue="0.2" />
+ </rect>
+ <rect state="1">
+ <color red="0.8" green="0.8" blue="0.8" />
+ </rect>
+ </element>
+ <view name="Buttons">
+ <backdrop element="background">
+ <bounds x="0" y="0" width="640" height="580" />
+ </backdrop>
+ <screen index="0">
+ <bounds left="0" top="0" right="640" bottom="480" />
+ </screen>
+ <overlay name="overlay" element="overlay">
+ <bounds x="0" y="0" width="640" height="480" />
+ </overlay>
+ <cpanel name="button_0" element="button" inputtag="Q" inputmask="0x01">
+ <bounds x="80" y="505" width="70" height="35" />
+ </cpanel>
+ <cpanel name="button_1" element="button" inputtag="Q" inputmask="0x02">
+ <bounds x="180" y="505" width="70" height="35" />
+ </cpanel>
+ <cpanel name="button_2" element="button" inputtag="Q" inputmask="0x04">
+ <bounds x="280" y="505" width="70" height="35" />
+ </cpanel>
+ <cpanel name="button_3" element="button" inputtag="Q" inputmask="0x08">
+ <bounds x="380" y="505" width="70" height="35" />
+ </cpanel>
+ <cpanel name="button_4" element="button" inputtag="Q" inputmask="0x10">
+ <bounds x="480" y="505" width="70" height="35" />
+ </cpanel>
+ </view>
+</mamelayout>
diff --git a/src/mame/layout/matchme.lay b/src/mame/layout/matchme.lay
index e420abefe7e..143045eee1f 100644
--- a/src/mame/layout/matchme.lay
+++ b/src/mame/layout/matchme.lay
@@ -6,7 +6,7 @@
<element name="disk_grey"><disk><color red="0.6" green="0.6" blue="0.6" /></disk></element>
<element name="mask" defstate="0"><disk state="0"><color red="0" green="0" blue="0" /></disk></element>
- <element name="dummy"><text string=" "></text></element>
+ <element name="nothing"><text string=" "></text></element>
<element name="disk_1"><disk><color red="0.9" green="0.3" blue="1.0" /></disk></element>
<element name="disk_2"><disk><color red="1.0" green="0.4" blue="0.4" /></disk></element>
@@ -29,50 +29,103 @@
</disk>
</element>
+ <element name="switch_music" defstate="0">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text state="0x01" string="MAN" align="1"><color red="0.02" green="0.02" blue="0.02" /></text>
+ <text state="0x00" string="AUTO" align="1"><color red="0.02" green="0.02" blue="0.02" /></text>
+ </element>
+ <element name="switch_speed" defstate="0">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text state="0x00" string="LO" align="1"><color red="0.02" green="0.02" blue="0.02" /></text>
+ <text state="0x01" string="HI" align="1"><color red="0.02" green="0.02" blue="0.02" /></text>
+ </element>
+ <element name="switch_skill" defstate="0">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text state="0x01" string="AM" align="1"><color red="0.02" green="0.02" blue="0.02" /></text>
+ <text state="0x00" string="PRO" align="1"><color red="0.02" green="0.02" blue="0.02" /></text>
+ </element>
+ <element name="switch_game" defstate="0">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text state="0x07" string="1" align="1"><color red="0.02" green="0.02" blue="0.02" /></text>
+ <text state="0x06" string="2" align="1"><color red="0.02" green="0.02" blue="0.02" /></text>
+ <text state="0x05" string="3" align="1"><color red="0.02" green="0.02" blue="0.02" /></text>
+ <text state="0x03" string="4" align="1"><color red="0.02" green="0.02" blue="0.02" /></text>
+ </element>
+
+ <element name="text_ry">
+ <disk><color red="0.0" green="0.0" blue="0.0" /></disk>
+ <text string="&#x25ba;">
+ <color red="0.8" green="0.77" blue="0.1" />
+ </text>
+ </element>
+ <element name="text_ro">
+ <disk><color red="0.0" green="0.0" blue="0.0" /></disk>
+ <text string="&#x25ba;">
+ <color red="0.8" green="0.5" blue="0.1" />
+ </text>
+ </element>
+
+ <element name="text_music">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="MUSIC:" align="1"><color red="0.02" green="0.02" blue="0.02" /></text>
+ </element>
+ <element name="text_speed">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="SPEED:" align="1"><color red="0.02" green="0.02" blue="0.02" /></text>
+ </element>
+ <element name="text_skill">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="SKILL:" align="1"><color red="0.02" green="0.02" blue="0.02" /></text>
+ </element>
+ <element name="text_game">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="GAME:" align="1"><color red="0.02" green="0.02" blue="0.02" /></text>
+ </element>
+
<element name="text_last">
<rect><color red="0.6" green="0.6" blue="0.6" /></rect>
- <text string="LAST"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="LAST"><color red="0.02" green="0.02" blue="0.02" /></text>
</element>
<element name="text_start">
<rect><color red="0.6" green="0.6" blue="0.6" /></rect>
- <text string="START"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="START"><color red="0.02" green="0.02" blue="0.02" /></text>
</element>
<element name="text_long">
<rect><color red="0.6" green="0.6" blue="0.6" /></rect>
- <text string="LONG"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="LONG"><color red="0.02" green="0.02" blue="0.02" /></text>
</element>
<element name="text_1">
<disk><color red="0.6" green="0.6" blue="0.6" /></disk>
- <text string="1"><color red="0.01" green="0.01" blue="0.01" /></text>
+ <text string="1"><color red="0.02" green="0.02" blue="0.02" /></text>
</element>
<element name="text_2">
<disk><color red="0.6" green="0.6" blue="0.6" /></disk>
- <text string="2"><color red="0.01" green="0.01" blue="0.01" /></text>
+ <text string="2"><color red="0.02" green="0.02" blue="0.02" /></text>
</element>
<element name="text_3">
<disk><color red="0.6" green="0.6" blue="0.6" /></disk>
- <text string="3"><color red="0.01" green="0.01" blue="0.01" /></text>
+ <text string="3"><color red="0.02" green="0.02" blue="0.02" /></text>
</element>
<element name="text_4">
<disk><color red="0.6" green="0.6" blue="0.6" /></disk>
- <text string="4"><color red="0.01" green="0.01" blue="0.01" /></text>
+ <text string="4"><color red="0.02" green="0.02" blue="0.02" /></text>
</element>
<element name="text_5">
<disk><color red="0.6" green="0.6" blue="0.6" /></disk>
- <text string="5"><color red="0.01" green="0.01" blue="0.01" /></text>
+ <text string="5"><color red="0.02" green="0.02" blue="0.02" /></text>
</element>
<element name="text_6">
<disk><color red="0.6" green="0.6" blue="0.6" /></disk>
- <text string="6"><color red="0.01" green="0.01" blue="0.01" /></text>
+ <text string="6"><color red="0.02" green="0.02" blue="0.02" /></text>
</element>
<element name="text_7">
<disk><color red="0.6" green="0.6" blue="0.6" /></disk>
- <text string="7"><color red="0.01" green="0.01" blue="0.01" /></text>
+ <text string="7"><color red="0.02" green="0.02" blue="0.02" /></text>
</element>
<element name="text_8">
<disk><color red="0.6" green="0.6" blue="0.6" /></disk>
- <text string="8"><color red="0.01" green="0.01" blue="0.01" /></text>
+ <text string="8"><color red="0.02" green="0.02" blue="0.02" /></text>
</element>
@@ -94,6 +147,26 @@
<bezel element="text_7"><bounds x="12.3369" y="10.8215" width="0.5" height="0.5" /></bezel>
<bezel element="text_8"><bounds x="10.8215" y="12.3369" width="0.5" height="0.5" /></bezel>
+ <bezel element="text_music"><bounds x="9" y="8.8" width="2" height="0.29" /></bezel>
+ <bezel element="text_speed"><bounds x="9" y="9.2" width="2" height="0.29" /></bezel>
+ <bezel element="text_skill"><bounds x="9" y="9.6" width="2" height="0.29" /></bezel>
+ <bezel element="text_game"><bounds x="9" y="10.0" width="2" height="0.29" /></bezel>
+
+ <bezel element="text_ry"><bounds x="9.825" y="8.77" width="0.35" height="0.35" /></bezel>
+ <bezel element="text_ry"><bounds x="9.825" y="9.17" width="0.35" height="0.35" /></bezel>
+ <bezel element="text_ro"><bounds x="9.825" y="9.57" width="0.35" height="0.35" /></bezel>
+ <bezel element="text_ro"><bounds x="9.825" y="9.97" width="0.35" height="0.35" /></bezel>
+ <bezel element="nothing" inputtag="FAKE" inputmask="0x02" inputraw="1"><bounds x="9.805" y="8.75" width="0.39" height="0.39" /></bezel>
+ <bezel element="nothing" inputtag="IN.4" inputmask="0x01" inputraw="1"><bounds x="9.805" y="9.15" width="0.39" height="0.39" /></bezel>
+ <bezel element="nothing" inputtag="IN.3" inputmask="0x08" inputraw="1"><bounds x="9.805" y="9.55" width="0.39" height="0.39" /></bezel>
+ <bezel element="nothing" inputtag="IN.3" inputmask="0x07" inputraw="1"><bounds x="9.805" y="9.95" width="0.39" height="0.39" /></bezel>
+
+ <bezel element="nothing" inputtag="DUMMY" inputmask="0x01"><bounds x="10.2" y="8.7" width="1.1" height="1.8" /></bezel>
+ <bezel element="switch_music" inputtag="FAKE" inputmask="0x02" inputraw="1"><bounds x="10.25" y="8.8" width="1" height="0.29" /></bezel>
+ <bezel element="switch_speed" inputtag="IN.4" inputmask="0x01" inputraw="1"><bounds x="10.25" y="9.2" width="1" height="0.29" /></bezel>
+ <bezel element="switch_skill" inputtag="IN.3" inputmask="0x08" inputraw="1"><bounds x="10.25" y="9.6" width="1" height="0.29" /></bezel>
+ <bezel element="switch_game" inputtag="IN.3" inputmask="0x07" inputraw="1"><bounds x="10.25" y="10.0" width="1" height="0.29" /></bezel>
+
<bezel element="button" inputtag="FAKE" inputmask="0x01"><bounds x="8.0" y="11" width="0.5" height="0.5" /></bezel>
<bezel element="button" inputtag="IN.2" inputmask="0x01"><bounds x="9.75" y="11.9" width="0.5" height="0.5" /></bezel>
<bezel element="button" inputtag="IN.2" inputmask="0x04"><bounds x="11.5" y="11" width="0.5" height="0.5" /></bezel>
@@ -113,23 +186,23 @@
<bezel element="disk_7"><bounds x="13.3694" y="10.6634" width="2.5" height="2.5" /></bezel>
<bezel element="disk_8"><bounds x="10.6634" y="13.3694" width="2.5" height="2.5" /></bezel>
- <bezel element="dummy" inputtag="IN.0" inputmask="0x01"><bounds x="6.8366" y="13.3694" width="2.5" height="2.5" /></bezel>
- <bezel element="dummy" inputtag="IN.0" inputmask="0x02"><bounds x="4.1306" y="10.6634" width="2.5" height="2.5" /></bezel>
- <bezel element="dummy" inputtag="IN.0" inputmask="0x04"><bounds x="4.1306" y="6.8366" width="2.5" height="2.5" /></bezel>
- <bezel element="dummy" inputtag="IN.0" inputmask="0x08"><bounds x="6.8366" y="4.1306" width="2.5" height="2.5" /></bezel>
- <bezel element="dummy" inputtag="IN.1" inputmask="0x01"><bounds x="10.6634" y="4.1306" width="2.5" height="2.5" /></bezel>
- <bezel element="dummy" inputtag="IN.1" inputmask="0x02"><bounds x="13.3694" y="6.8366" width="2.5" height="2.5" /></bezel>
- <bezel element="dummy" inputtag="IN.1" inputmask="0x04"><bounds x="13.3694" y="10.6634" width="2.5" height="2.5" /></bezel>
- <bezel element="dummy" inputtag="IN.1" inputmask="0x08"><bounds x="10.6634" y="13.3694" width="2.5" height="2.5" /></bezel>
-
- <bezel name="0.0" element="mask"><bounds x="6.8366" y="13.3694" width="2.5" height="2.5" /><color alpha="0.4" /></bezel>
- <bezel name="0.1" element="mask"><bounds x="4.1306" y="10.6634" width="2.5" height="2.5" /><color alpha="0.4" /></bezel>
- <bezel name="0.2" element="mask"><bounds x="4.1306" y="6.8366" width="2.5" height="2.5" /><color alpha="0.4" /></bezel>
- <bezel name="0.3" element="mask"><bounds x="6.8366" y="4.1306" width="2.5" height="2.5" /><color alpha="0.4" /></bezel>
- <bezel name="0.4" element="mask"><bounds x="10.6634" y="4.1306" width="2.5" height="2.5" /><color alpha="0.4" /></bezel>
- <bezel name="0.5" element="mask"><bounds x="13.3694" y="6.8366" width="2.5" height="2.5" /><color alpha="0.4" /></bezel>
- <bezel name="0.6" element="mask"><bounds x="13.3694" y="10.6634" width="2.5" height="2.5" /><color alpha="0.4" /></bezel>
- <bezel name="0.7" element="mask"><bounds x="10.6634" y="13.3694" width="2.5" height="2.5" /><color alpha="0.4" /></bezel>
+ <bezel element="nothing" inputtag="IN.0" inputmask="0x01"><bounds x="6.8366" y="13.3694" width="2.5" height="2.5" /></bezel>
+ <bezel element="nothing" inputtag="IN.0" inputmask="0x02"><bounds x="4.1306" y="10.6634" width="2.5" height="2.5" /></bezel>
+ <bezel element="nothing" inputtag="IN.0" inputmask="0x04"><bounds x="4.1306" y="6.8366" width="2.5" height="2.5" /></bezel>
+ <bezel element="nothing" inputtag="IN.0" inputmask="0x08"><bounds x="6.8366" y="4.1306" width="2.5" height="2.5" /></bezel>
+ <bezel element="nothing" inputtag="IN.1" inputmask="0x01"><bounds x="10.6634" y="4.1306" width="2.5" height="2.5" /></bezel>
+ <bezel element="nothing" inputtag="IN.1" inputmask="0x02"><bounds x="13.3694" y="6.8366" width="2.5" height="2.5" /></bezel>
+ <bezel element="nothing" inputtag="IN.1" inputmask="0x04"><bounds x="13.3694" y="10.6634" width="2.5" height="2.5" /></bezel>
+ <bezel element="nothing" inputtag="IN.1" inputmask="0x08"><bounds x="10.6634" y="13.3694" width="2.5" height="2.5" /></bezel>
+
+ <bezel name="0.0" element="mask"><bounds x="6.8366" y="13.3694" width="2.5" height="2.5" /><color alpha="0.5" /></bezel>
+ <bezel name="0.1" element="mask"><bounds x="4.1306" y="10.6634" width="2.5" height="2.5" /><color alpha="0.5" /></bezel>
+ <bezel name="0.2" element="mask"><bounds x="4.1306" y="6.8366" width="2.5" height="2.5" /><color alpha="0.5" /></bezel>
+ <bezel name="0.3" element="mask"><bounds x="6.8366" y="4.1306" width="2.5" height="2.5" /><color alpha="0.5" /></bezel>
+ <bezel name="0.4" element="mask"><bounds x="10.6634" y="4.1306" width="2.5" height="2.5" /><color alpha="0.5" /></bezel>
+ <bezel name="0.5" element="mask"><bounds x="13.3694" y="6.8366" width="2.5" height="2.5" /><color alpha="0.5" /></bezel>
+ <bezel name="0.6" element="mask"><bounds x="13.3694" y="10.6634" width="2.5" height="2.5" /><color alpha="0.5" /></bezel>
+ <bezel name="0.7" element="mask"><bounds x="10.6634" y="13.3694" width="2.5" height="2.5" /><color alpha="0.5" /></bezel>
</view>
</mamelayout>
diff --git a/src/mame/layout/matchnum.lay b/src/mame/layout/matchnum.lay
index 60cca2e7dd0..438d12f0c8e 100644
--- a/src/mame/layout/matchnum.lay
+++ b/src/mame/layout/matchnum.lay
@@ -19,6 +19,11 @@
</disk>
</element>
+ <element name="buttonb" defstate="0">
+ <rect state="0"><color red="0.2" green="0.2" blue="0.2" /></rect>
+ <rect state="1"><color red="0.35" green="0.35" blue="0.35" /></rect>
+ </element>
+
<element name="digit" defstate="0">
<led7seg><color red="1.0" green="0.2" blue="0.22" /></led7seg>
</element>
@@ -28,9 +33,26 @@
<disk state="1"><color red="1.0" green="0.2" blue="0.23" /></disk>
</element>
+ <element name="switch1" defstate="0">
+ <text string=" "><color red="0" green="0" blue="0" /></text>
+ <rect state="0x01"><color red="0.55" green="0.55" blue="0.55" /></rect>
+ </element>
+ <element name="switch2" defstate="0">
+ <text string=" "><color red="0" green="0" blue="0" /></text>
+ <rect state="0x00"><color red="0.55" green="0.55" blue="0.55" /></rect>
+ </element>
+
+ <element name="text_1p">
+ <rect><color red="0.9" green="0.9" blue="0.9" /></rect>
+ <text string="1 PL."><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+ <element name="text_2p">
+ <rect><color red="0.9" green="0.9" blue="0.9" /></rect>
+ <text string="2 PL."><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
<element name="text_change">
<rect><color red="0.9" green="0.9" blue="0.9" /></rect>
- <text string="CHANGE"><color red="0.15" green="0.15" blue="0.15" /></text>
+ <text string="CHANGE"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_q">
<rect><color red="0.9" green="0.9" blue="0.9" /></rect>
@@ -46,7 +68,7 @@
<!-- build screen -->
<view name="Internal Layout">
- <bounds left="0" right="41" top="17" bottom="103" />
+ <bounds left="0" right="41" top="17" bottom="105" />
<!-- top part -->
@@ -119,11 +141,21 @@
<!-- bottom part -->
- <bezel element="static_white"><bounds x="-1" y="92" width="43" height="12" /></bezel>
- <bezel element="text_change"><bounds x="33" y="93" width="8" height="2" /></bezel>
+ <bezel element="static_white"><bounds x="-1" y="92" width="43" height="13.5" /></bezel>
- <bezel element="static_black2"><bounds x="34" y="96" width="6" height="6" /></bezel>
- <bezel element="hl" inputtag="IN.2" inputmask="0x04"><bounds x="34" y="96" width="6" height="6" /><color alpha="0.25" /></bezel>
+ <bezel element="text_1p"><bounds x="1" y="93" width="4" height="2" /></bezel>
+ <bezel element="text_2p"><bounds x="1" y="102.1" width="4" height="2" /></bezel>
+
+ <bezel element="static_black2"><bounds x="1" y="95.6" width="4" height="6" /></bezel>
+ <bezel element="switch1" inputtag="IN.2" inputmask="0x08" inputraw="1"><bounds x="0.8" y="95.4" width="4.4" height="3.4" /></bezel>
+ <bezel element="switch2" inputtag="IN.2" inputmask="0x08" inputraw="1"><bounds x="0.8" y="98.4" width="4.4" height="3.4" /></bezel>
+ <repeat count="12">
+ <param name="y" start="95.75" increment="0.5" />
+ <bezel element="static_black2"><bounds x="1.01" y="~y~" width="3.98" height="0.2" /></bezel>
+ </repeat>
+
+ <bezel element="text_change"><bounds x="33" y="93" width="8" height="2" /></bezel>
+ <bezel element="buttonb" inputtag="IN.2" inputmask="0x04"><bounds x="34" y="95.6" width="6" height="6" /></bezel>
</view>
</mamelayout>
diff --git a/src/mame/layout/mephisto_academy.lay b/src/mame/layout/mephisto_academy.lay
index 917dcb459a0..c67fe49c0ae 100644
--- a/src/mame/layout/mephisto_academy.lay
+++ b/src/mame/layout/mephisto_academy.lay
@@ -61,12 +61,12 @@
<element name="text_ent"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="ENT"> <color red="1" green="1" blue="1" /></text> </element>
<element name="text_cl"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="CL"> <color red="1" green="1" blue="1" /></text> </element>
<element name="text_newgame"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="NEW GAME"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_p1"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="&#x265a;"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_p2"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="&#x265b;"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_p3"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="&#x265c;"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_p4"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="&#x265d;"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_p5"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="&#x265e;"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_p6"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="&#x265f;"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_p1"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="[K]"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_p2"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="[Q]"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_p3"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="[R]"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_p4"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="[B]"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_p5"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="[N]"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_p6"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="[P]"> <color red="1" green="1" blue="1" /></text> </element>
<element name="text_lcd"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="MULTI INFO LCD"><color red="1" green="1" blue="1" /></text> </element>
<!-- build screen -->
@@ -96,12 +96,12 @@
<bezel element="text_ent"> <bounds x="64.25" y="2" width="5" height="1.5" /> </bezel>
<bezel element="text_cl"> <bounds x="71.25" y="2" width="3" height="1.5" /> </bezel>
- <bezel element="text_p6"> <bounds x="27.25" y="6.5" width="5" height="2" /> </bezel>
- <bezel element="text_p5"> <bounds x="33.25" y="6.5" width="5" height="2" /> </bezel>
- <bezel element="text_p4"> <bounds x="39.25" y="6.5" width="5" height="2" /> </bezel>
- <bezel element="text_p3"> <bounds x="45.25" y="6.5" width="5" height="2" /> </bezel>
- <bezel element="text_p2"> <bounds x="52.25" y="6.5" width="5" height="2" /> </bezel>
- <bezel element="text_p1"> <bounds x="58.25" y="6.5" width="5" height="2" /> </bezel>
+ <bezel element="text_p6"> <bounds x="27.25" y="6.5" width="5" height="1.5" /> </bezel>
+ <bezel element="text_p5"> <bounds x="33.25" y="6.5" width="5" height="1.5" /> </bezel>
+ <bezel element="text_p4"> <bounds x="39.25" y="6.5" width="5" height="1.5" /> </bezel>
+ <bezel element="text_p3"> <bounds x="45.25" y="6.5" width="5" height="1.5" /> </bezel>
+ <bezel element="text_p2"> <bounds x="52.25" y="6.5" width="5" height="1.5" /> </bezel>
+ <bezel element="text_p1"> <bounds x="58.25" y="6.5" width="5" height="1.5" /> </bezel>
<bezel element="text_newgame"> <bounds x="65.25" y="6.70" width="9" height="1.5" /> </bezel>
<bezel element="text_black"> <bounds x="64" y="0" width="2" height="1.3" /> </bezel>
<bezel element="text_white"> <bounds x="70" y="0" width="2" height="1.3" /> </bezel>
diff --git a/src/mame/layout/mephisto_lcd.lay b/src/mame/layout/mephisto_lcd.lay
index b8e2a0ec110..0aee33c571f 100644
--- a/src/mame/layout/mephisto_lcd.lay
+++ b/src/mame/layout/mephisto_lcd.lay
@@ -58,12 +58,12 @@
<element name="text_fct"> <rect><color red="0" green="0" blue="0" /></rect> <text string="FCT"> <color red="0.76" green="0.74" blue="0.41" /></text> </element>
<element name="text_ent"> <rect><color red="0" green="0" blue="0" /></rect> <text string="ENT"> <color red="0.76" green="0.74" blue="0.41" /></text> </element>
<element name="text_cl"> <rect><color red="0" green="0" blue="0" /></rect> <text string="CL"> <color red="0.76" green="0.74" blue="0.41" /></text> </element>
- <element name="text_p1"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x265a;"> <color red="0.76" green="0.74" blue="0.41" /></text> </element>
- <element name="text_p2"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x265b;"> <color red="0.76" green="0.74" blue="0.41" /></text> </element>
- <element name="text_p3"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x265c;"> <color red="0.76" green="0.74" blue="0.41" /></text> </element>
- <element name="text_p4"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x265d;"> <color red="0.76" green="0.74" blue="0.41" /></text> </element>
- <element name="text_p5"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x265e;"> <color red="0.76" green="0.74" blue="0.41" /></text> </element>
- <element name="text_p6"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x265f;"> <color red="0.76" green="0.74" blue="0.41" /></text> </element>
+ <element name="text_p1"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[K]"> <color red="0.76" green="0.74" blue="0.41" /></text> </element>
+ <element name="text_p2"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[Q]"> <color red="0.76" green="0.74" blue="0.41" /></text> </element>
+ <element name="text_p3"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[R]"> <color red="0.76" green="0.74" blue="0.41" /></text> </element>
+ <element name="text_p4"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[B]"> <color red="0.76" green="0.74" blue="0.41" /></text> </element>
+ <element name="text_p5"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[N]"> <color red="0.76" green="0.74" blue="0.41" /></text> </element>
+ <element name="text_p6"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[P]"> <color red="0.76" green="0.74" blue="0.41" /></text> </element>
<element name="text_lcd"> <rect><color red="0" green="0" blue="0" /></rect> <text string="16/32 BIT DISPLAY MODUL"><color red="0.76" green="0.74" blue="0.41" /></text> </element>
<!-- build screen -->
@@ -87,12 +87,12 @@
<bezel element="text_ent"> <bounds x="47.5" y="7" width="3.5" height="1.2" /> </bezel>
<bezel element="text_cl"> <bounds x="52.5" y="7" width="3.5" height="1.3" /> </bezel>
- <bezel element="text_p6"> <bounds x="27.5" y="4.5" width="3.5" height="2" /> </bezel>
- <bezel element="text_p5"> <bounds x="32.5" y="4.5" width="3.5" height="2" /> </bezel>
- <bezel element="text_p4"> <bounds x="37.5" y="4.5" width="3.5" height="2" /> </bezel>
- <bezel element="text_p3"> <bounds x="42.5" y="4.5" width="3.5" height="2" /> </bezel>
- <bezel element="text_p2"> <bounds x="47.5" y="4.5" width="3.5" height="2" /> </bezel>
- <bezel element="text_p1"> <bounds x="52.5" y="4.5" width="3.5" height="2" /> </bezel>
+ <bezel element="text_p6"> <bounds x="27.5" y="4.5" width="4" height="1.7" /></bezel>
+ <bezel element="text_p5"> <bounds x="32.5" y="4.5" width="4" height="1.7" /></bezel>
+ <bezel element="text_p4"> <bounds x="37.5" y="4.5" width="4" height="1.7" /></bezel>
+ <bezel element="text_p3"> <bounds x="42.5" y="4.5" width="4" height="1.7" /></bezel>
+ <bezel element="text_p2"> <bounds x="47.5" y="4.5" width="4" height="1.7" /></bezel>
+ <bezel element="text_p1"> <bounds x="52.5" y="4.5" width="4" height="1.7" /></bezel>
<bezel element="hlb" inputtag="KEY" inputmask="0x01"> <bounds x="27.5" y="2" width="3.5" height="2.5" /> </bezel>
<bezel element="hlb" inputtag="KEY" inputmask="0x02"> <bounds x="32.5" y="2" width="3.5" height="2.5" /> </bezel>
diff --git a/src/mame/layout/mephisto_megaiv.lay b/src/mame/layout/mephisto_megaiv.lay
index de70b364aee..b90656a2fc9 100644
--- a/src/mame/layout/mephisto_megaiv.lay
+++ b/src/mame/layout/mephisto_megaiv.lay
@@ -65,14 +65,14 @@
<element name="text_lev"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="LEV"> <color red="0" green="0" blue="0" /></text> </element>
<element name="text_black"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="&#x25a0;"> <color red="0" green="0" blue="0" /></text> </element>
<element name="text_white"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="&#x25a1;"> <color red="0" green="0" blue="0" /></text> </element>
- <element name="text_b1"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="&#x265f; 1"> <color red="0" green="0" blue="0" /></text> </element>
- <element name="text_b2"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="&#x265e; 2"> <color red="0" green="0" blue="0" /></text> </element>
- <element name="text_b3"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="&#x265d; 3"> <color red="0" green="0" blue="0" /></text> </element>
- <element name="text_b4"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="&#x265c; 4"> <color red="0" green="0" blue="0" /></text> </element>
- <element name="text_b5"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="&#x265b; 5"> <color red="0" green="0" blue="0" /></text> </element>
- <element name="text_b6"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="&#x265a; 6"> <color red="0" green="0" blue="0" /></text> </element>
- <element name="text_b7"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="&#x25a0; 7 &#x25c0;"> <color red="0" green="0" blue="0" /></text> </element>
- <element name="text_b8"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="&#x25a1; 8 &#x25b6;"> <color red="0" green="0" blue="0" /></text> </element>
+ <element name="text_b1"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="[P] 1"> <color red="0" green="0" blue="0" /></text> </element>
+ <element name="text_b2"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="[N] 2"> <color red="0" green="0" blue="0" /></text> </element>
+ <element name="text_b3"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="[B] 3"> <color red="0" green="0" blue="0" /></text> </element>
+ <element name="text_b4"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="[R] 4"> <color red="0" green="0" blue="0" /></text> </element>
+ <element name="text_b5"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="[Q] 5"> <color red="0" green="0" blue="0" /></text> </element>
+ <element name="text_b6"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="[K] 6"> <color red="0" green="0" blue="0" /></text> </element>
+ <element name="text_b7"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="&#x25a0; 7 &#x25c4;"> <color red="0" green="0" blue="0" /></text> </element>
+ <element name="text_b8"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="&#x25a1; 8 &#x25ba;"> <color red="0" green="0" blue="0" /></text> </element>
<element name="text_book9"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="BOOK 9"> <color red="0" green="0" blue="0" /></text> </element>
<element name="text_pos0"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="POS 0"> <color red="0" green="0" blue="0" /></text> </element>
<element name="text_cl"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="CL"> <color red="0" green="0" blue="0" /></text> </element>
diff --git a/src/mame/layout/mephisto_milano.lay b/src/mame/layout/mephisto_milano.lay
index 2f1f14c3bd6..080dcb47fef 100644
--- a/src/mame/layout/mephisto_milano.lay
+++ b/src/mame/layout/mephisto_milano.lay
@@ -59,12 +59,12 @@
<element name="text_enter"> <rect><color red="0" green="0" blue="0" /></rect> <text string="ENTER"> <color red="1" green="1" blue="1" /></text> </element>
<element name="text_clear"> <rect><color red="0" green="0" blue="0" /></rect> <text string="CLEAR"> <color red="1" green="1" blue="1" /></text> </element>
<element name="text_newgame"> <rect><color red="0" green="0" blue="0" /></rect> <text string="NEW GAME"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_p1"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x265a;"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_p2"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x265b;"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_p3"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x265c;"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_p4"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x265d;"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_p5"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x265e;"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_p6"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x265f;"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_p1"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[K]"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_p2"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[Q]"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_p3"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[R]"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_p4"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[B]"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_p5"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[N]"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_p6"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[P]"> <color red="1" green="1" blue="1" /></text> </element>
<!-- build screen -->
@@ -88,12 +88,12 @@
<bezel element="text_function"> <bounds x="6.5" y="18" width="5" height="1.2" /> </bezel>
<bezel element="text_enter"> <bounds x="12.5" y="18" width="5" height="1.2" /> </bezel>
<bezel element="text_clear"> <bounds x="18.5" y="18" width="5" height="1.2" /> </bezel>
- <bezel element="text_p6"> <bounds x="0.5" y="12" width="5" height="2.5" /> </bezel>
- <bezel element="text_p5"> <bounds x="6.5" y="12" width="5" height="2.5" /> </bezel>
- <bezel element="text_p4"> <bounds x="12.5" y="12" width="5" height="2.5" /> </bezel>
- <bezel element="text_p3"> <bounds x="18.5" y="12" width="5" height="2.5" /> </bezel>
- <bezel element="text_p2"> <bounds x="0.5" y="21" width="5" height="2.5" /> </bezel>
- <bezel element="text_p1"> <bounds x="6.5" y="21" width="5" height="2.5" /> </bezel>
+ <bezel element="text_p6"> <bounds x="0.5" y="12" width="5" height="1.7" /> </bezel>
+ <bezel element="text_p5"> <bounds x="6.5" y="12" width="5" height="1.7" /> </bezel>
+ <bezel element="text_p4"> <bounds x="12.5" y="12" width="5" height="1.7" /> </bezel>
+ <bezel element="text_p3"> <bounds x="18.5" y="12" width="5" height="1.7" /> </bezel>
+ <bezel element="text_p2"> <bounds x="0.5" y="21" width="5" height="1.7" /> </bezel>
+ <bezel element="text_p1"> <bounds x="6.5" y="21" width="5" height="1.7" /> </bezel>
<bezel element="text_newgame"> <bounds x="12.5" y="22" width="11" height="1.4" /> </bezel>
<bezel name="led100" element="led"> <bounds x="2.5" y="7" width="1.2" height="1.2" /> </bezel>
diff --git a/src/mame/layout/mephisto_modena.lay b/src/mame/layout/mephisto_modena.lay
index 0b238c55ddd..2908d489b04 100644
--- a/src/mame/layout/mephisto_modena.lay
+++ b/src/mame/layout/mephisto_modena.lay
@@ -64,12 +64,12 @@
<element name="text_enter"> <rect><color red="0" green="0" blue="0" /></rect> <text string="ENTER"> <color red="1" green="1" blue="1" /></text> </element>
<element name="text_clear"> <rect><color red="0" green="0" blue="0" /></rect> <text string="CLEAR"> <color red="1" green="1" blue="1" /></text> </element>
<element name="text_newgame"> <rect><color red="0" green="0" blue="0" /></rect> <text string="NEW GAME"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_p1"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x265a;"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_p2"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x265b;"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_p3"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x265c;"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_p4"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x265d;"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_p5"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x265e;"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_p6"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x265f;"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_p1"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[K]"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_p2"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[Q]"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_p3"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[R]"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_p4"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[B]"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_p5"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[N]"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_p6"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[P]"> <color red="1" green="1" blue="1" /></text> </element>
<!-- build screen -->
<group name="panel">
@@ -96,12 +96,12 @@
<bezel element="text_enter"> <bounds x="12" y="18" width="5" height="1.2" /> </bezel>
<bezel element="text_clear"> <bounds x="18" y="18" width="5" height="1.2" /> </bezel>
- <bezel element="text_p6"> <bounds x="0" y="12" width="5" height="2.5" /> </bezel>
- <bezel element="text_p5"> <bounds x="6" y="12" width="5" height="2.5" /> </bezel>
- <bezel element="text_p4"> <bounds x="12" y="12" width="5" height="2.5" /> </bezel>
- <bezel element="text_p3"> <bounds x="18" y="12" width="5" height="2.5" /> </bezel>
- <bezel element="text_p2"> <bounds x="0" y="21" width="5" height="2.5" /> </bezel>
- <bezel element="text_p1"> <bounds x="6" y="21" width="5" height="2.5" /> </bezel>
+ <bezel element="text_p6"> <bounds x="0" y="12" width="5" height="1.7" /> </bezel>
+ <bezel element="text_p5"> <bounds x="6" y="12" width="5" height="1.7" /> </bezel>
+ <bezel element="text_p4"> <bounds x="12" y="12" width="5" height="1.7" /> </bezel>
+ <bezel element="text_p3"> <bounds x="18" y="12" width="5" height="1.7" /> </bezel>
+ <bezel element="text_p2"> <bounds x="0" y="21" width="5" height="1.7" /> </bezel>
+ <bezel element="text_p1"> <bounds x="6" y="21" width="5" height="1.7" /> </bezel>
<bezel element="text_newgame"> <bounds x="12" y="22" width="11" height="1.4" /> </bezel>
<bezel name="led100" element="led"> <bounds x="1.75" y="7" width="1.2" height="1.2" /> </bezel>
diff --git a/src/mame/layout/mephisto_mondial2.lay b/src/mame/layout/mephisto_mondial2.lay
index acdf037fca2..0122999b804 100644
--- a/src/mame/layout/mephisto_mondial2.lay
+++ b/src/mame/layout/mephisto_mondial2.lay
@@ -68,12 +68,12 @@
<element name="text_plus"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="+"> <color red="0.90" green="0.91" blue="0.89" /></text> </element>
<element name="text_black"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="&#x25a1;"> <color red="0.90" green="0.91" blue="0.89" /></text> </element>
<element name="text_white"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="&#x25a0;"> <color red="0.90" green="0.91" blue="0.89" /></text> </element>
- <element name="text_b1"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="&#x265f; 1"> <color red="0.90" green="0.91" blue="0.89" /></text> </element>
- <element name="text_b2"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="&#x265e; 2"> <color red="0.90" green="0.91" blue="0.89" /></text> </element>
- <element name="text_b3"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="&#x265d; 3"> <color red="0.90" green="0.91" blue="0.89" /></text> </element>
- <element name="text_b4"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="&#x265c; 4"> <color red="0.90" green="0.91" blue="0.89" /></text> </element>
- <element name="text_b5"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="&#x265b; 5"> <color red="0.90" green="0.91" blue="0.89" /></text> </element>
- <element name="text_b6"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="&#x265a; 6"> <color red="0.90" green="0.91" blue="0.89" /></text> </element>
+ <element name="text_b1"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="[P] 1"> <color red="0.90" green="0.91" blue="0.89" /></text> </element>
+ <element name="text_b2"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="[N] 2"> <color red="0.90" green="0.91" blue="0.89" /></text> </element>
+ <element name="text_b3"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="[B] 3"> <color red="0.90" green="0.91" blue="0.89" /></text> </element>
+ <element name="text_b4"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="[R] 4"> <color red="0.90" green="0.91" blue="0.89" /></text> </element>
+ <element name="text_b5"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="[Q] 5"> <color red="0.90" green="0.91" blue="0.89" /></text> </element>
+ <element name="text_b6"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="[K] 6"> <color red="0.90" green="0.91" blue="0.89" /></text> </element>
<element name="text_b7"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="&#x25a1; 7"> <color red="0.90" green="0.91" blue="0.89" /></text> </element>
<element name="text_b8"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="&#x25a0; 8"> <color red="0.90" green="0.91" blue="0.89" /></text> </element>
<element name="text_play"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="PLAY"> <color red="0.90" green="0.91" blue="0.89" /></text> </element>
diff --git a/src/mame/layout/mephisto_montec.lay b/src/mame/layout/mephisto_montec.lay
index f2afb906c98..5e6aa5c2cf8 100644
--- a/src/mame/layout/mephisto_montec.lay
+++ b/src/mame/layout/mephisto_montec.lay
@@ -65,14 +65,14 @@
<element name="text_lev"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="LEV"> <color red="1" green="1" blue="1" /></text> </element>
<element name="text_black"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="&#x25a1;"> <color red="1" green="1" blue="1" /></text> </element>
<element name="text_white"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="&#x25a0;"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_b1"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="&#x265f; 1"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_b2"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="&#x265e; 2"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_b3"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="&#x265d; 3"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_b4"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="&#x265c; 4"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_b5"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="&#x265b; 5"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_b6"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="&#x265a; 6"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_b7"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="&#x25a1; 7 &#x25c0;"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_b8"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="&#x25a0; 8 &#x25b6;"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_b1"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="[P] 1"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_b2"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="[N] 2"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_b3"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="[B] 3"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_b4"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="[R] 4"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_b5"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="[Q] 5"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_b6"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="[K] 6"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_b7"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="&#x25a1; 7 &#x25c4;"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_b8"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="&#x25a0; 8 &#x25ba;"> <color red="1" green="1" blue="1" /></text> </element>
<element name="text_book9"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="BOOK 9"> <color red="1" green="1" blue="1" /></text> </element>
<element name="text_pos0"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="POS 0"> <color red="1" green="1" blue="1" /></text> </element>
<element name="text_cl"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="CL"> <color red="1" green="1" blue="1" /></text> </element>
diff --git a/src/mame/layout/mephisto_smondial2.lay b/src/mame/layout/mephisto_smondial2.lay
index 025cd47614a..1294e648ca4 100644
--- a/src/mame/layout/mephisto_smondial2.lay
+++ b/src/mame/layout/mephisto_smondial2.lay
@@ -68,14 +68,14 @@
<element name="text_pos"> <rect><color red="0" green="0" blue="0" /></rect> <text string="POS"> <color red="1" green="1" blue="1" /></text> </element>
<element name="text_mem"> <rect><color red="0" green="0" blue="0" /></rect> <text string="MEM"> <color red="1" green="1" blue="1" /></text> </element>
<element name="text_lev"> <rect><color red="0" green="0" blue="0" /></rect> <text string="LEV"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_b1"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x265f; 1"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_b2"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x265e; 2"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_b3"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x265d; 3"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_b4"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x265c; 4"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_b5"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x265b; 5"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_b6"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x265a; 6"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_b7"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x25a1; 7 &#x25c0;"> <color red="1" green="1" blue="1" /></text> </element>
- <element name="text_b8"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x25a0; 8 &#x25b6;"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_b1"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[P] 1"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_b2"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[N] 2"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_b3"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[B] 3"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_b4"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[R] 4"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_b5"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[Q] 5"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_b6"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[K] 6"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_b7"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x25a1; 7 &#x25c4;"> <color red="1" green="1" blue="1" /></text> </element>
+ <element name="text_b8"> <rect><color red="0" green="0" blue="0" /></rect> <text string="&#x25a0; 8 &#x25ba;"> <color red="1" green="1" blue="1" /></text> </element>
<element name="text_help9"> <rect><color red="0.8" green="0" blue="0" /></rect> <text string="HELP 9"> <color red="1" green="1" blue="1" /></text> </element>
<element name="text_info0"> <rect><color red="0" green="0" blue="0" /></rect> <text string="INFO 0"> <color red="1" green="1" blue="1" /></text> </element>
<element name="text_cl"> <rect><color red="0" green="0" blue="0" /></rect> <text string="CL"> <color red="1" green="1" blue="1" /></text> </element>
diff --git a/src/mame/layout/novag_cforte.lay b/src/mame/layout/novag_cforte.lay
index 57926b35213..ec82af339dd 100644
--- a/src/mame/layout/novag_cforte.lay
+++ b/src/mame/layout/novag_cforte.lay
@@ -99,11 +99,11 @@
</element>
<element name="text_m8x">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&lt;-"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="&#x2190;"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_r8x">
<rect><color red="0.7" green="0.13" blue="0.12" /></rect>
- <text string="-&gt;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="&#x2192;"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_m1a"><text string="Player/Player"><color red="0.51" green="0.5" blue="0.49" /></text></element>
@@ -142,27 +142,27 @@
<element name="text_king">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265a;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="[K]"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_queen">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265b;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="[Q]"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_rook">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265c;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="[R]"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_bishop">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265d;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="[B]"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_knight">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265e;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="[N]"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_pawn">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265f;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="[P]"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
@@ -372,12 +372,12 @@
<bezel element="white"><bounds x="101.25" y="70.29" width="6" height="4" /></bezel>
<bezel element="static_red"><bounds x="101.25" y="78.00" width="6" height="4" /></bezel>
- <bezel element="text_king"><bounds x="93.13" y="24.50" width="3" height="3" /></bezel>
- <bezel element="text_queen"><bounds x="93.13" y="32.21" width="3" height="3" /></bezel>
- <bezel element="text_bishop"><bounds x="93.13" y="39.93" width="3" height="3" /></bezel>
- <bezel element="text_knight"><bounds x="93.13" y="47.64" width="3" height="3" /></bezel>
- <bezel element="text_rook"><bounds x="93.13" y="55.36" width="3" height="3" /></bezel>
- <bezel element="text_pawn"><bounds x="93.13" y="63.07" width="3" height="3" /></bezel>
+ <bezel element="text_king"><bounds x="93.13" y="24.70" width="3" height="2.2" /></bezel>
+ <bezel element="text_queen"><bounds x="93.13" y="32.41" width="3" height="2.2" /></bezel>
+ <bezel element="text_bishop"><bounds x="93.13" y="40.13" width="3" height="2.2" /></bezel>
+ <bezel element="text_knight"><bounds x="93.13" y="47.84" width="3" height="2.2" /></bezel>
+ <bezel element="text_rook"><bounds x="93.13" y="55.56" width="3" height="2.2" /></bezel>
+ <bezel element="text_pawn"><bounds x="93.13" y="63.27" width="3" height="2.2" /></bezel>
<bezel element="text_r2x"><bounds x="101.26" y="33.01" width="5.98" height="1.4" /></bezel>
<bezel element="text_r3x"><bounds x="101.26" y="40.73" width="5.98" height="1.4" /></bezel>
@@ -385,8 +385,8 @@
<bezel element="text_r5x"><bounds x="101.26" y="56.16" width="5.98" height="1.4" /></bezel>
<bezel element="text_r6x"><bounds x="101.26" y="63.87" width="5.98" height="1.4" /></bezel>
<bezel element="text_r7x"><bounds x="101.26" y="71.59" width="5.98" height="1.4" /></bezel>
- <bezel element="text_r8x"><bounds x="101.26" y="78.50" width="5.98" height="3" /></bezel>
- <bezel element="text_m8x"><bounds x="91.64" y="78.50" width="5.98" height="3" /></bezel>
+ <bezel element="text_r8x"><bounds x="101.26" y="78.30" width="5.98" height="3" /></bezel>
+ <bezel element="text_m8x"><bounds x="91.64" y="78.30" width="5.98" height="3" /></bezel>
<bezel element="hlb" inputtag="IN.0" inputmask="0x200"><bounds x="91.63" y="24.00" width="6" height="4" /><color alpha="0.4" /></bezel>
<bezel element="hlb" inputtag="IN.1" inputmask="0x200"><bounds x="91.63" y="31.71" width="6" height="4" /><color alpha="0.4" /></bezel>
diff --git a/src/mame/layout/novag_delta1.lay b/src/mame/layout/novag_delta1.lay
index 68ea1072544..43268e1da9c 100644
--- a/src/mame/layout/novag_delta1.lay
+++ b/src/mame/layout/novag_delta1.lay
@@ -3,20 +3,293 @@
<!-- define elements -->
+ <element name="black"><rect><color red="0.16" green="0.16" blue="0.16" /></rect></element>
+ <element name="black2"><rect><color red="0.1" green="0.1" blue="0.1" /></rect></element>
+ <element name="white"><rect><color red="0.8" green="0.8" blue="0.8" /></rect></element>
+ <element name="white2"><rect><color red="0.96" green="0.96" blue="0.96" /></rect></element>
+ <element name="brown"><rect><color red="0.55" green="0.48" blue="0.4" /></rect></element>
+
+ <element name="led"><disk><color red="1.0" green="0.1" blue="0.15" /></disk></element>
+
<element name="digit" defstate="0">
<led7seg><color red="1.0" green="0.1" blue="0.15" /></led7seg>
</element>
+ <element name="hl" defstate="0">
+ <text string=" ">
+ <bounds x="0.0" y="0.0" width="1.0" height="1.0" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </text>
+ <rect state="1">
+ <bounds x="0.0" y="0.0" width="1.0" height="1.0" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </rect>
+ </element>
+
+ <element name="text_b01a">
+ <rect><color red="0.55" green="0.48" blue="0.4" /></rect>
+ <text string="A" align="1"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_b01b">
+ <rect><color red="0.55" green="0.48" blue="0.4" /></rect>
+ <text string="1" align="2"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_b01c">
+ <rect><color red="0.55" green="0.48" blue="0.4" /></rect>
+ <text string="[K]"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_b02a">
+ <rect><color red="0.55" green="0.48" blue="0.4" /></rect>
+ <text string="B" align="1"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_b02b">
+ <rect><color red="0.55" green="0.48" blue="0.4" /></rect>
+ <text string="2" align="2"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_b02c">
+ <rect><color red="0.55" green="0.48" blue="0.4" /></rect>
+ <text string="[Q]"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_b03a">
+ <rect><color red="0.55" green="0.48" blue="0.4" /></rect>
+ <text string="C" align="1"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_b03b">
+ <rect><color red="0.55" green="0.48" blue="0.4" /></rect>
+ <text string="3" align="2"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_b03c">
+ <rect><color red="0.55" green="0.48" blue="0.4" /></rect>
+ <text string="[R]"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_b04a">
+ <rect><color red="0.55" green="0.48" blue="0.4" /></rect>
+ <text string="D" align="1"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_b04b">
+ <rect><color red="0.55" green="0.48" blue="0.4" /></rect>
+ <text string="4" align="2"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_b05a">
+ <rect><color red="0.55" green="0.48" blue="0.4" /></rect>
+ <text string="E" align="1"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_b05b">
+ <rect><color red="0.55" green="0.48" blue="0.4" /></rect>
+ <text string="5" align="2"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_b05c">
+ <rect><color red="0.55" green="0.48" blue="0.4" /></rect>
+ <text string="[B]"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_b06a">
+ <rect><color red="0.55" green="0.48" blue="0.4" /></rect>
+ <text string="F" align="1"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_b06b">
+ <rect><color red="0.55" green="0.48" blue="0.4" /></rect>
+ <text string="6" align="2"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_b06c">
+ <rect><color red="0.55" green="0.48" blue="0.4" /></rect>
+ <text string="[N]"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_b07a">
+ <rect><color red="0.55" green="0.48" blue="0.4" /></rect>
+ <text string="G" align="1"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_b07b">
+ <rect><color red="0.55" green="0.48" blue="0.4" /></rect>
+ <text string="7" align="2"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_b07c">
+ <rect><color red="0.55" green="0.48" blue="0.4" /></rect>
+ <text string="[P]"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_b08a">
+ <rect><color red="0.55" green="0.48" blue="0.4" /></rect>
+ <text string="H" align="1"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_b08b">
+ <rect><color red="0.55" green="0.48" blue="0.4" /></rect>
+ <text string="8" align="2"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_b09">
+ <rect><color red="0.55" green="0.48" blue="0.4" /></rect>
+ <text string="CE"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_b18">
+ <rect><color red="0.55" green="0.48" blue="0.4" /></rect>
+ <text string="ENTER"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+
+ <element name="text_b10b">
+ <rect><color red="0.8" green="0.8" blue="0.8" /></rect>
+ <text string="9" align="2"><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+ <element name="text_b10c">
+ <rect><color red="0.8" green="0.8" blue="0.8" /></rect>
+ <text string="[K]"><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+ <element name="text_b11b">
+ <rect><color red="0.8" green="0.8" blue="0.8" /></rect>
+ <text string="0" align="2"><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+ <element name="text_b11c">
+ <rect><color red="0.8" green="0.8" blue="0.8" /></rect>
+ <text string="[Q]"><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+ <element name="text_b12a">
+ <rect><color red="0.8" green="0.8" blue="0.8" /></rect>
+ <text string="T" align="1"><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+ <element name="text_b12c">
+ <rect><color red="0.8" green="0.8" blue="0.8" /></rect>
+ <text string="[R]"><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+ <element name="text_b13a">
+ <rect><color red="0.8" green="0.8" blue="0.8" /></rect>
+ <text string="&#x2192;" align="1"><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+ <element name="text_b13b">
+ <rect><color red="0.8" green="0.8" blue="0.8" /></rect>
+ <text string="T" align="2"><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+ <element name="text_b14a">
+ <rect><color red="0.8" green="0.8" blue="0.8" /></rect>
+ <text string="FP" align="1"><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+ <element name="text_b14c">
+ <rect><color red="0.8" green="0.8" blue="0.8" /></rect>
+ <text string="[B]"><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+ <element name="text_b15a">
+ <rect><color red="0.8" green="0.8" blue="0.8" /></rect>
+ <text string="EP" align="1"><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+ <element name="text_b15c">
+ <rect><color red="0.8" green="0.8" blue="0.8" /></rect>
+ <text string="[N]"><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+ <element name="text_b16c">
+ <rect><color red="0.8" green="0.8" blue="0.8" /></rect>
+ <text string="[P]"><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+ <element name="text_b17">
+ <rect><color red="0.8" green="0.8" blue="0.8" /></rect>
+ <text string="CB"><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+
+ <element name="text_d1"><text string="TIME DISPLAY"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_d2"><text string="TIME SET"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_d3"><text string="CHANGE COLOR"><color red="0.9" green="0.9" blue="0.9" /></text></element> <!-- this label isn't on the real device -->
+ <element name="text_d4"><text string="NEW GAME"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+
<!-- build screen -->
<view name="Internal Layout">
- <bounds left="0" right="40" top="0" bottom="15" />
+ <bounds left="-1.5" right="88.5" top="4" bottom="39" />
+
+ <bezel element="black"><bounds x="-1.5" y="17.5" width="90" height="1" /></bezel>
+ <bezel element="led"><bounds x="4.5" y="13.5" width="2.5" height="2.5" /></bezel> <!-- power led, always on -->
+
+ <bezel name="digit3" element="digit"><bounds x="10" y="5.5" width="7" height="10.5" /></bezel>
+ <bezel name="digit2" element="digit"><bounds x="17" y="5.5" width="7" height="10.5" /></bezel>
+ <bezel name="digit1" element="digit"><bounds x="24" y="5.5" width="7" height="10.5" /></bezel>
+ <bezel name="digit0" element="digit"><bounds x="31" y="5.5" width="7" height="10.5" /></bezel>
+
+ <!-- button panel -->
+
+ <bezel element="text_d1"><bounds x="17" y="37.2" width="13" height="1.5" /></bezel>
+ <bezel element="text_d2"><bounds x="27" y="37.2" width="13" height="1.5" /></bezel>
+ <bezel element="text_d3"><bounds x="57" y="37.2" width="13" height="1.5" /></bezel>
+ <bezel element="text_d4"><bounds x="67" y="37.2" width="13" height="1.5" /></bezel>
+
+ <bezel element="brown"><bounds x="0" y="20" width="7" height="7" /></bezel>
+ <bezel element="brown"><bounds x="10" y="20" width="7" height="7" /></bezel>
+ <bezel element="brown"><bounds x="20" y="20" width="7" height="7" /></bezel>
+ <bezel element="brown"><bounds x="30" y="20" width="7" height="7" /></bezel>
+ <bezel element="brown"><bounds x="40" y="20" width="7" height="7" /></bezel>
+ <bezel element="brown"><bounds x="50" y="20" width="7" height="7" /></bezel>
+ <bezel element="brown"><bounds x="60" y="20" width="7" height="7" /></bezel>
+ <bezel element="brown"><bounds x="70" y="20" width="7" height="7" /></bezel>
+ <bezel element="brown"><bounds x="80" y="20" width="7" height="7" /></bezel>
+
+ <bezel element="white"><bounds x="0" y="30" width="7" height="7" /></bezel>
+ <bezel element="white"><bounds x="10" y="30" width="7" height="7" /></bezel>
+ <bezel element="white"><bounds x="20" y="30" width="7" height="7" /></bezel>
+ <bezel element="white"><bounds x="30" y="30" width="7" height="7" /></bezel>
+ <bezel element="white"><bounds x="40" y="30" width="7" height="7" /></bezel>
+ <bezel element="white"><bounds x="50" y="30" width="7" height="7" /></bezel>
+ <bezel element="white"><bounds x="60" y="30" width="7" height="7" /></bezel>
+ <bezel element="white"><bounds x="70" y="30" width="7" height="7" /></bezel>
+ <bezel element="brown"><bounds x="80" y="30" width="7" height="7" /></bezel>
+
+ <bezel element="white2"><bounds x="60.8" y="30.8" width="2" height="2" /></bezel>
+ <bezel element="black2"><bounds x="64.2" y="30.8" width="2" height="2" /></bezel>
+ <bezel element="black2"><bounds x="70.5" y="30.5" width="6" height="6" /></bezel>
+ <bezel element="white"><bounds x="70.7" y="30.7" width="5.6" height="5.6" /></bezel>
+
+ <bezel element="text_b01c"><bounds x="0.5" y="23.0" width="6" height="3" /></bezel>
+ <bezel element="text_b01a"><bounds x="0.9" y="20.5" width="5" height="2.5" /></bezel>
+ <bezel element="text_b01b"><bounds x="3.5" y="20.5" width="2.5" height="2.5" /></bezel>
+ <bezel element="text_b02c"><bounds x="10.5" y="23.0" width="6" height="3" /></bezel>
+ <bezel element="text_b02a"><bounds x="10.9" y="20.5" width="5" height="2.5" /></bezel>
+ <bezel element="text_b02b"><bounds x="13.5" y="20.5" width="2.5" height="2.5" /></bezel>
+ <bezel element="text_b03c"><bounds x="20.5" y="23.0" width="6" height="3" /></bezel>
+ <bezel element="text_b03a"><bounds x="20.9" y="20.5" width="5" height="2.5" /></bezel>
+ <bezel element="text_b03b"><bounds x="23.5" y="20.5" width="2.5" height="2.5" /></bezel>
+ <bezel element="text_b04a"><bounds x="30.9" y="20.5" width="5" height="2.5" /></bezel>
+ <bezel element="text_b04b"><bounds x="33.5" y="20.5" width="2.5" height="2.5" /></bezel>
+ <bezel element="text_b05c"><bounds x="40.5" y="23.0" width="6" height="3" /></bezel>
+ <bezel element="text_b05a"><bounds x="40.9" y="20.5" width="5" height="2.5" /></bezel>
+ <bezel element="text_b05b"><bounds x="43.5" y="20.5" width="2.5" height="2.5" /></bezel>
+ <bezel element="text_b06c"><bounds x="50.5" y="23.0" width="6" height="3" /></bezel>
+ <bezel element="text_b06a"><bounds x="50.9" y="20.5" width="5" height="2.5" /></bezel>
+ <bezel element="text_b06b"><bounds x="53.5" y="20.5" width="2.5" height="2.5" /></bezel>
+ <bezel element="text_b07c"><bounds x="60.5" y="23.0" width="6" height="3" /></bezel>
+ <bezel element="text_b07a"><bounds x="60.9" y="20.5" width="5" height="2.5" /></bezel>
+ <bezel element="text_b07b"><bounds x="63.5" y="20.5" width="2.5" height="2.5" /></bezel>
+ <bezel element="text_b08a"><bounds x="70.9" y="20.5" width="5" height="2.5" /></bezel>
+ <bezel element="text_b08b"><bounds x="73.5" y="20.5" width="2.5" height="2.5" /></bezel>
+ <bezel element="text_b09"><bounds x="80.5" y="21.75" width="6" height="3.5" /></bezel>
+
+ <bezel element="text_b10c"><bounds x="0.5" y="33.0" width="6" height="3" /></bezel>
+ <bezel element="text_b10b"><bounds x="3.5" y="30.5" width="2.5" height="2.5" /></bezel>
+ <bezel element="text_b11c"><bounds x="10.5" y="33.0" width="6" height="3" /></bezel>
+ <bezel element="text_b11b"><bounds x="13.5" y="30.5" width="2.5" height="2.5" /></bezel>
+ <bezel element="text_b12c"><bounds x="20.5" y="33.0" width="6" height="3" /></bezel>
+ <bezel element="text_b12a"><bounds x="20.9" y="30.5" width="5" height="2.5" /></bezel>
+ <bezel element="text_b13a"><bounds x="30.9" y="30.5" width="5" height="2.5" /></bezel>
+ <bezel element="text_b13b"><bounds x="33.5" y="30.5" width="2.5" height="2.5" /></bezel>
+ <bezel element="text_b14c"><bounds x="40.5" y="33.0" width="6" height="3" /></bezel>
+ <bezel element="text_b14a"><bounds x="40.9" y="30.5" width="5" height="2.5" /></bezel>
+ <bezel element="text_b15c"><bounds x="50.5" y="33.0" width="6" height="3" /></bezel>
+ <bezel element="text_b15a"><bounds x="50.9" y="30.5" width="5" height="2.5" /></bezel>
+ <bezel element="text_b16c"><bounds x="60.5" y="33.0" width="6" height="3" /></bezel>
+ <bezel element="text_b17"><bounds x="71.5" y="32.3" width="4" height="2.4" /></bezel>
+ <bezel element="text_b18"><bounds x="80.1" y="32.3" width="6.8" height="2.4" /></bezel>
+
+ <bezel element="hl" inputtag="IN.1" inputmask="0x01"><bounds x="0" y="20" width="7" height="7" /><color alpha="0.25" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x02"><bounds x="10" y="20" width="7" height="7" /><color alpha="0.25" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x04"><bounds x="20" y="20" width="7" height="7" /><color alpha="0.25" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x08"><bounds x="30" y="20" width="7" height="7" /><color alpha="0.25" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x01"><bounds x="40" y="20" width="7" height="7" /><color alpha="0.25" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x02"><bounds x="50" y="20" width="7" height="7" /><color alpha="0.25" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x04"><bounds x="60" y="20" width="7" height="7" /><color alpha="0.25" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x08"><bounds x="70" y="20" width="7" height="7" /><color alpha="0.25" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x08"><bounds x="80" y="20" width="7" height="7" /><color alpha="0.25" /></bezel>
- <bezel name="digit3" element="digit"><bounds x="0" y="0" width="10" height="15" /></bezel>
- <bezel name="digit2" element="digit"><bounds x="10" y="0" width="10" height="15" /></bezel>
- <bezel name="digit1" element="digit"><bounds x="20" y="0" width="10" height="15" /></bezel>
- <bezel name="digit0" element="digit"><bounds x="30" y="0" width="10" height="15" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x01"><bounds x="0" y="30" width="7" height="7" /><color alpha="0.22" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x02"><bounds x="10" y="30" width="7" height="7" /><color alpha="0.22" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x04"><bounds x="20" y="30" width="7" height="7" /><color alpha="0.22" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x02"><bounds x="30" y="30" width="7" height="7" /><color alpha="0.22" /></bezel>
+ <bezel element="hl" inputtag="IN.4" inputmask="0x01"><bounds x="40" y="30" width="7" height="7" /><color alpha="0.22" /></bezel>
+ <bezel element="hl" inputtag="IN.4" inputmask="0x02"><bounds x="50" y="30" width="7" height="7" /><color alpha="0.22" /></bezel>
+ <bezel element="hl" inputtag="IN.4" inputmask="0x04"><bounds x="60" y="30" width="7" height="7" /><color alpha="0.22" /></bezel>
+ <bezel element="hl" inputtag="RESET" inputmask="0x01"><bounds x="70" y="30" width="7" height="7" /><color alpha="0.22" /></bezel>
+ <bezel element="hl" inputtag="IN.4" inputmask="0x08"><bounds x="80" y="30" width="7" height="7" /><color alpha="0.25" /></bezel>
</view>
</mamelayout>
diff --git a/src/mame/layout/novag_diablo68k.lay b/src/mame/layout/novag_diablo68k.lay
index 4a3080648c7..2eddf42b940 100644
--- a/src/mame/layout/novag_diablo68k.lay
+++ b/src/mame/layout/novag_diablo68k.lay
@@ -102,12 +102,12 @@
<element name="text_r8a"><text string="Go"><color red="0.51" green="0.5" blue="0.49" /></text></element>
<element name="text_r8b"><text string=" "><color red="0.51" green="0.5" blue="0.49" /></text></element>
- <element name="text_king"><text string="&#x265a;"><color red="0.61" green="0.6" blue="0.59" /></text></element>
- <element name="text_queen"><text string="&#x265b;"><color red="0.61" green="0.6" blue="0.59" /></text></element>
- <element name="text_rook"><text string="&#x265c;"><color red="0.61" green="0.6" blue="0.59" /></text></element>
- <element name="text_bishop"><text string="&#x265d;"><color red="0.61" green="0.6" blue="0.59" /></text></element>
- <element name="text_knight"><text string="&#x265e;"><color red="0.61" green="0.6" blue="0.59" /></text></element>
- <element name="text_pawn"><text string="&#x265f;"><color red="0.61" green="0.6" blue="0.59" /></text></element>
+ <element name="text_king"><text string="[K]"><color red="0.61" green="0.6" blue="0.59" /></text></element>
+ <element name="text_queen"><text string="[Q]"><color red="0.61" green="0.6" blue="0.59" /></text></element>
+ <element name="text_rook"><text string="[R]"><color red="0.61" green="0.6" blue="0.59" /></text></element>
+ <element name="text_bishop"><text string="[B]"><color red="0.61" green="0.6" blue="0.59" /></text></element>
+ <element name="text_knight"><text string="[N]"><color red="0.61" green="0.6" blue="0.59" /></text></element>
+ <element name="text_pawn"><text string="[P]"><color red="0.61" green="0.6" blue="0.59" /></text></element>
<!-- build screen -->
@@ -368,12 +368,12 @@
<bezel element="but" inputtag="IN.1" inputmask="0x100"><bounds x="107.00" y="70.29" width="2.5" height="2.5" /></bezel>
<bezel element="but" inputtag="IN.0" inputmask="0x100"><bounds x="107.00" y="78.00" width="2.5" height="2.5" /></bezel>
- <bezel element="text_king"><bounds x="100.38" y="23.50" width="3" height="3" /></bezel>
- <bezel element="text_queen"><bounds x="100.38" y="31.21" width="3" height="3" /></bezel>
- <bezel element="text_bishop"><bounds x="100.38" y="38.93" width="3" height="3" /></bezel>
- <bezel element="text_knight"><bounds x="100.38" y="46.64" width="3" height="3" /></bezel>
- <bezel element="text_rook"><bounds x="100.38" y="54.36" width="3" height="3" /></bezel>
- <bezel element="text_pawn"><bounds x="100.38" y="62.07" width="3" height="3" /></bezel>
+ <bezel element="text_king"><bounds x="99.6" y="24.20" width="4" height="1.8" /></bezel>
+ <bezel element="text_queen"><bounds x="99.6" y="31.91" width="4" height="1.8" /></bezel>
+ <bezel element="text_bishop"><bounds x="99.6" y="39.63" width="4" height="1.8" /></bezel>
+ <bezel element="text_knight"><bounds x="99.6" y="47.34" width="4" height="1.8" /></bezel>
+ <bezel element="text_rook"><bounds x="99.6" y="54.86" width="4" height="1.8" /></bezel>
+ <bezel element="text_pawn"><bounds x="99.6" y="62.77" width="4" height="1.8" /></bezel>
<bezel element="text_l1a"><bounds x="82" y="22.35" width="14" height="1.4" /></bezel>
<bezel element="text_l1b"><bounds x="82" y="26.70" width="14" height="1.4" /></bezel>
diff --git a/src/mame/layout/novag_presto.lay b/src/mame/layout/novag_presto.lay
index 3bf1afb89f9..1c176ddf37b 100644
--- a/src/mame/layout/novag_presto.lay
+++ b/src/mame/layout/novag_presto.lay
@@ -88,27 +88,27 @@
<element name="text_king">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265a;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="[K]"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_queen">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265b;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="[Q]"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_rook">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265c;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="[R]"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_bishop">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265d;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="[B]"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_knight">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265e;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="[N]"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_pawn">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265f;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="[P]"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
@@ -315,12 +315,12 @@
<bezel element="white"><bounds x="86" y="66" width="6" height="4" /></bezel>
<bezel element="white"><bounds x="89" y="76" width="3" height="4" /></bezel>
- <bezel element="text_king"><bounds x="86" y="16.1" width="6" height="3.5" /></bezel>
- <bezel element="text_queen"><bounds x="86" y="26.1" width="6" height="3.5" /></bezel>
- <bezel element="text_bishop"><bounds x="86" y="36.1" width="6" height="3.5" /></bezel>
- <bezel element="text_knight"><bounds x="86" y="46.1" width="6" height="3.5" /></bezel>
- <bezel element="text_rook"><bounds x="86" y="56.1" width="6" height="3.5" /></bezel>
- <bezel element="text_pawn"><bounds x="86" y="66.1" width="6" height="3.5" /></bezel>
+ <bezel element="text_king"><bounds x="86" y="16.6" width="6" height="2.4" /></bezel>
+ <bezel element="text_queen"><bounds x="86" y="26.6" width="6" height="2.4" /></bezel>
+ <bezel element="text_bishop"><bounds x="86" y="36.6" width="6" height="2.4" /></bezel>
+ <bezel element="text_knight"><bounds x="86" y="46.6" width="6" height="2.4" /></bezel>
+ <bezel element="text_rook"><bounds x="86" y="56.6" width="6" height="2.4" /></bezel>
+ <bezel element="text_pawn"><bounds x="86" y="66.6" width="6" height="2.4" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x80"><bounds x="86" y="6" width="6" height="4" /><color alpha="0.25" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x40"><bounds x="86" y="16" width="6" height="4" /><color alpha="0.4" /></bezel>
diff --git a/src/mame/layout/novag_scorpio68k.lay b/src/mame/layout/novag_scorpio68k.lay
index 24a82948e43..be2ffa5875a 100644
--- a/src/mame/layout/novag_scorpio68k.lay
+++ b/src/mame/layout/novag_scorpio68k.lay
@@ -103,12 +103,12 @@
<element name="text_r8a"><text string="Go"><color red="0.3" green="0.7" blue="0.7" /></text></element>
<element name="text_r8b"><text string=" "><color red="0.51" green="0.5" blue="0.49" /></text></element>
- <element name="text_king"><text string="&#x265a;"><color red="0.3" green="0.7" blue="0.7" /></text></element>
- <element name="text_queen"><text string="&#x265b;"><color red="0.3" green="0.7" blue="0.7" /></text></element>
- <element name="text_rook"><text string="&#x265c;"><color red="0.3" green="0.7" blue="0.7" /></text></element>
- <element name="text_bishop"><text string="&#x265d;"><color red="0.3" green="0.7" blue="0.7" /></text></element>
- <element name="text_knight"><text string="&#x265e;"><color red="0.3" green="0.7" blue="0.7" /></text></element>
- <element name="text_pawn"><text string="&#x265f;"><color red="0.3" green="0.7" blue="0.7" /></text></element>
+ <element name="text_king"><text string="[K]"><color red="0.3" green="0.7" blue="0.7" /></text></element>
+ <element name="text_queen"><text string="[Q]"><color red="0.3" green="0.7" blue="0.7" /></text></element>
+ <element name="text_rook"><text string="[R]"><color red="0.3" green="0.7" blue="0.7" /></text></element>
+ <element name="text_bishop"><text string="[B]"><color red="0.3" green="0.7" blue="0.7" /></text></element>
+ <element name="text_knight"><text string="[N]"><color red="0.3" green="0.7" blue="0.7" /></text></element>
+ <element name="text_pawn"><text string="[P]"><color red="0.3" green="0.7" blue="0.7" /></text></element>
<!-- build screen -->
@@ -315,12 +315,12 @@
<bezel element="black"><bounds x="105.25" y="60.29" width="6" height="4" /></bezel>
<bezel element="black"><bounds x="105.25" y="68.00" width="6" height="4" /></bezel>
- <bezel element="text_king"><bounds x="95" y="17.5" width="2.5" height="2.5" /></bezel>
- <bezel element="text_queen"><bounds x="95" y="25.21" width="3" height="3" /></bezel>
- <bezel element="text_bishop"><bounds x="95" y="32.93" width="3" height="3" /></bezel>
- <bezel element="text_knight"><bounds x="95" y="40.64" width="3" height="3" /></bezel>
- <bezel element="text_rook"><bounds x="95" y="48.36" width="3" height="3" /></bezel>
- <bezel element="text_pawn"><bounds x="95" y="56.07" width="3" height="3" /></bezel>
+ <bezel element="text_king"><bounds x="95" y="18.20" width="2.5" height="1.4" /></bezel>
+ <bezel element="text_queen"><bounds x="95" y="25.91" width="3" height="1.4" /></bezel>
+ <bezel element="text_bishop"><bounds x="95" y="33.63" width="3" height="1.4" /></bezel>
+ <bezel element="text_knight"><bounds x="95" y="41.34" width="3" height="1.4" /></bezel>
+ <bezel element="text_rook"><bounds x="95" y="49.06" width="3" height="1.4" /></bezel>
+ <bezel element="text_pawn"><bounds x="95" y="56.77" width="3" height="1.4" /></bezel>
<bezel element="hlb" inputtag="IN.7" inputmask="0x400"><bounds x="86" y="14.00" width="6" height="4" /><color alpha="0.12" /></bezel>
<bezel element="hlb" inputtag="IN.6" inputmask="0x400"><bounds x="86" y="21.71" width="6" height="4" /><color alpha="0.12" /></bezel>
diff --git a/src/mame/layout/novag_sexpert.lay b/src/mame/layout/novag_sexpert.lay
index 4a3080648c7..2eddf42b940 100644
--- a/src/mame/layout/novag_sexpert.lay
+++ b/src/mame/layout/novag_sexpert.lay
@@ -102,12 +102,12 @@
<element name="text_r8a"><text string="Go"><color red="0.51" green="0.5" blue="0.49" /></text></element>
<element name="text_r8b"><text string=" "><color red="0.51" green="0.5" blue="0.49" /></text></element>
- <element name="text_king"><text string="&#x265a;"><color red="0.61" green="0.6" blue="0.59" /></text></element>
- <element name="text_queen"><text string="&#x265b;"><color red="0.61" green="0.6" blue="0.59" /></text></element>
- <element name="text_rook"><text string="&#x265c;"><color red="0.61" green="0.6" blue="0.59" /></text></element>
- <element name="text_bishop"><text string="&#x265d;"><color red="0.61" green="0.6" blue="0.59" /></text></element>
- <element name="text_knight"><text string="&#x265e;"><color red="0.61" green="0.6" blue="0.59" /></text></element>
- <element name="text_pawn"><text string="&#x265f;"><color red="0.61" green="0.6" blue="0.59" /></text></element>
+ <element name="text_king"><text string="[K]"><color red="0.61" green="0.6" blue="0.59" /></text></element>
+ <element name="text_queen"><text string="[Q]"><color red="0.61" green="0.6" blue="0.59" /></text></element>
+ <element name="text_rook"><text string="[R]"><color red="0.61" green="0.6" blue="0.59" /></text></element>
+ <element name="text_bishop"><text string="[B]"><color red="0.61" green="0.6" blue="0.59" /></text></element>
+ <element name="text_knight"><text string="[N]"><color red="0.61" green="0.6" blue="0.59" /></text></element>
+ <element name="text_pawn"><text string="[P]"><color red="0.61" green="0.6" blue="0.59" /></text></element>
<!-- build screen -->
@@ -368,12 +368,12 @@
<bezel element="but" inputtag="IN.1" inputmask="0x100"><bounds x="107.00" y="70.29" width="2.5" height="2.5" /></bezel>
<bezel element="but" inputtag="IN.0" inputmask="0x100"><bounds x="107.00" y="78.00" width="2.5" height="2.5" /></bezel>
- <bezel element="text_king"><bounds x="100.38" y="23.50" width="3" height="3" /></bezel>
- <bezel element="text_queen"><bounds x="100.38" y="31.21" width="3" height="3" /></bezel>
- <bezel element="text_bishop"><bounds x="100.38" y="38.93" width="3" height="3" /></bezel>
- <bezel element="text_knight"><bounds x="100.38" y="46.64" width="3" height="3" /></bezel>
- <bezel element="text_rook"><bounds x="100.38" y="54.36" width="3" height="3" /></bezel>
- <bezel element="text_pawn"><bounds x="100.38" y="62.07" width="3" height="3" /></bezel>
+ <bezel element="text_king"><bounds x="99.6" y="24.20" width="4" height="1.8" /></bezel>
+ <bezel element="text_queen"><bounds x="99.6" y="31.91" width="4" height="1.8" /></bezel>
+ <bezel element="text_bishop"><bounds x="99.6" y="39.63" width="4" height="1.8" /></bezel>
+ <bezel element="text_knight"><bounds x="99.6" y="47.34" width="4" height="1.8" /></bezel>
+ <bezel element="text_rook"><bounds x="99.6" y="54.86" width="4" height="1.8" /></bezel>
+ <bezel element="text_pawn"><bounds x="99.6" y="62.77" width="4" height="1.8" /></bezel>
<bezel element="text_l1a"><bounds x="82" y="22.35" width="14" height="1.4" /></bezel>
<bezel element="text_l1b"><bounds x="82" y="26.70" width="14" height="1.4" /></bezel>
diff --git a/src/mame/layout/novag_sforte.lay b/src/mame/layout/novag_sforte.lay
index bbaf5e249c0..f8f3f97275e 100644
--- a/src/mame/layout/novag_sforte.lay
+++ b/src/mame/layout/novag_sforte.lay
@@ -67,11 +67,11 @@
<element name="text_l6b"><text string="Start of Game"><color red="0.51" green="0.5" blue="0.49" /></text></element>
<element name="text_l7">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&lt;-"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="&#x2190;"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_l8">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="-&gt;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="&#x2192;"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_m1a"><text string="Player/Player"><color red="0.51" green="0.5" blue="0.49" /></text></element>
@@ -110,27 +110,27 @@
<element name="text_king">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265a;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="[K]"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_queen">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265b;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="[Q]"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_rook">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265c;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="[R]"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_bishop">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265d;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="[B]"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_knight">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265e;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="[N]"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_pawn">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265f;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="[P]"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
@@ -338,15 +338,15 @@
<bezel element="white"><bounds x="105.25" y="70.29" width="6" height="4" /></bezel>
<bezel element="static_red"><bounds x="105.25" y="78.00" width="6" height="4" /></bezel>
- <bezel element="text_l7"><bounds x="87.5" y="70.79" width="3" height="3" /></bezel>
- <bezel element="text_l8"><bounds x="87.5" y="78.50" width="3" height="3" /></bezel>
+ <bezel element="text_l7"><bounds x="87.5" y="70.59" width="3" height="3" /></bezel>
+ <bezel element="text_l8"><bounds x="87.5" y="78.30" width="3" height="3" /></bezel>
- <bezel element="text_king"><bounds x="97.13" y="24.50" width="3" height="3" /></bezel>
- <bezel element="text_queen"><bounds x="97.13" y="32.21" width="3" height="3" /></bezel>
- <bezel element="text_bishop"><bounds x="97.13" y="39.93" width="3" height="3" /></bezel>
- <bezel element="text_knight"><bounds x="97.13" y="47.64" width="3" height="3" /></bezel>
- <bezel element="text_rook"><bounds x="97.13" y="55.36" width="3" height="3" /></bezel>
- <bezel element="text_pawn"><bounds x="97.13" y="63.07" width="3" height="3" /></bezel>
+ <bezel element="text_king"><bounds x="97.13" y="24.70" width="3" height="2.2" /></bezel>
+ <bezel element="text_queen"><bounds x="97.13" y="32.41" width="3" height="2.2" /></bezel>
+ <bezel element="text_bishop"><bounds x="97.13" y="40.13" width="3" height="2.2" /></bezel>
+ <bezel element="text_knight"><bounds x="97.13" y="47.84" width="3" height="2.2" /></bezel>
+ <bezel element="text_rook"><bounds x="97.13" y="55.56" width="3" height="2.2" /></bezel>
+ <bezel element="text_pawn"><bounds x="97.13" y="63.27" width="3" height="2.2" /></bezel>
<bezel element="hlb" inputtag="IN.7" inputmask="0x400"><bounds x="86" y="24.00" width="6" height="4" /><color alpha="0.4" /></bezel>
<bezel element="hlb" inputtag="IN.6" inputmask="0x400"><bounds x="86" y="31.71" width="6" height="4" /><color alpha="0.4" /></bezel>
diff --git a/src/mame/layout/novag_supercon.lay b/src/mame/layout/novag_supercon.lay
index 5c45e200599..09cedc163ad 100644
--- a/src/mame/layout/novag_supercon.lay
+++ b/src/mame/layout/novag_supercon.lay
@@ -87,36 +87,36 @@
<element name="text_rg6"><text string="Black"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_rg7"><text string="White"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_king1"><text string="&#x265a;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_queen1"><text string="&#x265b;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_rook1"><text string="&#x265c;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_bishop1"><text string="&#x265d;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_knight1"><text string="&#x265e;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
- <element name="text_pawn1"><text string="&#x265f;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_king1"><text string="[K]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_queen1"><text string="[Q]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_rook1"><text string="[R]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_bishop1"><text string="[B]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_knight1"><text string="[N]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_pawn1"><text string="[P]"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_king2">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265a;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="[K]"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_queen2">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265b;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="[Q]"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_rook2">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265c;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="[R]"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_bishop2">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265d;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="[B]"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_knight2">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265e;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="[N]"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_pawn2">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
- <text string="&#x265f;"><color red="0.1" green="0.1" blue="0.1" /></text>
+ <text string="[P]"><color red="0.1" green="0.1" blue="0.1" /></text>
</element>
<element name="text_rb00"><text string="Multi Move"><color red="0.51" green="0.5" blue="0.49" /></text></element>
@@ -379,12 +379,12 @@
<bezel element="white"><bounds x="88" y="66" width="6" height="4" /></bezel>
<bezel element="white"><bounds x="88" y="76" width="6" height="4" /></bezel>
- <bezel element="text_king2"><bounds x="88" y="6.1" width="6" height="3.5" /></bezel>
- <bezel element="text_queen2"><bounds x="88" y="16.1" width="6" height="3.5" /></bezel>
- <bezel element="text_bishop2"><bounds x="88" y="26.1" width="6" height="3.5" /></bezel>
- <bezel element="text_knight2"><bounds x="88" y="36.1" width="6" height="3.5" /></bezel>
- <bezel element="text_rook2"><bounds x="88" y="46.1" width="6" height="3.5" /></bezel>
- <bezel element="text_pawn2"><bounds x="88" y="56.1" width="6" height="3.5" /></bezel>
+ <bezel element="text_king2"><bounds x="88" y="6.7" width="6" height="2.2" /></bezel>
+ <bezel element="text_queen2"><bounds x="88" y="16.7" width="6" height="2.2" /></bezel>
+ <bezel element="text_bishop2"><bounds x="88" y="26.7" width="6" height="2.2" /></bezel>
+ <bezel element="text_knight2"><bounds x="88" y="36.7" width="6" height="2.2" /></bezel>
+ <bezel element="text_rook2"><bounds x="88" y="46.7" width="6" height="2.2" /></bezel>
+ <bezel element="text_pawn2"><bounds x="88" y="56.7" width="6" height="2.2" /></bezel>
<bezel element="hlb" inputtag="IN.0" inputmask="0x200"><bounds x="88" y="6" width="6" height="4" /><color alpha="0.4" /></bezel>
<bezel element="hlb" inputtag="IN.1" inputmask="0x200"><bounds x="88" y="16" width="6" height="4" /><color alpha="0.4" /></bezel>
@@ -426,12 +426,12 @@
<bezel element="text_rg6"><bounds x="108" y="65.7" width="10" height="1.5" /></bezel>
<bezel element="text_rg7"><bounds x="108" y="75.7" width="10" height="1.5" /></bezel>
- <bezel element="text_king1"><bounds x="108.2" y="8.6" width="10" height="2" /></bezel>
- <bezel element="text_queen1"><bounds x="108.2" y="18.6" width="10" height="2" /></bezel>
- <bezel element="text_bishop1"><bounds x="108.2" y="28.6" width="10" height="2" /></bezel>
- <bezel element="text_knight1"><bounds x="108.2" y="38.6" width="10" height="2" /></bezel>
- <bezel element="text_rook1"><bounds x="108.2" y="48.6" width="10" height="2" /></bezel>
- <bezel element="text_pawn1"><bounds x="108.2" y="58.6" width="10" height="2" /></bezel>
+ <bezel element="text_king1"><bounds x="108.2" y="8.7" width="10" height="1.5" /></bezel>
+ <bezel element="text_queen1"><bounds x="108.2" y="18.7" width="10" height="1.5" /></bezel>
+ <bezel element="text_bishop1"><bounds x="108.2" y="28.7" width="10" height="1.5" /></bezel>
+ <bezel element="text_knight1"><bounds x="108.2" y="38.7" width="10" height="1.5" /></bezel>
+ <bezel element="text_rook1"><bounds x="108.2" y="48.7" width="10" height="1.5" /></bezel>
+ <bezel element="text_pawn1"><bounds x="108.2" y="58.7" width="10" height="1.5" /></bezel>
<bezel name="0.0" element="ledg"><bounds x="112" y="7.5" width="2" height="1" /></bezel>
<bezel name="0.1" element="ledg"><bounds x="112" y="17.5" width="2" height="1" /></bezel>
diff --git a/src/mame/layout/risc2500.lay b/src/mame/layout/risc2500.lay
index 4adb6418077..64718c4b15b 100644
--- a/src/mame/layout/risc2500.lay
+++ b/src/mame/layout/risc2500.lay
@@ -181,21 +181,21 @@
<element name="text_up"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="&#x2191;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_down"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="&#x2193;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_enter"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="ENTER" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
- <element name="text_p1"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="&#x265a;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
- <element name="text_p2"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="&#x265b;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
- <element name="text_p3"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="&#x265c;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
- <element name="text_p4"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="&#x265d;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
- <element name="text_p5"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="&#x265e;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
- <element name="text_p6"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="&#x265f;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
+ <element name="text_p1"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="[K]" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
+ <element name="text_p2"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="[Q]" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
+ <element name="text_p3"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="[R]" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
+ <element name="text_p4"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="[B]" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
+ <element name="text_p5"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="[N]" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
+ <element name="text_p6"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="[P]" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="sym_colon"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string=":" state="1"> <color red="1.0" green="1.0" blue="1.0" /></text> </element>
<element name="sym_left"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="&#x2190;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_right"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="&#x2192;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
- <element name="sym_p1"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="&#x265a;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
- <element name="sym_p2"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="&#x265b;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
- <element name="sym_p3"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="&#x265c;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
- <element name="sym_p4"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="&#x265d;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
- <element name="sym_p5"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="&#x265e;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
- <element name="sym_p6"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="&#x265f;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
+ <element name="sym_p1"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="[K]" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
+ <element name="sym_p2"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="[Q]" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
+ <element name="sym_p3"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="[R]" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
+ <element name="sym_p4"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="[B]" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
+ <element name="sym_p5"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="[N]" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
+ <element name="sym_p6"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="[P]" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_white"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="&#x25cb;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_black"> <text string="&#x25cf;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="white"><rect><color red="1" green="1" blue="1" /></rect></element>
@@ -203,19 +203,19 @@
<element name="background"><rect><color red="0.63" green="0.63" blue="0.63" /></rect></element>
<element name="piece" defstate="0">
- <text string="&#x265a;" state="1"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265b;" state="2"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265c;" state="3"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265d;" state="4"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265e;" state="5"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265f;" state="6"><color red="0.27" green="0.25" blue="0.25" /></text>
-
- <text string="&#x265a;" state="7"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265b;" state="8"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265c;" state="9"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265d;" state="10"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265e;" state="11"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265f;" state="12"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[K]" state="1"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[Q]" state="2"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[R]" state="3"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[B]" state="4"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[N]" state="5"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[P]" state="6"><color red="0.27" green="0.25" blue="0.25" /></text>
+
+ <text string="[K]" state="7"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[Q]" state="8"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[R]" state="9"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[B]" state="10"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[N]" state="11"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[P]" state="12"><color red="0.71" green="0.7" blue="0.69" /></text>
<!-- selected pieces -->
<disk state="17"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
@@ -231,19 +231,19 @@
<disk state="27"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
<disk state="28"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
- <text string="&#x265a;" state="17"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265b;" state="18"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265c;" state="19"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265d;" state="20"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265e;" state="21"><color red="0.27" green="0.25" blue="0.25" /></text>
- <text string="&#x265f;" state="22"><color red="0.27" green="0.25" blue="0.25" /></text>
-
- <text string="&#x265a;" state="23"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265b;" state="24"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265c;" state="25"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265d;" state="26"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265e;" state="27"><color red="0.71" green="0.7" blue="0.69" /></text>
- <text string="&#x265f;" state="28"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[K]" state="17"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[Q]" state="18"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[R]" state="19"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[B]" state="20"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[N]" state="21"><color red="0.27" green="0.25" blue="0.25" /></text>
+ <text string="[P]" state="22"><color red="0.27" green="0.25" blue="0.25" /></text>
+
+ <text string="[K]" state="23"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[Q]" state="24"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[R]" state="25"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[B]" state="26"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[N]" state="27"><color red="0.71" green="0.7" blue="0.69" /></text>
+ <text string="[P]" state="28"><color red="0.71" green="0.7" blue="0.69" /></text>
</element>
<!-- build screen -->
@@ -479,12 +479,12 @@
<bezel name="digit0" element="digit" ><bounds x="122.85" y="9" width="1.6" height="3" /></bezel>
<bezel name="sym1" element="sym_right" > <bounds x="121.60" y="12.7" width="3" height="3" /></bezel>
- <bezel name="sym2" element="sym_p6" > <bounds x="116.60" y="12.5" width="5" height="3" /></bezel>
- <bezel name="sym3" element="sym_p5" > <bounds x="113.75" y="12.5" width="4" height="3" /></bezel>
- <bezel name="sym4" element="sym_p4" > <bounds x="110.88" y="12.5" width="4" height="3" /></bezel>
- <bezel name="sym6" element="sym_p3" > <bounds x="108.00" y="12.5" width="4" height="3" /></bezel>
- <bezel name="sym7" element="sym_p2" > <bounds x="105.13" y="12.5" width="4" height="3" /></bezel>
- <bezel name="sym8" element="sym_p1" > <bounds x="102.25" y="12.5" width="4" height="3" /></bezel>
+ <bezel name="sym2" element="sym_p6" > <bounds x="116.60" y="12.7" width="3.5" height="2.2" /></bezel>
+ <bezel name="sym3" element="sym_p5" > <bounds x="113.75" y="12.7" width="3.5" height="2.2" /></bezel>
+ <bezel name="sym4" element="sym_p4" > <bounds x="110.88" y="12.7" width="3.5" height="2.2" /></bezel>
+ <bezel name="sym6" element="sym_p3" > <bounds x="108.00" y="12.7" width="3.5" height="2.2" /></bezel>
+ <bezel name="sym7" element="sym_p2" > <bounds x="105.13" y="12.7" width="3.5" height="2.2" /></bezel>
+ <bezel name="sym8" element="sym_p1" > <bounds x="102.25" y="12.7" width="3.5" height="2.2" /></bezel>
<bezel name="sym9" element="sym_white" > <bounds x="99.00" y="12.5" width="4" height="3" /></bezel>
<bezel name="sym10" element="sym_black" > <bounds x="99.90" y="13.0" width="2.2" height="2.2" /></bezel>
<bezel name="sym11" element="sym_left" > <bounds x="95.40" y="12.7" width="3" height="3" /></bezel>
@@ -504,12 +504,12 @@
<bezel element="text_down" ><bounds x="132" y="51" width="7" height="3" /></bezel>
<bezel element="text_enter" ><bounds x="141" y="52" width="7" height="2" /></bezel>
- <bezel element="text_p1" ><bounds x="96" y="65" width="7" height="5" /></bezel>
- <bezel element="text_p2" ><bounds x="105" y="65" width="7" height="5" /></bezel>
- <bezel element="text_p3" ><bounds x="114" y="65" width="7" height="5" /></bezel>
- <bezel element="text_p4" ><bounds x="123" y="65" width="7" height="5" /></bezel>
- <bezel element="text_p5" ><bounds x="132" y="65" width="7" height="5" /></bezel>
- <bezel element="text_p6" ><bounds x="141" y="65" width="7" height="5" /></bezel>
+ <bezel element="text_p1" ><bounds x="96" y="66" width="7" height="3" /></bezel>
+ <bezel element="text_p2" ><bounds x="105" y="66" width="7" height="3" /></bezel>
+ <bezel element="text_p3" ><bounds x="114" y="66" width="7" height="3" /></bezel>
+ <bezel element="text_p4" ><bounds x="123" y="66" width="7" height="3" /></bezel>
+ <bezel element="text_p5" ><bounds x="132" y="66" width="7" height="3" /></bezel>
+ <bezel element="text_p6" ><bounds x="141" y="66" width="7" height="3" /></bezel>
<bezel element="button" inputtag="RESET" inputmask="0x00000001"><bounds x="96" y="40" width="8" height="2" /></bezel>
<bezel element="button" inputtag="P7" inputmask="0x80000000"><bounds x="107" y="40" width="8" height="2" /></bezel>
diff --git a/src/mame/layout/sc2.lay b/src/mame/layout/sc2.lay
index 1c3db18b2ba..8ca6bdcf911 100644
--- a/src/mame/layout/sc2.lay
+++ b/src/mame/layout/sc2.lay
@@ -3,33 +3,201 @@
<!-- define elements -->
+ <element name="black"><rect><color red="0.22" green="0.22" blue="0.22" /></rect></element>
+ <element name="white"><rect><color red="0.72" green="0.72" blue="0.72" /></rect></element>
+
<element name="digit" defstate="0">
<led7seg><color red="0.25" green="0.9" blue="0.1" /></led7seg>
</element>
<element name="led" defstate="0">
<disk state="1"><color red="1.0" green="0.0" blue="0.0" /></disk>
- <disk state="0"><color red="0.15" green="0.0" blue="0.0" /> </disk>
+ <disk state="0"><color red="0.15" green="0.0" blue="0.0" /></disk>
+ </element>
+
+ <element name="hl" defstate="0">
+ <text string=" ">
+ <bounds x="0.0" y="0.0" width="1.0" height="1.0" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </text>
+ <rect state="1">
+ <bounds x="0.0" y="0.0" width="1.0" height="1.0" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </rect>
</element>
<element name="text_schach"><text string="SCHACH" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_matt"><text string="MATT" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_b01">
+ <rect><color red="0.22" green="0.22" blue="0.22" /></rect>
+ <text string="R"><color red="0.82" green="0.82" blue="0.82" /></text>
+ </element>
+ <element name="text_b02">
+ <rect><color red="0.22" green="0.22" blue="0.22" /></rect>
+ <text string="K"><color red="0.82" green="0.82" blue="0.82" /></text>
+ </element>
+ <element name="text_b03">
+ <rect><color red="0.22" green="0.22" blue="0.22" /></rect>
+ <text string="W"><color red="0.82" green="0.82" blue="0.82" /></text>
+ </element>
+ <element name="text_b04">
+ <rect><color red="0.22" green="0.22" blue="0.22" /></rect>
+ <text string="P"><color red="0.82" green="0.82" blue="0.82" /></text>
+ </element>
+ <element name="text_b05">
+ <rect><color red="0.22" green="0.22" blue="0.22" /></rect>
+ <text string="T"><color red="0.82" green="0.82" blue="0.82" /></text>
+ </element>
+ <element name="text_b06">
+ <rect><color red="0.22" green="0.22" blue="0.22" /></rect>
+ <text string="L"><color red="0.82" green="0.82" blue="0.82" /></text>
+ </element>
+ <element name="text_b07">
+ <rect><color red="0.22" green="0.22" blue="0.22" /></rect>
+ <text string="Q"><color red="0.82" green="0.82" blue="0.82" /></text>
+ </element>
+
+ <element name="text_b08a">
+ <rect><color red="0.72" green="0.72" blue="0.72" /></rect>
+ <text string="A"><color red="0.08" green="0.08" blue="0.08" /></text>
+ </element>
+ <element name="text_b08b">
+ <rect><color red="0.72" green="0.72" blue="0.72" /></rect>
+ <text string="1"><color red="0.08" green="0.08" blue="0.08" /></text>
+ </element>
+ <element name="text_b09a">
+ <rect><color red="0.72" green="0.72" blue="0.72" /></rect>
+ <text string="B"><color red="0.08" green="0.08" blue="0.08" /></text>
+ </element>
+ <element name="text_b09b">
+ <rect><color red="0.72" green="0.72" blue="0.72" /></rect>
+ <text string="2"><color red="0.08" green="0.08" blue="0.08" /></text>
+ </element>
+ <element name="text_b10a">
+ <rect><color red="0.72" green="0.72" blue="0.72" /></rect>
+ <text string="C"><color red="0.08" green="0.08" blue="0.08" /></text>
+ </element>
+ <element name="text_b10b">
+ <rect><color red="0.72" green="0.72" blue="0.72" /></rect>
+ <text string="3"><color red="0.08" green="0.08" blue="0.08" /></text>
+ </element>
+ <element name="text_b11a">
+ <rect><color red="0.72" green="0.72" blue="0.72" /></rect>
+ <text string="D"><color red="0.08" green="0.08" blue="0.08" /></text>
+ </element>
+ <element name="text_b11b">
+ <rect><color red="0.72" green="0.72" blue="0.72" /></rect>
+ <text string="4"><color red="0.08" green="0.08" blue="0.08" /></text>
+ </element>
+ <element name="text_b12a">
+ <rect><color red="0.72" green="0.72" blue="0.72" /></rect>
+ <text string="E"><color red="0.08" green="0.08" blue="0.08" /></text>
+ </element>
+ <element name="text_b12b">
+ <rect><color red="0.72" green="0.72" blue="0.72" /></rect>
+ <text string="5"><color red="0.08" green="0.08" blue="0.08" /></text>
+ </element>
+ <element name="text_b13a">
+ <rect><color red="0.72" green="0.72" blue="0.72" /></rect>
+ <text string="F"><color red="0.08" green="0.08" blue="0.08" /></text>
+ </element>
+ <element name="text_b13b">
+ <rect><color red="0.72" green="0.72" blue="0.72" /></rect>
+ <text string="6"><color red="0.08" green="0.08" blue="0.08" /></text>
+ </element>
+ <element name="text_b14a">
+ <rect><color red="0.72" green="0.72" blue="0.72" /></rect>
+ <text string="G"><color red="0.08" green="0.08" blue="0.08" /></text>
+ </element>
+ <element name="text_b14b">
+ <rect><color red="0.72" green="0.72" blue="0.72" /></rect>
+ <text string="7"><color red="0.08" green="0.08" blue="0.08" /></text>
+ </element>
+ <element name="text_b15a">
+ <rect><color red="0.72" green="0.72" blue="0.72" /></rect>
+ <text string="H"><color red="0.08" green="0.08" blue="0.08" /></text>
+ </element>
+ <element name="text_b15b">
+ <rect><color red="0.72" green="0.72" blue="0.72" /></rect>
+ <text string="8"><color red="0.08" green="0.08" blue="0.08" /></text>
+ </element>
+
<!-- build screen -->
<view name="Internal Layout">
- <bounds left="5" right="265" top="5" bottom="160" />
+ <bounds left="0" right="270" top="0" bottom="395" />
<bezel name="digit0" element="digit"><bounds x="10" y="10" width="50" height="80" /></bezel>
<bezel name="digit1" element="digit"><bounds x="70" y="10" width="50" height="80" /></bezel>
<bezel name="digit2" element="digit"><bounds x="150" y="10" width="50" height="80" /></bezel>
<bezel name="digit3" element="digit"><bounds x="210" y="10" width="50" height="80" /></bezel>
- <bezel name="led0" element="led"><bounds x="10" y="135" width="20" height="20" /></bezel>
- <bezel name="led1" element="led"><bounds x="240" y="135" width="20" height="20" /></bezel>
+ <bezel name="led0" element="led"><bounds x="12.5" y="152.5" width="20" height="20" /></bezel>
+ <bezel name="led1" element="led"><bounds x="237.5" y="152.5" width="20" height="20" /></bezel>
+
+ <bezel element="text_schach"><bounds x="5" y="110" width="100" height="20" /></bezel>
+ <bezel element="text_matt"><bounds x="165" y="110" width="100" height="20" /></bezel>
+
+ <!-- button panel -->
+
+ <bezel element="black"><bounds x="42.5" y="135" width="55" height="55" /></bezel>
+ <bezel element="black"><bounds x="107.5" y="135" width="55" height="55" /></bezel>
+ <bezel element="black"><bounds x="172.5" y="135" width="55" height="55" /></bezel>
+ <bezel element="black"><bounds x="10" y="200" width="55" height="55" /></bezel>
+ <bezel element="black"><bounds x="75" y="200" width="55" height="55" /></bezel>
+ <bezel element="black"><bounds x="140" y="200" width="55" height="55" /></bezel>
+ <bezel element="black"><bounds x="205" y="200" width="55" height="55" /></bezel>
+ <bezel element="white"><bounds x="10" y="265" width="55" height="55" /></bezel>
+ <bezel element="white"><bounds x="75" y="265" width="55" height="55" /></bezel>
+ <bezel element="white"><bounds x="140" y="265" width="55" height="55" /></bezel>
+ <bezel element="white"><bounds x="205" y="265" width="55" height="55" /></bezel>
+ <bezel element="white"><bounds x="10" y="330" width="55" height="55" /></bezel>
+ <bezel element="white"><bounds x="75" y="330" width="55" height="55" /></bezel>
+ <bezel element="white"><bounds x="140" y="330" width="55" height="55" /></bezel>
+ <bezel element="white"><bounds x="205" y="330" width="55" height="55" /></bezel>
+
+ <bezel element="text_b01"><bounds x="45" y="145" width="50" height="33" /></bezel>
+ <bezel element="text_b02"><bounds x="110" y="145" width="50" height="33" /></bezel>
+ <bezel element="text_b03"><bounds x="175" y="145" width="50" height="33" /></bezel>
+ <bezel element="text_b04"><bounds x="12.5" y="210" width="50" height="33" /></bezel>
+ <bezel element="text_b05"><bounds x="77.5" y="210" width="50" height="33" /></bezel>
+ <bezel element="text_b06"><bounds x="142.5" y="210" width="50" height="33" /></bezel>
+ <bezel element="text_b07"><bounds x="207.5" y="210" width="50" height="33" /></bezel>
+
+ <bezel element="text_b08a"><bounds x="12.5" y="267.5" width="50" height="25" /></bezel>
+ <bezel element="text_b08b"><bounds x="12.5" y="292.5" width="50" height="25" /></bezel>
+ <bezel element="text_b09a"><bounds x="77.5" y="267.5" width="50" height="25" /></bezel>
+ <bezel element="text_b09b"><bounds x="77.5" y="292.5" width="50" height="25" /></bezel>
+ <bezel element="text_b10a"><bounds x="142.5" y="267.5" width="50" height="25" /></bezel>
+ <bezel element="text_b10b"><bounds x="142.5" y="292.5" width="50" height="25" /></bezel>
+ <bezel element="text_b11a"><bounds x="207.5" y="267.5" width="50" height="25" /></bezel>
+ <bezel element="text_b11b"><bounds x="207.5" y="292.5" width="50" height="25" /></bezel>
+ <bezel element="text_b12a"><bounds x="12.5" y="332.5" width="50" height="25" /></bezel>
+ <bezel element="text_b12b"><bounds x="12.5" y="357.5" width="50" height="25" /></bezel>
+ <bezel element="text_b13a"><bounds x="77.5" y="332.5" width="50" height="25" /></bezel>
+ <bezel element="text_b13b"><bounds x="77.5" y="357.5" width="50" height="25" /></bezel>
+ <bezel element="text_b14a"><bounds x="142.5" y="332.5" width="50" height="25" /></bezel>
+ <bezel element="text_b14b"><bounds x="142.5" y="357.5" width="50" height="25" /></bezel>
+ <bezel element="text_b15a"><bounds x="207.5" y="332.5" width="50" height="25" /></bezel>
+ <bezel element="text_b15b"><bounds x="207.5" y="357.5" width="50" height="25" /></bezel>
+
+ <bezel element="hl" inputtag="LINE4" inputmask="0x40"><bounds x="42.5" y="135" width="55" height="55" /><color alpha="0.22" /></bezel>
+ <bezel element="hl" inputtag="LINE4" inputmask="0x10"><bounds x="107.5" y="135" width="55" height="55" /><color alpha="0.22" /></bezel>
+ <bezel element="hl" inputtag="LINE4" inputmask="0x20"><bounds x="172.5" y="135" width="55" height="55" /><color alpha="0.22" /></bezel>
+ <bezel element="hl" inputtag="LINE4" inputmask="0x80"><bounds x="10" y="200" width="55" height="55" /><color alpha="0.22" /></bezel>
+ <bezel element="hl" inputtag="LINE1" inputmask="0x20"><bounds x="75" y="200" width="55" height="55" /><color alpha="0.22" /></bezel>
+ <bezel element="hl" inputtag="LINE1" inputmask="0x40"><bounds x="140" y="200" width="55" height="55" /><color alpha="0.22" /></bezel>
+ <bezel element="hl" inputtag="LINE1" inputmask="0x80"><bounds x="205" y="200" width="55" height="55" /><color alpha="0.22" /></bezel>
+ <bezel element="hl" inputtag="LINE2" inputmask="0x10"><bounds x="10" y="265" width="55" height="55" /><color alpha="0.25" /></bezel>
+ <bezel element="hl" inputtag="LINE2" inputmask="0x20"><bounds x="75" y="265" width="55" height="55" /><color alpha="0.25" /></bezel>
+ <bezel element="hl" inputtag="LINE2" inputmask="0x40"><bounds x="140" y="265" width="55" height="55" /><color alpha="0.25" /></bezel>
+ <bezel element="hl" inputtag="LINE2" inputmask="0x80"><bounds x="205" y="265" width="55" height="55" /><color alpha="0.25" /></bezel>
+ <bezel element="hl" inputtag="LINE3" inputmask="0x10"><bounds x="10" y="330" width="55" height="55" /><color alpha="0.25" /></bezel>
+ <bezel element="hl" inputtag="LINE3" inputmask="0x20"><bounds x="75" y="330" width="55" height="55" /><color alpha="0.25" /></bezel>
+ <bezel element="hl" inputtag="LINE3" inputmask="0x40"><bounds x="140" y="330" width="55" height="55" /><color alpha="0.25" /></bezel>
+ <bezel element="hl" inputtag="LINE3" inputmask="0x80"><bounds x="205" y="330" width="55" height="55" /><color alpha="0.25" /></bezel>
- <bezel element="text_schach"><bounds x="10" y="110" width="100" height="20" /></bezel>
- <bezel element="text_matt"><bounds x="160" y="110" width="100" height="20" /></bezel>
</view>
</mamelayout>
diff --git a/src/mame/layout/simon.lay b/src/mame/layout/simon.lay
index c268c37ec88..98129551cfb 100644
--- a/src/mame/layout/simon.lay
+++ b/src/mame/layout/simon.lay
@@ -7,16 +7,15 @@
<element name="disk_black"><disk><color red="0.0" green="0.0" blue="0.0" /></disk></element>
<element name="disk_grey"><disk><color red="0.6" green="0.6" blue="0.6" /></disk></element>
-<!-- TODO: add these, maybe -->
<element name="text_game">
<rect><color red="0.6" green="0.6" blue="0.6" /></rect>
- <text string="GAME">
+ <text string="GAME (1-3)" align="1">
<color red="0.0" green="0.0" blue="0.0" />
</text>
</element>
<element name="text_skill">
<rect><color red="0.6" green="0.6" blue="0.6" /></rect>
- <text string="SKILL LEVEL">
+ <text string="SKILL LEVEL (1-4)" align="1">
<color red="0.0" green="0.0" blue="0.0" />
</text>
</element>
@@ -40,6 +39,49 @@
</text>
</element>
+ <element name="text_lb">
+ <disk><color red="0.0" green="0.0" blue="0.0" /></disk>
+ <text string="&#x25c4;">
+ <color red="0.3" green="0.4" blue="0.85" />
+ </text>
+ </element>
+ <element name="text_rb">
+ <disk><color red="0.0" green="0.0" blue="0.0" /></disk>
+ <text string="&#x25ba;">
+ <color red="0.3" green="0.4" blue="0.85" />
+ </text>
+ </element>
+ <element name="text_lg">
+ <disk><color red="0.0" green="0.0" blue="0.0" /></disk>
+ <text string="&#x25c4;">
+ <color red="0.33" green="0.8" blue="0.25" />
+ </text>
+ </element>
+ <element name="text_rg">
+ <disk><color red="0.0" green="0.0" blue="0.0" /></disk>
+ <text string="&#x25ba;">
+ <color red="0.33" green="0.8" blue="0.25" />
+ </text>
+ </element>
+
+ <element name="switch_game" defstate="0">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text state="0x02" string="1"><color red="0.0" green="0.0" blue="0.0" /></text>
+ <text state="0x01" string="2"><color red="0.0" green="0.0" blue="0.0" /></text>
+ <text state="0x04" string="3"><color red="0.0" green="0.0" blue="0.0" /></text>
+ </element>
+ <element name="switch_skill" defstate="0">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text state="0x02" string="1"><color red="0.0" green="0.0" blue="0.0" /></text>
+ <text state="0x04" string="2"><color red="0.0" green="0.0" blue="0.0" /></text>
+ <text state="0x08" string="3"><color red="0.0" green="0.0" blue="0.0" /></text>
+ <text state="0x01" string="4"><color red="0.0" green="0.0" blue="0.0" /></text>
+ </element>
+
+ <element name="nothing" defstate="0">
+ <text string=" "><color red="0" green="0" blue="0" /></text>
+ </element>
+
<element name="button_r" defstate="0">
<disk><color red="0.0" green="0.0" blue="0.0" /></disk>
<disk state="0">
@@ -131,7 +173,6 @@
<bounds x="140" y="140" width="20" height="20" />
</bezel>
-
<bezel element="static_black">
<bounds x="0" y="90" width="200" height="20" />
</bezel>
@@ -149,6 +190,51 @@
<bounds x="52" y="90" width="96" height="1" />
</bezel>
+ <!-- switches -->
+
+ <bezel element="text_game">
+ <bounds x="68" y="93" width="20" height="4" />
+ </bezel>
+ <bezel element="nothing" inputtag="DUMMY" inputmask="0x01">
+ <bounds x="73.9" y="97.9" width="3.2" height="4.2" />
+ </bezel>
+ <bezel element="switch_game" inputtag="IN.0" inputmask="0x07" inputraw="1">
+ <bounds x="74" y="98" width="3" height="4" />
+ </bezel>
+ <bezel element="text_lg">
+ <bounds x="66.5" y="97" width="6" height="6" />
+ </bezel>
+ <bezel element="nothing" inputtag="SWITCH" inputmask="0x01">
+ <bounds x="65.5" y="96" width="8" height="8" />
+ </bezel>
+ <bezel element="text_rg">
+ <bounds x="78" y="97" width="6" height="6" />
+ </bezel>
+ <bezel element="nothing" inputtag="SWITCH" inputmask="0x02">
+ <bounds x="77" y="96" width="8" height="8" />
+ </bezel>
+
+ <bezel element="text_skill">
+ <bounds x="112" y="93" width="30" height="4" />
+ </bezel>
+ <bezel element="nothing" inputtag="DUMMY" inputmask="0x01">
+ <bounds x="122.9" y="97.9" width="3.2" height="4.2" />
+ </bezel>
+ <bezel element="switch_skill" inputtag="IN.3" inputmask="0x0f" inputraw="1">
+ <bounds x="123" y="98" width="3" height="4" />
+ </bezel>
+ <bezel element="text_lb">
+ <bounds x="115.5" y="97" width="6" height="6" />
+ </bezel>
+ <bezel element="nothing" inputtag="SWITCH" inputmask="0x04">
+ <bounds x="114.5" y="96" width="8" height="8" />
+ </bezel>
+ <bezel element="text_rb">
+ <bounds x="127" y="97" width="6" height="6" />
+ </bezel>
+ <bezel element="nothing" inputtag="SWITCH" inputmask="0x08">
+ <bounds x="126" y="96" width="8" height="8" />
+ </bezel>
<!-- other controls -->
diff --git a/src/mame/layout/ssimon.lay b/src/mame/layout/ssimon.lay
index 50f9b1f0cc0..9be8cca7a43 100644
--- a/src/mame/layout/ssimon.lay
+++ b/src/mame/layout/ssimon.lay
@@ -4,8 +4,13 @@
<!-- define elements -->
<element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
+ <element name="static_black2"><rect><color red="0.25" green="0.25" blue="0.25" /></rect></element>
<element name="static_grey"><rect><color red="0.6" green="0.6" blue="0.6" /></rect></element>
+ <element name="nothing" defstate="0">
+ <text string=" "><color red="0" green="0" blue="0" /></text>
+ </element>
+
<element name="text_tie">
<rect><color red="0.6" green="0.6" blue="0.6" /></rect>
<text string="TIE"><color red="0.0" green="0.0" blue="0.0" /></text>
@@ -19,23 +24,75 @@
<text string="LOSE"><color red="0.0" green="0.0" blue="0.0" /></text>
</element>
- <element name="text_decision">
- <rect><color red="0.0" green="0.0" blue="0.0" /></rect>
- <text string="DECISION"><color red="0.6" green="0.6" blue="0.6" /></text>
+ <element name="text_1">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="1"><color red="0.0" green="0.0" blue="0.0" /></text>
+ </element>
+ <element name="text_2">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="2"><color red="0.0" green="0.0" blue="0.0" /></text>
+ </element>
+ <element name="text_3">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="3"><color red="0.0" green="0.0" blue="0.0" /></text>
+ </element>
+ <element name="text_4">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="4"><color red="0.0" green="0.0" blue="0.0" /></text>
+ </element>
+ <element name="text_5">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="5"><color red="0.0" green="0.0" blue="0.0" /></text>
+ </element>
+ <element name="text_hh">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="HEAD-HEAD" align="2"><color red="0.0" green="0.0" blue="0.0" /></text>
+ </element>
+ <element name="text_s1">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="SIMPLE" align="1"><color red="0.0" green="0.0" blue="0.0" /></text>
+ </element>
+ <element name="text_s2">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="NORMAL" align="1"><color red="0.0" green="0.0" blue="0.0" /></text>
+ </element>
+ <element name="text_s3">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="SUPER" align="1"><color red="0.0" green="0.0" blue="0.0" /></text>
+ </element>
+
+ <element name="text_speed"><text string="SPEED"><color red="0.6" green="0.6" blue="0.6" /></text></element>
+ <element name="text_game"><text string="GAME"><color red="0.6" green="0.6" blue="0.6" /></text></element>
+ <element name="text_skill"><text string="SKILL LV."><color red="0.6" green="0.6" blue="0.6" /></text></element>
+ <element name="text_decision"><text string="DECISION"><color red="0.6" green="0.6" blue="0.6" /></text></element>
+ <element name="text_longest"><text string="LONGEST"><color red="0.6" green="0.6" blue="0.6" /></text></element>
+ <element name="text_last"><text string="LAST"><color red="0.6" green="0.6" blue="0.6" /></text></element>
+ <element name="text_start"><text string="START"><color red="0.6" green="0.6" blue="0.6" /></text></element>
+
+ <element name="switch0" defstate="0">
+ <text string=" "><color red="0" green="0" blue="0" /></text>
+ <rect state="0"><color red="0.6" green="0.6" blue="0.6" /></rect>
+ </element>
+ <element name="switch1" defstate="0">
+ <text string=" "><color red="0" green="0" blue="0" /></text>
+ <rect state="1"><color red="0.6" green="0.6" blue="0.6" /></rect>
</element>
- <element name="text_longest">
- <rect><color red="0.0" green="0.0" blue="0.0" /></rect>
- <text string="LONGEST"><color red="0.6" green="0.6" blue="0.6" /></text>
+ <element name="switch2" defstate="0">
+ <text string=" "><color red="0" green="0" blue="0" /></text>
+ <rect state="2"><color red="0.6" green="0.6" blue="0.6" /></rect>
</element>
- <element name="text_last">
- <rect><color red="0.0" green="0.0" blue="0.0" /></rect>
- <text string="LAST"><color red="0.6" green="0.6" blue="0.6" /></text>
+ <element name="switch4" defstate="0">
+ <text string=" "><color red="0" green="0" blue="0" /></text>
+ <rect state="4"><color red="0.6" green="0.6" blue="0.6" /></rect>
</element>
- <element name="text_start">
- <rect><color red="0.0" green="0.0" blue="0.0" /></rect>
- <text string="START"><color red="0.6" green="0.6" blue="0.6" /></text>
+ <element name="switch8" defstate="0">
+ <text string=" "><color red="0" green="0" blue="0" /></text>
+ <rect state="8"><color red="0.6" green="0.6" blue="0.6" /></rect>
</element>
+ <element name="text_up"><text string="&#x25b2;"><color red="0.6" green="0.6" blue="0.1" /></text></element>
+ <element name="text_down"><text string="&#x25bc;"><color red="0.6" green="0.6" blue="0.1" /></text></element>
+
<element name="button" defstate="0">
<rect>
<color red="0.0" green="0.0" blue="0.0" />
@@ -72,10 +129,7 @@
<!-- build screen -->
<view name="Internal Layout">
- <bounds left="0" right="47" top="0" bottom="53" />
- <bezel element="static_black">
- <bounds left="0" right="47" top="0" bottom="53" />
- </bezel>
+ <bounds left="-8" right="55" top="0" bottom="53" />
<!-- lamps -->
@@ -109,15 +163,15 @@
<bezel element="static_grey"><bounds x="1" y="22" width="45" height="9" /></bezel>
- <bezel element="text_tie"><bounds x="1" y="22.2" width="10" height="0.6" /></bezel>
- <bezel element="text_lose"><bounds x="12" y="22.2" width="10" height="0.6" /></bezel>
- <bezel element="text_win"><bounds x="25" y="22.2" width="10" height="0.6" /></bezel>
- <bezel element="text_lose"><bounds x="36" y="22.2" width="10" height="0.6" /></bezel>
+ <bezel element="text_tie"><bounds x="1" y="22.2" width="10" height="0.9" /></bezel>
+ <bezel element="text_lose"><bounds x="12" y="22.2" width="10" height="0.9" /></bezel>
+ <bezel element="text_win"><bounds x="25" y="22.2" width="10" height="0.9" /></bezel>
+ <bezel element="text_lose"><bounds x="36" y="22.2" width="10" height="0.9" /></bezel>
- <bezel element="text_tie"><bounds x="1" y="30.2" width="10" height="0.6" /></bezel>
- <bezel element="text_win"><bounds x="12" y="30.2" width="10" height="0.6" /></bezel>
- <bezel element="text_lose"><bounds x="25" y="30.2" width="10" height="0.6" /></bezel>
- <bezel element="text_lose"><bounds x="36" y="30.2" width="10" height="0.6" /></bezel>
+ <bezel element="text_tie"><bounds x="1" y="29.9" width="10" height="0.9" /></bezel>
+ <bezel element="text_win"><bounds x="12" y="29.9" width="10" height="0.9" /></bezel>
+ <bezel element="text_lose"><bounds x="25" y="29.9" width="10" height="0.9" /></bezel>
+ <bezel element="text_lose"><bounds x="36" y="29.9" width="10" height="0.9" /></bezel>
<bezel element="static_black"><bounds x="2" y="24" width="7" height="2" /></bezel>
<bezel element="text_decision"><bounds x="2" y="24.3" width="7" height="1.4" /></bezel>
@@ -143,5 +197,87 @@
<bounds x="34.3" y="27" width="3.2" height="2" />
</bezel>
+ <!-- side switches -->
+
+ <bezel element="static_grey"><bounds x="-5" y="16" width="5" height="21" /></bezel>
+ <bezel element="static_black"><bounds x="-4.5" y="24" width="4" height="2" /></bezel>
+ <bezel element="static_black"><bounds x="-4.5" y="27" width="4" height="2" /></bezel>
+ <bezel element="text_speed"><bounds x="-4.5" y="27.6" width="4" height="0.9" /></bezel>
+
+ <bezel element="text_s1"><bounds x="-3.9" y="29.65" width="3.5" height="0.9" /></bezel>
+ <bezel element="text_s2"><bounds x="-3.9" y="30.90" width="3.5" height="0.9" /></bezel>
+ <bezel element="text_s3"><bounds x="-3.9" y="32.15" width="3.5" height="0.9" /></bezel>
+
+ <bezel element="static_black2"><bounds x="-6.5" y="29.125" width="0.5" height="4.5" /></bezel>
+ <bezel element="nothing" inputtag="DUMMY" inputmask="0x01"><bounds x="-7.25" y="29.125" width="2" height="4.5" /></bezel>
+ <bezel element="switch0" inputtag="IN.6" inputmask="0x03" inputraw="1"><bounds x="-7" y="29.625" width="1.5" height="1" /></bezel>
+ <bezel element="switch1" inputtag="IN.6" inputmask="0x03" inputraw="1"><bounds x="-7" y="30.875" width="1.5" height="1" /></bezel>
+ <bezel element="switch2" inputtag="IN.6" inputmask="0x03" inputraw="1"><bounds x="-7" y="32.125" width="1.5" height="1" /></bezel>
+
+ <bezel element="static_black"><bounds x="-6.25" y="30.00" width="2" height="0.25" /></bezel>
+ <bezel element="static_black"><bounds x="-6.25" y="31.25" width="2" height="0.25" /></bezel>
+ <bezel element="static_black"><bounds x="-6.25" y="32.50" width="2" height="0.25" /></bezel>
+
+ <bezel element="text_up"><bounds x="-7.7" y="27.25" width="3" height="1.6" /></bezel>
+ <bezel element="nothing" inputtag="SWITCH" inputmask="0x10"><bounds x="-7.2" y="27.15" width="2" height="1.8" /></bezel>
+ <bezel element="text_down"><bounds x="-7.7" y="33.75" width="3" height="1.6" /></bezel>
+ <bezel element="nothing" inputtag="SWITCH" inputmask="0x20"><bounds x="-7.2" y="33.65" width="2" height="1.8" /></bezel>
+
+ <bezel element="static_grey"><bounds x="47" y="16" width="5" height="21" /></bezel>
+ <bezel element="static_black"><bounds x="47.5" y="24" width="4" height="2" /></bezel>
+ <bezel element="static_black"><bounds x="47.5" y="27" width="4" height="2" /></bezel>
+ <bezel element="text_game"><bounds x="47.5" y="24.6" width="4" height="0.9" /></bezel>
+ <bezel element="text_skill"><bounds x="47.5" y="27.6" width="4" height="0.9" /></bezel>
+
+ <bezel element="text_5"><bounds x="50.25" y="17.40" width="1" height="0.9" /></bezel>
+ <bezel element="text_4"><bounds x="50.25" y="18.65" width="1" height="0.9" /></bezel>
+ <bezel element="text_3"><bounds x="50.25" y="19.90" width="1" height="0.9" /></bezel>
+ <bezel element="text_2"><bounds x="50.25" y="21.15" width="1" height="0.9" /></bezel>
+ <bezel element="text_1"><bounds x="50.25" y="22.40" width="1" height="0.9" /></bezel>
+
+ <bezel element="text_hh"><bounds x="47.25" y="29.65" width="4" height="0.9" /></bezel>
+ <bezel element="text_1"><bounds x="50.25" y="30.90" width="1" height="0.9" /></bezel>
+ <bezel element="text_2"><bounds x="50.25" y="32.15" width="1" height="0.9" /></bezel>
+ <bezel element="text_3"><bounds x="50.25" y="33.40" width="1" height="0.9" /></bezel>
+ <bezel element="text_4"><bounds x="50.25" y="34.65" width="1" height="0.9" /></bezel>
+
+ <bezel element="static_black2"><bounds x="53" y="16.875" width="0.5" height="7" /></bezel>
+ <bezel element="nothing" inputtag="DUMMY" inputmask="0x01"><bounds x="52.25" y="16.875" width="2" height="7" /></bezel>
+ <bezel element="switch0" inputtag="IN.0" inputmask="0x0f" inputraw="1"><bounds x="52.5" y="17.375" width="1.5" height="1" /></bezel>
+ <bezel element="switch8" inputtag="IN.0" inputmask="0x0f" inputraw="1"><bounds x="52.5" y="18.625" width="1.5" height="1" /></bezel>
+ <bezel element="switch4" inputtag="IN.0" inputmask="0x0f" inputraw="1"><bounds x="52.5" y="19.875" width="1.5" height="1" /></bezel>
+ <bezel element="switch2" inputtag="IN.0" inputmask="0x0f" inputraw="1"><bounds x="52.5" y="21.125" width="1.5" height="1" /></bezel>
+ <bezel element="switch1" inputtag="IN.0" inputmask="0x0f" inputraw="1"><bounds x="52.5" y="22.375" width="1.5" height="1" /></bezel>
+
+ <bezel element="static_black2"><bounds x="53" y="29.125" width="0.5" height="7" /></bezel>
+ <bezel element="nothing" inputtag="DUMMY" inputmask="0x01"><bounds x="52.25" y="29.125" width="2" height="7" /></bezel>
+ <bezel element="switch0" inputtag="IN.4" inputmask="0x0f" inputraw="1"><bounds x="52.5" y="29.625" width="1.5" height="1" /></bezel>
+ <bezel element="switch2" inputtag="IN.4" inputmask="0x0f" inputraw="1"><bounds x="52.5" y="30.875" width="1.5" height="1" /></bezel>
+ <bezel element="switch4" inputtag="IN.4" inputmask="0x0f" inputraw="1"><bounds x="52.5" y="32.125" width="1.5" height="1" /></bezel>
+ <bezel element="switch8" inputtag="IN.4" inputmask="0x0f" inputraw="1"><bounds x="52.5" y="33.375" width="1.5" height="1" /></bezel>
+ <bezel element="switch1" inputtag="IN.4" inputmask="0x0f" inputraw="1"><bounds x="52.5" y="34.625" width="1.5" height="1" /></bezel>
+
+ <bezel element="static_black"><bounds x="51.25" y="17.75" width="2" height="0.25" /></bezel>
+ <bezel element="static_black"><bounds x="51.25" y="19.00" width="2" height="0.25" /></bezel>
+ <bezel element="static_black"><bounds x="51.25" y="20.25" width="2" height="0.25" /></bezel>
+ <bezel element="static_black"><bounds x="51.25" y="21.50" width="2" height="0.25" /></bezel>
+ <bezel element="static_black"><bounds x="51.25" y="22.75" width="2" height="0.25" /></bezel>
+
+ <bezel element="static_black"><bounds x="51.25" y="30.00" width="2" height="0.25" /></bezel>
+ <bezel element="static_black"><bounds x="51.25" y="31.25" width="2" height="0.25" /></bezel>
+ <bezel element="static_black"><bounds x="51.25" y="32.50" width="2" height="0.25" /></bezel>
+ <bezel element="static_black"><bounds x="51.25" y="33.75" width="2" height="0.25" /></bezel>
+ <bezel element="static_black"><bounds x="51.25" y="35.00" width="2" height="0.25" /></bezel>
+
+ <bezel element="text_up"><bounds x="51.8" y="15" width="3" height="1.6" /></bezel>
+ <bezel element="nothing" inputtag="SWITCH" inputmask="0x02"><bounds x="52.3" y="14.9" width="2" height="1.8" /></bezel>
+ <bezel element="text_down"><bounds x="51.8" y="24" width="3" height="1.6" /></bezel>
+ <bezel element="nothing" inputtag="SWITCH" inputmask="0x01"><bounds x="52.3" y="23.9" width="2" height="1.8" /></bezel>
+
+ <bezel element="text_up"><bounds x="51.8" y="27.25" width="3" height="1.6" /></bezel>
+ <bezel element="nothing" inputtag="SWITCH" inputmask="0x04"><bounds x="52.3" y="27.15" width="2" height="1.8" /></bezel>
+ <bezel element="text_down"><bounds x="51.8" y="36.25" width="3" height="1.6" /></bezel>
+ <bezel element="nothing" inputtag="SWITCH" inputmask="0x08"><bounds x="52.3" y="36.15" width="2" height="1.8" /></bezel>
+
</view>
</mamelayout>
diff --git a/src/mame/layout/ti74.lay b/src/mame/layout/ti74.lay
index 24563b7dc8c..b8df75728a9 100644
--- a/src/mame/layout/ti74.lay
+++ b/src/mame/layout/ti74.lay
@@ -9,20 +9,20 @@
<element name="ind_left" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
- <text string="&#x25c0;" align="1" state="0">
+ <text string="&#x25c4;" align="1" state="0">
<color red="0.515" green="0.537" blue="0.548" />
</text>
- <text string="&#x25c0;" align="1" state="1">
+ <text string="&#x25c4;" align="1" state="1">
<color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_right" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
- <text string="&#x25b6;" align="2" state="0">
+ <text string="&#x25ba;" align="2" state="0">
<color red="0.515" green="0.537" blue="0.548" />
</text>
- <text string="&#x25b6;" align="2" state="1">
+ <text string="&#x25ba;" align="2" state="1">
<color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
@@ -172,11 +172,11 @@
<!-- draw top row of lcd indicators -->
<bezel name="lamp10" element="ind_left">
- <bounds x="1.5" y="0" width="20" height="7" />
+ <bounds x="1.5" y="0.5" width="20" height="5.5" />
</bezel>
<bezel name="lamp4" element="ind_right">
- <bounds x="167.5" y="0" width="20" height="7" />
+ <bounds x="167.5" y="0.5" width="20" height="5.5" />
</bezel>
<bezel name="lamp11" element="ind_shift">
diff --git a/src/mame/layout/ti95.lay b/src/mame/layout/ti95.lay
index 7c70bda1e05..ea118cee66b 100644
--- a/src/mame/layout/ti95.lay
+++ b/src/mame/layout/ti95.lay
@@ -39,10 +39,10 @@
<element name="ind_left" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
- <text string="&#x25c0;" align="1" state="0">
+ <text string="&#x25c4;" align="1" state="0">
<color red="0.515" green="0.537" blue="0.548" />
</text>
- <text string="&#x25c0;" align="1" state="1">
+ <text string="&#x25c4;" align="1" state="1">
<color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
@@ -259,7 +259,7 @@
<bounds x="1" y="9" width="5" height="5" />
</bezel>
<bezel name="lamp71" element="ind_left">
- <bounds x="8" y="8" width="5" height="7" />
+ <bounds x="7.5" y="8" width="4" height="6" />
</bezel>
<!-- right: run, sys -->
diff --git a/src/mame/layout/touchme.lay b/src/mame/layout/touchme.lay
index 00745eaa252..7d514b91729 100644
--- a/src/mame/layout/touchme.lay
+++ b/src/mame/layout/touchme.lay
@@ -34,6 +34,31 @@
<rect><color red="0.7" green="0.72" blue="0.75" /></rect>
<text string="SKILL"><color red="0.02" green="0.02" blue="0.02" /></text>
</element>
+ <element name="text_s1">
+ <rect><color red="0.7" green="0.72" blue="0.75" /></rect>
+ <text string="1"><color red="0.02" green="0.02" blue="0.02" /></text>
+ </element>
+ <element name="text_s2">
+ <rect><color red="0.7" green="0.72" blue="0.75" /></rect>
+ <text string="2"><color red="0.02" green="0.02" blue="0.02" /></text>
+ </element>
+ <element name="text_s3">
+ <rect><color red="0.7" green="0.72" blue="0.75" /></rect>
+ <text string="3"><color red="0.02" green="0.02" blue="0.02" /></text>
+ </element>
+
+ <element name="switch1" defstate="0">
+ <text string=" "><color red="0" green="0" blue="0" /></text>
+ <disk state="0x06"><color red="0.45" green="0.45" blue="0.45" /></disk>
+ </element>
+ <element name="switch2" defstate="0">
+ <text string=" "><color red="0" green="0" blue="0" /></text>
+ <disk state="0x05"><color red="0.45" green="0.45" blue="0.45" /></disk>
+ </element>
+ <element name="switch3" defstate="0">
+ <text string=" "><color red="0" green="0" blue="0" /></text>
+ <disk state="0x03"><color red="0.45" green="0.45" blue="0.45" /></disk>
+ </element>
<element name="hl" defstate="0">
<text string=" "><color red="0.0" green="0.0" blue="0.0" /></text>
@@ -53,14 +78,14 @@
<!-- build screen -->
<view name="Internal Layout">
- <bounds left="1.41" right="10.89" top="5" bottom="19.3" />
+ <bounds left="1.41" right="10.89" top="5" bottom="20" />
<bezel name="digit0" element="digit"><bounds x="5.15" y="5.6" width="1" height="1.5" /></bezel>
<bezel name="digit1" element="digit"><bounds x="6.15" y="5.6" width="1" height="1.5" /></bezel>
<!-- bezel (also allow clicking it) -->
- <bezel element="static_gray"><bounds x="1.4" y="7.7" width="9.5" height="12" /></bezel>
+ <bezel element="static_gray"><bounds x="1.4" y="7.7" width="9.5" height="12.4" /></bezel>
<bezel element="static_black"><bounds x="1.7" y="9.7" width="8.9" height="8.9" /></bezel>
<bezel element="static_blue"><bounds x="2" y="10" width="4" height="4" /></bezel>
@@ -75,37 +100,45 @@
<!-- smooth edges -->
- <bezel element="static_gray"><bounds x="1.5" y="9.5" width="1.3" height="1.3" /></bezel>
- <bezel element="disk_black"><bounds x="1.7" y="9.7" width="2" height="2" /></bezel>
- <bezel element="disk_blue"><bounds x="2" y="10" width="2" height="2" /></bezel>
- <bezel element="disk_blue"><bounds x="2.15" y="10" width="2" height="2" /></bezel>
- <bezel element="disk_blue"><bounds x="2.3" y="10" width="2" height="2" /></bezel>
- <bezel element="disk_blue"><bounds x="2" y="10.15" width="2" height="2" /></bezel>
- <bezel element="disk_blue"><bounds x="2" y="10.3" width="2" height="2" /></bezel>
-
- <bezel element="static_gray"><bounds x="9.5" y="9.5" width="1.3" height="1.3" /></bezel>
- <bezel element="disk_black"><bounds x="8.6" y="9.7" width="2" height="2" /></bezel>
- <bezel element="disk_yellow"><bounds x="8.3" y="10" width="2" height="2" /></bezel>
- <bezel element="disk_yellow"><bounds x="8.15" y="10" width="2" height="2" /></bezel>
- <bezel element="disk_yellow"><bounds x="8.0" y="10" width="2" height="2" /></bezel>
- <bezel element="disk_yellow"><bounds x="8.3" y="10.15" width="2" height="2" /></bezel>
- <bezel element="disk_yellow"><bounds x="8.3" y="10.3" width="2" height="2" /></bezel>
-
- <bezel element="static_gray"><bounds x="1.5" y="17.5" width="1.3" height="1.3" /></bezel>
- <bezel element="disk_black"><bounds x="1.7" y="16.6" width="2" height="2" /></bezel>
- <bezel element="disk_red"><bounds x="2" y="16.3" width="2" height="2" /></bezel>
- <bezel element="disk_red"><bounds x="2.15" y="16.3" width="2" height="2" /></bezel>
- <bezel element="disk_red"><bounds x="2.3" y="16.3" width="2" height="2" /></bezel>
- <bezel element="disk_red"><bounds x="2" y="16.15" width="2" height="2" /></bezel>
- <bezel element="disk_red"><bounds x="2" y="16.0" width="2" height="2" /></bezel>
-
- <bezel element="static_gray"><bounds x="9.5" y="17.5" width="1.3" height="1.3" /></bezel>
- <bezel element="disk_black"><bounds x="8.6" y="16.6" width="2" height="2" /></bezel>
- <bezel element="disk_green"><bounds x="8.3" y="16.3" width="2" height="2" /></bezel>
- <bezel element="disk_green"><bounds x="8.15" y="16.3" width="2" height="2" /></bezel>
- <bezel element="disk_green"><bounds x="8.0" y="16.3" width="2" height="2" /></bezel>
- <bezel element="disk_green"><bounds x="8.3" y="16.15" width="2" height="2" /></bezel>
- <bezel element="disk_green"><bounds x="8.3" y="16.0" width="2" height="2" /></bezel>
+ <bezel element="static_gray"><bounds x="1.5" y="9.3" width="1.55" height="1.55" /></bezel>
+ <bezel element="disk_black"><bounds x="1.7" y="9.7" width="2.6" height="2.6" /></bezel>
+ <repeat count="10">
+ <param name="x" start="2.0" increment="0.1" />
+ <param name="y" start="10.0" increment="0.1" />
+ <bezel element="disk_blue"><bounds x="2.0" y="~y~" width="2" height="2" /></bezel>
+ <bezel element="disk_blue"><bounds x="~x~" y="10.0" width="2" height="2" /></bezel>
+ <bezel element="disk_blue"><bounds x="~x~" y="~y~" width="2" height="2" /></bezel>
+ </repeat>
+
+ <bezel element="static_gray"><bounds x="9.25" y="9.3" width="1.55" height="1.55" /></bezel>
+ <bezel element="disk_black"><bounds x="8.0" y="9.7" width="2.6" height="2.6" /></bezel>
+ <repeat count="10">
+ <param name="x" start="8.31" increment="-0.1" />
+ <param name="y" start="10.0" increment="0.1" />
+ <bezel element="disk_yellow"><bounds x="8.31" y="~y~" width="2" height="2" /></bezel>
+ <bezel element="disk_yellow"><bounds x="~x~" y="10.0" width="2" height="2" /></bezel>
+ <bezel element="disk_yellow"><bounds x="~x~" y="~y~" width="2" height="2" /></bezel>
+ </repeat>
+
+ <bezel element="static_gray"><bounds x="1.5" y="17.25" width="1.55" height="1.55" /></bezel>
+ <bezel element="disk_black"><bounds x="1.7" y="16.0" width="2.6" height="2.6" /></bezel>
+ <repeat count="10">
+ <param name="x" start="2.0" increment="0.1" />
+ <param name="y" start="16.31" increment="-0.1" />
+ <bezel element="disk_red"><bounds x="2.0" y="~y~" width="2" height="2" /></bezel>
+ <bezel element="disk_red"><bounds x="~x~" y="16.31" width="2" height="2" /></bezel>
+ <bezel element="disk_red"><bounds x="~x~" y="~y~" width="2" height="2" /></bezel>
+ </repeat>
+
+ <bezel element="static_gray"><bounds x="9.25" y="17.25" width="1.55" height="1.55" /></bezel>
+ <bezel element="disk_black"><bounds x="8.0" y="16.0" width="2.6" height="2.6" /></bezel>
+ <repeat count="10">
+ <param name="x" start="8.31" increment="-0.1" />
+ <param name="y" start="16.31" increment="-0.1" />
+ <bezel element="disk_green"><bounds x="8.31" y="~y~" width="2" height="2" /></bezel>
+ <bezel element="disk_green"><bounds x="~x~" y="16.31" width="2" height="2" /></bezel>
+ <bezel element="disk_green"><bounds x="~x~" y="~y~" width="2" height="2" /></bezel>
+ </repeat>
<!-- middle buttons, leds -->
@@ -151,5 +184,21 @@
<bezel element="hl" inputtag="IN.0" inputmask="0x04"><bounds x="6.6" y="8.4" width="1.5" height="1" /><color alpha="0.25" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x08"><bounds x="9.0" y="8.4" width="1.5" height="1" /><color alpha="0.25" /></bezel>
+ <!-- bottom switch -->
+
+ <bezel element="text_s1"><bounds x="7.55" y="19.45" width="0.6" height="0.5" /></bezel>
+ <bezel element="text_s2"><bounds x="8.00" y="19.45" width="0.6" height="0.5" /></bezel>
+ <bezel element="text_s3"><bounds x="8.45" y="19.45" width="0.6" height="0.5" /></bezel>
+ <bezel element="disk_black"><bounds x="8.00" y="19.67" width="0.1" height="0.1" /></bezel>
+ <bezel element="disk_black"><bounds x="8.45" y="19.67" width="0.1" height="0.1" /></bezel>
+
+ <bezel element="disk_black"><bounds x="7.6" y="18.9" width="0.5" height="0.5" /></bezel>
+ <bezel element="disk_black"><bounds x="8.5" y="18.9" width="0.5" height="0.5" /></bezel>
+ <bezel element="static_black"><bounds x="7.8" y="18.9" width="1.0" height="0.5" /></bezel>
+
+ <bezel element="switch1" inputtag="IN.2" inputmask="0x07" inputraw="1"><bounds x="7.55" y="18.85" width="0.6" height="0.6" /></bezel>
+ <bezel element="switch2" inputtag="IN.2" inputmask="0x07" inputraw="1"><bounds x="8.00" y="18.85" width="0.6" height="0.6" /></bezel>
+ <bezel element="switch3" inputtag="IN.2" inputmask="0x07" inputraw="1"><bounds x="8.45" y="18.85" width="0.6" height="0.6" /></bezel>
+
</view>
</mamelayout>
diff --git a/src/mame/layout/zodiac.lay b/src/mame/layout/zodiac.lay
index 2b2597bfbca..cf04cc1d466 100644
--- a/src/mame/layout/zodiac.lay
+++ b/src/mame/layout/zodiac.lay
@@ -3,40 +3,131 @@
<!-- define elements -->
- <element name="static_black"><rect><color red="0" green="0" blue="0" /></rect></element>
+ <element name="static_white"><rect><color red="0.77" green="0.77" blue="0.77" /></rect></element>
<element name="disk_black"><disk><color red="0" green="0" blue="0" /></disk></element>
- <element name="disk_red"><disk><color red="0.2" green="0.02" blue="0.05" /></disk></element>
+ <element name="disk_red"><disk><color red="0.16" green="0.02" blue="0.05" /></disk></element>
<element name="led" defstate="0">
- <disk state="0"><color red="0.2" green="0.04" blue="0.046" /></disk>
- <disk state="1"><color red="1.0" green="0.2" blue="0.23" /></disk>
+ <disk state="0"><color red="0.15" green="0.02" blue="0.01" /></disk>
+ <disk state="1"><color red="1.0" green="0.15" blue="0.08" /></disk>
</element>
<element name="digit" defstate="0">
<led7seg><color red="1.0" green="0.15" blue="0.08" /></led7seg>
</element>
- <element name="text_z1"><text string="Aries" align="1"><color red="0.7" green="0.7" blue="0.7" /></text></element> <!-- ♈ "&#x2648;" -->
- <element name="text_z2"><text string="Taurus" align="1"><color red="0.7" green="0.7" blue="0.7" /></text></element> <!-- ♉ "&#x2649;" -->
- <element name="text_z3"><text string="Gemini" align="1"><color red="0.7" green="0.7" blue="0.7" /></text></element> <!-- ♊ "&#x264a;" -->
- <element name="text_z4"><text string="Cancer" align="1"><color red="0.7" green="0.7" blue="0.7" /></text></element> <!-- ♋ "&#x264b;" -->
- <element name="text_z5"><text string="Leo" align="1"><color red="0.7" green="0.7" blue="0.7" /></text></element> <!-- ♌ "&#x264c;" -->
- <element name="text_z6"><text string="Virgo" align="1"><color red="0.7" green="0.7" blue="0.7" /></text></element> <!-- ♍ "&#x264d;" -->
- <element name="text_z7"><text string="Libra" align="1"><color red="0.7" green="0.7" blue="0.7" /></text></element> <!-- ♎ "&#x264e;" -->
- <element name="text_z8"><text string="Scorpio" align="1"><color red="0.7" green="0.7" blue="0.7" /></text></element> <!-- ♏ "&#x264f;" -->
- <element name="text_z9"><text string="Sagittarius" align="1"><color red="0.7" green="0.7" blue="0.7" /></text></element> <!-- ♐ "&#x2650;" -->
- <element name="text_z10"><text string="Capricorn" align="1"><color red="0.7" green="0.7" blue="0.7" /></text></element> <!-- ♑ "&#x2651;" -->
- <element name="text_z11"><text string="Aquarius" align="1"><color red="0.7" green="0.7" blue="0.7" /></text></element> <!-- ♒ "&#x2652;" -->
- <element name="text_z12"><text string="Pisces" align="1"><color red="0.7" green="0.7" blue="0.7" /></text></element> <!-- ♓ "&#x2653;" -->
+ <element name="hl" defstate="0">
+ <text string=" ">
+ <bounds x="0.0" y="0.0" width="1.0" height="1.0" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </text>
+ <rect state="1">
+ <bounds x="0.0" y="0.0" width="1.0" height="1.0" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </rect>
+ </element>
+
+ <element name="switch_mode" defstate="0">
+ <disk><color red="0.77" green="0.77" blue="0.77" /></disk>
+ <text state="0x01" string="H"><color red="0.07" green="0.07" blue="0.07" /></text>
+ <text state="0x02" string="P"><color red="0.07" green="0.07" blue="0.07" /></text>
+ <text state="0x00" string="A"><color red="0.07" green="0.07" blue="0.07" /></text>
+ </element>
+
+ <element name="text_b1">
+ <rect><color red="0.77" green="0.77" blue="0.77" /></rect>
+ <text string="1"><color red="0.07" green="0.07" blue="0.07" /></text>
+ </element>
+ <element name="text_b2">
+ <rect><color red="0.77" green="0.77" blue="0.77" /></rect>
+ <text string="2"><color red="0.07" green="0.07" blue="0.07" /></text>
+ </element>
+ <element name="text_b3">
+ <rect><color red="0.77" green="0.77" blue="0.77" /></rect>
+ <text string="3"><color red="0.07" green="0.07" blue="0.07" /></text>
+ </element>
+ <element name="text_b4">
+ <rect><color red="0.77" green="0.77" blue="0.77" /></rect>
+ <text string="4"><color red="0.07" green="0.07" blue="0.07" /></text>
+ </element>
+ <element name="text_b5">
+ <rect><color red="0.77" green="0.77" blue="0.77" /></rect>
+ <text string="5"><color red="0.07" green="0.07" blue="0.07" /></text>
+ </element>
+ <element name="text_b6">
+ <rect><color red="0.77" green="0.77" blue="0.77" /></rect>
+ <text string="6"><color red="0.07" green="0.07" blue="0.07" /></text>
+ </element>
+ <element name="text_b7">
+ <rect><color red="0.77" green="0.77" blue="0.77" /></rect>
+ <text string="7"><color red="0.07" green="0.07" blue="0.07" /></text>
+ </element>
+ <element name="text_b8">
+ <rect><color red="0.77" green="0.77" blue="0.77" /></rect>
+ <text string="8"><color red="0.07" green="0.07" blue="0.07" /></text>
+ </element>
+ <element name="text_b9">
+ <rect><color red="0.77" green="0.77" blue="0.77" /></rect>
+ <text string="9"><color red="0.07" green="0.07" blue="0.07" /></text>
+ </element>
+ <element name="text_b0">
+ <rect><color red="0.77" green="0.77" blue="0.77" /></rect>
+ <text string="0"><color red="0.07" green="0.07" blue="0.07" /></text>
+ </element>
+ <element name="text_bent">
+ <rect><color red="0.77" green="0.77" blue="0.77" /></rect>
+ <text string="ENT"><color red="0.07" green="0.07" blue="0.07" /></text>
+ </element>
+ <element name="text_bclr">
+ <rect><color red="0.77" green="0.77" blue="0.77" /></rect>
+ <text string="CLR"><color red="0.07" green="0.07" blue="0.07" /></text>
+ </element>
+
+ <element name="text_bp">
+ <disk><color red="0.77" green="0.77" blue="0.77" /></disk>
+ <text string="P"><color red="0.07" green="0.07" blue="0.07" /></text>
+ </element>
+ <element name="text_bl">
+ <disk><color red="0.77" green="0.77" blue="0.77" /></disk>
+ <text string="L"><color red="0.07" green="0.07" blue="0.07" /></text>
+ </element>
+ <element name="text_bj">
+ <disk><color red="0.77" green="0.77" blue="0.77" /></disk>
+ <text string="J"><color red="0.07" green="0.07" blue="0.07" /></text>
+ </element>
+ <element name="text_ba">
+ <disk><color red="0.77" green="0.77" blue="0.77" /></disk>
+ <text string="A"><color red="0.07" green="0.07" blue="0.07" /></text>
+ </element>
+ <element name="text_bd">
+ <disk><color red="0.77" green="0.77" blue="0.77" /></disk>
+ <text string="D"><color red="0.07" green="0.07" blue="0.07" /></text>
+ </element>
+ <element name="text_be">
+ <disk><color red="0.77" green="0.77" blue="0.77" /></disk>
+ <text string="E"><color red="0.07" green="0.07" blue="0.07" /></text>
+ </element>
+
+ <element name="text_z1"><text string="Aries" align="1"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- ♈ "&#x2648;" -->
+ <element name="text_z2"><text string="Taurus" align="1"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- ♉ "&#x2649;" -->
+ <element name="text_z3"><text string="Gemini" align="1"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- ♊ "&#x264a;" -->
+ <element name="text_z4"><text string="Cancer" align="1"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- ♋ "&#x264b;" -->
+ <element name="text_z5"><text string="Leo" align="1"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- ♌ "&#x264c;" -->
+ <element name="text_z6"><text string="Virgo" align="1"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- ♍ "&#x264d;" -->
+ <element name="text_z7"><text string="Libra" align="1"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- ♎ "&#x264e;" -->
+ <element name="text_z8"><text string="Scorpio" align="1"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- ♏ "&#x264f;" -->
+ <element name="text_z9"><text string="Sagittarius" align="1"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- ♐ "&#x2650;" -->
+ <element name="text_z10"><text string="Capricorn" align="1"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- ♑ "&#x2651;" -->
+ <element name="text_z11"><text string="Aquarius" align="1"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- ♒ "&#x2652;" -->
+ <element name="text_z12"><text string="Pisces" align="1"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- ♓ "&#x2653;" -->
+
+ <element name="text_mode"><text string="Mode (H-P-A)"><color red="0.77" green="0.77" blue="0.77" /></text></element>
<!-- build screen -->
<view name="Internal Layout">
<bounds left="-35" right="158" top="5" bottom="198" />
- <bezel element="static_black">
- <bounds left="-35" right="158" top="5" bottom="198" />
- </bezel>
<bezel element="disk_red"><bounds x="-40" y="0" width="203" height="203" /></bezel>
<bezel element="disk_black"><bounds x="-15" y="25" width="153" height="153" /></bezel>
@@ -50,6 +141,8 @@
<bezel name="digit1" element="digit"><bounds x="80" y="70" width="10" height="15" /></bezel>
<bezel name="digit0" element="digit"><bounds x="90" y="70" width="10" height="15" /></bezel>
+ <!-- edgy leds -->
+
<bezel name="9.7" element="led"><bounds x="15" y="145" width="3" height="3" /></bezel>
<bezel name="9.2" element="led"><bounds x="40" y="160" width="3" height="3" /></bezel>
<bezel name="9.4" element="led"><bounds x="80" y="160" width="3" height="3" /></bezel>
@@ -78,5 +171,52 @@
<bezel element="text_z11"><bounds x="4" y="79" width="20" height="4" /></bezel>
<bezel element="text_z12"><bounds x="4" y="119" width="20" height="4" /></bezel>
+ <!-- buttons -->
+
+ <bezel element="text_b1"><bounds x="46.5" y="93" width="7" height="7" /></bezel>
+ <bezel element="text_b4"><bounds x="46.5" y="103" width="7" height="7" /></bezel>
+ <bezel element="text_b7"><bounds x="46.5" y="113" width="7" height="7" /></bezel>
+ <bezel element="text_b0"><bounds x="46.5" y="123" width="7" height="7" /></bezel>
+ <bezel element="text_b2"><bounds x="56.5" y="93" width="7" height="7" /></bezel>
+ <bezel element="text_b5"><bounds x="56.5" y="103" width="7" height="7" /></bezel>
+ <bezel element="text_b8"><bounds x="56.5" y="113" width="7" height="7" /></bezel>
+ <bezel element="static_white"><bounds x="56.5" y="123" width="7" height="7" /></bezel>
+ <bezel element="text_bent"><bounds x="56.6" y="124.3" width="6.8" height="4.1" /></bezel>
+ <bezel element="text_b3"><bounds x="66.5" y="93" width="7" height="7" /></bezel>
+ <bezel element="text_b6"><bounds x="66.5" y="103" width="7" height="7" /></bezel>
+ <bezel element="text_b9"><bounds x="66.5" y="113" width="7" height="7" /></bezel>
+ <bezel element="static_white"><bounds x="66.5" y="123" width="7" height="7" /></bezel>
+ <bezel element="text_bclr"><bounds x="66.6" y="124.3" width="6.8" height="4.1" /></bezel>
+
+ <bezel element="text_bp"><bounds x="26.5" y="89.5" width="7" height="7" /></bezel>
+ <bezel element="text_bl"><bounds x="19.5" y="106.25" width="7" height="7" /></bezel>
+ <bezel element="text_bj"><bounds x="26.5" y="123" width="7" height="7" /></bezel>
+ <bezel element="text_ba"><bounds x="86.5" y="89.5" width="7" height="7" /></bezel>
+ <bezel element="text_bd"><bounds x="93.5" y="106.25" width="7" height="7" /></bezel>
+ <bezel element="text_be"><bounds x="86.5" y="123" width="7" height="7" /></bezel>
+
+ <bezel element="hl" inputtag="IN.0" inputmask="0x04"><bounds x="46.5" y="93" width="7" height="7" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x08"><bounds x="46.5" y="103" width="7" height="7" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x01"><bounds x="46.5" y="113" width="7" height="7" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x08"><bounds x="46.5" y="123" width="7" height="7" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x02"><bounds x="56.5" y="93" width="7" height="7" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x04"><bounds x="56.5" y="103" width="7" height="7" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x08"><bounds x="56.5" y="113" width="7" height="7" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.4" inputmask="0x01"><bounds x="56.5" y="123" width="7" height="7" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x01"><bounds x="66.5" y="93" width="7" height="7" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x02"><bounds x="66.5" y="103" width="7" height="7" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x04"><bounds x="66.5" y="113" width="7" height="7" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.4" inputmask="0x08"><bounds x="66.5" y="123" width="7" height="7" /><color alpha="0.2" /></bezel>
+
+ <bezel element="hl" inputtag="IN.3" inputmask="0x01"><bounds x="26.5" y="89.5" width="7" height="7" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x02"><bounds x="19.5" y="106.25" width="7" height="7" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x04"><bounds x="26.5" y="123" width="7" height="7" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x02"><bounds x="86.5" y="89.5" width="7" height="7" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x01"><bounds x="93.5" y="106.25" width="7" height="7" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x08"><bounds x="86.5" y="123" width="7" height="7" /><color alpha="0.2" /></bezel>
+
+ <bezel element="switch_mode" inputtag="IN.5" inputmask="0x03" inputraw="1"><bounds x="56.5" y="140" width="7" height="7" /></bezel>
+ <bezel element="text_mode"><bounds x="45" y="148" width="30" height="4" /></bezel>
+
</view>
</mamelayout>
diff --git a/src/mame/machine/ajax.cpp b/src/mame/machine/ajax.cpp
index 6ac648670e2..0b0db87970e 100644
--- a/src/mame/machine/ajax.cpp
+++ b/src/mame/machine/ajax.cpp
@@ -150,7 +150,7 @@ WRITE8_MEMBER(ajax_state::ls138_f10_w)
m_audiocpu->set_input_line(0, HOLD_LINE);
break;
case 0x02: /* Sound command number */
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
break;
case 0x03: /* Bankswitch + coin counters + priority*/
bankswitch_w(space, 0, data);
diff --git a/src/mame/machine/apollo.cpp b/src/mame/machine/apollo.cpp
index a28cd843c4d..2cdbd251a08 100644
--- a/src/mame/machine/apollo.cpp
+++ b/src/mame/machine/apollo.cpp
@@ -106,7 +106,7 @@ INPUT_PORTS_START( apollo_config )
// PORT_CONFNAME(APOLLO_CONF_IDLE_SLEEP, 0x00, "Idle Sleep")
// PORT_CONFSETTING(0x00, DEF_STR ( Off ) )
// PORT_CONFSETTING(APOLLO_CONF_IDLE_SLEEP, DEF_STR ( On ) )
-
+#ifdef APOLLO_XXL
PORT_CONFNAME(APOLLO_CONF_TRAP_TRACE, 0x00, "Trap Trace")
PORT_CONFSETTING(0x00, DEF_STR ( Off ) )
PORT_CONFSETTING(APOLLO_CONF_TRAP_TRACE, DEF_STR ( On ) )
@@ -114,7 +114,7 @@ INPUT_PORTS_START( apollo_config )
PORT_CONFNAME(APOLLO_CONF_FPU_TRACE, 0x00, "FPU Trace")
PORT_CONFSETTING(0x00, DEF_STR ( Off ) )
PORT_CONFSETTING(APOLLO_CONF_FPU_TRACE, DEF_STR ( On ) )
-#ifdef APOLLO_XXL
+
PORT_CONFNAME(APOLLO_CONF_DISK_TRACE, 0x00, "Disk Trace")
PORT_CONFSETTING(0x00, DEF_STR ( Off ) )
PORT_CONFSETTING(APOLLO_CONF_DISK_TRACE, DEF_STR ( On ) )
@@ -256,11 +256,11 @@ WRITE16_MEMBER(apollo_state::apollo_csr_control_register_w)
// disable FPU (i.e. FPU opcodes in CPU)
apollo_set_cpu_has_fpu(m_maincpu, 0);
- if (!apollo_is_dn3000())
+ if (!apollo_is_dn3000() && !m_maincpu->get_pmmu_enable())
{
// hack: set APOLLO_CSR_SR_FP_TRAP in cpu status register for /sau7/self_test
// APOLLO_CSR_SR_FP_TRAP in status register should be set by next fmove instruction
- // cpu_status_register |= APOLLO_CSR_SR_FP_TRAP;
+ cpu_status_register |= APOLLO_CSR_SR_FP_TRAP;
}
}
diff --git a/src/mame/machine/apollo_kbd.cpp b/src/mame/machine/apollo_kbd.cpp
index a3d99e7ce2e..54302827fea 100644
--- a/src/mame/machine/apollo_kbd.cpp
+++ b/src/mame/machine/apollo_kbd.cpp
@@ -381,15 +381,10 @@ void apollo_kbd_device::mouse::read_mouse()
}
else
{
- int b = m_device->m_io_mouse[0]->read();
- int x = m_device->m_io_mouse[1]->read();
- int y = m_device->m_io_mouse[2]->read();
-
- /* sign extend values < 0 */
- if (x & 0x80)
- x |= 0xffffff00;
- if (y & 0x80)
- y |= 0xffffff00;
+ char b = m_device->m_io_mouse[0]->read();
+ char x = m_device->m_io_mouse[1]->read();
+ char y = m_device->m_io_mouse[2]->read();
+
y = -y;
if (m_last_b < 0)
@@ -436,9 +431,9 @@ void apollo_kbd_device::mouse::read_mouse()
// mouse data submitted; update current mouse state
m_last_b = b;
- m_last_x += dx;
- m_last_y += dy;
- m_tx_pending = 100; // mouse data packet will take 40 ms
+ m_last_x = x;
+ m_last_y = y;
+ m_tx_pending = 50; // mouse data packet will take 40 ms
}
}
}
diff --git a/src/mame/machine/apple3.cpp b/src/mame/machine/apple3.cpp
index 6be7745c565..8e7f0091f0b 100644
--- a/src/mame/machine/apple3.cpp
+++ b/src/mame/machine/apple3.cpp
@@ -47,8 +47,8 @@
#include "emu.h"
#include "includes/apple3.h"
-#define LOG_MEMORY 1
-#define LOG_INDXADDR 1
+#define LOG_MEMORY 0
+#define LOG_INDXADDR 0
#define ENV_SLOWSPEED (0x80)
#define ENV_IOENABLE (0x40)
diff --git a/src/mame/machine/bublbobl.cpp b/src/mame/machine/bublbobl.cpp
index 55ecc04b88f..5f2ae51ad1a 100644
--- a/src/mame/machine/bublbobl.cpp
+++ b/src/mame/machine/bublbobl.cpp
@@ -22,7 +22,7 @@ void bublbobl_state::common_sreset(int state)
if (m_ym2203 != nullptr) m_ym2203->reset(); // ym2203, if present, is reset
if (m_ym3526 != nullptr) m_ym3526->reset(); // ym3526, if present, is reset
m_audiocpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); // if a sound irq is active, it is cleared. is this necessary? if the above two devices de-assert /IRQ on reset (as a device_line write) properly, it shouldn't be...
- m_sound_to_main->acknowledge_w(m_audiocpu->space(AS_PROGRAM), 0, 0x00, 0xFF); // sound->main semaphore is cleared
+ m_sound_to_main->acknowledge_w(); // sound->main semaphore is cleared
m_soundnmi->in_w<0>(0); // sound nmi enable is unset
}
m_audiocpu->set_input_line(INPUT_LINE_RESET, state); // soundcpu is reset
diff --git a/src/mame/machine/decocass.cpp b/src/mame/machine/decocass.cpp
index 140e928e2bd..53c42a8559c 100644
--- a/src/mame/machine/decocass.cpp
+++ b/src/mame/machine/decocass.cpp
@@ -57,7 +57,7 @@ READ8_MEMBER( decocass_state::decocass_sound_command_main_r)
WRITE8_MEMBER(decocass_state::decocass_sound_command_w)
{
LOG(2,("CPU %s sound command -> $%02x\n", m_maincpu->tag(), data));
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_sound_ack |= 0x80;
/* remove snd cpu data ack bit. i don't see it in the schems, but... */
m_sound_ack &= ~0x40;
@@ -66,7 +66,7 @@ WRITE8_MEMBER(decocass_state::decocass_sound_command_w)
READ8_MEMBER(decocass_state::decocass_sound_data_r)
{
- uint8_t data = m_soundlatch2->read(space, 0);
+ uint8_t data = m_soundlatch2->read();
LOG(2,("CPU %s sound data <- $%02x\n", m_maincpu->tag(), data));
return data;
}
@@ -81,13 +81,13 @@ READ8_MEMBER(decocass_state::decocass_sound_ack_r)
WRITE8_MEMBER(decocass_state::decocass_sound_data_w)
{
LOG(2,("CPU %s sound data -> $%02x\n", m_audiocpu->tag(), data));
- m_soundlatch2->write(space, 0, data);
+ m_soundlatch2->write(data);
m_sound_ack |= 0x40;
}
READ8_MEMBER(decocass_state::decocass_sound_command_r)
{
- uint8_t data = m_soundlatch->read(space, 0);
+ uint8_t data = m_soundlatch->read();
LOG(4,("CPU %s sound command <- $%02x\n", m_audiocpu->tag(), data));
m_audiocpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
m_sound_ack &= ~0x80;
diff --git a/src/mame/machine/fidelbase.cpp b/src/mame/machine/fidelbase.cpp
index 0d638879140..2195dae45f0 100644
--- a/src/mame/machine/fidelbase.cpp
+++ b/src/mame/machine/fidelbase.cpp
@@ -55,13 +55,18 @@ void fidelbase_state::machine_start()
save_item(NAME(m_speech_data));
save_item(NAME(m_speech_bank));
save_item(NAME(m_div_status));
+ save_item(NAME(m_div_config));
+
+ // dummy timer for cpu divider
+ m_div_timer = machine().scheduler().timer_alloc(timer_expired_delegate(), this);
}
void fidelbase_state::machine_reset()
{
chessbase_state::machine_reset();
- m_div_status = ~0;
+ // init cpu divider (optional)
+ div_refresh();
}
@@ -101,30 +106,28 @@ READ8_MEMBER(fidelbase_state::cartridge_r)
void fidelbase_state::div_set_cpu_freq(offs_t offset)
{
- static const u16 mask = 0x6000;
- u16 status = (offset & mask) | m_div_config->read();
-
- if (status != m_div_status && status & 2)
+ if (offset != m_div_status)
{
// when a13/a14 is high, XTAL goes through divider(s)
// (depending on factory-set jumper, either one or two 7474)
- float div = (status & 1) ? 0.25 : 0.5;
- m_maincpu->set_clock_scale((offset & mask) ? div : 1.0);
- }
+ m_maincpu->set_clock_scale(offset ? ((m_div_config & 1) ? 0.25 : 0.5) : 1.0);
- m_div_status = status;
+ m_div_status = offset;
+ }
}
void fidelbase_state::div_trampoline_w(offs_t offset, u8 data)
{
- div_set_cpu_freq(offset);
+ if (m_div_config)
+ div_set_cpu_freq(offset & 0x6000);
+
m_mainmap->write8(offset, data);
}
u8 fidelbase_state::div_trampoline_r(offs_t offset)
{
- if (!machine().side_effects_disabled())
- div_set_cpu_freq(offset);
+ if (m_div_config && !machine().side_effects_disabled())
+ div_set_cpu_freq(offset & 0x6000);
return m_mainmap->read8(offset);
}
@@ -134,9 +137,30 @@ void fidelbase_state::div_trampoline(address_map &map)
map(0x0000, 0xffff).rw(FUNC(fidelbase_state::div_trampoline_r), FUNC(fidelbase_state::div_trampoline_w));
}
+void fidelbase_state::div_refresh(ioport_value val)
+{
+ if (val == 0xff)
+ {
+ // bail out if there is no cpu divider
+ ioport_port *inp = ioport("div_config");
+ if (inp == nullptr)
+ return;
+
+ val = inp->read();
+ }
+
+ m_maincpu->set_clock_scale(1.0);
+ m_div_status = ~0;
+ m_div_config = val;
+
+ // stop high frequency background timer if cpu divider is disabled
+ attotime period = (val) ? attotime::from_hz(m_maincpu->clock()) : attotime::never;
+ m_div_timer->adjust(period, 0, period);
+}
+
INPUT_PORTS_START( fidel_cpu_div_2 )
PORT_START("div_config") // hardwired, default to /2
- PORT_CONFNAME( 0x03, 0x02, "CPU Divider" )
+ PORT_CONFNAME( 0x03, 0x02, "CPU Divider" ) PORT_CHANGED_MEMBER(DEVICE_SELF, fidelbase_state, div_changed, nullptr)
PORT_CONFSETTING( 0x00, "Disabled" )
PORT_CONFSETTING( 0x02, "2" )
PORT_CONFSETTING( 0x03, "4" )
@@ -144,7 +168,7 @@ INPUT_PORTS_END
INPUT_PORTS_START( fidel_cpu_div_4 )
PORT_START("div_config") // hardwired, default to /4
- PORT_CONFNAME( 0x03, 0x03, "CPU Divider" )
+ PORT_CONFNAME( 0x03, 0x03, "CPU Divider" ) PORT_CHANGED_MEMBER(DEVICE_SELF, fidelbase_state, div_changed, nullptr)
PORT_CONFSETTING( 0x00, "Disabled" )
PORT_CONFSETTING( 0x02, "2" )
PORT_CONFSETTING( 0x03, "4" )
diff --git a/src/mame/machine/gaelco2.cpp b/src/mame/machine/gaelco2.cpp
index 8c186326c3c..672afa9d51e 100644
--- a/src/mame/machine/gaelco2.cpp
+++ b/src/mame/machine/gaelco2.cpp
@@ -22,7 +22,7 @@
***************************************************************************/
-void gaelco2_state::gaelco2_ROM16_split_gfx(const char *src_reg, const char *dst_reg, int start, int length, int dest1, int dest2)
+void gaelco2_state::ROM16_split_gfx(const char *src_reg, const char *dst_reg, int start, int length, int dest1, int dest2)
{
int i;
@@ -67,16 +67,16 @@ void gaelco2_state::init_alighunt()
*/
/* split ROM u48 */
- gaelco2_ROM16_split_gfx("gfx2", "gfx1", 0x0000000, 0x0400000, 0x0000000, 0x0400000);
+ ROM16_split_gfx("gfx2", "gfx1", 0x0000000, 0x0400000, 0x0000000, 0x0400000);
/* split ROM u47 */
- gaelco2_ROM16_split_gfx("gfx2", "gfx1", 0x0400000, 0x0400000, 0x0200000, 0x0600000);
+ ROM16_split_gfx("gfx2", "gfx1", 0x0400000, 0x0400000, 0x0200000, 0x0600000);
/* split ROM u50 */
- gaelco2_ROM16_split_gfx("gfx2", "gfx1", 0x0800000, 0x0400000, 0x0800000, 0x0c00000);
+ ROM16_split_gfx("gfx2", "gfx1", 0x0800000, 0x0400000, 0x0800000, 0x0c00000);
/* split ROM u49 */
- gaelco2_ROM16_split_gfx("gfx2", "gfx1", 0x0c00000, 0x0400000, 0x0a00000, 0x0e00000);
+ ROM16_split_gfx("gfx2", "gfx1", 0x0c00000, 0x0400000, 0x0a00000, 0x0e00000);
}
@@ -98,17 +98,17 @@ void gaelco2_state::init_touchgo()
*/
/* split ROM ic65 */
- gaelco2_ROM16_split_gfx("gfx2", "gfx1", 0x0000000, 0x0400000, 0x0000000, 0x0400000);
+ ROM16_split_gfx("gfx2", "gfx1", 0x0000000, 0x0400000, 0x0000000, 0x0400000);
/* split ROM ic66 */
- gaelco2_ROM16_split_gfx("gfx2", "gfx1", 0x0400000, 0x0200000, 0x0200000, 0x0600000);
+ ROM16_split_gfx("gfx2", "gfx1", 0x0400000, 0x0200000, 0x0200000, 0x0600000);
/* split ROM ic67 */
- gaelco2_ROM16_split_gfx("gfx2", "gfx1", 0x0800000, 0x0400000, 0x0800000, 0x0c00000);
+ ROM16_split_gfx("gfx2", "gfx1", 0x0800000, 0x0400000, 0x0800000, 0x0c00000);
}
-void gaelco2_state::init_snowboar()
+void gaelco2_state::init_snowboara()
{
/*
For "gfx2" we have this memory map:
@@ -126,13 +126,14 @@ void gaelco2_state::init_snowboar()
*/
/* split ROM sb44 */
- gaelco2_ROM16_split_gfx("gfx2", "gfx1", 0x0000000, 0x0400000, 0x0000000, 0x0400000);
+ ROM16_split_gfx("gfx2", "gfx1", 0x0000000, 0x0400000, 0x0000000, 0x0400000);
/* split ROM sb45 */
- gaelco2_ROM16_split_gfx("gfx2", "gfx1", 0x0400000, 0x0400000, 0x0200000, 0x0600000);
+ ROM16_split_gfx("gfx2", "gfx1", 0x0400000, 0x0400000, 0x0200000, 0x0600000);
/* split ROM sb46 */
- gaelco2_ROM16_split_gfx("gfx2", "gfx1", 0x0800000, 0x0400000, 0x0800000, 0x0c00000);
+ ROM16_split_gfx("gfx2", "gfx1", 0x0800000, 0x0400000, 0x0800000, 0x0c00000);
+ init_snowboar();
}
@@ -151,10 +152,10 @@ void gaelco2_state::init_wrally2()
*/
/* split ROM wr2_ic69.ic69 */
- gaelco2_ROM16_split_gfx("gfx2", "gfx1", 0x0000000, 0x0400000, 0x0000000, 0x0200000);
+ ROM16_split_gfx("gfx2", "gfx1", 0x0000000, 0x0400000, 0x0000000, 0x0200000);
/* split ROM wr2_ic70.ic70 */
- gaelco2_ROM16_split_gfx("gfx2", "gfx1", 0x0400000, 0x0200000, 0x0400000, 0x0600000);
+ ROM16_split_gfx("gfx2", "gfx1", 0x0400000, 0x0200000, 0x0400000, 0x0600000);
}
@@ -164,13 +165,13 @@ void gaelco2_state::init_wrally2()
***************************************************************************/
-WRITE8_MEMBER(gaelco2_state::shareram_w)
+void gaelco2_state::shareram_w(offs_t offset, u8 data)
{
// why isn't there an AM_SOMETHING macro for this?
reinterpret_cast<u8 *>(m_shareram.target())[BYTE_XOR_BE(offset)] = data;
}
-READ8_MEMBER(gaelco2_state::shareram_r)
+u8 gaelco2_state::shareram_r(offs_t offset)
{
// why isn't there an AM_SOMETHING macro for this?
return reinterpret_cast<u8 const *>(m_shareram.target())[BYTE_XOR_BE(offset)];
@@ -183,7 +184,7 @@ READ8_MEMBER(gaelco2_state::shareram_r)
***************************************************************************/
-WRITE16_MEMBER(gaelco2_state::wrally2_latch_w)
+void gaelco2_state::wrally2_latch_w(offs_t offset, u16 data)
{
m_mainlatch->write_bit(offset >> 2, BIT(data, 0));
}
@@ -208,7 +209,7 @@ WRITE_LINE_MEMBER(gaelco2_state::coin4_counter_w)
machine().bookkeeping().coin_counter_w(3, state);
}
-WRITE16_MEMBER(gaelco2_state::alighunt_coin_w)
+void gaelco2_state::alighunt_coin_w(u16 data)
{
/* Coin Lockouts */
machine().bookkeeping().coin_lockout_w(0, ~data & 0x01);
@@ -231,7 +232,7 @@ void bang_state::init_bang()
m_clr_gun_int = 0;
}
-WRITE16_MEMBER(bang_state::bang_clr_gun_int_w)
+void bang_state::bang_clr_gun_int_w(u16 data)
{
m_clr_gun_int = 1;
}
@@ -300,12 +301,17 @@ WRITE_LINE_MEMBER(wrally2_state::wrally2_adc_cs)
***************************************************************************/
-static uint32_t rol(uint32_t x, unsigned int c)
+void gaelco2_state::init_snowboar()
+{
+ save_item(NAME(m_snowboard_latch));
+}
+
+static u32 rol(u32 x, u8 c)
{
return (x << c) | (x >> (32 - c));
}
-static uint16_t get_lo(uint32_t x)
+static u16 get_lo(u32 x)
{
return ((x & 0x00000010) << 1) |
((x & 0x00000800) << 3) |
@@ -322,7 +328,7 @@ static uint16_t get_lo(uint32_t x)
((x & 0x00000020) >> 1);
}
-static uint16_t get_hi(uint32_t x)
+static u16 get_hi(u32 x)
{
return ((x & 0x00001400) >> 0) |
((x & 0x10000000) >> 26) |
@@ -341,7 +347,7 @@ static uint16_t get_hi(uint32_t x)
((x & 0x00000100) >> 1);
}
-static uint16_t get_out(uint16_t x)
+static u16 get_out(u16 x)
{
return ((x & 0xc840) << 0) |
((x & 0x0080) << 2) |
@@ -357,27 +363,25 @@ static uint16_t get_out(uint16_t x)
((x & 0x0020) >> 2);
}
-uint16_t mangle(uint32_t x)
+u16 mangle(u32 x)
{
- uint16_t a = get_lo(x);
- uint16_t b = get_hi(x);
+ u16 a = get_lo(x);
+ u16 b = get_hi(x);
return get_out(((a ^ 0x0010) - (b ^ 0x0024)) ^ 0x5496);
}
-READ16_MEMBER(gaelco2_state::snowboar_protection_r)
+u16 gaelco2_state::snowboar_protection_r()
{
- uint16_t ret = mangle(snowboard_latch);
+ u16 ret = mangle(m_snowboard_latch);
ret = ((ret & 0xff00) >> 8) | ((ret & 0x00ff) << 8);
return ret;
-
}
-WRITE16_MEMBER(gaelco2_state::snowboar_protection_w)
+void gaelco2_state::snowboar_protection_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_snowboar_protection[offset]);
- snowboard_latch = (snowboard_latch << 16) | data;
+ m_snowboard_latch = (m_snowboard_latch << 16) | data;
logerror("%06x: protection write %04x to %04x\n", m_maincpu->pc(), data, offset*2);
-
}
diff --git a/src/mame/machine/gdrom.cpp b/src/mame/machine/gdrom.cpp
index 1a8829e6dd0..a25cc5d5373 100644
--- a/src/mame/machine/gdrom.cpp
+++ b/src/mame/machine/gdrom.cpp
@@ -55,7 +55,7 @@
Dreamcast BIOS code verify only 1st result byte, if it's 5th bit (0x10) == 1.
Naomi DIMM firmware verify if result byte equal to 0x1f.
-
+
SYS_CHG_COMD (72h) ??? Authentication for next command ?
Parameters: 1byte, probably key/password, in retail Dreamcast - 5th byte of unit SN# (located in flash ROM at 1A05Ah), 0 in Dev.box checker BIOS.
Result: none
diff --git a/src/mame/machine/leland.cpp b/src/mame/machine/leland.cpp
index 46c871dd30e..6069d59528c 100644
--- a/src/mame/machine/leland.cpp
+++ b/src/mame/machine/leland.cpp
@@ -1236,7 +1236,7 @@ WRITE8_MEMBER(ataxx_state::ataxx_master_output_w)
WRITE8_MEMBER(leland_state::leland_gated_paletteram_w)
{
if (m_wcol_enable)
- m_palette->write8(space, offset, data);
+ m_palette->write8(offset, data);
}
@@ -1251,7 +1251,7 @@ READ8_MEMBER(leland_state::leland_gated_paletteram_r)
WRITE8_MEMBER(ataxx_state::ataxx_paletteram_and_misc_w)
{
if (m_wcol_enable)
- m_palette->write8(space, offset, data);
+ m_palette->write8(offset, data);
else if (offset == 0x7f8 || offset == 0x7f9)
leland_master_video_addr_w(space, offset - 0x7f8, data);
else if (offset == 0x7fc)
diff --git a/src/mame/machine/midyunit.cpp b/src/mame/machine/midyunit.cpp
index a959e493516..c40aae938d3 100644
--- a/src/mame/machine/midyunit.cpp
+++ b/src/mame/machine/midyunit.cpp
@@ -592,7 +592,7 @@ WRITE16_MEMBER(midyunit_state::midyunit_sound_w)
break;
case SOUND_YAWDIM:
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
break;
}
diff --git a/src/mame/machine/namcos1.cpp b/src/mame/machine/namcos1.cpp
index 627e2a8222c..02dc8fedb50 100644
--- a/src/mame/machine/namcos1.cpp
+++ b/src/mame/machine/namcos1.cpp
@@ -10,20 +10,20 @@
* *
*******************************************************************************/
-WRITE8_MEMBER( namcos1_state::_3dcs_w )
+void namcos1_state::_3dcs_w(offs_t offset, u8 data)
{
if (offset & 1) popmessage("LEFT");
else popmessage("RIGHT");
}
-READ8_MEMBER( namcos1_state::no_key_r )
+u8 namcos1_state::no_key_r(offs_t offset)
{
popmessage("%s: keychip read %04x\n", m_mcu->tag(), m_mcu->pc(), offset);
return 0;
}
-WRITE8_MEMBER( namcos1_state::no_key_w )
+void namcos1_state::no_key_w(offs_t offset, u8 data)
{
popmessage("%s: keychip write %04x=%02x\n", m_mcu->tag(), m_mcu->pc(), offset, data);
}
@@ -128,7 +128,7 @@ puzlclub:
CPU #0 PC e017: keychip write 0003=35 [they probably used RAM instead of a key chip for this prototype]
CPU #0 PC e3d4: keychip read 0003 [AND #$37 = key no.]
*/
-READ8_MEMBER( namcos1_state::key_type1_r )
+u8 namcos1_state::key_type1_r(offs_t offset)
{
// logerror("%s: keychip read %04x\n", machine().describe_context(), offset);
@@ -159,7 +159,7 @@ READ8_MEMBER( namcos1_state::key_type1_r )
return 0;
}
-WRITE8_MEMBER( namcos1_state::key_type1_w )
+void namcos1_state::key_type1_w(offs_t offset, u8 data)
{
// logerror("%s: keychip write %04x=%02x\n", machine().describe_context(), offset, data);
@@ -311,7 +311,7 @@ CPU #0 PC e574: keychip read 0001
*/
-READ8_MEMBER( namcos1_state::key_type2_r )
+u8 namcos1_state::key_type2_r(offs_t offset)
{
// logerror("%s: keychip read %04x\n", machine().describe_context(), offset);
@@ -330,7 +330,7 @@ READ8_MEMBER( namcos1_state::key_type2_r )
return 0;
}
-WRITE8_MEMBER( namcos1_state::key_type2_w )
+void namcos1_state::key_type2_w(offs_t offset, u8 data)
{
// logerror("%s: keychip write %04x=%02x\n", machine().describe_context(), offset, data);
@@ -340,8 +340,8 @@ WRITE8_MEMBER( namcos1_state::key_type2_w )
if (offset == 3)
{
- unsigned int d = (m_key[0] << 8) | m_key[1];
- unsigned int n = (m_key_numerator_high_word << 16) | (m_key[2] << 8) | m_key[3];
+ u32 d = (m_key[0] << 8) | m_key[1];
+ u32 n = (m_key_numerator_high_word << 16) | (m_key[2] << 8) | m_key[3];
if (d)
{
@@ -437,7 +437,7 @@ CPU #0 PC ca96: keychip read 0043 [0x30 | (ARG & 0x0f)]
CPU #0 PC e45a: keychip read 0030 [discarded]
*/
-READ8_MEMBER( namcos1_state::key_type3_r )
+u8 namcos1_state::key_type3_r(offs_t offset)
{
// logerror("%s: keychip read %04x\n", machine().describe_context(), offset);
@@ -447,7 +447,7 @@ READ8_MEMBER( namcos1_state::key_type3_r )
The schematics don't show A11 being used, so I go for this handling.
*/
- int op = (offset & 0x70) >> 4;
+ const int op = (offset & 0x70) >> 4;
if (op == m_key_reg) return m_key_id;
if (op == m_key_rng) return machine().rand();
@@ -461,7 +461,7 @@ READ8_MEMBER( namcos1_state::key_type3_r )
return 0;
}
-WRITE8_MEMBER( namcos1_state::key_type3_w )
+void namcos1_state::key_type3_w(offs_t offset, u8 data)
{
// logerror("%s: keychip write %04x=%02x\n", machine().describe_context(), offset, data);
@@ -476,7 +476,7 @@ WRITE8_MEMBER( namcos1_state::key_type3_w )
* *
*******************************************************************************/
-WRITE8_MEMBER(namcos1_state::sound_bankswitch_w)
+void namcos1_state::sound_bankswitch_w(u8 data)
{
m_soundbank->set_entry((data & 0x70) >> 4);
}
@@ -545,7 +545,7 @@ void namcos1_state::machine_reset()
*******************************************************************************/
/* mcu banked rom area select */
-WRITE8_MEMBER(namcos1_state::mcu_bankswitch_w)
+void namcos1_state::mcu_bankswitch_w(u8 data)
{
int bank;
@@ -581,7 +581,7 @@ WRITE8_MEMBER(namcos1_state::mcu_bankswitch_w)
/* I found set $A6 only initialize in MCU */
/* This patch kill write this data by MCU case $A6 to xx(clear) */
-WRITE8_MEMBER(namcos1_state::mcu_patch_w)
+void namcos1_state::mcu_patch_w(u8 data)
{
//logerror("mcu C000 write %s data=%02x\n",machine().describe_context(),data);
if (m_mcu_patch_data == 0xa6) return;
@@ -603,14 +603,14 @@ void namcos1_state::driver_init()
{
if ((i & 0x010000) == 0)
{
- uint8_t t = m_rom[i];
+ u8 t = m_rom[i];
m_rom[i] = m_rom[i + 0x010000];
m_rom[i + 0x010000] = t;
}
}
// kludge! see notes
- m_mcu->space(AS_PROGRAM).install_write_handler(0xc000, 0xc000, write8_delegate(FUNC(namcos1_state::mcu_patch_w), this));
+ m_mcu->space(AS_PROGRAM).install_write_handler(0xc000, 0xc000, write8smo_delegate(FUNC(namcos1_state::mcu_patch_w), this));
// these are overridden as needed in the specific DRIVER_INIT_MEMBERs
m_key_id = 0;
@@ -622,6 +622,38 @@ void namcos1_state::driver_init()
m_key_top4 = 0;
}
+void namcos1_state::key_type_1_init(int key_id)
+{
+ m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff,
+ read8sm_delegate(FUNC(namcos1_state::key_type1_r),this),
+ write8sm_delegate(FUNC(namcos1_state::key_type1_w),this));
+ m_key_id = key_id;
+}
+
+void namcos1_state::key_type_2_init(int key_id)
+{
+ m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff,
+ read8sm_delegate(FUNC(namcos1_state::key_type2_r),this),
+ write8sm_delegate(FUNC(namcos1_state::key_type2_w),this));
+ m_key_id = key_id;
+ save_item(NAME(m_key_quotient));
+ save_item(NAME(m_key_reminder));
+ save_item(NAME(m_key_numerator_high_word));
+}
+
+void namcos1_state::key_type_3_init(int key_id, int reg, int rng, int swap4_arg, int swap4, int bottom4, int top4)
+{
+ m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff,
+ read8sm_delegate(FUNC(namcos1_state::key_type3_r),this),
+ write8sm_delegate(FUNC(namcos1_state::key_type3_w),this));
+ m_key_id = key_id;
+ m_key_reg = reg;
+ m_key_rng = rng;
+ m_key_swap4_arg = swap4_arg;
+ m_key_swap4 = swap4;
+ m_key_bottom4 = bottom4;
+ m_key_top4 = top4;
+}
/*******************************************************************************
* Shadowland / Youkai Douchuuki specific *
@@ -637,10 +669,7 @@ void namcos1_state::init_shadowld()
void namcos1_state::init_dspirit()
{
driver_init();
- m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff,
- read8_delegate(FUNC(namcos1_state::key_type1_r),this),
- write8_delegate(FUNC(namcos1_state::key_type1_w),this));
- m_key_id = 0x36;
+ key_type_1_init(0x36);
}
/*******************************************************************************
@@ -649,10 +678,7 @@ void namcos1_state::init_dspirit()
void namcos1_state::init_wldcourt()
{
driver_init();
- m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff,
- read8_delegate(FUNC(namcos1_state::key_type1_r),this),
- write8_delegate(FUNC(namcos1_state::key_type1_w),this));
- m_key_id = 0x35;
+ key_type_1_init(0x35);
}
/*******************************************************************************
@@ -661,10 +687,7 @@ void namcos1_state::init_wldcourt()
void namcos1_state::init_blazer()
{
driver_init();
- m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff,
- read8_delegate(FUNC(namcos1_state::key_type1_r),this),
- write8_delegate(FUNC(namcos1_state::key_type1_w),this));
- m_key_id = 0x13;
+ key_type_1_init(0x13);
}
/*******************************************************************************
@@ -673,10 +696,7 @@ void namcos1_state::init_blazer()
void namcos1_state::init_puzlclub()
{
driver_init();
- m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff,
- read8_delegate(FUNC(namcos1_state::key_type1_r),this),
- write8_delegate(FUNC(namcos1_state::key_type1_w),this));
- m_key_id = 0x35;
+ key_type_1_init(0x35);
}
/*******************************************************************************
@@ -685,13 +705,7 @@ void namcos1_state::init_puzlclub()
void namcos1_state::init_pacmania()
{
driver_init();
- m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff,
- read8_delegate(FUNC(namcos1_state::key_type2_r),this),
- write8_delegate(FUNC(namcos1_state::key_type2_w),this));
- m_key_id = 0x12;
- save_item(NAME(m_key_quotient));
- save_item(NAME(m_key_reminder));
- save_item(NAME(m_key_numerator_high_word));
+ key_type_2_init(0x12);
}
/*******************************************************************************
@@ -700,13 +714,7 @@ void namcos1_state::init_pacmania()
void namcos1_state::init_alice()
{
driver_init();
- m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff,
- read8_delegate(FUNC(namcos1_state::key_type2_r),this),
- write8_delegate(FUNC(namcos1_state::key_type2_w),this));
- m_key_id = 0x25;
- save_item(NAME(m_key_quotient));
- save_item(NAME(m_key_reminder));
- save_item(NAME(m_key_numerator_high_word));
+ key_type_2_init(0x25);
}
/*******************************************************************************
@@ -715,13 +723,7 @@ void namcos1_state::init_alice()
void namcos1_state::init_galaga88()
{
driver_init();
- m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff,
- read8_delegate(FUNC(namcos1_state::key_type2_r),this),
- write8_delegate(FUNC(namcos1_state::key_type2_w),this));
- m_key_id = 0x31;
- save_item(NAME(m_key_quotient));
- save_item(NAME(m_key_reminder));
- save_item(NAME(m_key_numerator_high_word));
+ key_type_2_init(0x31);
}
/*******************************************************************************
@@ -730,13 +732,7 @@ void namcos1_state::init_galaga88()
void namcos1_state::init_ws()
{
driver_init();
- m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff,
- read8_delegate(FUNC(namcos1_state::key_type2_r),this),
- write8_delegate(FUNC(namcos1_state::key_type2_w),this));
- m_key_id = 0x07;
- save_item(NAME(m_key_quotient));
- save_item(NAME(m_key_reminder));
- save_item(NAME(m_key_numerator_high_word));
+ key_type_2_init(0x07);
}
/*******************************************************************************
@@ -745,13 +741,7 @@ void namcos1_state::init_ws()
void namcos1_state::init_bakutotu()
{
driver_init();
- m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff,
- read8_delegate(FUNC(namcos1_state::key_type2_r),this),
- write8_delegate(FUNC(namcos1_state::key_type2_w),this));
- m_key_id = 0x22;
- save_item(NAME(m_key_quotient));
- save_item(NAME(m_key_reminder));
- save_item(NAME(m_key_numerator_high_word));
+ key_type_2_init(0x22);
}
/*******************************************************************************
@@ -760,16 +750,7 @@ void namcos1_state::init_bakutotu()
void namcos1_state::init_splatter()
{
driver_init();
- m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff,
- read8_delegate(FUNC(namcos1_state::key_type3_r),this),
- write8_delegate(FUNC(namcos1_state::key_type3_w),this));
- m_key_id = 181;
- m_key_reg = 3;
- m_key_rng = 4;
- m_key_swap4_arg = -1;
- m_key_swap4 = -1;
- m_key_bottom4 = -1;
- m_key_top4 = -1;
+ key_type_3_init(181, 3, 4, -1, -1, -1, -1);
}
/*******************************************************************************
@@ -778,16 +759,7 @@ void namcos1_state::init_splatter()
void namcos1_state::init_rompers()
{
driver_init();
- m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff,
- read8_delegate(FUNC(namcos1_state::key_type3_r),this),
- write8_delegate(FUNC(namcos1_state::key_type3_w),this));
- m_key_id = 182;
- m_key_reg = 7;
- m_key_rng = -1;
- m_key_swap4_arg = -1;
- m_key_swap4 = -1;
- m_key_bottom4 = -1;
- m_key_top4 = -1;
+ key_type_3_init(182, 7, -1, -1, -1, -1, -1);
}
/*******************************************************************************
@@ -796,16 +768,7 @@ void namcos1_state::init_rompers()
void namcos1_state::init_blastoff()
{
driver_init();
- m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff,
- read8_delegate(FUNC(namcos1_state::key_type3_r),this),
- write8_delegate(FUNC(namcos1_state::key_type3_w),this));
- m_key_id = 183;
- m_key_reg = 0;
- m_key_rng = 7;
- m_key_swap4_arg = 3;
- m_key_swap4 = 5;
- m_key_bottom4 = -1;
- m_key_top4 = -1;
+ key_type_3_init(183, 0, 7, 3, 5, -1, -1);
}
/*******************************************************************************
@@ -814,16 +777,7 @@ void namcos1_state::init_blastoff()
void namcos1_state::init_ws89()
{
driver_init();
- m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff,
- read8_delegate(FUNC(namcos1_state::key_type3_r),this),
- write8_delegate(FUNC(namcos1_state::key_type3_w),this));
- m_key_id = 184;
- m_key_reg = 2;
- m_key_rng = -1;
- m_key_swap4_arg = -1;
- m_key_swap4 = -1;
- m_key_bottom4 = -1;
- m_key_top4 = -1;
+ key_type_3_init(184, 2, -1, -1, -1, -1, -1);
}
/*******************************************************************************
@@ -832,16 +786,7 @@ void namcos1_state::init_ws89()
void namcos1_state::init_tankfrce()
{
driver_init();
- m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff,
- read8_delegate(FUNC(namcos1_state::key_type3_r),this),
- write8_delegate(FUNC(namcos1_state::key_type3_w),this));
- m_key_id = 185;
- m_key_reg = 5;
- m_key_rng = -1;
- m_key_swap4_arg = 1;
- m_key_swap4 = -1;
- m_key_bottom4 = 2;
- m_key_top4 = -1;
+ key_type_3_init(185, 5, -1, 1, -1, 2, -1);
}
void namcos1_state::init_tankfrc4()
@@ -853,7 +798,7 @@ void namcos1_state::init_tankfrc4()
m_stored_input[0] = 0;
m_stored_input[1] = 0;
- m_mcu->space(AS_PROGRAM).install_read_handler(0x1400, 0x1401, read8_delegate(FUNC(namcos1_state::faceoff_inputs_r), this));
+ m_mcu->space(AS_PROGRAM).install_read_handler(0x1400, 0x1401, read8sm_delegate(FUNC(namcos1_state::faceoff_inputs_r), this));
save_item(NAME(m_input_count));
save_item(NAME(m_stored_input));
}
@@ -864,16 +809,7 @@ void namcos1_state::init_tankfrc4()
void namcos1_state::init_dangseed()
{
driver_init();
- m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff,
- read8_delegate(FUNC(namcos1_state::key_type3_r),this),
- write8_delegate(FUNC(namcos1_state::key_type3_w),this));
- m_key_id = 308;
- m_key_reg = 6;
- m_key_rng = -1;
- m_key_swap4_arg = 5;
- m_key_swap4 = -1;
- m_key_bottom4 = 0;
- m_key_top4 = 4;
+ key_type_3_init(308, 6, -1, 5, -1, 0, 4);
}
/*******************************************************************************
@@ -882,16 +818,7 @@ void namcos1_state::init_dangseed()
void namcos1_state::init_pistoldm()
{
driver_init();
- m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff,
- read8_delegate(FUNC(namcos1_state::key_type3_r),this),
- write8_delegate(FUNC(namcos1_state::key_type3_w),this));
- m_key_id = 309;
- m_key_reg = 1;
- m_key_rng = 2;
- m_key_swap4_arg = 0;
- m_key_swap4 = -1;
- m_key_bottom4 = 4;
- m_key_top4 = -1;
+ key_type_3_init(309, 1, 2, 0, -1, 4, -1);
}
/*******************************************************************************
@@ -900,16 +827,7 @@ void namcos1_state::init_pistoldm()
void namcos1_state::init_ws90()
{
driver_init();
- m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff,
- read8_delegate(FUNC(namcos1_state::key_type3_r),this),
- write8_delegate(FUNC(namcos1_state::key_type3_w),this));
- m_key_id = 310;
- m_key_reg = 4;
- m_key_rng = -1;
- m_key_swap4_arg = 7;
- m_key_swap4 = -1;
- m_key_bottom4 = 3;
- m_key_top4 = -1;
+ key_type_3_init(310, 4, -1, 7, -1, 3, -1);
}
/*******************************************************************************
@@ -918,16 +836,7 @@ void namcos1_state::init_ws90()
void namcos1_state::init_soukobdx()
{
driver_init();
- m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff,
- read8_delegate(FUNC(namcos1_state::key_type3_r),this),
- write8_delegate(FUNC(namcos1_state::key_type3_w),this));
- m_key_id = 311;
- m_key_reg = 2;
- m_key_rng = 3; /*?*/
- m_key_swap4_arg = 0;
- m_key_swap4 = -1;
- m_key_bottom4 = 4;
- m_key_top4 = -1;
+ key_type_3_init(311, 2, 3 /*?*/, 0, -1, 4, -1);
}
@@ -935,16 +844,16 @@ void namcos1_state::init_soukobdx()
/*******************************************************************************
* Quester specific *
*******************************************************************************/
-READ8_MEMBER( namcos1_state::quester_paddle_r )
+u8 namcos1_state::quester_paddle_r(offs_t offset)
{
if (offset == 0)
{
int ret;
if (!(m_strobe & 0x20))
- ret = (ioport("CONTROL0")->read()&0x90) | (m_strobe & 0x40) | (ioport("PADDLE0")->read()&0x0f);
+ ret = (m_io_control[0]->read()&0x90) | (m_strobe & 0x40) | (m_io_paddle[0]->read()&0x0f);
else
- ret = (ioport("CONTROL0")->read()&0x90) | (m_strobe & 0x40) | (ioport("PADDLE1")->read()&0x0f);
+ ret = (m_io_control[0]->read()&0x90) | (m_strobe & 0x40) | (m_io_paddle[1]->read()&0x0f);
m_strobe ^= 0x40;
@@ -955,9 +864,9 @@ READ8_MEMBER( namcos1_state::quester_paddle_r )
int ret;
if (!(m_strobe & 0x20))
- ret = (ioport("CONTROL1")->read()&0x90) | 0x00 | (ioport("PADDLE0")->read()>>4);
+ ret = (m_io_control[1]->read()&0x90) | 0x00 | (m_io_paddle[0]->read()>>4);
else
- ret = (ioport("CONTROL1")->read()&0x90) | 0x20 | (ioport("PADDLE1")->read()>>4);
+ ret = (m_io_control[1]->read()&0x90) | 0x20 | (m_io_paddle[1]->read()>>4);
if (!(m_strobe & 0x40)) m_strobe ^= 0x20;
@@ -969,7 +878,7 @@ void namcos1_state::init_quester()
{
m_strobe = 0;
driver_init();
- m_mcu->space(AS_PROGRAM).install_read_handler(0x1400, 0x1401, read8_delegate(FUNC(namcos1_state::quester_paddle_r), this));
+ m_mcu->space(AS_PROGRAM).install_read_handler(0x1400, 0x1401, read8sm_delegate(FUNC(namcos1_state::quester_paddle_r), this));
save_item(NAME(m_strobe));
}
@@ -979,7 +888,7 @@ void namcos1_state::init_quester()
* Beraboh Man specific *
*******************************************************************************/
-READ8_MEMBER( namcos1_state::berabohm_buttons_r )
+u8 namcos1_state::berabohm_buttons_r(offs_t offset)
{
int res;
@@ -987,16 +896,13 @@ READ8_MEMBER( namcos1_state::berabohm_buttons_r )
{
int inp = m_input_count;
- if (inp == 4) res = ioport("CONTROL0")->read();
+ if (inp == 4) res = m_io_control[0]->read();
else
{
- char portname[40];
-
#ifdef PRESSURE_SENSITIVE
static int counter[4];
- sprintf(portname,"IN%d",inp); /* IN0-IN3 */
- res = ioport(portname)->read();
+ res = m_io_in[inp]->read(); /* IN0-IN3 */
if (res & 0x80)
{
if (counter[inp] >= 0)
@@ -1019,8 +925,7 @@ READ8_MEMBER( namcos1_state::berabohm_buttons_r )
else
counter[inp] = -1;
#else
- sprintf(portname,"IN%d",inp); /* IN0-IN3 */
- res = ioport(portname)->read();
+ res = m_io_in[inp]->read(); /* IN0-IN3 */
if (res & 1) res = 0x7f; /* weak */
else if (res & 2) res = 0x48; /* medium */
else if (res & 4) res = 0x40; /* strong */
@@ -1031,7 +936,7 @@ READ8_MEMBER( namcos1_state::berabohm_buttons_r )
}
else
{
- res = ioport("CONTROL1")->read() & 0x8f;
+ res = m_io_control[1]->read() & 0x8f;
/* the strobe cannot happen too often, otherwise the MCU will waste too
much time reading the inputs and won't have enough cycles to play two
@@ -1059,7 +964,7 @@ void namcos1_state::init_berabohm()
m_strobe = 0;
m_strobe_count = 0;
driver_init();
- m_mcu->space(AS_PROGRAM).install_read_handler(0x1400, 0x1401, read8_delegate(FUNC(namcos1_state::berabohm_buttons_r), this));
+ m_mcu->space(AS_PROGRAM).install_read_handler(0x1400, 0x1401, read8sm_delegate(FUNC(namcos1_state::berabohm_buttons_r), this));
save_item(NAME(m_input_count));
save_item(NAME(m_strobe));
save_item(NAME(m_strobe_count));
@@ -1073,19 +978,19 @@ void namcos1_state::init_berabohm()
// used by faceoff and tankforce 4 player (input multiplex)
-READ8_MEMBER( namcos1_state::faceoff_inputs_r )
+u8 namcos1_state::faceoff_inputs_r(offs_t offset)
{
int res;
if (offset == 0)
{
- res = (ioport("CONTROL0")->read() & 0x80) | m_stored_input[0];
+ res = (m_io_control[0]->read() & 0x80) | m_stored_input[0];
return res;
}
else
{
- res = ioport("CONTROL1")->read() & 0x80;
+ res = m_io_control[1]->read() & 0x80;
/* the strobe cannot happen too often, otherwise the MCU will waste too
much time reading the inputs and won't have enough cycles to play two
@@ -1100,17 +1005,17 @@ READ8_MEMBER( namcos1_state::faceoff_inputs_r )
switch (m_input_count)
{
case 0:
- m_stored_input[0] = ioport("IN0")->read() & 0x1f;
- m_stored_input[1] = (ioport("IN3")->read() & 0x07) << 3;
+ m_stored_input[0] = m_io_in[0]->read() & 0x1f;
+ m_stored_input[1] = (m_io_in[3]->read() & 0x07) << 3;
break;
case 3:
- m_stored_input[0] = ioport("IN2")->read() & 0x1f;
+ m_stored_input[0] = m_io_in[2]->read() & 0x1f;
break;
case 4:
- m_stored_input[0] = ioport("IN1")->read() & 0x1f;
- m_stored_input[1] = ioport("IN3")->read() & 0x18;
+ m_stored_input[0] = m_io_in[1]->read() & 0x1f;
+ m_stored_input[1] = m_io_in[3]->read() & 0x18;
break;
default:
@@ -1138,7 +1043,7 @@ void namcos1_state::init_faceoff()
m_stored_input[1] = 0;
driver_init();
- m_mcu->space(AS_PROGRAM).install_read_handler(0x1400, 0x1401, read8_delegate(FUNC(namcos1_state::faceoff_inputs_r), this));
+ m_mcu->space(AS_PROGRAM).install_read_handler(0x1400, 0x1401, read8sm_delegate(FUNC(namcos1_state::faceoff_inputs_r), this));
save_item(NAME(m_input_count));
save_item(NAME(m_stored_input));
}
diff --git a/src/mame/machine/nl_breakout.cpp b/src/mame/machine/nl_breakout.cpp
index 94bd228723a..1a19b119b61 100644
--- a/src/mame/machine/nl_breakout.cpp
+++ b/src/mame/machine/nl_breakout.cpp
@@ -181,9 +181,11 @@ CIRCUIT_LAYOUT( breakout )
DIODE(CR5, "1N914")
DIODE(CR7, "1N914")
- QBJT_EB(Q1, "2N3644")
- QBJT_EB(Q2, "2N3643")
- QBJT_EB(Q3, "2N3643")
+ // No need to model capacitance
+ QBJT_EB(Q1, "2N3644(CJC=0 CJE=0)")
+ QBJT_EB(Q2, "2N3643(CJC=0 CJE=0)")
+ QBJT_EB(Q3, "2N3643(CJC=0 CJE=0)")
+
CAP(C19, CAP_U(0.1))
CAP(C16, CAP_U(0.1))
diff --git a/src/mame/machine/nl_rebound.cpp b/src/mame/machine/nl_rebound.cpp
index b01422e9b7e..66da37a9a26 100644
--- a/src/mame/machine/nl_rebound.cpp
+++ b/src/mame/machine/nl_rebound.cpp
@@ -4,7 +4,7 @@
* The work herein is based on the "Rebound computer service manual"
* available on archive.org:
*
- * https://archive.org/details/ArcadeGameManualRebound
+ * https://archive.org/details/ArcadeGameManualRebound
*
* Changelog:
*
@@ -19,7 +19,7 @@
* - Documented PCB connector (Couriersud)
*
* TODO:
- * - Add switch to pull Connector 3 (CON3) to GND
+ * - Add switch to pull Connector 3 (CON3) to GND
*
* The MAME team has asked for and received written confirmation from the
* author of DICE to use, modify and redistribute code under:
diff --git a/src/mame/machine/segacrp2_device.cpp b/src/mame/machine/segacrp2_device.cpp
index b07f735445d..16f3ec0daa7 100644
--- a/src/mame/machine/segacrp2_device.cpp
+++ b/src/mame/machine/segacrp2_device.cpp
@@ -27,7 +27,7 @@
315-5162 4D Warriors & used I'm Sorry for k.p.a.
Rafflesia &
Wonder Boy (set 4)
- 315-5176 Wonder Boy (system 2 hardware, set 2) NOT DECRYPTED
+ 315-5176 Wonder Boy (system 2 hardware, set 2)
315-5177 Astro Flash &
Wonder Boy (set 1)
315-5178 Wonder Boy (set 2) unencrypted version available
@@ -166,8 +166,45 @@ sega_315_5176_device::sega_315_5176_device(const machine_config &mconfig, const
void sega_315_5176_device::decrypt()
{
- // 315-5176
- // TODO!
+ 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);
}
diff --git a/src/mame/machine/seibucop/seibucop_dma.hxx b/src/mame/machine/seibucop/seibucop_dma.hxx
index b4bdfb160e7..98b76b26c7f 100644
--- a/src/mame/machine/seibucop/seibucop_dma.hxx
+++ b/src/mame/machine/seibucop/seibucop_dma.hxx
@@ -22,7 +22,7 @@ void raiden2cop_device::dma_palette_buffer()
{
uint16_t palval = m_host_space->read_word(src);
src += 2;
- m_paletteramout_cb(i, palval, 0xffff);
+ m_paletteramout_cb(i, palval);
//m_palette->set_pen_color(i, pal5bit(palval >> 0), pal5bit(palval >> 5), pal5bit(palval >> 10));
}
}
diff --git a/src/mame/machine/thomflop.cpp b/src/mame/machine/thomflop.cpp
index 2f935851f88..d5f8f5713f2 100644
--- a/src/mame/machine/thomflop.cpp
+++ b/src/mame/machine/thomflop.cpp
@@ -412,12 +412,11 @@ void thomson_state::to7_5p14_index_pulse_callback( int state )
void thomson_state::to7_5p14sd_reset()
{
- int i;
LOG(( "to7_5p14sd_reset: CD 90-015 controller\n" ));
- for ( i = 0; i < floppy_get_count( machine() ); i++ )
+ for (auto &img : m_floppy_image)
{
- legacy_floppy_image_device * img = floppy_get_device( machine(), i );
- if (img) {
+ if (img.found())
+ {
img->floppy_drive_set_ready_state( FLOPPY_DRIVE_READY, 0 );
img->floppy_drive_set_rpm( 300. );
img->floppy_drive_seek( - img->floppy_drive_get_current_track() );
@@ -521,7 +520,7 @@ void thomson_state::to7_qdd_index_pulse_cb( int state )
legacy_floppy_image_device * thomson_state::to7_qdd_image()
{
- return floppy_get_device( machine(), 0 );
+ return m_floppy_image[0].target();
}
@@ -807,13 +806,12 @@ WRITE8_MEMBER( thomson_state::to7_qdd_w )
void thomson_state::to7_qdd_reset()
{
- int i;
LOG(( "to7_qdd_reset: CQ 90-028 controller\n" ));
- for ( i = 0; i < floppy_get_count( machine() ); i++ )
+ for (auto &img : m_floppy_image)
{
- legacy_floppy_image_device * img = floppy_get_device( machine(), i );
- if (img) {
+ if (img.found())
+ {
img->floppy_drive_set_ready_state( FLOPPY_DRIVE_READY, 0 );
motor_on = CLEAR_LINE;
@@ -916,7 +914,7 @@ static emu_timer* thmfc_floppy_cmd;
legacy_floppy_image_device * thomson_state::thmfc_floppy_image()
{
- return floppy_get_device( machine(), thmfc1->drive );
+ return m_floppy_image[thmfc1->drive].target();
}
@@ -1498,13 +1496,12 @@ WRITE8_MEMBER( thomson_state::thmfc_floppy_w )
void thomson_state::thmfc_floppy_reset()
{
- int i;
LOG(( "thmfc_floppy_reset: THMFC1 controller\n" ));
- for ( i = 0; i < floppy_get_count( machine() ); i++ )
+ for (auto &img : m_floppy_image)
{
- legacy_floppy_image_device * img = floppy_get_device( machine(), i );
- if (img) {
+ if (img.found())
+ {
img->floppy_drive_set_ready_state( FLOPPY_DRIVE_READY, 0 );
img->floppy_drive_seek( - img->floppy_drive_get_current_track() );
}
diff --git a/src/mame/machine/tnzs.cpp b/src/mame/machine/tnzs.cpp
index c6b88fcf275..f55bb847e5c 100644
--- a/src/mame/machine/tnzs.cpp
+++ b/src/mame/machine/tnzs.cpp
@@ -485,7 +485,7 @@ WRITE8_MEMBER(jpopnics_state::subbankswitch_w)
WRITE8_MEMBER(tnzsb_state::sound_command_w)
{
- m_soundlatch->write(space, offset, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff);
}
diff --git a/src/mame/machine/toaplan1.cpp b/src/mame/machine/toaplan1.cpp
index 7f0df70d4b3..3e10d414f97 100644
--- a/src/mame/machine/toaplan1.cpp
+++ b/src/mame/machine/toaplan1.cpp
@@ -12,22 +12,19 @@
#include "includes/toaplan1.h"
-void toaplan1_state::toaplan1_interrupt()
+void toaplan1_state::interrupt()
{
if (m_intenable)
m_maincpu->set_input_line(4, HOLD_LINE);
}
-WRITE16_MEMBER(toaplan1_state::toaplan1_intenable_w)
+void toaplan1_state::intenable_w(u8 data)
{
- if (ACCESSING_BITS_0_7)
- {
- m_intenable = data & 0xff;
- }
+ m_intenable = data;
}
-WRITE16_MEMBER(toaplan1_state::demonwld_dsp_addrsel_w)
+void toaplan1_demonwld_state::dsp_addrsel_w(u16 data)
{
/* This sets the main CPU RAM address the DSP should */
/* read/write, via the DSP IO port 0 */
@@ -42,13 +39,14 @@ WRITE16_MEMBER(toaplan1_state::demonwld_dsp_addrsel_w)
logerror("DSP PC:%04x IO write %04x (%08x) at port 0\n", m_dsp->pcbase(), data, m_main_ram_seg + m_dsp_addr_w);
}
-READ16_MEMBER(toaplan1_state::demonwld_dsp_r)
+u16 toaplan1_demonwld_state::dsp_r()
{
/* DSP can read data from main CPU RAM via DSP IO port 1 */
- uint16_t input_data = 0;
+ u16 input_data = 0;
- switch (m_main_ram_seg) {
+ switch (m_main_ram_seg)
+ {
case 0xc00000: {address_space &mainspace = m_maincpu->space(AS_PROGRAM);
input_data = mainspace.read_word(m_main_ram_seg + m_dsp_addr_w);
break;}
@@ -58,11 +56,12 @@ READ16_MEMBER(toaplan1_state::demonwld_dsp_r)
return input_data;
}
-WRITE16_MEMBER(toaplan1_state::demonwld_dsp_w)
+void toaplan1_demonwld_state::dsp_w(u16 data)
{
/* Data written to main CPU RAM via DSP IO port 1 */
m_dsp_execute = 0;
- switch (m_main_ram_seg) {
+ switch (m_main_ram_seg)
+ {
case 0xc00000: {if ((m_dsp_addr_w < 3) && (data == 0)) m_dsp_execute = 1;
address_space &mainspace = m_maincpu->space(AS_PROGRAM);
mainspace.write_word(m_main_ram_seg + m_dsp_addr_w, data);
@@ -72,7 +71,7 @@ WRITE16_MEMBER(toaplan1_state::demonwld_dsp_w)
logerror("DSP PC:%04x IO write %04x at %08x (port 1)\n", m_dsp->pcbase(), data, m_main_ram_seg + m_dsp_addr_w);
}
-WRITE16_MEMBER(toaplan1_state::demonwld_dsp_bio_w)
+void toaplan1_demonwld_state::dsp_bio_w(u16 data)
{
/* data 0xffff means inhibit BIO line to DSP and enable */
/* communication to main processor */
@@ -82,11 +81,13 @@ WRITE16_MEMBER(toaplan1_state::demonwld_dsp_bio_w)
logerror("DSP PC:%04x IO write %04x at port 3\n", m_dsp->pcbase(), data);
- if (data & 0x8000) {
+ if (data & 0x8000)
m_dsp_bio = CLEAR_LINE;
- }
- if (data == 0) {
- if (m_dsp_execute) {
+
+ if (data == 0)
+ {
+ if (m_dsp_execute)
+ {
logerror("Turning 68000 on\n");
m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
m_dsp_execute = 0;
@@ -95,13 +96,13 @@ WRITE16_MEMBER(toaplan1_state::demonwld_dsp_bio_w)
}
}
-READ_LINE_MEMBER(toaplan1_state::demonwld_bio_r)
+READ_LINE_MEMBER(toaplan1_demonwld_state::bio_r)
{
return m_dsp_bio;
}
-void toaplan1_state::demonwld_dsp(int enable)
+void toaplan1_demonwld_state::dsp_int_w(int enable)
{
m_dsp_on = enable;
if (enable)
@@ -119,55 +120,45 @@ void toaplan1_state::demonwld_dsp(int enable)
}
}
-void toaplan1_state::demonwld_restore_dsp()
+void toaplan1_demonwld_state::device_post_load()
{
- demonwld_dsp(m_dsp_on);
+ dsp_int_w(m_dsp_on);
}
-WRITE16_MEMBER(toaplan1_state::demonwld_dsp_ctrl_w)
+void toaplan1_demonwld_state::dsp_ctrl_w(u8 data)
{
#if 0
- logerror("68000:%08x Writing %08x to %08x.\n",m_maincpu->pc() ,data ,0xe0000a + offset);
+ logerror("68000:%08x Writing %02x to $e0000b.\n",m_maincpu->pc() ,data);
#endif
- if (ACCESSING_BITS_0_7)
+ switch (data)
{
- switch (data)
- {
- case 0x00: demonwld_dsp(1); break; /* Enable the INT line to the DSP */
- case 0x01: demonwld_dsp(0); break; /* Inhibit the INT line to the DSP */
- default: logerror("68000:%04x Writing unknown command %08x to %08x\n",m_maincpu->pcbase() ,data ,0xe0000a + offset); break;
- }
- }
- else
- {
- logerror("68000:%04x Writing unknown command %08x to %08x\n",m_maincpu->pcbase() ,data ,0xe0000a + offset);
+ case 0x00: dsp_int_w(1); break; /* Enable the INT line to the DSP */
+ case 0x01: dsp_int_w(0); break; /* Inhibit the INT line to the DSP */
+ default: logerror("68000:%08x Writing unknown command %02x to $e0000b\n",m_maincpu->pcbase() ,data); break;
}
}
-READ16_MEMBER(toaplan1_state::samesame_port_6_word_r)
+u8 toaplan1_samesame_state::port_6_word_r()
{
/* Bit 0x80 is secondary CPU (HD647180) ready signal */
- logerror("PC:%04x Warning !!! IO reading from $14000a\n",m_maincpu->pcbase());
- return (0x80 | ioport("TJUMP")->read()) & 0xff;
+ logerror("PC:%08x Warning !!! IO reading from $14000b\n",m_maincpu->pcbase());
+ return (0x80 | m_tjump_io->read()) & 0xff;
}
-READ16_MEMBER(toaplan1_state::toaplan1_shared_r)
+u8 toaplan1_state::shared_r(offs_t offset)
{
- return m_sharedram[offset] & 0xff;
+ return m_sharedram[offset];
}
-WRITE16_MEMBER(toaplan1_state::toaplan1_shared_w)
+void toaplan1_state::shared_w(offs_t offset, u8 data)
{
- if (ACCESSING_BITS_0_7)
- {
- m_sharedram[offset] = data & 0xff;
- }
+ m_sharedram[offset] = data;
}
-void toaplan1_state::toaplan1_reset_sound()
+void toaplan1_state::reset_sound()
{
/* Reset the secondary CPU and sound chip */
/* rallybik, truxton, hellfire, demonwld write to a port to cause a reset */
@@ -176,9 +167,9 @@ void toaplan1_state::toaplan1_reset_sound()
m_audiocpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero);
}
-WRITE16_MEMBER(toaplan1_state::toaplan1_reset_sound_w)
+void toaplan1_state::reset_sound_w(u8 data)
{
- if (ACCESSING_BITS_0_7 && (data == 0)) toaplan1_reset_sound();
+ if (data == 0) reset_sound();
}
@@ -203,14 +194,15 @@ WRITE_LINE_MEMBER(toaplan1_rallybik_state::coin_lockout_2_w)
}
-WRITE8_MEMBER(toaplan1_state::toaplan1_coin_w)
+void toaplan1_state::coin_w(u8 data)
{
logerror("Z80 writing %02x to coin control\n",data);
/* This still isnt too clear yet. */
/* Coin C has no coin lock ? */
/* Are some outputs for lights ? (no space on JAMMA for it though) */
- switch (data) {
+ switch (data)
+ {
case 0xee: machine().bookkeeping().coin_counter_w(1,1); machine().bookkeeping().coin_counter_w(1,0); break; /* Count slot B */
case 0xed: machine().bookkeeping().coin_counter_w(0,1); machine().bookkeeping().coin_counter_w(0,0); break; /* Count slot A */
/* The following are coin counts after coin-lock active (faulty coin-lock ?) */
@@ -233,24 +225,12 @@ WRITE8_MEMBER(toaplan1_state::toaplan1_coin_w)
}
}
-WRITE16_MEMBER(toaplan1_state::samesame_coin_w)
-{
- if (ACCESSING_BITS_0_7)
- {
- toaplan1_coin_w(space, offset, data & 0xff);
- }
- if (ACCESSING_BITS_8_15 && (data&0xff00))
- {
- logerror("PC:%04x Writing unknown MSB data (%04x) to coin count/lockout port\n",m_maincpu->pcbase(),data);
- }
-}
-
-WRITE_LINE_MEMBER(toaplan1_state::toaplan1_reset_callback)
+WRITE_LINE_MEMBER(toaplan1_state::reset_callback)
{
- toaplan1_reset_sound();
+ reset_sound();
}
-MACHINE_RESET_MEMBER(toaplan1_state,toaplan1)
+void toaplan1_state::machine_reset()
{
m_intenable = 0;
machine().bookkeeping().coin_lockout_global_w(0);
@@ -259,37 +239,37 @@ MACHINE_RESET_MEMBER(toaplan1_state,toaplan1)
/* zerowing, fireshrk, outzone */
MACHINE_RESET_MEMBER(toaplan1_state,zerowing)
{
- MACHINE_RESET_CALL_MEMBER(toaplan1);
- m_maincpu->set_reset_callback(write_line_delegate(FUNC(toaplan1_state::toaplan1_reset_callback),this));
+ machine_reset();
+ m_maincpu->set_reset_callback(write_line_delegate(FUNC(toaplan1_state::reset_callback),this));
}
-MACHINE_RESET_MEMBER(toaplan1_state,demonwld)
+void toaplan1_demonwld_state::machine_reset()
{
- MACHINE_RESET_CALL_MEMBER(toaplan1);
+ toaplan1_state::machine_reset();
m_dsp_addr_w = 0;
m_main_ram_seg = 0;
m_dsp_execute = 0;
}
-MACHINE_RESET_MEMBER(toaplan1_state,vimana)
-{
- MACHINE_RESET_CALL_MEMBER(toaplan1);
- m_maincpu->set_reset_callback(write_line_delegate(FUNC(toaplan1_state::toaplan1_reset_callback),this));
-}
-
-void toaplan1_state::toaplan1_driver_savestate()
+void toaplan1_state::machine_start()
{
save_item(NAME(m_intenable));
}
-void toaplan1_state::demonwld_driver_savestate()
+void toaplan1_demonwld_state::machine_start()
{
+ toaplan1_state::machine_start();
save_item(NAME(m_dsp_on));
save_item(NAME(m_dsp_addr_w));
save_item(NAME(m_main_ram_seg));
save_item(NAME(m_dsp_bio));
save_item(NAME(m_dsp_execute));
- machine().save().register_postload(save_prepost_delegate(FUNC(toaplan1_state::demonwld_restore_dsp), this));
}
+void toaplan1_samesame_state::machine_start()
+{
+ toaplan1_state::machine_start();
+ save_item(NAME(m_to_mcu));
+ save_item(NAME(m_cmdavailable));
+}
diff --git a/src/mame/machine/twincobr.cpp b/src/mame/machine/twincobr.cpp
index 5fa63ece69a..2bfdbbf9f79 100644
--- a/src/mame/machine/twincobr.cpp
+++ b/src/mame/machine/twincobr.cpp
@@ -34,7 +34,7 @@ WRITE_LINE_MEMBER(twincobr_state::wardner_vblank_irq)
}
-WRITE16_MEMBER(twincobr_state::twincobr_dsp_addrsel_w)
+void twincobr_state::twincobr_dsp_addrsel_w(u16 data)
{
/* This sets the main CPU RAM address the DSP should */
/* read/write, via the DSP IO port 0 */
@@ -50,11 +50,11 @@ WRITE16_MEMBER(twincobr_state::twincobr_dsp_addrsel_w)
LOG(("DSP PC:%04x IO write %04x (%08x) at port 0\n",m_dsp->pcbase(),data,m_main_ram_seg + m_dsp_addr_w));
}
-READ16_MEMBER(twincobr_state::twincobr_dsp_r)
+u16 twincobr_state::twincobr_dsp_r()
{
/* DSP can read data from main CPU RAM via DSP IO port 1 */
- uint16_t input_data = 0;
+ u16 input_data = 0;
switch (m_main_ram_seg)
{
case 0x30000:
@@ -68,7 +68,7 @@ READ16_MEMBER(twincobr_state::twincobr_dsp_r)
return input_data;
}
-WRITE16_MEMBER(twincobr_state::twincobr_dsp_w)
+void twincobr_state::twincobr_dsp_w(u16 data)
{
/* Data written to main CPU RAM via DSP IO port 1 */
m_dsp_execute = 0;
@@ -84,7 +84,7 @@ WRITE16_MEMBER(twincobr_state::twincobr_dsp_w)
LOG(("DSP PC:%04x IO write %04x at %08x (port 1)\n",m_dsp->pcbase(),data,m_main_ram_seg + m_dsp_addr_w));
}
-WRITE16_MEMBER(twincobr_state::wardner_dsp_addrsel_w)
+void twincobr_state::wardner_dsp_addrsel_w(u16 data)
{
/* This sets the main CPU RAM address the DSP should */
/* read/write, via the DSP IO port 0 */
@@ -99,11 +99,11 @@ WRITE16_MEMBER(twincobr_state::wardner_dsp_addrsel_w)
LOG(("DSP PC:%04x IO write %04x (%08x) at port 0\n",m_dsp->pcbase(),data,m_main_ram_seg + m_dsp_addr_w));
}
-READ16_MEMBER(twincobr_state::wardner_dsp_r)
+u16 twincobr_state::wardner_dsp_r()
{
/* DSP can read data from main CPU RAM via DSP IO port 1 */
- uint16_t input_data = 0;
+ u16 input_data = 0;
switch (m_main_ram_seg)
{
case 0x7000:
@@ -118,7 +118,7 @@ READ16_MEMBER(twincobr_state::wardner_dsp_r)
return input_data;
}
-WRITE16_MEMBER(twincobr_state::wardner_dsp_w)
+void twincobr_state::wardner_dsp_w(u16 data)
{
/* Data written to main CPU RAM via DSP IO port 1 */
m_dsp_execute = 0;
@@ -135,7 +135,7 @@ WRITE16_MEMBER(twincobr_state::wardner_dsp_w)
LOG(("DSP PC:%04x IO write %04x at %08x (port 1)\n",m_dsp->pcbase(),data,m_main_ram_seg + m_dsp_addr_w));
}
-WRITE16_MEMBER(twincobr_state::twincobr_dsp_bio_w)
+void twincobr_state::twincobr_dsp_bio_w(u16 data)
{
/* data 0xffff means inhibit BIO line to DSP and enable */
/* communication to main processor */
@@ -159,7 +159,7 @@ WRITE16_MEMBER(twincobr_state::twincobr_dsp_bio_w)
}
}
-READ16_MEMBER(twincobr_state::fsharkbt_dsp_r)
+u16 twincobr_state::fsharkbt_dsp_r()
{
/* IO Port 2 used by Flying Shark bootleg */
/* DSP reads data from an extra MCU (8741) at IO port 2 */
@@ -170,7 +170,7 @@ READ16_MEMBER(twincobr_state::fsharkbt_dsp_r)
return (m_fsharkbt_8741 & 1);
}
-WRITE16_MEMBER(twincobr_state::fsharkbt_dsp_w)
+void twincobr_state::fsharkbt_dsp_w(u16 data)
{
/* Flying Shark bootleg DSP writes data to an extra MCU (8741) at IO port 2 */
#if 0
@@ -209,7 +209,7 @@ WRITE_LINE_MEMBER(twincobr_state::dsp_int_w)
}
}
-void twincobr_state::twincobr_restore_dsp()
+void twincobr_state::device_post_load()
{
dsp_int_w(m_dsp_on);
}
@@ -236,21 +236,18 @@ WRITE_LINE_MEMBER(twincobr_state::coin_lockout_2_w)
}
-READ16_MEMBER(twincobr_state::twincobr_sharedram_r)
+u8 twincobr_state::twincobr_sharedram_r(offs_t offset)
{
return m_sharedram[offset];
}
-WRITE16_MEMBER(twincobr_state::twincobr_sharedram_w)
+void twincobr_state::twincobr_sharedram_w(offs_t offset, u8 data)
{
- if (ACCESSING_BITS_0_7)
- {
- m_sharedram[offset] = data & 0xff;
- }
+ m_sharedram[offset] = data;
}
-MACHINE_RESET_MEMBER(twincobr_state,twincobr)
+void twincobr_state::machine_reset()
{
m_dsp_addr_w = 0;
m_main_ram_seg = 0;
@@ -259,7 +256,7 @@ MACHINE_RESET_MEMBER(twincobr_state,twincobr)
m_fsharkbt_8741 = -1;
}
-void twincobr_state::twincobr_driver_savestate()
+void twincobr_state::driver_savestate()
{
save_item(NAME(m_intenable));
save_item(NAME(m_dsp_on));
@@ -268,6 +265,4 @@ void twincobr_state::twincobr_driver_savestate()
save_item(NAME(m_dsp_bio));
save_item(NAME(m_dsp_execute));
save_item(NAME(m_fsharkbt_8741));
-
- machine().save().register_postload(save_prepost_delegate(FUNC(twincobr_state::twincobr_restore_dsp), this));
}
diff --git a/src/mame/machine/xavix.cpp b/src/mame/machine/xavix.cpp
index 2745b98b078..480e5155cfd 100644
--- a/src/mame/machine/xavix.cpp
+++ b/src/mame/machine/xavix.cpp
@@ -245,116 +245,6 @@ WRITE8_MEMBER(xavix_state::ioevent_irqack_w)
update_irqs();
}
-READ8_MEMBER(xavix_state::mouse_7b00_r)
-{
- if (m_mouse0x)
- {
- uint8_t retval = m_mouse0x->read();
- return retval ^ 0x7f;
- }
-
- return 0x00;
-}
-
-READ8_MEMBER(xavix_state::mouse_7b01_r)
-{
- if (m_mouse0y)
- {
- uint8_t retval = m_mouse0y->read();
- return retval ^ 0x7f;
- }
- return 0x00;
-}
-
-READ8_MEMBER(xavix_state::mouse_7b10_r)
-{
- if (m_mouse1x)
- {
- uint8_t retval = m_mouse1x->read();
- return retval ^ 0x7f;
- }
-
- return 0x00;
-}
-
-READ8_MEMBER(xavix_state::mouse_7b11_r)
-{
- if (m_mouse1y)
- {
- uint8_t retval = m_mouse1y->read();
- return retval ^ 0x7f;
- }
-
- return 0x00;
-}
-
-WRITE8_MEMBER(xavix_state::mouse_7b00_w)
-{
- LOG("%s: mouse_7b00_w %02x\n", machine().describe_context(), data);
-}
-
-WRITE8_MEMBER(xavix_state::mouse_7b01_w)
-{
- LOG("%s: mouse_7b01_w %02x\n", machine().describe_context(), data);
-}
-
-WRITE8_MEMBER(xavix_state::mouse_7b10_w)
-{
- LOG("%s: mouse_7b10_w %02x\n", machine().describe_context(), data);
-}
-
-WRITE8_MEMBER(xavix_state::mouse_7b11_w)
-{
- LOG("%s: mouse_7b11_w %02x\n", machine().describe_context(), data);
-}
-
-
-
-READ8_MEMBER(xavix_state::adc_7b80_r)
-{
- LOG("%s: adc_7b80_r\n", machine().describe_context());
- return m_adc_inlatch;
-}
-
-WRITE8_MEMBER(xavix_state::adc_7b80_w)
-{
- // is the latch writeable?
- LOG("%s: adc_7b80_w %02x\n", machine().describe_context(), data);
-}
-
-WRITE8_MEMBER(xavix_state::adc_7b81_w)
-{
-// m_irqsource &= ~0x04;
-// update_irqs();
-
- LOG("%s: adc_7b81_w %02x\n", machine().describe_context(), data);
- m_adc_control = data;
-
- // bit 0x40 = run? or IRQ? (doesn't seem to be any obvious way to clear IRQs tho, ADC handling is usually done in timer IRQ?)
- // should probably set latch after a timer has expired not instantly?
- // bits 0x0c are not port select?
- // bit 0x80 is some kind of ack? / done flag?
- switch (m_adc_control & 0x13)
- {
- case 0x00: m_adc_inlatch = m_an_in[0]->read(); break;
- case 0x01: m_adc_inlatch = m_an_in[1]->read(); break;
- case 0x02: m_adc_inlatch = m_an_in[2]->read(); break;
- case 0x03: m_adc_inlatch = m_an_in[3]->read(); break;
- case 0x10: m_adc_inlatch = m_an_in[4]->read(); break;
- case 0x11: m_adc_inlatch = m_an_in[5]->read(); break;
- case 0x12: m_adc_inlatch = m_an_in[6]->read(); break;
- case 0x13: m_adc_inlatch = m_an_in[7]->read(); break;
- }
-
-// m_adc_timer->adjust(attotime::from_usec(200));
-}
-
-READ8_MEMBER(xavix_state::adc_7b81_r)
-{
-// has_wamg polls this if interrupt is enabled
- return machine().rand();
-}
-
WRITE8_MEMBER(xavix_state::slotreg_7810_w)
@@ -547,7 +437,7 @@ CUSTOM_INPUT_MEMBER(xavix_ekara_state::ekara_multi1_r)
uint8_t xavix_state::read_io0(uint8_t direction)
{
-// LOG("%s: read_io0\n", machine().describe_context());
+// LOG("%s: read_io0\n", machine().describe_context());
// no special handling
return m_in0->read();
@@ -555,7 +445,7 @@ uint8_t xavix_state::read_io0(uint8_t direction)
uint8_t xavix_state::read_io1(uint8_t direction)
{
-// LOG("%s: read_io1\n", machine().describe_context());
+// LOG("%s: read_io1\n", machine().describe_context());
// no special handling
return m_in1->read();
@@ -915,122 +805,6 @@ TIMER_CALLBACK_MEMBER(xavix_state::freq_timer_done)
//m_freq_timer->adjust(attotime::from_usec(50000));
}
-TIMER_CALLBACK_MEMBER(xavix_state::adc_timer_done)
-{
- //m_irqsource |= 0x04;
- //update_irqs();
-}
-
-// epo_guru uses this for ground movement in 3d stages (and other places)
-READ8_MEMBER(xavix_state::barrel_r)
-{
- if (offset == 0)
- {
- // or upper bits of result?
- logerror("%s: reading shift trigger?!\n", machine().describe_context());
- return 0x00;
- }
- else
- {
- uint8_t retdata = m_barrel_params[1];
- logerror("%s: reading shift results/data %02x\n", machine().describe_context(), retdata);
- return retdata;
- }
-}
-
-WRITE8_MEMBER(xavix_state::barrel_w)
-{
- m_barrel_params[offset] = data;
-
- if (offset == 0)
- {
- int shift_data = m_barrel_params[1];
- int shift_amount = data & 0x0f;
- int shift_param = (data & 0xf0)>>4;
-
- // this can't be right, shift amount would allow us to shift 16 places this way, this is an 8-bit register, uneless it can shift in and out of a private register?
-
- if (shift_param & 0x8)
- {
- m_barrel_params[1] = shift_data >> shift_amount;
- }
- else
- {
- m_barrel_params[1] = shift_data << shift_amount;
- }
-
- // offset 0 = trigger
- logerror("%s: shifting value %02x by %01x with params %01x\n", machine().describe_context(), shift_data, shift_amount, shift_param);
- }
-}
-
-
-
-READ8_MEMBER(xavix_state::mult_r)
-{
- return m_multresults[offset];
-}
-
-WRITE8_MEMBER(xavix_state::mult_w)
-{
- // rad_madf writes here to set the base value which the multiplication result gets added to
- m_multresults[offset] = data;
-}
-
-READ8_MEMBER(xavix_state::mult_param_r)
-{
- return m_multparams[offset];
-}
-
-WRITE8_MEMBER(xavix_state::mult_param_w)
-{
- COMBINE_DATA(&m_multparams[offset]);
- // there are NOPs after one of the writes, so presumably the operation is write triggerd and not intstant
- // see test code at 0184a4 in monster truck
-
- // offset0 is control
-
- // mm-- --Ss
- // mm = mode, S = sign for param1, s = sign for param2
- // modes 00 = multiply (regular?) 11 = add to previous 01 / 10 unknown (maybe subtract?)
-
- if (offset == 2)
- {
- // assume 0 is upper bits, might be 'mode' instead, check
-
-
- int signmode = (m_multparams[0] & 0x3f);
-
- uint16_t result = 0;
-
- // rad_madf uses this mode (add to previous result)
- if ((m_multparams[0] & 0xc0) == 0xc0)
- {
- const int param1 = signmode & 0x2 ? (int8_t)m_multparams[1] : (uint8_t)m_multparams[1];
- const int param2 = signmode & 0x1 ? (int8_t)m_multparams[2] : (uint8_t)m_multparams[2];
-
- result = param1 * param2;
-
- uint16_t oldresult = (m_multresults[1] << 8) | m_multresults[0];
- result = oldresult + result;
- }
- else if ((m_multparams[0] & 0xc0) == 0x00)
- {
- const int param1 = signmode & 0x2 ? (int8_t)m_multparams[1] : (uint8_t)m_multparams[1];
- const int param2 = signmode & 0x1 ? (int8_t)m_multparams[2] : (uint8_t)m_multparams[2];
-
- result = param1 * param2;
- }
- else
- {
- popmessage("unknown multiplier mode %02x", m_multparams[0] & 0xc0);
- }
-
- m_multresults[1] = (result >> 8) & 0xff;
- m_multresults[0] = result & 0xff;
- }
-}
-
READ8_MEMBER(xavix_state::irq_source_r)
{
@@ -1073,7 +847,6 @@ void xavix_state::machine_start()
m_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(xavix_state::interrupt_gen), this));
m_freq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(xavix_state::freq_timer_done), this));
- m_adc_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(xavix_state::adc_timer_done), this));
for (int i = 0; i < 4; i++)
{
@@ -1091,7 +864,6 @@ void xavix_state::machine_start()
save_item(NAME(m_io1_data));
save_item(NAME(m_io0_direction));
save_item(NAME(m_io1_direction));
- save_item(NAME(m_adc_control));
save_item(NAME(m_sound_irqstatus));
save_item(NAME(m_soundreg16_0));
save_item(NAME(m_soundreg16_1));
@@ -1105,8 +877,6 @@ void xavix_state::machine_start()
save_item(NAME(m_nmi_vector_hi_data));
save_item(NAME(m_irq_vector_lo_data));
save_item(NAME(m_irq_vector_hi_data));
- save_item(NAME(m_multparams));
- save_item(NAME(m_multresults));
save_item(NAME(m_spritefragment_dmaparam1));
save_item(NAME(m_spritefragment_dmaparam2));
save_item(NAME(m_tmap1_regs));
@@ -1123,7 +893,6 @@ void xavix_state::machine_start()
save_item(NAME(m_sndtimer));
save_item(NAME(m_timer_baseval));
save_item(NAME(m_spritereg));
- save_item(NAME(m_barrel_params));
save_item(NAME(m_sx_extended_extbus));
}
@@ -1164,8 +933,6 @@ void xavix_state::machine_reset()
m_sndtimer[i] = 0x00;
}
- std::fill(std::begin(m_multparams), std::end(m_multparams), 0x00);
- std::fill(std::begin(m_multresults), std::end(m_multresults), 0x00);
std::fill(std::begin(m_spritefragment_dmaparam1), std::end(m_spritefragment_dmaparam1), 0x00);
std::fill(std::begin(m_tmap1_regs), std::end(m_tmap1_regs), 0x00);
std::fill(std::begin(m_tmap2_regs), std::end(m_tmap2_regs), 0x00);
@@ -1191,7 +958,6 @@ void xavix_state::machine_reset()
m_sound_regbase = 0x02; // rad_bb doesn't initialize this and expects it here. It is possible the default is 0x00, but since 0x00 and 0x01 are special (zero page and stack) those values would also use bank 0x02
- m_adc_control = 0x00;
m_sprite_xhigh_ignore_hack = true;
@@ -1201,8 +967,6 @@ void xavix_state::machine_reset()
m_extbusctrl[1] = 0x00;
m_extbusctrl[2] = 0x00;
- m_barrel_params[0] = 0x00;
- m_barrel_params[1] = 0x00;
// SuperXaviX
diff --git a/src/mame/machine/xavix_adc.cpp b/src/mame/machine/xavix_adc.cpp
new file mode 100644
index 00000000000..6d171c8018d
--- /dev/null
+++ b/src/mame/machine/xavix_adc.cpp
@@ -0,0 +1,100 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+
+#include "emu.h"
+#include "xavix_adc.h"
+
+#define VERBOSE 0
+#include "logmacro.h"
+
+DEFINE_DEVICE_TYPE(XAVIX_ADC, xavix_adc_device, "xavix_adc", "XaviX ADC")
+
+xavix_adc_device::xavix_adc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, XAVIX_ADC, tag, owner, clock)
+ , m_in0_cb(*this)
+ , m_in1_cb(*this)
+ , m_in2_cb(*this)
+ , m_in3_cb(*this)
+ , m_in4_cb(*this)
+ , m_in5_cb(*this)
+ , m_in6_cb(*this)
+ , m_in7_cb(*this)
+{
+}
+
+void xavix_adc_device::device_start()
+{
+ m_in0_cb.resolve_safe(0xff);
+ m_in1_cb.resolve_safe(0xff);
+ m_in2_cb.resolve_safe(0xff);
+ m_in3_cb.resolve_safe(0xff);
+ m_in4_cb.resolve_safe(0xff);
+ m_in5_cb.resolve_safe(0xff);
+ m_in6_cb.resolve_safe(0xff);
+ m_in7_cb.resolve_safe(0xff);
+
+ m_adc_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(xavix_adc_device::adc_timer_done), this));
+
+ save_item(NAME(m_adc_control));
+ save_item(NAME(m_adc_inlatch));
+}
+
+TIMER_CALLBACK_MEMBER(xavix_adc_device::adc_timer_done)
+{
+ //m_irqsource |= 0x04;
+ //update_irqs();
+}
+
+void xavix_adc_device::device_reset()
+{
+ m_adc_control = 0x00;
+ m_adc_inlatch = 0xff;
+}
+
+
+READ8_MEMBER(xavix_adc_device::adc_7b80_r)
+{
+ LOG("%s: adc_7b80_r\n", machine().describe_context());
+ return m_adc_inlatch;
+}
+
+WRITE8_MEMBER(xavix_adc_device::adc_7b80_w)
+{
+ // is the latch writeable?
+ LOG("%s: adc_7b80_w %02x\n", machine().describe_context(), data);
+}
+
+WRITE8_MEMBER(xavix_adc_device::adc_7b81_w)
+{
+// m_irqsource &= ~0x04;
+// update_irqs();
+
+ LOG("%s: adc_7b81_w %02x\n", machine().describe_context(), data);
+ m_adc_control = data;
+
+ // bit 0x40 = run? or IRQ? (doesn't seem to be any obvious way to clear IRQs tho, ADC handling is usually done in timer IRQ?)
+ // should probably set latch after a timer has expired not instantly?
+ // bits 0x0c are not port select?
+ // bit 0x80 is some kind of ack? / done flag?
+ switch (m_adc_control & 0x13)
+ {
+ case 0x00: m_adc_inlatch = m_in0_cb(); break;
+ case 0x01: m_adc_inlatch = m_in1_cb(); break;
+ case 0x02: m_adc_inlatch = m_in2_cb(); break;
+ case 0x03: m_adc_inlatch = m_in3_cb(); break;
+ case 0x10: m_adc_inlatch = m_in4_cb(); break;
+ case 0x11: m_adc_inlatch = m_in5_cb(); break;
+ case 0x12: m_adc_inlatch = m_in6_cb(); break;
+ case 0x13: m_adc_inlatch = m_in7_cb(); break;
+ }
+
+// m_adc_timer->adjust(attotime::from_usec(200));
+}
+
+READ8_MEMBER(xavix_adc_device::adc_7b81_r)
+{
+// has_wamg polls this if interrupt is enabled
+ return machine().rand();
+}
+
+
diff --git a/src/mame/machine/xavix_adc.h b/src/mame/machine/xavix_adc.h
new file mode 100644
index 00000000000..5bf524eb9d8
--- /dev/null
+++ b/src/mame/machine/xavix_adc.h
@@ -0,0 +1,50 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+
+#ifndef MAME_MACHINE_XAVIX_ADC_H
+#define MAME_MACHINE_XAVIX_ADC_H
+
+class xavix_adc_device : public device_t
+{
+public:
+ xavix_adc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ auto read_0_callback() { return m_in0_cb.bind(); }
+ auto read_1_callback() { return m_in1_cb.bind(); }
+ auto read_2_callback() { return m_in2_cb.bind(); }
+ auto read_3_callback() { return m_in3_cb.bind(); }
+ auto read_4_callback() { return m_in4_cb.bind(); }
+ auto read_5_callback() { return m_in5_cb.bind(); }
+ auto read_6_callback() { return m_in6_cb.bind(); }
+ auto read_7_callback() { return m_in7_cb.bind(); }
+
+ DECLARE_READ8_MEMBER(adc_7b80_r);
+ DECLARE_WRITE8_MEMBER(adc_7b80_w);
+ DECLARE_READ8_MEMBER(adc_7b81_r);
+ DECLARE_WRITE8_MEMBER(adc_7b81_w);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+private:
+ devcb_read8 m_in0_cb;
+ devcb_read8 m_in1_cb;
+ devcb_read8 m_in2_cb;
+ devcb_read8 m_in3_cb;
+ devcb_read8 m_in4_cb;
+ devcb_read8 m_in5_cb;
+ devcb_read8 m_in6_cb;
+ devcb_read8 m_in7_cb;
+
+ uint8_t m_adc_inlatch;
+ uint8_t m_adc_control;
+ emu_timer *m_adc_timer;
+
+ TIMER_CALLBACK_MEMBER(adc_timer_done);
+};
+
+DECLARE_DEVICE_TYPE(XAVIX_ADC, xavix_adc_device)
+
+#endif // MAME_MACHINE_XAVIX_ADC_H
diff --git a/src/mame/machine/xavix_anport.cpp b/src/mame/machine/xavix_anport.cpp
new file mode 100644
index 00000000000..502dfc6adee
--- /dev/null
+++ b/src/mame/machine/xavix_anport.cpp
@@ -0,0 +1,81 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+
+// are these still part of the ADC? if so merge into xavix_adc.cpp
+
+#include "emu.h"
+#include "xavix_anport.h"
+
+#define VERBOSE 0
+#include "logmacro.h"
+
+DEFINE_DEVICE_TYPE(XAVIX_ANPORT, xavix_anport_device, "xavix_anport", "XaviX Analog ports")
+
+xavix_anport_device::xavix_anport_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, XAVIX_ANPORT, tag, owner, clock)
+ , m_in0_cb(*this)
+ , m_in1_cb(*this)
+ , m_in2_cb(*this)
+ , m_in3_cb(*this)
+{
+}
+
+void xavix_anport_device::device_start()
+{
+ m_in0_cb.resolve_safe(0xff);
+ m_in1_cb.resolve_safe(0xff);
+ m_in2_cb.resolve_safe(0xff);
+ m_in3_cb.resolve_safe(0xff);
+}
+
+void xavix_anport_device::device_reset()
+{
+}
+
+
+READ8_MEMBER(xavix_anport_device::mouse_7b00_r)
+{
+ LOG("%s: mouse_7b00_r\n", machine().describe_context());
+ return m_in0_cb();
+
+}
+
+READ8_MEMBER(xavix_anport_device::mouse_7b01_r)
+{
+ LOG("%s: mouse_7b01_r\n", machine().describe_context());
+ return m_in1_cb();
+}
+
+READ8_MEMBER(xavix_anport_device::mouse_7b10_r)
+{
+ LOG("%s: mouse_7b10_r\n", machine().describe_context());
+ return m_in2_cb();
+}
+
+READ8_MEMBER(xavix_anport_device::mouse_7b11_r)
+{
+ LOG("%s: mouse_7b11_r\n", machine().describe_context());
+ return m_in3_cb();
+}
+
+WRITE8_MEMBER(xavix_anport_device::mouse_7b00_w)
+{
+ LOG("%s: mouse_7b00_w %02x\n", machine().describe_context(), data);
+}
+
+WRITE8_MEMBER(xavix_anport_device::mouse_7b01_w)
+{
+ LOG("%s: mouse_7b01_w %02x\n", machine().describe_context(), data);
+}
+
+WRITE8_MEMBER(xavix_anport_device::mouse_7b10_w)
+{
+ LOG("%s: mouse_7b10_w %02x\n", machine().describe_context(), data);
+}
+
+WRITE8_MEMBER(xavix_anport_device::mouse_7b11_w)
+{
+ LOG("%s: mouse_7b11_w %02x\n", machine().describe_context(), data);
+}
+
+
diff --git a/src/mame/machine/xavix_anport.h b/src/mame/machine/xavix_anport.h
new file mode 100644
index 00000000000..b826d718d2f
--- /dev/null
+++ b/src/mame/machine/xavix_anport.h
@@ -0,0 +1,41 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+
+#ifndef MAME_MACHINE_XAVIX_ANPORT_H
+#define MAME_MACHINE_XAVIX_ANPORT_H
+
+class xavix_anport_device : public device_t
+{
+public:
+ xavix_anport_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ auto read_0_callback() { return m_in0_cb.bind(); }
+ auto read_1_callback() { return m_in1_cb.bind(); }
+ auto read_2_callback() { return m_in2_cb.bind(); }
+ auto read_3_callback() { return m_in3_cb.bind(); }
+
+ DECLARE_READ8_MEMBER(mouse_7b00_r);
+ DECLARE_READ8_MEMBER(mouse_7b01_r);
+ DECLARE_READ8_MEMBER(mouse_7b10_r);
+ DECLARE_READ8_MEMBER(mouse_7b11_r);
+
+ DECLARE_WRITE8_MEMBER(mouse_7b00_w);
+ DECLARE_WRITE8_MEMBER(mouse_7b01_w);
+ DECLARE_WRITE8_MEMBER(mouse_7b10_w);
+ DECLARE_WRITE8_MEMBER(mouse_7b11_w);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+private:
+ devcb_read8 m_in0_cb;
+ devcb_read8 m_in1_cb;
+ devcb_read8 m_in2_cb;
+ devcb_read8 m_in3_cb;
+};
+
+DECLARE_DEVICE_TYPE(XAVIX_ANPORT, xavix_anport_device)
+
+#endif // MAME_MACHINE_XAVIX_ANPORT_H
diff --git a/src/mame/machine/xavix_math.cpp b/src/mame/machine/xavix_math.cpp
new file mode 100644
index 00000000000..3e180e4d4e2
--- /dev/null
+++ b/src/mame/machine/xavix_math.cpp
@@ -0,0 +1,171 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+
+#include "emu.h"
+#include "xavix_math.h"
+
+#define VERBOSE 0
+#include "logmacro.h"
+
+DEFINE_DEVICE_TYPE(XAVIX_MATH, xavix_math_device, "xavix_math", "XaviX Math Unit")
+
+xavix_math_device::xavix_math_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, XAVIX_MATH, tag, owner, clock)
+{
+}
+
+void xavix_math_device::device_start()
+{
+ save_item(NAME(m_barrel_params));
+ save_item(NAME(m_multparams));
+ save_item(NAME(m_multresults));
+}
+
+void xavix_math_device::device_reset()
+{
+ m_barrel_params[0] = 0x00;
+ m_barrel_params[1] = 0x00;
+
+ std::fill(std::begin(m_multparams), std::end(m_multparams), 0x00);
+ std::fill(std::begin(m_multresults), std::end(m_multresults), 0x00);
+}
+
+
+// epo_guru uses this for ground movement in 3d stages (and other places)
+READ8_MEMBER(xavix_math_device::barrel_r)
+{
+ if (offset == 0)
+ {
+ // or upper bits of result?
+ LOG("%s: reading shift trigger?!\n", machine().describe_context());
+ return 0x00;
+ }
+ else
+ {
+ uint8_t retdata = m_barrel_params[1];
+ LOG("%s: reading shift results/data %02x\n", machine().describe_context(), retdata);
+ return retdata;
+ }
+}
+
+// epo_guru 3d stages still flicker a lot with this, but it seems unrelated to the calculations here, possibly a raster timing issue
+// the pickup animations however don't seem to play, which indicates this could still be wrong.
+WRITE8_MEMBER(xavix_math_device::barrel_w)
+{
+ LOG("%s: barrel_w %02x\n", machine().describe_context(), data);
+
+ m_barrel_params[offset] = data;
+
+ // offset 0 = trigger
+ if (offset == 0)
+ {
+ int shift_data = m_barrel_params[1];
+ int shift_amount = data & 0x0f;
+ int shift_param = (data & 0xf0) >> 4;
+
+ if (shift_param == 0x00) // just a shift? (definitely right for 'hammer throw'
+ {
+ // used in epo_guru for 'hammer throw', 'pre-title screen', 'mini game select', '3d chase game (floor scroll, pickups, misc)', 'toilet roll mini game (when you make an error)'
+
+ if (shift_amount & 0x08)
+ {
+ m_barrel_params[1] = (shift_data >> (shift_amount & 0x7));
+ }
+ else
+ {
+ m_barrel_params[1] = (shift_data << (shift_amount & 0x7));
+ }
+ }
+ else if (shift_param == 0x8) // rotate? (should it rotate through a carry bit of some kind?)
+ {
+ // used in epo_guru for '3d chase game' (unsure of actual purpose in it)
+ switch (shift_amount)
+ {
+ case 0x0: m_barrel_params[1] = shift_data; break;
+ case 0x1: m_barrel_params[1] = (shift_data << 1) | ((shift_data >> 7) & 0x01); break;
+ case 0x2: m_barrel_params[1] = (shift_data << 2) | ((shift_data >> 6) & 0x03); break;
+ case 0x3: m_barrel_params[1] = (shift_data << 3) | ((shift_data >> 5) & 0x07); break;
+ case 0x4: m_barrel_params[1] = (shift_data << 4) | ((shift_data >> 4) & 0x0f); break;
+ case 0x5: m_barrel_params[1] = (shift_data << 5) | ((shift_data >> 3) & 0x1f); break;
+ case 0x6: m_barrel_params[1] = (shift_data << 6) | ((shift_data >> 2) & 0x2f); break;
+ case 0x7: m_barrel_params[1] = (shift_data << 7) | ((shift_data >> 1) & 0x3f); break;
+ case 0x8: m_barrel_params[1] = shift_data; break;
+ case 0x9: m_barrel_params[1] = (shift_data >> 1) | ((shift_data & 0x01) << 7); break;
+ case 0xa: m_barrel_params[1] = (shift_data >> 2) | ((shift_data & 0x03) << 6); break;
+ case 0xb: m_barrel_params[1] = (shift_data >> 3) | ((shift_data & 0x07) << 5); break;
+ case 0xc: m_barrel_params[1] = (shift_data >> 4) | ((shift_data & 0x0f) << 4); break;
+ case 0xd: m_barrel_params[1] = (shift_data >> 5) | ((shift_data & 0x1f) << 3); break;
+ case 0xe: m_barrel_params[1] = (shift_data >> 6) | ((shift_data & 0x2f) << 2); break;
+ case 0xf: m_barrel_params[1] = (shift_data >> 7) | ((shift_data & 0x3f) << 1); break;
+ }
+ }
+ }
+}
+
+
+
+READ8_MEMBER(xavix_math_device::mult_r)
+{
+ return m_multresults[offset];
+}
+
+WRITE8_MEMBER(xavix_math_device::mult_w)
+{
+ // rad_madf writes here to set the base value which the multiplication result gets added to
+ m_multresults[offset] = data;
+}
+
+READ8_MEMBER(xavix_math_device::mult_param_r)
+{
+ return m_multparams[offset];
+}
+
+WRITE8_MEMBER(xavix_math_device::mult_param_w)
+{
+ COMBINE_DATA(&m_multparams[offset]);
+ // there are NOPs after one of the writes, so presumably the operation is write triggerd and not intstant
+ // see test code at 0184a4 in monster truck
+
+ // offset0 is control
+
+ // mm-- --Ss
+ // mm = mode, S = sign for param1, s = sign for param2
+ // modes 00 = multiply (regular?) 11 = add to previous 01 / 10 unknown (maybe subtract?)
+
+ if (offset == 2)
+ {
+ // assume 0 is upper bits, might be 'mode' instead, check
+
+
+ int signmode = (m_multparams[0] & 0x3f);
+
+ uint16_t result = 0;
+
+ // rad_madf uses this mode (add to previous result)
+ if ((m_multparams[0] & 0xc0) == 0xc0)
+ {
+ const int param1 = signmode & 0x2 ? (int8_t)m_multparams[1] : (uint8_t)m_multparams[1];
+ const int param2 = signmode & 0x1 ? (int8_t)m_multparams[2] : (uint8_t)m_multparams[2];
+
+ result = param1 * param2;
+
+ uint16_t oldresult = (m_multresults[1] << 8) | m_multresults[0];
+ result = oldresult + result;
+ }
+ else if ((m_multparams[0] & 0xc0) == 0x00)
+ {
+ const int param1 = signmode & 0x2 ? (int8_t)m_multparams[1] : (uint8_t)m_multparams[1];
+ const int param2 = signmode & 0x1 ? (int8_t)m_multparams[2] : (uint8_t)m_multparams[2];
+
+ result = param1 * param2;
+ }
+ else
+ {
+ popmessage("unknown multiplier mode %02x", m_multparams[0] & 0xc0);
+ }
+
+ m_multresults[1] = (result >> 8) & 0xff;
+ m_multresults[0] = result & 0xff;
+ }
+}
+
diff --git a/src/mame/machine/xavix_math.h b/src/mame/machine/xavix_math.h
new file mode 100644
index 00000000000..d0bdeb6bf1f
--- /dev/null
+++ b/src/mame/machine/xavix_math.h
@@ -0,0 +1,34 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+
+#ifndef MAME_MACHINE_XAVIX_MATH_H
+#define MAME_MACHINE_XAVIX_MATH_H
+
+class xavix_math_device : public device_t
+{
+public:
+ xavix_math_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ DECLARE_READ8_MEMBER(mult_r);
+ DECLARE_WRITE8_MEMBER(mult_w);
+ DECLARE_READ8_MEMBER(mult_param_r);
+ DECLARE_WRITE8_MEMBER(mult_param_w);
+
+ DECLARE_READ8_MEMBER(barrel_r);
+ DECLARE_WRITE8_MEMBER(barrel_w);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+private:
+
+ uint8_t m_barrel_params[2];
+ uint8_t m_multparams[3];
+ uint8_t m_multresults[2];
+};
+
+DECLARE_DEVICE_TYPE(XAVIX_MATH, xavix_math_device)
+
+#endif // MAME_MACHINE_XAVIX_MATH_H
diff --git a/src/mame/machine/xbox.cpp b/src/mame/machine/xbox.cpp
index 7d4d30d9289..01dcb4631a5 100644
--- a/src/mame/machine/xbox.cpp
+++ b/src/mame/machine/xbox.cpp
@@ -787,7 +787,7 @@ void xbox_base_state::machine_start()
using namespace std::placeholders;
machine().debugger().console().register_command("xbox", CMDFLAG_NONE, 0, 1, 4, std::bind(&xbox_base_state::xbox_debug_commands, this, _1, _2));
}
- subdevice<xbox_eeprom_device>("pci:01.1:54")->hack_eeprom =
+ subdevice<xbox_eeprom_device>("pci:01.1:154")->hack_eeprom =
[&](void)
{
hack_eeprom();
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 31e4a7f4207..51f57adf8fb 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -916,6 +916,9 @@ adm23 //
@source:adm31.cpp
adm31 //
+@source:adm36.cpp
+adm36 //
+
@source:adp.cpp
fashiong // (c) 1997
fashiong2 // (c) 1997
@@ -1292,9 +1295,6 @@ spcpostn // (c) 1986 Sega / Nasco"
@source:anzterm.cpp
anzterm // Burroughs EF315-I220
-@source:apbeena.cpp
-apb_frpc
-
@source:apc.cpp
apc //
@@ -2723,6 +2723,7 @@ catchp // 008837 prototype 1977/?? [6502]
@source:ave_arb.cpp
arb //
+arbv2 //
@source:avigo.cpp
avigo // 1997 Avigo
@@ -12874,6 +12875,9 @@ bridgeca //
gincribc //
vbrc //
+@source:fidel_cc1.cpp
+cc1 //
+
@source:fidel_cc10.cpp
cc10 //
checkc4 //
@@ -12881,6 +12885,7 @@ checkc4 //
@source:fidel_cc7.cpp
backgamc //
cc7 //
+cc7o //
@source:fidel_chesster.cpp
chesster //
@@ -12907,7 +12912,7 @@ fdes2325 //
feagv10 //
feagv11 //
feagv2 //
-feagv2a //
+feagv3 //
feagv5 //
feagv7 //
feagv7a //
@@ -12968,6 +12973,7 @@ vsc //
@source:finalizr.cpp
finalizr // GX523 (c) 1985
+finalizra // GX523 (c) 1985
finalizrb // bootleg
@source:fireball.cpp
@@ -13098,6 +13104,7 @@ fp6000 //
@source:freekick.cpp
omega // (c) 1986 Nihon System
+omegaa // (c) 1986 Nihon System
countrun // (c) 1988 Nihon System (+ optional Sega) NS6201-A 1988.3
countrunb // (c) 1988 bootleg
countrunb2 // (c) 1988 bootleg
@@ -13217,6 +13224,7 @@ magicrd2c // (c) 1996 Impera
megacard // (c) 1993 Fun World
mongolnw // 199? bootleg
multiwin // (c) 1992 Fun World
+nevadafw // 199? unknown
novoplay // (c) 1986 Novomatic
pool10 // (c) 1996 C.M.C.
pool10b // (c) 1996 C.M.C.
@@ -15078,6 +15086,7 @@ uspbball // US Games
@source:hh_sm510.cpp
exospace // Elektronika
+gnw_bfight // Nintendo
gnw_bjack // Nintendo
gnw_boxing // Nintendo
gnw_climber // Nintendo
@@ -15097,6 +15106,7 @@ gnw_mickdon // Nintendo
gnw_octopus // Nintendo
gnw_opanic // Nintendo
gnw_pchute // Nintendo
+gnw_popeye // Nintendo
gnw_rshower // Nintendo
gnw_smb // Nintendo
gnw_squish // Nintendo
@@ -17752,6 +17762,8 @@ karatevs // (c) 1984 Data East Corporation (Japan)
kchamp // (c) 1984 Data East USA (US)
kchampvs // (c) 1984 Data East USA (US)
kchampvs2 // (c) 1984 Data East USA (US)
+kchampvs3 // (c) 1984 Data East USA (US)
+kchampvs4 // (c) 1984 Data East USA (US)
@source:kdt6.cpp
psi98 // (c) 1984 Kontron
@@ -18596,6 +18608,7 @@ gallop // (c) 1991 (Japan)
hharry // (c) 1990 (World)
hharryu // (c) 1990 Irem America (US)
imgfight // (c) 1988 (World)
+imgfightb // bootleg
imgfightj // (c) 1988 (Japan)
kengo // (c) 1991 (Japan)
kengoa // (c) 1991 (Japan)
@@ -30857,7 +30870,8 @@ ondrav //
@source:oneshot.cpp
maddonna // (c) 1995 Tuning
-maddonnb // (c) 1995 Tuning
+komocomo //
+maddonnab // (c) 1995 Tuning
oneshot // no copyright notice
@source:onetwo.cpp
@@ -36226,6 +36240,7 @@ st_vulkn //
@source:stfight.cpp
cshootert // (c) 1987 Taito
empcity // (c) 1986 Seibu Kaihatsu (bootleg?)
+empcityfr // (c) 1986 Seibu Kaihatsu (Norad license)
empcityi // (c) 1986 Seibu Kaihatsu (Eurobed license)
empcityj // (c) 1986 Taito Corporation (Japan)
empcityu // (c) 1986 Taito (Romstar License)
@@ -37344,6 +37359,7 @@ spcteam //
backfirt // bootleg [(c) 1988 Tecmo]
gemini // (c) 1987 Tecmo
geminib // bootleg
+geminij // (c) 1987 Tecmo
rygar // 6002 - (c) 1986 Tecmo
rygar2 // 6002 - (c) 1986 Tecmo
rygar3 // 6002 - (c) 1986 Tecmo
@@ -37686,6 +37702,10 @@ timepltc // GX393 (c) 1982 + Centuri license
timetrv // (c) 1991.10 Virtual Image Productions
timetrv2 // (c) 1991.10 Virtual Image Productions
+@source:titan_soc.cpp
+megadri4
+megadri4a
+
@source:timex.cpp
tc2048 // 198? TC2048
ts2068 // 1983 TS2068
@@ -38431,6 +38451,9 @@ uts20 //
@source:unkhorse.cpp
unkhorse //
+@source:unkpoker.cpp
+unkpoker //
+
@source:upscope.cpp
upscope // (c) 1986 Grand products
@@ -39689,6 +39712,7 @@ sttng_g7 //
sttng_l1 //
sttng_l2 //
sttng_l3 //
+sttng_l5 //
sttng_l7 //
sttng_p4 //
sttng_p5 //
@@ -40050,9 +40074,11 @@ yiear // GX407 (c) 1985
yiear2 // GX407 (c) 1985
@source:ymmu100.cpp
+mu50 // 1995 MU-50
mu80 // 1994 MU-80
mu100 // 1997 MU-100
mu100r // 1997 MU-100 Rackable version
+vl70 // 1996 VL70-m
@source:yunsun16.cpp
bombkick // (c) 1998 Yun Sung
diff --git a/src/mame/mess.flt b/src/mame/mess.flt
index a3264c32cb2..675f1b05dc3 100644
--- a/src/mame/mess.flt
+++ b/src/mame/mess.flt
@@ -24,6 +24,7 @@ acvirus.cpp
adam.cpp
adm23.cpp
adm31.cpp
+adm36.cpp
advision.cpp
agat.cpp
aim65.cpp
@@ -52,7 +53,6 @@ amstr_pc.cpp
amstrad.cpp
amust.cpp
anzterm.cpp
-apbeena.cpp
apc.cpp
apexc.cpp
apf.cpp
@@ -245,6 +245,7 @@ fccpu20.cpp
fccpu30.cpp
fidel_as12.cpp
fidel_card.cpp
+fidel_cc1.cpp
fidel_cc10.cpp
fidel_cc7.cpp
fidel_chesster.cpp
@@ -786,6 +787,7 @@ ti990_10.cpp
ti990_4.cpp
ticalc1x.cpp
tiki100.cpp
+titan_soc.cpp
tim011.cpp
tim100.cpp
timex.cpp
diff --git a/src/mame/video/astrocde.cpp b/src/mame/video/astrocde.cpp
index 63e35e6184c..781cee11b18 100644
--- a/src/mame/video/astrocde.cpp
+++ b/src/mame/video/astrocde.cpp
@@ -395,6 +395,14 @@ void astrocde_state::device_timer(emu_timer &timer, device_timer_id id, int para
}
}
+WRITE_LINE_MEMBER(astrocde_state::lightpen_trigger_w)
+{
+ if (state)
+ {
+ uint8_t res_shift = 1 - m_video_mode;
+ astrocade_trigger_lightpen(mame_vpos_to_astrocade_vpos(m_screen->vpos()) & ~res_shift, (m_screen->hpos() >> res_shift) + 12);
+ }
+}
void astrocde_state::astrocade_trigger_lightpen(uint8_t vfeedback, uint8_t hfeedback)
{
diff --git a/src/mame/video/cischeat.cpp b/src/mame/video/cischeat.cpp
index 91ecd99365d..750ecf21fae 100644
--- a/src/mame/video/cischeat.cpp
+++ b/src/mame/video/cischeat.cpp
@@ -224,7 +224,7 @@ READ16_MEMBER(cischeat_state::cischeat_ip_select_r)
WRITE16_MEMBER(cischeat_state::cischeat_soundlatch_w)
{
/* Sound CPU: reads latch during int 4, and stores command */
- m_soundlatch->write(space, 0, data, mem_mask);
+ m_soundlatch->write(data);
m_soundcpu->set_input_line(4, HOLD_LINE);
}
diff --git a/src/mame/video/cninja.cpp b/src/mame/video/cninja.cpp
index aede19bd9c0..cfb7e30fe03 100644
--- a/src/mame/video/cninja.cpp
+++ b/src/mame/video/cninja.cpp
@@ -11,6 +11,11 @@
/******************************************************************************/
+VIDEO_START_MEMBER(cninja_state,cninja)
+{
+ m_deco_tilegen[0]->set_transmask(1, 0, 0x00ff, 0xff01);
+}
+
VIDEO_START_MEMBER(cninja_state,stoneage)
{
/* The bootleg has broken scroll registers */
@@ -208,14 +213,14 @@ uint32_t cninja_state::screen_update_robocop2(screen_device &screen, bitmap_ind1
/* One of the tilemap chips can switch between 2 tilemaps at 4bpp, or 1 at 8bpp */
if (priority & 4)
{
- m_deco_tilegen[0]->set_tilemap_colour_mask(2, 0);
- m_deco_tilegen[0]->set_tilemap_colour_mask(3, 0);
+ m_deco_tilegen[1]->set_tilemap_colour_mask(0, 0);
+ m_deco_tilegen[1]->set_tilemap_colour_mask(1, 0);
m_deco_tilegen[1]->pf12_set_gfxbank(0, 4);
}
else
{
- m_deco_tilegen[0]->set_tilemap_colour_mask(2, 0xf);
- m_deco_tilegen[0]->set_tilemap_colour_mask(3, 0xf);
+ m_deco_tilegen[1]->set_tilemap_colour_mask(0, 0xf);
+ m_deco_tilegen[1]->set_tilemap_colour_mask(1, 0xf);
m_deco_tilegen[1]->pf12_set_gfxbank(0, 2);
}
diff --git a/src/mame/video/cps1.cpp b/src/mame/video/cps1.cpp
index 34723a3fb1a..d378aac4871 100644
--- a/src/mame/video/cps1.cpp
+++ b/src/mame/video/cps1.cpp
@@ -1810,10 +1810,12 @@ READ16_MEMBER(cps_state::cps1_cps_b_r)
return (m_cps_b_regs[m_game_config->mult_factor1 / 2] *
m_cps_b_regs[m_game_config->mult_factor2 / 2]) >> 16;
- if (offset == m_game_config->in2_addr / 2) /* Extra input ports (on C-board) */
+ /* Extra input ports (on C-board) */
+ if (m_game_config->in2_addr != 0 && offset == m_game_config->in2_addr / 2)
return ioport("IN2")->read();
- if (offset == m_game_config->in3_addr / 2) /* Player 4 controls (on C-board) ("Captain Commando") */
+ /* Player 4 controls (on C-board) ("Captain Commando") */
+ if (m_game_config->in3_addr != 0 && offset == m_game_config->in3_addr / 2)
return ioport("IN3")->read();
if (m_cps_version == 2)
@@ -1859,7 +1861,7 @@ WRITE16_MEMBER(cps_state::cps1_cps_b_w)
// additional outputs on C-board
- if (offset == m_game_config->out2_addr / 2)
+ if (m_game_config->out2_addr != 0 && offset == m_game_config->out2_addr / 2)
{
if (ACCESSING_BITS_0_7)
{
diff --git a/src/mame/video/crospang.cpp b/src/mame/video/crospang.cpp
index adef54bea52..5e83d448063 100644
--- a/src/mame/video/crospang.cpp
+++ b/src/mame/video/crospang.cpp
@@ -15,19 +15,19 @@
#include "includes/crospang.h"
-WRITE16_MEMBER(crospang_state::bestri_tilebank_select_w)
+void crospang_state::tilebank_select_w(u16 data)
{
- logerror("bestri_tilebank_select_w %04x\n", data & mem_mask);
+ logerror("tilebank_select_w %04x\n", data);
- m_bestri_tilebankselect = (data >> 8) & 3;
+ m_tilebankselect = (data >> 8) & 3;
}
-WRITE16_MEMBER(crospang_state::bestri_tilebank_data_w)
+void crospang_state::tilebank_data_w(u16 data)
{
- logerror("bestri_tilebank_data_w %04x\n", data & mem_mask);
+ logerror("tilebank_data_w %04x\n", data);
- m_bestri_tilebank[m_bestri_tilebankselect] = data >> 8;
+ m_tilebank[m_tilebankselect] = data >> 8;
m_fg_layer->mark_all_dirty();
m_bg_layer->mark_all_dirty();
@@ -35,7 +35,7 @@ WRITE16_MEMBER(crospang_state::bestri_tilebank_data_w)
// Bestri performs some unusual operations on the scroll values before writing them
-WRITE16_MEMBER(crospang_state::bestri_bg_scrolly_w)
+void crospang_state::bestri_bg_scrolly_w(u16 data)
{
// addi.w #$1f8, D0
// eori.w #$154, D0
@@ -43,7 +43,7 @@ WRITE16_MEMBER(crospang_state::bestri_bg_scrolly_w)
m_bg_layer->set_scrolly(0, -scroll + 7);
}
-WRITE16_MEMBER(crospang_state::bestri_fg_scrolly_w)
+void crospang_state::bestri_fg_scrolly_w(u16 data)
{
// addi.w #$1f8, D0
// eori.w #$aa, D0
@@ -51,7 +51,7 @@ WRITE16_MEMBER(crospang_state::bestri_fg_scrolly_w)
m_fg_layer->set_scrolly(0, -scroll + 7);
}
-WRITE16_MEMBER(crospang_state::bestri_fg_scrollx_w)
+void crospang_state::bestri_fg_scrollx_w(u16 data)
{
// addi.w #$400, D1
// eori.w #$1e0, D1
@@ -59,7 +59,7 @@ WRITE16_MEMBER(crospang_state::bestri_fg_scrollx_w)
m_fg_layer->set_scrollx(0, scroll - 1);
}
-WRITE16_MEMBER(crospang_state::bestri_bg_scrollx_w)
+void crospang_state::bestri_bg_scrollx_w(u16 data)
{
// addi.w #$3fc, D1
// eori.w #$3c0, D1
@@ -68,34 +68,34 @@ WRITE16_MEMBER(crospang_state::bestri_bg_scrollx_w)
}
-WRITE16_MEMBER(crospang_state::crospang_fg_scrolly_w)
+void crospang_state::fg_scrolly_w(u16 data)
{
m_fg_layer->set_scrolly(0, data + 8);
}
-WRITE16_MEMBER(crospang_state::crospang_bg_scrolly_w)
+void crospang_state::bg_scrolly_w(u16 data)
{
m_bg_layer->set_scrolly(0, data + 8);
}
-WRITE16_MEMBER(crospang_state::crospang_fg_scrollx_w)
+void crospang_state::fg_scrollx_w(u16 data)
{
m_fg_layer->set_scrollx(0, data);
}
-WRITE16_MEMBER(crospang_state::crospang_bg_scrollx_w)
+void crospang_state::bg_scrollx_w(u16 data)
{
m_bg_layer->set_scrollx(0, data + 4);
}
-WRITE16_MEMBER(crospang_state::crospang_fg_videoram_w)
+void crospang_state::fg_videoram_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_fg_videoram[offset]);
m_fg_layer->mark_tile_dirty(offset);
}
-WRITE16_MEMBER(crospang_state::crospang_bg_videoram_w)
+void crospang_state::bg_videoram_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_bg_videoram[offset]);
m_bg_layer->mark_tile_dirty(offset);
@@ -106,7 +106,7 @@ TILE_GET_INFO_MEMBER(crospang_state::get_bg_tile_info)
int data = m_bg_videoram[tile_index];
int tile = data & 0x03ff;
int tilebank = (data & 0x0c00) >> 10;
- tile = tile + (m_bestri_tilebank[tilebank] << 10);
+ tile = tile + (m_tilebank[tilebank] << 10);
int color = (data >> 12) & 0x0f;
SET_TILE_INFO_MEMBER(1, tile, color + 0x20, 0);
@@ -117,7 +117,7 @@ TILE_GET_INFO_MEMBER(crospang_state::get_fg_tile_info)
int data = m_fg_videoram[tile_index];
int tile = data & 0x03ff;
int tilebank = (data & 0x0c00) >> 10;
- tile = tile + (m_bestri_tilebank[tilebank] << 10);
+ tile = tile + (m_tilebank[tilebank] << 10);
int color = (data >> 12) & 0x0f;
SET_TILE_INFO_MEMBER(1, tile, color + 0x10, 0);
@@ -132,7 +132,7 @@ void crospang_state::video_start()
m_fg_layer->set_transparent_pen(0);
}
-uint32_t crospang_state::screen_update_crospang(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+u32 crospang_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_bg_layer->draw(screen, bitmap, cliprect, 0, 0);
m_fg_layer->draw(screen, bitmap, cliprect, 0, 0);
diff --git a/src/mame/video/decbac06.cpp b/src/mame/video/decbac06.cpp
index e70e626935f..e89d24f957d 100644
--- a/src/mame/video/decbac06.cpp
+++ b/src/mame/video/decbac06.cpp
@@ -63,7 +63,7 @@ Priority word (Midres):
Bit 2
Bit 3 set = ...
- Note that priority mixing is handled outside of the BAC-06 chip.
+ Note that priority mixing is handled outside of the BAC-06 chip.
*/
@@ -146,7 +146,7 @@ TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape0_scan)
{
if ((m_pf_control_0[0]&2)==0)
{
- int col_mask = num_cols - 1;
+ int col_mask = num_cols - 1;
return (row & 0xf) + ((col_mask - (col & col_mask)) << 4);
}
return (col & 0xf) + ((row & 0xf) << 4) + ((col & 0x1f0) << 4);
@@ -155,35 +155,35 @@ TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape0_scan)
TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape1_scan)
{
//if (m_pf_control_0[0]&2) // Needs testing on real hardware, not used by any game
- // return (row & 0xf) + ((col & 0x1f) << 4) + ((col & 0xf0) << 5);
+ // return (row & 0xf) + ((col & 0x1f) << 4) + ((col & 0xf0) << 5);
return (col & 0xf) + ((row & 0x1f) << 4) + ((col & 0xf0) << 5);
}
TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape2_scan)
{
//if (m_pf_control_0[0]&2) // Needs testing on real hardware, not used by any game
- // return (col & 0xf) + ((row & 0x3f) << 4) + ((row & 0x70) << 6);
+ // return (col & 0xf) + ((row & 0x3f) << 4) + ((row & 0x70) << 6);
return (col & 0xf) + ((row & 0x3f) << 4) + ((col & 0x70) << 6);
}
TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape0_8x8_scan)
{
//if (m_pf_control_0[0]&2) // Needs testing on real hardware, not used by any game
- // return (col & 0x1f) + ((row & 0x1f) << 5) + ((row & 0x60) << 5);
+ // return (col & 0x1f) + ((row & 0x1f) << 5) + ((row & 0x60) << 5);
return (col & 0x1f) + ((row & 0x1f) << 5) + ((col & 0x60) << 5);
}
TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape1_8x8_scan)
{
//if (m_pf_control_0[0]&2) // Needs testing on real hardware, not used by any game
- // return (row & 0x1f) + ((col & 0x1f) << 5) + ((col & 0x20) << 5) + ((row & 0x20) << 6);
+ // return (row & 0x1f) + ((col & 0x1f) << 5) + ((col & 0x20) << 5) + ((row & 0x20) << 6);
return (col & 0x1f) + ((row & 0x1f) << 5) + ((row & 0x20) << 5) + ((col & 0x20) << 6);
}
TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape2_8x8_scan)
{
//if (m_pf_control_0[0]&2) // Needs testing on real hardware, not used by any game
- // return (row & 0x1f) + ((col & 0x7f) << 5);
+ // return (row & 0x1f) + ((col & 0x7f) << 5);
return (col & 0x1f) + ((row & 0x7f) << 5);
}
diff --git a/src/mame/video/deco16ic.cpp b/src/mame/video/deco16ic.cpp
index 0943f16d649..a52cac73971 100644
--- a/src/mame/video/deco16ic.cpp
+++ b/src/mame/video/deco16ic.cpp
@@ -191,7 +191,6 @@ deco16ic_device::deco16ic_device(const machine_config &mconfig, const char *tag,
m_pf12_last_small(0),
m_pf12_last_big(0),
m_pf1_8bpp_mode(0),
- m_split(0),
m_pf1_size(0),
m_pf2_size(0),
m_pf1_trans_mask(0xf),
@@ -248,9 +247,6 @@ void deco16ic_device::device_start()
m_pf1_tilemap_16x16->set_transparent_pen(0);
m_pf2_tilemap_16x16->set_transparent_pen(0);
- if (m_split) /* Caveman Ninja only */
- m_pf2_tilemap_16x16->set_transmask(0, 0x00ff, 0xff01);
-
m_pf1_8bpp_mode = 0;
m_pf1_data = make_unique_clear<uint16_t[]>(0x2000 / 2);
@@ -519,6 +515,21 @@ void deco16ic_device::custom_tilemap_draw(
/******************************************************************************/
+void deco16ic_device::set_transmask(int tmap, int group, u32 fgmask, u32 bgmask)
+{
+ switch (tmap)
+ {
+ case 0:
+ m_pf1_tilemap_16x16->set_transmask(group, fgmask, bgmask);
+ m_pf1_tilemap_8x8->set_transmask(group, fgmask, bgmask);
+ break;
+ case 1:
+ m_pf2_tilemap_16x16->set_transmask(group, fgmask, bgmask);
+ m_pf2_tilemap_8x8->set_transmask(group, fgmask, bgmask);
+ break;
+ }
+}
+
/* captain america seems to have a similar 8bpp feature to robocop2, investigate merging */
void deco16ic_device::set_pf1_8bpp_mode(int mode)
{
diff --git a/src/mame/video/deco16ic.h b/src/mame/video/deco16ic.h
index 8c19d469571..2c5fa213e03 100644
--- a/src/mame/video/deco16ic.h
+++ b/src/mame/video/deco16ic.h
@@ -37,7 +37,6 @@ public:
// void set_palette_tag(const char *tag);
template <typename... T> void set_bank1_callback(T &&... args) { m_bank1_cb = deco16_bank_cb_delegate(std::forward<T>(args)...); }
template <typename... T> void set_bank2_callback(T &&... args) { m_bank2_cb = deco16_bank_cb_delegate(std::forward<T>(args)...); }
- void set_split(int split) { m_split = split; }
void set_pf1_size(int size) { m_pf1_size = size; }
void set_pf2_size(int size) { m_pf2_size = size; }
void set_pf1_trans_mask(int mask) { m_pf1_trans_mask = mask; }
@@ -94,6 +93,9 @@ public:
/* used by captaven */
void set_pf1_8bpp_mode(int mode);
+ /* used by cninja */
+ void set_transmask(int tmap, int group, u32 fgmask, u32 bgmask);
+
/* used by stoneage */
void set_scrolldx(int tmap, int size, int dx, int dx_if_flipped);
@@ -146,7 +148,6 @@ private:
int m_pf12_last_small, m_pf12_last_big;
int m_pf1_8bpp_mode;
- int m_split;
int m_pf1_size;
int m_pf2_size;
int m_pf1_trans_mask, m_pf2_trans_mask;
diff --git a/src/mame/video/esd16.cpp b/src/mame/video/esd16.cpp
index c36ee9ca06f..589aadecf64 100644
--- a/src/mame/video/esd16.cpp
+++ b/src/mame/video/esd16.cpp
@@ -53,73 +53,43 @@ Note: if MAME_DEBUG is defined, pressing Z with:
***************************************************************************/
-TILE_GET_INFO_MEMBER(esd16_state::get_tile_info_0)
+template<unsigned Layer>
+TILE_GET_INFO_MEMBER(esd16_state::get_tile_info)
{
- uint16_t code = m_vram_0[tile_index];
+ const u16 code = m_vram[Layer][tile_index];
SET_TILE_INFO_MEMBER(1,
code,
- m_tilemap0_color,
+ m_tilemap_color[Layer],
0);
}
-TILE_GET_INFO_MEMBER(esd16_state::get_tile_info_0_16x16)
+template<unsigned Layer>
+TILE_GET_INFO_MEMBER(esd16_state::get_tile_info_16x16)
{
- uint16_t code = m_vram_0[tile_index];
+ const u16 code = m_vram[Layer][tile_index];
SET_TILE_INFO_MEMBER(2,
code,
- m_tilemap0_color,
+ m_tilemap_color[Layer],
0);
}
-TILE_GET_INFO_MEMBER(esd16_state::get_tile_info_1)
+void esd16_state::tilemap0_color_w(u16 data)
{
- uint16_t code = m_vram_1[tile_index];
- SET_TILE_INFO_MEMBER(1,
- code,
- m_tilemap1_color,
- 0);
-}
-
-TILE_GET_INFO_MEMBER(esd16_state::get_tile_info_1_16x16)
-{
- uint16_t code = m_vram_1[tile_index];
- SET_TILE_INFO_MEMBER(2,
- code,
- m_tilemap1_color,
- 0);
-}
-
-WRITE16_MEMBER(esd16_state::esd16_vram_0_w)
-{
- COMBINE_DATA(&m_vram_0[offset]);
- m_tilemap_0->mark_tile_dirty(offset);
- m_tilemap_0_16x16->mark_tile_dirty(offset);
-}
-
-WRITE16_MEMBER(esd16_state::esd16_vram_1_w)
-{
- COMBINE_DATA(&m_vram_1[offset]);
- m_tilemap_1->mark_tile_dirty(offset);
- m_tilemap_1_16x16->mark_tile_dirty(offset);
-}
-
-WRITE16_MEMBER(esd16_state::esd16_tilemap0_color_w)
-{
- m_tilemap0_color = data & 0x03;
- m_tilemap_0->mark_all_dirty();
- m_tilemap_0_16x16->mark_all_dirty();
+ m_tilemap_color[0] = data & 0x03;
+ m_tilemap[0]->mark_all_dirty();
+ m_tilemap_16x16[0]->mark_all_dirty();
bool flip = BIT(data, 7);
flip_screen_set(flip);
m_sprgen->set_flip_screen(flip);
}
-WRITE16_MEMBER(esd16_state::esd16_tilemap0_color_jumppop_w)
+void esd16_state::tilemap0_color_jumppop_w(u16 data)
{
// todo
- m_tilemap0_color = 2;
- m_tilemap1_color = 1;
+ m_tilemap_color[0] = 2;
+ m_tilemap_color[1] = 1;
bool flip = BIT(data, 7);
flip_screen_set(flip);
@@ -138,22 +108,22 @@ WRITE16_MEMBER(esd16_state::esd16_tilemap0_color_jumppop_w)
void esd16_state::video_start()
{
- m_tilemap_0 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(esd16_state::get_tile_info_0),this), TILEMAP_SCAN_ROWS, 8, 8, 0x80, 0x40);
- m_tilemap_1 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(esd16_state::get_tile_info_1),this), TILEMAP_SCAN_ROWS, 8, 8, 0x80, 0x40);
+ m_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(esd16_state::get_tile_info<0>),this), TILEMAP_SCAN_ROWS, 8, 8, 0x80, 0x40);
+ m_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(esd16_state::get_tile_info<1>),this), TILEMAP_SCAN_ROWS, 8, 8, 0x80, 0x40);
/* swatpolc changes tilemap 0 to 16x16 at various times */
- m_tilemap_0_16x16 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(esd16_state::get_tile_info_0_16x16),this), TILEMAP_SCAN_ROWS, 16,16, 0x40, 0x40);
+ m_tilemap_16x16[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(esd16_state::get_tile_info_16x16<0>),this), TILEMAP_SCAN_ROWS, 16,16, 0x40, 0x40);
/* hedpanic changes tilemap 1 to 16x16 at various times */
- m_tilemap_1_16x16 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(esd16_state::get_tile_info_1_16x16),this), TILEMAP_SCAN_ROWS, 16,16, 0x40, 0x40);
+ m_tilemap_16x16[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(esd16_state::get_tile_info_16x16<1>),this), TILEMAP_SCAN_ROWS, 16,16, 0x40, 0x40);
- m_tilemap_0->set_scrolldx(-0x60 + 2, -0x60);
- m_tilemap_1->set_scrolldx(-0x60, -0x60 + 2);
- m_tilemap_0_16x16->set_scrolldx(-0x60 + 2, -0x60);
- m_tilemap_1_16x16->set_scrolldx(-0x60, -0x60 + 2);
+ m_tilemap[0]->set_scrolldx(-0x60 + 2, -0x60);
+ m_tilemap[1]->set_scrolldx(-0x60, -0x60 + 2);
+ m_tilemap_16x16[0]->set_scrolldx(-0x60 + 2, -0x60);
+ m_tilemap_16x16[1]->set_scrolldx(-0x60, -0x60 + 2);
- m_tilemap_1->set_transparent_pen(0x00);
- m_tilemap_1_16x16->set_transparent_pen(0x00);
+ m_tilemap[1]->set_transparent_pen(0x00);
+ m_tilemap_16x16[1]->set_transparent_pen(0x00);
}
@@ -165,7 +135,7 @@ void esd16_state::video_start()
***************************************************************************/
-uint32_t esd16_state::screen_update_hedpanic(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+u32 esd16_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
int layers_ctrl = -1;
@@ -186,15 +156,15 @@ if (machine().input().code_pressed(KEYCODE_Z))
{
if (m_head_layersize[0] & 0x0001)
{
- m_tilemap_0_16x16->set_scrollx(0, m_scroll_0[0]);
- m_tilemap_0_16x16->set_scrolly(0, m_scroll_0[1]);
- m_tilemap_0_16x16->draw(screen, bitmap, cliprect, 0, 0);
+ m_tilemap_16x16[0]->set_scrollx(0, m_scroll[0][0]);
+ m_tilemap_16x16[0]->set_scrolly(0, m_scroll[0][1]);
+ m_tilemap_16x16[0]->draw(screen, bitmap, cliprect, 0, 0);
}
else
{
- m_tilemap_0->set_scrollx(0, m_scroll_0[0]);
- m_tilemap_0->set_scrolly(0, m_scroll_0[1]);
- m_tilemap_0->draw(screen, bitmap, cliprect, 0, 0);
+ m_tilemap[0]->set_scrollx(0, m_scroll[0][0]);
+ m_tilemap[0]->set_scrolly(0, m_scroll[0][1]);
+ m_tilemap[0]->draw(screen, bitmap, cliprect, 0, 0);
}
}
else
@@ -207,15 +177,15 @@ if (machine().input().code_pressed(KEYCODE_Z))
{
if (m_head_layersize[0] & 0x0002)
{
- m_tilemap_1_16x16->set_scrollx(0, m_scroll_1[0]);
- m_tilemap_1_16x16->set_scrolly(0, m_scroll_1[1]);
- m_tilemap_1_16x16->draw(screen, bitmap, cliprect, 0, 1);
+ m_tilemap_16x16[1]->set_scrollx(0, m_scroll[1][0]);
+ m_tilemap_16x16[1]->set_scrolly(0, m_scroll[1][1]);
+ m_tilemap_16x16[1]->draw(screen, bitmap, cliprect, 0, 1);
}
else
{
- m_tilemap_1->set_scrollx(0, m_scroll_1[0]);
- m_tilemap_1->set_scrolly(0, m_scroll_1[1]);
- m_tilemap_1->draw(screen, bitmap, cliprect, 0, 1);
+ m_tilemap[1]->set_scrollx(0, m_scroll[1][0]);
+ m_tilemap[1]->set_scrolly(0, m_scroll[1][1]);
+ m_tilemap[1]->draw(screen, bitmap, cliprect, 0, 1);
}
}
diff --git a/src/mame/video/flstory.cpp b/src/mame/video/flstory.cpp
index be695acd92a..8f0f811f8f5 100644
--- a/src/mame/video/flstory.cpp
+++ b/src/mame/video/flstory.cpp
@@ -110,9 +110,9 @@ WRITE8_MEMBER(flstory_state::flstory_videoram_w)
WRITE8_MEMBER(flstory_state::flstory_palette_w)
{
if (offset & 0x100)
- m_palette->write8_ext(space, (offset & 0xff) + (m_palette_bank << 8), data);
+ m_palette->write8_ext((offset & 0xff) + (m_palette_bank << 8), data);
else
- m_palette->write8(space, (offset & 0xff) + (m_palette_bank << 8), data);
+ m_palette->write8((offset & 0xff) + (m_palette_bank << 8), data);
}
READ8_MEMBER(flstory_state::flstory_palette_r)
diff --git a/src/mame/video/gaelco2.cpp b/src/mame/video/gaelco2.cpp
index a315d5103e3..3c6e5403da8 100644
--- a/src/mame/video/gaelco2.cpp
+++ b/src/mame/video/gaelco2.cpp
@@ -104,20 +104,12 @@ Multi monitor notes:
***************************************************************************/
-TILE_GET_INFO_MEMBER(gaelco2_state::get_tile_info_gaelco2_screen0)
+template<unsigned Layer>
+TILE_GET_INFO_MEMBER(gaelco2_state::get_tile_info)
{
- int data = m_videoram[(((m_vregs[0] >> 9) & 0x07)*0x2000/2) + (tile_index << 1)];
- int data2 = m_videoram[(((m_vregs[0] >> 9) & 0x07)*0x2000/2) + ((tile_index << 1) + 1)];
- int code = ((data & 0x07) << 16) | (data2 & 0xffff);
-
- SET_TILE_INFO_MEMBER(0, code, ((data >> 9) & 0x7f), TILE_FLIPXY((data >> 6) & 0x03));
-}
-
-TILE_GET_INFO_MEMBER(gaelco2_state::get_tile_info_gaelco2_screen1)
-{
- int data = m_videoram[(((m_vregs[1] >> 9) & 0x07)*0x2000/2) + (tile_index << 1)];
- int data2 = m_videoram[(((m_vregs[1] >> 9) & 0x07)*0x2000/2) + ((tile_index << 1) + 1)];
- int code = ((data & 0x07) << 16) | (data2 & 0xffff);
+ const u16 data = m_videoram[(((m_vregs[Layer] >> 9) & 0x07) * 0x2000 / 2) + (tile_index << 1)];
+ const u16 data2 = m_videoram[(((m_vregs[Layer] >> 9) & 0x07) * 0x2000 / 2) + ((tile_index << 1) + 1)];
+ const u32 code = ((data & 0x07) << 16) | (data2 & 0xffff);
SET_TILE_INFO_MEMBER(0, code, ((data >> 9) & 0x7f), TILE_FLIPXY((data >> 6) & 0x03));
}
@@ -145,22 +137,14 @@ TILE_GET_INFO_MEMBER(gaelco2_state::get_tile_info_gaelco2_screen1)
***************************************************************************/
-TILE_GET_INFO_MEMBER(gaelco2_state::get_tile_info_gaelco2_screen0_dual)
-{
- int data = m_videoram[(((m_vregs[0] >> 9) & 0x07)*0x2000/2) + (tile_index << 1)];
- int data2 = m_videoram[(((m_vregs[0] >> 9) & 0x07)*0x2000/2) + ((tile_index << 1) + 1)];
- int code = ((data & 0x07) << 16) | (data2 & 0xffff);
-
- SET_TILE_INFO_MEMBER(0, code, ((data >> 9) & 0x3f), TILE_FLIPXY((data >> 6) & 0x03));
-}
-
-TILE_GET_INFO_MEMBER(gaelco2_state::get_tile_info_gaelco2_screen1_dual)
+template<unsigned Layer>
+TILE_GET_INFO_MEMBER(gaelco2_state::get_tile_info_dual)
{
- int data = m_videoram[(((m_vregs[1] >> 9) & 0x07)*0x2000/2) + (tile_index << 1)];
- int data2 = m_videoram[(((m_vregs[1] >> 9) & 0x07)*0x2000/2) + ((tile_index << 1) + 1)];
- int code = ((data & 0x07) << 16) | (data2 & 0xffff);
+ const u16 data = m_videoram[(((m_vregs[Layer] >> 9) & 0x07) * 0x2000 / 2) + (tile_index << 1)];
+ const u16 data2 = m_videoram[(((m_vregs[Layer] >> 9) & 0x07) * 0x2000 / 2) + ((tile_index << 1) + 1)];
+ const u32 code = ((data & 0x07) << 16) | (data2 & 0xffff);
- SET_TILE_INFO_MEMBER(0, code, 0x40 + ((data >> 9) & 0x3f), TILE_FLIPXY((data >> 6) & 0x03));
+ SET_TILE_INFO_MEMBER(0, code, (Layer * 0x40) + ((data >> 9) & 0x3f), TILE_FLIPXY((data >> 6) & 0x03));
}
@@ -170,23 +154,38 @@ TILE_GET_INFO_MEMBER(gaelco2_state::get_tile_info_gaelco2_screen1_dual)
***************************************************************************/
-WRITE16_MEMBER(gaelco2_state::gaelco2_vram_w)
+void gaelco2_state::vram_w(offs_t offset, u16 data, u16 mem_mask)
{
- int pant0_start = ((m_vregs[0] >> 9) & 0x07)*0x1000;
- int pant0_end = pant0_start + 0x1000;
- int pant1_start = ((m_vregs[1] >> 9) & 0x07)*0x1000;
- int pant1_end = pant1_start + 0x1000;
+ const u32 pant0_start = ((m_vregs[0] >> 9) & 0x07) * 0x1000;
+ const u32 pant0_end = pant0_start + 0x1000;
+ const u32 pant1_start = ((m_vregs[1] >> 9) & 0x07) * 0x1000;
+ const u32 pant1_end = pant1_start + 0x1000;
COMBINE_DATA(&m_videoram[offset]);
/* tilemap 0 writes */
- if ((offset >= pant0_start) && (offset < pant0_end)){
+ if ((offset >= pant0_start) && (offset < pant0_end))
m_pant[0]->mark_tile_dirty(((offset << 1) & 0x1fff) >> 2);
- }
/* tilemap 1 writes */
- if ((offset >= pant1_start) && (offset < pant1_end)){
+ if ((offset >= pant1_start) && (offset < pant1_end))
m_pant[1]->mark_tile_dirty(((offset << 1) & 0x1fff) >> 2);
+
+}
+
+void gaelco2_state::vregs_w(offs_t offset, u16 data, u16 mem_mask)
+{
+ u16 old = m_vregs[offset];
+ data = COMBINE_DATA(&m_vregs[offset]);
+ switch (offset)
+ {
+ case 0:
+ case 1:
+ if (((old ^ data) >> 9) & 7) // tilemap ram offset
+ {
+ m_pant[offset]->mark_all_dirty();
+ }
+ break;
}
}
@@ -210,44 +209,39 @@ WRITE16_MEMBER(gaelco2_state::gaelco2_vram_w)
***************************************************************************/
-#define RGB_CHG 0x08
-#define ADJUST_COLOR(c) ((c < 0) ? 0 : ((c > 255) ? 255 : c))
+static constexpr u8 RGB_CHG = 0x08;
+static inline const u8 ADJUST_COLOR(s16 c) { return (c < 0) ? 0 : ((c > 255) ? 255 : c); }
/* table used for color adjustment */
-static const int pen_color_adjust[16] = {
- +RGB_CHG*0, -RGB_CHG*1, -RGB_CHG*2, -RGB_CHG*3, -RGB_CHG*4, -RGB_CHG*5, -RGB_CHG*6, -RGB_CHG*7,
- +RGB_CHG*8, +RGB_CHG*7, +RGB_CHG*6, +RGB_CHG*5, +RGB_CHG*4, +RGB_CHG*3, +RGB_CHG*2, +RGB_CHG*1
+static const s8 pen_color_adjust[16] = {
+ +RGB_CHG * 0, -RGB_CHG * 1, -RGB_CHG * 2, -RGB_CHG * 3, -RGB_CHG * 4, -RGB_CHG * 5, -RGB_CHG * 6, -RGB_CHG * 7,
+ +RGB_CHG * 8, +RGB_CHG * 7, +RGB_CHG * 6, +RGB_CHG * 5, +RGB_CHG * 4, +RGB_CHG * 3, +RGB_CHG * 2, +RGB_CHG * 1
};
-WRITE16_MEMBER(gaelco2_state::gaelco2_palette_w)
+void gaelco2_state::palette_w(offs_t offset, u16 data, u16 mem_mask)
{
- int i, color, r, g, b, auxr, auxg, auxb;
-
- COMBINE_DATA(&m_generic_paletteram_16[offset]);
- color = m_generic_paletteram_16[offset];
+ COMBINE_DATA(&m_paletteram[offset]);
+ const u16 color = m_paletteram[offset];
/* extract RGB components */
- r = (color >> 10) & 0x1f;
- g = (color >> 5) & 0x1f;
- b = (color >> 0) & 0x1f;
-
- r = pal5bit(r);
- g = pal5bit(g);
- b = pal5bit(b);
+ const u8 r = pal5bit(color >> 10);
+ const u8 g = pal5bit(color >> 5);
+ const u8 b = pal5bit(color & 0x1f);
/* update game palette */
m_palette->set_pen_color(4096*0 + offset, rgb_t(r, g, b));
- /* update shadow/highligh palettes */
- for (i = 1; i < 16; i++){
+ /* update shadow/highlight palettes */
+ for (int i = 1; i < 16; i++)
+ {
/* because the last palette entry is reserved for shadows and highlights, we
don't use it and that way we save some colors so the UI looks fine ;-) */
if ((offset >= 0xff0) && (offset <= 0xfff)) return;
- auxr = ADJUST_COLOR(r + pen_color_adjust[i]);
- auxg = ADJUST_COLOR(g + pen_color_adjust[i]);
- auxb = ADJUST_COLOR(b + pen_color_adjust[i]);
+ const u8 auxr = ADJUST_COLOR(r + pen_color_adjust[i]);
+ const u8 auxg = ADJUST_COLOR(g + pen_color_adjust[i]);
+ const u8 auxb = ADJUST_COLOR(b + pen_color_adjust[i]);
m_palette->set_pen_color(4096*i + offset, rgb_t(auxr, auxg, auxb));
}
@@ -264,8 +258,8 @@ VIDEO_START_MEMBER(gaelco2_state,gaelco2)
m_videoram = m_spriteram->live();
/* create tilemaps */
- m_pant[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(gaelco2_state::get_tile_info_gaelco2_screen0),this),TILEMAP_SCAN_ROWS,16,16,64,32);
- m_pant[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(gaelco2_state::get_tile_info_gaelco2_screen1),this),TILEMAP_SCAN_ROWS,16,16,64,32);
+ m_pant[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(gaelco2_state::get_tile_info<0>),this),TILEMAP_SCAN_ROWS,16,16,64,32);
+ m_pant[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(gaelco2_state::get_tile_info<1>),this),TILEMAP_SCAN_ROWS,16,16,64,32);
/* set tilemap properties */
m_pant[0]->set_transparent_pen(0);
@@ -284,8 +278,8 @@ VIDEO_START_MEMBER(gaelco2_state,gaelco2_dual)
m_videoram = m_spriteram->live();
/* create tilemaps */
- m_pant[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(gaelco2_state::get_tile_info_gaelco2_screen0_dual),this),TILEMAP_SCAN_ROWS,16,16,64,32);
- m_pant[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(gaelco2_state::get_tile_info_gaelco2_screen1_dual),this),TILEMAP_SCAN_ROWS,16,16,64,32);
+ m_pant[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(gaelco2_state::get_tile_info_dual<0>),this),TILEMAP_SCAN_ROWS,16,16,64,32);
+ m_pant[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(gaelco2_state::get_tile_info_dual<1>),this),TILEMAP_SCAN_ROWS,16,16,64,32);
/* set tilemap properties */
m_pant[0]->set_transparent_pen(0);
@@ -337,78 +331,85 @@ VIDEO_START_MEMBER(gaelco2_state,gaelco2_dual)
void gaelco2_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int mask)
{
- uint16_t *buffered_spriteram16 = m_spriteram->buffer();
- int j, x, y, ex, ey, px, py;
+ u16 *buffered_spriteram16 = m_spriteram->buffer();
gfx_element *gfx = m_gfxdecode->gfx(0);
/* get sprite ram start and end offsets */
- int start_offset = (m_vregs[1] & 0x10)*0x100;
- int end_offset = start_offset + 0x1000;
+ const u32 start_offset = (m_vregs[1] & 0x10) * 0x100;
+ const u32 end_offset = start_offset + 0x1000;
/* sprite offset is based on the visible area - this seems very kludgy */
- int spr_x_adjust = (screen.visible_area().max_x - 320 + 1) - (511 - 320 - 1) - ((m_vregs[0] >> 4) & 0x01) + m_global_spritexoff;
+ const int spr_x_adjust = (screen.visible_area().max_x - 320 + 1) - (511 - 320 - 1) - ((m_vregs[0] >> 4) & 0x01) + m_global_spritexoff;
- for (j = start_offset; j < end_offset; j += 8){
- int data = buffered_spriteram16[(j/2) + 0];
- int data2 = buffered_spriteram16[(j/2) + 1];
- int data3 = buffered_spriteram16[(j/2) + 2];
- int data4 = buffered_spriteram16[(j/2) + 3];
+ for (int j = start_offset; j < end_offset; j += 8)
+ {
+ const u16 data = buffered_spriteram16[(j / 2) + 0];
+ const u16 data2 = buffered_spriteram16[(j / 2) + 1];
+ const u16 data3 = buffered_spriteram16[(j / 2) + 2];
+ const u16 data4 = buffered_spriteram16[(j / 2) + 3];
- int sx = data3 & 0x3ff;
- int sy = data2 & 0x1ff;
+ const int sx = data3 & 0x3ff;
+ const int sy = data2 & 0x1ff;
- int xflip = data2 & 0x800;
- int yflip = data2 & 0x400;
+ const bool xflip = data2 & 0x800;
+ const bool yflip = data2 & 0x400;
- int xsize = ((data3 >> 12) & 0x0f) + 1;
- int ysize = ((data2 >> 12) & 0x0f) + 1;
+ const int xsize = ((data3 >> 12) & 0x0f) + 1;
+ const int ysize = ((data2 >> 12) & 0x0f) + 1;
if (m_dual_monitor && ((data & 0x8000) != mask)) continue;
/* if it's enabled, draw it */
- if ((data2 & 0x0200) != 0){
- for (y = 0; y < ysize; y++){
- for (x = 0; x < xsize; x++){
+ if ((data2 & 0x0200) != 0)
+ {
+ for (int y = 0; y < ysize; y++)
+ {
+ for (int x = 0; x < xsize; x++)
+ {
/* for each x,y of the sprite, fetch the sprite data */
- int data5 = buffered_spriteram16[((data4/2) + (y*xsize + x)) & 0x7fff];
- int number = ((data & 0x1ff) << 10) + (data5 & 0x0fff);
- int color = ((data >> 9) & 0x7f) + ((data5 >> 12) & 0x0f);
- int color_effect = m_dual_monitor ? ((color & 0x3f) == 0x3f) : (color == 0x7f);
+ const u16 data5 = buffered_spriteram16[((data4 / 2) + (y*xsize + x)) & 0x7fff];
+ const u32 number = ((data & 0x1ff) << 10) + (data5 & 0x0fff);
+ const u32 color = ((data >> 9) & 0x7f) + ((data5 >> 12) & 0x0f);
+ const bool color_effect = m_dual_monitor ? ((color & 0x3f) == 0x3f) : (color == 0x7f);
- ex = xflip ? (xsize - 1 - x) : x;
- ey = yflip ? (ysize - 1 - y) : y;
+ const int ex = xflip ? (xsize - 1 - x) : x;
+ const int ey = yflip ? (ysize - 1 - y) : y;
/* normal sprite, pen 0 transparent */
- if (color_effect == 0){
+ if (!color_effect)
+ {
gfx->transpen(bitmap,cliprect, number,
color, xflip, yflip,
- ((sx + ex*16) & 0x3ff) + spr_x_adjust,
- ((sy + ey*16) & 0x1ff), 0);
-
- } else { /* last palette entry is reserved for shadows and highlights */
+ ((sx + ex * 16) & 0x3ff) + spr_x_adjust,
+ ((sy + ey * 16) & 0x1ff), 0);
+ }
+ else
+ { /* last palette entry is reserved for shadows and highlights */
/* get a pointer to the current sprite's gfx data */
const uint8_t *gfx_src = gfx->get_data(number % gfx->elements());
- for (py = 0; py < gfx->height(); py++){
+ for (int py = 0; py < gfx->height(); py++)
+ {
/* get a pointer to the current line in the screen bitmap */
- int ypos = ((sy + ey*16 + py) & 0x1ff);
- uint16_t *srcy = &bitmap.pix16(ypos);
+ const int ypos = ((sy + ey * 16 + py) & 0x1ff);
+ u16 *srcy = &bitmap.pix16(ypos);
- int gfx_py = yflip ? (gfx->height() - 1 - py) : py;
+ const int gfx_py = yflip ? (gfx->height() - 1 - py) : py;
if ((ypos < cliprect.min_y) || (ypos > cliprect.max_y)) continue;
- for (px = 0; px < gfx->width(); px++){
+ for (int px = 0; px < gfx->width(); px++)
+ {
/* get current pixel */
- int xpos = (((sx + ex*16 + px) & 0x3ff) + spr_x_adjust) & 0x3ff;
- uint16_t *pixel = srcy + xpos;
- int src_color = *pixel;
+ const int xpos = (((sx + ex * 16 + px) & 0x3ff) + spr_x_adjust) & 0x3ff;
+ u16 *pixel = srcy + xpos;
+ const u16 src_color = *pixel;
- int gfx_px = xflip ? (gfx->width() - 1 - px) : px;
+ const int gfx_px = xflip ? (gfx->width() - 1 - px) : px;
/* get asociated pen for the current sprite pixel */
- int gfx_pen = gfx_src[gfx->rowbytes()*gfx_py + gfx_px];
+ const u8 gfx_pen = gfx_src[gfx->rowbytes() * gfx_py + gfx_px];
if ((gfx_pen == 0) || (gfx_pen >= 16)) continue;
@@ -431,29 +432,28 @@ void gaelco2_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, co
***************************************************************************/
-uint32_t gaelco2_state::screen_update_gaelco2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+u32 gaelco2_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- int i;
-
int xoff0 = 0x14;
int xoff1 = xoff0 - 4;
int yoff0 = 0x01;
int yoff1 = 0x01;
/* read scroll values */
- int scroll0x = m_videoram[0x2802/2] + xoff0;
- int scroll1x = m_videoram[0x2806/2] + xoff1;
- int scroll0y = m_videoram[0x2800/2] + yoff0;
- int scroll1y = m_videoram[0x2804/2] + yoff1;
+ int scroll0x = m_videoram[0x2802 / 2] + xoff0;
+ int scroll1x = m_videoram[0x2806 / 2] + xoff1;
+ int scroll0y = m_videoram[0x2800 / 2] + yoff0;
+ int scroll1y = m_videoram[0x2804 / 2] + yoff1;
/* set y scroll registers */
m_pant[0]->set_scrolly(0, scroll0y & 0x1ff);
m_pant[1]->set_scrolly(0, scroll1y & 0x1ff);
/* set x linescroll registers */
- for (i = 0; i < 512; i++){
- m_pant[0]->set_scrollx(i & 0x1ff, (m_vregs[0] & 0x8000) ? (m_videoram[(0x2000/2) + i] + xoff0) & 0x3ff : scroll0x & 0x3ff);
- m_pant[1]->set_scrollx(i & 0x1ff, (m_vregs[1] & 0x8000) ? (m_videoram[(0x2400/2) + i] + xoff1) & 0x3ff : scroll1x & 0x3ff);
+ for (int i = 0; i < 512; i++)
+ {
+ m_pant[0]->set_scrollx(i & 0x1ff, (m_vregs[0] & 0x8000) ? (m_videoram[(0x2000 / 2) + i] + xoff0) & 0x3ff : scroll0x & 0x3ff);
+ m_pant[1]->set_scrollx(i & 0x1ff, (m_vregs[1] & 0x8000) ? (m_videoram[(0x2400 / 2) + i] + xoff1) & 0x3ff : scroll1x & 0x3ff);
}
/* draw screen */
@@ -465,20 +465,18 @@ uint32_t gaelco2_state::screen_update_gaelco2(screen_device &screen, bitmap_ind1
return 0;
}
-uint32_t gaelco2_state::dual_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int index)
+u32 gaelco2_state::dual_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int index)
{
- int i;
-
int xoff0 = 0x14; // intro scenes align better with 0x13, but test screen is definitely 0x14
int xoff1 = xoff0 - 4;
int yoff0 = 0x01;
int yoff1 = 0x01;
/* read scroll values */
- int scroll0x = m_videoram[0x2802/2] + xoff0;
- int scroll1x = m_videoram[0x2806/2] + xoff1;
- int scroll0y = m_videoram[0x2800/2] + yoff0;
- int scroll1y = m_videoram[0x2804/2] + yoff1;
+ int scroll0x = m_videoram[0x2802 / 2] + xoff0;
+ int scroll1x = m_videoram[0x2806 / 2] + xoff1;
+ int scroll0y = m_videoram[0x2800 / 2] + yoff0;
+ int scroll1y = m_videoram[0x2804 / 2] + yoff1;
// if linescroll is enabled y-scroll handling changes too?
// touchgo uses 0x1f0 / 0x1ef between game and intro screens but actual scroll position needs to be different
@@ -498,13 +496,12 @@ uint32_t gaelco2_state::dual_update(screen_device &screen, bitmap_ind16 &bitmap,
m_pant[1]->set_scrolly(0, scroll1y & 0x1ff);
/* set x linescroll registers */
- for (i = 0; i < 512; i++){
- m_pant[0]->set_scrollx(i & 0x1ff, (m_vregs[0] & 0x8000) ? (m_videoram[(0x2000/2) + i] + xoff0) & 0x3ff : scroll0x & 0x3ff);
- m_pant[1]->set_scrollx(i & 0x1ff, (m_vregs[1] & 0x8000) ? (m_videoram[(0x2400/2) + i] + xoff1) & 0x3ff : scroll1x & 0x3ff);
+ for (int i = 0; i < 512; i++)
+ {
+ m_pant[0]->set_scrollx(i & 0x1ff, (m_vregs[0] & 0x8000) ? (m_videoram[(0x2000 / 2) + i] + xoff0) & 0x3ff : scroll0x & 0x3ff);
+ m_pant[1]->set_scrollx(i & 0x1ff, (m_vregs[1] & 0x8000) ? (m_videoram[(0x2400 / 2) + i] + xoff1) & 0x3ff : scroll1x & 0x3ff);
}
-
-
/* draw screen */
bitmap.fill(0, cliprect);
@@ -514,5 +511,5 @@ uint32_t gaelco2_state::dual_update(screen_device &screen, bitmap_ind16 &bitmap,
return 0;
}
-uint32_t gaelco2_state::screen_update_gaelco2_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect){ return dual_update(screen, bitmap, cliprect, 0); }
-uint32_t gaelco2_state::screen_update_gaelco2_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect){ return dual_update(screen, bitmap, cliprect, 1); }
+u32 gaelco2_state::screen_update_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect){ return dual_update(screen, bitmap, cliprect, 0); }
+u32 gaelco2_state::screen_update_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect){ return dual_update(screen, bitmap, cliprect, 1); }
diff --git a/src/mame/video/ginganin.cpp b/src/mame/video/ginganin.cpp
index b6bdb2de6eb..a477c41b80b 100644
--- a/src/mame/video/ginganin.cpp
+++ b/src/mame/video/ginganin.cpp
@@ -172,7 +172,7 @@ WRITE16_MEMBER(ginganin_state::ginganin_vregs16_w)
machine().tilemap().set_flip_all(m_flipscreen ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
break;
case 7:
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
break;
default:
diff --git a/src/mame/video/itech32.cpp b/src/mame/video/itech32.cpp
index 8a43b4baf28..a86923847d2 100644
--- a/src/mame/video/itech32.cpp
+++ b/src/mame/video/itech32.cpp
@@ -319,7 +319,7 @@ WRITE16_MEMBER(itech32_state::bloodstm_paletteram_w)
mem_mask >>= 8;
}
- m_palette->write16(space, offset, data, mem_mask);
+ m_palette->write16(offset, data, mem_mask);
}
diff --git a/src/mame/video/ladyfrog.cpp b/src/mame/video/ladyfrog.cpp
index d36c5e72408..f0991b0e39e 100644
--- a/src/mame/video/ladyfrog.cpp
+++ b/src/mame/video/ladyfrog.cpp
@@ -45,9 +45,9 @@ READ8_MEMBER(ladyfrog_state::ladyfrog_videoram_r)
WRITE8_MEMBER(ladyfrog_state::ladyfrog_palette_w)
{
if (offset & 0x100)
- m_palette->write8_ext(space, (offset & 0xff) + (m_palette_bank << 8), data);
+ m_palette->write8_ext((offset & 0xff) + (m_palette_bank << 8), data);
else
- m_palette->write8(space, (offset & 0xff) + (m_palette_bank << 8), data);
+ m_palette->write8((offset & 0xff) + (m_palette_bank << 8), data);
}
READ8_MEMBER(ladyfrog_state::ladyfrog_palette_r)
diff --git a/src/mame/video/liberate.cpp b/src/mame/video/liberate.cpp
index 35b1fbf6f57..4bd3e8d580b 100644
--- a/src/mame/video/liberate.cpp
+++ b/src/mame/video/liberate.cpp
@@ -126,7 +126,7 @@ WRITE8_MEMBER(liberate_state::deco16_io_w)
m_maincpu->set_input_line(DECO16_IRQ_LINE, CLEAR_LINE);
break;
case 9: /* Sound */
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
break;
}
@@ -154,7 +154,7 @@ WRITE8_MEMBER(liberate_state::prosoccr_io_w)
m_maincpu->set_input_line(DECO16_IRQ_LINE, CLEAR_LINE);
break;
case 9: /* Sound */
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
break;
}
@@ -173,7 +173,7 @@ WRITE8_MEMBER(liberate_state::prosport_io_w)
m_back_tilemap->mark_all_dirty();
break;
case 2: /* Sound */
- m_soundlatch->write(space, 0, data);
+ m_soundlatch->write(data);
m_audiocpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
break;
case 4: /* Irq ack */
diff --git a/src/mame/video/m92.cpp b/src/mame/video/m92.cpp
index cd650228b24..3e4c6475ef8 100644
--- a/src/mame/video/m92.cpp
+++ b/src/mame/video/m92.cpp
@@ -140,7 +140,7 @@ READ16_MEMBER(m92_state::paletteram_r)
WRITE16_MEMBER(m92_state::paletteram_w)
{
- m_palette->write16(space, offset | (m_palette_bank << 10), data, mem_mask);
+ m_palette->write16(offset | (m_palette_bank << 10), data, mem_mask);
}
/*****************************************************************************/
diff --git a/src/mame/video/megasys1.cpp b/src/mame/video/megasys1.cpp
index ace59ad82cd..18868e4a545 100644
--- a/src/mame/video/megasys1.cpp
+++ b/src/mame/video/megasys1.cpp
@@ -271,20 +271,20 @@ WRITE16_MEMBER(megasys1_state::screen_flag_w)
WRITE16_MEMBER(megasys1_state::soundlatch_w)
{
- m_soundlatch[0]->write(space, 0, data, mem_mask);
+ m_soundlatch[0]->write(data);
m_audiocpu->set_input_line(4, HOLD_LINE);
}
WRITE16_MEMBER(megasys1_state::soundlatch_z_w)
{
- m_soundlatch[0]->write(space, 0, data & 0xff);
+ m_soundlatch[0]->write(data & 0xff);
m_audiocpu->set_input_line(5, HOLD_LINE);
}
WRITE16_MEMBER(megasys1_state::soundlatch_c_w)
{
// Cybattler reads sound latch on irq 2
- m_soundlatch[0]->write(space, 0, data, mem_mask);
+ m_soundlatch[0]->write(data);
m_audiocpu->set_input_line(2, HOLD_LINE);
}
diff --git a/src/mame/video/midtunit.cpp b/src/mame/video/midtunit.cpp
index 6fcafa2f232..303e374f5fe 100644
--- a/src/mame/video/midtunit.cpp
+++ b/src/mame/video/midtunit.cpp
@@ -280,13 +280,13 @@ READ16_MEMBER(midwunit_video_device::midwunit_control_r)
WRITE16_MEMBER(midxunit_video_device::midxunit_paletteram_w)
{
if (!(offset & 1))
- m_palette->write16(space, offset / 2, data, mem_mask);
+ m_palette->write16(offset / 2, data, mem_mask);
}
READ16_MEMBER(midxunit_video_device::midxunit_paletteram_r)
{
- return m_palette->read16(space, offset / 2, mem_mask);
+ return m_palette->read16(offset / 2);
}
diff --git a/src/mame/video/midtview.ipp b/src/mame/video/midtview.ipp
index 02da31bf928..046a193e8d3 100644
--- a/src/mame/video/midtview.ipp
+++ b/src/mame/video/midtview.ipp
@@ -45,7 +45,7 @@ void midtunit_video_device::device_add_mconfig(machine_config &config)
debugscreen.set_raw(8000000 * 2, 506, 100, 500, 289, 20, 274);
debugscreen.set_screen_update(FUNC(midtunit_video_device::debug_screen_update));
- PALETTE(config, m_debug_palette, 32768).set_format(PALETTE_FORMAT_xRRRRRGGGGGBBBBB);
+ PALETTE(config, m_debug_palette).set_format(palette_device::xRGB_555, 32768);
}
void midwunit_video_device::device_add_mconfig(machine_config &config)
@@ -54,7 +54,7 @@ void midwunit_video_device::device_add_mconfig(machine_config &config)
debugscreen.set_raw(8000000, 506, 101, 501, 289, 20, 274);
debugscreen.set_screen_update(FUNC(midwunit_video_device::debug_screen_update));
- PALETTE(config, m_debug_palette, 32768).set_format(PALETTE_FORMAT_xRRRRRGGGGGBBBBB);
+ PALETTE(config, m_debug_palette).set_format(palette_device::xRGB_555, 32768);
}
void midtunit_video_device::do_debug_blit()
diff --git a/src/mame/video/mitchell.cpp b/src/mame/video/mitchell.cpp
index b92a66dd096..92c95ecc91f 100644
--- a/src/mame/video/mitchell.cpp
+++ b/src/mame/video/mitchell.cpp
@@ -241,7 +241,7 @@ logerror("PC %04x: pang_gfxctrl_w %02x\n",m_maincpu->pc(),data);
WRITE8_MEMBER(mitchell_state::pang_paletteram_w)
{
- m_palette->write8(space, offset + (m_paletteram_bank ? 0x800 : 0x000), data);
+ m_palette->write8(offset + (m_paletteram_bank ? 0x800 : 0x000), data);
}
READ8_MEMBER(mitchell_state::pang_paletteram_r)
diff --git a/src/mame/video/namcos1.cpp b/src/mame/video/namcos1.cpp
index af5c91be3a1..ccabf3c0ca9 100644
--- a/src/mame/video/namcos1.cpp
+++ b/src/mame/video/namcos1.cpp
@@ -53,7 +53,7 @@ Namco System 1 Video Hardware
***************************************************************************/
-void namcos1_state::TilemapCB(uint16_t code, int *tile, int *mask)
+void namcos1_state::TilemapCB(u16 code, int *tile, int *mask)
{
code &= 0x3fff;
*tile = code;
@@ -82,7 +82,7 @@ void namcos1_state::video_start()
for (i = 0x0800;i < 0x1000;i++)
m_c116->shadow_table()[i] = i + 0x0800;
- m_copy_sprites = 0;
+ m_copy_sprites = false;
save_item(NAME(m_copy_sprites));
}
@@ -95,7 +95,7 @@ void namcos1_state::video_start()
***************************************************************************/
-WRITE8_MEMBER( namcos1_state::spriteram_w )
+void namcos1_state::spriteram_w(offs_t offset, u8 data)
{
/* 0000-07ff work ram */
/* 0800-0fff sprite ram */
@@ -103,7 +103,7 @@ WRITE8_MEMBER( namcos1_state::spriteram_w )
/* a write to this offset tells the sprite chip to buffer the sprite list */
if (offset == 0x0ff2)
- m_copy_sprites = 1;
+ m_copy_sprites = true;
}
@@ -136,32 +136,32 @@ sprite format:
void namcos1_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- uint8_t *spriteram = m_spriteram + 0x800;
- const uint8_t *source = &spriteram[0x800-0x20]; /* the last is NOT a sprite */
- const uint8_t *finish = &spriteram[0];
+ u8 *spriteram = m_spriteram + 0x800;
+ const u8 *source = &spriteram[0x800-0x20]; /* the last is NOT a sprite */
+ const u8 *finish = &spriteram[0];
gfx_element *gfx = m_gfxdecode->gfx(0);
- int sprite_xoffs = spriteram[0x07f5] + ((spriteram[0x07f4] & 1) << 8);
- int sprite_yoffs = spriteram[0x07f7];
+ const int sprite_xoffs = spriteram[0x07f5] + ((spriteram[0x07f4] & 1) << 8);
+ const int sprite_yoffs = spriteram[0x07f7];
while (source >= finish)
{
static const int sprite_size[4] = { 16, 8, 32, 4 };
- int attr1 = source[10];
- int attr2 = source[14];
- int color = source[12];
+ const u8 attr1 = source[10];
+ const u8 attr2 = source[14];
+ u32 color = source[12];
int flipx = (attr1 & 0x20) >> 5;
int flipy = (attr2 & 0x01);
- int sizex = sprite_size[(attr1 & 0xc0) >> 6];
- int sizey = sprite_size[(attr2 & 0x06) >> 1];
- int tx = (attr1 & 0x18) & (~(sizex-1));
- int ty = (attr2 & 0x18) & (~(sizey-1));
+ const u16 sizex = sprite_size[(attr1 & 0xc0) >> 6];
+ const u16 sizey = sprite_size[(attr2 & 0x06) >> 1];
+ const u16 tx = (attr1 & 0x18) & (~(sizex - 1));
+ const u16 ty = (attr2 & 0x18) & (~(sizey - 1));
int sx = source[13] + ((color & 0x01) << 8);
int sy = -source[15] - sizey;
- int sprite = source[11];
- int sprite_bank = attr1 & 7;
- int priority = (source[14] & 0xe0) >> 5;
- int pri_mask = (0xff << (priority + 1)) & 0xff;
+ u32 sprite = source[11];
+ const u32 sprite_bank = attr1 & 7;
+ const int priority = (source[14] & 0xe0) >> 5;
+ const u8 pri_mask = (0xff << (priority + 1)) & 0xff;
sprite += sprite_bank * 256;
color = color >> 1;
@@ -205,7 +205,7 @@ void namcos1_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, co
-uint32_t namcos1_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+u32 namcos1_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
int i;
rectangle new_clip = cliprect;
@@ -252,16 +252,15 @@ WRITE_LINE_MEMBER(namcos1_state::screen_vblank)
{
if (m_copy_sprites)
{
- uint8_t *spriteram = m_spriteram + 0x800;
- int i,j;
+ u8 *spriteram = m_spriteram + 0x800;
- for (i = 0;i < 0x800;i += 16)
+ for (int i = 0; i < 0x800; i += 16)
{
- for (j = 10;j < 16;j++)
- spriteram[i+j] = spriteram[i+j - 6];
+ for (int j = 10; j < 16; j++)
+ spriteram[i + j] = spriteram[i + j - 6];
}
- m_copy_sprites = 0;
+ m_copy_sprites = false;
}
m_maincpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE);
m_subcpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE);
diff --git a/src/mame/video/nova2001.cpp b/src/mame/video/nova2001.cpp
index 748dff44a36..4345133c3e4 100644
--- a/src/mame/video/nova2001.cpp
+++ b/src/mame/video/nova2001.cpp
@@ -47,18 +47,18 @@ rgb_t nova2001_state::BBGGRRII(u32 raw)
WRITE8_MEMBER(nova2001_state::paletteram_w)
{
- m_palette->write8(space, offset, data);
+ m_palette->write8(offset, data);
// expand the sprite palette to full length
if (offset < 16)
{
- m_palette->write8(space, 0x200 + offset * 16 + 1, data);
+ m_palette->write8(0x200 + offset * 16 + 1, data);
if (offset != 1)
{
for (int i = 0; i < 16; i++)
{
- m_palette->write8(space, 0x200 + offset + i * 16, data);
+ m_palette->write8(0x200 + offset + i * 16, data);
}
}
}
diff --git a/src/mame/video/nycaptor.cpp b/src/mame/video/nycaptor.cpp
index 5ac593f439c..ae519916d0f 100644
--- a/src/mame/video/nycaptor.cpp
+++ b/src/mame/video/nycaptor.cpp
@@ -86,9 +86,9 @@ WRITE8_MEMBER(nycaptor_state::nycaptor_videoram_w)
WRITE8_MEMBER(nycaptor_state::nycaptor_palette_w)
{
if (offset & 0x100)
- m_palette->write8_ext(space, (offset & 0xff) + (m_palette_bank << 8), data);
+ m_palette->write8_ext((offset & 0xff) + (m_palette_bank << 8), data);
else
- m_palette->write8(space, (offset & 0xff) + (m_palette_bank << 8), data);
+ m_palette->write8((offset & 0xff) + (m_palette_bank << 8), data);
}
READ8_MEMBER(nycaptor_state::nycaptor_palette_r)
diff --git a/src/mame/video/oneshot.cpp b/src/mame/video/oneshot.cpp
index b1a0a7f212a..76646953b82 100644
--- a/src/mame/video/oneshot.cpp
+++ b/src/mame/video/oneshot.cpp
@@ -7,28 +7,28 @@
/* bg tilemap */
-TILE_GET_INFO_MEMBER(oneshot_state::get_oneshot_bg_tile_info)
+TILE_GET_INFO_MEMBER(oneshot_state::get_bg_tile_info)
{
- int tileno = m_bg_videoram[tile_index * 2 + 1];
+ const u32 tileno = m_bg_videoram[tile_index * 2 + 1];
SET_TILE_INFO_MEMBER(0, tileno, 0, 0);
}
-WRITE16_MEMBER(oneshot_state::oneshot_bg_videoram_w)
+void oneshot_state::bg_videoram_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_bg_videoram[offset]);
m_bg_tilemap->mark_tile_dirty(offset / 2);
}
/* mid tilemap */
-TILE_GET_INFO_MEMBER(oneshot_state::get_oneshot_mid_tile_info)
+TILE_GET_INFO_MEMBER(oneshot_state::get_mid_tile_info)
{
- int tileno = m_mid_videoram[tile_index * 2 + 1];
+ const u32 tileno = m_mid_videoram[tile_index * 2 + 1];
SET_TILE_INFO_MEMBER(0, tileno, 2, 0);
}
-WRITE16_MEMBER(oneshot_state::oneshot_mid_videoram_w)
+void oneshot_state::mid_videoram_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_mid_videoram[offset]);
m_mid_tilemap->mark_tile_dirty(offset / 2);
@@ -36,14 +36,14 @@ WRITE16_MEMBER(oneshot_state::oneshot_mid_videoram_w)
/* fg tilemap */
-TILE_GET_INFO_MEMBER(oneshot_state::get_oneshot_fg_tile_info)
+TILE_GET_INFO_MEMBER(oneshot_state::get_fg_tile_info)
{
- int tileno = m_fg_videoram[tile_index * 2 + 1];
+ const u32 tileno = m_fg_videoram[tile_index * 2 + 1];
SET_TILE_INFO_MEMBER(0, tileno, 3, 0);
}
-WRITE16_MEMBER(oneshot_state::oneshot_fg_videoram_w)
+void oneshot_state::fg_videoram_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_fg_videoram[offset]);
m_fg_tilemap->mark_tile_dirty(offset / 2);
@@ -51,22 +51,22 @@ WRITE16_MEMBER(oneshot_state::oneshot_fg_videoram_w)
void oneshot_state::video_start()
{
- m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(oneshot_state::get_oneshot_bg_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32);
- m_mid_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(oneshot_state::get_oneshot_mid_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32);
- m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(oneshot_state::get_oneshot_fg_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32);
+ m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(oneshot_state::get_bg_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32);
+ m_mid_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(oneshot_state::get_mid_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32);
+ m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(oneshot_state::get_fg_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32);
m_bg_tilemap->set_transparent_pen(0);
m_mid_tilemap->set_transparent_pen(0);
m_fg_tilemap->set_transparent_pen(0);
}
-void oneshot_state::draw_crosshairs( bitmap_ind16 &bitmap, const rectangle &cliprect )
+void oneshot_state::draw_crosshairs()
{
//int xpos,ypos;
/* get gun raw coordinates (player 1) */
- m_gun_x_p1 = (ioport("LIGHT0_X")->read() & 0xff) * 320 / 256;
- m_gun_y_p1 = (ioport("LIGHT0_Y")->read() & 0xff) * 240 / 256;
+ m_gun_x_p1 = (m_io_lightgun_x[0]->read() & 0xff) * 320 / 256;
+ m_gun_y_p1 = (m_io_lightgun_y[0]->read() & 0xff) * 240 / 256;
/* compute the coordinates for drawing (from routine at 0x009ab0) */
//xpos = m_gun_x_p1;
@@ -80,8 +80,8 @@ void oneshot_state::draw_crosshairs( bitmap_ind16 &bitmap, const rectangle &clip
/* get gun raw coordinates (player 2) */
- m_gun_x_p2 = (ioport("LIGHT1_X")->read() & 0xff) * 320 / 256;
- m_gun_y_p2 = (ioport("LIGHT1_Y")->read() & 0xff) * 240 / 256;
+ m_gun_x_p2 = (m_io_lightgun_x[1]->read() & 0xff) * 320 / 256;
+ m_gun_y_p2 = (m_io_lightgun_y[1]->read() & 0xff) * 240 / 256;
/* compute the coordinates for drawing (from routine at 0x009b6e) */
//xpos = m_gun_x_p2;
@@ -92,37 +92,41 @@ void oneshot_state::draw_crosshairs( bitmap_ind16 &bitmap, const rectangle &clip
m_gun_x_p2 = 0;
}
-void oneshot_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
+void oneshot_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- const uint16_t *source = m_sprites;
- const uint16_t *finish = source + (0x1000 / 2);
+ const u16 *source = m_spriteram;
+ const u16 *finish = source + (0x1000 / 2);
gfx_element *gfx = m_gfxdecode->gfx(1);
- int xpos, ypos;
-
while (source < finish)
{
- int blockx, blocky;
- int num = source[1] & 0xffff;
- int xsize = (source[2] & 0x000f) + 1;
- int ysize = (source[3] & 0x000f) + 1;
+ const u16 attr = source[0];
- ypos = source[3] & 0xff80;
- xpos = source[2] & 0xff80;
+ if (attr & 0x0001) // end of sprites
+ break;
- ypos = ypos >> 7;
- xpos = xpos >> 7;
+ if (!(attr & 0x8000)) // visible bit
+ {
+ source += 0x4;
+ continue;
+ }
+ const u32 num = source[1] & 0xffff;
+ const int xsize = (source[2] & 0x000f) + 1;
+ const int ysize = (source[3] & 0x000f) + 1;
- if (source[0] == 0x0001)
- break;
+ int ypos = source[3] & 0xff80;
+ int xpos = source[2] & 0xff80;
+
+ ypos = ypos >> 7;
+ xpos = xpos >> 7;
xpos -= 8;
ypos -= 6;
- for (blockx = 0; blockx < xsize; blockx++)
+ for (int blockx = 0; blockx < xsize; blockx++)
{
- for (blocky = 0; blocky < ysize; blocky++)
+ for (int blocky = 0; blocky < ysize; blocky++)
{
gfx->transpen(
bitmap,
@@ -132,7 +136,6 @@ void oneshot_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprec
0,0,
xpos + blockx * 8, ypos + blocky * 8, 0);
-
gfx->transpen(
bitmap,
cliprect,
@@ -144,10 +147,9 @@ void oneshot_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprec
}
source += 0x4;
}
-
}
-uint32_t oneshot_state::screen_update_oneshot(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+u32 oneshot_state::screen_update_oneshot(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
bitmap.fill(m_palette->black_pen(), cliprect);
@@ -158,11 +160,11 @@ uint32_t oneshot_state::screen_update_oneshot(screen_device &screen, bitmap_ind1
m_mid_tilemap->draw(screen, bitmap, cliprect, 0, 0);
draw_sprites(bitmap, cliprect);
m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
- draw_crosshairs(bitmap, cliprect);
+ draw_crosshairs();
return 0;
}
-uint32_t oneshot_state::screen_update_maddonna(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+u32 oneshot_state::screen_update_maddonna(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
bitmap.fill(m_palette->black_pen(), cliprect);
@@ -176,3 +178,19 @@ uint32_t oneshot_state::screen_update_maddonna(screen_device &screen, bitmap_ind
// popmessage ("%04x %04x %04x %04x %04x %04x %04x %04x", m_scroll[0], m_scroll[1], m_scroll[2], m_scroll[3], m_scroll[4], m_scroll[5], m_scroll[6], m_scroll[7]);
return 0;
}
+
+// why are the layers in a different order?
+u32 oneshot_state::screen_update_komocomo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ bitmap.fill(m_palette->black_pen(), cliprect);
+
+ m_mid_tilemap->set_scrolly(0, m_scroll[1]); // other registers aren't used so we don't know which layers they relate to
+
+ m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
+ m_mid_tilemap->draw(screen, bitmap, cliprect, 0, 0);
+ m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
+ draw_sprites(bitmap, cliprect);
+
+// popmessage ("%04x %04x %04x %04x %04x %04x %04x %04x", m_scroll[0], m_scroll[1], m_scroll[2], m_scroll[3], m_scroll[4], m_scroll[5], m_scroll[6], m_scroll[7]);
+ return 0;
+}
diff --git a/src/mame/video/psikyosh.cpp b/src/mame/video/psikyosh.cpp
index 7c8d5d39636..a0f87ca5676 100644
--- a/src/mame/video/psikyosh.cpp
+++ b/src/mame/video/psikyosh.cpp
@@ -2,7 +2,7 @@
// copyright-holders:David Haywood, Paul Priest
/*
Psikyo PS6406B (PS3v1/PS5/PS5v2):
-See src/drivers/psikyosh.c for more info
+See src/mame/drivers/psikyosh.cpp for more info
Hardware is extremely flexible (and luckily underused, although we now have a relatively complete implementation :). Many effects are subtle (e.g. fades, scanline effects).
diff --git a/src/mame/video/seta2.cpp b/src/mame/video/seta2.cpp
index 8114ec08b43..d1aaef6758b 100644
--- a/src/mame/video/seta2.cpp
+++ b/src/mame/video/seta2.cpp
@@ -621,11 +621,12 @@ void seta2_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
TIMER_CALLBACK_MEMBER(seta2_state::raster_timer_done)
{
- if (m_tmp68301)
+ auto *tmp68301 = dynamic_cast<tmp68301_device *>(m_maincpu.target());
+ if (tmp68301)
{
if (m_rasterenabled & 1)
{
- m_tmp68301->external_interrupt_1();
+ tmp68301->external_interrupt_1();
logerror("external int (vpos is %d)\n", m_screen->vpos());
m_screen->update_partial(m_screen->vpos() - 1);
}
diff --git a/src/mame/video/system1.cpp b/src/mame/video/system1.cpp
index d6c3e0a3bdc..745bd7148da 100644
--- a/src/mame/video/system1.cpp
+++ b/src/mame/video/system1.cpp
@@ -340,7 +340,7 @@ WRITE8_MEMBER(system1_state::system1_paletteram_w)
}
else
{
- m_palette->write8(space, offset, data);
+ m_palette->write8(offset, data);
}
}
diff --git a/src/mame/video/toaplan1.cpp b/src/mame/video/toaplan1.cpp
index 4ef0d39aed4..7a1e58c029d 100644
--- a/src/mame/video/toaplan1.cpp
+++ b/src/mame/video/toaplan1.cpp
@@ -137,67 +137,20 @@ Abnormalities:
***************************************************************************/
-TILE_GET_INFO_MEMBER(toaplan1_state::get_pf1_tile_info)
+template<unsigned Layer>
+TILE_GET_INFO_MEMBER(toaplan1_state::get_tile_info)
{
int color, tile_number, attrib;
- tile_number = m_pf1_tilevram16[2*tile_index+1] & 0x7fff;
- attrib = m_pf1_tilevram16[2*tile_index];
+ tile_number = m_tilevram[Layer][2 * tile_index + 1] & 0x7fff;
+ attrib = m_tilevram[Layer][2 * tile_index];
color = attrib & 0x3f;
SET_TILE_INFO_MEMBER(0,
tile_number,
color,
0);
// "disabled" tiles are behind everything else
- if (m_pf1_tilevram16[2*tile_index+1] & 0x8000) tileinfo.category = 16;
- else tileinfo.category = (attrib & 0xf000) >> 12;
-}
-
-TILE_GET_INFO_MEMBER(toaplan1_state::get_pf2_tile_info)
-{
- int color, tile_number, attrib;
-
- tile_number = m_pf2_tilevram16[2*tile_index+1] & 0x7fff;
- attrib = m_pf2_tilevram16[2*tile_index];
- color = attrib & 0x3f;
- SET_TILE_INFO_MEMBER(0,
- tile_number,
- color,
- 0);
- // "disabled" tiles are behind everything else
- if (m_pf2_tilevram16[2*tile_index+1] & 0x8000) tileinfo.category = 16;
- else tileinfo.category = (attrib & 0xf000) >> 12;
-}
-
-TILE_GET_INFO_MEMBER(toaplan1_state::get_pf3_tile_info)
-{
- int color, tile_number, attrib;
-
- tile_number = m_pf3_tilevram16[2*tile_index+1] & 0x7fff;
- attrib = m_pf3_tilevram16[2*tile_index];
- color = attrib & 0x3f;
- SET_TILE_INFO_MEMBER(0,
- tile_number,
- color,
- 0);
- // "disabled" tiles are behind everything else
- if (m_pf3_tilevram16[2*tile_index+1] & 0x8000) tileinfo.category = 16;
- else tileinfo.category = (attrib & 0xf000) >> 12;
-}
-
-TILE_GET_INFO_MEMBER(toaplan1_state::get_pf4_tile_info)
-{
- int color, tile_number, attrib;
-
- tile_number = m_pf4_tilevram16[2*tile_index+1] & 0x7fff;
- attrib = m_pf4_tilevram16[2*tile_index];
- color = attrib & 0x3f;
- SET_TILE_INFO_MEMBER(0,
- tile_number,
- color,
- 0);
- // "disabled" tiles are behind everything else
- if (m_pf4_tilevram16[2*tile_index+1] & 0x8000) tileinfo.category = 16;
+ if (m_tilevram[Layer][2 * tile_index + 1] & 0x8000) tileinfo.category = 16;
else tileinfo.category = (attrib & 0xf000) >> 12;
}
@@ -207,62 +160,55 @@ TILE_GET_INFO_MEMBER(toaplan1_state::get_pf4_tile_info)
***************************************************************************/
-void toaplan1_state::toaplan1_create_tilemaps()
+void toaplan1_state::create_tilemaps()
{
- m_pf1_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(toaplan1_state::get_pf1_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
- m_pf2_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(toaplan1_state::get_pf2_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
- m_pf3_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(toaplan1_state::get_pf3_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
- m_pf4_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(toaplan1_state::get_pf4_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
+ m_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(toaplan1_state::get_tile_info<0>),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
+ m_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(toaplan1_state::get_tile_info<1>),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
+ m_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(toaplan1_state::get_tile_info<2>),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
+ m_tilemap[3] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(toaplan1_state::get_tile_info<3>),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
- m_pf1_tilemap->set_transparent_pen(0);
- m_pf2_tilemap->set_transparent_pen(0);
- m_pf3_tilemap->set_transparent_pen(0);
- m_pf4_tilemap->set_transparent_pen(0);
+ m_tilemap[0]->set_transparent_pen(0);
+ m_tilemap[1]->set_transparent_pen(0);
+ m_tilemap[2]->set_transparent_pen(0);
+ m_tilemap[3]->set_transparent_pen(0);
}
-void toaplan1_state::toaplan1_vram_alloc()
+void toaplan1_state::vram_alloc()
{
- m_pf1_tilevram16 = make_unique_clear<uint16_t[]>(TOAPLAN1_TILEVRAM_SIZE/2);
- m_pf2_tilevram16 = make_unique_clear<uint16_t[]>(TOAPLAN1_TILEVRAM_SIZE/2);
- m_pf3_tilevram16 = make_unique_clear<uint16_t[]>(TOAPLAN1_TILEVRAM_SIZE/2);
- m_pf4_tilevram16 = make_unique_clear<uint16_t[]>(TOAPLAN1_TILEVRAM_SIZE/2);
-
- save_pointer(NAME(m_pf1_tilevram16), TOAPLAN1_TILEVRAM_SIZE/2);
- save_pointer(NAME(m_pf2_tilevram16), TOAPLAN1_TILEVRAM_SIZE/2);
- save_pointer(NAME(m_pf3_tilevram16), TOAPLAN1_TILEVRAM_SIZE/2);
- save_pointer(NAME(m_pf4_tilevram16), TOAPLAN1_TILEVRAM_SIZE/2);
+ for (int i = 0; i < 4; i++)
+ {
+ m_tilevram[i] = make_unique_clear<u16[]>(TOAPLAN1_TILEVRAM_SIZE / 2);
+ save_pointer(NAME(m_tilevram[i]), TOAPLAN1_TILEVRAM_SIZE / 2, i);
+ }
#ifdef MAME_DEBUG
- m_display_pf1 = 1;
- m_display_pf2 = 1;
- m_display_pf3 = 1;
- m_display_pf4 = 1;
+ m_display_pf[0] = 1;
+ m_display_pf[1] = 1;
+ m_display_pf[2] = 1;
+ m_display_pf[3] = 1;
m_displog = 0;
#endif
}
-void toaplan1_state::toaplan1_spritevram_alloc()
+void toaplan1_state::spritevram_alloc()
{
- m_spriteram.allocate(TOAPLAN1_SPRITERAM_SIZE/2);
- m_buffered_spriteram = make_unique_clear<uint16_t[]>(TOAPLAN1_SPRITERAM_SIZE/2);
- m_spritesizeram16 = make_unique_clear<uint16_t[]>(TOAPLAN1_SPRITESIZERAM_SIZE/2);
- m_buffered_spritesizeram16 = make_unique_clear<uint16_t[]>(TOAPLAN1_SPRITESIZERAM_SIZE/2);
+ m_spriteram.allocate(TOAPLAN1_SPRITERAM_SIZE / 2);
+ m_buffered_spriteram = make_unique_clear<u16[]>(TOAPLAN1_SPRITERAM_SIZE / 2);
+ m_spritesizeram = make_unique_clear<u16[]>(TOAPLAN1_SPRITESIZERAM_SIZE / 2);
+ m_buffered_spritesizeram = make_unique_clear<u16[]>(TOAPLAN1_SPRITESIZERAM_SIZE / 2);
- save_pointer(NAME(m_buffered_spriteram), TOAPLAN1_SPRITERAM_SIZE/2);
- save_pointer(NAME(m_spritesizeram16), TOAPLAN1_SPRITESIZERAM_SIZE/2);
- save_pointer(NAME(m_buffered_spritesizeram16), TOAPLAN1_SPRITESIZERAM_SIZE/2);
+ save_pointer(NAME(m_buffered_spriteram), TOAPLAN1_SPRITERAM_SIZE / 2);
+ save_pointer(NAME(m_spritesizeram), TOAPLAN1_SPRITESIZERAM_SIZE / 2);
+ save_pointer(NAME(m_buffered_spritesizeram), TOAPLAN1_SPRITESIZERAM_SIZE / 2);
}
-void toaplan1_state::toaplan1_set_scrolls()
+void toaplan1_state::set_scrolls()
{
- m_pf1_tilemap->set_scrollx(0, (m_pf1_scrollx >> 7) - m_tiles_offsetx);
- m_pf2_tilemap->set_scrollx(0, (m_pf2_scrollx >> 7) - m_tiles_offsetx);
- m_pf3_tilemap->set_scrollx(0, (m_pf3_scrollx >> 7) - m_tiles_offsetx);
- m_pf4_tilemap->set_scrollx(0, (m_pf4_scrollx >> 7) - m_tiles_offsetx);
- m_pf1_tilemap->set_scrolly(0, (m_pf1_scrolly >> 7) - m_tiles_offsety);
- m_pf2_tilemap->set_scrolly(0, (m_pf2_scrolly >> 7) - m_tiles_offsety);
- m_pf3_tilemap->set_scrolly(0, (m_pf3_scrolly >> 7) - m_tiles_offsety);
- m_pf4_tilemap->set_scrolly(0, (m_pf4_scrolly >> 7) - m_tiles_offsety);
+ for (int i = 0; i < 4; i++)
+ {
+ m_tilemap[i]->set_scrollx(0, (m_scrollx[i] >> 7) - m_tiles_offsetx);
+ m_tilemap[i]->set_scrolly(0, (m_scrolly[i] >> 7) - m_tiles_offsety);
+ }
}
void toaplan1_state::register_common()
@@ -270,14 +216,8 @@ void toaplan1_state::register_common()
save_item(NAME(m_bcu_flipscreen));
save_item(NAME(m_fcu_flipscreen));
- save_item(NAME(m_pf1_scrollx));
- save_item(NAME(m_pf1_scrolly));
- save_item(NAME(m_pf2_scrollx));
- save_item(NAME(m_pf2_scrolly));
- save_item(NAME(m_pf3_scrollx));
- save_item(NAME(m_pf3_scrolly));
- save_item(NAME(m_pf4_scrollx));
- save_item(NAME(m_pf4_scrolly));
+ save_item(NAME(m_scrollx));
+ save_item(NAME(m_scrolly));
save_item(NAME(m_tiles_offsetx));
save_item(NAME(m_tiles_offsety));
@@ -286,25 +226,25 @@ void toaplan1_state::register_common()
}
-VIDEO_START_MEMBER(toaplan1_rallybik_state,rallybik)
+void toaplan1_rallybik_state::video_start()
{
m_spritegen->alloc_sprite_bitmap(*m_screen);
m_spritegen->gfx(0)->set_colorbase(64*16);
- toaplan1_create_tilemaps();
- toaplan1_vram_alloc();
+ create_tilemaps();
+ vram_alloc();
- m_buffered_spriteram = make_unique_clear<uint16_t[]>(m_spriteram.bytes()/2);
- save_pointer(NAME(m_buffered_spriteram), m_spriteram.bytes()/2);
+ m_buffered_spriteram = make_unique_clear<u16[]>(m_spriteram.bytes() / 2);
+ save_pointer(NAME(m_buffered_spriteram), m_spriteram.bytes() / 2);
- m_pf1_tilemap->set_scrolldx(-0x00d-6, -0x80+6);
- m_pf2_tilemap->set_scrolldx(-0x00d-4, -0x80+4);
- m_pf3_tilemap->set_scrolldx(-0x00d-2, -0x80+2);
- m_pf4_tilemap->set_scrolldx(-0x00d-0, -0x80+0);
- m_pf1_tilemap->set_scrolldy(-0x111, 0x8);
- m_pf2_tilemap->set_scrolldy(-0x111, 0x8);
- m_pf3_tilemap->set_scrolldy(-0x111, 0x8);
- m_pf4_tilemap->set_scrolldy(-0x111, 0x8);
+ m_tilemap[0]->set_scrolldx(-0x00d - 6, -0x80 + 6);
+ m_tilemap[1]->set_scrolldx(-0x00d - 4, -0x80 + 4);
+ m_tilemap[2]->set_scrolldx(-0x00d - 2, -0x80 + 2);
+ m_tilemap[3]->set_scrolldx(-0x00d - 0, -0x80 + 0);
+ m_tilemap[0]->set_scrolldy(-0x111, 0x8);
+ m_tilemap[1]->set_scrolldy(-0x111, 0x8);
+ m_tilemap[2]->set_scrolldy(-0x111, 0x8);
+ m_tilemap[3]->set_scrolldy(-0x111, 0x8);
m_bcu_flipscreen = -1;
m_fcu_flipscreen = 0;
@@ -312,20 +252,20 @@ VIDEO_START_MEMBER(toaplan1_rallybik_state,rallybik)
register_common();
}
-VIDEO_START_MEMBER(toaplan1_state,toaplan1)
+void toaplan1_state::video_start()
{
- toaplan1_create_tilemaps();
- toaplan1_vram_alloc();
- toaplan1_spritevram_alloc();
+ create_tilemaps();
+ vram_alloc();
+ spritevram_alloc();
- m_pf1_tilemap->set_scrolldx(-0x1ef-6, -0x11+6);
- m_pf2_tilemap->set_scrolldx(-0x1ef-4, -0x11+4);
- m_pf3_tilemap->set_scrolldx(-0x1ef-2, -0x11+2);
- m_pf4_tilemap->set_scrolldx(-0x1ef-0, -0x11+0);
- m_pf1_tilemap->set_scrolldy(-0x101, -0xff);
- m_pf2_tilemap->set_scrolldy(-0x101, -0xff);
- m_pf3_tilemap->set_scrolldy(-0x101, -0xff);
- m_pf4_tilemap->set_scrolldy(-0x101, -0xff);
+ m_tilemap[0]->set_scrolldx(-0x1ef - 6, -0x11 + 6);
+ m_tilemap[1]->set_scrolldx(-0x1ef - 4, -0x11 + 4);
+ m_tilemap[2]->set_scrolldx(-0x1ef - 2, -0x11 + 2);
+ m_tilemap[3]->set_scrolldx(-0x1ef - 0, -0x11 + 0);
+ m_tilemap[0]->set_scrolldy(-0x101, -0xff);
+ m_tilemap[1]->set_scrolldy(-0x101, -0xff);
+ m_tilemap[2]->set_scrolldy(-0x101, -0xff);
+ m_tilemap[3]->set_scrolldy(-0x101, -0xff);
m_bcu_flipscreen = -1;
m_fcu_flipscreen = 0;
@@ -340,14 +280,14 @@ VIDEO_START_MEMBER(toaplan1_state,toaplan1)
***************************************************************************/
-READ16_MEMBER(toaplan1_state::toaplan1_frame_done_r)
+u16 toaplan1_state::frame_done_r()
{
return m_screen->vblank();
}
-WRITE16_MEMBER(toaplan1_state::toaplan1_tile_offsets_w)
+WRITE16_MEMBER(toaplan1_state::tile_offsets_w)
{
- if ( offset == 0 )
+ if (offset == 0)
{
COMBINE_DATA(&m_tiles_offsetx);
logerror("Tiles_offsetx now = %08x\n", m_tiles_offsetx);
@@ -357,49 +297,46 @@ WRITE16_MEMBER(toaplan1_state::toaplan1_tile_offsets_w)
COMBINE_DATA(&m_tiles_offsety);
logerror("Tiles_offsety now = %08x\n", m_tiles_offsety);
}
- toaplan1_set_scrolls();
+ set_scrolls();
}
-WRITE16_MEMBER(toaplan1_state::toaplan1_bcu_flipscreen_w)
+void toaplan1_state::bcu_flipscreen_w(u8 data)
{
- if (ACCESSING_BITS_0_7 && (data != m_bcu_flipscreen))
+ if (data != m_bcu_flipscreen)
{
- logerror("Setting BCU controller flipscreen port to %04x\n",data);
+ logerror("Setting BCU controller flipscreen port to %02x\n",data);
m_bcu_flipscreen = data & 0x01; /* 0x0001 = flip, 0x0000 = no flip */
machine().tilemap().set_flip_all((data ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0));
- toaplan1_set_scrolls();
+ set_scrolls();
}
}
-WRITE16_MEMBER(toaplan1_state::toaplan1_fcu_flipscreen_w)
+void toaplan1_state::fcu_flipscreen_w(u8 data)
{
- if (ACCESSING_BITS_8_15)
- {
- logerror("Setting FCU controller flipscreen port to %04x\n",data);
- m_fcu_flipscreen = data & 0x8000; /* 0x8000 = flip, 0x0000 = no flip */
- }
+ logerror("Setting FCU controller flipscreen port to %02x\n",data);
+ m_fcu_flipscreen = data & 0x80; /* 0x80 = flip, 0x00 = no flip */
}
-READ16_MEMBER(toaplan1_state::toaplan1_spriteram_offs_r)/// this aint really needed ?
+u16 toaplan1_state::spriteram_offs_r() // this aint really needed ?
{
return m_spriteram_offs;
}
-WRITE16_MEMBER(toaplan1_state::toaplan1_spriteram_offs_w)
+void toaplan1_state::spriteram_offs_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_spriteram_offs);
}
-WRITE16_MEMBER(toaplan1_state::toaplan1_bgpalette_w)
+void toaplan1_state::bgpalette_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_bgpaletteram[offset]);
data = m_bgpaletteram[offset];
m_palette->set_pen_color(offset, pal5bit(data>>0), pal5bit(data>>5), pal5bit(data>>10));
}
-WRITE16_MEMBER(toaplan1_state::toaplan1_fgpalette_w)
+void toaplan1_state::fgpalette_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_fgpaletteram[offset]);
data = m_fgpaletteram[offset];
@@ -407,17 +344,17 @@ WRITE16_MEMBER(toaplan1_state::toaplan1_fgpalette_w)
}
-READ16_MEMBER(toaplan1_state::toaplan1_spriteram16_r)
+u16 toaplan1_state::spriteram_r()
{
- return m_spriteram[m_spriteram_offs & ((TOAPLAN1_SPRITERAM_SIZE/2)-1)];
+ return m_spriteram[m_spriteram_offs & ((TOAPLAN1_SPRITERAM_SIZE / 2)-1)];
}
-WRITE16_MEMBER(toaplan1_state::toaplan1_spriteram16_w)
+void toaplan1_state::spriteram_w(offs_t offset, u16 data, u16 mem_mask)
{
- COMBINE_DATA(&m_spriteram[m_spriteram_offs & ((TOAPLAN1_SPRITERAM_SIZE/2)-1)]);
+ COMBINE_DATA(&m_spriteram[m_spriteram_offs & ((TOAPLAN1_SPRITERAM_SIZE / 2)-1)]);
#ifdef MAME_DEBUG
- if (m_spriteram_offs >= (TOAPLAN1_SPRITERAM_SIZE/2))
+ if (m_spriteram_offs >= (TOAPLAN1_SPRITERAM_SIZE / 2))
{
logerror("Sprite_RAM_word_w, %08x out of range !\n", m_spriteram_offs);
return;
@@ -427,17 +364,17 @@ WRITE16_MEMBER(toaplan1_state::toaplan1_spriteram16_w)
m_spriteram_offs++;
}
-READ16_MEMBER(toaplan1_state::toaplan1_spritesizeram16_r)
+u16 toaplan1_state::spritesizeram_r()
{
- return m_spritesizeram16[m_spriteram_offs & ((TOAPLAN1_SPRITESIZERAM_SIZE/2)-1)];
+ return m_spritesizeram[m_spriteram_offs & ((TOAPLAN1_SPRITESIZERAM_SIZE / 2)-1)];
}
-WRITE16_MEMBER(toaplan1_state::toaplan1_spritesizeram16_w)
+void toaplan1_state::spritesizeram_w(offs_t offset, u16 data, u16 mem_mask)
{
- COMBINE_DATA(&m_spritesizeram16[m_spriteram_offs & ((TOAPLAN1_SPRITESIZERAM_SIZE/2)-1)]);
+ COMBINE_DATA(&m_spritesizeram[m_spriteram_offs & ((TOAPLAN1_SPRITESIZERAM_SIZE / 2)-1)]);
#ifdef MAME_DEBUG
- if (m_spriteram_offs >= (TOAPLAN1_SPRITESIZERAM_SIZE/2))
+ if (m_spriteram_offs >= (TOAPLAN1_SPRITESIZERAM_SIZE / 2))
{
logerror("Sprite_Size_RAM_word_w, %08x out of range !\n", m_spriteram_offs);
return;
@@ -449,17 +386,17 @@ WRITE16_MEMBER(toaplan1_state::toaplan1_spritesizeram16_w)
-WRITE16_MEMBER(toaplan1_state::toaplan1_bcu_control_w)
+void toaplan1_state::bcu_control_w(offs_t offset, u16 data)
{
logerror("BCU tile controller register:%02x now = %04x\n",offset,data);
}
-READ16_MEMBER(toaplan1_state::toaplan1_tileram_offs_r)
+u16 toaplan1_state::tileram_offs_r()
{
return m_pf_voffs;
}
-WRITE16_MEMBER(toaplan1_state::toaplan1_tileram_offs_w)
+void toaplan1_state::tileram_offs_w(offs_t offset, u16 data, u16 mem_mask)
{
if (data >= 0x4000)
logerror("Hmmm, unknown video layer being selected (%08x)\n",data);
@@ -467,28 +404,21 @@ WRITE16_MEMBER(toaplan1_state::toaplan1_tileram_offs_w)
}
-READ16_MEMBER(toaplan1_state::toaplan1_tileram16_r)
+u16 toaplan1_state::tileram_r(offs_t offset)
{
+ const int layer = m_pf_voffs >> 12;
+ const int offs = m_pf_voffs & 0xfff;
offs_t vram_offset;
- uint16_t video_data = 0;
+ u16 video_data = 0;
- switch (m_pf_voffs & 0xf000) /* Locate Layer (PlayField) */
+ switch (layer) /* Locate Layer (PlayField) */
{
- case 0x0000:
- vram_offset = ((m_pf_voffs * 2) + offset) & ((TOAPLAN1_TILEVRAM_SIZE/2)-1);
- video_data = m_pf1_tilevram16[vram_offset];
- break;
- case 0x1000:
- vram_offset = ((m_pf_voffs * 2) + offset) & ((TOAPLAN1_TILEVRAM_SIZE/2)-1);
- video_data = m_pf2_tilevram16[vram_offset];
- break;
- case 0x2000:
- vram_offset = ((m_pf_voffs * 2) + offset) & ((TOAPLAN1_TILEVRAM_SIZE/2)-1);
- video_data = m_pf3_tilevram16[vram_offset];
- break;
- case 0x3000:
- vram_offset = ((m_pf_voffs * 2) + offset) & ((TOAPLAN1_TILEVRAM_SIZE/2)-1);
- video_data = m_pf4_tilevram16[vram_offset];
+ case 0x0:
+ case 0x1:
+ case 0x2:
+ case 0x3:
+ vram_offset = ((offs * 2) + offset) & ((TOAPLAN1_TILEVRAM_SIZE / 2)-1);
+ video_data = m_tilevram[layer][vram_offset];
break;
default:
logerror("Hmmm, reading %04x from unknown playfield layer address %06x Offset:%01x !!!\n", video_data, m_pf_voffs, offset);
@@ -498,9 +428,9 @@ READ16_MEMBER(toaplan1_state::toaplan1_tileram16_r)
return video_data;
}
-READ16_MEMBER(toaplan1_rallybik_state::rallybik_tileram16_r)
+u16 toaplan1_rallybik_state::tileram_r(offs_t offset)
{
- uint16_t data = toaplan1_tileram16_r(space, offset, mem_mask);
+ u16 data = toaplan1_state::tileram_r(offset);
if (offset == 0) /* some bit lines may be stuck to others */
{
@@ -510,31 +440,21 @@ READ16_MEMBER(toaplan1_rallybik_state::rallybik_tileram16_r)
return data;
}
-WRITE16_MEMBER(toaplan1_state::toaplan1_tileram16_w)
+void toaplan1_state::tileram_w(offs_t offset, u16 data, u16 mem_mask)
{
+ const int layer = m_pf_voffs >> 12;
+ const int offs = m_pf_voffs & 0xfff;
offs_t vram_offset;
- switch (m_pf_voffs & 0xf000) /* Locate Layer (PlayField) */
+ switch (layer) /* Locate Layer (PlayField) */
{
- case 0x0000:
- vram_offset = ((m_pf_voffs * 2) + offset) & ((TOAPLAN1_TILEVRAM_SIZE/2)-1);
- COMBINE_DATA(&m_pf1_tilevram16[vram_offset]);
- m_pf1_tilemap->mark_tile_dirty(vram_offset/2);
- break;
- case 0x1000:
- vram_offset = ((m_pf_voffs * 2) + offset) & ((TOAPLAN1_TILEVRAM_SIZE/2)-1);
- COMBINE_DATA(&m_pf2_tilevram16[vram_offset]);
- m_pf2_tilemap->mark_tile_dirty(vram_offset/2);
- break;
- case 0x2000:
- vram_offset = ((m_pf_voffs * 2) + offset) & ((TOAPLAN1_TILEVRAM_SIZE/2)-1);
- COMBINE_DATA(&m_pf3_tilevram16[vram_offset]);
- m_pf3_tilemap->mark_tile_dirty(vram_offset/2);
- break;
- case 0x3000:
- vram_offset = ((m_pf_voffs * 2) + offset) & ((TOAPLAN1_TILEVRAM_SIZE/2)-1);
- COMBINE_DATA(&m_pf4_tilevram16[vram_offset]);
- m_pf4_tilemap->mark_tile_dirty(vram_offset/2);
+ case 0x0:
+ case 0x1:
+ case 0x2:
+ case 0x3:
+ vram_offset = ((offs * 2) + offset) & ((TOAPLAN1_TILEVRAM_SIZE / 2)-1);
+ COMBINE_DATA(&m_tilevram[layer][vram_offset]);
+ m_tilemap[layer]->mark_tile_dirty(vram_offset / 2);
break;
default:
logerror("Hmmm, writing %04x to unknown playfield layer address %06x Offset:%01x\n", data, m_pf_voffs, offset);
@@ -544,56 +464,48 @@ WRITE16_MEMBER(toaplan1_state::toaplan1_tileram16_w)
-READ16_MEMBER(toaplan1_state::toaplan1_scroll_regs_r)
+u16 toaplan1_state::scroll_regs_r(offs_t offset)
{
- uint16_t scroll = 0;
+ const int layer = (offset >> 1);
+ u16 scroll = 0;
- switch(offset)
+ switch (offset)
{
- case 00: scroll = m_pf1_scrollx; break;
- case 01: scroll = m_pf1_scrolly; break;
- case 02: scroll = m_pf2_scrollx; break;
- case 03: scroll = m_pf2_scrolly; break;
- case 04: scroll = m_pf3_scrollx; break;
- case 05: scroll = m_pf3_scrolly; break;
- case 06: scroll = m_pf4_scrollx; break;
- case 07: scroll = m_pf4_scrolly; break;
- default: logerror("Hmmm, reading unknown video scroll register (%08x) !!!\n",offset);
+ case 00:
+ case 02:
+ case 04:
+ case 06: scroll = m_scrollx[layer]; break;
+ case 01:
+ case 03:
+ case 05:
+ case 07: scroll = m_scrolly[layer]; break;
+ default: logerror("Hmmm, reading unknown video scroll register (%02x) !!!\n",offset);
break;
}
return scroll;
}
-WRITE16_MEMBER(toaplan1_state::toaplan1_scroll_regs_w)
+void toaplan1_state::scroll_regs_w(offs_t offset, u16 data, u16 mem_mask)
{
- switch(offset)
+ const int layer = (offset >> 1);
+ switch (offset)
{
- case 00: COMBINE_DATA(&m_pf1_scrollx); /* 1D3h */
- m_pf1_tilemap->set_scrollx(0, (m_pf1_scrollx >> 7) - m_tiles_offsetx);
- break;
- case 01: COMBINE_DATA(&m_pf1_scrolly); /* 1EBh */
- m_pf1_tilemap->set_scrolly(0, (m_pf1_scrolly >> 7) - m_tiles_offsety);
- break;
- case 02: COMBINE_DATA(&m_pf2_scrollx); /* 1D5h */
- m_pf2_tilemap->set_scrollx(0, (m_pf2_scrollx >> 7) - m_tiles_offsetx);
+ case 00: /* 1D3h */
+ case 02: /* 1D5h */
+ case 04: /* 1D7h */
+ case 06: /* 1D9h */
+ COMBINE_DATA(&m_scrollx[layer]);
+ m_tilemap[layer]->set_scrollx(0, (m_scrollx[layer] >> 7) - m_tiles_offsetx);
break;
- case 03: COMBINE_DATA(&m_pf2_scrolly); /* 1EBh */
- m_pf2_tilemap->set_scrolly(0, (m_pf2_scrolly >> 7) - m_tiles_offsety);
+ case 01: /* 1EBh */
+ case 03: /* 1EBh */
+ case 05: /* 1EBh */
+ case 07: /* 1EBh */
+ COMBINE_DATA(&m_scrolly[layer]);
+ m_tilemap[layer]->set_scrolly(0, (m_scrolly[layer] >> 7) - m_tiles_offsety);
break;
- case 04: COMBINE_DATA(&m_pf3_scrollx); /* 1D7h */
- m_pf3_tilemap->set_scrollx(0, (m_pf3_scrollx >> 7) - m_tiles_offsetx);
- break;
- case 05: COMBINE_DATA(&m_pf3_scrolly); /* 1EBh */
- m_pf3_tilemap->set_scrolly(0, (m_pf3_scrolly >> 7) - m_tiles_offsety);
- break;
- case 06: COMBINE_DATA(&m_pf4_scrollx); /* 1D9h */
- m_pf4_tilemap->set_scrollx(0, (m_pf4_scrollx >> 7) - m_tiles_offsetx);
- break;
- case 07: COMBINE_DATA(&m_pf4_scrolly); /* 1EBh */
- m_pf4_tilemap->set_scrolly(0, (m_pf4_scrolly >> 7) - m_tiles_offsety);
- break;
- default: logerror("Hmmm, writing %08x to unknown video scroll register (%08x) !!!\n",data ,offset);
+ default: logerror("Hmmm, writing %04x to unknown video scroll register (%02x) !!!\n",data ,offset);
break;
}
}
@@ -601,37 +513,37 @@ WRITE16_MEMBER(toaplan1_state::toaplan1_scroll_regs_w)
-void toaplan1_state::toaplan1_log_vram()
+void toaplan1_state::log_vram()
{
#ifdef MAME_DEBUG
- if ( machine().input().code_pressed(KEYCODE_M) )
+ if (machine().input().code_pressed(KEYCODE_M))
{
- uint16_t *spriteram16 = m_spriteram;
- uint16_t *buffered_spriteram16 = m_buffered_spriteram.get();
+ u16 *spriteram = m_spriteram;
+ u16 *buffered_spriteram = m_buffered_spriteram.get();
offs_t sprite_voffs;
while (machine().input().code_pressed(KEYCODE_M)) ;
- if (m_spritesizeram16) /* FCU controller */
+ if (m_spritesizeram) /* FCU controller */
{
int schar,sattr,sxpos,sypos,bschar,bsattr,bsxpos,bsypos;
- uint16_t *size = (uint16_t *)(m_spritesizeram16.get());
- uint16_t *bsize = (uint16_t *)(m_buffered_spritesizeram16.get());
+ u16 *size = (u16 *)(m_spritesizeram.get());
+ u16 *bsize = (u16 *)(m_buffered_spritesizeram.get());
logerror("Scrolls PF1-X PF1-Y PF2-X PF2-Y PF3-X PF3-Y PF4-X PF4-Y\n");
logerror("------> #%04x #%04x #%04x #%04x #%04x #%04x #%04x #%04x\n",
- m_pf1_scrollx, m_pf1_scrolly, m_pf2_scrollx, m_pf2_scrolly, m_pf3_scrollx, m_pf3_scrolly, m_pf4_scrollx, m_pf4_scrolly);
- for ( sprite_voffs = 0; sprite_voffs < m_spriteram.bytes()/2; sprite_voffs += 4 )
+ m_scrollx[0], m_scrolly[0], m_scrollx[1], m_scrolly[1], m_scrollx[2], m_scrolly[2], m_scrollx[3], m_scrolly[3]);
+ for (sprite_voffs = 0; sprite_voffs < m_spriteram.bytes() / 2; sprite_voffs += 4)
{
- bschar = buffered_spriteram16[sprite_voffs];
- bsattr = buffered_spriteram16[sprite_voffs + 1];
- bsxpos = buffered_spriteram16[sprite_voffs + 2];
- bsypos = buffered_spriteram16[sprite_voffs + 3];
- schar = spriteram16[sprite_voffs];
- sattr = spriteram16[sprite_voffs + 1];
- sxpos = spriteram16[sprite_voffs + 2];
- sypos = spriteram16[sprite_voffs + 3];
+ bschar = buffered_spriteram[sprite_voffs];
+ bsattr = buffered_spriteram[sprite_voffs + 1];
+ bsxpos = buffered_spriteram[sprite_voffs + 2];
+ bsypos = buffered_spriteram[sprite_voffs + 3];
+ schar = spriteram[sprite_voffs];
+ sattr = spriteram[sprite_voffs + 1];
+ sxpos = spriteram[sprite_voffs + 2];
+ sypos = spriteram[sprite_voffs + 3];
logerror("$(%04x) Tile-Attr-Xpos-Ypos Now:%04x %04x %04x.%01x %04x.%01x nxt:%04x %04x %04x.%01x %04x.%01x\n", sprite_voffs,
- schar, sattr, sxpos, size[( sattr>>6)&0x3f]&0xf, sypos,( size[( sattr>>6)&0x3f]>>4)&0xf,
- bschar,bsattr,bsxpos,bsize[(bsattr>>6)&0x3f]&0xf,bsypos,(bsize[(bsattr>>6)&0x3f]>>4)&0xf);
+ schar, sattr, sxpos, size[( sattr >> 6) & 0x3f] & 0xf, sypos,( size[( sattr >> 6) & 0x3f] >> 4) & 0xf,
+ bschar,bsattr,bsxpos,bsize[(bsattr >> 6) & 0x3f] & 0xf,bsypos,(bsize[(bsattr >> 6) & 0x3f] >> 4) & 0xf);
}
}
else /* SCU controller */
@@ -639,17 +551,17 @@ void toaplan1_state::toaplan1_log_vram()
int schar,sattr,sxpos,sypos,bschar,bsattr,bsxpos,bsypos;
logerror("Scrolls PF1-X PF1-Y PF2-X PF2-Y PF3-X PF3-Y PF4-X PF4-Y\n");
logerror("------> #%04x #%04x #%04x #%04x #%04x #%04x #%04x #%04x\n",
- m_pf1_scrollx, m_pf1_scrolly, m_pf2_scrollx, m_pf2_scrolly, m_pf3_scrollx, m_pf3_scrolly, m_pf4_scrollx, m_pf4_scrolly);
- for ( sprite_voffs = 0; sprite_voffs < m_spriteram.bytes()/2; sprite_voffs += 4 )
+ m_scrollx[0], m_scrolly[0], m_scrollx[1], m_scrolly[1], m_scrollx[2], m_scrolly[2], m_scrollx[3], m_scrolly[3]);
+ for (sprite_voffs = 0; sprite_voffs < m_spriteram.bytes() / 2; sprite_voffs += 4)
{
- bschar = buffered_spriteram16[sprite_voffs];
- bsattr = buffered_spriteram16[sprite_voffs + 1];
- bsypos = buffered_spriteram16[sprite_voffs + 2];
- bsxpos = buffered_spriteram16[sprite_voffs + 3];
- schar = spriteram16[sprite_voffs];
- sattr = spriteram16[sprite_voffs + 1];
- sypos = spriteram16[sprite_voffs + 2];
- sxpos = spriteram16[sprite_voffs + 3];
+ bschar = buffered_spriteram[sprite_voffs];
+ bsattr = buffered_spriteram[sprite_voffs + 1];
+ bsypos = buffered_spriteram[sprite_voffs + 2];
+ bsxpos = buffered_spriteram[sprite_voffs + 3];
+ schar = spriteram[sprite_voffs];
+ sattr = spriteram[sprite_voffs + 1];
+ sypos = spriteram[sprite_voffs + 2];
+ sxpos = spriteram[sprite_voffs + 3];
logerror("$(%04x) Tile-Attr-Xpos-Ypos Now:%04x %04x %04x %04x nxt:%04x %04x %04x %04x\n", sprite_voffs,
schar, sattr, sxpos, sypos,
bschar,bsattr,bsxpos, bsypos);
@@ -657,59 +569,59 @@ void toaplan1_state::toaplan1_log_vram()
}
}
- if ( machine().input().code_pressed(KEYCODE_SLASH) )
+ if (machine().input().code_pressed(KEYCODE_SLASH))
{
- uint16_t *size = (uint16_t *)(m_spritesizeram16.get());
- uint16_t *bsize = (uint16_t *)(m_buffered_spritesizeram16.get());
+ u16 *size = (u16 *)(m_spritesizeram.get());
+ u16 *bsize = (u16 *)(m_buffered_spritesizeram.get());
offs_t offs;
while (machine().input().code_pressed(KEYCODE_SLASH)) ;
- if (m_spritesizeram16) /* FCU controller */
+ if (m_spritesizeram) /* FCU controller */
{
logerror("Scrolls PF1-X PF1-Y PF2-X PF2-Y PF3-X PF3-Y PF4-X PF4-Y\n");
logerror("------> #%04x #%04x #%04x #%04x #%04x #%04x #%04x #%04x\n",
- m_pf1_scrollx, m_pf1_scrolly, m_pf2_scrollx, m_pf2_scrolly, m_pf3_scrollx, m_pf3_scrolly, m_pf4_scrollx, m_pf4_scrolly);
- for ( offs = 0; offs < (TOAPLAN1_SPRITESIZERAM_SIZE/2); offs +=4 )
+ m_scrollx[0], m_scrolly[0], m_scrollx[1], m_scrolly[1], m_scrollx[2], m_scrolly[2], m_scrollx[3], m_scrolly[3]);
+ for (offs = 0; offs < (TOAPLAN1_SPRITESIZERAM_SIZE / 2); offs += 4)
{
logerror("SizeOffs:%04x now:%04x %04x %04x %04x next: %04x %04x %04x %04x\n", offs,
- bsize[offs+0], bsize[offs+1],
- bsize[offs+2], bsize[offs+3],
- size[offs+0], size[offs+1],
- size[offs+2], size[offs+3]);
+ bsize[offs + 0], bsize[offs + 1],
+ bsize[offs + 2], bsize[offs + 3],
+ size[offs + 0], size[offs + 1],
+ size[offs + 2], size[offs + 3]);
}
}
}
- if ( machine().input().code_pressed(KEYCODE_N) )
+ if (machine().input().code_pressed(KEYCODE_N))
{
offs_t tile_voffs;
- int tchar[5], tattr[5];
+ int tchar[4], tattr[4];
while (machine().input().code_pressed(KEYCODE_N)) ; /* BCU controller */
logerror("Scrolls PF1-X PF1-Y PF2-X PF2-Y PF3-X PF3-Y PF4-X PF4-Y\n");
logerror("------> #%04x #%04x #%04x #%04x #%04x #%04x #%04x #%04x\n",
- m_pf1_scrollx, m_pf1_scrolly, m_pf2_scrollx, m_pf2_scrolly, m_pf3_scrollx, m_pf3_scrolly, m_pf4_scrollx, m_pf4_scrolly);
- for ( tile_voffs = 0; tile_voffs < (TOAPLAN1_TILEVRAM_SIZE/2); tile_voffs += 2 )
+ m_scrollx[0], m_scrolly[0], m_scrollx[1], m_scrolly[1], m_scrollx[2], m_scrolly[2], m_scrollx[3], m_scrolly[3]);
+ for (tile_voffs = 0; tile_voffs < (TOAPLAN1_TILEVRAM_SIZE / 2); tile_voffs += 2)
{
- tchar[1] = m_pf1_tilevram16[tile_voffs + 1];
- tattr[1] = m_pf1_tilevram16[tile_voffs];
- tchar[2] = m_pf2_tilevram16[tile_voffs + 1];
- tattr[2] = m_pf2_tilevram16[tile_voffs];
- tchar[3] = m_pf3_tilevram16[tile_voffs + 1];
- tattr[3] = m_pf3_tilevram16[tile_voffs];
- tchar[4] = m_pf4_tilevram16[tile_voffs + 1];
- tattr[4] = m_pf4_tilevram16[tile_voffs];
+ tchar[0] = m_tilevram[0][tile_voffs + 1];
+ tattr[0] = m_tilevram[0][tile_voffs];
+ tchar[1] = m_tilevram[1][tile_voffs + 1];
+ tattr[1] = m_tilevram[1][tile_voffs];
+ tchar[2] = m_tilevram[2][tile_voffs + 1];
+ tattr[2] = m_tilevram[2][tile_voffs];
+ tchar[3] = m_tilevram[3][tile_voffs + 1];
+ tattr[3] = m_tilevram[3][tile_voffs];
// logerror("PF3 offs:%04x Tile:%04x Attr:%04x\n", tile_voffs, tchar, tattr);
logerror("$(%04x) Attr-Tile PF1:%04x-%04x PF2:%04x-%04x PF3:%04x-%04x PF4:%04x-%04x\n", tile_voffs,
- tattr[1], tchar[1], tattr[2], tchar[2],
- tattr[3], tchar[3], tattr[4], tchar[4]);
+ tattr[0], tchar[0], tattr[1], tchar[1],
+ tattr[2], tchar[2], tattr[3], tchar[3]);
}
}
- if ( machine().input().code_pressed(KEYCODE_W) )
+ if (machine().input().code_pressed(KEYCODE_W))
{
while (machine().input().code_pressed(KEYCODE_W)) ;
logerror("Mark here\n");
}
- if ( machine().input().code_pressed(KEYCODE_E) )
+ if (machine().input().code_pressed(KEYCODE_E))
{
while (machine().input().code_pressed(KEYCODE_E)) ;
m_displog += 1;
@@ -719,35 +631,35 @@ void toaplan1_state::toaplan1_log_vram()
{
logerror("Scrolls PF1-X PF1-Y PF2-X PF2-Y PF3-X PF3-Y PF4-X PF4-Y\n");
logerror("------> #%04x #%04x #%04x #%04x #%04x #%04x #%04x #%04x\n",
- m_pf1_scrollx, m_pf1_scrolly, m_pf2_scrollx, m_pf2_scrolly, m_pf3_scrollx, m_pf3_scrolly, m_pf4_scrollx, m_pf4_scrolly);
+ m_scrollx[0], m_scrolly[0], m_scrollx[1], m_scrolly[1], m_scrollx[2], m_scrolly[2], m_scrollx[3], m_scrolly[3]);
}
- if ( machine().input().code_pressed(KEYCODE_L) ) /* Turn Playfield 4 on/off */
+ if (machine().input().code_pressed(KEYCODE_L)) /* Turn Playfield 4 on/off */
{
while (machine().input().code_pressed(KEYCODE_L)) ;
- m_display_pf4 += 1;
- m_display_pf4 &= 1;
- m_pf4_tilemap->enable(m_display_pf4);
+ m_display_pf[3] += 1;
+ m_display_pf[3] &= 1;
+ m_tilemap[3]->enable(m_display_pf[3]);
}
- if ( machine().input().code_pressed(KEYCODE_K) ) /* Turn Playfield 3 on/off */
+ if (machine().input().code_pressed(KEYCODE_K)) /* Turn Playfield 3 on/off */
{
while (machine().input().code_pressed(KEYCODE_K)) ;
- m_display_pf3 += 1;
- m_display_pf3 &= 1;
- m_pf3_tilemap->enable(m_display_pf3);
+ m_display_pf[2] += 1;
+ m_display_pf[2] &= 1;
+ m_tilemap[2]->enable(m_display_pf[2]);
}
- if ( machine().input().code_pressed(KEYCODE_J) ) /* Turn Playfield 2 on/off */
+ if (machine().input().code_pressed(KEYCODE_J)) /* Turn Playfield 2 on/off */
{
while (machine().input().code_pressed(KEYCODE_J)) ;
- m_display_pf2 += 1;
- m_display_pf2 &= 1;
- m_pf2_tilemap->enable(m_display_pf2);
+ m_display_pf[1] += 1;
+ m_display_pf[1] &= 1;
+ m_tilemap[1]->enable(m_display_pf[1]);
}
- if ( machine().input().code_pressed(KEYCODE_H) ) /* Turn Playfield 1 on/off */
+ if (machine().input().code_pressed(KEYCODE_H)) /* Turn Playfield 1 on/off */
{
while (machine().input().code_pressed(KEYCODE_H)) ;
- m_display_pf1 += 1;
- m_display_pf1 &= 1;
- m_pf1_tilemap->enable(m_display_pf1);
+ m_display_pf[0] += 1;
+ m_display_pf[0] &= 1;
+ m_tilemap[0]->enable(m_display_pf[0]);
}
#endif
}
@@ -759,31 +671,31 @@ void toaplan1_state::toaplan1_log_vram()
***************************************************************************/
// custom function to draw a single sprite. needed to keep correct sprites - sprites and sprites - tilemaps priorities
-static void toaplan1_draw_sprite_custom(screen_device &screen, bitmap_ind16 &dest_bmp,const rectangle &clip,gfx_element *gfx,
- uint32_t code,uint32_t color,int flipx,int flipy,int sx,int sy,
+static void draw_sprite_custom(screen_device &screen, bitmap_ind16 &dest_bmp, const rectangle &clip, gfx_element *gfx,
+ u32 code, u32 color, int flipx, int flipy, int sx, int sy,
int priority)
{
- int pal_base = gfx->colorbase() + gfx->granularity() * (color % gfx->colors());
- const uint8_t *source_base = gfx->get_data(code % gfx->elements());
+ const u32 pal_base = gfx->colorbase() + gfx->granularity() * (color % gfx->colors());
+ const u8 *source_base = gfx->get_data(code % gfx->elements());
bitmap_ind8 &priority_bitmap = screen.priority();
- int sprite_screen_height = ((1<<16)*gfx->height()+0x8000)>>16;
- int sprite_screen_width = ((1<<16)*gfx->width()+0x8000)>>16;
+ const int sprite_screen_height = ((1 << 16) * gfx->height() + 0x8000) >> 16;
+ const int sprite_screen_width = ((1 << 16) * gfx->width() + 0x8000) >> 16;
if (sprite_screen_width && sprite_screen_height)
{
/* compute sprite increment per screen pixel */
- int dx = (gfx->width()<<16)/sprite_screen_width;
- int dy = (gfx->height()<<16)/sprite_screen_height;
+ int dx = (gfx->width() << 16) / sprite_screen_width;
+ int dy = (gfx->height() << 16) / sprite_screen_height;
- int ex = sx+sprite_screen_width;
- int ey = sy+sprite_screen_height;
+ int ex = sx + sprite_screen_width;
+ int ey = sy + sprite_screen_height;
int x_index_base;
int y_index;
- if( flipx )
+ if (flipx)
{
- x_index_base = (sprite_screen_width-1)*dx;
+ x_index_base = (sprite_screen_width - 1) * dx;
dx = -dx;
}
else
@@ -791,9 +703,9 @@ static void toaplan1_draw_sprite_custom(screen_device &screen, bitmap_ind16 &des
x_index_base = 0;
}
- if( flipy )
+ if (flipy)
{
- y_index = (sprite_screen_height-1)*dy;
+ y_index = (sprite_screen_height - 1) * dy;
dy = -dy;
}
else
@@ -801,48 +713,46 @@ static void toaplan1_draw_sprite_custom(screen_device &screen, bitmap_ind16 &des
y_index = 0;
}
- if( sx < clip.min_x)
+ if (sx < clip.min_x)
{ /* clip left */
- int pixels = clip.min_x-sx;
+ int pixels = clip.min_x - sx;
sx += pixels;
- x_index_base += pixels*dx;
+ x_index_base += pixels * dx;
}
- if( sy < clip.min_y )
+ if (sy < clip.min_y)
{ /* clip top */
- int pixels = clip.min_y-sy;
+ int pixels = clip.min_y - sy;
sy += pixels;
- y_index += pixels*dy;
+ y_index += pixels * dy;
}
/* NS 980211 - fixed incorrect clipping */
- if( ex > clip.max_x+1 )
+ if (ex > clip.max_x + 1)
{ /* clip right */
- int pixels = ex-clip.max_x-1;
+ int pixels = ex-clip.max_x - 1;
ex -= pixels;
}
- if( ey > clip.max_y+1 )
+ if (ey > clip.max_y + 1)
{ /* clip bottom */
- int pixels = ey-clip.max_y-1;
+ int pixels = ey-clip.max_y - 1;
ey -= pixels;
}
- if( ex>sx )
+ if (ex > sx)
{ /* skip if inner loop doesn't draw anything */
- int y;
-
- for( y=sy; y<ey; y++ )
+ for (int y = sy; y < ey; y++)
{
- const uint8_t *source = source_base + (y_index>>16) * gfx->rowbytes();
- uint16_t *dest = &dest_bmp.pix16(y);
- uint8_t *pri = &priority_bitmap.pix8(y);
+ const u8 *source = source_base + (y_index >> 16) * gfx->rowbytes();
+ u16 *dest = &dest_bmp.pix16(y);
+ u8 *pri = &priority_bitmap.pix8(y);
- int x, x_index = x_index_base;
- for( x=sx; x<ex; x++ )
+ int x_index = x_index_base;
+ for (int x = sx; x < ex; x++)
{
- int c = source[x_index>>16];
- if( c != 0 )
+ const u8 c = source[x_index >> 16];
+ if (c != 0)
{
if (pri[x] < priority)
- dest[x] = pal_base+c;
+ dest[x] = pal_base + c;
pri[x] = 0xff; // mark it "already drawn"
}
x_index += dx;
@@ -855,35 +765,32 @@ static void toaplan1_draw_sprite_custom(screen_device &screen, bitmap_ind16 &des
}
-void toaplan1_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect )
+void toaplan1_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- uint16_t *source = (uint16_t *)m_buffered_spriteram.get();
- uint16_t *size = (uint16_t *)m_buffered_spritesizeram16.get();
+ u16 *source = (u16 *)m_buffered_spriteram.get();
+ u16 *size = (u16 *)m_buffered_spritesizeram.get();
int fcu_flipscreen = m_fcu_flipscreen;
- int offs;
- for (offs = m_spriteram.bytes()/2 - 4; offs >= 0; offs -= 4)
+ for (int offs = m_spriteram.bytes() / 2 - 4; offs >= 0; offs -= 4)
{
if (!(source[offs] & 0x8000))
{
- int attrib, sprite, color, priority, sx, sy;
- int sprite_sizex, sprite_sizey, dim_x, dim_y, sx_base, sy_base;
- int sizeram_ptr;
+ int sx, sy;
- attrib = source[offs+1];
- priority = (attrib & 0xf000) >> 12;
+ const u16 attrib = source[offs + 1];
+ const u8 priority = (attrib & 0xf000) >> 12;
- sprite = source[offs] & 0x7fff;
- color = attrib & 0x3f;
+ u32 sprite = source[offs] & 0x7fff;
+ u32 color = attrib & 0x3f;
/****** find sprite dimension ******/
- sizeram_ptr = (attrib >> 6) & 0x3f;
- sprite_sizex = ( size[sizeram_ptr] & 0x0f) * 8;
- sprite_sizey = ((size[sizeram_ptr] >> 4) & 0x0f) * 8;
+ const u32 sizeram_ptr = (attrib >> 6) & 0x3f;
+ const u32 sprite_sizex = ( size[sizeram_ptr] & 0x0f) * 8;
+ const u32 sprite_sizey = ((size[sizeram_ptr] >> 4) & 0x0f) * 8;
/****** find position to display sprite ******/
- sx_base = (source[offs + 2] >> 7) & 0x1ff;
- sy_base = (source[offs + 3] >> 7) & 0x1ff;
+ int sx_base = (source[offs + 2] >> 7) & 0x1ff;
+ int sy_base = (source[offs + 3] >> 7) & 0x1ff;
if (sx_base >= 0x180) sx_base -= 0x200;
if (sy_base >= 0x180) sy_base -= 0x200;
@@ -895,26 +802,26 @@ void toaplan1_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, c
sx_base = visarea.width() - (sx_base + 8); /* visarea.x = 320 */
sy_base = visarea.height() - (sy_base + 8); /* visarea.y = 240 */
- sy_base += ((visarea.max_y + 1) - visarea.height()) * 2; /* Horizontal games are offset so adjust by +0x20 */
+ sy_base += ((visarea.max_y + 1) - visarea.height()) * 2; /* Horizontal games are offset so adjust by + 0x20 */
}
- for (dim_y = 0; dim_y < sprite_sizey; dim_y += 8)
+ for (int dim_y = 0; dim_y < sprite_sizey; dim_y += 8)
{
if (fcu_flipscreen) sy = sy_base - dim_y;
else sy = sy_base + dim_y;
- for (dim_x = 0; dim_x < sprite_sizex; dim_x += 8)
+ for (int dim_x = 0; dim_x < sprite_sizex; dim_x += 8)
{
if (fcu_flipscreen) sx = sx_base - dim_x;
else sx = sx_base + dim_x;
- toaplan1_draw_sprite_custom(screen,bitmap,cliprect,m_gfxdecode->gfx(1),
+ draw_sprite_custom(screen,bitmap,cliprect,m_gfxdecode->gfx(1),
sprite,color,
fcu_flipscreen,fcu_flipscreen,
sx,sy,
priority);
- sprite++ ;
+ sprite++;
}
}
}
@@ -928,24 +835,22 @@ void toaplan1_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, c
Draw the game screen in the given bitmap_ind16.
***************************************************************************/
-uint32_t toaplan1_rallybik_state::screen_update_rallybik(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+u32 toaplan1_rallybik_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- int priority;
-
- toaplan1_log_vram();
+ log_vram();
m_spritegen->draw_sprites_to_tempbitmap(cliprect, m_buffered_spriteram.get(), m_spriteram.bytes());
// first draw everything, including "disabled" tiles and priority 0
- m_pf1_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE | TILEMAP_DRAW_ALL_CATEGORIES, 0);
+ m_tilemap[0]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE | TILEMAP_DRAW_ALL_CATEGORIES, 0);
// then draw the higher priority layers in order
- for (priority = 1; priority < 16; priority++)
+ for (int priority = 1; priority < 16; priority++)
{
- m_pf4_tilemap->draw(screen, bitmap, cliprect, priority, 0);
- m_pf3_tilemap->draw(screen, bitmap, cliprect, priority, 0);
- m_pf2_tilemap->draw(screen, bitmap, cliprect, priority, 0);
- m_pf1_tilemap->draw(screen, bitmap, cliprect, priority, 0);
+ m_tilemap[3]->draw(screen, bitmap, cliprect, priority, 0);
+ m_tilemap[2]->draw(screen, bitmap, cliprect, priority, 0);
+ m_tilemap[1]->draw(screen, bitmap, cliprect, priority, 0);
+ m_tilemap[0]->draw(screen, bitmap, cliprect, priority, 0);
//if (pririoty==0x00) m_spritegen->copy_sprites_from_tempbitmap(bitmap,cliprect,0);
if (priority==0x04) m_spritegen->copy_sprites_from_tempbitmap(bitmap,cliprect,1);
@@ -957,24 +862,22 @@ uint32_t toaplan1_rallybik_state::screen_update_rallybik(screen_device &screen,
return 0;
}
-uint32_t toaplan1_state::screen_update_toaplan1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+u32 toaplan1_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- int priority;
-
- toaplan1_log_vram();
+ log_vram();
screen.priority().fill(0, cliprect);
// first draw everything, including "disabled" tiles and priority 0
- m_pf1_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE | TILEMAP_DRAW_ALL_CATEGORIES, 0);
+ m_tilemap[0]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE | TILEMAP_DRAW_ALL_CATEGORIES, 0);
// then draw the higher priority layers in order
- for (priority = 1; priority < 16; priority++)
+ for (int priority = 1; priority < 16; priority++)
{
- m_pf4_tilemap->draw(screen, bitmap, cliprect, priority, priority, 0);
- m_pf3_tilemap->draw(screen, bitmap, cliprect, priority, priority, 0);
- m_pf2_tilemap->draw(screen, bitmap, cliprect, priority, priority, 0);
- m_pf1_tilemap->draw(screen, bitmap, cliprect, priority, priority, 0);
+ m_tilemap[3]->draw(screen, bitmap, cliprect, priority, priority, 0);
+ m_tilemap[2]->draw(screen, bitmap, cliprect, priority, priority, 0);
+ m_tilemap[1]->draw(screen, bitmap, cliprect, priority, priority, 0);
+ m_tilemap[0]->draw(screen, bitmap, cliprect, priority, priority, 0);
}
draw_sprites(screen, bitmap, cliprect);
@@ -987,35 +890,35 @@ uint32_t toaplan1_state::screen_update_toaplan1(screen_device &screen, bitmap_in
assume it happens automatically every frame, at the end of vblank
****************************************************************************/
-WRITE_LINE_MEMBER(toaplan1_rallybik_state::screen_vblank_rallybik)
+WRITE_LINE_MEMBER(toaplan1_rallybik_state::screen_vblank)
{
// rising edge
if (state)
{
memcpy(m_buffered_spriteram.get(), m_spriteram, m_spriteram.bytes());
- toaplan1_interrupt();
+ interrupt();
}
}
-WRITE_LINE_MEMBER(toaplan1_state::screen_vblank_toaplan1)
+WRITE_LINE_MEMBER(toaplan1_state::screen_vblank)
{
// rising edge
if (state)
{
memcpy(m_buffered_spriteram.get(), m_spriteram, m_spriteram.bytes());
- memcpy(m_buffered_spritesizeram16.get(), m_spritesizeram16.get(), TOAPLAN1_SPRITESIZERAM_SIZE);
- toaplan1_interrupt();
+ memcpy(m_buffered_spritesizeram.get(), m_spritesizeram.get(), TOAPLAN1_SPRITESIZERAM_SIZE);
+ interrupt();
}
}
-WRITE_LINE_MEMBER(toaplan1_state::screen_vblank_samesame)
+WRITE_LINE_MEMBER(toaplan1_samesame_state::screen_vblank)
{
// rising edge
if (state)
{
memcpy(m_buffered_spriteram.get(), m_spriteram, m_spriteram.bytes());
- memcpy(m_buffered_spritesizeram16.get(), m_spritesizeram16.get(), TOAPLAN1_SPRITESIZERAM_SIZE);
- toaplan1_interrupt();
+ memcpy(m_buffered_spritesizeram.get(), m_spritesizeram.get(), TOAPLAN1_SPRITESIZERAM_SIZE);
+ interrupt();
m_maincpu->set_input_line(M68K_IRQ_2, HOLD_LINE); /* Frame done */
}
}
diff --git a/src/mame/video/toaplan_scu.cpp b/src/mame/video/toaplan_scu.cpp
index cb75a21e237..b1edb459d1c 100644
--- a/src/mame/video/toaplan_scu.cpp
+++ b/src/mame/video/toaplan_scu.cpp
@@ -29,7 +29,7 @@ GFXDECODE_MEMBER( toaplan_scu_device::gfxinfo )
GFXDECODE_END
-toaplan_scu_device::toaplan_scu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+toaplan_scu_device::toaplan_scu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, TOAPLAN_SCU, tag, owner, clock)
, device_gfx_interface(mconfig, *this, gfxinfo)
{
@@ -52,38 +52,35 @@ void toaplan_scu_device::alloc_sprite_bitmap(screen_device &screen)
Sprite Handlers
***************************************************************************/
-void toaplan_scu_device::draw_sprites_to_tempbitmap(const rectangle &cliprect, uint16_t* spriteram, uint32_t bytes )
+void toaplan_scu_device::draw_sprites_to_tempbitmap(const rectangle &cliprect, u16* spriteram, u32 bytes)
{
- int offs;
- m_temp_spritebitmap.fill(0,cliprect);
+ m_temp_spritebitmap.fill(0, cliprect);
- for (offs = 0;offs < bytes/2;offs += 4)
+ for (int offs = 0; offs < bytes / 2; offs += 4)
{
- int attribute,sx,sy,flipx,flipy;
- int sprite, color;
-
- attribute = spriteram[offs + 1];
- int priority = (attribute & 0x0c00)>>10;
+ const u16 attribute = spriteram[offs + 1];
+ const int priority = (attribute & 0x0c00) >> 10;
// are 0 priority really skipped, or can they still mask?
if (!priority) continue;
- sy = spriteram[offs + 3] >> 7;
- if (sy != 0x0100) { /* sx = 0x01a0 or 0x0040*/
- sprite = spriteram[offs] & 0x7ff;
- color = attribute & 0x3f;
+ const int sy = spriteram[offs + 3] >> 7;
+ if (sy != 0x0100) /* sx = 0x01a0 or 0x0040*/
+ {
+ const u32 sprite = spriteram[offs] & 0x7ff;
+ u32 color = attribute & 0x3f;
color |= priority << 6; // encode colour
- sx = spriteram[offs + 2] >> 7;
- flipx = attribute & 0x100;
- if (flipx) sx -= m_xoffs_flipped;
+ int sx = spriteram[offs + 2] >> 7;
+ const int flipx = attribute & 0x100;
+ if (flipx) sx -= m_xoffs_flipped;
- flipy = attribute & 0x200;
- gfx(0)->transpen_raw(m_temp_spritebitmap,cliprect,
+ const int flipy = attribute & 0x200;
+ gfx(0)->transpen_raw(m_temp_spritebitmap, cliprect,
sprite,
color << 4 /* << 4 because using _raw */ ,
- flipx,flipy,
- sx-m_xoffs,sy-16,0);
+ flipx, flipy,
+ sx - m_xoffs, sy - 16, 0);
}
}
@@ -96,23 +93,22 @@ void toaplan_scu_device::draw_sprites_to_tempbitmap(const rectangle &cliprect, u
void toaplan_scu_device::copy_sprites_from_tempbitmap(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority)
{
- int y, x;
- int colourbase = gfx(0)->colorbase();
+ const int colourbase = gfx(0)->colorbase();
- for (y=cliprect.min_y;y<=cliprect.max_y;y++)
+ for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
{
- uint16_t* srcline = &m_temp_spritebitmap.pix16(y);
- uint16_t* dstline = &bitmap.pix16(y);
+ u16* srcline = &m_temp_spritebitmap.pix16(y);
+ u16* dstline = &bitmap.pix16(y);
- for (x=cliprect.min_x;x<=cliprect.max_x;x++)
+ for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
{
- uint16_t pix = srcline[x];
+ const u16 pix = srcline[x];
- if ( (pix>>(4+6)) == priority )
+ if ((pix >> (4 + 6)) == priority)
{
- if (pix&0xf)
+ if (pix & 0xf)
{
- dstline[x] = (pix & 0x3ff)+colourbase;
+ dstline[x] = (pix & 0x3ff) + colourbase;
}
}
}
diff --git a/src/mame/video/toaplan_scu.h b/src/mame/video/toaplan_scu.h
index bafceb28953..c07bcaa74df 100644
--- a/src/mame/video/toaplan_scu.h
+++ b/src/mame/video/toaplan_scu.h
@@ -10,7 +10,7 @@
class toaplan_scu_device : public device_t, public device_gfx_interface
{
public:
- toaplan_scu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ toaplan_scu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
// configuration
void set_xoffsets(int xoffs, int xoffs_flipped)
@@ -19,7 +19,7 @@ public:
m_xoffs_flipped = xoffs_flipped;
}
- void draw_sprites_to_tempbitmap(const rectangle &cliprect, uint16_t* spriteram, uint32_t bytes );
+ void draw_sprites_to_tempbitmap(const rectangle &cliprect, u16* spriteram, u32 bytes);
void copy_sprites_from_tempbitmap(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority);
void alloc_sprite_bitmap(screen_device &screen);
diff --git a/src/mame/video/twincobr.cpp b/src/mame/video/twincobr.cpp
index 61951369a1b..ed15675d03d 100644
--- a/src/mame/video/twincobr.cpp
+++ b/src/mame/video/twincobr.cpp
@@ -24,11 +24,9 @@
TILE_GET_INFO_MEMBER(twincobr_state::get_bg_tile_info)
{
- int code, tile_number, color;
-
- code = m_bgvideoram16[tile_index+m_bg_ram_bank];
- tile_number = code & 0x0fff;
- color = (code & 0xf000) >> 12;
+ const u16 code = m_bgvideoram16[tile_index+m_bg_ram_bank];
+ const u32 tile_number = code & 0x0fff;
+ const u32 color = (code & 0xf000) >> 12;
SET_TILE_INFO_MEMBER(2,
tile_number,
color,
@@ -37,11 +35,9 @@ TILE_GET_INFO_MEMBER(twincobr_state::get_bg_tile_info)
TILE_GET_INFO_MEMBER(twincobr_state::get_fg_tile_info)
{
- int code, tile_number, color;
-
- code = m_fgvideoram16[tile_index];
- tile_number = (code & 0x0fff) | m_fg_rom_bank;
- color = (code & 0xf000) >> 12;
+ const u16 code = m_fgvideoram16[tile_index];
+ const u32 tile_number = (code & 0x0fff) | m_fg_rom_bank;
+ const u32 color = (code & 0xf000) >> 12;
SET_TILE_INFO_MEMBER(1,
tile_number,
color,
@@ -50,11 +46,9 @@ TILE_GET_INFO_MEMBER(twincobr_state::get_fg_tile_info)
TILE_GET_INFO_MEMBER(twincobr_state::get_tx_tile_info)
{
- int code, tile_number, color;
-
- code = m_txvideoram16[tile_index];
- tile_number = code & 0x07ff;
- color = (code & 0xf800) >> 11;
+ const u16 code = m_txvideoram16[tile_index];
+ const u32 tile_number = code & 0x07ff;
+ const u32 color = (code & 0xf800) >> 11;
SET_TILE_INFO_MEMBER(0,
tile_number,
color,
@@ -93,9 +87,9 @@ void twincobr_state::video_start()
twincobr_create_tilemaps();
- m_txvideoram16 = make_unique_clear<uint16_t[]>(m_txvideoram_size);
- m_fgvideoram16 = make_unique_clear<uint16_t[]>(m_fgvideoram_size);
- m_bgvideoram16 = make_unique_clear<uint16_t[]>(m_bgvideoram_size);
+ m_txvideoram16 = make_unique_clear<u16[]>(m_txvideoram_size);
+ m_fgvideoram16 = make_unique_clear<u16[]>(m_fgvideoram_size);
+ m_bgvideoram16 = make_unique_clear<u16[]>(m_bgvideoram_size);
m_display_on = 0;
@@ -135,140 +129,148 @@ WRITE_LINE_MEMBER(twincobr_state::flipscreen_w)
WRITE_LINE_MEMBER(twincobr_state::bg_ram_bank_w)
{
m_bg_ram_bank = state ? 0x1000 : 0x0000;
+ m_bg_tilemap->mark_all_dirty();
}
WRITE_LINE_MEMBER(twincobr_state::fg_rom_bank_w)
{
m_fg_rom_bank = state ? 0x1000 : 0x0000;
+ m_fg_tilemap->mark_all_dirty();
}
-WRITE16_MEMBER(twincobr_state::twincobr_txoffs_w)
+void twincobr_state::twincobr_txoffs_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_txoffs);
m_txoffs %= m_txvideoram_size;
}
-READ16_MEMBER(twincobr_state::twincobr_txram_r)
+u16 twincobr_state::twincobr_txram_r()
{
return m_txvideoram16[m_txoffs];
}
-WRITE16_MEMBER(twincobr_state::twincobr_txram_w)
+void twincobr_state::twincobr_txram_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_txvideoram16[m_txoffs]);
m_tx_tilemap->mark_tile_dirty(m_txoffs);
}
-WRITE16_MEMBER(twincobr_state::twincobr_bgoffs_w)
+void twincobr_state::twincobr_bgoffs_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_bgoffs);
m_bgoffs %= (m_bgvideoram_size >> 1);
}
-READ16_MEMBER(twincobr_state::twincobr_bgram_r)
+u16 twincobr_state::twincobr_bgram_r()
{
return m_bgvideoram16[m_bgoffs+m_bg_ram_bank];
}
-WRITE16_MEMBER(twincobr_state::twincobr_bgram_w)
+void twincobr_state::twincobr_bgram_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_bgvideoram16[m_bgoffs+m_bg_ram_bank]);
m_bg_tilemap->mark_tile_dirty((m_bgoffs+m_bg_ram_bank));
}
-WRITE16_MEMBER(twincobr_state::twincobr_fgoffs_w)
+void twincobr_state::twincobr_fgoffs_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_fgoffs);
m_fgoffs %= m_fgvideoram_size;
}
-READ16_MEMBER(twincobr_state::twincobr_fgram_r)
+u16 twincobr_state::twincobr_fgram_r()
{
return m_fgvideoram16[m_fgoffs];
}
-WRITE16_MEMBER(twincobr_state::twincobr_fgram_w)
+void twincobr_state::twincobr_fgram_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_fgvideoram16[m_fgoffs]);
m_fg_tilemap->mark_tile_dirty(m_fgoffs);
}
-WRITE16_MEMBER(twincobr_state::twincobr_txscroll_w)
+void twincobr_state::twincobr_txscroll_w(offs_t offset, u16 data, u16 mem_mask)
{
- if (offset == 0) {
+ if (offset == 0)
+ {
COMBINE_DATA(&m_txscrollx);
m_tx_tilemap->set_scrollx(0, m_txscrollx);
}
- else {
+ else
+ {
COMBINE_DATA(&m_txscrolly);
m_tx_tilemap->set_scrolly(0, m_txscrolly);
}
}
-WRITE16_MEMBER(twincobr_state::twincobr_bgscroll_w)
+void twincobr_state::twincobr_bgscroll_w(offs_t offset, u16 data, u16 mem_mask)
{
- if (offset == 0) {
+ if (offset == 0)
+ {
COMBINE_DATA(&m_bgscrollx);
m_bg_tilemap->set_scrollx(0, m_bgscrollx);
}
- else {
+ else
+ {
COMBINE_DATA(&m_bgscrolly);
m_bg_tilemap->set_scrolly(0, m_bgscrolly);
}
}
-WRITE16_MEMBER(twincobr_state::twincobr_fgscroll_w)
+void twincobr_state::twincobr_fgscroll_w(offs_t offset, u16 data, u16 mem_mask)
{
- if (offset == 0) {
+ if (offset == 0)
+ {
COMBINE_DATA(&m_fgscrollx);
m_fg_tilemap->set_scrollx(0, m_fgscrollx);
}
- else {
+ else
+ {
COMBINE_DATA(&m_fgscrolly);
m_fg_tilemap->set_scrolly(0, m_fgscrolly);
}
}
-WRITE16_MEMBER(twincobr_state::twincobr_exscroll_w)/* Extra unused video layer */
+void twincobr_state::twincobr_exscroll_w(offs_t offset, u16 data)/* Extra unused video layer */
{
if (offset == 0) logerror("PC - write %04x to unknown video scroll Y register\n",data);
else logerror("PC - write %04x to unknown video scroll X register\n",data);
}
/******************** Wardner interface to this hardware ********************/
-WRITE8_MEMBER(twincobr_state::wardner_txlayer_w)
+void twincobr_state::wardner_txlayer_w(offs_t offset, u8 data)
{
int shift = 8 * (offset & 1);
- twincobr_txoffs_w(space, offset / 2, data << shift, 0xff << shift);
+ twincobr_txoffs_w(offset / 2, data << shift, 0xff << shift);
}
-WRITE8_MEMBER(twincobr_state::wardner_bglayer_w)
+void twincobr_state::wardner_bglayer_w(offs_t offset, u8 data)
{
int shift = 8 * (offset & 1);
- twincobr_bgoffs_w(space, offset / 2, data << shift, 0xff << shift);
+ twincobr_bgoffs_w(offset / 2, data << shift, 0xff << shift);
}
-WRITE8_MEMBER(twincobr_state::wardner_fglayer_w)
+void twincobr_state::wardner_fglayer_w(offs_t offset, u8 data)
{
int shift = 8 * (offset & 1);
- twincobr_fgoffs_w(space, offset / 2, data << shift, 0xff << shift);
+ twincobr_fgoffs_w(offset / 2, data << shift, 0xff << shift);
}
-WRITE8_MEMBER(twincobr_state::wardner_txscroll_w)
+void twincobr_state::wardner_txscroll_w(offs_t offset, u8 data)
{
int shift = 8 * (offset & 1);
- twincobr_txscroll_w(space, offset / 2, data << shift, 0xff << shift);
+ twincobr_txscroll_w(offset / 2, data << shift, 0xff << shift);
}
-WRITE8_MEMBER(twincobr_state::wardner_bgscroll_w)
+void twincobr_state::wardner_bgscroll_w(offs_t offset, u8 data)
{
int shift = 8 * (offset & 1);
- twincobr_bgscroll_w(space, offset / 2, data << shift, 0xff << shift);
+ twincobr_bgscroll_w(offset / 2, data << shift, 0xff << shift);
}
-WRITE8_MEMBER(twincobr_state::wardner_fgscroll_w)
+void twincobr_state::wardner_fgscroll_w(offs_t offset, u8 data)
{
int shift = 8 * (offset & 1);
- twincobr_fgscroll_w(space, offset / 2, data << shift, 0xff << shift);
+ twincobr_fgscroll_w(offset / 2, data << shift, 0xff << shift);
}
-WRITE8_MEMBER(twincobr_state::wardner_exscroll_w)/* Extra unused video layer */
+void twincobr_state::wardner_exscroll_w(offs_t offset, u8 data)/* Extra unused video layer */
{
switch (offset)
{
@@ -279,37 +281,39 @@ WRITE8_MEMBER(twincobr_state::wardner_exscroll_w)/* Extra unused video layer */
}
}
-READ8_MEMBER(twincobr_state::wardner_videoram_r)
+u8 twincobr_state::wardner_videoram_r(offs_t offset)
{
int shift = 8 * (offset & 1);
- switch (offset/2) {
- case 0: return twincobr_txram_r(space,0,0xffff) >> shift;
- case 1: return twincobr_bgram_r(space,0,0xffff) >> shift;
- case 2: return twincobr_fgram_r(space,0,0xffff) >> shift;
+ switch (offset / 2)
+ {
+ case 0: return twincobr_txram_r() >> shift;
+ case 1: return twincobr_bgram_r() >> shift;
+ case 2: return twincobr_fgram_r() >> shift;
}
return 0;
}
-WRITE8_MEMBER(twincobr_state::wardner_videoram_w)
+void twincobr_state::wardner_videoram_w(offs_t offset, u8 data)
{
int shift = 8 * (offset & 1);
- switch (offset/2) {
- case 0: twincobr_txram_w(space,0,data << shift, 0xff << shift); break;
- case 1: twincobr_bgram_w(space,0,data << shift, 0xff << shift); break;
- case 2: twincobr_fgram_w(space,0,data << shift, 0xff << shift); break;
+ switch (offset / 2)
+ {
+ case 0: twincobr_txram_w(0,data << shift, 0xff << shift); break;
+ case 1: twincobr_bgram_w(0,data << shift, 0xff << shift); break;
+ case 2: twincobr_fgram_w(0,data << shift, 0xff << shift); break;
}
}
-READ8_MEMBER(twincobr_state::wardner_sprite_r)
+u8 twincobr_state::wardner_sprite_r(offs_t offset)
{
- uint16_t *spriteram16 = reinterpret_cast<uint16_t *>(m_spriteram8->live());
+ u16 *spriteram16 = reinterpret_cast<u16 *>(m_spriteram8->live());
int shift = (offset & 1) * 8;
return spriteram16[offset/2] >> shift;
}
-WRITE8_MEMBER(twincobr_state::wardner_sprite_w)
+void twincobr_state::wardner_sprite_w(offs_t offset, u8 data)
{
- uint16_t *spriteram16 = reinterpret_cast<uint16_t *>(m_spriteram8->live());
+ u16 *spriteram16 = reinterpret_cast<u16 *>(m_spriteram8->live());
if (offset & 1)
spriteram16[offset/2] = (spriteram16[offset/2] & 0x00ff) | (data << 8);
else
@@ -320,7 +324,7 @@ WRITE8_MEMBER(twincobr_state::wardner_sprite_w)
-void twincobr_state::twincobr_log_vram()
+void twincobr_state::log_vram()
{
#ifdef MAME_DEBUG
@@ -360,12 +364,12 @@ void twincobr_state::twincobr_log_vram()
}
-uint32_t twincobr_state::screen_update_toaplan0(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+u32 twincobr_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- twincobr_log_vram();
+ log_vram();
- uint16_t *buffered_spriteram16;
- uint32_t bytes;
+ u16 *buffered_spriteram16;
+ u32 bytes;
if (m_spriteram16 != nullptr)
{
buffered_spriteram16 = m_spriteram16->buffer();
@@ -373,7 +377,7 @@ uint32_t twincobr_state::screen_update_toaplan0(screen_device &screen, bitmap_in
}
else
{
- buffered_spriteram16 = reinterpret_cast<uint16_t *>(m_spriteram8->buffer());
+ buffered_spriteram16 = reinterpret_cast<u16 *>(m_spriteram8->buffer());
bytes = m_spriteram8->bytes();
}
diff --git a/src/osd/modules/debugger/osx/disassemblyviewer.mm b/src/osd/modules/debugger/osx/disassemblyviewer.mm
index 55dceb92729..5c9c1c8aa23 100644
--- a/src/osd/modules/debugger/osx/disassemblyviewer.mm
+++ b/src/osd/modules/debugger/osx/disassemblyviewer.mm
@@ -241,6 +241,7 @@
[super restoreConfigurationFromNode:node];
int const region = node->get_attribute_int("cpu", [dasmView selectedSubviewIndex]);
[dasmView selectSubviewAtIndex:region];
+ [window setTitle:[NSString stringWithFormat:@"Disassembly: %@", [dasmView selectedSubviewName]]];
[subviewButton selectItemAtIndex:[subviewButton indexOfItemWithTag:[dasmView selectedSubviewIndex]]];
[dasmView restoreConfigurationFromNode:node];
}
diff --git a/src/osd/modules/debugger/osx/memoryviewer.mm b/src/osd/modules/debugger/osx/memoryviewer.mm
index 0248cc87dbe..80d5434a826 100644
--- a/src/osd/modules/debugger/osx/memoryviewer.mm
+++ b/src/osd/modules/debugger/osx/memoryviewer.mm
@@ -188,6 +188,7 @@
[super restoreConfigurationFromNode:node];
int const region = node->get_attribute_int("memoryregion", [memoryView selectedSubviewIndex]);
[memoryView selectSubviewAtIndex:region];
+ [window setTitle:[NSString stringWithFormat:@"Memory: %@", [memoryView selectedSubviewName]]];
[subviewButton selectItemAtIndex:[subviewButton indexOfItemWithTag:[memoryView selectedSubviewIndex]]];
[memoryView restoreConfigurationFromNode:node];
}
diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/fs_xbr-lv3-noblend.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/fs_xbr-lv3-noblend.sc
index 8d65128f8fc..554c222db47 100644
--- a/src/osd/modules/render/bgfx/shaders/chains/xbr/fs_xbr-lv3-noblend.sc
+++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/fs_xbr-lv3-noblend.sc
@@ -166,11 +166,11 @@ void main()
// It uses CORNER_C if none of the others are defined.
#ifdef CORNER_A
vec4 interp_restriction_lv1 = interp_restriction_lv0;
-#elif CORNER_B
+#elif defined(CORNER_B)
vec4 interp_restriction_lv1 = (interp_restriction_lv0 * (neq(f,b) * neq(h,d) + eq(e,i) * neq(f,i4) * neq(h,i5) + eq(e,g) + eq(e,c)));
-#elif CORNER_D
+#elif defined(CORNER_D)
vec4 interp_restriction_lv1 = (interp_restriction_lv0 * (neq(f,b) * neq(h,d) + eq(e,i) * neq(f,i4) * neq(h,i5) + eq(e,g) + eq(e,c)) * (vec4(notEqual(f,f4)) * vec4(notEqual(f,i)) + vec4(notEqual(h,h5)) * vec4(notEqual(h,i)) + vec4(notEqual(h,g)) + vec4(notEqual(f,c)) + eq(b,c1) * eq(d,g0)));
-#elif CORNER_C
+#elif defined(CORNER_C)
vec4 interp_restriction_lv1 = (interp_restriction_lv0 * (neq(f,b) * neq(f,c) + neq(h,d) * neq(h,g) + eq(e,i) * (neq(f,f4) * neq(f,i4) + neq(h,h5) * neq(h,i5)) + eq(e,g) + eq(e,c)));
#endif
diff --git a/src/osd/modules/render/drawogl.cpp b/src/osd/modules/render/drawogl.cpp
index 98db62fdf1f..95345878cfd 100644
--- a/src/osd/modules/render/drawogl.cpp
+++ b/src/osd/modules/render/drawogl.cpp
@@ -2056,8 +2056,9 @@ static inline void copyline_palette16(uint32_t *dst, const uint16_t *src, int wi
for (x = 0; x < width; x++)
{
int srcpix = *src++;
+ uint32_t dstval = 0xff000000 | palette[srcpix];
for (int x2 = 0; x2 < xprescale; x2++)
- *dst++ = 0xff000000 | palette[srcpix];
+ *dst++ = dstval;
}
if (xborderpix)
*dst++ = 0xff000000 | palette[*--src];
@@ -2079,8 +2080,9 @@ static inline void copyline_palettea16(uint32_t *dst, const uint16_t *src, int w
for (x = 0; x < width; x++)
{
int srcpix = *src++;
+ uint32_t dstval = palette[srcpix];
for (int x2 = 0; x2 < xprescale; x2++)
- *dst++ = palette[srcpix];
+ *dst++ = dstval;
}
if (xborderpix)
*dst++ = palette[*--src];
@@ -2109,10 +2111,9 @@ static inline void copyline_rgb32(uint32_t *dst, const uint32_t *src, int width,
for (x = 0; x < width; x++)
{
rgb_t srcpix = *src++;
+ uint32_t dstval = 0xff000000 | palette[0x200 + srcpix.r()] | palette[0x100 + srcpix.g()] | palette[srcpix.b()];
for (int x2 = 0; x2 < xprescale; x2++)
- {
- *dst++ = 0xff000000 | palette[0x200 + srcpix.r()] | palette[0x100 + srcpix.g()] | palette[srcpix.b()];
- }
+ *dst++ = dstval;
}
if (xborderpix)
{
@@ -2129,11 +2130,9 @@ static inline void copyline_rgb32(uint32_t *dst, const uint32_t *src, int width,
for (x = 0; x < width; x++)
{
rgb_t srcpix = *src++;
-
+ uint32_t dstval = 0xff000000 | srcpix;
for (int x2 = 0; x2 < xprescale; x2++)
- {
- *dst++ = 0xff000000 | srcpix;
- }
+ *dst++ = dstval;
}
if (xborderpix)
*dst++ = 0xff000000 | *--src;
@@ -2161,8 +2160,9 @@ static inline void copyline_argb32(uint32_t *dst, const uint32_t *src, int width
for (x = 0; x < width; x++)
{
rgb_t srcpix = *src++;
+ uint32_t dstval = (srcpix & 0xff000000) | palette[0x200 + srcpix.r()] | palette[0x100 + srcpix.g()] | palette[srcpix.b()];
for (int x2 = 0; x2 < xprescale; x2++)
- *dst++ = (srcpix & 0xff000000) | palette[0x200 + srcpix.r()] | palette[0x100 + srcpix.g()] | palette[srcpix.b()];
+ *dst++ = dstval;
}
if (xborderpix)
{
@@ -2257,10 +2257,12 @@ static inline void copyline_yuy16_to_argb(uint32_t *dst, const uint16_t *src, in
uint16_t srcpix1 = *src++;
uint8_t cb = srcpix0 & 0xff;
uint8_t cr = srcpix1 & 0xff;
+ uint32_t dstval0 = ycc_to_rgb(palette[0x000 + (srcpix0 >> 8)], cb, cr);
+ uint32_t dstval1 = ycc_to_rgb(palette[0x000 + (srcpix1 >> 8)], cb, cr);
for (int x2 = 0; x2 < xprescale; x2++)
- *dst++ = ycc_to_rgb(palette[0x000 + (srcpix0 >> 8)], cb, cr);
+ *dst++ = dstval0;
for (int x2 = 0; x2 < xprescale; x2++)
- *dst++ = ycc_to_rgb(palette[0x000 + (srcpix1 >> 8)], cb, cr);
+ *dst++ = dstval1;
}
if (xborderpix)
{
@@ -2291,10 +2293,12 @@ static inline void copyline_yuy16_to_argb(uint32_t *dst, const uint16_t *src, in
uint16_t srcpix1 = *src++;
uint8_t cb = srcpix0 & 0xff;
uint8_t cr = srcpix1 & 0xff;
+ uint32_t dstval0 = ycc_to_rgb(srcpix0 >> 8, cb, cr);
+ uint32_t dstval1 = ycc_to_rgb(srcpix1 >> 8, cb, cr);
for (int x2 = 0; x2 < xprescale; x2++)
- *dst++ = ycc_to_rgb(srcpix0 >> 8, cb, cr);
+ *dst++ = dstval0;
for (int x2 = 0; x2 < xprescale; x2++)
- *dst++ = ycc_to_rgb(srcpix1 >> 8, cb, cr);
+ *dst++ = dstval1;
}
if (xborderpix)
{
diff --git a/src/tools/imgtool/filtbas.cpp b/src/tools/imgtool/filtbas.cpp
index c626fb25b86..10da0694844 100644
--- a/src/tools/imgtool/filtbas.cpp
+++ b/src/tools/imgtool/filtbas.cpp
@@ -116,6 +116,8 @@ static imgtoolerr_t basic_readfile(const basictokens *tokens,
destf.printf("%u ", (unsigned) line_number);
shift = 0x00;
+ in_string = false; // in case the last line didn't terminate a string
+
while((mem_stream->read(&b, 1) > 0) && (b != 0x00))
{
if (b == 0x22)
diff --git a/src/tools/unidasm.cpp b/src/tools/unidasm.cpp
index 81b9f448140..c668fcba82d 100644
--- a/src/tools/unidasm.cpp
+++ b/src/tools/unidasm.cpp
@@ -99,6 +99,7 @@ using util::BIT;
#include "cpu/mn10200/mn102dis.h"
#include "cpu/nanoprocessor/nanoprocessor_dasm.h"
#include "cpu/nec/necdasm.h"
+#include "cpu/ns32000/ns32000dasm.h"
#include "cpu/nuon/nuondasm.h"
#include "cpu/patinhofeio/patinho_feio_dasm.h"
#include "cpu/pdp1/pdp1dasm.h"
@@ -420,6 +421,7 @@ static const dasm_table_entry dasm_table[] =
{ "mn10200", le, 0, []() -> util::disasm_interface * { return new mn10200_disassembler; } },
{ "nanoprocessor", le, 0, []() -> util::disasm_interface * { return new hp_nanoprocessor_disassembler; } },
{ "nec", le, 0, []() -> util::disasm_interface * { return new nec_disassembler; } },
+ { "ns32000", le, 0, []() -> util::disasm_interface * { return new ns32000_disassembler; } },
{ "nuon", be, 0, []() -> util::disasm_interface * { return new nuon_disassembler; } },
{ "nsc8105", be, 0, []() -> util::disasm_interface * { return new m680x_disassembler(8105); } },
{ "patinho_feio", le, 0, []() -> util::disasm_interface * { return new patinho_feio_disassembler; } },