summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2020-11-02 12:11:43 +0100
committer Olivier Galibert <galibert@pobox.com>2020-11-02 12:12:11 +0100
commitb8c338858a101d14308c64c87b0f714db4f05326 (patch)
treea34dca21d603b98f5450d31868ce33a7e4c103b0
parentf4172ded3ec6f3b877ab813f6453d6d1907c1c00 (diff)
emumem: Simplify memory management. [O. Galibert]
API impact: - install_ram/rom/writeonly now requires a non-null pointer. If you want automatically managed ram, add it to a memory map, not in machine_start - install_*_bank now requires a memory_bank *, not a string - one can create memory banks outside of memory maps with memory_bank_creator - one can create memory shares outside of memory maps with memory_share_creator Memory maps impact: - ram ranges with overlapping addresses are not shared anymore. Use .share() - ram ranges touching each other are not merged anymore. Stay in your range Extra note: - there is no need to create a bank just to dynamically map some memory/rom. Just use install_rom/ram/writeonly
-rw-r--r--docs/source/techspecs/index.rst1
-rw-r--r--docs/source/techspecs/memory.rst603
-rw-r--r--src/devices/bus/a1bus/a1bus.cpp9
-rw-r--r--src/devices/bus/a1bus/a1bus.h4
-rw-r--r--src/devices/bus/a1bus/a1cassette.cpp2
-rw-r--r--src/devices/bus/a1bus/a1cffa.cpp2
-rw-r--r--src/devices/bus/abcbus/ram.cpp3
-rw-r--r--src/devices/bus/abcbus/ram.h2
-rw-r--r--src/devices/bus/abcbus/ssa.cpp5
-rw-r--r--src/devices/bus/abcbus/ssa.h6
-rw-r--r--src/devices/bus/acorn/atom/discpack.cpp7
-rw-r--r--src/devices/bus/acorn/atom/discpack.h2
-rw-r--r--src/devices/bus/acorn/system/32k.cpp7
-rw-r--r--src/devices/bus/acorn/system/32k.h1
-rw-r--r--src/devices/bus/acorn/system/8k.cpp5
-rw-r--r--src/devices/bus/acorn/system/8k.h1
-rw-r--r--src/devices/bus/adam/exp.cpp3
-rw-r--r--src/devices/bus/adam/exp.h2
-rw-r--r--src/devices/bus/adam/ram.cpp3
-rw-r--r--src/devices/bus/adam/ram.h2
-rw-r--r--src/devices/bus/bw2/ramcard.cpp5
-rw-r--r--src/devices/bus/bw2/ramcard.h2
-rw-r--r--src/devices/bus/c64/c128_partner.cpp6
-rw-r--r--src/devices/bus/c64/c128_partner.h2
-rw-r--r--src/devices/bus/c64/dqbb.cpp3
-rw-r--r--src/devices/bus/c64/dqbb.h4
-rw-r--r--src/devices/bus/c64/easyflash.cpp5
-rw-r--r--src/devices/bus/c64/easyflash.h2
-rw-r--r--src/devices/bus/c64/exp.cpp12
-rw-r--r--src/devices/bus/c64/exp.h8
-rw-r--r--src/devices/bus/c64/fcc.cpp1
-rw-r--r--src/devices/bus/c64/fcc.h8
-rw-r--r--src/devices/bus/c64/georam.cpp5
-rw-r--r--src/devices/bus/c64/georam.h2
-rw-r--r--src/devices/bus/c64/ide64.cpp6
-rw-r--r--src/devices/bus/c64/ide64.h2
-rw-r--r--src/devices/bus/c64/magic_formel.cpp5
-rw-r--r--src/devices/bus/c64/magic_formel.h2
-rw-r--r--src/devices/bus/c64/neoram.cpp2
-rw-r--r--src/devices/bus/c64/neoram.h4
-rw-r--r--src/devices/bus/c64/ocean.cpp8
-rw-r--r--src/devices/bus/c64/pagefox.cpp6
-rw-r--r--src/devices/bus/c64/pagefox.h2
-rw-r--r--src/devices/bus/c64/partner.cpp4
-rw-r--r--src/devices/bus/c64/partner.h2
-rw-r--r--src/devices/bus/c64/reu.cpp5
-rw-r--r--src/devices/bus/c64/reu.h2
-rw-r--r--src/devices/bus/c64/ross.cpp2
-rw-r--r--src/devices/bus/c64/std.cpp12
-rw-r--r--src/devices/bus/c64/westermann.cpp8
-rw-r--r--src/devices/bus/c64/xl80.cpp4
-rw-r--r--src/devices/bus/c64/xl80.h2
-rw-r--r--src/devices/bus/cbm2/24k.cpp3
-rw-r--r--src/devices/bus/cbm2/24k.h2
-rw-r--r--src/devices/bus/cbm2/exp.cpp11
-rw-r--r--src/devices/bus/cbm2/exp.h6
-rw-r--r--src/devices/bus/cbm2/std.cpp12
-rw-r--r--src/devices/bus/comx35/clm.cpp5
-rw-r--r--src/devices/bus/comx35/clm.h2
-rw-r--r--src/devices/bus/comx35/ram.cpp3
-rw-r--r--src/devices/bus/comx35/ram.h2
-rw-r--r--src/devices/bus/cpc/cpc_rom.cpp4
-rw-r--r--src/devices/bus/ecbbus/grip.cpp5
-rw-r--r--src/devices/bus/ecbbus/grip.h2
-rw-r--r--src/devices/bus/hp_dio/hp_dio.cpp10
-rw-r--r--src/devices/bus/hp_dio/hp_dio.h4
-rw-r--r--src/devices/bus/interpro/sr/sr.h4
-rw-r--r--src/devices/bus/isa/3c503.cpp8
-rw-r--r--src/devices/bus/isa/3c505.cpp2
-rw-r--r--src/devices/bus/isa/aha1542c.cpp2
-rw-r--r--src/devices/bus/isa/asc88.cpp4
-rw-r--r--src/devices/bus/isa/cga.cpp16
-rw-r--r--src/devices/bus/isa/chessmsr.cpp8
-rw-r--r--src/devices/bus/isa/chessmsr.h2
-rw-r--r--src/devices/bus/isa/ega.cpp2
-rw-r--r--src/devices/bus/isa/eis_hgb107x.cpp4
-rw-r--r--src/devices/bus/isa/hdc.cpp2
-rw-r--r--src/devices/bus/isa/isa.cpp10
-rw-r--r--src/devices/bus/isa/isa.h4
-rw-r--r--src/devices/bus/isa/lbaenhancer.cpp2
-rw-r--r--src/devices/bus/isa/mc1502_rom.cpp2
-rw-r--r--src/devices/bus/isa/mda.cpp22
-rw-r--r--src/devices/bus/isa/mufdc.cpp2
-rw-r--r--src/devices/bus/isa/p1_fdc.cpp2
-rw-r--r--src/devices/bus/isa/p1_hdc.cpp2
-rw-r--r--src/devices/bus/isa/p1_rom.cpp2
-rw-r--r--src/devices/bus/isa/pc1640_iga.cpp2
-rw-r--r--src/devices/bus/isa/pgc.cpp15
-rw-r--r--src/devices/bus/isa/pgc.h2
-rw-r--r--src/devices/bus/isa/side116.cpp8
-rw-r--r--src/devices/bus/isa/svga_cirrus.cpp4
-rw-r--r--src/devices/bus/isa/svga_s3.cpp8
-rw-r--r--src/devices/bus/isa/svga_trident.cpp2
-rw-r--r--src/devices/bus/isa/svga_tseng.cpp2
-rw-r--r--src/devices/bus/isa/vga.cpp2
-rw-r--r--src/devices/bus/isa/vga_ati.cpp6
-rw-r--r--src/devices/bus/isa/wdxt_gen.cpp2
-rw-r--r--src/devices/bus/lpci/northbridge.cpp4
-rw-r--r--src/devices/bus/macpds/macpds.cpp18
-rw-r--r--src/devices/bus/macpds/macpds.h4
-rw-r--r--src/devices/bus/macpds/pds_tpdfpd.cpp3
-rw-r--r--src/devices/bus/msx_slot/bunsetsu.cpp2
-rw-r--r--src/devices/bus/nubus/laserview.cpp4
-rw-r--r--src/devices/bus/nubus/nubus.cpp20
-rw-r--r--src/devices/bus/nubus/nubus.h4
-rw-r--r--src/devices/bus/nubus/nubus_48gc.cpp2
-rw-r--r--src/devices/bus/nubus/nubus_cb264.cpp2
-rw-r--r--src/devices/bus/nubus/nubus_image.cpp3
-rw-r--r--src/devices/bus/nubus/nubus_vikbw.cpp4
-rw-r--r--src/devices/bus/odyssey2/4in1.cpp2
-rw-r--r--src/devices/bus/odyssey2/chess.cpp2
-rw-r--r--src/devices/bus/odyssey2/homecomp.cpp2
-rw-r--r--src/devices/bus/odyssey2/ktaa.cpp2
-rw-r--r--src/devices/bus/odyssey2/rally.cpp4
-rw-r--r--src/devices/bus/odyssey2/rom.cpp4
-rw-r--r--src/devices/bus/odyssey2/slot.cpp9
-rw-r--r--src/devices/bus/odyssey2/slot.h17
-rw-r--r--src/devices/bus/pet/64k.cpp5
-rw-r--r--src/devices/bus/pet/64k.h2
-rw-r--r--src/devices/bus/pet/superpet.cpp5
-rw-r--r--src/devices/bus/pet/superpet.h2
-rw-r--r--src/devices/bus/plus4/exp.cpp4
-rw-r--r--src/devices/bus/plus4/exp.h8
-rw-r--r--src/devices/bus/plus4/std.cpp16
-rw-r--r--src/devices/bus/pofo/ccm.cpp6
-rw-r--r--src/devices/bus/pofo/ccm.h3
-rw-r--r--src/devices/bus/pofo/hpc104.cpp4
-rw-r--r--src/devices/bus/pofo/hpc104.h6
-rw-r--r--src/devices/bus/pofo/ram.cpp4
-rw-r--r--src/devices/bus/pofo/ram.h6
-rw-r--r--src/devices/bus/ql/rom.cpp8
-rw-r--r--src/devices/bus/ql/rom.h2
-rw-r--r--src/devices/bus/ql/sandy_superqboard.cpp5
-rw-r--r--src/devices/bus/ql/sandy_superqboard.h2
-rw-r--r--src/devices/bus/ql/std.cpp4
-rw-r--r--src/devices/bus/ql/trumpcard.cpp5
-rw-r--r--src/devices/bus/ql/trumpcard.h2
-rw-r--r--src/devices/bus/s100/dj2db.cpp5
-rw-r--r--src/devices/bus/s100/dj2db.h2
-rw-r--r--src/devices/bus/s100/mm65k16s.cpp3
-rw-r--r--src/devices/bus/s100/mm65k16s.h2
-rw-r--r--src/devices/bus/snes/event.cpp6
-rw-r--r--src/devices/bus/snes/upd.cpp18
-rw-r--r--src/devices/bus/vic10/exp.cpp13
-rw-r--r--src/devices/bus/vic10/exp.h6
-rw-r--r--src/devices/bus/vic10/std.cpp16
-rw-r--r--src/devices/bus/vic20/exp.cpp7
-rw-r--r--src/devices/bus/vic20/exp.h9
-rw-r--r--src/devices/bus/vic20/fe3.cpp4
-rw-r--r--src/devices/bus/vic20/fe3.h2
-rw-r--r--src/devices/bus/vic20/megacart.cpp3
-rw-r--r--src/devices/bus/vic20/megacart.h5
-rw-r--r--src/devices/bus/vic20/vic1110.cpp4
-rw-r--r--src/devices/bus/vic20/vic1110.h2
-rw-r--r--src/devices/bus/vic20/vic1111.cpp4
-rw-r--r--src/devices/bus/vic20/vic1111.h2
-rw-r--r--src/devices/bus/vic20/vic1210.cpp4
-rw-r--r--src/devices/bus/vic20/vic1210.h2
-rw-r--r--src/devices/bus/vic20/videopak.cpp7
-rw-r--r--src/devices/bus/vic20/videopak.h4
-rw-r--r--src/devices/bus/vip/vp570.cpp3
-rw-r--r--src/devices/bus/vip/vp570.h2
-rw-r--r--src/devices/bus/vip/vp590.cpp5
-rw-r--r--src/devices/bus/vip/vp590.h2
-rw-r--r--src/devices/bus/vtech/memexp/memory.cpp11
-rw-r--r--src/devices/bus/vtech/memexp/memory.h1
-rw-r--r--src/devices/bus/wangpc/emb.cpp5
-rw-r--r--src/devices/bus/wangpc/emb.h2
-rw-r--r--src/devices/bus/wangpc/lvc.cpp5
-rw-r--r--src/devices/bus/wangpc/lvc.h2
-rw-r--r--src/devices/bus/wangpc/mvc.cpp11
-rw-r--r--src/devices/bus/wangpc/mvc.h6
-rw-r--r--src/devices/bus/wangpc/rtc.cpp3
-rw-r--r--src/devices/bus/wangpc/rtc.h2
-rw-r--r--src/devices/bus/x68k/x68k_scsiext.cpp8
-rw-r--r--src/devices/cpu/dsp16/dsp16.cpp4
-rw-r--r--src/devices/cpu/m6805/m68705.cpp2
-rw-r--r--src/devices/cpu/m6805/m68hc05.cpp4
-rw-r--r--src/devices/machine/at28c16.cpp2
-rw-r--r--src/devices/machine/cs4031.cpp50
-rw-r--r--src/devices/machine/cs4031.h4
-rw-r--r--src/devices/machine/ds1386.cpp2
-rw-r--r--src/devices/machine/er1400.cpp2
-rw-r--r--src/devices/machine/er2055.cpp2
-rw-r--r--src/devices/machine/i82875p.cpp2
-rw-r--r--src/devices/machine/i8355.cpp2
-rw-r--r--src/devices/machine/mos6530n.cpp24
-rw-r--r--src/devices/machine/mos6530n.h10
-rw-r--r--src/devices/machine/rp5h01.cpp2
-rw-r--r--src/devices/machine/timekpr.cpp2
-rw-r--r--src/devices/machine/vt82c496.cpp143
-rw-r--r--src/devices/machine/vt82c496.h20
-rw-r--r--src/devices/machine/x2201.cpp4
-rw-r--r--src/devices/machine/x2212.cpp2
-rw-r--r--src/devices/sound/tms5110.cpp2
-rw-r--r--src/devices/video/ppu2c0x.cpp4
-rw-r--r--src/devices/video/t6963c.cpp2
-rw-r--r--src/emu/addrmap.cpp23
-rw-r--r--src/emu/devfind.cpp96
-rw-r--r--src/emu/devfind.h124
-rw-r--r--src/emu/diimage.cpp7
-rw-r--r--src/emu/diimage.h6
-rw-r--r--src/emu/dimemory.h2
-rw-r--r--src/emu/dirom.h2
-rw-r--r--src/emu/dirom.ipp6
-rw-r--r--src/emu/emufwd.h1
-rw-r--r--src/emu/emumem.cpp787
-rw-r--r--src/emu/emumem.h172
-rw-r--r--src/emu/emumem_hem.h8
-rw-r--r--src/emu/romload.cpp4
-rw-r--r--src/mame/audio/bally.cpp1
-rw-r--r--src/mame/audio/dcs.cpp10
-rw-r--r--src/mame/audio/dcs.h4
-rw-r--r--src/mame/audio/mario.cpp4
-rw-r--r--src/mame/audio/pinsnd88.cpp2
-rw-r--r--src/mame/drivers/3do.cpp2
-rw-r--r--src/mame/drivers/4enlinea.cpp2
-rw-r--r--src/mame/drivers/8080bw.cpp2
-rw-r--r--src/mame/drivers/a5105.cpp16
-rw-r--r--src/mame/drivers/a7150.cpp16
-rw-r--r--src/mame/drivers/aeroboto.cpp2
-rw-r--r--src/mame/drivers/alphasma.cpp2
-rw-r--r--src/mame/drivers/amiga.cpp2
-rw-r--r--src/mame/drivers/apc.cpp9
-rw-r--r--src/mame/drivers/apple2gs.cpp3
-rw-r--r--src/mame/drivers/apricotp.cpp11
-rw-r--r--src/mame/drivers/aristmk4.cpp4
-rw-r--r--src/mame/drivers/arsystems.cpp20
-rw-r--r--src/mame/drivers/asteroid.cpp14
-rw-r--r--src/mame/drivers/at.cpp7
-rw-r--r--src/mame/drivers/atari400.cpp27
-rw-r--r--src/mame/drivers/aussiebyte.cpp64
-rw-r--r--src/mame/drivers/b2m.cpp12
-rw-r--r--src/mame/drivers/beathead.cpp2
-rw-r--r--src/mame/drivers/blitz68k.cpp6
-rw-r--r--src/mame/drivers/blmbycar.cpp6
-rw-r--r--src/mame/drivers/bmcbowl.cpp2
-rw-r--r--src/mame/drivers/bnstars.cpp14
-rw-r--r--src/mame/drivers/btime.cpp6
-rw-r--r--src/mame/drivers/buggychl.cpp2
-rw-r--r--src/mame/drivers/bw12.cpp24
-rw-r--r--src/mame/drivers/bwidow.cpp6
-rw-r--r--src/mame/drivers/bzone.cpp34
-rw-r--r--src/mame/drivers/c128.cpp7
-rw-r--r--src/mame/drivers/c64.cpp7
-rw-r--r--src/mame/drivers/cabaret.cpp2
-rw-r--r--src/mame/drivers/calchase.cpp2
-rw-r--r--src/mame/drivers/calorie.cpp3
-rw-r--r--src/mame/drivers/cbm2.cpp29
-rw-r--r--src/mame/drivers/cham24.cpp9
-rw-r--r--src/mame/drivers/chinagat.cpp2
-rw-r--r--src/mame/drivers/chsuper.cpp2
-rw-r--r--src/mame/drivers/cninja.cpp12
-rw-r--r--src/mame/drivers/combatsc.cpp2
-rw-r--r--src/mame/drivers/compis.cpp6
-rw-r--r--src/mame/drivers/coolridr.cpp8
-rw-r--r--src/mame/drivers/crshrace.cpp2
-rw-r--r--src/mame/drivers/cv1k.cpp8
-rw-r--r--src/mame/drivers/dccons.cpp2
-rw-r--r--src/mame/drivers/ddenlovr.cpp10
-rw-r--r--src/mame/drivers/ddragon.cpp4
-rw-r--r--src/mame/drivers/deadang.cpp18
-rw-r--r--src/mame/drivers/dec0.cpp22
-rw-r--r--src/mame/drivers/dec8.cpp2
-rw-r--r--src/mame/drivers/decocass.cpp12
-rw-r--r--src/mame/drivers/dgn_beta.cpp1
-rw-r--r--src/mame/drivers/dgpix.cpp2
-rw-r--r--src/mame/drivers/diverboy.cpp4
-rw-r--r--src/mame/drivers/djboy.cpp4
-rw-r--r--src/mame/drivers/dkong.cpp38
-rw-r--r--src/mame/drivers/dreamwld.cpp4
-rw-r--r--src/mame/drivers/ec184x.cpp20
-rw-r--r--src/mame/drivers/elf.cpp6
-rw-r--r--src/mame/drivers/emu68k.cpp8
-rw-r--r--src/mame/drivers/eolith16.cpp2
-rw-r--r--src/mame/drivers/exidy.cpp3
-rw-r--r--src/mame/drivers/exidy440.cpp2
-rw-r--r--src/mame/drivers/exp85.cpp4
-rw-r--r--src/mame/drivers/famibox.cpp12
-rw-r--r--src/mame/drivers/fastfred.cpp2
-rw-r--r--src/mame/drivers/fm7.cpp3
-rw-r--r--src/mame/drivers/fmtowns.cpp2
-rw-r--r--src/mame/drivers/fruitpc.cpp2
-rw-r--r--src/mame/drivers/galaxian.cpp22
-rw-r--r--src/mame/drivers/galaxold.cpp4
-rw-r--r--src/mame/drivers/galivan.cpp13
-rw-r--r--src/mame/drivers/gamate.cpp6
-rw-r--r--src/mame/drivers/gamecom.cpp12
-rw-r--r--src/mame/drivers/gba.cpp11
-rw-r--r--src/mame/drivers/ghosteo.cpp8
-rw-r--r--src/mame/drivers/gimix.cpp2
-rw-r--r--src/mame/drivers/gottlieb.cpp20
-rw-r--r--src/mame/drivers/gridcomp.cpp3
-rw-r--r--src/mame/drivers/gticlub.cpp118
-rw-r--r--src/mame/drivers/harddriv.cpp2
-rw-r--r--src/mame/drivers/hec2hrp.cpp13
-rw-r--r--src/mame/drivers/hng64.cpp82
-rw-r--r--src/mame/drivers/hornet.cpp4
-rw-r--r--src/mame/drivers/hp3478a.cpp5
-rw-r--r--src/mame/drivers/ibm6580.cpp5
-rw-r--r--src/mame/drivers/igspoker.cpp2
-rw-r--r--src/mame/drivers/indigo.cpp4
-rw-r--r--src/mame/drivers/irobot.cpp2
-rw-r--r--src/mame/drivers/itech32.cpp28
-rw-r--r--src/mame/drivers/itech8.cpp9
-rw-r--r--src/mame/drivers/jackie.cpp2
-rw-r--r--src/mame/drivers/jaguar.cpp2
-rw-r--r--src/mame/drivers/jalmah.cpp14
-rw-r--r--src/mame/drivers/jr100.cpp6
-rw-r--r--src/mame/drivers/jtc.cpp29
-rw-r--r--src/mame/drivers/jupace.cpp6
-rw-r--r--src/mame/drivers/kangaroo.cpp2
-rw-r--r--src/mame/drivers/kinst.cpp6
-rw-r--r--src/mame/drivers/konamigs.cpp6
-rw-r--r--src/mame/drivers/kyocera.cpp88
-rw-r--r--src/mame/drivers/kyugo.cpp44
-rw-r--r--src/mame/drivers/lc80.cpp14
-rw-r--r--src/mame/drivers/leapster.cpp5
-rw-r--r--src/mame/drivers/leland.cpp19
-rw-r--r--src/mame/drivers/liberate.cpp2
-rw-r--r--src/mame/drivers/limenko.cpp9
-rw-r--r--src/mame/drivers/lisa.cpp4
-rw-r--r--src/mame/drivers/m20.cpp291
-rw-r--r--src/mame/drivers/m5.cpp60
-rw-r--r--src/mame/drivers/m72.cpp9
-rw-r--r--src/mame/drivers/macprtb.cpp3
-rw-r--r--src/mame/drivers/macpwrbk030.cpp6
-rw-r--r--src/mame/drivers/macquadra700.cpp6
-rw-r--r--src/mame/drivers/magtouch.cpp2
-rw-r--r--src/mame/drivers/mbc200.cpp4
-rw-r--r--src/mame/drivers/mbc55x.cpp6
-rw-r--r--src/mame/drivers/mc1000.cpp46
-rw-r--r--src/mame/drivers/mc1502.cpp3
-rw-r--r--src/mame/drivers/mcr.cpp23
-rw-r--r--src/mame/drivers/megadriv_acbl.cpp5
-rw-r--r--src/mame/drivers/megatech.cpp3
-rw-r--r--src/mame/drivers/megazone.cpp2
-rw-r--r--src/mame/drivers/mhavoc.cpp4
-rw-r--r--src/mame/drivers/micronic.cpp2
-rw-r--r--src/mame/drivers/midzeus.cpp2
-rw-r--r--src/mame/drivers/model3.cpp20
-rw-r--r--src/mame/drivers/monkey_king_3b.cpp2
-rw-r--r--src/mame/drivers/moo.cpp2
-rw-r--r--src/mame/drivers/mpu4vid.cpp8
-rw-r--r--src/mame/drivers/mpz80.cpp1
-rw-r--r--src/mame/drivers/mtouchxl.cpp4
-rw-r--r--src/mame/drivers/multigam.cpp60
-rw-r--r--src/mame/drivers/naomi.cpp8
-rw-r--r--src/mame/drivers/nc.cpp13
-rw-r--r--src/mame/drivers/neogeo.cpp5
-rw-r--r--src/mame/drivers/neogeocd.cpp8
-rw-r--r--src/mame/drivers/neopcb.cpp20
-rw-r--r--src/mame/drivers/nes.cpp3
-rw-r--r--src/mame/drivers/ngen.cpp5
-rw-r--r--src/mame/drivers/ngp.cpp6
-rw-r--r--src/mame/drivers/nightgal.cpp4
-rw-r--r--src/mame/drivers/nmk16.cpp4
-rw-r--r--src/mame/drivers/nwk-tr.cpp6
-rw-r--r--src/mame/drivers/octopus.cpp8
-rw-r--r--src/mame/drivers/offtwall.cpp4
-rw-r--r--src/mame/drivers/ojankohs.cpp10
-rw-r--r--src/mame/drivers/omegrace.cpp2
-rw-r--r--src/mame/drivers/opwolf.cpp6
-rw-r--r--src/mame/drivers/osi.cpp8
-rw-r--r--src/mame/drivers/pacman.cpp31
-rw-r--r--src/mame/drivers/palm.cpp4
-rw-r--r--src/mame/drivers/pc1500.cpp14
-rw-r--r--src/mame/drivers/pc8001.cpp12
-rw-r--r--src/mame/drivers/pc8401a.cpp23
-rw-r--r--src/mame/drivers/pcat_nit.cpp29
-rw-r--r--src/mame/drivers/pce220.cpp3
-rw-r--r--src/mame/drivers/pcm.cpp6
-rw-r--r--src/mame/drivers/pda600.cpp14
-rw-r--r--src/mame/drivers/pet.cpp7
-rw-r--r--src/mame/drivers/pingpong.cpp53
-rw-r--r--src/mame/drivers/pipedrm.cpp3
-rw-r--r--src/mame/drivers/playch10.cpp286
-rw-r--r--src/mame/drivers/poisk1.cpp13
-rw-r--r--src/mame/drivers/popeye.cpp15
-rw-r--r--src/mame/drivers/prestige.cpp6
-rw-r--r--src/mame/drivers/ps2.cpp4
-rw-r--r--src/mame/drivers/psychic5.cpp2
-rw-r--r--src/mame/drivers/rohga.cpp2
-rw-r--r--src/mame/drivers/rollext.cpp2
-rw-r--r--src/mame/drivers/scorpion.cpp2
-rw-r--r--src/mame/drivers/segas16b.cpp2
-rw-r--r--src/mame/drivers/segas32.cpp6
-rw-r--r--src/mame/drivers/seibuspi.cpp8
-rw-r--r--src/mame/drivers/socrates.cpp34
-rw-r--r--src/mame/drivers/srmp5.cpp4
-rw-r--r--src/mame/drivers/srmp6.cpp5
-rw-r--r--src/mame/drivers/ssv.cpp6
-rw-r--r--src/mame/drivers/starwars.cpp2
-rw-r--r--src/mame/drivers/subsino.cpp10
-rw-r--r--src/mame/drivers/suna8.cpp4
-rw-r--r--src/mame/drivers/supdrapo.cpp2
-rw-r--r--src/mame/drivers/sym1.cpp11
-rw-r--r--src/mame/drivers/symbolics.cpp3
-rw-r--r--src/mame/drivers/tandy2k.cpp1
-rw-r--r--src/mame/drivers/tceptor.cpp6
-rw-r--r--src/mame/drivers/tempest.cpp2
-rw-r--r--src/mame/drivers/tigeroad.cpp3
-rw-r--r--src/mame/drivers/tiki100.cpp3
-rw-r--r--src/mame/drivers/timex.cpp76
-rw-r--r--src/mame/drivers/tmc1800.cpp2
-rw-r--r--src/mame/drivers/trackfld.cpp12
-rw-r--r--src/mame/drivers/triforce.cpp2
-rw-r--r--src/mame/drivers/trs80m2.cpp2
-rw-r--r--src/mame/drivers/tsamurai.cpp4
-rw-r--r--src/mame/drivers/tubep.cpp2
-rw-r--r--src/mame/drivers/tumbleb.cpp8
-rw-r--r--src/mame/drivers/tunhunt.cpp12
-rw-r--r--src/mame/drivers/twin16.cpp13
-rw-r--r--src/mame/drivers/unico.cpp2
-rw-r--r--src/mame/drivers/v1050.cpp18
-rw-r--r--src/mame/drivers/vamphalf.cpp25
-rw-r--r--src/mame/drivers/vegaeo.cpp8
-rw-r--r--src/mame/drivers/vic10.cpp7
-rw-r--r--src/mame/drivers/videopkr.cpp4
-rw-r--r--src/mame/drivers/voyager.cpp4
-rw-r--r--src/mame/drivers/vtech1.cpp15
-rw-r--r--src/mame/drivers/williams.cpp2
-rw-r--r--src/mame/drivers/x68k.cpp3
-rw-r--r--src/mame/drivers/xor100.cpp36
-rw-r--r--src/mame/drivers/zaurus.cpp4
-rw-r--r--src/mame/drivers/zr107.cpp110
-rw-r--r--src/mame/includes/3do.h4
-rw-r--r--src/mame/includes/abc80.h4
-rw-r--r--src/mame/includes/abc80x.h12
-rw-r--r--src/mame/includes/armedf.h2
-rw-r--r--src/mame/includes/asteroid.h6
-rw-r--r--src/mame/includes/atarigt.h2
-rw-r--r--src/mame/includes/aussiebyte.h11
-rw-r--r--src/mame/includes/beathead.h4
-rw-r--r--src/mame/includes/blockout.h2
-rw-r--r--src/mame/includes/btoads.h14
-rw-r--r--src/mame/includes/bw12.h4
-rw-r--r--src/mame/includes/bzone.h3
-rw-r--r--src/mame/includes/cninja.h1
-rw-r--r--src/mame/includes/comx35.h4
-rw-r--r--src/mame/includes/cps3.h2
-rw-r--r--src/mame/includes/dec0.h1
-rw-r--r--src/mame/includes/decocass.h3
-rw-r--r--src/mame/includes/dgn_beta.h2
-rw-r--r--src/mame/includes/dkong.h4
-rw-r--r--src/mame/includes/dragon.h8
-rw-r--r--src/mame/includes/efdt.h2
-rw-r--r--src/mame/includes/fantland.h4
-rw-r--r--src/mame/includes/fromance.h6
-rw-r--r--src/mame/includes/fuukifg3.h4
-rw-r--r--src/mame/includes/gaelco3d.h2
-rw-r--r--src/mame/includes/galaxian.h3
-rw-r--r--src/mame/includes/galivan.h2
-rw-r--r--src/mame/includes/gamecom.h4
-rw-r--r--src/mame/includes/hec2hrp.h5
-rw-r--r--src/mame/includes/hng64.h8
-rw-r--r--src/mame/includes/itech32.h12
-rw-r--r--src/mame/includes/itech8.h3
-rw-r--r--src/mame/includes/jaguar.h2
-rw-r--r--src/mame/includes/konamigx.h8
-rw-r--r--src/mame/includes/kyocera.h12
-rw-r--r--src/mame/includes/kyugo.h3
-rw-r--r--src/mame/includes/leland.h6
-rw-r--r--src/mame/includes/lisa.h2
-rw-r--r--src/mame/includes/m92.h2
-rw-r--r--src/mame/includes/mac.h2
-rw-r--r--src/mame/includes/mcr.h6
-rw-r--r--src/mame/includes/megazone.h2
-rw-r--r--src/mame/includes/midtunit.h1
-rw-r--r--src/mame/includes/midvunit.h2
-rw-r--r--src/mame/includes/midyunit.h3
-rw-r--r--src/mame/includes/model3.h4
-rw-r--r--src/mame/includes/mpz80.h4
-rw-r--r--src/mame/includes/ms32.h16
-rw-r--r--src/mame/includes/mtx.h12
-rw-r--r--src/mame/includes/namcofl.h2
-rw-r--r--src/mame/includes/naomi.h4
-rw-r--r--src/mame/includes/nc.h3
-rw-r--r--src/mame/includes/neogeo.h5
-rw-r--r--src/mame/includes/nes.h4
-rw-r--r--src/mame/includes/offtwall.h4
-rw-r--r--src/mame/includes/ojankohs.h42
-rw-r--r--src/mame/includes/pacman.h3
-rw-r--r--src/mame/includes/pc8401a.h4
-rw-r--r--src/mame/includes/pingpong.h6
-rw-r--r--src/mame/includes/playch10.h27
-rw-r--r--src/mame/includes/popeye.h1
-rw-r--r--src/mame/includes/psikyo.h2
-rw-r--r--src/mame/includes/qix.h4
-rw-r--r--src/mame/includes/saturn.h2
-rw-r--r--src/mame/includes/scramble.h5
-rw-r--r--src/mame/includes/seta2.h8
-rw-r--r--src/mame/includes/sorcerer.h4
-rw-r--r--src/mame/includes/suna8.h6
-rw-r--r--src/mame/includes/taito_f3.h12
-rw-r--r--src/mame/includes/tandy2k.h4
-rw-r--r--src/mame/includes/taotaido.h2
-rw-r--r--src/mame/includes/tiki100.h4
-rw-r--r--src/mame/includes/tmc1800.h4
-rw-r--r--src/mame/includes/tmc600.h4
-rw-r--r--src/mame/includes/toaplan1.h4
-rw-r--r--src/mame/includes/trs80m2.h4
-rw-r--r--src/mame/includes/twin16.h1
-rw-r--r--src/mame/includes/unico.h6
-rw-r--r--src/mame/includes/v1050.h4
-rw-r--r--src/mame/includes/vsnes.h6
-rw-r--r--src/mame/includes/xor100.h6
-rw-r--r--src/mame/includes/zaxxon.h4
-rw-r--r--src/mame/machine/315_5195.cpp55
-rw-r--r--src/mame/machine/315_5195.h8
-rw-r--r--src/mame/machine/abc1600mac.cpp8
-rw-r--r--src/mame/machine/abc1600mac.h4
-rw-r--r--src/mame/machine/advision.cpp2
-rw-r--r--src/mame/machine/asteroid.cpp11
-rw-r--r--src/mame/machine/b2m.cpp134
-rw-r--r--src/mame/machine/bebox.cpp8
-rw-r--r--src/mame/machine/dgn_beta.cpp3
-rw-r--r--src/mame/machine/dragon.cpp8
-rw-r--r--src/mame/machine/galaxy.cpp3
-rw-r--r--src/mame/machine/gamecom.cpp2
-rw-r--r--src/mame/machine/hec2hrp.cpp1
-rw-r--r--src/mame/machine/hp48.cpp32
-rw-r--r--src/mame/machine/kc.cpp43
-rw-r--r--src/mame/machine/lviv.cpp6
-rw-r--r--src/mame/machine/m20_8086.cpp3
-rw-r--r--src/mame/machine/mac.cpp56
-rw-r--r--src/mame/machine/mc8123.cpp2
-rw-r--r--src/mame/machine/mega32x.cpp7
-rw-r--r--src/mame/machine/mega32x.h1
-rw-r--r--src/mame/machine/midtunit.cpp19
-rw-r--r--src/mame/machine/midyunit.cpp12
-rw-r--r--src/mame/machine/mtx.cpp72
-rw-r--r--src/mame/machine/nes.cpp6
-rw-r--r--src/mame/machine/ondra.cpp4
-rw-r--r--src/mame/machine/orion.cpp23
-rw-r--r--src/mame/machine/partner.cpp22
-rw-r--r--src/mame/machine/pc1350.cpp9
-rw-r--r--src/mame/machine/pecom.cpp8
-rw-r--r--src/mame/machine/playch10.cpp24
-rw-r--r--src/mame/machine/pmd85.cpp28
-rw-r--r--src/mame/machine/primo.cpp2
-rw-r--r--src/mame/machine/rmnimbus.cpp2
-rw-r--r--src/mame/machine/scramble.cpp9
-rw-r--r--src/mame/machine/special.cpp22
-rw-r--r--src/mame/machine/ti85.cpp2
-rw-r--r--src/mame/machine/vsnes.cpp22
-rw-r--r--src/mame/video/abc80.cpp3
-rw-r--r--src/mame/video/abc800.cpp4
-rw-r--r--src/mame/video/abc802.cpp3
-rw-r--r--src/mame/video/abc806.cpp7
-rw-r--r--src/mame/video/atarimo.cpp7
-rw-r--r--src/mame/video/atarimo.h19
-rw-r--r--src/mame/video/avgdvg.cpp4
-rw-r--r--src/mame/video/comx35.cpp2
-rw-r--r--src/mame/video/dgn_beta.cpp2
-rw-r--r--src/mame/video/fromance.cpp4
-rw-r--r--src/mame/video/igs017_igs031.cpp8
-rw-r--r--src/mame/video/ojankohs.cpp8
-rw-r--r--src/mame/video/qix.cpp3
-rw-r--r--src/mame/video/suna8.cpp94
-rw-r--r--src/mame/video/tc0150rod.cpp2
-rw-r--r--src/mame/video/tmc600.cpp3
-rw-r--r--src/mame/video/toaplan1.cpp15
-rw-r--r--src/mame/video/v1050.cpp3
-rw-r--r--src/mame/video/zaxxon.cpp3
565 files changed, 3674 insertions, 3585 deletions
diff --git a/docs/source/techspecs/index.rst b/docs/source/techspecs/index.rst
index baec3992140..0d7ddc8ce41 100644
--- a/docs/source/techspecs/index.rst
+++ b/docs/source/techspecs/index.rst
@@ -11,6 +11,7 @@ This section covers technical specifications useful to programmers working on MA
device_memory_interface
device_rom_interface
device_disasm_interface
+ memory
floppy
nscsi
luaengine
diff --git a/docs/source/techspecs/memory.rst b/docs/source/techspecs/memory.rst
new file mode 100644
index 00000000000..e760b004894
--- /dev/null
+++ b/docs/source/techspecs/memory.rst
@@ -0,0 +1,603 @@
+Emulated system memory and address spaces management
+====================================================
+
+1. Overview
+-----------
+
+The memory subsystem (emumem and addrmap) combines multiple functions
+useful for system emulation:
+
+* address bus decoding and dispatching with caching
+* static descriptions of an address map
+* ram allocation and registration for state saving
+* interaction with memory regions to access rom
+
+Devices create address spaces, e.g. decodable buses, through the
+device_memory_interface. The machine configuration sets up address
+maps to put in the address spaces, then the device can do read and
+writes through the bus.
+
+2. Basic concepts
+-----------------
+
+2.1 Address spaces
+~~~~~~~~~~~~~~~~~~
+
+An address space, implemented in the class **address_space**,
+represents an addressable bus with potentially multiple sub-devices
+connected requiring a decode. It has a number of data lines (8, 16,
+32 or 64) called data width, a number of address lines (1 to 32)
+called address width and an endianness. In addition an address shift
+allows for buses that have an atomic granularity different than a
+byte.
+
+Address space objects provide a series of methods for read and write
+access, and a second series of methods for dynamically changing the
+decode.
+
+
+2.2 Address maps
+~~~~~~~~~~~~~~~~
+
+An address map is a static description of the decode expected when
+using a bus. It connects to memory, other devices and methods, and is
+installed, usually at startup, in an address space. That description
+is stored in an **address_map** structure which is filled
+programatically.
+
+
+2.3 Shares, banks and regions
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Memory shares are allocated memory zones that can be put in multiple
+places in the same or different address spaces, and can also be
+directly accessed from devices.
+
+Memory banks are zones that indirect memory access, giving the
+possibility to dynamically and efficiently change where a zone
+actually points to.
+
+Memory regions are read-only memory zones in which roms are loaded.
+
+All of these have names allowing to access them.
+
+3. Memory objects
+-----------------
+
+3.1 Shares - memory_share
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+| class memory_share {
+| const std::string &name() const;
+| void \*ptr() const;
+| size_t bytes() const;
+| endianness_t endianness() const;
+| u8 bitwidth() const;
+| u8 bytewidth() const;
+| };
+
+A memory share is a named allocated memory zone that is automatically
+saved in save states and can be mapped in address spaces. It is the
+standard container for memory that is shared between spaces, but also
+shared between an emulated cpu and a driver. As such one has easy
+access to its contents from the driver class.
+
+| required_shared_ptr<uNN> m_share_ptr;
+| optional_shared_ptr<uNN> m_share_ptr;
+| required_shared_ptr_array<uNN, count> m_share_ptr_array;
+| optional_shared_ptr_array<uNN, count> m_share_ptr_array;
+|
+| [device constructor] m_share_ptr(\*this, "name"),
+| [device constructor] m_share_ptr_array(\*this, "name%u", 0U),
+
+At the device level, a pointer to the memory zone can easily be
+retrieved by building one of these four finders. Note that like for
+every finder calling target() on the finder gives you the memory_share
+object.
+
+| memory_share_creator<uNN> m_share;
+|
+| [device constructor] m_share(\*this, "name", size, endianness),
+
+A memory share can be created if it doesn't exist in a memory map
+through that creator class. If it already exists it is just
+retrieved. That class behaves like a pointer but also has the share()
+method to get th memory_share object and the bytes(), endianness(),
+bitwidth() and bytewidth() methods for share information.
+
+| memory_share \*memshare(string tag) const;
+
+The memshare device method retrieves a memory share by name. Beware
+that the lookup can be expensive, prefer finders instead.
+
+3.2 Banks - memory_bank
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+| class memory_bank {
+| const std::string &tag() const;
+| int entry() const;
+| void set_entry(int entrynum);
+| void configure_entry(int entrynum, void \*base);
+| void configure_entries(int startentry, int numentry, void \*base, offs_t stride);
+| void set_base(void \*base);
+| void \*base() const;
+| };
+
+A memory bank is a named memory zone indirection that can be mapped in
+address spaces. It points to nullptr when created. configure_entry
+allows to set a relationship between an entry number and a base
+pointer. configure_entries does the same for multiple consecutive
+entries spanning a memory zone. Alternatively set_base sets the base
+for entry 0 and selects it.
+
+set_entry allows to dynamically and efficiently select the current
+active entry, entry() gets that selection back, and base() gets the
+assotiated base pointer.
+
+| required_memory_bank m_bank;
+| optional_memory_bank m_bank;
+| required_memory_bank_array<count> m_bank_array;
+| optional_memory_bank_array<count> m_bank_array;
+|
+| [device constructor] m_bank(\*this, "name"),
+| [device constructor] m_bank_array(\*this, "name%u", 0U),
+
+At the device level, a pointer to the memory bank object can easily be
+retrieved by building one of these four finders.
+
+| memory_bank_creator m_bank;
+|
+| [device constructor] m_bank(\*this, "name"),
+
+A memory share can be created if it doesn't exist in a memory map
+through that creator class. If it already exists it is just
+retrieved.
+
+| memory_bank \*membank(string tag) const;
+
+The memshare device method retrieves a memory share by name. Beware
+that the lookup can be expensive, prefer finders instead.
+
+
+3.3 Regions - memory_region
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+| class memory_bank {
+| u8 \*base();
+| u8 \*end();
+| u32 bytes() const;
+| const std::string &name() const;
+| endianness_t endianness() const;
+| u8 bitwidth() const;
+| u8 bytewidth() const;
+| u8 &as_u8(offs_t offset = 0);
+| u16 &as_u16(offs_t offset = 0);
+| u32 &as_u32(offs_t offset = 0);
+| u64 &as_u64(offs_t offset = 0);
+| }
+
+A region is used to store readonly data like roms or the result of
+fixed decryptions. Their contents are not saved, which is why they
+should not being written to from the emulated system. They don't
+really have an intrinsic width (base() returns an u8 \* always), which
+is historical and pretty much unfixable at this point. The as_*
+methods allow for accessing them at a given width.
+
+| required_memory_region m_region;
+| optional_memory_region m_region;
+| required_memory_region_array<count> m_region_array;
+| optional_memory_region_array<count> m_region_array;
+|
+| [device constructor] m_region(\*this, "name"),
+| [device constructor] m_region_array(\*this, "name%u", 0U),
+
+At the device level, a pointer to the memory region object can easily be
+retrieved by building one of these four finders.
+
+| memory_region \*memregion(string tag) const;
+
+The memshare device method retrieves a memory share by name. Beware
+that the lookup can be expensive, prefer finders instead.
+
+
+4. Address maps API
+-------------------
+
+4.1 General API structure
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+An address map is a method of a device which fills an **address_map**
+structure, usually called **map**, passed by reference. The method
+then can set some global configuration through specific methods and
+then provide address range-oriented entries which indicate what should
+happen when a specific range is accessed.
+
+The general syntax for entries uses method chaining:
+
+| map(start, end).handler(...).handler_qualifier(...).range_qualifier();
+
+The values start and end define the range, the handler() block defines
+how the access is handled, the handler_qualifier() block specifies
+some aspects of the handler (memory sharing for instance) and the
+range_qualifier() block refines the range (mirroring, masking, byte
+selection...).
+
+The map follows a "last one wins" principle, where the last one is
+selected when multiple handlers match a given address.
+
+
+4.2 Global configurations
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+4.2.1 Global masking
+''''''''''''''''''''
+
+| map.global_mask(offs_t mask);
+
+Allows to indicates a mask to be applied to all addresses when
+accessing the space that map is installed in.
+
+
+4.2.2 Returned value on unmapped/nop-ed read
+''''''''''''''''''''''''''''''''''''''''''''
+
+| map.unmap_value_low();
+| map.unmap_value_high();
+| map.unmap_value(u8 value);
+
+Sets the value to return on reads to an unmapped or nopped-out
+address. Low means 0, high ~0.
+
+
+4.3 Handler setting
+~~~~~~~~~~~~~~~~~~~
+
+4.3.1 Method on the current device
+''''''''''''''''''''''''''''''''''
+
+| (...).r(FUNC(my_device::read_method))
+| (...).w(FUNC(my_device::write_method))
+| (...).rw(FUNC(my_device::read_method), FUNC(my_device::write_method))
+|
+| uNN my_device::read_method(address_space &space, offs_t offset, uNN mem_mask)
+| uNN my_device::read_method(address_space &space, offs_t offset)
+| uNN my_device::read_method(address_space &space)
+| uNN my_device::read_method(offs_t offset, uNN mem_mask)
+| uNN my_device::read_method(offs_t offset)
+| uNN my_device::read_method()
+|
+| void my_device::write_method(address_space &space, offs_t offset, uNN data, uNN mem_mask)
+| void my_device::write_method(address_space &space, offs_t offset, uNN data)
+| void my_device::write_method(address_space &space, uNN data)
+| void my_device::write_method(offs_t offset, uNN data, uNN mem_mask)
+| void my_device::write_method(offs_t offset, uNN data)
+| void my_device::write_method(uNN data)
+
+Sets a method of the current device or driver to read, write or both
+for the current entry. The prototype of the method can take multiple
+forms making some elements optional. uNN represents u8, u16, u32 or
+u64 depending on the data width of the handler. The handler can be
+less wide than the bus itself (for instance a 8-bits device on a
+32-bits bus).
+
+The offset passed in is built from the access address. It starts at
+zero at the start of the range, and increments for each uNN unit. An
+u8 handler will get an offset in bytes, an u32 one in double words.
+The mem_mask has its bits set where the accessors actually drives the
+bit. It's usually built in byte units, but in some cases of i/o chips
+ports with per-bit direction registers the resolution can be at the
+bit level.
+
+
+4.3.2 Method on a different device
+''''''''''''''''''''''''''''''''''
+
+| (...).r(m_other_device, FUNC(other_device::read_method))
+| (...).r("other-device-tag", FUNC(other_device::read_method))
+| (...).w(m_other_device, FUNC(other_device::write_method))
+| (...).w("other-device-tag", FUNC(other_device::write_method))
+| (...).rw(m_other_device, FUNC(other_device::read_method), FUNC(other_device::write_method))
+| (...).rw("other-device-tag", FUNC(other_device::read_method), FUNC(other_device::write_method))
+
+Sets a method of another device, designated by a finder
+(required_device or optional_device) or its tag, to read, write or
+both for the current entry.
+
+
+4.3.3 Lambda function
+'''''''''''''''''''''
+
+| (...).lr{8,16,32,64}(FUNC([...](address_space &space, offs_t offset, uNN mem_mask) -> uNN { ... }))
+| (...).lr{8,16,32,64}([...](address_space &space, offs_t offset, uNN mem_mask) -> uNN { ... }, "name")
+| (...).lw{8,16,32,64}(FUNC([...](address_space &space, offs_t offset, uNN data, uNN mem_mask) -> void { ... }))
+| (...).lw{8,16,32,64}([...](address_space &space, offs_t offset, uNN data, uNN mem_mask) -> void { ... }, "name")
+| (...).lrw{8,16,32,64}(FUNC(read), FUNC(write))
+| (...).lrw{8,16,32,64}(read, "name_r", write, "name_w")
+
+Sets a lambda called on read, write or both. The lambda prototype can
+be any of the 6 available for methods. One can either use FUNC() over
+the whole lambda or provide a name after the lambda definition. The
+number is the data width of the access, e.g. the NN.
+
+
+4.3.4 Direct memory access
+''''''''''''''''''''''''''
+
+| (...).rom()
+| (...).writeonly()
+| (...).ram()
+
+Selects the range to access a memory zone as readonly, writeonly or
+readwrite respectively. Specific handle qualifiers allow to tell
+where this memory zone should be. There are two cases when no
+qualifier is acceptable:
+
+* ram() gives an anonymous ram zone not accessibles outside of the
+ address space.
+
+* rom() when the memory map is used in an AS_PROGRAM
+ space of a (cpu) device which names is also the name of a region.
+ Then the memory zone points to that region at the offset
+ corresponding to the start of the zone.
+
+| (...).rom().region("name", offset)
+
+The region qualifier allows to make a readonly zone point to the
+contents of a given region at a given offset.
+
+| (...).rom().share("name")
+| (...).writeonly.share("name")
+| (...).ram().share("name")
+
+The share qualifier allow to make the zone point to a shared memory
+region defined by its name. If the region is present in multiple
+spaces the size, the bus width and if the bus is more than byte-wide
+the endianness must match.
+
+
+4.3.5 Bank access
+'''''''''''''''''
+
+| (...).bankr("name")
+| (...).bankw("name")
+| (...).bankrw("name")
+
+Sets the range to point at the contents of a bank is read, write or
+readwrite mode.
+
+
+4.3.6 Port access
+'''''''''''''''''
+
+| (...).portr("name")
+| (...).portw("name")
+| (...).portrw("name")
+
+Sets the range to point at an i/o port.
+
+
+4.3.7 Dropped access
+''''''''''''''''''''
+
+| (...).nopr()
+| (...).nopw()
+| (...).noprw()
+
+Sets the range to drop the access without logging. When reading, the
+unmap value is returned.
+
+
+4.3.8 Unmapped access
+'''''''''''''''''''''
+
+| (...).unmapr()
+| (...).unmapw()
+| (...).unmaprw()
+
+Sets the range to drop the access with logging. When reading, the
+unmap value is returned.
+
+
+4.3.9 Subdevice mapping
+'''''''''''''''''''''''
+
+| (...).m(m_other_device, FUNC(other_device::map_method))
+| (...).m("other-device-tag", FUNC(other_device::map_method))
+
+Includes a device-defined submap. The start of the range indicates
+where the address zero of the submap ends up, and the end of the range
+clips the submap if needed. Note that range qualifiers (defined
+later) apply.
+
+Currently, only handlers are allowed in submaps and not memory zones
+or banks.
+
+
+4.4 Range qualifiers
+~~~~~~~~~~~~~~~~~~~~
+
+4.4.1 Mirroring
+'''''''''''''''
+
+| (...).mirror(mask)
+
+Duplicate the range on the addresses reachable by setting any of the 1
+bits present in mask. For instance, a range 0-0x1f with mask 0x300
+will be present on 0-0x1f, 0x100-0x11f, 0x200-0x21f and 0x300-0x31f.
+The addresses passed in to the handler stay in the 0-0x1f range, the
+mirror bits are not seen.
+
+
+4.4.2 Masking
+'''''''''''''
+
+| (...).mask(mask)
+
+Only valid with handlers, the address will be masked with the mask
+before being passed to the handler.
+
+
+4.4.3 Selection
+'''''''''''''''
+
+| (...).select(mask)
+
+Only valid with handlers, the range will be mirrored as with mirror,
+but the mirror address bits are kept in the offset passed to the
+handler when it is called. This is useful for devices like sound
+chips where the low bits of the address select a function and the high
+bits a voice number.
+
+
+4.4.4 Sub-unit selection
+''''''''''''''''''''''''
+
+| (...).umask16(16-bits mask)
+| (...).umask32(32-bits mask)
+| (...).umask64(64-bits mask)
+
+Only valid with handlers and submaps, selects which data lines of the
+bus are actually connected to the handler or the device. The actual
+device with should be a multiple of a byte, e.g. the mask is a series
+of 00 and ff. The offset will be adjusted accordingly, so that a
+difference of 1 means the next handled unit in the access.
+
+IF the mask is narrower than the bus width, the mask is replicated in
+the upper lines.
+
+
+4.4.5 Chip select handling on sub-unit
+''''''''''''''''''''''''''''''''''''''
+
+| (...).cselect(16/32/64)
+
+When a device is connected to part of the bus, like a byte on a
+16-bits bus, the target handler is only activated when that part is
+actually accessed. In some cases, very often byte access on a 68000
+16-bits bus, the actual hardware only checks the word address and not
+if the correct byte is accessed. cswidth allows to tell the memory
+system to trigger the handler if a wider part of the bus is accessed.
+The parameter is that trigger width (would be 16 in the 68000 case).
+
+
+5. Address space dynamic mapping API
+------------------------------------
+
+5.1 General API structure
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+A series of methods allow to change the bus decoding of an address
+space on the fly. They're powerful but have some issues:
+* changing the mappings repeateadly can be slow
+* the address space state is not saved in the saved states, so it has to be rebuilt after state load
+* they can be hidden anywhere rather that be grouped in an address map, which can be less readable
+
+The methods, rather than decomposing the information in handler,
+handler qualifier and range qualifier puts them all together as method
+parameters. To make things a little more readable lots of them are
+optional though, the optional ones being written in italics.
+
+
+5.2 Handler mapping
+~~~~~~~~~~~~~~~~~~~
+| uNN my_device::read_method(address_space &space, offs_t offset, uNN mem_mask)
+| uNN my_device::read_method_m(address_space &space, offs_t offset)
+| uNN my_device::read_method_mo(address_space &space)
+| uNN my_device::read_method_s(offs_t offset, uNN mem_mask)
+| uNN my_device::read_method_sm(offs_t offset)
+| uNN my_device::read_method_smo()
+|
+| void my_device::write_method(address_space &space, offs_t offset, uNN data, uNN mem_mask)
+| void my_device::write_method_m(address_space &space, offs_t offset, uNN data)
+| void my_device::write_method_mo(address_space &space, uNN data)
+| void my_device::write_method_s(offs_t offset, uNN data, uNN mem_mask)
+| void my_device::write_method_sm(offs_t offset, uNN data)
+| void my_device::write_method_smo(uNN data)
+|
+| readNN_delegate (device, FUNC(read_method))
+| readNNm_delegate (device, FUNC(read_method_m))
+| readNNmo_delegate (device, FUNC(read_method_mo))
+| readNNs_delegate (device, FUNC(read_method_s))
+| readNNsm_delegate (device, FUNC(read_method_sm))
+| readNNsmo_delegate(device, FUNC(read_method_smo))
+|
+| writeNN_delegate (device, FUNC(write_method))
+| writeNNm_delegate (device, FUNC(write_method_m))
+| writeNNmo_delegate (device, FUNC(write_method_mo))
+| writeNNs_delegate (device, FUNC(write_method_s))
+| writeNNsm_delegate (device, FUNC(write_method_sm))
+| writeNNsmo_delegate(device, FUNC(write_method_smo))
+
+To be added to a map, a method call and the device it is called onto
+have to be wrapped in the appropriate delegate type. There are 12
+types, for read and for write and for all six possible prototypes.
+Note that as all delegates they can also wrap lambdas.
+
+| space.install_read_handler(addrstart, addrend, read_delegate, *unitmask*, *cswidth*)
+| space.install_read_handler(addrstart, addrend, addrmask, addrmirror, addrselect, read_delegate, *unitmask*, *cswidth*)
+| space.install_write_handler(addrstart, addrend, write_delegate, *unitmask*, *cswidth*)
+| space.install_write_handler(addrstart, addrend, addrmask, addrmirror, addrselect, write_delegate, *unitmask*, *cswidth*)
+| space.install_readwrite_handler(addrstart, addrend, read_delegate, write_delegate, *unitmask*, *cswidth*)
+| space.install_readwrite_handler(addrstart, addrend, addrmask, addrmirror, addrselect, read_delegate, write_delegate, *unitmask*, *cswidth*)
+
+These six methods allow to install delegate-wrapped handlers in a live
+address space. either plain of with mask, mirror and select. In the
+readwrite case both delegates must be of the same flavor (smo stuff)
+to avoid a combinatorial explosion of method types.
+
+5.3 Direct memory range mapping
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+| space.install_rom(addrstart, addrend, void \*pointer)
+| space.install_rom(addrstart, addrend, addrmirror, void \*pointer)
+| space.install_writeonly(addrstart, addrend, void \*pointer)
+| space.install_writeonly(addrstart, addrend, addrmirror, void \*pointer)
+| space.install_ram(addrstart, addrend, void \*pointer)
+| space.install_ram(addrstart, addrend, addrmirror, void \*pointer)
+
+Installs a memory block in an address space, with or without mirror.
+rom is readonly, ram is read/write, writeonly is write only. The
+pointer must be non-null, this method will not allocate the memory.
+
+5.4 Bank mapping
+~~~~~~~~~~~~~~~~
+| space.install_read_bank(addrstart, addrend, memory_bank \*bank)
+| space.install_read_bank(addrstart, addrend, addrmirror, memory_bank \*bank)
+| space.install_write_bank(addrstart, addrend, memory_bank \*bank)
+| space.install_write_bank(addrstart, addrend, addrmirror, memory_bank \*bank)
+| space.install_readwrite_bank(addrstart, addrend, memory_bank \*bank)
+| space.install_readwrite_bank(addrstart, addrend, addrmirror, memory_bank \*bank)
+
+Install for reading, writing or both an existing memory bank in an
+address space.
+
+5.5 Port mapping
+~~~~~~~~~~~~~~~~
+| space.install_read_port(addrstart, addrend, const char \*rtag)
+| space.install_read_port(addrstart, addrend, addrmirror, const char \*rtag)
+| space.install_write_port(addrstart, addrend, const char \*wtag)
+| space.install_write_port(addrstart, addrend, addrmirror, const char \*wtag)
+| space.install_readwrite_port(addrstart, addrend, const char \*rtag, const char \*wtag)
+| space.install_readwrite_port(addrstart, addrend, addrmirror, const char \*rtag, const char \*wtag)
+
+Install read, write or both ports by name.
+
+5.6 Dropped accesses
+~~~~~~~~~~~~~~~~~~~~
+| space.nop_read(addrstart, addrend, *addrmirror*)
+| space.nop_write(addrstart, addrend, *addrmirror*)
+| space.nop_readwrite(addrstart, addrend, *addrmirror*)
+
+Drops the accesses for a given range with an optional mirror.
+
+5.7 Unmapped accesses
+~~~~~~~~~~~~~~~~~~~~~
+| space.unmap_read(addrstart, addrend, *addrmirror*)
+| space.unmap_write(addrstart, addrend, *addrmirror*)
+| space.unmap_readwrite(addrstart, addrend, *addrmirror*)
+
+Unmaps the accesses (e.g. logs the access as unmapped) for a given
+range with an optional mirror.
+
+5.8 Device map installation
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+| space.install_device(addrstart, addrend, device, map, *unitmask*, *cswidth*)
+
+Install a device address with an address map in a space.
diff --git a/src/devices/bus/a1bus/a1bus.cpp b/src/devices/bus/a1bus/a1bus.cpp
index cafc399b00f..43a05b892ab 100644
--- a/src/devices/bus/a1bus/a1bus.cpp
+++ b/src/devices/bus/a1bus/a1bus.cpp
@@ -129,11 +129,10 @@ void a1bus_device::install_device(offs_t start, offs_t end, read8sm_delegate rha
m_space->install_readwrite_handler(start, end, rhandler, whandler);
}
-void a1bus_device::install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data)
+void a1bus_device::install_bank(offs_t start, offs_t end, uint8_t *data)
{
// printf("install_bank: %s @ %x->%x\n", tag, start, end);
- m_space->install_readwrite_bank(start, end, tag);
- machine().root_device().membank(siblingtag(tag).c_str())->set_base(data);
+ m_space->install_ram(start, end, data);
}
// interrupt request from a1bus card
@@ -195,7 +194,7 @@ void device_a1bus_card_interface::install_device(offs_t start, offs_t end, read8
m_a1bus->install_device(start, end, rhandler, whandler);
}
-void device_a1bus_card_interface::install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data)
+void device_a1bus_card_interface::install_bank(offs_t start, offs_t end, uint8_t *data)
{
- m_a1bus->install_bank(start, end, tag, data);
+ m_a1bus->install_bank(start, end, data);
}
diff --git a/src/devices/bus/a1bus/a1bus.h b/src/devices/bus/a1bus/a1bus.h
index 8c354b89f43..d1d4860113d 100644
--- a/src/devices/bus/a1bus/a1bus.h
+++ b/src/devices/bus/a1bus/a1bus.h
@@ -69,7 +69,7 @@ public:
void set_nmi_line(int state);
void install_device(offs_t start, offs_t end, read8sm_delegate rhandler, write8sm_delegate whandler);
- void install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data);
+ void install_bank(offs_t start, offs_t end, uint8_t *data);
DECLARE_WRITE_LINE_MEMBER( irq_w );
DECLARE_WRITE_LINE_MEMBER( nmi_w );
@@ -118,7 +118,7 @@ protected:
void lower_slot_nmi() { m_a1bus->set_nmi_line(CLEAR_LINE); }
void install_device(offs_t start, offs_t end, read8sm_delegate rhandler, write8sm_delegate whandler);
- void install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data);
+ void install_bank(offs_t start, offs_t end, uint8_t *data);
device_a1bus_card_interface(const machine_config &mconfig, device_t &device);
diff --git a/src/devices/bus/a1bus/a1cassette.cpp b/src/devices/bus/a1bus/a1cassette.cpp
index 9ab13fb755d..f486105c6e5 100644
--- a/src/devices/bus/a1bus/a1cassette.cpp
+++ b/src/devices/bus/a1bus/a1cassette.cpp
@@ -76,7 +76,7 @@ a1bus_cassette_device::a1bus_cassette_device(const machine_config &mconfig, devi
void a1bus_cassette_device::device_start()
{
install_device(0xc000, 0xc0ff, read8sm_delegate(*this, FUNC(a1bus_cassette_device::cassette_r)), write8sm_delegate(*this, FUNC(a1bus_cassette_device::cassette_w)));
- install_bank(0xc100, 0xc1ff, "bank_a1cas", &m_rom[0]);
+ install_bank(0xc100, 0xc1ff, &m_rom[0]);
save_item(NAME(m_cassette_output_flipflop));
}
diff --git a/src/devices/bus/a1bus/a1cffa.cpp b/src/devices/bus/a1bus/a1cffa.cpp
index 4d7f020c030..5656509a62d 100644
--- a/src/devices/bus/a1bus/a1cffa.cpp
+++ b/src/devices/bus/a1bus/a1cffa.cpp
@@ -69,7 +69,7 @@ a1bus_cffa_device::a1bus_cffa_device(const machine_config &mconfig, device_type
void a1bus_cffa_device::device_start()
{
install_device(0xafe0, 0xafff, read8sm_delegate(*this, FUNC(a1bus_cffa_device::cffa_r)), write8sm_delegate(*this, FUNC(a1bus_cffa_device::cffa_w)));
- install_bank(0x9000, 0xafdf, "bank_cffa1", &m_rom[0]);
+ install_bank(0x9000, 0xafdf, &m_rom[0]);
save_item(NAME(m_lastdata));
save_item(NAME(m_writeprotect));
diff --git a/src/devices/bus/abcbus/ram.cpp b/src/devices/bus/abcbus/ram.cpp
index 4886f46defa..563964041c5 100644
--- a/src/devices/bus/abcbus/ram.cpp
+++ b/src/devices/bus/abcbus/ram.cpp
@@ -30,7 +30,7 @@ DEFINE_DEVICE_TYPE(ABC80_16KB_RAM_CARD, abc80_16kb_ram_card_device, "abc80_16kb"
abc80_16kb_ram_card_device::abc80_16kb_ram_card_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, ABC80_16KB_RAM_CARD, tag, owner, clock),
device_abcbus_card_interface(mconfig, *this),
- m_ram(*this, "ram")
+ m_ram(*this, "ram", 0x4000, ENDIANNESS_LITTLE)
{
}
@@ -41,7 +41,6 @@ abc80_16kb_ram_card_device::abc80_16kb_ram_card_device(const machine_config &mco
void abc80_16kb_ram_card_device::device_start()
{
- m_ram.allocate(0x4000);
}
diff --git a/src/devices/bus/abcbus/ram.h b/src/devices/bus/abcbus/ram.h
index cddb07182c7..ddb191cd5cf 100644
--- a/src/devices/bus/abcbus/ram.h
+++ b/src/devices/bus/abcbus/ram.h
@@ -37,7 +37,7 @@ protected:
virtual void abcbus_xmemw(offs_t offset, uint8_t data) override;
private:
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
};
diff --git a/src/devices/bus/abcbus/ssa.cpp b/src/devices/bus/abcbus/ssa.cpp
index 3de6119a3d9..bc15c0852cb 100644
--- a/src/devices/bus/abcbus/ssa.cpp
+++ b/src/devices/bus/abcbus/ssa.cpp
@@ -121,7 +121,7 @@ abc_super_smartaid_device::abc_super_smartaid_device(const machine_config &mconf
m_rom_1(*this, "ssa1"),
m_rom_2(*this, "ssa2"),
m_prom(*this, "ssa3"),
- m_nvram(*this, "nvram"),
+ m_nvram(*this, "nvram", 0x800, ENDIANNESS_LITTLE),
m_rom_bank(0),
m_prom_bank(0)
{
@@ -144,9 +144,6 @@ void abc_super_smartaid_device::device_start()
m_rom_2->base()[i] = bitswap<8>(m_rom_2->base()[i], 2, 6, 1, 4, 3, 5, 7, 0);
}
- // allocate memory
- m_nvram.allocate(0x800);
-
// state saving
save_item(NAME(m_rom_bank));
save_item(NAME(m_prom_bank));
diff --git a/src/devices/bus/abcbus/ssa.h b/src/devices/bus/abcbus/ssa.h
index 7de5ade5950..2eceb3ad0dd 100644
--- a/src/devices/bus/abcbus/ssa.h
+++ b/src/devices/bus/abcbus/ssa.h
@@ -41,8 +41,8 @@ protected:
// device_nvram_interface overrides
virtual void nvram_default() override { }
- virtual void nvram_read(emu_file &file) override { if (m_nvram != nullptr) { file.read(m_nvram, m_nvram.bytes()); } }
- virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram, m_nvram.bytes()); } }
+ virtual void nvram_read(emu_file &file) override { if (m_nvram != nullptr) { file.read(m_nvram, m_nvram.share()->bytes()); } }
+ virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram, m_nvram.share()->bytes()); } }
// device_abcbus_interface overrides
virtual void abcbus_cs(uint8_t data) override { m_bus->write_cs(data); }
@@ -61,7 +61,7 @@ private:
required_memory_region m_rom_1;
required_memory_region m_rom_2;
required_memory_region m_prom;
- optional_shared_ptr<uint8_t> m_nvram;
+ memory_share_creator<uint8_t> m_nvram;
uint8_t m_rom_bank;
uint8_t m_prom_bank;
};
diff --git a/src/devices/bus/acorn/atom/discpack.cpp b/src/devices/bus/acorn/atom/discpack.cpp
index dd8d3021301..c7010454e78 100644
--- a/src/devices/bus/acorn/atom/discpack.cpp
+++ b/src/devices/bus/acorn/atom/discpack.cpp
@@ -85,10 +85,11 @@ void atom_discpack_device::device_start()
space.install_device(0x0a00, 0x0a03, *m_fdc, &i8271_device::map);
space.install_readwrite_handler(0x0a04, 0x0a04, 0, 0x1f8, 0, read8smo_delegate(*m_fdc, FUNC(i8271_device::data_r)), write8smo_delegate(*m_fdc, FUNC(i8271_device::data_w)));
- space.install_ram(0x2000, 0x23ff);
- space.install_ram(0x2400, 0x27ff);
- space.install_ram(0x3c00, 0x3fff);
+ space.install_ram(0x2000, 0x27ff, m_ram);
+ space.install_ram(0x3c00, 0x3fff, m_ram+0x800);
space.install_rom(0xe000, 0xefff, m_dos_rom->base());
+
+ save_item(NAME(m_ram));
}
diff --git a/src/devices/bus/acorn/atom/discpack.h b/src/devices/bus/acorn/atom/discpack.h
index 3f06870f87c..a55abce3278 100644
--- a/src/devices/bus/acorn/atom/discpack.h
+++ b/src/devices/bus/acorn/atom/discpack.h
@@ -47,6 +47,8 @@ private:
required_memory_region m_dos_rom;
required_device<i8271_device> m_fdc;
required_device_array<floppy_connector, 2> m_floppy;
+
+ u8 m_ram[0x800 + 0x400];
};
diff --git a/src/devices/bus/acorn/system/32k.cpp b/src/devices/bus/acorn/system/32k.cpp
index c74d60cc863..00eb80050e9 100644
--- a/src/devices/bus/acorn/system/32k.cpp
+++ b/src/devices/bus/acorn/system/32k.cpp
@@ -73,6 +73,7 @@ acorn_32k_device::acorn_32k_device(const machine_config &mconfig, const char *ta
void acorn_32k_device::device_start()
{
+ save_item(NAME(m_ram));
}
//-------------------------------------------------
@@ -85,11 +86,11 @@ void acorn_32k_device::device_reset()
if (m_links->read())
{
- space.install_ram(0x8000, 0xbfff);
+ space.install_ram(0x8000, 0xbfff, m_ram);
}
else
{
- space.install_ram(0x2000, 0x7fff);
- space.install_ram(0xc000, 0xdfff);
+ space.install_ram(0x2000, 0x7fff, m_ram);
+ space.install_ram(0xc000, 0xdfff, m_ram + 0x6000);
}
}
diff --git a/src/devices/bus/acorn/system/32k.h b/src/devices/bus/acorn/system/32k.h
index 0ef4c10f3c3..f3d3b76be5c 100644
--- a/src/devices/bus/acorn/system/32k.h
+++ b/src/devices/bus/acorn/system/32k.h
@@ -38,6 +38,7 @@ protected:
private:
required_ioport m_links;
+ u8 m_ram[32768];
};
diff --git a/src/devices/bus/acorn/system/8k.cpp b/src/devices/bus/acorn/system/8k.cpp
index 97939b7362f..ecbd69c930f 100644
--- a/src/devices/bus/acorn/system/8k.cpp
+++ b/src/devices/bus/acorn/system/8k.cpp
@@ -98,6 +98,7 @@ acorn_8k_device::acorn_8k_device(const machine_config &mconfig, const char *tag,
void acorn_8k_device::device_start()
{
+ save_item(NAME(m_ram));
}
//-------------------------------------------------
@@ -112,11 +113,11 @@ void acorn_8k_device::device_reset()
if (ram_addr == 0x0000) // BLK0
{
- space.install_ram(0x1000, 0x1fff);
+ space.install_ram(0x1000, 0x1fff, m_ram);
}
else
{
- space.install_ram(ram_addr, ram_addr + 0x1fff);
+ space.install_ram(ram_addr, ram_addr + 0x1fff, m_ram);
}
uint16_t rom_addr = (m_links->read() & 0xf0) << 9;
diff --git a/src/devices/bus/acorn/system/8k.h b/src/devices/bus/acorn/system/8k.h
index 125b636cd5b..09f089c1563 100644
--- a/src/devices/bus/acorn/system/8k.h
+++ b/src/devices/bus/acorn/system/8k.h
@@ -47,6 +47,7 @@ private:
required_device_array<generic_slot_device, 2> m_rom;
required_ioport m_links;
+ u8 m_ram[8192];
};
diff --git a/src/devices/bus/adam/exp.cpp b/src/devices/bus/adam/exp.cpp
index a6c8b777402..59c677144f3 100644
--- a/src/devices/bus/adam/exp.cpp
+++ b/src/devices/bus/adam/exp.cpp
@@ -36,8 +36,7 @@ DEFINE_DEVICE_TYPE(ADAM_EXPANSION_SLOT, adam_expansion_slot_device, "adam_expans
//-------------------------------------------------
device_adam_expansion_slot_card_interface::device_adam_expansion_slot_card_interface(const machine_config &mconfig, device_t &device) :
- device_interface(device, "adamexp"),
- m_rom(*this, "rom")
+ device_interface(device, "adamexp")
{
m_slot = dynamic_cast<adam_expansion_slot_device *>(device.owner());
}
diff --git a/src/devices/bus/adam/exp.h b/src/devices/bus/adam/exp.h
index 69ed921d5d5..ee74bf0396a 100644
--- a/src/devices/bus/adam/exp.h
+++ b/src/devices/bus/adam/exp.h
@@ -100,7 +100,7 @@ protected:
adam_expansion_slot_device *m_slot;
- optional_shared_ptr<uint8_t> m_rom;
+ std::unique_ptr<uint8_t[]> m_rom;
};
diff --git a/src/devices/bus/adam/ram.cpp b/src/devices/bus/adam/ram.cpp
index a7e79719867..65dc13f2246 100644
--- a/src/devices/bus/adam/ram.cpp
+++ b/src/devices/bus/adam/ram.cpp
@@ -30,7 +30,7 @@ DEFINE_DEVICE_TYPE(ADAM_RAM, adam_ram_expansion_device, "adam_ram", "Adam 64KB R
adam_ram_expansion_device::adam_ram_expansion_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, ADAM_RAM, tag, owner, clock),
device_adam_expansion_slot_card_interface(mconfig, *this),
- m_ram(*this, "ram")
+ m_ram(*this, "ram", 0x10000, ENDIANNESS_LITTLE)
{
}
@@ -41,7 +41,6 @@ adam_ram_expansion_device::adam_ram_expansion_device(const machine_config &mconf
void adam_ram_expansion_device::device_start()
{
- m_ram.allocate(0x10000);
}
diff --git a/src/devices/bus/adam/ram.h b/src/devices/bus/adam/ram.h
index 780d51be726..c1997bf77c4 100644
--- a/src/devices/bus/adam/ram.h
+++ b/src/devices/bus/adam/ram.h
@@ -37,7 +37,7 @@ protected:
virtual void adam_bd_w(offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2) override;
private:
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
};
diff --git a/src/devices/bus/bw2/ramcard.cpp b/src/devices/bus/bw2/ramcard.cpp
index b1e0bfe5bcf..33d1fc147d9 100644
--- a/src/devices/bus/bw2/ramcard.cpp
+++ b/src/devices/bus/bw2/ramcard.cpp
@@ -51,7 +51,7 @@ bw2_ramcard_device::bw2_ramcard_device(const machine_config &mconfig, const char
: device_t(mconfig, BW2_RAMCARD, tag, owner, clock),
device_bw2_expansion_slot_interface(mconfig, *this),
m_rom(*this, "ramcard"),
- m_ram(*this, "ram"),
+ m_ram(*this, "ram", 512*1024, ENDIANNESS_LITTLE),
m_en(0),
m_bank(0)
{
@@ -64,9 +64,6 @@ bw2_ramcard_device::bw2_ramcard_device(const machine_config &mconfig, const char
void bw2_ramcard_device::device_start()
{
- // allocate memory
- m_ram.allocate(512 * 1024);
-
// state saving
save_item(NAME(m_en));
save_item(NAME(m_bank));
diff --git a/src/devices/bus/bw2/ramcard.h b/src/devices/bus/bw2/ramcard.h
index 029d9b91feb..f3cd95f38d4 100644
--- a/src/devices/bus/bw2/ramcard.h
+++ b/src/devices/bus/bw2/ramcard.h
@@ -43,7 +43,7 @@ protected:
private:
required_memory_region m_rom;
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
int m_en;
uint8_t m_bank;
diff --git a/src/devices/bus/c64/c128_partner.cpp b/src/devices/bus/c64/c128_partner.cpp
index 91b7cf751ab..808926d8583 100644
--- a/src/devices/bus/c64/c128_partner.cpp
+++ b/src/devices/bus/c64/c128_partner.cpp
@@ -80,7 +80,8 @@ ioport_constructor c128_partner_cartridge_device::device_input_ports() const
c128_partner_cartridge_device::c128_partner_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, C128_PARTNER, tag, owner, clock),
device_c64_expansion_card_interface(mconfig, *this),
- m_ram(*this, "ram"), t_joyb2(nullptr),
+ m_ram(*this, "ram", 0x2000, ENDIANNESS_LITTLE),
+ t_joyb2(nullptr),
m_ram_a12_a7(0),
m_ls74_cd(0),
m_ls74_q1(0),
@@ -96,9 +97,6 @@ c128_partner_cartridge_device::c128_partner_cartridge_device(const machine_confi
void c128_partner_cartridge_device::device_start()
{
- // allocate memory
- m_ram.allocate(0x2000);
-
// simulate the 16.7ms pulse from CIA1 PB2 that would arrive thru the joystick port dongle
t_joyb2 = timer_alloc();
t_joyb2->adjust(attotime::from_msec(16), 0, attotime::from_msec(16));
diff --git a/src/devices/bus/c64/c128_partner.h b/src/devices/bus/c64/c128_partner.h
index 1f4402d5b22..da906531122 100644
--- a/src/devices/bus/c64/c128_partner.h
+++ b/src/devices/bus/c64/c128_partner.h
@@ -49,7 +49,7 @@ protected:
virtual void vcs_joy_w(uint8_t data);
private:
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
emu_timer *t_joyb2;
int m_ram_a12_a7;
diff --git a/src/devices/bus/c64/dqbb.cpp b/src/devices/bus/c64/dqbb.cpp
index 20adedd9057..6f7e2bf7dab 100644
--- a/src/devices/bus/c64/dqbb.cpp
+++ b/src/devices/bus/c64/dqbb.cpp
@@ -53,7 +53,8 @@ c64_dqbb_cartridge_device::c64_dqbb_cartridge_device(const machine_config &mconf
void c64_dqbb_cartridge_device::device_start()
{
// allocate memory
- m_nvram.allocate(0x4000);
+ m_nvram = std::make_unique<uint8_t[]>(0x4000);
+ save_pointer(NAME(m_nvram.get()), 0x4000);
// state saving
save_item(NAME(m_cs));
diff --git a/src/devices/bus/c64/dqbb.h b/src/devices/bus/c64/dqbb.h
index aaa8c0e1bf4..af9460a5bbe 100644
--- a/src/devices/bus/c64/dqbb.h
+++ b/src/devices/bus/c64/dqbb.h
@@ -38,8 +38,8 @@ protected:
// device_nvram_interface overrides
virtual void nvram_default() override { }
- virtual void nvram_read(emu_file &file) override { if (m_nvram != nullptr) { file.read(m_nvram, m_nvram.bytes()); } }
- virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram, m_nvram.bytes()); } }
+ virtual void nvram_read(emu_file &file) override { if (m_nvram != nullptr) { file.read(m_nvram.get(), 0x4000); } }
+ virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram.get(), 0x4000); } }
// device_c64_expansion_card_interface overrides
virtual uint8_t c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
diff --git a/src/devices/bus/c64/easyflash.cpp b/src/devices/bus/c64/easyflash.cpp
index 38cdf9739c6..eab9ff7930a 100644
--- a/src/devices/bus/c64/easyflash.cpp
+++ b/src/devices/bus/c64/easyflash.cpp
@@ -77,7 +77,7 @@ c64_easyflash_cartridge_device::c64_easyflash_cartridge_device(const machine_con
m_flash_roml(*this, AM29F040_0_TAG),
m_flash_romh(*this, AM29F040_1_TAG),
m_jp1(*this, "JP1"),
- m_ram(*this, "ram"),
+ m_ram(*this, "ram", 0x100, ENDIANNESS_LITTLE),
m_bank(0),
m_mode(0)
{
@@ -90,9 +90,6 @@ c64_easyflash_cartridge_device::c64_easyflash_cartridge_device(const machine_con
void c64_easyflash_cartridge_device::device_start()
{
- // allocate memory
- m_ram.allocate(0x100);
-
// state saving
save_item(NAME(m_bank));
save_item(NAME(m_mode));
diff --git a/src/devices/bus/c64/easyflash.h b/src/devices/bus/c64/easyflash.h
index 377de25d50d..6c73a14838a 100644
--- a/src/devices/bus/c64/easyflash.h
+++ b/src/devices/bus/c64/easyflash.h
@@ -49,7 +49,7 @@ private:
required_device<amd_29f040_device> m_flash_roml;
required_device<amd_29f040_device> m_flash_romh;
required_ioport m_jp1;
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
uint8_t m_bank;
uint8_t m_mode;
diff --git a/src/devices/bus/c64/exp.cpp b/src/devices/bus/c64/exp.cpp
index 3c5663db036..8304a7be6b7 100644
--- a/src/devices/bus/c64/exp.cpp
+++ b/src/devices/bus/c64/exp.cpp
@@ -29,10 +29,6 @@ DEFINE_DEVICE_TYPE(C64_EXPANSION_SLOT, c64_expansion_slot_device, "c64_expansion
device_c64_expansion_card_interface::device_c64_expansion_card_interface(const machine_config &mconfig, device_t &device) :
device_interface(device, "c64exp"),
- m_roml(*this, "roml"),
- m_romh(*this, "romh"),
- m_romx(*this, "romx"),
- m_nvram(*this, "nvram"),
m_game(1),
m_exrom(1)
{
@@ -148,11 +144,11 @@ image_init_result c64_expansion_slot_device::call_load()
uint8_t *roml = nullptr;
uint8_t *romh = nullptr;
- m_card->m_roml.allocate(roml_size);
- m_card->m_romh.allocate(romh_size);
+ m_card->m_roml = std::make_unique<uint8_t[]>(roml_size);
+ m_card->m_romh = std::make_unique<uint8_t[]>(romh_size);
- if (roml_size) roml = m_card->m_roml;
- if (romh_size) romh = m_card->m_roml;
+ if (roml_size) roml = m_card->m_roml.get();
+ if (romh_size) romh = m_card->m_romh.get();
cbm_crt_read_data(image_core_file(), roml, romh);
}
diff --git a/src/devices/bus/c64/exp.h b/src/devices/bus/c64/exp.h
index 2507227d724..29e79fb1ff8 100644
--- a/src/devices/bus/c64/exp.h
+++ b/src/devices/bus/c64/exp.h
@@ -148,10 +148,10 @@ public:
protected:
device_c64_expansion_card_interface(const machine_config &mconfig, device_t &device);
- optional_shared_ptr<uint8_t> m_roml;
- optional_shared_ptr<uint8_t> m_romh;
- optional_shared_ptr<uint8_t> m_romx;
- optional_shared_ptr<uint8_t> m_nvram;
+ std::unique_ptr<uint8_t[]> m_roml;
+ std::unique_ptr<uint8_t[]> m_romh;
+ std::unique_ptr<uint8_t[]> m_romx;
+ std::unique_ptr<uint8_t[]> m_nvram;
int m_game;
int m_exrom;
diff --git a/src/devices/bus/c64/fcc.cpp b/src/devices/bus/c64/fcc.cpp
index 405c1761a2e..13b42122a03 100644
--- a/src/devices/bus/c64/fcc.cpp
+++ b/src/devices/bus/c64/fcc.cpp
@@ -97,6 +97,7 @@ c64_final_chesscard_device::c64_final_chesscard_device(const machine_config &mco
void c64_final_chesscard_device::device_start()
{
+ m_nvram = std::make_unique<uint8_t[]>(0x2000);
// state saving
save_item(NAME(m_bank));
save_item(NAME(m_hidden));
diff --git a/src/devices/bus/c64/fcc.h b/src/devices/bus/c64/fcc.h
index 03eac948a73..15a096f5cf5 100644
--- a/src/devices/bus/c64/fcc.h
+++ b/src/devices/bus/c64/fcc.h
@@ -42,8 +42,8 @@ protected:
// device_nvram_interface overrides
virtual void nvram_default() override { }
- virtual void nvram_read(emu_file &file) override { if (m_nvram != nullptr) { file.read(m_nvram, m_nvram.bytes()); } }
- virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram, m_nvram.bytes()); } }
+ virtual void nvram_read(emu_file &file) override { if (m_nvram != nullptr) { file.read(m_nvram.get(), 0x2000); } }
+ virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram.get(), 0x2000); } }
// device_c64_expansion_card_interface overrides
virtual uint8_t c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
@@ -59,8 +59,8 @@ private:
DECLARE_WRITE_LINE_MEMBER(mainlatch_int) { m_slot->nmi_w(state); }
uint8_t rom_r(offs_t offset) { return m_romx[offset]; } // cartridge cpu rom
- uint8_t nvram_r(offs_t offset) { return m_nvram[offset & m_nvram.mask()]; }
- void nvram_w(offs_t offset, uint8_t data) { m_nvram[offset & m_nvram.mask()] = data; }
+ uint8_t nvram_r(offs_t offset) { return m_nvram[offset & 0x1fff]; }
+ void nvram_w(offs_t offset, uint8_t data) { m_nvram[offset & 0x1fff] = data; }
void c64_fcc_map(address_map &map);
};
diff --git a/src/devices/bus/c64/georam.cpp b/src/devices/bus/c64/georam.cpp
index 6bf8a16a1d8..377bc10a391 100644
--- a/src/devices/bus/c64/georam.cpp
+++ b/src/devices/bus/c64/georam.cpp
@@ -30,7 +30,7 @@ DEFINE_DEVICE_TYPE(C64_GEORAM, c64_georam_cartridge_device, "c64_georam", "C64 G
c64_georam_cartridge_device::c64_georam_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, C64_GEORAM, tag, owner, clock),
device_c64_expansion_card_interface(mconfig, *this),
- m_ram(*this, "ram"),
+ m_ram(*this, "ram", 0x80000, ENDIANNESS_LITTLE),
m_bank(0)
{
}
@@ -42,9 +42,6 @@ c64_georam_cartridge_device::c64_georam_cartridge_device(const machine_config &m
void c64_georam_cartridge_device::device_start()
{
- // allocate memory
- m_ram.allocate(0x80000);
-
// state saving
save_item(NAME(m_bank));
}
diff --git a/src/devices/bus/c64/georam.h b/src/devices/bus/c64/georam.h
index 03967625c23..41b7fd82379 100644
--- a/src/devices/bus/c64/georam.h
+++ b/src/devices/bus/c64/georam.h
@@ -39,7 +39,7 @@ protected:
virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
private:
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
uint16_t m_bank;
};
diff --git a/src/devices/bus/c64/ide64.cpp b/src/devices/bus/c64/ide64.cpp
index 73e14ea6b99..830f38c3993 100644
--- a/src/devices/bus/c64/ide64.cpp
+++ b/src/devices/bus/c64/ide64.cpp
@@ -93,7 +93,8 @@ c64_ide64_cartridge_device::c64_ide64_cartridge_device(const machine_config &mco
m_rtc(*this, DS1302_TAG),
m_ata(*this, ATA_TAG),
m_jp1(*this, "JP1"),
- m_ram(*this, "ram"), m_bank(0), m_ata_data(0), m_wp(0), m_enable(0)
+ m_ram(*this, "ram", 0x8000, ENDIANNESS_LITTLE),
+ m_bank(0), m_ata_data(0), m_wp(0), m_enable(0)
{
}
@@ -104,9 +105,6 @@ c64_ide64_cartridge_device::c64_ide64_cartridge_device(const machine_config &mco
void c64_ide64_cartridge_device::device_start()
{
- // allocate memory
- m_ram.allocate(0x8000);
-
// state saving
save_item(NAME(m_bank));
save_item(NAME(m_ata_data));
diff --git a/src/devices/bus/c64/ide64.h b/src/devices/bus/c64/ide64.h
index 366357868b9..9438e3a1ed0 100644
--- a/src/devices/bus/c64/ide64.h
+++ b/src/devices/bus/c64/ide64.h
@@ -53,7 +53,7 @@ private:
required_device<ds1302_device> m_rtc;
required_device<ata_interface_device> m_ata;
required_ioport m_jp1;
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
uint8_t m_bank;
uint16_t m_ata_data;
diff --git a/src/devices/bus/c64/magic_formel.cpp b/src/devices/bus/c64/magic_formel.cpp
index 8d43fd05810..1e6c38d1685 100644
--- a/src/devices/bus/c64/magic_formel.cpp
+++ b/src/devices/bus/c64/magic_formel.cpp
@@ -157,7 +157,7 @@ c64_magic_formel_cartridge_device::c64_magic_formel_cartridge_device(const machi
device_t(mconfig, C64_MAGIC_FORMEL, tag, owner, clock),
device_c64_expansion_card_interface(mconfig, *this),
m_pia(*this, MC6821_TAG),
- m_ram(*this, "ram"),
+ m_ram(*this, "ram", 0x2000, ENDIANNESS_LITTLE),
m_rom_bank(0),
m_ram_bank(0),
m_ram_oe(0),
@@ -174,9 +174,6 @@ c64_magic_formel_cartridge_device::c64_magic_formel_cartridge_device(const machi
void c64_magic_formel_cartridge_device::device_start()
{
- // allocate memory
- m_ram.allocate(0x2000);
-
// state saving
save_item(NAME(m_rom_bank));
save_item(NAME(m_ram_bank));
diff --git a/src/devices/bus/c64/magic_formel.h b/src/devices/bus/c64/magic_formel.h
index 43fb7c69fe5..ab16d4a0e34 100644
--- a/src/devices/bus/c64/magic_formel.h
+++ b/src/devices/bus/c64/magic_formel.h
@@ -51,7 +51,7 @@ private:
DECLARE_WRITE_LINE_MEMBER( pia_cb2_w );
required_device<pia6821_device> m_pia;
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
uint8_t m_rom_bank;
uint8_t m_ram_bank;
diff --git a/src/devices/bus/c64/neoram.cpp b/src/devices/bus/c64/neoram.cpp
index 4cb34cbbb57..c0f292da161 100644
--- a/src/devices/bus/c64/neoram.cpp
+++ b/src/devices/bus/c64/neoram.cpp
@@ -43,7 +43,7 @@ c64_neoram_cartridge_device::c64_neoram_cartridge_device(const machine_config &m
void c64_neoram_cartridge_device::device_start()
{
// allocate memory
- m_nvram.allocate(0x200000);
+ m_nvram = std::make_unique<uint8_t[]>(0x200000);
// state saving
save_item(NAME(m_bank));
diff --git a/src/devices/bus/c64/neoram.h b/src/devices/bus/c64/neoram.h
index d5058b878b7..b6729ec08d4 100644
--- a/src/devices/bus/c64/neoram.h
+++ b/src/devices/bus/c64/neoram.h
@@ -37,8 +37,8 @@ protected:
// device_nvram_interface overrides
virtual void nvram_default() override { }
- virtual void nvram_read(emu_file &file) override { if (m_nvram != nullptr) { file.read(m_nvram, m_nvram.bytes()); } }
- virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram, m_nvram.bytes()); } }
+ virtual void nvram_read(emu_file &file) override { if (m_nvram != nullptr) { file.read(m_nvram.get(), 0x200000); } }
+ virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram.get(), 0x200000); } }
// device_c64_expansion_card_interface overrides
virtual uint8_t c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
diff --git a/src/devices/bus/c64/ocean.cpp b/src/devices/bus/c64/ocean.cpp
index 92b18de6a51..d267a9912fa 100644
--- a/src/devices/bus/c64/ocean.cpp
+++ b/src/devices/bus/c64/ocean.cpp
@@ -84,15 +84,15 @@ void c64_ocean_cartridge_device::device_reset()
uint8_t c64_ocean_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
- if (!roml && m_roml.bytes())
+ if (!roml && m_roml)
{
offs_t addr = (m_bank << 13) | (offset & 0x1fff);
- data = m_roml[addr & m_roml.mask()];
+ data = m_roml[addr];
}
- else if (!romh && m_romh.bytes())
+ else if (!romh && m_romh)
{
offs_t addr = (m_bank << 13) | (offset & 0x1fff);
- data = m_romh[addr & m_romh.mask()];
+ data = m_romh[addr];
}
else if (!io1)
{
diff --git a/src/devices/bus/c64/pagefox.cpp b/src/devices/bus/c64/pagefox.cpp
index 80264aab13b..e33bb4d3d7b 100644
--- a/src/devices/bus/c64/pagefox.cpp
+++ b/src/devices/bus/c64/pagefox.cpp
@@ -52,7 +52,8 @@ DEFINE_DEVICE_TYPE(C64_PAGEFOX, c64_pagefox_cartridge_device, "c64_pagefox", "C6
c64_pagefox_cartridge_device::c64_pagefox_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, C64_PAGEFOX, tag, owner, clock),
device_c64_expansion_card_interface(mconfig, *this),
- m_ram(*this, "ram"), m_bank(0)
+ m_ram(*this, "ram", 0x8000, ENDIANNESS_LITTLE),
+ m_bank(0)
{
}
@@ -63,9 +64,6 @@ c64_pagefox_cartridge_device::c64_pagefox_cartridge_device(const machine_config
void c64_pagefox_cartridge_device::device_start()
{
- // allocate memory
- m_ram.allocate(0x8000);
-
// state saving
save_item(NAME(m_bank));
}
diff --git a/src/devices/bus/c64/pagefox.h b/src/devices/bus/c64/pagefox.h
index 74ed5a4edf0..b0295eb9d0d 100644
--- a/src/devices/bus/c64/pagefox.h
+++ b/src/devices/bus/c64/pagefox.h
@@ -39,7 +39,7 @@ protected:
virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
private:
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
uint8_t m_bank;
};
diff --git a/src/devices/bus/c64/partner.cpp b/src/devices/bus/c64/partner.cpp
index 55e4d07f3e1..b77cf610d17 100644
--- a/src/devices/bus/c64/partner.cpp
+++ b/src/devices/bus/c64/partner.cpp
@@ -80,7 +80,7 @@ ioport_constructor c64_partner_cartridge_device::device_input_ports() const
c64_partner_cartridge_device::c64_partner_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, C64_PARTNER, tag, owner, clock),
device_c64_expansion_card_interface(mconfig, *this),
- m_ram(*this, "ram"),
+ m_ram(*this, "ram", 0x2000, ENDIANNESS_LITTLE),
m_a0(1),
m_a6(1),
m_nmi(0)
@@ -94,8 +94,6 @@ c64_partner_cartridge_device::c64_partner_cartridge_device(const machine_config
void c64_partner_cartridge_device::device_start()
{
- // allocate memory
- m_ram.allocate(0x2000);
}
diff --git a/src/devices/bus/c64/partner.h b/src/devices/bus/c64/partner.h
index 6ecf4503a91..4dd71542571 100644
--- a/src/devices/bus/c64/partner.h
+++ b/src/devices/bus/c64/partner.h
@@ -44,7 +44,7 @@ protected:
virtual int c64_game_r(offs_t offset, int sphi2, int ba, int rw) override;
private:
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
int m_a0;
int m_a6;
diff --git a/src/devices/bus/c64/reu.cpp b/src/devices/bus/c64/reu.cpp
index cc51b99e096..0d24a1967fa 100644
--- a/src/devices/bus/c64/reu.cpp
+++ b/src/devices/bus/c64/reu.cpp
@@ -53,7 +53,7 @@ c64_reu_cartridge_device::c64_reu_cartridge_device(const machine_config &mconfig
device_c64_expansion_card_interface(mconfig, *this),
m_dmac(*this, MOS8726R1_TAG),
m_eprom(*this, "rom"),
- m_ram(*this, "ram"),
+ m_ram(*this, "ram", ram_size, ENDIANNESS_LITTLE),
m_variant(variant),
m_jp1(jp1),
m_ram_size(ram_size)
@@ -76,9 +76,6 @@ c64_reu1764_cartridge_device::c64_reu1764_cartridge_device(const machine_config
void c64_reu_cartridge_device::device_start()
{
- // allocate memory
- m_ram.allocate(m_ram_size);
-
// setup DMA controller
m_dmac->set_unscaled_clock(m_slot->phi2());
m_dmac->bs_w(m_jp1);
diff --git a/src/devices/bus/c64/reu.h b/src/devices/bus/c64/reu.h
index 0cbb67d9576..eaa662f38a1 100644
--- a/src/devices/bus/c64/reu.h
+++ b/src/devices/bus/c64/reu.h
@@ -52,7 +52,7 @@ protected:
required_device<mos8726_device> m_dmac;
required_device<generic_slot_device> m_eprom;
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
int m_variant;
int m_jp1;
diff --git a/src/devices/bus/c64/ross.cpp b/src/devices/bus/c64/ross.cpp
index 25c1a996df8..e8703a33bcc 100644
--- a/src/devices/bus/c64/ross.cpp
+++ b/src/devices/bus/c64/ross.cpp
@@ -68,7 +68,7 @@ uint8_t c64_ross_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sph
{
offs_t addr = (m_bank << 14) | (offset & 0x3fff);
- data = m_roml[addr & m_roml.mask()];
+ data = m_roml[addr];
}
return data;
diff --git a/src/devices/bus/c64/std.cpp b/src/devices/bus/c64/std.cpp
index 08f4c1d65e0..95d472bfbfd 100644
--- a/src/devices/bus/c64/std.cpp
+++ b/src/devices/bus/c64/std.cpp
@@ -49,19 +49,19 @@ void c64_standard_cartridge_device::device_start()
uint8_t c64_standard_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
- if (!roml && m_roml.bytes())
+ if (!roml && m_roml)
{
- data = m_roml[offset & m_roml.mask()];
+ data = m_roml[offset];
}
else if (!romh)
{
- if (m_romh.bytes())
+ if (m_romh)
{
- data = m_romh[offset & m_romh.mask()];
+ data = m_romh[offset];
}
- else if (m_roml.mask() == 0x3fff)
+ else if (m_roml)
{
- data = m_roml[offset & m_roml.mask()];
+ data = m_roml[offset];
}
}
diff --git a/src/devices/bus/c64/westermann.cpp b/src/devices/bus/c64/westermann.cpp
index ac254733f01..33b22c06942 100644
--- a/src/devices/bus/c64/westermann.cpp
+++ b/src/devices/bus/c64/westermann.cpp
@@ -61,17 +61,17 @@ uint8_t c64_westermann_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, i
{
if (!roml)
{
- data = m_roml[offset & m_roml.mask()];
+ data = m_roml[offset];
}
else if (!romh)
{
- if (m_romh.bytes())
+ if (m_romh)
{
- data = m_romh[offset & m_romh.mask()];
+ data = m_romh[offset];
}
else
{
- data = m_roml[offset & m_roml.mask()];
+ data = m_roml[offset];
}
}
else if (!io2)
diff --git a/src/devices/bus/c64/xl80.cpp b/src/devices/bus/c64/xl80.cpp
index 6bfa6e9d8cd..346fb7c0947 100644
--- a/src/devices/bus/c64/xl80.cpp
+++ b/src/devices/bus/c64/xl80.cpp
@@ -157,7 +157,7 @@ c64_xl80_device::c64_xl80_device(const machine_config &mconfig, const char *tag,
m_crtc(*this, HD46505SP_TAG),
m_palette(*this, "palette"),
m_char_rom(*this, HD46505SP_TAG),
- m_ram(*this, "ram")
+ m_ram(*this, "ram", RAM_SIZE, ENDIANNESS_LITTLE)
{
}
@@ -168,8 +168,6 @@ c64_xl80_device::c64_xl80_device(const machine_config &mconfig, const char *tag,
void c64_xl80_device::device_start()
{
- // allocate memory
- m_ram.allocate(RAM_SIZE);
}
diff --git a/src/devices/bus/c64/xl80.h b/src/devices/bus/c64/xl80.h
index 70a9b1cba9d..762b8ed39eb 100644
--- a/src/devices/bus/c64/xl80.h
+++ b/src/devices/bus/c64/xl80.h
@@ -52,7 +52,7 @@ private:
required_device<hd6845s_device> m_crtc;
required_device<palette_device> m_palette;
required_memory_region m_char_rom;
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
};
diff --git a/src/devices/bus/cbm2/24k.cpp b/src/devices/bus/cbm2/24k.cpp
index c212b2fef83..c56474c7be9 100644
--- a/src/devices/bus/cbm2/24k.cpp
+++ b/src/devices/bus/cbm2/24k.cpp
@@ -30,7 +30,7 @@ DEFINE_DEVICE_TYPE(CBM2_24K, cbm2_24k_cartridge_device, "cbm2_24k", "CBM-II 24K
cbm2_24k_cartridge_device::cbm2_24k_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, CBM2_24K, tag, owner, clock),
device_cbm2_expansion_card_interface(mconfig, *this),
- m_ram(*this, "ram")
+ m_ram(*this, "ram", 0x6000, ENDIANNESS_LITTLE)
{
}
@@ -41,7 +41,6 @@ cbm2_24k_cartridge_device::cbm2_24k_cartridge_device(const machine_config &mconf
void cbm2_24k_cartridge_device::device_start()
{
- m_ram.allocate(0x6000);
}
diff --git a/src/devices/bus/cbm2/24k.h b/src/devices/bus/cbm2/24k.h
index b1c029c5254..554ba721444 100644
--- a/src/devices/bus/cbm2/24k.h
+++ b/src/devices/bus/cbm2/24k.h
@@ -36,7 +36,7 @@ protected:
virtual uint8_t cbm2_bd_r(offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3) override;
virtual void cbm2_bd_w(offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3) override;
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
};
diff --git a/src/devices/bus/cbm2/exp.cpp b/src/devices/bus/cbm2/exp.cpp
index 92c865006f7..7bc35f33120 100644
--- a/src/devices/bus/cbm2/exp.cpp
+++ b/src/devices/bus/cbm2/exp.cpp
@@ -36,10 +36,7 @@ DEFINE_DEVICE_TYPE(CBM2_EXPANSION_SLOT, cbm2_expansion_slot_device, "cbm2_expans
//-------------------------------------------------
device_cbm2_expansion_card_interface::device_cbm2_expansion_card_interface(const machine_config &mconfig, device_t &device) :
- device_interface(device, "cbm2exp"),
- m_bank1(*this, "bank1"),
- m_bank2(*this, "bank2"),
- m_bank3(*this, "bank3")
+ device_interface(device, "cbm2exp")
{
m_slot = dynamic_cast<cbm2_expansion_slot_device *>(device.owner());
}
@@ -107,17 +104,17 @@ image_init_result cbm2_expansion_slot_device::call_load()
if (is_filetype("20"))
{
- m_card->m_bank1.allocate(size);
+ m_card->m_bank1 = std::make_unique<uint8_t[]>(size);
fread(m_card->m_bank1, size);
}
else if (is_filetype("40"))
{
- m_card->m_bank2.allocate(size);
+ m_card->m_bank2 = std::make_unique<uint8_t[]>(size);
fread(m_card->m_bank2, size);
}
else if (is_filetype("60"))
{
- m_card->m_bank3.allocate(size);
+ m_card->m_bank3 = std::make_unique<uint8_t[]>(size);
fread(m_card->m_bank3, size);
}
}
diff --git a/src/devices/bus/cbm2/exp.h b/src/devices/bus/cbm2/exp.h
index d07035614a8..9781e4ac05a 100644
--- a/src/devices/bus/cbm2/exp.h
+++ b/src/devices/bus/cbm2/exp.h
@@ -113,9 +113,9 @@ public:
protected:
device_cbm2_expansion_card_interface(const machine_config &mconfig, device_t &device);
- optional_shared_ptr<uint8_t> m_bank1;
- optional_shared_ptr<uint8_t> m_bank2;
- optional_shared_ptr<uint8_t> m_bank3;
+ std::unique_ptr<uint8_t[]> m_bank1;
+ std::unique_ptr<uint8_t[]> m_bank2;
+ std::unique_ptr<uint8_t[]> m_bank3;
cbm2_expansion_slot_device *m_slot;
};
diff --git a/src/devices/bus/cbm2/std.cpp b/src/devices/bus/cbm2/std.cpp
index f56226028ee..51653c72755 100644
--- a/src/devices/bus/cbm2/std.cpp
+++ b/src/devices/bus/cbm2/std.cpp
@@ -49,17 +49,17 @@ void cbm2_standard_cartridge_device::device_start()
uint8_t cbm2_standard_cartridge_device::cbm2_bd_r(offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3)
{
- if (!csbank1 && m_bank1.bytes())
+ if (!csbank1 && m_bank1)
{
- data = m_bank1[offset & m_bank1.mask()];
+ data = m_bank1[offset];
}
- else if (!csbank2 && m_bank2.bytes())
+ else if (!csbank2 && m_bank2)
{
- data = m_bank2[offset & m_bank2.mask()];
+ data = m_bank2[offset];
}
- else if (!csbank3 && m_bank3.bytes())
+ else if (!csbank3 && m_bank3)
{
- data = m_bank3[offset & m_bank3.mask()];
+ data = m_bank3[offset];
}
return data;
diff --git a/src/devices/bus/comx35/clm.cpp b/src/devices/bus/comx35/clm.cpp
index 192e5989a36..d32b4a694f8 100644
--- a/src/devices/bus/comx35/clm.cpp
+++ b/src/devices/bus/comx35/clm.cpp
@@ -173,7 +173,7 @@ comx_clm_device::comx_clm_device(const machine_config &mconfig, const char *tag,
m_palette(*this, "palette"),
m_rom(*this, "c000"),
m_char_rom(*this, MC6845_TAG),
- m_video_ram(*this, "video_ram")
+ m_video_ram(*this, "video_ram", VIDEORAM_SIZE, ENDIANNESS_LITTLE)
{
}
@@ -184,9 +184,6 @@ comx_clm_device::comx_clm_device(const machine_config &mconfig, const char *tag,
void comx_clm_device::device_start()
{
- // allocate memory
- m_video_ram.allocate(VIDEORAM_SIZE);
-
// state saving
save_item(NAME(m_ds));
}
diff --git a/src/devices/bus/comx35/clm.h b/src/devices/bus/comx35/clm.h
index 9c4845cbbe0..de86ff28b7f 100644
--- a/src/devices/bus/comx35/clm.h
+++ b/src/devices/bus/comx35/clm.h
@@ -52,7 +52,7 @@ private:
required_device<palette_device> m_palette;
required_memory_region m_rom;
required_memory_region m_char_rom;
- optional_shared_ptr<uint8_t> m_video_ram;
+ memory_share_creator<uint8_t> m_video_ram;
};
diff --git a/src/devices/bus/comx35/ram.cpp b/src/devices/bus/comx35/ram.cpp
index b468b6366ff..0f11dfdb194 100644
--- a/src/devices/bus/comx35/ram.cpp
+++ b/src/devices/bus/comx35/ram.cpp
@@ -37,7 +37,7 @@ DEFINE_DEVICE_TYPE(COMX_RAM, comx_ram_device, "comx_ram", "COMX-35 RAM Card")
comx_ram_device::comx_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, COMX_RAM, tag, owner, clock),
device_comx_expansion_card_interface(mconfig, *this),
- m_ram(*this, "ram"),
+ m_ram(*this, "ram", RAM_SIZE, ENDIANNESS_LITTLE),
m_bank(0)
{
}
@@ -49,7 +49,6 @@ comx_ram_device::comx_ram_device(const machine_config &mconfig, const char *tag,
void comx_ram_device::device_start()
{
- m_ram.allocate(RAM_SIZE);
}
diff --git a/src/devices/bus/comx35/ram.h b/src/devices/bus/comx35/ram.h
index 3a75e208eb6..8ab8703d195 100644
--- a/src/devices/bus/comx35/ram.h
+++ b/src/devices/bus/comx35/ram.h
@@ -39,7 +39,7 @@ protected:
virtual void comx_io_w(offs_t offset, uint8_t data) override;
private:
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
int m_bank;
};
diff --git a/src/devices/bus/cpc/cpc_rom.cpp b/src/devices/bus/cpc/cpc_rom.cpp
index 69bd7f80035..ff60f024f39 100644
--- a/src/devices/bus/cpc/cpc_rom.cpp
+++ b/src/devices/bus/cpc/cpc_rom.cpp
@@ -109,12 +109,12 @@ image_init_result cpc_rom_image_device::call_load()
m_base = std::make_unique<uint8_t[]>(16384);
if(size <= 16384)
{
- image->fread(m_base.get(),size);
+ image->fread(m_base,size);
}
else
{
image->fseek(size-16384,SEEK_SET);
- image->fread(m_base.get(),16384);
+ image->fread(m_base,16384);
}
return image_init_result::PASS;
diff --git a/src/devices/bus/ecbbus/grip.cpp b/src/devices/bus/ecbbus/grip.cpp
index 659bab524ad..b4a09f78523 100644
--- a/src/devices/bus/ecbbus/grip.cpp
+++ b/src/devices/bus/ecbbus/grip.cpp
@@ -567,7 +567,7 @@ ecb_grip21_device::ecb_grip21_device(const machine_config &mconfig, const char *
m_centronics(*this, CENTRONICS_TAG),
m_palette(*this, "palette"),
m_speaker(*this, "speaker"),
- m_video_ram(*this, "video_ram"),
+ m_video_ram(*this, "video_ram", VIDEORAM_SIZE, ENDIANNESS_LITTLE),
m_j3a(*this, "J3A"),
m_j3b(*this, "J3B"),
m_j7(*this, "J7"),
@@ -581,9 +581,6 @@ ecb_grip21_device::ecb_grip21_device(const machine_config &mconfig, const char *
void ecb_grip21_device::device_start()
{
- // allocate video RAM
- m_video_ram.allocate(VIDEORAM_SIZE);
-
// setup GRIP memory banking
membank("videoram")->configure_entries(0, 2, m_video_ram, 0x8000);
membank("videoram")->set_entry(0);
diff --git a/src/devices/bus/ecbbus/grip.h b/src/devices/bus/ecbbus/grip.h
index 076a61880d9..a0914f28137 100644
--- a/src/devices/bus/ecbbus/grip.h
+++ b/src/devices/bus/ecbbus/grip.h
@@ -72,7 +72,7 @@ private:
required_device<centronics_device> m_centronics;
required_device<palette_device> m_palette;
required_device<speaker_sound_device> m_speaker;
- optional_shared_ptr<uint8_t> m_video_ram;
+ memory_share_creator<uint8_t> m_video_ram;
required_ioport m_j3a;
required_ioport m_j3b;
required_ioport m_j7;
diff --git a/src/devices/bus/hp_dio/hp_dio.cpp b/src/devices/bus/hp_dio/hp_dio.cpp
index aa777e3e5dd..50cad490dc0 100644
--- a/src/devices/bus/hp_dio/hp_dio.cpp
+++ b/src/devices/bus/hp_dio/hp_dio.cpp
@@ -273,10 +273,9 @@ template void dio16_device::install_memory<read16_delegate, write16_delegate
template void dio16_device::install_memory<read16s_delegate, write16s_delegate >(offs_t start, offs_t end, read16s_delegate rhandler, write16s_delegate whandler);
template void dio16_device::install_memory<read16sm_delegate, write16sm_delegate >(offs_t start, offs_t end, read16sm_delegate rhandler, write16sm_delegate whandler);
-void dio16_device::install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data)
+void dio16_device::install_bank(offs_t start, offs_t end, uint8_t *data)
{
- m_prgspace->install_readwrite_bank(start, end, 0, tag);
- machine().root_device().membank(m_prgspace->device().siblingtag(tag).c_str())->set_base(data);
+ m_prgspace->install_ram(start, end, data);
}
void dio16_device::unmap_bank(offs_t start, offs_t end)
@@ -284,10 +283,9 @@ void dio16_device::unmap_bank(offs_t start, offs_t end)
m_prgspace->unmap_readwrite(start, end);
}
-void dio16_device::install_rom(offs_t start, offs_t end, const char *tag, uint8_t *data)
+void dio16_device::install_rom(offs_t start, offs_t end, uint8_t *data)
{
- m_prgspace->install_read_bank(start, end, 0, tag);
- machine().root_device().membank(m_prgspace->device().siblingtag(tag).c_str())->set_base(data);
+ m_prgspace->install_rom(start, end, data);
}
void dio16_device::unmap_rom(offs_t start, offs_t end)
diff --git a/src/devices/bus/hp_dio/hp_dio.h b/src/devices/bus/hp_dio/hp_dio.h
index 11738a5fc26..71d71e67106 100644
--- a/src/devices/bus/hp_dio/hp_dio.h
+++ b/src/devices/bus/hp_dio/hp_dio.h
@@ -83,8 +83,8 @@ public:
// due to the varying bus widths. Using all install_memory() shields you from this problem.
// Either know what you're doing (m_prgwidth is available to cards for this purpose) or
// only use these for 32-bit DIO-II cards.
- void install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data);
- void install_rom(offs_t start, offs_t end, const char *tag, uint8_t *data);
+ void install_bank(offs_t start, offs_t end, uint8_t *data);
+ void install_rom(offs_t start, offs_t end, uint8_t *data);
void unmap_bank(offs_t start, offs_t end);
void unmap_rom(offs_t start, offs_t end);
diff --git a/src/devices/bus/interpro/sr/sr.h b/src/devices/bus/interpro/sr/sr.h
index ef9d01d2f29..0d30905943b 100644
--- a/src/devices/bus/interpro/sr/sr.h
+++ b/src/devices/bus/interpro/sr/sr.h
@@ -75,7 +75,7 @@ public:
offs_t end = start + (CBUS_SIZE - 1);
// install the idprom region
- read32_delegate idprom_r(*this, [idprom] (address_space &space, offs_t offset, u32 mem_mask) { return idprom->as_u32(offset); }, idprom->name());
+ read32sm_delegate idprom_r(*this, [idprom] (offs_t offset) { return idprom->as_u32(offset); }, idprom->name().c_str());
m_main_space->install_read_handler(start, start | 0x7f, idprom_r);
m_io_space->install_read_handler(start, start | 0x7f, idprom_r);
@@ -171,7 +171,7 @@ public:
offs_t end = start + (SRX_SIZE - 1);
// install the idprom region
- read32_delegate idprom_r(*this, [idprom] (address_space &space, offs_t offset, u32 mem_mask) { return idprom->as_u32(offset); }, idprom->name());
+ read32sm_delegate idprom_r(*this, [idprom] (offs_t offset) { return idprom->as_u32(offset); }, idprom->name().c_str());
m_main_space->install_read_handler(start | 0x7f80, start | 0x7fff, idprom_r);
m_io_space->install_read_handler(start | 0x7f80, start | 0x7fff, idprom_r);
diff --git a/src/devices/bus/isa/3c503.cpp b/src/devices/bus/isa/3c503.cpp
index de7363ceb26..92da79a906e 100644
--- a/src/devices/bus/isa/3c503.cpp
+++ b/src/devices/bus/isa/3c503.cpp
@@ -55,7 +55,7 @@ void el2_3c503_device::device_reset() {
m_regs.ctrl = 0x0a;
m_irq_state = CLEAR_LINE;
m_isa->unmap_bank(SADDR, SADDR + 0x1fff);
- m_isa->install_bank(SADDR, SADDR + 0x1fff, "3c503 rom", m_rom);
+ m_isa->install_bank(SADDR, SADDR + 0x1fff, m_rom);
}
void el2_3c503_device::set_irq(int state) {
@@ -191,13 +191,13 @@ void el2_3c503_device::el2_3c503_hiport_w(offs_t offset, uint8_t data) {
m_isa->unmap_bank(SADDR, SADDR + 0x1fff);
switch(data & 0xf) {
case 0:
- m_isa->install_bank(SADDR, SADDR + 0x1fff, "3c503 rom", m_rom);
+ m_isa->install_bank(SADDR, SADDR + 0x1fff, m_rom);
break;
case 9:
- m_isa->install_bank(SADDR, SADDR + 0x1fff, "3c503 ram", m_board_ram);
+ m_isa->install_bank(SADDR, SADDR + 0x1fff, m_board_ram);
break;
default:
- m_isa->install_bank(SADDR, SADDR + 0x1fff, "3c503 no map", m_rom);
+ m_isa->install_bank(SADDR, SADDR + 0x1fff, m_rom);
break;
}
}
diff --git a/src/devices/bus/isa/3c505.cpp b/src/devices/bus/isa/3c505.cpp
index c45f3e9b78a..55f853acc42 100644
--- a/src/devices/bus/isa/3c505.cpp
+++ b/src/devices/bus/isa/3c505.cpp
@@ -280,7 +280,7 @@ void isa16_3c505_device::device_reset()
offs_t const rom_base = (m_romopts->read() & 0xfe) << 12;
if (m_isa->is_option_rom_space_available(rom_base, 0x2000))
- m_isa->install_rom(this, rom_base, rom_base | 0x01fff, "host", "host");
+ m_isa->install_rom(this, rom_base, rom_base | 0x01fff, "host");
}
m_isa->set_dma_channel(m_isa_drq, this, true);
diff --git a/src/devices/bus/isa/aha1542c.cpp b/src/devices/bus/isa/aha1542c.cpp
index de8e2f1fb65..34e716647ac 100644
--- a/src/devices/bus/isa/aha1542c.cpp
+++ b/src/devices/bus/isa/aha1542c.cpp
@@ -383,7 +383,7 @@ aha1542cp_device::aha1542cp_device(const machine_config &mconfig, const char *ta
void aha1542c_device::device_start()
{
set_isa_device();
- m_isa->install_rom(this, 0xdc000, 0xdffff, "aha1542", "aha1542");
+ m_isa->install_rom(this, 0xdc000, 0xdffff, "aha1542");
m_isa->install_device(0x330, 0x333,
read8sm_delegate(*this, FUNC(aha1542cf_device::aha1542_r)),
write8sm_delegate(*this, FUNC(aha1542cf_device::aha1542_w)));
diff --git a/src/devices/bus/isa/asc88.cpp b/src/devices/bus/isa/asc88.cpp
index 8843aad29a1..be80911d399 100644
--- a/src/devices/bus/isa/asc88.cpp
+++ b/src/devices/bus/isa/asc88.cpp
@@ -50,8 +50,8 @@ void asc88_device::device_start()
void asc88_device::device_reset()
{
const offs_t baseaddr = 0xc0000 | (u32(m_baseaddr->read()) << 14);
- m_isa->install_rom(this, baseaddr, baseaddr | 0x37ff, "asc88", "bios");
- m_isa->install_bank(baseaddr | 0x3800, baseaddr | 0x3fef, "ascram", m_ram.get());
+ m_isa->install_rom(this, baseaddr, baseaddr | 0x37ff, "bios");
+ m_isa->install_bank(baseaddr | 0x3800, baseaddr | 0x3fef, m_ram.get());
m_isa->install_memory(baseaddr | 0x3ff0, baseaddr | 0x3ff7,
read8sm_delegate(*m_scsic, FUNC(ncr5380n_device::read)),
write8sm_delegate(*m_scsic, FUNC(ncr5380n_device::write)));
diff --git a/src/devices/bus/isa/cga.cpp b/src/devices/bus/isa/cga.cpp
index 52a0407f065..410231822a7 100644
--- a/src/devices/bus/isa/cga.cpp
+++ b/src/devices/bus/isa/cga.cpp
@@ -332,9 +332,9 @@ void isa8_cga_device::device_start()
set_isa_device();
m_vram.resize(m_vram_size);
m_isa->install_device(0x3d0, 0x3df, read8sm_delegate(*this, FUNC(isa8_cga_device::io_read)), write8sm_delegate(*this, FUNC(isa8_cga_device::io_write)));
- m_isa->install_bank(0xb8000, 0xb8000 + (std::min<size_t>)(0x8000, m_vram_size) - 1, "bank_cga", &m_vram[0]);
+ m_isa->install_bank(0xb8000, 0xb8000 + (std::min<size_t>)(0x8000, m_vram_size) - 1, &m_vram[0]);
if(m_vram_size == 0x4000)
- m_isa->install_bank(0xbc000, 0xbffff, "bank_cga", &m_vram[0]);
+ m_isa->install_bank(0xbc000, 0xbffff, &m_vram[0]);
/* Initialise the cga palette */
int i;
@@ -1341,7 +1341,7 @@ void isa8_cga_pc1512_device::device_start()
isa8_cga_device::device_start();
m_isa->install_device(0x3d0, 0x3df, read8sm_delegate(*this, FUNC(isa8_cga_pc1512_device::io_read)), write8sm_delegate(*this, FUNC(isa8_cga_pc1512_device::io_write)));
- m_isa->install_bank(0xb8000, 0xbbfff, "bank1", &m_vram[0]);
+ m_isa->install_bank(0xb8000, 0xbbfff, &m_vram[0]);
address_space &space = m_isa->memspace();
@@ -1480,8 +1480,8 @@ void isa8_wyse700_device::device_start()
isa8_cga_device::device_start();
m_isa->install_device(0x3d0, 0x3df, read8sm_delegate(*this, FUNC(isa8_wyse700_device::io_read)), write8sm_delegate(*this, FUNC(isa8_wyse700_device::io_write)));
- m_isa->install_bank(0xa0000, 0xaffff, "bank_wy1", &m_vram[0x00000]);
- m_isa->install_bank(0xb0000, 0xbffff, "bank_cga", &m_vram[0x10000]);
+ m_isa->install_bank(0xa0000, 0xaffff, &m_vram[0x00000]);
+ m_isa->install_bank(0xb0000, 0xbffff, &m_vram[0x10000]);
}
void isa8_wyse700_device::device_reset()
@@ -1588,9 +1588,9 @@ void isa8_ec1841_0002_device::io_write(offs_t offset, uint8_t data)
read8sm_delegate( *this, FUNC(isa8_ec1841_0002_device::char_ram_read)),
write8sm_delegate(*this, FUNC(isa8_ec1841_0002_device::char_ram_write)));
} else {
- m_isa->install_bank(0xb8000, 0xb8000 + (std::min<size_t>)(0x8000, m_vram_size) - 1, "bank_cga", &m_vram[0]);
+ m_isa->install_bank(0xb8000, 0xb8000 + (std::min<size_t>)(0x8000, m_vram_size) - 1, &m_vram[0]);
if(m_vram_size == 0x4000)
- m_isa->install_bank(0xbc000, 0xbffff, "bank_cga", &m_vram[0]);
+ m_isa->install_bank(0xbc000, 0xbffff, &m_vram[0]);
}
break;
default:
@@ -1985,6 +1985,6 @@ void isa8_cga_cportiii_device::port_23c6_w(uint8_t data)
if(BIT(data, 3))
m_isa->install_memory(0xb8000, 0xb9fff, read8sm_delegate(*this, FUNC(isa8_cga_cportiii_device::char_ram_read)), write8sm_delegate(*this, FUNC(isa8_cga_cportiii_device::char_ram_write)));
else
- m_isa->install_bank(0xb8000, 0xb8000 + 0x8000 - 1, "bank_cga", &m_vram[0]);
+ m_isa->install_bank(0xb8000, 0xb8000 + 0x8000 - 1, &m_vram[0]);
}
diff --git a/src/devices/bus/isa/chessmsr.cpp b/src/devices/bus/isa/chessmsr.cpp
index 7b2dab6e286..e182ad993d3 100644
--- a/src/devices/bus/isa/chessmsr.cpp
+++ b/src/devices/bus/isa/chessmsr.cpp
@@ -32,8 +32,7 @@ isa8_chessmsr_device::isa8_chessmsr_device(const machine_config &mconfig, const
device_isa8_card_interface(mconfig, *this),
m_maincpu(*this, "maincpu"),
m_mainlatch(*this, "mainlatch"),
- m_sublatch(*this, "sublatch"),
- m_ram(*this, "ram")
+ m_sublatch(*this, "sublatch")
{ }
@@ -70,8 +69,9 @@ void isa8_chessmsr_device::device_reset()
// install RAM
u32 ramsize = 1 << ioport("RAM")->read();
- m_ram.allocate(ramsize / 4);
- m_maincpu->space(AS_PROGRAM).install_ram(0, ramsize - 1, m_ram);
+ m_ram = std::make_unique<u32[]>(ramsize / 4);
+ save_pointer(NAME(m_ram.get()), ramsize/4);
+ m_maincpu->space(AS_PROGRAM).install_ram(0, ramsize - 1, m_ram.get());
m_installed = true;
}
diff --git a/src/devices/bus/isa/chessmsr.h b/src/devices/bus/isa/chessmsr.h
index 9144db455dd..6d4becc4b64 100644
--- a/src/devices/bus/isa/chessmsr.h
+++ b/src/devices/bus/isa/chessmsr.h
@@ -37,7 +37,7 @@ private:
required_device<arm_cpu_device> m_maincpu;
required_device<generic_latch_8_device> m_mainlatch;
required_device<generic_latch_8_device> m_sublatch;
- optional_shared_ptr<u32> m_ram;
+ std::unique_ptr<u32[]> m_ram;
u8 m_ram_offset;
bool m_suspended;
diff --git a/src/devices/bus/isa/ega.cpp b/src/devices/bus/isa/ega.cpp
index 45d169f3dff..71665cd62dd 100644
--- a/src/devices/bus/isa/ega.cpp
+++ b/src/devices/bus/isa/ega.cpp
@@ -636,7 +636,7 @@ void isa8_ega_device::device_start()
m_plane[2] = m_videoram + 0x20000;
m_plane[3] = m_videoram + 0x30000;
- m_isa->install_rom(this, 0xc0000, 0xc3fff, "ega", "user2");
+ m_isa->install_rom(this, 0xc0000, 0xc3fff, "user2");
m_isa->install_device(0x3b0, 0x3bf, read8sm_delegate(*this, FUNC(isa8_ega_device::pc_ega8_3b0_r)), write8sm_delegate(*this, FUNC(isa8_ega_device::pc_ega8_3b0_w)));
m_isa->install_device(0x3c0, 0x3cf, read8sm_delegate(*this, FUNC(isa8_ega_device::pc_ega8_3c0_r)), write8sm_delegate(*this, FUNC(isa8_ega_device::pc_ega8_3c0_w)));
m_isa->install_device(0x3d0, 0x3df, read8sm_delegate(*this, FUNC(isa8_ega_device::pc_ega8_3d0_r)), write8sm_delegate(*this, FUNC(isa8_ega_device::pc_ega8_3d0_w)));
diff --git a/src/devices/bus/isa/eis_hgb107x.cpp b/src/devices/bus/isa/eis_hgb107x.cpp
index 25b16a38fe3..ed3100c3e97 100644
--- a/src/devices/bus/isa/eis_hgb107x.cpp
+++ b/src/devices/bus/isa/eis_hgb107x.cpp
@@ -243,13 +243,13 @@ void isa8_epc_mda_device::device_reset()
if (m_installed == false)
{
m_isa->install_device(0x3b0, 0x3bf, read8sm_delegate(*this, FUNC(isa8_epc_mda_device::io_read)), write8sm_delegate(*this, FUNC(isa8_epc_mda_device::io_write)));
- m_isa->install_bank(0xb0000, 0xb7fff, "bank_epc", &m_videoram[0]); // Monochrome emulation mode VRAM address
+ m_isa->install_bank(0xb0000, 0xb7fff, &m_videoram[0]); // Monochrome emulation mode VRAM address
// This check allows a color monitor adapter to be installed at this address range if color emulation is disabled
if (m_color_mode & 1)
{
m_isa->install_device(0x3d0, 0x3df, read8sm_delegate(*this, FUNC(isa8_epc_mda_device::io_read)), write8sm_delegate(*this, FUNC(isa8_epc_mda_device::io_write)));
- m_isa->install_bank(0xb8000, 0xbffff, "bank_epc", &m_videoram[0]); // Color emulation mode VRAM address, but same 32KB areas as there are only this amount on the board
+ m_isa->install_bank(0xb8000, 0xbffff, &m_videoram[0]); // Color emulation mode VRAM address, but same 32KB areas as there are only this amount on the board
}
m_installed = true;
}
diff --git a/src/devices/bus/isa/hdc.cpp b/src/devices/bus/isa/hdc.cpp
index 06d18b3c600..3a890ebd93c 100644
--- a/src/devices/bus/isa/hdc.cpp
+++ b/src/devices/bus/isa/hdc.cpp
@@ -1000,7 +1000,7 @@ void isa8_hdc_device::device_reset()
dip = ioport("HDD")->read();
if (ioport("ROM")->read() == 1 && m_hdc->install_rom())
- m_isa->install_rom(this, 0xc8000, 0xc9fff, "hdc", "hdc");
+ m_isa->install_rom(this, 0xc8000, 0xc9fff, "hdc");
}
/*************************************************************************
diff --git a/src/devices/bus/isa/isa.cpp b/src/devices/bus/isa/isa.cpp
index bc653258375..8a25218d2bd 100644
--- a/src/devices/bus/isa/isa.cpp
+++ b/src/devices/bus/isa/isa.cpp
@@ -356,10 +356,9 @@ template void isa8_device::install_space<read8smo_delegate, write8sm_delegate >(
template void isa8_device::install_space<read8smo_delegate, write8mo_delegate >(int spacenum, offs_t start, offs_t end, read8smo_delegate rhandler, write8mo_delegate whandler);
template void isa8_device::install_space<read8smo_delegate, write8smo_delegate>(int spacenum, offs_t start, offs_t end, read8smo_delegate rhandler, write8smo_delegate whandler);
-void isa8_device::install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data)
+void isa8_device::install_bank(offs_t start, offs_t end, uint8_t *data)
{
- m_memspace->install_readwrite_bank(start, end, 0, tag );
- machine().root_device().membank(m_memspace->device().siblingtag(tag).c_str())->set_base(data);
+ m_memspace->install_ram(start, end, data);
}
void isa8_device::unmap_bank(offs_t start, offs_t end)
@@ -367,16 +366,15 @@ void isa8_device::unmap_bank(offs_t start, offs_t end)
m_memspace->unmap_readwrite(start, end);
}
-void isa8_device::install_rom(device_t *dev, offs_t start, offs_t end, const char *tag, const char *region)
+void isa8_device::install_rom(device_t *dev, offs_t start, offs_t end, const char *region)
{
if (machine().root_device().memregion("isa")) {
uint8_t *src = dev->memregion(region)->base();
uint8_t *dest = machine().root_device().memregion("isa")->base() + start - 0xc0000;
memcpy(dest,src, end - start + 1);
} else {
- m_memspace->install_read_bank(start, end, 0, tag);
+ m_memspace->install_rom(start, end, machine().root_device().memregion(dev->subtag(region).c_str())->base());
m_memspace->unmap_write(start, end);
- machine().root_device().membank(m_memspace->device().siblingtag(tag).c_str())->set_base(machine().root_device().memregion(dev->subtag(region).c_str())->base());
}
}
diff --git a/src/devices/bus/isa/isa.h b/src/devices/bus/isa/isa.h
index 696d825a55e..1e9fdaeddfe 100644
--- a/src/devices/bus/isa/isa.h
+++ b/src/devices/bus/isa/isa.h
@@ -151,8 +151,8 @@ public:
{
m_iospace->install_device(addrstart, addrend, device, map, unitmask);
}
- void install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data);
- void install_rom(device_t *dev, offs_t start, offs_t end, const char *tag, const char *region);
+ void install_bank(offs_t start, offs_t end, uint8_t *data);
+ void install_rom(device_t *dev, offs_t start, offs_t end, const char *region);
template<typename R, typename W> void install_memory(offs_t start, offs_t end, R rhandler, W whandler)
{
install_space(AS_ISA_MEM, start, end, rhandler, whandler);
diff --git a/src/devices/bus/isa/lbaenhancer.cpp b/src/devices/bus/isa/lbaenhancer.cpp
index f8ebedb130c..242f1f47afe 100644
--- a/src/devices/bus/isa/lbaenhancer.cpp
+++ b/src/devices/bus/isa/lbaenhancer.cpp
@@ -133,7 +133,7 @@ void lba_enhancer_device::device_reset()
m_current_rom_start = 0xc8000 + (ioport("ROM_ADDRESS")->read()* 0x4000);
uint32_t current_rom_end = m_current_rom_start + 0x04000 - 1;
- m_isa->install_rom(this, m_current_rom_start, current_rom_end, "lbabios", "lbabios");
+ m_isa->install_rom(this, m_current_rom_start, current_rom_end, "lbabios");
logerror("LBA enhancer (for 28 bit LBA) located at BIOS address %x - %x\n", m_current_rom_start, current_rom_end);
}
diff --git a/src/devices/bus/isa/mc1502_rom.cpp b/src/devices/bus/isa/mc1502_rom.cpp
index 7e612c10832..f3a78cb93a6 100644
--- a/src/devices/bus/isa/mc1502_rom.cpp
+++ b/src/devices/bus/isa/mc1502_rom.cpp
@@ -59,7 +59,7 @@ mc1502_rom_device::mc1502_rom_device(const machine_config &mconfig, const char *
void mc1502_rom_device::device_start()
{
set_isa_device();
- m_isa->install_rom(this, 0xe8000, 0xeffff, "XXX", "mc1502_rom");
+ m_isa->install_rom(this, 0xe8000, 0xeffff, "mc1502_rom");
}
diff --git a/src/devices/bus/isa/mda.cpp b/src/devices/bus/isa/mda.cpp
index ae61e78e116..e3ff8e90f99 100644
--- a/src/devices/bus/isa/mda.cpp
+++ b/src/devices/bus/isa/mda.cpp
@@ -183,14 +183,14 @@ void isa8_mda_device::device_start()
set_isa_device();
m_videoram.resize(0x1000);
m_isa->install_device(0x3b0, 0x3bf, read8sm_delegate(*this, FUNC(isa8_mda_device::io_read)), write8sm_delegate(*this, FUNC(isa8_mda_device::io_write)));
- m_isa->install_bank(0xb0000, 0xb0fff, "bank_mda", &m_videoram[0]);
- m_isa->install_bank(0xb1000, 0xb1fff, "bank_mda", &m_videoram[0]);
- m_isa->install_bank(0xb2000, 0xb2fff, "bank_mda", &m_videoram[0]);
- m_isa->install_bank(0xb3000, 0xb3fff, "bank_mda", &m_videoram[0]);
- m_isa->install_bank(0xb4000, 0xb4fff, "bank_mda", &m_videoram[0]);
- m_isa->install_bank(0xb5000, 0xb5fff, "bank_mda", &m_videoram[0]);
- m_isa->install_bank(0xb6000, 0xb6fff, "bank_mda", &m_videoram[0]);
- m_isa->install_bank(0xb7000, 0xb7fff, "bank_mda", &m_videoram[0]);
+ m_isa->install_bank(0xb0000, 0xb0fff, &m_videoram[0]);
+ m_isa->install_bank(0xb1000, 0xb1fff, &m_videoram[0]);
+ m_isa->install_bank(0xb2000, 0xb2fff, &m_videoram[0]);
+ m_isa->install_bank(0xb3000, 0xb3fff, &m_videoram[0]);
+ m_isa->install_bank(0xb4000, 0xb4fff, &m_videoram[0]);
+ m_isa->install_bank(0xb5000, 0xb5fff, &m_videoram[0]);
+ m_isa->install_bank(0xb6000, 0xb6fff, &m_videoram[0]);
+ m_isa->install_bank(0xb7000, 0xb7fff, &m_videoram[0]);
/* Initialise the mda palette */
for (int i = 0; i < 4; i++)
@@ -601,7 +601,7 @@ void isa8_hercules_device::device_start()
m_videoram.resize(0x10000);
set_isa_device();
m_isa->install_device(0x3b0, 0x3bf, read8sm_delegate(*this, FUNC(isa8_hercules_device::io_read)), write8sm_delegate(*this, FUNC(isa8_hercules_device::io_write)));
- m_isa->install_bank(0xb0000, 0xbffff, "bank_hercules", &m_videoram[0]);
+ m_isa->install_bank(0xb0000, 0xbffff, &m_videoram[0]);
/* Initialise the mda palette */
for(int i = 0; i < (sizeof(mda_palette) / 3); i++)
@@ -797,8 +797,8 @@ void isa8_ec1840_0002_device::device_start()
isa8_mda_device::device_start();
m_soft_chr_gen = std::make_unique<uint8_t[]>(0x2000);
- m_isa->install_bank(0xdc000, 0xddfff, "bank_chargen", m_soft_chr_gen.get());
- m_isa->install_bank(0xde000, 0xdffff, "bank_chargen", m_soft_chr_gen.get());
+ m_isa->install_bank(0xdc000, 0xddfff, m_soft_chr_gen.get());
+ m_isa->install_bank(0xde000, 0xdffff, m_soft_chr_gen.get());
}
void isa8_ec1840_0002_device::device_reset()
diff --git a/src/devices/bus/isa/mufdc.cpp b/src/devices/bus/isa/mufdc.cpp
index 58408d191e7..652090d7c1d 100644
--- a/src/devices/bus/isa/mufdc.cpp
+++ b/src/devices/bus/isa/mufdc.cpp
@@ -160,7 +160,7 @@ void mufdc_device::device_start()
void mufdc_device::device_reset()
{
- m_isa->install_rom(this, 0xc8000, 0xc9fff, shortname(), "option");
+ m_isa->install_rom(this, 0xc8000, 0xc9fff, "option");
m_isa->install_device(0x3f0, 0x3f7, *m_fdc, &mcs3201_device::map);
m_isa->set_dma_channel(2, this, true);
}
diff --git a/src/devices/bus/isa/p1_fdc.cpp b/src/devices/bus/isa/p1_fdc.cpp
index c1671279b08..92915dc3d9b 100644
--- a/src/devices/bus/isa/p1_fdc.cpp
+++ b/src/devices/bus/isa/p1_fdc.cpp
@@ -172,7 +172,7 @@ p1_fdc_device::p1_fdc_device(const machine_config &mconfig, const char *tag, dev
void p1_fdc_device::device_start()
{
set_isa_device();
- m_isa->install_rom(this, 0xe0000, 0xe07ff, "XXX", "p1_fdc");
+ m_isa->install_rom(this, 0xe0000, 0xe07ff, "p1_fdc");
m_isa->install_device(0x00c0, 0x00c3, read8sm_delegate(*m_fdc, FUNC(fd1793_device::read)), write8sm_delegate(*m_fdc, FUNC(fd1793_device::write)));
m_isa->install_device(0x00c4, 0x00c7, read8sm_delegate(*this, FUNC(p1_fdc_device::p1_fdc_r)), write8sm_delegate(*this, FUNC(p1_fdc_device::p1_fdc_w)));
}
diff --git a/src/devices/bus/isa/p1_hdc.cpp b/src/devices/bus/isa/p1_hdc.cpp
index b9b3aad2981..9ee84ece875 100644
--- a/src/devices/bus/isa/p1_hdc.cpp
+++ b/src/devices/bus/isa/p1_hdc.cpp
@@ -126,7 +126,7 @@ p1_hdc_device::p1_hdc_device(const machine_config &mconfig, const char *tag, dev
void p1_hdc_device::device_start()
{
set_isa_device();
- m_isa->install_rom(this, 0xe2000, 0xe27ff, "XXX", "p1_hdc");
+ m_isa->install_rom(this, 0xe2000, 0xe27ff, "p1_hdc");
m_isa->install_memory(0xd0000, 0xd0fff, read8sm_delegate(*this, FUNC(p1_hdc_device::p1_HDC_r)), write8sm_delegate(*this, FUNC(p1_hdc_device::p1_HDC_w)));
}
diff --git a/src/devices/bus/isa/p1_rom.cpp b/src/devices/bus/isa/p1_rom.cpp
index 22faf40df01..76013aca719 100644
--- a/src/devices/bus/isa/p1_rom.cpp
+++ b/src/devices/bus/isa/p1_rom.cpp
@@ -64,7 +64,7 @@ p1_rom_device::p1_rom_device(const machine_config &mconfig, const char *tag, dev
void p1_rom_device::device_start()
{
set_isa_device();
- m_isa->install_rom(this, 0xc0000, 0xc1fff, "XXX", "p1_rom");
+ m_isa->install_rom(this, 0xc0000, 0xc1fff, "p1_rom");
}
diff --git a/src/devices/bus/isa/pc1640_iga.cpp b/src/devices/bus/isa/pc1640_iga.cpp
index 4c9b2719b7c..96ae2da109b 100644
--- a/src/devices/bus/isa/pc1640_iga.cpp
+++ b/src/devices/bus/isa/pc1640_iga.cpp
@@ -101,7 +101,7 @@ void isa8_pc1640_iga_device::device_start()
m_plane[2] = m_videoram + 0x20000;
m_plane[3] = m_videoram + 0x30000;
- m_isa->install_rom(this, 0xc0000, 0xc7fff, "ega", "iga");
+ m_isa->install_rom(this, 0xc0000, 0xc7fff, "iga");
m_isa->install_device(0x3b0, 0x3bf, read8sm_delegate(*this, FUNC(isa8_ega_device::pc_ega8_3b0_r)), write8sm_delegate(*this, FUNC(isa8_ega_device::pc_ega8_3b0_w)));
m_isa->install_device(0x3c0, 0x3cf, read8sm_delegate(*this, FUNC(isa8_ega_device::pc_ega8_3c0_r)), write8sm_delegate(*this, FUNC(isa8_ega_device::pc_ega8_3c0_w)));
m_isa->install_device(0x3d0, 0x3df, read8sm_delegate(*this, FUNC(isa8_ega_device::pc_ega8_3d0_r)), write8sm_delegate(*this, FUNC(isa8_ega_device::pc_ega8_3d0_w)));
diff --git a/src/devices/bus/isa/pgc.cpp b/src/devices/bus/isa/pgc.cpp
index f204333f9f2..4b51ebcd0de 100644
--- a/src/devices/bus/isa/pgc.cpp
+++ b/src/devices/bus/isa/pgc.cpp
@@ -71,8 +71,6 @@ ROM_START( pgc )
ROMX_LOAD("pgc_u44.bin", 0x00000, 0x8000, CRC(71280241) SHA1(7042ccd4ebd03f576a256a433b8aa38d1b4fefa8), ROM_BIOS(1))
ROMX_LOAD("pgc_u43.bin", 0x08000, 0x8000, CRC(923f5ea3) SHA1(2b2a55d64b20d3a613b00c51443105aa03eca5d6), ROM_BIOS(1))
- ROM_REGION(0x800, "commarea", ROMREGION_ERASE00)
-
ROM_REGION(0x1000, "chargen", 0)
ROM_LOAD("pgc_u27.bin", 0x0000, 0x1000, CRC(6be256cc) SHA1(deb1195886268dcddce10459911e020f7a9f74f7))
ROM_END
@@ -113,7 +111,7 @@ void isa8_pgc_device::pgc_map(address_map &map)
map(0x08000, 0x0ffff).rom().region("maincpu", 0x8000);
map(0x10000, 0x1001f).rw(FUNC(isa8_pgc_device::stateparam_r), FUNC(isa8_pgc_device::stateparam_w));
// map(0x18000, 0x18fff).ram(); // ??
- map(0x28000, 0x287ff).ram().region("commarea", 0).mirror(0x800);
+ map(0x28000, 0x287ff).ram().share("commarea").mirror(0x800);
map(0x32001, 0x32001).nopw();
map(0x32020, 0x3203f).w(FUNC(isa8_pgc_device::accel_w));
map(0x3c000, 0x3c001).r(FUNC(isa8_pgc_device::init_r));
@@ -210,7 +208,8 @@ isa8_pgc_device::isa8_pgc_device(const machine_config &mconfig, device_type type
m_cpu(*this, "maincpu"),
m_screen(*this, PGC_SCREEN_NAME),
m_palette(*this, "palette"),
- m_commarea(nullptr), m_vram(nullptr), m_eram(nullptr)
+ m_commarea(*this, "commarea"),
+ m_vram(nullptr), m_eram(nullptr)
{
}
@@ -246,11 +245,10 @@ void isa8_pgc_device::device_reset()
memset(m_lut, 0, sizeof(m_lut));
m_accel = 0;
- m_commarea = memregion("commarea")->base();
if (BIT(ioport("DSW")->read(), 1))
- m_isa->install_bank(0xc6400, 0xc67ff, "commarea", m_commarea);
+ m_isa->install_bank(0xc6400, 0xc67ff, m_commarea);
else
- m_isa->install_bank(0xc6000, 0xc63ff, "commarea", m_commarea);
+ m_isa->install_bank(0xc6000, 0xc63ff, m_commarea);
}
//
@@ -389,8 +387,7 @@ uint8_t isa8_pgc_device::init_r()
space.unmap_read(0xf8000, 0xfffff);
LOG("INIT: mapping emulator RAM\n");
- space.install_readwrite_bank(0xf8000, 0xfffff, "eram");
- membank("eram")->set_base(m_eram.get());
+ space.install_ram(0xf8000, 0xfffff, m_eram.get());
LOG("INIT: mapping LUT\n");
space.install_write_handler(0xf8400, 0xf85ff, write8sm_delegate(*this, FUNC(isa8_pgc_device::lut_w)));
diff --git a/src/devices/bus/isa/pgc.h b/src/devices/bus/isa/pgc.h
index b14ea6e5797..d560dbdda09 100644
--- a/src/devices/bus/isa/pgc.h
+++ b/src/devices/bus/isa/pgc.h
@@ -60,8 +60,8 @@ private:
required_device<i8088_cpu_device> m_cpu;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
+ required_shared_ptr<uint8_t> m_commarea;
- uint8_t *m_commarea;
std::unique_ptr<uint8_t[]> m_vram;
std::unique_ptr<uint8_t[]> m_eram;
uint8_t m_stateparam[16];
diff --git a/src/devices/bus/isa/side116.cpp b/src/devices/bus/isa/side116.cpp
index e45d66b26bd..bad6645bf5a 100644
--- a/src/devices/bus/isa/side116.cpp
+++ b/src/devices/bus/isa/side116.cpp
@@ -112,10 +112,10 @@ void side116_device::device_reset()
{
switch ((m_config->read() >> 1) & 0x03)
{
- case 0: m_isa->install_rom(this, 0xc8000, 0xc9fff, "side116", "option"); break;
- case 1: m_isa->install_rom(this, 0xd8000, 0xd9fff, "side116", "option"); break;
- case 2: m_isa->install_rom(this, 0xcc000, 0xcdfff, "side116", "option"); break;
- case 3: m_isa->install_rom(this, 0xdc000, 0xddfff, "side116", "option"); break;
+ case 0: m_isa->install_rom(this, 0xc8000, 0xc9fff, "option"); break;
+ case 1: m_isa->install_rom(this, 0xd8000, 0xd9fff, "option"); break;
+ case 2: m_isa->install_rom(this, 0xcc000, 0xcdfff, "option"); break;
+ case 3: m_isa->install_rom(this, 0xdc000, 0xddfff, "option"); break;
}
}
diff --git a/src/devices/bus/isa/svga_cirrus.cpp b/src/devices/bus/isa/svga_cirrus.cpp
index e1cebaf9a32..943606e9be4 100644
--- a/src/devices/bus/isa/svga_cirrus.cpp
+++ b/src/devices/bus/isa/svga_cirrus.cpp
@@ -72,7 +72,7 @@ void isa16_svga_cirrus_device::device_start()
{
set_isa_device();
- m_isa->install_rom(this, 0xc0000, 0xc7fff, "svga", "dm_clgd5430");
+ m_isa->install_rom(this, 0xc0000, 0xc7fff, "dm_clgd5430");
m_isa->install_device(0x03b0, 0x03bf, read8sm_delegate(*m_vga, FUNC(cirrus_gd5430_device::port_03b0_r)), write8sm_delegate(*m_vga, FUNC(cirrus_gd5430_device::port_03b0_w)));
m_isa->install_device(0x03c0, 0x03cf, read8sm_delegate(*m_vga, FUNC(cirrus_gd5430_device::port_03c0_r)), write8sm_delegate(*m_vga, FUNC(cirrus_gd5430_device::port_03c0_w)));
@@ -150,7 +150,7 @@ void isa16_svga_cirrus_gd542x_device::device_start()
{
set_isa_device();
- m_isa->install_rom(this, 0xc0000, 0xc7fff, "svga", "clgd542x");
+ m_isa->install_rom(this, 0xc0000, 0xc7fff, "clgd542x");
m_isa->install_device(0x03b0, 0x03bf, read8sm_delegate(*m_vga, FUNC(cirrus_gd5428_device::port_03b0_r)), write8sm_delegate(*m_vga, FUNC(cirrus_gd5428_device::port_03b0_w)));
m_isa->install_device(0x03c0, 0x03cf, read8sm_delegate(*m_vga, FUNC(cirrus_gd5428_device::port_03c0_r)), write8sm_delegate(*m_vga, FUNC(cirrus_gd5428_device::port_03c0_w)));
diff --git a/src/devices/bus/isa/svga_s3.cpp b/src/devices/bus/isa/svga_s3.cpp
index a50c3a8d0fb..b4334f269ef 100644
--- a/src/devices/bus/isa/svga_s3.cpp
+++ b/src/devices/bus/isa/svga_s3.cpp
@@ -82,7 +82,7 @@ void isa16_svga_s3_device::device_start()
{
set_isa_device();
- m_isa->install_rom(this, 0xc0000, 0xc7fff, "svga", "s3_764");
+ m_isa->install_rom(this, 0xc0000, 0xc7fff, "s3_764");
m_isa->install_device(0x03b0, 0x03bf, read8sm_delegate(*m_vga, FUNC(s3_vga_device::port_03b0_r)), write8sm_delegate(*m_vga, FUNC(s3_vga_device::port_03b0_w)));
m_isa->install_device(0x03c0, 0x03cf, read8sm_delegate(*m_vga, FUNC(s3_vga_device::port_03c0_r)), write8sm_delegate(*m_vga, FUNC(s3_vga_device::port_03c0_w)));
@@ -196,7 +196,7 @@ void isa16_s3virge_device::device_start()
{
set_isa_device();
- m_isa->install_rom(this, 0xc0000, 0xc7fff, "svga", "s3virge");
+ m_isa->install_rom(this, 0xc0000, 0xc7fff, "s3virge");
m_isa->install_device(0x03b0, 0x03bf, read8sm_delegate(*m_vga, FUNC(s3virge_vga_device::port_03b0_r)), write8sm_delegate(*m_vga, FUNC(s3virge_vga_device::port_03b0_w)));
m_isa->install_device(0x03c0, 0x03cf, read8sm_delegate(*m_vga, FUNC(s3virge_vga_device::port_03c0_r)), write8sm_delegate(*m_vga, FUNC(s3virge_vga_device::port_03c0_w)));
@@ -302,7 +302,7 @@ void isa16_s3virgedx_device::device_start()
{
set_isa_device();
- m_isa->install_rom(this, 0xc0000, 0xc7fff, "svga", "s3virgedx");
+ m_isa->install_rom(this, 0xc0000, 0xc7fff, "s3virgedx");
m_isa->install_device(0x03b0, 0x03bf, read8sm_delegate(*m_vga, FUNC(s3virge_vga_device::port_03b0_r)), write8sm_delegate(*m_vga, FUNC(s3virge_vga_device::port_03b0_w)));
m_isa->install_device(0x03c0, 0x03cf, read8sm_delegate(*m_vga, FUNC(s3virge_vga_device::port_03c0_r)), write8sm_delegate(*m_vga, FUNC(s3virge_vga_device::port_03c0_w)));
@@ -400,7 +400,7 @@ void isa16_stealth3d2kpro_device::device_start()
{
set_isa_device();
- m_isa->install_rom(this, 0xc0000, 0xc7fff, "svga", "stealth3d");
+ m_isa->install_rom(this, 0xc0000, 0xc7fff, "stealth3d");
m_isa->install_device(0x03b0, 0x03bf, read8sm_delegate(*m_vga, FUNC(s3virge_vga_device::port_03b0_r)), write8sm_delegate(*m_vga, FUNC(s3virge_vga_device::port_03b0_w)));
m_isa->install_device(0x03c0, 0x03cf, read8sm_delegate(*m_vga, FUNC(s3virge_vga_device::port_03c0_r)), write8sm_delegate(*m_vga, FUNC(s3virge_vga_device::port_03c0_w)));
diff --git a/src/devices/bus/isa/svga_trident.cpp b/src/devices/bus/isa/svga_trident.cpp
index 5c934e99bf0..7eda60d2446 100644
--- a/src/devices/bus/isa/svga_trident.cpp
+++ b/src/devices/bus/isa/svga_trident.cpp
@@ -72,7 +72,7 @@ void isa16_svga_tgui9680_device::device_start()
{
set_isa_device();
- m_isa->install_rom(this, 0xc0000, 0xc7fff, "tgui9680", "tgui9680");
+ m_isa->install_rom(this, 0xc0000, 0xc7fff, "tgui9680");
m_isa->install_device(0x3b0, 0x3bf, read8sm_delegate(*m_vga, FUNC(trident_vga_device::port_03b0_r)), write8sm_delegate(*m_vga, FUNC(trident_vga_device::port_03b0_w)));
m_isa->install_device(0x3c0, 0x3cf, read8sm_delegate(*m_vga, FUNC(trident_vga_device::port_03c0_r)), write8sm_delegate(*m_vga, FUNC(trident_vga_device::port_03c0_w)));
diff --git a/src/devices/bus/isa/svga_tseng.cpp b/src/devices/bus/isa/svga_tseng.cpp
index 48ee7324b2e..ab5bbb755f0 100644
--- a/src/devices/bus/isa/svga_tseng.cpp
+++ b/src/devices/bus/isa/svga_tseng.cpp
@@ -114,5 +114,5 @@ void isa8_svga_et4k_device::map_ram()
void isa8_svga_et4k_device::map_rom()
{
- m_isa->install_rom(this, 0xc0000, 0xc7fff, "et4000", "et4000");
+ m_isa->install_rom(this, 0xc0000, 0xc7fff, "et4000");
}
diff --git a/src/devices/bus/isa/vga.cpp b/src/devices/bus/isa/vga.cpp
index 9772690c46e..11d94d7fbdd 100644
--- a/src/devices/bus/isa/vga.cpp
+++ b/src/devices/bus/isa/vga.cpp
@@ -69,7 +69,7 @@ void isa8_vga_device::device_start()
{
set_isa_device();
- m_isa->install_rom(this, 0xc0000, 0xc7fff, "ibm_vga", "ibm_vga");
+ m_isa->install_rom(this, 0xc0000, 0xc7fff, "ibm_vga");
m_isa->install_device(0x3b0, 0x3bf, read8sm_delegate(*m_vga, FUNC(vga_device::port_03b0_r)), write8sm_delegate(*m_vga, FUNC(vga_device::port_03b0_w)));
m_isa->install_device(0x3c0, 0x3cf, read8sm_delegate(*m_vga, FUNC(vga_device::port_03c0_r)), write8sm_delegate(*m_vga, FUNC(vga_device::port_03c0_w)));
diff --git a/src/devices/bus/isa/vga_ati.cpp b/src/devices/bus/isa/vga_ati.cpp
index 177e30f14c7..d6ce586a9fd 100644
--- a/src/devices/bus/isa/vga_ati.cpp
+++ b/src/devices/bus/isa/vga_ati.cpp
@@ -163,7 +163,7 @@ void isa16_vga_gfxultra_device::device_start()
{
set_isa_device();
- m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga", "gfxultra");
+ m_isa->install_rom(this, 0xc0000, 0xc7fff, "gfxultra");
m_isa->install_device(0x1ce, 0x1cf, read8sm_delegate(*m_vga, FUNC(ati_vga_device::ati_port_ext_r)), write8sm_delegate(*m_vga, FUNC(ati_vga_device::ati_port_ext_w)));
m_isa->install_device(0x2e8, 0x2ef, read8sm_delegate(*m_8514, FUNC(mach8_device::ibm8514_status_r)), write8sm_delegate(*m_8514, FUNC(mach8_device::ibm8514_htotal_w)));
@@ -224,7 +224,7 @@ void isa16_vga_gfxultrapro_device::device_start()
{
set_isa_device();
- m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga", "gfxultrapro");
+ m_isa->install_rom(this, 0xc0000, 0xc7fff, "gfxultrapro");
m_isa->install_device(0x1ce, 0x1cf, read8sm_delegate(*m_vga, FUNC(mach32_device::ati_port_ext_r)), write8sm_delegate(*m_vga, FUNC(mach32_device::ati_port_ext_w)));
m_isa->install_device(0x2e8, 0x2ef, read8sm_delegate(*m_vga, FUNC(mach32_device::mach32_status_r)), write8sm_delegate(*m_vga, FUNC(mach32_device::ibm8514_htotal_w)));
@@ -293,7 +293,7 @@ void isa16_vga_mach64_device::device_start()
{
set_isa_device();
- m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga", "mach64");
+ m_isa->install_rom(this, 0xc0000, 0xc7fff, "mach64");
m_isa->install_device(0x1ce, 0x1cf, read8sm_delegate(*m_vga, FUNC(mach64_device::ati_port_ext_r)), write8sm_delegate(*m_vga, FUNC(mach64_device::ati_port_ext_w)));
m_isa->install_device(0x2e8, 0x2ef, read8sm_delegate(*m_vga, FUNC(mach64_device::mach32_status_r)), write8sm_delegate(*m_vga, FUNC(mach64_device::ibm8514_htotal_w)));
diff --git a/src/devices/bus/isa/wdxt_gen.cpp b/src/devices/bus/isa/wdxt_gen.cpp
index b86188d3249..fb2a8fd1965 100644
--- a/src/devices/bus/isa/wdxt_gen.cpp
+++ b/src/devices/bus/isa/wdxt_gen.cpp
@@ -199,7 +199,7 @@ wdxt_gen_device::wdxt_gen_device(const machine_config &mconfig, const char *tag,
void wdxt_gen_device::device_start()
{
set_isa_device();
- m_isa->install_rom(this, 0xc8000, 0xc9fff, "hdc", "hdc");
+ m_isa->install_rom(this, 0xc8000, 0xc9fff, "hdc");
m_isa->install_device(0x0320, 0x0323, read8sm_delegate(*m_host, FUNC(wd11c00_17_device::io_r)), write8sm_delegate(*m_host, FUNC(wd11c00_17_device::io_w)));
m_isa->set_dma_channel(3, this, false);
}
diff --git a/src/devices/bus/lpci/northbridge.cpp b/src/devices/bus/lpci/northbridge.cpp
index 57c802a9e20..0384a9637e4 100644
--- a/src/devices/bus/lpci/northbridge.cpp
+++ b/src/devices/bus/lpci/northbridge.cpp
@@ -33,9 +33,7 @@ void northbridge_device::device_start()
if (m_ram->size() > 0x100000)
{
offs_t ram_limit = 0x100000 + m_ram->size() - 0x100000;
- space.install_read_bank (0x100000, ram_limit - 1, "bank1");
- space.install_write_bank(0x100000, ram_limit - 1, "bank1");
- machine().root_device().membank("bank1")->set_base(m_ram->pointer() + 0x100000);
+ space.install_ram(0x100000, ram_limit - 1, m_ram->pointer() + 0x100000);
}
}
diff --git a/src/devices/bus/macpds/macpds.cpp b/src/devices/bus/macpds/macpds.cpp
index 3a7a87f85d2..9f17df8cb6d 100644
--- a/src/devices/bus/macpds/macpds.cpp
+++ b/src/devices/bus/macpds/macpds.cpp
@@ -111,13 +111,12 @@ template void macpds_device::install_device<read16s_delegate, write16s_delegat
template void macpds_device::install_device<read16sm_delegate, write16sm_delegate >(offs_t start, offs_t end, read16sm_delegate rhandler, write16sm_delegate whandler, uint32_t mask);
template void macpds_device::install_device<read16smo_delegate, write16smo_delegate>(offs_t start, offs_t end, read16smo_delegate rhandler, write16smo_delegate whandler, uint32_t mask);
-void macpds_device::install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data)
+void macpds_device::install_bank(offs_t start, offs_t end, uint8_t *data)
{
// printf("install_bank: %s @ %x->%x\n", tag, start, end);
m_maincpu = machine().device<cpu_device>(m_cputag);
address_space &space = m_maincpu->space(AS_PROGRAM);
- space.install_readwrite_bank(start, end, 0, tag );
- machine().root_device().membank(siblingtag(tag).c_str())->set_base(data);
+ space.install_ram(start, end, data);
}
void macpds_device::set_irq_line(int line, int state)
@@ -160,22 +159,15 @@ void device_macpds_card_interface::set_macpds_device()
m_macpds->add_macpds_card(this);
}
-void device_macpds_card_interface::install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data)
+void device_macpds_card_interface::install_bank(offs_t start, offs_t end, uint8_t *data)
{
- char bank[256];
-
- // append an underscore and the slot name to the bank so it's guaranteed unique
- snprintf(bank, sizeof(bank), "%s_%s", tag, m_macpds_slottag);
-
- m_macpds->install_bank(start, end, bank, data);
+ m_macpds->install_bank(start, end, data);
}
void device_macpds_card_interface::install_rom(device_t *dev, const char *romregion, uint32_t addr)
{
uint8_t *rom = device().machine().root_device().memregion(dev->subtag(romregion).c_str())->base();
uint32_t romlen = device().machine().root_device().memregion(dev->subtag(romregion).c_str())->bytes();
- char bankname[128];
- sprintf(bankname, "rom_%x", addr);
- m_macpds->install_bank(addr, addr+romlen-1, bankname, rom);
+ m_macpds->install_bank(addr, addr+romlen-1, rom);
}
diff --git a/src/devices/bus/macpds/macpds.h b/src/devices/bus/macpds/macpds.h
index 1977447a87b..cd3f84659d0 100644
--- a/src/devices/bus/macpds/macpds.h
+++ b/src/devices/bus/macpds/macpds.h
@@ -74,7 +74,7 @@ public:
void add_macpds_card(device_macpds_card_interface *card);
template<typename R, typename W> void install_device(offs_t start, offs_t end, R rhandler, W whandler, uint32_t mask=0xffffffff);
- void install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data);
+ void install_bank(offs_t start, offs_t end, uint8_t *data);
void set_irq_line(int line, int state);
protected:
@@ -111,7 +111,7 @@ public:
void set_macpds_device();
// helper functions for card devices
- void install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data);
+ void install_bank(offs_t start, offs_t end, uint8_t *data);
void install_rom(device_t *dev, const char *romregion, uint32_t addr);
// inline configuration
diff --git a/src/devices/bus/macpds/pds_tpdfpd.cpp b/src/devices/bus/macpds/pds_tpdfpd.cpp
index 6d9dd93b4ed..2b0ca60c281 100644
--- a/src/devices/bus/macpds/pds_tpdfpd.cpp
+++ b/src/devices/bus/macpds/pds_tpdfpd.cpp
@@ -109,8 +109,7 @@ void macpds_sedisplay_device::device_start()
m_vram = std::make_unique<uint8_t[]>(VRAM_SIZE);
- static const char bankname[] = { "radpds_ram" };
- m_macpds->install_bank(0xc40000, 0xc40000+VRAM_SIZE-1, bankname, m_vram.get());
+ m_macpds->install_bank(0xc40000, 0xc40000+VRAM_SIZE-1, m_vram.get());
m_macpds->install_device(0x770000, 0x77000f, read16s_delegate(*this, FUNC(macpds_sedisplay_device::ramdac_r)), write16s_delegate(*this, FUNC(macpds_sedisplay_device::ramdac_w)));
m_macpds->install_device(0xc10000, 0xc2ffff, read16sm_delegate(*this, FUNC(macpds_sedisplay_device::sedisplay_r)), write16sm_delegate(*this, FUNC(macpds_sedisplay_device::sedisplay_w)));
diff --git a/src/devices/bus/msx_slot/bunsetsu.cpp b/src/devices/bus/msx_slot/bunsetsu.cpp
index 79a07b2e53a..9c73a37dbd8 100644
--- a/src/devices/bus/msx_slot/bunsetsu.cpp
+++ b/src/devices/bus/msx_slot/bunsetsu.cpp
@@ -13,7 +13,7 @@ DEFINE_DEVICE_TYPE(MSX_SLOT_BUNSETSU, msx_slot_bunsetsu_device, "msx_slot_bunset
msx_slot_bunsetsu_device::msx_slot_bunsetsu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: msx_slot_rom_device(mconfig, MSX_SLOT_BUNSETSU, tag, owner, clock)
- , m_bunsetsu_region(*this, finder_base::DUMMY_TAG, 0x20000)
+ , m_bunsetsu_region(*this, finder_base::DUMMY_TAG)
, m_bunsetsu_address(0)
{
}
diff --git a/src/devices/bus/nubus/laserview.cpp b/src/devices/bus/nubus/laserview.cpp
index 7e802b58988..bd9647c9e72 100644
--- a/src/devices/bus/nubus/laserview.cpp
+++ b/src/devices/bus/nubus/laserview.cpp
@@ -88,8 +88,8 @@ void nubus_laserview_device::device_start()
// printf("[laserview %p] slotspace = %x\n", this, slotspace);
m_vram.resize(VRAM_SIZE);
- install_bank(slotspace, slotspace+VRAM_SIZE-1, "bank_laserview", &m_vram[0]);
- install_bank(slotspace+0x900000, slotspace+0x900000+VRAM_SIZE-1, "bank_laserview2", &m_vram[0]);
+ install_bank(slotspace, slotspace+VRAM_SIZE-1, &m_vram[0]);
+ install_bank(slotspace+0x900000, slotspace+0x900000+VRAM_SIZE-1, &m_vram[0]);
nubus().install_device(slotspace+0xB0000, slotspace+0xBFFFF, read32s_delegate(*this, FUNC(nubus_laserview_device::regs_r)), write32s_delegate(*this, FUNC(nubus_laserview_device::regs_w)));
}
diff --git a/src/devices/bus/nubus/nubus.cpp b/src/devices/bus/nubus/nubus.cpp
index 64c48a9bb1d..bbc63a23ada 100644
--- a/src/devices/bus/nubus/nubus.cpp
+++ b/src/devices/bus/nubus/nubus.cpp
@@ -185,11 +185,10 @@ void nubus_device::install_writeonly_device(offs_t start, offs_t end, write32_de
}
}
-void nubus_device::install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data)
+void nubus_device::install_bank(offs_t start, offs_t end, uint8_t *data)
{
// printf("install_bank: %s @ %x->%x\n", tag, start, end);
- m_space->install_readwrite_bank(start, end, 0, tag);
- machine().root_device().membank(siblingtag(tag).c_str())->set_base(data);
+ m_space->install_rom(start, end, data);
}
void nubus_device::set_irq_line(int slot, int state)
@@ -278,14 +277,9 @@ void device_nubus_card_interface::interface_pre_start()
}
}
-void device_nubus_card_interface::install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data)
+void device_nubus_card_interface::install_bank(offs_t start, offs_t end, uint8_t *data)
{
- char bank[256];
-
- // append an underscore and the slot name to the bank so it's guaranteed unique
- snprintf(bank, sizeof(bank), "%s_%s", tag, m_nubus_slottag);
-
- nubus().install_bank(start, end, bank, data);
+ nubus().install_bank(start, end, data);
}
void device_nubus_card_interface::install_declaration_rom(device_t *dev, const char *romregion, bool mirror_all_mb, bool reverse_rom)
@@ -424,20 +418,18 @@ void device_nubus_card_interface::install_declaration_rom(device_t *dev, const c
// now install the ROM
uint32_t addr = get_slotspace() + 0x01000000;
- char bankname[128];
- snprintf(bankname, sizeof(bankname), "rom_%s", m_nubus_slottag);
addr -= romlen;
// printf("Installing ROM at %x, length %x\n", addr, romlen);
if (mirror_all_mb) // mirror the declaration ROM across all 16 megs of the slot space
{
uint32_t off = 0;
while(off < 0x1000000) {
- nubus().install_bank(addr + off, addr+off+romlen-1, bankname, &m_declaration_rom[0]);
+ nubus().install_bank(addr + off, addr+off+romlen-1, &m_declaration_rom[0]);
off += romlen;
}
}
else
{
- nubus().install_bank(addr, addr+romlen-1, bankname, &m_declaration_rom[0]);
+ nubus().install_bank(addr, addr+romlen-1, &m_declaration_rom[0]);
}
}
diff --git a/src/devices/bus/nubus/nubus.h b/src/devices/bus/nubus/nubus.h
index 2fc5f048e67..0b07b04b381 100644
--- a/src/devices/bus/nubus/nubus.h
+++ b/src/devices/bus/nubus/nubus.h
@@ -37,7 +37,7 @@ public:
// helper functions for card devices
void install_declaration_rom(device_t *dev, const char *romregion, bool mirror_all_mb = false, bool reverse_rom = false);
- void install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data);
+ void install_bank(offs_t start, offs_t end, uint8_t *data);
uint32_t get_slotspace() { return 0xf0000000 | (m_slot<<24); }
uint32_t get_super_slotspace() { return m_slot<<28; }
@@ -125,7 +125,7 @@ public:
template<typename R, typename W> void install_device(offs_t start, offs_t end, R rhandler, W whandler, uint32_t mask=0xffffffff);
void install_readonly_device(offs_t start, offs_t end, read32_delegate rhandler, uint32_t mask=0xffffffff);
void install_writeonly_device(offs_t start, offs_t end, write32_delegate whandler, uint32_t mask=0xffffffff);
- void install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data);
+ void install_bank(offs_t start, offs_t end, uint8_t *data);
void set_irq_line(int slot, int state);
DECLARE_WRITE_LINE_MEMBER( irq9_w );
diff --git a/src/devices/bus/nubus/nubus_48gc.cpp b/src/devices/bus/nubus/nubus_48gc.cpp
index b9b831c6de2..58875e591b6 100644
--- a/src/devices/bus/nubus/nubus_48gc.cpp
+++ b/src/devices/bus/nubus/nubus_48gc.cpp
@@ -110,7 +110,7 @@ void jmfb_device::device_start()
// printf("[JMFB %p] slotspace = %x\n", this, slotspace);
m_vram.resize(VRAM_SIZE);
- install_bank(slotspace, slotspace+VRAM_SIZE-1, "bank_48gc", &m_vram[0]);
+ install_bank(slotspace, slotspace+VRAM_SIZE-1, &m_vram[0]);
nubus().install_device(slotspace+0x200000, slotspace+0x2003ff, read32s_delegate(*this, FUNC(jmfb_device::mac_48gc_r)), write32s_delegate(*this, FUNC(jmfb_device::mac_48gc_w)));
diff --git a/src/devices/bus/nubus/nubus_cb264.cpp b/src/devices/bus/nubus/nubus_cb264.cpp
index db1fd821a11..b3af9d82fba 100644
--- a/src/devices/bus/nubus/nubus_cb264.cpp
+++ b/src/devices/bus/nubus/nubus_cb264.cpp
@@ -96,7 +96,7 @@ void nubus_cb264_device::device_start()
// printf("[cb264 %p] slotspace = %x\n", this, slotspace);
m_vram.resize(VRAM_SIZE);
- install_bank(slotspace, slotspace+VRAM_SIZE-1, "bank_cb264", &m_vram[0]);
+ install_bank(slotspace, slotspace+VRAM_SIZE-1, &m_vram[0]);
nubus().install_device(slotspace+0xff6000, slotspace+0xff60ff, read32s_delegate(*this, FUNC(nubus_cb264_device::cb264_r)), write32s_delegate(*this, FUNC(nubus_cb264_device::cb264_w)));
nubus().install_device(slotspace+0xff7000, slotspace+0xff70ff, read32sm_delegate(*this, FUNC(nubus_cb264_device::cb264_ramdac_r)), write32sm_delegate(*this, FUNC(nubus_cb264_device::cb264_ramdac_w)));
diff --git a/src/devices/bus/nubus/nubus_image.cpp b/src/devices/bus/nubus/nubus_image.cpp
index 32b1d33100a..aa54fe51c7a 100644
--- a/src/devices/bus/nubus/nubus_image.cpp
+++ b/src/devices/bus/nubus/nubus_image.cpp
@@ -89,9 +89,8 @@ image_init_result nubus_image_device::messimg_disk_image_device::call_load()
return image_init_result::FAIL;
}
- m_data = make_unique_clear<uint8_t[]>(m_size);
fseek(0, SEEK_SET);
- fread(m_data.get(), m_size);
+ fread(m_data, m_size);
m_ejected = false;
return image_init_result::PASS;
diff --git a/src/devices/bus/nubus/nubus_vikbw.cpp b/src/devices/bus/nubus/nubus_vikbw.cpp
index 18c94f9ba5b..d05495afe54 100644
--- a/src/devices/bus/nubus/nubus_vikbw.cpp
+++ b/src/devices/bus/nubus/nubus_vikbw.cpp
@@ -89,8 +89,8 @@ void nubus_vikbw_device::device_start()
// printf("[vikbw %p] slotspace = %x\n", this, slotspace);
m_vram.resize(VRAM_SIZE);
- install_bank(slotspace+0x40000, slotspace+0x40000+VRAM_SIZE-1, "bank_vikbw", &m_vram[0]);
- install_bank(slotspace+0x940000, slotspace+0x940000+VRAM_SIZE-1, "bank_vikbw2", &m_vram[0]);
+ install_bank(slotspace+0x40000, slotspace+0x40000+VRAM_SIZE-1, &m_vram[0]);
+ install_bank(slotspace+0x940000, slotspace+0x940000+VRAM_SIZE-1, &m_vram[0]);
nubus().install_device(slotspace, slotspace+3, read32smo_delegate(*this, FUNC(nubus_vikbw_device::viking_enable_r)), write32smo_delegate(*this, FUNC(nubus_vikbw_device::viking_disable_w)));
nubus().install_device(slotspace+0x80000, slotspace+0x80000+3, read32smo_delegate(*this, FUNC(nubus_vikbw_device::viking_ack_r)), write32smo_delegate(*this, FUNC(nubus_vikbw_device::viking_ack_w)));
diff --git a/src/devices/bus/odyssey2/4in1.cpp b/src/devices/bus/odyssey2/4in1.cpp
index dfadbf2c1ab..ad9b685b54e 100644
--- a/src/devices/bus/odyssey2/4in1.cpp
+++ b/src/devices/bus/odyssey2/4in1.cpp
@@ -35,7 +35,7 @@ void o2_4in1_device::device_start()
void o2_4in1_device::cart_init()
{
- if (m_rom.bytes() != 0x1000)
+ if (m_rom_size != 0x1000)
fatalerror("o2_4in1_device: ROM size must be 4KB\n");
}
diff --git a/src/devices/bus/odyssey2/chess.cpp b/src/devices/bus/odyssey2/chess.cpp
index 6ff1ff76dd2..9f687c72cd6 100644
--- a/src/devices/bus/odyssey2/chess.cpp
+++ b/src/devices/bus/odyssey2/chess.cpp
@@ -35,7 +35,7 @@ void o2_chess_device::device_start()
void o2_chess_device::cart_init()
{
- if (m_rom.bytes() != 0x800 || !m_exrom || m_exrom.bytes() != 0x2000)
+ if (m_rom_size != 0x800 || m_exrom_size != 0x2000)
fatalerror("o2_chess_device: Wrong ROM region size\n");
}
diff --git a/src/devices/bus/odyssey2/homecomp.cpp b/src/devices/bus/odyssey2/homecomp.cpp
index 23c6f6c31f7..363a1ab024f 100644
--- a/src/devices/bus/odyssey2/homecomp.cpp
+++ b/src/devices/bus/odyssey2/homecomp.cpp
@@ -45,7 +45,7 @@ void o2_homecomp_device::device_start()
void o2_homecomp_device::cart_init()
{
- if (m_rom.bytes() != 0x800 || !m_exrom || m_exrom.bytes() != 0x4000)
+ if (m_rom_size != 0x800 || m_exrom_size != 0x4000)
fatalerror("o2_homecomp_device: Wrong ROM region size\n");
}
diff --git a/src/devices/bus/odyssey2/ktaa.cpp b/src/devices/bus/odyssey2/ktaa.cpp
index 4f1fba25153..1bb550685c4 100644
--- a/src/devices/bus/odyssey2/ktaa.cpp
+++ b/src/devices/bus/odyssey2/ktaa.cpp
@@ -30,7 +30,7 @@ void o2_ktaa_device::device_start()
void o2_ktaa_device::cart_init()
{
- u32 size = m_rom.bytes();
+ u32 size = m_rom_size;
if (size != 0xc00 && size != 0xc00*2 && size != 0xc00*4)
fatalerror("o2_ktaa_device: ROM size must be multiple of 3KB\n");
diff --git a/src/devices/bus/odyssey2/rally.cpp b/src/devices/bus/odyssey2/rally.cpp
index 42dcdc0b26f..00205028fa6 100644
--- a/src/devices/bus/odyssey2/rally.cpp
+++ b/src/devices/bus/odyssey2/rally.cpp
@@ -39,7 +39,7 @@ void o2_rally_device::device_start()
void o2_rally_device::cart_init()
{
- u32 size = m_rom.bytes();
+ u32 size = m_rom_size;
if (size & (size - 1) || size < 0x800)
fatalerror("o2_rally_device: ROM size must be 2^x\n");
}
@@ -53,7 +53,7 @@ u8 o2_rally_device::read_rom04(offs_t offset)
{
// P10 enables latch output
u8 bank = (m_control & 1) ? ~0 : m_bank;
- return m_rom[(offset + bank * 0x800) & (m_rom.bytes() - 1)];
+ return m_rom[(offset + bank * 0x800) & (m_rom_size - 1)];
}
void o2_rally_device::io_write(offs_t offset, u8 data)
diff --git a/src/devices/bus/odyssey2/rom.cpp b/src/devices/bus/odyssey2/rom.cpp
index 12f8fa9b128..cd8d15b15bc 100644
--- a/src/devices/bus/odyssey2/rom.cpp
+++ b/src/devices/bus/odyssey2/rom.cpp
@@ -28,7 +28,7 @@ void o2_rom_device::device_start()
void o2_rom_device::cart_init()
{
- m_cart_mask = (1 << (31 - count_leading_zeros(m_rom.bytes()))) - 1;
+ m_cart_mask = (1 << (31 - count_leading_zeros(m_rom_size))) - 1;
}
@@ -39,5 +39,5 @@ void o2_rom_device::cart_init()
u8 o2_rom_device::read_rom04(offs_t offset)
{
offset = (offset + m_bank * 0x800) & m_cart_mask;
- return (offset < m_rom.bytes()) ? m_rom[offset] : 0xff;
+ return (offset < m_rom_size) ? m_rom[offset] : 0xff;
}
diff --git a/src/devices/bus/odyssey2/slot.cpp b/src/devices/bus/odyssey2/slot.cpp
index 5f0f30e2f35..50bc7ce20c3 100644
--- a/src/devices/bus/odyssey2/slot.cpp
+++ b/src/devices/bus/odyssey2/slot.cpp
@@ -27,9 +27,9 @@ DEFINE_DEVICE_TYPE(O2_CART_SLOT, o2_cart_slot_device, "o2_cart_slot", "Odyssey 2
device_o2_cart_interface::device_o2_cart_interface(const machine_config &mconfig, device_t &device)
: device_interface(device, "odyssey2cart")
- , m_rom(*this, "rom")
- , m_exrom(*this, "exrom")
- , m_voice(*this, "voice")
+ , m_rom_size(0)
+ , m_exrom_size(0)
+ , m_voice_size(0)
{
}
@@ -138,6 +138,9 @@ image_init_result o2_cart_slot_device::call_load()
load_software_region("rom", m_cart->m_rom);
load_software_region("exrom", m_cart->m_exrom);
load_software_region("voice", m_cart->m_voice);
+ m_cart->m_rom_size = get_software_region_length("rom");
+ m_cart->m_exrom_size = get_software_region_length("exrom");
+ m_cart->m_voice_size = get_software_region_length("voice");
m_type = o2_get_pcb_id(get_feature("slot"));
diff --git a/src/devices/bus/odyssey2/slot.h b/src/devices/bus/odyssey2/slot.h
index 4c65fafe01e..d998d5f1999 100644
--- a/src/devices/bus/odyssey2/slot.h
+++ b/src/devices/bus/odyssey2/slot.h
@@ -49,18 +49,21 @@ public:
virtual void cart_init() { } // called after loading ROM
- u8* get_rom_base() { return m_rom ? &m_rom[0] : nullptr; }
- u32 get_rom_size() { return m_rom ? m_rom.bytes() : 0; }
+ u8* get_rom_base() { return m_rom ? m_rom.get() : nullptr; }
+ u32 get_rom_size() { return m_rom_size; }
- u8* get_voice_base() { return m_voice ? &m_voice[0] : nullptr; }
- u32 get_voice_size() { return m_voice ? m_voice.bytes() : 0; }
+ u8* get_voice_base() { return m_voice ? m_voice.get() : nullptr; }
+ u32 get_voice_size() { return m_voice_size; }
protected:
device_o2_cart_interface(const machine_config &mconfig, device_t &device);
- optional_shared_ptr<u8> m_rom;
- optional_shared_ptr<u8> m_exrom;
- optional_shared_ptr<u8> m_voice;
+ std::unique_ptr<uint8_t[]> m_rom;
+ std::unique_ptr<uint8_t[]> m_exrom;
+ std::unique_ptr<uint8_t[]> m_voice;
+ u32 m_rom_size;
+ u32 m_exrom_size;
+ u32 m_voice_size;
};
diff --git a/src/devices/bus/pet/64k.cpp b/src/devices/bus/pet/64k.cpp
index 85f91114386..7e335ba97ff 100644
--- a/src/devices/bus/pet/64k.cpp
+++ b/src/devices/bus/pet/64k.cpp
@@ -79,7 +79,7 @@ inline void pet_64k_expansion_device::write_ram(offs_t offset, uint8_t data)
pet_64k_expansion_device::pet_64k_expansion_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, PET_64K, tag, owner, clock),
device_pet_expansion_card_interface(mconfig, *this),
- m_ram(*this, "ram"),
+ m_ram(*this, "ram", 0x10000, ENDIANNESS_LITTLE),
m_ctrl(0)
{
}
@@ -91,9 +91,6 @@ pet_64k_expansion_device::pet_64k_expansion_device(const machine_config &mconfig
void pet_64k_expansion_device::device_start()
{
- // allocate memory
- m_ram.allocate(0x10000);
-
// state saving
save_item(NAME(m_ctrl));
}
diff --git a/src/devices/bus/pet/64k.h b/src/devices/bus/pet/64k.h
index 7cf03cd621b..6b55cc3098e 100644
--- a/src/devices/bus/pet/64k.h
+++ b/src/devices/bus/pet/64k.h
@@ -41,7 +41,7 @@ private:
inline uint8_t read_ram(offs_t offset);
inline void write_ram(offs_t offset, uint8_t data);
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
uint8_t m_ctrl;
};
diff --git a/src/devices/bus/pet/superpet.cpp b/src/devices/bus/pet/superpet.cpp
index 77ec57b5c46..df5c0071600 100644
--- a/src/devices/bus/pet/superpet.cpp
+++ b/src/devices/bus/pet/superpet.cpp
@@ -173,7 +173,7 @@ superpet_device::superpet_device(const machine_config &mconfig, const char *tag,
m_acia(*this, MOS6551_TAG),
m_dongle(*this, MOS6702_TAG),
m_rom(*this, M6809_TAG),
- m_ram(*this, "ram"),
+ m_ram(*this, "ram", 0x10000, ENDIANNESS_LITTLE),
m_io_sw1(*this, "SW1"),
m_io_sw2(*this, "SW2"),
m_system(0),
@@ -191,9 +191,6 @@ superpet_device::superpet_device(const machine_config &mconfig, const char *tag,
void superpet_device::device_start()
{
- // allocate memory
- m_ram.allocate(0x10000);
-
// state saving
save_item(NAME(m_system));
save_item(NAME(m_bank));
diff --git a/src/devices/bus/pet/superpet.h b/src/devices/bus/pet/superpet.h
index 097a4b45cd4..56c07df525f 100644
--- a/src/devices/bus/pet/superpet.h
+++ b/src/devices/bus/pet/superpet.h
@@ -59,7 +59,7 @@ private:
required_device<mos6551_device> m_acia;
required_device<mos6702_device> m_dongle;
required_memory_region m_rom;
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
required_ioport m_io_sw1;
required_ioport m_io_sw2;
diff --git a/src/devices/bus/plus4/exp.cpp b/src/devices/bus/plus4/exp.cpp
index 5ca28efd81d..c1184f16922 100644
--- a/src/devices/bus/plus4/exp.cpp
+++ b/src/devices/bus/plus4/exp.cpp
@@ -37,10 +37,6 @@ DEFINE_DEVICE_TYPE(PLUS4_EXPANSION_SLOT, plus4_expansion_slot_device, "plus4_exp
device_plus4_expansion_card_interface::device_plus4_expansion_card_interface(const machine_config &mconfig, device_t &device) :
device_interface(device, "plus4exp"),
- m_c1l(*this, "c1l"),
- m_c1h(*this, "c1h"),
- m_c2l(*this, "c2l"),
- m_c2h(*this, "c2h"),
m_c1l_mask(0),
m_c1h_mask(0),
m_c2l_mask(0),
diff --git a/src/devices/bus/plus4/exp.h b/src/devices/bus/plus4/exp.h
index 369480281b3..37691a319d5 100644
--- a/src/devices/bus/plus4/exp.h
+++ b/src/devices/bus/plus4/exp.h
@@ -137,10 +137,10 @@ public:
protected:
device_plus4_expansion_card_interface(const machine_config &mconfig, device_t &device);
- optional_shared_ptr<uint8_t> m_c1l;
- optional_shared_ptr<uint8_t> m_c1h;
- optional_shared_ptr<uint8_t> m_c2l;
- optional_shared_ptr<uint8_t> m_c2h;
+ std::unique_ptr<uint8_t[]> m_c1l;
+ std::unique_ptr<uint8_t[]> m_c1h;
+ std::unique_ptr<uint8_t[]> m_c2l;
+ std::unique_ptr<uint8_t[]> m_c2h;
size_t m_c1l_mask;
size_t m_c1h_mask;
diff --git a/src/devices/bus/plus4/std.cpp b/src/devices/bus/plus4/std.cpp
index c8efe4b679f..2a050999680 100644
--- a/src/devices/bus/plus4/std.cpp
+++ b/src/devices/bus/plus4/std.cpp
@@ -49,21 +49,21 @@ void plus4_standard_cartridge_device::device_start()
uint8_t plus4_standard_cartridge_device::plus4_cd_r(offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h)
{
- if (!c1l && m_c1l.bytes())
+ if (!c1l && m_c1l)
{
- data = m_c1l[offset & m_c1l.mask()];
+ data = m_c1l[offset];
}
- else if (!c1h && m_c1h.bytes())
+ else if (!c1h && m_c1h)
{
- data = m_c1h[offset & m_c1h.mask()];
+ data = m_c1h[offset];
}
- else if (!c2l && m_c2l.bytes())
+ else if (!c2l && m_c2l)
{
- data = m_c2l[offset & m_c2l.mask()];
+ data = m_c2l[offset];
}
- else if (!c2h && m_c2h.bytes())
+ else if (!c2h && m_c2h)
{
- data = m_c2h[offset & m_c2h.mask()];
+ data = m_c2h[offset];
}
return data;
diff --git a/src/devices/bus/pofo/ccm.cpp b/src/devices/bus/pofo/ccm.cpp
index 11e90cc852c..b5790a14a3b 100644
--- a/src/devices/bus/pofo/ccm.cpp
+++ b/src/devices/bus/pofo/ccm.cpp
@@ -28,9 +28,7 @@ DEFINE_DEVICE_TYPE(PORTFOLIO_MEMORY_CARD_SLOT, portfolio_memory_card_slot_device
//-------------------------------------------------
device_portfolio_memory_card_slot_interface::device_portfolio_memory_card_slot_interface(const machine_config &mconfig, device_t &device) :
- device_interface(device, "pofoccm"),
- m_rom(*this, "rom"),
- m_nvram(*this, "nvram")
+ device_interface(device, "pofoccm")
{
m_slot = dynamic_cast<portfolio_memory_card_slot_device *>(device.owner());
}
@@ -73,7 +71,9 @@ image_init_result portfolio_memory_card_slot_device::call_load()
if (m_card)
{
if (!loaded_through_softlist())
+ {
fread(m_card->m_rom, length());
+ }
else
load_software_region("rom", m_card->m_rom);
}
diff --git a/src/devices/bus/pofo/ccm.h b/src/devices/bus/pofo/ccm.h
index 74175a7dc56..7dc0698453f 100644
--- a/src/devices/bus/pofo/ccm.h
+++ b/src/devices/bus/pofo/ccm.h
@@ -82,8 +82,7 @@ protected:
// construction/destruction
device_portfolio_memory_card_slot_interface(const machine_config &mconfig, device_t &device);
- optional_shared_ptr<uint8_t> m_rom;
- optional_shared_ptr<uint8_t> m_nvram;
+ std::unique_ptr<uint8_t[]> m_rom;
portfolio_memory_card_slot_device *m_slot;
};
diff --git a/src/devices/bus/pofo/hpc104.cpp b/src/devices/bus/pofo/hpc104.cpp
index a6e66f13da8..11744206c7e 100644
--- a/src/devices/bus/pofo/hpc104.cpp
+++ b/src/devices/bus/pofo/hpc104.cpp
@@ -101,7 +101,7 @@ pofo_hpc104_device::pofo_hpc104_device(const machine_config &mconfig, device_typ
device_nvram_interface(mconfig, *this),
m_ccm(*this, PORTFOLIO_MEMORY_CARD_SLOT_B_TAG),
m_exp(*this, PORTFOLIO_EXPANSION_SLOT_TAG),
- m_nvram(*this, "nvram"),
+ m_nvram(*this, "nvram", 0x40000, ENDIANNESS_LITTLE),
m_io_sw1(*this, "SW1")
{
}
@@ -128,8 +128,6 @@ pofo_hpc104_2_device::pofo_hpc104_2_device(const machine_config &mconfig, const
void pofo_hpc104_device::device_start()
{
- // allocate memory
- m_nvram.allocate(0x40000);
}
diff --git a/src/devices/bus/pofo/hpc104.h b/src/devices/bus/pofo/hpc104.h
index 042bece210e..6afae6dd5ec 100644
--- a/src/devices/bus/pofo/hpc104.h
+++ b/src/devices/bus/pofo/hpc104.h
@@ -44,8 +44,8 @@ protected:
// device_nvram_interface overrides
virtual void nvram_default() override { }
- virtual void nvram_read(emu_file &file) override { if (m_nvram != nullptr) { file.read(m_nvram, m_nvram.bytes()); } }
- virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram, m_nvram.bytes()); } }
+ virtual void nvram_read(emu_file &file) override { if (m_nvram != nullptr) { file.read(m_nvram, 0x40000); } }
+ virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram, 0x40000); } }
// device_portfolio_expansion_slot_interface overrides
virtual bool nmd1() override { return m_ccm->cdet_r(); }
@@ -58,7 +58,7 @@ protected:
private:
required_device<portfolio_memory_card_slot_device> m_ccm;
required_device<portfolio_expansion_slot_device> m_exp;
- optional_shared_ptr<uint8_t> m_nvram;
+ memory_share_creator<uint8_t> m_nvram;
required_ioport m_io_sw1;
bool m_sw1;
diff --git a/src/devices/bus/pofo/ram.cpp b/src/devices/bus/pofo/ram.cpp
index 5498a9b8c32..7f1298b8b95 100644
--- a/src/devices/bus/pofo/ram.cpp
+++ b/src/devices/bus/pofo/ram.cpp
@@ -29,7 +29,8 @@ DEFINE_DEVICE_TYPE(PORTFOLIO_RAM_CARD, portfolio_ram_card_device, "portfolio_ram
portfolio_ram_card_device::portfolio_ram_card_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, PORTFOLIO_RAM_CARD, tag, owner, clock),
device_portfolio_memory_card_slot_interface(mconfig, *this),
- device_nvram_interface(mconfig, *this)
+ device_nvram_interface(mconfig, *this),
+ m_nvram(*this, "nvram", 0x20000, ENDIANNESS_LITTLE)
{
}
@@ -40,7 +41,6 @@ portfolio_ram_card_device::portfolio_ram_card_device(const machine_config &mconf
void portfolio_ram_card_device::device_start()
{
- m_nvram.allocate(0x20000);
}
diff --git a/src/devices/bus/pofo/ram.h b/src/devices/bus/pofo/ram.h
index 2c19f807816..c3eee30910d 100644
--- a/src/devices/bus/pofo/ram.h
+++ b/src/devices/bus/pofo/ram.h
@@ -36,14 +36,16 @@ protected:
// device_nvram_interface overrides
virtual void nvram_default() override { }
- virtual void nvram_read(emu_file &file) override { if (m_nvram != nullptr) { file.read(m_nvram, m_nvram.bytes()); } }
- virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram, m_nvram.bytes()); } }
+ virtual void nvram_read(emu_file &file) override { if (m_nvram != nullptr) { file.read(m_nvram, m_nvram.share()->bytes()); } }
+ virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram, m_nvram.share()->bytes()); } }
// device_portfolio_memory_card_slot_interface overrides
virtual bool cdet() override { return 0; }
virtual uint8_t nrdi_r(offs_t offset) override;
virtual void nwri_w(offs_t offset, uint8_t data) override;
+
+ memory_share_creator<uint8_t> m_nvram;
};
diff --git a/src/devices/bus/ql/rom.cpp b/src/devices/bus/ql/rom.cpp
index 0c84eadd6b6..f6b54fdc907 100644
--- a/src/devices/bus/ql/rom.cpp
+++ b/src/devices/bus/ql/rom.cpp
@@ -29,7 +29,6 @@ DEFINE_DEVICE_TYPE(QL_ROM_CARTRIDGE_SLOT, ql_rom_cartridge_slot_device, "ql_rom_
device_ql_rom_cartridge_card_interface::device_ql_rom_cartridge_card_interface(const machine_config &mconfig, device_t &device) :
device_interface(device, "qlrom"),
- m_rom(*this, "rom"),
m_slot(dynamic_cast<ql_rom_cartridge_slot_device *>(device.owner())),
m_romoeh(0)
{
@@ -89,14 +88,9 @@ image_init_result ql_rom_cartridge_slot_device::call_load()
{
if (m_card)
{
- size_t size;
-
if (!loaded_through_softlist())
{
- size = length();
-
- m_card->m_rom.allocate(size);
- fread(m_card->m_rom, size);
+ fread(m_card->m_rom, length());
}
else
{
diff --git a/src/devices/bus/ql/rom.h b/src/devices/bus/ql/rom.h
index 4b79406aca9..bfd06793d8c 100644
--- a/src/devices/bus/ql/rom.h
+++ b/src/devices/bus/ql/rom.h
@@ -58,7 +58,7 @@ protected:
virtual void interface_post_start() override;
- optional_shared_ptr<uint8_t> m_rom;
+ std::unique_ptr<uint8_t[]> m_rom;
ql_rom_cartridge_slot_device *const m_slot;
diff --git a/src/devices/bus/ql/sandy_superqboard.cpp b/src/devices/bus/ql/sandy_superqboard.cpp
index 9fbd2f49c77..4d4a712b010 100644
--- a/src/devices/bus/ql/sandy_superqboard.cpp
+++ b/src/devices/bus/ql/sandy_superqboard.cpp
@@ -219,7 +219,7 @@ sandy_superqboard_device::sandy_superqboard_device(const machine_config &mconfig
m_centronics(*this, CENTRONICS_TAG),
m_latch(*this, TTL74273_TAG),
m_rom(*this, "rom"),
- m_ram(*this, "ram"),
+ m_ram(*this, "ram", ram_size, ENDIANNESS_BIG),
m_buttons(*this, "mouse_buttons"),
m_ram_size(ram_size),
m_fd6(0),
@@ -250,9 +250,6 @@ sandy_superqmouse_512k_device::sandy_superqmouse_512k_device(const machine_confi
void sandy_superqboard_device::device_start()
{
- // allocate memory
- m_ram.allocate(m_ram_size);
-
// state saving
save_item(NAME(m_fd6));
save_item(NAME(m_fd7));
diff --git a/src/devices/bus/ql/sandy_superqboard.h b/src/devices/bus/ql/sandy_superqboard.h
index 94bfe0c7dad..347703673de 100644
--- a/src/devices/bus/ql/sandy_superqboard.h
+++ b/src/devices/bus/ql/sandy_superqboard.h
@@ -74,7 +74,7 @@ private:
required_device<centronics_device> m_centronics;
required_device<output_latch_device> m_latch;
required_memory_region m_rom;
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
optional_ioport m_buttons;
int m_ram_size;
diff --git a/src/devices/bus/ql/std.cpp b/src/devices/bus/ql/std.cpp
index b1171c46336..7524cc1693d 100644
--- a/src/devices/bus/ql/std.cpp
+++ b/src/devices/bus/ql/std.cpp
@@ -49,9 +49,9 @@ void ql_standard_rom_cartridge_device::device_start()
uint8_t ql_standard_rom_cartridge_device::read(offs_t offset, uint8_t data)
{
- if (m_romoeh && m_rom.bytes())
+ if (m_romoeh && m_rom)
{
- data = m_rom[offset & m_rom.mask()];
+ data = m_rom[offset];
}
return data;
diff --git a/src/devices/bus/ql/trumpcard.cpp b/src/devices/bus/ql/trumpcard.cpp
index 473fc9bb78e..da5fece8726 100644
--- a/src/devices/bus/ql/trumpcard.cpp
+++ b/src/devices/bus/ql/trumpcard.cpp
@@ -114,7 +114,7 @@ ql_trump_card_device::ql_trump_card_device(const machine_config &mconfig, device
m_floppy0(*this, WD1772_TAG":0"),
m_floppy1(*this, WD1772_TAG":1"),
m_rom(*this, "rom"),
- m_ram(*this, "ram"),
+ m_ram(*this, "ram", ram_size, ENDIANNESS_BIG),
m_ram_size(ram_size),
m_rom_en(false)
{
@@ -142,9 +142,6 @@ ql_trump_card_768k_device::ql_trump_card_768k_device(const machine_config &mconf
void ql_trump_card_device::device_start()
{
- // allocate memory
- m_ram.allocate(m_ram_size);
-
// state saving
save_item(NAME(m_rom_en));
}
diff --git a/src/devices/bus/ql/trumpcard.h b/src/devices/bus/ql/trumpcard.h
index d9926160928..ee27efc4792 100644
--- a/src/devices/bus/ql/trumpcard.h
+++ b/src/devices/bus/ql/trumpcard.h
@@ -53,7 +53,7 @@ private:
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
required_memory_region m_rom;
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
int m_ram_size;
bool m_rom_en;
diff --git a/src/devices/bus/s100/dj2db.cpp b/src/devices/bus/s100/dj2db.cpp
index 3bc8607077d..03acd63437c 100644
--- a/src/devices/bus/s100/dj2db.cpp
+++ b/src/devices/bus/s100/dj2db.cpp
@@ -254,7 +254,7 @@ s100_dj2db_device::s100_dj2db_device(const machine_config &mconfig, const char *
m_floppy3(*this, MB8866_TAG":3"),
m_floppy(nullptr),
m_rom(*this, "dj2db"),
- m_ram(*this, "ram"),
+ m_ram(*this, "ram", 0x400, ENDIANNESS_LITTLE),
m_j1a(*this, "J1A"),
m_j3a(*this, "J3A"),
m_j4(*this, "J4"),
@@ -275,9 +275,6 @@ s100_dj2db_device::s100_dj2db_device(const machine_config &mconfig, const char *
void s100_dj2db_device::device_start()
{
- // allocate memory
- m_ram.allocate(0x400);
-
// state saving
save_item(NAME(m_drive));
save_item(NAME(m_head));
diff --git a/src/devices/bus/s100/dj2db.h b/src/devices/bus/s100/dj2db.h
index dccb5bfbadb..e285ab43f42 100644
--- a/src/devices/bus/s100/dj2db.h
+++ b/src/devices/bus/s100/dj2db.h
@@ -63,7 +63,7 @@ private:
required_device<floppy_connector> m_floppy3;
floppy_image_device *m_floppy;
required_memory_region m_rom;
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
required_ioport m_j1a;
required_ioport m_j3a;
required_ioport m_j4;
diff --git a/src/devices/bus/s100/mm65k16s.cpp b/src/devices/bus/s100/mm65k16s.cpp
index ae098a2e29c..5f64ce67aa4 100644
--- a/src/devices/bus/s100/mm65k16s.cpp
+++ b/src/devices/bus/s100/mm65k16s.cpp
@@ -205,7 +205,7 @@ ioport_constructor s100_mm65k16s_device::device_input_ports() const
s100_mm65k16s_device::s100_mm65k16s_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, S100_MM65K16S, tag, owner, clock),
device_s100_card_interface(mconfig, *this),
- m_ram(*this, "ram")
+ m_ram(*this, "ram", 0x10000, ENDIANNESS_LITTLE)
{
}
@@ -216,7 +216,6 @@ s100_mm65k16s_device::s100_mm65k16s_device(const machine_config &mconfig, const
void s100_mm65k16s_device::device_start()
{
- m_ram.allocate(0x10000);
}
diff --git a/src/devices/bus/s100/mm65k16s.h b/src/devices/bus/s100/mm65k16s.h
index 10fa1daff7a..706d7e697b6 100644
--- a/src/devices/bus/s100/mm65k16s.h
+++ b/src/devices/bus/s100/mm65k16s.h
@@ -43,7 +43,7 @@ protected:
virtual void s100_phantom_w(int state) override;
private:
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
};
diff --git a/src/devices/bus/snes/event.cpp b/src/devices/bus/snes/event.cpp
index 3591a2a679a..d6e8000eab3 100644
--- a/src/devices/bus/snes/event.cpp
+++ b/src/devices/bus/snes/event.cpp
@@ -173,10 +173,8 @@ inline uint16_t get_data(uint8_t *CPU, uint32_t addr)
void sns_pfest94_device::speedup_addon_bios_access()
{
- m_upd7725->space(AS_PROGRAM).install_read_bank(0x0000, 0x07ff, "dsp_prg");
- m_upd7725->space(AS_DATA).install_read_bank(0x0000, 0x03ff, "dsp_data");
- membank("dsp_prg")->set_base(&m_dsp_prg[0]);
- membank("dsp_data")->set_base(&m_dsp_data[0]);
+ m_upd7725->space(AS_PROGRAM).install_rom(0x0000, 0x07ff, &m_dsp_prg[0]);
+ m_upd7725->space(AS_DATA).install_rom(0x0000, 0x03ff, &m_dsp_data[0]);
// copy data in the correct format
for (int x = 0; x < 0x800; x++)
m_dsp_prg[x] = (m_bios[x * 4] << 24) | (m_bios[x * 4 + 1] << 16) | (m_bios[x * 4 + 2] << 8) | 0x00;
diff --git a/src/devices/bus/snes/upd.cpp b/src/devices/bus/snes/upd.cpp
index 70396938e89..476a1b42544 100644
--- a/src/devices/bus/snes/upd.cpp
+++ b/src/devices/bus/snes/upd.cpp
@@ -322,10 +322,8 @@ void sns_rom_seta11dsp_device::device_add_mconfig(machine_config &config)
void sns_rom20_necdsp_device::speedup_addon_bios_access()
{
- m_upd7725->space(AS_PROGRAM).install_read_bank(0x0000, 0x07ff, "dsp_prg");
- m_upd7725->space(AS_DATA).install_read_bank(0x0000, 0x03ff, "dsp_data");
- membank("dsp_prg")->set_base(&m_dsp_prg[0]);
- membank("dsp_data")->set_base(&m_dsp_data[0]);
+ m_upd7725->space(AS_PROGRAM).install_rom(0x0000, 0x07ff, &m_dsp_prg[0]);
+ m_upd7725->space(AS_DATA).install_rom(0x0000, 0x03ff, &m_dsp_data[0]);
// copy data in the correct format
for (int x = 0; x < 0x800; x++)
m_dsp_prg[x] = (m_bios[x * 4] << 24) | (m_bios[x * 4 + 1] << 16) | (m_bios[x * 4 + 2] << 8) | 0x00;
@@ -335,10 +333,8 @@ void sns_rom20_necdsp_device::speedup_addon_bios_access()
void sns_rom21_necdsp_device::speedup_addon_bios_access()
{
- m_upd7725->space(AS_PROGRAM).install_read_bank(0x0000, 0x07ff, "dsp_prg");
- m_upd7725->space(AS_DATA).install_read_bank(0x0000, 0x03ff, "dsp_data");
- membank("dsp_prg")->set_base(&m_dsp_prg[0]);
- membank("dsp_data")->set_base(&m_dsp_data[0]);
+ m_upd7725->space(AS_PROGRAM).install_rom(0x0000, 0x07ff, &m_dsp_prg[0]);
+ m_upd7725->space(AS_DATA).install_rom(0x0000, 0x03ff, &m_dsp_data[0]);
// copy data in the correct format
for (int x = 0; x < 0x800; x++)
m_dsp_prg[x] = (m_bios[x * 4] << 24) | (m_bios[x * 4 + 1] << 16) | (m_bios[x * 4 + 2] << 8) | 0x00;
@@ -348,10 +344,8 @@ void sns_rom21_necdsp_device::speedup_addon_bios_access()
void sns_rom_setadsp_device::speedup_addon_bios_access()
{
- m_upd96050->space(AS_PROGRAM).install_read_bank(0x0000, 0x3fff, "dsp_prg");
- m_upd96050->space(AS_DATA).install_read_bank(0x0000, 0x07ff, "dsp_data");
- membank("dsp_prg")->set_base(&m_dsp_prg[0]);
- membank("dsp_data")->set_base(&m_dsp_data[0]);
+ m_upd96050->space(AS_PROGRAM).install_rom(0x0000, 0x3fff, &m_dsp_prg[0]);
+ m_upd96050->space(AS_DATA).install_rom(0x0000, 0x07ff, &m_dsp_data[0]);
// copy data in the correct format
for (int x = 0; x < 0x4000; x++)
m_dsp_prg[x] = (m_bios[x * 4] << 24) | (m_bios[x * 4 + 1] << 16) | (m_bios[x * 4 + 2] << 8) | 0x00;
diff --git a/src/devices/bus/vic10/exp.cpp b/src/devices/bus/vic10/exp.cpp
index a4f677c4ff1..69c33da6a1d 100644
--- a/src/devices/bus/vic10/exp.cpp
+++ b/src/devices/bus/vic10/exp.cpp
@@ -29,10 +29,7 @@ DEFINE_DEVICE_TYPE(VIC10_EXPANSION_SLOT, vic10_expansion_slot_device, "vic10_exp
//-------------------------------------------------
device_vic10_expansion_card_interface::device_vic10_expansion_card_interface(const machine_config &mconfig, device_t &device) :
- device_interface(device, "vic10exp"),
- m_lorom(*this, "lorom"),
- m_exram(*this, "exram"),
- m_uprom(*this, "uprom")
+ device_interface(device, "vic10exp")
{
m_slot = dynamic_cast<vic10_expansion_slot_device *>(device.owner());
}
@@ -133,11 +130,11 @@ image_init_result vic10_expansion_slot_device::call_load()
uint8_t *roml = nullptr;
uint8_t *romh = nullptr;
- m_card->m_lorom.allocate(roml_size);
- m_card->m_uprom.allocate(romh_size);
+ m_card->m_lorom = std::make_unique<uint8_t[]>(roml_size);
+ m_card->m_uprom = std::make_unique<uint8_t[]>(romh_size);
- if (roml_size) roml = m_card->m_lorom;
- if (romh_size) romh = m_card->m_lorom;
+ if (roml_size) roml = m_card->m_lorom.get();
+ if (romh_size) romh = m_card->m_lorom.get();
cbm_crt_read_data(image_core_file(), roml, romh);
}
diff --git a/src/devices/bus/vic10/exp.h b/src/devices/bus/vic10/exp.h
index 8dd977550ac..20d21f99e1c 100644
--- a/src/devices/bus/vic10/exp.h
+++ b/src/devices/bus/vic10/exp.h
@@ -141,9 +141,9 @@ public:
protected:
device_vic10_expansion_card_interface(const machine_config &mconfig, device_t &device);
- optional_shared_ptr<uint8_t> m_lorom;
- optional_shared_ptr<uint8_t> m_exram;
- optional_shared_ptr<uint8_t> m_uprom;
+ std::unique_ptr<uint8_t[]> m_lorom;
+ std::unique_ptr<uint8_t[]> m_exram;
+ std::unique_ptr<uint8_t[]> m_uprom;
vic10_expansion_slot_device *m_slot;
};
diff --git a/src/devices/bus/vic10/std.cpp b/src/devices/bus/vic10/std.cpp
index de4ba6ff8b6..3ffda30fcd9 100644
--- a/src/devices/bus/vic10/std.cpp
+++ b/src/devices/bus/vic10/std.cpp
@@ -48,17 +48,17 @@ void vic10_standard_cartridge_device::device_start()
uint8_t vic10_standard_cartridge_device::vic10_cd_r(offs_t offset, uint8_t data, int lorom, int uprom, int exram)
{
- if (!lorom && m_lorom.bytes())
+ if (!lorom && m_lorom)
{
- data = m_lorom[offset & m_lorom.mask()];
+ data = m_lorom[offset];
}
- else if (!exram && m_exram.bytes())
+ else if (!exram && m_exram)
{
- data = m_exram[offset & m_exram.mask()];
+ data = m_exram[offset];
}
- else if (!uprom && m_uprom.bytes())
+ else if (!uprom && m_uprom)
{
- data = m_uprom[offset & m_uprom.mask()];
+ data = m_uprom[offset];
}
return data;
@@ -71,8 +71,8 @@ uint8_t vic10_standard_cartridge_device::vic10_cd_r(offs_t offset, uint8_t data,
void vic10_standard_cartridge_device::vic10_cd_w(offs_t offset, uint8_t data, int lorom, int uprom, int exram)
{
- if (!exram && m_exram.bytes())
+ if (!exram && m_exram)
{
- m_exram[offset & m_exram.mask()] = data;
+ m_exram[offset] = data;
}
}
diff --git a/src/devices/bus/vic20/exp.cpp b/src/devices/bus/vic20/exp.cpp
index 7751ff4bc81..c7f0120b25f 100644
--- a/src/devices/bus/vic20/exp.cpp
+++ b/src/devices/bus/vic20/exp.cpp
@@ -28,12 +28,7 @@ DEFINE_DEVICE_TYPE(VIC20_EXPANSION_SLOT, vic20_expansion_slot_device, "vic20_exp
//-------------------------------------------------
device_vic20_expansion_card_interface::device_vic20_expansion_card_interface(const machine_config &mconfig, device_t &device)
- : device_interface(device, "vic20exp"),
- m_blk1(*this, "blk1"),
- m_blk2(*this, "blk2"),
- m_blk3(*this, "blk3"),
- m_blk5(*this, "blk5"),
- m_nvram(*this, "nvram")
+ : device_interface(device, "vic20exp")
{
m_slot = dynamic_cast<vic20_expansion_slot_device *>(device.owner());
}
diff --git a/src/devices/bus/vic20/exp.h b/src/devices/bus/vic20/exp.h
index b643c9089b2..96583a29577 100644
--- a/src/devices/bus/vic20/exp.h
+++ b/src/devices/bus/vic20/exp.h
@@ -134,11 +134,10 @@ public:
protected:
device_vic20_expansion_card_interface(const machine_config &mconfig, device_t &device);
- optional_shared_ptr<uint8_t> m_blk1;
- optional_shared_ptr<uint8_t> m_blk2;
- optional_shared_ptr<uint8_t> m_blk3;
- optional_shared_ptr<uint8_t> m_blk5;
- optional_shared_ptr<uint8_t> m_nvram;
+ std::unique_ptr<uint8_t[]> m_blk1;
+ std::unique_ptr<uint8_t[]> m_blk2;
+ std::unique_ptr<uint8_t[]> m_blk3;
+ std::unique_ptr<uint8_t[]> m_blk5;
vic20_expansion_slot_device *m_slot;
};
diff --git a/src/devices/bus/vic20/fe3.cpp b/src/devices/bus/vic20/fe3.cpp
index f008bec3cb8..230dc076bb4 100644
--- a/src/devices/bus/vic20/fe3.cpp
+++ b/src/devices/bus/vic20/fe3.cpp
@@ -105,7 +105,7 @@ vic20_final_expansion_3_device::vic20_final_expansion_3_device(const machine_con
device_t(mconfig, VIC20_FE3, tag, owner, clock),
device_vic20_expansion_card_interface(mconfig, *this),
m_flash_rom(*this, AM29F040_TAG),
- m_ram(*this, "sram"), m_reg1(0), m_reg2(0), m_lockbit(0)
+ m_ram(*this, "sram", 0x80000, ENDIANNESS_LITTLE), m_reg1(0), m_reg2(0), m_lockbit(0)
{
}
@@ -116,8 +116,6 @@ vic20_final_expansion_3_device::vic20_final_expansion_3_device(const machine_con
void vic20_final_expansion_3_device::device_start()
{
- m_ram.allocate(0x80000);
-
// state saving
save_item(NAME(m_reg1));
save_item(NAME(m_reg2));
diff --git a/src/devices/bus/vic20/fe3.h b/src/devices/bus/vic20/fe3.h
index 018ef2617b6..c82fff2f7ee 100644
--- a/src/devices/bus/vic20/fe3.h
+++ b/src/devices/bus/vic20/fe3.h
@@ -77,7 +77,7 @@ private:
void write_register(offs_t offset, uint8_t data);
required_device<amd_29f040_device> m_flash_rom;
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
uint8_t m_reg1;
uint8_t m_reg2;
diff --git a/src/devices/bus/vic20/megacart.cpp b/src/devices/bus/vic20/megacart.cpp
index 8094adfba2b..21171bf4343 100644
--- a/src/devices/bus/vic20/megacart.cpp
+++ b/src/devices/bus/vic20/megacart.cpp
@@ -39,6 +39,7 @@ vic20_megacart_device::vic20_megacart_device(const machine_config &mconfig, cons
: device_t(mconfig, VIC20_MEGACART, tag, owner, clock)
, device_vic20_expansion_card_interface(mconfig, *this)
, device_nvram_interface(mconfig, *this)
+ , m_nvram(*this, "nvram", 0x2000, ENDIANNESS_LITTLE)
, m_nvram_en(0)
{
}
@@ -50,8 +51,6 @@ vic20_megacart_device::vic20_megacart_device(const machine_config &mconfig, cons
void vic20_megacart_device::device_start()
{
- m_nvram.allocate(0x2000);
-
// state saving
save_item(NAME(m_nvram_en));
}
diff --git a/src/devices/bus/vic20/megacart.h b/src/devices/bus/vic20/megacart.h
index 52f5182fc3c..08e3ef0a59b 100644
--- a/src/devices/bus/vic20/megacart.h
+++ b/src/devices/bus/vic20/megacart.h
@@ -39,14 +39,15 @@ protected:
// device_nvram_interface overrides
virtual void nvram_default() override { }
- virtual void nvram_read(emu_file &file) override { file.read(m_nvram, m_nvram.bytes()); }
- virtual void nvram_write(emu_file &file) override { file.write(m_nvram, m_nvram.bytes()); }
+ virtual void nvram_read(emu_file &file) override { file.read(m_nvram, 0x2000); }
+ virtual void nvram_write(emu_file &file) override { file.write(m_nvram, 0x2000); }
// device_vic20_expansion_card_interface overrides
virtual uint8_t vic20_cd_r(offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3) override;
virtual void vic20_cd_w(offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3) override;
private:
+ memory_share_creator<uint8_t> m_nvram;
int m_nvram_en;
};
diff --git a/src/devices/bus/vic20/vic1110.cpp b/src/devices/bus/vic20/vic1110.cpp
index 9b2d0c192d9..f9ee69fd8b1 100644
--- a/src/devices/bus/vic20/vic1110.cpp
+++ b/src/devices/bus/vic20/vic1110.cpp
@@ -69,7 +69,7 @@ ioport_constructor vic1110_device::device_input_ports() const
vic1110_device::vic1110_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, VIC1110, tag, owner, clock)
, device_vic20_expansion_card_interface(mconfig, *this)
- , m_ram(*this, "ram")
+ , m_ram(*this, "ram", 0x2000, ENDIANNESS_LITTLE)
, m_sw(*this, "SW")
{
}
@@ -81,8 +81,6 @@ vic1110_device::vic1110_device(const machine_config &mconfig, const char *tag, d
void vic1110_device::device_start()
{
- // allocate memory
- m_ram.allocate(0x2000);
}
diff --git a/src/devices/bus/vic20/vic1110.h b/src/devices/bus/vic20/vic1110.h
index 9ec1ea2791a..831bc478bf4 100644
--- a/src/devices/bus/vic20/vic1110.h
+++ b/src/devices/bus/vic20/vic1110.h
@@ -40,7 +40,7 @@ protected:
virtual void vic20_cd_w(offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3) override;
private:
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
required_ioport m_sw;
};
diff --git a/src/devices/bus/vic20/vic1111.cpp b/src/devices/bus/vic20/vic1111.cpp
index 1f8fa215078..4bb3a492ef2 100644
--- a/src/devices/bus/vic20/vic1111.cpp
+++ b/src/devices/bus/vic20/vic1111.cpp
@@ -30,7 +30,7 @@ DEFINE_DEVICE_TYPE(VIC1111, vic1111_device, "vic1111", "VIC-1111 16K RAM Expansi
vic1111_device::vic1111_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, VIC1111, tag, owner, clock)
, device_vic20_expansion_card_interface(mconfig, *this)
- , m_ram(*this, "ram")
+ , m_ram(*this, "ram", 0x4000, ENDIANNESS_LITTLE)
{
}
@@ -41,8 +41,6 @@ vic1111_device::vic1111_device(const machine_config &mconfig, const char *tag, d
void vic1111_device::device_start()
{
- // allocate memory
- m_ram.allocate(0x4000);
}
diff --git a/src/devices/bus/vic20/vic1111.h b/src/devices/bus/vic20/vic1111.h
index eb42db2f149..7d391875732 100644
--- a/src/devices/bus/vic20/vic1111.h
+++ b/src/devices/bus/vic20/vic1111.h
@@ -37,7 +37,7 @@ protected:
virtual void vic20_cd_w(offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3) override;
private:
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
};
diff --git a/src/devices/bus/vic20/vic1210.cpp b/src/devices/bus/vic20/vic1210.cpp
index 6fa2a917254..88c94e8fbbd 100644
--- a/src/devices/bus/vic20/vic1210.cpp
+++ b/src/devices/bus/vic20/vic1210.cpp
@@ -31,7 +31,7 @@ DEFINE_DEVICE_TYPE(VIC1210, vic1210_device, "vic1210", "VIC-1210 3K RAM Expansio
vic1210_device::vic1210_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, VIC1210, tag, owner, clock)
, device_vic20_expansion_card_interface(mconfig, *this)
- , m_ram(*this, "ram")
+ , m_ram(*this, "ram", 0xc00, ENDIANNESS_LITTLE)
{
}
@@ -42,8 +42,6 @@ vic1210_device::vic1210_device(const machine_config &mconfig, const char *tag, d
void vic1210_device::device_start()
{
- // allocate memory
- m_ram.allocate(0xc00);
}
diff --git a/src/devices/bus/vic20/vic1210.h b/src/devices/bus/vic20/vic1210.h
index f890d5ad61e..9f20f9164ad 100644
--- a/src/devices/bus/vic20/vic1210.h
+++ b/src/devices/bus/vic20/vic1210.h
@@ -38,7 +38,7 @@ protected:
virtual void vic20_cd_w(offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3) override;
private:
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
};
diff --git a/src/devices/bus/vic20/videopak.cpp b/src/devices/bus/vic20/videopak.cpp
index 1f2b3c35431..542c2fb8320 100644
--- a/src/devices/bus/vic20/videopak.cpp
+++ b/src/devices/bus/vic20/videopak.cpp
@@ -131,8 +131,8 @@ vic20_video_pak_device::vic20_video_pak_device(const machine_config &mconfig, co
m_crtc(*this, MC6845_TAG),
m_palette(*this, "palette"),
m_char_rom(*this, MC6845_TAG),
- m_videoram(*this, "videoram"),
- m_ram(*this, "ram")
+ m_videoram(*this, "videoram", VIDEORAM_SIZE, ENDIANNESS_LITTLE),
+ m_ram(*this, "ram", RAM_SIZE, ENDIANNESS_LITTLE)
{
}
@@ -143,9 +143,6 @@ vic20_video_pak_device::vic20_video_pak_device(const machine_config &mconfig, co
void vic20_video_pak_device::device_start()
{
- // allocate memory
- m_videoram.allocate(VIDEORAM_SIZE);
- m_ram.allocate(RAM_SIZE);
}
diff --git a/src/devices/bus/vic20/videopak.h b/src/devices/bus/vic20/videopak.h
index 9e3176e5365..d87b04d35c1 100644
--- a/src/devices/bus/vic20/videopak.h
+++ b/src/devices/bus/vic20/videopak.h
@@ -51,8 +51,8 @@ private:
required_device<mc6845_device> m_crtc;
required_device<palette_device> m_palette;
required_memory_region m_char_rom;
- optional_shared_ptr<uint8_t> m_videoram;
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_videoram;
+ memory_share_creator<uint8_t> m_ram;
bool m_case;
bool m_bank_size;
diff --git a/src/devices/bus/vip/vp570.cpp b/src/devices/bus/vip/vp570.cpp
index f9473bd2f87..f2e32dffd35 100644
--- a/src/devices/bus/vip/vp570.cpp
+++ b/src/devices/bus/vip/vp570.cpp
@@ -63,7 +63,7 @@ ioport_constructor vp570_device::device_input_ports() const
vp570_device::vp570_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, VP570, tag, owner, clock),
device_vip_expansion_card_interface(mconfig, *this),
- m_ram(*this, "ram"),
+ m_ram(*this, "ram", 0x1000, ENDIANNESS_LITTLE),
m_base(*this, "BASE"),
m_sw1(*this, "SW1")
{
@@ -76,7 +76,6 @@ vp570_device::vp570_device(const machine_config &mconfig, const char *tag, devic
void vp570_device::device_start()
{
- m_ram.allocate(0x1000);
}
diff --git a/src/devices/bus/vip/vp570.h b/src/devices/bus/vip/vp570.h
index 04ad752d804..2f026bd1eac 100644
--- a/src/devices/bus/vip/vp570.h
+++ b/src/devices/bus/vip/vp570.h
@@ -40,7 +40,7 @@ protected:
virtual void vip_program_w(offs_t offset, uint8_t data, int cdef, int *minh) override;
private:
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
required_ioport m_base;
required_ioport m_sw1;
};
diff --git a/src/devices/bus/vip/vp590.cpp b/src/devices/bus/vip/vp590.cpp
index 3fd9185c5d1..296ce70fb8b 100644
--- a/src/devices/bus/vip/vp590.cpp
+++ b/src/devices/bus/vip/vp590.cpp
@@ -131,7 +131,7 @@ vp590_device::vp590_device(const machine_config &mconfig, const char *tag, devic
device_t(mconfig, VP590, tag, owner, clock),
device_vip_expansion_card_interface(mconfig, *this),
m_cgc(*this, CDP1862_TAG),
- m_color_ram(*this, "color_ram"),
+ m_color_ram(*this, "color_ram", COLOR_RAM_SIZE, ENDIANNESS_LITTLE),
m_j1(*this, "J1"),
m_j2(*this, "J2"),
m_a12(0), m_color(0), m_keylatch(0)
@@ -145,9 +145,6 @@ vp590_device::vp590_device(const machine_config &mconfig, const char *tag, devic
void vp590_device::device_start()
{
- // allocate memory
- m_color_ram.allocate(COLOR_RAM_SIZE);
-
// state saving
save_item(NAME(m_a12));
save_item(NAME(m_color));
diff --git a/src/devices/bus/vip/vp590.h b/src/devices/bus/vip/vp590.h
index 230b7d8d02d..9c69762f7be 100644
--- a/src/devices/bus/vip/vp590.h
+++ b/src/devices/bus/vip/vp590.h
@@ -50,7 +50,7 @@ private:
DECLARE_READ_LINE_MEMBER( gd_r );
required_device<cdp1862_device> m_cgc;
- optional_shared_ptr<uint8_t> m_color_ram;
+ memory_share_creator<uint8_t> m_color_ram;
required_ioport m_j1;
required_ioport m_j2;
diff --git a/src/devices/bus/vtech/memexp/memory.cpp b/src/devices/bus/vtech/memexp/memory.cpp
index 22bcc69b959..1b9465d9da9 100644
--- a/src/devices/bus/vtech/memexp/memory.cpp
+++ b/src/devices/bus/vtech/memexp/memory.cpp
@@ -129,7 +129,8 @@ void vtech_laser310_16k_device::device_reset()
vtech_laser_64k_device::vtech_laser_64k_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, VTECH_LASER_64K, tag, owner, clock),
- device_vtech_memexp_interface(mconfig, *this)
+ device_vtech_memexp_interface(mconfig, *this),
+ m_bank(*this, "bank")
{
}
@@ -152,10 +153,10 @@ void vtech_laser_64k_device::device_reset()
program_space().install_ram(0x8000, 0xbfff, &m_ram[0]);
// other banks
- program_space().install_readwrite_bank(0xc000, 0xffff, tag());
+ program_space().install_readwrite_bank(0xc000, 0xffff, m_bank);
- membank(tag())->configure_entries(0, 4, &m_ram[0], 0x4000);
- membank(tag())->set_entry(1);
+ m_bank->configure_entries(0, 4, &m_ram[0], 0x4000);
+ m_bank->set_entry(1);
// bank switch
io_space().install_write_handler(0x70, 0x7f, write8smo_delegate(*this, FUNC(vtech_laser_64k_device::bankswitch_w)));
@@ -163,5 +164,5 @@ void vtech_laser_64k_device::device_reset()
void vtech_laser_64k_device::bankswitch_w(uint8_t data)
{
- membank(tag())->set_entry(data & 0x03);
+ m_bank->set_entry(data & 0x03);
}
diff --git a/src/devices/bus/vtech/memexp/memory.h b/src/devices/bus/vtech/memexp/memory.h
index 6f87f3b51b8..84c3952fb67 100644
--- a/src/devices/bus/vtech/memexp/memory.h
+++ b/src/devices/bus/vtech/memexp/memory.h
@@ -81,6 +81,7 @@ protected:
virtual void device_reset() override;
private:
+ memory_bank_creator m_bank;
std::vector<uint8_t> m_ram;
};
diff --git a/src/devices/bus/wangpc/emb.cpp b/src/devices/bus/wangpc/emb.cpp
index 8a1817d1666..6a69c1a0fee 100644
--- a/src/devices/bus/wangpc/emb.cpp
+++ b/src/devices/bus/wangpc/emb.cpp
@@ -47,7 +47,7 @@ DEFINE_DEVICE_TYPE(WANGPC_EMB, wangpc_emb_device, "wangpc_emb", "Wang PC-PM031-B
wangpc_emb_device::wangpc_emb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, WANGPC_EMB, tag, owner, clock),
device_wangpcbus_card_interface(mconfig, *this),
- m_ram(*this, "ram"),
+ m_ram(*this, "ram", RAM_SIZE, ENDIANNESS_LITTLE),
m_option(0), m_parity_error(0), m_parity_odd(0)
{
}
@@ -59,9 +59,6 @@ wangpc_emb_device::wangpc_emb_device(const machine_config &mconfig, const char *
void wangpc_emb_device::device_start()
{
- // allocate memory
- m_ram.allocate(RAM_SIZE);
-
// state saving
save_item(NAME(m_option));
save_item(NAME(m_parity_error));
diff --git a/src/devices/bus/wangpc/emb.h b/src/devices/bus/wangpc/emb.h
index 1e175ae6867..1f23fed9f09 100644
--- a/src/devices/bus/wangpc/emb.h
+++ b/src/devices/bus/wangpc/emb.h
@@ -40,7 +40,7 @@ protected:
virtual void wangpcbus_aiowc_w(offs_t offset, uint16_t mem_mask, uint16_t data) override;
private:
- optional_shared_ptr<uint16_t> m_ram;
+ memory_share_creator<uint16_t> m_ram;
uint16_t m_option;
int m_parity_error;
int m_parity_odd;
diff --git a/src/devices/bus/wangpc/lvc.cpp b/src/devices/bus/wangpc/lvc.cpp
index 1fd3c0610d4..2eb45e47db0 100644
--- a/src/devices/bus/wangpc/lvc.cpp
+++ b/src/devices/bus/wangpc/lvc.cpp
@@ -164,7 +164,7 @@ wangpc_lvc_device::wangpc_lvc_device(const machine_config &mconfig, const char *
device_t(mconfig, WANGPC_LVC, tag, owner, clock),
device_wangpcbus_card_interface(mconfig, *this),
m_crtc(*this, MC6845_TAG),
- m_video_ram(*this, "video_ram"),
+ m_video_ram(*this, "video_ram", RAM_SIZE, ENDIANNESS_LITTLE),
m_option(0), m_scroll(0),
m_irq(CLEAR_LINE)
{
@@ -177,9 +177,6 @@ wangpc_lvc_device::wangpc_lvc_device(const machine_config &mconfig, const char *
void wangpc_lvc_device::device_start()
{
- // allocate memory
- m_video_ram.allocate(RAM_SIZE);
-
// state saving
save_item(NAME(m_option));
save_item(NAME(m_scroll));
diff --git a/src/devices/bus/wangpc/lvc.h b/src/devices/bus/wangpc/lvc.h
index 3fa858adf1c..7f0cb5ac816 100644
--- a/src/devices/bus/wangpc/lvc.h
+++ b/src/devices/bus/wangpc/lvc.h
@@ -48,7 +48,7 @@ private:
inline void set_irq(int state);
required_device<mc6845_device> m_crtc;
- optional_shared_ptr<uint16_t> m_video_ram;
+ memory_share_creator<uint16_t> m_video_ram;
rgb_t m_palette[16];
uint8_t m_option;
diff --git a/src/devices/bus/wangpc/mvc.cpp b/src/devices/bus/wangpc/mvc.cpp
index cff515a05c1..9455ba23463 100644
--- a/src/devices/bus/wangpc/mvc.cpp
+++ b/src/devices/bus/wangpc/mvc.cpp
@@ -186,9 +186,9 @@ wangpc_mvc_device::wangpc_mvc_device(const machine_config &mconfig, const char *
device_t(mconfig, WANGPC_MVC, tag, owner, clock),
device_wangpcbus_card_interface(mconfig, *this),
m_crtc(*this, MC6845_TAG),
- m_video_ram(*this, "video_ram"),
- m_char_ram(*this, "char_ram"),
- m_bitmap_ram(*this, "bitmap_ram"),
+ m_video_ram(*this, "video_ram", VIDEO_RAM_SIZE, ENDIANNESS_LITTLE),
+ m_char_ram(*this, "char_ram", CHAR_RAM_SIZE, ENDIANNESS_LITTLE),
+ m_bitmap_ram(*this, "bitmap_ram", BITMAP_RAM_SIZE, ENDIANNESS_LITTLE),
m_option(0),
m_irq(CLEAR_LINE)
{
@@ -201,11 +201,6 @@ wangpc_mvc_device::wangpc_mvc_device(const machine_config &mconfig, const char *
void wangpc_mvc_device::device_start()
{
- // allocate memory
- m_video_ram.allocate(VIDEO_RAM_SIZE);
- m_char_ram.allocate(CHAR_RAM_SIZE);
- m_bitmap_ram.allocate(BITMAP_RAM_SIZE);
-
// state saving
save_item(NAME(m_option));
save_item(NAME(m_irq));
diff --git a/src/devices/bus/wangpc/mvc.h b/src/devices/bus/wangpc/mvc.h
index aee0cdf51b2..9911952f6ac 100644
--- a/src/devices/bus/wangpc/mvc.h
+++ b/src/devices/bus/wangpc/mvc.h
@@ -48,9 +48,9 @@ private:
inline void set_irq(int state);
required_device<mc6845_device> m_crtc;
- optional_shared_ptr<uint16_t> m_video_ram;
- optional_shared_ptr<uint16_t> m_char_ram;
- optional_shared_ptr<uint16_t> m_bitmap_ram;
+ memory_share_creator<uint16_t> m_video_ram;
+ memory_share_creator<uint16_t> m_char_ram;
+ memory_share_creator<uint16_t> m_bitmap_ram;
uint8_t m_option;
int m_irq;
diff --git a/src/devices/bus/wangpc/rtc.cpp b/src/devices/bus/wangpc/rtc.cpp
index bb299017730..8cd5e055ac6 100644
--- a/src/devices/bus/wangpc/rtc.cpp
+++ b/src/devices/bus/wangpc/rtc.cpp
@@ -186,7 +186,7 @@ wangpc_rtc_device::wangpc_rtc_device(const machine_config &mconfig, const char *
m_ctc0(*this, Z80CTC_0_TAG),
m_ctc1(*this, Z80CTC_1_TAG),
m_sio(*this, Z80SIO_TAG),
- m_char_ram(*this, "char_ram")
+ m_char_ram(*this, "char_ram", 0x100, ENDIANNESS_LITTLE)
{
}
@@ -197,7 +197,6 @@ wangpc_rtc_device::wangpc_rtc_device(const machine_config &mconfig, const char *
void wangpc_rtc_device::device_start()
{
- m_char_ram.allocate(0x100);
}
diff --git a/src/devices/bus/wangpc/rtc.h b/src/devices/bus/wangpc/rtc.h
index eb848b599ec..4366536ccdf 100644
--- a/src/devices/bus/wangpc/rtc.h
+++ b/src/devices/bus/wangpc/rtc.h
@@ -52,7 +52,7 @@ private:
required_device<z80ctc_device> m_ctc0;
required_device<z80ctc_device> m_ctc1;
required_device<z80sio_device> m_sio;
- optional_shared_ptr<uint8_t> m_char_ram;
+ memory_share_creator<uint8_t> m_char_ram;
void wangpc_rtc_io(address_map &map);
void wangpc_rtc_mem(address_map &map);
diff --git a/src/devices/bus/x68k/x68k_scsiext.cpp b/src/devices/bus/x68k/x68k_scsiext.cpp
index 54766c445ac..bec669ef1f5 100644
--- a/src/devices/bus/x68k/x68k_scsiext.cpp
+++ b/src/devices/bus/x68k/x68k_scsiext.cpp
@@ -65,13 +65,11 @@ x68k_scsiext_device::x68k_scsiext_device(const machine_config &mconfig, const ch
void x68k_scsiext_device::device_start()
{
- m_slot = dynamic_cast<x68k_expansion_slot_device *>(owner());
- m_slot->space().install_read_bank(0xea0020,0xea1fff,"scsi_ext");
- m_slot->space().unmap_write(0xea0020,0xea1fff);
-
uint8_t *ROM = machine().root_device().memregion(subtag("scsiexrom").c_str())->base();
- machine().root_device().membank("scsi_ext")->set_base(ROM);
+ m_slot = dynamic_cast<x68k_expansion_slot_device *>(owner());
+ m_slot->space().install_rom(0xea0020,0xea1fff,ROM);
+ m_slot->space().unmap_write(0xea0020,0xea1fff);
m_slot->space().install_readwrite_handler(0xea0000,0xea001f, read8sm_delegate(*this, FUNC(x68k_scsiext_device::register_r)), write8sm_delegate(*this, FUNC(x68k_scsiext_device::register_w)), 0x00ff00ff);
}
diff --git a/src/devices/cpu/dsp16/dsp16.cpp b/src/devices/cpu/dsp16/dsp16.cpp
index a4ff22587e9..d7da812acf2 100644
--- a/src/devices/cpu/dsp16/dsp16.cpp
+++ b/src/devices/cpu/dsp16/dsp16.cpp
@@ -2082,7 +2082,7 @@ dsp16_device::dsp16_device(machine_config const &mconfig, char const *tag, devic
mconfig, DSP16, tag, owner, clock,
9,
address_map_constructor(FUNC(dsp16_device::data_map), this))
- , m_rom(*this, DEVICE_SELF, 0x0800)
+ , m_rom(*this, DEVICE_SELF)
{
}
@@ -2114,7 +2114,7 @@ dsp16a_device::dsp16a_device(machine_config const &mconfig, char const *tag, dev
mconfig, DSP16A, tag, owner, clock,
16,
address_map_constructor(FUNC(dsp16a_device::data_map), this))
- , m_rom(*this, DEVICE_SELF, 0x1000)
+ , m_rom(*this, DEVICE_SELF)
{
}
diff --git a/src/devices/cpu/m6805/m68705.cpp b/src/devices/cpu/m6805/m68705.cpp
index 067cd06b811..964286124ba 100644
--- a/src/devices/cpu/m6805/m68705.cpp
+++ b/src/devices/cpu/m6805/m68705.cpp
@@ -231,7 +231,7 @@ m6805_hmos_device::m6805_hmos_device(machine_config const &mconfig, char const *
m68705_device::m68705_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock, device_type type, u32 addr_width, unsigned ram_size)
: m6805_hmos_device(mconfig, tag, owner, clock, type, addr_width, ram_size)
, device_nvram_interface(mconfig, *this)
- , m_user_rom(*this, DEVICE_SELF, u32(1) << addr_width)
+ , m_user_rom(*this, DEVICE_SELF)
, m_vihtp(CLEAR_LINE)
, m_pcr(0xff)
, m_pl_data(0xff)
diff --git a/src/devices/cpu/m6805/m68hc05.cpp b/src/devices/cpu/m6805/m68hc05.cpp
index d2869fe8b04..38cf06a2f03 100644
--- a/src/devices/cpu/m6805/m68hc05.cpp
+++ b/src/devices/cpu/m6805/m68hc05.cpp
@@ -952,7 +952,7 @@ m68hc705c4a_device::m68hc705c4a_device(machine_config const &mconfig, char const
M68HC705C4A,
13,
address_map_constructor(FUNC(m68hc705c4a_device::c4a_map), this))
- , m_rom(*this, DEVICE_SELF, 0x2000)
+ , m_rom(*this, DEVICE_SELF)
{
set_port_bits(std::array<u8, PORT_COUNT>{{ 0xff, 0xff, 0xff, 0xbf }});
}
@@ -1048,7 +1048,7 @@ m68hc705c8a_device::m68hc705c8a_device(machine_config const &mconfig, char const
M68HC705C8A,
13,
address_map_constructor(FUNC(m68hc705c8a_device::c8a_map), this))
- , m_rom(*this, DEVICE_SELF, 0x2000)
+ , m_rom(*this, DEVICE_SELF)
{
set_port_bits(std::array<u8, PORT_COUNT>{{ 0xff, 0xff, 0xff, 0xbf }});
}
diff --git a/src/devices/machine/at28c16.cpp b/src/devices/machine/at28c16.cpp
index 622dfb3fc19..acbee4613eb 100644
--- a/src/devices/machine/at28c16.cpp
+++ b/src/devices/machine/at28c16.cpp
@@ -48,7 +48,7 @@ at28c16_device::at28c16_device(const machine_config &mconfig, const char *tag, d
m_a9_12v(0),
m_oe_12v(0),
m_last_write(-1),
- m_default_data(*this, DEVICE_SELF, AT28C16_DATA_BYTES)
+ m_default_data(*this, DEVICE_SELF)
{
}
diff --git a/src/devices/machine/cs4031.cpp b/src/devices/machine/cs4031.cpp
index 4af64f320a1..b8919cca609 100644
--- a/src/devices/machine/cs4031.cpp
+++ b/src/devices/machine/cs4031.cpp
@@ -565,28 +565,25 @@ void cs4031_device::config_data_w(uint8_t data)
// MEMORY MAPPER
//**************************************************************************
-void cs4031_device::update_read_region(int index, const char *region, offs_t start, offs_t end)
+void cs4031_device::update_read_region(int index, offs_t start, offs_t end)
{
if (!BIT(m_registers[SHADOW_READ], index) && BIT(m_registers[ROMCS], index))
{
LOGMEMORY("ROM read from %x to %x\n", start, end);
- m_space->install_read_bank(start, end, region);
- machine().root_device().membank(region)->set_base(m_bios + start);
+ m_space->install_rom(start, end, m_bios + start);
}
else if (!BIT(m_registers[SHADOW_READ], index) && !BIT(m_registers[ROMCS], index))
{
LOGMEMORY("ISA read from %x to %x\n", start, end);
- m_space->install_read_bank(start, end, region);
- machine().root_device().membank(region)->set_base(m_isa + start - 0xc0000);
+ m_space->install_rom(start, end, m_isa + start - 0xc0000);
}
else if (BIT(m_registers[SHADOW_READ], index))
{
LOGMEMORY("RAM read from %x to %x\n", start, end);
- m_space->install_read_bank(start, end, region);
- machine().root_device().membank(region)->set_base(m_ram + start);
+ m_space->install_rom(start, end, m_ram + start);
}
else
{
@@ -596,28 +593,25 @@ void cs4031_device::update_read_region(int index, const char *region, offs_t sta
}
}
-void cs4031_device::update_write_region(int index, const char *region, offs_t start, offs_t end)
+void cs4031_device::update_write_region(int index, offs_t start, offs_t end)
{
if (!BIT(m_registers[SHADOW_WRITE], index) && BIT(m_registers[ROMCS], index) && BIT(m_registers[ROMCS], 7))
{
LOGMEMORY("ROM write from %x to %x\n", start, end);
- m_space->install_write_bank(start, end, region);
- machine().root_device().membank(region)->set_base(m_bios + start);
+ m_space->install_writeonly(start, end, m_bios + start);
}
else if (!BIT(m_registers[SHADOW_WRITE], index) && !BIT(m_registers[ROMCS], index))
{
LOGMEMORY("ISA write from %x to %x\n", start, end);
- m_space->install_write_bank(start, end, region);
- machine().root_device().membank(region)->set_base(m_isa + start - 0xc0000);
+ m_space->install_writeonly(start, end, m_isa + start - 0xc0000);
}
else if (BIT(m_registers[SHADOW_WRITE], index))
{
LOGMEMORY("RAM write from %x to %x\n", start, end);
- m_space->install_write_bank(start, end, region);
- machine().root_device().membank(region)->set_base(m_ram + start);
+ m_space->install_writeonly(start, end, m_ram + start);
}
else
{
@@ -629,24 +623,24 @@ void cs4031_device::update_write_region(int index, const char *region, offs_t st
void cs4031_device::update_read_regions()
{
- update_read_region(0, "read_c0000", 0xc0000, 0xc3fff);
- update_read_region(1, "read_c4000", 0xc4000, 0xc7fff);
- update_read_region(2, "read_c8000", 0xc8000, 0xcbfff);
- update_read_region(3, "read_cc000", 0xcc000, 0xcffff);
- update_read_region(4, "read_d0000", 0xd0000, 0xdffff);
- update_read_region(5, "read_e0000", 0xe0000, 0xeffff);
- update_read_region(6, "read_f0000", 0xf0000, 0xfffff);
+ update_read_region(0, 0xc0000, 0xc3fff);
+ update_read_region(1, 0xc4000, 0xc7fff);
+ update_read_region(2, 0xc8000, 0xcbfff);
+ update_read_region(3, 0xcc000, 0xcffff);
+ update_read_region(4, 0xd0000, 0xdffff);
+ update_read_region(5, 0xe0000, 0xeffff);
+ update_read_region(6, 0xf0000, 0xfffff);
}
void cs4031_device::update_write_regions()
{
- update_write_region(0, "write_c0000", 0xc0000, 0xc3fff);
- update_write_region(1, "write_c4000", 0xc4000, 0xc7fff);
- update_write_region(2, "write_c8000", 0xc8000, 0xcbfff);
- update_write_region(3, "write_cc000", 0xcc000, 0xcffff);
- update_write_region(4, "write_d0000", 0xd0000, 0xdffff);
- update_write_region(5, "write_e0000", 0xe0000, 0xeffff);
- update_write_region(6, "write_f0000", 0xf0000, 0xfffff);
+ update_write_region(0, 0xc0000, 0xc3fff);
+ update_write_region(1, 0xc4000, 0xc7fff);
+ update_write_region(2, 0xc8000, 0xcbfff);
+ update_write_region(3, 0xcc000, 0xcffff);
+ update_write_region(4, 0xd0000, 0xdffff);
+ update_write_region(5, 0xe0000, 0xeffff);
+ update_write_region(6, 0xf0000, 0xfffff);
}
diff --git a/src/devices/machine/cs4031.h b/src/devices/machine/cs4031.h
index 21cb09f2eb0..b8540380679 100644
--- a/src/devices/machine/cs4031.h
+++ b/src/devices/machine/cs4031.h
@@ -142,8 +142,8 @@ private:
void fast_gatea20(int state);
void keyboard_gatea20(int state);
- void update_read_region(int index, const char *region, offs_t start, offs_t end);
- void update_write_region(int index, const char *region, offs_t start, offs_t end);
+ void update_read_region(int index, offs_t start, offs_t end);
+ void update_write_region(int index, offs_t start, offs_t end);
void update_read_regions();
void update_write_regions();
diff --git a/src/devices/machine/ds1386.cpp b/src/devices/machine/ds1386.cpp
index c5a9048f2fc..4333a6bcc5c 100644
--- a/src/devices/machine/ds1386.cpp
+++ b/src/devices/machine/ds1386.cpp
@@ -46,7 +46,7 @@ ds1386_device::ds1386_device(const machine_config &mconfig, device_type type, co
, m_watchdog_timer(nullptr)
, m_inta_timer(nullptr)
, m_intb_timer(nullptr)
- , m_default_data(*this, DEVICE_SELF, size)
+ , m_default_data(*this, DEVICE_SELF)
, m_hundredths(0)
, m_seconds(0)
, m_minutes(0)
diff --git a/src/devices/machine/er1400.cpp b/src/devices/machine/er1400.cpp
index a4eed0dacae..f42a9f58f9c 100644
--- a/src/devices/machine/er1400.cpp
+++ b/src/devices/machine/er1400.cpp
@@ -42,7 +42,7 @@ DEFINE_DEVICE_TYPE(ER1400, er1400_device, "er1400", "ER1400 Serial EAROM (100x14
er1400_device::er1400_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, ER1400, tag, owner, clock)
, device_nvram_interface(mconfig, *this)
- , m_default_data(*this, DEVICE_SELF, 100)
+ , m_default_data(*this, DEVICE_SELF)
, m_clock_input(0)
, m_code_input(0)
, m_data_input(0)
diff --git a/src/devices/machine/er2055.cpp b/src/devices/machine/er2055.cpp
index ad61551bd8f..20fd3805e7d 100644
--- a/src/devices/machine/er2055.cpp
+++ b/src/devices/machine/er2055.cpp
@@ -37,7 +37,7 @@ DEFINE_DEVICE_TYPE(ER2055, er2055_device, "er2055", "ER2055 EAROM (64x8)")
er2055_device::er2055_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, ER2055, tag, owner, clock),
device_nvram_interface(mconfig, *this),
- m_default_data(*this, DEVICE_SELF, SIZE_DATA),
+ m_default_data(*this, DEVICE_SELF),
m_control_state(0),
m_address(0),
m_data(0)
diff --git a/src/devices/machine/i82875p.cpp b/src/devices/machine/i82875p.cpp
index a2b29782387..37d95112359 100644
--- a/src/devices/machine/i82875p.cpp
+++ b/src/devices/machine/i82875p.cpp
@@ -443,7 +443,7 @@ void i82875p_overflow_device::overflow_map(address_map &map)
{
map(0x000, 0x007).rw(FUNC(i82875p_overflow_device::dram_row_boundary_r), FUNC(i82875p_overflow_device::dram_row_boundary_w));
map(0x010, 0x013).rw(FUNC(i82875p_overflow_device::dram_row_attribute_r), FUNC(i82875p_overflow_device::dram_row_attribute_w));
- map(0x060, 0x064).rw(FUNC(i82875p_overflow_device::dram_timing_r), FUNC(i82875p_overflow_device::dram_timing_w));
+ map(0x060, 0x063).rw(FUNC(i82875p_overflow_device::dram_timing_r), FUNC(i82875p_overflow_device::dram_timing_w));
map(0x068, 0x06b).rw(FUNC(i82875p_overflow_device::dram_controller_mode_r), FUNC(i82875p_overflow_device::dram_controller_mode_w));
}
diff --git a/src/devices/machine/i8355.cpp b/src/devices/machine/i8355.cpp
index f6a28f07297..caa31eb7e1a 100644
--- a/src/devices/machine/i8355.cpp
+++ b/src/devices/machine/i8355.cpp
@@ -93,7 +93,7 @@ i8355_device::i8355_device(const machine_config &mconfig, const char *tag, devic
m_out_pa_cb(*this),
m_in_pb_cb(*this),
m_out_pb_cb(*this),
- m_rom(*this, DEVICE_SELF, 0x800)
+ m_rom(*this, DEVICE_SELF)
{
}
diff --git a/src/devices/machine/mos6530n.cpp b/src/devices/machine/mos6530n.cpp
index 0c19a5aaed6..e6ad3c9dc86 100644
--- a/src/devices/machine/mos6530n.cpp
+++ b/src/devices/machine/mos6530n.cpp
@@ -118,9 +118,9 @@ void mos6532_new_device::io_w(offs_t offset, uint8_t data)
// mos6530_device_base - constructor
//-------------------------------------------------
-mos6530_device_base::mos6530_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
+mos6530_device_base::mos6530_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, u32 rsize) :
device_t(mconfig, type, tag, owner, clock),
- m_ram(*this, finder_base::DUMMY_TAG),
+ m_ram(*this, finder_base::DUMMY_TAG, rsize, ENDIANNESS_LITTLE),
m_rom(*this, DEVICE_SELF),
m_irq_cb(*this),
m_in8_pa_cb(*this),
@@ -155,7 +155,7 @@ mos6530_device_base::mos6530_device_base(const machine_config &mconfig, device_t
//-------------------------------------------------
mos6530_new_device::mos6530_new_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : mos6530_device_base(mconfig, MOS6530_NEW, tag, owner, clock) { }
+ : mos6530_device_base(mconfig, MOS6530_NEW, tag, owner, clock, 0x40) { }
//-------------------------------------------------
@@ -163,7 +163,7 @@ mos6530_new_device::mos6530_new_device(const machine_config &mconfig, const char
//-------------------------------------------------
mos6532_new_device::mos6532_new_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : mos6530_device_base(mconfig, MOS6532_NEW, tag, owner, clock) { }
+ : mos6530_device_base(mconfig, MOS6532_NEW, tag, owner, clock, 0x80) { }
//-------------------------------------------------
@@ -203,22 +203,6 @@ void mos6530_device_base::device_start()
save_item(NAME(m_timer));
}
-void mos6530_new_device::device_start()
-{
- mos6530_device_base::device_start();
-
- // allocate RAM
- m_ram.allocate(0x40);
-}
-
-void mos6532_new_device::device_start()
-{
- mos6530_device_base::device_start();
-
- // allocate RAM
- m_ram.allocate(0x80);
-}
-
//-------------------------------------------------
// device_reset - device-specific reset
diff --git a/src/devices/machine/mos6530n.h b/src/devices/machine/mos6530n.h
index 3a6a2289944..2822d18d6bf 100644
--- a/src/devices/machine/mos6530n.h
+++ b/src/devices/machine/mos6530n.h
@@ -96,7 +96,7 @@ public:
protected:
// construction/destruction
- mos6530_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+ mos6530_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, u32 rsize);
// device-level overrides
virtual void device_start() override;
@@ -137,7 +137,7 @@ protected:
void timer_on_w(offs_t offset, uint8_t data);
void edge_w(uint8_t data);
- optional_shared_ptr<uint8_t> m_ram;
+ memory_share_creator<uint8_t> m_ram;
optional_region_ptr<uint8_t> m_rom;
devcb_write_line m_irq_cb;
@@ -207,8 +207,6 @@ public:
protected:
// device-level overrides
- virtual void device_start() override;
-
void update_pb() override;
void update_irq() override;
uint8_t get_irq_flags() override;
@@ -227,10 +225,6 @@ public:
// is there a better way to access the memory map when not using m()?
uint8_t io_r(offs_t offset);
void io_w(offs_t offset, uint8_t data);
-
-protected:
- // device-level overrides
- virtual void device_start() override;
};
diff --git a/src/devices/machine/rp5h01.cpp b/src/devices/machine/rp5h01.cpp
index 21367354256..655ffd5f841 100644
--- a/src/devices/machine/rp5h01.cpp
+++ b/src/devices/machine/rp5h01.cpp
@@ -35,7 +35,7 @@ DEFINE_DEVICE_TYPE(RP5H01, rp5h01_device, "rp5h01", "RP5H01 6/7-bit Counter")
rp5h01_device::rp5h01_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, RP5H01, tag, owner, clock)
, m_data(nullptr)
- , m_rom(*this, DEVICE_SELF, 0x10)
+ , m_rom(*this, DEVICE_SELF)
{
}
diff --git a/src/devices/machine/timekpr.cpp b/src/devices/machine/timekpr.cpp
index ce9d6d3f327..5128ef1ac62 100644
--- a/src/devices/machine/timekpr.cpp
+++ b/src/devices/machine/timekpr.cpp
@@ -93,7 +93,7 @@ timekeeper_device::timekeeper_device(const machine_config &mconfig, device_type
, device_nvram_interface(mconfig, *this)
, m_reset_cb(*this)
, m_irq_cb(*this)
- , m_default_data(*this, DEVICE_SELF, size)
+ , m_default_data(*this, DEVICE_SELF)
, m_size(size)
{
}
diff --git a/src/devices/machine/vt82c496.cpp b/src/devices/machine/vt82c496.cpp
index 16d309adb91..ad58ac95b69 100644
--- a/src/devices/machine/vt82c496.cpp
+++ b/src/devices/machine/vt82c496.cpp
@@ -17,7 +17,28 @@ DEFINE_DEVICE_TYPE(VT82C496, vt82c496_device, "vt82c496", "VIA VT82C496 system c
vt82c496_device::vt82c496_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, VT82C496, tag, owner, clock), m_cpu(*this, finder_base::DUMMY_TAG), m_space(nullptr), m_ram(*this, finder_base::DUMMY_TAG), m_rom(*this, finder_base::DUMMY_TAG), m_reg_select(0)
+ : device_t(mconfig, VT82C496, tag, owner, clock), m_cpu(*this, finder_base::DUMMY_TAG), m_space(nullptr), m_ram(*this, finder_base::DUMMY_TAG), m_rom(*this, finder_base::DUMMY_TAG),
+ m_bios_c0_r(*this, "bios_c0_r"),
+ m_bios_c4_r(*this, "bios_c4_r"),
+ m_bios_c8_r(*this, "bios_c8_r"),
+ m_bios_cc_r(*this, "bios_cc_r"),
+ m_bios_d0_r(*this, "bios_d0_r"),
+ m_bios_d4_r(*this, "bios_d4_r"),
+ m_bios_d8_r(*this, "bios_d8_r"),
+ m_bios_dc_r(*this, "bios_dc_r"),
+ m_bios_e0_r(*this, "bios_e0_r"),
+ m_bios_f0_r(*this, "bios_f0_r"),
+ m_bios_c0_w(*this, "bios_c0_w"),
+ m_bios_c4_w(*this, "bios_c4_w"),
+ m_bios_c8_w(*this, "bios_c8_w"),
+ m_bios_cc_w(*this, "bios_cc_w"),
+ m_bios_d0_w(*this, "bios_d0_w"),
+ m_bios_d4_w(*this, "bios_d4_w"),
+ m_bios_d8_w(*this, "bios_d8_w"),
+ m_bios_dc_w(*this, "bios_dc_w"),
+ m_bios_e0_w(*this, "bios_e0_w"),
+ m_bios_f0_w(*this, "bios_f0_w"),
+ m_reg_select(0)
{
}
@@ -34,27 +55,27 @@ void vt82c496_device::device_reset()
memset(m_reg,0,0x100);
// set up default ROM banking
- m_space->install_read_bank(0xc0000,0xc3fff,0,"bios_c0_r");
- m_space->install_read_bank(0xc4000,0xc7fff,0,"bios_c4_r");
- m_space->install_read_bank(0xc8000,0xcbfff,0,"bios_c8_r");
- m_space->install_read_bank(0xcc000,0xcffff,0,"bios_cc_r");
- m_space->install_read_bank(0xd0000,0xd3fff,0,"bios_d0_r");
- m_space->install_read_bank(0xd4000,0xd7fff,0,"bios_d4_r");
- m_space->install_read_bank(0xd8000,0xdbfff,0,"bios_d8_r");
- m_space->install_read_bank(0xdc000,0xdffff,0,"bios_dc_r");
- m_space->install_read_bank(0xe0000,0xeffff,0,"bios_e0_r");
- m_space->install_read_bank(0xf0000,0xfffff,0,"bios_f0_r");
+ m_space->install_read_bank(0xc0000,0xc3fff,0,m_bios_c0_r);
+ m_space->install_read_bank(0xc4000,0xc7fff,0,m_bios_c4_r);
+ m_space->install_read_bank(0xc8000,0xcbfff,0,m_bios_c8_r);
+ m_space->install_read_bank(0xcc000,0xcffff,0,m_bios_cc_r);
+ m_space->install_read_bank(0xd0000,0xd3fff,0,m_bios_d0_r);
+ m_space->install_read_bank(0xd4000,0xd7fff,0,m_bios_d4_r);
+ m_space->install_read_bank(0xd8000,0xdbfff,0,m_bios_d8_r);
+ m_space->install_read_bank(0xdc000,0xdffff,0,m_bios_dc_r);
+ m_space->install_read_bank(0xe0000,0xeffff,0,m_bios_e0_r);
+ m_space->install_read_bank(0xf0000,0xfffff,0,m_bios_f0_r);
m_space->nop_write(0xc0000,0xfffff);
- machine().root_device().membank("bios_c0_r")->set_base(&m_rom[0]);
- machine().root_device().membank("bios_c4_r")->set_base(&m_rom[0x4000/4]);
- machine().root_device().membank("bios_c8_r")->set_base(&m_rom[0x8000/4]);
- machine().root_device().membank("bios_cc_r")->set_base(&m_rom[0xc000/4]);
- machine().root_device().membank("bios_d0_r")->set_base(&m_rom[0x10000/4]);
- machine().root_device().membank("bios_d4_r")->set_base(&m_rom[0x14000/4]);
- machine().root_device().membank("bios_d8_r")->set_base(&m_rom[0x18000/4]);
- machine().root_device().membank("bios_dc_r")->set_base(&m_rom[0x1c000/4]);
- machine().root_device().membank("bios_e0_r")->set_base(&m_rom[0x20000/4]);
- machine().root_device().membank("bios_f0_r")->set_base(&m_rom[0x30000/4]);
+ m_bios_c0_r->set_base(m_rom);
+ m_bios_c4_r->set_base(m_rom+0x4000);
+ m_bios_c8_r->set_base(m_rom+0x8000);
+ m_bios_cc_r->set_base(m_rom+0xc000);
+ m_bios_d0_r->set_base(m_rom+0x10000);
+ m_bios_d4_r->set_base(m_rom+0x14000);
+ m_bios_d8_r->set_base(m_rom+0x18000);
+ m_bios_dc_r->set_base(m_rom+0x1c000);
+ m_bios_e0_r->set_base(m_rom+0x20000);
+ m_bios_f0_r->set_base(m_rom+0x30000);
}
uint8_t vt82c496_device::read(offs_t offset)
@@ -89,49 +110,49 @@ void vt82c496_device::write(offs_t offset, uint8_t data)
void vt82c496_device::update_mem_c0(uint8_t data)
{
if(data & 0x80)
- machine().root_device().membank("bios_cc_r")->set_base(m_ram->pointer()+0xcc000);
+ m_bios_cc_r->set_base(m_ram->pointer()+0xcc000);
else
- machine().root_device().membank("bios_cc_r")->set_base(&m_rom[0xc000/4]);
+ m_bios_cc_r->set_base(m_rom+0xc000/4);
if(data & 0x40)
{
- m_space->install_write_bank(0xcc000,0xcffff,0,"bios_cc_w");
- machine().root_device().membank("bios_cc_w")->set_base(m_ram->pointer()+0xcc000);
+ m_space->install_write_bank(0xcc000,0xcffff,0,m_bios_cc_w);
+ m_bios_cc_w->set_base(m_ram->pointer()+0xcc000);
}
else
m_space->nop_write(0xcc000,0xcffff);
if(data & 0x20)
- machine().root_device().membank("bios_c8_r")->set_base(m_ram->pointer()+0xc8000);
+ m_bios_c8_r->set_base(m_ram->pointer()+0xc8000);
else
- machine().root_device().membank("bios_c8_r")->set_base(&m_rom[0x8000/4]);
+ m_bios_c8_r->set_base(m_rom+0x8000/4);
if(data & 0x10)
{
- m_space->install_write_bank(0xc8000,0xcbfff,0,"bios_c8_w");
- machine().root_device().membank("bios_c8_w")->set_base(m_ram->pointer()+0xc8000);
+ m_space->install_write_bank(0xc8000,0xcbfff,0,m_bios_c8_w);
+ m_bios_c8_w->set_base(m_ram->pointer()+0xc8000);
}
else
m_space->nop_write(0xc8000,0xcbfff);
if(data & 0x08)
- machine().root_device().membank("bios_c4_r")->set_base(m_ram->pointer()+0xc4000);
+ m_bios_c4_r->set_base(m_ram->pointer()+0xc4000);
else
- machine().root_device().membank("bios_c4_r")->set_base(&m_rom[0x4000/4]);
+ m_bios_c4_r->set_base(m_rom+0x4000/4);
if(data & 0x04)
{
- m_space->install_write_bank(0xc4000,0xc7fff,0,"bios_c4_w");
- machine().root_device().membank("bios_c4_w")->set_base(m_ram->pointer()+0xc4000);
+ m_space->install_write_bank(0xc4000,0xc7fff,0,m_bios_c4_w);
+ m_bios_c4_w->set_base(m_ram->pointer()+0xc4000);
}
else
m_space->nop_write(0xc4000,0xc7fff);
if(data & 0x02)
- machine().root_device().membank("bios_c0_r")->set_base(m_ram->pointer()+0xc0000);
+ m_bios_c0_r->set_base(m_ram->pointer()+0xc0000);
else
- machine().root_device().membank("bios_c0_r")->set_base(&m_rom[0]);
+ m_bios_c0_r->set_base(m_rom+0);
if(data & 0x01)
{
- m_space->install_write_bank(0xc0000,0xc3fff,0,"bios_c0_w");
- machine().root_device().membank("bios_c0_w")->set_base(m_ram->pointer()+0xc0000);
+ m_space->install_write_bank(0xc0000,0xc3fff,0,m_bios_c0_w);
+ m_bios_c0_w->set_base(m_ram->pointer()+0xc0000);
}
else
m_space->nop_write(0xc0000,0xc3fff);
@@ -140,49 +161,49 @@ void vt82c496_device::update_mem_c0(uint8_t data)
void vt82c496_device::update_mem_d0(uint8_t data)
{
if(data & 0x80)
- machine().root_device().membank("bios_dc_r")->set_base(m_ram->pointer()+0xdc000);
+ m_bios_dc_r->set_base(m_ram->pointer()+0xdc000);
else
- machine().root_device().membank("bios_dc_r")->set_base(&m_rom[0x1c000/4]);
+ m_bios_dc_r->set_base(m_rom+0x1c000/4);
if(data & 0x40)
{
- m_space->install_write_bank(0xdc000,0xdffff,0,"bios_dc_w");
- machine().root_device().membank("bios_dc_w")->set_base(m_ram->pointer()+0xdc000);
+ m_space->install_write_bank(0xdc000,0xdffff,0,m_bios_dc_w);
+ m_bios_dc_w->set_base(m_ram->pointer()+0xdc000);
}
else
m_space->nop_write(0xdc000,0xdffff);
if(data & 0x20)
- machine().root_device().membank("bios_d8_r")->set_base(m_ram->pointer()+0xd8000);
+ m_bios_d8_r->set_base(m_ram->pointer()+0xd8000);
else
- machine().root_device().membank("bios_d8_r")->set_base(&m_rom[0x18000/4]);
+ m_bios_d8_r->set_base(m_rom+0x18000/4);
if(data & 0x10)
{
- m_space->install_write_bank(0xd8000,0xdbfff,0,"bios_d8_w");
- machine().root_device().membank("bios_d8_w")->set_base(m_ram->pointer()+0xd8000);
+ m_space->install_write_bank(0xd8000,0xdbfff,0,m_bios_d8_w);
+ m_bios_d8_w->set_base(m_ram->pointer()+0xd8000);
}
else
m_space->nop_write(0xd8000,0xdbfff);
if(data & 0x08)
- machine().root_device().membank("bios_d4_r")->set_base(m_ram->pointer()+0xd4000);
+ m_bios_d4_r->set_base(m_ram->pointer()+0xd4000);
else
- machine().root_device().membank("bios_d4_r")->set_base(&m_rom[0x14000/4]);
+ m_bios_d4_r->set_base(m_rom+0x14000/4);
if(data & 0x04)
{
- m_space->install_write_bank(0xd4000,0xd7fff,0,"bios_d4_w");
- machine().root_device().membank("bios_d4_w")->set_base(m_ram->pointer()+0xd4000);
+ m_space->install_write_bank(0xd4000,0xd7fff,0,m_bios_d4_w);
+ m_bios_d4_w->set_base(m_ram->pointer()+0xd4000);
}
else
m_space->nop_write(0xd4000,0xd7fff);
if(data & 0x02)
- machine().root_device().membank("bios_d0_r")->set_base(m_ram->pointer()+0xd0000);
+ m_bios_d0_r->set_base(m_ram->pointer()+0xd0000);
else
- machine().root_device().membank("bios_d0_r")->set_base(&m_rom[0x10000/4]);
+ m_bios_d0_r->set_base(m_rom+0x10000/4);
if(data & 0x01)
{
- m_space->install_write_bank(0xd0000,0xd3fff,0,"bios_d0_w");
- machine().root_device().membank("bios_d0_w")->set_base(m_ram->pointer()+0xd0000);
+ m_space->install_write_bank(0xd0000,0xd3fff,0,m_bios_d0_w);
+ m_bios_d0_w->set_base(m_ram->pointer()+0xd0000);
}
else
m_space->nop_write(0xd0000,0xd3fff);
@@ -191,27 +212,27 @@ void vt82c496_device::update_mem_d0(uint8_t data)
void vt82c496_device::update_mem_e0(uint8_t data)
{
if(data & 0x80)
- machine().root_device().membank("bios_e0_r")->set_base(m_ram->pointer()+0xe0000);
+ m_bios_e0_r->set_base(m_ram->pointer()+0xe0000);
else
- machine().root_device().membank("bios_e0_r")->set_base(&m_rom[0x20000/4]);
+ m_bios_e0_r->set_base(m_rom+0x20000/4);
if(data & 0x40)
{
- m_space->install_write_bank(0xe0000,0xeffff,0,"bios_e0_w");
- machine().root_device().membank("bios_e0_w")->set_base(m_ram->pointer()+0xe0000);
+ m_space->install_write_bank(0xe0000,0xeffff,0,m_bios_e0_w);
+ m_bios_e0_w->set_base(m_ram->pointer()+0xe0000);
}
else
m_space->nop_write(0xe0000,0xeffff);
if(data & 0x20)
- machine().root_device().membank("bios_f0_r")->set_base(m_ram->pointer()+0xf0000);
+ m_bios_f0_r->set_base(m_ram->pointer()+0xf0000);
else
- machine().root_device().membank("bios_f0_r")->set_base(&m_rom[0x30000/4]);
+ m_bios_f0_r->set_base(m_rom+0x30000/4);
if(data & 0x10)
{
- m_space->install_write_bank(0xf0000,0xfffff,0,"bios_f0_w");
- machine().root_device().membank("bios_f0_w")->set_base(m_ram->pointer()+0xf0000);
+ m_space->install_write_bank(0xf0000,0xfffff,0,m_bios_f0_w);
+ m_bios_f0_w->set_base(m_ram->pointer()+0xf0000);
}
else
m_space->nop_write(0xf0000,0xfffff);
diff --git a/src/devices/machine/vt82c496.h b/src/devices/machine/vt82c496.h
index 48028579ed2..c73a0ace79a 100644
--- a/src/devices/machine/vt82c496.h
+++ b/src/devices/machine/vt82c496.h
@@ -37,6 +37,26 @@ private:
address_space* m_space;
required_device<ram_device> m_ram;
required_region_ptr<uint32_t> m_rom;
+ memory_bank_creator m_bios_c0_r;
+ memory_bank_creator m_bios_c4_r;
+ memory_bank_creator m_bios_c8_r;
+ memory_bank_creator m_bios_cc_r;
+ memory_bank_creator m_bios_d0_r;
+ memory_bank_creator m_bios_d4_r;
+ memory_bank_creator m_bios_d8_r;
+ memory_bank_creator m_bios_dc_r;
+ memory_bank_creator m_bios_e0_r;
+ memory_bank_creator m_bios_f0_r;
+ memory_bank_creator m_bios_c0_w;
+ memory_bank_creator m_bios_c4_w;
+ memory_bank_creator m_bios_c8_w;
+ memory_bank_creator m_bios_cc_w;
+ memory_bank_creator m_bios_d0_w;
+ memory_bank_creator m_bios_d4_w;
+ memory_bank_creator m_bios_d8_w;
+ memory_bank_creator m_bios_dc_w;
+ memory_bank_creator m_bios_e0_w;
+ memory_bank_creator m_bios_f0_w;
uint8_t m_reg[0x100];
uint8_t m_reg_select;
diff --git a/src/devices/machine/x2201.cpp b/src/devices/machine/x2201.cpp
index 90d731b7e3e..d93fca101ff 100644
--- a/src/devices/machine/x2201.cpp
+++ b/src/devices/machine/x2201.cpp
@@ -45,7 +45,7 @@ DEFINE_DEVICE_TYPE(X2201, x2201_device, "x2201", "Xicor X2201 1024x1 NOVRAM")
x2201_device::x2201_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, X2201, tag, owner, clock)
, device_nvram_interface(mconfig, *this)
- , m_default_data(*this, DEVICE_SELF, 1024 / 8)
+ , m_default_data(*this, DEVICE_SELF)
, m_cs(false)
, m_store(false)
, m_array_recall(false)
@@ -61,7 +61,7 @@ void x2201_device::device_start()
{
// create arrays
m_ram = make_unique_clear<u8[]>(1024 / 8);
- m_eeprom = std::make_unique<u8[]>(1028 / 8);
+ m_eeprom = std::make_unique<u8[]>(1024 / 8);
// register state for saving
save_pointer(NAME(m_ram), 1024 / 8);
diff --git a/src/devices/machine/x2212.cpp b/src/devices/machine/x2212.cpp
index 84a4e0b565b..cc5028e0cc7 100644
--- a/src/devices/machine/x2212.cpp
+++ b/src/devices/machine/x2212.cpp
@@ -37,7 +37,7 @@ x2212_device::x2212_device(const machine_config &mconfig, device_type type, cons
, m_store(false)
, m_array_recall(false)
, m_size_data(size_data)
- , m_default_data(*this, DEVICE_SELF, size_data)
+ , m_default_data(*this, DEVICE_SELF)
{
}
diff --git a/src/devices/sound/tms5110.cpp b/src/devices/sound/tms5110.cpp
index 5782aa905af..14bb5523322 100644
--- a/src/devices/sound/tms5110.cpp
+++ b/src/devices/sound/tms5110.cpp
@@ -1509,7 +1509,7 @@ DEFINE_DEVICE_TYPE(TMSPROM, tmsprom_device, "tmsprom", "TMSPROM")
tmsprom_device::tmsprom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, TMSPROM, tag, owner, clock),
m_rom(*this, DEVICE_SELF),
- m_prom(*this, finder_base::DUMMY_TAG, 0x20),
+ m_prom(*this, finder_base::DUMMY_TAG),
m_rom_size(0),
m_pdc_bit(0),
m_ctl1_bit(0),
diff --git a/src/devices/video/ppu2c0x.cpp b/src/devices/video/ppu2c0x.cpp
index ebc65b79f46..793edf6cb03 100644
--- a/src/devices/video/ppu2c0x.cpp
+++ b/src/devices/video/ppu2c0x.cpp
@@ -135,7 +135,7 @@ ppu2c0x_device::ppu2c0x_device(const machine_config& mconfig, device_type type,
ppu2c0x_rgb_device::ppu2c0x_rgb_device(const machine_config& mconfig, device_type type, const char* tag, device_t* owner, uint32_t clock) :
ppu2c0x_device(mconfig, type, tag, owner, clock),
- m_palette_data(*this, "palette", 0xc0)
+ m_palette_data(*this, "palette")
{
}
@@ -201,7 +201,7 @@ ppu2c05_04_device::ppu2c05_04_device(const machine_config& mconfig, const char*
// Vs. Unisystem (Super Mario Bros. bootlegs)
ppu2c04_clone_device::ppu2c04_clone_device(const machine_config& mconfig, const char* tag, device_t* owner, uint32_t clock) :
ppu2c0x_device(mconfig, PPU_2C04C, tag, owner, clock),
- m_palette_data(*this, "palette", 0x100)
+ m_palette_data(*this, "palette")
{
m_scanlines_per_frame = VS_CLONE_SCANLINES_PER_FRAME;
m_vblank_first_scanline = VBLANK_FIRST_SCANLINE_VS_CLONE;
diff --git a/src/devices/video/t6963c.cpp b/src/devices/video/t6963c.cpp
index 215911ed3ff..a853e6d7b00 100644
--- a/src/devices/video/t6963c.cpp
+++ b/src/devices/video/t6963c.cpp
@@ -36,7 +36,7 @@ t6963c_device::t6963c_device(const machine_config &mconfig, const char *tag, dev
: device_t(mconfig, T6963C, tag, owner, clock)
, device_memory_interface(mconfig, *this)
, m_display_config("display", ENDIANNESS_LITTLE, 8, 16, 0)
- , m_cgrom(*this, "cgrom", 0x400)
+ , m_cgrom(*this, "cgrom")
, m_display_ram(nullptr)
, m_data(0)
, m_adp(0)
diff --git a/src/emu/addrmap.cpp b/src/emu/addrmap.cpp
index 604e05ab864..ebc0331a767 100644
--- a/src/emu/addrmap.cpp
+++ b/src/emu/addrmap.cpp
@@ -1148,18 +1148,33 @@ void address_map::map_validity_check(validity_checker &valid, int spacenum) cons
osd_printf_error("In %s memory range %x-%x, mirror %x touches a select bit (%x)\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, entry.m_addrmirror & entry.m_addrselect);
// if this is a program space, auto-assign implicit ROM entries
- if (entry.m_read.m_type == AMH_ROM && entry.m_region == nullptr)
+ if (entry.m_read.m_type == AMH_ROM && entry.m_region == nullptr && spacenum == AS_PROGRAM && entry.m_share == nullptr)
{
entry.m_region = m_device->tag();
entry.m_rgnoffs = entry.m_addrstart;
}
+ // detect conflicts between region and share
+ if (entry.m_region && entry.m_share)
+ osd_printf_error("%s space memory map entry %X-%X has both .region() and .share()\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend);
+
+
+ // Detect inaccesible memory. Region automapping is handled before
+ if (entry.m_read.m_type == AMH_ROM && entry.m_write.m_type != AMH_RAM &&
+ !entry.m_share && !entry.m_region)
+ osd_printf_error("%s space memory map entry %X-%X has .rom() but no .region() or .share()\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend);
+ if (entry.m_read.m_type != AMH_RAM && entry.m_write.m_type == AMH_RAM &&
+ !entry.m_share)
+ osd_printf_error("%s space memory map entry %X-%X has .writeonly() but no .share()\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend);
+
// if this entry references a memory region, validate it
- if (entry.m_region != nullptr && entry.m_share == nullptr)
+ if (entry.m_region != nullptr)
{
// address map entries that reference regions but are NOPs are pointless
- if (entry.m_read.m_type == AMH_NONE && entry.m_write.m_type == AMH_NONE)
- osd_printf_error("%s space references memory region %s, but is noprw()\n", spaceconfig.m_name, entry.m_region);
+ if (entry.m_read.m_type != AMH_ROM && entry.m_read.m_type != AMH_RAM)
+ osd_printf_error("%s space memory map entry %X-%X references memory region %s, but can't read it\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend, entry.m_region);
+ if (entry.m_write.m_type == AMH_RAM)
+ osd_printf_error("%s space memory map entry %X-%X references memory region %s, but wants to write to it\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend, entry.m_region);
// make sure we can resolve the full path to the region
bool found = false;
diff --git a/src/emu/devfind.cpp b/src/emu/devfind.cpp
index b2506e2fce3..a2f9551051a 100644
--- a/src/emu/devfind.cpp
+++ b/src/emu/devfind.cpp
@@ -78,18 +78,8 @@ void *finder_base::find_memregion(u8 width, size_t &length, bool required) const
return nullptr;
}
- // check the length and warn if other than specified
- size_t const length_found = region->bytes() / width;
- if (length != 0 && length != length_found)
- {
- if (required)
- osd_printf_warning("Region '%s' found but has %d bytes, not %d as requested\n", m_tag, region->bytes(), length * width);
- length = 0;
- return nullptr;
- }
-
// return results
- length = length_found;
+ length = region->bytes()/width;
return region->base();
}
@@ -98,7 +88,7 @@ void *finder_base::find_memregion(u8 width, size_t &length, bool required) const
// validate_memregion - find memory region
//-------------------------------------------------
-bool finder_base::validate_memregion(size_t bytes, bool required) const
+bool finder_base::validate_memregion(bool required) const
{
// make sure we can resolve the full path to the region
size_t bytes_found = 0;
@@ -119,13 +109,6 @@ bool finder_base::validate_memregion(size_t bytes, bool required) const
break;
}
- // check the length and warn if other than specified
- if ((bytes_found != 0) && (bytes != 0) && (bytes != bytes_found))
- {
- osd_printf_warning("Region '%s' found but has %d bytes, not %d as requested\n", m_tag, bytes_found, bytes);
- bytes_found = 0;
- }
-
return report_missing(bytes_found != 0, "memory region", required);
}
@@ -274,7 +257,7 @@ template <bool Required>
bool memory_region_finder<Required>::findit(validity_checker *valid)
{
if (valid)
- return this->validate_memregion(0, Required);
+ return this->validate_memregion(Required);
assert(!this->m_resolved);
this->m_resolved = true;
@@ -333,7 +316,6 @@ bool ioport_finder<Required>::findit(validity_checker *valid)
}
-
//**************************************************************************
// ADDRESS SPACE FINDER
//**************************************************************************
@@ -360,6 +342,74 @@ bool address_space_finder<Required>::findit(validity_checker *valid)
}
+//**************************************************************************
+// MEMORY BANK CREATOR
+//**************************************************************************
+
+bool memory_bank_creator::findit(validity_checker *valid)
+{
+ if (valid)
+ return true;
+
+ device_t &dev = m_base.get();
+ memory_manager &manager = dev.machine().memory();
+ std::string tag = dev.subtag(m_tag);
+ memory_bank *bank = manager.bank_find(tag);
+ if (bank)
+ m_target = bank;
+ else
+ m_target = manager.bank_alloc(dev, tag);
+ return true;
+}
+
+void memory_bank_creator::end_configuration()
+{
+ m_target = nullptr;
+}
+
+
+//**************************************************************************
+// MEMORY SHARE CREATOR
+//**************************************************************************
+
+template<typename uX> memory_share_creator<uX>::memory_share_creator(device_t &base, char const *tag, size_t bytes, endianness_t endianness)
+ : finder_base(base, tag)
+ , m_width(sizeof(uX)*8)
+ , m_bytes(bytes)
+ , m_endianness(endianness)
+{
+}
+
+template<typename uX> bool memory_share_creator<uX>::findit(validity_checker *valid)
+{
+ if (valid)
+ return true;
+
+ device_t &dev = m_base.get();
+ memory_manager &manager = dev.machine().memory();
+ std::string tag = dev.subtag(m_tag);
+ memory_share *share = manager.share_find(tag);
+ if (share)
+ {
+ m_target = share;
+ std::string result = share->compare(m_width, m_bytes, m_endianness);
+ if (!result.empty())
+ {
+ osd_printf_error("%s\n", result);
+ return false;
+ }
+ }
+ else
+ m_target = manager.share_alloc(dev, tag, m_width, m_bytes, m_endianness);
+ return true;
+}
+
+template<typename uX> void memory_share_creator<uX>::end_configuration()
+{
+ m_target = nullptr;
+}
+
+
//**************************************************************************
// EXPLICIT TEMPLATE INSTANTIATIONS
@@ -439,3 +489,7 @@ template class shared_ptr_finder<s32, false>;
template class shared_ptr_finder<s32, true>;
template class shared_ptr_finder<s64, false>;
template class shared_ptr_finder<s64, true>;
+template class memory_share_creator<u8>;
+template class memory_share_creator<u16>;
+template class memory_share_creator<u32>;
+template class memory_share_creator<u64>;
diff --git a/src/emu/devfind.h b/src/emu/devfind.h
index 958ae16c3bc..d9e2e95df21 100644
--- a/src/emu/devfind.h
+++ b/src/emu/devfind.h
@@ -356,7 +356,7 @@ protected:
/// it is optional.
/// \return True if the region is optional, or if the region is
/// required and a matching region is found, or false otherwise.
- bool validate_memregion(size_t bytes, bool required) const;
+ bool validate_memregion(bool required) const;
/// \brief Find a memory share
///
@@ -753,6 +753,94 @@ template <unsigned Count, bool Required> using memory_bank_array_finder = object
template <unsigned Count> using optional_memory_bank_array = memory_bank_array_finder<Count, false>;
template <unsigned Count> using required_memory_bank_array = memory_bank_array_finder<Count, true>;
+/// \brief Memory bank creator
+///
+/// Creates a memory bank or picks up an existing one.
+class memory_bank_creator : finder_base
+{
+public:
+ memory_bank_creator(device_t &base, char const *tag) : finder_base(base, tag) { }
+ virtual ~memory_bank_creator() = default;
+
+ /// \brief Get pointer to target bank object
+ /// \return Pointer to target bank object if found, or nullptr otherwise.
+ memory_bank *target() const { return m_target; }
+
+ /// \brief Cast-to-pointer operator
+ ///
+ /// Allows implicit casting to a pointer to the target bank object.
+ /// \return Pointer to target bank object
+ operator memory_bank *() const { return m_target; }
+
+ /// \brief Pointer member access operator
+ ///
+ /// Allows pointer-member-style access to members of the target
+ /// bank object.
+ /// \return Pointer to target bank object
+ memory_bank *operator->() const { return m_target; }
+
+protected:
+ virtual bool findit(validity_checker *valid) override;
+ virtual void end_configuration() override;
+
+ /// \brief Pointer to target object
+ ///
+ /// Pointer to target object, or nullptr if the creation has not been
+ /// attempted yet.
+ memory_bank *m_target = nullptr;
+};
+
+template <unsigned Count> using memory_bank_array_creator = object_array_finder<memory_bank_creator, Count>;
+
+/// \brief Memory share creator
+///
+/// Creates a memory share or picks up an existing one.
+template<typename uX> class memory_share_creator : finder_base
+{
+public:
+ memory_share_creator(device_t &base, char const *tag, size_t bytes, endianness_t endianness);
+ virtual ~memory_share_creator() = default;
+
+ /// \brief Get pointer to the share object
+ /// \return Pointer to share object.
+ memory_share *share() const { return m_target; }
+
+ /// \brief Get pointer to the share object backing ram
+ /// \return Pointer to the ram.
+ uX *ptr() const { return reinterpret_cast<uX *>(m_target->ptr()); }
+
+ /// \brief Cast-to-pointer operator
+ ///
+ /// Allows implicit casting to a pointer to the target bank object.
+ /// \return Pointer to target bank object
+ operator uX *() const { return reinterpret_cast<uX *>(m_target->ptr()); }
+
+ /// \brief Pointer member access operator
+ ///
+ /// Allows pointer-member-style access to members of the target
+ /// bank object.
+ /// \return Pointer to target bank object
+ memory_share *operator->() const { return m_target; }
+
+ size_t bytes() const { return m_target->bytes(); }
+ endianness_t endianness() const { return m_target->endianness(); }
+ u8 bitwidth() const { return m_target->bitwidth(); }
+ u8 bytewidth() const { return m_target->bytewidth(); }
+
+protected:
+ virtual bool findit(validity_checker *valid) override;
+ virtual void end_configuration() override;
+
+ /// \brief Pointer to target object
+ ///
+ /// Pointer to target object, or nullptr if the creation has not been
+ /// attempted yet.
+ memory_share *m_target = nullptr;
+
+ const u8 m_width; // width of the shared region in bits
+ const size_t m_bytes; // size of the shared region in bytes
+ const endianness_t m_endianness; // endianness of the memory
+};
/// \brief I/O port finder template
///
@@ -939,9 +1027,8 @@ public:
/// pointer remains valid until resolution time.
/// \param [in] length Desired memory region length in units of the
/// size of the element type, or zero to match any region length.
- region_ptr_finder(device_t &base, char const *tag, size_t length = 0)
+ region_ptr_finder(device_t &base, char const *tag)
: object_finder_base<PointerType, Required>(base, tag)
- , m_desired_length(length)
, m_length(0)
{
}
@@ -990,21 +1077,15 @@ private:
virtual bool findit(validity_checker *valid) override
{
if (valid)
- return this->validate_memregion(sizeof(PointerType) * m_desired_length, Required);
+ return this->validate_memregion(Required);
assert(!this->m_resolved);
this->m_resolved = true;
- m_length = m_desired_length;
this->m_target = reinterpret_cast<PointerType *>(this->find_memregion(sizeof(PointerType), m_length, Required));
return this->report_missing("memory region");
}
- /// \brief Desired region length
- ///
- /// Desired region length in units of elements.
- size_t const m_desired_length;
-
- /// \brief Matched region length
+ /// \brief Region length
///
/// Actual length of the region that was found in units of
/// elements, or zero if no matching region has been found.
@@ -1043,11 +1124,9 @@ class shared_ptr_finder : public object_finder_base<PointerType, Required>
{
public:
// construction/destruction
- shared_ptr_finder(device_t &base, char const *tag, u8 width = sizeof(PointerType) * 8)
+ shared_ptr_finder(device_t &base, char const *tag)
: object_finder_base<PointerType, Required>(base, tag)
- , m_width(width)
, m_bytes(0)
- , m_allocated(0)
{
}
@@ -1058,19 +1137,6 @@ public:
u32 bytes() const { return m_bytes; }
u32 mask() const { return m_bytes - 1; } // FIXME: wrong when sizeof(PointerType) != 1
- // setter for setting the object
- void set_target(PointerType *target, size_t bytes) { this->m_target = target; m_bytes = bytes; }
-
- // dynamic allocation of a shared pointer
- void allocate(u32 entries)
- {
- assert(!m_allocated);
- m_allocated = std::make_unique<PointerType []>(entries);
- this->m_target = m_allocated.get();
- m_bytes = entries * sizeof(PointerType);
- this->m_base.get().save_pointer(m_allocated, this->m_tag, entries);
- }
-
private:
// finder
virtual bool findit(validity_checker *valid) override
@@ -1080,14 +1146,12 @@ private:
assert(!this->m_resolved);
this->m_resolved = true;
- this->m_target = reinterpret_cast<PointerType *>(this->find_memshare(m_width, m_bytes, Required));
+ this->m_target = reinterpret_cast<PointerType *>(this->find_memshare(sizeof(PointerType)*8, m_bytes, Required));
return this->report_missing("shared pointer");
}
// internal state
- u8 const m_width;
size_t m_bytes;
- std::unique_ptr<PointerType []> m_allocated;
};
template <typename PointerType> using optional_shared_ptr = shared_ptr_finder<PointerType, false>;
diff --git a/src/emu/diimage.cpp b/src/emu/diimage.cpp
index 548281062a3..db890ad3d8c 100644
--- a/src/emu/diimage.cpp
+++ b/src/emu/diimage.cpp
@@ -479,15 +479,14 @@ const char *device_image_interface::get_feature(const char *feature_name) const
// load_software_region -
//-------------------------------------------------
-bool device_image_interface::load_software_region(const char *tag, optional_shared_ptr<u8> &ptr)
+bool device_image_interface::load_software_region(const char *tag, std::unique_ptr<u8[]> &ptr)
{
size_t size = get_software_region_length(tag);
if (size)
{
- ptr.allocate(size);
-
- memcpy(ptr, get_software_region(tag), size);
+ ptr = std::make_unique<u8[]>(size);
+ memcpy(ptr.get(), get_software_region(tag), size);
}
return size > 0;
diff --git a/src/emu/diimage.h b/src/emu/diimage.h
index 2f9421bcf4d..9f67530383f 100644
--- a/src/emu/diimage.h
+++ b/src/emu/diimage.h
@@ -164,8 +164,8 @@ public:
u64 length() { check_for_file(); return m_file->size(); }
bool is_readonly() const noexcept { return m_readonly; }
u32 fread(void *buffer, u32 length) { check_for_file(); return m_file->read(buffer, length); }
- u32 fread(optional_shared_ptr<u8> &ptr, u32 length) { ptr.allocate(length); return fread(ptr.target(), length); }
- u32 fread(optional_shared_ptr<u8> &ptr, u32 length, offs_t offset) { ptr.allocate(length); return fread(ptr + offset, length - offset); }
+ u32 fread(std::unique_ptr<u8[]> &ptr, u32 length) { ptr = std::make_unique<u8[]>(length); return fread(ptr.get(), length); }
+ u32 fread(std::unique_ptr<u8[]> &ptr, u32 length, offs_t offset) { ptr = std::make_unique<u8[]>(length); return fread(ptr.get() + offset, length - offset); }
u32 fwrite(const void *buffer, u32 length) { check_for_file(); return m_file->write(buffer, length); }
int fseek(s64 offset, int whence) { check_for_file(); return m_file->seek(offset, whence); }
u64 ftell() { check_for_file(); return m_file->tell(); }
@@ -191,7 +191,7 @@ public:
u8 *get_software_region(const char *tag);
u32 get_software_region_length(const char *tag);
const char *get_feature(const char *feature_name) const;
- bool load_software_region(const char *tag, optional_shared_ptr<u8> &ptr);
+ bool load_software_region(const char *tag, std::unique_ptr<u8[]> &ptr);
u32 crc();
util::hash_collection& hash() { return m_hash; }
diff --git a/src/emu/dimemory.h b/src/emu/dimemory.h
index 3d43c6a6a4d..ed177882d37 100644
--- a/src/emu/dimemory.h
+++ b/src/emu/dimemory.h
@@ -103,8 +103,6 @@ public:
}
void prepare_maps() { for (auto const &space : m_addrspace) { if (space) { space->prepare_map(); } } }
void populate_from_maps() { for (auto const &space : m_addrspace) { if (space) { space->populate_from_map(); } } }
- void allocate_memory() { for (auto const &space : m_addrspace) { if (space) { space->allocate_memory(); } } }
- void locate_memory() { for (auto const &space : m_addrspace) { if (space) { space->locate_memory(); } } }
void set_log_unmap(bool log) { for (auto const &space : m_addrspace) { if (space) { space->set_log_unmap(log); } } }
protected:
diff --git a/src/emu/dirom.h b/src/emu/dirom.h
index 62566f433d3..c5dd94fedae 100644
--- a/src/emu/dirom.h
+++ b/src/emu/dirom.h
@@ -41,7 +41,7 @@ private:
address_space_config m_rom_config;
typename memory_access<AddrWidth, DataWidth, AddrShift, Endian>::cache m_rom_cache;
- memory_bank *m_bank;
+ memory_bank_creator m_bank;
int m_cur_bank, m_bank_count;
virtual void interface_pre_start() override;
diff --git a/src/emu/dirom.ipp b/src/emu/dirom.ipp
index e552ff87e22..42904bf27fd 100644
--- a/src/emu/dirom.ipp
+++ b/src/emu/dirom.ipp
@@ -6,7 +6,7 @@ device_rom_interface<AddrWidth, DataWidth, AddrShift, Endian>::device_rom_interf
device_memory_interface(mconfig, device),
m_rom_tag(device.basetag()),
m_rom_config("rom", Endian, 8 << DataWidth, AddrWidth, AddrShift),
- m_bank(nullptr),
+ m_bank(device, "bank"),
m_cur_bank(-1)
{
}
@@ -64,9 +64,9 @@ void device_rom_interface<AddrWidth, DataWidth, AddrShift, Endian>::set_rom(cons
m_bank_count = 1;
if(rend >= mend) {
- space().install_read_bank(0, mend, device().tag());
- m_bank = device().machine().memory().banks().find(device().tag())->second.get();
+ space().install_read_bank(0, mend, m_bank);
m_bank->configure_entries(0, m_bank_count, const_cast<void *>(base), mend+1);
+ m_bank->set_entry(0);
m_cur_bank = 0;
} else {
diff --git a/src/emu/emufwd.h b/src/emu/emufwd.h
index bd7d2235a15..b09eb098221 100644
--- a/src/emu/emufwd.h
+++ b/src/emu/emufwd.h
@@ -146,7 +146,6 @@ class driver_device;
// declared in emumem.h
class address_space;
class memory_bank;
-class memory_block;
class memory_manager;
class memory_region;
class memory_share;
diff --git a/src/emu/emumem.cpp b/src/emu/emumem.cpp
index a245c39fd3f..8fb0f0bbe28 100644
--- a/src/emu/emumem.cpp
+++ b/src/emu/emumem.cpp
@@ -30,9 +30,16 @@
// DEBUGGING
//**************************************************************************
-#define VERBOSE (0)
+#define VERBOSE 0
-#define VPRINTF(x) do { if (VERBOSE) printf x; } while (0)
+#if VERBOSE
+template <typename Format, typename... Params> static void VPRINTF(Format &&fmt, Params &&...args)
+{
+ util::stream_format(std::cerr, std::forward<Format>(fmt), std::forward<Params>(args)...);
+}
+#else
+template <typename Format, typename... Params> static void VPRINTF(Format &&, Params &&...) {}
+#endif
#define VALIDATE_REFCOUNTS 0
@@ -269,10 +276,6 @@ template <> struct handler_width<write64s_delegate> { static constexpr int value
template <> struct handler_width<write64sm_delegate> { static constexpr int value = 3; };
template <> struct handler_width<write64mo_delegate> { static constexpr int value = 3; };
template <> struct handler_width<write64smo_delegate> { static constexpr int value = 3; };
-
-// other address map constants
-const int MEMORY_BLOCK_CHUNK = 65536; // minimum chunk size of allocated memory blocks
-
} // anonymous namespace
@@ -307,7 +310,6 @@ public:
void unmap_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite, bool quiet) override;
void install_ram_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite, void *baseptr) override;
- void install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, std::string rtag, std::string wtag) override;
void install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, memory_bank *rbank, memory_bank *wbank) override;
void install_readwrite_port(offs_t addrstart, offs_t addrend, offs_t addrmirror, std::string rtag, std::string wtag) override;
void install_device_delegate(offs_t addrstart, offs_t addrend, device_t &device, address_map_constructor &map, u64 unitmask = 0, int cswidth = 0) override;
@@ -713,11 +715,11 @@ private:
template<int AccessWidth, typename READ> std::enable_if_t<(Width == AccessWidth)>
install_read_handler_helper(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, u64 unitmask, int cswidth, const READ &handler_r)
{
- VPRINTF(("address_space::install_read_handler(%s-%s mask=%s mirror=%s, space width=%d, handler width=%d, %s, %s)\n",
- core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars),
- core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars),
- 8 << Width, 8 << AccessWidth,
- handler_r.name(), core_i64_hex_format(unitmask, data_width() / 4)));
+ VPRINTF("address_space::install_read_handler(%*x-%*x mask=%*x mirror=%*x, space width=%d, handler width=%d, %s, %*x)\n",
+ m_addrchars, addrstart, m_addrchars, addrend,
+ m_addrchars, addrmask, m_addrchars, addrmirror,
+ 8 << Width, 8 << AccessWidth,
+ handler_r.name(), data_width() / 4, unitmask);
offs_t nstart, nend, nmask, nmirror;
u64 nunitmask;
@@ -734,11 +736,11 @@ private:
install_read_handler_helper(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, u64 unitmask, int cswidth,
const READ &handler_r)
{
- VPRINTF(("address_space::install_read_handler(%s-%s mask=%s mirror=%s, space width=%d, handler width=%d, %s, %s)\n",
- core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars),
- core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars),
- 8 << Width, 8 << AccessWidth,
- handler_r.name(), core_i64_hex_format(unitmask, data_width() / 4)));
+ VPRINTF("address_space::install_read_handler(%*x-%*x mask=%*x mirror=%*x, space width=%d, handler width=%d, %s, %*x)\n",
+ m_addrchars, addrstart, m_addrchars, addrend,
+ m_addrchars, addrmask, m_addrchars, addrmirror,
+ 8 << Width, 8 << AccessWidth,
+ handler_r.name(), data_width() / 4, unitmask);
offs_t nstart, nend, nmask, nmirror;
u64 nunitmask;
@@ -765,11 +767,11 @@ private:
install_write_handler_helper(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, u64 unitmask, int cswidth,
const WRITE &handler_w)
{
- VPRINTF(("address_space::install_write_handler(%s-%s mask=%s mirror=%s, space width=%d, handler width=%d, %s, %s)\n",
- core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars),
- core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars),
- 8 << Width, 8 << AccessWidth,
- handler_w.name(), core_i64_hex_format(unitmask, data_width() / 4)));
+ VPRINTF("address_space::install_write_handler(%*x-%*x mask=%*x mirror=%*x, space width=%d, handler width=%d, %s, %*x)\n",
+ m_addrchars, addrstart, m_addrchars, addrend,
+ m_addrchars, addrmask, m_addrchars, addrmirror,
+ 8 << Width, 8 << AccessWidth,
+ handler_w.name(), data_width() / 4, unitmask);
offs_t nstart, nend, nmask, nmirror;
u64 nunitmask;
@@ -786,11 +788,11 @@ private:
install_write_handler_helper(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, u64 unitmask, int cswidth,
const WRITE &handler_w)
{
- VPRINTF(("address_space::install_write_handler(%s-%s mask=%s mirror=%s, space width=%d, handler width=%d, %s, %s)\n",
- core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars),
- core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars),
- 8 << Width, 8 << AccessWidth,
- handler_w.name(), core_i64_hex_format(unitmask, data_width() / 4)));
+ VPRINTF("address_space::install_write_handler(%*x-%*x mask=%*x mirror=%*x, space width=%d, handler width=%d, %s, %*x)\n",
+ m_addrchars, addrstart, m_addrchars, addrend,
+ m_addrchars, addrmask, m_addrchars, addrmirror,
+ 8 << Width, 8 << AccessWidth,
+ handler_w.name(), data_width() / 4, unitmask);
offs_t nstart, nend, nmask, nmirror;
u64 nunitmask;
@@ -820,11 +822,11 @@ private:
const READ &handler_r,
const WRITE &handler_w)
{
- VPRINTF(("address_space::install_readwrite_handler(%s-%s mask=%s mirror=%s, space width=%d, handler width=%d, %s, %s, %s)\n",
- core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars),
- core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars),
- 8 << Width, 8 << AccessWidth,
- handler_r.name(), handler_w.name(), core_i64_hex_format(unitmask, data_width() / 4)));
+ VPRINTF("address_space::install_readwrite_handler(%*x-%*x mask=%*x mirror=%*x, space width=%d, handler width=%d, %s, %s, %*x)\n",
+ m_addrchars, addrstart, m_addrchars, addrend,
+ m_addrchars, addrmask, m_addrchars, addrmirror,
+ 8 << Width, 8 << AccessWidth,
+ handler_r.name(), handler_w.name(), data_width() / 4, unitmask);
offs_t nstart, nend, nmask, nmirror;
u64 nunitmask;
@@ -847,11 +849,11 @@ private:
const READ &handler_r,
const WRITE &handler_w)
{
- VPRINTF(("address_space::install_readwrite_handler(%s-%s mask=%s mirror=%s, space width=%d, handler width=%d, %s, %s, %s)\n",
- core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars),
- core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars),
- 8 << Width, 8 << AccessWidth,
- handler_r.name(), handler_w.name(), core_i64_hex_format(unitmask, data_width() / 4)));
+ VPRINTF("address_space::install_readwrite_handler(%*x-%*x mask=%*x mirror=%*x, space width=%d, handler width=%d, %s, %s, %*x)\n",
+ m_addrchars, addrstart, m_addrchars, addrend,
+ m_addrchars, addrmask, m_addrchars, addrmirror,
+ 8 << Width, 8 << AccessWidth,
+ handler_r.name(), handler_w.name(), data_width() / 4, unitmask);
offs_t nstart, nend, nmask, nmirror;
u64 nunitmask;
@@ -894,9 +896,18 @@ private:
//-------------------------------------------------
memory_manager::memory_manager(running_machine &machine)
- : m_machine(machine),
- m_initialized(false)
+ : m_machine(machine)
+{
+}
+
+//-------------------------------------------------
+// ~memory_manager - free the allocated memory banks
+//-------------------------------------------------
+
+memory_manager::~memory_manager()
{
+ for(void *ptr : m_datablocks)
+ free(ptr);
}
//-------------------------------------------------
@@ -1012,38 +1023,51 @@ void memory_manager::initialize()
for (auto const memory : memories)
memory->populate_from_maps();
- // allocate memory needed to back each address space
- for (auto const memory : memories)
- memory->allocate_memory();
-
- // find all the allocated pointers
- for (auto const memory : memories)
- memory->locate_memory();
-
// disable logging of unmapped access when no one receives it
if (!machine().options().log() && !machine().options().oslog() && !(machine().debug_flags & DEBUG_FLAG_ENABLED))
for (auto const memory : memories)
memory->set_log_unmap(false);
+}
- // we are now initialized
- m_initialized = true;
+
+//-------------------------------------------------
+// allocate_memory - allocate some ram and register it for saving
+//-------------------------------------------------
+
+void *memory_manager::allocate_memory(device_t &dev, int spacenum, std::string name, u8 width, size_t bytes)
+{
+ void *ptr = malloc(bytes);
+ memset(ptr, 0, bytes);
+ m_datablocks.push_back(ptr);
+ machine().save().save_memory(&dev, "memory", dev.tag(), spacenum, name.c_str(), ptr, width/8, (u32)bytes / (width/8));
+ return ptr;
}
+
//-------------------------------------------------
// region_alloc - allocates memory for a region
//-------------------------------------------------
-memory_region *memory_manager::region_alloc(const char *name, u32 length, u8 width, endianness_t endian)
+memory_region *memory_manager::region_alloc(std::string name, u32 length, u8 width, endianness_t endian)
{
- osd_printf_verbose("Region '%s' created\n", name);
// make sure we don't have a region of the same name; also find the end of the list
if (m_regionlist.find(name) != m_regionlist.end())
fatalerror("region_alloc called with duplicate region name \"%s\"\n", name);
// allocate the region
- m_regionlist.emplace(name, std::make_unique<memory_region>(machine(), name, length, width, endian));
- return m_regionlist.find(name)->second.get();
+ return m_regionlist.emplace(name, std::make_unique<memory_region>(machine(), name, length, width, endian)).first->second.get();
+}
+
+
+//-------------------------------------------------
+// region_find - find a region by name
+//-------------------------------------------------
+
+memory_region *memory_manager::region_find(std::string name)
+{
+ auto i = m_regionlist.find(name);
+ return i != m_regionlist.end() ? i->second.get() : nullptr;
}
@@ -1051,61 +1075,82 @@ memory_region *memory_manager::region_alloc(const char *name, u32 length, u8 wid
// region_free - releases memory for a region
//-------------------------------------------------
-void memory_manager::region_free(const char *name)
+void memory_manager::region_free(std::string name)
{
m_regionlist.erase(name);
}
//-------------------------------------------------
-// region_containing - helper to determine if
-// a block of memory is part of a region
+// anonymous_alloc - allocates a anonymousd memory zone
//-------------------------------------------------
-memory_region *memory_manager::region_containing(const void *memory, offs_t bytes) const
+void *memory_manager::anonymous_alloc(address_space &space, size_t bytes, u8 width, offs_t start, offs_t end)
{
- const u8 *data = reinterpret_cast<const u8 *>(memory);
+ std::string name = util::string_format("%x-%x", start, end);
+ return allocate_memory(space.device(), space.spacenum(), name, width, bytes);
+}
- // look through the region list and return the first match
- for (auto &region : m_regionlist)
- if (data >= region.second->base() && (data + bytes) <= region.second->end())
- return region.second.get();
- // didn't find one
- return nullptr;
+//-------------------------------------------------
+// share_alloc - allocates a shared memory zone
+//-------------------------------------------------
+
+memory_share *memory_manager::share_alloc(device_t &dev, std::string name, u8 width, size_t bytes, endianness_t endianness)
+{
+ // make sure we don't have a share of the same name; also find the end of the list
+ if (m_sharelist.find(name) != m_sharelist.end())
+ fatalerror("share_alloc called with duplicate share name \"%s\"\n", name);
+
+ // allocate and register the memory
+ void *ptr = allocate_memory(dev, 0, name, width, bytes);
+
+ // allocate the region
+ return m_sharelist.emplace(name, std::make_unique<memory_share>(name, width, bytes, endianness, ptr)).first->second.get();
}
-memory_bank *memory_manager::find(const char *tag) const
+
+//-------------------------------------------------
+// share_find - find a share by name
+//-------------------------------------------------
+
+memory_share *memory_manager::share_find(std::string name)
{
- auto bank = m_banklist.find(tag);
- if (bank != m_banklist.end())
- return bank->second.get();
- return nullptr;
+ auto i = m_sharelist.find(name);
+ return i != m_sharelist.end() ? i->second.get() : nullptr;
}
-memory_bank *memory_manager::find(address_space &space, offs_t addrstart, offs_t addrend) const
+
+
+//-------------------------------------------------
+// share_alloc - allocates a banking zone
+//-------------------------------------------------
+
+memory_bank *memory_manager::bank_alloc(device_t &device, std::string name)
{
- // try to find an exact match
- for (auto &bank : m_banklist)
- if (bank.second->anonymous() && bank.second->references_space(space, read_or_write::READWRITE) && bank.second->matches_exactly(addrstart, addrend))
- return bank.second.get();
+ // allocate the bank
+ auto const ins = m_banklist.emplace(name, std::make_unique<memory_bank>(device, name));
- // not found
- return nullptr;
+ // make sure we don't have a bank of the same name
+ if (!ins.second)
+ fatalerror("bank_alloc called with duplicate bank name \"%s\"\n", name);
+
+ return ins.first->second.get();
}
-memory_bank *memory_manager::allocate(address_space &space, offs_t addrstart, offs_t addrend, const char *tag)
+
+//-------------------------------------------------
+// bank_find - find a bank by name
+//-------------------------------------------------
+
+memory_bank *memory_manager::bank_find(std::string name)
{
- auto bank = std::make_unique<memory_bank>(space, m_banklist.size(), addrstart, addrend, tag);
- std::string temptag;
- if (tag == nullptr) {
- temptag = string_format("anon_%p", bank.get());
- tag = temptag.c_str();
- }
- m_banklist.emplace(tag, std::move(bank));
- return m_banklist.find(tag)->second.get();
+ auto i = m_banklist.find(name);
+ return i != m_banklist.end() ? i->second.get() : nullptr;
}
+
+
//**************************************************************************
// ADDRESS SPACE CONFIG
//**************************************************************************
@@ -1412,15 +1457,23 @@ void address_space::prepare_map()
{
// if we can't find it, add it to our map
std::string fulltag = entry.m_devbase.subtag(entry.m_share);
- if (m_manager.m_sharelist.find(fulltag) == m_manager.m_sharelist.end())
+ memory_share *share = m_manager.share_find(fulltag);
+ if (!share)
{
- VPRINTF(("Creating share '%s' of length 0x%X\n", fulltag.c_str(), entry.m_addrend + 1 - entry.m_addrstart));
- m_manager.m_sharelist.emplace(fulltag.c_str(), std::make_unique<memory_share>(m_config.data_width(), address_to_byte(entry.m_addrend + 1 - entry.m_addrstart), endianness()));
+ VPRINTF("Creating share '%s' of length 0x%X\n", fulltag.c_str(), entry.m_addrend + 1 - entry.m_addrstart);
+ share = m_manager.share_alloc(m_device, fulltag, m_config.data_width(), address_to_byte(entry.m_addrend + 1 - entry.m_addrstart), endianness());
}
+ else
+ {
+ std::string result = share->compare(m_config.data_width(), address_to_byte(entry.m_addrend + 1 - entry.m_addrstart), endianness());
+ if (!result.empty())
+ fatalerror("%s\n", result);
+ }
+ entry.m_memory = share->ptr();
}
- // if this is a ROM handler without a specified region, attach it to the implicit region
- if (m_spacenum == 0 && entry.m_read.m_type == AMH_ROM && entry.m_region == nullptr)
+ // if this is a ROM handler without a specified region and not shared, attach it to the implicit region
+ if (m_spacenum == AS_PROGRAM && entry.m_read.m_type == AMH_ROM && entry.m_region == nullptr && entry.m_share == nullptr)
{
// make sure it fits within the memory region before doing so, however
if (entry.m_addrend < devregionsize)
@@ -1431,7 +1484,7 @@ void address_space::prepare_map()
}
// validate adjusted addresses against implicit regions
- if (entry.m_region != nullptr && entry.m_share == nullptr)
+ if (entry.m_region != nullptr)
{
// determine full tag
std::string fulltag = entry.m_devbase.subtag(entry.m_region);
@@ -1444,6 +1497,9 @@ void address_space::prepare_map()
// validate the region
if (entry.m_rgnoffs + m_config.addr2byte(entry.m_addrend - entry.m_addrstart + 1) > region->bytes())
fatalerror("device '%s' %s space memory map entry %X-%X extends beyond region \"%s\" size (%X)\n", m_device.tag(), m_name, entry.m_addrstart, entry.m_addrend, entry.m_region, region->bytes());
+
+ if (entry.m_share != nullptr)
+ fatalerror("device '%s' %s space memory map entry %X-%X has both .region() and .share()\n", m_device.tag(), m_name, entry.m_addrstart, entry.m_addrend);
}
// convert any region-relative entries to their memory pointers
@@ -1455,6 +1511,10 @@ void address_space::prepare_map()
// set the memory address
entry.m_memory = m_manager.machine().root_device().memregion(fulltag)->base() + entry.m_rgnoffs;
}
+
+ // allocate anonymous ram when needed
+ if (!entry.m_memory && (entry.m_read.m_type == AMH_RAM || entry.m_write.m_type == AMH_RAM))
+ entry.m_memory = m_manager.anonymous_alloc(*this, address_to_byte(entry.m_addrend + 1 - entry.m_addrstart), m_config.data_width(), entry.m_addrstart, entry.m_addrend);
}
}
@@ -1509,7 +1569,7 @@ void address_space::populate_map_entry(const address_map_entry &entry, read_or_w
// fall through to the RAM case otherwise
case AMH_RAM:
- install_ram_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, readorwrite, nullptr);
+ install_ram_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, readorwrite, entry.m_memory);
break;
case AMH_NOP:
@@ -1641,167 +1701,22 @@ void address_space::populate_map_entry(const address_map_entry &entry, read_or_w
break;
case AMH_BANK:
- install_bank_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmirror,
- (readorwrite == read_or_write::READ) ? entry.m_devbase.subtag(data.m_tag) : "",
- (readorwrite == read_or_write::WRITE) ? entry.m_devbase.subtag(data.m_tag) : "");
+ {
+ std::string tag = entry.m_devbase.subtag(data.m_tag);
+ memory_bank *bank = m_manager.bank_find(tag);
+ if (!bank)
+ bank = m_manager.bank_alloc(entry.m_devbase, tag);
+ install_bank_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmirror,
+ (readorwrite == read_or_write::READ) ? bank : nullptr,
+ (readorwrite == read_or_write::WRITE) ? bank : nullptr);
break;
+ }
case AMH_DEVICE_SUBMAP:
throw emu_fatalerror("Internal mapping error: leftover mapping of '%s'.\n", data.m_tag);
}
}
-//-------------------------------------------------
-// allocate_memory - determine all neighboring
-// address ranges and allocate memory to back
-// them
-//-------------------------------------------------
-
-void address_space::allocate_memory()
-{
- auto &blocklist = m_manager.m_blocklist;
-
- // make a first pass over the memory map and track blocks with hardcoded pointers
- // we do this to make sure they are found by space_find_backing_memory first
- // do it back-to-front so that overrides work correctly
- int tail = blocklist.size();
- for (address_map_entry &entry : m_map->m_entrylist)
- if (entry.m_memory != nullptr)
- blocklist.insert(blocklist.begin() + tail, std::make_unique<memory_block>(*this, entry.m_addrstart, entry.m_addrend, entry.m_memory));
-
- // loop over all blocks just allocated and assign pointers from them
- address_map_entry *unassigned = nullptr;
-
- for (auto memblock = blocklist.begin() + tail; memblock != blocklist.end(); ++memblock)
- unassigned = block_assign_intersecting(memblock->get()->addrstart(), memblock->get()->addrend(), memblock->get()->data());
-
- // if we don't have an unassigned pointer yet, try to find one
- if (unassigned == nullptr)
- unassigned = block_assign_intersecting(~0, 0, nullptr);
-
- // loop until we've assigned all memory in this space
- while (unassigned != nullptr)
- {
- // work in MEMORY_BLOCK_CHUNK-sized chunks
- offs_t curblockstart = unassigned->m_addrstart / MEMORY_BLOCK_CHUNK;
- offs_t curblockend = unassigned->m_addrend / MEMORY_BLOCK_CHUNK;
-
- // loop while we keep finding unassigned blocks in neighboring MEMORY_BLOCK_CHUNK chunks
- bool changed;
- do
- {
- changed = false;
-
- // scan for unmapped blocks in the adjusted map
- for (address_map_entry &entry : m_map->m_entrylist)
- if (entry.m_memory == nullptr && &entry != unassigned && needs_backing_store(entry))
- {
- // get block start/end blocks for this block
- offs_t blockstart = entry.m_addrstart / MEMORY_BLOCK_CHUNK;
- offs_t blockend = entry.m_addrend / MEMORY_BLOCK_CHUNK;
-
- // if we intersect or are adjacent, adjust the start/end
- if (blockstart <= curblockend + 1 && blockend >= curblockstart - 1)
- {
- if (blockstart < curblockstart)
- curblockstart = blockstart, changed = true;
- if (blockend > curblockend)
- curblockend = blockend, changed = true;
- }
- }
- } while (changed);
-
- // we now have a block to allocate; do it
- offs_t curaddrstart = curblockstart * MEMORY_BLOCK_CHUNK;
- offs_t curaddrend = curblockend * MEMORY_BLOCK_CHUNK + (MEMORY_BLOCK_CHUNK - 1);
- auto block = std::make_unique<memory_block>(*this, curaddrstart, curaddrend);
-
- // assign memory that intersected the new block
- unassigned = block_assign_intersecting(curaddrstart, curaddrend, block.get()->data());
- blocklist.push_back(std::move(block));
- }
-}
-
-
-//-------------------------------------------------
-// locate_memory - find all the requested
-// pointers into the final allocated memory
-//-------------------------------------------------
-
-void address_space::locate_memory()
-{
- // once this is done, find the starting bases for the banks
- for (auto &bank : m_manager.banks())
- if (bank.second->base() == nullptr && bank.second->references_space(*this, read_or_write::READWRITE))
- {
- // set the initial bank pointer
- for (address_map_entry &entry : m_map->m_entrylist)
- if (entry.m_addrstart == bank.second->addrstart() && entry.m_memory != nullptr)
- {
- bank.second->set_base(entry.m_memory);
- VPRINTF(("assigned bank '%s' pointer to memory from range %08X-%08X [%p]\n", bank.second->tag(), entry.m_addrstart, entry.m_addrend, entry.m_memory));
- break;
- }
- }
-}
-
-
-
-
-//-------------------------------------------------
-// block_assign_intersecting - find all
-// intersecting blocks and assign their pointers
-//-------------------------------------------------
-
-address_map_entry *address_space::block_assign_intersecting(offs_t addrstart, offs_t addrend, u8 *base)
-{
- address_map_entry *unassigned = nullptr;
-
- // loop over the adjusted map and assign memory to any blocks we can
- for (address_map_entry &entry : m_map->m_entrylist)
- {
- // if we haven't assigned this block yet, see if we have a mapped shared pointer for it
- if (entry.m_memory == nullptr && entry.m_share != nullptr)
- {
- std::string fulltag = entry.m_devbase.subtag(entry.m_share);
- auto share = m_manager.shares().find(fulltag);
- if (share != m_manager.shares().end() && share->second->ptr() != nullptr)
- {
- entry.m_memory = share->second->ptr();
- VPRINTF(("memory range %08X-%08X -> shared_ptr '%s' [%p]\n", entry.m_addrstart, entry.m_addrend, entry.m_share, entry.m_memory));
- }
- else
- {
- VPRINTF(("memory range %08X-%08X -> shared_ptr '%s' but not found\n", entry.m_addrstart, entry.m_addrend, entry.m_share));
- }
- }
-
- // otherwise, look for a match in this block
- if (entry.m_memory == nullptr && entry.m_addrstart >= addrstart && entry.m_addrend <= addrend)
- {
- entry.m_memory = base + m_config.addr2byte(entry.m_addrstart - addrstart);
- VPRINTF(("memory range %08X-%08X -> found in block from %08X-%08X [%p]\n", entry.m_addrstart, entry.m_addrend, addrstart, addrend, entry.m_memory));
- }
-
- // if we're the first match on a shared pointer, assign it now
- if (entry.m_memory != nullptr && entry.m_share != nullptr)
- {
- std::string fulltag = entry.m_devbase.subtag(entry.m_share);
- auto share = m_manager.shares().find(fulltag);
- if (share != m_manager.shares().end() && share->second->ptr() == nullptr)
- {
- share->second->set_ptr(entry.m_memory);
- VPRINTF(("setting shared_ptr '%s' = %p\n", entry.m_share, entry.m_memory));
- }
- }
-
- // keep track of the first unassigned entry
- if (entry.m_memory == nullptr && unassigned == nullptr && needs_backing_store(entry))
- unassigned = &entry;
- }
-
- return unassigned;
-}
memory_passthrough_handler *address_space::install_read_tap(offs_t addrstart, offs_t addrend, offs_t addrmirror, std::string name, std::function<void (offs_t offset, u8 &data, u8 mem_mask)> tap, memory_passthrough_handler *mph)
@@ -1905,11 +1820,11 @@ template<int Level, int Width, int AddrShift, endianness_t Endian> void address_
template<int Level, int Width, int AddrShift, endianness_t Endian> void address_space_specific<Level, Width, AddrShift, Endian>::unmap_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite, bool quiet)
{
- VPRINTF(("address_space::unmap(%s-%s mirror=%s, %s, %s)\n",
- core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars),
- core_i64_hex_format(addrmirror, m_addrchars),
- (readorwrite == read_or_write::READ) ? "read" : (readorwrite == read_or_write::WRITE) ? "write" : (readorwrite == read_or_write::READWRITE) ? "read/write" : "??",
- quiet ? "quiet" : "normal"));
+ VPRINTF("address_space::unmap(%*x-%*x mirror=%*x, %s, %s)\n",
+ m_addrchars, addrstart, m_addrchars, addrend,
+ m_addrchars, addrmirror,
+ (readorwrite == read_or_write::READ) ? "read" : (readorwrite == read_or_write::WRITE) ? "write" : (readorwrite == read_or_write::READWRITE) ? "read/write" : "??",
+ quiet ? "quiet" : "normal");
offs_t nstart, nend, nmask, nmirror;
check_optimize_mirror("unmap_generic", addrstart, addrend, addrmirror, nstart, nend, nmask, nmirror);
@@ -2026,10 +1941,10 @@ template<int Level, int Width, int AddrShift, endianness_t Endian> void address_
template<int Level, int Width, int AddrShift, endianness_t Endian> void address_space_specific<Level, Width, AddrShift, Endian>::install_readwrite_port(offs_t addrstart, offs_t addrend, offs_t addrmirror, std::string rtag, std::string wtag)
{
- VPRINTF(("address_space::install_readwrite_port(%s-%s mirror=%s, read=\"%s\" / write=\"%s\")\n",
- core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars),
- core_i64_hex_format(addrmirror, m_addrchars),
- rtag.empty() ? "(none)" : rtag.c_str(), wtag.empty() ? "(none)" : wtag.c_str()));
+ VPRINTF("address_space::install_readwrite_port(%*x-%*x mirror=%*x, read=\"%s\" / write=\"%s\")\n",
+ m_addrchars, addrstart, m_addrchars, addrend,
+ m_addrchars, addrmirror,
+ rtag.empty() ? "(none)" : rtag.c_str(), wtag.empty() ? "(none)" : wtag.c_str());
offs_t nstart, nend, nmask, nmirror;
check_optimize_mirror("install_readwrite_port", addrstart, addrend, addrmirror, nstart, nend, nmask, nmirror);
@@ -2068,48 +1983,12 @@ template<int Level, int Width, int AddrShift, endianness_t Endian> void address_
// mapping to a particular bank
//-------------------------------------------------
-template<int Level, int Width, int AddrShift, endianness_t Endian> void address_space_specific<Level, Width, AddrShift, Endian>::install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, std::string rtag, std::string wtag)
-{
- VPRINTF(("address_space::install_readwrite_bank(%s-%s mirror=%s, read=\"%s\" / write=\"%s\")\n",
- core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars),
- core_i64_hex_format(addrmirror, m_addrchars),
- rtag.empty() ? "(none)" : rtag.c_str(), wtag.empty() ? "(none)" : wtag.c_str()));
-
- offs_t nstart, nend, nmask, nmirror;
- check_optimize_mirror("install_bank_generic", addrstart, addrend, addrmirror, nstart, nend, nmask, nmirror);
-
- // map the read bank
- if (rtag != "")
- {
- std::string fulltag = device().siblingtag(rtag);
- memory_bank &bank = bank_find_or_allocate(fulltag.c_str(), addrstart, addrend, addrmirror, read_or_write::READ);
-
- auto hand_r = new handler_entry_read_memory_bank<Width, AddrShift, Endian>(this, bank);
- hand_r->set_address_info(nstart, nmask);
- m_root_read->populate(nstart, nend, nmirror, hand_r);
- }
-
- // map the write bank
- if (wtag != "")
- {
- std::string fulltag = device().siblingtag(wtag);
- memory_bank &bank = bank_find_or_allocate(fulltag.c_str(), addrstart, addrend, addrmirror, read_or_write::WRITE);
-
- auto hand_w = new handler_entry_write_memory_bank<Width, AddrShift, Endian>(this, bank);
- hand_w->set_address_info(nstart, nmask);
- m_root_write->populate(nstart, nend, nmirror, hand_w);
- }
-
- invalidate_caches(rtag != "" ? wtag != "" ? read_or_write::READWRITE : read_or_write::READ : read_or_write::WRITE);
-}
-
-
template<int Level, int Width, int AddrShift, endianness_t Endian> void address_space_specific<Level, Width, AddrShift, Endian>::install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, memory_bank *rbank, memory_bank *wbank)
{
- VPRINTF(("address_space::install_readwrite_bank(%s-%s mirror=%s, read=\"%s\" / write=\"%s\")\n",
- core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars),
- core_i64_hex_format(addrmirror, m_addrchars),
- (rbank != nullptr) ? rbank->tag() : "(none)", (wbank != nullptr) ? wbank->tag() : "(none)"));
+ VPRINTF("address_space::install_readwrite_bank(%*x-%*x mirror=%*x, read=\"%s\" / write=\"%s\")\n",
+ m_addrchars, addrstart, m_addrchars, addrend,
+ m_addrchars, addrmirror,
+ (rbank != nullptr) ? rbank->tag() : "(none)", (wbank != nullptr) ? wbank->tag() : "(none)");
offs_t nstart, nend, nmask, nmirror;
check_optimize_mirror("install_bank_generic", addrstart, addrend, addrmirror, nstart, nend, nmask, nmirror);
@@ -2141,11 +2020,11 @@ template<int Level, int Width, int AddrShift, endianness_t Endian> void address_
template<int Level, int Width, int AddrShift, endianness_t Endian> void address_space_specific<Level, Width, AddrShift, Endian>::install_ram_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite, void *baseptr)
{
- VPRINTF(("address_space::install_ram_generic(%s-%s mirror=%s, %s, %p)\n",
- core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars),
- core_i64_hex_format(addrmirror, m_addrchars),
- (readorwrite == read_or_write::READ) ? "read" : (readorwrite == read_or_write::WRITE) ? "write" : (readorwrite == read_or_write::READWRITE) ? "read/write" : "??",
- baseptr));
+ VPRINTF("address_space::install_ram_generic(%s-%s mirror=%s, %s, %p)\n",
+ m_addrchars, addrstart, m_addrchars, addrend,
+ m_addrchars, addrmirror,
+ (readorwrite == read_or_write::READ) ? "read" : (readorwrite == read_or_write::WRITE) ? "write" : (readorwrite == read_or_write::READWRITE) ? "read/write" : "??",
+ baseptr);
offs_t nstart, nend, nmask, nmirror;
check_optimize_mirror("install_ram_generic", addrstart, addrend, addrmirror, nstart, nend, nmask, nmirror);
@@ -2153,39 +2032,7 @@ template<int Level, int Width, int AddrShift, endianness_t Endian> void address_
// map for read
if (readorwrite == read_or_write::READ || readorwrite == read_or_write::READWRITE)
{
- // find a bank and map it
- memory_bank &bank = bank_find_or_allocate(nullptr, addrstart, addrend, addrmirror, read_or_write::READ);
-
- // if we are provided a pointer, set it
- if (baseptr != nullptr)
- bank.set_base(baseptr);
-
- // if we don't have a bank pointer yet, try to find one
- if (bank.base() == nullptr)
- {
- void *backing = find_backing_memory(addrstart, addrend);
- if (backing != nullptr)
- bank.set_base(backing);
- }
-
- // if we still don't have a pointer, and we're past the initialization phase, allocate a new block
- if (bank.base() == nullptr && m_manager.m_initialized)
- {
- if (m_manager.machine().phase() >= machine_phase::RESET)
- fatalerror("Attempted to call install_ram_generic() after initialization time without a baseptr!\n");
- auto block = std::make_unique<memory_block>(*this, addrstart, addrend);
- bank.set_base(block.get()->data());
- m_manager.m_blocklist.push_back(std::move(block));
- }
-
- auto hand_r = new handler_entry_read_memory<Width, AddrShift, Endian>(this);
- if (bank.base())
- hand_r->set_base(static_cast<uX *>(bank.base()));
- else {
- delayed_ref(hand_r);
- bank.add_notifier([this, hand_r](void *base) { hand_r->set_base(static_cast<uX *>(base)); delayed_unref(hand_r); });
- }
-
+ auto hand_r = new handler_entry_read_memory<Width, AddrShift, Endian>(this, baseptr);
hand_r->set_address_info(nstart, nmask);
m_root_read->populate(nstart, nend, nmirror, hand_r);
}
@@ -2193,39 +2040,7 @@ template<int Level, int Width, int AddrShift, endianness_t Endian> void address_
// map for write
if (readorwrite == read_or_write::WRITE || readorwrite == read_or_write::READWRITE)
{
- // find a bank and map it
- memory_bank &bank = bank_find_or_allocate(nullptr, addrstart, addrend, addrmirror, read_or_write::WRITE);
-
- // if we are provided a pointer, set it
- if (baseptr != nullptr)
- bank.set_base(baseptr);
-
- // if we don't have a bank pointer yet, try to find one
- if (bank.base() == nullptr)
- {
- void *backing = find_backing_memory(addrstart, addrend);
- if (backing != nullptr)
- bank.set_base(backing);
- }
-
- // if we still don't have a pointer, and we're past the initialization phase, allocate a new block
- if (bank.base() == nullptr && m_manager.m_initialized)
- {
- if (m_manager.machine().phase() >= machine_phase::RESET)
- fatalerror("Attempted to call install_ram_generic() after initialization time without a baseptr!\n");
- auto block = std::make_unique<memory_block>(*this, address_to_byte(addrstart), address_to_byte_end(addrend));
- bank.set_base(block.get()->data());
- m_manager.m_blocklist.push_back(std::move(block));
- }
-
- auto hand_w = new handler_entry_write_memory<Width, AddrShift, Endian>(this);
- if (bank.base())
- hand_w->set_base(static_cast<uX *>(bank.base()));
- else {
- delayed_ref(hand_w);
- bank.add_notifier([this, hand_w](void *base) { hand_w->set_base(static_cast<uX *>(base)); delayed_unref(hand_w); });
- }
-
+ auto hand_w = new handler_entry_write_memory<Width, AddrShift, Endian>(this, baseptr);
hand_w->set_address_info(nstart, nmask);
m_root_write->populate(nstart, nend, nmirror, hand_w);
}
@@ -2238,76 +2053,6 @@ template<int Level, int Width, int AddrShift, endianness_t Endian> void address_
// MEMORY MAPPING HELPERS
//**************************************************************************
-//-------------------------------------------------
-// find_backing_memory - return a pointer to
-// the base of RAM associated with the given
-// device and offset
-//-------------------------------------------------
-
-void *address_space::find_backing_memory(offs_t addrstart, offs_t addrend)
-{
- VPRINTF(("address_space::find_backing_memory('%s',%s,%08X-%08X) -> ", m_device.tag(), m_name, addrstart, addrend));
-
- if (m_map == nullptr)
- return nullptr;
-
- // look in the address map first, last winning for overrides
- void *result = nullptr;
- for (address_map_entry &entry : m_map->m_entrylist)
- {
- if (entry.m_memory != nullptr && addrstart >= entry.m_addrstart && addrend <= entry.m_addrend)
- {
- VPRINTF(("found in entry %08X-%08X [%p]\n", entry.m_addrstart, entry.m_addrend, (u8 *)entry.m_memory + address_to_byte(addrstart - entry.m_addrstart)));
- result = (u8 *)entry.m_memory + address_to_byte(addrstart - entry.m_addrstart);
- }
- }
- if (result)
- return result;
-
- // if not found there, look in the allocated blocks
- for (auto &block : m_manager.m_blocklist)
- if (block->contains(*this, addrstart, addrend))
- {
- VPRINTF(("found in allocated memory block %08X-%08X [%p]\n", block->addrstart(), block->addrend(), block->data() + address_to_byte(addrstart - block->addrstart())));
- return block->data() + address_to_byte(addrstart - block->addrstart());
- }
-
- VPRINTF(("did not find\n"));
- return nullptr;
-}
-
-
-//-------------------------------------------------
-// space_needs_backing_store - return whether a
-// given memory map entry implies the need of
-// allocating and registering memory
-//-------------------------------------------------
-
-bool address_space::needs_backing_store(const address_map_entry &entry)
-{
- // if we are sharing, and we don't have a pointer yet, create one
- if (entry.m_share != nullptr)
- {
- std::string fulltag = entry.m_devbase.subtag(entry.m_share);
- auto share = m_manager.shares().find(fulltag);
- if (share != m_manager.shares().end() && share->second->ptr() == nullptr)
- return true;
- }
-
- // if we're writing to any sort of bank or RAM, then yes, we do need backing
- if (entry.m_write.m_type == AMH_BANK || entry.m_write.m_type == AMH_RAM)
- return true;
-
- // if we're reading from RAM or from ROM outside of address space 0 or its region, then yes, we do need backing
- memory_region *region = m_manager.machine().root_device().memregion(m_device.tag());
- if (entry.m_read.m_type == AMH_RAM ||
- (entry.m_read.m_type == AMH_ROM && (m_spacenum != 0 || region == nullptr || entry.m_addrstart >= region->bytes())))
- return true;
-
- // all other cases don't need backing
- return false;
-}
-
int address_space::add_change_notifier(std::function<void (read_or_write)> n)
{
int id = m_notifier_id++;
@@ -2327,92 +2072,6 @@ void address_space::remove_change_notifier(int id)
//**************************************************************************
-// BANKING HELPERS
-//**************************************************************************
-
-//-------------------------------------------------
-// bank_find_or_allocate - allocate a new
-// bank, or find an existing one, and return the
-// read/write handler
-//-------------------------------------------------
-
-memory_bank &address_space::bank_find_or_allocate(const char *tag, offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite)
-{
- // adjust the addresses, handling mirrors and such
- offs_t addrmask = ~addrmirror;
- adjust_addresses(addrstart, addrend, addrmask, addrmirror);
-
- // look up the bank by name, or else by byte range
- memory_bank *membank = tag ? m_manager.find(tag) : m_manager.find(*this, addrstart, addrend);
-
- // if we don't have a bank yet, create a new one
- if (!membank)
- membank = m_manager.allocate(*this, addrstart, addrend, tag);
-
- // add a reference for this space
- membank->add_reference(*this, readorwrite);
- return *membank;
-}
-
-
-//**************************************************************************
-// MEMORY BLOCK
-//**************************************************************************
-
-//-------------------------------------------------
-// memory_block - constructor
-//-------------------------------------------------
-
-memory_block::memory_block(address_space &space, offs_t addrstart, offs_t addrend, void *memory)
- : m_machine(space.m_manager.machine()),
- m_space(space),
- m_addrstart(addrstart),
- m_addrend(addrend),
- m_data(reinterpret_cast<u8 *>(memory))
-{
- offs_t const length = space.address_to_byte(addrend + 1 - addrstart);
- VPRINTF(("block_allocate('%s',%s,%08X,%08X,%p)\n", space.device().tag(), space.name(), addrstart, addrend, memory));
-
- // allocate a block if needed
- if (m_data == nullptr)
- {
- if (length < 4096)
- {
- m_allocated.resize(length);
- memset(&m_allocated[0], 0, length);
- m_data = &m_allocated[0];
- }
- else
- {
- m_allocated.resize(length + 0xfff);
- memset(&m_allocated[0], 0, length + 0xfff);
- m_data = reinterpret_cast<u8 *>((reinterpret_cast<uintptr_t>(&m_allocated[0]) + 0xfff) & ~0xfff);
- }
- }
-
- // register for saving, but only if we're not part of a memory region
- if (space.m_manager.region_containing(m_data, length) != nullptr)
- VPRINTF(("skipping save of this memory block as it is covered by a memory region\n"));
- else
- {
- int bytes_per_element = space.data_width() / 8;
- std::string name = string_format("%08x-%08x", addrstart, addrend);
- machine().save().save_memory(&space.device(), "memory", space.device().tag(), space.spacenum(), name.c_str(), m_data, bytes_per_element, (u32)length / bytes_per_element);
- }
-}
-
-
-//-------------------------------------------------
-// memory_block - destructor
-//-------------------------------------------------
-
-memory_block::~memory_block()
-{
-}
-
-
-
-//**************************************************************************
// MEMORY BANK
//**************************************************************************
@@ -2420,27 +2079,13 @@ memory_block::~memory_block()
// memory_bank - constructor
//-------------------------------------------------
-memory_bank::memory_bank(address_space &space, int index, offs_t addrstart, offs_t addrend, const char *tag)
- : m_machine(space.m_manager.machine()),
- m_anonymous(tag == nullptr),
- m_addrstart(addrstart),
- m_addrend(addrend),
+memory_bank::memory_bank(device_t &device, std::string tag)
+ : m_machine(device.machine()),
m_curentry(0)
{
- // generate an internal tag if we don't have one
- if (tag == nullptr)
- {
- m_tag = string_format("~%d~", index);
- m_name = string_format("Internal bank #%d", index);
- }
- else
- {
- m_tag = tag;
- m_name = string_format("Bank '%s'", tag);
- }
-
- if (!m_anonymous && machine().save().registration_allowed())
- machine().save().save_item(&space.device(), "memory", m_tag.c_str(), 0, NAME(m_curentry));
+ m_tag = std::move(tag);
+ m_name = string_format("Bank '%s'", m_tag);
+ machine().save().save_item(&device, "memory", m_tag.c_str(), 0, NAME(m_curentry));
}
@@ -2454,35 +2099,6 @@ memory_bank::~memory_bank()
//-------------------------------------------------
-// references_space - walk the list of references
-// to find a match against the provided space
-// and read/write
-//-------------------------------------------------
-
-bool memory_bank::references_space(const address_space &space, read_or_write readorwrite) const
-{
- for (auto &ref : m_reflist)
- if (ref->matches(space, readorwrite))
- return true;
- return false;
-}
-
-
-//-------------------------------------------------
-// add_reference - add a new reference to the
-// given space
-//-------------------------------------------------
-
-void memory_bank::add_reference(address_space &space, read_or_write readorwrite)
-{
- // if we already have a reference, skip it
- if (references_space(space, readorwrite))
- return;
- m_reflist.push_back(std::make_unique<bank_reference>(space, readorwrite));
-}
-
-
-//-------------------------------------------------
// set_base - set the bank base explicitly
//-------------------------------------------------
@@ -2498,21 +2114,10 @@ void memory_bank::set_base(void *base)
m_curentry = 0;
}
m_entries[m_curentry] = reinterpret_cast<u8 *>(base);
- for(const auto &cb : m_alloc_notifier)
- cb(base);
- m_alloc_notifier.clear();
}
//-------------------------------------------------
-// add_notifier - add a function used to notify when the allocation is done
-//-------------------------------------------------
-void memory_bank::add_notifier(std::function<void (void *)> cb)
-{
- m_alloc_notifier.emplace_back(std::move(cb));
-}
-
-//-------------------------------------------------
// set_entry - set the base to a pre-configured
// entry
//-------------------------------------------------
@@ -2520,8 +2125,6 @@ void memory_bank::add_notifier(std::function<void (void *)> cb)
void memory_bank::set_entry(int entrynum)
{
// validate
- if (m_anonymous)
- throw emu_fatalerror("memory_bank::set_entry called for anonymous bank");
if (entrynum < 0 || entrynum >= int(m_entries.size()))
throw emu_fatalerror("memory_bank::set_entry called with out-of-range entry %d", entrynum);
if (m_entries[entrynum] == nullptr)
@@ -2573,9 +2176,9 @@ void memory_bank::configure_entries(int startentry, int numentries, void *base,
// memory_region - constructor
//-------------------------------------------------
-memory_region::memory_region(running_machine &machine, const char *name, u32 length, u8 width, endianness_t endian)
+memory_region::memory_region(running_machine &machine, std::string name, u32 length, u8 width, endianness_t endian)
: m_machine(machine),
- m_name(name),
+ m_name(std::move(name)),
m_buffer(length),
m_endianness(endian),
m_bitwidth(width * 8),
@@ -2583,3 +2186,17 @@ memory_region::memory_region(running_machine &machine, const char *name, u32 len
{
assert(width == 1 || width == 2 || width == 4 || width == 8);
}
+
+std::string memory_share::compare(u8 width, size_t bytes, endianness_t endianness) const
+{
+ if (width != m_bitwidth)
+ return util::string_format("share %s found with unexpected width (expected %d, found %d)", m_name, width, m_bitwidth);
+ if (bytes != m_bytes)
+ return util::string_format("share %s found with unexpected size (expected %x, found %x)", m_name, bytes, m_bytes);
+ if (endianness != m_endianness && m_bitwidth != 8)
+ return util::string_format("share %s found with unexpected endianness (expected %s, found %s)", m_name,
+ endianness == ENDIANNESS_LITTLE ? "little" : "big",
+ m_endianness == ENDIANNESS_LITTLE ? "little" : "big");
+ return "";
+}
+
diff --git a/src/emu/emumem.h b/src/emu/emumem.h
index 1adfb0332eb..ed8897a2992 100644
--- a/src/emu/emumem.h
+++ b/src/emu/emumem.h
@@ -1372,29 +1372,23 @@ public:
void install_read_port(offs_t addrstart, offs_t addrend, const char *rtag) { install_read_port(addrstart, addrend, 0, rtag); }
void install_write_port(offs_t addrstart, offs_t addrend, const char *wtag) { install_write_port(addrstart, addrend, 0, wtag); }
void install_readwrite_port(offs_t addrstart, offs_t addrend, const char *rtag, const char *wtag) { install_readwrite_port(addrstart, addrend, 0, rtag, wtag); }
- void install_read_bank(offs_t addrstart, offs_t addrend, const char *tag) { install_read_bank(addrstart, addrend, 0, tag); }
- void install_write_bank(offs_t addrstart, offs_t addrend, const char *tag) { install_write_bank(addrstart, addrend, 0, tag); }
- void install_readwrite_bank(offs_t addrstart, offs_t addrend, const char *tag) { install_readwrite_bank(addrstart, addrend, 0, tag); }
void install_read_bank(offs_t addrstart, offs_t addrend, memory_bank *bank) { install_read_bank(addrstart, addrend, 0, bank); }
void install_write_bank(offs_t addrstart, offs_t addrend, memory_bank *bank) { install_write_bank(addrstart, addrend, 0, bank); }
void install_readwrite_bank(offs_t addrstart, offs_t addrend, memory_bank *bank) { install_readwrite_bank(addrstart, addrend, 0, bank); }
- void install_rom(offs_t addrstart, offs_t addrend, void *baseptr = nullptr) { install_rom(addrstart, addrend, 0, baseptr); }
- void install_writeonly(offs_t addrstart, offs_t addrend, void *baseptr = nullptr) { install_writeonly(addrstart, addrend, 0, baseptr); }
- void install_ram(offs_t addrstart, offs_t addrend, void *baseptr = nullptr) { install_ram(addrstart, addrend, 0, baseptr); }
+ void install_rom(offs_t addrstart, offs_t addrend, void *baseptr) { install_rom(addrstart, addrend, 0, baseptr); }
+ void install_writeonly(offs_t addrstart, offs_t addrend, void *baseptr) { install_writeonly(addrstart, addrend, 0, baseptr); }
+ void install_ram(offs_t addrstart, offs_t addrend, void *baseptr) { install_ram(addrstart, addrend, 0, baseptr); }
// install ports, banks, RAM (with mirror/mask)
void install_read_port(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *rtag) { install_readwrite_port(addrstart, addrend, addrmirror, rtag, ""); }
void install_write_port(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *wtag) { install_readwrite_port(addrstart, addrend, addrmirror, "", wtag); }
virtual void install_readwrite_port(offs_t addrstart, offs_t addrend, offs_t addrmirror, std::string rtag, std::string wtag) = 0;
- void install_read_bank(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *tag) { install_bank_generic(addrstart, addrend, addrmirror, tag, ""); }
- void install_write_bank(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *tag) { install_bank_generic(addrstart, addrend, addrmirror, "", tag); }
- void install_readwrite_bank(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *tag) { install_bank_generic(addrstart, addrend, addrmirror, tag, tag); }
void install_read_bank(offs_t addrstart, offs_t addrend, offs_t addrmirror, memory_bank *bank) { install_bank_generic(addrstart, addrend, addrmirror, bank, nullptr); }
void install_write_bank(offs_t addrstart, offs_t addrend, offs_t addrmirror, memory_bank *bank) { install_bank_generic(addrstart, addrend, addrmirror, nullptr, bank); }
void install_readwrite_bank(offs_t addrstart, offs_t addrend, offs_t addrmirror, memory_bank *bank) { install_bank_generic(addrstart, addrend, addrmirror, bank, bank); }
- void install_rom(offs_t addrstart, offs_t addrend, offs_t addrmirror, void *baseptr = nullptr) { install_ram_generic(addrstart, addrend, addrmirror, read_or_write::READ, baseptr); }
- void install_writeonly(offs_t addrstart, offs_t addrend, offs_t addrmirror, void *baseptr = nullptr) { install_ram_generic(addrstart, addrend, addrmirror, read_or_write::WRITE, baseptr); }
- void install_ram(offs_t addrstart, offs_t addrend, offs_t addrmirror, void *baseptr = nullptr) { install_ram_generic(addrstart, addrend, addrmirror, read_or_write::READWRITE, baseptr); }
+ void install_rom(offs_t addrstart, offs_t addrend, offs_t addrmirror, void *baseptr) { install_ram_generic(addrstart, addrend, addrmirror, read_or_write::READ, baseptr); }
+ void install_writeonly(offs_t addrstart, offs_t addrend, offs_t addrmirror, void *baseptr) { install_ram_generic(addrstart, addrend, addrmirror, read_or_write::WRITE, baseptr); }
+ void install_ram(offs_t addrstart, offs_t addrend, offs_t addrmirror, void *baseptr) { install_ram_generic(addrstart, addrend, addrmirror, read_or_write::READWRITE, baseptr); }
// install device memory maps
template <typename T> void install_device(offs_t addrstart, offs_t addrend, T &device, void (T::*map)(address_map &map), u64 unitmask = 0, int cswidth = 0) {
@@ -1594,8 +1588,6 @@ public:
// setup
void prepare_map();
void populate_from_map(address_map *map = nullptr);
- void allocate_memory();
- void locate_memory();
template<int Width, int AddrShift, endianness_t Endian> handler_entry_read_unmapped <Width, AddrShift, Endian> *get_unmap_r() const { return static_cast<handler_entry_read_unmapped <Width, AddrShift, Endian> *>(m_unmap_r); }
template<int Width, int AddrShift, endianness_t Endian> handler_entry_write_unmapped<Width, AddrShift, Endian> *get_unmap_w() const { return static_cast<handler_entry_write_unmapped<Width, AddrShift, Endian> *>(m_unmap_w); }
@@ -1608,13 +1600,8 @@ protected:
void populate_map_entry(const address_map_entry &entry, read_or_write readorwrite);
virtual void unmap_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite, bool quiet) = 0;
virtual void install_ram_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite, void *baseptr) = 0;
- virtual void install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, std::string rtag, std::string wtag) = 0;
virtual void install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, memory_bank *rbank, memory_bank *wbank) = 0;
void adjust_addresses(offs_t &start, offs_t &end, offs_t &mask, offs_t &mirror);
- void *find_backing_memory(offs_t addrstart, offs_t addrend);
- bool needs_backing_store(const address_map_entry &entry);
- memory_bank &bank_find_or_allocate(const char *tag, offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite);
- address_map_entry *block_assign_intersecting(offs_t bytestart, offs_t byteend, u8 *base);
void check_optimize_all(const char *function, int width, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, u64 unitmask, int cswidth, offs_t &nstart, offs_t &nend, offs_t &nmask, offs_t &nmirror, u64 &nunitmask, int &ncswidth);
void check_optimize_mirror(const char *function, offs_t addrstart, offs_t addrend, offs_t addrmirror, offs_t &nstart, offs_t &nend, offs_t &nmask, offs_t &nmirror);
void check_address(const char *function, offs_t addrstart, offs_t addrend);
@@ -1647,93 +1634,22 @@ protected:
};
-// ======================> memory_block
-
-// a memory block is a chunk of RAM associated with a range of memory in a device's address space
-class memory_block
-{
- DISABLE_COPYING(memory_block);
-
-public:
- // construction/destruction
- memory_block(address_space &space, offs_t start, offs_t end, void *memory = nullptr);
- ~memory_block();
-
- // getters
- running_machine &machine() const { return m_machine; }
- offs_t addrstart() const { return m_addrstart; }
- offs_t addrend() const { return m_addrend; }
- u8 *data() const { return m_data; }
-
- // is the given range contained by this memory block?
- bool contains(address_space &space, offs_t addrstart, offs_t addrend) const
- {
- return (&space == &m_space && m_addrstart <= addrstart && m_addrend >= addrend);
- }
-
-private:
- // internal state
- running_machine & m_machine; // need the machine to free our memory
- address_space & m_space; // which address space are we associated with?
- offs_t m_addrstart, m_addrend; // start/end for verifying a match
- u8 * m_data; // pointer to the data for this block
- std::vector<u8> m_allocated; // pointer to the actually allocated block
-};
-
-
// ======================> memory_bank
// a memory bank is a global pointer to memory that can be shared across devices and changed dynamically
class memory_bank
{
- // a bank reference is an entry in a list of address spaces that reference a given bank
- class bank_reference
- {
- public:
- // construction/destruction
- bank_reference(address_space &space, read_or_write readorwrite)
- : m_space(space),
- m_readorwrite(readorwrite) { }
-
- // getters
- address_space &space() const { return m_space; }
-
- // does this reference match the space+read/write combination?
- bool matches(const address_space &space, read_or_write readorwrite) const
- {
- return (&space == &m_space && (readorwrite == read_or_write::READWRITE || readorwrite == m_readorwrite));
- }
-
- private:
- // internal state
- address_space & m_space; // address space that references us
- read_or_write m_readorwrite; // used for read or write?
-
- };
-
public:
// construction/destruction
- memory_bank(address_space &space, int index, offs_t start, offs_t end, const char *tag = nullptr);
+ memory_bank(device_t &device, std::string tag);
~memory_bank();
// getters
running_machine &machine() const { return m_machine; }
int entry() const { return m_curentry; }
- bool anonymous() const { return m_anonymous; }
- offs_t addrstart() const { return m_addrstart; }
void *base() const { return m_entries.empty() ? nullptr : m_entries[m_curentry]; }
- const char *tag() const { return m_tag.c_str(); }
- const char *name() const { return m_name.c_str(); }
-
- // compare a range against our range
- bool matches_exactly(offs_t addrstart, offs_t addrend) const { return (m_addrstart == addrstart && m_addrend == addrend); }
- bool fully_covers(offs_t addrstart, offs_t addrend) const { return (m_addrstart <= addrstart && m_addrend >= addrend); }
- bool is_covered_by(offs_t addrstart, offs_t addrend) const { return (m_addrstart >= addrstart && m_addrend <= addrend); }
- bool straddles(offs_t addrstart, offs_t addrend) const { return (m_addrstart < addrend && m_addrend > addrstart); }
-
- // track and verify address space references to this bank
- bool references_space(const address_space &space, read_or_write readorwrite) const;
- void add_reference(address_space &space, read_or_write readorwrite);
+ const std::string &tag() const { return m_tag; }
+ const std::string &name() const { return m_name; }
// set the base explicitly
void set_base(void *base);
@@ -1742,20 +1658,14 @@ public:
void configure_entry(int entrynum, void *base);
void configure_entries(int startentry, int numentries, void *base, offs_t stride);
void set_entry(int entrynum);
- void add_notifier(std::function<void (void *)> cb);
private:
// internal state
running_machine & m_machine; // need the machine to free our memory
std::vector<u8 *> m_entries; // the entries
- bool m_anonymous; // are we anonymous or explicit?
- offs_t m_addrstart; // start offset
- offs_t m_addrend; // end offset
int m_curentry; // current entry
std::string m_name; // friendly name for this bank
std::string m_tag; // tag for this bank
- std::vector<std::unique_ptr<bank_reference>> m_reflist; // list of address spaces referencing this bank
- std::vector<std::function<void (void *)>> m_alloc_notifier; // list of notifier targets when allocating
};
@@ -1766,26 +1676,28 @@ class memory_share
{
public:
// construction/destruction
- memory_share(u8 width, size_t bytes, endianness_t endianness, void *ptr = nullptr)
- : m_ptr(ptr),
- m_bytes(bytes),
- m_endianness(endianness),
- m_bitwidth(width),
- m_bytewidth(width <= 8 ? 1 : width <= 16 ? 2 : width <= 32 ? 4 : 8)
+ memory_share(std::string name, u8 width, size_t bytes, endianness_t endianness, void *ptr)
+ : m_name(name),
+ m_ptr(ptr),
+ m_bytes(bytes),
+ m_endianness(endianness),
+ m_bitwidth(width),
+ m_bytewidth(width <= 8 ? 1 : width <= 16 ? 2 : width <= 32 ? 4 : 8)
{ }
// getters
+ const std::string &name() const { return m_name; }
void *ptr() const { return m_ptr; }
size_t bytes() const { return m_bytes; }
endianness_t endianness() const { return m_endianness; }
u8 bitwidth() const { return m_bitwidth; }
u8 bytewidth() const { return m_bytewidth; }
- // setters
- void set_ptr(void *ptr) { m_ptr = ptr; }
+ std::string compare(u8 width, size_t bytes, endianness_t endianness) const;
private:
// internal state
+ std::string m_name; // share name
void * m_ptr; // pointer to the memory backing the region
size_t m_bytes; // size of the shared region in bytes
endianness_t m_endianness; // endianness of the memory
@@ -1801,18 +1713,16 @@ private:
class memory_region
{
DISABLE_COPYING(memory_region);
-
- friend class memory_manager;
public:
// construction/destruction
- memory_region(running_machine &machine, const char *name, u32 length, u8 width, endianness_t endian);
+ memory_region(running_machine &machine, std::string name, u32 length, u8 width, endianness_t endian);
// getters
running_machine &machine() const { return m_machine; }
u8 *base() { return (m_buffer.size() > 0) ? &m_buffer[0] : nullptr; }
u8 *end() { return base() + m_buffer.size(); }
u32 bytes() const { return m_buffer.size(); }
- const char *name() const { return m_name.c_str(); }
+ const std::string &name() const { return m_name; }
// flag expansion
endianness_t endianness() const { return m_endianness; }
@@ -1844,39 +1754,53 @@ class memory_manager
{
friend class address_space;
template<int Level, int Width, int AddrShift, endianness_t Endian> friend class address_space_specific;
- friend memory_region::memory_region(running_machine &machine, const char *name, u32 length, u8 width, endianness_t endian);
public:
// construction/destruction
memory_manager(running_machine &machine);
+ ~memory_manager();
+
+ // initialize the memory spaces from the memory maps of the devices
void initialize();
// getters
running_machine &machine() const { return m_machine; }
+
+ // used for the debugger interface memory views
const std::unordered_map<std::string, std::unique_ptr<memory_bank>> &banks() const { return m_banklist; }
const std::unordered_map<std::string, std::unique_ptr<memory_region>> &regions() const { return m_regionlist; }
const std::unordered_map<std::string, std::unique_ptr<memory_share>> &shares() const { return m_sharelist; }
- // regions
- memory_region *region_alloc(const char *name, u32 length, u8 width, endianness_t endian);
- void region_free(const char *name);
- memory_region *region_containing(const void *memory, offs_t bytes) const;
+ // anonymous memory zones
+ void *anonymous_alloc(address_space &space, size_t bytes, u8 width, offs_t start, offs_t end);
- memory_bank *find(const char *tag) const;
- memory_bank *find(address_space &space, offs_t addrstart, offs_t addrend) const;
- memory_bank *allocate(address_space &space, offs_t addrstart, offs_t addrend, const char *tag = nullptr);
+ // shares
+ memory_share *share_alloc(device_t &dev, std::string name, u8 width, size_t bytes, endianness_t endianness);
+ memory_share *share_find(std::string name);
-private:
- void allocate(device_memory_interface &memory);
+ // banks
+ memory_bank *bank_alloc(device_t &device, std::string tag);
+ memory_bank *bank_find(std::string tag);
+ // regions
+ memory_region *region_alloc(std::string name, u32 length, u8 width, endianness_t endian);
+ memory_region *region_find(std::string name);
+ void region_free(std::string name);
+
+private:
// internal state
running_machine & m_machine; // reference to the machine
- bool m_initialized; // have we completed initialization?
-
- std::vector<std::unique_ptr<memory_block>> m_blocklist; // head of the list of memory blocks
+ std::vector<void *> m_datablocks; // list of memory blocks to free on exit
std::unordered_map<std::string, std::unique_ptr<memory_bank>> m_banklist; // data gathered for each bank
std::unordered_map<std::string, std::unique_ptr<memory_share>> m_sharelist; // map for share lookups
std::unordered_map<std::string, std::unique_ptr<memory_region>> m_regionlist; // list of memory regions
+
+
+ // Allocate the address spaces
+ void allocate(device_memory_interface &memory);
+
+ // Allocate some ram and register it for saving
+ void *allocate_memory(device_t &dev, int spacenum, std::string name, u8 width, size_t bytes);
};
diff --git a/src/emu/emumem_hem.h b/src/emu/emumem_hem.h
index 1d076ebc51b..f3650328854 100644
--- a/src/emu/emumem_hem.h
+++ b/src/emu/emumem_hem.h
@@ -11,14 +11,12 @@ public:
using uX = typename emu::detail::handler_entry_size<Width>::uX;
using inh = handler_entry_read_address<Width, AddrShift, Endian>;
- handler_entry_read_memory(address_space *space) : handler_entry_read_address<Width, AddrShift, Endian>(space, 0) {}
+ handler_entry_read_memory(address_space *space, void *base) : handler_entry_read_address<Width, AddrShift, Endian>(space, 0), m_base(reinterpret_cast<uX *>(base)) {}
~handler_entry_read_memory() = default;
uX read(offs_t offset, uX mem_mask) const override;
void *get_ptr(offs_t offset) const override;
- inline void set_base(uX *base) { m_base = base; }
-
std::string name() const override;
private:
@@ -31,14 +29,12 @@ public:
using uX = typename emu::detail::handler_entry_size<Width>::uX;
using inh = handler_entry_write_address<Width, AddrShift, Endian>;
- handler_entry_write_memory(address_space *space) : handler_entry_write_address<Width, AddrShift, Endian>(space, 0) {}
+ handler_entry_write_memory(address_space *space, void *base) : handler_entry_write_address<Width, AddrShift, Endian>(space, 0), m_base(reinterpret_cast<uX *>(base)) {}
~handler_entry_write_memory() = default;
void write(offs_t offset, uX data, uX mem_mask) const override;
void *get_ptr(offs_t offset) const override;
- inline void set_base(uX *base) { m_base = base; }
-
std::string name() const override;
private:
diff --git a/src/emu/romload.cpp b/src/emu/romload.cpp
index a728a6a7660..b3b90ebbcf7 100644
--- a/src/emu/romload.cpp
+++ b/src/emu/romload.cpp
@@ -1278,8 +1278,8 @@ void rom_load_manager::load_software_part_region(device_t &device, software_list
machine().memory().region_free(memregion->name());
}
- // remember the base and length
- m_region = machine().memory().region_alloc(regiontag.c_str(), regionlength, width, endianness);
+ /* remember the base and length */
+ m_region = machine().memory().region_alloc(regiontag, regionlength, width, endianness);
LOG("Allocated %X bytes @ %p\n", m_region->bytes(), m_region->base());
if (ROMREGION_ISERASE(region)) // clear the region if it's requested
diff --git a/src/mame/audio/bally.cpp b/src/mame/audio/bally.cpp
index fbe8453f795..7b5cdf494b3 100644
--- a/src/mame/audio/bally.cpp
+++ b/src/mame/audio/bally.cpp
@@ -491,7 +491,6 @@ TIMER_CALLBACK_MEMBER(bally_cheap_squeak_device::sound_int_sync)
void bally_cheap_squeak_device::cheap_squeak_map(address_map &map)
{
map.unmap_value_high();
- map(0x0080, 0x00ff).ram();
map(0x8000, 0x9fff).mirror(0x2000).rom();
map(0xc000, 0xdfff).mirror(0x2000).rom();
}
diff --git a/src/mame/audio/dcs.cpp b/src/mame/audio/dcs.cpp
index 3932d430f68..8ce7402b59e 100644
--- a/src/mame/audio/dcs.cpp
+++ b/src/mame/audio/dcs.cpp
@@ -706,8 +706,8 @@ dcs_audio_device::dcs_audio_device(const machine_config &mconfig, device_type ty
m_sounddata_bank(0),
m_ram_map(*this, "data_map_bank"),
m_data_bank(*this, "databank"),
- m_rom_page(nullptr),
- m_dram_page(nullptr),
+ m_rom_page(*this, "rompage"),
+ m_dram_page(*this, "drampage"),
m_auto_ack(0),
m_latch_control(0),
m_input_data(0),
@@ -1051,16 +1051,14 @@ void dcs_audio_device::sdrc_remap_memory()
{
int baseaddr = (SDRC_ROM_ST == 0) ? 0x0000 : (SDRC_ROM_ST == 1) ? 0x3000 : 0x3400;
int pagesize = (SDRC_ROM_SZ == 0 && SDRC_ROM_ST != 0) ? 4096 : 1024;
- m_data->install_read_bank(baseaddr, baseaddr + pagesize - 1, "rompage");
- m_rom_page = membank("rompage");
+ m_data->install_read_bank(baseaddr, baseaddr + pagesize - 1, m_rom_page);
}
/* map the DRAM page as bank 26 */
if (SDRC_DM_ST != 0)
{
int baseaddr = (SDRC_DM_ST == 1) ? 0x0000 : (SDRC_DM_ST == 2) ? 0x3000 : 0x3400;
- m_data->install_readwrite_bank(baseaddr, baseaddr + 0x3ff, "drampage");
- m_dram_page = membank("drampage");
+ m_data->install_readwrite_bank(baseaddr, baseaddr + 0x3ff, m_dram_page);
}
/* update the bank pointers */
diff --git a/src/mame/audio/dcs.h b/src/mame/audio/dcs.h
index 719e9d87a8b..0cebee16dec 100644
--- a/src/mame/audio/dcs.h
+++ b/src/mame/audio/dcs.h
@@ -199,8 +199,8 @@ protected:
optional_device<address_map_bank_device> m_ram_map;
optional_memory_bank m_data_bank;
- memory_bank * m_rom_page;
- memory_bank * m_dram_page;
+ memory_bank_creator m_rom_page;
+ memory_bank_creator m_dram_page;
/* I/O with the host */
uint8_t m_auto_ack;
diff --git a/src/mame/audio/mario.cpp b/src/mame/audio/mario.cpp
index 1bdf1822bcd..a97abfdcf79 100644
--- a/src/mame/audio/mario.cpp
+++ b/src/mame/audio/mario.cpp
@@ -428,7 +428,7 @@ void mario_state::sound_start()
{
m_eabank = "bank1";
- m_audiocpu->space(AS_PROGRAM).install_read_bank(0x000, 0x7ff, "bank1");
+ m_audiocpu->space(AS_PROGRAM).install_read_bank(0x000, 0x7ff, membank("bank1"));
membank("bank1")->configure_entry(0, &SND[0]);
membank("bank1")->configure_entry(1, &SND[0x1000]);
@@ -609,7 +609,7 @@ void mario_state::mario_sh3_w(offs_t offset, uint8_t data)
void mario_state::mario_sound_map(address_map &map)
{
- map(0x0000, 0x07ff).bankr("bank1").region("audiocpu", 0);
+ map(0x0000, 0x07ff).bankr("bank1");
map(0x0800, 0x0fff).rom();
}
diff --git a/src/mame/audio/pinsnd88.cpp b/src/mame/audio/pinsnd88.cpp
index 5e26d397e56..796174a8548 100644
--- a/src/mame/audio/pinsnd88.cpp
+++ b/src/mame/audio/pinsnd88.cpp
@@ -155,7 +155,7 @@ void pinsnd88_device::pinsnd88_map(address_map &map)
map(0x3400, 0x3400).mirror(0x03ff).r(m_inputlatch, FUNC(generic_latch_8_device::read));
map(0x3800, 0x3800).mirror(0x03ff).w(FUNC(pinsnd88_device::bgbank_w));
map(0x3c00, 0x3c00).mirror(0x03ff).w(FUNC(pinsnd88_device::sync_w));
- map(0x4000, 0xbfff).bankr("bank").region("cpu", 0); // banked rom
+ map(0x4000, 0xbfff).bankr("bank"); // banked rom
map(0xc000, 0xffff).rom().region("cpu",0x3c000); // fixed bank
}
diff --git a/src/mame/drivers/3do.cpp b/src/mame/drivers/3do.cpp
index 21c83a4d497..e621c2a9bde 100644
--- a/src/mame/drivers/3do.cpp
+++ b/src/mame/drivers/3do.cpp
@@ -108,7 +108,7 @@ Part list of Goldstar 3DO Interactive Multiplayer
void _3do_state::main_mem(address_map &map)
{
- map(0x00000000, 0x001FFFFF).bankrw(m_bank1).share(m_dram); /* DRAM */
+ map(0x00000000, 0x001FFFFF).bankrw(m_bank1); /* DRAM */
map(0x00200000, 0x003FFFFF).ram().share(m_vram); /* VRAM */
map(0x03000000, 0x030FFFFF).rom().region("bios", 0); /* BIOS */
map(0x03100000, 0x0313FFFF).ram(); /* Brooktree? */
diff --git a/src/mame/drivers/4enlinea.cpp b/src/mame/drivers/4enlinea.cpp
index 4e9fc05ef40..9c5e6d32d37 100644
--- a/src/mame/drivers/4enlinea.cpp
+++ b/src/mame/drivers/4enlinea.cpp
@@ -333,7 +333,7 @@ void isa8_cga_4enlinea_device::device_start()
//m_isa->install_device(0x3bf, 0x3bf, 0, 0, nullptr, write8_delegate(*this, FUNC(isa8_cga_4enlinea_device::_4enlinea_mode_control_w)));
m_isa->install_device(0x3d0, 0x3df, read8sm_delegate(*this, FUNC(isa8_cga_4enlinea_device::_4enlinea_io_read)), write8sm_delegate(*this, FUNC(isa8_cga_device::io_write)));
- m_isa->install_bank(0x8000, 0xbfff, "bank1", &m_vram[0]);
+ m_isa->install_bank(0x8000, 0xbfff, &m_vram[0]);
// Initialise the CGA palette
int i;
diff --git a/src/mame/drivers/8080bw.cpp b/src/mame/drivers/8080bw.cpp
index 28cd39bc228..21be1a32d1d 100644
--- a/src/mame/drivers/8080bw.cpp
+++ b/src/mame/drivers/8080bw.cpp
@@ -2226,7 +2226,7 @@ void _8080bw_state::yosakdon_map(address_map &map)
{
map(0x0000, 0x1fff).rom();
map(0x2000, 0x3fff).ram().share("main_ram");
- map(0x4000, 0x43ff).writeonly(); /* what's this? */
+ map(0x4000, 0x43ff).nopw(); /* what's this? */
}
void _8080bw_state::yosakdon_io_map(address_map &map)
diff --git a/src/mame/drivers/a5105.cpp b/src/mame/drivers/a5105.cpp
index 3525ce5b51d..1da08b80a1a 100644
--- a/src/mame/drivers/a5105.cpp
+++ b/src/mame/drivers/a5105.cpp
@@ -287,12 +287,12 @@ void a5105_state::a5105_memsel_w(uint8_t data)
{
case 0:
membank("bank1")->set_base(m_rom_base);
- prog.install_read_bank(0x0000, 0x3fff, "bank1");
+ prog.install_read_bank(0x0000, 0x3fff, membank("bank1"));
prog.unmap_write(0x0000, 0x3fff);
break;
case 2:
membank("bank1")->set_base(m_ram_base);
- prog.install_readwrite_bank(0x0000, 0x3fff, "bank1");
+ prog.install_readwrite_bank(0x0000, 0x3fff, membank("bank1"));
break;
default:
prog.unmap_readwrite(0x0000, 0x3fff);
@@ -308,17 +308,17 @@ void a5105_state::a5105_memsel_w(uint8_t data)
{
case 0:
membank("bank2")->set_base(m_rom_base + 0x4000);
- prog.install_read_bank(0x4000, 0x7fff, "bank2");
+ prog.install_read_bank(0x4000, 0x7fff, membank("bank2"));
prog.unmap_write(0x4000, 0x4000);
break;
case 1:
membank("bank2")->set_base(memregion("k5651")->base());
- prog.install_read_bank(0x4000, 0x7fff, "bank2");
+ prog.install_read_bank(0x4000, 0x7fff, membank("bank2"));
prog.unmap_write(0x4000, 0x4000);
break;
case 2:
membank("bank2")->set_base(m_ram_base + 0x4000);
- prog.install_readwrite_bank(0x4000, 0x7fff, "bank2");
+ prog.install_readwrite_bank(0x4000, 0x7fff, membank("bank2"));
break;
default:
prog.unmap_readwrite(0x4000, 0x7fff);
@@ -334,12 +334,12 @@ void a5105_state::a5105_memsel_w(uint8_t data)
{
case 0:
membank("bank3")->set_base(m_rom_base + 0x8000);
- prog.install_read_bank(0x8000, 0xbfff, "bank3");
+ prog.install_read_bank(0x8000, 0xbfff, membank("bank3"));
prog.unmap_write(0x8000, 0xbfff);
break;
case 2:
membank("bank3")->set_base(m_ram_base + 0x8000);
- prog.install_readwrite_bank(0x8000, 0xbfff, "bank3");
+ prog.install_readwrite_bank(0x8000, 0xbfff, membank("bank3"));
break;
default:
prog.unmap_readwrite(0x8000, 0xbfff);
@@ -355,7 +355,7 @@ void a5105_state::a5105_memsel_w(uint8_t data)
{
case 2:
membank("bank4")->set_base(m_ram_base + 0xc000);
- prog.install_readwrite_bank(0xc000, 0xffff, "bank4");
+ prog.install_readwrite_bank(0xc000, 0xffff, membank("bank4"));
break;
default:
prog.unmap_readwrite(0xc000, 0xffff);
diff --git a/src/mame/drivers/a7150.cpp b/src/mame/drivers/a7150.cpp
index 92a3327b452..70831508053 100644
--- a/src/mame/drivers/a7150.cpp
+++ b/src/mame/drivers/a7150.cpp
@@ -340,18 +340,18 @@ void a7150_state::k7070_cpu_banked(address_map &map)
map.unmap_value_high();
// default map: IML=0, MSEL=0. ROM + local RAM.
map(0x00000, 0x01fff).rom().region("user2", 0);
- map(0x02000, 0x07fff).bankrw("kgs_ram1");
- map(0x08000, 0x0ffff).bankrw("kgs_ram2");
+ map(0x02000, 0x07fff).ram().share("kgs_ram1");
+ map(0x08000, 0x0ffff).ram().share("kgs_ram2");
// IML=1, MSEL=0. local RAM only.
- map(0x10000, 0x11fff).bankrw("kgs_ram0");
- map(0x12000, 0x17fff).bankrw("kgs_ram1");
- map(0x18000, 0x1ffff).bankrw("kgs_ram2");
+ map(0x10000, 0x11fff).ram().share("kgs_ram0");
+ map(0x12000, 0x17fff).ram().share("kgs_ram1");
+ map(0x18000, 0x1ffff).ram().share("kgs_ram2");
// IML=0, MSEL=1. ROM + local RAM.
map(0x20000, 0x21fff).rom().region("user2", 0);
- map(0x22000, 0x27fff).bankrw("kgs_ram1");
+ map(0x22000, 0x27fff).ram().share("kgs_ram1");
// IML=1, MSEL=1. local RAM only.
- map(0x30000, 0x31fff).bankrw("kgs_ram0");
- map(0x32000, 0x37fff).bankrw("kgs_ram1");
+ map(0x30000, 0x31fff).ram().share("kgs_ram0");
+ map(0x32000, 0x37fff).ram().share("kgs_ram1");
map(0x38000, 0x3ffff).ram().share("video_ram");
}
diff --git a/src/mame/drivers/aeroboto.cpp b/src/mame/drivers/aeroboto.cpp
index 7957ef66f23..1a06e99ff86 100644
--- a/src/mame/drivers/aeroboto.cpp
+++ b/src/mame/drivers/aeroboto.cpp
@@ -84,7 +84,7 @@ void aeroboto_state::main_map(address_map &map)
map(0x0000, 0x07ff).ram().share("mainram"); // main RAM
map(0x01a2, 0x01a2).w(FUNC(aeroboto_state::aeroboto_1a2_w)); // affects IRQ line (more protection?)
map(0x0800, 0x08ff).ram(); // tile color buffer; copied to 0x2000
- map(0x0900, 0x09ff).writeonly(); // a backup of default tile colors
+ map(0x0900, 0x09ff).writeonly().share("colors2"); // a backup of default tile colors
map(0x1000, 0x17ff).ram().w(FUNC(aeroboto_state::aeroboto_videoram_w)).share("videoram"); // tile RAM
map(0x1800, 0x183f).ram().share("hscroll"); // horizontal scroll regs
map(0x1840, 0x27ff).nopw(); // cleared during custom LSI test
diff --git a/src/mame/drivers/alphasma.cpp b/src/mame/drivers/alphasma.cpp
index ce5f8bcdf9e..3eb07232fa5 100644
--- a/src/mame/drivers/alphasma.cpp
+++ b/src/mame/drivers/alphasma.cpp
@@ -209,7 +209,7 @@ void asma2k_state::port_a_w(uint8_t data)
address_space &space = m_maincpu->space(AS_PROGRAM);
if (data & 0x40)
- space.install_readwrite_bank(0x0000, 0x7fff, "rambank");
+ space.install_readwrite_bank(0x0000, 0x7fff, m_rambank);
else
space.install_readwrite_handler(0x0000, 0x7fff, read8sm_delegate(*this, FUNC(asma2k_state::io_r)), write8sm_delegate(*this, FUNC(asma2k_state::io_w)));
}
diff --git a/src/mame/drivers/amiga.cpp b/src/mame/drivers/amiga.cpp
index 16db6a5718b..4a28f17e2bb 100644
--- a/src/mame/drivers/amiga.cpp
+++ b/src/mame/drivers/amiga.cpp
@@ -793,7 +793,7 @@ void a1000_state::machine_reset()
// bootrom visible, wom writable
m_bootrom->set_bank(0);
- m_maincpu->space(AS_PROGRAM).install_write_bank(0xfc0000, 0xffffff, "wom");
+ m_maincpu->space(AS_PROGRAM).install_write_bank(0xfc0000, 0xffffff, m_wom);
}
// any write to this area will write protect the wom and disable the bootrom
diff --git a/src/mame/drivers/apc.cpp b/src/mame/drivers/apc.cpp
index cf3686b1730..09b740343e7 100644
--- a/src/mame/drivers/apc.cpp
+++ b/src/mame/drivers/apc.cpp
@@ -87,6 +87,7 @@ public:
m_fdc_connector(*this, "upd765:%u", 0U),
m_dmac(*this, "i8237"),
m_pit(*this, "pit8253"),
+ m_aux_pcg(*this, "aux_pcg"),
m_speaker(*this, "mono"),
m_sound(*this, "upd1771c"),
m_video_ram_1(*this, "video_ram_1"),
@@ -115,8 +116,8 @@ private:
required_device_array<floppy_connector, 2> m_fdc_connector;
required_device<am9517a_device> m_dmac;
required_device<pit8253_device> m_pit;
+ required_shared_ptr<uint8_t> m_aux_pcg;
uint8_t *m_char_rom;
- uint8_t *m_aux_pcg;
required_device<speaker_device> m_speaker;
required_device<upd1771c_device> m_sound;
@@ -185,7 +186,6 @@ private:
void apc_state::video_start()
{
m_char_rom = memregion("gfx")->base();
- m_aux_pcg = memregion("aux_pcg")->base();
}
uint32_t apc_state::screen_update( screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect )
@@ -478,7 +478,7 @@ void apc_state::apc_map(address_map &map)
map(0xa0000, 0xa0fff).ram().share("cmos");
// map(0xa1000, 0xbffff) mirror CMOS
// map(0xc0000, 0xcffff) standard character ROM
- map(0xd8000, 0xd9fff).ram().region("aux_pcg", 0); // AUX character RAM
+ map(0xd8000, 0xd9fff).ram().share("aux_pcg"); // AUX character RAM
// map(0xe0000, 0xeffff) Special Character RAM
map(0xfe000, 0xfffff).rom().region("ipl", 0);
}
@@ -791,7 +791,6 @@ static GFXDECODE_START( gfx_apc )
GFXDECODE_ENTRY( "gfx", 0x0800, charset_8x16, 0, 128 )
GFXDECODE_ENTRY( "gfx", 0x1000, charset_8x16, 0, 128 )
GFXDECODE_ENTRY( "gfx", 0x1800, charset_8x16, 0, 128 )
-// GFXDECODE_ENTRY( "aux_pcg", 0x0000, charset_pcg, 0, 128 )
GFXDECODE_END
@@ -1000,8 +999,6 @@ ROM_START( apc )
ROM_REGION( 0x2000, "gfx", ROMREGION_ERASE00 )
ROM_LOAD("pfcu1r.bin", 0x000000, 0x002000, CRC(683efa94) SHA1(43157984a1746b2e448f3236f571011af9a3aa73) )
-
- ROM_REGION16_LE( 0x2000, "aux_pcg", ROMREGION_ERASE00 )
ROM_END
void apc_state::init_apc()
diff --git a/src/mame/drivers/apple2gs.cpp b/src/mame/drivers/apple2gs.cpp
index 6b12a1f9962..0dcb3c76e21 100644
--- a/src/mame/drivers/apple2gs.cpp
+++ b/src/mame/drivers/apple2gs.cpp
@@ -1276,8 +1276,7 @@ void apple2gs_state::machine_start()
int ramsize = m_ram_size - 0x20000; // subtract 128K for banks 0 and 1, which are handled specially
// RAM sizes for both classes of machine no longer include the Mega II RAM
- space.install_readwrite_bank(0x020000, ramsize - 1 + 0x20000, "bank1");
- membank("bank1")->set_base(m_ram_ptr + 0x020000);
+ space.install_ram(0x020000, ramsize - 1 + 0x20000, m_ram_ptr + 0x020000);
// setup save states
save_item(NAME(m_speaker_state));
diff --git a/src/mame/drivers/apricotp.cpp b/src/mame/drivers/apricotp.cpp
index 8e6b94d197d..30603452158 100644
--- a/src/mame/drivers/apricotp.cpp
+++ b/src/mame/drivers/apricotp.cpp
@@ -97,8 +97,7 @@ public:
, m_floppy1(*this, WD2797_TAG":1")
, m_floppy(nullptr)
, m_centronics(*this, CENTRONICS_TAG)
- , m_work_ram(*this, "work_ram")
- , m_video_ram(*this, "video_ram")
+ , m_video_ram(*this, "video_ram", 0x20000, ENDIANNESS_LITTLE)
{ }
void fp(machine_config &config);
@@ -139,10 +138,10 @@ private:
void lat_ls259_w(offs_t offset, int state);
- optional_shared_ptr<uint16_t> m_work_ram;
+ uint16_t *m_work_ram;
// video state
- optional_shared_ptr<uint16_t> m_video_ram;
+ memory_share_creator<uint16_t> m_video_ram;
uint8_t m_video;
int m_centronics_busy;
@@ -168,8 +167,6 @@ private:
void fp_state::video_start()
{
- // allocate memory
- m_video_ram.allocate(0x20000);
}
MC6845_UPDATE_ROW( fp_state::update_row )
@@ -535,7 +532,7 @@ WRITE_LINE_MEMBER( fp_state::write_centronics_perror )
void fp_state::machine_start()
{
// allocate memory
- m_work_ram.allocate(m_ram->size() / 2);
+ m_work_ram = reinterpret_cast<uint16_t *>(m_ram->pointer());
}
diff --git a/src/mame/drivers/aristmk4.cpp b/src/mame/drivers/aristmk4.cpp
index 0220a60610e..156b8b83088 100644
--- a/src/mame/drivers/aristmk4.cpp
+++ b/src/mame/drivers/aristmk4.cpp
@@ -1034,7 +1034,7 @@ void aristmk4_state::slots_mem(address_map &map)
map(0x1c00, 0x1cff).w(FUNC(aristmk4_state::mk4_printer_w));
map(0x1900, 0x19ff).r(FUNC(aristmk4_state::mk4_printer_r));
map(0x2000, 0x3fff).rom(); // graphics rom map
- map(0x4000, 0x4fff).bankrw("bank1").share("nvram");
+ map(0x4000, 0x4fff).ram().share("nvram");
map(0x5000, 0x5000).w(FUNC(aristmk4_state::u3_p0));
map(0x5002, 0x5002).r(FUNC(aristmk4_state::u3_p2));
@@ -1078,7 +1078,7 @@ void aristmk4_state::poker_mem(address_map &map)
map(0x1801, 0x1801).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
map(0x1c00, 0x1cff).w(FUNC(aristmk4_state::mk4_printer_w));
map(0x1900, 0x19ff).r(FUNC(aristmk4_state::mk4_printer_r));
- map(0x4000, 0x4fff).bankrw("bank1").share("nvram");
+ map(0x4000, 0x4fff).ram().share("nvram");
map(0x5000, 0x5000).w(FUNC(aristmk4_state::u3_p0));
map(0x5002, 0x5002).r(FUNC(aristmk4_state::u3_p2));
diff --git a/src/mame/drivers/arsystems.cpp b/src/mame/drivers/arsystems.cpp
index ef96482e00d..1e60e43fa1a 100644
--- a/src/mame/drivers/arsystems.cpp
+++ b/src/mame/drivers/arsystems.cpp
@@ -66,6 +66,8 @@ public:
arcadia_amiga_state(const machine_config &mconfig, device_type type, const char *tag)
: amiga_state(mconfig, type, tag)
, m_bios_region(*this, "user2")
+ , m_rom_board(*this, "user3")
+
{
}
@@ -103,7 +105,7 @@ private:
virtual void machine_reset() override;
- optional_memory_region m_bios_region;
+ optional_memory_region m_bios_region, m_rom_board;
uint8_t m_coin_counter[2];
};
@@ -119,7 +121,7 @@ private:
void arcadia_amiga_state::arcadia_multibios_change_game(uint16_t data)
{
if (data == 0)
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x800000, 0x97ffff, "bank2");
+ m_maincpu->space(AS_PROGRAM).install_rom(0x800000, 0x97ffff, m_rom_board->base());
else
m_maincpu->space(AS_PROGRAM).nop_read(0x800000, 0x97ffff);
}
@@ -221,7 +223,7 @@ void arcadia_amiga_state::a500_mem(address_map &map)
void arcadia_amiga_state::arcadia_map(address_map &map)
{
a500_mem(map);
- map(0x800000, 0x97ffff).bankr("bank2").region("user3", 0);
+ map(0x800000, 0x97ffff).rom().region("user3", 0);
map(0x980000, 0x9fbfff).rom().region("user2", 0);
map(0x9fc000, 0x9ffffd).ram().share("nvram");
map(0x9ffffe, 0x9fffff).w(FUNC(arcadia_amiga_state::arcadia_multibios_change_game));
@@ -231,7 +233,7 @@ void arcadia_amiga_state::arcadia_map(address_map &map)
void arcadia_amiga_state::argh_map(address_map &map)
{
a500_mem(map);
- map(0x800000, 0x97ffff).bankr("bank2").region("user3", 0);
+ map(0x800000, 0x97ffff).rom().region("user3", 0);
// map(0x980000, 0x9fefff).rom().region("user3", 0);
map(0x9ff000, 0x9fffff).ram().share("nvram");
map(0xf00000, 0xf7ffff).rom().region("user3", 0);
@@ -468,7 +470,7 @@ ROM_END
ROM_START( ar_dart2 )
ARCADIA_BIOS
- ROM_REGION16_BE(0x200000, "user3", 0)
+ ROM_REGION16_BE(0x180000, "user3", 0)
ROM_LOAD16_BYTE( "arcadia3.u10", 0x00000, 0x10000, CRC(7166c736) SHA1(9892725b4d0aac6486950f8153083ba3f6982ad8) )
ROM_LOAD16_BYTE( "arcadia3.u6", 0x00001, 0x10000, CRC(f226137e) SHA1(61540885ff83420f5adc1087547e0ece33383ffd) )
ROM_LOAD16_BYTE( "arcadia3.u11", 0x20000, 0x10000, CRC(5d9a7804) SHA1(acd8eb7fd28594e8008eb953f843a72f12782ea2) )
@@ -645,7 +647,7 @@ ROM_END
ROM_START( ar_ninj )
ARCADIA_BIOS
- ROM_REGION16_BE(0x200000, "user3", 0)
+ ROM_REGION16_BE(0x180000, "user3", 0)
ROM_LOAD16_BYTE( "ninj_1h.bin", 0x00000, 0x10000, CRC(53b07b4d) SHA1(4852005adf60fe63f2da880dd32740d18fd31169) )
ROM_LOAD16_BYTE( "ninj_1l.bin", 0x00001, 0x10000, CRC(3337a6c1) SHA1(be9719f0cd5872b51f4c6d32fcac2638c0dedaf4) )
ROM_LOAD16_BYTE( "ninj_2h.bin", 0x20000, 0x10000, CRC(e28a5fa8) SHA1(150e26aea24706b72d2e6612280d5dddc527061b) )
@@ -663,7 +665,7 @@ ROM_END
ROM_START( ar_ninj2 )
ARCADIA_BIOS
- ROM_REGION16_BE(0x200000, "user3", 0)
+ ROM_REGION16_BE(0x180000, "user3", 0)
ROM_LOAD16_BYTE( "arcadia5.u10", 0x00000, 0x10000, CRC(217cb8eb) SHA1(7cb1da4d5d5b5af5f42c10848c7535bdeebbcd94) )
ROM_LOAD16_BYTE( "arcadia5.u6", 0x00001, 0x10000, CRC(009bee8f) SHA1(ff61a0770643400ecddc70e603ca6589424b6831) )
ROM_LOAD16_BYTE( "arcadia5.u11", 0x20000, 0x10000, CRC(f5c84e48) SHA1(8149a225a406ffb7c9faaa48af4947c2f66f750d) )
@@ -687,7 +689,7 @@ ROM_END
ROM_START( ar_rdwr )
ARCADIA_BIOS
- ROM_REGION16_BE(0x200000, "user3", 0)
+ ROM_REGION16_BE(0x180000, "user3", 0)
ROM_LOAD16_BYTE( "rdwr_1h.bin", 0x00000, 0x10000, CRC(f52cb704) SHA1(cce8c7484ae8c3a3d14b2e79a981780a277c9b1c) )
ROM_LOAD16_BYTE( "rdwr_1l.bin", 0x00001, 0x10000, CRC(fde0de6d) SHA1(7f62ce854a040775548c5ba3b05e6a4dcb0d7cfb) )
ROM_LOAD16_BYTE( "rdwr_2h.bin", 0x20000, 0x10000, CRC(8f3c1a2c) SHA1(e473e55457c04ebd597375e9936aeb0473507ed7) )
@@ -721,7 +723,7 @@ ROM_END
ROM_START( ar_sdwr2 )
ARCADIA_BIOS
- ROM_REGION16_BE(0x200000, "user3", 0)
+ ROM_REGION16_BE(0x180000, "user3", 0)
ROM_LOAD16_BYTE( "arcadia1.u10", 0x00000, 0x10000, CRC(30949f1f) SHA1(270cd449f994eda76afd5532018bad636ac4cf68) )
ROM_LOAD16_BYTE( "arcadia1.u6", 0x00001, 0x10000, CRC(c760d1c4) SHA1(7d311e8b192e493da9501755e096599e1e8e8d3e) )
ROM_LOAD16_BYTE( "arcadia1.u11", 0x20000, 0x10000, CRC(d67ba564) SHA1(2afba72a77806e3925c9ca1e13c16c442a6cfc3a) )
diff --git a/src/mame/drivers/asteroid.cpp b/src/mame/drivers/asteroid.cpp
index c02bdca7311..3762bca38ee 100644
--- a/src/mame/drivers/asteroid.cpp
+++ b/src/mame/drivers/asteroid.cpp
@@ -321,8 +321,8 @@ void asteroid_state::asteroid_map(address_map &map)
{
map.global_mask(0x7fff);
map(0x0000, 0x01ff).ram();
- map(0x0200, 0x02ff).bankrw("ram1").share("ram1");
- map(0x0300, 0x03ff).bankrw("ram2").share("ram2");
+ map(0x0200, 0x02ff).bankrw("ram1");
+ map(0x0300, 0x03ff).bankrw("ram2");
map(0x2000, 0x2007).r(FUNC(asteroid_state::asteroid_IN0_r)).nopw(); // IN0
map(0x2400, 0x2407).r(FUNC(asteroid_state::asteroid_IN1_r)); // IN1
map(0x2800, 0x2803).r(FUNC(asteroid_state::asteroid_DSW1_r)).nopw(); // DSW1
@@ -333,7 +333,7 @@ void asteroid_state::asteroid_map(address_map &map)
map(0x3a00, 0x3a00).w(FUNC(asteroid_state::asteroid_thump_w));
map(0x3c00, 0x3c07).w("audiolatch", FUNC(ls259_device::write_d7));
map(0x3e00, 0x3e00).w(FUNC(asteroid_state::asteroid_noise_reset_w));
- map(0x4000, 0x47ff).ram().share("dvg:vectorram").region("maincpu", 0x4000);
+ map(0x4000, 0x47ff).ram().share("dvg:vectorram");
map(0x5000, 0x57ff).rom(); // Vector ROM
map(0x6800, 0x7fff).rom();
}
@@ -343,8 +343,8 @@ void asteroid_state::astdelux_map(address_map &map)
{
map.global_mask(0x7fff);
map(0x0000, 0x01ff).ram();
- map(0x0200, 0x02ff).bankrw("ram1").share("ram1");
- map(0x0300, 0x03ff).bankrw("ram2").share("ram2");
+ map(0x0200, 0x02ff).bankrw("ram1");
+ map(0x0300, 0x03ff).bankrw("ram2");
map(0x2000, 0x2007).r(FUNC(asteroid_state::asteroid_IN0_r)).nopw(); // IN0
map(0x2400, 0x2407).r(FUNC(asteroid_state::asteroid_IN1_r)).nopw(); // IN1
map(0x2800, 0x2803).r(FUNC(asteroid_state::asteroid_DSW1_r)); // DSW1
@@ -357,7 +357,7 @@ void asteroid_state::astdelux_map(address_map &map)
map(0x3a00, 0x3a00).w(FUNC(asteroid_state::earom_control_w));
map(0x3c00, 0x3c07).w("audiolatch", FUNC(ls259_device::write_d7));
map(0x3e00, 0x3e00).w(FUNC(asteroid_state::asteroid_noise_reset_w));
- map(0x4000, 0x47ff).ram().share("dvg:vectorram").region("maincpu", 0x4000);
+ map(0x4000, 0x47ff).ram().share("dvg:vectorram");
map(0x4800, 0x57ff).rom(); // Vector ROM
map(0x6000, 0x7fff).rom();
}
@@ -376,7 +376,7 @@ void asteroid_state::llander_map(address_map &map)
map(0x3400, 0x3400).w("watchdog", FUNC(watchdog_timer_device::reset_w));
map(0x3c00, 0x3c00).w(FUNC(asteroid_state::llander_sounds_w));
map(0x3e00, 0x3e00).w(FUNC(asteroid_state::llander_snd_reset_w));
- map(0x4000, 0x47ff).ram().share("dvg:vectorram").region("maincpu", 0x4000);
+ map(0x4000, 0x47ff).ram().share("dvg:vectorram");
map(0x4800, 0x5fff).rom(); // Vector ROM
map(0x5800, 0x5800).nopw(); // INC access?
map(0x6000, 0x7fff).rom();
diff --git a/src/mame/drivers/at.cpp b/src/mame/drivers/at.cpp
index e1c1436c6aa..a9b79ec54e8 100644
--- a/src/mame/drivers/at.cpp
+++ b/src/mame/drivers/at.cpp
@@ -442,9 +442,7 @@ void at_state::init_at_common(int xmsbase)
if (m_ram->size() > xmsbase)
{
offs_t ram_limit = 0x100000 + m_ram->size() - xmsbase;
- space.install_read_bank(0x100000, ram_limit - 1, "bank1");
- space.install_write_bank(0x100000, ram_limit - 1, "bank1");
- membank("bank1")->set_base(m_ram->pointer() + xmsbase);
+ space.install_ram(0x100000, ram_limit - 1, m_ram->pointer() + xmsbase);
}
}
@@ -463,8 +461,7 @@ void at_vrom_fix_state::machine_start()
at_state::machine_start();
address_space& space = m_maincpu->space(AS_PROGRAM);
- space.install_read_bank(0xc0000, 0xcffff, "vrom_bank");
- membank("vrom_bank")->set_base(machine().root_device().memregion("bios")->base());
+ space.install_rom(0xc0000, 0xcffff, machine().root_device().memregion("bios")->base());
}
void at_state::cfg_single_1200K(device_t *device)
diff --git a/src/mame/drivers/atari400.cpp b/src/mame/drivers/atari400.cpp
index ebb5c0739e2..29f28455d75 100644
--- a/src/mame/drivers/atari400.cpp
+++ b/src/mame/drivers/atari400.cpp
@@ -328,9 +328,6 @@ private:
required_device<pia6821_device> m_pia;
optional_device<dac_bit_interface> m_dac;
required_memory_region m_region_maincpu;
- memory_bank *m_0000 = nullptr;
- memory_bank *m_8000 = nullptr;
- memory_bank *m_a000 = nullptr;
optional_device<a800_cart_slot_device> m_cart;
optional_device<a800_cart_slot_device> m_cart2;
@@ -1739,35 +1736,17 @@ void a400_state::setup_ram(int bank, uint32_t size)
{
case 0: // 0x0000-0x7fff
ram_top = std::min(size, uint32_t(0x8000)) - 1;
- m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x0000, ram_top, "0000");
- m_0000 = membank("0000");
- m_0000->set_base(m_ram->pointer());
+ m_maincpu->space(AS_PROGRAM).install_ram(0x0000, ram_top, m_ram->pointer());
break;
case 1: // 0x8000-0x9fff
ram_top = std::min(size, uint32_t(0xa000)) - 1;
if (ram_top > 0x8000)
- {
- m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x8000, ram_top, "8000");
- m_8000 = membank("8000");
- m_8000->set_base(m_ram->pointer() + 0x8000);
- }
- else
- {
- m_8000 = nullptr;
- }
+ m_maincpu->space(AS_PROGRAM).install_ram(0x8000, ram_top, m_ram->pointer() + 0x8000);
break;
case 2: // 0xa000-0xbfff
ram_top = std::min(size, uint32_t(0xc000)) - 1;
if (ram_top > 0xa000)
- {
- m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0xa000, ram_top, "a000");
- m_a000 = membank("a000");
- m_a000->set_base(m_ram->pointer() + 0xa000);
- }
- else
- {
- m_a000 = nullptr;
- }
+ m_maincpu->space(AS_PROGRAM).install_ram(0xa000, ram_top, m_ram->pointer() + 0xa000);
break;
}
}
diff --git a/src/mame/drivers/aussiebyte.cpp b/src/mame/drivers/aussiebyte.cpp
index 2004e423783..f0b1502e1c9 100644
--- a/src/mame/drivers/aussiebyte.cpp
+++ b/src/mame/drivers/aussiebyte.cpp
@@ -48,7 +48,7 @@ void aussiebyte_state::mem_map(address_map &map)
map(0x0000, 0x3fff).bankr("bankr0").bankw("bankw0");
map(0x4000, 0x7fff).bankrw("bank1");
map(0x8000, 0xbfff).bankrw("bank2");
- map(0xc000, 0xffff).bankrw("bank3");
+ map(0xc000, 0xffff).ram();
}
void aussiebyte_state::io_map(address_map &map)
@@ -99,7 +99,7 @@ INPUT_PORTS_END
************************************************************/
void aussiebyte_state::port15_w(u8 data)
{
- membank("bankr0")->set_entry(m_port15); // point at ram
+ m_bankr0->set_entry(m_port15); // point at ram
m_port15 = true;
}
@@ -175,34 +175,34 @@ void aussiebyte_state::port1a_w(u8 data)
case 4:
m_port1a = data*3+1;
if (m_port15)
- membank("bankr0")->set_entry(data*3+1);
- membank("bankw0")->set_entry(data*3+1);
- membank("bank1")->set_entry(data*3+2);
- membank("bank2")->set_entry(data*3+3);
+ m_bankr0->set_entry(data*3+1);
+ m_bankw0->set_entry(data*3+1);
+ m_bank1->set_entry(data*3+2);
+ m_bank2->set_entry(data*3+3);
break;
case 5:
m_port1a = 1;
if (m_port15)
- membank("bankr0")->set_entry(1);
- membank("bankw0")->set_entry(1);
- membank("bank1")->set_entry(2);
- membank("bank2")->set_entry(13);
+ m_bankr0->set_entry(1);
+ m_bankw0->set_entry(1);
+ m_bank1->set_entry(2);
+ m_bank2->set_entry(13);
break;
case 6:
m_port1a = 14;
if (m_port15)
- membank("bankr0")->set_entry(14);
- membank("bankw0")->set_entry(14);
- membank("bank1")->set_entry(15);
- //membank("bank2")->set_entry(0); // open bus
+ m_bankr0->set_entry(14);
+ m_bankw0->set_entry(14);
+ m_bank1->set_entry(15);
+ //m_bank2->set_entry(0); // open bus
break;
case 7:
m_port1a = 1;
if (m_port15)
- membank("bankr0")->set_entry(1);
- membank("bankw0")->set_entry(1);
- membank("bank1")->set_entry(4);
- membank("bank2")->set_entry(13);
+ m_bankr0->set_entry(1);
+ m_bankw0->set_entry(1);
+ m_bank1->set_entry(4);
+ m_bank2->set_entry(13);
break;
}
}
@@ -412,8 +412,8 @@ QUICKLOAD_LOAD_MEMBER(aussiebyte_state::quickload_cb)
/* RAM must be banked in */
m_port15 = true; // disable boot rom
m_port1a = 4;
- membank("bankr0")->set_entry(m_port1a); /* enable correct program bank */
- membank("bankw0")->set_entry(m_port1a);
+ m_bankr0->set_entry(m_port1a); /* enable correct program bank */
+ m_bankw0->set_entry(m_port1a);
/* Avoid loading a program if CP/M-80 is not in memory */
if ((prog_space.read_byte(0) != 0xc3) || (prog_space.read_byte(5) != 0xc3))
@@ -454,11 +454,10 @@ void aussiebyte_state::machine_reset()
m_port1a = 1;
m_alpha_address = 0;
m_graph_address = 0;
- membank("bankr0")->set_entry(16); // point at rom
- membank("bankw0")->set_entry(1); // always write to ram
- membank("bank1")->set_entry(2);
- membank("bank2")->set_entry(3);
- membank("bank3")->set_entry(0);
+ m_bankr0->set_entry(16); // point at rom
+ m_bankw0->set_entry(1); // always write to ram
+ m_bank1->set_entry(2);
+ m_bank2->set_entry(3);
m_maincpu->reset();
}
@@ -486,15 +485,12 @@ void aussiebyte_state::machine_start()
// Main ram is divided into 16k blocks (0-15). The boot rom is block number 16.
// For convenience, bank 0 is permanently assigned to C000-FFFF
- u8 *main = memregion("roms")->base();
- u8 *ram = m_ram.get();
-
- membank("bankr0")->configure_entries(0, 16, ram, 0x4000);
- membank("bankw0")->configure_entries(0, 16, ram, 0x4000);
- membank("bank1")->configure_entries(0, 16, ram, 0x4000);
- membank("bank2")->configure_entries(0, 16, ram, 0x4000);
- membank("bank3")->configure_entries(0, 1, ram, 0x4000);
- membank("bankr0")->configure_entry(16, &main[0x0000]);
+
+ m_bankr0->configure_entries(0, 16, m_p_mram, 0x4000);
+ m_bankw0->configure_entries(0, 16, m_p_mram, 0x4000);
+ m_bank1->configure_entries(0, 16, m_p_mram, 0x4000);
+ m_bank2->configure_entries(0, 16, m_p_mram, 0x4000);
+ m_bankr0->configure_entry(16, memregion("roms")->base());
}
diff --git a/src/mame/drivers/b2m.cpp b/src/mame/drivers/b2m.cpp
index 43af7e76820..23ade9eea09 100644
--- a/src/mame/drivers/b2m.cpp
+++ b/src/mame/drivers/b2m.cpp
@@ -41,11 +41,7 @@ Need a schematic so that the fdc could be repaired.
/* Address maps */
void b2m_state::b2m_mem(address_map &map)
{
- map(0x0000, 0x27ff).bankrw("bank1");
- map(0x2800, 0x2fff).bankrw("bank2");
- map(0x3000, 0x6fff).bankrw("bank3");
- map(0x7000, 0xdfff).bankrw("bank4");
- map(0xe000, 0xffff).bankrw("bank5");
+ // Dynamic, set with b2m_set_bank
}
void b2m_state::b2m_io(address_map &map)
@@ -279,9 +275,9 @@ ROM_START( b2m )
ROM_END
ROM_START( b2mrom )
- ROM_REGION( 0x12000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "bios2.rom", 0x00000, 0x2000, CRC(c22a98b7) SHA1(7de91e653bf4b191ded62cf21532578268e4a2c1) )
- ROM_LOAD( "ramdos.sys", 0x02000, 0x60c0, CRC(91ed6df0) SHA1(4fd040f2647a6b7930c330c75560a035027d0606) )
+ ROM_REGION( 0x80c0, "maincpu", ROMREGION_ERASEFF )
+ ROM_LOAD( "bios2.rom", 0x0000, 0x2000, CRC(c22a98b7) SHA1(7de91e653bf4b191ded62cf21532578268e4a2c1) )
+ ROM_LOAD( "ramdos.sys", 0x2000, 0x60c0, CRC(91ed6df0) SHA1(4fd040f2647a6b7930c330c75560a035027d0606) )
ROM_END
diff --git a/src/mame/drivers/beathead.cpp b/src/mame/drivers/beathead.cpp
index 142766c28d8..f8b06b8c4bf 100644
--- a/src/mame/drivers/beathead.cpp
+++ b/src/mame/drivers/beathead.cpp
@@ -249,7 +249,7 @@ void beathead_state::coin_count_w(offs_t offset, uint32_t data)
void beathead_state::main_map(address_map &map)
{
map(0x00000000, 0x0001ffff).ram().share("ram_base");
- map(0x01800000, 0x01bfffff).rom().region("user1", 0).share("rom_base");
+ map(0x01800000, 0x01bfffff).rom().region("user1", 0);
map(0x40000000, 0x400007ff).rw("eeprom", FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write)).umask32(0x000000ff);
map(0x41000000, 0x41000000).rw(m_jsa, FUNC(atari_jsa_iii_device::main_response_r), FUNC(atari_jsa_iii_device::main_command_w));
map(0x41000100, 0x41000103).r(FUNC(beathead_state::interrupt_control_r));
diff --git a/src/mame/drivers/blitz68k.cpp b/src/mame/drivers/blitz68k.cpp
index 2fdfb11ef41..e0b24ecdbd5 100644
--- a/src/mame/drivers/blitz68k.cpp
+++ b/src/mame/drivers/blitz68k.cpp
@@ -1012,7 +1012,7 @@ void blitz68k_state::cjffruit_map(address_map &map)
map(0x8fc000, 0x8fc001).w(FUNC(blitz68k_state::cjffruit_leds3_w)).share("leds2");
map(0x8fe000, 0x8fe003).w(FUNC(blitz68k_state::blit_flags_w)); // flipx,y,solid,trans
- map(0x8fe004, 0x8fe005).writeonly();
+ map(0x8fe004, 0x8fe005).nopw();
map(0x8fe006, 0x8fe007).w(FUNC(blitz68k_state::crtc_lpen_w)); // 0x8fe006: 0->1, 0x8fe007: 1->0
map(0xc40000, 0xc40001).rw(FUNC(blitz68k_state::crtc_r), FUNC(blitz68k_state::crtc_w));
@@ -1112,7 +1112,7 @@ void blitz68k_state::deucesw2_map(address_map &map)
map(0x89c000, 0x89c001).w(FUNC(blitz68k_state::deucesw2_leds3_w)).share("leds2");
map(0x89e000, 0x89e003).w(FUNC(blitz68k_state::blit_flags_w)); // flipx,y,solid,trans
- map(0x89e004, 0x89e005).writeonly();
+ map(0x89e004, 0x89e005).nopw();
map(0x89e006, 0x89e007).w(FUNC(blitz68k_state::crtc_lpen_w)); // 0x89e006: 0->1, 0x89e007: 1->0
map(0xc00000, 0xc00001).rw(FUNC(blitz68k_state::crtc_r), FUNC(blitz68k_state::crtc_w));
@@ -1288,7 +1288,7 @@ void blitz68k_state::hermit_map(address_map &map)
map(0x9e8000, 0x9e8001).w(FUNC(blitz68k_state::hermit_leds2_w)).share("leds1");
map(0x9f0000, 0x9f0003).w(FUNC(blitz68k_state::blit_flags_w)); // flipx,y,solid,trans
- map(0x9f0004, 0x9f0005).writeonly();
+ map(0x9f0004, 0x9f0005).nopw();
map(0x9f0006, 0x9f0007).w(FUNC(blitz68k_state::crtc_lpen_w)); // 0x9f0006: 0->1, 0x9f0007: 1->0
map(0xb00000, 0xb00001).rw(FUNC(blitz68k_state::crtc_r), FUNC(blitz68k_state::crtc_w)); // triggered by MCU?
diff --git a/src/mame/drivers/blmbycar.cpp b/src/mame/drivers/blmbycar.cpp
index f713061b1e0..12e1ee5e1a4 100644
--- a/src/mame/drivers/blmbycar.cpp
+++ b/src/mame/drivers/blmbycar.cpp
@@ -114,10 +114,10 @@ void blmbycar_state::vram_w(offs_t offset, uint16_t data, uint16_t mem_mask)
void blmbycar_state::common_map(address_map &map)
{
map(0x000000, 0x0fffff).rom();
- map(0x100000, 0x103fff).writeonly(); // ???
+ map(0x100000, 0x103fff).writeonly().share("unk_100000"); // ???
map(0x104000, 0x105fff).ram().w(FUNC(blmbycar_state::vram_w<1>)).share("vram_1"); // Layer 1
map(0x106000, 0x107fff).ram().w(FUNC(blmbycar_state::vram_w<0>)).share("vram_0"); // Layer 0
- map(0x108000, 0x10bfff).writeonly(); // ???
+ map(0x108000, 0x10bfff).writeonly().share("unk_108000"); // ???
map(0x10c000, 0x10c003).writeonly().share("scroll_1"); // Scroll 1
map(0x10c004, 0x10c007).writeonly().share("scroll_0"); // Scroll 0
map(0x200000, 0x203fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette").mirror(0x4000); // Palette
@@ -156,7 +156,7 @@ void blmbycar_state::watrball_map(address_map &map)
map(0x700006, 0x700007).nopr(); // read
map(0x700008, 0x700009).r(FUNC(blmbycar_state::waterball_unk_r)); // 0x0008 must toggle
- map(0x70000a, 0x70000b).writeonly(); // ?? busy
+ map(0x70000a, 0x70000b).nopw(); // ?? busy
}
void blmbycar_state::blmbycar_oki_map(address_map &map)
diff --git a/src/mame/drivers/bmcbowl.cpp b/src/mame/drivers/bmcbowl.cpp
index 79970bf864b..552dad12ad6 100644
--- a/src/mame/drivers/bmcbowl.cpp
+++ b/src/mame/drivers/bmcbowl.cpp
@@ -122,7 +122,7 @@ public:
bmcbowl_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
- m_stats_ram(*this, "nvram", 16),
+ m_stats_ram(*this, "nvram"),
m_vid1(*this, "vid1"),
m_vid2(*this, "vid2"),
m_palette(*this, "palette"),
diff --git a/src/mame/drivers/bnstars.cpp b/src/mame/drivers/bnstars.cpp
index 1574a2b02c3..f1e7b8f3baf 100644
--- a/src/mame/drivers/bnstars.cpp
+++ b/src/mame/drivers/bnstars.cpp
@@ -106,14 +106,14 @@ class bnstars_state : public ms32_state
public:
bnstars_state(const machine_config &mconfig, device_type type, const char *tag)
: ms32_state(mconfig, type, tag)
- , m_ms32_tx0_ram(*this, "tx0_ram", 32)
- , m_ms32_tx1_ram(*this, "tx1_ram", 32)
- , m_ms32_bg0_ram(*this, "bg0_ram", 32)
- , m_ms32_bg1_ram(*this, "bg1_ram", 32)
- , m_ms32_roz0_ram(*this, "roz0_ram", 32)
- , m_ms32_roz1_ram(*this, "roz1_ram", 32)
+ , m_ms32_tx0_ram(*this, "tx0_ram")
+ , m_ms32_tx1_ram(*this, "tx1_ram")
+ , m_ms32_bg0_ram(*this, "bg0_ram")
+ , m_ms32_bg1_ram(*this, "bg1_ram")
+ , m_ms32_roz0_ram(*this, "roz0_ram")
+ , m_ms32_roz1_ram(*this, "roz1_ram")
, m_ms32_roz_ctrl(*this, "roz_ctrl.%u", 0)
- , m_ms32_spram(*this, "spram", 32)
+ , m_ms32_spram(*this, "spram")
, m_ms32_tx0_scroll(*this, "tx0_scroll")
, m_ms32_bg0_scroll(*this, "bg0_scroll")
, m_ms32_tx1_scroll(*this, "tx1_scroll")
diff --git a/src/mame/drivers/btime.cpp b/src/mame/drivers/btime.cpp
index 1a4498ab4ec..e892228c932 100644
--- a/src/mame/drivers/btime.cpp
+++ b/src/mame/drivers/btime.cpp
@@ -2165,8 +2165,7 @@ void btime_state::init_disco()
void btime_state::init_cookrace()
{
- m_audiocpu->space(AS_PROGRAM).install_read_bank(0x0200, 0x0fff, "bank10");
- membank("bank10")->set_base(memregion("audiocpu")->base() + 0xe200);
+ m_audiocpu->space(AS_PROGRAM).install_rom(0x0200, 0x0fff, memregion("audiocpu")->base() + 0xe200);
m_audio_nmi_enable_type = AUDIO_ENABLE_DIRECT;
}
@@ -2180,8 +2179,7 @@ void btime_state::init_wtennis()
{
m_maincpu->space(AS_PROGRAM).install_read_handler(0xc15f, 0xc15f, read8smo_delegate(*this, FUNC(btime_state::wtennis_reset_hack_r)));
- m_audiocpu->space(AS_PROGRAM).install_read_bank(0x0200, 0x0fff, "bank10");
- membank("bank10")->set_base(memregion("audiocpu")->base() + 0xe200);
+ m_audiocpu->space(AS_PROGRAM).install_rom(0x0200, 0x0fff, memregion("audiocpu")->base() + 0xe200);
m_audio_nmi_enable_type = AUDIO_ENABLE_AY8910;
}
diff --git a/src/mame/drivers/buggychl.cpp b/src/mame/drivers/buggychl.cpp
index b474c67b9f7..4e625f56f3d 100644
--- a/src/mame/drivers/buggychl.cpp
+++ b/src/mame/drivers/buggychl.cpp
@@ -233,7 +233,7 @@ void buggychl_state::buggychl_map(address_map &map)
map(0xd820, 0xd83f).ram(); // TODO
map(0xd840, 0xd85f).writeonly().share("scrollv");
map(0xdb00, 0xdbff).writeonly().share("scrollh");
- map(0xdc04, 0xdc04).writeonly(); /* should be fg scroll */
+ map(0xdc04, 0xdc04).nopw(); /* should be fg scroll */
map(0xdc06, 0xdc06).w(FUNC(buggychl_state::buggychl_bg_scrollx_w));
}
diff --git a/src/mame/drivers/bw12.cpp b/src/mame/drivers/bw12.cpp
index bc8caefa4f0..7a45b119eb2 100644
--- a/src/mame/drivers/bw12.cpp
+++ b/src/mame/drivers/bw12.cpp
@@ -45,22 +45,22 @@ void bw12_state::bankswitch()
{
address_space &program = m_maincpu->space(AS_PROGRAM);
- switch (m_bank)
+ switch (m_curbank)
{
case 0: /* ROM */
- program.install_read_bank(0x0000, 0x7fff, "bank1");
+ program.install_read_bank(0x0000, 0x7fff, m_bank);
program.unmap_write(0x0000, 0x7fff);
break;
case 1: /* BK0 */
- program.install_readwrite_bank(0x0000, 0x7fff, "bank1");
+ program.install_readwrite_bank(0x0000, 0x7fff, m_bank);
break;
case 2: /* BK1 */
case 3: /* BK2 */
if (m_ram->size() > 64*1024)
{
- program.install_readwrite_bank(0x0000, 0x7fff, "bank1");
+ program.install_readwrite_bank(0x0000, 0x7fff, m_bank);
}
else
{
@@ -69,7 +69,7 @@ void bw12_state::bankswitch()
break;
}
- membank("bank1")->set_entry(m_bank);
+ m_bank->set_entry(m_curbank);
}
void bw12_state::floppy_motor_on_off()
@@ -97,13 +97,13 @@ TIMER_DEVICE_CALLBACK_MEMBER(bw12_state::floppy_motor_off_tick)
WRITE_LINE_MEMBER(bw12_state::ls138_a0_w)
{
- m_bank = (m_bank & 0x02) | state;
+ m_curbank = (m_curbank & 0x02) | state;
bankswitch();
}
WRITE_LINE_MEMBER(bw12_state::ls138_a1_w)
{
- m_bank = (state << 1) | (m_bank & 0x01);
+ m_curbank = (state << 1) | (m_curbank & 0x01);
bankswitch();
}
@@ -135,7 +135,7 @@ uint8_t bw12_state::ls259_r(offs_t offset)
void bw12_state::bw12_mem(address_map &map)
{
- map(0x0000, 0x7fff).bankrw("bank1");
+ map(0x0000, 0x7fff).bankrw("bank");
map(0x8000, 0xf7ff).ram();
map(0xf800, 0xffff).ram().share("video_ram");
}
@@ -438,12 +438,12 @@ WRITE_LINE_MEMBER( bw12_state::ay3600_data_ready_w )
void bw12_state::machine_start()
{
/* setup memory banking */
- membank("bank1")->configure_entry(0, m_rom->base());
- membank("bank1")->configure_entry(1, m_ram->pointer());
- membank("bank1")->configure_entries(2, 2, m_ram->pointer() + 0x10000, 0x8000);
+ m_bank->configure_entry(0, m_rom->base());
+ m_bank->configure_entry(1, m_ram->pointer());
+ m_bank->configure_entries(2, 2, m_ram->pointer() + 0x10000, 0x8000);
/* register for state saving */
- save_item(NAME(m_bank));
+ save_item(NAME(m_curbank));
save_item(NAME(m_pit_out2));
save_item(NAME(m_key_data));
save_item(NAME(m_key_sin));
diff --git a/src/mame/drivers/bwidow.cpp b/src/mame/drivers/bwidow.cpp
index c7197bca545..6cd1b95cde3 100644
--- a/src/mame/drivers/bwidow.cpp
+++ b/src/mame/drivers/bwidow.cpp
@@ -407,7 +407,7 @@ void bwidow_state::irq_ack_w(uint8_t data)
void bwidow_state::bwidow_map(address_map &map)
{
map(0x0000, 0x07ff).ram();
- map(0x2000, 0x27ff).ram().share("avg:vectorram").region("maincpu", 0x2000);
+ map(0x2000, 0x27ff).ram().share("avg:vectorram");
map(0x2800, 0x5fff).rom();
map(0x6000, 0x67ff).rw("pokey1", FUNC(pokey_device::read), FUNC(pokey_device::write));
map(0x6800, 0x6fff).rw("pokey2", FUNC(pokey_device::read), FUNC(pokey_device::write));
@@ -436,7 +436,7 @@ void bwidow_state::bwidowp_map(address_map &map)
map(0x2800, 0x2800).w("avg", FUNC(avg_device::reset_w));
map(0x3000, 0x3000).w("watchdog", FUNC(watchdog_timer_device::reset_w));
map(0x3800, 0x3800).w(FUNC(bwidow_state::bwidow_misc_w)); /* coin counters, leds */
- map(0x4000, 0x47ff).ram().share("avg:vectorram").region("maincpu", 0x4000);
+ map(0x4000, 0x47ff).ram().share("avg:vectorram");
map(0x4800, 0x6fff).rom();
map(0x6000, 0x6000).w(FUNC(bwidow_state::irq_ack_w)); /* interrupt acknowledge */
map(0x8000, 0x803f).w(FUNC(bwidow_state::earom_write));
@@ -462,7 +462,7 @@ void bwidow_state::spacduel_map(address_map &map)
map(0x0f00, 0x0f3f).w(FUNC(bwidow_state::earom_write));
map(0x1000, 0x10ff).rw("pokey1", FUNC(pokey_device::read), FUNC(pokey_device::write));
map(0x1400, 0x14ff).rw("pokey2", FUNC(pokey_device::read), FUNC(pokey_device::write));
- map(0x2000, 0x27ff).ram().share("avg:vectorram").region("maincpu", 0x2000);
+ map(0x2000, 0x27ff).ram().share("avg:vectorram");
map(0x2800, 0x3fff).rom();
map(0x4000, 0xffff).rom();
}
diff --git a/src/mame/drivers/bzone.cpp b/src/mame/drivers/bzone.cpp
index ccfefcb64e4..9f278f4fa91 100644
--- a/src/mame/drivers/bzone.cpp
+++ b/src/mame/drivers/bzone.cpp
@@ -348,10 +348,20 @@ void bzone_state::bzone_map(address_map &map)
map(0x1820, 0x182f).rw("pokey", FUNC(pokey_device::read), FUNC(pokey_device::write));
map(0x1840, 0x1840).w(FUNC(bzone_state::bzone_sounds_w));
map(0x1860, 0x187f).w(m_mathbox, FUNC(mathbox_device::go_w));
- map(0x2000, 0x2fff).ram().share("avg:vectorram").region("maincpu", 0x2000);
+ map(0x2000, 0x2fff).ram().share("avg:vectorram");
map(0x3000, 0x7fff).rom();
}
+void bzone_state::bradley_map(address_map &map)
+{
+ bzone_map(map);
+ map(0x0400, 0x07ff).ram();
+ map(0x1808, 0x1808).portr("1808");
+ map(0x1809, 0x1809).portr("1809");
+ map(0x180a, 0x180a).r(FUNC(bzone_state::analog_data_r));
+ map(0x1848, 0x1850).w(FUNC(bzone_state::analog_select_w));
+}
+
void redbaron_state::redbaron_map(address_map &map)
{
map.global_mask(0x7fff);
@@ -373,7 +383,7 @@ void redbaron_state::redbaron_map(address_map &map)
map(0x1810, 0x181f).rw("pokey", FUNC(pokey_device::read), FUNC(pokey_device::write));
map(0x1820, 0x185f).rw(FUNC(redbaron_state::earom_read), FUNC(redbaron_state::earom_write));
map(0x1860, 0x187f).nopr().w("mathbox", FUNC(mathbox_device::go_w));
- map(0x2000, 0x2fff).ram().share("avg:vectorram").region("maincpu", 0x2000);
+ map(0x2000, 0x2fff).ram().share("avg:vectorram");
map(0x3000, 0x7fff).rom();
}
@@ -600,6 +610,12 @@ void bzone_state::bzone(machine_config &config)
bzone_audio(config);
}
+void bzone_state::bradley(machine_config &config)
+{
+ bzone(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &bzone_state::bradley_map);
+}
+
void redbaron_state::redbaron(machine_config &config)
{
bzone_base(config);
@@ -890,18 +906,6 @@ void bzone_state::analog_select_w(offs_t offset, uint8_t data)
}
-void bzone_state::init_bradley()
-{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- space.install_ram(0x400, 0x7ff);
- space.install_read_port(0x1808, 0x1808, "1808");
- space.install_read_port(0x1809, 0x1809, "1809");
- space.install_read_handler(0x180a, 0x180a, read8smo_delegate(*this, FUNC(bzone_state::analog_data_r)));
- space.install_write_handler(0x1848, 0x1850, write8sm_delegate(*this, FUNC(bzone_state::analog_select_w)));
-}
-
-
-
/*************************************
*
* Game drivers
@@ -911,6 +915,6 @@ void bzone_state::init_bradley()
GAMEL(1980, bzone, 0, bzone, bzone, bzone_state, empty_init, ROT0, "Atari", "Battle Zone (rev 2)", MACHINE_SUPPORTS_SAVE, layout_bzone )
GAMEL(1980, bzonea, bzone, bzone, bzone, bzone_state, empty_init, ROT0, "Atari", "Battle Zone (rev 1)", MACHINE_SUPPORTS_SAVE, layout_bzone )
GAMEL(1980, bzonec, bzone, bzone, bzone, bzone_state, empty_init, ROT0, "Atari", "Battle Zone (cocktail)", MACHINE_SUPPORTS_SAVE|MACHINE_NO_COCKTAIL, layout_bzone )
-GAME( 1980, bradley, 0, bzone, bradley, bzone_state, init_bradley, ROT0, "Atari", "Bradley Trainer", MACHINE_SUPPORTS_SAVE )
+GAME( 1980, bradley, 0, bradley, bradley, bzone_state, empty_init, ROT0, "Atari", "Bradley Trainer", MACHINE_SUPPORTS_SAVE )
GAMEL(1980, redbaron, 0, redbaron, redbaron, redbaron_state, empty_init, ROT0, "Atari", "Red Baron (Revised Hardware)", MACHINE_SUPPORTS_SAVE, layout_redbaron )
GAMEL(1980, redbarona, redbaron, redbaron, redbaron, redbaron_state, empty_init, ROT0, "Atari", "Red Baron", MACHINE_SUPPORTS_SAVE, layout_redbaron )
diff --git a/src/mame/drivers/c128.cpp b/src/mame/drivers/c128.cpp
index 71d24a0ceb6..220740ba0d8 100644
--- a/src/mame/drivers/c128.cpp
+++ b/src/mame/drivers/c128.cpp
@@ -69,7 +69,7 @@ public:
m_from(*this, "from"),
m_rom(*this, M8502_TAG),
m_charom(*this, "charom"),
- m_color_ram(*this, "color_ram"),
+ m_color_ram(*this, "color_ram", 0x800, ENDIANNESS_LITTLE),
m_row(*this, "ROW%u", 0),
m_k(*this, "K%u", 0),
m_lock(*this, "LOCK"),
@@ -113,7 +113,7 @@ public:
required_device<generic_slot_device> m_from;
required_memory_region m_rom;
required_memory_region m_charom;
- optional_shared_ptr<uint8_t> m_color_ram;
+ memory_share_creator<uint8_t> m_color_ram;
required_ioport_array<8> m_row;
required_ioport_array<3> m_k;
required_ioport m_lock;
@@ -1565,9 +1565,6 @@ void c128d81_iec_devices(device_slot_interface &device)
void c128_state::machine_start()
{
- // allocate memory
- m_color_ram.allocate(0x800);
-
// initialize memory
uint8_t data = 0xff;
diff --git a/src/mame/drivers/c64.cpp b/src/mame/drivers/c64.cpp
index cf09c234d03..9083442a636 100644
--- a/src/mame/drivers/c64.cpp
+++ b/src/mame/drivers/c64.cpp
@@ -64,7 +64,7 @@ public:
m_user(*this, PET_USER_PORT_TAG),
m_ram(*this, RAM_TAG),
m_cassette(*this, PET_DATASSETTE_PORT_TAG),
- m_color_ram(*this, "color_ram"),
+ m_color_ram(*this, "color_ram", 0x400, ENDIANNESS_LITTLE),
m_row(*this, "ROW%u", 0),
m_lock(*this, "LOCK"),
m_loram(1),
@@ -93,7 +93,7 @@ public:
required_device<pet_user_port_device> m_user;
required_device<ram_device> m_ram;
optional_device<pet_datassette_port_device> m_cassette;
- optional_shared_ptr<uint8_t> m_color_ram;
+ memory_share_creator<uint8_t> m_color_ram;
optional_ioport_array<8> m_row;
optional_ioport m_lock;
@@ -1409,9 +1409,6 @@ void c64_state::machine_start()
}
m_charom = memregion("charom")->base();
- // allocate memory
- m_color_ram.allocate(0x400);
-
// initialize memory
uint8_t data = 0xff;
diff --git a/src/mame/drivers/cabaret.cpp b/src/mame/drivers/cabaret.cpp
index 3b3094d794d..d78aeb07817 100644
--- a/src/mame/drivers/cabaret.cpp
+++ b/src/mame/drivers/cabaret.cpp
@@ -201,7 +201,7 @@ void cabaret_state::ppi2_c_w(uint8_t data)
void cabaret_state::cabaret_map(address_map &map)
{
map(0x00000, 0x0efff).rom();
- map(0x0f000, 0x0ffff).ram().region("maincpu", 0xf000);
+ map(0x0f000, 0x0ffff).ram();
}
void cabaret_state::cabaret_portmap(address_map &map)
diff --git a/src/mame/drivers/calchase.cpp b/src/mame/drivers/calchase.cpp
index 3b71cc8ef9f..ded34063bcb 100644
--- a/src/mame/drivers/calchase.cpp
+++ b/src/mame/drivers/calchase.cpp
@@ -407,7 +407,7 @@ void calchase_state::calchase_map(address_map &map)
{
map(0x00000000, 0x0009ffff).ram();
map(0x000a0000, 0x000bffff).rw("vga", FUNC(trident_vga_device::mem_r), FUNC(trident_vga_device::mem_w)); // VGA VRAM
- map(0x000c0000, 0x000c7fff).ram().region("video_bios", 0);
+ map(0x000c0000, 0x000c7fff).rom().region("video_bios", 0);
map(0x000c8000, 0x000cffff).noprw();
//map(0x000d0000, 0x000d0003).ram(); // XYLINX - Sincronus serial communication
map(0x000d0004, 0x000d0005).r(FUNC(calchase_state::calchase_iocard1_r));
diff --git a/src/mame/drivers/calorie.cpp b/src/mame/drivers/calorie.cpp
index 78c2e54ebe2..439cf8d90a8 100644
--- a/src/mame/drivers/calorie.cpp
+++ b/src/mame/drivers/calorie.cpp
@@ -186,7 +186,6 @@ uint32_t calorie_state::screen_update_calorie(screen_device &screen, bitmap_ind1
m_fg_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
}
-
for (x = 0x400; x >= 0; x -= 4)
{
int xpos, ypos, tileno, color, flipx, flipy;
@@ -287,7 +286,7 @@ void calorie_state::calorie_map(address_map &map)
void calorie_state::decrypted_opcodes_map(address_map &map)
{
map(0x0000, 0x7fff).rom().share("decrypted_opcodes");
- map(0x8000, 0xbfff).rom();
+ map(0x8000, 0xbfff).rom().region("maincpu", 0x8000);
map(0xc000, 0xcfff).ram().share("ram");
}
diff --git a/src/mame/drivers/cbm2.cpp b/src/mame/drivers/cbm2.cpp
index ae2bbae0d14..75d408303bf 100644
--- a/src/mame/drivers/cbm2.cpp
+++ b/src/mame/drivers/cbm2.cpp
@@ -93,9 +93,9 @@ public:
m_basic(*this, "basic"),
m_kernal(*this, "kernal"),
m_charom(*this, "charom"),
- m_buffer_ram(*this, "buffer_ram"),
- m_extbuf_ram(*this, "extbuf_ram"),
- m_video_ram(*this, "video_ram"),
+ m_buffer_ram(*this, "buffer_ram", 0x800, ENDIANNESS_LITTLE),
+ m_extbuf_ram(*this, "extbuf_ram", 0x800, ENDIANNESS_LITTLE),
+ m_video_ram(*this, "video_ram", 0x800, ENDIANNESS_LITTLE),
m_pa(*this, "PA%u", 0),
m_pb(*this, "PB%u", 0),
m_lock(*this, "LOCK"),
@@ -132,9 +132,9 @@ public:
required_memory_region m_basic;
required_memory_region m_kernal;
required_memory_region m_charom;
- optional_shared_ptr<uint8_t> m_buffer_ram;
- optional_shared_ptr<uint8_t> m_extbuf_ram;
- optional_shared_ptr<uint8_t> m_video_ram;
+ memory_share_creator<uint8_t> m_buffer_ram;
+ memory_share_creator<uint8_t> m_extbuf_ram;
+ memory_share_creator<uint8_t> m_video_ram;
required_ioport_array<8> m_pa;
required_ioport_array<8> m_pb;
required_ioport m_lock;
@@ -259,7 +259,7 @@ public:
: cbm2_state(mconfig, type, tag),
m_pla2(*this, PLA2_TAG),
m_vic(*this, MOS6569_TAG),
- m_color_ram(*this, "color_ram"),
+ m_color_ram(*this, "color_ram", 0x400, ENDIANNESS_LITTLE),
m_statvid(1),
m_vicdotsel(1),
m_vicbnksel(0x03)
@@ -267,7 +267,7 @@ public:
required_device<pla_device> m_pla2;
required_device<mos6566_device> m_vic;
- optional_shared_ptr<uint8_t> m_color_ram;
+ memory_share_creator<uint8_t> m_color_ram;
DECLARE_MACHINE_START( p500 );
DECLARE_MACHINE_START( p500_ntsc );
@@ -2062,10 +2062,6 @@ void cbm2_state::device_timer(emu_timer &timer, device_timer_id id, int param, v
MACHINE_START_MEMBER( cbm2_state, cbm2 )
{
- // allocate memory
- m_video_ram.allocate(m_video_ram_size);
- m_buffer_ram.allocate(0x800);
-
// allocate timer
int todclk = (m_ntsc ? 60 : 50) * 2;
@@ -2115,9 +2111,6 @@ MACHINE_START_MEMBER( cbm2_state, cbm2_pal )
MACHINE_START_MEMBER( cbm2_state, cbm2x_ntsc )
{
- // allocate memory
- m_extbuf_ram.allocate(0x800);
-
MACHINE_START_CALL_MEMBER(cbm2_ntsc);
}
@@ -2128,9 +2121,6 @@ MACHINE_START_MEMBER( cbm2_state, cbm2x_ntsc )
MACHINE_START_MEMBER( cbm2_state, cbm2x_pal )
{
- // allocate memory
- m_extbuf_ram.allocate(0x800);
-
MACHINE_START_CALL_MEMBER(cbm2_pal);
}
@@ -2145,9 +2135,6 @@ MACHINE_START_MEMBER( p500_state, p500 )
MACHINE_START_CALL_MEMBER(cbm2);
- // allocate memory
- m_color_ram.allocate(0x400);
-
// state saving
save_item(NAME(m_statvid));
save_item(NAME(m_vicdotsel));
diff --git a/src/mame/drivers/cham24.cpp b/src/mame/drivers/cham24.cpp
index e8dd7e34f75..dcb1247683a 100644
--- a/src/mame/drivers/cham24.cpp
+++ b/src/mame/drivers/cham24.cpp
@@ -94,6 +94,7 @@ public:
void cham24_set_mirroring( int mirroring );
void cham24(machine_config &config);
void cham24_map(address_map &map);
+ void cham24_ppu_map(address_map &map);
};
@@ -229,6 +230,12 @@ void cham24_state::cham24_map(address_map &map)
map(0x8000, 0xffff).rom().w(FUNC(cham24_state::cham24_mapper_w));
}
+void cham24_state::cham24_ppu_map(address_map &map)
+{
+ map(0x0000, 0x1fff).bankr("bank1");
+ map(0x2000, 0x3eff).rw(FUNC(cham24_state::nt_r), FUNC(cham24_state::nt_w));
+}
+
static INPUT_PORTS_START( cham24 )
PORT_START("P1") /* IN0 */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)
@@ -272,7 +279,6 @@ void cham24_state::machine_reset()
memcpy(&dst[0xc000], &src[0x0f8000], 0x4000);
/* uses 8K swapping, all ROM!*/
- m_ppu->space(AS_PROGRAM).install_read_bank(0x0000, 0x1fff, "bank1");
membank("bank1")->set_base(memregion("gfx1")->base());
m_nt_page[0] = m_nt_ram.get();
@@ -302,6 +308,7 @@ void cham24_state::cham24(machine_config &config)
screen.set_screen_update("ppu", FUNC(ppu2c0x_device::screen_update));
PPU_2C02(config, m_ppu);
+ m_ppu->set_addrmap(0, &cham24_state::cham24_ppu_map);
m_ppu->set_cpu_tag(m_maincpu);
m_ppu->int_callback().set_inputline(m_maincpu, INPUT_LINE_NMI);
diff --git a/src/mame/drivers/chinagat.cpp b/src/mame/drivers/chinagat.cpp
index 377d928252b..e5726b28b30 100644
--- a/src/mame/drivers/chinagat.cpp
+++ b/src/mame/drivers/chinagat.cpp
@@ -525,7 +525,7 @@ void chinagat_state::main_map(address_map &map)
map(0x2800, 0x2fff).ram().w(FUNC(chinagat_state::ddragon_bgvideoram_w)).share("bgvideoram");
map(0x3000, 0x317f).w(m_palette, FUNC(palette_device::write8)).share("palette");
map(0x3400, 0x357f).w(m_palette, FUNC(palette_device::write8_ext)).share("palette_ext");
- map(0x3800, 0x397f).bankw("bank3").share("spriteram");
+ map(0x3800, 0x397f).ram().share("spriteram");
map(0x3e00, 0x3e04).w(FUNC(chinagat_state::interrupt_w));
map(0x3e06, 0x3e06).writeonly().share("scrolly_lo");
map(0x3e07, 0x3e07).writeonly().share("scrollx_lo");
diff --git a/src/mame/drivers/chsuper.cpp b/src/mame/drivers/chsuper.cpp
index 6593e92101f..b7711633c8a 100644
--- a/src/mame/drivers/chsuper.cpp
+++ b/src/mame/drivers/chsuper.cpp
@@ -215,7 +215,7 @@ void chsuper_state::chsuper_prg_map(address_map &map)
{
map(0x00000, 0x0efff).rom();
map(0x00000, 0x01fff).w(FUNC(chsuper_state::chsuper_vram_w));
- map(0x0f000, 0x0ffff).ram().region("maincpu", 0xf000);
+ map(0x0f000, 0x0ffff).ram();
map(0xfb000, 0xfbfff).ram().share("nvram");
}
diff --git a/src/mame/drivers/cninja.cpp b/src/mame/drivers/cninja.cpp
index b066e74301d..c203b6da185 100644
--- a/src/mame/drivers/cninja.cpp
+++ b/src/mame/drivers/cninja.cpp
@@ -145,6 +145,14 @@ void cninja_state::cninjabl_map(address_map &map)
map(0x1b4000, 0x1b4001).w(m_spriteram[0], FUNC(buffered_spriteram16_device::write)); /* DMA flag */
}
+void cninja_state::cninjabl2_map(address_map &map)
+{
+ cninja_map(map);
+
+ map(0x180000, 0x18ffff).ram();
+ map(0x1b4000, 0x1b4001).r(FUNC(cninja_state::cninjabl2_sprite_dma_r));
+}
+
uint16_t cninja_state::edrandy_protection_region_8_146_r(offs_t offset)
{
int real_address = 0x1a0000 + (offset *2);
@@ -909,6 +917,7 @@ void cninja_state::stoneage(machine_config &config)
void cninja_state::cninjabl2(machine_config &config)
{
stoneage(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cninja_state::cninjabl2_map);
m_audiocpu->set_addrmap(AS_PROGRAM, &cninja_state::cninjabl2_s_map);
m_screen->set_screen_update(FUNC(cninja_state::screen_update_cninjabl2));
@@ -2169,9 +2178,6 @@ ROM_END
void cninja_state::init_cninjabl2()
{
- m_maincpu->space(AS_PROGRAM).install_ram(0x180000, 0x18ffff);
- m_maincpu->space(AS_PROGRAM).install_read_handler(0x1b4000, 0x1b4001, read16smo_delegate(*this, FUNC(cninja_state::cninjabl2_sprite_dma_r)));
-
m_okibank->configure_entries(0, 8, memregion("oki2")->base(), 0x10000);
}
diff --git a/src/mame/drivers/combatsc.cpp b/src/mame/drivers/combatsc.cpp
index b0c537a6bc7..f937640435e 100644
--- a/src/mame/drivers/combatsc.cpp
+++ b/src/mame/drivers/combatsc.cpp
@@ -240,7 +240,7 @@ void combatsc_state::combatscb_bankselect_w(address_space &space, uint8_t data)
}
else
{
- space.install_read_bank(0x4000, 0x7fff, "bank1"); /* banked ROM */
+ space.install_read_bank(0x4000, 0x7fff, membank("bank1")); /* banked ROM */
space.unmap_write(0x4000, 0x7fff); /* banked ROM */
}
}
diff --git a/src/mame/drivers/compis.cpp b/src/mame/drivers/compis.cpp
index e1402cf5e43..2a72bbf4bf1 100644
--- a/src/mame/drivers/compis.cpp
+++ b/src/mame/drivers/compis.cpp
@@ -694,15 +694,15 @@ void compis_state::machine_start()
switch (m_ram->size())
{
case 256*1024:
- m_maincpu->space(AS_PROGRAM).install_ram(0x20000, 0x3ffff, nullptr);
+ m_maincpu->space(AS_PROGRAM).install_ram(0x20000, 0x3ffff, m_ram->pointer());
break;
case 512*1024:
- m_maincpu->space(AS_PROGRAM).install_ram(0x20000, 0x7ffff, nullptr);
+ m_maincpu->space(AS_PROGRAM).install_ram(0x20000, 0x7ffff, m_ram->pointer());
break;
case 768*1024:
- m_maincpu->space(AS_PROGRAM).install_ram(0x20000, 0xbffff, nullptr);
+ m_maincpu->space(AS_PROGRAM).install_ram(0x20000, 0xbffff, m_ram->pointer());
break;
}
diff --git a/src/mame/drivers/coolridr.cpp b/src/mame/drivers/coolridr.cpp
index cbb54e200b3..d54b9c5d15a 100644
--- a/src/mame/drivers/coolridr.cpp
+++ b/src/mame/drivers/coolridr.cpp
@@ -320,7 +320,7 @@ public:
m_workram_h(*this, "workrah"),
m_sound_dma(*this, "sound_dma"),
m_soundram(*this, "soundram%u", 1U),
- m_rom(*this, "share1"),
+ m_rom(*this, "maincpu"),
m_compressedgfx(*this, "compressedgfx"),
m_io_config(*this, "CONFIG"),
m_gfxdecode(*this, "gfxdecode"),
@@ -358,7 +358,7 @@ public:
required_shared_ptr<uint32_t> m_workram_h;
required_shared_ptr<uint32_t> m_sound_dma;
required_shared_ptr_array<uint16_t, 2> m_soundram;
- required_shared_ptr<uint32_t> m_rom;
+ required_region_ptr<uint32_t> m_rom;
required_region_ptr<uint8_t> m_compressedgfx;
required_ioport m_io_config;
required_device<gfxdecode_device> m_gfxdecode;
@@ -2779,7 +2779,7 @@ void coolridr_state::dma_w(address_space &space, offs_t offset, uint32_t data, u
void coolridr_state::system_h1_map(address_map &map)
{
- map(0x00000000, 0x001fffff).rom().share("share1").nopw();
+ map(0x00000000, 0x001fffff).rom().nopw();
map(0x01000000, 0x01ffffff).rom().region("gfx_data", 0x0000000);
map(0x03f40000, 0x03f4ffff).ram().share("txt_vram");//text tilemap + "lineram"
@@ -2790,7 +2790,7 @@ void coolridr_state::system_h1_map(address_map &map)
map(0x0400001c, 0x0400001f).w(FUNC(coolridr_state::fb_data_w));
map(0x06000000, 0x060fffff).ram().share("workrah");
- map(0x20000000, 0x201fffff).rom().share("share1");
+ map(0x20000000, 0x201fffff).rom().region("maincpu", 0);
map(0x60000000, 0x600003ff).nopw();
}
diff --git a/src/mame/drivers/crshrace.cpp b/src/mame/drivers/crshrace.cpp
index 250efe14715..387ad13de5e 100644
--- a/src/mame/drivers/crshrace.cpp
+++ b/src/mame/drivers/crshrace.cpp
@@ -167,7 +167,7 @@ void crshrace_state::main_map(address_map &map)
map(0xfff00a, 0xfff00b).portr("DSW1");
map(0xfff00e, 0xfff00f).portr("P3");
map(0xfff020, 0xfff03f).w(m_k053936, FUNC(k053936_device::ctrl_w));
- map(0xfff044, 0xfff047).writeonly(); // ??? moves during race
+ map(0xfff044, 0xfff047).nopw(); // ??? moves during race
}
void crshrace_state::sound_map(address_map &map)
diff --git a/src/mame/drivers/cv1k.cpp b/src/mame/drivers/cv1k.cpp
index 552016f3d9b..adbb12d4135 100644
--- a/src/mame/drivers/cv1k.cpp
+++ b/src/mame/drivers/cv1k.cpp
@@ -194,7 +194,7 @@ public:
m_serflash(*this, "game"),
m_eeprom(*this, "eeprom"),
m_ram(*this, "mainram"),
- m_rombase(*this, "rombase"),
+ m_rombase(*this, "maincpu"),
m_blitrate(*this, "BLITRATE"),
m_eepromout(*this, "EEPROMOUT"),
m_idleramoffs(0),
@@ -207,7 +207,7 @@ public:
required_device<rtc9701_device> m_eeprom;
required_shared_ptr<uint64_t> m_ram;
- required_shared_ptr<uint64_t> m_rombase;
+ required_region_ptr<uint64_t> m_rombase;
uint8_t flash_io_r(offs_t offset);
void flash_io_w(offs_t offset, uint8_t data);
@@ -342,7 +342,7 @@ void cv1k_state::serial_rtc_eeprom_w(offs_t offset, uint8_t data)
void cv1k_state::cv1k_map(address_map &map)
{
- map(0x00000000, 0x003fffff).rom().region("maincpu", 0).nopw().share("rombase"); // mmmbanc writes here on startup for some reason..
+ map(0x00000000, 0x003fffff).rom().region("maincpu", 0).nopw(); // mmmbanc writes here on startup for some reason..
map(0x0c000000, 0x0c7fffff).ram().share("mainram");// work RAM
map(0x10000000, 0x10000007).rw(FUNC(cv1k_state::flash_io_r), FUNC(cv1k_state::flash_io_w));
map(0x10400000, 0x10400007).w("ymz770", FUNC(ymz770_device::write));
@@ -353,7 +353,7 @@ void cv1k_state::cv1k_map(address_map &map)
void cv1k_state::cv1k_d_map(address_map &map)
{
- map(0x00000000, 0x003fffff).rom().region("maincpu", 0).nopw().share("rombase"); // mmmbanc writes here on startup for some reason..
+ map(0x00000000, 0x003fffff).rom().region("maincpu", 0).nopw(); // mmmbanc writes here on startup for some reason..
map(0x0c000000, 0x0cffffff).ram().share("mainram"); // work RAM
map(0x10000000, 0x10000007).rw(FUNC(cv1k_state::flash_io_r), FUNC(cv1k_state::flash_io_w));
map(0x10400000, 0x10400007).w("ymz770", FUNC(ymz770_device::write));
diff --git a/src/mame/drivers/dccons.cpp b/src/mame/drivers/dccons.cpp
index d89964525ae..eef412c89a1 100644
--- a/src/mame/drivers/dccons.cpp
+++ b/src/mame/drivers/dccons.cpp
@@ -379,7 +379,7 @@ void dc_cons_state::dc_flash_w(offs_t offset, uint8_t data)
void dc_cons_state::dc_map(address_map &map)
{
map(0x00000000, 0x001fffff).rom().nopw(); // BIOS
- map(0x00200000, 0x0021ffff).rw(FUNC(dc_cons_state::dc_flash_r), FUNC(dc_cons_state::dc_flash_w)).region("dcflash", 0x20000);
+ map(0x00200000, 0x0021ffff).rw(FUNC(dc_cons_state::dc_flash_r), FUNC(dc_cons_state::dc_flash_w));
map(0x005f6800, 0x005f69ff).rw(FUNC(dc_cons_state::dc_sysctrl_r), FUNC(dc_cons_state::dc_sysctrl_w));
map(0x005f6c00, 0x005f6cff).m(m_maple, FUNC(maple_dc_device::amap));
map(0x005f7000, 0x005f701f).rw(m_ata, FUNC(ata_interface_device::cs1_r), FUNC(ata_interface_device::cs1_w)).umask64(0x0000ffff0000ffff);
diff --git a/src/mame/drivers/ddenlovr.cpp b/src/mame/drivers/ddenlovr.cpp
index 8e59a701fa2..7f3d3e7b2a7 100644
--- a/src/mame/drivers/ddenlovr.cpp
+++ b/src/mame/drivers/ddenlovr.cpp
@@ -2031,7 +2031,7 @@ void ddenlovr_state::quiz365_map(address_map &map)
map(0x200c02, 0x200c03).r(FUNC(ddenlovr_state::quiz365_protection_r)); // Protection
map(0x200e0a, 0x200e0d).w(FUNC(ddenlovr_state::quiz365_protection_w)); // Protection
-// map(0x201000, 0x2017ff).writeonly(); // ?
+// map(0x201000, 0x2017ff).nopw(); // ?
map(0x300201, 0x300201).w(FUNC(ddenlovr_state::ddenlovr_select2_w));
map(0x300203, 0x300203).w(FUNC(ddenlovr_state::quiz365_coincounter_w)); // Coin Counters + more stuff written on startup
@@ -2085,7 +2085,7 @@ void ddenlovr_state::ddenlovj_map(address_map &map)
map(0x000000, 0x07ffff).rom(); // ROM
map(0x200000, 0x2003ff).w(FUNC(ddenlovr_state::ddenlovr_palette_w)).umask16(0x00ff);
-// map(0x201000, 0x2017ff).writeonly(); // ? B0 on startup, then 00
+// map(0x201000, 0x2017ff).nopq(); // ? B0 on startup, then 00
map(0x300040, 0x300047).w(FUNC(ddenlovr_state::ddenlovr_palette_base_w)).umask16(0x00ff);
map(0x300048, 0x30004f).w(FUNC(ddenlovr_state::ddenlovr_palette_mask_w)).umask16(0x00ff);
@@ -2255,7 +2255,7 @@ void ddenlovr_state::nettoqc_map(address_map &map)
map(0x200000, 0x2003ff).w(FUNC(ddenlovr_state::ddenlovr_palette_w)).umask16(0x00ff);
map(0x200c02, 0x200c03).r(FUNC(ddenlovr_state::nettoqc_protection1_r)); // Protection 1
map(0x200e0a, 0x200e0d).writeonly().share("protection1"); // ""
- map(0x201000, 0x2017ff).writeonly(); // ?
+ map(0x201000, 0x2017ff).nopw(); // ?
map(0x300040, 0x300047).w(FUNC(ddenlovr_state::ddenlovr_palette_base_w)).umask16(0x00ff);
map(0x300048, 0x30004f).w(FUNC(ddenlovr_state::ddenlovr_palette_mask_w)).umask16(0x00ff);
@@ -2310,7 +2310,7 @@ void ddenlovr_state::ultrchmp_map(address_map &map)
map(0xd00c02, 0xd00c03).r(FUNC(ddenlovr_state::nettoqc_protection1_r)); // Protection 1
map(0xd00e0a, 0xd00e0d).writeonly().share("protection1"); // ""
- map(0xd01000, 0xd017ff).writeonly(); // ?
+ map(0xd01000, 0xd017ff).nopw(); // ?
map(0xe00040, 0xe00047).w(FUNC(ddenlovr_state::ddenlovr_palette_base_w)).umask16(0x00ff);
map(0xe00048, 0xe0004f).w(FUNC(ddenlovr_state::ddenlovr_palette_mask_w)).umask16(0x00ff);
@@ -2520,7 +2520,7 @@ void mmpanic_state::mmpanic_map(address_map &map)
map(0x0000, 0x5fff).rom(); // ROM
map(0x0051, 0x0051).r(FUNC(mmpanic_state::magic_r)); // ?
map(0x6000, 0x6fff).ram(); // RAM
- map(0x7000, 0x7fff).bankrw("bank2"); // RAM (Banked)
+ map(0x7000, 0x7fff).ram(); // RAM (Banked)
map(0x8000, 0xffff).bankr("bank1"); // ROM (Banked)
map(0x8000, 0x81ff).w(FUNC(mmpanic_state::ddenlovr_palette_w));
}
diff --git a/src/mame/drivers/ddragon.cpp b/src/mame/drivers/ddragon.cpp
index 3de10c7f244..155b040507d 100644
--- a/src/mame/drivers/ddragon.cpp
+++ b/src/mame/drivers/ddragon.cpp
@@ -471,7 +471,7 @@ void ddragon_state::ddragon_base_map(address_map &map)
map(0x1000, 0x11ff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette");
map(0x1200, 0x13ff).ram().w(m_palette, FUNC(palette_device::write8_ext)).share("palette_ext");
map(0x1800, 0x1fff).ram().w(FUNC(ddragon_state::ddragon_fgvideoram_w)).share("fgvideoram");
- map(0x2000, 0x21ff).rw(FUNC(ddragon_state::ddragon_comram_r), FUNC(ddragon_state::ddragon_comram_w)).share("comram").mirror(0x0600);
+ map(0x2000, 0x21ff).rw(FUNC(ddragon_state::ddragon_comram_r), FUNC(ddragon_state::ddragon_comram_w)).mirror(0x0600);
map(0x2800, 0x2fff).ram().share("spriteram");
map(0x3000, 0x37ff).ram().w(FUNC(ddragon_state::ddragon_bgvideoram_w)).share("bgvideoram");
map(0x3800, 0x3800).portr("P1");
@@ -517,7 +517,7 @@ void ddragon_state::dd2_map(address_map &map)
{
map(0x0000, 0x17ff).ram();
map(0x1800, 0x1fff).ram().w(FUNC(ddragon_state::ddragon_fgvideoram_w)).share("fgvideoram");
- map(0x2000, 0x21ff).rw(FUNC(ddragon_state::ddragon_comram_r), FUNC(ddragon_state::ddragon_comram_w)).share("comram").mirror(0x0600);
+ map(0x2000, 0x21ff).rw(FUNC(ddragon_state::ddragon_comram_r), FUNC(ddragon_state::ddragon_comram_w)).mirror(0x0600);
map(0x2800, 0x2fff).ram().share("spriteram");
map(0x3000, 0x37ff).ram().w(FUNC(ddragon_state::ddragon_bgvideoram_w)).share("bgvideoram");
map(0x3800, 0x3800).portr("P1");
diff --git a/src/mame/drivers/deadang.cpp b/src/mame/drivers/deadang.cpp
index edef6c2e8a2..9b4d3d55eea 100644
--- a/src/mame/drivers/deadang.cpp
+++ b/src/mame/drivers/deadang.cpp
@@ -72,17 +72,17 @@ void deadang_state::main_map(address_map &map)
map(0x00000, 0x037ff).ram();
map(0x03800, 0x03fff).ram().share("spriteram");
map(0x04000, 0x04fff).ram().share("share1");
- map(0x05000, 0x05fff).writeonly();
+ map(0x05000, 0x05fff).nopw();
map(0x06000, 0x0600f).rw(m_seibu_sound, FUNC(seibu_sound_device::main_r), FUNC(seibu_sound_device::main_w)).umask16(0x00ff);
- map(0x06010, 0x07fff).writeonly();
+ map(0x06010, 0x07fff).nopw();
map(0x08000, 0x087ff).w(FUNC(deadang_state::text_w)).share("videoram");
- map(0x08800, 0x0bfff).writeonly();
+ map(0x08800, 0x0bfff).nopw();
map(0x0a000, 0x0a001).portr("P1_P2");
map(0x0a002, 0x0a003).portr("DSW");
map(0x0c000, 0x0cfff).w(m_palette, FUNC(palette_device::write16)).share("palette");
- map(0x0d000, 0x0dfff).writeonly();
+ map(0x0d000, 0x0dfff).nopw();
map(0x0e000, 0x0e0ff).ram().share("scroll_ram");
- map(0x0e100, 0x0ffff).writeonly();
+ map(0x0e100, 0x0ffff).nopw();
map(0xc0000, 0xfffff).rom();
}
@@ -92,16 +92,16 @@ void popnrun_state::popnrun_main_map(address_map &map)
map(0x03c00, 0x03dff).ram().share("spriteram");
map(0x03e00, 0x03fff).ram();
map(0x04000, 0x04fff).ram().share("share1");
- map(0x05000, 0x05fff).writeonly();
+ map(0x05000, 0x05fff).nopw();
map(0x06000, 0x0600f).rw(m_seibu_sound, FUNC(seibu_sound_device::main_r), FUNC(seibu_sound_device::main_w)).umask16(0x00ff);
- map(0x06010, 0x07fff).writeonly();
+ map(0x06010, 0x07fff).nopw();
map(0x08000, 0x08fff).ram().w(FUNC(popnrun_state::popnrun_text_w)).share("videoram");
map(0x0a000, 0x0a001).portr("P1_P2");
map(0x0a002, 0x0a003).portr("DSW");
map(0x0c000, 0x0cfff).w(m_palette, FUNC(palette_device::write16)).share("palette");
- map(0x0d000, 0x0dfff).writeonly();
+ map(0x0d000, 0x0dfff).nopw();
map(0x0e000, 0x0e0ff).ram().share("scroll_ram");
- map(0x0e100, 0x0ffff).writeonly();
+ map(0x0e100, 0x0ffff).nopw();
map(0xc0000, 0xfffff).rom();
}
diff --git a/src/mame/drivers/dec0.cpp b/src/mame/drivers/dec0.cpp
index b320fac8a5e..9750b38a139 100644
--- a/src/mame/drivers/dec0.cpp
+++ b/src/mame/drivers/dec0.cpp
@@ -456,6 +456,15 @@ void dec0_state::dec0_map(address_map &map)
map(0xffc000, 0xffc7ff).ram().share("spriteram");
}
+void dec0_state::ffantasybl_map(address_map &map)
+{
+ dec0_map(map);
+
+ map(0x0024c880, 0x0024cbff).ram(); // what is this? layer 3-related??
+ map(0x00242024, 0x00242025).r(FUNC(dec0_state::ffantasybl_242024_r));
+ map(0x00ff87ee, 0x00ff87ef).portr("VBLANK");
+}
+
void dec0_state::dec0_tb_map(address_map &map)
{
dec0_map(map);
@@ -2134,10 +2143,11 @@ void dec0_state::hippodrm(machine_config &config)
}
void dec0_state::ffantasybl(machine_config &config)
-
{
dec0(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &dec0_state::ffantasybl_map);
+
// H6280(config, m_subcpu, XTAL(21'477'272) / 16);
// m_subcpu->set_addrmap(AS_PROGRAM, &dec0_state::hippodrm_sub_map);
// m_subcpu->add_route(ALL_OUTPUTS, "mono", 0); // internal sound unused
@@ -4122,14 +4132,6 @@ uint16_t dec0_state::ffantasybl_242024_r()
return 0xffff;
}
-void dec0_state::init_ffantasybl()
-{
- m_maincpu->space(AS_PROGRAM).install_ram(0x24c880, 0x24cbff); // what is this? layer 3-related??
-
- m_maincpu->space(AS_PROGRAM).install_read_handler(0x00242024, 0x00242025, read16smo_delegate(*this, FUNC(dec0_state::ffantasybl_242024_r)));
- m_maincpu->space(AS_PROGRAM).install_read_port(0x00ff87ee, 0x00ff87ef, "VBLANK");
-}
-
/******************************************************************************/
// YEAR, NAME, PARENT, MACHINE, INPUT, STATE/DEVICE, INIT, MONITOR,COMPANY, FULLNAME, FLAGS
@@ -4171,7 +4173,7 @@ GAME( 1988, drgninjab, baddudes, drgninjab, drgninja, dec0_state, init_drgni
// this is a common bootleg board
GAME( 1989, midresb, midres, midresb, midresb, dec0_state, init_midresb, ROT0, "bootleg", "Midnight Resistance (bootleg with 68705)", MACHINE_SUPPORTS_SAVE ) // need to hook up 68705? (probably unused)
GAME( 1989, midresbj, midres, midresbj, midresb, dec0_state, init_midresb, ROT0, "bootleg", "Midnight Resistance (Joystick bootleg)", MACHINE_SUPPORTS_SAVE )
-GAME( 1989, ffantasybl, hippodrm, ffantasybl, ffantasybl, dec0_state, init_ffantasybl, ROT0, "bootleg", "Fighting Fantasy (bootleg with 68705)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) // 68705 not dumped, might be the same as midresb
+GAME( 1989, ffantasybl, hippodrm, ffantasybl, ffantasybl, dec0_state, empty_init, ROT0, "bootleg", "Fighting Fantasy (bootleg with 68705)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) // 68705 not dumped, might be the same as midresb
GAME( 1988, drgninjab2, baddudes, drgninjab, drgninja, dec0_state, init_drgninja, ROT0, "bootleg", "Dragonninja (bootleg with 68705)", MACHINE_SUPPORTS_SAVE ) // is this the same board as above? (region warning hacked to World, but still shows Japanese text), 68705 dumped but not hooked up
// these are different to the above but quite similar to each other
diff --git a/src/mame/drivers/dec8.cpp b/src/mame/drivers/dec8.cpp
index e443f17e22a..902278757d0 100644
--- a/src/mame/drivers/dec8.cpp
+++ b/src/mame/drivers/dec8.cpp
@@ -573,7 +573,7 @@ void dec8_state::cobra_map(address_map &map)
map(0x2000, 0x27ff).ram().w(FUNC(dec8_state::dec8_videoram_w)).share("videoram");
map(0x2800, 0x2fff).ram().share("spriteram");
map(0x3000, 0x31ff).ram().w(m_palette, FUNC(deco_rmc3_device::write8)).share("palette");
- map(0x3200, 0x37ff).writeonly(); /* Unused */
+ map(0x3200, 0x37ff).nopw(); /* Unused */
map(0x3800, 0x3800).portr("IN0"); /* Player 1 */
map(0x3801, 0x3801).portr("IN1"); /* Player 2 */
map(0x3802, 0x3802).portr("DSW0"); /* Dip 1 */
diff --git a/src/mame/drivers/decocass.cpp b/src/mame/drivers/decocass.cpp
index 43327afaf76..cfce798e848 100644
--- a/src/mame/drivers/decocass.cpp
+++ b/src/mame/drivers/decocass.cpp
@@ -122,6 +122,13 @@ void decocass_state::decocass_map(address_map &map)
map(0xf000, 0xffff).rom();
}
+void decocass_state::decocrom_map(address_map &map)
+{
+ decocass_map(map);
+ map(0x6000, 0xafff).bankr("bank1").w(FUNC(decocass_state::decocass_de0091_w));
+ map(0xe900, 0xe900).w(FUNC(decocass_state::decocass_e900_w));
+}
+
void decocass_state::decocass_sound_map(address_map &map)
{
map(0x0000, 0x0fff).ram();
@@ -2073,15 +2080,10 @@ void decocass_state::init_decocrom()
init_decocass();
/* convert charram to a banked ROM */
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x6000, 0xafff, "bank1");
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x6000, 0xafff, write8sm_delegate(*this, FUNC(decocass_state::decocass_de0091_w)));
membank("bank1")->configure_entry(0, m_charram);
membank("bank1")->configure_entry(1, memregion("user3")->base());
membank("bank1")->configure_entry(2, memregion("user3")->base()+0x5000);
membank("bank1")->set_entry(0);
-
- /* install the bank selector */
- m_maincpu->space(AS_PROGRAM).install_write_handler(0xe900, 0xe900, write8smo_delegate(*this, FUNC(decocass_state::decocass_e900_w)));
}
uint8_t decocass_state::cdsteljn_input_r(offs_t offset)
diff --git a/src/mame/drivers/dgn_beta.cpp b/src/mame/drivers/dgn_beta.cpp
index 161ed880f78..ca131c75f3e 100644
--- a/src/mame/drivers/dgn_beta.cpp
+++ b/src/mame/drivers/dgn_beta.cpp
@@ -173,7 +173,6 @@ void dgn_beta_state::dgnbeta_map(address_map &map)
map(0xFE00, 0xFE0F).rw(FUNC(dgn_beta_state::dgn_beta_page_r), FUNC(dgn_beta_state::dgn_beta_page_w));
map(0xfe10, 0xfEff).noprw();
map(0xFF00, 0xFFFF).bankrw("bank17");
-
}
diff --git a/src/mame/drivers/dgpix.cpp b/src/mame/drivers/dgpix.cpp
index e06bdcb99b2..e571ec9a838 100644
--- a/src/mame/drivers/dgpix.cpp
+++ b/src/mame/drivers/dgpix.cpp
@@ -359,7 +359,7 @@ void dgpix_state::mem_map(address_map &map)
map(0x40000000, 0x4003ffff).rw(FUNC(dgpix_state::vram_r), FUNC(dgpix_state::vram_w));
map(0xe0000000, 0xe1ffffff).rw(FUNC(dgpix_state::flash_r), FUNC(dgpix_state::flash_w));
map(0xe2000000, 0xe3ffffff).rw(FUNC(dgpix_state::flash_r), FUNC(dgpix_state::flash_w));
- map(0xffc00000, 0xffffffff).rom().region("flash", 0x1c00000).share("nvram");
+ map(0xffc00000, 0xffffffff).rom().region("flash", 0x1c00000);
}
void dgpix_state::io_map(address_map &map)
diff --git a/src/mame/drivers/diverboy.cpp b/src/mame/drivers/diverboy.cpp
index 4f456743112..1cc743beea6 100644
--- a/src/mame/drivers/diverboy.cpp
+++ b/src/mame/drivers/diverboy.cpp
@@ -177,8 +177,8 @@ void diverboy_state::diverboy_map(address_map &map)
map(0x180008, 0x180009).portr("COINS");
// map(0x18000a, 0x18000b).nopr();
// map(0x18000c, 0x18000d).nopw();
- map(0x320000, 0x3207ff).writeonly(); /* ?? */
- map(0x322000, 0x3227ff).writeonly(); /* ?? */
+ map(0x320000, 0x3207ff).nopw(); /* ?? */
+ map(0x322000, 0x3227ff).nopw(); /* ?? */
// map(0x340000, 0x340001).nopw();
// map(0x340002, 0x340003).nopw();
}
diff --git a/src/mame/drivers/djboy.cpp b/src/mame/drivers/djboy.cpp
index acdefe1c530..01eff54e7cb 100644
--- a/src/mame/drivers/djboy.cpp
+++ b/src/mame/drivers/djboy.cpp
@@ -206,9 +206,7 @@ void djboy_state::mastercpu_am(address_map &map)
map(0x8000, 0xafff).bankr("master_bank_l");
map(0xb000, 0xbfff).rw(m_pandora, FUNC(kaneko_pandora_device::spriteram_r), FUNC(kaneko_pandora_device::spriteram_w));
map(0xc000, 0xdfff).bankr("master_bank");
- map(0xe000, 0xefff).ram().share("share1");
- map(0xf000, 0xf7ff).ram();
- map(0xf800, 0xffff).ram();
+ map(0xe000, 0xffff).ram().share("share1");
}
void djboy_state::mastercpu_port_am(address_map &map)
diff --git a/src/mame/drivers/dkong.cpp b/src/mame/drivers/dkong.cpp
index 3d8c7c68ec3..7d65ba631be 100644
--- a/src/mame/drivers/dkong.cpp
+++ b/src/mame/drivers/dkong.cpp
@@ -530,7 +530,7 @@ MACHINE_RESET_MEMBER(dkong_state,dkong)
MACHINE_RESET_MEMBER(dkong_state,ddk)
{
- dk_braze_a15(!membank("bank1")->entry());
+ dk_braze_a15(!m_bank1->entry());
}
MACHINE_RESET_MEMBER(dkong_state,strtheat)
@@ -540,9 +540,9 @@ MACHINE_RESET_MEMBER(dkong_state,strtheat)
MACHINE_RESET_CALL_MEMBER(dkong);
/* The initial state of the counter is 0x08 */
- membank("bank1")->configure_entries(0, 4, &ROM[0x10000], 0x4000);
+ m_bank1->configure_entries(0, 4, &ROM[0x10000], 0x4000);
m_decrypt_counter = 0x08;
- membank("bank1")->set_entry(0);
+ m_bank1->set_entry(0);
}
MACHINE_RESET_MEMBER(dkong_state,drakton)
@@ -552,9 +552,9 @@ MACHINE_RESET_MEMBER(dkong_state,drakton)
MACHINE_RESET_CALL_MEMBER(dkong);
/* The initial state of the counter is 0x09 */
- membank("bank1")->configure_entries(0, 4, &ROM[0x10000], 0x4000);
+ m_bank1->configure_entries(0, 4, &ROM[0x10000], 0x4000);
m_decrypt_counter = 0x09;
- membank("bank1")->set_entry(1);
+ m_bank1->set_entry(1);
}
@@ -649,10 +649,10 @@ uint8_t dkong_state::epos_decrypt_rom(offs_t offset)
switch(m_decrypt_counter)
{
- case 0x08: membank("bank1")->set_entry(0); break;
- case 0x09: membank("bank1")->set_entry(1); break;
- case 0x0A: membank("bank1")->set_entry(2); break;
- case 0x0B: membank("bank1")->set_entry(3); break;
+ case 0x08: m_bank1->set_entry(0); break;
+ case 0x09: m_bank1->set_entry(1); break;
+ case 0x0A: m_bank1->set_entry(2); break;
+ case 0x0B: m_bank1->set_entry(3); break;
default:
logerror("Invalid counter = %02X\n",m_decrypt_counter);
break;
@@ -1619,8 +1619,8 @@ uint8_t dkong_state::braze_eeprom_r()
WRITE_LINE_MEMBER(dkong_state::dk_braze_a15)
{
- membank("bank1")->set_entry(state & 0x01);
- membank("bank2")->set_entry(state & 0x01);
+ m_bank1->set_entry(state & 0x01);
+ m_bank2->set_entry(state & 0x01);
}
void dkong_state::dk_braze_a15_w(uint8_t data)
@@ -3576,7 +3576,7 @@ void dkong_state::init_drakton()
{7,1,4,0,3,6,2,5},
};
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x3fff, "bank1" );
+ m_maincpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x3fff, m_bank1 );
/* While the PAL supports up to 16 decryption methods, only four
are actually used in the PAL. Therefore, we'll take a little
@@ -3598,7 +3598,7 @@ void dkong_state::init_strtheat()
{6,3,4,1,0,7,2,5},
};
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x3fff, "bank1" );
+ m_maincpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x3fff, m_bank1 );
/* While the PAL supports up to 16 decryption methods, only four
are actually used in the PAL. Therefore, we'll take a little
@@ -3617,15 +3617,15 @@ void dkong_state::dk_braze_decrypt()
{
m_decrypted = std::make_unique<uint8_t[]>(0x10000);
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x5fff, "bank1");
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x8000, 0xffff, "bank2");
+ m_maincpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x5fff, m_bank1);
+ m_maincpu->space(AS_PROGRAM).install_read_bank(0x8000, 0xffff, m_bank2);
braze_decrypt_rom(m_decrypted.get());
- membank("bank1")->configure_entries(0, 2, m_decrypted.get(), 0x8000);
- membank("bank1")->set_entry(0);
- membank("bank2")->configure_entries(0, 2, m_decrypted.get(), 0x8000);
- membank("bank2")->set_entry(0);
+ m_bank1->configure_entries(0, 2, m_decrypted.get(), 0x8000);
+ m_bank1->set_entry(0);
+ m_bank2->configure_entries(0, 2, m_decrypted.get(), 0x8000);
+ m_bank2->set_entry(0);
}
void dkong_state::init_dkonghs()
diff --git a/src/mame/drivers/dreamwld.cpp b/src/mame/drivers/dreamwld.cpp
index 896deba394c..0f386dfe0a2 100644
--- a/src/mame/drivers/dreamwld.cpp
+++ b/src/mame/drivers/dreamwld.cpp
@@ -120,10 +120,10 @@ public:
dreamwld_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_spriteram(*this, "spriteram")
- , m_vram(*this, "vram_%u", 0U, u8(32))
+ , m_vram(*this, "vram_%u", 0U)
, m_vregs(*this, "vregs")
, m_workram(*this, "workram")
- , m_lineram(*this, "lineram", 32)
+ , m_lineram(*this, "lineram")
, m_spritelut(*this, "spritelut")
, m_okibank(*this, "oki%ubank", 1)
, m_dsw(*this, "DSW")
diff --git a/src/mame/drivers/ec184x.cpp b/src/mame/drivers/ec184x.cpp
index 03949a4a4d1..b79b2b61923 100644
--- a/src/mame/drivers/ec184x.cpp
+++ b/src/mame/drivers/ec184x.cpp
@@ -136,8 +136,7 @@ void ec184x_state::memboard_w(offs_t offset, uint8_t data)
for (int i = 0; i < 4; i++)
m_memory.enable[i] &= 0xfb;
// enable read access
- membank("bank10")->set_base(m_ram->pointer() + offset * EC1841_MEMBOARD_SIZE);
- program.install_read_bank(0, EC1841_MEMBOARD_SIZE - 1, "bank10");
+ program.install_rom(0, EC1841_MEMBOARD_SIZE - 1, m_ram->pointer() + offset * EC1841_MEMBOARD_SIZE);
LOG("ec1841_memboard_w map_read(%d)\n", offset);
}
@@ -146,8 +145,7 @@ void ec184x_state::memboard_w(offs_t offset, uint8_t data)
for (int i = 0; i < 4; i++)
m_memory.enable[i] &= 0xf7;
// enable write access
- membank("bank20")->set_base(m_ram->pointer() + offset * EC1841_MEMBOARD_SIZE);
- program.install_write_bank(0, EC1841_MEMBOARD_SIZE - 1, "bank20");
+ program.install_writeonly(0, EC1841_MEMBOARD_SIZE - 1, m_ram->pointer() + offset * EC1841_MEMBOARD_SIZE);
LOG("ec1841_memboard_w map_write(%d)\n", offset);
}
@@ -158,8 +156,7 @@ void ec184x_state::init_ec1840()
{
address_space &program = m_maincpu->space(AS_PROGRAM);
- program.install_readwrite_bank(0, m_ram->size()-1, "bank10");
- membank("bank10")->set_base(m_ram->pointer());
+ program.install_ram(0, m_ram->size()-1, m_ram->pointer());
}
void ec184x_state::init_ec1841()
@@ -169,20 +166,13 @@ void ec184x_state::init_ec1841()
m_memory.boards = m_ram->size() / EC1841_MEMBOARD_SIZE;
if (m_memory.boards > 4) m_memory.boards = 4;
- program.install_read_bank(0, EC1841_MEMBOARD_SIZE-1, "bank10");
- program.install_write_bank(0, EC1841_MEMBOARD_SIZE-1, "bank20");
-
- membank("bank10")->set_base(m_ram->pointer());
- membank("bank20")->set_base(m_ram->pointer());
+ program.install_ram(0, EC1841_MEMBOARD_SIZE-1, m_ram->pointer());
// 640K configuration is special -- 512K board mapped at 0 + 128K board mapped at 512K
// XXX verify this was actually the case
if (m_ram->size() == 640 * 1024)
{
- program.install_read_bank(EC1841_MEMBOARD_SIZE, m_ram->size() - 1, "bank11");
- program.install_write_bank(EC1841_MEMBOARD_SIZE, m_ram->size() - 1, "bank21");
- membank("bank11")->set_base(m_ram->pointer() + EC1841_MEMBOARD_SIZE);
- membank("bank21")->set_base(m_ram->pointer() + EC1841_MEMBOARD_SIZE);
+ program.install_ram(EC1841_MEMBOARD_SIZE, m_ram->size() - 1, m_ram->pointer() + EC1841_MEMBOARD_SIZE);
}
}
diff --git a/src/mame/drivers/elf.cpp b/src/mame/drivers/elf.cpp
index 217a754324c..8f1ac6d11fc 100644
--- a/src/mame/drivers/elf.cpp
+++ b/src/mame/drivers/elf.cpp
@@ -80,7 +80,7 @@ void elf2_state::elf2_mem(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
- map(0x0000, 0x00ff).bankrw("bank1");
+ // Ram is added dynamically
}
void elf2_state::elf2_io(address_map &map)
@@ -212,10 +212,8 @@ void elf2_state::machine_start()
m_led_h->rbi_w(1);
/* setup memory banking */
- program.install_read_bank(0x0000, 0x00ff, "bank1");
+ program.install_rom(0x0000, 0x00ff, m_ram->pointer());
program.install_write_handler(0x0000, 0x00ff, write8sm_delegate(*this, FUNC(elf2_state::memory_w)));
- membank("bank1")->configure_entry(0, m_ram->pointer());
- membank("bank1")->set_entry(0);
/* register for state saving */
save_item(NAME(m_data));
diff --git a/src/mame/drivers/emu68k.cpp b/src/mame/drivers/emu68k.cpp
index f4deb4ebf30..8a4eb6367f0 100644
--- a/src/mame/drivers/emu68k.cpp
+++ b/src/mame/drivers/emu68k.cpp
@@ -63,7 +63,7 @@ void emu68k_state::proteus1_map(address_map &map)
map(0x000000, 0x01ffff).rom().region("program", 0);
map(0x600080, 0x600083).rw("lcdc", FUNC(hd44780_device::read), FUNC(hd44780_device::write)).umask16(0x00ff);
map(0x600100, 0x60012f).rw(m_mfp, FUNC(mc68901_device::read), FUNC(mc68901_device::write)).umask16(0x00ff);
- map(0x800000, 0x8003ff).writeonly(); // ???
+ map(0x800000, 0x8003ff).nopw(); // ???
map(0xffc000, 0xffffff).ram();
}
@@ -72,7 +72,7 @@ void emu68k_state::proteusxr_map(address_map &map)
map(0x000000, 0x01ffff).rom().region("program", 0);
map(0x400000, 0x400001).nopw(); // ???
map(0x700000, 0x700003).rw("lcdc", FUNC(hd44780_device::read), FUNC(hd44780_device::write)).umask16(0x00ff);
- map(0x800000, 0x8003ff).writeonly(); // ???
+ map(0x800000, 0x8003ff).nopw(); // ???
map(0x900000, 0x90002f).rw(m_mfp, FUNC(mc68901_device::read), FUNC(mc68901_device::write)).umask16(0x00ff);
map(0xa00000, 0xa00001).nopr(); // watchdog?
map(0xb00000, 0xb00001).nopw(); // ???
@@ -84,7 +84,7 @@ void emu68k_state::vintkeys_map(address_map &map)
map(0x000000, 0x03ffff).rom().region("program", 0);
map(0x600080, 0x600083).rw("lcdc", FUNC(hd44780_device::read), FUNC(hd44780_device::write)).umask16(0x00ff);
map(0x600100, 0x60012f).rw(m_mfp, FUNC(mc68901_device::read), FUNC(mc68901_device::write)).umask16(0x00ff);
- map(0x800000, 0x8003ff).writeonly(); // ???
+ map(0x800000, 0x8003ff).nopw(); // ???
map(0xffc000, 0xffffff).ram();
}
@@ -93,7 +93,7 @@ void emu68k_state::phatt_map(address_map &map)
map(0x000000, 0x07ffff).rom().region("program", 0);
map(0x600080, 0x600083).rw("lcdc", FUNC(hd44780_device::read), FUNC(hd44780_device::write)).umask16(0x00ff);
map(0x600100, 0x60012f).rw(m_mfp, FUNC(mc68901_device::read), FUNC(mc68901_device::write)).umask16(0x00ff);
- map(0x800000, 0x8003ff).writeonly(); // ???
+ map(0x800000, 0x8003ff).nopw(); // ???
map(0xffc000, 0xffffff).ram();
}
diff --git a/src/mame/drivers/eolith16.cpp b/src/mame/drivers/eolith16.cpp
index d3ad8c11532..a857294be28 100644
--- a/src/mame/drivers/eolith16.cpp
+++ b/src/mame/drivers/eolith16.cpp
@@ -28,7 +28,7 @@ public:
eolith16_state(const machine_config &mconfig, device_type type, const char *tag)
: eolith_state(mconfig, type, tag)
, m_special_io(*this, "SPECIAL")
- , m_vram(*this, "vram", 16)
+ , m_vram(*this, "vram")
, m_vrambank(*this, "vrambank")
{
}
diff --git a/src/mame/drivers/exidy.cpp b/src/mame/drivers/exidy.cpp
index 0ffecf4aa16..4f69a08d194 100644
--- a/src/mame/drivers/exidy.cpp
+++ b/src/mame/drivers/exidy.cpp
@@ -1730,8 +1730,7 @@ void exidy_state::init_phantoma()
m_color_latch[0] = 0x09;
/* the ROM is actually mapped high */
- m_maincpu->space(AS_PROGRAM).install_read_bank(0xf800, 0xffff, "bank1");
- membank("bank1")->set_base(memregion("maincpu")->base() + 0xf800);
+ m_maincpu->space(AS_PROGRAM).install_rom(0xf800, 0xffff, memregion("maincpu")->base() + 0xf800);
}
diff --git a/src/mame/drivers/exidy440.cpp b/src/mame/drivers/exidy440.cpp
index d7ae59f1a2f..ca2185b56f1 100644
--- a/src/mame/drivers/exidy440.cpp
+++ b/src/mame/drivers/exidy440.cpp
@@ -306,7 +306,7 @@ void exidy440_state::exidy440_bank_select(uint8_t bank)
if (bank == 0 && m_bank != 0)
m_maincpu->space(AS_PROGRAM).install_read_handler(0x4000, 0x7fff, read8sm_delegate(*this, FUNC(exidy440_state::showdown_bank0_r)));
else if (bank != 0 && m_bank == 0)
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x4000, 0x7fff, "bank1");
+ m_maincpu->space(AS_PROGRAM).install_read_bank(0x4000, 0x7fff, membank("bank1"));
}
/* select the bank and update the bank pointer */
diff --git a/src/mame/drivers/exp85.cpp b/src/mame/drivers/exp85.cpp
index 465e6b6e022..a2dadcd4bb0 100644
--- a/src/mame/drivers/exp85.cpp
+++ b/src/mame/drivers/exp85.cpp
@@ -167,11 +167,7 @@ DEVICE_INPUT_DEFAULTS_END
void exp85_state::machine_start()
{
- address_space &program = m_maincpu->space(AS_PROGRAM);
-
/* setup memory banking */
- program.install_read_bank(0x0000, 0x07ff, "bank1");
- program.unmap_write(0x0000, 0x07ff);
membank("bank1")->configure_entry(0, m_rom->base() + 0xf000);
membank("bank1")->configure_entry(1, m_rom->base());
membank("bank1")->set_entry(0);
diff --git a/src/mame/drivers/famibox.cpp b/src/mame/drivers/famibox.cpp
index 5dbb7e399ba..636fe3fe8d0 100644
--- a/src/mame/drivers/famibox.cpp
+++ b/src/mame/drivers/famibox.cpp
@@ -120,6 +120,7 @@ private:
void famicombox_bankswitch(uint8_t bank);
void famicombox_reset();
void famibox_map(address_map &map);
+ void famibox_ppu_map(address_map &map);
};
/******************************************************
@@ -388,6 +389,12 @@ void famibox_state::famibox_map(address_map &map)
map(0xc000, 0xffff).bankr("cpubank2");
}
+void famibox_state::famibox_ppu_map(address_map &map)
+{
+ map(0x0000, 0x1fff).bankr("ppubank1");
+ map(0x2000, 0x3eff).rw(FUNC(famibox_state::famibox_nt_r), FUNC(famibox_state::famibox_nt_w));
+}
+
/******************************************************
Inputs
@@ -510,12 +517,8 @@ void famibox_state::machine_start()
m_nt_page[2] = m_nt_ram.get() + 0x800;
m_nt_page[3] = m_nt_ram.get() + 0xc00;
- m_ppu->space(AS_PROGRAM).install_readwrite_handler(0x2000, 0x3eff, read8sm_delegate(*this, FUNC(famibox_state::famibox_nt_r)), write8sm_delegate(*this, FUNC(famibox_state::famibox_nt_w)));
- m_ppu->space(AS_PROGRAM).install_read_bank(0x0000, 0x1fff, "ppubank1");
-
famicombox_bankswitch(0);
-
m_attract_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(famibox_state::famicombox_attract_timer_callback),this));
m_gameplay_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(famibox_state::famicombox_gameplay_timer_callback),this));
m_exception_cause = 0xff;
@@ -539,6 +542,7 @@ void famibox_state::famibox(machine_config &config)
screen.set_screen_update("ppu", FUNC(ppu2c0x_device::screen_update));
PPU_2C02(config, m_ppu);
+ m_ppu->set_addrmap(0, &famibox_state::famibox_ppu_map);
m_ppu->set_cpu_tag(m_maincpu);
m_ppu->int_callback().set_inputline(m_maincpu, INPUT_LINE_NMI);
diff --git a/src/mame/drivers/fastfred.cpp b/src/mame/drivers/fastfred.cpp
index 37e89aa31c9..b4d1014d79c 100644
--- a/src/mame/drivers/fastfred.cpp
+++ b/src/mame/drivers/fastfred.cpp
@@ -251,7 +251,7 @@ void fastfred_state::sound_map(address_map &map)
map(0x0000, 0x1fff).rom();
map(0x2000, 0x23ff).ram();
map(0x3000, 0x3000).r("soundlatch", FUNC(generic_latch_8_device::read)).w(FUNC(fastfred_state::sound_nmi_mask_w));
- map(0x4000, 0x4000).writeonly(); // Reset PSG's
+ map(0x4000, 0x4000).nopw(); // Reset PSG's
map(0x5000, 0x5001).w("ay8910.1", FUNC(ay8910_device::address_data_w));
map(0x6000, 0x6001).w("ay8910.2", FUNC(ay8910_device::address_data_w));
map(0x7000, 0x7000).nopr(); // only for Imago, read but not used
diff --git a/src/mame/drivers/fm7.cpp b/src/mame/drivers/fm7.cpp
index 2a860c0c4bd..60aaa9e7b2a 100644
--- a/src/mame/drivers/fm7.cpp
+++ b/src/mame/drivers/fm7.cpp
@@ -981,8 +981,7 @@ void fm77_state::fm7_mmr_refresh(address_space &space)
uint16_t window_addr = ((m_mmr.window_offset << 8) + 0x7c00) & 0xffff;
// if(window_addr < 0xfc00)
{
- space.install_readwrite_bank(0x7c00,0x7fff,"bank24");
- membank("bank24")->set_base(&m_extended_ram[window_addr]);
+ space.install_ram(0x7c00,0x7fff, &m_extended_ram[window_addr]);
}
}
else
diff --git a/src/mame/drivers/fmtowns.cpp b/src/mame/drivers/fmtowns.cpp
index 07044988df3..c14b2494112 100644
--- a/src/mame/drivers/fmtowns.cpp
+++ b/src/mame/drivers/fmtowns.cpp
@@ -2729,7 +2729,7 @@ void towns_state::driver_start()
save_pointer(m_video.towns_video_reg,"Video registers",2);
if (m_ram->size() > 0x100000)
- m_maincpu->space(AS_PROGRAM).install_ram(0x100000,m_ram->size()-1,nullptr);
+ m_maincpu->space(AS_PROGRAM).install_ram(0x100000,m_ram->size()-1,m_ram->pointer() + 0x100000);
}
void marty_state::driver_start()
diff --git a/src/mame/drivers/fruitpc.cpp b/src/mame/drivers/fruitpc.cpp
index 1987638c7d8..4bf57308c0f 100644
--- a/src/mame/drivers/fruitpc.cpp
+++ b/src/mame/drivers/fruitpc.cpp
@@ -55,7 +55,7 @@ void fruitpc_state::fruitpc_map(address_map &map)
map(0x00000000, 0x0009ffff).ram();
map(0x000a0000, 0x000bffff).rw("vga", FUNC(vga_device::mem_r), FUNC(vga_device::mem_w)); // VGA VRAM
map(0x000c0000, 0x000dffff).rom().region("bios", 0);
- map(0x000e0000, 0x000fffff).ram().region("bios", 0);
+ map(0x000e0000, 0x000fffff).rom().region("bios", 0);
map(0x00100000, 0x008fffff).ram(); // 8MB RAM
map(0x02000000, 0x28ffffff).noprw();
map(0xfffe0000, 0xffffffff).rom().region("bios", 0); /* System BIOS */
diff --git a/src/mame/drivers/galaxian.cpp b/src/mame/drivers/galaxian.cpp
index 761d7ee2d51..4b94c1d206e 100644
--- a/src/mame/drivers/galaxian.cpp
+++ b/src/mame/drivers/galaxian.cpp
@@ -1239,7 +1239,7 @@ INPUT_CHANGED_MEMBER(gmgalax_state::game_changed)
m_selected_game = newval;
/* select the bank and graphics bank based on it */
- membank("bank1")->set_entry(m_selected_game);
+ m_bank1->set_entry(m_selected_game);
galaxian_gfxbank_w(0, m_selected_game);
/* reset the stars */
@@ -1267,7 +1267,7 @@ CUSTOM_INPUT_MEMBER(gmgalax_state::port_r)
void galaxian_state::zigzag_bankswap_w(uint8_t data)
{
/* Zig Zag can swap ROMs 2 and 3 as a form of copy protection */
- membank("bank1")->set_entry(data & 1);
+ m_bank1->set_entry(data & 1);
membank("bank2")->set_entry(~data & 1);
}
@@ -7203,8 +7203,8 @@ void gmgalax_state::init_gmgalax()
common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, &gmgalax_state::gmgalax_extend_tile_info, &gmgalax_state::gmgalax_extend_sprite_info);
/* ROM is banked */
- space.install_read_bank(0x0000, 0x3fff, "bank1");
- membank("bank1")->configure_entries(0, 2, memregion("maincpu")->base() + 0x10000, 0x4000);
+ space.install_read_bank(0x0000, 0x3fff, m_bank1);
+ m_bank1->configure_entries(0, 2, memregion("maincpu")->base() + 0x10000, 0x4000);
/* callback when the game select is toggled */
game_changed(*machine().ioport().ports().begin()->second->fields().first(), 0, 0, 0);
@@ -7252,8 +7252,8 @@ void galaxian_state::init_victoryc()
void galaxian_state::init_fourplay()
{
- membank("bank1")->configure_entries(0, 4, memregion("maincpu")->base() + 0x10000, 0x4000);
- membank("bank1")->set_entry(0);
+ m_bank1->configure_entries(0, 4, memregion("maincpu")->base() + 0x10000, 0x4000);
+ m_bank1->set_entry(0);
/* video extensions */
common_init(NULL, NULL, &galaxian_state::pisces_extend_tile_info, &galaxian_state::pisces_extend_sprite_info);
@@ -7261,8 +7261,8 @@ void galaxian_state::init_fourplay()
void galaxian_state::init_videight()
{
- membank("bank1")->configure_entries(0, 8, memregion("maincpu")->base() + 0x10000, 0x4000);
- membank("bank1")->set_entry(0);
+ m_bank1->configure_entries(0, 8, memregion("maincpu")->base() + 0x10000, 0x4000);
+ m_bank1->set_entry(0);
/* video extensions */
common_init(NULL, NULL, &galaxian_state::videight_extend_tile_info, &galaxian_state::videight_extend_sprite_info);
@@ -7425,7 +7425,7 @@ void galaxian_state::init_zigzag()
m_numspritegens = 2;
/* make ROMs 2 & 3 swappable */
- membank("bank1")->configure_entries(0, 2, memregion("maincpu")->base() + 0x2000, 0x1000);
+ m_bank1->configure_entries(0, 2, memregion("maincpu")->base() + 0x2000, 0x1000);
membank("bank2")->configure_entries(0, 2, memregion("maincpu")->base() + 0x2000, 0x1000);
/* handler for doing the swaps */
@@ -7720,8 +7720,8 @@ void galaxian_state::init_sfx()
m_sfx_tilemap = true;
/* sound board has space for extra ROM */
- m_audiocpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x3fff, "bank1");
- membank("bank1")->set_base(memregion("audiocpu")->base());
+ m_audiocpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x3fff, m_bank1);
+ m_bank1->set_base(memregion("audiocpu")->base());
}
diff --git a/src/mame/drivers/galaxold.cpp b/src/mame/drivers/galaxold.cpp
index e55999a632f..b590d5aadc1 100644
--- a/src/mame/drivers/galaxold.cpp
+++ b/src/mame/drivers/galaxold.cpp
@@ -3788,9 +3788,7 @@ ROM_END
void galaxold_state::init_guttangt()
{
address_space &space = m_maincpu->space(AS_PROGRAM);
- space.install_read_bank( 0x2000, 0x27ff, "cpubank" );
- uint8_t *rom = memregion("maincpu")->base();
- membank("cpubank")->set_base(rom + 0x2000);
+ space.install_rom( 0x2000, 0x27ff, memregion("maincpu")->base() + 0x2000);
}
diff --git a/src/mame/drivers/galivan.cpp b/src/mame/drivers/galivan.cpp
index e9134e3dc6f..b008eb54918 100644
--- a/src/mame/drivers/galivan.cpp
+++ b/src/mame/drivers/galivan.cpp
@@ -1117,9 +1117,9 @@ ROM_END
void galivan_state::youmab_extra_bank_w(uint8_t data)
{
if (data == 0xff)
- membank("bank2")->set_entry(1);
+ m_rombank->set_entry(1);
else if (data == 0x00)
- membank("bank2")->set_entry(0);
+ m_rombank->set_entry(0);
else
printf("data %03x\n", data);
}
@@ -1165,12 +1165,11 @@ void galivan_state::init_youmab()
{
// TODO: move all of this to an address map instead
m_maincpu->space(AS_IO).install_write_handler(0x82, 0x82, write8smo_delegate(*this, FUNC(galivan_state::youmab_extra_bank_w))); // banks rom at 0x8000? writes 0xff and 0x00 before executing code there
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x7fff, "bank3");
- membank("bank3")->set_base(memregion("maincpu")->base());
+ m_maincpu->space(AS_PROGRAM).install_rom(0x0000, 0x7fff, memregion("maincpu")->base());
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x8000, 0xbfff, "bank2");
- membank("bank2")->configure_entries(0, 2, memregion("user2")->base(), 0x4000);
- membank("bank2")->set_entry(0);
+ m_maincpu->space(AS_PROGRAM).install_read_bank(0x8000, 0xbfff, m_rombank);
+ m_rombank->configure_entries(0, 2, memregion("user2")->base(), 0x4000);
+ m_rombank->set_entry(0);
m_maincpu->space(AS_IO).install_write_handler(0x81, 0x81, write8smo_delegate(*this, FUNC(galivan_state::youmab_81_w))); // ?? often, alternating values
m_maincpu->space(AS_IO).install_write_handler(0x84, 0x84, write8smo_delegate(*this, FUNC(galivan_state::youmab_84_w))); // ?? often, sequence..
diff --git a/src/mame/drivers/gamate.cpp b/src/mame/drivers/gamate.cpp
index 99757a68833..607e3f6704b 100644
--- a/src/mame/drivers/gamate.cpp
+++ b/src/mame/drivers/gamate.cpp
@@ -29,7 +29,7 @@ public:
, m_ay(*this, "ay8910")
, m_cartslot(*this, "cartslot")
, m_io_joy(*this, "JOY")
- , m_bios(*this, "bios")
+ , m_bios(*this, "maincpu")
, m_ram(*this, "ram")
{ }
@@ -62,7 +62,7 @@ private:
required_device<ay8910_device> m_ay;
required_device<gamate_cart_slot_device> m_cartslot;
required_ioport m_io_joy;
- required_shared_ptr<uint8_t> m_bios;
+ required_region_ptr<uint8_t> m_bios;
required_shared_ptr<uint8_t> m_ram;
emu_timer *timer1;
emu_timer *timer2;
@@ -129,7 +129,7 @@ void gamate_state::gamate_mem(address_map &map)
map(0x5a00, 0x5a00).r(FUNC(gamate_state::card_available_check));
map(0x6000, 0xdfff).rw(FUNC(gamate_state::read_cart), FUNC(gamate_state::write_cart));
- map(0xe000, 0xefff).mirror(0x1000).rom().share("bios").region("maincpu", 0);
+ map(0xe000, 0xefff).mirror(0x1000).rom().region("maincpu", 0);
}
diff --git a/src/mame/drivers/gamecom.cpp b/src/mame/drivers/gamecom.cpp
index 5ea07b16cdd..789504fe16d 100644
--- a/src/mame/drivers/gamecom.cpp
+++ b/src/mame/drivers/gamecom.cpp
@@ -41,13 +41,11 @@ Game Status:
void gamecom_state::gamecom_mem_map(address_map &map)
{
- map(0x0000, 0x0013).ram().region("maincpu", 0x00);
+ map(0x0000, 0x03ff).ram().share("maincpu");
map(0x0014, 0x0017).rw(FUNC(gamecom_state::gamecom_pio_r), FUNC(gamecom_state::gamecom_pio_w)); // buttons
- map(0x0018, 0x001F).ram().region("maincpu", 0x18);
map(0x0020, 0x007F).rw(FUNC(gamecom_state::gamecom_internal_r), FUNC(gamecom_state::gamecom_internal_w));/* CPU internal register file */
- map(0x0080, 0x03FF).ram().region("maincpu", 0x80); /* RAM */
- map(0x0400, 0x0FFF).noprw(); /* Nothing */
- map(0x1000, 0x1FFF).rom(); /* Internal ROM (initially), or External ROM/Flash. Controlled by MMU0 (never swapped out in game.com) */
+ map(0x0400, 0x0FFF).noprw(); /* Nothing */
+ map(0x1000, 0x1FFF).rom().region("maincpu", 0); /* Internal ROM (initially), or External ROM/Flash. Controlled by MMU0 (never swapped out in game.com) */
map(0x2000, 0x3FFF).bankr("bank1"); /* External ROM/Flash. Controlled by MMU1 */
map(0x4000, 0x5FFF).bankr("bank2"); /* External ROM/Flash. Controlled by MMU2 */
map(0x6000, 0x7FFF).bankr("bank3"); /* External ROM/Flash. Controlled by MMU3 */
@@ -293,8 +291,8 @@ void gamecom_state::gamecom(machine_config &config)
}
ROM_START( gamecom )
- ROM_REGION( 0x2000, "maincpu", 0 )
- ROM_LOAD( "internal.bin", 0x1000, 0x1000, CRC(a0cec361) SHA1(03368237e8fed4a8724f3b4a1596cf4b17c96d33) )
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "internal.bin", 0x0000, 0x1000, CRC(a0cec361) SHA1(03368237e8fed4a8724f3b4a1596cf4b17c96d33) )
ROM_REGION( 0x40000, "kernel", 0 )
ROM_LOAD( "external.bin", 0x00000, 0x40000, CRC(e235a589) SHA1(97f782e72d738f4d7b861363266bf46b438d9b50) )
diff --git a/src/mame/drivers/gba.cpp b/src/mame/drivers/gba.cpp
index 76e8e526333..98701148912 100644
--- a/src/mame/drivers/gba.cpp
+++ b/src/mame/drivers/gba.cpp
@@ -1331,17 +1331,14 @@ void gba_state::machine_start()
// install the cart ROM & SRAM into the address map, if present
if (m_cart->exists())
{
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x08000000, 0x09ffffff, "rom1");
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x0a000000, 0x0bffffff, "rom2");
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x0c000000, 0x0cffffff, "rom3");
std::string region_tag;
memory_region *cart_rom = memregion(region_tag.assign(m_cart->tag()).append(GBASLOT_ROM_REGION_TAG));
// install ROM accesses
- membank("rom1")->set_base(cart_rom->base());
- membank("rom2")->set_base(cart_rom->base());
- membank("rom3")->set_base(cart_rom->base());
+ m_maincpu->space(AS_PROGRAM).install_rom(0x08000000, 0x09ffffff, cart_rom->base());
+ m_maincpu->space(AS_PROGRAM).install_rom(0x0a000000, 0x0bffffff, cart_rom->base());
+ m_maincpu->space(AS_PROGRAM).install_rom(0x0c000000, 0x0cffffff, cart_rom->base());
m_maincpu->space(AS_PROGRAM).install_read_handler(0x80000c4, 0x80000cb, read32s_delegate(*m_cart, FUNC(gba_cart_slot_device::read_gpio)));
m_maincpu->space(AS_PROGRAM).install_write_handler(0x80000c4, 0x80000cb, write32s_delegate(*m_cart, FUNC(gba_cart_slot_device::write_gpio)));
@@ -1387,7 +1384,7 @@ void gba_state::machine_start()
{
m_maincpu->space(AS_PROGRAM).install_write_handler(0x08800000, 0x088001ff, write32sm_delegate(*m_cart, FUNC(gba_cart_slot_device::write_mapper)));
memory_region *cart_romhlp = memregion(region_tag.assign(m_cart->tag()).append(GBAHELP_ROM_REGION_TAG));
- membank("rom1")->set_base(cart_romhlp->base());
+ m_maincpu->space(AS_PROGRAM).install_rom(0x08000000, 0x09ffffff, cart_romhlp->base());
}
}
diff --git a/src/mame/drivers/ghosteo.cpp b/src/mame/drivers/ghosteo.cpp
index e637fed8b80..b0898723d96 100644
--- a/src/mame/drivers/ghosteo.cpp
+++ b/src/mame/drivers/ghosteo.cpp
@@ -97,6 +97,7 @@ public:
, m_soundlatch(*this, "soundlatch")
, m_system_memory(*this, "systememory")
, m_flash(*this, "flash")
+ , m_qs1000_bank(*this, "qs1000_bank")
{
}
@@ -115,6 +116,7 @@ private:
required_device<generic_latch_8_device> m_soundlatch;
required_shared_ptr<uint32_t> m_system_memory;
required_region_ptr<uint8_t> m_flash;
+ memory_bank_creator m_qs1000_bank;
int m_security_count;
uint32_t m_bballoon_port[20];
@@ -182,7 +184,7 @@ void ghosteo_state::qs1000_p3_w(uint8_t data)
// ...x .... - ?
// ..x. .... - /IRQ clear
- membank("qs1000:bank")->set_entry(data & 0x07);
+ m_qs1000_bank->set_entry(data & 0x07);
if (!BIT(data, 5))
m_soundlatch->acknowledge_w();
@@ -594,8 +596,8 @@ uint32_t ghosteo_state::bballoon_speedup_r(offs_t offset, uint32_t mem_mask)
void ghosteo_state::machine_start()
{
// Set up the QS1000 program ROM banking, taking care not to overlap the internal RAM
- m_qs1000->cpu().space(AS_IO).install_read_bank(0x0100, 0xffff, "bank");
- membank("qs1000:bank")->configure_entries(0, 8, memregion("qs1000:cpu")->base()+0x100, 0x10000);
+ m_qs1000->cpu().space(AS_IO).install_read_bank(0x0100, 0xffff, m_qs1000_bank);
+ m_qs1000_bank->configure_entries(0, 8, memregion("qs1000:cpu")->base()+0x100, 0x10000);
}
void ghosteo_state::machine_reset()
diff --git a/src/mame/drivers/gimix.cpp b/src/mame/drivers/gimix.cpp
index 36aa5033d23..5b4f0f72267 100644
--- a/src/mame/drivers/gimix.cpp
+++ b/src/mame/drivers/gimix.cpp
@@ -520,7 +520,7 @@ void gimix_state::machine_start()
{
for (int bank = 0; bank < 16; bank++)
{
- m_bank[bank]->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,"upper_ram");
+ m_bank[bank]->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,membank("upper_ram"));
}
}
m_floppy0->get_device()->set_rpm(300);
diff --git a/src/mame/drivers/gottlieb.cpp b/src/mame/drivers/gottlieb.cpp
index a55b738b653..2ca96ee42ac 100644
--- a/src/mame/drivers/gottlieb.cpp
+++ b/src/mame/drivers/gottlieb.cpp
@@ -776,9 +776,7 @@ void gottlieb_state::reactor_map(address_map &map)
void gottlieb_state::gottlieb_map(address_map &map)
{
map.global_mask(0xffff);
- map(0x0000, 0x0fff).ram().share("nvram");
- map(0x1000, 0x1fff).ram().region("maincpu", 0x1000); /* or ROM */
- map(0x2000, 0x2fff).ram().region("maincpu", 0x2000); /* or ROM */
+ map(0x0000, 0x2fff).ram().share("nvram");
map(0x3000, 0x30ff).mirror(0x0700).writeonly().share("spriteram"); /* FRSEL */
map(0x3800, 0x3bff).mirror(0x0400).ram().w(FUNC(gottlieb_state::videoram_w)).share("videoram"); /* BRSEL */
map(0x4000, 0x4fff).ram().w(FUNC(gottlieb_state::charram_w)).share("charram"); /* BOJRSEL1 */
@@ -2161,9 +2159,11 @@ ROM_END
ROM_START( krull )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x3000, "nvram", ROMREGION_ERASEFF)
ROM_LOAD( "gv-105_ram_2.c7", 0x1000, 0x1000, CRC(302feadf) SHA1(9d70de35e4f0490dc4e601070993ad146f250dea) )
ROM_LOAD( "gv-105_ram_4.c9-10", 0x2000, 0x1000, CRC(79355a60) SHA1(57ad5c904b9ac4bf7c7d828bf755bbcbba6a4fd7) )
+
+ ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "gv-105_rom_4.c16", 0x6000, 0x2000, CRC(2b696394) SHA1(b18270f4ad97743f6ff8c4cbc93e523c77a8e794) )
ROM_LOAD( "gv-105_rom_3.c14-15", 0x8000, 0x2000, CRC(14b0ee42) SHA1(276c4008a013806b3989c529f41cbc358ec49fd6) )
ROM_LOAD( "gv-105_rom_2.c13-14", 0xa000, 0x2000, CRC(b5fad94a) SHA1(1bae895fbdd658cfb56c53cc2139282cc1e778de) )
@@ -2471,8 +2471,10 @@ ROM_END
ROM_START( 3stooges )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x3000, "nvram", ROMREGION_ERASEFF)
ROM_LOAD( "gv113ram.4", 0x2000, 0x1000, CRC(533bff2a) SHA1(58d0be8add4b02dc3e27cf6b17a05baf4304f3ce) )
+
+ ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "gv113rom.4", 0x6000, 0x2000, CRC(8b6e52b8) SHA1(6e17e11afce92a7fa1735a724f0c0faf9375ac89) )
ROM_LOAD( "gv113rom.3", 0x8000, 0x2000, CRC(b816d8c4) SHA1(86e16888492390034ac04e3f6a9f56422575c778) )
ROM_LOAD( "gv113rom.2", 0xa000, 0x2000, CRC(b45b2a79) SHA1(7d0b19bec462ab67f518361afdf4b6982829ed07) )
@@ -2498,8 +2500,10 @@ ROM_END
ROM_START( 3stoogesa )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x3000, "nvram", ROMREGION_ERASEFF)
ROM_LOAD( "gv113ram4.bin", 0x2000, 0x1000, CRC(a00365be) SHA1(a151e1dfd8a251e6558968ea1df5a8516286d2c1) ) /* Came from PCB with low serial # */
+
+ ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "gv113rom4.bin", 0x6000, 0x2000, CRC(a8f9d51d) SHA1(c9b18e31fea6fd01171528dd583b4d4f9b9078ed) )
ROM_LOAD( "gv113rom3.bin", 0x8000, 0x2000, CRC(60bda7b6) SHA1(7dd7633397d3ccdbd7885a5436f422f575ecd0cc) )
ROM_LOAD( "gv113rom2.bin", 0xa000, 0x2000, CRC(9bb95798) SHA1(91cf203cf59c5a96ed5de8f4c5743bd91350c16f) )
@@ -2525,8 +2529,10 @@ ROM_END
ROM_START( vidvince )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x3000, "nvram", ROMREGION_ERASEFF)
ROM_LOAD( "gv132_ram4_2732.c9c10", 0x2000, 0x1000, CRC(67a4927b) SHA1(41dfd13ea24bb3b0f8f917f4af5f6b33af1bc2e7) )
+
+ ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "gv132_rom4_2764.c16", 0x6000, 0x2000, CRC(3c5f39f5) SHA1(3722c30bcd60fc0c1c4ca4dd800a3654fba67599) )
ROM_LOAD( "gv132_rom3_2764.c14c15", 0x8000, 0x2000, CRC(3983cb79) SHA1(3c527ed2428b8cb86a6896a74c873317a9f7b411) )
ROM_LOAD( "gv132_rom2_2764.c13c14", 0xa000, 0x2000, CRC(0f5ebab9) SHA1(680874b9857565857375096d05203997669a7215) )
diff --git a/src/mame/drivers/gridcomp.cpp b/src/mame/drivers/gridcomp.cpp
index 1deb3174053..b74fb04018c 100644
--- a/src/mame/drivers/gridcomp.cpp
+++ b/src/mame/drivers/gridcomp.cpp
@@ -285,8 +285,7 @@ MACHINE_START_MEMBER(gridcomp_state, gridcomp)
{
address_space &program = m_maincpu->space(AS_PROGRAM);
- program.install_readwrite_bank(0, m_ram->size() - 1, "bank10");
- membank("bank10")->set_base(m_ram->pointer());
+ program.install_ram(0, m_ram->size() - 1, m_ram->pointer());
m_videoram = (uint16_t *)m_maincpu->space(AS_PROGRAM).get_write_ptr(0x400);
}
diff --git a/src/mame/drivers/gticlub.cpp b/src/mame/drivers/gticlub.cpp
index 74d251c5d58..8e2e45b4cb1 100644
--- a/src/mame/drivers/gticlub.cpp
+++ b/src/mame/drivers/gticlub.cpp
@@ -549,8 +549,8 @@ void gticlub_state::gticlub_map(address_map &map)
map(0x7e00a000, 0x7e00bfff).rw(m_k056230, FUNC(k056230_device::lanc_ram_r), FUNC(k056230_device::lanc_ram_w));
map(0x7e00c000, 0x7e00c00f).rw(m_k056800, FUNC(k056800_device::host_r), FUNC(k056800_device::host_w));
map(0x7f000000, 0x7f3fffff).rom().region("user2", 0); /* Data ROM */
- map(0x7f800000, 0x7f9fffff).rom().share("share2");
- map(0x7fe00000, 0x7fffffff).rom().region("user1", 0).share("share2"); /* Program ROM */
+ map(0x7f800000, 0x7f9fffff).rom().region("user1", 0);
+ map(0x7fe00000, 0x7fffffff).rom().region("user1", 0); /* Program ROM */
}
void gticlub_state::hangplt_map(address_map &map)
@@ -567,8 +567,8 @@ void gticlub_state::hangplt_map(address_map &map)
map(0x7e00a000, 0x7e00bfff).rw(m_k056230, FUNC(k056230_device::lanc_ram_r), FUNC(k056230_device::lanc_ram_w));
map(0x7e00c000, 0x7e00c00f).rw(m_k056800, FUNC(k056800_device::host_r), FUNC(k056800_device::host_w));
map(0x7f000000, 0x7f3fffff).rom().region("user2", 0); /* Data ROM */
- map(0x7f800000, 0x7f9fffff).rom().share("share2");
- map(0x7fe00000, 0x7fffffff).rom().region("user1", 0).share("share2"); /* Program ROM */
+ map(0x7f800000, 0x7f9fffff).rom().region("user1", 0);
+ map(0x7fe00000, 0x7fffffff).rom().region("user1", 0); /* Program ROM */
}
/**********************************************************************/
@@ -1136,11 +1136,11 @@ void gticlub_state::hangplt(machine_config &config)
/*************************************************************************/
ROM_START( gticlub ) /* Euro version EAA - Reports: GTI CLUB(TM) System ver 1.00(EUR) */
- ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */
- ROM_LOAD32_BYTE("688eaa01.21u", 0x000003, 0x80000, CRC(824944ad) SHA1(a7bb86a2495e0579f5d82808aeed4895be2dbe3b) )
- ROM_LOAD32_BYTE("688eaa02.19u", 0x000002, 0x80000, CRC(88e7bfb9) SHA1(fc0e945291204ee0c82bbd2c81ff241e1565c6ae) )
- ROM_LOAD32_BYTE("688eaa03.21r", 0x000001, 0x80000, CRC(ea1c696b) SHA1(fd778afaa1de3a35b38a67b8e4c9a08fe9cf1b9e) )
- ROM_LOAD32_BYTE("688eaa04.19r", 0x000000, 0x80000, CRC(94fa2334) SHA1(04edf840f841b9713fa93e7ebb6aad2000b738c0) )
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD32_BYTE("688eaa01.21u", 0x000000, 0x80000, CRC(824944ad) SHA1(a7bb86a2495e0579f5d82808aeed4895be2dbe3b) )
+ ROM_LOAD32_BYTE("688eaa02.19u", 0x000001, 0x80000, CRC(88e7bfb9) SHA1(fc0e945291204ee0c82bbd2c81ff241e1565c6ae) )
+ ROM_LOAD32_BYTE("688eaa03.21r", 0x000002, 0x80000, CRC(ea1c696b) SHA1(fd778afaa1de3a35b38a67b8e4c9a08fe9cf1b9e) )
+ ROM_LOAD32_BYTE("688eaa04.19r", 0x000003, 0x80000, CRC(94fa2334) SHA1(04edf840f841b9713fa93e7ebb6aad2000b738c0) )
ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */
ROM_LOAD32_WORD_SWAP("688a05.14u", 0x000000, 0x200000, CRC(7caa3f80) SHA1(28409dc17c4e010173396fdc069a409fbea0d58d) )
@@ -1166,11 +1166,11 @@ ROM_START( gticlub ) /* Euro version EAA - Reports: GTI CLUB(TM) System ver 1.00
ROM_END
ROM_START( gticlubu ) /* USA version UAA - Reports: GTI CLUB(TM) System ver 1.02(USA) */
- ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */
- ROM_LOAD32_BYTE("688uaa01.21u", 0x000003, 0x80000, CRC(4e2ea7ad) SHA1(cc517df7c4df098896a2a88843fef97c9beb46f3) )
- ROM_LOAD32_BYTE("688uaa02.19u", 0x000002, 0x80000, CRC(c0212ce1) SHA1(7716acfa1b1391e9d7a321ed46785c144d27fdd8) )
- ROM_LOAD32_BYTE("688uaa03.21r", 0x000001, 0x80000, CRC(030246fe) SHA1(70d3591159b07aaeca60141db44f7c28d1b2dac9) )
- ROM_LOAD32_BYTE("688uaa04.19r", 0x000000, 0x80000, CRC(9394e0b2) SHA1(9ff4ff22a307352bf127fc2b5ef9c56ecacf0aab) )
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD32_BYTE("688uaa01.21u", 0x000000, 0x80000, CRC(4e2ea7ad) SHA1(cc517df7c4df098896a2a88843fef97c9beb46f3) )
+ ROM_LOAD32_BYTE("688uaa02.19u", 0x000001, 0x80000, CRC(c0212ce1) SHA1(7716acfa1b1391e9d7a321ed46785c144d27fdd8) )
+ ROM_LOAD32_BYTE("688uaa03.21r", 0x000002, 0x80000, CRC(030246fe) SHA1(70d3591159b07aaeca60141db44f7c28d1b2dac9) )
+ ROM_LOAD32_BYTE("688uaa04.19r", 0x000003, 0x80000, CRC(9394e0b2) SHA1(9ff4ff22a307352bf127fc2b5ef9c56ecacf0aab) )
ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */
ROM_LOAD32_WORD_SWAP("688a05.14u", 0x000000, 0x200000, CRC(7caa3f80) SHA1(28409dc17c4e010173396fdc069a409fbea0d58d) )
@@ -1196,11 +1196,11 @@ ROM_START( gticlubu ) /* USA version UAA - Reports: GTI CLUB(TM) System ver 1.02
ROM_END
ROM_START( gticluba ) /* Asia version AAA - Reports: GTI CLUB(TM) System ver 1.00(ASI) */
- ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */
- ROM_LOAD32_BYTE("688aaa01.21u", 0x000003, 0x80000, CRC(06a56474) SHA1(3a457b885a35e3ee030fd51d847bcf75fce46208) )
- ROM_LOAD32_BYTE("688aaa02.19u", 0x000002, 0x80000, CRC(3c1e714a) SHA1(557f8542b855b2b35f242c8db7396017aca6dbd8) )
- ROM_LOAD32_BYTE("688aaa03.21r", 0x000001, 0x80000, CRC(e060580b) SHA1(50242f3f3b949cc03082e4e75d9dcc89e17f0a75) )
- ROM_LOAD32_BYTE("688aaa04.19r", 0x000000, 0x80000, CRC(928c23cd) SHA1(cce54398e1e5b98bfb717839cc422f1f60502788) )
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD32_BYTE("688aaa01.21u", 0x000000, 0x80000, CRC(06a56474) SHA1(3a457b885a35e3ee030fd51d847bcf75fce46208) )
+ ROM_LOAD32_BYTE("688aaa02.19u", 0x000001, 0x80000, CRC(3c1e714a) SHA1(557f8542b855b2b35f242c8db7396017aca6dbd8) )
+ ROM_LOAD32_BYTE("688aaa03.21r", 0x000002, 0x80000, CRC(e060580b) SHA1(50242f3f3b949cc03082e4e75d9dcc89e17f0a75) )
+ ROM_LOAD32_BYTE("688aaa04.19r", 0x000003, 0x80000, CRC(928c23cd) SHA1(cce54398e1e5b98bfb717839cc422f1f60502788) )
ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */
ROM_LOAD32_WORD_SWAP("688a05.14u", 0x000000, 0x200000, CRC(7caa3f80) SHA1(28409dc17c4e010173396fdc069a409fbea0d58d) )
@@ -1226,11 +1226,11 @@ ROM_START( gticluba ) /* Asia version AAA - Reports: GTI CLUB(TM) System ver 1.0
ROM_END
ROM_START( gticlubj ) /* Japan version JAA - Reports: GTI CLUB(TM) System ver 1.00(JPN) */
- ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */
- ROM_LOAD32_BYTE("688jaa01.21u", 0x000003, 0x80000, CRC(1492059c) SHA1(176dbd87f23f4cd8e1397e67da501738e20e5a57) )
- ROM_LOAD32_BYTE("688jaa02.19u", 0x000002, 0x80000, CRC(7896dd69) SHA1(a3ab7b872132a5e66238e414f4b497cf7beb8b1c) )
- ROM_LOAD32_BYTE("688jaa03.21r", 0x000001, 0x80000, CRC(94e2be50) SHA1(f206ac201903f3aae29196ab6fccdef104859346) )
- ROM_LOAD32_BYTE("688jaa04.19r", 0x000000, 0x80000, CRC(ff539bb6) SHA1(1a225eca4377d82a2b6cb99c1d16580b9ccf2f08) )
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD32_BYTE("688jaa01.21u", 0x000000, 0x80000, CRC(1492059c) SHA1(176dbd87f23f4cd8e1397e67da501738e20e5a57) )
+ ROM_LOAD32_BYTE("688jaa02.19u", 0x000001, 0x80000, CRC(7896dd69) SHA1(a3ab7b872132a5e66238e414f4b497cf7beb8b1c) )
+ ROM_LOAD32_BYTE("688jaa03.21r", 0x000002, 0x80000, CRC(94e2be50) SHA1(f206ac201903f3aae29196ab6fccdef104859346) )
+ ROM_LOAD32_BYTE("688jaa04.19r", 0x000003, 0x80000, CRC(ff539bb6) SHA1(1a225eca4377d82a2b6cb99c1d16580b9ccf2f08) )
ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */
ROM_LOAD32_WORD_SWAP("688a05.14u", 0x000000, 0x200000, CRC(7caa3f80) SHA1(28409dc17c4e010173396fdc069a409fbea0d58d) )
@@ -1256,11 +1256,11 @@ ROM_START( gticlubj ) /* Japan version JAA - Reports: GTI CLUB(TM) System ver 1.
ROM_END
ROM_START( thunderh ) /* Euro version EAA */
- ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */
- ROM_LOAD32_BYTE( "680eaa01.21u", 0x000003, 0x080000, CRC(796e2678) SHA1(8051a228aa6d1a3f1fef26de15f4fdb785c2c8ee) )
- ROM_LOAD32_BYTE( "680eaa02.19u", 0x000002, 0x080000, CRC(767e6db0) SHA1(0f29f56fe485f30100ce54e64bda5d5a124c1d09) )
- ROM_LOAD32_BYTE( "680eaa03.21r", 0x000001, 0x080000, CRC(5a5b59b5) SHA1(542c0722437f40829559b09120fde995246d52ae) )
- ROM_LOAD32_BYTE( "680eaa04.19r", 0x000000, 0x080000, CRC(4a973a5c) SHA1(1d84f6416c3b5a85d7ebfbc15fc08e0dd8dc2414) )
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD32_BYTE( "680eaa01.21u", 0x000000, 0x080000, CRC(796e2678) SHA1(8051a228aa6d1a3f1fef26de15f4fdb785c2c8ee) )
+ ROM_LOAD32_BYTE( "680eaa02.19u", 0x000001, 0x080000, CRC(767e6db0) SHA1(0f29f56fe485f30100ce54e64bda5d5a124c1d09) )
+ ROM_LOAD32_BYTE( "680eaa03.21r", 0x000002, 0x080000, CRC(5a5b59b5) SHA1(542c0722437f40829559b09120fde995246d52ae) )
+ ROM_LOAD32_BYTE( "680eaa04.19r", 0x000003, 0x080000, CRC(4a973a5c) SHA1(1d84f6416c3b5a85d7ebfbc15fc08e0dd8dc2414) )
ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */
ROM_LOAD32_WORD_SWAP( "680a05.14u", 0x000000, 0x200000, CRC(0c9f334d) SHA1(99ac622a04a7140244d81031df69a796b6fd2657) )
@@ -1286,11 +1286,11 @@ ROM_START( thunderh ) /* Euro version EAA */
ROM_END
ROM_START( thunderhu ) /* USA version UAA */
- ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */
- ROM_LOAD32_BYTE( "680uaa01.21u", 0x000003, 0x080000, CRC(f2bb2ba1) SHA1(311e88d63179486014376c4af4ff0ef28673ee5a) )
- ROM_LOAD32_BYTE( "680uaa02.19u", 0x000002, 0x080000, CRC(52f617b5) SHA1(fda3133d3a7e04eb4432c69becdcf1872b3660d9) )
- ROM_LOAD32_BYTE( "680uaa03.21r", 0x000001, 0x080000, CRC(086a0574) SHA1(32fb93dbb93d2fe6af743ea4310b50a6cd03647d) )
- ROM_LOAD32_BYTE( "680uaa04.19r", 0x000000, 0x080000, CRC(85e1f8e3) SHA1(9172c54b6663f1bf390795068271198083a6860d) )
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD32_BYTE( "680uaa01.21u", 0x000000, 0x080000, CRC(f2bb2ba1) SHA1(311e88d63179486014376c4af4ff0ef28673ee5a) )
+ ROM_LOAD32_BYTE( "680uaa02.19u", 0x000001, 0x080000, CRC(52f617b5) SHA1(fda3133d3a7e04eb4432c69becdcf1872b3660d9) )
+ ROM_LOAD32_BYTE( "680uaa03.21r", 0x000002, 0x080000, CRC(086a0574) SHA1(32fb93dbb93d2fe6af743ea4310b50a6cd03647d) )
+ ROM_LOAD32_BYTE( "680uaa04.19r", 0x000003, 0x080000, CRC(85e1f8e3) SHA1(9172c54b6663f1bf390795068271198083a6860d) )
ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */
ROM_LOAD32_WORD_SWAP( "680a05.14u", 0x000000, 0x200000, CRC(0c9f334d) SHA1(99ac622a04a7140244d81031df69a796b6fd2657) )
@@ -1316,11 +1316,11 @@ ROM_START( thunderhu ) /* USA version UAA */
ROM_END
ROM_START( slrasslt ) /* USA version UAA */
- ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */
- ROM_LOAD32_BYTE( "792uaa01.21u", 0x000003, 0x080000, CRC(c73bf7fb) SHA1(ffe0fea155473827929339a9261a158287ce30a8) ) // ROM check screen shows version as: SOLAR ASSAULT DR2 VER UA-A
- ROM_LOAD32_BYTE( "792uaa02.19u", 0x000002, 0x080000, CRC(a940bb9b) SHA1(65a60157697a21cc2485c02c689c9addb3ac91f1) ) // Based on "Revised" code but title screen only shows Solar Assault
- ROM_LOAD32_BYTE( "792uaa03.21r", 0x000001, 0x080000, CRC(363e8411) SHA1(b9c70033d8e3de4b339b61a66172bfecb7c2b3ab) )
- ROM_LOAD32_BYTE( "792uaa04.19r", 0x000000, 0x080000, CRC(7910d99c) SHA1(e2114d369060528998b58331d590c086d306f541) )
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD32_BYTE( "792uaa01.21u", 0x000000, 0x080000, CRC(c73bf7fb) SHA1(ffe0fea155473827929339a9261a158287ce30a8) ) // ROM check screen shows version as: SOLAR ASSAULT DR2 VER UA-A
+ ROM_LOAD32_BYTE( "792uaa02.19u", 0x000001, 0x080000, CRC(a940bb9b) SHA1(65a60157697a21cc2485c02c689c9addb3ac91f1) ) // Based on "Revised" code but title screen only shows Solar Assault
+ ROM_LOAD32_BYTE( "792uaa03.21r", 0x000002, 0x080000, CRC(363e8411) SHA1(b9c70033d8e3de4b339b61a66172bfecb7c2b3ab) )
+ ROM_LOAD32_BYTE( "792uaa04.19r", 0x000003, 0x080000, CRC(7910d99c) SHA1(e2114d369060528998b58331d590c086d306f541) )
ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */
ROM_LOAD32_WORD_SWAP( "792a05.14u", 0x000000, 0x200000, CRC(9a27edfc) SHA1(c028b6440eb1b0c814c4db45918e580662ac2d9a) )
@@ -1346,11 +1346,11 @@ ROM_START( slrasslt ) /* USA version UAA */
ROM_END
ROM_START( slrassltj ) /* Japan version JAA */
- ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */
- ROM_LOAD32_BYTE( "792jaa01.21u", 0x000003, 0x080000, CRC(112717c6) SHA1(be5066e1aefef20b6eab2340abc1bdc3d7a5a6e3) ) // ROM check screen shows version as: SOLAR ASSAULT DR2 VER JA-A
- ROM_LOAD32_BYTE( "792jaa02.19u", 0x000002, 0x080000, CRC(c48582bd) SHA1(194dfd51704ed5eeecb2b56b6bbf651c7cf7701e) ) // Title screen shows Solar Assault Revised
- ROM_LOAD32_BYTE( "792jaa03.21r", 0x000001, 0x080000, CRC(e691009d) SHA1(c8ae58fd280a18151b0e33511269c3685e30fe63) )
- ROM_LOAD32_BYTE( "792jaa04.19r", 0x000000, 0x080000, CRC(1e73a145) SHA1(e519d17d22b5a61570a9bf72ea840f6398928952) )
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD32_BYTE( "792jaa01.21u", 0x000000, 0x080000, CRC(112717c6) SHA1(be5066e1aefef20b6eab2340abc1bdc3d7a5a6e3) ) // ROM check screen shows version as: SOLAR ASSAULT DR2 VER JA-A
+ ROM_LOAD32_BYTE( "792jaa02.19u", 0x000001, 0x080000, CRC(c48582bd) SHA1(194dfd51704ed5eeecb2b56b6bbf651c7cf7701e) ) // Title screen shows Solar Assault Revised
+ ROM_LOAD32_BYTE( "792jaa03.21r", 0x000002, 0x080000, CRC(e691009d) SHA1(c8ae58fd280a18151b0e33511269c3685e30fe63) )
+ ROM_LOAD32_BYTE( "792jaa04.19r", 0x000003, 0x080000, CRC(1e73a145) SHA1(e519d17d22b5a61570a9bf72ea840f6398928952) )
ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */
ROM_LOAD32_WORD_SWAP( "792a05.14u", 0x000000, 0x200000, CRC(9a27edfc) SHA1(c028b6440eb1b0c814c4db45918e580662ac2d9a) )
@@ -1376,11 +1376,11 @@ ROM_START( slrassltj ) /* Japan version JAA */
ROM_END
ROM_START( slrassltj1 ) /* Japan version JAA */
- ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */
- ROM_LOAD32_BYTE( "672jaa_a01.21u", 0x000003, 0x080000, CRC(e2821f51) SHA1(20c6c2402ba2b564b8f77bcf452abe2d7e023417) ) // ROM check screen shows version as: SOLAR ASSAULT VER JA-A
- ROM_LOAD32_BYTE( "672jaa_a02.19u", 0x000002, 0x080000, CRC(e3ac7031) SHA1(268588ac6e80463e51a399f53b2396b23faaddba) ) // Title screen shows subtitle "GRADIUS"
- ROM_LOAD32_BYTE( "672jaa_a03.21r", 0x000001, 0x080000, CRC(52711d79) SHA1(8c89fbff9de21cc1e5f17c4ea08870faea648465) )
- ROM_LOAD32_BYTE( "672jaa_a04.19r", 0x000000, 0x080000, CRC(f7419454) SHA1(44cef7f1181cb9c11b013ab0b7e26aa1e95d3746) )
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD32_BYTE( "672jaa_a01.21u", 0x000000, 0x080000, CRC(e2821f51) SHA1(20c6c2402ba2b564b8f77bcf452abe2d7e023417) ) // ROM check screen shows version as: SOLAR ASSAULT VER JA-A
+ ROM_LOAD32_BYTE( "672jaa_a02.19u", 0x000001, 0x080000, CRC(e3ac7031) SHA1(268588ac6e80463e51a399f53b2396b23faaddba) ) // Title screen shows subtitle "GRADIUS"
+ ROM_LOAD32_BYTE( "672jaa_a03.21r", 0x000002, 0x080000, CRC(52711d79) SHA1(8c89fbff9de21cc1e5f17c4ea08870faea648465) )
+ ROM_LOAD32_BYTE( "672jaa_a04.19r", 0x000003, 0x080000, CRC(f7419454) SHA1(44cef7f1181cb9c11b013ab0b7e26aa1e95d3746) )
ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */
ROM_LOAD32_WORD_SWAP( "672a05.14u", 0x000000, 0x200000, CRC(f6f296e4) SHA1(2ba4ede36f3392aa53a730614272fa80df65281c) )
@@ -1406,11 +1406,11 @@ ROM_START( slrassltj1 ) /* Japan version JAA */
ROM_END
ROM_START( hangplt ) /* Japan version JAB */
- ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */
- ROM_LOAD32_BYTE( "685jab01.21u", 0x000003, 0x080000, CRC(f98a3e82) SHA1(94ebaa172b0e98c5cd08efaea5f56e707e5032b4) )
- ROM_LOAD32_BYTE( "685jab02.19u", 0x000002, 0x080000, CRC(20730cdc) SHA1(71b2cf7077ab7db875f9030e21afd05905f57ce5) )
- ROM_LOAD32_BYTE( "685jab03.21r", 0x000001, 0x080000, CRC(77fa2248) SHA1(a662b84945b3d268fed15952cc793d821233735e) )
- ROM_LOAD32_BYTE( "685jab04.19r", 0x000000, 0x080000, CRC(ab6773df) SHA1(91d3f849a1cc5fa4b2fbd876d53402a548198c41) )
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD32_BYTE( "685jab01.21u", 0x000000, 0x080000, CRC(f98a3e82) SHA1(94ebaa172b0e98c5cd08efaea5f56e707e5032b4) )
+ ROM_LOAD32_BYTE( "685jab02.19u", 0x000001, 0x080000, CRC(20730cdc) SHA1(71b2cf7077ab7db875f9030e21afd05905f57ce5) )
+ ROM_LOAD32_BYTE( "685jab03.21r", 0x000002, 0x080000, CRC(77fa2248) SHA1(a662b84945b3d268fed15952cc793d821233735e) )
+ ROM_LOAD32_BYTE( "685jab04.19r", 0x000003, 0x080000, CRC(ab6773df) SHA1(91d3f849a1cc5fa4b2fbd876d53402a548198c41) )
ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */
ROM_LOAD32_WORD_SWAP( "685a05.14u", 0x000000, 0x200000, CRC(ba1c8f40) SHA1(ce4ed641c1d6d44447eaaada16f305f1d7fb9ee2) )
@@ -1432,11 +1432,11 @@ ROM_START( hangplt ) /* Japan version JAB */
ROM_END
ROM_START( hangpltu ) /* USA version UAA */
- ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */
- ROM_LOAD32_BYTE( "685uaa01.21u", 0x000003, 0x080000, CRC(83a5b866) SHA1(6859590f212c7debb19924f0174e4cd1bfc011bc) )
- ROM_LOAD32_BYTE( "685uaa02.19u", 0x000002, 0x080000, CRC(765906d6) SHA1(9085a2346756b3b628fef91b7afc131aba434654) )
- ROM_LOAD32_BYTE( "685uaa03.21r", 0x000001, 0x080000, CRC(cb0147a3) SHA1(7bcab760c01ea7e24f4ca5793e081aafa97f68a3) )
- ROM_LOAD32_BYTE( "685uaa04.19r", 0x000000, 0x080000, CRC(a5fda56b) SHA1(4d86f488f411ec16fa3be830206a44214941d1fe) )
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD32_BYTE( "685uaa01.21u", 0x000000, 0x080000, CRC(83a5b866) SHA1(6859590f212c7debb19924f0174e4cd1bfc011bc) )
+ ROM_LOAD32_BYTE( "685uaa02.19u", 0x000001, 0x080000, CRC(765906d6) SHA1(9085a2346756b3b628fef91b7afc131aba434654) )
+ ROM_LOAD32_BYTE( "685uaa03.21r", 0x000002, 0x080000, CRC(cb0147a3) SHA1(7bcab760c01ea7e24f4ca5793e081aafa97f68a3) )
+ ROM_LOAD32_BYTE( "685uaa04.19r", 0x000003, 0x080000, CRC(a5fda56b) SHA1(4d86f488f411ec16fa3be830206a44214941d1fe) )
ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */
ROM_LOAD32_WORD_SWAP( "685a05.14u", 0x000000, 0x200000, CRC(ba1c8f40) SHA1(ce4ed641c1d6d44447eaaada16f305f1d7fb9ee2) )
diff --git a/src/mame/drivers/harddriv.cpp b/src/mame/drivers/harddriv.cpp
index f037aa5e001..ae8b72d5597 100644
--- a/src/mame/drivers/harddriv.cpp
+++ b/src/mame/drivers/harddriv.cpp
@@ -385,7 +385,7 @@ harddriv_state::harddriv_state(const machine_config &mconfig, device_type type,
m_ds3_speedup_pc(0),
m_ds3_transfer_pc(0),
m_gsp_multisync(0),
- m_gsp_vram(*this, "gsp_vram", 16),
+ m_gsp_vram(*this, "gsp_vram"),
m_gsp_control_lo(*this, "gsp_control_lo"),
m_gsp_control_hi(*this, "gsp_control_hi"),
m_gsp_paletteram_lo(*this, "gsp_palram_lo"),
diff --git a/src/mame/drivers/hec2hrp.cpp b/src/mame/drivers/hec2hrp.cpp
index 8dfb44e1682..8175a1c1001 100644
--- a/src/mame/drivers/hec2hrp.cpp
+++ b/src/mame/drivers/hec2hrp.cpp
@@ -320,7 +320,7 @@ MACHINE_START_MEMBER(hec2hrp_state,hec2hrx)
// Memory install for bank switching
m_bank[1]->configure_entry(HECTOR_BANK_PROG, r+0x10000);
- m_bank[1]->configure_entry(HECTOR_BANK_VIDEO, m_hector_videoram_hrx); // Video RAM
+ m_bank[1]->configure_entry(HECTOR_BANK_VIDEO, m_hector_vram); // Video RAM
// Set bank HECTOR_BANK_PROG as basic bank
m_bank[1]->set_entry(HECTOR_BANK_PROG);
@@ -336,9 +336,6 @@ MACHINE_START_MEMBER(hec2hrp_state,hec2hrx)
m_bank[3]->configure_entry(DISCII_BANK_RAM, r); // RAM
m_bank[3]->set_entry(DISCII_BANK_ROM);
- // As video HR ram is in bank, use external memory
- m_hector_vram.set_target(m_hector_videoram_hrx,m_hector_vram.bytes());
-
hector_init();
}
/*****************************************************************************/
@@ -350,7 +347,7 @@ MACHINE_START_MEMBER(hec2hrp_state,hec2mdhrx)
// Memory install for bank switching
m_bank[1]->configure_entry(HECTOR_BANK_PROG, r+0x10000);
- m_bank[1]->configure_entry(HECTOR_BANK_VIDEO, m_hector_videoram_hrx); // Video RAM
+ m_bank[1]->configure_entry(HECTOR_BANK_VIDEO, m_hector_vram); // Video RAM
// Set HECTOR_BANK_PROG as basic bank
m_bank[1]->set_entry(HECTOR_BANK_PROG);
@@ -361,9 +358,6 @@ MACHINE_START_MEMBER(hec2hrp_state,hec2mdhrx)
m_bank[2]->configure_entry(HECTOR_BANK_DISC, memregion("page2")->base() ); // ROM mini disc page
m_bank[2]->set_entry(HECTOR_BANK_BASE);
- // As video HR ram is in bank, use external memory
- m_hector_vram.set_target(m_hector_videoram_hrx,m_hector_vram.bytes());
-
hector_init();
}
@@ -596,7 +590,6 @@ ROM_START( hec2mdhrx )
ROM_LOAD( "mdic1.bin" , 0x0000,0x2000, CRC(ddda1065) SHA1(e7bba14a72605238d2f8299da029b8320a563254))
ROM_LOAD( "mdicmb.bin" , 0x2000,0x2000, CRC(d8090747) SHA1(f2925b68002307562e2ea5e36b740e5458f0f0eb))
- ROM_REGION( 0x4000, "page1", ROMREGION_ERASEFF ) // Page 1 = unused page
ROM_REGION( 0x4000, "page2", ROMREGION_ERASEFF ) // Page 2 = minidisc page
ROM_LOAD( "mdic3.bin" , 0x0000,0x2000, CRC(87801816) SHA1(ddf441f40df014b237cdf17430d1989f3a452d04))
ROM_LOAD( "mdicmb.bin" , 0x2000,0x2000, CRC(d8090747) SHA1(f2925b68002307562e2ea5e36b740e5458f0f0eb))
@@ -608,6 +601,7 @@ ROM_START( hec2mx80 )
// option roms
ROM_REGION( 0x4000, "page1", ROMREGION_ERASEFF )
ROM_LOAD( "mx80c_page1.rom", 0x0000, 0x4000, CRC(4615f57c) SHA1(5de291bf3ae0320915133b99f1a088cb56c41658))
+
ROM_REGION( 0x4000, "page2", ROMREGION_ERASEFF )
ROM_LOAD( "mx80c_page2.rom" , 0x0000,0x4000, CRC(2d5d975e) SHA1(48307132e0f3fad0262859bb8142d108f694a436))
// 2nd cpu
@@ -621,6 +615,7 @@ ROM_START( hec2mx40 )
// option roms
ROM_REGION( 0x4000, "page1", ROMREGION_ERASEFF )
ROM_LOAD( "mx40c_page1.rom", 0x0000, 0x4000, CRC(192a76fa) SHA1(062aa6df0b554b85774d4b5edeea8496a4baca35))
+
ROM_REGION( 0x4000, "page2", ROMREGION_ERASEFF )
ROM_LOAD( "mx40c_page2.rom" , 0x0000,0x4000, CRC(ef1b2654) SHA1(66624ea040cb7ede4720ad2eca0738d0d3bad89a))
// 2nd cpu
diff --git a/src/mame/drivers/hng64.cpp b/src/mame/drivers/hng64.cpp
index 38cf63ed9b8..40145c4456e 100644
--- a/src/mame/drivers/hng64.cpp
+++ b/src/mame/drivers/hng64.cpp
@@ -831,7 +831,7 @@ void hng64_state::hng_map(address_map &map)
{
// main RAM / ROM
map(0x00000000, 0x00ffffff).ram().share("mainram");
- map(0x04000000, 0x05ffffff).nopw().rom().region("gameprg", 0).share("cart");
+ map(0x04000000, 0x05ffffff).nopw().rom().region("gameprg", 0);
// Misc Peripherals
map(0x1f700000, 0x1f7010ff).rw(FUNC(hng64_state::hng64_sysregs_r), FUNC(hng64_state::hng64_sysregs_w)).share("sysregs"); // various things
@@ -849,7 +849,7 @@ void hng64_state::hng_map(address_map &map)
map(0x1f808000, 0x1f8087ff).rw(FUNC(hng64_state::hng64_dualport_r), FUNC(hng64_state::hng64_dualport_w)).umask32(0xffffffff);
// BIOS ROM
- map(0x1fc00000, 0x1fc7ffff).nopw().rom().region("user1", 0).share("rombase");
+ map(0x1fc00000, 0x1fc7ffff).nopw().rom().region("user1", 0);
// Sprites
map(0x20000000, 0x2000bfff).ram().share("spriteram");
@@ -2244,7 +2244,7 @@ ROM_START( hng64 )
HNG64_BIOS
/* To placate MAME */
- ROM_REGION32_LE( 0x2000000, "gameprg", ROMREGION_ERASEFF )
+ ROM_REGION32_BE( 0x2000000, "gameprg", ROMREGION_ERASEFF )
ROM_REGION( 0x4000, "scrtile", ROMREGION_ERASEFF )
ROM_REGION( 0x4000, "sprtile", ROMREGION_ERASEFF )
ROM_REGION( 0x1000000, "textures", ROMREGION_ERASEFF )
@@ -2256,9 +2256,9 @@ ROM_END
ROM_START( roadedge )
HNG64_BIOS
- ROM_REGION32_LE( 0x2000000, "gameprg", 0 )
- ROM_LOAD32_WORD( "001pr01b.81", 0x0000000, 0x400000, CRC(effbac30) SHA1(c1bddf3e511a8950f65ac7e452f81dbc4b7fd977) )
- ROM_LOAD32_WORD( "001pr02b.82", 0x0000002, 0x400000, CRC(b9aa4ad3) SHA1(9ab3c896dbdc45560b7127486e2db6ca3b15a057) )
+ ROM_REGION32_BE( 0x2000000, "gameprg", 0 )
+ ROM_LOAD32_WORD_SWAP( "001pr01b.81", 0x0000002, 0x400000, CRC(effbac30) SHA1(c1bddf3e511a8950f65ac7e452f81dbc4b7fd977) )
+ ROM_LOAD32_WORD_SWAP( "001pr02b.82", 0x0000000, 0x400000, CRC(b9aa4ad3) SHA1(9ab3c896dbdc45560b7127486e2db6ca3b15a057) )
/* Scroll Characters 8x8x8 / 16x16x8 */
ROM_REGION( 0x1000000, "scrtile", 0 )
@@ -2309,11 +2309,11 @@ ROM_END
ROM_START( sams64 )
HNG64_BIOS
- ROM_REGION32_LE( 0x2000000, "gameprg", 0 )
- ROM_LOAD32_WORD( "002-pro1a.81", 0x0000000, 0x400000, CRC(e5b907c5) SHA1(83637ffaa9031d41a5bed3397a519d1dfa8052cb) )
- ROM_LOAD32_WORD( "002-pro2a.82", 0x0000002, 0x400000, CRC(803ed2eb) SHA1(666db47886a316e68b911311e5db3bc0f5b8a34d) )
- ROM_LOAD32_WORD( "002-pro3a.83", 0x0800000, 0x400000, CRC(582156a7) SHA1(a7bbbd472a53072cbfaed5d41d4265123c9e3f3d) )
- ROM_LOAD32_WORD( "002-pro4a.84", 0x0800002, 0x400000, CRC(5a8291e9) SHA1(ec1e5a5a0ba37393e8b93d78b4ac855109d45ec9) )
+ ROM_REGION32_BE( 0x2000000, "gameprg", 0 )
+ ROM_LOAD32_WORD_SWAP( "002-pro1a.81", 0x0000002, 0x400000, CRC(e5b907c5) SHA1(83637ffaa9031d41a5bed3397a519d1dfa8052cb) )
+ ROM_LOAD32_WORD_SWAP( "002-pro2a.82", 0x0000000, 0x400000, CRC(803ed2eb) SHA1(666db47886a316e68b911311e5db3bc0f5b8a34d) )
+ ROM_LOAD32_WORD_SWAP( "002-pro3a.83", 0x0800002, 0x400000, CRC(582156a7) SHA1(a7bbbd472a53072cbfaed5d41d4265123c9e3f3d) )
+ ROM_LOAD32_WORD_SWAP( "002-pro4a.84", 0x0800000, 0x400000, CRC(5a8291e9) SHA1(ec1e5a5a0ba37393e8b93d78b4ac855109d45ec9) )
/* Scroll Characters 8x8x8 / 16x16x8 */
ROM_REGION( 0x2000000, "scrtile", 0 )
@@ -2364,9 +2364,9 @@ ROM_END
ROM_START( xrally )
HNG64_BIOS
- ROM_REGION32_LE( 0x2000000, "gameprg", 0 )
- ROM_LOAD32_WORD( "003-pr01a.81", 0x0000000, 0x400000, CRC(4e160388) SHA1(08fba66d0f0dab47f7db5bc7d411f4fc0e8219c8) )
- ROM_LOAD32_WORD( "003-pr02a.82", 0x0000002, 0x400000, CRC(c4dd4f18) SHA1(4db0e6d5cabd9e4f82d5905556174b9eff8ad4d9) )
+ ROM_REGION32_BE( 0x2000000, "gameprg", 0 )
+ ROM_LOAD32_WORD_SWAP( "003-pr01a.81", 0x0000002, 0x400000, CRC(4e160388) SHA1(08fba66d0f0dab47f7db5bc7d411f4fc0e8219c8) )
+ ROM_LOAD32_WORD_SWAP( "003-pr02a.82", 0x0000000, 0x400000, CRC(c4dd4f18) SHA1(4db0e6d5cabd9e4f82d5905556174b9eff8ad4d9) )
/* Scroll Characters 8x8x8 / 16x16x8 */
ROM_REGION( 0x1000000, "scrtile", 0 )
@@ -2406,11 +2406,11 @@ ROM_END
ROM_START( bbust2 )
HNG64_BIOS
- ROM_REGION32_LE( 0x2000000, "gameprg", 0 )
- ROM_LOAD32_WORD( "004-pr01a.81", 0x0000000, 0x400000, CRC(7b836ece) SHA1(7a4a08251f1dd66c368ac203f5a006266e77f73d) )
- ROM_LOAD32_WORD( "004-pr02a.82", 0x0000002, 0x400000, CRC(8c55a988) SHA1(d9a61ac3d8550ce0ee6aab374c9f024912163180) )
- ROM_LOAD32_WORD( "004-pr03a.83", 0x0800000, 0x400000, CRC(f25a82dd) SHA1(74c0a03021ef424e0b9c3c818be297d2967b3012) )
- ROM_LOAD32_WORD( "004-pr04a.84", 0x0800002, 0x400000, CRC(9258312b) SHA1(fabac42c8a033e85d503be56f266f9386adff10b) )
+ ROM_REGION32_BE( 0x2000000, "gameprg", 0 )
+ ROM_LOAD32_WORD_SWAP( "004-pr01a.81", 0x0000002, 0x400000, CRC(7b836ece) SHA1(7a4a08251f1dd66c368ac203f5a006266e77f73d) )
+ ROM_LOAD32_WORD_SWAP( "004-pr02a.82", 0x0000000, 0x400000, CRC(8c55a988) SHA1(d9a61ac3d8550ce0ee6aab374c9f024912163180) )
+ ROM_LOAD32_WORD_SWAP( "004-pr03a.83", 0x0800002, 0x400000, CRC(f25a82dd) SHA1(74c0a03021ef424e0b9c3c818be297d2967b3012) )
+ ROM_LOAD32_WORD_SWAP( "004-pr04a.84", 0x0800000, 0x400000, CRC(9258312b) SHA1(fabac42c8a033e85d503be56f266f9386adff10b) )
/* Scroll Characters 8x8x8 / 16x16x8 */
ROM_REGION( 0x1000000, "scrtile", 0 )
@@ -2454,15 +2454,15 @@ ROM_END
ROM_START( sams64_2 )
HNG64_BIOS
- ROM_REGION32_LE( 0x2000000, "gameprg", 0 )
- ROM_LOAD32_WORD( "005pr01a.81", 0x0000000, 0x400000, CRC(a69d7700) SHA1(a580783a109bc3e24248d70bcd67f62dd7d8a5dd) )
- ROM_LOAD32_WORD( "005pr02a.82", 0x0000002, 0x400000, CRC(38b9e6b3) SHA1(d1dad8247d920cc66854a0096e1c7845842d2e1c) )
- ROM_LOAD32_WORD( "005pr03a.83", 0x0800000, 0x400000, CRC(0bc738a8) SHA1(79893b0e1c4a31e02ab385c4382684245975ae8f) )
- ROM_LOAD32_WORD( "005pr04a.84", 0x0800002, 0x400000, CRC(6b504852) SHA1(fcdcab432162542d249818a6cd15b8f2e8230f97) )
- ROM_LOAD32_WORD( "005pr05a.85", 0x1000000, 0x400000, CRC(32a743d3) SHA1(4088b930a1a4d6224a0939ef3942af1bf605cdb5) )
- ROM_LOAD32_WORD( "005pr06a.86", 0x1000002, 0x400000, CRC(c09fa615) SHA1(697d6769c16b3c8f73a6df4a1e268ec40cb30d51) )
- ROM_LOAD32_WORD( "005pr07a.87", 0x1800000, 0x400000, CRC(44286ad3) SHA1(1f890c74c0da0d34940a880468e68f7fb1417813) )
- ROM_LOAD32_WORD( "005pr08a.88", 0x1800002, 0x400000, CRC(d094eb67) SHA1(3edc8d608c631a05223e1d05157cd3daf2d6597a) )
+ ROM_REGION32_BE( 0x2000000, "gameprg", 0 )
+ ROM_LOAD32_WORD_SWAP( "005pr01a.81", 0x0000002, 0x400000, CRC(a69d7700) SHA1(a580783a109bc3e24248d70bcd67f62dd7d8a5dd) )
+ ROM_LOAD32_WORD_SWAP( "005pr02a.82", 0x0000000, 0x400000, CRC(38b9e6b3) SHA1(d1dad8247d920cc66854a0096e1c7845842d2e1c) )
+ ROM_LOAD32_WORD_SWAP( "005pr03a.83", 0x0800002, 0x400000, CRC(0bc738a8) SHA1(79893b0e1c4a31e02ab385c4382684245975ae8f) )
+ ROM_LOAD32_WORD_SWAP( "005pr04a.84", 0x0800000, 0x400000, CRC(6b504852) SHA1(fcdcab432162542d249818a6cd15b8f2e8230f97) )
+ ROM_LOAD32_WORD_SWAP( "005pr05a.85", 0x1000002, 0x400000, CRC(32a743d3) SHA1(4088b930a1a4d6224a0939ef3942af1bf605cdb5) )
+ ROM_LOAD32_WORD_SWAP( "005pr06a.86", 0x1000000, 0x400000, CRC(c09fa615) SHA1(697d6769c16b3c8f73a6df4a1e268ec40cb30d51) )
+ ROM_LOAD32_WORD_SWAP( "005pr07a.87", 0x1800002, 0x400000, CRC(44286ad3) SHA1(1f890c74c0da0d34940a880468e68f7fb1417813) )
+ ROM_LOAD32_WORD_SWAP( "005pr08a.88", 0x1800000, 0x400000, CRC(d094eb67) SHA1(3edc8d608c631a05223e1d05157cd3daf2d6597a) )
/* Scroll Characters 8x8x8 / 16x16x8 */
ROM_REGION( 0x4000000, "scrtile", 0 )
@@ -2526,11 +2526,11 @@ ROM_END
ROM_START( fatfurwa )
HNG64_BIOS
- ROM_REGION32_LE( 0x2000000, "gameprg", 0 )
- ROM_LOAD32_WORD( "006pr01a.81", 0x0000000, 0x400000, CRC(3830efa1) SHA1(9d8c941ccb6cbe8d138499cf9d335db4ac7a9ec0) )
- ROM_LOAD32_WORD( "006pr02a.82", 0x0000002, 0x400000, CRC(8d5de84e) SHA1(e3ae014263f370c2836f62ab323f1560cb3a9cf0) )
- ROM_LOAD32_WORD( "006pr03a.83", 0x0800000, 0x400000, CRC(c811b458) SHA1(7d94e0df501fb086b2e5cf08905d7a3adc2c6472) )
- ROM_LOAD32_WORD( "006pr04a.84", 0x0800002, 0x400000, CRC(de708d6c) SHA1(2c9848e7bbf61c574370f9ecab5f5a6ba63339fd) )
+ ROM_REGION32_BE( 0x2000000, "gameprg", 0 )
+ ROM_LOAD32_WORD_SWAP( "006pr01a.81", 0x0000002, 0x400000, CRC(3830efa1) SHA1(9d8c941ccb6cbe8d138499cf9d335db4ac7a9ec0) )
+ ROM_LOAD32_WORD_SWAP( "006pr02a.82", 0x0000000, 0x400000, CRC(8d5de84e) SHA1(e3ae014263f370c2836f62ab323f1560cb3a9cf0) )
+ ROM_LOAD32_WORD_SWAP( "006pr03a.83", 0x0800002, 0x400000, CRC(c811b458) SHA1(7d94e0df501fb086b2e5cf08905d7a3adc2c6472) )
+ ROM_LOAD32_WORD_SWAP( "006pr04a.84", 0x0800000, 0x400000, CRC(de708d6c) SHA1(2c9848e7bbf61c574370f9ecab5f5a6ba63339fd) )
/* Scroll Characters 8x8x8 / 16x16x8 */
ROM_REGION( 0x4000000, "scrtile", 0 )
@@ -2591,13 +2591,13 @@ ROM_END
ROM_START( buriki )
HNG64_BIOS
- ROM_REGION32_LE( 0x2000000, "gameprg", 0 )
- ROM_LOAD32_WORD( "007pr01b.81", 0x0000000, 0x400000, CRC(a31202f5) SHA1(c657729b292d394ced021a0201a1c5608a7118ba) )
- ROM_LOAD32_WORD( "007pr02b.82", 0x0000002, 0x400000, CRC(a563fed6) SHA1(9af9a021beb814e35df968abe5a99225a124b5eb) )
- ROM_LOAD32_WORD( "007pr03a.83", 0x0800000, 0x400000, CRC(da5f6105) SHA1(5424cf5289cef66e301e968b4394e551918fe99b) )
- ROM_LOAD32_WORD( "007pr04a.84", 0x0800002, 0x400000, CRC(befc7bce) SHA1(83d9ecf944e03a40cf25ee288077c2265d6a588a) )
- ROM_LOAD32_WORD( "007pr05a.85", 0x1000000, 0x400000, CRC(013e28bc) SHA1(45e5ac45b42b26957c2877ac1042472c4b5ec914) )
- ROM_LOAD32_WORD( "007pr06a.86", 0x1000002, 0x400000, CRC(0620fccc) SHA1(e0bffc56b019c79276a4ef5ec7354edda15b0889) )
+ ROM_REGION32_BE( 0x2000000, "gameprg", 0 )
+ ROM_LOAD32_WORD_SWAP( "007pr01b.81", 0x0000002, 0x400000, CRC(a31202f5) SHA1(c657729b292d394ced021a0201a1c5608a7118ba) )
+ ROM_LOAD32_WORD_SWAP( "007pr02b.82", 0x0000000, 0x400000, CRC(a563fed6) SHA1(9af9a021beb814e35df968abe5a99225a124b5eb) )
+ ROM_LOAD32_WORD_SWAP( "007pr03a.83", 0x0800002, 0x400000, CRC(da5f6105) SHA1(5424cf5289cef66e301e968b4394e551918fe99b) )
+ ROM_LOAD32_WORD_SWAP( "007pr04a.84", 0x0800000, 0x400000, CRC(befc7bce) SHA1(83d9ecf944e03a40cf25ee288077c2265d6a588a) )
+ ROM_LOAD32_WORD_SWAP( "007pr05a.85", 0x1000002, 0x400000, CRC(013e28bc) SHA1(45e5ac45b42b26957c2877ac1042472c4b5ec914) )
+ ROM_LOAD32_WORD_SWAP( "007pr06a.86", 0x1000000, 0x400000, CRC(0620fccc) SHA1(e0bffc56b019c79276a4ef5ec7354edda15b0889) )
/* Scroll Characters 8x8x8 / 16x16x8 */
ROM_REGION( 0x4000000, "scrtile", 0 )
@@ -2660,7 +2660,7 @@ GAME( 1997, hng64, 0, hng64_default, hng64, hng64_state, init_hng64,
/* Games */
GAME( 1997, roadedge, hng64, hng64_drive, hng64_drive, hng64_state, init_roadedge, ROT0, "SNK", "Roads Edge / Round Trip (rev.B)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_SOUND ) /* 001 */
GAME( 1998, sams64, hng64, hng64_fight, hng64_fight, hng64_state, init_ss64, ROT0, "SNK", "Samurai Shodown 64 / Samurai Spirits 64", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_SOUND ) /* 002 */
-GAME( 1998, xrally, hng64, hng64_drive, hng64_drive, hng64_state, init_hng64_drive, ROT0, "SNK", "Xtreme Rally / Off Beat Racer!", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_SOUND ) /* 003 */
+GAME( 1998, xrally, hng64, hng64_drive, hng64_drive, hng64_state, init_hng64_drive, ROT0, "SNK", "Xtreme Rally / Off Beat Racer!", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_SOUND ) /* 003 */
GAME( 1998, bbust2, hng64, hng64_shoot, hng64_shoot, hng64_state, init_hng64_shoot, ROT0, "SNK", "Beast Busters 2nd Nightmare", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_SOUND ) /* 004 */
GAME( 1998, sams64_2, hng64, hng64_fight, hng64_fight, hng64_state, init_ss64, ROT0, "SNK", "Samurai Shodown: Warrior's Rage / Samurai Spirits 2: Asura Zanmaden", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_SOUND ) /* 005 */
GAME( 1998, fatfurwa, hng64, hng64_fight, hng64_fight, hng64_state, init_hng64_fght, ROT0, "SNK", "Fatal Fury: Wild Ambition (rev.A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_SOUND ) /* 006 */
diff --git a/src/mame/drivers/hornet.cpp b/src/mame/drivers/hornet.cpp
index 5ad07a0e6ca..7ebd29f7cca 100644
--- a/src/mame/drivers/hornet.cpp
+++ b/src/mame/drivers/hornet.cpp
@@ -784,8 +784,8 @@ void hornet_state::hornet_map(address_map &map)
map(0x7d020000, 0x7d021fff).rw("m48t58", FUNC(timekeeper_device::read), FUNC(timekeeper_device::write)); /* M48T58Y RTC/NVRAM */
map(0x7d030000, 0x7d03000f).rw(m_k056800, FUNC(k056800_device::host_r), FUNC(k056800_device::host_w));
map(0x7e000000, 0x7e7fffff).rom().region("user2", 0); /* Data ROM */
- map(0x7f000000, 0x7f3fffff).rom().share("share2");
- map(0x7fc00000, 0x7fffffff).rom().region("user1", 0).share("share2"); /* Program ROM */
+ map(0x7f000000, 0x7f3fffff).rom().region("user1", 0);
+ map(0x7fc00000, 0x7fffffff).rom().region("user1", 0); /* Program ROM */
}
void hornet_state::terabrst_map(address_map &map)
diff --git a/src/mame/drivers/hp3478a.cpp b/src/mame/drivers/hp3478a.cpp
index 36e48e5e7d0..c92411bdf94 100644
--- a/src/mame/drivers/hp3478a.cpp
+++ b/src/mame/drivers/hp3478a.cpp
@@ -594,7 +594,7 @@ void hp3478a_state::i8039_io(address_map &map)
void hp3478a_state::io_bank(address_map &map)
{
map.unmap_value_high();
- map(0x000, 0x0ff).ram().region("nvram", 0).share("nvram").w(FUNC(hp3478a_state::nvwrite));
+ map(0x000, 0x0ff).ram().share("nvram").w(FUNC(hp3478a_state::nvwrite));
map(0x100, 0x107).ram().share("gpibregs"); //XXX TODO : connect to i8291.cpp
map(0x200, 0x2ff).portr("DIP");
}
@@ -714,9 +714,6 @@ void hp3478a_state::hp3478a(machine_config &config)
ROM_START( hp3478a )
ROM_REGION( 0x2000, "maincpu", 0 )
ROM_LOAD("rom_dc118.bin", 0, 0x2000, CRC(10097ced) SHA1(bd665cf7e07e63f825b2353c8322ed8a4376b3bd)) //main CPU ROM, can match other datecodes too
-
- ROM_REGION( 0x100, "nvram", 0 ) /* Calibration RAM, battery-backed */
- ROM_LOAD( "calram.bin", 0, 0x100, NO_DUMP)
ROM_END
/******************************************************************************
diff --git a/src/mame/drivers/ibm6580.cpp b/src/mame/drivers/ibm6580.cpp
index b8912a37383..02582a7f7fe 100644
--- a/src/mame/drivers/ibm6580.cpp
+++ b/src/mame/drivers/ibm6580.cpp
@@ -827,10 +827,7 @@ uint32_t ibm6580_state::screen_update(screen_device &screen, bitmap_ind16 &bitma
void ibm6580_state::machine_start()
{
- address_space &program = m_maincpu->space(AS_PROGRAM);
-
- program.install_readwrite_bank(0, m_ram->size() - 1, "bank10");
- membank("bank10")->set_base(m_ram->pointer());
+ m_maincpu->space(AS_PROGRAM).install_ram(0, m_ram->size() - 1, m_ram->pointer());
m_fdc->set_rate(500000); // XXX workaround
diff --git a/src/mame/drivers/igspoker.cpp b/src/mame/drivers/igspoker.cpp
index b4b5cc36602..51ff5c64e3e 100644
--- a/src/mame/drivers/igspoker.cpp
+++ b/src/mame/drivers/igspoker.cpp
@@ -409,7 +409,7 @@ uint8_t igspoker_state::exp_rom_r(offs_t offset)
void igspoker_state::igspoker_prg_map(address_map &map)
{
map(0x0000, 0xefff).rom();
- map(0xf000, 0xffff).ram().region("maincpu", 0xf000);
+ map(0xf000, 0xffff).ram();
}
void igspoker_state::igspoker_io_map(address_map &map)
diff --git a/src/mame/drivers/indigo.cpp b/src/mame/drivers/indigo.cpp
index 102d06cae26..dae3a45f077 100644
--- a/src/mame/drivers/indigo.cpp
+++ b/src/mame/drivers/indigo.cpp
@@ -158,7 +158,7 @@ void indigo_state::indigo_map(address_map &map)
void indigo3k_state::mem_map(address_map &map)
{
indigo_map(map);
- map(0x1fc00000, 0x1fc3ffff).rom().share("share10").region("user1", 0);
+ map(0x1fc00000, 0x1fc3ffff).rom().region("user1", 0);
}
void indigo4k_state::write_ram(offs_t offset, uint64_t data, uint64_t mem_mask)
@@ -185,7 +185,7 @@ void indigo4k_state::mem_map(address_map &map)
map(0x00000000, 0x0007ffff).bankrw("bank1");
map(0x08000000, 0x17ffffff).ram().share("share1").w(FUNC(indigo4k_state::write_ram)); /* 128 MB of main RAM */
map(0x1fa00000, 0x1fa1ffff).rw(m_mem_ctrl, FUNC(sgi_mc_device::read), FUNC(sgi_mc_device::write));
- map(0x1fc00000, 0x1fc7ffff).rom().share("share5").region("user1", 0);
+ map(0x1fc00000, 0x1fc7ffff).rom().region("user1", 0);
map(0x20000000, 0x27ffffff).ram().share("share1").w(FUNC(indigo4k_state::write_ram)); /* 128 MB of main RAM */
}
diff --git a/src/mame/drivers/irobot.cpp b/src/mame/drivers/irobot.cpp
index be7988dd7fc..b627d539d86 100644
--- a/src/mame/drivers/irobot.cpp
+++ b/src/mame/drivers/irobot.cpp
@@ -148,7 +148,7 @@ void irobot_state::irobot_map(address_map &map)
map(0x1300, 0x1300).mirror(0xff).r("adc", FUNC(adc0809_device::data_r));
map(0x1400, 0x143f).rw(FUNC(irobot_state::quad_pokeyn_r), FUNC(irobot_state::quad_pokeyn_w));
map(0x1800, 0x18ff).w(FUNC(irobot_state::irobot_paletteram_w));
- map(0x1900, 0x19ff).writeonly(); /* Watchdog reset */
+ map(0x1900, 0x19ff).nopw(); /* Watchdog reset */
map(0x1a00, 0x1a00).w(FUNC(irobot_state::irobot_clearfirq_w));
map(0x1b00, 0x1b03).mirror(0xfc).w("adc", FUNC(adc0809_device::address_offset_start_w));
map(0x1c00, 0x1fff).ram().share("videoram");
diff --git a/src/mame/drivers/itech32.cpp b/src/mame/drivers/itech32.cpp
index 8882fcc0ac9..52d7f8a0236 100644
--- a/src/mame/drivers/itech32.cpp
+++ b/src/mame/drivers/itech32.cpp
@@ -632,13 +632,13 @@ u16 drivedge_state::gas_r()
u16 itech32_state::wcbowl_prot_result_r()
{
- return m_main_ram[0x111d/2];
+ return m_nvram[0x111d/2];
}
u8 itech32_state::itech020_prot_result_r()
{
- u32 result = ((u32 *)m_main_ram.target())[m_itech020_prot_address >> 2];
+ u32 result = ((u32 *)m_nvram.target())[m_itech020_prot_address >> 2];
result >>= (~m_itech020_prot_address & 3) * 8;
return result & 0xff;
}
@@ -850,7 +850,7 @@ u32 drivedge_state::tms2_speedup_r(address_space &space)
void itech32_state::nvram_init(nvram_device &nvram, void *base, size_t length)
{
// if nvram is the main RAM, don't overwrite exception vectors
- int start = (base == m_main_ram) ? 0x80 : 0x00;
+ int start = (base == m_nvram) ? 0x80 : 0x00;
for (int i = start; i < length; i++)
((u8 *)base)[i] = machine().rand();
}
@@ -860,7 +860,7 @@ void drivedge_state::nvram_init(nvram_device &nvram, void *base, size_t length)
itech32_state::nvram_init(nvram, base, length);
// due to accessing uninitialized RAM, we need this hack
- ((u32 *)m_main_ram.target())[0x2ce4/4] = 0x0000001e;
+ ((u32 *)m_nvram.target())[0x2ce4/4] = 0x0000001e;
}
/*************************************
@@ -885,7 +885,7 @@ void itech32_state::timekill_map(address_map &map)
map(0x080000, 0x08007f).rw(FUNC(itech32_state::video_r), FUNC(itech32_state::video_w)).share("video");
map(0x0a0000, 0x0a0001).w(FUNC(itech32_state::int1_ack_w));
map(0x0c0000, 0x0c7fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
- map(0x100000, 0x17ffff).rom().region("user1", 0).share("main_rom");
+ map(0x100000, 0x17ffff).rom().region("user1", 0);
}
@@ -906,7 +906,7 @@ void itech32_state::bloodstm_map(address_map &map)
map(0x580000, 0x59ffff).ram().w(FUNC(itech32_state::bloodstm_paletteram_w)).share("palette");
map(0x700001, 0x700001).w(FUNC(itech32_state::bloodstm_plane_w));
map(0x780000, 0x780001).portr("EXTRA");
- map(0x800000, 0x87ffff).mirror(0x780000).rom().region("user1", 0).share("main_rom");
+ map(0x800000, 0x87ffff).mirror(0x780000).rom().region("user1", 0);
}
@@ -920,7 +920,7 @@ u32 itech32_state::test1_r(offs_t offset, u32 mem_mask)
if (ACCESSING_BITS_16_23 && !m_written[0x100 + offset*4+1]) logerror("%06X:read from uninitialized memory %04X\n", m_maincpu->pc(), 0x100 + offset*4+1);
if (ACCESSING_BITS_8_15 && !m_written[0x100 + offset*4+2]) logerror("%06X:read from uninitialized memory %04X\n", m_maincpu->pc(), 0x100 + offset*4+2);
if (ACCESSING_BITS_0_7 && !m_written[0x100 + offset*4+3]) logerror("%06X:read from uninitialized memory %04X\n", m_maincpu->pc(), 0x100 + offset*4+3);
- return ((u32 *)m_main_ram)[0x100/4 + offset];
+ return ((u32 *)m_nvram)[0x100/4 + offset];
}
void itech32_state::test1_w(offs_t offset, u32 data, u32 mem_mask)
@@ -929,7 +929,7 @@ void itech32_state::test1_w(offs_t offset, u32 data, u32 mem_mask)
if (ACCESSING_BITS_16_23) m_written[0x100 + offset*4+1] = 1;
if (ACCESSING_BITS_8_15) m_written[0x100 + offset*4+2] = 1;
if (ACCESSING_BITS_0_7) m_written[0x100 + offset*4+3] = 1;
- COMBINE_DATA(&((u32 *)m_main_ram)[0x100/4 + offset]);
+ COMBINE_DATA(&((u32 *)m_nvram)[0x100/4 + offset]);
}
u32 itech32_state::test2_r(offs_t offset, u32 mem_mask)
@@ -938,7 +938,7 @@ u32 itech32_state::test2_r(offs_t offset, u32 mem_mask)
if (ACCESSING_BITS_16_23 && !m_written[0xc00 + offset*4+1]) logerror("%06X:read from uninitialized memory %04X\n", m_maincpu->pc(), 0xc00 + offset*4+1);
if (ACCESSING_BITS_8_15 && !m_written[0xc00 + offset*4+2]) logerror("%06X:read from uninitialized memory %04X\n", m_maincpu->pc(), 0xc00 + offset*4+2);
if (ACCESSING_BITS_0_7 && !m_written[0xc00 + offset*4+3]) logerror("%06X:read from uninitialized memory %04X\n", m_maincpu->pc(), 0xc00 + offset*4+3);
- return ((u32 *)m_main_ram)[0xc00/4 + offset];
+ return ((u32 *)m_nvram)[0xc00/4 + offset];
}
void itech32_state::test2_w(offs_t offset, u32 data, u32 mem_mask)
@@ -947,7 +947,7 @@ void itech32_state::test2_w(offs_t offset, u32 data, u32 mem_mask)
if (ACCESSING_BITS_16_23) m_written[0xc00 + offset*4+1] = 1;
if (ACCESSING_BITS_8_15) m_written[0xc00 + offset*4+2] = 1;
if (ACCESSING_BITS_0_7) m_written[0xc00 + offset*4+3] = 1;
- COMBINE_DATA(&((u32 *)m_main_ram)[0xc00/4 + offset]);
+ COMBINE_DATA(&((u32 *)m_nvram)[0xc00/4 + offset]);
}
#endif
@@ -978,7 +978,7 @@ map(0x000c00, 0x007fff).mirror(0x40000).rw(FUNC(itech32_state::test2_r), FUNC(it
map(0x280000, 0x280fff).ram().w(FUNC(drivedge_state::tms1_68k_ram_w)).share("tms1_ram");
map(0x300000, 0x300fff).ram().w(FUNC(drivedge_state::tms2_68k_ram_w)).share("tms2_ram");
map(0x380000, 0x380003).nopw(); // .w("watchdog", FUNC(watchdog_timer_device::reset16_w));
- map(0x600000, 0x607fff).rom().region("user1", 0).share("main_rom");
+ map(0x600000, 0x607fff).rom().region("user1", 0);
}
void drivedge_state::tms1_map(address_map &map)
@@ -1017,7 +1017,7 @@ void itech32_state::itech020_map(address_map &map)
map(0x680000, 0x680003).nopw();
/* ! */ map(0x680800, 0x68083f).readonly().nopw(); /* Serial DUART Channel A/B & Top LED sign - To Do! */
map(0x700002, 0x700002).w(FUNC(itech32_state::itech020_plane_w));
- map(0x800000, 0xbfffff).rom().region("user1", 0).share("main_rom");
+ map(0x800000, 0xbfffff).rom().region("user1", 0);
}
void shoottv_state::shoottv_map(address_map &map)
@@ -4629,9 +4629,7 @@ ROM_END
void itech32_state::init_program_rom()
{
- if (m_main_ram == nullptr)
- m_main_ram.set_target(m_nvram, m_nvram.bytes());
- memcpy(m_main_ram, m_main_rom, 0x80);
+ memcpy(m_nvram, m_main_rom, 0x80);
}
diff --git a/src/mame/drivers/itech8.cpp b/src/mame/drivers/itech8.cpp
index d443900b88d..51eb1960679 100644
--- a/src/mame/drivers/itech8.cpp
+++ b/src/mame/drivers/itech8.cpp
@@ -505,7 +505,6 @@
#include "cpu/z80/z80.h"
#include "machine/6522via.h"
#include "machine/6821pia.h"
-#include "machine/nvram.h"
#include "sound/2203intf.h"
#include "sound/2608intf.h"
#include "sound/3812intf.h"
@@ -955,8 +954,8 @@ void itech8_state::gtg2_map(address_map &map)
/*------ Ninja Clowns layout ------*/
void itech8_state::ninclown_map(address_map &map)
{
- map(0x000000, 0x00007f).ram().region("maincpu", 0);
- map(0x000080, 0x003fff).ram().share("nvram");
+ map(0x000000, 0x003fff).ram().share("nvram");
+ map(0x000000, 0x000007).rom();
map(0x004000, 0x03ffff).rom();
map(0x040000, 0x07ffff).r(FUNC(itech8_state::rom_constant_r));
map(0x100080, 0x100080).w(m_soundlatch, FUNC(generic_latch_8_device::write));
@@ -1723,7 +1722,7 @@ WRITE_LINE_MEMBER(itech8_state::generate_tms34061_interrupt)
void itech8_state::itech8_core_devices(machine_config &config)
{
- NVRAM(config, "nvram", nvram_device::DEFAULT_RANDOM);
+ NVRAM(config, m_nvram, nvram_device::DEFAULT_RANDOM);
TICKET_DISPENSER(config, m_ticket, attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW);
@@ -1954,6 +1953,8 @@ void itech8_state::ninclown(machine_config &config)
itech8_core_devices(config);
itech8_sound_ym3812_external(config);
+ // m_nvram->set_custom_handler([this](nvram_device &, void *p, size_t s) { memcpy(p, memregion("maincpu")->base(), s); }, "vectors");
+
M68000(config, m_maincpu, CLOCK_12MHz);
m_maincpu->set_addrmap(AS_PROGRAM, &itech8_state::ninclown_map);
diff --git a/src/mame/drivers/jackie.cpp b/src/mame/drivers/jackie.cpp
index 7cf3d699def..7225da72082 100644
--- a/src/mame/drivers/jackie.cpp
+++ b/src/mame/drivers/jackie.cpp
@@ -342,7 +342,7 @@ uint8_t jackie_state::expram_r(offs_t offset)
void jackie_state::prg_map(address_map &map)
{
map(0x0000, 0xefff).rom();
- map(0xf000, 0xffff).ram().region("maincpu", 0xf000);
+ map(0xf000, 0xffff).ram();
}
void jackie_state::io_map(address_map &map)
diff --git a/src/mame/drivers/jaguar.cpp b/src/mame/drivers/jaguar.cpp
index 360d3553c0c..17062b14e08 100644
--- a/src/mame/drivers/jaguar.cpp
+++ b/src/mame/drivers/jaguar.cpp
@@ -1960,7 +1960,7 @@ image_init_result jaguar_state::quickload_cb(device_image_interface &image, cons
{
memset(m_shared_ram, 0, 0x200000);
image.fseek(0, SEEK_SET);
- image.fread( &memregion("maincpu")->base()[start-skip], quickload_size);
+ image.fread( &m_shared_ram[(start-skip)/4], quickload_size);
quickload_begin = start;
fix_endian(&memregion("maincpu")->base()[(start-skip)&0xfffffc], quickload_size);
}
diff --git a/src/mame/drivers/jalmah.cpp b/src/mame/drivers/jalmah.cpp
index 8a9fb5a4f71..96e26a2abd4 100644
--- a/src/mame/drivers/jalmah.cpp
+++ b/src/mame/drivers/jalmah.cpp
@@ -129,6 +129,8 @@ public:
m_maincpu(*this, "maincpu"),
m_palette(*this, "palette"),
m_tmap(*this, "scroll%u", 0),
+ m_jmcu_rom_region(*this, "jmcu_rom"),
+ m_jmcu_rom_share(*this, "jmcu_rom"),
m_sharedram(*this, "sharedram"),
m_prirom(*this, "prirom"),
m_p1_key_io(*this, "P1_KEY%u", 0U),
@@ -176,6 +178,8 @@ protected:
required_device<cpu_device> m_maincpu;
required_device<palette_device> m_palette;
optional_device_array<megasys1_tilemap_device, 4> m_tmap;
+ optional_region_ptr<uint16_t> m_jmcu_rom_region;
+ optional_shared_ptr<uint16_t> m_jmcu_rom_share;
uint16_t m_tile_bank;
uint16_t m_pri;
@@ -694,7 +698,7 @@ void jalmah_state::jalmah_map(address_map &map)
void jalmah_state::jalmahv1_map(address_map &map)
{
jalmah_map(map);
- map(0x100000, 0x10ffff).ram().region("jmcu_rom", 0); // extended ROM functions (not on real HW)
+ map(0x100000, 0x10ffff).ram().share("jmcu_rom"); // extended ROM functions (not on real HW)
}
void urashima_state::urashima_map(address_map &map)
@@ -724,7 +728,7 @@ void urashima_state::urashima_map(address_map &map)
map(0x0a0000, 0x0a1fff).noprw();
map(0x0f0000, 0x0f0fff).ram().share("sharedram");/*shared with MCU*/
map(0x0f1000, 0x0fffff).ram(); /*Work Ram*/
- map(0x100000, 0x10ffff).ram().region("jmcu_rom", 0);/*extra RAM for MCU code prg (NOT ON REAL HW!!!)*/
+ map(0x100000, 0x10ffff).ram().share("jmcu_rom");/*extra RAM for MCU code prg (NOT ON REAL HW!!!)*/
}
void jalmah_state::oki_map(address_map &map)
@@ -1075,6 +1079,9 @@ void jalmah_state::machine_start()
void jalmah_state::machine_reset()
{
+ if(m_jmcu_rom_share)
+ memcpy(m_jmcu_rom_share, m_jmcu_rom_region, 0x10000);
+
m_pri = 0;
refresh_priority_system();
@@ -1083,6 +1090,9 @@ void jalmah_state::machine_reset()
void urashima_state::machine_reset()
{
+ if(m_jmcu_rom_share)
+ memcpy(m_jmcu_rom_share, m_jmcu_rom_region, 0x10000);
+
// m_pri = 0;
// initialize tilemap vram to sane defaults (test mode cares)
diff --git a/src/mame/drivers/jr100.cpp b/src/mame/drivers/jr100.cpp
index 748771028d0..f7758b8786f 100644
--- a/src/mame/drivers/jr100.cpp
+++ b/src/mame/drivers/jr100.cpp
@@ -73,7 +73,7 @@ public:
, m_ram(*this, "ram")
, m_pcg(*this, "pcg")
, m_vram(*this, "vram")
- , m_rom(*this, "rom")
+ , m_rom(*this, "maincpu")
, m_via(*this, "via")
, m_cassette(*this, "cassette")
, m_speaker(*this, "speaker")
@@ -104,7 +104,7 @@ private:
required_shared_ptr<uint8_t> m_ram;
required_shared_ptr<uint8_t> m_pcg;
required_shared_ptr<uint8_t> m_vram;
- required_shared_ptr<uint8_t> m_rom;
+ required_region_ptr<uint8_t> m_rom;
required_device<via6522_device> m_via;
required_device<cassette_image_device> m_cassette;
required_device<speaker_sound_device> m_speaker;
@@ -128,7 +128,7 @@ void jr100_state::mem_map(address_map &map)
//map(0xcc00, 0xcfff).; expansion i/o
//map(0xd000, 0xd7ff).rom(); expansion rom for printer control
//map(0xd800, 0xdfff).rom(); expansion rom
- map(0xe000, 0xffff).rom().share("rom").region("maincpu",0);
+ map(0xe000, 0xffff).rom().region("maincpu", 0);
}
// Input ports - names in [ ] are screen actions; otherwise the text is literally printed onscreen
diff --git a/src/mame/drivers/jtc.cpp b/src/mame/drivers/jtc.cpp
index 7c425e7eb46..9da8a967a49 100644
--- a/src/mame/drivers/jtc.cpp
+++ b/src/mame/drivers/jtc.cpp
@@ -93,6 +93,13 @@ class jtces40_state : public jtc_state
{
public:
using jtc_state::jtc_state;
+ jtces40_state(const machine_config &mconfig, device_type type, const char *tag)
+ : jtc_state(mconfig, type, tag)
+ , m_video_ram_40(*this, "videoram40", JTC_ES40_VIDEORAM_SIZE, ENDIANNESS_BIG)
+ , m_color_ram_r(*this, "color_ram_r", JTC_ES40_VIDEORAM_SIZE, ENDIANNESS_BIG)
+ , m_color_ram_g(*this, "color_ram_g", JTC_ES40_VIDEORAM_SIZE, ENDIANNESS_BIG)
+ , m_color_ram_b(*this, "color_ram_b", JTC_ES40_VIDEORAM_SIZE, ENDIANNESS_BIG)
+ { }
void jtces40(machine_config &config);
private:
virtual void video_start() override;
@@ -101,9 +108,11 @@ private:
void videoram_w(offs_t offset, u8 data);
void banksel_w(u8 data);
u8 m_video_bank;
- std::unique_ptr<u8[]> m_color_ram_r;
- std::unique_ptr<u8[]> m_color_ram_g;
- std::unique_ptr<u8[]> m_color_ram_b;
+
+ memory_share_creator<uint8_t> m_video_ram_40;
+ memory_share_creator<uint8_t> m_color_ram_r;
+ memory_share_creator<uint8_t> m_color_ram_g;
+ memory_share_creator<uint8_t> m_color_ram_b;
void jtc_es40_mem(address_map &map);
void es40_palette(palette_device &palette) const;
};
@@ -195,7 +204,7 @@ void jtces40_state::videoram_w(offs_t offset, u8 data)
if (BIT(m_video_bank, 7)) m_color_ram_r[offset] = data;
if (BIT(m_video_bank, 6)) m_color_ram_g[offset] = data;
if (BIT(m_video_bank, 5)) m_color_ram_b[offset] = data;
- if (BIT(m_video_bank, 4)) m_video_ram[offset] = data;
+ if (BIT(m_video_bank, 4)) m_video_ram_40[offset] = data;
}
void jtces40_state::banksel_w(u8 data)
@@ -707,18 +716,8 @@ void jtces40_state::es40_palette(palette_device &palette) const
void jtces40_state::video_start()
{
- /* allocate memory */
- m_video_ram.allocate(JTC_ES40_VIDEORAM_SIZE);
- m_color_ram_r = std::make_unique<u8[]>(JTC_ES40_VIDEORAM_SIZE);
- m_color_ram_g = std::make_unique<u8[]>(JTC_ES40_VIDEORAM_SIZE);
- m_color_ram_b = std::make_unique<u8[]>(JTC_ES40_VIDEORAM_SIZE);
-
/* register for state saving */
save_item(NAME(m_video_bank));
- save_pointer(NAME(m_video_ram.target()), JTC_ES40_VIDEORAM_SIZE);
- save_pointer(NAME(m_color_ram_r), JTC_ES40_VIDEORAM_SIZE);
- save_pointer(NAME(m_color_ram_g), JTC_ES40_VIDEORAM_SIZE);
- save_pointer(NAME(m_color_ram_b), JTC_ES40_VIDEORAM_SIZE);
save_item(NAME(m_centronics_busy));
}
@@ -732,7 +731,7 @@ u32 jtces40_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, co
{
for (int x = 0; x < 40; x++)
{
- u8 const data = m_video_ram[ma + x];
+ u8 const data = m_video_ram_40[ma + x];
u8 const r = ~m_color_ram_r[ma + x];
u8 const g = ~m_color_ram_g[ma + x];
u8 const b = ~m_color_ram_b[ma + x];
diff --git a/src/mame/drivers/jupace.cpp b/src/mame/drivers/jupace.cpp
index 455eef6f8c2..5bb5768521f 100644
--- a/src/mame/drivers/jupace.cpp
+++ b/src/mame/drivers/jupace.cpp
@@ -419,7 +419,7 @@ void ace_state::ace_mem(address_map &map)
{
map(0x0000, 0x1fff).rom();
map(0x2000, 0x23ff).mirror(0x0400).ram().share("video_ram");
- map(0x2800, 0x2bff).mirror(0x0400).ram().share("char_ram").region(Z80_TAG, 0xfc00);
+ map(0x2800, 0x2bff).mirror(0x0400).ram().share("char_ram");
map(0x3000, 0x33ff).mirror(0x0c00).ram();
map(0x4000, 0xffff).ram();
}
@@ -827,14 +827,14 @@ void ace_state::ace(machine_config &config)
//-------------------------------------------------
ROM_START( jupace )
- ROM_REGION( 0x10000, Z80_TAG, 0 )
+ ROM_REGION( 0x2000, Z80_TAG, 0 )
ROM_LOAD( "rom-a.z1", 0x0000, 0x1000, CRC(dc8438a5) SHA1(8fa97eb71e5dd17c7d190c6587ee3840f839347c) )
ROM_LOAD( "rom-b.z2", 0x1000, 0x1000, CRC(4009f636) SHA1(98c5d4bcd74bcf014268cf4c00b2007ea5cc21f3) )
ROM_REGION( 0x1000, "fdc", 0 ) // Deep Thought disc interface
ROM_LOAD( "dos 4.bin", 0x0000, 0x1000, CRC(04c70448) SHA1(53ddcced6ae2feafd687a3b55864726656b71412) )
- ROM_REGION( 0x10000, SP0256AL2_TAG, 0 )
+ ROM_REGION( 0x800, SP0256AL2_TAG, 0 )
ROM_LOAD( "sp0256-al2.ic1", 0x000, 0x800, CRC(b504ac15) SHA1(e60fcb5fa16ff3f3b69d36c7a6e955744d3feafc) )
ROM_END
diff --git a/src/mame/drivers/kangaroo.cpp b/src/mame/drivers/kangaroo.cpp
index 1e7d8e2870d..ecfc6c23099 100644
--- a/src/mame/drivers/kangaroo.cpp
+++ b/src/mame/drivers/kangaroo.cpp
@@ -274,7 +274,7 @@ void kangaroo_state::main_map(address_map &map)
void kangaroo_state::sound_map(address_map &map)
{
- map(0x0000, 0x0fff).rom();
+ map(0x0000, 0x0fff).rom().region("audiocpu", 0);
map(0x4000, 0x43ff).mirror(0x0c00).ram();
map(0x6000, 0x6000).mirror(0x0fff).r("soundlatch", FUNC(generic_latch_8_device::read));
map(0x7000, 0x7000).mirror(0x0fff).w("aysnd", FUNC(ay8910_device::data_w));
diff --git a/src/mame/drivers/kinst.cpp b/src/mame/drivers/kinst.cpp
index a27fafc0d88..233c2a0fa4c 100644
--- a/src/mame/drivers/kinst.cpp
+++ b/src/mame/drivers/kinst.cpp
@@ -196,7 +196,7 @@ public:
m_rambase(*this, "rambase"),
m_rambase2(*this, "rambase2"),
m_control(*this, "control"),
- m_rombase(*this, "rombase"),
+ m_rombase(*this, "user1"),
m_maincpu(*this, "maincpu"),
m_ata(*this, "ata"),
m_dcs(*this, "dcs"),
@@ -218,7 +218,7 @@ private:
required_shared_ptr<uint32_t> m_rambase;
required_shared_ptr<uint32_t> m_rambase2;
required_shared_ptr<uint32_t> m_control;
- required_shared_ptr<uint32_t> m_rombase;
+ required_region_ptr<uint32_t> m_rombase;
required_device<mips3_device> m_maincpu;
required_device<ata_interface_device> m_ata;
required_device<dcs_audio_2k_device> m_dcs;
@@ -484,7 +484,7 @@ void kinst_state::main_map(address_map &map)
map(0x10000080, 0x100000ff).rw(FUNC(kinst_state::control_r), FUNC(kinst_state::control_w)).share("control");
map(0x10000100, 0x1000013f).rw(FUNC(kinst_state::ide_r), FUNC(kinst_state::ide_w));
map(0x10000170, 0x10000173).rw(FUNC(kinst_state::ide_extra_r), FUNC(kinst_state::ide_extra_w));
- map(0x1fc00000, 0x1fc7ffff).rom().region("user1", 0).share("rombase");
+ map(0x1fc00000, 0x1fc7ffff).rom().region("user1", 0);
}
diff --git a/src/mame/drivers/konamigs.cpp b/src/mame/drivers/konamigs.cpp
index a0afaef7075..f006d55d4e7 100644
--- a/src/mame/drivers/konamigs.cpp
+++ b/src/mame/drivers/konamigs.cpp
@@ -59,9 +59,9 @@ public:
, m_rtc_r(*this, "RTCR")
, m_rtc_w(*this, "RTCW")
, m_dipsw_r(*this, "DSW")
- , m_vram(*this, "vram", 0)
- , m_gpuregs(*this, "gpu_regs", 0)
- , m_ymzram(*this, "ymz_ram", 0)
+ , m_vram(*this, "vram")
+ , m_gpuregs(*this, "gpu_regs")
+ , m_ymzram(*this, "ymz_ram")
, m_screen(*this, "screen")
, m_hopper(*this, "hopper")
{ }
diff --git a/src/mame/drivers/kyocera.cpp b/src/mame/drivers/kyocera.cpp
index c6d35055670..d8597cf1f86 100644
--- a/src/mame/drivers/kyocera.cpp
+++ b/src/mame/drivers/kyocera.cpp
@@ -97,28 +97,28 @@ void pc8201_state::bankswitch(uint8_t data)
if (rom_bank > 1)
{
/* RAM */
- program.install_readwrite_bank(0x0000, 0x7fff, "bank1");
+ program.install_readwrite_bank(0x0000, 0x7fff, m_bank1);
}
else
{
/* ROM */
- program.install_read_bank(0x0000, 0x7fff, "bank1");
+ program.install_read_bank(0x0000, 0x7fff, m_bank1);
program.unmap_write(0x0000, 0x7fff);
}
- membank("bank1")->set_entry(rom_bank);
+ m_bank1->set_entry(rom_bank);
switch (ram_bank)
{
case 0:
if (m_ram->size() > 16 * 1024)
{
- program.install_readwrite_bank(0x8000, 0xffff, "bank2");
+ program.install_readwrite_bank(0x8000, 0xffff, m_bank2);
}
else
{
program.unmap_readwrite(0x8000, 0xbfff);
- program.install_readwrite_bank(0xc000, 0xffff, "bank2");
+ program.install_readwrite_bank(0xc000, 0xffff, m_bank2);
}
break;
@@ -128,20 +128,20 @@ void pc8201_state::bankswitch(uint8_t data)
case 2:
if (m_ram->size() > 32 * 1024)
- program.install_readwrite_bank(0x8000, 0xffff, "bank2");
+ program.install_readwrite_bank(0x8000, 0xffff, m_bank2);
else
program.unmap_readwrite(0x8000, 0xffff);
break;
case 3:
if (m_ram->size() > 64 * 1024)
- program.install_readwrite_bank(0x8000, 0xffff, "bank2");
+ program.install_readwrite_bank(0x8000, 0xffff, m_bank2);
else
program.unmap_readwrite(0x8000, 0xffff);
break;
}
- membank("bank2")->set_entry(ram_bank);
+ m_bank2->set_entry(ram_bank);
}
void pc8201_state::bank_w(uint8_t data)
@@ -429,7 +429,7 @@ void kc85_state::ctrl_w(uint8_t data)
*/
/* ROM bank selection */
- membank("bank1")->set_entry(BIT(data, 0));
+ m_bank1->set_entry(BIT(data, 0));
/* printer strobe */
m_centronics->write_strobe(BIT(data, 1));
@@ -467,9 +467,9 @@ void tandy200_state::bankswitch(uint8_t data)
}
else
{
- program.install_read_bank(0x0000, 0x7fff, "bank1");
+ program.install_read_bank(0x0000, 0x7fff, m_bank1);
program.unmap_write(0x0000, 0x7fff);
- membank("bank1")->set_entry(rom_bank);
+ m_bank1->set_entry(rom_bank);
}
if (m_ram->size() < ((ram_bank + 1) * 24 * 1024))
@@ -479,8 +479,8 @@ void tandy200_state::bankswitch(uint8_t data)
}
else
{
- program.install_readwrite_bank(0xa000, 0xffff, "bank2");
- membank("bank2")->set_entry(ram_bank);
+ program.install_readwrite_bank(0xa000, 0xffff, m_bank2);
+ m_bank2->set_entry(ram_bank);
}
}
@@ -1158,27 +1158,27 @@ void kc85_state::machine_start()
m_rtc->oe_w(1);
/* configure ROM banking */
- program.install_read_bank(0x0000, 0x7fff, "bank1");
+ program.install_read_bank(0x0000, 0x7fff, m_bank1);
program.unmap_write(0x0000, 0x7fff);
- membank("bank1")->configure_entry(0, m_rom->base());
- membank("bank1")->configure_entry(1, m_opt_region ? m_opt_region->base() : m_rom->base());
- membank("bank1")->set_entry(0);
+ m_bank1->configure_entry(0, m_rom->base());
+ m_bank1->configure_entry(1, m_opt_region ? m_opt_region->base() : m_rom->base());
+ m_bank1->set_entry(0);
/* configure RAM banking */
switch (m_ram->size())
{
case 16 * 1024:
program.unmap_readwrite(0x8000, 0xbfff);
- program.install_readwrite_bank(0xc000, 0xffff, "bank2");
+ program.install_readwrite_bank(0xc000, 0xffff, m_bank2);
break;
case 32 * 1024:
- program.install_readwrite_bank(0x8000, 0xffff,"bank2");
+ program.install_readwrite_bank(0x8000, 0xffff,m_bank2);
break;
}
- membank("bank2")->configure_entry(0, m_ram->pointer());
- membank("bank2")->set_entry(0);
+ m_bank2->configure_entry(0, m_ram->pointer());
+ m_bank2->set_entry(0);
/* register for state saving */
save_item(NAME(m_bank));
@@ -1201,15 +1201,15 @@ void pc8201_state::machine_start()
m_rtc->oe_w(1);
/* configure ROM banking */
- membank("bank1")->configure_entry(0, m_rom->base());
- membank("bank1")->configure_entry(1, m_opt_region ? m_opt_region->base() : m_rom->base());
- membank("bank1")->configure_entries(2, 2, ram + 0x8000, 0x8000);
- membank("bank1")->set_entry(0);
+ m_bank1->configure_entry(0, m_rom->base());
+ m_bank1->configure_entry(1, m_opt_region ? m_opt_region->base() : m_rom->base());
+ m_bank1->configure_entries(2, 2, ram + 0x8000, 0x8000);
+ m_bank1->set_entry(0);
/* configure RAM banking */
- membank("bank2")->configure_entry(0, ram);
- membank("bank2")->configure_entries(2, 2, ram + 0x8000, 0x8000);
- membank("bank2")->set_entry(0);
+ m_bank2->configure_entry(0, ram);
+ m_bank2->configure_entries(2, 2, ram + 0x8000, 0x8000);
+ m_bank2->set_entry(0);
bankswitch(0);
@@ -1237,37 +1237,37 @@ void trsm100_state::machine_start()
m_rtc->oe_w(1);
/* configure ROM banking */
- program.install_read_bank(0x0000, 0x7fff, "bank1");
+ program.install_read_bank(0x0000, 0x7fff, m_bank1);
program.unmap_write(0x0000, 0x7fff);
- membank("bank1")->configure_entry(0, m_rom->base());
- membank("bank1")->configure_entry(1, m_opt_region ? m_opt_region->base() : m_rom->base());
- membank("bank1")->set_entry(0);
+ m_bank1->configure_entry(0, m_rom->base());
+ m_bank1->configure_entry(1, m_opt_region ? m_opt_region->base() : m_rom->base());
+ m_bank1->set_entry(0);
/* configure RAM banking */
switch (m_ram->size())
{
case 8 * 1024:
program.unmap_readwrite(0x8000, 0xcfff);
- program.install_readwrite_bank(0xe000, 0xffff, "bank2");
+ program.install_readwrite_bank(0xe000, 0xffff, m_bank2);
break;
case 16 * 1024:
program.unmap_readwrite(0x8000, 0xbfff);
- program.install_readwrite_bank(0xc000, 0xffff, "bank2");
+ program.install_readwrite_bank(0xc000, 0xffff, m_bank2);
break;
case 24 * 1024:
program.unmap_readwrite(0x8000, 0x9fff);
- program.install_readwrite_bank(0xa000, 0xffff, "bank2");
+ program.install_readwrite_bank(0xa000, 0xffff, m_bank2);
break;
case 32 * 1024:
- program.install_readwrite_bank(0x8000, 0xffff, "bank2");
+ program.install_readwrite_bank(0x8000, 0xffff, m_bank2);
break;
}
- membank("bank2")->configure_entry(0, m_ram->pointer());
- membank("bank2")->set_entry(0);
+ m_bank2->configure_entry(0, m_ram->pointer());
+ m_bank2->set_entry(0);
/* register for state saving */
save_item(NAME(m_bank));
@@ -1286,14 +1286,14 @@ void tandy200_state::machine_start()
m_tp = 0;
/* configure ROM banking */
- membank("bank1")->configure_entry(0, m_rom->base());
- membank("bank1")->configure_entry(1, m_rom->base() + 0x10000);
- membank("bank1")->configure_entry(2, m_opt_region ? m_opt_region->base() : m_rom->base());
- membank("bank1")->set_entry(0);
+ m_bank1->configure_entry(0, m_rom->base());
+ m_bank1->configure_entry(1, m_rom->base() + 0x10000);
+ m_bank1->configure_entry(2, m_opt_region ? m_opt_region->base() : m_rom->base());
+ m_bank1->set_entry(0);
/* configure RAM banking */
- membank("bank2")->configure_entries(0, 3, m_ram->pointer(), 0x6000);
- membank("bank2")->set_entry(0);
+ m_bank2->configure_entries(0, 3, m_ram->pointer(), 0x6000);
+ m_bank2->set_entry(0);
/* register for state saving */
save_item(NAME(m_bank));
diff --git a/src/mame/drivers/kyugo.cpp b/src/mame/drivers/kyugo.cpp
index 260ede1e56b..3cf137bcd6e 100644
--- a/src/mame/drivers/kyugo.cpp
+++ b/src/mame/drivers/kyugo.cpp
@@ -154,6 +154,13 @@ void kyugo_state::kyugo_main_map(address_map &map)
map(0xf000, 0xf7ff).ram().share(m_shared_ram);
}
+void kyugo_state::srdmissn_main_map(address_map &map)
+{
+ kyugo_main_map(map);
+ map(0x8000, 0x8fff).ram();
+ map(0xe000, 0xe7ff).ram().share(m_shared_ram);
+}
+
void kyugo_state::gyrodine_main_map(address_map &map)
{
kyugo_main_map(map);
@@ -684,6 +691,7 @@ void kyugo_state::srdmissn(machine_config &config)
kyugo_base(config);
// basic machine hardware
+ m_maincpu->set_addrmap(AS_PROGRAM, &kyugo_state::srdmissn_main_map);
m_subcpu->set_addrmap(AS_PROGRAM, &kyugo_state::srdmissn_sub_map);
m_subcpu->set_addrmap(AS_IO, &kyugo_state::srdmissn_sub_portmap);
}
@@ -1576,24 +1584,6 @@ ROM_END
/*************************************
*
- * Game specific initialization
- *
- *************************************/
-
-
-void kyugo_state::init_srdmissn()
-{
- // shared RAM is mapped at 0xe000 as well
- m_maincpu->space(AS_PROGRAM).install_ram(0xe000, 0xe7ff, m_shared_ram);
-
- // extra RAM on sub CPU
- m_subcpu->space(AS_PROGRAM).install_ram(0x8800, 0x8fff);
-}
-
-
-
-/*************************************
- *
* Game drivers
*
*************************************/
@@ -1610,12 +1600,12 @@ GAME( 1985, sonofphx, repulse, repulse, repulse, kyugo_state, empty_init,
GAME( 1985, flashgal, 0, repulse, flashgal, kyugo_state, empty_init, ROT0, "Kyugo / Sega", "Flashgal (set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, flashgalk, flashgal, repulse, flashgal, kyugo_state, empty_init, ROT0, "Kyugo / Sega", "Flashgal (set 1, Kyugo logo)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, flashgala, flashgal, flashgala, flashgal, kyugo_state, empty_init, ROT0, "Kyugo / Sega", "Flashgal (set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, srdmissn, 0, srdmissn, srdmissn, kyugo_state, init_srdmissn, ROT90, "Kyugo / Taito Corporation", "S.R.D. Mission", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, fx, srdmissn, srdmissn, srdmissn, kyugo_state, init_srdmissn, ROT90, "bootleg", "F-X (bootleg of S.R.D. Mission)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, legend, 0, legend, legend, kyugo_state, init_srdmissn, ROT0, "Kyugo / Sega", "Legend", MACHINE_SUPPORTS_SAVE ) // no copyright (maybe also a bootleg?)
-GAME( 1986, legendb, legend, legend, legend, kyugo_state, init_srdmissn, ROT0, "bootleg", "Legion (bootleg of Legend)", MACHINE_SUPPORTS_SAVE ) // no copyright
-GAME( 1987, airwolf, 0, srdmissn, airwolf, kyugo_state, init_srdmissn, ROT0, "Kyugo", "Airwolf", MACHINE_SUPPORTS_SAVE )
-GAME( 1987, airwolfa, airwolf, srdmissn, airwolf, kyugo_state, init_srdmissn, ROT0, "Kyugo (United Amusements license)", "Airwolf (US)", MACHINE_SUPPORTS_SAVE )
-GAME( 1987, skywolf, airwolf, srdmissn, skywolf, kyugo_state, init_srdmissn, ROT0, "bootleg", "Sky Wolf (set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1987, skywolf2, airwolf, srdmissn, airwolf, kyugo_state, init_srdmissn, ROT0, "bootleg", "Sky Wolf (set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1987, skywolf3, airwolf, srdmissn, airwolf, kyugo_state, init_srdmissn, ROT0, "bootleg", "Sky Wolf (set 3)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, srdmissn, 0, srdmissn, srdmissn, kyugo_state, empty_init, ROT90, "Kyugo / Taito Corporation", "S.R.D. Mission", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, fx, srdmissn, srdmissn, srdmissn, kyugo_state, empty_init, ROT90, "bootleg", "F-X (bootleg of S.R.D. Mission)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, legend, 0, legend, legend, kyugo_state, empty_init, ROT0, "Kyugo / Sega", "Legend", MACHINE_SUPPORTS_SAVE ) // no copyright (maybe also a bootleg?)
+GAME( 1986, legendb, legend, legend, legend, kyugo_state, empty_init, ROT0, "bootleg", "Legion (bootleg of Legend)", MACHINE_SUPPORTS_SAVE ) // no copyright
+GAME( 1987, airwolf, 0, srdmissn, airwolf, kyugo_state, empty_init, ROT0, "Kyugo", "Airwolf", MACHINE_SUPPORTS_SAVE )
+GAME( 1987, airwolfa, airwolf, srdmissn, airwolf, kyugo_state, empty_init, ROT0, "Kyugo (United Amusements license)", "Airwolf (US)", MACHINE_SUPPORTS_SAVE )
+GAME( 1987, skywolf, airwolf, srdmissn, skywolf, kyugo_state, empty_init, ROT0, "bootleg", "Sky Wolf (set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1987, skywolf2, airwolf, srdmissn, airwolf, kyugo_state, empty_init, ROT0, "bootleg", "Sky Wolf (set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1987, skywolf3, airwolf, srdmissn, airwolf, kyugo_state, empty_init, ROT0, "bootleg", "Sky Wolf (set 3)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/lc80.cpp b/src/mame/drivers/lc80.cpp
index c1f487b7c77..69011e12b5d 100644
--- a/src/mame/drivers/lc80.cpp
+++ b/src/mame/drivers/lc80.cpp
@@ -294,29 +294,29 @@ void lc80_state::machine_start()
membank("bank4")->configure_entry(0, &ROM[0x2000]);
membank("bank4")->set_entry(0);
- program.install_readwrite_bank(0x0000, 0x07ff, "bank1");
- program.install_readwrite_bank(0x0800, 0x0fff, "bank2");
- program.install_readwrite_bank(0x1000, 0x17ff, "bank3");
+ program.install_readwrite_bank(0x0000, 0x07ff, membank("bank1"));
+ program.install_readwrite_bank(0x0800, 0x0fff, membank("bank2"));
+ program.install_readwrite_bank(0x1000, 0x17ff, membank("bank3"));
switch (m_ram->size())
{
case 1*1024:
- program.install_readwrite_bank(0x2000, 0x23ff, "bank4");
+ program.install_readwrite_bank(0x2000, 0x23ff, membank("bank4"));
program.unmap_readwrite(0x2400, 0x2fff);
break;
case 2*1024:
- program.install_readwrite_bank(0x2000, 0x27ff, "bank4");
+ program.install_readwrite_bank(0x2000, 0x27ff, membank("bank4"));
program.unmap_readwrite(0x2800, 0x2fff);
break;
case 3*1024:
- program.install_readwrite_bank(0x2000, 0x2bff, "bank4");
+ program.install_readwrite_bank(0x2000, 0x2bff, membank("bank4"));
program.unmap_readwrite(0x2c00, 0x2fff);
break;
case 4*1024:
- program.install_readwrite_bank(0x2000, 0x2fff, "bank4");
+ program.install_readwrite_bank(0x2000, 0x2fff, membank("bank4"));
break;
}
diff --git a/src/mame/drivers/leapster.cpp b/src/mame/drivers/leapster.cpp
index 4cf61ca3e01..1393ff342a9 100644
--- a/src/mame/drivers/leapster.cpp
+++ b/src/mame/drivers/leapster.cpp
@@ -283,10 +283,7 @@ void leapster_state::machine_start()
if (m_cart_rom)
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
-
- space.install_readwrite_bank(0x80000000, 0x807fffff, "cartrom");
- membank("cartrom")->set_base(m_cart_rom->base());
+ m_maincpu->space(AS_PROGRAM).install_rom(0x80000000, 0x807fffff, m_cart_rom->base());
}
}
diff --git a/src/mame/drivers/leland.cpp b/src/mame/drivers/leland.cpp
index 3e763debcd5..a3ee92f1223 100644
--- a/src/mame/drivers/leland.cpp
+++ b/src/mame/drivers/leland.cpp
@@ -83,7 +83,7 @@ void leland_state::master_map_program(address_map &map)
{
map(0x0000, 0x1fff).rom();
map(0x2000, 0x9fff).bankr(m_master_bankslot[0]);
- map(0xa000, 0xdfff).bankr(m_master_bankslot[1]).w(FUNC(leland_state::leland_battery_ram_w)).share("battery");
+ map(0xa000, 0xdfff).bankr(m_master_bankslot[1]).w(FUNC(leland_state::leland_battery_ram_w));
map(0xe000, 0xefff).ram().share(m_mainram);
map(0xf000, 0xf3ff).rw(FUNC(leland_state::gated_paletteram_r), FUNC(leland_state::gated_paletteram_w)).share("palette");
map(0xf800, 0xf801).w(FUNC(leland_state::master_video_addr_w));
@@ -110,7 +110,7 @@ void ataxx_state::master_map_program_2(address_map &map)
{
map(0x0000, 0x1fff).rom();
map(0x2000, 0x9fff).bankr(m_master_bankslot[0]);
- map(0xa000, 0xdfff).bankr(m_master_bankslot[1]).w(FUNC(ataxx_state::ataxx_battery_ram_w)).share("battery");
+ map(0xa000, 0xdfff).bankr(m_master_bankslot[1]).w(FUNC(ataxx_state::ataxx_battery_ram_w));
map(0xe000, 0xf7ff).ram().share(m_mainram);
map(0xf800, 0xffff).rw(FUNC(ataxx_state::paletteram_and_misc_r), FUNC(ataxx_state::paletteram_and_misc_w)).share("palette");
}
@@ -177,6 +177,11 @@ void leland_state::slave_map_program(address_map &map)
map(0xffff, 0xffff).w(FUNC(leland_state::ataxx_slave_banksw_w));
}
+void leland_state::asylum_slave_map_program(address_map &map)
+{
+ slave_map_program(map);
+ map(0xf000, 0xfffb).ram();
+}
void ataxx_state::slave_map_io_2(address_map &map)
{
@@ -1077,6 +1082,11 @@ void ataxx_state::wsf(machine_config &config)
WSF_80186(config.replace(), m_sound, 0).set_master_cpu_tag(m_master);
}
+void ataxx_state::asylum(machine_config &config)
+{
+ wsf(config);
+ m_slave->set_addrmap(AS_PROGRAM, &ataxx_state::asylum_slave_map_program);
+}
/*************************************
@@ -3351,9 +3361,6 @@ void ataxx_state::init_asylum()
rotate_memory("master");
rotate_memory("slave");
- /* asylum appears to have some extra RAM for the slave CPU */
- m_slave->space(AS_PROGRAM).install_ram(0xf000, 0xfffb);
-
/* set up additional input ports */
m_master->space(AS_IO).install_read_port(0x0d, 0x0d, "P2");
m_master->space(AS_IO).install_read_port(0x0e, 0x0e, "P1");
@@ -3417,4 +3424,4 @@ GAME( 1990, wsf, 0, wsf, wsf, ataxx_state, init_wsf,
GAME( 1990, wsf3, wsf, wsf, wsf, ataxx_state, init_wsf, ROT0, "Leland Corporation", "World Soccer Finals (rev 3)", 0 )
GAME( 1991, indyheat, 0, wsf, indyheat, ataxx_state, init_indyheat, ROT0, "Leland Corporation", "Danny Sullivan's Indy Heat (rev 1)", 0 )
GAME( 1991, brutforc, 0, wsf, brutforc, ataxx_state, init_brutforc, ROT0, "Leland Corporation", "Brute Force", 0 )
-GAME( 1991, asylum, 0, wsf, brutforc, ataxx_state, init_asylum, ROT270, "Leland Corporation", "Asylum (prototype)", 0 )
+GAME( 1991, asylum, 0, asylum, brutforc, ataxx_state, init_asylum, ROT270, "Leland Corporation", "Asylum (prototype)", 0 )
diff --git a/src/mame/drivers/liberate.cpp b/src/mame/drivers/liberate.cpp
index 7cd62ad4243..ac189b4eac9 100644
--- a/src/mame/drivers/liberate.cpp
+++ b/src/mame/drivers/liberate.cpp
@@ -79,7 +79,7 @@ void liberate_state::deco16_bank_w(uint8_t data)
if (m_bank)
m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0x800f, read8sm_delegate(*this, FUNC(liberate_state::deco16_io_r)));
else
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x8000, 0x800f, "bank1");
+ m_maincpu->space(AS_PROGRAM).install_read_bank(0x8000, 0x800f, membank("bank1"));
}
uint8_t liberate_state::prosoccr_bank_r(offs_t offset)
diff --git a/src/mame/drivers/limenko.cpp b/src/mame/drivers/limenko.cpp
index 1455aaa25f3..8c554407f93 100644
--- a/src/mame/drivers/limenko.cpp
+++ b/src/mame/drivers/limenko.cpp
@@ -54,6 +54,7 @@ public:
, m_spriteram(*this, "spriteram")
, m_videoreg(*this, "videoreg")
, m_gfx_region(*this, "gfx")
+ , m_qs1000_bank(*this, "qs1000_bank")
{
}
@@ -87,6 +88,8 @@ private:
required_shared_ptr<u32> m_videoreg;
required_region_ptr<u8> m_gfx_region;
+ memory_bank_creator m_qs1000_bank;
+
tilemap_t *m_bg_tilemap;
tilemap_t *m_md_tilemap;
tilemap_t *m_fg_tilemap;
@@ -200,7 +203,7 @@ void limenko_state::qs1000_p3_w(u8 data)
// ...x .... - ?
// ..x. .... - /IRQ clear
- membank("qs1000:bank")->set_entry(data & 0x07);
+ m_qs1000_bank->set_entry(data & 0x07);
if (!BIT(data, 5))
m_soundlatch->acknowledge_w();
@@ -1071,8 +1074,8 @@ u32 limenko_state::spotty_speedup_r()
void limenko_state::init_common()
{
// Set up the QS1000 program ROM banking, taking care not to overlap the internal RAM
- m_qs1000->cpu().space(AS_IO).install_read_bank(0x0100, 0xffff, "bank");
- membank("qs1000:bank")->configure_entries(0, 8, memregion("qs1000:cpu")->base()+0x100, 0x10000);
+ m_qs1000->cpu().space(AS_IO).install_read_bank(0x0100, 0xffff, m_qs1000_bank);
+ m_qs1000_bank->configure_entries(0, 8, memregion("qs1000:cpu")->base()+0x100, 0x10000);
m_spriteram_bit = 1;
}
diff --git a/src/mame/drivers/lisa.cpp b/src/mame/drivers/lisa.cpp
index ea3e118e38d..38ab487ab35 100644
--- a/src/mame/drivers/lisa.cpp
+++ b/src/mame/drivers/lisa.cpp
@@ -33,7 +33,7 @@ void lisa_state::lisa_fdc_map(address_map &map)
map(0x0000, 0x03ff).ram().share("fdc_ram"); /* RAM (shared with 68000) */
map(0x0400, 0x07ff).rw(FUNC(lisa_state::lisa_fdc_io_r), FUNC(lisa_state::lisa_fdc_io_w)); /* disk controller (IWM and TTL logic) */
map(0x0800, 0x0fff).noprw();
- map(0x1000, 0x1fff).rom().region("fdccpu", 0x1000).share("fdc_rom"); /* ROM */
+ map(0x1000, 0x1fff).rom().region("fdccpu", 0x1000); /* ROM */
}
void lisa_state::lisa210_fdc_map(address_map &map)
@@ -43,7 +43,7 @@ void lisa_state::lisa210_fdc_map(address_map &map)
map(0x0400, 0x07ff).noprw(); /* nothing, or RAM wrap-around ??? */
map(0x0800, 0x0bff).rw(FUNC(lisa_state::lisa_fdc_io_r), FUNC(lisa_state::lisa_fdc_io_w)); /* disk controller (IWM and TTL logic) */
map(0x0c00, 0x0fff).noprw(); /* nothing, or IO port wrap-around ??? */
- map(0x1000, 0x1fff).rom().region("fdccpu", 0x1000).share("fdc_rom"); /* ROM */
+ map(0x1000, 0x1fff).rom().region("fdccpu", 0x1000); /* ROM */
}
diff --git a/src/mame/drivers/m20.cpp b/src/mame/drivers/m20.cpp
index 557c4e684a1..e1e1f1b6bf5 100644
--- a/src/mame/drivers/m20.cpp
+++ b/src/mame/drivers/m20.cpp
@@ -347,84 +347,75 @@ void m20_state::install_memory()
/* install mainboard memory (aka DRAM0) */
/* <0>0000 */
- pspace.install_readwrite_bank(0x0000, 0x3fff, 0, "dram0_4000");
- dspace.install_readwrite_bank(0x0000, 0x3fff, 0, "dram0_4000");
+ pspace.install_ram(0x0000, 0x3fff, 0, memptr + 0x4000);
+ dspace.install_ram(0x0000, 0x3fff, 0, memptr + 0x4000);
/* <0>4000 */
- pspace.install_readwrite_bank(0x4000, 0x7fff, 0, "dram0_8000");
+ pspace.install_ram(0x4000, 0x7fff, 0, memptr + 0x8000);
/* <0>8000 */
- pspace.install_readwrite_bank(0x8000, 0xbfff, 0, "dram0_c000");
+ pspace.install_ram(0x8000, 0xbfff, 0, memptr + 0xc000);
/* <0>C000 */
- pspace.install_readwrite_bank(0xc000, 0xcfff, 0, "dram0_10000");
+ pspace.install_ram(0xc000, 0xcfff, 0, memptr + 0x10000);
/* <1>0000 */
- pspace.install_readwrite_bank(0x10000, 0x13fff, 0, "dram0_8000");
- dspace.install_readwrite_bank(0x10000, 0x13fff, 0, "dram0_14000");
+ pspace.install_ram(0x10000, 0x13fff, 0, memptr + 0x8000);
+ dspace.install_ram(0x10000, 0x13fff, 0, memptr + 0x14000);
/* <1>4000 */
- pspace.install_readwrite_bank(0x14000, 0x17fff, 0, "dram0_c000");
- dspace.install_readwrite_bank(0x14000, 0x17fff, 0, "dram0_18000");
+ pspace.install_ram(0x14000, 0x17fff, 0, memptr + 0xc000);
+ dspace.install_ram(0x14000, 0x17fff, 0, memptr + 0x18000);
/* <1>8000 */
- pspace.install_readwrite_bank(0x18000, 0x1bfff, 0, "dram0_10000");
- dspace.install_readwrite_bank(0x18000, 0x1bfff, 0, "dram0_1c000");
+ pspace.install_ram(0x18000, 0x1bfff, 0, memptr + 0x10000);
+ dspace.install_ram(0x18000, 0x1bfff, 0, memptr + 0x1c000);
/* <1>c000 empty*/
/* <2>0000 */
- pspace.install_readwrite_bank(0x20000, 0x23fff, 0, "dram0_14000");
- dspace.install_readwrite_bank(0x20000, 0x23fff, 0, "dram0_14000");
+ pspace.install_ram(0x20000, 0x23fff, 0, memptr + 0x14000);
+ dspace.install_ram(0x20000, 0x23fff, 0, memptr + 0x14000);
/* <2>4000 */
- pspace.install_readwrite_bank(0x24000, 0x27fff, 0, "dram0_18000");
- dspace.install_readwrite_bank(0x24000, 0x27fff, 0, "dram0_18000");
+ pspace.install_ram(0x24000, 0x27fff, 0, memptr + 0x18000);
+ dspace.install_ram(0x24000, 0x27fff, 0, memptr + 0x18000);
/* <2>8000 */
- pspace.install_readwrite_bank(0x28000, 0x2bfff, 0, "dram0_1c000");
- dspace.install_readwrite_bank(0x28000, 0x2bfff, 0, "dram0_1c000");
+ pspace.install_ram(0x28000, 0x2bfff, 0, memptr + 0x1c000);
+ dspace.install_ram(0x28000, 0x2bfff, 0, memptr + 0x1c000);
/* <2>c000 empty*/
/* <3>0000 (video buffer)
- pspace.install_readwrite_bank(0x30000, 0x33fff, 0, "dram0_0000");
- dspace.install_readwrite_bank(0x30000, 0x33fff, 0, "dram0_0000");
+ pspace.install_ram(0x30000, 0x33fff, 0, memptr + 0x0000);
+ dspace.install_ram(0x30000, 0x33fff, 0, memptr + 0x0000);
*/
/* <5>0000 */
- dspace.install_readwrite_bank(0x50000, 0x53fff, 0, "dram0_8000");
+ dspace.install_ram(0x50000, 0x53fff, 0, memptr + 0x8000);
/* <5>4000 */
- dspace.install_readwrite_bank(0x54000, 0x57fff, 0, "dram0_c000");
+ dspace.install_ram(0x54000, 0x57fff, 0, memptr + 0xc000);
/* <5>8000 */
- dspace.install_readwrite_bank(0x58000, 0x5bfff, 0, "dram0_10000");
+ dspace.install_ram(0x58000, 0x5bfff, 0, memptr + 0x10000);
/* <5>c000 expansion bus */
/* <6>0000 */
- pspace.install_readwrite_bank(0x60000, 0x63fff, 0, "dram0_8000");
- dspace.install_readwrite_bank(0x60000, 0x63fff, 0, "dram0_8000");
+ pspace.install_ram(0x60000, 0x63fff, 0, memptr + 0x8000);
+ dspace.install_ram(0x60000, 0x63fff, 0, memptr + 0x8000);
/* <6>4000 */
- pspace.install_readwrite_bank(0x64000, 0x67fff, 0, "dram0_c000");
- dspace.install_readwrite_bank(0x64000, 0x67fff, 0, "dram0_c000");
+ pspace.install_ram(0x64000, 0x67fff, 0, memptr + 0xc000);
+ dspace.install_ram(0x64000, 0x67fff, 0, memptr + 0xc000);
/* <6>8000 */
- pspace.install_readwrite_bank(0x68000, 0x6bfff, 0, "dram0_10000");
- dspace.install_readwrite_bank(0x68000, 0x6bfff, 0, "dram0_10000");
+ pspace.install_ram(0x68000, 0x6bfff, 0, memptr + 0x10000);
+ dspace.install_ram(0x68000, 0x6bfff, 0, memptr + 0x10000);
/* <6>c000 empty*/
/* segment <7> expansion ROM? */
/* <8>0000 */
- pspace.install_readwrite_bank(0x80000, 0x83fff, 0, "dram0_8000");
- dspace.install_readwrite_bank(0x80000, 0x83fff, 0, "dram0_18000");
+ pspace.install_ram(0x80000, 0x83fff, 0, memptr + 0x8000);
+ dspace.install_ram(0x80000, 0x83fff, 0, memptr + 0x18000);
/* <8>4000 */
- pspace.install_readwrite_bank(0x84000, 0x87fff, 0, "dram0_c000");
- dspace.install_readwrite_bank(0x84000, 0x87fff, 0, "dram0_1c000");
+ pspace.install_ram(0x84000, 0x87fff, 0, memptr + 0xc000);
+ dspace.install_ram(0x84000, 0x87fff, 0, memptr + 0x1c000);
/* <9>0000 */
- pspace.install_readwrite_bank(0x90000, 0x93fff, 0, "dram0_18000");
- dspace.install_readwrite_bank(0x90000, 0x93fff, 0, "dram0_18000");
+ pspace.install_ram(0x90000, 0x93fff, 0, memptr + 0x18000);
+ dspace.install_ram(0x90000, 0x93fff, 0, memptr + 0x18000);
/* <9>4000 */
- pspace.install_readwrite_bank(0x94000, 0x97fff, 0, "dram0_1c000");
- dspace.install_readwrite_bank(0x94000, 0x97fff, 0, "dram0_1c000");
+ pspace.install_ram(0x94000, 0x97fff, 0, memptr + 0x1c000);
+ dspace.install_ram(0x94000, 0x97fff, 0, memptr + 0x1c000);
/* <A>0000 */
- pspace.install_readwrite_bank(0xa0000, 0xa3fff, 0, "dram0_8000");
- dspace.install_readwrite_bank(0xa0000, 0xa3fff, 0, "dram0_8000");
+ pspace.install_ram(0xa0000, 0xa3fff, 0, memptr + 0x8000);
+ dspace.install_ram(0xa0000, 0xa3fff, 0, memptr + 0x8000);
/* <A>4000 */
- pspace.install_readwrite_bank(0xa4000, 0xa7fff, 0, "dram0_c000");
- dspace.install_readwrite_bank(0xa4000, 0xa7fff, 0, "dram0_c000");
-
- //membank("dram0_0000")->set_base(memptr);
- membank("dram0_4000")->set_base(memptr + 0x4000);
- membank("dram0_8000")->set_base(memptr + 0x8000);
- membank("dram0_c000")->set_base(memptr + 0xc000);
- membank("dram0_10000")->set_base(memptr + 0x10000);
- membank("dram0_14000")->set_base(memptr + 0x14000);
- membank("dram0_18000")->set_base(memptr + 0x18000);
- membank("dram0_1c000")->set_base(memptr + 0x1c000);
+ pspace.install_ram(0xa4000, 0xa7fff, 0, memptr + 0xc000);
+ dspace.install_ram(0xa4000, 0xa7fff, 0, memptr + 0xc000);
if (m_memsize > 128 * 1024) {
/* install memory expansions (DRAM1..DRAM3) */
@@ -439,9 +430,9 @@ void m20_state::install_memory()
map( 0x88000, 0x8bfff ).ram().share("dram1_4000");
map( 0xa8000, 0xabfff ).ram().share("dram1_4000");
*/
- pspace.install_readwrite_bank(0x2c000, 0x2ffff, 0, "dram1_0000");
- pspace.install_readwrite_bank(0x88000, 0x8bfff, 0, "dram1_4000");
- pspace.install_readwrite_bank(0xa8000, 0xabfff, 0, "dram1_4000");
+ pspace.install_ram(0x2c000, 0x2ffff, 0, memptr + 0x20000);
+ pspace.install_ram(0x88000, 0x8bfff, 0, memptr + 0x24000);
+ pspace.install_ram(0xa8000, 0xabfff, 0, memptr + 0x24000);
/*
data
@@ -450,13 +441,10 @@ void m20_state::install_memory()
map( 0x2c000, 0x2ffff ).ram().share("dram1_0000");
map( 0xa8000, 0xabfff ).ram().share("dram1_4000");
*/
- dspace.install_readwrite_bank(0x4000, 0x7fff, 0, "dram1_4000");
- dspace.install_readwrite_bank(0x1c000, 0x1ffff, 0, "dram1_0000");
- dspace.install_readwrite_bank(0x2c000, 0x2ffff, 0, "dram1_0000");
- dspace.install_readwrite_bank(0xa8000, 0xabfff, 0, "dram1_4000");
-
- membank("dram1_0000")->set_base(memptr + 0x20000);
- membank("dram1_4000")->set_base(memptr + 0x24000);
+ dspace.install_ram(0x4000, 0x7fff, 0, memptr + 0x24000);
+ dspace.install_ram(0x1c000, 0x1ffff, 0, memptr + 0x20000);
+ dspace.install_ram(0x2c000, 0x2ffff, 0, memptr + 0x20000);
+ dspace.install_ram(0xa8000, 0xabfff, 0, memptr + 0x24000);
if (m_memsize > 128 * 1024 + 32768) {
/* DRAM2, 32K */
@@ -466,9 +454,9 @@ void m20_state::install_memory()
map( 0x98000, 0x9bfff ).ram().share("dram2_4000");
map( 0xac000, 0xaffff ).ram().share("dram2_0000");
*/
- pspace.install_readwrite_bank(0x8c000, 0x8ffff, 0, "dram2_0000");
- pspace.install_readwrite_bank(0x98000, 0x9bfff, 0, "dram2_4000");
- pspace.install_readwrite_bank(0xac000, 0xaffff, 0, "dram2_0000");
+ pspace.install_ram(0x8c000, 0x8ffff, 0, memptr + 0x28000);
+ pspace.install_ram(0x98000, 0x9bfff, 0, memptr + 0x2c000);
+ pspace.install_ram(0xac000, 0xaffff, 0, memptr + 0x28000);
/* data
map( 0x08000, 0x0bfff ).ram().share("dram2_0000");
@@ -477,14 +465,11 @@ void m20_state::install_memory()
map( 0x98000, 0x9bfff ).ram().share("dram2_4000");
map( 0xac000, 0xaffff ).ram().share("dram2_0000");
*/
- dspace.install_readwrite_bank(0x8000, 0xbfff, 0, "dram2_0000");
- dspace.install_readwrite_bank(0xc000, 0xffff, 0, "dram2_4000");
- dspace.install_readwrite_bank(0x88000, 0x8bfff, 0, "dram2_4000");
- dspace.install_readwrite_bank(0x98000, 0x9bfff, 0, "dram2_4000");
- dspace.install_readwrite_bank(0xac000, 0xaffff, 0, "dram2_0000");
-
- membank("dram2_0000")->set_base(memptr + 0x28000);
- membank("dram2_4000")->set_base(memptr + 0x2c000);
+ dspace.install_ram(0x8000, 0xbfff, 0, memptr + 0x28000);
+ dspace.install_ram(0xc000, 0xffff, 0, memptr + 0x2c000);
+ dspace.install_ram(0x88000, 0x8bfff, 0, memptr + 0x2c000);
+ dspace.install_ram(0x98000, 0x9bfff, 0, memptr + 0x2c000);
+ dspace.install_ram(0xac000, 0xaffff, 0, memptr + 0x28000);
}
if (m_memsize > 128 * 1024 + 2 * 32768) {
/* DRAM3, 32K */
@@ -493,8 +478,8 @@ void m20_state::install_memory()
map( 0x9c000, 0x9ffff ).ram().share("dram3_0000");
map( 0xb0000, 0xb3fff ).ram().share("dram3_4000");
*/
- pspace.install_readwrite_bank(0x9c000, 0x9ffff, 0, "dram3_0000");
- pspace.install_readwrite_bank(0xb0000, 0xb3fff, 0, "dram3_4000");
+ pspace.install_ram(0x9c000, 0x9ffff, 0, memptr + 0x30000);
+ pspace.install_ram(0xb0000, 0xb3fff, 0, memptr + 0x34000);
/* data
map( 0x44000, 0x47fff ).ram().share("dram3_0000");
@@ -504,15 +489,12 @@ void m20_state::install_memory()
map( 0xb0000, 0xb3fff ).ram().share("dram3_4000");
map( 0xc0000, 0xc3fff ).ram().share("dram3_4000");
*/
- dspace.install_readwrite_bank(0x44000, 0x47fff, 0, "dram3_0000");
- dspace.install_readwrite_bank(0x48000, 0x4bfff, 0, "dram3_4000");
- dspace.install_readwrite_bank(0x8c000, 0x8ffff, 0, "dram3_0000");
- dspace.install_readwrite_bank(0x9c000, 0x9ffff, 0, "dram3_0000");
- dspace.install_readwrite_bank(0xb0000, 0xb3fff, 0, "dram3_4000");
- dspace.install_readwrite_bank(0xc0000, 0xc3fff, 0, "dram3_4000");
-
- membank("dram3_0000")->set_base(memptr + 0x30000);
- membank("dram3_4000")->set_base(memptr + 0x34000);
+ dspace.install_ram(0x44000, 0x47fff, 0, memptr + 0x30000);
+ dspace.install_ram(0x48000, 0x4bfff, 0, memptr + 0x34000);
+ dspace.install_ram(0x8c000, 0x8ffff, 0, memptr + 0x30000);
+ dspace.install_ram(0x9c000, 0x9ffff, 0, memptr + 0x30000);
+ dspace.install_ram(0xb0000, 0xb3fff, 0, memptr + 0x34000);
+ dspace.install_ram(0xc0000, 0xc3fff, 0, memptr + 0x34000);
}
}
else {
@@ -532,16 +514,16 @@ void m20_state::install_memory()
map( 0xb4000, 0xb7fff ).ram().share("dram1_18000");
map( 0xb8000, 0xbbfff ).ram().share("dram1_1c000");
*/
- pspace.install_readwrite_bank(0x2c000, 0x2ffff, 0, "dram1_0000");
- pspace.install_readwrite_bank(0x88000, 0x8bfff, 0, "dram1_4000");
- pspace.install_readwrite_bank(0x8c000, 0x8ffff, 0, "dram1_8000");
- pspace.install_readwrite_bank(0x98000, 0x9bfff, 0, "dram1_c000");
- pspace.install_readwrite_bank(0x9c000, 0x9ffff, 0, "dram1_10000");
- pspace.install_readwrite_bank(0xa8000, 0xabfff, 0, "dram1_4000");
- pspace.install_readwrite_bank(0xac000, 0xaffff, 0, "dram1_8000");
- pspace.install_readwrite_bank(0xb0000, 0xb3fff, 0, "dram1_14000");
- pspace.install_readwrite_bank(0xb4000, 0xb7fff, 0, "dram1_18000");
- pspace.install_readwrite_bank(0xb8000, 0xbbfff, 0, "dram1_1c000");
+ pspace.install_ram(0x2c000, 0x2ffff, 0, memptr + 0x20000);
+ pspace.install_ram(0x88000, 0x8bfff, 0, memptr + 0x24000);
+ pspace.install_ram(0x8c000, 0x8ffff, 0, memptr + 0x28000);
+ pspace.install_ram(0x98000, 0x9bfff, 0, memptr + 0x2c000);
+ pspace.install_ram(0x9c000, 0x9ffff, 0, memptr + 0x30000);
+ pspace.install_ram(0xa8000, 0xabfff, 0, memptr + 0x24000);
+ pspace.install_ram(0xac000, 0xaffff, 0, memptr + 0x28000);
+ pspace.install_ram(0xb0000, 0xb3fff, 0, memptr + 0x34000);
+ pspace.install_ram(0xb4000, 0xb7fff, 0, memptr + 0x38000);
+ pspace.install_ram(0xb8000, 0xbbfff, 0, memptr + 0x3c000);
/* data
map( 0x04000, 0x07fff ).ram().share("dram1_4000");
@@ -557,27 +539,18 @@ void m20_state::install_memory()
map( 0xb4000, 0xb7fff ).ram().share("dram1_18000");
map( 0xb8000, 0xbbfff ).ram().share("dram1_1c000");
*/
- dspace.install_readwrite_bank(0x4000, 0x7fff, 0, "dram1_4000");
- dspace.install_readwrite_bank(0x1c000, 0x1ffff, 0, "dram1_0000");
- dspace.install_readwrite_bank(0x2c000, 0x2ffff, 0, "dram1_0000");
- dspace.install_readwrite_bank(0x88000, 0x8bfff, 0, "dram1_c000");
- dspace.install_readwrite_bank(0x8c000, 0x8ffff, 0, "dram1_10000");
- dspace.install_readwrite_bank(0x98000, 0x9bfff, 0, "dram1_c000");
- dspace.install_readwrite_bank(0x9c000, 0x9ffff, 0, "dram1_10000");
- dspace.install_readwrite_bank(0xa8000, 0xabfff, 0, "dram1_4000");
- dspace.install_readwrite_bank(0xac000, 0xaffff, 0, "dram1_8000");
- dspace.install_readwrite_bank(0xb0000, 0xb3fff, 0, "dram1_14000");
- dspace.install_readwrite_bank(0xb4000, 0xb7fff, 0, "dram1_18000");
- dspace.install_readwrite_bank(0xb8000, 0xbbfff, 0, "dram1_1c000");
-
- membank("dram1_0000")->set_base(memptr + 0x20000);
- membank("dram1_4000")->set_base(memptr + 0x24000);
- membank("dram1_8000")->set_base(memptr + 0x28000);
- membank("dram1_c000")->set_base(memptr + 0x2c000);
- membank("dram1_10000")->set_base(memptr + 0x30000);
- membank("dram1_14000")->set_base(memptr + 0x34000);
- membank("dram1_18000")->set_base(memptr + 0x38000);
- membank("dram1_1c000")->set_base(memptr + 0x3c000);
+ dspace.install_ram(0x4000, 0x7fff, 0, memptr + 0x24000);
+ dspace.install_ram(0x1c000, 0x1ffff, 0, memptr + 0x20000);
+ dspace.install_ram(0x2c000, 0x2ffff, 0, memptr + 0x20000);
+ dspace.install_ram(0x88000, 0x8bfff, 0, memptr + 0x2c000);
+ dspace.install_ram(0x8c000, 0x8ffff, 0, memptr + 0x30000);
+ dspace.install_ram(0x98000, 0x9bfff, 0, memptr + 0x2c000);
+ dspace.install_ram(0x9c000, 0x9ffff, 0, memptr + 0x30000);
+ dspace.install_ram(0xa8000, 0xabfff, 0, memptr + 0x24000);
+ dspace.install_ram(0xac000, 0xaffff, 0, memptr + 0x28000);
+ dspace.install_ram(0xb0000, 0xb3fff, 0, memptr + 0x34000);
+ dspace.install_ram(0xb4000, 0xb7fff, 0, memptr + 0x38000);
+ dspace.install_ram(0xb8000, 0xbbfff, 0, memptr + 0x3c000);
if (m_memsize > 256 * 1024) {
/* DRAM2, 128K */
@@ -594,14 +567,14 @@ void m20_state::install_memory()
map( 0xd4000, 0xd7fff ).ram().share("dram2_18000");
map( 0xd8000, 0xdbfff ).ram().share("dram2_1c000");
*/
- pspace.install_readwrite_bank(0xbc000, 0xbffff, 0, "dram2_0000");
- pspace.install_readwrite_bank(0xc0000, 0xc3fff, 0, "dram2_4000");
- pspace.install_readwrite_bank(0xc4000, 0xc7fff, 0, "dram2_8000");
- pspace.install_readwrite_bank(0xc8000, 0xcbfff, 0, "dram2_c000");
- pspace.install_readwrite_bank(0xcc000, 0xcffff, 0, "dram2_10000");
- pspace.install_readwrite_bank(0xd0000, 0xd3fff, 0, "dram2_14000");
- pspace.install_readwrite_bank(0xd4000, 0xd7fff, 0, "dram2_18000");
- pspace.install_readwrite_bank(0xd8000, 0xdbfff, 0, "dram2_1c000");
+ pspace.install_ram(0xbc000, 0xbffff, 0, memptr + 0x40000);
+ pspace.install_ram(0xc0000, 0xc3fff, 0, memptr + 0x44000);
+ pspace.install_ram(0xc4000, 0xc7fff, 0, memptr + 0x48000);
+ pspace.install_ram(0xc8000, 0xcbfff, 0, memptr + 0x4c000);
+ pspace.install_ram(0xcc000, 0xcffff, 0, memptr + 0x50000);
+ pspace.install_ram(0xd0000, 0xd3fff, 0, memptr + 0x54000);
+ pspace.install_ram(0xd4000, 0xd7fff, 0, memptr + 0x58000);
+ pspace.install_ram(0xd8000, 0xdbfff, 0, memptr + 0x5c000);
/* data
map( 0x08000, 0x0bfff ).ram().share("dram2_0000");
@@ -618,25 +591,16 @@ void m20_state::install_memory()
map( 0xd4000, 0xd7fff ).ram().share("dram2_18000");
map( 0xd8000, 0xdbfff ).ram().share("dram2_1c000");
*/
- dspace.install_readwrite_bank(0x8000, 0xbfff, 0, "dram2_0000");
- dspace.install_readwrite_bank(0xc000, 0xffff, 0, "dram2_4000");
- dspace.install_readwrite_bank(0xbc000, 0xbffff, 0, "dram2_0000");
- dspace.install_readwrite_bank(0xc0000, 0xc3fff, 0, "dram2_4000");
- dspace.install_readwrite_bank(0xc4000, 0xc7fff, 0, "dram2_8000");
- dspace.install_readwrite_bank(0xc8000, 0xcbfff, 0, "dram2_c000");
- dspace.install_readwrite_bank(0xcc000, 0xcffff, 0, "dram2_10000");
- dspace.install_readwrite_bank(0xd0000, 0xd3fff, 0, "dram2_14000");
- dspace.install_readwrite_bank(0xd4000, 0xd7fff, 0, "dram2_18000");
- dspace.install_readwrite_bank(0xd8000, 0xdbfff, 0, "dram2_1c000");
-
- membank("dram2_0000")->set_base(memptr + 0x40000);
- membank("dram2_4000")->set_base(memptr + 0x44000);
- membank("dram2_8000")->set_base(memptr + 0x48000);
- membank("dram2_c000")->set_base(memptr + 0x4c000);
- membank("dram2_10000")->set_base(memptr + 0x50000);
- membank("dram2_14000")->set_base(memptr + 0x54000);
- membank("dram2_18000")->set_base(memptr + 0x58000);
- membank("dram2_1c000")->set_base(memptr + 0x5c000);
+ dspace.install_ram(0x8000, 0xbfff, 0, memptr + 0x40000);
+ dspace.install_ram(0xc000, 0xffff, 0, memptr + 0x44000);
+ dspace.install_ram(0xbc000, 0xbffff, 0, memptr + 0x40000);
+ dspace.install_ram(0xc0000, 0xc3fff, 0, memptr + 0x44000);
+ dspace.install_ram(0xc4000, 0xc7fff, 0, memptr + 0x48000);
+ dspace.install_ram(0xc8000, 0xcbfff, 0, memptr + 0x4c000);
+ dspace.install_ram(0xcc000, 0xcffff, 0, memptr + 0x50000);
+ dspace.install_ram(0xd0000, 0xd3fff, 0, memptr + 0x54000);
+ dspace.install_ram(0xd4000, 0xd7fff, 0, memptr + 0x58000);
+ dspace.install_ram(0xd8000, 0xdbfff, 0, memptr + 0x5c000);
}
if (m_memsize > 384 * 1024) {
/* DRAM3, 128K */
@@ -654,15 +618,15 @@ void m20_state::install_memory()
map( 0xf8000, 0xfbfff ).ram().share("dram3_1c000");
map( 0xfc000, 0xfffff ).ram().share("dram3_0000");
*/
- pspace.install_readwrite_bank(0xdc000, 0xdffff, 0, "dram3_0000");
- pspace.install_readwrite_bank(0xe0000, 0xe3fff, 0, "dram3_4000");
- pspace.install_readwrite_bank(0xe4000, 0xe7fff, 0, "dram3_8000");
- pspace.install_readwrite_bank(0xe8000, 0xebfff, 0, "dram3_c000");
- pspace.install_readwrite_bank(0xec000, 0xeffff, 0, "dram3_10000");
- pspace.install_readwrite_bank(0xf0000, 0xf3fff, 0, "dram3_14000");
- pspace.install_readwrite_bank(0xf4000, 0xf7fff, 0, "dram3_18000");
- pspace.install_readwrite_bank(0xf8000, 0xfbfff, 0, "dram3_1c000");
- pspace.install_readwrite_bank(0xfc000, 0xfffff, 0, "dram3_0000");
+ pspace.install_ram(0xdc000, 0xdffff, 0, memptr + 0x60000);
+ pspace.install_ram(0xe0000, 0xe3fff, 0, memptr + 0x64000);
+ pspace.install_ram(0xe4000, 0xe7fff, 0, memptr + 0x68000);
+ pspace.install_ram(0xe8000, 0xebfff, 0, memptr + 0x6c000);
+ pspace.install_ram(0xec000, 0xeffff, 0, memptr + 0x70000);
+ pspace.install_ram(0xf0000, 0xf3fff, 0, memptr + 0x74000);
+ pspace.install_ram(0xf4000, 0xf7fff, 0, memptr + 0x78000);
+ pspace.install_ram(0xf8000, 0xfbfff, 0, memptr + 0x7c000);
+ pspace.install_ram(0xfc000, 0xfffff, 0, memptr + 0x60000);
/* data
map( 0x44000, 0x47fff ).ram().share("dram3_0000");
@@ -679,26 +643,17 @@ void m20_state::install_memory()
map( 0xf8000, 0xfbfff ).ram().share("dram3_1c000");
map( 0xfc000, 0xfffff ).ram().share("dram3_0000");
*/
- dspace.install_readwrite_bank(0x44000, 0x47fff, 0, "dram3_0000");
- dspace.install_readwrite_bank(0x48000, 0x4bfff, 0, "dram3_4000");
- dspace.install_readwrite_bank(0xdc000, 0xdffff, 0, "dram3_0000");
- dspace.install_readwrite_bank(0xe0000, 0xe3fff, 0, "dram3_4000");
- dspace.install_readwrite_bank(0xe4000, 0xe7fff, 0, "dram3_8000");
- dspace.install_readwrite_bank(0xe8000, 0xebfff, 0, "dram3_c000");
- dspace.install_readwrite_bank(0xec000, 0xeffff, 0, "dram3_10000");
- dspace.install_readwrite_bank(0xf0000, 0xf3fff, 0, "dram3_14000");
- dspace.install_readwrite_bank(0xf4000, 0xf7fff, 0, "dram3_18000");
- dspace.install_readwrite_bank(0xf8000, 0xfbfff, 0, "dram3_1c000");
- dspace.install_readwrite_bank(0xfc000, 0xfffff, 0, "dram3_0000");
-
- membank("dram3_0000")->set_base(memptr + 0x60000);
- membank("dram3_4000")->set_base(memptr + 0x64000);
- membank("dram3_8000")->set_base(memptr + 0x68000);
- membank("dram3_c000")->set_base(memptr + 0x6c000);
- membank("dram3_10000")->set_base(memptr + 0x70000);
- membank("dram3_14000")->set_base(memptr + 0x74000);
- membank("dram3_18000")->set_base(memptr + 0x78000);
- membank("dram3_1c000")->set_base(memptr + 0x7c000);
+ dspace.install_ram(0x44000, 0x47fff, 0, memptr + 0x60000);
+ dspace.install_ram(0x48000, 0x4bfff, 0, memptr + 0x64000);
+ dspace.install_ram(0xdc000, 0xdffff, 0, memptr + 0x60000);
+ dspace.install_ram(0xe0000, 0xe3fff, 0, memptr + 0x64000);
+ dspace.install_ram(0xe4000, 0xe7fff, 0, memptr + 0x68000);
+ dspace.install_ram(0xe8000, 0xebfff, 0, memptr + 0x6c000);
+ dspace.install_ram(0xec000, 0xeffff, 0, memptr + 0x70000);
+ dspace.install_ram(0xf0000, 0xf3fff, 0, memptr + 0x74000);
+ dspace.install_ram(0xf4000, 0xf7fff, 0, memptr + 0x78000);
+ dspace.install_ram(0xf8000, 0xfbfff, 0, memptr + 0x7c000);
+ dspace.install_ram(0xfc000, 0xfffff, 0, memptr + 0x60000);
}
}
}
diff --git a/src/mame/drivers/m5.cpp b/src/mame/drivers/m5.cpp
index 55f8679a087..d8511f08f7d 100644
--- a/src/mame/drivers/m5.cpp
+++ b/src/mame/drivers/m5.cpp
@@ -560,10 +560,10 @@ void m5_state::mem64KBF_w(uint8_t data) //out 0x30
membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000);
break;
case 1:
- program.install_write_bank(0x0000,0x1fff,"bank1w");
- program.install_write_bank(0x2000,0x3fff,"bank2w");
- program.install_write_bank(0x4000,0x5fff,"bank3w");
- program.install_write_bank(0x6000,0x6fff,"bank4w");
+ program.install_write_bank(0x0000,0x1fff,membank("bank1w"));
+ program.install_write_bank(0x2000,0x3fff,membank("bank2w"));
+ program.install_write_bank(0x4000,0x5fff,membank("bank3w"));
+ program.install_write_bank(0x6000,0x6fff,membank("bank4w"));
membank("bank1r")->set_base(ram_region->base()+0x0000); membank("bank1w")->set_base(ram_region->base()+0x0000);
membank("bank2r")->set_base(ram_region->base()+0x2000); membank("bank2w")->set_base(ram_region->base()+0x2000);
membank("bank3r")->set_base(ram_region->base()+0x4000); membank("bank3w")->set_base(ram_region->base()+0x4000);
@@ -572,10 +572,10 @@ void m5_state::mem64KBF_w(uint8_t data) //out 0x30
membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000);
break;
case 2:
- program.install_write_bank(0x0000,0x1fff,"bank1w");
- program.install_write_bank(0x2000,0x3fff,"bank2w");
- program.install_write_bank(0x4000,0x5fff,"bank3w");
- program.install_write_bank(0x6000,0x6fff,"bank4w");
+ program.install_write_bank(0x0000,0x1fff,membank("bank1w"));
+ program.install_write_bank(0x2000,0x3fff,membank("bank2w"));
+ program.install_write_bank(0x4000,0x5fff,membank("bank3w"));
+ program.install_write_bank(0x6000,0x6fff,membank("bank4w"));
membank("bank1r")->set_base(memregion(Z80_TAG)->base()); membank("bank1w")->set_base(ram_region->base()+0x0000);
membank("bank2r")->set_base(ram_region->base()+0x2000); membank("bank2w")->set_base(ram_region->base()+0x2000);
membank("bank3r")->set_base(ram_region->base()+0x4000); membank("bank3w")->set_base(ram_region->base()+0x4000);
@@ -594,8 +594,8 @@ void m5_state::mem64KBF_w(uint8_t data) //out 0x30
break;
case 4:
program.unmap_write(0x0000, 0x3fff);
- program.install_write_bank(0x4000,0x5fff,"bank3w");
- program.install_write_bank(0x6000,0x6fff,"bank4w");
+ program.install_write_bank(0x4000,0x5fff,membank("bank3w"));
+ program.install_write_bank(0x6000,0x6fff,membank("bank4w"));
membank("bank1r")->set_base(ram_region->base()+0x0000);
membank("bank2r")->set_base(ram_region->base()+0x2000);
membank("bank3r")->set_base(ram_region->base()+0x4000); membank("bank3w")->set_base(ram_region->base()+0x4000);
@@ -604,10 +604,10 @@ void m5_state::mem64KBF_w(uint8_t data) //out 0x30
membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000);
break;
case 5:
- program.install_write_bank(0x0000,0x1fff,"bank1w");
- program.install_write_bank(0x2000,0x3fff,"bank2w");
- program.install_write_bank(0x4000,0x5fff,"bank3w");
- program.install_write_bank(0x6000,0x6fff,"bank4w");
+ program.install_write_bank(0x0000,0x1fff,membank("bank1w"));
+ program.install_write_bank(0x2000,0x3fff,membank("bank2w"));
+ program.install_write_bank(0x4000,0x5fff,membank("bank3w"));
+ program.install_write_bank(0x6000,0x6fff,membank("bank4w"));
membank("bank1r")->set_base(memregion(Z80_TAG)->base()); membank("bank1w")->set_base(ram_region->base()+0x0000);
membank("bank2r")->set_base(m_cart_rom->base()); membank("bank2w")->set_base(ram_region->base()+0x2000);
membank("bank3r")->set_base(m_cart_rom->base()+0x2000); membank("bank3w")->set_base(ram_region->base()+0x4000);
@@ -616,10 +616,10 @@ void m5_state::mem64KBF_w(uint8_t data) //out 0x30
membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000);
break;
case 6:
- program.install_write_bank(0x0000,0x1fff,"bank1w");
- program.install_write_bank(0x2000,0x3fff,"bank2w");
- program.install_write_bank(0x4000,0x5fff,"bank3w");
- program.install_write_bank(0x6000,0x6fff,"bank4w");
+ program.install_write_bank(0x0000,0x1fff,membank("bank1w"));
+ program.install_write_bank(0x2000,0x3fff,membank("bank2w"));
+ program.install_write_bank(0x4000,0x5fff,membank("bank3w"));
+ program.install_write_bank(0x6000,0x6fff,membank("bank4w"));
membank("bank1r")->set_base(memregion(Z80_TAG)->base()); membank("bank1w")->set_base(ram_region->base()+0x0000);
membank("bank2r")->set_base(rom_region->base()+0x0000); membank("bank2w")->set_base(ram_region->base()+0x2000);
membank("bank3r")->set_base(rom_region->base()+0x2000); membank("bank3w")->set_base(ram_region->base()+0x4000);
@@ -628,11 +628,11 @@ void m5_state::mem64KBF_w(uint8_t data) //out 0x30
membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000);
break;
case 7: //probably this won't work - it should redirect rw to another ram module
- program.install_write_bank(0x0000,0x1fff,"bank1w");
- program.install_write_bank(0x2000,0x3fff,"bank2w");
- program.install_write_bank(0x4000,0x5fff,"bank3w");
- program.install_write_bank(0x6000,0x6fff,"bank4w");
- program.install_readwrite_bank(0x7000,0x7fff,"sram");
+ program.install_write_bank(0x0000,0x1fff,membank("bank1w"));
+ program.install_write_bank(0x2000,0x3fff,membank("bank2w"));
+ program.install_write_bank(0x4000,0x5fff,membank("bank3w"));
+ program.install_write_bank(0x6000,0x6fff,membank("bank4w"));
+ program.install_readwrite_bank(0x7000,0x7fff,membank("sram"));
membank("bank1r")->set_base(rom_region->base()+0x0000); membank("bank1w")->set_base(rom_region->base()+0x0000);
membank("bank2r")->set_base(rom_region->base()+0x2000); membank("bank2w")->set_base(rom_region->base()+0x2000);
membank("bank3r")->set_base(rom_region->base()+0x4000); membank("bank3w")->set_base(rom_region->base()+0x4000);
@@ -1135,13 +1135,13 @@ void brno_state::romsel_w(uint8_t data) //out 6c
else
{
- program.install_readwrite_bank(0x0000, 0x0fff, "bank1");
- program.install_readwrite_bank(0x1000, 0x1fff, "bank2");
- program.install_readwrite_bank(0x2000, 0x2fff, "bank3");
- program.install_readwrite_bank(0x3000, 0x3fff, "bank4");
- program.install_readwrite_bank(0x4000, 0x4fff, "bank5");
- program.install_readwrite_bank(0x5000, 0x5fff, "bank6");
- program.install_readwrite_bank(0x6000, 0x6fff, "bank7");
+ program.install_readwrite_bank(0x0000, 0x0fff, membank("bank1"));
+ program.install_readwrite_bank(0x1000, 0x1fff, membank("bank2"));
+ program.install_readwrite_bank(0x2000, 0x2fff, membank("bank3"));
+ program.install_readwrite_bank(0x3000, 0x3fff, membank("bank4"));
+ program.install_readwrite_bank(0x4000, 0x4fff, membank("bank5"));
+ program.install_readwrite_bank(0x5000, 0x5fff, membank("bank6"));
+ program.install_readwrite_bank(0x6000, 0x6fff, membank("bank7"));
m_romen=false;
}
diff --git a/src/mame/drivers/m72.cpp b/src/mame/drivers/m72.cpp
index cbadd1ba762..7e1098f0482 100644
--- a/src/mame/drivers/m72.cpp
+++ b/src/mame/drivers/m72.cpp
@@ -648,10 +648,9 @@ void m72_state::install_protection_handler(const u8 *code,const u8 *crc)
m_protection_ram = std::make_unique<u16[]>(0x1000/2);
m_protection_code = code;
m_protection_crc = crc;
- m_maincpu->space(AS_PROGRAM).install_read_bank(0xb0000, 0xb0fff, "bank1");
+ m_maincpu->space(AS_PROGRAM).install_rom(0xb0000, 0xb0fff, m_protection_ram.get());
m_maincpu->space(AS_PROGRAM).install_read_handler(0xb0ffa, 0xb0ffb, read16s_delegate(*this, FUNC(m72_state::protection_r)));
m_maincpu->space(AS_PROGRAM).install_write_handler(0xb0000, 0xb0fff, write16s_delegate(*this, FUNC(m72_state::protection_w)));
- membank("bank1")->configure_entry(0, m_protection_ram.get());
save_pointer(NAME(m_protection_ram), 0x1000/2);
}
@@ -802,7 +801,7 @@ void m72_state::dbreedm72_map(address_map &map)
void m72_state::m81_cpu1_common_map(address_map &map)
{
map(0x00000, 0x7ffff).rom();
- map(0xb0ffe, 0xb0fff).writeonly(); /* leftover from protection?? */
+ map(0xb0ffe, 0xb0fff).nopw(); /* leftover from protection?? */
map(0xc0000, 0xc03ff).ram().share("spriteram");
map(0xc8000, 0xc8bff).rw(FUNC(m72_state::palette_r<0>), FUNC(m72_state::palette_w<0>)).share("paletteram1");
map(0xcc000, 0xccbff).rw(FUNC(m72_state::palette_r<1>), FUNC(m72_state::palette_w<1>)).share("paletteram2");
@@ -835,7 +834,7 @@ void m72_state::m84_cpu1_common_map(address_map &map)
map(0xb0000, 0xb0001).w(FUNC(m72_state::irq_line_w));
map(0xb4000, 0xb4001).nopw(); /* ??? */
map(0xbc000, 0xbc000).w(FUNC(m72_state::dmaon_w));
- map(0xb0ffe, 0xb0fff).writeonly(); /* leftover from protection?? */
+ map(0xb0ffe, 0xb0fff).nopw(); /* leftover from protection?? */
map(0xc0000, 0xc03ff).ram().share("spriteram");
map(0xe0000, 0xe3fff).ram(); /* work RAM */
map(0xffff0, 0xfffff).rom();
@@ -881,7 +880,7 @@ void m72_state::m82_map(address_map &map)
map(0xcc000, 0xccbff).rw(FUNC(m72_state::palette_r<0>), FUNC(m72_state::palette_w<0>)).share("paletteram1");
map(0xd0000, 0xd3fff).ram(); /* work RAM */
map(0xe0000, 0xe0001).w(FUNC(m72_state::irq_line_w));
- map(0xe4000, 0xe4001).writeonly(); /* playfield enable? 1 during screen transitions, 0 otherwise */
+ map(0xe4000, 0xe4001).nopw(); /* playfield enable? 1 during screen transitions, 0 otherwise */
map(0xec000, 0xec000).w(FUNC(m72_state::dmaon_w));
map(0xffff0, 0xfffff).rom();
}
diff --git a/src/mame/drivers/macprtb.cpp b/src/mame/drivers/macprtb.cpp
index 37b157418bc..db39bdc4c6c 100644
--- a/src/mame/drivers/macprtb.cpp
+++ b/src/mame/drivers/macprtb.cpp
@@ -364,8 +364,7 @@ uint16_t macportable_state::rom_switch_r(offs_t offset)
void *memory_data = m_ram->pointer();
offs_t memory_mirror = memory_end & ~memory_end;
- space.install_readwrite_bank(0x00000000, memory_end & ~memory_mirror, memory_mirror, "bank1");
- membank("bank1")->set_base(memory_data);
+ space.install_ram(0x00000000, memory_end & ~memory_mirror, memory_mirror, memory_data);
m_overlay = false;
}
}
diff --git a/src/mame/drivers/macpwrbk030.cpp b/src/mame/drivers/macpwrbk030.cpp
index ab276e5e149..de727ba4c30 100644
--- a/src/mame/drivers/macpwrbk030.cpp
+++ b/src/mame/drivers/macpwrbk030.cpp
@@ -347,8 +347,7 @@ void macpb030_state::machine_reset()
offs_t memory_mirror = memory_end & ~(memory_size - 1);
space.unmap_write(0x00000000, memory_end);
- space.install_read_bank(0x00000000, memory_end & ~memory_mirror, memory_mirror, "bank1");
- membank("bank1")->set_base(m_rom_ptr);
+ space.install_rom(0x00000000, memory_end & ~memory_mirror, memory_mirror, m_rom_ptr);
// start 60.15 Hz timer
m_6015_timer->adjust(attotime::from_hz(60.15), 0, attotime::from_hz(60.15));
@@ -505,8 +504,7 @@ u32 macpb030_state::rom_switch_r(offs_t offset)
void *memory_data = m_ram->pointer();
offs_t memory_mirror = memory_end & ~memory_end;
- space.install_readwrite_bank(0x00000000, memory_end & ~memory_mirror, memory_mirror, "bank1");
- membank("bank1")->set_base(memory_data);
+ space.install_ram(0x00000000, memory_end & ~memory_mirror, memory_mirror, memory_data);
m_overlay = false;
}
diff --git a/src/mame/drivers/macquadra700.cpp b/src/mame/drivers/macquadra700.cpp
index 716dbfebcc4..87ff29c9005 100644
--- a/src/mame/drivers/macquadra700.cpp
+++ b/src/mame/drivers/macquadra700.cpp
@@ -255,8 +255,7 @@ void macquadra_state::machine_reset()
offs_t memory_mirror = memory_end & ~(memory_size - 1);
space.unmap_write(0x00000000, memory_end);
- space.install_read_bank(0x00000000, memory_end & ~memory_mirror, memory_mirror, "bank1");
- membank("bank1")->set_base(m_rom_ptr);
+ space.install_rom(0x00000000, memory_end & ~memory_mirror, memory_mirror, m_rom_ptr);
// start 60.15 Hz timer
m_6015_timer->adjust(attotime::from_hz(60.15), 0, attotime::from_hz(60.15));
@@ -704,8 +703,7 @@ uint32_t macquadra_state::rom_switch_r(offs_t offset)
void *memory_data = m_ram->pointer();
offs_t memory_mirror = memory_end & ~memory_end;
- space.install_readwrite_bank(0x00000000, memory_end & ~memory_mirror, memory_mirror, "bank1");
- membank("bank1")->set_base(memory_data);
+ space.install_ram(0x00000000, memory_end & ~memory_mirror, memory_mirror, memory_data);
m_overlay = false;
}
diff --git a/src/mame/drivers/magtouch.cpp b/src/mame/drivers/magtouch.cpp
index d207f6e01c7..169eff9b4ec 100644
--- a/src/mame/drivers/magtouch.cpp
+++ b/src/mame/drivers/magtouch.cpp
@@ -145,7 +145,7 @@ void magtouch_state::magtouch_map(address_map &map)
map(0x000c0000, 0x000c7fff).rom().region("video_bios", 0);
map(0x000d0000, 0x000d1fff).ram().share("nvram");
map(0x000d8000, 0x000dffff).bankr("rombank");
- map(0x000f0000, 0x000fffff).ram().region("bios", 0);
+ map(0x000f0000, 0x000fffff).rom().region("bios", 0);
map(0xffff0000, 0xffffffff).rom().region("bios", 0);
}
diff --git a/src/mame/drivers/mbc200.cpp b/src/mame/drivers/mbc200.cpp
index 64e89698e6b..bf5a117db4c 100644
--- a/src/mame/drivers/mbc200.cpp
+++ b/src/mame/drivers/mbc200.cpp
@@ -166,8 +166,8 @@ void mbc200_state::main_io(address_map &map)
void mbc200_state::sub_mem(address_map &map)
{
map.unmap_value_high();
- map(0x0000, 0x2fff).rom();
- map(0x3000, 0x7fff).ram();
+ map(0x0000, 0x1fff).rom();
+ map(0x2000, 0x7fff).ram();
map(0x8000, 0xffff).ram().share("vram");
}
diff --git a/src/mame/drivers/mbc55x.cpp b/src/mame/drivers/mbc55x.cpp
index 8389e69c5a4..02015cfb30e 100644
--- a/src/mame/drivers/mbc55x.cpp
+++ b/src/mame/drivers/mbc55x.cpp
@@ -194,7 +194,7 @@ void mbc55x_state::set_ram_size()
if(bankno<nobanks)
{
membank(bank)->set_base(map_base);
- space.install_readwrite_bank(bank_base, bank_base+(RAM_BANK_SIZE-1), bank);
+ space.install_readwrite_bank(bank_base, bank_base+(RAM_BANK_SIZE-1), membank(bank));
logerror("Mapping bank %d at %05X to RAM\n",bankno,bank_base);
}
else
@@ -206,9 +206,9 @@ void mbc55x_state::set_ram_size()
// Graphics red and blue plane memory mapping, green is in main memory
membank(RED_PLANE_TAG)->set_base(&m_video_mem[RED_PLANE_OFFSET]);
- space.install_readwrite_bank(RED_PLANE_MEMBASE, RED_PLANE_MEMBASE+(COLOUR_PLANE_SIZE-1), RED_PLANE_TAG);
+ space.install_readwrite_bank(RED_PLANE_MEMBASE, RED_PLANE_MEMBASE+(COLOUR_PLANE_SIZE-1), membank(RED_PLANE_TAG));
membank(BLUE_PLANE_TAG)->set_base(&m_video_mem[BLUE_PLANE_OFFSET]);
- space.install_readwrite_bank(BLUE_PLANE_MEMBASE, BLUE_PLANE_MEMBASE+(COLOUR_PLANE_SIZE-1), BLUE_PLANE_TAG);
+ space.install_readwrite_bank(BLUE_PLANE_MEMBASE, BLUE_PLANE_MEMBASE+(COLOUR_PLANE_SIZE-1), membank(BLUE_PLANE_TAG));
}
void mbc55x_state::machine_reset()
diff --git a/src/mame/drivers/mc1000.cpp b/src/mame/drivers/mc1000.cpp
index 1e8f05d6f22..15d3208329f 100644
--- a/src/mame/drivers/mc1000.cpp
+++ b/src/mame/drivers/mc1000.cpp
@@ -68,7 +68,8 @@ public:
m_y(*this, "Y%u", 0),
m_joy(*this, "JOY%u", 0),
m_modifiers(*this, "MODIFIERS"),
- m_joykeymap(*this, "JOYKEYMAP%u", 0)
+ m_joykeymap(*this, "JOYKEYMAP%u", 0),
+ m_banks(*this, "bank%u", 1U)
{ }
void mc1000(machine_config &config);
@@ -87,6 +88,7 @@ private:
required_ioport_array<2> m_joy;
required_ioport m_modifiers;
required_ioport_array<2> m_joykeymap;
+ required_memory_bank_array<5> m_banks;
std::unique_ptr<uint8_t[]> m_banked_ram;
@@ -139,12 +141,12 @@ void mc1000_state::bankswitch()
address_space &program = m_maincpu->space(AS_PROGRAM);
/* MC6845 video RAM */
- membank("bank2")->set_entry(m_mc6845_bank);
+ m_banks[1]->set_entry(m_mc6845_bank);
/* extended RAM */
if (m_ram->size() > 16*1024)
{
- program.install_readwrite_bank(0x4000, 0x7fff, "bank3");
+ program.install_readwrite_bank(0x4000, 0x7fff, m_banks[2]);
}
else
{
@@ -156,7 +158,7 @@ void mc1000_state::bankswitch()
{
if (m_ram->size() > 16*1024)
{
- program.install_readwrite_bank(0x8000, 0x97ff, "bank4");
+ program.install_readwrite_bank(0x8000, 0x97ff, m_banks[3]);
}
else
{
@@ -165,15 +167,15 @@ void mc1000_state::bankswitch()
}
else
{
- program.install_readwrite_bank(0x8000, 0x97ff, "bank4");
+ program.install_readwrite_bank(0x8000, 0x97ff, m_banks[3]);
}
- membank("bank4")->set_entry(m_mc6847_bank);
+ m_banks[3]->set_entry(m_mc6847_bank);
/* extended RAM */
if (m_ram->size() > 16*1024)
{
- program.install_readwrite_bank(0x9800, 0xbfff, "bank5");
+ program.install_readwrite_bank(0x9800, 0xbfff, m_banks[4]);
}
else
{
@@ -443,7 +445,7 @@ uint8_t mc1000_state::keydata_r()
uint8_t mc1000_state::rom_banking_r(offs_t offset)
{
- membank("bank1")->set_entry(0);
+ m_banks[0]->set_entry(0);
m_rom0000 = 0;
return m_rom->base()[offset];
}
@@ -455,27 +457,27 @@ void mc1000_state::machine_start()
/* setup memory banking */
m_banked_ram = make_unique_clear<uint8_t[]>(0xc000);
- membank("bank1")->configure_entry(0, m_banked_ram.get());
- membank("bank1")->configure_entry(1, m_rom->base());
- membank("bank1")->set_entry(1);
+ m_banks[0]->configure_entry(0, m_banked_ram.get());
+ m_banks[0]->configure_entry(1, m_rom->base());
+ m_banks[0]->set_entry(1);
m_rom0000 = 1;
m_mc6845_bank = 0;
m_mc6847_bank = 0;
- membank("bank2")->configure_entry(0, m_banked_ram.get() + 0x2000);
- membank("bank2")->configure_entry(1, m_mc6845_video_ram);
- membank("bank2")->set_entry(0);
+ m_banks[1]->configure_entry(0, m_banked_ram.get() + 0x2000);
+ m_banks[1]->configure_entry(1, m_mc6845_video_ram);
+ m_banks[1]->set_entry(0);
- membank("bank3")->configure_entry(0, m_banked_ram.get() + 0x4000);
- membank("bank3")->set_entry(0);
+ m_banks[2]->configure_entry(0, m_banked_ram.get() + 0x4000);
+ m_banks[2]->set_entry(0);
- membank("bank4")->configure_entry(0, m_mc6847_video_ram);
- membank("bank4")->configure_entry(1, m_banked_ram.get() + 0x8000);
- membank("bank4")->set_entry(0);
+ m_banks[3]->configure_entry(0, m_mc6847_video_ram);
+ m_banks[3]->configure_entry(1, m_banked_ram.get() + 0x8000);
+ m_banks[3]->set_entry(0);
- membank("bank5")->configure_entry(0, m_banked_ram.get() + 0x9800);
- membank("bank5")->set_entry(0);
+ m_banks[4]->configure_entry(0, m_banked_ram.get() + 0x9800);
+ m_banks[4]->set_entry(0);
bankswitch();
@@ -491,7 +493,7 @@ void mc1000_state::machine_start()
void mc1000_state::machine_reset()
{
- membank("bank1")->set_entry(1);
+ m_banks[0]->set_entry(1);
m_rom0000 = 1;
}
diff --git a/src/mame/drivers/mc1502.cpp b/src/mame/drivers/mc1502.cpp
index 16fa9119e43..5d1864cc337 100644
--- a/src/mame/drivers/mc1502.cpp
+++ b/src/mame/drivers/mc1502.cpp
@@ -177,8 +177,7 @@ void mc1502_state::init_mc1502()
{
address_space &program = m_maincpu->space(AS_PROGRAM);
- program.install_readwrite_bank(0, m_ram->size() - 1, "bank10");
- membank("bank10")->set_base(m_ram->pointer());
+ program.install_ram(0, m_ram->size() - 1, m_ram->pointer());
}
MACHINE_START_MEMBER(mc1502_state, mc1502)
diff --git a/src/mame/drivers/mcr.cpp b/src/mame/drivers/mcr.cpp
index 83343b2d718..05211988fb1 100644
--- a/src/mame/drivers/mcr.cpp
+++ b/src/mame/drivers/mcr.cpp
@@ -715,6 +715,24 @@ void mcr_state::cpu_90009_portmap(address_map &map)
map(0xf0, 0xf3).rw(m_ctc, FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
}
+void mcr_state::cpu_90009_dp_map(address_map &map)
+{
+ cpu_90009_map(map);
+ map(0x8000, 0x81ff).ram(); // meter ram, is it battery backed?
+}
+
+void mcr_state::cpu_90009_dp_portmap(address_map &map)
+{
+ cpu_90009_portmap(map);
+ map(0x24, 0x24).portr("P24");
+ map(0x28, 0x28).portr("P28");
+ map(0x2c, 0x2c).portr("P2C");
+
+ map(0x2c, 0x2c).w(FUNC(mcr_dpoker_state::lamps1_w));
+ map(0x30, 0x30).w(FUNC(mcr_dpoker_state::lamps2_w));
+ map(0x34, 0x34).w(FUNC(mcr_dpoker_state::output_w));
+ map(0x3f, 0x3f).w(FUNC(mcr_dpoker_state::meters_w));
+}
/*************************************
@@ -1795,6 +1813,9 @@ void mcr_dpoker_state::mcr_90009_dp(machine_config &config)
{
mcr_90009(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &mcr_state::cpu_90009_dp_map);
+ m_maincpu->set_addrmap(AS_IO, &mcr_state::cpu_90009_dp_portmap);
+
/* basic machine hardware */
TIMER(config, "coinin").configure_generic(FUNC(mcr_dpoker_state::coin_in_callback));
TIMER(config, "hopper").configure_generic(FUNC(mcr_dpoker_state::hopper_callback));
@@ -2901,7 +2922,7 @@ void mcr_dpoker_state::init_dpoker()
m_ssio->set_custom_input(0, 0x8e, *this, FUNC(mcr_dpoker_state::ip0_r));
// meter ram, is it battery backed?
- m_maincpu->space(AS_PROGRAM).install_ram(0x8000, 0x81ff);
+ m_maincpu->space(AS_PROGRAM).install_ram(0x8000, 0x81ff, m_meter_ram);
// extra I/O
m_maincpu->space(AS_IO).install_read_port(0x24, 0x24, "P24");
diff --git a/src/mame/drivers/megadriv_acbl.cpp b/src/mame/drivers/megadriv_acbl.cpp
index f4fb1909efb..f9e07c1f919 100644
--- a/src/mame/drivers/megadriv_acbl.cpp
+++ b/src/mame/drivers/megadriv_acbl.cpp
@@ -1042,11 +1042,8 @@ void md_boot_state::init_mk3mdb()
void md_boot_state::init_ssf2mdb()
{
m_maincpu->space(AS_PROGRAM).nop_write(0xA130F0, 0xA130FF); // custom banking is disabled (!)
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x400000, 0x5fffff, "bank5");
+ m_maincpu->space(AS_PROGRAM).install_rom(0x400000, 0x5fffff, memregion( "maincpu" )->base() + 0x400000);
m_maincpu->space(AS_PROGRAM).unmap_write(0x400000, 0x5fffff);
-
- membank("bank5")->set_base(memregion( "maincpu" )->base() + 0x400000 );
-
m_maincpu->space(AS_PROGRAM).install_read_handler(0x770070, 0x770075, read16sm_delegate(*this, FUNC(md_boot_state::dsw_r)));
init_megadrij();
diff --git a/src/mame/drivers/megatech.cpp b/src/mame/drivers/megatech.cpp
index 8d7d2e0ebbd..cd07e17998a 100644
--- a/src/mame/drivers/megatech.cpp
+++ b/src/mame/drivers/megatech.cpp
@@ -410,9 +410,6 @@ void mtech_state::set_genz80_as_md()
{
address_space &prg = m_z80snd->space(AS_PROGRAM);
- prg.install_readwrite_bank(0x0000, 0x1fff, "bank1");
- machine().root_device().membank("bank1")->set_base(m_genz80.z80_prgram.get());
-
prg.install_ram(0x0000, 0x1fff, m_genz80.z80_prgram.get());
prg.install_readwrite_handler(0x4000, 0x4003, read8sm_delegate(*m_ymsnd, FUNC(ym2612_device::read)), write8sm_delegate(*m_ymsnd, FUNC(ym2612_device::write)));
diff --git a/src/mame/drivers/megazone.cpp b/src/mame/drivers/megazone.cpp
index 10a5ce1fd5e..374e9960afa 100644
--- a/src/mame/drivers/megazone.cpp
+++ b/src/mame/drivers/megazone.cpp
@@ -148,7 +148,7 @@ void megazone_state::megazone_map(address_map &map)
map(0x2800, 0x2bff).ram().share("colorram");
map(0x2c00, 0x2fff).ram().share("colorram2");
map(0x3000, 0x33ff).ram().share("spriteram");
- map(0x3800, 0x3fff).ram().share("share1");
+ map(0x3800, 0x3fff).lrw8([this](offs_t off) { return m_share1[off]; }, "share_r", [this](offs_t off, u8 data) { m_share1[off] = data; }, "share_w");
map(0x4000, 0xffff).rom(); /* 4000->5FFF is a debug rom */
}
diff --git a/src/mame/drivers/mhavoc.cpp b/src/mame/drivers/mhavoc.cpp
index 0ec954af267..7fca46c96f7 100644
--- a/src/mame/drivers/mhavoc.cpp
+++ b/src/mame/drivers/mhavoc.cpp
@@ -288,7 +288,7 @@ void mhavoc_state::alpha_map(address_map &map)
map(0x17c0, 0x17c0).w(FUNC(mhavoc_state::mhavoc_gamma_w)); /* Gamma Communication Write Port */
map(0x1800, 0x1fff).ram(); /* Shared Beta Ram */
map(0x2000, 0x3fff).bankr("bank2"); /* Paged Program ROM (32K) */
- map(0x4000, 0x4fff).ram().share("avg:vectorram").region("alpha", 0x4000); /* Vector Generator RAM */
+ map(0x4000, 0x4fff).ram().share("avg:vectorram"); /* Vector Generator RAM */
map(0x5000, 0x7fff).rom(); /* Vector ROM */
map(0x8000, 0xffff).rom(); /* Program ROM (32K) */
}
@@ -367,7 +367,7 @@ void mhavoc_state::alphaone_map(address_map &map)
map(0x10e0, 0x10ff).nopr().writeonly().share("avg:colorram"); /* ColorRAM */
map(0x1800, 0x18ff).rw("eeprom", FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write)); /* EEROM */
map(0x2000, 0x3fff).bankr("bank2"); /* Paged Program ROM (32K) */
- map(0x4000, 0x4fff).ram().share("avg:vectorram").region("alpha", 0x4000); /* Vector Generator RAM */
+ map(0x4000, 0x4fff).ram().share("avg:vectorram"); /* Vector Generator RAM */
map(0x5000, 0x7fff).rom(); /* Vector ROM */
map(0x8000, 0xffff).rom(); /* Program ROM (32K) */
}
diff --git a/src/mame/drivers/micronic.cpp b/src/mame/drivers/micronic.cpp
index a27725ee614..3d5ed1bdcb6 100644
--- a/src/mame/drivers/micronic.cpp
+++ b/src/mame/drivers/micronic.cpp
@@ -184,7 +184,7 @@ void micronic_state::bank_select_w(uint8_t data)
else
{
m_bank1->set_entry((data <= m_banks_num) ? data : m_banks_num);
- m_maincpu->space(AS_PROGRAM).install_write_bank(0x0000, 0x7fff, "bank1");
+ m_maincpu->space(AS_PROGRAM).install_write_bank(0x0000, 0x7fff, membank("bank1"));
}
}
diff --git a/src/mame/drivers/midzeus.cpp b/src/mame/drivers/midzeus.cpp
index 4f70df073d2..55dc42b86d7 100644
--- a/src/mame/drivers/midzeus.cpp
+++ b/src/mame/drivers/midzeus.cpp
@@ -764,7 +764,7 @@ void midzeus2_state::zeus2_map(address_map &map)
map(0x9f0000, 0x9f7fff).rw(FUNC(midzeus2_state::zeus2_timekeeper_r), FUNC(midzeus2_state::zeus2_timekeeper_w));
map(0x9f8000, 0x9f8000).w(FUNC(midzeus2_state::cmos_protect_w));
map(0xa00000, 0xbfffff).rom().region("user1", 0);
- map(0xc00000, 0xffffff).bankr("bank1").region("user2", 0);
+ map(0xc00000, 0xffffff).bankr("bank1");
}
/*
diff --git a/src/mame/drivers/model3.cpp b/src/mame/drivers/model3.cpp
index 6c641709690..72c9612769d 100644
--- a/src/mame/drivers/model3.cpp
+++ b/src/mame/drivers/model3.cpp
@@ -1691,7 +1691,7 @@ void model3_state::daytona2_rombank_w(offs_t offset, uint64_t data, uint64_t mem
data >>= 56;
data = (~data) & 0xf;
membank("bank1")->set_base(memregion( "user1" )->base() + 0x800000 + (data * 0x800000)); /* banked CROM */
- membank("bank2")->set_base(memregion( "user1" )->base() + 0x800000 + (data * 0x800000)); /* banked CROM */
+ m_bank2->set_base(memregion( "user1" )->base() + 0x800000 + (data * 0x800000)); /* banked CROM */
}
}
@@ -6156,7 +6156,7 @@ void model3_state::init_model3_10()
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xc0000000, 0xc00000ff, read64s_delegate(*this, FUNC(model3_state::scsi_r)), write64s_delegate(*this, FUNC(model3_state::scsi_w)));
- m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1" );
+ m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, membank("bank1") );
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf0800cf8, 0xf0800cff, read64s_delegate(*this, FUNC(model3_state::mpc105_addr_r)), write64s_delegate(*this, FUNC(model3_state::mpc105_addr_w)));
m_maincpu->space(AS_PROGRAM).install_read_handler(0xf0c00cf8, 0xf0c00cff, read64smo_delegate(*this, FUNC(model3_state::mpc105_data_r)));
@@ -6167,7 +6167,7 @@ void model3_state::init_model3_10()
void model3_state::init_model3_15()
{
interleave_vroms();
- m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1");
+ m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, membank("bank1"));
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf0800cf8, 0xf0800cff, read64s_delegate(*this, FUNC(model3_state::mpc105_addr_r)), write64s_delegate(*this, FUNC(model3_state::mpc105_addr_w)));
m_maincpu->space(AS_PROGRAM).install_read_handler(0xf0c00cf8, 0xf0c00cff, read64smo_delegate(*this, FUNC(model3_state::mpc105_data_r)));
@@ -6178,7 +6178,7 @@ void model3_state::init_model3_15()
void model3_state::init_model3_20()
{
interleave_vroms();
- m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1" );
+ m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, membank("bank1") );
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xc2000000, 0xc20000ff, read64s_delegate(*this, FUNC(model3_state::real3d_dma_r)), write64s_delegate(*this, FUNC(model3_state::real3d_dma_w)));
@@ -6247,7 +6247,7 @@ void model3_state::init_vs215()
m_step15_with_mpc106 = true;
interleave_vroms();
- m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1" );
+ m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, membank("bank1") );
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf9000000, 0xf90000ff, read64s_delegate(*this, FUNC(model3_state::scsi_r)), write64s_delegate(*this, FUNC(model3_state::scsi_w)));
@@ -6268,7 +6268,7 @@ void model3_state::init_vs29815()
rom[(0x60290c^4)/4] = 0x60000000;
interleave_vroms();
- m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1" );
+ m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, membank("bank1") );
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf9000000, 0xf90000ff, read64s_delegate(*this, FUNC(model3_state::scsi_r)), write64s_delegate(*this, FUNC(model3_state::scsi_w)));
@@ -6284,7 +6284,7 @@ void model3_state::init_bass()
m_step15_with_mpc106 = true;
interleave_vroms();
- m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1" );
+ m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, membank("bank1") );
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf9000000, 0xf90000ff, read64s_delegate(*this, FUNC(model3_state::scsi_r)), write64s_delegate(*this, FUNC(model3_state::scsi_w)));
@@ -6298,7 +6298,7 @@ void model3_state::init_bass()
void model3_state::init_getbass()
{
interleave_vroms();
- m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1" );
+ m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, membank("bank1") );
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf9000000, 0xf90000ff, read64s_delegate(*this, FUNC(model3_state::scsi_r)), write64s_delegate(*this, FUNC(model3_state::scsi_w)));
@@ -6397,7 +6397,7 @@ void model3_state::init_daytona2()
init_model3_20();
m_maincpu->space(AS_PROGRAM).install_write_handler(0xc3800000, 0xc3800007, write64s_delegate(*this, FUNC(model3_state::daytona2_rombank_w)));
- m_maincpu->space(AS_PROGRAM).install_read_bank(0xc3000000, 0xc37fffff, "bank2");
+ m_maincpu->space(AS_PROGRAM).install_read_bank(0xc3000000, 0xc37fffff, m_bank2);
//rom[(0x68468c^4)/4] = 0x60000000;
//rom[(0x6063c4^4)/4] = 0x60000000;
@@ -6411,7 +6411,7 @@ void model3_state::init_dayto2pe()
init_model3_20();
m_maincpu->space(AS_PROGRAM).install_write_handler(0xc3800000, 0xc3800007, write64s_delegate(*this, FUNC(model3_state::daytona2_rombank_w)));
- m_maincpu->space(AS_PROGRAM).install_read_bank(0xc3000000, 0xc37fffff, "bank2");
+ m_maincpu->space(AS_PROGRAM).install_read_bank(0xc3000000, 0xc37fffff, m_bank2);
// rom[(0x606784^4)/4] = 0x60000000;
// rom[(0x69a3fc^4)/4] = 0x60000000; // jump to encrypted code
diff --git a/src/mame/drivers/monkey_king_3b.cpp b/src/mame/drivers/monkey_king_3b.cpp
index e71f1545d46..3b959e84848 100644
--- a/src/mame/drivers/monkey_king_3b.cpp
+++ b/src/mame/drivers/monkey_king_3b.cpp
@@ -111,7 +111,7 @@ private:
void mk3b_soc_state::map(address_map &map)
{
// 64MB external NOR flash
- map(0x08000000, 0x0BFFFFFF).rom().share("norflash").region("norflash", 0x0);;
+ map(0x08000000, 0x0BFFFFFF).rom().share("norflash");;
// unknown amount and configuration of internal RAM
map(0x00000000, 0x0000FFFF).ram().share("iram0");
// This section of RAM seems to contain the stack
diff --git a/src/mame/drivers/moo.cpp b/src/mame/drivers/moo.cpp
index 1172ba131d3..b5e610326c2 100644
--- a/src/mame/drivers/moo.cpp
+++ b/src/mame/drivers/moo.cpp
@@ -343,7 +343,7 @@ void moo_state::moobl_map(address_map &map)
map(0x0c4000, 0x0c4001).r(m_k053246, FUNC(k053247_device::k053246_r));
map(0x0ca000, 0x0ca01f).w(m_k054338, FUNC(k054338_device::word_w)); /* K054338 alpha blending engine */
map(0x0cc000, 0x0cc01f).w(m_k053251, FUNC(k053251_device::write)).umask16(0x00ff);
- map(0x0d0000, 0x0d001f).writeonly(); /* CCU regs (ignored) */
+ map(0x0d0000, 0x0d001f).nopw(); /* CCU regs (ignored) */
map(0x0d6ffc, 0x0d6ffd).w(FUNC(moo_state::moobl_oki_bank_w));
map(0x0d6fff, 0x0d6fff).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x0d8000, 0x0d8007).w(m_k056832, FUNC(k056832_device::b_word_w)); /* VSCCS regs */
diff --git a/src/mame/drivers/mpu4vid.cpp b/src/mame/drivers/mpu4vid.cpp
index cea0f4ea8ad..0e3cfda6fcd 100644
--- a/src/mame/drivers/mpu4vid.cpp
+++ b/src/mame/drivers/mpu4vid.cpp
@@ -217,7 +217,7 @@ public:
mpu4_state(mconfig, type, tag),
m_videocpu(*this, "video"),
m_scn2674(*this, "scn2674_vid"),
- m_vid_vidram(*this, "vid_vidram"),
+ m_vid_vidram(*this, "vid_vidram", 0x20000, ENDIANNESS_BIG),
m_vid_mainram(*this, "vid_mainram"),
m_acia_0(*this, "acia6850_0"),
m_acia_1(*this, "acia6850_1"),
@@ -270,7 +270,7 @@ public:
private:
required_device<m68000_base_device> m_videocpu;
optional_device<scn2674_device> m_scn2674;
- optional_shared_ptr<uint16_t> m_vid_vidram;
+ memory_share_creator<uint16_t> m_vid_vidram;
optional_shared_ptr<uint16_t> m_vid_mainram;
required_device<acia6850_device> m_acia_0;
required_device<acia6850_device> m_acia_1;
@@ -500,8 +500,6 @@ void mpu4vid_state::mpu4_vid_vidram_w(offs_t offset, uint16_t data, uint16_t mem
void mpu4vid_state::video_start()
{
- m_vid_vidram.allocate(0x20000/2);
-
memset(m_vid_vidram,0,0x20000);
/* find first empty slot to decode gfx */
@@ -512,7 +510,7 @@ void mpu4vid_state::video_start()
assert(m_gfx_index != MAX_GFX_ELEMENTS);
/* create the char set (gfx will then be updated dynamically from RAM) */
- m_gfxdecode->set_gfx(m_gfx_index+0, std::make_unique<gfx_element>(m_palette, mpu4_vid_char_8x8_layout, reinterpret_cast<uint8_t *>(m_vid_vidram.target()), NATIVE_ENDIAN_VALUE_LE_BE(8,0), m_palette->entries() / 16, 0));
+ m_gfxdecode->set_gfx(m_gfx_index+0, std::make_unique<gfx_element>(m_palette, mpu4_vid_char_8x8_layout, reinterpret_cast<uint8_t *>(m_vid_vidram.ptr()), NATIVE_ENDIAN_VALUE_LE_BE(8,0), m_palette->entries() / 16, 0));
}
EF9369_COLOR_UPDATE( mpu4vid_state::ef9369_color_update )
diff --git a/src/mame/drivers/mpz80.cpp b/src/mame/drivers/mpz80.cpp
index c871167bd62..cc90d3b3a71 100644
--- a/src/mame/drivers/mpz80.cpp
+++ b/src/mame/drivers/mpz80.cpp
@@ -687,7 +687,6 @@ static void mpz80_s100_cards(device_slot_interface &device)
void mpz80_state::machine_start()
{
- m_map_ram.allocate(0x200);
}
diff --git a/src/mame/drivers/mtouchxl.cpp b/src/mame/drivers/mtouchxl.cpp
index d30bb16aff5..dd1a2d205b4 100644
--- a/src/mame/drivers/mtouchxl.cpp
+++ b/src/mame/drivers/mtouchxl.cpp
@@ -182,9 +182,7 @@ void mtxl_state::machine_start()
if (m_ram->size() > 0xa0000)
{
offs_t ram_limit = 0x100000 + m_ram->size() - 0xa0000;
- space.install_read_bank(0x100000, ram_limit - 1, "bank1");
- space.install_write_bank(0x100000, ram_limit - 1, "bank1");
- membank("bank1")->set_base(m_ram->pointer() + 0xa0000);
+ space.install_ram(0x100000, ram_limit - 1, m_ram->pointer() + 0xa0000);
}
#endif
}
diff --git a/src/mame/drivers/multigam.cpp b/src/mame/drivers/multigam.cpp
index 1c451b4033f..43ceeed8699 100644
--- a/src/mame/drivers/multigam.cpp
+++ b/src/mame/drivers/multigam.cpp
@@ -123,7 +123,10 @@ public:
m_ppu(*this, "ppu"),
m_p1(*this, "P1"),
m_p2(*this, "P2"),
- m_dsw(*this, "DSW")
+ m_dsw(*this, "DSW"),
+ m_bank_gfx(*this, "bank_gfx"),
+ m_bank_ppu(*this, "bank_ppu_%u", 1U),
+ m_bank_ram(*this, "bank_ram")
{ }
void multigam(machine_config &config);
@@ -148,6 +151,9 @@ private:
required_ioport m_p1;
required_ioport m_p2;
optional_ioport m_dsw;
+ memory_bank_creator m_bank_gfx;
+ memory_bank_array_creator<8> m_bank_ppu;
+ optional_memory_bank m_bank_ram;
std::unique_ptr<uint8_t[]> m_nt_ram;
std::unique_ptr<uint8_t[]> m_vram;
@@ -273,8 +279,6 @@ uint8_t multigam_state::multigam_nt_r(offs_t offset)
return m_nt_page[page][offset & 0x3ff];
}
-static const char * const banknames[] = { "bank2", "bank3", "bank4", "bank5", "bank6", "bank7", "bank8", "bank9" };
-
void multigam_state::set_videorom_bank( int start, int count, int bank, int bank_size_in_kb)
{
int i;
@@ -283,7 +287,7 @@ void multigam_state::set_videorom_bank( int start, int count, int bank, int bank
/* count determines the size of the area mapped in KB */
for (i = 0; i < count; i++, offset += 0x400)
{
- membank(banknames[i + start])->set_base(memregion("gfx1")->base() + offset);
+ m_bank_ppu[i + start]->set_base(memregion("gfx1")->base() + offset);
}
}
@@ -295,7 +299,7 @@ void multigam_state::set_videoram_bank( int start, int count, int bank, int bank
/* count determines the size of the area mapped in KB */
for (i = 0; i < count; i++, offset += 0x400)
{
- membank(banknames[i + start])->set_base(m_vram.get() + offset);
+ m_bank_ppu[i + start]->set_base(m_vram.get() + offset);
}
}
@@ -384,7 +388,7 @@ void multigam_state::multigam_switch_prg_rom(uint8_t data)
void multigam_state::multigam_switch_gfx_rom(uint8_t data)
{
- membank("bank1")->set_base(memregion("gfx1")->base() + (0x2000 * (data & 0x3f)));
+ m_bank_gfx->set_base(memregion("gfx1")->base() + (0x2000 * (data & 0x3f)));
set_mirroring(data & 0x40 ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
m_game_gfx_bank = data;
}
@@ -394,7 +398,7 @@ void multigam_state::multigam_mapper2_w(offs_t offset, uint8_t data)
{
if (m_game_gfx_bank & 0x80)
{
- membank("bank1")->set_base(memregion("gfx1")->base() + (0x2000 * ((data & 0x3) + (m_game_gfx_bank & 0x3c))));
+ m_bank_gfx->set_base(memregion("gfx1")->base() + (0x2000 * ((data & 0x3) + (m_game_gfx_bank & 0x3c))));
}
else
{
@@ -577,11 +581,11 @@ void multigam_state::multigam3_mmc3_rom_switch_w(offs_t offset, uint8_t data)
case 0x2001: /* enable ram at $6000 */
if (data & 0x80)
{
- membank("bank10")->set_base(m_multigmc_mmc3_6000_ram.get());
+ m_bank_ram->set_base(m_multigmc_mmc3_6000_ram.get());
}
else
{
- membank("bank10")->set_base(memregion("maincpu")->base() + 0x6000);
+ m_bank_ram->set_base(memregion("maincpu")->base() + 0x6000);
}
if (data & 0x40)
{
@@ -665,7 +669,7 @@ void multigam_state::multigm3_switch_prg_rom(address_space &space, uint8_t data)
else
{
space.install_write_handler(0x8000, 0xffff, write8sm_delegate(*this, FUNC(multigam_state::multigm3_mapper2_w)) );
- membank("bank10")->set_base(memregion("maincpu")->base() + 0x6000);
+ m_bank_ram->set_base(memregion("maincpu")->base() + 0x6000);
}
if (data & 0x80)
@@ -702,7 +706,7 @@ void multigam_state::multigm3_map(address_map &map)
map(0x5003, 0x5003).w(FUNC(multigam_state::multigm3_switch_gfx_rom));
map(0x5000, 0x5ffe).rom();
map(0x5fff, 0x5fff).portr("IN0");
- map(0x6000, 0x7fff).bankrw("bank10");
+ map(0x6000, 0x7fff).bankrw("bank_ram");
map(0x6fff, 0x6fff).nopw(); /* 0x00 in attract mode, 0xff during play */
map(0x8000, 0xffff).rom().w(FUNC(multigam_state::multigm3_mapper2_w));
}
@@ -921,23 +925,16 @@ void multigam_state::supergm3_set_bank()
m_supergm3_chr_bank == 0x40 )
{
// VRAM
- m_ppu->space(AS_PROGRAM).install_read_bank(0x0000, 0x1fff, "bank1");
- m_ppu->space(AS_PROGRAM).install_write_bank(0x0000, 0x1fff, "bank1");
- membank("bank1")->set_base(m_vram.get());
+ m_ppu->space(AS_PROGRAM).install_readwrite_bank(0x0000, 0x1fff, m_bank_gfx);
+ m_bank_gfx->set_base(m_vram.get());
if (m_supergm3_chr_bank == 0x40)
set_mirroring(PPU_MIRROR_VERT);
}
else
{
- m_ppu->space(AS_PROGRAM).install_read_bank(0x0000, 0x03ff, "bank2");
- m_ppu->space(AS_PROGRAM).install_read_bank(0x0400, 0x07ff, "bank3");
- m_ppu->space(AS_PROGRAM).install_read_bank(0x0800, 0x0bff, "bank4");
- m_ppu->space(AS_PROGRAM).install_read_bank(0x0c00, 0x0fff, "bank5");
- m_ppu->space(AS_PROGRAM).install_read_bank(0x1000, 0x13ff, "bank6");
- m_ppu->space(AS_PROGRAM).install_read_bank(0x1400, 0x17ff, "bank7");
- m_ppu->space(AS_PROGRAM).install_read_bank(0x1800, 0x1bff, "bank8");
- m_ppu->space(AS_PROGRAM).install_read_bank(0x1c00, 0x1fff, "bank9");
+ for(int i=0; i<8; i++)
+ m_ppu->space(AS_PROGRAM).install_read_bank(0x0000 + 0x400*i, 0x03ff + 0x400*i, m_bank_ppu[i]);
m_ppu->space(AS_PROGRAM).unmap_write(0x0000, 0x1fff);
set_videorom_bank(0, 8, 0, 8);
@@ -948,7 +945,7 @@ void multigam_state::supergm3_set_bank()
{
// title screen
memcpy(mem + 0x8000, mem + 0x18000, 0x8000);
- membank("bank10")->set_base(mem + 0x6000);
+ m_bank_ram->set_base(mem + 0x6000);
m_ppu->set_scanline_callback(nullptr);
}
else if ((m_supergm3_prg_bank & 0x40) == 0)
@@ -1004,7 +1001,7 @@ void multigam_state::supergm3_map(address_map &map)
map(0x5001, 0x5001).w(FUNC(multigam_state::supergm3_prg_bank_w));
map(0x5002, 0x5002).w(FUNC(multigam_state::supergm3_chr_bank_w));
map(0x5fff, 0x5fff).nopw();
- map(0x6000, 0x7fff).bankrw("bank10");
+ map(0x6000, 0x7fff).bankrw("bank_ram");
map(0x8000, 0xffff).rom();
}
@@ -1169,8 +1166,8 @@ void multigam_state::machine_start()
m_nt_page[3] = m_nt_ram.get() + 0xc00;
m_ppu->space(AS_PROGRAM).install_readwrite_handler(0x2000, 0x3eff, read8sm_delegate(*this, FUNC(multigam_state::multigam_nt_r)), write8sm_delegate(*this, FUNC(multigam_state::multigam_nt_w)));
- m_ppu->space(AS_PROGRAM).install_read_bank(0x0000, 0x1fff, "bank1");
- membank("bank1")->set_base(memregion("gfx1")->base());
+ m_ppu->space(AS_PROGRAM).install_read_bank(0x0000, 0x1fff, m_bank_gfx);
+ m_bank_gfx->set_base(memregion("gfx1")->base());
}
MACHINE_START_MEMBER(multigam_state,multigm3)
@@ -1182,15 +1179,8 @@ MACHINE_START_MEMBER(multigam_state,multigm3)
m_nt_page[3] = m_nt_ram.get() + 0xc00;
m_ppu->space(AS_PROGRAM).install_readwrite_handler(0x2000, 0x3eff, read8sm_delegate(*this, FUNC(multigam_state::multigam_nt_r)), write8sm_delegate(*this, FUNC(multigam_state::multigam_nt_w)));
-
- m_ppu->space(AS_PROGRAM).install_read_bank(0x0000, 0x03ff, "bank2");
- m_ppu->space(AS_PROGRAM).install_read_bank(0x0400, 0x07ff, "bank3");
- m_ppu->space(AS_PROGRAM).install_read_bank(0x0800, 0x0bff, "bank4");
- m_ppu->space(AS_PROGRAM).install_read_bank(0x0c00, 0x0fff, "bank5");
- m_ppu->space(AS_PROGRAM).install_read_bank(0x1000, 0x13ff, "bank6");
- m_ppu->space(AS_PROGRAM).install_read_bank(0x1400, 0x17ff, "bank7");
- m_ppu->space(AS_PROGRAM).install_read_bank(0x1800, 0x1bff, "bank8");
- m_ppu->space(AS_PROGRAM).install_read_bank(0x1c00, 0x1fff, "bank9");
+ for(int i=0; i<8; i++)
+ m_ppu->space(AS_PROGRAM).install_read_bank(0x0000 + 0x400*i, 0x03ff + 0x400*i, m_bank_ppu[i]);
set_videorom_bank(0, 8, 0, 8);
}
diff --git a/src/mame/drivers/naomi.cpp b/src/mame/drivers/naomi.cpp
index 1565d0f6983..89f92a09367 100644
--- a/src/mame/drivers/naomi.cpp
+++ b/src/mame/drivers/naomi.cpp
@@ -1746,7 +1746,7 @@ void naomi_state::eeprom_93c46a_w(uint64_t data)
void naomi_state::naomi_map(address_map &map)
{
/* Area 0 */
- map(0x00000000, 0x001fffff).rom().region("maincpu", 0).share("rombase"); // BIOS
+ map(0x00000000, 0x001fffff).rom().region("maincpu", 0); // BIOS
map(0x00200000, 0x00207fff).ram().share("sram");
map(0x005f6800, 0x005f69ff).mirror(0x02000000).rw(FUNC(naomi_state::dc_sysctrl_r), FUNC(naomi_state::dc_sysctrl_w));
@@ -1806,7 +1806,7 @@ void naomi2_state::both_pvr2_ta_w(address_space &space, offs_t offset, uint32_t
void naomi2_state::naomi2_map(address_map &map)
{
/* Area 0 */
- map(0x00000000, 0x001fffff).rom().region("maincpu", 0).share("rombase"); // BIOS
+ map(0x00000000, 0x001fffff).rom().region("maincpu", 0); // BIOS
map(0x00200000, 0x00207fff).ram().share("sram");
map(0x005f6800, 0x005f69ff).mirror(0x02000000).rw(FUNC(naomi2_state::dc_sysctrl_r), FUNC(naomi2_state::dc_sysctrl_w));
@@ -1982,8 +1982,8 @@ void atomiswave_state::aw_modem_w(offs_t offset, uint64_t data, uint64_t mem_mas
void atomiswave_state::aw_map(address_map &map)
{
/* Area 0 */
- map(0x00000000, 0x0001ffff).rw(FUNC(atomiswave_state::aw_flash_r), FUNC(atomiswave_state::aw_flash_w)).region("awflash", 0);
- map(0xa0000000, 0xa001ffff).rw(FUNC(atomiswave_state::aw_flash_r), FUNC(atomiswave_state::aw_flash_w)).region("awflash", 0);
+ map(0x00000000, 0x0001ffff).rw(FUNC(atomiswave_state::aw_flash_r), FUNC(atomiswave_state::aw_flash_w));
+ map(0xa0000000, 0xa001ffff).rw(FUNC(atomiswave_state::aw_flash_r), FUNC(atomiswave_state::aw_flash_w));
map(0x00200000, 0x0021ffff).ram().share("sram"); // battery backed up RAM
map(0x005f6800, 0x005f69ff).rw(FUNC(atomiswave_state::dc_sysctrl_r), FUNC(atomiswave_state::dc_sysctrl_w));
diff --git a/src/mame/drivers/nc.cpp b/src/mame/drivers/nc.cpp
index f1e0e822cb6..fcfa62aae28 100644
--- a/src/mame/drivers/nc.cpp
+++ b/src/mame/drivers/nc.cpp
@@ -289,13 +289,6 @@ TIMER_CALLBACK_MEMBER(nc_state::nc_keyboard_timer_callback)
m_keyboard_timer->reset();
}
-
-static const char *const nc_bankhandler_r[]={
-"bank1", "bank2", "bank3", "bank4"};
-
-static const char *const nc_bankhandler_w[]={
-"bank5", "bank6", "bank7", "bank8"};
-
void nc_state::nc_refresh_memory_bank_config(int bank)
{
address_space &space = m_maincpu->space(AS_PROGRAM);
@@ -310,7 +303,7 @@ void nc_state::nc_refresh_memory_bank_config(int bank)
mem_type = (m_memory_config[bank]>>6) & 0x03;
mem_bank = m_memory_config[bank] & 0x03f;
- space.install_read_bank((bank * 0x4000), (bank * 0x4000) + 0x3fff, nc_bankhandler_r[bank]);
+ space.install_read_bank((bank * 0x4000), (bank * 0x4000) + 0x3fff, m_bankhandler_r[bank]);
switch (mem_type)
{
@@ -337,7 +330,7 @@ void nc_state::nc_refresh_memory_bank_config(int bank)
membank(bank1)->set_base(ptr);
membank(bank5)->set_base(ptr);
- space.install_write_bank((bank * 0x4000), (bank * 0x4000) + 0x3fff, nc_bankhandler_w[bank]);
+ space.install_write_bank((bank * 0x4000), (bank * 0x4000) + 0x3fff, m_bankhandler_w[bank]);
LOG("BANK %d: RAM\n",bank);
}
break;
@@ -358,7 +351,7 @@ void nc_state::nc_refresh_memory_bank_config(int bank)
{
/* yes */
membank(bank5)->set_base(ptr);
- space.install_write_bank((bank * 0x4000), (bank * 0x4000) + 0x3fff, nc_bankhandler_w[bank]);
+ space.install_write_bank((bank * 0x4000), (bank * 0x4000) + 0x3fff, m_bankhandler_w[bank]);
}
else
{
diff --git a/src/mame/drivers/neogeo.cpp b/src/mame/drivers/neogeo.cpp
index 9828656c9e3..d31735ceebe 100644
--- a/src/mame/drivers/neogeo.cpp
+++ b/src/mame/drivers/neogeo.cpp
@@ -1405,9 +1405,8 @@ void neogeo_base_state::set_slot_idx(int slot)
space.install_rom(0x000080, 0x0fffff, (uint16_t *)m_slots[m_curr_slot]->get_rom_base() + 0x80/2);
- space.install_read_bank(0x200000, 0x2fffff, "cartridge");
+ space.install_read_bank(0x200000, 0x2fffff, m_bank_cartridge);
space.install_write_handler(0x2ffff0, 0x2fffff, write16smo_delegate(*this, FUNC(neogeo_base_state::write_banksel)));
- m_bank_cartridge = membank("cartridge");
init_cpu();
@@ -1694,7 +1693,7 @@ uint16_t neogeo_base_state::banked_vectors_r(offs_t offset)
}
else
{
- uint16_t* rom = (m_slots[m_curr_slot] && m_slots[m_curr_slot]->get_rom_size() > 0) ? m_slots[m_curr_slot]->get_rom_base() : (uint16_t*)m_region_maincpu->base();
+ uint16_t* rom = (m_slots[m_curr_slot] && m_slots[m_curr_slot]->get_rom_size() > 0) ? m_slots[m_curr_slot]->get_rom_base() : m_region_maincpu ? (uint16_t*)m_region_maincpu->base() : m_share_maincpu;
return rom[offset];
}
}
diff --git a/src/mame/drivers/neogeocd.cpp b/src/mame/drivers/neogeocd.cpp
index 9cc22fe75be..0421088043b 100644
--- a/src/mame/drivers/neogeocd.cpp
+++ b/src/mame/drivers/neogeocd.cpp
@@ -887,7 +887,7 @@ void ngcd_state::neocd_main_map(address_map &map)
{
aes_base_main_map(map);
- map(0x000000, 0x1fffff).ram().region("maincpu", 0x00000);
+ map(0x000000, 0x1fffff).ram().share("maincpu");
map(0x000000, 0x00007f).r(FUNC(ngcd_state::banked_vectors_r)); // writes will fall through to area above
map(0x800000, 0x803fff).rw(FUNC(ngcd_state::memcard_r), FUNC(ngcd_state::memcard_w));
@@ -1089,9 +1089,6 @@ ROM_START( neocd )
ROM_SYSTEM_BIOS( 3, "unibios33", "Universe Bios (Hack, Ver. 3.3)" )
ROMX_LOAD("uni-bioscd33.rom", 0x00000, 0x80000, CRC(ff3abc59) SHA1(5142f205912869b673a71480c5828b1eaed782a8), ROM_GROUPWORD | ROM_REVERSE | ROM_BIOS(3))
- ROM_REGION( 0x200000, "maincpu", ROMREGION_ERASE00 )
- /* 2MB of 68K RAM */
-
ROM_REGION( 0x20000, "spritegen:zoomy", 0 )
ROM_LOAD( "000-lo.lo", 0x00000, 0x20000, CRC(5a86cff2) SHA1(5992277debadeb64d1c1c64b0a92d9293eaf7e4a) )
ROM_END
@@ -1105,9 +1102,6 @@ ROM_START( neocdz )
ROM_SYSTEM_BIOS( 2, "unibios33", "Universe Bios (Hack, Ver. 3.3)" )
ROMX_LOAD("uni-bioscd33.rom", 0x00000, 0x80000, CRC(ff3abc59) SHA1(5142f205912869b673a71480c5828b1eaed782a8), ROM_GROUPWORD | ROM_REVERSE | ROM_BIOS(2))
- ROM_REGION( 0x200000, "maincpu", ROMREGION_ERASE00 )
- /* 2MB of 68K RAM */
-
ROM_REGION( 0x20000, "spritegen:zoomy", 0 )
ROM_LOAD( "000-lo.lo", 0x00000, 0x20000, CRC(5a86cff2) SHA1(5992277debadeb64d1c1c64b0a92d9293eaf7e4a) )
ROM_END
diff --git a/src/mame/drivers/neopcb.cpp b/src/mame/drivers/neopcb.cpp
index 6ee9087b3a0..a58594d8b55 100644
--- a/src/mame/drivers/neopcb.cpp
+++ b/src/mame/drivers/neopcb.cpp
@@ -19,6 +19,8 @@ public:
, m_cmc_prot(*this, "cmc50")
, m_pcm2_prot(*this, "pcm2")
, m_pvc_prot(*this, "pvc")
+ , m_cpu_bank(*this, "cpu_bank")
+ , m_bios_bank(*this, "bios_bank")
{
}
@@ -52,6 +54,8 @@ private:
required_device<cmc_prot_device> m_cmc_prot;
required_device<pcm2_prot_device> m_pcm2_prot;
required_device<pvc_prot_device> m_pvc_prot;
+ memory_bank_creator m_cpu_bank;
+ memory_bank_creator m_bios_bank;
};
@@ -66,7 +70,7 @@ void neopcb_state::device_post_load()
{
ngarcade_base_state::device_post_load();
- membank("cpu_bank")->set_base(m_region_maincpu->base() + m_bank_base);
+ m_cpu_bank->set_base(m_region_maincpu->base() + m_bank_base);
}
void neopcb_state::neopcb(machine_config &config)
@@ -86,7 +90,7 @@ void neopcb_state::neopcb(machine_config &config)
INPUT_CHANGED_MEMBER(neopcb_state::select_bios)
{
- membank("bios_bank")->set_entry(newval ? 0 : 1);
+ m_bios_bank->set_entry(newval ? 0 : 1);
}
static INPUT_PORTS_START( dualbios )
@@ -457,7 +461,7 @@ void neopcb_state::write_bankpvc(offs_t offset, uint16_t data, uint16_t mem_mask
if (offset >= 0xff8)
{
m_bank_base = m_pvc_prot->get_bank_base();
- membank("cpu_bank")->set_base(m_region_maincpu->base() + m_bank_base);
+ m_cpu_bank->set_base(m_region_maincpu->base() + m_bank_base);
}
}
@@ -465,8 +469,8 @@ void neopcb_state::install_common()
{
// install memory bank
m_maincpu->space(AS_PROGRAM).install_rom(0x000080, 0x0fffff, (uint16_t *)m_region_maincpu->base() + 0x80/2);
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x200000, 0x2fffff, "cpu_bank");
- membank("cpu_bank")->set_base(m_region_maincpu->base() + 0x100000);
+ m_maincpu->space(AS_PROGRAM).install_read_bank(0x200000, 0x2fffff, m_cpu_bank);
+ m_cpu_bank->set_base(m_region_maincpu->base() + 0x100000);
// install protection handlers + bankswitch handler
m_maincpu->space(AS_PROGRAM).install_read_handler(0x2fe000, 0x2fffff, read16sm_delegate(*m_pvc_prot, FUNC(pvc_prot_device::protection_r)));
@@ -483,9 +487,9 @@ void neopcb_state::install_common()
void neopcb_state::install_banked_bios()
{
- m_maincpu->space(AS_PROGRAM).install_read_bank(0xc00000, 0xc1ffff, 0x0e0000, "bios_bank");
- membank("bios_bank")->configure_entries(0, 2, memregion("mainbios")->base(), 0x20000);
- membank("bios_bank")->set_entry(1);
+ m_maincpu->space(AS_PROGRAM).install_read_bank(0xc00000, 0xc1ffff, 0x0e0000, m_bios_bank);
+ m_bios_bank->configure_entries(0, 2, memregion("mainbios")->base(), 0x20000);
+ m_bios_bank->set_entry(1);
}
diff --git a/src/mame/drivers/nes.cpp b/src/mame/drivers/nes.cpp
index 0976aac72ca..a652492622a 100644
--- a/src/mame/drivers/nes.cpp
+++ b/src/mame/drivers/nes.cpp
@@ -244,8 +244,7 @@ MACHINE_START_MEMBER( nes_state, famitwin )
setup_disk(m_disk);
// replace the famicom disk ROM with the famicom twin one (until we modernize the floppy drive)
- m_maincpu->space(AS_PROGRAM).install_read_bank(0xe000, 0xffff, "ftbios");
- membank("ftbios")->set_base(machine().root_device().memregion("maincpu")->base() + 0xe000);
+ m_maincpu->space(AS_PROGRAM).install_rom(0xe000, 0xffff, machine().root_device().memregion("maincpu")->base() + 0xe000);
}
}
diff --git a/src/mame/drivers/ngen.cpp b/src/mame/drivers/ngen.cpp
index e0a18155ead..13318a7717f 100644
--- a/src/mame/drivers/ngen.cpp
+++ b/src/mame/drivers/ngen.cpp
@@ -100,7 +100,7 @@ public:
m_hdc_timer(*this,"hdc_timer"),
m_disk_rom(*this,"disk"),
m_fd0(*this,"fdc:0"),
- m_hd_buffer(*this,"hd_buffer_ram")
+ m_hd_buffer(*this,"hd_buffer_ram", 1024*8, ENDIANNESS_LITTLE)
{
}
@@ -186,7 +186,7 @@ private:
memory_array m_vram;
memory_array m_fontram;
optional_device<floppy_connector> m_fd0;
- optional_shared_ptr<uint8_t> m_hd_buffer;
+ memory_share_creator<uint8_t> m_hd_buffer;
void set_dma_channel(int channel, int state);
@@ -843,7 +843,6 @@ void ngen_state::machine_start()
{
memory_share* vidshare = memshare("vram");
memory_share* fontshare = memshare("fontram");
- m_hd_buffer.allocate(1024*8); // 8kB buffer RAM for HD controller
if(vidshare == nullptr || fontshare == nullptr)
fatalerror("VRAM not found\n");
m_vram.set(*vidshare,2);
diff --git a/src/mame/drivers/ngp.cpp b/src/mame/drivers/ngp.cpp
index 9b991fe644f..c0e8e51e98d 100644
--- a/src/mame/drivers/ngp.cpp
+++ b/src/mame/drivers/ngp.cpp
@@ -661,10 +661,8 @@ void ngp_state::machine_start()
std::string region_tag;
uint8_t *cart = memregion(region_tag.assign(m_cart->tag()).append(GENERIC_ROM_REGION_TAG).c_str())->base();
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x200000, 0x3fffff, "flash0");
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x800000, 0x9fffff, "flash1");
- membank("flash0")->set_base(cart);
- membank("flash1")->set_base(cart + 0x200000);
+ m_maincpu->space(AS_PROGRAM).install_rom(0x200000, 0x3fffff, cart);
+ m_maincpu->space(AS_PROGRAM).install_rom(0x800000, 0x9fffff, cart + 0x200000);
m_flash_chip[0].data = cart;
m_flash_chip[0].org_data[0] = m_flash_chip[0].data[0];
diff --git a/src/mame/drivers/nightgal.cpp b/src/mame/drivers/nightgal.cpp
index 8ba32648947..99ad00d2a4a 100644
--- a/src/mame/drivers/nightgal.cpp
+++ b/src/mame/drivers/nightgal.cpp
@@ -417,8 +417,8 @@ void nightgal_state::sexygal_audionmi_w(uint8_t data)
void nightgal_state::sweetgal_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
- map(0x8000, 0x807f).ram().share("sound_ram");
- map(0xe000, 0xefff).rw(FUNC(nightgal_state::royalqn_comm_r), FUNC(nightgal_state::royalqn_comm_w)).share("comms_ram");
+ map(0x8000, 0x807f).lrw8([this](offs_t off) { return m_sound_ram[off]; }, "snd_r", [this](offs_t off, u8 data) { m_sound_ram[off] = data; }, "snd_w");
+ map(0xe000, 0xefff).rw(FUNC(nightgal_state::royalqn_comm_r), FUNC(nightgal_state::royalqn_comm_w));
map(0xf000, 0xffff).ram();
}
diff --git a/src/mame/drivers/nmk16.cpp b/src/mame/drivers/nmk16.cpp
index 3f2249e7aa8..8f7d653efcd 100644
--- a/src/mame/drivers/nmk16.cpp
+++ b/src/mame/drivers/nmk16.cpp
@@ -1162,7 +1162,7 @@ void nmk16_state::gunnail_map(address_map &map)
map(0x088000, 0x0887ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x08c000, 0x08c1ff).writeonly().share("scrollram");
map(0x08c200, 0x08c3ff).writeonly().share("scrollramy");
- map(0x08c400, 0x08c7ff).writeonly(); // unknown
+ map(0x08c400, 0x08c7ff).nopw(); // unknown
map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share("bgvideoram0");
map(0x09c000, 0x09cfff).mirror(0x001000).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram");
map(0x0f0000, 0x0fffff).ram().share("mainram");
@@ -1183,7 +1183,7 @@ void nmk16_state::gunnailb_map(address_map &map)
map(0x088000, 0x0887ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x08c000, 0x08c1ff).writeonly().share("scrollram");
map(0x08c200, 0x08c3ff).writeonly().share("scrollramy");
- map(0x08c400, 0x08c7ff).writeonly(); // unknown
+ map(0x08c400, 0x08c7ff).nopw(); // unknown
map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share("bgvideoram0");
map(0x09c000, 0x09cfff).mirror(0x001000).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram");
map(0x0f0000, 0x0fffff).ram().share("mainram");
diff --git a/src/mame/drivers/nwk-tr.cpp b/src/mame/drivers/nwk-tr.cpp
index 345e395525f..d0d55947ef1 100644
--- a/src/mame/drivers/nwk-tr.cpp
+++ b/src/mame/drivers/nwk-tr.cpp
@@ -729,9 +729,9 @@ void nwktr_state::nwktr_map(address_map &map)
map(0x7d030000, 0x7d03000f).rw(m_k056800, FUNC(k056800_device::host_r), FUNC(k056800_device::host_w));
map(0x7d040000, 0x7d04ffff).rw(FUNC(nwktr_state::lanc1_r), FUNC(nwktr_state::lanc1_w));
map(0x7d050000, 0x7d05ffff).rw(FUNC(nwktr_state::lanc2_r), FUNC(nwktr_state::lanc2_w));
- map(0x7e000000, 0x7e7fffff).rom().region("user2", 0); // Data ROM
- map(0x7f000000, 0x7f1fffff).rom().share("share2");
- map(0x7fe00000, 0x7fffffff).rom().region("user1", 0).share("share2"); // Program ROM
+ map(0x7e000000, 0x7e7fffff).rom().region("user2", 0); /* Data ROM */
+ map(0x7f000000, 0x7f1fffff).rom().region("user1", 0);
+ map(0x7fe00000, 0x7fffffff).rom().region("user1", 0); /* Program ROM */
}
/*****************************************************************************/
diff --git a/src/mame/drivers/octopus.cpp b/src/mame/drivers/octopus.cpp
index b33a13202de..6b4e4ef02b9 100644
--- a/src/mame/drivers/octopus.cpp
+++ b/src/mame/drivers/octopus.cpp
@@ -145,7 +145,7 @@ public:
m_maincpu(*this, "maincpu"),
m_subcpu(*this, "subcpu"),
m_crtc(*this, "crtc"),
- m_vram(*this, "vram"),
+ m_vram(*this, "vram", 0x10000, ENDIANNESS_LITTLE),
m_fontram(*this, "fram"),
m_dma1(*this, "dma1"),
m_dma2(*this, "dma2"),
@@ -238,7 +238,7 @@ private:
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_subcpu;
required_device<scn2674_device> m_crtc;
- required_shared_ptr<uint8_t> m_vram;
+ memory_share_creator<uint8_t> m_vram;
required_shared_ptr<uint8_t> m_fontram;
required_device<am9517a_device> m_dma1;
required_device<am9517a_device> m_dma2;
@@ -760,7 +760,7 @@ void octopus_state::machine_start()
m_vidctrl = 0xff;
// install RAM
- m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x0000,m_ram->size()-1,"main_ram_bank");
+ m_maincpu->space(AS_PROGRAM).install_ram(0x0000,m_ram->size()-1,m_ram->pointer());
m_maincpu->space(AS_PROGRAM).nop_readwrite(m_ram->size(),0xcffff);
}
@@ -773,13 +773,11 @@ void octopus_state::machine_reset()
m_current_drive = 0;
m_rtc_address = true;
m_rtc_data = false;
- membank("main_ram_bank")->set_base(m_ram->pointer());
m_kb_uart->write_dsr(1); // DSR is used to determine if a keyboard is connected? If DSR is high, then the CHAR_OUT BIOS function will not output to the screen.
}
void octopus_state::video_start()
{
- m_vram.allocate(0x10000);
}
uint8_t octopus_state::video_latch_r(offs_t offset)
diff --git a/src/mame/drivers/offtwall.cpp b/src/mame/drivers/offtwall.cpp
index 094adb79fd5..53405aced24 100644
--- a/src/mame/drivers/offtwall.cpp
+++ b/src/mame/drivers/offtwall.cpp
@@ -115,7 +115,7 @@ uint16_t offtwall_state::bankrom_r(address_space &space, offs_t offset)
return us >> 16;
}
- return m_bankrom_base[(m_bank_offset + offset) & 0x3fff];
+ return m_bankrom_base[0x38000 | ((m_bank_offset + offset) & 0x3fff)];
}
@@ -212,7 +212,7 @@ uint16_t offtwall_state::unknown_verify_r(offs_t offset)
void offtwall_state::main_map(address_map &map)
{
map(0x000000, 0x037fff).rom();
- map(0x038000, 0x03ffff).r(FUNC(offtwall_state::bankrom_r)).region("maincpu", 0x38000).share("bankrom_base");
+ map(0x038000, 0x03ffff).r(FUNC(offtwall_state::bankrom_r));
map(0x120000, 0x120fff).rw("eeprom", FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write)).umask16(0x00ff);
map(0x260000, 0x260001).portr("260000");
map(0x260002, 0x260003).portr("260002");
diff --git a/src/mame/drivers/ojankohs.cpp b/src/mame/drivers/ojankohs.cpp
index 938ed75e7ac..031a4ab301e 100644
--- a/src/mame/drivers/ojankohs.cpp
+++ b/src/mame/drivers/ojankohs.cpp
@@ -985,9 +985,9 @@ ROM_START( ojankoca )
ROM_END
-GAME( 1986, ojankoc, 0, ojankoc, ojankoc, ojankohs_state, empty_init, ROT0, "V-System Co.", "Ojanko Club (Japan, Program Ver. 1.3)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, ojankoca, ojankoc, ojankoc, ojankoc, ojankohs_state, empty_init, ROT0, "V-System Co.", "Ojanko Club (Japan, Program Ver. 1.2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, ojankoy, 0, ojankoy, ojankoy, ojankohs_state, empty_init, ROT0, "V-System Co.", "Ojanko Yakata (Japan)", MACHINE_SUPPORTS_SAVE )
-GAME( 1987, ojanko2, 0, ojankoy, ojankoy, ojankohs_state, empty_init, ROT0, "V-System Co.", "Ojanko Yakata 2bankan (Japan)", MACHINE_SUPPORTS_SAVE )
-GAME( 1987, ccasino, 0, ccasino, ccasino, ojankohs_state, empty_init, ROT0, "V-System Co.", "Chinese Casino [BET] (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, ojankoc, 0, ojankoc, ojankoc, ojankoc_state, empty_init, ROT0, "V-System Co.", "Ojanko Club (Japan, Program Ver. 1.3)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, ojankoca, ojankoc, ojankoc, ojankoc, ojankoc_state, empty_init, ROT0, "V-System Co.", "Ojanko Club (Japan, Program Ver. 1.2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, ojankoy, 0, ojankoy, ojankoy, ojankoy_state, empty_init, ROT0, "V-System Co.", "Ojanko Yakata (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1987, ojanko2, 0, ojankoy, ojankoy, ojankoy_state, empty_init, ROT0, "V-System Co.", "Ojanko Yakata 2bankan (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1987, ccasino, 0, ccasino, ccasino, ccasino_state, empty_init, ROT0, "V-System Co.", "Chinese Casino [BET] (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1988, ojankohs, 0, ojankohs, ojankohs, ojankohs_state, empty_init, ROT0, "V-System Co.", "Ojanko High School (Japan)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/omegrace.cpp b/src/mame/drivers/omegrace.cpp
index f321f74781e..c7e5beaef85 100644
--- a/src/mame/drivers/omegrace.cpp
+++ b/src/mame/drivers/omegrace.cpp
@@ -383,7 +383,7 @@ void omegrace_state::main_map(address_map &map)
map(0x0000, 0x3fff).rom();
map(0x4000, 0x4bff).ram();
map(0x5c00, 0x5cff).ram().share("nvram"); /* NVRAM */
- map(0x8000, 0x8fff).ram().share("dvg:vectorram").region("maincpu", 0x8000); /* vector ram */
+ map(0x8000, 0x8fff).ram().share("dvg:vectorram"); /* vector ram */
map(0x9000, 0x9fff).rom(); /* vector rom */
}
diff --git a/src/mame/drivers/opwolf.cpp b/src/mame/drivers/opwolf.cpp
index 100e876394e..36337783bbf 100644
--- a/src/mame/drivers/opwolf.cpp
+++ b/src/mame/drivers/opwolf.cpp
@@ -404,7 +404,7 @@ void opwolf_state::opwolf_map(address_map &map)
map(0x3e0000, 0x3e0000).w("ciu", FUNC(pc060ha_device::master_port_w));
map(0x3e0002, 0x3e0002).rw("ciu", FUNC(pc060ha_device::master_comm_r), FUNC(pc060ha_device::master_comm_w));
map(0xc00000, 0xc0ffff).rw(m_pc080sn, FUNC(pc080sn_device::word_r), FUNC(pc080sn_device::word_w));
- map(0xc10000, 0xc1ffff).writeonly(); /* error in init code (?) */
+ map(0xc10000, 0xc1ffff).nopw(); /* error in init code (?) */
map(0xc20000, 0xc20003).w(m_pc080sn, FUNC(pc080sn_device::yscroll_word_w));
map(0xc40000, 0xc40003).w(m_pc080sn, FUNC(pc080sn_device::xscroll_word_w));
map(0xc50000, 0xc50003).w(m_pc080sn, FUNC(pc080sn_device::ctrl_word_w));
@@ -427,7 +427,7 @@ void opwolf_state::opwolfb_map(address_map &map)
map(0x3e0000, 0x3e0000).w("ciu", FUNC(pc060ha_device::master_port_w));
map(0x3e0002, 0x3e0002).rw("ciu", FUNC(pc060ha_device::master_comm_r), FUNC(pc060ha_device::master_comm_w));
map(0xc00000, 0xc0ffff).rw(m_pc080sn, FUNC(pc080sn_device::word_r), FUNC(pc080sn_device::word_w));
- map(0xc10000, 0xc1ffff).writeonly(); /* error in init code (?) */
+ map(0xc10000, 0xc1ffff).nopw(); /* error in init code (?) */
map(0xc20000, 0xc20003).w(m_pc080sn, FUNC(pc080sn_device::yscroll_word_w));
map(0xc40000, 0xc40003).w(m_pc080sn, FUNC(pc080sn_device::xscroll_word_w));
map(0xc50000, 0xc50003).w(m_pc080sn, FUNC(pc080sn_device::ctrl_word_w));
@@ -449,7 +449,7 @@ void opwolf_state::opwolfp_map(address_map &map)
map(0x3e0000, 0x3e0000).w("ciu", FUNC(pc060ha_device::master_port_w));
map(0x3e0002, 0x3e0002).rw("ciu", FUNC(pc060ha_device::master_comm_r), FUNC(pc060ha_device::master_comm_w));
map(0xc00000, 0xc0ffff).rw(m_pc080sn, FUNC(pc080sn_device::word_r), FUNC(pc080sn_device::word_w));
- map(0xc10000, 0xc1ffff).writeonly(); /* error in init code (?) */
+ map(0xc10000, 0xc1ffff).nopw(); /* error in init code (?) */
map(0xc20000, 0xc20003).w(m_pc080sn, FUNC(pc080sn_device::yscroll_word_w));
map(0xc40000, 0xc40003).w(m_pc080sn, FUNC(pc080sn_device::xscroll_word_w));
map(0xc50000, 0xc50003).w(m_pc080sn, FUNC(pc080sn_device::ctrl_word_w));
diff --git a/src/mame/drivers/osi.cpp b/src/mame/drivers/osi.cpp
index 9334a256333..cc6bb15eccc 100644
--- a/src/mame/drivers/osi.cpp
+++ b/src/mame/drivers/osi.cpp
@@ -654,12 +654,12 @@ void sb2m600_state::machine_start()
switch (m_ram->size())
{
case 4*1024:
- program.install_readwrite_bank(0x0000, 0x0fff, "bank1");
+ program.install_readwrite_bank(0x0000, 0x0fff, membank("bank1"));
program.unmap_readwrite(0x1000, 0x1fff);
break;
case 8*1024:
- program.install_readwrite_bank(0x0000, 0x1fff, "bank1");
+ program.install_readwrite_bank(0x0000, 0x1fff, membank("bank1"));
break;
}
@@ -685,12 +685,12 @@ void c1p_state::machine_start()
switch (m_ram->size())
{
case 8*1024:
- program.install_readwrite_bank(0x0000, 0x1fff, "bank1");
+ program.install_readwrite_bank(0x0000, 0x1fff, membank("bank1"));
program.unmap_readwrite(0x2000, 0x4fff);
break;
case 20*1024:
- program.install_readwrite_bank(0x0000, 0x4fff, "bank1");
+ program.install_readwrite_bank(0x0000, 0x4fff, membank("bank1"));
break;
}
diff --git a/src/mame/drivers/pacman.cpp b/src/mame/drivers/pacman.cpp
index 48d93304595..c0454493cbb 100644
--- a/src/mame/drivers/pacman.cpp
+++ b/src/mame/drivers/pacman.cpp
@@ -1014,6 +1014,12 @@ void pacman_state::pacman_map(address_map &map)
map(0x50c0, 0x50c0).mirror(0xaf3f).portr("DSW2");
}
+void pacman_state::cannonbp_map(address_map &map)
+{
+ pacman_map(map);
+ map(0x4800, 0x4bff).ram();
+ map(0x3000, 0x3fff).r(FUNC(pacman_state::cannonbp_protection_r));
+}
void pacman_state::birdiy_map(address_map &map)
{
@@ -1220,14 +1226,14 @@ void pacman_state::s2650games_map(address_map &map)
map(0x0000, 0x0fff).bankr("bank1");
map(0x1000, 0x13ff).mirror(0x6000).w(FUNC(pacman_state::s2650games_colorram_w)).share("colorram");
map(0x1400, 0x141f).mirror(0x6000).w(FUNC(pacman_state::s2650games_scroll_w));
- map(0x1420, 0x148f).mirror(0x6000).writeonly();
+ map(0x1420, 0x148f).mirror(0x6000).writeonly().share("unk_1420");
map(0x1490, 0x149f).mirror(0x6000).writeonly().share("s2650_spriteram");
map(0x14a0, 0x14bf).mirror(0x6000).w(FUNC(pacman_state::s2650games_tilesbank_w)).share("s2650_tileram");
- map(0x14c0, 0x14ff).mirror(0x6000).writeonly();
+ map(0x14c0, 0x14ff).mirror(0x6000).writeonly().share("unk_14c0");
map(0x1500, 0x1507).mirror(0x6000).w(m_mainlatch, FUNC(ls259_device::write_d0));
- map(0x1508, 0x155f).mirror(0x6000).writeonly();
+ map(0x1508, 0x155f).mirror(0x6000).writeonly().share("unk_1508");
map(0x1560, 0x156f).mirror(0x6000).writeonly().share("spriteram2");
- map(0x1570, 0x157f).mirror(0x6000).writeonly();
+ map(0x1570, 0x157f).mirror(0x6000).writeonly().share("unk_1570");
map(0x1586, 0x1587).mirror(0x6000).nopw();
map(0x15c0, 0x15c0).mirror(0x6000).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
map(0x15c7, 0x15c7).mirror(0x6000).w(FUNC(pacman_state::porky_banking_w));
@@ -4008,6 +4014,11 @@ void pacman_state::crushs(machine_config &config)
AY8912(config, "ay8912", 1789750).add_route(ALL_OUTPUTS, "mono", 0.75);
}
+void pacman_state::cannonbp(machine_config &config)
+{
+ pacman(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &pacman_state::cannonbp_map);
+}
/*************************************
@@ -7763,16 +7774,6 @@ uint8_t pacman_state::cannonbp_protection_r(offs_t offset)
}
}
-
-void pacman_state::init_cannonbp()
-{
- /* extra memory */
- m_maincpu->space(AS_PROGRAM).install_ram(0x4800, 0x4bff);
-
- /* protection? */
- m_maincpu->space(AS_PROGRAM).install_read_handler(0x3000, 0x3fff, read8sm_delegate(*this, FUNC(pacman_state::cannonbp_protection_r)));
-}
-
void pacman_state::init_pengomc1()
{
uint8_t *romdata = memregion("maincpu")->base();
@@ -7962,7 +7963,7 @@ GAME( 1986, bigbucks, 0, bigbucks, bigbucks, pacman_state, empty_init,
GAME( 1983, numcrash, 0, numcrash, numcrash, pacman_state, empty_init, ROT90, "Hanshin Goraku / Peni", "Number Crash", MACHINE_SUPPORTS_SAVE ) // "Peni soft" related?
-GAME( 1985, cannonbp, 0, pacman, cannonbp, pacman_state, init_cannonbp, ROT90, "Novomatic", "Cannon Ball (Pac-Man Hardware)", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE )
+GAME( 1985, cannonbp, 0, cannonbp, cannonbp, pacman_state, empty_init, ROT90, "Novomatic", "Cannon Ball (Pac-Man Hardware)", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE )
GAME( 1999, superabc, 0, superabc, superabc, pacman_state, init_superabc, ROT90, "hack (Two-Bit Score)", "Super ABC (Pac-Man multigame kit, Sep. 03 1999)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, superabco,superabc, superabc, superabc, pacman_state, init_superabc, ROT90, "hack (Two-Bit Score)", "Super ABC (Pac-Man multigame kit, Mar. 08 1999)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/palm.cpp b/src/mame/drivers/palm.cpp
index 760f9db54e8..b0101106966 100644
--- a/src/mame/drivers/palm.cpp
+++ b/src/mame/drivers/palm.cpp
@@ -136,9 +136,7 @@ WRITE_LINE_MEMBER(palm_state::palm_spim_exchange)
void palm_state::machine_start()
{
address_space &space = m_maincpu->space(AS_PROGRAM);
- space.install_read_bank (0x000000, m_ram->size() - 1, "bank1");
- space.install_write_bank(0x000000, m_ram->size() - 1, "bank1");
- membank("bank1")->set_base(m_ram->pointer());
+ space.install_rom(0x000000, m_ram->size() - 1, m_ram->pointer());
save_item(NAME(m_port_f_latch));
save_item(NAME(m_spim_data));
diff --git a/src/mame/drivers/pc1500.cpp b/src/mame/drivers/pc1500.cpp
index b30ddd2b5ed..75fb6e01fdf 100644
--- a/src/mame/drivers/pc1500.cpp
+++ b/src/mame/drivers/pc1500.cpp
@@ -96,13 +96,13 @@ private:
void pc1500_state::pc1500_mem(address_map &map)
{
map.unmap_value_high();
- map(0x0000, 0x3fff).rom(); //module ROM/RAM
+ // map(0x0000, 0x3fff).rom(); //module ROM/RAM
map(0x4000, 0x47ff).ram(); //user RAM
map(0x4800, 0x6fff).ram(); //expansion RAM
map(0x7000, 0x71ff).ram().mirror(0x0600).share("lcd_data");
- map(0x7800, 0x7bff).ram().region("maincpu", 0x7800).mirror(0x0400);
- map(0xa000, 0xbfff).rom(); //expansion ROM
- map(0xc000, 0xffff).rom(); //system ROM
+ map(0x7800, 0x7bff).ram().mirror(0x0400);
+ // map(0xa000, 0xbfff).rom(); //expansion ROM
+ map(0xc000, 0xffff).rom().region("maincpu", 0); //system ROM
}
void pc1500_state::pc1500_mem_io(address_map &map)
@@ -350,9 +350,9 @@ void pc1500_state::pc1500(machine_config &config)
ROM_START( pc1500 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "sys1500.rom", 0xc000, 0x4000, CRC(d480b50d) SHA1(4bf748ba4d7c2b7cd7da7f3fdefcdd2e4cd41c4e))
- ROM_REGION( 0x10000, "ce150", ROMREGION_ERASEFF )
+ ROM_REGION( 0x4000, "maincpu", ROMREGION_ERASEFF )
+ ROM_LOAD( "sys1500.rom", 0x0000, 0x4000, CRC(d480b50d) SHA1(4bf748ba4d7c2b7cd7da7f3fdefcdd2e4cd41c4e))
+ ROM_REGION( 0x2000, "ce150", ROMREGION_ERASEFF )
ROM_LOAD( "ce-150.rom", 0x0000, 0x2000, CRC(8fa1df6d) SHA1(a3aa02a641a46c27c0d4c0dc025b0dbe9b5b79c8))
ROM_END
diff --git a/src/mame/drivers/pc8001.cpp b/src/mame/drivers/pc8001.cpp
index a7478090cb7..f34f2cd00ad 100644
--- a/src/mame/drivers/pc8001.cpp
+++ b/src/mame/drivers/pc8001.cpp
@@ -439,7 +439,7 @@ void pc8001_state::machine_start()
uint8_t *ram = m_ram->pointer();
membank("bank1")->configure_entry(1, m_rom->base());
- program.install_read_bank(0x0000, 0x5fff, "bank1");
+ program.install_read_bank(0x0000, 0x5fff, membank("bank1"));
program.unmap_write(0x0000, 0x5fff);
switch (m_ram->size())
@@ -448,22 +448,22 @@ void pc8001_state::machine_start()
membank("bank3")->configure_entry(0, ram);
program.unmap_readwrite(0x6000, 0xbfff);
program.unmap_readwrite(0x8000, 0xbfff);
- program.install_readwrite_bank(0xc000, 0xffff, "bank3");
+ program.install_readwrite_bank(0xc000, 0xffff, membank("bank3"));
break;
case 32*1024:
membank("bank3")->configure_entry(0, ram);
program.unmap_readwrite(0x6000, 0xbfff);
- program.install_readwrite_bank(0x8000, 0xffff, "bank3");
+ program.install_readwrite_bank(0x8000, 0xffff, membank("bank3"));
break;
case 64*1024:
membank("bank1")->configure_entry(0, ram);
membank("bank2")->configure_entry(0, ram + 0x6000);
membank("bank3")->configure_entry(0, ram + 0x8000);
- program.install_readwrite_bank(0x0000, 0x5fff, "bank1");
- program.install_readwrite_bank(0x6000, 0xbfff, "bank2");
- program.install_readwrite_bank(0x8000, 0xffff, "bank3");
+ program.install_readwrite_bank(0x0000, 0x5fff, membank("bank1"));
+ program.install_readwrite_bank(0x6000, 0xbfff, membank("bank2"));
+ program.install_readwrite_bank(0x8000, 0xffff, membank("bank3"));
membank("bank2")->set_entry(0);
break;
}
diff --git a/src/mame/drivers/pc8401a.cpp b/src/mame/drivers/pc8401a.cpp
index ad6e29ccbe4..435050124f8 100644
--- a/src/mame/drivers/pc8401a.cpp
+++ b/src/mame/drivers/pc8401a.cpp
@@ -85,14 +85,14 @@ void pc8401a_state::bankswitch(uint8_t data)
if (rombank < 3)
{
/* internal ROM */
- program.install_read_bank(0x0000, 0x7fff, "bank1");
+ program.install_read_bank(0x0000, 0x7fff, membank("bank1"));
program.unmap_write(0x0000, 0x7fff);
membank("bank1")->set_entry(rombank);
}
else if (m_cart_rom)
{
/* ROM cartridge */
- program.install_read_bank(0x0000, 0x7fff, "bank1");
+ program.install_read_bank(0x0000, 0x7fff, membank("bank1"));
program.unmap_write(0x0000, 0x7fff);
membank("bank1")->set_entry(6);
}
@@ -102,13 +102,13 @@ void pc8401a_state::bankswitch(uint8_t data)
break;
case 1: /* RAM 0000H to 7FFFH */
- program.install_readwrite_bank(0x0000, 0x7fff, "bank1");
+ program.install_readwrite_bank(0x0000, 0x7fff, membank("bank1"));
membank("bank1")->set_entry(4);
//logerror("0x0000-0x7fff = RAM 0-7fff\n");
break;
case 2: /* RAM 8000H to FFFFH */
- program.install_readwrite_bank(0x0000, 0x7fff, "bank1");
+ program.install_readwrite_bank(0x0000, 0x7fff, membank("bank1"));
membank("bank1")->set_entry(5);
//logerror("0x0000-0x7fff = RAM 8000-ffff\n");
break;
@@ -121,19 +121,19 @@ void pc8401a_state::bankswitch(uint8_t data)
switch (ram8000)
{
case 0: /* cell addresses 0000H to 3FFFH */
- program.install_readwrite_bank(0x8000, 0xbfff, "bank3");
+ program.install_readwrite_bank(0x8000, 0xbfff, membank("bank3"));
membank("bank3")->set_entry(0);
//logerror("0x8000-0xbfff = RAM 0-3fff\n");
break;
case 1: /* cell addresses 4000H to 7FFFH */
- program.install_readwrite_bank(0x8000, 0xbfff, "bank3");
+ program.install_readwrite_bank(0x8000, 0xbfff, membank("bank3"));
membank("bank3")->set_entry(1);
//logerror("0x8000-0xbfff = RAM 4000-7fff\n");
break;
case 2: /* cell addresses 8000H to BFFFH */
- program.install_readwrite_bank(0x8000, 0xbfff, "bank3");
+ program.install_readwrite_bank(0x8000, 0xbfff, membank("bank3"));
membank("bank3")->set_entry(2);
//logerror("0x8000-0xbfff = RAM 8000-bfff\n");
break;
@@ -141,7 +141,7 @@ void pc8401a_state::bankswitch(uint8_t data)
case 3: /* RAM cartridge */
if (m_ram->size() > 64)
{
- program.install_readwrite_bank(0x8000, 0xbfff, "bank3");
+ program.install_readwrite_bank(0x8000, 0xbfff, membank("bank3"));
membank("bank3")->set_entry(3); // TODO or 4
}
else
@@ -155,7 +155,7 @@ void pc8401a_state::bankswitch(uint8_t data)
if (BIT(data, 6))
{
/* CRT video RAM */
- program.install_readwrite_bank(0xc000, 0xdfff, "bank4");
+ program.install_readwrite_bank(0xc000, 0xdfff, membank("bank4"));
program.unmap_readwrite(0xe000, 0xe7ff);
membank("bank4")->set_entry(1);
//logerror("0xc000-0xdfff = video RAM\n");
@@ -163,7 +163,7 @@ void pc8401a_state::bankswitch(uint8_t data)
else
{
/* RAM */
- program.install_readwrite_bank(0xc000, 0xe7ff, "bank4");
+ program.install_readwrite_bank(0xc000, 0xe7ff, membank("bank4"));
membank("bank4")->set_entry(0);
//logerror("0xc000-0e7fff = RAM c000-e7fff\n");
}
@@ -497,9 +497,6 @@ void pc8401a_state::machine_start()
/* initialize RTC */
m_rtc->cs_w(1);
- /* allocate CRT video RAM */
- m_crt_ram.allocate(PC8401A_CRT_VIDEORAM_SIZE);
-
uint8_t *ram = m_ram->pointer();
/* set up A0/A1 memory banking */
diff --git a/src/mame/drivers/pcat_nit.cpp b/src/mame/drivers/pcat_nit.cpp
index 22f0a6a6ddf..beece42b34e 100644
--- a/src/mame/drivers/pcat_nit.cpp
+++ b/src/mame/drivers/pcat_nit.cpp
@@ -97,7 +97,12 @@ public:
pcat_nit_state(const machine_config &mconfig, device_type type, const char *tag)
: pcat_base_state(mconfig, type, tag),
m_uart(*this, "ns16450_0"),
- m_microtouch(*this, "microtouch") { }
+ m_microtouch(*this, "microtouch"),
+ m_bios_region(*this, "bios"),
+ m_disk_bios_region(*this, "disk_bios"),
+ m_bios_share(*this, "bios"),
+ m_disk_bios_share(*this, "disk_bios")
+ { }
void bonanza(machine_config &config);
void pcat_nit(machine_config &config);
@@ -108,6 +113,10 @@ private:
std::unique_ptr<uint8_t[]> m_banked_nvram;
required_device<ns16450_device> m_uart;
required_device<microtouch_device> m_microtouch;
+ required_region_ptr<uint32_t> m_bios_region;
+ required_region_ptr<uint32_t> m_disk_bios_region;
+ required_shared_ptr<uint32_t> m_bios_share;
+ required_shared_ptr<uint32_t> m_disk_bios_share;
void pcat_nit_rombank_w(uint8_t data);
uint8_t pcat_nit_io_r(offs_t offset);
@@ -131,7 +140,7 @@ void pcat_nit_state::pcat_nit_rombank_w(uint8_t data)
if ( data & 0x40 )
{
// rom bank
- mspace.install_read_bank(0x000d8000, 0x000dffff, "rombank" );
+ mspace.install_read_bank(0x000d8000, 0x000dffff, membank("rombank") );
mspace.unmap_write(0x000d8000, 0x000dffff);
if ( data & 0x80 )
@@ -148,9 +157,7 @@ void pcat_nit_state::pcat_nit_rombank_w(uint8_t data)
// nvram bank
mspace.unmap_readwrite(0x000d8000, 0x000dffff);
- mspace.install_readwrite_bank(0x000d8000, 0x000d9fff, "nvrambank" );
-
- membank("nvrambank")->set_base(m_banked_nvram.get());
+ mspace.install_ram(0x000d8000, 0x000d9fff, m_banked_nvram.get());
}
}
@@ -160,10 +167,10 @@ void pcat_nit_state::pcat_map(address_map &map)
map(0x00000000, 0x0009ffff).ram();
map(0x000a0000, 0x000bffff).rw("vga", FUNC(vga_device::mem_r), FUNC(vga_device::mem_w));
map(0x000c0000, 0x000c7fff).rom().region("video_bios", 0).nopw();
- map(0x000d0000, 0x000d3fff).ram().region("disk_bios", 0);
+ map(0x000d0000, 0x000d3fff).ram().share("disk_bios");
map(0x000d7000, 0x000d7000).w(FUNC(pcat_nit_state::pcat_nit_rombank_w));
map(0x000d8000, 0x000dffff).bankr("rombank");
- map(0x000f0000, 0x000fffff).ram().region("bios", 0);
+ map(0x000f0000, 0x000fffff).ram().share("bios");
map(0xffff0000, 0xffffffff).rom().region("bios", 0);
}
@@ -172,10 +179,10 @@ void pcat_nit_state::bonanza_map(address_map &map)
map(0x00000000, 0x0009ffff).ram();
map(0x000a0000, 0x000bffff).rw("vga", FUNC(cirrus_gd5428_device::mem_r), FUNC(cirrus_gd5428_device::mem_w));
map(0x000c0000, 0x000c7fff).rom().region("video_bios", 0).nopw();
- map(0x000d0000, 0x000d3fff).ram().region("disk_bios", 0);
+ map(0x000d0000, 0x000d3fff).ram().share("disk_bios");
map(0x000d7000, 0x000d7000).w(FUNC(pcat_nit_state::pcat_nit_rombank_w));
map(0x000d8000, 0x000dffff).bankr("rombank");
- map(0x000f0000, 0x000fffff).ram().region("bios", 0);
+ map(0x000f0000, 0x000fffff).ram().share("bios");
map(0xffff0000, 0xffffffff).rom().region("bios", 0);
}
@@ -229,6 +236,10 @@ void pcat_nit_state::machine_start()
{
membank("rombank")->configure_entries(0, 0x80, memregion("game_prg")->base(), 0x8000 );
membank("rombank")->set_entry(0);
+
+ // There's some shadow ram control registers missing somehwere
+ memcpy(m_bios_share, m_bios_region, 0x10000);
+ memcpy(m_disk_bios_share, m_disk_bios_region, 0x4000);
}
void pcat_nit_state::pcat_nit(machine_config &config)
diff --git a/src/mame/drivers/pce220.cpp b/src/mame/drivers/pce220.cpp
index a8fb9f74c87..24e4ca7f644 100644
--- a/src/mame/drivers/pce220.cpp
+++ b/src/mame/drivers/pce220.cpp
@@ -380,8 +380,7 @@ void pce220_state::boot_bank_w(uint8_t data)
if (data & 0x01)
{
address_space &space_prg = m_maincpu->space(AS_PROGRAM);
- space_prg.install_read_bank(0x0000, 0x3fff, m_banks[0]);
- space_prg.install_write_bank(0x0000, 0x3fff, m_banks[0]);
+ space_prg.install_readwrite_bank(0x0000, 0x3fff, m_banks[0]);
m_banks[0]->set_entry(0);
}
}
diff --git a/src/mame/drivers/pcm.cpp b/src/mame/drivers/pcm.cpp
index a68ab28fcba..5fd5eca10b5 100644
--- a/src/mame/drivers/pcm.cpp
+++ b/src/mame/drivers/pcm.cpp
@@ -81,7 +81,6 @@ public:
, m_ctc_u(*this, "ctc_u")
, m_speaker(*this, "speaker")
, m_cass(*this, "cassette")
- , m_vram(*this, "videoram")
, m_p_chargen(*this, "chargen")
, m_bank(*this, {"bankr", "bankw", "bank2", "bank3"})
{ }
@@ -110,7 +109,6 @@ private:
required_device<z80ctc_device> m_ctc_u;
required_device<speaker_sound_device> m_speaker;
required_device<cassette_image_device> m_cass;
- optional_shared_ptr<u8> m_vram;
required_region_ptr<u8> m_p_chargen;
required_memory_bank_array<4> m_bank;
};
@@ -222,8 +220,6 @@ void pcm_state::machine_start()
u8* r = m_ram->pointer();
u8 *m = memregion("maincpu")->base();
- m_vram.set_target(r+0xf800, 0x800); // Fix position of vram
-
save_item(NAME(m_cone));
save_item(NAME(m_port85));
@@ -251,7 +247,7 @@ u32 pcm_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const
for (u16 x = ma; x < ma + 64; x++)
{
- u8 const chr = m_vram[x];
+ u8 const chr = m_ram->pointer()[x + 0xf800];
u8 const gfx = m_p_chargen[(chr<<3) | ra];
diff --git a/src/mame/drivers/pda600.cpp b/src/mame/drivers/pda600.cpp
index 3435da028de..bd3c17f938f 100644
--- a/src/mame/drivers/pda600.cpp
+++ b/src/mame/drivers/pda600.cpp
@@ -69,6 +69,7 @@ public:
pda600_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
+ , m_video_ram(*this, "videoram")
{
}
@@ -76,12 +77,12 @@ public:
private:
required_device<cpu_device> m_maincpu;
+ required_shared_ptr<uint8_t> m_video_ram;
virtual void video_start() override;
virtual void machine_reset() override;
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- uint8_t * m_video_ram;
void pda600_io(address_map &map);
void pda600_mem(address_map &map);
};
@@ -92,8 +93,8 @@ void pda600_state::pda600_mem(address_map &map)
map.unmap_value_high();
map(0x00000, 0x1ffff).rom();
//map(0x20000, 0x9ffff).ram(); // PCMCIA Card
- map(0xa0000, 0xa7fff).ram().region("videoram", 0);
- map(0xe0000, 0xfffff).ram().region("mainram", 0).share("nvram");
+ map(0xa0000, 0xa7fff).ram().share("videoram");
+ map(0xe0000, 0xfffff).ram().share("nvram");
}
void pda600_state::pda600_io(address_map &map)
@@ -120,7 +121,6 @@ void pda600_state::machine_reset()
void pda600_state::video_start()
{
- m_video_ram = memregion("videoram")->base();
}
uint32_t pda600_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
@@ -233,12 +233,6 @@ void pda600_state::pda600(machine_config &config)
ROM_START( pda600 )
ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "pdarom.bin", 0x00000, 0x20000, CRC(f793a6c5) SHA1(ab14b0fdcedb927c66357368a2bfff605ba758fb))
-
- // 128KB RAM
- ROM_REGION( 0x20000, "mainram", ROMREGION_ERASE )
-
- // 32KB Video RAM
- ROM_REGION( 0x8000, "videoram", ROMREGION_ERASE )
ROM_END
/* Driver */
diff --git a/src/mame/drivers/pet.cpp b/src/mame/drivers/pet.cpp
index 77a2b3bc43e..02b868c0cbf 100644
--- a/src/mame/drivers/pet.cpp
+++ b/src/mame/drivers/pet.cpp
@@ -211,7 +211,7 @@ public:
m_ram(*this, RAM_TAG),
m_rom(*this, M6502_TAG),
m_char_rom(*this, "charom"),
- m_video_ram(*this, "video_ram"),
+ m_video_ram(*this, "video_ram", 0x800, ENDIANNESS_LITTLE),
m_row(*this, "ROW%u", 0),
m_lock(*this, "LOCK"),
m_sync_timer(nullptr),
@@ -294,7 +294,7 @@ protected:
required_device<ram_device> m_ram;
required_memory_region m_rom;
required_memory_region m_char_rom;
- optional_shared_ptr<uint8_t> m_video_ram;
+ memory_share_creator<uint8_t> m_video_ram;
required_ioport_array<10> m_row;
required_ioport m_lock;
@@ -1518,9 +1518,6 @@ void cbm8296d_ieee488_devices(device_slot_interface &device)
MACHINE_START_MEMBER( pet_state, pet )
{
- // allocate memory
- m_video_ram.allocate(m_video_ram_size);
-
// initialize memory
uint8_t data = 0xff;
diff --git a/src/mame/drivers/pingpong.cpp b/src/mame/drivers/pingpong.cpp
index 9aab2be8226..79595d9cc74 100644
--- a/src/mame/drivers/pingpong.cpp
+++ b/src/mame/drivers/pingpong.cpp
@@ -39,11 +39,9 @@ void pingpong_state::cashquiz_question_bank_low_w(uint8_t data)
{
if(data >= 0x60 && data <= 0xdf)
{
- static const char * const bankname[] = { "bank1", "bank2", "bank3", "bank4", "bank5", "bank6", "bank7", "bank8" };
- const char *bank = bankname[data & 7];
int bankaddr = m_question_addr_high | ((data - 0x60) * 0x100);
uint8_t *questions = memregion("user1")->base() + bankaddr;
- membank(bank)->set_base(questions);
+ m_banks[data & 7]->set_base(questions);
}
}
@@ -129,6 +127,23 @@ void pingpong_state::merlinmm_map(address_map &map)
map(0xa600, 0xa600).w("watchdog", FUNC(watchdog_timer_device::reset_w));
}
+void pingpong_state::cashquiz_map(address_map &map)
+{
+ merlinmm_map(map);
+ map(0x5000, 0x57ff).unmaprw();
+
+ map(0x4000, 0x4000).w(FUNC(pingpong_state::cashquiz_question_bank_high_w));
+ map(0x4001, 0x4001).w(FUNC(pingpong_state::cashquiz_question_bank_low_w));
+
+ map(0x5000, 0x50ff).bankr("bank1");
+ map(0x5100, 0x51ff).bankr("bank2");
+ map(0x5200, 0x52ff).bankr("bank3");
+ map(0x5300, 0x53ff).bankr("bank4");
+ map(0x5400, 0x54ff).bankr("bank5");
+ map(0x5500, 0x55ff).bankr("bank6");
+ map(0x5600, 0x56ff).bankr("bank7");
+ map(0x5700, 0x57ff).bankr("bank8");
+}
static INPUT_PORTS_START( pingpong )
@@ -484,6 +499,12 @@ void pingpong_state::merlinmm(machine_config &config)
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
}
+void pingpong_state::cashquiz(machine_config &config)
+{
+ merlinmm(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &pingpong_state::cashquiz_map);
+}
+
/***************************************************************************
@@ -581,32 +602,12 @@ void pingpong_state::init_cashquiz()
for (int i = 0; i < 0x40000; i++)
ROM[i] = bitswap<8>(ROM[i],0,1,2,3,4,5,6,7);
- /* questions banking handlers */
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x4000, 0x4000, write8smo_delegate(*this, FUNC(pingpong_state::cashquiz_question_bank_high_w)));
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x4001, 0x4001, write8smo_delegate(*this, FUNC(pingpong_state::cashquiz_question_bank_low_w)));
-
- // 8 independents banks for questions
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x5000, 0x50ff, "bank1");
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x5100, 0x51ff, "bank2");
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x5200, 0x52ff, "bank3");
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x5300, 0x53ff, "bank4");
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x5400, 0x54ff, "bank5");
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x5500, 0x55ff, "bank6");
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x5600, 0x56ff, "bank7");
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x5700, 0x57ff, "bank8");
-
// setup default banks
- membank("bank1")->set_base(memregion("user1")->base() + 0x100*0 );
- membank("bank2")->set_base(memregion("user1")->base() + 0x100*1 );
- membank("bank3")->set_base(memregion("user1")->base() + 0x100*2 );
- membank("bank4")->set_base(memregion("user1")->base() + 0x100*3 );
- membank("bank5")->set_base(memregion("user1")->base() + 0x100*4 );
- membank("bank6")->set_base(memregion("user1")->base() + 0x100*5 );
- membank("bank7")->set_base(memregion("user1")->base() + 0x100*6 );
- membank("bank8")->set_base(memregion("user1")->base() + 0x100*7 );
+ for(int i=0; i<8; i++)
+ m_banks[i]->set_base(memregion("user1")->base() + 0x100*i);
}
GAME( 1985, pingpong, 0, pingpong, pingpong, pingpong_state, empty_init, ROT0, "Konami", "Konami's Ping-Pong", 0 )
GAME( 1986, merlinmm, 0, merlinmm, merlinmm, pingpong_state, init_merlinmm, ROT90, "Zilec-Zenitone", "Merlins Money Maze", 0 )
-GAME( 1986, cashquiz, 0, merlinmm, cashquiz, pingpong_state, init_cashquiz, ROT0, "Zilec-Zenitone", "Cash Quiz (Type B, Version 5)", MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1986, cashquiz, 0, cashquiz, cashquiz, pingpong_state, init_cashquiz, ROT0, "Zilec-Zenitone", "Cash Quiz (Type B, Version 5)", MACHINE_IMPERFECT_GRAPHICS )
diff --git a/src/mame/drivers/pipedrm.cpp b/src/mame/drivers/pipedrm.cpp
index 03d4b8658ce..da4d940bda0 100644
--- a/src/mame/drivers/pipedrm.cpp
+++ b/src/mame/drivers/pipedrm.cpp
@@ -881,7 +881,8 @@ void pipedrm_state::init_pipedrm()
{
const memory_share *share = memshare("palette");
/* sprite RAM lives at the end of palette RAM */
- m_spriteram.set_target((uint8_t*)share->ptr() + 0xc00, 0x400);
+ m_spriteram = (uint8_t*)share->ptr() + 0xc00;
+ m_spriteram_size = 0x400;
m_maincpu->space(AS_PROGRAM).install_ram(0xcc00, 0xcfff, m_spriteram);
}
diff --git a/src/mame/drivers/playch10.cpp b/src/mame/drivers/playch10.cpp
index f11ea81963c..97dde797de2 100644
--- a/src/mame/drivers/playch10.cpp
+++ b/src/mame/drivers/playch10.cpp
@@ -381,6 +381,114 @@ void playch10_state::cart_map(address_map &map)
map(0x8000, 0xffff).rom();
}
+void playch10_state::cart_a_map(address_map &map)
+{
+ cart_map(map);
+
+ /* switches vrom with writes to the $803e-$8041 area */
+ map(0x8000, 0x8fff).w(FUNC(playch10_state::aboard_vrom_switch_w));
+}
+
+void playch10_state::cart_b_map(address_map &map)
+{
+ cart_map(map);
+
+ /* Roms are banked at $8000 to $bfff */
+ map(0x8000, 0xffff).w(FUNC(playch10_state::bboard_rom_switch_w));
+}
+
+void playch10_state::cart_c_map(address_map &map)
+{
+ cart_map(map);
+
+ /* switches vrom with writes to $6000 */
+ map(0x6000, 0x6000).w(FUNC(playch10_state::cboard_vrom_switch_w));
+}
+
+void playch10_state::cart_d_map(address_map &map)
+{
+ cart_map(map);
+
+ /* MMC mapper at writes to $8000-$ffff */
+ map(0x8000, 0xffff).w(FUNC(playch10_state::mmc1_rom_switch_w));
+}
+
+void playch10_state::cart_d2_map(address_map &map)
+{
+ cart_d_map(map);
+
+ /* extra ram at $6000-$7fff */
+ map(0x6000, 0x7fff).ram();
+}
+
+void playch10_state::cart_e_map(address_map &map)
+{
+ cart_map(map);
+
+ /* nvram at $6000-$6fff */
+ map(0x6000, 0x6fff).ram();
+
+ /* basically a mapper 9 on a nes */
+ map(0x8000, 0xffff).w(FUNC(playch10_state::eboard_rom_switch_w));
+}
+
+void playch10_state::cart_f_map(address_map &map)
+{
+ cart_map(map);
+
+ /* MMC mapper at writes to $8000-$ffff */
+ map(0x8000, 0xffff).w(FUNC(playch10_state::mmc1_rom_switch_w));
+}
+
+void playch10_state::cart_f2_map(address_map &map)
+{
+ cart_f_map(map);
+
+ /* extra ram at $6000-$6fff */
+ map(0x6000, 0x6fff).ram();
+}
+
+void playch10_state::cart_g_map(address_map &map)
+{
+ cart_map(map);
+
+ /* extra ram at $6000-$7fff */
+ map(0x6000, 0x7fff).ram();
+
+ /* MMC mapper at writes to $8000-$ffff */
+ map(0x8000, 0xffff).w(FUNC(playch10_state::gboard_rom_switch_w));
+}
+
+void playch10_state::cart_h_map(address_map &map)
+{
+ cart_map(map);
+
+ /* extra ram at $6000-$7fff */
+ map(0x6000, 0x7fff).ram();
+
+ /* Roms are banked at $8000 to $ffff */
+ map(0x8000, 0xffff).w(FUNC(playch10_state::hboard_rom_switch_w));
+}
+
+void playch10_state::cart_i_map(address_map &map)
+{
+ cart_map(map);
+
+ /* Roms are banked at $8000 to $ffff */
+ map(0x8000, 0xffff).w(FUNC(playch10_state::iboard_rom_switch_w));
+}
+
+void playch10_state::cart_k_map(address_map &map)
+{
+ cart_map(map);
+
+ /* extra ram at $6000-$7fff */
+ map(0x6000, 0x7fff).ram();
+
+ /* Roms are banked at $8000 to $bfff */
+ map(0x8000, 0xffff).w(FUNC(playch10_state::mmc1_rom_switch_w));
+}
+
/******************************************************************************/
static INPUT_PORTS_START( playch10 )
@@ -698,19 +806,81 @@ void playch10_state::playch10(machine_config &config)
RP5H01(config, m_rp5h01, 0);
}
-void playch10_state::playchnv(machine_config &config)
+void playch10_state::playch10_a(machine_config &config)
+{
+ playch10(config);
+ m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_a_map);
+}
+
+void playch10_state::playch10_b(machine_config &config)
+{
+ playch10(config);
+ m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_b_map);
+}
+
+void playch10_state::playch10_c(machine_config &config)
+{
+ playch10(config);
+ m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_c_map);
+}
+
+void playch10_state::playch10_d(machine_config &config)
+{
+ playch10(config);
+ m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_d_map);
+}
+
+void playch10_state::playch10_d2(machine_config &config)
+{
+ playch10(config);
+ m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_d2_map);
+}
+
+void playch10_state::playch10_e(machine_config &config)
{
playch10(config);
+ m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_e_map);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
}
-void playch10_state::playch10_hboard(machine_config &config)
+void playch10_state::playch10_f(machine_config &config)
+{
+ playch10(config);
+ m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_f_map);
+}
+
+void playch10_state::playch10_f2(machine_config &config)
+{
+ playch10(config);
+ m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_f2_map);
+}
+
+void playch10_state::playch10_g(machine_config &config)
{
playch10(config);
+ m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_g_map);
+}
+
+void playch10_state::playch10_h(machine_config &config)
+{
+ playch10(config);
+ m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_h_map);
MCFG_VIDEO_START_OVERRIDE(playch10_state,playch10_hboard)
MCFG_MACHINE_START_OVERRIDE(playch10_state,playch10_hboard)
}
+void playch10_state::playch10_i(machine_config &config)
+{
+ playch10(config);
+ m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_i_map);
+}
+
+void playch10_state::playch10_k(machine_config &config)
+{
+ playch10(config);
+ m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_k_map);
+}
+
/***************************************************************************
Game driver(s)
@@ -1709,83 +1879,83 @@ void playch10_state::init_ttoon()
/* YEAR NAME PARENT MACHINE INPUT STATE INIT MONITOR */
/* Standard Games */
-GAME( 1983, pc_tenis, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Tennis (PlayChoice-10)", 0 )
-GAME( 1983, pc_mario, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Mario Bros. (PlayChoice-10)", 0 )
-GAME( 1984, pc_bball, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo of America", "Baseball (PlayChoice-10)", 0 )
-GAME( 1984, pc_bfght, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Balloon Fight (PlayChoice-10)", 0 )
-GAME( 1984, pc_ebike, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Excite Bike (PlayChoice-10)", 0 )
-GAME( 1984, pc_golf, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Golf (PlayChoice-10)", 0 )
-GAME( 1985, pc_kngfu, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Irem (Nintendo license)", "Kung Fu (PlayChoice-10)", 0 )
-GAME( 1985, pc_smb, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Super Mario Bros. (PlayChoice-10)", 0 )
-GAME( 1986, pc_vball, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Volley Ball (PlayChoice-10)", 0 )
-GAME( 1987, pc_1942, playch10, playch10, playch10, playch10_state, init_pc_hrz, ROT0, "Capcom", "1942 (PlayChoice-10)", MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1983, pc_tenis, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Tennis (PlayChoice-10)", 0 )
+GAME( 1983, pc_mario, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Mario Bros. (PlayChoice-10)", 0 )
+GAME( 1984, pc_bball, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo of America", "Baseball (PlayChoice-10)", 0 )
+GAME( 1984, pc_bfght, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Balloon Fight (PlayChoice-10)", 0 )
+GAME( 1984, pc_ebike, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Excite Bike (PlayChoice-10)", 0 )
+GAME( 1984, pc_golf, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Golf (PlayChoice-10)", 0 )
+GAME( 1985, pc_kngfu, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Irem (Nintendo license)", "Kung Fu (PlayChoice-10)", 0 )
+GAME( 1985, pc_smb, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Super Mario Bros. (PlayChoice-10)", 0 )
+GAME( 1986, pc_vball, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Volley Ball (PlayChoice-10)", 0 )
+GAME( 1987, pc_1942, playch10, playch10, playch10, playch10_state, init_pc_hrz, ROT0, "Capcom", "1942 (PlayChoice-10)", MACHINE_IMPERFECT_GRAPHICS )
/* Gun Games */
-GAME( 1984, pc_duckh, playch10, playch10, playc10g, playch10_state, init_pc_gun, ROT0, "Nintendo", "Duck Hunt (PlayChoice-10)", 0 )
-GAME( 1984, pc_hgaly, playch10, playch10, playc10g, playch10_state, init_pc_gun, ROT0, "Nintendo", "Hogan's Alley (PlayChoice-10)", 0 )
-GAME( 1984, pc_wgnmn, playch10, playch10, playc10g, playch10_state, init_pc_gun, ROT0, "Nintendo", "Wild Gunman (PlayChoice-10)", 0 )
+GAME( 1984, pc_duckh, playch10, playch10, playc10g, playch10_state, init_pc_gun, ROT0, "Nintendo", "Duck Hunt (PlayChoice-10)", 0 )
+GAME( 1984, pc_hgaly, playch10, playch10, playc10g, playch10_state, init_pc_gun, ROT0, "Nintendo", "Hogan's Alley (PlayChoice-10)", 0 )
+GAME( 1984, pc_wgnmn, playch10, playch10, playc10g, playch10_state, init_pc_gun, ROT0, "Nintendo", "Wild Gunman (PlayChoice-10)", 0 )
/* A-Board Games */
-GAME( 1986, pc_grdus, playch10, playch10, playch10, playch10_state, init_pcaboard, ROT0, "Konami", "Gradius (PlayChoice-10)" , 0) // date: 860917
-GAME( 1986, pc_grdue, pc_grdus, playch10, playch10, playch10_state, init_pcaboard, ROT0, "Konami", "Gradius (PlayChoice-10, older)" , 0) // date: 860219
-GAME( 1987, pc_tkfld, playch10, playch10, playch10, playch10_state, init_pcaboard, ROT0, "Konami (Nintendo of America license)", "Track & Field (PlayChoice-10)", 0 )
+GAME( 1986, pc_grdus, playch10, playch10_a, playch10, playch10_state, init_pcaboard, ROT0, "Konami", "Gradius (PlayChoice-10)" , 0) // date: 860917
+GAME( 1986, pc_grdue, pc_grdus, playch10_a, playch10, playch10_state, init_pcaboard, ROT0, "Konami", "Gradius (PlayChoice-10, older)" , 0) // date: 860219
+GAME( 1987, pc_tkfld, playch10, playch10_a, playch10, playch10_state, init_pcaboard, ROT0, "Konami (Nintendo of America license)", "Track & Field (PlayChoice-10)", 0 )
/* B-Board Games */
-GAME( 1986, pc_pwrst, playch10, playch10, playch10, playch10_state, init_pcbboard, ROT0, "Nintendo", "Pro Wrestling (PlayChoice-10)", 0 )
-GAME( 1986, pc_trjan, playch10, playch10, playch10, playch10_state, init_pcbboard, ROT0, "Capcom USA (Nintendo of America license)", "Trojan (PlayChoice-10)", 0 )
-GAME( 1987, pc_cvnia, playch10, playch10, playch10, playch10_state, init_pcbboard, ROT0, "Konami (Nintendo of America license)", "Castlevania (PlayChoice-10)", 0 )
-GAME( 1987, pc_dbldr, playch10, playch10, playch10, playch10_state, init_pcbboard, ROT0, "Konami (Nintendo of America license)", "Double Dribble (PlayChoice-10)", 0 )
-GAME( 1987, pc_rnatk, playch10, playch10, playch10, playch10_state, init_pcbboard, ROT0, "Konami (Nintendo of America license)", "Rush'n Attack (PlayChoice-10)", 0 )
-GAME( 1987, pc_rygar, playch10, playch10, playch10, playch10_state, init_pcbboard, ROT0, "Tecmo (Nintendo of America license)", "Rygar (PlayChoice-10)", 0 )
-GAME( 1988, pc_cntra, playch10, playch10, playch10, playch10_state, init_pcbboard, ROT0, "Konami (Nintendo of America license)", "Contra (PlayChoice-10)", 0 )
+GAME( 1986, pc_pwrst, playch10, playch10_b, playch10, playch10_state, init_pcbboard, ROT0, "Nintendo", "Pro Wrestling (PlayChoice-10)", 0 )
+GAME( 1986, pc_trjan, playch10, playch10_b, playch10, playch10_state, init_pcbboard, ROT0, "Capcom USA (Nintendo of America license)", "Trojan (PlayChoice-10)", 0 )
+GAME( 1987, pc_cvnia, playch10, playch10_b, playch10, playch10_state, init_pcbboard, ROT0, "Konami (Nintendo of America license)", "Castlevania (PlayChoice-10)", 0 )
+GAME( 1987, pc_dbldr, playch10, playch10_b, playch10, playch10_state, init_pcbboard, ROT0, "Konami (Nintendo of America license)", "Double Dribble (PlayChoice-10)", 0 )
+GAME( 1987, pc_rnatk, playch10, playch10_b, playch10, playch10_state, init_pcbboard, ROT0, "Konami (Nintendo of America license)", "Rush'n Attack (PlayChoice-10)", 0 )
+GAME( 1987, pc_rygar, playch10, playch10_b, playch10, playch10_state, init_pcbboard, ROT0, "Tecmo (Nintendo of America license)", "Rygar (PlayChoice-10)", 0 )
+GAME( 1988, pc_cntra, playch10, playch10_b, playch10, playch10_state, init_pcbboard, ROT0, "Konami (Nintendo of America license)", "Contra (PlayChoice-10)", 0 )
/* C-Board Games */
-GAME( 1986, pc_goons, playch10, playch10, playch10, playch10_state, init_pccboard, ROT0, "Konami", "The Goonies (PlayChoice-10)", 0 )
+GAME( 1986, pc_goons, playch10, playch10_c, playch10, playch10_state, init_pccboard, ROT0, "Konami", "The Goonies (PlayChoice-10)", 0 )
/* D-Board Games */
-GAME( 1986, pc_mtoid, playch10, playch10, playch10, playch10_state, init_pcdboard_2, ROT0, "Nintendo", "Metroid (PlayChoice-10)", 0 )
-GAME( 1987, pc_radrc, playch10, playch10, playch10, playch10_state, init_pcdboard, ROT0, "Square", "Rad Racer (PlayChoice-10)", 0 )
+GAME( 1986, pc_mtoid, playch10, playch10_d2,playch10, playch10_state, init_pcdboard_2, ROT0, "Nintendo", "Metroid (PlayChoice-10)", 0 )
+GAME( 1987, pc_radrc, playch10, playch10_d, playch10, playch10_state, init_pcdboard, ROT0, "Square", "Rad Racer (PlayChoice-10)", 0 )
/* E-Board Games */
-GAME( 1987, pc_miket, playch10, playchnv, playch10, playch10_state, init_pceboard, ROT0, "Nintendo", "Mike Tyson's Punch-Out!! (PlayChoice-10)", MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1987, pc_miket, playch10, playch10_e, playch10, playch10_state, init_pceboard, ROT0, "Nintendo", "Mike Tyson's Punch-Out!! (PlayChoice-10)", MACHINE_IMPERFECT_GRAPHICS )
/* F-Board Games */
-GAME( 1987, pc_rcpam, playch10, playch10, playch10, playch10_state, init_pcfboard, ROT0, "Rare", "R.C. Pro-Am (PlayChoice-10)", 0 )
-GAME( 1988, pc_ddrgn, playch10, playch10, playch10, playch10_state, init_pcfboard, ROT0, "Technos Japan", "Double Dragon (PlayChoice-10)", 0 )
-GAME( 1989, pc_ngaid, playch10, playch10, playch10, playch10_state, init_pcfboard, ROT0, "Tecmo (Nintendo of America license)", "Ninja Gaiden (PlayChoice-10)", 0 )
-GAME( 1989, pc_tmnt, playch10, playch10, playch10, playch10_state, init_pcfboard, ROT0, "Konami (Nintendo of America license)", "Teenage Mutant Ninja Turtles (PlayChoice-10)", 0 )
-GAME( 1989, pc_ftqst, playch10, playch10, playch10, playch10_state, init_pcfboard, ROT0, "Sunsoft (Nintendo of America license)", "Uncle Fester's Quest: The Addams Family (PlayChoice-10)", 0 )
-GAME( 1989, pc_bstar, playch10, playch10, playch10, playch10_state, init_pcfboard_2, ROT0, "SNK (Nintendo of America license)", "Baseball Stars: Be a Champ! (PlayChoice-10)", MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1989, pc_tbowl, playch10, playch10, playch10, playch10_state, init_pcfboard, ROT0, "Tecmo (Nintendo of America license)", "Tecmo Bowl (PlayChoice-10)", 0 )
-GAME( 1990, pc_virus, pc_drmro, playch10, playch10, playch10_state, init_virus, ROT0, "Nintendo", "Virus (Dr. Mario prototype, PlayChoice-10)", 0 )
-GAME( 1990, pc_rrngr, playch10, playch10, playch10, playch10_state, init_pcfboard, ROT0, "Capcom USA (Nintendo of America license)", "Chip'n Dale: Rescue Rangers (PlayChoice-10)", 0 )
-GAME( 1990, pc_drmro, playch10, playch10, playch10, playch10_state, init_pcfboard, ROT0, "Nintendo", "Dr. Mario (PlayChoice-10)", 0 )
-GAME( 1990, pc_bload, playch10, playch10, playch10, playch10_state, init_virus, ROT0, "Jaleco (Nintendo of America license)", "Bases Loaded (Prototype, PlayChoice-10)", 0 )
-GAME( 1990, pc_ynoid, playch10, playch10, playch10, playch10_state, init_pcfboard, ROT0, "Capcom USA (Nintendo of America license)", "Yo! Noid (PlayChoice-10)", 0 )
+GAME( 1987, pc_rcpam, playch10, playch10_f, playch10, playch10_state, init_pcfboard, ROT0, "Rare", "R.C. Pro-Am (PlayChoice-10)", 0 )
+GAME( 1988, pc_ddrgn, playch10, playch10_f, playch10, playch10_state, init_pcfboard, ROT0, "Technos Japan", "Double Dragon (PlayChoice-10)", 0 )
+GAME( 1989, pc_ngaid, playch10, playch10_f, playch10, playch10_state, init_pcfboard, ROT0, "Tecmo (Nintendo of America license)", "Ninja Gaiden (PlayChoice-10)", 0 )
+GAME( 1989, pc_tmnt, playch10, playch10_f, playch10, playch10_state, init_pcfboard, ROT0, "Konami (Nintendo of America license)", "Teenage Mutant Ninja Turtles (PlayChoice-10)", 0 )
+GAME( 1989, pc_ftqst, playch10, playch10_f, playch10, playch10_state, init_pcfboard, ROT0, "Sunsoft (Nintendo of America license)", "Uncle Fester's Quest: The Addams Family (PlayChoice-10)", 0 )
+GAME( 1989, pc_bstar, playch10, playch10_f2,playch10, playch10_state, init_pcfboard_2, ROT0, "SNK (Nintendo of America license)", "Baseball Stars: Be a Champ! (PlayChoice-10)", MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1989, pc_tbowl, playch10, playch10_f, playch10, playch10_state, init_pcfboard, ROT0, "Tecmo (Nintendo of America license)", "Tecmo Bowl (PlayChoice-10)", 0 )
+GAME( 1990, pc_virus, pc_drmro, playch10_f, playch10, playch10_state, init_virus, ROT0, "Nintendo", "Virus (Dr. Mario prototype, PlayChoice-10)", 0 )
+GAME( 1990, pc_rrngr, playch10, playch10_f, playch10, playch10_state, init_pcfboard, ROT0, "Capcom USA (Nintendo of America license)", "Chip'n Dale: Rescue Rangers (PlayChoice-10)", 0 )
+GAME( 1990, pc_drmro, playch10, playch10_f, playch10, playch10_state, init_pcfboard, ROT0, "Nintendo", "Dr. Mario (PlayChoice-10)", 0 )
+GAME( 1990, pc_bload, playch10, playch10_f, playch10, playch10_state, init_virus, ROT0, "Jaleco (Nintendo of America license)", "Bases Loaded (Prototype, PlayChoice-10)", 0 )
+GAME( 1990, pc_ynoid, playch10, playch10_f, playch10, playch10_state, init_pcfboard, ROT0, "Capcom USA (Nintendo of America license)", "Yo! Noid (PlayChoice-10)", 0 )
/* G-Board Games */
-GAME( 1988, pc_smb2, playch10, playch10, playch10, playch10_state, init_pcgboard, ROT0, "Nintendo", "Super Mario Bros. 2 (PlayChoice-10)", 0 )
-GAME( 1988, pc_smb3, playch10, playch10, playch10, playch10_state, init_pcgboard, ROT0, "Nintendo", "Super Mario Bros. 3 (PlayChoice-10)", 0 )
-GAME( 1990, pc_mman3, playch10, playch10, playch10, playch10_state, init_pcgboard, ROT0, "Capcom USA (Nintendo of America license)", "Mega Man III (PlayChoice-10)", 0 )
-GAME( 1990, pc_suprc, playch10, playch10, playch10, playch10_state, init_pcgboard, ROT0, "Konami (Nintendo of America license)", "Super C (PlayChoice-10)", 0 )
-GAME( 1990, pc_tmnt2, playch10, playch10, playch10, playch10_state, init_pcgboard, ROT0, "Konami (Nintendo of America license)", "Teenage Mutant Ninja Turtles II: The Arcade Game (PlayChoice-10)", 0 )
-GAME( 1990, pc_wcup, playch10, playch10, playch10, playch10_state, init_pcgboard, ROT0, "Technos Japan (Nintendo license)", "Nintendo World Cup (PlayChoice-10)", 0 )
-GAME( 1990, pc_ngai2, playch10, playch10, playch10, playch10_state, init_pcgboard, ROT0, "Tecmo (Nintendo of America license)", "Ninja Gaiden Episode II: The Dark Sword of Chaos (PlayChoice-10)", 0 )
-GAME( 1991, pc_ngai3, playch10, playch10, playch10, playch10_state, init_pcgboard, ROT0, "Tecmo (Nintendo of America license)", "Ninja Gaiden Episode III: The Ancient Ship of Doom (PlayChoice-10)", 0 )
-GAME( 1991, pc_pwbld, playch10, playch10, playch10, playch10_state, init_pcgboard, ROT0, "Taito (Nintendo of America license)", "Power Blade (PlayChoice-10)", 0 )
-GAME( 1991, pc_rkats, playch10, playch10, playch10, playch10_state, init_pcgboard, ROT0, "Atlus (Nintendo of America license)", "Rockin' Kats (PlayChoice-10)", 0 )
-GAME( 1991, pc_ttoon, playch10, playch10, playch10, playch10_state, init_ttoon, ROT0, "Konami (Nintendo of America license)", "Tiny Toon Adventures (prototype) (PlayChoice-10)", 0 ) // Code is final USA NES version of the game, (which is MMC3C according to nes.xml, but this cart has MMC3B)
+GAME( 1988, pc_smb2, playch10, playch10_g, playch10, playch10_state, init_pcgboard, ROT0, "Nintendo", "Super Mario Bros. 2 (PlayChoice-10)", 0 )
+GAME( 1988, pc_smb3, playch10, playch10_g, playch10, playch10_state, init_pcgboard, ROT0, "Nintendo", "Super Mario Bros. 3 (PlayChoice-10)", 0 )
+GAME( 1990, pc_mman3, playch10, playch10_g, playch10, playch10_state, init_pcgboard, ROT0, "Capcom USA (Nintendo of America license)", "Mega Man III (PlayChoice-10)", 0 )
+GAME( 1990, pc_suprc, playch10, playch10_g, playch10, playch10_state, init_pcgboard, ROT0, "Konami (Nintendo of America license)", "Super C (PlayChoice-10)", 0 )
+GAME( 1990, pc_tmnt2, playch10, playch10_g, playch10, playch10_state, init_pcgboard, ROT0, "Konami (Nintendo of America license)", "Teenage Mutant Ninja Turtles II: The Arcade Game (PlayChoice-10)", 0 )
+GAME( 1990, pc_wcup, playch10, playch10_g, playch10, playch10_state, init_pcgboard, ROT0, "Technos Japan (Nintendo license)", "Nintendo World Cup (PlayChoice-10)", 0 )
+GAME( 1990, pc_ngai2, playch10, playch10_g, playch10, playch10_state, init_pcgboard, ROT0, "Tecmo (Nintendo of America license)", "Ninja Gaiden Episode II: The Dark Sword of Chaos (PlayChoice-10)", 0 )
+GAME( 1991, pc_ngai3, playch10, playch10_g, playch10, playch10_state, init_pcgboard, ROT0, "Tecmo (Nintendo of America license)", "Ninja Gaiden Episode III: The Ancient Ship of Doom (PlayChoice-10)", 0 )
+GAME( 1991, pc_pwbld, playch10, playch10_g, playch10, playch10_state, init_pcgboard, ROT0, "Taito (Nintendo of America license)", "Power Blade (PlayChoice-10)", 0 )
+GAME( 1991, pc_rkats, playch10, playch10_g, playch10, playch10_state, init_pcgboard, ROT0, "Atlus (Nintendo of America license)", "Rockin' Kats (PlayChoice-10)", 0 )
+GAME( 1991, pc_ttoon, playch10, playch10_g, playch10, playch10_state, init_ttoon, ROT0, "Konami (Nintendo of America license)", "Tiny Toon Adventures (prototype) (PlayChoice-10)", 0 ) // Code is final USA NES version of the game, (which is MMC3C according to nes.xml, but this cart has MMC3B)
/* variant with 4 screen mirror */
-GAME( 1990, pc_radr2, playch10, playch10, playch10, playch10_state, init_pcgboard_type2, ROT0, "Square (Nintendo of America license)", "Rad Racer II (PlayChoice-10)", 0 )
-GAME( 1985, pc_gntlt, playch10, playch10, playch10, playch10_state, init_pcgboard_type2, ROT0, "Atari / Tengen (Nintendo of America license)", "Gauntlet (PlayChoice-10)", MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1990, pc_radr2, playch10, playch10_g, playch10, playch10_state, init_pcgboard_type2, ROT0, "Square (Nintendo of America license)", "Rad Racer II (PlayChoice-10)", 0 )
+GAME( 1985, pc_gntlt, playch10, playch10_g, playch10, playch10_state, init_pcgboard_type2, ROT0, "Atari / Tengen (Nintendo of America license)", "Gauntlet (PlayChoice-10)", MACHINE_IMPERFECT_GRAPHICS )
/* H-Board Games */
-GAME( 1988, pc_pinbt, playch10, playch10_hboard, playch10, playch10_state, init_pchboard, ROT0, "Rare (Nintendo of America license)", "PinBot (PlayChoice-10)", MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1988, pc_pinbt, playch10, playch10_h, playch10, playch10_state, init_pchboard, ROT0, "Rare (Nintendo of America license)", "PinBot (PlayChoice-10)", MACHINE_IMPERFECT_GRAPHICS )
/* i-Board Games */
-GAME( 1989, pc_cshwk, playch10, playch10, playch10, playch10_state, init_pciboard, ROT0, "Rare (Nintendo of America license)", "Captain Sky Hawk (PlayChoice-10)", 0 )
-GAME( 1990, pc_sjetm, playch10, playch10, playch10, playch10_state, init_pciboard, ROT0, "Rare", "Solar Jetman (PlayChoice-10)", MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1989, pc_cshwk, playch10, playch10_i, playch10, playch10_state, init_pciboard, ROT0, "Rare (Nintendo of America license)", "Captain Sky Hawk (PlayChoice-10)", 0 )
+GAME( 1990, pc_sjetm, playch10, playch10_i, playch10, playch10_state, init_pciboard, ROT0, "Rare", "Solar Jetman (PlayChoice-10)", MACHINE_IMPERFECT_GRAPHICS )
/* K-Board Games */
-GAME( 1991, pc_moglf, playch10, playch10, playch10, playch10_state, init_pckboard, ROT0, "Nintendo", "Mario's Open Golf (PlayChoice-10)", 0 )
+GAME( 1991, pc_moglf, playch10, playch10_k, playch10, playch10_state, init_pckboard, ROT0, "Nintendo", "Mario's Open Golf (PlayChoice-10)", 0 )
diff --git a/src/mame/drivers/poisk1.cpp b/src/mame/drivers/poisk1.cpp
index 6e988f870e9..113486018d2 100644
--- a/src/mame/drivers/poisk1.cpp
+++ b/src/mame/drivers/poisk1.cpp
@@ -235,11 +235,11 @@ void p1_state::p1_ppi2_porta_w(uint8_t data)
program.unmap_readwrite(0xb8000, 0xbbfff, 0);
if (BIT(data, 3))
{
- program.install_readwrite_bank(0xb8000, 0xbbfff, "bank11");
+ program.install_ram(0xb8000, 0xbbfff, m_video.videoram);
}
else
{
- program.install_read_bank(0xb8000, 0xbbfff, "bank11");
+ program.install_rom(0xb8000, 0xbbfff, m_video.videoram);
program.install_write_handler(0xb8000, 0xbbfff, write8sm_delegate(*this, FUNC(p1_state::p1_vram_w)));
}
}
@@ -417,10 +417,8 @@ void p1_state::video_start()
m_video.videoram = m_video.videoram_base.get();
m_video.stride = 80;
- space.install_readwrite_bank(0xb8000, 0xbbfff, "bank11");
- machine().root_device().membank("bank11")->set_base(m_video.videoram);
- space.install_readwrite_bank(0xbc000, 0xbffff, "bank12");
- machine().root_device().membank("bank12")->set_base(m_video.videoram + 0x4000);
+ space.install_ram(0xb8000, 0xbbfff, m_video.videoram);
+ space.install_ram(0xbc000, 0xbffff, m_video.videoram + 0x4000);
}
uint32_t p1_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
@@ -593,8 +591,7 @@ void p1_state::init_poisk1()
{
address_space &program = m_maincpu->space(AS_PROGRAM);
- program.install_readwrite_bank(0, m_ram->size() - 1, "bank10");
- membank("bank10")->set_base(m_ram->pointer());
+ program.install_ram(0, m_ram->size() - 1, m_ram->pointer());
}
void p1_state::machine_start()
diff --git a/src/mame/drivers/popeye.cpp b/src/mame/drivers/popeye.cpp
index 3d240a079c7..03e395de846 100644
--- a/src/mame/drivers/popeye.cpp
+++ b/src/mame/drivers/popeye.cpp
@@ -171,11 +171,9 @@ void tnx1_state::protection_w(offs_t offset, uint8_t data)
}
-void tnx1_state::maincpu_program_map(address_map &map)
+void tnx1_state::maincpu_common_map(address_map &map)
{
map(0x0000, 0x7fff).rom().region("maincpu",0);
- map(0x8000, 0x87ff).ram().share("ramlow");
- map(0x8800, 0x8bff).nopw(); // Attempts to initialize this area with 00 on boot
map(0x8c00, 0x8e7f).ram().share("dmasource");
map(0x8e80, 0x8fff).ram().share("ramhigh");
map(0xa000, 0xa3ff).w(FUNC(tnx1_state::popeye_videoram_w)).share("videoram");
@@ -184,10 +182,17 @@ void tnx1_state::maincpu_program_map(address_map &map)
map(0xe000, 0xe001).rw(FUNC(tnx1_state::protection_r), FUNC(tnx1_state::protection_w));
}
+void tnx1_state::maincpu_program_map(address_map &map)
+{
+ maincpu_common_map(map);
+ map(0x8000, 0x87ff).ram().share("ramlow");
+ map(0x8800, 0x8bff).nopw(); // Attempts to initialize this area with 00 on boot
+}
+
void tpp2_state::maincpu_program_map(address_map &map)
{
- tpp1_state::maincpu_program_map(map);
- map(0x8000, 0x87ff).unmaprw(); // 7f (unpopulated)
+ maincpu_common_map(map);
+ // 8000-87ff is unpopulated (7f)
map(0x8800, 0x8bff).ram().share("ramlow"); // 7h
map(0xc000, 0xdfff).w(FUNC(tpp2_state::background_w));
}
diff --git a/src/mame/drivers/prestige.cpp b/src/mame/drivers/prestige.cpp
index 4cd781a74fd..e18fcaec74a 100644
--- a/src/mame/drivers/prestige.cpp
+++ b/src/mame/drivers/prestige.cpp
@@ -238,12 +238,12 @@ void prestige_state::bankswitch_w(offs_t offset, uint8_t data)
{
//cartridge memory is writable
if (data & 0x02)
- program.install_readwrite_bank(0x4000, 0x7fff, "bank2");
+ program.install_readwrite_bank(0x4000, 0x7fff, m_bank2);
else
program.unmap_write(0x4000, 0x7fff);
if (data & 0x04)
- program.install_readwrite_bank(0x8000, 0xbfff, "bank3");
+ program.install_readwrite_bank(0x8000, 0xbfff, m_bank3);
else
program.unmap_write(0x8000, 0xbfff);
}
@@ -251,7 +251,7 @@ void prestige_state::bankswitch_w(offs_t offset, uint8_t data)
{
//cartridge memory is read-only
program.unmap_write(0x4000, 0xbfff);
- program.install_read_bank(0x8000, 0xbfff, "bank3");
+ program.install_read_bank(0x8000, 0xbfff, m_bank3);
}
break;
case 6:
diff --git a/src/mame/drivers/ps2.cpp b/src/mame/drivers/ps2.cpp
index 7f5139e4c2a..3d2768e0152 100644
--- a/src/mame/drivers/ps2.cpp
+++ b/src/mame/drivers/ps2.cpp
@@ -86,9 +86,7 @@ void ps2_state::machine_start()
if (m_ram->size() > 0xa0000)
{
offs_t ram_limit = 0x100000 + m_ram->size() - 0xa0000;
- space.install_read_bank(0x100000, ram_limit - 1, "bank1");
- space.install_write_bank(0x100000, ram_limit - 1, "bank1");
- membank("bank1")->set_base(m_ram->pointer() + 0xa0000);
+ space.install_ram(0x100000, ram_limit - 1, m_ram->pointer() + 0xa0000);
}
}
diff --git a/src/mame/drivers/psychic5.cpp b/src/mame/drivers/psychic5.cpp
index 60c0562ae52..64ef71a83f3 100644
--- a/src/mame/drivers/psychic5.cpp
+++ b/src/mame/drivers/psychic5.cpp
@@ -515,7 +515,7 @@ void psychic5_state::bombsa_sound_map(address_map &map)
map(0x0000, 0xbfff).rom();
map(0xc000, 0xc7ff).ram();
map(0xe000, 0xe000).r("soundlatch", FUNC(generic_latch_8_device::read));
- map(0xf000, 0xf000).writeonly(); // Is this a confirm of some sort?
+ map(0xf000, 0xf000).nopw(); // Is this a confirm of some sort?
}
void psychic5_state::bombsa_soundport_map(address_map &map)
diff --git a/src/mame/drivers/rohga.cpp b/src/mame/drivers/rohga.cpp
index 90343e117a5..1af9b32eb22 100644
--- a/src/mame/drivers/rohga.cpp
+++ b/src/mame/drivers/rohga.cpp
@@ -202,7 +202,7 @@ void rohga_state::wizdfire_map(address_map &map)
map(0x208000, 0x208fff).rw("tilegen2", FUNC(deco16ic_device::pf1_data_r), FUNC(deco16ic_device::pf1_data_w));
map(0x20a000, 0x20afff).rw("tilegen2", FUNC(deco16ic_device::pf2_data_r), FUNC(deco16ic_device::pf2_data_w));
- map(0x20b000, 0x20b3ff).writeonly(); /* ? Always 0 written */
+ map(0x20b000, 0x20b3ff).nopw(); /* ? Always 0 written */
map(0x20c000, 0x20c7ff).ram().share("pf3_rowscroll");
map(0x20e000, 0x20e7ff).ram().share("pf4_rowscroll");
diff --git a/src/mame/drivers/rollext.cpp b/src/mame/drivers/rollext.cpp
index d7ce3409478..5aff055ec05 100644
--- a/src/mame/drivers/rollext.cpp
+++ b/src/mame/drivers/rollext.cpp
@@ -521,7 +521,7 @@ void rollext_state::memmap(address_map &map)
map(0xa0000000, 0xa00000ff).rw(FUNC(rollext_state::a0000000_r), FUNC(rollext_state::a0000000_w));
map(0xb0000000, 0xb0000007).r(FUNC(rollext_state::b0000000_r));
map(0xc0000000, 0xc03fffff).rom().region("rom1", 0);
- map(0xff000000, 0xffffffff).ram().region("rom0", 0);
+ map(0xff000000, 0xffffffff).rom().region("rom0", 0);
}
diff --git a/src/mame/drivers/scorpion.cpp b/src/mame/drivers/scorpion.cpp
index 0f2925a1d96..ea204948b1f 100644
--- a/src/mame/drivers/scorpion.cpp
+++ b/src/mame/drivers/scorpion.cpp
@@ -216,7 +216,7 @@ MACHINE_RESET_MEMBER(scorpion_state,scorpion)
m_p_ram = memregion("maincpu")->base();
m_ram_0000 = nullptr;
- m_program->install_read_bank(0x0000, 0x3fff, "bank1");
+ m_program->install_read_bank(0x0000, 0x3fff, m_bank1);
m_program->install_write_handler(0x0000, 0x3fff, write8sm_delegate(*this, FUNC(scorpion_state::scorpion_0000_w)));
m_beta->disable();
diff --git a/src/mame/drivers/segas16b.cpp b/src/mame/drivers/segas16b.cpp
index 00a43d1abe3..7e47e8b3517 100644
--- a/src/mame/drivers/segas16b.cpp
+++ b/src/mame/drivers/segas16b.cpp
@@ -10293,7 +10293,7 @@ void isgsm_state::main_bank_change_w(uint16_t data)
void isgsm_state::isgsm_map(address_map &map)
{
- map(0x000000, 0x0fffff).bankr(ISGSM_MAIN_BANK).region("bios", 0); // this area is ALWAYS read-only, even when the game is banked in
+ map(0x000000, 0x0fffff).bankr(ISGSM_MAIN_BANK); // this area is ALWAYS read-only, even when the game is banked in
map(0x200000, 0x23ffff).ram(); // used during startup for decompression
map(0x3f0000, 0x3fffff).w(FUNC(isgsm_state::rom_5704_bank_w));
map(0x400000, 0x40ffff).rw(m_segaic16vid, FUNC(segaic16_video_device::tileram_r), FUNC(segaic16_video_device::tileram_w)).share("tileram");
diff --git a/src/mame/drivers/segas32.cpp b/src/mame/drivers/segas32.cpp
index d07f28549dc..76010b63c12 100644
--- a/src/mame/drivers/segas32.cpp
+++ b/src/mame/drivers/segas32.cpp
@@ -566,10 +566,10 @@ segas32_state::segas32_state(const machine_config &mconfig, device_type type, co
: device_t(mconfig, type, tag, owner, clock)
, m_z80_shared_ram(*this,"z80_shared_ram")
, m_system32_workram(*this,"workram")
- , m_videoram(*this,"videoram", 0)
- , m_spriteram(*this,"spriteram", 0)
+ , m_videoram(*this,"videoram")
+ , m_spriteram(*this,"spriteram")
, m_soundram(*this, "soundram")
- , m_paletteram(*this,"paletteram.%u", 0, uint8_t(0))
+ , m_paletteram(*this,"paletteram.%u", 0)
, m_maincpu(*this, "maincpu")
, m_soundcpu(*this, "soundcpu")
, m_multipcm(*this, "sega")
diff --git a/src/mame/drivers/seibuspi.cpp b/src/mame/drivers/seibuspi.cpp
index c970d99cd1d..55955c765e3 100644
--- a/src/mame/drivers/seibuspi.cpp
+++ b/src/mame/drivers/seibuspi.cpp
@@ -1008,8 +1008,8 @@ void seibuspi_state::base_map(address_map &map)
map(0x00000604, 0x00000607).portr("INPUTS");
map(0x00000608, 0x0000060b).portr("EXCH");
map(0x0000060c, 0x0000060f).portr("SYSTEM");
- map(0x00200000, 0x003fffff).rom().share("share1");
- map(0xffe00000, 0xffffffff).rom().region("maincpu", 0).share("share1"); // ROM location in real-mode
+ map(0x00200000, 0x003fffff).rom().region("maincpu", 0);
+ map(0xffe00000, 0xffffffff).rom().region("maincpu", 0); // ROM location in real-mode
}
void seibuspi_state::sei252_map(address_map &map)
@@ -1119,8 +1119,8 @@ void seibuspi_state::sys386f_map(address_map &map)
map(0x00000494, 0x00000497).w(FUNC(seibuspi_state::video_dma_address_w));
map(0x00000600, 0x00000607).r("ymz", FUNC(ymz280b_device::read)).umask32(0x000000ff);
map(0x0000060c, 0x0000060f).r(FUNC(seibuspi_state::ejsakura_keyboard_r));
- map(0x00200000, 0x003fffff).rom().share("share1");
- map(0xffe00000, 0xffffffff).rom().region("maincpu", 0).share("share1"); // ROM location in real-mode
+ map(0x00200000, 0x003fffff).rom().region("maincpu", 0);
+ map(0xffe00000, 0xffffffff).rom().region("maincpu", 0); // ROM location in real-mode
}
diff --git a/src/mame/drivers/socrates.cpp b/src/mame/drivers/socrates.cpp
index 4c2da8d187e..522f7439e8d 100644
--- a/src/mame/drivers/socrates.cpp
+++ b/src/mame/drivers/socrates.cpp
@@ -139,7 +139,7 @@ protected:
optional_device<generic_slot_device> m_cart;
memory_region *m_cart_reg;
required_memory_region m_bios_reg;
- required_memory_region m_vram_reg;
+ required_shared_ptr<u8> m_vram_reg;
required_device<address_map_bank_device> m_rombank1;
optional_device<address_map_bank_device> m_rombank2; // iqunlimz only
required_device<address_map_bank_device> m_rambank1;
@@ -406,33 +406,27 @@ void socrates_state::device_timer(emu_timer &timer, device_timer_id id, int para
void socrates_state::init_socrates()
{
- uint8_t *gfx = memregion("vram")->base();
-
/* fill vram with its init powerup bit pattern, so startup has the checkerboard screen */
for (int i = 0; i < 0x10000; i++)
- gfx[i] = (((i&0x1)?0x00:0xFF)^((i&0x100)?0x00:0xff));
+ m_vram_reg[i] = (((i&0x1)?0x00:0xFF)^((i&0x100)?0x00:0xff));
m_maincpu->set_clock_scale(0.45f); /// TODO: RAM access waitstates etc. aren't emulated - slow the CPU to compensate
m_kbmcu_type = 0;
}
void socrates_state::init_iqunlimz()
{
- uint8_t *gfx = memregion("vram")->base();
-
/* fill vram with its init powerup bit pattern, so startup has the checkerboard screen... is this even right for the iqunlimz? */
for (int i = 0; i < 0x20000; i++)
- gfx[i] = (((i&0x1)?0x00:0xFF)^((i&0x100)?0x00:0xff));
+ m_vram_reg[i] = (((i&0x1)?0x00:0xFF)^((i&0x100)?0x00:0xff));
//m_maincpu->set_clock_scale(0.45f); /// TODO: RAM access waitstates etc. aren't emulated - slow the CPU to compensate
m_kbmcu_type = 1;
}
void socrates_state::init_vpainter()
{
- uint8_t *gfx = memregion("vram")->base();
-
/* fill vram with its init powerup bit pattern, so startup has the checkerboard screen */
for (int i = 0; i < 0x10000; i++)
- gfx[i] = (((i&0x1)?0x00:0xFF)^((i&0x100)?0x00:0xff));
+ m_vram_reg[i] = (((i&0x1)?0x00:0xFF)^((i&0x100)?0x00:0xff));
m_maincpu->set_clock_scale(0.45f); /// TODO: RAM access waitstates etc. aren't emulated - slow the CPU to compensate
m_kbmcu_type = 2;
}
@@ -811,7 +805,7 @@ uint32_t socrates_state::screen_update_socrates(screen_device &screen, bitmap_in
{
static const uint8_t fixedcolors[8] = {
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0xF7 };
- uint8_t const *const videoram = m_vram_reg->base();
+ uint8_t const *const videoram = m_vram_reg;
int lineoffset = 0; // if display ever tries to display data at 0xfxxx, offset line displayed by 0x1000
for (int y = 0; y < 228; y++)
{
@@ -878,12 +872,12 @@ int iqunlimz_state::get_color(int index, int y)
if (index < 8)
return m_colors[index];
else
- return m_vram_reg->as_u8(0xf000 + ((index & 0x0f) << 8) + ((m_scroll_offset + y + 1) & 0xff));
+ return m_vram_reg[0xf000 + ((index & 0x0f) << 8) + ((m_scroll_offset + y + 1) & 0xff)];
}
uint32_t iqunlimz_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- uint8_t *videoram = m_vram_reg->base();
+ uint8_t *videoram = m_vram_reg;
// bitmap layer
for (int y=0; y<224; y++)
@@ -1016,7 +1010,7 @@ void socrates_state::socrates_rombank_map(address_map &map)
void socrates_state::socrates_rambank_map(address_map &map)
{
map.unmap_value_high();
- map(0x0000, 0xffff).ram().region("vram", 0).mirror(0x30000);
+ map(0x0000, 0xffff).ram().share("vram").mirror(0x30000);
}
void socrates_state::socrates_io(address_map &map)
@@ -1065,7 +1059,7 @@ void iqunlimz_state::iqunlimz_rombank_map(address_map &map)
void iqunlimz_state::iqunlimz_rambank_map(address_map &map)
{
map.unmap_value_high();
- map(0x0000, 0x3ffff).ram().region("vram", 0);
+ map(0x0000, 0x3ffff).ram().share("vram");
}
void iqunlimz_state::iqunlimz_io(address_map &map)
@@ -1613,8 +1607,6 @@ ROM_START(socrates)
*/
ROM_LOAD("27-00817-000-000.u1", 0x00000, 0x40000, CRC(80f5aa20) SHA1(4fd1ff7f78b5dd2582d5de6f30633e4e4f34ca8f)) // Label: "(Vtech) 27-00817-000-000 // (C)1987 VIDEO TECHNOLOGY // 8811 D"
- ROM_REGION(0x10000, "vram", ROMREGION_ERASEFF) /* fill with ff, driver_init changes this to the 'correct' startup pattern */
-
ROM_REGION(0x800, "kbmcu", ROMREGION_ERASEFF)
ROM_LOAD("tmp42c40p1844.u6", 0x000, 0x200, NO_DUMP) /* keyboard IR decoder MCU */
@@ -1634,8 +1626,6 @@ ROM_START(socratfc)
/* Socrates SAITOUT (French Canadian) NTSC */
ROM_LOAD("27-00884-001-000.u1", 0x00000, 0x40000, CRC(042d9d21) SHA1(9ffc67b2721683b2536727d0592798fbc4d061cb)) // Label: "(Vtech) 27-00884-001-000 // (C)1988 VIDEO TECHNOLOGY // 8911 D"
- ROM_REGION(0x10000, "vram", ROMREGION_ERASEFF) /* fill with ff, driver_init changes this to the 'correct' startup pattern */
-
ROM_REGION(0x800, "kbmcu", ROMREGION_ERASEFF)
ROM_LOAD("tmp42c40p1844.u6", 0x000, 0x200, NO_DUMP) /* keyboard IR decoder MCU */
@@ -1657,8 +1647,6 @@ ROM_START(profweis)
ROM_SYSTEM_BIOS(1, "88", "1988")
ROMX_LOAD("27-00885-000-000.u1", 0x00000, 0x40000, CRC(fcaf8850) SHA1(a99011ee6a1ef63461c00d062278951252f117db), ROM_BIOS(1)) // Label: "(Vtech) 27-00885-000-000 // (C)1988 VIDEO TECHNOLOGY // 8844 D"
- ROM_REGION(0x10000, "vram", ROMREGION_ERASEFF) /* fill with ff, driver_init changes this to the 'correct' startup pattern */
-
ROM_REGION(0x800, "kbmcu", ROMREGION_ERASEFF)
ROM_LOAD("tmp42c40p1844.u6", 0x000, 0x200, NO_DUMP) /* keyboard IR decoder MCU */
@@ -1676,8 +1664,6 @@ ROM_START( iqunlimz )
ROM_REGION(0x1000, "kbmcu", ROMREGION_ERASEFF)
ROM_LOAD("kbmcu.bin", 0x0000, 0x1000, NO_DUMP) /* keyboard reader MCU */
-
- ROM_REGION( 0x40000, "vram", ROMREGION_ERASE )
ROM_END
ROM_START( vpainter )
@@ -1690,8 +1676,6 @@ ROM_START( vpainter )
///TODO: get rid of these regions in the status_read function or make it socrates-specific
ROM_REGION(0x2000, "speechint", ROMREGION_ERASE00) // doesn't exist? on vpainter, presumably reads as all zeroes
ROM_REGION(0x10000, "speechext", ROMREGION_ERASE00) // doesn't exist? on vpainter, presumably reads as all zeroes
-
- ROM_REGION( 0x10000, "vram", ROMREGION_ERASE )
ROM_END
/******************************************************************************
diff --git a/src/mame/drivers/srmp5.cpp b/src/mame/drivers/srmp5.cpp
index 414d65e9829..f8ea8353e7b 100644
--- a/src/mame/drivers/srmp5.cpp
+++ b/src/mame/drivers/srmp5.cpp
@@ -369,7 +369,7 @@ void srmp5_state::srmp5_mem(address_map &map)
{
map(0x00000000, 0x000fffff).ram(); //maybe 0 - 2fffff ?
map(0x002f0000, 0x002f7fff).ram();
- map(0x01000000, 0x01000003).writeonly(); // 0xaa .. watchdog ?
+ map(0x01000000, 0x01000003).nopw(); // 0xaa .. watchdog ?
map(0x01800000, 0x01800003).ram(); //?1
map(0x01800004, 0x01800007).portr("DSW1");
map(0x01800008, 0x0180000b).portr("DSW2");
@@ -392,7 +392,7 @@ void srmp5_state::srmp5_mem(address_map &map)
map(0x0a200000, 0x0a3fffff).rw(FUNC(srmp5_state::tileram_r), FUNC(srmp5_state::tileram_w));
map(0x0fc00000, 0x0fdfffff).mirror(0x10000000).rom().region("maincpu", 0);
- map(0x1eff0000, 0x1eff001f).writeonly();
+ map(0x1eff0000, 0x1eff001f).nopw();
map(0x1eff003c, 0x1eff003f).r(FUNC(srmp5_state::irq_ack_clear));
}
diff --git a/src/mame/drivers/srmp6.cpp b/src/mame/drivers/srmp6.cpp
index 351c3d67bb5..6fc96e6f31e 100644
--- a/src/mame/drivers/srmp6.cpp
+++ b/src/mame/drivers/srmp6.cpp
@@ -85,7 +85,7 @@ public:
srmp6_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_chrram(*this, "chrram"),
- m_dmaram(*this, "dmaram"),
+ m_dmaram(*this, "dmaram", 0x100, ENDIANNESS_BIG),
m_video_regs(*this, "video_regs"),
m_nile_region(*this, "nile"),
m_nile_bank(*this, "nile_bank"),
@@ -106,7 +106,7 @@ protected:
private:
std::unique_ptr<u16[]> m_tileram;
required_shared_ptr<u16> m_chrram;
- optional_shared_ptr<u16> m_dmaram;
+ memory_share_creator<u16> m_dmaram;
required_shared_ptr<u16> m_video_regs;
required_region_ptr<u8> m_nile_region;
@@ -192,7 +192,6 @@ void srmp6_state::update_palette()
void srmp6_state::video_start()
{
m_tileram = make_unique_clear<u16[]>(0x100000*16/2);
- m_dmaram.allocate(0x100/2);
// create the char set (gfx will then be updated dynamically from RAM)
m_gfxdecode->set_gfx(0, std::make_unique<gfx_element>(m_palette, tiles8x8_layout, (u8*)m_tileram.get(), 0, m_palette->entries() / 256, 0));
diff --git a/src/mame/drivers/ssv.cpp b/src/mame/drivers/ssv.cpp
index 9df235de85a..9c7180111f7 100644
--- a/src/mame/drivers/ssv.cpp
+++ b/src/mame/drivers/ssv.cpp
@@ -437,7 +437,7 @@ void ssv_state::drifto94_map(address_map &map)
{
ssv_map(map, 0xc00000);
// map(0x210002, 0x210003).nopw(); // ? 1 at the start
- map(0x400000, 0x47ffff).writeonly(); // ?
+ map(0x400000, 0x47ffff).nopw(); // ?
map(0x480000, 0x480001).rw(FUNC(ssv_state::dsp_dr_r), FUNC(ssv_state::dsp_dr_w));
map(0x482000, 0x482fff).rw(FUNC(ssv_state::dsp_r), FUNC(ssv_state::dsp_w));
map(0x483000, 0x485fff).nopw(); // ?
@@ -579,7 +579,7 @@ void ssv_state::keithlcy_map(address_map &map)
// map(0x210002, 0x210003).nopw(); // ? 1 at the start
map(0x210010, 0x210011).nopw(); //
map(0x21000e, 0x21000f).nopr(); //
- map(0x400000, 0x47ffff).writeonly(); // ?
+ map(0x400000, 0x47ffff).nopw(); // ?
}
@@ -618,7 +618,7 @@ void ssv_state::mslider_map(address_map &map)
ssv_map(map, 0xf00000);
map(0x010000, 0x01ffff).rw(FUNC(ssv_state::mainram_r), FUNC(ssv_state::mainram_w)); // RAM Mirror
// map(0x210002, 0x210003).nopw(); // ? 1 at the start
- map(0x400000, 0x47ffff).writeonly(); // ?
+ map(0x400000, 0x47ffff).nopw(); // ?
// map(0x500000, 0x500001).nopw(); // ? ff at the start
}
diff --git a/src/mame/drivers/starwars.cpp b/src/mame/drivers/starwars.cpp
index a74fed670c0..cefa10998ee 100644
--- a/src/mame/drivers/starwars.cpp
+++ b/src/mame/drivers/starwars.cpp
@@ -127,7 +127,7 @@ void starwars_state::esb_slapstic_w(address_space &space, offs_t offset, uint8_t
void starwars_state::main_map(address_map &map)
{
- map(0x0000, 0x2fff).ram().share("avg:vectorram").region("maincpu", 0);
+ map(0x0000, 0x2fff).ram().share("avg:vectorram");
map(0x3000, 0x3fff).rom(); /* vector_rom */
map(0x4300, 0x431f).portr("IN0");
map(0x4320, 0x433f).portr("IN1");
diff --git a/src/mame/drivers/subsino.cpp b/src/mame/drivers/subsino.cpp
index c8360b02604..ba1af3e54df 100644
--- a/src/mame/drivers/subsino.cpp
+++ b/src/mame/drivers/subsino.cpp
@@ -3813,8 +3813,6 @@ void subsino_state::init_stbsub()
for (uint8_t reel = 0; reel < 3; reel++)
{
- m_reel_scroll[reel].allocate(0x40);
-
m_reel_attr[reel] = std::make_unique<uint8_t[]>(0x200);
save_pointer(NAME(m_reel_attr[reel]), 0x200, reel);
@@ -3829,8 +3827,6 @@ void subsino_state::init_stisub()
for (uint8_t reel = 0; reel < 3; reel++)
{
- m_reel_scroll[reel].allocate(0x40);
-
m_reel_attr[reel] = std::make_unique<uint8_t[]>(0x200);
save_pointer(NAME(m_reel_attr[reel]), 0x200, reel);
@@ -3849,8 +3845,6 @@ void subsino_state::init_tesorone()
for (uint8_t reel = 0; reel < 3; reel++)
{
- m_reel_scroll[reel].allocate(0x40);
-
m_reel_attr[reel] = std::make_unique<uint8_t[]>(0x200);
save_pointer(NAME(m_reel_attr[reel]), 0x200, reel);
@@ -3869,8 +3863,6 @@ void subsino_state::init_tesorone230()
for (uint8_t reel = 0; reel < 3; reel++)
{
- m_reel_scroll[reel].allocate(0x40);
-
m_reel_attr[reel] = std::make_unique<uint8_t[]>(0x200);
save_pointer(NAME(m_reel_attr[reel]), 0x200, reel);
@@ -3882,8 +3874,6 @@ void subsino_state::init_mtrainnv()
{
for (uint8_t reel = 0; reel < 3; reel++)
{
- m_reel_scroll[reel].allocate(0x40);
-
m_reel_attr[reel] = std::make_unique<uint8_t[]>(0x200);
save_pointer(NAME(m_reel_attr[reel]), 0x200, reel);
diff --git a/src/mame/drivers/suna8.cpp b/src/mame/drivers/suna8.cpp
index 8b07f07e697..c5399d734f2 100644
--- a/src/mame/drivers/suna8.cpp
+++ b/src/mame/drivers/suna8.cpp
@@ -748,7 +748,7 @@ void suna8_state::brickzn11_map(address_map &map)
map(0xc140, 0xc140).r(FUNC(suna8_state::brickzn_cheats_r)); // Cheats / Debugging Inputs
- map(0xc600, 0xc7ff).rw(FUNC(suna8_state::banked_paletteram_r), FUNC(suna8_state::brickzn_banked_paletteram_w)).share("paletteram"); // Palette (Banked)
+ map(0xc600, 0xc7ff).rw(FUNC(suna8_state::banked_paletteram_r), FUNC(suna8_state::brickzn_banked_paletteram_w)); // Palette (Banked)
map(0xc800, 0xdfff).ram().share("wram"); // Work RAM
map(0xe000, 0xffff).rw(FUNC(suna8_state::suna8_banked_spriteram_r), FUNC(suna8_state::suna8_banked_spriteram_w)); // Sprites (Banked)
}
@@ -881,7 +881,7 @@ void suna8_state::brickzn_map(address_map &map)
// c144 reads?
// c14a reads?
- map(0xc600, 0xc7ff).rw(FUNC(suna8_state::banked_paletteram_r), FUNC(suna8_state::brickzn_banked_paletteram_w)).share("paletteram"); // Palette (Banked)
+ map(0xc600, 0xc7ff).rw(FUNC(suna8_state::banked_paletteram_r), FUNC(suna8_state::brickzn_banked_paletteram_w)); // Palette (Banked)
map(0xc800, 0xdfff).ram().share("wram"); // Work RAM
map(0xe000, 0xffff).rw(FUNC(suna8_state::suna8_banked_spriteram_r), FUNC(suna8_state::suna8_banked_spriteram_w)); // Sprites (Banked)
}
diff --git a/src/mame/drivers/supdrapo.cpp b/src/mame/drivers/supdrapo.cpp
index 3bb1be1cef6..f1a1564c81e 100644
--- a/src/mame/drivers/supdrapo.cpp
+++ b/src/mame/drivers/supdrapo.cpp
@@ -280,7 +280,7 @@ void supdrapo_state::sdpoker_mem(address_map &map)
{
map(0x0000, 0x4fff).rom();
map(0x5000, 0x50ff).ram().share("col_line");
- map(0x57ff, 0x57ff).ram().share("col_line");
+ map(0x5700, 0x57ff).ram().share("col_line");
map(0x5800, 0x58ff).ram().share("col_line");
map(0x6000, 0x67ff).ram(); //work ram
map(0x6800, 0x6bff).ram().share("videoram");
diff --git a/src/mame/drivers/sym1.cpp b/src/mame/drivers/sym1.cpp
index 00894483427..b64d6c20a94 100644
--- a/src/mame/drivers/sym1.cpp
+++ b/src/mame/drivers/sym1.cpp
@@ -261,22 +261,22 @@ void sym1_state::via3_a_w(uint8_t data)
if ((m_wp->read() & 0x01) && !(data & 0x01)) {
cpu0space.nop_write(0xa600, 0xa67f);
} else {
- cpu0space.install_write_bank(0xa600, 0xa67f, "bank5");
+ cpu0space.install_write_bank(0xa600, 0xa67f, membank("bank5"));
}
if ((m_wp->read() & 0x02) && !(data & 0x02)) {
cpu0space.nop_write(0x0400, 0x07ff);
} else {
- cpu0space.install_write_bank(0x0400, 0x07ff, "bank2");
+ cpu0space.install_write_bank(0x0400, 0x07ff, membank("bank2"));
}
if ((m_wp->read() & 0x04) && !(data & 0x04)) {
cpu0space.nop_write(0x0800, 0x0bff);
} else {
- cpu0space.install_write_bank(0x0800, 0x0bff, "bank3");
+ cpu0space.install_write_bank(0x0800, 0x0bff, membank("bank3"));
}
if ((m_wp->read() & 0x08) && !(data & 0x08)) {
cpu0space.nop_write(0x0c00, 0x0fff);
} else {
- cpu0space.install_write_bank(0x0c00, 0x0fff, "bank4");
+ cpu0space.install_write_bank(0x0c00, 0x0fff, membank("bank4"));
}
}
@@ -296,9 +296,8 @@ void sym1_state::machine_reset()
{
// make 0xf800 to 0xffff point to the last half of the monitor ROM
// so that the CPU can find its reset vectors
- m_maincpu->space(AS_PROGRAM).install_read_bank(0xf800, 0xffff, "bank1");
+ m_maincpu->space(AS_PROGRAM).install_rom(0xf800, 0xffff, m_monitor + 0x800);
m_maincpu->space(AS_PROGRAM).nop_write(0xf800, 0xffff);
- membank("bank1")->set_base(m_monitor + 0x800);
m_maincpu->reset();
}
diff --git a/src/mame/drivers/symbolics.cpp b/src/mame/drivers/symbolics.cpp
index d8a39c6df7c..42471abfb01 100644
--- a/src/mame/drivers/symbolics.cpp
+++ b/src/mame/drivers/symbolics.cpp
@@ -256,7 +256,7 @@ void symbolics_state::m68k_mem(address_map &map)
// 0x00c000-0x00ffff is open bus but decoded/auto-DTACKed, does not cause bus error
map(0x010000, 0x01bfff).rom();
// 0x01c000-0x01ffff is open bus but decoded/auto-DTACKed, does not cause bus error
- map(0x020000, 0x03ffff).ram().region("fepdram", 0); /* Local FEP ram seems to be here? there are 18 mcm4164s on the pcb which probably map here, plus 2 parity bits? */
+ map(0x020000, 0x03ffff).ram().share("fepdram"); /* Local FEP ram seems to be here? there are 18 mcm4164s on the pcb which probably map here, plus 2 parity bits? */
//map(0x020000, 0x03ffff).rw(FUNC(symbolics_state::ram_parity_hack_r), FUNC(symbolics_state::ram_parity_hack_w));
//map(0x020002, 0x03ffff).ram().region("fepdram", 0); /* Local FEP ram seems to be here? there are 18 mcm4164s on the pcb which probably map here, plus 2 parity bits? */
// 2x AM9128-10PC 2048x8 SRAMs @F7 and @G7 map somewhere
@@ -392,7 +392,6 @@ ROM_START( s3670 )
LBARB.4 @I18 <- 4887235 page 625 has LBARB rev1, pal16l8
SERCTL.4 @K6 <- 4887235 page 620 has SERCTL rev4, pal16l8
*/
- ROM_REGION16_BE( 0x20000, "fepdram", ROMREGION_ERASE00 )
ROM_END
diff --git a/src/mame/drivers/tandy2k.cpp b/src/mame/drivers/tandy2k.cpp
index 85a1e3f3d01..0c614cee7e0 100644
--- a/src/mame/drivers/tandy2k.cpp
+++ b/src/mame/drivers/tandy2k.cpp
@@ -919,7 +919,6 @@ void tandy2k_state::machine_start()
program.install_ram(0x00000, ram_size - 1, ram);
- m_char_ram.allocate(0x1000);
m_mouse_timer = timer_alloc(MOUS_TIMER);
m_mcu_delay = timer_alloc(MCU_DELAY);
diff --git a/src/mame/drivers/tceptor.cpp b/src/mame/drivers/tceptor.cpp
index dd8941b0263..17dc43f0ae6 100644
--- a/src/mame/drivers/tceptor.cpp
+++ b/src/mame/drivers/tceptor.cpp
@@ -147,7 +147,7 @@ void tceptor_state::m6502_a_map(address_map &map)
map(0x0300, 0x030f).ram();
map(0x2000, 0x2001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
map(0x3000, 0x30ff).ram().share("share3");
- map(0x3c01, 0x3c01).writeonly();
+ map(0x3c01, 0x3c01).nopw();
map(0x8000, 0xffff).rom();
}
@@ -157,7 +157,7 @@ void tceptor_state::m6502_b_map(address_map &map)
map(0x0000, 0x00ff).ram().share("share2");
map(0x0100, 0x01ff).ram();
map(0x4000, 0x4000).w("dac", FUNC(dac_byte_interface::data_w));
- map(0x5000, 0x5000).writeonly(); // voice ctrl??
+ map(0x5000, 0x5000).nopw(); // voice ctrl??
map(0x8000, 0xffff).rom();
}
@@ -167,7 +167,7 @@ void tceptor_state::m68k_map(address_map &map)
map(0x000000, 0x00ffff).rom(); // M68K ERROR 1
map(0x100000, 0x10ffff).rom(); // not sure
map(0x200000, 0x203fff).ram(); // M68K ERROR 0
- map(0x300000, 0x300001).writeonly();
+ map(0x300000, 0x300001).nopw();
map(0x400000, 0x4001ff).writeonly().share("sprite_ram");
map(0x500000, 0x51ffff).w(m_c45_road, FUNC(namco_c45_road_device::write));
map(0x600000, 0x600001).w(FUNC(tceptor_state::m68k_irq_enable_w)); // not sure
diff --git a/src/mame/drivers/tempest.cpp b/src/mame/drivers/tempest.cpp
index 76b0615edf6..a0717778fe6 100644
--- a/src/mame/drivers/tempest.cpp
+++ b/src/mame/drivers/tempest.cpp
@@ -488,7 +488,7 @@ void tempest_state::main_map(address_map &map)
map(0x0c00, 0x0c00).portr("IN0");
map(0x0d00, 0x0d00).portr("DSW1");
map(0x0e00, 0x0e00).portr("DSW2");
- map(0x2000, 0x2fff).ram().share("avg:vectorram").region("maincpu", 0x2000);
+ map(0x2000, 0x2fff).ram().share("avg:vectorram");
map(0x3000, 0x3fff).rom();
map(0x4000, 0x4000).w(FUNC(tempest_state::tempest_coin_w));
map(0x4800, 0x4800).w(m_avg, FUNC(avg_tempest_device::go_w));
diff --git a/src/mame/drivers/tigeroad.cpp b/src/mame/drivers/tigeroad.cpp
index 1c8292e94fc..aeae6eacef4 100644
--- a/src/mame/drivers/tigeroad.cpp
+++ b/src/mame/drivers/tigeroad.cpp
@@ -110,9 +110,8 @@ void tigeroad_state::main_map(address_map &map)
map(0xfe4002, 0xfe4002).w("soundlatch", FUNC(generic_latch_8_device::write));
map(0xfe4004, 0xfe4005).portr("DSW");
map(0xfe8000, 0xfe8003).w(FUNC(tigeroad_state::scroll_w));
- map(0xfe800e, 0xfe800f).writeonly(); // fe800e = watchdog or IRQ acknowledge
+ map(0xfe800e, 0xfe800f).nopw(); // fe800e = watchdog or IRQ acknowledge
map(0xfec000, 0xfec7ff).ram().w(FUNC(tigeroad_state::videoram_w)).share("videoram");
-
map(0xff8000, 0xff87ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0xffc000, 0xffffff).ram().share("ram16");
}
diff --git a/src/mame/drivers/tiki100.cpp b/src/mame/drivers/tiki100.cpp
index 3c1b19f2f1a..cdd6b00546e 100644
--- a/src/mame/drivers/tiki100.cpp
+++ b/src/mame/drivers/tiki100.cpp
@@ -681,9 +681,6 @@ void tiki100_state::machine_start()
{
m_leds.resolve();
- /* allocate video RAM */
- m_video_ram.allocate(TIKI100_VIDEORAM_SIZE);
-
/* register for state saving */
save_item(NAME(m_rome));
save_item(NAME(m_vire));
diff --git a/src/mame/drivers/timex.cpp b/src/mame/drivers/timex.cpp
index 5c6c94d7344..cec0c0bc2b8 100644
--- a/src/mame/drivers/timex.cpp
+++ b/src/mame/drivers/timex.cpp
@@ -228,7 +228,7 @@ void timex_state::ts2068_update_memory()
{
if (m_port_ff_data & 0x80)
{
- space.install_read_bank(0x0000, 0x1fff, "bank1");
+ space.install_read_bank(0x0000, 0x1fff, membank("bank1"));
space.unmap_write(0x0000, 0x1fff);
membank("bank1")->set_base(ExROM);
logerror("0000-1fff EXROM\n");
@@ -238,9 +238,9 @@ void timex_state::ts2068_update_memory()
if (m_dock_cart_type == TIMEX_CART_DOCK)
{
membank("bank1")->set_base(DOCK);
- space.install_read_bank(0x0000, 0x1fff, "bank1");
+ space.install_read_bank(0x0000, 0x1fff, membank("bank1"));
if (m_ram_chunks & 0x01)
- space.install_write_bank(0x0000, 0x1fff, "bank9");
+ space.install_write_bank(0x0000, 0x1fff, membank("bank9"));
else
space.unmap_write(0x0000, 0x1fff);
@@ -258,7 +258,7 @@ void timex_state::ts2068_update_memory()
{
ChosenROM = memregion("maincpu")->base() + 0x010000;
membank("bank1")->set_base(ChosenROM);
- space.install_read_bank(0x0000, 0x1fff, "bank1");
+ space.install_read_bank(0x0000, 0x1fff, membank("bank1"));
space.unmap_write(0x0000, 0x1fff);
logerror("0000-1fff HOME\n");
}
@@ -268,7 +268,7 @@ void timex_state::ts2068_update_memory()
if (m_port_ff_data & 0x80)
{
membank("bank2")->set_base(ExROM);
- space.install_read_bank(0x2000, 0x3fff, "bank2");
+ space.install_read_bank(0x2000, 0x3fff, membank("bank2"));
space.unmap_write(0x2000, 0x3fff);
logerror("2000-3fff EXROM\n");
}
@@ -277,9 +277,9 @@ void timex_state::ts2068_update_memory()
if (m_dock_cart_type == TIMEX_CART_DOCK)
{
membank("bank2")->set_base(DOCK+0x2000);
- space.install_read_bank(0x2000, 0x3fff, "bank2");
+ space.install_read_bank(0x2000, 0x3fff, membank("bank2"));
if (m_ram_chunks & 0x02)
- space.install_write_bank(0x2000, 0x3fff, "bank10");
+ space.install_write_bank(0x2000, 0x3fff, membank("bank10"));
else
space.unmap_write(0x2000, 0x3fff);
@@ -296,7 +296,7 @@ void timex_state::ts2068_update_memory()
{
ChosenROM = memregion("maincpu")->base() + 0x012000;
membank("bank2")->set_base(ChosenROM);
- space.install_read_bank(0x2000, 0x3fff, "bank2");
+ space.install_read_bank(0x2000, 0x3fff, membank("bank2"));
space.unmap_write(0x2000, 0x3fff);
logerror("2000-3fff HOME\n");
}
@@ -306,7 +306,7 @@ void timex_state::ts2068_update_memory()
if (m_port_ff_data & 0x80)
{
membank("bank3")->set_base(ExROM);
- space.install_read_bank(0x4000, 0x5fff, "bank3");
+ space.install_read_bank(0x4000, 0x5fff, membank("bank3"));
space.unmap_write(0x4000, 0x5fff);
logerror("4000-5fff EXROM\n");
}
@@ -315,9 +315,9 @@ void timex_state::ts2068_update_memory()
if (m_dock_cart_type == TIMEX_CART_DOCK)
{
membank("bank3")->set_base(DOCK+0x4000);
- space.install_read_bank(0x4000, 0x5fff, "bank3");
+ space.install_read_bank(0x4000, 0x5fff, membank("bank3"));
if (m_ram_chunks & 0x04)
- space.install_write_bank(0x4000, 0x5fff, "bank11");
+ space.install_write_bank(0x4000, 0x5fff, membank("bank11"));
else
space.unmap_write(0x4000, 0x5fff);
}
@@ -333,8 +333,8 @@ void timex_state::ts2068_update_memory()
{
membank("bank3")->set_base(messram);
membank("bank11")->set_base(messram);
- space.install_read_bank(0x4000, 0x5fff, "bank3");
- space.install_write_bank(0x4000, 0x5fff, "bank11");
+ space.install_read_bank(0x4000, 0x5fff, membank("bank3"));
+ space.install_write_bank(0x4000, 0x5fff, membank("bank11"));
logerror("4000-5fff RAM\n");
}
@@ -343,7 +343,7 @@ void timex_state::ts2068_update_memory()
if (m_port_ff_data & 0x80)
{
membank("bank4")->set_base(ExROM);
- space.install_read_bank(0x6000, 0x7fff, "bank4");
+ space.install_read_bank(0x6000, 0x7fff, membank("bank4"));
space.unmap_write(0x6000, 0x7fff);
logerror("6000-7fff EXROM\n");
}
@@ -352,9 +352,9 @@ void timex_state::ts2068_update_memory()
if (m_dock_cart_type == TIMEX_CART_DOCK)
{
membank("bank4")->set_base(DOCK+0x6000);
- space.install_read_bank(0x6000, 0x7fff, "bank4");
+ space.install_read_bank(0x6000, 0x7fff, membank("bank4"));
if (m_ram_chunks & 0x08)
- space.install_write_bank(0x6000, 0x7fff, "bank12");
+ space.install_write_bank(0x6000, 0x7fff, membank("bank12"));
else
space.unmap_write(0x6000, 0x7fff);
}
@@ -370,8 +370,8 @@ void timex_state::ts2068_update_memory()
{
membank("bank4")->set_base(messram + 0x2000);
membank("bank12")->set_base(messram + 0x2000);
- space.install_read_bank(0x6000, 0x7fff, "bank4");
- space.install_write_bank(0x6000, 0x7fff, "bank12");
+ space.install_read_bank(0x6000, 0x7fff, membank("bank4"));
+ space.install_write_bank(0x6000, 0x7fff, membank("bank12"));
logerror("6000-7fff RAM\n");
}
@@ -380,7 +380,7 @@ void timex_state::ts2068_update_memory()
if (m_port_ff_data & 0x80)
{
membank("bank5")->set_base(ExROM);
- space.install_read_bank(0x8000, 0x9fff, "bank5");
+ space.install_read_bank(0x8000, 0x9fff, membank("bank5"));
space.unmap_write(0x8000, 0x9fff);
logerror("8000-9fff EXROM\n");
}
@@ -389,9 +389,9 @@ void timex_state::ts2068_update_memory()
if (m_dock_cart_type == TIMEX_CART_DOCK)
{
membank("bank5")->set_base(DOCK+0x8000);
- space.install_read_bank(0x8000, 0x9fff,"bank5");
+ space.install_read_bank(0x8000, 0x9fff,membank("bank5"));
if (m_ram_chunks & 0x10)
- space.install_write_bank(0x8000, 0x9fff,"bank13");
+ space.install_write_bank(0x8000, 0x9fff,membank("bank13"));
else
space.unmap_write(0x8000, 0x9fff);
}
@@ -407,8 +407,8 @@ void timex_state::ts2068_update_memory()
{
membank("bank5")->set_base(messram + 0x4000);
membank("bank13")->set_base(messram + 0x4000);
- space.install_read_bank(0x8000, 0x9fff,"bank5");
- space.install_write_bank(0x8000, 0x9fff,"bank13");
+ space.install_read_bank(0x8000, 0x9fff,membank("bank5"));
+ space.install_write_bank(0x8000, 0x9fff,membank("bank13"));
logerror("8000-9fff RAM\n");
}
@@ -417,7 +417,7 @@ void timex_state::ts2068_update_memory()
if (m_port_ff_data & 0x80)
{
membank("bank6")->set_base(ExROM);
- space.install_read_bank(0xa000, 0xbfff, "bank6");
+ space.install_read_bank(0xa000, 0xbfff, membank("bank6"));
space.unmap_write(0xa000, 0xbfff);
logerror("a000-bfff EXROM\n");
}
@@ -426,9 +426,9 @@ void timex_state::ts2068_update_memory()
if (m_dock_cart_type == TIMEX_CART_DOCK)
{
membank("bank6")->set_base(DOCK+0xa000);
- space.install_read_bank(0xa000, 0xbfff, "bank6");
+ space.install_read_bank(0xa000, 0xbfff, membank("bank6"));
if (m_ram_chunks & 0x20)
- space.install_write_bank(0xa000, 0xbfff, "bank14");
+ space.install_write_bank(0xa000, 0xbfff, membank("bank14"));
else
space.unmap_write(0xa000, 0xbfff);
@@ -445,8 +445,8 @@ void timex_state::ts2068_update_memory()
{
membank("bank6")->set_base(messram + 0x6000);
membank("bank14")->set_base(messram + 0x6000);
- space.install_read_bank(0xa000, 0xbfff, "bank6");
- space.install_write_bank(0xa000, 0xbfff, "bank14");
+ space.install_read_bank(0xa000, 0xbfff, membank("bank6"));
+ space.install_write_bank(0xa000, 0xbfff, membank("bank14"));
logerror("a000-bfff RAM\n");
}
@@ -455,7 +455,7 @@ void timex_state::ts2068_update_memory()
if (m_port_ff_data & 0x80)
{
membank("bank7")->set_base(ExROM);
- space.install_read_bank(0xc000, 0xdfff, "bank7");
+ space.install_read_bank(0xc000, 0xdfff, membank("bank7"));
space.unmap_write(0xc000, 0xdfff);
logerror("c000-dfff EXROM\n");
}
@@ -464,9 +464,9 @@ void timex_state::ts2068_update_memory()
if (m_dock_cart_type == TIMEX_CART_DOCK)
{
membank("bank7")->set_base(DOCK+0xc000);
- space.install_read_bank(0xc000, 0xdfff, "bank7");
+ space.install_read_bank(0xc000, 0xdfff, membank("bank7"));
if (m_ram_chunks & 0x40)
- space.install_write_bank(0xc000, 0xdfff, "bank15");
+ space.install_write_bank(0xc000, 0xdfff, membank("bank15"));
else
space.unmap_write(0xc000, 0xdfff);
}
@@ -482,8 +482,8 @@ void timex_state::ts2068_update_memory()
{
membank("bank7")->set_base(messram + 0x8000);
membank("bank15")->set_base(messram + 0x8000);
- space.install_read_bank(0xc000, 0xdfff, "bank7");
- space.install_write_bank(0xc000, 0xdfff, "bank15");
+ space.install_read_bank(0xc000, 0xdfff, membank("bank7"));
+ space.install_write_bank(0xc000, 0xdfff, membank("bank15"));
logerror("c000-dfff RAM\n");
}
@@ -492,7 +492,7 @@ void timex_state::ts2068_update_memory()
if (m_port_ff_data & 0x80)
{
membank("bank8")->set_base(ExROM);
- space.install_read_bank(0xe000, 0xffff, "bank8");
+ space.install_read_bank(0xe000, 0xffff, membank("bank8"));
space.unmap_write(0xe000, 0xffff);
logerror("e000-ffff EXROM\n");
}
@@ -501,9 +501,9 @@ void timex_state::ts2068_update_memory()
if (m_dock_cart_type == TIMEX_CART_DOCK)
{
membank("bank8")->set_base(DOCK+0xe000);
- space.install_read_bank(0xe000, 0xffff, "bank8");
+ space.install_read_bank(0xe000, 0xffff, membank("bank8"));
if (m_ram_chunks & 0x80)
- space.install_write_bank(0xe000, 0xffff, "bank16");
+ space.install_write_bank(0xe000, 0xffff, membank("bank16"));
else
space.unmap_write(0xe000, 0xffff);
}
@@ -519,8 +519,8 @@ void timex_state::ts2068_update_memory()
{
membank("bank8")->set_base(messram + 0xa000);
membank("bank16")->set_base(messram + 0xa000);
- space.install_read_bank(0xe000, 0xffff, "bank8");
- space.install_write_bank(0xe000, 0xffff, "bank16");
+ space.install_read_bank(0xe000, 0xffff, membank("bank8"));
+ space.install_write_bank(0xe000, 0xffff, membank("bank16"));
logerror("e000-ffff RAM\n");
}
}
diff --git a/src/mame/drivers/tmc1800.cpp b/src/mame/drivers/tmc1800.cpp
index ed0209da6e6..bb4265cccb9 100644
--- a/src/mame/drivers/tmc1800.cpp
+++ b/src/mame/drivers/tmc1800.cpp
@@ -703,8 +703,6 @@ void tmc2000_state::machine_start()
{
m_led.resolve();
- m_colorram.allocate(TMC2000_COLORRAM_SIZE);
-
// randomize color RAM contents
for (uint16_t addr = 0; addr < TMC2000_COLORRAM_SIZE; addr++)
{
diff --git a/src/mame/drivers/trackfld.cpp b/src/mame/drivers/trackfld.cpp
index f2907d5e106..fd86ce3024f 100644
--- a/src/mame/drivers/trackfld.cpp
+++ b/src/mame/drivers/trackfld.cpp
@@ -1654,14 +1654,10 @@ void trackfld_state::init_atlantol()
space.nop_write(0x1000, 0x1000);
/* unmapped areas read as ROM */
- space.install_read_bank(0x0000, 0x11ff, "bank10");
- space.install_read_bank(0x1380, 0x17ff, "bank11");
- space.install_read_bank(0x2000, 0x27ff, "bank12");
- space.install_read_bank(0x4000, 0x5fff, "bank13");
- membank("bank10")->set_base(&rom[0x0000]);
- membank("bank11")->set_base(&rom[0x1380]);
- membank("bank12")->set_base(&rom[0x2000]);
- membank("bank13")->set_base(&rom[0x4000]);
+ space.install_rom(0x0000, 0x11ff, &rom[0x0000]);
+ space.install_rom(0x1380, 0x17ff, &rom[0x1380]);
+ space.install_rom(0x2000, 0x27ff, &rom[0x2000]);
+ space.install_rom(0x4000, 0x5fff, &rom[0x4000]);
}
void trackfld_state::init_mastkin()
diff --git a/src/mame/drivers/triforce.cpp b/src/mame/drivers/triforce.cpp
index cfc1f76b91b..78619cab99b 100644
--- a/src/mame/drivers/triforce.cpp
+++ b/src/mame/drivers/triforce.cpp
@@ -507,7 +507,7 @@ void triforce_state::gc_map(address_map &map)
map(0x00000000, 0x017fffff).ram();
map(0x0c003000, 0x0c003fff).rw(FUNC(triforce_state::gc_pi_r), FUNC(triforce_state::gc_pi_w));
map(0x0c006800, 0x0c0068ff).rw(FUNC(triforce_state::gc_exi_r), FUNC(triforce_state::gc_exi_w));
- map(0xfff00000, 0xffffffff).rom().region("maincpu", 0).share("share2"); /* Program ROM */
+ map(0xfff00000, 0xffffffff).rom().region("maincpu", 0); /* Program ROM */
}
diff --git a/src/mame/drivers/trs80m2.cpp b/src/mame/drivers/trs80m2.cpp
index 6b971840d1f..c701e22317c 100644
--- a/src/mame/drivers/trs80m2.cpp
+++ b/src/mame/drivers/trs80m2.cpp
@@ -437,8 +437,6 @@ WRITE_LINE_MEMBER( trs80m2_state::vsync_w )
void trs80m2_state::video_start()
{
- // allocate memory
- m_video_ram.allocate(0x800);
}
uint32_t trs80m2_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
diff --git a/src/mame/drivers/tsamurai.cpp b/src/mame/drivers/tsamurai.cpp
index f8f4ca3c4fe..0d2e034f607 100644
--- a/src/mame/drivers/tsamurai.cpp
+++ b/src/mame/drivers/tsamurai.cpp
@@ -355,9 +355,9 @@ void tsamurai_state::vsgongf_map(address_map &map)
map(0xe400, 0xe43f).ram().share("spriteram");
map(0xe440, 0xe47b).ram();
map(0xe800, 0xe800).w(FUNC(tsamurai_state::vsgongf_sound_command_w));
- map(0xec00, 0xec06).writeonly();
+ map(0xec00, 0xec06).nopw();
map(0xf000, 0xf000).w(FUNC(tsamurai_state::vsgongf_color_w));
- map(0xf400, 0xf400).writeonly(); /* vreg? always 0 */
+ map(0xf400, 0xf400).nopw(); /* vreg? always 0 */
map(0xf800, 0xf800).portr("P1");
map(0xf801, 0xf801).portr("P2");
map(0xf802, 0xf802).portr("SYSTEM");
diff --git a/src/mame/drivers/tubep.cpp b/src/mame/drivers/tubep.cpp
index 70e3886bced..ff34c23d8ed 100644
--- a/src/mame/drivers/tubep.cpp
+++ b/src/mame/drivers/tubep.cpp
@@ -193,7 +193,7 @@ void tubep_state::tubep_second_map(address_map &map)
map(0xc000, 0xc000).w(FUNC(tubep_state::tubep_background_c000_w));
map(0xe000, 0xe7ff).ram().share("share1"); /* 6116 #1 */
map(0xe800, 0xebff).writeonly().share("backgroundram"); /* row of 8 x 2147 RAMs on main PCB */
- map(0xf000, 0xf3ff).writeonly().share("sprite_color"); /* sprites color lookup table */
+ map(0xf000, 0xf3ff).lw8([this](offs_t off, u8 data) { m_sprite_colorsharedram[off] = data; }, "sc_w"); /* sprites color lookup table */
map(0xf800, 0xffff).ram().share("share2"); /* program copies here part of shared ram ?? */
}
diff --git a/src/mame/drivers/tumbleb.cpp b/src/mame/drivers/tumbleb.cpp
index e1046c28b64..c66dcf9aa1f 100644
--- a/src/mame/drivers/tumbleb.cpp
+++ b/src/mame/drivers/tumbleb.cpp
@@ -638,7 +638,7 @@ void tumbleb_state::tumblepopb_main_map(address_map &map)
map(0x120000, 0x123fff).ram().share("mainram");
map(0x140000, 0x1407ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x160000, 0x1607ff).ram().share("spriteram"); /* Bootleg sprite buffer */
- map(0x160800, 0x160807).writeonly(); /* writes past the end of spriteram */
+ map(0x160800, 0x160807).nopw(); /* writes past the end of spriteram */
map(0x180000, 0x18000f).r(FUNC(tumbleb_state::tumblepopb_controls_r));
map(0x18000c, 0x18000d).nopw();
map(0x1a0000, 0x1a07ff).ram();
@@ -697,7 +697,7 @@ void tumbleb_state::unico_base_map(address_map &map)
map(0x100005, 0x100005).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x140000, 0x140fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x160000, 0x1607ff).ram().share("spriteram"); /* sprites */
- map(0x160800, 0x16080f).writeonly(); /* goes slightly past the end of spriteram? */
+ map(0x160800, 0x16080f).nopw(); /* goes slightly past the end of spriteram? */
map(0x180000, 0x18000f).r(FUNC(tumbleb_state::tumblepopb_controls_r));
map(0x18000c, 0x18000d).nopw();
map(0x1a0000, 0x1a07ff).ram();
@@ -783,7 +783,7 @@ void tumbleb_state::pangpang_main_map(address_map &map)
map(0x120000, 0x123fff).ram().share("mainram");
map(0x140000, 0x1407ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x160000, 0x1607ff).ram().share("spriteram"); /* Bootleg sprite buffer */
- map(0x160800, 0x160807).writeonly(); // writes past the end of spriteram
+ map(0x160800, 0x160807).nopw(); // writes past the end of spriteram
map(0x180000, 0x18000f).r(FUNC(tumbleb_state::tumblepopb_controls_r));
map(0x1a0000, 0x1a07ff).ram();
map(0x300000, 0x30000f).w(FUNC(tumbleb_state::tumblepb_control_0_w));
@@ -886,7 +886,7 @@ void tumbleb_state::jumpkids_main_map(address_map &map)
map(0x120000, 0x123fff).ram().share("mainram");
map(0x140000, 0x1407ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x160000, 0x1607ff).ram().share("spriteram"); /* Bootleg sprite buffer */
- map(0x160800, 0x160807).writeonly(); /* writes past the end of spriteram */
+ map(0x160800, 0x160807).nopw(); /* writes past the end of spriteram */
map(0x180000, 0x18000f).r(FUNC(tumbleb_state::tumblepopb_controls_r));
map(0x18000c, 0x18000d).nopw();
map(0x1a0000, 0x1a07ff).ram();
diff --git a/src/mame/drivers/tunhunt.cpp b/src/mame/drivers/tunhunt.cpp
index 5ed459098b3..3e47d54545f 100644
--- a/src/mame/drivers/tunhunt.cpp
+++ b/src/mame/drivers/tunhunt.cpp
@@ -134,13 +134,13 @@ void tunhunt_state::main_map(address_map &map)
{
map.global_mask(0x7fff);
map(0x0000, 0x03ff).ram().share("workram"); /* Work RAM */
- map(0x1080, 0x10ff).writeonly();
- map(0x1200, 0x12ff).writeonly();
- map(0x1400, 0x14ff).writeonly();
+ map(0x1080, 0x10ff).nopw();
+ map(0x1200, 0x12ff).nopw();
+ map(0x1400, 0x14ff).nopw();
map(0x1600, 0x160f).writeonly().share("paletteram"); /* COLRAM (D7-D4 SHADE; D3-D0 COLOR) */
- map(0x1800, 0x1800).writeonly(); /* SHEL0H */
- map(0x1a00, 0x1a00).writeonly(); /* SHEL1H */
- map(0x1c00, 0x1c00).writeonly(); /* MOBJV */
+ map(0x1800, 0x1800).nopw(); /* SHEL0H */
+ map(0x1a00, 0x1a00).nopw(); /* SHEL1H */
+ map(0x1c00, 0x1c00).nopw(); /* MOBJV */
map(0x1e00, 0x1eff).w(FUNC(tunhunt_state::videoram_w)).share("videoram"); /* ALPHA */
map(0x2000, 0x2000).nopw(); /* watchdog */
map(0x2000, 0x2007).r(FUNC(tunhunt_state::button_r));
diff --git a/src/mame/drivers/twin16.cpp b/src/mame/drivers/twin16.cpp
index 5644a0883b9..1916b5d66c5 100644
--- a/src/mame/drivers/twin16.cpp
+++ b/src/mame/drivers/twin16.cpp
@@ -198,6 +198,13 @@ void twin16_state::main_map(address_map &map)
map(0x140000, 0x143fff).ram().share("spriteram");
}
+void cuebrickj_state::cuebrickj_main_map(address_map &map)
+{
+ main_map(map);
+ map(0x0b0000, 0x0b03ff).bankrw("nvrambank");
+ map(0x0b0400, 0x0b0400).w(FUNC(cuebrickj_state::nvram_bank_w));
+}
+
void twin16_state::sub_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
@@ -763,6 +770,7 @@ void twin16_state::miaj(machine_config &config)
void cuebrickj_state::cuebrickj(machine_config &config)
{
twin16(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cuebrickj_state::cuebrickj_main_map);
m_screen->set_raw(XTAL(18'432'000)/2, 576, 1*8, 39*8, 264, 2*8, 30*8);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
}
@@ -1252,11 +1260,6 @@ void cuebrickj_state::init_cuebrickj()
{
init_twin16();
- address_space &space = m_maincpu->space(AS_PROGRAM);
-
- space.install_readwrite_bank(0x0b0000, 0x0b03ff, "nvrambank");
- space.install_write_handler( 0x0b0400, 0x0b0401, write8smo_delegate(*this, FUNC(cuebrickj_state::nvram_bank_w)), 0xff00);
-
membank("nvrambank")->configure_entries(0, 0x20, m_nvram, 0x400);
subdevice<nvram_device>("nvram")->set_base(m_nvram, sizeof(m_nvram));
diff --git a/src/mame/drivers/unico.cpp b/src/mame/drivers/unico.cpp
index 12625029b70..400203ca522 100644
--- a/src/mame/drivers/unico.cpp
+++ b/src/mame/drivers/unico.cpp
@@ -149,7 +149,7 @@ void zeropnt_state::zeropnt_map(address_map &map)
map(0x80018a, 0x80018a).w("ymsnd", FUNC(ym3812_device::write_port_w));
map(0x80018c, 0x80018c).rw("ymsnd", FUNC(ym3812_device::status_port_r), FUNC(ym3812_device::control_port_w));
map(0x80018e, 0x80018e).w(FUNC(zeropnt_state::zeropnt_okibank_leds_w)); //
- map(0x8001e0, 0x8001e1).writeonly(); // ? IRQ Ack
+ map(0x8001e0, 0x8001e1).nopw(); // ? IRQ Ack
map(0x904000, 0x90ffff).rw(FUNC(zeropnt_state::vram_r), FUNC(zeropnt_state::vram_w)).share("vram"); // Layers 1, 2, 0
map(0x920000, 0x923fff).ram(); // ? 0
map(0x930000, 0x9307ff).rw(FUNC(zeropnt_state::spriteram_r), FUNC(zeropnt_state::spriteram_w)).share("spriteram"); // Sprites
diff --git a/src/mame/drivers/v1050.cpp b/src/mame/drivers/v1050.cpp
index 7467a589257..a9015497ac3 100644
--- a/src/mame/drivers/v1050.cpp
+++ b/src/mame/drivers/v1050.cpp
@@ -181,12 +181,12 @@ void v1050_state::bankswitch()
if (BIT(m_bank, 0))
{
- program.install_readwrite_bank(0x0000, 0x1fff, "bank1");
+ program.install_readwrite_bank(0x0000, 0x1fff, membank("bank1"));
membank("bank1")->set_entry(bank);
}
else
{
- program.install_read_bank(0x0000, 0x1fff, "bank1");
+ program.install_read_bank(0x0000, 0x1fff, membank("bank1"));
program.unmap_write(0x0000, 0x1fff);
membank("bank1")->set_entry(3);
}
@@ -199,8 +199,8 @@ void v1050_state::bankswitch()
}
else
{
- program.install_readwrite_bank(0x4000, 0x7fff, "bank3");
- program.install_readwrite_bank(0x8000, 0xbfff, "bank4");
+ program.install_readwrite_bank(0x4000, 0x7fff, membank("bank3"));
+ program.install_readwrite_bank(0x8000, 0xbfff, membank("bank4"));
membank("bank3")->set_entry(bank);
membank("bank4")->set_entry(bank);
}
@@ -980,17 +980,17 @@ void v1050_state::machine_start()
membank("bank1")->configure_entry(2, ram + 0x1c000);
membank("bank1")->configure_entry(3, m_rom->base());
- program.install_readwrite_bank(0x2000, 0x3fff, "bank2");
+ program.install_readwrite_bank(0x2000, 0x3fff, membank("bank2"));
membank("bank2")->configure_entries(0, 2, ram + 0x2000, 0x10000);
membank("bank2")->configure_entry(2, ram + 0x1e000);
-
- program.install_readwrite_bank(0x4000, 0x7fff, "bank3");
+
+ program.install_readwrite_bank(0x4000, 0x7fff, membank("bank3"));
membank("bank3")->configure_entries(0, 2, ram + 0x4000, 0x10000);
- program.install_readwrite_bank(0x8000, 0xbfff, "bank4");
+ program.install_readwrite_bank(0x8000, 0xbfff, membank("bank4"));
membank("bank4")->configure_entries(0, 2, ram + 0x8000, 0x10000);
- program.install_readwrite_bank(0xc000, 0xffff, "bank5");
+ program.install_readwrite_bank(0xc000, 0xffff, membank("bank5"));
membank("bank5")->configure_entries(0, 3, ram + 0xc000, 0);
bankswitch();
diff --git a/src/mame/drivers/vamphalf.cpp b/src/mame/drivers/vamphalf.cpp
index 4789484e789..b643aa8bbb2 100644
--- a/src/mame/drivers/vamphalf.cpp
+++ b/src/mame/drivers/vamphalf.cpp
@@ -78,14 +78,15 @@ public:
vamphalf_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
- , m_wram(*this, "wram")
- , m_wram32(*this, "wram32")
- , m_okibank(*this, "okibank")
+ , m_wram(*this,"wram")
+ , m_wram32(*this,"wram32")
+ , m_qs1000_bank(*this, "qs1000_bank")
+ , m_okibank(*this,"okibank")
, m_palette(*this, "palette")
, m_soundlatch(*this, "soundlatch")
, m_eeprom(*this, "eeprom")
, m_gfxdecode(*this, "gfxdecode")
- , m_tiles(*this, "tiles", 0U)
+ , m_tiles(*this,"tiles")
, m_okiregion(*this, "oki%u", 1)
, m_photosensors(*this, "PHOTO_SENSORS")
, m_has_extra_gfx(false)
@@ -157,6 +158,8 @@ protected:
optional_shared_ptr<u16> m_wram;
optional_shared_ptr<u32> m_wram32;
+ memory_bank_creator m_qs1000_bank;
+
u16 m_semicom_prot_data[2];
int m_semicom_prot_idx;
int m_semicom_prot_which;
@@ -500,7 +503,7 @@ void vamphalf_state::qs1000_p3_w(u8 data)
if (!BIT(data, 5))
m_soundlatch->acknowledge_w();
- membank("qs1000:data")->set_entry(data & 7);
+ m_qs1000_bank->set_entry(data & 7);
}
@@ -3325,8 +3328,8 @@ void vamphalf_qdsp_state::init_misncrft()
m_flip_bit = 1;
// Configure the QS1000 ROM banking. Care must be taken not to overlap the 256b internal RAM
- m_qdsp_cpu->space(AS_IO).install_read_bank(0x0100, 0xffff, "data");
- membank("qs1000:data")->configure_entries(0, 16, memregion("qs1000:cpu")->base() + 0x100, 0x8000-0x100);
+ m_qdsp_cpu->space(AS_IO).install_read_bank(0x0100, 0xffff, m_qs1000_bank);
+ m_qs1000_bank->configure_entries(0, 16, memregion("qs1000:cpu")->base() + 0x100, 0x8000-0x100);
}
void vamphalf_state::init_coolmini()
@@ -3408,8 +3411,8 @@ void vamphalf_qdsp_state::init_wyvernwg()
m_semicom_prot_data[1] = 1;
// Configure the QS1000 ROM banking. Care must be taken not to overlap the 256b internal RAM
- m_qdsp_cpu->space(AS_IO).install_read_bank(0x0100, 0xffff, "data");
- membank("qs1000:data")->configure_entries(0, 16, memregion("qs1000:cpu")->base() + 0x100, 0x8000-0x100);
+ m_qdsp_cpu->space(AS_IO).install_read_bank(0x0100, 0xffff, m_qs1000_bank);
+ m_qs1000_bank->configure_entries(0, 16, memregion("qs1000:cpu")->base() + 0x100, 0x8000-0x100);
save_item(NAME(m_semicom_prot_idx));
save_item(NAME(m_semicom_prot_which));
@@ -3432,8 +3435,8 @@ void vamphalf_qdsp_state::init_yorijori()
// romx[BYTE4_XOR_BE(0x8ff1)] = 0;
// Configure the QS1000 ROM banking. Care must be taken not to overlap the 256b internal RAM
- m_qdsp_cpu->space(AS_IO).install_read_bank(0x0100, 0xffff, "data");
- membank("qs1000:data")->configure_entries(0, 16, memregion("qs1000:cpu")->base() + 0x100, 0x8000-0x100);
+ m_qdsp_cpu->space(AS_IO).install_read_bank(0x0100, 0xffff, m_qs1000_bank);
+ m_qs1000_bank->configure_entries(0, 16, memregion("qs1000:cpu")->base() + 0x100, 0x8000-0x100);
}
void vamphalf_nvram_state::init_finalgdr()
diff --git a/src/mame/drivers/vegaeo.cpp b/src/mame/drivers/vegaeo.cpp
index 62fb7c9f077..e26c58ea0ef 100644
--- a/src/mame/drivers/vegaeo.cpp
+++ b/src/mame/drivers/vegaeo.cpp
@@ -30,6 +30,7 @@ public:
: eolith_state(mconfig, type, tag)
, m_soundlatch(*this, "soundlatch")
, m_system_io(*this, "SYSTEM")
+ , m_qs1000_bank(*this, "qs1000_bank")
{
}
@@ -43,6 +44,7 @@ protected:
private:
required_device<generic_latch_8_device> m_soundlatch;
required_ioport m_system_io;
+ memory_bank_creator m_qs1000_bank;
std::unique_ptr<uint8_t[]> m_vram;
int m_vbuffer;
@@ -73,7 +75,7 @@ void vegaeo_state::qs1000_p3_w(uint8_t data)
// ...x .... - ?
// ..x. .... - /IRQ clear
- membank("qs1000:bank")->set_entry(data & 0x07);
+ m_qs1000_bank->set_entry(data & 0x07);
if (!BIT(data, 5))
m_soundlatch->acknowledge_w();
@@ -290,8 +292,8 @@ ROM_END
void vegaeo_state::init_vegaeo()
{
// Set up the QS1000 program ROM banking, taking care not to overlap the internal RAM
- m_qs1000->cpu().space(AS_IO).install_read_bank(0x0100, 0xffff, "bank");
- membank("qs1000:bank")->configure_entries(0, 8, memregion("qs1000:cpu")->base()+0x100, 0x10000);
+ m_qs1000->cpu().space(AS_IO).install_read_bank(0x0100, 0xffff, m_qs1000_bank);
+ m_qs1000_bank->configure_entries(0, 8, memregion("qs1000:cpu")->base()+0x100, 0x10000);
init_speedup();
}
diff --git a/src/mame/drivers/vic10.cpp b/src/mame/drivers/vic10.cpp
index ed897c0c009..b41700fbbcb 100644
--- a/src/mame/drivers/vic10.cpp
+++ b/src/mame/drivers/vic10.cpp
@@ -45,7 +45,7 @@ public:
m_exp(*this, VIC10_EXPANSION_SLOT_TAG),
m_ram(*this, RAM_TAG),
m_cassette(*this, PET_DATASSETTE_PORT_TAG),
- m_color_ram(*this, "color_ram"),
+ m_color_ram(*this, "color_ram", 0x400, ENDIANNESS_LITTLE),
m_row(*this, "ROW%u", 0),
m_restore(*this, "RESTORE"),
m_lock(*this, "LOCK")
@@ -63,7 +63,7 @@ private:
required_device<vic10_expansion_slot_device> m_exp;
required_device<ram_device> m_ram;
optional_device<pet_datassette_port_device> m_cassette;
- optional_shared_ptr<uint8_t> m_color_ram;
+ memory_share_creator<uint8_t> m_color_ram;
required_ioport_array<8> m_row;
required_ioport m_restore;
required_ioport m_lock;
@@ -604,9 +604,6 @@ WRITE_LINE_MEMBER( vic10_state::exp_reset_w )
void vic10_state::machine_start()
{
- // allocate memory
- m_color_ram.allocate(0x400);
-
// initialize memory
uint8_t data = 0xff;
diff --git a/src/mame/drivers/videopkr.cpp b/src/mame/drivers/videopkr.cpp
index 3d5a7af9568..79a6d83e7b7 100644
--- a/src/mame/drivers/videopkr.cpp
+++ b/src/mame/drivers/videopkr.cpp
@@ -956,10 +956,10 @@ void videopkr_state::i8751_io_port(address_map &map)
{
map(0x0000, 0x0fff).ram(); // NVRAM?
map(0x8000, 0x8000).noprw(); // ???
- map(0x9000, 0x9000).writeonly(); // ???
+ map(0x9000, 0x9000).nopw(); // ???
map(0xa000, 0xbfff).ram(); // video RAM?
map(0xc000, 0xc003).rw("ppi", FUNC(i8255_device::read), FUNC(i8255_device::write));
- map(0xf000, 0xf000).writeonly(); // ???
+ map(0xf000, 0xf000).nopw(); // ???
}
void videopkr_state::i8039_sound_mem(address_map &map)
diff --git a/src/mame/drivers/voyager.cpp b/src/mame/drivers/voyager.cpp
index 811026b9d93..fd426832056 100644
--- a/src/mame/drivers/voyager.cpp
+++ b/src/mame/drivers/voyager.cpp
@@ -261,9 +261,9 @@ void voyager_state::voyager_map(address_map &map)
{
map(0x00000000, 0x0009ffff).ram();
map(0x000a0000, 0x000bffff).rw("vga", FUNC(trident_vga_device::mem_r), FUNC(trident_vga_device::mem_w)); // VGA VRAM
- map(0x000c0000, 0x000c7fff).ram().region("video_bios", 0);
+ map(0x000c0000, 0x000c7fff).rom().region("video_bios", 0);
map(0x000c8000, 0x000cffff).noprw();
- //map(0x000d0000, 0x000d0003).ram(); // XYLINX - Sincronus serial communication
+ //map(0x000d0000, 0x000d0003).ram(); // XYLINX - Synchronus serial communication
map(0x000d0008, 0x000d000b).nopw(); // ???
map(0x000d0800, 0x000d0fff).rw(FUNC(voyager_state::nvram_r), FUNC(voyager_state::nvram_w)); // GAME_CMOS
diff --git a/src/mame/drivers/vtech1.cpp b/src/mame/drivers/vtech1.cpp
index 934c86000ce..61928a92c4d 100644
--- a/src/mame/drivers/vtech1.cpp
+++ b/src/mame/drivers/vtech1.cpp
@@ -65,7 +65,8 @@ class vtech1_state : public driver_device
public:
vtech1_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
- , m_vram(*this, "videoram")
+ , m_vram(*this, "videoram", 0x2000, ENDIANNESS_LITTLE)
+ , m_bank(*this, "bank")
, m_maincpu(*this, "maincpu")
, m_crtc(*this, "crtc")
, m_speaker(*this, "speaker")
@@ -102,7 +103,8 @@ private:
static const uint8_t VZ_BASIC = 0xf0;
static const uint8_t VZ_MCODE = 0xf1;
- required_shared_ptr<uint8_t> m_vram;
+ memory_share_creator<uint8_t> m_vram;
+ memory_bank_creator m_bank;
required_device<cpu_device> m_maincpu;
required_device<mc6847_base_device> m_crtc;
required_device<speaker_sound_device> m_speaker;
@@ -248,7 +250,7 @@ void vtech1_state::latch_w(uint8_t data)
void vtech1_state::video_bank_w(uint8_t data)
{
- membank("bank4")->set_entry(data & 0x03);
+ m_bank->set_entry(data & 0x03);
}
@@ -274,11 +276,10 @@ uint8_t vtech1_state::mc6847_videoram_r(offs_t offset)
void vtech1_state::init_vtech1h()
{
// the SHRG mod replaces the standard videoram chip with an 8k chip
- m_vram.allocate(0x2000);
- m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x7000, 0x77ff, "bank4");
- membank("bank4")->configure_entries(0, 4, m_vram, 0x800);
- membank("bank4")->set_entry(0);
+ m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x7000, 0x77ff, m_bank);
+ m_bank->configure_entries(0, 4, m_vram, 0x800);
+ m_bank->set_entry(0);
}
diff --git a/src/mame/drivers/williams.cpp b/src/mame/drivers/williams.cpp
index 5bcfc57b892..e552623adea 100644
--- a/src/mame/drivers/williams.cpp
+++ b/src/mame/drivers/williams.cpp
@@ -625,7 +625,7 @@ void spdball_state::main_map(address_map &map)
void blaster_state::main_map(address_map &map)
{
map(0x0000, 0x3fff).bankr("mainbank").writeonly().share("videoram");
- map(0x4000, 0x8fff).bankr("blaster_bankb").writeonly();
+ map(0x4000, 0x8fff).bankr("blaster_bankb").writeonly().share("bankb");
map(0x9000, 0xbaff).ram();
map(0xbb00, 0xbbff).ram().share("blaster_pal0");
map(0xbc00, 0xbcff).ram().share("blaster_scan");
diff --git a/src/mame/drivers/x68k.cpp b/src/mame/drivers/x68k.cpp
index 7a93ea3db98..972cf24fa5f 100644
--- a/src/mame/drivers/x68k.cpp
+++ b/src/mame/drivers/x68k.cpp
@@ -1520,8 +1520,7 @@ void x68k_state::machine_start()
address_space &space = m_maincpu->space(AS_PROGRAM);
// install RAM handlers
m_spriteram = (uint16_t*)(memregion("user1")->base());
- space.install_readwrite_bank(0x000000,m_ram->size()-1,"bank1");
- membank("bank1")->set_base(m_ram->pointer());
+ space.install_ram(0x000000,m_ram->size()-1,m_ram->pointer());
// start mouse timer
m_mouse_timer->adjust(attotime::zero, 0, attotime::from_msec(1)); // a guess for now
diff --git a/src/mame/drivers/xor100.cpp b/src/mame/drivers/xor100.cpp
index 9ed7896224f..89d96907e03 100644
--- a/src/mame/drivers/xor100.cpp
+++ b/src/mame/drivers/xor100.cpp
@@ -65,27 +65,27 @@ void xor100_state::bankswitch()
case EPROM_0000:
if (m_bank < banks)
{
- program.install_write_bank(0x0000, 0xffff, "bank1");
- membank("bank1")->set_entry(1 + m_bank);
+ program.install_write_bank(0x0000, 0xffff, m_bank1);
+ m_bank1->set_entry(1 + m_bank);
}
else
{
program.unmap_write(0x0000, 0xffff);
}
- program.install_read_bank(0x0000, 0x07ff, 0xf000, "bank2");
- program.install_read_bank(0xf800, 0xffff, "bank3");
- membank("bank2")->set_entry(0);
- membank("bank3")->set_entry(0);
+ program.install_read_bank(0x0000, 0x07ff, 0xf000, m_bank2);
+ program.install_read_bank(0xf800, 0xffff, m_bank3);
+ m_bank2->set_entry(0);
+ m_bank3->set_entry(0);
break;
case EPROM_F800:
if (m_bank < banks)
{
- program.install_write_bank(0x0000, 0xffff, "bank1");
- program.install_read_bank(0x0000, 0xf7ff, "bank2");
- membank("bank1")->set_entry(1 + m_bank);
- membank("bank2")->set_entry(1 + m_bank);
+ program.install_write_bank(0x0000, 0xffff, m_bank1);
+ program.install_read_bank(0x0000, 0xf7ff, m_bank2);
+ m_bank1->set_entry(1 + m_bank);
+ m_bank2->set_entry(1 + m_bank);
}
else
{
@@ -93,19 +93,19 @@ void xor100_state::bankswitch()
program.unmap_read(0x0000, 0xf7ff);
}
- program.install_read_bank(0xf800, 0xffff, "bank3");
- membank("bank3")->set_entry(0);
+ program.install_read_bank(0xf800, 0xffff, m_bank3);
+ m_bank3->set_entry(0);
break;
case EPROM_OFF:
if (m_bank < banks)
{
- program.install_write_bank(0x0000, 0xffff, "bank1");
- program.install_read_bank(0x0000, 0xf7ff, "bank2");
- program.install_read_bank(0xf800, 0xffff, "bank3");
- membank("bank1")->set_entry(1 + m_bank);
- membank("bank2")->set_entry(1 + m_bank);
- membank("bank3")->set_entry(1 + m_bank);
+ program.install_write_bank(0x0000, 0xffff, m_bank1);
+ program.install_read_bank(0x0000, 0xf7ff, m_bank2);
+ program.install_read_bank(0xf800, 0xffff, m_bank3);
+ m_bank1->set_entry(1 + m_bank);
+ m_bank2->set_entry(1 + m_bank);
+ m_bank3->set_entry(1 + m_bank);
}
else
{
diff --git a/src/mame/drivers/zaurus.cpp b/src/mame/drivers/zaurus.cpp
index 451697a0b3b..80ea72420c6 100644
--- a/src/mame/drivers/zaurus.cpp
+++ b/src/mame/drivers/zaurus.cpp
@@ -1476,7 +1476,7 @@ private:
void zaurus_sa_state::main_map(address_map &map)
{
- map(0x00000000, 0x00ffffff).ram().region("firmware", 0);
+ map(0x00000000, 0x00ffffff).rom().region("firmware", 0);
map(0x90020000, 0x9002001f).rw(m_sa_periphs, FUNC(sa1110_periphs_device::power_r), FUNC(sa1110_periphs_device::power_w));
map(0x90050000, 0x90050023).rw(m_sa_periphs, FUNC(sa1110_periphs_device::intc_r), FUNC(sa1110_periphs_device::intc_w));
map(0xc0000000, 0xc07fffff).ram().share("ram");
@@ -1484,7 +1484,7 @@ void zaurus_sa_state::main_map(address_map &map)
void zaurus_pxa_state::main_map(address_map &map)
{
- map(0x00000000, 0x001fffff).ram().region("firmware", 0);
+ map(0x00000000, 0x001fffff).rom().region("firmware", 0);
map(0x40000000, 0x400002ff).rw(m_pxa_periphs, FUNC(pxa255_periphs_device::dma_r), FUNC(pxa255_periphs_device::dma_w));
map(0x40400000, 0x40400083).rw(m_pxa_periphs, FUNC(pxa255_periphs_device::i2s_r), FUNC(pxa255_periphs_device::i2s_w));
map(0x40900000, 0x4090000f).rw(m_pxa_periphs, FUNC(pxa255_periphs_device::rtc_r), FUNC(pxa255_periphs_device::rtc_w));
diff --git a/src/mame/drivers/zr107.cpp b/src/mame/drivers/zr107.cpp
index 7295cb92ec5..f3b91f8b305 100644
--- a/src/mame/drivers/zr107.cpp
+++ b/src/mame/drivers/zr107.cpp
@@ -506,8 +506,8 @@ void midnrun_state::main_memmap(address_map &map)
map(0x7e008000, 0x7e009fff).rw("k056230", FUNC(k056230_device::read), FUNC(k056230_device::write)); /* LANC registers */
map(0x7e00a000, 0x7e00bfff).rw("k056230", FUNC(k056230_device::lanc_ram_r), FUNC(k056230_device::lanc_ram_w)); /* LANC Buffer RAM (27E) */
map(0x7e00c000, 0x7e00c00f).rw(m_k056800, FUNC(k056800_device::host_r), FUNC(k056800_device::host_w));
- map(0x7f800000, 0x7f9fffff).rom().share("share2");
- map(0x7fe00000, 0x7fffffff).rom().region("user1", 0).share("share2"); /* Program ROM */
+ map(0x7f800000, 0x7f9fffff).rom().region("user1", 0);
+ map(0x7fe00000, 0x7fffffff).rom().region("user1", 0); /* Program ROM */
}
@@ -535,8 +535,8 @@ void jetwave_state::main_memmap(address_map &map)
map(0x7e00a000, 0x7e00bfff).rw("k056230", FUNC(k056230_device::lanc_ram_r), FUNC(k056230_device::lanc_ram_w)); /* LANC Buffer RAM (27E) */
map(0x7e00c000, 0x7e00c00f).rw(m_k056800, FUNC(k056800_device::host_r), FUNC(k056800_device::host_w));
map(0x7f000000, 0x7f3fffff).rom().region("user2", 0);
- map(0x7f800000, 0x7f9fffff).rom().share("share2");
- map(0x7fe00000, 0x7fffffff).rom().region("user1", 0).share("share2"); /* Program ROM */
+ map(0x7f800000, 0x7f9fffff).rom().region("user1", 0);
+ map(0x7fe00000, 0x7fffffff).rom().region("user1", 0); /* Program ROM */
}
@@ -857,11 +857,11 @@ void zr107_state::driver_init()
/*****************************************************************************/
ROM_START( midnrun )
- ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */
- ROM_LOAD32_BYTE( "476ea1a01.20u", 0x000003, 0x80000, CRC(ea70edf2) SHA1(51c882383a150ba118ccd39eb869525fcf5eee3c) ) /* Program version EAA, v1.11 (EUR) */
- ROM_LOAD32_BYTE( "476ea1a02.17u", 0x000002, 0x80000, CRC(1462994f) SHA1(c8614c6c416f81737cc77c46eea6d8d440bc8cf3) )
- ROM_LOAD32_BYTE( "476ea1a03.15u", 0x000001, 0x80000, CRC(b770ae46) SHA1(c61daa8353802957eb1c2e2c6204c3a98569627e) )
- ROM_LOAD32_BYTE( "476ea1a04.13u", 0x000000, 0x80000, CRC(9644b277) SHA1(b9cb812b6035dfd93032d277c8aa0037cf6b3dbe) )
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD32_BYTE( "476ea1a01.20u", 0x000000, 0x80000, CRC(ea70edf2) SHA1(51c882383a150ba118ccd39eb869525fcf5eee3c) ) /* Program version EAA, v1.11 (EUR) */
+ ROM_LOAD32_BYTE( "476ea1a02.17u", 0x000001, 0x80000, CRC(1462994f) SHA1(c8614c6c416f81737cc77c46eea6d8d440bc8cf3) )
+ ROM_LOAD32_BYTE( "476ea1a03.15u", 0x000002, 0x80000, CRC(b770ae46) SHA1(c61daa8353802957eb1c2e2c6204c3a98569627e) )
+ ROM_LOAD32_BYTE( "476ea1a04.13u", 0x000003, 0x80000, CRC(9644b277) SHA1(b9cb812b6035dfd93032d277c8aa0037cf6b3dbe) )
ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */
ROM_LOAD16_WORD_SWAP( "477a07.19l", 0x000000, 0x20000, CRC(a82c0ba1) SHA1(dad69f2e5e75009d70cc2748477248ec47627c30) )
@@ -883,11 +883,11 @@ ROM_START( midnrun )
ROM_END
ROM_START( midnrunj )
- ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */
- ROM_LOAD32_BYTE( "476ja1d01.20u", 0x000003, 0x80000, CRC(68d05950) SHA1(d0ff9b9b628563e18a3eaa7b96b7e9e442c001a9) ) /* Program version JAD, v1.10 (JPN) */
- ROM_LOAD32_BYTE( "476ja1d02.17u", 0x000002, 0x80000, CRC(b12a14be) SHA1(d65281791874b90351442b94173d96582cfacd10) )
- ROM_LOAD32_BYTE( "476ja1d03.15u", 0x000001, 0x80000, CRC(f768c8f1) SHA1(b8242995bdb4f9ac078fd59ffc70c31014396c92) )
- ROM_LOAD32_BYTE( "476ja1d04.13u", 0x000000, 0x80000, CRC(6fd4fce7) SHA1(0ef25ec98a13f7beca1231db5a4db9004caadb0b) )
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD32_BYTE( "476ja1d01.20u", 0x000000, 0x80000, CRC(68d05950) SHA1(d0ff9b9b628563e18a3eaa7b96b7e9e442c001a9) ) /* Program version JAD, v1.10 (JPN) */
+ ROM_LOAD32_BYTE( "476ja1d02.17u", 0x000001, 0x80000, CRC(b12a14be) SHA1(d65281791874b90351442b94173d96582cfacd10) )
+ ROM_LOAD32_BYTE( "476ja1d03.15u", 0x000002, 0x80000, CRC(f768c8f1) SHA1(b8242995bdb4f9ac078fd59ffc70c31014396c92) )
+ ROM_LOAD32_BYTE( "476ja1d04.13u", 0x000003, 0x80000, CRC(6fd4fce7) SHA1(0ef25ec98a13f7beca1231db5a4db9004caadb0b) )
ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */
ROM_LOAD16_WORD_SWAP( "477a07.19l", 0x000000, 0x20000, CRC(a82c0ba1) SHA1(dad69f2e5e75009d70cc2748477248ec47627c30) )
@@ -909,11 +909,11 @@ ROM_START( midnrunj )
ROM_END
ROM_START( midnruna )
- ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */
- ROM_LOAD32_BYTE( "477aaa01.20u", 0x000003, 0x80000, CRC(3aa31517) SHA1(315d9c3c930493e39bc497ceafa0c4ef6fa64e4d) ) /* Program version AAA, v1.10 (ASA) */
- ROM_LOAD32_BYTE( "477aaa02.17u", 0x000002, 0x80000, CRC(c506bd3d) SHA1(d44ed2cb39f0da44f681190132c7603dfca813d9) )
- ROM_LOAD32_BYTE( "477aaa03.15u", 0x000001, 0x80000, CRC(53f8e898) SHA1(ba83a60a411bb307cb0e424099716ccf888a4f39) )
- ROM_LOAD32_BYTE( "477aaa04.13u", 0x000000, 0x80000, CRC(0eb264b7) SHA1(179a3d58c0f554fd1b283ee3640ce09d5142b288) )
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD32_BYTE( "477aaa01.20u", 0x000000, 0x80000, CRC(3aa31517) SHA1(315d9c3c930493e39bc497ceafa0c4ef6fa64e4d) ) /* Program version AAA, v1.10 (ASA) */
+ ROM_LOAD32_BYTE( "477aaa02.17u", 0x000001, 0x80000, CRC(c506bd3d) SHA1(d44ed2cb39f0da44f681190132c7603dfca813d9) )
+ ROM_LOAD32_BYTE( "477aaa03.15u", 0x000002, 0x80000, CRC(53f8e898) SHA1(ba83a60a411bb307cb0e424099716ccf888a4f39) )
+ ROM_LOAD32_BYTE( "477aaa04.13u", 0x000003, 0x80000, CRC(0eb264b7) SHA1(179a3d58c0f554fd1b283ee3640ce09d5142b288) )
ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */
ROM_LOAD16_WORD_SWAP( "477a07.19l", 0x000000, 0x20000, CRC(a82c0ba1) SHA1(dad69f2e5e75009d70cc2748477248ec47627c30) )
@@ -935,7 +935,7 @@ ROM_START( midnruna )
ROM_END
ROM_START( midnruna2 )
- ROM_REGION(0x200000, "user1", 0) // PowerPC program roms
+ ROM_REGION32_BE(0x200000, "user1", 0) // PowerPC program roms
ROM_LOAD32_BYTE( "477ab1d01.20u", 0x000003, 0x80000, CRC(3aa31517) SHA1(315d9c3c930493e39bc497ceafa0c4ef6fa64e4d) ) // labeled AB1, but still program version AAA, v1.10 (ASA)
ROM_LOAD32_BYTE( "477ab1d02.17u", 0x000002, 0x80000, CRC(c506bd3d) SHA1(d44ed2cb39f0da44f681190132c7603dfca813d9) )
ROM_LOAD32_BYTE( "477ab1d03.15u", 0x000001, 0x80000, CRC(53f8e898) SHA1(ba83a60a411bb307cb0e424099716ccf888a4f39) )
@@ -961,11 +961,11 @@ ROM_START( midnruna2 )
ROM_END
ROM_START( windheat )
- ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */
- ROM_LOAD32_BYTE( "677eaa01.20u", 0x000003, 0x080000, CRC(500b61f4) SHA1(ec39165412978c0dbd3cbf1f7b6989b5d7ba20a0) ) /* Program version EAA, v2.11 (EUR) */
- ROM_LOAD32_BYTE( "677eaa02.17u", 0x000002, 0x080000, CRC(99f9fd3b) SHA1(aaec5d7f4e46648aab3738ab09e46b312caee58f) )
- ROM_LOAD32_BYTE( "677eaa03.15u", 0x000001, 0x080000, CRC(c46eba6b) SHA1(80fea082d09071875d30a6a838736cf3a3e4501d) )
- ROM_LOAD32_BYTE( "677eaa04.13u", 0x000000, 0x080000, CRC(20dfcf4e) SHA1(4de8e22507f4719441f14fe96e25f0e0712dfa95) )
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD32_BYTE( "677eaa01.20u", 0x000000, 0x080000, CRC(500b61f4) SHA1(ec39165412978c0dbd3cbf1f7b6989b5d7ba20a0) ) /* Program version EAA, v2.11 (EUR) */
+ ROM_LOAD32_BYTE( "677eaa02.17u", 0x000001, 0x080000, CRC(99f9fd3b) SHA1(aaec5d7f4e46648aab3738ab09e46b312caee58f) )
+ ROM_LOAD32_BYTE( "677eaa03.15u", 0x000002, 0x080000, CRC(c46eba6b) SHA1(80fea082d09071875d30a6a838736cf3a3e4501d) )
+ ROM_LOAD32_BYTE( "677eaa04.13u", 0x000003, 0x080000, CRC(20dfcf4e) SHA1(4de8e22507f4719441f14fe96e25f0e0712dfa95) )
ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */
ROM_LOAD16_WORD_SWAP( "677a07.19l", 0x000000, 0x020000, CRC(05b14f2d) SHA1(3753f71173594ee741980e08eed0f7c3fc3588c9) )
@@ -987,11 +987,11 @@ ROM_START( windheat )
ROM_END
ROM_START( windheatu )
- ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */
- ROM_LOAD32_BYTE( "677ubc01.20u", 0x000003, 0x080000, CRC(63198721) SHA1(7f34131bf51d573d0c683b28df2567a0b911c98c) ) /* Program version UBC, v2.22 (USA) */
- ROM_LOAD32_BYTE( "677ubc02.17u", 0x000002, 0x080000, CRC(bdb00e2d) SHA1(c54b2250047576e12e9936300989e40494b4659d) )
- ROM_LOAD32_BYTE( "677ubc03.15u", 0x000001, 0x080000, CRC(0f7d8c1f) SHA1(63de03c7be794b6dae8d0af69e894ac573dbbc11) )
- ROM_LOAD32_BYTE( "677ubc04.13u", 0x000000, 0x080000, CRC(4e42791c) SHA1(a53c6374c6b46db578be4ced2ee7c2af7062d961) )
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD32_BYTE( "677ubc01.20u", 0x000000, 0x080000, CRC(63198721) SHA1(7f34131bf51d573d0c683b28df2567a0b911c98c) ) /* Program version UBC, v2.22 (USA) */
+ ROM_LOAD32_BYTE( "677ubc02.17u", 0x000001, 0x080000, CRC(bdb00e2d) SHA1(c54b2250047576e12e9936300989e40494b4659d) )
+ ROM_LOAD32_BYTE( "677ubc03.15u", 0x000002, 0x080000, CRC(0f7d8c1f) SHA1(63de03c7be794b6dae8d0af69e894ac573dbbc11) )
+ ROM_LOAD32_BYTE( "677ubc04.13u", 0x000003, 0x080000, CRC(4e42791c) SHA1(a53c6374c6b46db578be4ced2ee7c2af7062d961) )
ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */
ROM_LOAD16_WORD_SWAP( "677a07.19l", 0x000000, 0x020000, CRC(05b14f2d) SHA1(3753f71173594ee741980e08eed0f7c3fc3588c9) )
@@ -1013,11 +1013,11 @@ ROM_START( windheatu )
ROM_END
ROM_START( windheatj )
- ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */
- ROM_LOAD32_BYTE( "677jaa01.20u", 0x000003, 0x080000, CRC(559b8def) SHA1(6f2e8f29b0d9a950e71015270560813adc20b689) ) /* Program version JAA, v2.11 (JPN) */
- ROM_LOAD32_BYTE( "677jaa02.17u", 0x000002, 0x080000, CRC(cc230575) SHA1(be2da67600ab5edad2e8b7711c4cf985befe28bf) )
- ROM_LOAD32_BYTE( "677jaa03.15u", 0x000001, 0x080000, CRC(20b04701) SHA1(463be36c7f65b4aa3c3f2b1f37d1e6c1f5106cbb) )
- ROM_LOAD32_BYTE( "677jaa04.13u", 0x000000, 0x080000, CRC(f563b2a5) SHA1(b55b486b6af926eff4729f402116d45b61c5d25a) )
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD32_BYTE( "677jaa01.20u", 0x000000, 0x080000, CRC(559b8def) SHA1(6f2e8f29b0d9a950e71015270560813adc20b689) ) /* Program version JAA, v2.11 (JPN) */
+ ROM_LOAD32_BYTE( "677jaa02.17u", 0x000001, 0x080000, CRC(cc230575) SHA1(be2da67600ab5edad2e8b7711c4cf985befe28bf) )
+ ROM_LOAD32_BYTE( "677jaa03.15u", 0x000002, 0x080000, CRC(20b04701) SHA1(463be36c7f65b4aa3c3f2b1f37d1e6c1f5106cbb) )
+ ROM_LOAD32_BYTE( "677jaa04.13u", 0x000003, 0x080000, CRC(f563b2a5) SHA1(b55b486b6af926eff4729f402116d45b61c5d25a) )
ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */
ROM_LOAD16_WORD_SWAP( "677a07.19l", 0x000000, 0x020000, CRC(05b14f2d) SHA1(3753f71173594ee741980e08eed0f7c3fc3588c9) )
@@ -1039,11 +1039,11 @@ ROM_START( windheatj )
ROM_END
ROM_START( windheata )
- ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */
- ROM_LOAD32_BYTE( "677aaa01.20u", 0x000003, 0x080000, CRC(0d88d0e2) SHA1(93da258bfdb2baa1796916ea8350fff521d43373) ) /* Program version AAA, 2.11 (ASA) */
- ROM_LOAD32_BYTE( "677aaa02.17u", 0x000002, 0x080000, CRC(f71044a3) SHA1(a88990d4a65b610f695f4a6ff42868d04f6ba1b3) )
- ROM_LOAD32_BYTE( "677aaa03.15u", 0x000001, 0x080000, CRC(3c897588) SHA1(718b0eb57f23a3117d2ad3c58e53196f72fc61bf) )
- ROM_LOAD32_BYTE( "677aaa04.13u", 0x000000, 0x080000, CRC(aee84b7d) SHA1(b69a44e51e21f28bcd5cd87297066fc7ba7b5043) )
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD32_BYTE( "677aaa01.20u", 0x000000, 0x080000, CRC(0d88d0e2) SHA1(93da258bfdb2baa1796916ea8350fff521d43373) ) /* Program version AAA, 2.11 (ASA) */
+ ROM_LOAD32_BYTE( "677aaa02.17u", 0x000001, 0x080000, CRC(f71044a3) SHA1(a88990d4a65b610f695f4a6ff42868d04f6ba1b3) )
+ ROM_LOAD32_BYTE( "677aaa03.15u", 0x000002, 0x080000, CRC(3c897588) SHA1(718b0eb57f23a3117d2ad3c58e53196f72fc61bf) )
+ ROM_LOAD32_BYTE( "677aaa04.13u", 0x000003, 0x080000, CRC(aee84b7d) SHA1(b69a44e51e21f28bcd5cd87297066fc7ba7b5043) )
ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */
ROM_LOAD16_WORD_SWAP( "677a07.19l", 0x000000, 0x020000, CRC(05b14f2d) SHA1(3753f71173594ee741980e08eed0f7c3fc3588c9) )
@@ -1065,11 +1065,11 @@ ROM_START( windheata )
ROM_END
ROM_START( jetwave )
- ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */
- ROM_LOAD32_BYTE( "678eab01.20u", 0x000003, 0x080000, CRC(bc657198) SHA1(e521bb2c1b1a3ae934c98ce1656d35821fc287c9) ) /* Program version EAB, EUR v1.04 */
- ROM_LOAD32_BYTE( "678eab02.17u", 0x000002, 0x080000, CRC(a9a57090) SHA1(ae0273b00c64687f8f835aba531580654edd1097) )
- ROM_LOAD32_BYTE( "678eab03.15u", 0x000001, 0x080000, CRC(483aaff0) SHA1(86e011337532f6ff0174393758784b276143ba10) )
- ROM_LOAD32_BYTE( "678eab04.13u", 0x000000, 0x080000, CRC(c7580d72) SHA1(6a5652365a85917ac48b0f1ced70b9c311e89a4f) )
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD32_BYTE( "678eab01.20u", 0x000000, 0x080000, CRC(bc657198) SHA1(e521bb2c1b1a3ae934c98ce1656d35821fc287c9) ) /* Program version EAB, EUR v1.04 */
+ ROM_LOAD32_BYTE( "678eab02.17u", 0x000001, 0x080000, CRC(a9a57090) SHA1(ae0273b00c64687f8f835aba531580654edd1097) )
+ ROM_LOAD32_BYTE( "678eab03.15u", 0x000002, 0x080000, CRC(483aaff0) SHA1(86e011337532f6ff0174393758784b276143ba10) )
+ ROM_LOAD32_BYTE( "678eab04.13u", 0x000003, 0x080000, CRC(c7580d72) SHA1(6a5652365a85917ac48b0f1ced70b9c311e89a4f) )
ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */
ROM_LOAD16_WORD_SWAP( "678a07.19l", 0x000000, 0x020000, CRC(bb3f5875) SHA1(97f80d9b55d4177217b7cd1ba14e8ed2d64376bb) )
@@ -1091,11 +1091,11 @@ ROM_START( jetwave )
ROM_END
ROM_START( waveshrk )
- ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */
- ROM_LOAD32_BYTE( "678uab01.20u", 0x000003, 0x080000, CRC(a9b9ceed) SHA1(36f0d18481d7c3e7358e02473e54bc6b52d5c26b) ) /* Program version UAB, USA v1.04 */
- ROM_LOAD32_BYTE( "678uab02.17u", 0x000002, 0x080000, CRC(5ed24ac8) SHA1(d659c751558d4f8d89314466a37c04ac2df46879) )
- ROM_LOAD32_BYTE( "678uab03.15u", 0x000001, 0x080000, CRC(f4a595e7) SHA1(e05e7ea6613ecf70d8470af5fe0c6a7274c6e45b) )
- ROM_LOAD32_BYTE( "678uab04.13u", 0x000000, 0x080000, CRC(fd3320a7) SHA1(03a50a7bba9eb7cdb9f84953d6fb5c09f2d4b2db) )
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD32_BYTE( "678uab01.20u", 0x000000, 0x080000, CRC(a9b9ceed) SHA1(36f0d18481d7c3e7358e02473e54bc6b52d5c26b) ) /* Program version UAB, USA v1.04 */
+ ROM_LOAD32_BYTE( "678uab02.17u", 0x000001, 0x080000, CRC(5ed24ac8) SHA1(d659c751558d4f8d89314466a37c04ac2df46879) )
+ ROM_LOAD32_BYTE( "678uab03.15u", 0x000002, 0x080000, CRC(f4a595e7) SHA1(e05e7ea6613ecf70d8470af5fe0c6a7274c6e45b) )
+ ROM_LOAD32_BYTE( "678uab04.13u", 0x000003, 0x080000, CRC(fd3320a7) SHA1(03a50a7bba9eb7cdb9f84953d6fb5c09f2d4b2db) )
ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */
ROM_LOAD16_WORD_SWAP( "678a07.19l", 0x000000, 0x020000, CRC(bb3f5875) SHA1(97f80d9b55d4177217b7cd1ba14e8ed2d64376bb) )
@@ -1117,11 +1117,11 @@ ROM_START( waveshrk )
ROM_END
ROM_START( jetwavej )
- ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */
- ROM_LOAD32_BYTE( "678jab01.20u", 0x000003, 0x080000, CRC(fa3da5cc) SHA1(33307e701e6eb28d44e0653ac3f1de47fc17779d) ) /* Program version JAB, JPN v1.04 */
- ROM_LOAD32_BYTE( "678jab02.17u", 0x000002, 0x080000, CRC(01c6713e) SHA1(68e27c018f974e820ba2e99d89a743e53faf1e65) )
- ROM_LOAD32_BYTE( "678jab03.15u", 0x000001, 0x080000, CRC(21c757cb) SHA1(1de6df8e4c52d40882cbf771ff7215ed7b53f251) )
- ROM_LOAD32_BYTE( "678jab04.13u", 0x000000, 0x080000, CRC(fdcc1ecc) SHA1(206cb98a6587cd8e5a9287037d85f392bd2f6e82) )
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD32_BYTE( "678jab01.20u", 0x000000, 0x080000, CRC(fa3da5cc) SHA1(33307e701e6eb28d44e0653ac3f1de47fc17779d) ) /* Program version JAB, JPN v1.04 */
+ ROM_LOAD32_BYTE( "678jab02.17u", 0x000001, 0x080000, CRC(01c6713e) SHA1(68e27c018f974e820ba2e99d89a743e53faf1e65) )
+ ROM_LOAD32_BYTE( "678jab03.15u", 0x000002, 0x080000, CRC(21c757cb) SHA1(1de6df8e4c52d40882cbf771ff7215ed7b53f251) )
+ ROM_LOAD32_BYTE( "678jab04.13u", 0x000003, 0x080000, CRC(fdcc1ecc) SHA1(206cb98a6587cd8e5a9287037d85f392bd2f6e82) )
ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */
ROM_LOAD16_WORD_SWAP( "678a07.19l", 0x000000, 0x020000, CRC(bb3f5875) SHA1(97f80d9b55d4177217b7cd1ba14e8ed2d64376bb) )
diff --git a/src/mame/includes/3do.h b/src/mame/includes/3do.h
index 70478ad4a3a..2b1ca6dc337 100644
--- a/src/mame/includes/3do.h
+++ b/src/mame/includes/3do.h
@@ -20,7 +20,7 @@ public:
_3do_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
- m_dram(*this, "dram"),
+ m_dram(*this, "dram", 0x200000, ENDIANNESS_BIG),
m_vram(*this, "vram"),
m_nvram(*this, "nvram"),
m_screen(*this, "screen"),
@@ -160,7 +160,7 @@ private:
};
required_device<cpu_device> m_maincpu;
- required_shared_ptr<uint32_t> m_dram;
+ memory_share_creator<uint32_t> m_dram;
required_shared_ptr<uint32_t> m_vram;
required_device<nvram_device> m_nvram;
required_device<screen_device> m_screen;
diff --git a/src/mame/includes/abc80.h b/src/mame/includes/abc80.h
index cf57826b4df..6ec3a5cd7e2 100644
--- a/src/mame/includes/abc80.h
+++ b/src/mame/includes/abc80.h
@@ -84,7 +84,7 @@ public:
m_vsync_prom(*this, "vsync"),
m_line_prom(*this, "line"),
m_attr_prom(*this, "attr"),
- m_video_ram(*this, "video_ram"),
+ m_video_ram(*this, "video_ram", 0x400, ENDIANNESS_LITTLE),
m_motor(false),
m_tape_in(1),
m_tape_in_latch(1)
@@ -109,7 +109,7 @@ public:
required_memory_region m_vsync_prom;
required_memory_region m_line_prom;
required_memory_region m_attr_prom;
- optional_shared_ptr<u8> m_video_ram;
+ memory_share_creator<uint8_t> m_video_ram;
enum
{
diff --git a/src/mame/includes/abc80x.h b/src/mame/includes/abc80x.h
index c73ac3de8c6..afe62b30efd 100644
--- a/src/mame/includes/abc80x.h
+++ b/src/mame/includes/abc80x.h
@@ -86,8 +86,8 @@ public:
m_cassette(*this, CASSETTE_TAG),
m_ram(*this, RAM_TAG),
m_rom(*this, Z80_TAG),
- m_video_ram(*this, "video_ram"),
- m_char_ram(*this, "char_ram"),
+ m_video_ram(*this, "video_ram", 0x4000, ENDIANNESS_LITTLE),
+ m_char_ram(*this, "char_ram", 0x800, ENDIANNESS_LITTLE),
m_io_sb(*this, "SB"),
m_ctc_z0(0),
m_sio_txcb(0),
@@ -106,8 +106,8 @@ public:
optional_device<cassette_image_device> m_cassette;
required_device<ram_device> m_ram;
required_memory_region m_rom;
- optional_shared_ptr<uint8_t> m_video_ram;
- optional_shared_ptr<uint8_t> m_char_ram;
+ memory_share_creator<uint8_t> m_video_ram;
+ memory_share_creator<uint8_t> m_char_ram;
required_ioport m_io_sb;
virtual void machine_start() override;
@@ -276,7 +276,7 @@ public:
m_rad_prom(*this, "rad"),
m_hru2_prom(*this, "hru"),
m_char_rom(*this, MC6845_TAG),
- m_attr_ram(*this, "attr_ram")
+ m_attr_ram(*this, "attr_ram", 0x800, ENDIANNESS_LITTLE)
{ }
required_device<mc6845_device> m_crtc;
@@ -285,7 +285,7 @@ public:
required_memory_region m_rad_prom;
required_memory_region m_hru2_prom;
required_memory_region m_char_rom;
- optional_shared_ptr<uint8_t> m_attr_ram;
+ memory_share_creator<uint8_t> m_attr_ram;
virtual void machine_start() override;
virtual void machine_reset() override;
diff --git a/src/mame/includes/armedf.h b/src/mame/includes/armedf.h
index f75ba45cbac..af41f5d4b82 100644
--- a/src/mame/includes/armedf.h
+++ b/src/mame/includes/armedf.h
@@ -25,7 +25,7 @@ public:
, m_palette(*this, "palette")
, m_spriteram(*this, "spriteram")
, m_soundlatch(*this, "soundlatch")
- , m_text_videoram(*this, "text_videoram", 0)
+ , m_text_videoram(*this, "text_videoram")
, m_spr_pal_clut(*this, "spr_pal_clut")
, m_fg_videoram(*this, "fg_videoram")
, m_bg_videoram(*this, "bg_videoram")
diff --git a/src/mame/includes/asteroid.h b/src/mame/includes/asteroid.h
index 56540eaa55c..bfe0c1e4c22 100644
--- a/src/mame/includes/asteroid.h
+++ b/src/mame/includes/asteroid.h
@@ -24,7 +24,9 @@ public:
m_dsw_sel(*this, "dsw_sel"),
m_cocktail(*this, "COCKTAIL"),
m_ram1(*this, "ram1"),
- m_ram2(*this, "ram2")
+ m_ram2(*this, "ram2"),
+ m_sram1(*this, "ram1", 0x100, ENDIANNESS_LITTLE),
+ m_sram2(*this, "ram2", 0x100, ENDIANNESS_LITTLE)
{ }
/* devices */
@@ -39,6 +41,8 @@ public:
/* memory banks */
optional_memory_bank m_ram1;
optional_memory_bank m_ram2;
+ memory_share_creator<u8> m_sram1;
+ memory_share_creator<u8> m_sram2;
DECLARE_WRITE_LINE_MEMBER(coin_counter_left_w);
DECLARE_WRITE_LINE_MEMBER(coin_counter_center_w);
diff --git a/src/mame/includes/atarigt.h b/src/mame/includes/atarigt.h
index 3b37ca4a666..bf6bfb91a80 100644
--- a/src/mame/includes/atarigt.h
+++ b/src/mame/includes/atarigt.h
@@ -26,7 +26,7 @@ public:
atarigt_state(const machine_config &mconfig, device_type type, const char *tag) :
atarigen_state(mconfig, type, tag),
m_palette(*this, "palette"),
- m_colorram(*this, "colorram", 32),
+ m_colorram(*this, "colorram"),
m_adc(*this, "adc"),
m_playfield_tilemap(*this, "playfield"),
m_alpha_tilemap(*this, "alpha"),
diff --git a/src/mame/includes/aussiebyte.h b/src/mame/includes/aussiebyte.h
index 856c6f44de1..1e02f5c0971 100644
--- a/src/mame/includes/aussiebyte.h
+++ b/src/mame/includes/aussiebyte.h
@@ -47,7 +47,14 @@ public:
: driver_device(mconfig, type, tag)
, m_palette(*this, "palette")
, m_maincpu(*this, "maincpu")
+ , m_bankr0(*this, "bankr0")
+ , m_bankw0(*this, "bankw0")
+ , m_bank1(*this, "bank1")
+ , m_bank2(*this, "bank2")
, m_p_chargen(*this, "chargen")
+ , m_p_mram(*this, "mram", 0x40000, ENDIANNESS_LITTLE)
+ , m_p_videoram(*this, "vram", 0x10000, ENDIANNESS_LITTLE)
+ , m_p_attribram(*this, "aram", 0x800, ENDIANNESS_LITTLE)
, m_ctc(*this, "ctc")
, m_dma(*this, "dma")
, m_pio1(*this, "pio1")
@@ -125,7 +132,11 @@ private:
std::unique_ptr<u8[]> m_ram; // main ram, 256k dynamic
required_device<palette_device> m_palette;
required_device<z80_device> m_maincpu;
+ required_memory_bank m_bankr0, m_bankw0, m_bank1, m_bank2;
required_region_ptr<u8> m_p_chargen;
+ memory_share_creator<u8> m_p_mram;
+ memory_share_creator<u8> m_p_videoram;
+ memory_share_creator<u8> m_p_attribram;
required_device<z80ctc_device> m_ctc;
required_device<z80dma_device> m_dma;
required_device<z80pio_device> m_pio1;
diff --git a/src/mame/includes/beathead.h b/src/mame/includes/beathead.h
index 1eaf5d5f7d3..eec461e13b1 100644
--- a/src/mame/includes/beathead.h
+++ b/src/mame/includes/beathead.h
@@ -30,7 +30,7 @@ public:
m_vram_bulk_latch(*this, "vram_bulk_latch"),
m_palette_select(*this, "palette_select"),
m_ram_base(*this, "ram_base"),
- m_rom_base(*this, "rom_base")
+ m_rom_base(*this, "user1")
{ }
void beathead(machine_config &config);
@@ -80,7 +80,7 @@ private:
uint8_t m_hsyncram[0x800];
required_shared_ptr<uint32_t> m_ram_base;
- required_shared_ptr<uint32_t> m_rom_base;
+ required_region_ptr<uint32_t> m_rom_base;
attotime m_hblank_offset;
diff --git a/src/mame/includes/blockout.h b/src/mame/includes/blockout.h
index 5e86bc1bd39..6592ac9adbf 100644
--- a/src/mame/includes/blockout.h
+++ b/src/mame/includes/blockout.h
@@ -17,7 +17,7 @@ class blockout_state : public driver_device
public:
blockout_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
- m_videoram(*this, "videoram", 16),
+ m_videoram(*this, "videoram"),
m_frontvideoram(*this, "frontvideoram"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
diff --git a/src/mame/includes/btoads.h b/src/mame/includes/btoads.h
index f339950136e..d88fa90541c 100644
--- a/src/mame/includes/btoads.h
+++ b/src/mame/includes/btoads.h
@@ -21,13 +21,13 @@ class btoads_state : public driver_device
public:
btoads_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
- m_vram_fg0(*this, "vram_fg0", 32),
- m_vram_fg1(*this, "vram_fg1", 32),
- m_vram_fg_data(*this, "vram_fg_data", 32),
- m_vram_bg0(*this, "vram_bg0", 32),
- m_vram_bg1(*this, "vram_bg1", 32),
- m_sprite_scale(*this, "sprite_scale", 32),
- m_sprite_control(*this, "sprite_control", 32),
+ m_vram_fg0(*this, "vram_fg0"),
+ m_vram_fg1(*this, "vram_fg1"),
+ m_vram_fg_data(*this, "vram_fg_data"),
+ m_vram_bg0(*this, "vram_bg0"),
+ m_vram_bg1(*this, "vram_bg1"),
+ m_sprite_scale(*this, "sprite_scale"),
+ m_sprite_control(*this, "sprite_control"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_bsmt(*this, "bsmt"),
diff --git a/src/mame/includes/bw12.h b/src/mame/includes/bw12.h
index d12c9253a53..b5c9f7d10eb 100644
--- a/src/mame/includes/bw12.h
+++ b/src/mame/includes/bw12.h
@@ -60,6 +60,7 @@ public:
, m_char_rom(*this, "chargen")
, m_video_ram(*this, "video_ram")
, m_modifiers(*this, "MODIFIERS")
+ , m_bank(*this, "bank")
{ }
void bw14(machine_config &config);
@@ -118,9 +119,10 @@ protected:
required_memory_region m_char_rom;
required_shared_ptr<uint8_t> m_video_ram;
required_ioport m_modifiers;
+ required_memory_bank m_bank;
/* memory state */
- int m_bank;
+ int m_curbank;
/* PIT state */
int m_pit_out2;
diff --git a/src/mame/includes/bzone.h b/src/mame/includes/bzone.h
index daba24c6ec1..e414bbbc05f 100644
--- a/src/mame/includes/bzone.h
+++ b/src/mame/includes/bzone.h
@@ -32,8 +32,8 @@ public:
{ }
DECLARE_READ_LINE_MEMBER(clock_r);
- void init_bradley();
void bzone(machine_config &config);
+ void bradley(machine_config &config);
protected:
void bzone_coin_counter_w(offs_t offset, uint8_t data);
@@ -46,6 +46,7 @@ protected:
void bzone_base(machine_config &config);
void bzone_audio(machine_config &config);
void bzone_map(address_map &map);
+ void bradley_map(address_map &map);
required_device<cpu_device> m_maincpu;
required_device<mathbox_device> m_mathbox;
diff --git a/src/mame/includes/cninja.h b/src/mame/includes/cninja.h
index 707fcf561d2..e2c303f281f 100644
--- a/src/mame/includes/cninja.h
+++ b/src/mame/includes/cninja.h
@@ -104,6 +104,7 @@ public:
void cninjabl2(machine_config &config);
void mutantf(machine_config &config);
void cninja_map(address_map &map);
+ void cninjabl2_map(address_map &map);
void cninjabl2_oki_map(address_map &map);
void cninjabl2_s_map(address_map &map);
void cninjabl_map(address_map &map);
diff --git a/src/mame/includes/comx35.h b/src/mame/includes/comx35.h
index e5dc36ed3ac..1cff50e38bb 100644
--- a/src/mame/includes/comx35.h
+++ b/src/mame/includes/comx35.h
@@ -38,7 +38,7 @@ public:
m_ram(*this, RAM_TAG),
m_exp(*this, EXPANSION_TAG),
m_rom(*this, CDP1802_TAG),
- m_char_ram(*this, "char_ram"),
+ m_char_ram(*this, "char_ram", COMX35_CHARRAM_SIZE, ENDIANNESS_LITTLE),
m_d6(*this, "D6"),
m_modifiers(*this, "MODIFIERS")
{ }
@@ -50,7 +50,7 @@ public:
required_device<ram_device> m_ram;
required_device<comx_expansion_slot_device> m_exp;
required_memory_region m_rom;
- optional_shared_ptr<uint8_t> m_char_ram;
+ memory_share_creator<uint8_t> m_char_ram;
required_ioport m_d6;
required_ioport m_modifiers;
diff --git a/src/mame/includes/cps3.h b/src/mame/includes/cps3.h
index 3b1977a993a..6b789a56765 100644
--- a/src/mame/includes/cps3.h
+++ b/src/mame/includes/cps3.h
@@ -38,7 +38,7 @@ public:
{*this, "simm7.%u", 0U}}
, m_mainram(*this, "mainram")
, m_spriteram(*this, "spriteram")
- , m_colourram(*this, "colourram", 0)
+ , m_colourram(*this, "colourram")
, m_ppu_gscroll(*this, "ppu_gscroll_regs")
, m_tilemap_regs(*this, "ppu_tmap_regs")
, m_ppu_crtc_zoom(*this, "ppu_crtc_zoom")
diff --git a/src/mame/includes/dec0.h b/src/mame/includes/dec0.h
index db134ddfd58..5c88125cfee 100644
--- a/src/mame/includes/dec0.h
+++ b/src/mame/includes/dec0.h
@@ -158,6 +158,7 @@ private:
void dec0_i8751_reset();
void h6280_decrypt(const char *cputag);
void dec0_map(address_map &map);
+ void ffantasybl_map(address_map &map);
void dec0_tb_map(address_map &map);
void dec0_s_map(address_map &map);
void hippodrm_map(address_map &map);
diff --git a/src/mame/includes/decocass.h b/src/mame/includes/decocass.h
index 41c29721431..9717039d036 100644
--- a/src/mame/includes/decocass.h
+++ b/src/mame/includes/decocass.h
@@ -50,6 +50,7 @@ public:
, m_tileram(*this, "tileram")
, m_objectram(*this, "objectram")
, m_paletteram(*this, "paletteram")
+ , m_bank1(*this, "bank1")
{
}
@@ -94,6 +95,7 @@ private:
required_shared_ptr<uint8_t> m_tileram;
required_shared_ptr<uint8_t> m_objectram;
required_shared_ptr<uint8_t> m_paletteram;
+ optional_memory_bank m_bank1;
size_t m_bgvideoram_size;
@@ -210,6 +212,7 @@ private:
void cdsteljn_mux_w(uint8_t data);
TIMER_DEVICE_CALLBACK_MEMBER(decocass_audio_nmi_gen);
void decocass_map(address_map &map);
+ void decocrom_map(address_map &map);
void decocass_sound_map(address_map &map);
void draw_edge(bitmap_ind16 &bitmap, const rectangle &cliprect, int which, bool opaque);
diff --git a/src/mame/includes/dgn_beta.h b/src/mame/includes/dgn_beta.h
index 9b906c2f93d..54c74c4a27d 100644
--- a/src/mame/includes/dgn_beta.h
+++ b/src/mame/includes/dgn_beta.h
@@ -88,7 +88,6 @@ public:
dgn_beta_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_mc6845(*this, "crtc"),
- m_videoram(*this, "videoram"),
m_maincpu(*this, "maincpu"),
m_dmacpu(*this, DMACPU_TAG),
m_ram(*this, RAM_TAG),
@@ -127,7 +126,6 @@ private:
DECLARE_FLOPPY_FORMATS(floppy_formats);
required_device<mc6845_device> m_mc6845;
- required_shared_ptr<uint8_t> m_videoram;
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_dmacpu;
required_device<ram_device> m_ram;
diff --git a/src/mame/includes/dkong.h b/src/mame/includes/dkong.h
index d91a7ef830f..cd268aaa02e 100644
--- a/src/mame/includes/dkong.h
+++ b/src/mame/includes/dkong.h
@@ -134,6 +134,8 @@ public:
, m_palette(*this, "palette")
, m_z80dma(*this, "z80dma")
, m_dma8257(*this, "dma8257")
+ , m_bank1(*this, "bank1")
+ , m_bank2(*this, "bank2")
{
}
@@ -255,6 +257,8 @@ private:
required_device<palette_device> m_palette;
optional_device<z80dma_device> m_z80dma;
optional_device<i8257_device> m_dma8257;
+ memory_bank_creator m_bank1;
+ memory_bank_creator m_bank2;
/* radarscp_scanline */
int m_counter;
diff --git a/src/mame/includes/dragon.h b/src/mame/includes/dragon.h
index 5036957fa92..277b3198543 100644
--- a/src/mame/includes/dragon.h
+++ b/src/mame/includes/dragon.h
@@ -115,8 +115,8 @@ public:
: dragon64_state(mconfig, type, tag)
, m_crtc(*this, "crtc")
, m_palette(*this, "palette")
- , m_plus_ram(*this, "plus_ram")
- , m_video_ram(*this, "video_ram")
+ , m_plus_ram(*this, "plus_ram", 0x10000, ENDIANNESS_BIG)
+ , m_video_ram(*this, "video_ram", 0x800, ENDIANNESS_BIG)
, m_char_rom(*this, "chargen")
{
}
@@ -133,8 +133,8 @@ protected:
private:
required_device<hd6845s_device> m_crtc;
required_device<palette_device> m_palette;
- optional_shared_ptr<uint8_t> m_plus_ram;
- optional_shared_ptr<uint8_t> m_video_ram;
+ memory_share_creator<uint8_t> m_plus_ram;
+ memory_share_creator<uint8_t> m_video_ram;
required_memory_region m_char_rom;
};
diff --git a/src/mame/includes/efdt.h b/src/mame/includes/efdt.h
index e6c87da496c..083650c11c7 100644
--- a/src/mame/includes/efdt.h
+++ b/src/mame/includes/efdt.h
@@ -20,7 +20,7 @@ public:
m_palette(*this, "palette"),
m_audiocpu(*this, "audiocpu"),
m_vlatch(*this, "vlatch%u", 1U),
- m_videoram(*this, "videoram", 8)
+ m_videoram(*this, "videoram")
{ }
void efdt(machine_config &config);
diff --git a/src/mame/includes/fantland.h b/src/mame/includes/fantland.h
index 11f4c72700a..562c836a8d6 100644
--- a/src/mame/includes/fantland.h
+++ b/src/mame/includes/fantland.h
@@ -21,8 +21,8 @@ public:
m_screen(*this, "screen"),
m_palette(*this, "palette"),
m_soundlatch(*this, "soundlatch"),
- m_spriteram(*this, "spriteram", 0),
- m_spriteram2(*this, "spriteram2", 0),
+ m_spriteram(*this, "spriteram"),
+ m_spriteram2(*this, "spriteram2"),
m_wheel(*this, "WHEEL%u", 0U)
{ }
diff --git a/src/mame/includes/fromance.h b/src/mame/includes/fromance.h
index 9066d1f60a0..c8b2f4a651e 100644
--- a/src/mame/includes/fromance.h
+++ b/src/mame/includes/fromance.h
@@ -28,7 +28,8 @@ public:
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_subcpu(*this, "sub"),
- m_spriteram(*this, "spriteram"),
+ m_spriteram(nullptr),
+ m_spriteram_size(0),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
@@ -50,7 +51,8 @@ public:
protected:
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_subcpu;
- optional_shared_ptr<uint8_t> m_spriteram;
+ uint8_t *m_spriteram;
+ u32 m_spriteram_size;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
diff --git a/src/mame/includes/fuukifg3.h b/src/mame/includes/fuukifg3.h
index 08c37caae04..09306837d2d 100644
--- a/src/mame/includes/fuukifg3.h
+++ b/src/mame/includes/fuukifg3.h
@@ -28,9 +28,9 @@ public:
, m_screen(*this, "screen")
, m_palette(*this, "palette")
, m_fuukivid(*this, "fuukivid")
- , m_spriteram(*this, "spriteram", 32U)
+ , m_spriteram(*this, "spriteram")
, m_vram(*this, "vram.%u", 0)
- , m_vregs(*this, "vregs", 32U)
+ , m_vregs(*this, "vregs")
, m_priority(*this, "priority")
, m_tilebank(*this, "tilebank")
, m_shared_ram(*this, "shared_ram")
diff --git a/src/mame/includes/gaelco3d.h b/src/mame/includes/gaelco3d.h
index 99e76b96539..44e17f06c15 100644
--- a/src/mame/includes/gaelco3d.h
+++ b/src/mame/includes/gaelco3d.h
@@ -32,7 +32,7 @@ public:
gaelco3d_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_adsp_ram_base(*this, "adsp_ram_base")
- , m_m68k_ram_base(*this, "m68k_ram_base", 0)
+ , m_m68k_ram_base(*this, "m68k_ram_base")
, m_adsp_control_regs(*this, "adsp_regs")
, m_adsp_fastram_base(*this, "adsp_fastram")
, m_maincpu(*this, "maincpu")
diff --git a/src/mame/includes/galaxian.h b/src/mame/includes/galaxian.h
index 931d1e135c3..999c436a774 100644
--- a/src/mame/includes/galaxian.h
+++ b/src/mame/includes/galaxian.h
@@ -82,6 +82,7 @@ public:
, m_videoram(*this, "videoram")
, m_decrypted_opcodes(*this, "decrypted_opcodes")
, m_lamps(*this, "lamp%u", 0U)
+ , m_bank1(*this, "bank1")
{ }
/* video extension callbacks */
@@ -438,6 +439,8 @@ protected:
optional_shared_ptr<uint8_t> m_decrypted_opcodes;
output_finder<2> m_lamps;
+ memory_bank_creator m_bank1;
+
int m_bullets_base;
int m_sprites_base;
int m_numspritegens;
diff --git a/src/mame/includes/galivan.h b/src/mame/includes/galivan.h
index 978730a879c..24f4ba4ced1 100644
--- a/src/mame/includes/galivan.h
+++ b/src/mame/includes/galivan.h
@@ -31,6 +31,7 @@ public:
, m_gfxdecode(*this, "gfxdecode")
, m_palette(*this, "palette")
, m_soundlatch(*this, "soundlatch")
+ , m_rombank(*this, "rombank")
{ }
void galivan(machine_config &config);
@@ -97,6 +98,7 @@ private:
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_device<generic_latch_8_device> m_soundlatch;
+ memory_bank_creator m_rombank;
void galivan_map(address_map &map);
void ninjemak_io_map(address_map &map);
diff --git a/src/mame/includes/gamecom.h b/src/mame/includes/gamecom.h
index a821da216de..5df264a8fc5 100644
--- a/src/mame/includes/gamecom.h
+++ b/src/mame/includes/gamecom.h
@@ -224,7 +224,7 @@ public:
, m_bank2(*this, "bank2")
, m_bank3(*this, "bank3")
, m_bank4(*this, "bank4")
- , m_region_maincpu(*this, "maincpu")
+ , m_share_maincpu(*this, "maincpu")
, m_region_kernel(*this, "kernel")
, m_io_in0(*this, "IN0")
, m_io_in1(*this, "IN1")
@@ -295,7 +295,7 @@ private:
required_memory_bank m_bank2;
required_memory_bank m_bank3;
required_memory_bank m_bank4;
- required_memory_region m_region_maincpu;
+ required_shared_ptr<u8> m_share_maincpu;
required_memory_region m_region_kernel;
required_ioport m_io_in0;
required_ioport m_io_in1;
diff --git a/src/mame/includes/hec2hrp.h b/src/mame/includes/hec2hrp.h
index 3d99dac37df..6e33c798a18 100644
--- a/src/mame/includes/hec2hrp.h
+++ b/src/mame/includes/hec2hrp.h
@@ -58,7 +58,7 @@ public:
, m_bank(*this, "bank%u", 0U)
, m_rom(*this, "maincpu")
, m_ram(*this, RAM_TAG)
- , m_hector_vram(*this,"hector_videoram")
+ , m_hector_vram(*this,"hector_videoram", 0x4000, ENDIANNESS_LITTLE)
, m_disc2cpu(*this, "disc2cpu")
, m_discrete(*this, "discrete")
, m_sn(*this, "sn76477")
@@ -157,7 +157,6 @@ private:
int m_counter_write;
bool m_irq_current_state;
bool m_nmi_current_state;
- uint8_t m_hector_videoram_hrx[0x4000];
DECLARE_MACHINE_RESET(interact);
DECLARE_MACHINE_START(hec2hrp);
@@ -198,7 +197,7 @@ private:
optional_memory_bank_array<4> m_bank;
required_region_ptr<u8> m_rom;
optional_device<ram_device> m_ram;
- optional_shared_ptr<uint8_t> m_hector_vram;
+ memory_share_creator<uint8_t> m_hector_vram;
optional_device<cpu_device> m_disc2cpu;
required_device<discrete_device> m_discrete;
required_device<sn76477_device> m_sn;
diff --git a/src/mame/includes/hng64.h b/src/mame/includes/hng64.h
index d7965ecf30c..c427550a139 100644
--- a/src/mame/includes/hng64.h
+++ b/src/mame/includes/hng64.h
@@ -172,9 +172,9 @@ public:
m_comm(*this, "network"),
m_rtc(*this, "rtc"),
m_mainram(*this, "mainram"),
- m_cart(*this, "cart"),
+ m_cart(*this, "gameprg"),
m_sysregs(*this, "sysregs"),
- m_rombase(*this, "rombase"),
+ m_rombase(*this, "user1"),
m_spriteram(*this, "spriteram"),
m_spriteregs(*this, "spriteregs"),
m_videoram(*this, "videoram"),
@@ -232,9 +232,9 @@ private:
required_device<msm6242_device> m_rtc;
required_shared_ptr<uint32_t> m_mainram;
- required_shared_ptr<uint32_t> m_cart;
+ required_region_ptr<uint32_t> m_cart;
required_shared_ptr<uint32_t> m_sysregs;
- required_shared_ptr<uint32_t> m_rombase;
+ required_region_ptr<uint32_t> m_rombase;
required_shared_ptr<uint32_t> m_spriteram;
required_shared_ptr<uint32_t> m_spriteregs;
required_shared_ptr<uint32_t> m_videoram;
diff --git a/src/mame/includes/itech32.h b/src/mame/includes/itech32.h
index d782ede033e..07fabcfebaa 100644
--- a/src/mame/includes/itech32.h
+++ b/src/mame/includes/itech32.h
@@ -42,10 +42,9 @@ public:
m_timekeeper(*this, "m48t02"),
m_soundlatch(*this, "soundlatch"),
m_soundlatch2(*this, "soundlatch2"),
- m_main_ram(*this, "main_ram", 0),
- m_nvram(*this, "nvram", 0),
- m_video(*this, "video", 0),
- m_main_rom(*this, "main_rom", 0),
+ m_nvram(*this, "nvram"),
+ m_video(*this, "video"),
+ m_main_rom(*this, "maincpu"),
m_grom(*this, "gfx1"),
m_soundbank(*this, "soundbank")
{ }
@@ -89,10 +88,9 @@ protected:
required_device<generic_latch_8_device> m_soundlatch;
optional_device<generic_latch_8_device> m_soundlatch2;
- optional_shared_ptr<u16> m_main_ram;
optional_shared_ptr<u16> m_nvram;
optional_shared_ptr<u16> m_video;
- optional_shared_ptr<u16> m_main_rom;
+ optional_region_ptr<u16> m_main_rom;
required_region_ptr<u8> m_grom;
required_memory_bank m_soundbank;
@@ -274,7 +272,7 @@ public:
m_dips(*this, "DIPS"),
m_gun_x(*this, "GUNX%u", 1U),
m_gun_y(*this, "GUNY%u", 1U),
- m_nvram_b(*this, "nvram_b", 0),
+ m_nvram_b(*this, "nvram_b"),
m_gun_timer(nullptr)
{ }
diff --git a/src/mame/includes/itech8.h b/src/mame/includes/itech8.h
index 6f8cb019366..f156cd05e03 100644
--- a/src/mame/includes/itech8.h
+++ b/src/mame/includes/itech8.h
@@ -10,6 +10,7 @@
#include "machine/gen_latch.h"
#include "machine/ticket.h"
#include "machine/timer.h"
+#include "machine/nvram.h"
#include "video/tlc34076.h"
#include "video/tms34061.h"
#include "screen.h"
@@ -23,6 +24,7 @@ public:
m_maincpu(*this, "maincpu"),
m_soundcpu(*this, "soundcpu"),
m_subcpu(*this, "sub"),
+ m_nvram(*this, "nvram"),
m_soundlatch(*this, "soundlatch"),
m_tms34061(*this, "tms34061"),
m_tlc34076(*this, "tlc34076"),
@@ -80,6 +82,7 @@ protected:
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_soundcpu;
optional_device<cpu_device> m_subcpu;
+ required_device<nvram_device> m_nvram;
required_device<generic_latch_8_device> m_soundlatch;
required_device<tms34061_device> m_tms34061;
required_device<tlc34076_device> m_tlc34076;
diff --git a/src/mame/includes/jaguar.h b/src/mame/includes/jaguar.h
index bb9738dcb5c..f5eed8b8051 100644
--- a/src/mame/includes/jaguar.h
+++ b/src/mame/includes/jaguar.h
@@ -132,7 +132,7 @@ protected:
required_shared_ptr<uint32_t> m_shared_ram;
required_shared_ptr<uint32_t> m_gpu_ram;
required_shared_ptr<uint32_t> m_gpu_clut;
- optional_memory_region m_romboard_region;
+ optional_memory_region m_romboard_region;
optional_shared_ptr<uint32_t> m_mainram;
optional_shared_ptr<uint32_t> m_mainram2;
diff --git a/src/mame/includes/konamigx.h b/src/mame/includes/konamigx.h
index 57db6e9b4e5..9a7f6f7031d 100644
--- a/src/mame/includes/konamigx.h
+++ b/src/mame/includes/konamigx.h
@@ -45,10 +45,10 @@ public:
, m_workram(*this, "workram")
, m_psacram(*this, "psacram")
, m_subpaletteram32(*this, "subpaletteram")
- , m_k053936_0_ctrl(*this, "k053936_0_ctrl", 32)
- , m_k053936_0_linectrl(*this, "k053936_0_line", 32)
- , m_k053936_0_ctrl_16(*this, "k053936_0_ct16", 16)
- , m_k053936_0_linectrl_16(*this, "k053936_0_li16", 16)
+ , m_k053936_0_ctrl(*this, "k053936_0_ctrl")
+ , m_k053936_0_linectrl(*this, "k053936_0_line")
+ , m_k053936_0_ctrl_16(*this, "k053936_0_ct16")
+ , m_k053936_0_linectrl_16(*this, "k053936_0_li16")
, m_generic_paletteram_32(*this, "paletteram")
, m_an0(*this, "AN0")
, m_an1(*this, "AN1")
diff --git a/src/mame/includes/kyocera.h b/src/mame/includes/kyocera.h
index 95751af6735..5c03221cbf6 100644
--- a/src/mame/includes/kyocera.h
+++ b/src/mame/includes/kyocera.h
@@ -62,7 +62,9 @@ public:
m_rs232(*this, RS232_TAG),
m_rom(*this, I8085_TAG),
m_y(*this, "Y%u", 0U),
- m_battery(*this, "BATTERY")
+ m_battery(*this, "BATTERY"),
+ m_bank1(*this, "bank1"),
+ m_bank2(*this, "bank2")
{ }
void kc85(machine_config &config);
@@ -93,6 +95,8 @@ protected:
required_memory_region m_rom;
required_ioport_array<9> m_y;
required_ioport m_battery;
+ memory_bank_creator m_bank1;
+ memory_bank_creator m_bank2;
virtual void machine_start() override;
memory_region *m_opt_region;
@@ -193,7 +197,9 @@ public:
m_ram(*this, RAM_TAG),
m_rs232(*this, RS232_TAG),
m_rom(*this, I8085_TAG),
- m_y(*this, "Y%u", 0U)
+ m_y(*this, "Y%u", 0U),
+ m_bank1(*this, "bank1"),
+ m_bank2(*this, "bank2")
{ }
void tandy200(machine_config &config);
@@ -214,6 +220,8 @@ private:
required_device<rs232_port_device> m_rs232;
required_memory_region m_rom;
required_ioport_array<9> m_y;
+ memory_bank_creator m_bank1;
+ memory_bank_creator m_bank2;
memory_region *m_opt_region;
diff --git a/src/mame/includes/kyugo.h b/src/mame/includes/kyugo.h
index 11aa67a371d..99987c948b3 100644
--- a/src/mame/includes/kyugo.h
+++ b/src/mame/includes/kyugo.h
@@ -36,8 +36,6 @@ public:
void legend(machine_config &config);
void gyrodine(machine_config &config);
- void init_srdmissn();
-
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
@@ -65,6 +63,7 @@ private:
void gyrodine_sub_portmap(address_map &map);
void kyugo_main_map(address_map &map);
void kyugo_main_portmap(address_map &map);
+ void srdmissn_main_map(address_map &map);
void legend_sub_map(address_map &map);
void repulse_sub_map(address_map &map);
void repulse_sub_portmap(address_map &map);
diff --git a/src/mame/includes/leland.h b/src/mame/includes/leland.h
index 88fed5f9449..9503725c877 100644
--- a/src/mame/includes/leland.h
+++ b/src/mame/includes/leland.h
@@ -42,7 +42,7 @@ public:
, m_slave_bankslot(*this, "slavebank")
, m_slave_base(*this, "slave")
, m_eeprom(*this, "eeprom")
- , m_battery_ram(*this, "battery")
+ , m_battery_ram(*this, "battery", 0x3000, ENDIANNESS_LITTLE)
, m_palette(*this, "palette")
, m_screen(*this, "screen")
, m_gfxdecode(*this, "gfxdecode")
@@ -94,7 +94,7 @@ protected:
required_memory_bank m_slave_bankslot;
required_region_ptr<u8> m_slave_base;
required_device<eeprom_serial_93cxx_device> m_eeprom;
- required_shared_ptr<u8> m_battery_ram;
+ memory_share_creator<u8> m_battery_ram;
required_device<palette_device> m_palette;
required_device<screen_device> m_screen;
required_device<gfxdecode_device> m_gfxdecode;
@@ -138,6 +138,7 @@ protected:
struct vram_state_data m_vram_state[2];
void slave_map_program(address_map &map);
+ void asylum_slave_map_program(address_map &map);
TIMER_CALLBACK_MEMBER(leland_delayed_mvram_w);
@@ -268,6 +269,7 @@ public:
void ataxx(machine_config &config);
void wsf(machine_config &config);
+ void asylum(machine_config &config);
private:
u8 ataxx_trackball_r(offs_t offset);
diff --git a/src/mame/includes/lisa.h b/src/mame/includes/lisa.h
index d91a9ee35a0..225f3b1d22c 100644
--- a/src/mame/includes/lisa.h
+++ b/src/mame/includes/lisa.h
@@ -112,7 +112,6 @@ public:
m_nvram(*this, "nvram"),
m_latch(*this, "latch"),
m_fdc_cpu(*this,"fdccpu"),
- m_fdc_rom(*this,"fdc_rom"),
m_fdc_ram(*this,"fdc_ram"),
m_io_line0(*this, "LINE0"),
m_io_line1(*this, "LINE1"),
@@ -147,7 +146,6 @@ private:
required_device<ls259_device> m_latch;
required_device<m6504_device> m_fdc_cpu;
- required_shared_ptr<uint8_t> m_fdc_rom;
required_shared_ptr<uint8_t> m_fdc_ram;
required_ioport m_io_line0;
diff --git a/src/mame/includes/m92.h b/src/mame/includes/m92.h
index f6301ad4dbf..532b1ff7516 100644
--- a/src/mame/includes/m92.h
+++ b/src/mame/includes/m92.h
@@ -47,7 +47,7 @@ public:
m_screen(*this, "screen"),
m_palette(*this, "palette"),
m_upd71059c(*this, "upd71059c"),
- m_eeprom(*this, "eeprom", 16),
+ m_eeprom(*this, "eeprom"),
m_mainbank(*this, "mainbank")
{ }
diff --git a/src/mame/includes/mac.h b/src/mame/includes/mac.h
index e3ae254f9d3..20d7ce44333 100644
--- a/src/mame/includes/mac.h
+++ b/src/mame/includes/mac.h
@@ -424,7 +424,7 @@ private:
DECLARE_WRITE_LINE_MEMBER(mac_via2_irq);
void set_scc_waitrequest(int waitrequest);
void mac_driver_init(model_t model);
- void mac_install_memory(offs_t memory_begin, offs_t memory_end, offs_t memory_size, void *memory_data, int is_rom, const char *bank);
+ void mac_install_memory(offs_t memory_begin, offs_t memory_end, offs_t memory_size, void *memory_data, int is_rom);
offs_t mac_dasm_override(std::ostream &stream, offs_t pc, const util::disasm_interface::data_buffer &opcodes, const util::disasm_interface::data_buffer &params);
};
diff --git a/src/mame/includes/mcr.h b/src/mame/includes/mcr.h
index 64b0397e968..37b28e3ff5a 100644
--- a/src/mame/includes/mcr.h
+++ b/src/mame/includes/mcr.h
@@ -93,6 +93,8 @@ public:
void mcr_90010(machine_config &config);
void cpu_90009_map(address_map &map);
void cpu_90009_portmap(address_map &map);
+ void cpu_90009_dp_map(address_map &map);
+ void cpu_90009_dp_portmap(address_map &map);
void cpu_90010_map(address_map &map);
void cpu_90010_portmap(address_map &map);
void cpu_91490_map(address_map &map);
@@ -147,7 +149,8 @@ public:
mcr_state(mconfig, type, tag),
m_coin_in_timer(*this, "coinin"),
m_hopper_timer(*this, "hopper"),
- m_lamps(*this, "lamp%u", 0U)
+ m_lamps(*this, "lamp%u", 0U),
+ m_meter_ram(*this, "meter", 0x200, ENDIANNESS_LITTLE)
{ }
uint8_t ip0_r();
@@ -175,6 +178,7 @@ private:
required_device<timer_device> m_coin_in_timer;
required_device<timer_device> m_hopper_timer;
output_finder<14> m_lamps;
+ memory_share_creator<uint8_t> m_meter_ram;
};
class mcr_nflfoot_state : public mcr_state
diff --git a/src/mame/includes/megazone.h b/src/mame/includes/megazone.h
index 6d9f36a8eb1..7a1059bb45b 100644
--- a/src/mame/includes/megazone.h
+++ b/src/mame/includes/megazone.h
@@ -26,6 +26,7 @@ public:
m_colorram(*this, "colorram"),
m_colorram2(*this, "colorram2"),
m_spriteram(*this, "spriteram"),
+ m_share1(*this, "share1"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_daccpu(*this, "daccpu"),
@@ -45,6 +46,7 @@ private:
required_shared_ptr<uint8_t> m_colorram;
required_shared_ptr<uint8_t> m_colorram2;
required_shared_ptr<uint8_t> m_spriteram;
+ required_shared_ptr<uint8_t> m_share1;
/* video-related */
std::unique_ptr<bitmap_ind16> m_tmpbitmap;
diff --git a/src/mame/includes/midtunit.h b/src/mame/includes/midtunit.h
index 167df8a83ff..2151886bcbf 100644
--- a/src/mame/includes/midtunit.h
+++ b/src/mame/includes/midtunit.h
@@ -92,6 +92,7 @@ private:
/* protection */
uint8_t m_mk_prot_index;
uint16_t m_mk2_prot_data;
+ std::unique_ptr<uint8_t[]> m_hidden_ram;
const uint32_t *m_nbajam_prot_table;
uint16_t m_nbajam_prot_queue[5];
diff --git a/src/mame/includes/midvunit.h b/src/mame/includes/midvunit.h
index cd5a22023ab..c966f689c60 100644
--- a/src/mame/includes/midvunit.h
+++ b/src/mame/includes/midvunit.h
@@ -49,7 +49,7 @@ class midvunit_state : public driver_device
public:
midvunit_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
- m_videoram(*this, "videoram", 32),
+ m_videoram(*this, "videoram"),
m_textureram(*this, "textureram"),
m_screen(*this, "screen"),
m_nvram(*this, "nvram"),
diff --git a/src/mame/includes/midyunit.h b/src/mame/includes/midyunit.h
index 772dd14d777..274be779e9b 100644
--- a/src/mame/includes/midyunit.h
+++ b/src/mame/includes/midyunit.h
@@ -37,7 +37,7 @@ public:
, m_term2_adc(*this, "adc")
, m_nvram(*this, "nvram")
, m_generic_paletteram_16(*this, "paletteram")
- , m_gfx_rom(*this, "gfx_rom", 16)
+ , m_gfx_rom(*this, "gfx_rom")
, m_mainram(*this, "mainram")
, m_ports(*this, { { "IN0", "IN1", "IN2", "DSW", "UNK0", "UNK1" } })
{
@@ -116,6 +116,7 @@ private:
optional_ioport_array<6> m_ports;
std::unique_ptr<uint16_t[]> m_cmos_ram;
+ std::unique_ptr<uint8_t[]> m_hidden_ram;
uint32_t m_cmos_page;
uint16_t m_prot_result;
uint16_t m_prot_sequence[3];
diff --git a/src/mame/includes/model3.h b/src/mame/includes/model3.h
index 4559d008227..716134bcbfc 100644
--- a/src/mame/includes/model3.h
+++ b/src/mame/includes/model3.h
@@ -83,7 +83,8 @@ public:
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_cryptdevice(*this, "315_5881"),
- m_billboard(*this, "billboard")
+ m_billboard(*this, "billboard"),
+ m_bank2(*this, "bank2")
{
m_step15_with_mpc106 = false;
m_step20_with_old_real3d = false;
@@ -163,6 +164,7 @@ private:
optional_device<sega_315_5881_crypt_device> m_cryptdevice;
required_device<sega_billboard_device> m_billboard;
+ memory_bank_creator m_bank2;
tilemap_t *m_layer4[4];
tilemap_t *m_layer8[4];
diff --git a/src/mame/includes/mpz80.h b/src/mame/includes/mpz80.h
index 021077388df..13b116bb3fc 100644
--- a/src/mame/includes/mpz80.h
+++ b/src/mame/includes/mpz80.h
@@ -22,7 +22,7 @@ public:
m_ram(*this, RAM_TAG),
m_s100(*this, S100_TAG),
m_rom(*this, Z80_TAG),
- m_map_ram(*this, "map_ram"),
+ m_map_ram(*this, "map_ram", 0x200, ENDIANNESS_LITTLE),
m_16c(*this, "16C"),
m_nmi(1),
m_pint(1),
@@ -44,7 +44,7 @@ private:
required_device<ram_device> m_ram;
required_device<s100_bus_device> m_s100;
required_memory_region m_rom;
- optional_shared_ptr<uint8_t> m_map_ram;
+ memory_share_creator<uint8_t> m_map_ram;
required_ioport m_16c;
virtual void machine_start() override;
diff --git a/src/mame/includes/ms32.h b/src/mame/includes/ms32.h
index aa6a8f1c3d5..096346ec689 100644
--- a/src/mame/includes/ms32.h
+++ b/src/mame/includes/ms32.h
@@ -29,14 +29,14 @@ public:
m_tx_scroll(*this, "tx_scroll"),
m_bg_scroll(*this, "bg_scroll"),
m_mahjong_input_select(*this, "mahjong_select"),
- m_priram(*this, "priram", 32),
- m_palram(*this, "palram", 32),
- m_rozram(*this, "rozram", 32),
- m_lineram(*this, "lineram", 32),
- m_sprram(*this, "sprram", 32),
- m_txram(*this, "txram", 32),
- m_bgram(*this, "bgram", 32),
- m_f1superb_extraram(*this, "f1sb_extraram", 32),
+ m_priram(*this, "priram"),
+ m_palram(*this, "palram"),
+ m_rozram(*this, "rozram"),
+ m_lineram(*this, "lineram"),
+ m_sprram(*this, "sprram"),
+ m_txram(*this, "txram"),
+ m_bgram(*this, "bgram"),
+ m_f1superb_extraram(*this, "f1sb_extraram"),
m_z80bank(*this, "z80bank%u", 1)
{ }
diff --git a/src/mame/includes/mtx.h b/src/mame/includes/mtx.h
index ee2170d6270..1509caaaad5 100644
--- a/src/mame/includes/mtx.h
+++ b/src/mame/includes/mtx.h
@@ -40,6 +40,12 @@ public:
, m_exp(*this, "exp")
, m_extrom(*this, "extrom")
, m_rompak(*this, "rompak")
+ , m_rammap_bank1(*this, "rammap_bank1")
+ , m_rammap_bank2(*this, "rammap_bank2")
+ , m_rammap_bank3(*this, "rammap_bank3")
+ , m_rommap_bank1(*this, "rommap_bank1")
+ , m_rommap_bank2(*this, "rommap_bank2")
+ , m_rommap_bank3(*this, "rommap_bank3")
{ }
void rs128(machine_config &config);
@@ -62,6 +68,12 @@ private:
required_device<mtx_exp_slot_device> m_exp;
required_device<generic_slot_device> m_extrom;
required_device<generic_slot_device> m_rompak;
+ memory_bank_creator m_rammap_bank1;
+ memory_bank_creator m_rammap_bank2;
+ memory_bank_creator m_rammap_bank3;
+ memory_bank_creator m_rommap_bank1;
+ memory_bank_creator m_rommap_bank2;
+ memory_bank_creator m_rommap_bank3;
/* keyboard state */
uint8_t m_key_sense;
diff --git a/src/mame/includes/namcofl.h b/src/mame/includes/namcofl.h
index f644e3e0559..a36e0c847e7 100644
--- a/src/mame/includes/namcofl.h
+++ b/src/mame/includes/namcofl.h
@@ -32,7 +32,7 @@ public:
m_brake(*this, "BRAKE"),
m_wheel(*this, "WHEEL"),
m_workram(*this, "workram"),
- m_shareram(*this, "shareram", 32) { }
+ m_shareram(*this, "shareram") { }
void namcofl(machine_config &config);
diff --git a/src/mame/includes/naomi.h b/src/mame/includes/naomi.h
index 3cd82a5991f..72cb7c56d43 100644
--- a/src/mame/includes/naomi.h
+++ b/src/mame/includes/naomi.h
@@ -44,7 +44,7 @@ class naomi_state : public dc_state
naomi_state(const machine_config &mconfig, device_type type, const char *tag)
: dc_state(mconfig, type, tag),
m_eeprom(*this, "main_eeprom"),
- m_rombase(*this, "rombase"),
+ m_rombase(*this, "maincpu"),
m_mp(*this, "KEY%u", 1U)
{ }
@@ -77,7 +77,7 @@ class naomi_state : public dc_state
protected:
required_device<eeprom_serial_93cxx_device> m_eeprom;
- optional_shared_ptr<uint64_t> m_rombase;
+ optional_region_ptr<uint64_t> m_rombase;
optional_ioport_array<5> m_mp;
DECLARE_MACHINE_RESET(naomi);
diff --git a/src/mame/includes/nc.h b/src/mame/includes/nc.h
index e26c40227ba..07da2424bea 100644
--- a/src/mame/includes/nc.h
+++ b/src/mame/includes/nc.h
@@ -54,6 +54,8 @@ public:
m_uart_clock(*this, "uart_clock"),
m_nvram(*this, "nvram"),
m_fdc(*this, "upd765"),
+ m_bankhandler_r(*this, "bank%u", 1U),
+ m_bankhandler_w(*this, "bank%u", 5U),
m_nc_type(variant)
{
}
@@ -109,6 +111,7 @@ protected: // HACK FOR MC6845
required_device<clock_device> m_uart_clock;
required_device<nvram_device> m_nvram;
optional_device<upd765a_device> m_fdc;
+ required_memory_bank_array<4> m_bankhandler_r, m_bankhandler_w;
char m_memory_config[4];
emu_timer *m_keyboard_timer;
diff --git a/src/mame/includes/neogeo.h b/src/mame/includes/neogeo.h
index 992087db771..2904259fca3 100644
--- a/src/mame/includes/neogeo.h
+++ b/src/mame/includes/neogeo.h
@@ -54,6 +54,7 @@ protected:
, m_soundlatch(*this, "soundlatch")
, m_soundlatch2(*this, "soundlatch2")
, m_region_maincpu(*this, "maincpu")
+ , m_share_maincpu(*this, "maincpu")
, m_region_sprites(*this, "sprites")
, m_region_fixed(*this, "fixed")
, m_region_fixedbios(*this, "fixedbios")
@@ -61,6 +62,7 @@ protected:
, m_region_audiobios(*this, "audiobios")
, m_region_audiocpu(*this, "audiocpu")
, m_bank_audio_main(*this, "audio_main")
+ , m_bank_cartridge(*this, "cartridge")
, m_edge(*this, "edge")
, m_ctrl1(*this, "ctrl1")
, m_ctrl2(*this, "ctrl2")
@@ -131,6 +133,7 @@ protected:
// memory
optional_memory_region m_region_maincpu;
+ optional_shared_ptr<uint16_t> m_share_maincpu;
optional_memory_region m_region_sprites;
optional_memory_region m_region_fixed;
optional_memory_region m_region_fixedbios;
@@ -139,7 +142,7 @@ protected:
optional_memory_region m_region_audiocpu;
optional_memory_bank m_bank_audio_main; // optional because of neocd
memory_bank *m_bank_audio_cart[4];
- memory_bank *m_bank_cartridge;
+ memory_bank_creator m_bank_cartridge;
optional_device<neogeo_ctrl_edge_port_device> m_edge;
optional_device<neogeo_control_port_device> m_ctrl1;
diff --git a/src/mame/includes/nes.h b/src/mame/includes/nes.h
index f2528a231fc..c05a4e5126e 100644
--- a/src/mame/includes/nes.h
+++ b/src/mame/includes/nes.h
@@ -76,7 +76,8 @@ public:
m_screen(*this, "screen"),
m_exp(*this, "exp"),
m_cartslot(*this, "nes_slot"),
- m_disk(*this, "disk")
+ m_disk(*this, "disk"),
+ m_prg_bank(*this, "prg%u", 0U)
{ }
@@ -130,6 +131,7 @@ private:
optional_device<nes_control_port_device> m_exp;
optional_device<nes_cart_slot_device> m_cartslot;
optional_device<nes_disksys_device> m_disk;
+ memory_bank_array_creator<4> m_prg_bank;
};
#endif // MAME_INCLUDES_NES_H
diff --git a/src/mame/includes/offtwall.h b/src/mame/includes/offtwall.h
index 6e317807fc9..488f26957cf 100644
--- a/src/mame/includes/offtwall.h
+++ b/src/mame/includes/offtwall.h
@@ -25,7 +25,7 @@ public:
m_jsa(*this, "jsa"),
m_vad(*this, "vad"),
m_mainram(*this, "mainram"),
- m_bankrom_base(*this, "bankrom_base")
+ m_bankrom_base(*this, "maincpu")
{ }
void offtwall(machine_config &config);
@@ -49,7 +49,7 @@ private:
required_shared_ptr<uint16_t> m_mainram;
uint16_t *m_bankswitch_base;
- required_shared_ptr<uint16_t> m_bankrom_base;
+ required_region_ptr<uint16_t> m_bankrom_base;
uint32_t m_bank_offset;
uint16_t *m_spritecache_count;
diff --git a/src/mame/includes/ojankohs.h b/src/mame/includes/ojankohs.h
index 03d6f287268..086ba486e67 100644
--- a/src/mame/includes/ojankohs.h
+++ b/src/mame/includes/ojankohs.h
@@ -18,11 +18,11 @@
class ojankohs_state : public driver_device
{
public:
- ojankohs_state(const machine_config &mconfig, device_type type, const char *tag) :
+ ojankohs_state(const machine_config &mconfig, device_type type, const char *tag, uint32_t vramsize, uint32_t pramsize) :
driver_device(mconfig, type, tag),
- m_videoram(*this, "videoram"),
- m_colorram(*this, "colorram"),
- m_paletteram(*this, "paletteram"),
+ m_videoram(*this, "videoram", vramsize, ENDIANNESS_LITTLE),
+ m_colorram(*this, "colorram", 0x1000, ENDIANNESS_LITTLE),
+ m_paletteram(*this, "paletteram", pramsize, ENDIANNESS_LITTLE),
m_maincpu(*this, "maincpu"),
m_msm(*this, "msm"),
m_gfxdecode(*this, "gfxdecode"),
@@ -37,6 +37,10 @@ public:
m_dsw3(*this, "dsw3"), m_dsw4(*this, "dsw4")
{ }
+ ojankohs_state(const machine_config &mconfig, device_type type, const char *tag) :
+ ojankohs_state(mconfig, type, tag, 0x1000, 0x800)
+ { }
+
void ojankohs(machine_config &config);
void ccasino(machine_config &config);
void ojankoc(machine_config &config);
@@ -47,9 +51,9 @@ protected:
private:
/* memory pointers */
- optional_shared_ptr<uint8_t> m_videoram;
- optional_shared_ptr<uint8_t> m_colorram;
- optional_shared_ptr<uint8_t> m_paletteram;
+ memory_share_creator<uint8_t> m_videoram;
+ memory_share_creator<uint8_t> m_colorram;
+ memory_share_creator<uint8_t> m_paletteram;
/* video-related */
tilemap_t *m_tilemap;
@@ -132,4 +136,28 @@ private:
void ojankoy_map(address_map &map);
};
+class ojankoy_state : public ojankohs_state
+{
+public:
+ ojankoy_state(const machine_config &mconfig, device_type type, const char *tag) :
+ ojankohs_state(mconfig, type, tag, 0x2000, 0x800)
+ { }
+};
+
+class ccasino_state : public ojankohs_state
+{
+public:
+ ccasino_state(const machine_config &mconfig, device_type type, const char *tag) :
+ ojankohs_state(mconfig, type, tag, 0x2000, 0x800)
+ { }
+};
+
+class ojankoc_state : public ojankohs_state
+{
+public:
+ ojankoc_state(const machine_config &mconfig, device_type type, const char *tag) :
+ ojankohs_state(mconfig, type, tag, 0x8000, 0x20)
+ { }
+};
+
#endif // MAME_INCLUDES_OJANKOHS_H
diff --git a/src/mame/includes/pacman.h b/src/mame/includes/pacman.h
index 93990e0f8dc..1bfadbe4c06 100644
--- a/src/mame/includes/pacman.h
+++ b/src/mame/includes/pacman.h
@@ -44,6 +44,7 @@ protected:
void bigbucks_map(address_map &map);
void bigbucks_portmap(address_map &map);
void birdiy_map(address_map &map);
+ void cannonbp_map(address_map &map);
void crushs_map(address_map &map);
void crushs_portmap(address_map &map);
void dremshpr_map(address_map &map);
@@ -164,7 +165,6 @@ public:
void init_ponpoko();
void init_eyes();
void init_woodpek();
- void init_cannonbp();
void init_jumpshot();
void init_mspacii();
void init_pacplus();
@@ -208,6 +208,7 @@ private:
public:
void birdiy(machine_config &config);
+ void cannonbp(machine_config &config);
void rocktrv2(machine_config &config);
void mspacman(machine_config &config);
void dremshpr(machine_config &config);
diff --git a/src/mame/includes/pc8401a.h b/src/mame/includes/pc8401a.h
index 738ad4749c9..33f360154fa 100644
--- a/src/mame/includes/pc8401a.h
+++ b/src/mame/includes/pc8401a.h
@@ -49,7 +49,7 @@ public:
, m_io_cart(*this, "io_cart")
, m_ram(*this, RAM_TAG)
, m_rom(*this, Z80_TAG)
- , m_crt_ram(*this, "crt_ram")
+ , m_crt_ram(*this, "crt_ram", PC8401A_CRT_VIDEORAM_SIZE, ENDIANNESS_LITTLE)
, m_io_y(*this, "Y.%u", 0)
{ }
@@ -62,7 +62,7 @@ public:
required_device<generic_slot_device> m_io_cart;
required_device<ram_device> m_ram;
required_memory_region m_rom;
- optional_shared_ptr<uint8_t> m_crt_ram;
+ memory_share_creator<uint8_t> m_crt_ram;
required_ioport_array<10> m_io_y;
memory_region *m_cart_rom;
diff --git a/src/mame/includes/pingpong.h b/src/mame/includes/pingpong.h
index 9d281856b39..032c4f9d2aa 100644
--- a/src/mame/includes/pingpong.h
+++ b/src/mame/includes/pingpong.h
@@ -19,7 +19,8 @@ public:
m_videoram(*this, "videoram"),
m_spriteram(*this, "spriteram"),
m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette")
+ m_palette(*this, "palette"),
+ m_banks(*this, "bank%d", 1U)
{ }
int m_intenable;
@@ -30,6 +31,7 @@ public:
required_shared_ptr<uint8_t> m_spriteram;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ optional_memory_bank_array<8> m_banks;
tilemap_t *m_bg_tilemap;
void cashquiz_question_bank_high_w(uint8_t data);
@@ -48,8 +50,10 @@ public:
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect );
void merlinmm(machine_config &config);
void pingpong(machine_config &config);
+ void cashquiz(machine_config &config);
void merlinmm_map(address_map &map);
void pingpong_map(address_map &map);
+ void cashquiz_map(address_map &map);
};
#endif // MAME_INCLUDES_PINGPONG_H
diff --git a/src/mame/includes/playch10.h b/src/mame/includes/playch10.h
index b3f96abdad4..a68e530d962 100644
--- a/src/mame/includes/playch10.h
+++ b/src/mame/includes/playch10.h
@@ -30,8 +30,18 @@ public:
}
void playch10(machine_config &config);
- void playchnv(machine_config &config);
- void playch10_hboard(machine_config &config);
+ void playch10_a(machine_config &config);
+ void playch10_b(machine_config &config);
+ void playch10_c(machine_config &config);
+ void playch10_d(machine_config &config);
+ void playch10_d2(machine_config &config);
+ void playch10_e(machine_config &config);
+ void playch10_f(machine_config &config);
+ void playch10_f2(machine_config &config);
+ void playch10_g(machine_config &config);
+ void playch10_h(machine_config &config);
+ void playch10_i(machine_config &config);
+ void playch10_k(machine_config &config);
void init_playch10();
void init_pc_gun();
@@ -93,6 +103,18 @@ private:
void bios_io_map(address_map &map);
void bios_map(address_map &map);
void cart_map(address_map &map);
+ void cart_a_map(address_map &map);
+ void cart_b_map(address_map &map);
+ void cart_c_map(address_map &map);
+ void cart_d_map(address_map &map);
+ void cart_d2_map(address_map &map);
+ void cart_e_map(address_map &map);
+ void cart_f_map(address_map &map);
+ void cart_f2_map(address_map &map);
+ void cart_g_map(address_map &map);
+ void cart_h_map(address_map &map);
+ void cart_i_map(address_map &map);
+ void cart_k_map(address_map &map);
virtual void machine_start() override;
virtual void machine_reset() override;
@@ -153,6 +175,7 @@ private:
std::unique_ptr<uint8_t[]> m_vram;
uint8_t* m_nametable[4];
std::unique_ptr<uint8_t[]> m_nt_ram;
+ std::unique_ptr<uint8_t[]> m_extra_ram;
chr_bank m_chr_page[8];
int m_mmc1_shiftreg;
int m_mmc1_shiftcount;
diff --git a/src/mame/includes/popeye.h b/src/mame/includes/popeye.h
index 8621a0ccf9c..9bafc301776 100644
--- a/src/mame/includes/popeye.h
+++ b/src/mame/includes/popeye.h
@@ -101,6 +101,7 @@ protected:
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_field(bitmap_ind16 &bitmap, const rectangle &cliprect);
+ void maincpu_common_map(address_map &map);
virtual void maincpu_program_map(address_map &map);
void maincpu_io_map(address_map &map);
diff --git a/src/mame/includes/psikyo.h b/src/mame/includes/psikyo.h
index 37c26454da2..45f72a6b9f3 100644
--- a/src/mame/includes/psikyo.h
+++ b/src/mame/includes/psikyo.h
@@ -24,7 +24,7 @@ class psikyo_state : public driver_device
public:
psikyo_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
- , m_vram(*this, "vram_%u", 0U, (u8)32)
+ , m_vram(*this, "vram_%u", 0U)
, m_vregs(*this, "vregs")
, m_bootleg_spritebuffer(*this, "boot_spritebuf")
, m_spritelut(*this, "spritelut")
diff --git a/src/mame/includes/qix.h b/src/mame/includes/qix.h
index cc4e9bbba41..fcdf40f23b4 100644
--- a/src/mame/includes/qix.h
+++ b/src/mame/includes/qix.h
@@ -49,7 +49,7 @@ public:
m_sn2(*this, "sn2"),
m_discrete(*this, "discrete"),
m_paletteram(*this, "paletteram"),
- m_videoram(*this, "videoram"),
+ m_videoram(*this, "videoram", 0x10000, ENDIANNESS_BIG),
m_videoram_address(*this, "videoram_addr"),
m_videoram_mask(*this, "videoram_mask"),
m_scanline_latch(*this, "scanline_latch"),
@@ -90,7 +90,7 @@ protected:
/* video state */
required_shared_ptr<uint8_t> m_paletteram;
- optional_shared_ptr<uint8_t> m_videoram;
+ memory_share_creator<uint8_t> m_videoram;
required_shared_ptr<uint8_t> m_videoram_address;
optional_shared_ptr<uint8_t> m_videoram_mask;
required_shared_ptr<uint8_t> m_scanline_latch;
diff --git a/src/mame/includes/saturn.h b/src/mame/includes/saturn.h
index 608c334ddb5..a1445658ebe 100644
--- a/src/mame/includes/saturn.h
+++ b/src/mame/includes/saturn.h
@@ -31,7 +31,7 @@ class saturn_state : public driver_device
public:
saturn_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
- m_rom(*this, "bios", 0x20000),
+ m_rom(*this, "bios"),
m_workram_l(*this, "workram_l"),
m_workram_h(*this, "workram_h"),
m_sound_ram(*this, "sound_ram"),
diff --git a/src/mame/includes/scramble.h b/src/mame/includes/scramble.h
index 76a8b89df98..e61956ff941 100644
--- a/src/mame/includes/scramble.h
+++ b/src/mame/includes/scramble.h
@@ -25,7 +25,8 @@ public:
m_soundram(*this, "soundram"),
m_digitalker(*this, "digitalker"),
m_soundlatch(*this, "soundlatch"),
- m_dial(*this, "DIAL")
+ m_dial(*this, "DIAL"),
+ m_cavelon_bank_object(*this, "cavelon_bank")
{
}
@@ -39,6 +40,8 @@ public:
optional_ioport m_dial;
+ memory_bank_creator m_cavelon_bank_object;
+
DECLARE_CUSTOM_INPUT_MEMBER(darkplnt_dial_r);
template <int Mask> DECLARE_READ_LINE_MEMBER(ckongs_coinage_r);
uint8_t hncholms_prot_r();
diff --git a/src/mame/includes/seta2.h b/src/mame/includes/seta2.h
index b3276e93e25..d35accb8085 100644
--- a/src/mame/includes/seta2.h
+++ b/src/mame/includes/seta2.h
@@ -35,9 +35,9 @@ public:
m_x1_bank(*this, "x1_bank_%u", 1U),
m_nvram(*this, "nvram"),
- m_spriteram(*this, "spriteram", 0),
- m_tileram(*this, "tileram", 0),
- m_vregs(*this, "vregs", 0),
+ m_spriteram(*this, "spriteram"),
+ m_tileram(*this, "tileram"),
+ m_vregs(*this, "vregs"),
m_leds(*this, "led%u", 0U),
m_lamps(*this, "lamp%u", 0U)
{ }
@@ -217,7 +217,7 @@ public:
staraudi_state(const machine_config &mconfig, device_type type, const char *tag) :
seta2_state(mconfig, type, tag),
m_rtc(*this, "rtc"),
- m_rgbram(*this, "rgbram", 0)
+ m_rgbram(*this, "rgbram")
{
}
static constexpr feature_type unemulated_features() { return feature::CAMERA | feature::PRINTER; }
diff --git a/src/mame/includes/sorcerer.h b/src/mame/includes/sorcerer.h
index fb5db5b59b0..e9aa3fb23f4 100644
--- a/src/mame/includes/sorcerer.h
+++ b/src/mame/includes/sorcerer.h
@@ -60,6 +60,8 @@ public:
, m_centronics(*this, "centronics")
, m_cart(*this, "cartslot")
, m_ram(*this, RAM_TAG)
+ , m_vram(*this, "vram")
+ , m_cram(*this, "cram")
, m_dma(*this, "dma")
, m_fdc3(*this, "fdc3")
, m_fdc4(*this, "fdc4")
@@ -125,6 +127,8 @@ protected:
required_device<centronics_device> m_centronics;
optional_device<generic_slot_device> m_cart;
required_device<ram_device> m_ram;
+ required_shared_ptr<u8> m_vram;
+ required_shared_ptr<u8> m_cram;
optional_device<z80dma_device> m_dma;
optional_device<fd1793_device> m_fdc3;
optional_device<wd2793_device> m_fdc4;
diff --git a/src/mame/includes/suna8.h b/src/mame/includes/suna8.h
index 9d6a75a57e9..6371dc8c6f7 100644
--- a/src/mame/includes/suna8.h
+++ b/src/mame/includes/suna8.h
@@ -21,9 +21,10 @@ public:
driver_device(mconfig, type, tag),
m_maincpu(*this,"maincpu"),
m_hardhead_ip(*this, "hardhead_ip"),
+ m_banked_spriteram(*this, "banked_spriteram", 0x8000, ENDIANNESS_LITTLE),
m_spriteram(*this, "spriteram"),
m_wram(*this, "wram"),
- m_banked_paletteram(*this, "paletteram"),
+ m_banked_paletteram(*this, "paletteram", 0x400, ENDIANNESS_LITTLE),
m_audiocpu(*this, "audiocpu"),
m_samples(*this, "samples"),
m_gfxdecode(*this, "gfxdecode"),
@@ -171,9 +172,10 @@ private:
required_device<cpu_device> m_maincpu;
optional_shared_ptr<uint8_t> m_hardhead_ip;
+ memory_share_creator<uint8_t> m_banked_spriteram;
optional_shared_ptr<uint8_t> m_spriteram;
optional_shared_ptr<uint8_t> m_wram;
- optional_shared_ptr<uint8_t> m_banked_paletteram;
+ memory_share_creator<uint8_t> m_banked_paletteram;
required_device<cpu_device> m_audiocpu;
optional_device<samples_device> m_samples;
required_device<gfxdecode_device> m_gfxdecode;
diff --git a/src/mame/includes/taito_f3.h b/src/mame/includes/taito_f3.h
index 5d9624fd2f8..9e127281b9c 100644
--- a/src/mame/includes/taito_f3.h
+++ b/src/mame/includes/taito_f3.h
@@ -68,12 +68,12 @@ public:
m_screen(*this, "screen"),
m_palette(*this, "palette"),
m_eeprom(*this, "eeprom"),
- m_textram(*this, "textram", 0),
- m_spriteram(*this, "spriteram", 0),
- m_charram(*this, "charram", 0),
- m_line_ram(*this, "line_ram", 0),
- m_pf_ram(*this, "pf_ram", 0),
- m_pivot_ram(*this, "pivot_ram", 0),
+ m_textram(*this, "textram"),
+ m_spriteram(*this, "spriteram"),
+ m_charram(*this, "charram"),
+ m_line_ram(*this, "line_ram"),
+ m_pf_ram(*this, "pf_ram"),
+ m_pivot_ram(*this, "pivot_ram"),
m_input(*this, "IN.%u", 0),
m_dial(*this, "DIAL.%u", 0),
m_eepromin(*this, "EEPROMIN"),
diff --git a/src/mame/includes/tandy2k.h b/src/mame/includes/tandy2k.h
index f1aca034a7d..c2dab934673 100644
--- a/src/mame/includes/tandy2k.h
+++ b/src/mame/includes/tandy2k.h
@@ -70,7 +70,7 @@ public:
m_rs232(*this, RS232_TAG),
m_kb(*this, TANDY2K_KEYBOARD_TAG),
m_hires_ram(*this, "hires_ram"),
- m_char_ram(*this, "char_ram"),
+ m_char_ram(*this, "char_ram", 0x1000, ENDIANNESS_LITTLE),
m_pc_keyboard(*this, "pc_keyboard"),
m_dma_mux(0),
m_kbdclk(0),
@@ -138,7 +138,7 @@ private:
required_device<rs232_port_device> m_rs232;
required_device<tandy2k_keyboard_device> m_kb;
required_shared_ptr<uint16_t> m_hires_ram;
- optional_shared_ptr<uint8_t> m_char_ram;
+ memory_share_creator<uint8_t> m_char_ram;
required_device<pc_keyboard_device> m_pc_keyboard; // temporary until the tandy keyboard has a rom dump
virtual void machine_start() override;
diff --git a/src/mame/includes/taotaido.h b/src/mame/includes/taotaido.h
index d72920236d8..0eb5d97923b 100644
--- a/src/mame/includes/taotaido.h
+++ b/src/mame/includes/taotaido.h
@@ -26,7 +26,7 @@ public:
m_scrollram(*this, "scrollram"),
m_bgram(*this, "bgram"),
m_soundbank(*this, "soundbank"),
- m_spritebank(*this, "spritebank", 0)
+ m_spritebank(*this, "spritebank")
{ }
void taotaido(machine_config &config);
diff --git a/src/mame/includes/tiki100.h b/src/mame/includes/tiki100.h
index f9fe9555224..35d03cef763 100644
--- a/src/mame/includes/tiki100.h
+++ b/src/mame/includes/tiki100.h
@@ -61,7 +61,7 @@ public:
m_exp(*this, "tiki100bus"),
m_rom(*this, Z80_TAG),
m_prom(*this, "u4"),
- m_video_ram(*this, "video_ram"),
+ m_video_ram(*this, "video_ram", TIKI100_VIDEORAM_SIZE, ENDIANNESS_LITTLE),
m_y(*this, "Y%u", 1),
m_st_io(*this, "ST"),
m_palette(*this, "palette"),
@@ -125,7 +125,7 @@ private:
required_device<tiki100_bus_device> m_exp;
required_memory_region m_rom;
required_memory_region m_prom;
- optional_shared_ptr<uint8_t> m_video_ram;
+ memory_share_creator<uint8_t> m_video_ram;
required_ioport_array<13> m_y;
required_ioport m_st_io;
required_device<palette_device> m_palette;
diff --git a/src/mame/includes/tmc1800.h b/src/mame/includes/tmc1800.h
index e8f6bb53e0a..ce026df557e 100644
--- a/src/mame/includes/tmc1800.h
+++ b/src/mame/includes/tmc1800.h
@@ -119,7 +119,7 @@ public:
tmc2000_state(const machine_config &mconfig, device_type type, const char *tag)
: tmc1800_base_state(mconfig, type, tag)
, m_cti(*this, CDP1864_TAG)
- , m_colorram(*this, "color_ram")
+ , m_colorram(*this, "color_ram", TMC2000_COLORRAM_SIZE, ENDIANNESS_LITTLE)
, m_key_row(*this, {"Y0", "Y1", "Y2", "Y3", "Y4", "Y5", "Y6", "Y7"})
, m_led(*this, "led1")
{ }
@@ -148,7 +148,7 @@ protected:
virtual void machine_reset() override;
required_device<cdp1864_device> m_cti;
- optional_shared_ptr<uint8_t> m_colorram;
+ memory_share_creator<uint8_t> m_colorram;
required_ioport_array<8> m_key_row;
output_finder<> m_led;
diff --git a/src/mame/includes/tmc600.h b/src/mame/includes/tmc600.h
index 53641a92fc2..e1c6b79a68a 100644
--- a/src/mame/includes/tmc600.h
+++ b/src/mame/includes/tmc600.h
@@ -41,7 +41,7 @@ public:
m_ram(*this, RAM_TAG),
m_char_rom(*this, "chargen"),
m_page_ram(*this, "page_ram"),
- m_color_ram(*this, "color_ram"),
+ m_color_ram(*this, "color_ram", TMC600_PAGE_RAM_SIZE, ENDIANNESS_LITTLE),
m_run(*this, "RUN"),
m_key_row(*this, "Y%u", 0)
{ }
@@ -59,7 +59,7 @@ private:
required_device<ram_device> m_ram;
required_region_ptr<uint8_t> m_char_rom;
required_shared_ptr<uint8_t> m_page_ram;
- optional_shared_ptr<uint8_t> m_color_ram;
+ memory_share_creator<uint8_t> m_color_ram;
required_ioport m_run;
required_ioport_array<8> m_key_row;
diff --git a/src/mame/includes/toaplan1.h b/src/mame/includes/toaplan1.h
index 1fd19c1e5ef..a406e6cd0a3 100644
--- a/src/mame/includes/toaplan1.h
+++ b/src/mame/includes/toaplan1.h
@@ -27,7 +27,7 @@ public:
m_sharedram(*this, "sharedram"),
m_dswb_io(*this, "DSWB"),
m_tjump_io(*this, "TJUMP"),
- m_spriteram(*this, "spriteram"),
+ m_spriteram(*this, "spriteram", 0x800, ENDIANNESS_BIG),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_ymsnd(*this, "ymsnd"),
@@ -66,7 +66,7 @@ protected:
std::unique_ptr<u16[]> m_tilevram[0]; // \/
*/
- optional_shared_ptr<u16> m_spriteram;
+ memory_share_creator<u16> m_spriteram;
std::unique_ptr<u16[]> m_buffered_spriteram;
std::unique_ptr<u16[]> m_spritesizeram;
std::unique_ptr<u16[]> m_buffered_spritesizeram;
diff --git a/src/mame/includes/trs80m2.h b/src/mame/includes/trs80m2.h
index f8ad4daf51a..e54443e1b89 100644
--- a/src/mame/includes/trs80m2.h
+++ b/src/mame/includes/trs80m2.h
@@ -58,7 +58,7 @@ public:
m_kb(*this, TRS80M2_KEYBOARD_TAG),
m_rom(*this, Z80_TAG),
m_char_rom(*this, MC6845_TAG),
- m_video_ram(*this, "video_ram")
+ m_video_ram(*this, "video_ram", 0x800, ENDIANNESS_LITTLE)
{
}
@@ -120,7 +120,7 @@ protected:
required_device<trs80m2_keyboard_device> m_kb;
required_memory_region m_rom;
required_memory_region m_char_rom;
- optional_shared_ptr<uint8_t> m_video_ram;
+ memory_share_creator<uint8_t> m_video_ram;
// memory state
int m_boot_rom;
diff --git a/src/mame/includes/twin16.h b/src/mame/includes/twin16.h
index 349bceaf284..4078d1cf2cb 100644
--- a/src/mame/includes/twin16.h
+++ b/src/mame/includes/twin16.h
@@ -148,6 +148,7 @@ public:
private:
void nvram_bank_w(uint8_t data);
+ void cuebrickj_main_map(address_map &map);
uint16_t m_nvram[0x400 * 0x20 / 2];
};
diff --git a/src/mame/includes/unico.h b/src/mame/includes/unico.h
index bb78d4d7a31..edf108480a9 100644
--- a/src/mame/includes/unico.h
+++ b/src/mame/includes/unico.h
@@ -21,9 +21,9 @@ public:
m_gfxdecode(*this, "gfxdecode"),
m_oki(*this, "oki"),
m_leds(*this, "led%u", 0U),
- m_vram(*this, "vram", 0),
- m_scroll(*this, "scroll", 0),
- m_spriteram(*this, "spriteram", 0)
+ m_vram(*this, "vram"),
+ m_scroll(*this, "scroll"),
+ m_spriteram(*this, "spriteram")
{ }
void burglarx(machine_config &config);
diff --git a/src/mame/includes/v1050.h b/src/mame/includes/v1050.h
index 62169002c05..19b16368c74 100644
--- a/src/mame/includes/v1050.h
+++ b/src/mame/includes/v1050.h
@@ -91,7 +91,7 @@ public:
m_sasi_ctrl_in(*this, "scsi_ctrl_in"),
m_rom(*this, Z80_TAG),
m_video_ram(*this, "video_ram"),
- m_attr_ram(*this, "attr_ram"),
+ m_attr_ram(*this, "attr_ram", V1050_VIDEORAM_SIZE, ENDIANNESS_LITTLE),
m_int_mask(0),
m_int_state(0),
m_fdc_irq(0),
@@ -199,7 +199,7 @@ private:
required_device<input_buffer_device> m_sasi_ctrl_in;
required_memory_region m_rom;
required_shared_ptr<uint8_t> m_video_ram;
- optional_shared_ptr<uint8_t> m_attr_ram;
+ memory_share_creator<uint8_t> m_attr_ram;
// interrupt state
uint8_t m_int_mask; // interrupt mask
diff --git a/src/mame/includes/vsnes.h b/src/mame/includes/vsnes.h
index 4aed6841d06..ad323775ade 100644
--- a/src/mame/includes/vsnes.h
+++ b/src/mame/includes/vsnes.h
@@ -18,6 +18,8 @@ public:
, m_work_ram(*this, "work_ram")
, m_work_ram_1(*this, "work_ram_1")
, m_gfx1_rom(*this, "gfx1")
+ , m_chr_banks(*this, "chr%u", 0U)
+ , m_bank_vrom(*this, "vrom%u", 0U)
{
}
@@ -58,6 +60,7 @@ private:
optional_shared_ptr<uint8_t> m_work_ram_1;
optional_memory_region m_gfx1_rom;
+ memory_bank_array_creator<8> m_chr_banks;
void sprite_dma_0_w(address_space &space, uint8_t data);
void sprite_dma_1_w(address_space &space, uint8_t data);
@@ -123,9 +126,10 @@ private:
int m_sound_fix;
uint8_t m_last_bank;
std::unique_ptr<uint8_t[]> m_vram;
+ std::unique_ptr<uint8_t[]> m_extraram;
uint8_t* m_vrom[2];
std::unique_ptr<uint8_t[]> m_nt_ram[2];
- memory_bank* m_bank_vrom[8];
+ memory_bank_array_creator<8> m_bank_vrom;
uint8_t* m_nt_page[2][4];
uint32_t m_vrom_size[2];
int m_vrom_banks;
diff --git a/src/mame/includes/xor100.h b/src/mame/includes/xor100.h
index 25bb81e399e..efb60b45e8f 100644
--- a/src/mame/includes/xor100.h
+++ b/src/mame/includes/xor100.h
@@ -47,6 +47,9 @@ public:
, m_floppy2(*this, WD1795_TAG":2")
, m_floppy3(*this, WD1795_TAG":3")
, m_rom(*this, Z80_TAG)
+ , m_bank1(*this, "bank1")
+ , m_bank2(*this, "bank2")
+ , m_bank3(*this, "bank3")
{ }
void xor100(machine_config &config);
@@ -90,6 +93,9 @@ private:
required_device<floppy_connector> m_floppy2;
required_device<floppy_connector> m_floppy3;
required_memory_region m_rom;
+ required_memory_bank m_bank1;
+ required_memory_bank m_bank2;
+ required_memory_bank m_bank3;
// memory state
int m_mode;
diff --git a/src/mame/includes/zaxxon.h b/src/mame/includes/zaxxon.h
index 06289810ecc..4d4f9a267ae 100644
--- a/src/mame/includes/zaxxon.h
+++ b/src/mame/includes/zaxxon.h
@@ -29,7 +29,7 @@ public:
m_palette(*this, "palette"),
m_dials(*this, "DIAL.%u", 0),
m_videoram(*this, "videoram"),
- m_spriteram(*this, "spriteram"),
+ m_spriteram(*this, "spriteram", 0x100, ENDIANNESS_LITTLE),
m_colorram(*this, "colorram"),
m_decrypted_opcodes(*this, "decrypted_opcodes")
{ }
@@ -64,7 +64,7 @@ private:
optional_ioport_array<2> m_dials;
required_shared_ptr<uint8_t> m_videoram;
- optional_shared_ptr<uint8_t> m_spriteram;
+ memory_share_creator<uint8_t> m_spriteram;
optional_shared_ptr<uint8_t> m_colorram;
optional_shared_ptr<uint8_t> m_decrypted_opcodes;
diff --git a/src/mame/machine/315_5195.cpp b/src/mame/machine/315_5195.cpp
index 698909cbc7e..d7929f34826 100644
--- a/src/mame/machine/315_5195.cpp
+++ b/src/mame/machine/315_5195.cpp
@@ -235,19 +235,17 @@ void sega_315_5195_mapper_device::map_as_rom(u32 offset, u32 length, offs_t mirr
if (rgnoffset + romend + 1 - info.start >= romsize)
romend = romsize - 1 - rgnoffset + info.start;
+ // find the memory
+ void *memptr = m_cpuregion->base() + rgnoffset;
+
+ // remember this bank, and decrypt if necessary
+ void *decrypt = m_banks[m_curregion].set(info.start, romend, rgnoffset, memptr);
+
// map now
- m_space->install_read_bank(info.start, romend, info.mirror, bank_name);
+ m_space->install_rom(info.start, romend, info.mirror, memptr);
if (m_decrypted_space)
- m_decrypted_space->install_read_bank(info.start, romend, info.mirror, decrypted_bank_name);
-
- // configure the bank
- memory_bank *bank = owner()->membank(bank_name);
- memory_bank *decrypted_bank = owner()->membank(decrypted_bank_name);
- u8 *memptr = m_cpuregion->base() + rgnoffset;
- bank->set_base(memptr);
+ m_decrypted_space->install_rom(info.start, romend, info.mirror, decrypt ? decrypt : memptr);
- // remember this bank, and decrypt if necessary
- m_banks[m_curregion].set(bank, decrypted_bank, info.start, romend, rgnoffset, memptr);
}
// either install a write handler if provided or unmap the region
@@ -276,17 +274,11 @@ void sega_315_5195_mapper_device::map_as_ram(u32 offset, u32 length, offs_t mirr
whandler.isnull() ? "none" : whandler.name());
// map now
- m_space->install_read_bank(info.start, info.end, info.mirror, bank_share_name);
+ m_space->install_ram(info.start, info.end, info.mirror, owner()->memshare(bank_share_name)->ptr());
// either install a write handler or a write bank, as appropriate
if (!whandler.isnull())
m_space->install_write_handler(info.start, info.end, 0, info.mirror, 0, whandler);
- else
- m_space->install_write_bank(info.start, info.end, info.mirror, bank_share_name);
-
- // configure the bank
- memory_bank *bank = owner()->membank(bank_share_name);
- bank->set_base(owner()->memshare(bank_share_name)->ptr());
// clear this rom bank reference
m_banks[m_curregion].clear();
@@ -505,9 +497,7 @@ void sega_315_5195_mapper_device::update_mapping()
//-------------------------------------------------
sega_315_5195_mapper_device::decrypt_bank::decrypt_bank()
- : m_bank(nullptr)
- , m_decrypted_bank(nullptr)
- , m_start(0)
+ : m_start(0)
, m_end(0)
, m_rgnoffs(~0)
, m_srcptr(nullptr)
@@ -557,33 +547,31 @@ void sega_315_5195_mapper_device::decrypt_bank::set_decrypt(fd1094_device *fd109
// a change
//-------------------------------------------------
-void sega_315_5195_mapper_device::decrypt_bank::set(memory_bank *bank, memory_bank *decrypted_bank, offs_t start, offs_t end, offs_t rgnoffs, u8 *src)
+void *sega_315_5195_mapper_device::decrypt_bank::set(offs_t start, offs_t end, offs_t rgnoffs, void *src)
{
// ignore if not encrypted
if (m_fd1089 == nullptr && m_fd1094_cache == nullptr)
- return;
+ return nullptr;
// ignore if nothing is changing
- if (bank == m_bank && start == m_start && end == m_end && rgnoffs == m_rgnoffs && src == m_srcptr)
- return;
+ if (start == m_start && end == m_end && rgnoffs == m_rgnoffs && src == m_srcptr)
+ return nullptr;
// if the start, end, or src change, throw away any cached data
reset();
// update to the current state
- m_bank = bank;
- m_decrypted_bank = decrypted_bank;
m_start = start;
m_end = end;
m_rgnoffs = rgnoffs;
- m_srcptr = src;
+ m_srcptr = static_cast<u8 *>(src);
// configure the fd1094 cache
if (m_fd1094_cache != nullptr)
m_fd1094_cache->configure(m_start, m_end + 1 - m_start, m_rgnoffs);
// force an update of what we have
- update();
+ return update();
}
@@ -592,21 +580,22 @@ void sega_315_5195_mapper_device::decrypt_bank::set(memory_bank *bank, memory_ba
// if this rom bank has been assigned
//-------------------------------------------------
-void sega_315_5195_mapper_device::decrypt_bank::update()
+void *sega_315_5195_mapper_device::decrypt_bank::update()
{
// if this isn't a valid state, don't try to do anything
- if (m_bank == nullptr || m_srcptr == nullptr)
- return;
+ if (m_srcptr == nullptr)
+ return nullptr;
// fd1089 case
if (m_fd1089 != nullptr)
{
m_fd1089_decrypted.resize((m_end + 1 - m_start) / 2);
m_fd1089->decrypt(m_start, m_end + 1 - m_start, m_rgnoffs, &m_fd1089_decrypted[0], reinterpret_cast<u16 *>(m_srcptr));
- m_decrypted_bank->set_base(&m_fd1089_decrypted[0]);
+ return &m_fd1089_decrypted[0];
}
// fd1094 case
if (m_fd1094_cache != nullptr)
- m_decrypted_bank->set_base(m_fd1094_cache->decrypted_opcodes(m_fd1094_cache->fd1094().state()));
+ return m_fd1094_cache->decrypted_opcodes(m_fd1094_cache->fd1094().state());
+ return nullptr;
}
diff --git a/src/mame/machine/315_5195.h b/src/mame/machine/315_5195.h
index bc95415a2cd..0386cbccb8b 100644
--- a/src/mame/machine/315_5195.h
+++ b/src/mame/machine/315_5195.h
@@ -92,17 +92,15 @@ private:
// configuration
void set_decrypt(fd1089_base_device *fd1089);
void set_decrypt(fd1094_device *fd1094);
- void clear() { set(nullptr, nullptr, 0, 0, ~0, nullptr); }
- void set(memory_bank *bank, memory_bank *decrypted_bank, offs_t start, offs_t end, offs_t rgnoffs, u8 *src);
+ void clear() { set(0, 0, ~0, nullptr); }
+ void *set(offs_t start, offs_t end, offs_t rgnoffs, void *src);
// updating
- void update();
+ void *update();
void reset() { m_fd1089_decrypted.clear(); if (m_fd1094_cache != nullptr) m_fd1094_cache->reset(); }
private:
// internal state
- memory_bank * m_bank;
- memory_bank * m_decrypted_bank;
offs_t m_start;
offs_t m_end;
offs_t m_rgnoffs;
diff --git a/src/mame/machine/abc1600mac.cpp b/src/mame/machine/abc1600mac.cpp
index 156ca960213..3b6e70ab955 100644
--- a/src/mame/machine/abc1600mac.cpp
+++ b/src/mame/machine/abc1600mac.cpp
@@ -112,8 +112,8 @@ abc1600_mac_device::abc1600_mac_device(const machine_config &mconfig, const char
device_memory_interface(mconfig, *this),
m_space_config("program", ENDIANNESS_LITTLE, 8, 22, 0, address_map_constructor(FUNC(abc1600_mac_device::program_map), this)),
m_rom(*this, "boot"),
- m_segment_ram(*this, "segment_ram"),
- m_page_ram(*this, "page_ram"),
+ m_segment_ram(*this, "segment_ram", 0x400, ENDIANNESS_LITTLE),
+ m_page_ram(*this, "page_ram", 0x800, ENDIANNESS_LITTLE),
m_watchdog(*this, "watchdog"),
m_cpu(*this, finder_base::DUMMY_TAG),
m_task(0),
@@ -128,10 +128,6 @@ abc1600_mac_device::abc1600_mac_device(const machine_config &mconfig, const char
void abc1600_mac_device::device_start()
{
- // allocate memory
- m_segment_ram.allocate(0x400);
- m_page_ram.allocate(0x400);
-
// HACK fill segment RAM or abcenix won't boot
memset(m_segment_ram, 0xcd, 0x400);
//memset(m_page_ram, 0xcd, 0x400);
diff --git a/src/mame/machine/abc1600mac.h b/src/mame/machine/abc1600mac.h
index a0b1a4c0097..7e6bda2d01e 100644
--- a/src/mame/machine/abc1600mac.h
+++ b/src/mame/machine/abc1600mac.h
@@ -105,8 +105,8 @@ private:
const address_space_config m_space_config;
required_memory_region m_rom;
- optional_shared_ptr<uint8_t> m_segment_ram;
- optional_shared_ptr<uint16_t> m_page_ram;
+ memory_share_creator<uint8_t> m_segment_ram;
+ memory_share_creator<uint16_t> m_page_ram;
required_device<watchdog_timer_device> m_watchdog;
diff --git a/src/mame/machine/advision.cpp b/src/mame/machine/advision.cpp
index be87f01ebbc..0a74cef6ccf 100644
--- a/src/mame/machine/advision.cpp
+++ b/src/mame/machine/advision.cpp
@@ -33,7 +33,7 @@ void advision_state::machine_start()
m_bank1->configure_entry(0, memregion(I8048_TAG)->base());
if (m_cart_rom)
m_bank1->configure_entry(1, m_cart_rom->base());
- m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x0000, 0x03ff, "bank1");
+ m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x0000, 0x03ff, m_bank1);
m_bank1->set_entry(0);
m_sound_d = 0;
diff --git a/src/mame/machine/asteroid.cpp b/src/mame/machine/asteroid.cpp
index 1f629d4917c..72744e42110 100644
--- a/src/mame/machine/asteroid.cpp
+++ b/src/mame/machine/asteroid.cpp
@@ -117,15 +117,12 @@ void asteroid_state::machine_start()
/* configure RAM banks if present (not on llander) */
if (m_ram1.target() != nullptr)
{
- uint8_t *ram1 = reinterpret_cast<uint8_t *>(memshare("ram1")->ptr());
- uint8_t *ram2 = reinterpret_cast<uint8_t *>(memshare("ram2")->ptr());
-
/* swapped */
- m_ram1->configure_entry(1, ram2);
- m_ram2->configure_entry(1, ram1);
+ m_ram1->configure_entry(1, m_sram2);
+ m_ram2->configure_entry(1, m_sram1);
/* normal */
- m_ram1->configure_entry(0, ram1);
- m_ram2->configure_entry(0, ram2);
+ m_ram1->configure_entry(0, m_sram1);
+ m_ram2->configure_entry(0, m_sram2);
}
}
diff --git a/src/mame/machine/b2m.cpp b/src/mame/machine/b2m.cpp
index fae7b699f9c..74334bdada6 100644
--- a/src/mame/machine/b2m.cpp
+++ b/src/mame/machine/b2m.cpp
@@ -40,98 +40,54 @@ void b2m_state::set_bank(int bank)
address_space &space = m_maincpu->space(AS_PROGRAM);
uint8_t *ram = m_ram->pointer();
- space.install_write_bank(0x0000, 0x27ff, "bank1");
- space.install_write_bank(0x2800, 0x2fff, "bank2");
- space.install_write_bank(0x3000, 0x6fff, "bank3");
- space.install_write_bank(0x7000, 0xdfff, "bank4");
- space.install_write_bank(0xe000, 0xffff, "bank5");
+ space.install_ram(0x0000, 0xffff, ram);
rom = memregion("maincpu")->base();
switch(bank) {
- case 0 :
- case 1 :
- space.unmap_write(0xe000, 0xffff);
-
- membank("bank1")->set_base(ram);
- membank("bank2")->set_base(ram + 0x2800);
- membank("bank3")->set_base(ram + 0x3000);
- membank("bank4")->set_base(ram + 0x7000);
- membank("bank5")->set_base(rom);
- break;
-#if 0
- case 1 :
- space.unmap_write(0x3000, 0x6fff);
- space.unmap_write(0xe000, 0xffff);
-
- membank("bank1")->set_base(ram);
- membank("bank2")->set_base(ram + 0x2800);
- membank("bank3")->set_base(rom + 0x2000);
- membank("bank4")->set_base(rom + 0x6000);
- membank("bank5")->set_base(rom);
- break;
-#endif
- case 2 :
- space.unmap_write(0x2800, 0x2fff);
- space.unmap_write(0xe000, 0xffff);
-
- membank("bank1")->set_base(ram);
- space.install_read_handler(0x2800, 0x2fff, read8sm_delegate(*this, FUNC(b2m_state::keyboard_r)));
- membank("bank3")->set_base(ram + 0x10000);
- membank("bank4")->set_base(ram + 0x7000);
- membank("bank5")->set_base(rom);
- break;
- case 3 :
- space.unmap_write(0x2800, 0x2fff);
- space.unmap_write(0xe000, 0xffff);
-
- membank("bank1")->set_base(ram);
- space.install_read_handler(0x2800, 0x2fff, read8sm_delegate(*this, FUNC(b2m_state::keyboard_r)));
- membank("bank3")->set_base(ram + 0x14000);
- membank("bank4")->set_base(ram + 0x7000);
- membank("bank5")->set_base(rom);
- break;
- case 4 :
- space.unmap_write(0x2800, 0x2fff);
- space.unmap_write(0xe000, 0xffff);
-
- membank("bank1")->set_base(ram);
- space.install_read_handler(0x2800, 0x2fff, read8sm_delegate(*this, FUNC(b2m_state::keyboard_r)));
- membank("bank3")->set_base(ram + 0x18000);
- membank("bank4")->set_base(ram + 0x7000);
- membank("bank5")->set_base(rom);
-
- break;
- case 5 :
- space.unmap_write(0x2800, 0x2fff);
- space.unmap_write(0xe000, 0xffff);
-
- membank("bank1")->set_base(ram);
- space.install_read_handler(0x2800, 0x2fff, read8sm_delegate(*this, FUNC(b2m_state::keyboard_r)));
- membank("bank3")->set_base(ram + 0x1c000);
- membank("bank4")->set_base(ram + 0x7000);
- membank("bank5")->set_base(rom);
-
- break;
- case 6 :
- membank("bank1")->set_base(ram);
- membank("bank2")->set_base(ram + 0x2800);
- membank("bank3")->set_base(ram + 0x3000);
- membank("bank4")->set_base(ram + 0x7000);
- membank("bank5")->set_base(ram + 0xe000);
- break;
- case 7 :
- space.unmap_write(0x0000, 0x27ff);
- space.unmap_write(0x2800, 0x2fff);
- space.unmap_write(0x3000, 0x6fff);
- space.unmap_write(0x7000, 0xdfff);
- space.unmap_write(0xe000, 0xffff);
-
- membank("bank1")->set_base(rom);
- membank("bank2")->set_base(rom);
- membank("bank3")->set_base(rom);
- membank("bank4")->set_base(rom);
- membank("bank5")->set_base(rom);
- break;
+ case 0 :
+ case 1 :
+ space.unmap_write(0xe000, 0xffff);
+ space.install_rom(0xe000, 0xffff, rom);
+ break;
+ case 2 :
+ space.unmap_write(0x2800, 0x2fff);
+ space.install_read_handler(0x2800, 0x2fff, read8sm_delegate(*this, FUNC(b2m_state::keyboard_r)));
+ space.install_ram(0x3000, 0x6fff, ram + 0x10000);
+ space.unmap_write(0xe000, 0xffff);
+ space.install_rom(0xe000, 0xffff, rom);
+ break;
+ case 3 :
+ space.unmap_write(0x2800, 0x2fff);
+ space.install_read_handler(0x2800, 0x2fff, read8sm_delegate(*this, FUNC(b2m_state::keyboard_r)));
+ space.install_ram(0x3000, 0x6fff, ram + 0x14000);
+ space.unmap_write(0xe000, 0xffff);
+ space.install_rom(0xe000, 0xffff, rom);
+ break;
+ case 4 :
+ space.install_read_handler(0x2800, 0x2fff, read8sm_delegate(*this, FUNC(b2m_state::keyboard_r)));
+ space.install_ram(0x3000, 0x6fff, ram + 0x18000);
+ space.unmap_write(0xe000, 0xffff);
+ space.install_rom(0xe000, 0xffff, rom);
+ break;
+ case 5 :
+ space.unmap_write(0x2800, 0x2fff);
+ space.install_read_handler(0x2800, 0x2fff, read8sm_delegate(*this, FUNC(b2m_state::keyboard_r)));
+ space.install_ram(0x3000, 0x6fff, ram + 0x1c000);
+ space.unmap_write(0xe000, 0xffff);
+ space.install_rom(0xe000, 0xffff, rom);
+ break;
+ case 6 :
+ break;
+ case 7 :
+ space.unmap_write(0x0000, 0xffff);
+ space.unmap_read(0x0000, 0xffff);
+
+ space.install_rom(0x0000, 0x1fff, rom);
+ space.install_rom(0x2800, 0x2fff, rom);
+ space.install_rom(0x3000, 0x4fff, rom);
+ space.install_rom(0x7000, 0x8fff, rom);
+ space.install_rom(0xe000, 0xffff, rom);
+ break;
}
}
diff --git a/src/mame/machine/bebox.cpp b/src/mame/machine/bebox.cpp
index ea64354a1f4..2b7b219ce28 100644
--- a/src/mame/machine/bebox.cpp
+++ b/src/mame/machine/bebox.cpp
@@ -769,9 +769,8 @@ void bebox_state::init_bebox()
membank("bank2")->set_base(memregion("user2")->base());
/* install MESS managed RAM */
- space_0.install_readwrite_bank(0, m_ram->size() - 1, 0x02000000, "bank3");
- space_1.install_readwrite_bank(0, m_ram->size() - 1, 0x02000000, "bank3");
- membank("bank3")->set_base(m_ram->pointer());
+ space_0.install_ram(0, m_ram->size() - 1, 0x02000000, m_ram->pointer());
+ space_1.install_ram(0, m_ram->size() - 1, 0x02000000, m_ram->pointer());
/* The following is a verrrry ugly hack put in to support NetBSD for
* NetBSD. When NetBSD/bebox it does most of its work on CPU #0 and then
@@ -791,7 +790,6 @@ void bebox_state::init_bebox()
/* bcctr 0x14, 0 */
0x4E80042000000000U
};
- space_1.install_read_bank(0x9421FFF0, 0x9421FFFF, "bank1");
- membank("bank1")->set_base(ops);
+ space_1.install_rom(0x9421FFF0, 0x9421FFFF, ops);
}
}
diff --git a/src/mame/machine/dgn_beta.cpp b/src/mame/machine/dgn_beta.cpp
index 7412954bb45..1a686a205c0 100644
--- a/src/mame/machine/dgn_beta.cpp
+++ b/src/mame/machine/dgn_beta.cpp
@@ -214,7 +214,6 @@ void dgn_beta_state::UpdateBanks(int first, int last)
//
void dgn_beta_state::SetDefaultTask()
{
-// uint8_t *videoram = m_videoram;
int Idx;
LOG_DEFAULT_TASK(("SetDefaultTask()\n"));
@@ -918,8 +917,6 @@ void dgn_beta_state::machine_reset()
m_DMA_NMI_LAST = 0x80; /* start with DMA NMI inactive, as pulled up */
// DMA_NMI = CLEAR_LINE; /* start with DMA NMI inactive */
- m_videoram.set_target(m_ram->pointer(),m_videoram.bytes()); /* Point video ram at the start of physical ram */
-
m_wd2797_written=0;
m_maincpu->reset();
diff --git a/src/mame/machine/dragon.cpp b/src/mame/machine/dragon.cpp
index 3499c6553bd..d3a8abed97e 100644
--- a/src/mame/machine/dragon.cpp
+++ b/src/mame/machine/dragon.cpp
@@ -186,8 +186,8 @@ void d64plus_state::d64plus_bank_w(uint8_t data)
switch (data & 0x06)
{
case 0: // Standard Dragon 32 Dynamic bank
- space.install_write_bank(0x0000, 0x7fff, "bank0000_w");
- space.install_read_bank(0x0000, 0x7fff, "bank0000_r");
+ space.install_write_bank(0x0000, 0x7fff, membank(":sam:bank0000_w"));
+ space.install_read_bank(0x0000, 0x7fff, membank(":sam:bank0000_r"));
break;
case 2: // First extra 32K bank (A)
space.install_ram(0x0000, 0x7fff, m_plus_ram + 0x0000);
@@ -241,10 +241,6 @@ void d64plus_state::device_start()
space.install_readwrite_handler(0xffe0, 0xffe0, read8smo_delegate(*m_crtc, FUNC(mc6845_device::status_r)), write8smo_delegate(*m_crtc, FUNC(mc6845_device::address_w)));
space.install_readwrite_handler(0xffe1, 0xffe1, read8smo_delegate(*m_crtc, FUNC(mc6845_device::register_r)), write8smo_delegate(*m_crtc, FUNC(mc6845_device::register_w)));
space.install_readwrite_handler(0xffe2, 0xffe2, read8smo_delegate(*this, FUNC(d64plus_state::d64plus_6845_disp_r)), write8smo_delegate(*this, FUNC(d64plus_state::d64plus_bank_w)));
-
- // allocate memory
- m_plus_ram.allocate(0x10000);
- m_video_ram.allocate(0x800);
}
diff --git a/src/mame/machine/galaxy.cpp b/src/mame/machine/galaxy.cpp
index e8badb08f6e..269cd14cbb3 100644
--- a/src/mame/machine/galaxy.cpp
+++ b/src/mame/machine/galaxy.cpp
@@ -144,8 +144,7 @@ SNAPSHOT_LOAD_MEMBER(galaxy_state::snapshot_cb)
void galaxy_state::init_galaxy()
{
address_space &space = m_maincpu->space(AS_PROGRAM);
- space.install_readwrite_bank( 0x2800, 0x2800 + m_ram->size() - 1, "bank1");
- membank("bank1")->set_base(m_ram->pointer());
+ space.install_ram( 0x2800, 0x2800 + m_ram->size() - 1, m_ram->pointer());
if (m_ram->size() < (6 + 48) * 1024)
space.nop_readwrite( 0x2800 + m_ram->size(), 0xffff);
diff --git a/src/mame/machine/gamecom.cpp b/src/mame/machine/gamecom.cpp
index 2116ca64a29..94ce240f443 100644
--- a/src/mame/machine/gamecom.cpp
+++ b/src/mame/machine/gamecom.cpp
@@ -616,7 +616,7 @@ void gamecom_state::init_gamecom()
m_sound1_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gamecom_state::gamecom_sound1_timer_callback),this));
m_sound0_timer->adjust(attotime::from_seconds(1), 0, attotime::from_seconds(1));
m_sound1_timer->adjust(attotime::from_seconds(1), 0, attotime::from_seconds(1));
- m_p_ram = m_region_maincpu->base(); // required here because pio_w gets called before machine_reset
+ m_p_ram = m_share_maincpu; // required here because pio_w gets called before machine_reset
}
image_init_result gamecom_state::common_load(device_image_interface &image, generic_slot_device *slot)
diff --git a/src/mame/machine/hec2hrp.cpp b/src/mame/machine/hec2hrp.cpp
index 2a7264fe668..452e4efebc3 100644
--- a/src/mame/machine/hec2hrp.cpp
+++ b/src/mame/machine/hec2hrp.cpp
@@ -566,7 +566,6 @@ void hec2hrp_state::video_start()
save_item(NAME(m_counter_write));
save_item(NAME(m_irq_current_state));
save_item(NAME(m_nmi_current_state));
- save_item(NAME(m_hector_videoram_hrx));
}
diff --git a/src/mame/machine/hp48.cpp b/src/mame/machine/hp48.cpp
index 562bad1adf5..954dc8c5208 100644
--- a/src/mame/machine/hp48.cpp
+++ b/src/mame/machine/hp48.cpp
@@ -638,12 +638,10 @@ void hp48_state::apply_modules()
int bank_hi = (m_bank_switch >> 1) & 15;
LOG(("hp48_state::apply_modules: low ROM bank is %i\n", bank_lo));
LOG(("hp48_state::apply_modules: high ROM bank is %i\n", bank_hi));
- space.install_read_bank(0x00000, 0x3ffff, 0x80000, "bank5");
- space.install_read_bank(0x40000, 0x7ffff, 0x80000, "bank6");
if (m_rom)
{
- membank("bank5")->set_base(m_rom + bank_lo * 0x40000);
- membank("bank6")->set_base(m_rom + bank_hi * 0x40000);
+ space.install_rom(0x00000, 0x3ffff, 0x80000, m_rom + bank_lo * 0x40000);
+ space.install_rom(0x40000, 0x7ffff, 0x80000, m_rom + bank_hi * 0x40000);
}
}
else if (HP48_G_SERIES)
@@ -662,27 +660,22 @@ void hp48_state::apply_modules()
/* A19 */
LOG(("hp48_state::apply_modules: A19 enabled, NCE3 disabled\n"));
nce3_enable = 0;
- space.install_read_bank(0, 0xfffff, "bank5");
+ if (m_rom)
+ space.install_rom(0, 0xfffff, m_rom);
}
else
{
/* NCE3 */
nce3_enable = m_bank_switch >> 6;
LOG(("hp48_apply_modules: A19 disabled, NCE3 %s\n", nce3_enable ? "enabled" : "disabled"));
- space.install_read_bank(0, 0x7ffff, 0x80000, "bank5");
- }
- if (m_rom)
- {
- membank("bank5")->set_base(m_rom);
+ if (m_rom)
+ space.install_rom(0, 0x7ffff, 0x80000, m_rom);
}
}
else
{
- space.install_read_bank(0, 0x7ffff, 0x80000, "bank5");
if (m_rom)
- {
- membank("bank5")->set_base(m_rom);
- }
+ space.install_rom(0, 0x7ffff, 0x80000, m_rom);
}
@@ -695,8 +688,6 @@ void hp48_state::apply_modules()
uint32_t off_mask = m_modules[i].off_mask;
uint32_t mirror = nselect_mask & ~off_mask;
uint32_t end = base + (off_mask & nselect_mask);
- char bank[10];
- sprintf(bank,"bank%d",i);
if (m_modules[i].state != HP48_MODULE_CONFIGURED) continue;
if ((i == 4) && !nce3_enable) continue;
@@ -710,7 +701,7 @@ void hp48_state::apply_modules()
if (m_modules[i].data)
{
- space.install_read_bank(base, end, mirror, bank);
+ space.install_rom(base, end, mirror, m_modules[i].data);
}
else
{
@@ -728,7 +719,7 @@ void hp48_state::apply_modules()
{
if (m_modules[i].data)
{
- space.install_write_bank(base, end, mirror, bank);
+ space.install_writeonly(base, end, mirror, m_modules[i].data);
}
else
{
@@ -741,11 +732,6 @@ void hp48_state::apply_modules()
LOG(("hp48_apply_modules: module %s configured at %05x-%05x, mirror %05x\n", hp48_module_names[i], base, end, mirror));
- if (m_modules[i].data)
- {
- membank(bank)->set_base(m_modules[i].data);
- }
-
if (i == 0)
{
m_io_addr = base;
diff --git a/src/mame/machine/kc.cpp b/src/mame/machine/kc.cpp
index 1a0487e224d..4d1ebef7004 100644
--- a/src/mame/machine/kc.cpp
+++ b/src/mame/machine/kc.cpp
@@ -285,8 +285,7 @@ void kc_state::update_0x00000()
LOG(("ram0 enabled\n"));
/* yes; set address of bank */
- space.install_read_bank(0x0000, 0x3fff, "bank1");
- membank("bank1")->set_base(m_ram_base);
+ space.install_rom(0x0000, 0x3fff, m_ram_base);
/* write protect ram? */
if ((m_pio_data[0] & (1<<3)) == 0)
@@ -302,7 +301,7 @@ void kc_state::update_0x00000()
LOG(("ram0 write enabled\n"));
/* ram is enabled and write enabled */
- space.install_write_bank(0x0000, 0x3fff, "bank1");
+ space.install_writeonly(0x0000, 0x3fff, m_ram_base);
}
}
else
@@ -337,8 +336,7 @@ void kc_state::update_0x0c000()
/* BASIC takes next priority */
LOG(("BASIC rom 0x0c000\n"));
- membank("bank4")->set_base(memregion("basic")->base());
- space.install_read_bank(0xc000, 0xdfff, "bank4");
+ space.install_rom(0xc000, 0xdfff, memregion("basic")->base());
space.unmap_write(0xc000, 0xdfff);
}
else
@@ -360,8 +358,7 @@ void kc_state::update_0x0e000()
/* enable CAOS rom in memory range 0x0e000-0x0ffff */
LOG(("CAOS rom 0x0e000\n"));
/* read will access the rom */
- membank("bank5")->set_base(memregion("caos")->base() + 0x2000);
- space.install_read_bank(0xe000, 0xffff, "bank5");
+ space.install_rom(0xe000, 0xffff, memregion("caos")->base() + 0x2000);
space.unmap_write(0xe000, 0xffff);
}
else
@@ -384,8 +381,7 @@ void kc_state::update_0x08000()
/* IRM enabled */
LOG(("IRM enabled\n"));
- membank("bank3")->set_base(&m_video_ram[0]);
- space.install_readwrite_bank(0x8000, 0xbfff, "bank3");
+ space.install_ram(0x8000, 0xbfff, &m_video_ram[0]);
}
else
{
@@ -408,9 +404,7 @@ void kc85_4_state::update_0x04000()
LOG(("RAM4 enabled\n"));
/* yes */
- space.install_read_bank(0x4000, 0x7fff, "bank2");
- /* set address of bank */
- membank("bank2")->set_base(m_ram_base + 0x4000);
+ space.install_rom(0x4000, 0x7fff, m_ram_base + 0x4000);
/* write protect ram? */
if ((m_port_86_data & (1<<1)) == 0)
@@ -426,7 +420,7 @@ void kc85_4_state::update_0x04000()
LOG(("ram4 write enabled\n"));
/* ram is enabled and write enabled */
- space.install_write_bank(0x4000, 0x7fff, "bank2");
+ space.install_writeonly(0x4000, 0x7fff, m_ram_base + 0x4000);
}
}
else
@@ -449,8 +443,7 @@ void kc85_4_state::update_0x0c000()
/* CAOS rom takes priority */
LOG(("CAOS rom 0x0c000\n"));
- membank("bank4")->set_base(memregion("caos")->base());
- space.install_read_bank(0xc000, 0xdfff, "bank4");
+ space.install_rom(0xc000, 0xdfff, memregion("caos")->base());
space.unmap_write(0xc000, 0xdfff);
}
else
@@ -462,8 +455,7 @@ void kc85_4_state::update_0x0c000()
int bank = memregion("basic")->bytes() == 0x8000 ? (m_port_86_data>>5) & 0x03 : 0;
- membank("bank4")->set_base(memregion("basic")->base() + (bank << 13));
- space.install_read_bank(0xc000, 0xdfff, "bank4");
+ space.install_rom(0xc000, 0xdfff, memregion("basic")->base() + (bank << 13));
space.unmap_write(0xc000, 0xdfff);
}
else
@@ -487,11 +479,8 @@ void kc85_4_state::update_0x08000()
uint8_t* ram_page = &m_video_ram[(BIT(m_port_84_data, 2)<<15) | (BIT(m_port_84_data, 1)<<14)];
- membank("bank3")->set_base(ram_page);
- space.install_readwrite_bank(0x8000, 0xa7ff, "bank3");
-
- membank("bank6")->set_base(&m_video_ram[0x2800]);
- space.install_readwrite_bank(0xa800, 0xbfff, "bank6");
+ space.install_ram(0x8000, 0xa7ff, ram_page);
+ space.install_ram(0xa800, 0xbfff, &m_video_ram[0x2800]);
}
else if (m_pio_data[1] & (1<<5))
{
@@ -515,10 +504,8 @@ void kc85_4_state::update_0x08000()
mem_ptr = m_ram_base + (ram8_block<<14);
}
- membank("bank3")->set_base(mem_ptr);
- membank("bank6")->set_base(mem_ptr + 0x2800);
- space.install_read_bank(0x8000, 0xa7ff, "bank3");
- space.install_read_bank(0xa800, 0xbfff, "bank6");
+ space.install_rom(0x8000, 0xa7ff, mem_ptr);
+ space.install_rom(0xa800, 0xbfff, mem_ptr + 0x2800);
/* write protect RAM8 ? */
if ((m_pio_data[1] & (1<<6)) == 0)
@@ -534,8 +521,8 @@ void kc85_4_state::update_0x08000()
LOG(("RAM8 write enabled\n"));
/* ram8 is enabled and write enabled */
- space.install_write_bank(0x8000, 0xa7ff, "bank3");
- space.install_write_bank(0xa800, 0xbfff, "bank6");
+ space.install_writeonly(0x8000, 0xa7ff, mem_ptr);
+ space.install_writeonly(0xa800, 0xbfff, mem_ptr + 0x2800);
}
}
else
diff --git a/src/mame/machine/lviv.cpp b/src/mame/machine/lviv.cpp
index 99598109f6d..94d7bccdbc9 100644
--- a/src/mame/machine/lviv.cpp
+++ b/src/mame/machine/lviv.cpp
@@ -156,9 +156,9 @@ void lviv_state::io_w(offs_t offset, uint8_t data)
m_startup_mem_map = 0;
- cpuspace.install_write_bank(0x0000, 0x3fff, "bank1");
- cpuspace.install_write_bank(0x4000, 0x7fff, "bank2");
- cpuspace.install_write_bank(0x8000, 0xbfff, "bank3");
+ cpuspace.install_write_bank(0x0000, 0x3fff, m_bank[0]);
+ cpuspace.install_write_bank(0x4000, 0x7fff, m_bank[1]);
+ cpuspace.install_write_bank(0x8000, 0xbfff, m_bank[2]);
cpuspace.unmap_write(0xC000, 0xffff);
m_bank[0]->set_base(ram);
diff --git a/src/mame/machine/m20_8086.cpp b/src/mame/machine/m20_8086.cpp
index 1a907b4ecfc..f197b12e620 100644
--- a/src/mame/machine/m20_8086.cpp
+++ b/src/mame/machine/m20_8086.cpp
@@ -18,9 +18,8 @@ m20_8086_device::m20_8086_device(const machine_config &mconfig, const char *tag,
void m20_8086_device::device_start()
{
uint8_t* ram = m_ram->pointer();
- m_8086->space(AS_PROGRAM).install_readwrite_bank(0x00000, m_ram->size() - 0x4001, "mainram");
+ m_8086->space(AS_PROGRAM).install_ram(0x00000, m_ram->size() - 0x4001, &ram[0x4000]);
membank("highram")->set_base(ram);
- membank("mainram")->set_base(&ram[0x4000]);
membank("vram")->set_base(memshare(":videoram")->ptr());
membank("vram2")->set_base(memshare(":videoram")->ptr());
}
diff --git a/src/mame/machine/mac.cpp b/src/mame/machine/mac.cpp
index a24359e7f91..bcc0697a8bb 100644
--- a/src/mame/machine/mac.cpp
+++ b/src/mame/machine/mac.cpp
@@ -125,7 +125,7 @@ void mac_fdc_set_enable_lines(device_t *device, int enable_mask)
}
void mac_state::mac_install_memory(offs_t memory_begin, offs_t memory_end,
- offs_t memory_size, void *memory_data, int is_rom, const char *bank)
+ offs_t memory_size, void *memory_data, int is_rom)
{
address_space& space = m_maincpu->space(AS_PROGRAM);
offs_t memory_mirror;
@@ -135,20 +135,18 @@ void mac_state::mac_install_memory(offs_t memory_begin, offs_t memory_end,
if (!is_rom)
{
- space.install_readwrite_bank(memory_begin, memory_end & ~memory_mirror, memory_mirror, bank);
+ space.install_ram(memory_begin, memory_end & ~memory_mirror, memory_mirror, memory_data);
}
else
{
space.unmap_write(memory_begin, memory_end);
- space.install_read_bank(memory_begin, memory_end & ~memory_mirror, memory_mirror, bank);
+ space.install_rom(memory_begin, memory_end & ~memory_mirror, memory_mirror, memory_data);
}
- membank(bank)->set_base(memory_data);
-
if (LOG_MEMORY)
{
- printf("mac_install_memory(): bank=%s range=[0x%06x...0x%06x] mirror=0x%06x ptr=0x%p\n",
- bank, memory_begin, memory_end, memory_mirror, memory_data);
+ printf("mac_install_memory(): range=[0x%06x...0x%06x] mirror=0x%06x ptr=0x%p\n",
+ memory_begin, memory_end, memory_mirror, memory_data);
}
}
@@ -303,7 +301,7 @@ void mac_state::v8_resize()
if (is_rom)
{
- mac_install_memory(0x00000000, memory_size-1, memory_size, memory_data, is_rom, "bank1");
+ mac_install_memory(0x00000000, memory_size-1, memory_size, memory_data, is_rom);
// install catcher in place of ROM that will detect the first access to ROM in its real location
m_maincpu->space(AS_PROGRAM).install_read_handler(0xa00000, 0xafffff, read32sm_delegate(*this, FUNC(mac_state::rom_switch_r)), 0xffffffff);
@@ -316,8 +314,7 @@ void mac_state::v8_resize()
// re-install ROM in its normal place
size_t rom_mirror = 0xfffff ^ (m_rom_size - 1);
- m_maincpu->space(AS_PROGRAM).install_read_bank(0xa00000, 0xafffff, rom_mirror, "bankR");
- membank("bankR")->set_base((void *)m_rom_ptr);
+ m_maincpu->space(AS_PROGRAM).install_rom(0xa00000, 0xafffff, rom_mirror, m_rom_ptr);
// force unmap of entire RAM region
space.unmap_write(0, 0x9fffff);
@@ -336,25 +333,25 @@ void mac_state::v8_resize()
if ((simm_amt > 0) && (simm_size > 0))
{
-// mac_install_memory(0x000000, simm_sizes[simm_amt]-1, simm_sizes[simm_amt], memory_data + onboard_amt, is_rom, "bank1");
- mac_install_memory(0x000000, simm_size-1, simm_size, memory_data + onboard_amt, is_rom, "bank1");
+// mac_install_memory(0x000000, simm_sizes[simm_amt]-1, simm_sizes[simm_amt], memory_data + onboard_amt, is_rom);
+ mac_install_memory(0x000000, simm_size-1, simm_size, memory_data + onboard_amt, is_rom);
}
// onboard RAM sits immediately above the SIMM, if any
if (simm_sizes[simm_amt] + onboard_amt <= 0x800000)
{
- mac_install_memory(simm_sizes[simm_amt], simm_sizes[simm_amt] + onboard_amt - 1, onboard_amt, memory_data, is_rom, "bank2");
+ mac_install_memory(simm_sizes[simm_amt], simm_sizes[simm_amt] + onboard_amt - 1, onboard_amt, memory_data, is_rom);
}
// a mirror of the first 2 MB of on board RAM always lives at 0x800000
- mac_install_memory(0x800000, 0x9fffff, 0x200000, memory_data, is_rom, "bank3");
+ mac_install_memory(0x800000, 0x9fffff, 0x200000, memory_data, is_rom);
}
else
{
// printf("mac_v8_resize: SIMM off, mobo RAM at 0 and top\n");
- mac_install_memory(0x000000, onboard_amt-1, onboard_amt, memory_data, is_rom, "bank1");
- mac_install_memory(0x900000, 0x9fffff, 0x200000, memory_data+0x100000, is_rom, "bank3");
+ mac_install_memory(0x000000, onboard_amt-1, onboard_amt, memory_data, is_rom);
+ mac_install_memory(0x900000, 0x9fffff, 0x200000, memory_data+0x100000, is_rom);
}
}
}
@@ -397,34 +394,34 @@ void mac_state::set_memory_overlay(int overlay)
// ROM is OK to flood to 3fffffff
if (is_rom)
{
- mac_install_memory(0x00000000, 0x3fffffff, memory_size, memory_data, is_rom, "bank1");
+ mac_install_memory(0x00000000, 0x3fffffff, memory_size, memory_data, is_rom);
}
else // RAM: be careful not to populate ram B with a mirror or the ROM will get confused
{
- mac_install_memory(0x00000000, memory_size-1, memory_size, memory_data, is_rom, "bank1");
+ mac_install_memory(0x00000000, memory_size-1, memory_size, memory_data, is_rom);
// switch ROM region to direct access instead of through rom_switch_r
- mac_install_memory(0x40000000, 0x4007ffff, memory_size, memory_data, is_rom, "bank2");
+ mac_install_memory(0x40000000, 0x4007ffff, memory_size, memory_data, is_rom);
}
}
else if (m_model == MODEL_MAC_IIFX)
{
address_space& space = m_maincpu->space(AS_PROGRAM);
space.unmap_write(0x000000, 0x9fffff);
- mac_install_memory(0x000000, memory_size-1, memory_size, memory_data, is_rom, "bank1");
+ mac_install_memory(0x000000, memory_size-1, memory_size, memory_data, is_rom);
}
else if ((m_model == MODEL_MAC_PB140) || (m_model == MODEL_MAC_PB160) || ((m_model >= MODEL_MAC_PBDUO_210) && (m_model <= MODEL_MAC_PBDUO_270c)))
{
address_space& space = m_maincpu->space(AS_PROGRAM);
space.unmap_write(0x000000, 0xffffff);
- mac_install_memory(0x000000, memory_size-1, memory_size, memory_data, is_rom, "bank1");
+ mac_install_memory(0x000000, memory_size-1, memory_size, memory_data, is_rom);
}
else if ((m_model >= MODEL_MAC_II) && (m_model <= MODEL_MAC_SE30) && (m_model != MODEL_MAC_IIVX) && (m_model != MODEL_MAC_IIVI))
{
- mac_install_memory(0x00000000, 0x3fffffff, memory_size, memory_data, is_rom, "bank1");
+ mac_install_memory(0x00000000, 0x3fffffff, memory_size, memory_data, is_rom);
}
else if ((m_model == MODEL_MAC_IIVX) || (m_model == MODEL_MAC_IIVI) || (m_model == MODEL_MAC_LC_III) || (m_model == MODEL_MAC_LC_III_PLUS) || (m_model >= MODEL_MAC_LC_475 && m_model <= MODEL_MAC_LC_580)) // up to 36 MB
{
- mac_install_memory(0x00000000, memory_size-1, memory_size, memory_data, is_rom, "bank1");
+ mac_install_memory(0x00000000, memory_size-1, memory_size, memory_data, is_rom);
if (is_rom)
{
@@ -433,21 +430,20 @@ void mac_state::set_memory_overlay(int overlay)
else
{
size_t rom_mirror = 0xfffffff ^ (m_rom_size - 1);
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x40000000, 0x4fffffff & ~rom_mirror, rom_mirror, "bankR");
- membank("bankR")->set_base((void *)m_rom_ptr);
+ m_maincpu->space(AS_PROGRAM).install_rom(0x40000000, 0x4fffffff & ~rom_mirror, rom_mirror, m_rom_ptr);
}
}
else if (m_model == MODEL_MAC_QUADRA_700)
{
if (!is_rom)
{
- mac_install_memory(0x40000000, 0x400fffff, m_rom_size, m_rom_ptr, true, "bank2");
+ mac_install_memory(0x40000000, 0x400fffff, m_rom_size, m_rom_ptr, true);
}
- mac_install_memory(0x00000000, memory_size-1, memory_size, memory_data, is_rom, "bank1");
+ mac_install_memory(0x00000000, memory_size-1, memory_size, memory_data, is_rom);
}
else
{
- mac_install_memory(0x00000000, 0x003fffff, memory_size, memory_data, is_rom, "bank1");
+ mac_install_memory(0x00000000, 0x003fffff, memory_size, memory_data, is_rom);
}
m_overlay = overlay;
@@ -1304,11 +1300,11 @@ void mac_state::mac_driver_init(model_t model)
if (model < MODEL_MAC_PORTABLE)
{
/* set up RAM mirror at 0x600000-0x6fffff (0x7fffff ???) */
- mac_install_memory(0x600000, 0x6fffff, m_ram->size(), m_ram->pointer(), false, "bank2");
+ mac_install_memory(0x600000, 0x6fffff, m_ram->size(), m_ram->pointer(), false);
/* set up ROM at 0x400000-0x4fffff (-0x5fffff for mac 128k/512k/512ke) */
mac_install_memory(0x400000, (model >= MODEL_MAC_PLUS) ? 0x4fffff : 0x5fffff,
- m_rom_size, m_rom_ptr, true, "bank3");
+ m_rom_size, m_rom_ptr, true);
}
m_overlay = -1;
diff --git a/src/mame/machine/mc8123.cpp b/src/mame/machine/mc8123.cpp
index 8580f7dea09..33acc77b096 100644
--- a/src/mame/machine/mc8123.cpp
+++ b/src/mame/machine/mc8123.cpp
@@ -92,7 +92,7 @@ DEFINE_DEVICE_TYPE(MC8123, mc8123_device, "mc8123", "MC-8123")
mc8123_device::mc8123_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: z80_device(mconfig, MC8123, tag, owner, clock)
- , m_key(*this, "key", 0x2000)
+ , m_key(*this, "key")
{
}
diff --git a/src/mame/machine/mega32x.cpp b/src/mame/machine/mega32x.cpp
index a9019c4ad3c..75cd4728eb5 100644
--- a/src/mame/machine/mega32x.cpp
+++ b/src/mame/machine/mega32x.cpp
@@ -225,6 +225,7 @@ sega_32x_device::sega_32x_device(const machine_config &mconfig, device_type type
, m_ldac(*this, "ldac")
, m_rdac(*this, "rdac")
, m_scan_timer(*this, finder_base::DUMMY_TAG)
+ , m_rombank(*this, "rombank")
, m_stream(nullptr)
{
}
@@ -656,8 +657,8 @@ void sega_32x_device::m68k_a15100_w(address_space &space, offs_t offset, uint16_
m_32x_adapter_enabled = 1;
space.install_rom(0x0880000, 0x08fffff, machine().root_device().memregion("gamecart")->base()); // 'fixed' 512kb rom bank
- space.install_read_bank(0x0900000, 0x09fffff, "bank12"); // 'bankable' 1024kb rom bank
- machine().root_device().membank("bank12")->set_base(machine().root_device().memregion("gamecart")->base()+((m_32x_68k_a15104_reg&0x3)*0x100000) );
+ space.install_read_bank(0x0900000, 0x09fffff, m_rombank); // 'bankable' 1024kb rom bank
+ m_rombank->set_base(machine().root_device().memregion("gamecart")->base()+((m_32x_68k_a15104_reg&0x3)*0x100000) );
space.install_rom(0x0000000, 0x03fffff, machine().root_device().memregion("32x_68k_bios")->base());
@@ -747,7 +748,7 @@ void sega_32x_device::m68k_a15104_w(offs_t offset, uint16_t data, uint16_t mem_m
m_32x_68k_a15104_reg = (m_32x_68k_a15104_reg & 0x00ff) | (data & 0xff00);
}
- machine().root_device().membank("bank12")->set_base(machine().root_device().memregion("gamecart")->base()+((m_32x_68k_a15104_reg&0x3)*0x100000) );
+ m_rombank->set_base(machine().root_device().memregion("gamecart")->base()+((m_32x_68k_a15104_reg&0x3)*0x100000) );
}
/**********************************************************************************************/
diff --git a/src/mame/machine/mega32x.h b/src/mame/machine/mega32x.h
index 51cdf07ad47..82f22dcf1bc 100644
--- a/src/mame/machine/mega32x.h
+++ b/src/mame/machine/mega32x.h
@@ -121,6 +121,7 @@ protected:
required_device<dac_word_interface> m_ldac;
required_device<dac_word_interface> m_rdac;
required_device<timer_device> m_scan_timer;
+ memory_bank_creator m_rombank;
int m_32x_hcount_compare_val;
int m_32x_vblank_flag;
diff --git a/src/mame/machine/midtunit.cpp b/src/mame/machine/midtunit.cpp
index 4530ae163ce..e5b8b436521 100644
--- a/src/mame/machine/midtunit.cpp
+++ b/src/mame/machine/midtunit.cpp
@@ -382,8 +382,11 @@ void midtunit_state::init_mktunit()
m_maincpu->space(AS_PROGRAM).install_read_handler(0x1b00000, 0x1b6ffff, read16sm_delegate(*this, FUNC(midtunit_state::mk_prot_r)));
m_maincpu->space(AS_PROGRAM).install_write_handler(0x1b00000, 0x1b6ffff, write16s_delegate(*this, FUNC(midtunit_state::mk_prot_w)));
+ m_hidden_ram = std::make_unique<uint8_t[]>(42);
+ save_pointer(NAME(m_hidden_ram), 42);
+
/* sound chip protection (hidden RAM) */
- m_adpcm_sound->get_cpu()->space(AS_PROGRAM).install_ram(0xfb9c, 0xfbc6);
+ m_adpcm_sound->get_cpu()->space(AS_PROGRAM).install_ram(0xfb9c, 0xfbc6, m_hidden_ram.get());
}
void midtunit_state::init_mkturbo()
@@ -415,11 +418,14 @@ void midtunit_state::init_nbajam_common(int te_protection)
m_maincpu->space(AS_PROGRAM).install_write_handler(0x1b95f40, 0x1bb7f5f, write16sm_delegate(*this, FUNC(midtunit_state::nbajam_prot_w)));
}
+ m_hidden_ram = std::make_unique<uint8_t[]>(42);
+ save_pointer(NAME(m_hidden_ram), 42);
+
/* sound chip protection (hidden RAM) */
if (!te_protection)
- m_adpcm_sound->get_cpu()->space(AS_PROGRAM).install_ram(0xfbaa, 0xfbd4);
+ m_adpcm_sound->get_cpu()->space(AS_PROGRAM).install_ram(0xfbaa, 0xfbd4, m_hidden_ram.get());
else
- m_adpcm_sound->get_cpu()->space(AS_PROGRAM).install_ram(0xfbec, 0xfc16);
+ m_adpcm_sound->get_cpu()->space(AS_PROGRAM).install_ram(0xfbec, 0xfc16, m_hidden_ram.get());
}
void midtunit_state::init_nbajam()
@@ -443,10 +449,11 @@ void midtunit_state::init_jdreddp()
/* protection */
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x1b00000, 0x1bfffff, read16sm_delegate(*this, FUNC(midtunit_state::jdredd_prot_r)), write16sm_delegate(*this, FUNC(midtunit_state::jdredd_prot_w)));
+ m_hidden_ram = std::make_unique<uint8_t[]>(42);
+ save_pointer(NAME(m_hidden_ram), 42);
+
/* sound chip protection (hidden RAM) */
- m_adpcm_sound->get_cpu()->space(AS_PROGRAM).install_read_bank(0xfbcf, 0xfbf9, "bank7");
- m_adpcm_sound->get_cpu()->space(AS_PROGRAM).install_write_bank(0xfbcf, 0xfbf9, "bank9");
- membank("adpcm:bank9")->set_base(auto_alloc_array(machine(), uint8_t, 0x80));
+ m_adpcm_sound->get_cpu()->space(AS_PROGRAM).install_ram(0xfbcf, 0xfbf9, m_hidden_ram.get());
}
diff --git a/src/mame/machine/midyunit.cpp b/src/mame/machine/midyunit.cpp
index cbd4319dc42..36e5b986b74 100644
--- a/src/mame/machine/midyunit.cpp
+++ b/src/mame/machine/midyunit.cpp
@@ -292,15 +292,21 @@ void midyunit_state::init_generic(int bpp, int sound, int prot_start, int prot_e
break;
case SOUND_CVSD:
- m_cvsd_sound->get_cpu()->space(AS_PROGRAM).install_ram(prot_start, prot_end);
+ m_hidden_ram = std::make_unique<uint8_t[]>(prot_end - prot_start);
+ save_pointer(NAME(m_hidden_ram), prot_end - prot_start);
+ m_cvsd_sound->get_cpu()->space(AS_PROGRAM).install_ram(prot_start, prot_end, m_hidden_ram.get());
break;
case SOUND_ADPCM:
- m_adpcm_sound->get_cpu()->space(AS_PROGRAM).install_ram(prot_start, prot_end);
+ m_hidden_ram = std::make_unique<uint8_t[]>(prot_end - prot_start);
+ save_pointer(NAME(m_hidden_ram), prot_end - prot_start);
+ m_adpcm_sound->get_cpu()->space(AS_PROGRAM).install_ram(prot_start, prot_end, m_hidden_ram.get());
break;
case SOUND_NARC:
- m_narc_sound->get_cpu()->space(AS_PROGRAM).install_ram(prot_start, prot_end);
+ m_hidden_ram = std::make_unique<uint8_t[]>(prot_end - prot_start);
+ save_pointer(NAME(m_hidden_ram), prot_end - prot_start);
+ m_narc_sound->get_cpu()->space(AS_PROGRAM).install_ram(prot_start, prot_end, m_hidden_ram.get());
break;
case SOUND_YAWDIM:
diff --git a/src/mame/machine/mtx.cpp b/src/mame/machine/mtx.cpp
index 6ad0ce4ea1f..55349bc4202 100644
--- a/src/mame/machine/mtx.cpp
+++ b/src/mame/machine/mtx.cpp
@@ -45,10 +45,10 @@ void mtx_state::mtx_subpage_w(uint8_t data)
if (m_extrom->exists())
{
if ((data * 0x2000) < m_extrom->get_rom_size())
- membank("rommap_bank1")->configure_entry(2, m_extrom->get_rom_base() + 0x2000 * data);
+ m_rommap_bank1->configure_entry(2, m_extrom->get_rom_base() + 0x2000 * data);
else
- membank("rommap_bank1")->configure_entry(2, memregion("user2")->base() + 0x4000);
- membank("rommap_bank1")->set_entry(2);
+ m_rommap_bank1->configure_entry(2, memregion("user2")->base() + 0x4000);
+ m_rommap_bank1->set_entry(2);
}
}
@@ -98,23 +98,23 @@ void mtx_state::bankswitch(uint8_t data)
if (cbm_mode)
{
/* ram based memory map */
- program.install_readwrite_bank(0x0000, 0x3fff, "rammap_bank1");
- program.install_readwrite_bank(0x4000, 0x7fff, "rammap_bank2");
- program.install_readwrite_bank(0x8000, 0xbfff, "rammap_bank3");
+ program.install_readwrite_bank(0x0000, 0x3fff, m_rammap_bank1);
+ program.install_readwrite_bank(0x4000, 0x7fff, m_rammap_bank2);
+ program.install_readwrite_bank(0x8000, 0xbfff, m_rammap_bank3);
/* set ram bank, for invalid pages a nop-handler will be installed */
if ((ram_page == 0 && m_ram->size() > 0xc000) || (ram_page > 0 && m_ram->size() > 0x10000 + ram_page * 0xc000))
- membank("rammap_bank1")->set_entry(ram_page);
+ m_rammap_bank1->set_entry(ram_page);
else
program.nop_readwrite(0x0000, 0x3fff);
if ((ram_page == 0 && m_ram->size() > 0x8000) || (ram_page > 0 && m_ram->size() > 0x14000 + ram_page * 0xc000))
- membank("rammap_bank2")->set_entry(ram_page);
+ m_rammap_bank2->set_entry(ram_page);
else
program.nop_readwrite(0x4000, 0x7fff);
if ((ram_page == 0 && m_ram->size() > 0x4000) || (ram_page > 0 && m_ram->size() > 0x18000 + ram_page * 0xc000))
- membank("rammap_bank3")->set_entry(ram_page);
+ m_rammap_bank3->set_entry(ram_page);
else
program.nop_readwrite(0x8000, 0xbfff);
}
@@ -123,21 +123,21 @@ void mtx_state::bankswitch(uint8_t data)
/* rom based memory map */
program.install_rom(0x0000, 0x1fff, memregion("user1")->base());
program.install_write_handler(0x0000, 0x1fff, write8smo_delegate(*this, FUNC(mtx_state::mtx_subpage_w)));
- program.install_read_bank(0x2000, 0x3fff, "rommap_bank1");
+ program.install_read_bank(0x2000, 0x3fff, m_rommap_bank1);
program.unmap_write(0x2000, 0x3fff);
- program.install_readwrite_bank(0x4000, 0x7fff, "rommap_bank2");
- program.install_readwrite_bank(0x8000, 0xbfff, "rommap_bank3");
+ program.install_readwrite_bank(0x4000, 0x7fff, m_rommap_bank2);
+ program.install_readwrite_bank(0x8000, 0xbfff, m_rommap_bank3);
/* set rom bank (switches between basic and assembler rom or cartridges) */
- membank("rommap_bank1")->set_entry(rom_page);
+ m_rommap_bank1->set_entry(rom_page);
/* set ram bank, for invalid pages a nop-handler will be installed */
if ((ram_page == 0 && m_ram->size() > 0x8000) || (ram_page > 0 && m_ram->size() > 0x10000 + ram_page * 0x8000))
- membank("rommap_bank2")->set_entry(ram_page);
+ m_rommap_bank2->set_entry(ram_page);
else
program.nop_readwrite(0x4000, 0x7fff);
if ((ram_page == 0 && m_ram->size() > 0x4000) || (ram_page == 1 && m_ram->size() > 0xc000) || (ram_page > 1 && m_ram->size() > 0x14000 + ram_page * 0x8000))
- membank("rommap_bank3")->set_entry(ram_page);
+ m_rommap_bank3->set_entry(ram_page);
else
program.nop_readwrite(0x8000, 0xbfff);
}
@@ -532,28 +532,28 @@ void mtx_state::machine_start()
address_space &program = m_maincpu->space(AS_PROGRAM);
/* setup banks for rom based memory map */
- program.install_read_bank(0x2000, 0x3fff, "rommap_bank1");
- program.install_readwrite_bank(0x4000, 0x7fff, "rommap_bank2");
- program.install_readwrite_bank(0x8000, 0xbfff, "rommap_bank3");
+ program.install_read_bank(0x2000, 0x3fff, m_rommap_bank1);
+ program.install_readwrite_bank(0x4000, 0x7fff, m_rommap_bank2);
+ program.install_readwrite_bank(0x8000, 0xbfff, m_rommap_bank3);
- membank("rommap_bank1")->configure_entries(0, 8, memregion("user2")->base(), 0x2000);
- membank("rommap_bank2")->configure_entry(0, m_ram->pointer() + 0x8000);
- membank("rommap_bank2")->configure_entries(1, 15, m_ram->pointer() + 0x10000, 0x8000);
- membank("rommap_bank3")->configure_entry(0, m_ram->pointer() + 0x4000);
- membank("rommap_bank3")->configure_entry(1, m_ram->pointer() + 0xc000);
- membank("rommap_bank3")->configure_entries(2, 14, m_ram->pointer() + 0x14000, 0x8000);
+ m_rommap_bank1->configure_entries(0, 8, memregion("user2")->base(), 0x2000);
+ m_rommap_bank2->configure_entry(0, m_ram->pointer() + 0x8000);
+ m_rommap_bank2->configure_entries(1, 15, m_ram->pointer() + 0x10000, 0x8000);
+ m_rommap_bank3->configure_entry(0, m_ram->pointer() + 0x4000);
+ m_rommap_bank3->configure_entry(1, m_ram->pointer() + 0xc000);
+ m_rommap_bank3->configure_entries(2, 14, m_ram->pointer() + 0x14000, 0x8000);
/* setup banks for ram based memory map */
- program.install_readwrite_bank(0x0000, 0x3fff, "rammap_bank1");
- program.install_readwrite_bank(0x4000, 0x7fff, "rammap_bank2");
- program.install_readwrite_bank(0x8000, 0xbfff, "rammap_bank3");
+ program.install_readwrite_bank(0x0000, 0x3fff, m_rammap_bank1);
+ program.install_readwrite_bank(0x4000, 0x7fff, m_rammap_bank2);
+ program.install_readwrite_bank(0x8000, 0xbfff, m_rammap_bank3);
- membank("rammap_bank1")->configure_entry(0, m_ram->pointer() + 0xc000);
- membank("rammap_bank1")->configure_entries(1, 15, m_ram->pointer() + 0x10000, 0xc000);
- membank("rammap_bank2")->configure_entry(0, m_ram->pointer() + 0x8000);
- membank("rammap_bank2")->configure_entries(1, 15, m_ram->pointer() + 0x14000, 0xc000);
- membank("rammap_bank3")->configure_entry(0, m_ram->pointer() + 0x4000);
- membank("rammap_bank3")->configure_entries(1, 15, m_ram->pointer() + 0x18000, 0xc000);
+ m_rammap_bank1->configure_entry(0, m_ram->pointer() + 0xc000);
+ m_rammap_bank1->configure_entries(1, 15, m_ram->pointer() + 0x10000, 0xc000);
+ m_rammap_bank2->configure_entry(0, m_ram->pointer() + 0x8000);
+ m_rammap_bank2->configure_entries(1, 15, m_ram->pointer() + 0x14000, 0xc000);
+ m_rammap_bank3->configure_entry(0, m_ram->pointer() + 0x4000);
+ m_rammap_bank3->configure_entries(1, 15, m_ram->pointer() + 0x18000, 0xc000);
/* install 4000h bytes common block */
program.install_ram(0xc000, 0xffff, m_ram->pointer());
@@ -563,13 +563,13 @@ void mtx_state::machine_reset()
{
/* extension board ROMs */
if (m_extrom->exists())
- membank("rommap_bank1")->configure_entry(2, m_extrom->get_rom_base());
+ m_rommap_bank1->configure_entry(2, m_extrom->get_rom_base());
/* keyboard ROMs */
if (ioport("keyboard_rom")->read())
- membank("rommap_bank1")->configure_entry(7, memregion("keyboard_rom")->base() + (ioport("keyboard_rom")->read() - 1) * 0x2000);
+ m_rommap_bank1->configure_entry(7, memregion("keyboard_rom")->base() + (ioport("keyboard_rom")->read() - 1) * 0x2000);
/* rompak ROMs */
if (m_rompak->exists())
- membank("rommap_bank1")->configure_entry(7, m_rompak->get_rom_base());
+ m_rommap_bank1->configure_entry(7, m_rompak->get_rom_base());
/* bank switching */
bankswitch(0);
diff --git a/src/mame/machine/nes.cpp b/src/mame/machine/nes.cpp
index 83219fbce5d..9dd876039e6 100644
--- a/src/mame/machine/nes.cpp
+++ b/src/mame/machine/nes.cpp
@@ -59,10 +59,8 @@ void nes_state::machine_start()
space.install_write_handler(0x4100, 0x5fff, write8sm_delegate(*m_cartslot, FUNC(nes_cart_slot_device::write_l)));
space.install_read_handler(0x6000, 0x7fff, read8sm_delegate(*m_cartslot, FUNC(nes_cart_slot_device::read_m)));
space.install_write_handler(0x6000, 0x7fff, write8sm_delegate(*m_cartslot, FUNC(nes_cart_slot_device::write_m)));
- space.install_read_bank(0x8000, 0x9fff, "prg0");
- space.install_read_bank(0xa000, 0xbfff, "prg1");
- space.install_read_bank(0xc000, 0xdfff, "prg2");
- space.install_read_bank(0xe000, 0xffff, "prg3");
+ for(int i=0; i<4; i++)
+ space.install_read_bank(0x8000 + 0x2000*i, 0x9fff + 0x2000*i, m_prg_bank[i]);
space.install_write_handler(0x8000, 0xffff, write8sm_delegate(*m_cartslot, FUNC(nes_cart_slot_device::write_h)));
m_ppu->space(AS_PROGRAM).install_readwrite_handler(0, 0x1fff, read8sm_delegate(*m_cartslot->m_cart, FUNC(device_nes_cart_interface::chr_r)), write8sm_delegate(*m_cartslot->m_cart, FUNC(device_nes_cart_interface::chr_w)));
diff --git a/src/mame/machine/ondra.cpp b/src/mame/machine/ondra.cpp
index 86af7833ba2..ffa97d84972 100644
--- a/src/mame/machine/ondra.cpp
+++ b/src/mame/machine/ondra.cpp
@@ -38,7 +38,7 @@ void ondra_state::update_banks()
{
if (BIT(m_bank_status, 0))
{
- space.install_write_bank(0x0000, 0x3fff, "bank1");
+ space.install_write_bank(0x0000, 0x3fff, m_bank1);
m_bank1->set_base(r);
}
else
@@ -57,7 +57,7 @@ void ondra_state::update_banks()
}
else
{
- space.install_readwrite_bank(0xe000, 0xffff, "bank3");
+ space.install_readwrite_bank(0xe000, 0xffff, m_bank3);
m_bank3->set_base(r + 0xe000);
}
}
diff --git a/src/mame/machine/orion.cpp b/src/mame/machine/orion.cpp
index d00112f6677..e1587447609 100644
--- a/src/mame/machine/orion.cpp
+++ b/src/mame/machine/orion.cpp
@@ -253,7 +253,7 @@ void orion_state::orionz80_switch_bank()
bank_select = (m_orionz80_dispatcher & 0x0c) >> 2;
segment_select = m_orionz80_dispatcher & 0x03;
- space.install_write_bank(0x0000, 0x3fff, "bank1");
+ space.install_write_bank(0x0000, 0x3fff, m_bank1);
if ((m_orionz80_dispatcher & 0x80)==0)
{ // dispatcher on
m_bank1->set_base(m_ram->pointer() + 0x10000 * bank_select + segment_select * 0x4000 );
@@ -311,8 +311,8 @@ void orion_z80_state::machine_reset()
address_space &space = m_maincpu->space(AS_PROGRAM);
space.unmap_write(0x0000, 0x3fff);
- space.install_write_bank(0x4000, 0xefff, "bank2");
- space.install_write_bank(0xf000, 0xf3ff, "bank3");
+ space.install_write_bank(0x4000, 0xefff, m_bank2);
+ space.install_write_bank(0xf000, 0xf3ff, m_bank3);
space.install_write_handler(0xf400, 0xf4ff, write8sm_delegate(*this, FUNC(orion_z80_state::orion128_system_w)));
space.install_write_handler(0xf500, 0xf5ff, write8sm_delegate(*this, FUNC(orion_z80_state::orion128_romdisk_w)));
@@ -390,15 +390,14 @@ void orion_state::orionpro_bank_switch()
if (is128==1)
page = m_orionpro_128_page & 7;
- space.install_write_bank(0x0000, 0x1fff, "bank1");
- space.install_write_bank(0x2000, 0x3fff, "bank2");
- space.install_write_bank(0x4000, 0x7fff, "bank3");
- space.install_write_bank(0x8000, 0xbfff, "bank4");
- space.install_write_bank(0xc000, 0xefff, "bank5");
- space.install_write_bank(0xf000, 0xf3ff, "bank6");
- space.install_write_bank(0xf400, 0xf7ff, "bank7");
- space.install_write_bank(0xf800, 0xffff, "bank8");
-
+ space.install_write_bank(0x0000, 0x1fff, m_bank1);
+ space.install_write_bank(0x2000, 0x3fff, m_bank2);
+ space.install_write_bank(0x4000, 0x7fff, m_bank3);
+ space.install_write_bank(0x8000, 0xbfff, m_bank4);
+ space.install_write_bank(0xc000, 0xefff, m_bank5);
+ space.install_write_bank(0xf000, 0xf3ff, m_bank6);
+ space.install_write_bank(0xf400, 0xf7ff, m_bank7);
+ space.install_write_bank(0xf800, 0xffff, m_bank8);
if ((m_orionpro_dispatcher & 0x01)==0x00)
{ // RAM0 segment disabled
diff --git a/src/mame/machine/partner.cpp b/src/mame/machine/partner.cpp
index 0bcc83d5f0a..1d7873a91d8 100644
--- a/src/mame/machine/partner.cpp
+++ b/src/mame/machine/partner.cpp
@@ -123,18 +123,18 @@ void partner_state::bank_switch()
uint8_t *rom = memregion("maincpu")->base();
uint8_t *ram = m_ram->pointer();
- space.install_write_bank(0x0000, 0x07ff, "bank1");
- space.install_write_bank(0x0800, 0x3fff, "bank2");
- space.install_write_bank(0x4000, 0x5fff, "bank3");
- space.install_write_bank(0x6000, 0x7fff, "bank4");
- space.install_write_bank(0x8000, 0x9fff, "bank5");
- space.install_write_bank(0xa000, 0xb7ff, "bank6");
- space.install_write_bank(0xb800, 0xbfff, "bank7");
- space.install_write_bank(0xc000, 0xc7ff, "bank8");
- space.install_write_bank(0xc800, 0xcfff, "bank9");
- space.install_write_bank(0xd000, 0xd7ff, "bank10");
+ space.install_write_bank(0x0000, 0x07ff, m_bank[0]);
+ space.install_write_bank(0x0800, 0x3fff, m_bank[1]);
+ space.install_write_bank(0x4000, 0x5fff, m_bank[2]);
+ space.install_write_bank(0x6000, 0x7fff, m_bank[3]);
+ space.install_write_bank(0x8000, 0x9fff, m_bank[4]);
+ space.install_write_bank(0xa000, 0xb7ff, m_bank[5]);
+ space.install_write_bank(0xb800, 0xbfff, m_bank[6]);
+ space.install_write_bank(0xc000, 0xc7ff, m_bank[7]);
+ space.install_write_bank(0xc800, 0xcfff, m_bank[8]);
+ space.install_write_bank(0xd000, 0xd7ff, m_bank[9]);
space.unmap_write(0xdc00, 0xddff);
- space.install_read_bank (0xdc00, 0xddff, "bank11");
+ space.install_read_bank (0xdc00, 0xddff, m_bank[10]);
space.unmap_write(0xe000, 0xe7ff);
space.unmap_write(0xe800, 0xffff);
diff --git a/src/mame/machine/pc1350.cpp b/src/mame/machine/pc1350.cpp
index edd02bf7ba7..07357f19062 100644
--- a/src/mame/machine/pc1350.cpp
+++ b/src/mame/machine/pc1350.cpp
@@ -61,13 +61,11 @@ void pc1350_state::machine_start()
address_space &space = m_maincpu->space(AS_PROGRAM);
- space.install_readwrite_bank(0x6000, 0x6fff, "bank1");
- membank("bank1")->set_base(&m_ram->pointer()[0x0000]);
+ space.install_ram(0x6000, 0x6fff, &m_ram->pointer()[0x0000]);
if (m_ram->size() >= 0x3000)
{
- space.install_readwrite_bank(0x4000, 0x5fff, "bank2");
- membank("bank2")->set_base(&m_ram->pointer()[0x1000]);
+ space.install_ram(0x4000, 0x5fff, &m_ram->pointer()[0x1000]);
}
else
{
@@ -76,8 +74,7 @@ void pc1350_state::machine_start()
if (m_ram->size() >= 0x5000)
{
- space.install_readwrite_bank(0x2000, 0x3fff, "bank3");
- membank("bank3")->set_base(&m_ram->pointer()[0x3000]);
+ space.install_ram(0x2000, 0x3fff, &m_ram->pointer()[0x3000]);
}
else
{
diff --git a/src/mame/machine/pecom.cpp b/src/mame/machine/pecom.cpp
index bfcb37cf977..ddf0b82e4c8 100644
--- a/src/mame/machine/pecom.cpp
+++ b/src/mame/machine/pecom.cpp
@@ -23,8 +23,8 @@ void pecom_state::machine_reset()
m_bank1->set_entry(1);
space.unmap_write(0xf000, 0xffff);
- space.install_read_bank (0xf000, 0xf7ff, "bank3");
- space.install_read_bank (0xf800, 0xffff, "bank4");
+ space.install_read_bank (0xf000, 0xf7ff, m_bank3);
+ space.install_read_bank (0xf800, 0xffff, m_bank4);
m_bank3->set_base(m_rom + 0x7000);
m_bank4->set_base(m_rom + 0x7800);
@@ -68,8 +68,8 @@ void pecom_state::bank_w(uint8_t data)
else
{
space.unmap_write(0xf000, 0xffff);
- space.install_read_bank (0xf000, 0xf7ff, "bank3");
- space.install_read_bank (0xf800, 0xffff, "bank4");
+ space.install_read_bank (0xf000, 0xf7ff, m_bank3);
+ space.install_read_bank (0xf800, 0xffff, m_bank4);
m_bank3->set_base(m_rom + 0x7000);
m_bank4->set_base(m_rom + 0x7800);
}
diff --git a/src/mame/machine/playch10.cpp b/src/mame/machine/playch10.cpp
index 6c6f11574d4..f6e1acc44d8 100644
--- a/src/mame/machine/playch10.cpp
+++ b/src/mame/machine/playch10.cpp
@@ -651,7 +651,9 @@ void playch10_state::init_pcdboard()
void playch10_state::init_pcdboard_2()
{
/* extra ram at $6000-$7fff */
- m_cartcpu->space(AS_PROGRAM).install_ram(0x6000, 0x7fff);
+ m_extra_ram = std::make_unique<uint8_t[]>(0x2000);
+ save_pointer(NAME(m_extra_ram), 0x2000);
+ m_cartcpu->space(AS_PROGRAM).install_ram(0x6000, 0x7fff, m_extra_ram.get());
/* common init */
init_pcdboard();
@@ -752,7 +754,9 @@ void playch10_state::init_pceboard()
m_ppu->set_latch(*this, FUNC(playch10_state::mapper9_latch));
/* nvram at $6000-$6fff */
- m_cartcpu->space(AS_PROGRAM).install_ram(0x6000, 0x6fff);
+ m_extra_ram = std::make_unique<uint8_t[]>(0x1000);
+ save_pointer(NAME(m_extra_ram), 0x1000);
+ m_cartcpu->space(AS_PROGRAM).install_ram(0x6000, 0x6fff, m_extra_ram.get());
/* common init */
init_playch10();
@@ -787,7 +791,9 @@ void playch10_state::init_pcfboard()
void playch10_state::init_pcfboard_2()
{
/* extra ram at $6000-$6fff */
- m_cartcpu->space(AS_PROGRAM).install_ram(0x6000, 0x6fff);
+ m_extra_ram = std::make_unique<uint8_t[]>(0x1000);
+ save_pointer(NAME(m_extra_ram), 0x1000);
+ m_cartcpu->space(AS_PROGRAM).install_ram(0x6000, 0x6fff, m_extra_ram.get());
m_vram = nullptr;
@@ -963,7 +969,9 @@ void playch10_state::init_pcgboard()
m_cartcpu->space(AS_PROGRAM).install_write_handler(0x8000, 0xffff, write8sm_delegate(*this, FUNC(playch10_state::gboard_rom_switch_w)));
/* extra ram at $6000-$7fff */
- m_cartcpu->space(AS_PROGRAM).install_ram(0x6000, 0x7fff);
+ m_extra_ram = std::make_unique<uint8_t[]>(0x2000);
+ save_pointer(NAME(m_extra_ram), 0x2000);
+ m_cartcpu->space(AS_PROGRAM).install_ram(0x6000, 0x7fff, m_extra_ram.get());
m_gboard_banks[0] = 0x1e;
m_gboard_banks[1] = 0x1f;
@@ -1084,7 +1092,9 @@ void playch10_state::init_pchboard()
m_cartcpu->space(AS_PROGRAM).install_write_handler(0x8000, 0xffff, write8sm_delegate(*this, FUNC(playch10_state::hboard_rom_switch_w)));
/* extra ram at $6000-$7fff */
- m_cartcpu->space(AS_PROGRAM).install_ram(0x6000, 0x7fff);
+ m_extra_ram = std::make_unique<uint8_t[]>(0x2000);
+ save_pointer(NAME(m_extra_ram), 0x2000);
+ m_cartcpu->space(AS_PROGRAM).install_ram(0x6000, 0x7fff, m_extra_ram.get());
m_gboard_banks[0] = 0x1e;
m_gboard_banks[1] = 0x1f;
@@ -1113,7 +1123,9 @@ void playch10_state::init_pckboard()
m_mmc1_rom_mask = 0x0f;
/* extra ram at $6000-$7fff */
- m_cartcpu->space(AS_PROGRAM).install_ram(0x6000, 0x7fff);
+ m_extra_ram = std::make_unique<uint8_t[]>(0x2000);
+ save_pointer(NAME(m_extra_ram), 0x2000);
+ m_cartcpu->space(AS_PROGRAM).install_ram(0x6000, 0x7fff, m_extra_ram.get());
/* Roms are banked at $8000 to $bfff */
m_cartcpu->space(AS_PROGRAM).install_write_handler(0x8000, 0xffff, write8sm_delegate(*this, FUNC(playch10_state::mmc1_rom_switch_w)));
diff --git a/src/mame/machine/pmd85.cpp b/src/mame/machine/pmd85.cpp
index b4c6086e019..93a9edacc8b 100644
--- a/src/mame/machine/pmd85.cpp
+++ b/src/mame/machine/pmd85.cpp
@@ -46,14 +46,14 @@ void pmd85_state::pmd851_update_memory()
}
else
{
- space.install_write_bank(0x0000, 0x0fff, "bank1");
- space.install_write_bank(0x1000, 0x1fff, "bank2");
- space.install_write_bank(0x2000, 0x2fff, "bank3");
- space.install_write_bank(0x3000, 0x3fff, "bank4");
- space.install_write_bank(0x4000, 0x7fff, "bank5");
+ space.install_write_bank(0x0000, 0x0fff, m_bank[1]);
+ space.install_write_bank(0x1000, 0x1fff, m_bank[2]);
+ space.install_write_bank(0x2000, 0x2fff, m_bank[3]);
+ space.install_write_bank(0x3000, 0x3fff, m_bank[4]);
+ space.install_write_bank(0x4000, 0x7fff, m_bank[5]);
- space.install_read_bank(0x1000, 0x1fff, "bank2");
- space.install_read_bank(0x3000, 0x3fff, "bank4");
+ space.install_read_bank(0x1000, 0x1fff, m_bank[2]);
+ space.install_read_bank(0x3000, 0x3fff, m_bank[4]);
m_bank[1]->set_base(ram);
m_bank[2]->set_base(ram + 0x1000);
@@ -87,8 +87,8 @@ void pmd85_state::pmd852a_update_memory()
}
else
{
- space.install_write_bank(0x0000, 0x0fff, "bank1");
- space.install_write_bank(0x2000, 0x2fff, "bank3");
+ space.install_write_bank(0x0000, 0x0fff, m_bank[1]);
+ space.install_write_bank(0x2000, 0x2fff, m_bank[3]);
m_bank[1]->set_base(ram);
m_bank[2]->set_base(ram + 0x1000);
@@ -154,9 +154,9 @@ void pmd85_state::alfa_update_memory()
}
else
{
- space.install_write_bank(0x0000, 0x0fff, "bank1");
- space.install_write_bank(0x1000, 0x33ff, "bank2");
- space.install_write_bank(0x3400, 0x3fff, "bank3");
+ space.install_write_bank(0x0000, 0x0fff, m_bank[1]);
+ space.install_write_bank(0x1000, 0x33ff, m_bank[2]);
+ space.install_write_bank(0x3400, 0x3fff, m_bank[3]);
m_bank[1]->set_base(ram);
m_bank[2]->set_base(ram + 0x1000);
@@ -181,7 +181,7 @@ void pmd85_state::mato_update_memory()
}
else
{
- space.install_write_bank(0x0000, 0x3fff, "bank1");
+ space.install_write_bank(0x0000, 0x3fff, m_bank[1]);
m_bank[1]->set_base(ram);
m_bank[2]->set_base(ram + 0x4000);
@@ -204,7 +204,7 @@ void pmd85_state::c2717_update_memory()
}
else
{
- space.install_write_bank(0x0000, 0x3fff, "bank1");
+ space.install_write_bank(0x0000, 0x3fff, m_bank[1]);
m_bank[1]->set_base(ram);
m_bank[2]->set_base(ram + 0x4000);
}
diff --git a/src/mame/machine/primo.cpp b/src/mame/machine/primo.cpp
index ad4989257f8..41047fd6196 100644
--- a/src/mame/machine/primo.cpp
+++ b/src/mame/machine/primo.cpp
@@ -53,7 +53,7 @@ void primo_state::update_memory()
membank("bank1")->set_base(m_cart2_rom->base());
break;
case 0x02: /* RAM */
- space.install_write_bank(0x0000, 0x3fff, "bank1");
+ space.install_write_bank(0x0000, 0x3fff, membank("bank1"));
membank("bank1")->set_base(memregion("maincpu")->base());
break;
case 0x03: /* EPROM extension 2 */
diff --git a/src/mame/machine/rmnimbus.cpp b/src/mame/machine/rmnimbus.cpp
index 92d67f4bdf0..26b01f195b6 100644
--- a/src/mame/machine/rmnimbus.cpp
+++ b/src/mame/machine/rmnimbus.cpp
@@ -945,7 +945,7 @@ void rmnimbus_state::nimbus_bank_memory()
map_base=(ramsel==0x07) ? map_blocks[map_blockno] : &map_blocks[map_blockno][block_ofs*1024];
membank(bank)->set_base(map_base);
- space.install_readwrite_bank(memmap[blockno].start, memmap[blockno].end, bank);
+ space.install_readwrite_bank(memmap[blockno].start, memmap[blockno].end, membank(bank));
//if(LOG_RAM) logerror(", base=%X\n",(int)map_base);
}
else
diff --git a/src/mame/machine/scramble.cpp b/src/mame/machine/scramble.cpp
index fd9645ee105..f6cb0d18c5f 100644
--- a/src/mame/machine/scramble.cpp
+++ b/src/mame/machine/scramble.cpp
@@ -85,7 +85,7 @@ void scramble_state::cavelon_banksw()
to keep the CPU core happy at the boundaries */
m_cavelon_bank = !m_cavelon_bank;
- membank("bank1")->set_entry(m_cavelon_bank);
+ m_cavelon_bank_object->set_entry(m_cavelon_bank);
}
uint8_t scramble_state::cavelon_banksw_r(offs_t offset)
@@ -178,9 +178,8 @@ void scramble_state::init_tazmaniet()
void scramble_state::init_mariner()
{
/* extra ROM */
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x5800, 0x67ff, "bank1");
+ m_maincpu->space(AS_PROGRAM).install_rom(0x5800, 0x67ff, memregion("maincpu")->base() + 0x5800);
m_maincpu->space(AS_PROGRAM).unmap_write(0x5800, 0x67ff);
- membank("bank1")->set_base(memregion("maincpu")->base() + 0x5800);
m_maincpu->space(AS_PROGRAM).install_read_handler(0x9008, 0x9008, read8smo_delegate(*this, FUNC(scramble_state::mariner_protection_2_r)));
m_maincpu->space(AS_PROGRAM).install_read_handler(0xb401, 0xb401, read8smo_delegate(*this, FUNC(scramble_state::mariner_protection_1_r)));
@@ -254,8 +253,8 @@ void scramble_state::init_cavelon()
uint8_t *ROM = memregion("maincpu")->base();
/* banked ROM */
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x3fff, "bank1");
- membank("bank1")->configure_entries(0, 2, &ROM[0x00000], 0x10000);
+ m_maincpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x3fff, m_cavelon_bank_object);
+ m_cavelon_bank_object->configure_entries(0, 2, &ROM[0x00000], 0x10000);
cavelon_banksw();
/* A15 switches memory banks */
diff --git a/src/mame/machine/special.cpp b/src/mame/machine/special.cpp
index 58f3fdcb5f1..df5d90e3c9a 100644
--- a/src/mame/machine/special.cpp
+++ b/src/mame/machine/special.cpp
@@ -145,13 +145,13 @@ void special_state::specimx_set_bank(offs_t i, uint8_t data)
address_space &space = m_maincpu->space(AS_PROGRAM);
uint8_t *ram = m_ram->pointer();
- space.install_write_bank(0xc000, 0xffbf, "bank3");
- space.install_write_bank(0xffc0, 0xffdf, "bank4");
+ space.install_write_bank(0xc000, 0xffbf, m_bank3);
+ space.install_write_bank(0xffc0, 0xffdf, m_bank4);
m_bank4->set_base(ram + 0xffc0);
switch(i)
{
case 0 :
- space.install_write_bank(0x0000, 0x8fff, "bank1");
+ space.install_write_bank(0x0000, 0x8fff, m_bank1);
space.install_write_handler(0x9000, 0xbfff, write8sm_delegate(*this, FUNC(special_state::video_memory_w)));
m_bank1->set_base(ram);
@@ -159,8 +159,8 @@ void special_state::specimx_set_bank(offs_t i, uint8_t data)
m_bank3->set_base(ram + 0xc000);
break;
case 1 :
- space.install_write_bank(0x0000, 0x8fff, "bank1");
- space.install_write_bank(0x9000, 0xbfff, "bank2");
+ space.install_write_bank(0x0000, 0x8fff, m_bank1);
+ space.install_write_bank(0x9000, 0xbfff, m_bank2);
m_bank1->set_base(ram + 0x10000);
m_bank2->set_base(ram + 0x19000);
@@ -233,12 +233,12 @@ void special_state::erik_set_bank()
uint8_t *ram = m_ram->pointer();
address_space &space = m_maincpu->space(AS_PROGRAM);
- space.install_write_bank(0x0000, 0x3fff, "bank1");
- space.install_write_bank(0x4000, 0x8fff, "bank2");
- space.install_write_bank(0x9000, 0xbfff, "bank3");
- space.install_write_bank(0xc000, 0xefff, "bank4");
- space.install_write_bank(0xf000, 0xf7ff, "bank5");
- space.install_write_bank(0xf800, 0xffff, "bank6");
+ space.install_write_bank(0x0000, 0x3fff, m_bank1);
+ space.install_write_bank(0x4000, 0x8fff, m_bank2);
+ space.install_write_bank(0x9000, 0xbfff, m_bank3);
+ space.install_write_bank(0xc000, 0xefff, m_bank4);
+ space.install_write_bank(0xf000, 0xf7ff, m_bank5);
+ space.install_write_bank(0xf800, 0xffff, m_bank6);
switch(bank1)
{
diff --git a/src/mame/machine/ti85.cpp b/src/mame/machine/ti85.cpp
index d6dac529553..60d52b15f5b 100644
--- a/src/mame/machine/ti85.cpp
+++ b/src/mame/machine/ti85.cpp
@@ -141,7 +141,7 @@ void ti85_state::ti8x_update_bank(address_space &space, uint8_t bank, uint8_t *b
membank(tag[bank&3])->set_base(base + (0x4000 * page));
if (is_ram)
- space.install_write_bank(bank * 0x4000, bank * 0x4000 + 0x3fff, tag[bank&3]);
+ space.install_write_bank(bank * 0x4000, bank * 0x4000 + 0x3fff, membank(tag[bank&3]));
else
space.nop_write(bank * 0x4000, bank * 0x4000 + 0x3fff);
}
diff --git a/src/mame/machine/vsnes.cpp b/src/mame/machine/vsnes.cpp
index 4933f6941a8..889a0b74f3b 100644
--- a/src/mame/machine/vsnes.cpp
+++ b/src/mame/machine/vsnes.cpp
@@ -218,9 +218,8 @@ MACHINE_START_MEMBER(vsnes_state,vsnes)
{
for (i = 0; i < 8; i++)
{
- ppu1_space.install_read_bank(0x0400 * i, 0x0400 * i + 0x03ff, chr_banknames[i]);
- m_bank_vrom[i] = membank(chr_banknames[i]);
- m_bank_vrom[i]->configure_entries(0, m_vrom_banks, m_vrom[0], 0x400);
+ ppu1_space.install_read_bank(0x0400 * i, 0x0400 * i + 0x03ff, m_chr_banks[i]);
+ m_chr_banks[i]->configure_entries(0, m_vrom_banks, m_vrom[0], 0x400);
}
v_set_videorom_bank(0, 8, 0);
}
@@ -253,11 +252,9 @@ MACHINE_START_MEMBER(vsnes_state,vsdual)
m_ppu1->space(AS_PROGRAM).install_readwrite_handler(0x2000, 0x3eff, read8sm_delegate(*this, FUNC(vsnes_state::vsnes_nt0_r)), write8sm_delegate(*this, FUNC(vsnes_state::vsnes_nt0_w)));
m_ppu2->space(AS_PROGRAM).install_readwrite_handler(0x2000, 0x3eff, read8sm_delegate(*this, FUNC(vsnes_state::vsnes_nt1_r)), write8sm_delegate(*this, FUNC(vsnes_state::vsnes_nt1_w)));
// read only!
- m_ppu1->space(AS_PROGRAM).install_read_bank(0x0000, 0x1fff, "bank2");
+ m_ppu1->space(AS_PROGRAM).install_read_bank(0x0000, 0x1fff, m_bank_vrom[0]);
// read only!
- m_ppu2->space(AS_PROGRAM).install_read_bank(0x0000, 0x1fff, "bank3");
- m_bank_vrom[0] = membank("bank2");
- m_bank_vrom[1] = membank("bank3");
+ m_ppu2->space(AS_PROGRAM).install_read_bank(0x0000, 0x1fff, m_bank_vrom[1]);
m_bank_vrom[0]->configure_entries(0, m_vrom_size[0] / 0x2000, m_vrom[0], 0x2000);
m_bank_vrom[1]->configure_entries(0, m_vrom_size[1] / 0x2000, m_vrom[1], 0x2000);
m_bank_vrom[0]->set_entry(0);
@@ -280,8 +277,7 @@ MACHINE_START_MEMBER(vsnes_state, bootleg)
m_vrom_banks = m_vrom_size[0] / 0x2000;
/* establish chr banks */
- m_ppu1->space(AS_PROGRAM).install_read_bank(0x0000, 0x1fff, "bank2");
- m_bank_vrom[0] = membank("bank2");
+ m_ppu1->space(AS_PROGRAM).install_read_bank(0x0000, 0x1fff, m_bank_vrom[0]);
m_bank_vrom[0]->configure_entries(0, m_vrom_banks, m_vrom[0], 0x2000);
m_bank_vrom[0]->set_entry(0);
}
@@ -830,7 +826,9 @@ void vsnes_state::init_MMC3()
m_maincpu->space(AS_PROGRAM).install_write_handler(0x8000, 0xffff, write8sm_delegate(*this, FUNC(vsnes_state::mapper4_w)));
/* extra ram at $6000-$7fff */
- m_maincpu->space(AS_PROGRAM).install_ram(0x6000, 0x7fff);
+ m_extraram = std::make_unique<uint8_t[]>(0x2000);
+ save_pointer(NAME(m_extraram.get()), 0x2000);
+ m_maincpu->space(AS_PROGRAM).install_ram(0x6000, 0x7fff, m_extraram.get());
}
/* Vs. RBI Baseball */
@@ -1028,7 +1026,9 @@ void vsnes_state::init_bnglngby()
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x0231, 0x0231, read8smo_delegate(*this, FUNC(vsnes_state::set_bnglngby_irq_r)), write8smo_delegate(*this, FUNC(vsnes_state::set_bnglngby_irq_w)));
/* extra ram */
- m_maincpu->space(AS_PROGRAM).install_ram(0x6000, 0x7fff);
+ m_extraram = std::make_unique<uint8_t[]>(0x2000);
+ save_pointer(NAME(m_extraram.get()), 0x2000);
+ m_maincpu->space(AS_PROGRAM).install_ram(0x6000, 0x7fff, m_extraram.get());
m_ret = 0;
diff --git a/src/mame/video/abc80.cpp b/src/mame/video/abc80.cpp
index c5cf846b425..98f3675146f 100644
--- a/src/mame/video/abc80.cpp
+++ b/src/mame/video/abc80.cpp
@@ -170,9 +170,6 @@ void abc80_state::video_start()
m_vsync_off_timer = timer_alloc(TIMER_ID_VSYNC_OFF);
m_vsync_off_timer->adjust(m_screen->time_until_pos(16, 0), 0, m_screen->frame_period());
-
- // allocate memory
- m_video_ram.allocate(0x400);
}
diff --git a/src/mame/video/abc800.cpp b/src/mame/video/abc800.cpp
index bc6f3636a9d..be8000e5e25 100644
--- a/src/mame/video/abc800.cpp
+++ b/src/mame/video/abc800.cpp
@@ -274,10 +274,6 @@ uint32_t abc800m_state::screen_update(screen_device &screen, bitmap_rgb32 &bitma
void abc800_state::video_start()
{
- // allocate memory
- m_char_ram.allocate(m_char_ram_size);
- m_video_ram.allocate(ABC800_VIDEO_RAM_SIZE);
-
// register for state saving
save_item(NAME(m_hrs));
save_item(NAME(m_fgctl));
diff --git a/src/mame/video/abc802.cpp b/src/mame/video/abc802.cpp
index e42d84afc5f..ff5c01c0287 100644
--- a/src/mame/video/abc802.cpp
+++ b/src/mame/video/abc802.cpp
@@ -176,9 +176,6 @@ WRITE_LINE_MEMBER( abc802_state::vs_w )
void abc802_state::video_start()
{
- // allocate memory
- m_char_ram.allocate(m_char_ram_size);
-
// register for state saving
save_item(NAME(m_flshclk_ctr));
save_item(NAME(m_flshclk));
diff --git a/src/mame/video/abc806.cpp b/src/mame/video/abc806.cpp
index 558b217832c..6917ade0d94 100644
--- a/src/mame/video/abc806.cpp
+++ b/src/mame/video/abc806.cpp
@@ -421,13 +421,6 @@ void abc806_state::hr_update(bitmap_rgb32 &bitmap, const rectangle &cliprect)
void abc806_state::video_start()
{
- // allocate memory
- m_char_ram.allocate(m_char_ram_size);
- m_attr_ram.allocate(m_char_ram_size);
-
- uint32_t videoram_size = m_ram->size() - 0x8000;
- m_video_ram.allocate(videoram_size);
-
// register for state saving
save_item(NAME(m_txoff));
save_item(NAME(m_40));
diff --git a/src/mame/video/atarimo.cpp b/src/mame/video/atarimo.cpp
index 7ceb6e23699..c17dc39e324 100644
--- a/src/mame/video/atarimo.cpp
+++ b/src/mame/video/atarimo.cpp
@@ -145,7 +145,8 @@ atari_motion_objects_device::atari_motion_objects_device(const machine_config &m
, m_bank(0)
, m_xscroll(0)
, m_yscroll(0)
- , m_slipram(*this, "slip")
+ , m_slipram(nullptr)
+ , m_slipramshare(*this, "slip")
, m_activelast(nullptr)
, m_last_xpos(0)
, m_next_xpos(0)
@@ -301,6 +302,10 @@ void atari_motion_objects_device::device_start()
if (m_maxperline == 0)
m_maxperline = MAX_PER_BANK;
+ // Get the slipram from the share if not already explicitly set
+ if (!m_slipram)
+ m_slipram = m_slipramshare;
+
// allocate and initialize the code lookup
int codesize = round_to_powerof2(m_codemask.mask());
m_codelookup.resize(codesize);
diff --git a/src/mame/video/atarimo.h b/src/mame/video/atarimo.h
index 8fc8e2db95d..be98a3ad8a8 100644
--- a/src/mame/video/atarimo.h
+++ b/src/mame/video/atarimo.h
@@ -97,7 +97,7 @@ public:
void set_xscroll(int xscroll) { m_xscroll = xscroll & m_bitmapxmask; }
void set_yscroll(int yscroll) { m_yscroll = yscroll & m_bitmapymask; }
void set_scroll(int xscroll, int yscroll) { set_xscroll(xscroll); set_yscroll(yscroll); }
- void set_slipram(uint16_t *ram) { m_slipram.set_target(ram, 2); }
+ void set_slipram(uint16_t *ram) { m_slipram = ram; }
// rendering
virtual void draw(bitmap_ind16 &bitmap, const rectangle &cliprect) override;
@@ -201,21 +201,22 @@ private:
// live state
emu_timer * m_force_update_timer; // timer for forced updating
- uint32_t m_bank; // current bank number
- uint32_t m_xscroll; // xscroll offset
- uint32_t m_yscroll; // yscroll offset
+ uint32_t m_bank; // current bank number
+ uint32_t m_xscroll; // xscroll offset
+ uint32_t m_yscroll; // yscroll offset
// arrays
- optional_shared_ptr<uint16_t> m_slipram; // pointer to the SLIP RAM
+ uint16_t * m_slipram; // pointer to the SLIP RAM
+ optional_shared_ptr<u16> m_slipramshare;
std::vector<uint32_t> m_codelookup; // lookup table for codes
std::vector<uint8_t> m_colorlookup; // lookup table for colors
std::vector<uint8_t> m_gfxlookup; // lookup table for graphics
- uint16_t m_activelist[MAX_PER_BANK*4]; // active list
- uint16_t * m_activelast; // last entry in the active list
+ uint16_t m_activelist[MAX_PER_BANK*4]; // active list
+ uint16_t * m_activelast; // last entry in the active list
- uint32_t m_last_xpos; // (during processing) the previous X position
- uint32_t m_next_xpos; // (during processing) the next X position
+ uint32_t m_last_xpos; // (during processing) the previous X position
+ uint32_t m_next_xpos; // (during processing) the next X position
required_device<gfxdecode_device> m_gfxdecode;
};
diff --git a/src/mame/video/avgdvg.cpp b/src/mame/video/avgdvg.cpp
index 45badf975a5..c247bb33fbc 100644
--- a/src/mame/video/avgdvg.cpp
+++ b/src/mame/video/avgdvg.cpp
@@ -1426,8 +1426,8 @@ void dvg_device::device_start()
avgdvg_device::avgdvg_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_vectorram(*this, "vectorram", 0)
- , m_colorram(*this, "colorram", 0)
+ , m_vectorram(*this, "vectorram")
+ , m_colorram(*this, "colorram")
, m_prom(*this, "prom")
, m_vector(*this, finder_base::DUMMY_TAG)
{
diff --git a/src/mame/video/comx35.cpp b/src/mame/video/comx35.cpp
index 2930a025e5d..80183877f8a 100644
--- a/src/mame/video/comx35.cpp
+++ b/src/mame/video/comx35.cpp
@@ -83,8 +83,6 @@ WRITE_LINE_MEMBER( comx35_state::prd_w )
void comx35_state::video_start()
{
- // allocate memory
- m_char_ram.allocate(COMX35_CHARRAM_SIZE);
}
/* Machine Drivers */
diff --git a/src/mame/video/dgn_beta.cpp b/src/mame/video/dgn_beta.cpp
index 1850f89f815..d2f134e6baa 100644
--- a/src/mame/video/dgn_beta.cpp
+++ b/src/mame/video/dgn_beta.cpp
@@ -101,7 +101,7 @@ the access to the video memory is unclear to me at the moment.
MC6845_UPDATE_ROW( dgn_beta_state::crtc_update_row )
{
rgb_t const *const palette = m_palette->palette()->entry_list_raw();
- uint8_t const *const videoram = m_videoram;
+ uint8_t const *const videoram = m_ram->pointer();
uint32_t *p = &bitmap.pix(y);
int i;
if(IsTextMode)
diff --git a/src/mame/video/fromance.cpp b/src/mame/video/fromance.cpp
index d0f0e9f4d00..605469344a4 100644
--- a/src/mame/video/fromance.cpp
+++ b/src/mame/video/fromance.cpp
@@ -327,7 +327,7 @@ uint32_t fromance_state::screen_update_pipedrm(screen_device &screen, bitmap_ind
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
- m_spr_old->turbofrc_draw_sprites((uint16_t*)sram, m_spriteram.bytes(), 0, bitmap, cliprect, screen.priority(), 0);
- m_spr_old->turbofrc_draw_sprites((uint16_t*)sram, m_spriteram.bytes(), 0, bitmap, cliprect, screen.priority(), 1);
+ m_spr_old->turbofrc_draw_sprites((uint16_t*)sram, m_spriteram_size, 0, bitmap, cliprect, screen.priority(), 0);
+ m_spr_old->turbofrc_draw_sprites((uint16_t*)sram, m_spriteram_size, 0, bitmap, cliprect, screen.priority(), 1);
return 0;
}
diff --git a/src/mame/video/igs017_igs031.cpp b/src/mame/video/igs017_igs031.cpp
index a214d93d2e4..2e07c242f63 100644
--- a/src/mame/video/igs017_igs031.cpp
+++ b/src/mame/video/igs017_igs031.cpp
@@ -68,10 +68,10 @@ igs017_igs031_device::igs017_igs031_device(const machine_config &mconfig, const
, device_memory_interface(mconfig, *this)
, m_palette_scramble_cb(*this, FUNC(igs017_igs031_device::palette_callback_straight))
, m_space_config("igs017_igs031", ENDIANNESS_BIG, 8,15, 0, address_map_constructor(FUNC(igs017_igs031_device::map), this))
- , m_spriteram(*this, "spriteram", 0)
- , m_fg_videoram(*this, "fg_videoram", 0)
- , m_bg_videoram(*this, "bg_videoram", 0)
- , m_palram(*this, "palram", 0)
+ , m_spriteram(*this, "spriteram")
+ , m_fg_videoram(*this, "fg_videoram")
+ , m_bg_videoram(*this, "bg_videoram")
+ , m_palram(*this, "palram")
, m_i8255(*this, finder_base::DUMMY_TAG)
, m_palette(*this, "palette")
, m_revbits(false)
diff --git a/src/mame/video/ojankohs.cpp b/src/mame/video/ojankohs.cpp
index 57509869188..a7970d5b300 100644
--- a/src/mame/video/ojankohs.cpp
+++ b/src/mame/video/ojankohs.cpp
@@ -248,29 +248,21 @@ void ojankohs_state::ojankoc_videoram_w(offs_t offset, uint8_t data)
VIDEO_START_MEMBER(ojankohs_state,ojankohs)
{
m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ojankohs_state::ojankohs_get_tile_info)), TILEMAP_SCAN_ROWS, 8, 4, 64, 64);
-// m_videoram = std::make_unique<uint8_t[]>(0x1000);
-// m_colorram = std::make_unique<uint8_t[]>(0x1000);
-// m_paletteram = std::make_unique<uint8_t[]>(0x800);
}
VIDEO_START_MEMBER(ojankohs_state,ojankoy)
{
m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ojankohs_state::ojankoy_get_tile_info)), TILEMAP_SCAN_ROWS, 8, 4, 64, 64);
-// m_videoram = std::make_unique<uint8_t[]>(0x2000);
-// m_colorram = std::make_unique<uint8_t[]>(0x1000);
}
VIDEO_START_MEMBER(ojankohs_state,ccasino)
{
VIDEO_START_CALL_MEMBER(ojankoy);
- m_paletteram.allocate(0x800);
}
VIDEO_START_MEMBER(ojankohs_state,ojankoc)
{
m_screen->register_screen_bitmap(m_tmpbitmap);
- m_videoram.allocate(0x8000);
- m_paletteram.allocate(0x20);
save_item(NAME(m_tmpbitmap));
}
diff --git a/src/mame/video/qix.cpp b/src/mame/video/qix.cpp
index 5a10f61d378..61eb6017f0b 100644
--- a/src/mame/video/qix.cpp
+++ b/src/mame/video/qix.cpp
@@ -22,9 +22,6 @@
void qix_state::video_start()
{
- /* allocate memory for the full video RAM */
- m_videoram.allocate(256 * 256);
-
/* initialize the palette */
for (int x = 0; x < 0x400; x++)
set_pen(x);
diff --git a/src/mame/video/suna8.cpp b/src/mame/video/suna8.cpp
index edb3b1e9f62..e5eead2cbdb 100644
--- a/src/mame/video/suna8.cpp
+++ b/src/mame/video/suna8.cpp
@@ -17,47 +17,12 @@
sent to the screen. Each sprite uses 4 bytes, held within the last
page of tiles.
- Set TILEMAPS to 1 to debug.
- Press Z (you see the "tilemaps" in RAM) or
- Press X (you see the "tilemaps" in ROM) then
-
- - use Q&W to cycle through the pages.
- - Use E&R to cycle through the tiles banks.
- - Use A&S to cycle through the ROM banks (only with X pressed, of course).
-
***************************************************************************/
#include "emu.h"
#include "includes/suna8.h"
#include "drawgfxt.ipp"
-/***************************************************************************
- For Debug: there's no tilemap, just sprites.
-***************************************************************************/
-#if TILEMAPS
-TILE_GET_INFO_MEMBER(suna8_state::get_tile_info)
-{
- uint8_t code, attr;
-
- if (machine().input().code_pressed(KEYCODE_X))
- {
- uint8_t *rom = memregion("maincpu")->base() + 0x10000 + 0x4000 * m_trombank;
- code = rom[ 2 * tile_index + 0 ];
- attr = rom[ 2 * tile_index + 1 ];
- }
- else
- {
- code = m_spriteram[ 2 * tile_index + 0 ];
- attr = m_spriteram[ 2 * tile_index + 1 ];
- }
- tileinfo.set(m_page / 8,
- ( (attr & 0x03) << 8 ) + code + m_tiles*0x400,
- (attr >> 2) & 0xf,
- TILE_FLIPYX( (attr >> 6) & 3 ));
-}
-#endif
-
-
uint8_t suna8_state::banked_paletteram_r(offs_t offset)
{
offset += m_palettebank * 0x200;
@@ -67,24 +32,18 @@ uint8_t suna8_state::banked_paletteram_r(offs_t offset)
uint8_t suna8_state::suna8_banked_spriteram_r(offs_t offset)
{
offset += m_spritebank * 0x2000;
- return m_spriteram[offset];
+ return m_banked_spriteram[offset];
}
void suna8_state::suna8_spriteram_w(offs_t offset, uint8_t data)
{
m_spriteram[offset] = data;
-#if TILEMAPS
- m_bg_tilemap->mark_tile_dirty(offset/2);
-#endif
}
void suna8_state::suna8_banked_spriteram_w(offs_t offset, uint8_t data)
{
offset += m_spritebank * 0x2000;
- m_spriteram[offset] = data;
-#if TILEMAPS
- m_bg_tilemap->mark_tile_dirty(offset/2);
-#endif
+ m_banked_spriteram[offset] = data;
}
/*
@@ -145,20 +104,6 @@ void suna8_state::suna8_vh_start_common(bool has_text, GFXBANK_TYPE_T gfxbank_ty
m_gfxbank = 0;
m_gfxbank_type = gfxbank_type;
m_palettebank = 0;
-
- if (!m_has_text)
- {
- m_banked_paletteram.allocate(0x200 * 2);
-
- m_spriteram.allocate(0x2000 * 2 * 2); // 2 RAM banks, sparkman has 2 "chips"
- memset(m_spriteram,0,0x2000 * 2 * 2); // helps debugging
- }
-
-#if TILEMAPS
- m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(suna8_state::get_tile_info)), TILEMAP_SCAN_COLS,
- 8, 8, 0x20*(m_has_text ? 4 : 16), 0x20);
- m_bg_tilemap->set_transparent_pen(15);
-#endif
}
VIDEO_START_MEMBER(suna8_state,suna8_text) { suna8_vh_start_common( true, GFXBANK_TYPE_SPARKMAN); }
@@ -231,7 +176,7 @@ while (0)
void suna8_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int start, int end, int which)
{
- uint8_t *spriteram = m_spriteram + which * 0x2000 * 2;
+ uint8_t *spriteram = m_spriteram ? m_spriteram : m_banked_spriteram + which * 0x2000 * 2;
int mx = 0; // multisprite x counter
@@ -459,7 +404,7 @@ void suna8_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, cons
void suna8_state::draw_text_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int start, int end, int ypos, bool write_mask)
{
- uint8_t *spriteram = m_spriteram;
+ uint8_t *spriteram = m_spriteram ? m_spriteram : m_banked_spriteram;
int max_x = m_screen->width() - 8;
int max_y = m_screen->height() - 8;
@@ -542,37 +487,6 @@ uint32_t suna8_state::screen_update_suna8(screen_device &screen, bitmap_ind16 &b
// see hardhead, hardhea2 test mode (press button 2 for both players)
bitmap.fill(0xff, cliprect);
-#ifdef MAME_DEBUG
-#if TILEMAPS
- if (machine().input().code_pressed(KEYCODE_Z) || machine().input().code_pressed(KEYCODE_X))
- {
- int max_tiles = memregion("gfx1")->bytes() / (0x400 * 0x20);
-
- if (machine().input().code_pressed_once(KEYCODE_Q)) { m_page--; machine().tilemap().mark_all_dirty(); }
- if (machine().input().code_pressed_once(KEYCODE_W)) { m_page++; machine().tilemap().mark_all_dirty(); }
- if (machine().input().code_pressed_once(KEYCODE_E)) { m_tiles--; machine().tilemap().mark_all_dirty(); }
- if (machine().input().code_pressed_once(KEYCODE_R)) { m_tiles++; machine().tilemap().mark_all_dirty(); }
- if (machine().input().code_pressed_once(KEYCODE_A)) { m_trombank--; machine().tilemap().mark_all_dirty(); }
- if (machine().input().code_pressed_once(KEYCODE_S)) { m_trombank++; machine().tilemap().mark_all_dirty(); }
-
- m_trombank &= 0xf;
- m_page &= m_has_text ? 3 : (m_gfxdecode->gfx(1) ? 15 : 7);
- m_tiles %= max_tiles;
- if (m_tiles < 0) m_tiles += max_tiles;
-
- m_bg_tilemap->set_scrollx(0, 0x100 * m_page);
- m_bg_tilemap->set_scrolly(0, 0);
- m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
-#if 1
- popmessage("%02X %02X %02X - p%2X g%02X r%02X",
- m_rombank, m_palettebank, m_spritebank,
- m_page, m_tiles, m_trombank);
-#endif
- return 0;
- }
-#endif
-#endif
-
// Sprites
draw_sprites(screen, bitmap, cliprect, 0x1d00, 0x2000, 0);
diff --git a/src/mame/video/tc0150rod.cpp b/src/mame/video/tc0150rod.cpp
index bb65c4ae8ec..3f81ae26ada 100644
--- a/src/mame/video/tc0150rod.cpp
+++ b/src/mame/video/tc0150rod.cpp
@@ -16,7 +16,7 @@ DEFINE_DEVICE_TYPE(TC0150ROD, tc0150rod_device, "tc0150rod", "Taito TC0150ROD")
tc0150rod_device::tc0150rod_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, TC0150ROD, tag, owner, clock)
- , m_roadgfx(*this, DEVICE_SELF, 0x40000)
+ , m_roadgfx(*this, DEVICE_SELF)
{
}
diff --git a/src/mame/video/tmc600.cpp b/src/mame/video/tmc600.cpp
index c87fee27b5f..73bcd5c6412 100644
--- a/src/mame/video/tmc600.cpp
+++ b/src/mame/video/tmc600.cpp
@@ -89,9 +89,6 @@ WRITE_LINE_MEMBER( tmc600_state::prd_w )
void tmc600_state::video_start()
{
- // allocate memory
- m_color_ram.allocate(TMC600_PAGE_RAM_SIZE);
-
// state saving
save_item(NAME(m_vismac_reg_latch));
save_item(NAME(m_vismac_color_latch));
diff --git a/src/mame/video/toaplan1.cpp b/src/mame/video/toaplan1.cpp
index 5fd0be9203e..e90089eca16 100644
--- a/src/mame/video/toaplan1.cpp
+++ b/src/mame/video/toaplan1.cpp
@@ -192,7 +192,6 @@ void toaplan1_state::vram_alloc()
void toaplan1_state::spritevram_alloc()
{
- 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);
@@ -234,8 +233,8 @@ void toaplan1_rallybik_state::video_start()
create_tilemaps();
vram_alloc();
- m_buffered_spriteram = make_unique_clear<u16[]>(m_spriteram.bytes() / 2);
- save_pointer(NAME(m_buffered_spriteram), m_spriteram.bytes() / 2);
+ m_buffered_spriteram = make_unique_clear<u16[]>(m_spriteram.share()->bytes() / 2);
+ save_pointer(NAME(m_buffered_spriteram), m_spriteram.share()->bytes() / 2);
m_tilemap[0]->set_scrolldx(-0x00d - 6, -0x80 + 6);
m_tilemap[1]->set_scrolldx(-0x00d - 4, -0x80 + 4);
@@ -772,7 +771,7 @@ void toaplan1_state::draw_sprites(screen_device &screen, bitmap_rgb32 &bitmap, c
u16 *size = (u16 *)m_buffered_spritesizeram.get();
int fcu_flipscreen = m_fcu_flipscreen;
- for (int offs = m_spriteram.bytes() / 2 - 4; offs >= 0; offs -= 4)
+ for (int offs = m_spriteram.share()->bytes() / 2 - 4; offs >= 0; offs -= 4)
{
if (!(source[offs] & 0x8000))
{
@@ -840,7 +839,7 @@ u32 toaplan1_rallybik_state::screen_update(screen_device &screen, bitmap_rgb32 &
{
log_vram();
- m_spritegen->draw_sprites_to_tempbitmap(cliprect, m_buffered_spriteram.get(), m_spriteram.bytes());
+ m_spritegen->draw_sprites_to_tempbitmap(cliprect, m_buffered_spriteram.get(), m_spriteram.share()->bytes());
// first draw everything, including "disabled" tiles and priority 0
m_tilemap[0]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE | TILEMAP_DRAW_ALL_CATEGORIES, 0);
@@ -896,7 +895,7 @@ WRITE_LINE_MEMBER(toaplan1_rallybik_state::screen_vblank)
// rising edge
if (state)
{
- memcpy(m_buffered_spriteram.get(), m_spriteram, m_spriteram.bytes());
+ memcpy(m_buffered_spriteram.get(), m_spriteram, m_spriteram.share()->bytes());
interrupt();
}
}
@@ -906,7 +905,7 @@ WRITE_LINE_MEMBER(toaplan1_state::screen_vblank)
// rising edge
if (state)
{
- memcpy(m_buffered_spriteram.get(), m_spriteram, m_spriteram.bytes());
+ memcpy(m_buffered_spriteram.get(), m_spriteram, m_spriteram.share()->bytes());
memcpy(m_buffered_spritesizeram.get(), m_spritesizeram.get(), TOAPLAN1_SPRITESIZERAM_SIZE);
interrupt();
}
@@ -917,7 +916,7 @@ 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_spriteram.get(), m_spriteram, m_spriteram.share()->bytes());
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/v1050.cpp b/src/mame/video/v1050.cpp
index b045e93f1c7..3b65ad29cef 100644
--- a/src/mame/video/v1050.cpp
+++ b/src/mame/video/v1050.cpp
@@ -98,9 +98,6 @@ WRITE_LINE_MEMBER( v1050_state::crtc_vs_w )
void v1050_state::video_start()
{
- /* allocate memory */
- m_attr_ram.allocate(V1050_VIDEORAM_SIZE);
-
/* register for state saving */
save_item(NAME(m_attr));
}
diff --git a/src/mame/video/zaxxon.cpp b/src/mame/video/zaxxon.cpp
index b9985fd4d41..c420c27d3f6 100644
--- a/src/mame/video/zaxxon.cpp
+++ b/src/mame/video/zaxxon.cpp
@@ -156,9 +156,6 @@ VIDEO_START_MEMBER(zaxxon_state,razmataz)
VIDEO_START_MEMBER(zaxxon_state,congo)
{
- /* allocate our own spriteram since it is not accessible by the main CPU */
- m_spriteram.allocate(0x100);
-
/* register for save states */
save_item(NAME(m_congo_fg_bank));
save_item(NAME(m_congo_color_bank));