summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2019-03-26 11:13:37 +1100
committer Vas Crabb <vas@vastheman.com>2019-03-26 11:13:37 +1100
commit97b67170277437131adf6ed4d60139c172529e4f (patch)
tree7a5cbf608f191075f1612b1af15832c206a3fe2d /src/devices/bus
parentb380514764cf857469bae61c11143a19f79a74c5 (diff)
(nw) Clean up the mess on master
This effectively reverts b380514764cf857469bae61c11143a19f79a74c5 and c24473ddff715ecec2e258a6eb38960cf8c8e98e, restoring the state at 598cd5227223c3b04ca31f0dbc1981256d9ea3ff. Before pushing, please check that what you're about to push is sane. Check your local commit log and ensure there isn't anything out-of-place before pushing to mainline. When things like this happen, it wastes everyone's time. I really don't need this in a week when real work™ is busting my balls and I'm behind where I want to be with preparing for MAME release.
Diffstat (limited to 'src/devices/bus')
-rw-r--r--src/devices/bus/a1bus/a1bus.cpp6
-rw-r--r--src/devices/bus/a1bus/a1bus.h21
-rw-r--r--src/devices/bus/a1bus/a1cassette.cpp11
-rw-r--r--src/devices/bus/a2bus/a2alfam2.cpp44
-rw-r--r--src/devices/bus/a2bus/a2arcadebd.cpp6
-rw-r--r--src/devices/bus/a2bus/a2bus.cpp28
-rw-r--r--src/devices/bus/a2bus/a2bus.h49
-rw-r--r--src/devices/bus/a2bus/a2cffa.cpp2
-rw-r--r--src/devices/bus/a2bus/a2corvus.cpp19
-rw-r--r--src/devices/bus/a2bus/a2diskii.cpp22
-rw-r--r--src/devices/bus/a2bus/a2diskiing.cpp29
-rw-r--r--src/devices/bus/a2bus/a2diskiing.h5
-rw-r--r--src/devices/bus/a2bus/a2dx1.cpp14
-rw-r--r--src/devices/bus/a2bus/a2eauxslot.cpp37
-rw-r--r--src/devices/bus/a2bus/a2eauxslot.h59
-rw-r--r--src/devices/bus/a2bus/a2eext80col.cpp1
-rw-r--r--src/devices/bus/a2bus/a2eramworks3.cpp3
-rw-r--r--src/devices/bus/a2bus/a2eramworks3.h2
-rw-r--r--src/devices/bus/a2bus/a2estd80col.cpp1
-rw-r--r--src/devices/bus/a2bus/a2hsscsi.cpp39
-rw-r--r--src/devices/bus/a2bus/a2hsscsi.h2
-rw-r--r--src/devices/bus/a2bus/a2mcms.cpp18
-rw-r--r--src/devices/bus/a2bus/a2mcms.h2
-rw-r--r--src/devices/bus/a2bus/a2memexp.cpp5
-rw-r--r--src/devices/bus/a2bus/a2midi.cpp22
-rw-r--r--src/devices/bus/a2bus/a2mockingboard.cpp50
-rw-r--r--src/devices/bus/a2bus/a2pic.cpp8
-rw-r--r--src/devices/bus/a2bus/a2sam.cpp12
-rw-r--r--src/devices/bus/a2bus/a2scsi.cpp39
-rw-r--r--src/devices/bus/a2bus/a2scsi.h2
-rw-r--r--src/devices/bus/a2bus/a2softcard.cpp28
-rw-r--r--src/devices/bus/a2bus/a2ssc.cpp4
-rw-r--r--src/devices/bus/a2bus/a2themill.cpp28
-rw-r--r--src/devices/bus/a2bus/a2ultraterm.cpp17
-rw-r--r--src/devices/bus/a2bus/a2videoterm.cpp17
-rw-r--r--src/devices/bus/a2bus/a2zipdrive.cpp107
-rw-r--r--src/devices/bus/a2bus/a2zipdrive.h18
-rw-r--r--src/devices/bus/a2bus/agat7ports.cpp12
-rw-r--r--src/devices/bus/a2bus/agat840k_hle.cpp15
-rw-r--r--src/devices/bus/a2bus/corvfdc02.cpp6
-rw-r--r--src/devices/bus/a2bus/ezcgi.cpp34
-rw-r--r--src/devices/bus/a2bus/laser128.cpp5
-rw-r--r--src/devices/bus/a2bus/mouse.cpp4
-rw-r--r--src/devices/bus/a2bus/pc_xporter.cpp45
-rw-r--r--src/devices/bus/a2bus/pc_xporter.h1
-rw-r--r--src/devices/bus/a2bus/ssbapple.cpp9
-rw-r--r--src/devices/bus/a2bus/ssprite.cpp6
-rw-r--r--src/devices/bus/a2bus/timemasterho.cpp4
-rw-r--r--src/devices/bus/a2bus/transwarp.cpp37
-rw-r--r--src/devices/bus/a2bus/transwarp.h1
-rw-r--r--src/devices/bus/a7800/cpuwiz.cpp8
-rw-r--r--src/devices/bus/a7800/cpuwiz.h4
-rw-r--r--src/devices/bus/a7800/rom.cpp59
-rw-r--r--src/devices/bus/a7800/rom.h16
-rw-r--r--src/devices/bus/a7800/xboard.cpp12
-rw-r--r--src/devices/bus/a800/cassette.cpp13
-rw-r--r--src/devices/bus/abcbus/abc890.cpp112
-rw-r--r--src/devices/bus/abcbus/abcbus.h72
-rw-r--r--src/devices/bus/abcbus/cadmouse.cpp11
-rw-r--r--src/devices/bus/abcbus/db411223.cpp11
-rw-r--r--src/devices/bus/abcbus/unidisk.cpp5
-rw-r--r--src/devices/bus/abckb/abc77.cpp8
-rw-r--r--src/devices/bus/abckb/abc99.cpp2
-rw-r--r--src/devices/bus/abckb/abckb.h41
-rw-r--r--src/devices/bus/acorn/atom/discpack.cpp2
-rw-r--r--src/devices/bus/acorn/atom/econet.cpp2
-rw-r--r--src/devices/bus/acorn/atom/sid.cpp2
-rw-r--r--src/devices/bus/acorn/bus.cpp2
-rw-r--r--src/devices/bus/acorn/bus.h6
-rw-r--r--src/devices/bus/acorn/cms/4080term.cpp22
-rw-r--r--src/devices/bus/acorn/cms/hires.cpp15
-rw-r--r--src/devices/bus/acorn/system/cass.cpp9
-rw-r--r--src/devices/bus/acorn/system/econet.cpp2
-rw-r--r--src/devices/bus/acorn/system/fdc.cpp2
-rw-r--r--src/devices/bus/acorn/system/vdu40.cpp15
-rw-r--r--src/devices/bus/acorn/system/vdu80.cpp19
-rw-r--r--src/devices/bus/acorn/system/vib.cpp10
-rw-r--r--src/devices/bus/adam/adamlink.cpp4
-rw-r--r--src/devices/bus/adam/adamlink.h4
-rw-r--r--src/devices/bus/adam/exp.cpp8
-rw-r--r--src/devices/bus/adam/exp.h8
-rw-r--r--src/devices/bus/adam/ide.cpp4
-rw-r--r--src/devices/bus/adam/ide.h4
-rw-r--r--src/devices/bus/adam/ram.cpp4
-rw-r--r--src/devices/bus/adam/ram.h4
-rw-r--r--src/devices/bus/adamnet/adamnet.h11
-rw-r--r--src/devices/bus/adamnet/ddp.cpp27
-rw-r--r--src/devices/bus/adamnet/spi.cpp8
-rw-r--r--src/devices/bus/amiga/zorro/a2052.cpp6
-rw-r--r--src/devices/bus/amiga/zorro/a2058.cpp6
-rw-r--r--src/devices/bus/amiga/zorro/a2065.cpp10
-rw-r--r--src/devices/bus/amiga/zorro/a2232.cpp22
-rw-r--r--src/devices/bus/amiga/zorro/a590.cpp52
-rw-r--r--src/devices/bus/amiga/zorro/a590.h8
-rw-r--r--src/devices/bus/amiga/zorro/buddha.cpp18
-rw-r--r--src/devices/bus/amiga/zorro/zorro.cpp46
-rw-r--r--src/devices/bus/amiga/zorro/zorro.h112
-rw-r--r--src/devices/bus/apf/slot.h16
-rw-r--r--src/devices/bus/apricot/expansion/cards.cpp2
-rw-r--r--src/devices/bus/apricot/expansion/expansion.cpp25
-rw-r--r--src/devices/bus/apricot/expansion/expansion.h33
-rw-r--r--src/devices/bus/apricot/expansion/winchester.cpp254
-rw-r--r--src/devices/bus/apricot/expansion/winchester.h66
-rw-r--r--src/devices/bus/apricot/keyboard/hle.cpp85
-rw-r--r--src/devices/bus/apricot/keyboard/hle.h12
-rw-r--r--src/devices/bus/astrocde/accessory.cpp112
-rw-r--r--src/devices/bus/astrocde/accessory.h99
-rw-r--r--src/devices/bus/astrocde/cassette.cpp130
-rw-r--r--src/devices/bus/astrocde/cassette.h61
-rw-r--r--src/devices/bus/astrocde/ctrl.cpp120
-rw-r--r--src/devices/bus/astrocde/ctrl.h98
-rw-r--r--src/devices/bus/astrocde/exp.cpp14
-rw-r--r--src/devices/bus/astrocde/exp.h4
-rw-r--r--src/devices/bus/astrocde/joy.cpp56
-rw-r--r--src/devices/bus/astrocde/joy.h45
-rw-r--r--src/devices/bus/astrocde/lightpen.cpp87
-rw-r--r--src/devices/bus/astrocde/lightpen.h51
-rw-r--r--src/devices/bus/astrocde/ram.cpp61
-rw-r--r--src/devices/bus/astrocde/ram.h12
-rw-r--r--src/devices/bus/astrocde/rom.cpp41
-rw-r--r--src/devices/bus/astrocde/rom.h21
-rw-r--r--src/devices/bus/astrocde/slot.cpp3
-rw-r--r--src/devices/bus/astrocde/slot.h3
-rw-r--r--src/devices/bus/bbc/1mhzbus/1mhzbus.cpp19
-rw-r--r--src/devices/bus/bbc/1mhzbus/1mhzbus.h16
-rw-r--r--src/devices/bus/bbc/1mhzbus/beebsid.cpp20
-rw-r--r--src/devices/bus/bbc/1mhzbus/beebsid.h8
-rw-r--r--src/devices/bus/bbc/1mhzbus/cfa3000opt.cpp2
-rw-r--r--src/devices/bus/bbc/1mhzbus/cfa3000opt.h2
-rw-r--r--src/devices/bus/bbc/1mhzbus/emrmidi.cpp8
-rw-r--r--src/devices/bus/bbc/1mhzbus/emrmidi.h4
-rw-r--r--src/devices/bus/bbc/1mhzbus/ieee488.cpp113
-rw-r--r--src/devices/bus/bbc/1mhzbus/ieee488.h16
-rw-r--r--src/devices/bus/bbc/1mhzbus/m2000.cpp28
-rw-r--r--src/devices/bus/bbc/1mhzbus/m2000.h8
-rw-r--r--src/devices/bus/bbc/1mhzbus/opus3.cpp8
-rw-r--r--src/devices/bus/bbc/1mhzbus/opus3.h8
-rw-r--r--src/devices/bus/bbc/1mhzbus/sprite.cpp99
-rw-r--r--src/devices/bus/bbc/1mhzbus/sprite.h49
-rw-r--r--src/devices/bus/bbc/exp/exp.cpp32
-rw-r--r--src/devices/bus/bbc/exp/exp.h34
-rw-r--r--src/devices/bus/bbc/exp/mertec.cpp34
-rw-r--r--src/devices/bus/bbc/exp/mertec.h18
-rw-r--r--src/devices/bus/bbc/fdc/acorn.cpp16
-rw-r--r--src/devices/bus/bbc/fdc/acorn.h8
-rw-r--r--src/devices/bus/bbc/fdc/ams.cpp12
-rw-r--r--src/devices/bus/bbc/fdc/ams.h4
-rw-r--r--src/devices/bus/bbc/fdc/cumana.cpp4
-rw-r--r--src/devices/bus/bbc/fdc/cumana.h4
-rw-r--r--src/devices/bus/bbc/fdc/cv1797.cpp4
-rw-r--r--src/devices/bus/bbc/fdc/cv1797.h4
-rw-r--r--src/devices/bus/bbc/fdc/fdc.cpp8
-rw-r--r--src/devices/bus/bbc/fdc/fdc.h8
-rw-r--r--src/devices/bus/bbc/fdc/microware.cpp4
-rw-r--r--src/devices/bus/bbc/fdc/microware.h4
-rw-r--r--src/devices/bus/bbc/fdc/opus.cpp14
-rw-r--r--src/devices/bus/bbc/fdc/opus.h8
-rw-r--r--src/devices/bus/bbc/fdc/watford.cpp8
-rw-r--r--src/devices/bus/bbc/fdc/watford.h8
-rw-r--r--src/devices/bus/bbc/joyport/joyport.cpp8
-rw-r--r--src/devices/bus/bbc/joyport/joyport.h8
-rw-r--r--src/devices/bus/bbc/joyport/joystick.cpp2
-rw-r--r--src/devices/bus/bbc/joyport/joystick.h2
-rw-r--r--src/devices/bus/bbc/rom/dfs.cpp63
-rw-r--r--src/devices/bus/bbc/rom/dfs.h42
-rw-r--r--src/devices/bus/bbc/rom/pal.cpp312
-rw-r--r--src/devices/bus/bbc/rom/pal.h167
-rw-r--r--src/devices/bus/bbc/rom/ram.cpp57
-rw-r--r--src/devices/bus/bbc/rom/ram.h42
-rw-r--r--src/devices/bus/bbc/rom/rom.cpp50
-rw-r--r--src/devices/bus/bbc/rom/rom.h41
-rw-r--r--src/devices/bus/bbc/rom/rtc.cpp124
-rw-r--r--src/devices/bus/bbc/rom/rtc.h72
-rw-r--r--src/devices/bus/bbc/rom/slot.cpp234
-rw-r--r--src/devices/bus/bbc/rom/slot.h155
-rw-r--r--src/devices/bus/bbc/tube/tube.cpp20
-rw-r--r--src/devices/bus/bbc/tube/tube.h8
-rw-r--r--src/devices/bus/bbc/tube/tube_32016.cpp210
-rw-r--r--src/devices/bus/bbc/tube/tube_32016.h71
-rw-r--r--src/devices/bus/bbc/tube/tube_6502.cpp16
-rw-r--r--src/devices/bus/bbc/tube/tube_6502.h8
-rw-r--r--src/devices/bus/bbc/tube/tube_80186.cpp8
-rw-r--r--src/devices/bus/bbc/tube/tube_80186.h4
-rw-r--r--src/devices/bus/bbc/tube/tube_80286.cpp15
-rw-r--r--src/devices/bus/bbc/tube/tube_80286.h8
-rw-r--r--src/devices/bus/bbc/tube/tube_arm.cpp12
-rw-r--r--src/devices/bus/bbc/tube/tube_arm.h8
-rw-r--r--src/devices/bus/bbc/tube/tube_casper.cpp4
-rw-r--r--src/devices/bus/bbc/tube/tube_casper.h4
-rw-r--r--src/devices/bus/bbc/tube/tube_rc6502.cpp12
-rw-r--r--src/devices/bus/bbc/tube/tube_rc6502.h8
-rw-r--r--src/devices/bus/bbc/tube/tube_z80.cpp14
-rw-r--r--src/devices/bus/bbc/tube/tube_z80.h10
-rw-r--r--src/devices/bus/bbc/tube/tube_zep100.cpp18
-rw-r--r--src/devices/bus/bbc/tube/tube_zep100.h18
-rw-r--r--src/devices/bus/bbc/userport/beebspch.cpp2
-rw-r--r--src/devices/bus/bbc/userport/beebspch.h2
-rw-r--r--src/devices/bus/bbc/userport/cfa3000kbd.cpp2
-rw-r--r--src/devices/bus/bbc/userport/cfa3000kbd.h2
-rw-r--r--src/devices/bus/bbc/userport/pointer.cpp6
-rw-r--r--src/devices/bus/bbc/userport/pointer.h6
-rw-r--r--src/devices/bus/bbc/userport/userport.cpp8
-rw-r--r--src/devices/bus/bbc/userport/userport.h8
-rw-r--r--src/devices/bus/bml3/bml3bus.cpp6
-rw-r--r--src/devices/bus/bml3/bml3bus.h53
-rw-r--r--src/devices/bus/bw2/exp.cpp24
-rw-r--r--src/devices/bus/bw2/exp.h45
-rw-r--r--src/devices/bus/bw2/ramcard.cpp6
-rw-r--r--src/devices/bus/bw2/ramcard.h6
-rw-r--r--src/devices/bus/c64/16kb.cpp17
-rw-r--r--src/devices/bus/c64/16kb.h2
-rw-r--r--src/devices/bus/c64/c128_comal80.cpp4
-rw-r--r--src/devices/bus/c64/c128_comal80.h4
-rw-r--r--src/devices/bus/c64/c128_partner.cpp4
-rw-r--r--src/devices/bus/c64/c128_partner.h4
-rw-r--r--src/devices/bus/c64/comal80.cpp4
-rw-r--r--src/devices/bus/c64/comal80.h4
-rw-r--r--src/devices/bus/c64/cpm.cpp6
-rw-r--r--src/devices/bus/c64/cpm.h2
-rw-r--r--src/devices/bus/c64/currah_speech.cpp4
-rw-r--r--src/devices/bus/c64/currah_speech.h4
-rw-r--r--src/devices/bus/c64/dela_ep256.cpp35
-rw-r--r--src/devices/bus/c64/dela_ep256.h4
-rw-r--r--src/devices/bus/c64/dela_ep64.cpp19
-rw-r--r--src/devices/bus/c64/dela_ep64.h4
-rw-r--r--src/devices/bus/c64/dela_ep7x8.cpp52
-rw-r--r--src/devices/bus/c64/dela_ep7x8.h12
-rw-r--r--src/devices/bus/c64/dinamic.cpp2
-rw-r--r--src/devices/bus/c64/dinamic.h2
-rw-r--r--src/devices/bus/c64/dqbb.cpp4
-rw-r--r--src/devices/bus/c64/dqbb.h4
-rw-r--r--src/devices/bus/c64/easy_calc_result.cpp4
-rw-r--r--src/devices/bus/c64/easy_calc_result.h4
-rw-r--r--src/devices/bus/c64/easyflash.cpp12
-rw-r--r--src/devices/bus/c64/easyflash.h4
-rw-r--r--src/devices/bus/c64/epyx_fast_load.cpp4
-rw-r--r--src/devices/bus/c64/epyx_fast_load.h4
-rw-r--r--src/devices/bus/c64/exos.cpp2
-rw-r--r--src/devices/bus/c64/exos.h2
-rw-r--r--src/devices/bus/c64/exp.cpp8
-rw-r--r--src/devices/bus/c64/exp.h12
-rw-r--r--src/devices/bus/c64/fcc.cpp13
-rw-r--r--src/devices/bus/c64/fcc.h4
-rw-r--r--src/devices/bus/c64/final.cpp4
-rw-r--r--src/devices/bus/c64/final.h4
-rw-r--r--src/devices/bus/c64/final3.cpp4
-rw-r--r--src/devices/bus/c64/final3.h4
-rw-r--r--src/devices/bus/c64/fun_play.cpp4
-rw-r--r--src/devices/bus/c64/fun_play.h4
-rw-r--r--src/devices/bus/c64/geocable.cpp9
-rw-r--r--src/devices/bus/c64/georam.cpp4
-rw-r--r--src/devices/bus/c64/georam.h4
-rw-r--r--src/devices/bus/c64/ide64.cpp8
-rw-r--r--src/devices/bus/c64/ide64.h4
-rw-r--r--src/devices/bus/c64/ieee488.cpp12
-rw-r--r--src/devices/bus/c64/ieee488.h4
-rw-r--r--src/devices/bus/c64/kingsoft.cpp4
-rw-r--r--src/devices/bus/c64/kingsoft.h4
-rw-r--r--src/devices/bus/c64/mach5.cpp4
-rw-r--r--src/devices/bus/c64/mach5.h4
-rw-r--r--src/devices/bus/c64/magic_desk.cpp4
-rw-r--r--src/devices/bus/c64/magic_desk.h4
-rw-r--r--src/devices/bus/c64/magic_formel.cpp6
-rw-r--r--src/devices/bus/c64/magic_formel.h4
-rw-r--r--src/devices/bus/c64/magic_voice.cpp14
-rw-r--r--src/devices/bus/c64/magic_voice.h4
-rw-r--r--src/devices/bus/c64/midi_maplin.cpp22
-rw-r--r--src/devices/bus/c64/midi_maplin.h4
-rw-r--r--src/devices/bus/c64/midi_namesoft.cpp22
-rw-r--r--src/devices/bus/c64/midi_namesoft.h4
-rw-r--r--src/devices/bus/c64/midi_passport.cpp26
-rw-r--r--src/devices/bus/c64/midi_passport.h4
-rw-r--r--src/devices/bus/c64/midi_sci.cpp22
-rw-r--r--src/devices/bus/c64/midi_sci.h4
-rw-r--r--src/devices/bus/c64/midi_siel.cpp22
-rw-r--r--src/devices/bus/c64/midi_siel.h4
-rw-r--r--src/devices/bus/c64/mikro_assembler.cpp2
-rw-r--r--src/devices/bus/c64/mikro_assembler.h2
-rw-r--r--src/devices/bus/c64/multiscreen.cpp17
-rw-r--r--src/devices/bus/c64/multiscreen.h4
-rw-r--r--src/devices/bus/c64/music64.cpp8
-rw-r--r--src/devices/bus/c64/music64.h4
-rw-r--r--src/devices/bus/c64/neoram.cpp4
-rw-r--r--src/devices/bus/c64/neoram.h4
-rw-r--r--src/devices/bus/c64/ocean.cpp4
-rw-r--r--src/devices/bus/c64/ocean.h4
-rw-r--r--src/devices/bus/c64/pagefox.cpp4
-rw-r--r--src/devices/bus/c64/pagefox.h4
-rw-r--r--src/devices/bus/c64/partner.cpp4
-rw-r--r--src/devices/bus/c64/partner.h4
-rw-r--r--src/devices/bus/c64/prophet64.cpp4
-rw-r--r--src/devices/bus/c64/prophet64.h4
-rw-r--r--src/devices/bus/c64/ps64.cpp25
-rw-r--r--src/devices/bus/c64/ps64.h4
-rw-r--r--src/devices/bus/c64/reu.cpp20
-rw-r--r--src/devices/bus/c64/reu.h4
-rw-r--r--src/devices/bus/c64/rex.cpp2
-rw-r--r--src/devices/bus/c64/rex.h2
-rw-r--r--src/devices/bus/c64/rex_ep256.cpp35
-rw-r--r--src/devices/bus/c64/rex_ep256.h4
-rw-r--r--src/devices/bus/c64/ross.cpp4
-rw-r--r--src/devices/bus/c64/ross.h4
-rw-r--r--src/devices/bus/c64/sfx_sound_expander.cpp12
-rw-r--r--src/devices/bus/c64/sfx_sound_expander.h4
-rw-r--r--src/devices/bus/c64/silverrock.cpp4
-rw-r--r--src/devices/bus/c64/silverrock.h4
-rw-r--r--src/devices/bus/c64/simons_basic.cpp4
-rw-r--r--src/devices/bus/c64/simons_basic.h4
-rw-r--r--src/devices/bus/c64/speakeasy.cpp16
-rw-r--r--src/devices/bus/c64/speakeasy.h4
-rw-r--r--src/devices/bus/c64/stardos.cpp4
-rw-r--r--src/devices/bus/c64/stardos.h4
-rw-r--r--src/devices/bus/c64/std.cpp2
-rw-r--r--src/devices/bus/c64/std.h2
-rw-r--r--src/devices/bus/c64/structured_basic.cpp4
-rw-r--r--src/devices/bus/c64/structured_basic.h4
-rw-r--r--src/devices/bus/c64/super_explode.cpp4
-rw-r--r--src/devices/bus/c64/super_explode.h4
-rw-r--r--src/devices/bus/c64/super_games.cpp4
-rw-r--r--src/devices/bus/c64/super_games.h4
-rw-r--r--src/devices/bus/c64/supercpu.cpp8
-rw-r--r--src/devices/bus/c64/supercpu.h4
-rw-r--r--src/devices/bus/c64/sw8k.cpp2
-rw-r--r--src/devices/bus/c64/sw8k.h2
-rw-r--r--src/devices/bus/c64/swiftlink.cpp8
-rw-r--r--src/devices/bus/c64/swiftlink.h4
-rw-r--r--src/devices/bus/c64/system3.cpp4
-rw-r--r--src/devices/bus/c64/system3.h4
-rw-r--r--src/devices/bus/c64/tdos.cpp12
-rw-r--r--src/devices/bus/c64/tdos.h4
-rw-r--r--src/devices/bus/c64/turbo232.cpp10
-rw-r--r--src/devices/bus/c64/turbo232.h4
-rw-r--r--src/devices/bus/c64/vizastar.cpp2
-rw-r--r--src/devices/bus/c64/vizastar.h2
-rw-r--r--src/devices/bus/c64/vw64.cpp2
-rw-r--r--src/devices/bus/c64/vw64.h2
-rw-r--r--src/devices/bus/c64/warp_speed.cpp4
-rw-r--r--src/devices/bus/c64/warp_speed.h4
-rw-r--r--src/devices/bus/c64/westermann.cpp2
-rw-r--r--src/devices/bus/c64/westermann.h2
-rw-r--r--src/devices/bus/c64/xl80.cpp29
-rw-r--r--src/devices/bus/c64/xl80.h4
-rw-r--r--src/devices/bus/c64/zaxxon.cpp2
-rw-r--r--src/devices/bus/c64/zaxxon.h2
-rw-r--r--src/devices/bus/cbm2/24k.cpp4
-rw-r--r--src/devices/bus/cbm2/24k.h4
-rw-r--r--src/devices/bus/cbm2/exp.cpp8
-rw-r--r--src/devices/bus/cbm2/exp.h19
-rw-r--r--src/devices/bus/cbm2/hrg.cpp64
-rw-r--r--src/devices/bus/cbm2/hrg.h7
-rw-r--r--src/devices/bus/cbm2/std.cpp2
-rw-r--r--src/devices/bus/cbm2/std.h2
-rw-r--r--src/devices/bus/cbm2/user.h26
-rw-r--r--src/devices/bus/cbmiec/c1526.cpp22
-rw-r--r--src/devices/bus/cbmiec/c1541.cpp18
-rw-r--r--src/devices/bus/cbmiec/c1571.cpp11
-rw-r--r--src/devices/bus/cbmiec/c1581.cpp31
-rw-r--r--src/devices/bus/cbmiec/cbmiec.h45
-rw-r--r--src/devices/bus/cbmiec/interpod.cpp17
-rw-r--r--src/devices/bus/cbmiec/interpod.h10
-rw-r--r--src/devices/bus/cbmiec/serialbox.cpp9
-rw-r--r--src/devices/bus/cbmiec/vic1515.cpp11
-rw-r--r--src/devices/bus/cbmiec/vic1520.cpp9
-rw-r--r--src/devices/bus/cbus/pc9801_118.cpp4
-rw-r--r--src/devices/bus/cbus/pc9801_26.cpp4
-rw-r--r--src/devices/bus/cbus/pc9801_86.cpp30
-rw-r--r--src/devices/bus/cbus/pc9801_amd98.cpp16
-rw-r--r--src/devices/bus/cbus/pc9801_cbus.cpp11
-rw-r--r--src/devices/bus/cbus/pc9801_cbus.h106
-rw-r--r--src/devices/bus/centronics/comxpl80.cpp11
-rw-r--r--src/devices/bus/centronics/covox.cpp29
-rw-r--r--src/devices/bus/centronics/ctronics.h80
-rw-r--r--src/devices/bus/centronics/digiblst.cpp12
-rw-r--r--src/devices/bus/centronics/epson_lx810l.cpp1
-rw-r--r--src/devices/bus/centronics/nec_p72.cpp10
-rw-r--r--src/devices/bus/centronics/printer.cpp9
-rw-r--r--src/devices/bus/cgenie/expansion/expansion.cpp22
-rw-r--r--src/devices/bus/cgenie/expansion/expansion.h45
-rw-r--r--src/devices/bus/cgenie/expansion/floppy.cpp16
-rw-r--r--src/devices/bus/cgenie/parallel/parallel.h23
-rw-r--r--src/devices/bus/cgenie/parallel/printer.cpp19
-rw-r--r--src/devices/bus/chanf/slot.h16
-rw-r--r--src/devices/bus/coco/coco_dcmodem.cpp9
-rw-r--r--src/devices/bus/coco/coco_fdc.cpp15
-rw-r--r--src/devices/bus/coco/coco_fdc.h1
-rw-r--r--src/devices/bus/coco/coco_gmc.cpp8
-rw-r--r--src/devices/bus/coco/coco_multi.cpp82
-rw-r--r--src/devices/bus/coco/coco_orch90.cpp20
-rw-r--r--src/devices/bus/coco/coco_rs232.cpp9
-rw-r--r--src/devices/bus/coco/coco_ssc.cpp15
-rw-r--r--src/devices/bus/coco/coco_t4426.cpp14
-rw-r--r--src/devices/bus/coco/cococart.cpp40
-rw-r--r--src/devices/bus/coco/cococart.h46
-rw-r--r--src/devices/bus/coco/dragon_jcbsnd.cpp15
-rw-r--r--src/devices/bus/coco/dragon_jcbsnd.h1
-rw-r--r--src/devices/bus/coleco/cartridge/exp.cpp (renamed from src/devices/bus/coleco/exp.cpp)4
-rw-r--r--src/devices/bus/coleco/cartridge/exp.h (renamed from src/devices/bus/coleco/exp.h)4
-rw-r--r--src/devices/bus/coleco/cartridge/std.cpp (renamed from src/devices/bus/coleco/std.cpp)2
-rw-r--r--src/devices/bus/coleco/cartridge/std.h (renamed from src/devices/bus/coleco/std.h)2
-rw-r--r--src/devices/bus/coleco/cartridge/xin1.cpp (renamed from src/devices/bus/coleco/xin1.cpp)2
-rw-r--r--src/devices/bus/coleco/cartridge/xin1.h (renamed from src/devices/bus/coleco/xin1.h)2
-rw-r--r--src/devices/bus/coleco/controller/ctrl.cpp (renamed from src/devices/bus/coleco/ctrl.cpp)0
-rw-r--r--src/devices/bus/coleco/controller/ctrl.h (renamed from src/devices/bus/coleco/ctrl.h)0
-rw-r--r--src/devices/bus/coleco/controller/hand.cpp (renamed from src/devices/bus/coleco/hand.cpp)0
-rw-r--r--src/devices/bus/coleco/controller/hand.h (renamed from src/devices/bus/coleco/hand.h)0
-rw-r--r--src/devices/bus/coleco/controller/sac.cpp (renamed from src/devices/bus/coleco/sac.cpp)0
-rw-r--r--src/devices/bus/coleco/controller/sac.h (renamed from src/devices/bus/coleco/sac.h)0
-rw-r--r--src/devices/bus/compis/graphics.h40
-rw-r--r--src/devices/bus/compis/hrg.cpp50
-rw-r--r--src/devices/bus/compis/hrg.h4
-rw-r--r--src/devices/bus/compucolor/floppy.cpp33
-rw-r--r--src/devices/bus/compucolor/floppy.h2
-rw-r--r--src/devices/bus/comx35/clm.cpp31
-rw-r--r--src/devices/bus/comx35/clm.h4
-rw-r--r--src/devices/bus/comx35/eprom.cpp4
-rw-r--r--src/devices/bus/comx35/eprom.h4
-rw-r--r--src/devices/bus/comx35/exp.cpp16
-rw-r--r--src/devices/bus/comx35/exp.h16
-rw-r--r--src/devices/bus/comx35/expbox.cpp16
-rw-r--r--src/devices/bus/comx35/expbox.h8
-rw-r--r--src/devices/bus/comx35/fdc.cpp6
-rw-r--r--src/devices/bus/comx35/fdc.h6
-rw-r--r--src/devices/bus/comx35/joycard.cpp2
-rw-r--r--src/devices/bus/comx35/joycard.h2
-rw-r--r--src/devices/bus/comx35/printer.cpp27
-rw-r--r--src/devices/bus/comx35/printer.h6
-rw-r--r--src/devices/bus/comx35/ram.cpp6
-rw-r--r--src/devices/bus/comx35/ram.h6
-rw-r--r--src/devices/bus/comx35/thermal.cpp6
-rw-r--r--src/devices/bus/comx35/thermal.h6
-rw-r--r--src/devices/bus/cpc/amdrum.cpp12
-rw-r--r--src/devices/bus/cpc/cpc_rom.cpp21
-rw-r--r--src/devices/bus/cpc/cpc_rom.h3
-rw-r--r--src/devices/bus/cpc/cpcexp.cpp2
-rw-r--r--src/devices/bus/cpc/ddi1.cpp6
-rw-r--r--src/devices/bus/cpc/doubler.cpp13
-rw-r--r--src/devices/bus/cpc/hd20.cpp11
-rw-r--r--src/devices/bus/cpc/magicsound.cpp16
-rw-r--r--src/devices/bus/cpc/playcity.cpp12
-rw-r--r--src/devices/bus/cpc/smartwatch.cpp13
-rw-r--r--src/devices/bus/cpc/symbfac2.cpp19
-rw-r--r--src/devices/bus/dmv/dmvbus.cpp13
-rw-r--r--src/devices/bus/dmv/dmvbus.h51
-rw-r--r--src/devices/bus/dmv/k210.cpp13
-rw-r--r--src/devices/bus/dmv/k210.h4
-rw-r--r--src/devices/bus/dmv/k220.cpp3
-rw-r--r--src/devices/bus/dmv/k220.h1
-rw-r--r--src/devices/bus/dmv/k230.cpp13
-rw-r--r--src/devices/bus/dmv/k230.h3
-rw-r--r--src/devices/bus/dmv/k233.cpp2
-rw-r--r--src/devices/bus/dmv/k233.h2
-rw-r--r--src/devices/bus/dmv/k801.cpp8
-rw-r--r--src/devices/bus/dmv/k801.h8
-rw-r--r--src/devices/bus/dmv/k803.cpp17
-rw-r--r--src/devices/bus/dmv/k803.h4
-rw-r--r--src/devices/bus/dmv/k806.cpp8
-rw-r--r--src/devices/bus/dmv/k806.h4
-rw-r--r--src/devices/bus/ecbbus/ecbbus.h38
-rw-r--r--src/devices/bus/econet/e01.cpp8
-rw-r--r--src/devices/bus/econet/econet.h24
-rw-r--r--src/devices/bus/einstein/pipe/pipe.cpp44
-rw-r--r--src/devices/bus/einstein/pipe/pipe.h9
-rw-r--r--src/devices/bus/einstein/pipe/speculator.cpp13
-rw-r--r--src/devices/bus/einstein/pipe/tk02.cpp3
-rw-r--r--src/devices/bus/einstein/userport/userport.h29
-rw-r--r--src/devices/bus/ekara/rom.cpp121
-rw-r--r--src/devices/bus/ekara/rom.h46
-rw-r--r--src/devices/bus/ekara/slot.cpp38
-rw-r--r--src/devices/bus/ekara/slot.h21
-rw-r--r--src/devices/bus/electron/cart/abr.cpp16
-rw-r--r--src/devices/bus/electron/cart/abr.h4
-rw-r--r--src/devices/bus/electron/cart/ap34.cpp28
-rw-r--r--src/devices/bus/electron/cart/ap34.h6
-rw-r--r--src/devices/bus/electron/cart/ap5.cpp171
-rw-r--r--src/devices/bus/electron/cart/ap5.h60
-rw-r--r--src/devices/bus/electron/cart/aqr.cpp19
-rw-r--r--src/devices/bus/electron/cart/aqr.h4
-rw-r--r--src/devices/bus/electron/cart/click.cpp21
-rw-r--r--src/devices/bus/electron/cart/click.h6
-rw-r--r--src/devices/bus/electron/cart/cumana.cpp22
-rw-r--r--src/devices/bus/electron/cart/cumana.h6
-rw-r--r--src/devices/bus/electron/cart/mgc.cpp23
-rw-r--r--src/devices/bus/electron/cart/mgc.h4
-rw-r--r--src/devices/bus/electron/cart/peg400.cpp20
-rw-r--r--src/devices/bus/electron/cart/peg400.h6
-rw-r--r--src/devices/bus/electron/cart/romp144.cpp162
-rw-r--r--src/devices/bus/electron/cart/romp144.h60
-rw-r--r--src/devices/bus/electron/cart/slot.cpp26
-rw-r--r--src/devices/bus/electron/cart/slot.h33
-rw-r--r--src/devices/bus/electron/cart/sndexp.cpp19
-rw-r--r--src/devices/bus/electron/cart/sndexp.h4
-rw-r--r--src/devices/bus/electron/cart/sndexp3.cpp18
-rw-r--r--src/devices/bus/electron/cart/sndexp3.h4
-rw-r--r--src/devices/bus/electron/cart/sp64.cpp14
-rw-r--r--src/devices/bus/electron/cart/sp64.h4
-rw-r--r--src/devices/bus/electron/cart/std.cpp6
-rw-r--r--src/devices/bus/electron/cart/std.h2
-rw-r--r--src/devices/bus/electron/cart/stlefs.cpp32
-rw-r--r--src/devices/bus/electron/cart/stlefs.h8
-rw-r--r--src/devices/bus/electron/cart/tube.cpp91
-rw-r--r--src/devices/bus/electron/cart/tube.h47
-rw-r--r--src/devices/bus/electron/exp.cpp30
-rw-r--r--src/devices/bus/electron/exp.h52
-rw-r--r--src/devices/bus/electron/fbjoy.cpp4
-rw-r--r--src/devices/bus/electron/fbjoy.h2
-rw-r--r--src/devices/bus/electron/m2105.cpp154
-rw-r--r--src/devices/bus/electron/m2105.h9
-rw-r--r--src/devices/bus/electron/plus1.cpp79
-rw-r--r--src/devices/bus/electron/plus1.h8
-rw-r--r--src/devices/bus/electron/plus2.cpp236
-rw-r--r--src/devices/bus/electron/plus2.h62
-rw-r--r--src/devices/bus/electron/plus3.cpp31
-rw-r--r--src/devices/bus/electron/plus3.h6
-rw-r--r--src/devices/bus/electron/pwrjoy.cpp6
-rw-r--r--src/devices/bus/electron/pwrjoy.h4
-rw-r--r--src/devices/bus/electron/rombox.cpp65
-rw-r--r--src/devices/bus/electron/rombox.h4
-rw-r--r--src/devices/bus/electron/romboxp.cpp95
-rw-r--r--src/devices/bus/electron/romboxp.h8
-rw-r--r--src/devices/bus/ep64/exp.cpp3
-rw-r--r--src/devices/bus/ep64/exp.h40
-rw-r--r--src/devices/bus/epson_sio/epson_sio.h38
-rw-r--r--src/devices/bus/epson_sio/pf10.cpp22
-rw-r--r--src/devices/bus/epson_sio/pf10.h3
-rw-r--r--src/devices/bus/epson_sio/tf20.cpp36
-rw-r--r--src/devices/bus/epson_sio/tf20.h5
-rw-r--r--src/devices/bus/gamate/rom.cpp7
-rw-r--r--src/devices/bus/gamate/slot.h16
-rw-r--r--src/devices/bus/gameboy/gb_slot.cpp16
-rw-r--r--src/devices/bus/gameboy/gb_slot.h16
-rw-r--r--src/devices/bus/gameboy/mbc.cpp132
-rw-r--r--src/devices/bus/gameboy/mbc.h132
-rw-r--r--src/devices/bus/gameboy/rom.cpp34
-rw-r--r--src/devices/bus/gameboy/rom.h34
-rw-r--r--src/devices/bus/gamegear/ggext.h38
-rw-r--r--src/devices/bus/gamegear/smsctrladp.cpp11
-rw-r--r--src/devices/bus/gba/gba_slot.h17
-rw-r--r--src/devices/bus/gba/rom.cpp32
-rw-r--r--src/devices/bus/generic/ram.cpp8
-rw-r--r--src/devices/bus/generic/ram.h8
-rw-r--r--src/devices/bus/generic/rom.cpp16
-rw-r--r--src/devices/bus/generic/rom.h16
-rw-r--r--src/devices/bus/generic/slot.cpp20
-rw-r--r--src/devices/bus/generic/slot.h20
-rw-r--r--src/devices/bus/hexbus/hx5102.cpp11
-rw-r--r--src/devices/bus/hp80_io/hp80_io.h27
-rw-r--r--src/devices/bus/hp80_optroms/hp80_optrom.h13
-rw-r--r--src/devices/bus/hp9845_io/98032.cpp7
-rw-r--r--src/devices/bus/hp9845_io/98034.cpp19
-rw-r--r--src/devices/bus/hp9845_io/hp9885.cpp974
-rw-r--r--src/devices/bus/hp9845_io/hp9885.h136
-rw-r--r--src/devices/bus/hp_dio/hp98265a.cpp4
-rw-r--r--src/devices/bus/hp_dio/hp98603a.cpp5
-rw-r--r--src/devices/bus/hp_dio/hp98603b.cpp5
-rw-r--r--src/devices/bus/hp_dio/hp98620.cpp6
-rw-r--r--src/devices/bus/hp_dio/hp98643.cpp2
-rw-r--r--src/devices/bus/hp_dio/hp_dio.cpp6
-rw-r--r--src/devices/bus/hp_dio/hp_dio.h9
-rw-r--r--src/devices/bus/hp_dio/human_interface.cpp12
-rw-r--r--src/devices/bus/ieee488/c2040fdc.h19
-rw-r--r--src/devices/bus/ieee488/c8280.cpp31
-rw-r--r--src/devices/bus/ieee488/hardbox.cpp25
-rw-r--r--src/devices/bus/ieee488/hp9122c.cpp19
-rw-r--r--src/devices/bus/ieee488/ieee488.h116
-rw-r--r--src/devices/bus/ieee488/remote488.cpp7
-rw-r--r--src/devices/bus/ieee488/softbox.cpp31
-rw-r--r--src/devices/bus/imi7000/imi7000.h51
-rw-r--r--src/devices/bus/intellec4/intellec4.cpp29
-rw-r--r--src/devices/bus/intellec4/intellec4.h27
-rw-r--r--src/devices/bus/interpro/keyboard/hle.cpp8
-rw-r--r--src/devices/bus/interpro/sr/edge.cpp4
-rw-r--r--src/devices/bus/interpro/sr/sr.cpp3
-rw-r--r--src/devices/bus/interpro/sr/sr.h26
-rw-r--r--src/devices/bus/intv/ecs.cpp55
-rw-r--r--src/devices/bus/intv/ecs.h54
-rw-r--r--src/devices/bus/intv/rom.h38
-rw-r--r--src/devices/bus/intv/slot.cpp16
-rw-r--r--src/devices/bus/intv/slot.h128
-rw-r--r--src/devices/bus/intv/voice.cpp31
-rw-r--r--src/devices/bus/intv/voice.h42
-rw-r--r--src/devices/bus/intv_ctrl/ctrl.h23
-rw-r--r--src/devices/bus/intv_ctrl/ecs_ctrl.cpp9
-rw-r--r--src/devices/bus/intv_ctrl/ecs_ctrl.h22
-rw-r--r--src/devices/bus/iq151/disc2.cpp11
-rw-r--r--src/devices/bus/iq151/iq151.h52
-rw-r--r--src/devices/bus/isa/3c503.cpp13
-rw-r--r--src/devices/bus/isa/3c505.cpp4
-rw-r--r--src/devices/bus/isa/adlib.cpp14
-rw-r--r--src/devices/bus/isa/aga.cpp25
-rw-r--r--src/devices/bus/isa/aha1542.cpp200
-rw-r--r--src/devices/bus/isa/aha1542.h54
-rw-r--r--src/devices/bus/isa/aha1542b.cpp126
-rw-r--r--src/devices/bus/isa/aha1542b.h57
-rw-r--r--src/devices/bus/isa/aha1542c.cpp323
-rw-r--r--src/devices/bus/isa/aha1542c.h95
-rw-r--r--src/devices/bus/isa/aha174x.cpp160
-rw-r--r--src/devices/bus/isa/aha174x.h61
-rw-r--r--src/devices/bus/isa/bt54x.cpp201
-rw-r--r--src/devices/bus/isa/bt54x.h74
-rw-r--r--src/devices/bus/isa/cga.cpp43
-rw-r--r--src/devices/bus/isa/cl_sh260.cpp93
-rw-r--r--src/devices/bus/isa/cl_sh260.h64
-rw-r--r--src/devices/bus/isa/dcb.cpp70
-rw-r--r--src/devices/bus/isa/dcb.h43
-rw-r--r--src/devices/bus/isa/dectalk.cpp1
-rw-r--r--src/devices/bus/isa/ega.cpp45
-rw-r--r--src/devices/bus/isa/ega.h2
-rw-r--r--src/devices/bus/isa/eis_sad8852.cpp11
-rw-r--r--src/devices/bus/isa/fdc.cpp5
-rw-r--r--src/devices/bus/isa/fdc.h1
-rw-r--r--src/devices/bus/isa/finalchs.cpp9
-rw-r--r--src/devices/bus/isa/gus.cpp22
-rw-r--r--src/devices/bus/isa/gus.h43
-rw-r--r--src/devices/bus/isa/hdc.cpp32
-rw-r--r--src/devices/bus/isa/hdc.h9
-rw-r--r--src/devices/bus/isa/ibm_mfc.cpp17
-rw-r--r--src/devices/bus/isa/isa.cpp92
-rw-r--r--src/devices/bus/isa/isa.h26
-rw-r--r--src/devices/bus/isa/isa_cards.cpp23
-rw-r--r--src/devices/bus/isa/lbaenhancer.cpp7
-rw-r--r--src/devices/bus/isa/mc1502_fdc.cpp12
-rw-r--r--src/devices/bus/isa/mda.cpp57
-rw-r--r--src/devices/bus/isa/mufdc.cpp5
-rw-r--r--src/devices/bus/isa/mufdc.h1
-rw-r--r--src/devices/bus/isa/ne1000.cpp13
-rw-r--r--src/devices/bus/isa/ne2000.cpp13
-rw-r--r--src/devices/bus/isa/np600.cpp76
-rw-r--r--src/devices/bus/isa/np600.h39
-rw-r--r--src/devices/bus/isa/num9rev.cpp21
-rw-r--r--src/devices/bus/isa/omti8621.cpp5
-rw-r--r--src/devices/bus/isa/omti8621.h1
-rw-r--r--src/devices/bus/isa/p1_fdc.cpp15
-rw-r--r--src/devices/bus/isa/p1_hdc.cpp26
-rw-r--r--src/devices/bus/isa/p1_sound.cpp20
-rw-r--r--src/devices/bus/isa/pc1640_iga.cpp4
-rw-r--r--src/devices/bus/isa/pds.cpp7
-rw-r--r--src/devices/bus/isa/pgc.cpp33
-rw-r--r--src/devices/bus/isa/sb16.cpp6
-rw-r--r--src/devices/bus/isa/sblaster.cpp37
-rw-r--r--src/devices/bus/isa/sc499.cpp7
-rw-r--r--src/devices/bus/isa/ssi2001.cpp2
-rw-r--r--src/devices/bus/isa/stereo_fx.cpp5
-rw-r--r--src/devices/bus/isa/svga_cirrus.cpp28
-rw-r--r--src/devices/bus/isa/svga_s3.cpp56
-rw-r--r--src/devices/bus/isa/svga_trident.cpp16
-rw-r--r--src/devices/bus/isa/svga_tseng.cpp16
-rw-r--r--src/devices/bus/isa/vga.cpp16
-rw-r--r--src/devices/bus/isa/vga_ati.cpp53
-rw-r--r--src/devices/bus/isa/wd1007a.cpp7
-rw-r--r--src/devices/bus/isa/wdxt_gen.cpp10
-rw-r--r--src/devices/bus/isa/wdxt_gen.h1
-rw-r--r--src/devices/bus/isbx/compis_fdc.cpp14
-rw-r--r--src/devices/bus/isbx/compis_fdc.h8
-rw-r--r--src/devices/bus/isbx/isbc_218a.cpp18
-rw-r--r--src/devices/bus/isbx/isbc_218a.h12
-rw-r--r--src/devices/bus/isbx/isbx.h24
-rw-r--r--src/devices/bus/jakks_gamekey/rom.cpp111
-rw-r--r--src/devices/bus/jakks_gamekey/rom.h77
-rw-r--r--src/devices/bus/jakks_gamekey/slot.cpp237
-rw-r--r--src/devices/bus/jakks_gamekey/slot.h119
-rw-r--r--src/devices/bus/kc/d002.cpp60
-rw-r--r--src/devices/bus/kc/d004.cpp4
-rw-r--r--src/devices/bus/kc/kc.h62
-rw-r--r--src/devices/bus/lpci/mpc105.cpp4
-rw-r--r--src/devices/bus/lpci/mpc105.h10
-rw-r--r--src/devices/bus/lpci/pci.h16
-rw-r--r--src/devices/bus/lpci/southbridge.cpp55
-rw-r--r--src/devices/bus/lpci/southbridge.h1
-rw-r--r--src/devices/bus/m5/slot.h17
-rw-r--r--src/devices/bus/macpds/macpds.h16
-rw-r--r--src/devices/bus/macpds/pds_tpdfpd.cpp13
-rw-r--r--src/devices/bus/megadrive/eeprom.cpp49
-rw-r--r--src/devices/bus/megadrive/ggenie.cpp9
-rw-r--r--src/devices/bus/megadrive/jcart.cpp14
-rw-r--r--src/devices/bus/megadrive/md_slot.h18
-rw-r--r--src/devices/bus/megadrive/sk.cpp9
-rw-r--r--src/devices/bus/megadrive/svp.cpp11
-rw-r--r--src/devices/bus/midi/midi.h8
-rw-r--r--src/devices/bus/midi/midiinport.cpp9
-rw-r--r--src/devices/bus/midi/midioutport.cpp7
-rw-r--r--src/devices/bus/msx_cart/arc.cpp11
-rw-r--r--src/devices/bus/msx_cart/arc.h8
-rw-r--r--src/devices/bus/msx_cart/ascii.cpp50
-rw-r--r--src/devices/bus/msx_cart/ascii.h25
-rw-r--r--src/devices/bus/msx_cart/bm_012.cpp17
-rw-r--r--src/devices/bus/msx_cart/cartridge.cpp19
-rw-r--r--src/devices/bus/msx_cart/cartridge.h21
-rw-r--r--src/devices/bus/msx_cart/crossblaim.cpp10
-rw-r--r--src/devices/bus/msx_cart/crossblaim.h5
-rw-r--r--src/devices/bus/msx_cart/disk.cpp74
-rw-r--r--src/devices/bus/msx_cart/disk.h18
-rw-r--r--src/devices/bus/msx_cart/dooly.cpp4
-rw-r--r--src/devices/bus/msx_cart/dooly.h4
-rw-r--r--src/devices/bus/msx_cart/fmpac.cpp29
-rw-r--r--src/devices/bus/msx_cart/fmpac.h9
-rw-r--r--src/devices/bus/msx_cart/fs_sr022.cpp4
-rw-r--r--src/devices/bus/msx_cart/fs_sr022.h4
-rw-r--r--src/devices/bus/msx_cart/halnote.cpp10
-rw-r--r--src/devices/bus/msx_cart/halnote.h5
-rw-r--r--src/devices/bus/msx_cart/hfox.cpp10
-rw-r--r--src/devices/bus/msx_cart/hfox.h5
-rw-r--r--src/devices/bus/msx_cart/holy_quran.cpp10
-rw-r--r--src/devices/bus/msx_cart/holy_quran.h5
-rw-r--r--src/devices/bus/msx_cart/konami.cpp142
-rw-r--r--src/devices/bus/msx_cart/konami.h32
-rw-r--r--src/devices/bus/msx_cart/korean.cpp35
-rw-r--r--src/devices/bus/msx_cart/korean.h17
-rw-r--r--src/devices/bus/msx_cart/majutsushi.cpp22
-rw-r--r--src/devices/bus/msx_cart/majutsushi.h5
-rw-r--r--src/devices/bus/msx_cart/moonsound.cpp29
-rw-r--r--src/devices/bus/msx_cart/moonsound.h10
-rw-r--r--src/devices/bus/msx_cart/msx_audio.cpp43
-rw-r--r--src/devices/bus/msx_cart/msx_audio.h18
-rw-r--r--src/devices/bus/msx_cart/msx_audio_kb.cpp16
-rw-r--r--src/devices/bus/msx_cart/msx_audio_kb.h9
-rw-r--r--src/devices/bus/msx_cart/msxdos2.cpp10
-rw-r--r--src/devices/bus/msx_cart/msxdos2.h5
-rw-r--r--src/devices/bus/msx_cart/nomapper.cpp2
-rw-r--r--src/devices/bus/msx_cart/nomapper.h2
-rw-r--r--src/devices/bus/msx_cart/rtype.cpp10
-rw-r--r--src/devices/bus/msx_cart/rtype.h5
-rw-r--r--src/devices/bus/msx_cart/super_swangi.cpp10
-rw-r--r--src/devices/bus/msx_cart/super_swangi.h5
-rw-r--r--src/devices/bus/msx_cart/superloderunner.cpp15
-rw-r--r--src/devices/bus/msx_cart/superloderunner.h7
-rw-r--r--src/devices/bus/msx_cart/yamaha.cpp18
-rw-r--r--src/devices/bus/msx_cart/yamaha.h5
-rw-r--r--src/devices/bus/msx_slot/bunsetsu.cpp6
-rw-r--r--src/devices/bus/msx_slot/bunsetsu.h9
-rw-r--r--src/devices/bus/msx_slot/cartridge.cpp25
-rw-r--r--src/devices/bus/msx_slot/cartridge.h21
-rw-r--r--src/devices/bus/msx_slot/disk.cpp75
-rw-r--r--src/devices/bus/msx_slot/disk.h98
-rw-r--r--src/devices/bus/msx_slot/fs4600.cpp12
-rw-r--r--src/devices/bus/msx_slot/fs4600.h9
-rw-r--r--src/devices/bus/msx_slot/music.cpp11
-rw-r--r--src/devices/bus/msx_slot/music.h11
-rw-r--r--src/devices/bus/msx_slot/panasonic08.cpp12
-rw-r--r--src/devices/bus/msx_slot/panasonic08.h9
-rw-r--r--src/devices/bus/msx_slot/ram.cpp6
-rw-r--r--src/devices/bus/msx_slot/ram.h12
-rw-r--r--src/devices/bus/msx_slot/ram_mm.cpp22
-rw-r--r--src/devices/bus/msx_slot/ram_mm.h22
-rw-r--r--src/devices/bus/msx_slot/rom.cpp4
-rw-r--r--src/devices/bus/msx_slot/rom.h6
-rw-r--r--src/devices/bus/msx_slot/slot.cpp7
-rw-r--r--src/devices/bus/msx_slot/slot.h20
-rw-r--r--src/devices/bus/msx_slot/sony08.cpp12
-rw-r--r--src/devices/bus/msx_slot/sony08.h9
-rw-r--r--src/devices/bus/mtx/exp.cpp109
-rw-r--r--src/devices/bus/mtx/exp.h93
-rw-r--r--src/devices/bus/mtx/sdx.cpp425
-rw-r--r--src/devices/bus/mtx/sdx.h105
-rw-r--r--src/devices/bus/nasbus/avc.cpp15
-rw-r--r--src/devices/bus/nasbus/nasbus.cpp35
-rw-r--r--src/devices/bus/nasbus/nasbus.h42
-rw-r--r--src/devices/bus/neogeo/boot_cthd.cpp18
-rw-r--r--src/devices/bus/neogeo/boot_kof10th.cpp7
-rw-r--r--src/devices/bus/neogeo/boot_kof2k2.cpp39
-rw-r--r--src/devices/bus/neogeo/boot_kof2k3.cpp43
-rw-r--r--src/devices/bus/neogeo/boot_misc.cpp27
-rw-r--r--src/devices/bus/neogeo/boot_svc.cpp18
-rw-r--r--src/devices/bus/neogeo/cmc.cpp19
-rw-r--r--src/devices/bus/neogeo/cmc.h8
-rw-r--r--src/devices/bus/neogeo/fatfury2.cpp7
-rw-r--r--src/devices/bus/neogeo/kof2k2.cpp13
-rw-r--r--src/devices/bus/neogeo/kof98.cpp7
-rw-r--r--src/devices/bus/neogeo/mslugx.cpp7
-rw-r--r--src/devices/bus/neogeo/pcm2.cpp9
-rw-r--r--src/devices/bus/neogeo/prot_cmc.h5
-rw-r--r--src/devices/bus/neogeo/prot_cthd.h6
-rw-r--r--src/devices/bus/neogeo/prot_fatfury2.h5
-rw-r--r--src/devices/bus/neogeo/prot_kof2k2.h5
-rw-r--r--src/devices/bus/neogeo/prot_kof2k3bl.h5
-rw-r--r--src/devices/bus/neogeo/prot_kof98.h5
-rw-r--r--src/devices/bus/neogeo/prot_misc.h5
-rw-r--r--src/devices/bus/neogeo/prot_mslugx.h5
-rw-r--r--src/devices/bus/neogeo/prot_pcm2.h5
-rw-r--r--src/devices/bus/neogeo/prot_pvc.h5
-rw-r--r--src/devices/bus/neogeo/prot_sma.h5
-rw-r--r--src/devices/bus/neogeo/pvc.cpp11
-rw-r--r--src/devices/bus/neogeo/rom.cpp12
-rw-r--r--src/devices/bus/neogeo/rom.h8
-rw-r--r--src/devices/bus/neogeo/slot.h20
-rw-r--r--src/devices/bus/neogeo/sma.cpp9
-rw-r--r--src/devices/bus/neogeo_ctrl/ctrl.h32
-rw-r--r--src/devices/bus/nes/2a03pur.cpp4
-rw-r--r--src/devices/bus/nes/2a03pur.h4
-rw-r--r--src/devices/bus/nes/act53.cpp4
-rw-r--r--src/devices/bus/nes/act53.h4
-rw-r--r--src/devices/bus/nes/aladdin.cpp21
-rw-r--r--src/devices/bus/nes/aladdin.h23
-rw-r--r--src/devices/bus/nes/ave.cpp6
-rw-r--r--src/devices/bus/nes/ave.h6
-rw-r--r--src/devices/bus/nes/bandai.cpp40
-rw-r--r--src/devices/bus/nes/bandai.h22
-rw-r--r--src/devices/bus/nes/benshieng.cpp2
-rw-r--r--src/devices/bus/nes/benshieng.h2
-rw-r--r--src/devices/bus/nes/bootleg.cpp98
-rw-r--r--src/devices/bus/nes/bootleg.h98
-rw-r--r--src/devices/bus/nes/camerica.cpp6
-rw-r--r--src/devices/bus/nes/camerica.h8
-rw-r--r--src/devices/bus/nes/cne.cpp8
-rw-r--r--src/devices/bus/nes/cne.h8
-rw-r--r--src/devices/bus/nes/cony.cpp12
-rw-r--r--src/devices/bus/nes/cony.h12
-rw-r--r--src/devices/bus/nes/datach.cpp36
-rw-r--r--src/devices/bus/nes/datach.h24
-rw-r--r--src/devices/bus/nes/discrete.cpp8
-rw-r--r--src/devices/bus/nes/discrete.h8
-rw-r--r--src/devices/bus/nes/disksys.cpp19
-rw-r--r--src/devices/bus/nes/disksys.h12
-rw-r--r--src/devices/bus/nes/ggenie.cpp38
-rw-r--r--src/devices/bus/nes/ggenie.h22
-rw-r--r--src/devices/bus/nes/henggedianzi.cpp8
-rw-r--r--src/devices/bus/nes/henggedianzi.h8
-rw-r--r--src/devices/bus/nes/hes.cpp2
-rw-r--r--src/devices/bus/nes/hes.h2
-rw-r--r--src/devices/bus/nes/hosenkan.cpp2
-rw-r--r--src/devices/bus/nes/hosenkan.h2
-rw-r--r--src/devices/bus/nes/irem.cpp10
-rw-r--r--src/devices/bus/nes/irem.h10
-rw-r--r--src/devices/bus/nes/jaleco.cpp22
-rw-r--r--src/devices/bus/nes/jaleco.h28
-rw-r--r--src/devices/bus/nes/jy.cpp20
-rw-r--r--src/devices/bus/nes/jy.h14
-rw-r--r--src/devices/bus/nes/kaiser.cpp48
-rw-r--r--src/devices/bus/nes/kaiser.h46
-rw-r--r--src/devices/bus/nes/karastudio.cpp23
-rw-r--r--src/devices/bus/nes/karastudio.h25
-rw-r--r--src/devices/bus/nes/konami.cpp50
-rw-r--r--src/devices/bus/nes/konami.h18
-rw-r--r--src/devices/bus/nes/legacy.cpp12
-rw-r--r--src/devices/bus/nes/legacy.h14
-rw-r--r--src/devices/bus/nes/mmc1.cpp24
-rw-r--r--src/devices/bus/nes/mmc1.h18
-rw-r--r--src/devices/bus/nes/mmc2.cpp6
-rw-r--r--src/devices/bus/nes/mmc2.h6
-rw-r--r--src/devices/bus/nes/mmc3.cpp28
-rw-r--r--src/devices/bus/nes/mmc3.h20
-rw-r--r--src/devices/bus/nes/mmc3_clones.cpp202
-rw-r--r--src/devices/bus/nes/mmc3_clones.h112
-rw-r--r--src/devices/bus/nes/mmc5.cpp24
-rw-r--r--src/devices/bus/nes/mmc5.h20
-rw-r--r--src/devices/bus/nes/multigame.cpp128
-rw-r--r--src/devices/bus/nes/multigame.h122
-rw-r--r--src/devices/bus/nes/namcot.cpp44
-rw-r--r--src/devices/bus/nes/namcot.h40
-rw-r--r--src/devices/bus/nes/nanjing.cpp4
-rw-r--r--src/devices/bus/nes/nanjing.h4
-rw-r--r--src/devices/bus/nes/nes_slot.cpp63
-rw-r--r--src/devices/bus/nes/nes_slot.h51
-rw-r--r--src/devices/bus/nes/ntdec.cpp4
-rw-r--r--src/devices/bus/nes/ntdec.h4
-rw-r--r--src/devices/bus/nes/nxrom.cpp35
-rw-r--r--src/devices/bus/nes/nxrom.h28
-rw-r--r--src/devices/bus/nes/pirate.cpp48
-rw-r--r--src/devices/bus/nes/pirate.h46
-rw-r--r--src/devices/bus/nes/pt554.cpp2
-rw-r--r--src/devices/bus/nes/pt554.h2
-rw-r--r--src/devices/bus/nes/racermate.cpp2
-rw-r--r--src/devices/bus/nes/racermate.h2
-rw-r--r--src/devices/bus/nes/rcm.cpp12
-rw-r--r--src/devices/bus/nes/rcm.h14
-rw-r--r--src/devices/bus/nes/rexsoft.cpp8
-rw-r--r--src/devices/bus/nes/rexsoft.h10
-rw-r--r--src/devices/bus/nes/sachen.cpp26
-rw-r--r--src/devices/bus/nes/sachen.h34
-rw-r--r--src/devices/bus/nes/somari.cpp16
-rw-r--r--src/devices/bus/nes/somari.h12
-rw-r--r--src/devices/bus/nes/subor.cpp12
-rw-r--r--src/devices/bus/nes/subor.h10
-rw-r--r--src/devices/bus/nes/sunsoft.cpp30
-rw-r--r--src/devices/bus/nes/sunsoft.h24
-rw-r--r--src/devices/bus/nes/sunsoft_dcs.cpp27
-rw-r--r--src/devices/bus/nes/sunsoft_dcs.h27
-rw-r--r--src/devices/bus/nes/taito.cpp18
-rw-r--r--src/devices/bus/nes/taito.h14
-rw-r--r--src/devices/bus/nes/tengen.cpp8
-rw-r--r--src/devices/bus/nes/tengen.h8
-rw-r--r--src/devices/bus/nes/txc.cpp16
-rw-r--r--src/devices/bus/nes/txc.h16
-rw-r--r--src/devices/bus/nes/waixing.cpp46
-rw-r--r--src/devices/bus/nes/waixing.h36
-rw-r--r--src/devices/bus/nes/zemina.cpp2
-rw-r--r--src/devices/bus/nes/zemina.h2
-rw-r--r--src/devices/bus/nes_ctrl/fckeybrd.cpp11
-rw-r--r--src/devices/bus/nes_ctrl/miracle.cpp10
-rw-r--r--src/devices/bus/newbrain/eim.cpp25
-rw-r--r--src/devices/bus/newbrain/eim.h8
-rw-r--r--src/devices/bus/newbrain/exp.cpp16
-rw-r--r--src/devices/bus/newbrain/exp.h37
-rw-r--r--src/devices/bus/newbrain/fdc.cpp45
-rw-r--r--src/devices/bus/newbrain/fdc.h14
-rw-r--r--src/devices/bus/nubus/nubus.cpp56
-rw-r--r--src/devices/bus/nubus/nubus.h51
-rw-r--r--src/devices/bus/nubus/nubus_48gc.cpp19
-rw-r--r--src/devices/bus/nubus/nubus_asntmc3b.cpp13
-rw-r--r--src/devices/bus/nubus/nubus_cb264.cpp15
-rw-r--r--src/devices/bus/nubus/nubus_image.cpp7
-rw-r--r--src/devices/bus/nubus/nubus_m2hires.cpp15
-rw-r--r--src/devices/bus/nubus/nubus_m2video.cpp15
-rw-r--r--src/devices/bus/nubus/nubus_radiustpd.cpp13
-rw-r--r--src/devices/bus/nubus/nubus_spec8.cpp15
-rw-r--r--src/devices/bus/nubus/nubus_specpdq.cpp99
-rw-r--r--src/devices/bus/nubus/nubus_vikbw.cpp15
-rw-r--r--src/devices/bus/nubus/nubus_wsportrait.cpp15
-rw-r--r--src/devices/bus/nubus/pds30_30hr.cpp15
-rw-r--r--src/devices/bus/nubus/pds30_cb264.cpp15
-rw-r--r--src/devices/bus/nubus/pds30_mc30.cpp15
-rw-r--r--src/devices/bus/nubus/pds30_procolor816.cpp15
-rw-r--r--src/devices/bus/nubus/pds30_sigmalview.cpp15
-rw-r--r--src/devices/bus/odyssey2/chess.cpp11
-rw-r--r--src/devices/bus/odyssey2/slot.h16
-rw-r--r--src/devices/bus/odyssey2/voice.cpp7
-rw-r--r--src/devices/bus/pc1512/mouse.h37
-rw-r--r--src/devices/bus/pc_kbd/ec1841.cpp33
-rw-r--r--src/devices/bus/pc_kbd/iskr1030.cpp39
-rw-r--r--src/devices/bus/pc_kbd/pc_kbdc.cpp24
-rw-r--r--src/devices/bus/pc_kbd/pc_kbdc.h17
-rw-r--r--src/devices/bus/pce/pce_slot.h22
-rw-r--r--src/devices/bus/pet/2joysnd.cpp11
-rw-r--r--src/devices/bus/pet/64k.cpp6
-rw-r--r--src/devices/bus/pet/64k.h6
-rw-r--r--src/devices/bus/pet/c2n.cpp13
-rw-r--r--src/devices/bus/pet/cass.h13
-rw-r--r--src/devices/bus/pet/cb2snd.cpp11
-rw-r--r--src/devices/bus/pet/exp.cpp12
-rw-r--r--src/devices/bus/pet/exp.h32
-rw-r--r--src/devices/bus/pet/hsg.cpp66
-rw-r--r--src/devices/bus/pet/hsg.h9
-rw-r--r--src/devices/bus/pet/superpet.cpp16
-rw-r--r--src/devices/bus/pet/superpet.h6
-rw-r--r--src/devices/bus/plus4/c1551.cpp38
-rw-r--r--src/devices/bus/plus4/c1551.h26
-rw-r--r--src/devices/bus/plus4/exp.cpp8
-rw-r--r--src/devices/bus/plus4/exp.h43
-rw-r--r--src/devices/bus/plus4/sid.cpp20
-rw-r--r--src/devices/bus/plus4/sid.h4
-rw-r--r--src/devices/bus/plus4/std.cpp2
-rw-r--r--src/devices/bus/plus4/std.h2
-rw-r--r--src/devices/bus/pofo/ccm.h31
-rw-r--r--src/devices/bus/pofo/exp.h44
-rw-r--r--src/devices/bus/pofo/hpc101.cpp37
-rw-r--r--src/devices/bus/pofo/hpc101.h4
-rw-r--r--src/devices/bus/pofo/hpc102.cpp8
-rw-r--r--src/devices/bus/pofo/hpc102.h4
-rw-r--r--src/devices/bus/pofo/hpc104.cpp27
-rw-r--r--src/devices/bus/pofo/hpc104.h4
-rw-r--r--src/devices/bus/pofo/ram.cpp4
-rw-r--r--src/devices/bus/pofo/ram.h4
-rw-r--r--src/devices/bus/pofo/rom.cpp2
-rw-r--r--src/devices/bus/pofo/rom.h2
-rw-r--r--src/devices/bus/psi_kbd/ergoline.cpp11
-rw-r--r--src/devices/bus/psi_kbd/psi_kbd.h34
-rw-r--r--src/devices/bus/psx/ctlrport.cpp7
-rw-r--r--src/devices/bus/psx/ctlrport.h5
-rw-r--r--src/devices/bus/psx/gamebooster.cpp8
-rw-r--r--src/devices/bus/psx/memcard.h2
-rw-r--r--src/devices/bus/ql/cst_q_plus4.cpp43
-rw-r--r--src/devices/bus/ql/cst_q_plus4.h4
-rw-r--r--src/devices/bus/ql/cst_qdisc.cpp4
-rw-r--r--src/devices/bus/ql/cst_qdisc.h4
-rw-r--r--src/devices/bus/ql/cumana_fdi.cpp4
-rw-r--r--src/devices/bus/ql/cumana_fdi.h4
-rw-r--r--src/devices/bus/ql/exp.h34
-rw-r--r--src/devices/bus/ql/kempston_di.cpp4
-rw-r--r--src/devices/bus/ql/kempston_di.h4
-rw-r--r--src/devices/bus/ql/miracle_gold_card.cpp4
-rw-r--r--src/devices/bus/ql/miracle_gold_card.h4
-rw-r--r--src/devices/bus/ql/miracle_hd.cpp4
-rw-r--r--src/devices/bus/ql/miracle_hd.h4
-rw-r--r--src/devices/bus/ql/mp_fdi.cpp4
-rw-r--r--src/devices/bus/ql/mp_fdi.h4
-rw-r--r--src/devices/bus/ql/opd_basic_master.cpp4
-rw-r--r--src/devices/bus/ql/opd_basic_master.h4
-rw-r--r--src/devices/bus/ql/pcml_qdisk.cpp4
-rw-r--r--src/devices/bus/ql/pcml_qdisk.h4
-rw-r--r--src/devices/bus/ql/qubide.cpp4
-rw-r--r--src/devices/bus/ql/qubide.h4
-rw-r--r--src/devices/bus/ql/rom.h8
-rw-r--r--src/devices/bus/ql/sandy_superdisk.cpp4
-rw-r--r--src/devices/bus/ql/sandy_superdisk.h4
-rw-r--r--src/devices/bus/ql/sandy_superqboard.cpp4
-rw-r--r--src/devices/bus/ql/sandy_superqboard.h4
-rw-r--r--src/devices/bus/ql/std.cpp2
-rw-r--r--src/devices/bus/ql/std.h2
-rw-r--r--src/devices/bus/ql/trumpcard.cpp4
-rw-r--r--src/devices/bus/ql/trumpcard.h4
-rw-r--r--src/devices/bus/rs232/null_modem.cpp7
-rw-r--r--src/devices/bus/rs232/printer.cpp9
-rw-r--r--src/devices/bus/rs232/xvd701.cpp5
-rw-r--r--src/devices/bus/s100/dj2db.cpp8
-rw-r--r--src/devices/bus/s100/dj2db.h8
-rw-r--r--src/devices/bus/s100/djdma.cpp2
-rw-r--r--src/devices/bus/s100/djdma.h2
-rw-r--r--src/devices/bus/s100/mm65k16s.cpp4
-rw-r--r--src/devices/bus/s100/mm65k16s.h4
-rw-r--r--src/devices/bus/s100/nsmdsa.cpp14
-rw-r--r--src/devices/bus/s100/nsmdsa.h5
-rw-r--r--src/devices/bus/s100/nsmdsad.cpp14
-rw-r--r--src/devices/bus/s100/nsmdsad.h5
-rw-r--r--src/devices/bus/s100/s100.cpp16
-rw-r--r--src/devices/bus/s100/s100.h121
-rw-r--r--src/devices/bus/s100/seals8k.cpp8
-rw-r--r--src/devices/bus/s100/wunderbus.cpp16
-rw-r--r--src/devices/bus/s100/wunderbus.h4
-rw-r--r--src/devices/bus/saturn/sat_slot.h16
-rw-r--r--src/devices/bus/sbus/cgthree.cpp4
-rw-r--r--src/devices/bus/scsi/omti5100.cpp9
-rw-r--r--src/devices/bus/scsi/s1410.cpp17
-rw-r--r--src/devices/bus/scsi/sa1403d.cpp7
-rw-r--r--src/devices/bus/scsi/scsi.h88
-rw-r--r--src/devices/bus/scsi/scsicd.cpp10
-rw-r--r--src/devices/bus/scsi/scsihd.cpp8
-rw-r--r--src/devices/bus/scsi/scsihle.h6
-rw-r--r--src/devices/bus/scv/slot.h16
-rw-r--r--src/devices/bus/sega8/ccatch.cpp7
-rw-r--r--src/devices/bus/sega8/mgear.cpp9
-rw-r--r--src/devices/bus/sega8/rom.cpp112
-rw-r--r--src/devices/bus/sega8/rom.h56
-rw-r--r--src/devices/bus/sega8/sega8_slot.cpp91
-rw-r--r--src/devices/bus/sega8/sega8_slot.h262
-rw-r--r--src/devices/bus/sg1000_exp/fm_unit.cpp13
-rw-r--r--src/devices/bus/sg1000_exp/kblink.cpp179
-rw-r--r--src/devices/bus/sg1000_exp/kblink.h82
-rw-r--r--src/devices/bus/sg1000_exp/sg1000exp.h26
-rw-r--r--src/devices/bus/sg1000_exp/sk1100.cpp45
-rw-r--r--src/devices/bus/sg1000_exp/sk1100.h3
-rw-r--r--src/devices/bus/sg1000_exp/sk1100prn.cpp125
-rw-r--r--src/devices/bus/sg1000_exp/sk1100prn.h88
-rw-r--r--src/devices/bus/sms_ctrl/multitap.cpp21
-rw-r--r--src/devices/bus/sms_ctrl/rfu.cpp11
-rw-r--r--src/devices/bus/sms_ctrl/smsctrl.h34
-rw-r--r--src/devices/bus/sms_exp/gender.cpp7
-rw-r--r--src/devices/bus/sms_exp/smsexp.h23
-rw-r--r--src/devices/bus/snes/bsx.cpp38
-rw-r--r--src/devices/bus/snes/bsx.h32
-rw-r--r--src/devices/bus/snes/event.cpp23
-rw-r--r--src/devices/bus/snes/event.h12
-rw-r--r--src/devices/bus/snes/rom.cpp54
-rw-r--r--src/devices/bus/snes/rom.h54
-rw-r--r--src/devices/bus/snes/rom21.cpp8
-rw-r--r--src/devices/bus/snes/rom21.h8
-rw-r--r--src/devices/bus/snes/sa1.cpp87
-rw-r--r--src/devices/bus/snes/sa1.h32
-rw-r--r--src/devices/bus/snes/sdd1.cpp14
-rw-r--r--src/devices/bus/snes/sdd1.h12
-rw-r--r--src/devices/bus/snes/sfx.cpp26
-rw-r--r--src/devices/bus/snes/sfx.h26
-rw-r--r--src/devices/bus/snes/sgb.cpp44
-rw-r--r--src/devices/bus/snes/sgb.h33
-rw-r--r--src/devices/bus/snes/snes_slot.cpp51
-rw-r--r--src/devices/bus/snes/snes_slot.h36
-rw-r--r--src/devices/bus/snes/spc7110.cpp12
-rw-r--r--src/devices/bus/snes/spc7110.h20
-rw-r--r--src/devices/bus/snes/sufami.cpp26
-rw-r--r--src/devices/bus/snes/sufami.h10
-rw-r--r--src/devices/bus/snes/upd.cpp170
-rw-r--r--src/devices/bus/snes/upd.h30
-rw-r--r--src/devices/bus/snes_ctrl/ctrl.h22
-rw-r--r--src/devices/bus/snes_ctrl/miracle.cpp10
-rw-r--r--src/devices/bus/snes_ctrl/multitap.cpp13
-rw-r--r--src/devices/bus/spc1000/exp.h9
-rw-r--r--src/devices/bus/spectrum/beta.cpp256
-rw-r--r--src/devices/bus/spectrum/beta.h64
-rw-r--r--src/devices/bus/spectrum/exp.cpp63
-rw-r--r--src/devices/bus/spectrum/exp.h22
-rw-r--r--src/devices/bus/spectrum/fuller.cpp65
-rw-r--r--src/devices/bus/spectrum/fuller.h11
-rw-r--r--src/devices/bus/spectrum/intf1.cpp47
-rw-r--r--src/devices/bus/spectrum/intf1.h8
-rw-r--r--src/devices/bus/spectrum/intf2.cpp19
-rw-r--r--src/devices/bus/spectrum/intf2.h4
-rw-r--r--src/devices/bus/spectrum/kempjoy.cpp20
-rw-r--r--src/devices/bus/spectrum/kempjoy.h5
-rw-r--r--src/devices/bus/spectrum/melodik.cpp55
-rw-r--r--src/devices/bus/spectrum/melodik.h9
-rw-r--r--src/devices/bus/spectrum/mface.cpp321
-rw-r--r--src/devices/bus/spectrum/mface.h100
-rw-r--r--src/devices/bus/spectrum/mikroplus.cpp22
-rw-r--r--src/devices/bus/spectrum/mikroplus.h6
-rw-r--r--src/devices/bus/spectrum/opus.cpp289
-rw-r--r--src/devices/bus/spectrum/opus.h75
-rw-r--r--src/devices/bus/spectrum/plus2test.cpp2
-rw-r--r--src/devices/bus/spectrum/plus2test.h2
-rw-r--r--src/devices/bus/spectrum/protek.cpp17
-rw-r--r--src/devices/bus/spectrum/protek.h2
-rw-r--r--src/devices/bus/spectrum/specdrum.cpp73
-rw-r--r--src/devices/bus/spectrum/specdrum.h51
-rw-r--r--src/devices/bus/spectrum/uslot.cpp38
-rw-r--r--src/devices/bus/spectrum/uslot.h8
-rw-r--r--src/devices/bus/spectrum/usource.cpp13
-rw-r--r--src/devices/bus/spectrum/usource.h3
-rw-r--r--src/devices/bus/spectrum/uspeech.cpp40
-rw-r--r--src/devices/bus/spectrum/uspeech.h6
-rw-r--r--src/devices/bus/ss50/interface.cpp10
-rw-r--r--src/devices/bus/ss50/interface.h37
-rw-r--r--src/devices/bus/ss50/mpc.cpp23
-rw-r--r--src/devices/bus/ss50/mps.cpp12
-rw-r--r--src/devices/bus/sunkbd/hlekbd.cpp8
-rw-r--r--src/devices/bus/svi3x8/expander/expander.cpp16
-rw-r--r--src/devices/bus/svi3x8/expander/expander.h74
-rw-r--r--src/devices/bus/svi3x8/expander/sv601.cpp35
-rw-r--r--src/devices/bus/svi3x8/expander/sv601.h8
-rw-r--r--src/devices/bus/svi3x8/expander/sv602.cpp23
-rw-r--r--src/devices/bus/svi3x8/expander/sv602.h8
-rw-r--r--src/devices/bus/svi3x8/expander/sv603.cpp119
-rw-r--r--src/devices/bus/svi3x8/expander/sv603.h17
-rw-r--r--src/devices/bus/svi3x8/slot/slot.cpp35
-rw-r--r--src/devices/bus/svi3x8/slot/slot.h55
-rw-r--r--src/devices/bus/svi3x8/slot/sv801.cpp8
-rw-r--r--src/devices/bus/svi3x8/slot/sv801.h6
-rw-r--r--src/devices/bus/svi3x8/slot/sv802.cpp16
-rw-r--r--src/devices/bus/svi3x8/slot/sv802.h4
-rw-r--r--src/devices/bus/svi3x8/slot/sv803.cpp4
-rw-r--r--src/devices/bus/svi3x8/slot/sv803.h4
-rw-r--r--src/devices/bus/svi3x8/slot/sv805.cpp8
-rw-r--r--src/devices/bus/svi3x8/slot/sv805.h4
-rw-r--r--src/devices/bus/svi3x8/slot/sv806.cpp14
-rw-r--r--src/devices/bus/svi3x8/slot/sv806.h8
-rw-r--r--src/devices/bus/svi3x8/slot/sv807.cpp4
-rw-r--r--src/devices/bus/svi3x8/slot/sv807.h4
-rw-r--r--src/devices/bus/ti8x/bitsocket.cpp7
-rw-r--r--src/devices/bus/ti8x/teeconn.cpp19
-rw-r--r--src/devices/bus/ti8x/ti8x.h11
-rw-r--r--src/devices/bus/ti8x/tispeaker.cpp19
-rw-r--r--src/devices/bus/ti99/gromport/cartridges.cpp56
-rw-r--r--src/devices/bus/ti99/gromport/cartridges.h36
-rw-r--r--src/devices/bus/ti99/gromport/gkracker.cpp12
-rw-r--r--src/devices/bus/ti99/gromport/gkracker.h4
-rw-r--r--src/devices/bus/ti99/gromport/gromport.cpp12
-rw-r--r--src/devices/bus/ti99/gromport/gromport.h9
-rw-r--r--src/devices/bus/ti99/gromport/multiconn.cpp16
-rw-r--r--src/devices/bus/ti99/gromport/multiconn.h4
-rw-r--r--src/devices/bus/ti99/gromport/singleconn.cpp12
-rw-r--r--src/devices/bus/ti99/gromport/singleconn.h4
-rw-r--r--src/devices/bus/ti99/internal/992board.cpp10
-rw-r--r--src/devices/bus/ti99/internal/992board.h4
-rw-r--r--src/devices/bus/ti99/internal/998board.cpp78
-rw-r--r--src/devices/bus/ti99/internal/998board.h29
-rw-r--r--src/devices/bus/ti99/internal/datamux.cpp75
-rw-r--r--src/devices/bus/ti99/internal/datamux.h19
-rw-r--r--src/devices/bus/ti99/internal/genboard.cpp48
-rw-r--r--src/devices/bus/ti99/internal/genboard.h14
-rw-r--r--src/devices/bus/ti99/internal/ioport.cpp14
-rw-r--r--src/devices/bus/ti99/internal/ioport.h20
-rw-r--r--src/devices/bus/ti99/joyport/handset.cpp1
-rw-r--r--src/devices/bus/ti99/peb/bwg.cpp12
-rw-r--r--src/devices/bus/ti99/peb/bwg.h4
-rw-r--r--src/devices/bus/ti99/peb/evpc.cpp11
-rw-r--r--src/devices/bus/ti99/peb/evpc.h4
-rw-r--r--src/devices/bus/ti99/peb/hfdc.cpp22
-rw-r--r--src/devices/bus/ti99/peb/hfdc.h10
-rw-r--r--src/devices/bus/ti99/peb/horizon.cpp4
-rw-r--r--src/devices/bus/ti99/peb/horizon.h4
-rw-r--r--src/devices/bus/ti99/peb/hsgpl.cpp44
-rw-r--r--src/devices/bus/ti99/peb/hsgpl.h14
-rw-r--r--src/devices/bus/ti99/peb/memex.cpp7
-rw-r--r--src/devices/bus/ti99/peb/memex.h4
-rw-r--r--src/devices/bus/ti99/peb/myarcmem.cpp4
-rw-r--r--src/devices/bus/ti99/peb/myarcmem.h4
-rw-r--r--src/devices/bus/ti99/peb/pcode.cpp8
-rw-r--r--src/devices/bus/ti99/peb/pcode.h6
-rw-r--r--src/devices/bus/ti99/peb/peribox.cpp28
-rw-r--r--src/devices/bus/ti99/peb/peribox.h12
-rw-r--r--src/devices/bus/ti99/peb/samsmem.cpp4
-rw-r--r--src/devices/bus/ti99/peb/samsmem.h4
-rw-r--r--src/devices/bus/ti99/peb/spchsyn.cpp13
-rw-r--r--src/devices/bus/ti99/peb/spchsyn.h5
-rw-r--r--src/devices/bus/ti99/peb/ti_32kmem.cpp7
-rw-r--r--src/devices/bus/ti99/peb/ti_32kmem.h4
-rw-r--r--src/devices/bus/ti99/peb/ti_fdc.cpp8
-rw-r--r--src/devices/bus/ti99/peb/ti_fdc.h4
-rw-r--r--src/devices/bus/ti99/peb/ti_rs232.cpp27
-rw-r--r--src/devices/bus/ti99/peb/ti_rs232.h12
-rw-r--r--src/devices/bus/ti99/peb/tn_ide.cpp26
-rw-r--r--src/devices/bus/ti99/peb/tn_ide.h4
-rw-r--r--src/devices/bus/ti99/peb/tn_usbsm.cpp18
-rw-r--r--src/devices/bus/ti99/peb/tn_usbsm.h4
-rw-r--r--src/devices/bus/ti99/ti99defs.h8
-rw-r--r--src/devices/bus/ti99x/990_dk.cpp17
-rw-r--r--src/devices/bus/ti99x/990_hd.cpp12
-rw-r--r--src/devices/bus/ti99x/990_hd.h3
-rw-r--r--src/devices/bus/ti99x/990_tap.cpp22
-rw-r--r--src/devices/bus/ti99x/990_tap.h3
-rw-r--r--src/devices/bus/tiki100/8088.cpp17
-rw-r--r--src/devices/bus/tiki100/8088.h4
-rw-r--r--src/devices/bus/tiki100/exp.cpp16
-rw-r--r--src/devices/bus/tiki100/exp.h72
-rw-r--r--src/devices/bus/tiki100/hdc.cpp8
-rw-r--r--src/devices/bus/tiki100/hdc.h4
-rw-r--r--src/devices/bus/tmc600/euro.h23
-rw-r--r--src/devices/bus/tvc/tvc.h26
-rw-r--r--src/devices/bus/uts_kbd/400kbd.cpp275
-rw-r--r--src/devices/bus/uts_kbd/400kbd.h44
-rw-r--r--src/devices/bus/uts_kbd/extw.cpp290
-rw-r--r--src/devices/bus/uts_kbd/extw.h47
-rw-r--r--src/devices/bus/uts_kbd/uts_kbd.cpp89
-rw-r--r--src/devices/bus/uts_kbd/uts_kbd.h101
-rw-r--r--src/devices/bus/vboy/slot.h15
-rw-r--r--src/devices/bus/vc4000/rom.cpp12
-rw-r--r--src/devices/bus/vc4000/rom.h12
-rw-r--r--src/devices/bus/vc4000/slot.cpp16
-rw-r--r--src/devices/bus/vc4000/slot.h16
-rw-r--r--src/devices/bus/vcs/dpc.cpp7
-rw-r--r--src/devices/bus/vcs/harmony_melody.cpp9
-rw-r--r--src/devices/bus/vcs/scharger.cpp18
-rw-r--r--src/devices/bus/vcs_ctrl/ctrl.h17
-rw-r--r--src/devices/bus/vectrex/slot.h4
-rw-r--r--src/devices/bus/vic10/exp.cpp8
-rw-r--r--src/devices/bus/vic10/exp.h8
-rw-r--r--src/devices/bus/vic10/multimax.cpp4
-rw-r--r--src/devices/bus/vic10/multimax.h4
-rw-r--r--src/devices/bus/vic10/std.cpp4
-rw-r--r--src/devices/bus/vic10/std.h4
-rw-r--r--src/devices/bus/vic20/exp.cpp8
-rw-r--r--src/devices/bus/vic20/exp.h8
-rw-r--r--src/devices/bus/vic20/fe3.cpp38
-rw-r--r--src/devices/bus/vic20/fe3.h4
-rw-r--r--src/devices/bus/vic20/megacart.cpp11
-rw-r--r--src/devices/bus/vic20/megacart.h4
-rw-r--r--src/devices/bus/vic20/speakeasy.cpp16
-rw-r--r--src/devices/bus/vic20/speakeasy.h4
-rw-r--r--src/devices/bus/vic20/std.cpp2
-rw-r--r--src/devices/bus/vic20/std.h2
-rw-r--r--src/devices/bus/vic20/vic1010.cpp8
-rw-r--r--src/devices/bus/vic20/vic1010.h4
-rw-r--r--src/devices/bus/vic20/vic1110.cpp4
-rw-r--r--src/devices/bus/vic20/vic1110.h4
-rw-r--r--src/devices/bus/vic20/vic1111.cpp4
-rw-r--r--src/devices/bus/vic20/vic1111.h4
-rw-r--r--src/devices/bus/vic20/vic1112.cpp4
-rw-r--r--src/devices/bus/vic20/vic1112.h4
-rw-r--r--src/devices/bus/vic20/vic1210.cpp4
-rw-r--r--src/devices/bus/vic20/vic1210.h4
-rw-r--r--src/devices/bus/vic20/videopak.cpp29
-rw-r--r--src/devices/bus/vic20/videopak.h4
-rw-r--r--src/devices/bus/vidbrain/exp.cpp8
-rw-r--r--src/devices/bus/vidbrain/exp.h52
-rw-r--r--src/devices/bus/vidbrain/money_minder.cpp4
-rw-r--r--src/devices/bus/vidbrain/money_minder.h4
-rw-r--r--src/devices/bus/vidbrain/std.cpp2
-rw-r--r--src/devices/bus/vidbrain/std.h2
-rw-r--r--src/devices/bus/vidbrain/timeshare.cpp4
-rw-r--r--src/devices/bus/vidbrain/timeshare.h4
-rw-r--r--src/devices/bus/vip/byteio.h28
-rw-r--r--src/devices/bus/vip/exp.cpp26
-rw-r--r--src/devices/bus/vip/exp.h62
-rw-r--r--src/devices/bus/vip/vp550.cpp20
-rw-r--r--src/devices/bus/vip/vp550.h10
-rw-r--r--src/devices/bus/vip/vp570.cpp4
-rw-r--r--src/devices/bus/vip/vp570.h4
-rw-r--r--src/devices/bus/vip/vp575.cpp82
-rw-r--r--src/devices/bus/vip/vp575.h12
-rw-r--r--src/devices/bus/vip/vp585.cpp2
-rw-r--r--src/devices/bus/vip/vp585.h2
-rw-r--r--src/devices/bus/vip/vp590.cpp15
-rw-r--r--src/devices/bus/vip/vp590.h6
-rw-r--r--src/devices/bus/vip/vp595.cpp4
-rw-r--r--src/devices/bus/vip/vp595.h2
-rw-r--r--src/devices/bus/vip/vp620.cpp2
-rw-r--r--src/devices/bus/vip/vp700.cpp2
-rw-r--r--src/devices/bus/vip/vp700.h2
-rw-r--r--src/devices/bus/vme/vme.cpp30
-rw-r--r--src/devices/bus/vme/vme.h43
-rw-r--r--src/devices/bus/vme/vme_fccpu20.cpp64
-rw-r--r--src/devices/bus/vme/vme_fccpu20.h3
-rw-r--r--src/devices/bus/vme/vme_hcpu30.h2
-rw-r--r--src/devices/bus/vme/vme_mvme350.cpp11
-rw-r--r--src/devices/bus/vme/vme_mzr8105.cpp12
-rw-r--r--src/devices/bus/vme/vme_mzr8300.cpp4
-rw-r--r--src/devices/bus/vsmile/pad.cpp275
-rw-r--r--src/devices/bus/vsmile/pad.h78
-rw-r--r--src/devices/bus/vsmile/rom.cpp86
-rw-r--r--src/devices/bus/vsmile/rom.h59
-rw-r--r--src/devices/bus/vsmile/vsmile_ctrl.cpp315
-rw-r--r--src/devices/bus/vsmile/vsmile_ctrl.h153
-rw-r--r--src/devices/bus/vsmile/vsmile_slot.cpp254
-rw-r--r--src/devices/bus/vsmile/vsmile_slot.h128
-rw-r--r--src/devices/bus/vtech/ioexp/ioexp.cpp11
-rw-r--r--src/devices/bus/vtech/ioexp/ioexp.h4
-rw-r--r--src/devices/bus/vtech/ioexp/printer.cpp13
-rw-r--r--src/devices/bus/vtech/memexp/floppy.cpp3
-rw-r--r--src/devices/bus/vtech/memexp/memexp.cpp44
-rw-r--r--src/devices/bus/vtech/memexp/memexp.h9
-rw-r--r--src/devices/bus/wangpc/emb.cpp8
-rw-r--r--src/devices/bus/wangpc/emb.h8
-rw-r--r--src/devices/bus/wangpc/lic.cpp14
-rw-r--r--src/devices/bus/wangpc/lic.h8
-rw-r--r--src/devices/bus/wangpc/lvc.cpp33
-rw-r--r--src/devices/bus/wangpc/lvc.h8
-rw-r--r--src/devices/bus/wangpc/mcc.cpp14
-rw-r--r--src/devices/bus/wangpc/mcc.h4
-rw-r--r--src/devices/bus/wangpc/mvc.cpp31
-rw-r--r--src/devices/bus/wangpc/mvc.h8
-rw-r--r--src/devices/bus/wangpc/rtc.cpp8
-rw-r--r--src/devices/bus/wangpc/rtc.h8
-rw-r--r--src/devices/bus/wangpc/tig.cpp47
-rw-r--r--src/devices/bus/wangpc/tig.h8
-rw-r--r--src/devices/bus/wangpc/wangpc.cpp24
-rw-r--r--src/devices/bus/wangpc/wangpc.h117
-rw-r--r--src/devices/bus/wangpc/wdc.cpp30
-rw-r--r--src/devices/bus/wangpc/wdc.h12
-rw-r--r--src/devices/bus/wswan/rom.cpp26
-rw-r--r--src/devices/bus/wswan/rom.h20
-rw-r--r--src/devices/bus/wswan/slot.cpp28
-rw-r--r--src/devices/bus/wswan/slot.h28
-rw-r--r--src/devices/bus/x68k/x68k_midi.cpp18
-rw-r--r--src/devices/bus/x68k/x68k_neptunex.cpp17
-rw-r--r--src/devices/bus/x68k/x68k_scsiext.cpp20
-rw-r--r--src/devices/bus/x68k/x68kexp.cpp1
-rw-r--r--src/devices/bus/x68k/x68kexp.h40
-rw-r--r--src/devices/bus/z88/flash.cpp4
-rw-r--r--src/devices/bus/z88/z88.h19
1315 files changed, 22457 insertions, 10947 deletions
diff --git a/src/devices/bus/a1bus/a1bus.cpp b/src/devices/bus/a1bus/a1bus.cpp
index b9370c084d6..1dee51c40b2 100644
--- a/src/devices/bus/a1bus/a1bus.cpp
+++ b/src/devices/bus/a1bus/a1bus.cpp
@@ -82,7 +82,7 @@ a1bus_device::a1bus_device(const machine_config &mconfig, const char *tag, devic
a1bus_device::a1bus_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_maincpu(*this, finder_base::DUMMY_TAG)
+ , m_space(*this, finder_base::DUMMY_TAG, -1)
, m_out_irq_cb(*this)
, m_out_nmi_cb(*this)
, m_device(nullptr)
@@ -136,13 +136,13 @@ void a1bus_device::set_nmi_line(int state)
void a1bus_device::install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler)
{
- m_maincpu->space(AS_PROGRAM).install_readwrite_handler(start, end, rhandler, whandler);
+ 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)
{
// printf("install_bank: %s @ %x->%x\n", tag, start, end);
- m_maincpu->space(AS_PROGRAM).install_readwrite_bank(start, end, tag);
+ m_space->install_readwrite_bank(start, end, tag);
machine().root_device().membank(siblingtag(tag).c_str())->set_base(data);
}
diff --git a/src/devices/bus/a1bus/a1bus.h b/src/devices/bus/a1bus/a1bus.h
index 484cba5b70f..7970f150719 100644
--- a/src/devices/bus/a1bus/a1bus.h
+++ b/src/devices/bus/a1bus/a1bus.h
@@ -13,19 +13,6 @@
//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_A1BUS_CPU(_cputag) \
- downcast<a1bus_device &>(*device).set_cputag(_cputag);
-
-#define MCFG_A1BUS_OUT_IRQ_CB(_devcb) \
- downcast<a1bus_device &>(*device).set_out_irq_callback(DEVCB_##_devcb);
-
-#define MCFG_A1BUS_OUT_NMI_CB(_devcb) \
- downcast<a1bus_device &>(*device).set_out_nmi_callback(DEVCB_##_devcb);
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -72,9 +59,9 @@ public:
a1bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// inline configuration
- template <typename T> void set_cputag(T &&tag) { m_maincpu.set_tag(std::forward<T>(tag)); }
- template <class Object> devcb_base &set_out_irq_callback(Object &&cb) { return m_out_irq_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_nmi_callback(Object &&cb) { return m_out_nmi_cb.set_callback(std::forward<Object>(cb)); }
+ template <typename T> void set_space(T &&tag, int spacenum) { m_space.set_tag(std::forward<T>(tag), spacenum); }
+ auto out_irq_callback() { return m_out_irq_cb.bind(); }
+ auto out_nmi_callback() { return m_out_nmi_cb.bind(); }
void add_a1bus_card(device_a1bus_card_interface *card);
device_a1bus_card_interface *get_a1bus_card();
@@ -97,7 +84,7 @@ protected:
virtual void device_reset() override;
// internal state
- required_device<cpu_device> m_maincpu;
+ required_address_space m_space;
devcb_write_line m_out_irq_cb;
devcb_write_line m_out_nmi_cb;
diff --git a/src/devices/bus/a1bus/a1cassette.cpp b/src/devices/bus/a1bus/a1cassette.cpp
index 5605e156304..13140382f48 100644
--- a/src/devices/bus/a1bus/a1cassette.cpp
+++ b/src/devices/bus/a1bus/a1cassette.cpp
@@ -36,11 +36,12 @@ ROM_END
/* sound output */
-MACHINE_CONFIG_START(a1bus_cassette_device::device_add_mconfig)
- MCFG_CASSETTE_ADD("cassette")
- MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED)
- MCFG_CASSETTE_INTERFACE("apple1_cass")
-MACHINE_CONFIG_END
+void a1bus_cassette_device::device_add_mconfig(machine_config &config)
+{
+ CASSETTE(config, m_cassette);
+ m_cassette->set_default_state(CASSETTE_STOPPED);
+ m_cassette->set_interface("apple1_cass");
+}
const tiny_rom_entry *a1bus_cassette_device::device_rom_region() const
{
diff --git a/src/devices/bus/a2bus/a2alfam2.cpp b/src/devices/bus/a2bus/a2alfam2.cpp
index 6817176c202..e97722708da 100644
--- a/src/devices/bus/a2bus/a2alfam2.cpp
+++ b/src/devices/bus/a2bus/a2alfam2.cpp
@@ -39,37 +39,39 @@ DEFINE_DEVICE_TYPE(A2BUS_AESMS, a2bus_aesms_device, "a2aesms", "Applied Engin
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(a2bus_sn76489_device::device_add_mconfig)
+void a2bus_sn76489_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "alf_l").front_left();
SPEAKER(config, "alf_r").front_right();
- MCFG_DEVICE_ADD(SN1_TAG, SN76489, 1020484)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "alf_l", 0.50)
- MCFG_DEVICE_ADD(SN2_TAG, SN76489, 1020484)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "alf_l", 0.50)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "alf_r", 0.50)
- MCFG_DEVICE_ADD(SN3_TAG, SN76489, 1020484)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "alf_r", 0.50)
-MACHINE_CONFIG_END
+ SN76489(config, m_sn1, 1020484);
+ m_sn1->add_route(ALL_OUTPUTS, "alf_l", 0.50);
+ SN76489(config, m_sn2, 1020484);
+ m_sn2->add_route(ALL_OUTPUTS, "alf_l", 0.50);
+ m_sn2->add_route(ALL_OUTPUTS, "alf_r", 0.50);
+ SN76489(config, m_sn3, 1020484);
+ m_sn3->add_route(ALL_OUTPUTS, "alf_r", 0.50);
+}
-MACHINE_CONFIG_START(a2bus_aesms_device::device_add_mconfig)
+void a2bus_aesms_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "alf_l").front_left();
SPEAKER(config, "alf_r").front_right();
- MCFG_DEVICE_ADD(SN1_TAG, SN76489, 1020484)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "alf_l", 0.50)
+ SN76489(config, m_sn1, 1020484);
+ m_sn1->add_route(ALL_OUTPUTS, "alf_l", 0.50);
- MCFG_DEVICE_ADD(SN2_TAG, SN76489, 1020484)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "alf_l", 0.50)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "alf_r", 0.50)
+ SN76489(config, m_sn2, 1020484);
+ m_sn2->add_route(ALL_OUTPUTS, "alf_l", 0.50);
+ m_sn2->add_route(ALL_OUTPUTS, "alf_r", 0.50);
- MCFG_DEVICE_ADD(SN3_TAG, SN76489, 1020484)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "alf_r", 0.50)
+ SN76489(config, m_sn3, 1020484);
+ m_sn3->add_route(ALL_OUTPUTS, "alf_r", 0.50);
- MCFG_DEVICE_ADD(SN4_TAG, SN76489, 1020484)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "alf_l", 0.50)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "alf_r", 0.50)
-MACHINE_CONFIG_END
+ SN76489(config, m_sn4, 1020484);
+ m_sn4->add_route(ALL_OUTPUTS, "alf_l", 0.50);
+ m_sn4->add_route(ALL_OUTPUTS, "alf_r", 0.50);
+}
//**************************************************************************
// LIVE DEVICE
diff --git a/src/devices/bus/a2bus/a2arcadebd.cpp b/src/devices/bus/a2bus/a2arcadebd.cpp
index 4bdd0a6911b..169971ea3e5 100644
--- a/src/devices/bus/a2bus/a2arcadebd.cpp
+++ b/src/devices/bus/a2bus/a2arcadebd.cpp
@@ -97,7 +97,7 @@ uint8_t a2bus_arcboard_device::read_c0nx(uint8_t offset)
return m_tms->register_read();
case 6:
- return m_ay->read_data();
+ return m_ay->data_r();
}
return 0xff;
@@ -118,11 +118,11 @@ void a2bus_arcboard_device::write_c0nx(uint8_t offset, uint8_t data)
break;
case 5:
- m_ay->write_address(data);
+ m_ay->address_w(data);
break;
case 6:
- m_ay->write_data(data);
+ m_ay->data_w(data);
break;
}
}
diff --git a/src/devices/bus/a2bus/a2bus.cpp b/src/devices/bus/a2bus/a2bus.cpp
index 84df6f73b35..7adcaf368a7 100644
--- a/src/devices/bus/a2bus/a2bus.cpp
+++ b/src/devices/bus/a2bus/a2bus.cpp
@@ -145,8 +145,11 @@ a2bus_device::a2bus_device(const machine_config &mconfig, const char *tag, devic
a2bus_device::a2bus_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_maincpu(*this, finder_base::DUMMY_TAG), m_maincpu_space(nullptr)
- , m_out_irq_cb(*this) , m_out_nmi_cb(*this), m_out_inh_cb(*this)
+ , m_maincpu_space(*this, finder_base::DUMMY_TAG, -1)
+ , m_out_irq_cb(*this)
+ , m_out_nmi_cb(*this)
+ , m_out_inh_cb(*this)
+ , m_out_dma_cb(*this)
, m_slot_irq_mask(0), m_slot_nmi_mask(0)
{
}
@@ -157,12 +160,11 @@ a2bus_device::a2bus_device(const machine_config &mconfig, device_type type, cons
void a2bus_device::device_resolve_objects()
{
- m_maincpu_space = &m_maincpu->space(AS_PROGRAM);
-
// resolve callbacks
m_out_irq_cb.resolve_safe();
m_out_nmi_cb.resolve_safe();
m_out_inh_cb.resolve_safe();
+ m_out_dma_cb.resolve_safe();
}
void a2bus_device::device_start()
@@ -239,27 +241,17 @@ void a2bus_device::set_nmi_line(int state, int slot)
}
}
-void a2bus_device::set_maincpu_halt(int state)
+void a2bus_device::set_dma_line(int state)
{
- m_maincpu->set_input_line(INPUT_LINE_HALT, state);
-}
-
-uint8_t a2bus_device::dma_r(address_space &space, uint16_t offset)
-{
- return m_maincpu_space->read_byte(offset);
-}
-
-void a2bus_device::dma_w(address_space &space, uint16_t offset, uint8_t data)
-{
- m_maincpu_space->write_byte(offset, data);
+ m_out_dma_cb(state);
}
-uint8_t a2bus_device::dma_nospace_r(uint16_t offset)
+uint8_t a2bus_device::dma_r(uint16_t offset)
{
return m_maincpu_space->read_byte(offset);
}
-void a2bus_device::dma_nospace_w(uint16_t offset, uint8_t data)
+void a2bus_device::dma_w(uint16_t offset, uint8_t data)
{
m_maincpu_space->write_byte(offset, data);
}
diff --git a/src/devices/bus/a2bus/a2bus.h b/src/devices/bus/a2bus/a2bus.h
index 862aeca3803..502ff72e854 100644
--- a/src/devices/bus/a2bus/a2bus.h
+++ b/src/devices/bus/a2bus/a2bus.h
@@ -25,22 +25,6 @@
#define INH_READ 0x01
#define INH_WRITE 0x02
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_A2BUS_CPU(_cputag) \
- downcast<a2bus_device &>(*device).set_cputag(_cputag);
-
-#define MCFG_A2BUS_OUT_IRQ_CB(_devcb) \
- downcast<a2bus_device &>(*device).set_out_irq_callback(DEVCB_##_devcb);
-
-#define MCFG_A2BUS_OUT_NMI_CB(_devcb) \
- downcast<a2bus_device &>(*device).set_out_nmi_callback(DEVCB_##_devcb);
-
-#define MCFG_A2BUS_OUT_INH_CB(_devcb) \
- downcast<a2bus_device &>(*device).set_out_inh_callback(DEVCB_##_devcb);
-
// 7M = XTAL(14'318'181) / 2 or XTAL(28'636'363) / 4 (for IIgs)
static constexpr uint32_t A2BUS_7M_CLOCK = 7159090;
@@ -99,15 +83,11 @@ public:
a2bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// inline configuration
- template <typename T> void set_cputag(T &&tag) { m_maincpu.set_tag(std::forward<T>(tag)); }
- template <class Object> devcb_base &set_out_irq_callback(Object &&cb) { return m_out_irq_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_nmi_callback(Object &&cb) { return m_out_nmi_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_inh_callback(Object &&cb) { return m_out_inh_cb.set_callback(std::forward<Object>(cb)); }
-
- // devcb3
+ template <typename T> void set_space(T &&tag, int spacenum) { m_maincpu_space.set_tag(std::forward<T>(tag), spacenum); }
auto irq_w() { return m_out_irq_cb.bind(); }
auto nmi_w() { return m_out_nmi_cb.bind(); }
auto inh_w() { return m_out_inh_cb.bind(); }
+ auto dma_w() { return m_out_dma_cb.bind(); }
void add_a2bus_card(int slot, device_a2bus_card_interface *card);
device_a2bus_card_interface *get_a2bus_card(int slot);
@@ -116,12 +96,10 @@ public:
void set_irq_line(int state, int slot);
void set_nmi_line(int state, int slot);
- void set_maincpu_halt(int state);
+ void set_dma_line(int state);
void recalc_inh(int slot);
- uint8_t dma_r(address_space &space, uint16_t offset);
- void dma_w(address_space &space, uint16_t offset, uint8_t data);
- uint8_t dma_nospace_r(uint16_t offset);
- void dma_nospace_w(uint16_t offset, uint8_t data);
+ uint8_t dma_r(uint16_t offset);
+ void dma_w(uint16_t offset, uint8_t data);
DECLARE_WRITE_LINE_MEMBER( irq_w );
DECLARE_WRITE_LINE_MEMBER( nmi_w );
@@ -135,12 +113,12 @@ protected:
virtual void device_reset() override;
// internal state
- required_device<cpu_device> m_maincpu;
- address_space *m_maincpu_space;
+ required_address_space m_maincpu_space;
devcb_write_line m_out_irq_cb;
devcb_write_line m_out_nmi_cb;
devcb_write8 m_out_inh_cb;
+ devcb_write_line m_out_dma_cb;
device_a2bus_card_interface *m_device_list[8];
@@ -181,14 +159,8 @@ public:
void set_a2bus(a2bus_device *a2bus, const char *slottag) { m_a2bus = a2bus; m_a2bus_slottag = slottag; }
template <typename T> void set_onboard(T &&a2bus) { m_a2bus_finder.set_tag(std::forward<T>(a2bus)); m_a2bus_slottag = device().tag(); }
- // pass through the original address space if any for debugger protection
- // when debugging e.g. coprocessor cards (Z80 SoftCard etc).
- uint8_t slot_dma_read(address_space &space, uint16_t offset) { return m_a2bus->dma_r(space, offset); }
- void slot_dma_write(address_space &space, uint16_t offset, uint8_t data) { m_a2bus->dma_w(space, offset, data); }
-
- // these versions forego that protection for when the DMA isn't coming from a debuggable CPU device
- uint8_t slot_dma_read_no_space(uint16_t offset) { return m_a2bus->dma_nospace_r(offset); }
- void slot_dma_write_no_space(uint16_t offset, uint8_t data) { m_a2bus->dma_nospace_w(offset, data); }
+ uint8_t slot_dma_read(uint16_t offset) { return m_a2bus->dma_r(offset); }
+ void slot_dma_write(uint16_t offset, uint8_t data) { m_a2bus->dma_w(offset, data); }
protected:
uint32_t get_slotromspace() { return 0xc000 | (m_slot<<8); } // return Cn00 address for this slot
@@ -199,7 +171,8 @@ protected:
void raise_slot_nmi() { m_a2bus->set_nmi_line(ASSERT_LINE, m_slot); }
void lower_slot_nmi() { m_a2bus->set_nmi_line(CLEAR_LINE, m_slot); }
void recalc_slot_inh() { m_a2bus->recalc_inh(m_slot); }
- void set_maincpu_halt(int state) { m_a2bus->set_maincpu_halt(state); }
+ void raise_slot_dma() { m_a2bus->set_dma_line(ASSERT_LINE); }
+ void lower_slot_dma() { m_a2bus->set_dma_line(CLEAR_LINE); }
device_a2bus_card_interface(const machine_config &mconfig, device_t &device);
diff --git a/src/devices/bus/a2bus/a2cffa.cpp b/src/devices/bus/a2bus/a2cffa.cpp
index 4eb5c7d2d98..41c5a1603f6 100644
--- a/src/devices/bus/a2bus/a2cffa.cpp
+++ b/src/devices/bus/a2bus/a2cffa.cpp
@@ -56,7 +56,7 @@ void a2bus_cffa2000_device::device_add_mconfig(machine_config &config)
ATA_INTERFACE(config, m_ata).options(ata_devices, "hdd", nullptr, false);
// not yet, the core explodes
-// MCFG_SOFTWARE_LIST_ADD("hdd_list", "apple2gs_hdd")
+// SOFTWARE_LIST(config, "hdd_list").set_original("apple2gs_hdd");
}
//-------------------------------------------------
diff --git a/src/devices/bus/a2bus/a2corvus.cpp b/src/devices/bus/a2bus/a2corvus.cpp
index 251485d3f28..3b0af093659 100644
--- a/src/devices/bus/a2bus/a2corvus.cpp
+++ b/src/devices/bus/a2bus/a2corvus.cpp
@@ -71,17 +71,14 @@ ROM_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(a2bus_corvus_device::device_add_mconfig)
- MCFG_DEVICE_ADD(CORVUS_HD_TAG, CORVUS_HDC, 0)
- MCFG_HARDDISK_ADD("harddisk1")
- MCFG_HARDDISK_INTERFACE("corvus_hdd")
- MCFG_HARDDISK_ADD("harddisk2")
- MCFG_HARDDISK_INTERFACE("corvus_hdd")
- MCFG_HARDDISK_ADD("harddisk3")
- MCFG_HARDDISK_INTERFACE("corvus_hdd")
- MCFG_HARDDISK_ADD("harddisk4")
- MCFG_HARDDISK_INTERFACE("corvus_hdd")
-MACHINE_CONFIG_END
+void a2bus_corvus_device::device_add_mconfig(machine_config &config)
+{
+ CORVUS_HDC(config, m_corvushd, 0);
+ HARDDISK(config, "harddisk1", "corvus_hdd");
+ HARDDISK(config, "harddisk2", "corvus_hdd");
+ HARDDISK(config, "harddisk3", "corvus_hdd");
+ HARDDISK(config, "harddisk4", "corvus_hdd");
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/a2bus/a2diskii.cpp b/src/devices/bus/a2bus/a2diskii.cpp
index 9673abbb1da..20aff173549 100644
--- a/src/devices/bus/a2bus/a2diskii.cpp
+++ b/src/devices/bus/a2bus/a2diskii.cpp
@@ -61,15 +61,19 @@ ROM_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(a2bus_floppy_device::device_add_mconfig)
- MCFG_APPLEFDC_ADD(FDC_TAG, fdc_interface)
- MCFG_LEGACY_FLOPPY_APPLE_2_DRIVES_ADD(floppy_interface,15,16)
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(a2bus_iwmflop_device::device_add_mconfig)
- MCFG_IWM_ADD(FDC_TAG, fdc_interface)
- MCFG_LEGACY_FLOPPY_APPLE_2_DRIVES_ADD(floppy_interface,15,16)
-MACHINE_CONFIG_END
+void a2bus_floppy_device::device_add_mconfig(machine_config &config)
+{
+ APPLEFDC(config, m_fdc, &fdc_interface);
+ FLOPPY_APPLE(config, FLOPPY_0, &floppy_interface, 15, 16);
+ FLOPPY_APPLE(config, FLOPPY_1, &floppy_interface, 15, 16);
+}
+
+void a2bus_iwmflop_device::device_add_mconfig(machine_config &config)
+{
+ IWM(config, m_fdc, &fdc_interface);
+ FLOPPY_APPLE(config, FLOPPY_0, &floppy_interface, 15, 16);
+ FLOPPY_APPLE(config, FLOPPY_1, &floppy_interface, 15, 16);
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/a2bus/a2diskiing.cpp b/src/devices/bus/a2bus/a2diskiing.cpp
index 28194db0421..1846b447a04 100644
--- a/src/devices/bus/a2bus/a2diskiing.cpp
+++ b/src/devices/bus/a2bus/a2diskiing.cpp
@@ -54,17 +54,19 @@ FLOPPY_FORMATS_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(diskiing_device::device_add_mconfig)
- MCFG_DEVICE_ADD(WOZFDC_TAG, DISKII_FDC, 1021800*2)
- MCFG_FLOPPY_DRIVE_ADD("0", a2_floppies, "525", diskiing_device::floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD("1", a2_floppies, "525", diskiing_device::floppy_formats)
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(a2bus_diskiing13_device::device_add_mconfig)
- MCFG_DEVICE_ADD(WOZFDC_TAG, DISKII_FDC, 1021800*2)
- MCFG_FLOPPY_DRIVE_ADD("0", a2_floppies, "525", a2bus_diskiing13_device::floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD("1", a2_floppies, "525", a2bus_diskiing13_device::floppy_formats)
-MACHINE_CONFIG_END
+void diskiing_device::device_add_mconfig(machine_config &config)
+{
+ DISKII_FDC(config, m_wozfdc, 1021800*2);
+ for (auto &floppy : m_floppy)
+ FLOPPY_CONNECTOR(config, floppy, a2_floppies, "525", diskiing_device::floppy_formats);
+}
+
+void a2bus_diskiing13_device::device_add_mconfig(machine_config &config)
+{
+ DISKII_FDC(config, m_wozfdc, 1021800*2);
+ for (auto &floppy : m_floppy)
+ FLOPPY_CONNECTOR(config, floppy, a2_floppies, "525", a2bus_diskiing13_device::floppy_formats);
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
@@ -88,8 +90,7 @@ diskiing_device::diskiing_device(const machine_config &mconfig, device_type type
device_t(mconfig, type, tag, owner, clock),
device_a2bus_card_interface(mconfig, *this),
m_wozfdc(*this, WOZFDC_TAG),
- floppy0(*this, "0"),
- floppy1(*this, "1"),
+ m_floppy(*this, "%u", 0U),
m_rom(nullptr)
{
}
@@ -115,7 +116,7 @@ void diskiing_device::device_start()
void diskiing_device::device_reset()
{
- m_wozfdc->set_floppies(floppy0, floppy1);
+ m_wozfdc->set_floppies(m_floppy[0], m_floppy[1]);
}
/*-------------------------------------------------
diff --git a/src/devices/bus/a2bus/a2diskiing.h b/src/devices/bus/a2bus/a2diskiing.h
index e6476cb29a7..c30d49ebf0d 100644
--- a/src/devices/bus/a2bus/a2diskiing.h
+++ b/src/devices/bus/a2bus/a2diskiing.h
@@ -42,11 +42,10 @@ protected:
virtual void write_c0nx(uint8_t offset, uint8_t data) override;
virtual uint8_t read_cnxx(uint8_t offset) override;
-private:
required_device<diskii_fdc_device> m_wozfdc;
- required_device<floppy_connector> floppy0;
- required_device<floppy_connector> floppy1;
+ required_device_array<floppy_connector, 2> m_floppy;
+private:
const uint8_t *m_rom;
DECLARE_FLOPPY_FORMATS( floppy_formats );
diff --git a/src/devices/bus/a2bus/a2dx1.cpp b/src/devices/bus/a2bus/a2dx1.cpp
index 5efd112a779..9c1a0733405 100644
--- a/src/devices/bus/a2bus/a2dx1.cpp
+++ b/src/devices/bus/a2bus/a2dx1.cpp
@@ -31,14 +31,14 @@ DEFINE_DEVICE_TYPE(A2BUS_DX1, a2bus_dx1_device, "a2dx1", "Decillonix DX-1")
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(a2bus_dx1_device::device_add_mconfig)
+void a2bus_dx1_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "speaker").front_center();
- MCFG_DEVICE_ADD("dac", DAC_8BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5) // unknown DAC
- MCFG_DEVICE_ADD("dacvol", DAC_8BIT_R2R, 0) // unknown DAC
- MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT)
- MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
- MCFG_SOUND_ROUTE(0, "dacvol", 1.0, DAC_VREF_POS_INPUT)
-MACHINE_CONFIG_END
+ DAC_8BIT_R2R(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.5); // unknown DAC
+ DAC_8BIT_R2R(config, m_dacvol, 0).add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT).add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); // unknown DAC
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
+ vref.add_route(0, "dacvol", 1.0, DAC_VREF_POS_INPUT);
+}
//**************************************************************************
// LIVE DEVICE
diff --git a/src/devices/bus/a2bus/a2eauxslot.cpp b/src/devices/bus/a2bus/a2eauxslot.cpp
index 6885d528128..5fab40ba9ae 100644
--- a/src/devices/bus/a2bus/a2eauxslot.cpp
+++ b/src/devices/bus/a2bus/a2eauxslot.cpp
@@ -33,20 +33,16 @@ a2eauxslot_slot_device::a2eauxslot_slot_device(const machine_config &mconfig, co
a2eauxslot_slot_device::a2eauxslot_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, type, tag, owner, clock)
, device_slot_interface(mconfig, *this)
- , m_a2eauxslot_tag(nullptr)
- , m_a2eauxslot_slottag(nullptr)
+ , m_a2eauxslot(*this, finder_base::DUMMY_TAG)
{
}
-//-------------------------------------------------
-// device_start - device-specific startup
-//-------------------------------------------------
-
-void a2eauxslot_slot_device::device_start()
+void a2eauxslot_slot_device::device_resolve_objects()
{
device_a2eauxslot_card_interface *dev = dynamic_cast<device_a2eauxslot_card_interface *>(get_card_device());
- if (dev) dev->set_a2eauxslot_tag(m_a2eauxslot_tag, m_a2eauxslot_slottag);
+ if (dev)
+ dev->set_a2eauxslot_device(m_a2eauxslot.target());
}
//**************************************************************************
@@ -70,34 +66,31 @@ a2eauxslot_device::a2eauxslot_device(const machine_config &mconfig, const char *
a2eauxslot_device::a2eauxslot_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_maincpu(nullptr)
+ , m_space(*this, finder_base::DUMMY_TAG, -1)
, m_out_irq_cb(*this)
, m_out_nmi_cb(*this)
, m_device(nullptr)
- , m_cputag(nullptr)
{
}
+
//-------------------------------------------------
-// device_start - device-specific startup
+// device_resolve_objects - resolve objects that
+// may be needed for other devices to set
+// initial conditions at start time
//-------------------------------------------------
-void a2eauxslot_device::device_start()
+void a2eauxslot_device::device_resolve_objects()
{
- m_maincpu = machine().device<cpu_device>(m_cputag);
-
// resolve callbacks
m_out_irq_cb.resolve_safe();
m_out_nmi_cb.resolve_safe();
-
- // clear slot
- m_device = nullptr;
}
//-------------------------------------------------
-// device_reset - device-specific reset
+// device_start - device-specific startup
//-------------------------------------------------
-void a2eauxslot_device::device_reset()
+void a2eauxslot_device::device_start()
{
}
@@ -141,7 +134,7 @@ WRITE_LINE_MEMBER( a2eauxslot_device::nmi_w ) { m_out_nmi_cb(state); }
device_a2eauxslot_card_interface::device_a2eauxslot_card_interface(const machine_config &mconfig, device_t &device)
: device_slot_card_interface(mconfig, device),
m_a2eauxslot(nullptr),
- m_a2eauxslot_tag(nullptr), m_a2eauxslot_slottag(nullptr), m_slot(0), m_next(nullptr)
+ m_slot(0), m_next(nullptr)
{
}
@@ -154,8 +147,8 @@ device_a2eauxslot_card_interface::~device_a2eauxslot_card_interface()
{
}
-void device_a2eauxslot_card_interface::set_a2eauxslot_device()
+void device_a2eauxslot_card_interface::set_a2eauxslot_device(a2eauxslot_device *a2eauxslot)
{
- m_a2eauxslot = dynamic_cast<a2eauxslot_device *>(device().machine().device(m_a2eauxslot_tag));
+ m_a2eauxslot = a2eauxslot;
m_a2eauxslot->add_a2eauxslot_card(this);
}
diff --git a/src/devices/bus/a2bus/a2eauxslot.h b/src/devices/bus/a2bus/a2eauxslot.h
index 1da89b18d7a..4351bc6112a 100644
--- a/src/devices/bus/a2bus/a2eauxslot.h
+++ b/src/devices/bus/a2bus/a2eauxslot.h
@@ -15,25 +15,6 @@
#include "a2bus.h"
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_A2EAUXSLOT_CPU(_cputag) \
- downcast<a2eauxslot_device &>(*device).set_cputag(_cputag);
-
-#define MCFG_A2EAUXSLOT_OUT_IRQ_CB(_devcb) \
- downcast<a2eauxslot_device &>(*device).set_out_irq_callback(DEVCB_##_devcb);
-
-#define MCFG_A2EAUXSLOT_OUT_NMI_CB(_devcb) \
- downcast<a2eauxslot_device &>(*device).set_out_nmi_callback(DEVCB_##_devcb);
-
-#define MCFG_A2EAUXSLOT_SLOT_ADD(_nbtag, _tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, A2EAUXSLOT_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- downcast<a2eauxslot_slot_device &>(*device).set_a2eauxslot_slot(_nbtag, _tag);
-#define MCFG_A2EAUXSLOT_SLOT_REMOVE(_tag) \
- MCFG_DEVICE_REMOVE(_tag)
//**************************************************************************
// TYPE DEFINITIONS
@@ -46,19 +27,28 @@ class a2eauxslot_slot_device : public device_t,
{
public:
// construction/destruction
- a2eauxslot_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T, typename U>
+ a2eauxslot_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&slottag, U &&opts, char const *dflt)
+ : a2eauxslot_slot_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ m_a2eauxslot.set_tag(std::forward<T>(slottag));
+ }
+
+ a2eauxslot_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
// device-level overrides
- virtual void device_start() override;
-
- // inline configuration
- void set_a2eauxslot_slot(const char *tag, const char *slottag) { m_a2eauxslot_tag = tag; m_a2eauxslot_slottag = slottag; }
+ virtual void device_resolve_objects() override;
+ virtual void device_start() override { }
protected:
a2eauxslot_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
// configuration
- const char *m_a2eauxslot_tag, *m_a2eauxslot_slottag;
+ required_device<a2eauxslot_device> m_a2eauxslot;
};
// device type definition
@@ -75,9 +65,9 @@ public:
a2eauxslot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// inline configuration
- void set_cputag(const char *tag) { m_cputag = tag; }
- template <class Object> devcb_base &set_out_irq_callback(Object &&cb) { return m_out_irq_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_nmi_callback(Object &&cb) { return m_out_nmi_cb.set_callback(std::forward<Object>(cb)); }
+ template <typename T> void set_space(T &&tag, int spacenum) { m_space.set_tag(std::forward<T>(tag), spacenum); }
+ auto out_irq_callback() { return m_out_irq_cb.bind(); }
+ auto out_nmi_callback() { return m_out_nmi_cb.bind(); }
void add_a2eauxslot_card(device_a2eauxslot_card_interface *card);
device_a2eauxslot_card_interface *get_a2eauxslot_card();
@@ -92,17 +82,16 @@ protected:
a2eauxslot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
+ virtual void device_resolve_objects() override;
virtual void device_start() override;
- virtual void device_reset() override;
// internal state
- cpu_device *m_maincpu;
+ required_address_space m_space;
devcb_write_line m_out_irq_cb;
devcb_write_line m_out_nmi_cb;
device_a2eauxslot_card_interface *m_device;
- const char *m_cputag;
};
@@ -121,28 +110,24 @@ public:
virtual uint8_t read_auxram(uint16_t offset) { printf("a2eauxslot: unhandled auxram read @ %04x\n", offset); return 0xff; }
virtual void write_auxram(uint16_t offset, uint8_t data) { printf("a2eauxslot: unhandled auxram write %02x @ %04x\n", data, offset); }
- virtual void write_c07x(address_space &space, uint8_t offset, uint8_t data) {}
+ virtual void write_c07x(uint8_t offset, uint8_t data) {}
virtual uint8_t *get_vram_ptr() = 0;
virtual uint8_t *get_auxbank_ptr() = 0;
virtual bool allow_dhr() { return true; }
device_a2eauxslot_card_interface *next() const { return m_next; }
- void set_a2eauxslot_device();
+ void set_a2eauxslot_device(a2eauxslot_device *a2eauxslot);
void raise_slot_irq() { m_a2eauxslot->set_irq_line(ASSERT_LINE); }
void lower_slot_irq() { m_a2eauxslot->set_irq_line(CLEAR_LINE); }
void raise_slot_nmi() { m_a2eauxslot->set_nmi_line(ASSERT_LINE); }
void lower_slot_nmi() { m_a2eauxslot->set_nmi_line(CLEAR_LINE); }
- // inline configuration
- void set_a2eauxslot_tag(const char *tag, const char *slottag) { m_a2eauxslot_tag = tag; m_a2eauxslot_slottag = slottag; }
-
protected:
device_a2eauxslot_card_interface(const machine_config &mconfig, device_t &device);
a2eauxslot_device *m_a2eauxslot;
- const char *m_a2eauxslot_tag, *m_a2eauxslot_slottag;
int m_slot;
device_a2eauxslot_card_interface *m_next;
};
diff --git a/src/devices/bus/a2bus/a2eext80col.cpp b/src/devices/bus/a2bus/a2eext80col.cpp
index b98d31c0d5c..2ddb4a0b476 100644
--- a/src/devices/bus/a2bus/a2eext80col.cpp
+++ b/src/devices/bus/a2bus/a2eext80col.cpp
@@ -43,7 +43,6 @@ a2eaux_ext80col_device::a2eaux_ext80col_device(const machine_config &mconfig, de
void a2eaux_ext80col_device::device_start()
{
- set_a2eauxslot_device();
memset(m_ram, 0, sizeof(m_ram));
save_item(NAME(m_ram));
}
diff --git a/src/devices/bus/a2bus/a2eramworks3.cpp b/src/devices/bus/a2bus/a2eramworks3.cpp
index e82225cbd27..46ada4066a1 100644
--- a/src/devices/bus/a2bus/a2eramworks3.cpp
+++ b/src/devices/bus/a2bus/a2eramworks3.cpp
@@ -45,7 +45,6 @@ a2eaux_ramworks3_device::a2eaux_ramworks3_device(const machine_config &mconfig,
void a2eaux_ramworks3_device::device_start()
{
- set_a2eauxslot_device();
save_item(NAME(m_ram));
save_item(NAME(m_bank));
}
@@ -88,7 +87,7 @@ uint8_t *a2eaux_ramworks3_device::get_auxbank_ptr()
However, the software will recognize and correctly use a configuration in which
all of banks 00-7F are populated for a total of 8 megabytes. So that's what we do.
*/
-void a2eaux_ramworks3_device::write_c07x(address_space &space, uint8_t offset, uint8_t data)
+void a2eaux_ramworks3_device::write_c07x(uint8_t offset, uint8_t data)
{
// write to C073?
if (offset == 3)
diff --git a/src/devices/bus/a2bus/a2eramworks3.h b/src/devices/bus/a2bus/a2eramworks3.h
index f2b327ebfab..d47d88c37d9 100644
--- a/src/devices/bus/a2bus/a2eramworks3.h
+++ b/src/devices/bus/a2bus/a2eramworks3.h
@@ -36,7 +36,7 @@ protected:
virtual uint8_t *get_vram_ptr() override;
virtual uint8_t *get_auxbank_ptr() override;
virtual bool allow_dhr() override { return true; }
- virtual void write_c07x(address_space &space, uint8_t offset, uint8_t data) override;
+ virtual void write_c07x(uint8_t offset, uint8_t data) override;
private:
uint8_t m_ram[8*1024*1024];
diff --git a/src/devices/bus/a2bus/a2estd80col.cpp b/src/devices/bus/a2bus/a2estd80col.cpp
index e5a9741e7a0..8eecf223c48 100644
--- a/src/devices/bus/a2bus/a2estd80col.cpp
+++ b/src/devices/bus/a2bus/a2estd80col.cpp
@@ -43,7 +43,6 @@ a2eaux_std80col_device::a2eaux_std80col_device(const machine_config &mconfig, de
void a2eaux_std80col_device::device_start()
{
- set_a2eauxslot_device();
save_item(NAME(m_ram));
}
diff --git a/src/devices/bus/a2bus/a2hsscsi.cpp b/src/devices/bus/a2bus/a2hsscsi.cpp
index 6be63715d88..ec4eea8080a 100644
--- a/src/devices/bus/a2bus/a2hsscsi.cpp
+++ b/src/devices/bus/a2bus/a2hsscsi.cpp
@@ -57,14 +57,6 @@ DEFINE_DEVICE_TYPE(A2BUS_HSSCSI, a2bus_hsscsi_device, "a2hsscsi", "Apple II High
#define SCSI_BUS_TAG "scsibus"
#define SCSI_5380_TAG "scsibus:7:ncr5380"
-void a2bus_hsscsi_device::ncr5380(device_t *device)
-{
- devcb_base *devcb;
- (void)devcb;
- MCFG_DEVICE_CLOCK(10000000)
- MCFG_NCR5380N_DRQ_HANDLER(WRITELINE("^^", a2bus_hsscsi_device, drq_w))
-}
-
static void hsscsi_devices(device_slot_interface &device)
{
device.option_add("cdrom", NSCSI_CDROM);
@@ -85,18 +77,21 @@ ROM_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(a2bus_hsscsi_device::device_add_mconfig)
- MCFG_NSCSI_BUS_ADD(SCSI_BUS_TAG)
- MCFG_NSCSI_ADD("scsibus:0", hsscsi_devices, nullptr, false)
- MCFG_NSCSI_ADD("scsibus:1", hsscsi_devices, nullptr, false)
- MCFG_NSCSI_ADD("scsibus:2", hsscsi_devices, nullptr, false)
- MCFG_NSCSI_ADD("scsibus:3", hsscsi_devices, nullptr, false)
- MCFG_NSCSI_ADD("scsibus:4", hsscsi_devices, nullptr, false)
- MCFG_NSCSI_ADD("scsibus:5", hsscsi_devices, nullptr, false)
- MCFG_NSCSI_ADD("scsibus:6", hsscsi_devices, "harddisk", false)
- MCFG_NSCSI_ADD("scsibus:7", hsscsi_devices, "ncr5380", true)
- MCFG_SLOT_OPTION_MACHINE_CONFIG("ncr5380", ncr5380)
-MACHINE_CONFIG_END
+void a2bus_hsscsi_device::device_add_mconfig(machine_config &config)
+{
+ NSCSI_BUS(config, m_scsibus);
+ NSCSI_CONNECTOR(config, "scsibus:0", hsscsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsibus:1", hsscsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsibus:2", hsscsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsibus:3", hsscsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsibus:4", hsscsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsibus:5", hsscsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsibus:6", hsscsi_devices, "harddisk", false);
+ NSCSI_CONNECTOR(config, "scsibus:7", hsscsi_devices, "ncr5380", true).set_option_machine_config("ncr5380", [this](device_t *device) {
+ device->set_clock(10000000);
+ downcast<ncr5380n_device &>(*device).drq_handler().set(*this, FUNC(a2bus_hsscsi_device::drq_w));
+ });
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
@@ -168,7 +163,7 @@ uint8_t a2bus_hsscsi_device::read_c0nx(uint8_t offset)
case 6:
case 7:
// logerror("Read 5380 @ %x\n", offset);
- return m_ncr5380->read(machine().dummy_space(), offset);
+ return m_ncr5380->read(offset);
case 0xc:
return 0x00; // indicate watchdog?
@@ -205,7 +200,7 @@ void a2bus_hsscsi_device::write_c0nx(uint8_t offset, uint8_t data)
case 6:
case 7:
// logerror("%02x to 5380 reg %x\n", data, offset);
- m_ncr5380->write(machine().dummy_space(), offset, data);
+ m_ncr5380->write(offset, data);
break;
#if 0
case 8: // DMA address low
diff --git a/src/devices/bus/a2bus/a2hsscsi.h b/src/devices/bus/a2bus/a2hsscsi.h
index c3534ede770..da96b3e8776 100644
--- a/src/devices/bus/a2bus/a2hsscsi.h
+++ b/src/devices/bus/a2bus/a2hsscsi.h
@@ -30,8 +30,6 @@ public:
DECLARE_WRITE_LINE_MEMBER( drq_w );
- static void ncr5380(device_t *device);
-
protected:
a2bus_hsscsi_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
diff --git a/src/devices/bus/a2bus/a2mcms.cpp b/src/devices/bus/a2bus/a2mcms.cpp
index 1442d7d68bc..7e2cab57b6b 100644
--- a/src/devices/bus/a2bus/a2mcms.cpp
+++ b/src/devices/bus/a2bus/a2mcms.cpp
@@ -38,8 +38,6 @@ DEFINE_DEVICE_TYPE(A2BUS_MCMS2, a2bus_mcms2_device, "a2mcms2", "Mountain Compute
#define ENGINE_TAG "engine"
-#define MCFG_MCMS_IRQ_CALLBACK(_cb) \
- downcast<mcms_device &>(*device).set_irq_cb(DEVCB_##_cb);
/***************************************************************************
FUNCTION PROTOTYPES
@@ -49,16 +47,16 @@ DEFINE_DEVICE_TYPE(A2BUS_MCMS2, a2bus_mcms2_device, "a2mcms2", "Mountain Compute
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(a2bus_mcms1_device::device_add_mconfig)
+void a2bus_mcms1_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "mcms_l").front_left();
SPEAKER(config, "mcms_r").front_right();
- MCFG_DEVICE_ADD(ENGINE_TAG, MCMS, 1000000)
- MCFG_MCMS_IRQ_CALLBACK(WRITELINE(*this, a2bus_mcms1_device, irq_w))
-
- MCFG_SOUND_ROUTE(0, "mcms_l", 1.0)
- MCFG_SOUND_ROUTE(1, "mcms_r", 1.0)
-MACHINE_CONFIG_END
+ MCMS(config, m_mcms, 1000000);
+ m_mcms->irq_cb().set(FUNC(a2bus_mcms1_device::irq_w));
+ m_mcms->add_route(0, "mcms_l", 1.0);
+ m_mcms->add_route(1, "mcms_r", 1.0);
+}
//**************************************************************************
// LIVE DEVICE - Card 1
@@ -277,7 +275,7 @@ void mcms_device::sound_stream_update(sound_stream &stream, stream_sample_t **in
wptr = (m_table[v]<<8) | (m_acc[v]>>8);
m_rand = (m_acc[v]>>8) & 0x1f;
- sample = (m_pBusDevice->slot_dma_read_no_space(wptr) ^ 0x80);
+ sample = (m_pBusDevice->slot_dma_read(wptr) ^ 0x80);
if (v & 1)
{
mixL += sample * m_vols[v];
diff --git a/src/devices/bus/a2bus/a2mcms.h b/src/devices/bus/a2bus/a2mcms.h
index f1026d97afd..9a183a9313d 100644
--- a/src/devices/bus/a2bus/a2mcms.h
+++ b/src/devices/bus/a2bus/a2mcms.h
@@ -33,7 +33,7 @@ public:
void set_bus_device(a2bus_mcms1_device *pDev) { m_pBusDevice = pDev; }
- template<class Object> devcb_base &set_irq_cb(Object &&wr) { return m_write_irq.set_callback(std::forward<Object>(wr)); }
+ auto irq_cb() { return m_write_irq.bind(); }
devcb_write_line m_write_irq;
protected:
diff --git a/src/devices/bus/a2bus/a2memexp.cpp b/src/devices/bus/a2bus/a2memexp.cpp
index a544713abb7..6b088a1ea12 100644
--- a/src/devices/bus/a2bus/a2memexp.cpp
+++ b/src/devices/bus/a2bus/a2memexp.cpp
@@ -46,8 +46,9 @@ ROM_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(a2bus_memexp_device::device_add_mconfig)
-MACHINE_CONFIG_END
+void a2bus_memexp_device::device_add_mconfig(machine_config &config)
+{
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/a2bus/a2midi.cpp b/src/devices/bus/a2bus/a2midi.cpp
index d73aaf82bbc..dfd6ce71694 100644
--- a/src/devices/bus/a2bus/a2midi.cpp
+++ b/src/devices/bus/a2bus/a2midi.cpp
@@ -32,7 +32,8 @@ DEFINE_DEVICE_TYPE(A2BUS_MIDI, a2bus_midi_device, "a2midi", "6850 MIDI card")
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(a2bus_midi_device::device_add_mconfig)
+void a2bus_midi_device::device_add_mconfig(machine_config &config)
+{
PTM6840(config, m_ptm, 1021800);
m_ptm->set_external_clocks(1021800.0f, 1021800.0f, 1021800.0f);
m_ptm->irq_callback().set(FUNC(a2bus_midi_device::ptm_irq_w));
@@ -41,14 +42,13 @@ MACHINE_CONFIG_START(a2bus_midi_device::device_add_mconfig)
m_acia->txd_handler().set("mdout", FUNC(midi_port_device::write_txd));
m_acia->irq_handler().set(FUNC(a2bus_midi_device::acia_irq_w));
- MCFG_MIDI_PORT_ADD("mdin", midiin_slot, "midiin")
- MCFG_MIDI_RX_HANDLER(WRITELINE(MIDI_ACIA_TAG, acia6850_device, write_rxd))
+ MIDI_PORT(config, "mdin", midiin_slot, "midiin").rxd_handler().set(m_acia, FUNC(acia6850_device::write_rxd));
- MCFG_MIDI_PORT_ADD("mdout", midiout_slot, "midiout")
+ MIDI_PORT(config, "mdout", midiout_slot, "midiout");
- MCFG_DEVICE_ADD("acia_clock", CLOCK, 31250*16)
- MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(*this, a2bus_midi_device, write_acia_clock))
-MACHINE_CONFIG_END
+ clock_device &acia_clock(CLOCK(config, "acia_clock", 31250*16));
+ acia_clock.signal_handler().set(FUNC(a2bus_midi_device::write_acia_clock));
+}
//**************************************************************************
// LIVE DEVICE
@@ -91,11 +91,11 @@ uint8_t a2bus_midi_device::read_c0nx(uint8_t offset)
if (offset < 8)
{
- return m_ptm->read(machine().dummy_space(), offset & 7);
+ return m_ptm->read(offset & 7);
}
else if (offset == 8 || offset == 9)
{
- return m_acia->read(machine().dummy_space(), offset & 1);
+ return m_acia->read(offset & 1);
}
return 0;
@@ -109,11 +109,11 @@ void a2bus_midi_device::write_c0nx(uint8_t offset, uint8_t data)
{
if (offset < 8)
{
- m_ptm->write(machine().dummy_space(), offset & 7, data);
+ m_ptm->write(offset & 7, data);
}
else if (offset == 8 || offset == 9)
{
- m_acia->write(machine().dummy_space(), offset & 1, data);
+ m_acia->write(offset & 1, data);
}
}
diff --git a/src/devices/bus/a2bus/a2mockingboard.cpp b/src/devices/bus/a2bus/a2mockingboard.cpp
index c1d67bfa7d3..c4c45b6975b 100644
--- a/src/devices/bus/a2bus/a2mockingboard.cpp
+++ b/src/devices/bus/a2bus/a2mockingboard.cpp
@@ -238,7 +238,7 @@ WRITE8_MEMBER( a2bus_ayboard_device::via1_out_b )
{
if (!BIT(data, 2))
{
- m_ay1->reset_w(space, 0, 0);
+ m_ay1->reset_w();
}
else
{
@@ -248,15 +248,15 @@ WRITE8_MEMBER( a2bus_ayboard_device::via1_out_b )
break;
case 1: // BDIR=0, BC1=1 (read PSG)
- m_porta1 = m_ay1->read_data();
+ m_porta1 = m_ay1->data_r();
break;
case 2: // BDIR=1, BC1=0 (write PSG)
- m_ay1->write_data(m_porta1);
+ m_ay1->data_w(m_porta1);
break;
case 3: // BDIR=1, BC1=1 (latch)
- m_ay1->write_address(m_porta1);
+ m_ay1->address_w(m_porta1);
break;
}
}
@@ -266,10 +266,10 @@ WRITE8_MEMBER( a2bus_phasor_device::via1_out_b )
{
if (!(data & 4))
{
- m_ay1->reset_w(space, 0, 0);
+ m_ay1->reset_w();
if (m_native)
{
- m_ay2->reset_w(space, 0, 0);
+ m_ay2->reset_w();
}
}
else
@@ -289,23 +289,23 @@ WRITE8_MEMBER( a2bus_phasor_device::via1_out_b )
case 1: // BDIR=0, BC1=1 (read PSG)
if (BIT(chip_sel, 0))
- m_porta1 = m_ay1->read_data();
+ m_porta1 = m_ay1->data_r();
if (BIT(chip_sel, 1))
- m_porta1 = m_ay2->read_data();
+ m_porta1 = m_ay2->data_r();
break;
case 2: // BDIR=1, BC1=0 (write PSG)
if (BIT(chip_sel, 0))
- m_ay1->write_data(m_porta1);
+ m_ay1->data_w(m_porta1);
if (BIT(chip_sel, 1))
- m_ay2->write_data(m_porta1);
+ m_ay2->data_w(m_porta1);
break;
case 3: // BDIR=1, BC1=1 (latch)
if (BIT(chip_sel, 0))
- m_ay1->write_address(m_porta1);
+ m_ay1->address_w(m_porta1);
if (BIT(chip_sel, 1))
- m_ay2->write_address(m_porta1);
+ m_ay2->address_w(m_porta1);
break;
}
}
@@ -320,7 +320,7 @@ WRITE8_MEMBER( a2bus_ayboard_device::via2_out_b )
{
if (!BIT(data, 2))
{
- m_ay2->reset_w(space, 0, 0);
+ m_ay2->reset_w();
}
else
{
@@ -330,15 +330,15 @@ WRITE8_MEMBER( a2bus_ayboard_device::via2_out_b )
break;
case 1: // BDIR=0, BC1=1 (read PSG)
- m_porta2 = m_ay2->read_data();
+ m_porta2 = m_ay2->data_r();
break;
case 2: // BDIR=1, BC1=0 (write PSG)
- m_ay2->write_data(m_porta2);
+ m_ay2->data_w(m_porta2);
break;
case 3: // BDIR=1, BC1=1 (latch)
- m_ay2->write_data(m_porta2);
+ m_ay2->data_w(m_porta2);
break;
}
}
@@ -350,12 +350,12 @@ WRITE8_MEMBER( a2bus_phasor_device::via2_out_b )
{
if (m_native)
{
- m_ay3->reset_w(space, 0, 0);
- m_ay4->reset_w(space, 0, 0);
+ m_ay3->reset_w();
+ m_ay4->reset_w();
}
else
{
- m_ay2->reset_w(space, 0, 0);
+ m_ay2->reset_w();
}
}
else
@@ -375,23 +375,23 @@ WRITE8_MEMBER( a2bus_phasor_device::via2_out_b )
case 1: // BDIR=0, BC1=1 (read PSG)
if (BIT(chip_sel, 0))
- m_porta2 = m_ay3->read_data();
+ m_porta2 = m_ay3->data_r();
if (BIT(chip_sel, 1))
- m_porta2 = m_ay4->read_data();
+ m_porta2 = m_ay4->data_r();
break;
case 2: // BDIR=1, BC1=0 (write PSG)
if (BIT(chip_sel, 0))
- m_ay3->write_data(m_porta2);
+ m_ay3->data_w(m_porta2);
if (BIT(chip_sel, 1))
- m_ay4->write_data(m_porta2);
+ m_ay4->data_w(m_porta2);
break;
case 3: // BDIR=1, BC1=1 (latch)
if (BIT(chip_sel, 0))
- m_ay3->write_address(m_porta2);
+ m_ay3->address_w(m_porta2);
if (BIT(chip_sel, 1))
- m_ay4->write_address(m_porta2);
+ m_ay4->address_w(m_porta2);
break;
}
}
diff --git a/src/devices/bus/a2bus/a2pic.cpp b/src/devices/bus/a2bus/a2pic.cpp
index 218d3ac6892..21c749eb50c 100644
--- a/src/devices/bus/a2bus/a2pic.cpp
+++ b/src/devices/bus/a2bus/a2pic.cpp
@@ -71,14 +71,16 @@ ioport_constructor a2bus_pic_device::device_input_ports() const
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(a2bus_pic_device::device_add_mconfig)
+void a2bus_pic_device::device_add_mconfig(machine_config &config)
+{
CENTRONICS(config, m_ctx, centronics_devices, "printer");
m_ctx->set_data_input_buffer(m_ctx_data_in);
m_ctx->ack_handler().set(FUNC(a2bus_pic_device::ack_w));
INPUT_BUFFER(config, m_ctx_data_in);
- MCFG_CENTRONICS_OUTPUT_LATCH_ADD("ctx_data_out", PIC_CENTRONICS_TAG)
-MACHINE_CONFIG_END
+ OUTPUT_LATCH(config, m_ctx_data_out);
+ m_ctx->set_output_latch(*m_ctx_data_out);
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/a2bus/a2sam.cpp b/src/devices/bus/a2bus/a2sam.cpp
index 21ea8d1fdca..16b8b5affe8 100644
--- a/src/devices/bus/a2bus/a2sam.cpp
+++ b/src/devices/bus/a2bus/a2sam.cpp
@@ -31,12 +31,14 @@ DEFINE_DEVICE_TYPE(A2BUS_SAM, a2bus_sam_device, "a2sam", "Don't Ask Software S.A
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(a2bus_sam_device::device_add_mconfig)
+void a2bus_sam_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "speaker").front_center();
- MCFG_DEVICE_ADD("dac", DAC_8BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5) // unknown DAC
- MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
- MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT)
-MACHINE_CONFIG_END
+ DAC_8BIT_R2R(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.5); // unknown DAC
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
+ vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
+ vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
+}
//**************************************************************************
// LIVE DEVICE
diff --git a/src/devices/bus/a2bus/a2scsi.cpp b/src/devices/bus/a2bus/a2scsi.cpp
index ef3422e9783..014414e7e98 100644
--- a/src/devices/bus/a2bus/a2scsi.cpp
+++ b/src/devices/bus/a2bus/a2scsi.cpp
@@ -50,14 +50,6 @@ DEFINE_DEVICE_TYPE(A2BUS_SCSI, a2bus_scsi_device, "a2scsi", "Apple II SCSI Card"
#define SCSI_BUS_TAG "scsibus"
#define SCSI_5380_TAG "scsibus:7:ncr5380"
-void a2bus_scsi_device::ncr5380(device_t *device)
-{
- devcb_base *devcb;
- (void)devcb;
- MCFG_DEVICE_CLOCK(10000000)
- MCFG_NCR5380N_DRQ_HANDLER(WRITELINE("^^", a2bus_scsi_device, drq_w))
-}
-
static void scsi_devices(device_slot_interface &device)
{
device.option_add("cdrom", NSCSI_CDROM);
@@ -78,18 +70,21 @@ ROM_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(a2bus_scsi_device::device_add_mconfig)
- MCFG_NSCSI_BUS_ADD(SCSI_BUS_TAG)
- MCFG_NSCSI_ADD("scsibus:0", scsi_devices, nullptr, false)
- MCFG_NSCSI_ADD("scsibus:1", scsi_devices, nullptr, false)
- MCFG_NSCSI_ADD("scsibus:2", scsi_devices, nullptr, false)
- MCFG_NSCSI_ADD("scsibus:3", scsi_devices, nullptr, false)
- MCFG_NSCSI_ADD("scsibus:4", scsi_devices, nullptr, false)
- MCFG_NSCSI_ADD("scsibus:5", scsi_devices, nullptr, false)
- MCFG_NSCSI_ADD("scsibus:6", scsi_devices, "harddisk", false)
- MCFG_NSCSI_ADD("scsibus:7", scsi_devices, "ncr5380", true)
- MCFG_SLOT_OPTION_MACHINE_CONFIG("ncr5380", ncr5380)
-MACHINE_CONFIG_END
+void a2bus_scsi_device::device_add_mconfig(machine_config &config)
+{
+ NSCSI_BUS(config, m_scsibus);
+ NSCSI_CONNECTOR(config, "scsibus:0", scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsibus:1", scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsibus:2", scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsibus:3", scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsibus:4", scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsibus:5", scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsibus:6", scsi_devices, "harddisk", false);
+ NSCSI_CONNECTOR(config, "scsibus:7", scsi_devices, "ncr5380", true).set_option_machine_config("ncr5380", [this](device_t *device) {
+ device->set_clock(10000000);
+ downcast<ncr5380n_device &>(*device).drq_handler().set(*this, FUNC(a2bus_scsi_device::drq_w));
+ });
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
@@ -159,7 +154,7 @@ uint8_t a2bus_scsi_device::read_c0nx(uint8_t offset)
case 6:
case 7:
// logerror("Read 5380 @ %x\n", offset);
- return m_ncr5380->read(machine().dummy_space(), offset);
+ return m_ncr5380->read(offset);
case 8: // read and DACK
return m_ncr5380->dma_r();
@@ -199,7 +194,7 @@ void a2bus_scsi_device::write_c0nx(uint8_t offset, uint8_t data)
case 6:
case 7:
// logerror("%02x to 5380 reg %x\n", data, offset);
- m_ncr5380->write(machine().dummy_space(), offset, data);
+ m_ncr5380->write(offset, data);
break;
case 8: // write and DACK
diff --git a/src/devices/bus/a2bus/a2scsi.h b/src/devices/bus/a2bus/a2scsi.h
index d9d143da6e9..f1a556eeab7 100644
--- a/src/devices/bus/a2bus/a2scsi.h
+++ b/src/devices/bus/a2bus/a2scsi.h
@@ -30,8 +30,6 @@ public:
DECLARE_WRITE_LINE_MEMBER( drq_w );
- static void ncr5380(device_t *device);
-
protected:
a2bus_scsi_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
diff --git a/src/devices/bus/a2bus/a2softcard.cpp b/src/devices/bus/a2bus/a2softcard.cpp
index b8c71153e7b..d41c84b9425 100644
--- a/src/devices/bus/a2bus/a2softcard.cpp
+++ b/src/devices/bus/a2bus/a2softcard.cpp
@@ -82,7 +82,7 @@ void a2bus_softcard_device::write_cnxx(uint8_t offset, uint8_t data)
if (!m_bEnabled)
{
m_z80->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
- set_maincpu_halt(ASSERT_LINE);
+ raise_slot_dma();
if (m_FirstZ80Boot)
{
@@ -95,7 +95,7 @@ void a2bus_softcard_device::write_cnxx(uint8_t offset, uint8_t data)
else
{
m_z80->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
- set_maincpu_halt(CLEAR_LINE);
+ lower_slot_dma();
m_bEnabled = false;
}
}
@@ -106,27 +106,27 @@ READ8_MEMBER( a2bus_softcard_device::dma_r )
{
if (offset <= 0xafff)
{
- return slot_dma_read(space, offset+0x1000);
+ return slot_dma_read(offset+0x1000);
}
else if (offset <= 0xbfff) // LC bank 2 d000-dfff
{
- return slot_dma_read(space, (offset&0xfff) + 0xd000);
+ return slot_dma_read((offset&0xfff) + 0xd000);
}
else if (offset <= 0xcfff) // LC e000-efff
{
- return slot_dma_read(space, (offset&0xfff) + 0xe000);
+ return slot_dma_read((offset&0xfff) + 0xe000);
}
else if (offset <= 0xdfff) // LC f000-ffff (or ROM?)
{
- return slot_dma_read(space, (offset&0xfff) + 0xf000);
+ return slot_dma_read((offset&0xfff) + 0xf000);
}
else if (offset <= 0xefff) // I/O space c000-cfff
{
- return slot_dma_read(space, (offset&0xfff) + 0xc000);
+ return slot_dma_read((offset&0xfff) + 0xc000);
}
else // zero page
{
- return slot_dma_read(space, offset&0xfff);
+ return slot_dma_read(offset&0xfff);
}
}
@@ -144,27 +144,27 @@ WRITE8_MEMBER( a2bus_softcard_device::dma_w )
{
if (offset <= 0xafff)
{
- slot_dma_write(space, offset+0x1000, data);
+ slot_dma_write(offset+0x1000, data);
}
else if (offset <= 0xbfff) // LC bank 2 d000-dfff
{
- slot_dma_write(space, (offset&0xfff) + 0xd000, data);
+ slot_dma_write((offset&0xfff) + 0xd000, data);
}
else if (offset <= 0xcfff) // LC e000-efff
{
- slot_dma_write(space, (offset&0xfff) + 0xe000, data);
+ slot_dma_write((offset&0xfff) + 0xe000, data);
}
else if (offset <= 0xdfff) // LC f000-ffff (or ROM?)
{
- slot_dma_write(space, (offset&0xfff) + 0xf000, data);
+ slot_dma_write((offset&0xfff) + 0xf000, data);
}
else if (offset <= 0xefff) // I/O space c000-cfff
{
- slot_dma_write(space, (offset&0xfff) + 0xc000, data);
+ slot_dma_write((offset&0xfff) + 0xc000, data);
}
else // zero page
{
- slot_dma_write(space, offset&0xfff, data);
+ slot_dma_write(offset&0xfff, data);
}
}
}
diff --git a/src/devices/bus/a2bus/a2ssc.cpp b/src/devices/bus/a2bus/a2ssc.cpp
index 0261835e1d7..773f4db246f 100644
--- a/src/devices/bus/a2bus/a2ssc.cpp
+++ b/src/devices/bus/a2bus/a2ssc.cpp
@@ -189,7 +189,7 @@ uint8_t a2bus_ssc_device::read_c0nx(uint8_t offset)
case 9:
case 0xa:
case 0xb:
- return m_acia->read(machine().dummy_space(), offset-8);
+ return m_acia->read(offset-8);
}
@@ -208,7 +208,7 @@ void a2bus_ssc_device::write_c0nx(uint8_t offset, uint8_t data)
case 9:
case 0xa:
case 0xb:
- m_acia->write(machine().dummy_space(), offset-8, data);
+ m_acia->write(offset-8, data);
break;
}
}
diff --git a/src/devices/bus/a2bus/a2themill.cpp b/src/devices/bus/a2bus/a2themill.cpp
index effa5ac9cfb..14474662ef8 100644
--- a/src/devices/bus/a2bus/a2themill.cpp
+++ b/src/devices/bus/a2bus/a2themill.cpp
@@ -238,34 +238,34 @@ READ8_MEMBER( a2bus_themill_device::dma_r )
{
if (offset <= 0x7fff)
{
- return slot_dma_read(space, offset+0x1000);
+ return slot_dma_read(offset+0x1000);
}
else if (offset <= 0xafff)
{
- return slot_dma_read(space, (offset&0x3fff) + 0xd000);
+ return slot_dma_read((offset&0x3fff) + 0xd000);
}
else if (offset <= 0xbfff)
{
- return slot_dma_read(space, (offset&0xfff) + 0xc000);
+ return slot_dma_read((offset&0xfff) + 0xc000);
}
else if (offset <= 0xcfff) // 6809 Cxxx -> 6502 ZP
{
- return slot_dma_read(space, (offset&0xfff));
+ return slot_dma_read((offset&0xfff));
}
else // 6809 Dxxx -> 6502 9000
{
- return slot_dma_read(space, (offset-0xd000)+0x9000);
+ return slot_dma_read((offset-0xd000)+0x9000);
}
}
else
{
if (m_flipAddrSpace)
{
- return slot_dma_read(space, offset^0x8000);
+ return slot_dma_read(offset^0x8000);
}
else
{
- return slot_dma_read(space, offset);
+ return slot_dma_read(offset);
}
}
@@ -283,34 +283,34 @@ WRITE8_MEMBER( a2bus_themill_device::dma_w )
{
if (offset <= 0x7fff)
{
- slot_dma_write(space, offset+0x1000, data);
+ slot_dma_write(offset+0x1000, data);
}
else if (offset <= 0xafff)
{
- slot_dma_write(space, (offset&0x3fff) + 0xd000, data);
+ slot_dma_write((offset&0x3fff) + 0xd000, data);
}
else if (offset <= 0xbfff)
{
- slot_dma_write(space, (offset&0xfff) + 0xc000, data);
+ slot_dma_write((offset&0xfff) + 0xc000, data);
}
else if (offset <= 0xcfff)
{
- slot_dma_write(space, (offset&0xfff), data);
+ slot_dma_write((offset&0xfff), data);
}
else // 6809 Dxxx -> 6502 9000
{
- slot_dma_write(space, (offset-0xd000)+0x9000, data);
+ slot_dma_write((offset-0xd000)+0x9000, data);
}
}
else
{
if (m_flipAddrSpace)
{
- slot_dma_write(space, offset^0x8000, data);
+ slot_dma_write(offset^0x8000, data);
}
else
{
- slot_dma_write(space, offset, data);
+ slot_dma_write(offset, data);
}
}
}
diff --git a/src/devices/bus/a2bus/a2ultraterm.cpp b/src/devices/bus/a2bus/a2ultraterm.cpp
index 9ea36ea2496..fd8fb2a895a 100644
--- a/src/devices/bus/a2bus/a2ultraterm.cpp
+++ b/src/devices/bus/a2bus/a2ultraterm.cpp
@@ -104,10 +104,11 @@ ROM_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(a2bus_videx160_device::device_add_mconfig)
- MCFG_SCREEN_ADD( ULTRATERM_SCREEN_NAME, RASTER)
- MCFG_SCREEN_RAW_PARAMS(CLOCK_LOW, 882, 0, 720, 370, 0, 350 )
- MCFG_SCREEN_UPDATE_DEVICE( ULTRATERM_MC6845_NAME, mc6845_device, screen_update )
+void a2bus_videx160_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, ULTRATERM_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_raw(CLOCK_LOW, 882, 0, 720, 370, 0, 350);
+ screen.set_screen_update(ULTRATERM_MC6845_NAME, FUNC(mc6845_device::screen_update));
MC6845(config, m_crtc, CLOCK_LOW/9);
m_crtc->set_screen(ULTRATERM_SCREEN_NAME);
@@ -115,7 +116,7 @@ MACHINE_CONFIG_START(a2bus_videx160_device::device_add_mconfig)
m_crtc->set_char_width(8);
m_crtc->set_update_row_callback(FUNC(a2bus_videx160_device::crtc_update_row), this);
m_crtc->out_vsync_callback().set(FUNC(a2bus_videx160_device::vsync_changed));
-MACHINE_CONFIG_END
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
@@ -194,7 +195,7 @@ uint8_t a2bus_videx160_device::read_c0nx(uint8_t offset)
switch (offset)
{
case 1:
- return m_crtc->read_register(); // status_r?
+ return m_crtc->register_r(); // status_r?
case 2:
return m_ctrl1;
@@ -218,11 +219,11 @@ void a2bus_videx160_device::write_c0nx(uint8_t offset, uint8_t data)
switch (offset)
{
case 0:
- m_crtc->write_address(data);
+ m_crtc->address_w(data);
break;
case 1:
- m_crtc->write_register(data);
+ m_crtc->register_w(data);
break;
case 2:
diff --git a/src/devices/bus/a2bus/a2videoterm.cpp b/src/devices/bus/a2bus/a2videoterm.cpp
index 519496b1b1b..35cb657afd9 100644
--- a/src/devices/bus/a2bus/a2videoterm.cpp
+++ b/src/devices/bus/a2bus/a2videoterm.cpp
@@ -117,10 +117,11 @@ ROM_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(a2bus_videx80_device::device_add_mconfig)
- MCFG_SCREEN_ADD( VIDEOTERM_SCREEN_NAME, RASTER) // 560x216? (80x24 7x9 characters)
- MCFG_SCREEN_RAW_PARAMS(MDA_CLOCK, 882, 0, 720, 370, 0, 350 )
- MCFG_SCREEN_UPDATE_DEVICE( VIDEOTERM_MC6845_NAME, mc6845_device, screen_update )
+void a2bus_videx80_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, VIDEOTERM_SCREEN_NAME, SCREEN_TYPE_RASTER)); // 560x216? (80x24 7x9 characters)
+ screen.set_raw(MDA_CLOCK, 882, 0, 720, 370, 0, 350);
+ screen.set_screen_update(VIDEOTERM_MC6845_NAME, FUNC(mc6845_device::screen_update));
MC6845(config, m_crtc, MDA_CLOCK/9);
m_crtc->set_screen(VIDEOTERM_SCREEN_NAME);
@@ -128,7 +129,7 @@ MACHINE_CONFIG_START(a2bus_videx80_device::device_add_mconfig)
m_crtc->set_char_width(8);
m_crtc->set_update_row_callback(FUNC(a2bus_videx80_device::crtc_update_row), this);
m_crtc->out_vsync_callback().set(FUNC(a2bus_videx80_device::vsync_changed));
-MACHINE_CONFIG_END
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
@@ -240,7 +241,7 @@ uint8_t a2bus_videx80_device::read_c0nx(uint8_t offset)
if (offset == 1)
{
- return m_crtc->read_register(); // status_r?
+ return m_crtc->register_r(); // status_r?
}
return 0xff;
@@ -255,11 +256,11 @@ void a2bus_videx80_device::write_c0nx(uint8_t offset, uint8_t data)
{
if (offset == 0)
{
- m_crtc->write_address(data);
+ m_crtc->address_w(data);
}
else if (offset == 1)
{
- m_crtc->write_register(data);
+ m_crtc->register_w(data);
}
m_rambank = ((offset>>2) & 3) * 512;
diff --git a/src/devices/bus/a2bus/a2zipdrive.cpp b/src/devices/bus/a2bus/a2zipdrive.cpp
index aaeb6ed6219..41034fab231 100644
--- a/src/devices/bus/a2bus/a2zipdrive.cpp
+++ b/src/devices/bus/a2bus/a2zipdrive.cpp
@@ -2,16 +2,19 @@
// copyright-holders:R. Belmont
/*********************************************************************
- a2zipdrive.c
+ a2zipdrive.cpp
ZIP Technologies ZipDrive IDE card
+ Parsons Engineering Focus Drive IDE card
- NOTE: No known dump exists of the formatter utility and the
+ These cards are very, very similar. Maybe Parsons designed both?
+
+ NOTE: No known dump exists of the Zip formatter utility and the
format of the custom partition record (block 0) that the card
expects has not yet been determined, so this is largely untested
and will work only with a drive dump from real h/w.
- PLEASE use it only on a backup copy of said dump and contact MESSdev
+ PLEASE use it only on a backup copy of said dump and contact MAMEdev
if you have one!
Partition block format:
@@ -29,6 +32,7 @@
//**************************************************************************
DEFINE_DEVICE_TYPE(A2BUS_ZIPDRIVE, a2bus_zipdrive_device, "a2zipdrv", "Zip Technologies ZipDrive")
+DEFINE_DEVICE_TYPE(A2BUS_FOCUSDRIVE, a2bus_focusdrive_device, "a2focdrv", "Parsons Engineering Focus Drive")
#define ZIPDRIVE_ROM_REGION "zipdrive_rom"
#define ZIPDRIVE_ATA_TAG "zipdrive_ata"
@@ -38,6 +42,11 @@ ROM_START( zipdrive )
ROM_LOAD( "zip drive - rom.bin", 0x000000, 0x002000, CRC(fd800a40) SHA1(46636bfed88c864139e3d2826661908a8c07c459) )
ROM_END
+ROM_START( focusdrive )
+ ROM_REGION(0x2000, ZIPDRIVE_ROM_REGION, 0)
+ ROM_LOAD( "focusrom.bin", 0x001000, 0x001000, CRC(0fd0ba25) SHA1(acf414aa145fcfa1c12aca0269f1f7ada82f1c04) )
+ROM_END
+
/***************************************************************************
FUNCTION PROTOTYPES
***************************************************************************/
@@ -60,6 +69,11 @@ const tiny_rom_entry *a2bus_zipdrivebase_device::device_rom_region() const
return ROM_NAME( zipdrive );
}
+const tiny_rom_entry *a2bus_focusdrive_device::device_rom_region() const
+{
+ return ROM_NAME( focusdrive );
+}
+
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
@@ -76,6 +90,11 @@ a2bus_zipdrive_device::a2bus_zipdrive_device(const machine_config &mconfig, cons
{
}
+a2bus_focusdrive_device::a2bus_focusdrive_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ a2bus_zipdrivebase_device(mconfig, A2BUS_FOCUSDRIVE, tag, owner, clock)
+{
+}
+
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -89,9 +108,12 @@ void a2bus_zipdrivebase_device::device_start()
void a2bus_zipdrivebase_device::device_reset()
{
- popmessage("Zip Drive partition format unknown, contact MESSdev if you have the software or a drive dump!");
}
+void a2bus_focusdrive_device::device_reset()
+{
+ m_rom[0x1c6c] = 0x03; // eat 3 IDE words here instead of 1, fixes a bug? in the original ROM
+}
/*-------------------------------------------------
read_c0nx - called for reads from this card's c0nx space
@@ -112,7 +134,7 @@ uint8_t a2bus_zipdrivebase_device::read_c0nx(uint8_t offset)
return m_ata->read_cs0(offset, 0xff);
case 8: // data port
- m_lastdata = m_ata->read_cs0(offset);
+ m_lastdata = m_ata->read_cs0(offset, 0xffff);
// printf("%04x @ IDE data\n", m_lastdata);
return m_lastdata&0xff;
@@ -120,13 +142,42 @@ uint8_t a2bus_zipdrivebase_device::read_c0nx(uint8_t offset)
return (m_lastdata>>8) & 0xff;
default:
- logerror("a2zipdrive: unhandled read @ C0n%x\n", offset);
+ logerror("unhandled read @ C0n%x\n", offset);
break;
}
return 0xff;
}
+uint8_t a2bus_focusdrive_device::read_c0nx(uint8_t offset)
+{
+ switch (offset)
+ {
+ case 8:
+ case 9:
+ case 0xa:
+ case 0xb:
+ case 0xc:
+ case 0xd:
+ case 0xe:
+ case 0xf:
+ return m_ata->read_cs0(offset&7, 0xff);
+
+ case 0: // data port
+ m_lastdata = m_ata->read_cs0(offset, 0xffff);
+ //printf("%04x @ IDE data\n", m_lastdata);
+ return m_lastdata&0xff;
+
+ case 1:
+ return (m_lastdata>>8) & 0xff;
+
+ default:
+ logerror("unhandled read @ C0n%x\n", offset);
+ break;
+ }
+
+ return 0xff;
+}
/*-------------------------------------------------
write_c0nx - called for writes to this card's c0nx space
@@ -157,7 +208,7 @@ void a2bus_zipdrivebase_device::write_c0nx(uint8_t offset, uint8_t data)
// printf("%02x to IDE data hi\n", data);
m_lastdata &= 0x00ff;
m_lastdata |= (data << 8);
- m_ata->write_cs0(0, m_lastdata);
+ m_ata->write_cs0(0, m_lastdata, 0xffff);
break;
default:
@@ -166,6 +217,48 @@ void a2bus_zipdrivebase_device::write_c0nx(uint8_t offset, uint8_t data)
}
}
+void a2bus_focusdrive_device::write_c0nx(uint8_t offset, uint8_t data)
+{
+ switch (offset)
+ {
+ case 8:
+ case 9:
+ case 0xa:
+ case 0xb:
+ case 0xc:
+ case 0xd:
+ case 0xe:
+ case 0xf:
+ // due to a bug in the 6502 firmware, eat data if DRQ is set
+ #if 0
+ while (m_ata->read_cs0(7, 0xff) & 0x08)
+ {
+ m_ata->read_cs0(0, 0xffff);
+ printf("eating 2 bytes to clear DRQ\n");
+ }
+ #endif
+// printf("%02x to IDE controller @ %x\n", data, offset);
+ m_ata->write_cs0(offset & 7, data, 0xff);
+ break;
+
+ case 0:
+// printf("%02x to IDE data lo\n", data);
+ m_lastdata = data;
+ break;
+
+ case 1:
+// printf("%02x to IDE data hi\n", data);
+ m_lastdata &= 0x00ff;
+ m_lastdata |= (data << 8);
+ m_ata->write_cs0(0, m_lastdata, 0xffff);
+ break;
+
+ default:
+ printf("focus: write %02x @ unhandled C0n%x\n", data, offset);
+ break;
+ }
+}
+
/*-------------------------------------------------
read_cnxx - called for reads from this card's cnxx space
-------------------------------------------------*/
diff --git a/src/devices/bus/a2bus/a2zipdrive.h b/src/devices/bus/a2bus/a2zipdrive.h
index 8187e04cdd2..9e3e68e79f2 100644
--- a/src/devices/bus/a2bus/a2zipdrive.h
+++ b/src/devices/bus/a2bus/a2zipdrive.h
@@ -5,8 +5,9 @@
a2zipdrive.h
ZIP Technologies ZipDrive IDE card
+ Parsons Engineering Focus Drive IDE card
- See important NOTE at the top of a2zipdrive.c!
+ See important NOTE at the top of a2zipdrive.cpp!
*********************************************************************/
@@ -44,8 +45,6 @@ protected:
required_device<ata_interface_device> m_ata;
uint8_t *m_rom;
-
-private:
uint16_t m_lastdata;
};
@@ -55,7 +54,20 @@ public:
a2bus_zipdrive_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
};
+class a2bus_focusdrive_device : public a2bus_zipdrivebase_device
+{
+public:
+ a2bus_focusdrive_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ virtual void device_reset() override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+ virtual uint8_t read_c0nx(uint8_t offset) override;
+ virtual void write_c0nx(uint8_t offset, uint8_t data) override;
+};
+
// device type definition
DECLARE_DEVICE_TYPE(A2BUS_ZIPDRIVE, a2bus_zipdrive_device)
+DECLARE_DEVICE_TYPE(A2BUS_FOCUSDRIVE, a2bus_focusdrive_device)
#endif // MAME_BUS_A2BUS_ZIPDRIVE_H
diff --git a/src/devices/bus/a2bus/agat7ports.cpp b/src/devices/bus/a2bus/agat7ports.cpp
index d7c12ad81d9..5c24d8fac8f 100644
--- a/src/devices/bus/a2bus/agat7ports.cpp
+++ b/src/devices/bus/a2bus/agat7ports.cpp
@@ -51,18 +51,20 @@ INPUT_PORTS_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(a2bus_agat7_ports_device::device_add_mconfig)
+void a2bus_agat7_ports_device::device_add_mconfig(machine_config &config)
+{
I8255(config, m_d9);
m_d9->out_pa_callback().set("cent_data_out", FUNC(output_latch_device::bus_w));
m_d9->out_pb_callback().set(FUNC(a2bus_agat7_ports_device::write_portb));
m_d9->in_pc_callback().set(FUNC(a2bus_agat7_ports_device::read_portc));
- MCFG_DEVICE_ADD(m_centronics, CENTRONICS, centronics_devices, "printer")
- MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(*this, a2bus_agat7_ports_device, write_centronics_busy))
- MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
+ CENTRONICS(config, m_centronics, centronics_devices, "printer");
+ m_centronics->busy_handler().set(FUNC(a2bus_agat7_ports_device::write_centronics_busy));
+ output_latch_device &cent_data_out(OUTPUT_LATCH(config, "cent_data_out"));
+ m_centronics->set_output_latch(cent_data_out);
I8251(config, m_d10, 0);
-MACHINE_CONFIG_END
+}
//-------------------------------------------------
// input_ports - device-specific input ports
diff --git a/src/devices/bus/a2bus/agat840k_hle.cpp b/src/devices/bus/a2bus/agat840k_hle.cpp
index 3571513b7d5..c95d66a09e9 100644
--- a/src/devices/bus/a2bus/agat840k_hle.cpp
+++ b/src/devices/bus/a2bus/agat840k_hle.cpp
@@ -51,13 +51,12 @@ static const floppy_interface agat840k_hle_floppy_interface =
"floppy_5_25"
};
-MACHINE_CONFIG_START(a2bus_agat840k_hle_device::device_add_mconfig)
- MCFG_DEVICE_ADD(FLOPPY_0, LEGACY_FLOPPY, 0)
- MCFG_LEGACY_FLOPPY_CONFIG(agat840k_hle_floppy_interface)
- MCFG_LEGACY_FLOPPY_IDX_CB(WRITELINE(*this, a2bus_agat840k_hle_device, index_0_w))
- MCFG_DEVICE_ADD(FLOPPY_1, LEGACY_FLOPPY, 0)
- MCFG_LEGACY_FLOPPY_CONFIG(agat840k_hle_floppy_interface)
- MCFG_LEGACY_FLOPPY_IDX_CB(WRITELINE(*this, a2bus_agat840k_hle_device, index_1_w))
+void a2bus_agat840k_hle_device::device_add_mconfig(machine_config &config)
+{
+ legacy_floppy_image_device &floppy0(LEGACY_FLOPPY(config, FLOPPY_0, 0, &agat840k_hle_floppy_interface));
+ floppy0.out_idx_cb().set(FUNC(a2bus_agat840k_hle_device::index_0_w));
+ legacy_floppy_image_device &floppy1(LEGACY_FLOPPY(config, FLOPPY_1, 0, &agat840k_hle_floppy_interface));
+ floppy1.out_idx_cb().set(FUNC(a2bus_agat840k_hle_device::index_1_w));
I8255(config, m_d14);
// PA not connected
@@ -69,7 +68,7 @@ MACHINE_CONFIG_START(a2bus_agat840k_hle_device::device_add_mconfig)
// m_d15->out_pb_callback().set(FUNC(a2bus_agat840k_hle_device::d15_o_b)); // write data
m_d15->in_pc_callback().set(FUNC(a2bus_agat840k_hle_device::d15_i_c));
m_d15->out_pc_callback().set(FUNC(a2bus_agat840k_hle_device::d15_o_c));
-MACHINE_CONFIG_END
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/a2bus/corvfdc02.cpp b/src/devices/bus/a2bus/corvfdc02.cpp
index 7d4bc6ed785..36f5dbbd09c 100644
--- a/src/devices/bus/a2bus/corvfdc02.cpp
+++ b/src/devices/bus/a2bus/corvfdc02.cpp
@@ -132,10 +132,10 @@ uint8_t a2bus_corvfdc02_device::read_c0nx(uint8_t offset)
switch (offset)
{
case 0: // 765 FIFO
- return m_fdc->read_fifo();
+ return m_fdc->fifo_r();
case 1: // 765 MSR
- return m_fdc->read_msr();
+ return m_fdc->msr_r();
case 2: // buffer address
return (m_bufptr>>1) & 0xff;
@@ -170,7 +170,7 @@ void a2bus_corvfdc02_device::write_c0nx(uint8_t offset, uint8_t data)
switch (offset)
{
case 0: // FDC FIFO write
- m_fdc->write_fifo(data);
+ m_fdc->fifo_w(data);
break;
case 1: // FDC ???
diff --git a/src/devices/bus/a2bus/ezcgi.cpp b/src/devices/bus/a2bus/ezcgi.cpp
index ec9dce1cad4..a9bc648f08e 100644
--- a/src/devices/bus/a2bus/ezcgi.cpp
+++ b/src/devices/bus/a2bus/ezcgi.cpp
@@ -48,33 +48,35 @@ void a2bus_ezcgi_device::device_add_mconfig(machine_config &config)
SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER);
}
-MACHINE_CONFIG_START(a2bus_ezcgi_9938_device::device_add_mconfig)
+void a2bus_ezcgi_9938_device::device_add_mconfig(machine_config &config)
+{
V9938(config, m_tms, XTAL(21'477'272)); // typical 9938 clock, not verified
m_tms->set_vram_size(0x30000); // 192K of VRAM
m_tms->set_screen(SCREEN_TAG);
m_tms->int_cb().set(FUNC(a2bus_ezcgi_9938_device::tms_irq_w));
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(MSX2_TOTAL_XRES_PIXELS, 262*2)
- MCFG_SCREEN_VISIBLE_AREA(MSX2_XBORDER_PIXELS - MSX2_VISIBLE_XBORDER_PIXELS, MSX2_TOTAL_XRES_PIXELS - MSX2_XBORDER_PIXELS + MSX2_VISIBLE_XBORDER_PIXELS - 1, MSX2_YBORDER_PIXELS - MSX2_VISIBLE_YBORDER_PIXELS, MSX2_TOTAL_YRES_PIXELS - MSX2_YBORDER_PIXELS + MSX2_VISIBLE_YBORDER_PIXELS - 1)
-MACHINE_CONFIG_END
+ screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER));
+ screen.set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_size(MSX2_TOTAL_XRES_PIXELS, 262*2);
+ screen.set_visarea(MSX2_XBORDER_PIXELS - MSX2_VISIBLE_XBORDER_PIXELS, MSX2_TOTAL_XRES_PIXELS - MSX2_XBORDER_PIXELS + MSX2_VISIBLE_XBORDER_PIXELS - 1, MSX2_YBORDER_PIXELS - MSX2_VISIBLE_YBORDER_PIXELS, MSX2_TOTAL_YRES_PIXELS - MSX2_YBORDER_PIXELS + MSX2_VISIBLE_YBORDER_PIXELS - 1);
+}
-MACHINE_CONFIG_START(a2bus_ezcgi_9958_device::device_add_mconfig)
+void a2bus_ezcgi_9958_device::device_add_mconfig(machine_config &config)
+{
V9958(config, m_tms, XTAL(21'477'272)); // typical 9938/9958 clock, not verified
m_tms->set_vram_size(0x30000); // 192K of VRAM
m_tms->set_screen(SCREEN_TAG);
m_tms->int_cb().set(FUNC(a2bus_ezcgi_9958_device::tms_irq_w));
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(MSX2_TOTAL_XRES_PIXELS, 262*2)
- MCFG_SCREEN_VISIBLE_AREA(MSX2_XBORDER_PIXELS - MSX2_VISIBLE_XBORDER_PIXELS, MSX2_TOTAL_XRES_PIXELS - MSX2_XBORDER_PIXELS + MSX2_VISIBLE_XBORDER_PIXELS - 1, MSX2_YBORDER_PIXELS - MSX2_VISIBLE_YBORDER_PIXELS, MSX2_TOTAL_YRES_PIXELS - MSX2_YBORDER_PIXELS + MSX2_VISIBLE_YBORDER_PIXELS - 1)
-MACHINE_CONFIG_END
+ screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER));
+ screen.set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_size(MSX2_TOTAL_XRES_PIXELS, 262*2);
+ screen.set_visarea(MSX2_XBORDER_PIXELS - MSX2_VISIBLE_XBORDER_PIXELS, MSX2_TOTAL_XRES_PIXELS - MSX2_XBORDER_PIXELS + MSX2_VISIBLE_XBORDER_PIXELS - 1, MSX2_YBORDER_PIXELS - MSX2_VISIBLE_YBORDER_PIXELS, MSX2_TOTAL_YRES_PIXELS - MSX2_YBORDER_PIXELS + MSX2_VISIBLE_YBORDER_PIXELS - 1);
+}
//**************************************************************************
// LIVE DEVICE
diff --git a/src/devices/bus/a2bus/laser128.cpp b/src/devices/bus/a2bus/laser128.cpp
index dc7ae4fea21..e0c7626aa93 100644
--- a/src/devices/bus/a2bus/laser128.cpp
+++ b/src/devices/bus/a2bus/laser128.cpp
@@ -32,8 +32,9 @@ DEFINE_DEVICE_TYPE(A2BUS_LASER128, a2bus_laser128_device, "a2laser128", "VTech L
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(a2bus_laser128_device::device_add_mconfig)
-MACHINE_CONFIG_END
+void a2bus_laser128_device::device_add_mconfig(machine_config &config)
+{
+}
//**************************************************************************
// LIVE DEVICE
diff --git a/src/devices/bus/a2bus/mouse.cpp b/src/devices/bus/a2bus/mouse.cpp
index e95bb6f019a..a960c74e52c 100644
--- a/src/devices/bus/a2bus/mouse.cpp
+++ b/src/devices/bus/a2bus/mouse.cpp
@@ -203,7 +203,7 @@ void a2bus_mouse_device::device_reset()
uint8_t a2bus_mouse_device::read_c0nx(uint8_t offset)
{
- return m_pia->reg_r(offset & 3);
+ return m_pia->read(offset & 3);
}
/*-------------------------------------------------
@@ -212,7 +212,7 @@ uint8_t a2bus_mouse_device::read_c0nx(uint8_t offset)
void a2bus_mouse_device::write_c0nx(uint8_t offset, uint8_t data)
{
- m_pia->reg_w(offset & 3, data);
+ m_pia->write(offset & 3, data);
}
/*-------------------------------------------------
diff --git a/src/devices/bus/a2bus/pc_xporter.cpp b/src/devices/bus/a2bus/pc_xporter.cpp
index 6334463533b..305da9aa868 100644
--- a/src/devices/bus/a2bus/pc_xporter.cpp
+++ b/src/devices/bus/a2bus/pc_xporter.cpp
@@ -115,14 +115,15 @@ void a2bus_pcxporter_device::pc_io(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(a2bus_pcxporter_device::device_add_mconfig)
- MCFG_DEVICE_ADD(m_v30, V30, A2BUS_7M_CLOCK) // 7.16 MHz as per manual
- MCFG_DEVICE_PROGRAM_MAP(pc_map)
- MCFG_DEVICE_IO_MAP(pc_io)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("pic8259", pic8259_device, inta_cb)
- MCFG_DEVICE_DISABLE()
-
- PIT8253(config, m_pit8253, 0);
+void a2bus_pcxporter_device::device_add_mconfig(machine_config &config)
+{
+ V30(config, m_v30, A2BUS_7M_CLOCK); // 7.16 MHz as per manual
+ m_v30->set_addrmap(AS_PROGRAM, &a2bus_pcxporter_device::pc_map);
+ m_v30->set_addrmap(AS_IO, &a2bus_pcxporter_device::pc_io);
+ m_v30->set_irq_acknowledge_callback("pic8259", FUNC(pic8259_device::inta_cb));
+ m_v30->set_disable();
+
+ PIT8253(config, m_pit8253);
m_pit8253->set_clk<0>(A2BUS_7M_CLOCK / 6.0); // heartbeat IRQ
m_pit8253->out_handler<0>().set(m_pic8259, FUNC(pic8259_device::ir0_w));
m_pit8253->set_clk<1>(A2BUS_7M_CLOCK / 6.0); // DRAM refresh
@@ -147,11 +148,12 @@ MACHINE_CONFIG_START(a2bus_pcxporter_device::device_add_mconfig)
m_dma8237->out_dack_callback<2>().set(FUNC(a2bus_pcxporter_device::pc_dack2_w));
m_dma8237->out_dack_callback<3>().set(FUNC(a2bus_pcxporter_device::pc_dack3_w));
- PIC8259(config, m_pic8259, 0);
+ PIC8259(config, m_pic8259);
m_pic8259->out_int_callback().set_inputline(m_v30, 0);
ISA8(config, m_isabus, 0);
- m_isabus->set_cputag(m_v30);
+ m_isabus->set_memspace(m_v30, AS_PROGRAM);
+ m_isabus->set_iospace(m_v30, AS_IO);
m_isabus->irq2_callback().set(m_pic8259, FUNC(pic8259_device::ir2_w));
m_isabus->irq3_callback().set(m_pic8259, FUNC(pic8259_device::ir3_w));
m_isabus->irq4_callback().set(m_pic8259, FUNC(pic8259_device::ir4_w));
@@ -162,18 +164,18 @@ MACHINE_CONFIG_START(a2bus_pcxporter_device::device_add_mconfig)
m_isabus->drq2_callback().set(m_dma8237, FUNC(am9517a_device::dreq2_w));
m_isabus->drq3_callback().set(m_dma8237, FUNC(am9517a_device::dreq3_w));
- MCFG_DEVICE_ADD(m_pc_kbdc, PC_KBDC, 0)
- MCFG_PC_KBDC_OUT_CLOCK_CB(WRITELINE(*this, a2bus_pcxporter_device, keyboard_clock_w))
- MCFG_PC_KBDC_OUT_DATA_CB(WRITELINE(*this, a2bus_pcxporter_device, keyboard_data_w))
- MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270)
+ PC_KBDC(config, m_pc_kbdc, 0);
+ m_pc_kbdc->out_clock_cb().set(FUNC(a2bus_pcxporter_device::keyboard_clock_w));
+ m_pc_kbdc->out_data_cb().set(FUNC(a2bus_pcxporter_device::keyboard_data_w));
+ PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270).set_pc_kbdc_slot(m_pc_kbdc);
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 1.00);
- MCFG_DEVICE_ADD("isa1", ISA8_SLOT, 0, m_isabus, pc_isa8_cards, "cga", true) // FIXME: determine ISA bus clock
- MCFG_DEVICE_ADD("isa2", ISA8_SLOT, 0, m_isabus, pc_isa8_cards, "fdc_xt", true)
-MACHINE_CONFIG_END
+ ISA8_SLOT(config, "isa1", 0, m_isabus, pc_isa8_cards, "cga", true); // FIXME: determine ISA bus clock
+ ISA8_SLOT(config, "isa2", 0, m_isabus, pc_isa8_cards, "fdc_xt", true);
+}
//**************************************************************************
// LIVE DEVICE
@@ -631,5 +633,12 @@ WRITE_LINE_MEMBER( a2bus_pcxporter_device::keyboard_data_w )
WRITE8_MEMBER( a2bus_pcxporter_device::nmi_enable_w )
{
m_nmi_enabled = BIT(data,7);
- m_isabus->set_nmi_state(m_nmi_enabled);
+ if (!m_nmi_enabled)
+ m_v30->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
+}
+
+WRITE_LINE_MEMBER( a2bus_pcxporter_device::iochck_w )
+{
+ if (m_nmi_enabled && !state)
+ m_v30->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
}
diff --git a/src/devices/bus/a2bus/pc_xporter.h b/src/devices/bus/a2bus/pc_xporter.h
index da9aecc6c6c..2a449ed4019 100644
--- a/src/devices/bus/a2bus/pc_xporter.h
+++ b/src/devices/bus/a2bus/pc_xporter.h
@@ -113,6 +113,7 @@ private:
DECLARE_WRITE8_MEMBER(pc_page_w);
DECLARE_WRITE8_MEMBER(nmi_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(iochck_w);
void pc_select_dma_channel(int channel, bool state);
diff --git a/src/devices/bus/a2bus/ssbapple.cpp b/src/devices/bus/a2bus/ssbapple.cpp
index bde53973c13..89165617867 100644
--- a/src/devices/bus/a2bus/ssbapple.cpp
+++ b/src/devices/bus/a2bus/ssbapple.cpp
@@ -34,11 +34,12 @@ DEFINE_DEVICE_TYPE(A2BUS_SSBAPPLE, a2bus_ssb_device, "a2ssbapl", "Multitech Indu
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(a2bus_ssb_device::device_add_mconfig)
+void a2bus_ssb_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "ssbapple").front_center();
- MCFG_DEVICE_ADD(TMS_TAG, TMS5220, 640000) // guess - this gives 8 kHz output according to the datasheet
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "ssbapple", 1.0)
-MACHINE_CONFIG_END
+ TMS5220(config, m_tms, 640000); // guess - this gives 8 kHz output according to the datasheet
+ m_tms->add_route(ALL_OUTPUTS, "ssbapple", 1.0);
+}
//**************************************************************************
// LIVE DEVICE
diff --git a/src/devices/bus/a2bus/ssprite.cpp b/src/devices/bus/a2bus/ssprite.cpp
index 818bde14b89..69e12dc98dd 100644
--- a/src/devices/bus/a2bus/ssprite.cpp
+++ b/src/devices/bus/a2bus/ssprite.cpp
@@ -104,7 +104,7 @@ uint8_t a2bus_ssprite_device::read_c0nx(uint8_t offset)
return 0x1f | m_tms5220->status_r();
case 14:
case 15:
- return m_ay->read_data();
+ return m_ay->data_r();
}
return 0xff;
@@ -125,11 +125,11 @@ void a2bus_ssprite_device::write_c0nx(uint8_t offset, uint8_t data)
break;
case 12:
case 13:
- m_ay->write_data(data);
+ m_ay->data_w(data);
break;
case 14:
case 15:
- m_ay->write_address(data);
+ m_ay->address_w(data);
break;
}
}
diff --git a/src/devices/bus/a2bus/timemasterho.cpp b/src/devices/bus/a2bus/timemasterho.cpp
index ad0e96f2ab3..6b7f0b1f5eb 100644
--- a/src/devices/bus/a2bus/timemasterho.cpp
+++ b/src/devices/bus/a2bus/timemasterho.cpp
@@ -157,7 +157,7 @@ uint8_t a2bus_timemasterho_device::read_c0nx(uint8_t offset)
{
if (offset <= 3)
{
- return m_pia->reg_r(offset);
+ return m_pia->read(offset);
}
return 0xff;
@@ -172,7 +172,7 @@ void a2bus_timemasterho_device::write_c0nx(uint8_t offset, uint8_t data)
{
if (offset <= 3)
{
- m_pia->reg_w(offset, data);
+ m_pia->write(offset, data);
}
}
diff --git a/src/devices/bus/a2bus/transwarp.cpp b/src/devices/bus/a2bus/transwarp.cpp
index 06557e28cb0..97e02eb8b4e 100644
--- a/src/devices/bus/a2bus/transwarp.cpp
+++ b/src/devices/bus/a2bus/transwarp.cpp
@@ -121,10 +121,11 @@ ioport_constructor a2bus_transwarp_device::device_input_ports() const
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(a2bus_transwarp_device::device_add_mconfig)
- MCFG_DEVICE_ADD(CPU_TAG, M65C02, A2BUS_7M_CLOCK / 2)
- MCFG_DEVICE_PROGRAM_MAP(m65c02_mem)
-MACHINE_CONFIG_END
+void a2bus_transwarp_device::device_add_mconfig(machine_config &config)
+{
+ M65C02(config, m_ourcpu, A2BUS_7M_CLOCK / 2);
+ m_ourcpu->set_addrmap(AS_PROGRAM, &a2bus_transwarp_device::m65c02_mem);
+}
//**************************************************************************
// LIVE DEVICE
@@ -161,7 +162,7 @@ void a2bus_transwarp_device::device_reset()
{
m_bEnabled = true;
m_bReadA2ROM = false;
- set_maincpu_halt(ASSERT_LINE);
+ raise_slot_dma();
if (!(m_dsw2->read() & 0x80))
{
if (m_dsw1->read() & 0x80)
@@ -189,6 +190,11 @@ void a2bus_transwarp_device::device_timer(emu_timer &timer, device_timer_id id,
READ8_MEMBER( a2bus_transwarp_device::dma_r )
{
+ if (offset == 0xc070)
+ {
+ hit_slot_joy();
+ }
+
if ((offset >= 0xc090) && (offset <= 0xc0ff))
{
hit_slot(((offset >> 4) & 0xf) - 8);
@@ -199,7 +205,7 @@ READ8_MEMBER( a2bus_transwarp_device::dma_r )
return m_rom[offset & 0xfff];
}
- return slot_dma_read(space, offset);
+ return slot_dma_read(offset);
}
@@ -211,6 +217,11 @@ WRITE8_MEMBER( a2bus_transwarp_device::dma_w )
{
//if ((offset >= 0xc070) && (offset <= 0xc07f)) printf("%02x to %04x\n", data, offset);
+ if (offset == 0xc070)
+ {
+ hit_slot_joy();
+ }
+
if (offset == 0xc072)
{
m_bReadA2ROM = true;
@@ -221,7 +232,7 @@ WRITE8_MEMBER( a2bus_transwarp_device::dma_w )
hit_slot(((offset >> 4) & 0xf) - 8);
}
- slot_dma_write(space, offset, data);
+ slot_dma_write(offset, data);
}
bool a2bus_transwarp_device::take_c800()
@@ -243,3 +254,15 @@ void a2bus_transwarp_device::hit_slot(int slot)
}
}
}
+
+void a2bus_transwarp_device::hit_slot_joy()
+{
+ // only do slot slowdown if acceleration is enabled
+ if (!(m_dsw2->read() & 0x80))
+ {
+ // accleration's on
+ m_ourcpu->set_unscaled_clock(1021800);
+ // PREAD main loop counts up to 11*256 uSec, add 1 to cover the setup
+ m_timer->adjust(attotime::from_usec(11*257));
+ }
+}
diff --git a/src/devices/bus/a2bus/transwarp.h b/src/devices/bus/a2bus/transwarp.h
index 8b42aefa7e5..e687ae6d350 100644
--- a/src/devices/bus/a2bus/transwarp.h
+++ b/src/devices/bus/a2bus/transwarp.h
@@ -54,6 +54,7 @@ private:
void m65c02_mem(address_map &map);
void hit_slot(int slot);
+ void hit_slot_joy();
};
// device type definition
diff --git a/src/devices/bus/a7800/cpuwiz.cpp b/src/devices/bus/a7800/cpuwiz.cpp
index 8c39f5bf001..0b76f7b2233 100644
--- a/src/devices/bus/a7800/cpuwiz.cpp
+++ b/src/devices/bus/a7800/cpuwiz.cpp
@@ -120,9 +120,9 @@ WRITE8_MEMBER(a78_megacart_device::write_40xx)
// VersaBoard + POKEY @ 0x0450
-MACHINE_CONFIG_START(a78_rom_p450_vb_device::device_add_mconfig)
+void a78_rom_p450_vb_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "addon").front_center();
- MCFG_DEVICE_ADD("pokey450", POKEY, XTAL(14'318'181)/8)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "addon", 1.00)
-MACHINE_CONFIG_END
+ POKEY(config, m_pokey450, XTAL(14'318'181)/8).add_route(ALL_OUTPUTS, "addon", 1.00);
+}
diff --git a/src/devices/bus/a7800/cpuwiz.h b/src/devices/bus/a7800/cpuwiz.h
index 1d9b33693d9..e9f52a24d4f 100644
--- a/src/devices/bus/a7800/cpuwiz.h
+++ b/src/devices/bus/a7800/cpuwiz.h
@@ -56,8 +56,8 @@ public:
a78_rom_p450_vb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_04xx) override { if (offset >= 0x50 && offset < 0x60) return m_pokey450->read(space, offset & 0x0f); else return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(write_04xx) override { if (offset >= 0x50 && offset < 0x60) m_pokey450->write(space, offset & 0x0f, data); }
+ virtual DECLARE_READ8_MEMBER(read_04xx) override { if (offset >= 0x50 && offset < 0x60) return m_pokey450->read(offset & 0x0f); else return 0xff; }
+ virtual DECLARE_WRITE8_MEMBER(write_04xx) override { if (offset >= 0x50 && offset < 0x60) m_pokey450->write(offset & 0x0f, data); }
protected:
virtual void device_add_mconfig(machine_config &config) override;
diff --git a/src/devices/bus/a7800/rom.cpp b/src/devices/bus/a7800/rom.cpp
index b40eea850c4..362902dbe51 100644
--- a/src/devices/bus/a7800/rom.cpp
+++ b/src/devices/bus/a7800/rom.cpp
@@ -229,7 +229,7 @@ READ8_MEMBER(a78_rom_device::read_40xx)
READ8_MEMBER(a78_rom_pokey_device::read_40xx)
{
if (offset < 0x4000)
- return m_pokey->read(space, offset & 0x0f);
+ return m_pokey->read(offset & 0x0f);
if (offset + 0x4000 < m_base_rom)
return 0xff;
@@ -240,16 +240,16 @@ READ8_MEMBER(a78_rom_pokey_device::read_40xx)
WRITE8_MEMBER(a78_rom_pokey_device::write_40xx)
{
if (offset < 0x4000)
- m_pokey->write(space, offset & 0x0f, data);
+ m_pokey->write(offset & 0x0f, data);
}
// TO DO: do we need a PAL variant?!?
-MACHINE_CONFIG_START(a78_rom_pokey_device::device_add_mconfig)
+void a78_rom_pokey_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "addon").front_center();
- MCFG_DEVICE_ADD("pokey", POKEY, XTAL(14'318'181)/8)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "addon", 1.00)
-MACHINE_CONFIG_END
+ POKEY(config, m_pokey, XTAL(14'318'181)/8).add_route(ALL_OUTPUTS, "addon", 1.00);
+}
/*-------------------------------------------------
@@ -327,7 +327,7 @@ WRITE8_MEMBER(a78_rom_sg_device::write_40xx)
READ8_MEMBER(a78_rom_sg_pokey_device::read_40xx)
{
if (offset < 0x4000)
- return m_pokey->read(space, offset & 0x0f);
+ return m_pokey->read(offset & 0x0f);
else if (offset < 0x8000)
return m_rom[(offset & 0x3fff) + (m_bank * 0x4000)];
else
@@ -337,17 +337,17 @@ READ8_MEMBER(a78_rom_sg_pokey_device::read_40xx)
WRITE8_MEMBER(a78_rom_sg_pokey_device::write_40xx)
{
if (offset < 0x4000)
- m_pokey->write(space, offset & 0x0f, data);
+ m_pokey->write(offset & 0x0f, data);
else if (offset < 0x8000)
m_bank = data & m_bank_mask;
}
-MACHINE_CONFIG_START(a78_rom_sg_pokey_device::device_add_mconfig)
+void a78_rom_sg_pokey_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "addon").front_center();
- MCFG_DEVICE_ADD("pokey", POKEY, XTAL(14'318'181)/8)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "addon", 1.00)
-MACHINE_CONFIG_END
+ POKEY(config, m_pokey, XTAL(14'318'181)/8).add_route(ALL_OUTPUTS, "addon", 1.00);
+}
/*-------------------------------------------------
@@ -497,34 +497,33 @@ WRITE8_MEMBER(a78_rom_act_device::write_40xx)
// Machine configs for PCB variants with a POKEY at $0450
-MACHINE_CONFIG_START(a78_rom_p450_device::device_add_mconfig)
+void a78_rom_p450_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "pokey_450").front_center();
- MCFG_DEVICE_ADD("pokey450", POKEY, XTAL(14'318'181)/8)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "pokey_450", 1.00)
-MACHINE_CONFIG_END
+ POKEY(config, m_pokey450, XTAL(14'318'181)/8).add_route(ALL_OUTPUTS, "pokey_450", 1.00);
+}
-MACHINE_CONFIG_START(a78_rom_p450_pokey_device::device_add_mconfig)
+void a78_rom_p450_pokey_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "addon").front_center();
- MCFG_DEVICE_ADD("pokey", POKEY, XTAL(14'318'181)/8)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "addon", 1.00)
+ POKEY(config, m_pokey, XTAL(14'318'181)/8).add_route(ALL_OUTPUTS, "addon", 1.00);
- MCFG_DEVICE_ADD("pokey450", POKEY, XTAL(14'318'181)/8)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "addon", 1.00)
-MACHINE_CONFIG_END
+ POKEY(config, m_pokey450, XTAL(14'318'181)/8).add_route(ALL_OUTPUTS, "addon", 1.00);
+}
-MACHINE_CONFIG_START(a78_rom_p450_sg_ram_device::device_add_mconfig)
+void a78_rom_p450_sg_ram_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "pokey_450").front_center();
- MCFG_DEVICE_ADD("pokey450", POKEY, XTAL(14'318'181)/8)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "pokey_450", 1.00)
-MACHINE_CONFIG_END
+ POKEY(config, m_pokey450, XTAL(14'318'181)/8).add_route(ALL_OUTPUTS, "pokey_450", 1.00);
+}
-MACHINE_CONFIG_START(a78_rom_p450_sg9_device::device_add_mconfig)
+void a78_rom_p450_sg9_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "pokey_450").front_center();
- MCFG_DEVICE_ADD("pokey450", POKEY, XTAL(14'318'181)/8)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "pokey_450", 1.00)
-MACHINE_CONFIG_END
+ POKEY(config, m_pokey450, XTAL(14'318'181)/8).add_route(ALL_OUTPUTS, "pokey_450", 1.00);
+}
diff --git a/src/devices/bus/a7800/rom.h b/src/devices/bus/a7800/rom.h
index 406746c4e93..1ad27663b6f 100644
--- a/src/devices/bus/a7800/rom.h
+++ b/src/devices/bus/a7800/rom.h
@@ -197,8 +197,8 @@ public:
a78_rom_p450_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_04xx) override { if (offset >= 0x50 && offset < 0x60) return m_pokey450->read(space, offset & 0x0f); else return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(write_04xx) override { if (offset >= 0x50 && offset < 0x60) m_pokey450->write(space, offset & 0x0f, data); }
+ virtual DECLARE_READ8_MEMBER(read_04xx) override { if (offset >= 0x50 && offset < 0x60) return m_pokey450->read(offset & 0x0f); else return 0xff; }
+ virtual DECLARE_WRITE8_MEMBER(write_04xx) override { if (offset >= 0x50 && offset < 0x60) m_pokey450->write(offset & 0x0f, data); }
protected:
virtual void device_add_mconfig(machine_config &config) override;
@@ -216,8 +216,8 @@ public:
a78_rom_p450_pokey_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_04xx) override { if (offset >= 0x50 && offset < 0x60) return m_pokey450->read(space, offset & 0x0f); else return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(write_04xx) override { if (offset >= 0x50 && offset < 0x60) m_pokey450->write(space, offset & 0x0f, data); }
+ virtual DECLARE_READ8_MEMBER(read_04xx) override { if (offset >= 0x50 && offset < 0x60) return m_pokey450->read(offset & 0x0f); else return 0xff; }
+ virtual DECLARE_WRITE8_MEMBER(write_04xx) override { if (offset >= 0x50 && offset < 0x60) m_pokey450->write(offset & 0x0f, data); }
protected:
virtual void device_add_mconfig(machine_config &config) override;
@@ -235,8 +235,8 @@ public:
a78_rom_p450_sg_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_04xx) override { if (offset >= 0x50 && offset < 0x60) return m_pokey450->read(space, offset & 0x0f); else return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(write_04xx) override { if (offset >= 0x50 && offset < 0x60) m_pokey450->write(space, offset & 0x0f, data); }
+ virtual DECLARE_READ8_MEMBER(read_04xx) override { if (offset >= 0x50 && offset < 0x60) return m_pokey450->read(offset & 0x0f); else return 0xff; }
+ virtual DECLARE_WRITE8_MEMBER(write_04xx) override { if (offset >= 0x50 && offset < 0x60) m_pokey450->write(offset & 0x0f, data); }
protected:
virtual void device_add_mconfig(machine_config &config) override;
@@ -254,8 +254,8 @@ public:
a78_rom_p450_sg9_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_04xx) override { if (offset >= 0x50 && offset < 0x60) return m_pokey450->read(space, offset & 0x0f); else return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(write_04xx) override { if (offset >= 0x50 && offset < 0x60) m_pokey450->write(space, offset & 0x0f, data); }
+ virtual DECLARE_READ8_MEMBER(read_04xx) override { if (offset >= 0x50 && offset < 0x60) return m_pokey450->read(offset & 0x0f); else return 0xff; }
+ virtual DECLARE_WRITE8_MEMBER(write_04xx) override { if (offset >= 0x50 && offset < 0x60) m_pokey450->write(offset & 0x0f, data); }
protected:
virtual void device_add_mconfig(machine_config &config) override;
diff --git a/src/devices/bus/a7800/xboard.cpp b/src/devices/bus/a7800/xboard.cpp
index d2e610f666e..0005e595a88 100644
--- a/src/devices/bus/a7800/xboard.cpp
+++ b/src/devices/bus/a7800/xboard.cpp
@@ -158,7 +158,7 @@ WRITE8_MEMBER(a78_xboard_device::write_40xx)
READ8_MEMBER(a78_xboard_device::read_04xx)
{
if (BIT(m_reg, 4) && offset >= 0x50 && offset < 0x60)
- return m_pokey->read(space, offset & 0x0f);
+ return m_pokey->read(offset & 0x0f);
else if (BIT(m_reg, 4) && offset >= 0x60 && offset < 0x70)
return m_xbslot->read_04xx(space, offset - 0x10); // access second POKEY
else
@@ -168,7 +168,7 @@ READ8_MEMBER(a78_xboard_device::read_04xx)
WRITE8_MEMBER(a78_xboard_device::write_04xx)
{
if (BIT(m_reg, 4) && offset >= 0x50 && offset < 0x60)
- m_pokey->write(space, offset & 0x0f, data);
+ m_pokey->write(offset & 0x0f, data);
else if (BIT(m_reg, 4) && offset >= 0x60 && offset < 0x70)
m_xbslot->write_04xx(space, offset - 0x10, data); // access second POKEY
else if (offset >= 0x70 && offset < 0x80)
@@ -203,9 +203,9 @@ READ8_MEMBER(a78_xm_device::read_30xx)
READ8_MEMBER(a78_xm_device::read_04xx)
{
if (BIT(m_reg, 4) && offset >= 0x50 && offset < 0x60)
- return m_pokey->read(space, offset & 0x0f);
+ return m_pokey->read(offset & 0x0f);
else if (m_ym_enabled && offset >= 0x60 && offset <= 0x61)
- return m_ym->read(space, offset & 1);
+ return m_ym->read(offset & 1);
else if (BIT(m_reg, 4) && offset >= 0x60 && offset < 0x70)
return m_xbslot->read_04xx(space, offset - 0x10); // access second POKEY
else
@@ -215,9 +215,9 @@ READ8_MEMBER(a78_xm_device::read_04xx)
WRITE8_MEMBER(a78_xm_device::write_04xx)
{
if (BIT(m_reg, 4) && offset >= 0x50 && offset < 0x60)
- m_pokey->write(space, offset & 0x0f, data);
+ m_pokey->write(offset & 0x0f, data);
else if (m_ym_enabled && offset >= 0x60 && offset <= 0x61)
- m_ym->write(space, offset & 1, data);
+ m_ym->write(offset & 1, data);
else if (BIT(m_reg, 4) && offset >= 0x60 && offset < 0x70)
m_xbslot->write_04xx(space, offset - 0x10, data); // access second POKEY
else if (offset >= 0x70 && offset < 0x80)
diff --git a/src/devices/bus/a800/cassette.cpp b/src/devices/bus/a800/cassette.cpp
index 1545cf434c7..fb08819e5ae 100644
--- a/src/devices/bus/a800/cassette.cpp
+++ b/src/devices/bus/a800/cassette.cpp
@@ -28,12 +28,13 @@ TODO:
DEFINE_DEVICE_TYPE(A8SIO_CASSETTE, a8sio_cassette_device, "a8sio_cass", "Atari 8 bit cassette")
const device_timer_id TIMER_CASSETTE_READ = 1;
-MACHINE_CONFIG_START(a8sio_cassette_device::device_add_mconfig)
- MCFG_CASSETTE_ADD("cassette")
- //MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED)
- MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY)
- MCFG_CASSETTE_INTERFACE("atari8bit_cass")
-MACHINE_CONFIG_END
+void a8sio_cassette_device::device_add_mconfig(machine_config &config)
+{
+ CASSETTE(config, m_cassette);
+ //m_cassette->set_default_state(CASSETTE_STOPPED);
+ m_cassette->set_default_state(CASSETTE_PLAY);
+ m_cassette->set_interface("atari8bit_cass");
+}
//**************************************************************************
// LIVE DEVICE
diff --git a/src/devices/bus/abcbus/abc890.cpp b/src/devices/bus/abcbus/abc890.cpp
index 4807a09a9f5..27530439929 100644
--- a/src/devices/bus/abcbus/abc890.cpp
+++ b/src/devices/bus/abcbus/abc890.cpp
@@ -27,89 +27,95 @@ DEFINE_DEVICE_TYPE(ABC856, abc856_device, "abc856", "ABC
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(abc890_device::device_add_mconfig)
- MCFG_ABCBUS_SLOT_ADD("io1", abcbus_cards, nullptr)
- MCFG_ABCBUS_SLOT_ADD("io2", abcbus_cards, nullptr)
- MCFG_ABCBUS_SLOT_ADD("io3", abcbus_cards, nullptr)
- MCFG_ABCBUS_SLOT_ADD("io4", abcbus_cards, nullptr)
- MCFG_ABCBUS_SLOT_ADD("mem1", abcbus_cards, nullptr)
- MCFG_ABCBUS_SLOT_ADD("mem2", abcbus_cards, nullptr)
- MCFG_ABCBUS_SLOT_ADD("mem3", abcbus_cards, nullptr)
-MACHINE_CONFIG_END
+void abc890_device::device_add_mconfig(machine_config &config)
+{
+ ABCBUS_SLOT(config, "io1", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+ ABCBUS_SLOT(config, "io2", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+ ABCBUS_SLOT(config, "io3", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+ ABCBUS_SLOT(config, "io4", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+ ABCBUS_SLOT(config, "mem1", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+ ABCBUS_SLOT(config, "mem2", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+ ABCBUS_SLOT(config, "mem3", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+}
//-------------------------------------------------
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(abc_expansion_unit_device::device_add_mconfig)
- MCFG_ABCBUS_SLOT_ADD("io1", abc80_cards, "abc830")
- MCFG_ABCBUS_SLOT_ADD("io2", abc80_cards, nullptr)
- MCFG_ABCBUS_SLOT_ADD("io3", abc80_cards, nullptr)
- MCFG_ABCBUS_SLOT_ADD("io4", abc80_cards, nullptr)
- MCFG_ABCBUS_SLOT_ADD("mem1", abc80_cards, "memcard")
- MCFG_ABCBUS_SLOT_ADD("mem2", abc80_cards, "16k")
- MCFG_ABCBUS_SLOT_ADD("mem3", abc80_cards, nullptr)
-MACHINE_CONFIG_END
+void abc_expansion_unit_device::device_add_mconfig(machine_config &config)
+{
+ ABCBUS_SLOT(config, "io1", DERIVED_CLOCK(1, 1), abc80_cards, "abc830");
+ ABCBUS_SLOT(config, "io2", DERIVED_CLOCK(1, 1), abc80_cards, nullptr);
+ ABCBUS_SLOT(config, "io3", DERIVED_CLOCK(1, 1), abc80_cards, nullptr);
+ ABCBUS_SLOT(config, "io4", DERIVED_CLOCK(1, 1), abc80_cards, nullptr);
+ ABCBUS_SLOT(config, "mem1", DERIVED_CLOCK(1, 1), abc80_cards, "memcard");
+ ABCBUS_SLOT(config, "mem2", DERIVED_CLOCK(1, 1), abc80_cards, "16k");
+ ABCBUS_SLOT(config, "mem3", DERIVED_CLOCK(1, 1), abc80_cards, nullptr);
+}
//-------------------------------------------------
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(abc894_device::device_add_mconfig)
- MCFG_ABCBUS_SLOT_ADD("io1", abcbus_cards, nullptr)
- MCFG_ABCBUS_SLOT_ADD("io2", abcbus_cards, nullptr)
- MCFG_ABCBUS_SLOT_ADD("io3", abcbus_cards, nullptr)
-MACHINE_CONFIG_END
+void abc894_device::device_add_mconfig(machine_config &config)
+{
+ ABCBUS_SLOT(config, "io1", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+ ABCBUS_SLOT(config, "io2", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+ ABCBUS_SLOT(config, "io3", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+}
//-------------------------------------------------
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(abc850_device::device_add_mconfig)
- MCFG_ABCBUS_SLOT_ADD("io1", abcbus_cards, "abc850fdd")
- MCFG_ABCBUS_SLOT_ADD("io2", abcbus_cards, "xebec")
- MCFG_SLOT_OPTION_DEFAULT_BIOS("xebec", "ro202")
- MCFG_ABCBUS_SLOT_ADD("io3", abcbus_cards, nullptr)
- MCFG_ABCBUS_SLOT_ADD("io4", abcbus_cards, nullptr)
- MCFG_ABCBUS_SLOT_ADD("io5", abcbus_cards, nullptr)
- MCFG_ABCBUS_SLOT_ADD("io6", abcbus_cards, nullptr)
- MCFG_ABCBUS_SLOT_ADD("io7", abcbus_cards, nullptr)
-MACHINE_CONFIG_END
+void abc850_device::device_add_mconfig(machine_config &config)
+{
+ ABCBUS_SLOT(config, "io1", DERIVED_CLOCK(1, 1), abcbus_cards, "abc850fdd");
+ ABCBUS_SLOT(config, "io2", DERIVED_CLOCK(1, 1), abcbus_cards, "xebec")
+ .set_option_default_bios("xebec", "ro202");
+ ABCBUS_SLOT(config, "io3", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+ ABCBUS_SLOT(config, "io4", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+ ABCBUS_SLOT(config, "io5", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+ ABCBUS_SLOT(config, "io6", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+ ABCBUS_SLOT(config, "io7", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+}
//-------------------------------------------------
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(abc852_device::device_add_mconfig)
- MCFG_ABCBUS_SLOT_ADD("io1", abcbus_cards, "abc850fdd")
- MCFG_ABCBUS_SLOT_ADD("io2", abcbus_cards, "xebec")
- MCFG_SLOT_OPTION_DEFAULT_BIOS("xebec", "basf6185")
- MCFG_ABCBUS_SLOT_ADD("io3", abcbus_cards, nullptr)
- MCFG_ABCBUS_SLOT_ADD("io4", abcbus_cards, nullptr)
- MCFG_ABCBUS_SLOT_ADD("io5", abcbus_cards, nullptr)
- MCFG_ABCBUS_SLOT_ADD("io6", abcbus_cards, nullptr)
- MCFG_ABCBUS_SLOT_ADD("io7", abcbus_cards, nullptr)
-MACHINE_CONFIG_END
+void abc852_device::device_add_mconfig(machine_config &config)
+{
+ ABCBUS_SLOT(config, "io1", DERIVED_CLOCK(1, 1), abcbus_cards, "abc850fdd");
+ ABCBUS_SLOT(config, "io2", DERIVED_CLOCK(1, 1), abcbus_cards, "xebec")
+ .set_option_default_bios("xebec", "basf6185");
+ ABCBUS_SLOT(config, "io3", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+ ABCBUS_SLOT(config, "io4", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+ ABCBUS_SLOT(config, "io5", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+ ABCBUS_SLOT(config, "io6", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+ ABCBUS_SLOT(config, "io7", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+}
//-------------------------------------------------
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(abc856_device::device_add_mconfig)
- MCFG_ABCBUS_SLOT_ADD("io1", abcbus_cards, "abc850fdd")
- MCFG_ABCBUS_SLOT_ADD("io2", abcbus_cards, "xebec")
- MCFG_SLOT_OPTION_DEFAULT_BIOS("xebec", "micr1325")
- MCFG_ABCBUS_SLOT_ADD("io3", abcbus_cards, nullptr)
- MCFG_ABCBUS_SLOT_ADD("io4", abcbus_cards, nullptr)
- MCFG_ABCBUS_SLOT_ADD("io5", abcbus_cards, nullptr)
- MCFG_ABCBUS_SLOT_ADD("io6", abcbus_cards, nullptr)
- MCFG_ABCBUS_SLOT_ADD("io7", abcbus_cards, nullptr)
-MACHINE_CONFIG_END
+void abc856_device::device_add_mconfig(machine_config &config)
+{
+ ABCBUS_SLOT(config, "io1", DERIVED_CLOCK(1, 1), abcbus_cards, "abc850fdd");
+ ABCBUS_SLOT(config, "io2", DERIVED_CLOCK(1, 1), abcbus_cards, "xebec")
+ .set_option_default_bios("xebec", "micr1325");
+ ABCBUS_SLOT(config, "io3", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+ ABCBUS_SLOT(config, "io4", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+ ABCBUS_SLOT(config, "io5", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+ ABCBUS_SLOT(config, "io6", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+ ABCBUS_SLOT(config, "io7", DERIVED_CLOCK(1, 1), abcbus_cards, nullptr);
+}
diff --git a/src/devices/bus/abcbus/abcbus.h b/src/devices/bus/abcbus/abcbus.h
index 5bd338b05d7..2388fbc73cf 100644
--- a/src/devices/bus/abcbus/abcbus.h
+++ b/src/devices/bus/abcbus/abcbus.h
@@ -111,47 +111,6 @@
//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_ABCBUS_SLOT_ADD(_tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, ABCBUS_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-
-#define MCFG_ABCBUS_SLOT_IRQ_CALLBACK(_irq) \
- downcast<abcbus_slot_device *>(device)->set_irq_callback(DEVCB_##_irq);
-
-#define MCFG_ABCBUS_SLOT_NMI_CALLBACK(_nmi) \
- downcast<abcbus_slot_device *>(device)->set_nmi_callback(DEVCB_##_nmi);
-
-#define MCFG_ABCBUS_SLOT_RDY_CALLBACK(_rdy) \
- downcast<abcbus_slot_device *>(device)->set_rdy_callback(DEVCB_##_rdy);
-
-#define MCFG_ABCBUS_SLOT_RESIN_CALLBACK(_resin) \
- downcast<abcbus_slot_device *>(device)->set_resin_callback(DEVCB_##_resin);
-
-#define MCFG_ABCBUS_SLOT_PREN_CALLBACK(_pren) \
- downcast<abcbus_slot_device *>(device)->set_pren_callback(DEVCB_##_pren);
-
-#define MCFG_ABCBUS_SLOT_TRRQ_CALLBACK(_trrq) \
- downcast<abcbus_slot_device *>(device)->set_trrq_callback(DEVCB_##_trrq);
-
-#define MCFG_ABCBUS_SLOT_XINT2_CALLBACK(_xint2) \
- downcast<abcbus_slot_device *>(device)->set_xint2_callback(DEVCB_##_xint2);
-
-#define MCFG_ABCBUS_SLOT_XINT3_CALLBACK(_xint3) \
- downcast<abcbus_slot_device *>(device)->set_xint3_callback(DEVCB_##_xint3);
-
-#define MCFG_ABCBUS_SLOT_XINT4_CALLBACK(_xint4) \
- downcast<abcbus_slot_device *>(device)->set_xint4_callback(DEVCB_##_xint4);
-
-#define MCFG_ABCBUS_SLOT_XINT5_CALLBACK(_xint5) \
- downcast<abcbus_slot_device *>(device)->set_xint5_callback(DEVCB_##_xint5);
-
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -207,17 +166,26 @@ class abcbus_slot_device : public device_t,
public:
// construction/destruction
abcbus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
- template <class Object> devcb_base &set_irq_callback(Object &&cb) { return m_write_irq.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_nmi_callback(Object &&cb) { return m_write_nmi.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_rdy_callback(Object &&cb) { return m_write_rdy.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_resin_callback(Object &&cb) { return m_write_resin.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_pren_callback(Object &&cb) { return m_write_pren.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_trrq_callback(Object &&cb) { return m_write_trrq.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_xint2_callback(Object &&cb) { return m_write_xint2.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_xint3_callback(Object &&cb) { return m_write_xint3.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_xint4_callback(Object &&cb) { return m_write_xint4.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_xint5_callback(Object &&cb) { return m_write_xint5.set_callback(std::forward<Object>(cb)); }
+ template <typename T>
+ abcbus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&opts, const char *dflt)
+ : abcbus_slot_device(mconfig, tag, owner, clock)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ auto irq_callback() { return m_write_irq.bind(); }
+ auto nmi_callback() { return m_write_nmi.bind(); }
+ auto rdy_callback() { return m_write_rdy.bind(); }
+ auto resin_callback() { return m_write_resin.bind(); }
+ auto pren_callback() { return m_write_pren.bind(); }
+ auto trrq_callback() { return m_write_trrq.bind(); }
+ auto xint2_callback() { return m_write_xint2.bind(); }
+ auto xint3_callback() { return m_write_xint3.bind(); }
+ auto xint4_callback() { return m_write_xint4.bind(); }
+ auto xint5_callback() { return m_write_xint5.bind(); }
// computer interface
void write_cs(uint8_t data) { if (m_card) m_card->abcbus_cs(data); }
diff --git a/src/devices/bus/abcbus/cadmouse.cpp b/src/devices/bus/abcbus/cadmouse.cpp
index 9cee7326cf4..7a4d90916f9 100644
--- a/src/devices/bus/abcbus/cadmouse.cpp
+++ b/src/devices/bus/abcbus/cadmouse.cpp
@@ -125,11 +125,12 @@ void abc_cadmouse_device::abc_cadmouse_io(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(abc_cadmouse_device::device_add_mconfig)
- MCFG_DEVICE_ADD(Z80_TAG, Z80, XTAL(8'000'000)/2)
- MCFG_DEVICE_PROGRAM_MAP(abc_cadmouse_mem)
- MCFG_DEVICE_IO_MAP(abc_cadmouse_io)
-MACHINE_CONFIG_END
+void abc_cadmouse_device::device_add_mconfig(machine_config &config)
+{
+ Z80(config, m_maincpu, XTAL(8'000'000)/2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &abc_cadmouse_device::abc_cadmouse_mem);
+ m_maincpu->set_addrmap(AS_IO, &abc_cadmouse_device::abc_cadmouse_io);
+}
//**************************************************************************
// LIVE DEVICE
diff --git a/src/devices/bus/abcbus/db411223.cpp b/src/devices/bus/abcbus/db411223.cpp
index d9d2906f6d6..86ba1f22ee9 100644
--- a/src/devices/bus/abcbus/db411223.cpp
+++ b/src/devices/bus/abcbus/db411223.cpp
@@ -68,11 +68,12 @@ void databoard_4112_23_t::databoard_4112_23_io(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(databoard_4112_23_t::device_add_mconfig)
- MCFG_DEVICE_ADD(Z80_TAG, Z80, 4000000)
- MCFG_DEVICE_PROGRAM_MAP(databoard_4112_23_mem)
- MCFG_DEVICE_IO_MAP(databoard_4112_23_io)
-MACHINE_CONFIG_END
+void databoard_4112_23_t::device_add_mconfig(machine_config &config)
+{
+ Z80(config, m_maincpu, 4000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &databoard_4112_23_t::databoard_4112_23_mem);
+ m_maincpu->set_addrmap(AS_IO, &databoard_4112_23_t::databoard_4112_23_io);
+}
//-------------------------------------------------
diff --git a/src/devices/bus/abcbus/unidisk.cpp b/src/devices/bus/abcbus/unidisk.cpp
index 0d5968aa71b..0b068000193 100644
--- a/src/devices/bus/abcbus/unidisk.cpp
+++ b/src/devices/bus/abcbus/unidisk.cpp
@@ -73,11 +73,12 @@ void unidisk_t::unidisk_io(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(unidisk_t::device_add_mconfig)
+void unidisk_t::device_add_mconfig(machine_config &config)
+{
TMS9995(config, m_maincpu, 12000000);
m_maincpu->set_addrmap(AS_PROGRAM, &unidisk_t::unidisk_mem);
m_maincpu->set_addrmap(AS_IO, &unidisk_t::unidisk_io);
-MACHINE_CONFIG_END
+}
//-------------------------------------------------
diff --git a/src/devices/bus/abckb/abc77.cpp b/src/devices/bus/abckb/abc77.cpp
index 87acedf4fb8..996a5af23c9 100644
--- a/src/devices/bus/abckb/abc77.cpp
+++ b/src/devices/bus/abckb/abc77.cpp
@@ -129,7 +129,8 @@ DISCRETE_SOUND_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(abc77_device::device_add_mconfig)
+void abc77_device::device_add_mconfig(machine_config &config)
+{
// keyboard cpu
I8035(config, m_maincpu, XTAL(4'608'000));
m_maincpu->set_addrmap(AS_PROGRAM, &abc77_device::abc77_map);
@@ -144,9 +145,8 @@ MACHINE_CONFIG_START(abc77_device::device_add_mconfig)
// discrete sound
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD(DISCRETE_TAG, DISCRETE, abc77_discrete)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
-MACHINE_CONFIG_END
+ DISCRETE(config, m_discrete, abc77_discrete).add_route(ALL_OUTPUTS, "mono", 0.80);
+}
//-------------------------------------------------
diff --git a/src/devices/bus/abckb/abc99.cpp b/src/devices/bus/abckb/abc99.cpp
index 6782fbd8a59..4b49e73548e 100644
--- a/src/devices/bus/abckb/abc99.cpp
+++ b/src/devices/bus/abckb/abc99.cpp
@@ -169,7 +169,7 @@ void abc99_device::device_add_mconfig(machine_config &config)
m_mousecpu->set_addrmap(AS_PROGRAM, &abc99_device::abc99_z5_mem);
//m_mousecpu->p1_in_cb().set(FUNC(abc99_device::z5_p1_r));
//m_mousecpu->p2_out_cb().set(FUNC(abc99_device::z5_p2_w));
- //MCFG_MCS48_PORT_T0_CLK_CUSTOM() // Z2 CLK
+ //m_mousecpu->set_t0_clk_cb(); // Z2 CLK
//m_mousecpu->t1_in_cb().set(FUNC(abc99_device::z5_t1_r));
m_mousecpu->set_disable(); // HACK fix for broken serial I/O
diff --git a/src/devices/bus/abckb/abckb.h b/src/devices/bus/abckb/abckb.h
index 7ec223fc942..d7ab8b6162a 100644
--- a/src/devices/bus/abckb/abckb.h
+++ b/src/devices/bus/abckb/abckb.h
@@ -12,27 +12,6 @@
#pragma once
-
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_ABC_KEYBOARD_PORT_ADD(_tag, _def_slot) \
- MCFG_DEVICE_ADD(_tag, ABC_KEYBOARD_PORT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(abc_keyboard_devices, _def_slot, false)
-
-#define MCFG_ABC_KEYBOARD_OUT_RX_HANDLER(_devcb) \
- downcast<abc_keyboard_port_device &>(*device).set_out_rx_handler(DEVCB_##_devcb);
-
-#define MCFG_ABC_KEYBOARD_OUT_TRXC_HANDLER(_devcb) \
- downcast<abc_keyboard_port_device &>(*device).set_out_trxc_handler(DEVCB_##_devcb);
-
-#define MCFG_ABC_KEYBOARD_OUT_KEYDOWN_HANDLER(_devcb) \
- downcast<abc_keyboard_port_device &>(*device).set_out_keydown_handler(DEVCB_##_devcb);
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -43,11 +22,21 @@ class abc_keyboard_port_device : public device_t, public device_slot_interface
{
public:
// construction/destruction
- abc_keyboard_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
- template <class Object> devcb_base &set_out_rx_handler(Object &&cb) { return m_out_rx_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_trxc_handler(Object &&cb) { return m_out_trxc_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_keydown_handler(Object &&cb) { return m_out_keydown_handler.set_callback(std::forward<Object>(cb)); }
+ template <typename T>
+ abc_keyboard_port_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : abc_keyboard_port_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ abc_keyboard_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+
+ auto out_rx_handler() { return m_out_rx_handler.bind(); }
+ auto out_trxc_handler() { return m_out_trxc_handler.bind(); }
+ auto out_keydown_handler() { return m_out_keydown_handler.bind(); }
// computer interface
DECLARE_WRITE_LINE_MEMBER( txd_w );
diff --git a/src/devices/bus/acorn/atom/discpack.cpp b/src/devices/bus/acorn/atom/discpack.cpp
index 63a29d403f1..fd33ec293a6 100644
--- a/src/devices/bus/acorn/atom/discpack.cpp
+++ b/src/devices/bus/acorn/atom/discpack.cpp
@@ -84,7 +84,7 @@ void atom_discpack_device::device_start()
address_space &space = m_bus->memspace();
space.install_device(0x0a00, 0x0a03, *m_fdc, &i8271_device::map);
- space.install_readwrite_handler(0x0a04, 0x0a04, 0, 0x1f8, 0, read8_delegate(FUNC(i8271_device::data_r), m_fdc.target()), write8_delegate(FUNC(i8271_device::data_w), m_fdc.target()));
+ space.install_readwrite_handler(0x0a04, 0x0a04, 0, 0x1f8, 0, read8smo_delegate(FUNC(i8271_device::data_r), m_fdc.target()), write8smo_delegate(FUNC(i8271_device::data_w), m_fdc.target()));
space.install_ram(0x2000, 0x23ff);
space.install_ram(0x2400, 0x27ff);
space.install_ram(0x3c00, 0x3fff);
diff --git a/src/devices/bus/acorn/atom/econet.cpp b/src/devices/bus/acorn/atom/econet.cpp
index 210ca895445..5051fd0e8e7 100644
--- a/src/devices/bus/acorn/atom/econet.cpp
+++ b/src/devices/bus/acorn/atom/econet.cpp
@@ -63,7 +63,7 @@ void atom_econet_device::device_start()
{
address_space &space = m_bus->memspace();
- space.install_readwrite_handler(0xb400, 0xb403, read8_delegate(FUNC(mc6854_device::read), m_adlc.target()), write8_delegate(FUNC(mc6854_device::write), m_adlc.target()));
+ space.install_readwrite_handler(0xb400, 0xb403, read8sm_delegate(FUNC(mc6854_device::read), m_adlc.target()), write8sm_delegate(FUNC(mc6854_device::write), m_adlc.target()));
space.install_read_handler(0xb404, 0xb404, read8_delegate(FUNC(atom_econet_device::statid_r), this));
}
diff --git a/src/devices/bus/acorn/atom/sid.cpp b/src/devices/bus/acorn/atom/sid.cpp
index 950f4de2c58..8b5cd738cfe 100644
--- a/src/devices/bus/acorn/atom/sid.cpp
+++ b/src/devices/bus/acorn/atom/sid.cpp
@@ -55,5 +55,5 @@ void atom_sid_device::device_start()
{
address_space &space = m_bus->memspace();
- space.install_readwrite_handler(0xbdc0, 0xbddf, read8_delegate(FUNC(mos6581_device::read), m_sid.target()), write8_delegate(FUNC(mos6581_device::write), m_sid.target()));
+ space.install_readwrite_handler(0xbdc0, 0xbddf, read8sm_delegate(FUNC(mos6581_device::read), m_sid.target()), write8sm_delegate(FUNC(mos6581_device::write), m_sid.target()));
}
diff --git a/src/devices/bus/acorn/bus.cpp b/src/devices/bus/acorn/bus.cpp
index ed759be82af..2ecb509c30f 100644
--- a/src/devices/bus/acorn/bus.cpp
+++ b/src/devices/bus/acorn/bus.cpp
@@ -80,7 +80,7 @@ DEFINE_DEVICE_TYPE(ACORN_BUS, acorn_bus_device, "acorn_bus", "Acorn Bus")
acorn_bus_device::acorn_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, ACORN_BUS, tag, owner, clock)
- , m_maincpu(*this, finder_base::DUMMY_TAG)
+ , m_space(*this, finder_base::DUMMY_TAG, -1)
, m_out_irq_cb(*this)
, m_out_nmi_cb(*this)
{
diff --git a/src/devices/bus/acorn/bus.h b/src/devices/bus/acorn/bus.h
index 9ebcafdad73..149da10d447 100644
--- a/src/devices/bus/acorn/bus.h
+++ b/src/devices/bus/acorn/bus.h
@@ -64,11 +64,11 @@ public:
acorn_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// inline configuration
- template <typename T> void set_cputag(T &&tag) { m_maincpu.set_tag(std::forward<T>(tag)); }
+ template <typename T> void set_space(T &&tag, int spacenum) { m_space.set_tag(std::forward<T>(tag), spacenum); }
auto out_irq_callback() { return m_out_irq_cb.bind(); }
auto out_nmi_callback() { return m_out_nmi_cb.bind(); }
- address_space &memspace() const { return m_maincpu->space(AS_PROGRAM); }
+ address_space &memspace() const { return *m_space; }
DECLARE_WRITE_LINE_MEMBER(irq_w);
DECLARE_WRITE_LINE_MEMBER(nmi_w);
@@ -81,7 +81,7 @@ protected:
virtual void device_reset() override;
// internal state
- required_device<cpu_device> m_maincpu;
+ required_address_space m_space;
devcb_write_line m_out_irq_cb;
devcb_write_line m_out_nmi_cb;
diff --git a/src/devices/bus/acorn/cms/4080term.cpp b/src/devices/bus/acorn/cms/4080term.cpp
index 0bf9cf5a7ea..7bb64493481 100644
--- a/src/devices/bus/acorn/cms/4080term.cpp
+++ b/src/devices/bus/acorn/cms/4080term.cpp
@@ -68,22 +68,23 @@ DEVICE_INPUT_DEFAULTS_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(cms_4080term_device::device_add_mconfig)
+void cms_4080term_device::device_add_mconfig(machine_config &config)
+{
/* video hardware */
- device = &SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(50);
m_screen->set_size(768, 312);
m_screen->set_visarea(0, 492 - 1, 0, 270 - 1);
- MCFG_SCREEN_UPDATE_DEVICE("ef9345", ef9345_device, screen_update)
+ m_screen->set_screen_update("ef9345", FUNC(ef9345_device::screen_update));
- MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cms_4080term)
- MCFG_PALETTE_ADD("palette", 8)
+ GFXDECODE(config, "gfxdecode", "palette", gfx_cms_4080term);
+ PALETTE(config, "palette").set_entries(8);
EF9345(config, m_ef9345, 0);
m_ef9345->set_screen("screen");
m_ef9345->set_palette_tag("palette");
- MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", cms_4080term_device, update_scanline, "screen", 0, 10)
+ TIMER(config, "scantimer").configure_scanline(FUNC(cms_4080term_device::update_scanline), "screen", 0, 10);
VIA6522(config, m_via, 1_MHz_XTAL);
m_via->writepa_handler().set("cent_data_out", FUNC(output_latch_device::bus_w));
@@ -107,8 +108,9 @@ MACHINE_CONFIG_START(cms_4080term_device::device_add_mconfig)
/* printer */
CENTRONICS(config, m_centronics, centronics_devices, "printer");
m_centronics->ack_handler().set(m_via, FUNC(via6522_device::write_ca1));
- MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
-MACHINE_CONFIG_END
+ output_latch_device &cent_data_out(OUTPUT_LATCH(config, "cent_data_out"));
+ m_centronics->set_output_latch(cent_data_out);
+}
const tiny_rom_entry *cms_4080term_device::device_rom_region() const
@@ -145,9 +147,9 @@ void cms_4080term_device::device_start()
{
address_space &space = m_bus->memspace();
- space.install_readwrite_handler(0xfd20, 0xfd2f, read8_delegate(FUNC(ef9345_device::data_r), m_ef9345.target()), write8_delegate(FUNC(ef9345_device::data_w), m_ef9345.target()));
+ space.install_readwrite_handler(0xfd20, 0xfd2f, read8sm_delegate(FUNC(ef9345_device::data_r), m_ef9345.target()), write8sm_delegate(FUNC(ef9345_device::data_w), m_ef9345.target()));
space.install_readwrite_handler(0xfd30, 0xfd3f, read8sm_delegate(FUNC(via6522_device::read), m_via.target()), write8sm_delegate(FUNC(via6522_device::write), m_via.target()));
- space.install_readwrite_handler(0xfd40, 0xfd4f, read8_delegate(FUNC(mos6551_device::read), m_acia.target()), write8_delegate(FUNC(mos6551_device::write), m_acia.target()));
+ space.install_readwrite_handler(0xfd40, 0xfd4f, read8sm_delegate(FUNC(mos6551_device::read), m_acia.target()), write8sm_delegate(FUNC(mos6551_device::write), m_acia.target()));
uint8_t *FNT = memregion("ef9345")->base();
uint16_t dest = 0x2000;
diff --git a/src/devices/bus/acorn/cms/hires.cpp b/src/devices/bus/acorn/cms/hires.cpp
index d15032bd30c..9e6e169737b 100644
--- a/src/devices/bus/acorn/cms/hires.cpp
+++ b/src/devices/bus/acorn/cms/hires.cpp
@@ -25,23 +25,24 @@ DEFINE_DEVICE_TYPE(CMS_HIRES, cms_hires_device, "cms_hires", "CMS High Resolutio
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(cms_hires_device::device_add_mconfig)
+void cms_hires_device::device_add_mconfig(machine_config &config)
+{
/* video hardware */
- device = &SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_size(512, 312);
m_screen->set_visarea(0, 512 - 1, 0, 256 - 1);
m_screen->set_refresh_hz(50);
- MCFG_SCREEN_UPDATE_DEVICE("ef9366", ef9365_device, screen_update)
- MCFG_PALETTE_ADD("palette", 16)
+ m_screen->set_screen_update("ef9366", FUNC(ef9365_device::screen_update));
+ PALETTE(config, "palette").set_entries(16);
- MCFG_TIMER_DRIVER_ADD_PERIODIC("flash_rate", cms_hires_device, flash_rate, attotime::from_hz(3)) // from 555 timer (4.7uF, 100K, 470R)
+ TIMER(config, "flash_rate").configure_periodic(FUNC(cms_hires_device::flash_rate), attotime::from_hz(3)); // from 555 timer (4.7uF, 100K, 470R)
EF9365(config, m_gdp, 14_MHz_XTAL / 8);
m_gdp->set_screen("screen");
m_gdp->set_palette_tag("palette");
m_gdp->set_nb_bitplanes(4);
m_gdp->set_display_mode(ef9365_device::DISPLAY_MODE_512x256);
-MACHINE_CONFIG_END
+}
//**************************************************************************
@@ -70,7 +71,7 @@ void cms_hires_device::device_start()
{
address_space &space = m_bus->memspace();
- space.install_readwrite_handler(0xfc10, 0xfc1f, read8_delegate(FUNC(ef9365_device::data_r), m_gdp.target()), write8_delegate(FUNC(ef9365_device::data_w), m_gdp.target()));
+ space.install_readwrite_handler(0xfc10, 0xfc1f, read8sm_delegate(FUNC(ef9365_device::data_r), m_gdp.target()), write8sm_delegate(FUNC(ef9365_device::data_w), m_gdp.target()));
space.install_write_handler(0xfc20, 0xfc2f, write8_delegate(FUNC(cms_hires_device::colour_reg_w), this));
save_item(NAME(m_flash_state));
diff --git a/src/devices/bus/acorn/system/cass.cpp b/src/devices/bus/acorn/system/cass.cpp
index 092a72f40a3..6e5b8faf40c 100644
--- a/src/devices/bus/acorn/system/cass.cpp
+++ b/src/devices/bus/acorn/system/cass.cpp
@@ -24,15 +24,16 @@ DEFINE_DEVICE_TYPE(ACORN_CASS, acorn_cass_device, "acorn_cass", "Acorn Cassette
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(acorn_cass_device::device_add_mconfig)
+void acorn_cass_device::device_add_mconfig(machine_config &config)
+{
/* sound hardware */
SPEAKER(config, "mono").front_center();
WAVE(config, "wave", "cassette").add_route(ALL_OUTPUTS, "mono", 0.25);
CASSETTE(config, "cassette", 0);
- MCFG_TIMER_DRIVER_ADD_PERIODIC("cass_c", acorn_cass_device, cass_c, attotime::from_hz(4800))
- MCFG_TIMER_DRIVER_ADD_PERIODIC("cass_p", acorn_cass_device, cass_p, attotime::from_hz(40000))
-MACHINE_CONFIG_END
+ TIMER(config, "cass_c").configure_periodic(FUNC(acorn_cass_device::cass_c), attotime::from_hz(4800));
+ TIMER(config, "cass_p").configure_periodic(FUNC(acorn_cass_device::cass_p), attotime::from_hz(40000));
+}
//**************************************************************************
diff --git a/src/devices/bus/acorn/system/econet.cpp b/src/devices/bus/acorn/system/econet.cpp
index d6613f35bf7..f8e2c6f0ce4 100644
--- a/src/devices/bus/acorn/system/econet.cpp
+++ b/src/devices/bus/acorn/system/econet.cpp
@@ -72,7 +72,7 @@ void acorn_econet_device::device_reset()
{
address_space &space = m_bus->memspace();
- space.install_readwrite_handler(0x1940, 0x1943, read8_delegate(FUNC(mc6854_device::read), m_adlc.target()), write8_delegate(FUNC(mc6854_device::write), m_adlc.target()));
+ space.install_readwrite_handler(0x1940, 0x1943, read8sm_delegate(FUNC(mc6854_device::read), m_adlc.target()), write8sm_delegate(FUNC(mc6854_device::write), m_adlc.target()));
space.install_read_handler(0x1944, 0x1944, read8_delegate(FUNC(acorn_econet_device::statid_r), this));
}
diff --git a/src/devices/bus/acorn/system/fdc.cpp b/src/devices/bus/acorn/system/fdc.cpp
index 398736eab9e..179b914d3cf 100644
--- a/src/devices/bus/acorn/system/fdc.cpp
+++ b/src/devices/bus/acorn/system/fdc.cpp
@@ -85,7 +85,7 @@ void acorn_fdc_device::device_reset()
address_space &space = m_bus->memspace();
space.install_device(0x0a00, 0x0a03, *m_fdc, &i8271_device::map);
- space.install_readwrite_handler(0x0a04, 0x0a04, 0, 0x1f8, 0, read8_delegate(FUNC(i8271_device::data_r), m_fdc.target()), write8_delegate(FUNC(i8271_device::data_w), m_fdc.target()));
+ space.install_readwrite_handler(0x0a04, 0x0a04, 0, 0x1f8, 0, read8smo_delegate(FUNC(i8271_device::data_r), m_fdc.target()), write8smo_delegate(FUNC(i8271_device::data_w), m_fdc.target()));
}
diff --git a/src/devices/bus/acorn/system/vdu40.cpp b/src/devices/bus/acorn/system/vdu40.cpp
index 93d54819fa5..4f97b778a5b 100644
--- a/src/devices/bus/acorn/system/vdu40.cpp
+++ b/src/devices/bus/acorn/system/vdu40.cpp
@@ -25,12 +25,13 @@ DEFINE_DEVICE_TYPE(ACORN_VDU40, acorn_vdu40_device, "acorn_vdu40", "Acorn 40 Col
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(acorn_vdu40_device::device_add_mconfig)
- device = &SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+void acorn_vdu40_device::device_add_mconfig(machine_config &config)
+{
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_raw(12_MHz_XTAL, 768, 132, 612, 311, 20, 270);
- MCFG_SCREEN_UPDATE_DEVICE("mc6845", mc6845_device, screen_update)
+ m_screen->set_screen_update("mc6845", FUNC(mc6845_device::screen_update));
- MCFG_PALETTE_ADD("palette", 8)
+ PALETTE(config, "palette").set_entries(8);
HD6845(config, m_crtc, 12_MHz_XTAL / 6);
m_crtc->set_screen("screen");
@@ -41,7 +42,7 @@ MACHINE_CONFIG_START(acorn_vdu40_device::device_add_mconfig)
SAA5050(config, m_trom, 12_MHz_XTAL / 2);
m_trom->set_screen_size(40, 25, 40);
-MACHINE_CONFIG_END
+}
//**************************************************************************
@@ -81,8 +82,8 @@ void acorn_vdu40_device::device_reset()
address_space &space = m_bus->memspace();
space.install_ram(0x0400, 0x07ff, m_videoram.get());
- space.install_readwrite_handler(0x0800, 0x0800, read8_delegate(FUNC(mc6845_device::status_r), m_crtc.target()), write8_delegate(FUNC(mc6845_device::address_w), m_crtc.target()));
- space.install_readwrite_handler(0x0801, 0x0801, read8_delegate(FUNC(mc6845_device::register_r), m_crtc.target()), write8_delegate(FUNC(mc6845_device::register_w), m_crtc.target()));
+ space.install_readwrite_handler(0x0800, 0x0800, read8smo_delegate(FUNC(mc6845_device::status_r), m_crtc.target()), write8smo_delegate(FUNC(mc6845_device::address_w), m_crtc.target()));
+ space.install_readwrite_handler(0x0801, 0x0801, read8smo_delegate(FUNC(mc6845_device::register_r), m_crtc.target()), write8smo_delegate(FUNC(mc6845_device::register_w), m_crtc.target()));
}
diff --git a/src/devices/bus/acorn/system/vdu80.cpp b/src/devices/bus/acorn/system/vdu80.cpp
index 65e22414e94..ef6cd463baa 100644
--- a/src/devices/bus/acorn/system/vdu80.cpp
+++ b/src/devices/bus/acorn/system/vdu80.cpp
@@ -87,13 +87,14 @@ GFXDECODE_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(acorn_vdu80_device::device_add_mconfig)
- device = &SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+void acorn_vdu80_device::device_add_mconfig(machine_config &config)
+{
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_color(rgb_t::white());
m_screen->set_raw(12_MHz_XTAL, 768, 132, 612, 312, 20, 270);
- MCFG_SCREEN_UPDATE_DEVICE("mc6845", mc6845_device, screen_update)
+ m_screen->set_screen_update("mc6845", FUNC(mc6845_device::screen_update));
- MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_acorn_vdu80)
+ GFXDECODE(config, "gfxdecode", m_palette, gfx_acorn_vdu80);
PALETTE(config, m_palette, palette_device::MONOCHROME);
H46505(config, m_crtc, 2_MHz_XTAL);
@@ -101,7 +102,7 @@ MACHINE_CONFIG_START(acorn_vdu80_device::device_add_mconfig)
m_crtc->set_show_border_area(false);
m_crtc->set_char_width(6);
m_crtc->set_update_row_callback(FUNC(acorn_vdu80_device::crtc_update_row), this);
-MACHINE_CONFIG_END
+}
const tiny_rom_entry *acorn_vdu80_device::device_rom_region() const
@@ -151,15 +152,15 @@ void acorn_vdu80_device::device_reset()
{
space.install_ram(0xf000, 0x0f7ff, m_videoram.get());
- space.install_readwrite_handler(0xe840, 0xe840, 0, 0x3f, 0, read8_delegate(FUNC(mc6845_device::status_r), m_crtc.target()), write8_delegate(FUNC(mc6845_device::address_w), m_crtc.target()));
- space.install_readwrite_handler(0xe841, 0xe841, 0, 0x3e, 0, read8_delegate(FUNC(mc6845_device::register_r), m_crtc.target()), write8_delegate(FUNC(mc6845_device::register_w), m_crtc.target()));
+ space.install_readwrite_handler(0xe840, 0xe840, 0, 0x3f, 0, read8smo_delegate(FUNC(mc6845_device::status_r), m_crtc.target()), write8smo_delegate(FUNC(mc6845_device::address_w), m_crtc.target()));
+ space.install_readwrite_handler(0xe841, 0xe841, 0, 0x3e, 0, read8smo_delegate(FUNC(mc6845_device::register_r), m_crtc.target()), write8smo_delegate(FUNC(mc6845_device::register_w), m_crtc.target()));
}
else
{
space.install_ram(0x1000, 0x017ff, m_videoram.get());
- space.install_readwrite_handler(0x1840, 0x1840, 0, 0x3f, 0, read8_delegate(FUNC(mc6845_device::status_r), m_crtc.target()), write8_delegate(FUNC(mc6845_device::address_w), m_crtc.target()));
- space.install_readwrite_handler(0x1841, 0x1841, 0, 0x3e, 0, read8_delegate(FUNC(mc6845_device::register_r), m_crtc.target()), write8_delegate(FUNC(mc6845_device::register_w), m_crtc.target()));
+ space.install_readwrite_handler(0x1840, 0x1840, 0, 0x3f, 0, read8smo_delegate(FUNC(mc6845_device::status_r), m_crtc.target()), write8smo_delegate(FUNC(mc6845_device::address_w), m_crtc.target()));
+ space.install_readwrite_handler(0x1841, 0x1841, 0, 0x3e, 0, read8smo_delegate(FUNC(mc6845_device::register_r), m_crtc.target()), write8smo_delegate(FUNC(mc6845_device::register_w), m_crtc.target()));
}
}
diff --git a/src/devices/bus/acorn/system/vib.cpp b/src/devices/bus/acorn/system/vib.cpp
index 69a5d2189a4..e392225f1e0 100644
--- a/src/devices/bus/acorn/system/vib.cpp
+++ b/src/devices/bus/acorn/system/vib.cpp
@@ -26,7 +26,8 @@ DEFINE_DEVICE_TYPE(ACORN_VIB, acorn_vib_device, "acorn_vib", "Acorn Versatile In
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(acorn_vib_device::device_add_mconfig)
+void acorn_vib_device::device_add_mconfig(machine_config &config)
+{
INPUT_MERGER_ANY_HIGH(config, m_irqs).output_handler().set(FUNC(acorn_vib_device::irq_w));
VIA6522(config, m_via6522, XTAL(1'000'000));
@@ -37,7 +38,8 @@ MACHINE_CONFIG_START(acorn_vib_device::device_add_mconfig)
CENTRONICS(config, m_centronics, centronics_devices, "printer");
m_centronics->ack_handler().set(m_via6522, FUNC(via6522_device::write_ca1));
m_centronics->busy_handler().set(m_via6522, FUNC(via6522_device::write_pa7));
- MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
+ output_latch_device &cent_data_out(OUTPUT_LATCH(config, "cent_data_out"));
+ m_centronics->set_output_latch(cent_data_out);
I8255(config, m_ppi8255, 0);
@@ -53,7 +55,7 @@ MACHINE_CONFIG_START(acorn_vib_device::device_add_mconfig)
CLOCK(config, m_acia_clock, 1.8432_MHz_XTAL);
m_acia_clock->signal_handler().set(FUNC(acorn_vib_device::write_acia_clock));
-MACHINE_CONFIG_END
+}
//**************************************************************************
// LIVE DEVICE
@@ -94,7 +96,7 @@ void acorn_vib_device::device_reset()
address_space &space = m_bus->memspace();
space.install_readwrite_handler(0x0c00, 0x0c0f, 0, 0x10, 0, read8sm_delegate(FUNC(via6522_device::read), m_via6522.target()), write8sm_delegate(FUNC(via6522_device::write), m_via6522.target()));
- space.install_readwrite_handler(0x0c20, 0x0c21, 0, 0x1e, 0, read8_delegate(FUNC(acia6850_device::read), m_acia.target()), write8_delegate(FUNC(acia6850_device::write), m_acia.target()));
+ space.install_readwrite_handler(0x0c20, 0x0c21, 0, 0x1e, 0, read8sm_delegate(FUNC(acia6850_device::read), m_acia.target()), write8sm_delegate(FUNC(acia6850_device::write), m_acia.target()));
space.install_readwrite_handler(0x0c40, 0x0c43, 0, 0x1c, 0, read8sm_delegate(FUNC(i8255_device::read), m_ppi8255.target()), write8sm_delegate(FUNC(i8255_device::write), m_ppi8255.target()));
}
diff --git a/src/devices/bus/adam/adamlink.cpp b/src/devices/bus/adam/adamlink.cpp
index f4227273421..4dc2d44b3d7 100644
--- a/src/devices/bus/adam/adamlink.cpp
+++ b/src/devices/bus/adam/adamlink.cpp
@@ -47,7 +47,7 @@ void adamlink_device::device_start()
// adam_bd_r - buffered data read
//-------------------------------------------------
-uint8_t adamlink_device::adam_bd_r(address_space &space, offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2)
+uint8_t adamlink_device::adam_bd_r(offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2)
{
if (!biorq)
{
@@ -69,7 +69,7 @@ uint8_t adamlink_device::adam_bd_r(address_space &space, offs_t offset, uint8_t
// adam_bd_w - buffered data write
//-------------------------------------------------
-void adamlink_device::adam_bd_w(address_space &space, offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2)
+void adamlink_device::adam_bd_w(offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2)
{
if (!biorq)
{
diff --git a/src/devices/bus/adam/adamlink.h b/src/devices/bus/adam/adamlink.h
index 42fd06490f9..6fb07f81c6f 100644
--- a/src/devices/bus/adam/adamlink.h
+++ b/src/devices/bus/adam/adamlink.h
@@ -33,8 +33,8 @@ protected:
virtual void device_start() override;
// device_adam_expansion_slot_card_interface overrides
- virtual uint8_t adam_bd_r(address_space &space, offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2) override;
- virtual void adam_bd_w(address_space &space, offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2) override;
+ virtual uint8_t adam_bd_r(offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2) override;
+ virtual void adam_bd_w(offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2) override;
};
diff --git a/src/devices/bus/adam/exp.cpp b/src/devices/bus/adam/exp.cpp
index c9d529a68ab..4555ed961eb 100644
--- a/src/devices/bus/adam/exp.cpp
+++ b/src/devices/bus/adam/exp.cpp
@@ -123,11 +123,11 @@ std::string adam_expansion_slot_device::get_default_card_software(get_default_ca
// bd_r - buffered data read
//-------------------------------------------------
-uint8_t adam_expansion_slot_device::bd_r(address_space &space, offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2)
+uint8_t adam_expansion_slot_device::bd_r(offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2)
{
if (m_card != nullptr)
{
- data = m_card->adam_bd_r(space, offset, data, bmreq, biorq, aux_rom_cs, cas1, cas2);
+ data = m_card->adam_bd_r(offset, data, bmreq, biorq, aux_rom_cs, cas1, cas2);
}
return data;
@@ -138,11 +138,11 @@ uint8_t adam_expansion_slot_device::bd_r(address_space &space, offs_t offset, ui
// cd_w - cartridge data write
//-------------------------------------------------
-void adam_expansion_slot_device::bd_w(address_space &space, offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2)
+void adam_expansion_slot_device::bd_w(offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2)
{
if (m_card != nullptr)
{
- m_card->adam_bd_w(space, offset, data, bmreq, biorq, aux_rom_cs, cas1, cas2);
+ m_card->adam_bd_w(offset, data, bmreq, biorq, aux_rom_cs, cas1, cas2);
}
}
diff --git a/src/devices/bus/adam/exp.h b/src/devices/bus/adam/exp.h
index 063d28b4271..618bc3d365a 100644
--- a/src/devices/bus/adam/exp.h
+++ b/src/devices/bus/adam/exp.h
@@ -51,8 +51,8 @@ public:
auto irq() { return m_write_irq.bind(); }
// computer interface
- uint8_t bd_r(address_space &space, offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2);
- void bd_w(address_space &space, offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2);
+ uint8_t bd_r(offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2);
+ void bd_w(offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2);
// cartridge interface
DECLARE_WRITE_LINE_MEMBER( irq_w ) { m_write_irq(state); }
@@ -96,8 +96,8 @@ protected:
device_adam_expansion_slot_card_interface(const machine_config &mconfig, device_t &device);
// runtime
- virtual uint8_t adam_bd_r(address_space &space, offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2) { return data; }
- virtual void adam_bd_w(address_space &space, offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2) { }
+ virtual uint8_t adam_bd_r(offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2) { return data; }
+ virtual void adam_bd_w(offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2) { }
adam_expansion_slot_device *m_slot;
diff --git a/src/devices/bus/adam/ide.cpp b/src/devices/bus/adam/ide.cpp
index fe97b7be512..98078003f4b 100644
--- a/src/devices/bus/adam/ide.cpp
+++ b/src/devices/bus/adam/ide.cpp
@@ -103,7 +103,7 @@ void powermate_ide_device::device_start()
// adam_bd_r - buffered data read
//-------------------------------------------------
-uint8_t powermate_ide_device::adam_bd_r(address_space &space, offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2)
+uint8_t powermate_ide_device::adam_bd_r(offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2)
{
if (!biorq)
{
@@ -164,7 +164,7 @@ uint8_t powermate_ide_device::adam_bd_r(address_space &space, offs_t offset, uin
// adam_bd_w - buffered data write
//-------------------------------------------------
-void powermate_ide_device::adam_bd_w(address_space &space, offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2)
+void powermate_ide_device::adam_bd_w(offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2)
{
if (!biorq)
{
diff --git a/src/devices/bus/adam/ide.h b/src/devices/bus/adam/ide.h
index 992b66aee3d..bfce0f9851f 100644
--- a/src/devices/bus/adam/ide.h
+++ b/src/devices/bus/adam/ide.h
@@ -39,8 +39,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_adam_expansion_slot_card_interface overrides
- virtual uint8_t adam_bd_r(address_space &space, offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2) override;
- virtual void adam_bd_w(address_space &space, offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2) override;
+ virtual uint8_t adam_bd_r(offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2) override;
+ 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:
required_device<ata_interface_device> m_ata;
diff --git a/src/devices/bus/adam/ram.cpp b/src/devices/bus/adam/ram.cpp
index 2a756000dc2..a7e79719867 100644
--- a/src/devices/bus/adam/ram.cpp
+++ b/src/devices/bus/adam/ram.cpp
@@ -49,7 +49,7 @@ void adam_ram_expansion_device::device_start()
// adam_bd_r - buffered data read
//-------------------------------------------------
-uint8_t adam_ram_expansion_device::adam_bd_r(address_space &space, offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2)
+uint8_t adam_ram_expansion_device::adam_bd_r(offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2)
{
if (!cas2)
{
@@ -64,7 +64,7 @@ uint8_t adam_ram_expansion_device::adam_bd_r(address_space &space, offs_t offset
// adam_bd_w - buffered data write
//-------------------------------------------------
-void adam_ram_expansion_device::adam_bd_w(address_space &space, offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2)
+void adam_ram_expansion_device::adam_bd_w(offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2)
{
if (!cas2)
{
diff --git a/src/devices/bus/adam/ram.h b/src/devices/bus/adam/ram.h
index 80ec417f3cc..780d51be726 100644
--- a/src/devices/bus/adam/ram.h
+++ b/src/devices/bus/adam/ram.h
@@ -33,8 +33,8 @@ protected:
virtual void device_start() override;
// device_adam_expansion_slot_card_interface overrides
- virtual uint8_t adam_bd_r(address_space &space, offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2) override;
- virtual void adam_bd_w(address_space &space, offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2) override;
+ virtual uint8_t adam_bd_r(offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2) override;
+ 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;
diff --git a/src/devices/bus/adamnet/adamnet.h b/src/devices/bus/adamnet/adamnet.h
index c9090bf5482..51fc46a38dd 100644
--- a/src/devices/bus/adamnet/adamnet.h
+++ b/src/devices/bus/adamnet/adamnet.h
@@ -21,17 +21,6 @@
#define ADAMNET_TAG "adamnet"
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_ADAMNET_SLOT_ADD(_tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, ADAMNET_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
diff --git a/src/devices/bus/adamnet/ddp.cpp b/src/devices/bus/adamnet/ddp.cpp
index cf267e95a36..ede3719c910 100644
--- a/src/devices/bus/adamnet/ddp.cpp
+++ b/src/devices/bus/adamnet/ddp.cpp
@@ -70,7 +70,8 @@ static const struct CassetteOptions adam_cassette_options =
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(adam_digital_data_pack_device::device_add_mconfig)
+void adam_digital_data_pack_device::device_add_mconfig(machine_config &config)
+{
M6801(config, m_maincpu, XTAL(4'000'000));
m_maincpu->set_addrmap(AS_PROGRAM, &adam_digital_data_pack_device::adam_ddp_mem);
m_maincpu->out_p1_cb().set(FUNC(adam_digital_data_pack_device::p1_w));
@@ -79,18 +80,18 @@ MACHINE_CONFIG_START(adam_digital_data_pack_device::device_add_mconfig)
// Port 3 = Multiplexed Address/Data
m_maincpu->in_p4_cb().set(FUNC(adam_digital_data_pack_device::p4_r));
- MCFG_CASSETTE_ADD("cassette")
- MCFG_CASSETTE_FORMATS(coleco_adam_cassette_formats)
- MCFG_CASSETTE_CREATE_OPTS(&adam_cassette_options)
- MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_MUTED)
- MCFG_CASSETTE_INTERFACE("adam_cass")
-
- MCFG_CASSETTE_ADD("cassette2")
- MCFG_CASSETTE_FORMATS(coleco_adam_cassette_formats)
- MCFG_CASSETTE_CREATE_OPTS(&adam_cassette_options)
- MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_MUTED)
- MCFG_CASSETTE_INTERFACE("adam_cass")
-MACHINE_CONFIG_END
+ CASSETTE(config, m_ddp0);
+ m_ddp0->set_formats(coleco_adam_cassette_formats);
+ m_ddp0->set_create_opts(&adam_cassette_options);
+ m_ddp0->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_MUTED);
+ m_ddp0->set_interface("adam_cass");
+
+ CASSETTE(config, m_ddp1);
+ m_ddp1->set_formats(coleco_adam_cassette_formats);
+ m_ddp1->set_create_opts(&adam_cassette_options);
+ m_ddp1->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_MUTED);
+ m_ddp1->set_interface("adam_cass");
+}
diff --git a/src/devices/bus/adamnet/spi.cpp b/src/devices/bus/adamnet/spi.cpp
index 612bb11c547..6ad84bbed7c 100644
--- a/src/devices/bus/adamnet/spi.cpp
+++ b/src/devices/bus/adamnet/spi.cpp
@@ -64,7 +64,8 @@ void adam_spi_device::adam_spi_mem(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(adam_spi_device::device_add_mconfig)
+void adam_spi_device::device_add_mconfig(machine_config &config)
+{
M6801(config, m_maincpu, XTAL(4'000'000));
m_maincpu->set_addrmap(AS_PROGRAM, &adam_spi_device::adam_spi_mem);
m_maincpu->in_p2_cb().set(FUNC(adam_spi_device::p2_r));
@@ -78,8 +79,9 @@ MACHINE_CONFIG_START(adam_spi_device::device_add_mconfig)
centronics_device &centronics(CENTRONICS(config, "centronics", centronics_devices, "printer"));
centronics.set_data_input_buffer("cent_data_in");
INPUT_BUFFER(config, "cent_data_in");
- MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
-MACHINE_CONFIG_END
+ output_latch_device &cent_data_out(OUTPUT_LATCH(config, "cent_data_out"));
+ centronics.set_output_latch(cent_data_out);
+}
diff --git a/src/devices/bus/amiga/zorro/a2052.cpp b/src/devices/bus/amiga/zorro/a2052.cpp
index f2cef15b32e..515c568c019 100644
--- a/src/devices/bus/amiga/zorro/a2052.cpp
+++ b/src/devices/bus/amiga/zorro/a2052.cpp
@@ -81,10 +81,10 @@ void a2052_device::autoconfig_base_address(offs_t address)
logerror("-> installing a2052\n");
// stop responding to default autoconfig
- m_slot->m_space->unmap_readwrite(0xe80000, 0xe8007f);
+ m_slot->space().unmap_readwrite(0xe80000, 0xe8007f);
// install access to the rom space
- m_slot->m_space->install_ram(address, address + m_ram.size()*2 - 1, &m_ram[0]);
+ m_slot->space().install_ram(address, address + m_ram.size()*2 - 1, &m_ram[0]);
// we're done
m_slot->cfgout_w(0);
@@ -128,7 +128,7 @@ WRITE_LINE_MEMBER( a2052_device::cfgin_w )
autoconfig_can_shutup(true); // ?
// install autoconfig handler
- m_slot->m_space->install_readwrite_handler(0xe80000, 0xe8007f,
+ m_slot->space().install_readwrite_handler(0xe80000, 0xe8007f,
read16_delegate(FUNC(amiga_autoconfig::autoconfig_read), static_cast<amiga_autoconfig *>(this)),
write16_delegate(FUNC(amiga_autoconfig::autoconfig_write), static_cast<amiga_autoconfig *>(this)), 0xffff);
}
diff --git a/src/devices/bus/amiga/zorro/a2058.cpp b/src/devices/bus/amiga/zorro/a2058.cpp
index 8fc58669d14..e8d6e8c28fb 100644
--- a/src/devices/bus/amiga/zorro/a2058.cpp
+++ b/src/devices/bus/amiga/zorro/a2058.cpp
@@ -89,10 +89,10 @@ void a2058_device::autoconfig_base_address(offs_t address)
logerror("-> installing a2058\n");
// stop responding to default autoconfig
- m_slot->m_space->unmap_readwrite(0xe80000, 0xe8007f);
+ m_slot->space().unmap_readwrite(0xe80000, 0xe8007f);
// install access to the rom space
- m_slot->m_space->install_ram(address, address + (m_ram_size << 20) - 1, m_ram.get());
+ m_slot->space().install_ram(address, address + (m_ram_size << 20) - 1, m_ram.get());
// we're done
m_slot->cfgout_w(0);
@@ -140,7 +140,7 @@ WRITE_LINE_MEMBER( a2058_device::cfgin_w )
autoconfig_can_shutup(true); // ?
// install autoconfig handler
- m_slot->m_space->install_readwrite_handler(0xe80000, 0xe8007f,
+ m_slot->space().install_readwrite_handler(0xe80000, 0xe8007f,
read16_delegate(FUNC(amiga_autoconfig::autoconfig_read), static_cast<amiga_autoconfig *>(this)),
write16_delegate(FUNC(amiga_autoconfig::autoconfig_write), static_cast<amiga_autoconfig *>(this)), 0xffff);
}
diff --git a/src/devices/bus/amiga/zorro/a2065.cpp b/src/devices/bus/amiga/zorro/a2065.cpp
index 9eb0d835db2..b1b747594cc 100644
--- a/src/devices/bus/amiga/zorro/a2065.cpp
+++ b/src/devices/bus/amiga/zorro/a2065.cpp
@@ -81,20 +81,20 @@ void a2065_device::autoconfig_base_address(offs_t address)
LOG("-> installing a2065\n");
// stop responding to default autoconfig
- m_slot->m_space->unmap_readwrite(0xe80000, 0xe8007f);
+ m_slot->space().unmap_readwrite(0xe80000, 0xe8007f);
// install autoconfig handler to new location
- m_slot->m_space->install_readwrite_handler(address, address + 0x7f,
+ m_slot->space().install_readwrite_handler(address, address + 0x7f,
read16_delegate(FUNC(amiga_autoconfig::autoconfig_read), static_cast<amiga_autoconfig *>(this)),
write16_delegate(FUNC(amiga_autoconfig::autoconfig_write), static_cast<amiga_autoconfig *>(this)), 0xffff);
// install access to lance registers
- m_slot->m_space->install_readwrite_handler(address + 0x4000, address + 0x4003,
+ m_slot->space().install_readwrite_handler(address + 0x4000, address + 0x4003,
read16_delegate(FUNC(am7990_device::regs_r), &(*m_lance)),
write16_delegate(FUNC(am7990_device::regs_w), &(*m_lance)), 0xffff);
// install access to onboard ram (32k)
- m_slot->m_space->install_readwrite_handler(address + 0x8000, address + 0x8000 + 0x7fff,
+ m_slot->space().install_readwrite_handler(address + 0x8000, address + 0x8000 + 0x7fff,
read16_delegate(FUNC(a2065_device::host_ram_r), this),
write16_delegate(FUNC(a2065_device::host_ram_w), this), 0xffff);
@@ -123,7 +123,7 @@ WRITE_LINE_MEMBER( a2065_device::cfgin_w )
autoconfig_can_shutup(true); // ?
// install autoconfig handler
- m_slot->m_space->install_readwrite_handler(0xe80000, 0xe8007f,
+ m_slot->space().install_readwrite_handler(0xe80000, 0xe8007f,
read16_delegate(FUNC(amiga_autoconfig::autoconfig_read), static_cast<amiga_autoconfig *>(this)),
write16_delegate(FUNC(amiga_autoconfig::autoconfig_write), static_cast<amiga_autoconfig *>(this)), 0xffff);
}
diff --git a/src/devices/bus/amiga/zorro/a2232.cpp b/src/devices/bus/amiga/zorro/a2232.cpp
index 41334067412..24020d7a25d 100644
--- a/src/devices/bus/amiga/zorro/a2232.cpp
+++ b/src/devices/bus/amiga/zorro/a2232.cpp
@@ -188,25 +188,25 @@ void a2232_device::autoconfig_base_address(offs_t address)
logerror("-> installing a2232\n");
// stop responding to default autoconfig
- m_slot->m_space->unmap_readwrite(0xe80000, 0xe8007f);
+ m_slot->space().unmap_readwrite(0xe80000, 0xe8007f);
- m_slot->m_space->install_readwrite_handler(address, address + 0x3fff,
+ m_slot->space().install_readwrite_handler(address, address + 0x3fff,
read16_delegate(FUNC(a2232_device::shared_ram_r), this),
write16_delegate(FUNC(a2232_device::shared_ram_w), this), 0xffff);
- m_slot->m_space->install_readwrite_handler(address + 0x4000, address + 0x4001,
+ m_slot->space().install_readwrite_handler(address + 0x4000, address + 0x4001,
read16_delegate(FUNC(a2232_device::irq_ack_r), this),
write16_delegate(FUNC(a2232_device::irq_ack_w), this), 0xffff);
- m_slot->m_space->install_readwrite_handler(address + 0x8000, address + 0x8001,
+ m_slot->space().install_readwrite_handler(address + 0x8000, address + 0x8001,
read16_delegate(FUNC(a2232_device::reset_low_r), this),
write16_delegate(FUNC(a2232_device::reset_low_w), this), 0xffff);
- m_slot->m_space->install_readwrite_handler(address + 0xa000, address + 0xa001,
+ m_slot->space().install_readwrite_handler(address + 0xa000, address + 0xa001,
read16_delegate(FUNC(a2232_device::irq_r), this),
write16_delegate(FUNC(a2232_device::irq_w), this), 0xffff);
- m_slot->m_space->install_readwrite_handler(address + 0xc000, address + 0xc001,
+ m_slot->space().install_readwrite_handler(address + 0xc000, address + 0xc001,
read16_delegate(FUNC(a2232_device::reset_high_r), this),
write16_delegate(FUNC(a2232_device::reset_high_w), this), 0xffff);
@@ -236,7 +236,7 @@ WRITE_LINE_MEMBER( a2232_device::cfgin_w )
autoconfig_can_shutup(true); // ?
// install autoconfig handler
- m_slot->m_space->install_readwrite_handler(0xe80000, 0xe8007f,
+ m_slot->space().install_readwrite_handler(0xe80000, 0xe8007f,
read16_delegate(FUNC(amiga_autoconfig::autoconfig_read), static_cast<amiga_autoconfig *>(this)),
write16_delegate(FUNC(amiga_autoconfig::autoconfig_write), static_cast<amiga_autoconfig *>(this)), 0xffff);
}
@@ -344,13 +344,13 @@ WRITE16_MEMBER( a2232_device::reset_high_w )
template<int N>
READ8_MEMBER( a2232_device::acia_r )
{
- return m_acia[N]->read(space, offset >> 1);
+ return m_acia[N]->read(offset >> 1);
}
template<int N>
WRITE8_MEMBER( a2232_device::acia_w )
{
- m_acia[N]->write(space, offset >> 1, data);
+ m_acia[N]->write(offset >> 1, data);
}
@@ -360,12 +360,12 @@ WRITE8_MEMBER( a2232_device::acia_w )
READ8_MEMBER( a2232_device::cia_r )
{
- return m_cia->read(space, offset >> 1);
+ return m_cia->read(offset >> 1);
}
WRITE8_MEMBER( a2232_device::cia_w )
{
- m_cia->write(space, offset >> 1, data);
+ m_cia->write(offset >> 1, data);
}
READ8_MEMBER( a2232_device::cia_port_a_r )
diff --git a/src/devices/bus/amiga/zorro/a590.cpp b/src/devices/bus/amiga/zorro/a590.cpp
index 32328b2f944..045a0eab7c8 100644
--- a/src/devices/bus/amiga/zorro/a590.cpp
+++ b/src/devices/bus/amiga/zorro/a590.cpp
@@ -10,8 +10,9 @@
#include "emu.h"
#include "a590.h"
-#include "bus/scsi/scsi.h"
-#include "bus/scsi/scsihd.h"
+#include "machine/nscsi_bus.h"
+#include "machine/nscsi_cd.h"
+#include "machine/nscsi_hd.h"
//**************************************************************************
@@ -114,6 +115,19 @@ ioport_constructor a2091_device::device_input_ports() const
// device_add_mconfig - add device configuration
//-------------------------------------------------
+void dmac_hdc_device::scsi_devices(device_slot_interface &device)
+{
+ device.option_add("cdrom", NSCSI_CDROM);
+ device.option_add("harddisk", NSCSI_HARDDISK);
+}
+
+void dmac_hdc_device::wd33c93(device_t *device)
+{
+ device->set_clock(10000000);
+ downcast<wd33c93a_device *>(device)->irq_cb().set(*this, FUNC(dmac_hdc_device::scsi_irq_w));
+ downcast<wd33c93a_device *>(device)->drq_cb().set(*this, FUNC(dmac_hdc_device::scsi_drq_w));
+}
+
void dmac_hdc_device::device_add_mconfig(machine_config &config)
{
amiga_dmac_device &dmac(AMIGA_DMAC(config, "dmac", 0));
@@ -122,12 +136,15 @@ void dmac_hdc_device::device_add_mconfig(machine_config &config)
dmac.int_handler().set(FUNC(dmac_hdc_device::dmac_int_w));
dmac.cfgout_handler().set(FUNC(dmac_hdc_device::dmac_cfgout_w));
- scsi_port_device &scsi(SCSI_PORT(config, "scsi"));
- scsi.set_slot_device(1, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_1));
-
- wd33c93_device &scsi_ctrl(WD33C93(config, "wd33c93"));
- scsi_ctrl.set_scsi_port("scsi");
- scsi_ctrl.irq_cb().set(FUNC(dmac_hdc_device::scsi_irq_w));
+ NSCSI_BUS(config, "scsi", 0);
+ NSCSI_CONNECTOR(config, "scsi:0", scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsi:1", scsi_devices, "harddisk", false);
+ NSCSI_CONNECTOR(config, "scsi:3", scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsi:4", scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsi:5", scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsi:6", scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsi:7").option_set("wd33c93", WD33C93A)
+ .machine_config([this](device_t *device) { wd33c93(device); });
}
@@ -205,7 +222,7 @@ dmac_hdc_device::dmac_hdc_device(const machine_config &mconfig, device_type type
device_t(mconfig, type, tag, owner, clock),
m_int6(false),
m_dmac(*this, "dmac"),
- m_wdc(*this, "wd33c93")
+ m_wdc(*this, "scsi:7:wd33c93")
{
}
@@ -243,7 +260,7 @@ void a590_device::device_start()
set_zorro_device();
// setup DMAC
- m_dmac->set_address_space(m_slot->m_space);
+ m_dmac->set_address_space(&m_slot->space());
m_dmac->set_rom(memregion("bootrom")->base());
}
@@ -252,7 +269,7 @@ void a2091_device::device_start()
set_zorro_device();
// setup DMAC
- m_dmac->set_address_space(m_slot->m_space);
+ m_dmac->set_address_space(&m_slot->space());
m_dmac->set_rom(memregion("bootrom")->base());
}
@@ -327,8 +344,8 @@ READ8_MEMBER( dmac_hdc_device::dmac_scsi_r )
{
switch (offset)
{
- case 0x48: return m_wdc->read(space, 0);
- case 0x49: return m_wdc->read(space, 1);
+ case 0x48: return m_wdc->indir_addr_r();
+ case 0x49: return m_wdc->indir_reg_r();
}
return 0xff;
@@ -338,8 +355,8 @@ WRITE8_MEMBER( dmac_hdc_device::dmac_scsi_w )
{
switch (offset)
{
- case 0x48: m_wdc->write(space, 0, data); break;
- case 0x49: m_wdc->write(space, 1, data); break;
+ case 0x48: m_wdc->indir_addr_w(data); break;
+ case 0x49: m_wdc->indir_reg_w(data); break;
}
}
@@ -356,3 +373,8 @@ WRITE_LINE_MEMBER( dmac_hdc_device::scsi_irq_w )
// should be or'ed with xt-ide IRQ
m_dmac->intx_w(state);
}
+
+WRITE_LINE_MEMBER( dmac_hdc_device::scsi_drq_w )
+{
+ m_dmac->xdreq_w(state);
+}
diff --git a/src/devices/bus/amiga/zorro/a590.h b/src/devices/bus/amiga/zorro/a590.h
index cf051fd30dc..62ea3bd189f 100644
--- a/src/devices/bus/amiga/zorro/a590.h
+++ b/src/devices/bus/amiga/zorro/a590.h
@@ -15,7 +15,7 @@
#include "zorro.h"
#include "machine/dmac.h"
-#include "machine/wd33c93.h"
+#include "machine/wd33c9x.h"
//**************************************************************************
@@ -51,7 +51,7 @@ protected:
// sub-devices
required_device<amiga_dmac_device> m_dmac;
- required_device<wd33c93_device> m_wdc;
+ required_device<wd33c93a_device> m_wdc;
std::vector<uint8_t> m_ram;
@@ -61,6 +61,10 @@ private:
DECLARE_WRITE_LINE_MEMBER( dmac_int_w );
DECLARE_WRITE_LINE_MEMBER( dmac_cfgout_w ) { cfgout_w(state); }
DECLARE_WRITE_LINE_MEMBER( scsi_irq_w );
+ DECLARE_WRITE_LINE_MEMBER( scsi_drq_w );
+
+ static void scsi_devices(device_slot_interface &device);
+ void wd33c93(device_t *device);
};
// ======================> a590_device
diff --git a/src/devices/bus/amiga/zorro/buddha.cpp b/src/devices/bus/amiga/zorro/buddha.cpp
index b82f2d8818b..376e2824660 100644
--- a/src/devices/bus/amiga/zorro/buddha.cpp
+++ b/src/devices/bus/amiga/zorro/buddha.cpp
@@ -143,18 +143,18 @@ void buddha_device::autoconfig_base_address(offs_t address)
logerror("-> installing buddha\n");
// stop responding to default autoconfig
- m_slot->m_space->unmap_readwrite(0xe80000, 0xe8007f);
+ m_slot->space().unmap_readwrite(0xe80000, 0xe8007f);
// buddha registers
- m_slot->m_space->install_device(address, address + 0xfff, *this, &buddha_device::mmio_map);
+ m_slot->space().install_device(address, address + 0xfff, *this, &buddha_device::mmio_map);
// install autoconfig handler to new location
- m_slot->m_space->install_readwrite_handler(address, address + 0x7f,
+ m_slot->space().install_readwrite_handler(address, address + 0x7f,
read16_delegate(FUNC(amiga_autoconfig::autoconfig_read), static_cast<amiga_autoconfig *>(this)),
write16_delegate(FUNC(amiga_autoconfig::autoconfig_write), static_cast<amiga_autoconfig *>(this)), 0xffff);
// install access to the rom space
- m_slot->m_space->install_rom(address + 0x1000, address + 0xffff, memregion("bootrom")->base() + 0x1000);
+ m_slot->space().install_rom(address + 0x1000, address + 0xffff, memregion("bootrom")->base() + 0x1000);
// we're done
m_slot->cfgout_w(0);
@@ -181,7 +181,7 @@ WRITE_LINE_MEMBER( buddha_device::cfgin_w )
autoconfig_rom_vector(0x1000);
// install autoconfig handler
- m_slot->m_space->install_readwrite_handler(0xe80000, 0xe8007f,
+ m_slot->space().install_readwrite_handler(0xe80000, 0xe8007f,
read16_delegate(FUNC(amiga_autoconfig::autoconfig_read), static_cast<amiga_autoconfig *>(this)),
write16_delegate(FUNC(amiga_autoconfig::autoconfig_write), static_cast<amiga_autoconfig *>(this)), 0xffff);
}
@@ -231,8 +231,8 @@ READ16_MEMBER( buddha_device::ide_0_interrupt_r )
data = m_ide_0_interrupt << 15;
- if (VERBOSE && 0)
- logerror("ide_0_interrupt_r %04x [mask = %04x]\n", data, mem_mask);
+// if (VERBOSE)
+// logerror("ide_0_interrupt_r %04x [mask = %04x]\n", data, mem_mask);
return data;
}
@@ -243,8 +243,8 @@ READ16_MEMBER( buddha_device::ide_1_interrupt_r )
data = m_ide_1_interrupt << 15;
- if (VERBOSE && 0)
- logerror("ide_1_interrupt_r %04x [mask = %04x]\n", data, mem_mask);
+// if (VERBOSE)
+// logerror("ide_1_interrupt_r %04x [mask = %04x]\n", data, mem_mask);
return data;
}
diff --git a/src/devices/bus/amiga/zorro/zorro.cpp b/src/devices/bus/amiga/zorro/zorro.cpp
index fec5d745015..b4f06507d55 100644
--- a/src/devices/bus/amiga/zorro/zorro.cpp
+++ b/src/devices/bus/amiga/zorro/zorro.cpp
@@ -30,7 +30,7 @@ zorro_slot_device::zorro_slot_device(const machine_config &mconfig, const char *
zorro_slot_device::zorro_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, type, tag, owner, clock),
device_slot_interface(mconfig, *this),
- m_zorro_tag(nullptr)
+ m_zorro_bus(*this, finder_base::DUMMY_TAG)
{
}
@@ -43,10 +43,7 @@ void zorro_slot_device::device_start()
device_zorro_card_interface *dev = dynamic_cast<device_zorro_card_interface *>(get_card_device());
if (dev)
- {
- zorro_device *m_zorro_bus = downcast<zorro_device *>(m_owner->subdevice(m_zorro_tag));
m_zorro_bus->add_card(dev);
- }
}
@@ -60,8 +57,7 @@ void zorro_slot_device::device_start()
zorro_device::zorro_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_space(nullptr),
- m_cputag(nullptr),
+ m_space(*this, finder_base::DUMMY_TAG, -1),
m_ovr_handler(*this),
m_int2_handler(*this),
m_int6_handler(*this)
@@ -69,21 +65,27 @@ zorro_device::zorro_device(const machine_config &mconfig, device_type type, cons
}
//-------------------------------------------------
-// device_start - device-specific startup
+// device_resolve_objects - resolve objects that
+// may be needed for other devices to set
+// initial conditions at start time
//-------------------------------------------------
-void zorro_device::device_start()
+void zorro_device::device_resolve_objects()
{
- // get address space
- device_t *cpu = machine().device(m_cputag);
- m_space = &cpu->memory().space(AS_PROGRAM);
-
// resolve callbacks
m_ovr_handler.resolve_safe();
m_int2_handler.resolve_safe();
m_int6_handler.resolve_safe();
}
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void zorro_device::device_start()
+{
+}
+
// from slot device
WRITE_LINE_MEMBER( zorro_device::ovr_w ) { m_ovr_handler(state); }
WRITE_LINE_MEMBER( zorro_device::int2_w ) { m_int2_handler(state); }
@@ -115,16 +117,18 @@ exp_slot_device::exp_slot_device(const machine_config &mconfig, device_type type
}
//-------------------------------------------------
-// device_start - device-specific startup
+// device_resolve_objects - resolve objects that
+// may be needed for other devices to set
+// initial conditions at start time
//-------------------------------------------------
-void exp_slot_device::device_start()
+void exp_slot_device::device_resolve_objects()
{
// resolve callbacks
m_ipl_handler.resolve_safe();
- // call base device start
- zorro_device::device_start();
+ // call base device
+ zorro_device::device_resolve_objects();
}
//-------------------------------------------------
@@ -190,10 +194,12 @@ zorro2_device::~zorro2_device()
}
//-------------------------------------------------
-// device_start - device-specific startup
+// device_resolve_objects - resolve objects that
+// may be needed for other devices to set
+// initial conditions at start time
//-------------------------------------------------
-void zorro2_device::device_start()
+void zorro2_device::device_resolve_objects()
{
// resolve callbacks
m_eint1_handler.resolve_safe();
@@ -201,8 +207,8 @@ void zorro2_device::device_start()
m_eint5_handler.resolve_safe();
m_eint7_handler.resolve_safe();
- // call base device start
- zorro_device::device_start();
+ // call base device
+ zorro_device::device_resolve_objects();
}
//-------------------------------------------------
diff --git a/src/devices/bus/amiga/zorro/zorro.h b/src/devices/bus/amiga/zorro/zorro.h
index 3686f050002..4ad72da638b 100644
--- a/src/devices/bus/amiga/zorro/zorro.h
+++ b/src/devices/bus/amiga/zorro/zorro.h
@@ -145,76 +145,6 @@
//**************************************************************************
-// CONSTANTS / MACROS
-//**************************************************************************
-
-#define EXP_SLOT_TAG "exp"
-#define ZORROBUS_TAG "zorrobus"
-
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_ZORRO_SLOT_ADD(_zorrotag, _tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, ZORRO_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- downcast<zorro_slot_device &>(*device).set_zorro_slot(this, _zorrotag);
-
-// ======================> expansion slot
-
-#define MCFG_EXPANSION_SLOT_ADD(_cputag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(EXP_SLOT_TAG, EXP_SLOT, 0) \
- device_t *temp = device; \
- downcast<zorro_device &>(*device).set_cputag(_cputag); \
- MCFG_ZORRO_SLOT_ADD(EXP_SLOT_TAG, "slot", _slot_intf, _def_slot) \
- device = temp;
-
-// callbacks
-#define MCFG_EXPANSION_SLOT_OVR_HANDLER(_devcb) \
- downcast<zorro_device &>(*device).set_ovr_handler(DEVCB_##_devcb);
-
-#define MCFG_EXPANSION_SLOT_INT2_HANDLER(_devcb) \
- downcast<zorro_device &>(*device).set_int2_handler(DEVCB_##_devcb);
-
-#define MCFG_EXPANSION_SLOT_INT6_HANDLER(_devcb) \
- downcast<zorro_device &>(*device).set_int6_handler(DEVCB_##_devcb);
-
-#define MCFG_EXPANSION_SLOT_IPL_HANDLER(_devcb) \
- downcast<exp_slot_device &>(*device).set_ipl_handler(DEVCB_##_devcb);
-
-// ======================> zorro 2 bus
-
-#define MCFG_ZORRO2_ADD(_cputag) \
- MCFG_DEVICE_ADD(ZORROBUS_TAG, ZORRO2, 0) \
- downcast<zorro_device &>(*device).set_cputag(_cputag);
-
-#define MCFG_ZORRO2_SLOT_ADD(_tag, _slot_intf, _def_slot) \
- MCFG_ZORRO_SLOT_ADD(ZORROBUS_TAG, _tag, _slot_intf, _def_slot)
-
-#define MCFG_ZORRO2_OVR_HANDLER(_devcb) \
- downcast<zorro_device &>(*device).set_ovr_handler(DEVCB_##_devcb);
-
-#define MCFG_ZORRO2_INT2_HANDLER(_devcb) \
- downcast<zorro_device &>(*device).set_int2_handler(DEVCB_##_devcb);
-
-#define MCFG_ZORRO2_INT6_HANDLER(_devcb) \
- downcast<zorro_device &>(*device).set_int6_handler(DEVCB_##_devcb);
-
-#define MCFG_ZORRO2_EINT1_HANDLER(_devcb) \
- downcast<zorro2_device &>(*device).set_eint1_handler(DEVCB_##_devcb);
-
-#define MCFG_ZORRO2_EINT4_HANDLER(_devcb) \
- downcast<zorro2_device &>(*device).set_eint4_handler(DEVCB_##_devcb);
-
-#define MCFG_ZORRO2_EINT5_HANDLER(_devcb) \
- downcast<zorro2_device &>(*device).set_eint5_handler(DEVCB_##_devcb);
-
-#define MCFG_ZORRO2_EINT7_HANDLER(_devcb) \
- downcast<zorro2_device &>(*device).set_eint7_handler(DEVCB_##_devcb);
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -222,6 +152,7 @@
class device_zorro_card_interface;
class device_exp_card_interface;
class device_zorro2_card_interface;
+class zorro_device;
// ======================> zorro slot device
@@ -230,18 +161,28 @@ class zorro_slot_device : public device_t, public device_slot_interface
public:
// construction/destruction
zorro_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T, typename O>
+ zorro_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&zorrotag, O &&opts, const char *dflt)
+ : zorro_slot_device(mconfig, tag, owner, 0)
+ {
+ set_zorro_slot(std::forward<T>(zorrotag));
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
// device-level overrides
virtual void device_start() override;
// inline configuration
- void set_zorro_slot(device_t *owner, const char *zorro_tag) { m_owner = owner; m_zorro_tag = zorro_tag; }
+ template <class T> void set_zorro_slot(T &&zorro_tag) { m_zorro_bus.set_tag(zorro_tag); }
protected:
zorro_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
// configuration
- const char *m_zorro_tag;
+ required_device<zorro_device> m_zorro_bus;
};
// device type definition
@@ -253,11 +194,11 @@ class zorro_device : public device_t
{
public:
// configuration helpers
- void set_cputag(const char *tag) { m_cputag = tag; }
+ template <class T> void set_space(T &&tag, int spacenum) { m_space.set_tag(std::forward<T>(tag), spacenum); }
- template <class Object> devcb_base &set_int2_handler(Object &&cb) { return m_int2_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_int6_handler(Object &&cb) { return m_int6_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_ovr_handler(Object &&cb) { return m_ovr_handler.set_callback(std::forward<Object>(cb)); }
+ auto int2_handler() { return m_int2_handler.bind(); }
+ auto int6_handler() { return m_int6_handler.bind(); }
+ auto ovr_handler() { return m_ovr_handler.bind(); }
virtual void add_card(device_zorro_card_interface *card) = 0;
@@ -272,17 +213,18 @@ public:
virtual void fc_w(int code) = 0;
// access to the host space
- address_space *m_space;
+ address_space &space() const { return *m_space; }
protected:
// construction/destruction
zorro_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
+ virtual void device_resolve_objects() override;
virtual void device_start() override;
private:
- const char *m_cputag;
+ required_address_space m_space;
devcb_write_line m_ovr_handler;
devcb_write_line m_int2_handler;
@@ -297,7 +239,7 @@ public:
// construction/destruction
exp_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- template <class Object> devcb_base &set_ipl_handler(Object &&cb) { return m_ipl_handler.set_callback(std::forward<Object>(cb)); }
+ auto ipl_handler() { return m_ipl_handler.bind(); }
// the expansion slot can only have a single card
virtual void add_card(device_zorro_card_interface *card) override;
@@ -312,7 +254,7 @@ protected:
exp_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual void device_start() override;
+ virtual void device_resolve_objects() override;
virtual void device_reset() override;
private:
@@ -333,10 +275,10 @@ public:
zorro2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
~zorro2_device();
- template <class Object> devcb_base &set_eint1_handler(Object &&cb) { return m_eint1_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_eint4_handler(Object &&cb) { return m_eint4_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_eint5_handler(Object &&cb) { return m_eint5_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_eint7_handler(Object &&cb) { return m_eint7_handler.set_callback(std::forward<Object>(cb)); }
+ auto eint1_handler() { return m_eint1_handler.bind(); }
+ auto eint4_handler() { return m_eint4_handler.bind(); }
+ auto eint5_handler() { return m_eint5_handler.bind(); }
+ auto eint7_handler() { return m_eint7_handler.bind(); }
// the zorro2 bus supports multiple cards
virtual void add_card(device_zorro_card_interface *card) override;
@@ -356,7 +298,7 @@ protected:
zorro2_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual void device_start() override;
+ virtual void device_resolve_objects() override;
virtual void device_reset() override;
private:
diff --git a/src/devices/bus/apf/slot.h b/src/devices/bus/apf/slot.h
index 92ebbe4ad43..3678124c3e9 100644
--- a/src/devices/bus/apf/slot.h
+++ b/src/devices/bus/apf/slot.h
@@ -59,7 +59,17 @@ class apf_cart_slot_device : public device_t,
{
public:
// construction/destruction
- apf_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ apf_cart_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : apf_cart_slot_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ apf_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
virtual ~apf_cart_slot_device();
// device-level overrides
@@ -110,8 +120,4 @@ DECLARE_DEVICE_TYPE(APF_CART_SLOT, apf_cart_slot_device)
#define APFSLOT_ROM_REGION_TAG ":cart:rom"
-#define MCFG_APF_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_tag, APF_CART_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
#endif // MAME_BUS_APF_SLOT_H
diff --git a/src/devices/bus/apricot/expansion/cards.cpp b/src/devices/bus/apricot/expansion/cards.cpp
index d2c35366e42..ef0243bf412 100644
--- a/src/devices/bus/apricot/expansion/cards.cpp
+++ b/src/devices/bus/apricot/expansion/cards.cpp
@@ -9,10 +9,12 @@
#include "emu.h"
#include "cards.h"
#include "ram.h"
+#include "winchester.h"
void apricot_expansion_cards(device_slot_interface &device)
{
device.option_add("128k", APRICOT_128K_RAM);
device.option_add("256k", APRICOT_256K_RAM);
device.option_add("512k", APRICOT_512K_RAM);
+ device.option_add("winchester", APRICOT_WINCHESTER);
}
diff --git a/src/devices/bus/apricot/expansion/expansion.cpp b/src/devices/bus/apricot/expansion/expansion.cpp
index 98141860782..5a89c9a8868 100644
--- a/src/devices/bus/apricot/expansion/expansion.cpp
+++ b/src/devices/bus/apricot/expansion/expansion.cpp
@@ -59,18 +59,16 @@ DEFINE_DEVICE_TYPE(APRICOT_EXPANSION_BUS, apricot_expansion_bus_device, "apricot
apricot_expansion_bus_device::apricot_expansion_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, APRICOT_EXPANSION_BUS, tag, owner, clock),
- m_program(nullptr),
- m_io(nullptr),
- m_program_iop(nullptr),
- m_io_iop(nullptr),
+ m_program(*this, finder_base::DUMMY_TAG, -1),
+ m_io(*this, finder_base::DUMMY_TAG, -1),
+ m_program_iop(*this, finder_base::DUMMY_TAG, -1),
+ m_io_iop(*this, finder_base::DUMMY_TAG, -1),
m_dma1_handler(*this),
m_dma2_handler(*this),
m_ext1_handler(*this),
m_ext2_handler(*this),
m_int2_handler(*this),
- m_int3_handler(*this),
- m_cpu(*this, finder_base::DUMMY_TAG),
- m_iop(*this, finder_base::DUMMY_TAG)
+ m_int3_handler(*this)
{
}
@@ -99,19 +97,6 @@ void apricot_expansion_bus_device::device_start()
}
//-------------------------------------------------
-// device_reset - device-specific reset
-//-------------------------------------------------
-
-void apricot_expansion_bus_device::device_reset()
-{
- m_program = &m_cpu->space(AS_PROGRAM);
- m_io = &m_cpu->space(AS_IO);
-
- m_program_iop = &m_iop->space(AS_PROGRAM);
- m_io_iop = &m_iop->space(AS_IO);
-}
-
-//-------------------------------------------------
// add_card - add new card to our bus
//-------------------------------------------------
diff --git a/src/devices/bus/apricot/expansion/expansion.h b/src/devices/bus/apricot/expansion/expansion.h
index 85b0e47dc5e..93c529f24e3 100644
--- a/src/devices/bus/apricot/expansion/expansion.h
+++ b/src/devices/bus/apricot/expansion/expansion.h
@@ -89,16 +89,14 @@ class apricot_expansion_bus_device : public device_t
{
public:
// construction/destruction
- template <typename T, typename U>
- apricot_expansion_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&cpu_tag, U &&iop_tag)
- : apricot_expansion_bus_device(mconfig, tag, owner, (uint32_t)0)
- {
- m_cpu.set_tag(std::forward<T>(cpu_tag));
- m_iop.set_tag(std::forward<U>(iop_tag));
- }
apricot_expansion_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~apricot_expansion_bus_device();
+ template <typename T> void set_program_space(T &&tag, int spacenum) { m_program.set_tag(std::forward<T>(tag), spacenum); }
+ template <typename T> void set_io_space(T &&tag, int spacenum) { m_io.set_tag(std::forward<T>(tag), spacenum); }
+ template <typename T> void set_program_iop_space(T &&tag, int spacenum) { m_program_iop.set_tag(std::forward<T>(tag), spacenum); }
+ template <typename T> void set_io_iop_space(T &&tag, int spacenum) { m_io_iop.set_tag(std::forward<T>(tag), spacenum); }
+
auto dma1() { return m_dma1_handler.bind(); }
auto dma2() { return m_dma2_handler.bind(); }
auto ext1() { return m_ext1_handler.bind(); }
@@ -118,19 +116,26 @@ public:
void install_ram(offs_t addrstart, offs_t addrend, void *baseptr);
+ template<typename T> void install_io_device(offs_t addrstart, offs_t addrend, T &device, void (T::*map)(class address_map &map), uint64_t unitmask = ~u64(0))
+ {
+ m_io->install_device(addrstart, addrend, device, map, unitmask);
+
+ if (m_io_iop)
+ m_io_iop->install_device(addrstart, addrend, device, map, unitmask);
+ }
+
protected:
// device-level overrides
virtual void device_start() override;
- virtual void device_reset() override;
private:
simple_list<device_apricot_expansion_card_interface> m_dev;
// address spaces we have access to
- address_space *m_program;
- address_space *m_io;
- address_space *m_program_iop;
- address_space *m_io_iop;
+ required_address_space m_program;
+ required_address_space m_io;
+ optional_address_space m_program_iop;
+ optional_address_space m_io_iop;
devcb_write_line m_dma1_handler;
devcb_write_line m_dma2_handler;
@@ -138,10 +143,6 @@ private:
devcb_write_line m_ext2_handler;
devcb_write_line m_int2_handler;
devcb_write_line m_int3_handler;
-
- // configuration
- required_device<cpu_device> m_cpu;
- required_device<cpu_device> m_iop;
};
// device type definition
diff --git a/src/devices/bus/apricot/expansion/winchester.cpp b/src/devices/bus/apricot/expansion/winchester.cpp
new file mode 100644
index 00000000000..f16752b3ede
--- /dev/null
+++ b/src/devices/bus/apricot/expansion/winchester.cpp
@@ -0,0 +1,254 @@
+// license:GPL-2.0+
+// copyright-holders:Dirk Best
+/***************************************************************************
+
+ ACT Apricot Winchester Controller
+
+ Version Rev 9
+
+***************************************************************************/
+
+#include "emu.h"
+#include "winchester.h"
+#include "imagedev/harddriv.h"
+
+//#define LOG_GENERAL (1U << 0)
+#define LOG_REGS (1U << 1)
+#define LOG_DATA (1U << 2)
+
+//#define VERBOSE (LOG_REGS)
+//#define LOG_OUTPUT_STREAM std::cout
+
+#include "logmacro.h"
+
+#define LOGREGS(...) LOGMASKED(LOG_REGS, __VA_ARGS__)
+#define LOGDATA(...) LOGMASKED(LOG_DATA, __VA_ARGS__)
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(APRICOT_WINCHESTER, apricot_winchester_device, "apricot_winchester", "Apricot Winchester Controller Board")
+
+//-------------------------------------------------
+// regs - controller register i/o map
+//-------------------------------------------------
+
+void apricot_winchester_device::regs(address_map &map)
+{
+ map(0x0e0, 0x0ef).rw(m_hdc, FUNC(wd1010_device::read), FUNC(wd1010_device::write)).umask16(0x00ff);
+ map(0x1e0, 0x1e0).rw(FUNC(apricot_winchester_device::int_r), FUNC(apricot_winchester_device::head_w<0>)).umask16(0x00ff);
+ map(0x1e2, 0x1e2).w(FUNC(apricot_winchester_device::head_w<1>)).umask16(0x00ff);
+ map(0x1e4, 0x1e4).w(FUNC(apricot_winchester_device::head_w<2>)).umask16(0x00ff);
+ map(0x1e6, 0x1e6).w(FUNC(apricot_winchester_device::drive_w<0>)).umask16(0x00ff);
+ map(0x1e8, 0x1e8).w(FUNC(apricot_winchester_device::xferd_w)).umask16(0x00ff); // transferred
+ map(0x1ea, 0x1ea).w(FUNC(apricot_winchester_device::hbcr_w)).umask16(0x00ff); // host buffer clear register
+ map(0x1ec, 0x1ec).w(FUNC(apricot_winchester_device::clksel_w)).umask16(0x00ff); // buffer chip read/write clock select (host or wdc)
+ map(0x1ee, 0x1ee).w(FUNC(apricot_winchester_device::drive_w<1>)).umask16(0x00ff);
+ map(0x1f0, 0x1f0).rw(FUNC(apricot_winchester_device::data_r), FUNC(apricot_winchester_device::data_w)).umask16(0x00ff);
+}
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void apricot_winchester_device::device_add_mconfig(machine_config &config)
+{
+ WD1010(config, m_hdc, 5000000);
+ m_hdc->out_intrq_callback().set(FUNC(apricot_winchester_device::hdc_intrq_w));
+ m_hdc->in_data_callback().set(FUNC(apricot_winchester_device::hdc_data_r));
+ m_hdc->out_data_callback().set(FUNC(apricot_winchester_device::hdc_data_w));
+
+ HARDDISK(config, "hdc:0", 0);
+ HARDDISK(config, "hdc:1", 0);
+}
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// apricot_winchester_device - constructor
+//-------------------------------------------------
+
+apricot_winchester_device::apricot_winchester_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ device_t(mconfig, APRICOT_WINCHESTER, tag, owner, clock),
+ device_apricot_expansion_card_interface(mconfig, *this),
+ m_hdc(*this, "hdc"),
+ m_ram_ptr(0),
+ m_int(0),
+ m_drive(0),
+ m_head(0),
+ m_hbcr(0),
+ m_clksel(0)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void apricot_winchester_device::device_start()
+{
+ // allocate 8-bit buffer ram (8k)
+ m_ram = std::make_unique<uint8_t[]>(0x2000);
+
+ // register for save states
+ save_pointer(NAME(m_ram), 0x2000);
+ save_item(NAME(m_ram_ptr));
+ save_item(NAME(m_int));
+ save_item(NAME(m_drive));
+ save_item(NAME(m_head));
+ save_item(NAME(m_hbcr));
+ save_item(NAME(m_clksel));
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void apricot_winchester_device::device_reset()
+{
+ m_bus->install_io_device(0x000, 0xfff, *this, &apricot_winchester_device::regs);
+}
+
+
+//**************************************************************************
+// IMPLEMENTATION
+//**************************************************************************
+
+WRITE_LINE_MEMBER( apricot_winchester_device::hdc_intrq_w )
+{
+ LOGREGS("hdc_intrq_w: %d\n", state);
+
+ m_int = state;
+ m_bus->int2_w(state);
+}
+
+READ8_MEMBER( apricot_winchester_device::hdc_data_r )
+{
+ uint8_t data = 0xff;
+
+ if (m_clksel == 1)
+ {
+ LOGDATA("hdc_data_r[%04x]\n", m_ram_ptr);
+
+ data = m_ram[m_ram_ptr];
+ if (m_ram_ptr < 0x1fff)
+ m_ram_ptr++;
+ }
+
+ return data;
+}
+
+WRITE8_MEMBER( apricot_winchester_device::hdc_data_w )
+{
+ if (m_clksel == 1)
+ {
+ LOGDATA("hdc_data_w[%04x] = %02x\n", m_ram_ptr, data);
+
+ m_ram[m_ram_ptr] = data;
+ if (m_ram_ptr < 0x1fff)
+ m_ram_ptr++;
+ }
+}
+
+READ8_MEMBER( apricot_winchester_device::int_r )
+{
+ return m_int;
+}
+
+template<int N>
+WRITE8_MEMBER( apricot_winchester_device::head_w )
+{
+ m_head = (m_head & ~(1 << N)) | (BIT(data, 0) << N);
+ LOGREGS("Select head: %d\n", m_head);
+}
+
+template<int N>
+WRITE8_MEMBER( apricot_winchester_device::drive_w )
+{
+ m_drive = (m_drive & ~(1 << N)) | (BIT(data, 0) << N);
+ LOGREGS("Select drive: %d\n", m_drive);
+
+ // forward drive status to the hdc
+ harddisk_image_device *drive = nullptr;
+
+ switch (m_drive)
+ {
+ case 0:
+ drive = nullptr;
+ break;
+ case 1:
+ drive = m_hdc->subdevice<harddisk_image_device>("0");
+ break;
+ case 2:
+ drive = m_hdc->subdevice<harddisk_image_device>("1");
+ break;
+ case 3:
+ // both (invalid?)
+ drive = nullptr;
+ break;
+ }
+
+ m_hdc->drdy_w(drive != nullptr && drive->exists());
+}
+
+WRITE8_MEMBER( apricot_winchester_device::xferd_w )
+{
+ LOGREGS("xferd_w: %02x\n", data);
+
+ m_hdc->brdy_w(BIT(data, 0));
+}
+
+WRITE8_MEMBER( apricot_winchester_device::hbcr_w )
+{
+ LOGREGS("hbcr_w: %02x\n", data);
+
+ // reset ram pointer on high->low transition
+ if (m_hbcr == 1 && data == 0)
+ m_ram_ptr = 0;
+
+ m_hbcr = BIT(data, 0);
+}
+
+WRITE8_MEMBER( apricot_winchester_device::clksel_w )
+{
+ LOGREGS("clksel_w: %02x\n", data);
+
+ m_clksel = BIT(data, 0);
+}
+
+READ8_MEMBER( apricot_winchester_device::data_r )
+{
+ uint8_t data = 0xff;
+
+ if (m_clksel == 0)
+ {
+ LOGDATA("data_r[%04x]\n", m_ram_ptr);
+
+ data = m_ram[m_ram_ptr];
+
+ // wrap or stop at end?
+ if (m_ram_ptr < 0x1fff)
+ m_ram_ptr++;
+ }
+
+ return data;
+}
+
+WRITE8_MEMBER( apricot_winchester_device::data_w )
+{
+ if (m_clksel == 0)
+ {
+ LOGDATA("data_w[%04x] = %02x\n", m_ram_ptr, data);
+
+ m_ram[m_ram_ptr] = data;
+
+ // wrap or stop at end?
+ if (m_ram_ptr < 0x1fff)
+ m_ram_ptr++;
+ }
+}
diff --git a/src/devices/bus/apricot/expansion/winchester.h b/src/devices/bus/apricot/expansion/winchester.h
new file mode 100644
index 00000000000..c4c82ab0585
--- /dev/null
+++ b/src/devices/bus/apricot/expansion/winchester.h
@@ -0,0 +1,66 @@
+// license:GPL-2.0+
+// copyright-holders:Dirk Best
+/***************************************************************************
+
+ ACT Apricot Winchester Controller
+
+***************************************************************************/
+
+#ifndef MAME_BUS_APRICOT_WINCHESTER_H
+#define MAME_BUS_APRICOT_WINCHESTER_H
+
+#pragma once
+
+#include "expansion.h"
+#include "machine/wd1010.h"
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> apricot_winchester_device
+
+class apricot_winchester_device : public device_t, public device_apricot_expansion_card_interface
+{
+public:
+ // construction/destruction
+ apricot_winchester_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device-level overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+private:
+ DECLARE_WRITE_LINE_MEMBER(hdc_intrq_w);
+ DECLARE_READ8_MEMBER(hdc_data_r);
+ DECLARE_WRITE8_MEMBER(hdc_data_w);
+ DECLARE_READ8_MEMBER(int_r);
+ template<int N> DECLARE_WRITE8_MEMBER(head_w);
+ template<int N> DECLARE_WRITE8_MEMBER(drive_w);
+ DECLARE_WRITE8_MEMBER(xferd_w);
+ DECLARE_WRITE8_MEMBER(hbcr_w);
+ DECLARE_WRITE8_MEMBER(clksel_w);
+ DECLARE_WRITE8_MEMBER(drvsel2_w);
+ DECLARE_READ8_MEMBER(data_r);
+ DECLARE_WRITE8_MEMBER(data_w);
+
+ void regs(address_map &map);
+
+ required_device<wd1010_device> m_hdc;
+
+ std::unique_ptr<uint8_t[]> m_ram;
+ unsigned m_ram_ptr;
+ int m_int;
+ int m_drive;
+ int m_head;
+ int m_hbcr;
+ int m_clksel;
+};
+
+// device type definition
+DECLARE_DEVICE_TYPE(APRICOT_WINCHESTER, apricot_winchester_device)
+
+#endif // MAME_BUS_APRICOT_WINCHESTER_H
diff --git a/src/devices/bus/apricot/keyboard/hle.cpp b/src/devices/bus/apricot/keyboard/hle.cpp
index c8df35cd0cb..28e98b9fb50 100644
--- a/src/devices/bus/apricot/keyboard/hle.cpp
+++ b/src/devices/bus/apricot/keyboard/hle.cpp
@@ -6,7 +6,6 @@
TODO:
- MicroScreen emulation
- - Mouse emulation
- LEDs
Keyboard to System:
@@ -188,6 +187,17 @@ static INPUT_PORTS_START( keyboard )
PORT_START("row_c")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD))
+
+ PORT_START("mouse_b")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_NAME("Mouse Right Button")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_NAME("Mouse Left Button")
+ PORT_BIT(0x0c, IP_ACTIVE_HIGH, IPT_UNUSED)
+
+ PORT_START("mouse_x")
+ PORT_BIT(0xff, 0x00, IPT_MOUSE_X) PORT_SENSITIVITY(75) PORT_KEYDELTA(5)
+
+ PORT_START("mouse_y")
+ PORT_BIT(0xff, 0x00, IPT_MOUSE_Y) PORT_SENSITIVITY(50) PORT_KEYDELTA(5)
INPUT_PORTS_END
ioport_constructor apricot_keyboard_hle_device::device_input_ports() const
@@ -195,9 +205,12 @@ ioport_constructor apricot_keyboard_hle_device::device_input_ports() const
return INPUT_PORTS_NAME( keyboard );
}
-MACHINE_CONFIG_START(apricot_keyboard_hle_device::device_add_mconfig)
- MCFG_DEVICE_ADD("rtc", MSM5832, 32.768_kHz_XTAL)
-MACHINE_CONFIG_END
+void apricot_keyboard_hle_device::device_add_mconfig(machine_config &config)
+{
+ MSM5832(config, m_rtc, 32.768_kHz_XTAL);
+
+ TIMER(config, "timer").configure_periodic(FUNC(apricot_keyboard_hle_device::mouse_callback), attotime::from_hz(60));
+}
//**************************************************************************
@@ -214,7 +227,12 @@ apricot_keyboard_hle_device::apricot_keyboard_hle_device(const machine_config &m
device_buffered_serial_interface(mconfig, *this),
device_matrix_keyboard_interface(mconfig, *this, "row_0", "row_1", "row_2", "row_3", "row_4", "row_5", "row_6", "row_7", "row_8", "row_9", "row_a", "row_b", "row_c"),
m_rtc(*this, "rtc"),
- m_rtc_index(0)
+ m_mouse_b(*this, "mouse_b"),
+ m_mouse_x(*this, "mouse_x"),
+ m_mouse_y(*this, "mouse_y"),
+ m_rtc_index(0),
+ m_mouse_enabled(false),
+ m_mouse_last_b(0), m_mouse_last_x(0), m_mouse_last_y(0)
{
}
@@ -224,6 +242,12 @@ apricot_keyboard_hle_device::apricot_keyboard_hle_device(const machine_config &m
void apricot_keyboard_hle_device::device_start()
{
+ // register for save states
+ save_item(NAME(m_rtc_index));
+ save_item(NAME(m_mouse_enabled));
+ save_item(NAME(m_mouse_last_b));
+ save_item(NAME(m_mouse_last_x));
+ save_item(NAME(m_mouse_last_y));
}
//-------------------------------------------------
@@ -308,6 +332,16 @@ void apricot_keyboard_hle_device::received_byte(uint8_t byte)
break;
+ case CMD_ENABLE_MOUSE:
+ logerror("System enables mouse\n");
+ m_mouse_enabled = true;
+ break;
+
+ case CMD_DISABLE_MOUSE:
+ logerror("System disables mouse\n");
+ m_mouse_enabled = false;
+ break;
+
case CMD_KEYBOARD_RESET:
logerror("System requests keyboard reset\n");
transmit_byte(ACK_DIAGNOSTICS);
@@ -347,3 +381,44 @@ void apricot_keyboard_hle_device::out_w(int state)
{
device_buffered_serial_interface::rx_w(state);
}
+
+//-------------------------------------------------
+// mouse_callback - check for new mouse events
+//-------------------------------------------------
+
+TIMER_DEVICE_CALLBACK_MEMBER( apricot_keyboard_hle_device::mouse_callback )
+{
+ if (m_mouse_enabled)
+ {
+ // get mouse state
+ uint8_t buttons = m_mouse_b->read();
+ uint8_t x = m_mouse_x->read();
+ uint8_t y = m_mouse_y->read();
+
+ // anything changed since last time?
+ if (buttons != m_mouse_last_b || x != m_mouse_last_x || y != m_mouse_last_y)
+ {
+ // mouse header
+ transmit_byte(0xef);
+
+ // button state
+ transmit_byte(0x70 | buttons);
+
+ int8_t dx = x - m_mouse_last_x;
+ int8_t dy = y - m_mouse_last_y;
+
+ // y direction change
+ transmit_byte(0x70 | ((dy >> 4) & 0x0f));
+ transmit_byte(0x70 | ((dy >> 0) & 0x0f));
+
+ // x direction change
+ transmit_byte(0x70 | ((dx >> 4) & 0x0f));
+ transmit_byte(0x70 | ((dx >> 0) & 0x0f));
+
+ // save mouse state for next run
+ m_mouse_last_b = buttons;
+ m_mouse_last_x = x;
+ m_mouse_last_y = y;
+ }
+ }
+}
diff --git a/src/devices/bus/apricot/keyboard/hle.h b/src/devices/bus/apricot/keyboard/hle.h
index 5565ff6026a..c9738598a57 100644
--- a/src/devices/bus/apricot/keyboard/hle.h
+++ b/src/devices/bus/apricot/keyboard/hle.h
@@ -14,6 +14,7 @@
#include "keyboard.h"
#include "machine/keyboard.h"
#include "machine/msm5832.h"
+#include "machine/timer.h"
#include "diserial.h"
@@ -51,9 +52,13 @@ protected:
virtual void key_break(uint8_t row, uint8_t column) override;
private:
+ TIMER_DEVICE_CALLBACK_MEMBER(mouse_callback);
+
enum {
CMD_REQ_TIME_AND_DATE = 0xe1,
CMD_SET_TIME_AND_DATE = 0xe4,
+ CMD_ENABLE_MOUSE = 0xe5,
+ CMD_DISABLE_MOUSE = 0xe6,
CMD_KEYBOARD_RESET = 0xe8
};
@@ -62,8 +67,15 @@ private:
};
required_device<msm5832_device> m_rtc;
+ required_ioport m_mouse_b;
+ required_ioport m_mouse_x;
+ required_ioport m_mouse_y;
int m_rtc_index;
+ bool m_mouse_enabled;
+ uint8_t m_mouse_last_b;
+ uint8_t m_mouse_last_x;
+ uint8_t m_mouse_last_y;
};
diff --git a/src/devices/bus/astrocde/accessory.cpp b/src/devices/bus/astrocde/accessory.cpp
new file mode 100644
index 00000000000..fe7727b855d
--- /dev/null
+++ b/src/devices/bus/astrocde/accessory.cpp
@@ -0,0 +1,112 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+
+#include "emu.h"
+#include "accessory.h"
+
+#include <cassert>
+
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(ASTROCADE_ACCESSORY_PORT, astrocade_accessory_port_device, "astrocade_accessory_port", "Bally Astrocade Accessory Port")
+
+
+//**************************************************************************
+// Bally Astrocade accessory interface
+//**************************************************************************
+
+device_astrocade_accessory_interface::device_astrocade_accessory_interface(const machine_config &mconfig, device_t &device)
+ : device_slot_card_interface(mconfig, device)
+ , m_port(dynamic_cast<astrocade_accessory_port_device *>(device.owner()))
+{
+}
+
+device_astrocade_accessory_interface::~device_astrocade_accessory_interface()
+{
+}
+
+void device_astrocade_accessory_interface::interface_validity_check(validity_checker &valid) const
+{
+ device_slot_card_interface::interface_validity_check(valid);
+
+ if (device().owner() && !m_port)
+ {
+ osd_printf_error("Owner device %s (%s) is not an astrocade_accessory_port_device\n", device().owner()->tag(), device().owner()->name());
+ }
+}
+
+void device_astrocade_accessory_interface::interface_pre_start()
+{
+ device_slot_card_interface::interface_pre_start();
+
+ if (m_port && !m_port->started())
+ throw device_missing_dependencies();
+}
+
+
+//**************************************************************************
+// Bally Astrocade accessory port
+//**************************************************************************
+
+astrocade_accessory_port_device::astrocade_accessory_port_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, ASTROCADE_ACCESSORY_PORT, tag, owner, clock)
+ , device_slot_interface(mconfig, *this)
+ , m_ltpen(0)
+ , m_ltpen_handler(*this)
+ , m_screen(*this, finder_base::DUMMY_TAG)
+ , m_device(nullptr)
+{
+}
+
+astrocade_accessory_port_device::~astrocade_accessory_port_device()
+{
+}
+
+void astrocade_accessory_port_device::device_validity_check(validity_checker &valid) const
+{
+ device_t *const card(get_card_device());
+ if (card && !dynamic_cast<device_astrocade_accessory_interface *>(card))
+ {
+ osd_printf_error("Card device %s (%s) does not implement device_astrocade_accessory_interface\n", card->tag(), card->name());
+ }
+}
+
+void astrocade_accessory_port_device::device_resolve_objects()
+{
+ device_astrocade_accessory_interface *const card(dynamic_cast<device_astrocade_accessory_interface *>(get_card_device()));
+ if (card)
+ {
+ m_device = card;
+ m_device->set_screen(m_screen);
+ }
+
+ m_ltpen_handler.resolve_safe();
+}
+
+void astrocade_accessory_port_device::device_start()
+{
+ device_t *const card(get_card_device());
+ if (card)
+ {
+ if (!m_device)
+ {
+ throw emu_fatalerror("astrocade_accessory_port_device: card device %s (%s) does not implement device_astrocade_accessory_interface\n", card->tag(), card->name());
+ }
+ }
+
+ save_item(NAME(m_ltpen));
+
+ m_ltpen = 0;
+
+ m_ltpen_handler(0);
+}
+
+#include "lightpen.h"
+
+void astrocade_accessories(device_slot_interface &device)
+{
+ device.option_add("lightpen", ASTROCADE_LIGHTPEN);
+}
diff --git a/src/devices/bus/astrocde/accessory.h b/src/devices/bus/astrocde/accessory.h
new file mode 100644
index 00000000000..d745e464cd2
--- /dev/null
+++ b/src/devices/bus/astrocde/accessory.h
@@ -0,0 +1,99 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+#ifndef MAME_BUS_ASTROCDE_ACCESSORY_H
+#define MAME_BUS_ASTROCDE_ACCESSORY_H
+
+#pragma once
+
+#include "screen.h"
+
+
+/***************************************************************************
+ FORWARD DECLARATIONS
+ ***************************************************************************/
+
+class device_astrocade_accessory_interface;
+
+
+/***************************************************************************
+ TYPE DEFINITIONS
+ ***************************************************************************/
+
+// ======================> astrocade_accessory_port_device
+
+class astrocade_accessory_port_device : public device_t, public device_slot_interface
+{
+public:
+ // construction/destruction
+ template <typename T, typename U>
+ astrocade_accessory_port_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&screen_tag, U &&opts, char const *dflt)
+ : astrocade_accessory_port_device(mconfig, tag, owner, 0U)
+ {
+ m_screen.set_tag(std::forward<T>(screen_tag));
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+ astrocade_accessory_port_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock = 0U);
+ virtual ~astrocade_accessory_port_device();
+
+ auto ltpen_handler() { return m_ltpen_handler.bind(); }
+
+protected:
+ // device_t implementation
+ virtual void device_validity_check(validity_checker &valid) const override ATTR_COLD;
+ virtual void device_resolve_objects() override;
+ virtual void device_start() override;
+
+ int m_ltpen;
+ devcb_write_line m_ltpen_handler;
+ required_device<screen_device> m_screen;
+
+private:
+ device_astrocade_accessory_interface *m_device;
+
+ friend class device_astrocade_accessory_interface;
+};
+
+
+// ======================> device_astrocade_accessory_interface
+
+class device_astrocade_accessory_interface : public device_slot_card_interface
+{
+public:
+ virtual ~device_astrocade_accessory_interface();
+
+ DECLARE_WRITE_LINE_MEMBER( write_ltpen ) { m_port->m_ltpen = state; m_port->m_ltpen_handler(state); }
+
+protected:
+ device_astrocade_accessory_interface(machine_config const &mconfig, device_t &device);
+
+ // device_interface implementation
+ virtual void interface_validity_check(validity_checker &valid) const override ATTR_COLD;
+ virtual void interface_pre_start() override;
+
+ void set_screen(screen_device *screen) { m_screen = screen; }
+ screen_device *m_screen;
+
+private:
+ astrocade_accessory_port_device *const m_port;
+
+ friend class astrocade_accessory_port_device;
+};
+
+
+/***************************************************************************
+ FUNCTIONS
+ ***************************************************************************/
+
+void astrocade_accessories(device_slot_interface &device);
+
+
+/***************************************************************************
+ DEVICE TYPES
+ ***************************************************************************/
+
+DECLARE_DEVICE_TYPE(ASTROCADE_ACCESSORY_PORT, astrocade_accessory_port_device)
+
+#endif // MAME_BUS_ASTROCDE_ACCESSORY_H
diff --git a/src/devices/bus/astrocde/cassette.cpp b/src/devices/bus/astrocde/cassette.cpp
new file mode 100644
index 00000000000..3e4cc80deb8
--- /dev/null
+++ b/src/devices/bus/astrocde/cassette.cpp
@@ -0,0 +1,130 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+//
+// Decoding is done in hardware by an external box, and decoded bits are fed to bit 0 of the controller port,
+// with sync bits being fed to bit 1. The current HLE is not remotely accurate to hardware, but works.
+
+#include "emu.h"
+#include "cassette.h"
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(ASTROCADE_CASSETTE, astrocade_cassette_device, "astrocade_cass", "Bally Astrocade Cassette")
+
+
+//**************************************************************************
+// Bally Astrocade cassette input
+//**************************************************************************
+
+astrocade_cassette_device::astrocade_cassette_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, ASTROCADE_CASSETTE, tag, owner, clock)
+ , device_astrocade_ctrl_interface(mconfig, *this)
+ , m_cassette(*this, "cassette")
+{
+}
+
+astrocade_cassette_device::~astrocade_cassette_device()
+{
+}
+
+void astrocade_cassette_device::device_start()
+{
+ save_item(NAME(m_cass_wave));
+ save_item(NAME(m_cass_delta));
+ save_item(NAME(m_cass_wave_ticks));
+ save_item(NAME(m_cass_cycles));
+ save_item(NAME(m_cass_mark));
+}
+
+void astrocade_cassette_device::device_reset()
+{
+ m_cass_wave = 0.0;
+ m_cass_delta = 0.0;
+ m_cass_wave_ticks = 0;
+ m_cass_cycles = 0;
+ m_cass_mark = false;
+}
+
+uint8_t astrocade_cassette_device::read_handle()
+{
+ if (m_cass_data.size())
+ {
+ const uint8_t data = m_cass_data.front();
+ m_cass_data.pop();
+ return data;
+ }
+ return 0;
+}
+
+uint8_t astrocade_cassette_device::read_knob()
+{
+ return 0;
+}
+
+TIMER_DEVICE_CALLBACK_MEMBER(astrocade_cassette_device::check_cassette_wave)
+{
+ if (m_cassette->get_state() & CASSETTE_MOTOR_DISABLED)
+ return;
+
+ double old_cass_wave = m_cass_wave;
+ m_cass_wave = m_cassette->input();
+
+ bool cycled = false;
+ if (old_cass_wave != m_cass_wave)
+ {
+ double old_delta = m_cass_delta;
+ m_cass_delta = m_cass_wave - old_cass_wave;
+ if (old_delta < 0.0 && m_cass_delta > 0.0)
+ {
+ cycled = true;
+ }
+ }
+
+ if (cycled)
+ {
+ m_cass_mark = m_cass_wave_ticks <= 30;
+
+ m_cass_wave_ticks = 0;
+
+ m_cass_cycles++;
+ if (m_cass_mark)
+ {
+ if (m_cass_cycles >= 8)
+ {
+ m_cass_data.push(1);
+ m_cass_cycles = 0;
+ }
+ }
+ else
+ {
+ if (m_cass_cycles >= 4)
+ {
+ m_cass_data.push(0);
+ m_cass_cycles = 0;
+ }
+ }
+ }
+
+ m_cass_wave_ticks++;
+}
+
+TIMER_DEVICE_CALLBACK_MEMBER(astrocade_cassette_device::pulse_cassette_clock)
+{
+ if (m_cass_data.size())
+ {
+ write_ltpen(1);
+ write_ltpen(0);
+ }
+}
+
+void astrocade_cassette_device::device_add_mconfig(machine_config &config)
+{
+ CASSETTE(config, m_cassette);
+ m_cassette->set_default_state(CASSETTE_STOPPED);
+ m_cassette->set_interface("astrocade_cass");
+
+ TIMER(config, "kcs_hle").configure_periodic(FUNC(astrocade_cassette_device::check_cassette_wave), attotime::from_hz(48000));
+ TIMER(config, "kcs_clk").configure_periodic(FUNC(astrocade_cassette_device::pulse_cassette_clock), attotime::from_hz(300));
+}
diff --git a/src/devices/bus/astrocde/cassette.h b/src/devices/bus/astrocde/cassette.h
new file mode 100644
index 00000000000..d36e8a1bfd7
--- /dev/null
+++ b/src/devices/bus/astrocde/cassette.h
@@ -0,0 +1,61 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+#ifndef MAME_BUS_ASTROCDE_CASSETTE_H
+#define MAME_BUS_ASTROCDE_CASSETTE_H
+
+#pragma once
+
+#include "ctrl.h"
+#include "imagedev/cassette.h"
+#include "machine/timer.h"
+
+#include <queue>
+
+
+/***************************************************************************
+ TYPE DEFINITIONS
+ ***************************************************************************/
+
+// ======================> astrocade_cassette_device
+
+class astrocade_cassette_device : public device_t,
+ public device_astrocade_ctrl_interface
+{
+public:
+ static constexpr feature_type imperfect_features() { return feature::TAPE; }
+
+ // construction/destruction
+ astrocade_cassette_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock = 0U);
+ virtual ~astrocade_cassette_device();
+
+ // device_astrocade_ctrl_interface implementation
+ virtual uint8_t read_handle() override;
+ virtual uint8_t read_knob() override;
+
+protected:
+ // device_t implementation
+ virtual void device_start() override;
+ virtual void device_reset() override;
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ TIMER_DEVICE_CALLBACK_MEMBER(check_cassette_wave);
+ TIMER_DEVICE_CALLBACK_MEMBER(pulse_cassette_clock);
+
+private:
+ required_device<cassette_image_device> m_cassette;
+ double m_cass_wave;
+ double m_cass_delta;
+ uint32_t m_cass_wave_ticks;
+ uint32_t m_cass_cycles;
+ bool m_cass_mark;
+ std::queue<uint8_t> m_cass_data;
+};
+
+
+/***************************************************************************
+ DEVICE TYPES
+ ***************************************************************************/
+
+DECLARE_DEVICE_TYPE(ASTROCADE_CASSETTE, astrocade_cassette_device)
+
+#endif // MAME_BUS_ASTROCDE_CASSETTE_H
diff --git a/src/devices/bus/astrocde/ctrl.cpp b/src/devices/bus/astrocde/ctrl.cpp
new file mode 100644
index 00000000000..89cd60ca6a5
--- /dev/null
+++ b/src/devices/bus/astrocde/ctrl.cpp
@@ -0,0 +1,120 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+
+#include "emu.h"
+#include "ctrl.h"
+
+#include <cassert>
+
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(ASTROCADE_CTRL_PORT, astrocade_ctrl_port_device, "astrocade_ctrl_port", "Bally Astrocade Control Port")
+
+
+//**************************************************************************
+// Bally Astrocade controller interface
+//**************************************************************************
+
+device_astrocade_ctrl_interface::device_astrocade_ctrl_interface(const machine_config &mconfig, device_t &device)
+ : device_slot_card_interface(mconfig, device)
+ , m_port(dynamic_cast<astrocade_ctrl_port_device *>(device.owner()))
+{
+}
+
+device_astrocade_ctrl_interface::~device_astrocade_ctrl_interface()
+{
+}
+
+void device_astrocade_ctrl_interface::interface_validity_check(validity_checker &valid) const
+{
+ device_slot_card_interface::interface_validity_check(valid);
+
+ if (device().owner() && !m_port)
+ {
+ osd_printf_error("Owner device %s (%s) is not an astrocade_ctrl_port_device\n", device().owner()->tag(), device().owner()->name());
+ }
+}
+
+void device_astrocade_ctrl_interface::interface_pre_start()
+{
+ device_slot_card_interface::interface_pre_start();
+
+ if (m_port && !m_port->started())
+ throw device_missing_dependencies();
+}
+
+
+//**************************************************************************
+// Bally Astrocade controller port
+//**************************************************************************
+
+astrocade_ctrl_port_device::astrocade_ctrl_port_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, ASTROCADE_CTRL_PORT, tag, owner, clock)
+ , device_slot_interface(mconfig, *this)
+ , m_ltpen(0)
+ , m_ltpen_handler(*this)
+ , m_device(nullptr)
+{
+}
+
+astrocade_ctrl_port_device::~astrocade_ctrl_port_device()
+{
+}
+
+void astrocade_ctrl_port_device::device_validity_check(validity_checker &valid) const
+{
+ device_t *const card(get_card_device());
+ if (card && !dynamic_cast<device_astrocade_ctrl_interface *>(card))
+ {
+ osd_printf_error("Card device %s (%s) does not implement device_astrocade_ctrl_interface\n", card->tag(), card->name());
+ }
+}
+
+void astrocade_ctrl_port_device::device_resolve_objects()
+{
+ device_astrocade_ctrl_interface *const card(dynamic_cast<device_astrocade_ctrl_interface *>(get_card_device()));
+ if (card)
+ m_device = card;
+
+ m_ltpen_handler.resolve_safe();
+}
+
+void astrocade_ctrl_port_device::device_start()
+{
+ device_t *const card(get_card_device());
+ if (card)
+ {
+ if (!m_device)
+ {
+ throw emu_fatalerror("astrocade_ctrl_port_device: card device %s (%s) does not implement device_astrocade_ctrl_interface\n", card->tag(), card->name());
+ }
+ }
+
+ save_item(NAME(m_ltpen));
+
+ m_ltpen = 0;
+
+ m_ltpen_handler(0);
+}
+
+uint8_t astrocade_ctrl_port_device::read_handle()
+{
+ return m_device ? m_device->read_handle() : 0;
+}
+
+uint8_t astrocade_ctrl_port_device::read_knob()
+{
+ return m_device ? m_device->read_knob() : 0;
+}
+
+#include "joy.h"
+#include "cassette.h"
+
+void astrocade_controllers(device_slot_interface &device)
+{
+ device.option_add("joy", ASTROCADE_JOY);
+ device.option_add("cassette", ASTROCADE_CASSETTE);
+}
diff --git a/src/devices/bus/astrocde/ctrl.h b/src/devices/bus/astrocde/ctrl.h
new file mode 100644
index 00000000000..0cc34ea4dcc
--- /dev/null
+++ b/src/devices/bus/astrocde/ctrl.h
@@ -0,0 +1,98 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+#ifndef MAME_BUS_ASTROCDE_CTRL_H
+#define MAME_BUS_ASTROCDE_CTRL_H
+
+#pragma once
+
+
+/***************************************************************************
+ FORWARD DECLARATIONS
+ ***************************************************************************/
+
+class device_astrocade_ctrl_interface;
+
+
+/***************************************************************************
+ TYPE DEFINITIONS
+ ***************************************************************************/
+
+// ======================> astrocade_ctrl_port_device
+
+class astrocade_ctrl_port_device : public device_t, public device_slot_interface
+{
+public:
+ // construction/destruction
+ template <typename T>
+ astrocade_ctrl_port_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : astrocade_ctrl_port_device(mconfig, tag, owner, 0U)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+ astrocade_ctrl_port_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock = 0U);
+ virtual ~astrocade_ctrl_port_device();
+
+ auto ltpen_handler() { return m_ltpen_handler.bind(); }
+
+ uint8_t read_handle();
+ uint8_t read_knob();
+
+protected:
+ // device_t implementation
+ virtual void device_validity_check(validity_checker &valid) const override ATTR_COLD;
+ virtual void device_resolve_objects() override;
+ virtual void device_start() override;
+
+ int m_ltpen;
+ devcb_write_line m_ltpen_handler;
+
+private:
+ device_astrocade_ctrl_interface *m_device;
+
+ friend class device_astrocade_ctrl_interface;
+};
+
+
+// ======================> device_astrocade_ctrl_interface
+
+class device_astrocade_ctrl_interface : public device_slot_card_interface
+{
+public:
+ virtual ~device_astrocade_ctrl_interface();
+
+ virtual uint8_t read_handle() { return 0; }
+ virtual uint8_t read_knob() { return 0; }
+
+ DECLARE_WRITE_LINE_MEMBER( write_ltpen ) { m_port->m_ltpen = state; m_port->m_ltpen_handler(state); }
+
+protected:
+ device_astrocade_ctrl_interface(machine_config const &mconfig, device_t &device);
+
+ // device_interface implementation
+ virtual void interface_validity_check(validity_checker &valid) const override ATTR_COLD;
+ virtual void interface_pre_start() override;
+
+private:
+ astrocade_ctrl_port_device *const m_port;
+
+ friend class astrocade_ctrl_port_device;
+};
+
+
+/***************************************************************************
+ FUNCTIONS
+ ***************************************************************************/
+
+void astrocade_controllers(device_slot_interface &device);
+
+
+/***************************************************************************
+ DEVICE TYPES
+ ***************************************************************************/
+
+DECLARE_DEVICE_TYPE(ASTROCADE_CTRL_PORT, astrocade_ctrl_port_device)
+
+#endif // MAME_BUS_ASTROCDE_CTRL_H
diff --git a/src/devices/bus/astrocde/exp.cpp b/src/devices/bus/astrocde/exp.cpp
index 40b6fbecbc4..9fe3c9f3fda 100644
--- a/src/devices/bus/astrocde/exp.cpp
+++ b/src/devices/bus/astrocde/exp.cpp
@@ -74,6 +74,14 @@ READ8_MEMBER(astrocade_exp_device::read)
return 0xff;
}
+READ8_MEMBER(astrocade_exp_device::read_io)
+{
+ if (m_card)
+ return m_card->read_io(space, offset);
+ else
+ return 0xff;
+}
+
/*-------------------------------------------------
write
-------------------------------------------------*/
@@ -83,3 +91,9 @@ WRITE8_MEMBER(astrocade_exp_device::write)
if (m_card)
m_card->write(space, offset, data);
}
+
+WRITE8_MEMBER(astrocade_exp_device::write_io)
+{
+ if (m_card)
+ m_card->write_io(space, offset, data);
+}
diff --git a/src/devices/bus/astrocde/exp.h b/src/devices/bus/astrocde/exp.h
index e6c97862224..a01db130974 100644
--- a/src/devices/bus/astrocde/exp.h
+++ b/src/devices/bus/astrocde/exp.h
@@ -14,6 +14,8 @@ public:
// reading and writing
virtual DECLARE_READ8_MEMBER(read) { return 0xff; }
virtual DECLARE_WRITE8_MEMBER(write) { }
+ virtual DECLARE_READ8_MEMBER(read_io) { return 0xff; }
+ virtual DECLARE_WRITE8_MEMBER(write_io) { }
protected:
device_astrocade_card_interface(const machine_config &mconfig, device_t &device);
@@ -46,6 +48,8 @@ public:
// reading and writing
virtual DECLARE_READ8_MEMBER(read);
virtual DECLARE_WRITE8_MEMBER(write);
+ virtual DECLARE_READ8_MEMBER(read_io);
+ virtual DECLARE_WRITE8_MEMBER(write_io);
protected:
bool m_card_mounted;
diff --git a/src/devices/bus/astrocde/joy.cpp b/src/devices/bus/astrocde/joy.cpp
new file mode 100644
index 00000000000..cbf75da0c5c
--- /dev/null
+++ b/src/devices/bus/astrocde/joy.cpp
@@ -0,0 +1,56 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+
+#include "emu.h"
+#include "joy.h"
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(ASTROCADE_JOY, astrocade_joy_device, "astrocade_joy", "Bally Astrocade Joystick")
+
+
+//**************************************************************************
+// Bally Astrocade joystick control
+//**************************************************************************
+
+astrocade_joy_device::astrocade_joy_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, ASTROCADE_JOY, tag, owner, clock)
+ , device_astrocade_ctrl_interface(mconfig, *this)
+ , m_handle(*this, "HANDLE")
+ , m_knob(*this, "KNOB")
+{
+}
+
+astrocade_joy_device::~astrocade_joy_device()
+{
+}
+
+uint8_t astrocade_joy_device::read_handle()
+{
+ return m_handle->read();
+}
+
+uint8_t astrocade_joy_device::read_knob()
+{
+ return m_knob->read();
+}
+
+static INPUT_PORTS_START( astrocade_joy )
+ PORT_START("HANDLE")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP) PORT_8WAY
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN) PORT_8WAY
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT) PORT_8WAY
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT) PORT_8WAY
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_BUTTON1)
+ PORT_BIT(0xe0, IP_ACTIVE_HIGH, IPT_UNUSED)
+
+ PORT_START("KNOB")
+ PORT_BIT(0xff, 0x00, IPT_PADDLE) PORT_INVERT PORT_SENSITIVITY(85) PORT_KEYDELTA(10) PORT_CENTERDELTA(0) PORT_MINMAX(0,255) PORT_CODE_DEC(KEYCODE_Z) PORT_CODE_INC(KEYCODE_X)
+INPUT_PORTS_END
+
+ioport_constructor astrocade_joy_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( astrocade_joy );
+}
diff --git a/src/devices/bus/astrocde/joy.h b/src/devices/bus/astrocde/joy.h
new file mode 100644
index 00000000000..bb8f755c845
--- /dev/null
+++ b/src/devices/bus/astrocde/joy.h
@@ -0,0 +1,45 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+#ifndef MAME_BUS_ASTROCDE_JOY_H
+#define MAME_BUS_ASTROCDE_JOY_H
+
+#pragma once
+
+#include "ctrl.h"
+
+/***************************************************************************
+ TYPE DEFINITIONS
+ ***************************************************************************/
+
+// ======================> astrocade_joy_device
+
+class astrocade_joy_device : public device_t,
+ public device_astrocade_ctrl_interface
+{
+public:
+ // construction/destruction
+ astrocade_joy_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock = 0U);
+ virtual ~astrocade_joy_device();
+
+ // device_astrocade_ctrl_interface implementation
+ virtual uint8_t read_handle() override;
+ virtual uint8_t read_knob() override;
+
+protected:
+ // device_t implementation
+ virtual ioport_constructor device_input_ports() const override;
+ virtual void device_start() override { }
+
+private:
+ required_ioport m_handle;
+ required_ioport m_knob;
+};
+
+
+/***************************************************************************
+ DEVICE TYPES
+ ***************************************************************************/
+
+DECLARE_DEVICE_TYPE(ASTROCADE_JOY, astrocade_joy_device)
+
+#endif // MAME_BUS_ASTROCDE_JOY_H
diff --git a/src/devices/bus/astrocde/lightpen.cpp b/src/devices/bus/astrocde/lightpen.cpp
new file mode 100644
index 00000000000..e31eed122be
--- /dev/null
+++ b/src/devices/bus/astrocde/lightpen.cpp
@@ -0,0 +1,87 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+
+#include "emu.h"
+#include "lightpen.h"
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(ASTROCADE_LIGHTPEN, astrocade_lightpen_device, "astrocade_lightpen", "Bally Astrocade Light Pen")
+
+
+//**************************************************************************
+// Bally Astrocade light pen input
+//**************************************************************************
+
+astrocade_lightpen_device::astrocade_lightpen_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, ASTROCADE_LIGHTPEN, tag, owner, clock)
+ , device_astrocade_accessory_interface(mconfig, *this)
+ , m_trigger(*this, "TRIGGER")
+ , m_lightx(*this, "LIGHTX")
+ , m_lighty(*this, "LIGHTY")
+ , m_pen_timer(nullptr)
+{
+}
+
+astrocade_lightpen_device::~astrocade_lightpen_device()
+{
+}
+
+void astrocade_lightpen_device::device_start()
+{
+ m_pen_timer = timer_alloc(TIMER_TRIGGER);
+
+ save_item(NAME(m_retrigger));
+}
+
+void astrocade_lightpen_device::device_reset()
+{
+ m_pen_timer->adjust(attotime::never);
+ m_retrigger = false;
+}
+
+void astrocade_lightpen_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+{
+ if (id == TIMER_TRIGGER)
+ {
+ write_ltpen(1);
+ write_ltpen(0);
+ if (m_retrigger)
+ m_pen_timer->adjust(m_screen->time_until_pos(m_lighty->read(), m_lightx->read()));
+ else
+ m_pen_timer->adjust(attotime::never);
+ }
+}
+
+INPUT_CHANGED_MEMBER( astrocade_lightpen_device::trigger )
+{
+ if (newval)
+ {
+ m_retrigger = true;
+ m_pen_timer->adjust(m_screen->time_until_pos(m_lighty->read(), m_lightx->read()));
+ }
+ else
+ {
+ m_retrigger = false;
+ m_pen_timer->adjust(attotime::never);
+ }
+}
+
+static INPUT_PORTS_START( astrocade_lightpen )
+ PORT_START("TRIGGER")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, astrocade_lightpen_device, trigger, nullptr)
+ PORT_BIT( 0xfe, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("LIGHTX")
+ PORT_BIT(0x1ff, 0x000, IPT_LIGHTGUN_X) PORT_MINMAX(0x000, 0x15f) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(45) PORT_KEYDELTA(15)
+
+ PORT_START("LIGHTY")
+ PORT_BIT(0x0ff, 0x000, IPT_LIGHTGUN_Y) PORT_MINMAX(0x000, 0x0f0) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(45) PORT_KEYDELTA(15)
+INPUT_PORTS_END
+
+ioport_constructor astrocade_lightpen_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( astrocade_lightpen );
+}
diff --git a/src/devices/bus/astrocde/lightpen.h b/src/devices/bus/astrocde/lightpen.h
new file mode 100644
index 00000000000..a0863d5d3e8
--- /dev/null
+++ b/src/devices/bus/astrocde/lightpen.h
@@ -0,0 +1,51 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+#ifndef MAME_BUS_ASTROCDE_LIGHTPEN_H
+#define MAME_BUS_ASTROCDE_LIGHTPEN_H
+
+#pragma once
+
+#include "accessory.h"
+
+
+/***************************************************************************
+ TYPE DEFINITIONS
+ ***************************************************************************/
+
+// ======================> astrocade_lightpen_device
+
+class astrocade_lightpen_device : public device_t,
+ public device_astrocade_accessory_interface
+{
+public:
+ // construction/destruction
+ astrocade_lightpen_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock = 0U);
+ virtual ~astrocade_lightpen_device();
+
+ DECLARE_INPUT_CHANGED_MEMBER( trigger );
+
+protected:
+ // device_t implementation
+ virtual void device_start() override;
+ virtual void device_reset() override;
+ virtual ioport_constructor device_input_ports() const override;
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+
+ static const device_timer_id TIMER_TRIGGER = 0;
+
+private:
+ required_ioport m_trigger;
+ required_ioport m_lightx;
+ required_ioport m_lighty;
+ emu_timer *m_pen_timer;
+ bool m_retrigger;
+};
+
+
+/***************************************************************************
+ DEVICE TYPES
+ ***************************************************************************/
+
+DECLARE_DEVICE_TYPE(ASTROCADE_LIGHTPEN, astrocade_lightpen_device)
+
+#endif // MAME_BUS_ASTROCDE_LIGHTPEN_H
diff --git a/src/devices/bus/astrocde/ram.cpp b/src/devices/bus/astrocde/ram.cpp
index 36d1ed9ab77..8f20b0256fa 100644
--- a/src/devices/bus/astrocde/ram.cpp
+++ b/src/devices/bus/astrocde/ram.cpp
@@ -21,10 +21,10 @@
switch and run it as a cartridge. This is useful for cartridge development.
Blue RAM -- available in 4K, 16K, and 32K. These also use an INS8154 chip,
- (not yet implemented) which has an additional $80 bytes of RAM mapped
- immediately after the end of the expansion address space. This memory
- can't be write protected. The INS8154 has I/O features needed for loading
- tape programs into Blue RAM BASIC, as well as running the Blue RAM Utility cart.
+ which has an additional $80 bytes of RAM mapped immediately after the end of
+ the expansion address space (not yet implemented). This memory can't be write
+ protected. The INS8154 has I/O features needed for loading tape programs into
+ Blue RAM BASIC, as well as running the Blue RAM Utility cart.
4K: $6000 to $6FFF (can't run VIPERSoft BASIC, because this program needs memory
past this range)
16K: $6000 to $9FFF
@@ -69,9 +69,11 @@ DEFINE_DEVICE_TYPE(ASTROCADE_RL64RAM, astrocade_rl64ram_device, "astroca
astrocade_blueram_4k_device::astrocade_blueram_4k_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, type, tag, owner, clock),
- device_astrocade_card_interface(mconfig, *this),
- m_write_prot(*this, "RAM_PROTECT")
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_astrocade_card_interface(mconfig, *this)
+ , m_write_prot(*this, "RAM_PROTECT")
+ , m_ramio(*this, "ramio")
+ , m_cassette(*this, "cassette")
{
}
@@ -163,7 +165,35 @@ WRITE8_MEMBER(astrocade_blueram_4k_device::write)
m_ram[offset - 0x1000] = data;
}
+READ8_MEMBER(astrocade_blueram_4k_device::read_io)
+{
+ return m_ramio->read_io(offset & 0x7f);
+}
+
+WRITE8_MEMBER(astrocade_blueram_4k_device::write_io)
+{
+ logerror("write_io: %04x = %02x\n", offset, data);
+ m_ramio->write_io(offset & 0x7f, data);
+}
+
+uint8_t astrocade_blueram_4k_device::porta_r()
+{
+ return 0;
+}
+
+uint8_t astrocade_blueram_4k_device::portb_r()
+{
+ return m_cassette->input() > 0.0 ? 1 : 0;
+}
+
+void astrocade_blueram_4k_device::porta_w(uint8_t data)
+{
+}
+void astrocade_blueram_4k_device::portb_w(uint8_t data)
+{
+ m_cassette->output(BIT(data, 0) ? +1 : -1);
+}
// Viper System 1 expansion has RAM in 0x6000-0x9fff
READ8_MEMBER(astrocade_viper_sys1_device::read)
@@ -207,3 +237,20 @@ WRITE8_MEMBER(astrocade_rl64ram_device::write)
if (!m_write_prot->read())
m_ram[offset] = data;
}
+
+/*-------------------------------------------------
+ machine configuration
+ -------------------------------------------------*/
+
+void astrocade_blueram_4k_device::device_add_mconfig(machine_config &config)
+{
+ CASSETTE(config, m_cassette);
+ m_cassette->set_default_state(CASSETTE_STOPPED);
+ m_cassette->set_interface("astrocade_cass");
+
+ INS8154(config, m_ramio);
+ m_ramio->out_a().set(FUNC(astrocade_blueram_4k_device::porta_w));
+ m_ramio->out_b().set(FUNC(astrocade_blueram_4k_device::portb_w));
+ m_ramio->in_a().set(FUNC(astrocade_blueram_4k_device::porta_r));
+ m_ramio->in_b().set(FUNC(astrocade_blueram_4k_device::portb_r));
+}
diff --git a/src/devices/bus/astrocde/ram.h b/src/devices/bus/astrocde/ram.h
index 83f9483d2e8..ee5ed884ef4 100644
--- a/src/devices/bus/astrocde/ram.h
+++ b/src/devices/bus/astrocde/ram.h
@@ -6,6 +6,8 @@
#pragma once
#include "exp.h"
+#include "imagedev/cassette.h"
+#include "machine/ins8154.h"
// ======================> astrocade_blueram_4k_device
@@ -22,15 +24,25 @@ public:
// reading and writing
virtual DECLARE_READ8_MEMBER(read) override;
virtual DECLARE_WRITE8_MEMBER(write) override;
+ virtual DECLARE_READ8_MEMBER(read_io) override;
+ virtual DECLARE_WRITE8_MEMBER(write_io) override;
+
+ uint8_t porta_r();
+ uint8_t portb_r();
+ void porta_w(uint8_t data);
+ void portb_w(uint8_t data);
protected:
astrocade_blueram_4k_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override { m_ram.resize(0x1000); save_item(NAME(m_ram)); }
virtual void device_reset() override { }
+ virtual void device_add_mconfig(machine_config &config) override;
std::vector<uint8_t> m_ram;
required_ioport m_write_prot;
+ required_device<ins8154_device> m_ramio;
+ required_device<cassette_image_device> m_cassette;
};
// ======================> astrocade_blueram_16k_device
diff --git a/src/devices/bus/astrocde/rom.cpp b/src/devices/bus/astrocde/rom.cpp
index fcebedfc81d..bb5d6912fc2 100644
--- a/src/devices/bus/astrocde/rom.cpp
+++ b/src/devices/bus/astrocde/rom.cpp
@@ -17,9 +17,10 @@
// astrocade_rom_device - constructor
//-------------------------------------------------
-DEFINE_DEVICE_TYPE(ASTROCADE_ROM_STD, astrocade_rom_device, "astrocade_rom", "Bally Astrocade Standard Carts")
-DEFINE_DEVICE_TYPE(ASTROCADE_ROM_256K, astrocade_rom_256k_device, "astrocade_256k", "Bally Astrocade 256K Carts")
-DEFINE_DEVICE_TYPE(ASTROCADE_ROM_512K, astrocade_rom_512k_device, "astrocade_512k", "Bally Astrocade 512K Carts")
+DEFINE_DEVICE_TYPE(ASTROCADE_ROM_STD, astrocade_rom_device, "astrocade_rom", "Bally Astrocade Standard Carts")
+DEFINE_DEVICE_TYPE(ASTROCADE_ROM_256K, astrocade_rom_256k_device, "astrocade_rom_256k", "Bally Astrocade 256K Carts")
+DEFINE_DEVICE_TYPE(ASTROCADE_ROM_512K, astrocade_rom_512k_device, "astrocade_rom_512k", "Bally Astrocade 512K Carts")
+DEFINE_DEVICE_TYPE(ASTROCADE_ROM_CASS, astrocade_rom_cass_device, "astrocade_rom_cass", "Bally Astrocade AstroBASIC Cart")
astrocade_rom_device::astrocade_rom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
@@ -42,6 +43,12 @@ astrocade_rom_512k_device::astrocade_rom_512k_device(const machine_config &mconf
{
}
+astrocade_rom_cass_device::astrocade_rom_cass_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : astrocade_rom_device(mconfig, ASTROCADE_ROM_CASS, tag, owner, clock)
+ , m_cassette(*this, "cassette")
+{
+}
+
void astrocade_rom_256k_device::device_start()
{
@@ -95,3 +102,31 @@ READ8_MEMBER(astrocade_rom_512k_device::read_rom)
else // 0x3fc0-0x3fff
return m_base_bank = offset & 0x7f;
}
+
+READ8_MEMBER(astrocade_rom_cass_device::read_rom)
+{
+ if (offset < m_rom_size)
+ return m_rom[offset];
+ else if ((offset & 0x1c00) == 0x1800)
+ {
+ m_cassette->output(+1);
+ return 0xff;
+ }
+ else if ((offset & 0x1c00) == 0x1c00)
+ {
+ m_cassette->output(-1);
+ return m_cassette->input() > 0.0 ? 0 : 1;
+ }
+ return 0xff;
+}
+
+/*-------------------------------------------------
+ mapper specific device configuration
+ -------------------------------------------------*/
+
+void astrocade_rom_cass_device::device_add_mconfig(machine_config &config)
+{
+ CASSETTE(config, m_cassette);
+ m_cassette->set_default_state(CASSETTE_STOPPED);
+ m_cassette->set_interface("astrocade_cass");
+}
diff --git a/src/devices/bus/astrocde/rom.h b/src/devices/bus/astrocde/rom.h
index 0471ada8dd1..efd17b16ded 100644
--- a/src/devices/bus/astrocde/rom.h
+++ b/src/devices/bus/astrocde/rom.h
@@ -6,6 +6,7 @@
#pragma once
#include "slot.h"
+#include "imagedev/cassette.h"
// ======================> astrocade_rom_device
@@ -64,10 +65,30 @@ private:
uint8_t m_base_bank;
};
+// ======================> astrocade_rom_cass_device
+
+class astrocade_rom_cass_device : public astrocade_rom_device
+{
+public:
+ // construction/destruction
+ astrocade_rom_cass_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ // reading and writing
+ virtual DECLARE_READ8_MEMBER(read_rom) override;
+
+private:
+ virtual void device_start() override { }
+ virtual void device_reset() override { }
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ required_device<cassette_image_device> m_cassette;
+};
+
// device type definition
DECLARE_DEVICE_TYPE(ASTROCADE_ROM_STD, astrocade_rom_device)
DECLARE_DEVICE_TYPE(ASTROCADE_ROM_256K, astrocade_rom_256k_device)
DECLARE_DEVICE_TYPE(ASTROCADE_ROM_512K, astrocade_rom_512k_device)
+DECLARE_DEVICE_TYPE(ASTROCADE_ROM_CASS, astrocade_rom_cass_device)
#endif // MAME_BUS_ASTROCADE_ROM_H
diff --git a/src/devices/bus/astrocde/slot.cpp b/src/devices/bus/astrocde/slot.cpp
index b83b8e576ad..2aa78be98d9 100644
--- a/src/devices/bus/astrocde/slot.cpp
+++ b/src/devices/bus/astrocde/slot.cpp
@@ -104,7 +104,8 @@ static const astrocade_slot slot_list[] =
{
{ ASTROCADE_STD, "rom" },
{ ASTROCADE_256K, "rom_256k" },
- { ASTROCADE_512K, "rom_512k" }
+ { ASTROCADE_512K, "rom_512k" },
+ { ASTROCADE_CASS, "rom_cass" }
};
static int astrocade_get_pcb_id(const char *slot)
diff --git a/src/devices/bus/astrocde/slot.h b/src/devices/bus/astrocde/slot.h
index 88c34fa0d8e..419f4672985 100644
--- a/src/devices/bus/astrocde/slot.h
+++ b/src/devices/bus/astrocde/slot.h
@@ -19,7 +19,8 @@ enum
{
ASTROCADE_STD = 0,
ASTROCADE_256K,
- ASTROCADE_512K
+ ASTROCADE_512K,
+ ASTROCADE_CASS
};
diff --git a/src/devices/bus/bbc/1mhzbus/1mhzbus.cpp b/src/devices/bus/bbc/1mhzbus/1mhzbus.cpp
index 43cabfdfec3..41e9bc0e8cb 100644
--- a/src/devices/bus/bbc/1mhzbus/1mhzbus.cpp
+++ b/src/devices/bus/bbc/1mhzbus/1mhzbus.cpp
@@ -92,18 +92,18 @@ void bbc_1mhzbus_slot_device::device_reset()
// read
//-------------------------------------------------
-READ8_MEMBER(bbc_1mhzbus_slot_device::fred_r)
+uint8_t bbc_1mhzbus_slot_device::fred_r(offs_t offset)
{
if (m_card)
- return m_card->fred_r(space, offset);
+ return m_card->fred_r(offset);
else
return 0xff;
}
-READ8_MEMBER(bbc_1mhzbus_slot_device::jim_r)
+uint8_t bbc_1mhzbus_slot_device::jim_r(offs_t offset)
{
if (m_card)
- return m_card->jim_r(space, offset);
+ return m_card->jim_r(offset);
else
return 0xff;
}
@@ -112,16 +112,16 @@ READ8_MEMBER(bbc_1mhzbus_slot_device::jim_r)
// write
//-------------------------------------------------
-WRITE8_MEMBER(bbc_1mhzbus_slot_device::fred_w)
+void bbc_1mhzbus_slot_device::fred_w(offs_t offset, uint8_t data)
{
if (m_card)
- m_card->fred_w(space, offset, data);
+ m_card->fred_w(offset, data);
}
-WRITE8_MEMBER(bbc_1mhzbus_slot_device::jim_w)
+void bbc_1mhzbus_slot_device::jim_w(offs_t offset, uint8_t data)
{
if (m_card)
- m_card->jim_w(space, offset, data);
+ m_card->jim_w(offset, data);
}
//-------------------------------------------------
@@ -142,6 +142,7 @@ WRITE8_MEMBER(bbc_1mhzbus_slot_device::jim_w)
//#include "graduate.h"
#include "beebsid.h"
//#include "prisma3.h"
+#include "sprite.h"
#include "cfa3000opt.h"
@@ -161,6 +162,7 @@ void bbc_1mhzbus_devices(device_slot_interface &device)
//device.option_add("graduate", BBC_GRADUATE); /* The Torch Graduate G400/G800 */
device.option_add("beebsid", BBC_BEEBSID); /* BeebSID */
//device.option_add("prisma3", BBC_PRISMA3); /* PRISMA-3 - Millipede 1989 */
+ device.option_add("sprite", BBC_SPRITE); /* Logotron Sprite Board */
}
void bbcm_1mhzbus_devices(device_slot_interface &device)
@@ -183,5 +185,6 @@ void bbcm_1mhzbus_devices(device_slot_interface &device)
//device.option_add("graduate", BBC_GRADUATE); /* The Torch Graduate G400/G800 */
device.option_add("beebsid", BBC_BEEBSID); /* BeebSID */
//device.option_add("prisma3", BBC_PRISMA3); /* PRISMA-3 - Millipede 1989 */
+ device.option_add("sprite", BBC_SPRITE); /* Logotron Sprite Board */
device.option_add("cfa3000opt", CFA3000_OPT); /* Henson CFA 3000 Option Board */
}
diff --git a/src/devices/bus/bbc/1mhzbus/1mhzbus.h b/src/devices/bus/bbc/1mhzbus/1mhzbus.h
index ad435876bf0..80e48425973 100644
--- a/src/devices/bus/bbc/1mhzbus/1mhzbus.h
+++ b/src/devices/bus/bbc/1mhzbus/1mhzbus.h
@@ -107,10 +107,10 @@ public:
auto irq_handler() { return m_irq_handler.bind(); }
auto nmi_handler() { return m_nmi_handler.bind(); }
- virtual DECLARE_READ8_MEMBER(fred_r);
- virtual DECLARE_WRITE8_MEMBER(fred_w);
- virtual DECLARE_READ8_MEMBER(jim_r);
- virtual DECLARE_WRITE8_MEMBER(jim_w);
+ virtual uint8_t fred_r(offs_t offset);
+ virtual void fred_w(offs_t offset, uint8_t data);
+ virtual uint8_t jim_r(offs_t offset);
+ virtual void jim_w(offs_t offset, uint8_t data);
DECLARE_WRITE_LINE_MEMBER( irq_w ) { m_irq_handler(state); }
DECLARE_WRITE_LINE_MEMBER( nmi_w ) { m_nmi_handler(state); }
@@ -134,10 +134,10 @@ private:
class device_bbc_1mhzbus_interface : public device_slot_card_interface
{
public:
- virtual DECLARE_READ8_MEMBER(fred_r) { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(fred_w) { }
- virtual DECLARE_READ8_MEMBER(jim_r) { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(jim_w) { }
+ virtual uint8_t fred_r(offs_t offset) { return 0xff; }
+ virtual void fred_w(offs_t offset, uint8_t data) { }
+ virtual uint8_t jim_r(offs_t offset) { return 0xff; }
+ virtual void jim_w(offs_t offset, uint8_t data) { }
protected:
device_bbc_1mhzbus_interface(const machine_config &mconfig, device_t &device);
diff --git a/src/devices/bus/bbc/1mhzbus/beebsid.cpp b/src/devices/bus/bbc/1mhzbus/beebsid.cpp
index c0e6ea62c46..d50449ede99 100644
--- a/src/devices/bus/bbc/1mhzbus/beebsid.cpp
+++ b/src/devices/bus/bbc/1mhzbus/beebsid.cpp
@@ -65,40 +65,40 @@ void bbc_beebsid_device::device_start()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(bbc_beebsid_device::fred_r)
+uint8_t bbc_beebsid_device::fred_r(offs_t offset)
{
uint8_t data = 0xff;
if (offset >= 0x20 && offset < 0x40)
{
- data = m_sid->read(space, offset);
+ data = m_sid->read(offset);
}
- data &= m_1mhzbus->fred_r(space, offset);
+ data &= m_1mhzbus->fred_r(offset);
return data;
}
-WRITE8_MEMBER(bbc_beebsid_device::fred_w)
+void bbc_beebsid_device::fred_w(offs_t offset, uint8_t data)
{
if (offset >= 0x20 && offset < 0x40)
{
- m_sid->write(space, offset, data);
+ m_sid->write(offset, data);
}
- m_1mhzbus->fred_w(space, offset, data);
+ m_1mhzbus->fred_w(offset, data);
}
-READ8_MEMBER(bbc_beebsid_device::jim_r)
+uint8_t bbc_beebsid_device::jim_r(offs_t offset)
{
uint8_t data = 0xff;
- data &= m_1mhzbus->jim_r(space, offset);
+ data &= m_1mhzbus->jim_r(offset);
return data;
}
-WRITE8_MEMBER(bbc_beebsid_device::jim_w)
+void bbc_beebsid_device::jim_w(offs_t offset, uint8_t data)
{
- m_1mhzbus->jim_w(space, offset, data);
+ m_1mhzbus->jim_w(offset, data);
}
diff --git a/src/devices/bus/bbc/1mhzbus/beebsid.h b/src/devices/bus/bbc/1mhzbus/beebsid.h
index d78d5486c10..107e875abde 100644
--- a/src/devices/bus/bbc/1mhzbus/beebsid.h
+++ b/src/devices/bus/bbc/1mhzbus/beebsid.h
@@ -34,10 +34,10 @@ protected:
// optional information overrides
virtual void device_add_mconfig(machine_config &config) override;
- virtual DECLARE_READ8_MEMBER(fred_r) override;
- virtual DECLARE_WRITE8_MEMBER(fred_w) override;
- virtual DECLARE_READ8_MEMBER(jim_r) override;
- virtual DECLARE_WRITE8_MEMBER(jim_w) override;
+ virtual uint8_t fred_r(offs_t offset) override;
+ virtual void fred_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t jim_r(offs_t offset) override;
+ virtual void jim_w(offs_t offset, uint8_t data) override;
private:
required_device<bbc_1mhzbus_slot_device> m_1mhzbus;
diff --git a/src/devices/bus/bbc/1mhzbus/cfa3000opt.cpp b/src/devices/bus/bbc/1mhzbus/cfa3000opt.cpp
index 0946d9cdf82..e5ac755e006 100644
--- a/src/devices/bus/bbc/1mhzbus/cfa3000opt.cpp
+++ b/src/devices/bus/bbc/1mhzbus/cfa3000opt.cpp
@@ -98,7 +98,7 @@ void cfa3000_opt_device::device_start()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(cfa3000_opt_device::fred_r)
+uint8_t cfa3000_opt_device::fred_r(offs_t offset)
{
uint8_t data = 0xff;
diff --git a/src/devices/bus/bbc/1mhzbus/cfa3000opt.h b/src/devices/bus/bbc/1mhzbus/cfa3000opt.h
index 5a4e413754b..64913e95604 100644
--- a/src/devices/bus/bbc/1mhzbus/cfa3000opt.h
+++ b/src/devices/bus/bbc/1mhzbus/cfa3000opt.h
@@ -35,7 +35,7 @@ protected:
// optional information overrides
virtual ioport_constructor device_input_ports() const override;
- virtual DECLARE_READ8_MEMBER(fred_r) override;
+ virtual uint8_t fred_r(offs_t offset) override;
private:
required_ioport m_opt;
diff --git a/src/devices/bus/bbc/1mhzbus/emrmidi.cpp b/src/devices/bus/bbc/1mhzbus/emrmidi.cpp
index 9c7c036f44c..6cfbacf23da 100644
--- a/src/devices/bus/bbc/1mhzbus/emrmidi.cpp
+++ b/src/devices/bus/bbc/1mhzbus/emrmidi.cpp
@@ -81,23 +81,23 @@ void bbc_emrmidi_device::device_start()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(bbc_emrmidi_device::fred_r)
+uint8_t bbc_emrmidi_device::fred_r(offs_t offset)
{
uint8_t data = 0xff;
if (offset >= 0xf0 && offset < 0xf2)
{
- data = m_acia->read(space, offset & 1);
+ data = m_acia->read(offset & 1);
}
return data;
}
-WRITE8_MEMBER(bbc_emrmidi_device::fred_w)
+void bbc_emrmidi_device::fred_w(offs_t offset, uint8_t data)
{
if (offset >= 0xf0 && offset < 0xf2)
{
- m_acia->write(space, offset & 1, data);
+ m_acia->write(offset & 1, data);
}
}
diff --git a/src/devices/bus/bbc/1mhzbus/emrmidi.h b/src/devices/bus/bbc/1mhzbus/emrmidi.h
index bbc41992948..341e487ce24 100644
--- a/src/devices/bus/bbc/1mhzbus/emrmidi.h
+++ b/src/devices/bus/bbc/1mhzbus/emrmidi.h
@@ -36,8 +36,8 @@ protected:
// optional information overrides
virtual void device_add_mconfig(machine_config &config) override;
- virtual DECLARE_READ8_MEMBER(fred_r) override;
- virtual DECLARE_WRITE8_MEMBER(fred_w) override;
+ virtual uint8_t fred_r(offs_t offset) override;
+ virtual void fred_w(offs_t offset, uint8_t data) override;
private:
DECLARE_WRITE_LINE_MEMBER(write_acia_clock);
diff --git a/src/devices/bus/bbc/1mhzbus/ieee488.cpp b/src/devices/bus/bbc/1mhzbus/ieee488.cpp
index 383ceef537b..3aae6fe2f54 100644
--- a/src/devices/bus/bbc/1mhzbus/ieee488.cpp
+++ b/src/devices/bus/bbc/1mhzbus/ieee488.cpp
@@ -54,7 +54,8 @@ ROM_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(bbc_ieee488_device::device_add_mconfig)
+void bbc_ieee488_device::device_add_mconfig(machine_config &config)
+{
TMS9914(config, m_tms9914, 5_MHz_XTAL);
m_tms9914->int_write_cb().set(DEVICE_SELF_OWNER, FUNC(bbc_1mhzbus_slot_device::irq_w));
m_tms9914->dio_read_cb().set(IEEE488_TAG, FUNC(ieee488_device::dio_r));
@@ -67,23 +68,25 @@ MACHINE_CONFIG_START(bbc_ieee488_device::device_add_mconfig)
m_tms9914->srq_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_srq_w));
m_tms9914->atn_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_atn_w));
m_tms9914->ren_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_ren_w));
- MCFG_IEEE488_BUS_ADD()
- MCFG_IEEE488_EOI_CALLBACK(WRITELINE(m_tms9914, tms9914_device, eoi_w))
- MCFG_IEEE488_DAV_CALLBACK(WRITELINE(m_tms9914, tms9914_device, dav_w))
- MCFG_IEEE488_NRFD_CALLBACK(WRITELINE(m_tms9914, tms9914_device, nrfd_w))
- MCFG_IEEE488_NDAC_CALLBACK(WRITELINE(m_tms9914, tms9914_device, ndac_w))
- MCFG_IEEE488_IFC_CALLBACK(WRITELINE(m_tms9914, tms9914_device, ifc_w))
- MCFG_IEEE488_SRQ_CALLBACK(WRITELINE(m_tms9914, tms9914_device, srq_w))
- MCFG_IEEE488_ATN_CALLBACK(WRITELINE(m_tms9914, tms9914_device, atn_w))
- MCFG_IEEE488_REN_CALLBACK(WRITELINE(m_tms9914, tms9914_device, ren_w))
- MCFG_IEEE488_SLOT_ADD("ieee_dev", 0, cbm_ieee488_devices, nullptr)
+
+ IEEE488(config, m_ieee);
+ m_ieee->eoi_callback().set(m_tms9914, FUNC(tms9914_device::eoi_w));
+ m_ieee->dav_callback().set(m_tms9914, FUNC(tms9914_device::dav_w));
+ m_ieee->nrfd_callback().set(m_tms9914, FUNC(tms9914_device::nrfd_w));
+ m_ieee->ndac_callback().set(m_tms9914, FUNC(tms9914_device::ndac_w));
+ m_ieee->ifc_callback().set(m_tms9914, FUNC(tms9914_device::ifc_w));
+ m_ieee->srq_callback().set(m_tms9914, FUNC(tms9914_device::srq_w));
+ m_ieee->atn_callback().set(m_tms9914, FUNC(tms9914_device::atn_w));
+ m_ieee->ren_callback().set(m_tms9914, FUNC(tms9914_device::ren_w));
+ IEEE488_SLOT(config, "ieee_dev", 0, cbm_ieee488_devices, nullptr);
BBC_1MHZBUS_SLOT(config, m_1mhzbus, DERIVED_CLOCK(1, 1), bbc_1mhzbus_devices, nullptr);
m_1mhzbus->irq_handler().set(DEVICE_SELF_OWNER, FUNC(bbc_1mhzbus_slot_device::irq_w));
m_1mhzbus->nmi_handler().set(DEVICE_SELF_OWNER, FUNC(bbc_1mhzbus_slot_device::nmi_w));
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(bbc_b488_device::device_add_mconfig)
+void bbc_b488_device::device_add_mconfig(machine_config &config)
+{
TMS9914(config, m_tms9914, 5_MHz_XTAL); // TODO: verify clock
m_tms9914->int_write_cb().set(DEVICE_SELF_OWNER, FUNC(bbc_1mhzbus_slot_device::irq_w));
m_tms9914->dio_read_cb().set(IEEE488_TAG, FUNC(ieee488_device::dio_r));
@@ -96,35 +99,37 @@ MACHINE_CONFIG_START(bbc_b488_device::device_add_mconfig)
m_tms9914->srq_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_srq_w));
m_tms9914->atn_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_atn_w));
m_tms9914->ren_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_ren_w));
- MCFG_IEEE488_BUS_ADD()
- MCFG_IEEE488_EOI_CALLBACK(WRITELINE(m_tms9914, tms9914_device, eoi_w))
- MCFG_IEEE488_DAV_CALLBACK(WRITELINE(m_tms9914, tms9914_device, dav_w))
- MCFG_IEEE488_NRFD_CALLBACK(WRITELINE(m_tms9914, tms9914_device, nrfd_w))
- MCFG_IEEE488_NDAC_CALLBACK(WRITELINE(m_tms9914, tms9914_device, ndac_w))
- MCFG_IEEE488_IFC_CALLBACK(WRITELINE(m_tms9914, tms9914_device, ifc_w))
- MCFG_IEEE488_SRQ_CALLBACK(WRITELINE(m_tms9914, tms9914_device, srq_w))
- MCFG_IEEE488_ATN_CALLBACK(WRITELINE(m_tms9914, tms9914_device, atn_w))
- MCFG_IEEE488_REN_CALLBACK(WRITELINE(m_tms9914, tms9914_device, ren_w))
- MCFG_IEEE488_SLOT_ADD("ieee_dev", 0, cbm_ieee488_devices, nullptr)
+
+ IEEE488(config, m_ieee);
+ m_ieee->eoi_callback().set(m_tms9914, FUNC(tms9914_device::eoi_w));
+ m_ieee->dav_callback().set(m_tms9914, FUNC(tms9914_device::dav_w));
+ m_ieee->nrfd_callback().set(m_tms9914, FUNC(tms9914_device::nrfd_w));
+ m_ieee->ndac_callback().set(m_tms9914, FUNC(tms9914_device::ndac_w));
+ m_ieee->ifc_callback().set(m_tms9914, FUNC(tms9914_device::ifc_w));
+ m_ieee->srq_callback().set(m_tms9914, FUNC(tms9914_device::srq_w));
+ m_ieee->atn_callback().set(m_tms9914, FUNC(tms9914_device::atn_w));
+ m_ieee->ren_callback().set(m_tms9914, FUNC(tms9914_device::ren_w));
+ IEEE488_SLOT(config, "ieee_dev", 0, cbm_ieee488_devices, nullptr);
// TODO: LED's for ATN, TALK, and DATA
-MACHINE_CONFIG_END
+}
-//MACHINE_CONFIG_START(bbc_procyon_device::device_add_mconfig)
+//void bbc_procyon_device::device_add_mconfig(machine_config &config)
+//{
// TODO: Implement MC68488
- //MCFG_IEEE488_BUS_ADD()
- //MCFG_IEEE488_EOI_CALLBACK(WRITELINE(m_mc68488, mc68488_device, eoi_w))
- //MCFG_IEEE488_DAV_CALLBACK(WRITELINE(m_mc68488, mc68488_device, dav_w))
- //MCFG_IEEE488_NRFD_CALLBACK(WRITELINE(m_mc68488, mc68488_device, nrfd_w))
- //MCFG_IEEE488_NDAC_CALLBACK(WRITELINE(m_mc68488, mc68488_device, ndac_w))
- //MCFG_IEEE488_IFC_CALLBACK(WRITELINE(m_mc68488, mc68488_device, ifc_w))
- //MCFG_IEEE488_SRQ_CALLBACK(WRITELINE(m_mc68488, mc68488_device, srq_w))
- //MCFG_IEEE488_ATN_CALLBACK(WRITELINE(m_mc68488, mc68488_device, atn_w))
- //MCFG_IEEE488_REN_CALLBACK(WRITELINE(m_mc68488, mc68488_device, ren_w))
- //MCFG_IEEE488_SLOT_ADD("ieee_dev", 0, cbm_ieee488_devices, nullptr)
+ //IEEE488(config, m_ieee);
+ //m_ieee->eoi_callback(m_mc68488, FUNC(mc68488_device::eoi_w));
+ //m_ieee->dav_callback(m_mc68488, FUNC(mc68488_device::dav_w));
+ //m_ieee->nrfd_callback(m_mc68488, FUNC(mc68488_device::nrfd_w));
+ //m_ieee->ndac_callback(m_mc68488, FUNC(mc68488_device::ndac_w));
+ //m_ieee->ifc_callback(m_mc68488, FUNC(mc68488_device::ifc_w));
+ //m_ieee->srq_callback(m_mc68488, FUNC(mc68488_device::srq_w));
+ //m_ieee->atn_callback(m_mc68488, FUNC(mc68488_device::atn_w));
+ //m_ieee->ren_callback(m_mc68488, FUNC(mc68488_device::ren_w));
+ //IEEE488_SLOT(config, "ieee_dev", 0, cbm_ieee488_devices, nullptr);
// TODO: LED's for Bus Active, Byte Out, and Byte In
-//MACHINE_CONFIG_END
+//}
//-------------------------------------------------
// rom_region - device-specific ROM region
@@ -192,82 +197,82 @@ void bbc_b488_device::device_start()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(bbc_ieee488_device::fred_r)
+uint8_t bbc_ieee488_device::fred_r(offs_t offset)
{
uint8_t data = 0xff;
if (offset >= 0x20 && offset < 0x28)
{
- data = m_tms9914->reg8_r(space, offset & 0x07);
+ data = m_tms9914->read(offset & 0x07);
}
- data &= m_1mhzbus->fred_r(space, offset);
+ data &= m_1mhzbus->fred_r(offset);
return data;
}
-WRITE8_MEMBER(bbc_ieee488_device::fred_w)
+void bbc_ieee488_device::fred_w(offs_t offset, uint8_t data)
{
if (offset >= 0x20 && offset < 0x28)
{
- m_tms9914->reg8_w(space, offset & 0x07, data);
+ m_tms9914->write(offset & 0x07, data);
}
- m_1mhzbus->fred_w(space, offset, data);
+ m_1mhzbus->fred_w(offset, data);
}
-READ8_MEMBER(bbc_ieee488_device::jim_r)
+uint8_t bbc_ieee488_device::jim_r(offs_t offset)
{
uint8_t data = 0xff;
- data &= m_1mhzbus->jim_r(space, offset);
+ data &= m_1mhzbus->jim_r(offset);
return data;
}
-WRITE8_MEMBER(bbc_ieee488_device::jim_w)
+void bbc_ieee488_device::jim_w(offs_t offset, uint8_t data)
{
- m_1mhzbus->jim_w(space, offset, data);
+ m_1mhzbus->jim_w(offset, data);
}
-READ8_MEMBER(bbc_b488_device::fred_r)
+uint8_t bbc_b488_device::fred_r(offs_t offset)
{
uint8_t data = 0xff;
if (offset >= 0x20 && offset < 0x28)
{
- data = m_tms9914->reg8_r(space, offset & 0x07);
+ data = m_tms9914->read(offset & 0x07);
}
return data;
}
-WRITE8_MEMBER(bbc_b488_device::fred_w)
+void bbc_b488_device::fred_w(offs_t offset, uint8_t data)
{
if (offset >= 0x20 && offset < 0x28)
{
- m_tms9914->reg8_w(space, offset & 0x07, data);
+ m_tms9914->write(offset & 0x07, data);
}
}
-//READ8_MEMBER(bbc_procyon_device::fred_r)
+//uint8_t bbc_procyon_device::fred_r(offs_t offset)
//{
//uint8_t data = 0xff;
//if (offset >= 0x20 && offset < 0x28)
//{
- // data = mc68488_device->reg8_r(space, offset & 0x07);
+ // data = mc68488_device->read(offset & 0x07);
//}
//return data;
//}
-//WRITE8_MEMBER(bbc_procyon_device::fred_w)
+//void bbc_procyon_device::fred_w(offs_t offset, uint8_t data)
//{
//if (offset >= 0x20 && offset < 0x28)
//{
- // mc68488_device->reg8_w(space, offset & 0x07, data);
+ // mc68488_device->write(offset & 0x07, data);
//}
//}
diff --git a/src/devices/bus/bbc/1mhzbus/ieee488.h b/src/devices/bus/bbc/1mhzbus/ieee488.h
index 05a9e60c928..9b810b4bf8d 100644
--- a/src/devices/bus/bbc/1mhzbus/ieee488.h
+++ b/src/devices/bus/bbc/1mhzbus/ieee488.h
@@ -42,10 +42,10 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
- virtual DECLARE_READ8_MEMBER(fred_r) override;
- virtual DECLARE_WRITE8_MEMBER(fred_w) override;
- virtual DECLARE_READ8_MEMBER(jim_r) override;
- virtual DECLARE_WRITE8_MEMBER(jim_w) override;
+ virtual uint8_t fred_r(offs_t offset) override;
+ virtual void fred_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t jim_r(offs_t offset) override;
+ virtual void jim_w(offs_t offset, uint8_t data) override;
private:
required_device<ieee488_device> m_ieee;
@@ -69,8 +69,8 @@ protected:
// optional information overrides
virtual void device_add_mconfig(machine_config &config) override;
- virtual DECLARE_READ8_MEMBER(fred_r) override;
- virtual DECLARE_WRITE8_MEMBER(fred_w) override;
+ virtual uint8_t fred_r(offs_t offset) override;
+ virtual void fred_w(offs_t offset, uint8_t data) override;
private:
required_device<ieee488_device> m_ieee;
@@ -94,8 +94,8 @@ private:
// virtual void device_add_mconfig(machine_config &config) override;
// virtual const tiny_rom_entry *device_rom_region() const override;
//
-// virtual DECLARE_READ8_MEMBER(fred_r) override;
-// virtual DECLARE_WRITE8_MEMBER(fred_w) override;
+// virtual uint8_t fred_r(offs_t offset) override;
+// virtual void fred_w(offs_t offset, uint8_t data) override;
//
//private:
// required_device<ieee488_device> m_ieee;
diff --git a/src/devices/bus/bbc/1mhzbus/m2000.cpp b/src/devices/bus/bbc/1mhzbus/m2000.cpp
index 88a713d1ff8..8203cada22e 100644
--- a/src/devices/bus/bbc/1mhzbus/m2000.cpp
+++ b/src/devices/bus/bbc/1mhzbus/m2000.cpp
@@ -91,7 +91,7 @@ void bbc_m2000_device::device_start()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(bbc_m2000_device::fred_r)
+uint8_t bbc_m2000_device::fred_r(offs_t offset)
{
uint8_t data = 0xff;
@@ -100,59 +100,59 @@ READ8_MEMBER(bbc_m2000_device::fred_r)
switch (offset & 0x06)
{
case 0x00:
- data = m_acia1->read(space, offset & 1);
+ data = m_acia1->read(offset & 1);
break;
case 0x02:
- data = m_acia2->read(space, offset & 1);
+ data = m_acia2->read(offset & 1);
break;
case 0x04:
- data = m_acia3->read(space, offset & 1);
+ data = m_acia3->read(offset & 1);
break;
case 0x06:
break;
}
}
- data &= m_1mhzbus->fred_r(space, offset);
+ data &= m_1mhzbus->fred_r(offset);
return data;
}
-WRITE8_MEMBER(bbc_m2000_device::fred_w)
+void bbc_m2000_device::fred_w(offs_t offset, uint8_t data)
{
if (offset >= 0x08 && offset < 0x10)
{
switch (offset & 0x06)
{
case 0x00:
- m_acia1->write(space, offset & 1, data);
+ m_acia1->write(offset & 1, data);
break;
case 0x02:
- m_acia2->write(space, offset & 1, data);
+ m_acia2->write(offset & 1, data);
break;
case 0x04:
- m_acia3->write(space, offset & 1, data);
+ m_acia3->write(offset & 1, data);
break;
case 0x06:
break;
}
}
- m_1mhzbus->fred_w(space, offset, data);
+ m_1mhzbus->fred_w(offset, data);
}
-READ8_MEMBER(bbc_m2000_device::jim_r)
+uint8_t bbc_m2000_device::jim_r(offs_t offset)
{
uint8_t data = 0xff;
- data &= m_1mhzbus->jim_r(space, offset);
+ data &= m_1mhzbus->jim_r(offset);
return data;
}
-WRITE8_MEMBER(bbc_m2000_device::jim_w)
+void bbc_m2000_device::jim_w(offs_t offset, uint8_t data)
{
- m_1mhzbus->jim_w(space, offset, data);
+ m_1mhzbus->jim_w(offset, data);
}
WRITE_LINE_MEMBER(bbc_m2000_device::write_acia_clock)
diff --git a/src/devices/bus/bbc/1mhzbus/m2000.h b/src/devices/bus/bbc/1mhzbus/m2000.h
index f476c92dac5..eeee1034a4e 100644
--- a/src/devices/bus/bbc/1mhzbus/m2000.h
+++ b/src/devices/bus/bbc/1mhzbus/m2000.h
@@ -38,10 +38,10 @@ protected:
// optional information overrides
virtual void device_add_mconfig(machine_config &config) override;
- virtual DECLARE_READ8_MEMBER(fred_r) override;
- virtual DECLARE_WRITE8_MEMBER(fred_w) override;
- virtual DECLARE_READ8_MEMBER(jim_r) override;
- virtual DECLARE_WRITE8_MEMBER(jim_w) override;
+ virtual uint8_t fred_r(offs_t offset) override;
+ virtual void fred_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t jim_r(offs_t offset) override;
+ virtual void jim_w(offs_t offset, uint8_t data) override;
private:
DECLARE_WRITE_LINE_MEMBER(write_acia_clock);
diff --git a/src/devices/bus/bbc/1mhzbus/opus3.cpp b/src/devices/bus/bbc/1mhzbus/opus3.cpp
index 65a8a3134ec..77f21ac199a 100644
--- a/src/devices/bus/bbc/1mhzbus/opus3.cpp
+++ b/src/devices/bus/bbc/1mhzbus/opus3.cpp
@@ -159,7 +159,7 @@ void bbc_opusa_device::device_start()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(bbc_opus3_device::fred_r)
+uint8_t bbc_opus3_device::fred_r(offs_t offset)
{
uint8_t data = 0xff;
@@ -175,7 +175,7 @@ READ8_MEMBER(bbc_opus3_device::fred_r)
return data;
}
-WRITE8_MEMBER(bbc_opus3_device::fred_w)
+void bbc_opus3_device::fred_w(offs_t offset, uint8_t data)
{
floppy_image_device *floppy = nullptr;
@@ -219,7 +219,7 @@ WRITE_LINE_MEMBER(bbc_opus3_device::fdc_drq_w)
m_slot->nmi_w((m_fdc_drq && m_fdc_ie) ? ASSERT_LINE : CLEAR_LINE);
}
-READ8_MEMBER(bbc_opus3_device::jim_r)
+uint8_t bbc_opus3_device::jim_r(offs_t offset)
{
if ((m_ramdisk_page << 8) < m_ramdisk->size())
return m_ramdisk->read((m_ramdisk_page << 8) + offset);
@@ -227,7 +227,7 @@ READ8_MEMBER(bbc_opus3_device::jim_r)
return 0xff;
}
-WRITE8_MEMBER(bbc_opus3_device::jim_w)
+void bbc_opus3_device::jim_w(offs_t offset, uint8_t data)
{
if ((m_ramdisk_page << 8) < m_ramdisk->size())
m_ramdisk->write((m_ramdisk_page << 8) + offset, data);
diff --git a/src/devices/bus/bbc/1mhzbus/opus3.h b/src/devices/bus/bbc/1mhzbus/opus3.h
index ef7a2174f5c..7d287f1622c 100644
--- a/src/devices/bus/bbc/1mhzbus/opus3.h
+++ b/src/devices/bus/bbc/1mhzbus/opus3.h
@@ -39,10 +39,10 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
- virtual DECLARE_READ8_MEMBER(fred_r) override;
- virtual DECLARE_WRITE8_MEMBER(fred_w) override;
- virtual DECLARE_READ8_MEMBER(jim_r) override;
- virtual DECLARE_WRITE8_MEMBER(jim_w) override;
+ virtual uint8_t fred_r(offs_t offset) override;
+ virtual void fred_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t jim_r(offs_t offset) override;
+ virtual void jim_w(offs_t offset, uint8_t data) override;
private:
DECLARE_FLOPPY_FORMATS(floppy_formats);
diff --git a/src/devices/bus/bbc/1mhzbus/sprite.cpp b/src/devices/bus/bbc/1mhzbus/sprite.cpp
new file mode 100644
index 00000000000..ee7f5f292e7
--- /dev/null
+++ b/src/devices/bus/bbc/1mhzbus/sprite.cpp
@@ -0,0 +1,99 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Logotron Sprite Board
+
+**********************************************************************/
+
+
+#include "emu.h"
+#include "sprite.h"
+#include "screen.h"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(BBC_SPRITE, bbc_sprite_device, "bbc_sprite", "Logotron Sprite Board");
+
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void bbc_sprite_device::device_add_mconfig(machine_config &config)
+{
+ TMS9129(config, m_vdp, 10.738635_MHz_XTAL);
+ m_vdp->int_callback().set(DEVICE_SELF_OWNER, FUNC(bbc_1mhzbus_slot_device::irq_w));
+ m_vdp->set_screen("screen");
+ m_vdp->set_vram_size(0x4000);
+
+ SCREEN(config, "screen", SCREEN_TYPE_RASTER);
+}
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// bbc_sprite_device - constructor
+//-------------------------------------------------
+
+bbc_sprite_device::bbc_sprite_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, BBC_SPRITE, tag, owner, clock)
+ , device_bbc_1mhzbus_interface(mconfig, *this)
+ , m_vdp(*this, "vdp")
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void bbc_sprite_device::device_start()
+{
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void bbc_sprite_device::device_reset()
+{
+}
+
+
+//**************************************************************************
+// IMPLEMENTATION
+//**************************************************************************
+
+uint8_t bbc_sprite_device::fred_r(offs_t offset)
+{
+ uint8_t data = 0xff;
+
+ switch (offset)
+ {
+ case 0xa0:
+ data = m_vdp->vram_read();
+ break;
+ case 0xa2:
+ data = m_vdp->register_read();
+ break;
+ }
+ return data;
+}
+
+void bbc_sprite_device::fred_w(offs_t offset, uint8_t data)
+{
+ switch (offset)
+ {
+ case 0xa1:
+ m_vdp->vram_write(data);
+ break;
+ case 0xa3:
+ m_vdp->register_write(data);
+ break;
+ }
+}
diff --git a/src/devices/bus/bbc/1mhzbus/sprite.h b/src/devices/bus/bbc/1mhzbus/sprite.h
new file mode 100644
index 00000000000..02b0cff5dc2
--- /dev/null
+++ b/src/devices/bus/bbc/1mhzbus/sprite.h
@@ -0,0 +1,49 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Logotron Sprite Board
+
+**********************************************************************/
+
+
+#ifndef MAME_BUS_BBC_1MHZBUS_SPRITE_H
+#define MAME_BUS_BBC_1MHZBUS_SPRITE_H
+
+#include "1mhzbus.h"
+#include "video/tms9928a.h"
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+class bbc_sprite_device:
+ public device_t,
+ public device_bbc_1mhzbus_interface
+{
+public:
+ // construction/destruction
+ bbc_sprite_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ virtual uint8_t fred_r(offs_t offset) override;
+ virtual void fred_w(offs_t offset, uint8_t data) override;
+
+private:
+ required_device<tms9129_device> m_vdp;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(BBC_SPRITE, bbc_sprite_device);
+
+
+#endif /* MAME_BUS_BBC_1MHZBUS_SPRITE_H */
diff --git a/src/devices/bus/bbc/exp/exp.cpp b/src/devices/bus/bbc/exp/exp.cpp
index d2a5cca3611..25f19746b72 100644
--- a/src/devices/bus/bbc/exp/exp.cpp
+++ b/src/devices/bus/bbc/exp/exp.cpp
@@ -97,26 +97,26 @@ void bbc_exp_slot_device::device_reset()
// read
//-------------------------------------------------
-READ8_MEMBER(bbc_exp_slot_device::fred_r)
+uint8_t bbc_exp_slot_device::fred_r(offs_t offset)
{
if (m_card)
- return m_card->fred_r(space, offset);
+ return m_card->fred_r(offset);
else
return 0xff;
}
-READ8_MEMBER(bbc_exp_slot_device::jim_r)
+uint8_t bbc_exp_slot_device::jim_r(offs_t offset)
{
if (m_card)
- return m_card->jim_r(space, offset);
+ return m_card->jim_r(offset);
else
return 0xff;
}
-READ8_MEMBER(bbc_exp_slot_device::sheila_r)
+uint8_t bbc_exp_slot_device::sheila_r(offs_t offset)
{
if (m_card)
- return m_card->sheila_r(space, offset);
+ return m_card->sheila_r(offset);
else
return 0xfe;
}
@@ -125,32 +125,32 @@ READ8_MEMBER(bbc_exp_slot_device::sheila_r)
// write
//-------------------------------------------------
-WRITE8_MEMBER(bbc_exp_slot_device::fred_w)
+void bbc_exp_slot_device::fred_w(offs_t offset, uint8_t data)
{
if (m_card)
- m_card->fred_w(space, offset, data);
+ m_card->fred_w(offset, data);
}
-WRITE8_MEMBER(bbc_exp_slot_device::jim_w)
+void bbc_exp_slot_device::jim_w(offs_t offset, uint8_t data)
{
if (m_card)
- m_card->jim_w(space, offset, data);
+ m_card->jim_w(offset, data);
}
-WRITE8_MEMBER(bbc_exp_slot_device::sheila_w)
+void bbc_exp_slot_device::sheila_w(offs_t offset, uint8_t data)
{
if (m_card)
- m_card->sheila_w(space, offset, data);
+ m_card->sheila_w(offset, data);
}
//-------------------------------------------------
// pb_r
//-------------------------------------------------
-READ8_MEMBER(bbc_exp_slot_device::pb_r)
+uint8_t bbc_exp_slot_device::pb_r()
{
if (m_card)
- return 0x1f | m_card->pb_r(space, 0);
+ return 0x1f | m_card->pb_r();
else
return 0xff;
}
@@ -160,10 +160,10 @@ READ8_MEMBER(bbc_exp_slot_device::pb_r)
// pb_w
//-------------------------------------------------
-WRITE8_MEMBER(bbc_exp_slot_device::pb_w)
+void bbc_exp_slot_device::pb_w(uint8_t data)
{
if (m_card)
- m_card->pb_w(space, 0, data);
+ m_card->pb_w(data);
}
//-------------------------------------------------
diff --git a/src/devices/bus/bbc/exp/exp.h b/src/devices/bus/bbc/exp/exp.h
index 5269deb3900..ef1a0174b1a 100644
--- a/src/devices/bus/bbc/exp/exp.h
+++ b/src/devices/bus/bbc/exp/exp.h
@@ -75,12 +75,12 @@ public:
auto cb1_handler() { return m_cb1_handler.bind(); }
auto cb2_handler() { return m_cb2_handler.bind(); }
- virtual DECLARE_READ8_MEMBER(fred_r);
- virtual DECLARE_WRITE8_MEMBER(fred_w);
- virtual DECLARE_READ8_MEMBER(jim_r);
- virtual DECLARE_WRITE8_MEMBER(jim_w);
- virtual DECLARE_READ8_MEMBER(sheila_r);
- virtual DECLARE_WRITE8_MEMBER(sheila_w);
+ uint8_t fred_r(offs_t offset);
+ void fred_w(offs_t offset, uint8_t data);
+ uint8_t jim_r(offs_t offset);
+ void jim_w(offs_t offset, uint8_t data);
+ uint8_t sheila_r(offs_t offset);
+ void sheila_w(offs_t offset, uint8_t data);
DECLARE_WRITE_LINE_MEMBER( irq_w ) { m_irq_handler(state); }
DECLARE_WRITE_LINE_MEMBER( nmi_w ) { m_nmi_handler(state); }
@@ -89,8 +89,8 @@ public:
DECLARE_WRITE_LINE_MEMBER(cb1_w) { m_cb1_handler(state); }
DECLARE_WRITE_LINE_MEMBER(cb2_w) { m_cb2_handler(state); }
- DECLARE_READ8_MEMBER(pb_r);
- DECLARE_WRITE8_MEMBER(pb_w);
+ uint8_t pb_r();
+ void pb_w(uint8_t data);
protected:
// device-level overrides
@@ -114,15 +114,15 @@ private:
class device_bbc_exp_interface : public device_slot_card_interface
{
public:
- virtual DECLARE_READ8_MEMBER(fred_r) { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(fred_w) { }
- virtual DECLARE_READ8_MEMBER(jim_r) { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(jim_w) { }
- virtual DECLARE_READ8_MEMBER(sheila_r) { return 0xfe; }
- virtual DECLARE_WRITE8_MEMBER(sheila_w) { }
-
- virtual DECLARE_READ8_MEMBER(pb_r) { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(pb_w) { }
+ virtual uint8_t fred_r(offs_t offset) { return 0xff; }
+ virtual void fred_w(offs_t offset, uint8_t data) { }
+ virtual uint8_t jim_r(offs_t offset) { return 0xff; }
+ virtual void jim_w(offs_t offset, uint8_t data) { }
+ virtual uint8_t sheila_r(offs_t offset) { return 0xfe; }
+ virtual void sheila_w(offs_t offset, uint8_t data) { }
+
+ virtual uint8_t pb_r() { return 0xff; }
+ virtual void pb_w(uint8_t data) { }
protected:
device_bbc_exp_interface(const machine_config &mconfig, device_t &device);
diff --git a/src/devices/bus/bbc/exp/mertec.cpp b/src/devices/bus/bbc/exp/mertec.cpp
index 8f896da0359..ab9dc3c2f6e 100644
--- a/src/devices/bus/bbc/exp/mertec.cpp
+++ b/src/devices/bus/bbc/exp/mertec.cpp
@@ -52,7 +52,7 @@ void bbc_mertec_device::device_add_mconfig(machine_config &config)
//m_pia->irq_handler().set("irqs", FUNC(input_merger_device::in_w<0>));
/* adc */
- UPD7002(config, m_upd7002, 0);
+ UPD7002(config, m_upd7002, DERIVED_CLOCK(1, 8));
m_upd7002->set_get_analogue_callback(FUNC(bbc_mertec_device::get_analogue_input), this);
m_upd7002->set_eoc_callback(FUNC(bbc_mertec_device::upd7002_eoc), this);
@@ -114,52 +114,52 @@ void bbc_mertec_device::upd7002_eoc(int data)
//m_via6522_0->write_cb1(data);
}
-READ8_MEMBER(bbc_mertec_device::fred_r)
+uint8_t bbc_mertec_device::fred_r(offs_t offset)
{
- return m_2mhzbus->fred_r(space, offset);
+ return m_2mhzbus->fred_r(offset);
}
-WRITE8_MEMBER(bbc_mertec_device::fred_w)
+void bbc_mertec_device::fred_w(offs_t offset, uint8_t data)
{
- m_2mhzbus->fred_w(space, offset, data);
+ m_2mhzbus->fred_w(offset, data);
}
-READ8_MEMBER(bbc_mertec_device::jim_r)
+uint8_t bbc_mertec_device::jim_r(offs_t offset)
{
- return m_2mhzbus->jim_r(space, offset);
+ return m_2mhzbus->jim_r(offset);
}
-WRITE8_MEMBER(bbc_mertec_device::jim_w)
+void bbc_mertec_device::jim_w(offs_t offset, uint8_t data)
{
- m_2mhzbus->jim_w(space, offset, data);
+ m_2mhzbus->jim_w(offset, data);
}
-READ8_MEMBER(bbc_mertec_device::sheila_r)
+uint8_t bbc_mertec_device::sheila_r(offs_t offset)
{
uint8_t data = 0xfe;
if (offset >= 0x18 && offset < 0x20)
{
- data = m_upd7002->read(space, offset & 0x03);
+ data = m_upd7002->read(offset & 0x03);
}
return data;
}
-WRITE8_MEMBER(bbc_mertec_device::sheila_w)
+void bbc_mertec_device::sheila_w(offs_t offset, uint8_t data)
{
if (offset >= 0x18 && offset < 0x20)
{
- m_upd7002->write(space, offset & 0x03, data);
+ m_upd7002->write(offset & 0x03, data);
}
}
-READ8_MEMBER(bbc_mertec_device::pb_r)
+uint8_t bbc_mertec_device::pb_r()
{
- return m_userport->pb_r(space, 0);
+ return m_userport->pb_r();
}
-WRITE8_MEMBER(bbc_mertec_device::pb_w)
+void bbc_mertec_device::pb_w(uint8_t data)
{
- m_userport->pb_w(space, 0, data);
+ m_userport->pb_w(data);
}
diff --git a/src/devices/bus/bbc/exp/mertec.h b/src/devices/bus/bbc/exp/mertec.h
index bd87c0d5398..33d71ab2ce9 100644
--- a/src/devices/bus/bbc/exp/mertec.h
+++ b/src/devices/bus/bbc/exp/mertec.h
@@ -40,15 +40,15 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
- virtual DECLARE_READ8_MEMBER(fred_r) override;
- virtual DECLARE_WRITE8_MEMBER(fred_w) override;
- virtual DECLARE_READ8_MEMBER(jim_r) override;
- virtual DECLARE_WRITE8_MEMBER(jim_w) override;
- virtual DECLARE_READ8_MEMBER(sheila_r) override;
- virtual DECLARE_WRITE8_MEMBER(sheila_w) override;
-
- virtual DECLARE_READ8_MEMBER(pb_r) override;
- virtual DECLARE_WRITE8_MEMBER(pb_w) override;
+ virtual uint8_t fred_r(offs_t offset) override;
+ virtual void fred_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t jim_r(offs_t offset) override;
+ virtual void jim_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t sheila_r(offs_t offset) override;
+ virtual void sheila_w(offs_t offset, uint8_t data) override;
+
+ virtual uint8_t pb_r() override;
+ virtual void pb_w(uint8_t data) override;
private:
int get_analogue_input(int channel_number);
diff --git a/src/devices/bus/bbc/fdc/acorn.cpp b/src/devices/bus/bbc/fdc/acorn.cpp
index dd5d8f28559..0df7b38b076 100644
--- a/src/devices/bus/bbc/fdc/acorn.cpp
+++ b/src/devices/bus/bbc/fdc/acorn.cpp
@@ -166,30 +166,30 @@ void bbc_acorn1770_device::device_start()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(bbc_acorn8271_device::read)
+uint8_t bbc_acorn8271_device::read(offs_t offset)
{
uint8_t data;
if (offset & 0x04)
{
- data = m_fdc->data_r(space , 0);
+ data = m_fdc->data_r();
}
else
{
- data = m_fdc->read(space, offset & 0x03);
+ data = m_fdc->read(offset & 0x03);
}
return data;
}
-WRITE8_MEMBER(bbc_acorn8271_device::write)
+void bbc_acorn8271_device::write(offs_t offset, uint8_t data)
{
if (offset & 0x04)
{
- m_fdc->data_w(space, 0, data);
+ m_fdc->data_w(data);
}
else
{
- m_fdc->write(space, offset & 0x03, data);
+ m_fdc->write(offset & 0x03, data);
}
}
@@ -207,7 +207,7 @@ WRITE_LINE_MEMBER(bbc_acorn8271_device::side_w)
}
-READ8_MEMBER(bbc_acorn1770_device::read)
+uint8_t bbc_acorn1770_device::read(offs_t offset)
{
uint8_t data = 0xff;
@@ -222,7 +222,7 @@ READ8_MEMBER(bbc_acorn1770_device::read)
return data;
}
-WRITE8_MEMBER(bbc_acorn1770_device::write)
+void bbc_acorn1770_device::write(offs_t offset, uint8_t data)
{
if (offset & 0x04)
{
diff --git a/src/devices/bus/bbc/fdc/acorn.h b/src/devices/bus/bbc/fdc/acorn.h
index 951b7e33e1d..13b434b156b 100644
--- a/src/devices/bus/bbc/fdc/acorn.h
+++ b/src/devices/bus/bbc/fdc/acorn.h
@@ -42,8 +42,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
- virtual DECLARE_READ8_MEMBER(read) override;
- virtual DECLARE_WRITE8_MEMBER(write) override;
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
private:
DECLARE_WRITE_LINE_MEMBER(motor_w);
@@ -70,8 +70,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
- virtual DECLARE_READ8_MEMBER(read) override;
- virtual DECLARE_WRITE8_MEMBER(write) override;
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
private:
DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w);
diff --git a/src/devices/bus/bbc/fdc/ams.cpp b/src/devices/bus/bbc/fdc/ams.cpp
index 02af01be5c5..db9eb7e3012 100644
--- a/src/devices/bus/bbc/fdc/ams.cpp
+++ b/src/devices/bus/bbc/fdc/ams.cpp
@@ -89,30 +89,30 @@ void bbc_ams3_device::device_start()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(bbc_ams3_device::read)
+uint8_t bbc_ams3_device::read(offs_t offset)
{
uint8_t data;
if (offset & 0x04)
{
- data = m_fdc->data_r(space , 0);
+ data = m_fdc->data_r();
}
else
{
- data = m_fdc->read(space, offset & 0x03);
+ data = m_fdc->read(offset & 0x03);
}
return data;
}
-WRITE8_MEMBER(bbc_ams3_device::write)
+void bbc_ams3_device::write(offs_t offset, uint8_t data)
{
if (offset & 0x04)
{
- m_fdc->data_w(space, 0, data);
+ m_fdc->data_w(data);
}
else
{
- m_fdc->write(space, offset & 0x03, data);
+ m_fdc->write(offset & 0x03, data);
}
}
diff --git a/src/devices/bus/bbc/fdc/ams.h b/src/devices/bus/bbc/fdc/ams.h
index a97a6b762c5..304666b5392 100644
--- a/src/devices/bus/bbc/fdc/ams.h
+++ b/src/devices/bus/bbc/fdc/ams.h
@@ -39,8 +39,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
- virtual DECLARE_READ8_MEMBER(read) override;
- virtual DECLARE_WRITE8_MEMBER(write) override;
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
private:
DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w);
diff --git a/src/devices/bus/bbc/fdc/cumana.cpp b/src/devices/bus/bbc/fdc/cumana.cpp
index 23cecd3ebcf..f4490b1922d 100644
--- a/src/devices/bus/bbc/fdc/cumana.cpp
+++ b/src/devices/bus/bbc/fdc/cumana.cpp
@@ -137,7 +137,7 @@ void bbc_cumanafdc_device::device_start()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(bbc_cumanafdc_device::read)
+uint8_t bbc_cumanafdc_device::read(offs_t offset)
{
uint8_t data;
@@ -152,7 +152,7 @@ READ8_MEMBER(bbc_cumanafdc_device::read)
return data;
}
-WRITE8_MEMBER(bbc_cumanafdc_device::write)
+void bbc_cumanafdc_device::write(offs_t offset, uint8_t data)
{
if (offset & 0x04)
{
diff --git a/src/devices/bus/bbc/fdc/cumana.h b/src/devices/bus/bbc/fdc/cumana.h
index 5b2439000ec..6e1a4f25011 100644
--- a/src/devices/bus/bbc/fdc/cumana.h
+++ b/src/devices/bus/bbc/fdc/cumana.h
@@ -39,8 +39,8 @@ protected:
// device-level overrides
virtual void device_start() override;
- virtual DECLARE_READ8_MEMBER(read) override;
- virtual DECLARE_WRITE8_MEMBER(write) override;
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
required_device<mb8877_device> m_fdc;
required_device<floppy_connector> m_floppy0;
diff --git a/src/devices/bus/bbc/fdc/cv1797.cpp b/src/devices/bus/bbc/fdc/cv1797.cpp
index 98f54718c42..d14098a3fa3 100644
--- a/src/devices/bus/bbc/fdc/cv1797.cpp
+++ b/src/devices/bus/bbc/fdc/cv1797.cpp
@@ -100,7 +100,7 @@ void bbc_cv1797_device::device_start()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(bbc_cv1797_device::read)
+uint8_t bbc_cv1797_device::read(offs_t offset)
{
uint8_t data;
@@ -115,7 +115,7 @@ READ8_MEMBER(bbc_cv1797_device::read)
return data;
}
-WRITE8_MEMBER(bbc_cv1797_device::write)
+void bbc_cv1797_device::write(offs_t offset, uint8_t data)
{
if (offset & 0x04)
{
diff --git a/src/devices/bus/bbc/fdc/cv1797.h b/src/devices/bus/bbc/fdc/cv1797.h
index a887a1b18a4..86207c8fcd0 100644
--- a/src/devices/bus/bbc/fdc/cv1797.h
+++ b/src/devices/bus/bbc/fdc/cv1797.h
@@ -40,8 +40,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
- virtual DECLARE_READ8_MEMBER(read) override;
- virtual DECLARE_WRITE8_MEMBER(write) override;
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
private:
DECLARE_FLOPPY_FORMATS(floppy_formats);
diff --git a/src/devices/bus/bbc/fdc/fdc.cpp b/src/devices/bus/bbc/fdc/fdc.cpp
index 10f9131351f..2269bb3370a 100644
--- a/src/devices/bus/bbc/fdc/fdc.cpp
+++ b/src/devices/bus/bbc/fdc/fdc.cpp
@@ -89,10 +89,10 @@ void bbc_fdc_slot_device::device_reset()
// read
//-------------------------------------------------
-READ8_MEMBER(bbc_fdc_slot_device::read)
+uint8_t bbc_fdc_slot_device::read(offs_t offset)
{
if (m_card)
- return m_card->read(space, offset);
+ return m_card->read(offset);
else
return 0xff;
}
@@ -101,10 +101,10 @@ READ8_MEMBER(bbc_fdc_slot_device::read)
// write
//-------------------------------------------------
-WRITE8_MEMBER(bbc_fdc_slot_device::write)
+void bbc_fdc_slot_device::write(offs_t offset, uint8_t data)
{
if (m_card)
- m_card->write(space, offset, data);
+ m_card->write(offset, data);
}
//-------------------------------------------------
diff --git a/src/devices/bus/bbc/fdc/fdc.h b/src/devices/bus/bbc/fdc/fdc.h
index 0cc256961ee..3264172a25d 100644
--- a/src/devices/bus/bbc/fdc/fdc.h
+++ b/src/devices/bus/bbc/fdc/fdc.h
@@ -41,8 +41,8 @@ public:
auto intrq_wr_callback() { return m_intrq_cb.bind(); }
auto drq_wr_callback() { return m_drq_cb.bind(); }
- virtual DECLARE_READ8_MEMBER(read);
- virtual DECLARE_WRITE8_MEMBER(write);
+ uint8_t read(offs_t offset);
+ void write(offs_t offset, uint8_t data);
DECLARE_WRITE_LINE_MEMBER( intrq_w ) { m_intrq_cb(state); }
DECLARE_WRITE_LINE_MEMBER( drq_w) { m_drq_cb(state); }
@@ -66,8 +66,8 @@ private:
class device_bbc_fdc_interface : public device_slot_card_interface
{
public:
- virtual DECLARE_READ8_MEMBER(read) { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(write) { }
+ virtual uint8_t read(offs_t offset) { return 0xff; }
+ virtual void write(offs_t offset, uint8_t data) { }
protected:
device_bbc_fdc_interface(const machine_config &mconfig, device_t &device);
diff --git a/src/devices/bus/bbc/fdc/microware.cpp b/src/devices/bus/bbc/fdc/microware.cpp
index 29489af382c..477ac0f3f9e 100644
--- a/src/devices/bus/bbc/fdc/microware.cpp
+++ b/src/devices/bus/bbc/fdc/microware.cpp
@@ -101,7 +101,7 @@ void bbc_microware_device::device_start()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(bbc_microware_device::read)
+uint8_t bbc_microware_device::read(offs_t offset)
{
uint8_t data;
@@ -116,7 +116,7 @@ READ8_MEMBER(bbc_microware_device::read)
return data;
}
-WRITE8_MEMBER(bbc_microware_device::write)
+void bbc_microware_device::write(offs_t offset, uint8_t data)
{
if (offset & 0x04)
{
diff --git a/src/devices/bus/bbc/fdc/microware.h b/src/devices/bus/bbc/fdc/microware.h
index 117159b407d..61c0cb358cf 100644
--- a/src/devices/bus/bbc/fdc/microware.h
+++ b/src/devices/bus/bbc/fdc/microware.h
@@ -42,8 +42,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
- virtual DECLARE_READ8_MEMBER(read) override;
- virtual DECLARE_WRITE8_MEMBER(write) override;
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
private:
DECLARE_FLOPPY_FORMATS(floppy_formats);
diff --git a/src/devices/bus/bbc/fdc/opus.cpp b/src/devices/bus/bbc/fdc/opus.cpp
index f25de315c58..f6b07df6bcb 100644
--- a/src/devices/bus/bbc/fdc/opus.cpp
+++ b/src/devices/bus/bbc/fdc/opus.cpp
@@ -212,7 +212,7 @@ void bbc_opusfdc_device::device_start()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(bbc_opus8272_device::read)
+uint8_t bbc_opus8272_device::read(offs_t offset)
{
uint8_t data = 0xff;
@@ -227,20 +227,20 @@ READ8_MEMBER(bbc_opus8272_device::read)
if (m_floppy0->get_device()) m_floppy0->get_device()->mon_w(1);
if (m_floppy1->get_device()) m_floppy1->get_device()->mon_w(1);
case 0x04:
- data = m_fdc->msr_r(space, 0);
+ data = m_fdc->msr_r();
break;
case 0x05:
if (m_floppy0->get_device()) m_floppy0->get_device()->mon_w(0);
if (m_floppy1->get_device()) m_floppy1->get_device()->mon_w(0);
case 0x07:
- data = m_fdc->fifo_r(space, 0);
+ data = m_fdc->fifo_r();
break;
}
return data;
}
-WRITE8_MEMBER(bbc_opus8272_device::write)
+void bbc_opus8272_device::write(offs_t offset, uint8_t data)
{
floppy_image_device *floppy = nullptr;
@@ -259,13 +259,13 @@ WRITE8_MEMBER(bbc_opus8272_device::write)
if (m_floppy0->get_device()) m_floppy0->get_device()->mon_w(0);
if (m_floppy1->get_device()) m_floppy1->get_device()->mon_w(0);
case 0x07:
- m_fdc->fifo_w(space, 0, data);
+ m_fdc->fifo_w(data);
break;
}
}
-READ8_MEMBER(bbc_opusfdc_device::read)
+uint8_t bbc_opusfdc_device::read(offs_t offset)
{
uint8_t data;
@@ -280,7 +280,7 @@ READ8_MEMBER(bbc_opusfdc_device::read)
return data;
}
-WRITE8_MEMBER(bbc_opusfdc_device::write)
+void bbc_opusfdc_device::write(offs_t offset, uint8_t data)
{
if (offset & 0x04)
{
diff --git a/src/devices/bus/bbc/fdc/opus.h b/src/devices/bus/bbc/fdc/opus.h
index 721f3ebab5c..033fccc02c4 100644
--- a/src/devices/bus/bbc/fdc/opus.h
+++ b/src/devices/bus/bbc/fdc/opus.h
@@ -36,8 +36,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
- virtual DECLARE_READ8_MEMBER(read) override;
- virtual DECLARE_WRITE8_MEMBER(write) override;
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
private:
required_device<i8272a_device> m_fdc;
@@ -62,8 +62,8 @@ protected:
// device-level overrides
virtual void device_start() override;
- virtual DECLARE_READ8_MEMBER(read) override;
- virtual DECLARE_WRITE8_MEMBER(write) override;
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
required_device<wd_fdc_device_base> m_fdc;
required_device<floppy_connector> m_floppy0;
diff --git a/src/devices/bus/bbc/fdc/watford.cpp b/src/devices/bus/bbc/fdc/watford.cpp
index b888840314f..4c3f31344ee 100644
--- a/src/devices/bus/bbc/fdc/watford.cpp
+++ b/src/devices/bus/bbc/fdc/watford.cpp
@@ -147,7 +147,7 @@ void bbc_weddb3_device::device_start()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(bbc_weddb2_device::read)
+uint8_t bbc_weddb2_device::read(offs_t offset)
{
uint8_t data;
@@ -162,7 +162,7 @@ READ8_MEMBER(bbc_weddb2_device::read)
return data;
}
-WRITE8_MEMBER(bbc_weddb2_device::write)
+void bbc_weddb2_device::write(offs_t offset, uint8_t data)
{
if (offset & 0x04)
{
@@ -192,7 +192,7 @@ WRITE8_MEMBER(bbc_weddb2_device::write)
}
}
-READ8_MEMBER(bbc_weddb3_device::read)
+uint8_t bbc_weddb3_device::read(offs_t offset)
{
uint8_t data;
@@ -207,7 +207,7 @@ READ8_MEMBER(bbc_weddb3_device::read)
return data;
}
-WRITE8_MEMBER(bbc_weddb3_device::write)
+void bbc_weddb3_device::write(offs_t offset, uint8_t data)
{
if (offset & 0x04)
{
diff --git a/src/devices/bus/bbc/fdc/watford.h b/src/devices/bus/bbc/fdc/watford.h
index 02bbf59f523..2f1cfa65c64 100644
--- a/src/devices/bus/bbc/fdc/watford.h
+++ b/src/devices/bus/bbc/fdc/watford.h
@@ -45,8 +45,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
- virtual DECLARE_READ8_MEMBER(read) override;
- virtual DECLARE_WRITE8_MEMBER(write) override;
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
private:
required_device<wd_fdc_device_base> m_fdc;
@@ -68,8 +68,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
- virtual DECLARE_READ8_MEMBER(read) override;
- virtual DECLARE_WRITE8_MEMBER(write) override;
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
private:
required_device<wd_fdc_device_base> m_fdc;
diff --git a/src/devices/bus/bbc/joyport/joyport.cpp b/src/devices/bus/bbc/joyport/joyport.cpp
index 5ed3f8d2fff..0c1bae50ee2 100644
--- a/src/devices/bus/bbc/joyport/joyport.cpp
+++ b/src/devices/bus/bbc/joyport/joyport.cpp
@@ -91,11 +91,11 @@ void bbc_joyport_slot_device::device_reset()
// pb_r
//-------------------------------------------------
-READ8_MEMBER(bbc_joyport_slot_device::pb_r)
+uint8_t bbc_joyport_slot_device::pb_r()
{
// TODO: Joyport connected to PB0-PB4 only. PB5-PB7 are expansion port.
if (m_device)
- return 0xe0 | m_device->pb_r(space, 0);
+ return 0xe0 | m_device->pb_r();
else
return 0xff;
}
@@ -105,10 +105,10 @@ READ8_MEMBER(bbc_joyport_slot_device::pb_r)
// pb_w
//-------------------------------------------------
-WRITE8_MEMBER(bbc_joyport_slot_device::pb_w)
+void bbc_joyport_slot_device::pb_w(uint8_t data)
{
if (m_device)
- m_device->pb_w(space, 0, data);
+ m_device->pb_w(data);
}
diff --git a/src/devices/bus/bbc/joyport/joyport.h b/src/devices/bus/bbc/joyport/joyport.h
index 572e41f7612..6abda62633d 100644
--- a/src/devices/bus/bbc/joyport/joyport.h
+++ b/src/devices/bus/bbc/joyport/joyport.h
@@ -64,8 +64,8 @@ public:
DECLARE_WRITE_LINE_MEMBER(cb1_w) { m_cb1_handler(state); }
DECLARE_WRITE_LINE_MEMBER(cb2_w) { m_cb2_handler(state); }
- DECLARE_READ8_MEMBER(pb_r);
- DECLARE_WRITE8_MEMBER(pb_w);
+ uint8_t pb_r();
+ void pb_w(uint8_t data);
protected:
// device-level overrides
@@ -86,8 +86,8 @@ private:
class device_bbc_joyport_interface : public device_slot_card_interface
{
public:
- virtual DECLARE_READ8_MEMBER(pb_r) { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(pb_w) { }
+ virtual uint8_t pb_r() { return 0xff; }
+ virtual void pb_w(uint8_t data) { }
protected:
device_bbc_joyport_interface(const machine_config &mconfig, device_t &device);
diff --git a/src/devices/bus/bbc/joyport/joystick.cpp b/src/devices/bus/bbc/joyport/joystick.cpp
index 5f4047c13a3..d53186f118d 100644
--- a/src/devices/bus/bbc/joyport/joystick.cpp
+++ b/src/devices/bus/bbc/joyport/joystick.cpp
@@ -78,7 +78,7 @@ void bbcmc_joystick_device::device_reset()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(bbcmc_joystick_device::pb_r)
+uint8_t bbcmc_joystick_device::pb_r()
{
return m_joy->read();
}
diff --git a/src/devices/bus/bbc/joyport/joystick.h b/src/devices/bus/bbc/joyport/joystick.h
index 0e9cea22716..8d0cc5a0458 100644
--- a/src/devices/bus/bbc/joyport/joystick.h
+++ b/src/devices/bus/bbc/joyport/joystick.h
@@ -36,7 +36,7 @@ protected:
virtual void device_start() override;
virtual void device_reset() override;
- virtual DECLARE_READ8_MEMBER(pb_r) override;
+ virtual uint8_t pb_r() override;
private:
required_ioport m_joy;
diff --git a/src/devices/bus/bbc/rom/dfs.cpp b/src/devices/bus/bbc/rom/dfs.cpp
new file mode 100644
index 00000000000..8a3aac6d588
--- /dev/null
+++ b/src/devices/bus/bbc/rom/dfs.cpp
@@ -0,0 +1,63 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/***************************************************************************
+
+ BBC Micro MRM E00 DFS emulation
+
+ Comprises of 8K ROM and 2K/4K? RAM on a carrier board, with flying lead
+ to RW line to enable writing to RAM.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "dfs.h"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(BBC_MRME00, bbc_mrme00_device, "bbc_mrme00", "BBC Micro MRM E00 DFS")
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// bbc_rom_device - constructor
+//-------------------------------------------------
+
+bbc_mrme00_device::bbc_mrme00_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, BBC_MRME00, tag, owner, clock)
+ , device_bbc_rom_interface(mconfig, *this)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void bbc_mrme00_device::device_start()
+{
+}
+
+//-------------------------------------------------
+// read
+//-------------------------------------------------
+
+uint8_t bbc_mrme00_device::read(offs_t offset)
+{
+ if (offset < get_rom_size())
+ return get_rom_base()[offset & (get_rom_size() - 1)];
+ else
+ return get_ram_base()[offset & (get_ram_size() - 1)];
+}
+
+//-------------------------------------------------
+// write
+//-------------------------------------------------
+
+void bbc_mrme00_device::write(offs_t offset, uint8_t data)
+{
+ get_ram_base()[offset & (get_ram_size() - 1)] = data;
+}
diff --git a/src/devices/bus/bbc/rom/dfs.h b/src/devices/bus/bbc/rom/dfs.h
new file mode 100644
index 00000000000..b76a7ab26ed
--- /dev/null
+++ b/src/devices/bus/bbc/rom/dfs.h
@@ -0,0 +1,42 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/***************************************************************************
+
+ BBC Micro MRM E00 DFS emulation
+
+***************************************************************************/
+
+#ifndef MAME_BUS_BBC_ROM_DFS_H
+#define MAME_BUS_BBC_ROM_DFS_H
+
+#pragma once
+
+#include "slot.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> bbc_mrme00_device
+
+class bbc_mrme00_device : public device_t,
+ public device_bbc_rom_interface
+{
+public:
+ // construction/destruction
+ bbc_mrme00_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+
+ // device_bbc_rom_interface overrides
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
+};
+
+// device type definition
+DECLARE_DEVICE_TYPE(BBC_MRME00, bbc_mrme00_device)
+
+
+#endif // MAME_BUS_BBC_ROM_DFS_H
diff --git a/src/devices/bus/bbc/rom/pal.cpp b/src/devices/bus/bbc/rom/pal.cpp
new file mode 100644
index 00000000000..51667f70955
--- /dev/null
+++ b/src/devices/bus/bbc/rom/pal.cpp
@@ -0,0 +1,312 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/***************************************************************************
+
+ BBC Micro PALPROM carrier boards
+
+ Computer Concepts PALPROM carrier boards (PAL16R4):
+ These were the first to provide a 32K ROM banked into a 16K slot using
+ a PAL to perform the switching upon reads from pre-programmed zones. In
+ addition to being able to provide larger ROM based applications such
+ as Inter-Word and Inter-Base, it also served as copy protection since
+ the carrier board and PAL would have to be reproduced to support the
+ ROM.
+ Other publishers such as Beebug and PMS also used the carrier boards
+ and PAL provided by Computer Concepts.
+
+ Watford Electronics PALPROM carrier boards (PAL16L8):
+ The PALPROM device provides a means of running 32K software within the
+ space allocated to a 16K sideways ROM whilst providing a good degree of
+ software protection.
+ Within a PALPROM, a 32K EPROM is divided into 4 banks of 8K. These are
+ arranged in a 3 plus 1 arrangement. Bank 0, which occupies &8000 to
+ &9FFF is permanently enabled, whilst banks 1 to 3, which occupy the
+ region &A000 to &BFFF, are swapped in one at a time. This swapping is
+ made by performing an access to a special switching zone, of which there
+ are 8 in total. Accessing a switching zone, which is 32 bytes in length
+ and aligned to start on a 32 byte boundary, selects a pre-specified bank
+ (1 to 3)
+
+ P.R.E.S. PALPROM carrier boards:
+ This was based on the Computer Concepts carrier board.
+
+ Instant Mini Office 2:
+ Not a PALPROM carrier board but a larger ROM carrier containing 4x32K
+ and TTL circuits to enable and page each ROM into 16K banks.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "pal.h"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(BBC_CCIWORD, bbc_cciword_device, "bbc_cciword", "Computer Concepts 32K ROM Carrier (Inter-Word)")
+DEFINE_DEVICE_TYPE(BBC_CCIBASE, bbc_ccibase_device, "bbc_ccibase", "Computer Concepts 64K ROM Carrier (Inter-Base)")
+DEFINE_DEVICE_TYPE(BBC_CCISPELL, bbc_ccispell_device, "bbc_ccispell", "Computer Concepts 128K ROM Carrier (SpellMaster)")
+DEFINE_DEVICE_TYPE(BBC_PALQST, bbc_palqst_device, "bbc_palqst", "Watford Electronics ROM Carrier (Quest Paint)")
+DEFINE_DEVICE_TYPE(BBC_PALWAP, bbc_palwap_device, "bbc_palwap", "Watford Electronics ROM Carrier (Wapping Editor)")
+DEFINE_DEVICE_TYPE(BBC_PALTED, bbc_palted_device, "bbc_palted", "Watford Electronics ROM Carrier (TED)")
+DEFINE_DEVICE_TYPE(BBC_PALABEP, bbc_palabep_device, "bbc_palabep", "P.R.E.S. 32K ROM Carrier (ABE+)")
+DEFINE_DEVICE_TYPE(BBC_PALABE, bbc_palabe_device, "bbc_palabe", "P.R.E.S. 32K ROM Carrier (ABE)")
+DEFINE_DEVICE_TYPE(BBC_PALMO2, bbc_palmo2_device, "bbc_palmo2", "Instant Mini Office 2 ROM Carrier")
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// bbc_palprom_device - constructor
+//-------------------------------------------------
+
+bbc_pal_device::bbc_pal_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_bbc_rom_interface(mconfig, *this)
+ , m_bank(0)
+{
+}
+
+bbc_cciword_device::bbc_cciword_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : bbc_pal_device(mconfig, BBC_CCIWORD, tag, owner, clock)
+{
+}
+
+bbc_ccibase_device::bbc_ccibase_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : bbc_pal_device(mconfig, BBC_CCIBASE, tag, owner, clock)
+{
+}
+
+bbc_ccispell_device::bbc_ccispell_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : bbc_pal_device(mconfig, BBC_CCISPELL, tag, owner, clock)
+{
+}
+
+bbc_palqst_device::bbc_palqst_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : bbc_pal_device(mconfig, BBC_PALQST, tag, owner, clock)
+{
+}
+
+bbc_palwap_device::bbc_palwap_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : bbc_pal_device(mconfig, BBC_PALWAP, tag, owner, clock)
+{
+}
+
+bbc_palted_device::bbc_palted_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : bbc_pal_device(mconfig, BBC_PALTED, tag, owner, clock)
+{
+}
+
+bbc_palabep_device::bbc_palabep_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : bbc_pal_device(mconfig, BBC_PALABEP, tag, owner, clock)
+{
+}
+
+bbc_palabe_device::bbc_palabe_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : bbc_pal_device(mconfig, BBC_PALABE, tag, owner, clock)
+{
+}
+
+bbc_palmo2_device::bbc_palmo2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : bbc_pal_device(mconfig, BBC_PALMO2, tag, owner, clock)
+{
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void bbc_pal_device::device_start()
+{
+ save_item(NAME(m_bank));
+}
+
+//-------------------------------------------------
+// read
+//-------------------------------------------------
+
+uint8_t bbc_cciword_device::read(offs_t offset)
+{
+ if (!machine().side_effects_disabled())
+ {
+ /* switching zones for Inter-Word */
+ switch (offset & 0x3fe0)
+ {
+ case 0x0060:
+ case 0x3fc0: m_bank = 0; break;
+ case 0x0040:
+ case 0x3fa0:
+ case 0x3fe0: m_bank = 1; break;
+ }
+ }
+
+ return get_rom_base()[(offset & 0x3fff) | (m_bank << 14)];
+}
+
+uint8_t bbc_ccibase_device::read(offs_t offset)
+{
+ if (!machine().side_effects_disabled())
+ {
+ /* switching zones for Inter-Base */
+ switch (offset & 0x3fe0)
+ {
+ case 0x3f80: m_bank = 0; break;
+ case 0x3fa0: m_bank = 1; break;
+ case 0x3fc0: m_bank = 2; break;
+ case 0x3fe0: m_bank = 3; break;
+ }
+ }
+
+ return get_rom_base()[(offset & 0x3fff) | (m_bank << 14)];
+}
+
+uint8_t bbc_ccispell_device::read(offs_t offset)
+{
+ if (!machine().side_effects_disabled())
+ {
+ /* switching zones for SpellMaster */
+ if (offset == 0x3fe0)
+ {
+ m_bank = 0;
+ }
+ else if (m_bank == 0)
+ {
+ switch (offset & 0x3fe0)
+ {
+ case 0x3fc0: m_bank = 1; break;
+ case 0x3fa0: m_bank = 2; break;
+ case 0x3f80: m_bank = 3; break;
+ case 0x3f60: m_bank = 4; break;
+ case 0x3f40: m_bank = 5; break;
+ case 0x3f20: m_bank = 6; break;
+ case 0x3f00: m_bank = 7; break;
+ }
+ }
+ }
+
+ return get_rom_base()[(offset & 0x3fff) | (m_bank << 14)];
+}
+
+uint8_t bbc_palqst_device::read(offs_t offset)
+{
+ if (!machine().side_effects_disabled())
+ {
+ /* switching zones for Quest Paint and ConQuest */
+ switch (offset & 0x3fe0)
+ {
+ case 0x0820: m_bank = 2; break;
+ case 0x11e0: m_bank = 1; break;
+ case 0x12c0: m_bank = 3; break;
+ case 0x1340: m_bank = 0; break;
+ }
+ }
+
+ if (offset & 0x2000)
+ {
+ return get_rom_base()[(offset & 0x1fff) | (m_bank << 13)];
+ }
+ else
+ {
+ return get_rom_base()[offset & 0x1fff];
+ }
+}
+
+uint8_t bbc_palwap_device::read(offs_t offset)
+{
+ if (!machine().side_effects_disabled())
+ {
+ /* switching zones for Wapping Editor */
+ switch (offset & 0x3fe0)
+ {
+ case 0x1f00: m_bank = 0; break;
+ case 0x1f20: m_bank = 1; break;
+ case 0x1f40: m_bank = 2; break;
+ case 0x1f60: m_bank = 3; break;
+ case 0x1f80: m_bank = 4; break;
+ case 0x1fa0: m_bank = 5; break;
+ case 0x1fc0: m_bank = 6; break;
+ case 0x1fe0: m_bank = 7; break;
+ }
+ }
+
+ if (offset & 0x2000)
+ {
+ return get_rom_base()[(offset & 0x1fff) | (m_bank << 13)];
+ }
+ else
+ {
+ return get_rom_base()[offset & 0x1fff];
+ }
+}
+
+uint8_t bbc_palted_device::read(offs_t offset)
+{
+ if (!machine().side_effects_disabled())
+ {
+ /* switching zones for TED */
+ switch (offset & 0x3fe0)
+ {
+ case 0x1f80: m_bank = 0; break;
+ case 0x1fa0: m_bank = 1; break;
+ case 0x1fc0: m_bank = 2; break;
+ case 0x1fe0: m_bank = 3; break;
+ }
+ }
+
+ if (offset & 0x2000)
+ {
+ return get_rom_base()[(offset & 0x1fff) | (m_bank << 13)];
+ }
+ else
+ {
+ return get_rom_base()[offset & 0x1fff];
+ }
+}
+
+uint8_t bbc_palabep_device::read(offs_t offset)
+{
+ if (!machine().side_effects_disabled())
+ {
+ /* switching zones for Advanced BASIC Editor Plus */
+ switch (offset & 0x3ffc)
+ {
+ case 0x3ff8: m_bank = 0; break;
+ case 0x3ffc: m_bank = 1; break;
+ }
+ }
+
+ return get_rom_base()[(offset & 0x3fff) | (m_bank << 14)];
+}
+
+uint8_t bbc_palabe_device::read(offs_t offset)
+{
+ if (!machine().side_effects_disabled())
+ {
+ /* switching zones for Advanced BASIC Editor */
+ switch (offset & 0x3ffc)
+ {
+ case 0x3ff8: m_bank = 1; break;
+ case 0x3ffc: m_bank = 0; break;
+ }
+ }
+
+ return get_rom_base()[(offset & 0x3fff) | (m_bank << 14)];
+}
+
+uint8_t bbc_palmo2_device::read(offs_t offset)
+{
+ if (!machine().side_effects_disabled())
+ {
+ /* switching zones for Instant Mini Office 2 */
+ switch (offset & 0x3ff0)
+ {
+ case 0x2000: m_bank = offset & 0x0f; break;
+ }
+ }
+
+ return get_rom_base()[(offset & 0x3fff) | (m_bank << 13)];
+}
diff --git a/src/devices/bus/bbc/rom/pal.h b/src/devices/bus/bbc/rom/pal.h
new file mode 100644
index 00000000000..31c8dcd0d78
--- /dev/null
+++ b/src/devices/bus/bbc/rom/pal.h
@@ -0,0 +1,167 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/***************************************************************************
+
+ BBC Micro PALPROM carrier boards
+
+***************************************************************************/
+
+#ifndef MAME_BUS_BBC_ROM_PAL_H
+#define MAME_BUS_BBC_ROM_PAL_H
+
+#pragma once
+
+#include "slot.h"
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> bbc_pal_device
+
+class bbc_pal_device : public device_t,
+ public device_bbc_rom_interface
+{
+protected:
+ // construction/destruction
+ bbc_pal_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ // device-level overrides
+ virtual void device_start() override;
+
+ // device_bbc_rom_interface overrides
+ virtual uint32_t get_rom_size() override { return 0x4000; }
+
+ uint8_t m_bank;
+};
+
+// ======================> bbc_cciword_device
+
+class bbc_cciword_device : public bbc_pal_device
+{
+public:
+ // construction/destruction
+ bbc_cciword_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device_bbc_rom_interface overrides
+ virtual uint8_t read(offs_t offset) override;
+};
+
+// ======================> bbc_ccibase_device
+
+class bbc_ccibase_device : public bbc_pal_device
+{
+public:
+ // construction/destruction
+ bbc_ccibase_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device_bbc_rom_interface overrides
+ virtual uint8_t read(offs_t offset) override;
+};
+
+// ======================> bbc_ccispell_device
+
+class bbc_ccispell_device : public bbc_pal_device
+{
+public:
+ // construction/destruction
+ bbc_ccispell_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device_bbc_rom_interface overrides
+ virtual uint8_t read(offs_t offset) override;
+};
+
+// ======================> bbc_palqst_device
+
+class bbc_palqst_device : public bbc_pal_device
+{
+public:
+ bbc_palqst_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device_bbc_rom_interface overrides
+ virtual uint8_t read(offs_t offset) override;
+};
+
+// ======================> bbc_palwap_device
+
+class bbc_palwap_device : public bbc_pal_device
+{
+public:
+ bbc_palwap_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device_bbc_rom_interface overrides
+ virtual uint8_t read(offs_t offset) override;
+};
+
+// ======================> bbc_palted_device
+
+class bbc_palted_device : public bbc_pal_device
+{
+public:
+ // construction/destruction
+ bbc_palted_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device_bbc_rom_interface overrides
+ virtual uint8_t read(offs_t offset) override;
+};
+
+// ======================> bbc_palabep_device
+
+class bbc_palabep_device : public bbc_pal_device
+{
+public:
+ // construction/destruction
+ bbc_palabep_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device_bbc_rom_interface overrides
+ virtual uint8_t read(offs_t offset) override;
+};
+
+// ======================> bbc_palabe_device
+
+class bbc_palabe_device : public bbc_pal_device
+{
+public:
+ // construction/destruction
+ bbc_palabe_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device_bbc_rom_interface overrides
+ virtual uint8_t read(offs_t offset) override;
+};
+
+// ======================> bbc_palmo2_device
+
+class bbc_palmo2_device : public bbc_pal_device
+{
+public:
+ // construction/destruction
+ bbc_palmo2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device_bbc_rom_interface overrides
+ virtual uint8_t read(offs_t offset) override;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(BBC_CCIWORD, bbc_cciword_device)
+DECLARE_DEVICE_TYPE(BBC_CCIBASE, bbc_ccibase_device)
+DECLARE_DEVICE_TYPE(BBC_CCISPELL, bbc_ccispell_device)
+DECLARE_DEVICE_TYPE(BBC_PALQST, bbc_palqst_device)
+DECLARE_DEVICE_TYPE(BBC_PALWAP, bbc_palwap_device)
+DECLARE_DEVICE_TYPE(BBC_PALTED, bbc_palted_device)
+DECLARE_DEVICE_TYPE(BBC_PALABEP, bbc_palabep_device)
+DECLARE_DEVICE_TYPE(BBC_PALABE, bbc_palabe_device)
+DECLARE_DEVICE_TYPE(BBC_PALMO2, bbc_palmo2_device)
+
+
+#endif // MAME_BUS_BBC_ROM_PAL_H
diff --git a/src/devices/bus/bbc/rom/ram.cpp b/src/devices/bus/bbc/rom/ram.cpp
new file mode 100644
index 00000000000..0d626955812
--- /dev/null
+++ b/src/devices/bus/bbc/rom/ram.cpp
@@ -0,0 +1,57 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/***************************************************************************
+
+ BBC Micro Sideways RAM emulation
+
+***************************************************************************/
+
+#include "emu.h"
+#include "ram.h"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(BBC_RAM, bbc_ram_device, "bbc_ram", "BBC Micro Sideways RAM")
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// bbc_ram_device - constructor
+//-------------------------------------------------
+
+bbc_ram_device::bbc_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, BBC_RAM, tag, owner, clock)
+ , device_bbc_rom_interface(mconfig, *this)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void bbc_ram_device::device_start()
+{
+}
+
+//-------------------------------------------------
+// read
+//-------------------------------------------------
+
+uint8_t bbc_ram_device::read(offs_t offset)
+{
+ return get_ram_base()[offset & (get_ram_size() - 1)];
+}
+
+//-------------------------------------------------
+// write
+//-------------------------------------------------
+
+void bbc_ram_device::write(offs_t offset, uint8_t data)
+{
+ get_ram_base()[offset & (get_ram_size() - 1)] = data;
+}
diff --git a/src/devices/bus/bbc/rom/ram.h b/src/devices/bus/bbc/rom/ram.h
new file mode 100644
index 00000000000..85267147a35
--- /dev/null
+++ b/src/devices/bus/bbc/rom/ram.h
@@ -0,0 +1,42 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/***************************************************************************
+
+ BBC Micro Sideways RAM emulation
+
+***************************************************************************/
+
+#ifndef MAME_BUS_BBC_ROM_RAM_H
+#define MAME_BUS_BBC_ROM_RAM_H
+
+#pragma once
+
+#include "slot.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> bbc_ram_device
+
+class bbc_ram_device : public device_t,
+ public device_bbc_rom_interface
+{
+public:
+ // construction/destruction
+ bbc_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+
+ // device_bbc_rom_interface overrides
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(BBC_RAM, bbc_ram_device)
+
+#endif // MAME_BUS_BBC_ROM_RAM_H
diff --git a/src/devices/bus/bbc/rom/rom.cpp b/src/devices/bus/bbc/rom/rom.cpp
new file mode 100644
index 00000000000..f798de11c6a
--- /dev/null
+++ b/src/devices/bus/bbc/rom/rom.cpp
@@ -0,0 +1,50 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/***************************************************************************
+
+ BBC Micro Sideways ROM emulation
+
+***************************************************************************/
+
+#include "emu.h"
+#include "rom.h"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(BBC_ROM, bbc_rom_device, "bbc_rom", "BBC Micro Sideways ROM")
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// bbc_rom_device - constructor
+//-------------------------------------------------
+
+bbc_rom_device::bbc_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, BBC_ROM, tag, owner, clock)
+ , device_bbc_rom_interface(mconfig, *this)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void bbc_rom_device::device_start()
+{
+}
+
+//-------------------------------------------------
+// read
+//-------------------------------------------------
+
+uint8_t bbc_rom_device::read(offs_t offset)
+{
+ uint32_t size = std::min((int32_t)get_rom_size(), 0x4000);
+
+ return get_rom_base()[offset & (size - 1)];
+}
diff --git a/src/devices/bus/bbc/rom/rom.h b/src/devices/bus/bbc/rom/rom.h
new file mode 100644
index 00000000000..282e5471781
--- /dev/null
+++ b/src/devices/bus/bbc/rom/rom.h
@@ -0,0 +1,41 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/***************************************************************************
+
+ BBC Micro Sideways ROM emulation
+
+***************************************************************************/
+
+#ifndef MAME_BUS_BBC_ROM_ROM_H
+#define MAME_BUS_BBC_ROM_ROM_H
+
+#pragma once
+
+#include "slot.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> bbc_rom_device
+
+class bbc_rom_device : public device_t,
+ public device_bbc_rom_interface
+{
+public:
+ // construction/destruction
+ bbc_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+
+ // device_bbc_rom_interface overrides
+ virtual uint8_t read(offs_t offset) override;
+};
+
+// device type definition
+DECLARE_DEVICE_TYPE(BBC_ROM, bbc_rom_device)
+
+
+#endif // MAME_BUS_BBC_ROM_ROM_H
diff --git a/src/devices/bus/bbc/rom/rtc.cpp b/src/devices/bus/bbc/rom/rtc.cpp
new file mode 100644
index 00000000000..7d73c24b53e
--- /dev/null
+++ b/src/devices/bus/bbc/rom/rtc.cpp
@@ -0,0 +1,124 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/***************************************************************************
+
+ Solidisk Real Time Clock
+
+ http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Solidisk_RTC.html
+
+ PMS Genie Watch (RTC for the BBC)
+
+***************************************************************************/
+
+#include "emu.h"
+#include "rtc.h"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(BBC_STLRTC, bbc_stlrtc_device, "bbc_stlrtc", "Solidisk Real Time Clock")
+DEFINE_DEVICE_TYPE(BBC_PMSRTC, bbc_pmsrtc_device, "bbc_pmsrtc", "PMS Genie Real Time Clock")
+
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void bbc_stlrtc_device::device_add_mconfig(machine_config &config)
+{
+ MC146818(config, m_rtc, 32.768_kHz_XTAL); // TODO: verify clock
+}
+
+void bbc_pmsrtc_device::device_add_mconfig(machine_config &config)
+{
+ /* Dallas DS1216 SmartWatch RAM */
+ DS1315(config, m_rtc, 0);
+}
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// bbc_stlrtc_device - constructor
+//-------------------------------------------------
+
+bbc_stlrtc_device::bbc_stlrtc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, BBC_STLRTC, tag, owner, clock)
+ , device_bbc_rom_interface(mconfig, *this)
+ , m_rtc(*this, "rtc")
+{
+}
+
+bbc_pmsrtc_device::bbc_pmsrtc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, BBC_PMSRTC, tag, owner, clock)
+ , device_bbc_rom_interface(mconfig, *this)
+ , m_rtc(*this, "rtc")
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void bbc_stlrtc_device::device_start()
+{
+}
+
+void bbc_pmsrtc_device::device_start()
+{
+}
+
+//-------------------------------------------------
+// read
+//-------------------------------------------------
+
+uint8_t bbc_stlrtc_device::read(offs_t offset)
+{
+ uint8_t data = get_rom_base()[offset & 0x3fff];
+
+ switch (offset & 0x3fc0)
+ {
+ case 0x3e00:
+ data = m_rtc->read(1);
+ break;
+ case 0x3e40:
+ if (!machine().side_effects_disabled())
+ m_rtc->write(0, data);
+ break;
+ case 0x3e80:
+ case 0x3ec0:
+ data = m_rtc->read(0);
+ break;
+ case 0x3f00:
+ case 0x3f40:
+ case 0x3f80:
+ case 0x3fc0:
+ if (!machine().side_effects_disabled())
+ m_rtc->write(1, data);
+ break;
+ }
+ return data;
+}
+
+uint8_t bbc_pmsrtc_device::read(offs_t offset)
+{
+ uint8_t data = get_rom_base()[offset & 0x1fff];
+
+ switch (offset)
+ {
+ case 0x00:
+ data |= m_rtc->read_0();
+ break;
+ case 0x01:
+ data |= m_rtc->read_1();
+ break;
+ case 0x04:
+ if (m_rtc->chip_enable())
+ data = m_rtc->read_data() & 0x01;
+ break;
+ }
+ return data;
+}
diff --git a/src/devices/bus/bbc/rom/rtc.h b/src/devices/bus/bbc/rom/rtc.h
new file mode 100644
index 00000000000..d37b2174b9b
--- /dev/null
+++ b/src/devices/bus/bbc/rom/rtc.h
@@ -0,0 +1,72 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/***************************************************************************
+
+ Solidisk Real Time Clock emulation
+
+ PMS Genie Watch (RTC for the BBC)
+
+***************************************************************************/
+
+#ifndef MAME_BUS_BBC_ROM_RTC_H
+#define MAME_BUS_BBC_ROM_RTC_H
+
+#pragma once
+
+#include "slot.h"
+#include "machine/mc146818.h"
+#include "machine/ds1315.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> bbc_stlrtc_device
+
+class bbc_stlrtc_device : public device_t,
+ public device_bbc_rom_interface
+{
+public:
+ // construction/destruction
+ bbc_stlrtc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device-level overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ virtual void device_start() override;
+
+ // device_bbc_rom_interface overrides
+ virtual uint8_t read(offs_t offset) override;
+
+private:
+ required_device<mc146818_device> m_rtc;
+};
+
+// ======================> bbc_pmsrtc_device
+
+class bbc_pmsrtc_device : public device_t,
+ public device_bbc_rom_interface
+{
+public:
+ // construction/destruction
+ bbc_pmsrtc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device-level overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ virtual void device_start() override;
+
+ // device_bbc_rom_interface overrides
+ virtual uint8_t read(offs_t offset) override;
+
+private:
+ required_device<ds1315_device> m_rtc;
+};
+
+// device type definition
+DECLARE_DEVICE_TYPE(BBC_STLRTC, bbc_stlrtc_device)
+DECLARE_DEVICE_TYPE(BBC_PMSRTC, bbc_pmsrtc_device)
+
+#endif // MAME_BUS_BBC_ROM_RTC_H
diff --git a/src/devices/bus/bbc/rom/slot.cpp b/src/devices/bus/bbc/rom/slot.cpp
new file mode 100644
index 00000000000..af8ae212d6d
--- /dev/null
+++ b/src/devices/bus/bbc/rom/slot.cpp
@@ -0,0 +1,234 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/*********************************************************************
+
+ BBC Micro ROM slot emulation
+
+*********************************************************************/
+
+#include "emu.h"
+#include "slot.h"
+
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(BBC_ROMSLOT16, bbc_romslot16_device, "bbc_romslot16", "BBC Micro 16K ROM Slot")
+DEFINE_DEVICE_TYPE(BBC_ROMSLOT32, bbc_romslot32_device, "bbc_romslot32", "BBC Micro 32K ROM Slot")
+
+
+//**************************************************************************
+// DEVICE BBC_ROMSLOT CARD INTERFACE
+//**************************************************************************
+
+//-------------------------------------------------
+// device_bbc_rom_interface - constructor
+//-------------------------------------------------
+
+device_bbc_rom_interface::device_bbc_rom_interface(const machine_config &mconfig, device_t &device)
+ : device_slot_card_interface(mconfig, device)
+ , m_rom(nullptr)
+ , m_rom_size(0)
+{
+}
+
+
+//-------------------------------------------------
+// ~device_bbc_rom_interface - destructor
+//-------------------------------------------------
+
+device_bbc_rom_interface::~device_bbc_rom_interface()
+{
+}
+
+//-------------------------------------------------
+// rom_alloc - alloc the space for the ROM
+//-------------------------------------------------
+
+void device_bbc_rom_interface::rom_alloc(uint32_t size, const char *tag)
+{
+ if (m_rom == nullptr)
+ {
+ m_rom = device().machine().memory().region_alloc(std::string(tag).append(BBC_ROM_REGION_TAG).c_str(), size, 1, ENDIANNESS_LITTLE)->base();
+ m_rom_size = size;
+ }
+}
+
+//-------------------------------------------------
+// ram_alloc - alloc the space for the RAM
+//-------------------------------------------------
+
+void device_bbc_rom_interface::ram_alloc(uint32_t size)
+{
+ m_ram.resize(size);
+ device().save_item(NAME(m_ram));
+}
+
+//-------------------------------------------------
+// nvram_alloc - alloc the space for the NVRAM
+//-------------------------------------------------
+
+void device_bbc_rom_interface::nvram_alloc(uint32_t size)
+{
+ m_nvram.resize(size);
+}
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// bbc_romslot_device - constructor
+//-------------------------------------------------
+bbc_romslot_device::bbc_romslot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_image_interface(mconfig, *this)
+ , device_slot_interface(mconfig, *this)
+ , m_cart(nullptr)
+{
+}
+
+bbc_romslot16_device::bbc_romslot16_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : bbc_romslot_device(mconfig, BBC_ROMSLOT16, tag, owner, clock)
+{
+}
+
+bbc_romslot32_device::bbc_romslot32_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : bbc_romslot_device(mconfig, BBC_ROMSLOT32, tag, owner, clock)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void bbc_romslot_device::device_start()
+{
+ m_cart = dynamic_cast<device_bbc_rom_interface *>(get_card_device());
+}
+
+
+//-------------------------------------------------
+// call load
+//-------------------------------------------------
+
+image_init_result bbc_romslot_device::call_load()
+{
+ if (m_cart)
+ {
+ uint32_t size = !loaded_through_softlist() ? length() : get_software_region_length("rom");
+
+ if (size % 0x2000)
+ {
+ seterror(IMAGE_ERROR_INVALIDIMAGE, "Invalid ROM size");
+ return image_init_result::FAIL;
+ }
+
+ m_cart->rom_alloc(size, tag());
+
+ if (!loaded_through_softlist())
+ fread(m_cart->get_rom_base(), size);
+ else
+ memcpy(m_cart->get_rom_base(), get_software_region("rom"), size);
+
+ if (get_software_region("ram"))
+ m_cart->ram_alloc(get_software_region_length("ram"));
+
+ if (get_software_region("nvram"))
+ m_cart->nvram_alloc(get_software_region_length("nvram"));
+ }
+
+ return image_init_result::PASS;
+}
+
+//-------------------------------------------------
+// call_unload
+//-------------------------------------------------
+
+void bbc_romslot_device::call_unload()
+{
+ if (m_cart && m_cart->get_nvram_base() && m_cart->get_nvram_size())
+ battery_save(m_cart->get_nvram_base(), m_cart->get_nvram_size());
+}
+
+
+//-------------------------------------------------
+// get default card software
+//-------------------------------------------------
+
+std::string bbc_romslot_device::get_default_card_software(get_default_card_software_hook &hook) const
+{
+ return software_get_default_slot("rom");
+}
+
+
+//-------------------------------------------------
+// rom size
+//-------------------------------------------------
+
+uint32_t bbc_romslot_device::get_rom_size()
+{
+ if (m_cart)
+ return m_cart->get_rom_size();
+ else
+ return 0;
+}
+
+
+//-------------------------------------------------
+// read - rom read
+//-------------------------------------------------
+
+uint8_t bbc_romslot_device::read(offs_t offset)
+{
+ if (m_cart)
+ return m_cart->read(offset);
+ else
+ return 0xff;
+}
+
+
+//-------------------------------------------------
+// write - rom write
+//-------------------------------------------------
+
+void bbc_romslot_device::write(offs_t offset, uint8_t data)
+{
+ if (m_cart)
+ m_cart->write(offset, data);
+}
+
+
+//-------------------------------------------------
+// SLOT_INTERFACE( bbc_rom )
+//-------------------------------------------------
+
+#include "rom.h"
+#include "ram.h"
+#include "dfs.h"
+//#include "genie.h"
+#include "pal.h"
+//#include "replay.h"
+#include "rtc.h"
+
+
+void bbc_rom_devices(device_slot_interface &device)
+{
+ device.option_add_internal("rom", BBC_ROM);
+ device.option_add_internal("ram", BBC_RAM);
+ device.option_add_internal("cciword", BBC_CCIWORD);
+ device.option_add_internal("ccibase", BBC_CCIBASE);
+ device.option_add_internal("ccispell", BBC_CCISPELL);
+ device.option_add_internal("palqst", BBC_PALQST);
+ device.option_add_internal("palwap", BBC_PALWAP);
+ device.option_add_internal("palted", BBC_PALTED);
+ device.option_add_internal("palabep", BBC_PALABEP);
+ device.option_add_internal("palabe", BBC_PALABE);
+ device.option_add_internal("palmo2", BBC_PALMO2);
+ //device.option_add_internal("genie", BBC_PMSGENIE);
+ device.option_add_internal("mrme00", BBC_MRME00);
+ //device.option_add_internal("replay", BBC_REPLAY);
+ device.option_add_internal("stlrtc", BBC_STLRTC);
+ device.option_add_internal("pmsrtc", BBC_PMSRTC);
+}
diff --git a/src/devices/bus/bbc/rom/slot.h b/src/devices/bus/bbc/rom/slot.h
new file mode 100644
index 00000000000..40818d9e619
--- /dev/null
+++ b/src/devices/bus/bbc/rom/slot.h
@@ -0,0 +1,155 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/*********************************************************************
+
+ BBC Micro ROM slot emulation
+
+*********************************************************************/
+
+#ifndef MAME_BUS_BBC_ROM_SLOT_H
+#define MAME_BUS_BBC_ROM_SLOT_H
+
+#pragma once
+
+#include "softlist_dev.h"
+
+
+#define BBC_ROM_REGION_TAG ":cart:rom"
+
+/***************************************************************************
+ TYPE DEFINITIONS
+***************************************************************************/
+
+// ======================> bbc_romslot_device
+
+class device_bbc_rom_interface;
+
+class bbc_romslot_device : public device_t,
+ public device_image_interface,
+ public device_slot_interface
+{
+public:
+ // image-level overrides
+ virtual image_init_result call_load() override;
+ virtual void call_unload() override;
+ virtual const software_list_loader &get_software_list_loader() const override { return rom_software_list_loader::instance(); }
+
+ virtual iodevice_t image_type() const override { return IO_ROM; }
+ virtual bool is_readable() const override { return 1; }
+ virtual bool is_writeable() const override { return 0; }
+ virtual bool is_creatable() const override { return 0; }
+ virtual bool must_be_loaded() const override { return 0; }
+ virtual bool is_reset_on_load() const override { return 1; }
+ virtual const char *image_interface() const override { return "bbc_rom"; }
+ virtual const char *file_extensions() const override { return "rom,bin"; }
+
+ // slot interface overrides
+ virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
+
+ // reading and writing
+ uint8_t read(offs_t offset);
+ void write(offs_t offset, uint8_t data);
+
+ uint32_t get_rom_size();
+ uint32_t get_slot_size() const { return m_slot_size; }
+
+protected:
+ // construction/destruction
+ bbc_romslot_device(const machine_config &mconfig, device_type type, char const *tag, device_t *owner, uint32_t clock);
+
+ // device-level overrides
+ virtual void device_start() override;
+
+ uint32_t m_slot_size;
+
+private:
+ device_bbc_rom_interface* m_cart;
+};
+
+// ======================> bbc_romslot16_device
+
+class bbc_romslot16_device : public bbc_romslot_device
+{
+public:
+ // construction/destruction
+ template <typename T>
+ bbc_romslot16_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&slot_options, char const *default_option)
+ : bbc_romslot16_device(mconfig, tag, owner)
+ {
+ option_reset();
+ slot_options(*this);
+ set_default_option(default_option);
+ set_fixed(false);
+ m_slot_size = 0x4000;
+ }
+
+ bbc_romslot16_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+};
+
+// ======================> bbc_romslot32_device
+
+class bbc_romslot32_device : public bbc_romslot_device
+{
+public:
+ // construction/destruction
+ template <typename T>
+ bbc_romslot32_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&slot_options, char const *default_option)
+ : bbc_romslot32_device(mconfig, tag, owner)
+ {
+ option_reset();
+ slot_options(*this);
+ set_default_option(default_option);
+ set_fixed(false);
+ m_slot_size = 0x8000;
+ }
+
+ bbc_romslot32_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+};
+
+
+// ======================> device_bbc_rom_interface
+
+class device_bbc_rom_interface : public device_slot_card_interface
+{
+public:
+ // construction/destruction
+ virtual ~device_bbc_rom_interface();
+
+ // reading and writing
+ virtual uint8_t read(offs_t offset) { return 0xff; }
+ virtual void write(offs_t offset, uint8_t data) { m_device.logerror("unhandled ROM write to %04X = %02X\n", offset | 0x8000, data); }
+
+ void rom_alloc(uint32_t size, const char *tag);
+ void ram_alloc(uint32_t size);
+ void nvram_alloc(uint32_t size);
+
+ uint8_t* get_rom_base() { return m_rom; }
+ virtual uint32_t get_rom_size() { return m_rom_size; }
+
+ uint8_t* get_ram_base() { return &m_ram[0]; }
+ uint32_t get_ram_size() { return m_ram.size(); }
+
+ uint8_t* get_nvram_base() { return &m_nvram[0]; }
+ uint32_t get_nvram_size() { return m_nvram.size(); }
+
+protected:
+ device_bbc_rom_interface(const machine_config &mconfig, device_t &device);
+
+ bbc_romslot_device *m_slot;
+
+private:
+ // internal state
+ uint8_t *m_rom;
+ uint32_t m_rom_size;
+ std::vector<uint8_t> m_ram;
+ std::vector<uint8_t> m_nvram;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(BBC_ROMSLOT16, bbc_romslot16_device)
+DECLARE_DEVICE_TYPE(BBC_ROMSLOT32, bbc_romslot32_device)
+
+void bbc_rom_devices(device_slot_interface &device);
+
+#endif // MAME_BUS_BBC_ROM_SLOT_H
diff --git a/src/devices/bus/bbc/tube/tube.cpp b/src/devices/bus/bbc/tube/tube.cpp
index 2ac1bf5fb15..602ea3c845a 100644
--- a/src/devices/bus/bbc/tube/tube.cpp
+++ b/src/devices/bus/bbc/tube/tube.cpp
@@ -92,10 +92,10 @@ void bbc_tube_slot_device::device_reset()
// host_r
//-------------------------------------------------
-READ8_MEMBER(bbc_tube_slot_device::host_r)
+uint8_t bbc_tube_slot_device::host_r(offs_t offset)
{
if (m_card)
- return m_card->host_r(space, offset);
+ return m_card->host_r(offset);
else
return 0xfe;
}
@@ -104,14 +104,15 @@ READ8_MEMBER(bbc_tube_slot_device::host_r)
// host_w
//-------------------------------------------------
-WRITE8_MEMBER(bbc_tube_slot_device::host_w)
+void bbc_tube_slot_device::host_w(offs_t offset, uint8_t data)
{
if (m_card)
- m_card->host_w(space, offset, data);
+ m_card->host_w(offset, data);
}
// slot devices
+#include "tube_32016.h"
#include "tube_6502.h"
#include "tube_80186.h"
#include "tube_80286.h"
@@ -133,7 +134,7 @@ void bbc_tube_devices(device_slot_interface &device)
{
device.option_add("6502", BBC_TUBE_6502); /* Acorn ANC01 6502 2nd processor */
device.option_add("z80", BBC_TUBE_Z80); /* Acorn ANC04 Z80 2nd processor */
- //device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */
+ device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */
device.option_add("arm", BBC_TUBE_ARM); /* Acorn ANC13 ARM Evaluation System */
device.option_add("80286", BBC_TUBE_80286); /* Acorn 80286 2nd Processor */
//device.option_add("a500", BBC_TUBE_A500); /* Acorn A500 2nd Processor */
@@ -142,8 +143,8 @@ void bbc_tube_devices(device_slot_interface &device)
//device.option_add("hdp68k", BBC_TUBE_HDP68K); /* Torch Unicorn (HDP68K) */
//device.option_add("x25", BBC_TUBE_X25); /* Econet X25 Gateway */
device.option_add("zep100", BBC_TUBE_ZEP100); /* Torch Z80 Communicator (ZEP100) (Torch) */
- //device.option_add("zep100l", BBC_TUBE_ZEP100L); /* Torch Z80 Communicator (ZEP100) (Acorn 8271) */
- //device.option_add("zep100w", BBC_TUBE_ZEP100W); /* Torch Z80 Communicator (ZEP100) (Acorn 1770) */
+ //device.option_add("zep100l", BBC_TUBE_ZEP100L); /* Torch Z80 Communicator (ZEP100) (Model B) */
+ //device.option_add("zep100w", BBC_TUBE_ZEP100W); /* Torch Z80 Communicator (ZEP100) (Model B+) */
/* Acorn ANC21 Universal 2nd Processor Unit */
device.option_add("65c102", BBC_TUBE_65C102); /* Acorn ADC06 65C102 co-processor */
device.option_add("80186", BBC_TUBE_80186); /* Acorn ADC08 80186 co-processor */
@@ -160,11 +161,12 @@ void bbc_extube_devices(device_slot_interface &device)
{
device.option_add("6502", BBC_TUBE_6502); /* Acorn ANC01 6502 2nd processor */
device.option_add("z80", BBC_TUBE_Z80); /* Acorn ANC04 Z80 2nd processor */
- //device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */
+ device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */
device.option_add("arm", BBC_TUBE_ARM); /* Acorn ANC13 ARM Evaluation System */
device.option_add("80286", BBC_TUBE_80286); /* Acorn 80286 2nd Processor */
//device.option_add("a500", BBC_TUBE_A500); /* Acorn A500 2nd Processor */
//device.option_add("pmsb2p", BBC_TUBE_PMSB2P); /* PMS B2P-6502 */
+ //device.option_add("zep100m", BBC_TUBE_ZEP100M); /* Torch Z80 Communicator (ZEP100) (Master) */
/* Acorn ANC21 Universal 2nd Processor Unit */
device.option_add("65c102", BBC_TUBE_65C102); /* Acorn ADC06 65C102 co-processor */
device.option_add("80186", BBC_TUBE_80186); /* Acorn ADC08 80186 co-processor */
@@ -181,7 +183,6 @@ void bbc_intube_devices(device_slot_interface &device)
{
device.option_add("65c102", BBC_TUBE_65C102); /* Acorn ADC06 65C102 co-processor */
device.option_add("80186", BBC_TUBE_80186); /* Acorn ADC08 80186 co-processor */
- //device.option_add("zep100m", BBC_TUBE_ZEP100M); /* Torch Z80 Communicator (ZEP100) (Master) */
//device.option_add("arm7", BBC_TUBE_ARM7); /* Sprow ARM7 co-processor */
device.option_add("rc6502", BBC_TUBE_RC6502); /* ReCo6502 (6502) */
device.option_add("rc65816", BBC_TUBE_RC65816); /* ReCo6502 (65816) */
@@ -196,6 +197,7 @@ void electron_tube_devices(device_slot_interface &device)
{
device.option_add("6502", BBC_TUBE_6502); /* Acorn ANC01 6502 2nd processor */
device.option_add("z80", BBC_TUBE_Z80); /* Acorn ANC04 Z80 2nd processor */
+ device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */
device.option_add("arm", BBC_TUBE_ARM); /* Acorn ANC13 ARM Evaluation System */
device.option_add("65c102", BBC_TUBE_65C102); /* Acorn ADC06 65C102 co-processor */
device.option_add("80186", BBC_TUBE_80186); /* Acorn ADC08 80186 co-processor */
diff --git a/src/devices/bus/bbc/tube/tube.h b/src/devices/bus/bbc/tube/tube.h
index 954867f0b7f..e0d66907cb6 100644
--- a/src/devices/bus/bbc/tube/tube.h
+++ b/src/devices/bus/bbc/tube/tube.h
@@ -66,8 +66,8 @@ public:
// callbacks
auto irq_handler() { return m_irq_handler.bind(); }
- DECLARE_READ8_MEMBER( host_r );
- DECLARE_WRITE8_MEMBER( host_w );
+ uint8_t host_r(offs_t offset);
+ void host_w(offs_t offset, uint8_t data);
DECLARE_WRITE_LINE_MEMBER( irq_w ) { m_irq_handler(state); }
@@ -90,8 +90,8 @@ class device_bbc_tube_interface : public device_slot_card_interface
{
public:
// reading and writing
- virtual DECLARE_READ8_MEMBER(host_r) { return 0xfe; }
- virtual DECLARE_WRITE8_MEMBER(host_w) { }
+ virtual uint8_t host_r(offs_t offset) { return 0xfe; }
+ virtual void host_w(offs_t offset, uint8_t data) { }
protected:
device_bbc_tube_interface(const machine_config &mconfig, device_t &device);
diff --git a/src/devices/bus/bbc/tube/tube_32016.cpp b/src/devices/bus/bbc/tube/tube_32016.cpp
new file mode 100644
index 00000000000..7b6ac355e42
--- /dev/null
+++ b/src/devices/bus/bbc/tube/tube_32016.cpp
@@ -0,0 +1,210 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Acorn ANC05 32016 2nd processor
+
+ http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ANC05_320162ndproc.html
+
+ Acorn ANC06 Cambridge Co-Processor
+
+ http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ANC06_CamCoPro.html
+
+ IC1 (ULA) TUBE
+ IC2 (MMU) NS32082 Not fitted
+ IC3 (CPU) NS32016
+ IC4 (TCU) NS32201
+ IC20 (FPU) NS32081
+
+**********************************************************************/
+
+
+#include "emu.h"
+#include "tube_32016.h"
+#include "softlist_dev.h"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(BBC_TUBE_32016, bbc_tube_32016_device, "bbc_tube_32016", "Acorn 32016 2nd processor")
+
+
+//-------------------------------------------------
+// ADDRESS_MAP( tube_32016_mem )
+//-------------------------------------------------
+
+void bbc_tube_32016_device::tube_32016_mem(address_map &map)
+{
+ map(0x000000, 0xffffff).rw(FUNC(bbc_tube_32016_device::read), FUNC(bbc_tube_32016_device::write));
+ map(0xf90000, 0xf90001).portr("CONFIG");
+ map(0xfffff0, 0xffffff).rw("ula", FUNC(tube_device::parasite_r), FUNC(tube_device::parasite_w)).umask32(0x00ff);
+}
+
+//-------------------------------------------------
+// ROM( tube_32016 )
+//-------------------------------------------------
+
+ROM_START(tube_32016)
+ ROM_REGION(0x8000, "rom", 0)
+ ROM_DEFAULT_BIOS("200")
+ ROM_SYSTEM_BIOS(0, "200", "Pandora v2.00")
+ ROMX_LOAD("pan200lo.rom", 0x0000, 0x4000, CRC(b1980fd0) SHA1(8084f8896cd22953abefbd43c51e1a422b30e28d), ROM_SKIP(1) | ROM_BIOS(0)) // 0201-764-02 Pandora Lo
+ ROMX_LOAD("pan200hi.rom", 0x0001, 0x4000, CRC(cab98d6b) SHA1(dfad1f4180c50757a74fcfe3a0ee7d7b48eb1bee), ROM_SKIP(1) | ROM_BIOS(0)) // 0201-763-02 Pandora Hi
+ ROM_SYSTEM_BIOS(1, "100", "Pandora v1.00")
+ ROMX_LOAD("pan100.rom", 0x0000, 0x8000, BAD_DUMP CRC(75333006) SHA1(996cd120103039390c9b979b16c327bb95da72e4), ROM_BIOS(1)) // 0201-763-01, 0201-764-01 Pandora
+ ROM_SYSTEM_BIOS(2, "061", "Pandora v0.61")
+ ROMX_LOAD("pan061lo.rom", 0x0000, 0x4000, CRC(6f801b35) SHA1(ce31f7c10603f3d15a06a8e32bde40df0639e446), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD("pan061hi.rom", 0x0001, 0x4000, CRC(c00b1ab0) SHA1(e6a705232278c518340ddc69ea51af91965fa332), ROM_SKIP(1) | ROM_BIOS(2))
+ROM_END
+
+//-------------------------------------------------
+// INPUT_PORTS( tube_32016 )
+//-------------------------------------------------
+
+static INPUT_PORTS_START(tube_32016)
+ PORT_START("CONFIG")
+ PORT_DIPNAME(0x80, 0x80, "H") PORT_DIPLOCATION("LKS:1")
+ PORT_DIPSETTING(0x80, "FPU")
+ PORT_DIPSETTING(0x00, "No FPU")
+
+ PORT_DIPNAME(0x40, 0x00, "G") PORT_DIPLOCATION("LKS:2")
+ PORT_DIPSETTING(0x40, "MMU")
+ PORT_DIPSETTING(0x00, "No MMU")
+
+ PORT_DIPNAME(0x20, 0x00, "F") PORT_DIPLOCATION("LKS:3")
+ PORT_DIPSETTING(0x20, "Reserved")
+ PORT_DIPSETTING(0x00, "Reserved")
+
+ PORT_DIPNAME(0x10, 0x00, "E") PORT_DIPLOCATION("LKS:4")
+ PORT_DIPSETTING(0x10, "Reserved")
+ PORT_DIPSETTING(0x00, "Reserved")
+
+ PORT_DIPNAME(0x08, 0x00, "D") PORT_DIPLOCATION("LKS:5")
+ PORT_DIPSETTING(0x08, "Reserved")
+ PORT_DIPSETTING(0x00, "Reserved")
+
+ PORT_DIPNAME(0x04, 0x00, "C") PORT_DIPLOCATION("LKS:6")
+ PORT_DIPSETTING(0x04, "Reserved")
+ PORT_DIPSETTING(0x00, "Reserved")
+
+ PORT_DIPNAME(0x02, 0x00, "B") PORT_DIPLOCATION("LKS:7")
+ PORT_DIPSETTING(0x02, "Reserved")
+ PORT_DIPSETTING(0x00, "Reserved")
+
+ PORT_DIPNAME(0x01, 0x00, "A") PORT_DIPLOCATION("LKS:8")
+ PORT_DIPSETTING(0x01, "Reserved")
+ PORT_DIPSETTING(0x00, "Reserved")
+INPUT_PORTS_END
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void bbc_tube_32016_device::device_add_mconfig(machine_config &config)
+{
+ NS32016(config, m_maincpu, 12_MHz_XTAL / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &bbc_tube_32016_device::tube_32016_mem);
+
+ TUBE(config, m_ula);
+ m_ula->pnmi_handler().set_inputline(m_maincpu, INPUT_LINE_NMI);
+ m_ula->pirq_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
+
+ /* internal ram */
+ RAM(config, m_ram).set_default_size("1M").set_default_value(0);
+
+ /* software lists */
+ SOFTWARE_LIST(config, "flop_ls_32016").set_original("bbc_flop_32016");
+}
+
+//-------------------------------------------------
+// rom_region - device-specific ROM region
+//-------------------------------------------------
+
+const tiny_rom_entry *bbc_tube_32016_device::device_rom_region() const
+{
+ return ROM_NAME( tube_32016 );
+}
+
+//-------------------------------------------------
+// input_ports - device-specific input ports
+//-------------------------------------------------
+
+ioport_constructor bbc_tube_32016_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( tube_32016 );
+}
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// bbc_tube_32016_device - constructor
+//-------------------------------------------------
+
+bbc_tube_32016_device::bbc_tube_32016_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, BBC_TUBE_32016, tag, owner, clock)
+ , device_bbc_tube_interface(mconfig, *this)
+ , m_maincpu(*this, "maincpu")
+ , m_ula(*this, "ula")
+ , m_ram(*this, "ram")
+ , m_rom(*this, "rom")
+ , m_rom_enabled(true)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void bbc_tube_32016_device::device_start()
+{
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void bbc_tube_32016_device::device_reset()
+{
+ m_rom_enabled = true;
+}
+
+
+//**************************************************************************
+// IMPLEMENTATION
+//**************************************************************************
+
+uint8_t bbc_tube_32016_device::host_r(offs_t offset)
+{
+ return m_ula->host_r(offset);
+}
+
+void bbc_tube_32016_device::host_w(offs_t offset, uint8_t data)
+{
+ m_ula->host_w(offset, data);
+}
+
+
+READ8_MEMBER(bbc_tube_32016_device::read)
+{
+ uint16_t data = 0xffff;
+
+ if (m_rom_enabled)
+ data = m_rom->base()[offset & 0x3fff];
+ else if (offset < m_ram->size())
+ data = m_ram->pointer()[offset];
+
+ return data;
+}
+
+WRITE8_MEMBER(bbc_tube_32016_device::write)
+{
+ /* clear ROM select on first write */
+ if (!machine().side_effects_disabled()) m_rom_enabled = false;
+
+ if (offset < m_ram->size())
+ m_ram->pointer()[offset] = data;
+}
diff --git a/src/devices/bus/bbc/tube/tube_32016.h b/src/devices/bus/bbc/tube/tube_32016.h
new file mode 100644
index 00000000000..864b8173703
--- /dev/null
+++ b/src/devices/bus/bbc/tube/tube_32016.h
@@ -0,0 +1,71 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Acorn ANC05 32016 2nd processor
+
+ http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ANC05_320162ndproc.html
+
+ Acorn ANC06 Cambridge Co-Processor
+
+ http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ANC06_CamCoPro.html
+
+**********************************************************************/
+
+
+#ifndef MAME_BUS_BBC_TUBE_32016_H
+#define MAME_BUS_BBC_TUBE_32016_H
+
+#include "tube.h"
+#include "cpu/ns32000/ns32000.h"
+#include "machine/ram.h"
+#include "machine/tube.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> bbc_tube_32016_device
+
+class bbc_tube_32016_device :
+ public device_t,
+ public device_bbc_tube_interface
+{
+public:
+ // construction/destruction
+ bbc_tube_32016_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+ virtual ioport_constructor device_input_ports() const override;
+
+ virtual uint8_t host_r(offs_t offset) override;
+ virtual void host_w(offs_t offset, uint8_t data) override;
+
+private:
+ required_device<ns32016_cpu_device> m_maincpu;
+ required_device<tube_device> m_ula;
+ required_device<ram_device> m_ram;
+ required_memory_region m_rom;
+
+ DECLARE_READ8_MEMBER(read);
+ DECLARE_WRITE8_MEMBER(write);
+
+ void tube_32016_mem(address_map &map);
+
+ bool m_rom_enabled;
+};
+
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(BBC_TUBE_32016, bbc_tube_32016_device)
+
+
+#endif /* MAME_BUS_BBC_TUBE_32016_H */
diff --git a/src/devices/bus/bbc/tube/tube_6502.cpp b/src/devices/bus/bbc/tube/tube_6502.cpp
index 8120ab16812..99852ca8d90 100644
--- a/src/devices/bus/bbc/tube/tube_6502.cpp
+++ b/src/devices/bus/bbc/tube/tube_6502.cpp
@@ -168,27 +168,27 @@ void bbc_tube_6502_device::device_reset()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(bbc_tube_6502_device::host_r)
+uint8_t bbc_tube_6502_device::host_r(offs_t offset)
{
- return m_ula->host_r(space, offset);
+ return m_ula->host_r(offset);
}
-WRITE8_MEMBER(bbc_tube_6502_device::host_w)
+void bbc_tube_6502_device::host_w(offs_t offset, uint8_t data)
{
- m_ula->host_w(space, offset, data);
+ m_ula->host_w(offset, data);
}
-READ8_MEMBER(bbc_tube_6502_device::tube_r)
+uint8_t bbc_tube_6502_device::tube_r(offs_t offset)
{
// Disable ROM on first access
if (!machine().side_effects_disabled())
m_bankdev->set_bank(1);
- return m_ula->parasite_r(space, offset);
+ return m_ula->parasite_r(offset);
}
-WRITE8_MEMBER(bbc_tube_6502_device::tube_w)
+void bbc_tube_6502_device::tube_w(offs_t offset, uint8_t data)
{
- m_ula->parasite_w(space, offset, data);
+ m_ula->parasite_w(offset, data);
}
diff --git a/src/devices/bus/bbc/tube/tube_6502.h b/src/devices/bus/bbc/tube/tube_6502.h
index 244eb9f2105..abb907ef3bd 100644
--- a/src/devices/bus/bbc/tube/tube_6502.h
+++ b/src/devices/bus/bbc/tube/tube_6502.h
@@ -52,11 +52,11 @@ protected:
void add_common_devices(machine_config &config);
- virtual DECLARE_READ8_MEMBER( host_r ) override;
- virtual DECLARE_WRITE8_MEMBER( host_w ) override;
+ virtual uint8_t host_r(offs_t offset) override;
+ virtual void host_w(offs_t offset, uint8_t data) override;
- virtual DECLARE_READ8_MEMBER( tube_r );
- virtual DECLARE_WRITE8_MEMBER( tube_w );
+ virtual uint8_t tube_r(offs_t offset);
+ virtual void tube_w(offs_t offset, uint8_t data);
required_device<cpu_device> m_maincpu;
required_device<address_map_bank_device> m_bankdev;
diff --git a/src/devices/bus/bbc/tube/tube_80186.cpp b/src/devices/bus/bbc/tube/tube_80186.cpp
index 4721d48e534..85331ab1b2a 100644
--- a/src/devices/bus/bbc/tube/tube_80186.cpp
+++ b/src/devices/bus/bbc/tube/tube_80186.cpp
@@ -126,12 +126,12 @@ void bbc_tube_80186_device::device_reset()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(bbc_tube_80186_device::host_r)
+uint8_t bbc_tube_80186_device::host_r(offs_t offset)
{
- return m_ula->host_r(space, offset);
+ return m_ula->host_r(offset);
}
-WRITE8_MEMBER(bbc_tube_80186_device::host_w)
+void bbc_tube_80186_device::host_w(offs_t offset, uint8_t data)
{
- m_ula->host_w(space, offset, data);
+ m_ula->host_w(offset, data);
}
diff --git a/src/devices/bus/bbc/tube/tube_80186.h b/src/devices/bus/bbc/tube/tube_80186.h
index 3081acbddac..42f757e75e4 100644
--- a/src/devices/bus/bbc/tube/tube_80186.h
+++ b/src/devices/bus/bbc/tube/tube_80186.h
@@ -40,8 +40,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
- virtual DECLARE_READ8_MEMBER( host_r ) override;
- virtual DECLARE_WRITE8_MEMBER( host_w ) override;
+ virtual uint8_t host_r(offs_t offset) override;
+ virtual void host_w(offs_t offset, uint8_t data) override;
private:
required_device<i80186_cpu_device> m_i80186;
diff --git a/src/devices/bus/bbc/tube/tube_80286.cpp b/src/devices/bus/bbc/tube/tube_80286.cpp
index f38761341f5..e8ff167d0fb 100644
--- a/src/devices/bus/bbc/tube/tube_80286.cpp
+++ b/src/devices/bus/bbc/tube/tube_80286.cpp
@@ -129,24 +129,25 @@ void bbc_tube_80286_device::device_reset()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(bbc_tube_80286_device::host_r)
+uint8_t bbc_tube_80286_device::host_r(offs_t offset)
{
- return m_ula->host_r(space, offset);
+ return m_ula->host_r(offset);
}
-WRITE8_MEMBER(bbc_tube_80286_device::host_w)
+void bbc_tube_80286_device::host_w(offs_t offset, uint8_t data)
{
- m_ula->host_w(space, offset, data);
+ m_ula->host_w(offset, data);
}
-READ8_MEMBER(bbc_tube_80286_device::disable_boot_rom)
+uint8_t bbc_tube_80286_device::disable_boot_rom()
{
- m_i80286->space(AS_PROGRAM).install_ram(0xc0000, 0xfffff, m_ram->pointer() + 0xc0000);
+ if (!machine().side_effects_disabled())
+ m_i80286->space(AS_PROGRAM).install_ram(0xc0000, 0xfffff, m_ram->pointer() + 0xc0000);
return 0xff;
}
-WRITE8_MEMBER(bbc_tube_80286_device::irq_latch_w)
+void bbc_tube_80286_device::irq_latch_w(uint8_t data)
{
m_irq_latch = data;
}
diff --git a/src/devices/bus/bbc/tube/tube_80286.h b/src/devices/bus/bbc/tube/tube_80286.h
index da2d807477b..a6e952d6bf2 100644
--- a/src/devices/bus/bbc/tube/tube_80286.h
+++ b/src/devices/bus/bbc/tube/tube_80286.h
@@ -38,8 +38,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
- virtual DECLARE_READ8_MEMBER( host_r ) override;
- virtual DECLARE_WRITE8_MEMBER( host_w ) override;
+ virtual uint8_t host_r(offs_t offset) override;
+ virtual void host_w(offs_t offset, uint8_t data) override;
private:
uint8_t m_irq_latch;
@@ -51,8 +51,8 @@ private:
required_device<ram_device> m_ram;
required_memory_region m_bootstrap;
- DECLARE_READ8_MEMBER( disable_boot_rom );
- DECLARE_WRITE8_MEMBER( irq_latch_w );
+ uint8_t disable_boot_rom();
+ void irq_latch_w(uint8_t data);
void tube_80286_io(address_map &map);
void tube_80286_mem(address_map &map);
diff --git a/src/devices/bus/bbc/tube/tube_arm.cpp b/src/devices/bus/bbc/tube/tube_arm.cpp
index 444e188a657..463a82713be 100644
--- a/src/devices/bus/bbc/tube/tube_arm.cpp
+++ b/src/devices/bus/bbc/tube/tube_arm.cpp
@@ -120,18 +120,18 @@ void bbc_tube_arm_device::device_reset()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(bbc_tube_arm_device::host_r)
+uint8_t bbc_tube_arm_device::host_r(offs_t offset)
{
- return m_ula->host_r(space, offset);
+ return m_ula->host_r(offset);
}
-WRITE8_MEMBER(bbc_tube_arm_device::host_w)
+void bbc_tube_arm_device::host_w(offs_t offset, uint8_t data)
{
- m_ula->host_w(space, offset, data);
+ m_ula->host_w(offset, data);
}
-READ8_MEMBER(bbc_tube_arm_device::ram_r)
+uint8_t bbc_tube_arm_device::ram_r(offs_t offset)
{
uint8_t data;
@@ -143,7 +143,7 @@ READ8_MEMBER(bbc_tube_arm_device::ram_r)
return data;
}
-WRITE8_MEMBER(bbc_tube_arm_device::ram_w)
+void bbc_tube_arm_device::ram_w(offs_t offset, uint8_t data)
{
/* clear ROM select on first write */
if (!machine().side_effects_disabled()) m_rom_select = false;
diff --git a/src/devices/bus/bbc/tube/tube_arm.h b/src/devices/bus/bbc/tube/tube_arm.h
index 7b58d2b40bd..8470fec84ef 100644
--- a/src/devices/bus/bbc/tube/tube_arm.h
+++ b/src/devices/bus/bbc/tube/tube_arm.h
@@ -38,8 +38,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
- virtual DECLARE_READ8_MEMBER( host_r ) override;
- virtual DECLARE_WRITE8_MEMBER( host_w ) override;
+ virtual uint8_t host_r(offs_t offset) override;
+ virtual void host_w(offs_t offset, uint8_t data) override;
private:
required_device<arm_cpu_device> m_arm;
@@ -49,8 +49,8 @@ private:
bool m_rom_select;
- DECLARE_READ8_MEMBER( ram_r );
- DECLARE_WRITE8_MEMBER( ram_w );
+ uint8_t ram_r(offs_t offset);
+ void ram_w(offs_t offset, uint8_t data);
void tube_arm_mem(address_map &map);
};
diff --git a/src/devices/bus/bbc/tube/tube_casper.cpp b/src/devices/bus/bbc/tube/tube_casper.cpp
index db84143f553..f6bb4bdce84 100644
--- a/src/devices/bus/bbc/tube/tube_casper.cpp
+++ b/src/devices/bus/bbc/tube/tube_casper.cpp
@@ -109,12 +109,12 @@ void bbc_tube_casper_device::device_start()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(bbc_tube_casper_device::host_r)
+uint8_t bbc_tube_casper_device::host_r(offs_t offset)
{
return m_via6522_0->read(offset & 0xf);
}
-WRITE8_MEMBER(bbc_tube_casper_device::host_w)
+void bbc_tube_casper_device::host_w(offs_t offset, uint8_t data)
{
m_via6522_0->write(offset & 0xf, data);
}
diff --git a/src/devices/bus/bbc/tube/tube_casper.h b/src/devices/bus/bbc/tube/tube_casper.h
index e464f4a8c68..965ac703355 100644
--- a/src/devices/bus/bbc/tube/tube_casper.h
+++ b/src/devices/bus/bbc/tube/tube_casper.h
@@ -36,8 +36,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
- virtual DECLARE_READ8_MEMBER( host_r ) override;
- virtual DECLARE_WRITE8_MEMBER( host_w ) override;
+ virtual uint8_t host_r(offs_t offset) override;
+ virtual void host_w(offs_t offset, uint8_t data) override;
private:
required_device<cpu_device> m_m68000;
diff --git a/src/devices/bus/bbc/tube/tube_rc6502.cpp b/src/devices/bus/bbc/tube/tube_rc6502.cpp
index 80061f8a5ca..c567be6f98a 100644
--- a/src/devices/bus/bbc/tube/tube_rc6502.cpp
+++ b/src/devices/bus/bbc/tube/tube_rc6502.cpp
@@ -233,23 +233,23 @@ void bbc_tube_rc6502_device::device_reset()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(bbc_tube_rc6502_device::host_r)
+uint8_t bbc_tube_rc6502_device::host_r(offs_t offset)
{
- return m_ula->host_r(space, offset);
+ return m_ula->host_r(offset);
}
-WRITE8_MEMBER(bbc_tube_rc6502_device::host_w)
+void bbc_tube_rc6502_device::host_w(offs_t offset, uint8_t data)
{
- m_ula->host_w(space, offset, data);
+ m_ula->host_w(offset, data);
}
-READ8_MEMBER(bbc_tube_rc6502_device::config_r)
+uint8_t bbc_tube_rc6502_device::config_r()
{
return m_banknum;
}
-WRITE8_MEMBER(bbc_tube_rc6502_device::register_w)
+void bbc_tube_rc6502_device::register_w(uint8_t data)
{
switch (data & 0x06)
{
diff --git a/src/devices/bus/bbc/tube/tube_rc6502.h b/src/devices/bus/bbc/tube/tube_rc6502.h
index 77542cf4a45..eadb460cc96 100644
--- a/src/devices/bus/bbc/tube/tube_rc6502.h
+++ b/src/devices/bus/bbc/tube/tube_rc6502.h
@@ -47,11 +47,11 @@ protected:
void add_common_devices(machine_config &config);
- virtual DECLARE_READ8_MEMBER( host_r ) override;
- virtual DECLARE_WRITE8_MEMBER( host_w ) override;
+ virtual uint8_t host_r(offs_t offset) override;
+ virtual void host_w(offs_t offset, uint8_t data) override;
- DECLARE_READ8_MEMBER(config_r);
- DECLARE_WRITE8_MEMBER(register_w);
+ uint8_t config_r();
+ void register_w(uint8_t data);
void tube_rc6502_bank(address_map &map);
diff --git a/src/devices/bus/bbc/tube/tube_z80.cpp b/src/devices/bus/bbc/tube/tube_z80.cpp
index cc6f87527bf..06e6931c7a3 100644
--- a/src/devices/bus/bbc/tube/tube_z80.cpp
+++ b/src/devices/bus/bbc/tube/tube_z80.cpp
@@ -134,18 +134,18 @@ void bbc_tube_z80_device::device_reset()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(bbc_tube_z80_device::host_r)
+uint8_t bbc_tube_z80_device::host_r(offs_t offset)
{
- return m_ula->host_r(space, offset);
+ return m_ula->host_r(offset);
}
-WRITE8_MEMBER(bbc_tube_z80_device::host_w)
+void bbc_tube_z80_device::host_w(offs_t offset, uint8_t data)
{
- m_ula->host_w(space, offset, data);
+ m_ula->host_w(offset, data);
}
-READ8_MEMBER(bbc_tube_z80_device::opcode_r)
+uint8_t bbc_tube_z80_device::opcode_r(offs_t offset)
{
if (!machine().side_effects_disabled())
{
@@ -158,7 +158,7 @@ READ8_MEMBER(bbc_tube_z80_device::opcode_r)
}
-READ8_MEMBER(bbc_tube_z80_device::mem_r)
+uint8_t bbc_tube_z80_device::mem_r(offs_t offset)
{
uint8_t data;
@@ -170,7 +170,7 @@ READ8_MEMBER(bbc_tube_z80_device::mem_r)
return data;
}
-WRITE8_MEMBER(bbc_tube_z80_device::mem_w)
+void bbc_tube_z80_device::mem_w(offs_t offset, uint8_t data)
{
m_ram->pointer()[offset] = data;
}
diff --git a/src/devices/bus/bbc/tube/tube_z80.h b/src/devices/bus/bbc/tube/tube_z80.h
index e35dfa02ef4..536e506d43d 100644
--- a/src/devices/bus/bbc/tube/tube_z80.h
+++ b/src/devices/bus/bbc/tube/tube_z80.h
@@ -40,8 +40,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
- virtual DECLARE_READ8_MEMBER( host_r ) override;
- virtual DECLARE_WRITE8_MEMBER( host_w ) override;
+ virtual uint8_t host_r(offs_t offset) override;
+ virtual void host_w(offs_t offset, uint8_t data) override;
private:
IRQ_CALLBACK_MEMBER( irq_callback );
@@ -54,9 +54,9 @@ private:
bool m_rom_enabled;
- DECLARE_READ8_MEMBER( mem_r );
- DECLARE_WRITE8_MEMBER( mem_w );
- DECLARE_READ8_MEMBER( opcode_r );
+ uint8_t mem_r(offs_t offset);
+ void mem_w(offs_t offset, uint8_t data);
+ uint8_t opcode_r(offs_t offset);
void tube_z80_fetch(address_map &map);
void tube_z80_io(address_map &map);
diff --git a/src/devices/bus/bbc/tube/tube_zep100.cpp b/src/devices/bus/bbc/tube/tube_zep100.cpp
index 6ec898bb705..f11f0af6415 100644
--- a/src/devices/bus/bbc/tube/tube_zep100.cpp
+++ b/src/devices/bus/bbc/tube/tube_zep100.cpp
@@ -146,12 +146,12 @@ void bbc_tube_zep100_device::device_reset()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(bbc_tube_zep100_device::host_r)
+uint8_t bbc_tube_zep100_device::host_r(offs_t offset)
{
return m_via->read(offset & 0x0f);
}
-WRITE8_MEMBER(bbc_tube_zep100_device::host_w)
+void bbc_tube_zep100_device::host_w(offs_t offset, uint8_t data)
{
if (offset & 0x10)
m_z80->reset();
@@ -160,7 +160,7 @@ WRITE8_MEMBER(bbc_tube_zep100_device::host_w)
}
-READ8_MEMBER(bbc_tube_zep100_device::mem_r)
+uint8_t bbc_tube_zep100_device::mem_r(offs_t offset)
{
uint8_t data;
@@ -172,13 +172,13 @@ READ8_MEMBER(bbc_tube_zep100_device::mem_r)
return data;
}
-WRITE8_MEMBER(bbc_tube_zep100_device::mem_w)
+void bbc_tube_zep100_device::mem_w(offs_t offset, uint8_t data)
{
m_ram->pointer()[offset] = data;
}
-READ8_MEMBER(bbc_tube_zep100_device::io_r)
+uint8_t bbc_tube_zep100_device::io_r(offs_t offset)
{
uint8_t data = 0xff;
@@ -190,23 +190,23 @@ READ8_MEMBER(bbc_tube_zep100_device::io_r)
return data;
}
-WRITE8_MEMBER(bbc_tube_zep100_device::io_w)
+void bbc_tube_zep100_device::io_w(offs_t offset, uint8_t data)
{
m_ppi->write(offset & 0x03, data);
}
-WRITE8_MEMBER(bbc_tube_zep100_device::via_pb_w)
+void bbc_tube_zep100_device::via_pb_w(uint8_t data)
{
m_port_b = data;
}
-READ8_MEMBER(bbc_tube_zep100_device::ppi_pb_r)
+uint8_t bbc_tube_zep100_device::ppi_pb_r()
{
return m_port_b;
}
-WRITE8_MEMBER(bbc_tube_zep100_device::ppi_pc_w)
+void bbc_tube_zep100_device::ppi_pc_w(uint8_t data)
{
m_via->write_ca1(BIT(data, 7));
m_via->write_cb1(BIT(data, 1));
diff --git a/src/devices/bus/bbc/tube/tube_zep100.h b/src/devices/bus/bbc/tube/tube_zep100.h
index 24b07ea4269..b7f881fcfac 100644
--- a/src/devices/bus/bbc/tube/tube_zep100.h
+++ b/src/devices/bus/bbc/tube/tube_zep100.h
@@ -43,8 +43,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
- virtual DECLARE_READ8_MEMBER( host_r ) override;
- virtual DECLARE_WRITE8_MEMBER( host_w ) override;
+ virtual uint8_t host_r(offs_t offset) override;
+ virtual void host_w(offs_t offset, uint8_t data) override;
bool m_rom_enabled;
@@ -57,14 +57,14 @@ private:
uint8_t m_port_b;
- DECLARE_READ8_MEMBER( mem_r );
- DECLARE_WRITE8_MEMBER( mem_w );
- DECLARE_READ8_MEMBER( io_r );
- DECLARE_WRITE8_MEMBER( io_w );
+ uint8_t mem_r(offs_t offset);
+ void mem_w(offs_t offset, uint8_t data);
+ uint8_t io_r(offs_t offset);
+ void io_w(offs_t offset, uint8_t data);
- DECLARE_WRITE8_MEMBER( via_pb_w );
- DECLARE_READ8_MEMBER( ppi_pb_r );
- DECLARE_WRITE8_MEMBER( ppi_pc_w );
+ void via_pb_w(uint8_t data);
+ uint8_t ppi_pb_r();
+ void ppi_pc_w(uint8_t data);
void tube_zep100_io(address_map &map);
void tube_zep100_mem(address_map &map);
diff --git a/src/devices/bus/bbc/userport/beebspch.cpp b/src/devices/bus/bbc/userport/beebspch.cpp
index 291179b54c6..728d8ae6658 100644
--- a/src/devices/bus/bbc/userport/beebspch.cpp
+++ b/src/devices/bus/bbc/userport/beebspch.cpp
@@ -82,7 +82,7 @@ void bbc_beebspch_device::device_start()
// IMPLEMENTATION
//**************************************************************************
-WRITE8_MEMBER(bbc_beebspch_device::pb_w)
+void bbc_beebspch_device::pb_w(uint8_t data)
{
switch (data & 0xc0)
{
diff --git a/src/devices/bus/bbc/userport/beebspch.h b/src/devices/bus/bbc/userport/beebspch.h
index 94c36b0cc84..79e6abf64ab 100644
--- a/src/devices/bus/bbc/userport/beebspch.h
+++ b/src/devices/bus/bbc/userport/beebspch.h
@@ -38,7 +38,7 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
- virtual DECLARE_WRITE8_MEMBER(pb_w) override;
+ virtual void pb_w(uint8_t data) override;
private:
required_device<sp0256_device> m_nsp;
diff --git a/src/devices/bus/bbc/userport/cfa3000kbd.cpp b/src/devices/bus/bbc/userport/cfa3000kbd.cpp
index d07d7b6dd2f..5b2d5586f56 100644
--- a/src/devices/bus/bbc/userport/cfa3000kbd.cpp
+++ b/src/devices/bus/bbc/userport/cfa3000kbd.cpp
@@ -113,7 +113,7 @@ void cfa3000_kbd_device::device_reset()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(cfa3000_kbd_device::pb_r)
+uint8_t cfa3000_kbd_device::pb_r()
{
uint8_t data = 0x00;
diff --git a/src/devices/bus/bbc/userport/cfa3000kbd.h b/src/devices/bus/bbc/userport/cfa3000kbd.h
index 2ece3cbf380..ff9951399c8 100644
--- a/src/devices/bus/bbc/userport/cfa3000kbd.h
+++ b/src/devices/bus/bbc/userport/cfa3000kbd.h
@@ -36,7 +36,7 @@ protected:
// optional information overrides
virtual ioport_constructor device_input_ports() const override;
- virtual DECLARE_READ8_MEMBER(pb_r) override;
+ virtual uint8_t pb_r() override;
private:
required_ioport_array<4> m_kbd;
diff --git a/src/devices/bus/bbc/userport/pointer.cpp b/src/devices/bus/bbc/userport/pointer.cpp
index 9a222388989..d8272766d98 100644
--- a/src/devices/bus/bbc/userport/pointer.cpp
+++ b/src/devices/bus/bbc/userport/pointer.cpp
@@ -261,17 +261,17 @@ TIMER_CALLBACK_MEMBER(bbc_pointer_device::pointer_poll)
}
}
-READ8_MEMBER(bbc_amxmouse_device::pb_r)
+uint8_t bbc_amxmouse_device::pb_r()
{
return (m_buttons->read() & 0xe0) | (m_xdir << 0) | (m_ydir << 2) | 0x1a;
}
-READ8_MEMBER(bbc_m512mouse_device::pb_r)
+uint8_t bbc_m512mouse_device::pb_r()
{
return (m_buttons->read() & 0x07) | (m_xdir << 3) | (m_ydir << 4) | 0xe0;
}
-READ8_MEMBER(bbc_tracker_device::pb_r)
+uint8_t bbc_tracker_device::pb_r()
{
return (m_buttons->read() & 0x07) | (m_xdir << 3) | (m_ydir << 4) | 0xe0;
}
diff --git a/src/devices/bus/bbc/userport/pointer.h b/src/devices/bus/bbc/userport/pointer.h
index 5551a2c82dd..a6e1bd0a629 100644
--- a/src/devices/bus/bbc/userport/pointer.h
+++ b/src/devices/bus/bbc/userport/pointer.h
@@ -58,7 +58,7 @@ public:
// construction/destruction
bbc_amxmouse_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- DECLARE_READ8_MEMBER(pb_r) override;
+ uint8_t pb_r() override;
// optional information overrides
virtual ioport_constructor device_input_ports() const override;
@@ -73,7 +73,7 @@ public:
// construction/destruction
bbc_m512mouse_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- DECLARE_READ8_MEMBER(pb_r) override;
+ uint8_t pb_r() override;
// optional information overrides
virtual ioport_constructor device_input_ports() const override;
@@ -88,7 +88,7 @@ public:
// construction/destruction
bbc_tracker_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- DECLARE_READ8_MEMBER(pb_r) override;
+ uint8_t pb_r() override;
// optional information overrides
virtual ioport_constructor device_input_ports() const override;
diff --git a/src/devices/bus/bbc/userport/userport.cpp b/src/devices/bus/bbc/userport/userport.cpp
index a4610217651..601a6845801 100644
--- a/src/devices/bus/bbc/userport/userport.cpp
+++ b/src/devices/bus/bbc/userport/userport.cpp
@@ -89,10 +89,10 @@ void bbc_userport_slot_device::device_reset()
// pb_r
//-------------------------------------------------
-READ8_MEMBER(bbc_userport_slot_device::pb_r)
+uint8_t bbc_userport_slot_device::pb_r()
{
if (m_device)
- return m_device->pb_r(space, 0);
+ return m_device->pb_r();
else
return 0xff;
}
@@ -102,10 +102,10 @@ READ8_MEMBER(bbc_userport_slot_device::pb_r)
// pb_w
//-------------------------------------------------
-WRITE8_MEMBER(bbc_userport_slot_device::pb_w)
+void bbc_userport_slot_device::pb_w(uint8_t data)
{
if (m_device)
- m_device->pb_w(space, 0, data);
+ m_device->pb_w(data);
}
diff --git a/src/devices/bus/bbc/userport/userport.h b/src/devices/bus/bbc/userport/userport.h
index e2807146efe..e3040283a5a 100644
--- a/src/devices/bus/bbc/userport/userport.h
+++ b/src/devices/bus/bbc/userport/userport.h
@@ -64,8 +64,8 @@ public:
DECLARE_WRITE_LINE_MEMBER(cb1_w) { m_cb1_handler(state); }
DECLARE_WRITE_LINE_MEMBER(cb2_w) { m_cb2_handler(state); }
- DECLARE_READ8_MEMBER(pb_r);
- DECLARE_WRITE8_MEMBER(pb_w);
+ uint8_t pb_r();
+ void pb_w(uint8_t data);
protected:
// device-level overrides
@@ -88,8 +88,8 @@ public:
// construction/destruction
virtual ~device_bbc_userport_interface();
- virtual DECLARE_READ8_MEMBER(pb_r) { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(pb_w) { }
+ virtual uint8_t pb_r() { return 0xff; }
+ virtual void pb_w(uint8_t data) { }
protected:
device_bbc_userport_interface(const machine_config &mconfig, device_t &device);
diff --git a/src/devices/bus/bml3/bml3bus.cpp b/src/devices/bus/bml3/bml3bus.cpp
index e1ff1ad39ab..9acb1b9acb5 100644
--- a/src/devices/bus/bml3/bml3bus.cpp
+++ b/src/devices/bus/bml3/bml3bus.cpp
@@ -102,13 +102,13 @@ bml3bus_device::bml3bus_device(const machine_config &mconfig, const char *tag, d
bml3bus_device::bml3bus_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_maincpu(*this, finder_base::DUMMY_TAG),
+ m_space(*this, finder_base::DUMMY_TAG, -1, 8),
m_out_nmi_cb(*this),
m_out_irq_cb(*this),
- m_out_firq_cb(*this),
- m_cputag(nullptr)
+ m_out_firq_cb(*this)
{
}
+
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
diff --git a/src/devices/bus/bml3/bml3bus.h b/src/devices/bus/bml3/bml3bus.h
index 918e7b449b1..2132d376041 100644
--- a/src/devices/bus/bml3/bml3bus.h
+++ b/src/devices/bus/bml3/bml3bus.h
@@ -16,33 +16,6 @@
#define BML3BUS_MAX_SLOTS 6
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_BML3BUS_CPU(_cputag) \
- downcast<bml3bus_device &>(*device).set_cputag(_cputag);
-
-#define MCFG_BML3BUS_OUT_NMI_CB(_devcb) \
- downcast<bml3bus_device &>(*device).set_out_nmi_callback(DEVCB_##_devcb);
-
-#define MCFG_BML3BUS_OUT_IRQ_CB(_devcb) \
- downcast<bml3bus_device &>(*device).set_out_irq_callback(DEVCB_##_devcb);
-
-#define MCFG_BML3BUS_OUT_FIRQ_CB(_devcb) \
- downcast<bml3bus_device &>(*device).set_out_firq_callback(DEVCB_##_devcb);
-
-#define MCFG_BML3BUS_SLOT_ADD(_nbtag, _tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, BML3BUS_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- downcast<bml3bus_slot_device &>(*device).set_bml3bus_slot(_nbtag, _tag);
-#define MCFG_BML3BUS_SLOT_REMOVE(_tag) \
- MCFG_DEVICE_REMOVE(_tag)
-
-#define MCFG_BML3BUS_ONBOARD_ADD(_nbtag, _tag, _dev_type) \
- MCFG_DEVICE_ADD(_tag, _dev_type, 0) \
- downcast<device_bml3bus_card_interface &>(*device).set_bml3bus_tag(_nbtag, _tag);
-
//**************************************************************************
// TYPE DEFINITIONS
@@ -55,7 +28,18 @@ class bml3bus_slot_device : public device_t,
{
public:
// construction/destruction
- bml3bus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ bml3bus_slot_device(machine_config const &mconfig, const char *tag, device_t *owner, const char *nbtag, T &&opts, const char *dflt)
+ : bml3bus_slot_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ set_bml3bus_slot(nbtag, tag);
+ }
+
+ bml3bus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
// device-level overrides
virtual void device_start() override;
@@ -83,10 +67,10 @@ public:
bml3bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// inline configuration
- void set_cputag(const char *tag) { m_maincpu.set_tag(tag); }
- template <class Object> devcb_base &set_out_nmi_callback(Object &&cb) { return m_out_nmi_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_irq_callback(Object &&cb) { return m_out_irq_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_firq_callback(Object &&cb) { return m_out_firq_cb.set_callback(std::forward<Object>(cb)); }
+ template <class Object> void set_space(Object &&tag, int spacenum) { m_space.set_tag(std::forward<Object>(tag), spacenum); }
+ auto nmi_callback() { return m_out_nmi_cb.bind(); }
+ auto irq_callback() { return m_out_irq_cb.bind(); }
+ auto firq_callback() { return m_out_firq_cb.bind(); }
void add_bml3bus_card(int slot, device_bml3bus_card_interface *card);
device_bml3bus_card_interface *get_bml3bus_card(int slot);
@@ -99,7 +83,7 @@ public:
DECLARE_WRITE_LINE_MEMBER( irq_w );
DECLARE_WRITE_LINE_MEMBER( firq_w );
- address_space &space() const { return m_maincpu->space(AS_PROGRAM); }
+ address_space &space() const { return *m_space; }
protected:
bml3bus_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@@ -109,14 +93,13 @@ protected:
virtual void device_reset() override;
// internal state
- required_device<cpu_device> m_maincpu;
+ required_address_space m_space;
devcb_write_line m_out_nmi_cb;
devcb_write_line m_out_irq_cb;
devcb_write_line m_out_firq_cb;
device_bml3bus_card_interface *m_device_list[BML3BUS_MAX_SLOTS];
- const char *m_cputag;
};
diff --git a/src/devices/bus/bw2/exp.cpp b/src/devices/bus/bw2/exp.cpp
index ae02f1f10fa..50f776b066e 100644
--- a/src/devices/bus/bw2/exp.cpp
+++ b/src/devices/bus/bw2/exp.cpp
@@ -95,11 +95,11 @@ void bw2_expansion_slot_device::device_reset()
// cd_r - cartridge data read
//-------------------------------------------------
-uint8_t bw2_expansion_slot_device::cd_r(address_space &space, offs_t offset, uint8_t data, int ram2, int ram3, int ram4, int ram5, int ram6)
+uint8_t bw2_expansion_slot_device::cd_r(offs_t offset, uint8_t data, int ram2, int ram3, int ram4, int ram5, int ram6)
{
if (m_cart != nullptr)
{
- data = m_cart->bw2_cd_r(space, offset, data, ram2, ram3, ram4, ram5, ram6);
+ data = m_cart->bw2_cd_r(offset, data, ram2, ram3, ram4, ram5, ram6);
}
return data;
@@ -110,11 +110,11 @@ uint8_t bw2_expansion_slot_device::cd_r(address_space &space, offs_t offset, uin
// cd_w - cartridge data write
//-------------------------------------------------
-void bw2_expansion_slot_device::cd_w(address_space &space, offs_t offset, uint8_t data, int ram2, int ram3, int ram4, int ram5, int ram6)
+void bw2_expansion_slot_device::cd_w(offs_t offset, uint8_t data, int ram2, int ram3, int ram4, int ram5, int ram6)
{
if (m_cart != nullptr)
{
- m_cart->bw2_cd_w(space, offset, data, ram2, ram3, ram4, ram5, ram6);
+ m_cart->bw2_cd_w(offset, data, ram2, ram3, ram4, ram5, ram6);
}
}
@@ -123,13 +123,13 @@ void bw2_expansion_slot_device::cd_w(address_space &space, offs_t offset, uint8_
// slot_r - slot read
//-------------------------------------------------
-READ8_MEMBER( bw2_expansion_slot_device::slot_r )
+uint8_t bw2_expansion_slot_device::slot_r(offs_t offset)
{
uint8_t data = 0xff;
if (m_cart != nullptr)
{
- data = m_cart->bw2_slot_r(space, offset);
+ data = m_cart->bw2_slot_r(offset);
}
return data;
@@ -140,11 +140,11 @@ READ8_MEMBER( bw2_expansion_slot_device::slot_r )
// slot_w - slot write
//-------------------------------------------------
-WRITE8_MEMBER( bw2_expansion_slot_device::slot_w )
+void bw2_expansion_slot_device::slot_w(offs_t offset, uint8_t data)
{
if (m_cart != nullptr)
{
- m_cart->bw2_slot_w(space, offset, data);
+ m_cart->bw2_slot_w(offset, data);
}
}
@@ -153,13 +153,13 @@ WRITE8_MEMBER( bw2_expansion_slot_device::slot_w )
// modsel_r - modsel read
//-------------------------------------------------
-READ8_MEMBER( bw2_expansion_slot_device::modsel_r )
+uint8_t bw2_expansion_slot_device::modsel_r(offs_t offset)
{
uint8_t data = 0xff;
if (m_cart != nullptr)
{
- data = m_cart->bw2_modsel_r(space, offset);
+ data = m_cart->bw2_modsel_r(offset);
}
return data;
@@ -170,11 +170,11 @@ READ8_MEMBER( bw2_expansion_slot_device::modsel_r )
// modsel_w - modsel write
//-------------------------------------------------
-WRITE8_MEMBER( bw2_expansion_slot_device::modsel_w )
+void bw2_expansion_slot_device::modsel_w(offs_t offset, uint8_t data)
{
if (m_cart != nullptr)
{
- m_cart->bw2_modsel_w(space, offset, data);
+ m_cart->bw2_modsel_w(offset, data);
}
}
diff --git a/src/devices/bus/bw2/exp.h b/src/devices/bus/bw2/exp.h
index 5bd353c5d35..d37e5c66879 100644
--- a/src/devices/bus/bw2/exp.h
+++ b/src/devices/bus/bw2/exp.h
@@ -49,17 +49,6 @@
#define BW2_EXPANSION_SLOT_TAG "exp"
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_BW2_EXPANSION_SLOT_ADD(_tag, _clock, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, BW2_EXPANSION_SLOT, _clock) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -73,18 +62,28 @@ class bw2_expansion_slot_device : public device_t,
{
public:
// construction/destruction
+ template <typename T>
+ bw2_expansion_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock, T &&opts, char const *dflt)
+ : bw2_expansion_slot_device(mconfig, tag, owner, clock)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
bw2_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~bw2_expansion_slot_device();
// computer interface
- uint8_t cd_r(address_space &space, offs_t offset, uint8_t data, int ram2, int ram3, int ram4, int ram5, int ram6);
- void cd_w(address_space &space, offs_t offset, uint8_t data, int ram2, int ram3, int ram4, int ram5, int ram6);
+ uint8_t cd_r(offs_t offset, uint8_t data, int ram2, int ram3, int ram4, int ram5, int ram6);
+ void cd_w(offs_t offset, uint8_t data, int ram2, int ram3, int ram4, int ram5, int ram6);
- DECLARE_READ8_MEMBER( slot_r );
- DECLARE_WRITE8_MEMBER( slot_w );
+ uint8_t slot_r(offs_t offset);
+ void slot_w(offs_t offset, uint8_t data);
- DECLARE_READ8_MEMBER( modsel_r );
- DECLARE_WRITE8_MEMBER( modsel_w );
+ uint8_t modsel_r(offs_t offset);
+ void modsel_w(offs_t offset, uint8_t data);
protected:
// device-level overrides
@@ -104,14 +103,14 @@ public:
// construction/destruction
virtual ~device_bw2_expansion_slot_interface();
- virtual uint8_t bw2_cd_r(address_space &space, offs_t offset, uint8_t data, int ram2, int ram3, int ram4, int ram5, int ram6) { return data; };
- virtual void bw2_cd_w(address_space &space, offs_t offset, uint8_t data, int ram2, int ram3, int ram4, int ram5, int ram6) { };
+ virtual uint8_t bw2_cd_r(offs_t offset, uint8_t data, int ram2, int ram3, int ram4, int ram5, int ram6) { return data; }
+ virtual void bw2_cd_w(offs_t offset, uint8_t data, int ram2, int ram3, int ram4, int ram5, int ram6) { }
- virtual uint8_t bw2_slot_r(address_space &space, offs_t offset) { return 0xff; }
- virtual void bw2_slot_w(address_space &space, offs_t offset, uint8_t data) { }
+ virtual uint8_t bw2_slot_r(offs_t offset) { return 0xff; }
+ virtual void bw2_slot_w(offs_t offset, uint8_t data) { }
- virtual uint8_t bw2_modsel_r(address_space &space, offs_t offset) { return 0xff; }
- virtual void bw2_modsel_w(address_space &space, offs_t offset, uint8_t data) { }
+ virtual uint8_t bw2_modsel_r(offs_t offset) { return 0xff; }
+ virtual void bw2_modsel_w(offs_t offset, uint8_t data) { }
protected:
device_bw2_expansion_slot_interface(const machine_config &mconfig, device_t &device);
diff --git a/src/devices/bus/bw2/ramcard.cpp b/src/devices/bus/bw2/ramcard.cpp
index b59159cd5b1..48de6cffdec 100644
--- a/src/devices/bus/bw2/ramcard.cpp
+++ b/src/devices/bus/bw2/ramcard.cpp
@@ -88,7 +88,7 @@ void bw2_ramcard_device::device_reset()
// bw2_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t bw2_ramcard_device::bw2_cd_r(address_space &space, offs_t offset, uint8_t data, int ram2, int ram3, int ram4, int ram5, int ram6)
+uint8_t bw2_ramcard_device::bw2_cd_r(offs_t offset, uint8_t data, int ram2, int ram3, int ram4, int ram5, int ram6)
{
if (!ram2)
{
@@ -107,7 +107,7 @@ uint8_t bw2_ramcard_device::bw2_cd_r(address_space &space, offs_t offset, uint8_
// bw2_cd_r - cartridge data write
//-------------------------------------------------
-void bw2_ramcard_device::bw2_cd_w(address_space &space, offs_t offset, uint8_t data, int ram2, int ram3, int ram4, int ram5, int ram6)
+void bw2_ramcard_device::bw2_cd_w(offs_t offset, uint8_t data, int ram2, int ram3, int ram4, int ram5, int ram6)
{
if (m_en && !ram5)
{
@@ -120,7 +120,7 @@ void bw2_ramcard_device::bw2_cd_w(address_space &space, offs_t offset, uint8_t d
// bw2_slot_w - slot write
//-------------------------------------------------
-void bw2_ramcard_device::bw2_slot_w(address_space &space, offs_t offset, uint8_t data)
+void bw2_ramcard_device::bw2_slot_w(offs_t offset, uint8_t data)
{
m_en = 1;
m_bank = data & 0x0f;
diff --git a/src/devices/bus/bw2/ramcard.h b/src/devices/bus/bw2/ramcard.h
index 9ac2b0433fa..029d9b91feb 100644
--- a/src/devices/bus/bw2/ramcard.h
+++ b/src/devices/bus/bw2/ramcard.h
@@ -37,9 +37,9 @@ protected:
virtual void device_reset() override;
// device_bw2_expansion_slot_interface overrides
- virtual uint8_t bw2_cd_r(address_space &space, offs_t offset, uint8_t data, int ram2, int ram3, int ram4, int ram5, int ram6) override;
- virtual void bw2_cd_w(address_space &space, offs_t offset, uint8_t data, int ram2, int ram3, int ram4, int ram5, int ram6) override;
- virtual void bw2_slot_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t bw2_cd_r(offs_t offset, uint8_t data, int ram2, int ram3, int ram4, int ram5, int ram6) override;
+ virtual void bw2_cd_w(offs_t offset, uint8_t data, int ram2, int ram3, int ram4, int ram5, int ram6) override;
+ virtual void bw2_slot_w(offs_t offset, uint8_t data) override;
private:
required_memory_region m_rom;
diff --git a/src/devices/bus/c64/16kb.cpp b/src/devices/bus/c64/16kb.cpp
index 4b23cb663f7..4b497f88591 100644
--- a/src/devices/bus/c64/16kb.cpp
+++ b/src/devices/bus/c64/16kb.cpp
@@ -22,13 +22,12 @@ DEFINE_DEVICE_TYPE(C64_16KB, c64_16kb_cartridge_device, "c64_16kb", "C64 16KB EP
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c64_16kb_cartridge_device::device_add_mconfig)
- MCFG_GENERIC_CARTSLOT_ADD("roml", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("rom,bin,80")
+void c64_16kb_cartridge_device::device_add_mconfig(machine_config &config)
+{
+ GENERIC_CARTSLOT(config, m_low, generic_linear_slot, nullptr, "rom,bin,80");
- MCFG_GENERIC_CARTSLOT_ADD("romh", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("rom,bin,a0,e0")
-MACHINE_CONFIG_END
+ GENERIC_CARTSLOT(config, m_high, generic_linear_slot, nullptr, "rom,bin,a0,e0");
+}
//-------------------------------------------------
@@ -99,15 +98,15 @@ void c64_16kb_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_16kb_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_16kb_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)
{
- data = m_low->read_rom(space, offset & 0x1fff);
+ data = m_low->read_rom(offset & 0x1fff);
}
else if (!romh)
{
- data = m_high->read_rom(space, offset & 0x1fff);
+ data = m_high->read_rom(offset & 0x1fff);
}
return data;
diff --git a/src/devices/bus/c64/16kb.h b/src/devices/bus/c64/16kb.h
index 97afa77f5af..db7f294fda0 100644
--- a/src/devices/bus/c64/16kb.h
+++ b/src/devices/bus/c64/16kb.h
@@ -41,7 +41,7 @@ protected:
virtual ioport_constructor device_input_ports() const override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
private:
required_ioport m_sw1;
diff --git a/src/devices/bus/c64/c128_comal80.cpp b/src/devices/bus/c64/c128_comal80.cpp
index 234a3499a19..f1ce8c5c87a 100644
--- a/src/devices/bus/c64/c128_comal80.cpp
+++ b/src/devices/bus/c64/c128_comal80.cpp
@@ -60,7 +60,7 @@ void c128_comal80_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c128_comal80_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c128_comal80_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!romh)
{
@@ -80,7 +80,7 @@ uint8_t c128_comal80_cartridge_device::c64_cd_r(address_space &space, offs_t off
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c128_comal80_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c128_comal80_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/c128_comal80.h b/src/devices/bus/c64/c128_comal80.h
index c141cffb69e..fe413f9bef6 100644
--- a/src/devices/bus/c64/c128_comal80.h
+++ b/src/devices/bus/c64/c128_comal80.h
@@ -35,8 +35,8 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
uint8_t m_bank;
diff --git a/src/devices/bus/c64/c128_partner.cpp b/src/devices/bus/c64/c128_partner.cpp
index d5e74cc43cb..91b7cf751ab 100644
--- a/src/devices/bus/c64/c128_partner.cpp
+++ b/src/devices/bus/c64/c128_partner.cpp
@@ -147,7 +147,7 @@ void c128_partner_cartridge_device::device_timer(emu_timer &timer, device_timer_
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c128_partner_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c128_partner_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)
{
@@ -185,7 +185,7 @@ uint8_t c128_partner_cartridge_device::c64_cd_r(address_space &space, offs_t off
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c128_partner_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c128_partner_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/c128_partner.h b/src/devices/bus/c64/c128_partner.h
index 632e526b035..1f4402d5b22 100644
--- a/src/devices/bus/c64/c128_partner.h
+++ b/src/devices/bus/c64/c128_partner.h
@@ -42,8 +42,8 @@ protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
// device_vcs_control_port_interface overrides
virtual void vcs_joy_w(uint8_t data);
diff --git a/src/devices/bus/c64/comal80.cpp b/src/devices/bus/c64/comal80.cpp
index 24c966eccc1..0ce6dcbfb5a 100644
--- a/src/devices/bus/c64/comal80.cpp
+++ b/src/devices/bus/c64/comal80.cpp
@@ -60,7 +60,7 @@ void c64_comal80_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_comal80_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_comal80_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 || !romh)
{
@@ -76,7 +76,7 @@ uint8_t c64_comal80_cartridge_device::c64_cd_r(address_space &space, offs_t offs
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_comal80_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_comal80_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/comal80.h b/src/devices/bus/c64/comal80.h
index fb0ceaad303..af0958a8940 100644
--- a/src/devices/bus/c64/comal80.h
+++ b/src/devices/bus/c64/comal80.h
@@ -35,8 +35,8 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
uint8_t m_bank;
diff --git a/src/devices/bus/c64/cpm.cpp b/src/devices/bus/c64/cpm.cpp
index 81b6dd4eea2..7a909f6e920 100644
--- a/src/devices/bus/c64/cpm.cpp
+++ b/src/devices/bus/c64/cpm.cpp
@@ -161,7 +161,7 @@ void c64_cpm_cartridge_device::device_reset()
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_cpm_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_cpm_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
@@ -201,7 +201,7 @@ READ8_MEMBER( c64_cpm_cartridge_device::dma_r )
{
offs_t addr = (offset + 0x1000) & 0xffff;
- data = m_slot->dma_cd_r(space, addr);
+ data = m_slot->dma_cd_r(addr);
}
return data;
@@ -218,6 +218,6 @@ WRITE8_MEMBER( c64_cpm_cartridge_device::dma_w )
{
offs_t addr = (offset + 0x1000) & 0xffff;
- m_slot->dma_cd_w(space, addr, data);
+ m_slot->dma_cd_w(addr, data);
}
}
diff --git a/src/devices/bus/c64/cpm.h b/src/devices/bus/c64/cpm.h
index f0da4d6c0f7..63d3a7123cd 100644
--- a/src/devices/bus/c64/cpm.h
+++ b/src/devices/bus/c64/cpm.h
@@ -38,7 +38,7 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_c64_expansion_card_interface overrides
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
virtual int c64_game_r(offs_t offset, int sphi2, int ba, int rw) override;
private:
diff --git a/src/devices/bus/c64/currah_speech.cpp b/src/devices/bus/c64/currah_speech.cpp
index 84d64f2ea2a..2ce77f2ea04 100644
--- a/src/devices/bus/c64/currah_speech.cpp
+++ b/src/devices/bus/c64/currah_speech.cpp
@@ -170,7 +170,7 @@ void c64_currah_speech_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_currah_speech_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_currah_speech_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!romh)
{
@@ -210,7 +210,7 @@ uint8_t c64_currah_speech_cartridge_device::c64_cd_r(address_space &space, offs_
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_currah_speech_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_currah_speech_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/currah_speech.h b/src/devices/bus/c64/currah_speech.h
index 44d5adb083a..f856833f659 100644
--- a/src/devices/bus/c64/currah_speech.h
+++ b/src/devices/bus/c64/currah_speech.h
@@ -40,8 +40,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
inline void set_osc1(int voice, int intonation);
diff --git a/src/devices/bus/c64/dela_ep256.cpp b/src/devices/bus/c64/dela_ep256.cpp
index e11b3ae8f53..107f2828d21 100644
--- a/src/devices/bus/c64/dela_ep256.cpp
+++ b/src/devices/bus/c64/dela_ep256.cpp
@@ -22,24 +22,17 @@ DEFINE_DEVICE_TYPE(C64_DELA_EP256, c64_dela_ep256_cartridge_device, "delep256",
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c64_dela_ep256_cartridge_device::device_add_mconfig)
- MCFG_GENERIC_SOCKET_ADD("rom1", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_SOCKET_ADD("rom2", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_SOCKET_ADD("rom3", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_SOCKET_ADD("rom4", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_SOCKET_ADD("rom5", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_SOCKET_ADD("rom6", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_SOCKET_ADD("rom7", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_SOCKET_ADD("rom8", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("bin,rom")
-MACHINE_CONFIG_END
+void c64_dela_ep256_cartridge_device::device_add_mconfig(machine_config &config)
+{
+ GENERIC_SOCKET(config, "rom1", generic_linear_slot, nullptr, "bin,rom");
+ GENERIC_SOCKET(config, "rom2", generic_linear_slot, nullptr, "bin,rom");
+ GENERIC_SOCKET(config, "rom3", generic_linear_slot, nullptr, "bin,rom");
+ GENERIC_SOCKET(config, "rom4", generic_linear_slot, nullptr, "bin,rom");
+ GENERIC_SOCKET(config, "rom5", generic_linear_slot, nullptr, "bin,rom");
+ GENERIC_SOCKET(config, "rom6", generic_linear_slot, nullptr, "bin,rom");
+ GENERIC_SOCKET(config, "rom7", generic_linear_slot, nullptr, "bin,rom");
+ GENERIC_SOCKET(config, "rom8", generic_linear_slot, nullptr, "bin,rom");
+}
@@ -94,7 +87,7 @@ void c64_dela_ep256_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_dela_ep256_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_dela_ep256_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)
{
@@ -105,7 +98,7 @@ uint8_t c64_dela_ep256_cartridge_device::c64_cd_r(address_space &space, offs_t o
else
{
offs_t addr = (m_bank << 13) | (offset & 0x1fff);
- data = m_eproms[m_socket]->read_rom(space, addr);
+ data = m_eproms[m_socket]->read_rom(addr);
}
}
@@ -117,7 +110,7 @@ uint8_t c64_dela_ep256_cartridge_device::c64_cd_r(address_space &space, offs_t o
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_dela_ep256_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_dela_ep256_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io2 && ((offset & 0xf0) == 0xa0))
{
diff --git a/src/devices/bus/c64/dela_ep256.h b/src/devices/bus/c64/dela_ep256.h
index bcc1992b969..61501df0790 100644
--- a/src/devices/bus/c64/dela_ep256.h
+++ b/src/devices/bus/c64/dela_ep256.h
@@ -40,8 +40,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
generic_slot_device *m_eproms[8];
diff --git a/src/devices/bus/c64/dela_ep64.cpp b/src/devices/bus/c64/dela_ep64.cpp
index c9eee384a5a..5798794f7eb 100644
--- a/src/devices/bus/c64/dela_ep64.cpp
+++ b/src/devices/bus/c64/dela_ep64.cpp
@@ -22,12 +22,11 @@ DEFINE_DEVICE_TYPE(C64_DELA_EP64, c64_dela_ep64_cartridge_device, "c64_dela_ep64
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c64_dela_ep64_cartridge_device::device_add_mconfig)
- MCFG_GENERIC_SOCKET_ADD("eprom1", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("rom,bin")
- MCFG_GENERIC_SOCKET_ADD("eprom2", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("rom,bin")
-MACHINE_CONFIG_END
+void c64_dela_ep64_cartridge_device::device_add_mconfig(machine_config &config)
+{
+ GENERIC_SOCKET(config, m_eprom1, generic_linear_slot, nullptr, "rom,bin");
+ GENERIC_SOCKET(config, m_eprom2, generic_linear_slot, nullptr, "rom,bin");
+}
//**************************************************************************
@@ -78,7 +77,7 @@ void c64_dela_ep64_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_dela_ep64_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_dela_ep64_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)
{
@@ -91,8 +90,8 @@ uint8_t c64_dela_ep64_cartridge_device::c64_cd_r(address_space &space, offs_t of
offs_t addr = (m_bank << 13) | (offset & 0x1fff);
if (!m_rom0_ce) data |= m_roml[offset & 0x1fff];
- if (!m_rom1_ce) data |= m_eprom1->read_rom(space, addr);
- if (!m_rom2_ce) data |= m_eprom2->read_rom(space, addr);
+ if (!m_rom1_ce) data |= m_eprom1->read_rom(addr);
+ if (!m_rom2_ce) data |= m_eprom2->read_rom(addr);
}
}
@@ -104,7 +103,7 @@ uint8_t c64_dela_ep64_cartridge_device::c64_cd_r(address_space &space, offs_t of
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_dela_ep64_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_dela_ep64_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/dela_ep64.h b/src/devices/bus/c64/dela_ep64.h
index a3e2d77bd48..95ac3440871 100644
--- a/src/devices/bus/c64/dela_ep64.h
+++ b/src/devices/bus/c64/dela_ep64.h
@@ -40,8 +40,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
required_device<generic_slot_device> m_eprom1;
diff --git a/src/devices/bus/c64/dela_ep7x8.cpp b/src/devices/bus/c64/dela_ep7x8.cpp
index 564e7196449..0c71555b880 100644
--- a/src/devices/bus/c64/dela_ep7x8.cpp
+++ b/src/devices/bus/c64/dela_ep7x8.cpp
@@ -22,22 +22,16 @@ DEFINE_DEVICE_TYPE(C64_DELA_EP7X8, c64_dela_ep7x8_cartridge_device, "c64_dela_ep
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c64_dela_ep7x8_cartridge_device::device_add_mconfig)
- MCFG_GENERIC_SOCKET_ADD("rom1", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_SOCKET_ADD("rom2", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_SOCKET_ADD("rom3", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_SOCKET_ADD("rom4", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_SOCKET_ADD("rom5", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_SOCKET_ADD("rom6", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_SOCKET_ADD("rom7", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("bin,rom")
-MACHINE_CONFIG_END
+void c64_dela_ep7x8_cartridge_device::device_add_mconfig(machine_config &config)
+{
+ GENERIC_SOCKET(config, m_eprom[0], generic_linear_slot, nullptr, "bin,rom");
+ GENERIC_SOCKET(config, m_eprom[1], generic_linear_slot, nullptr, "bin,rom");
+ GENERIC_SOCKET(config, m_eprom[2], generic_linear_slot, nullptr, "bin,rom");
+ GENERIC_SOCKET(config, m_eprom[3], generic_linear_slot, nullptr, "bin,rom");
+ GENERIC_SOCKET(config, m_eprom[4], generic_linear_slot, nullptr, "bin,rom");
+ GENERIC_SOCKET(config, m_eprom[5], generic_linear_slot, nullptr, "bin,rom");
+ GENERIC_SOCKET(config, m_eprom[6], generic_linear_slot, nullptr, "bin,rom");
+}
//**************************************************************************
@@ -51,13 +45,7 @@ MACHINE_CONFIG_END
c64_dela_ep7x8_cartridge_device::c64_dela_ep7x8_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, C64_DELA_EP7X8, tag, owner, clock),
device_c64_expansion_card_interface(mconfig, *this),
- m_eprom1(*this, "rom1"),
- m_eprom2(*this, "rom2"),
- m_eprom3(*this, "rom3"),
- m_eprom4(*this, "rom4"),
- m_eprom5(*this, "rom5"),
- m_eprom6(*this, "rom6"),
- m_eprom7(*this, "rom7"), m_bank(0)
+ m_eprom(*this, "rom%u", 1U)
{
}
@@ -88,20 +76,20 @@ void c64_dela_ep7x8_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_dela_ep7x8_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_dela_ep7x8_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)
{
offs_t addr = offset & 0x1fff;
if (!BIT(m_bank, 0)) data |= m_roml[addr];
- if (!BIT(m_bank, 1)) data |= m_eprom1->read_rom(space, addr);
- if (!BIT(m_bank, 2)) data |= m_eprom2->read_rom(space, addr);
- if (!BIT(m_bank, 3)) data |= m_eprom3->read_rom(space, addr);
- if (!BIT(m_bank, 4)) data |= m_eprom4->read_rom(space, addr);
- if (!BIT(m_bank, 5)) data |= m_eprom5->read_rom(space, addr);
- if (!BIT(m_bank, 6)) data |= m_eprom6->read_rom(space, addr);
- if (!BIT(m_bank, 7)) data |= m_eprom7->read_rom(space, addr);
+ if (!BIT(m_bank, 1)) data |= m_eprom[0]->read_rom(addr);
+ if (!BIT(m_bank, 2)) data |= m_eprom[1]->read_rom(addr);
+ if (!BIT(m_bank, 3)) data |= m_eprom[2]->read_rom(addr);
+ if (!BIT(m_bank, 4)) data |= m_eprom[3]->read_rom(addr);
+ if (!BIT(m_bank, 5)) data |= m_eprom[4]->read_rom(addr);
+ if (!BIT(m_bank, 6)) data |= m_eprom[5]->read_rom(addr);
+ if (!BIT(m_bank, 7)) data |= m_eprom[6]->read_rom(addr);
}
return data;
@@ -112,7 +100,7 @@ uint8_t c64_dela_ep7x8_cartridge_device::c64_cd_r(address_space &space, offs_t o
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_dela_ep7x8_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_dela_ep7x8_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/dela_ep7x8.h b/src/devices/bus/c64/dela_ep7x8.h
index 48146d1c5e1..50e1b3af01e 100644
--- a/src/devices/bus/c64/dela_ep7x8.h
+++ b/src/devices/bus/c64/dela_ep7x8.h
@@ -40,17 +40,11 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
- required_device<generic_slot_device> m_eprom1;
- required_device<generic_slot_device> m_eprom2;
- required_device<generic_slot_device> m_eprom3;
- required_device<generic_slot_device> m_eprom4;
- required_device<generic_slot_device> m_eprom5;
- required_device<generic_slot_device> m_eprom6;
- required_device<generic_slot_device> m_eprom7;
+ required_device_array<generic_slot_device, 7> m_eprom;
uint8_t m_bank;
};
diff --git a/src/devices/bus/c64/dinamic.cpp b/src/devices/bus/c64/dinamic.cpp
index 8ab60892263..13d37749335 100644
--- a/src/devices/bus/c64/dinamic.cpp
+++ b/src/devices/bus/c64/dinamic.cpp
@@ -60,7 +60,7 @@ void c64_dinamic_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_dinamic_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_dinamic_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)
{
diff --git a/src/devices/bus/c64/dinamic.h b/src/devices/bus/c64/dinamic.h
index 84bd1503503..e204964e4a1 100644
--- a/src/devices/bus/c64/dinamic.h
+++ b/src/devices/bus/c64/dinamic.h
@@ -35,7 +35,7 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
private:
uint8_t m_bank;
diff --git a/src/devices/bus/c64/dqbb.cpp b/src/devices/bus/c64/dqbb.cpp
index b9cb32ce1cc..20adedd9057 100644
--- a/src/devices/bus/c64/dqbb.cpp
+++ b/src/devices/bus/c64/dqbb.cpp
@@ -78,7 +78,7 @@ void c64_dqbb_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_dqbb_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_dqbb_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!m_cs && (!roml || !romh))
{
@@ -93,7 +93,7 @@ uint8_t c64_dqbb_cartridge_device::c64_cd_r(address_space &space, offs_t offset,
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_dqbb_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_dqbb_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!m_cs && m_we && (offset >= 0x8000 && offset < 0xc000))
{
diff --git a/src/devices/bus/c64/dqbb.h b/src/devices/bus/c64/dqbb.h
index 6c472eb6696..aaa8c0e1bf4 100644
--- a/src/devices/bus/c64/dqbb.h
+++ b/src/devices/bus/c64/dqbb.h
@@ -42,8 +42,8 @@ protected:
virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram, m_nvram.bytes()); } }
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
int m_cs;
diff --git a/src/devices/bus/c64/easy_calc_result.cpp b/src/devices/bus/c64/easy_calc_result.cpp
index 4ddd4cbdac0..123870d5d3e 100644
--- a/src/devices/bus/c64/easy_calc_result.cpp
+++ b/src/devices/bus/c64/easy_calc_result.cpp
@@ -80,7 +80,7 @@ void c64_easy_calc_result_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_easy_calc_result_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_easy_calc_result_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)
{
@@ -99,7 +99,7 @@ uint8_t c64_easy_calc_result_cartridge_device::c64_cd_r(address_space &space, of
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_easy_calc_result_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_easy_calc_result_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/easy_calc_result.h b/src/devices/bus/c64/easy_calc_result.h
index 377bbd12b17..2d945b7dea2 100644
--- a/src/devices/bus/c64/easy_calc_result.h
+++ b/src/devices/bus/c64/easy_calc_result.h
@@ -35,8 +35,8 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
int m_bank;
diff --git a/src/devices/bus/c64/easyflash.cpp b/src/devices/bus/c64/easyflash.cpp
index abdd891572f..38cdf9739c6 100644
--- a/src/devices/bus/c64/easyflash.cpp
+++ b/src/devices/bus/c64/easyflash.cpp
@@ -114,17 +114,17 @@ void c64_easyflash_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_easyflash_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_easyflash_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)
{
offs_t addr = (m_bank << 13) | (offset & 0x1fff);
- data = m_flash_roml->read(space, addr);
+ data = m_flash_roml->read(addr);
}
else if (!romh)
{
offs_t addr = (m_bank << 13) | (offset & 0x1fff);
- data = m_flash_romh->read(space, addr);
+ data = m_flash_romh->read(addr);
}
else if (!io2)
{
@@ -139,17 +139,17 @@ uint8_t c64_easyflash_cartridge_device::c64_cd_r(address_space &space, offs_t of
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_easyflash_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_easyflash_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!roml)
{
offs_t addr = (m_bank << 13) | (offset & 0x1fff);
- m_flash_roml->write(space, addr, data);
+ m_flash_roml->write(addr, data);
}
else if (!romh)
{
offs_t addr = (m_bank << 13) | (offset & 0x1fff);
- m_flash_romh->write(space, addr, data);
+ m_flash_romh->write(addr, data);
}
else if (!io1)
{
diff --git a/src/devices/bus/c64/easyflash.h b/src/devices/bus/c64/easyflash.h
index ef11fa5162d..377de25d50d 100644
--- a/src/devices/bus/c64/easyflash.h
+++ b/src/devices/bus/c64/easyflash.h
@@ -40,8 +40,8 @@ protected:
virtual ioport_constructor device_input_ports() const override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
virtual int c64_exrom_r(offs_t offset, int sphi2, int ba, int rw) override;
virtual int c64_game_r(offs_t offset, int sphi2, int ba, int rw) override;
diff --git a/src/devices/bus/c64/epyx_fast_load.cpp b/src/devices/bus/c64/epyx_fast_load.cpp
index d119091555b..4dced91c76a 100644
--- a/src/devices/bus/c64/epyx_fast_load.cpp
+++ b/src/devices/bus/c64/epyx_fast_load.cpp
@@ -80,7 +80,7 @@ void c64_epyx_fast_load_cartridge_device::device_timer(emu_timer &timer, device_
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_epyx_fast_load_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_epyx_fast_load_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)
{
@@ -107,7 +107,7 @@ uint8_t c64_epyx_fast_load_cartridge_device::c64_cd_r(address_space &space, offs
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_epyx_fast_load_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_epyx_fast_load_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/epyx_fast_load.h b/src/devices/bus/c64/epyx_fast_load.h
index 42f04254703..64d23f6febb 100644
--- a/src/devices/bus/c64/epyx_fast_load.h
+++ b/src/devices/bus/c64/epyx_fast_load.h
@@ -36,8 +36,8 @@ protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
emu_timer *m_exrom_timer;
diff --git a/src/devices/bus/c64/exos.cpp b/src/devices/bus/c64/exos.cpp
index 5c41cd7d6d3..13c5d972642 100644
--- a/src/devices/bus/c64/exos.cpp
+++ b/src/devices/bus/c64/exos.cpp
@@ -47,7 +47,7 @@ void c64_exos_cartridge_device::device_start()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_exos_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_exos_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!romh)
{
diff --git a/src/devices/bus/c64/exos.h b/src/devices/bus/c64/exos.h
index 93872e38e7a..73b9b2699aa 100644
--- a/src/devices/bus/c64/exos.h
+++ b/src/devices/bus/c64/exos.h
@@ -34,7 +34,7 @@ protected:
virtual void device_start() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
virtual int c64_game_r(offs_t offset, int sphi2, int ba, int rw) override;
};
diff --git a/src/devices/bus/c64/exp.cpp b/src/devices/bus/c64/exp.cpp
index 1dc007f95a0..2d4743fe7c4 100644
--- a/src/devices/bus/c64/exp.cpp
+++ b/src/devices/bus/c64/exp.cpp
@@ -225,11 +225,11 @@ std::string c64_expansion_slot_device::get_default_card_software(get_default_car
// cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_expansion_slot_device::cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_expansion_slot_device::cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (m_card != nullptr)
{
- data = m_card->c64_cd_r(space, offset, data, sphi2, ba, roml, romh, io1, io2);
+ data = m_card->c64_cd_r(offset, data, sphi2, ba, roml, romh, io1, io2);
}
return data;
@@ -240,11 +240,11 @@ uint8_t c64_expansion_slot_device::cd_r(address_space &space, offs_t offset, uin
// cd_w - cartridge data write
//-------------------------------------------------
-void c64_expansion_slot_device::cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_expansion_slot_device::cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (m_card != nullptr)
{
- m_card->c64_cd_w(space, offset, data, sphi2, ba, roml, romh, io1, io2);
+ m_card->c64_cd_w(offset, data, sphi2, ba, roml, romh, io1, io2);
}
}
diff --git a/src/devices/bus/c64/exp.h b/src/devices/bus/c64/exp.h
index c188434d1b8..7cba776f683 100644
--- a/src/devices/bus/c64/exp.h
+++ b/src/devices/bus/c64/exp.h
@@ -81,14 +81,14 @@ public:
auto dma_callback() { return m_write_dma.bind(); }
// computer interface
- uint8_t cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2);
- void cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2);
+ uint8_t cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2);
+ void cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2);
int game_r(offs_t offset, int sphi2, int ba, int rw, int hiram);
int exrom_r(offs_t offset, int sphi2, int ba, int rw, int hiram);
// cartridge interface
- DECLARE_READ8_MEMBER( dma_cd_r ) { return m_read_dma_cd(offset); }
- DECLARE_WRITE8_MEMBER( dma_cd_w ) { m_write_dma_cd(offset, data); }
+ uint8_t dma_cd_r(offs_t offset) { return m_read_dma_cd(offset); }
+ void dma_cd_w(offs_t offset, uint8_t data) { m_write_dma_cd(offset, data); }
DECLARE_WRITE_LINE_MEMBER( irq_w ) { m_write_irq(state); }
DECLARE_WRITE_LINE_MEMBER( nmi_w ) { m_write_nmi(state); }
DECLARE_WRITE_LINE_MEMBER( dma_w ) { m_write_dma(state); }
@@ -145,8 +145,8 @@ public:
// construction/destruction
virtual ~device_c64_expansion_card_interface();
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) { return data; };
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) { };
+ virtual uint8_t c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) { return data; };
+ virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) { };
virtual int c64_game_r(offs_t offset, int sphi2, int ba, int rw) { return m_game; }
virtual int c64_exrom_r(offs_t offset, int sphi2, int ba, int rw) { return m_exrom; }
diff --git a/src/devices/bus/c64/fcc.cpp b/src/devices/bus/c64/fcc.cpp
index 77d505e97a3..24aaa6ec523 100644
--- a/src/devices/bus/c64/fcc.cpp
+++ b/src/devices/bus/c64/fcc.cpp
@@ -75,10 +75,11 @@ void c64_final_chesscard_device::c64_fcc_map(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c64_final_chesscard_device::device_add_mconfig)
- MCFG_DEVICE_ADD(G65SC02P4_TAG, M65SC02, XTAL(5'000'000))
- MCFG_DEVICE_PROGRAM_MAP(c64_fcc_map)
-MACHINE_CONFIG_END
+void c64_final_chesscard_device::device_add_mconfig(machine_config &config)
+{
+ M65SC02(config, m_maincpu, XTAL(5'000'000));
+ m_maincpu->set_addrmap(AS_PROGRAM, &c64_final_chesscard_device::c64_fcc_map);
+}
//-------------------------------------------------
@@ -147,7 +148,7 @@ void c64_final_chesscard_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_final_chesscard_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_final_chesscard_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!roml)
{
@@ -173,7 +174,7 @@ uint8_t c64_final_chesscard_device::c64_cd_r(address_space &space, offs_t offset
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_final_chesscard_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_final_chesscard_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!roml)
{
diff --git a/src/devices/bus/c64/fcc.h b/src/devices/bus/c64/fcc.h
index 4d548f38528..3988a597fd4 100644
--- a/src/devices/bus/c64/fcc.h
+++ b/src/devices/bus/c64/fcc.h
@@ -46,8 +46,8 @@ protected:
virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram, m_nvram.bytes()); } }
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
required_device<m65sc02_device> m_maincpu;
diff --git a/src/devices/bus/c64/final.cpp b/src/devices/bus/c64/final.cpp
index 90be1e6e588..36b8ee1bae6 100644
--- a/src/devices/bus/c64/final.cpp
+++ b/src/devices/bus/c64/final.cpp
@@ -94,7 +94,7 @@ void c64_final_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_final_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_final_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 || !romh || !io1 || !io2)
{
@@ -120,7 +120,7 @@ uint8_t c64_final_cartridge_device::c64_cd_r(address_space &space, offs_t offset
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_final_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_final_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/final.h b/src/devices/bus/c64/final.h
index a8ed113f13b..6d59e737c02 100644
--- a/src/devices/bus/c64/final.h
+++ b/src/devices/bus/c64/final.h
@@ -40,8 +40,8 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ virtual void c64_cd_w(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/final3.cpp b/src/devices/bus/c64/final3.cpp
index 9a64e7c4172..23b54a829e0 100644
--- a/src/devices/bus/c64/final3.cpp
+++ b/src/devices/bus/c64/final3.cpp
@@ -104,7 +104,7 @@ void c64_final3_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_final3_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_final3_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 || !romh || !io1 || !io2)
{
@@ -120,7 +120,7 @@ uint8_t c64_final3_cartridge_device::c64_cd_r(address_space &space, offs_t offse
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_final3_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_final3_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!m_hidden && !io2 && ((offset & 0xff) == 0xff))
{
diff --git a/src/devices/bus/c64/final3.h b/src/devices/bus/c64/final3.h
index d424c76537a..8b020482560 100644
--- a/src/devices/bus/c64/final3.h
+++ b/src/devices/bus/c64/final3.h
@@ -40,8 +40,8 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
uint8_t m_bank;
diff --git a/src/devices/bus/c64/fun_play.cpp b/src/devices/bus/c64/fun_play.cpp
index b4b7a7285d2..2a211b21ab5 100644
--- a/src/devices/bus/c64/fun_play.cpp
+++ b/src/devices/bus/c64/fun_play.cpp
@@ -60,7 +60,7 @@ void c64_fun_play_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_fun_play_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_fun_play_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)
{
@@ -76,7 +76,7 @@ uint8_t c64_fun_play_cartridge_device::c64_cd_r(address_space &space, offs_t off
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_fun_play_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_fun_play_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/fun_play.h b/src/devices/bus/c64/fun_play.h
index ba62626651a..6fc082164c6 100644
--- a/src/devices/bus/c64/fun_play.h
+++ b/src/devices/bus/c64/fun_play.h
@@ -35,8 +35,8 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
uint8_t m_bank;
diff --git a/src/devices/bus/c64/geocable.cpp b/src/devices/bus/c64/geocable.cpp
index e740ec0da69..e07734f987f 100644
--- a/src/devices/bus/c64/geocable.cpp
+++ b/src/devices/bus/c64/geocable.cpp
@@ -30,10 +30,11 @@ DEFINE_DEVICE_TYPE(C64_GEOCABLE, c64_geocable_device, "c64_geocable", "C64 geoCa
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c64_geocable_device::device_add_mconfig)
- MCFG_DEVICE_ADD(m_centronics, CENTRONICS, centronics_devices, "printer")
- MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(*this, c64_geocable_device, output_b))
-MACHINE_CONFIG_END
+void c64_geocable_device::device_add_mconfig(machine_config &config)
+{
+ CENTRONICS(config, m_centronics, centronics_devices, "printer");
+ m_centronics->busy_handler().set(FUNC(c64_geocable_device::output_b));
+}
diff --git a/src/devices/bus/c64/georam.cpp b/src/devices/bus/c64/georam.cpp
index e82061df80e..6bf8a16a1d8 100644
--- a/src/devices/bus/c64/georam.cpp
+++ b/src/devices/bus/c64/georam.cpp
@@ -64,7 +64,7 @@ void c64_georam_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_georam_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_georam_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
@@ -80,7 +80,7 @@ uint8_t c64_georam_cartridge_device::c64_cd_r(address_space &space, offs_t offse
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_georam_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_georam_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/georam.h b/src/devices/bus/c64/georam.h
index 352ddff6d1b..03967625c23 100644
--- a/src/devices/bus/c64/georam.h
+++ b/src/devices/bus/c64/georam.h
@@ -35,8 +35,8 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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;
diff --git a/src/devices/bus/c64/ide64.cpp b/src/devices/bus/c64/ide64.cpp
index f70ca03c10a..1942ce466b5 100644
--- a/src/devices/bus/c64/ide64.cpp
+++ b/src/devices/bus/c64/ide64.cpp
@@ -134,7 +134,7 @@ void c64_ide64_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_ide64_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_ide64_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!m_enable) return data;
@@ -225,7 +225,7 @@ uint8_t c64_ide64_cartridge_device::c64_cd_r(address_space &space, offs_t offset
{
offs_t addr = (m_bank << 14) | (offset & 0x3fff);
- data = m_flash_rom->read(space, addr);
+ data = m_flash_rom->read(addr);
}
else if (!ram_oe)
{
@@ -240,7 +240,7 @@ uint8_t c64_ide64_cartridge_device::c64_cd_r(address_space &space, offs_t offset
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_ide64_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_ide64_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!m_enable) return;
@@ -259,7 +259,7 @@ void c64_ide64_cartridge_device::c64_cd_w(address_space &space, offs_t offset, u
if ((offset >= 0x8000 && offset < 0xc000) && !m_wp)
{
offs_t addr = (m_bank << 14) | (offset & 0x3fff);
- m_flash_rom->write(space, addr, data);
+ m_flash_rom->write(addr, data);
}
if (!io1)
diff --git a/src/devices/bus/c64/ide64.h b/src/devices/bus/c64/ide64.h
index b43e7bdaf98..bfabad10c87 100644
--- a/src/devices/bus/c64/ide64.h
+++ b/src/devices/bus/c64/ide64.h
@@ -43,8 +43,8 @@ protected:
virtual ioport_constructor device_input_ports() const override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
virtual int c64_game_r(offs_t offset, int sphi2, int ba, int rw) override;
virtual int c64_exrom_r(offs_t offset, int sphi2, int ba, int rw) override;
diff --git a/src/devices/bus/c64/ieee488.cpp b/src/devices/bus/c64/ieee488.cpp
index db1558b9766..d77e5064dfc 100644
--- a/src/devices/bus/c64/ieee488.cpp
+++ b/src/devices/bus/c64/ieee488.cpp
@@ -202,9 +202,9 @@ void c64_ieee488_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_ieee488_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_ieee488_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
- data = m_exp->cd_r(space, offset, data, sphi2, ba, roml, romh, io1, io2);
+ data = m_exp->cd_r(offset, data, sphi2, ba, roml, romh, io1, io2);
if (!roml && m_roml_sel)
{
@@ -212,7 +212,7 @@ uint8_t c64_ieee488_device::c64_cd_r(address_space &space, offs_t offset, uint8_
}
else if (!io2)
{
- data = m_tpi->read(space, offset & 0x07);
+ data = m_tpi->read(offset & 0x07);
}
return data;
@@ -223,14 +223,14 @@ uint8_t c64_ieee488_device::c64_cd_r(address_space &space, offs_t offset, uint8_
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_ieee488_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_ieee488_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io2)
{
- m_tpi->write(space, offset & 0x07, data);
+ m_tpi->write(offset & 0x07, data);
}
- m_exp->cd_w(space, offset, data, sphi2, ba, roml, romh, io1, io2);
+ m_exp->cd_w(offset, data, sphi2, ba, roml, romh, io1, io2);
}
diff --git a/src/devices/bus/c64/ieee488.h b/src/devices/bus/c64/ieee488.h
index 185a2623317..ab3c7748b8d 100644
--- a/src/devices/bus/c64/ieee488.h
+++ b/src/devices/bus/c64/ieee488.h
@@ -39,8 +39,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
virtual int c64_game_r(offs_t offset, int sphi2, int ba, int rw) override;
private:
diff --git a/src/devices/bus/c64/kingsoft.cpp b/src/devices/bus/c64/kingsoft.cpp
index 84263b71da7..510032fb720 100644
--- a/src/devices/bus/c64/kingsoft.cpp
+++ b/src/devices/bus/c64/kingsoft.cpp
@@ -57,7 +57,7 @@ void c64_kingsoft_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_kingsoft_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_kingsoft_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)
{
@@ -80,7 +80,7 @@ uint8_t c64_kingsoft_cartridge_device::c64_cd_r(address_space &space, offs_t off
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_kingsoft_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_kingsoft_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/kingsoft.h b/src/devices/bus/c64/kingsoft.h
index 89b2a4e0367..3a9fda45fef 100644
--- a/src/devices/bus/c64/kingsoft.h
+++ b/src/devices/bus/c64/kingsoft.h
@@ -35,8 +35,8 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
virtual int c64_game_r(offs_t offset, int sphi2, int ba, int rw) override;
};
diff --git a/src/devices/bus/c64/mach5.cpp b/src/devices/bus/c64/mach5.cpp
index f312a14e1d4..ddd44407d3e 100644
--- a/src/devices/bus/c64/mach5.cpp
+++ b/src/devices/bus/c64/mach5.cpp
@@ -88,7 +88,7 @@ void c64_mach5_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_mach5_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_mach5_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 || !romh || !io1 || !io2)
{
@@ -103,7 +103,7 @@ uint8_t c64_mach5_cartridge_device::c64_cd_r(address_space &space, offs_t offset
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_mach5_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_mach5_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!m_c128)
{
diff --git a/src/devices/bus/c64/mach5.h b/src/devices/bus/c64/mach5.h
index affe03a52dc..a49e1bec347 100644
--- a/src/devices/bus/c64/mach5.h
+++ b/src/devices/bus/c64/mach5.h
@@ -37,8 +37,8 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
required_ioport m_s1;
diff --git a/src/devices/bus/c64/magic_desk.cpp b/src/devices/bus/c64/magic_desk.cpp
index 9f72a1f416f..2fe55681966 100644
--- a/src/devices/bus/c64/magic_desk.cpp
+++ b/src/devices/bus/c64/magic_desk.cpp
@@ -60,7 +60,7 @@ void c64_magic_desk_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_magic_desk_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_magic_desk_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)
{
@@ -76,7 +76,7 @@ uint8_t c64_magic_desk_cartridge_device::c64_cd_r(address_space &space, offs_t o
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_magic_desk_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_magic_desk_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/magic_desk.h b/src/devices/bus/c64/magic_desk.h
index 4082fc5ff56..75f76dee732 100644
--- a/src/devices/bus/c64/magic_desk.h
+++ b/src/devices/bus/c64/magic_desk.h
@@ -35,8 +35,8 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
uint8_t m_bank;
diff --git a/src/devices/bus/c64/magic_formel.cpp b/src/devices/bus/c64/magic_formel.cpp
index 7575320b765..9ebadc5320b 100644
--- a/src/devices/bus/c64/magic_formel.cpp
+++ b/src/devices/bus/c64/magic_formel.cpp
@@ -206,7 +206,7 @@ void c64_magic_formel_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_magic_formel_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_magic_formel_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!romh)
{
@@ -227,7 +227,7 @@ uint8_t c64_magic_formel_cartridge_device::c64_cd_r(address_space &space, offs_t
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_magic_formel_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_magic_formel_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1 && !m_ram_oe)
{
@@ -239,7 +239,7 @@ void c64_magic_formel_cartridge_device::c64_cd_w(address_space &space, offs_t of
offs_t addr = (offset >> 6) & 0x03;
uint8_t new_data = (BIT(data, 1) << 7) | (offset & 0x3f);
- m_pia->write(space, addr, new_data);
+ m_pia->write(addr, new_data);
}
else if (offset == 0x0001)
{
diff --git a/src/devices/bus/c64/magic_formel.h b/src/devices/bus/c64/magic_formel.h
index b4427511f32..818342d3c3f 100644
--- a/src/devices/bus/c64/magic_formel.h
+++ b/src/devices/bus/c64/magic_formel.h
@@ -41,8 +41,8 @@ protected:
virtual ioport_constructor device_input_ports() const override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
virtual int c64_game_r(offs_t offset, int sphi2, int ba, int rw) override;
private:
diff --git a/src/devices/bus/c64/magic_voice.cpp b/src/devices/bus/c64/magic_voice.cpp
index 8479f56a238..72d4afe5cf3 100644
--- a/src/devices/bus/c64/magic_voice.cpp
+++ b/src/devices/bus/c64/magic_voice.cpp
@@ -168,7 +168,7 @@ WRITE8_MEMBER( c64_magic_voice_cartridge_device::tpi_pb_w )
if (!BIT(m_tpi_pb, 4) && BIT(data, 4))
{
- m_vslsi->write(space, 0, data & 0x0f);
+ m_vslsi->write(data & 0x0f);
}
m_tpi_pb = data;
@@ -303,12 +303,12 @@ void c64_magic_voice_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_magic_voice_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_magic_voice_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io2 && sphi2)
{
m_ca = offset;
- data = m_tpi->read(space, offset & 0x07);
+ data = m_tpi->read(offset & 0x07);
}
if (PB6 && A13 && A15)
@@ -319,7 +319,7 @@ uint8_t c64_magic_voice_cartridge_device::c64_cd_r(address_space &space, offs_t
int roml2 = !(!roml || (roml && !PB5 && A12 && A13 && !A14 && A15));
int romh2 = !((!romh && !PB6) || (!PB5 && A12 && A13 && !A14 && !A15));
- data = m_exp->cd_r(space, get_offset(offset), data, sphi2, ba, roml2, romh2, io1, 1);
+ data = m_exp->cd_r(get_offset(offset), data, sphi2, ba, roml2, romh2, io1, 1);
return data;
}
@@ -329,17 +329,17 @@ uint8_t c64_magic_voice_cartridge_device::c64_cd_r(address_space &space, offs_t
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_magic_voice_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_magic_voice_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io2 && sphi2)
{
- m_tpi->write(space, offset & 0x07, data);
+ m_tpi->write(offset & 0x07, data);
}
int roml2 = !(!roml || (roml && !PB5 && A12 && A13 && !A14 && A15));
int romh2 = !((!romh && !PB6) || (!PB5 && A12 && A13 && !A14 && !A15));
- m_exp->cd_w(space, get_offset(offset), data, sphi2, ba, roml2, romh2, io1, 1);
+ m_exp->cd_w(get_offset(offset), data, sphi2, ba, roml2, romh2, io1, 1);
}
diff --git a/src/devices/bus/c64/magic_voice.h b/src/devices/bus/c64/magic_voice.h
index 264c2531197..bf6f081fd67 100644
--- a/src/devices/bus/c64/magic_voice.h
+++ b/src/devices/bus/c64/magic_voice.h
@@ -40,8 +40,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
virtual int c64_game_r(offs_t offset, int sphi2, int ba, int rw) override;
private:
diff --git a/src/devices/bus/c64/midi_maplin.cpp b/src/devices/bus/c64/midi_maplin.cpp
index 1845f167e33..adc8556a7bd 100644
--- a/src/devices/bus/c64/midi_maplin.cpp
+++ b/src/devices/bus/c64/midi_maplin.cpp
@@ -44,19 +44,19 @@ WRITE_LINE_MEMBER( c64_maplin_midi_cartridge_device::write_acia_clock )
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c64_maplin_midi_cartridge_device::device_add_mconfig)
+void c64_maplin_midi_cartridge_device::device_add_mconfig(machine_config &config)
+{
ACIA6850(config, m_acia, 0);
m_acia->txd_handler().set("mdout", FUNC(midi_port_device::write_txd));
m_acia->irq_handler().set(FUNC(c64_maplin_midi_cartridge_device::acia_irq_w));
- MCFG_MIDI_PORT_ADD("mdin", midiin_slot, "midiin")
- MCFG_MIDI_RX_HANDLER(WRITELINE(MC6850_TAG, acia6850_device, write_rxd))
+ MIDI_PORT(config, "mdin", midiin_slot, "midiin").rxd_handler().set(m_acia, FUNC(acia6850_device::write_rxd));
- MCFG_MIDI_PORT_ADD("mdout", midiout_slot, "midiout")
+ MIDI_PORT(config, "mdout", midiout_slot, "midiout");
- MCFG_DEVICE_ADD("acia_clock", CLOCK, 31250*16)
- MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(*this, c64_maplin_midi_cartridge_device, write_acia_clock))
-MACHINE_CONFIG_END
+ clock_device &acia_clock(CLOCK(config, "acia_clock", 31250*16));
+ acia_clock.signal_handler().set(FUNC(c64_maplin_midi_cartridge_device::write_acia_clock));
+}
@@ -100,7 +100,7 @@ void c64_maplin_midi_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_maplin_midi_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_maplin_midi_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io2)
{
@@ -108,7 +108,7 @@ uint8_t c64_maplin_midi_cartridge_device::c64_cd_r(address_space &space, offs_t
{
case 0:
case 1:
- data = m_acia->read(space, offset & 1);
+ data = m_acia->read(offset & 1);
break;
}
}
@@ -121,7 +121,7 @@ uint8_t c64_maplin_midi_cartridge_device::c64_cd_r(address_space &space, offs_t
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_maplin_midi_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_maplin_midi_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io2)
{
@@ -129,7 +129,7 @@ void c64_maplin_midi_cartridge_device::c64_cd_w(address_space &space, offs_t off
{
case 0:
case 1:
- m_acia->write(space, offset & 1, data);
+ m_acia->write(offset & 1, data);
break;
}
}
diff --git a/src/devices/bus/c64/midi_maplin.h b/src/devices/bus/c64/midi_maplin.h
index d844d007b36..eff1129802d 100644
--- a/src/devices/bus/c64/midi_maplin.h
+++ b/src/devices/bus/c64/midi_maplin.h
@@ -38,8 +38,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
DECLARE_WRITE_LINE_MEMBER( acia_irq_w );
diff --git a/src/devices/bus/c64/midi_namesoft.cpp b/src/devices/bus/c64/midi_namesoft.cpp
index c572cf4ea55..d4e7c8b59ac 100644
--- a/src/devices/bus/c64/midi_namesoft.cpp
+++ b/src/devices/bus/c64/midi_namesoft.cpp
@@ -44,19 +44,19 @@ WRITE_LINE_MEMBER( c64_namesoft_midi_cartridge_device::write_acia_clock )
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c64_namesoft_midi_cartridge_device::device_add_mconfig)
+void c64_namesoft_midi_cartridge_device::device_add_mconfig(machine_config &config)
+{
ACIA6850(config, m_acia, 0);
m_acia->txd_handler().set("mdout", FUNC(midi_port_device::write_txd));
m_acia->irq_handler().set(FUNC(c64_namesoft_midi_cartridge_device::acia_irq_w));
- MCFG_MIDI_PORT_ADD("mdin", midiin_slot, "midiin")
- MCFG_MIDI_RX_HANDLER(WRITELINE(MC6850_TAG, acia6850_device, write_rxd))
+ MIDI_PORT(config, "mdin", midiin_slot, "midiin").rxd_handler().set(m_acia, FUNC(acia6850_device::write_rxd));
- MCFG_MIDI_PORT_ADD("mdout", midiout_slot, "midiout")
+ MIDI_PORT(config, "mdout", midiout_slot, "midiout");
- MCFG_DEVICE_ADD("acia_clock", CLOCK, 31250*16)
- MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(*this, c64_namesoft_midi_cartridge_device, write_acia_clock))
-MACHINE_CONFIG_END
+ clock_device &acia_clock(CLOCK(config, "acia_clock", 31250*16));
+ acia_clock.signal_handler().set(FUNC(c64_namesoft_midi_cartridge_device::write_acia_clock));
+}
@@ -98,7 +98,7 @@ void c64_namesoft_midi_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_namesoft_midi_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_namesoft_midi_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
@@ -106,7 +106,7 @@ uint8_t c64_namesoft_midi_cartridge_device::c64_cd_r(address_space &space, offs_
{
case 2:
case 3:
- data = m_acia->read(space, offset & 1);
+ data = m_acia->read(offset & 1);
break;
}
}
@@ -119,7 +119,7 @@ uint8_t c64_namesoft_midi_cartridge_device::c64_cd_r(address_space &space, offs_
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_namesoft_midi_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_namesoft_midi_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
@@ -127,7 +127,7 @@ void c64_namesoft_midi_cartridge_device::c64_cd_w(address_space &space, offs_t o
{
case 0:
case 1:
- m_acia->write(space, offset & 1, data);
+ m_acia->write(offset & 1, data);
break;
}
}
diff --git a/src/devices/bus/c64/midi_namesoft.h b/src/devices/bus/c64/midi_namesoft.h
index fe583e9cac1..ab5064486c0 100644
--- a/src/devices/bus/c64/midi_namesoft.h
+++ b/src/devices/bus/c64/midi_namesoft.h
@@ -38,8 +38,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
DECLARE_WRITE_LINE_MEMBER( acia_irq_w );
diff --git a/src/devices/bus/c64/midi_passport.cpp b/src/devices/bus/c64/midi_passport.cpp
index bedab8e52c1..05a3fbb1a36 100644
--- a/src/devices/bus/c64/midi_passport.cpp
+++ b/src/devices/bus/c64/midi_passport.cpp
@@ -58,7 +58,8 @@ WRITE_LINE_MEMBER( c64_passport_midi_cartridge_device::write_acia_clock )
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c64_passport_midi_cartridge_device::device_add_mconfig)
+void c64_passport_midi_cartridge_device::device_add_mconfig(machine_config &config)
+{
ACIA6850(config, m_acia, 0);
m_acia->txd_handler().set("mdout", FUNC(midi_port_device::write_txd));
m_acia->irq_handler().set(FUNC(c64_passport_midi_cartridge_device::acia_irq_w));
@@ -67,14 +68,13 @@ MACHINE_CONFIG_START(c64_passport_midi_cartridge_device::device_add_mconfig)
m_ptm->set_external_clocks(1021800.0f, 1021800.0f, 1021800.0f);
m_ptm->irq_callback().set(FUNC(c64_passport_midi_cartridge_device::ptm_irq_w));
- MCFG_MIDI_PORT_ADD("mdin", midiin_slot, "midiin")
- MCFG_MIDI_RX_HANDLER(WRITELINE(MC6850_TAG, acia6850_device, write_rxd))
+ MIDI_PORT(config, "mdin", midiin_slot, "midiin").rxd_handler().set(m_acia, FUNC(acia6850_device::write_rxd));
- MCFG_MIDI_PORT_ADD("mdout", midiout_slot, "midiout")
+ MIDI_PORT(config, "mdout", midiout_slot, "midiout");
- MCFG_DEVICE_ADD("acia_clock", CLOCK, 31250*16) /// TODO: work out if the clock should come from the 6840
- MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(*this, c64_passport_midi_cartridge_device, write_acia_clock))
-MACHINE_CONFIG_END
+ clock_device &acia_clock(CLOCK(config, "acia_clock", 31250*16)); // TODO: work out if the clock should come from the 6840
+ acia_clock.signal_handler().set(FUNC(c64_passport_midi_cartridge_device::write_acia_clock));
+}
@@ -124,7 +124,7 @@ void c64_passport_midi_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_passport_midi_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_passport_midi_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
@@ -132,11 +132,11 @@ uint8_t c64_passport_midi_cartridge_device::c64_cd_r(address_space &space, offs_
{
case 0: case 1: case 2: case 3:
case 4: case 5: case 6: case 7:
- data = m_ptm->read(space, offset & 0x07);
+ data = m_ptm->read(offset & 0x07);
break;
case 8: case 9:
- data = m_acia->read(space, offset & 0x01);
+ data = m_acia->read(offset & 0x01);
break;
}
}
@@ -149,7 +149,7 @@ uint8_t c64_passport_midi_cartridge_device::c64_cd_r(address_space &space, offs_
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_passport_midi_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_passport_midi_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
@@ -157,11 +157,11 @@ void c64_passport_midi_cartridge_device::c64_cd_w(address_space &space, offs_t o
{
case 0: case 1: case 2: case 3:
case 4: case 5: case 6: case 7:
- m_ptm->write(space, offset & 0x07, data);
+ m_ptm->write(offset & 0x07, data);
break;
case 8: case 9:
- m_acia->write(space, offset & 0x01, data);
+ m_acia->write(offset & 0x01, data);
break;
case 0x30:
diff --git a/src/devices/bus/c64/midi_passport.h b/src/devices/bus/c64/midi_passport.h
index 5385e3fff91..a538d312912 100644
--- a/src/devices/bus/c64/midi_passport.h
+++ b/src/devices/bus/c64/midi_passport.h
@@ -39,8 +39,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
DECLARE_WRITE_LINE_MEMBER( ptm_irq_w );
diff --git a/src/devices/bus/c64/midi_sci.cpp b/src/devices/bus/c64/midi_sci.cpp
index 9d58052b38a..14309ee5e7c 100644
--- a/src/devices/bus/c64/midi_sci.cpp
+++ b/src/devices/bus/c64/midi_sci.cpp
@@ -44,19 +44,19 @@ WRITE_LINE_MEMBER( c64_sequential_midi_cartridge_device::write_acia_clock )
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c64_sequential_midi_cartridge_device::device_add_mconfig)
+void c64_sequential_midi_cartridge_device::device_add_mconfig(machine_config &config)
+{
ACIA6850(config, m_acia, 0);
m_acia->txd_handler().set("mdout", FUNC(midi_port_device::write_txd));
m_acia->irq_handler().set(FUNC(c64_sequential_midi_cartridge_device::acia_irq_w));
- MCFG_MIDI_PORT_ADD("mdin", midiin_slot, "midiin")
- MCFG_MIDI_RX_HANDLER(WRITELINE(MC6850_TAG, acia6850_device, write_rxd))
+ MIDI_PORT(config, "mdin", midiin_slot, "midiin").rxd_handler().set(m_acia, FUNC(acia6850_device::write_rxd));
- MCFG_MIDI_PORT_ADD("mdout", midiout_slot, "midiout")
+ MIDI_PORT(config, "mdout", midiout_slot, "midiout");
- MCFG_DEVICE_ADD("acia_clock", CLOCK, 31250*16)
- MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(*this, c64_sequential_midi_cartridge_device, write_acia_clock))
-MACHINE_CONFIG_END
+ clock_device &acia_clock(CLOCK(config, "acia_clock", 31250*16));
+ acia_clock.signal_handler().set(FUNC(c64_sequential_midi_cartridge_device::write_acia_clock));
+}
@@ -99,7 +99,7 @@ void c64_sequential_midi_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_sequential_midi_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_sequential_midi_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
@@ -107,7 +107,7 @@ uint8_t c64_sequential_midi_cartridge_device::c64_cd_r(address_space &space, off
{
case 2:
case 3:
- data = m_acia->read(space, offset & 1);
+ data = m_acia->read(offset & 1);
break;
}
}
@@ -120,7 +120,7 @@ uint8_t c64_sequential_midi_cartridge_device::c64_cd_r(address_space &space, off
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_sequential_midi_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_sequential_midi_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
@@ -128,7 +128,7 @@ void c64_sequential_midi_cartridge_device::c64_cd_w(address_space &space, offs_t
{
case 0:
case 1:
- m_acia->write(space, offset & 1, data);
+ m_acia->write(offset & 1, data);
break;
}
}
diff --git a/src/devices/bus/c64/midi_sci.h b/src/devices/bus/c64/midi_sci.h
index 2c3dfc7f8ff..b0d52a0f70d 100644
--- a/src/devices/bus/c64/midi_sci.h
+++ b/src/devices/bus/c64/midi_sci.h
@@ -38,8 +38,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
DECLARE_WRITE_LINE_MEMBER( acia_irq_w );
diff --git a/src/devices/bus/c64/midi_siel.cpp b/src/devices/bus/c64/midi_siel.cpp
index f5338bc6995..eea7a4b333d 100644
--- a/src/devices/bus/c64/midi_siel.cpp
+++ b/src/devices/bus/c64/midi_siel.cpp
@@ -44,19 +44,19 @@ WRITE_LINE_MEMBER( c64_siel_midi_cartridge_device::write_acia_clock )
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c64_siel_midi_cartridge_device::device_add_mconfig)
+void c64_siel_midi_cartridge_device::device_add_mconfig(machine_config &config)
+{
ACIA6850(config, m_acia, 0);
m_acia->txd_handler().set("mdout", FUNC(midi_port_device::write_txd));
m_acia->irq_handler().set(FUNC(c64_siel_midi_cartridge_device::acia_irq_w));
- MCFG_MIDI_PORT_ADD("mdin", midiin_slot, "midiin")
- MCFG_MIDI_RX_HANDLER(WRITELINE(MC6850_TAG, acia6850_device, write_rxd))
+ MIDI_PORT(config, "mdin", midiin_slot, "midiin").rxd_handler().set(m_acia, FUNC(acia6850_device::write_rxd));
- MCFG_MIDI_PORT_ADD("mdout", midiout_slot, "midiout")
+ MIDI_PORT(config, "mdout", midiout_slot, "midiout");
- MCFG_DEVICE_ADD("acia_clock", CLOCK, 31250*16)
- MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(*this, c64_siel_midi_cartridge_device, write_acia_clock))
-MACHINE_CONFIG_END
+ clock_device &acia_clock(CLOCK(config, "acia_clock", 31250*16));
+ acia_clock.signal_handler().set(FUNC(c64_siel_midi_cartridge_device::write_acia_clock));
+}
@@ -100,7 +100,7 @@ void c64_siel_midi_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_siel_midi_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_siel_midi_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
@@ -108,7 +108,7 @@ uint8_t c64_siel_midi_cartridge_device::c64_cd_r(address_space &space, offs_t of
{
case 6:
case 7:
- data = m_acia->read(space, offset & 1);
+ data = m_acia->read(offset & 1);
break;
}
}
@@ -121,7 +121,7 @@ uint8_t c64_siel_midi_cartridge_device::c64_cd_r(address_space &space, offs_t of
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_siel_midi_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_siel_midi_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
@@ -129,7 +129,7 @@ void c64_siel_midi_cartridge_device::c64_cd_w(address_space &space, offs_t offse
{
case 4:
case 5:
- m_acia->write(space, offset & 1, data);
+ m_acia->write(offset & 1, data);
break;
}
}
diff --git a/src/devices/bus/c64/midi_siel.h b/src/devices/bus/c64/midi_siel.h
index 9e84f5e1852..fe38834278e 100644
--- a/src/devices/bus/c64/midi_siel.h
+++ b/src/devices/bus/c64/midi_siel.h
@@ -38,8 +38,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
DECLARE_WRITE_LINE_MEMBER( acia_irq_w );
diff --git a/src/devices/bus/c64/mikro_assembler.cpp b/src/devices/bus/c64/mikro_assembler.cpp
index fe97c9472d7..d6c02be7681 100644
--- a/src/devices/bus/c64/mikro_assembler.cpp
+++ b/src/devices/bus/c64/mikro_assembler.cpp
@@ -47,7 +47,7 @@ void c64_mikro_assembler_cartridge_device::device_start()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_mikro_assembler_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_mikro_assembler_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 || !romh || !io1 || !io2)
{
diff --git a/src/devices/bus/c64/mikro_assembler.h b/src/devices/bus/c64/mikro_assembler.h
index edeb220fd43..754a91385d4 100644
--- a/src/devices/bus/c64/mikro_assembler.h
+++ b/src/devices/bus/c64/mikro_assembler.h
@@ -34,7 +34,7 @@ protected:
virtual void device_start() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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/multiscreen.cpp b/src/devices/bus/c64/multiscreen.cpp
index e243a335e50..890c1a35799 100644
--- a/src/devices/bus/c64/multiscreen.cpp
+++ b/src/devices/bus/c64/multiscreen.cpp
@@ -112,13 +112,14 @@ void c64_multiscreen_cartridge_device::multiscreen_mem(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c64_multiscreen_cartridge_device::device_add_mconfig)
- MCFG_DEVICE_ADD(MC6802P_TAG, M6802, XTAL(4'000'000))
- MCFG_DEVICE_PROGRAM_MAP(multiscreen_mem)
+void c64_multiscreen_cartridge_device::device_add_mconfig(machine_config &config)
+{
+ m6802_cpu_device &cpu(M6802(config, MC6802P_TAG, XTAL(4'000'000)));
+ cpu.set_addrmap(AS_PROGRAM, &c64_multiscreen_cartridge_device::multiscreen_mem);
- MCFG_DEVICE_ADD(MC6821P_0_TAG, PIA6821, 0)
- MCFG_DEVICE_ADD(MC6821P_1_TAG, PIA6821, 0)
-MACHINE_CONFIG_END
+ PIA6821(config, MC6821P_0_TAG, 0);
+ PIA6821(config, MC6821P_1_TAG, 0);
+}
//**************************************************************************
@@ -161,7 +162,7 @@ void c64_multiscreen_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_multiscreen_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_multiscreen_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)
{
@@ -198,7 +199,7 @@ uint8_t c64_multiscreen_cartridge_device::c64_cd_r(address_space &space, offs_t
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_multiscreen_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_multiscreen_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (offset >= 0x8000 && offset < 0xa000)
{
diff --git a/src/devices/bus/c64/multiscreen.h b/src/devices/bus/c64/multiscreen.h
index 9d26edb723a..619154d18c5 100644
--- a/src/devices/bus/c64/multiscreen.h
+++ b/src/devices/bus/c64/multiscreen.h
@@ -41,8 +41,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
uint8_t m_bank;
diff --git a/src/devices/bus/c64/music64.cpp b/src/devices/bus/c64/music64.cpp
index 7042774ec5d..9e31a26c62b 100644
--- a/src/devices/bus/c64/music64.cpp
+++ b/src/devices/bus/c64/music64.cpp
@@ -172,9 +172,9 @@ void c64_music64_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_music64_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_music64_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
- data = m_exp->cd_r(space, offset, data, sphi2, ba, roml, romh, io1, io2);
+ data = m_exp->cd_r(offset, data, sphi2, ba, roml, romh, io1, io2);
if (!io2)
{
@@ -194,9 +194,9 @@ uint8_t c64_music64_cartridge_device::c64_cd_r(address_space &space, offs_t offs
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_music64_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_music64_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
- m_exp->cd_w(space, offset, data, sphi2, ba, roml, romh, io1, io2);
+ m_exp->cd_w(offset, data, sphi2, ba, roml, romh, io1, io2);
}
diff --git a/src/devices/bus/c64/music64.h b/src/devices/bus/c64/music64.h
index c9ae5414ac9..cf494c481b8 100644
--- a/src/devices/bus/c64/music64.h
+++ b/src/devices/bus/c64/music64.h
@@ -38,8 +38,8 @@ protected:
virtual ioport_constructor device_input_ports() const override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
virtual int c64_game_r(offs_t offset, int sphi2, int ba, int rw) override;
virtual int c64_exrom_r(offs_t offset, int sphi2, int ba, int rw) override;
diff --git a/src/devices/bus/c64/neoram.cpp b/src/devices/bus/c64/neoram.cpp
index a2576cebeeb..4cb34cbbb57 100644
--- a/src/devices/bus/c64/neoram.cpp
+++ b/src/devices/bus/c64/neoram.cpp
@@ -64,7 +64,7 @@ void c64_neoram_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_neoram_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_neoram_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
@@ -80,7 +80,7 @@ uint8_t c64_neoram_cartridge_device::c64_cd_r(address_space &space, offs_t offse
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_neoram_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_neoram_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/neoram.h b/src/devices/bus/c64/neoram.h
index e75a76cd088..d5058b878b7 100644
--- a/src/devices/bus/c64/neoram.h
+++ b/src/devices/bus/c64/neoram.h
@@ -41,8 +41,8 @@ protected:
virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram, m_nvram.bytes()); } }
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
uint16_t m_bank;
diff --git a/src/devices/bus/c64/ocean.cpp b/src/devices/bus/c64/ocean.cpp
index 6f4fecda52f..92b18de6a51 100644
--- a/src/devices/bus/c64/ocean.cpp
+++ b/src/devices/bus/c64/ocean.cpp
@@ -82,7 +82,7 @@ void c64_ocean_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_ocean_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+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())
{
@@ -107,7 +107,7 @@ uint8_t c64_ocean_cartridge_device::c64_cd_r(address_space &space, offs_t offset
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_ocean_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_ocean_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/ocean.h b/src/devices/bus/c64/ocean.h
index 1af2101b3fa..9a78f5e21f9 100644
--- a/src/devices/bus/c64/ocean.h
+++ b/src/devices/bus/c64/ocean.h
@@ -35,8 +35,8 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
uint8_t m_bank;
diff --git a/src/devices/bus/c64/pagefox.cpp b/src/devices/bus/c64/pagefox.cpp
index 975f64d5408..80264aab13b 100644
--- a/src/devices/bus/c64/pagefox.cpp
+++ b/src/devices/bus/c64/pagefox.cpp
@@ -85,7 +85,7 @@ void c64_pagefox_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_pagefox_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_pagefox_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 || !romh)
{
@@ -110,7 +110,7 @@ uint8_t c64_pagefox_cartridge_device::c64_cd_r(address_space &space, offs_t offs
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_pagefox_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_pagefox_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (offset >= 0x8000 && offset < 0xc000)
{
diff --git a/src/devices/bus/c64/pagefox.h b/src/devices/bus/c64/pagefox.h
index 25eedac9eb0..74ed5a4edf0 100644
--- a/src/devices/bus/c64/pagefox.h
+++ b/src/devices/bus/c64/pagefox.h
@@ -35,8 +35,8 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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;
diff --git a/src/devices/bus/c64/partner.cpp b/src/devices/bus/c64/partner.cpp
index 9f198bc1220..55e4d07f3e1 100644
--- a/src/devices/bus/c64/partner.cpp
+++ b/src/devices/bus/c64/partner.cpp
@@ -120,7 +120,7 @@ void c64_partner_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_partner_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_partner_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
@@ -154,7 +154,7 @@ uint8_t c64_partner_cartridge_device::c64_cd_r(address_space &space, offs_t offs
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_partner_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_partner_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/partner.h b/src/devices/bus/c64/partner.h
index cfd82208a8b..6ecf4503a91 100644
--- a/src/devices/bus/c64/partner.h
+++ b/src/devices/bus/c64/partner.h
@@ -39,8 +39,8 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
virtual int c64_game_r(offs_t offset, int sphi2, int ba, int rw) override;
private:
diff --git a/src/devices/bus/c64/prophet64.cpp b/src/devices/bus/c64/prophet64.cpp
index 3b84ea81a5d..ea5e16a3000 100644
--- a/src/devices/bus/c64/prophet64.cpp
+++ b/src/devices/bus/c64/prophet64.cpp
@@ -61,7 +61,7 @@ void c64_prophet64_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_prophet64_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_prophet64_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)
{
@@ -77,7 +77,7 @@ uint8_t c64_prophet64_cartridge_device::c64_cd_r(address_space &space, offs_t of
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_prophet64_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_prophet64_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io2)
{
diff --git a/src/devices/bus/c64/prophet64.h b/src/devices/bus/c64/prophet64.h
index af7b1c32544..f58ba30b7b7 100644
--- a/src/devices/bus/c64/prophet64.h
+++ b/src/devices/bus/c64/prophet64.h
@@ -34,8 +34,8 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
uint8_t m_bank;
diff --git a/src/devices/bus/c64/ps64.cpp b/src/devices/bus/c64/ps64.cpp
index b70c8a61c0f..c14008b2c08 100644
--- a/src/devices/bus/c64/ps64.cpp
+++ b/src/devices/bus/c64/ps64.cpp
@@ -61,25 +61,14 @@ DEFINE_DEVICE_TYPE(C64_PS64, c64_ps64_cartridge_device, "c64_ps64", "C64 PS-64")
//-------------------------------------------------
-// votrax_sc02_interface votrax_intf
-//-------------------------------------------------
-/*
-static struct votrax_sc02_interface votrax_intf =
-{
- DEVCB_NOOP
-};
-*/
-
-
-//-------------------------------------------------
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c64_ps64_cartridge_device::device_add_mconfig)
- //MCFG_SPEAKER_STANDARD_MONO("mono")
- //MCFG_VOTRAX_SC02_ADD(SSI263_TAG, 2000000, votrax_intf)
- //MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
-MACHINE_CONFIG_END
+void c64_ps64_cartridge_device::device_add_mconfig(machine_config &config)
+{
+ //SPEAKER(config, "speaker").front_center();
+ //VOTRAX_SC02(config, SSI263_TAG, 2000000).add_route(ALL_OUTPUTS, "mono", 1.00);
+}
@@ -120,7 +109,7 @@ void c64_ps64_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_ps64_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_ps64_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)
{
@@ -139,7 +128,7 @@ uint8_t c64_ps64_cartridge_device::c64_cd_r(address_space &space, offs_t offset,
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_ps64_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_ps64_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/ps64.h b/src/devices/bus/c64/ps64.h
index 4d75432d51a..69a9c5b0110 100644
--- a/src/devices/bus/c64/ps64.h
+++ b/src/devices/bus/c64/ps64.h
@@ -39,8 +39,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ virtual void c64_cd_w(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/reu.cpp b/src/devices/bus/c64/reu.cpp
index b7ab238e47e..332ac53f8a8 100644
--- a/src/devices/bus/c64/reu.cpp
+++ b/src/devices/bus/c64/reu.cpp
@@ -31,12 +31,12 @@ DEFINE_DEVICE_TYPE(C64_REU1764, c64_reu1764_cartridge_device, "c64_1764reu", "17
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c64_reu_cartridge_device::device_add_mconfig)
- MCFG_MOS8726_ADD(MOS8726R1_TAG)
+void c64_reu_cartridge_device::device_add_mconfig(machine_config &config)
+{
+ MOS8726(config, m_dmac, 1000000); // dummy clock
- MCFG_GENERIC_SOCKET_ADD("rom", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("bin,rom")
-MACHINE_CONFIG_END
+ GENERIC_SOCKET(config, m_eprom, generic_linear_slot, nullptr, "bin,rom");
+}
@@ -99,15 +99,15 @@ void c64_reu_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_reu_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_reu_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!m_dmac->romsel_r(roml, romh))
{
- data = m_eprom->read_rom(space, offset & 0x7fff);
+ data = m_eprom->read_rom(offset & 0x7fff);
}
else if (!io2)
{
- data = m_dmac->read(space, offset);
+ data = m_dmac->read(offset);
}
return data;
@@ -118,10 +118,10 @@ uint8_t c64_reu_cartridge_device::c64_cd_r(address_space &space, offs_t offset,
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_reu_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_reu_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io2)
{
- m_dmac->write(space, offset, data);
+ m_dmac->write(offset, data);
}
}
diff --git a/src/devices/bus/c64/reu.h b/src/devices/bus/c64/reu.h
index dd8b9e32d5f..0cbb67d9576 100644
--- a/src/devices/bus/c64/reu.h
+++ b/src/devices/bus/c64/reu.h
@@ -47,8 +47,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
required_device<mos8726_device> m_dmac;
required_device<generic_slot_device> m_eprom;
diff --git a/src/devices/bus/c64/rex.cpp b/src/devices/bus/c64/rex.cpp
index 73bcdaf453a..97fecd740af 100644
--- a/src/devices/bus/c64/rex.cpp
+++ b/src/devices/bus/c64/rex.cpp
@@ -57,7 +57,7 @@ void c64_rex_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_rex_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_rex_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)
{
diff --git a/src/devices/bus/c64/rex.h b/src/devices/bus/c64/rex.h
index 42d565971ed..cc0cccb52da 100644
--- a/src/devices/bus/c64/rex.h
+++ b/src/devices/bus/c64/rex.h
@@ -35,7 +35,7 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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/rex_ep256.cpp b/src/devices/bus/c64/rex_ep256.cpp
index 67f1ce015b9..da1f7b601b7 100644
--- a/src/devices/bus/c64/rex_ep256.cpp
+++ b/src/devices/bus/c64/rex_ep256.cpp
@@ -22,24 +22,17 @@ DEFINE_DEVICE_TYPE(C64_REX_EP256, c64_rex_ep256_cartridge_device, "rexexp256", "
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c64_rex_ep256_cartridge_device::device_add_mconfig)
- MCFG_GENERIC_SOCKET_ADD("rom1", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_SOCKET_ADD("rom2", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_SOCKET_ADD("rom3", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_SOCKET_ADD("rom4", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_SOCKET_ADD("rom5", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_SOCKET_ADD("rom6", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_SOCKET_ADD("rom7", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_SOCKET_ADD("rom8", generic_linear_slot, nullptr)
- MCFG_GENERIC_EXTENSIONS("bin,rom")
-MACHINE_CONFIG_END
+void c64_rex_ep256_cartridge_device::device_add_mconfig(machine_config &config)
+{
+ GENERIC_SOCKET(config, "rom1", generic_linear_slot, nullptr, "bin,rom");
+ GENERIC_SOCKET(config, "rom2", generic_linear_slot, nullptr, "bin,rom");
+ GENERIC_SOCKET(config, "rom3", generic_linear_slot, nullptr, "bin,rom");
+ GENERIC_SOCKET(config, "rom4", generic_linear_slot, nullptr, "bin,rom");
+ GENERIC_SOCKET(config, "rom5", generic_linear_slot, nullptr, "bin,rom");
+ GENERIC_SOCKET(config, "rom6", generic_linear_slot, nullptr, "bin,rom");
+ GENERIC_SOCKET(config, "rom7", generic_linear_slot, nullptr, "bin,rom");
+ GENERIC_SOCKET(config, "rom8", generic_linear_slot, nullptr, "bin,rom");
+}
@@ -94,7 +87,7 @@ void c64_rex_ep256_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_rex_ep256_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_rex_ep256_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)
{
@@ -105,7 +98,7 @@ uint8_t c64_rex_ep256_cartridge_device::c64_cd_r(address_space &space, offs_t of
else
{
offs_t addr = (m_bank << 13) | (offset & 0x1fff);
- data = m_eproms[m_socket]->read_rom(space, addr);
+ data = m_eproms[m_socket]->read_rom(addr);
}
}
else if (!io2)
@@ -128,7 +121,7 @@ uint8_t c64_rex_ep256_cartridge_device::c64_cd_r(address_space &space, offs_t of
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_rex_ep256_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_rex_ep256_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io2 && ((offset & 0xf0) == 0xa0))
{
diff --git a/src/devices/bus/c64/rex_ep256.h b/src/devices/bus/c64/rex_ep256.h
index 536929d8cdb..06f4a4325d5 100644
--- a/src/devices/bus/c64/rex_ep256.h
+++ b/src/devices/bus/c64/rex_ep256.h
@@ -40,8 +40,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
generic_slot_device *m_eproms[8];
diff --git a/src/devices/bus/c64/ross.cpp b/src/devices/bus/c64/ross.cpp
index 827f98f9401..25c1a996df8 100644
--- a/src/devices/bus/c64/ross.cpp
+++ b/src/devices/bus/c64/ross.cpp
@@ -62,7 +62,7 @@ void c64_ross_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_ross_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_ross_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 || !romh)
{
@@ -79,7 +79,7 @@ uint8_t c64_ross_cartridge_device::c64_cd_r(address_space &space, offs_t offset,
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_ross_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_ross_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/ross.h b/src/devices/bus/c64/ross.h
index c36e616948d..97f2698fb6c 100644
--- a/src/devices/bus/c64/ross.h
+++ b/src/devices/bus/c64/ross.h
@@ -35,8 +35,8 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
uint8_t m_bank;
diff --git a/src/devices/bus/c64/sfx_sound_expander.cpp b/src/devices/bus/c64/sfx_sound_expander.cpp
index bf55a2994df..71229014c46 100644
--- a/src/devices/bus/c64/sfx_sound_expander.cpp
+++ b/src/devices/bus/c64/sfx_sound_expander.cpp
@@ -206,9 +206,9 @@ void c64_sfx_sound_expander_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_sfx_sound_expander_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_sfx_sound_expander_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
- data = m_exp->cd_r(space, get_offset(offset, 1), data, sphi2, ba, roml, romh, io1, io2);
+ data = m_exp->cd_r(get_offset(offset, 1), data, sphi2, ba, roml, romh, io1, io2);
if (!io2 && sphi2)
{
@@ -219,7 +219,7 @@ uint8_t c64_sfx_sound_expander_cartridge_device::c64_cd_r(address_space &space,
if (BIT(offset, 5))
{
- data = m_opl->read(space, BIT(offset, 4));
+ data = m_opl->read(BIT(offset, 4));
}
}
@@ -231,14 +231,14 @@ uint8_t c64_sfx_sound_expander_cartridge_device::c64_cd_r(address_space &space,
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_sfx_sound_expander_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_sfx_sound_expander_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io2 && sphi2)
{
- m_opl->write(space, BIT(offset, 4), data);
+ m_opl->write(BIT(offset, 4), data);
}
- m_exp->cd_w(space, get_offset(offset, 0), data, sphi2, ba, roml, romh, io1, io2);
+ m_exp->cd_w(get_offset(offset, 0), data, sphi2, ba, roml, romh, io1, io2);
}
diff --git a/src/devices/bus/c64/sfx_sound_expander.h b/src/devices/bus/c64/sfx_sound_expander.h
index eb402bf1e54..9380e055c18 100644
--- a/src/devices/bus/c64/sfx_sound_expander.h
+++ b/src/devices/bus/c64/sfx_sound_expander.h
@@ -39,8 +39,8 @@ protected:
virtual ioport_constructor device_input_ports() const override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
virtual int c64_game_r(offs_t offset, int sphi2, int ba, int rw) override;
virtual int c64_exrom_r(offs_t offset, int sphi2, int ba, int rw) override;
diff --git a/src/devices/bus/c64/silverrock.cpp b/src/devices/bus/c64/silverrock.cpp
index a34f21d17a7..f52efc569b6 100644
--- a/src/devices/bus/c64/silverrock.cpp
+++ b/src/devices/bus/c64/silverrock.cpp
@@ -92,7 +92,7 @@ void c64_silverrock_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_silverrock_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_silverrock_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)
{
@@ -109,7 +109,7 @@ uint8_t c64_silverrock_cartridge_device::c64_cd_r(address_space &space, offs_t o
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_silverrock_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_silverrock_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/silverrock.h b/src/devices/bus/c64/silverrock.h
index 4bd33a4db71..3d9c4e015f2 100644
--- a/src/devices/bus/c64/silverrock.h
+++ b/src/devices/bus/c64/silverrock.h
@@ -35,8 +35,8 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
uint8_t m_bank;
diff --git a/src/devices/bus/c64/simons_basic.cpp b/src/devices/bus/c64/simons_basic.cpp
index 043d43531c0..246e67b8b56 100644
--- a/src/devices/bus/c64/simons_basic.cpp
+++ b/src/devices/bus/c64/simons_basic.cpp
@@ -57,7 +57,7 @@ void c64_simons_basic_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_simons_basic_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_simons_basic_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)
{
@@ -76,7 +76,7 @@ uint8_t c64_simons_basic_cartridge_device::c64_cd_r(address_space &space, offs_t
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_simons_basic_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_simons_basic_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/simons_basic.h b/src/devices/bus/c64/simons_basic.h
index 9f9cd5a1636..63d2dfb5cb9 100644
--- a/src/devices/bus/c64/simons_basic.h
+++ b/src/devices/bus/c64/simons_basic.h
@@ -35,8 +35,8 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ virtual void c64_cd_w(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/speakeasy.cpp b/src/devices/bus/c64/speakeasy.cpp
index 09427458fe7..23caee3488f 100644
--- a/src/devices/bus/c64/speakeasy.cpp
+++ b/src/devices/bus/c64/speakeasy.cpp
@@ -31,12 +31,12 @@ DEFINE_DEVICE_TYPE(C64_SPEAKEASY, c64_speakeasy_cartridge_device, "c64_speakeasy
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c64_speakeasy_cartridge_device::device_add_mconfig)
+void c64_speakeasy_cartridge_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD(SC01A_TAG, VOTRAX_SC01, 720000)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.85)
-MACHINE_CONFIG_END
+ VOTRAX_SC01(config, m_votrax, 720000).add_route(ALL_OUTPUTS, "mono", 0.85);
+}
@@ -69,7 +69,7 @@ void c64_speakeasy_cartridge_device::device_start()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_speakeasy_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_speakeasy_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
@@ -84,11 +84,11 @@ uint8_t c64_speakeasy_cartridge_device::c64_cd_r(address_space &space, offs_t of
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_speakeasy_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_speakeasy_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
- m_votrax->write(space, 0, data & 0x3f);
- m_votrax->inflection_w(space, 0, data >> 6);
+ m_votrax->write(data & 0x3f);
+ m_votrax->inflection_w(data >> 6);
}
}
diff --git a/src/devices/bus/c64/speakeasy.h b/src/devices/bus/c64/speakeasy.h
index 8c8ecdc9403..0816e4caa2e 100644
--- a/src/devices/bus/c64/speakeasy.h
+++ b/src/devices/bus/c64/speakeasy.h
@@ -36,8 +36,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
required_device<votrax_sc01_device> m_votrax;
diff --git a/src/devices/bus/c64/stardos.cpp b/src/devices/bus/c64/stardos.cpp
index c8e47d300e8..601ada2778c 100644
--- a/src/devices/bus/c64/stardos.cpp
+++ b/src/devices/bus/c64/stardos.cpp
@@ -138,7 +138,7 @@ void c64_stardos_cartridge_device::device_start()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_stardos_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_stardos_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 || !romh)
{
@@ -162,7 +162,7 @@ uint8_t c64_stardos_cartridge_device::c64_cd_r(address_space &space, offs_t offs
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_stardos_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_stardos_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/stardos.h b/src/devices/bus/c64/stardos.h
index d9c8699a991..9be9f599957 100644
--- a/src/devices/bus/c64/stardos.h
+++ b/src/devices/bus/c64/stardos.h
@@ -38,8 +38,8 @@ protected:
virtual void device_start() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
virtual int c64_game_r(offs_t offset, int sphi2, int ba, int rw) override;
virtual int c64_exrom_r(offs_t offset, int sphi2, int ba, int rw) override;
diff --git a/src/devices/bus/c64/std.cpp b/src/devices/bus/c64/std.cpp
index fac9d021696..08f4c1d65e0 100644
--- a/src/devices/bus/c64/std.cpp
+++ b/src/devices/bus/c64/std.cpp
@@ -47,7 +47,7 @@ void c64_standard_cartridge_device::device_start()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_standard_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+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())
{
diff --git a/src/devices/bus/c64/std.h b/src/devices/bus/c64/std.h
index 8a2599fe7bd..391e9ac973f 100644
--- a/src/devices/bus/c64/std.h
+++ b/src/devices/bus/c64/std.h
@@ -34,7 +34,7 @@ protected:
virtual void device_start() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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/structured_basic.cpp b/src/devices/bus/c64/structured_basic.cpp
index 2f968643b7d..e7773c772c0 100644
--- a/src/devices/bus/c64/structured_basic.cpp
+++ b/src/devices/bus/c64/structured_basic.cpp
@@ -62,7 +62,7 @@ void c64_structured_basic_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_structured_basic_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_structured_basic_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)
{
@@ -79,7 +79,7 @@ uint8_t c64_structured_basic_cartridge_device::c64_cd_r(address_space &space, of
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_structured_basic_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_structured_basic_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/structured_basic.h b/src/devices/bus/c64/structured_basic.h
index 7b36402dcf5..44d370cdb3f 100644
--- a/src/devices/bus/c64/structured_basic.h
+++ b/src/devices/bus/c64/structured_basic.h
@@ -35,8 +35,8 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
uint8_t m_bank;
diff --git a/src/devices/bus/c64/super_explode.cpp b/src/devices/bus/c64/super_explode.cpp
index 88e7a9b48ab..4ed2456bd2a 100644
--- a/src/devices/bus/c64/super_explode.cpp
+++ b/src/devices/bus/c64/super_explode.cpp
@@ -85,7 +85,7 @@ void c64_super_explode_cartridge_device::device_timer(emu_timer &timer, device_t
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_super_explode_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_super_explode_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)
{
@@ -112,7 +112,7 @@ uint8_t c64_super_explode_cartridge_device::c64_cd_r(address_space &space, offs_
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_super_explode_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_super_explode_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/super_explode.h b/src/devices/bus/c64/super_explode.h
index 74edade0e6e..ca3abdeebf5 100644
--- a/src/devices/bus/c64/super_explode.h
+++ b/src/devices/bus/c64/super_explode.h
@@ -36,8 +36,8 @@ protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
uint8_t m_bank;
diff --git a/src/devices/bus/c64/super_games.cpp b/src/devices/bus/c64/super_games.cpp
index 7a58d29cd57..610861c360e 100644
--- a/src/devices/bus/c64/super_games.cpp
+++ b/src/devices/bus/c64/super_games.cpp
@@ -60,7 +60,7 @@ void c64_super_games_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_super_games_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_super_games_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 || !romh)
{
@@ -76,7 +76,7 @@ uint8_t c64_super_games_cartridge_device::c64_cd_r(address_space &space, offs_t
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_super_games_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_super_games_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io2)
{
diff --git a/src/devices/bus/c64/super_games.h b/src/devices/bus/c64/super_games.h
index 64a50f9e240..11e4b44046a 100644
--- a/src/devices/bus/c64/super_games.h
+++ b/src/devices/bus/c64/super_games.h
@@ -35,8 +35,8 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
uint8_t m_bank;
diff --git a/src/devices/bus/c64/supercpu.cpp b/src/devices/bus/c64/supercpu.cpp
index a517eecb016..4e48d77c35c 100644
--- a/src/devices/bus/c64/supercpu.cpp
+++ b/src/devices/bus/c64/supercpu.cpp
@@ -144,9 +144,9 @@ void c64_supercpu_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_supercpu_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_supercpu_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
- data = m_exp->cd_r(space, offset, data, sphi2, ba, roml, romh, io1, io2);
+ data = m_exp->cd_r(offset, data, sphi2, ba, roml, romh, io1, io2);
switch (offset)
{
@@ -198,7 +198,7 @@ uint8_t c64_supercpu_device::c64_cd_r(address_space &space, offs_t offset, uint8
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_supercpu_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_supercpu_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
switch (offset)
{
@@ -275,7 +275,7 @@ void c64_supercpu_device::c64_cd_w(address_space &space, offs_t offset, uint8_t
break;
}
- m_exp->cd_w(space, offset, data, sphi2, ba, roml, romh, io1, io2);
+ m_exp->cd_w(offset, data, sphi2, ba, roml, romh, io1, io2);
}
diff --git a/src/devices/bus/c64/supercpu.h b/src/devices/bus/c64/supercpu.h
index 006449400c1..73982328c31 100644
--- a/src/devices/bus/c64/supercpu.h
+++ b/src/devices/bus/c64/supercpu.h
@@ -40,8 +40,8 @@ protected:
virtual ioport_constructor device_input_ports() const override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
virtual int c64_game_r(offs_t offset, int sphi2, int ba, int rw) override;
virtual int c64_exrom_r(offs_t offset, int sphi2, int ba, int rw) override;
diff --git a/src/devices/bus/c64/sw8k.cpp b/src/devices/bus/c64/sw8k.cpp
index ff0e3310101..2f55b223797 100644
--- a/src/devices/bus/c64/sw8k.cpp
+++ b/src/devices/bus/c64/sw8k.cpp
@@ -103,7 +103,7 @@ void c64_switchable_8k_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_switchable_8k_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_switchable_8k_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)
{
diff --git a/src/devices/bus/c64/sw8k.h b/src/devices/bus/c64/sw8k.h
index 94bcb17b5a3..186e96792d6 100644
--- a/src/devices/bus/c64/sw8k.h
+++ b/src/devices/bus/c64/sw8k.h
@@ -38,7 +38,7 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
private:
required_ioport m_sw;
diff --git a/src/devices/bus/c64/swiftlink.cpp b/src/devices/bus/c64/swiftlink.cpp
index 3f807fb13dc..3855da85ca3 100644
--- a/src/devices/bus/c64/swiftlink.cpp
+++ b/src/devices/bus/c64/swiftlink.cpp
@@ -126,12 +126,12 @@ void c64_swiftlink_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_swiftlink_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_swiftlink_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (((m_cs == DE00) && !io1) || ((m_cs == DF00) && !io2) ||
((m_cs == D700) && ((offset & 0xff00) == 0xd700)))
{
- data = m_acia->read(space, offset & 0x03);
+ data = m_acia->read(offset & 0x03);
}
return data;
@@ -142,12 +142,12 @@ uint8_t c64_swiftlink_cartridge_device::c64_cd_r(address_space &space, offs_t of
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_swiftlink_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_swiftlink_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (((m_cs == DE00) && !io1) || ((m_cs == DF00) && !io2) ||
((m_cs == D700) && ((offset & 0xff00) == 0xd700)))
{
- m_acia->write(space, offset & 0x03, data);
+ m_acia->write(offset & 0x03, data);
}
}
diff --git a/src/devices/bus/c64/swiftlink.h b/src/devices/bus/c64/swiftlink.h
index 0c1f577bafe..409cfafa33a 100644
--- a/src/devices/bus/c64/swiftlink.h
+++ b/src/devices/bus/c64/swiftlink.h
@@ -41,8 +41,8 @@ protected:
virtual ioport_constructor device_input_ports() const override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
DECLARE_WRITE_LINE_MEMBER( acia_irq_w );
diff --git a/src/devices/bus/c64/system3.cpp b/src/devices/bus/c64/system3.cpp
index 7a1fd54ab3e..f02ef692b3b 100644
--- a/src/devices/bus/c64/system3.cpp
+++ b/src/devices/bus/c64/system3.cpp
@@ -60,7 +60,7 @@ void c64_system3_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_system3_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_system3_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)
{
@@ -82,7 +82,7 @@ uint8_t c64_system3_cartridge_device::c64_cd_r(address_space &space, offs_t offs
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_system3_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_system3_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/system3.h b/src/devices/bus/c64/system3.h
index ff5ed78b53d..024798fc77e 100644
--- a/src/devices/bus/c64/system3.h
+++ b/src/devices/bus/c64/system3.h
@@ -35,8 +35,8 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
uint8_t m_bank;
diff --git a/src/devices/bus/c64/tdos.cpp b/src/devices/bus/c64/tdos.cpp
index a814ccc26a8..b52b61f57a4 100644
--- a/src/devices/bus/c64/tdos.cpp
+++ b/src/devices/bus/c64/tdos.cpp
@@ -230,9 +230,9 @@ void c64_tdos_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_tdos_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_tdos_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
- data = m_exp->cd_r(space, offset, data, sphi2, ba, roml, romh, io1, io2);
+ data = m_exp->cd_r(offset, data, sphi2, ba, roml, romh, io1, io2);
if (m_enabled && !roml)
{
@@ -244,7 +244,7 @@ uint8_t c64_tdos_cartridge_device::c64_cd_r(address_space &space, offs_t offset,
switch ((offset >> 1) & 0x7f)
{
case 0:
- data = m_ssda->read(space, offset & 0x01);
+ data = m_ssda->read(offset & 0x01);
break;
case 1:
@@ -277,16 +277,16 @@ uint8_t c64_tdos_cartridge_device::c64_cd_r(address_space &space, offs_t offset,
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_tdos_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_tdos_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
- m_exp->cd_w(space, offset, data, sphi2, ba, roml, romh, io1, io2);
+ m_exp->cd_w(offset, data, sphi2, ba, roml, romh, io1, io2);
if (m_enabled && !io2 && sphi2)
{
switch ((offset >> 1) & 0x7f)
{
case 0:
- m_ssda->write(space, offset & 0x01, data);
+ m_ssda->write(offset & 0x01, data);
break;
case 1:
diff --git a/src/devices/bus/c64/tdos.h b/src/devices/bus/c64/tdos.h
index adf2bf874b5..49c1b07651c 100644
--- a/src/devices/bus/c64/tdos.h
+++ b/src/devices/bus/c64/tdos.h
@@ -39,8 +39,8 @@ protected:
virtual ioport_constructor device_input_ports() const override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
virtual int c64_game_r(offs_t offset, int sphi2, int ba, int rw) override;
virtual int c64_exrom_r(offs_t offset, int sphi2, int ba, int rw) override;
diff --git a/src/devices/bus/c64/turbo232.cpp b/src/devices/bus/c64/turbo232.cpp
index 4c6e5f1ebdb..f9113bed1c5 100644
--- a/src/devices/bus/c64/turbo232.cpp
+++ b/src/devices/bus/c64/turbo232.cpp
@@ -128,7 +128,7 @@ void c64_turbo232_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_turbo232_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_turbo232_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (((m_cs == DE00) && !io1) || ((m_cs == DF00) && !io2) ||
((m_cs == D700) && ((offset & 0xff00) == 0xd700)))
@@ -138,7 +138,7 @@ uint8_t c64_turbo232_cartridge_device::c64_cd_r(address_space &space, offs_t off
switch (offset & 0x07)
{
case 0: case 1: case 2: case 3:
- data = m_acia->read(space, offset & 0x03);
+ data = m_acia->read(offset & 0x03);
break;
case 7:
@@ -155,7 +155,7 @@ uint8_t c64_turbo232_cartridge_device::c64_cd_r(address_space &space, offs_t off
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_turbo232_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_turbo232_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (((m_cs == DE00) && !io1) || ((m_cs == DF00) && !io2) ||
((m_cs == D700) && ((offset & 0xff00) == 0xd700)))
@@ -165,11 +165,11 @@ void c64_turbo232_cartridge_device::c64_cd_w(address_space &space, offs_t offset
switch (offset & 0x07)
{
case 0: case 1: case 2:
- m_acia->write(space, offset & 0x03, data);
+ m_acia->write(offset & 0x03, data);
break;
case 3:
- m_acia->write(space, offset & 0x03, data);
+ m_acia->write(offset & 0x03, data);
if (data & 0x0f)
m_es &= ~ES_M;
diff --git a/src/devices/bus/c64/turbo232.h b/src/devices/bus/c64/turbo232.h
index 177e044307d..4f5638f88fa 100644
--- a/src/devices/bus/c64/turbo232.h
+++ b/src/devices/bus/c64/turbo232.h
@@ -41,8 +41,8 @@ protected:
virtual ioport_constructor device_input_ports() const override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ 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:
DECLARE_WRITE_LINE_MEMBER( acia_irq_w );
diff --git a/src/devices/bus/c64/vizastar.cpp b/src/devices/bus/c64/vizastar.cpp
index 444ff656b68..443c232bde7 100644
--- a/src/devices/bus/c64/vizastar.cpp
+++ b/src/devices/bus/c64/vizastar.cpp
@@ -79,7 +79,7 @@ void c64_vizastar_cartridge_device::device_start()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_vizastar_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_vizastar_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)
{
diff --git a/src/devices/bus/c64/vizastar.h b/src/devices/bus/c64/vizastar.h
index 95453eb6e38..26ec63cd46b 100644
--- a/src/devices/bus/c64/vizastar.h
+++ b/src/devices/bus/c64/vizastar.h
@@ -34,7 +34,7 @@ protected:
virtual void device_start() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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/vw64.cpp b/src/devices/bus/c64/vw64.cpp
index ea0d3c3dac2..bf4d584d40d 100644
--- a/src/devices/bus/c64/vw64.cpp
+++ b/src/devices/bus/c64/vw64.cpp
@@ -111,7 +111,7 @@ void c64_vizawrite_cartridge_device::device_timer(emu_timer &timer, device_timer
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_vizawrite_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_vizawrite_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)
{
diff --git a/src/devices/bus/c64/vw64.h b/src/devices/bus/c64/vw64.h
index abff81acb4b..64287c0c785 100644
--- a/src/devices/bus/c64/vw64.h
+++ b/src/devices/bus/c64/vw64.h
@@ -36,7 +36,7 @@ protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
virtual int c64_exrom_r(offs_t offset, int sphi2, int ba, int rw) override { return 0; }
private:
diff --git a/src/devices/bus/c64/warp_speed.cpp b/src/devices/bus/c64/warp_speed.cpp
index 3c266e3618d..ff485c05277 100644
--- a/src/devices/bus/c64/warp_speed.cpp
+++ b/src/devices/bus/c64/warp_speed.cpp
@@ -117,7 +117,7 @@ void c64_warp_speed_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_warp_speed_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_warp_speed_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 || !romh || !io1 || !io2)
{
@@ -133,7 +133,7 @@ uint8_t c64_warp_speed_cartridge_device::c64_cd_r(address_space &space, offs_t o
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_warp_speed_cartridge_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_warp_speed_cartridge_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
diff --git a/src/devices/bus/c64/warp_speed.h b/src/devices/bus/c64/warp_speed.h
index 7a3b25cecfc..d5c61f50f49 100644
--- a/src/devices/bus/c64/warp_speed.h
+++ b/src/devices/bus/c64/warp_speed.h
@@ -38,8 +38,8 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ virtual void c64_cd_w(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/westermann.cpp b/src/devices/bus/c64/westermann.cpp
index 8cb86b39a1c..ac254733f01 100644
--- a/src/devices/bus/c64/westermann.cpp
+++ b/src/devices/bus/c64/westermann.cpp
@@ -57,7 +57,7 @@ void c64_westermann_cartridge_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_westermann_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_westermann_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)
{
diff --git a/src/devices/bus/c64/westermann.h b/src/devices/bus/c64/westermann.h
index b9392c52f72..4b7b2e4389f 100644
--- a/src/devices/bus/c64/westermann.h
+++ b/src/devices/bus/c64/westermann.h
@@ -35,7 +35,7 @@ protected:
virtual void device_reset() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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/xl80.cpp b/src/devices/bus/c64/xl80.cpp
index fbeacd759b3..8e09508e2a3 100644
--- a/src/devices/bus/c64/xl80.cpp
+++ b/src/devices/bus/c64/xl80.cpp
@@ -123,14 +123,15 @@ GFXDECODE_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c64_xl80_device::device_add_mconfig)
- MCFG_SCREEN_ADD_MONOCHROME(MC6845_SCREEN_TAG, RASTER, rgb_t::white())
- MCFG_SCREEN_UPDATE_DEVICE(HD46505SP_TAG, h46505_device, screen_update)
- MCFG_SCREEN_SIZE(80*8, 24*8)
- MCFG_SCREEN_VISIBLE_AREA(0, 80*8-1, 0, 24*8-1)
- MCFG_SCREEN_REFRESH_RATE(50)
-
- MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_c64_xl80)
+void c64_xl80_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, MC6845_SCREEN_TAG, SCREEN_TYPE_RASTER, rgb_t::white()));
+ screen.set_screen_update(HD46505SP_TAG, FUNC(h46505_device::screen_update));
+ screen.set_size(80*8, 24*8);
+ screen.set_visarea(0, 80*8-1, 0, 24*8-1);
+ screen.set_refresh_hz(50);
+
+ GFXDECODE(config, "gfxdecode", m_palette, gfx_c64_xl80);
PALETTE(config, m_palette, palette_device::MONOCHROME);
H46505(config, m_crtc, XTAL(14'318'181) / 8);
@@ -138,7 +139,7 @@ MACHINE_CONFIG_START(c64_xl80_device::device_add_mconfig)
m_crtc->set_show_border_area(true);
m_crtc->set_char_width(8);
m_crtc->set_update_row_callback(FUNC(c64_xl80_device::crtc_update_row), this);
-MACHINE_CONFIG_END
+}
@@ -185,13 +186,13 @@ void c64_xl80_device::device_reset()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_xl80_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_xl80_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io2 && BIT(offset, 2))
{
if (offset & 0x01)
{
- data = m_crtc->register_r(space, 0);
+ data = m_crtc->register_r();
}
}
else if (offset >= 0x8000 && offset < 0x9000)
@@ -211,7 +212,7 @@ uint8_t c64_xl80_device::c64_cd_r(address_space &space, offs_t offset, uint8_t d
// c64_cd_w - cartridge data write
//-------------------------------------------------
-void c64_xl80_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+void c64_xl80_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (offset >= 0x9800 && offset < 0xa000)
{
@@ -221,11 +222,11 @@ void c64_xl80_device::c64_cd_w(address_space &space, offs_t offset, uint8_t data
{
if (offset & 0x01)
{
- m_crtc->register_w(space, 0, data);
+ m_crtc->register_w(data);
}
else
{
- m_crtc->address_w(space, 0, data);
+ m_crtc->address_w(data);
}
}
}
diff --git a/src/devices/bus/c64/xl80.h b/src/devices/bus/c64/xl80.h
index fe406af174b..82ebdee51d0 100644
--- a/src/devices/bus/c64/xl80.h
+++ b/src/devices/bus/c64/xl80.h
@@ -41,8 +41,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
- virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
+ virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
virtual int c64_game_r(offs_t offset, int sphi2, int ba, int rw) override { return 1; }
virtual int c64_exrom_r(offs_t offset, int sphi2, int ba, int rw) override { return 0; }
diff --git a/src/devices/bus/c64/zaxxon.cpp b/src/devices/bus/c64/zaxxon.cpp
index 8de226cfb9d..d63b05da095 100644
--- a/src/devices/bus/c64/zaxxon.cpp
+++ b/src/devices/bus/c64/zaxxon.cpp
@@ -50,7 +50,7 @@ void c64_zaxxon_cartridge_device::device_start()
// c64_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c64_zaxxon_cartridge_device::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+uint8_t c64_zaxxon_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)
{
diff --git a/src/devices/bus/c64/zaxxon.h b/src/devices/bus/c64/zaxxon.h
index dafd293081f..8e47d4caff7 100644
--- a/src/devices/bus/c64/zaxxon.h
+++ b/src/devices/bus/c64/zaxxon.h
@@ -34,7 +34,7 @@ protected:
virtual void device_start() override;
// device_c64_expansion_card_interface overrides
- virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ 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;
private:
int m_bank;
diff --git a/src/devices/bus/cbm2/24k.cpp b/src/devices/bus/cbm2/24k.cpp
index 9517337f8c1..c212b2fef83 100644
--- a/src/devices/bus/cbm2/24k.cpp
+++ b/src/devices/bus/cbm2/24k.cpp
@@ -49,7 +49,7 @@ void cbm2_24k_cartridge_device::device_start()
// cbm2_bd_r - cartridge data read
//-------------------------------------------------
-uint8_t cbm2_24k_cartridge_device::cbm2_bd_r(address_space &space, offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3)
+uint8_t cbm2_24k_cartridge_device::cbm2_bd_r(offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3)
{
if (!csbank1)
{
@@ -72,7 +72,7 @@ uint8_t cbm2_24k_cartridge_device::cbm2_bd_r(address_space &space, offs_t offset
// cbm2_bd_w - cartridge data write
//-------------------------------------------------
-void cbm2_24k_cartridge_device::cbm2_bd_w(address_space &space, offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3)
+void cbm2_24k_cartridge_device::cbm2_bd_w(offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3)
{
if (!csbank1)
{
diff --git a/src/devices/bus/cbm2/24k.h b/src/devices/bus/cbm2/24k.h
index 0e40e67d478..b1c029c5254 100644
--- a/src/devices/bus/cbm2/24k.h
+++ b/src/devices/bus/cbm2/24k.h
@@ -33,8 +33,8 @@ protected:
virtual void device_start() override;
// device_cbm2_expansion_card_interface overrides
- virtual uint8_t cbm2_bd_r(address_space &space, offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3) override;
- virtual void cbm2_bd_w(address_space &space, offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3) override;
+ 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;
};
diff --git a/src/devices/bus/cbm2/exp.cpp b/src/devices/bus/cbm2/exp.cpp
index e4246026a54..bcc2a654060 100644
--- a/src/devices/bus/cbm2/exp.cpp
+++ b/src/devices/bus/cbm2/exp.cpp
@@ -155,11 +155,11 @@ std::string cbm2_expansion_slot_device::get_default_card_software(get_default_ca
// read - cartridge data read
//-------------------------------------------------
-uint8_t cbm2_expansion_slot_device::read(address_space &space, offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3)
+uint8_t cbm2_expansion_slot_device::read(offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3)
{
if (m_card != nullptr)
{
- data = m_card->cbm2_bd_r(space, offset, data, csbank1, csbank2, csbank3);
+ data = m_card->cbm2_bd_r(offset, data, csbank1, csbank2, csbank3);
}
return data;
@@ -170,11 +170,11 @@ uint8_t cbm2_expansion_slot_device::read(address_space &space, offs_t offset, ui
// write - cartridge data write
//-------------------------------------------------
-void cbm2_expansion_slot_device::write(address_space &space, offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3)
+void cbm2_expansion_slot_device::write(offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3)
{
if (m_card != nullptr)
{
- m_card->cbm2_bd_w(space, offset, data, csbank1, csbank2, csbank3);
+ m_card->cbm2_bd_w(offset, data, csbank1, csbank2, csbank3);
}
}
diff --git a/src/devices/bus/cbm2/exp.h b/src/devices/bus/cbm2/exp.h
index 51f2cb15119..4d905225299 100644
--- a/src/devices/bus/cbm2/exp.h
+++ b/src/devices/bus/cbm2/exp.h
@@ -40,17 +40,6 @@
#define CBM2_EXPANSION_SLOT_TAG "exp"
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_CBM2_EXPANSION_SLOT_ADD(_tag, _clock, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, CBM2_EXPANSION_SLOT, _clock) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -77,8 +66,8 @@ public:
cbm2_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
// computer interface
- uint8_t read(address_space &space, offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3);
- void write(address_space &space, offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3);
+ uint8_t read(offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3);
+ void write(offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3);
// cartridge interface
int phi2() { return clock(); }
@@ -119,8 +108,8 @@ public:
// construction/destruction
virtual ~device_cbm2_expansion_card_interface();
- virtual uint8_t cbm2_bd_r(address_space &space, offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3) { return data; };
- virtual void cbm2_bd_w(address_space &space, offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3) { };
+ virtual uint8_t cbm2_bd_r(offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3) { return data; };
+ virtual void cbm2_bd_w(offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3) { };
protected:
device_cbm2_expansion_card_interface(const machine_config &mconfig, device_t &device);
diff --git a/src/devices/bus/cbm2/hrg.cpp b/src/devices/bus/cbm2/hrg.cpp
index 4956b0a708b..166e38e76b2 100644
--- a/src/devices/bus/cbm2/hrg.cpp
+++ b/src/devices/bus/cbm2/hrg.cpp
@@ -88,37 +88,39 @@ void cbm2_hrg_b_device::hrg_b_map(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(cbm2_hrg_a_device::device_add_mconfig)
- MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green())
- MCFG_SCREEN_UPDATE_DEVICE(EF9365_TAG, ef9365_device, screen_update)
- MCFG_SCREEN_SIZE(512, 512)
- MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 512-1)
- MCFG_SCREEN_REFRESH_RATE(25)
+void cbm2_hrg_a_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER, rgb_t::green()));
+ screen.set_screen_update(EF9365_TAG, FUNC(ef9365_device::screen_update));
+ screen.set_size(512, 512);
+ screen.set_visarea(0, 512-1, 0, 512-1);
+ screen.set_refresh_hz(25);
PALETTE(config, "palette", palette_device::MONOCHROME);
- MCFG_DEVICE_ADD(EF9365_TAG, EF9365, 1750000)
- MCFG_VIDEO_SET_SCREEN(SCREEN_TAG)
- MCFG_DEVICE_ADDRESS_MAP(0, hrg_a_map)
- MCFG_EF936X_PALETTE("palette")
- MCFG_EF936X_BITPLANES_CNT(1);
- MCFG_EF936X_DISPLAYMODE(DISPLAY_MODE_512x512);
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(cbm2_hrg_b_device::device_add_mconfig)
- MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green())
- MCFG_SCREEN_UPDATE_DEVICE(EF9366_TAG, ef9365_device, screen_update)
- MCFG_SCREEN_SIZE(512, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1)
- MCFG_SCREEN_REFRESH_RATE(50)
+ EF9365(config, m_gdc, 1750000);
+ m_gdc->set_screen(SCREEN_TAG);
+ m_gdc->set_addrmap(0, &cbm2_hrg_a_device::hrg_a_map);
+ m_gdc->set_palette_tag("palette");
+ m_gdc->set_nb_bitplanes(1);
+ m_gdc->set_display_mode(ef9365_device::DISPLAY_MODE_512x512);
+}
+
+void cbm2_hrg_b_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER, rgb_t::green()));
+ screen.set_screen_update(EF9366_TAG, FUNC(ef9365_device::screen_update));
+ screen.set_size(512, 256);
+ screen.set_visarea(0, 512-1, 0, 256-1);
+ screen.set_refresh_hz(50);
PALETTE(config, "palette", palette_device::MONOCHROME);
- MCFG_DEVICE_ADD(EF9366_TAG, EF9365, 1750000)
- MCFG_VIDEO_SET_SCREEN(SCREEN_TAG)
- MCFG_DEVICE_ADDRESS_MAP(0, hrg_b_map)
- MCFG_EF936X_PALETTE("palette")
- MCFG_EF936X_BITPLANES_CNT(1);
- MCFG_EF936X_DISPLAYMODE(DISPLAY_MODE_512x256);
-MACHINE_CONFIG_END
+ EF9365(config, m_gdc, 1750000); //EF9366
+ m_gdc->set_screen(SCREEN_TAG);
+ m_gdc->set_addrmap(0, &cbm2_hrg_b_device::hrg_b_map);
+ m_gdc->set_palette_tag("palette");
+ m_gdc->set_nb_bitplanes(1);
+ m_gdc->set_display_mode(ef9365_device::DISPLAY_MODE_512x256);
+}
@@ -172,7 +174,7 @@ void cbm2_hrg_device::device_reset()
// cbm2_bd_r - cartridge data read
//-------------------------------------------------
-uint8_t cbm2_hrg_device::cbm2_bd_r(address_space &space, offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3)
+uint8_t cbm2_hrg_device::cbm2_bd_r(offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3)
{
if (!csbank3)
{
@@ -203,7 +205,7 @@ uint8_t cbm2_hrg_device::cbm2_bd_r(address_space &space, offs_t offset, uint8_t
}
else if (offset >= 0x7ff0)
{
- data = m_gdc->data_r(space, offset & 0x0f);
+ data = m_gdc->data_r(offset & 0x0f);
}
}
@@ -215,7 +217,7 @@ uint8_t cbm2_hrg_device::cbm2_bd_r(address_space &space, offs_t offset, uint8_t
// cbm2_bd_w - cartridge data write
//-------------------------------------------------
-void cbm2_hrg_device::cbm2_bd_w(address_space &space, offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3)
+void cbm2_hrg_device::cbm2_bd_w(offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3)
{
if (!csbank3)
{
@@ -238,7 +240,7 @@ void cbm2_hrg_device::cbm2_bd_w(address_space &space, offs_t offset, uint8_t dat
}
else if (offset >= 0x7ff0)
{
- m_gdc->data_w(space, offset & 0x0f, data);
+ m_gdc->data_w(offset & 0x0f, data);
}
}
}
diff --git a/src/devices/bus/cbm2/hrg.h b/src/devices/bus/cbm2/hrg.h
index ccd16dc1b05..3b6a20c94e8 100644
--- a/src/devices/bus/cbm2/hrg.h
+++ b/src/devices/bus/cbm2/hrg.h
@@ -38,11 +38,12 @@ protected:
virtual void device_reset() override;
// device_cbm2_expansion_card_interface overrides
- virtual uint8_t cbm2_bd_r(address_space &space, offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3) override;
- virtual void cbm2_bd_w(address_space &space, offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3) override;
+ 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;
-private:
required_device<ef9365_device> m_gdc;
+
+private:
required_memory_region m_bank3;
};
diff --git a/src/devices/bus/cbm2/std.cpp b/src/devices/bus/cbm2/std.cpp
index 5087e39cd93..f56226028ee 100644
--- a/src/devices/bus/cbm2/std.cpp
+++ b/src/devices/bus/cbm2/std.cpp
@@ -47,7 +47,7 @@ void cbm2_standard_cartridge_device::device_start()
// cbm2_bd_r - cartridge data read
//-------------------------------------------------
-uint8_t cbm2_standard_cartridge_device::cbm2_bd_r(address_space &space, offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3)
+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())
{
diff --git a/src/devices/bus/cbm2/std.h b/src/devices/bus/cbm2/std.h
index beb54e1fb2e..ee941ca580a 100644
--- a/src/devices/bus/cbm2/std.h
+++ b/src/devices/bus/cbm2/std.h
@@ -33,7 +33,7 @@ protected:
virtual void device_start() override;
// device_cbm2_expansion_card_interface overrides
- virtual uint8_t cbm2_bd_r(address_space &space, offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3) override;
+ virtual uint8_t cbm2_bd_r(offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3) override;
};
diff --git a/src/devices/bus/cbm2/user.h b/src/devices/bus/cbm2/user.h
index aa963d0dccc..6bb6bba33c6 100644
--- a/src/devices/bus/cbm2/user.h
+++ b/src/devices/bus/cbm2/user.h
@@ -42,20 +42,20 @@ class cbm2_user_port_device;
class device_cbm2_user_port_interface : public device_slot_card_interface
{
public:
- virtual uint8_t cbm2_d1_r(address_space &space, offs_t offset) { return 0xff; };
- virtual void cbm2_d1_w(address_space &space, offs_t offset, uint8_t data) { };
+ virtual uint8_t cbm2_d1_r() { return 0xff; }
+ virtual void cbm2_d1_w(uint8_t data) { }
- virtual uint8_t cbm2_d2_r(address_space &space, offs_t offset) { return 0xff; };
- virtual void cbm2_d2_w(address_space &space, offs_t offset, uint8_t data) { };
+ virtual uint8_t cbm2_d2_r() { return 0xff; }
+ virtual void cbm2_d2_w(uint8_t data) { }
virtual int cbm2_pb2_r() { return 1; }
- virtual void cbm2_pb2_w(int state) { };
+ virtual void cbm2_pb2_w(int state) { }
virtual int cbm2_pb3_r() { return 1; }
- virtual void cbm2_pb3_w(int state) { };
+ virtual void cbm2_pb3_w(int state) { }
- virtual void cbm2_pc_w(int state) { };
- virtual void cbm2_cnt_w(int state) { };
- virtual void cbm2_sp_w(int state) { };
+ virtual void cbm2_pc_w(int state) { }
+ virtual void cbm2_cnt_w(int state) { }
+ virtual void cbm2_sp_w(int state) { }
protected:
// construction/destruction
@@ -89,10 +89,10 @@ public:
auto flag_callback() { return m_write_flag.bind(); }
// computer interface
- DECLARE_READ8_MEMBER( d1_r ) { uint8_t data = 0xff; if (m_card != nullptr) data = m_card->cbm2_d1_r(space, offset); return data; }
- DECLARE_WRITE8_MEMBER( d1_w ) { if (m_card != nullptr) m_card->cbm2_d1_w(space, offset, data); }
- DECLARE_READ8_MEMBER( d2_r ) { uint8_t data = 0xff; if (m_card != nullptr) data = m_card->cbm2_d2_r(space, offset); return data; }
- DECLARE_WRITE8_MEMBER( d2_w ) { if (m_card != nullptr) m_card->cbm2_d2_w(space, offset, data); }
+ uint8_t d1_r() { uint8_t data = 0xff; if (m_card != nullptr) data = m_card->cbm2_d1_r(); return data; }
+ void d1_w(uint8_t data) { if (m_card != nullptr) m_card->cbm2_d1_w(data); }
+ uint8_t d2_r() { uint8_t data = 0xff; if (m_card != nullptr) data = m_card->cbm2_d2_r(); return data; }
+ void d2_w(uint8_t data) { if (m_card != nullptr) m_card->cbm2_d2_w(data); }
DECLARE_READ_LINE_MEMBER( pb2_r ) { return m_card ? m_card->cbm2_pb2_r() : 1; }
DECLARE_WRITE_LINE_MEMBER( pb2_w ) { if (m_card != nullptr) m_card->cbm2_pb2_w(state); }
DECLARE_READ_LINE_MEMBER( pb3_r ) { return m_card ? m_card->cbm2_pb3_r() : 1; }
diff --git a/src/devices/bus/cbmiec/c1526.cpp b/src/devices/bus/cbmiec/c1526.cpp
index 9a5fcc4dbb3..7123782d42c 100644
--- a/src/devices/bus/cbmiec/c1526.cpp
+++ b/src/devices/bus/cbmiec/c1526.cpp
@@ -23,8 +23,8 @@
// DEVICE DEFINITIONS
//**************************************************************************
-DEFINE_DEVICE_TYPE(C1526, c1526_device, "c1526", "MPS802/C1526 Printer")
-DEFINE_DEVICE_TYPE(C4023, c4023_device, "c4023", "C4023 Printer")
+DEFINE_DEVICE_TYPE(C1526, c1526_device, "c1526", "Commodore 1526/MPS802 Printer")
+DEFINE_DEVICE_TYPE(C4023, c4023_device, "c4023", "Commodore 4023 Printer")
//-------------------------------------------------
@@ -88,20 +88,22 @@ void c1526_device_base::c1526_mem(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c1526_device::device_add_mconfig)
- MCFG_DEVICE_ADD(M6504_TAG, M6504, XTAL(4'000'000)/4)
- MCFG_DEVICE_PROGRAM_MAP(c1526_mem)
-MACHINE_CONFIG_END
+void c1526_device::device_add_mconfig(machine_config &config)
+{
+ m6504_device &cpu(M6504(config, M6504_TAG, XTAL(4'000'000)/4));
+ cpu.set_addrmap(AS_PROGRAM, &c1526_device::c1526_mem);
+}
//-------------------------------------------------
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c4023_device::device_add_mconfig)
- MCFG_DEVICE_ADD(M6504_TAG, M6504, XTAL(4'000'000)/4)
- MCFG_DEVICE_PROGRAM_MAP(c1526_mem)
-MACHINE_CONFIG_END
+void c4023_device::device_add_mconfig(machine_config &config)
+{
+ m6504_device &cpu(M6504(config, M6504_TAG, XTAL(4'000'000)/4));
+ cpu.set_addrmap(AS_PROGRAM, &c4023_device::c1526_mem);
+}
//-------------------------------------------------
diff --git a/src/devices/bus/cbmiec/c1541.cpp b/src/devices/bus/cbmiec/c1541.cpp
index 17f2ff59084..30b5eb8f255 100644
--- a/src/devices/bus/cbmiec/c1541.cpp
+++ b/src/devices/bus/cbmiec/c1541.cpp
@@ -161,17 +161,17 @@
// DEVICE DEFINITIONS
//**************************************************************************
-DEFINE_DEVICE_TYPE(C1540, c1540_device, "c1540", "C1540 Disk Drive")
-DEFINE_DEVICE_TYPE(C1541, c1541_device, "c1541", "C1541 Disk Drive")
-DEFINE_DEVICE_TYPE(C1541C, c1541c_device, "c1541c", "C1541C Disk Drive")
-DEFINE_DEVICE_TYPE(C1541II, c1541ii_device, "c1541ii", "C1541-II Disk Drive")
+DEFINE_DEVICE_TYPE(C1540, c1540_device, "c1540", "Commodore 1540 Disk Drive")
+DEFINE_DEVICE_TYPE(C1541, c1541_device, "c1541", "Commodore 1541 Disk Drive")
+DEFINE_DEVICE_TYPE(C1541C, c1541c_device, "c1541c", "Commodore 1541C Disk Drive")
+DEFINE_DEVICE_TYPE(C1541II, c1541ii_device, "c1541ii", "Commodore 1541-II Disk Drive")
DEFINE_DEVICE_TYPE(SX1541, sx1541_device, "sx1541", "SX1541 Disk Drive")
DEFINE_DEVICE_TYPE(FSD1, fsd1_device, "fsd1", "FSD-1 Disk Drive")
DEFINE_DEVICE_TYPE(FSD2, fsd2_device, "fsd2", "FSD-2 Disk Drive")
DEFINE_DEVICE_TYPE(CSD1, csd1_device, "csd1", "CSD-1 Disk Drive")
-DEFINE_DEVICE_TYPE(C1541_DOLPHIN_DOS, c1541_dolphin_dos_device, "c1541dd", "C1541 Dolphin-DOS 2.0 Disk Drive")
-DEFINE_DEVICE_TYPE(C1541_PROFESSIONAL_DOS_V1, c1541_professional_dos_v1_device, "c1541pd", "C1541 Professional-DOS v1 Disk Drive")
-DEFINE_DEVICE_TYPE(C1541_PROLOGIC_DOS_CLASSIC, c1541_prologic_dos_classic_device, "c1541pdc", "C1541 ProLogic-DOS Classic Disk Drive")
+DEFINE_DEVICE_TYPE(C1541_DOLPHIN_DOS, c1541_dolphin_dos_device, "c1541dd", "Commodore 1541 Dolphin-DOS 2.0 Disk Drive")
+DEFINE_DEVICE_TYPE(C1541_PROFESSIONAL_DOS_V1, c1541_professional_dos_v1_device, "c1541pd", "Commodore 1541 Professional-DOS v1 Disk Drive")
+DEFINE_DEVICE_TYPE(C1541_PROLOGIC_DOS_CLASSIC, c1541_prologic_dos_classic_device, "c1541pdc", "Commodore 1541 ProLogic-DOS Classic Disk Drive")
DEFINE_DEVICE_TYPE(INDUS_GT, indus_gt_device, "indusgt", "Indus GT Disk Drive")
@@ -762,12 +762,12 @@ FLOPPY_FORMATS_END
READ8_MEMBER( c1541_prologic_dos_classic_device::pia_r )
{
- return m_pia->read(space, (offset >> 2) & 0x03);
+ return m_pia->read((offset >> 2) & 0x03);
}
WRITE8_MEMBER( c1541_prologic_dos_classic_device::pia_w )
{
- m_pia->write(space, (offset >> 2) & 0x03, data);
+ m_pia->write((offset >> 2) & 0x03, data);
}
WRITE8_MEMBER( c1541_prologic_dos_classic_device::pia_pa_w )
diff --git a/src/devices/bus/cbmiec/c1571.cpp b/src/devices/bus/cbmiec/c1571.cpp
index 91fe7d4bd96..568cd646fe7 100644
--- a/src/devices/bus/cbmiec/c1571.cpp
+++ b/src/devices/bus/cbmiec/c1571.cpp
@@ -44,9 +44,9 @@
// DEVICE DEFINITIONS
//**************************************************************************
-DEFINE_DEVICE_TYPE(C1570, c1570_device, "c1570", "C1570 Disk Drive")
-DEFINE_DEVICE_TYPE(C1571, c1571_device, "c1571", "C1571 Disk Drive")
-DEFINE_DEVICE_TYPE(C1571CR, c1571cr_device, "c1571cr", "C1571CR Disk Drive")
+DEFINE_DEVICE_TYPE(C1570, c1570_device, "c1570", "Commodore 1570 Disk Drive")
+DEFINE_DEVICE_TYPE(C1571, c1571_device, "c1571", "Commodore 1571 Disk Drive")
+DEFINE_DEVICE_TYPE(C1571CR, c1571cr_device, "c1571cr", "Commodore 1571CR Disk Drive")
DEFINE_DEVICE_TYPE(MINI_CHIEF, mini_chief_device, "minichif", "ICT Mini Chief Disk Drive")
@@ -660,7 +660,7 @@ void c1571cr_device::device_add_mconfig(machine_config &config)
m_via0->writepa_handler().set(FUNC(c1571cr_device::via0_pa_w));
m_via0->writepb_handler().set(FUNC(c1571cr_device::via0_pb_w));
- //MCFG_MOS5710_ADD(M5710_TAG, 16_MHz_XTAL / 16, 0)
+ //MOS5710(config, M5710_TAG, 16_MHz_XTAL / 16);
}
@@ -672,7 +672,8 @@ void mini_chief_device::device_add_mconfig(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &mini_chief_device::mini_chief_mem);
isa8_device &isa8(ISA8(config, ISA_BUS_TAG, 0));
- isa8.set_cputag(m_maincpu);
+ isa8.set_memspace(m_maincpu, AS_PROGRAM);
+ isa8.set_iospace(m_maincpu, AS_PROGRAM);
ISA8_SLOT(config, "isa1", 0, ISA_BUS_TAG, mini_chief_isa8_cards, "wd1002a_wx1", false);
}
diff --git a/src/devices/bus/cbmiec/c1581.cpp b/src/devices/bus/cbmiec/c1581.cpp
index 190cab5cd07..f589cb2f427 100644
--- a/src/devices/bus/cbmiec/c1581.cpp
+++ b/src/devices/bus/cbmiec/c1581.cpp
@@ -33,8 +33,8 @@
// DEVICE DEFINITIONS
//**************************************************************************
-DEFINE_DEVICE_TYPE(C1563, c1563_device, "c1563", "C1563 Disk Drive")
-DEFINE_DEVICE_TYPE(C1581, c1581_device, "c1581", "C1581 Disk Drive")
+DEFINE_DEVICE_TYPE(C1563, c1563_device, "c1563", "Commodore 1563 3.5 Disk Drive")
+DEFINE_DEVICE_TYPE(C1581, c1581_device, "c1581", "Commodore 1581 3.5 Disk Drive")
//-------------------------------------------------
@@ -267,22 +267,23 @@ FLOPPY_FORMATS_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c1581_device::device_add_mconfig)
- MCFG_DEVICE_ADD(M6502_TAG, M6502, 16_MHz_XTAL / 8)
- MCFG_DEVICE_PROGRAM_MAP(c1581_mem)
-
- MCFG_DEVICE_ADD(M8520_TAG, MOS8520, 16_MHz_XTAL / 8)
- MCFG_MOS6526_IRQ_CALLBACK(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
- MCFG_MOS6526_CNT_CALLBACK(WRITELINE(*this, c1581_device, cnt_w))
- MCFG_MOS6526_SP_CALLBACK(WRITELINE(*this, c1581_device, sp_w))
- MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(*this, c1581_device, cia_pa_r))
- MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(*this, c1581_device, cia_pa_w))
- MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(*this, c1581_device, cia_pb_r))
- MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(*this, c1581_device, cia_pb_w))
+void c1581_device::device_add_mconfig(machine_config &config)
+{
+ M6502(config, m_maincpu, 16_MHz_XTAL / 8);
+ m_maincpu->set_addrmap(AS_PROGRAM, &c1581_device::c1581_mem);
+
+ MOS8520(config, m_cia, 16_MHz_XTAL / 8);
+ m_cia->irq_wr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
+ m_cia->cnt_wr_callback().set(FUNC(c1581_device::cnt_w));
+ m_cia->sp_wr_callback().set(FUNC(c1581_device::sp_w));
+ m_cia->pa_rd_callback().set(FUNC(c1581_device::cia_pa_r));
+ m_cia->pa_wr_callback().set(FUNC(c1581_device::cia_pa_w));
+ m_cia->pb_rd_callback().set(FUNC(c1581_device::cia_pb_r));
+ m_cia->pb_wr_callback().set(FUNC(c1581_device::cia_pb_w));
WD1772(config, m_fdc, 16_MHz_XTAL / 2);
FLOPPY_CONNECTOR(config, WD1772_TAG":0", c1581_floppies, "35dd", c1581_device::floppy_formats, true);
-MACHINE_CONFIG_END
+}
//-------------------------------------------------
diff --git a/src/devices/bus/cbmiec/cbmiec.h b/src/devices/bus/cbmiec/cbmiec.h
index 4977bfc97be..ceb03d44948 100644
--- a/src/devices/bus/cbmiec/cbmiec.h
+++ b/src/devices/bus/cbmiec/cbmiec.h
@@ -21,46 +21,6 @@
#define CBM_IEC_TAG "iec_bus"
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_CBM_IEC_BUS_ADD() \
- MCFG_DEVICE_ADD(CBM_IEC_TAG, CBM_IEC, 0)
-
-
-#define MCFG_CBM_IEC_BUS_SRQ_CALLBACK(_write) \
- downcast<cbm_iec_device *>(device)->set_srq_callback(DEVCB_##_write);
-
-#define MCFG_CBM_IEC_BUS_ATN_CALLBACK(_write) \
- downcast<cbm_iec_device *>(device)->set_atn_callback(DEVCB_##_write);
-
-#define MCFG_CBM_IEC_BUS_CLK_CALLBACK(_write) \
- downcast<cbm_iec_device *>(device)->set_clk_callback(DEVCB_##_write);
-
-#define MCFG_CBM_IEC_BUS_DATA_CALLBACK(_write) \
- downcast<cbm_iec_device *>(device)->set_data_callback(DEVCB_##_write);
-
-#define MCFG_CBM_IEC_BUS_RESET_CALLBACK(_write) \
- downcast<cbm_iec_device *>(device)->set_reset_callback(DEVCB_##_write);
-
-
-#define MCFG_CBM_IEC_SLOT_ADD(_tag, _address, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, CBM_IEC_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- downcast<cbm_iec_slot_device *>(device)->set_address(_address);
-
-
-#define MCFG_CBM_IEC_ADD(_default_drive) \
- MCFG_CBM_IEC_SLOT_ADD("iec4", 4, cbm_iec_devices, nullptr) \
- MCFG_CBM_IEC_SLOT_ADD("iec8", 8, cbm_iec_devices, _default_drive) \
- MCFG_CBM_IEC_SLOT_ADD("iec9", 9, cbm_iec_devices, nullptr) \
- MCFG_CBM_IEC_SLOT_ADD("iec10", 10, cbm_iec_devices, nullptr) \
- MCFG_CBM_IEC_SLOT_ADD("iec11", 11, cbm_iec_devices, nullptr) \
- MCFG_CBM_IEC_BUS_ADD()
-
-
void cbm_iec_devices(device_slot_interface &device);
//**************************************************************************
@@ -78,11 +38,6 @@ public:
// construction/destruction
cbm_iec_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- template <class Object> devcb_base &set_srq_callback(Object &&wr) { return m_write_srq.set_callback(std::forward<Object>(wr)); }
- template <class Object> devcb_base &set_atn_callback(Object &&wr) { return m_write_atn.set_callback(std::forward<Object>(wr)); }
- template <class Object> devcb_base &set_clk_callback(Object &&wr) { return m_write_clk.set_callback(std::forward<Object>(wr)); }
- template <class Object> devcb_base &set_data_callback(Object &&wr) { return m_write_data.set_callback(std::forward<Object>(wr)); }
- template <class Object> devcb_base &set_reset_callback(Object &&wr) { return m_write_reset.set_callback(std::forward<Object>(wr)); }
auto srq_callback() { return m_write_srq.bind(); }
auto atn_callback() { return m_write_atn.bind(); }
auto clk_callback() { return m_write_clk.bind(); }
diff --git a/src/devices/bus/cbmiec/interpod.cpp b/src/devices/bus/cbmiec/interpod.cpp
index d6111dafe4d..ac87a55cf21 100644
--- a/src/devices/bus/cbmiec/interpod.cpp
+++ b/src/devices/bus/cbmiec/interpod.cpp
@@ -123,16 +123,17 @@ void interpod_device::interpod_mem(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(interpod_device::device_add_mconfig)
- MCFG_DEVICE_ADD(R6502_TAG, M6502, 1000000)
- MCFG_DEVICE_PROGRAM_MAP(interpod_mem)
+void interpod_device::device_add_mconfig(machine_config &config)
+{
+ M6502(config, m_maincpu, 1000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &interpod_device::interpod_mem);
- MCFG_DEVICE_ADD(R6522_TAG, VIA6522, 1000000)
- MCFG_DEVICE_ADD(R6532_TAG, MOS6532_NEW, 1000000)
- MCFG_DEVICE_ADD(MC6850_TAG, ACIA6850, 0)
+ VIA6522(config, m_via, 1000000);
+ MOS6532_NEW(config, m_riot, 1000000);
+ ACIA6850(config, m_acia, 0);
- MCFG_CBM_IEEE488_ADD(nullptr)
-MACHINE_CONFIG_END
+ ieee488_device::add_cbm_devices(config, nullptr);
+}
//**************************************************************************
diff --git a/src/devices/bus/cbmiec/interpod.h b/src/devices/bus/cbmiec/interpod.h
index cc6e07f7c7a..58c193286cf 100644
--- a/src/devices/bus/cbmiec/interpod.h
+++ b/src/devices/bus/cbmiec/interpod.h
@@ -27,16 +27,6 @@
#define INTERPOD_TAG "interpod"
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_INTERPOD_ADD() \
- MCFG_DEVICE_ADD(INTERPOD_TAG, INTERPOD, 0)
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
diff --git a/src/devices/bus/cbmiec/serialbox.cpp b/src/devices/bus/cbmiec/serialbox.cpp
index b14eca1f389..ab8326528d0 100644
--- a/src/devices/bus/cbmiec/serialbox.cpp
+++ b/src/devices/bus/cbmiec/serialbox.cpp
@@ -69,10 +69,11 @@ void serial_box_device::serial_box_mem(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(serial_box_device::device_add_mconfig)
- MCFG_DEVICE_ADD(M6502_TAG, M65C02, XTAL(4'000'000)/4)
- MCFG_DEVICE_PROGRAM_MAP(serial_box_mem)
-MACHINE_CONFIG_END
+void serial_box_device::device_add_mconfig(machine_config &config)
+{
+ M65C02(config, m_maincpu, XTAL(4'000'000)/4);
+ m_maincpu->set_addrmap(AS_PROGRAM, &serial_box_device::serial_box_mem);
+}
diff --git a/src/devices/bus/cbmiec/vic1515.cpp b/src/devices/bus/cbmiec/vic1515.cpp
index 1afc47ce807..5accd8b6858 100644
--- a/src/devices/bus/cbmiec/vic1515.cpp
+++ b/src/devices/bus/cbmiec/vic1515.cpp
@@ -61,11 +61,12 @@ void vic1515_device::vic1515_io(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(vic1515_device::device_add_mconfig)
- MCFG_DEVICE_ADD("maincpu", I8039, XTAL(6'000'000))
- MCFG_DEVICE_PROGRAM_MAP(vic1515_mem)
- MCFG_DEVICE_IO_MAP(vic1515_io)
-MACHINE_CONFIG_END
+void vic1515_device::device_add_mconfig(machine_config &config)
+{
+ i8039_device &maincpu(I8039(config, "maincpu", XTAL(6'000'000)));
+ maincpu.set_addrmap(AS_PROGRAM, &vic1515_device::vic1515_mem);
+ maincpu.set_addrmap(AS_IO, &vic1515_device::vic1515_io);
+}
//-------------------------------------------------
diff --git a/src/devices/bus/cbmiec/vic1520.cpp b/src/devices/bus/cbmiec/vic1520.cpp
index 0f515f8638a..8e535c230e6 100644
--- a/src/devices/bus/cbmiec/vic1520.cpp
+++ b/src/devices/bus/cbmiec/vic1520.cpp
@@ -94,10 +94,11 @@ void vic1520_device::vic1520_mem(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(vic1520_device::device_add_mconfig)
- MCFG_DEVICE_ADD(M6500_1_TAG, M6502, XTAL(2'000'000)) // M6500/1
- MCFG_DEVICE_PROGRAM_MAP(vic1520_mem)
-MACHINE_CONFIG_END
+void vic1520_device::device_add_mconfig(machine_config &config)
+{
+ m6502_device &cpu(M6502(config, M6500_1_TAG, XTAL(2'000'000))); // M6500/1
+ cpu.set_addrmap(AS_PROGRAM, &vic1520_device::vic1520_mem);
+}
//-------------------------------------------------
diff --git a/src/devices/bus/cbus/pc9801_118.cpp b/src/devices/bus/cbus/pc9801_118.cpp
index 96f0d0b4091..a9271ecb0bf 100644
--- a/src/devices/bus/cbus/pc9801_118.cpp
+++ b/src/devices/bus/cbus/pc9801_118.cpp
@@ -141,7 +141,7 @@ void pc9801_118_device::device_reset()
READ8_MEMBER(pc9801_118_device::opn3_r)
{
if(((offset & 5) == 0) || m_ext_reg)
- return m_opn3->read(space, offset >> 1);
+ return m_opn3->read(offset >> 1);
else // odd
{
//printf("PC9801-118: Read to undefined port [%02x]\n",offset+0x188);
@@ -153,7 +153,7 @@ READ8_MEMBER(pc9801_118_device::opn3_r)
WRITE8_MEMBER(pc9801_118_device::opn3_w)
{
if(((offset & 5) == 0) || m_ext_reg)
- m_opn3->write(space, offset >> 1,data);
+ m_opn3->write(offset >> 1,data);
//else // odd
// printf("PC9801-118: Write to undefined port [%02x] %02x\n",offset+0x188,data);
}
diff --git a/src/devices/bus/cbus/pc9801_26.cpp b/src/devices/bus/cbus/pc9801_26.cpp
index 41141476483..603ea4a80b3 100644
--- a/src/devices/bus/cbus/pc9801_26.cpp
+++ b/src/devices/bus/cbus/pc9801_26.cpp
@@ -146,7 +146,7 @@ READ8_MEMBER(pc9801_26_device::opn_r)
{
if((offset & 1) == 0)
{
- return offset & 4 ? 0xff : m_opn->read(space, offset >> 1);
+ return offset & 4 ? 0xff : m_opn->read(offset >> 1);
}
else // odd
{
@@ -159,7 +159,7 @@ READ8_MEMBER(pc9801_26_device::opn_r)
WRITE8_MEMBER(pc9801_26_device::opn_w)
{
if((offset & 5) == 0)
- m_opn->write(space, offset >> 1, data);
+ m_opn->write(offset >> 1, data);
else // odd
printf("PC9801-26: Write to undefined port [%02x] %02x\n",offset+0x188,data);
}
diff --git a/src/devices/bus/cbus/pc9801_86.cpp b/src/devices/bus/cbus/pc9801_86.cpp
index 04c1feb4cf8..d9d6150a9fa 100644
--- a/src/devices/bus/cbus/pc9801_86.cpp
+++ b/src/devices/bus/cbus/pc9801_86.cpp
@@ -47,7 +47,8 @@ WRITE_LINE_MEMBER(pc9801_86_device::sound_irq)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(pc9801_86_device::pc9801_86_config)
+void pc9801_86_device::pc9801_86_config(machine_config &config)
+{
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
YM2608(config, m_opna, 7.987_MHz_XTAL);
@@ -62,16 +63,19 @@ MACHINE_CONFIG_START(pc9801_86_device::pc9801_86_config)
m_opna->add_route(1, "lspeaker", 1.00);
m_opna->add_route(2, "rspeaker", 1.00);
- MCFG_DEVICE_ADD("ldac", DAC_16BIT_R2R_TWOS_COMPLEMENT, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) // burr brown pcm61p
- MCFG_DEVICE_ADD("rdac", DAC_16BIT_R2R_TWOS_COMPLEMENT, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) // burr brown pcm61p
- MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
- MCFG_SOUND_ROUTE(0, "ldac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "ldac", -1.0, DAC_VREF_NEG_INPUT)
- MCFG_SOUND_ROUTE(0, "rdac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "rdac", -1.0, DAC_VREF_NEG_INPUT)
-MACHINE_CONFIG_END
+ DAC_16BIT_R2R_TWOS_COMPLEMENT(config, m_ldac, 0).add_route(ALL_OUTPUTS, "lspeaker", 1.0); // burr brown pcm61p
+ DAC_16BIT_R2R_TWOS_COMPLEMENT(config, m_rdac, 0).add_route(ALL_OUTPUTS, "rspeaker", 1.0); // burr brown pcm61p
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
+ vref.add_route(0, "ldac", 1.0, DAC_VREF_POS_INPUT);
+ vref.add_route(0, "ldac", -1.0, DAC_VREF_NEG_INPUT);
+ vref.add_route(0, "rdac", 1.0, DAC_VREF_POS_INPUT);
+ vref.add_route(0, "rdac", -1.0, DAC_VREF_NEG_INPUT);
+}
-MACHINE_CONFIG_START(pc9801_86_device::device_add_mconfig)
+void pc9801_86_device::device_add_mconfig(machine_config &config)
+{
pc9801_86_config(config);
-MACHINE_CONFIG_END
+}
// to load a different bios for slots:
// -cbusX pc9801_86,bios=N
@@ -197,7 +201,7 @@ void pc9801_86_device::device_reset()
READ8_MEMBER(pc9801_86_device::opna_r)
{
if((offset & 1) == 0)
- return m_opna->read(space, offset >> 1);
+ return m_opna->read(offset >> 1);
else // odd
{
logerror("PC9801-86: Read to undefined port [%02x]\n",offset+0x188);
@@ -208,7 +212,7 @@ READ8_MEMBER(pc9801_86_device::opna_r)
WRITE8_MEMBER(pc9801_86_device::opna_w)
{
if((offset & 1) == 0)
- m_opna->write(space, offset >> 1,data);
+ m_opna->write(offset >> 1,data);
else // odd
logerror("PC9801-86: Write to undefined port [%02x] %02x\n",offset+0x188,data);
}
@@ -419,7 +423,7 @@ void pc9801_speakboard_device::device_reset()
READ8_MEMBER(pc9801_speakboard_device::opna_slave_r)
{
if((offset & 1) == 0)
- return m_opna_slave->read(space, offset >> 1);
+ return m_opna_slave->read(offset >> 1);
else // odd
{
logerror("PC9801-SPB: Read to undefined port [%02x]\n",offset+0x588);
@@ -430,7 +434,7 @@ READ8_MEMBER(pc9801_speakboard_device::opna_slave_r)
WRITE8_MEMBER(pc9801_speakboard_device::opna_slave_w)
{
if((offset & 1) == 0)
- m_opna_slave->write(space, offset >> 1,data);
+ m_opna_slave->write(offset >> 1,data);
else // odd
logerror("PC9801-SPB: Write to undefined port [%02x] %02x\n",offset+0x588,data);
}
diff --git a/src/devices/bus/cbus/pc9801_amd98.cpp b/src/devices/bus/cbus/pc9801_amd98.cpp
index f7207aabd21..ca7b32e7b4e 100644
--- a/src/devices/bus/cbus/pc9801_amd98.cpp
+++ b/src/devices/bus/cbus/pc9801_amd98.cpp
@@ -149,9 +149,9 @@ READ8_MEMBER(pc9801_amd98_device::read)
switch(offset)
{
case 2:
- return m_ay1->data_r(space,0);
+ return m_ay1->data_r();
case 3:
- return m_ay2->data_r(space,0);
+ return m_ay2->data_r();
}
printf("%02x\n",offset);
@@ -164,16 +164,16 @@ WRITE8_MEMBER(pc9801_amd98_device::write)
switch(offset)
{
case 0:
- m_ay1->address_w(space,0,data);
+ m_ay1->address_w(data);
break;
case 1:
- m_ay2->address_w(space,0,data);
+ m_ay2->address_w(data);
break;
case 2:
- m_ay1->data_w(space,0,data);
+ m_ay1->data_w(data);
break;
case 3:
- m_ay2->data_w(space,0,data);
+ m_ay2->data_w(data);
break;
default:
printf("%02x %02x\n",offset,data);
@@ -192,11 +192,11 @@ WRITE8_MEMBER(pc9801_amd98_device::ay3_data_latch_w)
{
case 0x47:
//printf("%02x addr\n",m_ay3_latch);
- m_ay3->address_w(space,0,m_ay3_latch);
+ m_ay3->address_w(m_ay3_latch);
break;
case 0x43:
//printf("%02x data\n",m_ay3_latch);
- m_ay3->data_w(space,0,m_ay3_latch);
+ m_ay3->data_w(m_ay3_latch);
break;
}
}
diff --git a/src/devices/bus/cbus/pc9801_cbus.cpp b/src/devices/bus/cbus/pc9801_cbus.cpp
index eb62af6daaa..5a53eddcce7 100644
--- a/src/devices/bus/cbus/pc9801_cbus.cpp
+++ b/src/devices/bus/cbus/pc9801_cbus.cpp
@@ -55,7 +55,8 @@ device_pc9801cbus_card_interface::~device_pc9801cbus_card_interface()
pc9801_slot_device::pc9801_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, PC9801CBUS_SLOT, tag, owner, clock),
device_slot_interface(mconfig, *this),
- m_cpu(*this, finder_base::DUMMY_TAG),
+ m_memspace(*this, finder_base::DUMMY_TAG, -1),
+ m_iospace(*this, finder_base::DUMMY_TAG, -1),
m_int_callback{{*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this}}
{
}
@@ -97,17 +98,17 @@ void pc9801_slot_device::device_start()
void pc9801_slot_device::install_io(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler)
{
- int buswidth = this->io_space().data_width();
+ int buswidth = m_iospace->data_width();
switch(buswidth)
{
case 8:
- this->io_space().install_readwrite_handler(start, end, rhandler, whandler, 0);
+ m_iospace->install_readwrite_handler(start, end, rhandler, whandler, 0);
break;
case 16:
- this->io_space().install_readwrite_handler(start, end, rhandler, whandler, 0xffff);
+ m_iospace->install_readwrite_handler(start, end, rhandler, whandler, 0xffff);
break;
case 32:
- this->io_space().install_readwrite_handler(start, end, rhandler, whandler, 0xffffffff);
+ m_iospace->install_readwrite_handler(start, end, rhandler, whandler, 0xffffffff);
break;
default:
fatalerror("PC-9801-26: Bus width %d not supported\n", buswidth);
diff --git a/src/devices/bus/cbus/pc9801_cbus.h b/src/devices/bus/cbus/pc9801_cbus.h
index 400cfa67d27..e094693f06c 100644
--- a/src/devices/bus/cbus/pc9801_cbus.h
+++ b/src/devices/bus/cbus/pc9801_cbus.h
@@ -2,6 +2,60 @@
// copyright-holders:Angelo Salese
/**********************************************************************
+ <B> <A>
+ +------+
+ GND |[ 01 ]| GND
+ V1 |[ 02 ]| V1
+ V2 |[ 03 ]| V2
+ DB001 |[ 04 ]| AB001
+ DB011 |[ 05 ]| AB011
+ DB021 |[ 06 ]| AB021
+ DB031 |[ 07 ]| AB031
+ DB041 |[ 08 ]| AB041
+ DB051 |[ 09 ]| AB051
+ DB061 |[ 10 ]| AB061
+ GND |[ 11 ]| GND
+ DB071 |[ 12 ]| AB071
+ DB081 |[ 13 ]| AB081
+ DB091 |[ 14 ]| AB091
+ DB101 |[ 15 ]| AB101
+ DB111 |[ 16 ]| AB111
+ DB121 |[ 17 ]| AB121
+ DB131 |[ 18 ]| AB131
+ DB141 |[ 19 ]| AB141
+ DB151 |[ 20 ]| AB151
+ GND |[ 21 ]| GND
+ +12 V |[ 22 ]| AB161
+ +12 V |[ 23 ]| AB171
+ "INT0" IR31 |[ 24 ]| AB181
+ "INT1" IR51 |[ 25 ]| AB191
+ "INT2" IR61 |[ 26 ]| AB201
+ "INT3" IR91 |[ 27 ]| AB211
+ "INT4" IR101/IR111 |[ 28 ]| AB221
+ "INT5" IR121 |[ 29 ]| AB231
+ "INT6" IR131 |[ 30 ]| INT0
+ GND |[ 31 ]| GND
+ -12 V |[ 32 ]| IOCHK0
+ -12 V |[ 33 ]| IOR0
+ RESET0 |[ 34 ]| IOW0
+ DACK00 |[ 35 ]| MRC0
+ DACK30/DACK20 |[ 36 ]| MWC0
+ DRQ00 |[ 37 ]| S00 (INTA0)
+ DRQ30/DRQ20 |[ 38 ]| S10 (NOWAIT0)
+ WORD0 |[ 39 ]| S20 (SALE1)
+ (EXHRQ10) CPKILL0 |[ 40 ]| LOCK (MACS0)
+ GND |[ 41 ]| GND
+ (EXHLA10) RQGT0 |[ 42 ]| CPUENB10
+ DMATC0 |[ 43 ]| RFSH0
+ NMI0 |[ 44 ]| BHE0
+ MWE0 |[ 45 ]| IORDY1
+ (EXHLA20) HLDA00 |[ 46 ]| SCLK1
+ (EXHRQ20) HRQ00 |[ 47 ]| S18CLK1 = 307.2 kHz
+ (SUBSRQ1) DMAHLD0 |[ 48 ]| POWER0
+ +5 V |[ 49 ]| +5 V
+ +5 V |[ 50 ]| +5 V
+ +------+
+ <B> <A>
**********************************************************************/
#ifndef MAME_MACHINE_PC9801_CBUS_H
@@ -10,43 +64,6 @@
#pragma once
-
-
-//**************************************************************************
-// CONSTANTS
-//**************************************************************************
-
-
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_PC9801CBUS_CPU(_cputag) \
- downcast<pc9801_slot_device &>(*device).set_cpu_tag(_cputag);
-
-#define MCFG_PC9801CBUS_INT0_CALLBACK(_devcb) \
- downcast<pc9801_slot_device &>(*device).set_int_callback<0>(DEVCB_##_devcb);
-
-#define MCFG_PC9801CBUS_INT1_CALLBACK(_devcb) \
- downcast<pc9801_slot_device &>(*device).set_int_callback<1>(DEVCB_##_devcb);
-
-#define MCFG_PC9801CBUS_INT2_CALLBACK(_devcb) \
- downcast<pc9801_slot_device &>(*device).set_int_callback<2>(DEVCB_##_devcb);
-
-#define MCFG_PC9801CBUS_INT3_CALLBACK(_devcb) \
- downcast<pc9801_slot_device &>(*device).set_int_callback<3>(DEVCB_##_devcb);
-
-#define MCFG_PC9801CBUS_INT4_CALLBACK(_devcb) \
- downcast<pc9801_slot_device &>(*device).set_int_callback<4>(DEVCB_##_devcb);
-
-#define MCFG_PC9801CBUS_INT5_CALLBACK(_devcb) \
- downcast<pc9801_slot_device &>(*device).set_int_callback<5>(DEVCB_##_devcb);
-
-#define MCFG_PC9801CBUS_INT6_CALLBACK(_devcb) \
- downcast<pc9801_slot_device &>(*device).set_int_callback<6>(DEVCB_##_devcb);
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -74,11 +91,10 @@ class pc9801_slot_device : public device_t, public device_slot_interface
{
public:
// construction/destruction
- template <typename T, typename U>
- pc9801_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&cpu_tag, U &&opts, char const *dflt)
+ template <typename T>
+ pc9801_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
: pc9801_slot_device(mconfig, tag, owner, (uint32_t)0)
{
- m_cpu.set_tag(std::forward<T>(cpu_tag));
option_reset();
opts(*this);
set_default_option(dflt);
@@ -86,11 +102,14 @@ public:
}
pc9801_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T> void set_memspace(T &&tag, int spacenum) { m_memspace.set_tag(std::forward<T>(tag), spacenum); }
+ template <typename T> void set_iospace(T &&tag, int spacenum) { m_iospace.set_tag(std::forward<T>(tag), spacenum); }
+
// configuration access
template<std::size_t Line> auto int_cb() { return m_int_callback[Line].bind(); }
- address_space &program_space() const { return m_cpu->space(AS_PROGRAM); }
- address_space &io_space() const { return m_cpu->space(AS_IO); }
+ address_space &program_space() const { return *m_memspace; }
+ address_space &io_space() const { return *m_iospace; }
template<int I> void int_w(bool state) { m_int_callback[I](state); }
void install_io(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler);
@@ -102,7 +121,8 @@ protected:
private:
// device_pc9801_slot_card_interface *m_card;
- required_device<cpu_device> m_cpu;
+ required_address_space m_memspace;
+ required_address_space m_iospace;
devcb_write_line m_int_callback[7];
};
diff --git a/src/devices/bus/centronics/comxpl80.cpp b/src/devices/bus/centronics/comxpl80.cpp
index afdce31a8bf..17fd3165f8d 100644
--- a/src/devices/bus/centronics/comxpl80.cpp
+++ b/src/devices/bus/centronics/comxpl80.cpp
@@ -86,11 +86,12 @@ void comx_pl80_device::comxpl80_mem(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(comx_pl80_device::device_add_mconfig)
- MCFG_DEVICE_ADD(CX005_TAG, M6805, 4000000) // CX005: some kind of MC6805/MC68HC05 clone
- MCFG_DEVICE_PROGRAM_MAP(comxpl80_mem)
- MCFG_DEVICE_DISABLE()
-MACHINE_CONFIG_END
+void comx_pl80_device::device_add_mconfig(machine_config &config)
+{
+ m6805_device &cx005(M6805(config, CX005_TAG, 4000000)); // CX005: some kind of MC6805/MC68HC05 clone
+ cx005.set_addrmap(AS_PROGRAM, &comx_pl80_device::comxpl80_mem);
+ cx005.set_disable();
+}
//-------------------------------------------------
diff --git a/src/devices/bus/centronics/covox.cpp b/src/devices/bus/centronics/covox.cpp
index e508578ffe6..6cafe74cb42 100644
--- a/src/devices/bus/centronics/covox.cpp
+++ b/src/devices/bus/centronics/covox.cpp
@@ -38,13 +38,15 @@ centronics_covox_device::centronics_covox_device(const machine_config &mconfig,
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(centronics_covox_device::device_add_mconfig)
+void centronics_covox_device::device_add_mconfig(machine_config &config)
+{
/* sound hardware */
SPEAKER(config, "speaker").front_center();
- MCFG_DEVICE_ADD("dac", DAC_8BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5) // unknown DAC
- MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
- MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT)
-MACHINE_CONFIG_END
+ DAC_8BIT_R2R(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.5); // unknown DAC
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
+ vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
+ vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
+}
void centronics_covox_device::device_start()
{
@@ -87,16 +89,19 @@ centronics_covox_stereo_device::centronics_covox_stereo_device(const machine_con
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(centronics_covox_stereo_device::device_add_mconfig)
+void centronics_covox_stereo_device::device_add_mconfig(machine_config &config)
+{
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("ldac", DAC_8BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.5) // unknown DAC
- MCFG_DEVICE_ADD("rdac", DAC_8BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.5) // unknown DAC
- MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
- MCFG_SOUND_ROUTE(0, "ldac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "ldac", -1.0, DAC_VREF_NEG_INPUT)
- MCFG_SOUND_ROUTE(0, "rdac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "rdac", -1.0, DAC_VREF_NEG_INPUT)
-MACHINE_CONFIG_END
+ DAC_8BIT_R2R(config, m_ldac, 0).add_route(ALL_OUTPUTS, "lspeaker", 0.5); // unknown DAC
+ DAC_8BIT_R2R(config, m_rdac, 0).add_route(ALL_OUTPUTS, "rspeaker", 0.5); // unknown DAC
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
+ vref.add_route(0, "ldac", 1.0, DAC_VREF_POS_INPUT);
+ vref.add_route(0, "ldac", -1.0, DAC_VREF_NEG_INPUT);
+ vref.add_route(0, "rdac", 1.0, DAC_VREF_POS_INPUT);
+ vref.add_route(0, "rdac", -1.0, DAC_VREF_NEG_INPUT);
+}
void centronics_covox_stereo_device::device_start()
{
diff --git a/src/devices/bus/centronics/ctronics.h b/src/devices/bus/centronics/ctronics.h
index c05d59a94c1..7189c465e98 100644
--- a/src/devices/bus/centronics/ctronics.h
+++ b/src/devices/bus/centronics/ctronics.h
@@ -14,68 +14,6 @@
#include "machine/output_latch.h"
-#define MCFG_CENTRONICS_STROBE_HANDLER(_devcb) \
- downcast<centronics_device &>(*device).set_strobe_handler(DEVCB_##_devcb);
-
-#define MCFG_CENTRONICS_DATA0_HANDLER(_devcb) \
- downcast<centronics_device &>(*device).set_data0_handler(DEVCB_##_devcb);
-
-#define MCFG_CENTRONICS_DATA1_HANDLER(_devcb) \
- downcast<centronics_device &>(*device).set_data1_handler(DEVCB_##_devcb);
-
-#define MCFG_CENTRONICS_DATA2_HANDLER(_devcb) \
- downcast<centronics_device &>(*device).set_data2_handler(DEVCB_##_devcb);
-
-#define MCFG_CENTRONICS_DATA3_HANDLER(_devcb) \
- downcast<centronics_device &>(*device).set_data3_handler(DEVCB_##_devcb);
-
-#define MCFG_CENTRONICS_DATA4_HANDLER(_devcb) \
- downcast<centronics_device &>(*device).set_data4_handler(DEVCB_##_devcb);
-
-#define MCFG_CENTRONICS_DATA5_HANDLER(_devcb) \
- downcast<centronics_device &>(*device).set_data5_handler(DEVCB_##_devcb);
-
-#define MCFG_CENTRONICS_DATA6_HANDLER(_devcb) \
- downcast<centronics_device &>(*device).set_data6_handler(DEVCB_##_devcb);
-
-#define MCFG_CENTRONICS_DATA7_HANDLER(_devcb) \
- downcast<centronics_device &>(*device).set_data7_handler(DEVCB_##_devcb);
-
-#define MCFG_CENTRONICS_ACK_HANDLER(_devcb) \
- downcast<centronics_device &>(*device).set_ack_handler(DEVCB_##_devcb);
-
-#define MCFG_CENTRONICS_BUSY_HANDLER(_devcb) \
- downcast<centronics_device &>(*device).set_busy_handler(DEVCB_##_devcb);
-
-#define MCFG_CENTRONICS_PERROR_HANDLER(_devcb) \
- downcast<centronics_device &>(*device).set_perror_handler(DEVCB_##_devcb);
-
-#define MCFG_CENTRONICS_SELECT_HANDLER(_devcb) \
- downcast<centronics_device &>(*device).set_select_handler(DEVCB_##_devcb);
-
-#define MCFG_CENTRONICS_AUTOFD_HANDLER(_devcb) \
- downcast<centronics_device &>(*device).set_autofd_handler(DEVCB_##_devcb);
-
-#define MCFG_CENTRONICS_FAULT_HANDLER(_devcb) \
- downcast<centronics_device &>(*device).set_fault_handler(DEVCB_##_devcb);
-
-#define MCFG_CENTRONICS_INIT_HANDLER(_devcb) \
- downcast<centronics_device &>(*device).set_init_handler(DEVCB_##_devcb);
-
-#define MCFG_CENTRONICS_SELECT_IN_HANDLER(_devcb) \
- downcast<centronics_device &>(*device).set_select_in_handler(DEVCB_##_devcb);
-
-#define MCFG_CENTRONICS_OUTPUT_LATCH_ADD(_tag, _centronics_tag) \
- MCFG_DEVICE_ADD(_tag, OUTPUT_LATCH, 0) \
- MCFG_OUTPUT_LATCH_BIT0_HANDLER(WRITELINE(_centronics_tag, centronics_device, write_data0)) \
- MCFG_OUTPUT_LATCH_BIT1_HANDLER(WRITELINE(_centronics_tag, centronics_device, write_data1)) \
- MCFG_OUTPUT_LATCH_BIT2_HANDLER(WRITELINE(_centronics_tag, centronics_device, write_data2)) \
- MCFG_OUTPUT_LATCH_BIT3_HANDLER(WRITELINE(_centronics_tag, centronics_device, write_data3)) \
- MCFG_OUTPUT_LATCH_BIT4_HANDLER(WRITELINE(_centronics_tag, centronics_device, write_data4)) \
- MCFG_OUTPUT_LATCH_BIT5_HANDLER(WRITELINE(_centronics_tag, centronics_device, write_data5)) \
- MCFG_OUTPUT_LATCH_BIT6_HANDLER(WRITELINE(_centronics_tag, centronics_device, write_data6)) \
- MCFG_OUTPUT_LATCH_BIT7_HANDLER(WRITELINE(_centronics_tag, centronics_device, write_data7))
-
DECLARE_DEVICE_TYPE(CENTRONICS, centronics_device)
class device_centronics_peripheral_interface;
@@ -97,24 +35,6 @@ public:
}
centronics_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- template <class Object> devcb_base &set_strobe_handler(Object &&cb) { return m_strobe_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_data0_handler(Object &&cb) { return m_data0_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_data1_handler(Object &&cb) { return m_data1_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_data2_handler(Object &&cb) { return m_data2_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_data3_handler(Object &&cb) { return m_data3_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_data4_handler(Object &&cb) { return m_data4_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_data5_handler(Object &&cb) { return m_data5_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_data6_handler(Object &&cb) { return m_data6_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_data7_handler(Object &&cb) { return m_data7_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_ack_handler(Object &&cb) { return m_ack_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_busy_handler(Object &&cb) { return m_busy_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_perror_handler(Object &&cb) { return m_perror_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_select_handler(Object &&cb) { return m_select_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_autofd_handler(Object &&cb) { return m_autofd_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_fault_handler(Object &&cb) { return m_fault_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_init_handler(Object &&cb) { return m_init_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_select_in_handler(Object &&cb) { return m_select_in_handler.set_callback(std::forward<Object>(cb)); }
-
auto strobe_handler() { return m_strobe_handler.bind(); }
auto ack_handler() { return m_ack_handler.bind(); }
diff --git a/src/devices/bus/centronics/digiblst.cpp b/src/devices/bus/centronics/digiblst.cpp
index 99a046f4d13..97a37054172 100644
--- a/src/devices/bus/centronics/digiblst.cpp
+++ b/src/devices/bus/centronics/digiblst.cpp
@@ -38,13 +38,15 @@ centronics_digiblaster_device::centronics_digiblaster_device(const machine_confi
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(centronics_digiblaster_device::device_add_mconfig)
+void centronics_digiblaster_device::device_add_mconfig(machine_config &config)
+{
/* sound hardware */
SPEAKER(config, "speaker").front_center();
- MCFG_DEVICE_ADD("dac", DAC_8BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5) // unknown DAC
- MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
- MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT)
-MACHINE_CONFIG_END
+ DAC_8BIT_R2R(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.5); // unknown DAC
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
+ vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
+ vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
+}
void centronics_digiblaster_device::device_start()
{
diff --git a/src/devices/bus/centronics/epson_lx810l.cpp b/src/devices/bus/centronics/epson_lx810l.cpp
index 848f1246a90..0a0d9668cfc 100644
--- a/src/devices/bus/centronics/epson_lx810l.cpp
+++ b/src/devices/bus/centronics/epson_lx810l.cpp
@@ -142,7 +142,6 @@ void epson_lx810l_device::device_add_mconfig(machine_config &config)
SPEAKER(config, "speaker").front_center();
DAC_1BIT(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.25);
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
- vref.set_output(5.0);
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
/* gate array */
diff --git a/src/devices/bus/centronics/nec_p72.cpp b/src/devices/bus/centronics/nec_p72.cpp
index cd7914a0bde..c3a9ddd2ab2 100644
--- a/src/devices/bus/centronics/nec_p72.cpp
+++ b/src/devices/bus/centronics/nec_p72.cpp
@@ -49,12 +49,12 @@ void nec_p72_device::p72_mem(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(nec_p72_device::device_add_mconfig)
+void nec_p72_device::device_add_mconfig(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", V33, XTAL(16'000'000)/2) /* TODO it's actually a V40 */
- MCFG_DEVICE_PROGRAM_MAP(p72_mem)
-
-MACHINE_CONFIG_END
+ V33(config, m_maincpu, XTAL(16'000'000)/2); /* TODO it's actually a V40 */
+ m_maincpu->set_addrmap(AS_PROGRAM, &nec_p72_device::p72_mem);
+}
//-------------------------------------------------
diff --git a/src/devices/bus/centronics/printer.cpp b/src/devices/bus/centronics/printer.cpp
index 129e53426f4..484e718d074 100644
--- a/src/devices/bus/centronics/printer.cpp
+++ b/src/devices/bus/centronics/printer.cpp
@@ -32,10 +32,11 @@ centronics_printer_device::centronics_printer_device(const machine_config &mconf
//-------------------------------------------------
-MACHINE_CONFIG_START(centronics_printer_device::device_add_mconfig)
- MCFG_DEVICE_ADD("printer", PRINTER, 0)
- MCFG_PRINTER_ONLINE_CB(WRITELINE(*this, centronics_printer_device, printer_online))
-MACHINE_CONFIG_END
+void centronics_printer_device::device_add_mconfig(machine_config &config)
+{
+ PRINTER(config, m_printer, 0);
+ m_printer->online_callback().set(FUNC(centronics_printer_device::printer_online));
+}
/*-------------------------------------------------
printer_online - callback that
diff --git a/src/devices/bus/cgenie/expansion/expansion.cpp b/src/devices/bus/cgenie/expansion/expansion.cpp
index 366b1513aca..3a7665f7c2b 100644
--- a/src/devices/bus/cgenie/expansion/expansion.cpp
+++ b/src/devices/bus/cgenie/expansion/expansion.cpp
@@ -30,8 +30,8 @@ DEFINE_DEVICE_TYPE(CG_EXP_SLOT, cg_exp_slot_device, "cg_exp_slot", "Colour Genie
cg_exp_slot_device::cg_exp_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, CG_EXP_SLOT, tag, owner, clock),
device_slot_interface(mconfig, *this),
- m_program(nullptr),
- m_io(nullptr),
+ m_program(*this, finder_base::DUMMY_TAG, -1),
+ m_io(*this, finder_base::DUMMY_TAG, -1),
m_cart(nullptr),
m_int_handler(*this),
m_nmi_handler(*this),
@@ -67,24 +67,6 @@ void cg_exp_slot_device::device_reset()
{
}
-//-------------------------------------------------
-// set_program_space - set address space we are attached to
-//-------------------------------------------------
-
-void cg_exp_slot_device::set_program_space(address_space *program)
-{
- m_program = program;
-}
-
-//-------------------------------------------------
-// set_io_space - set address space we are attached to
-//-------------------------------------------------
-
-void cg_exp_slot_device::set_io_space(address_space *io)
-{
- m_io = io;
-}
-
//**************************************************************************
// CARTRIDGE INTERFACE
diff --git a/src/devices/bus/cgenie/expansion/expansion.h b/src/devices/bus/cgenie/expansion/expansion.h
index 2dd6f659f5e..3f61b275c19 100644
--- a/src/devices/bus/cgenie/expansion/expansion.h
+++ b/src/devices/bus/cgenie/expansion/expansion.h
@@ -39,24 +39,8 @@
#pragma once
-
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_CG_EXP_SLOT_ADD(_tag) \
- MCFG_DEVICE_ADD(_tag, CG_EXP_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(cg_exp_slot_carts, nullptr, false)
-
-#define MCFG_CG_EXP_SLOT_INT_HANDLER(_devcb) \
- downcast<cg_exp_slot_device &>(*device).set_int_handler(DEVCB_##_devcb);
-
-#define MCFG_CG_EXP_SLOT_NMI_HANDLER(_devcb) \
- downcast<cg_exp_slot_device &>(*device).set_nmi_handler(DEVCB_##_devcb);
-
-#define MCFG_CG_EXP_SLOT_RESET_HANDLER(_devcb) \
- downcast<cg_exp_slot_device &>(*device).set_reset_handler(DEVCB_##_devcb);
+// include here so drivers don't need to
+#include "carts.h"
//**************************************************************************
@@ -69,24 +53,32 @@ class cg_exp_slot_device : public device_t, public device_slot_interface
{
public:
// construction/destruction
+ cg_exp_slot_device(machine_config const &mconfig, char const *tag, device_t *owner)
+ : cg_exp_slot_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ option_reset();
+ cg_exp_slot_carts(*this);
+ set_default_option(nullptr);
+ set_fixed(false);
+ }
cg_exp_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~cg_exp_slot_device();
- void set_program_space(address_space *program);
- void set_io_space(address_space *io);
+ template <typename T> void set_program_space(T &&tag, int spacenum) { m_program.set_tag(std::forward<T>(tag), spacenum); }
+ template <typename T> void set_io_space(T &&tag, int spacenum) { m_io.set_tag(std::forward<T>(tag), spacenum); }
// callbacks
- template <class Object> devcb_base &set_int_handler(Object &&cb) { return m_int_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_nmi_handler(Object &&cb) { return m_nmi_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_reset_handler(Object &&cb) { return m_reset_handler.set_callback(std::forward<Object>(cb)); }
+ auto int_handler() { return m_int_handler.bind(); }
+ auto nmi_handler() { return m_nmi_handler.bind(); }
+ auto reset_handler() { return m_reset_handler.bind(); }
// called from cart device
DECLARE_WRITE_LINE_MEMBER( int_w ) { m_int_handler(state); }
DECLARE_WRITE_LINE_MEMBER( nmi_w ) { m_nmi_handler(state); }
DECLARE_WRITE_LINE_MEMBER( reset_w ) { m_reset_handler(state); }
- address_space *m_program;
- address_space *m_io;
+ required_address_space m_program;
+ required_address_space m_io;
protected:
// device-level overrides
@@ -117,7 +109,4 @@ protected:
// device type definition
DECLARE_DEVICE_TYPE(CG_EXP_SLOT, cg_exp_slot_device)
-// include here so drivers don't need to
-#include "carts.h"
-
#endif // MAME_BUS_CGENIE_EXPANSION_EXPANSION_H
diff --git a/src/devices/bus/cgenie/expansion/floppy.cpp b/src/devices/bus/cgenie/expansion/floppy.cpp
index 021f00e9f8d..331fdfd207e 100644
--- a/src/devices/bus/cgenie/expansion/floppy.cpp
+++ b/src/devices/bus/cgenie/expansion/floppy.cpp
@@ -72,23 +72,23 @@ const tiny_rom_entry *cgenie_fdc_device::device_rom_region() const
//-------------------------------------------------
MACHINE_CONFIG_START(cgenie_fdc_device::device_add_mconfig)
- MCFG_TIMER_DRIVER_ADD_PERIODIC("timer", cgenie_fdc_device, timer_callback, attotime::from_msec(25))
+ TIMER(config, "timer").configure_periodic(FUNC(cgenie_fdc_device::timer_callback), attotime::from_msec(25));
FD1793(config, m_fdc, 1_MHz_XTAL);
m_fdc->intrq_wr_callback().set(FUNC(cgenie_fdc_device::intrq_w));
- MCFG_FLOPPY_DRIVE_ADD("fd1793:0", cgenie_floppies, "ssdd", cgenie_fdc_device::floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD("fd1793:1", cgenie_floppies, "ssdd", cgenie_fdc_device::floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD("fd1793:2", cgenie_floppies, nullptr, cgenie_fdc_device::floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD("fd1793:3", cgenie_floppies, nullptr, cgenie_fdc_device::floppy_formats)
+ FLOPPY_CONNECTOR(config, "fd1793:0", cgenie_floppies, "ssdd", cgenie_fdc_device::floppy_formats);
+ FLOPPY_CONNECTOR(config, "fd1793:1", cgenie_floppies, "ssdd", cgenie_fdc_device::floppy_formats);
+ FLOPPY_CONNECTOR(config, "fd1793:2", cgenie_floppies, nullptr, cgenie_fdc_device::floppy_formats);
+ FLOPPY_CONNECTOR(config, "fd1793:3", cgenie_floppies, nullptr, cgenie_fdc_device::floppy_formats);
-// MCFG_SOFTWARE_LIST_ADD("floppy_list", "cgenie_flop")
+// SOFTWARE_LIST(config, "floppy_list").set_original("cgenie_flop");
MCFG_GENERIC_SOCKET_ADD("socket", generic_plain_slot, "cgenie_flop_rom")
MCFG_GENERIC_EXTENSIONS("bin,rom")
MCFG_GENERIC_LOAD(cgenie_fdc_device, socket_load)
- MCFG_SOFTWARE_LIST_ADD("rom_list", "cgenie_flop_rom")
+ SOFTWARE_LIST(config, "rom_list").set_original("cgenie_flop_rom");
MACHINE_CONFIG_END
@@ -137,7 +137,7 @@ void cgenie_fdc_device::device_reset()
// map extra socket
if (m_socket->exists())
{
- m_slot->m_program->install_read_handler(0xe000, 0xefff, read8_delegate(FUNC(generic_slot_device::read_rom), (generic_slot_device *) m_socket));
+ m_slot->m_program->install_read_handler(0xe000, 0xefff, read8sm_delegate(FUNC(generic_slot_device::read_rom), (generic_slot_device *) m_socket));
}
}
diff --git a/src/devices/bus/cgenie/parallel/parallel.h b/src/devices/bus/cgenie/parallel/parallel.h
index 9bc8d5665c4..b31f8c749f4 100644
--- a/src/devices/bus/cgenie/parallel/parallel.h
+++ b/src/devices/bus/cgenie/parallel/parallel.h
@@ -24,16 +24,8 @@
#pragma once
-
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_CG_PARALLEL_SLOT_ADD(_tag) \
- MCFG_DEVICE_ADD(_tag, CG_PARALLEL_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(cg_parallel_slot_carts, nullptr, false)
-
+// include here so drivers don't need to
+#include "carts.h"
//**************************************************************************
// TYPE DEFINITIONS
@@ -45,6 +37,14 @@ class cg_parallel_slot_device : public device_t, public device_slot_interface
{
public:
// construction/destruction
+ cg_parallel_slot_device(machine_config const &mconfig, char const *tag, device_t *owner)
+ : cg_parallel_slot_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ option_reset();
+ cg_parallel_slot_carts(*this);
+ set_default_option(nullptr);
+ set_fixed(false);
+ }
cg_parallel_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~cg_parallel_slot_device();
@@ -86,7 +86,4 @@ protected:
// device type definition
DECLARE_DEVICE_TYPE(CG_PARALLEL_SLOT, cg_parallel_slot_device)
-// include here so drivers don't need to
-#include "carts.h"
-
#endif // MAME_BUS_CGENIE_PARALLEL_PARALLEL_H
diff --git a/src/devices/bus/cgenie/parallel/printer.cpp b/src/devices/bus/cgenie/parallel/printer.cpp
index bce52a61c97..9a3e9df5dc4 100644
--- a/src/devices/bus/cgenie/parallel/printer.cpp
+++ b/src/devices/bus/cgenie/parallel/printer.cpp
@@ -27,14 +27,17 @@ DEFINE_DEVICE_TYPE(CGENIE_PRINTER, cgenie_printer_device, "cgenie_printer", "Pri
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(cgenie_printer_device::device_add_mconfig)
- MCFG_DEVICE_ADD(m_centronics, CENTRONICS, centronics_devices, "printer")
- MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(*this, cgenie_printer_device, busy_w))
- MCFG_CENTRONICS_PERROR_HANDLER(WRITELINE(*this, cgenie_printer_device, perror_w))
- MCFG_CENTRONICS_SELECT_HANDLER(WRITELINE(*this, cgenie_printer_device, select_w))
- MCFG_CENTRONICS_FAULT_HANDLER(WRITELINE(*this, cgenie_printer_device, fault_w))
- MCFG_CENTRONICS_OUTPUT_LATCH_ADD("latch", "centronics")
-MACHINE_CONFIG_END
+void cgenie_printer_device::device_add_mconfig(machine_config &config)
+{
+ CENTRONICS(config, m_centronics, centronics_devices, "printer");
+ m_centronics->busy_handler().set(FUNC(cgenie_printer_device::busy_w));
+ m_centronics->perror_handler().set(FUNC(cgenie_printer_device::perror_w));
+ m_centronics->select_handler().set(FUNC(cgenie_printer_device::select_w));
+ m_centronics->fault_handler().set(FUNC(cgenie_printer_device::fault_w));
+
+ OUTPUT_LATCH(config, m_latch);
+ m_centronics->set_output_latch(*m_latch);
+}
//**************************************************************************
diff --git a/src/devices/bus/chanf/slot.h b/src/devices/bus/chanf/slot.h
index 289c1b3e600..d2f9654e8cd 100644
--- a/src/devices/bus/chanf/slot.h
+++ b/src/devices/bus/chanf/slot.h
@@ -64,7 +64,17 @@ class channelf_cart_slot_device : public device_t,
{
public:
// construction/destruction
- channelf_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ channelf_cart_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : channelf_cart_slot_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ channelf_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
virtual ~channelf_cart_slot_device();
// device-level overrides
@@ -115,8 +125,4 @@ DECLARE_DEVICE_TYPE(CHANF_CART_SLOT, channelf_cart_slot_device)
#define CHANFSLOT_ROM_REGION_TAG ":cart:rom"
-#define MCFG_CHANNELF_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_tag, CHANF_CART_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
#endif // MAME_BUS_CHANF_SLOT_H
diff --git a/src/devices/bus/coco/coco_dcmodem.cpp b/src/devices/bus/coco/coco_dcmodem.cpp
index cad760775b7..bebd6c275d5 100644
--- a/src/devices/bus/coco/coco_dcmodem.cpp
+++ b/src/devices/bus/coco/coco_dcmodem.cpp
@@ -58,8 +58,8 @@ namespace
virtual void device_start() override
{
install_readwrite_handler(0xFF6C, 0xFF6F,
- read8_delegate(FUNC(mos6551_device::read), (mos6551_device *)m_uart),
- write8_delegate(FUNC(mos6551_device::write), (mos6551_device *)m_uart));
+ read8sm_delegate(FUNC(mos6551_device::read), (mos6551_device *)m_uart),
+ write8sm_delegate(FUNC(mos6551_device::write), (mos6551_device *)m_uart));
}
virtual const tiny_rom_entry *device_rom_region() const override;
@@ -70,6 +70,11 @@ namespace
return memregion("eprom")->base();
}
+ virtual memory_region* get_cart_memregion() override
+ {
+ return memregion("eprom");
+ }
+
private:
// internal state
required_device<mos6551_device> m_uart;
diff --git a/src/devices/bus/coco/coco_fdc.cpp b/src/devices/bus/coco/coco_fdc.cpp
index db8df415ee3..79658d27d60 100644
--- a/src/devices/bus/coco/coco_fdc.cpp
+++ b/src/devices/bus/coco/coco_fdc.cpp
@@ -180,6 +180,15 @@ uint8_t* coco_family_fdc_device_base::get_cart_base()
return memregion("eprom")->base();
}
+//-------------------------------------------------
+// coco_family_fdc_device_base::get_cart_memregion
+//-------------------------------------------------
+
+memory_region* coco_family_fdc_device_base::get_cart_memregion()
+{
+ return memregion("eprom");
+}
+
//***************************************************************************
// COCO FDCs
@@ -334,17 +343,17 @@ READ8_MEMBER(coco_fdc_device_base::scs_read)
case 0x38: /* FF78 */
if (real_time_clock() == rtc_type::CLOUD9)
- m_ds1315->read_0(space, offset);
+ m_ds1315->read_0();
break;
case 0x39: /* FF79 */
if (real_time_clock() == rtc_type::CLOUD9)
- m_ds1315->read_1(space, offset);
+ m_ds1315->read_1();
break;
case 0x3C: /* FF7C */
if (real_time_clock() == rtc_type::CLOUD9)
- result = m_ds1315->read_data(space, offset);
+ result = m_ds1315->read_data();
break;
}
return result;
diff --git a/src/devices/bus/coco/coco_fdc.h b/src/devices/bus/coco/coco_fdc.h
index a8df8313a7c..2568ed51bd0 100644
--- a/src/devices/bus/coco/coco_fdc.h
+++ b/src/devices/bus/coco/coco_fdc.h
@@ -46,6 +46,7 @@ protected:
// FDC overrides
virtual void update_lines() = 0;
virtual uint8_t* get_cart_base() override;
+ virtual memory_region* get_cart_memregion() override;
// accessors
uint8_t dskreg() const { return m_dskreg; }
diff --git a/src/devices/bus/coco/coco_gmc.cpp b/src/devices/bus/coco/coco_gmc.cpp
index 706bdf3cb1b..72c9edfdc80 100644
--- a/src/devices/bus/coco/coco_gmc.cpp
+++ b/src/devices/bus/coco/coco_gmc.cpp
@@ -51,11 +51,11 @@ namespace
};
-MACHINE_CONFIG_START(coco_pak_gmc_device::device_add_mconfig)
+void coco_pak_gmc_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "gmc_speaker").front_center();
- MCFG_DEVICE_ADD(SN76489AN_TAG, SN76489A, 4_MHz_XTAL)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "gmc_speaker", 1.0)
-MACHINE_CONFIG_END
+ SN76489A(config, m_psg, 4_MHz_XTAL).add_route(ALL_OUTPUTS, "gmc_speaker", 1.0);
+}
//**************************************************************************
diff --git a/src/devices/bus/coco/coco_multi.cpp b/src/devices/bus/coco/coco_multi.cpp
index 60a2b99286c..628a550fe07 100644
--- a/src/devices/bus/coco/coco_multi.cpp
+++ b/src/devices/bus/coco/coco_multi.cpp
@@ -96,29 +96,6 @@ namespace
// construction/destruction
coco_multipak_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- // optional information overrides
- virtual void device_add_mconfig(machine_config &config) override;
-
- virtual uint8_t* get_cart_base() override;
- virtual uint32_t get_cart_size() override;
-
- // these are only public so they can be in a MACHINE_CONFIG_START
- // declaration; don't think about them as publically accessable
- DECLARE_WRITE_LINE_MEMBER(multi_slot1_cart_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot1_nmi_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot1_halt_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot2_cart_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot2_nmi_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot2_halt_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot3_cart_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot3_nmi_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot3_halt_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot4_cart_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot4_nmi_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot4_halt_w);
-
- virtual address_space &cartridge_space() override;
- virtual ioport_constructor device_input_ports() const override;
INPUT_CHANGED_MEMBER( switch_changed );
protected:
@@ -129,6 +106,15 @@ namespace
virtual WRITE8_MEMBER(scs_write) override;
virtual void set_sound_enable(bool sound_enable) override;
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ virtual uint8_t* get_cart_base() override;
+ virtual uint32_t get_cart_size() override;
+
+ virtual address_space &cartridge_space() override;
+ virtual ioport_constructor device_input_ports() const override;
+
private:
// device references
required_device_array<cococart_slot_device, 4> m_slots;
@@ -149,6 +135,19 @@ namespace
DECLARE_READ8_MEMBER(ff7f_read);
DECLARE_WRITE8_MEMBER(ff7f_write);
void update_line(int slot_number, line ln);
+
+ DECLARE_WRITE_LINE_MEMBER(multi_slot1_cart_w);
+ DECLARE_WRITE_LINE_MEMBER(multi_slot1_nmi_w);
+ DECLARE_WRITE_LINE_MEMBER(multi_slot1_halt_w);
+ DECLARE_WRITE_LINE_MEMBER(multi_slot2_cart_w);
+ DECLARE_WRITE_LINE_MEMBER(multi_slot2_nmi_w);
+ DECLARE_WRITE_LINE_MEMBER(multi_slot2_halt_w);
+ DECLARE_WRITE_LINE_MEMBER(multi_slot3_cart_w);
+ DECLARE_WRITE_LINE_MEMBER(multi_slot3_nmi_w);
+ DECLARE_WRITE_LINE_MEMBER(multi_slot3_halt_w);
+ DECLARE_WRITE_LINE_MEMBER(multi_slot4_cart_w);
+ DECLARE_WRITE_LINE_MEMBER(multi_slot4_nmi_w);
+ DECLARE_WRITE_LINE_MEMBER(multi_slot4_halt_w);
};
};
@@ -182,24 +181,25 @@ static void coco_cart_slot4(device_slot_interface &device)
}
-MACHINE_CONFIG_START(coco_multipak_device::device_add_mconfig)
- MCFG_COCO_CARTRIDGE_ADD(SLOT1_TAG, coco_cart_slot1_3, nullptr)
- MCFG_COCO_CARTRIDGE_CART_CB(WRITELINE(DEVICE_SELF, coco_multipak_device, multi_slot1_cart_w))
- MCFG_COCO_CARTRIDGE_NMI_CB(WRITELINE(DEVICE_SELF, coco_multipak_device, multi_slot1_nmi_w))
- MCFG_COCO_CARTRIDGE_HALT_CB(WRITELINE(DEVICE_SELF, coco_multipak_device, multi_slot1_halt_w))
- MCFG_COCO_CARTRIDGE_ADD(SLOT2_TAG, coco_cart_slot1_3, nullptr)
- MCFG_COCO_CARTRIDGE_CART_CB(WRITELINE(DEVICE_SELF, coco_multipak_device, multi_slot2_cart_w))
- MCFG_COCO_CARTRIDGE_NMI_CB(WRITELINE(DEVICE_SELF, coco_multipak_device, multi_slot2_nmi_w))
- MCFG_COCO_CARTRIDGE_HALT_CB(WRITELINE(DEVICE_SELF, coco_multipak_device, multi_slot2_halt_w))
- MCFG_COCO_CARTRIDGE_ADD(SLOT3_TAG, coco_cart_slot1_3, nullptr)
- MCFG_COCO_CARTRIDGE_CART_CB(WRITELINE(DEVICE_SELF, coco_multipak_device, multi_slot3_cart_w))
- MCFG_COCO_CARTRIDGE_NMI_CB(WRITELINE(DEVICE_SELF, coco_multipak_device, multi_slot3_nmi_w))
- MCFG_COCO_CARTRIDGE_HALT_CB(WRITELINE(DEVICE_SELF, coco_multipak_device, multi_slot3_halt_w))
- MCFG_COCO_CARTRIDGE_ADD(SLOT4_TAG, coco_cart_slot4, "fdcv11")
- MCFG_COCO_CARTRIDGE_CART_CB(WRITELINE(DEVICE_SELF, coco_multipak_device, multi_slot4_cart_w))
- MCFG_COCO_CARTRIDGE_NMI_CB(WRITELINE(DEVICE_SELF, coco_multipak_device, multi_slot4_nmi_w))
- MCFG_COCO_CARTRIDGE_HALT_CB(WRITELINE(DEVICE_SELF, coco_multipak_device, multi_slot4_halt_w))
-MACHINE_CONFIG_END
+void coco_multipak_device::device_add_mconfig(machine_config &config)
+{
+ COCOCART_SLOT(config, m_slots[0], DERIVED_CLOCK(1, 1), coco_cart_slot1_3, nullptr);
+ m_slots[0]->cart_callback().set(FUNC(coco_multipak_device::multi_slot1_cart_w));
+ m_slots[0]->nmi_callback().set(FUNC(coco_multipak_device::multi_slot1_nmi_w));
+ m_slots[0]->halt_callback().set(FUNC(coco_multipak_device::multi_slot1_halt_w));
+ COCOCART_SLOT(config, m_slots[1], DERIVED_CLOCK(1, 1), coco_cart_slot1_3, nullptr);
+ m_slots[1]->cart_callback().set(FUNC(coco_multipak_device::multi_slot2_cart_w));
+ m_slots[1]->nmi_callback().set(FUNC(coco_multipak_device::multi_slot2_nmi_w));
+ m_slots[1]->halt_callback().set(FUNC(coco_multipak_device::multi_slot2_halt_w));
+ COCOCART_SLOT(config, m_slots[2], DERIVED_CLOCK(1, 1), coco_cart_slot1_3, nullptr);
+ m_slots[2]->cart_callback().set(FUNC(coco_multipak_device::multi_slot3_cart_w));
+ m_slots[2]->nmi_callback().set(FUNC(coco_multipak_device::multi_slot3_nmi_w));
+ m_slots[2]->halt_callback().set(FUNC(coco_multipak_device::multi_slot3_halt_w));
+ COCOCART_SLOT(config, m_slots[3], DERIVED_CLOCK(1, 1), coco_cart_slot4, "fdcv11");
+ m_slots[3]->cart_callback().set(FUNC(coco_multipak_device::multi_slot4_cart_w));
+ m_slots[3]->nmi_callback().set(FUNC(coco_multipak_device::multi_slot4_nmi_w));
+ m_slots[3]->halt_callback().set(FUNC(coco_multipak_device::multi_slot4_halt_w));
+}
INPUT_PORTS_START( coco_multipack )
PORT_START( SWITCH_CONFIG_TAG )
diff --git a/src/devices/bus/coco/coco_orch90.cpp b/src/devices/bus/coco/coco_orch90.cpp
index 979acd423a1..2ad8afdaae1 100644
--- a/src/devices/bus/coco/coco_orch90.cpp
+++ b/src/devices/bus/coco/coco_orch90.cpp
@@ -92,6 +92,11 @@ namespace
return memregion("eprom")->base();
}
+ virtual memory_region* get_cart_memregion() override
+ {
+ return memregion("eprom");
+ }
+
private:
WRITE8_MEMBER(write_left) { m_ldac->write(data); }
WRITE8_MEMBER(write_right) { m_rdac->write(data); }
@@ -107,15 +112,16 @@ namespace
// MACHINE AND ROM DECLARATIONS
//**************************************************************************
-MACHINE_CONFIG_START(coco_orch90_device::device_add_mconfig)
+void coco_orch90_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("ldac", DAC_8BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.5) // ls374.ic5 + r7 (8x20k) + r9 (8x10k)
- MCFG_DEVICE_ADD("rdac", DAC_8BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.5) // ls374.ic4 + r6 (8x20k) + r8 (8x10k)
- MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
- MCFG_SOUND_ROUTE(0, "ldac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "ldac", -1.0, DAC_VREF_NEG_INPUT)
- MCFG_SOUND_ROUTE(0, "rdac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "rdac", -1.0, DAC_VREF_NEG_INPUT)
-MACHINE_CONFIG_END
+ DAC_8BIT_R2R(config, m_ldac, 0).add_route(ALL_OUTPUTS, "lspeaker", 0.5); // ls374.ic5 + r7 (8x20k) + r9 (8x10k)
+ DAC_8BIT_R2R(config, m_rdac, 0).add_route(ALL_OUTPUTS, "rspeaker", 0.5); // ls374.ic4 + r6 (8x20k) + r8 (8x10k)
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
+ vref.add_route(0, "ldac", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "ldac", -1.0, DAC_VREF_NEG_INPUT);
+ vref.add_route(0, "rdac", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "rdac", -1.0, DAC_VREF_NEG_INPUT);
+}
//**************************************************************************
diff --git a/src/devices/bus/coco/coco_rs232.cpp b/src/devices/bus/coco/coco_rs232.cpp
index 802d46251ad..5a124986792 100644
--- a/src/devices/bus/coco/coco_rs232.cpp
+++ b/src/devices/bus/coco/coco_rs232.cpp
@@ -56,8 +56,8 @@ namespace
virtual void device_start() override
{
install_readwrite_handler(0xFF68, 0xFF6B,
- read8_delegate(FUNC(mos6551_device::read), (mos6551_device *)m_uart),
- write8_delegate(FUNC(mos6551_device::write), (mos6551_device *)m_uart));
+ read8sm_delegate(FUNC(mos6551_device::read), (mos6551_device *)m_uart),
+ write8sm_delegate(FUNC(mos6551_device::write), (mos6551_device *)m_uart));
}
virtual const tiny_rom_entry *device_rom_region() const override;
@@ -68,6 +68,11 @@ namespace
return memregion("eprom")->base();
}
+ virtual memory_region* get_cart_memregion() override
+ {
+ return memregion("eprom");
+ }
+
private:
// internal state
required_device<mos6551_device> m_uart;
diff --git a/src/devices/bus/coco/coco_ssc.cpp b/src/devices/bus/coco/coco_ssc.cpp
index 8840df18835..6dcd34a8f03 100644
--- a/src/devices/bus/coco/coco_ssc.cpp
+++ b/src/devices/bus/coco/coco_ssc.cpp
@@ -152,7 +152,8 @@ DEFINE_DEVICE_TYPE(COCOSSC_SAC, cocossc_sac_device, "cocossc_sac", "CoCo SSC Sou
// MACHINE FRAGMENTS AND ADDRESS MAPS
//**************************************************************************
-MACHINE_CONFIG_START(coco_ssc_device::device_add_mconfig)
+void coco_ssc_device::device_add_mconfig(machine_config &config)
+{
TMS7040(config, m_tms7040, DERIVED_CLOCK(2, 1));
m_tms7040->in_porta().set(FUNC(coco_ssc_device::ssc_port_a_r));
m_tms7040->out_portb().set(FUNC(coco_ssc_device::ssc_port_b_w));
@@ -173,9 +174,9 @@ MACHINE_CONFIG_START(coco_ssc_device::device_add_mconfig)
m_ay->set_flags(AY8910_SINGLE_OUTPUT);
m_ay->add_route(ALL_OUTPUTS, "coco_sac_tag", AY8913_GAIN);
- MCFG_DEVICE_ADD("coco_sac_tag", COCOSSC_SAC, DERIVED_CLOCK(2, 1))
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "ssc_audio", 1.0)
-MACHINE_CONFIG_END
+ COCOSSC_SAC(config, m_sac, DERIVED_CLOCK(2, 1));
+ m_sac->add_route(ALL_OUTPUTS, "ssc_audio", 1.0);
+}
ROM_START(coco_ssc)
ROM_REGION(0x1000, PIC_TAG, 0)
@@ -437,12 +438,12 @@ WRITE8_MEMBER(coco_ssc_device::ssc_port_c_w)
{
if( (data & (C_BDR|C_BC1)) == (C_BDR|C_BC1) ) /* BDIR = 1, BC1 = 1: latch address */
{
- m_ay->address_w(space, 0, m_tms7000_portd);
+ m_ay->address_w(m_tms7000_portd);
}
if( ((data & C_BDR) == C_BDR) && ((data & C_BC1) == 0) ) /* BDIR = 1, BC1 = 0: write data */
{
- m_ay->data_w(space, 0, m_tms7000_portd);
+ m_ay->data_w(m_tms7000_portd);
}
}
@@ -492,7 +493,7 @@ READ8_MEMBER(coco_ssc_device::ssc_port_d_r)
{
if( ((m_tms7000_portc & C_BDR) == 0) && ((m_tms7000_portc & C_BC1) == C_BC1) ) /* psg read data */
{
- m_tms7000_portd = m_ay->data_r(space, 0);
+ m_tms7000_portd = m_ay->data_r();
}
}
diff --git a/src/devices/bus/coco/coco_t4426.cpp b/src/devices/bus/coco/coco_t4426.cpp
index eaa6f651ef2..11c4499990a 100644
--- a/src/devices/bus/coco/coco_t4426.cpp
+++ b/src/devices/bus/coco/coco_t4426.cpp
@@ -332,16 +332,13 @@ READ8_MEMBER(coco_t4426_device::scs_read)
if ((offset >= 0x00) && (offset <= 0x07))
{
LOGPIA("- PIA\n");
- result = m_pia->read(space, offset & 3);
+ result = m_pia->read(offset & 3);
LOGPIA("- Offs:%04x Data:%02x\n", offset - 0x04, result);
}
else if ((offset >= 0x08) && (offset <= 0x0f) && (offset & 2))
{
LOGACIA("- ACIA\n");
- if (offset & 1)
- result = m_uart->status_r(space, offset & 1);
- else
- result = m_uart->data_r(space, offset & 1);
+ result = m_uart->read(offset & 1);
LOGACIA("- Offs:%04x Data:%02x\n", offset - 0x04, result);
}
else
@@ -366,15 +363,12 @@ WRITE8_MEMBER(coco_t4426_device::scs_write)
if ((offset >= 0x00) && (offset <= 0x07))
{
LOG("- PIA\n");
- m_pia->write(space, offset & 3, data);
+ m_pia->write(offset & 3, data);
}
else if ((offset >= 0x08) && (offset <= 0x0f) && (offset & 2))
{
LOGACIA("- ACIA");
- if (offset & 1)
- m_uart->control_w(space, offset & 1, data);
- else
- m_uart->data_w(space, offset & 1, data);
+ m_uart->write(offset & 1, data);
LOGACIA(" - Offs:%04x Data:%02x\n", offset & 1, data);
}
else
diff --git a/src/devices/bus/coco/cococart.cpp b/src/devices/bus/coco/cococart.cpp
index 2c009aa8724..6bf6360d24b 100644
--- a/src/devices/bus/coco/cococart.cpp
+++ b/src/devices/bus/coco/cococart.cpp
@@ -412,11 +412,11 @@ image_init_result cococart_slot_device::call_load()
{
memory_region *cart_mem = m_cart->get_cart_memregion();
uint8_t *base = cart_mem->base();
- offs_t read_length, cart_legnth = cart_mem->bytes();;
+ offs_t read_length, cart_length = cart_mem->bytes();;
if (!loaded_through_softlist())
{
- read_length = fread(base, cart_legnth);
+ read_length = fread(base, cart_length);
}
else
{
@@ -424,7 +424,7 @@ image_init_result cococart_slot_device::call_load()
memcpy(base, get_software_region("rom"), read_length);
}
- while (read_length < cart_legnth)
+ while (read_length < cart_length)
{
offs_t len = std::min(read_length, m_cart->get_cart_size() - read_length);
memcpy(base + read_length, base, len);
@@ -597,40 +597,6 @@ address_space &device_cococart_interface::cartridge_space()
//-------------------------------------------------
-// install_read_handler
-//-------------------------------------------------
-
-void device_cococart_interface::install_read_handler(uint16_t addrstart, uint16_t addrend, read8_delegate rhandler)
-{
- address_space &space(cartridge_space());
- space.install_read_handler(addrstart, addrend, rhandler);
-}
-
-
-//-------------------------------------------------
-// install_write_handler
-//-------------------------------------------------
-
-void device_cococart_interface::install_write_handler(uint16_t addrstart, uint16_t addrend, write8_delegate whandler)
-{
- address_space &space(cartridge_space());
- space.install_write_handler(addrstart, addrend, whandler);
-}
-
-
-//-------------------------------------------------
-// install_readwrite_handler
-//-------------------------------------------------
-
-void device_cococart_interface::install_readwrite_handler(uint16_t addrstart, uint16_t addrend, read8_delegate rhandler, write8_delegate whandler)
-{
- address_space &space(cartridge_space());
- space.install_read_handler(addrstart, addrend, rhandler);
- space.install_write_handler(addrstart, addrend, whandler);
-}
-
-
-//-------------------------------------------------
// set_line_value
//-------------------------------------------------
diff --git a/src/devices/bus/coco/cococart.h b/src/devices/bus/coco/cococart.h
index 2d5d37fd443..c559a2eea53 100644
--- a/src/devices/bus/coco/cococart.h
+++ b/src/devices/bus/coco/cococart.h
@@ -25,15 +25,6 @@
// direct region update handler
typedef delegate<void (uint8_t *)> cococart_base_update_delegate;
-#define MCFG_COCO_CARTRIDGE_CART_CB(_devcb) \
- downcast<cococart_slot_device &>(*device).set_cart_callback(DEVCB_##_devcb);
-
-#define MCFG_COCO_CARTRIDGE_NMI_CB(_devcb) \
- downcast<cococart_slot_device &>(*device).set_nmi_callback(DEVCB_##_devcb);
-
-#define MCFG_COCO_CARTRIDGE_HALT_CB(_devcb) \
- downcast<cococart_slot_device &>(*device).set_halt_callback(DEVCB_##_devcb);
-
// ======================> cococart_slot_device
class device_cococart_interface;
@@ -72,9 +63,6 @@ public:
}
cococart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- template <class Object> devcb_base &set_cart_callback(Object &&cb) { return m_cart_callback.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_nmi_callback(Object &&cb) { return m_nmi_callback.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_halt_callback(Object &&cb) { return m_halt_callback.set_callback(std::forward<Object>(cb)); }
auto cart_callback() { return m_cart_callback.bind(); }
auto nmi_callback() { return m_nmi_callback.bind(); }
auto halt_callback() { return m_halt_callback.bind(); }
@@ -199,9 +187,25 @@ protected:
// cartridges (e.g. - Orch-90, Multi-Pak interface) for their control registers, independently
// of the SCS or CTS lines
address_space &cartridge_space();
- void install_read_handler(uint16_t addrstart, uint16_t addrend, read8_delegate rhandler);
- void install_write_handler(uint16_t addrstart, uint16_t addrend, write8_delegate whandler);
- void install_readwrite_handler(uint16_t addrstart, uint16_t addrend, read8_delegate rhandler, write8_delegate whandler);
+ template <typename R>
+ void install_read_handler(u16 addrstart, u16 addrend, R &&rhandler)
+ {
+ address_space &space(cartridge_space());
+ space.install_read_handler(addrstart, addrend, std::forward<R>(rhandler));
+ }
+ template <typename W>
+ void install_write_handler(u16 addrstart, u16 addrend, W &&whandler)
+ {
+ address_space &space(cartridge_space());
+ space.install_write_handler(addrstart, addrend, std::forward<W>(whandler));
+ }
+ template <typename R, typename W>
+ void install_readwrite_handler(u16 addrstart, u16 addrend, R &&rhandler, W &&whandler)
+ {
+ address_space &space(cartridge_space());
+ space.install_read_handler(addrstart, addrend, std::forward<R>(rhandler));
+ space.install_write_handler(addrstart, addrend, std::forward<W>(whandler));
+ }
// setting line values
void set_line_value(cococart_slot_device::line line, cococart_slot_device::line_value value);
@@ -216,16 +220,4 @@ private:
device_cococart_host_interface * m_host;
};
-
-/***************************************************************************
- DEVICE CONFIGURATION MACROS
-***************************************************************************/
-
-#define MCFG_COCO_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_tag, COCOCART_SLOT, DERIVED_CLOCK(1, 1)) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-#define MCFG_COCO_CARTRIDGE_REMOVE(_tag) \
- MCFG_DEVICE_REMOVE(_tag)
-
#endif // MAME_BUS_COCO_COCOCART_H
diff --git a/src/devices/bus/coco/dragon_jcbsnd.cpp b/src/devices/bus/coco/dragon_jcbsnd.cpp
index 8fae5eaf8df..efb2bc42a62 100644
--- a/src/devices/bus/coco/dragon_jcbsnd.cpp
+++ b/src/devices/bus/coco/dragon_jcbsnd.cpp
@@ -22,7 +22,7 @@
ROM_START( dragon_jcbsnd )
- ROM_REGION(0x8000, "eprom", ROMREGION_ERASE00)
+ ROM_REGION(0x1000, "eprom", ROMREGION_ERASE00)
ROM_LOAD("d32sem.rom", 0x0000, 0x1000, CRC(4cd0f30b) SHA1(d07bb9272e3d3928059853730ff656905a80b68e))
ROM_END
@@ -53,8 +53,8 @@ dragon_jcbsnd_device::dragon_jcbsnd_device(const machine_config &mconfig, const
void dragon_jcbsnd_device::device_start()
{
- install_write_handler(0xfefe, 0xfefe, write8_delegate(FUNC(ay8910_device::address_w), (ay8910_device *)m_ay8910));
- install_readwrite_handler(0xfeff, 0xfeff, read8_delegate(FUNC(ay8910_device::data_r), (ay8910_device *)m_ay8910), write8_delegate(FUNC(ay8910_device::data_w), (ay8910_device *)m_ay8910));
+ install_write_handler(0xfefe, 0xfefe, write8smo_delegate(FUNC(ay8910_device::address_w), (ay8910_device *)m_ay8910));
+ install_readwrite_handler(0xfeff, 0xfeff, read8smo_delegate(FUNC(ay8910_device::data_r), (ay8910_device *)m_ay8910), write8smo_delegate(FUNC(ay8910_device::data_w), (ay8910_device *)m_ay8910));
set_line_value(line::CART, line_value::Q);
}
@@ -69,6 +69,15 @@ uint8_t* dragon_jcbsnd_device::get_cart_base()
}
//-------------------------------------------------
+// dragon_jcbsnd_device::get_cart_memregion
+//-------------------------------------------------
+
+memory_region* dragon_jcbsnd_device::get_cart_memregion()
+{
+ return memregion("eprom");
+}
+
+//-------------------------------------------------
// device_add_mconfig - add device configuration
//-------------------------------------------------
diff --git a/src/devices/bus/coco/dragon_jcbsnd.h b/src/devices/bus/coco/dragon_jcbsnd.h
index 35167dd53f8..2ed76628075 100644
--- a/src/devices/bus/coco/dragon_jcbsnd.h
+++ b/src/devices/bus/coco/dragon_jcbsnd.h
@@ -29,6 +29,7 @@ protected:
// device-level overrides
virtual void device_start() override;
virtual uint8_t* get_cart_base() override;
+ virtual memory_region* get_cart_memregion() override;
// internal state
device_image_interface *m_cart;
diff --git a/src/devices/bus/coleco/exp.cpp b/src/devices/bus/coleco/cartridge/exp.cpp
index c2878c4523a..eaf3f144322 100644
--- a/src/devices/bus/coleco/exp.cpp
+++ b/src/devices/bus/coleco/cartridge/exp.cpp
@@ -118,11 +118,11 @@ std::string colecovision_cartridge_slot_device::get_default_card_software(get_de
// bd_r - cartridge data read
//-------------------------------------------------
-uint8_t colecovision_cartridge_slot_device::bd_r(address_space &space, offs_t offset, uint8_t data, int _8000, int _a000, int _c000, int _e000)
+uint8_t colecovision_cartridge_slot_device::bd_r(offs_t offset, uint8_t data, int _8000, int _a000, int _c000, int _e000)
{
if (m_card != nullptr)
{
- data = m_card->bd_r(space, offset, data, _8000, _a000, _c000, _e000);
+ data = m_card->bd_r(offset, data, _8000, _a000, _c000, _e000);
}
return data;
diff --git a/src/devices/bus/coleco/exp.h b/src/devices/bus/coleco/cartridge/exp.h
index a4bf724c6e7..4da9d2d1d00 100644
--- a/src/devices/bus/coleco/exp.h
+++ b/src/devices/bus/coleco/cartridge/exp.h
@@ -65,7 +65,7 @@ public:
colecovision_cartridge_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// computer interface
- uint8_t bd_r(address_space &space, offs_t offset, uint8_t data, int _8000, int _a000, int _c000, int _e000);
+ uint8_t bd_r(offs_t offset, uint8_t data, int _8000, int _a000, int _c000, int _e000);
protected:
// device-level overrides
@@ -99,7 +99,7 @@ class device_colecovision_cartridge_interface : public device_slot_card_interfac
friend class colecovision_cartridge_slot_device;
public:
- virtual uint8_t bd_r(address_space &space, offs_t offset, uint8_t data, int _8000, int _a000, int _c000, int _e000) { return 0xff; }
+ virtual uint8_t bd_r(offs_t offset, uint8_t data, int _8000, int _a000, int _c000, int _e000) { return 0xff; }
void rom_alloc(size_t size);
diff --git a/src/devices/bus/coleco/std.cpp b/src/devices/bus/coleco/cartridge/std.cpp
index ae490dea2e9..24bb815834e 100644
--- a/src/devices/bus/coleco/std.cpp
+++ b/src/devices/bus/coleco/cartridge/std.cpp
@@ -47,7 +47,7 @@ void colecovision_standard_cartridge_device::device_start()
// read - cartridge data read
//-------------------------------------------------
-uint8_t colecovision_standard_cartridge_device::bd_r(address_space &space, offs_t offset, uint8_t data, int _8000, int _a000, int _c000, int _e000)
+uint8_t colecovision_standard_cartridge_device::bd_r(offs_t offset, uint8_t data, int _8000, int _a000, int _c000, int _e000)
{
if (!_8000 || !_a000 || !_c000 || !_e000)
{
diff --git a/src/devices/bus/coleco/std.h b/src/devices/bus/coleco/cartridge/std.h
index 7ee221502a7..6e0c5206ada 100644
--- a/src/devices/bus/coleco/std.h
+++ b/src/devices/bus/coleco/cartridge/std.h
@@ -33,7 +33,7 @@ protected:
virtual void device_start() override;
// device_colecovision_expansion_card_interface overrides
- virtual uint8_t bd_r(address_space &space, offs_t offset, uint8_t data, int _8000, int _a000, int _c000, int _e000) override;
+ virtual uint8_t bd_r(offs_t offset, uint8_t data, int _8000, int _a000, int _c000, int _e000) override;
};
diff --git a/src/devices/bus/coleco/xin1.cpp b/src/devices/bus/coleco/cartridge/xin1.cpp
index 3538f93bb90..140d2132ee4 100644
--- a/src/devices/bus/coleco/xin1.cpp
+++ b/src/devices/bus/coleco/cartridge/xin1.cpp
@@ -58,7 +58,7 @@ void colecovision_xin1_cartridge_device::device_reset()
// read - cartridge data read
//-------------------------------------------------
-uint8_t colecovision_xin1_cartridge_device::bd_r(address_space &space, offs_t offset, uint8_t data, int _8000, int _a000, int _c000, int _e000)
+uint8_t colecovision_xin1_cartridge_device::bd_r(offs_t offset, uint8_t data, int _8000, int _a000, int _c000, int _e000)
{
if (!_8000 || !_a000 || !_c000 || !_e000)
{
diff --git a/src/devices/bus/coleco/xin1.h b/src/devices/bus/coleco/cartridge/xin1.h
index c5b0ae49b76..0e8a7813c9f 100644
--- a/src/devices/bus/coleco/xin1.h
+++ b/src/devices/bus/coleco/cartridge/xin1.h
@@ -34,7 +34,7 @@ protected:
virtual void device_reset() override;
// device_colecovision_expansion_card_interface overrides
- virtual uint8_t bd_r(address_space &space, offs_t offset, uint8_t data, int _8000, int _a000, int _c000, int _e000) override;
+ virtual uint8_t bd_r(offs_t offset, uint8_t data, int _8000, int _a000, int _c000, int _e000) override;
private:
uint32_t m_current_offset;
diff --git a/src/devices/bus/coleco/ctrl.cpp b/src/devices/bus/coleco/controller/ctrl.cpp
index 330c7c71551..330c7c71551 100644
--- a/src/devices/bus/coleco/ctrl.cpp
+++ b/src/devices/bus/coleco/controller/ctrl.cpp
diff --git a/src/devices/bus/coleco/ctrl.h b/src/devices/bus/coleco/controller/ctrl.h
index 3460dec0b7d..3460dec0b7d 100644
--- a/src/devices/bus/coleco/ctrl.h
+++ b/src/devices/bus/coleco/controller/ctrl.h
diff --git a/src/devices/bus/coleco/hand.cpp b/src/devices/bus/coleco/controller/hand.cpp
index b8410183b68..b8410183b68 100644
--- a/src/devices/bus/coleco/hand.cpp
+++ b/src/devices/bus/coleco/controller/hand.cpp
diff --git a/src/devices/bus/coleco/hand.h b/src/devices/bus/coleco/controller/hand.h
index f65ad709106..f65ad709106 100644
--- a/src/devices/bus/coleco/hand.h
+++ b/src/devices/bus/coleco/controller/hand.h
diff --git a/src/devices/bus/coleco/sac.cpp b/src/devices/bus/coleco/controller/sac.cpp
index 7b3cef9b114..7b3cef9b114 100644
--- a/src/devices/bus/coleco/sac.cpp
+++ b/src/devices/bus/coleco/controller/sac.cpp
diff --git a/src/devices/bus/coleco/sac.h b/src/devices/bus/coleco/controller/sac.h
index 20078e33ef7..20078e33ef7 100644
--- a/src/devices/bus/coleco/sac.h
+++ b/src/devices/bus/coleco/controller/sac.h
diff --git a/src/devices/bus/compis/graphics.h b/src/devices/bus/compis/graphics.h
index c5b414d1fab..0f3f2b104b1 100644
--- a/src/devices/bus/compis/graphics.h
+++ b/src/devices/bus/compis/graphics.h
@@ -24,16 +24,16 @@ class compis_graphics_slot_device;
class device_compis_graphics_card_interface : public device_slot_card_interface
{
public:
- virtual uint8_t mcs0_r(address_space &space, offs_t offset) { return 0xff; }
- virtual void mcs0_w(address_space &space, offs_t offset, uint8_t data) { }
- virtual uint8_t mcs1_r(address_space &space, offs_t offset) { return 0xff; }
- virtual void mcs1_w(address_space &space, offs_t offset, uint8_t data) { }
- virtual uint16_t pcs3_r(address_space &space, offs_t offset) { return 0xff; }
- virtual void pcs3_w(address_space &space, offs_t offset, uint16_t data) { }
- virtual uint8_t pcs6_6_r(address_space &space, offs_t offset) { return 0xff; }
- virtual void pcs6_6_w(address_space &space, offs_t offset, uint8_t data) { }
- virtual uint8_t dma_ack_r(address_space &space, offs_t offset) { return 0xff; }
- virtual void dma_ack_w(address_space &space, offs_t offset, uint8_t data) { }
+ virtual uint8_t mcs0_r(offs_t offset) { return 0xff; }
+ virtual void mcs0_w(offs_t offset, uint8_t data) { }
+ virtual uint8_t mcs1_r(offs_t offset) { return 0xff; }
+ virtual void mcs1_w(offs_t offset, uint8_t data) { }
+ virtual uint16_t pcs3_r(offs_t offset) { return 0xff; }
+ virtual void pcs3_w(offs_t offset, uint16_t data) { }
+ virtual uint8_t pcs6_6_r(offs_t offset) { return 0xff; }
+ virtual void pcs6_6_w(offs_t offset, uint8_t data) { }
+ virtual uint8_t dma_ack_r(offs_t offset) { return 0xff; }
+ virtual void dma_ack_w(offs_t offset, uint8_t data) { }
protected:
// construction/destruction
@@ -64,16 +64,16 @@ public:
auto drq() { return m_write_dma_request.bind(); }
// computer interface
- DECLARE_READ8_MEMBER( mcs0_r ) { return m_card ? m_card->mcs0_r(space, offset) : 0xff; }
- DECLARE_WRITE8_MEMBER( mcs0_w ) { if (m_card) m_card->mcs0_w(space, offset, data); }
- DECLARE_READ8_MEMBER( mcs1_r ) { return m_card ? m_card->mcs1_r(space, offset) : 0xff; }
- DECLARE_WRITE8_MEMBER( mcs1_w ) { if (m_card) m_card->mcs1_w(space, offset, data); }
- DECLARE_READ16_MEMBER( pcs3_r ) { return m_card ? m_card->pcs3_r(space, offset) : 0xff; }
- DECLARE_WRITE16_MEMBER( pcs3_w ) { if (m_card) m_card->pcs3_w(space, offset, data); }
- DECLARE_READ8_MEMBER( pcs6_6_r ) { return m_card ? m_card->pcs6_6_r(space, offset) : 0xff; }
- DECLARE_WRITE8_MEMBER( pcs6_6_w ) { if (m_card) m_card->pcs6_6_w(space, offset, data); }
- DECLARE_READ8_MEMBER( dma_ack_r ) { return m_card ? m_card->dma_ack_r(space, offset) : 0xff; }
- DECLARE_WRITE8_MEMBER( dma_ack_w ) { if (m_card) m_card->dma_ack_w(space, offset, data); }
+ uint8_t mcs0_r(offs_t offset) { return m_card ? m_card->mcs0_r(offset) : 0xff; }
+ void mcs0_w(offs_t offset, uint8_t data) { if (m_card) m_card->mcs0_w(offset, data); }
+ uint8_t mcs1_r(offs_t offset) { return m_card ? m_card->mcs1_r(offset) : 0xff; }
+ void mcs1_w(offs_t offset, uint8_t data) { if (m_card) m_card->mcs1_w(offset, data); }
+ uint8_t pcs3_r(offs_t offset) { return m_card ? m_card->pcs3_r(offset) : 0xff; }
+ void pcs3_w(offs_t offset, uint8_t data) { if (m_card) m_card->pcs3_w(offset, data); }
+ uint8_t pcs6_6_r(offs_t offset) { return m_card ? m_card->pcs6_6_r(offset) : 0xff; }
+ void pcs6_6_w(offs_t offset, uint8_t data) { if (m_card) m_card->pcs6_6_w(offset, data); }
+ uint8_t dma_ack_r(offs_t offset) { return m_card ? m_card->dma_ack_r(offset) : 0xff; }
+ void dma_ack_w(offs_t offset, uint8_t data) { if (m_card) m_card->dma_ack_w(offset, data); }
// card interface
DECLARE_WRITE_LINE_MEMBER( dma_request_w ) { m_write_dma_request(state); }
diff --git a/src/devices/bus/compis/hrg.cpp b/src/devices/bus/compis/hrg.cpp
index fc1665107fa..7aa8aa72f7e 100644
--- a/src/devices/bus/compis/hrg.cpp
+++ b/src/devices/bus/compis/hrg.cpp
@@ -77,40 +77,42 @@ UPD7220_DISPLAY_PIXELS_MEMBER( compis_uhrg_device::display_pixels )
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(compis_hrg_device::device_add_mconfig)
- MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green())
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not accurate
- MCFG_SCREEN_SIZE(640, 400)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 400-1)
- MCFG_SCREEN_UPDATE_DEVICE(UPD7220_TAG, upd7220_device, screen_update)
+void compis_hrg_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER, rgb_t::green()));
+ screen.set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate
+ screen.set_size(640, 400);
+ screen.set_visarea(0, 640-1, 0, 400-1);
+ screen.set_screen_update(UPD7220_TAG, FUNC(upd7220_device::screen_update));
UPD7220(config, m_crtc, 2252500); // unknown clock
m_crtc->set_addrmap(0, &compis_hrg_device::hrg_map);
- m_crtc->set_display_pixels_callback(FUNC(compis_hrg_device::display_pixels), this);
+ m_crtc->set_display_pixels(FUNC(compis_hrg_device::display_pixels));
m_crtc->set_screen(SCREEN_TAG);
PALETTE(config, m_palette, palette_device::MONOCHROME);
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(compis_uhrg_device::device_add_mconfig)
- MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green())
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not accurate
- MCFG_SCREEN_SIZE(1280, 800)
- MCFG_SCREEN_VISIBLE_AREA(0, 1280-1, 0, 800-1)
- MCFG_SCREEN_UPDATE_DEVICE(UPD7220_TAG, upd7220_device, screen_update)
+void compis_uhrg_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER, rgb_t::green()));
+ screen.set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate
+ screen.set_size(1280, 800);
+ screen.set_visarea(0, 1280-1, 0, 800-1);
+ screen.set_screen_update(UPD7220_TAG, FUNC(upd7220_device::screen_update));
UPD7220(config, m_crtc, 2252500*2); // unknown clock
m_crtc->set_addrmap(0, &compis_uhrg_device::uhrg_map);
- m_crtc->set_display_pixels_callback(FUNC(compis_uhrg_device::display_pixels), this);
+ m_crtc->set_display_pixels(FUNC(compis_uhrg_device::display_pixels));
m_crtc->set_screen(SCREEN_TAG);
PALETTE(config, m_palette, palette_device::MONOCHROME);
-MACHINE_CONFIG_END
+}
//**************************************************************************
@@ -163,12 +165,12 @@ void compis_hrg_device::device_reset()
// pcs6_6_r -
//-------------------------------------------------
-uint8_t compis_hrg_device::pcs6_6_r(address_space &space, offs_t offset)
+uint8_t compis_hrg_device::pcs6_6_r(offs_t offset)
{
uint8_t data = 0xff;
if (offset < 2)
- data = m_crtc->read(space, offset & 0x01);
+ data = m_crtc->read(offset & 0x01);
else
// monochrome only, hblank? vblank?
if(offset == 2)
@@ -200,10 +202,10 @@ uint8_t compis_hrg_device::pcs6_6_r(address_space &space, offs_t offset)
// pcs6_6_w -
//-------------------------------------------------
-void compis_hrg_device::pcs6_6_w(address_space &space, offs_t offset, uint8_t data)
+void compis_hrg_device::pcs6_6_w(offs_t offset, uint8_t data)
{
//logerror("%s PCS 6:6 write %04x : %02x\n", machine().describe_context(), offset, data);
// 0x336 is likely the color plane register
- if (offset < 2) m_crtc->write(space, offset & 0x01, data);
+ if (offset < 2) m_crtc->write(offset & 0x01, data);
}
diff --git a/src/devices/bus/compis/hrg.h b/src/devices/bus/compis/hrg.h
index c48830be10c..98ef784df14 100644
--- a/src/devices/bus/compis/hrg.h
+++ b/src/devices/bus/compis/hrg.h
@@ -41,8 +41,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_compis_graphics_card_interface overrides
- virtual uint8_t pcs6_6_r(address_space &space, offs_t offset) override;
- virtual void pcs6_6_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t pcs6_6_r(offs_t offset) override;
+ virtual void pcs6_6_w(offs_t offset, uint8_t data) override;
required_device<upd7220_device> m_crtc;
required_device<palette_device> m_palette;
diff --git a/src/devices/bus/compucolor/floppy.cpp b/src/devices/bus/compucolor/floppy.cpp
index f454a4f092a..fbe7912f6b6 100644
--- a/src/devices/bus/compucolor/floppy.cpp
+++ b/src/devices/bus/compucolor/floppy.cpp
@@ -52,9 +52,10 @@ static void compucolor_floppies(device_slot_interface &device)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(compucolor_floppy_device::device_add_mconfig)
- MCFG_FLOPPY_DRIVE_ADD_FIXED("floppy", compucolor_floppies, "525sssd", compucolor_floppy_device::floppy_formats)
-MACHINE_CONFIG_END
+void compucolor_floppy_device::device_add_mconfig(machine_config &config)
+{
+ FLOPPY_CONNECTOR(config, m_floppy, compucolor_floppies, "525sssd", compucolor_floppy_device::floppy_formats);
+}
@@ -89,7 +90,7 @@ compucolor_floppy_port_device::compucolor_floppy_port_device(const machine_confi
compucolor_floppy_device::compucolor_floppy_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, COMPUCOLOR_FLOPPY, tag, owner, clock)
, device_compucolor_floppy_port_interface(mconfig, *this)
- , m_floppy(*this, "floppy:525sssd")
+ , m_floppy(*this, "floppy")
, m_rw(1)
, m_stp(0)
, m_sel(1)
@@ -183,19 +184,23 @@ void compucolor_floppy_device::stepper_w(uint8_t data)
{
if (!m_sel)
{
+ floppy_image_device *floppy = m_floppy->get_device();
+ if (floppy == nullptr)
+ return;
+
if ((m_stp == 1 && data == 4) || (m_stp == 2 && data == 1) || (m_stp == 4 && data == 2))
{
// step in
- m_floppy->dir_w(1);
- m_floppy->stp_w(0);
- m_floppy->stp_w(1);
+ floppy->dir_w(1);
+ floppy->stp_w(0);
+ floppy->stp_w(1);
}
else if ((m_stp == 1 && data == 2) || (m_stp == 2 && data == 4) || (m_stp == 4 && data == 1))
{
// step out
- m_floppy->dir_w(0);
- m_floppy->stp_w(0);
- m_floppy->stp_w(1);
+ floppy->dir_w(0);
+ floppy->stp_w(0);
+ floppy->stp_w(1);
}
}
@@ -209,7 +214,9 @@ void compucolor_floppy_device::stepper_w(uint8_t data)
void compucolor_floppy_device::select_w(int state)
{
- m_floppy->mon_w(state);
+ floppy_image_device *floppy = m_floppy->get_device();
+ if (floppy != nullptr)
+ floppy->mon_w(state);
if (!m_sel && state)
{
@@ -226,8 +233,10 @@ void compucolor_floppy_device::select_w(int state)
bool compucolor_floppy_device::read_bit()
{
+ floppy_image_device *floppy = m_floppy->get_device();
+
attotime when = machine().time();
- attotime edge = m_floppy->get_next_transition(when);
+ attotime edge = (floppy == nullptr) ? attotime::never : floppy->get_next_transition(when);
attotime next = when + m_period;
return (edge.is_never() || edge >= next) ? 0 : 1;
diff --git a/src/devices/bus/compucolor/floppy.h b/src/devices/bus/compucolor/floppy.h
index 63e9c78782a..a4e476eb152 100644
--- a/src/devices/bus/compucolor/floppy.h
+++ b/src/devices/bus/compucolor/floppy.h
@@ -91,7 +91,7 @@ protected:
private:
DECLARE_FLOPPY_FORMATS( floppy_formats );
- required_device<floppy_image_device> m_floppy;
+ required_device<floppy_connector> m_floppy;
bool read_bit();
void write_bit(bool bit);
diff --git a/src/devices/bus/comx35/clm.cpp b/src/devices/bus/comx35/clm.cpp
index 333566eda1a..745606875f0 100644
--- a/src/devices/bus/comx35/clm.cpp
+++ b/src/devices/bus/comx35/clm.cpp
@@ -137,15 +137,16 @@ GFXDECODE_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(comx_clm_device::device_add_mconfig)
- MCFG_SCREEN_ADD_MONOCHROME(MC6845_SCREEN_TAG, RASTER, rgb_t::white())
- MCFG_SCREEN_UPDATE_DEVICE(MC6845_TAG, mc6845_device, screen_update)
- MCFG_SCREEN_SIZE(80*8, 24*8)
- MCFG_SCREEN_VISIBLE_AREA(0, 80*8-1, 0, 24*8-1)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
- MCFG_SCREEN_REFRESH_RATE(50)
-
- MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_comx_clm)
+void comx_clm_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, MC6845_SCREEN_TAG, SCREEN_TYPE_RASTER, rgb_t::white()));
+ screen.set_screen_update(MC6845_TAG, FUNC(mc6845_device::screen_update));
+ screen.set_size(80*8, 24*8);
+ screen.set_visarea(0, 80*8-1, 0, 24*8-1);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500));
+ screen.set_refresh_hz(50);
+
+ GFXDECODE(config, "gfxdecode", m_palette, gfx_comx_clm);
PALETTE(config, m_palette, palette_device::MONOCHROME);
MC6845(config, m_crtc, XTAL(14'318'181)/7);
@@ -153,7 +154,7 @@ MACHINE_CONFIG_START(comx_clm_device::device_add_mconfig)
m_crtc->set_show_border_area(true);
m_crtc->set_char_width(8);
m_crtc->set_update_row_callback(FUNC(comx_clm_device::crtc_update_row), this);
-MACHINE_CONFIG_END
+}
//**************************************************************************
@@ -214,7 +215,7 @@ int comx_clm_device::comx_ef4_r()
// comx_mrd_r - memory read
//-------------------------------------------------
-uint8_t comx_clm_device::comx_mrd_r(address_space &space, offs_t offset, int *extrom)
+uint8_t comx_clm_device::comx_mrd_r(offs_t offset, int *extrom)
{
uint8_t data = 0xff;
@@ -228,7 +229,7 @@ uint8_t comx_clm_device::comx_mrd_r(address_space &space, offs_t offset, int *ex
}
else if (offset == 0xd801)
{
- data = m_crtc->register_r(space, 0);
+ data = m_crtc->register_r();
}
return data;
@@ -239,7 +240,7 @@ uint8_t comx_clm_device::comx_mrd_r(address_space &space, offs_t offset, int *ex
// comx_mwr_w - memory write
//-------------------------------------------------
-void comx_clm_device::comx_mwr_w(address_space &space, offs_t offset, uint8_t data)
+void comx_clm_device::comx_mwr_w(offs_t offset, uint8_t data)
{
if (offset >= 0xd000 && offset < 0xd800)
{
@@ -247,10 +248,10 @@ void comx_clm_device::comx_mwr_w(address_space &space, offs_t offset, uint8_t da
}
else if (offset == 0xd800)
{
- m_crtc->address_w(space, 0, data);
+ m_crtc->address_w(data);
}
else if (offset == 0xd801)
{
- m_crtc->register_w(space, 0, data);
+ m_crtc->register_w(data);
}
}
diff --git a/src/devices/bus/comx35/clm.h b/src/devices/bus/comx35/clm.h
index 0784ae7bab2..9c4845cbbe0 100644
--- a/src/devices/bus/comx35/clm.h
+++ b/src/devices/bus/comx35/clm.h
@@ -42,8 +42,8 @@ protected:
// device_comx_expansion_card_interface overrides
virtual int comx_ef4_r() override;
- virtual uint8_t comx_mrd_r(address_space &space, offs_t offset, int *extrom) override;
- virtual void comx_mwr_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t comx_mrd_r(offs_t offset, int *extrom) override;
+ virtual void comx_mwr_w(offs_t offset, uint8_t data) override;
private:
MC6845_UPDATE_ROW( crtc_update_row );
diff --git a/src/devices/bus/comx35/eprom.cpp b/src/devices/bus/comx35/eprom.cpp
index 5fda7492dd5..0267d7c5b62 100644
--- a/src/devices/bus/comx35/eprom.cpp
+++ b/src/devices/bus/comx35/eprom.cpp
@@ -91,7 +91,7 @@ void comx_epr_device::device_reset()
// comx_mrd_r - memory read
//-------------------------------------------------
-uint8_t comx_epr_device::comx_mrd_r(address_space &space, offs_t offset, int *extrom)
+uint8_t comx_epr_device::comx_mrd_r(offs_t offset, int *extrom)
{
uint8_t data = 0;
@@ -113,7 +113,7 @@ uint8_t comx_epr_device::comx_mrd_r(address_space &space, offs_t offset, int *ex
// comx_io_w - I/O write
//-------------------------------------------------
-void comx_epr_device::comx_io_w(address_space &space, offs_t offset, uint8_t data)
+void comx_epr_device::comx_io_w(offs_t offset, uint8_t data)
{
if (offset == 1)
{
diff --git a/src/devices/bus/comx35/eprom.h b/src/devices/bus/comx35/eprom.h
index c6489dfa774..90f57e52d3d 100644
--- a/src/devices/bus/comx35/eprom.h
+++ b/src/devices/bus/comx35/eprom.h
@@ -37,8 +37,8 @@ protected:
virtual void device_reset() override;
// device_comx_expansion_card_interface overrides
- virtual uint8_t comx_mrd_r(address_space &space, offs_t offset, int *extrom) override;
- virtual void comx_io_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t comx_mrd_r(offs_t offset, int *extrom) override;
+ virtual void comx_io_w(offs_t offset, uint8_t data) override;
private:
required_memory_region m_rom;
diff --git a/src/devices/bus/comx35/exp.cpp b/src/devices/bus/comx35/exp.cpp
index eb5917dccbf..75036fb6ea8 100644
--- a/src/devices/bus/comx35/exp.cpp
+++ b/src/devices/bus/comx35/exp.cpp
@@ -68,12 +68,12 @@ void comx_expansion_slot_device::device_start()
// mrd_r - memory read
//-------------------------------------------------
-uint8_t comx_expansion_slot_device::mrd_r(address_space &space, offs_t offset, int *extrom)
+uint8_t comx_expansion_slot_device::mrd_r(offs_t offset, int *extrom)
{
uint8_t data = 0;
if (m_card != nullptr)
- data = m_card->comx_mrd_r(space, offset, extrom);
+ data = m_card->comx_mrd_r(offset, extrom);
return data;
}
@@ -83,10 +83,10 @@ uint8_t comx_expansion_slot_device::mrd_r(address_space &space, offs_t offset, i
// mwr_w - memory write
//-------------------------------------------------
-void comx_expansion_slot_device::mwr_w(address_space &space, offs_t offset, uint8_t data)
+void comx_expansion_slot_device::mwr_w(offs_t offset, uint8_t data)
{
if (m_card != nullptr)
- m_card->comx_mwr_w(space, offset, data);
+ m_card->comx_mwr_w(offset, data);
}
@@ -94,12 +94,12 @@ void comx_expansion_slot_device::mwr_w(address_space &space, offs_t offset, uint
// io_r - I/O read
//-------------------------------------------------
-uint8_t comx_expansion_slot_device::io_r(address_space &space, offs_t offset)
+uint8_t comx_expansion_slot_device::io_r(offs_t offset)
{
uint8_t data = 0;
if (m_card != nullptr)
- data = m_card->comx_io_r(space, offset);
+ data = m_card->comx_io_r(offset);
return data;
}
@@ -109,10 +109,10 @@ uint8_t comx_expansion_slot_device::io_r(address_space &space, offs_t offset)
// sout_w - I/O write
//-------------------------------------------------
-void comx_expansion_slot_device::io_w(address_space &space, offs_t offset, uint8_t data)
+void comx_expansion_slot_device::io_w(offs_t offset, uint8_t data)
{
if (m_card != nullptr)
- m_card->comx_io_w(space, offset, data);
+ m_card->comx_io_w(offset, data);
}
diff --git a/src/devices/bus/comx35/exp.h b/src/devices/bus/comx35/exp.h
index 0629db0a1ac..dea67184e06 100644
--- a/src/devices/bus/comx35/exp.h
+++ b/src/devices/bus/comx35/exp.h
@@ -62,11 +62,11 @@ public:
template <class Object> devcb_base &set_irq_wr_callback(Object &&cb) { return m_write_irq.set_callback(std::forward<Object>(cb)); }
auto irq_callback() { return m_write_irq.bind(); }
- uint8_t mrd_r(address_space &space, offs_t offset, int *extrom);
- void mwr_w(address_space &space, offs_t offset, uint8_t data);
+ uint8_t mrd_r(offs_t offset, int *extrom);
+ void mwr_w(offs_t offset, uint8_t data);
- uint8_t io_r(address_space &space, offs_t offset);
- void io_w(address_space &space, offs_t offset, uint8_t data);
+ uint8_t io_r(offs_t offset);
+ void io_w(offs_t offset, uint8_t data);
DECLARE_READ_LINE_MEMBER(ef4_r);
@@ -107,12 +107,12 @@ protected:
virtual void comx_tpb_w(int state) { }
// memory access
- virtual uint8_t comx_mrd_r(address_space &space, offs_t offset, int *extrom) { return 0; }
- virtual void comx_mwr_w(address_space &space, offs_t offset, uint8_t data) { }
+ virtual uint8_t comx_mrd_r(offs_t offset, int *extrom) { return 0; }
+ virtual void comx_mwr_w(offs_t offset, uint8_t data) { }
// I/O access
- virtual uint8_t comx_io_r(address_space &space, offs_t offset) { return 0; }
- virtual void comx_io_w(address_space &space, offs_t offset, uint8_t data) { }
+ virtual uint8_t comx_io_r(offs_t offset) { return 0; }
+ virtual void comx_io_w(offs_t offset, uint8_t data) { }
comx_expansion_slot_device *m_slot;
diff --git a/src/devices/bus/comx35/expbox.cpp b/src/devices/bus/comx35/expbox.cpp
index f7c693d4ecf..65c945274f1 100644
--- a/src/devices/bus/comx35/expbox.cpp
+++ b/src/devices/bus/comx35/expbox.cpp
@@ -200,7 +200,7 @@ void comx_eb_device::comx_q_w(int state)
// comx_mrd_r - memory read
//-------------------------------------------------
-uint8_t comx_eb_device::comx_mrd_r(address_space &space, offs_t offset, int *extrom)
+uint8_t comx_eb_device::comx_mrd_r(offs_t offset, int *extrom)
{
uint8_t data = 0;
@@ -219,7 +219,7 @@ uint8_t comx_eb_device::comx_mrd_r(address_space &space, offs_t offset, int *ext
{
if (BIT(m_select, slot) && m_expansion_slot[slot] != nullptr)
{
- data |= m_expansion_slot[slot]->mrd_r(space, offset, extrom);
+ data |= m_expansion_slot[slot]->mrd_r(offset, extrom);
}
}
}
@@ -232,13 +232,13 @@ uint8_t comx_eb_device::comx_mrd_r(address_space &space, offs_t offset, int *ext
// comx_mwr_w - memory write
//-------------------------------------------------
-void comx_eb_device::comx_mwr_w(address_space &space, offs_t offset, uint8_t data)
+void comx_eb_device::comx_mwr_w(offs_t offset, uint8_t data)
{
for (int slot = 0; slot < MAX_EB_SLOTS; slot++)
{
if (BIT(m_select, slot) && m_expansion_slot[slot] != nullptr)
{
- m_expansion_slot[slot]->mwr_w(space, offset, data);
+ m_expansion_slot[slot]->mwr_w(offset, data);
}
}
}
@@ -248,7 +248,7 @@ void comx_eb_device::comx_mwr_w(address_space &space, offs_t offset, uint8_t dat
// comx_io_r - I/O read
//-------------------------------------------------
-uint8_t comx_eb_device::comx_io_r(address_space &space, offs_t offset)
+uint8_t comx_eb_device::comx_io_r(offs_t offset)
{
uint8_t data = 0;
@@ -256,7 +256,7 @@ uint8_t comx_eb_device::comx_io_r(address_space &space, offs_t offset)
{
if (BIT(m_select, slot) && m_expansion_slot[slot] != nullptr)
{
- data |= m_expansion_slot[slot]->io_r(space, offset);
+ data |= m_expansion_slot[slot]->io_r(offset);
}
}
@@ -268,7 +268,7 @@ uint8_t comx_eb_device::comx_io_r(address_space &space, offs_t offset)
// comx_io_w - I/O write
//-------------------------------------------------
-void comx_eb_device::comx_io_w(address_space &space, offs_t offset, uint8_t data)
+void comx_eb_device::comx_io_w(offs_t offset, uint8_t data)
{
if (offset == 1 && !(BIT(data, 0)))
{
@@ -287,7 +287,7 @@ void comx_eb_device::comx_io_w(address_space &space, offs_t offset, uint8_t data
{
if (BIT(m_select, slot) && m_expansion_slot[slot] != nullptr)
{
- m_expansion_slot[slot]->io_w(space, offset, data);
+ m_expansion_slot[slot]->io_w(offset, data);
}
}
}
diff --git a/src/devices/bus/comx35/expbox.h b/src/devices/bus/comx35/expbox.h
index 4c806a79b92..c4c89b4f2bc 100644
--- a/src/devices/bus/comx35/expbox.h
+++ b/src/devices/bus/comx35/expbox.h
@@ -48,10 +48,10 @@ protected:
// device_comx_expansion_card_interface overrides
virtual int comx_ef4_r() override;
virtual void comx_q_w(int state) override;
- virtual uint8_t comx_mrd_r(address_space &space, offs_t offset, int *extrom) override;
- virtual void comx_mwr_w(address_space &space, offs_t offset, uint8_t data) override;
- virtual uint8_t comx_io_r(address_space &space, offs_t offset) override;
- virtual void comx_io_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t comx_mrd_r(offs_t offset, int *extrom) override;
+ virtual void comx_mwr_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t comx_io_r(offs_t offset) override;
+ virtual void comx_io_w(offs_t offset, uint8_t data) override;
void set_irq() { m_slot->irq_w(m_irq[0] || m_irq[1] || m_irq[2] || m_irq[3]); }
diff --git a/src/devices/bus/comx35/fdc.cpp b/src/devices/bus/comx35/fdc.cpp
index 27246c37333..da1b6dcc028 100644
--- a/src/devices/bus/comx35/fdc.cpp
+++ b/src/devices/bus/comx35/fdc.cpp
@@ -188,7 +188,7 @@ void comx_fd_device::comx_q_w(int state)
// comx_mrd_r - memory read
//-------------------------------------------------
-uint8_t comx_fd_device::comx_mrd_r(address_space &space, offs_t offset, int *extrom)
+uint8_t comx_fd_device::comx_mrd_r(offs_t offset, int *extrom)
{
uint8_t data = 0xff;
@@ -210,7 +210,7 @@ uint8_t comx_fd_device::comx_mrd_r(address_space &space, offs_t offset, int *ext
// comx_io_r - I/O read
//-------------------------------------------------
-uint8_t comx_fd_device::comx_io_r(address_space &space, offs_t offset)
+uint8_t comx_fd_device::comx_io_r(offs_t offset)
{
uint8_t data = 0xff;
@@ -235,7 +235,7 @@ uint8_t comx_fd_device::comx_io_r(address_space &space, offs_t offset)
// comx_io_w - I/O write
//-------------------------------------------------
-void comx_fd_device::comx_io_w(address_space &space, offs_t offset, uint8_t data)
+void comx_fd_device::comx_io_w(offs_t offset, uint8_t data)
{
if (offset == 2)
{
diff --git a/src/devices/bus/comx35/fdc.h b/src/devices/bus/comx35/fdc.h
index ad682e97718..45617bb8580 100644
--- a/src/devices/bus/comx35/fdc.h
+++ b/src/devices/bus/comx35/fdc.h
@@ -43,9 +43,9 @@ protected:
// device_comx_expansion_card_interface overrides
virtual int comx_ef4_r() override;
virtual void comx_q_w(int state) override;
- virtual uint8_t comx_mrd_r(address_space &space, offs_t offset, int *extrom) override;
- virtual uint8_t comx_io_r(address_space &space, offs_t offset) override;
- virtual void comx_io_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t comx_mrd_r(offs_t offset, int *extrom) override;
+ virtual uint8_t comx_io_r(offs_t offset) override;
+ virtual void comx_io_w(offs_t offset, uint8_t data) override;
private:
DECLARE_FLOPPY_FORMATS( floppy_formats );
diff --git a/src/devices/bus/comx35/joycard.cpp b/src/devices/bus/comx35/joycard.cpp
index 4c6e46ff06e..e76f20a5be8 100644
--- a/src/devices/bus/comx35/joycard.cpp
+++ b/src/devices/bus/comx35/joycard.cpp
@@ -98,7 +98,7 @@ void comx_joy_device::device_reset()
// comx_mrd_r - I/O read
//-------------------------------------------------
-uint8_t comx_joy_device::comx_io_r(address_space &space, offs_t offset)
+uint8_t comx_joy_device::comx_io_r(offs_t offset)
{
uint8_t data = 0;
diff --git a/src/devices/bus/comx35/joycard.h b/src/devices/bus/comx35/joycard.h
index e2d6bb40151..92c41431961 100644
--- a/src/devices/bus/comx35/joycard.h
+++ b/src/devices/bus/comx35/joycard.h
@@ -37,7 +37,7 @@ protected:
virtual void device_reset() override;
// device_comx_expansion_card_interface overrides
- virtual uint8_t comx_io_r(address_space &space, offs_t offset) override;
+ virtual uint8_t comx_io_r(offs_t offset) override;
private:
required_ioport m_joy1;
diff --git a/src/devices/bus/comx35/printer.cpp b/src/devices/bus/comx35/printer.cpp
index 24a50e7ed53..6858d687c0b 100644
--- a/src/devices/bus/comx35/printer.cpp
+++ b/src/devices/bus/comx35/printer.cpp
@@ -55,16 +55,19 @@ const tiny_rom_entry *comx_prn_device::device_rom_region() const
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(comx_prn_device::device_add_mconfig)
- MCFG_DEVICE_ADD(m_centronics, CENTRONICS, centronics_devices, "printer")
- MCFG_CENTRONICS_ACK_HANDLER(WRITELINE("cent_status_in", input_buffer_device, write_bit0))
- MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE("cent_status_in", input_buffer_device, write_bit1))
- MCFG_CENTRONICS_PERROR_HANDLER(WRITELINE("cent_status_in", input_buffer_device, write_bit2))
- MCFG_CENTRONICS_SELECT_HANDLER(WRITELINE("cent_status_in", input_buffer_device, write_bit3))
- MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
+void comx_prn_device::device_add_mconfig(machine_config &config)
+{
+ CENTRONICS(config, m_centronics, centronics_devices, "printer");
+ m_centronics->ack_handler().set(m_cent_status_in, FUNC(input_buffer_device::write_bit0));
+ m_centronics->busy_handler().set(m_cent_status_in, FUNC(input_buffer_device::write_bit1));
+ m_centronics->perror_handler().set(m_cent_status_in, FUNC(input_buffer_device::write_bit2));
+ m_centronics->select_handler().set(m_cent_status_in, FUNC(input_buffer_device::write_bit3));
+
+ OUTPUT_LATCH(config, m_cent_data_out);
+ m_centronics->set_output_latch(*m_cent_data_out);
- MCFG_DEVICE_ADD("cent_status_in", INPUT_BUFFER, 0)
-MACHINE_CONFIG_END
+ INPUT_BUFFER(config, m_cent_status_in);
+}
@@ -109,7 +112,7 @@ void comx_prn_device::device_reset()
// comx_mrd_r - memory read
//-------------------------------------------------
-uint8_t comx_prn_device::comx_mrd_r(address_space &space, offs_t offset, int *extrom)
+uint8_t comx_prn_device::comx_mrd_r(offs_t offset, int *extrom)
{
uint8_t data = 0;
@@ -126,7 +129,7 @@ uint8_t comx_prn_device::comx_mrd_r(address_space &space, offs_t offset, int *ex
// comx_io_r - I/O read
//-------------------------------------------------
-uint8_t comx_prn_device::comx_io_r(address_space &space, offs_t offset)
+uint8_t comx_prn_device::comx_io_r(offs_t offset)
{
/*
Parallel:
@@ -165,7 +168,7 @@ uint8_t comx_prn_device::comx_io_r(address_space &space, offs_t offset)
// comx_io_w - I/O write
//-------------------------------------------------
-void comx_prn_device::comx_io_w(address_space &space, offs_t offset, uint8_t data)
+void comx_prn_device::comx_io_w(offs_t offset, uint8_t data)
{
/*
Parallel:
diff --git a/src/devices/bus/comx35/printer.h b/src/devices/bus/comx35/printer.h
index dcfd27a7cd1..1ffa3f66046 100644
--- a/src/devices/bus/comx35/printer.h
+++ b/src/devices/bus/comx35/printer.h
@@ -39,9 +39,9 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_comx_expansion_card_interface overrides
- virtual uint8_t comx_mrd_r(address_space &space, offs_t offset, int *extrom) override;
- virtual uint8_t comx_io_r(address_space &space, offs_t offset) override;
- virtual void comx_io_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t comx_mrd_r(offs_t offset, int *extrom) override;
+ virtual uint8_t comx_io_r(offs_t offset) override;
+ virtual void comx_io_w(offs_t offset, uint8_t data) override;
private:
required_device<centronics_device> m_centronics;
diff --git a/src/devices/bus/comx35/ram.cpp b/src/devices/bus/comx35/ram.cpp
index c09ef729225..b468b6366ff 100644
--- a/src/devices/bus/comx35/ram.cpp
+++ b/src/devices/bus/comx35/ram.cpp
@@ -66,7 +66,7 @@ void comx_ram_device::device_reset()
// comx_mrd_r - memory read
//-------------------------------------------------
-uint8_t comx_ram_device::comx_mrd_r(address_space &space, offs_t offset, int *extrom)
+uint8_t comx_ram_device::comx_mrd_r(offs_t offset, int *extrom)
{
uint8_t data = 0;
@@ -83,7 +83,7 @@ uint8_t comx_ram_device::comx_mrd_r(address_space &space, offs_t offset, int *ex
// comx_mwr_w - memory write
//-------------------------------------------------
-void comx_ram_device::comx_mwr_w(address_space &space, offs_t offset, uint8_t data)
+void comx_ram_device::comx_mwr_w(offs_t offset, uint8_t data)
{
if (offset >= 0xc000 && offset < 0xd000)
{
@@ -96,7 +96,7 @@ void comx_ram_device::comx_mwr_w(address_space &space, offs_t offset, uint8_t da
// comx_io_w - I/O write
//-------------------------------------------------
-void comx_ram_device::comx_io_w(address_space &space, offs_t offset, uint8_t data)
+void comx_ram_device::comx_io_w(offs_t offset, uint8_t data)
{
if (offset == 1)
{
diff --git a/src/devices/bus/comx35/ram.h b/src/devices/bus/comx35/ram.h
index 251e47e2097..3a75e208eb6 100644
--- a/src/devices/bus/comx35/ram.h
+++ b/src/devices/bus/comx35/ram.h
@@ -34,9 +34,9 @@ protected:
virtual void device_reset() override;
// device_comx_expansion_card_interface overrides
- virtual uint8_t comx_mrd_r(address_space &space, offs_t offset, int *extrom) override;
- virtual void comx_mwr_w(address_space &space, offs_t offset, uint8_t data) override;
- virtual void comx_io_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t comx_mrd_r(offs_t offset, int *extrom) override;
+ virtual void comx_mwr_w(offs_t offset, uint8_t data) override;
+ virtual void comx_io_w(offs_t offset, uint8_t data) override;
private:
optional_shared_ptr<uint8_t> m_ram;
diff --git a/src/devices/bus/comx35/thermal.cpp b/src/devices/bus/comx35/thermal.cpp
index e1d4f0ed8d3..badd1beb8c1 100644
--- a/src/devices/bus/comx35/thermal.cpp
+++ b/src/devices/bus/comx35/thermal.cpp
@@ -82,7 +82,7 @@ void comx_thm_device::device_reset()
// comx_mrd_r - memory read
//-------------------------------------------------
-uint8_t comx_thm_device::comx_mrd_r(address_space &space, offs_t offset, int *extrom)
+uint8_t comx_thm_device::comx_mrd_r(offs_t offset, int *extrom)
{
uint8_t data = 0;
@@ -99,7 +99,7 @@ uint8_t comx_thm_device::comx_mrd_r(address_space &space, offs_t offset, int *ex
// comx_io_r - I/O read
//-------------------------------------------------
-uint8_t comx_thm_device::comx_io_r(address_space &space, offs_t offset)
+uint8_t comx_thm_device::comx_io_r(offs_t offset)
{
/*
INP 2 is used for the printer status, where:
@@ -116,7 +116,7 @@ uint8_t comx_thm_device::comx_io_r(address_space &space, offs_t offset)
// comx_io_w - I/O write
//-------------------------------------------------
-void comx_thm_device::comx_io_w(address_space &space, offs_t offset, uint8_t data)
+void comx_thm_device::comx_io_w(offs_t offset, uint8_t data)
{
/*
OUT 2 is used to control the thermal printer where:
diff --git a/src/devices/bus/comx35/thermal.h b/src/devices/bus/comx35/thermal.h
index feb92f7bc45..645f6bf0213 100644
--- a/src/devices/bus/comx35/thermal.h
+++ b/src/devices/bus/comx35/thermal.h
@@ -37,9 +37,9 @@ protected:
virtual void device_reset() override;
// device_comx_expansion_card_interface overrides
- virtual uint8_t comx_mrd_r(address_space &space, offs_t offset, int *extrom) override;
- virtual uint8_t comx_io_r(address_space &space, offs_t offset) override;
- virtual void comx_io_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t comx_mrd_r(offs_t offset, int *extrom) override;
+ virtual uint8_t comx_io_r(offs_t offset) override;
+ virtual void comx_io_w(offs_t offset, uint8_t data) override;
private:
required_memory_region m_rom;
diff --git a/src/devices/bus/cpc/amdrum.cpp b/src/devices/bus/cpc/amdrum.cpp
index b0c0610b607..587577edf52 100644
--- a/src/devices/bus/cpc/amdrum.cpp
+++ b/src/devices/bus/cpc/amdrum.cpp
@@ -20,13 +20,15 @@
DEFINE_DEVICE_TYPE(CPC_AMDRUM, cpc_amdrum_device, "cpc_amdrum", "Amdrum")
-MACHINE_CONFIG_START(cpc_amdrum_device::device_add_mconfig)
+void cpc_amdrum_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "speaker").front_center();
- MCFG_DEVICE_ADD("dac", DAC_8BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5) // unknown DAC
- MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
- MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT)
+ ZN428E(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.5);
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
+ vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
+ vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
// no pass-through
-MACHINE_CONFIG_END
+}
//**************************************************************************
diff --git a/src/devices/bus/cpc/cpc_rom.cpp b/src/devices/bus/cpc/cpc_rom.cpp
index a3fedd575bc..69bd7f80035 100644
--- a/src/devices/bus/cpc/cpc_rom.cpp
+++ b/src/devices/bus/cpc/cpc_rom.cpp
@@ -18,22 +18,23 @@ void cpc_exp_cards(device_slot_interface &device);
//**************************************************************************
// device machine config
-MACHINE_CONFIG_START(cpc_rom_device::device_add_mconfig)
- MCFG_CPC_ROMSLOT_ADD("rom1")
- MCFG_CPC_ROMSLOT_ADD("rom2")
- MCFG_CPC_ROMSLOT_ADD("rom3")
- MCFG_CPC_ROMSLOT_ADD("rom4")
- MCFG_CPC_ROMSLOT_ADD("rom5")
- MCFG_CPC_ROMSLOT_ADD("rom6")
- MCFG_CPC_ROMSLOT_ADD("rom7")
- MCFG_CPC_ROMSLOT_ADD("rom8")
+void cpc_rom_device::device_add_mconfig(machine_config &config)
+{
+ CPC_ROMSLOT(config, m_rom[0], 0);
+ CPC_ROMSLOT(config, m_rom[1], 0);
+ CPC_ROMSLOT(config, m_rom[2], 0);
+ CPC_ROMSLOT(config, m_rom[3], 0);
+ CPC_ROMSLOT(config, m_rom[4], 0);
+ CPC_ROMSLOT(config, m_rom[5], 0);
+ CPC_ROMSLOT(config, m_rom[6], 0);
+ CPC_ROMSLOT(config, m_rom[7], 0);
// pass-through
cpc_expansion_slot_device &exp(CPC_EXPANSION_SLOT(config, "exp", DERIVED_CLOCK(1, 1), cpc_exp_cards, nullptr));
exp.irq_callback().set(DEVICE_SELF_OWNER, FUNC(cpc_expansion_slot_device::irq_w));
exp.nmi_callback().set(DEVICE_SELF_OWNER, FUNC(cpc_expansion_slot_device::nmi_w));
exp.romdis_callback().set(DEVICE_SELF_OWNER, FUNC(cpc_expansion_slot_device::romdis_w)); // ROMDIS
-MACHINE_CONFIG_END
+}
//**************************************************************************
diff --git a/src/devices/bus/cpc/cpc_rom.h b/src/devices/bus/cpc/cpc_rom.h
index 0128dc79337..67e88cf6137 100644
--- a/src/devices/bus/cpc/cpc_rom.h
+++ b/src/devices/bus/cpc/cpc_rom.h
@@ -53,9 +53,6 @@ private:
DECLARE_DEVICE_TYPE(CPC_ROMSLOT, cpc_rom_image_device)
-#define MCFG_CPC_ROMSLOT_ADD(_tag) \
- MCFG_DEVICE_ADD(_tag, CPC_ROMSLOT, 0)
-
/*** ROM box device ***/
class cpc_rom_device : public device_t,
diff --git a/src/devices/bus/cpc/cpcexp.cpp b/src/devices/bus/cpc/cpcexp.cpp
index ab92c31a4df..3f9f04e89ea 100644
--- a/src/devices/bus/cpc/cpcexp.cpp
+++ b/src/devices/bus/cpc/cpcexp.cpp
@@ -83,7 +83,7 @@ void cpc_expansion_slot_device::device_start()
void cpc_expansion_slot_device::device_config_complete()
{
// for passthrough connectors, use the parent slot's CPU tag
- if (strcmp(m_cpu.finder_tag(), finder_base::DUMMY_TAG) == 0 && dynamic_cast<device_cpc_expansion_card_interface *>(owner()) != nullptr)
+ if ((m_cpu.finder_tag() == finder_base::DUMMY_TAG) && (dynamic_cast<device_cpc_expansion_card_interface *>(owner()) != nullptr))
{
auto parent = dynamic_cast<cpc_expansion_slot_device *>(owner()->owner());
if (parent != nullptr)
diff --git a/src/devices/bus/cpc/ddi1.cpp b/src/devices/bus/cpc/ddi1.cpp
index 0202f9374ae..76e09d36f34 100644
--- a/src/devices/bus/cpc/ddi1.cpp
+++ b/src/devices/bus/cpc/ddi1.cpp
@@ -116,7 +116,7 @@ WRITE8_MEMBER(cpc_ddi1_device::fdc_w)
switch(offset)
{
case 0x01:
- m_fdc->fifo_w(space, 0,data);
+ m_fdc->fifo_w(data);
break;
}
}
@@ -128,10 +128,10 @@ READ8_MEMBER(cpc_ddi1_device::fdc_r)
switch(offset)
{
case 0x00:
- data = m_fdc->msr_r(space, 0);
+ data = m_fdc->msr_r();
break;
case 0x01:
- data = m_fdc->fifo_r(space, 0);
+ data = m_fdc->fifo_r();
break;
}
return data;
diff --git a/src/devices/bus/cpc/doubler.cpp b/src/devices/bus/cpc/doubler.cpp
index ce89c0819dd..e9ed2e5b5f4 100644
--- a/src/devices/bus/cpc/doubler.cpp
+++ b/src/devices/bus/cpc/doubler.cpp
@@ -16,14 +16,15 @@
DEFINE_DEVICE_TYPE(CPC_DOUBLER, cpc_doubler_device, "cpc_doubler", "Draysoft Doubler")
-MACHINE_CONFIG_START(cpc_doubler_device::device_add_mconfig)
- MCFG_CASSETTE_ADD( "doubler_tape" )
- MCFG_CASSETTE_FORMATS(cdt_cassette_formats)
- MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED)
- MCFG_CASSETTE_INTERFACE("cpc_cass")
+void cpc_doubler_device::device_add_mconfig(machine_config &config)
+{
+ CASSETTE(config, m_tape);
+ m_tape->set_formats(cdt_cassette_formats);
+ m_tape->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED);
+ m_tape->set_interface("cpc_cass");
// no pass-through seen on remake PCBs, unknown if actual hardware had a pass-through port or not
-MACHINE_CONFIG_END
+}
//**************************************************************************
diff --git a/src/devices/bus/cpc/hd20.cpp b/src/devices/bus/cpc/hd20.cpp
index 3ad082ee90d..c13ffca6b4b 100644
--- a/src/devices/bus/cpc/hd20.cpp
+++ b/src/devices/bus/cpc/hd20.cpp
@@ -15,12 +15,13 @@
DEFINE_DEVICE_TYPE(CPC_HD20, cpc_hd20_device, "cpc_hd20", "Dobbertin HD20")
-MACHINE_CONFIG_START(cpc_hd20_device::device_add_mconfig)
- MCFG_DEVICE_ADD("hdc",ST11M_HDC,0)
- MCFG_XTHDC_IRQ_HANDLER(WRITELINE(*this, cpc_hd20_device, irq_w))
- MCFG_HARDDISK_ADD("hdc:primary")
+void cpc_hd20_device::device_add_mconfig(machine_config &config)
+{
+ ST11M_HDC(config, m_hdc,0);
+ m_hdc->irq_handler().set(FUNC(cpc_hd20_device::irq_w));
+ HARDDISK(config, "hdc:primary");
// no pass-through (?)
-MACHINE_CONFIG_END
+}
ROM_START( cpc_hd20 )
diff --git a/src/devices/bus/cpc/magicsound.cpp b/src/devices/bus/cpc/magicsound.cpp
index f1a940a72c3..1a85915dca1 100644
--- a/src/devices/bus/cpc/magicsound.cpp
+++ b/src/devices/bus/cpc/magicsound.cpp
@@ -20,7 +20,8 @@
DEFINE_DEVICE_TYPE(AL_MAGICSOUND, al_magicsound_device, "al_magicsound", "Aleste Magic Sound Board")
-MACHINE_CONFIG_START(al_magicsound_device::device_add_mconfig)
+void al_magicsound_device::device_add_mconfig(machine_config &config)
+{
AM9517A(config, m_dmac, DERIVED_CLOCK(1, 1)); // CLK from expansion port
// According to the schematics, the TC pin (EOP on western chips) is connected to NMI on the expansion port.
// NMIs seem to occur too quickly when this is active, so either EOP is not triggered at the correct time, or
@@ -57,11 +58,12 @@ MACHINE_CONFIG_START(al_magicsound_device::device_add_mconfig)
m_timer2->set_clk<2>(4000000);
SPEAKER(config, "speaker").front_center();
- MCFG_DEVICE_ADD("dac", DAC_8BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5) // unknown DAC
- MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
- MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT)
+ DAC_8BIT_R2R(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.5); // unknown DAC
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
+ vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
+ vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
// no pass-through(?)
-MACHINE_CONFIG_END
+}
//**************************************************************************
@@ -113,12 +115,12 @@ void al_magicsound_device::device_reset()
READ8_MEMBER(al_magicsound_device::dmac_r)
{
- return m_dmac->read(space,offset);
+ return m_dmac->read(offset);
}
WRITE8_MEMBER(al_magicsound_device::dmac_w)
{
- m_dmac->write(space,offset,data);
+ m_dmac->write(offset,data);
}
WRITE8_MEMBER(al_magicsound_device::timer_w)
diff --git a/src/devices/bus/cpc/playcity.cpp b/src/devices/bus/cpc/playcity.cpp
index f9d225ef7b6..1e6f3b0cfa6 100644
--- a/src/devices/bus/cpc/playcity.cpp
+++ b/src/devices/bus/cpc/playcity.cpp
@@ -99,32 +99,32 @@ WRITE8_MEMBER(cpc_playcity_device::ctc_w)
WRITE8_MEMBER(cpc_playcity_device::ymz1_address_w)
{
- m_ymz1->address_w(space,offset,data);
+ m_ymz1->address_w(data);
}
WRITE8_MEMBER(cpc_playcity_device::ymz2_address_w)
{
- m_ymz2->address_w(space,offset,data);
+ m_ymz2->address_w(data);
}
WRITE8_MEMBER(cpc_playcity_device::ymz1_data_w)
{
- m_ymz1->data_w(space,offset,data);
+ m_ymz1->data_w(data);
}
WRITE8_MEMBER(cpc_playcity_device::ymz2_data_w)
{
- m_ymz2->data_w(space,offset,data);
+ m_ymz2->data_w(data);
}
READ8_MEMBER(cpc_playcity_device::ymz1_data_r)
{
- return m_ymz1->data_r(space,offset);
+ return m_ymz1->data_r();
}
READ8_MEMBER(cpc_playcity_device::ymz2_data_r)
{
- return m_ymz2->data_r(space,offset);
+ return m_ymz2->data_r();
}
void cpc_playcity_device::update_ymz_clock()
diff --git a/src/devices/bus/cpc/smartwatch.cpp b/src/devices/bus/cpc/smartwatch.cpp
index bd039c40735..272b7ca953e 100644
--- a/src/devices/bus/cpc/smartwatch.cpp
+++ b/src/devices/bus/cpc/smartwatch.cpp
@@ -71,15 +71,18 @@ void cpc_smartwatch_device::device_reset()
READ8_MEMBER(cpc_smartwatch_device::rtc_w)
{
uint8_t* bank = (uint8_t*)m_bank->base();
- if(offset & 1)
- m_rtc->read_1(space,0);
- else
- m_rtc->read_0(space,0);
+ if (!machine().side_effects_disabled())
+ {
+ if(offset & 1)
+ m_rtc->read_1();
+ else
+ m_rtc->read_0();
+ }
return bank[offset & 1];
}
READ8_MEMBER(cpc_smartwatch_device::rtc_r)
{
uint8_t* bank = (uint8_t*)m_bank->base();
- return ((bank[(offset & 1)+4]) & 0xfe) | (m_rtc->read_data(space,0) & 0x01);
+ return ((bank[(offset & 1)+4]) & 0xfe) | (m_rtc->read_data() & 0x01);
}
diff --git a/src/devices/bus/cpc/symbfac2.cpp b/src/devices/bus/cpc/symbfac2.cpp
index a68ecdbd900..fbdb67f5085 100644
--- a/src/devices/bus/cpc/symbfac2.cpp
+++ b/src/devices/bus/cpc/symbfac2.cpp
@@ -161,27 +161,12 @@ WRITE8_MEMBER(cpc_symbiface2_device::ide_cs1_w)
// #FD14 (read/write) read from or write into selected register
READ8_MEMBER(cpc_symbiface2_device::rtc_r)
{
- switch(offset & 0x01)
- {
- case 0x00:
- return m_rtc->read(space,1);
- case 0x01:
- return m_rtc->read(space,0);
- }
- return 0;
+ return m_rtc->read(~offset & 0x01);
}
WRITE8_MEMBER(cpc_symbiface2_device::rtc_w)
{
- switch(offset & 0x01)
- {
- case 0x00:
- m_rtc->write(space,1,data);
- break;
- case 0x01:
- m_rtc->write(space,0,data);
- break;
- }
+ m_rtc->write(~offset & 0x01, data);
}
// PS/2 Mouse connector
diff --git a/src/devices/bus/dmv/dmvbus.cpp b/src/devices/bus/dmv/dmvbus.cpp
index 80cb8ae748c..7ad4ae3a2bb 100644
--- a/src/devices/bus/dmv/dmvbus.cpp
+++ b/src/devices/bus/dmv/dmvbus.cpp
@@ -201,7 +201,10 @@ dmvcart_slot_device::dmvcart_slot_device(const machine_config &mconfig, const ch
m_prog_write_cb(*this),
m_out_int_cb(*this),
m_out_irq_cb(*this),
- m_out_thold_cb(*this), m_cart(nullptr)
+ m_out_thold_cb(*this),
+ m_memspace(*this, finder_base::DUMMY_TAG, -1),
+ m_iospace(*this, finder_base::DUMMY_TAG, -1),
+ m_cart(nullptr)
{
}
@@ -276,10 +279,10 @@ void dmvcart_slot_device::ram_write(uint8_t cas, offs_t offset, uint8_t data)
IO read
-------------------------------------------------*/
-void dmvcart_slot_device::io_read(address_space &space, int ifsel, offs_t offset, uint8_t &data)
+void dmvcart_slot_device::io_read(int ifsel, offs_t offset, uint8_t &data)
{
if (m_cart)
- m_cart->io_read(space, ifsel, offset, data);
+ m_cart->io_read(ifsel, offset, data);
}
@@ -287,10 +290,10 @@ void dmvcart_slot_device::io_read(address_space &space, int ifsel, offs_t offset
IO write
-------------------------------------------------*/
-void dmvcart_slot_device::io_write(address_space &space, int ifsel, offs_t offset, uint8_t data)
+void dmvcart_slot_device::io_write(int ifsel, offs_t offset, uint8_t data)
{
if (m_cart)
- m_cart->io_write(space, ifsel, offset, data);
+ m_cart->io_write(ifsel, offset, data);
}
/*-------------------------------------------------
diff --git a/src/devices/bus/dmv/dmvbus.h b/src/devices/bus/dmv/dmvbus.h
index a10eab52bc0..22c81767151 100644
--- a/src/devices/bus/dmv/dmvbus.h
+++ b/src/devices/bus/dmv/dmvbus.h
@@ -25,8 +25,8 @@ public:
virtual bool read(offs_t offset, uint8_t &data) { return false; }
virtual bool write(offs_t offset, uint8_t data) { return false; }
- virtual void io_read(address_space &space, int ifsel, offs_t offset, uint8_t &data) { }
- virtual void io_write(address_space &space, int ifsel, offs_t offset, uint8_t data) { }
+ virtual void io_read(int ifsel, offs_t offset, uint8_t &data) { }
+ virtual void io_write(int ifsel, offs_t offset, uint8_t data) { }
// slot 1
virtual void ram_read(uint8_t cas, offs_t offset, uint8_t &data) { }
@@ -59,14 +59,25 @@ class dmvcart_slot_device : public device_t,
{
public:
// construction/destruction
+ template <typename T>
+ dmvcart_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : dmvcart_slot_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
dmvcart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~dmvcart_slot_device();
- template <class Object> devcb_base &set_prog_read_callback(Object &&cb) { return m_prog_read_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_prog_write_callback(Object &&cb) { return m_prog_write_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_int_callback(Object &&cb) { return m_out_int_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_irq_callback(Object &&cb) { return m_out_irq_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_thold_callback(Object &&cb) { return m_out_thold_cb.set_callback(std::forward<Object>(cb)); }
+ auto prog_read() { return m_prog_read_cb.bind(); }
+ auto prog_write() { return m_prog_write_cb.bind(); }
+ auto out_int() { return m_out_int_cb.bind(); }
+ auto out_irq() { return m_out_irq_cb.bind(); }
+ auto out_thold() { return m_out_thold_cb.bind(); }
+ template <typename T> void set_memspace(T &&tag, int spacenum) { m_memspace.set_tag(std::forward<T>(tag), spacenum); }
+ template <typename T> void set_iospace(T &&tag, int spacenum) { m_iospace.set_tag(std::forward<T>(tag), spacenum); }
// device-level overrides
virtual void device_start() override;
@@ -76,8 +87,8 @@ public:
virtual bool write(offs_t offset, uint8_t data);
virtual void ram_read(uint8_t cas, offs_t offset, uint8_t &data);
virtual void ram_write(uint8_t cas, offs_t offset, uint8_t data);
- virtual void io_read(address_space &space, int ifsel, offs_t offset, uint8_t &data);
- virtual void io_write(address_space &space, int ifsel, offs_t offset, uint8_t data);
+ virtual void io_read(int ifsel, offs_t offset, uint8_t &data);
+ virtual void io_write(int ifsel, offs_t offset, uint8_t data);
virtual void hold_w(int state);
virtual void switch16_w(int state);
virtual void timint_w(int state);
@@ -98,6 +109,10 @@ public:
devcb_write_line m_out_int_cb;
devcb_write_line m_out_irq_cb;
devcb_write_line m_out_thold_cb;
+
+ required_address_space m_memspace;
+ required_address_space m_iospace;
+
device_dmvslot_interface* m_cart;
};
@@ -105,22 +120,4 @@ public:
// device type definition
DECLARE_DEVICE_TYPE(DMVCART_SLOT, dmvcart_slot_device)
-
-/***************************************************************************
- DEVICE CONFIGURATION MACROS
-***************************************************************************/
-
-#define MCFG_DMVCART_SLOT_PROGRAM_READWRITE_CB(_read_devcb, _write_devcb) \
- downcast<dmvcart_slot_device &>(*device).set_prog_read_callback(DEVCB_##_read_devcb); \
- downcast<dmvcart_slot_device &>(*device).set_prog_write_callback(DEVCB_##_write_devcb);
-
-#define MCFG_DMVCART_SLOT_OUT_INT_CB(_devcb) \
- downcast<dmvcart_slot_device &>(*device).set_out_int_callback(DEVCB_##_devcb);
-
-#define MCFG_DMVCART_SLOT_OUT_IRQ_CB(_devcb) \
- downcast<dmvcart_slot_device &>(*device).set_out_irq_callback(DEVCB_##_devcb);
-
-#define MCFG_DMVCART_SLOT_OUT_THOLD_CB(_devcb) \
- downcast<dmvcart_slot_device &>(*device).set_out_thold_callback(DEVCB_##_devcb);
-
#endif // MAME_BUS_DMV_DMVBUS_H
diff --git a/src/devices/bus/dmv/k210.cpp b/src/devices/bus/dmv/k210.cpp
index df16006f19b..d73f2dfb9a9 100644
--- a/src/devices/bus/dmv/k210.cpp
+++ b/src/devices/bus/dmv/k210.cpp
@@ -73,7 +73,8 @@ void dmv_k210_device::device_timer(emu_timer &timer, device_timer_id tid, int pa
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(dmv_k210_device::device_add_mconfig)
+void dmv_k210_device::device_add_mconfig(machine_config &config)
+{
I8255(config, m_ppi, 0);
m_ppi->in_pa_callback().set(FUNC(dmv_k210_device::porta_r));
m_ppi->in_pb_callback().set(FUNC(dmv_k210_device::portb_r));
@@ -93,16 +94,18 @@ MACHINE_CONFIG_START(dmv_k210_device::device_add_mconfig)
m_centronics->init_handler().set(FUNC(dmv_k210_device::cent_init_w));
INPUT_BUFFER(config, m_cent_data_in);
- MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
-MACHINE_CONFIG_END
-void dmv_k210_device::io_read(address_space &space, int ifsel, offs_t offset, uint8_t &data)
+ OUTPUT_LATCH(config, m_cent_data_out);
+ m_centronics->set_output_latch(*m_cent_data_out);
+}
+
+void dmv_k210_device::io_read(int ifsel, offs_t offset, uint8_t &data)
{
if (ifsel == 0)
data = m_ppi->read(offset & 0x03);
}
-void dmv_k210_device::io_write(address_space &space, int ifsel, offs_t offset, uint8_t data)
+void dmv_k210_device::io_write(int ifsel, offs_t offset, uint8_t data)
{
if (ifsel == 0)
m_ppi->write(offset & 0x03, data);
diff --git a/src/devices/bus/dmv/k210.h b/src/devices/bus/dmv/k210.h
index dcc51a374ed..501178f6fcf 100644
--- a/src/devices/bus/dmv/k210.h
+++ b/src/devices/bus/dmv/k210.h
@@ -33,8 +33,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// dmvcart_interface overrides
- virtual void io_read(address_space &space, int ifsel, offs_t offset, uint8_t &data) override;
- virtual void io_write(address_space &space, int ifsel, offs_t offset, uint8_t data) override;
+ virtual void io_read(int ifsel, offs_t offset, uint8_t &data) override;
+ virtual void io_write(int ifsel, offs_t offset, uint8_t data) override;
private:
DECLARE_READ8_MEMBER(porta_r);
diff --git a/src/devices/bus/dmv/k220.cpp b/src/devices/bus/dmv/k220.cpp
index 4fff4f5b2bf..4ad0667f689 100644
--- a/src/devices/bus/dmv/k220.cpp
+++ b/src/devices/bus/dmv/k220.cpp
@@ -122,6 +122,7 @@ DEFINE_DEVICE_TYPE(DMV_K220, dmv_k220_device, "dmv_k220", "K220 diagnostic")
dmv_k220_device::dmv_k220_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, DMV_K220, tag, owner, clock)
, device_dmvslot_interface(mconfig, *this)
+ , m_bus(*this, DEVICE_SELF_OWNER)
, m_pit(*this, "pit8253")
, m_ppi(*this, "ppi8255")
, m_ram(*this, "ram")
@@ -137,7 +138,7 @@ dmv_k220_device::dmv_k220_device(const machine_config &mconfig, const char *tag,
void dmv_k220_device::device_start()
{
- address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
+ address_space &space = *m_bus->m_iospace;
space.install_readwrite_handler(0x08, 0x0b, read8sm_delegate(FUNC(pit8253_device::read), &(*m_pit)), write8sm_delegate(FUNC(pit8253_device::write), &(*m_pit)), 0);
space.install_readwrite_handler(0x0c, 0x0f, read8sm_delegate(FUNC(i8255_device::read), &(*m_ppi)), write8sm_delegate(FUNC(i8255_device::write), &(*m_ppi)), 0);
diff --git a/src/devices/bus/dmv/k220.h b/src/devices/bus/dmv/k220.h
index 453b3e49f78..60edad3b5f3 100644
--- a/src/devices/bus/dmv/k220.h
+++ b/src/devices/bus/dmv/k220.h
@@ -44,6 +44,7 @@ private:
DECLARE_WRITE_LINE_MEMBER(write_out1);
DECLARE_WRITE_LINE_MEMBER(write_out2);
+ required_device<dmvcart_slot_device> m_bus;
required_device<pit8253_device> m_pit;
required_device<i8255_device> m_ppi;
required_memory_region m_ram;
diff --git a/src/devices/bus/dmv/k230.cpp b/src/devices/bus/dmv/k230.cpp
index 9104abe2f7b..b5454fa78db 100644
--- a/src/devices/bus/dmv/k230.cpp
+++ b/src/devices/bus/dmv/k230.cpp
@@ -98,7 +98,10 @@ dmv_k230_device::dmv_k230_device(const machine_config &mconfig, device_type type
: device_t(mconfig, type, tag, owner, clock)
, device_dmvslot_interface(mconfig, *this)
, m_maincpu(*this, "maincpu")
- , m_rom(*this, "rom"), m_bus(nullptr), m_io(nullptr), m_switch16(0), m_hold(0)
+ , m_rom(*this, "rom")
+ , m_bus(*this, DEVICE_SELF_OWNER)
+ , m_switch16(0)
+ , m_hold(0)
{
}
@@ -136,14 +139,12 @@ dmv_k235_device::dmv_k235_device(const machine_config &mconfig, const char *tag,
void dmv_k230_device::device_start()
{
- m_bus = static_cast<dmvcart_slot_device*>(owner());
- m_io = &machine().device<cpu_device>("maincpu")->space(AS_IO);
}
void dmv_k234_device::device_start()
{
dmv_k230_device::device_start();
- m_io->install_readwrite_handler(0xd8, 0xdf, read8_delegate(FUNC(dmv_k234_device::snr_r), this), write8_delegate(FUNC(dmv_k234_device::snr_w), this), 0);
+ m_bus->m_iospace->install_readwrite_handler(0xd8, 0xdf, read8_delegate(FUNC(dmv_k234_device::snr_r), this), write8_delegate(FUNC(dmv_k234_device::snr_w), this), 0);
}
//-------------------------------------------------
@@ -247,12 +248,12 @@ READ8_MEMBER(dmv_k230_device::rom_r)
READ8_MEMBER( dmv_k230_device::io_r )
{
- return m_io->read_byte(offset);
+ return m_bus->m_iospace->read_byte(offset);
}
WRITE8_MEMBER( dmv_k230_device::io_w )
{
- m_io->write_byte(offset, data);
+ m_bus->m_iospace->write_byte(offset, data);
}
READ8_MEMBER( dmv_k230_device::program_r )
diff --git a/src/devices/bus/dmv/k230.h b/src/devices/bus/dmv/k230.h
index 7021a4a8987..e8e70fd878a 100644
--- a/src/devices/bus/dmv/k230.h
+++ b/src/devices/bus/dmv/k230.h
@@ -51,8 +51,7 @@ protected:
required_device<cpu_device> m_maincpu;
optional_memory_region m_rom;
- dmvcart_slot_device * m_bus;
- address_space * m_io;
+ required_device<dmvcart_slot_device> m_bus;
int m_switch16;
int m_hold;
diff --git a/src/devices/bus/dmv/k233.cpp b/src/devices/bus/dmv/k233.cpp
index 2ba68d3f53f..2c8b13cff00 100644
--- a/src/devices/bus/dmv/k233.cpp
+++ b/src/devices/bus/dmv/k233.cpp
@@ -54,7 +54,7 @@ void dmv_k233_device::device_reset()
m_enabled = false;
}
-void dmv_k233_device::io_write(address_space &space, int ifsel, offs_t offset, uint8_t data)
+void dmv_k233_device::io_write(int ifsel, offs_t offset, uint8_t data)
{
if (ifsel == 1)
m_enabled = !m_enabled;
diff --git a/src/devices/bus/dmv/k233.h b/src/devices/bus/dmv/k233.h
index 8aa2f0d235b..e73ae71a9df 100644
--- a/src/devices/bus/dmv/k233.h
+++ b/src/devices/bus/dmv/k233.h
@@ -27,7 +27,7 @@ protected:
virtual void device_reset() override;
// dmvcart_interface overrides
- virtual void io_write(address_space &space, int ifsel, offs_t offset, uint8_t data) override;
+ virtual void io_write(int ifsel, offs_t offset, uint8_t data) override;
virtual bool read(offs_t offset, uint8_t &data) override;
virtual bool write(offs_t offset, uint8_t data) override;
diff --git a/src/devices/bus/dmv/k801.cpp b/src/devices/bus/dmv/k801.cpp
index 64098400288..7c4892f4fb0 100644
--- a/src/devices/bus/dmv/k801.cpp
+++ b/src/devices/bus/dmv/k801.cpp
@@ -206,7 +206,7 @@ WRITE_LINE_MEMBER(dmv_k801_device::epci_irq_w)
m_bus->m_out_irq_cb(state);
}
-void dmv_k801_device::io_read(address_space &space, int ifsel, offs_t offset, uint8_t &data)
+void dmv_k801_device::io_read(int ifsel, offs_t offset, uint8_t &data)
{
uint8_t dsw = m_dsw->read() & 0x0f;
if ((dsw >> 1) == ifsel && BIT(offset, 3) == BIT(dsw, 0))
@@ -218,7 +218,7 @@ void dmv_k801_device::io_read(address_space &space, int ifsel, offs_t offset, ui
}
}
-void dmv_k801_device::io_write(address_space &space, int ifsel, offs_t offset, uint8_t data)
+void dmv_k801_device::io_write(int ifsel, offs_t offset, uint8_t data)
{
uint8_t dsw = m_dsw->read() & 0x0f;
if ((dsw >> 1) == ifsel && BIT(offset, 3) == BIT(dsw, 0))
@@ -230,7 +230,7 @@ void dmv_k801_device::io_write(address_space &space, int ifsel, offs_t offset, u
}
}
-void dmv_k211_device::io_read(address_space &space, int ifsel, offs_t offset, uint8_t &data)
+void dmv_k211_device::io_read(int ifsel, offs_t offset, uint8_t &data)
{
uint8_t jumpers = m_dsw->read() & 0x03;
if ((BIT(jumpers, 0) && ifsel == 0) || (BIT(jumpers, 1) && ifsel == 1))
@@ -242,7 +242,7 @@ void dmv_k211_device::io_read(address_space &space, int ifsel, offs_t offset, ui
}
}
-void dmv_k211_device::io_write(address_space &space, int ifsel, offs_t offset, uint8_t data)
+void dmv_k211_device::io_write(int ifsel, offs_t offset, uint8_t data)
{
uint8_t jumpers = m_dsw->read() & 0x03;
if ((BIT(jumpers, 0) && ifsel == 0) || (BIT(jumpers, 1) && ifsel == 1))
diff --git a/src/devices/bus/dmv/k801.h b/src/devices/bus/dmv/k801.h
index 26f314b2149..db4b557bbb1 100644
--- a/src/devices/bus/dmv/k801.h
+++ b/src/devices/bus/dmv/k801.h
@@ -36,8 +36,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// dmvcart_interface overrides
- virtual void io_read(address_space &space, int ifsel, offs_t offset, uint8_t &data) override;
- virtual void io_write(address_space &space, int ifsel, offs_t offset, uint8_t data) override;
+ virtual void io_read(int ifsel, offs_t offset, uint8_t &data) override;
+ virtual void io_write(int ifsel, offs_t offset, uint8_t data) override;
required_device<mc2661_device> m_epci;
required_device<rs232_port_device> m_rs232;
@@ -67,8 +67,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// dmvcart_interface overrides
- virtual void io_read(address_space &space, int ifsel, offs_t offset, uint8_t &data) override;
- virtual void io_write(address_space &space, int ifsel, offs_t offset, uint8_t data) override;
+ virtual void io_read(int ifsel, offs_t offset, uint8_t &data) override;
+ virtual void io_write(int ifsel, offs_t offset, uint8_t data) override;
};
// ======================> dmv_k212_device
diff --git a/src/devices/bus/dmv/k803.cpp b/src/devices/bus/dmv/k803.cpp
index 04ed7445b0e..d0cf9cff336 100644
--- a/src/devices/bus/dmv/k803.cpp
+++ b/src/devices/bus/dmv/k803.cpp
@@ -75,10 +75,11 @@ void dmv_k803_device::device_reset()
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(dmv_k803_device::device_add_mconfig)
- MCFG_DEVICE_ADD("rtc", MM58167, XTAL(32'768))
- MCFG_MM58167_IRQ_CALLBACK(WRITELINE(*this, dmv_k803_device, rtc_irq_w))
-MACHINE_CONFIG_END
+void dmv_k803_device::device_add_mconfig(machine_config &config)
+{
+ MM58167(config, m_rtc, XTAL(32'768));
+ m_rtc->irq().set(FUNC(dmv_k803_device::rtc_irq_w));
+}
//-------------------------------------------------
// input_ports - device-specific input ports
@@ -89,23 +90,23 @@ ioport_constructor dmv_k803_device::device_input_ports() const
return INPUT_PORTS_NAME( dmv_k803 );
}
-void dmv_k803_device::io_read(address_space &space, int ifsel, offs_t offset, uint8_t &data)
+void dmv_k803_device::io_read(int ifsel, offs_t offset, uint8_t &data)
{
uint8_t dsw = m_dsw->read() & 0x0f;
if ((dsw >> 1) == ifsel && BIT(offset, 3) == BIT(dsw, 0))
{
if (offset & 0x04)
- data = m_rtc->read(space, ((m_latch & 0x07) << 2) | (offset & 0x03));
+ data = m_rtc->read(((m_latch & 0x07) << 2) | (offset & 0x03));
}
}
-void dmv_k803_device::io_write(address_space &space, int ifsel, offs_t offset, uint8_t data)
+void dmv_k803_device::io_write(int ifsel, offs_t offset, uint8_t data)
{
uint8_t dsw = m_dsw->read() & 0x0f;
if ((dsw >> 1) == ifsel && BIT(offset, 3) == BIT(dsw, 0))
{
if (offset & 0x04)
- m_rtc->write(space, ((m_latch & 0x07) << 2) | (offset & 0x03), data);
+ m_rtc->write(((m_latch & 0x07) << 2) | (offset & 0x03), data);
else
{
m_latch = data;
diff --git a/src/devices/bus/dmv/k803.h b/src/devices/bus/dmv/k803.h
index 0e1e190e89f..e8455646d1e 100644
--- a/src/devices/bus/dmv/k803.h
+++ b/src/devices/bus/dmv/k803.h
@@ -31,8 +31,8 @@ protected:
virtual ioport_constructor device_input_ports() const override;
virtual void device_add_mconfig(machine_config &config) override;
- virtual void io_read(address_space &space, int ifsel, offs_t offset, uint8_t &data) override;
- virtual void io_write(address_space &space, int ifsel, offs_t offset, uint8_t data) override;
+ virtual void io_read(int ifsel, offs_t offset, uint8_t &data) override;
+ virtual void io_write(int ifsel, offs_t offset, uint8_t data) override;
void update_int();
diff --git a/src/devices/bus/dmv/k806.cpp b/src/devices/bus/dmv/k806.cpp
index 62cf3f97ea4..a747efa24f4 100644
--- a/src/devices/bus/dmv/k806.cpp
+++ b/src/devices/bus/dmv/k806.cpp
@@ -128,19 +128,19 @@ const tiny_rom_entry *dmv_k806_device::device_rom_region() const
return ROM_NAME( dmv_k806 );
}
-void dmv_k806_device::io_read(address_space &space, int ifsel, offs_t offset, uint8_t &data)
+void dmv_k806_device::io_read(int ifsel, offs_t offset, uint8_t &data)
{
uint8_t jumpers = m_jumpers->read();
if (BIT(jumpers, ifsel) && ((!BIT(offset, 3) && BIT(jumpers, 5)) || (BIT(offset, 3) && BIT(jumpers, 6))))
- data = m_mcu->upi41_master_r(space, offset & 1);
+ data = m_mcu->upi41_master_r(machine().dummy_space(), offset & 1);
}
-void dmv_k806_device::io_write(address_space &space, int ifsel, offs_t offset, uint8_t data)
+void dmv_k806_device::io_write(int ifsel, offs_t offset, uint8_t data)
{
uint8_t jumpers = m_jumpers->read();
if (BIT(jumpers, ifsel) && ((!BIT(offset, 3) && BIT(jumpers, 5)) || (BIT(offset, 3) && BIT(jumpers, 6))))
{
- m_mcu->upi41_master_w(space, offset & 1, data);
+ m_mcu->upi41_master_w(machine().dummy_space(), offset & 1, data);
m_bus->m_out_int_cb(CLEAR_LINE);
}
}
diff --git a/src/devices/bus/dmv/k806.h b/src/devices/bus/dmv/k806.h
index da178a2945d..082d56b11a6 100644
--- a/src/devices/bus/dmv/k806.h
+++ b/src/devices/bus/dmv/k806.h
@@ -35,8 +35,8 @@ protected:
virtual ioport_constructor device_input_ports() const override;
virtual void device_add_mconfig(machine_config &config) override;
- virtual void io_read(address_space &space, int ifsel, offs_t offset, uint8_t &data) override;
- virtual void io_write(address_space &space, int ifsel, offs_t offset, uint8_t data) override;
+ virtual void io_read(int ifsel, offs_t offset, uint8_t &data) override;
+ virtual void io_write(int ifsel, offs_t offset, uint8_t data) override;
private:
DECLARE_READ_LINE_MEMBER(portt1_r);
diff --git a/src/devices/bus/ecbbus/ecbbus.h b/src/devices/bus/ecbbus/ecbbus.h
index f4d53b5cc9a..c14f1c53de4 100644
--- a/src/devices/bus/ecbbus/ecbbus.h
+++ b/src/devices/bus/ecbbus/ecbbus.h
@@ -56,27 +56,6 @@
#define ECBBUS_TAG "ecbbus"
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_ECBBUS_ADD() \
- MCFG_DEVICE_ADD(ECBBUS_TAG, ECBBUS, 0)
-#define MCFG_ECBBUS_SLOT_ADD(_num, _tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, ECBBUS_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- downcast<ecbbus_slot_device &>(*device).set_ecbbus_slot(ECBBUS_TAG, _num);
-
-
-#define MCFG_ECBBUS_IRQ_CALLBACK(_write) \
- downcast<ecbbus_device &>(*device).set_irq_wr_callback(DEVCB_##_write);
-
-#define MCFG_ECBBUS_NMI_CALLBACK(_write) \
- downcast<ecbbus_device &>(*device).set_nmi_wr_callback(DEVCB_##_write);
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -90,6 +69,17 @@ class ecbbus_slot_device : public device_t,
{
public:
// construction/destruction
+ template <typename T>
+ ecbbus_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, int num, T &&opts, char const *dflt)
+ : ecbbus_slot_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ set_ecbbus_slot(ECBBUS_TAG, num);
+ }
+
ecbbus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
@@ -121,10 +111,10 @@ class ecbbus_device : public device_t
{
public:
// construction/destruction
- ecbbus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ ecbbus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
- template <class Object> devcb_base &set_irq_wr_callback(Object &&cb) { return m_write_irq.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_nmi_wr_callback(Object &&cb) { return m_write_nmi.set_callback(std::forward<Object>(cb)); }
+ auto irq_wr_callback() { return m_write_irq.bind(); }
+ auto nmi_wr_callback() { return m_write_nmi.bind(); }
void add_card(device_ecbbus_card_interface *card, int pos);
diff --git a/src/devices/bus/econet/e01.cpp b/src/devices/bus/econet/e01.cpp
index cb1f385aa86..fca4c189033 100644
--- a/src/devices/bus/econet/e01.cpp
+++ b/src/devices/bus/econet/e01.cpp
@@ -647,7 +647,7 @@ WRITE8_MEMBER( econet_e01_device::hdc_irq_enable_w )
READ8_MEMBER( econet_e01_device::rtc_address_r )
{
- return m_rtc->read(space, 0);
+ return m_rtc->read(0);
}
@@ -657,7 +657,7 @@ READ8_MEMBER( econet_e01_device::rtc_address_r )
WRITE8_MEMBER( econet_e01_device::rtc_address_w )
{
- m_rtc->write(space, 0, data);
+ m_rtc->write(0, data);
}
@@ -667,7 +667,7 @@ WRITE8_MEMBER( econet_e01_device::rtc_address_w )
READ8_MEMBER( econet_e01_device::rtc_data_r )
{
- return m_rtc->read(space, 1);
+ return m_rtc->read(1);
}
@@ -677,7 +677,7 @@ READ8_MEMBER( econet_e01_device::rtc_data_r )
WRITE8_MEMBER( econet_e01_device::rtc_data_w )
{
- m_rtc->write(space, 1, data);
+ m_rtc->write(1, data);
}
diff --git a/src/devices/bus/econet/econet.h b/src/devices/bus/econet/econet.h
index bbe4167cfa9..dd92811e28b 100644
--- a/src/devices/bus/econet/econet.h
+++ b/src/devices/bus/econet/econet.h
@@ -21,28 +21,6 @@
#define ECONET_TAG "econet"
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_ECONET_ADD() \
- MCFG_DEVICE_ADD(ECONET_TAG, ECONET, 0)
-
-#define MCFG_ECONET_SLOT_ADD(_tag, _num, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, ECONET_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- downcast<econet_slot_device &>(*device).set_slot(_num);
-
-
-#define MCFG_ECONET_CLK_CALLBACK(_write) \
- downcast<econet_device &>(*device).set_clk_wr_callback(DEVCB_##_write);
-
-#define MCFG_ECONET_DATA_CALLBACK(_write) \
- downcast<econet_device &>(*device).set_data_wr_callback(DEVCB_##_write);
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -57,8 +35,6 @@ public:
// construction/destruction
econet_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- template <class Object> devcb_base &set_clk_wr_callback(Object &&cb) { return m_write_clk.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_data_wr_callback(Object &&cb) { return m_write_data.set_callback(std::forward<Object>(cb)); }
auto clk_wr_callback() { return m_write_clk.bind(); }
auto data_wr_callback() { return m_write_data.bind(); }
diff --git a/src/devices/bus/einstein/pipe/pipe.cpp b/src/devices/bus/einstein/pipe/pipe.cpp
index b40038e650b..d521d146325 100644
--- a/src/devices/bus/einstein/pipe/pipe.cpp
+++ b/src/devices/bus/einstein/pipe/pipe.cpp
@@ -33,8 +33,8 @@ DEFINE_DEVICE_TYPE(TATUNG_PIPE, tatung_pipe_device, "tatung_pipe", "Tatung Pipe
tatung_pipe_device::tatung_pipe_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, TATUNG_PIPE, tag, owner, clock),
device_slot_interface(mconfig, *this),
- m_program(nullptr),
- m_io(nullptr),
+ m_program(*this, finder_base::DUMMY_TAG, -1),
+ m_io(*this, finder_base::DUMMY_TAG, -1),
m_card(nullptr),
m_int_handler(*this),
m_nmi_handler(*this),
@@ -51,6 +51,28 @@ tatung_pipe_device::~tatung_pipe_device()
}
//-------------------------------------------------
+// device_config_complete - perform any
+// operations now that the configuration is
+// complete
+//-------------------------------------------------
+
+void tatung_pipe_device::device_config_complete()
+{
+ // for passthrough connectors, use the parent slot's spaces
+ if (dynamic_cast<device_tatung_pipe_interface *>(owner()) != nullptr)
+ {
+ auto parent = dynamic_cast<tatung_pipe_device *>(owner()->owner());
+ if (parent != nullptr)
+ {
+ if (m_program.finder_tag() == finder_base::DUMMY_TAG)
+ m_program.set_tag(parent->m_program, parent->m_program.spacenum());
+ if (m_io.finder_tag() == finder_base::DUMMY_TAG)
+ m_io.set_tag(parent->m_io, parent->m_io.spacenum());
+ }
+ }
+}
+
+//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -83,24 +105,6 @@ WRITE_LINE_MEMBER( tatung_pipe_device::host_int_w )
m_card->int_w(state);
}
-//-------------------------------------------------
-// set_program_space - set address space we are attached to
-//-------------------------------------------------
-
-void tatung_pipe_device::set_program_space(address_space *program)
-{
- m_program = program;
-}
-
-//-------------------------------------------------
-// set_io_space - set address space we are attached to
-//-------------------------------------------------
-
-void tatung_pipe_device::set_io_space(address_space *io)
-{
- m_io = io;
-}
-
//**************************************************************************
// CARD INTERFACE
diff --git a/src/devices/bus/einstein/pipe/pipe.h b/src/devices/bus/einstein/pipe/pipe.h
index e0ce7e9a6f7..f0c32bd0043 100644
--- a/src/devices/bus/einstein/pipe/pipe.h
+++ b/src/devices/bus/einstein/pipe/pipe.h
@@ -68,8 +68,8 @@ public:
}
virtual ~tatung_pipe_device();
- void set_program_space(address_space *program);
- void set_io_space(address_space *io);
+ template <typename T> void set_program_space(T &&tag, int spacenum) { m_program.set_tag(std::forward<T>(tag), spacenum); }
+ template <typename T> void set_io_space(T &&tag, int spacenum) { m_io.set_tag(std::forward<T>(tag), spacenum); }
// callbacks
auto int_handler() { return m_int_handler.bind(); }
@@ -86,11 +86,12 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete() override;
virtual void device_start() override;
virtual void device_reset() override;
- address_space *m_program;
- address_space *m_io;
+ required_address_space m_program;
+ required_address_space m_io;
device_tatung_pipe_interface *m_card;
diff --git a/src/devices/bus/einstein/pipe/speculator.cpp b/src/devices/bus/einstein/pipe/speculator.cpp
index 75519847e16..ed35973ab12 100644
--- a/src/devices/bus/einstein/pipe/speculator.cpp
+++ b/src/devices/bus/einstein/pipe/speculator.cpp
@@ -25,7 +25,8 @@ DEFINE_DEVICE_TYPE(EINSTEIN_SPECULATOR, einstein_speculator_device, "einstein_sp
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(einstein_speculator_device::device_add_mconfig)
+void einstein_speculator_device::device_add_mconfig(machine_config &config)
+{
TTL74123(config, m_ic5a, 0);
m_ic5a->set_connection_type(TTL74123_NOT_GROUNDED_NO_DIODE);
m_ic5a->set_resistor_value(RES_K(47));
@@ -48,11 +49,11 @@ MACHINE_CONFIG_START(einstein_speculator_device::device_add_mconfig)
WAVE(config, "wave", m_cassette).add_route(ALL_OUTPUTS, "mono", 0.25);
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.50);
- MCFG_CASSETTE_ADD(m_cassette)
- MCFG_CASSETTE_FORMATS(tzx_cassette_formats)
- MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED)
- MCFG_CASSETTE_INTERFACE("spectrum_cass")
-MACHINE_CONFIG_END
+ CASSETTE(config, m_cassette);
+ m_cassette->set_formats(tzx_cassette_formats);
+ m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED);
+ m_cassette->set_interface("spectrum_cass");
+}
//**************************************************************************
diff --git a/src/devices/bus/einstein/pipe/tk02.cpp b/src/devices/bus/einstein/pipe/tk02.cpp
index d0926f2e320..311c3099011 100644
--- a/src/devices/bus/einstein/pipe/tk02.cpp
+++ b/src/devices/bus/einstein/pipe/tk02.cpp
@@ -159,9 +159,6 @@ void tk02_device::device_start()
void tk02_device::device_reset()
{
- m_pipe->set_io_space(&io_space());
- m_pipe->set_program_space(&program_space());
-
io_space().install_device(0x40, 0x4f, *this, &tk02_device::map);
io_space().install_readwrite_handler(0x40, 0x47, 0, 0, 0xff00, read8_delegate(FUNC(tk02_device::ram_r), this), write8_delegate(FUNC(tk02_device::ram_w), this));
}
diff --git a/src/devices/bus/einstein/userport/userport.h b/src/devices/bus/einstein/userport/userport.h
index 4bdbaed36d2..f5bd8dcfeb3 100644
--- a/src/devices/bus/einstein/userport/userport.h
+++ b/src/devices/bus/einstein/userport/userport.h
@@ -24,32 +24,32 @@
//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_EINSTEIN_USERPORT_ADD(_tag) \
- MCFG_DEVICE_ADD(_tag, EINSTEIN_USERPORT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(einstein_userport_cards, nullptr, false)
-
-#define MCFG_EINSTEIN_USERPORT_BSTB_HANDLER(_devcb) \
- downcast<einstein_userport_device &>(*device).set_bstb_handler(DEVCB_##_devcb);
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
class device_einstein_userport_interface;
+// supported devices
+void einstein_userport_cards(device_slot_interface &device);
+
class einstein_userport_device : public device_t, public device_slot_interface
{
public:
// construction/destruction
+ einstein_userport_device(machine_config const &mconfig, char const *tag, device_t *owner)
+ : einstein_userport_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ option_reset();
+ einstein_userport_cards(*this);
+ set_default_option(nullptr);
+ set_fixed(false);
+ }
+
einstein_userport_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~einstein_userport_device();
// callbacks
- template <class Object> devcb_base &set_bstb_handler(Object &&cb) { return m_bstb_handler.set_callback(std::forward<Object>(cb)); }
+ auto bstb_handler() { return m_bstb_handler.bind(); }
// called from card device
DECLARE_WRITE_LINE_MEMBER( bstb_w ) { m_bstb_handler(state); }
@@ -89,7 +89,4 @@ protected:
// device type definition
DECLARE_DEVICE_TYPE(EINSTEIN_USERPORT, einstein_userport_device)
-// supported devices
-void einstein_userport_cards(device_slot_interface &device);
-
#endif // MAME_BUS_EINSTEIN_USERPORT_USERPORT_H
diff --git a/src/devices/bus/ekara/rom.cpp b/src/devices/bus/ekara/rom.cpp
index 7ba557b0917..f55fd325d2a 100644
--- a/src/devices/bus/ekara/rom.cpp
+++ b/src/devices/bus/ekara/rom.cpp
@@ -10,8 +10,10 @@
DEFINE_DEVICE_TYPE(EKARA_ROM_PLAIN, ekara_rom_plain_device, "ekara_rom_plain", "EKARA Cartridge")
DEFINE_DEVICE_TYPE(EKARA_ROM_I2C_BASE, ekara_rom_i2c_base_device, "ekara_rom_i2c_base", "EKARA Cartridge with I2C")
+DEFINE_DEVICE_TYPE(EKARA_ROM_I2C_24C08_EPITCH, ekara_rom_i2c_24c08_epitch_device, "ekara_rom_i2c_24c08", "EKARA Cartridge with I2C 24C08 (e-pitch)")
DEFINE_DEVICE_TYPE(EKARA_ROM_I2C_24LC04, ekara_rom_i2c_24lc04_device, "ekara_rom_i2c_24lc04", "EKARA Cartridge with I2C 24LC04")
DEFINE_DEVICE_TYPE(EKARA_ROM_I2C_24LC02, ekara_rom_i2c_24lc02_device, "ekara_rom_i2c_24lc02", "EKARA Cartridge with I2C 24LC02")
+DEFINE_DEVICE_TYPE(EKARA_ROM_I2C_24LC02_GC0010, ekara_rom_i2c_24lc02_gc0010_device, "ekara_rom_i2c_24lc02_gc0010", "EKARA Cartridge with I2C 24LC02 (GC0010 direct access)")
ekara_rom_plain_device::ekara_rom_plain_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
@@ -24,18 +26,24 @@ ekara_rom_plain_device::ekara_rom_plain_device(const machine_config &mconfig, co
{
}
-ekara_rom_i2c_base_device::ekara_rom_i2c_base_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- ekara_rom_plain_device(mconfig, EKARA_ROM_I2C_BASE, tag, owner, clock),
- m_i2cmem(*this, "i2cmem")
-{
-}
+
ekara_rom_i2c_base_device::ekara_rom_i2c_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
ekara_rom_plain_device(mconfig, type, tag, owner, clock),
m_i2cmem(*this, "i2cmem")
{
+ m_buscontrol[0] = m_buscontrol[1] = m_buscontrol[2] = 0x00;
}
+ekara_rom_i2c_base_device::ekara_rom_i2c_base_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ ekara_rom_i2c_base_device(mconfig, EKARA_ROM_I2C_BASE, tag, owner, clock)
+{
+}
+
+ekara_rom_i2c_24c08_epitch_device::ekara_rom_i2c_24c08_epitch_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ ekara_rom_i2c_base_device(mconfig, EKARA_ROM_I2C_24C08_EPITCH, tag, owner, clock)
+{
+}
ekara_rom_i2c_24lc04_device::ekara_rom_i2c_24lc04_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
ekara_rom_i2c_base_device(mconfig, EKARA_ROM_I2C_24LC04, tag, owner, clock)
@@ -47,6 +55,11 @@ ekara_rom_i2c_24lc02_device::ekara_rom_i2c_24lc02_device(const machine_config &m
{
}
+ekara_rom_i2c_24lc02_gc0010_device::ekara_rom_i2c_24lc02_gc0010_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ ekara_rom_i2c_base_device(mconfig, EKARA_ROM_I2C_24LC02_GC0010, tag, owner, clock)
+{
+}
+
/*-------------------------------------------------
mapper specific handlers
-------------------------------------------------*/
@@ -75,6 +88,22 @@ WRITE8_MEMBER(ekara_rom_plain_device::write_rom)
// i2c base
+bool ekara_rom_i2c_base_device::is_read_access_not_rom(void)
+{
+ return (m_buscontrol[1] & 0x08) ? true : false;
+}
+
+bool ekara_rom_i2c_base_device::is_write_access_not_rom(void)
+{
+ return (m_buscontrol[0] & 0x08) ? true : false;
+}
+
+WRITE8_MEMBER(ekara_rom_i2c_base_device::write_bus_control)
+{
+ logerror("ekara_rom_i2c_base_device::write_bus_control %08x %02x\n", offset, data);
+ m_buscontrol[offset] = data;
+}
+
WRITE8_MEMBER(ekara_rom_i2c_base_device::write_rom)
{
logerror("ekara_rom_i2c_base_device::write_rom %08x %02x\n", offset, data);
@@ -100,18 +129,85 @@ WRITE8_MEMBER(ekara_rom_i2c_base_device::write_extra)
m_i2cmem->write_scl((data & 0x02) >> 1);
}
+// i2c 24c08 (for epitch carts)
+
+bool ekara_rom_i2c_24c08_epitch_device::is_read_access_not_rom(void)
+{
+ // write 0x08 before reading from SEEPROM
+ // reads from 005fffff, cart does no accress decoding
+ return (m_buscontrol[1] & 0x08) ? true : false;
+}
+
+bool ekara_rom_i2c_24c08_epitch_device::is_write_access_not_rom(void)
+{
+ // writes 0x05 before writing to SEEPROM
+ // actually writes to address 3fffff which is where a mirror of the base ROM sits, but clearly all signals route through the cartridge too
+ // cart does no accress decoding
+ return (m_buscontrol[1] & 0x04) ? true : false;
+}
+
+void ekara_rom_i2c_24c08_epitch_device::device_add_mconfig(machine_config &config)
+{
+ I2CMEM(config, "i2cmem", 0).set_page_size(16).set_data_size(0x400); // 24C08
+}
// i2c 24lc04
-MACHINE_CONFIG_START(ekara_rom_i2c_24lc04_device::device_add_mconfig)
- I2CMEM(config, "i2cmem", 0)/*.set_page_size(16)*/.set_data_size(0x200); // 24LC04
-MACHINE_CONFIG_END
+void ekara_rom_i2c_24lc04_device::device_add_mconfig(machine_config &config)
+{
+ I2CMEM(config, "i2cmem", 0).set_page_size(16).set_data_size(0x200); // 24LC04
+}
// i2c 24lc02
-MACHINE_CONFIG_START(ekara_rom_i2c_24lc02_device::device_add_mconfig)
+void ekara_rom_i2c_24lc02_device::device_add_mconfig(machine_config &config)
+{
+ I2CMEM(config, "i2cmem", 0).set_page_size(16).set_data_size(0x100); // 24LC02
+}
+
+// i2c 24lc02 with direct IO port access
+
+bool ekara_rom_i2c_24lc02_gc0010_device::is_read_access_not_rom(void)
+{
+ return false;
+}
+
+bool ekara_rom_i2c_24lc02_gc0010_device::is_write_access_not_rom(void)
+{
+ return false;
+}
+
+READ8_MEMBER(ekara_rom_i2c_24lc02_gc0010_device::read_extra)
+{
+ return 0;
+}
+
+WRITE8_MEMBER(ekara_rom_i2c_24lc02_gc0010_device::write_extra)
+{
+}
+
+
+WRITE_LINE_MEMBER(ekara_rom_i2c_24lc02_gc0010_device::write_sda)
+{
+ m_i2cmem->write_sda(state);
+}
+
+WRITE_LINE_MEMBER(ekara_rom_i2c_24lc02_gc0010_device::write_scl)
+{
+ m_i2cmem->write_scl(state);
+}
+
+READ_LINE_MEMBER(ekara_rom_i2c_24lc02_gc0010_device::read_sda )
+{
+ return m_i2cmem->read_sda();
+}
+
+
+
+void ekara_rom_i2c_24lc02_gc0010_device::device_add_mconfig(machine_config &config)
+{
I2CMEM(config, "i2cmem", 0)/*.set_page_size(16)*/.set_data_size(0x100); // 24LC02
-MACHINE_CONFIG_END
+}
/*-------------------------------------------------
@@ -121,6 +217,9 @@ MACHINE_CONFIG_END
void ekara_cart(device_slot_interface &device)
{
device.option_add_internal("plain", EKARA_ROM_PLAIN);
+ device.option_add_internal("rom_24c08_epitch", EKARA_ROM_I2C_24C08_EPITCH);
device.option_add_internal("rom_24lc04", EKARA_ROM_I2C_24LC04);
- device.option_add_internal("rom_24lc02", EKARA_ROM_I2C_24LC02);
+ device.option_add_internal("rom_24lc02", EKARA_ROM_I2C_24LC02);
+ device.option_add_internal("rom_24lc02_gc0010", EKARA_ROM_I2C_24LC02_GC0010);
+
}
diff --git a/src/devices/bus/ekara/rom.h b/src/devices/bus/ekara/rom.h
index a765f28d6d3..76c5ed45e46 100644
--- a/src/devices/bus/ekara/rom.h
+++ b/src/devices/bus/ekara/rom.h
@@ -54,8 +54,32 @@ protected:
virtual DECLARE_READ8_MEMBER(read_extra) override;
virtual DECLARE_WRITE8_MEMBER(write_extra) override;
+
+ virtual DECLARE_WRITE8_MEMBER(write_bus_control) override;
+
+ virtual bool is_read_access_not_rom(void) override;
+ virtual bool is_write_access_not_rom(void) override;
+
+ uint8_t m_buscontrol[3];
};
+
+// ======================> ekara_rom_i2c_24c08_epitch_device
+
+class ekara_rom_i2c_24c08_epitch_device : public ekara_rom_i2c_base_device
+{
+public:
+ // construction/destruction
+ ekara_rom_i2c_24c08_epitch_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ virtual bool is_read_access_not_rom(void) override;
+ virtual bool is_write_access_not_rom(void) override;
+
+ virtual void device_add_mconfig(machine_config &config) override;
+};
+
+
// ======================> ekara_rom_i2c_24lc04_device
class ekara_rom_i2c_24lc04_device : public ekara_rom_i2c_base_device
@@ -81,10 +105,32 @@ protected:
};
+// ======================> ekara_rom_i2c_24lc02_gc0010_device
+
+class ekara_rom_i2c_24lc02_gc0010_device : public ekara_rom_i2c_base_device
+{
+public:
+ // construction/destruction
+ ekara_rom_i2c_24lc02_gc0010_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ bool is_read_access_not_rom(void) override;
+ bool is_write_access_not_rom(void) override;
+ DECLARE_READ8_MEMBER(read_extra) override;
+ DECLARE_WRITE8_MEMBER(write_extra) override;
+ DECLARE_WRITE_LINE_MEMBER(write_sda) override;
+ DECLARE_WRITE_LINE_MEMBER(write_scl) override;
+ DECLARE_READ_LINE_MEMBER(read_sda ) override;
+};
+
// device type definition
DECLARE_DEVICE_TYPE(EKARA_ROM_PLAIN, ekara_rom_plain_device)
DECLARE_DEVICE_TYPE(EKARA_ROM_I2C_BASE, ekara_rom_i2c_base_device)
+DECLARE_DEVICE_TYPE(EKARA_ROM_I2C_24C08_EPITCH, ekara_rom_i2c_24c08_epitch_device)
DECLARE_DEVICE_TYPE(EKARA_ROM_I2C_24LC04, ekara_rom_i2c_24lc04_device)
DECLARE_DEVICE_TYPE(EKARA_ROM_I2C_24LC02, ekara_rom_i2c_24lc02_device)
+DECLARE_DEVICE_TYPE(EKARA_ROM_I2C_24LC02_GC0010, ekara_rom_i2c_24lc02_gc0010_device)
#endif // MAME_BUS_EKARA_ROM_H
diff --git a/src/devices/bus/ekara/slot.cpp b/src/devices/bus/ekara/slot.cpp
index 0569bb49a6c..5140e3f28ab 100644
--- a/src/devices/bus/ekara/slot.cpp
+++ b/src/devices/bus/ekara/slot.cpp
@@ -95,6 +95,7 @@ static const ekara_slot slot_list[] =
{
{ EKARA_PLAIN, "plain" },
{ EKARA_I2C_BASE, "i2c_base" },
+ { EKARA_I2C_24C08, "rom_24c08" },
{ EKARA_I2C_24LC04, "rom_24lc04" },
{ EKARA_I2C_24LC02, "rom_24lc02" },
};
@@ -237,3 +238,40 @@ WRITE8_MEMBER(ekara_cart_slot_device::write_extra)
m_cart->write_extra(space, offset, data);
}
+/*-------------------------------------------------
+ write control
+ -------------------------------------------------*/
+
+WRITE8_MEMBER(ekara_cart_slot_device::write_bus_control)
+{
+ m_cart->write_bus_control(space, offset, data);
+}
+
+bool ekara_cart_slot_device::is_read_access_not_rom(void)
+{
+ return m_cart->is_read_access_not_rom();
+}
+
+bool ekara_cart_slot_device::is_write_access_not_rom(void)
+{
+ return m_cart->is_write_access_not_rom();
+}
+
+/*-------------------------------------------------
+ direct seeprom access (popira2, gc0010)
+ -------------------------------------------------*/
+
+WRITE_LINE_MEMBER(ekara_cart_slot_device::write_sda)
+{
+ m_cart->write_sda(state);
+}
+
+WRITE_LINE_MEMBER(ekara_cart_slot_device::write_scl)
+{
+ m_cart->write_scl(state);
+}
+
+READ_LINE_MEMBER(ekara_cart_slot_device::read_sda )
+{
+ return m_cart->read_sda();
+}
diff --git a/src/devices/bus/ekara/slot.h b/src/devices/bus/ekara/slot.h
index 5f871aa1dfc..945a5175d4b 100644
--- a/src/devices/bus/ekara/slot.h
+++ b/src/devices/bus/ekara/slot.h
@@ -16,6 +16,7 @@ enum
{
EKARA_PLAIN = 0,
EKARA_I2C_BASE,
+ EKARA_I2C_24C08,
EKARA_I2C_24LC04,
EKARA_I2C_24LC02,
};
@@ -35,6 +36,16 @@ public:
virtual DECLARE_READ8_MEMBER(read_extra) { return 0xff; }
virtual DECLARE_WRITE8_MEMBER(write_extra) { }
+ virtual DECLARE_WRITE_LINE_MEMBER(write_sda) { }
+ virtual DECLARE_WRITE_LINE_MEMBER(write_scl) { }
+ //virtual DECLARE_WRITE_LINE_MEMBER( write_wc )
+ virtual DECLARE_READ_LINE_MEMBER( read_sda ) { return 0; }
+
+ virtual DECLARE_WRITE8_MEMBER(write_bus_control) { }
+
+ virtual bool is_read_access_not_rom(void) { return false; }
+ virtual bool is_write_access_not_rom(void) { return false; }
+
void rom_alloc(uint32_t size, const char *tag);
uint8_t* get_rom_base() { return m_rom; }
uint32_t get_rom_size() { return m_rom_size; }
@@ -96,6 +107,16 @@ public:
virtual DECLARE_READ8_MEMBER(read_extra);
virtual DECLARE_WRITE8_MEMBER(write_extra);
+ virtual DECLARE_WRITE_LINE_MEMBER(write_sda);
+ virtual DECLARE_WRITE_LINE_MEMBER(write_scl);
+ //virtual DECLARE_WRITE_LINE_MEMBER( write_wc );
+ virtual DECLARE_READ_LINE_MEMBER( read_sda );
+
+ virtual DECLARE_WRITE8_MEMBER(write_bus_control);
+
+ virtual bool is_read_access_not_rom(void);
+ virtual bool is_write_access_not_rom(void);
+
bool has_cart() { return m_cart ? true : false; }
protected:
diff --git a/src/devices/bus/electron/cart/abr.cpp b/src/devices/bus/electron/cart/abr.cpp
index c894d5e9c71..1d2455e56c1 100644
--- a/src/devices/bus/electron/cart/abr.cpp
+++ b/src/devices/bus/electron/cart/abr.cpp
@@ -46,16 +46,13 @@ void electron_abr_device::device_start()
// read - cartridge data read
//-------------------------------------------------
-uint8_t electron_abr_device::read(address_space &space, offs_t offset, int infc, int infd, int romqa)
+uint8_t electron_abr_device::read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2)
{
uint8_t data = 0xff;
- if (!infc && !infd)
+ if (oe)
{
- if (offset >= 0x0000 && offset < 0x4000)
- {
- data = m_nvram[(offset & 0x3fff) | (romqa << 14)];
- }
+ data = m_nvram[(offset & 0x3fff) | (romqa << 14)];
}
return data;
@@ -65,7 +62,7 @@ uint8_t electron_abr_device::read(address_space &space, offs_t offset, int infc,
// write - cartridge data write
//-------------------------------------------------
-void electron_abr_device::write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa)
+void electron_abr_device::write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2)
{
if (infc)
{
@@ -85,10 +82,9 @@ void electron_abr_device::write(address_space &space, offs_t offset, uint8_t dat
break;
}
}
-
- if (!infc && !infd)
+ else if (oe)
{
- if (offset >= 0x0000 && offset < 0x4000 && !m_bank_locked[romqa])
+ if (!m_bank_locked[romqa])
{
m_nvram[(offset & 0x3fff) | (romqa << 14)] = data;
}
diff --git a/src/devices/bus/electron/cart/abr.h b/src/devices/bus/electron/cart/abr.h
index b985db0a44d..3ef92c95a8d 100644
--- a/src/devices/bus/electron/cart/abr.h
+++ b/src/devices/bus/electron/cart/abr.h
@@ -32,8 +32,8 @@ protected:
virtual void device_start() override;
// electron_cart_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, int infc, int infd, int romqa) override;
- virtual void write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa) override;
+ virtual uint8_t read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2) override;
+ virtual void write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2) override;
private:
bool m_bank_locked[2];
diff --git a/src/devices/bus/electron/cart/ap34.cpp b/src/devices/bus/electron/cart/ap34.cpp
index 30847c55aa4..694df390266 100644
--- a/src/devices/bus/electron/cart/ap34.cpp
+++ b/src/devices/bus/electron/cart/ap34.cpp
@@ -47,7 +47,7 @@ void ap34_floppies(device_slot_interface &device)
void electron_ap34_device::device_add_mconfig(machine_config &config)
{
/* fdc */
- WD1770(config, m_fdc, 16_MHz_XTAL / 2);
+ WD1770(config, m_fdc, DERIVED_CLOCK(1, 2));
FLOPPY_CONNECTOR(config, m_floppy0, ap34_floppies, "525qd", electron_ap34_device::floppy_formats).enable_sound(true);
FLOPPY_CONNECTOR(config, m_floppy1, ap34_floppies, nullptr, electron_ap34_device::floppy_formats).enable_sound(true);
}
@@ -81,9 +81,9 @@ void electron_ap34_device::device_start()
// read - cartridge data read
//-------------------------------------------------
-uint8_t electron_ap34_device::read(address_space &space, offs_t offset, int infc, int infd, int romqa)
+uint8_t electron_ap34_device::read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2)
{
- uint8_t data = 0xfe;
+ uint8_t data = 0xff;
if (infc)
{
@@ -97,18 +97,16 @@ uint8_t electron_ap34_device::read(address_space &space, offs_t offset, int infc
break;
}
}
-
- if (!infc && !infd)
+ else if (oe)
{
- if (offset >= 0x0000 && offset < 0x4000)
- {
- data = m_rom[(offset & 0x3fff) + (romqa * 0x4000)];
- }
-
if (m_ram.size() != 0 && romqa == 0 && offset >= 0x3000)
{
data = m_ram[offset & 0x0fff];
}
+ else
+ {
+ data = m_rom[(offset & 0x3fff) | (romqa << 14)];
+ }
}
return data;
@@ -118,14 +116,14 @@ uint8_t electron_ap34_device::read(address_space &space, offs_t offset, int infc
// write - cartridge data write
//-------------------------------------------------
-void electron_ap34_device::write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa)
+void electron_ap34_device::write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2)
{
if (infc)
{
switch (offset & 0xff)
{
case 0xc0:
- wd1770_control_w(space, 0, data);
+ wd1770_control_w(data);
break;
case 0xc4:
case 0xc5:
@@ -135,8 +133,7 @@ void electron_ap34_device::write(address_space &space, offs_t offset, uint8_t da
break;
}
}
-
- if (!infc && !infd)
+ else if (oe)
{
if (m_ram.size() != 0 && romqa == 0 && offset >= 0x3000)
{
@@ -150,7 +147,7 @@ void electron_ap34_device::write(address_space &space, offs_t offset, uint8_t da
// IMPLEMENTATION
//**************************************************************************
-WRITE8_MEMBER(electron_ap34_device::wd1770_control_w)
+void electron_ap34_device::wd1770_control_w(uint8_t data)
{
floppy_image_device *floppy = nullptr;
@@ -167,6 +164,7 @@ WRITE8_MEMBER(electron_ap34_device::wd1770_control_w)
m_fdc->dden_w(BIT(data, 3));
// bit 4: NMI - not connected
+ //m_slot->nmi_w(!BIT(data, 4));
// bit 5: reset
if (!BIT(data, 5)) m_fdc->soft_reset();
diff --git a/src/devices/bus/electron/cart/ap34.h b/src/devices/bus/electron/cart/ap34.h
index b3fb911b8f6..69b47514487 100644
--- a/src/devices/bus/electron/cart/ap34.h
+++ b/src/devices/bus/electron/cart/ap34.h
@@ -36,11 +36,11 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// electron_cart_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, int infc, int infd, int romqa) override;
- virtual void write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa) override;
+ virtual uint8_t read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2) override;
+ virtual void write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2) override;
private:
- DECLARE_WRITE8_MEMBER(wd1770_control_w);
+ void wd1770_control_w(uint8_t data);
DECLARE_FLOPPY_FORMATS(floppy_formats);
required_device<wd1770_device> m_fdc;
diff --git a/src/devices/bus/electron/cart/ap5.cpp b/src/devices/bus/electron/cart/ap5.cpp
new file mode 100644
index 00000000000..660587c7642
--- /dev/null
+++ b/src/devices/bus/electron/cart/ap5.cpp
@@ -0,0 +1,171 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ ACP Advanced Plus 5
+
+**********************************************************************/
+
+
+#include "emu.h"
+#include "ap5.h"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(ELECTRON_AP5, electron_ap5_device, "electron_ap5", "P.R.E.S. Advanced Plus 5")
+
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void electron_ap5_device::device_add_mconfig(machine_config &config)
+{
+ /* rom sockets */
+ GENERIC_SOCKET(config, m_romslot[0], generic_plain_slot, "electron_rom", "bin,rom"); // ROM SLOT 14
+ m_romslot[0]->set_device_load(device_image_load_delegate(&electron_ap5_device::device_image_load_rom1_load, this));
+ GENERIC_SOCKET(config, m_romslot[1], generic_plain_slot, "electron_rom", "bin,rom"); // ROM SLOT 15
+ m_romslot[1]->set_device_load(device_image_load_delegate(&electron_ap5_device::device_image_load_rom2_load, this));
+
+ /* via */
+ VIA6522(config, m_via, DERIVED_CLOCK(1, 16));
+ m_via->readpb_handler().set(m_userport, FUNC(bbc_userport_slot_device::pb_r));
+ m_via->writepb_handler().set(m_userport, FUNC(bbc_userport_slot_device::pb_w));
+ m_via->irq_handler().set(DEVICE_SELF_OWNER, FUNC(electron_cartslot_device::irq_w));
+
+ /* user port */
+ BBC_USERPORT_SLOT(config, m_userport, bbc_userport_devices, nullptr);
+ m_userport->cb1_handler().set(m_via, FUNC(via6522_device::write_cb1));
+ m_userport->cb2_handler().set(m_via, FUNC(via6522_device::write_cb2));
+
+ /* 1mhz bus port */
+ BBC_1MHZBUS_SLOT(config, m_1mhzbus, DERIVED_CLOCK(1, 16), bbc_1mhzbus_devices, nullptr);
+ m_1mhzbus->irq_handler().set(DEVICE_SELF_OWNER, FUNC(electron_cartslot_device::irq_w));
+ m_1mhzbus->nmi_handler().set(DEVICE_SELF_OWNER, FUNC(electron_cartslot_device::nmi_w));
+
+ /* tube port */
+ BBC_TUBE_SLOT(config, m_tube, electron_tube_devices, nullptr);
+ m_tube->irq_handler().set(DEVICE_SELF_OWNER, FUNC(electron_cartslot_device::irq_w));
+}
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// electron_ap5_device - constructor
+//-------------------------------------------------
+
+electron_ap5_device::electron_ap5_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, ELECTRON_AP5, tag, owner, clock)
+ , device_electron_cart_interface(mconfig, *this)
+ , m_via(*this, "via6522")
+ , m_tube(*this, "tube")
+ , m_1mhzbus(*this, "1mhzbus")
+ , m_userport(*this, "userport")
+ , m_romslot(*this, "rom%u", 1)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void electron_ap5_device::device_start()
+{
+}
+
+//-------------------------------------------------
+// read - cartridge data read
+//-------------------------------------------------
+
+uint8_t electron_ap5_device::read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2)
+{
+ uint8_t data = 0xff;
+
+ if (infc)
+ {
+ data = m_1mhzbus->fred_r(offset);
+
+ switch (offset & 0xf0)
+ {
+ case 0xb0:
+ data &= m_via->read(offset & 0x0f);
+ break;
+
+ case 0xe0:
+ data &= m_tube->host_r(offset & 0x0f);
+ break;
+ }
+ }
+ else if (infd)
+ {
+ data = m_1mhzbus->jim_r(offset);
+ }
+ else if (oe)
+ {
+ data = m_romslot[romqa]->read_rom(offset & 0x3fff);
+ }
+ else if (oe2)
+ {
+ data = m_rom[offset & 0x1fff];
+ }
+
+ return data;
+}
+
+//-------------------------------------------------
+// write - cartridge data write
+//-------------------------------------------------
+
+void electron_ap5_device::write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2)
+{
+ if (infc)
+ {
+ m_1mhzbus->fred_w(offset, data);
+
+ switch (offset & 0xf0)
+ {
+ case 0xb0:
+ m_via->write(offset & 0x0f, data);
+ break;
+
+ case 0xe0:
+ m_tube->host_w(offset & 0x0f, data);
+ break;
+ }
+ }
+ else if (infd)
+ {
+ m_1mhzbus->jim_w(offset, data);
+ }
+}
+
+
+//**************************************************************************
+// IMPLEMENTATION
+//**************************************************************************
+
+image_init_result electron_ap5_device::load_rom(device_image_interface &image, generic_slot_device *slot)
+{
+ uint32_t size = slot->common_get_size("rom");
+
+ // socket accepts 8K and 16K ROM only
+ if (size != 0x2000 && size != 0x4000)
+ {
+ image.seterror(IMAGE_ERROR_UNSPECIFIED, "Invalid size: Only 8K/16K is supported");
+ return image_init_result::FAIL;
+ }
+
+ slot->rom_alloc(0x4000, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
+ slot->common_load_rom(slot->get_rom_base(), size, "rom");
+
+ // mirror 8K ROMs
+ uint8_t *crt = slot->get_rom_base();
+ if (size <= 0x2000) memcpy(crt + 0x2000, crt, 0x2000);
+
+ return image_init_result::PASS;
+}
diff --git a/src/devices/bus/electron/cart/ap5.h b/src/devices/bus/electron/cart/ap5.h
new file mode 100644
index 00000000000..846f3fbc649
--- /dev/null
+++ b/src/devices/bus/electron/cart/ap5.h
@@ -0,0 +1,60 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ ACP Advanced Plus 5
+
+**********************************************************************/
+
+#ifndef MAME_BUS_ELECTRON_CART_AP5_H
+#define MAME_BUS_ELECTRON_CART_AP5_H
+
+#include "slot.h"
+#include "machine/6522via.h"
+#include "bus/bbc/1mhzbus/1mhzbus.h"
+#include "bus/bbc/tube/tube.h"
+#include "bus/bbc/userport/userport.h"
+#include "bus/generic/slot.h"
+#include "bus/generic/carts.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+class electron_ap5_device :
+ public device_t,
+ public device_electron_cart_interface
+{
+public:
+ // construction/destruction
+ electron_ap5_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ // electron_cart_interface overrides
+ virtual uint8_t read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2) override;
+ virtual void write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2) override;
+
+private:
+ image_init_result load_rom(device_image_interface &image, generic_slot_device *slot);
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(rom1_load) { return load_rom(image, m_romslot[0]); }
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(rom2_load) { return load_rom(image, m_romslot[1]); }
+
+ required_device<via6522_device> m_via;
+ required_device<bbc_tube_slot_device> m_tube;
+ required_device<bbc_1mhzbus_slot_device> m_1mhzbus;
+ required_device<bbc_userport_slot_device> m_userport;
+ required_device_array<generic_slot_device, 2> m_romslot;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(ELECTRON_AP5, electron_ap5_device)
+
+
+#endif // MAME_BUS_ELECTRON_CART_AP5_H
diff --git a/src/devices/bus/electron/cart/aqr.cpp b/src/devices/bus/electron/cart/aqr.cpp
index 8a3edebd194..8be0176efc4 100644
--- a/src/devices/bus/electron/cart/aqr.cpp
+++ b/src/devices/bus/electron/cart/aqr.cpp
@@ -48,16 +48,13 @@ void electron_aqr_device::device_start()
// read - cartridge data read
//-------------------------------------------------
-uint8_t electron_aqr_device::read(address_space &space, offs_t offset, int infc, int infd, int romqa)
+uint8_t electron_aqr_device::read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2)
{
uint8_t data = 0xff;
- if (!infc && !infd)
+ if (oe)
{
- if (offset >= 0x0000 && offset < 0x4000)
- {
- data = m_ram[(offset & 0x3fff) | (m_page_register << 14)];
- }
+ data = m_ram[(offset & 0x3fff) | (m_page_register << 14)];
}
return data;
@@ -67,7 +64,7 @@ uint8_t electron_aqr_device::read(address_space &space, offs_t offset, int infc,
// write - cartridge data write
//-------------------------------------------------
-void electron_aqr_device::write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa)
+void electron_aqr_device::write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2)
{
if (infc)
{
@@ -84,12 +81,8 @@ void electron_aqr_device::write(address_space &space, offs_t offset, uint8_t dat
break;
}
}
-
- if (!infc && !infd)
+ else if (oe)
{
- if (offset >= 0x0000 && offset < 0x4000 && !m_lock_register)
- {
- m_ram[(offset & 0x3fff) | (m_page_register << 14)] = data;
- }
+ m_ram[(offset & 0x3fff) | (m_page_register << 14)] = data;
}
}
diff --git a/src/devices/bus/electron/cart/aqr.h b/src/devices/bus/electron/cart/aqr.h
index 6ede0b8144d..820f967b5cf 100644
--- a/src/devices/bus/electron/cart/aqr.h
+++ b/src/devices/bus/electron/cart/aqr.h
@@ -32,8 +32,8 @@ protected:
virtual void device_start() override;
// electron_cart_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, int infc, int infd, int romqa) override;
- virtual void write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa) override;
+ virtual uint8_t read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2) override;
+ virtual void write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2) override;
private:
uint8_t m_page_register;
diff --git a/src/devices/bus/electron/cart/click.cpp b/src/devices/bus/electron/cart/click.cpp
index a4a0bfd5af2..bdeebeba79b 100644
--- a/src/devices/bus/electron/cart/click.cpp
+++ b/src/devices/bus/electron/cart/click.cpp
@@ -27,7 +27,7 @@ void electron_click_device::device_add_mconfig(machine_config &config)
{
/* rtc */
MC146818(config, m_rtc, 32.768_kHz_XTAL);
- m_rtc->irq().set(FUNC(electron_click_device::irq_w));
+ m_rtc->irq().set(DEVICE_SELF_OWNER, FUNC(electron_cartslot_device::irq_w));
}
//-------------------------------------------------
@@ -88,7 +88,7 @@ void electron_click_device::device_reset()
// read - cartridge data read
//-------------------------------------------------
-uint8_t electron_click_device::read(address_space &space, offs_t offset, int infc, int infd, int romqa)
+uint8_t electron_click_device::read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2)
{
uint8_t data = 0xff;
@@ -98,15 +98,14 @@ uint8_t electron_click_device::read(address_space &space, offs_t offset, int inf
{
case 0xf8:
case 0xf9:
- data = m_rtc->read(space, offset & 0x01);
+ data = m_rtc->read(offset & 0x01);
break;
case 0xfc:
data = m_page_register;
break;
}
}
-
- if (!infc && !infd)
+ else if (oe)
{
offs_t rom_page_offset = (m_page_register & 0x03) * 0x2000;
offs_t ram_page_offset = ((m_page_register & 0x0c) >> 2) * 0x2000;
@@ -128,7 +127,7 @@ uint8_t electron_click_device::read(address_space &space, offs_t offset, int inf
// write - cartridge data write
//-------------------------------------------------
-void electron_click_device::write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa)
+void electron_click_device::write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2)
{
if (infc)
{
@@ -136,15 +135,14 @@ void electron_click_device::write(address_space &space, offs_t offset, uint8_t d
{
case 0xf8:
case 0xf9:
- m_rtc->write(space, offset & 0x01, data);
+ m_rtc->write(offset & 0x01, data);
break;
case 0xfc:
m_page_register = data;
break;
}
}
-
- if (!infc && !infd)
+ else if (oe)
{
offs_t ram_page_offset = ((m_page_register & 0x0c) >> 2) * 0x2000;
@@ -166,8 +164,3 @@ INPUT_CHANGED_MEMBER(electron_click_device::click_button)
m_slot->irq_w(CLEAR_LINE);
}
}
-
-WRITE_LINE_MEMBER(electron_click_device::irq_w)
-{
- m_slot->irq_w(state);
-}
diff --git a/src/devices/bus/electron/cart/click.h b/src/devices/bus/electron/cart/click.h
index 5fbc18d4759..cb7dd114687 100644
--- a/src/devices/bus/electron/cart/click.h
+++ b/src/devices/bus/electron/cart/click.h
@@ -41,12 +41,10 @@ protected:
virtual void device_reset() override;
// electron_cart_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, int infc, int infd, int romqa) override;
- virtual void write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa) override;
+ virtual uint8_t read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2) override;
+ virtual void write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2) override;
private:
- DECLARE_WRITE_LINE_MEMBER(irq_w);
-
required_device<mc146818_device> m_rtc;
uint8_t m_page_register;
diff --git a/src/devices/bus/electron/cart/cumana.cpp b/src/devices/bus/electron/cart/cumana.cpp
index 80ebeab394b..8792395b503 100644
--- a/src/devices/bus/electron/cart/cumana.cpp
+++ b/src/devices/bus/electron/cart/cumana.cpp
@@ -48,12 +48,13 @@ void cumana_floppies(device_slot_interface &device)
void electron_cumana_device::device_add_mconfig(machine_config &config)
{
/* fdc */
- FD1793(config, m_fdc, 16_MHz_XTAL / 16); // TODO: Not known whether DRQ and INTRQ are connected
+ FD1793(config, m_fdc, DERIVED_CLOCK(1, 16)); // TODO: Not known whether DRQ and INTRQ are connected
FLOPPY_CONNECTOR(config, m_floppy0, cumana_floppies, "525qd", electron_cumana_device::floppy_formats).enable_sound(true);
FLOPPY_CONNECTOR(config, m_floppy1, cumana_floppies, nullptr, electron_cumana_device::floppy_formats).enable_sound(true);
/* rtc */
MC146818(config, m_rtc, 32.768_kHz_XTAL);
+ m_rtc->irq().set(DEVICE_SELF_OWNER, FUNC(electron_cartslot_device::irq_w));
}
//**************************************************************************
@@ -86,7 +87,7 @@ void electron_cumana_device::device_start()
// read - cartridge data read
//-------------------------------------------------
-uint8_t electron_cumana_device::read(address_space &space, offs_t offset, int infc, int infd, int romqa)
+uint8_t electron_cumana_device::read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2)
{
uint8_t data = 0xff;
@@ -102,12 +103,11 @@ uint8_t electron_cumana_device::read(address_space &space, offs_t offset, int in
break;
case 0x98:
case 0x9c:
- data = m_rtc->read(space, BIT(offset, 2));
+ data = m_rtc->read(BIT(offset, 2));
break;
}
}
-
- if (!infc && !infd)
+ else if (oe)
{
switch (romqa)
{
@@ -134,7 +134,7 @@ uint8_t electron_cumana_device::read(address_space &space, offs_t offset, int in
// write - cartridge data write
//-------------------------------------------------
-void electron_cumana_device::write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa)
+void electron_cumana_device::write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2)
{
if (infc)
{
@@ -147,17 +147,15 @@ void electron_cumana_device::write(address_space &space, offs_t offset, uint8_t
m_fdc->write(offset & 0x03, data);
break;
case 0x94:
- wd1793_control_w(space, 0, data);
+ wd1793_control_w(data);
break;
case 0x98:
case 0x9c:
- m_rtc->write(space, BIT(offset, 2), data);
- break;
+ m_rtc->write(BIT(offset, 2), data);
break;
}
}
-
- if (!infc && !infd)
+ else if (oe)
{
if (romqa == 0 && offset >= 0x3800)
{
@@ -171,7 +169,7 @@ void electron_cumana_device::write(address_space &space, offs_t offset, uint8_t
// IMPLEMENTATION
//**************************************************************************
-WRITE8_MEMBER(electron_cumana_device::wd1793_control_w)
+void electron_cumana_device::wd1793_control_w(uint8_t data)
{
floppy_image_device *floppy = nullptr;
diff --git a/src/devices/bus/electron/cart/cumana.h b/src/devices/bus/electron/cart/cumana.h
index 9092f82bd65..9a3bc2ab834 100644
--- a/src/devices/bus/electron/cart/cumana.h
+++ b/src/devices/bus/electron/cart/cumana.h
@@ -37,11 +37,11 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// electron_cart_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, int infc, int infd, int romqa) override;
- virtual void write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa) override;
+ virtual uint8_t read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2) override;
+ virtual void write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2) override;
private:
- DECLARE_WRITE8_MEMBER(wd1793_control_w);
+ void wd1793_control_w(uint8_t data);
DECLARE_FLOPPY_FORMATS(floppy_formats);
required_device<fd1793_device> m_fdc;
diff --git a/src/devices/bus/electron/cart/mgc.cpp b/src/devices/bus/electron/cart/mgc.cpp
index 41cc29dfbfb..5f80559c47a 100644
--- a/src/devices/bus/electron/cart/mgc.cpp
+++ b/src/devices/bus/electron/cart/mgc.cpp
@@ -65,17 +65,14 @@ void electron_mgc_device::device_reset()
// read - cartridge data read
//-------------------------------------------------
-uint8_t electron_mgc_device::read(address_space &space, offs_t offset, int infc, int infd, int romqa)
+uint8_t electron_mgc_device::read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2)
{
uint8_t data = 0xff;
- if (!infc && !infd)
+ if (oe)
{
- if (offset >= 0x0000 && offset < 0x4000)
- {
- int m_page_mode = BIT(m_control_latch, 2) ? BIT(m_control_latch, 1) : !romqa;
- data = m_nvram[(offset & 0x3fff) | (m_page_latch << 14) | (m_page_mode << 21)];
- }
+ int m_page_mode = BIT(m_control_latch, 2) ? BIT(m_control_latch, 1) : !romqa;
+ data = m_nvram[(offset & 0x3fff) | (m_page_latch << 14) | (m_page_mode << 21)];
}
return data;
@@ -85,7 +82,7 @@ uint8_t electron_mgc_device::read(address_space &space, offs_t offset, int infc,
// write - cartridge data write
//-------------------------------------------------
-void electron_mgc_device::write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa)
+void electron_mgc_device::write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2)
{
if (infc)
{
@@ -100,13 +97,9 @@ void electron_mgc_device::write(address_space &space, offs_t offset, uint8_t dat
break;
}
}
-
- if (!infc && !infd)
+ else if (oe)
{
- if (offset >= 0x0000 && offset < 0x4000 && BIT(m_control_latch, 0))
- {
- int m_page_mode = BIT(m_control_latch, 2) ? BIT(m_control_latch, 1) : !romqa;
- m_nvram[(offset & 0x3fff) | (m_page_latch << 14) | (m_page_mode << 21)] = data;
- }
+ int m_page_mode = BIT(m_control_latch, 2) ? BIT(m_control_latch, 1) : !romqa;
+ m_nvram[(offset & 0x3fff) | (m_page_latch << 14) | (m_page_mode << 21)] = data;
}
}
diff --git a/src/devices/bus/electron/cart/mgc.h b/src/devices/bus/electron/cart/mgc.h
index 8835a703107..bf23aa34391 100644
--- a/src/devices/bus/electron/cart/mgc.h
+++ b/src/devices/bus/electron/cart/mgc.h
@@ -33,8 +33,8 @@ protected:
virtual void device_reset() override;
// electron_cart_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, int infc, int infd, int romqa) override;
- virtual void write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa) override;
+ virtual uint8_t read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2) override;
+ virtual void write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2) override;
private:
uint8_t m_page_latch;
diff --git a/src/devices/bus/electron/cart/peg400.cpp b/src/devices/bus/electron/cart/peg400.cpp
index 8d92131aa04..abca703474a 100644
--- a/src/devices/bus/electron/cart/peg400.cpp
+++ b/src/devices/bus/electron/cart/peg400.cpp
@@ -44,7 +44,7 @@ void peg400_floppies(device_slot_interface &device)
void electron_peg400_device::device_add_mconfig(machine_config &config)
{
/* fdc */
- WD1770(config, m_fdc, 16_MHz_XTAL / 2);
+ WD1770(config, m_fdc, DERIVED_CLOCK(1, 2));
m_fdc->drq_wr_callback().set(FUNC(electron_peg400_device::fdc_drq_w));
FLOPPY_CONNECTOR(config, m_floppy0, peg400_floppies, "525qd", electron_peg400_device::floppy_formats).enable_sound(true);
FLOPPY_CONNECTOR(config, m_floppy1, peg400_floppies, nullptr, electron_peg400_device::floppy_formats).enable_sound(true);
@@ -79,7 +79,7 @@ void electron_peg400_device::device_start()
// read - cartridge data read
//-------------------------------------------------
-uint8_t electron_peg400_device::read(address_space &space, offs_t offset, int infc, int infd, int romqa)
+uint8_t electron_peg400_device::read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2)
{
uint8_t data = 0xff;
@@ -95,15 +95,14 @@ uint8_t electron_peg400_device::read(address_space &space, offs_t offset, int in
break;
}
}
-
- if (!infc && !infd)
+ else if (oe)
{
switch (romqa)
{
case 0:
if (offset < 0x3800)
{
- data = m_rom[(offset & 0x3fff) + (romqa * 0x4000)];
+ data = m_rom[(offset & 0x3fff) | (romqa << 14)];
}
else
{
@@ -111,7 +110,7 @@ uint8_t electron_peg400_device::read(address_space &space, offs_t offset, int in
}
break;
case 1:
- data = m_rom[(offset & 0x3fff) + (romqa * 0x4000)];
+ data = m_rom[(offset & 0x3fff) | (romqa << 14)];
break;
}
}
@@ -123,14 +122,14 @@ uint8_t electron_peg400_device::read(address_space &space, offs_t offset, int in
// write - cartridge data write
//-------------------------------------------------
-void electron_peg400_device::write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa)
+void electron_peg400_device::write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2)
{
if (infc)
{
switch (offset & 0xff)
{
case 0xc0:
- wd1770_control_w(space, 0, data);
+ wd1770_control_w(data);
break;
case 0xc4:
case 0xc5:
@@ -140,8 +139,7 @@ void electron_peg400_device::write(address_space &space, offs_t offset, uint8_t
break;
}
}
-
- if (!infc && !infd)
+ else if (oe)
{
if (romqa == 0 && offset >= 0x3800)
{
@@ -155,7 +153,7 @@ void electron_peg400_device::write(address_space &space, offs_t offset, uint8_t
// IMPLEMENTATION
//**************************************************************************
-WRITE8_MEMBER(electron_peg400_device::wd1770_control_w)
+void electron_peg400_device::wd1770_control_w(uint8_t data)
{
floppy_image_device *floppy = nullptr;
diff --git a/src/devices/bus/electron/cart/peg400.h b/src/devices/bus/electron/cart/peg400.h
index 8b7a7af9b44..035947a1e59 100644
--- a/src/devices/bus/electron/cart/peg400.h
+++ b/src/devices/bus/electron/cart/peg400.h
@@ -34,11 +34,11 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// electron_cart_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, int infc, int infd, int romqa) override;
- virtual void write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa) override;
+ virtual uint8_t read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2) override;
+ virtual void write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2) override;
private:
- DECLARE_WRITE8_MEMBER(wd1770_control_w);
+ void wd1770_control_w(uint8_t data);
DECLARE_FLOPPY_FORMATS(floppy_formats);
DECLARE_WRITE_LINE_MEMBER(fdc_drq_w);
diff --git a/src/devices/bus/electron/cart/romp144.cpp b/src/devices/bus/electron/cart/romp144.cpp
new file mode 100644
index 00000000000..6e4eb96bd84
--- /dev/null
+++ b/src/devices/bus/electron/cart/romp144.cpp
@@ -0,0 +1,162 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ JAFA Systems ROMPlus-144
+
+**********************************************************************/
+
+
+#include "emu.h"
+#include "romp144.h"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(ELECTRON_ROMP144, electron_romp144_device, "electron_romp144", "JAFA Systems ROMPlus-144")
+
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void electron_romp144_device::device_add_mconfig(machine_config &config)
+{
+ /* rom sockets */
+ GENERIC_SOCKET(config, m_romslot[0], generic_plain_slot, "electron_rom", "bin,rom");
+ m_romslot[0]->set_device_load(device_image_load_delegate(&electron_romp144_device::device_image_load_rom0, this));
+ GENERIC_SOCKET(config, m_romslot[1], generic_plain_slot, "electron_rom", "bin,rom");
+ m_romslot[1]->set_device_load(device_image_load_delegate(&electron_romp144_device::device_image_load_rom1, this));
+ GENERIC_SOCKET(config, m_romslot[2], generic_plain_slot, "electron_rom", "bin,rom");
+ m_romslot[2]->set_device_load(device_image_load_delegate(&electron_romp144_device::device_image_load_rom2, this));
+ GENERIC_SOCKET(config, m_romslot[3], generic_plain_slot, "electron_rom", "bin,rom");
+ m_romslot[3]->set_device_load(device_image_load_delegate(&electron_romp144_device::device_image_load_rom3, this));
+ GENERIC_SOCKET(config, m_romslot[4], generic_plain_slot, "electron_rom", "bin,rom");
+ m_romslot[4]->set_device_load(device_image_load_delegate(&electron_romp144_device::device_image_load_rom4, this));
+ GENERIC_SOCKET(config, m_romslot[5], generic_plain_slot, "electron_rom", "bin,rom");
+ m_romslot[5]->set_device_load(device_image_load_delegate(&electron_romp144_device::device_image_load_rom5, this));
+ GENERIC_SOCKET(config, m_romslot[6], generic_plain_slot, "electron_rom", "bin,rom");
+ m_romslot[6]->set_device_load(device_image_load_delegate(&electron_romp144_device::device_image_load_rom6, this));
+}
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// electron_romp144_device - constructor
+//-------------------------------------------------
+
+electron_romp144_device::electron_romp144_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, ELECTRON_ROMP144, tag, owner, clock)
+ , device_electron_cart_interface(mconfig, *this)
+ , m_romslot(*this, "rom%u", 7)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void electron_romp144_device::device_start()
+{
+ m_rom_select = 0xff;
+ m_rom_latch = 0xff;
+
+ save_item(NAME(m_rom_select));
+ save_item(NAME(m_rom_latch));
+}
+
+//-------------------------------------------------
+// read - cartridge data read
+//-------------------------------------------------
+
+uint8_t electron_romp144_device::read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2)
+{
+ uint8_t data = 0xff;
+
+ if (oe)
+ {
+ if (romqa)
+ {
+ if ((m_rom_select & 0x07) == 0x00)
+ data = m_ram[offset & 0x3fff];
+ else
+ data = m_romslot[(m_rom_select & 0x07) - 1]->read_rom(offset & 0x3fff);
+ }
+ else
+ {
+ if ((m_rom_select & 0x0f) == 0x08)
+ data = m_ram[(offset & 0x3fff) | 0x4000];
+ else
+ data = m_rom[offset & 0x1fff];
+
+ /* roms selected with a read to latch */
+ if ((offset & 0x3f00) == 0x3f00)
+ {
+ m_rom_latch = offset & 0x0f;
+ }
+ }
+ }
+
+ return data;
+}
+
+//-------------------------------------------------
+// write - cartridge data write
+//-------------------------------------------------
+
+void electron_romp144_device::write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2)
+{
+ if (oe)
+ {
+ if (romqa)
+ {
+ if ((m_rom_select & 0x07) == 0x00)
+ m_ram[offset & 0x3fff] = data;
+ }
+ else
+ {
+ if ((m_rom_select & 0x0f) == 0x08)
+ m_ram[(offset & 0x3fff) | 0x4000] = data;
+
+ /* roms selected with a write to select */
+ if ((offset & 0x3f00) == 0x3f00)
+ {
+ /* does the write match the read (upper RAM cannot be de-selected to protect *RSUBSTITUTE) */
+ if (m_rom_latch == (offset & 0x0f) && m_rom_select != 0x08)
+ {
+ m_rom_select = m_rom_latch;
+ }
+ }
+ }
+ }
+}
+
+
+//**************************************************************************
+// IMPLEMENTATION
+//**************************************************************************
+
+image_init_result electron_romp144_device::load_rom(device_image_interface &image, generic_slot_device *slot)
+{
+ uint32_t size = slot->common_get_size("rom");
+
+ // socket accepts 8K and 16K ROM only
+ if (size != 0x2000 && size != 0x4000)
+ {
+ image.seterror(IMAGE_ERROR_UNSPECIFIED, "Invalid size: Only 8K/16K is supported");
+ return image_init_result::FAIL;
+ }
+
+ slot->rom_alloc(0x4000, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
+ slot->common_load_rom(slot->get_rom_base(), size, "rom");
+
+ // mirror 8K ROMs
+ uint8_t *crt = slot->get_rom_base();
+ if (size <= 0x2000) memcpy(crt + 0x2000, crt, 0x2000);
+
+ return image_init_result::PASS;
+}
diff --git a/src/devices/bus/electron/cart/romp144.h b/src/devices/bus/electron/cart/romp144.h
new file mode 100644
index 00000000000..45916a3ab38
--- /dev/null
+++ b/src/devices/bus/electron/cart/romp144.h
@@ -0,0 +1,60 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ JAFA Systems ROMPlus-144
+
+**********************************************************************/
+
+#ifndef MAME_BUS_ELECTRON_CART_ROMP144_H
+#define MAME_BUS_ELECTRON_CART_ROMP144_H
+
+#include "slot.h"
+#include "bus/generic/slot.h"
+#include "bus/generic/carts.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+class electron_romp144_device :
+ public device_t,
+ public device_electron_cart_interface
+{
+public:
+ // construction/destruction
+ electron_romp144_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ // electron_cart_interface overrides
+ virtual uint8_t read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2) override;
+ virtual void write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2) override;
+
+private:
+ image_init_result load_rom(device_image_interface &image, generic_slot_device *slot);
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(rom0) { return load_rom(image, m_romslot[0]); }
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(rom1) { return load_rom(image, m_romslot[1]); }
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(rom2) { return load_rom(image, m_romslot[2]); }
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(rom3) { return load_rom(image, m_romslot[3]); }
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(rom4) { return load_rom(image, m_romslot[4]); }
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(rom5) { return load_rom(image, m_romslot[5]); }
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(rom6) { return load_rom(image, m_romslot[6]); }
+
+ required_device_array<generic_slot_device, 7> m_romslot;
+
+ uint8_t m_rom_select;
+ uint8_t m_rom_latch;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(ELECTRON_ROMP144, electron_romp144_device)
+
+
+#endif // MAME_BUS_ELECTRON_CART_ROMP144_H
diff --git a/src/devices/bus/electron/cart/slot.cpp b/src/devices/bus/electron/cart/slot.cpp
index aae2f65594d..f8682b9c654 100644
--- a/src/devices/bus/electron/cart/slot.cpp
+++ b/src/devices/bus/electron/cart/slot.cpp
@@ -100,14 +100,6 @@ electron_cartslot_device::electron_cartslot_device(const machine_config &mconfig
}
//-------------------------------------------------
-// electron_cartslot_device - destructor
-//-------------------------------------------------
-
-electron_cartslot_device::~electron_cartslot_device()
-{
-}
-
-//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -237,13 +229,13 @@ std::string electron_cartslot_device::get_default_card_software(get_default_card
// read - cartridge read
//-------------------------------------------------
-uint8_t electron_cartslot_device::read(address_space &space, offs_t offset, int infc, int infd, int romqa)
+uint8_t electron_cartslot_device::read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2)
{
uint8_t data = 0xff;
if (m_cart != nullptr)
{
- data = m_cart->read(space, offset, infc, infd, romqa);
+ data = m_cart->read(offset, infc, infd, romqa, oe, oe2);
}
return data;
@@ -253,11 +245,11 @@ uint8_t electron_cartslot_device::read(address_space &space, offs_t offset, int
// write - cartridge write
//-------------------------------------------------
-void electron_cartslot_device::write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa)
+void electron_cartslot_device::write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2)
{
if (m_cart != nullptr)
{
- m_cart->write(space, offset, data, infc, infd, romqa);
+ m_cart->write(offset, data, infc, infd, romqa, oe, oe2);
}
}
@@ -268,15 +260,20 @@ void electron_cartslot_device::write(address_space &space, offs_t offset, uint8_
#include "abr.h"
#include "ap34.h"
+#include "ap5.h"
#include "aqr.h"
#include "click.h"
#include "cumana.h"
#include "mgc.h"
#include "peg400.h"
+//#include "pmse2p.h"
+#include "romp144.h"
+//#include "rs423.h"
#include "sndexp.h"
#include "sndexp3.h"
#include "sp64.h"
#include "stlefs.h"
+#include "tube.h"
#include "std.h"
@@ -285,13 +282,18 @@ void electron_cart(device_slot_interface &device)
device.option_add_internal("std", ELECTRON_STDCART);
device.option_add_internal("abr", ELECTRON_ABR);
device.option_add_internal("ap34", ELECTRON_AP34);
+ device.option_add_internal("ap5", ELECTRON_AP5);
device.option_add_internal("aqr", ELECTRON_AQR);
device.option_add_internal("click", ELECTRON_CLICK);
device.option_add_internal("cumana", ELECTRON_CUMANA);
device.option_add_internal("mgc", ELECTRON_MGC);
device.option_add_internal("peg400", ELECTRON_PEG400);
+ //device.option_add_internal("pmse2p", ELECTRON_PMSE2P);
+ device.option_add_internal("romp144", ELECTRON_ROMP144);
+ //device.option_add_internal("rs423", ELECTRON_RS423);
device.option_add_internal("sndexp", ELECTRON_SNDEXP);
device.option_add_internal("sndexp3", ELECTRON_SNDEXP3);
device.option_add_internal("sp64", ELECTRON_SP64);
device.option_add_internal("stlefs", ELECTRON_STLEFS);
+ device.option_add_internal("tube", ELECTRON_TUBE);
}
diff --git a/src/devices/bus/electron/cart/slot.h b/src/devices/bus/electron/cart/slot.h
index 9e4b66182f1..d31bc16258c 100644
--- a/src/devices/bus/electron/cart/slot.h
+++ b/src/devices/bus/electron/cart/slot.h
@@ -105,16 +105,6 @@
#define ELECTRON_CART_ROM_REGION_TAG ":cart:rom"
-#define MCFG_ELECTRON_CARTSLOT_ADD(_tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, ELECTRON_CARTSLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-#define MCFG_ELECTRON_CARTSLOT_IRQ_HANDLER(_devcb) \
- downcast<electron_cartslot_device &>(*device).set_irq_handler(DEVCB_##_devcb);
-
-#define MCFG_ELECTRON_CARTSLOT_NMI_HANDLER(_devcb) \
- downcast<electron_cartslot_device &>(*device).set_nmi_handler(DEVCB_##_devcb);
-
//**************************************************************************
// TYPE DEFINITIONS
@@ -130,12 +120,21 @@ class electron_cartslot_device : public device_t,
{
public:
// construction/destruction
+ template <typename T>
+ electron_cartslot_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock, T &&slot_options, const char *default_option)
+ : electron_cartslot_device(mconfig, tag, owner, clock)
+ {
+ option_reset();
+ slot_options(*this);
+ set_default_option(default_option);
+ set_fixed(false);
+ }
+
electron_cartslot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual ~electron_cartslot_device();
// callbacks
- template <class Object> devcb_base &set_irq_handler(Object &&cb) { return m_irq_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_nmi_handler(Object &&cb) { return m_nmi_handler.set_callback(std::forward<Object>(cb)); }
+ auto irq_handler() { return m_irq_handler.bind(); }
+ auto nmi_handler() { return m_nmi_handler.bind(); }
// device-level overrides
virtual void device_start() override;
@@ -159,8 +158,8 @@ public:
virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
// reading and writing
- virtual uint8_t read(address_space &space, offs_t offset, int infc, int infd, int romqa);
- virtual void write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa);
+ virtual uint8_t read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2);
+ virtual void write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2);
DECLARE_WRITE_LINE_MEMBER(irq_w) { m_irq_handler(state); }
DECLARE_WRITE_LINE_MEMBER(nmi_w) { m_nmi_handler(state); }
@@ -183,8 +182,8 @@ public:
virtual ~device_electron_cart_interface();
// reading and writing
- virtual uint8_t read(address_space &space, offs_t offset, int infc, int infd, int romqa) { return 0xff; }
- virtual void write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa) { }
+ virtual uint8_t read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2) { return 0xff; }
+ virtual void write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2) { }
void rom_alloc(uint32_t size, const char *tag);
void ram_alloc(uint32_t size);
diff --git a/src/devices/bus/electron/cart/sndexp.cpp b/src/devices/bus/electron/cart/sndexp.cpp
index de0c7704020..4ba27cb4825 100644
--- a/src/devices/bus/electron/cart/sndexp.cpp
+++ b/src/devices/bus/electron/cart/sndexp.cpp
@@ -27,11 +27,13 @@ DEFINE_DEVICE_TYPE(ELECTRON_SNDEXP, electron_sndexp_device, "electron_sndexp", "
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(electron_sndexp_device::device_add_mconfig)
+void electron_sndexp_device::device_add_mconfig(machine_config &config)
+{
+ /* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("sn76489", SN76489, 16_MHz_XTAL / 4)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
-MACHINE_CONFIG_END
+ SN76489(config, m_sn, DERIVED_CLOCK(1, 4));
+ m_sn->add_route(ALL_OUTPUTS, "mono", 1.0);
+}
//-------------------------------------------------
// INPUT_PORTS( sndexp )
@@ -87,11 +89,11 @@ void electron_sndexp_device::device_start()
// read - cartridge data read
//-------------------------------------------------
-uint8_t electron_sndexp_device::read(address_space &space, offs_t offset, int infc, int infd, int romqa)
+uint8_t electron_sndexp_device::read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2)
{
uint8_t data = 0xff;
- if (!infc && !infd)
+ if (oe)
{
if (m_jumper->read())
{
@@ -124,7 +126,7 @@ uint8_t electron_sndexp_device::read(address_space &space, offs_t offset, int in
// write - cartridge data write
//-------------------------------------------------
-void electron_sndexp_device::write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa)
+void electron_sndexp_device::write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2)
{
if (infc)
{
@@ -142,8 +144,7 @@ void electron_sndexp_device::write(address_space &space, offs_t offset, uint8_t
break;
}
}
-
- if (!infc && !infd)
+ else if (oe)
{
if (m_jumper->read())
{
diff --git a/src/devices/bus/electron/cart/sndexp.h b/src/devices/bus/electron/cart/sndexp.h
index 87d94ba84a2..5627c2ff734 100644
--- a/src/devices/bus/electron/cart/sndexp.h
+++ b/src/devices/bus/electron/cart/sndexp.h
@@ -33,8 +33,8 @@ protected:
virtual ioport_constructor device_input_ports() const override;
// electron_cart_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, int infc, int infd, int romqa) override;
- virtual void write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa) override;
+ virtual uint8_t read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2) override;
+ virtual void write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2) override;
private:
required_device<sn76489_device> m_sn;
diff --git a/src/devices/bus/electron/cart/sndexp3.cpp b/src/devices/bus/electron/cart/sndexp3.cpp
index 1bf32aa2fb4..afaf927e443 100644
--- a/src/devices/bus/electron/cart/sndexp3.cpp
+++ b/src/devices/bus/electron/cart/sndexp3.cpp
@@ -23,12 +23,13 @@ DEFINE_DEVICE_TYPE(ELECTRON_SNDEXP3, electron_sndexp3_device, "electron_sndexp3"
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(electron_sndexp3_device::device_add_mconfig)
+void electron_sndexp3_device::device_add_mconfig(machine_config &config)
+{
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("sn76489", SN76489, 16_MHz_XTAL / 4)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
-MACHINE_CONFIG_END
+ SN76489(config, m_sn, DERIVED_CLOCK(1, 4));
+ m_sn->add_route(ALL_OUTPUTS, "mono", 1.0);
+}
//**************************************************************************
// LIVE DEVICE
@@ -61,11 +62,11 @@ void electron_sndexp3_device::device_start()
// read - cartridge data read
//-------------------------------------------------
-uint8_t electron_sndexp3_device::read(address_space &space, offs_t offset, int infc, int infd, int romqa)
+uint8_t electron_sndexp3_device::read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2)
{
uint8_t data = 0xff;
- if (!infc && !infd && romqa)
+ if (oe && romqa)
{
if (offset < 0x2000)
{
@@ -84,7 +85,7 @@ uint8_t electron_sndexp3_device::read(address_space &space, offs_t offset, int i
// write - cartridge data write
//-------------------------------------------------
-void electron_sndexp3_device::write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa)
+void electron_sndexp3_device::write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2)
{
if (infc)
{
@@ -102,8 +103,7 @@ void electron_sndexp3_device::write(address_space &space, offs_t offset, uint8_t
break;
}
}
-
- if (!infc && !infd && romqa)
+ else if (oe && romqa)
{
if (offset >= 0x2000)
{
diff --git a/src/devices/bus/electron/cart/sndexp3.h b/src/devices/bus/electron/cart/sndexp3.h
index 2ad0869ca65..95d437b63e2 100644
--- a/src/devices/bus/electron/cart/sndexp3.h
+++ b/src/devices/bus/electron/cart/sndexp3.h
@@ -32,8 +32,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// electron_cart_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, int infc, int infd, int romqa) override;
- virtual void write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa) override;
+ virtual uint8_t read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2) override;
+ virtual void write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2) override;
private:
required_device<sn76489_device> m_sn;
diff --git a/src/devices/bus/electron/cart/sp64.cpp b/src/devices/bus/electron/cart/sp64.cpp
index 11db24fbba6..9b5d497999e 100644
--- a/src/devices/bus/electron/cart/sp64.cpp
+++ b/src/devices/bus/electron/cart/sp64.cpp
@@ -55,7 +55,7 @@ void electron_sp64_device::device_reset()
// read - cartridge data read
//-------------------------------------------------
-uint8_t electron_sp64_device::read(address_space &space, offs_t offset, int infc, int infd, int romqa)
+uint8_t electron_sp64_device::read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2)
{
uint8_t data = 0xff;
@@ -68,15 +68,14 @@ uint8_t electron_sp64_device::read(address_space &space, offs_t offset, int infc
break;
}
}
-
- if (!infc && !infd)
+ else if (oe)
{
- offs_t rom_page_offset = m_page_register * 0x4000;
+ offs_t rom_page_offset = m_page_register << 14;
switch (romqa)
{
case 0:
- data = m_rom[rom_page_offset + (offset & 0x3fff)];
+ data = m_rom[rom_page_offset | (offset & 0x3fff)];
break;
case 1:
data = m_ram[offset & 0x1fff];
@@ -91,7 +90,7 @@ uint8_t electron_sp64_device::read(address_space &space, offs_t offset, int infc
// write - cartridge data write
//-------------------------------------------------
-void electron_sp64_device::write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa)
+void electron_sp64_device::write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2)
{
if (infc)
{
@@ -102,8 +101,7 @@ void electron_sp64_device::write(address_space &space, offs_t offset, uint8_t da
break;
}
}
-
- if (!infc && !infd)
+ else if (oe)
{
if (romqa == 1)
{
diff --git a/src/devices/bus/electron/cart/sp64.h b/src/devices/bus/electron/cart/sp64.h
index 7e5de9f18f6..68954fc9d30 100644
--- a/src/devices/bus/electron/cart/sp64.h
+++ b/src/devices/bus/electron/cart/sp64.h
@@ -33,8 +33,8 @@ protected:
virtual void device_reset() override;
// electron_cart_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, int infc, int infd, int romqa) override;
- virtual void write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa) override;
+ virtual uint8_t read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2) override;
+ virtual void write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2) override;
private:
uint8_t m_page_register;
diff --git a/src/devices/bus/electron/cart/std.cpp b/src/devices/bus/electron/cart/std.cpp
index b66e3b2ce0d..f2b7333f347 100644
--- a/src/devices/bus/electron/cart/std.cpp
+++ b/src/devices/bus/electron/cart/std.cpp
@@ -43,13 +43,13 @@ void electron_stdcart_device::device_start()
// read - cartridge data read
//-------------------------------------------------
-uint8_t electron_stdcart_device::read(address_space &space, offs_t offset, int infc, int infd, int romqa)
+uint8_t electron_stdcart_device::read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2)
{
uint8_t data = 0xff;
- if (!infc && !infd)
+ if (oe)
{
- data = m_rom[(offset & 0x3fff) + (romqa * 0x4000)];
+ data = m_rom[(offset & 0x3fff) | (romqa << 14)];
}
return data;
diff --git a/src/devices/bus/electron/cart/std.h b/src/devices/bus/electron/cart/std.h
index e81e5684ee2..3fc9cefbcd9 100644
--- a/src/devices/bus/electron/cart/std.h
+++ b/src/devices/bus/electron/cart/std.h
@@ -31,7 +31,7 @@ protected:
virtual void device_start() override;
// electron_cart_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, int infc, int infd, int romqa) override;
+ virtual uint8_t read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2) override;
};
// device type definition
diff --git a/src/devices/bus/electron/cart/stlefs.cpp b/src/devices/bus/electron/cart/stlefs.cpp
index 83dbf998f2a..47566871a9d 100644
--- a/src/devices/bus/electron/cart/stlefs.cpp
+++ b/src/devices/bus/electron/cart/stlefs.cpp
@@ -47,9 +47,9 @@ void stlefs_floppies(device_slot_interface &device)
void electron_stlefs_device::device_add_mconfig(machine_config &config)
{
/* fdc */
- WD1770(config, m_fdc, 16_MHz_XTAL / 2);
- m_fdc->intrq_wr_callback().set(FUNC(electron_stlefs_device::fdc_intrq_w));
- m_fdc->drq_wr_callback().set(FUNC(electron_stlefs_device::fdc_drq_w));
+ WD1770(config, m_fdc, DERIVED_CLOCK(1, 2));
+ m_fdc->intrq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(electron_cartslot_device::irq_w));
+ m_fdc->drq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(electron_cartslot_device::nmi_w));
FLOPPY_CONNECTOR(config, m_floppy0, stlefs_floppies, "525qd", electron_stlefs_device::floppy_formats).enable_sound(true);
FLOPPY_CONNECTOR(config, m_floppy1, stlefs_floppies, nullptr, electron_stlefs_device::floppy_formats).enable_sound(true);
}
@@ -83,7 +83,7 @@ void electron_stlefs_device::device_start()
// read - cartridge data read
//-------------------------------------------------
-uint8_t electron_stlefs_device::read(address_space &space, offs_t offset, int infc, int infd, int romqa)
+uint8_t electron_stlefs_device::read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2)
{
uint8_t data = 0xff;
@@ -99,13 +99,9 @@ uint8_t electron_stlefs_device::read(address_space &space, offs_t offset, int in
break;
}
}
-
- if (!infc && !infd)
+ else if (oe)
{
- if (offset >= 0x0000 && offset < 0x4000)
- {
- data = m_rom[(offset & 0x3fff) + (romqa * 0x4000)];
- }
+ data = m_rom[(offset & 0x3fff) | (romqa << 14)];
}
return data;
@@ -115,14 +111,14 @@ uint8_t electron_stlefs_device::read(address_space &space, offs_t offset, int in
// write - cartridge data write
//-------------------------------------------------
-void electron_stlefs_device::write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa)
+void electron_stlefs_device::write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2)
{
if (infc)
{
switch (offset & 0xff)
{
case 0xc0:
- wd1770_control_w(space, 0, data);
+ wd1770_control_w(data);
break;
case 0xc4:
case 0xc5:
@@ -141,7 +137,7 @@ void electron_stlefs_device::write(address_space &space, offs_t offset, uint8_t
// IMPLEMENTATION
//**************************************************************************
-WRITE8_MEMBER(electron_stlefs_device::wd1770_control_w)
+void electron_stlefs_device::wd1770_control_w(uint8_t data)
{
floppy_image_device *floppy = nullptr;
@@ -160,13 +156,3 @@ WRITE8_MEMBER(electron_stlefs_device::wd1770_control_w)
// bit 5: reset
if (!BIT(data, 5)) m_fdc->soft_reset();
}
-
-void electron_stlefs_device::fdc_intrq_w(int state)
-{
- m_slot->irq_w(state);
-}
-
-void electron_stlefs_device::fdc_drq_w(int state)
-{
- m_slot->nmi_w(state);
-}
diff --git a/src/devices/bus/electron/cart/stlefs.h b/src/devices/bus/electron/cart/stlefs.h
index 2123261907a..421850943e2 100644
--- a/src/devices/bus/electron/cart/stlefs.h
+++ b/src/devices/bus/electron/cart/stlefs.h
@@ -36,13 +36,11 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// electron_cart_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, int infc, int infd, int romqa) override;
- virtual void write(address_space &space, offs_t offset, uint8_t data, int infc, int infd, int romqa) override;
+ virtual uint8_t read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2) override;
+ virtual void write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2) override;
private:
- DECLARE_WRITE8_MEMBER(wd1770_control_w);
- DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w);
- DECLARE_WRITE_LINE_MEMBER(fdc_drq_w);
+ void wd1770_control_w(uint8_t data);
DECLARE_FLOPPY_FORMATS(floppy_formats);
required_device<wd1770_device> m_fdc;
diff --git a/src/devices/bus/electron/cart/tube.cpp b/src/devices/bus/electron/cart/tube.cpp
new file mode 100644
index 00000000000..02dcd00275d
--- /dev/null
+++ b/src/devices/bus/electron/cart/tube.cpp
@@ -0,0 +1,91 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Acorn Electron Tube Interface
+
+**********************************************************************/
+
+
+#include "emu.h"
+#include "tube.h"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(ELECTRON_TUBE, electron_tube_device, "electron_tube", "Acorn Electron Tube Interface")
+
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void electron_tube_device::device_add_mconfig(machine_config &config)
+{
+ /* tube port */
+ BBC_TUBE_SLOT(config, m_tube, electron_tube_devices, nullptr);
+ m_tube->irq_handler().set(DEVICE_SELF_OWNER, FUNC(electron_cartslot_device::irq_w));
+}
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// electron_tube_device - constructor
+//-------------------------------------------------
+
+electron_tube_device::electron_tube_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, ELECTRON_TUBE, tag, owner, clock)
+ , device_electron_cart_interface(mconfig, *this)
+ , m_tube(*this, "tube")
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void electron_tube_device::device_start()
+{
+}
+
+//-------------------------------------------------
+// read - cartridge data read
+//-------------------------------------------------
+
+uint8_t electron_tube_device::read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2)
+{
+ uint8_t data = 0xff;
+
+ if (infc)
+ {
+ if (offset >= 0xe0 && offset < 0xf0)
+ {
+ data = m_tube->host_r(offset & 0x0f);
+ }
+ }
+ else if (oe2)
+ {
+ data = m_rom[offset & 0x1fff];
+ }
+
+ return data;
+}
+
+//-------------------------------------------------
+// write - cartridge data write
+//-------------------------------------------------
+
+void electron_tube_device::write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2)
+{
+ if (infc)
+ {
+ if (offset >= 0xe0 && offset < 0xf0)
+ {
+ m_tube->host_w(offset & 0x0f, data);
+ }
+ }
+}
diff --git a/src/devices/bus/electron/cart/tube.h b/src/devices/bus/electron/cart/tube.h
new file mode 100644
index 00000000000..1d239ef5215
--- /dev/null
+++ b/src/devices/bus/electron/cart/tube.h
@@ -0,0 +1,47 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Acorn Electron Tube Interface
+
+**********************************************************************/
+
+#ifndef MAME_BUS_ELECTRON_CART_TUBE_H
+#define MAME_BUS_ELECTRON_CART_TUBE_H
+
+#include "slot.h"
+#include "bus/bbc/tube/tube.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+class electron_tube_device :
+ public device_t,
+ public device_electron_cart_interface
+{
+public:
+ // construction/destruction
+ electron_tube_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ // electron_cart_interface overrides
+ virtual uint8_t read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2) override;
+ virtual void write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2) override;
+
+private:
+ required_device<bbc_tube_slot_device> m_tube;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(ELECTRON_TUBE, electron_tube_device)
+
+
+#endif // MAME_BUS_ELECTRON_CART_TUBE_H
diff --git a/src/devices/bus/electron/exp.cpp b/src/devices/bus/electron/exp.cpp
index 9d78af460a9..d2cd0abc824 100644
--- a/src/devices/bus/electron/exp.cpp
+++ b/src/devices/bus/electron/exp.cpp
@@ -32,15 +32,6 @@ device_electron_expansion_interface::device_electron_expansion_interface(const m
}
-//-------------------------------------------------
-// ~device_electron_expansion_interface - destructor
-//-------------------------------------------------
-
-device_electron_expansion_interface::~device_electron_expansion_interface()
-{
-}
-
-
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
@@ -60,15 +51,6 @@ electron_expansion_slot_device::electron_expansion_slot_device(const machine_con
//-------------------------------------------------
-// expansion_slot_device - destructor
-//-------------------------------------------------
-
-electron_expansion_slot_device::~electron_expansion_slot_device()
-{
-}
-
-
-//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -93,11 +75,13 @@ void electron_expansion_slot_device::device_reset()
// expbus_r - expansion data read
//-------------------------------------------------
-uint8_t electron_expansion_slot_device::expbus_r(address_space &space, offs_t offset, uint8_t data)
+uint8_t electron_expansion_slot_device::expbus_r(offs_t offset)
{
+ uint8_t data = 0xff;
+
if (m_card != nullptr)
{
- data = m_card->expbus_r(space, offset, data);
+ data = m_card->expbus_r(offset);
}
return data;
@@ -107,11 +91,11 @@ uint8_t electron_expansion_slot_device::expbus_r(address_space &space, offs_t of
// expbus_w - expansion data write
//-------------------------------------------------
-void electron_expansion_slot_device::expbus_w(address_space &space, offs_t offset, uint8_t data)
+void electron_expansion_slot_device::expbus_w(offs_t offset, uint8_t data)
{
if (m_card != nullptr)
{
- m_card->expbus_w(space, offset, data);
+ m_card->expbus_w(offset, data);
}
}
@@ -126,6 +110,7 @@ void electron_expansion_slot_device::expbus_w(address_space &space, offs_t offse
//#include "fbprint.h"
//#include "jafamode7.h"
#include "plus1.h"
+#include "plus2.h"
#include "plus3.h"
#include "pwrjoy.h"
#include "rombox.h"
@@ -140,6 +125,7 @@ void electron_expansion_devices(device_slot_interface &device)
//device.option_add("fbprint", ELECTRON_FBPRINT);
//device.option_add("jafamode7", ELECTRON_JAFAMODE7);
device.option_add("plus1", ELECTRON_PLUS1);
+ device.option_add("plus2", ELECTRON_PLUS2);
device.option_add("plus3", ELECTRON_PLUS3);
device.option_add("pwrjoy", ELECTRON_PWRJOY);
device.option_add("rombox", ELECTRON_ROMBOX);
diff --git a/src/devices/bus/electron/exp.h b/src/devices/bus/electron/exp.h
index ddac72c4d2b..a3bfc045b3a 100644
--- a/src/devices/bus/electron/exp.h
+++ b/src/devices/bus/electron/exp.h
@@ -91,33 +91,6 @@ AC RETURNS (pins 3,4) - adaptor. A total of 6W may be drawn from these lines as
//**************************************************************************
-// CONSTANTS
-//**************************************************************************
-
-#define ELECTRON_EXPANSION_SLOT_TAG "exp"
-
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_ELECTRON_EXPANSION_SLOT_ADD(_tag, _slot_intf, _def_slot, _fixed) \
- MCFG_DEVICE_ADD(_tag, ELECTRON_EXPANSION_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _fixed)
-
-#define MCFG_ELECTRON_PASSTHRU_EXPANSION_SLOT_ADD(_def_slot) \
- MCFG_ELECTRON_EXPANSION_SLOT_ADD(ELECTRON_EXPANSION_SLOT_TAG, electron_expansion_devices, _def_slot, false) \
- MCFG_ELECTRON_EXPANSION_SLOT_IRQ_HANDLER(WRITELINE(DEVICE_SELF_OWNER, electron_expansion_slot_device, irq_w)) \
- MCFG_ELECTRON_EXPANSION_SLOT_NMI_HANDLER(WRITELINE(DEVICE_SELF_OWNER, electron_expansion_slot_device, nmi_w))
-
-#define MCFG_ELECTRON_EXPANSION_SLOT_IRQ_HANDLER(_devcb) \
- downcast<electron_expansion_slot_device &>(*device).set_irq_handler(DEVCB_##_devcb);
-
-#define MCFG_ELECTRON_EXPANSION_SLOT_NMI_HANDLER(_devcb) \
- downcast<electron_expansion_slot_device &>(*device).set_nmi_handler(DEVCB_##_devcb);
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -129,15 +102,23 @@ class electron_expansion_slot_device : public device_t, public device_slot_inter
{
public:
// construction/destruction
+ template <typename T>
+ electron_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&opts, const char *dflt)
+ : electron_expansion_slot_device(mconfig, tag, owner, clock)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
electron_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual ~electron_expansion_slot_device();
// callbacks
- template <class Object> devcb_base &set_irq_handler(Object &&cb) { return m_irq_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_nmi_handler(Object &&cb) { return m_nmi_handler.set_callback(std::forward<Object>(cb)); }
+ auto irq_handler() { return m_irq_handler.bind(); }
+ auto nmi_handler() { return m_nmi_handler.bind(); }
- uint8_t expbus_r(address_space &space, offs_t offset, uint8_t data);
- void expbus_w(address_space &space, offs_t offset, uint8_t data);
+ uint8_t expbus_r(offs_t offset);
+ void expbus_w(offs_t offset, uint8_t data);
DECLARE_WRITE_LINE_MEMBER( irq_w ) { m_irq_handler(state); }
DECLARE_WRITE_LINE_MEMBER( nmi_w ) { m_nmi_handler(state); }
@@ -160,11 +141,8 @@ private:
class device_electron_expansion_interface : public device_slot_card_interface
{
public:
- // construction/destruction
- virtual ~device_electron_expansion_interface();
-
- virtual uint8_t expbus_r(address_space &space, offs_t offset, uint8_t data) { return data; }
- virtual void expbus_w(address_space &space, offs_t offset, uint8_t data) { }
+ virtual uint8_t expbus_r(offs_t offset) { return 0xff; }
+ virtual void expbus_w(offs_t offset, uint8_t data) { }
protected:
device_electron_expansion_interface(const machine_config &mconfig, device_t &device);
diff --git a/src/devices/bus/electron/fbjoy.cpp b/src/devices/bus/electron/fbjoy.cpp
index 6c4939edbf5..e5a4042cfeb 100644
--- a/src/devices/bus/electron/fbjoy.cpp
+++ b/src/devices/bus/electron/fbjoy.cpp
@@ -67,8 +67,10 @@ void electron_fbjoy_device::device_start()
// expbus_r - expansion data read
//-------------------------------------------------
-uint8_t electron_fbjoy_device::expbus_r(address_space &space, offs_t offset, uint8_t data)
+uint8_t electron_fbjoy_device::expbus_r(offs_t offset)
{
+ uint8_t data = 0xff;
+
if (offset == 0xfcc0)
{
data = m_joy->read() | 0xe0;
diff --git a/src/devices/bus/electron/fbjoy.h b/src/devices/bus/electron/fbjoy.h
index b45c242d907..d9faaa6cd15 100644
--- a/src/devices/bus/electron/fbjoy.h
+++ b/src/devices/bus/electron/fbjoy.h
@@ -33,7 +33,7 @@ public:
// optional information overrides
virtual ioport_constructor device_input_ports() const override;
- virtual uint8_t expbus_r(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t expbus_r(offs_t offset) override;
protected:
// device-level overrides
diff --git a/src/devices/bus/electron/m2105.cpp b/src/devices/bus/electron/m2105.cpp
index abc652d6fdf..a5edb8e3232 100644
--- a/src/devices/bus/electron/m2105.cpp
+++ b/src/devices/bus/electron/m2105.cpp
@@ -59,27 +59,27 @@ void electron_m2105_device::device_add_mconfig(machine_config &config)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- INPUT_MERGER_ANY_HIGH(config, m_irqs);
- m_irqs->output_handler().set(FUNC(electron_m2105_device::intrq_w));
+ INPUT_MERGER_ANY_HIGH(config, m_irqs).output_handler().set(DEVICE_SELF_OWNER, FUNC(electron_expansion_slot_device::irq_w));
+
+ /* nvram */
+ RAM(config, m_ram).set_default_size("64K");
/* system via */
- VIA6522(config, m_via6522_0, 1000000);
- /*m_via6522_0->readpa_handler().set(FUNC(electron_m2105_device::m2105_via_system_read_porta));
- m_via6522_0->readpb_handler().set(FUNC(electron_m2105_device::m2105_via_system_read_portb));
- m_via6522_0->writepa_handler().set(FUNC(electron_m2105_device::m2105_via_system_write_porta));
- m_via6522_0->writepb_handler().set(FUNC(electron_m2105_device::m2105_via_system_write_portb));*/
+ VIA6522(config, m_via6522_0, DERIVED_CLOCK(1, 16));
+ //m_via6522_0->readpa_handler().set(FUNC(electron_m2105_device::m2105_via_system_read_porta));
+ m_via6522_0->readpb_handler().set(m_tms, FUNC(tms5220_device::status_r));
+ //m_via6522_0->writepa_handler().set(FUNC(electron_m2105_device::m2105_via_system_write_porta));
+ m_via6522_0->writepb_handler().set(m_tms, FUNC(tms5220_device::data_w));
m_via6522_0->irq_handler().set(m_irqs, FUNC(input_merger_device::in_w<0>));
/* user via */
- VIA6522(config, m_via6522_1, 1000000);
- //m_via6522_1->readpb_handler().set(FUNC(electron_m2105_device::m2105_via_user_read_portb));
- m_via6522_1->writepa_handler().set("cent_data_out", FUNC(output_latch_device::bus_w));
- //m_via6522_1->writepb_handler().set(FUNC(electron_m2105_device::m2105_via_user_write_portb));
+ VIA6522(config, m_via6522_1, DERIVED_CLOCK(1, 16));
+ m_via6522_1->writepb_handler().set("cent_data_out", FUNC(output_latch_device::bus_w));
m_via6522_1->ca2_handler().set(m_centronics, FUNC(centronics_device::write_strobe));
m_via6522_1->irq_handler().set(m_irqs, FUNC(input_merger_device::in_w<1>));
- /* duart */
- SCN2681(config, m_duart, XTAL(3'686'400));
+ /* duart */
+ SCN2681(config, m_duart, XTAL(3'686'400)); // TODO: confirm clock
m_duart->irq_cb().set(m_irqs, FUNC(input_merger_device::in_w<2>));
m_duart->a_tx_cb().set("rs232", FUNC(rs232_port_device::write_txd));
//m_duart->outport_cb().set(FUNC(electron_m2105_device::sio_out_w));
@@ -93,10 +93,14 @@ void electron_m2105_device::device_add_mconfig(machine_config &config)
output_latch_device &latch(OUTPUT_LATCH(config, "cent_data_out"));
m_centronics->set_output_latch(latch);
+ /* AM7910 modem */
+
/* speech hardware */
SPEECHROM(config, "vsm", 0);
TMS5220(config, m_tms, 640000);
m_tms->set_speechrom_tag("vsm");
+ //m_tms->irq_handler().set(m_via6522_0, FUNC(via6522_device::write_cb1));
+ //m_tms->readyq_handler().set(m_via6522_0, FUNC(via6522_device::write_cb2));
m_tms->add_route(ALL_OUTPUTS, "mono", 1.0);
}
@@ -117,12 +121,14 @@ electron_m2105_device::electron_m2105_device(const machine_config &mconfig, cons
: device_t(mconfig, ELECTRON_M2105, tag, owner, clock)
, device_electron_expansion_interface(mconfig, *this)
, m_exp_rom(*this, "exp_rom")
+ , m_ram(*this, RAM_TAG)
, m_via6522_0(*this, "via6522_0")
, m_via6522_1(*this, "via6522_1")
, m_duart(*this, "duart")
, m_tms(*this, "tms5220")
, m_centronics(*this, "centronics")
, m_irqs(*this, "irqs")
+ , m_ram_page(0)
, m_romsel(0)
{
}
@@ -133,7 +139,7 @@ electron_m2105_device::electron_m2105_device(const machine_config &mconfig, cons
void electron_m2105_device::device_start()
{
- m_slot = dynamic_cast<electron_expansion_slot_device *>(owner());
+ save_item(NAME(m_ram_page));
}
//-------------------------------------------------
@@ -148,37 +154,57 @@ void electron_m2105_device::device_reset()
// expbus_r - expansion data read
//-------------------------------------------------
-uint8_t electron_m2105_device::expbus_r(address_space &space, offs_t offset, uint8_t data)
+uint8_t electron_m2105_device::expbus_r(offs_t offset)
{
- if (offset >= 0x8000 && offset < 0xc000)
+ uint8_t data = 0xff;
+
+ switch (offset >> 12)
{
+ case 0x8:
+ case 0x9:
+ case 0xa:
+ case 0xb:
switch (m_romsel)
{
case 0:
- data = m_exp_rom->base()[0x8000 + (offset & 0x3fff)];
+ data = m_exp_rom->base()[0x8000 | (offset & 0x3fff)];
break;
case 2:
- data = m_exp_rom->base()[0xc000 + (offset & 0x3fff)];
+ data = m_exp_rom->base()[0xc000 | (offset & 0x3fff)];
break;
case 12:
- data = m_exp_rom->base()[0x0000 + (offset & 0x3fff)];
+ data = m_exp_rom->base()[0x0000 | (offset & 0x3fff)];
break;
case 13:
- data = m_exp_rom->base()[0x4000 + (offset & 0x3fff)];
+ data = m_exp_rom->base()[0x4000 | (offset & 0x3fff)];
+ break;
+ }
+ break;
+
+ case 0xf:
+ switch (offset >> 8)
+ {
+ case 0xfc:
+ logerror("read %04x\n", offset);
+ if (offset >= 0xfc50 && offset < 0xfc60)
+ {
+ data = m_duart->read(offset & 0x0f);
+ }
+ else if (offset >= 0xfc60 && offset < 0xfc70)
+ {
+ data = m_via6522_1->read(offset & 0x0f);
+ }
+ else if (offset >= 0xfc70 && offset < 0xfc80)
+ {
+ data = m_via6522_0->read(offset & 0x0f);
+ }
+ break;
+
+ case 0xfd:
+ //if (m_ram_page < 0x80)
+ data = m_ram->pointer()[(m_ram_page << 8) | (offset & 0xff)];
break;
}
- }
- else if (offset >= 0xfc40 && offset < 0xfc60)
- {
- data = m_via6522_1->read(offset);
- }
- else if (offset >= 0xfc60 && offset < 0xfc70)
- {
- data = m_duart->read(offset & 0x0f);
- }
- else if (offset >= 0xfc70 && offset < 0xfc90)
- {
- data = m_via6522_0->read(offset);
}
return data;
@@ -188,36 +214,44 @@ uint8_t electron_m2105_device::expbus_r(address_space &space, offs_t offset, uin
// expbus_w - expansion data write
//-------------------------------------------------
-void electron_m2105_device::expbus_w(address_space &space, offs_t offset, uint8_t data)
+void electron_m2105_device::expbus_w(offs_t offset, uint8_t data)
{
- if (offset >= 0x8000 && offset < 0xc000)
- {
- logerror("write ram bank %d\n", m_romsel);
- }
- else if (offset >= 0xfc40 && offset < 0xfc60)
+ switch (offset >> 12)
{
- m_via6522_1->write(offset, data);
- }
- else if (offset >= 0xfc60 && offset < 0xfc70)
- {
- m_duart->write(offset & 0x0f, data);
- }
- else if (offset >= 0xfc70 && offset < 0xfc90)
- {
- m_via6522_0->write(offset, data);
- }
- else if (offset == 0xfe05)
- {
- m_romsel = data & 0x0f;
- }
-}
-
+ case 0xf:
+ switch (offset >> 8)
+ {
+ case 0xfc:
+ logerror("write %04x %02x\n", offset, data);
+ if (offset >= 0xfc50 && offset < 0xfc60)
+ {
+ m_duart->write(offset & 0x0f, data);
+ }
+ else if (offset >= 0xfc60 && offset < 0xfc70)
+ {
+ m_via6522_1->write(offset & 0x0f, data);
+ }
+ else if (offset >= 0xfc70 && offset < 0xfc80)
+ {
+ m_via6522_0->write(offset & 0x0f, data);
+ }
+ else if (offset == 0xfcff)
+ {
+ m_ram_page = data;
+ }
+ break;
-//**************************************************************************
-// IMPLEMENTATION
-//**************************************************************************
+ case 0xfd:
+ //if (m_ram_page < 0x80)
+ m_ram->pointer()[(m_ram_page << 8) | (offset & 0xff)] = data;
+ break;
-WRITE_LINE_MEMBER(electron_m2105_device::intrq_w)
-{
- m_slot->irq_w(state);
+ case 0xfe:
+ if (offset == 0xfe05)
+ {
+ m_romsel = data & 0x0f;
+ }
+ break;
+ }
+ }
}
diff --git a/src/devices/bus/electron/m2105.h b/src/devices/bus/electron/m2105.h
index 3fab3b52128..c09f4722eab 100644
--- a/src/devices/bus/electron/m2105.h
+++ b/src/devices/bus/electron/m2105.h
@@ -12,6 +12,7 @@
#pragma once
#include "exp.h"
+#include "machine/ram.h"
#include "machine/6522via.h"
#include "machine/mc68681.h"
#include "machine/input_merger.h"
@@ -40,13 +41,12 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
- virtual uint8_t expbus_r(address_space &space, offs_t offset, uint8_t data) override;
- virtual void expbus_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t expbus_r(offs_t offset) override;
+ virtual void expbus_w(offs_t offset, uint8_t data) override;
private:
- DECLARE_WRITE_LINE_MEMBER(intrq_w);
-
required_memory_region m_exp_rom;
+ required_device<ram_device> m_ram;
required_device<via6522_device> m_via6522_0;
required_device<via6522_device> m_via6522_1;
required_device<scn2681_device> m_duart;
@@ -54,6 +54,7 @@ private:
required_device<centronics_device> m_centronics;
required_device<input_merger_device> m_irqs;
+ uint8_t m_ram_page;
uint8_t m_romsel;
};
diff --git a/src/devices/bus/electron/plus1.cpp b/src/devices/bus/electron/plus1.cpp
index 9bb500b586d..a96ad20c656 100644
--- a/src/devices/bus/electron/plus1.cpp
+++ b/src/devices/bus/electron/plus1.cpp
@@ -90,11 +90,13 @@ ioport_constructor electron_plus1_device::device_input_ports() const
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(electron_plus1_device::device_add_mconfig)
+void electron_plus1_device::device_add_mconfig(machine_config &config)
+{
/* printer */
- MCFG_DEVICE_ADD(m_centronics, CENTRONICS, centronics_devices, "printer")
- MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(*this, electron_plus1_device, busy_w))
- MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
+ CENTRONICS(config, m_centronics, centronics_devices, "printer");
+ m_centronics->busy_handler().set(FUNC(electron_plus1_device::busy_w));
+ output_latch_device &latch(OUTPUT_LATCH(config, "cent_data_out"));
+ m_centronics->set_output_latch(latch);
/* adc */
ADC0844(config, m_adc);
@@ -105,13 +107,13 @@ MACHINE_CONFIG_START(electron_plus1_device::device_add_mconfig)
m_adc->ch4_callback().set_ioport("JOY4");
/* cartridges */
- MCFG_ELECTRON_CARTSLOT_ADD("cart_sk1", electron_cart, nullptr)
- MCFG_ELECTRON_CARTSLOT_IRQ_HANDLER(WRITELINE(*this, electron_plus1_device, irq_w))
- MCFG_ELECTRON_CARTSLOT_NMI_HANDLER(WRITELINE(*this, electron_plus1_device, nmi_w))
- MCFG_ELECTRON_CARTSLOT_ADD("cart_sk2", electron_cart, nullptr)
- MCFG_ELECTRON_CARTSLOT_IRQ_HANDLER(WRITELINE(*this, electron_plus1_device, irq_w))
- MCFG_ELECTRON_CARTSLOT_NMI_HANDLER(WRITELINE(*this, electron_plus1_device, nmi_w))
-MACHINE_CONFIG_END
+ ELECTRON_CARTSLOT(config, m_cart_sk1, DERIVED_CLOCK(1, 1), electron_cart, nullptr);
+ m_cart_sk1->irq_handler().set(DEVICE_SELF_OWNER, FUNC(electron_expansion_slot_device::irq_w));
+ m_cart_sk1->nmi_handler().set(DEVICE_SELF_OWNER, FUNC(electron_expansion_slot_device::nmi_w));
+ ELECTRON_CARTSLOT(config, m_cart_sk2, DERIVED_CLOCK(1, 1), electron_cart, nullptr);
+ m_cart_sk2->irq_handler().set(DEVICE_SELF_OWNER, FUNC(electron_expansion_slot_device::irq_w));
+ m_cart_sk2->nmi_handler().set(DEVICE_SELF_OWNER, FUNC(electron_expansion_slot_device::nmi_w));
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
@@ -154,7 +156,6 @@ electron_plus1_device::electron_plus1_device(const machine_config &mconfig, cons
void electron_plus1_device::device_start()
{
- m_slot = dynamic_cast<electron_expansion_slot_device *>(owner());
}
@@ -162,8 +163,10 @@ void electron_plus1_device::device_start()
// expbus_r - expansion data read
//-------------------------------------------------
-uint8_t electron_plus1_device::expbus_r(address_space &space, offs_t offset, uint8_t data)
+uint8_t electron_plus1_device::expbus_r(offs_t offset)
{
+ uint8_t data = 0xff;
+
switch (offset >> 12)
{
case 0x8:
@@ -174,15 +177,19 @@ uint8_t electron_plus1_device::expbus_r(address_space &space, offs_t offset, uin
{
case 0:
case 1:
- data = m_cart_sk2->read(space, offset & 0x3fff, 0, 0, m_romsel & 0x01);
+ data = m_cart_sk2->read(offset & 0x3fff, 0, 0, m_romsel & 0x01, 1, 0);
break;
case 2:
case 3:
- data = m_cart_sk1->read(space, offset & 0x3fff, 0, 0, m_romsel & 0x01);
+ data = m_cart_sk1->read(offset & 0x3fff, 0, 0, m_romsel & 0x01, 1, 0);
break;
case 12:
data = m_exp_rom->base()[offset & 0x1fff];
break;
+ case 13:
+ data &= m_cart_sk1->read(offset & 0x3fff, 0, 0, m_romsel & 0x01, 0, 1);
+ data &= m_cart_sk2->read(offset & 0x3fff, 0, 0, m_romsel & 0x01, 0, 1);
+ break;
}
break;
@@ -190,22 +197,22 @@ uint8_t electron_plus1_device::expbus_r(address_space &space, offs_t offset, uin
switch (offset >> 8)
{
case 0xfc:
- data &= m_cart_sk1->read(space, offset & 0xff, 1, 0, m_romsel & 0x01);
- data &= m_cart_sk2->read(space, offset & 0xff, 1, 0, m_romsel & 0x01);
+ data &= m_cart_sk1->read(offset & 0xff, 1, 0, m_romsel & 0x01, 0, 0);
+ data &= m_cart_sk2->read(offset & 0xff, 1, 0, m_romsel & 0x01, 0, 0);
if (offset == 0xfc70)
{
- data &= m_adc->read(space, offset);
+ data &= m_adc->read();
}
else if (offset == 0xfc72)
{
- data &= status_r(space, offset);
+ data &= status_r();
}
break;
case 0xfd:
- data &= m_cart_sk1->read(space, offset & 0xff, 0, 1, m_romsel & 0x01);
- data &= m_cart_sk2->read(space, offset & 0xff, 0, 1, m_romsel & 0x01);
+ data &= m_cart_sk1->read(offset & 0xff, 0, 1, m_romsel & 0x01, 0, 0);
+ data &= m_cart_sk2->read(offset & 0xff, 0, 1, m_romsel & 0x01, 0, 0);
break;
}
}
@@ -218,7 +225,7 @@ uint8_t electron_plus1_device::expbus_r(address_space &space, offs_t offset, uin
// expbus_w - expansion data write
//-------------------------------------------------
-void electron_plus1_device::expbus_w(address_space &space, offs_t offset, uint8_t data)
+void electron_plus1_device::expbus_w(offs_t offset, uint8_t data)
{
switch (offset >> 12)
{
@@ -230,11 +237,11 @@ void electron_plus1_device::expbus_w(address_space &space, offs_t offset, uint8_
{
case 0:
case 1:
- m_cart_sk2->write(space, offset & 0x3fff, data, 0, 0, m_romsel & 0x01);
+ m_cart_sk2->write(offset & 0x3fff, data, 0, 0, m_romsel & 0x01, 1, 0);
break;
case 2:
case 3:
- m_cart_sk1->write(space, offset & 0x3fff, data, 0, 0, m_romsel & 0x01);
+ m_cart_sk1->write(offset & 0x3fff, data, 0, 0, m_romsel & 0x01, 1, 0);
break;
}
break;
@@ -243,12 +250,12 @@ void electron_plus1_device::expbus_w(address_space &space, offs_t offset, uint8_
switch (offset >> 8)
{
case 0xfc:
- m_cart_sk1->write(space, offset & 0xff, data, 1, 0, m_romsel & 0x01);
- m_cart_sk2->write(space, offset & 0xff, data, 1, 0, m_romsel & 0x01);
+ m_cart_sk1->write(offset & 0xff, data, 1, 0, m_romsel & 0x01, 0, 0);
+ m_cart_sk2->write(offset & 0xff, data, 1, 0, m_romsel & 0x01, 0, 0);
if (offset == 0xfc70)
{
- m_adc->write(space, offset, data);
+ m_adc->write(data);
}
else if (offset == 0xfc71)
{
@@ -257,8 +264,8 @@ void electron_plus1_device::expbus_w(address_space &space, offs_t offset, uint8_
break;
case 0xfd:
- m_cart_sk1->write(space, offset & 0xff, data, 0, 1, m_romsel & 0x01);
- m_cart_sk2->write(space, offset & 0xff, data, 0, 1, m_romsel & 0x01);
+ m_cart_sk1->write(offset & 0xff, data, 0, 1, m_romsel & 0x01, 0, 0);
+ m_cart_sk2->write(offset & 0xff, data, 0, 1, m_romsel & 0x01, 0, 0);
break;
case 0xfe:
@@ -276,9 +283,9 @@ void electron_plus1_device::expbus_w(address_space &space, offs_t offset, uint8_
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(electron_plus1_device::status_r)
+u8 electron_plus1_device::status_r()
{
- uint8_t data = 0x0f;
+ u8 data = 0x0f;
// Status: b7: printer Busy
// b6: ADC conversion end
// b5: Fire Button 1
@@ -299,13 +306,3 @@ WRITE_LINE_MEMBER(electron_plus1_device::ready_w)
{
m_adc_ready = !state;
}
-
-WRITE_LINE_MEMBER(electron_plus1_device::irq_w)
-{
- m_slot->irq_w(state);
-}
-
-WRITE_LINE_MEMBER(electron_plus1_device::nmi_w)
-{
- m_slot->nmi_w(state);
-}
diff --git a/src/devices/bus/electron/plus1.h b/src/devices/bus/electron/plus1.h
index 415797905fd..e211594a2c6 100644
--- a/src/devices/bus/electron/plus1.h
+++ b/src/devices/bus/electron/plus1.h
@@ -37,15 +37,13 @@ protected:
virtual const tiny_rom_entry *device_rom_region() const override;
virtual ioport_constructor device_input_ports() const override;
- virtual uint8_t expbus_r(address_space &space, offs_t offset, uint8_t data) override;
- virtual void expbus_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t expbus_r(offs_t offset) override;
+ virtual void expbus_w(offs_t offset, uint8_t data) override;
private:
- DECLARE_READ8_MEMBER(status_r);
+ u8 status_r();
DECLARE_WRITE_LINE_MEMBER(busy_w);
DECLARE_WRITE_LINE_MEMBER(ready_w);
- DECLARE_WRITE_LINE_MEMBER(irq_w);
- DECLARE_WRITE_LINE_MEMBER(nmi_w);
required_memory_region m_exp_rom;
required_device<electron_cartslot_device> m_cart_sk1;
diff --git a/src/devices/bus/electron/plus2.cpp b/src/devices/bus/electron/plus2.cpp
new file mode 100644
index 00000000000..040ec58eb35
--- /dev/null
+++ b/src/devices/bus/electron/plus2.cpp
@@ -0,0 +1,236 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Slogger Plus 2
+
+ The Plus 2 interface from Slogger has been designed to compliment
+ the Slogger Rombox Plus and Acorn Plus 1 by offering further
+ expansion capabilities. This has been achieved by providing two
+ extra cartridge slots, three ROM sockets and connections for a
+ Usr Port and even further expansion via two expansion points.
+
+**********************************************************************/
+
+
+#include "emu.h"
+#include "plus2.h"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(ELECTRON_PLUS2, electron_plus2_device, "electron_plus2", "Slogger Plus 2 Expansion")
+
+
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void electron_plus2_device::device_add_mconfig(machine_config &config)
+{
+ /* rom sockets */
+ GENERIC_SOCKET(config, m_rom[0], generic_plain_slot, "electron_rom", "bin,rom"); // ROM SLOT 13
+ m_rom[0]->set_device_load(device_image_load_delegate(&electron_plus2_device::device_image_load_rom1_load, this));
+ GENERIC_SOCKET(config, m_rom[1], generic_plain_slot, "electron_rom", "bin,rom"); // ROM SLOT 14
+ m_rom[1]->set_device_load(device_image_load_delegate(&electron_plus2_device::device_image_load_rom2_load, this));
+ GENERIC_SOCKET(config, m_rom[2], generic_plain_slot, "electron_rom", "bin,rom"); // ROM SLOT 15
+ m_rom[2]->set_device_load(device_image_load_delegate(&electron_plus2_device::device_image_load_rom3_load, this));
+
+ /* cartridges */
+ ELECTRON_CARTSLOT(config, m_cart[0], DERIVED_CLOCK(1, 1), electron_cart, nullptr);
+ m_cart[0]->irq_handler().set(DEVICE_SELF_OWNER, FUNC(electron_expansion_slot_device::irq_w));
+ m_cart[0]->nmi_handler().set(DEVICE_SELF_OWNER, FUNC(electron_expansion_slot_device::nmi_w));
+ ELECTRON_CARTSLOT(config, m_cart[1], DERIVED_CLOCK(1, 1), electron_cart, nullptr);
+ m_cart[1]->irq_handler().set(DEVICE_SELF_OWNER, FUNC(electron_expansion_slot_device::irq_w));
+ m_cart[1]->nmi_handler().set(DEVICE_SELF_OWNER, FUNC(electron_expansion_slot_device::nmi_w));
+
+ /* via */
+ VIA6522(config, m_via, DERIVED_CLOCK(1, 16));
+ m_via->readpb_handler().set(m_userport, FUNC(bbc_userport_slot_device::pb_r));
+ m_via->writepb_handler().set(m_userport, FUNC(bbc_userport_slot_device::pb_w));
+ m_via->irq_handler().set(DEVICE_SELF_OWNER, FUNC(electron_expansion_slot_device::irq_w));
+
+ /* user port */
+ BBC_USERPORT_SLOT(config, m_userport, bbc_userport_devices, nullptr);
+ m_userport->cb1_handler().set(m_via, FUNC(via6522_device::write_cb1));
+ m_userport->cb2_handler().set(m_via, FUNC(via6522_device::write_cb2));
+
+ /* pass-through */
+ ELECTRON_EXPANSION_SLOT(config, m_exp, DERIVED_CLOCK(1, 1), electron_expansion_devices, nullptr);
+ m_exp->irq_handler().set(DEVICE_SELF_OWNER, FUNC(electron_expansion_slot_device::irq_w));
+ m_exp->nmi_handler().set(DEVICE_SELF_OWNER, FUNC(electron_expansion_slot_device::nmi_w));
+}
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// electron_plus2_device - constructor
+//-------------------------------------------------
+
+electron_plus2_device::electron_plus2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, ELECTRON_PLUS2, tag, owner, clock)
+ , device_electron_expansion_interface(mconfig, *this)
+ , m_exp(*this, "exp")
+ , m_via(*this, "via6522")
+ , m_rom(*this, "rom%u", 1)
+ , m_cart(*this, "cart%u", 1)
+ , m_userport(*this, "userport")
+ , m_romsel(0)
+{
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void electron_plus2_device::device_start()
+{
+}
+
+
+//-------------------------------------------------
+// expbus_r - expansion data read
+//-------------------------------------------------
+
+uint8_t electron_plus2_device::expbus_r(offs_t offset)
+{
+ uint8_t data = 0xff;
+
+ switch (offset >> 12)
+ {
+ case 0x8:
+ case 0x9:
+ case 0xa:
+ case 0xb:
+ switch (m_romsel)
+ {
+ case 4:
+ case 5:
+ data = m_cart[1]->read(offset & 0x3fff, 0, 0, m_romsel & 0x01, 1, 0);
+ break;
+ case 6:
+ case 7:
+ data = m_cart[0]->read(offset & 0x3fff, 0, 0, m_romsel & 0x01, 1, 0);
+ break;
+ case 13:
+ data &= m_cart[0]->read(offset & 0x3fff, 0, 0, m_romsel & 0x01, 0, 1);
+ data &= m_cart[1]->read(offset & 0x3fff, 0, 0, m_romsel & 0x01, 0, 1);
+ case 14:
+ case 15:
+ data &= m_rom[m_romsel - 13]->read_rom(offset & 0x3fff);
+ break;
+ }
+ break;
+
+ case 0xf:
+ switch (offset >> 8)
+ {
+ case 0xfc:
+ data &= m_cart[0]->read(offset & 0xff, 1, 0, m_romsel & 0x01, 0, 0);
+ data &= m_cart[1]->read(offset & 0xff, 1, 0, m_romsel & 0x01, 0, 0);
+
+ if (offset >= 0xfcb0 && offset < 0xfcc0)
+ {
+ data &= m_via->read(offset & 0x0f);
+ }
+ break;
+
+ case 0xfd:
+ data &= m_cart[0]->read(offset & 0xff, 0, 1, m_romsel & 0x01, 0, 0);
+ data &= m_cart[1]->read(offset & 0xff, 0, 1, m_romsel & 0x01, 0, 0);
+ break;
+ }
+ }
+
+ data &= m_exp->expbus_r(offset);
+
+ return data;
+}
+
+
+//-------------------------------------------------
+// expbus_w - expansion data write
+//-------------------------------------------------
+
+void electron_plus2_device::expbus_w(offs_t offset, uint8_t data)
+{
+ switch (offset >> 12)
+ {
+ case 0x8:
+ case 0x9:
+ case 0xa:
+ case 0xb:
+ switch (m_romsel)
+ {
+ case 4:
+ case 5:
+ m_cart[1]->write(offset & 0x3fff, data, 0, 0, m_romsel & 0x01, 1, 0);
+ break;
+ case 6:
+ case 7:
+ m_cart[0]->write(offset & 0x3fff, data, 0, 0, m_romsel & 0x01, 1, 0);
+ break;
+ }
+ break;
+
+ case 0xf:
+ switch (offset >> 8)
+ {
+ case 0xfc:
+ m_cart[0]->write(offset & 0xff, data, 1, 0, m_romsel & 0x01, 0, 0);
+ m_cart[1]->write(offset & 0xff, data, 1, 0, m_romsel & 0x01, 0, 0);
+
+ if (offset >= 0xfcb0 && offset < 0xfcc0)
+ {
+ m_via->write(offset & 0x0f, data);
+ }
+ break;
+
+ case 0xfd:
+ m_cart[0]->write(offset & 0xff, data, 0, 1, m_romsel & 0x01, 0, 0);
+ m_cart[1]->write(offset & 0xff, data, 0, 1, m_romsel & 0x01, 0, 0);
+ break;
+
+ case 0xfe:
+ if (offset == 0xfe05)
+ {
+ m_romsel = data & 0x0f;
+ }
+ break;
+ }
+ }
+
+ m_exp->expbus_w(offset, data);
+}
+
+
+//**************************************************************************
+// IMPLEMENTATION
+//**************************************************************************
+
+image_init_result electron_plus2_device::load_rom(device_image_interface &image, generic_slot_device *slot)
+{
+ uint32_t size = slot->common_get_size("rom");
+
+ // socket accepts 8K and 16K ROM only
+ if (size != 0x2000 && size != 0x4000)
+ {
+ image.seterror(IMAGE_ERROR_UNSPECIFIED, "Invalid size: Only 8K/16K is supported");
+ return image_init_result::FAIL;
+ }
+
+ slot->rom_alloc(0x4000, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
+ slot->common_load_rom(slot->get_rom_base(), size, "rom");
+
+ // mirror 8K ROMs
+ uint8_t *crt = slot->get_rom_base();
+ if (size <= 0x2000) memcpy(crt + 0x2000, crt, 0x2000);
+
+ return image_init_result::PASS;
+}
diff --git a/src/devices/bus/electron/plus2.h b/src/devices/bus/electron/plus2.h
new file mode 100644
index 00000000000..235ecd4f218
--- /dev/null
+++ b/src/devices/bus/electron/plus2.h
@@ -0,0 +1,62 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Slogger Plus 2
+
+**********************************************************************/
+
+
+#ifndef MAME_BUS_ELECTRON_PLUS2_H
+#define MAME_BUS_ELECTRON_PLUS2_H
+
+#include "exp.h"
+#include "machine/6522via.h"
+#include "bus/electron/cart/slot.h"
+#include "bus/bbc/userport/userport.h"
+#include "bus/generic/slot.h"
+#include "bus/generic/carts.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+class electron_plus2_device:
+ public device_t,
+ public device_electron_expansion_interface
+{
+public:
+ // construction/destruction
+ electron_plus2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ virtual uint8_t expbus_r(offs_t offset) override;
+ virtual void expbus_w(offs_t offset, uint8_t data) override;
+
+private:
+ image_init_result load_rom(device_image_interface &image, generic_slot_device *slot);
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(rom1_load) { return load_rom(image, m_rom[0]); }
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(rom2_load) { return load_rom(image, m_rom[1]); }
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(rom3_load) { return load_rom(image, m_rom[2]); }
+
+ required_device<electron_expansion_slot_device> m_exp;
+ required_device<via6522_device> m_via;
+ required_device_array<generic_slot_device, 3> m_rom;
+ required_device_array<electron_cartslot_device, 2> m_cart;
+ required_device<bbc_userport_slot_device> m_userport;
+
+ uint8_t m_romsel;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(ELECTRON_PLUS2, electron_plus2_device)
+
+
+#endif /* MAME_BUS_ELECTRON_PLUS2_H */
diff --git a/src/devices/bus/electron/plus3.cpp b/src/devices/bus/electron/plus3.cpp
index 532594eb5cf..5996e357389 100644
--- a/src/devices/bus/electron/plus3.cpp
+++ b/src/devices/bus/electron/plus3.cpp
@@ -65,15 +65,20 @@ ROM_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(electron_plus3_device::device_add_mconfig)
+void electron_plus3_device::device_add_mconfig(machine_config &config)
+{
/* fdc */
- WD1770(config, m_fdc, 16_MHz_XTAL / 2);
- FLOPPY_CONNECTOR(config, m_floppy0, electron_floppies, "35dd", floppy_formats, true).enable_sound(true);
- FLOPPY_CONNECTOR(config, m_floppy1, electron_floppies, nullptr, floppy_formats).enable_sound(true);
+ WD1770(config, m_fdc, DERIVED_CLOCK(1, 2));
+ FLOPPY_CONNECTOR(config, m_floppy0, electron_floppies, "35dd", floppy_formats).set_fixed(true);
+ m_floppy0->enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy1, electron_floppies, nullptr, floppy_formats);
+ m_floppy1->enable_sound(true);
/* pass-through */
- MCFG_ELECTRON_PASSTHRU_EXPANSION_SLOT_ADD(nullptr)
-MACHINE_CONFIG_END
+ ELECTRON_EXPANSION_SLOT(config, m_exp, DERIVED_CLOCK(1, 1), electron_expansion_devices, nullptr);
+ m_exp->irq_handler().set(DEVICE_SELF_OWNER, FUNC(electron_expansion_slot_device::irq_w));
+ m_exp->nmi_handler().set(DEVICE_SELF_OWNER, FUNC(electron_expansion_slot_device::nmi_w));
+}
const tiny_rom_entry *electron_plus3_device::device_rom_region() const
{
@@ -112,8 +117,10 @@ void electron_plus3_device::device_start()
// expbus_r - expansion data read
//-------------------------------------------------
-uint8_t electron_plus3_device::expbus_r(address_space &space, offs_t offset, uint8_t data)
+uint8_t electron_plus3_device::expbus_r(offs_t offset)
{
+ uint8_t data = 0xff;
+
if (offset >= 0x8000 && offset < 0xc000)
{
if (m_romsel == 4)
@@ -130,7 +137,7 @@ uint8_t electron_plus3_device::expbus_r(address_space &space, offs_t offset, uin
data = m_fdc->read(offset & 0x03);
}
- data &= m_exp->expbus_r(space, offset, data);
+ data &= m_exp->expbus_r(offset);
return data;
}
@@ -139,13 +146,13 @@ uint8_t electron_plus3_device::expbus_r(address_space &space, offs_t offset, uin
// expbus_w - expansion data write
//-------------------------------------------------
-void electron_plus3_device::expbus_w(address_space &space, offs_t offset, uint8_t data)
+void electron_plus3_device::expbus_w(offs_t offset, uint8_t data)
{
- m_exp->expbus_w(space, offset, data);
+ m_exp->expbus_w(offset, data);
if (offset == 0xfcc0)
{
- wd1770_status_w(space, offset, data);
+ wd1770_status_w(data);
}
else if (offset >= 0xfcc4 && offset < 0xfcc8)
{
@@ -162,7 +169,7 @@ void electron_plus3_device::expbus_w(address_space &space, offs_t offset, uint8_
// IMPLEMENTATION
//**************************************************************************
-WRITE8_MEMBER(electron_plus3_device::wd1770_status_w)
+void electron_plus3_device::wd1770_status_w(uint8_t data)
{
floppy_image_device *floppy = nullptr;
diff --git a/src/devices/bus/electron/plus3.h b/src/devices/bus/electron/plus3.h
index c6a53805783..44de595a3db 100644
--- a/src/devices/bus/electron/plus3.h
+++ b/src/devices/bus/electron/plus3.h
@@ -34,11 +34,11 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
- virtual uint8_t expbus_r(address_space &space, offs_t offset, uint8_t data) override;
- virtual void expbus_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t expbus_r(offs_t offset) override;
+ virtual void expbus_w(offs_t offset, uint8_t data) override;
private:
- DECLARE_WRITE8_MEMBER(wd1770_status_w);
+ void wd1770_status_w(uint8_t data);
DECLARE_FLOPPY_FORMATS(floppy_formats);
required_device<electron_expansion_slot_device> m_exp;
diff --git a/src/devices/bus/electron/pwrjoy.cpp b/src/devices/bus/electron/pwrjoy.cpp
index 2791f700372..1ff7ab79566 100644
--- a/src/devices/bus/electron/pwrjoy.cpp
+++ b/src/devices/bus/electron/pwrjoy.cpp
@@ -78,8 +78,10 @@ void electron_pwrjoy_device::device_start()
// expbus_r - expansion data read
//-------------------------------------------------
-uint8_t electron_pwrjoy_device::expbus_r(address_space &space, offs_t offset, uint8_t data)
+uint8_t electron_pwrjoy_device::expbus_r(offs_t offset)
{
+ uint8_t data = 0xff;
+
if (offset >= 0x8000 && offset < 0xc000)
{
if (m_romsel == 15)
@@ -100,7 +102,7 @@ uint8_t electron_pwrjoy_device::expbus_r(address_space &space, offs_t offset, ui
// expbus_w - expansion data write
//-------------------------------------------------
-void electron_pwrjoy_device::expbus_w(address_space &space, offs_t offset, uint8_t data)
+void electron_pwrjoy_device::expbus_w(offs_t offset, uint8_t data)
{
if (offset == 0xfe05)
{
diff --git a/src/devices/bus/electron/pwrjoy.h b/src/devices/bus/electron/pwrjoy.h
index be392a1c622..abc91cf3e2b 100644
--- a/src/devices/bus/electron/pwrjoy.h
+++ b/src/devices/bus/electron/pwrjoy.h
@@ -32,8 +32,8 @@ public:
virtual const tiny_rom_entry *device_rom_region() const override;
virtual ioport_constructor device_input_ports() const override;
- virtual uint8_t expbus_r(address_space &space, offs_t offset, uint8_t data) override;
- virtual void expbus_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t expbus_r(offs_t offset) override;
+ virtual void expbus_w(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
diff --git a/src/devices/bus/electron/rombox.cpp b/src/devices/bus/electron/rombox.cpp
index 2ae1967c743..35f94b08d13 100644
--- a/src/devices/bus/electron/rombox.cpp
+++ b/src/devices/bus/electron/rombox.cpp
@@ -51,36 +51,31 @@ ioport_constructor electron_rombox_device::device_input_ports() const
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(electron_rombox_device::device_add_mconfig)
+void electron_rombox_device::device_add_mconfig(machine_config &config)
+{
/* rom sockets */
- MCFG_GENERIC_SOCKET_ADD("rom1", generic_plain_slot, "electron_rom")
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_LOAD(electron_rombox_device, rom1_load)
- MCFG_GENERIC_SOCKET_ADD("rom2", generic_plain_slot, "electron_rom")
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_LOAD(electron_rombox_device, rom2_load)
- MCFG_GENERIC_SOCKET_ADD("rom3", generic_plain_slot, "electron_rom")
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_LOAD(electron_rombox_device, rom3_load)
- MCFG_GENERIC_SOCKET_ADD("rom4", generic_plain_slot, "electron_rom")
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_LOAD(electron_rombox_device, rom4_load)
- MCFG_GENERIC_SOCKET_ADD("rom5", generic_plain_slot, "electron_rom")
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_LOAD(electron_rombox_device, rom5_load)
- MCFG_GENERIC_SOCKET_ADD("rom6", generic_plain_slot, "electron_rom")
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_LOAD(electron_rombox_device, rom6_load)
- MCFG_GENERIC_SOCKET_ADD("rom7", generic_plain_slot, "electron_rom")
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_LOAD(electron_rombox_device, rom7_load)
- MCFG_GENERIC_SOCKET_ADD("rom8", generic_plain_slot, "electron_rom")
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_LOAD(electron_rombox_device, rom8_load)
+ GENERIC_SOCKET(config, m_rom[0], generic_plain_slot, "electron_rom", "bin,rom");
+ m_rom[0]->set_device_load(device_image_load_delegate(&electron_rombox_device::device_image_load_rom1_load, this));
+ GENERIC_SOCKET(config, m_rom[1], generic_plain_slot, "electron_rom", "bin,rom");
+ m_rom[1]->set_device_load(device_image_load_delegate(&electron_rombox_device::device_image_load_rom2_load, this));
+ GENERIC_SOCKET(config, m_rom[2], generic_plain_slot, "electron_rom", "bin,rom");
+ m_rom[2]->set_device_load(device_image_load_delegate(&electron_rombox_device::device_image_load_rom3_load, this));
+ GENERIC_SOCKET(config, m_rom[3], generic_plain_slot, "electron_rom", "bin,rom");
+ m_rom[3]->set_device_load(device_image_load_delegate(&electron_rombox_device::device_image_load_rom4_load, this));
+ GENERIC_SOCKET(config, m_rom[4], generic_plain_slot, "electron_rom", "bin,rom");
+ m_rom[4]->set_device_load(device_image_load_delegate(&electron_rombox_device::device_image_load_rom5_load, this));
+ GENERIC_SOCKET(config, m_rom[5], generic_plain_slot, "electron_rom", "bin,rom");
+ m_rom[5]->set_device_load(device_image_load_delegate(&electron_rombox_device::device_image_load_rom6_load, this));
+ GENERIC_SOCKET(config, m_rom[6], generic_plain_slot, "electron_rom", "bin,rom");
+ m_rom[6]->set_device_load(device_image_load_delegate(&electron_rombox_device::device_image_load_rom7_load, this));
+ GENERIC_SOCKET(config, m_rom[7], generic_plain_slot, "electron_rom", "bin,rom");
+ m_rom[7]->set_device_load(device_image_load_delegate(&electron_rombox_device::device_image_load_rom8_load, this));
/* pass-through */
- MCFG_ELECTRON_PASSTHRU_EXPANSION_SLOT_ADD(nullptr)
-MACHINE_CONFIG_END
+ ELECTRON_EXPANSION_SLOT(config, m_exp, DERIVED_CLOCK(1, 1), electron_expansion_devices, nullptr);
+ m_exp->irq_handler().set(DEVICE_SELF_OWNER, FUNC(electron_expansion_slot_device::irq_w));
+ m_exp->nmi_handler().set(DEVICE_SELF_OWNER, FUNC(electron_expansion_slot_device::nmi_w));
+}
//**************************************************************************
// LIVE DEVICE
@@ -122,8 +117,10 @@ void electron_rombox_device::device_reset()
// expbus_r - expansion data read
//-------------------------------------------------
-uint8_t electron_rombox_device::expbus_r(address_space &space, offs_t offset, uint8_t data)
+uint8_t electron_rombox_device::expbus_r(offs_t offset)
{
+ uint8_t data = 0xff;
+
if (offset >= 0x8000 && offset < 0xc000)
{
switch (m_romsel)
@@ -134,7 +131,7 @@ uint8_t electron_rombox_device::expbus_r(address_space &space, offs_t offset, ui
case 3:
if (m_rom_base == 0 && m_rom[m_romsel + 4]->exists())
{
- data = m_rom[m_romsel + 4]->read_rom(space, offset & 0x3fff);
+ data = m_rom[m_romsel + 4]->read_rom(offset & 0x3fff);
}
break;
case 4:
@@ -143,7 +140,7 @@ uint8_t electron_rombox_device::expbus_r(address_space &space, offs_t offset, ui
case 7:
if (m_rom[m_romsel - 4]->exists())
{
- data = m_rom[m_romsel - 4]->read_rom(space, offset & 0x3fff);
+ data = m_rom[m_romsel - 4]->read_rom(offset & 0x3fff);
}
break;
case 12:
@@ -152,13 +149,13 @@ uint8_t electron_rombox_device::expbus_r(address_space &space, offs_t offset, ui
case 15:
if (m_rom_base == 12 && m_rom[m_romsel - 8]->exists())
{
- data = m_rom[m_romsel - 8]->read_rom(space, offset & 0x3fff);
+ data = m_rom[m_romsel - 8]->read_rom(offset & 0x3fff);
}
break;
}
}
- data &= m_exp->expbus_r(space, offset, data);
+ data &= m_exp->expbus_r(offset);
return data;
}
@@ -167,9 +164,9 @@ uint8_t electron_rombox_device::expbus_r(address_space &space, offs_t offset, ui
// expbus_w - expansion data write
//-------------------------------------------------
-void electron_rombox_device::expbus_w(address_space &space, offs_t offset, uint8_t data)
+void electron_rombox_device::expbus_w(offs_t offset, uint8_t data)
{
- m_exp->expbus_w(space, offset, data);
+ m_exp->expbus_w(offset, data);
if (offset == 0xfe05)
{
diff --git a/src/devices/bus/electron/rombox.h b/src/devices/bus/electron/rombox.h
index 045db388838..65ed2fa80d8 100644
--- a/src/devices/bus/electron/rombox.h
+++ b/src/devices/bus/electron/rombox.h
@@ -35,8 +35,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual ioport_constructor device_input_ports() const override;
- virtual uint8_t expbus_r(address_space &space, offs_t offset, uint8_t data) override;
- virtual void expbus_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t expbus_r(offs_t offset) override;
+ virtual void expbus_w(offs_t offset, uint8_t data) override;
private:
image_init_result load_rom(device_image_interface &image, generic_slot_device *slot);
diff --git a/src/devices/bus/electron/romboxp.cpp b/src/devices/bus/electron/romboxp.cpp
index d3ca80d43f4..7917ae3d539 100644
--- a/src/devices/bus/electron/romboxp.cpp
+++ b/src/devices/bus/electron/romboxp.cpp
@@ -84,34 +84,32 @@ ioport_constructor electron_romboxp_device::device_input_ports() const
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(electron_romboxp_device::device_add_mconfig)
+void electron_romboxp_device::device_add_mconfig(machine_config &config)
+{
/* printer */
- MCFG_DEVICE_ADD(m_centronics, CENTRONICS, centronics_devices, "printer")
- MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(*this, electron_romboxp_device, busy_w))
- MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
+ CENTRONICS(config, m_centronics, centronics_devices, "printer");
+ m_centronics->busy_handler().set(FUNC(electron_romboxp_device::busy_w));
+ output_latch_device &latch(OUTPUT_LATCH(config, "cent_data_out"));
+ m_centronics->set_output_latch(latch);
/* rom sockets */
- MCFG_GENERIC_SOCKET_ADD("rom1", generic_plain_slot, "electron_rom") // ROM SLOT 4/12
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_LOAD(electron_romboxp_device, rom1_load)
- MCFG_GENERIC_SOCKET_ADD("rom2", generic_plain_slot, "electron_rom") // ROM SLOT 5/13
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_LOAD(electron_romboxp_device, rom2_load)
- MCFG_GENERIC_SOCKET_ADD("rom3", generic_plain_slot, "electron_rom") // ROM SLOT 6/14 also ROM/RAM
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_LOAD(electron_romboxp_device, rom3_load)
- MCFG_GENERIC_SOCKET_ADD("rom4", generic_plain_slot, "electron_rom") // ROM SLOT 7/15
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_LOAD(electron_romboxp_device, rom4_load)
+ GENERIC_SOCKET(config, m_rom[0], generic_plain_slot, "electron_rom", "bin,rom"); // ROM SLOT 4/12
+ m_rom[0]->set_device_load(device_image_load_delegate(&electron_romboxp_device::device_image_load_rom1_load, this));
+ GENERIC_SOCKET(config, m_rom[1], generic_plain_slot, "electron_rom", "bin,rom"); // ROM SLOT 5/13
+ m_rom[1]->set_device_load(device_image_load_delegate(&electron_romboxp_device::device_image_load_rom2_load, this));
+ GENERIC_SOCKET(config, m_rom[2], generic_plain_slot, "electron_rom", "bin,rom"); // ROM SLOT 6/14 also ROM/RAM
+ m_rom[2]->set_device_load(device_image_load_delegate(&electron_romboxp_device::device_image_load_rom3_load, this));
+ GENERIC_SOCKET(config, m_rom[3], generic_plain_slot, "electron_rom", "bin,rom"); // ROM SLOT 7/15
+ m_rom[3]->set_device_load(device_image_load_delegate(&electron_romboxp_device::device_image_load_rom4_load, this));
/* cartridges */
- MCFG_ELECTRON_CARTSLOT_ADD("cart1", electron_cart, nullptr) // ROM SLOT 0/1
- MCFG_ELECTRON_CARTSLOT_IRQ_HANDLER(WRITELINE(*this, electron_romboxp_device, irq_w))
- MCFG_ELECTRON_CARTSLOT_NMI_HANDLER(WRITELINE(*this, electron_romboxp_device, nmi_w))
- MCFG_ELECTRON_CARTSLOT_ADD("cart2", electron_cart, nullptr) // ROM SLOT 2/3
- MCFG_ELECTRON_CARTSLOT_IRQ_HANDLER(WRITELINE(*this, electron_romboxp_device, irq_w))
- MCFG_ELECTRON_CARTSLOT_NMI_HANDLER(WRITELINE(*this, electron_romboxp_device, nmi_w))
-MACHINE_CONFIG_END
+ ELECTRON_CARTSLOT(config, m_cart[0], DERIVED_CLOCK(1, 1), electron_cart, nullptr); // ROM SLOT 0/1
+ m_cart[0]->irq_handler().set(DEVICE_SELF_OWNER, FUNC(electron_expansion_slot_device::irq_w));
+ m_cart[0]->nmi_handler().set(DEVICE_SELF_OWNER, FUNC(electron_expansion_slot_device::nmi_w));
+ ELECTRON_CARTSLOT(config, m_cart[1], DERIVED_CLOCK(1, 1), electron_cart, nullptr); // ROM SLOT 2/3
+ m_cart[1]->irq_handler().set(DEVICE_SELF_OWNER, FUNC(electron_expansion_slot_device::irq_w));
+ m_cart[1]->nmi_handler().set(DEVICE_SELF_OWNER, FUNC(electron_expansion_slot_device::nmi_w));
+}
const tiny_rom_entry *electron_romboxp_device::device_rom_region() const
{
@@ -147,7 +145,6 @@ electron_romboxp_device::electron_romboxp_device(const machine_config &mconfig,
void electron_romboxp_device::device_start()
{
- m_slot = dynamic_cast<electron_expansion_slot_device *>(owner());
}
//-------------------------------------------------
@@ -163,8 +160,10 @@ void electron_romboxp_device::device_reset()
// expbus_r - expansion data read
//-------------------------------------------------
-uint8_t electron_romboxp_device::expbus_r(address_space &space, offs_t offset, uint8_t data)
+uint8_t electron_romboxp_device::expbus_r(offs_t offset)
{
+ uint8_t data = 0xff;
+
switch (offset >> 12)
{
case 0x8:
@@ -175,11 +174,11 @@ uint8_t electron_romboxp_device::expbus_r(address_space &space, offs_t offset, u
{
case 0:
case 1:
- data = m_cart[1]->read(space, offset & 0x3fff, 0, 0, m_romsel & 0x01);
+ data = m_cart[1]->read(offset & 0x3fff, 0, 0, m_romsel & 0x01, 1, 0);
break;
case 2:
case 3:
- data = m_cart[0]->read(space, offset & 0x3fff, 0, 0, m_romsel & 0x01);
+ data = m_cart[0]->read(offset & 0x3fff, 0, 0, m_romsel & 0x01, 1, 0);
break;
case 4:
case 5:
@@ -187,18 +186,20 @@ uint8_t electron_romboxp_device::expbus_r(address_space &space, offs_t offset, u
case 7:
if (m_rom_base == 4)
{
- data = m_rom[m_romsel - 4]->read_rom(space, offset & 0x3fff);
+ data = m_rom[m_romsel - 4]->read_rom(offset & 0x3fff);
}
break;
case 12:
data = m_exp_rom->base()[offset & 0x1fff];
break;
case 13:
+ data &= m_cart[0]->read(offset & 0x3fff, 0, 0, m_romsel & 0x01, 0, 1);
+ data &= m_cart[1]->read(offset & 0x3fff, 0, 0, m_romsel & 0x01, 0, 1);
case 14:
case 15:
if (m_rom_base == 12)
{
- data = m_rom[m_romsel - 12]->read_rom(space, offset & 0x3fff);
+ data = m_rom[m_romsel - 12]->read_rom(offset & 0x3fff);
}
break;
}
@@ -208,18 +209,18 @@ uint8_t electron_romboxp_device::expbus_r(address_space &space, offs_t offset, u
switch (offset >> 8)
{
case 0xfc:
- data &= m_cart[0]->read(space, offset & 0xff, 1, 0, m_romsel & 0x01);
- data &= m_cart[1]->read(space, offset & 0xff, 1, 0, m_romsel & 0x01);
+ data &= m_cart[0]->read(offset & 0xff, 1, 0, m_romsel & 0x01, 0, 0);
+ data &= m_cart[1]->read(offset & 0xff, 1, 0, m_romsel & 0x01, 0, 0);
if (offset == 0xfc72)
{
- data &= status_r(space, offset);
+ data &= status_r();
}
break;
case 0xfd:
- data &= m_cart[0]->read(space, offset & 0xff, 0, 1, m_romsel & 0x01);
- data &= m_cart[1]->read(space, offset & 0xff, 0, 1, m_romsel & 0x01);
+ data &= m_cart[0]->read(offset & 0xff, 0, 1, m_romsel & 0x01, 0, 0);
+ data &= m_cart[1]->read(offset & 0xff, 0, 1, m_romsel & 0x01, 0, 0);
break;
}
}
@@ -231,7 +232,7 @@ uint8_t electron_romboxp_device::expbus_r(address_space &space, offs_t offset, u
// expbus_w - expansion data write
//-------------------------------------------------
-void electron_romboxp_device::expbus_w(address_space &space, offs_t offset, uint8_t data)
+void electron_romboxp_device::expbus_w(offs_t offset, uint8_t data)
{
switch (offset >> 12)
{
@@ -243,11 +244,11 @@ void electron_romboxp_device::expbus_w(address_space &space, offs_t offset, uint
{
case 0:
case 1:
- m_cart[1]->write(space, offset & 0x3fff, data, 0, 0, m_romsel & 0x01);
+ m_cart[1]->write(offset & 0x3fff, data, 0, 0, m_romsel & 0x01, 1, 0);
break;
case 2:
case 3:
- m_cart[0]->write(space, offset & 0x3fff, data, 0, 0, m_romsel & 0x01);
+ m_cart[0]->write(offset & 0x3fff, data, 0, 0, m_romsel & 0x01, 1, 0);
break;
}
break;
@@ -256,8 +257,8 @@ void electron_romboxp_device::expbus_w(address_space &space, offs_t offset, uint
switch (offset >> 8)
{
case 0xfc:
- m_cart[0]->write(space, offset & 0xff, data, 1, 0, m_romsel & 0x01);
- m_cart[1]->write(space, offset & 0xff, data, 1, 0, m_romsel & 0x01);
+ m_cart[0]->write(offset & 0xff, data, 1, 0, m_romsel & 0x01, 0, 0);
+ m_cart[1]->write(offset & 0xff, data, 1, 0, m_romsel & 0x01, 0, 0);
if (offset == 0xfc71)
{
@@ -266,8 +267,8 @@ void electron_romboxp_device::expbus_w(address_space &space, offs_t offset, uint
break;
case 0xfd:
- m_cart[0]->write(space, offset & 0xff, data, 0, 1, m_romsel & 0x01);
- m_cart[1]->write(space, offset & 0xff, data, 0, 1, m_romsel & 0x01);
+ m_cart[0]->write(offset & 0xff, data, 0, 1, m_romsel & 0x01, 0, 0);
+ m_cart[1]->write(offset & 0xff, data, 0, 1, m_romsel & 0x01, 0, 0);
break;
case 0xfe:
@@ -284,7 +285,7 @@ void electron_romboxp_device::expbus_w(address_space &space, offs_t offset, uint
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(electron_romboxp_device::status_r)
+uint8_t electron_romboxp_device::status_r()
{
// Status: b7: printer Busy
return (m_centronics_busy << 7) | 0x7f;
@@ -317,13 +318,3 @@ image_init_result electron_romboxp_device::load_rom(device_image_interface &imag
return image_init_result::PASS;
}
-
-WRITE_LINE_MEMBER(electron_romboxp_device::irq_w)
-{
- m_slot->irq_w(state);
-}
-
-WRITE_LINE_MEMBER(electron_romboxp_device::nmi_w)
-{
- m_slot->nmi_w(state);
-}
diff --git a/src/devices/bus/electron/romboxp.h b/src/devices/bus/electron/romboxp.h
index e350954eb18..f5905bc47bf 100644
--- a/src/devices/bus/electron/romboxp.h
+++ b/src/devices/bus/electron/romboxp.h
@@ -40,14 +40,12 @@ protected:
virtual const tiny_rom_entry *device_rom_region() const override;
virtual ioport_constructor device_input_ports() const override;
- virtual uint8_t expbus_r(address_space &space, offs_t offset, uint8_t data) override;
- virtual void expbus_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t expbus_r(offs_t offset) override;
+ virtual void expbus_w(offs_t offset, uint8_t data) override;
private:
- DECLARE_READ8_MEMBER(status_r);
+ uint8_t status_r();
DECLARE_WRITE_LINE_MEMBER(busy_w);
- DECLARE_WRITE_LINE_MEMBER(irq_w);
- DECLARE_WRITE_LINE_MEMBER(nmi_w);
image_init_result load_rom(device_image_interface &image, generic_slot_device *slot);
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(rom1_load) { return load_rom(image, m_rom[0]); }
diff --git a/src/devices/bus/ep64/exp.cpp b/src/devices/bus/ep64/exp.cpp
index 32ef220519d..c241fb68c08 100644
--- a/src/devices/bus/ep64/exp.cpp
+++ b/src/devices/bus/ep64/exp.cpp
@@ -49,7 +49,8 @@ ep64_expansion_bus_slot_device::ep64_expansion_bus_slot_device(const machine_con
, m_write_irq(*this)
, m_write_nmi(*this)
, m_write_wait(*this)
- , m_dave(*this, finder_base::DUMMY_TAG)
+ , m_program_space(*this, finder_base::DUMMY_TAG, -1)
+ , m_io_space(*this, finder_base::DUMMY_TAG, -1)
, m_card(nullptr)
{
}
diff --git a/src/devices/bus/ep64/exp.h b/src/devices/bus/ep64/exp.h
index cb29bab5049..88d3b4e61b9 100644
--- a/src/devices/bus/ep64/exp.h
+++ b/src/devices/bus/ep64/exp.h
@@ -47,40 +47,10 @@
#pragma once
-#include "sound/dave.h"
-
void ep64_expansion_bus_cards(device_slot_interface &device);
//**************************************************************************
-// MACROS / CONSTANTS
-//**************************************************************************
-
-#define EP64_EXPANSION_BUS_TAG "exp"
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_EP64_EXPANSION_BUS_SLOT_ADD(_tag, _def_slot) \
- MCFG_DEVICE_ADD(_tag, EP64_EXPANSION_BUS_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(ep64_expansion_bus_cards, _def_slot, false)
-
-#define MCFG_EP64_EXPANSION_BUS_SLOT_DAVE(_tag) \
- downcast<ep64_expansion_bus_slot_device &>(*device).set_dave_tag(_tag);
-
-#define MCFG_EP64_EXPANSION_BUS_SLOT_IRQ_CALLBACK(_write) \
- downcast<ep64_expansion_bus_slot_device &>(*device).set_irq_wr_callback(DEVCB_##_write);
-
-#define MCFG_EP64_EXPANSION_BUS_SLOT_NMI_CALLBACK(_write) \
- downcast<ep64_expansion_bus_slot_device &>(*device).set_nmi_wr_callback(DEVCB_##_write);
-
-#define MCFG_EP64_EXPANSION_BUS_SLOT_WAIT_CALLBACK(_write) \
- downcast<ep64_expansion_bus_slot_device &>(*device).set_wait_wr_callback(DEVCB_##_write);
-
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -105,7 +75,8 @@ public:
}
ep64_expansion_bus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- template <typename T> void set_dave_tag(T &&dave_tag) { m_dave.set_tag(std::forward<T>(dave_tag)); }
+ template <typename T> void set_program_space(T &&tag, int spacenum) { m_program_space.set_tag(std::forward<T>(tag), spacenum); }
+ template <typename T> void set_io_space(T &&tag, int spacenum) { m_io_space.set_tag(std::forward<T>(tag), spacenum); }
auto irq_wr() { return m_write_irq.bind(); }
auto nmi_wr() { return m_write_nmi.bind(); }
auto wait_wr() { return m_write_wait.bind(); }
@@ -114,8 +85,8 @@ public:
DECLARE_WRITE_LINE_MEMBER( nmi_w ) { m_write_nmi(state); }
DECLARE_WRITE_LINE_MEMBER( wait_w ) { m_write_wait(state); }
- address_space& program() { return m_dave->space(AS_PROGRAM); }
- address_space& io() { return m_dave->space(AS_IO); }
+ address_space &program() { return *m_program_space; }
+ address_space &io() { return *m_io_space; }
protected:
// device-level overrides
@@ -128,7 +99,8 @@ private:
devcb_write_line m_write_nmi;
devcb_write_line m_write_wait;
- required_device<dave_device> m_dave;
+ required_address_space m_program_space;
+ required_address_space m_io_space;
device_ep64_expansion_bus_card_interface *m_card;
};
diff --git a/src/devices/bus/epson_sio/epson_sio.h b/src/devices/bus/epson_sio/epson_sio.h
index 189e36c5bdf..5d93c42ba74 100644
--- a/src/devices/bus/epson_sio/epson_sio.h
+++ b/src/devices/bus/epson_sio/epson_sio.h
@@ -12,40 +12,35 @@
#pragma once
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_EPSON_SIO_ADD(_tag, _def_slot) \
- MCFG_DEVICE_ADD(_tag, EPSON_SIO, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(epson_sio_devices, _def_slot, false)
-
-#define MCFG_EPSON_SIO_RX(_rx) \
- downcast<epson_sio_device *>(device)->set_rx_callback(DEVCB_##_rx);
-
-#define MCFG_EPSON_SIO_PIN(_pin) \
- downcast<epson_sio_device *>(device)->set_pin_callback(DEVCB_##_pin);
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
class device_epson_sio_interface;
+// supported devices
+void epson_sio_devices(device_slot_interface &device);
class epson_sio_device : public device_t,
public device_slot_interface
{
public:
// construction/destruction
- epson_sio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ epson_sio_device(machine_config const &mconfig, char const *tag, device_t *owner, char const *dflt)
+ : epson_sio_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ option_reset();
+ epson_sio_devices(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ epson_sio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
virtual ~epson_sio_device();
// callbacks
- template <class Object> devcb_base &set_rx_callback(Object &&rx) { return m_write_rx.set_callback(std::forward<Object>(rx)); }
- template <class Object> devcb_base &set_pin_callback(Object &&pin) { return m_write_pin.set_callback(std::forward<Object>(pin)); }
+ auto rx_callback() { return m_write_rx.bind(); }
+ auto pin_callback() { return m_write_pin.bind(); }
// called from owner
DECLARE_WRITE_LINE_MEMBER( tx_w );
@@ -88,9 +83,4 @@ protected:
// device type definition
DECLARE_DEVICE_TYPE(EPSON_SIO, epson_sio_device)
-
-// supported devices
-void epson_sio_devices(device_slot_interface &device);
-
-
#endif // MAME_BUS_EPSON_SIO_EPSON_SIO_H
diff --git a/src/devices/bus/epson_sio/pf10.cpp b/src/devices/bus/epson_sio/pf10.cpp
index 462de5ecaa3..f986bb5d4c2 100644
--- a/src/devices/bus/epson_sio/pf10.cpp
+++ b/src/devices/bus/epson_sio/pf10.cpp
@@ -12,7 +12,6 @@
#include "emu.h"
#include "pf10.h"
-#include "imagedev/floppy.h"
//**************************************************************************
@@ -61,7 +60,8 @@ static void pf10_floppies(device_slot_interface &device)
device.option_add("smd165", EPSON_SMD_165);
}
-MACHINE_CONFIG_START(epson_pf10_device::device_add_mconfig)
+void epson_pf10_device::device_add_mconfig(machine_config &config)
+{
HD6303Y(config, m_cpu, XTAL(4'915'200)); // HD63A03XF
m_cpu->set_addrmap(AS_PROGRAM, &epson_pf10_device::cpu_mem);
m_cpu->in_p1_cb().set(FUNC(epson_pf10_device::port1_r));
@@ -71,12 +71,12 @@ MACHINE_CONFIG_START(epson_pf10_device::device_add_mconfig)
m_cpu->out_ser_tx_cb().set(FUNC(epson_pf10_device::hd6303_tx_w));
UPD765A(config, m_fdc, 4'000'000, false, true);
- MCFG_FLOPPY_DRIVE_ADD("upd765a:0", pf10_floppies, "smd165", floppy_image_device::default_floppy_formats)
+ FLOPPY_CONNECTOR(config, m_floppy, pf10_floppies, "smd165", floppy_image_device::default_floppy_formats);
- MCFG_EPSON_SIO_ADD("sio", nullptr)
- MCFG_EPSON_SIO_RX(WRITELINE(DEVICE_SELF, epson_pf10_device, rxc_w))
- MCFG_EPSON_SIO_PIN(WRITELINE(DEVICE_SELF, epson_pf10_device, pinc_w))
-MACHINE_CONFIG_END
+ EPSON_SIO(config, m_sio_output, nullptr);
+ m_sio_output->rx_callback().set(DEVICE_SELF, FUNC(epson_pf10_device::rxc_w));
+ m_sio_output->pin_callback().set(DEVICE_SELF, FUNC(epson_pf10_device::pinc_w));
+}
//**************************************************************************
@@ -92,7 +92,9 @@ epson_pf10_device::epson_pf10_device(const machine_config &mconfig, const char *
device_epson_sio_interface(mconfig, *this),
m_cpu(*this, "maincpu"),
m_fdc(*this, "upd765a"),
- m_sio_output(*this, "sio"), m_floppy(nullptr), m_timer(nullptr),
+ m_sio_output(*this, "sio"),
+ m_floppy(*this, "upd765a:0"),
+ m_timer(nullptr),
m_port1(0xff),
m_port2(0xff),
m_rxc(1), m_hd6303_tx(0), m_pinc(0)
@@ -108,7 +110,6 @@ epson_pf10_device::epson_pf10_device(const machine_config &mconfig, const char *
void epson_pf10_device::device_start()
{
m_timer = timer_alloc(0, nullptr);
- m_floppy = subdevice<floppy_connector>("upd765a:0")->get_device();
}
//-------------------------------------------------
@@ -158,7 +159,8 @@ READ8_MEMBER( epson_pf10_device::port2_r )
WRITE8_MEMBER( epson_pf10_device::port2_w )
{
- m_floppy->mon_w(data & PORT2_MON);
+ if (m_floppy->get_device() != nullptr)
+ m_floppy->get_device()->mon_w(data & PORT2_MON);
logerror("%s: port2_w(%02x)\n", tag(), data);
}
diff --git a/src/devices/bus/epson_sio/pf10.h b/src/devices/bus/epson_sio/pf10.h
index b75f596b615..7f305bed8c9 100644
--- a/src/devices/bus/epson_sio/pf10.h
+++ b/src/devices/bus/epson_sio/pf10.h
@@ -15,6 +15,7 @@
#include "epson_sio.h"
#include "cpu/m6800/m6801.h"
+#include "imagedev/floppy.h"
#include "machine/upd765.h"
@@ -67,9 +68,9 @@ private:
required_device<hd6303y_cpu_device> m_cpu;
required_device<upd765a_device> m_fdc;
required_device<epson_sio_device> m_sio_output;
+ required_device<floppy_connector> m_floppy;
epson_sio_device *m_sio_input;
- floppy_image_device *m_floppy;
emu_timer *m_timer;
diff --git a/src/devices/bus/epson_sio/tf20.cpp b/src/devices/bus/epson_sio/tf20.cpp
index 22959af2730..1fb12a66c0e 100644
--- a/src/devices/bus/epson_sio/tf20.cpp
+++ b/src/devices/bus/epson_sio/tf20.cpp
@@ -14,7 +14,6 @@
#include "emu.h"
#include "tf20.h"
-#include "imagedev/floppy.h"
#define XTAL_CR1 XTAL(8'000'000)
#define XTAL_CR2 XTAL(4'915'200)
@@ -87,11 +86,12 @@ static void tf20_floppies(device_slot_interface &device)
device.option_add("sd320", EPSON_SD_320);
}
-MACHINE_CONFIG_START(epson_tf20_device::device_add_mconfig)
- MCFG_DEVICE_ADD("19b", Z80, XTAL_CR1 / 2) /* uPD780C */
- MCFG_DEVICE_PROGRAM_MAP(cpu_mem)
- MCFG_DEVICE_IO_MAP(cpu_io)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE(DEVICE_SELF, epson_tf20_device, irq_callback)
+void epson_tf20_device::device_add_mconfig(machine_config &config)
+{
+ Z80(config, m_cpu, XTAL_CR1 / 2); /* uPD780C */
+ m_cpu->set_addrmap(AS_PROGRAM, &epson_tf20_device::cpu_mem);
+ m_cpu->set_addrmap(AS_IO, &epson_tf20_device::cpu_io);
+ m_cpu->set_irq_acknowledge_callback(FUNC(epson_tf20_device::irq_callback));
// 64k internal ram
RAM(config, "ram").set_default_size("64K");
@@ -106,14 +106,14 @@ MACHINE_CONFIG_START(epson_tf20_device::device_add_mconfig)
m_fdc->intrq_wr_callback().set_inputline(m_cpu, INPUT_LINE_IRQ0);
// floppy drives
- MCFG_FLOPPY_DRIVE_ADD("5a:0", tf20_floppies, "sd320", floppy_image_device::default_floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD("5a:1", tf20_floppies, "sd320", floppy_image_device::default_floppy_formats)
+ for (auto &fd : m_fd)
+ FLOPPY_CONNECTOR(config, fd, tf20_floppies, "sd320", floppy_image_device::default_floppy_formats);
// serial interface to another device
- MCFG_EPSON_SIO_ADD("sio", nullptr)
- MCFG_EPSON_SIO_RX(WRITELINE(DEVICE_SELF, epson_tf20_device, rxc_w))
- MCFG_EPSON_SIO_PIN(WRITELINE(DEVICE_SELF, epson_tf20_device, pinc_w))
-MACHINE_CONFIG_END
+ EPSON_SIO(config, m_sio_output, nullptr);
+ m_sio_output->rx_callback().set(DEVICE_SELF, FUNC(epson_tf20_device::rxc_w));
+ m_sio_output->pin_callback().set(DEVICE_SELF, FUNC(epson_tf20_device::pinc_w));
+}
//**************************************************************************
@@ -131,7 +131,9 @@ epson_tf20_device::epson_tf20_device(const machine_config &mconfig, const char *
m_ram(*this, "ram"),
m_fdc(*this, "5a"),
m_mpsc(*this, "3a"),
- m_sio_output(*this, "sio"), m_fd0(nullptr), m_fd1(nullptr), m_timer_serial(nullptr), m_timer_tc(nullptr),
+ m_sio_output(*this, "sio"),
+ m_fd(*this, "5a:%u", 0U),
+ m_timer_serial(nullptr), m_timer_tc(nullptr),
m_rxc(1), m_txda(0), m_dtra(0), m_pinc(0)
{
m_sio_input = dynamic_cast<epson_sio_device *>(owner);
@@ -150,9 +152,6 @@ void epson_tf20_device::device_start()
m_timer_serial = timer_alloc(0, nullptr);
m_timer_tc = timer_alloc(1, nullptr);
- m_fd0 = subdevice<floppy_connector>("5a:0")->get_device();
- m_fd1 = subdevice<floppy_connector>("5a:1")->get_device();
-
// enable second half of ram
m_cpu->space(AS_PROGRAM).install_ram(0x8000, 0xffff, m_ram->pointer() + 0x8000);
@@ -248,8 +247,9 @@ WRITE8_MEMBER( epson_tf20_device::fdc_control_w )
logerror("%s: tf20_fdc_control_w(%02x)\n", machine().describe_context(), data);
// bit 0, motor on signal
- m_fd0->mon_w(!BIT(data, 0));
- m_fd1->mon_w(!BIT(data, 0));
+ for (auto &fd : m_fd)
+ if (fd->get_device() != nullptr)
+ fd->get_device()->mon_w(!BIT(data, 0));
}
diff --git a/src/devices/bus/epson_sio/tf20.h b/src/devices/bus/epson_sio/tf20.h
index 0a9023f51d5..236cd2e9059 100644
--- a/src/devices/bus/epson_sio/tf20.h
+++ b/src/devices/bus/epson_sio/tf20.h
@@ -15,6 +15,7 @@
#include "epson_sio.h"
#include "cpu/z80/z80.h"
+#include "imagedev/floppy.h"
#include "machine/ram.h"
#include "machine/upd765.h"
#include "machine/z80dart.h"
@@ -67,9 +68,7 @@ private:
required_device<upd765a_device> m_fdc;
required_device<upd7201_device> m_mpsc;
required_device<epson_sio_device> m_sio_output;
-
- floppy_image_device *m_fd0;
- floppy_image_device *m_fd1;
+ required_device_array<floppy_connector, 2> m_fd;
emu_timer *m_timer_serial;
emu_timer *m_timer_tc;
diff --git a/src/devices/bus/gamate/rom.cpp b/src/devices/bus/gamate/rom.cpp
index cda37716b5f..74af9e76160 100644
--- a/src/devices/bus/gamate/rom.cpp
+++ b/src/devices/bus/gamate/rom.cpp
@@ -168,9 +168,10 @@ WRITE8_MEMBER(gamate_rom_4in1_device::write_rom)
}
}
-MACHINE_CONFIG_START(gamate_rom_plain_device::device_add_mconfig)
- MCFG_DEVICE_ADD("protection", GAMATE_PROT, 0)
-MACHINE_CONFIG_END
+void gamate_rom_plain_device::device_add_mconfig(machine_config &config)
+{
+ GAMATE_PROT(config, m_protection, 0);
+}
/*-------------------------------------------------
diff --git a/src/devices/bus/gamate/slot.h b/src/devices/bus/gamate/slot.h
index 0f48c490478..3606ac32c69 100644
--- a/src/devices/bus/gamate/slot.h
+++ b/src/devices/bus/gamate/slot.h
@@ -51,7 +51,17 @@ class gamate_cart_slot_device : public device_t,
{
public:
// construction/destruction
- gamate_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ gamate_cart_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : gamate_cart_slot_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ gamate_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
virtual ~gamate_cart_slot_device();
// image-level overrides
@@ -95,10 +105,6 @@ DECLARE_DEVICE_TYPE(GAMATE_CART_SLOT, gamate_cart_slot_device)
#define GAMATESLOT_ROM_REGION_TAG ":cart:rom"
-#define MCFG_GAMATE_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_tag, GAMATE_CART_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
void gamate_cart(device_slot_interface &device);
#endif // MAME_BUS_GAMATE_SLOT_H
diff --git a/src/devices/bus/gameboy/gb_slot.cpp b/src/devices/bus/gameboy/gb_slot.cpp
index 7ce626e67c7..a72eedc24d5 100644
--- a/src/devices/bus/gameboy/gb_slot.cpp
+++ b/src/devices/bus/gameboy/gb_slot.cpp
@@ -624,18 +624,18 @@ std::string megaduck_cart_slot_device::get_default_card_software(get_default_car
read
-------------------------------------------------*/
-READ8_MEMBER(gb_cart_slot_device_base::read_rom)
+uint8_t gb_cart_slot_device_base::read_rom(offs_t offset)
{
if (m_cart)
- return m_cart->read_rom(space, offset);
+ return m_cart->read_rom(offset);
else
return 0xff;
}
-READ8_MEMBER(gb_cart_slot_device_base::read_ram)
+uint8_t gb_cart_slot_device_base::read_ram(offs_t offset)
{
if (m_cart)
- return m_cart->read_ram(space, offset);
+ return m_cart->read_ram(offset);
else
return 0xff;
}
@@ -645,16 +645,16 @@ READ8_MEMBER(gb_cart_slot_device_base::read_ram)
write
-------------------------------------------------*/
-WRITE8_MEMBER(gb_cart_slot_device_base::write_bank)
+void gb_cart_slot_device_base::write_bank(offs_t offset, uint8_t data)
{
if (m_cart)
- m_cart->write_bank(space, offset, data);
+ m_cart->write_bank(offset, data);
}
-WRITE8_MEMBER(gb_cart_slot_device_base::write_ram)
+void gb_cart_slot_device_base::write_ram(offs_t offset, uint8_t data)
{
if (m_cart)
- m_cart->write_ram(space, offset, data);
+ m_cart->write_ram(offset, data);
}
diff --git a/src/devices/bus/gameboy/gb_slot.h b/src/devices/bus/gameboy/gb_slot.h
index ef734e6f99e..5f420c60823 100644
--- a/src/devices/bus/gameboy/gb_slot.h
+++ b/src/devices/bus/gameboy/gb_slot.h
@@ -58,10 +58,10 @@ public:
virtual ~device_gb_cart_interface();
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom) { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(write_bank) {}
- virtual DECLARE_READ8_MEMBER(read_ram) { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(write_ram) {}
+ virtual uint8_t read_rom(offs_t offset) { return 0xff; }
+ virtual void write_bank(offs_t offset, uint8_t data) {}
+ virtual uint8_t read_ram(offs_t offset) { return 0xff; }
+ virtual void write_ram(offs_t offset, uint8_t data) {}
void rom_alloc(uint32_t size, const char *tag);
void ram_alloc(uint32_t size);
@@ -145,10 +145,10 @@ public:
virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom);
- virtual DECLARE_WRITE8_MEMBER(write_bank);
- virtual DECLARE_READ8_MEMBER(read_ram);
- virtual DECLARE_WRITE8_MEMBER(write_ram);
+ virtual uint8_t read_rom(offs_t offset);
+ virtual void write_bank(offs_t offset, uint8_t data);
+ virtual uint8_t read_ram(offs_t offset);
+ virtual void write_ram(offs_t offset, uint8_t data);
protected:
diff --git a/src/devices/bus/gameboy/mbc.cpp b/src/devices/bus/gameboy/mbc.cpp
index 286c2d90a1e..bd57a4da23b 100644
--- a/src/devices/bus/gameboy/mbc.cpp
+++ b/src/devices/bus/gameboy/mbc.cpp
@@ -347,12 +347,12 @@ void gb_rom_camera_device::device_reset()
mapper specific handlers
-------------------------------------------------*/
-READ8_MEMBER(gb_rom_mbc_device::read_rom)
+uint8_t gb_rom_mbc_device::read_rom(offs_t offset)
{
return m_rom[rom_bank_map[m_latch_bank] + offset];
}
-READ8_MEMBER(gb_rom_mbc_device::read_ram)
+uint8_t gb_rom_mbc_device::read_ram(offs_t offset)
{
if (!m_ram.empty())
return m_ram[ram_bank_map[m_ram_bank] * 0x2000 + offset];
@@ -360,7 +360,7 @@ READ8_MEMBER(gb_rom_mbc_device::read_ram)
return 0xff;
}
-WRITE8_MEMBER(gb_rom_mbc_device::write_ram)
+void gb_rom_mbc_device::write_ram(offs_t offset, uint8_t data)
{
if (!m_ram.empty())
m_ram[ram_bank_map[m_ram_bank] * 0x2000 + offset] = data;
@@ -369,7 +369,7 @@ WRITE8_MEMBER(gb_rom_mbc_device::write_ram)
// MBC1
-READ8_MEMBER(gb_rom_mbc1_device::read_rom)
+uint8_t gb_rom_mbc1_device::read_rom(offs_t offset)
{
if (offset & 0x4000) /* RB1 */
return m_rom[rom_bank_map[(m_ram_bank << (5 + m_shift)) | m_latch_bank2] * 0x4000 + (offset & 0x3fff)];
@@ -380,7 +380,7 @@ READ8_MEMBER(gb_rom_mbc1_device::read_rom)
}
}
-WRITE8_MEMBER(gb_rom_mbc1_device::write_bank)
+void gb_rom_mbc1_device::write_bank(offs_t offset, uint8_t data)
{
// the mapper only uses inputs A15..A13
switch (offset & 0xe000)
@@ -402,7 +402,7 @@ WRITE8_MEMBER(gb_rom_mbc1_device::write_bank)
}
}
-READ8_MEMBER(gb_rom_mbc1_device::read_ram)
+uint8_t gb_rom_mbc1_device::read_ram(offs_t offset)
{
if (!m_ram.empty() && m_ram_enable)
{
@@ -413,7 +413,7 @@ READ8_MEMBER(gb_rom_mbc1_device::read_ram)
return 0xff;
}
-WRITE8_MEMBER(gb_rom_mbc1_device::write_ram)
+void gb_rom_mbc1_device::write_ram(offs_t offset, uint8_t data)
{
if (!m_ram.empty() && m_ram_enable)
{
@@ -425,7 +425,7 @@ WRITE8_MEMBER(gb_rom_mbc1_device::write_ram)
// MBC2
-READ8_MEMBER(gb_rom_mbc2_device::read_rom)
+uint8_t gb_rom_mbc2_device::read_rom(offs_t offset)
{
if (offset & 0x4000) /* RB1 */
return m_rom[rom_bank_map[m_latch_bank2] * 0x4000 + (offset & 0x3fff)];
@@ -433,7 +433,7 @@ READ8_MEMBER(gb_rom_mbc2_device::read_rom)
return m_rom[rom_bank_map[m_latch_bank] * 0x4000 + (offset & 0x3fff)];
}
-WRITE8_MEMBER(gb_rom_mbc2_device::write_bank)
+void gb_rom_mbc2_device::write_bank(offs_t offset, uint8_t data)
{
// the mapper only has data lines D3..D0
data &= 0x0f;
@@ -450,7 +450,7 @@ WRITE8_MEMBER(gb_rom_mbc2_device::write_bank)
}
}
-READ8_MEMBER(gb_rom_mbc2_device::read_ram)
+uint8_t gb_rom_mbc2_device::read_ram(offs_t offset)
{
if (!m_ram.empty() && m_ram_enable)
return m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x01ff)] | 0xf0;
@@ -458,7 +458,7 @@ READ8_MEMBER(gb_rom_mbc2_device::read_ram)
return 0xff;
}
-WRITE8_MEMBER(gb_rom_mbc2_device::write_ram)
+void gb_rom_mbc2_device::write_ram(offs_t offset, uint8_t data)
{
if (!m_ram.empty() && m_ram_enable)
m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x01ff)] = data & 0x0f;
@@ -479,7 +479,7 @@ void gb_rom_mbc3_device::update_rtc()
m_rtc_regs[4] = (m_rtc_regs[4] & 0xf0) | (curtime.local_time.day >> 8);
}
-READ8_MEMBER(gb_rom_mbc3_device::read_rom)
+uint8_t gb_rom_mbc3_device::read_rom(offs_t offset)
{
if (offset < 0x4000)
return m_rom[rom_bank_map[m_latch_bank] * 0x4000 + (offset & 0x3fff)];
@@ -487,7 +487,7 @@ READ8_MEMBER(gb_rom_mbc3_device::read_rom)
return m_rom[rom_bank_map[m_latch_bank2] * 0x4000 + (offset & 0x3fff)];
}
-WRITE8_MEMBER(gb_rom_mbc3_device::write_bank)
+void gb_rom_mbc3_device::write_bank(offs_t offset, uint8_t data)
{
if (offset < 0x2000)
m_ram_enable = ((data & 0x0f) == 0x0a) ? 1 : 0;
@@ -517,7 +517,7 @@ WRITE8_MEMBER(gb_rom_mbc3_device::write_bank)
}
}
-READ8_MEMBER(gb_rom_mbc3_device::read_ram)
+uint8_t gb_rom_mbc3_device::read_ram(offs_t offset)
{
if (m_ram_bank < 4 && m_ram_enable)
{
@@ -534,7 +534,7 @@ READ8_MEMBER(gb_rom_mbc3_device::read_ram)
return 0xff;
}
-WRITE8_MEMBER(gb_rom_mbc3_device::write_ram)
+void gb_rom_mbc3_device::write_ram(offs_t offset, uint8_t data)
{
if (m_ram_bank < 4 && m_ram_enable)
{
@@ -552,7 +552,7 @@ WRITE8_MEMBER(gb_rom_mbc3_device::write_ram)
// MBC5
-READ8_MEMBER(gb_rom_mbc5_device::read_rom)
+uint8_t gb_rom_mbc5_device::read_rom(offs_t offset)
{
if (offset < 0x4000)
return m_rom[rom_bank_map[m_latch_bank] * 0x4000 + (offset & 0x3fff)];
@@ -560,7 +560,7 @@ READ8_MEMBER(gb_rom_mbc5_device::read_rom)
return m_rom[rom_bank_map[m_latch_bank2] * 0x4000 + (offset & 0x3fff)];
}
-WRITE8_MEMBER(gb_rom_mbc5_device::write_bank)
+void gb_rom_mbc5_device::write_bank(offs_t offset, uint8_t data)
{
if (offset < 0x2000)
m_ram_enable = ((data & 0x0f) == 0x0a) ? 1 : 0;
@@ -588,7 +588,7 @@ WRITE8_MEMBER(gb_rom_mbc5_device::write_bank)
}
}
-READ8_MEMBER(gb_rom_mbc5_device::read_ram)
+uint8_t gb_rom_mbc5_device::read_ram(offs_t offset)
{
if (!m_ram.empty() && m_ram_enable)
return m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)];
@@ -596,7 +596,7 @@ READ8_MEMBER(gb_rom_mbc5_device::read_ram)
return 0xff;
}
-WRITE8_MEMBER(gb_rom_mbc5_device::write_ram)
+void gb_rom_mbc5_device::write_ram(offs_t offset, uint8_t data)
{
if (!m_ram.empty() && m_ram_enable)
m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)] = data;
@@ -604,7 +604,7 @@ WRITE8_MEMBER(gb_rom_mbc5_device::write_ram)
// MBC6
-READ8_MEMBER(gb_rom_mbc6_device::read_rom)
+uint8_t gb_rom_mbc6_device::read_rom(offs_t offset)
{
if (offset < 0x4000)
return m_rom[rom_bank_map[m_latch_bank] * 0x4000 + (offset & 0x3fff)];
@@ -614,7 +614,7 @@ READ8_MEMBER(gb_rom_mbc6_device::read_rom)
return m_rom[rom_bank_map[m_bank_6000 >> 1] * 0x4000 + (m_bank_6000 & 0x01) * 0x2000 + (offset & 0x1fff)];
}
-WRITE8_MEMBER(gb_rom_mbc6_device::write_bank)
+void gb_rom_mbc6_device::write_bank(offs_t offset, uint8_t data)
{
if (offset < 0x2000)
{
@@ -636,7 +636,7 @@ WRITE8_MEMBER(gb_rom_mbc6_device::write_bank)
}
}
-READ8_MEMBER(gb_rom_mbc6_device::read_ram)
+uint8_t gb_rom_mbc6_device::read_ram(offs_t offset)
{
if (!m_ram.empty())
return m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)];
@@ -644,7 +644,7 @@ READ8_MEMBER(gb_rom_mbc6_device::read_ram)
return 0xff;
}
-WRITE8_MEMBER(gb_rom_mbc6_device::write_ram)
+void gb_rom_mbc6_device::write_ram(offs_t offset, uint8_t data)
{
if (!m_ram.empty())
m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)] = data;
@@ -652,7 +652,7 @@ WRITE8_MEMBER(gb_rom_mbc6_device::write_ram)
// MBC7
-READ8_MEMBER(gb_rom_mbc7_device::read_rom)
+uint8_t gb_rom_mbc7_device::read_rom(offs_t offset)
{
if (offset < 0x4000)
return m_rom[rom_bank_map[m_latch_bank] * 0x4000 + (offset & 0x3fff)];
@@ -660,7 +660,7 @@ READ8_MEMBER(gb_rom_mbc7_device::read_rom)
return m_rom[rom_bank_map[m_latch_bank2] * 0x4000 + (offset & 0x3fff)];
}
-WRITE8_MEMBER(gb_rom_mbc7_device::write_bank)
+void gb_rom_mbc7_device::write_bank(offs_t offset, uint8_t data)
{
if (offset < 0x2000)
{
@@ -693,7 +693,7 @@ WRITE8_MEMBER(gb_rom_mbc7_device::write_bank)
}
}
-READ8_MEMBER(gb_rom_mbc7_device::read_ram)
+uint8_t gb_rom_mbc7_device::read_ram(offs_t offset)
{
if (!m_ram.empty())
return m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)];
@@ -701,7 +701,7 @@ READ8_MEMBER(gb_rom_mbc7_device::read_ram)
return 0xff;
}
-WRITE8_MEMBER(gb_rom_mbc7_device::write_ram)
+void gb_rom_mbc7_device::write_ram(offs_t offset, uint8_t data)
{
if (!m_ram.empty())
m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)] = data;
@@ -710,12 +710,12 @@ WRITE8_MEMBER(gb_rom_mbc7_device::write_ram)
// M161
-READ8_MEMBER(gb_rom_m161_device::read_rom)
+uint8_t gb_rom_m161_device::read_rom(offs_t offset)
{
return m_rom[rom_bank_map[m_base_bank] * 0x4000 + (offset & 0x7fff)];
}
-WRITE8_MEMBER(gb_rom_m161_device::write_bank)
+void gb_rom_m161_device::write_bank(offs_t offset, uint8_t data)
{
// the mapper (74HC161A) only has data lines D2..D0
data &= 0x07;
@@ -736,7 +736,7 @@ WRITE8_MEMBER(gb_rom_m161_device::write_bank)
// MMM01
-READ8_MEMBER(gb_rom_mmm01_device::read_rom)
+uint8_t gb_rom_mmm01_device::read_rom(offs_t offset)
{
uint16_t romb = m_romb & ~(0x1e0 | m_romb_nwe);
uint16_t romb_base = m_romb & (0x1e0 | m_romb_nwe);
@@ -765,7 +765,7 @@ READ8_MEMBER(gb_rom_mmm01_device::read_rom)
return m_rom[rom_bank_map[romb] * 0x4000 + (offset & 0x3fff)];
}
-WRITE8_MEMBER(gb_rom_mmm01_device::write_bank)
+void gb_rom_mmm01_device::write_bank(offs_t offset, uint8_t data)
{
// the mapper only has data lines D6..D0
data &= 0x7f;
@@ -810,7 +810,7 @@ WRITE8_MEMBER(gb_rom_mmm01_device::write_bank)
}
}
-READ8_MEMBER(gb_rom_mmm01_device::read_ram)
+uint8_t gb_rom_mmm01_device::read_ram(offs_t offset)
{
uint8_t ramb_masked = ((offset & 0x4000) | m_mode ? m_ramb : m_ramb & ~0x03);
uint8_t ramb = ramb_masked;
@@ -827,7 +827,7 @@ READ8_MEMBER(gb_rom_mmm01_device::read_ram)
return 0xff;
}
-WRITE8_MEMBER(gb_rom_mmm01_device::write_ram)
+void gb_rom_mmm01_device::write_ram(offs_t offset, uint8_t data)
{
uint8_t ramb_masked = ((offset & 0x4000) | m_mode ? m_ramb : m_ramb & ~0x03);
uint8_t ramb = ramb_masked;
@@ -844,7 +844,7 @@ WRITE8_MEMBER(gb_rom_mmm01_device::write_ram)
// Sachen MMC1
-READ8_MEMBER(gb_rom_sachen_mmc1_device::read_rom)
+uint8_t gb_rom_sachen_mmc1_device::read_rom(offs_t offset)
{
uint16_t off_edit = offset;
@@ -875,7 +875,7 @@ READ8_MEMBER(gb_rom_sachen_mmc1_device::read_rom)
return m_rom[rom_bank_map[(m_base_bank & m_mask) | (m_latch_bank & ~m_mask)] * 0x4000 + (off_edit & 0x3fff)];
}
-WRITE8_MEMBER(gb_rom_sachen_mmc1_device::write_bank)
+void gb_rom_sachen_mmc1_device::write_bank(offs_t offset, uint8_t data)
{
/* Only A15..A6, A4, A1..A0 are connected */
/* We only decode upper three bits */
@@ -916,7 +916,7 @@ WRITE8_MEMBER(gb_rom_sachen_mmc1_device::write_bank)
// Sachen MMC2
-READ8_MEMBER(gb_rom_sachen_mmc2_device::read_rom)
+uint8_t gb_rom_sachen_mmc2_device::read_rom(offs_t offset)
{
uint16_t off_edit = offset;
@@ -954,7 +954,7 @@ READ8_MEMBER(gb_rom_sachen_mmc2_device::read_rom)
return m_rom[rom_bank_map[(m_base_bank & m_mask) | (m_latch_bank & ~m_mask)] * 0x4000 + (off_edit & 0x3fff)];
}
-READ8_MEMBER(gb_rom_sachen_mmc2_device::read_ram)
+uint8_t gb_rom_sachen_mmc2_device::read_ram(offs_t offset)
{
if (m_mode == MODE_LOCKED_DMG) {
m_unlock_cnt = 0x00;
@@ -964,7 +964,7 @@ READ8_MEMBER(gb_rom_sachen_mmc2_device::read_ram)
}
-WRITE8_MEMBER(gb_rom_sachen_mmc2_device::write_ram)
+void gb_rom_sachen_mmc2_device::write_ram(offs_t offset, uint8_t data)
{
if (m_mode == MODE_LOCKED_DMG) {
m_unlock_cnt = 0x00;
@@ -976,7 +976,7 @@ WRITE8_MEMBER(gb_rom_sachen_mmc2_device::write_ram)
// 188 in 1 pirate (only preliminary)
-READ8_MEMBER(gb_rom_188in1_device::read_rom)
+uint8_t gb_rom_188in1_device::read_rom(offs_t offset)
{
if (offset < 0x4000)
return m_rom[m_game_base + rom_bank_map[m_latch_bank] * 0x4000 + (offset & 0x3fff)];
@@ -984,7 +984,7 @@ READ8_MEMBER(gb_rom_188in1_device::read_rom)
return m_rom[m_game_base + rom_bank_map[m_latch_bank2] * 0x4000 + (offset & 0x3fff)];
}
-WRITE8_MEMBER(gb_rom_188in1_device::write_bank)
+void gb_rom_188in1_device::write_bank(offs_t offset, uint8_t data)
{
if (offset == 0x7b00)
{
@@ -1003,24 +1003,24 @@ WRITE8_MEMBER(gb_rom_188in1_device::write_bank)
printf("write to 0x%X data 0x%X\n", offset, data);
}
else
- gb_rom_mbc1_device::write_bank(space, offset, data);
+ gb_rom_mbc1_device::write_bank(offset, data);
}
// MBC5 variant used by Li Cheng / Niutoude games
-WRITE8_MEMBER(gb_rom_licheng_device::write_bank)
+void gb_rom_licheng_device::write_bank(offs_t offset, uint8_t data)
{
if (offset > 0x2100 && offset < 0x3000)
return;
- gb_rom_mbc5_device::write_bank(space, offset, data);
+ gb_rom_mbc5_device::write_bank(offset, data);
}
// MBC5 variant used by Chong Wu Xiao Jing Ling (this appears to be a re-release of a Li Cheng / Niutoude game,
// given that it contains the Niutoude logo, with most protection checks patched out)
-READ8_MEMBER(gb_rom_chongwu_device::read_rom)
+uint8_t gb_rom_chongwu_device::read_rom(offs_t offset)
{
// protection check at the first read here...
if (offset == 0x41c3 && !m_protection_checked)
@@ -1056,7 +1056,7 @@ void gb_rom_sintax_device::set_xor_for_bank(uint8_t bank)
}
}
-READ8_MEMBER(gb_rom_sintax_device::read_rom)
+uint8_t gb_rom_sintax_device::read_rom(offs_t offset)
{
if (offset < 0x4000)
return m_rom[rom_bank_map[m_latch_bank] * 0x4000 + (offset & 0x3fff)];
@@ -1064,7 +1064,7 @@ READ8_MEMBER(gb_rom_sintax_device::read_rom)
return m_rom[rom_bank_map[m_latch_bank2] * 0x4000 + (offset & 0x3fff)] ^ m_currentxor;
}
-WRITE8_MEMBER(gb_rom_sintax_device::write_bank)
+void gb_rom_sintax_device::write_bank(offs_t offset, uint8_t data)
{
if (offset < 0x2000)
m_ram_enable = ((data & 0x0f) == 0x0a) ? 1 : 0;
@@ -1113,7 +1113,7 @@ WRITE8_MEMBER(gb_rom_sintax_device::write_bank)
if (!m_sintax_mode)
{
m_sintax_mode = data;
- write_bank(space, 0x2000, 1); //force a fake bank switch
+ write_bank(0x2000, 1); //force a fake bank switch
}
// printf("sintax mode %x\n", m_sintax_mode & 0xf);
}
@@ -1141,7 +1141,7 @@ WRITE8_MEMBER(gb_rom_sintax_device::write_bank)
}
-READ8_MEMBER(gb_rom_sintax_device::read_ram)
+uint8_t gb_rom_sintax_device::read_ram(offs_t offset)
{
if (!m_ram.empty() && m_ram_enable)
return m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)];
@@ -1149,7 +1149,7 @@ READ8_MEMBER(gb_rom_sintax_device::read_ram)
return 0xff;
}
-WRITE8_MEMBER(gb_rom_sintax_device::write_ram)
+void gb_rom_sintax_device::write_ram(offs_t offset, uint8_t data)
{
if (!m_ram.empty() && m_ram_enable)
m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)] = data;
@@ -1169,7 +1169,7 @@ WRITE8_MEMBER(gb_rom_sintax_device::write_ram)
// MBC5 variant used by Digimon 2 (and maybe 4?)
-READ8_MEMBER(gb_rom_digimon_device::read_rom)
+uint8_t gb_rom_digimon_device::read_rom(offs_t offset)
{
if (offset < 0x4000)
return m_rom[rom_bank_map[m_latch_bank] * 0x4000 + (offset & 0x3fff)];
@@ -1177,7 +1177,7 @@ READ8_MEMBER(gb_rom_digimon_device::read_rom)
return m_rom[rom_bank_map[m_latch_bank2] * 0x4000 + (offset & 0x3fff)];
}
-WRITE8_MEMBER(gb_rom_digimon_device::write_bank)
+void gb_rom_digimon_device::write_bank(offs_t offset, uint8_t data)
{
if (offset < 0x2000)
m_ram_enable = ((data & 0x0f) == 0x0a) ? 1 : 0;
@@ -1206,7 +1206,7 @@ WRITE8_MEMBER(gb_rom_digimon_device::write_bank)
// printf("written $07 %X at %X\n", data, offset);
}
-READ8_MEMBER(gb_rom_digimon_device::read_ram)
+uint8_t gb_rom_digimon_device::read_ram(offs_t offset)
{
if (!m_ram.empty() && m_ram_enable)
return m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)];
@@ -1214,7 +1214,7 @@ READ8_MEMBER(gb_rom_digimon_device::read_ram)
return 0xff;
}
-WRITE8_MEMBER(gb_rom_digimon_device::write_ram)
+void gb_rom_digimon_device::write_ram(offs_t offset, uint8_t data)
{
if (!m_ram.empty() && m_ram_enable)
m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)] = data;
@@ -1223,7 +1223,7 @@ WRITE8_MEMBER(gb_rom_digimon_device::write_ram)
// MBC1 variant used by Yong Yong for Rockman 8
-READ8_MEMBER(gb_rom_rockman8_device::read_rom)
+uint8_t gb_rom_rockman8_device::read_rom(offs_t offset)
{
if (offset < 0x4000)
return m_rom[m_latch_bank * 0x4000 + (offset & 0x3fff)];
@@ -1231,7 +1231,7 @@ READ8_MEMBER(gb_rom_rockman8_device::read_rom)
return m_rom[m_latch_bank2 * 0x4000 + (offset & 0x3fff)];
}
-WRITE8_MEMBER(gb_rom_rockman8_device::write_bank)
+void gb_rom_rockman8_device::write_bank(offs_t offset, uint8_t data)
{
if (offset < 0x2000)
return;
@@ -1248,7 +1248,7 @@ WRITE8_MEMBER(gb_rom_rockman8_device::write_bank)
}
}
-READ8_MEMBER(gb_rom_rockman8_device::read_ram)
+uint8_t gb_rom_rockman8_device::read_ram(offs_t offset)
{
if (!m_ram.empty())
return m_ram[offset];
@@ -1256,7 +1256,7 @@ READ8_MEMBER(gb_rom_rockman8_device::read_ram)
return 0xff;
}
-WRITE8_MEMBER(gb_rom_rockman8_device::write_ram)
+void gb_rom_rockman8_device::write_ram(offs_t offset, uint8_t data)
{
if (!m_ram.empty())
m_ram[offset] = data;
@@ -1291,7 +1291,7 @@ static uint8_t smb3_table1[0x20] =
// however, no such a write ever happen (only bit4 is written, but changing mode with
// bit4 breaks the gfx...)
-READ8_MEMBER(gb_rom_sm3sp_device::read_rom)
+uint8_t gb_rom_sm3sp_device::read_rom(offs_t offset)
{
if (offset < 0x4000)
return m_rom[rom_bank_map[0] * 0x4000 + (offset & 0x3fff)];
@@ -1299,7 +1299,7 @@ READ8_MEMBER(gb_rom_sm3sp_device::read_rom)
return m_rom[m_latch_bank2 * 0x4000 + (offset & 0x3fff)];
}
-WRITE8_MEMBER(gb_rom_sm3sp_device::write_bank)
+void gb_rom_sm3sp_device::write_bank(offs_t offset, uint8_t data)
{
// printf("write 0x%x at %x\n", data, offset);
if (offset < 0x2000)
@@ -1352,11 +1352,11 @@ WRITE8_MEMBER(gb_rom_sm3sp_device::write_bank)
{
// printf("write mode %x\n", data);
m_mode = BIT(data, 5);
-// write_bank(space, 0x2000, 1);
+// write_bank(0x2000, 1);
}
}
-READ8_MEMBER(gb_rom_sm3sp_device::read_ram)
+uint8_t gb_rom_sm3sp_device::read_ram(offs_t offset)
{
if (!m_ram.empty())
return m_ram[offset];
@@ -1364,7 +1364,7 @@ READ8_MEMBER(gb_rom_sm3sp_device::read_ram)
return 0xff;
}
-WRITE8_MEMBER(gb_rom_sm3sp_device::write_ram)
+void gb_rom_sm3sp_device::write_ram(offs_t offset, uint8_t data)
{
if (!m_ram.empty())
m_ram[offset] = data;
@@ -1375,7 +1375,7 @@ void gb_rom_camera_device::update_camera()
m_camera_regs[0] &= ~0x1;
}
-READ8_MEMBER(gb_rom_camera_device::read_rom)
+uint8_t gb_rom_camera_device::read_rom(offs_t offset)
{
if (offset < 0x4000)
return m_rom[rom_bank_map[m_latch_bank] * 0x4000 + (offset & 0x3fff)];
@@ -1383,7 +1383,7 @@ READ8_MEMBER(gb_rom_camera_device::read_rom)
return m_rom[rom_bank_map[m_latch_bank2] * 0x4000 + (offset & 0x3fff)];
}
-WRITE8_MEMBER(gb_rom_camera_device::write_bank)
+void gb_rom_camera_device::write_bank(offs_t offset, uint8_t data)
{
if (offset < 0x2000)
m_ram_enable = ((data & 0x0f) == 0x0a) ? 1 : 0;
@@ -1403,7 +1403,7 @@ WRITE8_MEMBER(gb_rom_camera_device::write_bank)
}
}
-READ8_MEMBER(gb_rom_camera_device::read_ram)
+uint8_t gb_rom_camera_device::read_ram(offs_t offset)
{
if ((m_ram_bank & 0x10) != 0)
return (offset == 0) ? (m_camera_regs[0] & 0x7) : 0;
@@ -1417,7 +1417,7 @@ READ8_MEMBER(gb_rom_camera_device::read_ram)
return 0;
}
-WRITE8_MEMBER(gb_rom_camera_device::write_ram)
+void gb_rom_camera_device::write_ram(offs_t offset, uint8_t data)
{
if ((m_ram_bank & 0x10) != 0)
{
diff --git a/src/devices/bus/gameboy/mbc.h b/src/devices/bus/gameboy/mbc.h
index 4bc169488bf..9658369d6fb 100644
--- a/src/devices/bus/gameboy/mbc.h
+++ b/src/devices/bus/gameboy/mbc.h
@@ -13,9 +13,9 @@ class gb_rom_mbc_device : public device_t,
{
public:
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_READ8_MEMBER(read_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual uint8_t read_ram(offs_t offset) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
protected:
// construction/destruction
@@ -40,10 +40,10 @@ public:
// construction/destruction
gb_rom_mbc1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_WRITE8_MEMBER(write_bank) override;
- virtual DECLARE_READ8_MEMBER(read_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual void write_bank(offs_t offset, uint8_t data) override;
+ virtual uint8_t read_ram(offs_t offset) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
protected:
enum {
@@ -70,10 +70,10 @@ public:
// construction/destruction
gb_rom_mbc2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_WRITE8_MEMBER(write_bank) override;
- virtual DECLARE_READ8_MEMBER(read_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual void write_bank(offs_t offset, uint8_t data) override;
+ virtual uint8_t read_ram(offs_t offset) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
@@ -89,10 +89,10 @@ public:
// construction/destruction
gb_rom_mbc3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_WRITE8_MEMBER(write_bank) override;
- virtual DECLARE_READ8_MEMBER(read_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual void write_bank(offs_t offset, uint8_t data) override;
+ virtual uint8_t read_ram(offs_t offset) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
@@ -113,10 +113,10 @@ public:
// construction/destruction
gb_rom_mbc5_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_WRITE8_MEMBER(write_bank) override;
- virtual DECLARE_READ8_MEMBER(read_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual void write_bank(offs_t offset, uint8_t data) override;
+ virtual uint8_t read_ram(offs_t offset) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
protected:
gb_rom_mbc5_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@@ -134,10 +134,10 @@ public:
// construction/destruction
gb_rom_mbc6_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_WRITE8_MEMBER(write_bank) override;
- virtual DECLARE_READ8_MEMBER(read_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual void write_bank(offs_t offset, uint8_t data) override;
+ virtual uint8_t read_ram(offs_t offset) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
@@ -156,10 +156,10 @@ public:
// construction/destruction
gb_rom_mbc7_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_WRITE8_MEMBER(write_bank) override;
- virtual DECLARE_READ8_MEMBER(read_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual void write_bank(offs_t offset, uint8_t data) override;
+ virtual uint8_t read_ram(offs_t offset) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
@@ -175,10 +175,10 @@ public:
// construction/destruction
gb_rom_m161_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_WRITE8_MEMBER(write_bank) override;
- virtual DECLARE_READ8_MEMBER(read_ram) override { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(write_ram) override { }
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual void write_bank(offs_t offset, uint8_t data) override;
+ virtual uint8_t read_ram(offs_t offset) override { return 0xff; }
+ virtual void write_ram(offs_t offset, uint8_t data) override { }
protected:
// device-level overrides
@@ -197,10 +197,10 @@ public:
gb_rom_mmm01_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_WRITE8_MEMBER(write_bank) override;
- virtual DECLARE_READ8_MEMBER(read_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual void write_bank(offs_t offset, uint8_t data) override;
+ virtual uint8_t read_ram(offs_t offset) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
@@ -225,10 +225,10 @@ public:
// construction/destruction
gb_rom_sachen_mmc1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_WRITE8_MEMBER(write_bank) override;
- virtual DECLARE_READ8_MEMBER(read_ram) override { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(write_ram) override { }
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual void write_bank(offs_t offset, uint8_t data) override;
+ virtual uint8_t read_ram(offs_t offset) override { return 0xff; }
+ virtual void write_ram(offs_t offset, uint8_t data) override { }
protected:
enum {
@@ -253,9 +253,9 @@ public:
// construction/destruction
gb_rom_sachen_mmc2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_READ8_MEMBER(read_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual uint8_t read_ram(offs_t offset) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
protected:
enum {
@@ -277,8 +277,8 @@ public:
gb_rom_188in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_WRITE8_MEMBER(write_bank) override;
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual void write_bank(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
@@ -297,10 +297,10 @@ public:
gb_rom_sintax_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_WRITE8_MEMBER(write_bank) override;
- virtual DECLARE_READ8_MEMBER(read_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual void write_bank(offs_t offset, uint8_t data) override;
+ virtual uint8_t read_ram(offs_t offset) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
@@ -321,7 +321,7 @@ public:
// construction/destruction
gb_rom_chongwu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_rom) override;
+ virtual uint8_t read_rom(offs_t offset) override;
protected:
// device-level overrides
@@ -339,7 +339,7 @@ public:
// construction/destruction
gb_rom_licheng_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_bank) override;
+ virtual void write_bank(offs_t offset, uint8_t data) override;
};
// ======================> gb_rom_digimon_device
@@ -350,15 +350,15 @@ public:
// construction/destruction
gb_rom_digimon_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_WRITE8_MEMBER(write_bank) override;
- virtual DECLARE_READ8_MEMBER(read_ram) override;
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual void write_bank(offs_t offset, uint8_t data) override;
+ virtual uint8_t read_ram(offs_t offset) override;
protected:
// device-level overrides
virtual void device_start() override { shared_start(); }
virtual void device_reset() override { shared_reset(); }
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
};
// ======================> gb_rom_rockman8_device
@@ -369,10 +369,10 @@ public:
gb_rom_rockman8_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_WRITE8_MEMBER(write_bank) override;
- virtual DECLARE_READ8_MEMBER(read_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual void write_bank(offs_t offset, uint8_t data) override;
+ virtual uint8_t read_ram(offs_t offset) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
@@ -390,10 +390,10 @@ public:
gb_rom_sm3sp_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_WRITE8_MEMBER(write_bank) override;
- virtual DECLARE_READ8_MEMBER(read_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual void write_bank(offs_t offset, uint8_t data) override;
+ virtual uint8_t read_ram(offs_t offset) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
@@ -410,10 +410,10 @@ public:
// construction/destruction
gb_rom_camera_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_WRITE8_MEMBER(write_bank) override;
- virtual DECLARE_READ8_MEMBER(read_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual void write_bank(offs_t offset, uint8_t data) override;
+ virtual uint8_t read_ram(offs_t offset) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
diff --git a/src/devices/bus/gameboy/rom.cpp b/src/devices/bus/gameboy/rom.cpp
index 47049bcd836..d3e90d73f51 100644
--- a/src/devices/bus/gameboy/rom.cpp
+++ b/src/devices/bus/gameboy/rom.cpp
@@ -145,13 +145,13 @@ void megaduck_rom_device::device_reset()
mapper specific handlers
-------------------------------------------------*/
-READ8_MEMBER(gb_rom_device::read_rom)
+uint8_t gb_rom_device::read_rom(offs_t offset)
{
m_latch_bank = offset / 0x4000;
return m_rom[rom_bank_map[m_latch_bank] * 0x4000 + (offset & 0x3fff)];
}
-READ8_MEMBER(gb_rom_device::read_ram)
+uint8_t gb_rom_device::read_ram(offs_t offset)
{
if (!m_ram.empty())
return m_ram[ram_bank_map[m_ram_bank] * 0x2000 + offset];
@@ -159,7 +159,7 @@ READ8_MEMBER(gb_rom_device::read_ram)
return 0xff;
}
-WRITE8_MEMBER(gb_rom_device::write_ram)
+void gb_rom_device::write_ram(offs_t offset, uint8_t data)
{
if (!m_ram.empty())
m_ram[ram_bank_map[m_ram_bank] * 0x2000 + offset] = data;
@@ -168,7 +168,7 @@ WRITE8_MEMBER(gb_rom_device::write_ram)
// Tamagotchi
-READ8_MEMBER(gb_rom_tama5_device::read_rom)
+uint8_t gb_rom_tama5_device::read_rom(offs_t offset)
{
if (offset < 0x4000)
return m_rom[rom_bank_map[m_latch_bank] * 0x4000 + (offset & 0x3fff)];
@@ -176,12 +176,12 @@ READ8_MEMBER(gb_rom_tama5_device::read_rom)
return m_rom[rom_bank_map[m_latch_bank2] * 0x4000 + (offset & 0x3fff)];
}
-READ8_MEMBER(gb_rom_tama5_device::read_ram)
+uint8_t gb_rom_tama5_device::read_ram(offs_t offset)
{
return m_rtc_reg;
}
-WRITE8_MEMBER(gb_rom_tama5_device::write_ram)
+void gb_rom_tama5_device::write_ram(offs_t offset, uint8_t data)
{
switch (offset & 0x0001)
{
@@ -259,12 +259,12 @@ WRITE8_MEMBER(gb_rom_tama5_device::write_ram)
// Wisdom Tree
-READ8_MEMBER(gb_rom_wisdom_device::read_rom)
+uint8_t gb_rom_wisdom_device::read_rom(offs_t offset)
{
return m_rom[rom_bank_map[m_latch_bank] * 0x4000 + offset];
}
-WRITE8_MEMBER(gb_rom_wisdom_device::write_bank)
+void gb_rom_wisdom_device::write_bank(offs_t offset, uint8_t data)
{
if (offset < 0x4000)
m_latch_bank = (offset << 1) & 0x1ff;
@@ -273,7 +273,7 @@ WRITE8_MEMBER(gb_rom_wisdom_device::write_bank)
// Yong Yong pirate
-READ8_MEMBER(gb_rom_yong_device::read_rom)
+uint8_t gb_rom_yong_device::read_rom(offs_t offset)
{
if (offset < 0x4000)
return m_rom[rom_bank_map[m_latch_bank] * 0x4000 + (offset & 0x3fff)];
@@ -281,7 +281,7 @@ READ8_MEMBER(gb_rom_yong_device::read_rom)
return m_rom[rom_bank_map[m_latch_bank2] * 0x4000 + (offset & 0x3fff)];
}
-WRITE8_MEMBER(gb_rom_yong_device::write_bank)
+void gb_rom_yong_device::write_bank(offs_t offset, uint8_t data)
{
if (offset == 0x2000)
m_latch_bank2 = data;
@@ -290,7 +290,7 @@ WRITE8_MEMBER(gb_rom_yong_device::write_bank)
// ATV Racin pirate (incomplete)
-READ8_MEMBER(gb_rom_atvrac_device::read_rom)
+uint8_t gb_rom_atvrac_device::read_rom(offs_t offset)
{
if (offset < 0x4000)
return m_rom[rom_bank_map[m_latch_bank] * 0x4000 + (offset & 0x3fff)];
@@ -298,7 +298,7 @@ READ8_MEMBER(gb_rom_atvrac_device::read_rom)
return m_rom[rom_bank_map[m_latch_bank2] * 0x4000 + (offset & 0x3fff)];
}
-WRITE8_MEMBER(gb_rom_atvrac_device::write_bank)
+void gb_rom_atvrac_device::write_bank(offs_t offset, uint8_t data)
{
if (offset == 0x3f00)
{
@@ -312,7 +312,7 @@ WRITE8_MEMBER(gb_rom_atvrac_device::write_bank)
// La Sa Ma pirate (incomplete)
-READ8_MEMBER(gb_rom_lasama_device::read_rom)
+uint8_t gb_rom_lasama_device::read_rom(offs_t offset)
{
if (offset < 0x4000)
return m_rom[rom_bank_map[m_latch_bank] * 0x4000 + (offset & 0x3fff)];
@@ -320,7 +320,7 @@ READ8_MEMBER(gb_rom_lasama_device::read_rom)
return m_rom[rom_bank_map[m_latch_bank2] * 0x4000 + (offset & 0x3fff)];
}
-WRITE8_MEMBER(gb_rom_lasama_device::write_bank)
+void gb_rom_lasama_device::write_bank(offs_t offset, uint8_t data)
{
if (offset == 0x2080)
{
@@ -341,7 +341,7 @@ WRITE8_MEMBER(gb_rom_lasama_device::write_bank)
// MegaDuck carts
-READ8_MEMBER(megaduck_rom_device::read_rom)
+uint8_t megaduck_rom_device::read_rom(offs_t offset)
{
if (offset < 0x4000)
return m_rom[rom_bank_map[m_latch_bank] * 0x4000 + (offset & 0x3fff)];
@@ -349,13 +349,13 @@ READ8_MEMBER(megaduck_rom_device::read_rom)
return m_rom[rom_bank_map[m_latch_bank2] * 0x4000 + (offset & 0x3fff)];
}
-WRITE8_MEMBER(megaduck_rom_device::write_bank)
+void megaduck_rom_device::write_bank(offs_t offset, uint8_t data)
{
if (offset == 0x0001)
m_latch_bank2 = data;
}
-WRITE8_MEMBER(megaduck_rom_device::write_ram)
+void megaduck_rom_device::write_ram(offs_t offset, uint8_t data)
{
m_latch_bank = data * 2;
m_latch_bank2 = data * 2 + 1;
diff --git a/src/devices/bus/gameboy/rom.h b/src/devices/bus/gameboy/rom.h
index a5439fba598..f2388446863 100644
--- a/src/devices/bus/gameboy/rom.h
+++ b/src/devices/bus/gameboy/rom.h
@@ -16,9 +16,9 @@ public:
gb_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_READ8_MEMBER(read_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual uint8_t read_ram(offs_t offset) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
protected:
gb_rom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@@ -39,9 +39,9 @@ public:
gb_rom_tama5_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_READ8_MEMBER(read_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual uint8_t read_ram(offs_t offset) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
@@ -61,8 +61,8 @@ public:
gb_rom_wisdom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_WRITE8_MEMBER(write_bank) override;
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual void write_bank(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
@@ -78,8 +78,8 @@ public:
gb_rom_yong_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_WRITE8_MEMBER(write_bank) override;
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual void write_bank(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
@@ -95,8 +95,8 @@ public:
gb_rom_atvrac_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_WRITE8_MEMBER(write_bank) override;
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual void write_bank(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
@@ -112,8 +112,8 @@ public:
gb_rom_lasama_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_WRITE8_MEMBER(write_bank) override;
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual void write_bank(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
@@ -131,9 +131,9 @@ public:
megaduck_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_WRITE8_MEMBER(write_bank) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual void write_bank(offs_t offset, uint8_t data) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
protected:
megaduck_rom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
diff --git a/src/devices/bus/gamegear/ggext.h b/src/devices/bus/gamegear/ggext.h
index 71d6ecfcf72..1eed1545bed 100644
--- a/src/devices/bus/gamegear/ggext.h
+++ b/src/devices/bus/gamegear/ggext.h
@@ -16,28 +16,6 @@
#pragma once
-
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_GG_EXT_PORT_ADD(_tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, GG_EXT_PORT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-#define MCFG_GG_EXT_PORT_MODIFY(_tag) \
- MCFG_DEVICE_MODIFY(_tag)
-
-
-#define MCFG_GG_EXT_PORT_TH_INPUT_HANDLER(_devcb) \
- downcast<gg_ext_port_device &>(*device).set_th_input_handler(DEVCB_##_devcb);
-
-
-#define MCFG_GG_EXT_PORT_PIXEL_HANDLER(_devcb) \
- downcast<gg_ext_port_device &>(*device).set_pixel_handler(DEVCB_##_devcb);
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -50,13 +28,23 @@ class gg_ext_port_device : public device_t, public device_slot_interface
{
public:
// construction/destruction
- gg_ext_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ gg_ext_port_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : gg_ext_port_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ gg_ext_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
virtual ~gg_ext_port_device();
// static configuration helpers
- template <class Object> devcb_base &set_th_input_handler(Object &&cb) { return m_th_pin_handler.set_callback(std::forward<Object>(cb)); }
+ auto th_input_handler() { return m_th_pin_handler.bind(); }
- template <class Object> devcb_base &set_pixel_handler(Object &&cb) { return m_pixel_handler.set_callback(std::forward<Object>(cb)); }
+ auto pixel_handler() { return m_pixel_handler.bind(); }
// Currently, only the support for SMS Controller Adaptor is emulated,
// for when SMS Compatibility mode is enabled. In that mode, the 10 pins
diff --git a/src/devices/bus/gamegear/smsctrladp.cpp b/src/devices/bus/gamegear/smsctrladp.cpp
index 7a5eee4ba4b..0b380cba8a0 100644
--- a/src/devices/bus/gamegear/smsctrladp.cpp
+++ b/src/devices/bus/gamegear/smsctrladp.cpp
@@ -80,9 +80,10 @@ READ32_MEMBER( sms_ctrl_adaptor_device::pixel_r )
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(sms_ctrl_adaptor_device::device_add_mconfig)
- MCFG_SMS_CONTROL_PORT_ADD("ctrl", sms_control_port_devices, "joypad")
- MCFG_SMS_CONTROL_PORT_TH_INPUT_HANDLER(WRITELINE(*this, sms_ctrl_adaptor_device, th_pin_w))
- MCFG_SMS_CONTROL_PORT_PIXEL_HANDLER(READ32(*this, sms_ctrl_adaptor_device, pixel_r))
-MACHINE_CONFIG_END
+void sms_ctrl_adaptor_device::device_add_mconfig(machine_config &config)
+{
+ SMS_CONTROL_PORT(config, m_subctrl_port, sms_control_port_devices, "joypad");
+ m_subctrl_port->th_input_handler().set(FUNC(sms_ctrl_adaptor_device::th_pin_w));
+ m_subctrl_port->pixel_handler().set(FUNC(sms_ctrl_adaptor_device::pixel_r));
+}
diff --git a/src/devices/bus/gba/gba_slot.h b/src/devices/bus/gba/gba_slot.h
index c946fd71c57..b26891c6589 100644
--- a/src/devices/bus/gba/gba_slot.h
+++ b/src/devices/bus/gba/gba_slot.h
@@ -84,7 +84,17 @@ class gba_cart_slot_device : public device_t,
{
public:
// construction/destruction
- gba_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ gba_cart_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : gba_cart_slot_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ gba_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
virtual ~gba_cart_slot_device();
// device-level overrides
@@ -143,11 +153,6 @@ DECLARE_DEVICE_TYPE(GBA_CART_SLOT, gba_cart_slot_device)
#define GBASLOT_ROM_REGION_TAG ":cart:rom"
#define GBAHELP_ROM_REGION_TAG ":cart:romhlp"
-#define MCFG_GBA_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_tag, GBA_CART_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-
//------------------------------------------------------------------------
//
diff --git a/src/devices/bus/gba/rom.cpp b/src/devices/bus/gba/rom.cpp
index 1471d43a430..e1c61ec0f49 100644
--- a/src/devices/bus/gba/rom.cpp
+++ b/src/devices/bus/gba/rom.cpp
@@ -417,13 +417,13 @@ READ32_MEMBER(gba_rom_flash_device::read_ram)
offset &= m_flash_mask;
if (mem_mask & 0xff)
- rv |= m_flash->read(space, offset * 4);
+ rv |= m_flash->read(offset * 4);
if (mem_mask & 0xff00)
- rv |= m_flash->read(space, (offset * 4) + 1) << 8;
+ rv |= m_flash->read((offset * 4) + 1) << 8;
if (mem_mask & 0xff0000)
- rv |= m_flash->read(space, (offset * 4) + 2) << 16;
+ rv |= m_flash->read((offset * 4) + 2) << 16;
if (mem_mask & 0xff000000)
- rv |= m_flash->read(space, (offset * 4) + 3) << 24;
+ rv |= m_flash->read((offset * 4) + 3) << 24;
return rv;
}
@@ -435,16 +435,16 @@ WRITE32_MEMBER(gba_rom_flash_device::write_ram)
switch (mem_mask)
{
case 0xff:
- m_flash->write(space, offset * 4, data & 0xff);
+ m_flash->write(offset * 4, data & 0xff);
break;
case 0xff00:
- m_flash->write(space, (offset * 4) + 1, (data >> 8) & 0xff);
+ m_flash->write((offset * 4) + 1, (data >> 8) & 0xff);
break;
case 0xff0000:
- m_flash->write(space, (offset * 4) + 2, (data >> 16) & 0xff);
+ m_flash->write((offset * 4) + 2, (data >> 16) & 0xff);
break;
case 0xff000000:
- m_flash->write(space, (offset * 4) + 3, (data >> 24) & 0xff);
+ m_flash->write((offset * 4) + 3, (data >> 24) & 0xff);
break;
default:
fatalerror("Unknown mem_mask for GBA flash write %x\n", mem_mask);
@@ -464,13 +464,13 @@ READ32_MEMBER(gba_rom_flash1m_device::read_ram)
offset &= m_flash_mask;
if (mem_mask & 0xff)
- rv |= m_flash->read(space, offset * 4);
+ rv |= m_flash->read(offset * 4);
if (mem_mask & 0xff00)
- rv |= m_flash->read(space, (offset * 4) + 1) << 8;
+ rv |= m_flash->read((offset * 4) + 1) << 8;
if (mem_mask & 0xff0000)
- rv |= m_flash->read(space, (offset * 4) + 2) << 16;
+ rv |= m_flash->read((offset * 4) + 2) << 16;
if (mem_mask & 0xff000000)
- rv |= m_flash->read(space, (offset * 4) + 3) << 24;
+ rv |= m_flash->read((offset * 4) + 3) << 24;
return rv;
}
@@ -482,16 +482,16 @@ WRITE32_MEMBER(gba_rom_flash1m_device::write_ram)
switch (mem_mask)
{
case 0xff:
- m_flash->write(space, offset * 4, data & 0xff);
+ m_flash->write(offset * 4, data & 0xff);
break;
case 0xff00:
- m_flash->write(space, (offset * 4) + 1, (data >> 8) & 0xff);
+ m_flash->write((offset * 4) + 1, (data >> 8) & 0xff);
break;
case 0xff0000:
- m_flash->write(space, (offset * 4) + 2, (data >> 16) & 0xff);
+ m_flash->write((offset * 4) + 2, (data >> 16) & 0xff);
break;
case 0xff000000:
- m_flash->write(space, (offset * 4) + 3, (data >> 24) & 0xff);
+ m_flash->write((offset * 4) + 3, (data >> 24) & 0xff);
break;
default:
fatalerror("Unknown mem_mask for GBA flash write %x\n", mem_mask);
diff --git a/src/devices/bus/generic/ram.cpp b/src/devices/bus/generic/ram.cpp
index 601db4d0470..1c9a63d7306 100644
--- a/src/devices/bus/generic/ram.cpp
+++ b/src/devices/bus/generic/ram.cpp
@@ -97,7 +97,7 @@ void generic_ram_linear_device::device_start()
mapper specific handlers
-------------------------------------------------*/
-READ8_MEMBER(generic_ram_plain_device::read_ram)
+uint8_t generic_ram_plain_device::read_ram(offs_t offset)
{
if (offset < m_ram.size())
return m_ram[offset];
@@ -105,19 +105,19 @@ READ8_MEMBER(generic_ram_plain_device::read_ram)
return 0xff;
}
-WRITE8_MEMBER(generic_ram_plain_device::write_ram)
+void generic_ram_plain_device::write_ram(offs_t offset, uint8_t data)
{
if (offset < m_ram.size())
m_ram[offset] = data;
}
-READ8_MEMBER(generic_ram_linear_device::read_ram)
+uint8_t generic_ram_linear_device::read_ram(offs_t offset)
{
return m_ram[offset % m_ram.size()];
}
-WRITE8_MEMBER(generic_ram_linear_device::write_ram)
+void generic_ram_linear_device::write_ram(offs_t offset, uint8_t data)
{
m_ram[offset % m_ram.size()] = data;
}
diff --git a/src/devices/bus/generic/ram.h b/src/devices/bus/generic/ram.h
index aa8323ba8af..5cd8c8092b0 100644
--- a/src/devices/bus/generic/ram.h
+++ b/src/devices/bus/generic/ram.h
@@ -14,8 +14,8 @@ class generic_ram_plain_device : public device_t, public device_generic_cart_int
{
public:
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+ virtual uint8_t read_ram(offs_t offset) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
protected:
// construction/destruction
@@ -35,8 +35,8 @@ class generic_ram_linear_device : public device_t, public device_generic_cart_in
{
public:
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+ virtual uint8_t read_ram(offs_t offset) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
protected:
// construction/destruction
diff --git a/src/devices/bus/generic/rom.cpp b/src/devices/bus/generic/rom.cpp
index 3a63b1f90dc..e52854d5b64 100644
--- a/src/devices/bus/generic/rom.cpp
+++ b/src/devices/bus/generic/rom.cpp
@@ -61,7 +61,7 @@ generic_romram_plain_device::generic_romram_plain_device(const machine_config &m
mapper specific handlers
-------------------------------------------------*/
-READ8_MEMBER(generic_rom_plain_device::read_rom)
+uint8_t generic_rom_plain_device::read_rom(offs_t offset)
{
if (offset < m_rom_size)
return m_rom[offset];
@@ -69,7 +69,7 @@ READ8_MEMBER(generic_rom_plain_device::read_rom)
return 0xff;
}
-READ16_MEMBER(generic_rom_plain_device::read16_rom)
+uint16_t generic_rom_plain_device::read16_rom(offs_t offset, uint16_t mem_mask)
{
uint16_t *ROM = (uint16_t *)m_rom;
if (offset < m_rom_size/2)
@@ -78,7 +78,7 @@ READ16_MEMBER(generic_rom_plain_device::read16_rom)
return 0xffff;
}
-READ32_MEMBER(generic_rom_plain_device::read32_rom)
+uint32_t generic_rom_plain_device::read32_rom(offs_t offset, uint32_t mem_mask)
{
uint32_t *ROM = (uint32_t *)m_rom;
if (offset < m_rom_size/4)
@@ -88,25 +88,25 @@ READ32_MEMBER(generic_rom_plain_device::read32_rom)
}
-READ8_MEMBER(generic_rom_linear_device::read_rom)
+uint8_t generic_rom_linear_device::read_rom(offs_t offset)
{
return m_rom[offset % m_rom_size];
}
-READ16_MEMBER(generic_rom_linear_device::read16_rom)
+uint16_t generic_rom_linear_device::read16_rom(offs_t offset, uint16_t mem_mask)
{
uint16_t *ROM = (uint16_t *)m_rom;
return ROM[offset % (m_rom_size/2)];
}
-READ32_MEMBER(generic_rom_linear_device::read32_rom)
+uint32_t generic_rom_linear_device::read32_rom(offs_t offset, uint32_t mem_mask)
{
uint32_t *ROM = (uint32_t *)m_rom;
return ROM[offset % (m_rom_size/4)];
}
-READ8_MEMBER(generic_romram_plain_device::read_ram)
+uint8_t generic_romram_plain_device::read_ram(offs_t offset)
{
if (offset < m_ram.size())
return m_ram[offset];
@@ -114,7 +114,7 @@ READ8_MEMBER(generic_romram_plain_device::read_ram)
return 0xff;
}
-WRITE8_MEMBER(generic_romram_plain_device::write_ram)
+void generic_romram_plain_device::write_ram(offs_t offset, uint8_t data)
{
if (offset < m_ram.size())
m_ram[offset] = data;
diff --git a/src/devices/bus/generic/rom.h b/src/devices/bus/generic/rom.h
index 2fc1011c25b..6c5df5d4bf4 100644
--- a/src/devices/bus/generic/rom.h
+++ b/src/devices/bus/generic/rom.h
@@ -30,9 +30,9 @@ public:
generic_rom_plain_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_READ16_MEMBER(read16_rom) override;
- virtual DECLARE_READ32_MEMBER(read32_rom) override;
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual uint16_t read16_rom(offs_t offset, uint16_t mem_mask) override;
+ virtual uint32_t read32_rom(offs_t offset, uint32_t mem_mask) override;
protected:
generic_rom_plain_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@@ -48,8 +48,8 @@ public:
generic_romram_plain_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+ virtual uint8_t read_ram(offs_t offset) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
};
@@ -62,9 +62,9 @@ public:
generic_rom_linear_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom) override;
- virtual DECLARE_READ16_MEMBER(read16_rom) override;
- virtual DECLARE_READ32_MEMBER(read32_rom) override;
+ virtual uint8_t read_rom(offs_t offset) override;
+ virtual uint16_t read16_rom(offs_t offset, uint16_t mem_mask) override;
+ virtual uint32_t read32_rom(offs_t offset, uint32_t mem_mask) override;
};
diff --git a/src/devices/bus/generic/slot.cpp b/src/devices/bus/generic/slot.cpp
index 8e7e3a4cdab..557e1d8dcef 100644
--- a/src/devices/bus/generic/slot.cpp
+++ b/src/devices/bus/generic/slot.cpp
@@ -216,10 +216,10 @@ void generic_slot_device::common_load_rom(uint8_t *ROM, uint32_t len, const char
read_rom
-------------------------------------------------*/
-READ8_MEMBER(generic_slot_device::read_rom)
+uint8_t generic_slot_device::read_rom(offs_t offset)
{
if (m_cart)
- return m_cart->read_rom(space, offset);
+ return m_cart->read_rom(offset);
else
return 0xff;
}
@@ -228,10 +228,10 @@ READ8_MEMBER(generic_slot_device::read_rom)
read16_rom
-------------------------------------------------*/
-READ16_MEMBER(generic_slot_device::read16_rom)
+uint16_t generic_slot_device::read16_rom(offs_t offset, uint16_t mem_mask)
{
if (m_cart)
- return m_cart->read16_rom(space, offset, mem_mask);
+ return m_cart->read16_rom(offset, mem_mask);
else
return 0xffff;
}
@@ -240,10 +240,10 @@ READ16_MEMBER(generic_slot_device::read16_rom)
read32_rom
-------------------------------------------------*/
-READ32_MEMBER(generic_slot_device::read32_rom)
+uint32_t generic_slot_device::read32_rom(offs_t offset, uint32_t mem_mask)
{
if (m_cart)
- return m_cart->read32_rom(space, offset, mem_mask);
+ return m_cart->read32_rom(offset, mem_mask);
else
return 0xffffffff;
}
@@ -252,10 +252,10 @@ READ32_MEMBER(generic_slot_device::read32_rom)
read_ram
-------------------------------------------------*/
-READ8_MEMBER(generic_slot_device::read_ram)
+uint8_t generic_slot_device::read_ram(offs_t offset)
{
if (m_cart)
- return m_cart->read_ram(space, offset);
+ return m_cart->read_ram(offset);
else
return 0xff;
}
@@ -264,8 +264,8 @@ READ8_MEMBER(generic_slot_device::read_ram)
write_ram
-------------------------------------------------*/
-WRITE8_MEMBER(generic_slot_device::write_ram)
+void generic_slot_device::write_ram(offs_t offset, uint8_t data)
{
if (m_cart)
- m_cart->write_ram(space, offset, data);
+ m_cart->write_ram(offset, data);
}
diff --git a/src/devices/bus/generic/slot.h b/src/devices/bus/generic/slot.h
index d0c0d84a053..3fac098afb7 100644
--- a/src/devices/bus/generic/slot.h
+++ b/src/devices/bus/generic/slot.h
@@ -22,12 +22,12 @@ public:
virtual ~device_generic_cart_interface();
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom) { return 0xff; }
- virtual DECLARE_READ16_MEMBER(read16_rom) { return 0xffff; }
- virtual DECLARE_READ32_MEMBER(read32_rom) { return 0xffffffff; }
+ virtual uint8_t read_rom(offs_t offset) { return 0xff; }
+ virtual uint16_t read16_rom(offs_t offset, uint16_t mem_mask) { return 0xffff; }
+ virtual uint32_t read32_rom(offs_t offset, uint32_t mem_mask) { return 0xffffffff; }
- virtual DECLARE_READ8_MEMBER(read_ram) { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(write_ram) {};
+ virtual uint8_t read_ram(offs_t offset) { return 0xff; }
+ virtual void write_ram(offs_t offset, uint8_t data) {}
virtual void rom_alloc(size_t size, int width, endianness_t end, const char *tag);
virtual void ram_alloc(uint32_t size);
@@ -138,12 +138,12 @@ public:
virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom);
- virtual DECLARE_READ16_MEMBER(read16_rom);
- virtual DECLARE_READ32_MEMBER(read32_rom);
+ virtual uint8_t read_rom(offs_t offset);
+ virtual uint16_t read16_rom(offs_t offset, uint16_t mem_mask = 0xffff);
+ virtual uint32_t read32_rom(offs_t offset, uint32_t mem_mask = 0xffffffff);
- virtual DECLARE_READ8_MEMBER(read_ram);
- virtual DECLARE_WRITE8_MEMBER(write_ram);
+ virtual uint8_t read_ram(offs_t offset);
+ virtual void write_ram(offs_t offset, uint8_t data);
virtual void rom_alloc(size_t size, int width, endianness_t end) { if (m_cart) m_cart->rom_alloc(size, width, end, tag()); }
virtual void ram_alloc(uint32_t size) { if (m_cart) m_cart->ram_alloc(size); }
diff --git a/src/devices/bus/hexbus/hx5102.cpp b/src/devices/bus/hexbus/hx5102.cpp
index bf0f9d541cb..0cfd70c7dac 100644
--- a/src/devices/bus/hexbus/hx5102.cpp
+++ b/src/devices/bus/hexbus/hx5102.cpp
@@ -121,8 +121,7 @@ void hx5102_device::memmap(address_map &map)
*/
void hx5102_device::crumap(address_map &map)
{
- map(0x17e0>>4, 0x17fe>>4).r(FUNC(hx5102_device::cruread));
- map(0x17e0>>1, 0x17fe>>1).w(FUNC(hx5102_device::cruwrite));
+ map(0x17e0, 0x17ff).rw(FUNC(hx5102_device::cruread), FUNC(hx5102_device::cruwrite));
}
hx5102_device::hx5102_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock):
@@ -374,12 +373,12 @@ READ8_MEMBER(hx5102_device::fdc_read)
{
case 0:
// Main status register
- val = m_floppy_ctrl->read_msr();
+ val = m_floppy_ctrl->msr_r();
LOGMASKED(LOG_STATUS, "i8272A.msr -> %02x\n", val);
break;
case 4:
// FIFO read
- val = m_floppy_ctrl->read_fifo();
+ val = m_floppy_ctrl->fifo_r();
LOGMASKED(LOG_FIFO, "i8272A.fifo -> %02x\n", val);
break;
}
@@ -398,7 +397,7 @@ WRITE8_MEMBER(hx5102_device::fdc_write)
case 0x08:
// Command register (FIFO write)
LOGMASKED(LOG_STATUS, "i8272A.fifo <- %02x\n", data);
- m_floppy_ctrl->write_fifo(data);
+ m_floppy_ctrl->fifo_w(data);
break;
case 0x0c:
// DMA lock
@@ -475,7 +474,7 @@ READ8_MEMBER(hx5102_device::cruread)
crubits |= ((ioport("HXDIP")->read())<<4);
- return crubits;
+ return BIT(crubits, offset);
}
/*
diff --git a/src/devices/bus/hp80_io/hp80_io.h b/src/devices/bus/hp80_io/hp80_io.h
index 11025d30d03..886e7ce414a 100644
--- a/src/devices/bus/hp80_io/hp80_io.h
+++ b/src/devices/bus/hp80_io/hp80_io.h
@@ -13,16 +13,6 @@
#pragma once
-#define MCFG_HP80_IO_SLOT_ADD(_tag , _idx) \
- MCFG_DEVICE_ADD(_tag, HP80_IO_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(hp80_io_slot_devices, nullptr, false) \
- downcast<hp80_io_slot_device &>(*device).set_slot_no(_idx);
-
-#define MCFG_HP80_IO_IRL_CB(_devcb) \
- downcast<hp80_io_slot_device &>(*device).set_irl_cb_func(DEVCB_##_devcb);
-
-#define MCFG_HP80_IO_HALT_CB(_devcb) \
- downcast<hp80_io_slot_device &>(*device).set_halt_cb_func(DEVCB_##_devcb);
#define HP80_IO_FIRST_SC 3 // Lowest SC used by I/O cards
@@ -38,11 +28,22 @@
PORT_CONFSETTING(6 , "9")\
PORT_CONFSETTING(7 , "10")
+void hp80_io_slot_devices(device_slot_interface &device);
+
class hp80_io_slot_device : public device_t,
public device_slot_interface
{
public:
// construction/destruction
+ hp80_io_slot_device(machine_config const &mconfig, char const *tag, device_t *owner)
+ : hp80_io_slot_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ option_reset();
+ hp80_io_slot_devices(*this);
+ set_default_option(nullptr);
+ set_fixed(false);
+ }
+
hp80_io_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~hp80_io_slot_device();
@@ -53,8 +54,8 @@ public:
virtual void device_start() override;
// Callback setups
- template <class Object> devcb_base &set_irl_cb_func(Object &&cb) { return m_irl_cb_func.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_halt_cb_func(Object &&cb) { return m_halt_cb_func.set_callback(std::forward<Object>(cb)); }
+ auto irl_cb() { return m_irl_cb_func.bind(); }
+ auto halt_cb() { return m_halt_cb_func.bind(); }
// SC getter
uint8_t get_sc() const;
@@ -102,6 +103,4 @@ protected:
// device type definition
DECLARE_DEVICE_TYPE(HP80_IO_SLOT, hp80_io_slot_device)
-void hp80_io_slot_devices(device_slot_interface &device);
-
#endif // MAME_BUS_HP80_IO_HP80_IO_H
diff --git a/src/devices/bus/hp80_optroms/hp80_optrom.h b/src/devices/bus/hp80_optroms/hp80_optrom.h
index cb8dbd4903b..33bd800027c 100644
--- a/src/devices/bus/hp80_optroms/hp80_optrom.h
+++ b/src/devices/bus/hp80_optroms/hp80_optrom.h
@@ -18,6 +18,8 @@
// Size of optional ROMs (8k)
static constexpr offs_t HP80_OPTROM_SIZE = 0x2000;
+void hp80_optrom_slot_devices(device_slot_interface &device);
+
class hp80_optrom_cart_device : public device_t,
public device_slot_card_interface
{
@@ -38,6 +40,15 @@ class hp80_optrom_slot_device : public device_t,
{
public:
// construction/destruction
+ hp80_optrom_slot_device(machine_config const &mconfig, char const *tag, device_t *owner)
+ : hp80_optrom_slot_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ option_reset();
+ hp80_optrom_slot_devices(*this);
+ set_default_option(nullptr);
+ set_fixed(false);
+ }
+
hp80_optrom_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~hp80_optrom_slot_device();
@@ -72,6 +83,4 @@ protected:
DECLARE_DEVICE_TYPE(HP80_OPTROM_SLOT, hp80_optrom_slot_device)
DECLARE_DEVICE_TYPE(HP80_OPTROM_CART, hp80_optrom_cart_device)
-void hp80_optrom_slot_devices(device_slot_interface &device);
-
#endif // MAME_BUS_HP80_OPTROMS_HP80_OPTROM_H
diff --git a/src/devices/bus/hp9845_io/98032.cpp b/src/devices/bus/hp9845_io/98032.cpp
index c4838331b87..fc55a786fe2 100644
--- a/src/devices/bus/hp9845_io/98032.cpp
+++ b/src/devices/bus/hp9845_io/98032.cpp
@@ -13,6 +13,7 @@
#include "emu.h"
#include "98032.h"
+#include "hp9885.h"
// Debugging
#define VERBOSE 0
@@ -55,12 +56,13 @@ hp98032_io_card_device::~hp98032_io_card_device()
{
}
-MACHINE_CONFIG_START(hp98032_io_card_device::device_add_mconfig)
+void hp98032_io_card_device::device_add_mconfig(machine_config &config)
+{
HP98032_GPIO_SLOT(config , m_gpio , 0);
m_gpio->pflg_cb().set(FUNC(hp98032_io_card_device::pflg_w));
m_gpio->psts_cb().set(FUNC(hp98032_io_card_device::psts_w));
m_gpio->eir_cb().set(FUNC(hp98032_io_card_device::eir_w));
-MACHINE_CONFIG_END
+}
static INPUT_PORTS_START(hp98032_port)
MCFG_HP9845_IO_SC(2)
@@ -353,6 +355,7 @@ hp98032_gpio_slot_device::hp98032_gpio_slot_device(const machine_config &mconfig
{
option_reset();
option_add("loopback" , HP98032_GPIO_LOOPBACK);
+ option_add("hp9885" , HP9885);
set_default_option(nullptr);
set_fixed(false);
}
diff --git a/src/devices/bus/hp9845_io/98034.cpp b/src/devices/bus/hp9845_io/98034.cpp
index b82935a9762..ab2985db6e2 100644
--- a/src/devices/bus/hp9845_io/98034.cpp
+++ b/src/devices/bus/hp9845_io/98034.cpp
@@ -363,9 +363,10 @@ const tiny_rom_entry *hp98034_io_card_device::device_rom_region() const
return ROM_NAME(hp98034);
}
-MACHINE_CONFIG_START(hp98034_io_card_device::device_add_mconfig)
-// Clock for NP is generated by a RC oscillator. Manual says its typical frequency
-// is around 2 MHz.
+void hp98034_io_card_device::device_add_mconfig(machine_config &config)
+{
+ // Clock for NP is generated by a RC oscillator. Manual says its typical frequency
+ // is around 2 MHz.
HP_NANOPROCESSOR(config, m_cpu, 2000000);
m_cpu->set_addrmap(AS_PROGRAM, &hp98034_io_card_device::np_program_map);
m_cpu->set_addrmap(AS_IO, &hp98034_io_card_device::np_io_map);
@@ -373,12 +374,12 @@ MACHINE_CONFIG_START(hp98034_io_card_device::device_add_mconfig)
m_cpu->read_dc().set(FUNC(hp98034_io_card_device::dc_r));
m_cpu->set_irq_acknowledge_callback(FUNC(hp98034_io_card_device::irq_callback));
- MCFG_IEEE488_SLOT_ADD("ieee_dev" , 0 , hp_ieee488_devices , nullptr)
- MCFG_IEEE488_SLOT_ADD("ieee_rem" , 0 , remote488_devices , nullptr)
- MCFG_IEEE488_BUS_ADD()
- MCFG_IEEE488_IFC_CALLBACK(WRITELINE(*this, hp98034_io_card_device , ieee488_ctrl_w))
- MCFG_IEEE488_ATN_CALLBACK(WRITELINE(*this, hp98034_io_card_device , ieee488_ctrl_w))
-MACHINE_CONFIG_END
+ IEEE488_SLOT(config , "ieee_dev" , 0 , hp_ieee488_devices , nullptr);
+ IEEE488_SLOT(config , "ieee_rem" , 0 , remote488_devices , nullptr);
+ IEEE488(config, m_ieee488);
+ m_ieee488->ifc_callback().set(FUNC(hp98034_io_card_device::ieee488_ctrl_w));
+ m_ieee488->atn_callback().set(FUNC(hp98034_io_card_device::ieee488_ctrl_w));
+}
// device type definition
DEFINE_DEVICE_TYPE(HP98034_IO_CARD, hp98034_io_card_device, "hp98034", "HP98034 card")
diff --git a/src/devices/bus/hp9845_io/hp9885.cpp b/src/devices/bus/hp9845_io/hp9885.cpp
new file mode 100644
index 00000000000..e4a2fc9f33c
--- /dev/null
+++ b/src/devices/bus/hp9845_io/hp9885.cpp
@@ -0,0 +1,974 @@
+// license:BSD-3-Clause
+// copyright-holders: F. Ulivi
+/*********************************************************************
+
+ hp9885.cpp
+
+ HP9885M 8" floppy drive
+ =======================
+
+ This driver implements HLE of HP9885 floppy drive.
+ The HP9885M is a single-disk 8" floppy drive. It connects to
+ main system through a HP98032 GPIO module. The controller in a
+ HP9885M can drive 3 more external HP9885S drives. The "M" or "S"
+ in the name stand for master and slave, respectively.
+ The enclosure of HP9885M contains the floppy drive, the controller
+ electronics and the power supply whereas the HP9885S only has the
+ drive and the power supply. A master unit interfaces to slave units
+ through a standard daisy-chained Shugart bus.
+ The controller is based on a HP Nanoprocessor with a 2 kB FW ROM.
+ Unfortunately no dumps are available of the ROM, AFAIK, so the HLE
+ is needed.
+ The HP9885 supports a single disk format having these characteristics:
+ - Single side
+ - HP MMFM modulation
+ - 30 256-byte sectors per track
+ - 77 tracks (only 67 are actually used)
+ - 360 RPM
+ - A total capacity of 514560 bytes per disk.
+
+ Summary of the command words I identified
+ =========================================
+
+ *READ*
+
+ +-----------------------------------------------+
+ |15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0|
+ +-----+-----+-----------------------------------+
+ | 0 X|Unit#| Sector count |
+ +-----+-----+-----------------------------------+
+
+ Bit 14 selects tighter margin for data reading (not emulated here)
+
+ *WRITE*
+
+ +-----------------------------------------------+
+ |15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0|
+ +-----+-----+-----------------------------------+
+ | 1 0|Unit#| Sector count |
+ +-----+-----+-----------------------------------+
+
+ *SEEK*
+
+ +-----------------------------------------------+
+ |15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0|
+ +-----+-----+--------------------+--------------+
+ | 1 1|Unit#| Track # [0..76] |Sector#[0..29]|
+ +-----+-----+--------------------+--------------+
+
+ *FORMAT TRACK* (not implemented yet)
+
+ +-----------------------------------------------+
+ |15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0|
+ +-----+-----+--------------------+--------------+
+ | 1 1|Unit#| Track # [0..76] | 0x1e |
+ +-----+-----+--------------------+--------------+
+
+ *STEP IN*
+
+ +-----------------------------------------------+
+ |15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0|
+ +-----+-----+--------------------+--------------+
+ | 1 1|Unit#| 0x7c | 0x1f |
+ +-----+-----+--------------------+--------------+
+
+ *ERASE TRACK* (not implemented yet)
+
+ +-----------------------------------------------+
+ |15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0|
+ +-----+-----+--------------------+--------------+
+ | 1 1|Unit#| 0x7d | 0x1f |
+ +-----+-----+--------------------+--------------+
+
+ *READ STATUS*
+
+ +-----------------------------------------------+
+ |15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0|
+ +-----+-----+--------------------+--------------+
+ | 1 1|Unit#| 0x7f | 0x1f |
+ +-----+-----+--------------------+--------------+
+
+ This is the structure of the status word:
+
+ +-----------------------------------------------+
+ |15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0|
+ +-----------------------+--+--+--+--+--+--+-----+
+ | Error code (0=OK) |--|XC|SC|NR|WP|DC|Unit#|
+ +-----------------------+--+--+--+--+--+--+-----+
+
+ DC: Disk changed
+ WP: Write protection
+ NR: Not ready
+ SC: Seek completed
+ XC: Transfer completed
+
+ Usage on HP9825
+ ===============
+
+ -slot0 98032_gpio -slot0:98032_gpio:gpio hp9885 -flop <floppy image>
+
+ Usage on HP9845
+ ===============
+
+ -slot0 98032_gpio -slot0:98032_gpio:gpio hp9885 -rom1 massd -flop <floppy image>
+
+ Note on floppy images
+ =====================
+
+ Images can be in two formats: MFI & HPI.
+ A pre-formatted image must be used as formatting is not supported.
+ It's not possible to format images for two reasons: the format
+ command is not implemented yet and no dump of the disk system tape
+ cartridge (HP part no. 09885-90035) is available.
+ The latter is needed during format operation to create the so-called
+ bootstraps on disk, which in turn are needed by 9825 systems.
+ A pre-formatted image (9825_empty.hpi) is available here:
+ http://www.hpmuseum.net/software/9825_discs.zip
+
+ TODO
+ ====
+
+ + Implement missing commands
+ + PRESET
+
+ Acknowledgments
+ ===============
+
+ Thanks to Dyke Shaffer for publishing a lot of HP internal docs
+ and source files regarding the HP9885.
+
+ Fun fact: data I/O between disk and 98032 module is not buffered
+ as there is no RAM in the controller. DMA must be used to keep
+ data flow at disk speed and avoid underruns. The nominal disk
+ data rate is one word every 32 µs.
+
+*********************************************************************/
+
+#include "emu.h"
+#include "hp9885.h"
+#include "formats/hpi_dsk.h"
+
+// Debugging
+#include "logmacro.h"
+#define LOG_TIMER_MASK (LOG_GENERAL << 1)
+#define LOG_TIMER(...) LOGMASKED(LOG_TIMER_MASK, __VA_ARGS__)
+#define LOG_HS_MASK (LOG_TIMER_MASK << 1)
+#define LOG_HS(...) LOGMASKED(LOG_HS_MASK, __VA_ARGS__)
+#define LOG_HEAD_MASK (LOG_HS_MASK << 1)
+#define LOG_HEAD(...) LOGMASKED(LOG_HEAD_MASK, __VA_ARGS__)
+#define LOG_DISK_MASK (LOG_HEAD_MASK << 1)
+#define LOG_DISK(...) LOGMASKED(LOG_DISK_MASK, __VA_ARGS__)
+
+#undef VERBOSE
+//#define VERBOSE (LOG_GENERAL | LOG_HS_MASK | LOG_HEAD_MASK)
+#define VERBOSE 0
+
+// Bit manipulation
+namespace {
+ template<typename T> constexpr T BIT_MASK(unsigned n)
+ {
+ return (T)1U << n;
+ }
+
+ template<typename T> void BIT_CLR(T& w , unsigned n)
+ {
+ w &= ~BIT_MASK<T>(n);
+ }
+
+ template<typename T> void BIT_SET(T& w , unsigned n)
+ {
+ w |= BIT_MASK<T>(n);
+ }
+}
+
+// device type definition
+DEFINE_DEVICE_TYPE(HP9885, hp9885_device, "hp9885" , "HP9885 floppy drive")
+
+// Timers
+enum {
+ FSM_TMR_ID,
+ HEAD_TMR_ID,
+ BIT_BYTE_TMR_ID
+};
+
+// Constants
+constexpr unsigned MAX_TRACK = 76; // Maximum valid track
+constexpr unsigned MAX_SECTOR = 29; // Maximum valid sector
+constexpr unsigned UNKNOWN_TRACK= 0xff; // Current track unknown
+constexpr unsigned STEP_MS = 8; // Step time (ms)
+constexpr unsigned SETTLING_MS = 8; // Settling time (ms)
+constexpr unsigned HEAD_TO_MS = 415; // Head unload timeout (ms)
+constexpr unsigned HD_SETTLE_MS = 50; // Head settling time (ms)
+constexpr uint16_t PASSWORD = 0xae87; // "Password" to enable commands
+constexpr unsigned HALF_CELL_US = 1; // Half bit cell duration (µs)
+constexpr unsigned STATUS_DELAY_US = 100; // Status delay (µs)
+constexpr unsigned MISSED_ID_REVS = 2; // Disk rotations to stop ID search
+
+// Bits in status word
+constexpr unsigned STS_DISK_CHANGED = 2; // Disk changed
+constexpr unsigned STS_WRITE_PROTECT= 3; // Write protection
+constexpr unsigned STS_NOT_RDY = 4; // Drive not ready
+constexpr unsigned STS_SEEK_COMPLETE= 5; // Seek completed
+constexpr unsigned STS_XFER_COMPLETE= 6; // Data transfer completed
+
+// Error codes
+enum : unsigned {
+ ERR_NONE = 0,
+ ERR_NOT_POWERED = 1,
+ ERR_DOOR_OPEN = 2,
+ ERR_NO_DISK = 3,
+ ERR_WR_DISABLED = 4,
+ ERR_ID_ERROR = 5,
+ ERR_TRACK_ERROR = 6,
+ ERR_CRC_ERROR = 7,
+ ERR_HW_FAILURE = 8
+};
+
+hp9885_device::hp9885_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : hp98032_gpio_card_device(mconfig , HP9885 , tag , owner , clock)
+ , m_drive_connector{*this , "floppy"}
+{
+}
+
+hp9885_device::~hp9885_device()
+{
+}
+
+uint16_t hp9885_device::get_jumpers() const
+{
+ return hp98032_gpio_slot_device::JUMPER_2 |
+ hp98032_gpio_slot_device::JUMPER_7 |
+ hp98032_gpio_slot_device::JUMPER_8 |
+ hp98032_gpio_slot_device::JUMPER_B |
+ hp98032_gpio_slot_device::JUMPER_E |
+ hp98032_gpio_slot_device::JUMPER_F;
+}
+
+uint16_t hp9885_device::input_r() const
+{
+ uint16_t tmp = m_input;
+ if (m_obf) {
+ tmp |= m_output;
+ LOG_HS("DATA OUT %04x\n" , tmp);
+ }
+ return tmp;
+}
+
+uint8_t hp9885_device::ext_status_r() const
+{
+ return 0;
+}
+
+void hp9885_device::output_w(uint16_t data)
+{
+ m_input = data;
+}
+
+void hp9885_device::ext_control_w(uint8_t data)
+{
+ LOG_HS("EXT CTRL %u\n" , data);
+ if (BIT(data , 0) &&
+ !BIT(m_status , STS_XFER_COMPLETE) &&
+ (m_op == OP_READ || m_op == OP_WRITE)) {
+ // CTL0 terminates current data transfer
+ LOG("xfer terminated\n");
+ BIT_SET(m_status , STS_XFER_COMPLETE);
+ // Prepare to output status
+ set_output();
+ }
+}
+
+WRITE_LINE_MEMBER(hp9885_device::pctl_w)
+{
+ m_pctl = state;
+ if (m_pctl) {
+ if (!m_outputting) {
+ set_ibf(true);
+ }
+ } else {
+ LOG_HS("DATA IN %04x\n" , m_input);
+ new_word();
+ }
+ update_busy();
+}
+
+WRITE_LINE_MEMBER(hp9885_device::io_w)
+{
+ LOG_HS("I/O = %d\n" , state);
+}
+
+WRITE_LINE_MEMBER(hp9885_device::preset_w)
+{
+ LOG("PRESET = %d\n" , state);
+}
+
+static const floppy_format_type hp9885_floppy_formats[] = {
+ FLOPPY_MFI_FORMAT,
+ FLOPPY_HPI_FORMAT,
+ nullptr
+};
+
+void hp9885_device::device_add_mconfig(machine_config &config)
+{
+ FLOPPY_CONNECTOR(config , "floppy" , "8ssdd" , FLOPPY_8_SSDD , true , hp9885_floppy_formats).set_fixed(true);
+}
+
+void hp9885_device::device_start()
+{
+ save_item(NAME(m_input));
+ save_item(NAME(m_output));
+ save_item(NAME(m_status));
+ save_item(NAME(m_fsm_state));
+ save_item(NAME(m_head_state));
+ save_item(NAME(m_op));
+ save_item(NAME(m_pctl));
+ save_item(NAME(m_ibf));
+ save_item(NAME(m_obf));
+ save_item(NAME(m_outputting));
+ save_item(NAME(m_had_transition));
+ save_item(NAME(m_dskchg));
+ save_item(NAME(m_track));
+ save_item(NAME(m_seek_track));
+ save_item(NAME(m_seek_sector));
+ save_item(NAME(m_sector_cnt));
+ save_item(NAME(m_word_cnt));
+ save_item(NAME(m_rev_cnt));
+ save_item(NAME(m_am_detector));
+ save_item(NAME(m_crc));
+
+ m_fsm_timer = timer_alloc(FSM_TMR_ID);
+ m_head_timer = timer_alloc(HEAD_TMR_ID);
+ m_bit_byte_timer = timer_alloc(BIT_BYTE_TMR_ID);
+
+ m_drive = m_drive_connector->get_device();
+
+ m_drive->setup_ready_cb(floppy_image_device::ready_cb(&hp9885_device::floppy_ready_cb , this));
+ m_drive->setup_index_pulse_cb(floppy_image_device::index_pulse_cb(&hp9885_device::floppy_index_cb , this));
+}
+
+void hp9885_device::device_reset()
+{
+ eir_w(0);
+ psts_w(1);
+ m_dskchg = true;
+ m_obf = false;
+ recalibrate();
+ m_seek_track = 0;
+ m_seek_sector = 0;
+ m_fsm_state = FSM_RECALIBRATING;
+ set_state(FSM_IDLE);
+}
+
+void hp9885_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+{
+ LOG_TIMER("Tmr %.06f ID %d FSM %d HD %d\n" , machine().time().as_double() , id , m_fsm_state , m_head_state);
+
+ switch (id) {
+ case FSM_TMR_ID:
+ do_FSM();
+ break;
+
+ case HEAD_TMR_ID:
+ if (m_head_state == HEAD_SETTLING) {
+ LOG_HEAD("%.06f Head loaded\n" , machine().time().as_double());
+ m_head_state = HEAD_LOADED;
+ // Trigger actions to be done on head loading
+ do_FSM();
+ m_head_timer->adjust(attotime::from_msec(HEAD_TO_MS - HD_SETTLE_MS));
+ } else {
+ LOG_HEAD("%.06f Head unloaded\n" , machine().time().as_double());
+ m_head_state = HEAD_UNLOADED;
+ }
+ break;
+
+ case BIT_BYTE_TMR_ID:
+ {
+ switch (m_fsm_state) {
+ case FSM_WAIT_ID_AM:
+ case FSM_WAIT_DATA_AM:
+ {
+ attotime edge;
+ attotime tm;
+ edge = m_drive->get_next_transition(m_pll.ctime);
+ bool half_bit = m_pll.feed_read_data(tm , edge , attotime::never);
+ m_am_detector <<= 1;
+ m_am_detector |= half_bit;
+ if (m_am_detector == 0x55552a54) {
+ // ID AM
+ // CDCDCDCDCDCDCDCD
+ // 0 0 0 0 1 1 1 0
+ // 0 1 1 1 0 0 0 0
+ LOG_DISK("Got ID AM\n");
+ preset_crc();
+ m_word_cnt = 2;
+ set_state(FSM_RD_ID);
+ } else if (m_am_detector == 0x55552a44) {
+ // DATA AM
+ // CDCDCDCDCDCDCDCD
+ // 0 0 0 0 1 0 1 0
+ // 0 1 1 1 0 0 0 0
+ LOG_DISK("Got Data AM\n");
+ if (m_fsm_state == FSM_WAIT_DATA_AM) {
+ m_rev_cnt = 0;
+ if (BIT(m_status , STS_XFER_COMPLETE)) {
+ output_status();
+ return;
+ } else {
+ preset_crc();
+ m_word_cnt = 129;
+ if (m_op == OP_READ) {
+ set_state(FSM_RD_DATA);
+ } else {
+ set_state(FSM_WR_DATA);
+ m_pll.start_writing(m_pll.ctime);
+ m_had_transition = false;
+ wr_word(m_input);
+ set_ibf(false);
+ }
+ }
+ }
+ }
+ }
+ break;
+
+ case FSM_RD_ID:
+ {
+ // This is needed when state is switched to one of the AM waiting states
+ m_am_detector = 0;
+ auto word = rd_word();
+ m_word_cnt--;
+ LOG_DISK("W %04x C %u\n" , word , m_word_cnt);
+ if (m_word_cnt && word != ((m_seek_sector << 8) | m_track)) {
+ set_state(FSM_WAIT_ID_AM);
+ } else if (m_word_cnt == 0) {
+ if (m_crc) {
+ LOG_DISK("Wrong CRC in ID\n");
+ set_state(FSM_WAIT_ID_AM);
+ } else {
+ LOG_DISK("Sector found\n");
+ set_state(FSM_WAIT_DATA_AM);
+ }
+ }
+ }
+ break;
+
+ case FSM_RD_DATA:
+ {
+ auto word = rd_word();
+ m_word_cnt--;
+ LOG_DISK("W %04x C %u\n" , word , m_word_cnt);
+ if (m_word_cnt >= 1) {
+ if (!BIT(m_status , STS_XFER_COMPLETE)) {
+ m_output = word;
+ m_obf = true;
+ update_busy();
+ }
+ } else if (m_word_cnt == 0) {
+ if (m_crc) {
+ LOG_DISK("Wrong CRC in data\n");
+ }
+ // Move to next sector
+ adv_sector();
+ if (BIT(m_status , STS_XFER_COMPLETE) || m_sector_cnt == 0) {
+ BIT_SET(m_status , STS_XFER_COMPLETE);
+ output_status();
+ } else {
+ set_state(FSM_POSITIONING);
+ do_FSM();
+ }
+ return;
+ }
+ }
+ break;
+
+ case FSM_WR_DATA:
+ {
+ m_word_cnt--;
+ if (m_word_cnt > 1) {
+ if (BIT(m_status , STS_XFER_COMPLETE)) {
+ wr_word(0);
+ } else {
+ wr_word(m_input);
+ if (m_word_cnt > 2) {
+ set_ibf(false);
+ }
+ }
+ } else if (m_word_cnt == 1) {
+ wr_word(m_crc);
+ } else {
+ m_pll.stop_writing(m_drive , m_pll.ctime);
+ // Move to next sector
+ adv_sector();
+ if (BIT(m_status , STS_XFER_COMPLETE) || m_sector_cnt == 0) {
+ BIT_SET(m_status , STS_XFER_COMPLETE);
+ output_status();
+ } else {
+ set_ibf(false);
+ set_state(FSM_POSITIONING);
+ do_FSM();
+ }
+ return;
+ }
+ }
+ break;
+
+ default:
+ LOG("Invalid FSM state %d\n" , m_fsm_state);
+ set_state(FSM_IDLE);
+ return;
+ }
+ timer.adjust(m_pll.ctime - machine().time());
+ }
+ break;
+ }
+}
+
+void hp9885_device::floppy_ready_cb(floppy_image_device *floppy , int state)
+{
+ LOG("ready %d\n" , state);
+ if (state) {
+ // drive not ready
+ m_dskchg = true;
+ }
+}
+
+void hp9885_device::floppy_index_cb(floppy_image_device *floppy , int state)
+{
+ if (state && m_rev_cnt && --m_rev_cnt == 0) {
+ // Sector not found
+ LOG("Sector not found\n");
+ stop_rdwr();
+ set_error(ERR_ID_ERROR);
+ output_status(true);
+ }
+}
+
+void hp9885_device::set_state(int new_state)
+{
+ if (m_fsm_state != new_state) {
+ LOG("%.06f FSM %d->%d\n" , machine().time().as_double() , m_fsm_state , new_state);
+ m_fsm_state = new_state;
+ if (m_fsm_state == FSM_IDLE) {
+ m_op = OP_NONE;
+ m_outputting = false;
+ set_ibf(false);
+ m_fsm_timer->reset();
+ stop_rdwr();
+ m_rev_cnt = 0;
+ }
+ }
+}
+
+void hp9885_device::init_status(unsigned unit_no)
+{
+ m_status = unit_no & 3;
+ if (unit_no == 0) {
+ if (m_drive->ready_r()) {
+ BIT_SET(m_status , STS_NOT_RDY);
+ }
+ if (m_dskchg) {
+ BIT_SET(m_status , STS_DISK_CHANGED);
+ }
+ if (m_drive->wpt_r()) {
+ BIT_SET(m_status , STS_WRITE_PROTECT);
+ }
+ } else {
+ // Units 1,2,3 are not present
+ BIT_SET(m_status , STS_NOT_RDY);
+ }
+}
+
+void hp9885_device::encode_error(bool writing)
+{
+ if (m_status & 3) {
+ set_error(ERR_NOT_POWERED);
+ } else if (writing && BIT(m_status , STS_WRITE_PROTECT)) {
+ set_error(ERR_WR_DISABLED);
+ } else if (BIT(m_status , STS_NOT_RDY)) {
+ set_error(ERR_NO_DISK);
+ }
+}
+
+void hp9885_device::set_error(unsigned error_code)
+{
+ m_status = (m_status & 0xff) | (error_code << 8);
+ if (error_code != ERR_NONE) {
+ LOG_HS("EIR 1\n");
+ eir_w(1);
+ psts_w(0);
+ } else {
+ LOG_HS("EIR 0\n");
+ eir_w(0);
+ psts_w(1);
+ }
+}
+
+void hp9885_device::new_word()
+{
+ unsigned unit_no = (m_input >> 12) & 3;
+
+ switch (m_fsm_state) {
+ case FSM_IDLE:
+ if (m_input == PASSWORD) {
+ LOG("Got PW\n");
+ set_state(FSM_GOT_PW);
+ } else {
+ LOG("Wrong sequence\n");
+ // TODO:
+ // It probably does nothing IRL
+ }
+ set_ibf(false);
+ break;
+
+ case FSM_GOT_PW:
+ // Decode new command
+ switch (m_input & 0xc000) {
+ case 0x0000:
+ case 0x4000:
+ // Read
+ init_status(unit_no);
+ if (!BIT(m_status , STS_NOT_RDY)) {
+ m_sector_cnt = m_input & 0x0fff;
+ LOG("Read %u sectors @%u:%u\n" , m_sector_cnt , m_seek_track , m_seek_sector);
+ m_op = OP_READ;
+ set_state(FSM_POSITIONING);
+ if (load_head()) {
+ m_fsm_timer->adjust(attotime::zero);
+ }
+ set_output();
+ } else {
+ encode_error(false);
+ output_status();
+ }
+ break;
+
+ case 0x8000:
+ // Write
+ init_status(unit_no);
+ if (!BIT(m_status , STS_NOT_RDY) && !BIT(m_status , STS_WRITE_PROTECT)) {
+ m_sector_cnt = m_input & 0x0fff;
+ LOG("Write %u sectors @%u:%u\n" , m_sector_cnt , m_seek_track , m_seek_sector);
+ m_op = OP_WRITE;
+ set_state(FSM_POSITIONING);
+ if (load_head()) {
+ m_fsm_timer->adjust(attotime::zero);
+ }
+ set_ibf(false);
+ } else {
+ encode_error(true);
+ output_status(true);
+ }
+ break;
+
+ case 0xc000:
+ {
+ // Seek & other commands
+ uint8_t track_no = (m_input >> 5) & 0x7f;
+ uint8_t sect_no = m_input & 0x1f;
+ if (sect_no == 0x1e) {
+ // Format
+ LOG("Format\n");
+ // TODO:
+ } else if (sect_no == 0x1f) {
+ switch (track_no) {
+ case 0x7c:
+ // Step in
+ init_status(unit_no);
+ if (!BIT(m_status , STS_NOT_RDY)) {
+ LOG("Step in\n");
+ m_seek_track = m_track + 1;
+ m_op = OP_STEP_IN;
+ set_state(FSM_SEEKING);
+ if (load_head()) {
+ m_fsm_timer->adjust(attotime::zero);
+ }
+ } else {
+ encode_error(false);
+ output_status();
+ }
+ break;
+
+ case 0x7d:
+ // Write all track
+ LOG("Write all track\n");
+ // TODO:
+ break;
+
+ case 0x7f:
+ // Read status
+ init_status(unit_no);
+ if (!BIT(m_status , STS_NOT_RDY) && BIT(m_status , STS_DISK_CHANGED)) {
+ LOG("Get status DSKCHG\n");
+ m_op = OP_GET_STATUS;
+ set_state(FSM_POSITIONING);
+ if (load_head()) {
+ m_fsm_timer->adjust(attotime::zero);
+ }
+ } else {
+ LOG("Get status !DSKCHG\n");
+ encode_error(false);
+ output_status();
+ }
+ break;
+
+ default:
+ LOG("Unknown command %02x\n" , track_no);
+ }
+ } else {
+ // Plain seek
+ LOG("Seek to %u:%u\n" , track_no , sect_no);
+ m_seek_track = track_no;
+ m_seek_sector = sect_no;
+ set_state(FSM_IDLE);
+ }
+ }
+ break;
+ }
+ break;
+
+ case FSM_RD_STATUS1:
+ set_error(ERR_NONE);
+ set_state(FSM_RD_STATUS2);
+ m_outputting = false;
+ m_obf = false;
+ break;
+
+ case FSM_RD_STATUS2:
+ set_state(FSM_IDLE);
+ break;
+
+ case FSM_RD_DATA:
+ m_obf = false;
+ break;
+
+ default:
+ if (m_op != OP_WRITE) {
+ LOG("Got data in state %d!\n" , m_fsm_state);
+ }
+ }
+}
+
+void hp9885_device::do_FSM()
+{
+ switch (m_fsm_state) {
+ case FSM_RECALIBRATING:
+ // Keep head loaded
+ load_head();
+ if (m_drive->trk00_r()) {
+ one_step(true);
+ } else {
+ set_state(FSM_POSITIONING);
+ m_fsm_timer->adjust(attotime::from_msec(SETTLING_MS));
+ m_track = 0;
+ }
+ break;
+
+ case FSM_SETTLING:
+ if (m_op == OP_READ || m_op == OP_WRITE) {
+ // Set seek complete
+ BIT_SET(m_status , STS_SEEK_COMPLETE);
+ if (m_sector_cnt--) {
+ m_rev_cnt = MISSED_ID_REVS;
+ set_state(FSM_WAIT_ID_AM);
+ start_rd();
+ } else {
+ output_status();
+ }
+ } else if (m_op == OP_STEP_IN) {
+ // Step IN
+ // Set seek complete
+ BIT_SET(m_status , STS_SEEK_COMPLETE);
+ output_status();
+ } else {
+ // Get status
+ output_status();
+ }
+ break;
+
+ case FSM_POSITIONING:
+ case FSM_SEEKING:
+ // Keep head loaded
+ load_head();
+ // Need recalibration?
+ if (m_track == UNKNOWN_TRACK) {
+ set_state(FSM_RECALIBRATING);
+ m_fsm_timer->adjust(attotime::zero);
+ } else if (m_seek_track != m_track) {
+ set_state(FSM_SEEKING);
+ one_step(m_seek_track < m_track);
+ } else {
+ if (m_fsm_state == FSM_SEEKING) {
+ m_fsm_timer->adjust(attotime::from_msec(SETTLING_MS));
+ } else {
+ m_fsm_timer->adjust(attotime::zero);
+ }
+ set_state(FSM_SETTLING);
+ }
+ break;
+
+ case FSM_STATUS_DELAY:
+ output_status();
+ break;
+
+ default:
+ LOG("Invalid state=%d\n" , m_fsm_state);
+ set_state(FSM_IDLE);
+ }
+ update_busy();
+}
+
+bool hp9885_device::load_head()
+{
+ m_dskchg = false;
+
+ switch (m_head_state) {
+ case HEAD_UNLOADED:
+ case HEAD_SETTLING:
+ LOG_HEAD("%.06f Loading head..\n" , machine().time().as_double());
+ m_head_state = HEAD_SETTLING;
+ m_head_timer->adjust(attotime::from_msec(HD_SETTLE_MS));
+ return false;
+
+ case HEAD_LOADED:
+ LOG_HEAD("%.06f Keep head loaded\n" , machine().time().as_double());
+ m_head_timer->adjust(attotime::from_msec(HEAD_TO_MS));
+ return true;
+
+ default:
+ LOG("Invalid head state %d\n" , m_head_state);
+ m_head_state = HEAD_UNLOADED;
+ return false;
+ }
+}
+
+void hp9885_device::recalibrate()
+{
+ m_track = UNKNOWN_TRACK;
+}
+
+void hp9885_device::one_step(bool outward)
+{
+ if (outward) {
+ if (m_track > 0) {
+ m_track--;
+ }
+ } else {
+ if (m_track < MAX_TRACK) {
+ m_track++;
+ }
+ }
+ LOG_HEAD("%.06f Step to trk %u\n" , machine().time().as_double() , m_track);
+ m_drive->dir_w(outward);
+ m_drive->stp_w(0);
+ m_drive->stp_w(1);
+ m_fsm_timer->adjust(attotime::from_msec(STEP_MS));
+}
+
+void hp9885_device::adv_sector()
+{
+ if (++m_seek_sector > MAX_SECTOR) {
+ m_seek_sector = 0;
+ if (m_seek_track < MAX_TRACK) {
+ m_seek_track++;
+ }
+ }
+}
+
+void hp9885_device::start_rd()
+{
+ m_pll.set_clock(attotime::from_usec(HALF_CELL_US));
+ m_pll.read_reset(machine().time());
+ m_bit_byte_timer->adjust(attotime::zero);
+ m_am_detector = 0;
+}
+
+void hp9885_device::stop_rdwr()
+{
+ m_bit_byte_timer->reset();
+}
+
+uint16_t hp9885_device::rd_word()
+{
+ uint16_t word = 0;
+ for (unsigned i = 0; i < 16; ++i) {
+ attotime edge;
+ attotime tm;
+ edge = m_drive->get_next_transition(m_pll.ctime);
+ // Read & discard clock bit
+ m_pll.feed_read_data(tm , edge , attotime::never);
+ edge = m_drive->get_next_transition(m_pll.ctime);
+ bool data_bit = m_pll.feed_read_data(tm , edge , attotime::never);
+ word >>= 1;
+ if (data_bit) {
+ BIT_SET(word , 15);
+ }
+ update_crc(data_bit);
+ }
+ return word;
+}
+
+void hp9885_device::wr_word(uint16_t word)
+{
+ for (unsigned i = 0; i < 16; ++i) {
+ bool data_bit = BIT(word , i);
+ bool clock_bit = !data_bit && !m_had_transition;
+ m_had_transition = data_bit || clock_bit;
+ attotime dummy;
+
+ m_pll.write_next_bit(clock_bit , dummy , nullptr , attotime::never);
+ m_pll.write_next_bit(data_bit , dummy , nullptr , attotime::never);
+ update_crc(data_bit);
+ }
+ m_pll.commit(m_drive , m_pll.ctime);
+}
+
+void hp9885_device::preset_crc()
+{
+ m_crc = ~0;
+}
+
+void hp9885_device::update_crc(bool bit)
+{
+ bool crc_x15 = BIT(m_crc , 0);
+ m_crc >>= 1;
+ if (bit ^ crc_x15) {
+ m_crc ^= 0x8408;
+ }
+}
+
+void hp9885_device::set_ibf(bool state)
+{
+ m_ibf = state;
+ update_busy();
+}
+
+void hp9885_device::set_output()
+{
+ m_outputting = true;
+ m_obf = false;
+ set_ibf(false);
+}
+
+void hp9885_device::output_status(bool delayed)
+{
+ stop_rdwr();
+ if (delayed) {
+ set_output();
+ set_state(FSM_STATUS_DELAY);
+ m_fsm_timer->adjust(attotime::from_usec(STATUS_DELAY_US));
+ } else {
+ set_state(FSM_RD_STATUS1);
+ m_outputting = true;
+ m_obf = true;
+ // Set status in output buffer
+ m_output = m_status;
+ set_ibf(false);
+ }
+}
+
+void hp9885_device::update_busy()
+{
+ bool busy = (!m_outputting && m_ibf) || (m_outputting && m_pctl && m_obf);
+ LOG_HS("PCTL %d BUSY %d OUT %d IBF %d OBF %d\n" , m_pctl , busy , m_outputting , m_ibf , m_obf);
+ pflg_w(!busy);
+}
diff --git a/src/devices/bus/hp9845_io/hp9885.h b/src/devices/bus/hp9845_io/hp9885.h
new file mode 100644
index 00000000000..edb705c2504
--- /dev/null
+++ b/src/devices/bus/hp9845_io/hp9885.h
@@ -0,0 +1,136 @@
+// license:BSD-3-Clause
+// copyright-holders: F. Ulivi
+/*********************************************************************
+
+ hp9885.h
+
+ HP9885M 8" floppy drive
+
+*********************************************************************/
+
+#ifndef MAME_BUS_HP9845_IO_HP9885_H
+#define MAME_BUS_HP9845_IO_HP9885_H
+
+#pragma once
+
+#include "98032.h"
+#include "imagedev/floppy.h"
+#include "machine/fdc_pll.h"
+
+class hp9885_device : public hp98032_gpio_card_device
+{
+public:
+ hp9885_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ virtual ~hp9885_device();
+
+ // hp98032_gpio_card_device overrides
+ virtual uint16_t get_jumpers() const override;
+ virtual uint16_t input_r() const override;
+ virtual uint8_t ext_status_r() const override;
+ virtual void output_w(uint16_t data) override;
+ virtual void ext_control_w(uint8_t data) override;
+ virtual DECLARE_WRITE_LINE_MEMBER(pctl_w) override;
+ virtual DECLARE_WRITE_LINE_MEMBER(io_w) override;
+ virtual DECLARE_WRITE_LINE_MEMBER(preset_w) override;
+
+protected:
+ // device-level overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual void device_start() override;
+ virtual void device_reset() override;
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+
+private:
+ // FSM states
+ enum {
+ FSM_IDLE,
+ FSM_RECALIBRATING,
+ FSM_SETTLING,
+ FSM_GOT_PW,
+ FSM_POSITIONING,
+ FSM_SEEKING,
+ FSM_STATUS_DELAY,
+ FSM_RD_STATUS1,
+ FSM_RD_STATUS2,
+ FSM_WAIT_ID_AM,
+ FSM_RD_ID,
+ FSM_WAIT_DATA_AM,
+ FSM_RD_DATA,
+ FSM_WR_DATA
+ };
+
+ // Head states
+ enum {
+ HEAD_UNLOADED,
+ HEAD_SETTLING,
+ HEAD_LOADED
+ };
+
+ // Operations
+ enum {
+ OP_NONE,
+ OP_READ,
+ OP_WRITE,
+ OP_STEP_IN,
+ OP_GET_STATUS
+ };
+
+ required_device<floppy_connector> m_drive_connector;
+ floppy_image_device *m_drive;
+ uint16_t m_input;
+ uint16_t m_output;
+ uint16_t m_status;
+ int m_fsm_state;
+ int m_head_state;
+ int m_op;
+ bool m_pctl;
+ bool m_ibf;
+ bool m_obf;
+ bool m_outputting;
+ bool m_had_transition;
+ bool m_dskchg;
+ unsigned m_track;
+ unsigned m_seek_track;
+ unsigned m_seek_sector;
+ unsigned m_sector_cnt;
+ unsigned m_word_cnt;
+ unsigned m_rev_cnt;
+ uint32_t m_am_detector;
+ uint16_t m_crc; // x^15 is stored in LSB
+
+ // Timers
+ emu_timer *m_fsm_timer;
+ emu_timer *m_head_timer;
+ emu_timer *m_bit_byte_timer;
+
+ // PLL
+ fdc_pll_t m_pll;
+
+ void floppy_ready_cb(floppy_image_device *floppy , int state);
+ void floppy_index_cb(floppy_image_device *floppy , int state);
+
+ void set_state(int new_state);
+ void init_status(unsigned unit_no);
+ void encode_error(bool writing);
+ void set_error(unsigned error_code);
+ void new_word();
+ void do_FSM();
+ bool load_head();
+ void recalibrate();
+ void one_step(bool outward);
+ void adv_sector();
+ void start_rd();
+ void stop_rdwr();
+ uint16_t rd_word();
+ void wr_word(uint16_t word);
+ void preset_crc();
+ void update_crc(bool bit);
+ void set_ibf(bool state);
+ void set_output();
+ void output_status(bool delayed = false);
+ void update_busy();
+};
+
+DECLARE_DEVICE_TYPE(HP9885 , hp9885_device)
+
+#endif /* MAME_BUS_HP9845_IO_HP9885_H */
diff --git a/src/devices/bus/hp_dio/hp98265a.cpp b/src/devices/bus/hp_dio/hp98265a.cpp
index baafc4e14eb..c5c28eeda6b 100644
--- a/src/devices/bus/hp_dio/hp98265a.cpp
+++ b/src/devices/bus/hp_dio/hp98265a.cpp
@@ -168,12 +168,12 @@ void dio16_98265a_device::device_reset()
code &= REG_SW1_SELECT_CODE_MASK;
if (!m_installed_io) {
- program_space()->install_readwrite_handler(
+ program_space().install_readwrite_handler(
0x600000 + (code * 0x10000),
0x6007ff + (code * 0x10000),
read16_delegate(FUNC(dio16_98265a_device::io_r), this),
write16_delegate(FUNC(dio16_98265a_device::io_w), this));
- program_space()->install_device(0x6e0020, 0x6e003f, *m_spc, &mb87030_device::map, 0x00ff00ff);
+ program_space().install_device(0x6e0020, 0x6e003f, *m_spc, &mb87030_device::map, 0x00ff00ff);
m_installed_io = true;
}
m_control = 0;
diff --git a/src/devices/bus/hp_dio/hp98603a.cpp b/src/devices/bus/hp_dio/hp98603a.cpp
index bcd5fe3536c..ac04f7479bd 100644
--- a/src/devices/bus/hp_dio/hp98603a.cpp
+++ b/src/devices/bus/hp_dio/hp98603a.cpp
@@ -39,8 +39,9 @@ ROM_START(hp98603a)
ROM_LOAD16_BYTE("98603_80016.bin", 0x70000, 32768, CRC(d887acab) SHA1(a9cbbaa5f053f374d6cbda614b727df35a61ace1))
ROM_END
-MACHINE_CONFIG_START(dio16_98603a_device::device_add_mconfig)
-MACHINE_CONFIG_END
+void dio16_98603a_device::device_add_mconfig(machine_config &config)
+{
+}
const tiny_rom_entry *dio16_98603a_device::device_rom_region() const
{
diff --git a/src/devices/bus/hp_dio/hp98603b.cpp b/src/devices/bus/hp_dio/hp98603b.cpp
index 4da45470d0e..6c8cff6b95a 100644
--- a/src/devices/bus/hp_dio/hp98603b.cpp
+++ b/src/devices/bus/hp_dio/hp98603b.cpp
@@ -34,8 +34,9 @@ ROM_START(hp98603b)
ROM_LOAD16_BYTE("u14.bin", 0xa0001, 65536, CRC(96527d4e) SHA1(6706ab97eab4465ea4fa2d6b07e8107468e83818))
ROM_END
-MACHINE_CONFIG_START(dio16_98603b_device::device_add_mconfig)
-MACHINE_CONFIG_END
+void dio16_98603b_device::device_add_mconfig(machine_config &config)
+{
+}
const tiny_rom_entry *dio16_98603b_device::device_rom_region() const
{
diff --git a/src/devices/bus/hp_dio/hp98620.cpp b/src/devices/bus/hp_dio/hp98620.cpp
index 2fdc8e0f932..fcd0e9d95aa 100644
--- a/src/devices/bus/hp_dio/hp98620.cpp
+++ b/src/devices/bus/hp_dio/hp98620.cpp
@@ -74,7 +74,7 @@ void dio16_98620_device::device_reset()
{
if (!m_installed_io)
{
- program_space()->install_readwrite_handler(0x500000, 0x50020f,
+ program_space().install_readwrite_handler(0x500000, 0x50020f,
read16_delegate(FUNC(dio16_98620_device::dma_r), this),
write16_delegate(FUNC(dio16_98620_device::dma_w), this));
m_installed_io = true;
@@ -343,9 +343,9 @@ void dio16_98620_device::dma_transfer(int channel)
if (m_regs[channel].dma_out) {
- dmack_w_out(channel, program_space()->read_byte(m_regs[channel].address++));
+ dmack_w_out(channel, program_space().read_byte(m_regs[channel].address++));
} else {
- program_space()->write_byte(m_regs[channel].address++, dmack_r_out(channel));
+ program_space().write_byte(m_regs[channel].address++, dmack_r_out(channel));
}
diff --git a/src/devices/bus/hp_dio/hp98643.cpp b/src/devices/bus/hp_dio/hp98643.cpp
index 5a439144d6d..57bc4d1a283 100644
--- a/src/devices/bus/hp_dio/hp98643.cpp
+++ b/src/devices/bus/hp_dio/hp98643.cpp
@@ -105,7 +105,7 @@ void dio16_98643_device::device_reset()
uint32_t baseaddr = 0x600000 + (code << 16);
- program_space()->install_device(baseaddr, baseaddr + 0xffff,
+ program_space().install_device(baseaddr, baseaddr + 0xffff,
*this, &dio16_98643_device::addrmap);
m_installed_io = true;
}
diff --git a/src/devices/bus/hp_dio/hp_dio.cpp b/src/devices/bus/hp_dio/hp_dio.cpp
index dfa228dc8af..c2cbfa8e941 100644
--- a/src/devices/bus/hp_dio/hp_dio.cpp
+++ b/src/devices/bus/hp_dio/hp_dio.cpp
@@ -104,8 +104,7 @@ dio16_device::dio16_device(const machine_config &mconfig, const char *tag, devic
dio16_device::dio16_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_maincpu(*this, finder_base::DUMMY_TAG),
- m_prgspace(nullptr),
+ m_prgspace(*this, finder_base::DUMMY_TAG, -1),
m_irq1_out_cb(*this),
m_irq2_out_cb(*this),
m_irq3_out_cb(*this),
@@ -136,8 +135,7 @@ void dio16_device::device_start()
m_dmar0_out_cb.resolve_safe();
m_dmar1_out_cb.resolve_safe();
- m_prgspace = &m_maincpu->space(AS_PROGRAM);
- m_prgwidth = m_maincpu->space_config(AS_PROGRAM)->data_width();
+ m_prgwidth = m_prgspace->data_width();
save_item(NAME(m_irq));
save_item(NAME(m_dmar));
diff --git a/src/devices/bus/hp_dio/hp_dio.h b/src/devices/bus/hp_dio/hp_dio.h
index ddf95e9570c..ee680b08d4b 100644
--- a/src/devices/bus/hp_dio/hp_dio.h
+++ b/src/devices/bus/hp_dio/hp_dio.h
@@ -65,7 +65,7 @@ public:
// construction/destruction
dio16_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// inline configuration
- template <typename T> void set_cputag(T &&tag) { m_maincpu.set_tag(std::forward<T>(tag)); }
+ template <typename T> void set_program_space(T &&tag, int spacenum) { m_prgspace.set_tag(std::forward<T>(tag), spacenum); }
// callback configuration
auto dmar0_out_cb() { return m_dmar0_out_cb.bind(); }
@@ -89,7 +89,7 @@ public:
void unmap_bank(offs_t start, offs_t end);
void unmap_rom(offs_t start, offs_t end);
- address_space *program_space() { return m_prgspace; }
+ address_space &program_space() { return *m_prgspace; }
// IRQs 1, 2, and 7 are reserved for non-bus usage.
@@ -137,11 +137,10 @@ protected:
virtual void device_reset() override;
// internal state
- required_device<cpu_device> m_maincpu;
std::list<device_dio16_card_interface *> m_cards;
// address spaces
- address_space *m_prgspace;
+ required_address_space m_prgspace;
int m_bus_index;
// packed line states
@@ -187,7 +186,7 @@ protected:
virtual void interface_pre_start() override;
int get_index() { return m_index; };
- address_space *program_space() { return m_dio_dev->program_space(); }
+ address_space &program_space() { return m_dio_dev->program_space(); }
DECLARE_WRITE_LINE_MEMBER(irq1_out) { m_dio_dev->set_irq(m_index, 0, state); }
DECLARE_WRITE_LINE_MEMBER(irq2_out) { m_dio_dev->set_irq(m_index, 1, state); }
diff --git a/src/devices/bus/hp_dio/human_interface.cpp b/src/devices/bus/hp_dio/human_interface.cpp
index 9c58672e11d..d7cfad37d50 100644
--- a/src/devices/bus/hp_dio/human_interface.cpp
+++ b/src/devices/bus/hp_dio/human_interface.cpp
@@ -114,11 +114,11 @@ human_interface_device::human_interface_device(const machine_config &mconfig, de
void human_interface_device::device_start()
{
- program_space()->install_readwrite_handler(0x420000, 0x420003, 0x0003, 0xfffc, 0,
+ program_space().install_readwrite_handler(0x420000, 0x420003, 0x0003, 0xfffc, 0,
read8_delegate(FUNC(upi41_cpu_device::upi41_master_r), &(*m_iocpu)),
write8_delegate(FUNC(upi41_cpu_device::upi41_master_w), &(*m_iocpu)), 0x00ff00ff);
- program_space()->install_readwrite_handler(0x470000, 0x47001f, 0x1f, 0xffe0, 0,
+ program_space().install_readwrite_handler(0x470000, 0x47001f, 0x1f, 0xffe0, 0,
read8_delegate(FUNC(human_interface_device::gpib_r), this),
write8_delegate(FUNC(human_interface_device::gpib_w), this), 0x00ff00ff);
@@ -194,7 +194,7 @@ WRITE8_MEMBER(human_interface_device::ieee488_dio_w)
WRITE8_MEMBER(human_interface_device::gpib_w)
{
if (offset & 0x08) {
- m_tms9914->reg8_w(space, offset & 0x07, data);
+ m_tms9914->write(offset & 0x07, data);
return;
}
@@ -234,7 +234,7 @@ READ8_MEMBER(human_interface_device::gpib_r)
uint8_t data = 0xff;
if (offset & 0x8) {
- data = m_tms9914->reg8_r(space, offset & 0x07);
+ data = m_tms9914->read(offset & 0x07);
return data;
}
@@ -360,14 +360,14 @@ void human_interface_device::dmack_w_in(int channel, uint8_t data)
{
if (channel)
return;
- m_tms9914->reg8_w(*program_space(), 7, data);
+ m_tms9914->write(7, data);
}
uint8_t human_interface_device::dmack_r_in(int channel)
{
if (channel || !m_gpib_dma_enable)
return 0xff;
- return m_tms9914->reg8_r(machine().dummy_space(), 7);
+ return m_tms9914->read(7);
}
} // namespace bus::hp_dio
diff --git a/src/devices/bus/ieee488/c2040fdc.h b/src/devices/bus/ieee488/c2040fdc.h
index c73e9826fbf..64239991222 100644
--- a/src/devices/bus/ieee488/c2040fdc.h
+++ b/src/devices/bus/ieee488/c2040fdc.h
@@ -18,22 +18,6 @@
#include "imagedev/floppy.h"
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_C2040_SYNC_CALLBACK(_write) \
- downcast<c2040_fdc_device &>(*device).set_sync_wr_callback(DEVCB_##_write);
-
-#define MCFG_C2040_READY_CALLBACK(_write) \
- downcast<c2040_fdc_device &>(*device).set_ready_wr_callback(DEVCB_##_write);
-
-#define MCFG_C2040_ERROR_CALLBACK(_write) \
- downcast<c2040_fdc_device &>(*device).set_error_wr_callback(DEVCB_##_write);
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -46,9 +30,6 @@ public:
// construction/destruction
c2040_fdc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- template <class Object> devcb_base &set_sync_wr_callback(Object &&cb) { return m_write_sync.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_ready_wr_callback(Object &&cb) { return m_write_ready.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_error_wr_callback(Object &&cb) { return m_write_error.set_callback(std::forward<Object>(cb)); }
auto sync_wr_callback() { return m_write_sync.bind(); }
auto ready_wr_callback() { return m_write_ready.bind(); }
auto error_wr_callback() { return m_write_error.bind(); }
diff --git a/src/devices/bus/ieee488/c8280.cpp b/src/devices/bus/ieee488/c8280.cpp
index 51293bda1d7..63b5cbe2506 100644
--- a/src/devices/bus/ieee488/c8280.cpp
+++ b/src/devices/bus/ieee488/c8280.cpp
@@ -293,30 +293,31 @@ FLOPPY_FORMATS_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c8280_device::device_add_mconfig)
- MCFG_DEVICE_ADD(M6502_DOS_TAG, M6502, XTAL(12'000'000)/8)
- MCFG_DEVICE_PROGRAM_MAP(c8280_main_mem)
+void c8280_device::device_add_mconfig(machine_config &config)
+{
+ M6502(config, m_maincpu, XTAL(12'000'000)/8);
+ m_maincpu->set_addrmap(AS_PROGRAM, &c8280_device::c8280_main_mem);
- MCFG_DEVICE_ADD(M6532_0_TAG, MOS6532_NEW, XTAL(12'000'000)/8)
- MCFG_MOS6530n_IN_PA_CB(READ8(*this, c8280_device, dio_r))
- MCFG_MOS6530n_OUT_PB_CB(WRITE8(*this, c8280_device, dio_w))
+ MOS6532_NEW(config, m_riot0, XTAL(12'000'000)/8);
+ m_riot0->pa_rd_callback().set(FUNC(c8280_device::dio_r));
+ m_riot0->pb_wr_callback().set(FUNC(c8280_device::dio_w));
- MCFG_DEVICE_ADD(M6532_1_TAG, MOS6532_NEW, XTAL(12'000'000)/8)
- MCFG_MOS6530n_IN_PA_CB(READ8(*this, c8280_device, riot1_pa_r))
- MCFG_MOS6530n_OUT_PA_CB(WRITE8(*this, c8280_device, riot1_pa_w))
- MCFG_MOS6530n_IN_PB_CB(READ8(*this, c8280_device, riot1_pb_r))
- MCFG_MOS6530n_OUT_PB_CB(WRITE8(*this, c8280_device, riot1_pb_w))
- MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6502_DOS_TAG, INPUT_LINE_IRQ0))
+ MOS6532_NEW(config, m_riot1, XTAL(12'000'000)/8);
+ m_riot1->pa_rd_callback().set(FUNC(c8280_device::riot1_pa_r));
+ m_riot1->pa_wr_callback().set(FUNC(c8280_device::riot1_pa_w));
+ m_riot1->pb_rd_callback().set(FUNC(c8280_device::riot1_pb_r));
+ m_riot1->pb_wr_callback().set(FUNC(c8280_device::riot1_pb_w));
+ m_riot1->irq_wr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
- MCFG_DEVICE_ADD(M6502_FDC_TAG, M6502, XTAL(12'000'000)/8)
- MCFG_DEVICE_PROGRAM_MAP(c8280_fdc_mem)
+ M6502(config, m_fdccpu, XTAL(12'000'000)/8);
+ m_fdccpu->set_addrmap(AS_PROGRAM, &c8280_device::c8280_fdc_mem);
FD1797(config, m_fdc, XTAL(12'000'000)/6);
m_fdc->intrq_wr_callback().set_inputline(m_fdccpu, M6502_IRQ_LINE);
m_fdc->drq_wr_callback().set_inputline(m_fdccpu, M6502_SET_OVERFLOW);
FLOPPY_CONNECTOR(config, m_floppy0, c8280_floppies, "8dsdd", c8280_device::floppy_formats);
FLOPPY_CONNECTOR(config, m_floppy1, c8280_floppies, "8dsdd", c8280_device::floppy_formats);
-MACHINE_CONFIG_END
+}
//-------------------------------------------------
diff --git a/src/devices/bus/ieee488/hardbox.cpp b/src/devices/bus/ieee488/hardbox.cpp
index 677037c5ba7..0b982ee772d 100644
--- a/src/devices/bus/ieee488/hardbox.cpp
+++ b/src/devices/bus/ieee488/hardbox.cpp
@@ -267,11 +267,12 @@ WRITE8_MEMBER( hardbox_device::ppi1_pc_w )
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(hardbox_device::device_add_mconfig)
+void hardbox_device::device_add_mconfig(machine_config &config)
+{
// basic machine hardware
- MCFG_DEVICE_ADD(Z80_TAG, Z80, XTAL(8'000'000)/2)
- MCFG_DEVICE_PROGRAM_MAP(hardbox_mem)
- MCFG_DEVICE_IO_MAP(hardbox_io)
+ Z80(config, m_maincpu, XTAL(8'000'000)/2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &hardbox_device::hardbox_mem);
+ m_maincpu->set_addrmap(AS_IO, &hardbox_device::hardbox_io);
// devices
i8255_device &ppi0(I8255A(config, I8255_0_TAG));
@@ -285,16 +286,12 @@ MACHINE_CONFIG_START(hardbox_device::device_add_mconfig)
ppi1.in_pc_callback().set(FUNC(hardbox_device::ppi1_pc_r));
ppi1.out_pc_callback().set(FUNC(hardbox_device::ppi1_pc_w));
- MCFG_DEVICE_ADD(CORVUS_HDC_TAG, CORVUS_HDC, 0)
- MCFG_HARDDISK_ADD("harddisk1")
- MCFG_HARDDISK_INTERFACE("corvus_hdd")
- MCFG_HARDDISK_ADD("harddisk2")
- MCFG_HARDDISK_INTERFACE("corvus_hdd")
- MCFG_HARDDISK_ADD("harddisk3")
- MCFG_HARDDISK_INTERFACE("corvus_hdd")
- MCFG_HARDDISK_ADD("harddisk4")
- MCFG_HARDDISK_INTERFACE("corvus_hdd")
-MACHINE_CONFIG_END
+ CORVUS_HDC(config, m_hdc, 0);
+ HARDDISK(config, "harddisk1", "corvus_hdd");
+ HARDDISK(config, "harddisk2", "corvus_hdd");
+ HARDDISK(config, "harddisk3", "corvus_hdd");
+ HARDDISK(config, "harddisk4", "corvus_hdd");
+}
//-------------------------------------------------
diff --git a/src/devices/bus/ieee488/hp9122c.cpp b/src/devices/bus/ieee488/hp9122c.cpp
index 9d7f77fed51..808deae2069 100644
--- a/src/devices/bus/ieee488/hp9122c.cpp
+++ b/src/devices/bus/ieee488/hp9122c.cpp
@@ -376,13 +376,14 @@ void hp9122c_device::cpu_map(address_map &map)
map(0xc000, 0xffff).rom().region("cpu", 0);
}
-MACHINE_CONFIG_START(hp9122c_device::device_add_mconfig)
- MCFG_DEVICE_ADD("cpu" , MC6809 , XTAL(8'000'000))
- MCFG_DEVICE_PROGRAM_MAP(cpu_map)
+void hp9122c_device::device_add_mconfig(machine_config &config)
+{
+ MC6809(config, m_cpu, XTAL(8'000'000));
+ m_cpu->set_addrmap(AS_PROGRAM, &hp9122c_device::cpu_map);
// without this flag, 'DMA' transfer via SYNC instruction
// will not work
- MCFG_QUANTUM_PERFECT_CPU("cpu")
+ config.m_perfect_cpu_quantum = subtag("cpu");
MB8876(config, m_fdc, 8_MHz_XTAL / 4);
m_fdc->intrq_wr_callback().set(FUNC(hp9122c_device::fdc_intrq_w));
@@ -399,11 +400,7 @@ MACHINE_CONFIG_START(hp9122c_device::device_add_mconfig)
m_i8291a->int_write().set(FUNC(hp9122c_device::i8291a_int_w));
m_i8291a->dreq_write().set(FUNC(hp9122c_device::i8291a_dreq_w));
- MCFG_FLOPPY_DRIVE_ADD("floppy0" , hp9122c_floppies , "35hd" , hp9122c_floppy_formats)
- MCFG_FLOPPY_DRIVE_SOUND(true)
- MCFG_SLOT_FIXED(true)
- MCFG_FLOPPY_DRIVE_ADD("floppy1" , hp9122c_floppies , "35hd" , hp9122c_floppy_formats)
- MCFG_FLOPPY_DRIVE_SOUND(true)
- MCFG_SLOT_FIXED(true)
+ FLOPPY_CONNECTOR(config, "floppy0" , hp9122c_floppies , "35hd" , hp9122c_floppy_formats, true).enable_sound(true);
+ FLOPPY_CONNECTOR(config, "floppy1" , hp9122c_floppies , "35hd" , hp9122c_floppy_formats, true).enable_sound(true);
config.set_default_layout(layout_hp9122c);
-MACHINE_CONFIG_END
+}
diff --git a/src/devices/bus/ieee488/ieee488.h b/src/devices/bus/ieee488/ieee488.h
index e734b356d5b..cb29783d294 100644
--- a/src/devices/bus/ieee488/ieee488.h
+++ b/src/devices/bus/ieee488/ieee488.h
@@ -12,8 +12,12 @@
#pragma once
+void cbm_ieee488_devices(device_slot_interface &device);
+void hp_ieee488_devices(device_slot_interface &device);
+void remote488_devices(device_slot_interface &device);
-
+DECLARE_DEVICE_TYPE(IEEE488, ieee488_device)
+DECLARE_DEVICE_TYPE(IEEE488_SLOT, ieee488_slot_device)
//**************************************************************************
// MACROS / CONSTANTS
@@ -24,65 +28,6 @@
//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_IEEE488_BUS_ADD() \
- MCFG_DEVICE_ADD(IEEE488_TAG, IEEE488, 0)
-
-
-#define MCFG_IEEE488_EOI_CALLBACK(_write) \
- downcast<ieee488_device *>(device)->set_eoi_callback(DEVCB_##_write);
-
-#define MCFG_IEEE488_DAV_CALLBACK(_write) \
- downcast<ieee488_device *>(device)->set_dav_callback(DEVCB_##_write);
-
-#define MCFG_IEEE488_NRFD_CALLBACK(_write) \
- downcast<ieee488_device *>(device)->set_nrfd_callback(DEVCB_##_write);
-
-#define MCFG_IEEE488_NDAC_CALLBACK(_write) \
- downcast<ieee488_device *>(device)->set_ndac_callback(DEVCB_##_write);
-
-#define MCFG_IEEE488_IFC_CALLBACK(_write) \
- downcast<ieee488_device *>(device)->set_ifc_callback(DEVCB_##_write);
-
-#define MCFG_IEEE488_SRQ_CALLBACK(_write) \
- downcast<ieee488_device *>(device)->set_srq_callback(DEVCB_##_write);
-
-#define MCFG_IEEE488_ATN_CALLBACK(_write) \
- downcast<ieee488_device *>(device)->set_atn_callback(DEVCB_##_write);
-
-#define MCFG_IEEE488_REN_CALLBACK(_write) \
- downcast<ieee488_device *>(device)->set_ren_callback(DEVCB_##_write);
-
-// This CB reports changes to the DIO lines on the bus (whose value comes from
-// ANDing the DIO lines of each device on the bus)
-// This CB is needed by those controllers that start a parallel poll and wait
-// for some condition to be set by devices on the DIO lines (e.g. PHI controller).
-#define MCFG_IEEE488_DIO_CALLBACK(_write) \
- downcast<ieee488_device *>(device)->set_dio_callback(DEVCB_##_write);
-
-#define MCFG_IEEE488_SLOT_ADD(_tag, _address, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, IEEE488_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- downcast<ieee488_slot_device *>(device)->set_address(_address);
-
-
-#define MCFG_CBM_IEEE488_ADD(_default_drive) \
- MCFG_IEEE488_SLOT_ADD("ieee4", 4, cbm_ieee488_devices, nullptr) \
- MCFG_IEEE488_SLOT_ADD("ieee8", 8, cbm_ieee488_devices, _default_drive) \
- MCFG_IEEE488_SLOT_ADD("ieee9", 9, cbm_ieee488_devices, nullptr) \
- MCFG_IEEE488_SLOT_ADD("ieee10", 10, cbm_ieee488_devices, nullptr) \
- MCFG_IEEE488_SLOT_ADD("ieee11", 11, cbm_ieee488_devices, nullptr) \
- MCFG_IEEE488_SLOT_ADD("ieee12", 12, cbm_ieee488_devices, nullptr) \
- MCFG_IEEE488_SLOT_ADD("ieee13", 13, cbm_ieee488_devices, nullptr) \
- MCFG_IEEE488_SLOT_ADD("ieee14", 14, cbm_ieee488_devices, nullptr) \
- MCFG_IEEE488_SLOT_ADD("ieee15", 15, cbm_ieee488_devices, nullptr) \
- MCFG_IEEE488_BUS_ADD()
-
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -95,17 +40,7 @@ class ieee488_device : public device_t
{
public:
// construction/destruction
- ieee488_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
- template <class Object> devcb_base &set_eoi_callback(Object &&cb) { return m_write_eoi.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_dav_callback(Object &&cb) { return m_write_dav.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_nrfd_callback(Object &&cb) { return m_write_nrfd.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_ndac_callback(Object &&cb) { return m_write_ndac.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_ifc_callback(Object &&cb) { return m_write_ifc.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_srq_callback(Object &&cb) { return m_write_srq.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_atn_callback(Object &&cb) { return m_write_atn.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_ren_callback(Object &&cb) { return m_write_ren.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_dio_callback(Object &&cb) { return m_write_dio.set_callback(std::forward<Object>(cb)); }
+ ieee488_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
auto eoi_callback() { return m_write_eoi.bind(); }
auto dav_callback() { return m_write_dav.bind(); }
@@ -115,6 +50,11 @@ public:
auto srq_callback() { return m_write_srq.bind(); }
auto atn_callback() { return m_write_atn.bind(); }
auto ren_callback() { return m_write_ren.bind(); }
+
+ // This CB reports changes to the DIO lines on the bus (whose value comes from
+ // ANDing the DIO lines of each device on the bus)
+ // This CB is needed by those controllers that start a parallel poll and wait
+ // for some condition to be set by devices on the DIO lines (e.g. PHI controller).
auto dio_callback() { return m_write_dio.bind(); }
void add_device(ieee488_slot_device *slot, device_t *target);
@@ -154,6 +94,20 @@ public:
void atn_w(device_t *device, int state) { set_signal(device, ATN, state); }
void ren_w(device_t *device, int state) { set_signal(device, REN, state); }
+ // helper functions
+ static void add_cbm_devices(machine_config &config, const char *_default_drive)
+ {
+ IEEE488_SLOT(config, "ieee4", 4, cbm_ieee488_devices, nullptr);
+ IEEE488_SLOT(config, "ieee8", 8, cbm_ieee488_devices, _default_drive);
+ IEEE488_SLOT(config, "ieee9", 9, cbm_ieee488_devices, nullptr);
+ IEEE488_SLOT(config, "ieee10", 10, cbm_ieee488_devices, nullptr);
+ IEEE488_SLOT(config, "ieee11", 11, cbm_ieee488_devices, nullptr);
+ IEEE488_SLOT(config, "ieee12", 12, cbm_ieee488_devices, nullptr);
+ IEEE488_SLOT(config, "ieee13", 13, cbm_ieee488_devices, nullptr);
+ IEEE488_SLOT(config, "ieee14", 14, cbm_ieee488_devices, nullptr);
+ IEEE488_SLOT(config, "ieee15", 15, cbm_ieee488_devices, nullptr);
+ IEEE488(config, IEEE488_TAG);
+ }
protected:
enum
{
@@ -208,8 +162,6 @@ private:
uint8_t m_dio;
};
-DECLARE_DEVICE_TYPE(IEEE488, ieee488_device)
-
// ======================> ieee488_slot_device
@@ -218,6 +170,16 @@ class ieee488_slot_device : public device_t,
{
public:
// construction/destruction
+ template <typename T>
+ ieee488_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, int address, T &&opts, char const *dflt)
+ : ieee488_slot_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ set_address(address);
+ }
ieee488_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
static void add_cbm_slot(machine_config &config, const char *_tag, int _address, const char *_def_slot);
@@ -244,8 +206,6 @@ protected:
int m_address;
};
-DECLARE_DEVICE_TYPE(IEEE488_SLOT, ieee488_slot_device)
-
// ======================> device_ieee488_interface
@@ -280,10 +240,4 @@ private:
device_ieee488_interface *m_next;
};
-
-void cbm_ieee488_devices(device_slot_interface &device);
-void hp_ieee488_devices(device_slot_interface &device);
-void remote488_devices(device_slot_interface &device);
-
-
#endif // MAME_BUS_IEEE488_IEEE488_H
diff --git a/src/devices/bus/ieee488/remote488.cpp b/src/devices/bus/ieee488/remote488.cpp
index a9baafc9320..b5eb0041632 100644
--- a/src/devices/bus/ieee488/remote488.cpp
+++ b/src/devices/bus/ieee488/remote488.cpp
@@ -249,9 +249,10 @@ remote488_device::remote488_device(const machine_config &mconfig, const char *ta
{
}
-MACHINE_CONFIG_START(remote488_device::device_add_mconfig)
- MCFG_DEVICE_ADD("stream", BITBANGER, 0)
-MACHINE_CONFIG_END
+void remote488_device::device_add_mconfig(machine_config &config)
+{
+ BITBANGER(config, m_stream, 0);
+}
void remote488_device::ieee488_eoi(int state)
{
diff --git a/src/devices/bus/ieee488/softbox.cpp b/src/devices/bus/ieee488/softbox.cpp
index 63208f7ce9e..e2041d3e4e2 100644
--- a/src/devices/bus/ieee488/softbox.cpp
+++ b/src/devices/bus/ieee488/softbox.cpp
@@ -232,11 +232,12 @@ DEVICE_INPUT_DEFAULTS_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(softbox_device::device_add_mconfig)
+void softbox_device::device_add_mconfig(machine_config &config)
+{
// basic machine hardware
- MCFG_DEVICE_ADD(Z80_TAG, Z80, XTAL(8'000'000)/2)
- MCFG_DEVICE_PROGRAM_MAP(softbox_mem)
- MCFG_DEVICE_IO_MAP(softbox_io)
+ Z80(config, m_maincpu, XTAL(8'000'000)/2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &softbox_device::softbox_mem);
+ m_maincpu->set_addrmap(AS_IO, &softbox_device::softbox_io);
// devices
i8251_device &i8251(I8251(config, I8251_TAG, 0));
@@ -264,17 +265,13 @@ MACHINE_CONFIG_START(softbox_device::device_add_mconfig)
m_dbrg->fr_handler().set(I8251_TAG, FUNC(i8251_device::write_rxc));
m_dbrg->ft_handler().set(I8251_TAG, FUNC(i8251_device::write_txc));
- MCFG_DEVICE_ADD(m_hdc, CORVUS_HDC, 0)
- MCFG_HARDDISK_ADD("harddisk1")
- MCFG_HARDDISK_INTERFACE("corvus_hdd")
- MCFG_HARDDISK_ADD("harddisk2")
- MCFG_HARDDISK_INTERFACE("corvus_hdd")
- MCFG_HARDDISK_ADD("harddisk3")
- MCFG_HARDDISK_INTERFACE("corvus_hdd")
- MCFG_HARDDISK_ADD("harddisk4")
- MCFG_HARDDISK_INTERFACE("corvus_hdd")
- //MCFG_IMI7000_BUS_ADD("imi5000h", nullptr, nullptr, nullptr)
-MACHINE_CONFIG_END
+ CORVUS_HDC(config, m_hdc, 0);
+ HARDDISK(config, "harddisk1", "corvus_hdd");
+ HARDDISK(config, "harddisk2", "corvus_hdd");
+ HARDDISK(config, "harddisk3", "corvus_hdd");
+ HARDDISK(config, "harddisk4", "corvus_hdd");
+ //imi7000_bus_device::add_config(config, "imi5000h", nullptr, nullptr, nullptr);
+}
//-------------------------------------------------
@@ -381,6 +378,6 @@ void softbox_device::ieee488_ifc(int state)
WRITE8_MEMBER( softbox_device::dbrg_w )
{
- m_dbrg->write_str(data & 0x0f);
- m_dbrg->write_stt(data >> 4);
+ m_dbrg->str_w(data & 0x0f);
+ m_dbrg->stt_w(data >> 4);
}
diff --git a/src/devices/bus/imi7000/imi7000.h b/src/devices/bus/imi7000/imi7000.h
index 0559a565285..38de3341ae5 100644
--- a/src/devices/bus/imi7000/imi7000.h
+++ b/src/devices/bus/imi7000/imi7000.h
@@ -31,8 +31,10 @@
#pragma once
+void imi7000_devices(device_slot_interface &device);
-
+DECLARE_DEVICE_TYPE(IMI7000_BUS, imi7000_bus_device)
+DECLARE_DEVICE_TYPE(IMI7000_SLOT, imi7000_slot_device)
//**************************************************************************
// CONSTANTS
@@ -43,23 +45,6 @@
//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_IMI7000_BUS_ADD(_def_slot1, _def_slot2, _def_slot3, _def_slot4) \
- MCFG_DEVICE_ADD(IMI7000_BUS_TAG, IMI7000_BUS, 0) \
- MCFG_DEVICE_ADD(IMI7000_BUS_TAG":0", IMI7000_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(imi7000_devices, _def_slot1, false) \
- MCFG_DEVICE_ADD(IMI7000_BUS_TAG":1", IMI7000_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(imi7000_devices, _def_slot2, false) \
- MCFG_DEVICE_ADD(IMI7000_BUS_TAG":2", IMI7000_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(imi7000_devices, _def_slot3, false) \
- MCFG_DEVICE_ADD(IMI7000_BUS_TAG":3", IMI7000_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(imi7000_devices, _def_slot4, false)
-
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -73,7 +58,17 @@ class imi7000_bus_device : public device_t
{
public:
// construction/destruction
- imi7000_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ imi7000_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+
+ template <typename T, typename U, typename V, typename W>
+ static void add_config(machine_config &config, T &&_def_slot1, U &&_def_slot2, V &&_def_slot3, W &&_def_slot4)
+ {
+ IMI7000_BUS(config, IMI7000_BUS_TAG);
+ IMI7000_SLOT(config, IMI7000_BUS_TAG":0", imi7000_devices, std::forward<T>(_def_slot1));
+ IMI7000_SLOT(config, IMI7000_BUS_TAG":1", imi7000_devices, std::forward<U>(_def_slot2));
+ IMI7000_SLOT(config, IMI7000_BUS_TAG":2", imi7000_devices, std::forward<V>(_def_slot3));
+ IMI7000_SLOT(config, IMI7000_BUS_TAG":3", imi7000_devices, std::forward<W>(_def_slot4));
+ }
protected:
// device-level overrides
@@ -90,6 +85,15 @@ class imi7000_slot_device : public device_t,
{
public:
// construction/destruction
+ template <typename T>
+ imi7000_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : imi7000_slot_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
imi7000_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
@@ -113,13 +117,4 @@ protected:
imi7000_slot_device *m_slot;
};
-
-// device type definition
-DECLARE_DEVICE_TYPE(IMI7000_BUS, imi7000_bus_device)
-DECLARE_DEVICE_TYPE(IMI7000_SLOT, imi7000_slot_device)
-
-
-// slot interface
-void imi7000_devices(device_slot_interface &device);
-
#endif // MAME_BUS_IMI7000_IMI7000_H
diff --git a/src/devices/bus/intellec4/intellec4.cpp b/src/devices/bus/intellec4/intellec4.cpp
index 82cf6702144..c3742062454 100644
--- a/src/devices/bus/intellec4/intellec4.cpp
+++ b/src/devices/bus/intellec4/intellec4.cpp
@@ -58,16 +58,11 @@ void univ_slot_device::device_start()
univ_bus_device::univ_bus_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, INTELLEC4_UNIV_BUS, tag, owner, clock)
- , m_rom_device(*this, finder_base::DUMMY_TAG)
- , m_rom_ports_device(*this, finder_base::DUMMY_TAG)
- , m_memory_device(*this, finder_base::DUMMY_TAG)
- , m_status_device(*this, finder_base::DUMMY_TAG)
- , m_ram_ports_device(*this, finder_base::DUMMY_TAG)
- , m_rom_space(-1)
- , m_rom_ports_space(-1)
- , m_memory_space(-1)
- , m_status_space(-1)
- , m_ram_ports_space(-1)
+ , m_rom_space(*this, finder_base::DUMMY_TAG, -1)
+ , m_rom_ports_space(*this, finder_base::DUMMY_TAG, -1)
+ , m_memory_space(*this, finder_base::DUMMY_TAG, -1)
+ , m_status_space(*this, finder_base::DUMMY_TAG, -1)
+ , m_ram_ports_space(*this, finder_base::DUMMY_TAG, -1)
, m_test_out_cb(*this)
, m_stop_out_cb(*this)
, m_reset_4002_out_cb(*this)
@@ -123,20 +118,6 @@ WRITE_LINE_MEMBER(univ_bus_device::cpu_reset_in)
device_t implementation
----------------------------------*/
-void univ_bus_device::device_validity_check(validity_checker &valid) const
-{
- if (m_rom_device && !m_rom_device->space_config(m_rom_space))
- osd_printf_error("ROM space device %s (%s) lacks address space %d config\n", m_rom_device->device().tag(), m_rom_device->device().name(), m_rom_space);
- if (m_rom_ports_device && !m_rom_ports_device->space_config(m_rom_ports_space))
- osd_printf_error("ROM ports space device %s (%s) lacks address space %d config\n", m_rom_ports_device->device().tag(), m_rom_ports_device->device().name(), m_rom_ports_space);
- if (m_memory_device && !m_memory_device->space_config(m_memory_space))
- osd_printf_error("Memory space device %s (%s) lacks address space %d config\n", m_memory_device->device().tag(), m_memory_device->device().name(), m_memory_space);
- if (m_status_device && !m_status_device->space_config(m_status_space))
- osd_printf_error("Status space device %s (%s) lacks address space %d config\n", m_status_device->device().tag(), m_status_device->device().name(), m_status_space);
- if (m_ram_ports_device && !m_ram_ports_device->space_config(m_ram_ports_space))
- osd_printf_error("RAM ports space device %s (%s) lacks address space %d config\n", m_ram_ports_device->device().tag(), m_ram_ports_device->device().name(), m_ram_ports_space);
-}
-
void univ_bus_device::device_start()
{
m_test_out_cb.resolve_safe();
diff --git a/src/devices/bus/intellec4/intellec4.h b/src/devices/bus/intellec4/intellec4.h
index 55cc06a263a..68fa8a8080a 100644
--- a/src/devices/bus/intellec4/intellec4.h
+++ b/src/devices/bus/intellec4/intellec4.h
@@ -153,11 +153,11 @@ public:
friend class device_univ_card_interface;
// address space configuration
- template <typename T> void set_rom_space(T &&tag, int space) { m_rom_device.set_tag(std::forward<T>(tag)); m_rom_space = space; }
- template <typename T> void set_rom_ports_space(T &&tag, int space) { m_rom_ports_device.set_tag(std::forward<T>(tag)); m_rom_ports_space = space; }
- template <typename T> void set_memory_space(T &&tag, int space) { m_memory_device.set_tag(std::forward<T>(tag)); m_memory_space = space; }
- template <typename T> void set_status_space(T &&tag, int space) { m_status_device.set_tag(std::forward<T>(tag)); m_status_space = space; }
- template <typename T> void set_ram_ports_space(T &&tag, int space) { m_ram_ports_device.set_tag(std::forward<T>(tag)); m_ram_ports_space = space; }
+ template <typename T> void set_rom_space(T &&tag, int space) { m_rom_space.set_tag(std::forward<T>(tag), space); }
+ template <typename T> void set_rom_ports_space(T &&tag, int space) { m_rom_ports_space.set_tag(std::forward<T>(tag), space); }
+ template <typename T> void set_memory_space(T &&tag, int space) { m_memory_space.set_tag(std::forward<T>(tag), space); }
+ template <typename T> void set_status_space(T &&tag, int space) { m_status_space.set_tag(std::forward<T>(tag), space); }
+ template <typename T> void set_ram_ports_space(T &&tag, int space) { m_ram_ports_space.set_tag(std::forward<T>(tag), space); }
// callback configuration
auto stop_out_cb() { return m_stop_out_cb.bind(); }
@@ -183,7 +183,6 @@ public:
protected:
// device_t implementation
- virtual void device_validity_check(validity_checker &valid) const override ATTR_COLD;
virtual void device_start() override;
private:
@@ -195,10 +194,8 @@ private:
void set_user_reset(unsigned index, int state);
// finding address spaces
- required_device<device_memory_interface> m_rom_device, m_rom_ports_device;
- required_device<device_memory_interface> m_memory_device, m_status_device, m_ram_ports_device;
- int m_rom_space, m_rom_ports_space;
- int m_memory_space, m_status_space, m_ram_ports_space;
+ required_address_space m_rom_space, m_rom_ports_space;
+ required_address_space m_memory_space, m_status_space, m_ram_ports_space;
// output line callbacks
devcb_write_line m_test_out_cb;
@@ -225,11 +222,11 @@ protected:
// device_interface implementation
void interface_pre_start() override;
- address_space &rom_space() { return m_bus->m_rom_device->space(m_bus->m_rom_space); }
- address_space &rom_ports_space() { return m_bus->m_rom_ports_device->space(m_bus->m_rom_ports_space); }
- address_space &memory_space() { return m_bus->m_memory_device->space(m_bus->m_memory_space); }
- address_space &status_space() { return m_bus->m_status_device->space(m_bus->m_status_space); }
- address_space &ram_ports_space() { return m_bus->m_ram_ports_device->space(m_bus->m_ram_ports_space); }
+ address_space &rom_space() { return *m_bus->m_rom_space; }
+ address_space &rom_ports_space() { return *m_bus->m_rom_ports_space; }
+ address_space &memory_space() { return *m_bus->m_memory_space; }
+ address_space &status_space() { return *m_bus->m_status_space; }
+ address_space &ram_ports_space() { return *m_bus->m_ram_ports_space; }
DECLARE_WRITE_LINE_MEMBER(test_out) { m_bus->set_test(m_index, state); }
DECLARE_WRITE_LINE_MEMBER(stop_out) { m_bus->set_stop(m_index, state); }
diff --git a/src/devices/bus/interpro/keyboard/hle.cpp b/src/devices/bus/interpro/keyboard/hle.cpp
index 670e5bd975c..15dd262eddf 100644
--- a/src/devices/bus/interpro/keyboard/hle.cpp
+++ b/src/devices/bus/interpro/keyboard/hle.cpp
@@ -277,11 +277,11 @@ WRITE_LINE_MEMBER(hle_device_base::input_txd)
device_buffered_serial_interface::rx_w(state);
}
-MACHINE_CONFIG_START(hle_device_base::device_add_mconfig)
+void hle_device_base::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "bell").front_center();
- MCFG_DEVICE_ADD("beeper", BEEP, ATTOSECONDS_TO_HZ(480 * ATTOSECONDS_PER_MICROSECOND))
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "bell", 1.0)
-MACHINE_CONFIG_END
+ BEEP(config, m_beeper, ATTOSECONDS_TO_HZ(480 * ATTOSECONDS_PER_MICROSECOND)).add_route(ALL_OUTPUTS, "bell", 1.0);
+}
void hle_device_base::device_start()
{
diff --git a/src/devices/bus/interpro/sr/edge.cpp b/src/devices/bus/interpro/sr/edge.cpp
index eb680532d3b..390b3459079 100644
--- a/src/devices/bus/interpro/sr/edge.cpp
+++ b/src/devices/bus/interpro/sr/edge.cpp
@@ -475,7 +475,7 @@ void mpcb828_device::device_add_mconfig(machine_config &config)
TMS32030(config, m_dsp, 30_MHz_XTAL);
m_dsp->holda().set(FUNC(mpcb828_device::holda));
m_dsp->set_disable();
- //MCFG_DEVICE_ADDRESS_MAP(0, map_dynamic<2>)
+ //m_dsp->set_addrmap(0, map_dynamic<2>);
BT458(config, "ramdac", 83'020'800);
@@ -484,7 +484,7 @@ void mpcb828_device::device_add_mconfig(machine_config &config)
m_scc->out_txda_callback().set("kbd", FUNC(interpro_keyboard_port_device::write_txd));
INTERPRO_KEYBOARD_PORT(config, "kbd", interpro_keyboard_devices, "hle_en_us").rxd_handler_cb().set(m_scc, FUNC(z80scc_device::rxa_w));
-MACHINE_CONFIG_END
+}
/*
* MPCB849: EDGE-1 graphics, 2 megapixels, single screen, 60Hz refresh.
diff --git a/src/devices/bus/interpro/sr/sr.cpp b/src/devices/bus/interpro/sr/sr.cpp
index 6d6d76bee42..82071af86d2 100644
--- a/src/devices/bus/interpro/sr/sr.cpp
+++ b/src/devices/bus/interpro/sr/sr.cpp
@@ -267,9 +267,6 @@ DEFINE_DEVICE_TYPE(SRX_SLOT, srx_slot_device, "srx_slot", "InterPro SRX slot")
void interpro_bus_device::device_resolve_objects()
{
- m_main_space = &m_maincpu->space(0);
- m_io_space = &m_maincpu->space(1);
-
// resolve callbacks
m_out_irq0_cb.resolve_safe();
m_out_irq1_cb.resolve_safe();
diff --git a/src/devices/bus/interpro/sr/sr.h b/src/devices/bus/interpro/sr/sr.h
index 0fcecc086f8..858590f5075 100644
--- a/src/devices/bus/interpro/sr/sr.h
+++ b/src/devices/bus/interpro/sr/sr.h
@@ -9,6 +9,10 @@
class interpro_bus_device : public device_t
{
public:
+ // space configuration
+ template <typename T> void set_main_space(T &&tag, int spacenum) { m_main_space.set_tag(std::forward<T>(tag), spacenum); }
+ template <typename T> void set_io_space(T &&tag, int spacenum) { m_io_space.set_tag(std::forward<T>(tag), spacenum); }
+
// callback configuration
auto out_irq0_cb() { return m_out_irq0_cb.bind(); }
auto out_irq1_cb() { return m_out_irq1_cb.bind(); }
@@ -24,9 +28,8 @@ protected:
// construction/destruction
interpro_bus_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, type, tag, owner, clock)
- , m_maincpu(*this, finder_base::DUMMY_TAG)
- , m_main_space(nullptr)
- , m_io_space(nullptr)
+ , m_main_space(*this, finder_base::DUMMY_TAG, -1)
+ , m_io_space(*this, finder_base::DUMMY_TAG, -1)
, m_out_irq0_cb(*this)
, m_out_irq1_cb(*this)
, m_out_irq2_cb(*this)
@@ -38,9 +41,8 @@ protected:
virtual void device_resolve_objects() override;
// internal state
- required_device<cpu_device> m_maincpu;
- address_space *m_main_space;
- address_space *m_io_space;
+ required_address_space m_main_space;
+ required_address_space m_io_space;
private:
devcb_write_line m_out_irq0_cb;
@@ -55,12 +57,6 @@ class cbus_bus_device : public interpro_bus_device
{
public:
// construction/destruction
- template <typename T>
- cbus_bus_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock, T &&cpu_device)
- : cbus_bus_device(mconfig, tag, owner, clock)
- {
- m_maincpu.set_tag(std::forward<T>(cpu_device));
- }
cbus_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
static const u32 CBUS_BASE = 0x87000000;
@@ -158,12 +154,6 @@ class srx_bus_device : public interpro_bus_device
{
public:
// construction/destruction
- template <typename T>
- srx_bus_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock, T &&cpu_device)
- : srx_bus_device(mconfig, tag, owner, clock)
- {
- m_maincpu.set_tag(std::forward<T>(cpu_device));
- }
srx_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
static const u32 SRX_BASE = 0x8f000000;
diff --git a/src/devices/bus/intv/ecs.cpp b/src/devices/bus/intv/ecs.cpp
index e1d7f9b0b98..6fd321af36b 100644
--- a/src/devices/bus/intv/ecs.cpp
+++ b/src/devices/bus/intv/ecs.cpp
@@ -94,7 +94,8 @@ void intv_ecs_device::late_subslot_setup()
//-------------------------------------------------
-MACHINE_CONFIG_START(intv_ecs_device::device_add_mconfig)
+void intv_ecs_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "mono_ecs").front_center();
AY8914(config, m_snd, XTAL(3'579'545)/2);
@@ -103,9 +104,9 @@ MACHINE_CONFIG_START(intv_ecs_device::device_add_mconfig)
m_snd->port_a_write_callback().set("ctrl_port", FUNC(intvecs_control_port_device::portA_w));
m_snd->add_route(ALL_OUTPUTS, "mono_ecs", 0.33);
- MCFG_INTVECS_CONTROL_PORT_ADD("ctrl_port", intvecs_control_port_devices, "keybd")
- MCFG_INTV_CARTRIDGE_ADD("subslot", intv_cart, nullptr)
-MACHINE_CONFIG_END
+ INTVECS_CONTROL_PORT(config, "ctrl_port", intvecs_control_port_devices, "keybd");
+ INTV_CART_SLOT(config, m_subslot, intv_cart, nullptr);
+}
ROM_START( ecs )
@@ -125,7 +126,7 @@ const tiny_rom_entry *intv_ecs_device::device_rom_region() const
Paged ROM handling
-------------------------------------------------*/
-READ16_MEMBER(intv_ecs_device::read_rom20)
+uint16_t intv_ecs_device::read_rom20(offs_t offset)
{
if (m_bank_base[2])
return INTV_ROM16_READ(offset + 0x2000);
@@ -133,7 +134,7 @@ READ16_MEMBER(intv_ecs_device::read_rom20)
return 0xffff;
}
-READ16_MEMBER(intv_ecs_device::read_rom70)
+uint16_t intv_ecs_device::read_rom70(offs_t offset)
{
if (m_bank_base[7])
return 0xffff;
@@ -141,21 +142,21 @@ READ16_MEMBER(intv_ecs_device::read_rom70)
return INTV_ROM16_READ(offset + 0x7000);
}
-READ16_MEMBER(intv_ecs_device::read_rome0)
+uint16_t intv_ecs_device::read_rome0(offs_t offset)
{
if (m_bank_base[14])
return INTV_ROM16_READ(offset + 0xe000);
else // if WSMLB is loaded, it shall go here, otherwise 0xffff
- return m_subslot->read_rome0(space, offset, mem_mask);
+ return m_subslot->read_rome0(offset);
}
-READ16_MEMBER(intv_ecs_device::read_romf0)
+uint16_t intv_ecs_device::read_romf0(offs_t offset)
{
// only WSMLB should come here with bank_base = 1
if (m_bank_base[15])
- return m_subslot->read_romf0(space, offset + 0x1000, mem_mask);
+ return m_subslot->read_romf0(offset + 0x1000);
else
- return m_subslot->read_romf0(space, offset, mem_mask);
+ return m_subslot->read_romf0(offset);
}
@@ -163,44 +164,40 @@ READ16_MEMBER(intv_ecs_device::read_romf0)
read_audio
-------------------------------------------------*/
-READ16_MEMBER(intv_ecs_device::read_ay)
+uint16_t intv_ecs_device::read_ay(offs_t offset)
{
- if (ACCESSING_BITS_0_7)
- return m_snd->read(space, offset, mem_mask);
- else
- return 0xffff;
+ return 0xff00 | m_snd->read(offset);
}
/*-------------------------------------------------
write_audio
-------------------------------------------------*/
-WRITE16_MEMBER(intv_ecs_device::write_ay)
+void intv_ecs_device::write_ay(offs_t offset, uint16_t data)
{
- if (ACCESSING_BITS_0_7)
- return m_snd->write(space, offset, data, mem_mask);
+ return m_snd->write(offset, data & 0x00ff);
}
-READ16_MEMBER(intv_ecs_device::read_rom80)
+uint16_t intv_ecs_device::read_rom80(offs_t offset)
{
if (m_ram88_enabled && offset >= 0x800)
- return m_subslot->read_ram(space, offset & 0x7ff, mem_mask);
+ return m_subslot->read_ram(offset & 0x7ff);
else
- return m_subslot->read_rom80(space, offset, mem_mask);
+ return m_subslot->read_rom80(offset);
}
-READ16_MEMBER(intv_ecs_device::read_romd0)
+uint16_t intv_ecs_device::read_romd0(offs_t offset)
{
if (m_ramd0_enabled && offset < 0x800)
- return m_subslot->read_ram(space, offset, mem_mask);
+ return m_subslot->read_ram(offset);
else
- return m_subslot->read_romd0(space, offset, mem_mask);
+ return m_subslot->read_romd0(offset);
}
-WRITE16_MEMBER(intv_ecs_device::write_rom20)
+void intv_ecs_device::write_rom20(offs_t offset, uint16_t data)
{
if (offset == 0xfff)
{
@@ -211,7 +208,7 @@ WRITE16_MEMBER(intv_ecs_device::write_rom20)
}
}
-WRITE16_MEMBER(intv_ecs_device::write_rom70)
+void intv_ecs_device::write_rom70(offs_t offset, uint16_t data)
{
if (offset == 0xfff)
{
@@ -222,7 +219,7 @@ WRITE16_MEMBER(intv_ecs_device::write_rom70)
}
}
-WRITE16_MEMBER(intv_ecs_device::write_rome0)
+void intv_ecs_device::write_rome0(offs_t offset, uint16_t data)
{
if (offset == 0xfff)
{
@@ -233,7 +230,7 @@ WRITE16_MEMBER(intv_ecs_device::write_rome0)
}
}
-WRITE16_MEMBER(intv_ecs_device::write_romf0)
+void intv_ecs_device::write_romf0(offs_t offset, uint16_t data)
{
if (offset == 0xfff)
{
diff --git a/src/devices/bus/intv/ecs.h b/src/devices/bus/intv/ecs.h
index 943a768fe03..68911831c0a 100644
--- a/src/devices/bus/intv/ecs.h
+++ b/src/devices/bus/intv/ecs.h
@@ -23,41 +23,41 @@ public:
// actual ECS accesses
// paged ROMs
- virtual DECLARE_READ16_MEMBER(read_rom20) override;
- virtual DECLARE_READ16_MEMBER(read_rom70) override;
- virtual DECLARE_READ16_MEMBER(read_rome0) override;
- virtual DECLARE_READ16_MEMBER(read_romf0) override;
+ virtual uint16_t read_rom20(offs_t offset) override;
+ virtual uint16_t read_rom70(offs_t offset) override;
+ virtual uint16_t read_rome0(offs_t offset) override;
+ virtual uint16_t read_romf0(offs_t offset) override;
// RAM
- virtual DECLARE_READ16_MEMBER(read_ram) override { return (int)m_ram[offset & (m_ram.size() - 1)]; }
- virtual DECLARE_WRITE16_MEMBER(write_ram) override { m_ram[offset & (m_ram.size() - 1)] = data & 0xff; }
+ virtual uint16_t read_ram(offs_t offset) override { return (int)m_ram[offset & (m_ram.size() - 1)]; }
+ virtual void write_ram(offs_t offset, uint16_t data) override { m_ram[offset & (m_ram.size() - 1)] = data & 0xff; }
// AY8914
- virtual DECLARE_READ16_MEMBER(read_ay) override;
- virtual DECLARE_WRITE16_MEMBER(write_ay) override;
+ virtual uint16_t read_ay(offs_t offset) override;
+ virtual void write_ay(offs_t offset, uint16_t data) override;
// passthru accesses
- virtual DECLARE_READ16_MEMBER(read_rom04) override { return m_subslot->read_rom04(space, offset, mem_mask); }
- virtual DECLARE_READ16_MEMBER(read_rom40) override { return m_subslot->read_rom40(space, offset, mem_mask); }
- virtual DECLARE_READ16_MEMBER(read_rom48) override { return m_subslot->read_rom48(space, offset, mem_mask); }
- virtual DECLARE_READ16_MEMBER(read_rom50) override { return m_subslot->read_rom50(space, offset, mem_mask); }
- virtual DECLARE_READ16_MEMBER(read_rom60) override { return m_subslot->read_rom60(space, offset, mem_mask); }
- virtual DECLARE_READ16_MEMBER(read_rom80) override;
- virtual DECLARE_READ16_MEMBER(read_rom90) override { return m_subslot->read_rom90(space, offset, mem_mask); }
- virtual DECLARE_READ16_MEMBER(read_roma0) override { return m_subslot->read_roma0(space, offset, mem_mask); }
- virtual DECLARE_READ16_MEMBER(read_romb0) override { return m_subslot->read_romb0(space, offset, mem_mask); }
- virtual DECLARE_READ16_MEMBER(read_romc0) override { return m_subslot->read_romc0(space, offset, mem_mask); }
- virtual DECLARE_READ16_MEMBER(read_romd0) override;
+ virtual uint16_t read_rom04(offs_t offset) override { return m_subslot->read_rom04(offset); }
+ virtual uint16_t read_rom40(offs_t offset) override { return m_subslot->read_rom40(offset); }
+ virtual uint16_t read_rom48(offs_t offset) override { return m_subslot->read_rom48(offset); }
+ virtual uint16_t read_rom50(offs_t offset) override { return m_subslot->read_rom50(offset); }
+ virtual uint16_t read_rom60(offs_t offset) override { return m_subslot->read_rom60(offset); }
+ virtual uint16_t read_rom80(offs_t offset) override;
+ virtual uint16_t read_rom90(offs_t offset) override { return m_subslot->read_rom90(offset); }
+ virtual uint16_t read_roma0(offs_t offset) override { return m_subslot->read_roma0(offset); }
+ virtual uint16_t read_romb0(offs_t offset) override { return m_subslot->read_romb0(offset); }
+ virtual uint16_t read_romc0(offs_t offset) override { return m_subslot->read_romc0(offset); }
+ virtual uint16_t read_romd0(offs_t offset) override;
// paged ROM banking
- virtual DECLARE_WRITE16_MEMBER(write_rom20) override;
- virtual DECLARE_WRITE16_MEMBER(write_rom70) override;
- virtual DECLARE_WRITE16_MEMBER(write_rome0) override;
- virtual DECLARE_WRITE16_MEMBER(write_romf0) override;
+ virtual void write_rom20(offs_t offset, uint16_t data) override;
+ virtual void write_rom70(offs_t offset, uint16_t data) override;
+ virtual void write_rome0(offs_t offset, uint16_t data) override;
+ virtual void write_romf0(offs_t offset, uint16_t data) override;
// RAM passthru write
- virtual DECLARE_WRITE16_MEMBER(write_88) override { if (m_ram88_enabled) m_subslot->write_ram(space, offset, data, mem_mask); }
- virtual DECLARE_WRITE16_MEMBER(write_d0) override { if (m_ramd0_enabled) m_subslot->write_ram(space, offset, data, mem_mask); }
+ virtual void write_88(offs_t offset, uint16_t data) override { if (m_ram88_enabled) m_subslot->write_ram(offset, data); }
+ virtual void write_d0(offs_t offset, uint16_t data) override { if (m_ramd0_enabled) m_subslot->write_ram(offset, data); }
// IntelliVoice passthru
- virtual DECLARE_READ16_MEMBER(read_speech) override { if (m_voice_enabled) return m_subslot->read_speech(space, offset, mem_mask); else return 0xffff; }
- virtual DECLARE_WRITE16_MEMBER(write_speech) override { if (m_voice_enabled) m_subslot->write_speech(space, offset, data, mem_mask); }
+ virtual uint16_t read_speech(offs_t offset) override { if (m_voice_enabled) return m_subslot->read_speech(offset); else return 0xffff; }
+ virtual void write_speech(offs_t offset, uint16_t data) override { if (m_voice_enabled) m_subslot->write_speech(offset, data); }
virtual void late_subslot_setup() override;
diff --git a/src/devices/bus/intv/rom.h b/src/devices/bus/intv/rom.h
index 7b83b2709fe..5266220e1ec 100644
--- a/src/devices/bus/intv/rom.h
+++ b/src/devices/bus/intv/rom.h
@@ -16,21 +16,21 @@ public:
intv_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ16_MEMBER(read_rom04) override { return INTV_ROM16_READ(offset + 0x0400); }
- virtual DECLARE_READ16_MEMBER(read_rom20) override { return INTV_ROM16_READ(offset + 0x2000); }
- virtual DECLARE_READ16_MEMBER(read_rom40) override { return INTV_ROM16_READ(offset + 0x4000); }
- virtual DECLARE_READ16_MEMBER(read_rom48) override { return INTV_ROM16_READ(offset + 0x4800); }
- virtual DECLARE_READ16_MEMBER(read_rom50) override { return INTV_ROM16_READ(offset + 0x5000); }
- virtual DECLARE_READ16_MEMBER(read_rom60) override { return INTV_ROM16_READ(offset + 0x6000); }
- virtual DECLARE_READ16_MEMBER(read_rom70) override { return INTV_ROM16_READ(offset + 0x7000); }
- virtual DECLARE_READ16_MEMBER(read_rom80) override { return INTV_ROM16_READ(offset + 0x8000); }
- virtual DECLARE_READ16_MEMBER(read_rom90) override { return INTV_ROM16_READ(offset + 0x9000); }
- virtual DECLARE_READ16_MEMBER(read_roma0) override { return INTV_ROM16_READ(offset + 0xa000); }
- virtual DECLARE_READ16_MEMBER(read_romb0) override { return INTV_ROM16_READ(offset + 0xb000); }
- virtual DECLARE_READ16_MEMBER(read_romc0) override { return INTV_ROM16_READ(offset + 0xc000); }
- virtual DECLARE_READ16_MEMBER(read_romd0) override { return INTV_ROM16_READ(offset + 0xd000); }
- virtual DECLARE_READ16_MEMBER(read_rome0) override { return INTV_ROM16_READ(offset + 0xe000); }
- virtual DECLARE_READ16_MEMBER(read_romf0) override { return INTV_ROM16_READ(offset + 0xf000); }
+ virtual uint16_t read_rom04(offs_t offset) override { return INTV_ROM16_READ(offset + 0x0400); }
+ virtual uint16_t read_rom20(offs_t offset) override { return INTV_ROM16_READ(offset + 0x2000); }
+ virtual uint16_t read_rom40(offs_t offset) override { return INTV_ROM16_READ(offset + 0x4000); }
+ virtual uint16_t read_rom48(offs_t offset) override { return INTV_ROM16_READ(offset + 0x4800); }
+ virtual uint16_t read_rom50(offs_t offset) override { return INTV_ROM16_READ(offset + 0x5000); }
+ virtual uint16_t read_rom60(offs_t offset) override { return INTV_ROM16_READ(offset + 0x6000); }
+ virtual uint16_t read_rom70(offs_t offset) override { return INTV_ROM16_READ(offset + 0x7000); }
+ virtual uint16_t read_rom80(offs_t offset) override { return INTV_ROM16_READ(offset + 0x8000); }
+ virtual uint16_t read_rom90(offs_t offset) override { return INTV_ROM16_READ(offset + 0x9000); }
+ virtual uint16_t read_roma0(offs_t offset) override { return INTV_ROM16_READ(offset + 0xa000); }
+ virtual uint16_t read_romb0(offs_t offset) override { return INTV_ROM16_READ(offset + 0xb000); }
+ virtual uint16_t read_romc0(offs_t offset) override { return INTV_ROM16_READ(offset + 0xc000); }
+ virtual uint16_t read_romd0(offs_t offset) override { return INTV_ROM16_READ(offset + 0xd000); }
+ virtual uint16_t read_rome0(offs_t offset) override { return INTV_ROM16_READ(offset + 0xe000); }
+ virtual uint16_t read_romf0(offs_t offset) override { return INTV_ROM16_READ(offset + 0xf000); }
protected:
intv_rom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@@ -49,8 +49,8 @@ public:
intv_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ16_MEMBER(read_ram) override { return (int)m_ram[offset & (m_ram.size() - 1)]; }
- virtual DECLARE_WRITE16_MEMBER(write_ram) override { m_ram[offset & (m_ram.size() - 1)] = data & 0xff; }
+ virtual uint16_t read_ram(offs_t offset) override { return (int)m_ram[offset & (m_ram.size() - 1)]; }
+ virtual void write_ram(offs_t offset, uint16_t data) override { m_ram[offset & (m_ram.size() - 1)] = data & 0xff; }
};
// ======================> intv_gfact_device
@@ -62,8 +62,8 @@ public:
intv_gfact_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ16_MEMBER(read_ram) override { return (int)m_ram[offset & (m_ram.size() - 1)]; }
- virtual DECLARE_WRITE16_MEMBER(write_ram) override { m_ram[offset & (m_ram.size() - 1)] = data & 0xff; }
+ virtual uint16_t read_ram(offs_t offset) override { return (int)m_ram[offset & (m_ram.size() - 1)]; }
+ virtual void write_ram(offs_t offset, uint16_t data) override { m_ram[offset & (m_ram.size() - 1)] = data & 0xff; }
};
// ======================> intv_wsmlb_device
diff --git a/src/devices/bus/intv/slot.cpp b/src/devices/bus/intv/slot.cpp
index 0161c90b258..0c4ddae593a 100644
--- a/src/devices/bus/intv/slot.cpp
+++ b/src/devices/bus/intv/slot.cpp
@@ -488,10 +488,10 @@ std::string intv_cart_slot_device::get_default_card_software(get_default_card_so
read_ay
-------------------------------------------------*/
-READ16_MEMBER(intv_cart_slot_device::read_ay)
+uint16_t intv_cart_slot_device::read_ay(offs_t offset)
{
if (m_cart)
- return m_cart->read_ay(space, offset, mem_mask);
+ return m_cart->read_ay(offset);
else
return 0xffff;
}
@@ -500,20 +500,20 @@ READ16_MEMBER(intv_cart_slot_device::read_ay)
write_ay
-------------------------------------------------*/
-WRITE16_MEMBER(intv_cart_slot_device::write_ay)
+void intv_cart_slot_device::write_ay(offs_t offset, uint16_t data)
{
if (m_cart)
- m_cart->write_ay(space, offset, data, mem_mask);
+ m_cart->write_ay(offset, data);
}
/*-------------------------------------------------
read_speech
-------------------------------------------------*/
-READ16_MEMBER(intv_cart_slot_device::read_speech)
+uint16_t intv_cart_slot_device::read_speech(offs_t offset)
{
if (m_cart)
- return m_cart->read_speech(space, offset, mem_mask);
+ return m_cart->read_speech(offset);
else
return 0xffff;
}
@@ -522,10 +522,10 @@ READ16_MEMBER(intv_cart_slot_device::read_speech)
write_speech
-------------------------------------------------*/
-WRITE16_MEMBER(intv_cart_slot_device::write_speech)
+void intv_cart_slot_device::write_speech(offs_t offset, uint16_t data)
{
if (m_cart)
- m_cart->write_speech(space, offset, data, mem_mask);
+ m_cart->write_speech(offset, data);
}
diff --git a/src/devices/bus/intv/slot.h b/src/devices/bus/intv/slot.h
index bdec54dab76..ec79b148375 100644
--- a/src/devices/bus/intv/slot.h
+++ b/src/devices/bus/intv/slot.h
@@ -39,36 +39,36 @@ public:
virtual ~device_intv_cart_interface();
// reading and writing
- virtual DECLARE_READ16_MEMBER(read_rom04) { return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_rom20) { return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_rom40) { return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_rom48) { return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_rom50) { return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_rom60) { return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_rom70) { return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_rom80) { return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_rom90) { return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_roma0) { return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_romb0) { return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_romc0) { return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_romd0) { return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_rome0) { return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_romf0) { return 0xffff; }
-
- virtual DECLARE_READ16_MEMBER(read_ram) { return 0xffff; }
- virtual DECLARE_WRITE16_MEMBER(write_ram) {}
+ virtual uint16_t read_rom04(offs_t offset) { return 0xffff; }
+ virtual uint16_t read_rom20(offs_t offset) { return 0xffff; }
+ virtual uint16_t read_rom40(offs_t offset) { return 0xffff; }
+ virtual uint16_t read_rom48(offs_t offset) { return 0xffff; }
+ virtual uint16_t read_rom50(offs_t offset) { return 0xffff; }
+ virtual uint16_t read_rom60(offs_t offset) { return 0xffff; }
+ virtual uint16_t read_rom70(offs_t offset) { return 0xffff; }
+ virtual uint16_t read_rom80(offs_t offset) { return 0xffff; }
+ virtual uint16_t read_rom90(offs_t offset) { return 0xffff; }
+ virtual uint16_t read_roma0(offs_t offset) { return 0xffff; }
+ virtual uint16_t read_romb0(offs_t offset) { return 0xffff; }
+ virtual uint16_t read_romc0(offs_t offset) { return 0xffff; }
+ virtual uint16_t read_romd0(offs_t offset) { return 0xffff; }
+ virtual uint16_t read_rome0(offs_t offset) { return 0xffff; }
+ virtual uint16_t read_romf0(offs_t offset) { return 0xffff; }
+
+ virtual uint16_t read_ram(offs_t offset) { return 0xffff; }
+ virtual void write_ram(offs_t offset, uint16_t data) {}
// Used by IntelliVoice & ECS
- virtual DECLARE_READ16_MEMBER(read_ay) { return 0xffff; }
- virtual DECLARE_WRITE16_MEMBER(write_ay) {}
- virtual DECLARE_READ16_MEMBER(read_speech) { return 0xffff; }
- virtual DECLARE_WRITE16_MEMBER(write_speech) {}
- virtual DECLARE_WRITE16_MEMBER(write_d0) {}
- virtual DECLARE_WRITE16_MEMBER(write_88) {}
- virtual DECLARE_WRITE16_MEMBER(write_rom20) {}
- virtual DECLARE_WRITE16_MEMBER(write_rom70) {}
- virtual DECLARE_WRITE16_MEMBER(write_rome0) {}
- virtual DECLARE_WRITE16_MEMBER(write_romf0) {}
+ virtual uint16_t read_ay(offs_t offset) { return 0xffff; }
+ virtual void write_ay(offs_t offset, uint16_t data) {}
+ virtual uint16_t read_speech(offs_t offset) { return 0xffff; }
+ virtual void write_speech(offs_t offset, uint16_t data) {}
+ virtual void write_d0(offs_t offset, uint16_t data) {}
+ virtual void write_88(offs_t offset, uint16_t data) {}
+ virtual void write_rom20(offs_t offset, uint16_t data) {}
+ virtual void write_rom70(offs_t offset, uint16_t data) {}
+ virtual void write_rome0(offs_t offset, uint16_t data) {}
+ virtual void write_romf0(offs_t offset, uint16_t data) {}
void rom_alloc(uint32_t size, const char *tag);
void ram_alloc(uint32_t size);
@@ -98,7 +98,17 @@ class intv_cart_slot_device : public device_t,
{
public:
// construction/destruction
- intv_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ intv_cart_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : intv_cart_slot_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ intv_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
virtual ~intv_cart_slot_device();
// image-level overrides
@@ -124,40 +134,40 @@ public:
virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
// reading and writing
- virtual DECLARE_READ16_MEMBER(read_rom04) { if (m_cart) return m_cart->read_rom04(space, offset, mem_mask); else return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_rom20) { if (m_cart) return m_cart->read_rom20(space, offset, mem_mask); else return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_rom40) { if (m_cart) return m_cart->read_rom40(space, offset, mem_mask); else return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_rom48) { if (m_cart) return m_cart->read_rom48(space, offset, mem_mask); else return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_rom50) { if (m_cart) return m_cart->read_rom50(space, offset, mem_mask); else return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_rom60) { if (m_cart) return m_cart->read_rom60(space, offset, mem_mask); else return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_rom70) { if (m_cart) return m_cart->read_rom70(space, offset, mem_mask); else return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_rom80) { if (m_cart) return m_cart->read_rom80(space, offset, mem_mask); else return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_rom90) { if (m_cart) return m_cart->read_rom90(space, offset, mem_mask); else return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_roma0) { if (m_cart) return m_cart->read_roma0(space, offset, mem_mask); else return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_romb0) { if (m_cart) return m_cart->read_romb0(space, offset, mem_mask); else return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_romc0) { if (m_cart) return m_cart->read_romc0(space, offset, mem_mask); else return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_romd0) { if (m_cart) return m_cart->read_romd0(space, offset, mem_mask); else return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_rome0) { if (m_cart) return m_cart->read_rome0(space, offset, mem_mask); else return 0xffff; }
- virtual DECLARE_READ16_MEMBER(read_romf0) { if (m_cart) return m_cart->read_romf0(space, offset, mem_mask); else return 0xffff; }
-
- virtual DECLARE_READ16_MEMBER(read_ay);
- virtual DECLARE_WRITE16_MEMBER(write_ay);
- virtual DECLARE_READ16_MEMBER(read_speech);
- virtual DECLARE_WRITE16_MEMBER(write_speech);
- virtual DECLARE_READ16_MEMBER(read_ram) { if (m_cart) return m_cart->read_ram(space, offset, mem_mask); else return 0xffff; }
- virtual DECLARE_WRITE16_MEMBER(write_ram) { if (m_cart) m_cart->write_ram(space, offset, data, mem_mask); }
+ uint16_t read_rom04(offs_t offset) { if (m_cart) return m_cart->read_rom04(offset); else return 0xffff; }
+ uint16_t read_rom20(offs_t offset) { if (m_cart) return m_cart->read_rom20(offset); else return 0xffff; }
+ uint16_t read_rom40(offs_t offset) { if (m_cart) return m_cart->read_rom40(offset); else return 0xffff; }
+ uint16_t read_rom48(offs_t offset) { if (m_cart) return m_cart->read_rom48(offset); else return 0xffff; }
+ uint16_t read_rom50(offs_t offset) { if (m_cart) return m_cart->read_rom50(offset); else return 0xffff; }
+ uint16_t read_rom60(offs_t offset) { if (m_cart) return m_cart->read_rom60(offset); else return 0xffff; }
+ uint16_t read_rom70(offs_t offset) { if (m_cart) return m_cart->read_rom70(offset); else return 0xffff; }
+ uint16_t read_rom80(offs_t offset) { if (m_cart) return m_cart->read_rom80(offset); else return 0xffff; }
+ uint16_t read_rom90(offs_t offset) { if (m_cart) return m_cart->read_rom90(offset); else return 0xffff; }
+ uint16_t read_roma0(offs_t offset) { if (m_cart) return m_cart->read_roma0(offset); else return 0xffff; }
+ uint16_t read_romb0(offs_t offset) { if (m_cart) return m_cart->read_romb0(offset); else return 0xffff; }
+ uint16_t read_romc0(offs_t offset) { if (m_cart) return m_cart->read_romc0(offset); else return 0xffff; }
+ uint16_t read_romd0(offs_t offset) { if (m_cart) return m_cart->read_romd0(offset); else return 0xffff; }
+ uint16_t read_rome0(offs_t offset) { if (m_cart) return m_cart->read_rome0(offset); else return 0xffff; }
+ uint16_t read_romf0(offs_t offset) { if (m_cart) return m_cart->read_romf0(offset); else return 0xffff; }
+
+ uint16_t read_ay(offs_t offset);
+ void write_ay(offs_t offset, uint16_t data);
+ uint16_t read_speech(offs_t offset);
+ void write_speech(offs_t offset, uint16_t data);
+ uint16_t read_ram(offs_t offset) { if (m_cart) return m_cart->read_ram(offset); else return 0xffff; }
+ void write_ram(offs_t offset, uint16_t data) { if (m_cart) m_cart->write_ram(offset, data); }
virtual void late_subslot_setup() { if (m_cart) return m_cart->late_subslot_setup(); }
// these RAM accessors are needed to deal with IntelliVoice and ECS mounting RAM-equipped carts
- virtual DECLARE_WRITE16_MEMBER(write_d0) { if (m_cart) m_cart->write_d0(space, offset, data, mem_mask); }
- virtual DECLARE_WRITE16_MEMBER(write_88) { if (m_cart) m_cart->write_88(space, offset, data, mem_mask); }
+ void write_d0(offs_t offset, uint16_t data) { if (m_cart) m_cart->write_d0(offset, data); }
+ void write_88(offs_t offset, uint16_t data) { if (m_cart) m_cart->write_88(offset, data); }
// ECS paged roms need these
- virtual DECLARE_WRITE16_MEMBER(write_rom20) { if (m_cart) m_cart->write_rom20(space, offset, data, mem_mask); }
- virtual DECLARE_WRITE16_MEMBER(write_rom70) { if (m_cart) m_cart->write_rom70(space, offset, data, mem_mask); }
- virtual DECLARE_WRITE16_MEMBER(write_rome0) { if (m_cart) m_cart->write_rome0(space, offset, data, mem_mask); }
- virtual DECLARE_WRITE16_MEMBER(write_romf0) { if (m_cart) m_cart->write_romf0(space, offset, data, mem_mask); }
+ void write_rom20(offs_t offset, uint16_t data) { if (m_cart) m_cart->write_rom20(offset, data); }
+ void write_rom70(offs_t offset, uint16_t data) { if (m_cart) m_cart->write_rom70(offset, data); }
+ void write_rome0(offs_t offset, uint16_t data) { if (m_cart) m_cart->write_rome0(offset, data); }
+ void write_romf0(offs_t offset, uint16_t data) { if (m_cart) m_cart->write_romf0(offset, data); }
protected:
// device-level overrides
@@ -179,10 +189,6 @@ DECLARE_DEVICE_TYPE(INTV_CART_SLOT, intv_cart_slot_device)
#define INTVSLOT_ROM_REGION_TAG ":cart:rom"
-#define MCFG_INTV_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_tag, INTV_CART_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
void intv_cart(device_slot_interface &device);
#endif // MAME_BUS_INTV_SLOT_H
diff --git a/src/devices/bus/intv/voice.cpp b/src/devices/bus/intv/voice.cpp
index 7cc62da7856..b8b07d84d34 100644
--- a/src/devices/bus/intv/voice.cpp
+++ b/src/devices/bus/intv/voice.cpp
@@ -69,15 +69,16 @@ void intv_voice_device::late_subslot_setup()
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(intv_voice_device::device_add_mconfig)
+void intv_voice_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "mono_voice").front_center();
SP0256(config, m_speech, 3120000);
/* The Intellivoice uses a speaker with its own volume control so the relative volumes to use are subjective */
m_speech->add_route(ALL_OUTPUTS, "mono_voice", 1.00);
- MCFG_INTV_CARTRIDGE_ADD("subslot", intv_cart, nullptr)
-MACHINE_CONFIG_END
+ INTV_CART_SLOT(config, m_subslot, intv_cart, nullptr);
+}
ROM_START( intellivoice )
@@ -95,37 +96,33 @@ const tiny_rom_entry *intv_voice_device::device_rom_region() const
read_audio
-------------------------------------------------*/
-READ16_MEMBER(intv_voice_device::read_speech)
+uint16_t intv_voice_device::read_speech(offs_t offset)
{
- if (ACCESSING_BITS_0_7)
- return m_speech->spb640_r(offset);
- else
- return 0xff;
+ return 0xff00 | m_speech->spb640_r(offset);
}
/*-------------------------------------------------
write_audio
-------------------------------------------------*/
-WRITE16_MEMBER(intv_voice_device::write_speech)
+void intv_voice_device::write_speech(offs_t offset, uint16_t data)
{
- if (ACCESSING_BITS_0_7)
- return m_speech->spb640_w(offset, data);
+ m_speech->spb640_w(offset, data & 0x00ff);
}
-READ16_MEMBER(intv_voice_device::read_rom80)
+uint16_t intv_voice_device::read_rom80(offs_t offset)
{
if (m_ram88_enabled && offset >= 0x800)
- return m_subslot->read_ram(space, offset & 0x7ff, mem_mask);
+ return m_subslot->read_ram(offset & 0x7ff);
else
- return m_subslot->read_rom80(space, offset, mem_mask);
+ return m_subslot->read_rom80(offset);
}
-READ16_MEMBER(intv_voice_device::read_romd0)
+uint16_t intv_voice_device::read_romd0(offs_t offset)
{
if (m_ramd0_enabled && offset < 0x800)
- return m_subslot->read_ram(space, offset, mem_mask);
+ return m_subslot->read_ram(offset);
else
- return m_subslot->read_romd0(space, offset, mem_mask);
+ return m_subslot->read_romd0(offset);
}
diff --git a/src/devices/bus/intv/voice.h b/src/devices/bus/intv/voice.h
index d99b31573a3..7369058c435 100644
--- a/src/devices/bus/intv/voice.h
+++ b/src/devices/bus/intv/voice.h
@@ -18,31 +18,31 @@ public:
// reading and writing
// actual IntelliVoice access
- virtual DECLARE_READ16_MEMBER(read_speech) override;
- virtual DECLARE_WRITE16_MEMBER(write_speech) override;
+ virtual uint16_t read_speech(offs_t offset) override;
+ virtual void write_speech(offs_t offset, uint16_t data) override;
// passthru access
- virtual DECLARE_READ16_MEMBER(read_rom04) override { return m_subslot->read_rom04(space, offset, mem_mask); }
- virtual DECLARE_READ16_MEMBER(read_rom20) override { return m_subslot->read_rom20(space, offset, mem_mask); }
- virtual DECLARE_READ16_MEMBER(read_rom40) override { return m_subslot->read_rom40(space, offset, mem_mask); }
- virtual DECLARE_READ16_MEMBER(read_rom48) override { return m_subslot->read_rom48(space, offset, mem_mask); }
- virtual DECLARE_READ16_MEMBER(read_rom50) override { return m_subslot->read_rom50(space, offset, mem_mask); }
- virtual DECLARE_READ16_MEMBER(read_rom60) override { return m_subslot->read_rom60(space, offset, mem_mask); }
- virtual DECLARE_READ16_MEMBER(read_rom70) override { return m_subslot->read_rom70(space, offset, mem_mask); }
- virtual DECLARE_READ16_MEMBER(read_rom80) override;
- virtual DECLARE_READ16_MEMBER(read_rom90) override { return m_subslot->read_rom90(space, offset, mem_mask); }
- virtual DECLARE_READ16_MEMBER(read_roma0) override { return m_subslot->read_roma0(space, offset, mem_mask); }
- virtual DECLARE_READ16_MEMBER(read_romb0) override { return m_subslot->read_romb0(space, offset, mem_mask); }
- virtual DECLARE_READ16_MEMBER(read_romc0) override { return m_subslot->read_romc0(space, offset, mem_mask); }
- virtual DECLARE_READ16_MEMBER(read_romd0) override;
- virtual DECLARE_READ16_MEMBER(read_rome0) override { return m_subslot->read_rome0(space, offset, mem_mask); }
- virtual DECLARE_READ16_MEMBER(read_romf0) override { return m_subslot->read_romf0(space, offset, mem_mask); }
+ virtual uint16_t read_rom04(offs_t offset) override { return m_subslot->read_rom04(offset); }
+ virtual uint16_t read_rom20(offs_t offset) override { return m_subslot->read_rom20(offset); }
+ virtual uint16_t read_rom40(offs_t offset) override { return m_subslot->read_rom40(offset); }
+ virtual uint16_t read_rom48(offs_t offset) override { return m_subslot->read_rom48(offset); }
+ virtual uint16_t read_rom50(offs_t offset) override { return m_subslot->read_rom50(offset); }
+ virtual uint16_t read_rom60(offs_t offset) override { return m_subslot->read_rom60(offset); }
+ virtual uint16_t read_rom70(offs_t offset) override { return m_subslot->read_rom70(offset); }
+ virtual uint16_t read_rom80(offs_t offset) override;
+ virtual uint16_t read_rom90(offs_t offset) override { return m_subslot->read_rom90(offset); }
+ virtual uint16_t read_roma0(offs_t offset) override { return m_subslot->read_roma0(offset); }
+ virtual uint16_t read_romb0(offs_t offset) override { return m_subslot->read_romb0(offset); }
+ virtual uint16_t read_romc0(offs_t offset) override { return m_subslot->read_romc0(offset); }
+ virtual uint16_t read_romd0(offs_t offset) override;
+ virtual uint16_t read_rome0(offs_t offset) override { return m_subslot->read_rome0(offset); }
+ virtual uint16_t read_romf0(offs_t offset) override { return m_subslot->read_romf0(offset); }
// RAM passthru write
- virtual DECLARE_WRITE16_MEMBER(write_88) override { if (m_ram88_enabled) m_subslot->write_ram(space, offset, data, mem_mask); }
- virtual DECLARE_WRITE16_MEMBER(write_d0) override { if (m_ramd0_enabled) m_subslot->write_ram(space, offset, data, mem_mask); }
- virtual DECLARE_READ16_MEMBER(read_ram) override { return m_subslot->read_ram(space, offset, mem_mask); }
- virtual DECLARE_WRITE16_MEMBER(write_ram) override { m_subslot->write_ram(space, offset, data, mem_mask); }
+ virtual void write_88(offs_t offset, uint16_t data) override { if (m_ram88_enabled) m_subslot->write_ram(offset, data); }
+ virtual void write_d0(offs_t offset, uint16_t data) override { if (m_ramd0_enabled) m_subslot->write_ram(offset, data); }
+ virtual uint16_t read_ram(offs_t offset) override { return m_subslot->read_ram(offset); }
+ virtual void write_ram(offs_t offset, uint16_t data) override { m_subslot->write_ram(offset, data); }
virtual void late_subslot_setup() override;
diff --git a/src/devices/bus/intv_ctrl/ctrl.h b/src/devices/bus/intv_ctrl/ctrl.h
index 4a3ce67a688..1cf3968f933 100644
--- a/src/devices/bus/intv_ctrl/ctrl.h
+++ b/src/devices/bus/intv_ctrl/ctrl.h
@@ -41,7 +41,17 @@ class intv_control_port_device : public device_t,
{
public:
// construction/destruction
- intv_control_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ intv_control_port_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : intv_control_port_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ intv_control_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
virtual ~intv_control_port_device();
DECLARE_READ8_MEMBER( ctrl_r ) { return read_ctrl(); }
@@ -58,17 +68,6 @@ protected:
// device type definition
DECLARE_DEVICE_TYPE(INTV_CONTROL_PORT, intv_control_port_device)
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_INTV_CONTROL_PORT_ADD(_tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, INTV_CONTROL_PORT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-
-
void intv_control_port_devices(device_slot_interface &device);
diff --git a/src/devices/bus/intv_ctrl/ecs_ctrl.cpp b/src/devices/bus/intv_ctrl/ecs_ctrl.cpp
index e90292de645..3f6afda5f4b 100644
--- a/src/devices/bus/intv_ctrl/ecs_ctrl.cpp
+++ b/src/devices/bus/intv_ctrl/ecs_ctrl.cpp
@@ -145,10 +145,11 @@ static void intvecs_controller(device_slot_interface &device)
device.option_add("handctrl", INTV_HANDCTRL);
}
-MACHINE_CONFIG_START(intvecs_ctrls_device::device_add_mconfig)
- MCFG_INTV_CONTROL_PORT_ADD("port1", intvecs_controller, "handctrl")
- MCFG_INTV_CONTROL_PORT_ADD("port2", intvecs_controller, "handctrl")
-MACHINE_CONFIG_END
+void intvecs_ctrls_device::device_add_mconfig(machine_config &config)
+{
+ INTV_CONTROL_PORT(config, m_hand1, intvecs_controller, "handctrl");
+ INTV_CONTROL_PORT(config, m_hand2, intvecs_controller, "handctrl");
+}
intvecs_ctrls_device::intvecs_ctrls_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
diff --git a/src/devices/bus/intv_ctrl/ecs_ctrl.h b/src/devices/bus/intv_ctrl/ecs_ctrl.h
index 923b5785358..8a723c64949 100644
--- a/src/devices/bus/intv_ctrl/ecs_ctrl.h
+++ b/src/devices/bus/intv_ctrl/ecs_ctrl.h
@@ -46,7 +46,17 @@ class intvecs_control_port_device : public device_t,
{
public:
// construction/destruction
- intvecs_control_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ intvecs_control_port_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : intvecs_control_port_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ intvecs_control_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
virtual ~intvecs_control_port_device();
DECLARE_READ8_MEMBER( portA_r ) { return read_portA(); }
@@ -68,16 +78,6 @@ protected:
DECLARE_DEVICE_TYPE(INTVECS_CONTROL_PORT, intvecs_control_port_device)
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_INTVECS_CONTROL_PORT_ADD(_tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, INTVECS_CONTROL_PORT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-
-
void intvecs_control_port_devices(device_slot_interface &device);
diff --git a/src/devices/bus/iq151/disc2.cpp b/src/devices/bus/iq151/disc2.cpp
index db9919ef516..0fde6792d40 100644
--- a/src/devices/bus/iq151/disc2.cpp
+++ b/src/devices/bus/iq151/disc2.cpp
@@ -95,7 +95,7 @@ const tiny_rom_entry *iq151_disc2_device::device_rom_region() const
void iq151_disc2_device::read(offs_t offset, uint8_t &data)
{
- // interal ROM is mapped at 0xe000-0xe7ff
+ // internal ROM is mapped at 0xe000-0xe7ff
if (offset >= 0xe000 && offset < 0xe800 && m_rom_enabled)
data = m_rom[offset & 0x7ff];
}
@@ -107,12 +107,10 @@ void iq151_disc2_device::read(offs_t offset, uint8_t &data)
void iq151_disc2_device::io_read(offs_t offset, uint8_t &data)
{
- /* This is gross */
- address_space *space = nullptr;
if (offset == 0xaa)
- data = m_fdc->msr_r(*space, 0, 0xff);
+ data = m_fdc->msr_r();
else if (offset == 0xab)
- data = m_fdc->fifo_r(*space, 0, 0xff);
+ data = m_fdc->fifo_r();
}
//-------------------------------------------------
@@ -121,9 +119,8 @@ void iq151_disc2_device::io_read(offs_t offset, uint8_t &data)
void iq151_disc2_device::io_write(offs_t offset, uint8_t data)
{
- address_space *space = nullptr;
if (offset == 0xab)
- m_fdc->fifo_w(*space, 0, data, 0xff);
+ m_fdc->fifo_w(data);
else if (offset == 0xac)
m_rom_enabled = (data == 0x01);
}
diff --git a/src/devices/bus/iq151/iq151.h b/src/devices/bus/iq151/iq151.h
index e68d27a007d..306fef47ee6 100644
--- a/src/devices/bus/iq151/iq151.h
+++ b/src/devices/bus/iq151/iq151.h
@@ -87,16 +87,26 @@ class iq151cart_slot_device : public device_t,
{
public:
// construction/destruction
- iq151cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ iq151cart_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : iq151cart_slot_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ iq151cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
virtual ~iq151cart_slot_device();
- void set_screen_tag(const char *tag) { m_screen.set_tag(tag); }
- template <class Object> devcb_base &set_out_irq0_callback(Object &&cb) { return m_out_irq0_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_irq1_callback(Object &&cb) { return m_out_irq1_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_irq2_callback(Object &&cb) { return m_out_irq2_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_irq3_callback(Object &&cb) { return m_out_irq3_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_irq4_callback(Object &&cb) { return m_out_irq4_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_drq_callback(Object &&cb) { return m_out_drq_cb.set_callback(std::forward<Object>(cb)); }
+ template <typename T> void set_screen_tag(T &&tag) { m_screen.set_tag(std::forward<T>(tag)); }
+ auto out_irq0_callback() { return m_out_irq0_cb.bind(); }
+ auto out_irq1_callback() { return m_out_irq1_cb.bind(); }
+ auto out_irq2_callback() { return m_out_irq2_cb.bind(); }
+ auto out_irq3_callback() { return m_out_irq3_cb.bind(); }
+ auto out_irq4_callback() { return m_out_irq4_cb.bind(); }
+ auto out_drq_callback() { return m_out_drq_cb.bind(); }
// device-level overrides
virtual void device_start() override;
@@ -139,30 +149,4 @@ public:
// device type definition
DECLARE_DEVICE_TYPE(IQ151CART_SLOT, iq151cart_slot_device)
-
-/***************************************************************************
- DEVICE CONFIGURATION MACROS
-***************************************************************************/
-
-#define MCFG_IQ151CART_SLOT_OUT_IRQ0_CB(_devcb) \
- downcast<iq151cart_slot_device &>(*device).set_out_irq0_callback(DEVCB_##_devcb);
-
-#define MCFG_IQ151CART_SLOT_OUT_IRQ1_CB(_devcb) \
- downcast<iq151cart_slot_device &>(*device).set_out_irq1_callback(DEVCB_##_devcb);
-
-#define MCFG_IQ151CART_SLOT_OUT_IRQ2_CB(_devcb) \
- downcast<iq151cart_slot_device &>(*device).set_out_irq2_callback(DEVCB_##_devcb);
-
-#define MCFG_IQ151CART_SLOT_OUT_IRQ3_CB(_devcb) \
- downcast<iq151cart_slot_device &>(*device).set_out_irq3_callback(DEVCB_##_devcb);
-
-#define MCFG_IQ151CART_SLOT_OUT_IRQ4_CB(_devcb) \
- downcast<iq151cart_slot_device &>(*device).set_out_irq4_callback(DEVCB_##_devcb);
-
-#define MCFG_IQ151CART_SLOT_OUT_DRQ_CB(_devcb) \
- downcast<iq151cart_slot_device &>(*device).set_out_drq_callback(DEVCB_##_devcb);
-
-#define MCFG_IQ151CART_SLOT_SCREEN_TAG(screen_tag) \
- downcast<iq151cart_slot_device &>(*device).set_screen_tag(screen_tag);
-
#endif // MAME_BUS_IQ151_IQ151_H
diff --git a/src/devices/bus/isa/3c503.cpp b/src/devices/bus/isa/3c503.cpp
index 424ce8bb082..34202e2246d 100644
--- a/src/devices/bus/isa/3c503.cpp
+++ b/src/devices/bus/isa/3c503.cpp
@@ -5,12 +5,13 @@
#define SADDR 0xcc000
-MACHINE_CONFIG_START(el2_3c503_device::device_add_mconfig)
- MCFG_DEVICE_ADD("dp8390d", DP8390D, 0)
- MCFG_DP8390D_IRQ_CB(WRITELINE(*this, el2_3c503_device, el2_3c503_irq_w))
- MCFG_DP8390D_MEM_READ_CB(READ8(*this, el2_3c503_device, el2_3c503_mem_r))
- MCFG_DP8390D_MEM_WRITE_CB(WRITE8(*this, el2_3c503_device, el2_3c503_mem_w))
-MACHINE_CONFIG_END
+void el2_3c503_device::device_add_mconfig(machine_config &config)
+{
+ DP8390D(config, m_dp8390, 0);
+ m_dp8390->irq_callback().set(FUNC(el2_3c503_device::el2_3c503_irq_w));
+ m_dp8390->mem_read_callback().set(FUNC(el2_3c503_device::el2_3c503_mem_r));
+ m_dp8390->mem_write_callback().set(FUNC(el2_3c503_device::el2_3c503_mem_w));
+}
DEFINE_DEVICE_TYPE(EL2_3C503, el2_3c503_device, "el2_3c503", "3C503 Network Adapter")
diff --git a/src/devices/bus/isa/3c505.cpp b/src/devices/bus/isa/3c505.cpp
index 71548dcbdaa..37cd5ef346a 100644
--- a/src/devices/bus/isa/3c505.cpp
+++ b/src/devices/bus/isa/3c505.cpp
@@ -1644,7 +1644,9 @@ READ16_MEMBER(threecom3c505_device::read)
// omit excessive logging
if (data == last_data)
{
- uint32_t pc = space.device().state().pcbase();
+ // FIXME: space.device().state().pcbase() will crash mame with SIGSEGV (since mame0197)
+ uint32_t pc = 0; // space.device().state().pcbase();
+
if (pc == last_pc)
{
return data;
diff --git a/src/devices/bus/isa/adlib.cpp b/src/devices/bus/isa/adlib.cpp
index 814fdeaaf58..6a900b0e09d 100644
--- a/src/devices/bus/isa/adlib.cpp
+++ b/src/devices/bus/isa/adlib.cpp
@@ -20,7 +20,7 @@ READ8_MEMBER( isa8_adlib_device::ym3812_16_r )
uint8_t retVal = 0xff;
switch(offset)
{
- case 0 : retVal = m_ym3812->status_port_r( space, offset ); break;
+ case 0 : retVal = m_ym3812->status_port_r(); break;
}
return retVal;
}
@@ -29,8 +29,8 @@ WRITE8_MEMBER( isa8_adlib_device::ym3812_16_w )
{
switch(offset)
{
- case 0 : m_ym3812->control_port_w( space, offset, data ); break;
- case 1 : m_ym3812->write_port_w( space, offset, data ); break;
+ case 0 : m_ym3812->control_port_w(data); break;
+ case 1 : m_ym3812->write_port_w(data); break;
}
}
@@ -44,11 +44,11 @@ DEFINE_DEVICE_TYPE(ISA8_ADLIB, isa8_adlib_device, "isa_adlib", "Ad Lib Sound Car
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa8_adlib_device::device_add_mconfig)
+void isa8_adlib_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("ym3812", YM3812, ym3812_StdClock)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 3.00)
-MACHINE_CONFIG_END
+ YM3812(config, m_ym3812, ym3812_StdClock).add_route(ALL_OUTPUTS, "mono", 3.00);
+}
//**************************************************************************
// LIVE DEVICE
diff --git a/src/devices/bus/isa/aga.cpp b/src/devices/bus/isa/aga.cpp
index 9aa2810431b..e1c26328c44 100644
--- a/src/devices/bus/isa/aga.cpp
+++ b/src/devices/bus/isa/aga.cpp
@@ -273,12 +273,13 @@ MC6845_UPDATE_ROW( isa8_aga_device::aga_update_row )
}
-MACHINE_CONFIG_START(isa8_aga_device::device_add_mconfig)
- MCFG_SCREEN_ADD( AGA_SCREEN_NAME, RASTER )
- MCFG_SCREEN_RAW_PARAMS( XTAL(14'318'181),912,0,640,262,0,200 )
- MCFG_SCREEN_UPDATE_DEVICE( AGA_MC6845_NAME, mc6845_device, screen_update )
+void isa8_aga_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, AGA_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(14'318'181), 912, 0, 640, 262, 0, 200);
+ screen.set_screen_update(AGA_MC6845_NAME, FUNC(mc6845_device::screen_update));
- MCFG_PALETTE_ADD( "palette", /* CGA_PALETTE_SETS * 16*/ 65536 )
+ PALETTE(config, m_palette).set_entries(/* CGA_PALETTE_SETS * 16*/ 65536);
MC6845(config, m_mc6845, XTAL(14'318'181)/8);
m_mc6845->set_screen(AGA_SCREEN_NAME);
@@ -287,7 +288,7 @@ MACHINE_CONFIG_START(isa8_aga_device::device_add_mconfig)
m_mc6845->set_update_row_callback(FUNC(isa8_aga_device::aga_update_row), this);
m_mc6845->out_hsync_callback().set(FUNC(isa8_aga_device::hsync_changed));
m_mc6845->out_vsync_callback().set(FUNC(isa8_aga_device::vsync_changed));
-MACHINE_CONFIG_END
+}
/*************************************
@@ -689,7 +690,7 @@ READ8_MEMBER ( isa8_aga_device::pc_aga_mda_r )
/* return last written mc6845 address value here? */
break;
case 1: case 3: case 5: case 7:
- data = m_mc6845->register_r(space, offset);
+ data = m_mc6845->register_r();
break;
case 10:
data = m_vsync | 0x08 | m_hsync;
@@ -706,10 +707,10 @@ WRITE8_MEMBER ( isa8_aga_device::pc_aga_mda_w )
switch( offset )
{
case 0: case 2: case 4: case 6:
- m_mc6845->address_w( space, offset, data );
+ m_mc6845->address_w(data);
break;
case 1: case 3: case 5: case 7:
- m_mc6845->register_w( space, offset, data );
+ m_mc6845->register_w(data);
break;
case 8:
m_mda_mode_control = data;
@@ -740,7 +741,7 @@ READ8_MEMBER ( isa8_aga_device::pc_aga_cga_r )
/* return last written mc6845 address value here? */
break;
case 1: case 3: case 5: case 7:
- data = m_mc6845->register_r( space, offset);
+ data = m_mc6845->register_r();
break;
case 10:
data = m_vsync | ( ( data & 0x40 ) >> 4 ) | m_hsync;
@@ -791,10 +792,10 @@ WRITE8_MEMBER (isa8_aga_device:: pc_aga_cga_w )
if ( m_mode == AGA_COLOR ) {
switch(offset) {
case 0: case 2: case 4: case 6:
- m_mc6845->address_w( space, offset, data );
+ m_mc6845->address_w(data);
break;
case 1: case 3: case 5: case 7:
- m_mc6845->register_w( space, offset, data );
+ m_mc6845->register_w(data);
break;
case 8:
m_cga_mode_control = data;
diff --git a/src/devices/bus/isa/aha1542.cpp b/src/devices/bus/isa/aha1542.cpp
deleted file mode 100644
index 8e260347eee..00000000000
--- a/src/devices/bus/isa/aha1542.cpp
+++ /dev/null
@@ -1,200 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Darkstar
-/**********************************************************************
- *
- * Adaptec AHA-1542{,C,CF} SCSI Controller
- *
- **********************************************************************/
-
-/*
- PCB layout
- ----------
- Floppy SCSI
- +-----------+ +------------------+ +-
- +-----+-----------+-+------------------+--+
- | |
- | DIPSW DS1 |\
- | +-----+ | |
- | | | Y1 +---+ TRM TRM | |
- | | U3 | |U5 | |S|
- | U8 +-----+ +---+ |C|
- | +---+ +------+ +-------+ |S|
- | |U13| |U15 | Y2 | | |I|
- | +---+ +------+ | | | |
- | |U16 | |U17 | | |
- | +------+ +-------+ |/
- +-----------------------------------------+
- ||||||||| ||||||||||||||||||||||||| |
-
-
- DIPSW sw1 - sw8
- U3 Intel chip labelled "AHA-1542CF/552800-01 D/9346", probably FDC (82077)
- U5 Z84C0010VEC
- U8 EEPROM(?) labelled 545120A
- U13 CXK5864CM-10LL (64kbit SRAM)
- U15 M27C256B labelled "ADAPTEC INC/553801-00 C/MCODE 563D/(C) 1993"
- U16 M27C256B labelled "ADAPTEC INC/553601-00 C/BIOS C38D/(C) 1993"
- U17 AIC-7970Q
- Y1 XTAL SRX4054 93-38
- Y2 XTAL SRX4053 93-40
- TRM Dallas DS2107AS (SCSI termination)
- DS1 LED
-
-*/
-
-/*
- * The PCB has a couple of DIP switches:
- *
- * sw1 on enable termination
- * off software-controlled termination
- *
- * sw2 sw3 sw4 I/O Port
- * off off off 0x330 - 0x333 (default)
- * on off off 0x334 - 0x337
- * off on off 0x230 - 0x233
- * on on off 0x234 - 0x237
- * off off on 0x130 - 0x133
- * on off on 0x134 - 0x137
- * off on on reserved
- * on on on reserved
- *
- * sw5 on disable floppy interface
- * off enable floppy interface
- *
- * sw6 sw7 sw8 BIOS base address
- * off off off 0xdc000 (default)
- * on off off 0xd8000
- * off on off 0xd4000
- * on on off 0xd0000
- * off off on 0xcc000
- * on off on 0xc8000
- * off on on reserved
- * on on on BIOS disabled
- *
- * source: http://download.adaptec.com/pdfs/installation_guides/1540cfig.pdf
- */
-
-#include "emu.h"
-#include "aha1542.h"
-#include "cpu/z80/z80.h"
-
-// I/O Port interface
-// READ Port x+0: STATUS
-// WRITE Port x+0: CONTROL
-//
-// READ Port x+1: DATA
-// WRITE Port x+1: COMMAND
-//
-// READ Port x+2: INTERRUPT STATUS
-// WRITE Port x+2: (undefined?)
-//
-// R/W Port x+3: (undefined)
-
-// READ STATUS flags
-#define STAT_STST 0x80 // self-test in progress
-#define STAT_DIAGF 0x40 // internal diagnostic failure
-#define STAT_INIT 0x20 // mailbox initialization required
-#define STAT_IDLE 0x10 // HBA is idle
-#define STAT_CDFULL 0x08 // Command/Data output port is full
-#define STAT_DFULL 0x04 // Data input port is full
-#define STAT_INVCMD 0x01 // Invalid command
-
-// READ INTERRUPT STATUS flags
-#define INTR_ANY 0x80 // any interrupt
-#define INTR_SRCD 0x08 // SCSI reset detected
-#define INTR_HACC 0x04 // HA command complete
-#define INTR_MBOA 0x02 // MBO empty
-#define INTR_MBIF 0x01 // MBI full
-
-// WRITE CONTROL commands
-#define CTRL_HRST 0x80 // Hard reset
-#define CTRL_SRST 0x40 // Soft reset
-#define CTRL_IRST 0x20 // interrupt reset
-#define CTRL_SCRST 0x10 // SCSI bus reset
-
-// READ/WRITE DATA commands
-#define CMD_NOP 0x00 // No operation
-#define CMD_MBINIT 0x01 // mailbox initialization
-#define CMD_START_SCSI 0x02 // Start SCSI command
-#define CMD_BIOSCMD 0x03 // undocumented BIOS conmmand (shadow RAM etc.)
-#define CMD_INQUIRY 0x04 // Adapter inquiry
-#define CMD_EMBOI 0x05 // enable Mailbox Out Interrupt
-#define CMD_SELTIMEOUT 0x06 // Set SEL timeout
-#define CMD_BUSON_TIME 0x07 // set bus-On time
-#define CMD_BUSOFF_TIME 0x08 // set bus-off time
-#define CMD_DMASPEED 0x09 // set ISA DMA speed
-#define CMD_RETDEVS 0x0a // return installed devices
-#define CMD_RETCONF 0x0b // return configuration data
-#define CMD_TARGET 0x0c // set HBA to target mode
-#define CMD_RETSETUP 0x0d // return setup data
-#define CMD_ECHO 0x1f // ECHO command data (NetBSD says it is 0x1e)
-
-// these are for 1541C only:
-#define CMD_RETDEVSHI 0x23 // return devices 8-15 (from NetBSD)
-#define CMD_EXTBIOS 0x28 // return extended BIOS information
-#define CMD_MBENABLE 0x29 // set mailbox interface enable
-
-DEFINE_DEVICE_TYPE(AHA1542, aha1542_device, "aha1542", "AHA1542 SCSI Controller")
-
-#define Z84C0010_TAG "u5"
-
-READ8_MEMBER( aha1542_device::aha1542_r )
-{
- logerror("%s aha1542_r(): offset=%d\n", machine().describe_context(), offset);
- return 0xff;
-}
-
-WRITE8_MEMBER( aha1542_device::aha1542_w )
-{
- logerror("%s aha1542_w(): offset=%d data=0x%02x\n", machine().describe_context(), offset, data);
-}
-
-//-------------------------------------------------
-// ROM( aha1542 )
-//-------------------------------------------------
-
-ROM_START( aha1542 )
- ROM_REGION( 0x8000, "aha1542", 0 )
- ROM_LOAD( "553601-00.u16", 0x0000, 0x8000, CRC(ab22fc02) SHA1(f9f783e0272fc14ba3de32316997f1f6cadc67d0) ) /* Adaptec 1540CF/1542CF BIOS v2.01 */
-
- ROM_REGION( 0x8000, Z84C0010_TAG, 0 )
- ROM_LOAD( "553801-00.u15", 0x0000, 0x8000, CRC(7824397e) SHA1(35bc2c8fab31aad3190a478f2dc8f3a72958cf04) ) /* ADAPTEC, INC MCODE */
-ROM_END
-
-void aha1542_device::z84c0010_mem(address_map &map)
-{
- map(0x0000, 0x7fff).rom().region(Z84C0010_TAG, 0);
- map(0x8000, 0x800f).noprw(); // something is mapped there
- map(0x9000, 0xafff).ram(); // 2kb RAM chip
- map(0xe000, 0xe0ff).ram(); // probably PC<->Z80 communication area
- map(0xb000, 0xb000).noprw(); // something?
-}
-
-const tiny_rom_entry *aha1542_device::device_rom_region() const
-{
- return ROM_NAME( aha1542 );
-}
-
-MACHINE_CONFIG_START(aha1542_device::device_add_mconfig)
- MCFG_DEVICE_ADD(Z84C0010_TAG, Z80, XTAL(12'000'000))
- MCFG_DEVICE_PROGRAM_MAP( z84c0010_mem )
-MACHINE_CONFIG_END
-
-aha1542_device::aha1542_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- device_t(mconfig, AHA1542, tag, owner, clock),
- device_isa16_card_interface(mconfig, *this)
-{
-}
-
-void aha1542_device::device_start()
-{
- set_isa_device();
- m_isa->install_rom(this, 0xdc000, 0xdffff, "aha1542", "aha1542");
- m_isa->install_device(0x330, 0x333, read8_delegate(FUNC( aha1542_device::aha1542_r ), this),
- write8_delegate(FUNC( aha1542_device::aha1542_w ), this) );
-}
-
-
-void aha1542_device::device_reset()
-{
-}
diff --git a/src/devices/bus/isa/aha1542.h b/src/devices/bus/isa/aha1542.h
deleted file mode 100644
index cc84c2ea55b..00000000000
--- a/src/devices/bus/isa/aha1542.h
+++ /dev/null
@@ -1,54 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Darkstar
-/**********************************************************************
- *
- * Adaptec AHA-1542{,C,CF} SCSI Controller
- *
- **********************************************************************
-
-
-
- **********************************************************************/
-
-#ifndef MAME_BUS_AHA1542_H
-#define MAME_BUS_AHA1542_H
-
-#pragma once
-
-
-#include "isa.h"
-
-//*********************************************************************
-// TYPE DEFINITIONS
-//*********************************************************************
-
-// ====================> aha1542_device
-
-class aha1542_device : public device_t,
- public device_isa16_card_interface
-{
-public:
- static constexpr feature_type unemulated_features() { return feature::DISK; }
- // construction/destruction
- aha1542_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
- DECLARE_READ8_MEMBER( aha1542_r );
- DECLARE_WRITE8_MEMBER( aha1542_w );
-
-protected:
- // device-level overrides
- virtual void device_start() override;
- virtual void device_reset() override;
-
- // optional information overrides
- virtual const tiny_rom_entry *device_rom_region() const override;
- virtual void device_add_mconfig(machine_config &config) override;
-
-private:
- void z84c0010_mem(address_map &map);
-};
-
-// device type definition
-DECLARE_DEVICE_TYPE(AHA1542, aha1542_device)
-
-#endif // MAME_BUS_AHA1542_H
diff --git a/src/devices/bus/isa/aha1542b.cpp b/src/devices/bus/isa/aha1542b.cpp
new file mode 100644
index 00000000000..e0073cbbd68
--- /dev/null
+++ b/src/devices/bus/isa/aha1542b.cpp
@@ -0,0 +1,126 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ Adaptec AHA-1540/42A and AHA-1540/42B SCSI controllers
+
+ The alternate BIOSes using port 334h instead of 330h are provided due
+ to certain MIDI cards requiring the 330h port.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "aha1542b.h"
+
+#include "cpu/i8085/i8085.h"
+#include "machine/aic6250.h"
+#include "machine/nscsi_bus.h"
+#include "machine/nscsi_hd.h"
+
+
+DEFINE_DEVICE_TYPE(AHA1542A, aha1542a_device, "aha1542a", "AHA-1542A SCSI Controller")
+DEFINE_DEVICE_TYPE(AHA1542B, aha1542b_device, "aha1542b", "AHA-1542B SCSI Controller")
+
+
+aha154x_device::aha154x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_isa16_card_interface(mconfig, *this)
+ , m_fdc(*this, "fdc")
+ , m_bios(*this, "bios")
+{
+}
+
+aha1542a_device::aha1542a_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : aha154x_device(mconfig, AHA1542A, tag, owner, clock)
+{
+}
+
+aha1542b_device::aha1542b_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : aha154x_device(mconfig, AHA1542B, tag, owner, clock)
+{
+}
+
+void aha154x_device::device_start()
+{
+}
+
+void aha154x_device::i8085_map(address_map &map)
+{
+ map(0x0000, 0x3fff).rom().region("mcode", 0);
+ map(0x8000, 0x800f).m("scsi:7:scsic", FUNC(aic6250_device::map));
+ map(0xe000, 0xe7ff).ram();
+}
+
+static void aha154x_scsi_devices(device_slot_interface &device)
+{
+ device.option_add("harddisk", NSCSI_HARDDISK);
+ device.option_add_internal("scsic", AIC6250);
+}
+
+void aha154x_device::scsic_config(device_t *device)
+{
+ device->set_clock(20'000'000);
+ downcast<aic6250_device &>(*device).int_cb().set_inputline("^^localcpu", I8085_RST65_LINE);
+}
+
+void aha154x_device::device_add_mconfig(machine_config &config)
+{
+ i8085a_cpu_device &localcpu(I8085A(config, "localcpu", 10'000'000));
+ localcpu.set_addrmap(AS_PROGRAM, &aha154x_device::i8085_map);
+
+ NSCSI_BUS(config, "scsi");
+ NSCSI_CONNECTOR(config, "scsi:0", aha154x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:1", aha154x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:2", aha154x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:3", aha154x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:4", aha154x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:5", aha154x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:6", aha154x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:7", aha154x_scsi_devices, "scsic", true)
+ .set_option_machine_config("scsic", [this] (device_t *device) { scsic_config(device); });
+
+ DP8473(config, m_fdc, 24_MHz_XTAL);
+}
+
+
+ROM_START(aha1542a)
+ ROM_REGION(0x4000, "bios", 0)
+ ROM_LOAD("b_9700.bin", 0x0000, 0x4000, CRC(35f546e9) SHA1(f559b08f52044f53836021a83f56f628e32216bd))
+
+ ROM_REGION(0x4000, "mcode", 0)
+ ROM_LOAD("m_e7bc.bin", 0x0000, 0x4000, CRC(985b7a31) SHA1(bba0d84fa1b67ea71905953c25201fa2020cf465))
+ROM_END
+
+ROM_START(aha1542b)
+ ROM_REGION(0x4000, "bios", 0)
+ ROM_SYSTEM_BIOS(0, "v310", "AT/SCSI BIOS Version 3.10")
+ ROMX_LOAD("adaptec_inc_420412-00_b_bios_bc00_1990.bin", 0x0000, 0x4000, CRC(bd3f74e7) SHA1(c38d82fd50e5439812fa093e0d4f5fd136c63844), ROM_BIOS(0))
+ ROM_SYSTEM_BIOS(1, "v310a", "AT/SCSI BIOS Version 3.10A (port 334h)")
+ ROMX_LOAD("154xp334.bin", 0x0000, 0x4000, CRC(4911f232) SHA1(2e24ce380c6f7694c45484019857cb919e2a9965), ROM_BIOS(1))
+ ROM_SYSTEM_BIOS(2, "v311", "AT/SCSI BIOS Version 3.11")
+ ROMX_LOAD("bios_c900.u13", 0x0000, 0x4000, CRC(4660d0c1) SHA1(a581291de96836b6f6cc0b6244b8fa1ee333346a), ROM_BIOS(2))
+ ROM_SYSTEM_BIOS(3, "v320g", "AT/SCSI BIOS Version 3.20 (> 1 GB support)")
+ ROMX_LOAD("b_bd00.bin", 0x0000, 0x4000, CRC(2387197b) SHA1(703e1fe1ba924c02d617ac37ec7a20e12bef1cc7), ROM_BIOS(3))
+ ROM_SYSTEM_BIOS(4, "v320gt", "AT/SCSI BIOS Version 3.20 (extended timeout)")
+ ROMX_LOAD("b_b300.bin", 0x0000, 0x4000, CRC(4c5b07d8) SHA1(692e824f916f55519c9905839f5f6609f5e8c0a5), ROM_BIOS(4))
+ ROM_SYSTEM_BIOS(5, "v320a", "AT/SCSI BIOS Version 3.20Alt (port 334h)")
+ ROMX_LOAD("b_ac00.bin", 0x0000, 0x4000, CRC(becd6d08) SHA1(b5e7cbdeb241c1ff57602291e87c58ac0ee72d54), ROM_BIOS(5))
+
+ ROM_REGION(0x4000, "mcode", 0)
+ ROMX_LOAD("adaptec_inc_434108-00_a_mcode_fc8a_1990.bin", 0x0000, 0x4000, CRC(6801f89e) SHA1(33d36bc93734105b950414e7c433a283032838e9), ROM_BIOS(0))
+ ROMX_LOAD("adaptec_inc_434108-00_a_mcode_fc8a_1990.bin", 0x0000, 0x4000, CRC(6801f89e) SHA1(33d36bc93734105b950414e7c433a283032838e9), ROM_BIOS(1)) // assumed compatible with v310a BIOS
+ ROMX_LOAD("firmware_62d3.u12", 0x0000, 0x4000, CRC(6056ca33) SHA1(8dd4aaffcb107dbcc85ac87d878fa6093b904a20), ROM_BIOS(2))
+ ROMX_LOAD("m_3054.bin", 0x0000, 0x4000, CRC(461b1885) SHA1(50dc49b0fd88b116b83e3c71f58c758b618d1ddf), ROM_BIOS(3))
+ ROMX_LOAD("m_5d98.bin", 0x0000, 0x4000, CRC(f7d51536) SHA1(5ad1bb4bde3e8c30380b05d32ac273c781ab12a8), ROM_BIOS(4)) // also provided with v320g BIOS
+ ROMX_LOAD("m_3054.bin", 0x0000, 0x4000, CRC(461b1885) SHA1(50dc49b0fd88b116b83e3c71f58c758b618d1ddf), ROM_BIOS(5))
+ROM_END
+
+const tiny_rom_entry *aha1542a_device::device_rom_region() const
+{
+ return ROM_NAME(aha1542a);
+}
+
+const tiny_rom_entry *aha1542b_device::device_rom_region() const
+{
+ return ROM_NAME(aha1542b);
+}
diff --git a/src/devices/bus/isa/aha1542b.h b/src/devices/bus/isa/aha1542b.h
new file mode 100644
index 00000000000..95e379cb137
--- /dev/null
+++ b/src/devices/bus/isa/aha1542b.h
@@ -0,0 +1,57 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ Adaptec AHA-1540/42A and AHA-1540/42B SCSI controllers
+
+***************************************************************************/
+
+#ifndef MAME_BUS_ISA_AHA1542B_H
+#define MAME_BUS_ISA_AHA1542B_H
+
+#pragma once
+
+#include "isa.h"
+#include "machine/upd765.h"
+
+class aha154x_device : public device_t, public device_isa16_card_interface
+{
+protected:
+ aha154x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
+
+ virtual void device_start() override;
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ void i8085_map(address_map &map);
+ void scsic_config(device_t *device);
+
+ required_device<upd765_family_device> m_fdc;
+ required_region_ptr<u8> m_bios;
+};
+
+class aha1542a_device : public aha154x_device
+{
+public:
+ aha1542a_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+
+protected:
+ virtual const tiny_rom_entry *device_rom_region() const override;
+};
+
+class aha1542b_device : public aha154x_device
+{
+public:
+ aha1542b_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+
+protected:
+ virtual const tiny_rom_entry *device_rom_region() const override;
+};
+
+DECLARE_DEVICE_TYPE(AHA1542A, aha1542a_device)
+DECLARE_DEVICE_TYPE(AHA1542B, aha1542b_device)
+
+#endif // MAME_BUS_ISA_AHA1542B_H
diff --git a/src/devices/bus/isa/aha1542c.cpp b/src/devices/bus/isa/aha1542c.cpp
new file mode 100644
index 00000000000..efb8181061c
--- /dev/null
+++ b/src/devices/bus/isa/aha1542c.cpp
@@ -0,0 +1,323 @@
+// license:BSD-3-Clause
+// copyright-holders:Darkstar
+/**********************************************************************
+ *
+ * Adaptec AHA-1542{C,CF,CP} SCSI Controller
+ *
+ **********************************************************************/
+
+/*
+Hardware info by Guru
+
+Adaptec 1993
+
+PCB Layout
+----------
+
+Adaptec AHA-1542CF/1542CF
+FCC ID: FGT1542CF
+FAB 545107-00 REV C
+ASSY 545106-00
+
+|-------|---------------|---|-------------------|--|
+| J1 | FLOPPY34 | | SCSI50 | |
+| |---------------| |-------------------| |
+| S1 DS1 |
+| |
+| |------| DS2107AS DS2107AS |--|
+| |PC8477| 24MHz Z84C0010 | |
+| PAL |BV-1 | |S |
+| | | |----------| | |
+| |------| | | |C |
+| 93C46.U11 20MHz | | | |
+| UM6264 MCODE.U15 |ADAPTEC | |S |
+| |AIC-7970Q | | |
+| BIOS.U16 | | |I |
+| | | | |
+| |----------| |--|
+| |
+|-| |--| |----|
+ |--------------| |-------------------------|
+
+Notes:
+ J1 - 4-position header for drive activity external LED connection
+ S1 - 8-position DIP Switch (See Table A)
+ PC8477BV-1 - National Semiconductor PC8477BV-1 'SuperFDC' Advanced Floppy Disk Controller (PLCC68)
+ This is software compatible with NEC uPD765 and pin compatible with Intel 82077AA
+ Labelled "AHA-1542CF/552800-01 F/9513"
+ Clock input 24.000MHz
+ SCSI - 50-pin Centronics style external SCSI connector (DDK 57AE-40500-21D)
+ Z84C0010 - Zilog Z84C0010VEC Z80 CPU. Clock input 20/2 [10.000MHz] sourced from AIC-7970Q (PLCC44)
+ 93C46.U11 - Atmel 93C46 128b x8-bit / 64b x16-bit (1kB) EEPROM labelled '545120A' (SOIC8)
+ 6264 - Unicorn Microelectronics UM6264BM-10L 8k x8-bit Static RAM (SOJ28)
+ MCODE.U15 - ST Microelectronics M27C256B 32k x8-bit EPROM labelled 'ADAPTEC INC 553801-00 E MCODE 4B81' (DIP28)
+ BIOS.U16 - ST Microelectronics M27C256B 32k x8-bit EPROM labelled 'ADAPTEC INC 553601-00 E BIOS 7600' (DIP28)
+ BIOS 0x7600h is revision 2.10
+ PAL - AMD PALCE16V8H-15JC/4 PAL (SOJ20)
+ AIC-7970Q - Adaptec AIC-7970Q Fast SCSI Controller IC. Clock input 20.000MHz (QFP144)
+ DS2107AS - Dallas DS2107AS SCSI Active Terminator (SOIC16)
+ DS1 - Internal Drive Activity LED
+ SCSI50 - 50-pin Right Angled Flat Cable Connector With Support For Up To 7 SCSI Drives
+ FLOPPY34 - 34-pin Right Angled Flat Cable Connector With Support For Up To 2 Floppy Drives (360kb,720kb,1.2MB,1.44MB)
+
+
+Table A - S1 DIP Switch Description
+-----------------------------------
+
+Default: All DIP Switches OFF (i.e. Settings changed via BIOS and saved in EEPROM)
+Software Defaults = *
+----------------------+-----+-----+-----+-----+-----+-----+-----+-----+
+ | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | SW7 | SW8 |
+----------------------|-----+-----+-----+-----+-----+-----+-----+-----+
+Termination Enabled | ON | | | | | | | |
+ Set In BIOS*| OFF | | | | | | | |
+----------------------+-----+-----+-----+-----+ | | | |
+I/O Port 330H*| | OFF | OFF | OFF | | | | |
+ 334H | | ON | OFF | OFF | | | | |
+ 230H | | OFF | ON | OFF | | | | |
+ 234H | | ON | ON | OFF | | | | |
+ 130H | | OFF | OFF | ON | | | | |
+ 134H | | ON | OFF | ON | | | | |
+ Reserved | | OFF | ON | ON | | | | |
+ Reserved | | ON | ON | ON | | | | |
+----------------------+-----+-----+-----+-----+-----+ | | |
+Enable Floppy Yes*| | OFF | | | |
+ No | | ON | | | |
+----------------------+-----------------------+-----+-----+-----+-----+
+BIOS Address DC000H*| | OFF | OFF | OFF |
+ D8000H | | ON | OFF | OFF |
+ D4000H | | OFF | ON | OFF |
+ D0000H | | ON | ON | OFF |
+ CC000H | | OFF | OFF | ON |
+ C8000H | | ON | OFF | ON |
+ Reserved | | OFF | ON | ON |
+ BIOS Disabled | | ON | ON | ON |
+----------------------+-----------------------------+-----+-----+-----+
+
+Documentation:
+Adaptec AHA-1540CF/1542CF Installation Guide
+http://download.adaptec.com/pdfs/installation_guides/aha1540cf_ig.pdf
+ */
+
+#include "emu.h"
+#include "aha1542c.h"
+#include "cpu/z80/z80.h"
+
+// I/O Port interface
+// READ Port x+0: STATUS
+// WRITE Port x+0: CONTROL
+//
+// READ Port x+1: DATA
+// WRITE Port x+1: COMMAND
+//
+// READ Port x+2: INTERRUPT STATUS
+// WRITE Port x+2: (undefined?)
+//
+// R/W Port x+3: (undefined)
+
+// READ STATUS flags
+#define STAT_STST 0x80 // self-test in progress
+#define STAT_DIAGF 0x40 // internal diagnostic failure
+#define STAT_INIT 0x20 // mailbox initialization required
+#define STAT_IDLE 0x10 // HBA is idle
+#define STAT_CDFULL 0x08 // Command/Data output port is full
+#define STAT_DFULL 0x04 // Data input port is full
+#define STAT_INVCMD 0x01 // Invalid command
+
+// READ INTERRUPT STATUS flags
+#define INTR_ANY 0x80 // any interrupt
+#define INTR_SRCD 0x08 // SCSI reset detected
+#define INTR_HACC 0x04 // HA command complete
+#define INTR_MBOA 0x02 // MBO empty
+#define INTR_MBIF 0x01 // MBI full
+
+// WRITE CONTROL commands
+#define CTRL_HRST 0x80 // Hard reset
+#define CTRL_SRST 0x40 // Soft reset
+#define CTRL_IRST 0x20 // interrupt reset
+#define CTRL_SCRST 0x10 // SCSI bus reset
+
+// READ/WRITE DATA commands
+#define CMD_NOP 0x00 // No operation
+#define CMD_MBINIT 0x01 // mailbox initialization
+#define CMD_START_SCSI 0x02 // Start SCSI command
+#define CMD_BIOSCMD 0x03 // undocumented BIOS conmmand (shadow RAM etc.)
+#define CMD_INQUIRY 0x04 // Adapter inquiry
+#define CMD_EMBOI 0x05 // enable Mailbox Out Interrupt
+#define CMD_SELTIMEOUT 0x06 // Set SEL timeout
+#define CMD_BUSON_TIME 0x07 // set bus-On time
+#define CMD_BUSOFF_TIME 0x08 // set bus-off time
+#define CMD_DMASPEED 0x09 // set ISA DMA speed
+#define CMD_RETDEVS 0x0a // return installed devices
+#define CMD_RETCONF 0x0b // return configuration data
+#define CMD_TARGET 0x0c // set HBA to target mode
+#define CMD_RETSETUP 0x0d // return setup data
+#define CMD_ECHO 0x1f // ECHO command data (NetBSD says it is 0x1e)
+
+// these are for 1541C only:
+#define CMD_RETDEVSHI 0x23 // return devices 8-15 (from NetBSD)
+#define CMD_EXTBIOS 0x28 // return extended BIOS information
+#define CMD_MBENABLE 0x29 // set mailbox interface enable
+
+DEFINE_DEVICE_TYPE(AHA1542C, aha1542c_device, "aha1542c", "AHA-1542C SCSI Controller")
+DEFINE_DEVICE_TYPE(AHA1542CF, aha1542cf_device, "aha1542cf", "AHA-1542CF SCSI Controller")
+DEFINE_DEVICE_TYPE(AHA1542CP, aha1542cp_device, "aha1542cp", "AHA-1542CP SCSI Controller")
+
+#define Z84C0010_TAG "z84c0010"
+
+READ8_MEMBER( aha1542c_device::aha1542_r )
+{
+ logerror("%s aha1542_r(): offset=%d\n", machine().describe_context(), offset);
+ return 0xff;
+}
+
+WRITE8_MEMBER( aha1542c_device::aha1542_w )
+{
+ logerror("%s aha1542_w(): offset=%d data=0x%02x\n", machine().describe_context(), offset, data);
+}
+
+
+ROM_START( aha1542c )
+ ROM_REGION( 0x8000, "aha1542", 0 )
+ ROM_SYSTEM_BIOS( 0, "v101", "AHA-1540C/1542C BIOS v1.01" )
+ ROMX_LOAD( "adaptec_inc_534201-00_d_bios_144c_1993.u15", 0x0000, 0x8000, CRC(35178004) SHA1(2b38f2e40cd02a1b32966ead7b202b0fca130cb8), ROM_BIOS(0) )
+ ROM_SYSTEM_BIOS( 1, "v102", "AHA-1540C/1542C BIOS v1.02" )
+ ROMX_LOAD( "b_91c5.bin", 0x0000, 0x8000, CRC(076ac252) SHA1(d640b980e85d07029d8ce11a52fa26ba0f93c5de), ROM_BIOS(1) )
+
+ ROM_REGION( 0x8000, Z84C0010_TAG, 0 )
+ ROMX_LOAD( "adaptec_inc_534001-00_d_mcode_a3c2_1993.u5", 0x0000, 0x8000, CRC(220dd5a2) SHA1(4fc51c9dd63b45a50edcd56baa706d61decbef38), ROM_BIOS(0) )
+ ROMX_LOAD( "m_866a.bin", 0x0000, 0x8000, CRC(ef09053a) SHA1(ae7900653357d5f32a2734bc13d9ec63bd805597), ROM_BIOS(1) )
+ROM_END
+
+ROM_START( aha1542cf )
+ ROM_REGION( 0x8000, "aha1542", 0 )
+ ROM_SYSTEM_BIOS( 0, "v201", "Adaptec 1540CF/1542CF BIOS v2.01" )
+ ROMX_LOAD( "adaptec_inc_553601-00_c_bios_c38d_1993.u16", 0x0000, 0x8000, CRC(ab22fc02) SHA1(f9f783e0272fc14ba3de32316997f1f6cadc67d0), ROM_BIOS(0) )
+ ROM_SYSTEM_BIOS( 1, "v210", "Adaptec 1540CF/1542CF BIOS v2.10" )
+ ROMX_LOAD( "adaptec_inc_553601-00_e_bios_7600_1994.u16", 0x0000, 0x8000, CRC(8f3a2692) SHA1(b9dbd49baeec55098195131d0ed1a9bfe8463640), ROM_BIOS(1) )
+ ROM_SYSTEM_BIOS( 2, "v211", "Adaptec 1540CF/1542CF BIOS v2.11" )
+ ROMX_LOAD( "adaptec_inc_553601-00_g_bios_b402_1995.u16", 0x0000, 0x8000, CRC(fddd0b83) SHA1(aabd227cb338d8812e0bb5c17c08ea06c5aedd36), ROM_BIOS(2) )
+
+ ROM_REGION( 0x8000, Z84C0010_TAG, 0 )
+ ROMX_LOAD( "adaptec_inc_553801-00_c_mcode_563d_1993.u15", 0x0000, 0x8000, CRC(7824397e) SHA1(35bc2c8fab31aad3190a478f2dc8f3a72958cf04), ROM_BIOS(0) )
+ ROMX_LOAD( "adaptec_inc_553801-00_e_mcode_4b81_1994.u15", 0x0000, 0x8000, CRC(dd651476) SHA1(cda508281302be53ebdcf8daa61754c89ad12111), ROM_BIOS(1) )
+ ROMX_LOAD( "adaptec_inc_553801-00_g_mcode_2cde_1995.u15", 0x0000, 0x8000, CRC(896873cd) SHA1(6edbdd9b0b15ef31ca0741cac31556d2d5266b6e), ROM_BIOS(2) )
+ROM_END
+
+ROM_START( aha1542cp )
+ ROM_REGION( 0x8000, "aha1542", 0 )
+ ROM_LOAD( "adaptec_inc_908501-00_d_bios_a91e_1995.u7", 0x0000, 0x8000, CRC(0646c35e) SHA1(3a7c2731abd8295438cfa1f2a525be53e9512b1a) )
+
+ ROM_REGION( 0x8000, Z84C0010_TAG, 0 )
+ ROM_LOAD( "908301-00_f_mcode_17c9.u12", 0x0000, 0x8000, CRC(04494022) SHA1(431dfc26312556ddd24fccc429b2b3e93bac5c2f) )
+ROM_END
+
+
+u8 aha1542c_device::local_status_r()
+{
+ return m_eeprom->do_read() << 7;
+}
+
+void aha1542c_device::local_latch_w(u8 data)
+{
+ m_eeprom->cs_write(BIT(data, 2));
+ m_eeprom->clk_write(BIT(data, 1));
+ m_eeprom->di_write(BIT(data, 0));
+ // TODO: several other bits are used
+}
+
+void aha1542c_device::z84c0010_mem(address_map &map)
+{
+ map(0x0000, 0x7fff).rom().region(Z84C0010_TAG, 0);
+ map(0x8000, 0x9fff).ram(); // 2kb RAM chip
+ map(0xa000, 0xa000).r(FUNC(aha1542c_device::local_status_r));
+ map(0xb000, 0xb000).w(FUNC(aha1542c_device::local_latch_w));
+ map(0xe000, 0xe0ff).ram(); // probably PC<->Z80 communication area
+ map(0xe003, 0xe003).lr8("e003_r", []() { return 0x20; });
+}
+
+u8 aha1542cp_device::eeprom_r()
+{
+ return m_eeprom->do_read();
+}
+
+void aha1542cp_device::eeprom_w(u8 data)
+{
+ m_eeprom->cs_write(BIT(data, 2));
+ m_eeprom->clk_write(BIT(data, 1));
+ m_eeprom->di_write(BIT(data, 0));
+}
+
+void aha1542cp_device::local_mem(address_map &map)
+{
+ map(0x0000, 0x7fff).rom().region(Z84C0010_TAG, 0);
+ map(0x8000, 0x9fff).ram();
+ map(0xc001, 0xc001).rw(FUNC(aha1542cp_device::eeprom_r), FUNC(aha1542cp_device::eeprom_w));
+ map(0xe003, 0xe003).nopr();
+}
+
+const tiny_rom_entry *aha1542c_device::device_rom_region() const
+{
+ return ROM_NAME( aha1542c );
+}
+
+const tiny_rom_entry *aha1542cf_device::device_rom_region() const
+{
+ return ROM_NAME( aha1542cf );
+}
+
+const tiny_rom_entry *aha1542cp_device::device_rom_region() const
+{
+ return ROM_NAME( aha1542cp );
+}
+
+void aha1542c_device::device_add_mconfig(machine_config &config)
+{
+ z80_device &cpu(Z80(config, Z84C0010_TAG, 10'000'000));
+ cpu.set_addrmap(AS_PROGRAM, &aha1542c_device::z84c0010_mem);
+
+ EEPROM_93C46_16BIT(config, m_eeprom);
+}
+
+void aha1542cp_device::device_add_mconfig(machine_config &config)
+{
+ z80_device &cpu(Z80(config, Z84C0010_TAG, 10'000'000));
+ cpu.set_addrmap(AS_PROGRAM, &aha1542cp_device::local_mem);
+
+ EEPROM_93C46_16BIT(config, m_eeprom);
+}
+
+aha1542c_device::aha1542c_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_isa16_card_interface(mconfig, *this)
+ , m_eeprom(*this, "eeprom")
+{
+}
+
+aha1542c_device::aha1542c_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : aha1542c_device(mconfig, AHA1542C, tag, owner, clock)
+{
+}
+
+aha1542cf_device::aha1542cf_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : aha1542c_device(mconfig, AHA1542CF, tag, owner, clock)
+{
+}
+
+aha1542cp_device::aha1542cp_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : aha1542c_device(mconfig, AHA1542CP, tag, owner, clock)
+{
+}
+
+void aha1542c_device::device_start()
+{
+ set_isa_device();
+ m_isa->install_rom(this, 0xdc000, 0xdffff, "aha1542", "aha1542");
+ m_isa->install_device(0x330, 0x333, read8_delegate(FUNC( aha1542cf_device::aha1542_r ), this),
+ write8_delegate(FUNC( aha1542cf_device::aha1542_w ), this) );
+}
+
+
+void aha1542c_device::device_reset()
+{
+}
diff --git a/src/devices/bus/isa/aha1542c.h b/src/devices/bus/isa/aha1542c.h
new file mode 100644
index 00000000000..2294096bde7
--- /dev/null
+++ b/src/devices/bus/isa/aha1542c.h
@@ -0,0 +1,95 @@
+// license:BSD-3-Clause
+// copyright-holders:Darkstar
+/**********************************************************************
+ *
+ * Adaptec AHA-1542{C,CF,CP} SCSI Controller
+ *
+ **********************************************************************
+
+
+
+ **********************************************************************/
+
+#ifndef MAME_BUS_AHA1542C_H
+#define MAME_BUS_AHA1542C_H
+
+#pragma once
+
+
+#include "isa.h"
+#include "machine/eepromser.h"
+
+//*********************************************************************
+// TYPE DEFINITIONS
+//*********************************************************************
+
+// ====================> aha1542cf_device
+
+class aha1542c_device : public device_t,
+ public device_isa16_card_interface
+{
+public:
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+ // construction/destruction
+ aha1542c_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ DECLARE_READ8_MEMBER( aha1542_r );
+ DECLARE_WRITE8_MEMBER( aha1542_w );
+
+protected:
+ aha1542c_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ u8 local_status_r();
+ void local_latch_w(u8 data);
+
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ // optional information overrides
+ virtual const tiny_rom_entry *device_rom_region() const override;
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ required_device<eeprom_serial_93cxx_device> m_eeprom;
+
+private:
+ void z84c0010_mem(address_map &map);
+};
+
+// ====================> aha1542cf_device
+
+class aha1542cf_device : public aha1542c_device
+{
+public:
+ // construction/destruction
+ aha1542cf_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ virtual const tiny_rom_entry *device_rom_region() const override;
+};
+
+// ====================> aha1542cp_device
+
+class aha1542cp_device : public aha1542c_device
+{
+public:
+ // construction/destruction
+ aha1542cp_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+private:
+ u8 eeprom_r();
+ void eeprom_w(u8 data);
+
+ void local_mem(address_map &map);
+};
+
+// device type definitions
+DECLARE_DEVICE_TYPE(AHA1542C, aha1542c_device)
+DECLARE_DEVICE_TYPE(AHA1542CF, aha1542cf_device)
+DECLARE_DEVICE_TYPE(AHA1542CP, aha1542cp_device)
+
+#endif // MAME_BUS_AHA1542C_H
diff --git a/src/devices/bus/isa/aha174x.cpp b/src/devices/bus/isa/aha174x.cpp
new file mode 100644
index 00000000000..06b6ddf5f62
--- /dev/null
+++ b/src/devices/bus/isa/aha174x.cpp
@@ -0,0 +1,160 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ Adaptec AHA-1740/44 and AHA-1740A/42A Fast SCSI host adapters
+
+ These are actually EISA cards, though they also have a compatibility
+ mode that provides an interface like the older ISA AHA-154X series.
+
+ On the AHA-1740 and AHA-1744, the HPC microcode is stored in an EEPROM
+ (of unknown type), allowing it to be reprogrammed by the host. This is
+ not possible on the AHA-1740A and AHA-1744A, which use a conventional
+ 27C256 EPROM for the microcode. In both cases the HPC copies the code
+ to and then executes it out of RAM.
+
+ Though the AHA-1740 and AHA-1740A have different board layouts, they
+ share the following ICs:
+
+ AIC-565 Bus Auxiliary Interface Chip
+ AIC-575 EISA Configuration Chip
+ AIC-4600 HPC (HPC46003V20)
+ AIC-6251A SCSI Interface and Protocol Chip
+ IDT7201 512x9 FIFO (2 on board)
+ Intel 82355 Bus Master Interface Controller
+
+ AHA-1742A is the same as AHA-1740A, only with the FDC populated.
+
+ AHA-1744 uses the same layout as AHA-1740, but populates the area
+ around the SCSI port with DS36F95J differential drivers.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "aha174x.h"
+
+#include "machine/aic6250.h"
+//#include "machine/i82355.h"
+#include "machine/nscsi_bus.h"
+#include "machine/nscsi_hd.h"
+
+DEFINE_DEVICE_TYPE(AHA1740, aha1740_device, "aha1740", "AHA-1740 Fast SCSI Host Adapter")
+DEFINE_DEVICE_TYPE(AHA1742A, aha1742a_device, "aha1742a", "AHA-1742A Fast SCSI Host Adapter")
+
+
+aha174x_device::aha174x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_isa16_card_interface(mconfig, *this)
+ , m_hpc(*this, "hpc")
+ , m_bios(*this, "bios")
+{
+}
+
+aha1740_device::aha1740_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : aha174x_device(mconfig, AHA1740, tag, owner, clock)
+{
+}
+
+aha1742a_device::aha1742a_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : aha174x_device(mconfig, AHA1742A, tag, owner, clock)
+ , m_fdc(*this, "fdc")
+{
+}
+
+void aha174x_device::device_start()
+{
+}
+
+
+void aha174x_device::hpc_map(address_map &map)
+{
+ map(0x5000, 0x500f).m("scsi:7:scsic", FUNC(aic6251a_device::map));
+ map(0x8000, 0xffff).rom().region("mcode", 0);
+}
+
+static void aha174x_scsi_devices(device_slot_interface &device)
+{
+ device.option_add("harddisk", NSCSI_HARDDISK);
+ device.option_add_internal("scsic", AIC6251A);
+}
+
+void aha174x_device::scsic_config(device_t *device)
+{
+ device->set_clock(40_MHz_XTAL / 2); // divider not verified
+}
+
+void aha1740_device::device_add_mconfig(machine_config &config)
+{
+ HPC46003(config, m_hpc, 40_MHz_XTAL / 2);
+ m_hpc->set_addrmap(AS_PROGRAM, &aha1740_device::hpc_map);
+
+ NSCSI_BUS(config, "scsi");
+ NSCSI_CONNECTOR(config, "scsi:0", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:1", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:2", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:3", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:4", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:5", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:6", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:7", aha174x_scsi_devices, "scsic", true)
+ .set_option_machine_config("scsic", [this] (device_t *device) { scsic_config(device); });
+}
+
+void aha1742a_device::device_add_mconfig(machine_config &config)
+{
+ HPC46003(config, m_hpc, 40_MHz_XTAL / 2);
+ m_hpc->set_addrmap(AS_PROGRAM, &aha1742a_device::hpc_map);
+
+ NSCSI_BUS(config, "scsi");
+ NSCSI_CONNECTOR(config, "scsi:0", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:1", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:2", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:3", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:4", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:5", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:6", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:7", aha174x_scsi_devices, "scsic", true)
+ .set_option_machine_config("scsic", [this] (device_t *device) { scsic_config(device); });
+
+ N82077AA(config, m_fdc, 24_MHz_XTAL);
+}
+
+
+ROM_START(aha1740)
+ ROM_REGION(0x4000, "bios", 0)
+ ROM_LOAD("b_dc00.bin", 0x0000, 0x4000, CRC(056d75ec) SHA1(8ca143adfc7d20ad5d49f14dedabc8276454bf9e))
+
+ ROM_REGION16_LE(0x8000, "mcode", 0)
+ ROM_SYSTEM_BIOS(0, "v140st", "BIOS v1.40 (Standard Mode)")
+ ROMX_LOAD("standard.bin", 0x0000, 0x8000, CRC(8c15c6a2) SHA1(77e15b0244e3a814f53f957270e6474a8a839955), ROM_BIOS(0))
+ ROM_SYSTEM_BIOS(1, "v140en", "BIOS v1.40 (Enhanced Mode)")
+ ROMX_LOAD("enhanced.bin", 0x0000, 0x8000, CRC(84b3df89) SHA1(a718c3ea5443a609b4b20bfe48be18193737ad25), ROM_BIOS(1))
+ // Adaptec's help file claims that "the EEPROM on the board can hold firmware for both modes simultaneously."
+ // The AHA-174XA firmware images obviously have this, but the files provided here do not agree.
+ROM_END
+
+ROM_START(aha1742a)
+ ROM_REGION(0x4000, "bios", 0)
+ ROM_DEFAULT_BIOS("v140")
+ ROM_SYSTEM_BIOS(0, "v134", "BIOS v1.34")
+ ROMX_LOAD("adaptec_inc_450214-00_a_bios_8800_1991.u47", 0x0000, 0x4000, CRC(6cf06151) SHA1(0da45634b12b33fc886920d065cc8ffb2cf376b8), ROM_BIOS(0))
+ ROM_SYSTEM_BIOS(1, "v140", "BIOS v1.40")
+ ROMX_LOAD("adaptec_inc_450216-00_a_bios_dc00_1992.u47", 0x0000, 0x4000, CRC(056d75ec) SHA1(8ca143adfc7d20ad5d49f14dedabc8276454bf9e), ROM_BIOS(1))
+ ROM_SYSTEM_BIOS(2, "v140s", "BIOS v1.40 (Extended Timeout)")
+ ROMX_LOAD("b_f100.bin", 0x0000, 0x4000, CRC(b695acc0) SHA1(683112fafdf83d5eb89237d9215f7d6eacc6eeaf), ROM_BIOS(2))
+
+ ROM_REGION16_LE(0x8000, "mcode", 0)
+ ROMX_LOAD("adaptec_inc_450117-00_c_mcode_23a8_1991.u10", 0x0000, 0x8000, NO_DUMP, ROM_BIOS(0))
+ ROMX_LOAD("adaptec_inc_450113-00_d_mcode_b7d6_1992.u10", 0x0000, 0x8000, CRC(0a55a555) SHA1(ff400f56b33f0ad94e34564d7715a0773b335844), ROM_BIOS(1))
+ ROMX_LOAD("m_c7b8.bin", 0x0000, 0x8000, CRC(21282e86) SHA1(18cb3960dc47f2c14beb88f9680c1f66c4652b04), ROM_BIOS(2))
+ROM_END
+
+const tiny_rom_entry *aha1740_device::device_rom_region() const
+{
+ return ROM_NAME(aha1740);
+}
+
+const tiny_rom_entry *aha1742a_device::device_rom_region() const
+{
+ return ROM_NAME(aha1742a);
+}
diff --git a/src/devices/bus/isa/aha174x.h b/src/devices/bus/isa/aha174x.h
new file mode 100644
index 00000000000..f65ee7de93a
--- /dev/null
+++ b/src/devices/bus/isa/aha174x.h
@@ -0,0 +1,61 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ Adaptec AHA-1540/42A and AHA-1540/42B SCSI controllers
+
+***************************************************************************/
+
+#ifndef MAME_BUS_ISA_AHA174X_H
+#define MAME_BUS_ISA_AHA174X_H
+
+#pragma once
+
+#include "isa.h"
+#include "cpu/hpc/hpc.h"
+#include "machine/upd765.h"
+
+class aha174x_device : public device_t, public device_isa16_card_interface
+{
+protected:
+ aha174x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
+
+ virtual void device_start() override;
+
+ void hpc_map(address_map &map);
+ void scsic_config(device_t *device);
+
+ required_device<hpc46003_device> m_hpc;
+ required_region_ptr<u8> m_bios;
+};
+
+class aha1740_device : public aha174x_device
+{
+public:
+ aha1740_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+};
+
+class aha1742a_device : public aha174x_device
+{
+public:
+ aha1742a_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+ required_device<upd765_family_device> m_fdc;
+};
+
+DECLARE_DEVICE_TYPE(AHA1740, aha1740_device)
+DECLARE_DEVICE_TYPE(AHA1742A, aha1742a_device)
+
+#endif // MAME_BUS_ISA_AHA174X_H
diff --git a/src/devices/bus/isa/bt54x.cpp b/src/devices/bus/isa/bt54x.cpp
new file mode 100644
index 00000000000..d8ef31a848f
--- /dev/null
+++ b/src/devices/bus/isa/bt54x.cpp
@@ -0,0 +1,201 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ BusTek/BusLogic BT-54x series PC/AT SCSI host adapters
+
+ The earlier version of the BT-542B, with BusTek labels, has a NCR 86C05
+ bus controller where a later version has the 80C20 ASIC instead. It is
+ believed that these chips are largely compatible with each other, as
+ are the NCR 53CF94 and Emulex FAS216 SCSI controllers.
+
+ 2.41/2.21 is the last BIOS version compatible with revisions A-G of
+ the BT-542B.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "bt54x.h"
+
+#include "machine/ncr5390.h"
+//#include "machine/ncr86c05.h"
+#include "machine/nscsi_cd.h"
+#include "machine/nscsi_hd.h"
+
+DEFINE_DEVICE_TYPE(BT542B, bt542b_device, "bt542b", "BusTek BT-542B SCSI Host Adapter") // Rev. G or earlier
+DEFINE_DEVICE_TYPE(BT542BH, bt542bh_device, "bt542bh", "BusLogic BT-542B SCSI Host Adapter (Rev. H)")
+DEFINE_DEVICE_TYPE(BT545S, bt545s_device, "bt545s", "BusLogic BT-545S Fast SCSI Host Adapter")
+
+bt54x_device::bt54x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_isa16_card_interface(mconfig, *this)
+ , m_mpu(*this, "mpu")
+ , m_fdc(*this, "fdc")
+ , m_bios(*this, "bios")
+{
+}
+
+bt542b_device::bt542b_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : bt54x_device(mconfig, BT542B, tag, owner, clock)
+{
+}
+
+bt542bh_device::bt542bh_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : bt54x_device(mconfig, BT542BH, tag, owner, clock)
+{
+}
+
+bt545s_device::bt545s_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : bt54x_device(mconfig, BT545S, tag, owner, clock)
+{
+}
+
+void bt54x_device::device_start()
+{
+}
+
+u8 bt54x_device::local_status_r()
+{
+ return 0;
+}
+
+void bt54x_device::local_map(address_map &map)
+{
+ map(0x00000, 0x01fff).ram();
+ //map(0x02000, 0x0201f).rw("busintf", FUNC(ncr86c05_device::local_read), FUNC(ncr86c05_device::local_write));
+ map(0x02080, 0x0208f).m("scsi:7:scsic", FUNC(ncr53cf94_device::map));
+ map(0x02180, 0x02180).r(FUNC(bt54x_device::local_status_r));
+ map(0xf8000, 0xfffff).rom().region("mpu", 0);
+}
+
+static void scsi_devices(device_slot_interface &device)
+{
+ device.option_add("cdrom", NSCSI_CDROM);
+ device.option_add("harddisk", NSCSI_HARDDISK);
+ device.option_add_internal("scsic", NCR53C94);
+}
+
+static void fast_scsi_devices(device_slot_interface &device)
+{
+ device.option_add("cdrom", NSCSI_CDROM);
+ device.option_add("harddisk", NSCSI_HARDDISK);
+ device.option_add_internal("scsic", NCR53CF94); // FAS216
+}
+
+void bt54x_device::asc_config(device_t *device)
+{
+ ncr53c94_device &asc = downcast<ncr53c94_device &>(*device);
+
+ asc.set_clock(25_MHz_XTAL); // not verified; perhaps selectable? (40 MHz XTAL also on board)
+
+ asc.irq_handler_cb().set(m_mpu, FUNC(i80188_cpu_device::int0_w));
+ //asc.drq_handler_cb().set("busintf", FUNC(ncr86c05_device::dma_req_w));
+}
+
+void bt54x_device::fsc_config(device_t *device)
+{
+ ncr53cf94_device &fsc = downcast<ncr53cf94_device &>(*device);
+
+ fsc.set_clock(40_MHz_XTAL);
+
+ fsc.irq_handler_cb().set(m_mpu, FUNC(i80188_cpu_device::int0_w)); // mostly polled on BT-545S
+ //fsc.drq_handler_cb().set("busintf", FUNC(ncr86c05_device::dma_req_w));
+}
+
+void bt54x_device::fsc_base(machine_config &config)
+{
+ //ncr86c05_device &busintf(NCR86C05(config, "busintf", 0));
+ //busintf.mint_callback().set(m_mpu, FUNC(i80188_cpu_device::int1_w));
+ //busintf.dma_ack_callback().set("scsi:7:scsic", FUNC(ncr53cf94_device::dma_w));
+
+ NSCSI_BUS(config, "scsi");
+ NSCSI_CONNECTOR(config, "scsi:0", fast_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:1", fast_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:2", fast_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:3", fast_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:4", fast_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:5", fast_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:6", fast_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:7", fast_scsi_devices, "scsic", true).set_option_machine_config("scsic", [this] (device_t *device) { fsc_config(device); });
+}
+
+void bt542b_device::device_add_mconfig(machine_config &config)
+{
+ I80188(config, m_mpu, 16_MHz_XTAL);
+ m_mpu->set_addrmap(AS_PROGRAM, &bt542b_device::local_map);
+
+ //ncr86c05_device &busintf(NCR86C05(config, "busintf", 0));
+ //busintf.mint_callback().set(m_mpu, FUNC(i80188_cpu_device::int1_w));
+ //busintf.dma_ack_callback().set("scsi:7:scsic", FUNC(ncr53c94_device::dma_w));
+
+ NSCSI_BUS(config, "scsi");
+ NSCSI_CONNECTOR(config, "scsi:0", scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:1", scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:2", scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:3", scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:4", scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:5", scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:6", scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:7", scsi_devices, "scsic", true).set_option_machine_config("scsic", [this] (device_t *device) { asc_config(device); });
+
+ DP8473(config, m_fdc, 24_MHz_XTAL);
+}
+
+void bt542bh_device::device_add_mconfig(machine_config &config)
+{
+ I80188(config, m_mpu, 40_MHz_XTAL / 2); // clock guessed
+ m_mpu->set_addrmap(AS_PROGRAM, &bt542bh_device::local_map);
+
+ fsc_base(config);
+
+ DP8473(config, m_fdc, 24_MHz_XTAL);
+}
+
+void bt545s_device::device_add_mconfig(machine_config &config)
+{
+ I80188(config, m_mpu, 40_MHz_XTAL / 2); // SAB80188-1-N; clock guessed
+ m_mpu->set_addrmap(AS_PROGRAM, &bt545s_device::local_map);
+
+ fsc_base(config);
+
+ PC8477A(config, m_fdc, 24_MHz_XTAL); // actually PC8477BV
+}
+
+ROM_START(bt542b)
+ ROM_REGION(0x4000, "bios", 0) // "(C) Copyright 1991 BIOS Version 2.41"
+ ROM_LOAD("1000006-2.41_bustek.u15", 0x0000, 0x4000, CRC(5eb00d0f) SHA1(74a8bbae1c2b42f0c605b0ac98660f1e16ac5c4e))
+
+ ROM_REGION(0x8000, "mpu", 0) // "(C) Copyright 1991 BusTek Corporation 542B 91/12/14"
+ ROM_LOAD("1000005-2.21_bustek.u2", 0x0000, 0x8000, CRC(c2c66653) SHA1(054ba1ea71b2aaab31ab9dd5aca955d861f5333b))
+ROM_END
+
+ROM_START(bt542bh)
+ ROM_REGION(0x8000, "bios", 0) // "(C) Copyright 1992 BIOS Version 4.70M"
+ ROM_LOAD("5000006-4.70_buslogic.u15", 0x0000, 0x8000, CRC(f5a5e116) SHA1(d7b73015532838dc694edf24308ebbab6f4dd5bb))
+
+ ROM_REGION(0x8000, "mpu", 0) // "(C) Copyright 1992 BusLogic Inc. 542BH93/05/23"
+ ROM_LOAD("5000005-3.35_buslogic.u2", 0x0000, 0x8000, CRC(181966c3) SHA1(b9b327d50cd13f3e5b5b53892b18f233aff065b7))
+ROM_END
+
+ROM_START(bt545s)
+ ROM_REGION(0x4000, "bios", 0) // "(C) Copyright 1992 BIOS Version 4.50"
+ ROM_LOAD("u15_27128_5002026-4.50.bin", 0x0000, 0x4000, CRC(1bd3247b) SHA1(9d46a99f4b3057e94ef422f387218de2c4553c1a))
+
+ ROM_REGION(0x8000, "mpu", 0) // "(C) Copyright 1992 BusLogic Inc. 542BH92/10/05"
+ ROM_LOAD("u2_27256_5002005-3.31.bin", 0x0000, 0x8000, CRC(20473714) SHA1(797a8dba182049949f7a5c14d8bef4b4e908305b))
+ROM_END
+
+const tiny_rom_entry *bt542b_device::device_rom_region() const
+{
+ return ROM_NAME(bt542b);
+}
+
+const tiny_rom_entry *bt542bh_device::device_rom_region() const
+{
+ return ROM_NAME(bt542bh);
+}
+
+const tiny_rom_entry *bt545s_device::device_rom_region() const
+{
+ return ROM_NAME(bt545s);
+}
diff --git a/src/devices/bus/isa/bt54x.h b/src/devices/bus/isa/bt54x.h
new file mode 100644
index 00000000000..dfdd0009416
--- /dev/null
+++ b/src/devices/bus/isa/bt54x.h
@@ -0,0 +1,74 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ BusTek/BusLogic BT-54x series PC/AT SCSI host adapters
+
+***************************************************************************/
+
+#ifndef MAME_BUS_ISA_BT54X_H
+#define MAME_BUS_ISA_BT54X_H
+
+#pragma once
+
+#include "isa.h"
+#include "cpu/i86/i186.h"
+#include "machine/upd765.h"
+
+class bt54x_device : public device_t, public device_isa16_card_interface
+{
+public:
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+
+protected:
+ bt54x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
+
+ virtual void device_start() override;
+
+ u8 local_status_r();
+
+ void local_map(address_map &map);
+ void asc_config(device_t *device);
+ void fsc_config(device_t *device);
+ void fsc_base(machine_config &config);
+
+ required_device<i80188_cpu_device> m_mpu;
+ required_device<upd765_family_device> m_fdc;
+ required_region_ptr<u8> m_bios;
+};
+
+class bt542b_device : public bt54x_device
+{
+public:
+ bt542b_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+};
+
+class bt542bh_device : public bt54x_device
+{
+public:
+ bt542bh_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+};
+
+class bt545s_device : public bt54x_device
+{
+public:
+ bt545s_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+};
+
+DECLARE_DEVICE_TYPE(BT542B, bt542b_device)
+DECLARE_DEVICE_TYPE(BT542BH, bt542bh_device)
+DECLARE_DEVICE_TYPE(BT545S, bt545s_device)
+
+#endif // MAME_BUS_ISA_BT54X_H
diff --git a/src/devices/bus/isa/cga.cpp b/src/devices/bus/isa/cga.cpp
index f5fb8f185d7..eac981b4100 100644
--- a/src/devices/bus/isa/cga.cpp
+++ b/src/devices/bus/isa/cga.cpp
@@ -261,12 +261,13 @@ DEFINE_DEVICE_TYPE(ISA8_CGA, isa8_cga_device, "cga", "IBM Color/Graphics Monitor
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa8_cga_device::device_add_mconfig)
- MCFG_SCREEN_ADD(CGA_SCREEN_NAME, RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(14'318'181),912,0,640,262,0,200)
- MCFG_SCREEN_UPDATE_DEVICE( DEVICE_SELF, isa8_cga_device, screen_update )
+void isa8_cga_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, CGA_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(14'318'181), 912, 0, 640, 262, 0, 200);
+ screen.set_screen_update(FUNC(isa8_cga_device::screen_update));
- MCFG_PALETTE_ADD("palette", /* CGA_PALETTE_SETS * 16*/ 65536 )
+ PALETTE(config, m_palette).set_entries(/* CGA_PALETTE_SETS * 16*/ 65536);
MC6845(config, m_crtc, XTAL(14'318'181)/16);
m_crtc->set_screen(nullptr);
@@ -276,7 +277,7 @@ MACHINE_CONFIG_START(isa8_cga_device::device_add_mconfig)
m_crtc->out_hsync_callback().set(FUNC(isa8_cga_device::hsync_changed));
m_crtc->out_vsync_callback().set(FUNC(isa8_cga_device::vsync_changed));
m_crtc->set_reconfigure_callback(FUNC(isa8_cga_device::reconfigure), this);
-MACHINE_CONFIG_END
+}
ioport_constructor isa8_cga_device::device_input_ports() const
{
@@ -912,7 +913,7 @@ READ8_MEMBER( isa8_cga_device::io_read )
/* return last written mc6845 address value here? */
break;
case 1: case 3: case 5: case 7:
- data = m_crtc->register_r( space, offset );
+ data = m_crtc->register_r();
break;
case 10:
data = m_vsync | ( ( data & 0x40 ) >> 4 ) | m_hsync;
@@ -927,10 +928,10 @@ WRITE8_MEMBER( isa8_cga_device::io_write )
{
switch(offset) {
case 0: case 2: case 4: case 6:
- m_crtc->address_w( space, offset, data );
+ m_crtc->address_w(data);
break;
case 1: case 3: case 5: case 7:
- m_crtc->register_w( space, offset, data );
+ m_crtc->register_w(data);
break;
case 8:
mode_control_w(data);
@@ -1169,14 +1170,14 @@ WRITE8_MEMBER( isa8_cga_pc1512_device::io_write )
{
case 0: case 2: case 4: case 6:
data &= 0x1F;
- m_crtc->address_w( space, offset, data );
+ m_crtc->address_w(data);
m_mc6845_address = data;
break;
case 1: case 3: case 5: case 7:
if ( ! m_mc6845_locked_register[m_mc6845_address] )
{
- m_crtc->register_w( space, offset, data );
+ m_crtc->register_w(data);
if ( isa8_cga_pc1512_device::mc6845_writeonce_register[m_mc6845_address] )
{
m_mc6845_locked_register[m_mc6845_address] = 1;
@@ -1693,13 +1694,13 @@ const tiny_rom_entry *isa8_cga_mc1502_device::device_rom_region() const
DEFINE_DEVICE_TYPE(ISA8_CGA_M24, isa8_cga_m24_device, "cga_m24", "Olivetti M24 CGA")
-MACHINE_CONFIG_START(isa8_cga_m24_device::device_add_mconfig)
+void isa8_cga_m24_device::device_add_mconfig(machine_config &config)
+{
isa8_cga_device::device_add_mconfig(config);
- MCFG_DEVICE_MODIFY(CGA_SCREEN_NAME)
- MCFG_SCREEN_RAW_PARAMS(XTAL(14'318'181),912,0,640,462,0,400)
+ subdevice<screen_device>(CGA_SCREEN_NAME)->set_raw(XTAL(14'318'181), 912, 0, 640, 462, 0, 400);
m_crtc->set_reconfigure_callback(FUNC(isa8_cga_m24_device::reconfigure), this);
-MACHINE_CONFIG_END
+}
isa8_cga_m24_device::isa8_cga_m24_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
isa8_cga_m24_device(mconfig, ISA8_CGA_M24, tag, owner, clock)
@@ -1746,7 +1747,7 @@ WRITE8_MEMBER( isa8_cga_m24_device::io_write )
{
case 0: case 2: case 4: case 6:
m_index = data;
- m_crtc->address_w( space, offset, data );
+ m_crtc->address_w(data);
break;
case 1: case 3: case 5: case 7:
switch(m_index & 0x1f) // TODO: this is handled by a pal and prom
@@ -1765,7 +1766,7 @@ WRITE8_MEMBER( isa8_cga_m24_device::io_write )
data <<= 1;
break;
}
- m_crtc->register_w( space, offset, data );
+ m_crtc->register_w(data);
break;
case 0x0e:
m_mode2 = data;
@@ -1886,12 +1887,12 @@ MC6845_UPDATE_ROW( isa8_cga_m24_device::m24_gfx_1bpp_m24_update_row )
DEFINE_DEVICE_TYPE(ISA8_CGA_CPORTIII, isa8_cga_cportiii_device, "cga_cportiii", "Compaq Portable III CGA")
-MACHINE_CONFIG_START(isa8_cga_cportiii_device::device_add_mconfig)
+void isa8_cga_cportiii_device::device_add_mconfig(machine_config &config)
+{
isa8_cga_m24_device::device_add_mconfig(config);
- MCFG_DEVICE_MODIFY(CGA_SCREEN_NAME)
- MCFG_SCREEN_COLOR(rgb_t(255, 125, 0))
-MACHINE_CONFIG_END
+ subdevice<screen_device>(CGA_SCREEN_NAME)->set_color(rgb_t(255, 125, 0));
+}
isa8_cga_cportiii_device::isa8_cga_cportiii_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
isa8_cga_m24_device(mconfig, ISA8_CGA_CPORTIII, tag, owner, clock)
diff --git a/src/devices/bus/isa/cl_sh260.cpp b/src/devices/bus/isa/cl_sh260.cpp
new file mode 100644
index 00000000000..f8fb39249f5
--- /dev/null
+++ b/src/devices/bus/isa/cl_sh260.cpp
@@ -0,0 +1,93 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ ISA 16-bit disk controllers based on the Cirrus Logic CL-SH260-15PC-D
+ * Everex EV-346
+ * Joincom Electronic JC-1310
+
+***************************************************************************/
+
+#include "emu.h"
+#include "cl_sh260.h"
+
+#include "cpu/mcs51/mcs51.h"
+
+DEFINE_DEVICE_TYPE(EV346, isa16_ev346_device, "ev346", "Everex EV-346 disk controller")
+DEFINE_DEVICE_TYPE(JC1310, isa16_jc1310_device, "jc1310", "Joincom JC-1310 disk controller")
+
+isa16_cl_sh260_device::isa16_cl_sh260_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_isa16_card_interface(mconfig, *this)
+ , m_fdc(*this, "fdc")
+{
+}
+
+isa16_ev346_device::isa16_ev346_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : isa16_cl_sh260_device(mconfig, EV346, tag, owner, clock)
+{
+}
+
+isa16_jc1310_device::isa16_jc1310_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : isa16_cl_sh260_device(mconfig, JC1310, tag, owner, clock)
+{
+}
+
+void isa16_cl_sh260_device::device_start()
+{
+}
+
+void isa16_cl_sh260_device::i8031_map(address_map &map)
+{
+ map(0x0000, 0x1fff).rom().region("mcu", 0);
+}
+
+void isa16_ev346_device::ext_map(address_map &map)
+{
+ map.global_mask(0xff);
+ map(0x00, 0xff).noprw(); // CL-SH260 interface
+}
+
+void isa16_jc1310_device::ext_map(address_map &map)
+{
+ map(0xc000, 0xc0ff).noprw(); // CL-SH260 interface
+}
+
+void isa16_ev346_device::device_add_mconfig(machine_config &config)
+{
+ i8031_device &mcu(I8031(config, "mcu", 12_MHz_XTAL)); // SCN8031HCCN40
+ mcu.set_addrmap(AS_PROGRAM, &isa16_ev346_device::i8031_map);
+ mcu.set_addrmap(AS_IO, &isa16_ev346_device::ext_map);
+
+ DP8473(config, m_fdc, 24_MHz_XTAL);
+}
+
+void isa16_jc1310_device::device_add_mconfig(machine_config &config)
+{
+ i8031_device &mcu(I8031(config, "mcu", 10_MHz_XTAL)); // P8031AH
+ mcu.set_addrmap(AS_PROGRAM, &isa16_jc1310_device::i8031_map);
+ mcu.set_addrmap(AS_IO, &isa16_jc1310_device::ext_map);
+
+ WD37C65C(config, m_fdc, 16_MHz_XTAL); // WD37C65B-PL
+ //m_fdc->set_clock2(9.6_MHz_XTAL);
+}
+
+ROM_START(ev346)
+ ROM_REGION(0x2000, "mcu", 0)
+ ROM_LOAD("everex_ev346_vers_3.2.bin", 0x0000, 0x2000, CRC(49b10ca7) SHA1(ef31b62f5ac38db7cacfc4d30e203a4cc1414913))
+ROM_END
+
+ROM_START(jc1310)
+ ROM_REGION(0x2000, "mcu", 0) // "(C) COPYRIGHT JOINCOM ELECTRONIC CORP. 9/16/1988 JC1310"
+ ROM_LOAD("jc-1310 - apr-c 89.u3", 0x0000, 0x2000, CRC(e044f5e1) SHA1(5a32d2001bb1a489657f9488136b5d621f803703)) // TMS 2764-20JL
+ROM_END
+
+const tiny_rom_entry *isa16_ev346_device::device_rom_region() const
+{
+ return ROM_NAME(ev346);
+}
+
+const tiny_rom_entry *isa16_jc1310_device::device_rom_region() const
+{
+ return ROM_NAME(jc1310);
+}
diff --git a/src/devices/bus/isa/cl_sh260.h b/src/devices/bus/isa/cl_sh260.h
new file mode 100644
index 00000000000..18612ab6456
--- /dev/null
+++ b/src/devices/bus/isa/cl_sh260.h
@@ -0,0 +1,64 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ ISA 16-bit disk controllers based on the Cirrus Logic CL-SH260-15PC-D
+ * Everex EV-346
+ * Joincom Electronic JC-1310
+
+***************************************************************************/
+
+#ifndef MAME_BUS_ISA_CL_SH260_H
+#define MAME_BUS_ISA_CL_SH260_H
+
+#pragma once
+
+#include "isa.h"
+#include "machine/upd765.h"
+
+class isa16_cl_sh260_device : public device_t, public device_isa16_card_interface
+{
+protected:
+ isa16_cl_sh260_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
+
+ virtual void device_start() override;
+
+ void i8031_map(address_map &map);
+
+ required_device<upd765_family_device> m_fdc;
+};
+
+class isa16_ev346_device : public isa16_cl_sh260_device
+{
+public:
+ isa16_ev346_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+private:
+ void ext_map(address_map &map);
+};
+
+class isa16_jc1310_device : public isa16_cl_sh260_device
+{
+public:
+ isa16_jc1310_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+private:
+ void ext_map(address_map &map);
+};
+
+DECLARE_DEVICE_TYPE(EV346, isa16_ev346_device)
+DECLARE_DEVICE_TYPE(JC1310, isa16_jc1310_device)
+
+#endif // MAME_BUS_ISA_CL_SH260_H
diff --git a/src/devices/bus/isa/dcb.cpp b/src/devices/bus/isa/dcb.cpp
new file mode 100644
index 00000000000..db5768d6758
--- /dev/null
+++ b/src/devices/bus/isa/dcb.cpp
@@ -0,0 +1,70 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ Novell Disk Coprocessor Board (DCB)
+
+ This special SCSI host adapter, later acquired by ADIC, was designed
+ for use with Novell NetWare.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "dcb.h"
+
+DEFINE_DEVICE_TYPE(NOVELL_DCB, novell_dcb_device, "novell_dcb", "Novell Disk Coprocessor Board (#738-133-001)")
+
+novell_dcb_device::novell_dcb_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, NOVELL_DCB, tag, owner, clock)
+ , device_isa16_card_interface(mconfig, *this)
+ , m_localcpu(*this, "localcpu")
+ , m_eeprom(*this, "eeprom")
+{
+}
+
+void novell_dcb_device::device_start()
+{
+}
+
+void novell_dcb_device::eeprom_w(u8 data)
+{
+ m_eeprom->cs_write(BIT(data, 5));
+ m_eeprom->clk_write(BIT(data, 6));
+ m_eeprom->di_write(BIT(data, 7));
+}
+
+u8 novell_dcb_device::misc_r()
+{
+ return m_eeprom->do_read() << 7;
+}
+
+void novell_dcb_device::mem_map(address_map &map)
+{
+ map(0x00000, 0x03fff).ram();
+ map(0xfe000, 0xfffff).rom().region("localcpu", 0);
+}
+
+void novell_dcb_device::io_map(address_map &map)
+{
+ map(0x0100, 0x0100).w(FUNC(novell_dcb_device::eeprom_w));
+ map(0x0180, 0x0180).r(FUNC(novell_dcb_device::misc_r));
+}
+
+void novell_dcb_device::device_add_mconfig(machine_config &config)
+{
+ I80188(config, m_localcpu, 16_MHz_XTAL);
+ m_localcpu->set_addrmap(AS_PROGRAM, &novell_dcb_device::mem_map);
+ m_localcpu->set_addrmap(AS_IO, &novell_dcb_device::io_map);
+
+ EEPROM_93C06_16BIT(config, m_eeprom); // NMC9306
+}
+
+ROM_START(novell_dcb)
+ ROM_REGION(0x2000, "localcpu", 0)
+ ROM_LOAD("817-186-001_rev_e_5800_11-04-86.bin", 0x0000, 0x2000, CRC(2e2037f4) SHA1(a13c0aab46084a0805256f1d2b8b8beaccc9e253))
+ROM_END
+
+const tiny_rom_entry *novell_dcb_device::device_rom_region() const
+{
+ return ROM_NAME(novell_dcb);
+}
diff --git a/src/devices/bus/isa/dcb.h b/src/devices/bus/isa/dcb.h
new file mode 100644
index 00000000000..fbca0303978
--- /dev/null
+++ b/src/devices/bus/isa/dcb.h
@@ -0,0 +1,43 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ Novell Disk Coprocessor Board (DCB)
+
+***************************************************************************/
+
+#ifndef MAME_BUS_ISA_DCB_H
+#define MAME_BUS_ISA_DCB_H
+
+#pragma once
+
+#include "isa.h"
+#include "cpu/i86/i186.h"
+#include "machine/eepromser.h"
+
+class novell_dcb_device : public device_t, public device_isa16_card_interface
+{
+public:
+ novell_dcb_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+ virtual void device_start() override;
+
+private:
+ void eeprom_w(u8 data);
+ u8 misc_r();
+
+ void mem_map(address_map &map);
+ void io_map(address_map &map);
+
+ required_device<i80188_cpu_device> m_localcpu;
+ required_device<eeprom_serial_93cxx_device> m_eeprom;
+};
+
+DECLARE_DEVICE_TYPE(NOVELL_DCB, novell_dcb_device)
+
+#endif // MAME_BUS_ISA_DCB_H
diff --git a/src/devices/bus/isa/dectalk.cpp b/src/devices/bus/isa/dectalk.cpp
index d8ad57d57d3..da45a2ec18b 100644
--- a/src/devices/bus/isa/dectalk.cpp
+++ b/src/devices/bus/isa/dectalk.cpp
@@ -172,7 +172,6 @@ void dectalk_isa_device::device_add_mconfig(machine_config &config)
SPEAKER(config, "speaker").front_center();
DAC_12BIT_R2R(config, m_dac, 0).add_route(0, "speaker", 1.0); // unknown DAC
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
- vref.set_output(5.0);
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
}
diff --git a/src/devices/bus/isa/ega.cpp b/src/devices/bus/isa/ega.cpp
index 01c73066088..5da3c263384 100644
--- a/src/devices/bus/isa/ega.cpp
+++ b/src/devices/bus/isa/ega.cpp
@@ -528,23 +528,24 @@ DEFINE_DEVICE_TYPE(ISA8_EGA, isa8_ega_device, "ega", "IBM Enhanced Graphics Adap
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa8_ega_device::device_add_mconfig)
- MCFG_SCREEN_ADD(EGA_SCREEN_NAME, RASTER)
- MCFG_SCREEN_RAW_PARAMS(16257000,912,0,640,262,0,200)
- MCFG_SCREEN_UPDATE_DEVICE(EGA_CRTC_NAME, crtc_ega_device, screen_update)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_PALETTE_ADD( "palette", 64 )
-
- MCFG_DEVICE_ADD(EGA_CRTC_NAME, CRTC_EGA, 16257000/8)
- MCFG_CRTC_EGA_SET_SCREEN(EGA_SCREEN_NAME)
- MCFG_CRTC_EGA_HPIXELS_PER_COLUMN(8)
- MCFG_CRTC_EGA_ROW_UPDATE_CB(isa8_ega_device, ega_update_row)
- MCFG_CRTC_EGA_RES_OUT_DE_CB(WRITELINE(*this, isa8_ega_device, de_changed))
- MCFG_CRTC_EGA_RES_OUT_HSYNC_CB(WRITELINE(*this, isa8_ega_device, hsync_changed))
- MCFG_CRTC_EGA_RES_OUT_VSYNC_CB(WRITELINE(*this, isa8_ega_device, vsync_changed))
- MCFG_CRTC_EGA_RES_OUT_VBLANK_CB(WRITELINE(*this, isa8_ega_device, vblank_changed))
-MACHINE_CONFIG_END
+void isa8_ega_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, EGA_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_raw(16.257_MHz_XTAL, 912, 0, 640, 262, 0, 200);
+ screen.set_screen_update(EGA_CRTC_NAME, FUNC(crtc_ega_device::screen_update));
+ screen.set_palette(m_palette);
+
+ PALETTE(config, m_palette).set_entries(64);
+
+ CRTC_EGA(config, m_crtc_ega, 16.257_MHz_XTAL/8);
+ m_crtc_ega->set_screen(EGA_SCREEN_NAME);
+ m_crtc_ega->config_set_hpixels_per_column(8);
+ m_crtc_ega->set_row_update_callback(FUNC(isa8_ega_device::ega_update_row), this);
+ m_crtc_ega->res_out_de_callback().set(FUNC(isa8_ega_device::de_changed));
+ m_crtc_ega->res_out_hsync_callback().set(FUNC(isa8_ega_device::hsync_changed));
+ m_crtc_ega->res_out_vsync_callback().set(FUNC(isa8_ega_device::vsync_changed));
+ m_crtc_ega->res_out_vblank_callback().set(FUNC(isa8_ega_device::vblank_changed));
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
@@ -576,7 +577,7 @@ isa8_ega_device::isa8_ega_device(const machine_config &mconfig, const char *tag,
isa8_ega_device::isa8_ega_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, type, tag, owner, clock),
device_isa8_card_interface(mconfig, *this),
- m_crtc_ega(nullptr), m_videoram(nullptr), m_charA(nullptr), m_charB(nullptr),
+ m_crtc_ega(*this, EGA_CRTC_NAME), m_videoram(nullptr), m_charA(nullptr), m_charB(nullptr),
m_misc_output(0), m_feature_control(0), m_frame_cnt(0), m_hsync(0), m_vsync(0), m_vblank(0), m_display_enable(0), m_video_mode(0),
m_palette(*this, "palette")
{
@@ -626,8 +627,6 @@ void isa8_ega_device::device_start()
m_plane[2] = m_videoram + 0x20000;
m_plane[3] = m_videoram + 0x30000;
- m_crtc_ega = subdevice<crtc_ega_device>(EGA_CRTC_NAME);
-
m_isa->install_rom(this, 0xc0000, 0xc3fff, "ega", "user2");
m_isa->install_device(0x3b0, 0x3bf, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3b0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3b0_w), this));
m_isa->install_device(0x3c0, 0x3cf, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3c0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3c0_w), this));
@@ -1170,7 +1169,7 @@ READ8_MEMBER( isa8_ega_device::pc_ega8_3X0_r )
/* CRT Controller - data register */
case 1: case 3: case 5: case 7:
- data = m_crtc_ega->register_r( space, offset );
+ data = m_crtc_ega->register_r();
break;
/* Input Status Register 1 */
@@ -1205,12 +1204,12 @@ WRITE8_MEMBER( isa8_ega_device::pc_ega8_3X0_w )
{
/* CRT Controller - address register */
case 0: case 2: case 4: case 6:
- m_crtc_ega->address_w( space, offset, data );
+ m_crtc_ega->address_w(data);
break;
/* CRT Controller - data register */
case 1: case 3: case 5: case 7:
- m_crtc_ega->register_w( space, offset, data );
+ m_crtc_ega->register_w(data);
break;
/* Set Light Pen Flip Flop */
diff --git a/src/devices/bus/isa/ega.h b/src/devices/bus/isa/ega.h
index 4e7bc4394a3..4334604b9a8 100644
--- a/src/devices/bus/isa/ega.h
+++ b/src/devices/bus/isa/ega.h
@@ -58,7 +58,7 @@ private:
CRTC_EGA_ROW_UPDATE(ega_update_row);
public:
- crtc_ega_device *m_crtc_ega;
+ required_device<crtc_ega_device> m_crtc_ega;
void install_banks();
void change_mode();
diff --git a/src/devices/bus/isa/eis_sad8852.cpp b/src/devices/bus/isa/eis_sad8852.cpp
index 4f2b5a0c856..f4d634d1033 100644
--- a/src/devices/bus/isa/eis_sad8852.cpp
+++ b/src/devices/bus/isa/eis_sad8852.cpp
@@ -199,13 +199,14 @@ ioport_constructor isa16_sad8852_device::device_input_ports() const
//-------------------------------------------------
// Board configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa16_sad8852_device::device_add_mconfig)
- MCFG_DEVICE_ADD(I80188_TAG, I80188, XTAL(12'000'000) / 2) // Chip revision is 6 MHz
- MCFG_DEVICE_PROGRAM_MAP( sad8852_mem )
- MCFG_DEVICE_IO_MAP(sad8852_io)
+void isa16_sad8852_device::device_add_mconfig(machine_config &config)
+{
+ i80188_cpu_device &cpu(I80188(config, I80188_TAG, XTAL(12'000'000) / 2)); // Chip revision is 6 MHz
+ cpu.set_addrmap(AS_PROGRAM, &isa16_sad8852_device::sad8852_mem);
+ cpu.set_addrmap(AS_IO, &isa16_sad8852_device::sad8852_io);
I8274_NEW(config, "terminal", XTAL(12'000'000) / 3); // Needs verification
-MACHINE_CONFIG_END
+}
isa16_sad8852_device::isa16_sad8852_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, ISA16_SAD8852, tag, owner, clock)
diff --git a/src/devices/bus/isa/fdc.cpp b/src/devices/bus/isa/fdc.cpp
index f31b0f5f9dd..9c9f52d7a1d 100644
--- a/src/devices/bus/isa/fdc.cpp
+++ b/src/devices/bus/isa/fdc.cpp
@@ -72,6 +72,11 @@ void isa8_fdc_device::dack_w(int line, uint8_t data)
return m_fdc->dma_w(data);
}
+void isa8_fdc_device::dack_line_w(int line, int state)
+{
+ //m_fdc->dack_w(state);
+}
+
void isa8_fdc_device::eop_w(int state)
{
m_fdc->tc_w(state == ASSERT_LINE);
diff --git a/src/devices/bus/isa/fdc.h b/src/devices/bus/isa/fdc.h
index 7a1781cdc69..cec5f7dd06e 100644
--- a/src/devices/bus/isa/fdc.h
+++ b/src/devices/bus/isa/fdc.h
@@ -40,6 +40,7 @@ protected:
virtual uint8_t dack_r(int line) override;
virtual void dack_w(int line, uint8_t data) override;
+ virtual void dack_line_w(int line, int state) override;
virtual void eop_w(int state) override;
required_device<pc_fdc_interface> m_fdc;
diff --git a/src/devices/bus/isa/finalchs.cpp b/src/devices/bus/isa/finalchs.cpp
index e79dee39686..f9e6f37dc8f 100644
--- a/src/devices/bus/isa/finalchs.cpp
+++ b/src/devices/bus/isa/finalchs.cpp
@@ -71,10 +71,11 @@ DEFINE_DEVICE_TYPE(ISA8_FINALCHS, isa8_finalchs_device, "isa_finalchs", "Final C
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa8_finalchs_device::device_add_mconfig)
- MCFG_DEVICE_ADD("maincpu",M65C02,5000000)
- MCFG_DEVICE_PROGRAM_MAP(finalchs_mem)
-MACHINE_CONFIG_END
+void isa8_finalchs_device::device_add_mconfig(machine_config &config)
+{
+ m65c02_device &cpu(M65C02(config, "maincpu", 5000000));
+ cpu.set_addrmap(AS_PROGRAM, &isa8_finalchs_device::finalchs_mem);
+}
//**************************************************************************
// LIVE DEVICE
diff --git a/src/devices/bus/isa/gus.cpp b/src/devices/bus/isa/gus.cpp
index 99404470140..423c1e3629f 100644
--- a/src/devices/bus/isa/gus.cpp
+++ b/src/devices/bus/isa/gus.cpp
@@ -1250,7 +1250,8 @@ INPUT_PORTS_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa16_gus_device::device_add_mconfig)
+void isa16_gus_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
GGF1(config, m_gf1, GF1_CLOCK);
@@ -1270,14 +1271,13 @@ MACHINE_CONFIG_START(isa16_gus_device::device_add_mconfig)
m_gf1->drq2_handler().set(FUNC(isa16_gus_device::drq2_w));
m_gf1->nmi_handler().set(FUNC(isa16_gus_device::nmi_w));
- MCFG_MIDI_PORT_ADD("mdin", midiin_slot, "midiin")
- MCFG_MIDI_RX_HANDLER(WRITELINE("gf1", acia6850_device, write_rxd))
+ MIDI_PORT(config, "mdin", midiin_slot, "midiin").rxd_handler().set(m_gf1, FUNC(acia6850_device::write_rxd));
- MCFG_MIDI_PORT_ADD("mdout", midiout_slot, "midiout")
+ MIDI_PORT(config, "mdout", midiout_slot, "midiout");
- MCFG_DEVICE_ADD("acia_clock", CLOCK, 31250*16)
- MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(*this, isa16_gus_device, write_acia_clock))
-MACHINE_CONFIG_END
+ clock_device &acia_clock(CLOCK(config, "acia_clock", 31250*16));
+ acia_clock.signal_handler().set(FUNC(isa16_gus_device::write_acia_clock));
+}
ioport_constructor isa16_gus_device::device_input_ports() const
{
@@ -1384,9 +1384,9 @@ READ8_MEMBER(isa16_gus_device::synth_r)
switch(offset)
{
case 0x00:
- return m_gf1->status_r(space,0);
+ return m_gf1->status_r();
case 0x01:
- return m_gf1->data_r(space,0);
+ return m_gf1->data_r();
case 0x02:
case 0x03:
return m_gf1->global_reg_select_r(space,offset-2);
@@ -1407,10 +1407,10 @@ WRITE8_MEMBER(isa16_gus_device::synth_w)
switch(offset)
{
case 0x00:
- m_gf1->control_w(space,0,data);
+ m_gf1->control_w(data);
break;
case 0x01:
- m_gf1->data_w(space,0,data);
+ m_gf1->data_w(data);
break;
case 0x02:
case 0x03:
diff --git a/src/devices/bus/isa/gus.h b/src/devices/bus/isa/gus.h
index 493893a62e0..0009510b81f 100644
--- a/src/devices/bus/isa/gus.h
+++ b/src/devices/bus/isa/gus.h
@@ -45,38 +45,6 @@
#include "isa.h"
#include "machine/6850acia.h"
-#define MCFG_GF1_TXIRQ_HANDLER(_devcb) \
- downcast<gf1_device &>(*device).set_txirq_handler(DEVCB_##_devcb);
-
-#define MCFG_GF1_RXIRQ_HANDLER(_devcb) \
- downcast<gf1_device &>(*device).set_rxirq_handler(DEVCB_##_devcb);
-
-#define MCFG_GF1_WAVE_IRQ_HANDLER(_devcb) \
- downcast<gf1_device &>(*device).set_wave_irq_handler(DEVCB_##_devcb);
-
-#define MCFG_GF1_RAMP_IRQ_HANDLER(_devcb) \
- downcast<gf1_device &>(*device).set_ramp_irq_handler(DEVCB_##_devcb);
-
-#define MCFG_GF1_TIMER1_IRQ_HANDLER(_devcb) \
- downcast<gf1_device &>(*device).set_timer1_irq_handler(DEVCB_##_devcb);
-
-#define MCFG_GF1_TIMER2_IRQ_HANDLER(_devcb) \
- downcast<gf1_device &>(*device).set_timer2_irq_handler(DEVCB_##_devcb);
-
-#define MCFG_GF1_SB_IRQ_HANDLER(_devcb) \
- downcast<gf1_device &>(*device).set_sb_irq_handler(DEVCB_##_devcb);
-
-#define MCFG_GF1_DMA_IRQ_HANDLER(_devcb) \
- downcast<gf1_device &>(*device).set_dma_irq_handler(DEVCB_##_devcb);
-
-#define MCFG_GF1_DRQ1_HANDLER(_devcb) \
- downcast<gf1_device &>(*device).set_drq1_handler(DEVCB_##_devcb);
-
-#define MCFG_GF1_DRQ2_HANDLER(_devcb) \
- downcast<gf1_device &>(*device).set_drq2_handler(DEVCB_##_devcb);
-
-#define MCFG_GF1_NMI_HANDLER(_devcb) \
- downcast<gf1_device &>(*device).set_nmi_handler(DEVCB_##_devcb);
//**************************************************************************
// TYPE DEFINITIONS
@@ -112,17 +80,6 @@ public:
// construction/destruction
gf1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- template <class Object> devcb_base &set_txirq_handler(Object &&cb) { return m_txirq_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_rxirq_handler(Object &&cb) { return m_rxirq_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_wave_irq_handler(Object &&cb) { return m_wave_irq_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_ramp_irq_handler(Object &&cb) { return m_ramp_irq_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_timer1_irq_handler(Object &&cb) { return m_timer1_irq_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_timer2_irq_handler(Object &&cb) { return m_timer2_irq_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_sb_irq_handler(Object &&cb) { return m_sb_irq_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_dma_irq_handler(Object &&cb) { return m_dma_irq_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_drq1_handler(Object &&cb) { return m_drq1_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_drq2_handler(Object &&cb) { return m_drq2_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_nmi_handler(Object &&cb) { return m_nmi_handler.set_callback(std::forward<Object>(cb)); }
auto txirq_handler() { return m_txirq_handler.bind(); }
auto rxirq_handler() { return m_rxirq_handler.bind(); }
auto wave_irq_handler() { return m_wave_irq_handler.bind(); }
diff --git a/src/devices/bus/isa/hdc.cpp b/src/devices/bus/isa/hdc.cpp
index 040f72f98c3..2492d0eaa89 100644
--- a/src/devices/bus/isa/hdc.cpp
+++ b/src/devices/bus/isa/hdc.cpp
@@ -918,21 +918,23 @@ DEFINE_DEVICE_TYPE(ISA8_HDC_EC1841, isa8_hdc_ec1841_device, "isa_hdc_ec1841", "E
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa8_hdc_device::device_add_mconfig)
- MCFG_DEVICE_ADD("hdc",XT_HDC,0)
- MCFG_XTHDC_IRQ_HANDLER(WRITELINE(*this, isa8_hdc_device,irq_w))
- MCFG_XTHDC_DRQ_HANDLER(WRITELINE(*this, isa8_hdc_device,drq_w))
- MCFG_HARDDISK_ADD("hdc:primary")
- MCFG_HARDDISK_ADD("hdc:slave")
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(isa8_hdc_ec1841_device::device_add_mconfig)
- MCFG_DEVICE_ADD("hdc",EC1841_HDC,0)
- MCFG_XTHDC_IRQ_HANDLER(WRITELINE(*this, isa8_hdc_ec1841_device,irq_w))
- MCFG_XTHDC_DRQ_HANDLER(WRITELINE(*this, isa8_hdc_ec1841_device,drq_w))
- MCFG_HARDDISK_ADD("hdc:primary")
- MCFG_HARDDISK_ADD("hdc:slave")
-MACHINE_CONFIG_END
+void isa8_hdc_device::device_add_mconfig(machine_config &config)
+{
+ XT_HDC(config, m_hdc,0);
+ m_hdc->irq_handler().set(FUNC(isa8_hdc_device::irq_w));
+ m_hdc->drq_handler().set(FUNC(isa8_hdc_device::drq_w));
+ HARDDISK(config, "hdc:primary");
+ HARDDISK(config, "hdc:slave");
+}
+
+void isa8_hdc_ec1841_device::device_add_mconfig(machine_config &config)
+{
+ EC1841_HDC(config, m_hdc,0);
+ m_hdc->irq_handler().set(FUNC(isa8_hdc_ec1841_device::irq_w));
+ m_hdc->drq_handler().set(FUNC(isa8_hdc_ec1841_device::drq_w));
+ HARDDISK(config, "hdc:primary");
+ HARDDISK(config, "hdc:slave");
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/isa/hdc.h b/src/devices/bus/isa/hdc.h
index 3e91c57d063..7d60d40b7a5 100644
--- a/src/devices/bus/isa/hdc.h
+++ b/src/devices/bus/isa/hdc.h
@@ -19,11 +19,6 @@
// XT HD controller device
-#define MCFG_XTHDC_IRQ_HANDLER(_devcb) \
- downcast<xt_hdc_device &>(*device).set_irq_handler(DEVCB_##_devcb);
-
-#define MCFG_XTHDC_DRQ_HANDLER(_devcb) \
- downcast<xt_hdc_device &>(*device).set_drq_handler(DEVCB_##_devcb);
class xt_hdc_device :
public device_t
@@ -32,8 +27,8 @@ public:
// construction/destruction
xt_hdc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- template <class Object> devcb_base &set_irq_handler(Object &&cb) { return m_irq_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_drq_handler(Object &&cb) { return m_drq_handler.set_callback(std::forward<Object>(cb)); }
+ auto irq_handler() { return m_irq_handler.bind(); }
+ auto drq_handler() { return m_drq_handler.bind(); }
int dack_r();
int dack_rs();
diff --git a/src/devices/bus/isa/ibm_mfc.cpp b/src/devices/bus/isa/ibm_mfc.cpp
index 30a638d1c27..40ce54ff6fc 100644
--- a/src/devices/bus/isa/ibm_mfc.cpp
+++ b/src/devices/bus/isa/ibm_mfc.cpp
@@ -374,10 +374,11 @@ ROM_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa8_ibm_mfc_device::device_add_mconfig)
- MCFG_DEVICE_ADD("ibm_mfc", Z80, XTAL(11'800'000) / 2)
- MCFG_DEVICE_PROGRAM_MAP(prg_map)
- MCFG_DEVICE_IO_MAP(io_map)
+void isa8_ibm_mfc_device::device_add_mconfig(machine_config &config)
+{
+ Z80(config, m_cpu, XTAL(11'800'000) / 2);
+ m_cpu->set_addrmap(AS_PROGRAM, &isa8_ibm_mfc_device::prg_map);
+ m_cpu->set_addrmap(AS_IO, &isa8_ibm_mfc_device::io_map);
I8255(config, m_d71055c_0);
m_d71055c_0->in_pa_callback().set(FUNC(isa8_ibm_mfc_device::ppi0_i_a));
@@ -390,10 +391,10 @@ MACHINE_CONFIG_START(isa8_ibm_mfc_device::device_add_mconfig)
m_d71055c_1->in_pb_callback().set(FUNC(isa8_ibm_mfc_device::ppi1_i_b));
m_d71055c_1->out_pc_callback().set(FUNC(isa8_ibm_mfc_device::ppi1_o_c));
- I8251(config, "d71051", 0);
+ I8251(config, m_d71051, 0);
- MCFG_DEVICE_ADD("usart_clock", CLOCK, XTAL(4'000'000) / 8) // 500KHz
- MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(*this, isa8_ibm_mfc_device, write_usart_clock))
+ clock_device &usart_clock(CLOCK(config, "usart_clock", XTAL(4'000'000) / 8)); // 500KHz
+ usart_clock.signal_handler().set(FUNC(isa8_ibm_mfc_device::write_usart_clock));
PIT8253(config, m_d8253, 0);
m_d8253->set_clk<0>(XTAL(4'000'000) / 8);
@@ -409,7 +410,7 @@ MACHINE_CONFIG_START(isa8_ibm_mfc_device::device_add_mconfig)
m_ym2151->irq_handler().set(FUNC(isa8_ibm_mfc_device::ibm_mfc_ym_irq));
m_ym2151->add_route(0, "ymleft", 1.00);
m_ym2151->add_route(1, "ymright", 1.00);
-MACHINE_CONFIG_END
+}
//-------------------------------------------------
diff --git a/src/devices/bus/isa/isa.cpp b/src/devices/bus/isa/isa.cpp
index 417e354180c..92ead5df95b 100644
--- a/src/devices/bus/isa/isa.cpp
+++ b/src/devices/bus/isa/isa.cpp
@@ -111,11 +111,10 @@ isa8_device::isa8_device(const machine_config &mconfig, device_type type, const
m_io_config("ISA 8-bit I/O", ENDIANNESS_LITTLE, 8, 16, 0, address_map_constructor()),
m_mem16_config("ISA 16-bit mem", ENDIANNESS_LITTLE, 16, 24, 0, address_map_constructor()),
m_io16_config("ISA 16-bit I/O", ENDIANNESS_LITTLE, 16, 16, 0, address_map_constructor()),
- m_maincpu(*this, finder_base::DUMMY_TAG),
- m_iospace(nullptr),
- m_memspace(nullptr),
- m_iowidth(0),
+ m_memspace(*this, finder_base::DUMMY_TAG, -1),
+ m_iospace(*this, finder_base::DUMMY_TAG, -1),
m_memwidth(0),
+ m_iowidth(0),
m_allocspaces(false),
m_out_irq2_cb(*this),
m_out_irq3_cb(*this),
@@ -126,7 +125,6 @@ isa8_device::isa8_device(const machine_config &mconfig, device_type type, const
m_out_drq1_cb(*this),
m_out_drq2_cb(*this),
m_out_drq3_cb(*this),
- m_nmi_enabled(false),
m_write_iochck(*this)
{
std::fill(std::begin(m_dma_device), std::end(m_dma_device), nullptr);
@@ -202,10 +200,27 @@ void isa8_device::remap(int space_id, offs_t start, offs_t end)
}
//-------------------------------------------------
-// device_start - device-specific startup
+// device_config_complete - - perform any
+// operations now that the configuration is
+// complete
//-------------------------------------------------
-void isa8_device::device_start()
+void isa8_device::device_config_complete()
+{
+ if (m_allocspaces)
+ {
+ m_memspace.set_tag(*this, DEVICE_SELF, AS_ISA_MEM);
+ m_iospace.set_tag(*this, DEVICE_SELF, AS_ISA_IO);
+ }
+}
+
+//-------------------------------------------------
+// device_resolve_objects - resolve objects that
+// may be needed for other devices to set
+// initial conditions at start time
+//-------------------------------------------------
+
+void isa8_device::device_resolve_objects()
{
// resolve callbacks
m_write_iochck.resolve_safe();
@@ -220,20 +235,16 @@ void isa8_device::device_start()
m_out_drq2_cb.resolve_safe();
m_out_drq3_cb.resolve_safe();
- if (m_allocspaces)
- {
- m_iospace = &space(AS_ISA_IO);
- m_memspace = &space(AS_ISA_MEM);
- m_iowidth = m_iospace->data_width();
- m_memwidth = m_memspace->data_width();
- }
- else // use host CPU's program and I/O spaces directly
- {
- m_iospace = &m_maincpu->space(AS_IO);
- m_iowidth = m_maincpu->space_config(AS_IO)->data_width();
- m_memspace = &m_maincpu->space(AS_PROGRAM);
- m_memwidth = m_maincpu->space_config(AS_PROGRAM)->data_width();
- }
+ m_iowidth = m_iospace->data_width();
+ m_memwidth = m_memspace->data_width();
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void isa8_device::device_start()
+{
}
//-------------------------------------------------
@@ -252,12 +263,12 @@ template<typename R, typename W> void isa8_device::install_space(int spacenum, o
if (spacenum == AS_ISA_IO)
{
- space = m_iospace;
+ space = m_iospace.target();
buswidth = m_iowidth;
}
else if (spacenum == AS_ISA_MEM)
{
- space = m_memspace;
+ space = m_memspace.target();
buswidth = m_memwidth;
}
else
@@ -378,12 +389,18 @@ uint8_t isa8_device::dack_r(int line)
return 0xff;
}
-void isa8_device::dack_w(int line,uint8_t data)
+void isa8_device::dack_w(int line, uint8_t data)
{
if (m_dma_device[line])
return m_dma_device[line]->dack_w(line,data);
}
+void isa8_device::dack_line_w(int line, int state)
+{
+ if (m_dma_device[line])
+ m_dma_device[line]->dack_line_w(line, state);
+}
+
void isa8_device::eop_w(int channel, int state)
{
if (m_dma_eop[channel] && m_dma_device[channel])
@@ -392,18 +409,9 @@ void isa8_device::eop_w(int channel, int state)
void isa8_device::nmi()
{
- if (m_write_iochck.isnull())
- {
- if (m_nmi_enabled)
- {
- m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
- }
- }
- else
- {
- m_write_iochck(0);
- m_write_iochck(1);
- }
+ // active low pulse
+ m_write_iochck(0);
+ m_write_iochck(1);
}
//**************************************************************************
@@ -438,9 +446,15 @@ uint8_t device_isa8_card_interface::dack_r(int line)
{
return 0;
}
-void device_isa8_card_interface::dack_w(int line,uint8_t data)
+
+void device_isa8_card_interface::dack_w(int line, uint8_t data)
{
}
+
+void device_isa8_card_interface::dack_line_w(int line, int state)
+{
+}
+
void device_isa8_card_interface::eop_w(int state)
{
}
@@ -593,7 +607,7 @@ uint16_t isa16_device::dack16_r(int line)
return 0xffff;
}
-void isa16_device::dack16_w(int line,uint16_t data)
+void isa16_device::dack16_w(int line, uint16_t data)
{
if (m_dma_device[line])
return dynamic_cast<device_isa16_card_interface *>(m_dma_device[line])->dack16_w(line,data);
@@ -647,6 +661,6 @@ uint16_t device_isa16_card_interface::dack16_r(int line)
return 0;
}
-void device_isa16_card_interface::dack16_w(int line,uint16_t data)
+void device_isa16_card_interface::dack16_w(int line, uint16_t data)
{
}
diff --git a/src/devices/bus/isa/isa.h b/src/devices/bus/isa/isa.h
index 3dc15c9df59..fff65de82f6 100644
--- a/src/devices/bus/isa/isa.h
+++ b/src/devices/bus/isa/isa.h
@@ -123,7 +123,8 @@ public:
isa8_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// inline configuration
- template <typename T> void set_cputag(T &&tag) { m_maincpu.set_tag(std::forward<T>(tag)); }
+ template <typename T> void set_memspace(T &&tag, int spacenum) { m_memspace.set_tag(std::forward<T>(tag), spacenum); }
+ template <typename T> void set_iospace(T &&tag, int spacenum) { m_iospace.set_tag(std::forward<T>(tag), spacenum); }
auto iochck_callback() { return m_write_iochck.bind(); }
auto irq2_callback() { return m_out_irq2_cb.bind(); }
auto irq3_callback() { return m_out_irq3_cb.bind(); }
@@ -156,7 +157,7 @@ public:
bool is_option_rom_space_available(offs_t start, int size);
// FIXME: shouldn't need to expose this
- address_space &memspace() const { return m_maincpu->space(AS_PROGRAM); }
+ address_space &memspace() const { return *m_memspace; }
DECLARE_WRITE_LINE_MEMBER( irq2_w );
DECLARE_WRITE_LINE_MEMBER( irq3_w );
@@ -176,11 +177,11 @@ public:
DECLARE_WRITE8_MEMBER(io_w);
uint8_t dack_r(int line);
- void dack_w(int line,uint8_t data);
+ void dack_w(int line, uint8_t data);
+ void dack_line_w(int line, int state);
void eop_w(int channels, int state);
void nmi();
- void set_nmi_state(bool enabled) { m_nmi_enabled = enabled; }
virtual void set_dma_channel(uint8_t channel, device_isa8_card_interface *dev, bool do_eop);
@@ -196,15 +197,14 @@ protected:
template<typename R, typename W> void install_space(int spacenum, offs_t start, offs_t end, R rhandler, W whandler);
// device-level overrides
+ virtual void device_config_complete() override;
+ virtual void device_resolve_objects() override;
virtual void device_start() override;
virtual void device_reset() override;
- // internal state
- required_device<cpu_device> m_maincpu;
-
// address spaces
- address_space *m_iospace, *m_memspace;
- int m_iowidth, m_memwidth;
+ required_address_space m_memspace, m_iospace;
+ int m_memwidth, m_iowidth;
bool m_allocspaces;
devcb_write_line m_out_irq2_cb;
@@ -219,7 +219,6 @@ protected:
device_isa8_card_interface *m_dma_device[8];
bool m_dma_eop[8];
- bool m_nmi_enabled;
std::forward_list<device_slot_interface *> m_slot_list;
private:
@@ -246,7 +245,8 @@ public:
void set_isa_device();
// configuration access
virtual uint8_t dack_r(int line);
- virtual void dack_w(int line,uint8_t data);
+ virtual void dack_w(int line, uint8_t data);
+ virtual void dack_line_w(int line, int state);
virtual void eop_w(int state);
virtual void remap(int space_id, offs_t start, offs_t end) {}
@@ -325,7 +325,7 @@ public:
DECLARE_WRITE_LINE_MEMBER( drq7_w );
uint16_t dack16_r(int line);
- void dack16_w(int line,uint16_t data);
+ void dack16_w(int line, uint16_t data);
virtual void remap(int space_id, offs_t start, offs_t end) override;
// 16 bit accessors for ISA-defined address spaces
@@ -370,7 +370,7 @@ public:
// construction/destruction
virtual ~device_isa16_card_interface();
virtual uint16_t dack16_r(int line);
- virtual void dack16_w(int line,uint16_t data);
+ virtual void dack16_w(int line, uint16_t data);
void set_isa_device();
diff --git a/src/devices/bus/isa/isa_cards.cpp b/src/devices/bus/isa/isa_cards.cpp
index fbbafc0bc69..8ab0832c03d 100644
--- a/src/devices/bus/isa/isa_cards.cpp
+++ b/src/devices/bus/isa/isa_cards.cpp
@@ -31,11 +31,16 @@
#include "ide.h"
#include "xtide.h"
#include "side116.h"
-#include "aha1542.h"
+#include "aha1542b.h"
+#include "aha1542c.h"
+#include "aha174x.h"
#include "wd1002a_wx1.h"
#include "wd1007a.h"
#include "mcd.h"
#include "lbaenhancer.h"
+#include "cl_sh260.h"
+#include "bt54x.h"
+#include "dcb.h"
// sound
#include "adlib.h"
@@ -55,6 +60,7 @@
#include "ne2000.h"
#include "3c505.h"
#include "eis_sad8852.h"
+#include "np600.h"
// communication ports
#include "lpt.h"
@@ -150,7 +156,13 @@ void pc_isa16_cards(device_slot_interface &device)
// 16-bit
device.option_add("ide", ISA16_IDE);
device.option_add("ne2000", NE2000);
- device.option_add("aha1542", AHA1542);
+ device.option_add("aha1542a", AHA1542A);
+ device.option_add("aha1542b", AHA1542B);
+ device.option_add("aha1542c", AHA1542C);
+ device.option_add("aha1542cf", AHA1542CF);
+ device.option_add("aha1542cp", AHA1542CP);
+ device.option_add("aha1740", AHA1740); // actually an EISA card
+ device.option_add("aha1742a", AHA1742A); // actually an EISA card
device.option_add("gus",ISA16_GUS);
device.option_add("sblaster_16", ISA16_SOUND_BLASTER_16);
device.option_add("svga_s3", ISA16_SVGA_S3);
@@ -167,5 +179,12 @@ void pc_isa16_cards(device_slot_interface &device)
device.option_add("sb16_lle", ISA16_SB16);
device.option_add("mcd", ISA16_MCD);
device.option_add("sad8852", ISA16_SAD8852);
+ device.option_add("np600a3", NP600A3);
device.option_add("wd1007a", WD1007A);
+ device.option_add("ev346", EV346);
+ device.option_add("jc1310", JC1310);
+ device.option_add("bt542b", BT542B);
+ device.option_add("bt542bh", BT542BH);
+ device.option_add("bt545s", BT545S);
+ device.option_add("dcb", NOVELL_DCB);
}
diff --git a/src/devices/bus/isa/lbaenhancer.cpp b/src/devices/bus/isa/lbaenhancer.cpp
index 14bd28826ef..f8ebedb130c 100644
--- a/src/devices/bus/isa/lbaenhancer.cpp
+++ b/src/devices/bus/isa/lbaenhancer.cpp
@@ -84,9 +84,10 @@ const tiny_rom_entry *lba_enhancer_device::device_rom_region() const
//-------------------------------------------------
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START( lba_enhancer_device::device_add_mconfig )
-// MCFG_DEVICE_ADD("lba_enhancer", lba_enhancer, 0)
-MACHINE_CONFIG_END
+void lba_enhancer_device::device_add_mconfig(machine_config &config)
+{
+// lba_enhancer(config, "lba_enhancer", 0);
+}
//-------------------------------------------------
diff --git a/src/devices/bus/isa/mc1502_fdc.cpp b/src/devices/bus/isa/mc1502_fdc.cpp
index 1b04c6be91e..3f85534a72b 100644
--- a/src/devices/bus/isa/mc1502_fdc.cpp
+++ b/src/devices/bus/isa/mc1502_fdc.cpp
@@ -12,18 +12,6 @@
#include "cpu/i86/i86.h"
#include "formats/pc_dsk.h"
-#define VERBOSE_DBG 0
-
-#define DBG_LOG(N,M,A) \
- do { \
- if(VERBOSE_DBG>=N) \
- { \
- if( M ) \
- logerror("%11.6f: %-24s",machine().time().as_double(),(char*)M ); \
- logerror A; \
- } \
- } while (0)
-
//**************************************************************************
// DEVICE DEFINITIONS
diff --git a/src/devices/bus/isa/mda.cpp b/src/devices/bus/isa/mda.cpp
index 35e382cc981..f1f6cae6257 100644
--- a/src/devices/bus/isa/mda.cpp
+++ b/src/devices/bus/isa/mda.cpp
@@ -22,7 +22,7 @@
#define VERBOSE_MDA 0 /* MDA (Monochrome Display Adapter) */
-#define MDA_CLOCK 16257000
+#define MDA_CLOCK 16.257_MHz_XTAL
#define MDA_LOG(N,M,A) \
do { \
@@ -107,12 +107,13 @@ DEFINE_DEVICE_TYPE(ISA8_MDA, isa8_mda_device, "isa_ibm_mda", "IBM Monochrome Dis
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa8_mda_device::device_add_mconfig)
- MCFG_SCREEN_ADD( MDA_SCREEN_NAME, RASTER)
- MCFG_SCREEN_RAW_PARAMS(MDA_CLOCK, 882, 0, 720, 370, 0, 350 )
- MCFG_SCREEN_UPDATE_DEVICE( MC6845_NAME, mc6845_device, screen_update )
+void isa8_mda_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, MDA_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_raw(MDA_CLOCK, 882, 0, 720, 370, 0, 350);
+ screen.set_screen_update(MC6845_NAME, FUNC(mc6845_device::screen_update));
- MCFG_PALETTE_ADD( "palette", 4 )
+ PALETTE(config, m_palette).set_entries(4);
MC6845(config, m_crtc, MDA_CLOCK/9);
m_crtc->set_screen(MDA_SCREEN_NAME);
@@ -122,11 +123,11 @@ MACHINE_CONFIG_START(isa8_mda_device::device_add_mconfig)
m_crtc->out_hsync_callback().set(FUNC(isa8_mda_device::hsync_changed));
m_crtc->out_vsync_callback().set(FUNC(isa8_mda_device::vsync_changed));
- MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_pcmda)
+ GFXDECODE(config, "gfxdecode", m_palette, gfx_pcmda);
PC_LPT(config, m_lpt);
m_lpt->irq_handler().set(FUNC(isa8_mda_device::pc_cpu_line));
-MACHINE_CONFIG_END
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
@@ -462,10 +463,10 @@ WRITE8_MEMBER( isa8_mda_device::io_write)
switch( offset )
{
case 0: case 2: case 4: case 6:
- m_crtc->address_w( space, offset, data );
+ m_crtc->address_w(data);
break;
case 1: case 3: case 5: case 7:
- m_crtc->register_w( space, offset, data );
+ m_crtc->register_w(data);
break;
case 8:
mode_control_w(space, offset, data);
@@ -485,7 +486,7 @@ READ8_MEMBER( isa8_mda_device::io_read)
/* return last written mc6845 address value here? */
break;
case 1: case 3: case 5: case 7:
- data = m_crtc->register_r( space, offset );
+ data = m_crtc->register_r();
break;
case 10:
data = status_r(space, offset);
@@ -532,12 +533,13 @@ DEFINE_DEVICE_TYPE(ISA8_HERCULES, isa8_hercules_device, "isa_hercules", "Hercule
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa8_hercules_device::device_add_mconfig)
- MCFG_SCREEN_ADD( HERCULES_SCREEN_NAME, RASTER)
- MCFG_SCREEN_RAW_PARAMS(MDA_CLOCK, 882, 0, 720, 370, 0, 350 )
- MCFG_SCREEN_UPDATE_DEVICE( MC6845_NAME, mc6845_device, screen_update )
+void isa8_hercules_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, HERCULES_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_raw(MDA_CLOCK, 882, 0, 720, 370, 0, 350);
+ screen.set_screen_update(MC6845_NAME, FUNC(mc6845_device::screen_update));
- MCFG_PALETTE_ADD( "palette", 4 )
+ PALETTE(config, m_palette).set_entries(4);
MC6845(config, m_crtc, MDA_CLOCK/9);
m_crtc->set_screen(HERCULES_SCREEN_NAME);
@@ -547,11 +549,11 @@ MACHINE_CONFIG_START(isa8_hercules_device::device_add_mconfig)
m_crtc->out_hsync_callback().set(FUNC(isa8_mda_device::hsync_changed));
m_crtc->out_vsync_callback().set(FUNC(isa8_mda_device::vsync_changed));
- MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_pcherc)
+ GFXDECODE(config, "gfxdecode", m_palette, gfx_pcherc);
PC_LPT(config, m_lpt);
m_lpt->irq_handler().set(FUNC(isa8_mda_device::pc_cpu_line));
-MACHINE_CONFIG_END
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
@@ -677,10 +679,10 @@ WRITE8_MEMBER( isa8_hercules_device::io_write )
switch( offset )
{
case 0: case 2: case 4: case 6:
- m_crtc->address_w( space, offset, data );
+ m_crtc->address_w(data);
break;
case 1: case 3: case 5: case 7:
- m_crtc->register_w( space, offset, data );
+ m_crtc->register_w(data);
break;
case 8:
mode_control_w(space, offset, data);
@@ -724,7 +726,7 @@ READ8_MEMBER( isa8_hercules_device::io_read )
/* return last written mc6845 address value here? */
break;
case 1: case 3: case 5: case 7:
- data = m_crtc->register_r( space, offset );
+ data = m_crtc->register_r();
break;
case 10:
data = status_r(space, offset);
@@ -745,12 +747,13 @@ DEFINE_DEVICE_TYPE(ISA8_EC1840_0002, isa8_ec1840_0002_device, "ec1840_0002", "EC
//-------------------------------------------------
// XXX
-MACHINE_CONFIG_START(isa8_ec1840_0002_device::device_add_mconfig)
- MCFG_SCREEN_ADD( MDA_SCREEN_NAME, RASTER)
- MCFG_SCREEN_RAW_PARAMS(MDA_CLOCK, 792, 0, 640, 370, 0, 350 )
- MCFG_SCREEN_UPDATE_DEVICE( MC6845_NAME, mc6845_device, screen_update )
+void isa8_ec1840_0002_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, MDA_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_raw(MDA_CLOCK, 792, 0, 640, 370, 0, 350);
+ screen.set_screen_update(MC6845_NAME, FUNC(mc6845_device::screen_update));
- MCFG_PALETTE_ADD( "palette", 4 )
+ PALETTE(config, m_palette).set_entries(4);
MC6845(config, m_crtc, MDA_CLOCK/8);
m_crtc->set_screen(MDA_SCREEN_NAME);
@@ -759,7 +762,7 @@ MACHINE_CONFIG_START(isa8_ec1840_0002_device::device_add_mconfig)
m_crtc->set_update_row_callback(FUNC(isa8_mda_device::crtc_update_row), this);
m_crtc->out_hsync_callback().set(FUNC(isa8_mda_device::hsync_changed));
m_crtc->out_vsync_callback().set(FUNC(isa8_mda_device::vsync_changed));
-MACHINE_CONFIG_END
+}
//-------------------------------------------------
// isa8_ec1840_0002_device - constructor
diff --git a/src/devices/bus/isa/mufdc.cpp b/src/devices/bus/isa/mufdc.cpp
index 8930a080d8f..3e40653e175 100644
--- a/src/devices/bus/isa/mufdc.cpp
+++ b/src/devices/bus/isa/mufdc.cpp
@@ -195,6 +195,11 @@ void mufdc_device::dack_w(int line, uint8_t data)
return m_fdc->dma_w(data);
}
+void mufdc_device::dack_line_w(int line, int state)
+{
+ //m_fdc->dack_w(state);
+}
+
void mufdc_device::eop_w(int state)
{
m_fdc->tc_w(state == ASSERT_LINE);
diff --git a/src/devices/bus/isa/mufdc.h b/src/devices/bus/isa/mufdc.h
index 4d042a58834..2fa000757e4 100644
--- a/src/devices/bus/isa/mufdc.h
+++ b/src/devices/bus/isa/mufdc.h
@@ -47,6 +47,7 @@ protected:
// device_isa8_card_interface
virtual uint8_t dack_r(int line) override;
virtual void dack_w(int line, uint8_t data) override;
+ virtual void dack_line_w(int line, int state) override;
virtual void eop_w(int state) override;
private:
diff --git a/src/devices/bus/isa/ne1000.cpp b/src/devices/bus/isa/ne1000.cpp
index 7723ad75a88..1eaef942105 100644
--- a/src/devices/bus/isa/ne1000.cpp
+++ b/src/devices/bus/isa/ne1000.cpp
@@ -6,12 +6,13 @@
DEFINE_DEVICE_TYPE(NE1000, ne1000_device, "ne1000", "NE1000 Network Adapter")
-MACHINE_CONFIG_START(ne1000_device::device_add_mconfig)
- MCFG_DEVICE_ADD("dp8390d", DP8390D, 0)
- MCFG_DP8390D_IRQ_CB(WRITELINE(*this, ne1000_device, ne1000_irq_w))
- MCFG_DP8390D_MEM_READ_CB(READ8(*this, ne1000_device, ne1000_mem_read))
- MCFG_DP8390D_MEM_WRITE_CB(WRITE8(*this, ne1000_device, ne1000_mem_write))
-MACHINE_CONFIG_END
+void ne1000_device::device_add_mconfig(machine_config &config)
+{
+ DP8390D(config, m_dp8390, 0);
+ m_dp8390->irq_callback().set(FUNC(ne1000_device::ne1000_irq_w));
+ m_dp8390->mem_read_callback().set(FUNC(ne1000_device::ne1000_mem_read));
+ m_dp8390->mem_write_callback().set(FUNC(ne1000_device::ne1000_mem_write));
+}
ne1000_device::ne1000_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, NE1000, tag, owner, clock),
diff --git a/src/devices/bus/isa/ne2000.cpp b/src/devices/bus/isa/ne2000.cpp
index 5de941accc2..3ad2cc592ef 100644
--- a/src/devices/bus/isa/ne2000.cpp
+++ b/src/devices/bus/isa/ne2000.cpp
@@ -6,12 +6,13 @@
DEFINE_DEVICE_TYPE(NE2000, ne2000_device, "ne2000", "NE2000 Network Adapter")
-MACHINE_CONFIG_START(ne2000_device::device_add_mconfig)
- MCFG_DEVICE_ADD("dp8390d", DP8390D, 0)
- MCFG_DP8390D_IRQ_CB(WRITELINE(*this, ne2000_device, ne2000_irq_w))
- MCFG_DP8390D_MEM_READ_CB(READ8(*this, ne2000_device, ne2000_mem_read))
- MCFG_DP8390D_MEM_WRITE_CB(WRITE8(*this, ne2000_device, ne2000_mem_write))
-MACHINE_CONFIG_END
+void ne2000_device::device_add_mconfig(machine_config &config)
+{
+ DP8390D(config, m_dp8390, 0);
+ m_dp8390->irq_callback().set(FUNC(ne2000_device::ne2000_irq_w));
+ m_dp8390->mem_read_callback().set(FUNC(ne2000_device::ne2000_mem_read));
+ m_dp8390->mem_write_callback().set(FUNC(ne2000_device::ne2000_mem_write));
+}
ne2000_device::ne2000_device(const machine_config& mconfig, const char* tag, device_t* owner, uint32_t clock)
: device_t(mconfig, NE2000, tag, owner, clock),
diff --git a/src/devices/bus/isa/np600.cpp b/src/devices/bus/isa/np600.cpp
new file mode 100644
index 00000000000..064c1d40191
--- /dev/null
+++ b/src/devices/bus/isa/np600.cpp
@@ -0,0 +1,76 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/*********************************************************************
+
+ InterLan NP600 Intelligent Protocol Processor
+
+*********************************************************************/
+
+#include "emu.h"
+#include "np600.h"
+
+#include "cpu/i86/i186.h"
+#include "machine/74259.h"
+//#include "machine/i82586.h"
+
+DEFINE_DEVICE_TYPE(NP600A3, np600a3_device, "np600a3", "InterLan NP600A-3 Intelligent Protocol Processor")
+
+np600a3_device::np600a3_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, NP600A3, tag, owner, clock)
+ , device_isa16_card_interface(mconfig, *this)
+ , m_npcpu(*this, "npcpu")
+{
+}
+
+void np600a3_device::device_start()
+{
+}
+
+u16 np600a3_device::status_r()
+{
+ return 0;
+}
+
+void np600a3_device::mem_map(address_map &map)
+{
+ map(0x00000, 0x7ffff).ram(); // GM71256-12 x16
+ map(0xfc000, 0xfffff).rom().region("npcpu", 0);
+}
+
+void np600a3_device::io_map(address_map &map)
+{
+ map(0x0070, 0x007f).w("latch70", FUNC(ls259_device::write_a0));
+ map(0x0080, 0x0081).r(FUNC(np600a3_device::status_r));
+}
+
+void np600a3_device::device_add_mconfig(machine_config &config)
+{
+ I80186(config, m_npcpu, 16_MHz_XTAL);
+ m_npcpu->set_addrmap(AS_PROGRAM, &np600a3_device::mem_map);
+ m_npcpu->set_addrmap(AS_IO, &np600a3_device::io_map);
+
+ LS259(config, "latch70"); // U28
+
+ //I82586(config, "enet", 20_MHz_XTAL);
+}
+
+ROM_START(np600a3)
+ ROM_REGION(0x4000, "npcpu", 0)
+ ROM_LOAD16_BYTE("258-0032-00_rev_ba.u38", 0x0000, 0x2000, CRC(84ccb317) SHA1(3ecc8e265336f5d3b0f276f18dd1b7001778f2c3))
+ ROM_LOAD16_BYTE("258-0033-00_rev_ba.u39", 0x0001, 0x2000, CRC(0e0f726c) SHA1(520773e235a826438b025381cd3861df86d4965d))
+
+ // Undumped small devices (mostly or all PLDs):
+ // 258-0037-00 REV AA (U17, 20 pins)
+ // 258-0027-01 REV AB (U20, 20 pins)
+ // 020701079BFA (U29, 16 pins)
+ // 258-0031-00 REV AC (U34, PAL20xx, 24 pins)
+ // 258-0030-00 REV AA (U36, 20 pins)
+ // 258-0028-01 REV AA (U44, 20 pins)
+ // 258-0029-01 REV AA (U46, 20 pins)
+ // 258-0089-00 REV AA (U48, 20 pins)
+ROM_END
+
+const tiny_rom_entry *np600a3_device::device_rom_region() const
+{
+ return ROM_NAME(np600a3);
+}
diff --git a/src/devices/bus/isa/np600.h b/src/devices/bus/isa/np600.h
new file mode 100644
index 00000000000..7831d804922
--- /dev/null
+++ b/src/devices/bus/isa/np600.h
@@ -0,0 +1,39 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/*********************************************************************
+
+ InterLan NP600 Intelligent Protocol Processor
+
+*********************************************************************/
+
+#ifndef MAME_BUS_ISA_NP600_H
+#define MAME_BUS_ISA_NP600_H
+
+#pragma once
+
+#include "isa.h"
+
+class np600a3_device : public device_t, public device_isa16_card_interface
+{
+public:
+ np600a3_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type unemulated_features() { return feature::LAN; }
+
+protected:
+ virtual void device_start() override;
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+private:
+ u16 status_r();
+
+ void mem_map(address_map &map);
+ void io_map(address_map &map);
+
+ required_device<cpu_device> m_npcpu;
+};
+
+DECLARE_DEVICE_TYPE(NP600A3, np600a3_device)
+
+#endif // MAME_BUS_ISA_NP600_H
diff --git a/src/devices/bus/isa/num9rev.cpp b/src/devices/bus/isa/num9rev.cpp
index baf30cca586..ebe44a379f4 100644
--- a/src/devices/bus/isa/num9rev.cpp
+++ b/src/devices/bus/isa/num9rev.cpp
@@ -53,19 +53,20 @@ UPD7220_DISPLAY_PIXELS_MEMBER( isa8_number_9_rev_device::hgdc_display_pixels )
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa8_number_9_rev_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_SIZE(512, 448)
- MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 448-1)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_UPDATE_DRIVER(isa8_number_9_rev_device, screen_update)
- MCFG_PALETTE_ADD("palette", 4096)
+void isa8_number_9_rev_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_size(512, 448);
+ screen.set_visarea(0, 512-1, 0, 448-1);
+ screen.set_refresh_hz(60);
+ screen.set_screen_update(FUNC(isa8_number_9_rev_device::screen_update));
+ PALETTE(config, m_palette).set_entries(4096);
UPD7220(config, m_upd7220, XTAL(4'433'619)/2); // unknown clock
m_upd7220->set_addrmap(0, &isa8_number_9_rev_device::upd7220_map);
- m_upd7220->set_display_pixels_callback(FUNC(isa8_number_9_rev_device::hgdc_display_pixels), this);
+ m_upd7220->set_display_pixels(FUNC(isa8_number_9_rev_device::hgdc_display_pixels));
m_upd7220->set_screen("screen");
-MACHINE_CONFIG_END
+}
//**************************************************************************
// LIVE DEVICE
@@ -93,7 +94,7 @@ void isa8_number_9_rev_device::device_start()
{
set_isa_device();
- m_isa->install_memory(0xc0000, 0xc0001, read8_delegate(FUNC(upd7220_device::read), (upd7220_device *)m_upd7220), write8_delegate(FUNC(upd7220_device::write), (upd7220_device *)m_upd7220));
+ m_isa->install_memory(0xc0000, 0xc0001, read8sm_delegate(FUNC(upd7220_device::read), (upd7220_device *)m_upd7220), write8sm_delegate(FUNC(upd7220_device::write), (upd7220_device *)m_upd7220));
m_isa->install_memory(0xc0100, 0xc03ff, read8_delegate(FUNC(isa8_number_9_rev_device::pal8_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::pal8_w), this));
m_isa->install_memory(0xc0400, 0xc0401, read8_delegate(FUNC(isa8_number_9_rev_device::bank_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::bank_w), this));
m_isa->install_memory(0xc0500, 0xc06ff, read8_delegate(FUNC(isa8_number_9_rev_device::overlay_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::overlay_w), this));
diff --git a/src/devices/bus/isa/omti8621.cpp b/src/devices/bus/isa/omti8621.cpp
index 9eebabb188f..bea87f420ee 100644
--- a/src/devices/bus/isa/omti8621.cpp
+++ b/src/devices/bus/isa/omti8621.cpp
@@ -1285,6 +1285,11 @@ void omti8621_device::dack_w(int line, uint8_t data)
return m_fdc->dma_w(data);
}
+void omti8621_device::dack_line_w(int line, int state)
+{
+ //m_fdc->dack_w(state);
+}
+
void omti8621_device::eop_w(int state)
{
m_fdc->tc_w(state == ASSERT_LINE);
diff --git a/src/devices/bus/isa/omti8621.h b/src/devices/bus/isa/omti8621.h
index 070ae2dbe70..1258af71854 100644
--- a/src/devices/bus/isa/omti8621.h
+++ b/src/devices/bus/isa/omti8621.h
@@ -56,6 +56,7 @@ protected:
virtual uint8_t dack_r(int line) override;
virtual void dack_w(int line, uint8_t data) override;
+ virtual void dack_line_w(int line, int state) override;
virtual void eop_w(int state) override;
void set_interrupt(enum line_state line_state);
diff --git a/src/devices/bus/isa/p1_fdc.cpp b/src/devices/bus/isa/p1_fdc.cpp
index df53cdb7629..9b62451e65a 100644
--- a/src/devices/bus/isa/p1_fdc.cpp
+++ b/src/devices/bus/isa/p1_fdc.cpp
@@ -12,18 +12,6 @@
#include "cpu/i86/i86.h"
#include "formats/pc_dsk.h"
-#define VERBOSE_DBG 0
-
-#define DBG_LOG(N,M,A) \
- do { \
- if(VERBOSE_DBG>=N) \
- { \
- if( M ) \
- logerror("%11.6f: %-24s",machine().time().as_double(),(char*)M ); \
- logerror A; \
- } \
- } while (0)
-
//**************************************************************************
// DEVICE DEFINITIONS
@@ -87,7 +75,6 @@ const tiny_rom_entry *p1_fdc_device::device_rom_region() const
uint8_t p1_fdc_device::p1_wd17xx_motor_r()
{
- DBG_LOG(1, "p1_fdc_motor_r", ("R = $%02x\n", 0));
// XXX always on for now
return 0;
}
@@ -118,8 +105,6 @@ uint8_t p1_fdc_device::p1_wd17xx_aux_r()
*/
void p1_fdc_device::p1_wd17xx_aux_w(int data)
{
- DBG_LOG(1, "p1_fdc_aux_w", ("W $%02x\n", data));
-
floppy_image_device *floppy0 = m_fdc->subdevice<floppy_connector>("0")->get_device();
floppy_image_device *floppy1 = m_fdc->subdevice<floppy_connector>("1")->get_device();
floppy_image_device *floppy = ((data & 2) ? floppy1 : floppy0);
diff --git a/src/devices/bus/isa/p1_hdc.cpp b/src/devices/bus/isa/p1_hdc.cpp
index d0971e6c3c6..129c7a6ce37 100644
--- a/src/devices/bus/isa/p1_hdc.cpp
+++ b/src/devices/bus/isa/p1_hdc.cpp
@@ -14,17 +14,14 @@
// MACROS / CONSTANTS
//**************************************************************************
-#define VERBOSE_DBG 1
+//#define LOG_GENERAL (1U << 0) //defined in logmacro.h already
+#define LOG_DEBUG (1U << 1)
-#define DBG_LOG(N,M,A) \
- do { \
- if(VERBOSE_DBG>=N) \
- { \
- if( M ) \
- logerror("%11.6f: %-24s",machine().time().as_double(),(char*)M ); \
- logerror A; \
- } \
- } while (0)
+//#define VERBOSE (LOG_DEBUG)
+//#define LOG_OUTPUT_FUNC printf
+#include "logmacro.h"
+
+#define LOGDBG(...) LOGMASKED(LOG_DEBUG, __VA_ARGS__)
//**************************************************************************
@@ -92,20 +89,21 @@ READ8_MEMBER(p1_hdc_device::p1_HDC_r)
switch (offset >> 8)
{
case 8:
- data = m_hdc->read(space, offset & 255);
+ data = m_hdc->read(offset & 255);
}
- DBG_LOG(1, "hdc", ("R $%04x == $%02x\n", offset, data));
+ LOG("hdc R $%04x == $%02x\n", offset, data);
return data;
}
WRITE8_MEMBER(p1_hdc_device::p1_HDC_w)
{
- DBG_LOG(1, "hdc", ("W $%04x <- $%02x\n", offset, data));
+ LOG("hdc W $%04x <- $%02x\n", offset, data);
+
switch (offset >> 8)
{
case 8:
- m_hdc->write(space, offset & 255, data, 0);
+ m_hdc->write(offset & 255, data);
}
}
diff --git a/src/devices/bus/isa/p1_sound.cpp b/src/devices/bus/isa/p1_sound.cpp
index 485dca5205e..b8e37a57368 100644
--- a/src/devices/bus/isa/p1_sound.cpp
+++ b/src/devices/bus/isa/p1_sound.cpp
@@ -29,15 +29,15 @@ DEFINE_DEVICE_TYPE(P1_SOUND, p1_sound_device, "p1_sound", "Poisk-1 sound card (B
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(p1_sound_device::device_add_mconfig)
+void p1_sound_device::device_add_mconfig(machine_config &config)
+{
I8251(config, m_midi, 0);
m_midi->txd_handler().set("mdout", FUNC(midi_port_device::write_txd));
m_midi->rxrdy_handler().set(":isa", FUNC(isa8_device::irq3_w));
- MCFG_MIDI_PORT_ADD("mdin", midiin_slot, "midiin")
- MCFG_MIDI_RX_HANDLER(WRITELINE("midi", i8251_device, write_rxd))
+ MIDI_PORT(config, "mdin", midiin_slot, "midiin").rxd_handler().set(m_midi, FUNC(i8251_device::write_rxd));
- MCFG_MIDI_PORT_ADD("mdout", midiout_slot, "midiout")
+ MIDI_PORT(config, "mdout", midiout_slot, "midiout");
PIT8253(config, m_d14, 0);
m_d14->set_clk<0>(XTAL(12'500'000)/10);
@@ -65,12 +65,12 @@ MACHINE_CONFIG_START(p1_sound_device::device_add_mconfig)
// m_d17->out_handler<2>().set(FUNC(XXX));
SPEAKER(config, "speaker").front_center();
- MCFG_DEVICE_ADD("filter", FILTER_RC)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.0)
- MCFG_DEVICE_ADD("dac", DAC_8BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "filter", 0.5) // unknown DAC
- MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
- MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT)
-MACHINE_CONFIG_END
+ FILTER_RC(config, m_filter).add_route(ALL_OUTPUTS, "speaker", 1.0);
+ DAC_8BIT_R2R(config, m_dac, 0).add_route(ALL_OUTPUTS, "filter", 0.5); // unknown DAC
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
+ vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
+ vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
+}
//**************************************************************************
diff --git a/src/devices/bus/isa/pc1640_iga.cpp b/src/devices/bus/isa/pc1640_iga.cpp
index 04ef54c2d42..dfab59f2e76 100644
--- a/src/devices/bus/isa/pc1640_iga.cpp
+++ b/src/devices/bus/isa/pc1640_iga.cpp
@@ -28,8 +28,6 @@
//**************************************************************************
#define PEGA1A_TAG "ic910"
-#define EGA_CRTC_NAME "crtc_ega_ega"
-
//**************************************************************************
@@ -103,8 +101,6 @@ void isa8_pc1640_iga_device::device_start()
m_plane[2] = m_videoram + 0x20000;
m_plane[3] = m_videoram + 0x30000;
- m_crtc_ega = subdevice<crtc_ega_device>(EGA_CRTC_NAME);
-
m_isa->install_rom(this, 0xc0000, 0xc7fff, "ega", "iga");
m_isa->install_device(0x3b0, 0x3bf, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3b0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3b0_w), this));
m_isa->install_device(0x3c0, 0x3cf, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3c0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3c0_w), this));
diff --git a/src/devices/bus/isa/pds.cpp b/src/devices/bus/isa/pds.cpp
index 45dffd9904e..65a35db2b14 100644
--- a/src/devices/bus/isa/pds.cpp
+++ b/src/devices/bus/isa/pds.cpp
@@ -56,6 +56,7 @@ void isa8_pds_device::device_stop()
{
}
-MACHINE_CONFIG_START(isa8_pds_device::device_add_mconfig)
- MCFG_DEVICE_ADD("pds_ppi", I8255, 0)
-MACHINE_CONFIG_END
+void isa8_pds_device::device_add_mconfig(machine_config &config)
+{
+ I8255(config, m_ppi);
+}
diff --git a/src/devices/bus/isa/pgc.cpp b/src/devices/bus/isa/pgc.cpp
index ab242877e01..d90badaeae7 100644
--- a/src/devices/bus/isa/pgc.cpp
+++ b/src/devices/bus/isa/pgc.cpp
@@ -151,30 +151,31 @@ DEFINE_DEVICE_TYPE(ISA8_PGC, isa8_pgc_device, "isa_ibm_pgc", "IBM Professional G
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa8_pgc_device::device_add_mconfig)
- MCFG_DEVICE_ADD("maincpu", I8088, XTAL(24'000'000)/3)
- MCFG_DEVICE_PROGRAM_MAP(pgc_map)
+void isa8_pgc_device::device_add_mconfig(machine_config &config)
+{
+ I8088(config, m_cpu, XTAL(24'000'000)/3);
+ m_cpu->set_addrmap(AS_PROGRAM, &isa8_pgc_device::pgc_map);
#if 0
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(isa8_pgc_device, irq_callback)
+ m_cpu->set_irq_acknowledge_callback(FUNC(isa8_pgc_device::irq_callback));
#endif
- MCFG_TIMER_DRIVER_ADD_PERIODIC("scantimer", isa8_pgc_device, scanline_callback,
- attotime::from_hz(60*PGC_TOTAL_VERT))
- MCFG_TIMER_START_DELAY(attotime::from_hz(XTAL(50'000'000)/(2*PGC_HORZ_START)))
+ timer_device &scantimer(TIMER(config, "scantimer"));
+ scantimer.configure_periodic(FUNC(isa8_pgc_device::scanline_callback), attotime::from_hz(60*PGC_TOTAL_VERT));
+ scantimer.set_start_delay(attotime::from_hz(XTAL(50'000'000)/(2*PGC_HORZ_START)));
- MCFG_SCREEN_ADD(PGC_SCREEN_NAME, RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(50'000'000)/2,
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(XTAL(50'000'000)/2,
PGC_TOTAL_HORZ, PGC_HORZ_START, PGC_HORZ_START+PGC_DISP_HORZ,
- PGC_TOTAL_VERT, PGC_VERT_START, PGC_VERT_START+PGC_DISP_VERT)
- MCFG_SCREEN_UPDATE_DRIVER(isa8_pgc_device, screen_update)
- MCFG_SCREEN_PALETTE("palette")
+ PGC_TOTAL_VERT, PGC_VERT_START, PGC_VERT_START+PGC_DISP_VERT);
+ m_screen->set_screen_update(FUNC(isa8_pgc_device::screen_update));
+ m_screen->set_palette(m_palette);
#if 0
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, isa8_pgc_device, vblank_irq))
+ m_screen->screen_vblank().set(FUNC(isa8_pgc_device::vblank_irq));
#endif
- MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_pgc)
- MCFG_PALETTE_ADD( "palette", 256 )
-MACHINE_CONFIG_END
+ GFXDECODE(config, "gfxdecode", m_palette, gfx_pgc);
+ PALETTE(config, m_palette).set_entries(256);
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/isa/sb16.cpp b/src/devices/bus/isa/sb16.cpp
index be8cce9c644..6bce4b4198c 100644
--- a/src/devices/bus/isa/sb16.cpp
+++ b/src/devices/bus/isa/sb16.cpp
@@ -711,9 +711,9 @@ void sb16_lle_device::device_start()
m_isa->install_device(0x022c, 0x022d, read8_delegate(FUNC(sb16_lle_device::dsp_wbuf_status_r), this), write8_delegate(FUNC(sb16_lle_device::host_cmd_w), this) );
m_isa->install_device(0x022e, 0x022f, read8_delegate(FUNC(sb16_lle_device::dsp_rbuf_status_r), this), write8_delegate(FUNC(sb16_lle_device::invalid_w), this) );
m_isa->install_device(0x0330, 0x0331, read8_delegate(FUNC(sb16_lle_device::mpu401_r), this), write8_delegate(FUNC(sb16_lle_device::mpu401_w), this));
- m_isa->install_device(0x0388, 0x0389, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262));
- m_isa->install_device(0x0220, 0x0223, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262));
- m_isa->install_device(0x0228, 0x0229, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262));
+ m_isa->install_device(0x0388, 0x0389, read8sm_delegate(FUNC(ymf262_device::read), ymf262), write8sm_delegate(FUNC(ymf262_device::write), ymf262));
+ m_isa->install_device(0x0220, 0x0223, read8sm_delegate(FUNC(ymf262_device::read), ymf262), write8sm_delegate(FUNC(ymf262_device::write), ymf262));
+ m_isa->install_device(0x0228, 0x0229, read8sm_delegate(FUNC(ymf262_device::read), ymf262), write8sm_delegate(FUNC(ymf262_device::write), ymf262));
m_isa->set_dma_channel(1, this, false);
m_isa->set_dma_channel(5, this, false);
m_timer = timer_alloc();
diff --git a/src/devices/bus/isa/sblaster.cpp b/src/devices/bus/isa/sblaster.cpp
index 74f1e0f8dd4..d8a47349918 100644
--- a/src/devices/bus/isa/sblaster.cpp
+++ b/src/devices/bus/isa/sblaster.cpp
@@ -66,7 +66,7 @@ static const int m_cmd_fifo_length[256] =
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 6x */
-1, -1, -1, -1, 3, 3, 3, 3, -1, -1, -1, -1, -1, 1, -1, 1, /* 7x */
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 8x */
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 9x */
+ 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 9x */
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* Ax */
4, -1, -1, -1, -1, -1, 4, -1, 4, -1, -1, -1, -1, -1, 4, -1, /* Bx */
4, -1, -1, -1, -1, -1, 4, -1, 4, -1, -1, -1, -1, -1, 4, -1, /* Cx */
@@ -82,7 +82,7 @@ READ8_MEMBER( sb8_device::ym3812_16_r )
uint8_t retVal = 0xff;
switch(offset)
{
- case 0 : retVal = m_ym3812->status_port_r( space, offset ); break;
+ case 0 : retVal = m_ym3812->status_port_r(); break;
}
return retVal;
}
@@ -91,8 +91,8 @@ WRITE8_MEMBER( sb8_device::ym3812_16_w )
{
switch(offset)
{
- case 0 : m_ym3812->control_port_w( space, offset, data ); break;
- case 1 : m_ym3812->write_port_w( space, offset, data ); break;
+ case 0 : m_ym3812->control_port_w(data); break;
+ case 1 : m_ym3812->write_port_w(data); break;
}
}
@@ -356,6 +356,7 @@ void sb_device::process_fifo(uint8_t cmd)
break;
case 0x1c: // 8-bit DMA with autoinit
+ case 0x90: // 8-bit DMA with autoinit, high speed. XXX only on DSP 3.xx
// printf("Start DMA (autoinit, size = %x)\n", m_dsp.dma_length);
m_dsp.dma_transferred = 0;
m_dsp.dma_autoinit = 1;
@@ -583,23 +584,20 @@ void sb_device::process_fifo(uint8_t cmd)
mode = m_dsp.fifo[1];
m_dsp.flags = 0;
m_dsp.dma_length = (m_dsp.fifo[2] + (m_dsp.fifo[3]<<8)) + 1;
- if((cmd & 0xf0) == 0xb0)
- {
- m_dsp.flags |= SIXTEENBIT;
- m_dsp.dma_length <<= 1;
- drq16_w(1);
- }
- else
- drq_w(1);
if(cmd & 0x04)
m_dsp.dma_autoinit = 1;
if(mode & 0x10)
m_dsp.flags |= SIGNED;
if(mode & 0x20)
- {
m_dsp.flags |= STEREO;
+ if((cmd & 0xf0) == 0xb0)
+ {
+ m_dsp.flags |= SIXTEENBIT;
m_dsp.dma_length <<= 1;
+ drq16_w(1);
}
+ else
+ drq_w(1);
m_dsp.dma_transferred = 0;
m_dsp.dma_timer_started = false;
m_dsp.dma_throttled = false;
@@ -1149,7 +1147,6 @@ void sb_device::common(machine_config &config)
DAC_16BIT_R2R(config, m_ldac, 0).add_route(ALL_OUTPUTS, "lspeaker", 0.5); // unknown DAC
DAC_16BIT_R2R(config, m_rdac, 0).add_route(ALL_OUTPUTS, "rspeaker", 0.5); // unknown DAC
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
- vref.set_output(5.0);
vref.add_route(0, "ldac", 1.0, DAC_VREF_POS_INPUT);
vref.add_route(0, "ldac", -1.0, DAC_VREF_NEG_INPUT);
vref.add_route(0, "rdac", 1.0, DAC_VREF_POS_INPUT);
@@ -1263,9 +1260,9 @@ void sb8_device::device_start()
{
ymf262_device *ymf262 = subdevice<ymf262_device>("ymf262");
- m_isa->install_device(0x0388, 0x038b, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262));
- m_isa->install_device(0x0220, 0x0223, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262));
- m_isa->install_device(0x0228, 0x0229, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262));
+ m_isa->install_device(0x0388, 0x038b, read8sm_delegate(FUNC(ymf262_device::read), ymf262), write8sm_delegate(FUNC(ymf262_device::write), ymf262));
+ m_isa->install_device(0x0220, 0x0223, read8sm_delegate(FUNC(ymf262_device::read), ymf262), write8sm_delegate(FUNC(ymf262_device::write), ymf262));
+ m_isa->install_device(0x0228, 0x0229, read8sm_delegate(FUNC(ymf262_device::read), ymf262), write8sm_delegate(FUNC(ymf262_device::write), ymf262));
}
else
{
@@ -1306,9 +1303,9 @@ void sb16_device::device_start()
m_isa->install_device(0x022e, 0x022f, read8_delegate(FUNC(sb_device::dsp_rbuf_status_r), this), write8_delegate(FUNC(sb_device::dsp_rbuf_status_w), this) );
m_isa->install_device(0x0224, 0x0225, read8_delegate(FUNC(sb16_device::mixer_r), this), write8_delegate(FUNC(sb16_device::mixer_w), this));
m_isa->install_device(0x0330, 0x0331, read8_delegate(FUNC(sb16_device::mpu401_r), this), write8_delegate(FUNC(sb16_device::mpu401_w), this));
- m_isa->install_device(0x0388, 0x038b, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262));
- m_isa->install_device(0x0220, 0x0223, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262));
- m_isa->install_device(0x0228, 0x0229, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262));
+ m_isa->install_device(0x0388, 0x038b, read8sm_delegate(FUNC(ymf262_device::read), ymf262), write8sm_delegate(FUNC(ymf262_device::write), ymf262));
+ m_isa->install_device(0x0220, 0x0223, read8sm_delegate(FUNC(ymf262_device::read), ymf262), write8sm_delegate(FUNC(ymf262_device::write), ymf262));
+ m_isa->install_device(0x0228, 0x0229, read8sm_delegate(FUNC(ymf262_device::read), ymf262), write8sm_delegate(FUNC(ymf262_device::write), ymf262));
save_item(NAME(m_mixer.data));
save_item(NAME(m_mixer.status));
diff --git a/src/devices/bus/isa/sc499.cpp b/src/devices/bus/isa/sc499.cpp
index e9ace1ddb83..92f049f0402 100644
--- a/src/devices/bus/isa/sc499.cpp
+++ b/src/devices/bus/isa/sc499.cpp
@@ -177,9 +177,10 @@ static INPUT_PORTS_START( sc499_port )
INPUT_PORTS_END
-MACHINE_CONFIG_START(sc499_device::device_add_mconfig)
- MCFG_DEVICE_ADD(SC499_CTAPE_TAG, SC499_CTAPE, 0)
-MACHINE_CONFIG_END
+void sc499_device::device_add_mconfig(machine_config &config)
+{
+ SC499_CTAPE(config, m_image, 0);
+}
//**************************************************************************
diff --git a/src/devices/bus/isa/ssi2001.cpp b/src/devices/bus/isa/ssi2001.cpp
index 55adf04b0a2..2c433321847 100644
--- a/src/devices/bus/isa/ssi2001.cpp
+++ b/src/devices/bus/isa/ssi2001.cpp
@@ -30,7 +30,7 @@ void ssi2001_device::device_start()
{
set_isa_device();
m_isa->install_device(0x0200, 0x0207, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice<pc_joy_device>("pc_joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice<pc_joy_device>("pc_joy")));
- m_isa->install_device(0x0280, 0x029F, read8_delegate(FUNC(mos6581_device::read), subdevice<mos6581_device>("sid6581")), write8_delegate(FUNC(mos6581_device::write), subdevice<mos6581_device>("sid6581")));
+ m_isa->install_device(0x0280, 0x029F, read8sm_delegate(FUNC(mos6581_device::read), subdevice<mos6581_device>("sid6581")), write8sm_delegate(FUNC(mos6581_device::write), subdevice<mos6581_device>("sid6581")));
}
diff --git a/src/devices/bus/isa/stereo_fx.cpp b/src/devices/bus/isa/stereo_fx.cpp
index c38d3aace80..b23a0dbe454 100644
--- a/src/devices/bus/isa/stereo_fx.cpp
+++ b/src/devices/bus/isa/stereo_fx.cpp
@@ -134,7 +134,6 @@ void stereo_fx_device::device_add_mconfig(machine_config &config)
DAC_8BIT_R2R(config, "ldac", 0).add_route(ALL_OUTPUTS, "lspeaker", 0.5); // unknown DAC
DAC_8BIT_R2R(config, "rdac", 0).add_route(ALL_OUTPUTS, "rspeaker", 0.5); // unknown DAC
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
- vref.set_output(5.0);
vref.add_route(0, "ldac", 1.0, DAC_VREF_POS_INPUT);
vref.add_route(0, "ldac", -1.0, DAC_VREF_NEG_INPUT);
vref.add_route(0, "rdac", 1.0, DAC_VREF_POS_INPUT);
@@ -216,8 +215,8 @@ void stereo_fx_device::device_start()
m_isa->install_device(0x022a, 0x022b, read8_delegate(FUNC(stereo_fx_device::dsp_data_r), this), write8_delegate(FUNC(stereo_fx_device::invalid_w), this) );
m_isa->install_device(0x022c, 0x022d, read8_delegate(FUNC(stereo_fx_device::dsp_wbuf_status_r), this), write8_delegate(FUNC(stereo_fx_device::dsp_cmd_w), this) );
m_isa->install_device(0x022e, 0x022f, read8_delegate(FUNC(stereo_fx_device::dsp_rbuf_status_r), this), write8_delegate(FUNC(stereo_fx_device::invalid_w), this) );
- m_isa->install_device(0x0388, 0x0389, read8_delegate(FUNC(ym3812_device::read), ym3812), write8_delegate(FUNC(ym3812_device::write), ym3812));
- m_isa->install_device(0x0228, 0x0229, read8_delegate(FUNC(ym3812_device::read), ym3812), write8_delegate(FUNC(ym3812_device::write), ym3812));
+ m_isa->install_device(0x0388, 0x0389, read8sm_delegate(FUNC(ym3812_device::read), ym3812), write8sm_delegate(FUNC(ym3812_device::write), ym3812));
+ m_isa->install_device(0x0228, 0x0229, read8sm_delegate(FUNC(ym3812_device::read), ym3812), write8sm_delegate(FUNC(ym3812_device::write), ym3812));
m_timer = timer_alloc();
m_timer->adjust(attotime::from_hz(2000000), 0, attotime::from_hz(2000000));
m_isa->set_dma_channel(1, this, false);
diff --git a/src/devices/bus/isa/svga_cirrus.cpp b/src/devices/bus/isa/svga_cirrus.cpp
index 444acac7c1a..bcb6b4995a1 100644
--- a/src/devices/bus/isa/svga_cirrus.cpp
+++ b/src/devices/bus/isa/svga_cirrus.cpp
@@ -30,14 +30,14 @@ DEFINE_DEVICE_TYPE(ISA16_SVGA_CIRRUS_GD542X, isa16_svga_cirrus_gd542x_device, "c
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa16_svga_cirrus_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
- MCFG_SCREEN_UPDATE_DEVICE("vga", cirrus_gd5430_device, screen_update)
+void isa16_svga_cirrus_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
+ screen.set_screen_update("vga", FUNC(cirrus_gd5430_device::screen_update));
- MCFG_DEVICE_ADD("vga", CIRRUS_GD5430, 0)
- MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
+ CIRRUS_GD5430(config, "vga", 0).set_screen("screen");
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
@@ -110,14 +110,14 @@ ROM_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa16_svga_cirrus_gd542x_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
- MCFG_SCREEN_UPDATE_DEVICE("vga", cirrus_gd5428_device, screen_update)
+void isa16_svga_cirrus_gd542x_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
+ screen.set_screen_update("vga", FUNC(cirrus_gd5428_device::screen_update));
- MCFG_DEVICE_ADD("vga", CIRRUS_GD5428, 0)
- MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
+ CIRRUS_GD5428(config, "vga", 0).set_screen("screen");
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/isa/svga_s3.cpp b/src/devices/bus/isa/svga_s3.cpp
index 1c97abc3b62..d5a2cde30bf 100644
--- a/src/devices/bus/isa/svga_s3.cpp
+++ b/src/devices/bus/isa/svga_s3.cpp
@@ -40,14 +40,14 @@ DEFINE_DEVICE_TYPE(ISA16_SVGA_S3, isa16_svga_s3_device, "s3_764", "Number Nine 9
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa16_svga_s3_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
- MCFG_SCREEN_UPDATE_DEVICE("vga", s3_vga_device, screen_update)
+void isa16_svga_s3_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
+ screen.set_screen_update("vga", FUNC(s3_vga_device::screen_update));
- MCFG_DEVICE_ADD("vga", S3_VGA, 0)
- MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
+ S3_VGA(config, "vga", 0).set_screen("screen");
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
@@ -146,14 +146,14 @@ DEFINE_DEVICE_TYPE(ISA16_S3VIRGE, isa16_s3virge_device, "s3virge", "S3 ViRGE Gra
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa16_s3virge_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
- MCFG_SCREEN_UPDATE_DEVICE("vga", s3virge_vga_device, screen_update)
+void isa16_s3virge_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
+ screen.set_screen_update("vga", FUNC(s3virge_vga_device::screen_update));
- MCFG_DEVICE_ADD("vga", S3VIRGE, 0)
- MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
+ S3VIRGE(config, "vga", 0).set_screen("screen");
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
@@ -227,14 +227,14 @@ DEFINE_DEVICE_TYPE(ISA16_S3VIRGEDX, isa16_s3virgedx_device, "s3virgedx", "S3 ViR
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa16_s3virgedx_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
- MCFG_SCREEN_UPDATE_DEVICE("vga", s3virgedx_vga_device, screen_update)
+void isa16_s3virgedx_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
+ screen.set_screen_update("vga", FUNC(s3virgedx_vga_device::screen_update));
- MCFG_DEVICE_ADD("vga", S3VIRGEDX, 0)
- MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
+ S3VIRGEDX(config, "vga", 0).set_screen("screen");
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
@@ -309,14 +309,14 @@ DEFINE_DEVICE_TYPE(ISA16_DMS3D2KPRO, isa16_stealth3d2kpro_device, "dms3d2kp", "D
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa16_stealth3d2kpro_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
- MCFG_SCREEN_UPDATE_DEVICE("vga", s3virgedx_rev1_vga_device, screen_update)
+void isa16_stealth3d2kpro_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
+ screen.set_screen_update("vga", FUNC(s3virgedx_rev1_vga_device::screen_update));
- MCFG_DEVICE_ADD("vga", S3VIRGEDX1, 0)
- MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
+ S3VIRGEDX1(config, "vga", 0).set_screen("screen");
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/isa/svga_trident.cpp b/src/devices/bus/isa/svga_trident.cpp
index 79aa1dfd55f..aa7fc90b489 100644
--- a/src/devices/bus/isa/svga_trident.cpp
+++ b/src/devices/bus/isa/svga_trident.cpp
@@ -30,14 +30,14 @@ DEFINE_DEVICE_TYPE(ISA16_SVGA_TGUI9680, isa16_svga_tgui9680_device, "tgui9680",
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa16_svga_tgui9680_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
- MCFG_SCREEN_UPDATE_DEVICE("vga", trident_vga_device, screen_update)
-
- MCFG_DEVICE_ADD("vga", TRIDENT_VGA, 0)
- MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
+void isa16_svga_tgui9680_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
+ screen.set_screen_update("vga", FUNC(trident_vga_device::screen_update));
+
+ TRIDENT_VGA(config, "vga", 0).set_screen("screen");
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/isa/svga_tseng.cpp b/src/devices/bus/isa/svga_tseng.cpp
index fd232b01d8d..dfe39a39d8e 100644
--- a/src/devices/bus/isa/svga_tseng.cpp
+++ b/src/devices/bus/isa/svga_tseng.cpp
@@ -29,14 +29,14 @@ DEFINE_DEVICE_TYPE(ISA8_SVGA_ET4K, isa8_svga_et4k_device, "et4000", "SVGA Tseng
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa8_svga_et4k_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
- MCFG_SCREEN_UPDATE_DEVICE("vga", tseng_vga_device, screen_update)
-
- MCFG_DEVICE_ADD("vga", TSENG_VGA, 0)
- MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
+void isa8_svga_et4k_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
+ screen.set_screen_update("vga", FUNC(tseng_vga_device::screen_update));
+
+ TSENG_VGA(config, "vga", 0).set_screen("screen");
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/isa/vga.cpp b/src/devices/bus/isa/vga.cpp
index b8a86adbfe3..0419ecdd255 100644
--- a/src/devices/bus/isa/vga.cpp
+++ b/src/devices/bus/isa/vga.cpp
@@ -27,14 +27,14 @@ DEFINE_DEVICE_TYPE(ISA8_VGA, isa8_vga_device, "ibm_vga", "IBM VGA Graphics Card"
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa8_vga_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
- MCFG_SCREEN_UPDATE_DEVICE("vga", vga_device, screen_update)
-
- MCFG_DEVICE_ADD("vga", VGA, 0)
- MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
+void isa8_vga_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
+ screen.set_screen_update("vga", FUNC(vga_device::screen_update));
+
+ VGA(config, "vga", 0).set_screen("screen");
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/isa/vga_ati.cpp b/src/devices/bus/isa/vga_ati.cpp
index 650a686d4fc..bad1a47a479 100644
--- a/src/devices/bus/isa/vga_ati.cpp
+++ b/src/devices/bus/isa/vga_ati.cpp
@@ -76,32 +76,33 @@ DEFINE_DEVICE_TYPE(ISA16_SVGA_MACH64, isa16_vga_mach64_device, "mach64
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa16_vga_gfxultra_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
- MCFG_SCREEN_UPDATE_DEVICE("vga", ati_vga_device, screen_update)
-
- MCFG_DEVICE_ADD("vga", ATI_VGA, 0)
- MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(isa16_vga_gfxultrapro_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
- MCFG_SCREEN_UPDATE_DEVICE("vga", mach32_device, screen_update)
-
- MCFG_DEVICE_ADD("vga", ATIMACH32, 0)
- MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(isa16_vga_mach64_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
- MCFG_SCREEN_UPDATE_DEVICE("vga", mach64_device, screen_update)
-
- MCFG_DEVICE_ADD("vga", ATIMACH64, 0)
- MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
+void isa16_vga_gfxultra_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
+ screen.set_screen_update("vga", FUNC(ati_vga_device::screen_update));
+
+ ATI_VGA(config, "vga", 0).set_screen("screen");
+}
+
+void isa16_vga_gfxultrapro_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
+ screen.set_screen_update("vga", FUNC(mach32_device::screen_update));
+
+ ATIMACH32(config, "vga", 0).set_screen("screen");
+}
+
+void isa16_vga_mach64_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
+ screen.set_screen_update("vga", FUNC(mach64_device::screen_update));
+
+ ATIMACH64(config, "vga", 0).set_screen("screen");
+}
+
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/isa/wd1007a.cpp b/src/devices/bus/isa/wd1007a.cpp
index 3db2db1d776..22d9863e392 100644
--- a/src/devices/bus/isa/wd1007a.cpp
+++ b/src/devices/bus/isa/wd1007a.cpp
@@ -45,9 +45,10 @@ wd1007a_device::wd1007a_device(const machine_config &mconfig, const char *tag, d
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(wd1007a_device::device_add_mconfig)
- MCFG_DEVICE_ADD("mcu", AM8753, 10_MHz_XTAL)
-MACHINE_CONFIG_END
+void wd1007a_device::device_add_mconfig(machine_config &config)
+{
+ AM8753(config, "mcu", 10_MHz_XTAL);
+}
//-------------------------------------------------
diff --git a/src/devices/bus/isa/wdxt_gen.cpp b/src/devices/bus/isa/wdxt_gen.cpp
index 690bc161f7f..57dec00af89 100644
--- a/src/devices/bus/isa/wdxt_gen.cpp
+++ b/src/devices/bus/isa/wdxt_gen.cpp
@@ -237,6 +237,16 @@ void wdxt_gen_device::dack_w(int line, uint8_t data)
//-------------------------------------------------
+// dack_line_w -
+//-------------------------------------------------
+
+void wdxt_gen_device::dack_line_w(int line, int state)
+{
+ m_host->dack3_w(state);
+}
+
+
+//-------------------------------------------------
// wd1015_t1_r -
//-------------------------------------------------
diff --git a/src/devices/bus/isa/wdxt_gen.h b/src/devices/bus/isa/wdxt_gen.h
index 89d3aa5774f..d909b7bd155 100644
--- a/src/devices/bus/isa/wdxt_gen.h
+++ b/src/devices/bus/isa/wdxt_gen.h
@@ -52,6 +52,7 @@ protected:
// device_isa8_card_interface
virtual uint8_t dack_r(int line) override;
virtual void dack_w(int line, uint8_t data) override;
+ virtual void dack_line_w(int line, int state) override;
private:
DECLARE_WRITE_LINE_MEMBER( irq5_w );
diff --git a/src/devices/bus/isbx/compis_fdc.cpp b/src/devices/bus/isbx/compis_fdc.cpp
index e1d464a37c2..fea0e7f59b5 100644
--- a/src/devices/bus/isbx/compis_fdc.cpp
+++ b/src/devices/bus/isbx/compis_fdc.cpp
@@ -106,14 +106,14 @@ void compis_fdc_device::device_reset()
// mcs0_r - chip select 0 read
//-------------------------------------------------
-uint8_t compis_fdc_device::mcs0_r(address_space &space, offs_t offset)
+uint8_t compis_fdc_device::mcs0_r(offs_t offset)
{
uint8_t data = 0xff;
switch (BIT(offset, 0))
{
- case 0: data = m_fdc->msr_r(space, 0); break;
- case 1: data = m_fdc->fifo_r(space, 0); break;
+ case 0: data = m_fdc->msr_r(); break;
+ case 1: data = m_fdc->fifo_r(); break;
}
return data;
@@ -124,11 +124,11 @@ uint8_t compis_fdc_device::mcs0_r(address_space &space, offs_t offset)
// mcs0_w - chip select 0 write
//-------------------------------------------------
-void compis_fdc_device::mcs0_w(address_space &space, offs_t offset, uint8_t data)
+void compis_fdc_device::mcs0_w(offs_t offset, uint8_t data)
{
switch (BIT(offset, 0))
{
- case 1: m_fdc->fifo_w(space, 0, data); break;
+ case 1: m_fdc->fifo_w(data); break;
}
}
@@ -137,7 +137,7 @@ void compis_fdc_device::mcs0_w(address_space &space, offs_t offset, uint8_t data
// mdack_r - DMA acknowledge read
//-------------------------------------------------
-uint8_t compis_fdc_device::mdack_r(address_space &space, offs_t offset)
+uint8_t compis_fdc_device::mdack_r(offs_t offset)
{
return m_fdc->dma_r();
}
@@ -147,7 +147,7 @@ uint8_t compis_fdc_device::mdack_r(address_space &space, offs_t offset)
// mdack_w - DMA acknowledge write
//-------------------------------------------------
-void compis_fdc_device::mdack_w(address_space &space, offs_t offset, uint8_t data)
+void compis_fdc_device::mdack_w(offs_t offset, uint8_t data)
{
m_fdc->dma_w(data);
}
diff --git a/src/devices/bus/isbx/compis_fdc.h b/src/devices/bus/isbx/compis_fdc.h
index 7f33cdd1160..af1d71a3af2 100644
--- a/src/devices/bus/isbx/compis_fdc.h
+++ b/src/devices/bus/isbx/compis_fdc.h
@@ -40,10 +40,10 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_isbx_card_interface overrides
- virtual uint8_t mcs0_r(address_space &space, offs_t offset) override;
- virtual void mcs0_w(address_space &space, offs_t offset, uint8_t data) override;
- virtual uint8_t mdack_r(address_space &space, offs_t offset) override;
- virtual void mdack_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t mcs0_r(offs_t offset) override;
+ virtual void mcs0_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t mdack_r(offs_t offset) override;
+ virtual void mdack_w(offs_t offset, uint8_t data) override;
virtual void opt0_w(int state) override;
virtual void opt1_w(int state) override;
diff --git a/src/devices/bus/isbx/isbc_218a.cpp b/src/devices/bus/isbx/isbc_218a.cpp
index 9b142fa95ae..0a1cff5f235 100644
--- a/src/devices/bus/isbx/isbc_218a.cpp
+++ b/src/devices/bus/isbx/isbc_218a.cpp
@@ -111,14 +111,14 @@ void isbc_218a_device::device_reset()
// mcs0_r - chip select 0 read
//-------------------------------------------------
-uint8_t isbc_218a_device::mcs0_r(address_space &space, offs_t offset)
+uint8_t isbc_218a_device::mcs0_r(offs_t offset)
{
uint8_t data = 0xff;
switch (BIT(offset, 0))
{
- case 0: data = m_fdc->msr_r(space, 0); break;
- case 1: data = m_fdc->fifo_r(space, 0); break;
+ case 0: data = m_fdc->msr_r(); break;
+ case 1: data = m_fdc->fifo_r(); break;
}
return data;
@@ -129,11 +129,11 @@ uint8_t isbc_218a_device::mcs0_r(address_space &space, offs_t offset)
// mcs0_w - chip select 0 write
//-------------------------------------------------
-void isbc_218a_device::mcs0_w(address_space &space, offs_t offset, uint8_t data)
+void isbc_218a_device::mcs0_w(offs_t offset, uint8_t data)
{
switch (BIT(offset, 0))
{
- case 1: m_fdc->fifo_w(space, 0, data); break;
+ case 1: m_fdc->fifo_w(data); break;
}
}
@@ -142,7 +142,7 @@ void isbc_218a_device::mcs0_w(address_space &space, offs_t offset, uint8_t data)
// mcs1_r - chip select 1 read
//-------------------------------------------------
-uint8_t isbc_218a_device::mcs1_r(address_space &space, offs_t offset)
+uint8_t isbc_218a_device::mcs1_r(offs_t offset)
{
uint8_t data = 0xff;
@@ -159,7 +159,7 @@ uint8_t isbc_218a_device::mcs1_r(address_space &space, offs_t offset)
// mcs1_w - chip select 1 write
//-------------------------------------------------
-void isbc_218a_device::mcs1_w(address_space &space, offs_t offset, uint8_t data)
+void isbc_218a_device::mcs1_w(offs_t offset, uint8_t data)
{
switch (offset)
{
@@ -182,7 +182,7 @@ void isbc_218a_device::mcs1_w(address_space &space, offs_t offset, uint8_t data)
// mdack_r - DMA acknowledge read
//-------------------------------------------------
-uint8_t isbc_218a_device::mdack_r(address_space &space, offs_t offset)
+uint8_t isbc_218a_device::mdack_r(offs_t offset)
{
return m_fdc->dma_r();
}
@@ -192,7 +192,7 @@ uint8_t isbc_218a_device::mdack_r(address_space &space, offs_t offset)
// mdack_w - DMA acknowledge write
//-------------------------------------------------
-void isbc_218a_device::mdack_w(address_space &space, offs_t offset, uint8_t data)
+void isbc_218a_device::mdack_w(offs_t offset, uint8_t data)
{
m_fdc->dma_w(data);
}
diff --git a/src/devices/bus/isbx/isbc_218a.h b/src/devices/bus/isbx/isbc_218a.h
index 5d0a617e989..bdf37c52806 100644
--- a/src/devices/bus/isbx/isbc_218a.h
+++ b/src/devices/bus/isbx/isbc_218a.h
@@ -40,12 +40,12 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_isbx_card_interface overrides
- virtual uint8_t mcs0_r(address_space &space, offs_t offset) override;
- virtual void mcs0_w(address_space &space, offs_t offset, uint8_t data) override;
- virtual uint8_t mcs1_r(address_space &space, offs_t offset) override;
- virtual void mcs1_w(address_space &space, offs_t offset, uint8_t data) override;
- virtual uint8_t mdack_r(address_space &space, offs_t offset) override;
- virtual void mdack_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t mcs0_r(offs_t offset) override;
+ virtual void mcs0_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t mcs1_r(offs_t offset) override;
+ virtual void mcs1_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t mdack_r(offs_t offset) override;
+ virtual void mdack_w(offs_t offset, uint8_t data) override;
virtual void opt0_w(int state) override;
private:
diff --git a/src/devices/bus/isbx/isbx.h b/src/devices/bus/isbx/isbx.h
index d62d9515fe1..0535e461cd7 100644
--- a/src/devices/bus/isbx/isbx.h
+++ b/src/devices/bus/isbx/isbx.h
@@ -47,12 +47,12 @@ class isbx_slot_device;
class device_isbx_card_interface : public device_slot_card_interface
{
public:
- virtual uint8_t mcs0_r(address_space &space, offs_t offset) { return 0xff; }
- virtual void mcs0_w(address_space &space, offs_t offset, uint8_t data) { }
- virtual uint8_t mcs1_r(address_space &space, offs_t offset) { return 0xff; }
- virtual void mcs1_w(address_space &space, offs_t offset, uint8_t data) { }
- virtual uint8_t mdack_r(address_space &space, offs_t offset) { return 0xff; }
- virtual void mdack_w(address_space &space, offs_t offset, uint8_t data) { }
+ virtual uint8_t mcs0_r(offs_t offset) { return 0xff; }
+ virtual void mcs0_w(offs_t offset, uint8_t data) { }
+ virtual uint8_t mcs1_r(offs_t offset) { return 0xff; }
+ virtual void mcs1_w(offs_t offset, uint8_t data) { }
+ virtual uint8_t mdack_r(offs_t offset) { return 0xff; }
+ virtual void mdack_w(offs_t offset, uint8_t data) { }
virtual int opt0_r() { return 1; }
virtual void opt0_w(int state) { }
virtual int opt1_r() { return 1; }
@@ -92,12 +92,12 @@ public:
auto mwait() { return m_write_mwait.bind(); }
// computer interface
- DECLARE_READ8_MEMBER( mcs0_r ) { return m_card ? m_card->mcs0_r(space, offset) : 0xff; }
- DECLARE_WRITE8_MEMBER( mcs0_w ) { if (m_card) m_card->mcs0_w(space, offset, data); }
- DECLARE_READ8_MEMBER( mcs1_r ) { return m_card ? m_card->mcs1_r(space, offset) : 0xff; }
- DECLARE_WRITE8_MEMBER( mcs1_w ) { if (m_card) m_card->mcs1_w(space, offset, data); }
- DECLARE_READ8_MEMBER( mdack_r ) { return m_card ? m_card->mdack_r(space, offset) : 0xff; }
- DECLARE_WRITE8_MEMBER( mdack_w ) { if (m_card) m_card->mdack_w(space, offset, data); }
+ uint8_t mcs0_r(offs_t offset) { return m_card ? m_card->mcs0_r(offset) : 0xff; }
+ void mcs0_w(offs_t offset, uint8_t data) { if (m_card) m_card->mcs0_w(offset, data); }
+ uint8_t mcs1_r(offs_t offset) { return m_card ? m_card->mcs1_r(offset) : 0xff; }
+ void mcs1_w(offs_t offset, uint8_t data) { if (m_card) m_card->mcs1_w(offset, data); }
+ uint8_t mdack_r(offs_t offset) { return m_card ? m_card->mdack_r(offset) : 0xff; }
+ void mdack_w(offs_t offset, uint8_t data) { if (m_card) m_card->mdack_w(offset, data); }
DECLARE_READ_LINE_MEMBER( mpst_r ) { return m_card == nullptr; }
DECLARE_READ_LINE_MEMBER( opt0_r ) { return m_card ? m_card->opt0_r() : 1; }
DECLARE_WRITE_LINE_MEMBER( opt0_w ) { if (m_card) m_card->opt0_w(state); }
diff --git a/src/devices/bus/jakks_gamekey/rom.cpp b/src/devices/bus/jakks_gamekey/rom.cpp
new file mode 100644
index 00000000000..0ca9b7024d9
--- /dev/null
+++ b/src/devices/bus/jakks_gamekey/rom.cpp
@@ -0,0 +1,111 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+
+#include "emu.h"
+#include "rom.h"
+
+//-------------------------------------------------
+// jakks_gamekey_rom_device - constructor
+//-------------------------------------------------
+
+DEFINE_DEVICE_TYPE(JAKKS_GAMEKEY_ROM_PLAIN, jakks_gamekey_rom_plain_device, "jakks_gamekey_rom_plain", "JAKKS Pacific GameKey")
+DEFINE_DEVICE_TYPE(JAKKS_GAMEKEY_ROM_I2C_BASE, jakks_gamekey_rom_i2c_base_device, "jakks_gamekey_rom_i2c_base", "JAKKS Pacific GameKey with I2C")
+DEFINE_DEVICE_TYPE(JAKKS_GAMEKEY_ROM_I2C_24LC04, jakks_gamekey_rom_i2c_24lc04_device, "jakks_gamekey_rom_i2c_24lc04", "JAKKS Pacific GameKey with I2C 24LC04")
+
+
+jakks_gamekey_rom_plain_device::jakks_gamekey_rom_plain_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
+ device_t(mconfig, type, tag, owner, clock), device_jakks_gamekey_interface(mconfig, *this)
+{
+}
+
+jakks_gamekey_rom_plain_device::jakks_gamekey_rom_plain_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ jakks_gamekey_rom_plain_device(mconfig, JAKKS_GAMEKEY_ROM_PLAIN, tag, owner, clock)
+{
+}
+
+jakks_gamekey_rom_i2c_base_device::jakks_gamekey_rom_i2c_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
+ jakks_gamekey_rom_plain_device(mconfig, type, tag, owner, clock),
+ m_i2cmem(*this, "i2cmem")
+{
+}
+
+jakks_gamekey_rom_i2c_base_device::jakks_gamekey_rom_i2c_base_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ jakks_gamekey_rom_i2c_base_device(mconfig, JAKKS_GAMEKEY_ROM_I2C_BASE, tag, owner, clock)
+{
+}
+
+jakks_gamekey_rom_i2c_24lc04_device::jakks_gamekey_rom_i2c_24lc04_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ jakks_gamekey_rom_i2c_base_device(mconfig, JAKKS_GAMEKEY_ROM_I2C_24LC04, tag, owner, clock)
+{
+}
+
+/*-------------------------------------------------
+ mapper specific handlers
+ -------------------------------------------------*/
+
+// plain
+
+READ16_MEMBER(jakks_gamekey_rom_plain_device::read_cart)
+{
+ return read_rom(space, offset, mem_mask);
+}
+
+READ16_MEMBER(jakks_gamekey_rom_plain_device::read_rom)
+{
+ return m_rom[offset & (m_rom_size-1)];
+}
+
+WRITE16_MEMBER(jakks_gamekey_rom_plain_device::write_cart)
+{
+ write_rom(space, offset, data, mem_mask);
+}
+
+WRITE16_MEMBER(jakks_gamekey_rom_plain_device::write_rom)
+{
+ logerror("jakks_gamekey_rom_plain_device::write_rom %08x %02x\n", offset, data);
+}
+
+// i2c base
+
+WRITE16_MEMBER(jakks_gamekey_rom_i2c_base_device::write_rom)
+{
+ logerror("jakks_gamekey_rom_i2c_base_device::write_rom %08x %02x\n", offset, data);
+}
+
+READ16_MEMBER(jakks_gamekey_rom_i2c_base_device::read_rom)
+{
+ return m_rom[offset & (m_rom_size - 1)];
+}
+
+uint8_t jakks_gamekey_rom_i2c_base_device::read_cart_seeprom(void)
+{
+ logerror("jakks_gamekey_rom_i2c_base_device::read_cart_seeprom\n");
+
+ return m_i2cmem->read_sda();
+}
+
+WRITE16_MEMBER(jakks_gamekey_rom_i2c_base_device::write_cart_seeprom)
+{
+ if (BIT(mem_mask, 1))
+ m_i2cmem->write_scl(BIT(data, 1));
+ if (BIT(mem_mask, 0))
+ m_i2cmem->write_sda(BIT(data, 0));
+}
+
+// i2c 24lc04
+
+void jakks_gamekey_rom_i2c_24lc04_device::device_add_mconfig(machine_config &config)
+{
+ I2CMEM(config, "i2cmem", 0)/*.set_page_size(16)*/.set_data_size(0x200); // 24LC04
+}
+
+
+/*-------------------------------------------------
+ slot interface
+ -------------------------------------------------*/
+
+void jakks_gamekey(device_slot_interface &device)
+{
+ device.option_add_internal("plain", JAKKS_GAMEKEY_ROM_PLAIN);
+ device.option_add_internal("rom_24lc04", JAKKS_GAMEKEY_ROM_I2C_24LC04);
+}
diff --git a/src/devices/bus/jakks_gamekey/rom.h b/src/devices/bus/jakks_gamekey/rom.h
new file mode 100644
index 00000000000..7f85e9f21fb
--- /dev/null
+++ b/src/devices/bus/jakks_gamekey/rom.h
@@ -0,0 +1,77 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+#ifndef MAME_BUS_JAKKS_GAMEKEY_ROM_H
+#define MAME_BUS_JAKKS_GAMEKEY_ROM_H
+
+#pragma once
+
+#include "slot.h"
+#include "machine/i2cmem.h"
+
+// ======================> jakks_gamekey_rom_plain_device
+
+class jakks_gamekey_rom_plain_device : public device_t,
+ public device_jakks_gamekey_interface
+{
+public:
+ // construction/destruction
+ jakks_gamekey_rom_plain_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read_cart) override;
+ virtual DECLARE_WRITE16_MEMBER(write_cart) override;
+
+ virtual uint8_t read_cart_seeprom(void) override { return 1; };
+ virtual DECLARE_WRITE16_MEMBER(write_cart_seeprom) override { };
+
+ virtual READ16_MEMBER(read_rom);
+ virtual WRITE16_MEMBER(write_rom);
+
+protected:
+ jakks_gamekey_rom_plain_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ // device-level overrides
+ virtual void device_start() override { }
+ virtual void device_reset() override { }
+};
+
+// ======================> jakks_gamekey_rom_i2c_base_device
+
+class jakks_gamekey_rom_i2c_base_device : public jakks_gamekey_rom_plain_device
+{
+public:
+ // construction/destruction
+ jakks_gamekey_rom_i2c_base_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ jakks_gamekey_rom_i2c_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ // reading and writing
+ virtual READ16_MEMBER(read_rom) override;
+ virtual WRITE16_MEMBER(write_rom) override;
+
+ optional_device<i2cmem_device> m_i2cmem;
+
+ virtual uint8_t read_cart_seeprom(void) override;
+ virtual DECLARE_WRITE16_MEMBER(write_cart_seeprom) override;
+};
+
+
+// ======================> jakks_gamekey_rom_i2c_24lc04_device
+
+class jakks_gamekey_rom_i2c_24lc04_device : public jakks_gamekey_rom_i2c_base_device
+{
+public:
+ // construction/destruction
+ jakks_gamekey_rom_i2c_24lc04_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+};
+
+// device type definition
+DECLARE_DEVICE_TYPE(JAKKS_GAMEKEY_ROM_PLAIN, jakks_gamekey_rom_plain_device)
+DECLARE_DEVICE_TYPE(JAKKS_GAMEKEY_ROM_I2C_BASE, jakks_gamekey_rom_i2c_base_device)
+DECLARE_DEVICE_TYPE(JAKKS_GAMEKEY_ROM_I2C_24LC04, jakks_gamekey_rom_i2c_24lc04_device)
+
+#endif // MAME_BUS_JAKKS_GAMEKEY_ROM_H
diff --git a/src/devices/bus/jakks_gamekey/slot.cpp b/src/devices/bus/jakks_gamekey/slot.cpp
new file mode 100644
index 00000000000..6a5196875b1
--- /dev/null
+++ b/src/devices/bus/jakks_gamekey/slot.cpp
@@ -0,0 +1,237 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+
+#include "emu.h"
+#include "slot.h"
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(JAKKS_GAMEKEY_SLOT, jakks_gamekey_slot_device, "jakks_gamekey_slot", "JAKKS Pacific Gamekey Slot")
+
+//**************************************************************************
+// JAKKS GAMEKEY cartridges Interface
+//**************************************************************************
+
+//-------------------------------------------------
+// device_jakks_gamekey_interface - constructor
+//-------------------------------------------------
+
+device_jakks_gamekey_interface::device_jakks_gamekey_interface(const machine_config &mconfig, device_t &device)
+ : device_slot_card_interface(mconfig, device),
+ m_rom(nullptr),
+ m_rom_size(0)
+{
+}
+
+
+//-------------------------------------------------
+// ~device_jakks_gamekey_interface - destructor
+//-------------------------------------------------
+
+device_jakks_gamekey_interface::~device_jakks_gamekey_interface()
+{
+}
+
+//-------------------------------------------------
+// rom_alloc - alloc the space for the cart
+//-------------------------------------------------
+
+void device_jakks_gamekey_interface::rom_alloc(uint32_t size, const char *tag)
+{
+ if (m_rom == nullptr)
+ {
+ m_rom = device().machine().memory().region_alloc(std::string(tag).append(JAKKSSLOT_ROM_REGION_TAG).c_str(), size, 1, ENDIANNESS_BIG)->base();
+ m_rom_size = size;
+ }
+}
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// jakks_gamekey_slot_device - constructor
+//-------------------------------------------------
+jakks_gamekey_slot_device::jakks_gamekey_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ device_t(mconfig, JAKKS_GAMEKEY_SLOT, tag, owner, clock),
+ device_image_interface(mconfig, *this),
+ device_slot_interface(mconfig, *this),
+ m_type(JAKKS_GAMEKEY_PLAIN),
+ m_cart(nullptr)
+{
+}
+
+//-------------------------------------------------
+// jakks_gamekey_slot_device - destructor
+//-------------------------------------------------
+
+jakks_gamekey_slot_device::~jakks_gamekey_slot_device()
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void jakks_gamekey_slot_device::device_start()
+{
+ m_cart = dynamic_cast<device_jakks_gamekey_interface *>(get_card_device());
+}
+
+//-------------------------------------------------
+// JAKKS GAMEKEY PCB
+//-------------------------------------------------
+
+struct jakks_gamekey_slot
+{
+ int pcb_id;
+ const char *slot_option;
+};
+
+// Here, we take the feature attribute from .xml (i.e. the PCB name) and we assign a unique ID to it
+static const jakks_gamekey_slot slot_list[] =
+{
+ { JAKKS_GAMEKEY_PLAIN, "plain" },
+ { JAKKS_GAMEKEY_I2C_BASE, "i2c_base" },
+ { JAKKS_GAMEKEY_I2C_24LC04, "rom_24lc04" },
+};
+
+static int jakks_gamekey_get_pcb_id(const char *slot)
+{
+ for (auto & elem : slot_list)
+ {
+ if (!core_stricmp(elem.slot_option, slot))
+ return elem.pcb_id;
+ }
+
+ return 0;
+}
+
+static const char *jakks_gamekey_get_slot(int type)
+{
+ for (auto & elem : slot_list)
+ {
+ if (elem.pcb_id == type)
+ return elem.slot_option;
+ }
+
+ return "plain";
+}
+
+
+/*-------------------------------------------------
+ call load
+ -------------------------------------------------*/
+
+image_init_result jakks_gamekey_slot_device::call_load()
+{
+ if (m_cart)
+ {
+ uint8_t *ROM;
+ uint32_t len = !loaded_through_softlist() ? length() : get_software_region_length("rom");
+
+ m_cart->rom_alloc(len, tag());
+
+ ROM = m_cart->get_rom_base();
+
+ if (!loaded_through_softlist())
+ fread(ROM, len);
+ else
+ memcpy(ROM, get_software_region("rom"), len);
+
+ if (!loaded_through_softlist())
+ {
+ // attempt to detect cart type without softlist assistance
+ m_type = get_cart_type(ROM, len);
+ }
+ else
+ {
+ // or for softlist loading, use the type specified
+ const char *pcb_name = get_feature("slot");
+ if (pcb_name)
+ m_type = jakks_gamekey_get_pcb_id(pcb_name);
+ }
+
+ return image_init_result::PASS;
+ }
+
+ return image_init_result::PASS;
+}
+
+
+/*-------------------------------------------------
+ get_cart_type - code to detect cart type from
+ fullpath
+ -------------------------------------------------*/
+
+int jakks_gamekey_slot_device::get_cart_type(const uint8_t *ROM, uint32_t len)
+{
+ // without code analysis we have no way of knowing.
+ int type = JAKKS_GAMEKEY_PLAIN;
+ return type;
+}
+
+
+/*-------------------------------------------------
+ get default card software
+ -------------------------------------------------*/
+
+std::string jakks_gamekey_slot_device::get_default_card_software(get_default_card_software_hook &hook) const
+{
+ if (hook.image_file())
+ {
+ const char *slot_string;
+ uint32_t len = hook.image_file()->size();
+ std::vector<uint8_t> rom(len);
+ int type;
+
+ hook.image_file()->read(&rom[0], len);
+
+ type = get_cart_type(&rom[0], len);
+ slot_string = jakks_gamekey_get_slot(type);
+
+ printf("type: %s\n", slot_string);
+
+ return std::string(slot_string);
+ }
+
+ return software_get_default_slot("plain");
+}
+
+/*-------------------------------------------------
+ read
+ -------------------------------------------------*/
+
+READ16_MEMBER(jakks_gamekey_slot_device::read_cart)
+{
+ return m_cart->read_cart(space, offset);
+}
+
+/*-------------------------------------------------
+ write
+ -------------------------------------------------*/
+
+WRITE16_MEMBER(jakks_gamekey_slot_device::write_cart)
+{
+ m_cart->write_cart(space, offset, data);
+}
+
+/*-------------------------------------------------
+ read seeprom
+ -------------------------------------------------*/
+
+uint8_t jakks_gamekey_slot_device::read_cart_seeprom(void)
+{
+ return m_cart->read_cart_seeprom();
+}
+
+/*-------------------------------------------------
+ write seeprom
+ -------------------------------------------------*/
+
+WRITE16_MEMBER(jakks_gamekey_slot_device::write_cart_seeprom)
+{
+ m_cart->write_cart_seeprom(space, offset, data);
+}
diff --git a/src/devices/bus/jakks_gamekey/slot.h b/src/devices/bus/jakks_gamekey/slot.h
new file mode 100644
index 00000000000..8fd0961aad8
--- /dev/null
+++ b/src/devices/bus/jakks_gamekey/slot.h
@@ -0,0 +1,119 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+#ifndef MAME_BUS_JAKKS_GAMEKEY_SLOT_H
+#define MAME_BUS_JAKKS_GAMEKEY_SLOT_H
+
+#pragma once
+
+#include "softlist_dev.h"
+
+/***************************************************************************
+ TYPE DEFINITIONS
+ ***************************************************************************/
+
+/* PCB */
+enum
+{
+ JAKKS_GAMEKEY_PLAIN = 0,
+ JAKKS_GAMEKEY_I2C_BASE,
+ JAKKS_GAMEKEY_I2C_24LC04,
+};
+
+// ======================> device_jakks_gamekey_interface
+
+class device_jakks_gamekey_interface : public device_slot_card_interface
+{
+public:
+ // construction/destruction
+ virtual ~device_jakks_gamekey_interface();
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read_cart) { return 0xffff; }
+ virtual DECLARE_WRITE16_MEMBER(write_cart) { }
+
+ virtual uint8_t read_cart_seeprom(void) { return 1; }
+ virtual DECLARE_WRITE16_MEMBER(write_cart_seeprom) { }
+
+ void rom_alloc(uint32_t size, const char *tag);
+ uint8_t* get_rom_base() { return m_rom; }
+ uint32_t get_rom_size() { return m_rom_size; }
+
+protected:
+ device_jakks_gamekey_interface(const machine_config &mconfig, device_t &device);
+
+ // internal state
+ uint8_t *m_rom;
+ uint32_t m_rom_size;
+};
+
+// ======================> jakks_gamekey_slot_device
+
+class jakks_gamekey_slot_device : public device_t,
+ public device_image_interface,
+ public device_slot_interface
+{
+public:
+ // construction/destruction
+ jakks_gamekey_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ template <typename T>
+ jakks_gamekey_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&opts, const char *dflt)
+ : jakks_gamekey_slot_device(mconfig, tag, owner, clock)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ virtual ~jakks_gamekey_slot_device();
+
+ // image-level overrides
+ virtual image_init_result call_load() override;
+ virtual void call_unload() override {}
+ virtual const software_list_loader &get_software_list_loader() const override { return rom_software_list_loader::instance(); }
+
+ int get_type() { return m_type; }
+ static int get_cart_type(const uint8_t *ROM, uint32_t len);
+
+ virtual iodevice_t image_type() const override { return IO_CARTSLOT; }
+ virtual bool is_readable() const override { return 1; }
+ virtual bool is_writeable() const override { return 0; }
+ virtual bool is_creatable() const override { return 0; }
+ virtual bool must_be_loaded() const override { return 0; }
+ virtual bool is_reset_on_load() const override { return 1; }
+ virtual const char *image_interface() const override { return "jakks_gamekey"; }
+ virtual const char *file_extensions() const override { return "bin,u1"; }
+
+ // slot interface overrides
+ virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read_cart);
+ virtual DECLARE_WRITE16_MEMBER(write_cart);
+
+ virtual uint8_t read_cart_seeprom(void);
+ virtual DECLARE_WRITE16_MEMBER(write_cart_seeprom);
+
+ bool has_cart() { return m_cart ? true : false; }
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+
+ int m_type;
+ device_jakks_gamekey_interface* m_cart;
+};
+
+// device type definition
+DECLARE_DEVICE_TYPE(JAKKS_GAMEKEY_SLOT, jakks_gamekey_slot_device)
+
+/***************************************************************************
+ DEVICE CONFIGURATION MACROS
+ ***************************************************************************/
+
+#define JAKKSSLOT_ROM_REGION_TAG ":cart:rom"
+
+void jakks_gamekey(device_slot_interface &device);
+
+#endif // MAME_BUS_JAKKS_GAMEKEY_SLOT_H
diff --git a/src/devices/bus/kc/d002.cpp b/src/devices/bus/kc/d002.cpp
index 24a361a8f2d..03dc9fb8f3b 100644
--- a/src/devices/bus/kc/d002.cpp
+++ b/src/devices/bus/kc/d002.cpp
@@ -109,40 +109,36 @@ void kc_d002_device::device_reset()
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(kc_d002_device::device_add_mconfig)
- MCFG_DEVICE_ADD("m0", KCCART_SLOT, 0)
- MCFG_DEVICE_SLOT_INTERFACE(kc85_cart, nullptr, false)
- MCFG_KCCART_SLOT_NEXT_SLOT("m4")
- MCFG_KCCART_SLOT_OUT_IRQ_CB(WRITELINE(*this, kc_d002_device, out_irq_w))
- MCFG_KCCART_SLOT_OUT_NMI_CB(WRITELINE(*this, kc_d002_device, out_nmi_w))
- MCFG_KCCART_SLOT_OUT_HALT_CB(WRITELINE(*this, kc_d002_device, out_halt_w))
- MCFG_DEVICE_ADD("m4", KCCART_SLOT, 0)
- MCFG_DEVICE_SLOT_INTERFACE(kc85_cart, nullptr, false)
- MCFG_KCCART_SLOT_NEXT_SLOT("m8")
- MCFG_KCCART_SLOT_OUT_IRQ_CB(WRITELINE(*this, kc_d002_device, out_irq_w))
- MCFG_KCCART_SLOT_OUT_NMI_CB(WRITELINE(*this, kc_d002_device, out_nmi_w))
- MCFG_KCCART_SLOT_OUT_HALT_CB(WRITELINE(*this, kc_d002_device, out_halt_w))
- MCFG_DEVICE_ADD("m8", KCCART_SLOT, 0)
- MCFG_DEVICE_SLOT_INTERFACE(kc85_cart, nullptr, false)
- MCFG_KCCART_SLOT_NEXT_SLOT("mc")
- MCFG_KCCART_SLOT_OUT_IRQ_CB(WRITELINE(*this, kc_d002_device, out_irq_w))
- MCFG_KCCART_SLOT_OUT_NMI_CB(WRITELINE(*this, kc_d002_device, out_nmi_w))
- MCFG_KCCART_SLOT_OUT_HALT_CB(WRITELINE(*this, kc_d002_device, out_halt_w))
- MCFG_DEVICE_ADD("mc", KCCART_SLOT, 0)
- MCFG_DEVICE_SLOT_INTERFACE(kc85_cart, nullptr, false)
- MCFG_KCCART_SLOT_NEXT_SLOT("exp")
- MCFG_KCCART_SLOT_OUT_IRQ_CB(WRITELINE(*this, kc_d002_device, out_irq_w))
- MCFG_KCCART_SLOT_OUT_NMI_CB(WRITELINE(*this, kc_d002_device, out_nmi_w))
- MCFG_KCCART_SLOT_OUT_HALT_CB(WRITELINE(*this, kc_d002_device, out_halt_w))
+void kc_d002_device::device_add_mconfig(machine_config &config)
+{
+ KCCART_SLOT(config, m_expansions[0], kc85_cart, nullptr);
+ m_expansions[0]->set_next_slot("m4");
+ m_expansions[0]->irq().set(FUNC(kc_d002_device::out_irq_w));
+ m_expansions[0]->nmi().set(FUNC(kc_d002_device::out_nmi_w));
+ m_expansions[0]->halt().set(FUNC(kc_d002_device::out_halt_w));
+ KCCART_SLOT(config, m_expansions[1], kc85_cart, nullptr);
+ m_expansions[1]->set_next_slot("m8");
+ m_expansions[1]->irq().set(FUNC(kc_d002_device::out_irq_w));
+ m_expansions[1]->nmi().set(FUNC(kc_d002_device::out_nmi_w));
+ m_expansions[1]->halt().set(FUNC(kc_d002_device::out_halt_w));
+ KCCART_SLOT(config, m_expansions[2], kc85_cart, nullptr);
+ m_expansions[2]->set_next_slot("mc");
+ m_expansions[2]->irq().set(FUNC(kc_d002_device::out_irq_w));
+ m_expansions[2]->nmi().set(FUNC(kc_d002_device::out_nmi_w));
+ m_expansions[2]->halt().set(FUNC(kc_d002_device::out_halt_w));
+ KCCART_SLOT(config, m_expansions[3], kc85_cart, nullptr);
+ m_expansions[3]->set_next_slot("exp");
+ m_expansions[3]->irq().set(FUNC(kc_d002_device::out_irq_w));
+ m_expansions[3]->nmi().set(FUNC(kc_d002_device::out_nmi_w));
+ m_expansions[3]->halt().set(FUNC(kc_d002_device::out_halt_w));
// expansion interface
- MCFG_DEVICE_ADD("exp", KCCART_SLOT, 0)
- MCFG_DEVICE_SLOT_INTERFACE(kc85_exp, nullptr, false)
- MCFG_KCEXP_SLOT_NEXT_SLOT(nullptr)
- MCFG_KCEXP_SLOT_OUT_IRQ_CB(WRITELINE(*this, kc_d002_device, out_irq_w))
- MCFG_KCEXP_SLOT_OUT_NMI_CB(WRITELINE(*this, kc_d002_device, out_nmi_w))
- MCFG_KCEXP_SLOT_OUT_HALT_CB(WRITELINE(*this, kc_d002_device, out_halt_w))
-MACHINE_CONFIG_END
+ KCCART_SLOT(config, m_expansions[4], kc85_exp, nullptr);
+ m_expansions[4]->set_next_slot(nullptr);
+ m_expansions[4]->irq().set(FUNC(kc_d002_device::out_irq_w));
+ m_expansions[4]->nmi().set(FUNC(kc_d002_device::out_nmi_w));
+ m_expansions[4]->halt().set(FUNC(kc_d002_device::out_halt_w));
+}
//-------------------------------------------------
// input_ports - device-specific input ports
diff --git a/src/devices/bus/kc/d004.cpp b/src/devices/bus/kc/d004.cpp
index 188166640cd..f07b6de1695 100644
--- a/src/devices/bus/kc/d004.cpp
+++ b/src/devices/bus/kc/d004.cpp
@@ -33,7 +33,7 @@ void kc_d004_device::kc_d004_io(address_map &map)
map.unmap_value_high();
map.global_mask(0xff);
map(0xf0, 0xf1).m(UPD765_TAG, FUNC(upd765a_device::map));
- map(0xf2, 0xf3).rw(UPD765_TAG, FUNC(upd765a_device::mdma_r), FUNC(upd765a_device::mdma_w));
+ map(0xf2, 0xf3).rw(UPD765_TAG, FUNC(upd765a_device::dma_r), FUNC(upd765a_device::dma_w));
map(0xf4, 0xf4).r(FUNC(kc_d004_device::hw_input_gate_r));
map(0xf6, 0xf7).w(FUNC(kc_d004_device::fdd_select_w));
map(0xf8, 0xf9).w(FUNC(kc_d004_device::hw_terminal_count_w));
@@ -45,7 +45,7 @@ void kc_d004_gide_device::kc_d004_gide_io(address_map &map)
map.unmap_value_high();
map(0x0000, 0xffff).rw(FUNC(kc_d004_gide_device::gide_r), FUNC(kc_d004_gide_device::gide_w));
map(0x00f0, 0x00f1).mirror(0xff00).m(UPD765_TAG, FUNC(upd765a_device::map));
- map(0x00f2, 0x00f3).mirror(0xff00).rw(UPD765_TAG, FUNC(upd765a_device::mdma_r), FUNC(upd765a_device::mdma_w));
+ map(0x00f2, 0x00f3).mirror(0xff00).rw(UPD765_TAG, FUNC(upd765a_device::dma_r), FUNC(upd765a_device::dma_w));
map(0x00f4, 0x00f4).mirror(0xff00).r(FUNC(kc_d004_gide_device::hw_input_gate_r));
map(0x00f6, 0x00f7).mirror(0xff00).w(FUNC(kc_d004_gide_device::fdd_select_w));
map(0x00f8, 0x00f9).mirror(0xff00).w(FUNC(kc_d004_gide_device::hw_terminal_count_w));
diff --git a/src/devices/bus/kc/kc.h b/src/devices/bus/kc/kc.h
index 0689169c5ee..0c14a8ef5d3 100644
--- a/src/devices/bus/kc/kc.h
+++ b/src/devices/bus/kc/kc.h
@@ -48,12 +48,21 @@ class kcexp_slot_device : public device_t,
{
public:
// construction/destruction
+ template <typename T>
+ kcexp_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : kcexp_slot_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
kcexp_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~kcexp_slot_device();
- template <class Object> devcb_base &set_out_irq_callback(Object &&cb) { return m_out_irq_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_nmi_callback(Object &&cb) { return m_out_nmi_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_halt_callback(Object &&cb) { return m_out_halt_cb.set_callback(std::forward<Object>(cb)); }
+ auto irq() { return m_out_irq_cb.bind(); }
+ auto nmi() { return m_out_nmi_cb.bind(); }
+ auto halt() { return m_out_halt_cb.bind(); }
// inline configuration
void set_next_slot(const char *next_module_tag) { m_next_slot_tag = next_module_tag; }
@@ -91,6 +100,15 @@ class kccart_slot_device : public kcexp_slot_device,
{
public:
// construction/destruction
+ template <typename T>
+ kccart_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : kccart_slot_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
kccart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~kccart_slot_device();
@@ -115,42 +133,4 @@ public:
DECLARE_DEVICE_TYPE(KCEXP_SLOT, kcexp_slot_device)
DECLARE_DEVICE_TYPE(KCCART_SLOT, kccart_slot_device)
-
-/***************************************************************************
- DEVICE CONFIGURATION MACROS
-***************************************************************************/
-
-#define MCFG_KCEXP_SLOT_OUT_IRQ_CB(_devcb) \
- downcast<kcexp_slot_device &>(*device).set_out_irq_callback(DEVCB_##_devcb);
-
-#define MCFG_KCEXP_SLOT_OUT_NMI_CB(_devcb) \
- downcast<kcexp_slot_device &>(*device).set_out_nmi_callback(DEVCB_##_devcb);
-
-#define MCFG_KCEXP_SLOT_OUT_HALT_CB(_devcb) \
- downcast<kcexp_slot_device &>(*device).set_out_halt_callback(DEVCB_##_devcb);
-
-#define MCFG_KCEXP_SLOT_NEXT_SLOT(_next_slot_tag) \
- downcast<kcexp_slot_device &>(*device).set_next_slot(_next_slot_tag);
-
-
-#define MCFG_KCCART_SLOT_OUT_IRQ_CB(_devcb) \
- downcast<kccart_slot_device &>(*device).set_out_irq_callback(DEVCB_##_devcb);
-
-#define MCFG_KCCART_SLOT_OUT_NMI_CB(_devcb) \
- downcast<kccart_slot_device &>(*device).set_out_nmi_callback(DEVCB_##_devcb);
-
-#define MCFG_KCCART_SLOT_OUT_HALT_CB(_devcb) \
- downcast<kccart_slot_device &>(*device).set_out_halt_callback(DEVCB_##_devcb);
-
-#define MCFG_KCCART_SLOT_NEXT_SLOT(_next_slot_tag) \
- downcast<kccart_slot_device &>(*device).set_next_slot(_next_slot_tag);
-
-// #define MCFG_KC85_EXPANSION_ADD(_tag,_next_slot_tag,_config,_slot_intf,_def_slot)
-// MCFG_DEVICE_ADD(_tag, KCEXP_SLOT, 0)
-// MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-// #define MCFG_KC85_CARTRIDGE_ADD(_tag,_next_slot_tag,_config,_slot_intf,_def_slot)
-// MCFG_DEVICE_ADD(_tag, KCCART_SLOT, 0)
-// MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
#endif // MAME_BUS_KC_KC_H
diff --git a/src/devices/bus/lpci/mpc105.cpp b/src/devices/bus/lpci/mpc105.cpp
index bf1583add8d..5816153f134 100644
--- a/src/devices/bus/lpci/mpc105.cpp
+++ b/src/devices/bus/lpci/mpc105.cpp
@@ -32,11 +32,10 @@ DEFINE_DEVICE_TYPE(MPC105, mpc105_device, "mpc105", "Motorola MPC105")
mpc105_device::mpc105_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, MPC105, tag, owner, clock),
pci_device_interface( mconfig, *this ),
- m_cpu_tag(nullptr),
m_bank_base_default(0),
m_bank_base(0),
m_bank_enable(0),
- m_maincpu(nullptr)
+ m_maincpu(*this, finder_base::DUMMY_TAG)
{
}
@@ -46,7 +45,6 @@ mpc105_device::mpc105_device(const machine_config &mconfig, const char *tag, dev
void mpc105_device::device_start()
{
- m_maincpu = machine().device<cpu_device>(m_cpu_tag);
}
//-------------------------------------------------
diff --git a/src/devices/bus/lpci/mpc105.h b/src/devices/bus/lpci/mpc105.h
index 65ab5a59637..94f9181a2d7 100644
--- a/src/devices/bus/lpci/mpc105.h
+++ b/src/devices/bus/lpci/mpc105.h
@@ -17,11 +17,6 @@
#define MPC105_MEMORYBANK_COUNT 8
-#define MCFG_MPC105_CPU( _tag ) \
- downcast<mpc105_device &>(*device).set_cpu(_tag);
-
-#define MCFG_MPC105_BANK_BASE_DEFAULT( bank_base_default ) \
- downcast<mpc105_device &>(*device).set_bank_base_default(bank_base_default);
// ======================> mpc105_device
@@ -32,7 +27,7 @@ public:
// construction/destruction
mpc105_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- void set_cpu(const char *tag) { m_cpu_tag = tag; }
+ template <typename T> void set_cpu(T &&tag) { m_maincpu.set_tag(std::forward<T>(tag)); }
void set_bank_base_default(int bank_base_default) { m_bank_base_default = bank_base_default; }
virtual uint32_t pci_read(pci_bus_device *pcibus, int function, int offset, uint32_t mem_mask) override;
@@ -46,13 +41,12 @@ protected:
void update_memory();
private:
- const char *m_cpu_tag;
int m_bank_base_default;
int m_bank_base;
uint8_t m_bank_enable;
uint32_t m_bank_registers[8];
- cpu_device* m_maincpu;
+ required_device<cpu_device> m_maincpu;
};
diff --git a/src/devices/bus/lpci/pci.h b/src/devices/bus/lpci/pci.h
index 6f7da915176..7f93875fcfb 100644
--- a/src/devices/bus/lpci/pci.h
+++ b/src/devices/bus/lpci/pci.h
@@ -114,20 +114,4 @@ private:
// device type definition
DECLARE_DEVICE_TYPE(PCI_BUS, pci_bus_device)
-
-/***************************************************************************
- DEVICE CONFIGURATION MACROS
-***************************************************************************/
-
-#define MCFG_PCI_BUS_ADD(_tag, _busnum) \
- MCFG_DEVICE_ADD(_tag, PCI_BUS, 0) \
- downcast<pci_bus_device *>(device)->set_busnum(_busnum);
-#define MCFG_PCI_BUS_DEVICE(_tag, _slot_intf, _def_slot, _fixed) \
- MCFG_DEVICE_ADD(_tag, PCI_CONNECTOR, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _fixed)
-
-#define MCFG_PCI_BUS_SIBLING(_father_tag) \
- downcast<pci_bus_device *>(device)->set_father(_father_tag);
-
-
#endif // MAME_BUS_LPCI_PCI_H
diff --git a/src/devices/bus/lpci/southbridge.cpp b/src/devices/bus/lpci/southbridge.cpp
index 01228cddc3b..c4ce2257ed1 100644
--- a/src/devices/bus/lpci/southbridge.cpp
+++ b/src/devices/bus/lpci/southbridge.cpp
@@ -90,7 +90,8 @@ void southbridge_device::device_add_mconfig(machine_config &config)
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.50);
ISA16(config, m_isabus, 0);
- m_isabus->set_cputag(":maincpu");
+ m_isabus->set_memspace(":maincpu", AS_PROGRAM);
+ m_isabus->set_iospace(":maincpu", AS_IO);
m_isabus->irq3_callback().set("pic8259_master", FUNC(pic8259_device::ir3_w));
m_isabus->irq4_callback().set("pic8259_master", FUNC(pic8259_device::ir4_w));
m_isabus->irq5_callback().set("pic8259_master", FUNC(pic8259_device::ir5_w));
@@ -109,6 +110,7 @@ void southbridge_device::device_add_mconfig(machine_config &config)
m_isabus->drq5_callback().set("dma8237_2", FUNC(am9517a_device::dreq1_w));
m_isabus->drq6_callback().set("dma8237_2", FUNC(am9517a_device::dreq2_w));
m_isabus->drq7_callback().set("dma8237_2", FUNC(am9517a_device::dreq3_w));
+ m_isabus->iochck_callback().set(FUNC(southbridge_device::iochck_w));
}
southbridge_device::southbridge_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
@@ -215,9 +217,9 @@ WRITE8_MEMBER(southbridge_device::eisa_irq_write)
void southbridge_device::device_start()
{
- spaceio = &machine().device(":maincpu")->memory().space(AS_IO);
+ spaceio = &m_maincpu->space(AS_IO);
- spaceio->install_readwrite_handler(0x0000, 0x001f, read8_delegate(FUNC(am9517a_device::read), &(*m_dma8237_1)), write8_delegate(FUNC(am9517a_device::write), &(*m_dma8237_1)), 0xffffffff);
+ spaceio->install_readwrite_handler(0x0000, 0x001f, read8sm_delegate(FUNC(am9517a_device::read), &(*m_dma8237_1)), write8sm_delegate(FUNC(am9517a_device::write), &(*m_dma8237_1)), 0xffffffff);
spaceio->install_readwrite_handler(0x0020, 0x003f, read8sm_delegate(FUNC(pic8259_device::read), &(*m_pic8259_master)), write8sm_delegate(FUNC(pic8259_device::write), &(*m_pic8259_master)), 0xffffffff);
spaceio->install_readwrite_handler(0x0040, 0x005f, read8sm_delegate(FUNC(pit8254_device::read), &(*m_pit8254)), write8sm_delegate(FUNC(pit8254_device::write), &(*m_pit8254)), 0xffffffff);
spaceio->install_readwrite_handler(0x0060, 0x0063, read8_delegate(FUNC(southbridge_device::at_portb_r), this), write8_delegate(FUNC(southbridge_device::at_portb_w), this), 0x0000ff00);
@@ -479,17 +481,24 @@ WRITE8_MEMBER( southbridge_device::at_portb_w )
m_pit8254->write_gate2(BIT(data, 0));
at_speaker_set_spkrdata( BIT(data, 1));
m_channel_check = BIT(data, 3);
- m_isabus->set_nmi_state((m_nmi_enabled==0) && (m_channel_check==0));
+ if (m_channel_check)
+ m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
+}
+
+WRITE_LINE_MEMBER( southbridge_device::iochck_w )
+{
+ if (!state && !m_channel_check && m_nmi_enabled)
+ m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
}
READ8_MEMBER( southbridge_device::at_dma8237_2_r )
{
- return m_dma8237_2->read( space, offset / 2);
+ return m_dma8237_2->read(offset / 2);
}
WRITE8_MEMBER( southbridge_device::at_dma8237_2_w )
{
- m_dma8237_2->write( space, offset / 2, data);
+ m_dma8237_2->write(offset / 2, data);
}
/***************************************************************************
@@ -507,7 +516,8 @@ static void pc_isa_onboard(device_slot_interface &device)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(southbridge_extended_device::device_add_mconfig)
+void southbridge_extended_device::device_add_mconfig(machine_config &config)
+{
southbridge_device::device_add_mconfig(config);
at_keyboard_controller_device &keybc(AT_KEYBOARD_CONTROLLER(config, "keybc", XTAL(12'000'000)));
@@ -517,20 +527,20 @@ MACHINE_CONFIG_START(southbridge_extended_device::device_add_mconfig)
keybc.kbd_clk().set("pc_kbdc", FUNC(pc_kbdc_device::clock_write_from_mb));
keybc.kbd_data().set("pc_kbdc", FUNC(pc_kbdc_device::data_write_from_mb));
- MCFG_DEVICE_ADD("pc_kbdc", PC_KBDC, 0)
- MCFG_PC_KBDC_OUT_CLOCK_CB(WRITELINE("keybc", at_keyboard_controller_device, kbd_clk_w))
- MCFG_PC_KBDC_OUT_DATA_CB(WRITELINE("keybc", at_keyboard_controller_device, kbd_data_w))
- MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
+ PC_KBDC(config, m_pc_kbdc, 0);
+ m_pc_kbdc->out_clock_cb().set(m_keybc, FUNC(at_keyboard_controller_device::kbd_clk_w));
+ m_pc_kbdc->out_data_cb().set(m_keybc, FUNC(at_keyboard_controller_device::kbd_data_w));
+ PC_KBDC_SLOT(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL).set_pc_kbdc_slot(m_pc_kbdc);
ds12885_device &rtc(DS12885(config, "rtc"));
rtc.irq().set("pic8259_slave", FUNC(pic8259_device::ir0_w));
rtc.set_century_index(0x32);
// on board devices
- MCFG_DEVICE_ADD("board1", ISA16_SLOT, 0, "isabus", pc_isa_onboard, "fdcsmc", true) // FIXME: determine ISA bus clock
- MCFG_DEVICE_ADD("board2", ISA16_SLOT, 0, "isabus", pc_isa_onboard, "comat", true)
- MCFG_DEVICE_ADD("board3", ISA16_SLOT, 0, "isabus", pc_isa_onboard, "lpt", true)
-MACHINE_CONFIG_END
+ ISA16_SLOT(config, "board1", 0, "isabus", pc_isa_onboard, "fdcsmc", true); // FIXME: determine ISA bus clock
+ ISA16_SLOT(config, "board2", 0, "isabus", pc_isa_onboard, "comat", true);
+ ISA16_SLOT(config, "board3", 0, "isabus", pc_isa_onboard, "lpt", true);
+}
southbridge_extended_device::southbridge_extended_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
: southbridge_device(mconfig, type, tag, owner, clock),
@@ -546,13 +556,13 @@ southbridge_extended_device::southbridge_extended_device(const machine_config &m
void southbridge_extended_device::device_start()
{
- address_space& spaceio = machine().device(":maincpu")->memory().space(AS_IO);
+ address_space& spaceio = m_maincpu->space(AS_IO);
southbridge_device::device_start();
- spaceio.install_readwrite_handler(0x0060, 0x0063, read8_delegate(FUNC(at_keyboard_controller_device::data_r), &(*m_keybc)), write8_delegate(FUNC(at_keyboard_controller_device::data_w), &(*m_keybc)), 0x000000ff);
- spaceio.install_readwrite_handler(0x0064, 0x0067, read8_delegate(FUNC(at_keyboard_controller_device::status_r), &(*m_keybc)), write8_delegate(FUNC(at_keyboard_controller_device::command_w), &(*m_keybc)), 0xffffffff);
- spaceio.install_readwrite_handler(0x0070, 0x007f, read8_delegate(FUNC(ds12885_device::read), &(*m_ds12885)), write8_delegate(FUNC(ds12885_device::write), &(*m_ds12885)), 0xffffffff);
+ spaceio.install_readwrite_handler(0x0060, 0x0063, read8smo_delegate(FUNC(at_keyboard_controller_device::data_r), &(*m_keybc)), write8smo_delegate(FUNC(at_keyboard_controller_device::data_w), &(*m_keybc)), 0x000000ff);
+ spaceio.install_readwrite_handler(0x0064, 0x0067, read8smo_delegate(FUNC(at_keyboard_controller_device::status_r), &(*m_keybc)), write8smo_delegate(FUNC(at_keyboard_controller_device::command_w), &(*m_keybc)), 0xffffffff);
+ spaceio.install_readwrite_handler(0x0070, 0x007f, read8sm_delegate(FUNC(ds12885_device::read), &(*m_ds12885)), write8sm_delegate(FUNC(ds12885_device::write), &(*m_ds12885)), 0xffffffff);
}
//-------------------------------------------------
@@ -568,10 +578,11 @@ WRITE8_MEMBER( southbridge_extended_device::write_rtc )
{
if (offset==0) {
m_nmi_enabled = BIT(data,7);
- m_isabus->set_nmi_state((m_nmi_enabled==0) && (m_channel_check==0));
- m_ds12885->write(space,0,data);
+ if (!m_nmi_enabled)
+ m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
+ m_ds12885->write(0,data);
}
else {
- m_ds12885->write(space,offset,data);
+ m_ds12885->write(offset,data);
}
}
diff --git a/src/devices/bus/lpci/southbridge.h b/src/devices/bus/lpci/southbridge.h
index 0e25c8392f4..7c2c8f3760f 100644
--- a/src/devices/bus/lpci/southbridge.h
+++ b/src/devices/bus/lpci/southbridge.h
@@ -87,6 +87,7 @@ private:
DECLARE_WRITE8_MEMBER(at_page8_w);
DECLARE_READ8_MEMBER(at_portb_r);
DECLARE_WRITE8_MEMBER(at_portb_w);
+ DECLARE_WRITE_LINE_MEMBER(iochck_w);
DECLARE_READ8_MEMBER(get_slave_ack);
DECLARE_WRITE_LINE_MEMBER(at_pit8254_out0_changed);
DECLARE_WRITE_LINE_MEMBER(at_pit8254_out1_changed);
diff --git a/src/devices/bus/m5/slot.h b/src/devices/bus/m5/slot.h
index 48cb4d15124..e2a835238b9 100644
--- a/src/devices/bus/m5/slot.h
+++ b/src/devices/bus/m5/slot.h
@@ -66,7 +66,17 @@ class m5_cart_slot_device : public device_t,
{
public:
// construction/destruction
- m5_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ m5_cart_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : m5_cart_slot_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ m5_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
virtual ~m5_cart_slot_device();
// device-level overrides
@@ -116,9 +126,4 @@ DECLARE_DEVICE_TYPE(M5_CART_SLOT, m5_cart_slot_device)
#define M5SLOT_ROM_REGION_TAG ":cart:rom"
-#define MCFG_M5_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_tag, M5_CART_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-
#endif // MAME_BUS_M5_SLOT_H
diff --git a/src/devices/bus/macpds/macpds.h b/src/devices/bus/macpds/macpds.h
index d37a393a78a..2354549afd5 100644
--- a/src/devices/bus/macpds/macpds.h
+++ b/src/devices/bus/macpds/macpds.h
@@ -14,22 +14,6 @@
#pragma once
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_MACPDS_SLOT_REMOVE(_tag) \
- MCFG_DEVICE_REMOVE(_tag)
-
-#define MCFG_MACPDS_ONBOARD_ADD(_nbtag, _tag, _dev_type, _def_inp) \
- MCFG_DEVICE_ADD(_tag, _dev_type, 0) \
- MCFG_DEVICE_INPUT_DEFAULTS(_def_inp) \
- downcast<device_macpds_card_interface &>(*device).set_macpds_tag(_nbtag, _tag);
-
-#define MCFG_MACPDS_BUS_REMOVE(_tag) \
- MCFG_DEVICE_REMOVE(_tag)
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
diff --git a/src/devices/bus/macpds/pds_tpdfpd.cpp b/src/devices/bus/macpds/pds_tpdfpd.cpp
index aba55746cc2..1a3f2671e5c 100644
--- a/src/devices/bus/macpds/pds_tpdfpd.cpp
+++ b/src/devices/bus/macpds/pds_tpdfpd.cpp
@@ -58,13 +58,12 @@ DEFINE_DEVICE_TYPE(PDS_SEDISPLAY, macpds_sedisplay_device, "pds_sefp", "Radius S
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(macpds_sedisplay_device::device_add_mconfig)
- MCFG_SCREEN_ADD( SEDISPLAY_SCREEN_NAME, RASTER)
- MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, macpds_sedisplay_device, screen_update)
- MCFG_SCREEN_SIZE(1280, 960)
- MCFG_SCREEN_REFRESH_RATE(70)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 870-1)
-MACHINE_CONFIG_END
+void macpds_sedisplay_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, SEDISPLAY_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_screen_update(FUNC(macpds_sedisplay_device::screen_update));
+ screen.set_raw(55_MHz_XTAL, 800, 0, 640, 1024, 0, 870);
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/megadrive/eeprom.cpp b/src/devices/bus/megadrive/eeprom.cpp
index a39daf4fb52..32787dec152 100644
--- a/src/devices/bus/megadrive/eeprom.cpp
+++ b/src/devices/bus/megadrive/eeprom.cpp
@@ -107,33 +107,40 @@ md_eeprom_blara_device::md_eeprom_blara_device(const machine_config &mconfig, co
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(md_std_eeprom_device::device_add_mconfig)
- MCFG_24C01_ADD("i2cmem")
-MACHINE_CONFIG_END
+void md_std_eeprom_device::device_add_mconfig(machine_config &config)
+{
+ I2C_24C01(config, m_i2cmem);
+}
-MACHINE_CONFIG_START(md_eeprom_nbajam_device::device_add_mconfig)
- MCFG_24C02_ADD("i2cmem")
-MACHINE_CONFIG_END
+void md_eeprom_nbajam_device::device_add_mconfig(machine_config &config)
+{
+ I2C_24C02(config, m_i2cmem);
+}
-MACHINE_CONFIG_START(md_eeprom_nbajamte_device::device_add_mconfig)
- MCFG_24C02_ADD("i2cmem")
-MACHINE_CONFIG_END
+void md_eeprom_nbajamte_device::device_add_mconfig(machine_config &config)
+{
+ I2C_24C01(config, m_i2cmem);
+}
-MACHINE_CONFIG_START(md_eeprom_cslam_device::device_add_mconfig)
- MCFG_24C64_ADD("i2cmem")
-MACHINE_CONFIG_END
+void md_eeprom_cslam_device::device_add_mconfig(machine_config &config)
+{
+ I2C_24C64(config, m_i2cmem);
+}
-MACHINE_CONFIG_START(md_eeprom_nflqb_device::device_add_mconfig)
- MCFG_24C16_ADD("i2cmem")
-MACHINE_CONFIG_END
+void md_eeprom_nflqb_device::device_add_mconfig(machine_config &config)
+{
+ I2C_24C16(config, m_i2cmem);
+}
-MACHINE_CONFIG_START(md_eeprom_nhlpa_device::device_add_mconfig)
- MCFG_24C01_ADD("i2cmem")
-MACHINE_CONFIG_END
+void md_eeprom_nhlpa_device::device_add_mconfig(machine_config &config)
+{
+ I2C_24C01(config, m_i2cmem);
+}
-MACHINE_CONFIG_START(md_eeprom_blara_device::device_add_mconfig)
- MCFG_24C64_ADD("i2cmem")
-MACHINE_CONFIG_END
+void md_eeprom_blara_device::device_add_mconfig(machine_config &config)
+{
+ I2C_24C64(config, m_i2cmem);
+}
void md_std_eeprom_device::device_start()
{
diff --git a/src/devices/bus/megadrive/ggenie.cpp b/src/devices/bus/megadrive/ggenie.cpp
index a6001971529..17dbb78fc1d 100644
--- a/src/devices/bus/megadrive/ggenie.cpp
+++ b/src/devices/bus/megadrive/ggenie.cpp
@@ -172,7 +172,8 @@ static void ggenie_sub_cart(device_slot_interface &device)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(md_rom_ggenie_device::device_add_mconfig)
- MCFG_MD_CARTRIDGE_ADD("subslot", ggenie_sub_cart, nullptr)
- MCFG_MD_CARTRIDGE_NOT_MANDATORY
-MACHINE_CONFIG_END
+void md_rom_ggenie_device::device_add_mconfig(machine_config &config)
+{
+ MD_CART_SLOT(config, m_exp, ggenie_sub_cart, nullptr);
+ m_exp->set_must_be_loaded(false);
+}
diff --git a/src/devices/bus/megadrive/jcart.cpp b/src/devices/bus/megadrive/jcart.cpp
index aa6d763e517..76f38ff0dd3 100644
--- a/src/devices/bus/megadrive/jcart.cpp
+++ b/src/devices/bus/megadrive/jcart.cpp
@@ -81,13 +81,15 @@ md_seprom_mm96_device::md_seprom_mm96_device(const machine_config &mconfig, cons
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(md_seprom_codemast_device::device_add_mconfig)
- MCFG_24C08_ADD("i2cmem")
-MACHINE_CONFIG_END
+void md_seprom_codemast_device::device_add_mconfig(machine_config &config)
+{
+ I2C_24C08(config, m_i2cmem);
+}
-MACHINE_CONFIG_START(md_seprom_mm96_device::device_add_mconfig)
- MCFG_24C16A_ADD("i2cmem")
-MACHINE_CONFIG_END
+void md_seprom_mm96_device::device_add_mconfig(machine_config &config)
+{
+ I2C_24C16A(config, m_i2cmem);
+}
static INPUT_PORTS_START( jcart_ipt )
diff --git a/src/devices/bus/megadrive/md_slot.h b/src/devices/bus/megadrive/md_slot.h
index c9372ada7df..42fd2503f76 100644
--- a/src/devices/bus/megadrive/md_slot.h
+++ b/src/devices/bus/megadrive/md_slot.h
@@ -211,6 +211,16 @@ class md_cart_slot_device : public base_md_cart_slot_device
{
public:
// construction/destruction
+ template <typename T>
+ md_cart_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : md_cart_slot_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
md_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual const char *image_interface() const override { return "megadriv_cart"; }
virtual const char *file_extensions() const override { return "smd,bin,md,gen"; }
@@ -269,12 +279,4 @@ DECLARE_DEVICE_TYPE(COPERA_CART_SLOT, copera_cart_slot_device)
#define MDSLOT_ROM_REGION_TAG ":cart:rom"
-#define MCFG_MD_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_tag, MD_CART_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-#define MCFG_MD_CARTRIDGE_NOT_MANDATORY \
- static_cast<md_cart_slot_device *>(device)->set_must_be_loaded(false);
-
-
#endif // MAME_BUS_MEGADRIVE_MD_SLOT_H
diff --git a/src/devices/bus/megadrive/sk.cpp b/src/devices/bus/megadrive/sk.cpp
index b48163e9b94..c45574ff1a3 100644
--- a/src/devices/bus/megadrive/sk.cpp
+++ b/src/devices/bus/megadrive/sk.cpp
@@ -79,7 +79,8 @@ static void sk_sub_cart(device_slot_interface &device)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(md_rom_sk_device::device_add_mconfig)
- MCFG_MD_CARTRIDGE_ADD("subslot", sk_sub_cart, nullptr)
- MCFG_MD_CARTRIDGE_NOT_MANDATORY
-MACHINE_CONFIG_END
+void md_rom_sk_device::device_add_mconfig(machine_config &config)
+{
+ MD_CART_SLOT(config, m_exp, sk_sub_cart, nullptr);
+ m_exp->set_must_be_loaded(false);
+}
diff --git a/src/devices/bus/megadrive/svp.cpp b/src/devices/bus/megadrive/svp.cpp
index 2ed4e40ba1f..fe4ae33536e 100644
--- a/src/devices/bus/megadrive/svp.cpp
+++ b/src/devices/bus/megadrive/svp.cpp
@@ -347,11 +347,12 @@ void md_rom_svp_device::md_svp_ext_map(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(md_rom_svp_device::device_add_mconfig)
- MCFG_DEVICE_ADD("svp", SSP1601, MASTER_CLOCK_NTSC / 7 * 3) /* ~23 MHz (guessed) */
- MCFG_DEVICE_PROGRAM_MAP(md_svp_ssp_map)
- MCFG_DEVICE_IO_MAP(md_svp_ext_map)
-MACHINE_CONFIG_END
+void md_rom_svp_device::device_add_mconfig(machine_config &config)
+{
+ SSP1601(config, m_svp, MASTER_CLOCK_NTSC / 7 * 3); /* ~23 MHz (guessed) */
+ m_svp->set_addrmap(AS_PROGRAM, &md_rom_svp_device::md_svp_ssp_map);
+ m_svp->set_addrmap(AS_IO, &md_rom_svp_device::md_svp_ext_map);
+}
ioport_constructor md_rom_svp_device::device_input_ports() const
{
diff --git a/src/devices/bus/midi/midi.h b/src/devices/bus/midi/midi.h
index e85a69b9b35..162d2d7545e 100644
--- a/src/devices/bus/midi/midi.h
+++ b/src/devices/bus/midi/midi.h
@@ -6,13 +6,6 @@
#pragma once
-#define MCFG_MIDI_PORT_ADD(_tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, MIDI_PORT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-#define MCFG_MIDI_RX_HANDLER(_devcb) \
- downcast<midi_port_device &>(*device).set_rx_handler(DEVCB_##_devcb);
-
class device_midi_port_interface;
class midi_port_device : public device_t,
@@ -34,7 +27,6 @@ public:
virtual ~midi_port_device();
// static configuration helpers
- template <class Object> devcb_base &set_rx_handler(Object &&cb) { return m_rxd_handler.set_callback(std::forward<Object>(cb)); }
auto rxd_handler() { return m_rxd_handler.bind(); }
DECLARE_WRITE_LINE_MEMBER( write_txd );
diff --git a/src/devices/bus/midi/midiinport.cpp b/src/devices/bus/midi/midiinport.cpp
index 81bbeb80f1c..bad75b6959e 100644
--- a/src/devices/bus/midi/midiinport.cpp
+++ b/src/devices/bus/midi/midiinport.cpp
@@ -20,7 +20,8 @@ midiin_port_device::midiin_port_device(const machine_config &mconfig, const char
{
}
-MACHINE_CONFIG_START(midiin_port_device::device_add_mconfig)
- MCFG_DEVICE_ADD("midiinimg", MIDIIN, 0)
- MCFG_MIDIIN_INPUT_CB(WRITELINE(*this, midiin_port_device, read))
-MACHINE_CONFIG_END
+void midiin_port_device::device_add_mconfig(machine_config &config)
+{
+ MIDIIN(config, m_midiin, 0);
+ m_midiin->input_callback().set(FUNC(midiin_port_device::read));
+}
diff --git a/src/devices/bus/midi/midioutport.cpp b/src/devices/bus/midi/midioutport.cpp
index 449b85b4649..7f15c79fc70 100644
--- a/src/devices/bus/midi/midioutport.cpp
+++ b/src/devices/bus/midi/midioutport.cpp
@@ -20,6 +20,7 @@ midiout_port_device::midiout_port_device(const machine_config &mconfig, const ch
{
}
-MACHINE_CONFIG_START(midiout_port_device::device_add_mconfig)
- MCFG_MIDIOUT_ADD("midioutimg")
-MACHINE_CONFIG_END
+void midiout_port_device::device_add_mconfig(machine_config &config)
+{
+ MIDIOUT(config, m_midiout, 0);
+}
diff --git a/src/devices/bus/msx_cart/arc.cpp b/src/devices/bus/msx_cart/arc.cpp
index 3504071ec4c..406ec8f4de3 100644
--- a/src/devices/bus/msx_cart/arc.cpp
+++ b/src/devices/bus/msx_cart/arc.cpp
@@ -18,9 +18,8 @@ msx_cart_arc_device::msx_cart_arc_device(const machine_config &mconfig, const ch
void msx_cart_arc_device::device_start()
{
// Install IO read/write handlers
- address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
- space.install_write_handler(0x7f, 0x7f, write8_delegate(FUNC(msx_cart_arc_device::io_7f_w), this));
- space.install_read_handler(0x7f, 0x7f, read8_delegate(FUNC(msx_cart_arc_device::io_7f_r), this));
+ io_space().install_write_handler(0x7f, 0x7f, write8smo_delegate(FUNC(msx_cart_arc_device::io_7f_w), this));
+ io_space().install_read_handler(0x7f, 0x7f, read8smo_delegate(FUNC(msx_cart_arc_device::io_7f_r), this));
}
@@ -39,7 +38,7 @@ void msx_cart_arc_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_arc_device::read_cart)
+uint8_t msx_cart_arc_device::read_cart(offs_t offset)
{
if (offset >= 0x4000 && offset < 0xc000)
{
@@ -49,7 +48,7 @@ READ8_MEMBER(msx_cart_arc_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_arc_device::io_7f_w)
+void msx_cart_arc_device::io_7f_w(uint8_t data)
{
if (data == 0x35)
{
@@ -58,7 +57,7 @@ WRITE8_MEMBER(msx_cart_arc_device::io_7f_w)
}
-READ8_MEMBER(msx_cart_arc_device::io_7f_r)
+uint8_t msx_cart_arc_device::io_7f_r()
{
return ((m_7f & 0x03) == 0x03) ? 0xda : 0xff;
}
diff --git a/src/devices/bus/msx_cart/arc.h b/src/devices/bus/msx_cart/arc.h
index 308589961fd..69f4427a01f 100644
--- a/src/devices/bus/msx_cart/arc.h
+++ b/src/devices/bus/msx_cart/arc.h
@@ -18,10 +18,7 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
-
- DECLARE_WRITE8_MEMBER(io_7f_w);
- DECLARE_READ8_MEMBER(io_7f_r);
+ virtual uint8_t read_cart(offs_t offset) override;
protected:
// device-level overrides
@@ -29,6 +26,9 @@ protected:
virtual void device_reset() override;
private:
+ void io_7f_w(uint8_t data);
+ uint8_t io_7f_r();
+
uint8_t m_7f;
};
diff --git a/src/devices/bus/msx_cart/ascii.cpp b/src/devices/bus/msx_cart/ascii.cpp
index c7598a8ccc0..7d1b354b404 100644
--- a/src/devices/bus/msx_cart/ascii.cpp
+++ b/src/devices/bus/msx_cart/ascii.cpp
@@ -27,8 +27,12 @@ msx_cart_ascii8_device::msx_cart_ascii8_device(const machine_config &mconfig, co
void msx_cart_ascii8_device::device_start()
{
save_item(NAME(m_selected_bank));
+}
+
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_ascii8_device::restore_banks), this));
+void msx_cart_ascii8_device::device_post_load()
+{
+ restore_banks();
}
@@ -72,7 +76,7 @@ void msx_cart_ascii8_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_ascii8_device::read_cart)
+uint8_t msx_cart_ascii8_device::read_cart(offs_t offset)
{
if ( offset >= 0x4000 && offset < 0xC000 )
{
@@ -82,7 +86,7 @@ READ8_MEMBER(msx_cart_ascii8_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_ascii8_device::write_cart)
+void msx_cart_ascii8_device::write_cart(offs_t offset, uint8_t data)
{
if (offset >= 0x6000 && offset < 0x8000)
{
@@ -111,8 +115,12 @@ msx_cart_ascii16_device::msx_cart_ascii16_device(const machine_config &mconfig,
void msx_cart_ascii16_device::device_start()
{
save_item(NAME(m_selected_bank));
+}
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_ascii16_device::restore_banks), this));
+
+void msx_cart_ascii16_device::device_post_load()
+{
+ restore_banks();
}
@@ -156,7 +164,7 @@ void msx_cart_ascii16_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_ascii16_device::read_cart)
+uint8_t msx_cart_ascii16_device::read_cart(offs_t offset)
{
if ( offset >= 0x4000 && offset < 0xC000 )
{
@@ -166,7 +174,7 @@ READ8_MEMBER(msx_cart_ascii16_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_ascii16_device::write_cart)
+void msx_cart_ascii16_device::write_cart(offs_t offset, uint8_t data)
{
if (offset >= 0x6000 && offset < 0x6800)
{
@@ -202,8 +210,12 @@ msx_cart_ascii8_sram_device::msx_cart_ascii8_sram_device(const machine_config &m
void msx_cart_ascii8_sram_device::device_start()
{
save_item(NAME(m_selected_bank));
+}
+
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_ascii8_sram_device::restore_banks), this));
+void msx_cart_ascii8_sram_device::device_post_load()
+{
+ restore_banks();
}
@@ -272,7 +284,7 @@ void msx_cart_ascii8_sram_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_ascii8_sram_device::read_cart)
+uint8_t msx_cart_ascii8_sram_device::read_cart(offs_t offset)
{
if ( offset >= 0x4000 && offset < 0xC000 )
{
@@ -287,7 +299,7 @@ READ8_MEMBER(msx_cart_ascii8_sram_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_ascii8_sram_device::write_cart)
+void msx_cart_ascii8_sram_device::write_cart(offs_t offset, uint8_t data)
{
if (offset >= 0x6000 && offset < 0x8000)
{
@@ -327,8 +339,12 @@ msx_cart_ascii16_sram_device::msx_cart_ascii16_sram_device(const machine_config
void msx_cart_ascii16_sram_device::device_start()
{
save_item(NAME(m_selected_bank));
+}
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_ascii16_sram_device::restore_banks), this));
+
+void msx_cart_ascii16_sram_device::device_post_load()
+{
+ restore_banks();
}
@@ -397,7 +413,7 @@ void msx_cart_ascii16_sram_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_ascii16_sram_device::read_cart)
+uint8_t msx_cart_ascii16_sram_device::read_cart(offs_t offset)
{
if ( offset >= 0x4000 && offset < 0xC000 )
{
@@ -419,7 +435,7 @@ READ8_MEMBER(msx_cart_ascii16_sram_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_ascii16_sram_device::write_cart)
+void msx_cart_ascii16_sram_device::write_cart(offs_t offset, uint8_t data)
{
if (offset >= 0x6000 && offset < 0x6800)
{
@@ -461,8 +477,12 @@ msx_cart_msxwrite_device::msx_cart_msxwrite_device(const machine_config &mconfig
void msx_cart_msxwrite_device::device_start()
{
save_item(NAME(m_selected_bank));
+}
+
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_msxwrite_device::restore_banks), this));
+void msx_cart_msxwrite_device::device_post_load()
+{
+ restore_banks();
}
@@ -506,7 +526,7 @@ void msx_cart_msxwrite_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_msxwrite_device::read_cart)
+uint8_t msx_cart_msxwrite_device::read_cart(offs_t offset)
{
if ( offset >= 0x4000 && offset < 0xC000 )
{
@@ -516,7 +536,7 @@ READ8_MEMBER(msx_cart_msxwrite_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_msxwrite_device::write_cart)
+void msx_cart_msxwrite_device::write_cart(offs_t offset, uint8_t data)
{
// The rom writes to 6fff and 7fff for banking, unknown whether
// other locations also trigger banking.
diff --git a/src/devices/bus/msx_cart/ascii.h b/src/devices/bus/msx_cart/ascii.h
index 2df178dc31d..0c5898fed40 100644
--- a/src/devices/bus/msx_cart/ascii.h
+++ b/src/devices/bus/msx_cart/ascii.h
@@ -22,13 +22,14 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_post_load() override;
void restore_banks();
@@ -46,13 +47,14 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_post_load() override;
void restore_banks();
@@ -70,13 +72,14 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_post_load() override;
void restore_banks();
@@ -97,13 +100,14 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_post_load() override;
void restore_banks();
@@ -124,13 +128,14 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_post_load() override;
void restore_banks();
diff --git a/src/devices/bus/msx_cart/bm_012.cpp b/src/devices/bus/msx_cart/bm_012.cpp
index db354b1e65c..f38215ac6cc 100644
--- a/src/devices/bus/msx_cart/bm_012.cpp
+++ b/src/devices/bus/msx_cart/bm_012.cpp
@@ -39,7 +39,8 @@ void msx_cart_bm_012_device::bm_012_memory_map(address_map &map)
}
-MACHINE_CONFIG_START(msx_cart_bm_012_device::device_add_mconfig)
+void msx_cart_bm_012_device::device_add_mconfig(machine_config &config)
+{
// 12MHz XTAL @ X1
// Toshiba TMPZ84C015AF-6 (@U5) components:
// - Z80
@@ -69,13 +70,12 @@ MACHINE_CONFIG_START(msx_cart_bm_012_device::device_add_mconfig)
m_bm012_pio->out_brdy_callback().set("tmpz84c015af", FUNC(tmpz84c015_device::strobe_b));
// MIDI ports
- MCFG_MIDI_PORT_ADD("mdin", midiin_slot, "midiin")
- MCFG_MIDI_RX_HANDLER(WRITELINE(*this, msx_cart_bm_012_device, midi_in))
+ MIDI_PORT(config, "mdin", midiin_slot, "midiin").rxd_handler().set(FUNC(msx_cart_bm_012_device::midi_in));
- MCFG_MIDI_PORT_ADD("mdthru", midiout_slot, "midiout")
+ MIDI_PORT(config, "mdthru", midiout_slot, "midiout");
- MCFG_MIDI_PORT_ADD("mdout", midiout_slot, "midiout")
-MACHINE_CONFIG_END
+ MIDI_PORT(config, "mdout", midiout_slot, "midiout");
+}
ROM_START( msx_cart_bm_012 )
@@ -94,9 +94,8 @@ const tiny_rom_entry *msx_cart_bm_012_device::device_rom_region() const
void msx_cart_bm_012_device::device_start()
{
// Install IO read/write handlers
- address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
- space.install_write_handler(0x70, 0x73, write8_delegate(FUNC(z80pio_device::write_alt), m_bm012_pio.target()));
- space.install_read_handler(0x70, 0x73, read8_delegate(FUNC(z80pio_device::read_alt), m_bm012_pio.target()));
+ io_space().install_write_handler(0x70, 0x73, write8_delegate(FUNC(z80pio_device::write_alt), m_bm012_pio.target()));
+ io_space().install_read_handler(0x70, 0x73, read8_delegate(FUNC(z80pio_device::read_alt), m_bm012_pio.target()));
}
diff --git a/src/devices/bus/msx_cart/cartridge.cpp b/src/devices/bus/msx_cart/cartridge.cpp
index 9c722e74872..3a3af30d191 100644
--- a/src/devices/bus/msx_cart/cartridge.cpp
+++ b/src/devices/bus/msx_cart/cartridge.cpp
@@ -26,6 +26,8 @@
#include "super_swangi.h"
#include "yamaha.h"
+#include "bus/msx_slot/cartridge.h"
+
void msx_cart(device_slot_interface &device)
{
@@ -72,7 +74,7 @@ void msx_cart(device_slot_interface &device)
msx_cart_interface::msx_cart_interface(const machine_config &mconfig, device_t &device)
: device_slot_card_interface(mconfig, device)
- , m_out_irq_cb(*this)
+ , m_exp(nullptr)
{
}
@@ -100,6 +102,21 @@ void msx_cart_interface::sram_alloc(uint32_t size)
std::fill_n(m_sram.begin(), size, 0x00);
}
+WRITE_LINE_MEMBER(msx_cart_interface::irq_out)
+{
+ m_exp->irq_out(state);
+}
+
+address_space &msx_cart_interface::memory_space() const
+{
+ return m_exp->memory_space();
+}
+
+address_space &msx_cart_interface::io_space() const
+{
+ return m_exp->io_space();
+}
+
// Several yamaha machines had 60 pin expansion slots. The pinouts of these slots was
// exactly the same as the regular 50 pin cartridge slots. The lowest 10 pins are simply
diff --git a/src/devices/bus/msx_cart/cartridge.h b/src/devices/bus/msx_cart/cartridge.h
index 381ec09e566..529d2f0a081 100644
--- a/src/devices/bus/msx_cart/cartridge.h
+++ b/src/devices/bus/msx_cart/cartridge.h
@@ -10,19 +10,26 @@ void msx_cart(device_slot_interface &device);
void msx_yamaha_60pin(device_slot_interface &device); // 60 pin expansion slots as found in yamaha machines
+class msx_slot_cartridge_device;
+
class msx_cart_interface : public device_slot_card_interface
{
-public:
- template <class Object> void set_out_irq_cb(Object &&cb) { m_out_irq_cb.set_callback(std::forward<Object>(cb)); }
+ friend class msx_slot_cartridge_device;
+public:
// This is called after loading cartridge contents and allows the cartridge
// implementation to perform some additional initialization based on the
// cartridge contents.
virtual void initialize_cartridge() { }
+ virtual void interface_pre_start() override { assert(m_exp != nullptr); }
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_cart) { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(write_cart) { }
+ virtual uint8_t read_cart(offs_t offset) { return 0xff; }
+ virtual void write_cart(offs_t offset, uint8_t data) { }
+
+ DECLARE_WRITE_LINE_MEMBER(irq_out);
+ address_space &memory_space() const;
+ address_space &io_space() const;
// ROM/RAM/SRAM management
// Mainly used by the cartridge slot when loading images
@@ -43,13 +50,13 @@ public:
protected:
msx_cart_interface(const machine_config &mconfig, device_t &device);
- virtual void interface_pre_start() override { m_out_irq_cb.resolve_safe(); }
-
std::vector<uint8_t> m_rom;
std::vector<uint8_t> m_ram;
std::vector<uint8_t> m_rom_vlm5030;
std::vector<uint8_t> m_sram;
- devcb_write_line m_out_irq_cb;
+
+private:
+ msx_slot_cartridge_device *m_exp;
};
diff --git a/src/devices/bus/msx_cart/crossblaim.cpp b/src/devices/bus/msx_cart/crossblaim.cpp
index dfd7907ac46..6494e492f5b 100644
--- a/src/devices/bus/msx_cart/crossblaim.cpp
+++ b/src/devices/bus/msx_cart/crossblaim.cpp
@@ -21,8 +21,12 @@ msx_cart_crossblaim_device::msx_cart_crossblaim_device(const machine_config &mco
void msx_cart_crossblaim_device::device_start()
{
save_item(NAME(m_selected_bank));
+}
+
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_crossblaim_device::restore_banks), this));
+void msx_cart_crossblaim_device::device_post_load()
+{
+ restore_banks();
}
@@ -58,7 +62,7 @@ void msx_cart_crossblaim_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_crossblaim_device::read_cart)
+uint8_t msx_cart_crossblaim_device::read_cart(offs_t offset)
{
uint8_t *bank_base = m_bank_base[offset >> 14];
@@ -71,7 +75,7 @@ READ8_MEMBER(msx_cart_crossblaim_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_crossblaim_device::write_cart)
+void msx_cart_crossblaim_device::write_cart(offs_t offset, uint8_t data)
{
m_selected_bank = data & 3;
if (m_selected_bank == 0)
diff --git a/src/devices/bus/msx_cart/crossblaim.h b/src/devices/bus/msx_cart/crossblaim.h
index a1321dd06df..04a44c1d905 100644
--- a/src/devices/bus/msx_cart/crossblaim.h
+++ b/src/devices/bus/msx_cart/crossblaim.h
@@ -18,13 +18,14 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_post_load() override;
void restore_banks();
diff --git a/src/devices/bus/msx_cart/disk.cpp b/src/devices/bus/msx_cart/disk.cpp
index a0e03e54920..7bbbdd292c0 100644
--- a/src/devices/bus/msx_cart/disk.cpp
+++ b/src/devices/bus/msx_cart/disk.cpp
@@ -197,7 +197,8 @@ void msx_cart_disk_device::initialize_cartridge()
}
-MACHINE_CONFIG_START(msx_cart_vy0010_device::device_add_mconfig)
+void msx_cart_vy0010_device::device_add_mconfig(machine_config &config)
+{
// From VY-0010 schematic:
// HLT pulled high
// SSO/-ENMF + -DDEN + ENP + -5/8 - pulled low
@@ -206,60 +207,63 @@ MACHINE_CONFIG_START(msx_cart_vy0010_device::device_add_mconfig)
m_fdc->set_force_ready(true);
// Single sided 3.5" floppy drive
- MCFG_FLOPPY_DRIVE_ADD("fdc:0", msx_floppies, "35ssdd", msx_cart_disk_device::floppy_formats)
+ FLOPPY_CONNECTOR(config, "fdc:0", msx_floppies, "35ssdd", msx_cart_disk_device::floppy_formats);
// Attach software lists
// We do not know in what kind of machine the user has inserted the floppy interface
// so we list all msx floppy software lists.
//
- MCFG_SOFTWARE_LIST_ADD("flop_list","msx2_flop")
- MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("msx1_flop_list","msx1_flop")
-MACHINE_CONFIG_END
+ SOFTWARE_LIST(config, "flop_list").set_original("msx2_flop");
+ SOFTWARE_LIST(config, "msx1_flop_list").set_compatible("msx1_flop");
+}
-MACHINE_CONFIG_START(msx_cart_fsfd1_device::device_add_mconfig)
+void msx_cart_fsfd1_device::device_add_mconfig(machine_config &config)
+{
WD2793(config, m_fdc, 4_MHz_XTAL / 4);
// Double sided 3.5" floppy drive
- MCFG_FLOPPY_DRIVE_ADD("fdc:0", msx_floppies, "35dd", msx_cart_disk_device::floppy_formats)
+ FLOPPY_CONNECTOR(config, "fdc:0", msx_floppies, "35dd", msx_cart_disk_device::floppy_formats);
// Attach software lists
// We do not know in what kind of machine the user has inserted the floppy interface
// so we list all msx floppy software lists.
//
- MCFG_SOFTWARE_LIST_ADD("flop_list","msx2_flop")
- MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("msx1_flop_list","msx1_flop")
-MACHINE_CONFIG_END
+ SOFTWARE_LIST(config, "flop_list").set_original("msx2_flop");
+ SOFTWARE_LIST(config, "msx1_flop_list").set_compatible("msx1_flop");
+}
-MACHINE_CONFIG_START(msx_cart_fsfd1a_device::device_add_mconfig)
+void msx_cart_fsfd1a_device::device_add_mconfig(machine_config &config)
+{
TC8566AF(config, m_fdc, 16'000'000);
// Double sided 3.5" floppy drive
- MCFG_FLOPPY_DRIVE_ADD("fdc:0", msx_floppies, "35dd", msx_cart_disk_device::floppy_formats)
+ FLOPPY_CONNECTOR(config, "fdc:0", msx_floppies, "35dd", msx_cart_disk_device::floppy_formats);
// Attach software lists
// We do not know in what kind of machine the user has inserted the floppy interface
// so we list all msx floppy software lists.
//
- MCFG_SOFTWARE_LIST_ADD("flop_list","msx2_flop")
- MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("msx1_flop_list","msx1_flop")
-MACHINE_CONFIG_END
+ SOFTWARE_LIST(config, "flop_list").set_original("msx2_flop");
+ SOFTWARE_LIST(config, "msx1_flop_list").set_compatible("msx1_flop");
+}
-MACHINE_CONFIG_START(msx_cart_fscf351_device::device_add_mconfig)
+void msx_cart_fscf351_device::device_add_mconfig(machine_config &config)
+{
MB8877(config, m_fdc, 4_MHz_XTAL / 4);
m_fdc->set_force_ready(true);
// Double sided 3.5" floppy drive
- MCFG_FLOPPY_DRIVE_ADD("fdc:0", msx_floppies, "35dd", msx_cart_disk_device::floppy_formats)
+ FLOPPY_CONNECTOR(config, "fdc:0", msx_floppies, "35dd", msx_cart_disk_device::floppy_formats);
// Attach software lists
// We do not know in what kind of machine the user has inserted the floppy interface
// so we list all msx floppy software lists.
//
- MCFG_SOFTWARE_LIST_ADD("flop_list","msx2_flop")
- MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("msx1_flop_list","msx1_flop")
-MACHINE_CONFIG_END
+ SOFTWARE_LIST(config, "flop_list").set_original("msx2_flop");
+ SOFTWARE_LIST(config, "msx1_flop_list").set_compatible("msx1_flop");
+}
void msx_cart_disk_type1_device::device_start()
@@ -268,12 +272,10 @@ void msx_cart_disk_type1_device::device_start()
save_item(NAME(m_side_control));
save_item(NAME(m_control));
-
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_disk_type1_device::post_load), this));
}
-void msx_cart_disk_type1_device::post_load()
+void msx_cart_disk_type1_device::device_post_load()
{
uint8_t data = m_control;
@@ -338,7 +340,7 @@ void msx_cart_disk_type1_device::device_reset()
}
-READ8_MEMBER(msx_cart_disk_type1_device::read_cart)
+uint8_t msx_cart_disk_type1_device::read_cart(offs_t offset)
{
switch (offset)
{
@@ -379,7 +381,7 @@ READ8_MEMBER(msx_cart_disk_type1_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_disk_type1_device::write_cart)
+void msx_cart_disk_type1_device::write_cart(offs_t offset, uint8_t data)
{
switch (offset)
{
@@ -425,8 +427,6 @@ void msx_cart_disk_type2_device::device_start()
m_led.resolve();
save_item(NAME(m_control));
-
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_disk_type2_device::post_load), this));
}
@@ -436,7 +436,7 @@ void msx_cart_disk_type2_device::device_reset()
}
-void msx_cart_disk_type2_device::post_load()
+void msx_cart_disk_type2_device::device_post_load()
{
uint8_t data = m_control;
@@ -483,7 +483,7 @@ void msx_cart_disk_type2_device::set_control(uint8_t data)
}
-READ8_MEMBER(msx_cart_disk_type2_device::read_cart)
+uint8_t msx_cart_disk_type2_device::read_cart(offs_t offset)
{
switch (offset)
{
@@ -516,7 +516,7 @@ READ8_MEMBER(msx_cart_disk_type2_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_disk_type2_device::write_cart)
+void msx_cart_disk_type2_device::write_cart(offs_t offset, uint8_t data)
{
switch (offset)
{
@@ -564,17 +564,17 @@ void msx_cart_fsfd1a_device::device_reset()
}
-READ8_MEMBER(msx_cart_fsfd1a_device::read_cart)
+uint8_t msx_cart_fsfd1a_device::read_cart(offs_t offset)
{
switch (offset)
{
case 0x7ffa:
case 0xbffa:
- return m_fdc->msr_r(space, 4);
+ return m_fdc->msr_r();
case 0x7ffb:
case 0xbffb:
- return m_fdc->fifo_r(space, 5);
+ return m_fdc->fifo_r();
}
if (offset >= 0x4000 && offset < 0x8000)
@@ -585,23 +585,23 @@ READ8_MEMBER(msx_cart_fsfd1a_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_fsfd1a_device::write_cart)
+void msx_cart_fsfd1a_device::write_cart(offs_t offset, uint8_t data)
{
switch (offset)
{
case 0x7ff8:
case 0xbff8:
- m_fdc->dor_w(space, 2, data);
+ m_fdc->dor_w(data);
break;
case 0x7ff9:
case 0xbff9:
- m_fdc->cr1_w(space, 3, data);
+ m_fdc->cr1_w(data);
break;
case 0x7ffb:
case 0xbffb:
- m_fdc->fifo_w(space, 5, data);
+ m_fdc->fifo_w(data);
break;
default:
diff --git a/src/devices/bus/msx_cart/disk.h b/src/devices/bus/msx_cart/disk.h
index 908f2ef7229..ce238992349 100644
--- a/src/devices/bus/msx_cart/disk.h
+++ b/src/devices/bus/msx_cart/disk.h
@@ -45,8 +45,8 @@ protected:
class msx_cart_disk_type1_device : public msx_cart_disk_wd_device
{
public:
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
msx_cart_disk_type1_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@@ -54,8 +54,7 @@ protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
-
- void post_load();
+ virtual void device_post_load() override;
output_finder<> m_led;
uint8_t m_side_control;
@@ -69,8 +68,8 @@ protected:
class msx_cart_disk_type2_device : public msx_cart_disk_wd_device
{
public:
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
msx_cart_disk_type2_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@@ -78,8 +77,7 @@ protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
-
- void post_load();
+ virtual void device_post_load() override;
output_finder<> m_led;
uint8_t m_control;
@@ -139,8 +137,8 @@ protected:
// device-level overrides
virtual void device_add_mconfig(machine_config &config) override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
};
diff --git a/src/devices/bus/msx_cart/dooly.cpp b/src/devices/bus/msx_cart/dooly.cpp
index d1d3ad9ff39..a0c4c7b4f83 100644
--- a/src/devices/bus/msx_cart/dooly.cpp
+++ b/src/devices/bus/msx_cart/dooly.cpp
@@ -36,7 +36,7 @@ void msx_cart_dooly_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_dooly_device::read_cart)
+uint8_t msx_cart_dooly_device::read_cart(offs_t offset)
{
if (offset >= 0x4000 && offset < 0xc000)
{
@@ -54,7 +54,7 @@ READ8_MEMBER(msx_cart_dooly_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_dooly_device::write_cart)
+void msx_cart_dooly_device::write_cart(offs_t offset, uint8_t data)
{
if (offset >= 0x4000 && offset < 0xc000)
{
diff --git a/src/devices/bus/msx_cart/dooly.h b/src/devices/bus/msx_cart/dooly.h
index 3ef7b365c82..76f58ae762d 100644
--- a/src/devices/bus/msx_cart/dooly.h
+++ b/src/devices/bus/msx_cart/dooly.h
@@ -18,8 +18,8 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
diff --git a/src/devices/bus/msx_cart/fmpac.cpp b/src/devices/bus/msx_cart/fmpac.cpp
index 7054c8c366a..a5229a6c61e 100644
--- a/src/devices/bus/msx_cart/fmpac.cpp
+++ b/src/devices/bus/msx_cart/fmpac.cpp
@@ -29,12 +29,12 @@ msx_cart_fmpac_device::msx_cart_fmpac_device(const machine_config &mconfig, cons
}
-MACHINE_CONFIG_START(msx_cart_fmpac_device::device_add_mconfig)
+void msx_cart_fmpac_device::device_add_mconfig(machine_config &config)
+{
// This is actually incorrect. The sound output is passed back into the MSX machine where it is mixed internally and output through the system 'speaker'.
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("ym2413", YM2413, XTAL(10'738'635)/3)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
-MACHINE_CONFIG_END
+ YM2413(config, m_ym2413, XTAL(10'738'635)/3).add_route(ALL_OUTPUTS, "mono", 0.40);
+}
void msx_cart_fmpac_device::device_start()
@@ -46,11 +46,14 @@ void msx_cart_fmpac_device::device_start()
save_item(NAME(m_1fff));
save_item(NAME(m_7ff6));
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_fmpac_device::restore_banks), this));
-
// Install IO read/write handlers
- address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
- space.install_write_handler(0x7c, 0x7d, write8_delegate(FUNC(msx_cart_fmpac_device::write_ym2413), this));
+ io_space().install_write_handler(0x7c, 0x7d, write8sm_delegate(FUNC(msx_cart_fmpac_device::write_ym2413), this));
+}
+
+
+void msx_cart_fmpac_device::device_post_load()
+{
+ restore_banks();
}
@@ -87,7 +90,7 @@ void msx_cart_fmpac_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_fmpac_device::read_cart)
+uint8_t msx_cart_fmpac_device::read_cart(offs_t offset)
{
if (offset >= 0x4000 && offset < 0x8000)
{
@@ -116,7 +119,7 @@ READ8_MEMBER(msx_cart_fmpac_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_fmpac_device::write_cart)
+void msx_cart_fmpac_device::write_cart(offs_t offset, uint8_t data)
{
if (offset >= 0x4000 && offset < 0x6000)
{
@@ -141,7 +144,7 @@ WRITE8_MEMBER(msx_cart_fmpac_device::write_cart)
case 0x7ff5:
if (m_opll_active)
{
- m_ym2413->write(space, offset & 1, data);
+ m_ym2413->write(offset & 1, data);
}
break;
@@ -159,10 +162,10 @@ WRITE8_MEMBER(msx_cart_fmpac_device::write_cart)
}
-WRITE8_MEMBER(msx_cart_fmpac_device::write_ym2413)
+void msx_cart_fmpac_device::write_ym2413(offs_t offset, uint8_t data)
{
if (m_opll_active)
{
- m_ym2413->write(space, offset & 1, data);
+ m_ym2413->write(offset & 1, data);
}
}
diff --git a/src/devices/bus/msx_cart/fmpac.h b/src/devices/bus/msx_cart/fmpac.h
index 7100fe4a07c..a0f660b1620 100644
--- a/src/devices/bus/msx_cart/fmpac.h
+++ b/src/devices/bus/msx_cart/fmpac.h
@@ -19,14 +19,13 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
-
- DECLARE_WRITE8_MEMBER(write_ym2413);
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_post_load() override;
// device-level overrides
virtual void device_add_mconfig(machine_config &config) override;
@@ -34,6 +33,8 @@ protected:
void restore_banks();
private:
+ void write_ym2413(offs_t offset, uint8_t data);
+
required_device<ym2413_device> m_ym2413;
uint8_t m_selected_bank;
diff --git a/src/devices/bus/msx_cart/fs_sr022.cpp b/src/devices/bus/msx_cart/fs_sr022.cpp
index 7e0eac793df..bb84a759214 100644
--- a/src/devices/bus/msx_cart/fs_sr022.cpp
+++ b/src/devices/bus/msx_cart/fs_sr022.cpp
@@ -38,7 +38,7 @@ void msx_cart_fs_sr022_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_fs_sr022_device::read_cart)
+uint8_t msx_cart_fs_sr022_device::read_cart(offs_t offset)
{
if (offset >= 0x4000 && offset < 0xc000)
{
@@ -52,7 +52,7 @@ READ8_MEMBER(msx_cart_fs_sr022_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_fs_sr022_device::write_cart)
+void msx_cart_fs_sr022_device::write_cart(offs_t offset, uint8_t data)
{
switch (offset)
{
diff --git a/src/devices/bus/msx_cart/fs_sr022.h b/src/devices/bus/msx_cart/fs_sr022.h
index bf3259090e1..2456b90a101 100644
--- a/src/devices/bus/msx_cart/fs_sr022.h
+++ b/src/devices/bus/msx_cart/fs_sr022.h
@@ -18,8 +18,8 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
diff --git a/src/devices/bus/msx_cart/halnote.cpp b/src/devices/bus/msx_cart/halnote.cpp
index 013d2b83680..43f7947ec2c 100644
--- a/src/devices/bus/msx_cart/halnote.cpp
+++ b/src/devices/bus/msx_cart/halnote.cpp
@@ -19,8 +19,12 @@ msx_cart_halnote_device::msx_cart_halnote_device(const machine_config &mconfig,
void msx_cart_halnote_device::device_start()
{
save_item(NAME(m_selected_bank));
+}
+
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_halnote_device::restore_banks), this));
+void msx_cart_halnote_device::device_post_load()
+{
+ restore_banks();
}
@@ -84,7 +88,7 @@ void msx_cart_halnote_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_halnote_device::read_cart)
+uint8_t msx_cart_halnote_device::read_cart(offs_t offset)
{
if (offset >= 0xc000)
{
@@ -106,7 +110,7 @@ READ8_MEMBER(msx_cart_halnote_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_halnote_device::write_cart)
+void msx_cart_halnote_device::write_cart(offs_t offset, uint8_t data)
{
if (offset < 0x4000)
{
diff --git a/src/devices/bus/msx_cart/halnote.h b/src/devices/bus/msx_cart/halnote.h
index ad64d2539ee..a9c1972afeb 100644
--- a/src/devices/bus/msx_cart/halnote.h
+++ b/src/devices/bus/msx_cart/halnote.h
@@ -18,13 +18,14 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_post_load() override;
void restore_banks();
diff --git a/src/devices/bus/msx_cart/hfox.cpp b/src/devices/bus/msx_cart/hfox.cpp
index d7fb793e42d..181d9710fcc 100644
--- a/src/devices/bus/msx_cart/hfox.cpp
+++ b/src/devices/bus/msx_cart/hfox.cpp
@@ -19,8 +19,12 @@ msx_cart_hfox_device::msx_cart_hfox_device(const machine_config &mconfig, const
void msx_cart_hfox_device::device_start()
{
save_item(NAME(m_selected_bank));
+}
+
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_hfox_device::restore_banks), this));
+void msx_cart_hfox_device::device_post_load()
+{
+ restore_banks();
}
@@ -48,7 +52,7 @@ void msx_cart_hfox_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_hfox_device::read_cart)
+uint8_t msx_cart_hfox_device::read_cart(offs_t offset)
{
if (offset >= 0x4000 && offset < 0xc000)
{
@@ -58,7 +62,7 @@ READ8_MEMBER(msx_cart_hfox_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_hfox_device::write_cart)
+void msx_cart_hfox_device::write_cart(offs_t offset, uint8_t data)
{
switch (offset)
{
diff --git a/src/devices/bus/msx_cart/hfox.h b/src/devices/bus/msx_cart/hfox.h
index debcbc31308..6254bae3610 100644
--- a/src/devices/bus/msx_cart/hfox.h
+++ b/src/devices/bus/msx_cart/hfox.h
@@ -16,13 +16,14 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_post_load() override;
void restore_banks();
diff --git a/src/devices/bus/msx_cart/holy_quran.cpp b/src/devices/bus/msx_cart/holy_quran.cpp
index 4c44656a9e3..046ed194502 100644
--- a/src/devices/bus/msx_cart/holy_quran.cpp
+++ b/src/devices/bus/msx_cart/holy_quran.cpp
@@ -30,8 +30,12 @@ void msx_cart_holy_quran_device::device_start()
{
save_item(NAME(m_selected_bank));
save_item(NAME(m_decrypt));
+}
+
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_holy_quran_device::restore_banks), this));
+void msx_cart_holy_quran_device::device_post_load()
+{
+ restore_banks();
}
@@ -64,7 +68,7 @@ void msx_cart_holy_quran_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_holy_quran_device::read_cart)
+uint8_t msx_cart_holy_quran_device::read_cart(offs_t offset)
{
if (offset >= 0x4000 && offset < 0xc000)
{
@@ -88,7 +92,7 @@ READ8_MEMBER(msx_cart_holy_quran_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_holy_quran_device::write_cart)
+void msx_cart_holy_quran_device::write_cart(offs_t offset, uint8_t data)
{
switch (offset)
{
diff --git a/src/devices/bus/msx_cart/holy_quran.h b/src/devices/bus/msx_cart/holy_quran.h
index b805282790c..8d63a8271d9 100644
--- a/src/devices/bus/msx_cart/holy_quran.h
+++ b/src/devices/bus/msx_cart/holy_quran.h
@@ -18,13 +18,14 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_post_load() override;
void restore_banks();
diff --git a/src/devices/bus/msx_cart/konami.cpp b/src/devices/bus/msx_cart/konami.cpp
index e1d4e35321f..f5ac42be362 100644
--- a/src/devices/bus/msx_cart/konami.cpp
+++ b/src/devices/bus/msx_cart/konami.cpp
@@ -35,8 +35,12 @@ msx_cart_konami_device::msx_cart_konami_device(const machine_config &mconfig, co
void msx_cart_konami_device::device_start()
{
save_item(NAME(m_selected_bank));
+}
+
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_konami_device::restore_banks), this));
+void msx_cart_konami_device::device_post_load()
+{
+ restore_banks();
}
@@ -84,13 +88,13 @@ void msx_cart_konami_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_konami_device::read_cart)
+uint8_t msx_cart_konami_device::read_cart(offs_t offset)
{
return m_bank_base[offset >> 13][offset & 0x1fff];
}
-WRITE8_MEMBER(msx_cart_konami_device::write_cart)
+void msx_cart_konami_device::write_cart(offs_t offset, uint8_t data)
{
switch (offset & 0xe000)
{
@@ -141,20 +145,24 @@ msx_cart_konami_scc_device::msx_cart_konami_scc_device(const machine_config &mco
}
-MACHINE_CONFIG_START(msx_cart_konami_scc_device::device_add_mconfig)
+void msx_cart_konami_scc_device::device_add_mconfig(machine_config &config)
+{
// This is actually incorrect. The sound output is passed back into the MSX machine where it is mixed internally and output through the system 'speaker'.
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("k051649", K051649, XTAL(10'738'635)/3/2)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
-MACHINE_CONFIG_END
+ K051649(config, m_k051649, XTAL(10'738'635)/3/2).add_route(ALL_OUTPUTS, "mono", 0.15);
+}
void msx_cart_konami_scc_device::device_start()
{
save_item(NAME(m_selected_bank));
save_item(NAME(m_scc_active));
+}
+
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_konami_scc_device::restore_banks), this));
+void msx_cart_konami_scc_device::device_post_load()
+{
+ restore_banks();
}
@@ -203,7 +211,7 @@ void msx_cart_konami_scc_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_konami_scc_device::read_cart)
+uint8_t msx_cart_konami_scc_device::read_cart(offs_t offset)
{
if ( m_scc_active && offset >= 0x9800 && offset < 0xa000 )
{
@@ -211,13 +219,13 @@ READ8_MEMBER(msx_cart_konami_scc_device::read_cart)
{
if ((offset & 0xff) >= 0xe0)
{
- return m_k051649->k051649_test_r(space, offset & 0xff);
+ return m_k051649->k051649_test_r();
}
return 0xff;
}
else
{
- return m_k051649->k051649_waveform_r(space, offset & 0x7f);
+ return m_k051649->k051649_waveform_r(offset & 0x7f);
}
}
@@ -225,7 +233,7 @@ READ8_MEMBER(msx_cart_konami_scc_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_konami_scc_device::write_cart)
+void msx_cart_konami_scc_device::write_cart(offs_t offset, uint8_t data)
{
switch (offset & 0xf800)
{
@@ -255,27 +263,27 @@ WRITE8_MEMBER(msx_cart_konami_scc_device::write_cart)
if (offset < 0x80)
{
- m_k051649->k051649_waveform_w(space, offset, data);
+ m_k051649->k051649_waveform_w(offset, data);
}
else if (offset < 0xa0)
{
offset &= 0x0f;
if (offset < 0x0a)
{
- m_k051649->k051649_frequency_w(space, offset, data);
+ m_k051649->k051649_frequency_w(offset, data);
}
else if (offset < 0x0f)
{
- m_k051649->k051649_volume_w(space, offset - 0xa, data);
+ m_k051649->k051649_volume_w(offset - 0xa, data);
}
else
{
- m_k051649->k051649_keyonoff_w(space, 0, data);
+ m_k051649->k051649_keyonoff_w(data);
}
}
else if (offset >= 0xe0)
{
- m_k051649->k051649_test_w(space, offset, data);
+ m_k051649->k051649_test_w(data);
}
}
break;
@@ -311,8 +319,12 @@ msx_cart_gamemaster2_device::msx_cart_gamemaster2_device(const machine_config &m
void msx_cart_gamemaster2_device::device_start()
{
save_item(NAME(m_selected_bank));
+}
+
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_gamemaster2_device::restore_banks), this));
+void msx_cart_gamemaster2_device::device_post_load()
+{
+ restore_banks();
}
@@ -397,7 +409,7 @@ void msx_cart_gamemaster2_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_gamemaster2_device::read_cart)
+uint8_t msx_cart_gamemaster2_device::read_cart(offs_t offset)
{
uint8_t bank = offset >> 13;
@@ -431,7 +443,7 @@ READ8_MEMBER(msx_cart_gamemaster2_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_gamemaster2_device::write_cart)
+void msx_cart_gamemaster2_device::write_cart(offs_t offset, uint8_t data)
{
switch (offset & 0xf000)
{
@@ -472,13 +484,15 @@ msx_cart_synthesizer_device::msx_cart_synthesizer_device(const machine_config &m
}
-MACHINE_CONFIG_START(msx_cart_synthesizer_device::device_add_mconfig)
+void msx_cart_synthesizer_device::device_add_mconfig(machine_config &config)
+{
// This is actually incorrect. The sound output is passed back into the MSX machine where it is mixed internally and output through the system 'speaker'.
SPEAKER(config, "speaker").front_center();
- MCFG_DEVICE_ADD("dac", DAC_8BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.1) // unknown DAC
- MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
- MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT)
-MACHINE_CONFIG_END
+ DAC_8BIT_R2R(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.1); // unknown DAC
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
+ vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
+ vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
+}
void msx_cart_synthesizer_device::device_start()
@@ -497,7 +511,7 @@ void msx_cart_synthesizer_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_synthesizer_device::read_cart)
+uint8_t msx_cart_synthesizer_device::read_cart(offs_t offset)
{
if (offset >= 0x4000 && offset < 0xc000 )
{
@@ -507,7 +521,7 @@ READ8_MEMBER(msx_cart_synthesizer_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_synthesizer_device::write_cart)
+void msx_cart_synthesizer_device::write_cart(offs_t offset, uint8_t data)
{
if ((offset & 0xc010) == 0x4000)
{
@@ -545,12 +559,12 @@ msx_cart_konami_sound_device::msx_cart_konami_sound_device(const machine_config
}
-MACHINE_CONFIG_START(msx_cart_konami_sound_device::device_add_mconfig)
+void msx_cart_konami_sound_device::device_add_mconfig(machine_config &config)
+{
// This is actually incorrect. The sound output is passed back into the MSX machine where it is mixed internally and output through the system 'speaker'.
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("k052539", K051649, XTAL(10'738'635)/3/2)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
-MACHINE_CONFIG_END
+ K051649(config, m_k052539, XTAL(10'738'635)/3/2).add_route(ALL_OUTPUTS, "mono", 0.15);
+}
void msx_cart_konami_sound_device::device_start()
@@ -559,8 +573,12 @@ void msx_cart_konami_sound_device::device_start()
save_item(NAME(m_scc_active));
save_item(NAME(m_sccplus_active));
save_item(NAME(m_ram_enabled));
+}
+
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_konami_sound_device::restore_banks), this));
+void msx_cart_konami_sound_device::device_post_load()
+{
+ restore_banks();
}
@@ -618,14 +636,14 @@ void msx_cart_konami_sound_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_konami_sound_device::read_cart)
+uint8_t msx_cart_konami_sound_device::read_cart(offs_t offset)
{
if ( m_scc_active && offset >= 0x9800 && offset < 0x9fe0 )
{
offset &= 0xff;
if (offset < 0x80)
{
- return m_k052539->k051649_waveform_r(space, offset);
+ return m_k052539->k051649_waveform_r(offset);
}
if (offset < 0xa0)
{
@@ -633,11 +651,11 @@ READ8_MEMBER(msx_cart_konami_sound_device::read_cart)
}
if (offset < 0xc0)
{
- return m_k052539->k051649_waveform_r(space, offset & 0x9f);
+ return m_k052539->k051649_waveform_r(offset & 0x9f);
}
if (offset < 0xe0)
{
- return m_k052539->k051649_test_r(space, offset & 0xff);
+ return m_k052539->k051649_test_r();
}
return 0xff;
}
@@ -647,11 +665,11 @@ READ8_MEMBER(msx_cart_konami_sound_device::read_cart)
if (offset < 0xa0)
{
- return m_k052539->k052539_waveform_r(space, offset);
+ return m_k052539->k052539_waveform_r(offset);
}
if (offset >= 0xc0 && offset < 0xe0)
{
- return m_k052539->k051649_test_r(space, offset);
+ return m_k052539->k051649_test_r();
}
return 0xff;
}
@@ -666,7 +684,7 @@ READ8_MEMBER(msx_cart_konami_sound_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_konami_sound_device::write_cart)
+void msx_cart_konami_sound_device::write_cart(offs_t offset, uint8_t data)
{
switch (offset & 0xe000)
{
@@ -714,27 +732,27 @@ WRITE8_MEMBER(msx_cart_konami_sound_device::write_cart)
if (offset < 0x80)
{
- m_k052539->k051649_waveform_w(space, offset, data);
+ m_k052539->k051649_waveform_w(offset, data);
}
else if (offset < 0xa0)
{
offset &= 0x0f;
if (offset < 0x0a)
{
- m_k052539->k051649_frequency_w(space, offset, data);
+ m_k052539->k051649_frequency_w(offset, data);
}
else if (offset < 0x0f)
{
- m_k052539->k051649_volume_w(space, offset - 0xa, data);
+ m_k052539->k051649_volume_w(offset - 0xa, data);
}
else
{
- m_k052539->k051649_keyonoff_w(space, 0, data);
+ m_k052539->k051649_keyonoff_w(data);
}
}
else if (offset >= 0xe0)
{
- m_k052539->k051649_test_w(space, offset, data);
+ m_k052539->k051649_test_w(data);
}
}
break;
@@ -777,27 +795,27 @@ WRITE8_MEMBER(msx_cart_konami_sound_device::write_cart)
offset &= 0xff;
if (offset < 0xa0)
{
- m_k052539->k052539_waveform_w(space, offset, data);
+ m_k052539->k052539_waveform_w(offset, data);
}
else if (offset < 0xc0)
{
offset &= 0x0f;
if (offset < 0x0a)
{
- m_k052539->k051649_frequency_w(space, offset, data);
+ m_k052539->k051649_frequency_w(offset, data);
}
else if (offset < 0x0f)
{
- m_k052539->k051649_volume_w(space, offset - 0x0a, data);
+ m_k052539->k051649_volume_w(offset - 0x0a, data);
}
else if (offset == 0x0f)
{
- m_k052539->k051649_keyonoff_w(space, 0, data);
+ m_k052539->k051649_keyonoff_w(data);
}
}
else if (offset < 0xe0)
{
- m_k052539->k051649_test_w(space, offset, data);
+ m_k052539->k051649_test_w(data);
}
}
}
@@ -872,22 +890,22 @@ void msx_cart_keyboard_master_device::vlm_map(address_map &map)
}
-MACHINE_CONFIG_START(msx_cart_keyboard_master_device::device_add_mconfig)
+void msx_cart_keyboard_master_device::device_add_mconfig(machine_config &config)
+{
// This is actually incorrect. The sound output is passed back into the MSX machine where it is mixed internally and output through the system 'speaker'.
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("vlm5030", VLM5030, XTAL(3'579'545))
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
- MCFG_DEVICE_ADDRESS_MAP(0, vlm_map)
-MACHINE_CONFIG_END
+ VLM5030(config, m_vlm5030, XTAL(3'579'545));
+ m_vlm5030->add_route(ALL_OUTPUTS, "mono", 0.40);
+ m_vlm5030->set_addrmap(0, &msx_cart_keyboard_master_device::vlm_map);
+}
void msx_cart_keyboard_master_device::device_start()
{
// Install IO read/write handlers
- address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
- space.install_write_handler(0x00, 0x00, write8_delegate(FUNC(vlm5030_device::data_w), m_vlm5030.target()));
- space.install_write_handler(0x20, 0x20, write8_delegate(FUNC(msx_cart_keyboard_master_device::io_20_w), this));
- space.install_read_handler(0x00, 0x00, read8_delegate(FUNC(msx_cart_keyboard_master_device::io_00_r), this));
+ io_space().install_write_handler(0x00, 0x00, write8smo_delegate(FUNC(vlm5030_device::data_w), m_vlm5030.target()));
+ io_space().install_write_handler(0x20, 0x20, write8smo_delegate(FUNC(msx_cart_keyboard_master_device::io_20_w), this));
+ io_space().install_read_handler(0x00, 0x00, read8smo_delegate(FUNC(msx_cart_keyboard_master_device::io_00_r), this));
}
@@ -900,7 +918,7 @@ void msx_cart_keyboard_master_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_keyboard_master_device::read_cart)
+uint8_t msx_cart_keyboard_master_device::read_cart(offs_t offset)
{
if (offset >= 0x4000 && offset < 0x8000)
{
@@ -910,13 +928,13 @@ READ8_MEMBER(msx_cart_keyboard_master_device::read_cart)
}
-READ8_MEMBER(msx_cart_keyboard_master_device::read_vlm)
+uint8_t msx_cart_keyboard_master_device::read_vlm(offs_t offset)
{
return m_rom_vlm5030[offset];
}
-WRITE8_MEMBER(msx_cart_keyboard_master_device::io_20_w)
+void msx_cart_keyboard_master_device::io_20_w(uint8_t data)
{
m_vlm5030->rst((data & 0x01) ? 1 : 0);
m_vlm5030->vcu((data & 0x04) ? 1 : 0);
@@ -924,7 +942,7 @@ WRITE8_MEMBER(msx_cart_keyboard_master_device::io_20_w)
}
-READ8_MEMBER(msx_cart_keyboard_master_device::io_00_r)
+uint8_t msx_cart_keyboard_master_device::io_00_r()
{
return m_vlm5030->bsy() ? 0x10 : 0x00;
}
diff --git a/src/devices/bus/msx_cart/konami.h b/src/devices/bus/msx_cart/konami.h
index 3985884f568..58ad4f3cfb7 100644
--- a/src/devices/bus/msx_cart/konami.h
+++ b/src/devices/bus/msx_cart/konami.h
@@ -25,13 +25,14 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_post_load() override;
void restore_banks();
@@ -49,13 +50,14 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_post_load() override;
virtual void device_add_mconfig(machine_config &config) override;
@@ -78,13 +80,14 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_post_load() override;
void restore_banks();
@@ -103,8 +106,8 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
@@ -123,8 +126,8 @@ class msx_cart_konami_sound_device : public device_t, public msx_cart_interface
public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
msx_cart_konami_sound_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@@ -132,6 +135,7 @@ protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_post_load() override;
virtual void device_add_mconfig(machine_config &config) override;
@@ -186,14 +190,14 @@ protected:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
private:
required_device<vlm5030_device> m_vlm5030;
- DECLARE_READ8_MEMBER(read_vlm);
- DECLARE_WRITE8_MEMBER(io_20_w);
- DECLARE_READ8_MEMBER(io_00_r);
+ uint8_t read_vlm(offs_t offset);
+ void io_20_w(uint8_t data);
+ uint8_t io_00_r();
void vlm_map(address_map &map);
};
diff --git a/src/devices/bus/msx_cart/korean.cpp b/src/devices/bus/msx_cart/korean.cpp
index cfa96ecb7aa..1906a5eb51b 100644
--- a/src/devices/bus/msx_cart/korean.cpp
+++ b/src/devices/bus/msx_cart/korean.cpp
@@ -21,8 +21,12 @@ msx_cart_korean_80in1_device::msx_cart_korean_80in1_device(const machine_config
void msx_cart_korean_80in1_device::device_start()
{
save_item(NAME(m_selected_bank));
+}
+
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_korean_80in1_device::restore_banks), this));
+void msx_cart_korean_80in1_device::device_post_load()
+{
+ restore_banks();
}
@@ -72,7 +76,7 @@ void msx_cart_korean_80in1_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_korean_80in1_device::read_cart)
+uint8_t msx_cart_korean_80in1_device::read_cart(offs_t offset)
{
if (offset >= 0x4000 && offset < 0xc000)
{
@@ -83,7 +87,7 @@ READ8_MEMBER(msx_cart_korean_80in1_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_korean_80in1_device::write_cart)
+void msx_cart_korean_80in1_device::write_cart(offs_t offset, uint8_t data)
{
if (offset >= 0x4000 && offset < 0x4004)
{
@@ -112,11 +116,14 @@ void msx_cart_korean_90in1_device::device_start()
{
save_item(NAME(m_selected_bank));
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_korean_90in1_device::restore_banks), this));
-
// Install IO read/write handlers
- address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
- space.install_write_handler(0x77, 0x77, write8_delegate(FUNC(msx_cart_korean_90in1_device::banking), this));
+ io_space().install_write_handler(0x77, 0x77, write8smo_delegate(FUNC(msx_cart_korean_90in1_device::banking), this));
+}
+
+
+void msx_cart_korean_90in1_device::device_post_load()
+{
+ restore_banks();
}
@@ -181,7 +188,7 @@ void msx_cart_korean_90in1_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_korean_90in1_device::read_cart)
+uint8_t msx_cart_korean_90in1_device::read_cart(offs_t offset)
{
if (offset >= 0x4000 && offset < 0xc000)
{
@@ -192,7 +199,7 @@ READ8_MEMBER(msx_cart_korean_90in1_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_korean_90in1_device::banking)
+void msx_cart_korean_90in1_device::banking(uint8_t data)
{
m_selected_bank = data;
restore_banks();
@@ -215,8 +222,12 @@ msx_cart_korean_126in1_device::msx_cart_korean_126in1_device(const machine_confi
void msx_cart_korean_126in1_device::device_start()
{
save_item(NAME(m_selected_bank));
+}
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_korean_126in1_device::restore_banks), this));
+
+void msx_cart_korean_126in1_device::device_post_load()
+{
+ restore_banks();
}
@@ -266,7 +277,7 @@ void msx_cart_korean_126in1_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_korean_126in1_device::read_cart)
+uint8_t msx_cart_korean_126in1_device::read_cart(offs_t offset)
{
if (offset >= 0x4000 && offset < 0xc000)
{
@@ -277,7 +288,7 @@ READ8_MEMBER(msx_cart_korean_126in1_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_korean_126in1_device::write_cart)
+void msx_cart_korean_126in1_device::write_cart(offs_t offset, uint8_t data)
{
if (offset >= 0x4000 && offset < 0x4002)
{
diff --git a/src/devices/bus/msx_cart/korean.h b/src/devices/bus/msx_cart/korean.h
index b34438da13e..62c5a6ba82b 100644
--- a/src/devices/bus/msx_cart/korean.h
+++ b/src/devices/bus/msx_cart/korean.h
@@ -20,13 +20,14 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_post_load() override;
private:
void restore_banks();
@@ -45,16 +46,17 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
-
- DECLARE_WRITE8_MEMBER(banking);
+ virtual uint8_t read_cart(offs_t offset) override;
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_post_load() override;
private:
+ void banking(uint8_t data);
+
void restore_banks();
uint8_t m_bank_mask;
@@ -70,13 +72,14 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_post_load() override;
private:
void restore_banks();
diff --git a/src/devices/bus/msx_cart/majutsushi.cpp b/src/devices/bus/msx_cart/majutsushi.cpp
index ef76b62af2a..66efee9188f 100644
--- a/src/devices/bus/msx_cart/majutsushi.cpp
+++ b/src/devices/bus/msx_cart/majutsushi.cpp
@@ -26,20 +26,26 @@ msx_cart_majutsushi_device::msx_cart_majutsushi_device(const machine_config &mco
}
-MACHINE_CONFIG_START(msx_cart_majutsushi_device::device_add_mconfig)
+void msx_cart_majutsushi_device::device_add_mconfig(machine_config &config)
+{
// This is actually incorrect. The sound output is passed back into the MSX machine where it is mixed internally and output through the system 'speaker'.
SPEAKER(config, "speaker").front_center();
- MCFG_DEVICE_ADD("dac", DAC_8BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.05) // unknown DAC
- MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
- MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT)
-MACHINE_CONFIG_END
+ DAC_8BIT_R2R(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.05); // unknown DAC
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
+ vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
+ vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
+}
void msx_cart_majutsushi_device::device_start()
{
save_item(NAME(m_selected_bank));
+}
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_majutsushi_device::restore_banks), this));
+
+void msx_cart_majutsushi_device::device_post_load()
+{
+ restore_banks();
}
@@ -76,13 +82,13 @@ void msx_cart_majutsushi_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_majutsushi_device::read_cart)
+uint8_t msx_cart_majutsushi_device::read_cart(offs_t offset)
{
return m_bank_base[offset >> 13][offset & 0x1fff];
}
-WRITE8_MEMBER(msx_cart_majutsushi_device::write_cart)
+void msx_cart_majutsushi_device::write_cart(offs_t offset, uint8_t data)
{
switch (offset & 0xe000)
{
diff --git a/src/devices/bus/msx_cart/majutsushi.h b/src/devices/bus/msx_cart/majutsushi.h
index 596fac47050..ebdf549272e 100644
--- a/src/devices/bus/msx_cart/majutsushi.h
+++ b/src/devices/bus/msx_cart/majutsushi.h
@@ -19,13 +19,14 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_post_load() override;
virtual void device_add_mconfig(machine_config &config) override;
diff --git a/src/devices/bus/msx_cart/moonsound.cpp b/src/devices/bus/msx_cart/moonsound.cpp
index d8b1fda9a5e..e01498c57bc 100644
--- a/src/devices/bus/msx_cart/moonsound.cpp
+++ b/src/devices/bus/msx_cart/moonsound.cpp
@@ -67,13 +67,10 @@ const tiny_rom_entry *msx_cart_moonsound_device::device_rom_region() const
void msx_cart_moonsound_device::device_start()
{
- m_out_irq_cb.resolve_safe();
-
// Install IO read/write handlers
- address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
- space.install_readwrite_handler(0x7e, 0x7f, read8_delegate(FUNC(msx_cart_moonsound_device::read_ymf278b_pcm), this), write8_delegate(FUNC(msx_cart_moonsound_device::write_ymf278b_pcm), this));
- space.install_readwrite_handler(0xc4, 0xc7, read8_delegate(FUNC(msx_cart_moonsound_device::read_ymf278b_fm), this), write8_delegate(FUNC(msx_cart_moonsound_device::write_ymf278b_fm), this));
- space.install_read_handler(0xc0, 0xc0, read8_delegate(FUNC(msx_cart_moonsound_device::read_c0), this));
+ io_space().install_readwrite_handler(0x7e, 0x7f, read8sm_delegate(FUNC(msx_cart_moonsound_device::read_ymf278b_pcm), this), write8sm_delegate(FUNC(msx_cart_moonsound_device::write_ymf278b_pcm), this));
+ io_space().install_readwrite_handler(0xc4, 0xc7, read8sm_delegate(FUNC(msx_cart_moonsound_device::read_ymf278b_fm), this), write8sm_delegate(FUNC(msx_cart_moonsound_device::write_ymf278b_fm), this));
+ io_space().install_read_handler(0xc0, 0xc0, read8smo_delegate(FUNC(msx_cart_moonsound_device::read_c0), this));
}
@@ -85,40 +82,40 @@ void msx_cart_moonsound_device::device_reset()
WRITE_LINE_MEMBER(msx_cart_moonsound_device::irq_w)
{
LOG("moonsound: irq state %d\n", state);
- m_out_irq_cb(state);
+ irq_out(state);
}
-WRITE8_MEMBER(msx_cart_moonsound_device::write_ymf278b_fm)
+void msx_cart_moonsound_device::write_ymf278b_fm(offs_t offset, uint8_t data)
{
LOG("moonsound: write 0x%02x, data 0x%02x\n", 0xc4 + offset, data);
- m_ymf278b->write(space, offset, data);
+ m_ymf278b->write(offset, data);
}
-READ8_MEMBER(msx_cart_moonsound_device::read_ymf278b_fm)
+uint8_t msx_cart_moonsound_device::read_ymf278b_fm(offs_t offset)
{
LOG("moonsound: read 0x%02x\n", 0xc4 + offset);
- return m_ymf278b->read(space, offset);
+ return m_ymf278b->read(offset);
}
-WRITE8_MEMBER(msx_cart_moonsound_device::write_ymf278b_pcm)
+void msx_cart_moonsound_device::write_ymf278b_pcm(offs_t offset, uint8_t data)
{
LOG("moonsound: write 0x%02x, data 0x%02x\n", 0x7e + offset, data);
- m_ymf278b->write(space, 4 + offset, data);
+ m_ymf278b->write(4 + offset, data);
}
-READ8_MEMBER(msx_cart_moonsound_device::read_ymf278b_pcm)
+uint8_t msx_cart_moonsound_device::read_ymf278b_pcm(offs_t offset)
{
LOG("moonsound: read 0x%02x\n", 0x7e + offset);
- return m_ymf278b->read(space, 4 + offset);
+ return m_ymf278b->read(4 + offset);
}
// For detecting presence of moonsound cartridge
-READ8_MEMBER(msx_cart_moonsound_device::read_c0)
+uint8_t msx_cart_moonsound_device::read_c0()
{
LOG("moonsound: read 0xc0\n");
return 0x00;
diff --git a/src/devices/bus/msx_cart/moonsound.h b/src/devices/bus/msx_cart/moonsound.h
index 02f16c94ed3..ca30dfb5c35 100644
--- a/src/devices/bus/msx_cart/moonsound.h
+++ b/src/devices/bus/msx_cart/moonsound.h
@@ -27,11 +27,11 @@ protected:
private:
DECLARE_WRITE_LINE_MEMBER(irq_w);
- DECLARE_WRITE8_MEMBER(write_ymf278b_fm);
- DECLARE_READ8_MEMBER(read_ymf278b_fm);
- DECLARE_WRITE8_MEMBER(write_ymf278b_pcm);
- DECLARE_READ8_MEMBER(read_ymf278b_pcm);
- DECLARE_READ8_MEMBER(read_c0);
+ void write_ymf278b_fm(offs_t offset, uint8_t data);
+ uint8_t read_ymf278b_fm(offs_t offset);
+ void write_ymf278b_pcm(offs_t offset, uint8_t data);
+ uint8_t read_ymf278b_pcm(offs_t offset);
+ uint8_t read_c0();
void ymf278b_map(address_map &map);
diff --git a/src/devices/bus/msx_cart/msx_audio.cpp b/src/devices/bus/msx_cart/msx_audio.cpp
index 61f96ff1eaa..679c035b014 100644
--- a/src/devices/bus/msx_cart/msx_audio.cpp
+++ b/src/devices/bus/msx_cart/msx_audio.cpp
@@ -96,9 +96,8 @@ void msx_cart_msx_audio_hxmu900_device::device_add_mconfig(machine_config &confi
void msx_cart_msx_audio_hxmu900_device::device_start()
{
// Install IO read/write handlers
- address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
- space.install_write_handler(0xc0, 0xc1, write8_delegate(FUNC(y8950_device::write), m_y8950.target()));
- space.install_read_handler(0xc0, 0xc1, read8_delegate(FUNC(y8950_device::read), m_y8950.target()));
+ io_space().install_write_handler(0xc0, 0xc1, write8sm_delegate(FUNC(y8950_device::write), m_y8950.target()));
+ io_space().install_read_handler(0xc0, 0xc1, read8sm_delegate(FUNC(y8950_device::read), m_y8950.target()));
}
@@ -111,7 +110,7 @@ void msx_cart_msx_audio_hxmu900_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_msx_audio_hxmu900_device::read_cart)
+uint8_t msx_cart_msx_audio_hxmu900_device::read_cart(offs_t offset)
{
if (offset >= 0x4000 && offset < 0xC000)
{
@@ -201,11 +200,10 @@ WRITE_LINE_MEMBER(msx_cart_msx_audio_nms1205_device::midi_in)
void msx_cart_msx_audio_nms1205_device::device_start()
{
// Install IO read/write handlers
- address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
- space.install_write_handler(0xc0, 0xc1, write8_delegate(FUNC(y8950_device::write), m_y8950.target()));
- space.install_read_handler(0xc0, 0xc1, read8_delegate(FUNC(y8950_device::read), m_y8950.target()));
- space.install_write_handler(0x00, 0x01, write8_delegate(FUNC(acia6850_device::write), m_acia6850.target()));
- space.install_read_handler(0x04, 0x05, read8_delegate(FUNC(acia6850_device::read), m_acia6850.target()));
+ io_space().install_write_handler(0xc0, 0xc1, write8sm_delegate(FUNC(y8950_device::write), m_y8950.target()));
+ io_space().install_read_handler(0xc0, 0xc1, read8sm_delegate(FUNC(y8950_device::read), m_y8950.target()));
+ io_space().install_write_handler(0x00, 0x01, write8sm_delegate(FUNC(acia6850_device::write), m_acia6850.target()));
+ io_space().install_read_handler(0x04, 0x05, read8sm_delegate(FUNC(acia6850_device::read), m_acia6850.target()));
}
@@ -218,7 +216,7 @@ void msx_cart_msx_audio_nms1205_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_msx_audio_nms1205_device::read_cart)
+uint8_t msx_cart_msx_audio_nms1205_device::read_cart(offs_t offset)
{
if (offset >= 0x4000 && offset < 0xC000)
{
@@ -289,9 +287,8 @@ const tiny_rom_entry *msx_cart_msx_audio_fsca1_device::device_rom_region() const
void msx_cart_msx_audio_fsca1_device::device_start()
{
// Install IO read/write handlers
- address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
- space.install_write_handler(0xc0, 0xc3, write8_delegate(FUNC(msx_cart_msx_audio_fsca1_device::write_y8950), this));
- space.install_read_handler(0xc0, 0xc3, read8_delegate(FUNC(msx_cart_msx_audio_fsca1_device::read_y8950), this));
+ io_space().install_write_handler(0xc0, 0xc3, write8sm_delegate(FUNC(msx_cart_msx_audio_fsca1_device::write_y8950), this));
+ io_space().install_read_handler(0xc0, 0xc3, read8sm_delegate(FUNC(msx_cart_msx_audio_fsca1_device::read_y8950), this));
}
@@ -304,7 +301,7 @@ void msx_cart_msx_audio_fsca1_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_msx_audio_fsca1_device::read_cart)
+uint8_t msx_cart_msx_audio_fsca1_device::read_cart(offs_t offset)
{
if (m_7ffe == 0 && (offset & 0xB000) == 0x3000)
{
@@ -314,7 +311,7 @@ READ8_MEMBER(msx_cart_msx_audio_fsca1_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_msx_audio_fsca1_device::write_cart)
+void msx_cart_msx_audio_fsca1_device::write_cart(offs_t offset, uint8_t data)
{
if (offset == 0x7ffe)
{
@@ -338,45 +335,45 @@ WRITE8_MEMBER(msx_cart_msx_audio_fsca1_device::write_cart)
}
-WRITE8_MEMBER(msx_cart_msx_audio_fsca1_device::write_y8950)
+void msx_cart_msx_audio_fsca1_device::write_y8950(offs_t offset, uint8_t data)
{
if (offset & 2)
{
if (m_7fff & 0x02)
{
- m_y8950->write(space, offset, data);
+ m_y8950->write(offset, data);
}
}
else
{
if (m_7fff & 0x01)
{
- m_y8950->write(space, offset, data);
+ m_y8950->write(offset, data);
}
}
}
-READ8_MEMBER(msx_cart_msx_audio_fsca1_device::read_y8950)
+uint8_t msx_cart_msx_audio_fsca1_device::read_y8950(offs_t offset)
{
if (offset & 2)
{
- return (m_7fff & 0x02) ? m_y8950->read(space, offset) : 0xff;
+ return (m_7fff & 0x02) ? m_y8950->read(offset) : 0xff;
}
else
{
- return (m_7fff & 0x01) ? m_y8950->read(space, offset) : 0xff;
+ return (m_7fff & 0x01) ? m_y8950->read(offset) : 0xff;
}
}
-WRITE8_MEMBER(msx_cart_msx_audio_fsca1_device::y8950_io_w)
+void msx_cart_msx_audio_fsca1_device::y8950_io_w(uint8_t data)
{
logerror("msx_fsca1::y8950_io_w: %02x\n", data);
}
-READ8_MEMBER(msx_cart_msx_audio_fsca1_device::y8950_io_r)
+uint8_t msx_cart_msx_audio_fsca1_device::y8950_io_r()
{
return m_io_config->read();
}
diff --git a/src/devices/bus/msx_cart/msx_audio.h b/src/devices/bus/msx_cart/msx_audio.h
index d9fc89baa8c..3aeee7cddf1 100644
--- a/src/devices/bus/msx_cart/msx_audio.h
+++ b/src/devices/bus/msx_cart/msx_audio.h
@@ -23,7 +23,7 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
protected:
virtual void device_start() override;
@@ -44,7 +44,7 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
protected:
virtual void device_start() override;
@@ -71,8 +71,8 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
virtual void device_start() override;
@@ -82,12 +82,12 @@ protected:
virtual ioport_constructor device_input_ports() const override;
virtual const tiny_rom_entry *device_rom_region() const override;
- DECLARE_WRITE8_MEMBER(write_y8950);
- DECLARE_READ8_MEMBER(read_y8950);
-
private:
- DECLARE_WRITE8_MEMBER(y8950_io_w);
- DECLARE_READ8_MEMBER(y8950_io_r);
+ void write_y8950(offs_t offset, uint8_t data);
+ uint8_t read_y8950(offs_t offset);
+
+ void y8950_io_w(uint8_t data);
+ uint8_t y8950_io_r();
required_device<y8950_device> m_y8950;
required_ioport m_io_config;
diff --git a/src/devices/bus/msx_cart/msx_audio_kb.cpp b/src/devices/bus/msx_cart/msx_audio_kb.cpp
index 9bbae0aab93..68303c56667 100644
--- a/src/devices/bus/msx_cart/msx_audio_kb.cpp
+++ b/src/devices/bus/msx_cart/msx_audio_kb.cpp
@@ -21,20 +21,20 @@ void msx_audio_kbdc_port_device::device_start()
}
-WRITE8_MEMBER(msx_audio_kbdc_port_device::write)
+void msx_audio_kbdc_port_device::write(uint8_t data)
{
if (m_keyboard)
{
- m_keyboard->write(space, offset, data);
+ m_keyboard->write(data);
}
}
-READ8_MEMBER(msx_audio_kbdc_port_device::read)
+uint8_t msx_audio_kbdc_port_device::read()
{
if (m_keyboard)
{
- return m_keyboard->read(space, offset);
+ return m_keyboard->read();
}
return 0xff;
}
@@ -57,7 +57,7 @@ public:
virtual ioport_constructor device_input_ports() const override;
- virtual DECLARE_READ8_MEMBER(read) override
+ virtual uint8_t read() override
{
uint8_t result = 0xff;
@@ -71,7 +71,7 @@ public:
return result;
}
- virtual DECLARE_WRITE8_MEMBER(write) override
+ virtual void write(uint8_t data) override
{
m_row = data;
}
@@ -187,7 +187,7 @@ public:
virtual ioport_constructor device_input_ports() const override;
- virtual DECLARE_READ8_MEMBER(read) override
+ virtual uint8_t read() override
{
uint8_t result = 0xff;
@@ -201,7 +201,7 @@ public:
return result;
}
- virtual DECLARE_WRITE8_MEMBER(write) override
+ virtual void write(uint8_t data) override
{
logerror("msx_nms1160::write %02x\n", data);
m_row = data;
diff --git a/src/devices/bus/msx_cart/msx_audio_kb.h b/src/devices/bus/msx_cart/msx_audio_kb.h
index 25f0a2d24f8..93a2d026214 100644
--- a/src/devices/bus/msx_cart/msx_audio_kb.h
+++ b/src/devices/bus/msx_cart/msx_audio_kb.h
@@ -10,9 +10,8 @@ DECLARE_DEVICE_TYPE(MSX_AUDIO_KBDC_PORT, msx_audio_kbdc_port_device)
class msx_audio_kb_port_interface : public device_slot_card_interface
{
public:
-
- virtual DECLARE_READ8_MEMBER(read) { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(write) { }
+ virtual uint8_t read() { return 0xff; }
+ virtual void write(uint8_t data) { }
protected:
// construction/destruction
@@ -39,8 +38,8 @@ public:
virtual void device_start() override;
// Physical connection simply consists of 8 input and 8 output lines split across 2 connectors
- DECLARE_WRITE8_MEMBER(write);
- DECLARE_READ8_MEMBER(read);
+ void write(uint8_t data);
+ uint8_t read();
protected:
diff --git a/src/devices/bus/msx_cart/msxdos2.cpp b/src/devices/bus/msx_cart/msxdos2.cpp
index f4e391f66e9..7f3e506b007 100644
--- a/src/devices/bus/msx_cart/msxdos2.cpp
+++ b/src/devices/bus/msx_cart/msxdos2.cpp
@@ -18,8 +18,12 @@ msx_cart_msxdos2_device::msx_cart_msxdos2_device(const machine_config &mconfig,
void msx_cart_msxdos2_device::device_start()
{
save_item(NAME(m_selected_bank));
+}
+
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_msxdos2_device::restore_banks), this));
+void msx_cart_msxdos2_device::device_post_load()
+{
+ restore_banks();
}
@@ -46,7 +50,7 @@ void msx_cart_msxdos2_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_msxdos2_device::read_cart)
+uint8_t msx_cart_msxdos2_device::read_cart(offs_t offset)
{
if (offset >= 0x4000 && offset < 0x8000)
{
@@ -57,7 +61,7 @@ READ8_MEMBER(msx_cart_msxdos2_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_msxdos2_device::write_cart)
+void msx_cart_msxdos2_device::write_cart(offs_t offset, uint8_t data)
{
if (offset == 0x6000)
{
diff --git a/src/devices/bus/msx_cart/msxdos2.h b/src/devices/bus/msx_cart/msxdos2.h
index b30fbb70bd8..dd5eb51d245 100644
--- a/src/devices/bus/msx_cart/msxdos2.h
+++ b/src/devices/bus/msx_cart/msxdos2.h
@@ -18,13 +18,14 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_post_load() override;
void restore_banks();
diff --git a/src/devices/bus/msx_cart/nomapper.cpp b/src/devices/bus/msx_cart/nomapper.cpp
index 5152464cbc4..24ebbb38e0d 100644
--- a/src/devices/bus/msx_cart/nomapper.cpp
+++ b/src/devices/bus/msx_cart/nomapper.cpp
@@ -84,7 +84,7 @@ void msx_cart_nomapper_device::initialize_cartridge()
m_end_address = std::min<uint32_t>(m_start_address + size, 0x10000);
}
-READ8_MEMBER(msx_cart_nomapper_device::read_cart)
+uint8_t msx_cart_nomapper_device::read_cart(offs_t offset)
{
if ( offset >= m_start_address && offset < m_end_address )
{
diff --git a/src/devices/bus/msx_cart/nomapper.h b/src/devices/bus/msx_cart/nomapper.h
index 7b29b6a69b3..eb5e40e1d08 100644
--- a/src/devices/bus/msx_cart/nomapper.h
+++ b/src/devices/bus/msx_cart/nomapper.h
@@ -21,7 +21,7 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
private:
uint32_t m_start_address;
diff --git a/src/devices/bus/msx_cart/rtype.cpp b/src/devices/bus/msx_cart/rtype.cpp
index 3853cfeed9a..6cda0efb4e8 100644
--- a/src/devices/bus/msx_cart/rtype.cpp
+++ b/src/devices/bus/msx_cart/rtype.cpp
@@ -21,8 +21,12 @@ msx_cart_rtype_device::msx_cart_rtype_device(const machine_config &mconfig, cons
void msx_cart_rtype_device::device_start()
{
save_item(NAME(m_selected_bank));
+}
+
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_rtype_device::restore_banks), this));
+void msx_cart_rtype_device::device_post_load()
+{
+ restore_banks();
}
@@ -54,7 +58,7 @@ void msx_cart_rtype_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_rtype_device::read_cart)
+uint8_t msx_cart_rtype_device::read_cart(offs_t offset)
{
if (offset >= 0x4000 && offset < 0xc000)
{
@@ -64,7 +68,7 @@ READ8_MEMBER(msx_cart_rtype_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_rtype_device::write_cart)
+void msx_cart_rtype_device::write_cart(offs_t offset, uint8_t data)
{
if (offset >= 0x7000 && offset < 0x8000)
{
diff --git a/src/devices/bus/msx_cart/rtype.h b/src/devices/bus/msx_cart/rtype.h
index 435d8666273..31583455a0a 100644
--- a/src/devices/bus/msx_cart/rtype.h
+++ b/src/devices/bus/msx_cart/rtype.h
@@ -18,13 +18,14 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_post_load() override;
void restore_banks();
diff --git a/src/devices/bus/msx_cart/super_swangi.cpp b/src/devices/bus/msx_cart/super_swangi.cpp
index 75ee75be6a0..a64b0648195 100644
--- a/src/devices/bus/msx_cart/super_swangi.cpp
+++ b/src/devices/bus/msx_cart/super_swangi.cpp
@@ -19,8 +19,12 @@ msx_cart_super_swangi_device::msx_cart_super_swangi_device(const machine_config
void msx_cart_super_swangi_device::device_start()
{
save_item(NAME(m_selected_bank));
+}
+
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_super_swangi_device::restore_banks), this));
+void msx_cart_super_swangi_device::device_post_load()
+{
+ restore_banks();
}
@@ -48,7 +52,7 @@ void msx_cart_super_swangi_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_super_swangi_device::read_cart)
+uint8_t msx_cart_super_swangi_device::read_cart(offs_t offset)
{
if (offset >= 0x4000 && offset < 0xc000)
{
@@ -58,7 +62,7 @@ READ8_MEMBER(msx_cart_super_swangi_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_super_swangi_device::write_cart)
+void msx_cart_super_swangi_device::write_cart(offs_t offset, uint8_t data)
{
if (offset == 0x8000)
{
diff --git a/src/devices/bus/msx_cart/super_swangi.h b/src/devices/bus/msx_cart/super_swangi.h
index cf3b9f3b7c9..f0f5ee216bd 100644
--- a/src/devices/bus/msx_cart/super_swangi.h
+++ b/src/devices/bus/msx_cart/super_swangi.h
@@ -18,13 +18,14 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_post_load() override;
void restore_banks();
diff --git a/src/devices/bus/msx_cart/superloderunner.cpp b/src/devices/bus/msx_cart/superloderunner.cpp
index 51289c24f10..b846a935953 100644
--- a/src/devices/bus/msx_cart/superloderunner.cpp
+++ b/src/devices/bus/msx_cart/superloderunner.cpp
@@ -19,11 +19,14 @@ void msx_cart_superloderunner_device::device_start()
{
save_item(NAME(m_selected_bank));
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_superloderunner_device::restore_banks), this));
-
// Install evil memory write handler
- address_space &space = machine().device<cpu_device>("maincpu")->space(AS_PROGRAM);
- space.install_write_handler(0x0000, 0x0000, write8_delegate(FUNC(msx_cart_superloderunner_device::banking), this));
+ memory_space().install_write_handler(0x0000, 0x0000, write8smo_delegate(FUNC(msx_cart_superloderunner_device::banking), this));
+}
+
+
+void msx_cart_superloderunner_device::device_post_load()
+{
+ restore_banks();
}
@@ -44,7 +47,7 @@ void msx_cart_superloderunner_device::initialize_cartridge()
}
-READ8_MEMBER(msx_cart_superloderunner_device::read_cart)
+uint8_t msx_cart_superloderunner_device::read_cart(offs_t offset)
{
if (offset >= 0x8000 && offset < 0xc000)
{
@@ -55,7 +58,7 @@ READ8_MEMBER(msx_cart_superloderunner_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_superloderunner_device::banking)
+void msx_cart_superloderunner_device::banking(uint8_t data)
{
m_selected_bank = data;
restore_banks();
diff --git a/src/devices/bus/msx_cart/superloderunner.h b/src/devices/bus/msx_cart/superloderunner.h
index b8e73535ebf..bd763ca2c08 100644
--- a/src/devices/bus/msx_cart/superloderunner.h
+++ b/src/devices/bus/msx_cart/superloderunner.h
@@ -18,17 +18,18 @@ public:
virtual void initialize_cartridge() override;
- virtual DECLARE_READ8_MEMBER(read_cart) override;
-
- DECLARE_WRITE8_MEMBER(banking);
+ virtual uint8_t read_cart(offs_t offset) override;
protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_post_load() override;
void restore_banks();
private:
+ void banking(uint8_t data);
+
uint8_t m_selected_bank;
uint8_t *m_bank_base;
};
diff --git a/src/devices/bus/msx_cart/yamaha.cpp b/src/devices/bus/msx_cart/yamaha.cpp
index e6f7dc844fe..9296779f1b3 100644
--- a/src/devices/bus/msx_cart/yamaha.cpp
+++ b/src/devices/bus/msx_cart/yamaha.cpp
@@ -131,22 +131,22 @@ void msx_cart_sfg_device::check_irq()
{
if (m_ym2151_irq_state != CLEAR_LINE || m_ym2148_irq_state != CLEAR_LINE)
{
- m_out_irq_cb(ASSERT_LINE);
+ irq_out(ASSERT_LINE);
}
else
{
- m_out_irq_cb(CLEAR_LINE);
+ irq_out(CLEAR_LINE);
}
}
-READ8_MEMBER(msx_cart_sfg_device::read_cart)
+uint8_t msx_cart_sfg_device::read_cart(offs_t offset)
{
switch (offset & 0x3fff)
{
case 0x3ff0: // YM-2151 status read
case 0x3ff1: // YM-2151 status read mirror?
- return m_ym2151->status_r(space, 0);
+ return m_ym2151->status_r();
case 0x3ff2: // YM-2148 keyboard column read
case 0x3ff3: // YM-2148 --
@@ -155,7 +155,7 @@ READ8_MEMBER(msx_cart_sfg_device::read_cart)
case 0x3ff6: // YM-2148 MIDI UART status register
// ------x- - 1 = received a byte/receive buffer full?
// -------x - 1 = ready to send next byte/send buffer empty?
- return m_ym2148->read(space, offset & 7);
+ return m_ym2148->read(offset & 7);
}
if (offset < 0x8000)
@@ -167,16 +167,16 @@ READ8_MEMBER(msx_cart_sfg_device::read_cart)
}
-WRITE8_MEMBER(msx_cart_sfg_device::write_cart)
+void msx_cart_sfg_device::write_cart(offs_t offset, uint8_t data)
{
switch (offset & 0x3fff)
{
case 0x3ff0: // YM-2151 register
- m_ym2151->register_w(space, 0, data);
+ m_ym2151->register_w(data);
break;
case 0x3ff1: // YM-2151 data
- m_ym2151->data_w(space, 0, data);
+ m_ym2151->data_w(data);
break;
case 0x3ff2: // YM-2148 write keyboard row
@@ -191,7 +191,7 @@ WRITE8_MEMBER(msx_cart_sfg_device::write_cart)
// x------- - 1 = reset
// -----x-- - 1 = enable receiving / sending midi data
// -------x - 1 = enable receiving / sending midi data
- m_ym2148->write(space, offset & 7, data);
+ m_ym2148->write(offset & 7, data);
break;
default:
diff --git a/src/devices/bus/msx_cart/yamaha.h b/src/devices/bus/msx_cart/yamaha.h
index b8f30bf057f..e5072dc5dcf 100644
--- a/src/devices/bus/msx_cart/yamaha.h
+++ b/src/devices/bus/msx_cart/yamaha.h
@@ -18,8 +18,9 @@ DECLARE_DEVICE_TYPE(MSX_CART_SFG05, msx_cart_sfg05_device)
class msx_cart_sfg_device : public device_t, public msx_cart_interface
{
public:
- virtual DECLARE_READ8_MEMBER(read_cart) override;
- virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
+
protected:
msx_cart_sfg_device(const machine_config &mconfig, const device_type type, const char *tag, device_t *owner, uint32_t clock);
diff --git a/src/devices/bus/msx_slot/bunsetsu.cpp b/src/devices/bus/msx_slot/bunsetsu.cpp
index a2f8a131a54..79a07b2e53a 100644
--- a/src/devices/bus/msx_slot/bunsetsu.cpp
+++ b/src/devices/bus/msx_slot/bunsetsu.cpp
@@ -25,17 +25,17 @@ void msx_slot_bunsetsu_device::device_reset()
}
-READ8_MEMBER(msx_slot_bunsetsu_device::read)
+uint8_t msx_slot_bunsetsu_device::read(offs_t offset)
{
if (offset == 0xbfff)
{
return m_bunsetsu_region[m_bunsetsu_address++ & 0x1ffff];
}
- return msx_slot_rom_device::read(space, offset);
+ return msx_slot_rom_device::read(offset);
}
-WRITE8_MEMBER(msx_slot_bunsetsu_device::write)
+void msx_slot_bunsetsu_device::write(offs_t offset, uint8_t data)
{
switch (offset)
{
diff --git a/src/devices/bus/msx_slot/bunsetsu.h b/src/devices/bus/msx_slot/bunsetsu.h
index 70649340824..df0bcedb32f 100644
--- a/src/devices/bus/msx_slot/bunsetsu.h
+++ b/src/devices/bus/msx_slot/bunsetsu.h
@@ -12,11 +12,6 @@
DECLARE_DEVICE_TYPE(MSX_SLOT_BUNSETSU, msx_slot_bunsetsu_device)
-#define MCFG_MSX_SLOT_BUNSETSU_ADD(_tag, _startpage, _numpages, _region, _offset, _bunsetsu_region_tag) \
- MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_BUNSETSU, _startpage, _numpages) \
- downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); \
- downcast<msx_slot_bunsetsu_device &>(*device).set_bunsetsu_region_tag(_bunsetsu_region_tag);
-
class msx_slot_bunsetsu_device : public msx_slot_rom_device
{
public:
@@ -25,8 +20,8 @@ public:
// configuration helpers
void set_bunsetsu_region_tag(const char *tag) { m_bunsetsu_region.set_tag(tag); }
- virtual DECLARE_READ8_MEMBER(read) override;
- virtual DECLARE_WRITE8_MEMBER(write) override;
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
protected:
virtual void device_reset() override;
diff --git a/src/devices/bus/msx_slot/cartridge.cpp b/src/devices/bus/msx_slot/cartridge.cpp
index 522ea6f4548..87b89f93c78 100644
--- a/src/devices/bus/msx_slot/cartridge.cpp
+++ b/src/devices/bus/msx_slot/cartridge.cpp
@@ -43,7 +43,7 @@ msx_slot_cartridge_device::msx_slot_cartridge_device(const machine_config &mconf
: device_t(mconfig, type, tag, owner, clock)
, device_image_interface(mconfig, *this)
, device_slot_interface(mconfig, *this)
- , msx_internal_slot_interface()
+ , msx_internal_slot_interface(mconfig, *this)
, m_irq_handler(*this)
, m_cartridge(nullptr)
{
@@ -90,10 +90,17 @@ static const char *msx_cart_get_slot_option(int type)
}
-void msx_slot_cartridge_device::device_start()
+void msx_slot_cartridge_device::device_resolve_objects()
{
m_irq_handler.resolve_safe();
m_cartridge = dynamic_cast<msx_cart_interface *>(get_card_device());
+ if (m_cartridge)
+ m_cartridge->m_exp = this;
+}
+
+
+void msx_slot_cartridge_device::device_start()
+{
}
@@ -169,7 +176,7 @@ image_init_result msx_slot_cartridge_device::call_load()
}
}
- m_cartridge->set_out_irq_cb(DEVCB_WRITELINE(*this, msx_slot_cartridge_device, irq_out));
+ m_cartridge->m_exp = this;
m_cartridge->initialize_cartridge();
if (m_cartridge->get_sram_size() > 0)
@@ -331,21 +338,21 @@ std::string msx_slot_cartridge_device::get_default_card_software(get_default_car
}
-READ8_MEMBER(msx_slot_cartridge_device::read)
+uint8_t msx_slot_cartridge_device::read(offs_t offset)
{
if ( m_cartridge )
{
- return m_cartridge->read_cart(space, offset);
+ return m_cartridge->read_cart(offset);
}
return 0xFF;
}
-WRITE8_MEMBER(msx_slot_cartridge_device::write)
+void msx_slot_cartridge_device::write(offs_t offset, uint8_t data)
{
if ( m_cartridge )
{
- m_cartridge->write_cart(space, offset, data);
+ m_cartridge->write_cart(offset, data);
}
}
@@ -360,8 +367,4 @@ msx_slot_yamaha_expansion_device::msx_slot_yamaha_expansion_device(const machine
void msx_slot_yamaha_expansion_device::device_start()
{
- m_irq_handler.resolve_safe();
- m_cartridge = dynamic_cast<msx_cart_interface *>(get_card_device());
- if (m_cartridge)
- m_cartridge->set_out_irq_cb(DEVCB_WRITELINE(*this, msx_slot_cartridge_device, irq_out));
}
diff --git a/src/devices/bus/msx_slot/cartridge.h b/src/devices/bus/msx_slot/cartridge.h
index be0856e8d82..faabf394042 100644
--- a/src/devices/bus/msx_slot/cartridge.h
+++ b/src/devices/bus/msx_slot/cartridge.h
@@ -14,18 +14,6 @@ DECLARE_DEVICE_TYPE(MSX_SLOT_CARTRIDGE, msx_slot_cartridge_device)
DECLARE_DEVICE_TYPE(MSX_SLOT_YAMAHA_EXPANSION, msx_slot_yamaha_expansion_device)
-#define MCFG_MSX_SLOT_CARTRIDGE_ADD(_tag, _devcb) \
- MCFG_DEVICE_ADD(_tag, MSX_SLOT_CARTRIDGE, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(msx_cart, nullptr, false) \
- downcast<msx_slot_cartridge_device &>(*device).set_irq_handler(DEVCB_##_devcb);
-
-
-#define MCFG_MSX_SLOT_YAMAHA_EXPANSION_ADD(_tag, _devcb, _default) \
- MCFG_DEVICE_ADD(_tag, MSX_SLOT_YAMAHA_EXPANSION, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(msx_yamaha_60pin, _default, false) \
- downcast<msx_slot_cartridge_device &>(*device).set_irq_handler(DEVCB_##_devcb);
-
-
class msx_slot_cartridge_device : public device_t
, public device_image_interface
, public device_slot_interface
@@ -35,8 +23,8 @@ public:
// construction/destruction
msx_slot_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- // static configuration helpers
- template <class Object> devcb_base &set_irq_handler(Object &&cb) { return m_irq_handler.set_callback(std::forward<Object>(cb)); }
+ // configuration helpers
+ auto irq_handler() { return m_irq_handler.bind(); }
// image-level overrides
virtual image_init_result call_load() override;
@@ -57,8 +45,8 @@ public:
virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
// msx_internal_slot-level overrides
- virtual DECLARE_READ8_MEMBER(read) override;
- virtual DECLARE_WRITE8_MEMBER(write) override;
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
DECLARE_WRITE_LINE_MEMBER(irq_out);
@@ -66,6 +54,7 @@ protected:
msx_slot_cartridge_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
+ virtual void device_resolve_objects() override;
virtual void device_start() override;
devcb_write_line m_irq_handler;
diff --git a/src/devices/bus/msx_slot/disk.cpp b/src/devices/bus/msx_slot/disk.cpp
index 39ec248e3f2..309b7f2d80f 100644
--- a/src/devices/bus/msx_slot/disk.cpp
+++ b/src/devices/bus/msx_slot/disk.cpp
@@ -137,8 +137,6 @@ void msx_slot_disk1_device::device_start()
save_item(NAME(m_side_control));
save_item(NAME(m_control));
-
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_disk1_device::post_load), this));
}
@@ -148,7 +146,7 @@ void msx_slot_disk1_device::device_reset()
}
-void msx_slot_disk1_device::post_load()
+void msx_slot_disk1_device::device_post_load()
{
uint8_t data = m_control;
@@ -207,7 +205,7 @@ void msx_slot_disk1_device::set_control(uint8_t data)
}
-READ8_MEMBER(msx_slot_disk1_device::read)
+uint8_t msx_slot_disk1_device::read(offs_t offset)
{
switch (offset)
{
@@ -240,11 +238,11 @@ READ8_MEMBER(msx_slot_disk1_device::read)
return 0x3f | (m_fdc->intrq_r() ? 0 : 0x40) | (m_fdc->drq_r() ? 0 : 0x80);
}
- return msx_slot_rom_device::read(space, offset);
+ return msx_slot_rom_device::read(offset);
}
-WRITE8_MEMBER(msx_slot_disk1_device::write)
+void msx_slot_disk1_device::write(offs_t offset, uint8_t data)
{
switch (offset)
{
@@ -298,8 +296,6 @@ void msx_slot_disk2_device::device_start()
msx_slot_wd_disk_device::device_start();
save_item(NAME(m_control));
-
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_disk2_device::post_load), this));
}
@@ -309,7 +305,7 @@ void msx_slot_disk2_device::device_reset()
}
-void msx_slot_disk2_device::post_load()
+void msx_slot_disk2_device::device_post_load()
{
uint8_t data = m_control;
@@ -356,7 +352,7 @@ void msx_slot_disk2_device::set_control(uint8_t data)
}
-READ8_MEMBER(msx_slot_disk2_device::read)
+uint8_t msx_slot_disk2_device::read(offs_t offset)
{
switch (offset)
{
@@ -381,11 +377,11 @@ READ8_MEMBER(msx_slot_disk2_device::read)
return 0x3f | (m_fdc->drq_r() ? 0 : 0x40) | (m_fdc->intrq_r() ? 0x80 : 0);
}
- return msx_slot_rom_device::read(space, offset);
+ return msx_slot_rom_device::read(offset);
}
-WRITE8_MEMBER(msx_slot_disk2_device::write)
+void msx_slot_disk2_device::write(offs_t offset, uint8_t data)
{
switch (offset)
{
@@ -431,20 +427,20 @@ msx_slot_disk3_device::msx_slot_disk3_device(const machine_config &mconfig, cons
}
-WRITE8_MEMBER(msx_slot_disk3_device::write)
+void msx_slot_disk3_device::write(offs_t offset, uint8_t data)
{
switch (offset)
{
case 0x7ff8: // CR0 : 0 - 0 - MEN1 - MEN0 - 0 - -FRST - 0 - DSA
- m_fdc->dor_w(space, 2, data);
+ m_fdc->dor_w(data);
break;
case 0x7ff9: // CR1 : 0 - 0 - C4E - C4 - SBME - SBM - TCE - FDCTC
- m_fdc->cr1_w(space, 3, data);
+ m_fdc->cr1_w(data);
break;
case 0x7ffb: // Data Register
- m_fdc->fifo_w(space, 5, data);
+ m_fdc->fifo_w(data);
break;
default:
@@ -454,17 +450,17 @@ WRITE8_MEMBER(msx_slot_disk3_device::write)
}
-READ8_MEMBER(msx_slot_disk3_device::read)
+uint8_t msx_slot_disk3_device::read(offs_t offset)
{
switch (offset)
{
case 0x7ffa: // Status Register
- return m_fdc->msr_r(space, 4);
+ return m_fdc->msr_r();
case 0x7ffb: // Data Register
- return m_fdc->fifo_r(space, 5);
+ return m_fdc->fifo_r();
}
- return msx_slot_rom_device::read(space, offset);
+ return msx_slot_rom_device::read(offset);
}
@@ -477,7 +473,7 @@ msx_slot_disk4_device::msx_slot_disk4_device(const machine_config &mconfig, cons
}
-WRITE8_MEMBER(msx_slot_disk4_device::write)
+void msx_slot_disk4_device::write(offs_t offset, uint8_t data)
{
switch (offset)
{
@@ -485,15 +481,15 @@ WRITE8_MEMBER(msx_slot_disk4_device::write)
break;
case 0x7ff2: // CR0 : 0 - 0 - MEN1 - MEN0 - 0 - -FRST - 0 - DSA
- m_fdc->dor_w(space, 2, data);
+ m_fdc->dor_w(data);
break;
case 0x7ff3: // CR1 : 0 - 0 - C4E - C4 - SBME - SBM - TCE - FDCTC
- m_fdc->cr1_w(space, 3, data);
+ m_fdc->cr1_w(data);
break;
case 0x7ff5: // Data Register
- m_fdc->fifo_w(space, 5, data);
+ m_fdc->fifo_w(data);
break;
default:
@@ -503,7 +499,7 @@ WRITE8_MEMBER(msx_slot_disk4_device::write)
}
-READ8_MEMBER(msx_slot_disk4_device::read)
+uint8_t msx_slot_disk4_device::read(offs_t offset)
{
switch (offset)
{
@@ -512,12 +508,12 @@ READ8_MEMBER(msx_slot_disk4_device::read)
break;
case 0x7ff4: // Status Register
- return m_fdc->msr_r(space, 4);
+ return m_fdc->msr_r();
case 0x7ff5: // Data Register
- return m_fdc->fifo_r(space, 5);
+ return m_fdc->fifo_r();
}
- return msx_slot_rom_device::read(space, offset);
+ return msx_slot_rom_device::read(offset);
}
@@ -536,12 +532,9 @@ void msx_slot_disk5_device::device_start()
save_item(NAME(m_control));
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_disk5_device::post_load), this));
-
// Install IO read/write handlers
- address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
- space.install_write_handler(0xd0, 0xd4, write8_delegate(FUNC(msx_slot_disk5_device::io_write), this));
- space.install_read_handler(0xd0, 0xd4, read8_delegate(FUNC(msx_slot_disk5_device::io_read), this));
+ io_space().install_write_handler(0xd0, 0xd4, write8sm_delegate(FUNC(msx_slot_disk5_device::io_write), this));
+ io_space().install_read_handler(0xd0, 0xd4, read8sm_delegate(FUNC(msx_slot_disk5_device::io_read), this));
}
@@ -551,7 +544,7 @@ void msx_slot_disk5_device::device_reset()
}
-void msx_slot_disk5_device::post_load()
+void msx_slot_disk5_device::device_post_load()
{
set_control(m_control);
}
@@ -594,7 +587,7 @@ void msx_slot_disk5_device::set_control(uint8_t control)
}
-READ8_MEMBER(msx_slot_disk5_device::io_read)
+uint8_t msx_slot_disk5_device::io_read(offs_t offset)
{
switch (offset)
{
@@ -618,7 +611,7 @@ READ8_MEMBER(msx_slot_disk5_device::io_read)
}
-WRITE8_MEMBER(msx_slot_disk5_device::io_write)
+void msx_slot_disk5_device::io_write(offs_t offset, uint8_t data)
{
switch (offset)
{
@@ -662,8 +655,6 @@ void msx_slot_disk6_device::device_start()
save_item(NAME(m_side_motor));
save_item(NAME(m_drive_select0));
save_item(NAME(m_drive_select1));
-
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_disk6_device::post_load), this));
}
@@ -673,7 +664,7 @@ void msx_slot_disk6_device::device_reset()
}
-void msx_slot_disk6_device::post_load()
+void msx_slot_disk6_device::device_post_load()
{
select_drive();
}
@@ -715,7 +706,7 @@ void msx_slot_disk6_device::set_side_motor()
}
-READ8_MEMBER(msx_slot_disk6_device::read)
+uint8_t msx_slot_disk6_device::read(offs_t offset)
{
switch (offset)
{
@@ -757,11 +748,11 @@ READ8_MEMBER(msx_slot_disk6_device::read)
return 0x3f | (m_fdc->intrq_r() ? 0 : 0x40) | (m_fdc->drq_r() ? 0 : 0x80);
}
- return msx_slot_rom_device::read(space, offset);
+ return msx_slot_rom_device::read(offset);
}
-WRITE8_MEMBER(msx_slot_disk6_device::write)
+void msx_slot_disk6_device::write(offs_t offset, uint8_t data)
{
switch (offset)
{
diff --git a/src/devices/bus/msx_slot/disk.h b/src/devices/bus/msx_slot/disk.h
index 3b949f159e2..184ea2caf66 100644
--- a/src/devices/bus/msx_slot/disk.h
+++ b/src/devices/bus/msx_slot/disk.h
@@ -26,51 +26,6 @@ DECLARE_DEVICE_TYPE(MSX_SLOT_DISK5, msx_slot_disk5_device)
DECLARE_DEVICE_TYPE(MSX_SLOT_DISK6, msx_slot_disk6_device)
-#define MCFG_MSX_SLOT_DISK1_ADD(_tag, _startpage, _numpages, _region, _offset, _fdc_tag, _floppy0_tag, _floppy1_tag) \
- MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_DISK1, _startpage, _numpages) \
- downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); \
- downcast<msx_slot_disk_device &>(*device).set_fdc_tag(_fdc_tag); \
- downcast<msx_slot_disk_device &>(*device).set_floppy0_tag(_floppy0_tag); \
- downcast<msx_slot_disk_device &>(*device).set_floppy1_tag(_floppy1_tag);
-
-#define MCFG_MSX_SLOT_DISK2_ADD(_tag, _startpage, _numpages, _region, _offset, _fdc_tag, _floppy0_tag, _floppy1_tag) \
- MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_DISK2, _startpage, _numpages) \
- downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); \
- downcast<msx_slot_disk_device &>(*device).set_fdc_tag(_fdc_tag); \
- downcast<msx_slot_disk_device &>(*device).set_floppy0_tag(_floppy0_tag); \
- downcast<msx_slot_disk_device &>(*device).set_floppy1_tag(_floppy1_tag);
-
-#define MCFG_MSX_SLOT_DISK3_ADD(_tag, _startpage, _numpages, _region, _offset, _fdc_tag, _floppy0_tag, _floppy1_tag) \
- MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_DISK3, _startpage, _numpages) \
- downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); \
- downcast<msx_slot_disk_device &>(*device).set_fdc_tag(_fdc_tag); \
- downcast<msx_slot_disk_device &>(*device).set_floppy0_tag(_floppy0_tag); \
- downcast<msx_slot_disk_device &>(*device).set_floppy1_tag(_floppy1_tag);
-
-#define MCFG_MSX_SLOT_DISK4_ADD(_tag, _startpage, _numpages, _region, _offset, _fdc_tag, _floppy0_tag, _floppy1_tag) \
- MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_DISK4, _startpage, _numpages) \
- downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); \
- downcast<msx_slot_disk_device &>(*device).set_fdc_tag(_fdc_tag); \
- downcast<msx_slot_disk_device &>(*device).set_floppy0_tag(_floppy0_tag); \
- downcast<msx_slot_disk_device &>(*device).set_floppy1_tag(_floppy1_tag);
-
-#define MCFG_MSX_SLOT_DISK5_ADD(_tag, _startpage, _numpages, _region, _offset, _fdc_tag, _floppy0_tag, _floppy1_tag, _floppy2_tag, _floppy3_tag) \
- MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_DISK5, _startpage, _numpages) \
- downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); \
- downcast<msx_slot_disk_device &>(*device).set_fdc_tag(_fdc_tag); \
- downcast<msx_slot_disk_device &>(*device).set_floppy0_tag(_floppy0_tag); \
- downcast<msx_slot_disk_device &>(*device).set_floppy1_tag(_floppy1_tag); \
- downcast<msx_slot_disk_device &>(*device).set_floppy2_tag(_floppy2_tag); \
- downcast<msx_slot_disk_device &>(*device).set_floppy3_tag(_floppy3_tag);
-
-#define MCFG_MSX_SLOT_DISK6_ADD(_tag, _startpage, _numpages, _region, _offset, _fdc_tag, _floppy0_tag, _floppy1_tag) \
- MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_DISK6, _startpage, _numpages) \
- downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); \
- downcast<msx_slot_disk_device &>(*device).set_fdc_tag(_fdc_tag); \
- downcast<msx_slot_disk_device &>(*device).set_floppy0_tag(_floppy0_tag); \
- downcast<msx_slot_disk_device &>(*device).set_floppy1_tag(_floppy1_tag);
-
-
class msx_slot_disk_device : public msx_slot_rom_device
{
public:
@@ -81,6 +36,21 @@ public:
void set_floppy2_tag(const char *tag) { m_floppy2_tag = tag; }
void set_floppy3_tag(const char *tag) { m_floppy3_tag = tag; }
+ void set_tags(const char *fdc_tag, const char *floppy0_tag, const char *floppy1_tag)
+ {
+ m_fdc_tag = fdc_tag;
+ m_floppy0_tag = floppy0_tag;
+ m_floppy1_tag = floppy1_tag;
+ }
+ void set_tags(const char *fdc_tag, const char *floppy0_tag, const char *floppy1_tag, const char *floppy2_tag, const char *floppy3_tag)
+ {
+ m_fdc_tag = fdc_tag;
+ m_floppy0_tag = floppy0_tag;
+ m_floppy1_tag = floppy1_tag;
+ m_floppy2_tag = floppy2_tag;
+ m_floppy3_tag = floppy3_tag;
+ }
+
protected:
msx_slot_disk_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@@ -128,14 +98,13 @@ class msx_slot_disk1_device : public msx_slot_wd_disk_device
public:
msx_slot_disk1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read) override;
- virtual DECLARE_WRITE8_MEMBER(write) override;
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
protected:
virtual void device_start() override;
virtual void device_reset() override;
-
- void post_load();
+ virtual void device_post_load() override;
private:
uint8_t m_side_control;
@@ -151,14 +120,13 @@ class msx_slot_disk2_device : public msx_slot_wd_disk_device
public:
msx_slot_disk2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read) override;
- virtual DECLARE_WRITE8_MEMBER(write) override;
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
protected:
virtual void device_start() override;
virtual void device_reset() override;
-
- void post_load();
+ virtual void device_post_load() override;
private:
uint8_t m_control;
@@ -172,8 +140,8 @@ class msx_slot_disk3_device : public msx_slot_tc8566_disk_device
public:
msx_slot_disk3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read) override;
- virtual DECLARE_WRITE8_MEMBER(write) override;
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
};
@@ -182,8 +150,8 @@ class msx_slot_disk4_device : public msx_slot_tc8566_disk_device
public:
msx_slot_disk4_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read) override;
- virtual DECLARE_WRITE8_MEMBER(write) override;
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
};
@@ -192,16 +160,15 @@ class msx_slot_disk5_device : public msx_slot_wd_disk_device
public:
msx_slot_disk5_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- DECLARE_READ8_MEMBER(io_read);
- DECLARE_WRITE8_MEMBER(io_write);
-
protected:
virtual void device_start() override;
virtual void device_reset() override;
-
- void post_load();
+ virtual void device_post_load() override;
private:
+ uint8_t io_read(offs_t offset);
+ void io_write(offs_t offset, uint8_t data);
+
uint8_t m_control;
void set_control(uint8_t control);
@@ -213,14 +180,13 @@ class msx_slot_disk6_device : public msx_slot_wd_disk_device
public:
msx_slot_disk6_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read) override;
- virtual DECLARE_WRITE8_MEMBER(write) override;
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
protected:
virtual void device_start() override;
virtual void device_reset() override;
-
- void post_load();
+ virtual void device_post_load() override;
private:
uint8_t m_side_motor;
diff --git a/src/devices/bus/msx_slot/fs4600.cpp b/src/devices/bus/msx_slot/fs4600.cpp
index dc975cdd4ba..a7470fc2a78 100644
--- a/src/devices/bus/msx_slot/fs4600.cpp
+++ b/src/devices/bus/msx_slot/fs4600.cpp
@@ -13,7 +13,7 @@ DEFINE_DEVICE_TYPE(MSX_SLOT_FS4600, msx_slot_fs4600_device, "msx_slot_fs4600", "
msx_slot_fs4600_device::msx_slot_fs4600_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, MSX_SLOT_FS4600, tag, owner, clock)
- , msx_internal_slot_interface()
+ , msx_internal_slot_interface(mconfig, *this)
, m_nvram(*this, "nvram")
, m_rom_region(*this, finder_base::DUMMY_TAG)
, m_region_offset(0)
@@ -48,8 +48,12 @@ void msx_slot_fs4600_device::device_start()
save_item(NAME(m_sram_address));
save_item(NAME(m_control));
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_fs4600_device::restore_banks), this));
+ restore_banks();
+}
+
+void msx_slot_fs4600_device::device_post_load()
+{
restore_banks();
}
@@ -63,7 +67,7 @@ void msx_slot_fs4600_device::restore_banks()
}
-READ8_MEMBER(msx_slot_fs4600_device::read)
+uint8_t msx_slot_fs4600_device::read(offs_t offset)
{
if ((m_control & 0x02) && ((offset & 0x3fff) == 0x3ffd))
{
@@ -77,7 +81,7 @@ READ8_MEMBER(msx_slot_fs4600_device::read)
}
-WRITE8_MEMBER(msx_slot_fs4600_device::write)
+void msx_slot_fs4600_device::write(offs_t offset, uint8_t data)
{
if (offset == 0x7ff9)
{
diff --git a/src/devices/bus/msx_slot/fs4600.h b/src/devices/bus/msx_slot/fs4600.h
index c92bd7a3a1f..4b571c2ef56 100644
--- a/src/devices/bus/msx_slot/fs4600.h
+++ b/src/devices/bus/msx_slot/fs4600.h
@@ -12,10 +12,6 @@
DECLARE_DEVICE_TYPE(MSX_SLOT_FS4600, msx_slot_fs4600_device)
-#define MCFG_MSX_SLOT_FS4600_ADD(_tag, _startpage, _numpages, _region, _offset) \
- MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_FS4600, _startpage, _numpages) \
- downcast<msx_slot_fs4600_device &>(*device).set_rom_start(_region, _offset);
-
class msx_slot_fs4600_device : public device_t, public msx_internal_slot_interface
{
public:
@@ -24,11 +20,12 @@ public:
// configuration helpers
void set_rom_start(const char *region, uint32_t offset) { m_rom_region.set_tag(region); m_region_offset = offset; }
- virtual DECLARE_READ8_MEMBER(read) override;
- virtual DECLARE_WRITE8_MEMBER(write) override;
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
protected:
virtual void device_start() override;
+ virtual void device_post_load() override;
virtual void device_add_mconfig(machine_config &config) override;
diff --git a/src/devices/bus/msx_slot/music.cpp b/src/devices/bus/msx_slot/music.cpp
index 1e526dab7eb..0e3ae00b0f3 100644
--- a/src/devices/bus/msx_slot/music.cpp
+++ b/src/devices/bus/msx_slot/music.cpp
@@ -32,18 +32,17 @@ void msx_slot_music_device::device_start()
}
// Install IO read/write handlers
- address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
- space.install_write_handler(0x7c, 0x7d, write8_delegate(FUNC(msx_slot_music_device::write_ym2413), this));
+ io_space().install_write_handler(0x7c, 0x7d, write8sm_delegate(FUNC(msx_slot_music_device::write_ym2413), this));
}
-READ8_MEMBER(msx_slot_music_device::read)
+uint8_t msx_slot_music_device::read(offs_t offset)
{
- return msx_slot_rom_device::read(space, offset);
+ return msx_slot_rom_device::read(offset);
}
-WRITE8_MEMBER(msx_slot_music_device::write_ym2413)
+void msx_slot_music_device::write_ym2413(offs_t offset, uint8_t data)
{
- m_ym2413->write(space, offset & 1, data);
+ m_ym2413->write(offset & 1, data);
}
diff --git a/src/devices/bus/msx_slot/music.h b/src/devices/bus/msx_slot/music.h
index ae2ddc979d0..385e568c4e5 100644
--- a/src/devices/bus/msx_slot/music.h
+++ b/src/devices/bus/msx_slot/music.h
@@ -13,11 +13,6 @@
DECLARE_DEVICE_TYPE(MSX_SLOT_MUSIC, msx_slot_music_device)
-#define MCFG_MSX_SLOT_MUSIC_ADD(_tag, _startpage, _numpages, _region, _offset, _ym2413_tag) \
- MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_MUSIC, _startpage, _numpages) \
- downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset); \
- downcast<msx_slot_music_device &>(*device).set_ym2413_tag(_ym2413_tag);
-
class msx_slot_music_device : public msx_slot_rom_device
{
public:
@@ -26,14 +21,14 @@ public:
// configuration helpers
void set_ym2413_tag(const char *tag) { m_ym2413_tag = tag; }
- virtual DECLARE_READ8_MEMBER(read) override;
-
- DECLARE_WRITE8_MEMBER(write_ym2413);
+ virtual uint8_t read(offs_t offset) override;
protected:
virtual void device_start() override;
private:
+ void write_ym2413(offs_t offset, uint8_t data);
+
ym2413_device *m_ym2413;
const char *m_ym2413_tag;
};
diff --git a/src/devices/bus/msx_slot/panasonic08.cpp b/src/devices/bus/msx_slot/panasonic08.cpp
index 450f4fce1de..0c46350051e 100644
--- a/src/devices/bus/msx_slot/panasonic08.cpp
+++ b/src/devices/bus/msx_slot/panasonic08.cpp
@@ -18,7 +18,7 @@ DEFINE_DEVICE_TYPE(MSX_SLOT_PANASONIC08, msx_slot_panasonic08_device, "msx_slot_
msx_slot_panasonic08_device::msx_slot_panasonic08_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, MSX_SLOT_PANASONIC08, tag, owner, clock)
- , msx_internal_slot_interface()
+ , msx_internal_slot_interface(mconfig, *this)
, m_nvram(*this, "nvram")
, m_rom_region(*this, finder_base::DUMMY_TAG)
, m_region_offset(0)
@@ -56,8 +56,12 @@ void msx_slot_panasonic08_device::device_start()
save_item(NAME(m_selected_bank));
save_item(NAME(m_control));
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_panasonic08_device::restore_banks), this));
+ restore_banks();
+}
+
+void msx_slot_panasonic08_device::device_post_load()
+{
restore_banks();
}
@@ -85,7 +89,7 @@ void msx_slot_panasonic08_device::restore_banks()
}
-READ8_MEMBER(msx_slot_panasonic08_device::read)
+uint8_t msx_slot_panasonic08_device::read(offs_t offset)
{
if (m_control & 0x04)
{
@@ -104,7 +108,7 @@ READ8_MEMBER(msx_slot_panasonic08_device::read)
}
-WRITE8_MEMBER(msx_slot_panasonic08_device::write)
+void msx_slot_panasonic08_device::write(offs_t offset, uint8_t data)
{
if ((offset & 0xc000) == 0x8000 || (offset & 0xc000) == 0x0000)
{
diff --git a/src/devices/bus/msx_slot/panasonic08.h b/src/devices/bus/msx_slot/panasonic08.h
index 33da0b6620b..b21a4964e3b 100644
--- a/src/devices/bus/msx_slot/panasonic08.h
+++ b/src/devices/bus/msx_slot/panasonic08.h
@@ -12,10 +12,6 @@
DECLARE_DEVICE_TYPE(MSX_SLOT_PANASONIC08, msx_slot_panasonic08_device)
-#define MCFG_MSX_SLOT_PANASONIC08_ADD(_tag, _startpage, _numpages, _region, _offset) \
- MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_PANASONIC08, _startpage, _numpages) \
- downcast<msx_slot_panasonic08_device &>(*device).set_rom_start(_region, _offset);
-
class msx_slot_panasonic08_device : public device_t, public msx_internal_slot_interface
{
public:
@@ -24,11 +20,12 @@ public:
// configuration helpers
void set_rom_start(const char *region, uint32_t offset) { m_rom_region.set_tag(region); m_region_offset = offset; }
- virtual DECLARE_READ8_MEMBER(read) override;
- virtual DECLARE_WRITE8_MEMBER(write) override;
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
protected:
virtual void device_start() override;
+ virtual void device_post_load() override;
virtual void device_add_mconfig(machine_config &config) override;
diff --git a/src/devices/bus/msx_slot/ram.cpp b/src/devices/bus/msx_slot/ram.cpp
index a113dab1d39..835a5551b92 100644
--- a/src/devices/bus/msx_slot/ram.cpp
+++ b/src/devices/bus/msx_slot/ram.cpp
@@ -8,7 +8,7 @@ DEFINE_DEVICE_TYPE(MSX_SLOT_RAM, msx_slot_ram_device, "msx_slot_ram", "MSX Inter
msx_slot_ram_device::msx_slot_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, MSX_SLOT_RAM, tag, owner, clock)
- , msx_internal_slot_interface()
+ , msx_internal_slot_interface(mconfig, *this)
{
}
@@ -18,7 +18,7 @@ void msx_slot_ram_device::device_start()
save_item(NAME(m_ram));
}
-READ8_MEMBER(msx_slot_ram_device::read)
+uint8_t msx_slot_ram_device::read(offs_t offset)
{
if ( offset >= m_start_address && offset < m_end_address )
{
@@ -27,7 +27,7 @@ READ8_MEMBER(msx_slot_ram_device::read)
return 0xFF;
}
-WRITE8_MEMBER(msx_slot_ram_device::write)
+void msx_slot_ram_device::write(offs_t offset, uint8_t data)
{
if ( offset >= m_start_address && offset < m_end_address )
{
diff --git a/src/devices/bus/msx_slot/ram.h b/src/devices/bus/msx_slot/ram.h
index 17bff978148..f96271ad066 100644
--- a/src/devices/bus/msx_slot/ram.h
+++ b/src/devices/bus/msx_slot/ram.h
@@ -5,23 +5,17 @@
#include "slot.h"
-#define MCFG_MSX_SLOT_RAM_ADD(_tag, _startpage, _numpages) \
- MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_RAM, _startpage, _numpages)
-
-#define MCFG_MSX_SLOT_RAM_8KB \
- downcast<msx_slot_ram_device &>(*device).force_start_address(0xe000);
-
-
class msx_slot_ram_device : public device_t,
public msx_internal_slot_interface
{
public:
msx_slot_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ // Set to 0xe000 for 8KB RAM
void force_start_address(uint16_t start) { m_start_address = start; }
- virtual DECLARE_READ8_MEMBER(read) override;
- virtual DECLARE_WRITE8_MEMBER(write) override;
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
protected:
virtual void device_start() override;
diff --git a/src/devices/bus/msx_slot/ram_mm.cpp b/src/devices/bus/msx_slot/ram_mm.cpp
index 1b765c832f2..ade67f6eb66 100644
--- a/src/devices/bus/msx_slot/ram_mm.cpp
+++ b/src/devices/bus/msx_slot/ram_mm.cpp
@@ -7,7 +7,7 @@ DEFINE_DEVICE_TYPE(MSX_SLOT_RAM_MM, msx_slot_ram_mm_device, "msx_slot_ram_mm", "
msx_slot_ram_mm_device::msx_slot_ram_mm_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, MSX_SLOT_RAM_MM, tag, owner, clock)
- , msx_internal_slot_interface()
+ , msx_internal_slot_interface(mconfig, *this)
, m_total_size(0)
, m_bank_mask(0)
, m_ramio_set_bits(0)
@@ -40,12 +40,14 @@ void msx_slot_ram_mm_device::device_start()
save_item(NAME(m_ram));
save_item(NAME(m_bank_selected));
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_ram_mm_device::restore_banks), this));
-
// Install IO read/write handlers
- address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
- space.install_read_handler(0xFC, 0xFF, read8_delegate(FUNC(msx_slot_ram_mm_device::read_mapper_bank), this));
- space.install_write_handler(0xFC, 0xFF, write8_delegate(FUNC(msx_slot_ram_mm_device::write_mapper_bank), this));
+ io_space().install_read_handler(0xFC, 0xFF, read8sm_delegate(FUNC(msx_slot_ram_mm_device::read_mapper_bank), this));
+ io_space().install_write_handler(0xFC, 0xFF, write8sm_delegate(FUNC(msx_slot_ram_mm_device::write_mapper_bank), this));
+}
+
+void msx_slot_ram_mm_device::device_post_load()
+{
+ restore_banks();
}
void msx_slot_ram_mm_device::restore_banks()
@@ -56,22 +58,22 @@ void msx_slot_ram_mm_device::restore_banks()
}
}
-READ8_MEMBER(msx_slot_ram_mm_device::read)
+uint8_t msx_slot_ram_mm_device::read(offs_t offset)
{
return m_bank_base[offset >> 14][offset & 0x3fff];
}
-WRITE8_MEMBER(msx_slot_ram_mm_device::write)
+void msx_slot_ram_mm_device::write(offs_t offset, uint8_t data)
{
m_bank_base[offset >> 14][offset & 0x3fff] = data;
}
-READ8_MEMBER(msx_slot_ram_mm_device::read_mapper_bank)
+uint8_t msx_slot_ram_mm_device::read_mapper_bank(offs_t offset)
{
return m_bank_selected[offset & 3] | m_ramio_set_bits;
}
-WRITE8_MEMBER(msx_slot_ram_mm_device::write_mapper_bank)
+void msx_slot_ram_mm_device::write_mapper_bank(offs_t offset, uint8_t data)
{
offset &= 3;
diff --git a/src/devices/bus/msx_slot/ram_mm.h b/src/devices/bus/msx_slot/ram_mm.h
index 87837909b2d..55f13659a4c 100644
--- a/src/devices/bus/msx_slot/ram_mm.h
+++ b/src/devices/bus/msx_slot/ram_mm.h
@@ -5,33 +5,27 @@
#include "slot.h"
-#define MCFG_MSX_SLOT_RAM_MM_ADD(_tag, _total_size) \
- MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_RAM_MM, 0, 4) \
- downcast<msx_slot_ram_mm_device &>(*device).set_total_size(_total_size);
-
-#define MCFG_MSX_SLOT_RAMM_SET_RAMIO_BITS(_ramio_set_bits) \
- downcast<msx_slot_ram_mm_device &>(*device).set_ramio_set_bits(_ramio_set_bits);
-
class msx_slot_ram_mm_device : public device_t, public msx_internal_slot_interface
{
public:
msx_slot_ram_mm_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- void set_total_size(uint32_t total_size) { m_total_size = total_size; }
- void set_ramio_set_bits(uint8_t ramio_set_bits) { m_ramio_set_bits = ramio_set_bits; }
+ msx_slot_ram_mm_device &set_total_size(uint32_t total_size) { m_total_size = total_size; return *this; }
+ msx_slot_ram_mm_device &set_ramio_bits(uint8_t ramio_set_bits) { m_ramio_set_bits = ramio_set_bits; return *this; }
- virtual DECLARE_READ8_MEMBER(read) override;
- virtual DECLARE_WRITE8_MEMBER(write) override;
-
- DECLARE_READ8_MEMBER(read_mapper_bank);
- DECLARE_WRITE8_MEMBER(write_mapper_bank);
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
protected:
virtual void device_start() override;
+ virtual void device_post_load() override;
void restore_banks();
private:
+ uint8_t read_mapper_bank(offs_t offset);
+ void write_mapper_bank(offs_t offset, uint8_t data);
+
std::vector<uint8_t> m_ram;
uint32_t m_total_size;
uint8_t m_bank_mask;
diff --git a/src/devices/bus/msx_slot/rom.cpp b/src/devices/bus/msx_slot/rom.cpp
index 186077edb55..aafc37b345b 100644
--- a/src/devices/bus/msx_slot/rom.cpp
+++ b/src/devices/bus/msx_slot/rom.cpp
@@ -15,7 +15,7 @@ msx_slot_rom_device::msx_slot_rom_device(const machine_config &mconfig, const ch
msx_slot_rom_device::msx_slot_rom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, type, tag, owner, clock)
- , msx_internal_slot_interface()
+ , msx_internal_slot_interface(mconfig, *this)
, m_rom_region(*this, finder_base::DUMMY_TAG)
, m_region_offset(0)
, m_rom(nullptr)
@@ -35,7 +35,7 @@ void msx_slot_rom_device::device_start()
}
-READ8_MEMBER(msx_slot_rom_device::read)
+uint8_t msx_slot_rom_device::read(offs_t offset)
{
if (offset >= m_start_address && offset < m_end_address)
{
diff --git a/src/devices/bus/msx_slot/rom.h b/src/devices/bus/msx_slot/rom.h
index eee554a362a..6bcd480a5a3 100644
--- a/src/devices/bus/msx_slot/rom.h
+++ b/src/devices/bus/msx_slot/rom.h
@@ -7,10 +7,6 @@
#include "slot.h"
-#define MCFG_MSX_SLOT_ROM_ADD(_tag, _startpage, _numpages, _region, _offset) \
- MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_ROM, _startpage, _numpages) \
- downcast<msx_slot_rom_device &>(*device).set_rom_start(_region, _offset);
-
class msx_slot_rom_device : public device_t,
public msx_internal_slot_interface
{
@@ -20,7 +16,7 @@ public:
// configuration helpers
void set_rom_start(const char *region, uint32_t offset) { m_rom_region.set_tag(region); m_region_offset = offset; }
- virtual DECLARE_READ8_MEMBER(read) override;
+ virtual uint8_t read(offs_t offset) override;
protected:
msx_slot_rom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
diff --git a/src/devices/bus/msx_slot/slot.cpp b/src/devices/bus/msx_slot/slot.cpp
index 3b826c87fa2..345cf6e0a5c 100644
--- a/src/devices/bus/msx_slot/slot.cpp
+++ b/src/devices/bus/msx_slot/slot.cpp
@@ -13,9 +13,12 @@ pages; and multiple pieces of rom/ram/components can occur in a single slot.
#include "emu.h"
#include "slot.h"
-msx_internal_slot_interface::msx_internal_slot_interface()
- : m_start_address(0)
+msx_internal_slot_interface::msx_internal_slot_interface(const machine_config &mconfig, device_t &device)
+ : m_mem_space(device, finder_base::DUMMY_TAG, -1)
+ , m_io_space(device, finder_base::DUMMY_TAG, -1)
+ , m_start_address(0)
, m_size(0)
, m_end_address(0)
{
+ (void)mconfig;
}
diff --git a/src/devices/bus/msx_slot/slot.h b/src/devices/bus/msx_slot/slot.h
index ad51f0c4f9d..3a95c7b6b75 100644
--- a/src/devices/bus/msx_slot/slot.h
+++ b/src/devices/bus/msx_slot/slot.h
@@ -15,25 +15,29 @@ pages; and multiple pieces of rom/ram/components can occur in a single slot.
#pragma once
-#define MCFG_MSX_INTERNAL_SLOT_ADD(_tag, _type, _startpage, _numpages) \
- MCFG_DEVICE_ADD(_tag, _type, 0) \
- dynamic_cast<msx_internal_slot_interface &>(*device).set_start_address(_startpage * 0x4000); \
- dynamic_cast<msx_internal_slot_interface &>(*device).set_size(_numpages * 0x4000);
-
class msx_internal_slot_interface
{
public:
- msx_internal_slot_interface();
+ msx_internal_slot_interface(const machine_config &mconfig, device_t &device);
+ msx_internal_slot_interface(const msx_internal_slot_interface &device) = delete;
virtual ~msx_internal_slot_interface() { }
// configuration helpers
+ template <typename T> void set_memory_space(T &&tag, int spacenum) { m_mem_space.set_tag(std::forward<T>(tag), spacenum); }
+ template <typename T> void set_io_space(T &&tag, int spacenum) { m_io_space.set_tag(std::forward<T>(tag), spacenum); }
void set_start_address(uint32_t start_address) { m_start_address = start_address; m_end_address = m_start_address + m_size; }
void set_size(uint32_t size) { m_size = size; m_end_address = m_start_address + m_size; }
- virtual DECLARE_READ8_MEMBER(read) { return 0xFF; }
- virtual DECLARE_WRITE8_MEMBER(write) { }
+ virtual uint8_t read(offs_t offset) { return 0xFF; }
+ virtual void write(offs_t offset, uint8_t data) { }
+
+ address_space &memory_space() const { return *m_mem_space; }
+ address_space &io_space() const { return *m_io_space; }
protected:
+ required_address_space m_mem_space;
+ required_address_space m_io_space;
+
uint32_t m_start_address;
uint32_t m_size;
uint32_t m_end_address;
diff --git a/src/devices/bus/msx_slot/sony08.cpp b/src/devices/bus/msx_slot/sony08.cpp
index 96f3f0fdedc..652ed134457 100644
--- a/src/devices/bus/msx_slot/sony08.cpp
+++ b/src/devices/bus/msx_slot/sony08.cpp
@@ -15,7 +15,7 @@ DEFINE_DEVICE_TYPE(MSX_SLOT_SONY08, msx_slot_sony08_device, "msx_slot_sony08", "
msx_slot_sony08_device::msx_slot_sony08_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, MSX_SLOT_SONY08, tag, owner, clock)
- , msx_internal_slot_interface()
+ , msx_internal_slot_interface(mconfig, *this)
, m_nvram(*this, "nvram")
, m_rom_region(*this, finder_base::DUMMY_TAG)
, m_region_offset(0)
@@ -50,8 +50,12 @@ void msx_slot_sony08_device::device_start()
save_item(NAME(m_selected_bank));
- machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_sony08_device::restore_banks), this));
+ restore_banks();
+}
+
+void msx_slot_sony08_device::device_post_load()
+{
restore_banks();
}
@@ -96,7 +100,7 @@ void msx_slot_sony08_device::restore_banks()
}
-READ8_MEMBER(msx_slot_sony08_device::read)
+uint8_t msx_slot_sony08_device::read(offs_t offset)
{
if (offset >= 0xc000)
{
@@ -118,7 +122,7 @@ READ8_MEMBER(msx_slot_sony08_device::read)
}
-WRITE8_MEMBER(msx_slot_sony08_device::write)
+void msx_slot_sony08_device::write(offs_t offset, uint8_t data)
{
if (offset < 0x4000)
{
diff --git a/src/devices/bus/msx_slot/sony08.h b/src/devices/bus/msx_slot/sony08.h
index 8dfd0297951..74c8fd95f35 100644
--- a/src/devices/bus/msx_slot/sony08.h
+++ b/src/devices/bus/msx_slot/sony08.h
@@ -12,10 +12,6 @@
DECLARE_DEVICE_TYPE(MSX_SLOT_SONY08, msx_slot_sony08_device)
-#define MCFG_MSX_SLOT_SONY08_ADD(_tag, _startpage, _numpages, _region, _offset) \
- MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_SONY08, _startpage, _numpages) \
- downcast<msx_slot_sony08_device &>(*device).set_rom_start(_region, _offset);
-
class msx_slot_sony08_device : public device_t, public msx_internal_slot_interface
{
public:
@@ -24,11 +20,12 @@ public:
// configuration helpers
void set_rom_start(const char *region, uint32_t offset) { m_rom_region.set_tag(region); m_region_offset = offset; }
- virtual DECLARE_READ8_MEMBER(read) override;
- virtual DECLARE_WRITE8_MEMBER(write) override;
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
protected:
virtual void device_start() override;
+ virtual void device_post_load() override;
virtual void device_add_mconfig(machine_config &config) override;
diff --git a/src/devices/bus/mtx/exp.cpp b/src/devices/bus/mtx/exp.cpp
new file mode 100644
index 00000000000..1bfd5068679
--- /dev/null
+++ b/src/devices/bus/mtx/exp.cpp
@@ -0,0 +1,109 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ MTX expansion emulation
+
+**********************************************************************/
+
+#include "emu.h"
+#include "exp.h"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(MTX_EXP_SLOT, mtx_exp_slot_device, "mtx_exp_slot", "MTX expansion slot")
+
+
+//**************************************************************************
+// DEVICE MTX_BUS PORT INTERFACE
+//**************************************************************************
+
+//-------------------------------------------------
+// device_mtx_exp_interface - constructor
+//-------------------------------------------------
+
+device_mtx_exp_interface::device_mtx_exp_interface(const machine_config &mconfig, device_t &device)
+ : device_slot_card_interface(mconfig, device)
+{
+ m_slot = dynamic_cast<mtx_exp_slot_device *>(device.owner());
+}
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// mtx_exp_slot_device - constructor
+//-------------------------------------------------
+
+mtx_exp_slot_device::mtx_exp_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, MTX_EXP_SLOT, tag, owner, clock)
+ , device_slot_interface(mconfig, *this)
+ , m_program(*this, finder_base::DUMMY_TAG, -1)
+ , m_io(*this, finder_base::DUMMY_TAG, -1)
+ , m_card(nullptr)
+ , m_busreq_handler(*this)
+ , m_int_handler(*this)
+ , m_nmi_handler(*this)
+{
+}
+
+
+//-------------------------------------------------
+// device_validity_check -
+//-------------------------------------------------
+
+void mtx_exp_slot_device::device_validity_check(validity_checker &valid) const
+{
+ device_t *const carddev = get_card_device();
+ if (carddev && !dynamic_cast<device_mtx_exp_interface *>(carddev))
+ osd_printf_error("Card device %s (%s) does not implement device_mtx_exp_interface\n", carddev->tag(), carddev->name());
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void mtx_exp_slot_device::device_start()
+{
+ device_t *const carddev = get_card_device();
+ if (carddev && !dynamic_cast<device_mtx_exp_interface *>(carddev))
+ osd_printf_error("Card device %s (%s) does not implement device_mtx_exp_interface\n", carddev->tag(), carddev->name());
+
+ // resolve callbacks
+ m_busreq_handler.resolve_safe();
+ m_int_handler.resolve_safe();
+ m_nmi_handler.resolve_safe();
+}
+
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void mtx_exp_slot_device::device_reset()
+{
+}
+
+
+//-------------------------------------------------
+// SLOT_INTERFACE( mtx_exp_devices )
+//-------------------------------------------------
+
+
+// slot devices
+//#include "fdx.h"
+#include "sdx.h"
+
+
+void mtx_expansion_devices(device_slot_interface &device)
+{
+ //device.option_add("fdx", MTX_FDX); /* FDX Floppy Disc System */
+ device.option_add("sdxbas", MTX_SDXBAS); /* SDX Floppy Disc System (SDX ROM)*/
+ device.option_add("sdxcpm", MTX_SDXCPM); /* SDX Floppy Disc System (CP/M ROM and 80 column card) */
+}
diff --git a/src/devices/bus/mtx/exp.h b/src/devices/bus/mtx/exp.h
new file mode 100644
index 00000000000..d4e05f2f9c9
--- /dev/null
+++ b/src/devices/bus/mtx/exp.h
@@ -0,0 +1,93 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ MTX expansion emulation
+
+**********************************************************************/
+
+
+#ifndef MAME_BUS_MTX_EXP_H
+#define MAME_BUS_MTX_EXP_H
+
+#pragma once
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> mtx_exp_slot_device
+
+class device_mtx_exp_interface;
+
+class mtx_exp_slot_device : public device_t, public device_slot_interface
+{
+public:
+ // construction/destruction
+ template <typename T>
+ mtx_exp_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&slot_options, const char *default_option)
+ : mtx_exp_slot_device(mconfig, tag, owner)
+ {
+ option_reset();
+ slot_options(*this);
+ set_default_option(default_option);
+ set_fixed(false);
+ }
+
+ mtx_exp_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock = 0);
+
+ template <typename T> void set_program_space(T &&tag, int spacenum) { m_program.set_tag(std::forward<T>(tag), spacenum); }
+ template <typename T> void set_io_space(T &&tag, int spacenum) { m_io.set_tag(std::forward<T>(tag), spacenum); }
+
+ // callbacks
+ auto busreq_handler() { return m_busreq_handler.bind(); }
+ auto int_handler() { return m_int_handler.bind(); }
+ auto nmi_handler() { return m_nmi_handler.bind(); }
+
+ DECLARE_WRITE_LINE_MEMBER( busreq_w ) { m_busreq_handler(state); }
+ DECLARE_WRITE_LINE_MEMBER( int_w ) { m_int_handler(state); }
+ DECLARE_WRITE_LINE_MEMBER( nmi_w ) { m_nmi_handler(state); }
+
+ // address spaces we are attached to
+ required_address_space m_program;
+ required_address_space m_io;
+
+protected:
+ // device-level overrides
+ virtual void device_validity_check(validity_checker &valid) const override;
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ device_mtx_exp_interface *m_card;
+
+private:
+ devcb_write_line m_busreq_handler;
+ devcb_write_line m_int_handler;
+ devcb_write_line m_nmi_handler;
+};
+
+
+// ======================> device_mtx_exp_interface
+
+class device_mtx_exp_interface : public device_slot_card_interface
+{
+public:
+ // construction/destruction
+ device_mtx_exp_interface(const machine_config &mconfig, device_t &device);
+
+protected:
+ address_space &program_space() { return *m_slot->m_program; }
+ address_space &io_space() { return *m_slot->m_io; }
+
+ mtx_exp_slot_device *m_slot;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(MTX_EXP_SLOT, mtx_exp_slot_device)
+
+void mtx_expansion_devices(device_slot_interface &device);
+
+
+#endif // MAME_BUS_MTX_EXP_H
diff --git a/src/devices/bus/mtx/sdx.cpp b/src/devices/bus/mtx/sdx.cpp
new file mode 100644
index 00000000000..44687e09f08
--- /dev/null
+++ b/src/devices/bus/mtx/sdx.cpp
@@ -0,0 +1,425 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ MTX SDX Controller
+
+**********************************************************************/
+
+
+#include "emu.h"
+#include "sdx.h"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(MTX_SDXBAS, mtx_sdxbas_device, "mtx_sdxbas", "MTX SDX Controller (BASIC)")
+DEFINE_DEVICE_TYPE(MTX_SDXCPM, mtx_sdxcpm_device, "mtx_sdxcpm", "MTX SDX Controller (CP/M)")
+
+
+//-------------------------------------------------
+// SLOT_INTERFACE( sdx_floppies )
+//-------------------------------------------------
+
+static void sdx_floppies(device_slot_interface &device)
+{
+ device.option_add("35dd", FLOPPY_35_DD);
+ device.option_add("525qd", FLOPPY_525_QD);
+}
+
+FLOPPY_FORMATS_MEMBER(mtx_sdx_device::floppy_formats)
+ FLOPPY_MTX_FORMAT
+FLOPPY_FORMATS_END
+
+//-------------------------------------------------
+// ROM( sdx )
+//-------------------------------------------------
+
+ROM_START( sdxbas )
+ ROM_REGION(0x2000, "sdx_rom", ROMREGION_ERASE00)
+ ROM_DEFAULT_BIOS("sdx07")
+ ROM_SYSTEM_BIOS(0, "sdx07", "Type 07")
+ ROMX_LOAD("sdxbas07.rom", 0x0000, 0x2000, CRC(db88b245) SHA1(05c89db8e39ec3165b4620432f48e1d59abe10dd), ROM_BIOS(0))
+ ROM_SYSTEM_BIOS(1, "sdx03", "Type 03")
+ ROMX_LOAD("sdxbas03.rom", 0x0000, 0x2000, CRC(2fc46a46) SHA1(f08e6a8cffbb3ca39633be6e9958bec85d1e5981), ROM_BIOS(1))
+ROM_END
+
+ROM_START( sdxcpm )
+ ROM_REGION(0x2000, "sdx_rom", ROMREGION_ERASE00)
+ ROM_DEFAULT_BIOS("sdx07")
+ ROM_SYSTEM_BIOS(0, "sdx07", "SDX07 CP/M")
+ ROMX_LOAD("sdxcpm07.rom", 0x0000, 0x2000, CRC(622a04ea) SHA1(c633ce1054b45afda53116e0c6e272a1ae6a2155), ROM_BIOS(0))
+
+ ROM_REGION(0x2000, "chargen", 0)
+ ROM_LOAD("80z_7a.bin", 0x0000, 0x1000, CRC(ea6fe865) SHA1(f84883f79bed34501e5828336894fad929bddbb5)) // alpha
+ ROM_LOAD("80z_9a.bin", 0x1000, 0x1000, NO_DUMP) // graphic
+ROM_END
+
+//-------------------------------------------------
+// INPUT_PORTS( sdx )
+//-------------------------------------------------
+
+INPUT_PORTS_START( sdx )
+ PORT_START("DSW0")
+ PORT_DIPNAME(0x01, 0x00, "Drive A: Head-load solenoid present") PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING(0x00, DEF_STR(Yes))
+ PORT_DIPSETTING(0x01, DEF_STR(No))
+ PORT_DIPNAME(0x02, 0x00, "Drive A: Double-sided drive") PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING(0x00, DEF_STR(Yes))
+ PORT_DIPSETTING(0x02, DEF_STR(No))
+ PORT_DIPNAME(0x04, 0x00, "Drive A: 96 TPI drive") PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING(0x00, DEF_STR(Yes))
+ PORT_DIPSETTING(0x04, DEF_STR(No))
+ PORT_DIPNAME(0x08, 0x00, "Drive A: Stepping rate") PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING(0x00, "Stepping rate 6ms")
+ PORT_DIPSETTING(0x08, "Stepping rate 12ms")
+
+ PORT_START("DSW1")
+ PORT_DIPNAME(0x01, 0x00, "Drive B: Head-load solenoid present") PORT_DIPLOCATION("SW2:1")
+ PORT_DIPSETTING(0x00, DEF_STR(Yes))
+ PORT_DIPSETTING(0x01, DEF_STR(No))
+ PORT_DIPNAME(0x02, 0x00, "Drive B: Double-sided drive") PORT_DIPLOCATION("SW2:2")
+ PORT_DIPSETTING(0x00, DEF_STR(Yes))
+ PORT_DIPSETTING(0x02, DEF_STR(No))
+ PORT_DIPNAME(0x04, 0x00, "Drive B: 96 TPI drive") PORT_DIPLOCATION("SW2:3")
+ PORT_DIPSETTING(0x00, DEF_STR(Yes))
+ PORT_DIPSETTING(0x04, DEF_STR(No))
+ PORT_DIPNAME(0x08, 0x00, "Drive B: Stepping rate") PORT_DIPLOCATION("SW2:4")
+ PORT_DIPSETTING(0x00, "Stepping rate 6ms")
+ PORT_DIPSETTING(0x08, "Stepping rate 12ms")
+INPUT_PORTS_END
+
+//-------------------------------------------------
+// input_ports - device-specific input ports
+//-------------------------------------------------
+
+ioport_constructor mtx_sdx_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME(sdx);
+}
+
+//-------------------------------------------------
+// gfx_layout mtx_sdx_charlayout
+//-------------------------------------------------
+
+static const gfx_layout mtx_sdx_charlayout =
+{
+ 8, 10, /* 8 x 10 characters */
+ 256, /* 256 characters */
+ 1, /* 1 bits per pixel */
+ { 0 }, /* no bitplanes */
+ /* x offsets */
+ { 0, 1, 2, 3, 4, 5, 6, 7 },
+ /* y offsets */
+ { 0 * 8, 1 * 8, 2 * 8, 3 * 8, 4 * 8, 5 * 8, 6 * 8, 7 * 8, 8 * 8, 9 * 8 },
+ 8 * 16 /* every char takes 16 bytes */
+};
+
+//-------------------------------------------------
+// GFXDECODE( gfx_mtx_sdx )
+//-------------------------------------------------
+
+static GFXDECODE_START(gfx_mtx_sdx)
+ GFXDECODE_ENTRY("chargen", 0, mtx_sdx_charlayout, 0, 8)
+GFXDECODE_END
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void mtx_sdxbas_device::device_add_mconfig(machine_config &config)
+{
+ /* fdc */
+ MB8877(config, m_fdc, 8_MHz_XTAL / 8);
+ m_fdc->hld_wr_callback().set(FUNC(mtx_sdx_device::motor_w));
+
+ FLOPPY_CONNECTOR(config, "fdc:0", sdx_floppies, "525qd", mtx_sdx_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, "fdc:1", sdx_floppies, "525qd", mtx_sdx_device::floppy_formats).enable_sound(true);
+}
+
+void mtx_sdxcpm_device::device_add_mconfig(machine_config &config)
+{
+ /* fdc */
+ MB8877(config, m_fdc, 8_MHz_XTAL / 8);
+ m_fdc->hld_wr_callback().set(FUNC(mtx_sdx_device::motor_w));
+
+ FLOPPY_CONNECTOR(config, "fdc:0", sdx_floppies, "525qd", mtx_sdx_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, "fdc:1", sdx_floppies, "525qd", mtx_sdx_device::floppy_formats).enable_sound(true);
+
+ /* 80 column video card - required to be installed in MTX internally */
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ m_screen->set_refresh_hz(50);
+ m_screen->set_size(960, 313);
+ m_screen->set_visarea(00, 640 - 1, 0, 240 - 1);
+ m_screen->set_screen_update("crtc", FUNC(hd6845_device::screen_update));
+
+ GFXDECODE(config, "gfxdecode", "palette", gfx_mtx_sdx);
+ PALETTE(config, "palette", palette_device::RGB_3BIT);
+
+ HD6845(config, m_crtc, 15_MHz_XTAL / 8);
+ m_crtc->set_screen("screen");
+ m_crtc->set_show_border_area(false);
+ m_crtc->set_char_width(8);
+ m_crtc->set_update_row_callback(FUNC(mtx_sdxcpm_device::crtc_update_row), this);
+}
+
+
+const tiny_rom_entry *mtx_sdxbas_device::device_rom_region() const
+{
+ return ROM_NAME( sdxbas );
+}
+
+const tiny_rom_entry *mtx_sdxcpm_device::device_rom_region() const
+{
+ return ROM_NAME( sdxcpm );
+}
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// mtx_sdx_device - constructor
+//-------------------------------------------------
+
+mtx_sdx_device::mtx_sdx_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_mtx_exp_interface(mconfig, *this)
+ , m_sdx_rom(*this, "sdx_rom")
+ , m_fdc(*this, "fdc")
+ , m_floppy0(*this, "fdc:0")
+ , m_floppy1(*this, "fdc:1")
+ , m_dsw(*this, "DSW%u", 0)
+{
+}
+
+mtx_sdxbas_device::mtx_sdxbas_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : mtx_sdx_device(mconfig, MTX_SDXBAS, tag, owner, clock)
+{
+}
+
+mtx_sdxcpm_device::mtx_sdxcpm_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : mtx_sdx_device(mconfig, MTX_SDXCPM, tag, owner, clock)
+ , m_screen(*this, "screen")
+ , m_palette(*this, "palette")
+ , m_crtc(*this, "crtc")
+ , m_char_rom(*this, "chargen")
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void mtx_sdxbas_device::device_start()
+{
+ save_item(NAME(m_control));
+}
+
+void mtx_sdxcpm_device::device_start()
+{
+ save_item(NAME(m_control));
+ save_item(NAME(m_80col_ascii));
+ save_item(NAME(m_80col_attr));
+ save_item(NAME(m_80col_addr));
+ save_item(NAME(m_80col_char_ram));
+ save_item(NAME(m_80col_attr_ram));
+}
+
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void mtx_sdxbas_device::device_reset()
+{
+ machine().root_device().membank("rommap_bank1")->configure_entry(3, m_sdx_rom->base());
+
+ /* SDX FDC */
+ io_space().install_readwrite_handler(0x10, 0x13, read8sm_delegate(FUNC(mb8877_device::read), m_fdc.target()), write8sm_delegate(FUNC(mb8877_device::write), m_fdc.target()));
+ io_space().install_readwrite_handler(0x14, 0x14, read8_delegate(FUNC(mtx_sdx_device::sdx_status_r), this), write8_delegate(FUNC(mtx_sdx_device::sdx_control_w), this));
+}
+
+void mtx_sdxcpm_device::device_reset()
+{
+ machine().root_device().membank("rommap_bank1")->configure_entry(3, m_sdx_rom->base());
+
+ /* SDX FDC */
+ io_space().install_readwrite_handler(0x10, 0x13, read8sm_delegate(FUNC(mb8877_device::read), m_fdc.target()), write8sm_delegate(FUNC(mb8877_device::write), m_fdc.target()));
+ io_space().install_readwrite_handler(0x14, 0x14, read8_delegate(FUNC(mtx_sdx_device::sdx_status_r), this), write8_delegate(FUNC(mtx_sdx_device::sdx_control_w), this));
+
+ /* 80 column */
+ io_space().install_readwrite_handler(0x30, 0x33, read8_delegate(FUNC(mtx_sdxcpm_device::mtx_80col_r), this), write8_delegate(FUNC(mtx_sdxcpm_device::mtx_80col_w), this));
+ io_space().install_readwrite_handler(0x38, 0x38, read8smo_delegate(FUNC(mc6845_device::status_r), m_crtc.target()), write8smo_delegate(FUNC(mc6845_device::address_w), m_crtc.target()));
+ io_space().install_readwrite_handler(0x39, 0x39, read8smo_delegate(FUNC(mc6845_device::register_r), m_crtc.target()), write8smo_delegate(FUNC(mc6845_device::register_w), m_crtc.target()));
+
+ memset(m_80col_char_ram, 0, sizeof(m_80col_char_ram));
+ memset(m_80col_attr_ram, 0, sizeof(m_80col_attr_ram));
+}
+
+
+//**************************************************************************
+// IMPLEMENTATION
+//**************************************************************************
+
+READ8_MEMBER(mtx_sdx_device::sdx_status_r)
+{
+ /*
+ bit description
+ 0 Head load: 1 - head load on drive
+ 1 Double-sided: 1 if drive double-sided
+ 2 TPI: 0 - 48 TPI drive. 1 - 96 TPI drive
+ 3 Track stepping rate: 0 - 12ms, 1 - 6ms
+ 4 No. of drives: 0 - 1 drive, 1 - 2 drives
+ 5 Ready: 1 - drive ready
+ 6 Interrupt: 1 - FDC interrupt request
+ 7 Data request: 1 - FDC data request
+ */
+
+ uint8_t data = 0x00;
+
+ data |= m_dsw[BIT(m_control, 0)].read_safe(0x0f) & 0x0f;
+
+ data |= (m_floppy0->get_device() && m_floppy1->get_device()) ? 0x10 : 0x00;
+
+ if (m_floppy)
+ data |= m_floppy->ready_r() ? 0x00 : 0x20;
+
+ data |= m_fdc->intrq_r() ? 0x40 : 0x00;
+ data |= m_fdc->drq_r() ? 0x80 : 0x00;
+
+ return data;
+}
+
+WRITE8_MEMBER(mtx_sdx_device::sdx_control_w)
+{
+ /*
+ bit description
+ 0 Drive select: 0 - drive A, 1 - drive B
+ 1 Side select: 0 - side 0, 1 - side 1
+ 2 Motor on: 1 - turns drive motor on
+ 3 Motor ready: 1 - drive motor ready
+ 4 Density: 0 - FM, 1 - MFM
+ */
+
+ m_control = data;
+
+ /* bit 0: drive select */
+ m_floppy = BIT(data, 0) ? m_floppy1->get_device() : m_floppy0->get_device();
+
+ m_fdc->set_floppy(m_floppy);
+
+ if (m_floppy)
+ {
+ /* bit 1: side select */
+ m_floppy->ss_w(BIT(data, 1));
+ logerror("motor on %d\n", BIT(data, 2));
+ /* bit 2: motor on */
+ m_floppy->mon_w(!(BIT(data, 2) || m_fdc->hld_r()));
+ logerror("head load %d\n", m_fdc->hld_r());
+ /* bit 3: motor ready */
+ //if (BIT(data, 3))
+ //m_floppy->mon_w(!BIT(data, 2));
+ //m_floppy->mon_w(!BIT(data, 3));
+ logerror("motor ready %d\n", BIT(data, 3));
+ }
+
+ /* bit 4: density */
+ m_fdc->dden_w(!BIT(data, 4));
+}
+
+WRITE_LINE_MEMBER(mtx_sdx_device::motor_w)
+{
+ if (m_floppy0->get_device()) m_floppy0->get_device()->mon_w(0);
+ if (m_floppy1->get_device()) m_floppy1->get_device()->mon_w(0);
+}
+
+//-------------------------------------------------
+// 80 column video board
+//-------------------------------------------------
+
+READ8_MEMBER(mtx_sdxcpm_device::mtx_80col_r)
+{
+ uint8_t data = 0xff;
+
+ switch (offset)
+ {
+ case 0:
+ /* ring the bell */
+ break;
+ case 2:
+ if (!BIT(m_80col_addr, 15))
+ data = m_80col_char_ram[m_80col_addr & 0x07ff];
+ break;
+ case 3:
+ if (!BIT(m_80col_addr, 15))
+ data = m_80col_attr_ram[m_80col_addr & 0x07ff];
+ break;
+ }
+ return data;
+}
+
+WRITE8_MEMBER(mtx_sdxcpm_device::mtx_80col_w)
+{
+ switch (offset)
+ {
+ case 0:
+ m_80col_addr = (m_80col_addr & 0xff00) | data;
+ /* write to ram */
+ if (BIT(m_80col_addr, 15))
+ {
+ /* write enable ascii ram */
+ if (BIT(m_80col_addr, 14))
+ m_80col_char_ram[m_80col_addr & 0x07ff] = m_80col_ascii;
+
+ /* write enable attribute ram */
+ if (BIT(m_80col_addr, 13))
+ m_80col_attr_ram[m_80col_addr & 0x07ff] = m_80col_attr;
+ }
+ break;
+ case 1:
+ m_80col_addr = (data << 8) | (m_80col_addr & 0x00ff);
+ break;
+ case 2:
+ m_80col_ascii = data;
+ break;
+ case 3:
+ m_80col_attr = data;
+ break;
+ }
+}
+
+MC6845_UPDATE_ROW(mtx_sdxcpm_device::crtc_update_row)
+{
+ const pen_t *pen = m_palette->pens();
+
+ for (int column = 0; column < x_count; column++)
+ {
+ uint8_t code = m_80col_char_ram[(ma + column) & 0x7ff];
+ uint8_t attr = m_80col_attr_ram[(ma + column) & 0x7ff];
+ offs_t addr = (code << 4) | (ra & 0x0f);
+ uint8_t data = m_char_rom->base()[addr];
+
+ if (column == cursor_x)
+ {
+ data = 0xff;
+ attr = 0x07;
+ }
+
+ for (int bit = 0; bit < 8; bit++)
+ {
+ int x = (column * 8) + bit;
+ int fg = attr & 0x07;
+ int bg = attr & 0x38;
+
+ int color = BIT(data, 7) ? fg : bg;
+
+ bitmap.pix32(y, x) = pen[de ? color : 0];
+
+ data <<= 1;
+ }
+ }
+}
diff --git a/src/devices/bus/mtx/sdx.h b/src/devices/bus/mtx/sdx.h
new file mode 100644
index 00000000000..dff83358dd4
--- /dev/null
+++ b/src/devices/bus/mtx/sdx.h
@@ -0,0 +1,105 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ MTX SDX Controller
+
+**********************************************************************/
+
+
+#ifndef MAME_BUS_MTX_EXP_SDX_H
+#define MAME_BUS_MTX_EXP_SDX_H
+
+#include "exp.h"
+#include "imagedev/floppy.h"
+#include "machine/wd_fdc.h"
+#include "video/mc6845.h"
+#include "formats/mtx_dsk.h"
+#include "emupal.h"
+#include "screen.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+class mtx_sdx_device :
+ public device_t,
+ public device_mtx_exp_interface
+{
+public:
+ DECLARE_FLOPPY_FORMATS(floppy_formats);
+
+ // optional information overrides
+ virtual ioport_constructor device_input_ports() const override;
+
+ DECLARE_READ8_MEMBER(sdx_status_r);
+ DECLARE_WRITE8_MEMBER(sdx_control_w);
+ DECLARE_WRITE_LINE_MEMBER(motor_w);
+
+protected:
+ // construction/destruction
+ mtx_sdx_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ required_memory_region m_sdx_rom;
+ required_device<mb8877_device> m_fdc;
+ required_device<floppy_connector> m_floppy0;
+ required_device<floppy_connector> m_floppy1;
+ required_ioport_array<2> m_dsw;
+ floppy_image_device *m_floppy;
+ uint8_t m_control;
+};
+
+class mtx_sdxbas_device : public mtx_sdx_device
+{
+public:
+ // construction/destruction
+ mtx_sdxbas_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+};
+
+class mtx_sdxcpm_device : public mtx_sdx_device
+{
+public:
+ // construction/destruction
+ mtx_sdxcpm_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+private:
+ DECLARE_READ8_MEMBER(mtx_80col_r);
+ DECLARE_WRITE8_MEMBER(mtx_80col_w);
+ MC6845_UPDATE_ROW(crtc_update_row);
+
+ required_device<screen_device> m_screen;
+ required_device<palette_device> m_palette;
+ required_device<mc6845_device> m_crtc;
+ required_memory_region m_char_rom;
+ uint8_t m_80col_char_ram[0x800];
+ uint8_t m_80col_attr_ram[0x800];
+ uint8_t m_80col_ascii, m_80col_attr;
+ uint16_t m_80col_addr;
+};
+
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(MTX_SDXBAS, mtx_sdxbas_device)
+DECLARE_DEVICE_TYPE(MTX_SDXCPM, mtx_sdxcpm_device)
+
+
+#endif // MAME_BUS_MTX_EXP_SDX_H
diff --git a/src/devices/bus/nasbus/avc.cpp b/src/devices/bus/nasbus/avc.cpp
index a0a71da3666..4aacc354567 100644
--- a/src/devices/bus/nasbus/avc.cpp
+++ b/src/devices/bus/nasbus/avc.cpp
@@ -22,10 +22,11 @@ DEFINE_DEVICE_TYPE(NASCOM_AVC, nascom_avc_device, "nascom_avc", "Nascom Advanced
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(nascom_avc_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(16250000, 1024, 0, 768, 320, 0, 256)
- MCFG_SCREEN_UPDATE_DEVICE("mc6845", mc6845_device, screen_update)
+void nascom_avc_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(16250000, 1024, 0, 768, 320, 0, 256);
+ screen.set_screen_update("mc6845", FUNC(mc6845_device::screen_update));
PALETTE(config, m_palette, palette_device::RGB_3BIT);
@@ -34,7 +35,7 @@ MACHINE_CONFIG_START(nascom_avc_device::device_add_mconfig)
m_crtc->set_show_border_area(false);
m_crtc->set_char_width(6);
m_crtc->set_update_row_callback(FUNC(nascom_avc_device::crtc_update_row), this);
-MACHINE_CONFIG_END
+}
//**************************************************************************
@@ -77,8 +78,8 @@ void nascom_avc_device::device_start()
void nascom_avc_device::device_reset()
{
- io_space().install_write_handler(0xb0, 0xb0, write8_delegate(FUNC(mc6845_device::address_w), m_crtc.target()));
- io_space().install_readwrite_handler(0xb1, 0xb1, read8_delegate(FUNC(mc6845_device::register_r), m_crtc.target()), write8_delegate(FUNC(mc6845_device::register_w), m_crtc.target()));
+ io_space().install_write_handler(0xb0, 0xb0, write8smo_delegate(FUNC(mc6845_device::address_w), m_crtc.target()));
+ io_space().install_readwrite_handler(0xb1, 0xb1, read8smo_delegate(FUNC(mc6845_device::register_r), m_crtc.target()), write8smo_delegate(FUNC(mc6845_device::register_w), m_crtc.target()));
io_space().install_write_handler(0xb2, 0xb2, write8_delegate(FUNC(nascom_avc_device::control_w), this));
}
diff --git a/src/devices/bus/nasbus/nasbus.cpp b/src/devices/bus/nasbus/nasbus.cpp
index 585b1043c07..ed6cf27bc7a 100644
--- a/src/devices/bus/nasbus/nasbus.cpp
+++ b/src/devices/bus/nasbus/nasbus.cpp
@@ -22,15 +22,14 @@ DEFINE_DEVICE_TYPE(NASBUS_SLOT, nasbus_slot_device, "nasbus_slot", "NASBUS Slot"
// nasbus_slot_device - constructor
//-------------------------------------------------
-nasbus_slot_device::nasbus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- nasbus_slot_device(mconfig, NASBUS_SLOT, tag, owner, clock)
+nasbus_slot_device::nasbus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : nasbus_slot_device(mconfig, NASBUS_SLOT, tag, owner, clock)
{
}
-nasbus_slot_device::nasbus_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
- device_t(mconfig, type, tag, owner, clock),
- device_slot_interface(mconfig, *this),
- m_nasbus_tag(nullptr)
+nasbus_slot_device::nasbus_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_slot_interface(mconfig, *this)
{
}
@@ -44,7 +43,7 @@ void nasbus_slot_device::device_start()
if (dev)
{
- nasbus_device *m_nasbus = downcast<nasbus_device *>(m_owner->subdevice(m_nasbus_tag));
+ nasbus_device *m_nasbus = downcast<nasbus_device *>(owner()->subdevice(NASBUS_TAG));
m_nasbus->add_card(dev);
}
}
@@ -62,8 +61,8 @@ DEFINE_DEVICE_TYPE(NASBUS, nasbus_device, "nasbus", "NASBUS Backplane")
nasbus_device::nasbus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, NASBUS, tag, owner, clock),
- m_program(nullptr),
- m_io(nullptr),
+ m_program(*this, finder_base::DUMMY_TAG, -1),
+ m_io(*this, finder_base::DUMMY_TAG, -1),
m_ram_disable_handler(*this)
{
}
@@ -105,24 +104,6 @@ void nasbus_device::add_card(device_nasbus_card_interface *card)
m_dev.append(*card);
}
-//-------------------------------------------------
-// set_program_space - set address space we are attached to
-//-------------------------------------------------
-
-void nasbus_device::set_program_space(address_space *program)
-{
- m_program = program;
-}
-
-//-------------------------------------------------
-// set_io_space - set address space we are attached to
-//-------------------------------------------------
-
-void nasbus_device::set_io_space(address_space *io)
-{
- m_io = io;
-}
-
// callbacks from slot device to the host
WRITE_LINE_MEMBER( nasbus_device::ram_disable_w ) { m_ram_disable_handler(state); }
diff --git a/src/devices/bus/nasbus/nasbus.h b/src/devices/bus/nasbus/nasbus.h
index 8a0a1d3775f..c2c11e2db9a 100644
--- a/src/devices/bus/nasbus/nasbus.h
+++ b/src/devices/bus/nasbus/nasbus.h
@@ -102,22 +102,6 @@
//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_NASBUS_ADD(_tag) \
- MCFG_DEVICE_ADD(_tag, NASBUS, 0)
-
-#define MCFG_NASBUS_SLOT_ADD(_tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, NASBUS_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- downcast<nasbus_slot_device &>(*device).set_nasbus_slot(this, NASBUS_TAG);
-
-#define MCFG_NASBUS_RAM_DISABLE_HANDLER(_devcb) \
- downcast<nasbus_device &>(*device).set_ram_disable_handler(DEVCB_##_devcb);
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -130,18 +114,22 @@ class nasbus_slot_device : public device_t, public device_slot_interface
{
public:
// construction/destruction
+ template <typename T>
+ nasbus_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : nasbus_slot_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
nasbus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- // inline configuration
- void set_nasbus_slot(device_t *owner, const char *nasbus_tag) { m_owner = owner; m_nasbus_tag = nasbus_tag; }
protected:
nasbus_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
virtual void device_start() override;
-
- // configuration
- const char *m_nasbus_tag;
};
// device type definition
@@ -154,15 +142,15 @@ class nasbus_device : public device_t
friend class device_nasbus_card_interface;
public:
// construction/destruction
- nasbus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ nasbus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
virtual ~nasbus_device();
- template <class Object> devcb_base &set_ram_disable_handler(Object &&cb) { return m_ram_disable_handler.set_callback(std::forward<Object>(cb)); }
+ auto ram_disable() { return m_ram_disable_handler.bind(); }
void add_card(device_nasbus_card_interface *card);
- void set_program_space(address_space *program);
- void set_io_space(address_space *io);
+ template <typename T> void set_program_space(T &&tag, int spacenum) { m_program.set_tag(std::forward<T>(tag), spacenum); }
+ template <typename T> void set_io_space(T &&tag, int spacenum) { m_io.set_tag(std::forward<T>(tag), spacenum); }
// from cards
DECLARE_WRITE_LINE_MEMBER( ram_disable_w );
@@ -173,8 +161,8 @@ protected:
virtual void device_reset() override;
private:
- address_space *m_program;
- address_space *m_io;
+ required_address_space m_program;
+ required_address_space m_io;
simple_list<device_nasbus_card_interface> m_dev;
diff --git a/src/devices/bus/neogeo/boot_cthd.cpp b/src/devices/bus/neogeo/boot_cthd.cpp
index 2f6659fddbe..70c4d891ad5 100644
--- a/src/devices/bus/neogeo/boot_cthd.cpp
+++ b/src/devices/bus/neogeo/boot_cthd.cpp
@@ -48,9 +48,10 @@ void neogeo_cthd2k3_cart_device::device_reset()
mapper specific handlers
-------------------------------------------------*/
-MACHINE_CONFIG_START(neogeo_cthd2k3_cart_device::device_add_mconfig)
- MCFG_CTHD_PROT_ADD("cthd_prot")
-MACHINE_CONFIG_END
+void neogeo_cthd2k3_cart_device::device_add_mconfig(machine_config &config)
+{
+ NG_CTHD_PROT(config, m_prot);
+}
/*************************************************
@@ -122,8 +123,9 @@ void neogeo_matrimbl_cart_device::decrypt_all(DECRYPT_ALL_PARAMS)
}
- MACHINE_CONFIG_START(neogeo_matrimbl_cart_device::device_add_mconfig)
- MCFG_KOF2002_PROT_ADD("kof2k2_prot")
- MCFG_CMC_PROT_ADD("cmc_prot")
- MCFG_CTHD_PROT_ADD("cthd_prot")
-MACHINE_CONFIG_END
+void neogeo_matrimbl_cart_device::device_add_mconfig(machine_config &config)
+{
+ NG_KOF2002_PROT(config, m_kof2k2_prot);
+ NG_CMC_PROT(config, m_cmc_prot);
+ NG_CTHD_PROT(config, m_prot);
+}
diff --git a/src/devices/bus/neogeo/boot_kof10th.cpp b/src/devices/bus/neogeo/boot_kof10th.cpp
index 1fa9aeb1d84..d1dd9c925f5 100644
--- a/src/devices/bus/neogeo/boot_kof10th.cpp
+++ b/src/devices/bus/neogeo/boot_kof10th.cpp
@@ -48,9 +48,10 @@ void neogeo_kof10th_cart_device::device_reset()
mapper specific handlers
-------------------------------------------------*/
-MACHINE_CONFIG_START(neogeo_kof10th_cart_device::device_add_mconfig)
- MCFG_NEOBOOT_PROT_ADD("bootleg_prot")
-MACHINE_CONFIG_END
+void neogeo_kof10th_cart_device::device_add_mconfig(machine_config &config)
+{
+ NEOBOOT_PROT(config, m_prot);
+}
void neogeo_kof10th_cart_device::decrypt_all(DECRYPT_ALL_PARAMS)
diff --git a/src/devices/bus/neogeo/boot_kof2k2.cpp b/src/devices/bus/neogeo/boot_kof2k2.cpp
index 611ff47a382..8bbf3ab0962 100644
--- a/src/devices/bus/neogeo/boot_kof2k2.cpp
+++ b/src/devices/bus/neogeo/boot_kof2k2.cpp
@@ -12,24 +12,27 @@
#include "boot_kof2k2.h"
-MACHINE_CONFIG_START(neogeo_kof2002b_cart_device::device_add_mconfig)
- MCFG_NEOBOOT_PROT_ADD("bootleg_prot")
- MCFG_CMC_PROT_ADD("cmc_prot")
- MCFG_PCM2_PROT_ADD("pcm2_prot")
- MCFG_KOF2002_PROT_ADD("kof2k2_prot")
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(neogeo_kf2k2mp_cart_device::device_add_mconfig)
- MCFG_NEOBOOT_PROT_ADD("bootleg_prot")
- MCFG_CMC_PROT_ADD("cmc_prot")
- MCFG_PCM2_PROT_ADD("pcm2_prot")
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(neogeo_kf2k2mp2_cart_device::device_add_mconfig)
- MCFG_NEOBOOT_PROT_ADD("bootleg_prot")
- MCFG_CMC_PROT_ADD("cmc_prot")
- MCFG_PCM2_PROT_ADD("pcm2_prot")
-MACHINE_CONFIG_END
+void neogeo_kof2002b_cart_device::device_add_mconfig(machine_config &config)
+{
+ NEOBOOT_PROT(config, m_prot);
+ NG_CMC_PROT(config, m_cmc_prot);
+ NG_PCM2_PROT(config, m_pcm2_prot);
+ NG_KOF2002_PROT(config, m_kof2k2_prot);
+}
+
+void neogeo_kf2k2mp_cart_device::device_add_mconfig(machine_config &config)
+{
+ NEOBOOT_PROT(config, m_prot);
+ NG_CMC_PROT(config, m_cmc_prot);
+ NG_PCM2_PROT(config, m_pcm2_prot);
+}
+
+void neogeo_kf2k2mp2_cart_device::device_add_mconfig(machine_config &config)
+{
+ NEOBOOT_PROT(config, m_prot);
+ NG_CMC_PROT(config, m_cmc_prot);
+ NG_PCM2_PROT(config, m_pcm2_prot);
+}
/*************************************************
kof2002b
diff --git a/src/devices/bus/neogeo/boot_kof2k3.cpp b/src/devices/bus/neogeo/boot_kof2k3.cpp
index 2c0f4f375a3..172a0ad56db 100644
--- a/src/devices/bus/neogeo/boot_kof2k3.cpp
+++ b/src/devices/bus/neogeo/boot_kof2k3.cpp
@@ -12,26 +12,29 @@
#include "boot_kof2k3.h"
-MACHINE_CONFIG_START(neogeo_kf2k3bl_cart_device::device_add_mconfig)
- MCFG_NEOBOOT_PROT_ADD("bootleg_prot")
- MCFG_CMC_PROT_ADD("cmc_prot")
- MCFG_PCM2_PROT_ADD("pcm2_prot")
- MCFG_KOF2K3BL_PROT_ADD("kof2k3bl_prot")
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(neogeo_kf2k3pl_cart_device::device_add_mconfig)
- MCFG_NEOBOOT_PROT_ADD("bootleg_prot")
- MCFG_CMC_PROT_ADD("cmc_prot")
- MCFG_PCM2_PROT_ADD("pcm2_prot")
- MCFG_KOF2K3BL_PROT_ADD("kof2k3bl_prot")
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(neogeo_kf2k3upl_cart_device::device_add_mconfig)
- MCFG_NEOBOOT_PROT_ADD("bootleg_prot")
- MCFG_CMC_PROT_ADD("cmc_prot")
- MCFG_PCM2_PROT_ADD("pcm2_prot")
- MCFG_KOF2K3BL_PROT_ADD("kof2k3bl_prot")
-MACHINE_CONFIG_END
+void neogeo_kf2k3bl_cart_device::device_add_mconfig(machine_config &config)
+{
+ NEOBOOT_PROT(config, m_prot);
+ NG_CMC_PROT(config, m_cmc_prot);
+ NG_PCM2_PROT(config, m_pcm2_prot);
+ NG_KOF2K3BL_PROT(config, m_kof2k3bl_prot);
+}
+
+void neogeo_kf2k3pl_cart_device::device_add_mconfig(machine_config &config)
+{
+ NEOBOOT_PROT(config, m_prot);
+ NG_CMC_PROT(config, m_cmc_prot);
+ NG_PCM2_PROT(config, m_pcm2_prot);
+ NG_KOF2K3BL_PROT(config, m_kof2k3bl_prot);
+}
+
+void neogeo_kf2k3upl_cart_device::device_add_mconfig(machine_config &config)
+{
+ NEOBOOT_PROT(config, m_prot);
+ NG_CMC_PROT(config, m_cmc_prot);
+ NG_PCM2_PROT(config, m_pcm2_prot);
+ NG_KOF2K3BL_PROT(config, m_kof2k3bl_prot);
+}
/*************************************************
kf2k3bl
diff --git a/src/devices/bus/neogeo/boot_misc.cpp b/src/devices/bus/neogeo/boot_misc.cpp
index f22a0236ebf..b544fa93976 100644
--- a/src/devices/bus/neogeo/boot_misc.cpp
+++ b/src/devices/bus/neogeo/boot_misc.cpp
@@ -48,9 +48,10 @@ void neogeo_bootleg_cart_device::device_reset()
mapper specific handlers
-------------------------------------------------*/
-MACHINE_CONFIG_START(neogeo_bootleg_cart_device::device_add_mconfig)
- MCFG_NEOBOOT_PROT_ADD("bootleg_prot")
-MACHINE_CONFIG_END
+void neogeo_bootleg_cart_device::device_add_mconfig(machine_config &config)
+{
+ NEOBOOT_PROT(config, m_prot);
+}
/*************************************************
@@ -207,10 +208,11 @@ void neogeo_mslug3b6_cart_device::decrypt_all(DECRYPT_ALL_PARAMS)
m_cmc_prot->cmc42_gfx_decrypt(spr_region, spr_region_size, MSLUG3_GFX_KEY);
}
-MACHINE_CONFIG_START(neogeo_mslug3b6_cart_device::device_add_mconfig)
- MCFG_CMC_PROT_ADD("cmc_prot")
- MCFG_NEOBOOT_PROT_ADD("bootleg_prot")
-MACHINE_CONFIG_END
+void neogeo_mslug3b6_cart_device::device_add_mconfig(machine_config &config)
+{
+ NG_CMC_PROT(config, m_cmc_prot);
+ NEOBOOT_PROT(config, m_prot);
+}
/*************************************************
@@ -234,11 +236,12 @@ void neogeo_ms5plus_cart_device::decrypt_all(DECRYPT_ALL_PARAMS)
m_prot->sx_decrypt(fix_region, fix_region_size, 1);
}
-MACHINE_CONFIG_START(neogeo_ms5plus_cart_device::device_add_mconfig)
- MCFG_NEOBOOT_PROT_ADD("bootleg_prot")
- MCFG_CMC_PROT_ADD("cmc_prot")
- MCFG_PCM2_PROT_ADD("pcm2_prot")
-MACHINE_CONFIG_END
+void neogeo_ms5plus_cart_device::device_add_mconfig(machine_config &config)
+{
+ NEOBOOT_PROT(config, m_prot);
+ NG_CMC_PROT(config, m_cmc_prot);
+ NG_PCM2_PROT(config, m_pcm2_prot);
+}
/*************************************************
diff --git a/src/devices/bus/neogeo/boot_svc.cpp b/src/devices/bus/neogeo/boot_svc.cpp
index dac4a8aedad..aac306be5ce 100644
--- a/src/devices/bus/neogeo/boot_svc.cpp
+++ b/src/devices/bus/neogeo/boot_svc.cpp
@@ -30,10 +30,11 @@ void neogeo_svcboot_cart_device::decrypt_all(DECRYPT_ALL_PARAMS)
m_prot->svcboot_cx_decrypt(spr_region, spr_region_size);
}
-MACHINE_CONFIG_START(neogeo_svcboot_cart_device::device_add_mconfig)
- MCFG_NEOBOOT_PROT_ADD("bootleg_prot")
- MCFG_PVC_PROT_ADD("pvc_prot")
-MACHINE_CONFIG_END
+void neogeo_svcboot_cart_device::device_add_mconfig(machine_config &config)
+{
+ NEOBOOT_PROT(config, m_prot);
+ NG_PVC_PROT(config, m_pvc_prot);
+}
/*************************************************
@@ -96,7 +97,8 @@ void neogeo_svcsplus_cart_device::decrypt_all(DECRYPT_ALL_PARAMS)
}
-MACHINE_CONFIG_START(neogeo_svcsplus_cart_device::device_add_mconfig)
- MCFG_NEOBOOT_PROT_ADD("bootleg_prot")
- MCFG_PVC_PROT_ADD("pvc_prot")
-MACHINE_CONFIG_END
+void neogeo_svcsplus_cart_device::device_add_mconfig(machine_config &config)
+{
+ NEOBOOT_PROT(config, m_prot);
+ NG_PVC_PROT(config, m_pvc_prot);
+}
diff --git a/src/devices/bus/neogeo/cmc.cpp b/src/devices/bus/neogeo/cmc.cpp
index 841244c478e..d1fb1b699f8 100644
--- a/src/devices/bus/neogeo/cmc.cpp
+++ b/src/devices/bus/neogeo/cmc.cpp
@@ -44,9 +44,10 @@ void neogeo_cmc_cart_device::device_reset()
}
-MACHINE_CONFIG_START(neogeo_cmc_cart_device::device_add_mconfig)
- MCFG_CMC_PROT_ADD("cmc_prot")
-MACHINE_CONFIG_END
+void neogeo_cmc_cart_device::device_add_mconfig(machine_config &config)
+{
+ NG_CMC_PROT(config, m_prot);
+}
/*************************************************
@@ -251,19 +252,23 @@ void neogeo_cmc_kof2000n_cart_device::decrypt_all(DECRYPT_ALL_PARAMS)
DEFINE_DEVICE_TYPE(NEOGEO_CMC_JOCKEYGP_CART, neogeo_cmc_jockeygp_cart_device, "neocart_jockeygp", "Neo Geo Jockey GP CMC50 Cart")
neogeo_cmc_jockeygp_cart_device::neogeo_cmc_jockeygp_cart_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- neogeo_cmc_cart_device(mconfig, NEOGEO_CMC_JOCKEYGP_CART, tag, owner, clock)
+ neogeo_cmc_cart_device(mconfig, NEOGEO_CMC_JOCKEYGP_CART, tag, owner, clock),
+ m_nvram(*this, "nvram")
{
}
void neogeo_cmc_jockeygp_cart_device::device_start()
{
- save_item(NAME(m_ram));
+ m_ram = make_unique_clear<uint16_t[]>(0x2000/2);
+ m_nvram->set_base(m_ram.get(), 0x2000);
+ save_pointer(NAME(m_ram), 0x2000/2);
}
-void neogeo_cmc_jockeygp_cart_device::device_reset()
+void neogeo_cmc_jockeygp_cart_device::device_add_mconfig(machine_config &config)
{
- memset(m_ram, 0, 0x2000);
+ neogeo_cmc_cart_device::device_add_mconfig(config);
+ NVRAM(config, m_nvram);
}
void neogeo_cmc_jockeygp_cart_device::decrypt_all(DECRYPT_ALL_PARAMS)
diff --git a/src/devices/bus/neogeo/cmc.h b/src/devices/bus/neogeo/cmc.h
index 88b1c27cd9f..bba8251d2e5 100644
--- a/src/devices/bus/neogeo/cmc.h
+++ b/src/devices/bus/neogeo/cmc.h
@@ -8,6 +8,7 @@
#include "slot.h"
#include "rom.h"
#include "prot_cmc.h"
+#include "machine/nvram.h"
// ======================> neogeo_cmc_cart_device
@@ -218,10 +219,13 @@ public:
protected:
virtual void device_start() override;
- virtual void device_reset() override;
+
+ virtual void device_add_mconfig(machine_config &config) override;
private:
- uint16_t m_ram[0x1000];
+ std::unique_ptr<uint16_t[]> m_ram;
+
+ required_device<nvram_device> m_nvram;
};
DECLARE_DEVICE_TYPE(NEOGEO_CMC_JOCKEYGP_CART, neogeo_cmc_jockeygp_cart_device)
diff --git a/src/devices/bus/neogeo/fatfury2.cpp b/src/devices/bus/neogeo/fatfury2.cpp
index b3c9dea575e..66fcfdc98a1 100644
--- a/src/devices/bus/neogeo/fatfury2.cpp
+++ b/src/devices/bus/neogeo/fatfury2.cpp
@@ -43,6 +43,7 @@ void neogeo_fatfury2_cart_device::device_reset()
mapper specific handlers
-------------------------------------------------*/
-MACHINE_CONFIG_START(neogeo_fatfury2_cart_device::device_add_mconfig)
- MCFG_FATFURY2_PROT_ADD("fatfury2_prot")
-MACHINE_CONFIG_END
+void neogeo_fatfury2_cart_device::device_add_mconfig(machine_config &config)
+{
+ NG_FATFURY2_PROT(config, m_prot);
+}
diff --git a/src/devices/bus/neogeo/kof2k2.cpp b/src/devices/bus/neogeo/kof2k2.cpp
index e313c93034a..8ff5f040d3a 100644
--- a/src/devices/bus/neogeo/kof2k2.cpp
+++ b/src/devices/bus/neogeo/kof2k2.cpp
@@ -3,7 +3,7 @@
/***********************************************************************************************************
Neo Geo cart emulation
- The King of Fighers 2002 cart type (CMC + PCM2 + Additional CPU encryption)
+ The King of Fighters 2002 cart type (CMC + PCM2 + Additional CPU encryption)
***********************************************************************************************************/
@@ -50,11 +50,12 @@ void neogeo_kof2k2type_cart_device::device_reset()
mapper specific handlers
-------------------------------------------------*/
-MACHINE_CONFIG_START(neogeo_kof2k2type_cart_device::device_add_mconfig)
- MCFG_CMC_PROT_ADD("cmc_prot")
- MCFG_PCM2_PROT_ADD("pcm2_prot")
- MCFG_KOF2002_PROT_ADD("kof2002_prot")
-MACHINE_CONFIG_END
+void neogeo_kof2k2type_cart_device::device_add_mconfig(machine_config &config)
+{
+ NG_CMC_PROT(config, m_cmc_prot);
+ NG_PCM2_PROT(config, m_pcm2_prot);
+ NG_KOF2002_PROT(config, m_kof2k2_prot);
+}
/*************************************************
diff --git a/src/devices/bus/neogeo/kof98.cpp b/src/devices/bus/neogeo/kof98.cpp
index bc53a930bac..52f6b5fe523 100644
--- a/src/devices/bus/neogeo/kof98.cpp
+++ b/src/devices/bus/neogeo/kof98.cpp
@@ -43,9 +43,10 @@ void neogeo_kof98_cart_device::device_reset()
mapper specific handlers
-------------------------------------------------*/
-MACHINE_CONFIG_START(neogeo_kof98_cart_device::device_add_mconfig)
- MCFG_KOF98_PROT_ADD("kof98_prot")
-MACHINE_CONFIG_END
+void neogeo_kof98_cart_device::device_add_mconfig(machine_config &config)
+{
+ NG_KOF98_PROT(config, m_prot);
+}
void neogeo_kof98_cart_device::decrypt_all(DECRYPT_ALL_PARAMS)
{
diff --git a/src/devices/bus/neogeo/mslugx.cpp b/src/devices/bus/neogeo/mslugx.cpp
index 521f5636a1b..2917841cac3 100644
--- a/src/devices/bus/neogeo/mslugx.cpp
+++ b/src/devices/bus/neogeo/mslugx.cpp
@@ -43,6 +43,7 @@ void neogeo_mslugx_cart_device::device_reset()
mapper specific handlers
-------------------------------------------------*/
-MACHINE_CONFIG_START(neogeo_mslugx_cart_device::device_add_mconfig)
- MCFG_MSLUGX_PROT_ADD("mslugx_prot")
-MACHINE_CONFIG_END
+void neogeo_mslugx_cart_device::device_add_mconfig(machine_config &config)
+{
+ NG_MSLUGX_PROT(config, m_prot);
+}
diff --git a/src/devices/bus/neogeo/pcm2.cpp b/src/devices/bus/neogeo/pcm2.cpp
index e098d796229..521c796d59a 100644
--- a/src/devices/bus/neogeo/pcm2.cpp
+++ b/src/devices/bus/neogeo/pcm2.cpp
@@ -49,10 +49,11 @@ void neogeo_pcm2_cart_device::device_reset()
mapper specific handlers
-------------------------------------------------*/
-MACHINE_CONFIG_START(neogeo_pcm2_cart_device::device_add_mconfig)
- MCFG_CMC_PROT_ADD("cmc_prot")
- MCFG_PCM2_PROT_ADD("pcm2_prot")
-MACHINE_CONFIG_END
+void neogeo_pcm2_cart_device::device_add_mconfig(machine_config &config)
+{
+ NG_CMC_PROT(config, m_cmc_prot);
+ NG_PCM2_PROT(config, m_pcm2_prot);
+}
/*************************************************
diff --git a/src/devices/bus/neogeo/prot_cmc.h b/src/devices/bus/neogeo/prot_cmc.h
index 46a6a6c6766..2853c71aa8f 100644
--- a/src/devices/bus/neogeo/prot_cmc.h
+++ b/src/devices/bus/neogeo/prot_cmc.h
@@ -9,9 +9,6 @@
DECLARE_DEVICE_TYPE(NG_CMC_PROT, cmc_prot_device)
-#define MCFG_CMC_PROT_ADD(_tag) \
- MCFG_DEVICE_ADD(_tag, NG_CMC_PROT, 0)
-
// cmc42
#define KOF99_GFX_KEY (0x00)
#define GAROU_GFX_KEY (0x06)
@@ -44,7 +41,7 @@ class cmc_prot_device : public device_t
{
public:
// construction/destruction
- cmc_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ cmc_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
void decrypt(uint8_t *r0, uint8_t *r1,
uint8_t c0, uint8_t c1,
diff --git a/src/devices/bus/neogeo/prot_cthd.h b/src/devices/bus/neogeo/prot_cthd.h
index 455674a56c8..95ae38289b3 100644
--- a/src/devices/bus/neogeo/prot_cthd.h
+++ b/src/devices/bus/neogeo/prot_cthd.h
@@ -8,15 +8,11 @@
DECLARE_DEVICE_TYPE(NG_CTHD_PROT, cthd_prot_device)
-#define MCFG_CTHD_PROT_ADD(_tag) \
- MCFG_DEVICE_ADD(_tag, NG_CTHD_PROT, 0)
-
-
class cthd_prot_device : public device_t
{
public:
// construction/destruction
- cthd_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ cthd_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
void fix_do(uint8_t* sprrom, uint32_t sprrom_size, int start, int end, int bit3shift, int bit2shift, int bit1shift, int bit0shift);
void gfx_address_fix(uint8_t* sprrom, uint32_t sprrom_size, int start, int end);
diff --git a/src/devices/bus/neogeo/prot_fatfury2.h b/src/devices/bus/neogeo/prot_fatfury2.h
index 8c75e7f5d46..bb33d1c10c1 100644
--- a/src/devices/bus/neogeo/prot_fatfury2.h
+++ b/src/devices/bus/neogeo/prot_fatfury2.h
@@ -8,15 +8,12 @@
DECLARE_DEVICE_TYPE(NG_FATFURY2_PROT, fatfury2_prot_device)
-#define MCFG_FATFURY2_PROT_ADD(_tag) \
- MCFG_DEVICE_ADD(_tag, NG_FATFURY2_PROT, 0)
-
class fatfury2_prot_device : public device_t
{
public:
// construction/destruction
- fatfury2_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ fatfury2_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
DECLARE_READ16_MEMBER( protection_r );
DECLARE_WRITE16_MEMBER( protection_w );
diff --git a/src/devices/bus/neogeo/prot_kof2k2.h b/src/devices/bus/neogeo/prot_kof2k2.h
index 4eb764f006d..324da5a8918 100644
--- a/src/devices/bus/neogeo/prot_kof2k2.h
+++ b/src/devices/bus/neogeo/prot_kof2k2.h
@@ -9,15 +9,12 @@
DECLARE_DEVICE_TYPE(NG_KOF2002_PROT, kof2002_prot_device)
-#define MCFG_KOF2002_PROT_ADD(_tag) \
- MCFG_DEVICE_ADD(_tag, NG_KOF2002_PROT, 0)
-
class kof2002_prot_device : public device_t
{
public:
// construction/destruction
- kof2002_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ kof2002_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
void kof2002_decrypt_68k(uint8_t* cpurom, uint32_t cpurom_size);
void matrim_decrypt_68k(uint8_t* cpurom, uint32_t cpurom_size);
diff --git a/src/devices/bus/neogeo/prot_kof2k3bl.h b/src/devices/bus/neogeo/prot_kof2k3bl.h
index 8520bd90716..52d87e87bfe 100644
--- a/src/devices/bus/neogeo/prot_kof2k3bl.h
+++ b/src/devices/bus/neogeo/prot_kof2k3bl.h
@@ -8,15 +8,12 @@
DECLARE_DEVICE_TYPE(NG_KOF2K3BL_PROT, kof2k3bl_prot_device)
-#define MCFG_KOF2K3BL_PROT_ADD(_tag) \
- MCFG_DEVICE_ADD(_tag, NG_KOF2K3BL_PROT, 0)
-
class kof2k3bl_prot_device : public device_t
{
public:
// construction/destruction
- kof2k3bl_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ kof2k3bl_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
DECLARE_READ16_MEMBER(protection_r);
DECLARE_WRITE16_MEMBER(kof2003_w);
diff --git a/src/devices/bus/neogeo/prot_kof98.h b/src/devices/bus/neogeo/prot_kof98.h
index ff0783e29ad..652e098898a 100644
--- a/src/devices/bus/neogeo/prot_kof98.h
+++ b/src/devices/bus/neogeo/prot_kof98.h
@@ -9,15 +9,12 @@
DECLARE_DEVICE_TYPE(NG_KOF98_PROT, kof98_prot_device)
-#define MCFG_KOF98_PROT_ADD(_tag) \
- MCFG_DEVICE_ADD(_tag, NG_KOF98_PROT, 0)
-
class kof98_prot_device : public device_t
{
public:
// construction/destruction
- kof98_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ kof98_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
void decrypt_68k(uint8_t* cpurom, uint32_t cpurom_size);
DECLARE_WRITE16_MEMBER(protection_w);
diff --git a/src/devices/bus/neogeo/prot_misc.h b/src/devices/bus/neogeo/prot_misc.h
index f2b0c1f06d6..e1525fc44f6 100644
--- a/src/devices/bus/neogeo/prot_misc.h
+++ b/src/devices/bus/neogeo/prot_misc.h
@@ -8,15 +8,12 @@
DECLARE_DEVICE_TYPE(NEOBOOT_PROT, neoboot_prot_device)
-#define MCFG_NEOBOOT_PROT_ADD(_tag) \
- MCFG_DEVICE_ADD(_tag, NEOBOOT_PROT, 0)
-
class neoboot_prot_device : public device_t
{
public:
// construction/destruction
- neoboot_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ neoboot_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
void cx_decrypt(uint8_t* sprrom, uint32_t sprrom_size);
void sx_decrypt(uint8_t* fixed, uint32_t fixed_size, int value);
diff --git a/src/devices/bus/neogeo/prot_mslugx.h b/src/devices/bus/neogeo/prot_mslugx.h
index 91ab71e463d..106bce3ad84 100644
--- a/src/devices/bus/neogeo/prot_mslugx.h
+++ b/src/devices/bus/neogeo/prot_mslugx.h
@@ -9,15 +9,12 @@
DECLARE_DEVICE_TYPE(NG_MSLUGX_PROT, mslugx_prot_device)
-#define MCFG_MSLUGX_PROT_ADD(_tag) \
- MCFG_DEVICE_ADD(_tag, NG_MSLUGX_PROT, 0)
-
class mslugx_prot_device : public device_t
{
public:
// construction/destruction
- mslugx_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ mslugx_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
DECLARE_WRITE16_MEMBER( protection_w );
DECLARE_READ16_MEMBER( protection_r );
diff --git a/src/devices/bus/neogeo/prot_pcm2.h b/src/devices/bus/neogeo/prot_pcm2.h
index 666b38b4bee..707e9ab94b4 100644
--- a/src/devices/bus/neogeo/prot_pcm2.h
+++ b/src/devices/bus/neogeo/prot_pcm2.h
@@ -9,15 +9,12 @@
DECLARE_DEVICE_TYPE(NG_PCM2_PROT, pcm2_prot_device)
-#define MCFG_PCM2_PROT_ADD(_tag) \
- MCFG_DEVICE_ADD(_tag, NG_PCM2_PROT, 0)
-
class pcm2_prot_device : public device_t
{
public:
// construction/destruction
- pcm2_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ pcm2_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
void decrypt(uint8_t* ymrom, uint32_t ymsize, int value);
void swap(uint8_t* ymrom, uint32_t ymsize, int value);
diff --git a/src/devices/bus/neogeo/prot_pvc.h b/src/devices/bus/neogeo/prot_pvc.h
index 4f7d73f4020..d2855808331 100644
--- a/src/devices/bus/neogeo/prot_pvc.h
+++ b/src/devices/bus/neogeo/prot_pvc.h
@@ -8,15 +8,12 @@
DECLARE_DEVICE_TYPE(NG_PVC_PROT, pvc_prot_device)
-#define MCFG_PVC_PROT_ADD(_tag) \
- MCFG_DEVICE_ADD(_tag, NG_PVC_PROT, 0)
-
class pvc_prot_device : public device_t
{
public:
// construction/destruction
- pvc_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ pvc_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
void pvc_write_unpack_color();
void pvc_write_pack_color();
diff --git a/src/devices/bus/neogeo/prot_sma.h b/src/devices/bus/neogeo/prot_sma.h
index f0ee9733bd0..c36af941132 100644
--- a/src/devices/bus/neogeo/prot_sma.h
+++ b/src/devices/bus/neogeo/prot_sma.h
@@ -9,15 +9,12 @@
DECLARE_DEVICE_TYPE(NG_SMA_PROT, sma_prot_device)
-#define MCFG_SMA_PROT_ADD(_tag) \
- MCFG_DEVICE_ADD(_tag, NG_SMA_PROT, 0)
-
class sma_prot_device : public device_t
{
public:
// construction/destruction
- sma_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ sma_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
//DECLARE_WRITE16_MEMBER( kof99_bankswitch_w );
//DECLARE_WRITE16_MEMBER( garou_bankswitch_w );
diff --git a/src/devices/bus/neogeo/pvc.cpp b/src/devices/bus/neogeo/pvc.cpp
index bb9d0098159..26987ab33dc 100644
--- a/src/devices/bus/neogeo/pvc.cpp
+++ b/src/devices/bus/neogeo/pvc.cpp
@@ -50,11 +50,12 @@ void neogeo_pvc_cart_device::device_reset()
mapper specific handlers
-------------------------------------------------*/
-MACHINE_CONFIG_START(neogeo_pvc_cart_device::device_add_mconfig)
- MCFG_CMC_PROT_ADD("cmc_prot")
- MCFG_PCM2_PROT_ADD("pcm2_prot")
- MCFG_PVC_PROT_ADD("pvc_prot")
-MACHINE_CONFIG_END
+void neogeo_pvc_cart_device::device_add_mconfig(machine_config &config)
+{
+ NG_CMC_PROT(config, m_cmc_prot);
+ NG_PCM2_PROT(config, m_pcm2_prot);
+ NG_PVC_PROT(config, m_pvc_prot);
+}
/*************************************************
diff --git a/src/devices/bus/neogeo/rom.cpp b/src/devices/bus/neogeo/rom.cpp
index 10c61858386..0f54a808cef 100644
--- a/src/devices/bus/neogeo/rom.cpp
+++ b/src/devices/bus/neogeo/rom.cpp
@@ -73,17 +73,19 @@ WRITE16_MEMBER(neogeo_rom_device::banksel_w)
DEFINE_DEVICE_TYPE(NEOGEO_VLINER_CART, neogeo_vliner_cart_device, "neocart_vliner", "Neo Geo V-Liner Cart")
neogeo_vliner_cart_device::neogeo_vliner_cart_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- neogeo_rom_device(mconfig, NEOGEO_VLINER_CART, tag, owner, clock)
+ neogeo_rom_device(mconfig, NEOGEO_VLINER_CART, tag, owner, clock),
+ m_nvram(*this, "nvram")
{
}
-
void neogeo_vliner_cart_device::device_start()
{
- save_item(NAME(m_cart_ram));
+ m_cart_ram = make_unique_clear<uint16_t[]>(0x2000/2);
+ m_nvram->set_base(m_cart_ram.get(), 0x2000);
+ save_pointer(NAME(m_cart_ram), 0x2000/2);
}
-void neogeo_vliner_cart_device::device_reset()
+void neogeo_vliner_cart_device::device_add_mconfig(machine_config &config)
{
- memset(m_cart_ram, 0, 0x2000);
+ NVRAM(config, m_nvram);
}
diff --git a/src/devices/bus/neogeo/rom.h b/src/devices/bus/neogeo/rom.h
index 17efc4da4a7..1f62a890859 100644
--- a/src/devices/bus/neogeo/rom.h
+++ b/src/devices/bus/neogeo/rom.h
@@ -6,6 +6,7 @@
#pragma once
#include "slot.h"
+#include "machine/nvram.h"
// ======================> neogeo_rom_device
@@ -50,10 +51,13 @@ public:
protected:
virtual void device_start() override;
- virtual void device_reset() override;
+
+ virtual void device_add_mconfig(machine_config &config) override;
private:
- uint16_t m_cart_ram[0x1000];
+ std::unique_ptr<uint16_t[]> m_cart_ram;
+
+ required_device<nvram_device> m_nvram;
};
DECLARE_DEVICE_TYPE(NEOGEO_VLINER_CART, neogeo_vliner_cart_device)
diff --git a/src/devices/bus/neogeo/slot.h b/src/devices/bus/neogeo/slot.h
index edeb2452a1d..b5be4c5e901 100644
--- a/src/devices/bus/neogeo/slot.h
+++ b/src/devices/bus/neogeo/slot.h
@@ -190,6 +190,15 @@ class neogeo_cart_slot_device : public device_t,
{
public:
// construction/destruction
+ template <typename T>
+ neogeo_cart_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : neogeo_cart_slot_device(mconfig, tag, owner, (uint16_t)0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
neogeo_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint16_t clock);
virtual ~neogeo_cart_slot_device();
@@ -338,15 +347,4 @@ private:
// device type definition
DECLARE_DEVICE_TYPE(NEOGEO_CART_SLOT, neogeo_cart_slot_device)
-
-/***************************************************************************
- DEVICE CONFIGURATION MACROS
- ***************************************************************************/
-
-
-#define MCFG_NEOGEO_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_tag, NEOGEO_CART_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-
#endif // MAME_BUS_NEOGEO_SLOT_H
diff --git a/src/devices/bus/neogeo/sma.cpp b/src/devices/bus/neogeo/sma.cpp
index 70b03aa0a28..ee031e4f44f 100644
--- a/src/devices/bus/neogeo/sma.cpp
+++ b/src/devices/bus/neogeo/sma.cpp
@@ -55,10 +55,11 @@ void neogeo_sma_cart_device::device_reset()
mapper specific handlers
-------------------------------------------------*/
-MACHINE_CONFIG_START(neogeo_sma_cart_device::device_add_mconfig)
- MCFG_SMA_PROT_ADD("sma_prot")
- MCFG_CMC_PROT_ADD("cmc_prot")
-MACHINE_CONFIG_END
+void neogeo_sma_cart_device::device_add_mconfig(machine_config &config)
+{
+ NG_SMA_PROT(config, m_sma_prot);
+ NG_CMC_PROT(config, m_cmc_prot);
+}
/*************************************************
diff --git a/src/devices/bus/neogeo_ctrl/ctrl.h b/src/devices/bus/neogeo_ctrl/ctrl.h
index aee534d61ad..bfe568d9b7e 100644
--- a/src/devices/bus/neogeo_ctrl/ctrl.h
+++ b/src/devices/bus/neogeo_ctrl/ctrl.h
@@ -42,6 +42,15 @@ class neogeo_control_port_device : public device_t, public device_slot_interface
{
public:
// construction/destruction
+ template <typename T>
+ neogeo_control_port_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt, bool const fixed)
+ : neogeo_control_port_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(fixed);
+ }
neogeo_control_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~neogeo_control_port_device();
@@ -83,6 +92,15 @@ class neogeo_ctrl_edge_port_device : public device_t, public device_slot_interfa
{
public:
// construction/destruction
+ template <typename T>
+ neogeo_ctrl_edge_port_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt, bool const fixed)
+ : neogeo_ctrl_edge_port_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(fixed);
+ }
neogeo_ctrl_edge_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~neogeo_ctrl_edge_port_device();
@@ -104,20 +122,6 @@ DECLARE_DEVICE_TYPE(NEOGEO_CONTROL_PORT, neogeo_control_port_device)
DECLARE_DEVICE_TYPE(NEOGEO_CTRL_EDGE_CONNECTOR, neogeo_ctrl_edge_port_device)
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_NEOGEO_CONTROL_PORT_ADD(_tag, _slot_intf, _def_slot, _fixed) \
- MCFG_DEVICE_ADD(_tag, NEOGEO_CONTROL_PORT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _fixed)
-
-#define MCFG_NEOGEO_CONTROL_EDGE_CONNECTOR_ADD(_tag, _slot_intf, _def_slot, _fixed) \
- MCFG_DEVICE_ADD(_tag, NEOGEO_CTRL_EDGE_CONNECTOR, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _fixed)
-
-
-
void neogeo_controls(device_slot_interface &device);
void neogeo_arc_edge(device_slot_interface &device);
void neogeo_arc_edge_fixed(device_slot_interface &device);
diff --git a/src/devices/bus/nes/2a03pur.cpp b/src/devices/bus/nes/2a03pur.cpp
index ddb3820770d..87e364b1638 100644
--- a/src/devices/bus/nes/2a03pur.cpp
+++ b/src/devices/bus/nes/2a03pur.cpp
@@ -91,7 +91,7 @@ void nes_2a03pur_device::pcb_reset()
This has been assigned to iNES mapper 31.
-------------------------------------------------*/
-WRITE8_MEMBER(nes_2a03pur_device::write_l)
+void nes_2a03pur_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("2a03 puritans write_l, offset: %04x, data: %02x\n", offset, data));
offset += 0x100;
@@ -99,7 +99,7 @@ WRITE8_MEMBER(nes_2a03pur_device::write_l)
m_reg[offset & 7] = data & ((m_prg_chunks << 2) - 1);
}
-READ8_MEMBER(nes_2a03pur_device::read_h)
+uint8_t nes_2a03pur_device::read_h(offs_t offset)
{
LOG_MMC(("2a03 puritans read_h, offset: %04x\n", offset));
diff --git a/src/devices/bus/nes/2a03pur.h b/src/devices/bus/nes/2a03pur.h
index 2ec647ccc4a..970898ff128 100644
--- a/src/devices/bus/nes/2a03pur.h
+++ b/src/devices/bus/nes/2a03pur.h
@@ -16,8 +16,8 @@ public:
// construction/destruction
nes_2a03pur_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/act53.cpp b/src/devices/bus/nes/act53.cpp
index f163be268fd..2a441c36153 100644
--- a/src/devices/bus/nes/act53.cpp
+++ b/src/devices/bus/nes/act53.cpp
@@ -158,7 +158,7 @@ void nes_action53_device::update_mirr()
}
}
-WRITE8_MEMBER(nes_action53_device::write_l)
+void nes_action53_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("action 53 write_l, offset: %04x, data: %02x\n", offset, data));
offset += 0x100;
@@ -167,7 +167,7 @@ WRITE8_MEMBER(nes_action53_device::write_l)
}
-WRITE8_MEMBER(nes_action53_device::write_h)
+void nes_action53_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("action 53 write_h, offset: %04x, data: %02x\n", offset, data));
diff --git a/src/devices/bus/nes/act53.h b/src/devices/bus/nes/act53.h
index 1f299a5a5da..8e4b1c3b073 100644
--- a/src/devices/bus/nes/act53.h
+++ b/src/devices/bus/nes/act53.h
@@ -14,8 +14,8 @@ public:
// construction/destruction
nes_action53_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/aladdin.cpp b/src/devices/bus/nes/aladdin.cpp
index e9d81555a72..db57b61ff00 100644
--- a/src/devices/bus/nes/aladdin.cpp
+++ b/src/devices/bus/nes/aladdin.cpp
@@ -52,7 +52,7 @@ aladdin_cart_interface::~aladdin_cart_interface()
{
}
-READ8_MEMBER(aladdin_cart_interface::read)
+uint8_t aladdin_cart_interface::read(offs_t offset)
{
if (offset < 0x4000)
return m_rom[(m_lobank * 0x4000) + (offset & 0x3fff)];
@@ -84,10 +84,10 @@ void nes_aladdin_slot_device::device_start()
m_cart = dynamic_cast<aladdin_cart_interface *>(get_card_device());
}
-READ8_MEMBER(nes_aladdin_slot_device::read)
+uint8_t nes_aladdin_slot_device::read(offs_t offset)
{
if (m_cart)
- return m_cart->read(space, offset, mem_mask);
+ return m_cart->read(offset);
return 0xff;
}
@@ -296,19 +296,19 @@ void nes_aladdin_device::pcb_reset()
-------------------------------------------------*/
-READ8_MEMBER(nes_aladdin_device::read_h)
+uint8_t nes_aladdin_device::read_h(offs_t offset)
{
LOG_MMC(("aladdin read_h, offset: %04x\n", offset));
// this shall be the proper code, but it's a bit slower, so we access directly the subcart below
- //return m_subslot->read(space, offset, mem_mask);
+ //return m_subslot->read(offset);
if (m_subslot->m_cart)
- return m_subslot->m_cart->read(space, offset, mem_mask);
+ return m_subslot->m_cart->read(offset);
else // this is "fake" in the sense that we fill CPU space with 0xff if no Aladdin cart is loaded
return hi_access_rom(offset);
}
-WRITE8_MEMBER(nes_aladdin_device::write_h)
+void nes_aladdin_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("aladdin write_h, offset: %04x, data: %02x\n", offset, data));
m_subslot->write_prg(offset, data);
@@ -325,6 +325,7 @@ static void ade_cart(device_slot_interface &device)
}
-MACHINE_CONFIG_START(nes_aladdin_device::device_add_mconfig)
- MCFG_ALADDIN_MINICART_ADD("ade_slot", ade_cart)
-MACHINE_CONFIG_END
+void nes_aladdin_device::device_add_mconfig(machine_config &config)
+{
+ NES_ALADDIN_SLOT(config, m_subslot, ade_cart);
+}
diff --git a/src/devices/bus/nes/aladdin.h b/src/devices/bus/nes/aladdin.h
index de6725bb9f1..9014bf6969a 100644
--- a/src/devices/bus/nes/aladdin.h
+++ b/src/devices/bus/nes/aladdin.h
@@ -24,7 +24,7 @@ public:
virtual ~aladdin_cart_interface();
// reading and writing
- virtual DECLARE_READ8_MEMBER(read);
+ virtual uint8_t read(offs_t offset);
uint8_t *get_cart_base() { return m_rom; }
void set_cart_size(uint32_t size) { m_rom_size = size; m_rom_mask = (size / 0x4000) - 1; }
@@ -50,6 +50,16 @@ class nes_aladdin_slot_device : public device_t,
friend class nes_aladdin_device;
public:
// construction/destruction
+ template <typename T>
+ nes_aladdin_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts)
+ : nes_aladdin_slot_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(nullptr);
+ set_fixed(false);
+ }
+
nes_aladdin_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~nes_aladdin_slot_device();
@@ -72,7 +82,7 @@ public:
// slot interface overrides
virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
- virtual DECLARE_READ8_MEMBER(read);
+ uint8_t read(offs_t offset);
void write_prg(uint32_t offset, uint8_t data) { if (m_cart) m_cart->write_prg(offset, data); }
protected:
@@ -83,11 +93,6 @@ protected:
DECLARE_DEVICE_TYPE(NES_ALADDIN_SLOT, nes_aladdin_slot_device)
-#define MCFG_ALADDIN_MINICART_ADD(_tag, _slot_intf) \
- MCFG_DEVICE_ADD(_tag, NES_ALADDIN_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, nullptr, false)
-
-
//----------------------------------
//
// Aladdin Minicart implementation
@@ -155,8 +160,8 @@ public:
// construction/destruction
nes_aladdin_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/ave.cpp b/src/devices/bus/nes/ave.cpp
index 823d66e2e57..2e93ea17501 100644
--- a/src/devices/bus/nes/ave.cpp
+++ b/src/devices/bus/nes/ave.cpp
@@ -122,7 +122,7 @@ void nes_maxi15_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_nina001_device::write_m)
+void nes_nina001_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("nina-001 write_m, offset: %04x, data: %02x\n", offset, data));
@@ -155,7 +155,7 @@ WRITE8_MEMBER(nes_nina001_device::write_m)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_nina006_device::write_l)
+void nes_nina006_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("nina-006 write_l, offset: %04x, data: %02x\n", offset, data));
@@ -192,7 +192,7 @@ void nes_maxi15_device::update_banks()
}
}
-READ8_MEMBER(nes_maxi15_device::read_h)
+uint8_t nes_maxi15_device::read_h(offs_t offset)
{
LOG_MMC(("Maxi 15 read_h, offset: %04x\n", offset));
diff --git a/src/devices/bus/nes/ave.h b/src/devices/bus/nes/ave.h
index 5fdd233b3c3..b40d2ed6d9d 100644
--- a/src/devices/bus/nes/ave.h
+++ b/src/devices/bus/nes/ave.h
@@ -16,7 +16,7 @@ public:
// construction/destruction
nes_nina001_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -34,7 +34,7 @@ public:
// construction/destruction
nes_nina006_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -52,7 +52,7 @@ public:
// construction/destruction
nes_maxi15_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_h) override;
+ virtual uint8_t read_h(offs_t offset) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/bandai.cpp b/src/devices/bus/nes/bandai.cpp
index ff87be980d5..1dd82f1747d 100644
--- a/src/devices/bus/nes/bandai.cpp
+++ b/src/devices/bus/nes/bandai.cpp
@@ -205,7 +205,7 @@ void nes_fjump2_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_oekakids_device::nt_w)
+void nes_oekakids_device::nt_w(offs_t offset, uint8_t data)
{
int page = ((offset & 0xc00) >> 10);
@@ -220,7 +220,7 @@ WRITE8_MEMBER(nes_oekakids_device::nt_w)
m_nt_access[page][offset & 0x3ff] = data;
}
-READ8_MEMBER(nes_oekakids_device::nt_r)
+uint8_t nes_oekakids_device::nt_r(offs_t offset)
{
int page = ((offset & 0xc00) >> 10);
@@ -253,7 +253,7 @@ void nes_oekakids_device::ppu_latch(offs_t offset)
#endif
}
-WRITE8_MEMBER(nes_oekakids_device::write_h)
+void nes_oekakids_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("oeka kids write_h, offset: %04x, data: %02x\n", offset, data));
@@ -308,7 +308,7 @@ void nes_fcg_device::device_timer(emu_timer &timer, device_timer_id id, int para
}
}
-WRITE8_MEMBER(nes_fcg_device::fcg_write)
+void nes_fcg_device::fcg_write(offs_t offset, uint8_t data)
{
LOG_MMC(("lz93d50_write, offset: %04x, data: %02x\n", offset, data));
@@ -346,12 +346,12 @@ WRITE8_MEMBER(nes_fcg_device::fcg_write)
}
}
-WRITE8_MEMBER(nes_fcg_device::write_m)
+void nes_fcg_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("lz93d50 write_m, offset: %04x, data: %02x\n", offset, data));
if (m_battery.empty() && m_prgram.empty())
- fcg_write(space, offset & 0x0f, data, mem_mask);
+ fcg_write(offset & 0x0f, data);
else if (!m_battery.empty())
m_battery[offset] = data;
else
@@ -361,7 +361,7 @@ WRITE8_MEMBER(nes_fcg_device::write_m)
// FCG board does not access regs in 0x8000-0xffff space!
// only later design lz93d50 (and its variants do)!
-WRITE8_MEMBER(nes_lz93d50_24c01_device::write_h)
+void nes_lz93d50_24c01_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("lz93d50_24c01 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -373,12 +373,12 @@ WRITE8_MEMBER(nes_lz93d50_24c01_device::write_h)
m_i2c_dir = BIT(data, 7);
break;
default:
- fcg_write(space, offset & 0x0f, data, mem_mask);
+ fcg_write(offset & 0x0f, data);
break;
}
}
-READ8_MEMBER(nes_lz93d50_24c01_device::read_m)
+uint8_t nes_lz93d50_24c01_device::read_m(offs_t offset)
{
LOG_MMC(("lz93d50 EEPROM read, offset: %04x\n", offset));
if (m_i2c_dir)
@@ -391,13 +391,15 @@ READ8_MEMBER(nes_lz93d50_24c01_device::read_m)
// SERIAL I2C DEVICE
//-------------------------------------------------
-MACHINE_CONFIG_START(nes_lz93d50_24c01_device::device_add_mconfig)
- MCFG_24C01_ADD("i2cmem")
-MACHINE_CONFIG_END
+void nes_lz93d50_24c01_device::device_add_mconfig(machine_config &config)
+{
+ I2C_24C01(config, m_i2cmem);
+}
-MACHINE_CONFIG_START(nes_lz93d50_24c02_device::device_add_mconfig)
- MCFG_24C02_ADD("i2cmem")
-MACHINE_CONFIG_END
+void nes_lz93d50_24c02_device::device_add_mconfig(machine_config &config)
+{
+ I2C_24C02(config, m_i2cmem);
+}
/*-------------------------------------------------
@@ -428,19 +430,19 @@ void nes_fjump2_device::set_prg()
prg16_cdef(prg_base | 0x0f);
}
-READ8_MEMBER(nes_fjump2_device::read_m)
+uint8_t nes_fjump2_device::read_m(offs_t offset)
{
LOG_MMC(("fjump2 read_m, offset: %04x\n", offset));
return m_battery[offset & (m_battery.size() - 1)];
}
-WRITE8_MEMBER(nes_fjump2_device::write_m)
+void nes_fjump2_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("fjump2 write_m, offset: %04x, data: %02x\n", offset, data));
m_battery[offset & (m_battery.size() - 1)] = data;
}
-WRITE8_MEMBER(nes_fjump2_device::write_h)
+void nes_fjump2_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("fjump2 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -458,7 +460,7 @@ WRITE8_MEMBER(nes_fjump2_device::write_h)
set_prg();
break;
default:
- fcg_write(space, offset & 0x0f, data, mem_mask);
+ fcg_write(offset & 0x0f, data);
break;
}
}
diff --git a/src/devices/bus/nes/bandai.h b/src/devices/bus/nes/bandai.h
index e44ff99de20..e7cb0a1d0cd 100644
--- a/src/devices/bus/nes/bandai.h
+++ b/src/devices/bus/nes/bandai.h
@@ -17,9 +17,9 @@ public:
// construction/destruction
nes_oekakids_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
- virtual DECLARE_READ8_MEMBER(nt_r) override;
- virtual DECLARE_WRITE8_MEMBER(nt_w) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
+ virtual uint8_t nt_r(offs_t offset) override;
+ virtual void nt_w(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -46,8 +46,8 @@ public:
nes_fcg_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
- virtual DECLARE_WRITE8_MEMBER(fcg_write);
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ void fcg_write(offs_t offset, uint8_t data);
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -75,7 +75,7 @@ public:
nes_lz93d50_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_WRITE8_MEMBER(write_h) override { fcg_write(space, offset, data, mem_mask); }
+ virtual void write_h(offs_t offset, uint8_t data) override { fcg_write(offset, data); }
protected:
nes_lz93d50_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@@ -90,8 +90,8 @@ public:
// construction/destruction
nes_lz93d50_24c01_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -131,9 +131,9 @@ public:
// construction/destruction
nes_fjump2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/benshieng.cpp b/src/devices/bus/nes/benshieng.cpp
index 921d7c5b56f..2b3c7818f58 100644
--- a/src/devices/bus/nes/benshieng.cpp
+++ b/src/devices/bus/nes/benshieng.cpp
@@ -86,7 +86,7 @@ void nes_benshieng_device::update_banks()
chr2_6(m_mmc_vrom_bank[3], CHRROM);
}
-WRITE8_MEMBER(nes_benshieng_device::write_h)
+void nes_benshieng_device::write_h(offs_t offset, uint8_t data)
{
uint8_t helper = (offset & 0xc00) >> 10;
LOG_MMC(("benshieng write_h, offset: %04x, data: %02x\n", offset, data));
diff --git a/src/devices/bus/nes/benshieng.h b/src/devices/bus/nes/benshieng.h
index c25aba92508..599de5a6e9c 100644
--- a/src/devices/bus/nes/benshieng.h
+++ b/src/devices/bus/nes/benshieng.h
@@ -16,7 +16,7 @@ public:
// construction/destruction
nes_benshieng_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/bootleg.cpp b/src/devices/bus/nes/bootleg.cpp
index 49cccaa6a3b..d585a8df9de 100644
--- a/src/devices/bus/nes/bootleg.cpp
+++ b/src/devices/bus/nes/bootleg.cpp
@@ -570,7 +570,7 @@ void nes_ax5705_device::set_prg()
prg8_ab(m_mmc_prg_bank[1]);
}
-WRITE8_MEMBER(nes_ax5705_device::write_h)
+void nes_ax5705_device::write_h(offs_t offset, uint8_t data)
{
uint8_t bank;
LOG_MMC(("ax5705 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -652,7 +652,7 @@ void nes_sc127_device::hblank_irq(int scanline, int vblank, int blanked)
}
}
-WRITE8_MEMBER(nes_sc127_device::write_h)
+void nes_sc127_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("sc127 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -715,7 +715,7 @@ void nes_mbaby_device::device_timer(emu_timer &timer, device_timer_id id, int pa
}
}
-WRITE8_MEMBER(nes_mbaby_device::write_h)
+void nes_mbaby_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("Mario Baby write_h, offset: %04x, data: %02x\n", offset, data));
@@ -746,7 +746,7 @@ WRITE8_MEMBER(nes_mbaby_device::write_h)
}
}
-READ8_MEMBER(nes_mbaby_device::read_m)
+uint8_t nes_mbaby_device::read_m(offs_t offset)
{
LOG_MMC(("Mario Baby read_m, offset: %04x\n", offset));
return m_prg[(m_latch * 0x2000) + (offset & 0x1fff)];
@@ -764,7 +764,7 @@ READ8_MEMBER(nes_mbaby_device::read_m)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_asn_device::write_h)
+void nes_asn_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("Ai Senshi Nicol write_h, offset: %04x, data: %02x\n", offset, data));
@@ -775,7 +775,7 @@ WRITE8_MEMBER(nes_asn_device::write_h)
m_latch = data;
}
-READ8_MEMBER(nes_asn_device::read_m)
+uint8_t nes_asn_device::read_m(offs_t offset)
{
LOG_MMC(("Ai Senshi Nicol read_m, offset: %04x\n", offset));
return m_prg[((m_latch * 0x2000) + (offset & 0x1fff)) & (m_prg_size - 1)];
@@ -811,7 +811,7 @@ void nes_smb3p_device::device_timer(emu_timer &timer, device_timer_id id, int pa
}
}
-WRITE8_MEMBER(nes_smb3p_device::write_h)
+void nes_smb3p_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("btl_smb3_w, offset: %04x, data: %02x\n", offset, data));
switch (offset & 0x0f)
@@ -879,7 +879,7 @@ void nes_btl_dn_device::hblank_irq(int scanline, int vblank, int blanked )
hold_irq_line();
}
-WRITE8_MEMBER(nes_btl_dn_device::write_h)
+void nes_btl_dn_device::write_h(offs_t offset, uint8_t data)
{
uint8_t bank;
LOG_MMC(("btl_dn write_h, offset: %04x, data: %02x\n", offset, data));
@@ -933,13 +933,13 @@ WRITE8_MEMBER(nes_btl_dn_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_whirl2706_device::write_h)
+void nes_whirl2706_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("whirl2706 write_h, offset: %04x, data: %02x\n", offset, data));
m_latch = data;
}
-READ8_MEMBER(nes_whirl2706_device::read_m)
+uint8_t nes_whirl2706_device::read_m(offs_t offset)
{
LOG_MMC(("whirl2706 read_m, offset: %04x\n", offset));
return m_prg[(m_latch * 0x2000 + (offset & 0x1fff)) & (m_prg_size - 1)];
@@ -975,7 +975,7 @@ void nes_smb2j_device::device_timer(emu_timer &timer, device_timer_id id, int pa
}
}
-WRITE8_MEMBER(nes_smb2j_device::write_l)
+void nes_smb2j_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("smb2j write_l, offset: %04x, data: %02x\n", offset, data));
offset += 0x100;
@@ -984,7 +984,7 @@ WRITE8_MEMBER(nes_smb2j_device::write_l)
m_irq_enable = data & 3; // maybe also m_irq_count = 0?!?
}
-WRITE8_MEMBER(nes_smb2j_device::write_h)
+void nes_smb2j_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("smb2j write_h, offset: %04x, data: %02x\n", offset, data));
@@ -992,7 +992,7 @@ WRITE8_MEMBER(nes_smb2j_device::write_h)
m_irq_enable = data & 3;
}
-WRITE8_MEMBER(nes_smb2j_device::write_ex)
+void nes_smb2j_device::write_ex(offs_t offset, uint8_t data)
{
LOG_MMC(("smb2j write_ex, offset: %04x, data: %02x\n", offset, data));
@@ -1010,7 +1010,7 @@ WRITE8_MEMBER(nes_smb2j_device::write_ex)
}
}
-READ8_MEMBER(nes_smb2j_device::read_l)
+uint8_t nes_smb2j_device::read_l(offs_t offset)
{
LOG_MMC(("smb2j read_l, offset: %04x\n", offset));
offset += 0x100;
@@ -1018,10 +1018,10 @@ READ8_MEMBER(nes_smb2j_device::read_l)
if (offset >= 0x1000)
return m_prg[0x10000 + (offset & 0x0fff)];
- return m_open_bus; // open bus
+ return get_open_bus(); // open bus
}
-READ8_MEMBER(nes_smb2j_device::read_m)
+uint8_t nes_smb2j_device::read_m(offs_t offset)
{
LOG_MMC(("smb2j read_m, offset: %04x\n", offset));
return m_prg[0x4000 + offset];
@@ -1057,7 +1057,7 @@ void nes_smb2ja_device::device_timer(emu_timer &timer, device_timer_id id, int p
}
}
-WRITE8_MEMBER(nes_smb2ja_device::write_h)
+void nes_smb2ja_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("smb2ja write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1076,7 +1076,7 @@ WRITE8_MEMBER(nes_smb2ja_device::write_h)
}
}
-READ8_MEMBER(nes_smb2ja_device::read_m)
+uint8_t nes_smb2ja_device::read_m(offs_t offset)
{
LOG_MMC(("smb2ja read_m, offset: %04x\n", offset));
return m_prg[(0xfe * 0x2000 + (offset & 0x1fff)) & (m_prg_size - 1)];
@@ -1114,7 +1114,7 @@ void nes_smb2jb_device::device_timer(emu_timer &timer, device_timer_id id, int p
}
}
-WRITE8_MEMBER(nes_smb2jb_device::write_l)
+void nes_smb2jb_device::write_l(offs_t offset, uint8_t data)
{
uint8_t prg;
LOG_MMC(("smb2jb write_l, offset: %04x, data: %02x\n", offset, data));
@@ -1134,14 +1134,14 @@ WRITE8_MEMBER(nes_smb2jb_device::write_l)
}
}
-READ8_MEMBER(nes_smb2jb_device::read_m)
+uint8_t nes_smb2jb_device::read_m(offs_t offset)
{
LOG_MMC(("smb2jb read_m, offset: %04x\n", offset));
return m_prg[((0x0f * 0x2000) + (offset & 0x1fff)) & (m_prg_size - 1)];
}
/* This goes to 0x4020-0x403f & 0x40a0-0x40bf */
-WRITE8_MEMBER(nes_smb2jb_device::write_ex)
+void nes_smb2jb_device::write_ex(offs_t offset, uint8_t data)
{
uint8_t prg;
LOG_MMC(("smb2jb write_ex, offset: %04x, data: %02x\n", offset, data));
@@ -1169,7 +1169,7 @@ WRITE8_MEMBER(nes_smb2jb_device::write_ex)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_09034a_device::write_ex)
+void nes_09034a_device::write_ex(offs_t offset, uint8_t data)
{
LOG_MMC(("09-034a write_ex, offset: %04x, data: %02x\n", offset, data));
@@ -1177,7 +1177,7 @@ WRITE8_MEMBER(nes_09034a_device::write_ex)
m_reg = data & 1;
}
-READ8_MEMBER(nes_09034a_device::read_m)
+uint8_t nes_09034a_device::read_m(offs_t offset)
{
LOG_MMC(("09-034a read_m, offset: %04x\n", offset));
// in 0x6000-0x7fff is mapped the 2nd PRG chip which starts after 32K (hence the +4)
@@ -1198,7 +1198,7 @@ READ8_MEMBER(nes_09034a_device::read_m)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_tobidase_device::write_l)
+void nes_tobidase_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("tobidase write_h, offset: %04x, data: %02x\n", offset, data));
offset += 0x4100;
@@ -1207,7 +1207,7 @@ WRITE8_MEMBER(nes_tobidase_device::write_l)
m_latch = data & 0x0f;
}
-READ8_MEMBER(nes_tobidase_device::read_m)
+uint8_t nes_tobidase_device::read_m(offs_t offset)
{
LOG_MMC(("tobidase read_m, offset: %04x\n", offset));
if (m_latch >= 0x0c)
@@ -1229,13 +1229,13 @@ READ8_MEMBER(nes_tobidase_device::read_m)
-------------------------------------------------*/
-READ8_MEMBER(nes_lh32_device::read_m)
+uint8_t nes_lh32_device::read_m(offs_t offset)
{
LOG_MMC(("lh32 read_m, offset: %04x\n", offset));
return m_prg[(m_latch * 0x2000) + (offset & 0x1fff)];
}
-READ8_MEMBER(nes_lh32_device::read_h)
+uint8_t nes_lh32_device::read_h(offs_t offset)
{
// LOG_MMC(("lh32 read_h, offset: %04x\n", offset));
@@ -1245,7 +1245,7 @@ READ8_MEMBER(nes_lh32_device::read_h)
return hi_access_rom(offset);
}
-WRITE8_MEMBER(nes_lh32_device::write_m)
+void nes_lh32_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("lh32 write_m, offset: %04x, data: %02x\n", offset, data));
@@ -1256,7 +1256,7 @@ WRITE8_MEMBER(nes_lh32_device::write_m)
}
}
-WRITE8_MEMBER(nes_lh32_device::write_h)
+void nes_lh32_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("lh32 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1285,13 +1285,13 @@ void nes_lh10_device::update_prg()
prg8_ab(m_reg[7]);
}
-READ8_MEMBER(nes_lh10_device::read_m)
+uint8_t nes_lh10_device::read_m(offs_t offset)
{
LOG_MMC(("lh10 read_m, offset: %04x\n", offset));
return m_prg[(0x0e * 0x2000) + (offset & 0x1fff)];
}
-READ8_MEMBER(nes_lh10_device::read_h)
+uint8_t nes_lh10_device::read_h(offs_t offset)
{
// LOG_MMC(("lh10 read_h, offset: %04x\n", offset));
@@ -1301,7 +1301,7 @@ READ8_MEMBER(nes_lh10_device::read_h)
return hi_access_rom(offset);
}
-WRITE8_MEMBER(nes_lh10_device::write_h)
+void nes_lh10_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("lh10 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1354,13 +1354,13 @@ void nes_lh53_device::device_timer(emu_timer &timer, device_timer_id id, int par
}
}
-READ8_MEMBER(nes_lh53_device::read_m)
+uint8_t nes_lh53_device::read_m(offs_t offset)
{
LOG_MMC(("lh53 read_m, offset: %04x\n", offset));
return m_prg[(m_reg * 0x2000) + (offset & 0x1fff)];
}
-READ8_MEMBER(nes_lh53_device::read_h)
+uint8_t nes_lh53_device::read_h(offs_t offset)
{
// LOG_MMC(("lh53 read_h, offset: %04x\n", offset));
@@ -1370,7 +1370,7 @@ READ8_MEMBER(nes_lh53_device::read_h)
return hi_access_rom(offset);
}
-WRITE8_MEMBER(nes_lh53_device::write_h)
+void nes_lh53_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("lh53 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1412,7 +1412,7 @@ WRITE8_MEMBER(nes_lh53_device::write_h)
-------------------------------------------------*/
-READ8_MEMBER(nes_2708_device::read_m)
+uint8_t nes_2708_device::read_m(offs_t offset)
{
LOG_MMC(("btl-2708 read_m, offset: %04x\n", offset));
if (!m_reg[1])
@@ -1421,14 +1421,14 @@ READ8_MEMBER(nes_2708_device::read_m)
return m_prg[(m_reg[0] * 0x2000) + (offset & 0x1fff)];
}
-WRITE8_MEMBER(nes_2708_device::write_m)
+void nes_2708_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("btl-2708 write_m, offset: %04x, data: %02x\n", offset, data));
// if (!m_reg[1])
m_prgram[offset] = data; // lower 8K of WRAM
}
-READ8_MEMBER(nes_2708_device::read_h)
+uint8_t nes_2708_device::read_h(offs_t offset)
{
// LOG_MMC(("btl-2708 read_h, offset: %04x\n", offset));
@@ -1438,7 +1438,7 @@ READ8_MEMBER(nes_2708_device::read_h)
return hi_access_rom(offset);
}
-WRITE8_MEMBER(nes_2708_device::write_h)
+void nes_2708_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("btl-2708 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1475,20 +1475,20 @@ WRITE8_MEMBER(nes_2708_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_ac08_device::write_ex)
+void nes_ac08_device::write_ex(offs_t offset, uint8_t data)
{
LOG_MMC(("AC-08 write_ex, offset: %04x, data: %02x\n", offset, data));
if (offset == 5) // $4025
set_nt_mirroring(!BIT(data, 3) ? PPU_MIRROR_VERT : PPU_MIRROR_HORZ);
}
-READ8_MEMBER(nes_ac08_device::read_m)
+uint8_t nes_ac08_device::read_m(offs_t offset)
{
LOG_MMC(("AC-08 read_m, offset: %04x\n", offset));
return m_prg[(m_latch * 0x2000) + (offset & 0x1fff)];
}
-WRITE8_MEMBER(nes_ac08_device::write_h)
+void nes_ac08_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("AC-08 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1511,13 +1511,13 @@ WRITE8_MEMBER(nes_ac08_device::write_h)
-------------------------------------------------*/
-READ8_MEMBER(nes_unl_bb_device::read_m)
+uint8_t nes_unl_bb_device::read_m(offs_t offset)
{
LOG_MMC(("unl-bb read_m, offset: %04x\n", offset));
return m_prg[(((m_reg[0] & 3 & m_prg_mask) * 0x2000) + (offset & 0x1fff))];
}
-WRITE8_MEMBER(nes_unl_bb_device::write_h)
+void nes_unl_bb_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("unl-bb write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1549,7 +1549,7 @@ WRITE8_MEMBER(nes_unl_bb_device::write_h)
-------------------------------------------------*/
-READ8_MEMBER(nes_mmalee_device::read_m)
+uint8_t nes_mmalee_device::read_m(offs_t offset)
{
LOG_MMC(("mmalee read_m, offset: %04x\n", offset));
@@ -1561,7 +1561,7 @@ READ8_MEMBER(nes_mmalee_device::read_m)
return ((offset + 0x6000) & 0xff00) >> 8;
}
-WRITE8_MEMBER(nes_mmalee_device::write_m)
+void nes_mmalee_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("mmalee write_m, offset: %04x, data: %02x\n", offset, data));
@@ -1594,7 +1594,7 @@ void nes_shuiguan_device::device_timer(emu_timer &timer, device_timer_id id, int
}
}
-WRITE8_MEMBER(nes_shuiguan_device::write_h)
+void nes_shuiguan_device::write_h(offs_t offset, uint8_t data)
{
int bank;
LOG_MMC(("shuiguan write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1646,7 +1646,7 @@ WRITE8_MEMBER(nes_shuiguan_device::write_h)
}
}
-READ8_MEMBER(nes_shuiguan_device::read_m)
+uint8_t nes_shuiguan_device::read_m(offs_t offset)
{
// always first bank??
LOG_MMC(("shuiguan read_m, offset: %04x\n", offset));
@@ -1670,7 +1670,7 @@ READ8_MEMBER(nes_shuiguan_device::read_m)
-------------------------------------------------*/
-READ8_MEMBER(nes_rt01_device::read_h)
+uint8_t nes_rt01_device::read_h(offs_t offset)
{
// LOG_MMC(("rt01 read_h, offset: %04x\n", offset));
diff --git a/src/devices/bus/nes/bootleg.h b/src/devices/bus/nes/bootleg.h
index a048f0955d4..42213b131b8 100644
--- a/src/devices/bus/nes/bootleg.h
+++ b/src/devices/bus/nes/bootleg.h
@@ -14,7 +14,7 @@ public:
// construction/destruction
nes_ax5705_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -36,7 +36,7 @@ class nes_sc127_device : public nes_nrom_device
public:
// construction/destruction
nes_sc127_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void hblank_irq(int scanline, int vblank, int blanked) override;
virtual void pcb_reset() override;
@@ -58,8 +58,8 @@ class nes_mbaby_device : public nes_nrom_device
public:
// construction/destruction
nes_mbaby_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -87,8 +87,8 @@ public:
// construction/destruction
nes_asn_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -109,7 +109,7 @@ public:
// construction/destruction
nes_smb3p_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -134,7 +134,7 @@ class nes_btl_dn_device : public nes_nrom_device
public:
// construction/destruction
nes_btl_dn_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void hblank_irq(int scanline, int vblank, int blanked) override;
virtual void pcb_reset() override;
@@ -156,8 +156,8 @@ public:
// construction/destruction
nes_whirl2706_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -178,11 +178,11 @@ public:
// construction/destruction
nes_smb2j_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_ex) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_ex(offs_t offset, uint8_t data) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -207,8 +207,8 @@ class nes_smb2ja_device : public nes_nrom_device
public:
// construction/destruction
nes_smb2ja_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -233,9 +233,9 @@ class nes_smb2jb_device : public nes_nrom_device
public:
// construction/destruction
nes_smb2jb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_ex) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_ex(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -261,8 +261,8 @@ public:
// construction/destruction
nes_09034a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_ex) override;
- virtual DECLARE_READ8_MEMBER(read_m) override;
+ virtual void write_ex(offs_t offset, uint8_t data) override;
+ virtual uint8_t read_m(offs_t offset) override;
virtual void pcb_reset() override;
@@ -283,8 +283,8 @@ public:
// construction/destruction
nes_tobidase_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -305,10 +305,10 @@ public:
// construction/destruction
nes_lh32_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -329,9 +329,9 @@ public:
// construction/destruction
nes_lh10_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -354,10 +354,10 @@ public:
// construction/destruction
nes_lh53_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override {}
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_m(offs_t offset, uint8_t data) override {}
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -385,10 +385,10 @@ public:
// construction/destruction
nes_2708_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -408,9 +408,9 @@ public:
// nes_ac08_device/destruction
nes_ac08_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_ex) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_ex(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -429,8 +429,8 @@ class nes_unl_bb_device : public nes_nrom_device
public:
// construction/destruction
nes_unl_bb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -450,8 +450,8 @@ public:
// construction/destruction
nes_mmalee_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -468,8 +468,8 @@ public:
// construction/destruction
nes_shuiguan_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -496,7 +496,7 @@ public:
// construction/destruction
nes_rt01_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_h) override;
+ virtual uint8_t read_h(offs_t offset) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/camerica.cpp b/src/devices/bus/nes/camerica.cpp
index 7b9d413f6c9..5870b2911ab 100644
--- a/src/devices/bus/nes/camerica.cpp
+++ b/src/devices/bus/nes/camerica.cpp
@@ -136,7 +136,7 @@ void nes_golden5_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bf9093_device::write_h)
+void nes_bf9093_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("bf9093 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -174,7 +174,7 @@ WRITE8_MEMBER(nes_bf9093_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bf9096_device::write_h)
+void nes_bf9096_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("bf9096 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -203,7 +203,7 @@ WRITE8_MEMBER(nes_bf9096_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_golden5_device::write_h)
+void nes_golden5_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("golden5 write_h, offset: %04x, data: %02x\n", offset, data));
diff --git a/src/devices/bus/nes/camerica.h b/src/devices/bus/nes/camerica.h
index b7a4782c342..7688249a64c 100644
--- a/src/devices/bus/nes/camerica.h
+++ b/src/devices/bus/nes/camerica.h
@@ -16,7 +16,7 @@ public:
// construction/destruction
nes_bf9093_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -34,8 +34,8 @@ public:
// construction/destruction
nes_bf9096_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override { write_h(space, offset, data, mem_mask); }
+ virtual void write_h(offs_t offset, uint8_t data) override;
+ virtual void write_m(offs_t offset, uint8_t data) override { write_h(offset, data); }
virtual void pcb_reset() override;
@@ -56,7 +56,7 @@ public:
// construction/destruction
nes_golden5_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/cne.cpp b/src/devices/bus/nes/cne.cpp
index 1f0ad793937..c81e7a2bdc8 100644
--- a/src/devices/bus/nes/cne.cpp
+++ b/src/devices/bus/nes/cne.cpp
@@ -112,7 +112,7 @@ void nes_cne_shlz_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_cne_decathl_device::write_h)
+void nes_cne_decathl_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("cne_decathl_w, offset: %04x, data: %02x\n", offset, data));
@@ -146,7 +146,7 @@ WRITE8_MEMBER(nes_cne_decathl_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_cne_fsb_device::write_m)
+void nes_cne_fsb_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("cne_fsb write_m, offset: %04x, data: %02x\n", offset, data));
@@ -184,7 +184,7 @@ WRITE8_MEMBER(nes_cne_fsb_device::write_m)
m_battery[offset] = data;
}
-READ8_MEMBER(nes_cne_fsb_device::read_m)
+uint8_t nes_cne_fsb_device::read_m(offs_t offset)
{
LOG_MMC(("cne_fsb read_m, offset: %04x\n", offset));
@@ -211,7 +211,7 @@ READ8_MEMBER(nes_cne_fsb_device::read_m)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_cne_shlz_device::write_l)
+void nes_cne_shlz_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("cne_shlz write_l, offset: %04x, data: %02x\n", offset, data));
diff --git a/src/devices/bus/nes/cne.h b/src/devices/bus/nes/cne.h
index d5e117c791a..da0623cbde3 100644
--- a/src/devices/bus/nes/cne.h
+++ b/src/devices/bus/nes/cne.h
@@ -16,7 +16,7 @@ public:
// construction/destruction
nes_cne_decathl_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -34,8 +34,8 @@ public:
// construction/destruction
nes_cne_fsb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -53,7 +53,7 @@ public:
// construction/destruction
nes_cne_shlz_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/cony.cpp b/src/devices/bus/nes/cony.cpp
index 78c89a57141..e42ae833f82 100644
--- a/src/devices/bus/nes/cony.cpp
+++ b/src/devices/bus/nes/cony.cpp
@@ -174,7 +174,7 @@ void nes_cony_device::device_timer(emu_timer &timer, device_timer_id id, int par
}
}
-WRITE8_MEMBER(nes_cony_device::write_l)
+void nes_cony_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("cony write_l, offset: %04x, data: %02x\n", offset, data));
@@ -182,7 +182,7 @@ WRITE8_MEMBER(nes_cony_device::write_l)
m_low_reg[offset & 0x03] = data;
}
-READ8_MEMBER(nes_cony_device::read_l)
+uint8_t nes_cony_device::read_l(offs_t offset)
{
LOG_MMC(("cony read_l, offset: %04x\n", offset));
@@ -229,7 +229,7 @@ void nes_cony_device::set_chr()
}
}
-WRITE8_MEMBER(nes_cony_device::write_h)
+void nes_cony_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("cony write_h, offset: %04x, data: %02x\n", offset, data));
@@ -310,7 +310,7 @@ WRITE8_MEMBER(nes_cony_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_yoko_device::write_l)
+void nes_yoko_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("yoko write_l, offset: %04x, data: %02x\n", offset, data));
@@ -318,7 +318,7 @@ WRITE8_MEMBER(nes_yoko_device::write_l)
m_low_reg[offset & 0x03] = data;
}
-READ8_MEMBER(nes_yoko_device::read_l)
+uint8_t nes_yoko_device::read_l(offs_t offset)
{
LOG_MMC(("yoko read_l, offset: %04x\n", offset));
@@ -359,7 +359,7 @@ void nes_yoko_device::set_chr()
chr2_6(m_reg[7], CHRROM);
}
-WRITE8_MEMBER(nes_yoko_device::write_h)
+void nes_yoko_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("yoko write_h, offset: %04x, data: %02x\n", offset, data));
diff --git a/src/devices/bus/nes/cony.h b/src/devices/bus/nes/cony.h
index b7b759a7fe1..aa767a88c13 100644
--- a/src/devices/bus/nes/cony.h
+++ b/src/devices/bus/nes/cony.h
@@ -16,9 +16,9 @@ public:
// construction/destruction
nes_cony_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -54,9 +54,9 @@ public:
// construction/destruction
nes_yoko_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/datach.cpp b/src/devices/bus/nes/datach.cpp
index c8549924f68..5262b6d927a 100644
--- a/src/devices/bus/nes/datach.cpp
+++ b/src/devices/bus/nes/datach.cpp
@@ -52,7 +52,7 @@ datach_cart_interface::~datach_cart_interface()
{
}
-READ8_MEMBER(datach_cart_interface::read)
+uint8_t datach_cart_interface::read(offs_t offset)
{
if (offset < 0x4000)
return m_rom[(m_bank * 0x4000) + (offset & 0x3fff)];
@@ -84,10 +84,10 @@ void nes_datach_slot_device::device_start()
m_cart = dynamic_cast<datach_cart_interface *>(get_card_device());
}
-READ8_MEMBER(nes_datach_slot_device::read)
+uint8_t nes_datach_slot_device::read(offs_t offset)
{
if (m_cart)
- return m_cart->read(space, offset, mem_mask);
+ return m_cart->read(offset);
return 0xff;
}
@@ -201,9 +201,10 @@ uint8_t *nes_datach_rom_device::get_cart_base()
}
-MACHINE_CONFIG_START(nes_datach_24c01_device::device_add_mconfig)
- MCFG_24C01_ADD("i2cmem")
-MACHINE_CONFIG_END
+void nes_datach_24c01_device::device_add_mconfig(machine_config &config)
+{
+ I2C_24C01(config, m_i2cmem);
+}
//---------------------------------
@@ -283,7 +284,7 @@ void nes_datach_device::pcb_reset()
-------------------------------------------------*/
-READ8_MEMBER(nes_datach_device::read_m)
+uint8_t nes_datach_device::read_m(offs_t offset)
{
LOG_MMC(("Datach read_m, offset: %04x\n", offset));
uint8_t i2c_val = 0;
@@ -300,19 +301,19 @@ READ8_MEMBER(nes_datach_device::read_m)
}
-READ8_MEMBER(nes_datach_device::read_h)
+uint8_t nes_datach_device::read_h(offs_t offset)
{
LOG_MMC(("Datach read_h, offset: %04x\n", offset));
// this shall be the proper code, but it's a bit slower, so we access directly the subcart below
- //return m_subslot->read(space, offset, mem_mask);
+ //return m_subslot->read(offset);
if (m_subslot->m_cart)
- return m_subslot->m_cart->read(space, offset, mem_mask);
+ return m_subslot->m_cart->read(offset);
else // this is "fake" in the sense that we fill CPU space with 0xff if no Datach cart is loaded
return hi_access_rom(offset);
}
-WRITE8_MEMBER(nes_datach_device::write_h)
+void nes_datach_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("Datach write_h, offset: %04x, data: %02x\n", offset, data));
@@ -352,7 +353,7 @@ WRITE8_MEMBER(nes_datach_device::write_h)
#endif
break;
default:
- fcg_write(space, offset & 0x0f, data, mem_mask);
+ fcg_write(offset & 0x0f, data);
break;
}
}
@@ -368,11 +369,12 @@ static void datach_cart(device_slot_interface &device)
}
-MACHINE_CONFIG_START(nes_datach_device::device_add_mconfig)
- BARCODE_READER(config, "datach", 0);
- MCFG_DATACH_MINICART_ADD("datach_slot", datach_cart)
- MCFG_24C02_ADD("i2cmem")
-MACHINE_CONFIG_END
+void nes_datach_device::device_add_mconfig(machine_config &config)
+{
+ BARCODE_READER(config, m_reader, 0);
+ NES_DATACH_SLOT(config, m_subslot, 0, datach_cart);
+ I2C_24C02(config, m_i2cmem);
+}
//-------------------------------------------------
diff --git a/src/devices/bus/nes/datach.h b/src/devices/bus/nes/datach.h
index 5d4decd64fa..81865baa69f 100644
--- a/src/devices/bus/nes/datach.h
+++ b/src/devices/bus/nes/datach.h
@@ -25,7 +25,7 @@ public:
virtual ~datach_cart_interface();
// reading and writing
- virtual DECLARE_READ8_MEMBER(read);
+ virtual uint8_t read(offs_t offset);
uint8_t *get_cart_base() { return m_rom; }
void write_prg_bank(uint8_t bank) { m_bank = bank; }
@@ -52,6 +52,15 @@ class nes_datach_slot_device : public device_t,
friend class nes_datach_device;
public:
// construction/destruction
+ template <typename T>
+ nes_datach_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock, T &&opts)
+ : nes_datach_slot_device(mconfig, tag, owner, clock)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(nullptr);
+ set_fixed(false);
+ }
nes_datach_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~nes_datach_slot_device();
@@ -74,7 +83,7 @@ public:
// slot interface overrides
virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
- virtual DECLARE_READ8_MEMBER(read);
+ uint8_t read(offs_t offset);
void write_prg_bank(uint8_t bank) { if (m_cart) m_cart->write_prg_bank(bank); }
protected:
@@ -85,11 +94,6 @@ protected:
DECLARE_DEVICE_TYPE(NES_DATACH_SLOT, nes_datach_slot_device)
-#define MCFG_DATACH_MINICART_ADD(_tag, _slot_intf) \
- MCFG_DEVICE_ADD(_tag, NES_DATACH_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, nullptr, false)
-
-
//--------------------------------
//
// Datach Minicart implementation
@@ -148,9 +152,9 @@ public:
// construction/destruction
nes_datach_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/discrete.cpp b/src/devices/bus/nes/discrete.cpp
index 2e1f6a4c81b..2fb7883d063 100644
--- a/src/devices/bus/nes/discrete.cpp
+++ b/src/devices/bus/nes/discrete.cpp
@@ -134,7 +134,7 @@ void nes_74x161x138_device::pcb_reset()
-------------------------------------------------*/
// there are two 'variants' depending on hardwired or mapper ctrl mirroring
-WRITE8_MEMBER(nes_74x161x161x32_device::write_h)
+void nes_74x161x161x32_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("74x161x161x32 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -155,7 +155,7 @@ WRITE8_MEMBER(nes_74x161x161x32_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_74x139x74_device::write_m)
+void nes_74x139x74_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("74x139x74 write_m, offset: %04x, data: %02x\n", offset, data));
@@ -179,7 +179,7 @@ WRITE8_MEMBER(nes_74x139x74_device::write_m)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_74x377_device::write_h)
+void nes_74x377_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("74x377 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -200,7 +200,7 @@ WRITE8_MEMBER(nes_74x377_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_74x161x138_device::write_m)
+void nes_74x161x138_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("74x161x138 write_m, offset: %04x, data: %02x\n", offset, data));
diff --git a/src/devices/bus/nes/discrete.h b/src/devices/bus/nes/discrete.h
index 51576a77e41..861b8b643bf 100644
--- a/src/devices/bus/nes/discrete.h
+++ b/src/devices/bus/nes/discrete.h
@@ -16,7 +16,7 @@ public:
// construction/destruction
nes_74x161x161x32_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -34,7 +34,7 @@ public:
// construction/destruction
nes_74x139x74_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -52,7 +52,7 @@ public:
// construction/destruction
nes_74x377_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -70,7 +70,7 @@ public:
// construction/destruction
nes_74x161x138_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/disksys.cpp b/src/devices/bus/nes/disksys.cpp
index 0f350fb7922..71101492822 100644
--- a/src/devices/bus/nes/disksys.cpp
+++ b/src/devices/bus/nes/disksys.cpp
@@ -51,9 +51,10 @@ static const floppy_interface nes_floppy_interface =
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(nes_disksys_device::device_add_mconfig)
- MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, nes_floppy_interface)
-MACHINE_CONFIG_END
+void nes_disksys_device::device_add_mconfig(machine_config &config)
+{
+ LEGACY_FLOPPY(config, FLOPPY_0, 0, &nes_floppy_interface);
+}
ROM_START( disksys )
@@ -172,7 +173,7 @@ void nes_disksys_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_disksys_device::write_h)
+void nes_disksys_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("Famicom Disk System write_h, offset %04x, data: %02x\n", offset, data));
@@ -180,7 +181,7 @@ WRITE8_MEMBER(nes_disksys_device::write_h)
m_prgram[offset + 0x2000] = data;
}
-READ8_MEMBER(nes_disksys_device::read_h)
+uint8_t nes_disksys_device::read_h(offs_t offset)
{
LOG_MMC(("Famicom Disk System read_h, offset: %04x\n", offset));
@@ -190,13 +191,13 @@ READ8_MEMBER(nes_disksys_device::read_h)
return m_2c33_rom[offset & 0x1fff];
}
-WRITE8_MEMBER(nes_disksys_device::write_m)
+void nes_disksys_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("Famicom Disk System write_m, offset: %04x, data: %02x\n", offset, data));
m_prgram[offset] = data;
}
-READ8_MEMBER(nes_disksys_device::read_m)
+uint8_t nes_disksys_device::read_m(offs_t offset)
{
LOG_MMC(("Famicom Disk System read_m, offset: %04x\n", offset));
return m_prgram[offset];
@@ -208,7 +209,7 @@ void nes_disksys_device::hblank_irq(int scanline, int vblank, int blanked)
hold_irq_line();
}
-WRITE8_MEMBER(nes_disksys_device::write_ex)
+void nes_disksys_device::write_ex(offs_t offset, uint8_t data)
{
LOG_MMC(("Famicom Disk System write_ex, offset: %04x, data: %02x\n", offset, data));
@@ -280,7 +281,7 @@ WRITE8_MEMBER(nes_disksys_device::write_ex)
}
}
-READ8_MEMBER(nes_disksys_device::read_ex)
+uint8_t nes_disksys_device::read_ex(offs_t offset)
{
LOG_MMC(("Famicom Disk System read_ex, offset: %04x\n", offset));
uint8_t ret;
diff --git a/src/devices/bus/nes/disksys.h b/src/devices/bus/nes/disksys.h
index 907ee06abef..1e3e45afb1e 100644
--- a/src/devices/bus/nes/disksys.h
+++ b/src/devices/bus/nes/disksys.h
@@ -17,12 +17,12 @@ public:
// construction/destruction
nes_disksys_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_ex) override;
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_ex) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_ex(offs_t offset) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_ex(offs_t offset, uint8_t data) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void disk_flip_side() override;
diff --git a/src/devices/bus/nes/ggenie.cpp b/src/devices/bus/nes/ggenie.cpp
index 462c9c5da37..bb5866feac7 100644
--- a/src/devices/bus/nes/ggenie.cpp
+++ b/src/devices/bus/nes/ggenie.cpp
@@ -80,7 +80,7 @@ void nes_ggenie_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_ggenie_device::write_h)
+void nes_ggenie_device::write_h(offs_t offset, uint8_t data)
{
// LOG_MMC(("axrom write_h, offset: %04x, data: %02x\n", offset, data));
if (!m_gg_bypass)
@@ -150,22 +150,22 @@ WRITE8_MEMBER(nes_ggenie_device::write_h)
}
}
else
- m_ggslot->write_h(space, offset, data, mem_mask);
+ m_ggslot->write_h(offset, data);
}
-WRITE8_MEMBER(nes_ggenie_device::write_m)
+void nes_ggenie_device::write_m(offs_t offset, uint8_t data)
{
if (m_gg_bypass && m_ggslot)
- m_ggslot->write_m(space, offset, data, mem_mask);
+ m_ggslot->write_m(offset, data);
}
-WRITE8_MEMBER(nes_ggenie_device::write_l)
+void nes_ggenie_device::write_l(offs_t offset, uint8_t data)
{
if (m_gg_bypass && m_ggslot)
- m_ggslot->write_l(space, offset, data, mem_mask);
+ m_ggslot->write_l(offset, data);
}
-READ8_MEMBER(nes_ggenie_device::read_h)
+uint8_t nes_ggenie_device::read_h(offs_t offset)
{
if (m_gg_bypass && m_ggslot->m_cart)
{
@@ -186,29 +186,29 @@ READ8_MEMBER(nes_ggenie_device::read_h)
return hi_access_rom(offset);
}
-READ8_MEMBER(nes_ggenie_device::read_m)
+uint8_t nes_ggenie_device::read_m(offs_t offset)
{
if (m_gg_bypass && m_ggslot->m_cart)
- return m_ggslot->m_cart->read_m(space, offset, mem_mask);
+ return m_ggslot->m_cart->read_m(offset);
return 0xff;
}
-READ8_MEMBER(nes_ggenie_device::read_l)
+uint8_t nes_ggenie_device::read_l(offs_t offset)
{
if (m_gg_bypass && m_ggslot->m_cart)
- return m_ggslot->m_cart->read_l(space, offset, mem_mask);
+ return m_ggslot->m_cart->read_l(offset);
return 0xff;
}
-WRITE8_MEMBER(nes_ggenie_device::chr_w)
+void nes_ggenie_device::chr_w(offs_t offset, uint8_t data)
{
int bank = offset >> 10;
if (m_gg_bypass && m_ggslot->m_cart)
{
- m_ggslot->m_cart->chr_w(space, offset, data, mem_mask);
+ m_ggslot->m_cart->chr_w(offset, data);
return;
}
@@ -216,24 +216,24 @@ WRITE8_MEMBER(nes_ggenie_device::chr_w)
m_chr_access[bank][offset & 0x3ff] = data;
}
-READ8_MEMBER(nes_ggenie_device::chr_r)
+uint8_t nes_ggenie_device::chr_r(offs_t offset)
{
int bank = offset >> 10;
if (m_gg_bypass && m_ggslot->m_cart)
- return m_ggslot->m_cart->chr_r(space, offset, mem_mask);
+ return m_ggslot->m_cart->chr_r(offset);
return m_chr_access[bank][offset & 0x3ff];
}
-WRITE8_MEMBER(nes_ggenie_device::nt_w)
+void nes_ggenie_device::nt_w(offs_t offset, uint8_t data)
{
int page = ((offset & 0xc00) >> 10);
if (m_gg_bypass && m_ggslot->m_cart)
{
- m_ggslot->m_cart->nt_w(space, offset, data, mem_mask);
+ m_ggslot->m_cart->nt_w(offset, data);
return;
}
@@ -243,12 +243,12 @@ WRITE8_MEMBER(nes_ggenie_device::nt_w)
m_nt_access[page][offset & 0x3ff] = data;
}
-READ8_MEMBER(nes_ggenie_device::nt_r)
+uint8_t nes_ggenie_device::nt_r(offs_t offset)
{
int page = ((offset & 0xc00) >> 10);
if (m_gg_bypass && m_ggslot->m_cart)
- return m_ggslot->m_cart->nt_r(space, offset, mem_mask);
+ return m_ggslot->m_cart->nt_r(offset);
return m_nt_access[page][offset & 0x3ff];
}
diff --git a/src/devices/bus/nes/ggenie.h b/src/devices/bus/nes/ggenie.h
index 1ca577ec7b0..2d6974be849 100644
--- a/src/devices/bus/nes/ggenie.h
+++ b/src/devices/bus/nes/ggenie.h
@@ -16,17 +16,17 @@ public:
// construction/destruction
nes_ggenie_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
-
- virtual DECLARE_READ8_MEMBER(chr_r) override;
- virtual DECLARE_WRITE8_MEMBER(chr_w) override;
- virtual DECLARE_READ8_MEMBER(nt_r) override;
- virtual DECLARE_WRITE8_MEMBER(nt_w) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
+
+ virtual uint8_t chr_r(offs_t offset) override;
+ virtual void chr_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t nt_r(offs_t offset) override;
+ virtual void nt_w(offs_t offset, uint8_t data) override;
void hblank_irq(int scanline, int vblank, int blanked) override { if (m_gg_bypass && m_ggslot->m_cart) m_ggslot->m_cart->hblank_irq(scanline, vblank, blanked); }
void scanline_irq(int scanline, int vblank, int blanked) override { if (m_gg_bypass && m_ggslot->m_cart) m_ggslot->m_cart->scanline_irq(scanline, vblank, blanked); }
diff --git a/src/devices/bus/nes/henggedianzi.cpp b/src/devices/bus/nes/henggedianzi.cpp
index 5d75850a0c8..0f9acd05d45 100644
--- a/src/devices/bus/nes/henggedianzi.cpp
+++ b/src/devices/bus/nes/henggedianzi.cpp
@@ -135,7 +135,7 @@ void nes_hengg_shjy3_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_hengg_srich_device::write_h)
+void nes_hengg_srich_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("hengg_srich write_h, offset: %04x, data: %02x\n", offset, data));
@@ -162,7 +162,7 @@ WRITE8_MEMBER(nes_hengg_srich_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_hengg_xhzs_device::write_l)
+void nes_hengg_xhzs_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("hengg_xhzs write_l, offset: %04x, data: %02x\n", offset, data));
offset += 0x4100;
@@ -171,7 +171,7 @@ WRITE8_MEMBER(nes_hengg_xhzs_device::write_l)
prg32(data >> 1);
}
-WRITE8_MEMBER(nes_hengg_xhzs_device::write_h)
+void nes_hengg_xhzs_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("hengg_xhzs write_h, offset: %04x, data: %02x\n", offset, data));
@@ -225,7 +225,7 @@ void nes_hengg_shjy3_device::update_banks()
}
}
-WRITE8_MEMBER(nes_hengg_shjy3_device::write_h)
+void nes_hengg_shjy3_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("shjy3 write_h, offset: %04x, data: %02x\n", offset, data));
diff --git a/src/devices/bus/nes/henggedianzi.h b/src/devices/bus/nes/henggedianzi.h
index d74da743425..0bf0b2faebc 100644
--- a/src/devices/bus/nes/henggedianzi.h
+++ b/src/devices/bus/nes/henggedianzi.h
@@ -16,7 +16,7 @@ public:
// construction/destruction
nes_hengg_srich_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -34,8 +34,8 @@ public:
// construction/destruction
nes_hengg_xhzs_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -53,7 +53,7 @@ public:
// construction/destruction
nes_hengg_shjy3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void hblank_irq(int scanline, int vblank, int blanked) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/hes.cpp b/src/devices/bus/nes/hes.cpp
index 8d1d3a7a590..946ea1f9585 100644
--- a/src/devices/bus/nes/hes.cpp
+++ b/src/devices/bus/nes/hes.cpp
@@ -73,7 +73,7 @@ void nes_hes_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_hes_device::write_l)
+void nes_hes_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("hes write_l, offset: %04x, data: %02x\n", offset, data));
diff --git a/src/devices/bus/nes/hes.h b/src/devices/bus/nes/hes.h
index d45d20a1a3f..ea72578ad98 100644
--- a/src/devices/bus/nes/hes.h
+++ b/src/devices/bus/nes/hes.h
@@ -16,7 +16,7 @@ public:
// construction/destruction
nes_hes_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/hosenkan.cpp b/src/devices/bus/nes/hosenkan.cpp
index 4200655897e..ae7749b7e9a 100644
--- a/src/devices/bus/nes/hosenkan.cpp
+++ b/src/devices/bus/nes/hosenkan.cpp
@@ -105,7 +105,7 @@ void nes_hosenkan_device::hblank_irq( int scanline, int vblank, int blanked )
m_irq_clear = 0;
}
-WRITE8_MEMBER(nes_hosenkan_device::write_h)
+void nes_hosenkan_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("hosenkan write_h, offset: %04x, data: %02x\n", offset, data));
diff --git a/src/devices/bus/nes/hosenkan.h b/src/devices/bus/nes/hosenkan.h
index 153638a9cbe..163aef76edc 100644
--- a/src/devices/bus/nes/hosenkan.h
+++ b/src/devices/bus/nes/hosenkan.h
@@ -16,7 +16,7 @@ public:
// construction/destruction
nes_hosenkan_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void hblank_irq(int scanline, int vblank, int blanked) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/irem.cpp b/src/devices/bus/nes/irem.cpp
index 15ef687dbea..c55cb588506 100644
--- a/src/devices/bus/nes/irem.cpp
+++ b/src/devices/bus/nes/irem.cpp
@@ -166,7 +166,7 @@ void nes_h3001_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_lrog017_device::write_h)
+void nes_lrog017_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("lrog017 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -185,7 +185,7 @@ WRITE8_MEMBER(nes_lrog017_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_holydivr_device::write_h)
+void nes_holydivr_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("holy diver write_h, offset: %04x, data: %02x\n", offset, data));
@@ -209,7 +209,7 @@ WRITE8_MEMBER(nes_holydivr_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_tam_s1_device::write_h)
+void nes_tam_s1_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("tam s1 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -233,7 +233,7 @@ WRITE8_MEMBER(nes_tam_s1_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_g101_device::write_h)
+void nes_g101_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("g101 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -299,7 +299,7 @@ void nes_h3001_device::device_timer(emu_timer &timer, device_timer_id id, int pa
}
}
-WRITE8_MEMBER(nes_h3001_device::write_h)
+void nes_h3001_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("h3001 write_h, offset %04x, data: %02x\n", offset, data));
diff --git a/src/devices/bus/nes/irem.h b/src/devices/bus/nes/irem.h
index a50077e70a3..82fd0815c38 100644
--- a/src/devices/bus/nes/irem.h
+++ b/src/devices/bus/nes/irem.h
@@ -16,7 +16,7 @@ public:
// construction/destruction
nes_lrog017_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -34,7 +34,7 @@ public:
// construction/destruction
nes_holydivr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -52,7 +52,7 @@ public:
// construction/destruction
nes_tam_s1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -70,7 +70,7 @@ public:
// construction/destruction
nes_g101_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -90,7 +90,7 @@ public:
// construction/destruction
nes_h3001_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/jaleco.cpp b/src/devices/bus/nes/jaleco.cpp
index 907580d6a1e..740c3c799b8 100644
--- a/src/devices/bus/nes/jaleco.cpp
+++ b/src/devices/bus/nes/jaleco.cpp
@@ -253,7 +253,7 @@ void nes_ss88006_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_jf11_device::write_m)
+void nes_jf11_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("jf11 write_m, offset: %04x, data: %02x\n", offset, data));
chr8(data, CHRROM);
@@ -274,7 +274,7 @@ WRITE8_MEMBER(nes_jf11_device::write_m)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_jf13_device::write_m)
+void nes_jf13_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("jf13 write_m, offset: %04x, data: %02x\n", offset, data));
@@ -301,7 +301,7 @@ WRITE8_MEMBER(nes_jf13_device::write_m)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_jf16_device::write_h)
+void nes_jf16_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("jf16 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -330,7 +330,7 @@ WRITE8_MEMBER(nes_jf16_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_jf17_device::write_h)
+void nes_jf17_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("jf17 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -345,7 +345,7 @@ WRITE8_MEMBER(nes_jf17_device::write_h)
m_latch = data;
}
-WRITE8_MEMBER(nes_jf17_adpcm_device::write_h)
+void nes_jf17_adpcm_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("jf17 + ADPCM write_h, offset: %04x, data: %02x\n", offset, data));
@@ -379,7 +379,7 @@ WRITE8_MEMBER(nes_jf17_adpcm_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_jf19_device::write_h)
+void nes_jf19_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("jf19 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -392,7 +392,7 @@ WRITE8_MEMBER(nes_jf19_device::write_h)
chr8(data & 0x0f, CHRROM);
}
-WRITE8_MEMBER(nes_jf19_adpcm_device::write_h)
+void nes_jf19_adpcm_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("jf19 + ADPCM write_h, offset: %04x, data: %02x\n", offset, data));
@@ -474,7 +474,7 @@ void nes_ss88006_device::device_timer(emu_timer &timer, device_timer_id id, int
}
}
-WRITE8_MEMBER(nes_ss88006_device::ss88006_write)
+void nes_ss88006_device::ss88006_write(offs_t offset, uint8_t data)
{
uint8_t bank;
LOG_MMC(("ss88006 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -564,7 +564,7 @@ WRITE8_MEMBER(nes_ss88006_device::ss88006_write)
// bits2-bits6 are sample number, bit1 is setup/enable/disable
// program first write sample # + bit1 set to 'init' the sample
// then it writes sample # + bit1 clear to 'start' the sample
-void nes_ss88006_adpcm_device::ss88006_adpcm_write(address_space &space, offs_t offset, uint8_t data, samples_device *dev)
+void nes_ss88006_adpcm_device::ss88006_adpcm_write(offs_t offset, uint8_t data, samples_device &dev)
{
LOG_MMC(("ss88006 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -575,13 +575,13 @@ void nes_ss88006_adpcm_device::ss88006_adpcm_write(address_space &space, offs_t
{
// printf("sample write: data: %02x\n", data);
if ((m_latch & 2) && !(data & 2))
- dev->start((data >> 2) & 0x1f, (data >> 2) & 0x1f);
+ dev.start((data >> 2) & 0x1f, (data >> 2) & 0x1f);
}
m_latch = data;
break;
default:
- ss88006_write(space, offset, data);
+ ss88006_write(offset, data);
break;
}
}
diff --git a/src/devices/bus/nes/jaleco.h b/src/devices/bus/nes/jaleco.h
index ed8c04da7a0..53cc5716ce3 100644
--- a/src/devices/bus/nes/jaleco.h
+++ b/src/devices/bus/nes/jaleco.h
@@ -17,7 +17,7 @@ public:
// construction/destruction
nes_jf11_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -35,7 +35,7 @@ public:
// construction/destruction
nes_jf13_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -58,7 +58,7 @@ public:
// construction/destruction
nes_jf16_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -76,7 +76,7 @@ public:
// construction/destruction
nes_jf17_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -98,7 +98,7 @@ public:
// construction/destruction
nes_jf17_adpcm_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
protected:
virtual void device_add_mconfig(machine_config &config) override;
@@ -116,7 +116,7 @@ public:
// construction/destruction
nes_jf19_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -136,7 +136,7 @@ public:
// construction/destruction
nes_jf19_adpcm_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
protected:
virtual void device_add_mconfig(machine_config &config) override;
@@ -154,8 +154,8 @@ public:
// construction/destruction
nes_ss88006_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(ss88006_write);
- virtual DECLARE_WRITE8_MEMBER(write_h) override { ss88006_write(space, offset, data, mem_mask); }
+ void ss88006_write(offs_t offset, uint8_t data);
+ virtual void write_h(offs_t offset, uint8_t data) override { ss88006_write(offset, data); }
virtual void pcb_reset() override;
@@ -188,7 +188,7 @@ protected:
// construction/destruction
nes_ss88006_adpcm_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
- void ss88006_adpcm_write(address_space &space, offs_t offset, uint8_t data, samples_device *dev);
+ void ss88006_adpcm_write(offs_t offset, uint8_t data, samples_device &dev);
};
@@ -204,7 +204,7 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
private:
- virtual DECLARE_WRITE8_MEMBER(write_h) override { ss88006_adpcm_write(space, offset, data, m_samples); }
+ virtual void write_h(offs_t offset, uint8_t data) override { ss88006_adpcm_write(offset, data, *m_samples); }
required_device<samples_device> m_samples;
};
@@ -222,7 +222,7 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
private:
- virtual DECLARE_WRITE8_MEMBER(write_h) override { ss88006_adpcm_write(space, offset, data, m_samples); }
+ virtual void write_h(offs_t offset, uint8_t data) override { ss88006_adpcm_write(offset, data, *m_samples); }
required_device<samples_device> m_samples;
};
@@ -240,7 +240,7 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
private:
- virtual DECLARE_WRITE8_MEMBER(write_h) override { ss88006_adpcm_write(space, offset, data, m_samples); }
+ virtual void write_h(offs_t offset, uint8_t data) override { ss88006_adpcm_write(offset, data, *m_samples); }
required_device<samples_device> m_samples;
};
@@ -258,7 +258,7 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
private:
- virtual DECLARE_WRITE8_MEMBER(write_h) override { ss88006_adpcm_write(space, offset, data, m_samples); }
+ virtual void write_h(offs_t offset, uint8_t data) override { ss88006_adpcm_write(offset, data, *m_samples); }
required_device<samples_device> m_samples;
};
diff --git a/src/devices/bus/nes/jy.cpp b/src/devices/bus/nes/jy.cpp
index 33c1e6e6cac..8a54624cd5a 100644
--- a/src/devices/bus/nes/jy.cpp
+++ b/src/devices/bus/nes/jy.cpp
@@ -144,14 +144,14 @@ void nes_jy_typea_device::pcb_reset()
-------------------------------------------------*/
-READ8_MEMBER(nes_jy_typea_device::nt_r)
+uint8_t nes_jy_typea_device::nt_r(offs_t offset)
{
int page = ((offset & 0xc00) >> 10);
irq_clock(0, 2);
return m_nt_access[page][offset & 0x3ff];
}
-READ8_MEMBER(nes_jy_typea_device::chr_r)
+uint8_t nes_jy_typea_device::chr_r(offs_t offset)
{
int bank = offset >> 10;
irq_clock(0, 2);
@@ -241,7 +241,7 @@ void nes_jy_typea_device::scanline_irq(int scanline, int vblank, int blanked)
// 0x5000-0x5fff : sort of protection?
-READ8_MEMBER(nes_jy_typea_device::read_l)
+uint8_t nes_jy_typea_device::read_l(offs_t offset)
{
LOG_MMC(("JY Company write_m, offset: %04x\n", offset));
offset += 0x100;
@@ -249,7 +249,7 @@ READ8_MEMBER(nes_jy_typea_device::read_l)
if (offset >= 0x1000 && offset < 0x1800)
{
// bit6/bit7 DSW read
- return m_open_bus & 0x3f;
+ return get_open_bus() & 0x3f;
}
if (offset >= 0x1800)
@@ -262,10 +262,10 @@ READ8_MEMBER(nes_jy_typea_device::read_l)
return m_latch;
}
- return m_open_bus; // open bus
+ return get_open_bus(); // open bus
}
-WRITE8_MEMBER(nes_jy_typea_device::write_l)
+void nes_jy_typea_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("JY Company write_m, offset: %04x, data: %02x\n", offset, data));
offset += 0x100;
@@ -282,14 +282,14 @@ WRITE8_MEMBER(nes_jy_typea_device::write_l)
}
// 0x6000-0x7fff : WRAM or open bus
-READ8_MEMBER(nes_jy_typea_device::read_m)
+uint8_t nes_jy_typea_device::read_m(offs_t offset)
{
LOG_MMC(("JY Company write_m, offset: %04x\n", offset));
if (m_reg[0] & 0x80)
return m_prg[(m_bank_6000 & m_prg_mask) * 0x2000 + (offset & 0x1fff)];
- return m_open_bus; // open bus
+ return get_open_bus(); // open bus
}
@@ -425,7 +425,7 @@ void nes_jy_typea_device::update_banks(int reg)
}
-WRITE8_MEMBER(nes_jy_typea_device::write_h)
+void nes_jy_typea_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("JY Company write_m, offset: %04x, data: %02x\n", offset, data));
@@ -569,7 +569,7 @@ void nes_jy_typec_device::update_mirror_typec()
update_mirror_typea();
}
-READ8_MEMBER(nes_jy_typec_device::chr_r)
+uint8_t nes_jy_typec_device::chr_r(offs_t offset)
{
int bank = offset >> 10;
diff --git a/src/devices/bus/nes/jy.h b/src/devices/bus/nes/jy.h
index 80be5d98631..d318bfae60a 100644
--- a/src/devices/bus/nes/jy.h
+++ b/src/devices/bus/nes/jy.h
@@ -16,13 +16,13 @@ public:
// construction/destruction
nes_jy_typea_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
- virtual DECLARE_READ8_MEMBER(chr_r) override;
- virtual DECLARE_READ8_MEMBER(nt_r) override;
+ virtual uint8_t chr_r(offs_t offset) override;
+ virtual uint8_t nt_r(offs_t offset) override;
virtual void scanline_irq(int scanline, int vblank, int blanked) override;
virtual void pcb_reset() override;
@@ -90,7 +90,7 @@ public:
// construction/destruction
nes_jy_typec_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(chr_r) override;
+ virtual uint8_t chr_r(offs_t offset) override;
protected:
void update_mirror_typec();
diff --git a/src/devices/bus/nes/kaiser.cpp b/src/devices/bus/nes/kaiser.cpp
index 2e228782785..52690376e4b 100644
--- a/src/devices/bus/nes/kaiser.cpp
+++ b/src/devices/bus/nes/kaiser.cpp
@@ -295,7 +295,7 @@ void nes_ks7037_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_ks7058_device::write_h)
+void nes_ks7058_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("ks7058 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -322,7 +322,7 @@ WRITE8_MEMBER(nes_ks7058_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_ks7022_device::write_h)
+void nes_ks7022_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("ks7022 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -333,7 +333,7 @@ WRITE8_MEMBER(nes_ks7022_device::write_h)
m_latch = data & 0x0f;
}
-READ8_MEMBER(nes_ks7022_device::read_h)
+uint8_t nes_ks7022_device::read_h(offs_t offset)
{
LOG_MMC(("ks7022 read_h, offset: %04x\n", offset));
@@ -388,7 +388,7 @@ void nes_ks7032_device::prg_update()
prg8_cd(m_reg[3]);
}
-WRITE8_MEMBER(nes_ks7032_device::ks7032_write)
+void nes_ks7032_device::ks7032_write(offs_t offset, uint8_t data)
{
LOG_MMC(("ks7032_write, offset: %04x, data: %02x\n", offset, data));
@@ -419,7 +419,7 @@ WRITE8_MEMBER(nes_ks7032_device::ks7032_write)
}
}
-READ8_MEMBER(nes_ks7032_device::read_m)
+uint8_t nes_ks7032_device::read_m(offs_t offset)
{
LOG_MMC(("ks7032 read_m, offset: %04x\n", offset));
return m_prg[((m_reg[4] * 0x2000) + (offset & 0x1fff)) & (m_prg_size - 1)];
@@ -438,7 +438,7 @@ READ8_MEMBER(nes_ks7032_device::read_m)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_ks202_device::write_h)
+void nes_ks202_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("ks202 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -458,12 +458,12 @@ WRITE8_MEMBER(nes_ks202_device::write_h)
}
break;
default:
- ks7032_write(space, offset, data, mem_mask);
+ ks7032_write(offset, data);
break;
}
}
-READ8_MEMBER(nes_ks202_device::read_m)
+uint8_t nes_ks202_device::read_m(offs_t offset)
{
LOG_MMC(("ks202 read_m, offset: %04x\n", offset));
return m_prgram[offset & 0x1fff];
@@ -499,7 +499,7 @@ void nes_ks7017_device::device_timer(emu_timer &timer, device_timer_id id, int p
}
}
-WRITE8_MEMBER(nes_ks7017_device::write_l)
+void nes_ks7017_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("ks7017 write_l, offset: %04x, data: %02x\n", offset, data));
@@ -512,7 +512,7 @@ WRITE8_MEMBER(nes_ks7017_device::write_l)
prg16_89ab(m_latch);
}
-WRITE8_MEMBER(nes_ks7017_device::write_ex)
+void nes_ks7017_device::write_ex(offs_t offset, uint8_t data)
{
LOG_MMC(("ks7017 write_ex, offset: %04x, data: %02x\n", offset, data));
offset += 0x20;
@@ -530,7 +530,7 @@ WRITE8_MEMBER(nes_ks7017_device::write_ex)
set_nt_mirroring(BIT(data, 3) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
}
-READ8_MEMBER(nes_ks7017_device::read_ex)
+uint8_t nes_ks7017_device::read_ex(offs_t offset)
{
LOG_MMC(("ks7017 read_ex, offset: %04x\n", offset));
offset += 0x20;
@@ -542,7 +542,7 @@ READ8_MEMBER(nes_ks7017_device::read_ex)
return temp;
}
- return m_open_bus; // open bus
+ return get_open_bus(); // open bus
}
/*-------------------------------------------------
@@ -557,7 +557,7 @@ READ8_MEMBER(nes_ks7017_device::read_ex)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_ks7012_device::write_h)
+void nes_ks7012_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("ks7012 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -580,13 +580,13 @@ WRITE8_MEMBER(nes_ks7012_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_ks7013b_device::write_m)
+void nes_ks7013b_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("ks7013b write_l, offset: %04x, data: %02x\n", offset, data));
prg16_89ab(data);
}
-WRITE8_MEMBER(nes_ks7013b_device::write_h)
+void nes_ks7013b_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("ks7013b write_h, offset: %04x, data: %02x\n", offset, data));
set_nt_mirroring((data & 1) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
@@ -613,20 +613,20 @@ WRITE8_MEMBER(nes_ks7013b_device::write_h)
-------------------------------------------------*/
-READ8_MEMBER(nes_ks7031_device::read_m)
+uint8_t nes_ks7031_device::read_m(offs_t offset)
{
// LOG_MMC(("ks7031 read_m, offset: %04x\n", offset));
return m_prg[(m_reg[(offset >> 11) & 3] * 0x0800) + (offset & 0x7ff)];
}
-READ8_MEMBER(nes_ks7031_device::read_h)
+uint8_t nes_ks7031_device::read_h(offs_t offset)
{
// here the first 32K are accessed, but in 16x2K blocks loaded in reverse order
int accessed_2k = (offset >> 11) & 0x0f;
return m_prg[((0x0f - accessed_2k) * 0x0800) + (offset & 0x7ff)];
}
-WRITE8_MEMBER(nes_ks7031_device::write_h)
+void nes_ks7031_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("ks7031 write_h, offset: %04x, data: %02x\n", offset, data));
m_reg[(offset >> 11) & 3] = data & 0x3f;
@@ -646,13 +646,13 @@ WRITE8_MEMBER(nes_ks7031_device::write_h)
-------------------------------------------------*/
-READ8_MEMBER(nes_ks7016_device::read_m)
+uint8_t nes_ks7016_device::read_m(offs_t offset)
{
// LOG_MMC(("ks7016 read_m, offset: %04x\n", offset));
return m_prg[((m_reg * 0x2000) + (offset & 0x1fff)) & (m_prg_size - 1)];
}
-WRITE8_MEMBER(nes_ks7016_device::write_h)
+void nes_ks7016_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("ks7016 write_h, offset: %04x, data: %02x\n", offset, data));
uint8_t mask = offset & 0x30;
@@ -692,7 +692,7 @@ void nes_ks7037_device::update_prg()
set_nt_page(3, CIRAM, m_reg[5] & 1, 1);
}
-READ8_MEMBER(nes_ks7037_device::read_m)
+uint8_t nes_ks7037_device::read_m(offs_t offset)
{
// LOG_MMC(("ks7037 read_m, offset: %04x\n", offset));
if (offset < 0x1000)
@@ -701,14 +701,14 @@ READ8_MEMBER(nes_ks7037_device::read_m)
return m_prg[(0x1e * 0x1000) + (offset & 0x0fff)];
}
-WRITE8_MEMBER(nes_ks7037_device::write_m)
+void nes_ks7037_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("ks7037 write_m, offset: %04x, data: %02x\n", offset, data));
if (offset < 0x1000)
m_prgram[offset & 0x0fff] = data;
}
-READ8_MEMBER(nes_ks7037_device::read_h)
+uint8_t nes_ks7037_device::read_h(offs_t offset)
{
// LOG_MMC(("ks7037 read_h, offset: %04x\n", offset));
@@ -718,7 +718,7 @@ READ8_MEMBER(nes_ks7037_device::read_h)
return hi_access_rom(offset);
}
-WRITE8_MEMBER(nes_ks7037_device::write_h)
+void nes_ks7037_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("ks7037 write_h, offset: %04x, data: %02x\n", offset, data));
diff --git a/src/devices/bus/nes/kaiser.h b/src/devices/bus/nes/kaiser.h
index 8c544059aa9..e0e31658cdb 100644
--- a/src/devices/bus/nes/kaiser.h
+++ b/src/devices/bus/nes/kaiser.h
@@ -16,7 +16,7 @@ public:
// construction/destruction
nes_ks7058_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -34,8 +34,8 @@ public:
// construction/destruction
nes_ks7022_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -56,9 +56,9 @@ public:
// construction/destruction
nes_ks7032_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(ks7032_write);
- virtual DECLARE_WRITE8_MEMBER(write_h) override { ks7032_write(space, offset, data, mem_mask); }
+ virtual uint8_t read_m(offs_t offset) override;
+ void ks7032_write(offs_t offset, uint8_t data);
+ virtual void write_h(offs_t offset, uint8_t data) override { ks7032_write(offset, data); }
virtual void pcb_reset() override;
@@ -91,8 +91,8 @@ public:
nes_ks202_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
};
@@ -104,9 +104,9 @@ public:
// construction/destruction
nes_ks7017_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_ex) override;
- virtual DECLARE_WRITE8_MEMBER(write_ex) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
+ virtual uint8_t read_ex(offs_t offset) override;
+ virtual void write_ex(offs_t offset, uint8_t data) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -135,7 +135,7 @@ public:
// construction/destruction
nes_ks7012_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -152,8 +152,8 @@ public:
// construction/destruction
nes_ks7013b_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -171,9 +171,9 @@ public:
// construction/destruction
nes_ks7031_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -194,8 +194,8 @@ public:
// construction/destruction
nes_ks7016_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -215,10 +215,10 @@ public:
// construction/destruction
nes_ks7037_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/karastudio.cpp b/src/devices/bus/nes/karastudio.cpp
index 1b828001078..fc98a658213 100644
--- a/src/devices/bus/nes/karastudio.cpp
+++ b/src/devices/bus/nes/karastudio.cpp
@@ -60,7 +60,7 @@ kstudio_cart_interface::~kstudio_cart_interface()
{
}
-READ8_MEMBER(kstudio_cart_interface::read)
+uint8_t kstudio_cart_interface::read(offs_t offset)
{
return m_rom[(m_bank * 0x4000) + (offset & 0x3fff)];
}
@@ -89,10 +89,10 @@ void nes_kstudio_slot_device::device_start()
m_cart = dynamic_cast<kstudio_cart_interface *>(get_card_device());
}
-READ8_MEMBER(nes_kstudio_slot_device::read)
+uint8_t nes_kstudio_slot_device::read(offs_t offset)
{
if (m_cart)
- return m_cart->read(space, offset, mem_mask);
+ return m_cart->read(offset);
return 0xff;
}
@@ -225,29 +225,29 @@ void nes_karaokestudio_device::pcb_reset()
-------------------------------------------------*/
-READ8_MEMBER(nes_karaokestudio_device::read_m)
+uint8_t nes_karaokestudio_device::read_m(offs_t offset)
{
LOG_MMC(("karaoke studio read_m, offset: %04x\n", offset));
return m_mic_ipt->read();
}
-READ8_MEMBER(nes_karaokestudio_device::read_h)
+uint8_t nes_karaokestudio_device::read_h(offs_t offset)
{
LOG_MMC(("karaoke studio read_h, offset: %04x\n", offset));
// this shall be the proper code, but it's a bit slower, so we access directly the subcart below
- //return m_subslot->read(space, offset, mem_mask);
+ //return m_subslot->read(offset);
// access expansion cart only if all of the followings are verified
// * we are in $8000-$bfff range
// * there has been a bankswitch write to map the expansion to such range
// * there actually is an expansion cart mounted
if (offset < 0x4000 && m_exp_active && m_subslot->m_cart)
- return m_subslot->m_cart->read(space, offset, mem_mask);
+ return m_subslot->m_cart->read(offset);
else
return hi_access_rom(offset);
}
-WRITE8_MEMBER(nes_karaokestudio_device::write_h)
+void nes_karaokestudio_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("karaoke studio write_h, offset: %04x, data: %02x\n", offset, data));
// bit3 1 = M ROM (main unit), 0=E ROM (expansion)
@@ -296,6 +296,7 @@ static void karaoke_studio_cart(device_slot_interface &device)
}
-MACHINE_CONFIG_START(nes_karaokestudio_device::device_add_mconfig)
- MCFG_KSTUDIO_MINICART_ADD("exp_slot", karaoke_studio_cart)
-MACHINE_CONFIG_END
+void nes_karaokestudio_device::device_add_mconfig(machine_config &config)
+{
+ NES_KSEXPANSION_SLOT(config, m_subslot, karaoke_studio_cart);
+}
diff --git a/src/devices/bus/nes/karastudio.h b/src/devices/bus/nes/karastudio.h
index bd712722fe9..fcb481f046e 100644
--- a/src/devices/bus/nes/karastudio.h
+++ b/src/devices/bus/nes/karastudio.h
@@ -24,7 +24,7 @@ public:
virtual ~kstudio_cart_interface();
// reading and writing
- virtual DECLARE_READ8_MEMBER(read);
+ virtual uint8_t read(offs_t offset);
uint8_t *get_cart_base() { return m_rom; }
void write_prg_bank(uint8_t bank) { m_bank = bank; }
@@ -49,6 +49,16 @@ class nes_kstudio_slot_device : public device_t,
friend class nes_karaokestudio_device;
public:
// construction/destruction
+ template <typename T>
+ nes_kstudio_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts)
+ : nes_kstudio_slot_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(nullptr);
+ set_fixed(false);
+ }
+
nes_kstudio_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~nes_kstudio_slot_device();
@@ -68,7 +78,7 @@ public:
// slot interface overrides
virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
- virtual DECLARE_READ8_MEMBER(read);
+ uint8_t read(offs_t offset);
void write_prg_bank(uint8_t bank) { if (m_cart) m_cart->write_prg_bank(bank); }
protected:
@@ -82,11 +92,6 @@ protected:
DECLARE_DEVICE_TYPE(NES_KSEXPANSION_SLOT, nes_kstudio_slot_device)
-#define MCFG_KSTUDIO_MINICART_ADD(_tag, _slot_intf) \
- MCFG_DEVICE_ADD(_tag, NES_KSEXPANSION_SLOT, 0) \
-MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, nullptr, false)
-
-
//-----------------------------------------------
//
// Karaoke Studio Expansion cart implementation
@@ -130,9 +135,9 @@ public:
// construction/destruction
nes_karaokestudio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/konami.cpp b/src/devices/bus/nes/konami.cpp
index 320ceb1eb9b..2d3f20863cb 100644
--- a/src/devices/bus/nes/konami.cpp
+++ b/src/devices/bus/nes/konami.cpp
@@ -81,7 +81,7 @@ nes_konami_vrc6_device::nes_konami_vrc6_device(const machine_config &mconfig, co
}
nes_konami_vrc7_device::nes_konami_vrc7_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : nes_konami_vrc4_device(mconfig, NES_VRC7, tag, owner, clock), m_ym2413(*this, "ym")
+ : nes_konami_vrc4_device(mconfig, NES_VRC7, tag, owner, clock), m_vrc7snd(*this, "vrc7snd")
{
}
@@ -239,7 +239,7 @@ void nes_konami_vrc7_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_konami_vrc1_device::write_h)
+void nes_konami_vrc1_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("VRC-1 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -280,7 +280,7 @@ WRITE8_MEMBER(nes_konami_vrc1_device::write_h)
-------------------------------------------------*/
-READ8_MEMBER(nes_konami_vrc2_device::read_m)
+uint8_t nes_konami_vrc2_device::read_m(offs_t offset)
{
LOG_MMC(("VRC-2 read_m, offset: %04x\n", offset));
@@ -289,10 +289,10 @@ READ8_MEMBER(nes_konami_vrc2_device::read_m)
else if (!m_prgram.empty())
return m_prgram[offset & (m_prgram.size() - 1)];
else // sort of protection? it returns open bus in $7000-$7fff and (open bus & 0xfe) | m_latch in $6000-$6fff
- return (offset < 0x1000) ? ((m_open_bus & 0xfe) | (m_latch & 1)) : m_open_bus;
+ return (offset < 0x1000) ? ((get_open_bus() & 0xfe) | (m_latch & 1)) : get_open_bus();
}
-WRITE8_MEMBER(nes_konami_vrc2_device::write_m)
+void nes_konami_vrc2_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("VRC-2 write_m, offset: %04x, data: %02x\n", offset, data));
@@ -304,7 +304,7 @@ WRITE8_MEMBER(nes_konami_vrc2_device::write_m)
m_latch = data;
}
-WRITE8_MEMBER(nes_konami_vrc2_device::write_h)
+void nes_konami_vrc2_device::write_h(offs_t offset, uint8_t data)
{
uint8_t bank, shift, mask;
uint16_t add_lines = ((offset << (9 - m_vrc_ls_prg_a)) & 0x200) | ((offset << (8 - m_vrc_ls_prg_b)) & 0x100);
@@ -385,7 +385,7 @@ void nes_konami_vrc3_device::device_timer(emu_timer &timer, device_timer_id id,
}
}
-WRITE8_MEMBER(nes_konami_vrc3_device::write_h)
+void nes_konami_vrc3_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("VRC-3 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -482,7 +482,7 @@ void nes_konami_vrc4_device::set_prg()
}
}
-WRITE8_MEMBER(nes_konami_vrc4_device::write_h)
+void nes_konami_vrc4_device::write_h(offs_t offset, uint8_t data)
{
uint8_t bank, shift, mask;
uint16_t add_lines = ((offset << (9 - m_vrc_ls_prg_a)) & 0x200) | ((offset << (8 - m_vrc_ls_prg_b)) & 0x100);
@@ -564,7 +564,7 @@ WRITE8_MEMBER(nes_konami_vrc4_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_konami_vrc6_device::write_h)
+void nes_konami_vrc6_device::write_h(offs_t offset, uint8_t data)
{
uint8_t bank;
uint16_t add_lines = ((offset << (9 - m_vrc_ls_prg_a)) & 0x200) | ((offset << (8 - m_vrc_ls_prg_b)) & 0x100);
@@ -579,10 +579,10 @@ WRITE8_MEMBER(nes_konami_vrc6_device::write_h)
prg8_cd(data);
break;
case 0x1000: // pulse 1 & global control
- m_vrc6snd->write(space, add_lines>>8, data);
+ m_vrc6snd->write(add_lines>>8, data);
break;
case 0x2000: // pulse 2
- m_vrc6snd->write(space, (add_lines>>8) | 0x100, data);
+ m_vrc6snd->write((add_lines>>8) | 0x100, data);
break;
case 0x3000:
if (add_lines == 0x300)
@@ -596,7 +596,7 @@ WRITE8_MEMBER(nes_konami_vrc6_device::write_h)
}
}
else // saw
- m_vrc6snd->write(space, (add_lines>>8) | 0x200, data);
+ m_vrc6snd->write((add_lines>>8) | 0x200, data);
break;
case 0x5000:
case 0x6000:
@@ -637,16 +637,15 @@ WRITE8_MEMBER(nes_konami_vrc6_device::write_h)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(nes_konami_vrc6_device::device_add_mconfig)
-
+void nes_konami_vrc6_device::device_add_mconfig(machine_config &config)
+{
// additional sound hardware
SPEAKER(config, "addon").front_center();
// TODO: this is not how VRC6 clock signaling works!
// The board uses the CLK pin in reality, not hardcoded NTSC values!
- MCFG_DEVICE_ADD("vrc6snd", VRC6, XTAL(21'477'272)/12)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "addon", 0.5)
-MACHINE_CONFIG_END
+ VRC6(config, m_vrc6snd, XTAL(21'477'272)/12).add_route(ALL_OUTPUTS, "addon", 0.5);
+}
/*-------------------------------------------------
@@ -660,7 +659,7 @@ MACHINE_CONFIG_END
-------------------------------------------------*/
-WRITE8_MEMBER(nes_konami_vrc7_device::write_h)
+void nes_konami_vrc7_device::write_h(offs_t offset, uint8_t data)
{
uint8_t bank;
LOG_MMC(("VRC-7 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -682,11 +681,11 @@ WRITE8_MEMBER(nes_konami_vrc7_device::write_h)
case 0x1010:
case 0x1018:
- m_ym2413->register_port_w(space, 0, data);
+ m_vrc7snd->register_port_w(data);
break;
case 0x1030:
case 0x1038:
- m_ym2413->data_port_w(space, 0, data);
+ m_vrc7snd->data_port_w(data);
break;
case 0x2000:
@@ -759,15 +758,12 @@ WRITE8_MEMBER(nes_konami_vrc7_device::write_h)
// and has one output pin for audio, multiplexed for all 6 channels; OPLL has two output pins, one for
// FM and one for Rhythm, and has no special status pin.
-// FIXME: we currently emulate this as a base YM2413!
-
-MACHINE_CONFIG_START(nes_konami_vrc7_device::device_add_mconfig)
-
+void nes_konami_vrc7_device::device_add_mconfig(machine_config &config)
+{
// additional sound hardware
SPEAKER(config, "addon").front_center();
// TODO: this is not how VRC7 clock signaling works!
// The board uses the CLK pin in reality, not hardcoded NTSC values!
- MCFG_DEVICE_ADD("ym", YM2413, XTAL(21'477'272)/12)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "addon", 0.5)
-MACHINE_CONFIG_END
+ VRC7(config, m_vrc7snd, XTAL(21'477'272)/6).add_route(0, "addon", 1.0).add_route(1, "addon", 0.0);
+}
diff --git a/src/devices/bus/nes/konami.h b/src/devices/bus/nes/konami.h
index db269170f53..86afa1832e1 100644
--- a/src/devices/bus/nes/konami.h
+++ b/src/devices/bus/nes/konami.h
@@ -18,7 +18,7 @@ public:
// construction/destruction
nes_konami_vrc1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -39,9 +39,9 @@ public:
// construction/destruction
nes_konami_vrc2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -63,7 +63,7 @@ public:
// construction/destruction
nes_konami_vrc3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -91,7 +91,7 @@ public:
// construction/destruction
nes_konami_vrc4_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -126,7 +126,7 @@ public:
// construction/destruction
nes_konami_vrc6_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
@@ -146,7 +146,7 @@ public:
// construction/destruction
nes_konami_vrc7_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -157,7 +157,7 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
private:
- required_device<ym2413_device> m_ym2413;
+ required_device<vrc7snd_device> m_vrc7snd;
};
diff --git a/src/devices/bus/nes/legacy.cpp b/src/devices/bus/nes/legacy.cpp
index d2b1c697296..a3ab9377082 100644
--- a/src/devices/bus/nes/legacy.cpp
+++ b/src/devices/bus/nes/legacy.cpp
@@ -136,7 +136,7 @@ void nes_ffe8_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_ffe3_device::write_h)
+void nes_ffe3_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("mapper8 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -174,7 +174,7 @@ void nes_ffe4_device::device_timer(emu_timer &timer, device_timer_id id, int par
}
}
-WRITE8_MEMBER(nes_ffe4_device::write_l)
+void nes_ffe4_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("mapper6 write_l, offset: %04x, data: %02x\n", offset, data));
@@ -202,7 +202,7 @@ WRITE8_MEMBER(nes_ffe4_device::write_l)
}
}
-WRITE8_MEMBER(nes_ffe4_device::chr_w)
+void nes_ffe4_device::chr_w(offs_t offset, uint8_t data)
{
int bank = offset >> 10;
if (m_exram_enabled)
@@ -212,7 +212,7 @@ WRITE8_MEMBER(nes_ffe4_device::chr_w)
m_chr_access[bank][offset & 0x3ff] = data;
}
-READ8_MEMBER(nes_ffe4_device::chr_r)
+uint8_t nes_ffe4_device::chr_r(offs_t offset)
{
int bank = offset >> 10;
if (m_exram_enabled)
@@ -222,7 +222,7 @@ READ8_MEMBER(nes_ffe4_device::chr_r)
}
-WRITE8_MEMBER(nes_ffe4_device::write_h)
+void nes_ffe4_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("mapper6 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -257,7 +257,7 @@ WRITE8_MEMBER(nes_ffe4_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_ffe8_device::write_l)
+void nes_ffe8_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("mapper17 write_l, offset: %04x, data: %02x\n", offset, data));
diff --git a/src/devices/bus/nes/legacy.h b/src/devices/bus/nes/legacy.h
index 91b44e108c0..92722c0591c 100644
--- a/src/devices/bus/nes/legacy.h
+++ b/src/devices/bus/nes/legacy.h
@@ -16,7 +16,7 @@ public:
// construction/destruction
nes_ffe3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -34,10 +34,10 @@ public:
// construction/destruction
nes_ffe4_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
- virtual DECLARE_READ8_MEMBER(chr_r) override;
- virtual DECLARE_WRITE8_MEMBER(chr_w) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
+ virtual uint8_t chr_r(offs_t offset) override;
+ virtual void chr_w(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -71,8 +71,8 @@ public:
nes_ffe8_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override {}
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override {}
virtual void pcb_reset() override;
};
diff --git a/src/devices/bus/nes/mmc1.cpp b/src/devices/bus/nes/mmc1.cpp
index d324c153782..9a27c601b4c 100644
--- a/src/devices/bus/nes/mmc1.cpp
+++ b/src/devices/bus/nes/mmc1.cpp
@@ -219,7 +219,7 @@ void nes_sxrom_device::update_regs(int reg)
}
}
-WRITE8_MEMBER( nes_sxrom_device::write_h )
+void nes_sxrom_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("sxrom write_h, offset: %04x, data: %02x\n", offset, data));
@@ -265,7 +265,7 @@ WRITE8_MEMBER( nes_sxrom_device::write_h )
}
}
-WRITE8_MEMBER(nes_sxrom_device::write_m)
+void nes_sxrom_device::write_m(offs_t offset, uint8_t data)
{
uint8_t bank = (m_reg[1] >> 2) & 3;
LOG_MMC(("sxrom write_m, offset: %04x, data: %02x\n", offset, data));
@@ -279,7 +279,7 @@ WRITE8_MEMBER(nes_sxrom_device::write_m)
}
}
-READ8_MEMBER(nes_sxrom_device::read_m)
+uint8_t nes_sxrom_device::read_m(offs_t offset)
{
uint8_t bank = (m_reg[1] >> 2) & 3;
LOG_MMC(("sxrom read_m, offset: %04x\n", offset));
@@ -292,11 +292,11 @@ READ8_MEMBER(nes_sxrom_device::read_m)
return m_prgram[((bank * 0x2000) + offset) & (m_prgram.size() - 1)];
}
- return m_open_bus; // open bus
+ return get_open_bus(); // open bus
}
// SOROM has two RAM banks, the first is not battery backed up, the second is.
-WRITE8_MEMBER(nes_sorom_device::write_m)
+void nes_sorom_device::write_m(offs_t offset, uint8_t data)
{
uint8_t type = BIT(m_reg[0], 4) ? BIT(m_reg[1], 4) : BIT(m_reg[1], 3);
LOG_MMC(("sorom write_m, offset: %04x, data: %02x\n", offset, data));
@@ -310,7 +310,7 @@ WRITE8_MEMBER(nes_sorom_device::write_m)
}
}
-READ8_MEMBER(nes_sorom_device::read_m)
+uint8_t nes_sorom_device::read_m(offs_t offset)
{
uint8_t type = BIT(m_reg[0], 4) ? BIT(m_reg[1], 4) : BIT(m_reg[1], 3);
LOG_MMC(("sorom read_m, offset: %04x\n", offset));
@@ -323,11 +323,11 @@ READ8_MEMBER(nes_sorom_device::read_m)
return m_prgram[offset & (m_prgram.size() - 1)];
}
- return m_open_bus; // open bus
+ return get_open_bus(); // open bus
}
// MMC1A boards have no wram enable/disable bit
-WRITE8_MEMBER(nes_sxrom_a_device::write_m)
+void nes_sxrom_a_device::write_m(offs_t offset, uint8_t data)
{
uint8_t bank = (m_reg[1] >> 2) & 3;
LOG_MMC(("sxrom_a write_m, offset: %04x, data: %02x\n", offset, data));
@@ -338,7 +338,7 @@ WRITE8_MEMBER(nes_sxrom_a_device::write_m)
m_prgram[((bank * 0x2000) + offset) & (m_prgram.size() - 1)] = data;
}
-READ8_MEMBER(nes_sxrom_a_device::read_m)
+uint8_t nes_sxrom_a_device::read_m(offs_t offset)
{
uint8_t bank = (m_reg[1] >> 2) & 3;
LOG_MMC(("sxrom_a read_m, offset: %04x\n", offset));
@@ -348,10 +348,10 @@ READ8_MEMBER(nes_sxrom_a_device::read_m)
if (!m_prgram.empty())
return m_prgram[((bank * 0x2000) + offset) & (m_prgram.size() - 1)];
- return m_open_bus; // open bus
+ return get_open_bus(); // open bus
}
-WRITE8_MEMBER(nes_sorom_a_device::write_m)
+void nes_sorom_a_device::write_m(offs_t offset, uint8_t data)
{
uint8_t type = BIT(m_reg[0], 4) ? BIT(m_reg[1], 4) : BIT(m_reg[1], 3);
LOG_MMC(("sorom_a write_m, offset: %04x, data: %02x\n", offset, data));
@@ -362,7 +362,7 @@ WRITE8_MEMBER(nes_sorom_a_device::write_m)
m_prgram[offset & (m_prgram.size() - 1)] = data;
}
-READ8_MEMBER(nes_sorom_a_device::read_m)
+uint8_t nes_sorom_a_device::read_m(offs_t offset)
{
uint8_t type = BIT(m_reg[0], 4) ? BIT(m_reg[1], 4) : BIT(m_reg[1], 3);
LOG_MMC(("sorom_a read_m, offset: %04x\n", offset));
diff --git a/src/devices/bus/nes/mmc1.h b/src/devices/bus/nes/mmc1.h
index dd9ecccac75..c8ccb835d76 100644
--- a/src/devices/bus/nes/mmc1.h
+++ b/src/devices/bus/nes/mmc1.h
@@ -16,9 +16,9 @@ public:
// construction/destruction
nes_sxrom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -46,8 +46,8 @@ public:
// construction/destruction
nes_sorom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
};
@@ -58,8 +58,8 @@ public:
// construction/destruction
nes_sxrom_a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
};
class nes_sorom_a_device : public nes_sxrom_device
@@ -68,8 +68,8 @@ public:
// construction/destruction
nes_sorom_a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
};
diff --git a/src/devices/bus/nes/mmc2.cpp b/src/devices/bus/nes/mmc2.cpp
index 1055ce98921..8be7b04d2d7 100644
--- a/src/devices/bus/nes/mmc2.cpp
+++ b/src/devices/bus/nes/mmc2.cpp
@@ -130,7 +130,7 @@ void nes_pxrom_device::ppu_latch(offs_t offset)
}
}
-WRITE8_MEMBER( nes_pxrom_device::pxrom_write )
+void nes_pxrom_device::pxrom_write(offs_t offset, uint8_t data)
{
LOG_MMC(("pxrom write_h, offset: %04x, data: %02x\n", offset, data));
switch (offset & 0x7000)
@@ -182,7 +182,7 @@ WRITE8_MEMBER( nes_pxrom_device::pxrom_write )
-------------------------------------------------*/
-WRITE8_MEMBER( nes_fxrom_device::write_h )
+void nes_fxrom_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("fxrom write_h, offset: %04x, data: %02x\n", offset, data));
switch (offset & 0x7000)
@@ -191,7 +191,7 @@ WRITE8_MEMBER( nes_fxrom_device::write_h )
prg16_89ab(data);
break;
default:
- pxrom_write(space, offset, data, mem_mask);
+ pxrom_write(offset, data);
break;
}
}
diff --git a/src/devices/bus/nes/mmc2.h b/src/devices/bus/nes/mmc2.h
index cfd81aa87d3..9f4d100d2f6 100644
--- a/src/devices/bus/nes/mmc2.h
+++ b/src/devices/bus/nes/mmc2.h
@@ -16,8 +16,8 @@ public:
// construction/destruction
nes_pxrom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(pxrom_write);
- virtual DECLARE_WRITE8_MEMBER(write_h) override { pxrom_write(space, offset, data, mem_mask); }
+ virtual void pxrom_write(offs_t offset, uint8_t data);
+ virtual void write_h(offs_t offset, uint8_t data) override { pxrom_write(offset, data); }
virtual void ppu_latch(offs_t offset) override;
virtual void pcb_reset() override;
@@ -42,7 +42,7 @@ public:
nes_fxrom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
};
diff --git a/src/devices/bus/nes/mmc3.cpp b/src/devices/bus/nes/mmc3.cpp
index f8497dbd42d..d6f7f37dc4a 100644
--- a/src/devices/bus/nes/mmc3.cpp
+++ b/src/devices/bus/nes/mmc3.cpp
@@ -244,7 +244,7 @@ void nes_txrom_device::set_chr( uint8_t chr, int chr_base, int chr_mask )
chr_cb(chr_page ^ 7, chr_base | (m_mmc_vrom_bank[5] & chr_mask), chr);
}
-WRITE8_MEMBER(nes_txrom_device::txrom_write)
+void nes_txrom_device::txrom_write(offs_t offset, uint8_t data)
{
uint8_t mmc_helper, cmd;
@@ -313,7 +313,7 @@ WRITE8_MEMBER(nes_txrom_device::txrom_write)
}
}
-WRITE8_MEMBER(nes_txrom_device::write_m)
+void nes_txrom_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("txrom write_m, offset: %04x, data: %02x\n", offset, data));
@@ -326,7 +326,7 @@ WRITE8_MEMBER(nes_txrom_device::write_m)
}
}
-READ8_MEMBER(nes_txrom_device::read_m)
+uint8_t nes_txrom_device::read_m(offs_t offset)
{
LOG_MMC(("txrom read_m, offset: %04x\n", offset));
@@ -338,7 +338,7 @@ READ8_MEMBER(nes_txrom_device::read_m)
return m_prgram[offset & (m_prgram.size() - 1)];
}
- return m_open_bus; // open bus
+ return get_open_bus(); // open bus
}
@@ -350,7 +350,7 @@ READ8_MEMBER(nes_txrom_device::read_m)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_hkrom_device::write_m)
+void nes_hkrom_device::write_m(offs_t offset, uint8_t data)
{
uint8_t write_hi, write_lo;
LOG_MMC(("hkrom write_m, offset: %04x, data: %02x\n", offset, data));
@@ -369,15 +369,15 @@ WRITE8_MEMBER(nes_hkrom_device::write_m)
m_mmc6_ram[offset & 0x3ff] = data;
}
-READ8_MEMBER(nes_hkrom_device::read_m)
+uint8_t nes_hkrom_device::read_m(offs_t offset)
{
LOG_MMC(("hkrom read_m, offset: %04x\n", offset));
if (offset < 0x1000)
- return m_open_bus; // open bus
+ return get_open_bus(); // open bus
if (!(m_mmc6_reg & 0xa0))
- return m_open_bus; // open bus
+ return get_open_bus(); // open bus
if (BIT(offset, 9) && BIT(m_mmc6_reg, 7)) // access to upper half of 1k when upper read is enabled
return m_mmc6_ram[offset & 0x3ff];
@@ -389,7 +389,7 @@ READ8_MEMBER(nes_hkrom_device::read_m)
return 0x00;
}
-WRITE8_MEMBER(nes_hkrom_device::write_h)
+void nes_hkrom_device::write_h(offs_t offset, uint8_t data)
{
uint8_t mmc6_helper;
LOG_MMC(("hkrom write_h, offset: %04x, data: %02x\n", offset, data));
@@ -423,7 +423,7 @@ WRITE8_MEMBER(nes_hkrom_device::write_h)
break;
default:
- txrom_write(space, offset, data, mem_mask);
+ txrom_write(offset, data);
break;
}
}
@@ -465,7 +465,7 @@ void nes_txsrom_device::chr_cb( int start, int bank, int source )
chr1_x(start, bank, source);
}
-WRITE8_MEMBER(nes_txsrom_device::write_h)
+void nes_txsrom_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("txsrom write_h, offset: %04x, data: %02x\n", offset, data));
@@ -475,7 +475,7 @@ WRITE8_MEMBER(nes_txsrom_device::write_h)
break;
default:
- txrom_write(space, offset, data, mem_mask);
+ txrom_write(offset, data);
break;
}
}
@@ -524,7 +524,7 @@ void nes_tqrom_device::set_chr( uint8_t chr, int chr_base, int chr_mask )
-------------------------------------------------*/
-WRITE8_MEMBER(nes_qj_device::write_m)
+void nes_qj_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("qj write_m, offset: %04x, data: %02x\n", offset, data));
@@ -546,7 +546,7 @@ WRITE8_MEMBER(nes_qj_device::write_m)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_zz_device::write_m)
+void nes_zz_device::write_m(offs_t offset, uint8_t data)
{
uint8_t mmc_helper = data & 0x07;
LOG_MMC(("zz write_m, offset: %04x, data: %02x\n", offset, data));
diff --git a/src/devices/bus/nes/mmc3.h b/src/devices/bus/nes/mmc3.h
index d16a0000268..5ef9e8dbdaa 100644
--- a/src/devices/bus/nes/mmc3.h
+++ b/src/devices/bus/nes/mmc3.h
@@ -16,10 +16,10 @@ public:
// construction/destruction
nes_txrom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(txrom_write);
- virtual DECLARE_WRITE8_MEMBER(write_h) override { txrom_write(space, offset, data, mem_mask); }
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ virtual void txrom_write(offs_t offset, uint8_t data);
+ virtual void write_h(offs_t offset, uint8_t data) override { txrom_write(offset, data); }
virtual void prg_cb(int start, int bank);
virtual void chr_cb(int start, int bank, int source);
@@ -62,9 +62,9 @@ public:
// construction/destruction
nes_hkrom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -89,7 +89,7 @@ public:
nes_txsrom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void chr_cb(int start, int bank, int source) override;
protected:
@@ -119,7 +119,7 @@ public:
nes_qj_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
};
@@ -133,7 +133,7 @@ public:
nes_zz_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
};
diff --git a/src/devices/bus/nes/mmc3_clones.cpp b/src/devices/bus/nes/mmc3_clones.cpp
index 5c578c0fcbd..9be591c7d9f 100644
--- a/src/devices/bus/nes/mmc3_clones.cpp
+++ b/src/devices/bus/nes/mmc3_clones.cpp
@@ -637,11 +637,11 @@ void nes_pjoy84_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_nitra_device::write_h)
+void nes_nitra_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("nitra write_h, offset: %04x, data: %02x\n", offset, data));
- txrom_write(space, (offset & 0x6000) | ((offset & 0x400) >> 10), offset & 0xff, mem_mask);
+ txrom_write((offset & 0x6000) | ((offset & 0x400) >> 10), offset & 0xff);
}
/*-------------------------------------------------
@@ -656,12 +656,12 @@ WRITE8_MEMBER(nes_nitra_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_ks7057_device::write_h)
+void nes_ks7057_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("ks7057 write_h, offset: %04x, data: %02x\n", offset, data));
offset = (BIT(offset, 0) << 1) | BIT(offset, 1) | (offset & ~0x03);
- txrom_write(space, offset, data, mem_mask);
+ txrom_write(offset, data);
}
/*-------------------------------------------------
@@ -679,11 +679,11 @@ WRITE8_MEMBER(nes_ks7057_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_sbros11_device::write_h)
+void nes_sbros11_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("smb11 write_h, offset: %04x, data: %02x\n", offset, data));
- txrom_write(space, (offset & 0x6000) | ((offset & 0x04) >> 2), data, mem_mask);
+ txrom_write((offset & 0x6000) | ((offset & 0x04) >> 2), data);
}
/*-------------------------------------------------
@@ -711,14 +711,14 @@ void nes_malisb_device::chr_cb(int start, int bank, int source)
chr1_x(start, bank, source);
}
-WRITE8_MEMBER(nes_malisb_device::write_h)
+void nes_malisb_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("malisb write_h, offset: %04x, data: %02x\n", offset, data));
if (offset > 0x4000)
- txrom_write(space, (offset & 0xfffe) | ((offset & 0x04) >> 2) | ((offset & 0x08) >> 3), data, mem_mask);
+ txrom_write((offset & 0xfffe) | ((offset & 0x04) >> 2) | ((offset & 0x08) >> 3), data);
else
- txrom_write(space, (offset & 0xfffe) | ((offset & 0x08) >> 3), data, mem_mask);
+ txrom_write((offset & 0xfffe) | ((offset & 0x08) >> 3), data);
}
/*-------------------------------------------------
@@ -736,7 +736,7 @@ WRITE8_MEMBER(nes_malisb_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_family4646_device::write_m)
+void nes_family4646_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("family4646 write_m, offset: %04x, data: %02x\n", offset, data));
@@ -763,7 +763,7 @@ WRITE8_MEMBER(nes_family4646_device::write_m)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_pikay2k_device::write_h)
+void nes_pikay2k_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("pikay2k write_h, offset: %04x, data: %02x\n", offset, data));
@@ -776,20 +776,20 @@ WRITE8_MEMBER(nes_pikay2k_device::write_h)
case 0x2000:
m_reg[0] = 0;
default:
- txrom_write(space, offset, data, mem_mask);
+ txrom_write(offset, data);
break;
}
}
// strange WRAM usage: it is protected at start, and gets unprotected after the first write to 0xa000
-WRITE8_MEMBER(nes_pikay2k_device::write_m)
+void nes_pikay2k_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("pikay2k write_m, offset: %04x, data: %02x\n", offset, data));
m_prgram[offset & 0x1fff] = data;
}
-READ8_MEMBER(nes_pikay2k_device::read_m)
+uint8_t nes_pikay2k_device::read_m(offs_t offset)
{
LOG_MMC(("pikay2k read_m, offset: %04x\n", offset));
@@ -820,7 +820,7 @@ void nes_8237_device::chr_cb(int start, int bank, int source)
chr1_x(start, bank, source);
}
-WRITE8_MEMBER(nes_8237_device::write_l)
+void nes_8237_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("unl_8237 write_l, offset: %04x, data: %02x\n", offset, data));
offset += 0x100;
@@ -854,7 +854,7 @@ WRITE8_MEMBER(nes_8237_device::write_l)
}
}
-WRITE8_MEMBER(nes_8237_device::write_h)
+void nes_8237_device::write_h(offs_t offset, uint8_t data)
{
static const uint8_t conv_table[8] = {0, 2, 6, 1, 7, 3, 4, 5};
LOG_MMC(("unl_8237 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -870,7 +870,7 @@ WRITE8_MEMBER(nes_8237_device::write_h)
case 0x3000:
m_cd_enable = 1;
data = (data & 0xc0) | conv_table[data & 0x07];
- txrom_write(space, 0x0000, data, mem_mask);
+ txrom_write(0x0000, data);
break;
case 0x4000:
@@ -878,7 +878,7 @@ WRITE8_MEMBER(nes_8237_device::write_h)
if (m_cd_enable)
{
m_cd_enable = 0;
- txrom_write(space, 0x0001, data, mem_mask);
+ txrom_write(0x0001, data);
}
break;
@@ -886,9 +886,9 @@ WRITE8_MEMBER(nes_8237_device::write_h)
break;
case 0x7000:
- txrom_write(space, 0x6001, data, mem_mask);
- txrom_write(space, 0x4000, data, mem_mask);
- txrom_write(space, 0x4001, data, mem_mask);
+ txrom_write(0x6001, data);
+ txrom_write(0x4000, data);
+ txrom_write(0x4001, data);
break;
}
}
@@ -907,7 +907,7 @@ WRITE8_MEMBER(nes_8237_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_sglionk_device::write_m)
+void nes_sglionk_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("sglionk write_m, offset: %04x, data: %02x\n", offset, data));
@@ -923,7 +923,7 @@ WRITE8_MEMBER(nes_sglionk_device::write_m)
}
-WRITE8_MEMBER(nes_sglionk_device::write_h)
+void nes_sglionk_device::write_h(offs_t offset, uint8_t data)
{
static const uint8_t conv_table[8] = {0, 3, 1, 5, 6, 7, 2, 4};
LOG_MMC(("sglionk write_h, offset: %04x, data: %02x\n", offset, data));
@@ -938,13 +938,13 @@ WRITE8_MEMBER(nes_sglionk_device::write_h)
case 0x2000:
m_reg_enabled = 1;
data = (data & 0xc0) | conv_table[data & 0x07];
- txrom_write(space, 0x0000, data, mem_mask);
+ txrom_write(0x0000, data);
break;
case 0x4000:
if (m_reg_enabled && (m_reg & 0x80) == 0)
{
m_reg_enabled = 0;
- txrom_write(space, 0x0001, data, mem_mask);
+ txrom_write(0x0001, data);
}
break;
}
@@ -954,12 +954,12 @@ WRITE8_MEMBER(nes_sglionk_device::write_h)
switch (offset & 0x03)
{
case 0x02:
- txrom_write(space, 0x6000, data, mem_mask);
+ txrom_write(0x6000, data);
break;
case 0x03:
- txrom_write(space, 0x6001, data, mem_mask);
- txrom_write(space, 0x4000, data, mem_mask);
- txrom_write(space, 0x4001, data, mem_mask);
+ txrom_write(0x6001, data);
+ txrom_write(0x4000, data);
+ txrom_write(0x4001, data);
break;
}
}
@@ -1022,7 +1022,7 @@ void nes_sgboog_device::set_prg(int prg_base, int prg_mask)
}
}
-WRITE8_MEMBER(nes_sgboog_device::write_l)
+void nes_sgboog_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("sgboog write_l, offset: %04x, data: %02x\n", offset, data));
offset += 0x100;
@@ -1046,7 +1046,7 @@ WRITE8_MEMBER(nes_sgboog_device::write_l)
}
}
-WRITE8_MEMBER(nes_sgboog_device::write_m)
+void nes_sgboog_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("sgboog write_m, offset: %04x, data: %02x\n", offset, data));
@@ -1069,7 +1069,7 @@ WRITE8_MEMBER(nes_sgboog_device::write_m)
}
}
-WRITE8_MEMBER(nes_sgboog_device::write_h)
+void nes_sgboog_device::write_h(offs_t offset, uint8_t data)
{
static const uint8_t conv_table[8] = {0,2,5,3,6,1,7,4};
LOG_MMC(("sgboog write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1085,14 +1085,14 @@ WRITE8_MEMBER(nes_sgboog_device::write_h)
if (m_reg[2] && ((m_reg[0] & 0x80) == 0 || (m_latch & 0x07) < 6)) // if we use the prg16 banks and cmd=6,7 DON'T enter!
{
m_reg[2] = 0;
- txrom_write(space, 0x0001, data, mem_mask);
+ txrom_write(0x0001, data);
}
break;
case 0x2000:
data = (data & 0xc0) | conv_table[data & 0x07];
m_reg[2] = 1;
- txrom_write(space, 0x0000, data, mem_mask);
+ txrom_write(0x0000, data);
break;
case 0x4000:
@@ -1100,21 +1100,21 @@ WRITE8_MEMBER(nes_sgboog_device::write_h)
break;
case 0x4001:
- txrom_write(space, 0x6001, data, mem_mask);
+ txrom_write(0x6001, data);
break;
case 0x6001:
- txrom_write(space, 0x4000, data, mem_mask);
- txrom_write(space, 0x4001, data, mem_mask);
+ txrom_write(0x4000, data);
+ txrom_write(0x4001, data);
break;
default:
- txrom_write(space, offset, data, mem_mask);
+ txrom_write(offset, data);
break;
}
}
else
- txrom_write(space, offset, data, mem_mask);
+ txrom_write(offset, data);
}
/*-------------------------------------------------
@@ -1140,7 +1140,7 @@ void nes_kasing_device::prg_cb(int start, int bank)
prg8_x(start, bank);
}
-WRITE8_MEMBER(nes_kasing_device::write_m)
+void nes_kasing_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("kasing write_m, offset: %04x, data: %02x\n", offset, data));
@@ -1172,7 +1172,7 @@ WRITE8_MEMBER(nes_kasing_device::write_m)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_kay_device::write_l)
+void nes_kay_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("kay write_l, offset: %04x, data: %02x\n", offset, data));
offset += 0x100;
@@ -1195,7 +1195,7 @@ WRITE8_MEMBER(nes_kay_device::write_l)
}
}
-READ8_MEMBER(nes_kay_device::read_l)
+uint8_t nes_kay_device::read_l(offs_t offset)
{
LOG_MMC(("kay read_l, offset: %04x\n", offset));
offset += 0x100;
@@ -1269,14 +1269,14 @@ void nes_kay_device::chr_cb(int start, int bank, int source)
chr1_x(start, bank, source);
}
-WRITE8_MEMBER(nes_kay_device::write_h)
+void nes_kay_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("kay write_h, offset: %04x, data: %02x\n", offset, data));
switch (offset & 0x6003)
{
case 0x0000:
- txrom_write(space, offset, data, mem_mask);
+ txrom_write(offset, data);
set_prg(m_prg_base, m_prg_mask);
break;
@@ -1285,19 +1285,19 @@ WRITE8_MEMBER(nes_kay_device::write_h)
| (BIT(data, 3) << 2) | (BIT(data, 4) << 1) | BIT(data, 5);
if (!m_reg[7])
update_regs();
- txrom_write(space, offset, data, mem_mask);
+ txrom_write(offset, data);
set_prg(m_prg_base, m_prg_mask);
break;
case 0x0003:
m_reg[5] = data;
update_regs();
- txrom_write(space, 0x0000, data, mem_mask);
+ txrom_write(0x0000, data);
set_prg(m_prg_base, m_prg_mask);
break;
default:
- txrom_write(space, offset, data, mem_mask);
+ txrom_write(offset, data);
break;
}
}
@@ -1314,7 +1314,7 @@ void nes_h2288_device::prg_cb(int start, int bank)
prg8_x(start, bank);
}
-WRITE8_MEMBER(nes_h2288_device::write_l)
+void nes_h2288_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("h2288 write_l, offset: %04x, data: %02x\n", offset, data));
offset += 0x100;
@@ -1334,7 +1334,7 @@ WRITE8_MEMBER(nes_h2288_device::write_l)
}
}
-READ8_MEMBER(nes_h2288_device::read_l)
+uint8_t nes_h2288_device::read_l(offs_t offset)
{
LOG_MMC(("h2288 read_l, offset: %04x\n", offset));
offset += 0x100;
@@ -1351,7 +1351,7 @@ READ8_MEMBER(nes_h2288_device::read_l)
return 0;
}
-WRITE8_MEMBER(nes_h2288_device::write_h)
+void nes_h2288_device::write_h(offs_t offset, uint8_t data)
{
static const uint8_t conv_table[8] = {0, 3, 1, 5, 6, 7, 2, 4};
LOG_MMC(("h2288 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1359,11 +1359,11 @@ WRITE8_MEMBER(nes_h2288_device::write_h)
switch (offset & 0x6001)
{
case 0x0000:
- txrom_write(space, 0x0000, (data & 0xc0) | conv_table[data & 0x07], mem_mask);
+ txrom_write(0x0000, (data & 0xc0) | conv_table[data & 0x07]);
break;
default:
- txrom_write(space, offset, data, mem_mask);
+ txrom_write(offset, data);
break;
}
}
@@ -1378,7 +1378,7 @@ WRITE8_MEMBER(nes_h2288_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_6035052_device::write_ex)
+void nes_6035052_device::write_ex(offs_t offset, uint8_t data)
{
LOG_MMC(("6035052 write_ex, offset: %04x, data: %02x\n", offset, data));
m_prot = data & 0x03;
@@ -1386,7 +1386,7 @@ WRITE8_MEMBER(nes_6035052_device::write_ex)
m_prot = 2;
}
-READ8_MEMBER(nes_6035052_device::read_ex)
+uint8_t nes_6035052_device::read_ex(offs_t offset)
{
LOG_MMC(("6035052 read_ex, offset: %04x\n", offset));
return m_prot;
@@ -1406,7 +1406,7 @@ READ8_MEMBER(nes_6035052_device::read_ex)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_txc_tw_device::write_l)
+void nes_txc_tw_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("txc_tw write_l, offset: %04x, data: %02x\n", offset, data));
@@ -1436,22 +1436,22 @@ inline uint8_t kof97_unscramble( uint8_t data )
return ((data >> 1) & 0x01) | ((data >> 4) & 0x02) | ((data << 2) & 0x04) | ((data >> 0) & 0xd8) | ((data << 3) & 0x20);
}
-WRITE8_MEMBER(nes_kof97_device::write_h)
+void nes_kof97_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("kof97 write_h, offset: %04x, data: %02x\n", offset, data));
/* Addresses 0x9000, 0xa000, 0xd000 & 0xf000 behaves differently than MMC3 */
if (offset == 0x1000)
- txrom_write(space, 0x0001, kof97_unscramble(data), mem_mask);
+ txrom_write(0x0001, kof97_unscramble(data));
else if (offset == 0x2000)
- txrom_write(space, 0x0000, kof97_unscramble(data), mem_mask);
+ txrom_write(0x0000, kof97_unscramble(data));
else if (offset == 0x5000)
- txrom_write(space, 0x4001, kof97_unscramble(data), mem_mask);
+ txrom_write(0x4001, kof97_unscramble(data));
else if (offset == 0x7000)
- txrom_write(space, 0x6001, kof97_unscramble(data), mem_mask);
+ txrom_write(0x6001, kof97_unscramble(data));
/* Other addresses behaves like MMC3, up to unscrambling data */
else
- txrom_write(space, offset, kof97_unscramble(data), mem_mask);
+ txrom_write(offset, kof97_unscramble(data));
}
/*-------------------------------------------------
@@ -1485,7 +1485,7 @@ void nes_kof96_device::chr_cb(int start, int bank, int source)
chr1_x(start, bank, source);
}
-WRITE8_MEMBER(nes_kof96_device::write_l)
+void nes_kof96_device::write_l(offs_t offset, uint8_t data)
{
uint8_t new_bank;
LOG_MMC(("kof96 write_l, offset: %04x, data: %02x\n", offset, data));
@@ -1532,11 +1532,11 @@ WRITE8_MEMBER(nes_kof96_device::write_l)
if (!m_reg[3] && offset > 0x1000)
{
m_reg[3] = 1;
- space.write_byte(0x4017, 0x40);
+ poke(0x4017, 0x40); // FIXME
}
}
-READ8_MEMBER(nes_kof96_device::read_l)
+uint8_t nes_kof96_device::read_l(offs_t offset)
{
LOG_MMC(("kof96 read_l, offset: %04x\n", offset));
offset += 0x100;
@@ -1547,7 +1547,7 @@ READ8_MEMBER(nes_kof96_device::read_l)
return 0;
}
-WRITE8_MEMBER(nes_kof96_device::write_h)
+void nes_kof96_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("kof96 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1555,12 +1555,12 @@ WRITE8_MEMBER(nes_kof96_device::write_h)
{
case 0x0000:
m_reg[2] = 1;
- txrom_write(space, 0x0000, data, mem_mask);
+ txrom_write(0x0000, data);
break;
case 0x0001:
if (m_reg[2])
- txrom_write(space, 0x0001, data, mem_mask);
+ txrom_write(0x0001, data);
break;
case 0x0002:
@@ -1576,7 +1576,7 @@ WRITE8_MEMBER(nes_kof96_device::write_h)
break;
default:
- txrom_write(space, offset, data, mem_mask);
+ txrom_write(offset, data);
break;
}
}
@@ -1600,7 +1600,7 @@ void nes_sf3_device::set_chr(uint8_t chr_source, int chr_base, int chr_mask)
chr2_6(chr_base | (m_mmc_vrom_bank[2] & chr_mask), chr_source);
}
-WRITE8_MEMBER(nes_sf3_device::write_h)
+void nes_sf3_device::write_h(offs_t offset, uint8_t data)
{
uint8_t cmd;
LOG_MMC(("sf3 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1624,7 +1624,7 @@ WRITE8_MEMBER(nes_sf3_device::write_h)
break;
default:
- txrom_write(space, offset, data, mem_mask);
+ txrom_write(offset, data);
break;
}
}
@@ -1643,7 +1643,7 @@ WRITE8_MEMBER(nes_sf3_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_gouder_device::write_l)
+void nes_gouder_device::write_l(offs_t offset, uint8_t data)
{
static const uint8_t conv_table[256] =
{
@@ -1675,7 +1675,7 @@ WRITE8_MEMBER(nes_gouder_device::write_l)
prg32(((data >> 3) & 0x02) | (data & 0x01));
}
-READ8_MEMBER(nes_gouder_device::read_l)
+uint8_t nes_gouder_device::read_l(offs_t offset)
{
LOG_MMC(("gouder read_l, offset: %04x\n", offset));
@@ -1722,7 +1722,7 @@ void nes_sa9602b_device::prg_cb(int start, int bank)
}
-WRITE8_MEMBER( nes_sa9602b_device::write_h )
+void nes_sa9602b_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("sa9602b write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1738,7 +1738,7 @@ WRITE8_MEMBER( nes_sa9602b_device::write_h )
break;
}
- txrom_write(space, offset, data, mem_mask);
+ txrom_write(offset, data);
}
/*-------------------------------------------------
@@ -1762,7 +1762,7 @@ void nes_sachen_shero_device::chr_cb( int start, int bank, int source )
}
-WRITE8_MEMBER( nes_sachen_shero_device::write_l )
+void nes_sachen_shero_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("shero write_l, offset: %04x, data: %02x\n", offset, data));
offset += 0x4100;
@@ -1777,7 +1777,7 @@ WRITE8_MEMBER( nes_sachen_shero_device::write_l )
}
}
-READ8_MEMBER( nes_sachen_shero_device::read_l )
+uint8_t nes_sachen_shero_device::read_l(offs_t offset)
{
LOG_MMC(("shero read_l, offset: %04x\n", offset));
offset += 0x4100;
@@ -1786,7 +1786,7 @@ READ8_MEMBER( nes_sachen_shero_device::read_l )
{
// DSW read!
}
- return m_open_bus; // open bus
+ return get_open_bus(); // open bus
}
@@ -1886,7 +1886,7 @@ void nes_fk23c_device::fk23c_set_chr()
}
}
-WRITE8_MEMBER(nes_fk23c_device::write_l)
+void nes_fk23c_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("fk23c write_l, offset: %04x, data: %02x\n", offset, data));
offset += 0x100;
@@ -1903,7 +1903,7 @@ WRITE8_MEMBER(nes_fk23c_device::write_l)
}
}
-WRITE8_MEMBER(nes_fk23c_device::write_h)
+void nes_fk23c_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("fk23c write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1929,7 +1929,7 @@ WRITE8_MEMBER(nes_fk23c_device::write_h)
fk23c_set_chr();
}
else
- txrom_write(space, offset, data, mem_mask);
+ txrom_write(offset, data);
break;
case 0x2000:
@@ -1937,7 +1937,7 @@ WRITE8_MEMBER(nes_fk23c_device::write_h)
break;
default:
- txrom_write(space, offset, data, mem_mask);
+ txrom_write(offset, data);
break;
}
}
@@ -1971,7 +1971,7 @@ void nes_s24in1sc03_device::chr_cb(int start, int bank, int source)
chr1_x(start, chr_base | bank, chr);
}
-WRITE8_MEMBER(nes_s24in1sc03_device::write_l)
+void nes_s24in1sc03_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("s24in1sc03 write_l, offset: %04x, data: %02x\n", offset, data));
offset += 0x100;
@@ -2009,7 +2009,7 @@ WRITE8_MEMBER(nes_s24in1sc03_device::write_l)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_15in1_device::write_m)
+void nes_bmc_15in1_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc_15in1 write_m, offset: %04x, data: %02x\n", offset, data));
@@ -2037,7 +2037,7 @@ WRITE8_MEMBER(nes_bmc_15in1_device::write_m)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_sbig7_device::write_h)
+void nes_bmc_sbig7_device::write_h(offs_t offset, uint8_t data)
{
uint8_t page;
LOG_MMC(("bmc_sbig7 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -2058,7 +2058,7 @@ WRITE8_MEMBER(nes_bmc_sbig7_device::write_h)
break;
default:
- txrom_write(space, offset, data, mem_mask);
+ txrom_write(offset, data);
break;
}
}
@@ -2076,7 +2076,7 @@ WRITE8_MEMBER(nes_bmc_sbig7_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_hik8_device::write_m)
+void nes_bmc_hik8_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc_hik8 write_m, offset: %04x, data: %02x\n", offset, data));
@@ -2123,7 +2123,7 @@ WRITE8_MEMBER(nes_bmc_hik8_device::write_m)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_hik4_device::write_m)
+void nes_bmc_hik4_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc_hik4 write_m, offset: %04x, data: %02x\n", offset, data));
@@ -2162,7 +2162,7 @@ WRITE8_MEMBER(nes_bmc_hik4_device::write_m)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_mario7in1_device::write_m)
+void nes_bmc_mario7in1_device::write_m(offs_t offset, uint8_t data)
{
uint8_t helper1, helper2;
LOG_MMC(("bmc_mario7in1 write_m, offset: %04x, data: %02x\n", offset, data));
@@ -2204,7 +2204,7 @@ WRITE8_MEMBER(nes_bmc_mario7in1_device::write_m)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_gold7in1_device::write_m)
+void nes_bmc_gold7in1_device::write_m(offs_t offset, uint8_t data)
{
uint8_t helper1, helper2;
LOG_MMC(("bmc_gold7in1 write_m, offset: %04x, data: %02x\n", offset, data));
@@ -2265,7 +2265,7 @@ void nes_bmc_gc6in1_device::chr_cb(int start, int bank, int source)
chr1_x(start, ((m_reg[1] & 0x03) << 8) | bank, source);
}
-WRITE8_MEMBER(nes_bmc_gc6in1_device::write_l)
+void nes_bmc_gc6in1_device::write_l(offs_t offset, uint8_t data)
{
uint8_t bank;
LOG_MMC(("bmc_gc6in1 write_l, offset: %04x, data: %02x\n", offset, data));
@@ -2294,7 +2294,7 @@ WRITE8_MEMBER(nes_bmc_gc6in1_device::write_l)
}
}
-WRITE8_MEMBER(nes_bmc_gc6in1_device::write_h)
+void nes_bmc_gc6in1_device::write_h(offs_t offset, uint8_t data)
{
uint8_t cmd;
static const uint8_t conv_table[8] = {0, 6, 3, 7, 5, 2, 4, 1};
@@ -2303,20 +2303,20 @@ WRITE8_MEMBER(nes_bmc_gc6in1_device::write_h)
if (!m_reg[2])
{
// in this case we act like MMC3, only with alt prg/chr handlers
- txrom_write(space, offset, data, mem_mask);
+ txrom_write(offset, data);
}
else
{
switch (offset & 0x6001)
{
case 0x0000:
- txrom_write(space, 0x4000, data, mem_mask);
+ txrom_write(0x4000, data);
break;
case 0x0001:
data = (data & 0xc0) | conv_table[data & 0x07];
m_reg[3] = 1;
- txrom_write(space, 0x0000, data, mem_mask);
+ txrom_write(0x0000, data);
break;
case 0x2000:
@@ -2346,7 +2346,7 @@ WRITE8_MEMBER(nes_bmc_gc6in1_device::write_h)
break;
default:
- txrom_write(space, offset, data, mem_mask);
+ txrom_write(offset, data);
break;
}
}
@@ -2377,7 +2377,7 @@ void nes_bmc_411120c_device::chr_cb(int start, int bank, int source)
chr1_x(start, bank | ((m_reg & 3) << 7), source);
}
-WRITE8_MEMBER(nes_bmc_411120c_device::write_m)
+void nes_bmc_411120c_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc_411120c write_m, offset: %04x, data: %02x\n", offset, data));
@@ -2422,7 +2422,7 @@ void nes_bmc_830118c_device::chr_cb(int start, int bank, int source)
chr1_x(start, (bank & 0x7f) | ((m_reg & 0x0c) << 5), source);
}
-WRITE8_MEMBER(nes_bmc_830118c_device::write_m)
+void nes_bmc_830118c_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc_830118c write_m, offset: %04x, data: %02x\n", offset, data));
@@ -2478,7 +2478,7 @@ inline void nes_pjoy84_device::set_base_mask()
m_chr_mask = BIT(m_reg[0], 7) ? 0x7f : 0xff;
}
-WRITE8_MEMBER(nes_pjoy84_device::write_m)
+void nes_pjoy84_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("pjoy84 write_m, offset: %04x, data: %02x\n", offset, data));
@@ -2523,7 +2523,7 @@ void nes_coolboy_device::chr_cb(int start, int bank, int source)
chr1_x(start, bank, source);
}
-WRITE8_MEMBER(nes_coolboy_device::write_m)
+void nes_coolboy_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("coolboy write_m, offset: %04x, data: %02x\n", offset, data));
@@ -2593,7 +2593,7 @@ void nes_a9746_device::update_banks(uint8_t value)
}
}
-WRITE8_MEMBER(nes_a9746_device::write_h)
+void nes_a9746_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("unl_a9746 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -2619,7 +2619,7 @@ WRITE8_MEMBER(nes_a9746_device::write_h)
break;
default:
- txrom_write(space, offset, data, mem_mask);
+ txrom_write(offset, data);
break;
}
}
diff --git a/src/devices/bus/nes/mmc3_clones.h b/src/devices/bus/nes/mmc3_clones.h
index b6102e8fd62..680e86b4c9c 100644
--- a/src/devices/bus/nes/mmc3_clones.h
+++ b/src/devices/bus/nes/mmc3_clones.h
@@ -17,7 +17,7 @@ public:
nes_nitra_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
};
@@ -30,7 +30,7 @@ public:
nes_ks7057_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
};
@@ -43,7 +43,7 @@ public:
nes_sbros11_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
};
@@ -56,7 +56,7 @@ public:
nes_malisb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void prg_cb(int start, int bank) override;
virtual void chr_cb(int start, int bank, int source) override;
};
@@ -71,7 +71,7 @@ public:
nes_family4646_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
};
@@ -85,9 +85,9 @@ public:
// construction/destruction
nes_pikay2k_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -110,8 +110,8 @@ public:
// device-level overrides
virtual void device_start() override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void prg_cb(int start, int bank) override;
virtual void chr_cb(int start, int bank, int source) override;
@@ -131,8 +131,8 @@ public:
// construction/destruction
nes_sglionk_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -154,9 +154,9 @@ public:
// construction/destruction
nes_sgboog_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void prg_cb(int start, int bank) override;
virtual void chr_cb(int start, int bank, int source) override;
@@ -181,7 +181,7 @@ public:
// construction/destruction
nes_kasing_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void prg_cb(int start, int bank) override;
virtual void pcb_reset() override;
@@ -203,9 +203,9 @@ public:
// construction/destruction
nes_kay_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void prg_cb(int start, int bank) override;
virtual void chr_cb(int start, int bank, int source) override;
@@ -230,9 +230,9 @@ public:
// construction/destruction
nes_h2288_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void prg_cb(int start, int bank) override;
virtual void pcb_reset() override;
@@ -254,12 +254,12 @@ public:
// construction/destruction
nes_6035052_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_ex) override;
- virtual DECLARE_WRITE8_MEMBER(write_ex) override;
- virtual DECLARE_READ8_MEMBER(read_l) override { return read_ex(space, offset, mem_mask); }
- virtual DECLARE_READ8_MEMBER(read_m) override { return read_ex(space, offset, mem_mask); }
- virtual DECLARE_WRITE8_MEMBER(write_l) override { write_ex(space, offset, data, mem_mask); }
- virtual DECLARE_WRITE8_MEMBER(write_m) override { write_ex(space, offset, data, mem_mask); }
+ virtual uint8_t read_ex(offs_t offset) override;
+ virtual void write_ex(offs_t offset, uint8_t data) override;
+ virtual uint8_t read_l(offs_t offset) override { return read_ex(offset); }
+ virtual uint8_t read_m(offs_t offset) override { return read_ex(offset); }
+ virtual void write_l(offs_t offset, uint8_t data) override { write_ex(offset, data); }
+ virtual void write_m(offs_t offset, uint8_t data) override { write_ex(offset, data); }
virtual void pcb_reset() override;
@@ -281,8 +281,8 @@ public:
nes_txc_tw_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override { write_l(space, offset & 0xff, data, mem_mask); } // offset does not really count for this mapper }
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_m(offs_t offset, uint8_t data) override { write_l(offset & 0xff, data); } // offset does not really count for this mapper }
virtual void prg_cb(int start, int bank) override;
};
@@ -296,7 +296,7 @@ public:
nes_kof97_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
};
@@ -308,9 +308,9 @@ public:
// construction/destruction
nes_kof96_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override; // offset does not really count for this mapper
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override; // offset does not really count for this mapper
virtual void prg_cb(int start, int bank) override;
virtual void chr_cb(int start, int bank, int source) override;
@@ -334,7 +334,7 @@ public:
nes_sf3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
protected:
virtual void set_chr(uint8_t chr, int chr_base, int chr_mask) override;
@@ -349,8 +349,8 @@ public:
// construction/destruction
nes_gouder_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
virtual void prg_cb(int start, int bank) override;
virtual void pcb_reset() override;
@@ -372,7 +372,7 @@ public:
// construction/destruction
nes_sa9602b_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void prg_cb(int start, int bank) override;
virtual void pcb_reset() override;
@@ -395,8 +395,8 @@ public:
// construction/destruction
nes_sachen_shero_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
virtual void chr_cb(int start, int bank, int source) override;
virtual void pcb_reset() override;
@@ -418,7 +418,7 @@ public:
// construction/destruction
nes_a9746_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset();
@@ -441,8 +441,8 @@ public:
// construction/destruction
nes_fk23c_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void prg_cb(int start, int bank) override;
virtual void chr_cb(int start, int bank, int source) override;
@@ -481,7 +481,7 @@ public:
// construction/destruction
nes_s24in1sc03_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
virtual void prg_cb(int start, int bank) override;
virtual void chr_cb(int start, int bank, int source) override;
@@ -505,7 +505,7 @@ public:
nes_bmc_15in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
};
@@ -520,7 +520,7 @@ public:
nes_bmc_sbig7_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
};
@@ -534,7 +534,7 @@ public:
// construction/destruction
nes_bmc_hik8_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -557,7 +557,7 @@ public:
nes_bmc_hik4_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
};
@@ -571,7 +571,7 @@ public:
// construction/destruction
nes_bmc_mario7in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -592,7 +592,7 @@ public:
// construction/destruction
nes_bmc_gold7in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -613,8 +613,8 @@ public:
// construction/destruction
nes_bmc_gc6in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void prg_cb(int start, int bank) override;
virtual void chr_cb(int start, int bank, int source) override;
@@ -637,7 +637,7 @@ public:
// construction/destruction
nes_bmc_411120c_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void prg_cb(int start, int bank) override;
virtual void chr_cb(int start, int bank, int source) override;
@@ -660,7 +660,7 @@ public:
// construction/destruction
nes_bmc_830118c_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void prg_cb(int start, int bank) override;
virtual void chr_cb(int start, int bank, int source) override;
@@ -683,7 +683,7 @@ public:
// construction/destruction
nes_pjoy84_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void prg_cb(int start, int bank) override;
virtual void chr_cb(int start, int bank, int source) override;
@@ -707,7 +707,7 @@ public:
nes_coolboy_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void prg_cb(int start, int bank) override;
virtual void chr_cb(int start, int bank, int source) override;
diff --git a/src/devices/bus/nes/mmc5.cpp b/src/devices/bus/nes/mmc5.cpp
index 681b9491ef2..b512f914e8b 100644
--- a/src/devices/bus/nes/mmc5.cpp
+++ b/src/devices/bus/nes/mmc5.cpp
@@ -287,7 +287,7 @@ inline bool nes_exrom_device::in_split()
return false;
}
-READ8_MEMBER(nes_exrom_device::nt_r)
+uint8_t nes_exrom_device::nt_r(offs_t offset)
{
int page = ((offset & 0xc00) >> 10);
@@ -339,7 +339,7 @@ READ8_MEMBER(nes_exrom_device::nt_r)
}
}
-WRITE8_MEMBER(nes_exrom_device::nt_w)
+void nes_exrom_device::nt_w(offs_t offset, uint8_t data)
{
int page = ((offset & 0xc00) >> 10);
@@ -397,7 +397,7 @@ inline uint8_t nes_exrom_device::bg_ex1_chr_r(uint32_t offset)
return m_vrom[helper & (m_vrom_size - 1)];
}
-READ8_MEMBER(nes_exrom_device::chr_r)
+uint8_t nes_exrom_device::chr_r(offs_t offset)
{
int bank = offset >> 10;
@@ -425,7 +425,7 @@ READ8_MEMBER(nes_exrom_device::chr_r)
}
-READ8_MEMBER(nes_exrom_device::read_l)
+uint8_t nes_exrom_device::read_l(offs_t offset)
{
int value;
LOG_MMC(("exrom read_l, offset: %04x\n", offset));
@@ -437,7 +437,7 @@ READ8_MEMBER(nes_exrom_device::read_l)
if (BIT(m_exram_control, 1)) // Modes 2,3 = read
return m_exram[offset - 0x1c00];
else
- return m_open_bus; // Modes 0,1 = open bus
+ return get_open_bus(); // Modes 0,1 = open bus
}
switch (offset)
@@ -455,12 +455,12 @@ READ8_MEMBER(nes_exrom_device::read_l)
default:
logerror("MMC5 uncaught read, offset: %04x\n", offset + 0x4100);
- return m_open_bus;
+ return get_open_bus();
}
}
-WRITE8_MEMBER(nes_exrom_device::write_l)
+void nes_exrom_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("exrom write_l, offset: %04x, data: %02x\n", offset, data));
offset += 0x100;
@@ -618,7 +618,7 @@ WRITE8_MEMBER(nes_exrom_device::write_l)
// bit3 select the chip (2 of them can be accessed, each up to 32KB)
// bit1 & bit2 select the 8KB banks inside the chip
// same mechanism is used also when "WRAM" is mapped in higher banks
-READ8_MEMBER(nes_exrom_device::read_m)
+uint8_t nes_exrom_device::read_m(offs_t offset)
{
LOG_MMC(("exrom read_m, offset: %04x\n", offset));
if (!m_battery.empty() && !m_prgram.empty()) // 2 chips present: first is BWRAM, second is WRAM
@@ -633,10 +633,10 @@ READ8_MEMBER(nes_exrom_device::read_m)
else if (!m_battery.empty()) // 1 chip, BWRAM
return m_battery[(offset + (m_wram_base & 0x03) * 0x2000) & (m_battery.size() - 1)];
else
- return m_open_bus;
+ return get_open_bus();
}
-WRITE8_MEMBER(nes_exrom_device::write_m)
+void nes_exrom_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("exrom write_m, offset: %04x, data: %02x\n", offset, data));
if (m_wram_protect_1 != 0x02 || m_wram_protect_2 != 0x01)
@@ -649,7 +649,7 @@ WRITE8_MEMBER(nes_exrom_device::write_m)
}
// some games (e.g. Bandit Kings of Ancient China) write to PRG-RAM through 0x8000-0xdfff
-READ8_MEMBER(nes_exrom_device::read_h)
+uint8_t nes_exrom_device::read_h(offs_t offset)
{
LOG_MMC(("exrom read_h, offset: %04x\n", offset));
int bank = offset / 0x2000;
@@ -665,7 +665,7 @@ READ8_MEMBER(nes_exrom_device::read_h)
return hi_access_rom(offset);
}
-WRITE8_MEMBER(nes_exrom_device::write_h)
+void nes_exrom_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("exrom write_h, offset: %04x, data: %02x\n", offset, data));
int bank = offset / 0x2000;
diff --git a/src/devices/bus/nes/mmc5.h b/src/devices/bus/nes/mmc5.h
index c0c07cb07a9..093a64471d0 100644
--- a/src/devices/bus/nes/mmc5.h
+++ b/src/devices/bus/nes/mmc5.h
@@ -20,16 +20,16 @@ public:
nes_exrom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
~nes_exrom_device();
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
-
- virtual DECLARE_READ8_MEMBER(chr_r) override;
- virtual DECLARE_READ8_MEMBER(nt_r) override;
- virtual DECLARE_WRITE8_MEMBER(nt_w) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
+
+ virtual uint8_t chr_r(offs_t offset) override;
+ virtual uint8_t nt_r(offs_t offset) override;
+ virtual void nt_w(offs_t offset, uint8_t data) override;
virtual void hblank_irq(int scanline, int vblank, int blanked) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/multigame.cpp b/src/devices/bus/nes/multigame.cpp
index 6971e68ac61..c117520afe5 100644
--- a/src/devices/bus/nes/multigame.cpp
+++ b/src/devices/bus/nes/multigame.cpp
@@ -1016,7 +1016,7 @@ void nes_bmc_42in1reset_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_action52_device::write_h)
+void nes_action52_device::write_h(offs_t offset, uint8_t data)
{
uint8_t pmode = offset & 0x20;
int pbank = (offset & 0x1fc0) >> 6;
@@ -1048,7 +1048,7 @@ WRITE8_MEMBER(nes_action52_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_caltron_device::write_m)
+void nes_caltron_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("caltron write_m, offset: %04x, data: %02x\n", offset, data));
@@ -1057,7 +1057,7 @@ WRITE8_MEMBER(nes_caltron_device::write_m)
prg32(offset & 0x07);
}
-WRITE8_MEMBER(nes_caltron_device::write_h)
+void nes_caltron_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("caltron write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1077,7 +1077,7 @@ WRITE8_MEMBER(nes_caltron_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_rumblestat_device::write_m)
+void nes_rumblestat_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("rumblestation write_m, offset: %04x, data: %02x\n", offset, data));
@@ -1087,7 +1087,7 @@ WRITE8_MEMBER(nes_rumblestat_device::write_m)
chr8(m_chr, CHRROM);
}
-WRITE8_MEMBER(nes_rumblestat_device::write_h)
+void nes_rumblestat_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("rumblestation write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1129,14 +1129,14 @@ void nes_svision16_device::update_prg()
}
-READ8_MEMBER(nes_svision16_device::read_m)
+uint8_t nes_svision16_device::read_m(offs_t offset)
{
int bank = (((m_latch1 & 0x0f) << 4) | 0x0f) + 4 ; // +4 due to the eeprom
LOG_MMC(("svision16 read_m, offset: %04x\n", offset));
return m_prg[((bank * 0x2000) + (offset & 0x1fff)) & m_prg_mask];
}
-WRITE8_MEMBER(nes_svision16_device::write_m)
+void nes_svision16_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("svision16 write_m, offset: %04x, data: %02x\n", offset, data));
@@ -1145,7 +1145,7 @@ WRITE8_MEMBER(nes_svision16_device::write_m)
set_nt_mirroring(BIT(data, 5) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
}
-WRITE8_MEMBER(nes_svision16_device::write_h)
+void nes_svision16_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("svision16 write_h, offset: %04x, data: %02x\n", offset, data));
m_latch2 = data;
@@ -1175,7 +1175,7 @@ void nes_n625092_device::set_prg(uint8_t reg1, uint8_t reg2)
prg16_cdef(helper2 | ((reg1 & 0x70) >> 1));
}
-WRITE8_MEMBER(nes_n625092_device::write_h)
+void nes_n625092_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("n625092 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1213,7 +1213,7 @@ WRITE8_MEMBER(nes_n625092_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_a65as_device::write_h)
+void nes_a65as_device::write_h(offs_t offset, uint8_t data)
{
uint8_t helper = (data & 0x30) >> 1;
LOG_MMC(("a65as write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1242,7 +1242,7 @@ WRITE8_MEMBER(nes_a65as_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_t262_device::write_h)
+void nes_t262_device::write_h(offs_t offset, uint8_t data)
{
uint8_t mmc_helper;
LOG_MMC(("t262 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1281,7 +1281,7 @@ WRITE8_MEMBER(nes_t262_device::write_h)
-------------------------------------------------*/
// Are this correct or should they work the same?
-WRITE8_MEMBER(nes_novel1_device::write_h)
+void nes_novel1_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("novel1 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1289,7 +1289,7 @@ WRITE8_MEMBER(nes_novel1_device::write_h)
chr8(offset & 0x07, CHRROM);
}
-WRITE8_MEMBER(nes_novel2_device::write_h)
+void nes_novel2_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("novel2 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1311,7 +1311,7 @@ WRITE8_MEMBER(nes_novel2_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_studyngame_device::write_h)
+void nes_studyngame_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("studyngame write_h, offset: %04x, data: %02x\n", offset, data));
prg32(data);
@@ -1330,7 +1330,7 @@ WRITE8_MEMBER(nes_studyngame_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_sgun20in1_device::write_h)
+void nes_sgun20in1_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("supergun20in1 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1345,7 +1345,7 @@ WRITE8_MEMBER(nes_sgun20in1_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_vt5201_device::write_h)
+void nes_vt5201_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("vt5201 wirte_h, offset: %04x, data: %02x\n", offset, data));
@@ -1364,7 +1364,7 @@ WRITE8_MEMBER(nes_vt5201_device::write_h)
chr8(offset, CHRROM);
}
-READ8_MEMBER(nes_vt5201_device::read_h)
+uint8_t nes_vt5201_device::read_h(offs_t offset)
{
LOG_MMC(("bmc_vt5201 read_h, offset: %04x\n", offset));
// m_dipsetting = ioport("CARTDIPS")->read();
@@ -1383,7 +1383,7 @@ READ8_MEMBER(nes_vt5201_device::read_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_810544c_device::write_h)
+void nes_810544c_device::write_h(offs_t offset, uint8_t data)
{
uint8_t bank = (offset >> 7);
LOG_MMC(("810544 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1407,7 +1407,7 @@ WRITE8_MEMBER(nes_810544c_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_ntd03_device::write_h)
+void nes_ntd03_device::write_h(offs_t offset, uint8_t data)
{
uint8_t pbank = (offset >> 10) & 0x1e;
uint8_t cbank = ((offset & 0x300) >> 5) | (offset & 0x07);
@@ -1434,7 +1434,7 @@ WRITE8_MEMBER(nes_ntd03_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_gb63_device::chr_w)
+void nes_bmc_gb63_device::chr_w(offs_t offset, uint8_t data)
{
int bank = offset >> 10;
@@ -1459,7 +1459,7 @@ void nes_bmc_gb63_device::update_banks()
// m_vram_disable = BIT(m_reg[1], 1) ? 0 : 1;
}
-WRITE8_MEMBER(nes_bmc_gb63_device::write_h)
+void nes_bmc_gb63_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc_gb63 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1468,13 +1468,13 @@ WRITE8_MEMBER(nes_bmc_gb63_device::write_h)
update_banks();
}
-READ8_MEMBER(nes_bmc_gb63_device::read_h)
+uint8_t nes_bmc_gb63_device::read_h(offs_t offset)
{
LOG_MMC(("bmc_gb63 read_h, offset: %04x\n", offset));
// m_dipsetting = ioport("CARTDIPS")->read();
if (m_latch == 1)
- return m_open_bus; // open bus
+ return get_open_bus(); // open bus
else
return hi_access_rom(offset);
}
@@ -1493,7 +1493,7 @@ READ8_MEMBER(nes_bmc_gb63_device::read_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_gka_device::write_h)
+void nes_bmc_gka_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc_gka write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1529,7 +1529,7 @@ WRITE8_MEMBER(nes_bmc_gka_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_gkb_device::write_h)
+void nes_bmc_gkb_device::write_h(offs_t offset, uint8_t data)
{
uint8_t bank = (offset & 0x40) ? 0 : 1;
LOG_MMC(("bmc_gkb write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1551,7 +1551,7 @@ WRITE8_MEMBER(nes_bmc_gkb_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_ws_device::write_m)
+void nes_bmc_ws_device::write_m(offs_t offset, uint8_t data)
{
uint8_t mmc_helper;
LOG_MMC(("bmc_ws write_m, offset: %04x, data: %02x\n", offset, data));
@@ -1588,7 +1588,7 @@ WRITE8_MEMBER(nes_bmc_ws_device::write_m)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_11160_device::write_h)
+void nes_bmc_11160_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc_11160 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1607,7 +1607,7 @@ WRITE8_MEMBER(nes_bmc_11160_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_g146_device::write_h)
+void nes_bmc_g146_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc_g146 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1640,7 +1640,7 @@ WRITE8_MEMBER(nes_bmc_g146_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_8157_device::write_h)
+void nes_bmc_8157_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc_8157 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1653,7 +1653,7 @@ WRITE8_MEMBER(nes_bmc_8157_device::write_h)
set_nt_mirroring(!BIT(offset, 1) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
}
-READ8_MEMBER(nes_bmc_8157_device::read_h)
+uint8_t nes_bmc_8157_device::read_h(offs_t offset)
{
LOG_MMC(("bmc_8157 read_h, offset: %04x\n", offset));
// m_dipsetting = ioport("CARTDIPS")->read();
@@ -1678,7 +1678,7 @@ READ8_MEMBER(nes_bmc_8157_device::read_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_hik300_device::write_h)
+void nes_bmc_hik300_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc_hik300 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1707,7 +1707,7 @@ WRITE8_MEMBER(nes_bmc_hik300_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_s700_device::write_h)
+void nes_bmc_s700_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc_s700 write_h, offset :%04x, data: %02x\n", offset, data));
@@ -1754,7 +1754,7 @@ void nes_bmc_ball11_device::set_banks()
}
}
-WRITE8_MEMBER(nes_bmc_ball11_device::write_m)
+void nes_bmc_ball11_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc_ball11 write_m, offset: %04x, data: %02x\n", offset, data));
@@ -1762,7 +1762,7 @@ WRITE8_MEMBER(nes_bmc_ball11_device::write_m)
set_banks();
}
-WRITE8_MEMBER(nes_bmc_ball11_device::write_h)
+void nes_bmc_ball11_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc_ball11 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1793,7 +1793,7 @@ WRITE8_MEMBER(nes_bmc_ball11_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_22games_device::write_h)
+void nes_bmc_22games_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc_22games write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1846,7 +1846,7 @@ void nes_bmc_64y2k_device::set_prg()
prg16_cdef(helper2);
}
-WRITE8_MEMBER(nes_bmc_64y2k_device::write_l)
+void nes_bmc_64y2k_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc64y2k write_l, offset: %04x, data: %02x\n", offset, data));
offset += 0x100;
@@ -1866,7 +1866,7 @@ WRITE8_MEMBER(nes_bmc_64y2k_device::write_l)
set_nt_mirroring(BIT(data, 5) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
}
-WRITE8_MEMBER(nes_bmc_64y2k_device::write_h)
+void nes_bmc_64y2k_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc64y2k write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1904,7 +1904,7 @@ void nes_bmc_12in1_device::update_banks()
set_nt_mirroring(BIT(m_reg[2], 2) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
}
-WRITE8_MEMBER(nes_bmc_12in1_device::write_h)
+void nes_bmc_12in1_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc_12in1 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1930,7 +1930,7 @@ WRITE8_MEMBER(nes_bmc_12in1_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_20in1_device::write_h)
+void nes_bmc_20in1_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc_20in1 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1953,7 +1953,7 @@ WRITE8_MEMBER(nes_bmc_20in1_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_21in1_device::write_h)
+void nes_bmc_21in1_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc_21in1 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1974,7 +1974,7 @@ WRITE8_MEMBER(nes_bmc_21in1_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_31in1_device::write_h)
+void nes_bmc_31in1_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc_31in1 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -2006,7 +2006,7 @@ WRITE8_MEMBER(nes_bmc_31in1_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_35in1_device::write_h)
+void nes_bmc_35in1_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc_35in1 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -2028,7 +2028,7 @@ WRITE8_MEMBER(nes_bmc_35in1_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_36in1_device::write_h)
+void nes_bmc_36in1_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc_36in1 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -2052,7 +2052,7 @@ WRITE8_MEMBER(nes_bmc_36in1_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_64in1_device::write_h)
+void nes_bmc_64in1_device::write_h(offs_t offset, uint8_t data)
{
int bank = (offset >> 1) & (offset >> 2) & 0x01;
@@ -2082,7 +2082,7 @@ WRITE8_MEMBER(nes_bmc_64in1_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_70in1_device::write_h)
+void nes_bmc_70in1_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc70in1 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -2105,7 +2105,7 @@ WRITE8_MEMBER(nes_bmc_70in1_device::write_h)
}
}
-READ8_MEMBER(nes_bmc_70in1_device::read_h)
+uint8_t nes_bmc_70in1_device::read_h(offs_t offset)
{
LOG_MMC(("bmc70in1 read_h, offset: %04x\n", offset));
@@ -2128,7 +2128,7 @@ READ8_MEMBER(nes_bmc_70in1_device::read_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_72in1_device::write_h)
+void nes_bmc_72in1_device::write_h(offs_t offset, uint8_t data)
{
int hi_bank = offset & 0x40;
int size_16 = offset & 0x1000;
@@ -2165,7 +2165,7 @@ WRITE8_MEMBER(nes_bmc_72in1_device::write_h)
-------------------------------------------------*/
// does this work for super42in1 as well?!?
-WRITE8_MEMBER(nes_bmc_76in1_device::write_h)
+void nes_bmc_76in1_device::write_h(offs_t offset, uint8_t data)
{
int hi_bank;
int size_16;
@@ -2210,7 +2210,7 @@ WRITE8_MEMBER(nes_bmc_76in1_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_110in1_device::write_h)
+void nes_bmc_110in1_device::write_h(offs_t offset, uint8_t data)
{
uint8_t helper1 = (offset >> 12) ? 0 : 1;
uint8_t helper2 = ((offset >> 8) & 0x40) | ((offset >> 6) & 0x3f);
@@ -2237,7 +2237,7 @@ WRITE8_MEMBER(nes_bmc_110in1_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_150in1_device::write_h)
+void nes_bmc_150in1_device::write_h(offs_t offset, uint8_t data)
{
int bank = (offset >> 1) & 0x07;
@@ -2261,7 +2261,7 @@ WRITE8_MEMBER(nes_bmc_150in1_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_190in1_device::write_h)
+void nes_bmc_190in1_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc190in1 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -2287,7 +2287,7 @@ WRITE8_MEMBER(nes_bmc_190in1_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_800in1_device::write_h)
+void nes_bmc_800in1_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc800in1 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -2312,7 +2312,7 @@ WRITE8_MEMBER(nes_bmc_800in1_device::write_h)
prg16_cdef(m_reg[1]);
}
-READ8_MEMBER(nes_bmc_800in1_device::read_h)
+uint8_t nes_bmc_800in1_device::read_h(offs_t offset)
{
LOG_MMC(("bmc800in1 read_h, offset: %04x\n", offset));
@@ -2335,7 +2335,7 @@ READ8_MEMBER(nes_bmc_800in1_device::read_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_1200in1_device::chr_w)
+void nes_bmc_1200in1_device::chr_w(offs_t offset, uint8_t data)
{
int bank = offset >> 10;
@@ -2344,7 +2344,7 @@ WRITE8_MEMBER(nes_bmc_1200in1_device::chr_w)
}
-WRITE8_MEMBER(nes_bmc_1200in1_device::write_h)
+void nes_bmc_1200in1_device::write_h(offs_t offset, uint8_t data)
{
int bank = ((offset >> 2) & 0x1f) | ((offset & 0x0100) >> 3);
@@ -2390,7 +2390,7 @@ WRITE8_MEMBER(nes_bmc_1200in1_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_gold260_device::write_h)
+void nes_bmc_gold260_device::write_h(offs_t offset, uint8_t data)
{
int bank = (offset & 0x1f) | ((offset & 0x0300) >> 3);
LOG_MMC(("bmc_gold260 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -2428,7 +2428,7 @@ WRITE8_MEMBER(nes_bmc_gold260_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_gold150_device::write_h)
+void nes_bmc_gold150_device::write_h(offs_t offset, uint8_t data)
{
int bank = (offset & 0x1f) | ((offset & 0x0200) >> 4);
LOG_MMC(("bmc_gold150 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -2450,12 +2450,12 @@ WRITE8_MEMBER(nes_bmc_gold150_device::write_h)
prg32(bank);
}
-READ8_MEMBER(nes_bmc_gold150_device::read_h)
+uint8_t nes_bmc_gold150_device::read_h(offs_t offset)
{
LOG_MMC(("bmc_gold150 read_h, offset: %04x\n", offset));
if (m_latch) // open bus
- return m_open_bus;
+ return get_open_bus();
else
return hi_access_rom(offset);
}
@@ -2475,7 +2475,7 @@ READ8_MEMBER(nes_bmc_gold150_device::read_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_ch001_device::write_h)
+void nes_bmc_ch001_device::write_h(offs_t offset, uint8_t data)
{
int bank = ((offset >> 1) & 0x1fc);
LOG_MMC(("bmc_ch001 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -2503,12 +2503,12 @@ WRITE8_MEMBER(nes_bmc_ch001_device::write_h)
prg8_ef((offset & 0x07c ) | ((offset & 0x6) ? 0x3 : 0x1));
}
-READ8_MEMBER(nes_bmc_ch001_device::read_h)
+uint8_t nes_bmc_ch001_device::read_h(offs_t offset)
{
LOG_MMC(("bmc_ch001 read_h, offset: %04x\n", offset));
if (m_latch && offset < 0x4000) // open bus
- return m_open_bus;
+ return get_open_bus();
else
return hi_access_rom(offset);
}
@@ -2528,7 +2528,7 @@ READ8_MEMBER(nes_bmc_ch001_device::read_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_super22_device::write_h)
+void nes_bmc_super22_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("bmc_super22 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -2581,7 +2581,7 @@ WRITE8_MEMBER(nes_bmc_super22_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bmc_42in1reset_device::write_h)
+void nes_bmc_42in1reset_device::write_h(offs_t offset, uint8_t data)
{
int bank;
LOG_MMC(("bmc_42in1reset write_h, offset: %04x, data: %02x\n", offset, data));
diff --git a/src/devices/bus/nes/multigame.h b/src/devices/bus/nes/multigame.h
index e88ec21be58..51db3e9f821 100644
--- a/src/devices/bus/nes/multigame.h
+++ b/src/devices/bus/nes/multigame.h
@@ -16,7 +16,7 @@ public:
// construction/destruction
nes_action52_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -34,8 +34,8 @@ public:
// construction/destruction
nes_caltron_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -56,8 +56,8 @@ public:
// construction/destruction
nes_rumblestat_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -78,9 +78,9 @@ public:
// construction/destruction
nes_svision16_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -102,7 +102,7 @@ public:
// construction/destruction
nes_n625092_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -124,7 +124,7 @@ public:
// construction/destruction
nes_a65as_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -142,7 +142,7 @@ public:
// construction/destruction
nes_t262_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -163,7 +163,7 @@ public:
// construction/destruction
nes_novel1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -181,7 +181,7 @@ public:
// construction/destruction
nes_novel2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -199,7 +199,7 @@ public:
// construction/destruction
nes_studyngame_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -217,7 +217,7 @@ public:
// construction/destruction
nes_sgun20in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -235,8 +235,8 @@ public:
// construction/destruction
nes_vt5201_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -257,7 +257,7 @@ public:
// construction/destruction
nes_810544c_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -275,7 +275,7 @@ public:
// construction/destruction
nes_ntd03_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -293,9 +293,9 @@ public:
// construction/destruction
nes_bmc_gb63_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
- virtual DECLARE_WRITE8_MEMBER(chr_w) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
+ virtual void chr_w(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -318,7 +318,7 @@ public:
// construction/destruction
nes_bmc_gka_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -339,7 +339,7 @@ public:
// construction/destruction
nes_bmc_gkb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -357,7 +357,7 @@ public:
// construction/destruction
nes_bmc_ws_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -378,7 +378,7 @@ public:
// construction/destruction
nes_bmc_11160_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -396,7 +396,7 @@ public:
// construction/destruction
nes_bmc_g146_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -414,8 +414,8 @@ public:
// construction/destruction
nes_bmc_8157_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -433,7 +433,7 @@ public:
// construction/destruction
nes_bmc_hik300_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -451,7 +451,7 @@ public:
// construction/destruction
nes_bmc_s700_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -469,8 +469,8 @@ public:
// construction/destruction
nes_bmc_ball11_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -492,7 +492,7 @@ public:
// construction/destruction
nes_bmc_22games_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -510,8 +510,8 @@ public:
// construction/destruction
nes_bmc_64y2k_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -533,7 +533,7 @@ public:
// construction/destruction
nes_bmc_12in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -555,7 +555,7 @@ public:
// construction/destruction
nes_bmc_20in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -573,7 +573,7 @@ public:
// construction/destruction
nes_bmc_21in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -591,7 +591,7 @@ public:
// construction/destruction
nes_bmc_31in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -609,7 +609,7 @@ public:
// construction/destruction
nes_bmc_35in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -627,7 +627,7 @@ public:
// construction/destruction
nes_bmc_36in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -645,7 +645,7 @@ public:
// construction/destruction
nes_bmc_64in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -663,8 +663,8 @@ public:
// construction/destruction
nes_bmc_70in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -686,7 +686,7 @@ public:
// construction/destruction
nes_bmc_72in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -704,7 +704,7 @@ public:
// construction/destruction
nes_bmc_76in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -725,7 +725,7 @@ public:
// construction/destruction
nes_bmc_110in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -743,7 +743,7 @@ public:
// construction/destruction
nes_bmc_150in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -761,7 +761,7 @@ public:
// construction/destruction
nes_bmc_190in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -779,8 +779,8 @@ public:
// construction/destruction
nes_bmc_800in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -802,8 +802,8 @@ public:
// construction/destruction
nes_bmc_1200in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
- virtual DECLARE_WRITE8_MEMBER(chr_w) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
+ virtual void chr_w(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -824,8 +824,8 @@ public:
// construction/destruction
nes_bmc_gold150_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -846,7 +846,7 @@ public:
// construction/destruction
nes_bmc_gold260_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -864,8 +864,8 @@ public:
// construction/destruction
nes_bmc_ch001_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -886,7 +886,7 @@ public:
// construction/destruction
nes_bmc_super22_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -922,7 +922,7 @@ public:
// construction/destruction
nes_bmc_42in1reset_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/namcot.cpp b/src/devices/bus/nes/namcot.cpp
index 84b41996272..e2898d6b9ba 100644
--- a/src/devices/bus/nes/namcot.cpp
+++ b/src/devices/bus/nes/namcot.cpp
@@ -246,7 +246,7 @@ void nes_namcot163_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_namcot3433_device::dxrom_write)
+void nes_namcot3433_device::dxrom_write(offs_t offset, uint8_t data)
{
LOG_MMC(("dxrom_write, offset: %04x, data: %02x\n", offset, data));
@@ -290,7 +290,7 @@ WRITE8_MEMBER(nes_namcot3433_device::dxrom_write)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_namcot3446_device::write_h)
+void nes_namcot3446_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("namcot3446 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -334,7 +334,7 @@ WRITE8_MEMBER(nes_namcot3446_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_namcot3425_device::write_h)
+void nes_namcot3425_device::write_h(offs_t offset, uint8_t data)
{
uint8_t mode;
LOG_MMC(("namcot3425 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -407,7 +407,7 @@ void nes_namcot340_device::device_timer(emu_timer &timer, device_timer_id id, in
}
}
-WRITE8_MEMBER(nes_namcot340_device::n340_lowrite)
+void nes_namcot340_device::n340_lowrite(offs_t offset, uint8_t data)
{
LOG_MMC(("n340_lowrite, offset: %04x, data: %02x\n", offset, data));
offset += 0x100;
@@ -426,7 +426,7 @@ WRITE8_MEMBER(nes_namcot340_device::n340_lowrite)
}
}
-READ8_MEMBER(nes_namcot340_device::n340_loread)
+uint8_t nes_namcot340_device::n340_loread(offs_t offset)
{
LOG_MMC(("n340_loread, offset: %04x\n", offset));
offset += 0x100;
@@ -444,7 +444,7 @@ READ8_MEMBER(nes_namcot340_device::n340_loread)
}
}
-WRITE8_MEMBER(nes_namcot340_device::n340_hiwrite)
+void nes_namcot340_device::n340_hiwrite(offs_t offset, uint8_t data)
{
LOG_MMC(("n340_hiwrite, offset: %04x, data: %02x\n", offset, data));
@@ -505,17 +505,17 @@ WRITE8_MEMBER(nes_namcot340_device::n340_hiwrite)
-------------------------------------------------*/
-READ8_MEMBER(nes_namcot175_device::read_m)
+uint8_t nes_namcot175_device::read_m(offs_t offset)
{
// the only game supporting this is Family Circuit '91, and it has 2KB of battery
// but it's mirrored up to 8KB (see Sprint Race -> Back Up menu breakage if not)
if (!m_battery.empty() && !m_wram_protect)
return m_battery[offset & (m_battery.size() - 1)];
- return m_open_bus; // open bus
+ return get_open_bus(); // open bus
}
-WRITE8_MEMBER(nes_namcot175_device::write_m)
+void nes_namcot175_device::write_m(offs_t offset, uint8_t data)
{
// the only game supporting this is Family Circuit '91, and it has 2KB of battery
// but it's mirrored up to 8KB (see Sprint Race -> Back Up menu breakage if not)
@@ -523,7 +523,7 @@ WRITE8_MEMBER(nes_namcot175_device::write_m)
m_battery[offset & (m_battery.size() - 1)] = data;
}
-WRITE8_MEMBER(nes_namcot175_device::write_h)
+void nes_namcot175_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("namcot175 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -536,7 +536,7 @@ WRITE8_MEMBER(nes_namcot175_device::write_h)
prg8_89(data & 0x3f);
break;
default:
- n340_hiwrite(space, offset, data, mem_mask);
+ n340_hiwrite(offset, data);
break;
}
}
@@ -560,7 +560,7 @@ WRITE8_MEMBER(nes_namcot175_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_namcot163_device::chr_w)
+void nes_namcot163_device::chr_w(offs_t offset, uint8_t data)
{
int bank = offset >> 10;
@@ -576,7 +576,7 @@ WRITE8_MEMBER(nes_namcot163_device::chr_w)
// or ROM, so no write
}
-READ8_MEMBER(nes_namcot163_device::chr_r)
+uint8_t nes_namcot163_device::chr_r(offs_t offset)
{
int bank = offset >> 10;
if (!(m_latch & 0x40) && m_chr_bank >= 0xe0)
@@ -590,15 +590,15 @@ READ8_MEMBER(nes_namcot163_device::chr_r)
}
-READ8_MEMBER(nes_namcot163_device::read_m)
+uint8_t nes_namcot163_device::read_m(offs_t offset)
{
if (!m_battery.empty() && offset < m_battery.size())
return m_battery[offset & (m_battery.size() - 1)];
- return m_open_bus; // open bus
+ return get_open_bus(); // open bus
}
-WRITE8_MEMBER(nes_namcot163_device::write_m)
+void nes_namcot163_device::write_m(offs_t offset, uint8_t data)
{
// the pcb can separately protect each 2KB chunk of the external wram from writes
int bank = (offset & 0x1800) >> 11;
@@ -606,7 +606,7 @@ WRITE8_MEMBER(nes_namcot163_device::write_m)
m_battery[offset & (m_battery.size() - 1)] = data;
}
-WRITE8_MEMBER(nes_namcot163_device::write_l)
+void nes_namcot163_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("namcot163 write_l, offset: %04x, data: %02x\n", offset, data));
offset += 0x100;
@@ -617,12 +617,12 @@ WRITE8_MEMBER(nes_namcot163_device::write_l)
LOG_MMC(("Namcot-163 sound reg write, data: %02x\n", data));
break;
default:
- n340_lowrite(space, offset, data, mem_mask);
+ n340_lowrite(offset, data);
break;
}
}
-READ8_MEMBER(nes_namcot163_device::read_l)
+uint8_t nes_namcot163_device::read_l(offs_t offset)
{
LOG_MMC(("namcot163 read_l, offset: %04x\n", offset));
offset += 0x100;
@@ -633,7 +633,7 @@ READ8_MEMBER(nes_namcot163_device::read_l)
LOG_MMC(("Namcot-163 sound reg read\n"));
return 0;
default:
- return n340_loread(space, offset, mem_mask);
+ return n340_loread(offset);
}
}
@@ -645,7 +645,7 @@ void nes_namcot163_device::set_mirror(uint8_t page, uint8_t data)
set_nt_page(page, CIRAM, data & 0x01, 1);
}
-WRITE8_MEMBER(nes_namcot163_device::write_h)
+void nes_namcot163_device::write_h(offs_t offset, uint8_t data)
{
int page;
LOG_MMC(("namcot163 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -680,7 +680,7 @@ WRITE8_MEMBER(nes_namcot163_device::write_h)
LOG_MMC(("Namcot-163 sound address write, data: %02x\n", data));
break;
default:
- n340_hiwrite(space, offset, data, mem_mask);
+ n340_hiwrite(offset, data);
break;
}
}
diff --git a/src/devices/bus/nes/namcot.h b/src/devices/bus/nes/namcot.h
index a4ab64084e1..bcf72f5bad4 100644
--- a/src/devices/bus/nes/namcot.h
+++ b/src/devices/bus/nes/namcot.h
@@ -16,8 +16,8 @@ public:
// construction/destruction
nes_namcot3433_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(dxrom_write);
- virtual DECLARE_WRITE8_MEMBER(write_h) override { dxrom_write(space, offset, data, mem_mask); }
+ void dxrom_write(offs_t offset, uint8_t data);
+ virtual void write_h(offs_t offset, uint8_t data) override { dxrom_write(offset, data); }
virtual void pcb_reset() override;
@@ -40,7 +40,7 @@ public:
// construction/destruction
nes_namcot3446_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -61,7 +61,7 @@ public:
// construction/destruction
nes_namcot3425_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -83,12 +83,12 @@ public:
// construction/destruction
nes_namcot340_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(n340_loread);
- virtual DECLARE_WRITE8_MEMBER(n340_lowrite);
- virtual DECLARE_WRITE8_MEMBER(n340_hiwrite);
- virtual DECLARE_READ8_MEMBER(read_l) override { return n340_loread(space, offset, mem_mask); }
- virtual DECLARE_WRITE8_MEMBER(write_l) override { n340_lowrite(space, offset, data, mem_mask); }
- virtual DECLARE_WRITE8_MEMBER(write_h) override { n340_hiwrite(space, offset, data, mem_mask); }
+ uint8_t n340_loread(offs_t offset);
+ void n340_lowrite(offs_t offset, uint8_t data);
+ void n340_hiwrite(offs_t offset, uint8_t data);
+ virtual uint8_t read_l(offs_t offset) override { return n340_loread(offset); }
+ virtual void write_l(offs_t offset, uint8_t data) override { n340_lowrite(offset, data); }
+ virtual void write_h(offs_t offset, uint8_t data) override { n340_hiwrite(offset, data); }
virtual void pcb_reset() override;
@@ -122,9 +122,9 @@ public:
// device-level overrides
virtual void device_start() override;
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -141,15 +141,15 @@ public:
// construction/destruction
nes_namcot163_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
// we have to overwrite these to allow CIRAM to be used for VRAM, even if it's not clear which game(s) use this
- virtual DECLARE_READ8_MEMBER(chr_r) override;
- virtual DECLARE_WRITE8_MEMBER(chr_w) override;
+ virtual uint8_t chr_r(offs_t offset) override;
+ virtual void chr_w(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/nanjing.cpp b/src/devices/bus/nes/nanjing.cpp
index 26a7e20f97c..9719816beb2 100644
--- a/src/devices/bus/nes/nanjing.cpp
+++ b/src/devices/bus/nes/nanjing.cpp
@@ -111,7 +111,7 @@ void nes_nanjing_device::hblank_irq(int scanline, int vblank, int blanked)
}
-WRITE8_MEMBER(nes_nanjing_device::write_l)
+void nes_nanjing_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("nanjing write_l, offset: %04x, data: %02x\n", offset, data));
@@ -154,7 +154,7 @@ WRITE8_MEMBER(nes_nanjing_device::write_l)
prg32((m_reg[0] & 0x0f) | ((m_reg[1] & 0x0f) << 4));
}
-READ8_MEMBER(nes_nanjing_device::read_l)
+uint8_t nes_nanjing_device::read_l(offs_t offset)
{
uint8_t value = 0;
LOG_MMC(("nanjing read_l, offset: %04x\n", offset));
diff --git a/src/devices/bus/nes/nanjing.h b/src/devices/bus/nes/nanjing.h
index a231872a124..c5a71032573 100644
--- a/src/devices/bus/nes/nanjing.h
+++ b/src/devices/bus/nes/nanjing.h
@@ -19,8 +19,8 @@ public:
nes_nanjing_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
~nes_nanjing_device();
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
virtual void hblank_irq(int scanline, int vblank, int blanked) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/nes_slot.cpp b/src/devices/bus/nes/nes_slot.cpp
index c3d036b8493..ab8235ccc55 100644
--- a/src/devices/bus/nes/nes_slot.cpp
+++ b/src/devices/bus/nes/nes_slot.cpp
@@ -592,6 +592,12 @@ void device_nes_cart_interface::reset_cpu()
m_maincpu->set_pc(0xfffc);
}
+void device_nes_cart_interface::poke(offs_t offset, uint8_t data)
+{
+ // even worse hack
+ m_maincpu->space(AS_PROGRAM).write_byte(offset, data);
+}
+
//-------------------------------------------------
// Other helpers
//-------------------------------------------------
@@ -624,7 +630,7 @@ uint8_t device_nes_cart_interface::account_bus_conflict(uint32_t offset, uint8_t
// PPU accessors
//-------------------------------------------------
-WRITE8_MEMBER(device_nes_cart_interface::chr_w)
+void device_nes_cart_interface::chr_w(offs_t offset, uint8_t data)
{
int bank = offset >> 10;
@@ -632,14 +638,14 @@ WRITE8_MEMBER(device_nes_cart_interface::chr_w)
m_chr_access[bank][offset & 0x3ff] = data;
}
-READ8_MEMBER(device_nes_cart_interface::chr_r)
+uint8_t device_nes_cart_interface::chr_r(offs_t offset)
{
int bank = offset >> 10;
return m_chr_access[bank][offset & 0x3ff];
}
-WRITE8_MEMBER(device_nes_cart_interface::nt_w)
+void device_nes_cart_interface::nt_w(offs_t offset, uint8_t data)
{
int page = ((offset & 0xc00) >> 10);
@@ -649,7 +655,7 @@ WRITE8_MEMBER(device_nes_cart_interface::nt_w)
m_nt_access[page][offset & 0x3ff] = data;
}
-READ8_MEMBER(device_nes_cart_interface::nt_r)
+uint8_t device_nes_cart_interface::nt_r(offs_t offset)
{
int page = ((offset & 0xc00) >> 10);
return m_nt_access[page][offset & 0x3ff];
@@ -665,26 +671,26 @@ READ8_MEMBER(device_nes_cart_interface::nt_r)
// source)
//-------------------------------------------------
-READ8_MEMBER(device_nes_cart_interface::read_l)
+uint8_t device_nes_cart_interface::read_l(offs_t offset)
{
- return m_open_bus;
+ return get_open_bus();
}
-READ8_MEMBER(device_nes_cart_interface::read_m)
+uint8_t device_nes_cart_interface::read_m(offs_t offset)
{
if (!m_battery.empty())
return m_battery[offset & (m_battery.size() - 1)];
if (!m_prgram.empty())
return m_prgram[offset & (m_prgram.size() - 1)];
- return m_open_bus;
+ return get_open_bus();
}
-WRITE8_MEMBER(device_nes_cart_interface::write_l)
+void device_nes_cart_interface::write_l(offs_t offset, uint8_t data)
{
}
-WRITE8_MEMBER(device_nes_cart_interface::write_m)
+void device_nes_cart_interface::write_m(offs_t offset, uint8_t data)
{
if (!m_battery.empty())
m_battery[offset & (m_battery.size() - 1)] = data;
@@ -692,7 +698,7 @@ WRITE8_MEMBER(device_nes_cart_interface::write_m)
m_prgram[offset & (m_prgram.size() - 1)] = data;
}
-WRITE8_MEMBER(device_nes_cart_interface::write_h)
+void device_nes_cart_interface::write_h(offs_t offset, uint8_t data)
{
}
@@ -740,6 +746,9 @@ void device_nes_cart_interface::pcb_start(running_machine &machine, uint8_t *cir
device().save_item(NAME(m_vram));
if (!m_battery.empty())
device().save_item(NAME(m_battery));
+
+ // open bus
+ device().save_item(NAME(m_open_bus));
}
void device_nes_cart_interface::pcb_reg_postload(running_machine &machine)
@@ -943,11 +952,11 @@ std::string nes_cart_slot_device::get_default_card_software(get_default_card_sof
read
-------------------------------------------------*/
-READ8_MEMBER(nes_cart_slot_device::read_l)
+uint8_t nes_cart_slot_device::read_l(offs_t offset)
{
if (m_cart)
{
- uint8_t val = m_cart->read_l(space, offset);
+ uint8_t val = m_cart->read_l(offset);
// update open bus
m_cart->set_open_bus(((offset + 0x4100) & 0xff00) >> 8);
return val;
@@ -956,11 +965,11 @@ READ8_MEMBER(nes_cart_slot_device::read_l)
return 0xff;
}
-READ8_MEMBER(nes_cart_slot_device::read_m)
+uint8_t nes_cart_slot_device::read_m(offs_t offset)
{
if (m_cart)
{
- uint8_t val = m_cart->read_m(space, offset);
+ uint8_t val = m_cart->read_m(offset);
// update open bus
m_cart->set_open_bus(((offset + 0x6000) & 0xff00) >> 8);
return val;
@@ -969,11 +978,11 @@ READ8_MEMBER(nes_cart_slot_device::read_m)
return 0xff;
}
-READ8_MEMBER(nes_cart_slot_device::read_h)
+uint8_t nes_cart_slot_device::read_h(offs_t offset)
{
if (m_cart)
{
- uint8_t val = m_cart->read_h(space, offset);
+ uint8_t val = m_cart->read_h(offset);
// update open bus
m_cart->set_open_bus(((offset + 0x8000) & 0xff00) >> 8);
return val;
@@ -982,11 +991,11 @@ READ8_MEMBER(nes_cart_slot_device::read_h)
return 0xff;
}
-READ8_MEMBER(nes_cart_slot_device::read_ex)
+uint8_t nes_cart_slot_device::read_ex(offs_t offset)
{
if (m_cart)
{
- uint8_t val = m_cart->read_ex(space, offset);
+ uint8_t val = m_cart->read_ex(offset);
// update open bus
m_cart->set_open_bus(((offset + 0x4020) & 0xff00) >> 8);
return val;
@@ -1000,41 +1009,41 @@ READ8_MEMBER(nes_cart_slot_device::read_ex)
write
-------------------------------------------------*/
-WRITE8_MEMBER(nes_cart_slot_device::write_l)
+void nes_cart_slot_device::write_l(offs_t offset, uint8_t data)
{
if (m_cart)
{
- m_cart->write_l(space, offset, data);
+ m_cart->write_l(offset, data);
// update open bus
m_cart->set_open_bus(((offset + 0x4100) & 0xff00) >> 8);
}
}
-WRITE8_MEMBER(nes_cart_slot_device::write_m)
+void nes_cart_slot_device::write_m(offs_t offset, uint8_t data)
{
if (m_cart)
{
- m_cart->write_m(space, offset, data);
+ m_cart->write_m(offset, data);
// update open bus
m_cart->set_open_bus(((offset + 0x6000) & 0xff00) >> 8);
}
}
-WRITE8_MEMBER(nes_cart_slot_device::write_h)
+void nes_cart_slot_device::write_h(offs_t offset, uint8_t data)
{
if (m_cart)
{
- m_cart->write_h(space, offset, data);
+ m_cart->write_h(offset, data);
// update open bus
m_cart->set_open_bus(((offset + 0x8000) & 0xff00) >> 8);
}
}
-WRITE8_MEMBER(nes_cart_slot_device::write_ex)
+void nes_cart_slot_device::write_ex(offs_t offset, uint8_t data)
{
if (m_cart)
{
- m_cart->write_ex(space, offset, data);
+ m_cart->write_ex(offset, data);
// update open bus
m_cart->set_open_bus(((offset + 0x4020) & 0xff00) >> 8);
}
diff --git a/src/devices/bus/nes/nes_slot.h b/src/devices/bus/nes/nes_slot.h
index b86dbfb1e41..952ffd74b1f 100644
--- a/src/devices/bus/nes/nes_slot.h
+++ b/src/devices/bus/nes/nes_slot.h
@@ -166,19 +166,19 @@ public:
virtual ~device_nes_cart_interface();
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_l);
- virtual DECLARE_READ8_MEMBER(read_m);
- virtual DECLARE_READ8_MEMBER(read_h) { return 0xff; }
- virtual DECLARE_READ8_MEMBER(read_ex) { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(write_l);
- virtual DECLARE_WRITE8_MEMBER(write_m);
- virtual DECLARE_WRITE8_MEMBER(write_h);
- virtual DECLARE_WRITE8_MEMBER(write_ex) { }
-
- virtual DECLARE_READ8_MEMBER(chr_r);
- virtual DECLARE_WRITE8_MEMBER(chr_w);
- virtual DECLARE_READ8_MEMBER(nt_r);
- virtual DECLARE_WRITE8_MEMBER(nt_w);
+ virtual uint8_t read_l(offs_t offset);
+ virtual uint8_t read_m(offs_t offset);
+ virtual uint8_t read_h(offs_t offset) { return 0xff; }
+ virtual uint8_t read_ex(offs_t offset) { return 0xff; }
+ virtual void write_l(offs_t offset, uint8_t data);
+ virtual void write_m(offs_t offset, uint8_t data);
+ virtual void write_h(offs_t offset, uint8_t data);
+ virtual void write_ex(offs_t offset, uint8_t data) { }
+
+ virtual uint8_t chr_r(offs_t offset);
+ virtual void chr_w(offs_t offset, uint8_t data);
+ virtual uint8_t nt_r(offs_t offset);
+ virtual void nt_w(offs_t offset, uint8_t data);
// hack until disk system is made modern!
virtual void disk_flip_side() { }
@@ -202,6 +202,7 @@ public:
void set_vrc_lines(int PRG_A, int PRG_B, int CHR) { m_vrc_ls_prg_a = PRG_A; m_vrc_ls_prg_b = PRG_B; m_vrc_ls_chr = CHR; }
void set_x1_005_alt(bool val) { m_x1_005_alt_mirroring = val; }
void set_bus_conflict(bool val) { m_bus_conflict = val; }
+ uint8_t get_open_bus() { return m_open_bus; }
void set_open_bus(uint8_t val) { m_open_bus = val; }
uint8_t *get_prg_base() { return m_prg; }
@@ -237,6 +238,7 @@ protected:
DECLARE_WRITE_LINE_MEMBER(set_irq_line);
void hold_irq_line();
void reset_cpu();
+ void poke(offs_t offset, uint8_t data);
// internal state
uint8_t *m_prg;
@@ -270,8 +272,10 @@ protected:
bool m_pcb_ctrl_mirror, m_four_screen_vram, m_has_trainer;
bool m_x1_005_alt_mirroring; // temp hack for two kind of mirroring in Taito X1-005 boards (to be replaced with pin checking)
bool m_bus_conflict;
+private:
uint8_t m_open_bus;
+public:
// PRG
inline int prg_8k_bank_num(int bank);
inline void update_prg_banks(int prg_bank_start, int prg_bank_end);
@@ -388,14 +392,14 @@ public:
int nes_get_pcb_id(const char *slot);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_l);
- virtual DECLARE_READ8_MEMBER(read_m);
- virtual DECLARE_READ8_MEMBER(read_h);
- virtual DECLARE_READ8_MEMBER(read_ex);
- virtual DECLARE_WRITE8_MEMBER(write_l);
- virtual DECLARE_WRITE8_MEMBER(write_m);
- virtual DECLARE_WRITE8_MEMBER(write_h);
- virtual DECLARE_WRITE8_MEMBER(write_ex);
+ virtual uint8_t read_l(offs_t offset);
+ virtual uint8_t read_m(offs_t offset);
+ virtual uint8_t read_h(offs_t offset);
+ virtual uint8_t read_ex(offs_t offset);
+ virtual void write_l(offs_t offset, uint8_t data);
+ virtual void write_m(offs_t offset, uint8_t data);
+ virtual void write_h(offs_t offset, uint8_t data);
+ virtual void write_ex(offs_t offset, uint8_t data);
// hack until disk system is made modern!
virtual void disk_flip_side() { if (m_cart) m_cart->disk_flip_side(); }
@@ -429,9 +433,4 @@ DECLARE_DEVICE_TYPE(NES_CART_SLOT, nes_cart_slot_device)
#define NESSLOT_PRGROM_REGION_TAG ":cart:prg_rom"
#define NESSLOT_CHRROM_REGION_TAG ":cart:chr_rom"
-
-#define MCFG_NES_CARTRIDGE_NOT_MANDATORY \
- static_cast<nes_cart_slot_device *>(device)->set_must_be_loaded(false);
-
-
#endif // MAME_BUS_NES_NES_SLOT_H
diff --git a/src/devices/bus/nes/ntdec.cpp b/src/devices/bus/nes/ntdec.cpp
index 5ea3458e8f3..6fbcd6f31ef 100644
--- a/src/devices/bus/nes/ntdec.cpp
+++ b/src/devices/bus/nes/ntdec.cpp
@@ -102,7 +102,7 @@ void nes_ntdec_fh_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_ntdec_asder_device::write_h)
+void nes_ntdec_asder_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("ntdec_asder write_h, offset: %04x, data: %02x\n", offset, data));
@@ -165,7 +165,7 @@ WRITE8_MEMBER(nes_ntdec_asder_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_ntdec_fh_device::write_m)
+void nes_ntdec_fh_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("ntdec_fh write_m, offset: %04x, data: %02x\n", offset, data));
diff --git a/src/devices/bus/nes/ntdec.h b/src/devices/bus/nes/ntdec.h
index 1e5e8ef6cbb..062c5d7dcec 100644
--- a/src/devices/bus/nes/ntdec.h
+++ b/src/devices/bus/nes/ntdec.h
@@ -16,7 +16,7 @@ public:
// construction/destruction
nes_ntdec_asder_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -37,7 +37,7 @@ public:
// construction/destruction
nes_ntdec_fh_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/nxrom.cpp b/src/devices/bus/nes/nxrom.cpp
index e78fd6d1527..352b7534250 100644
--- a/src/devices/bus/nes/nxrom.cpp
+++ b/src/devices/bus/nes/nxrom.cpp
@@ -145,9 +145,6 @@ void nes_nrom_device::common_start()
save_item(NAME(m_nt_src));
save_item(NAME(m_nt_orig));
save_item(NAME(m_nt_writable));
-
- // open bus
- save_item(NAME(m_open_bus));
}
void nes_nrom_device::pcb_reset()
@@ -291,23 +288,23 @@ void nes_un1rom_device::pcb_reset()
-------------------------------------------------*/
-READ8_MEMBER(nes_nrom368_device::read_l)
+uint8_t nes_nrom368_device::read_l(offs_t offset)
{
LOG_MMC(("nrom368 read_l, offset: %04x\n", offset));
offset += 0x100;
if (offset >= 0x800)
return m_prg[offset - 0x800];
else
- return m_open_bus;
+ return get_open_bus();
}
-READ8_MEMBER(nes_nrom368_device::read_m)
+uint8_t nes_nrom368_device::read_m(offs_t offset)
{
LOG_MMC(("nrom368 read_m, offset: %04x\n", offset));
return m_prg[0x1800 + (offset & 0x1fff)];
}
-READ8_MEMBER(nes_nrom368_device::read_h)
+uint8_t nes_nrom368_device::read_h(offs_t offset)
{
LOG_MMC(("nrom368 read_h, offset: %04x\n", offset));
return m_prg[0x3800 + (offset & 0x7fff)];
@@ -334,7 +331,7 @@ READ8_MEMBER(nes_nrom368_device::read_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_axrom_device::write_h)
+void nes_axrom_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("axrom write_h, offset: %04x, data: %02x\n", offset, data));
@@ -355,7 +352,7 @@ WRITE8_MEMBER(nes_axrom_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bxrom_device::write_h)
+void nes_bxrom_device::write_h(offs_t offset, uint8_t data)
{
/* This portion of the mapper is nearly identical to Mapper 7, except no one-screen mirroring */
/* Deadly Towers is really a BxROM game - the demo screens look wrong using mapper 7. */
@@ -391,7 +388,7 @@ WRITE8_MEMBER(nes_bxrom_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_cnrom_device::write_h)
+void nes_cnrom_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("cxrom write_h, offset: %04x, data: %02x\n", offset, data));
@@ -412,7 +409,7 @@ WRITE8_MEMBER(nes_cnrom_device::write_h)
chr8(data, CHRROM);
}
-READ8_MEMBER(nes_cnrom_device::chr_r)
+uint8_t nes_cnrom_device::chr_r(offs_t offset)
{
int bank = offset >> 10;
@@ -421,7 +418,7 @@ READ8_MEMBER(nes_cnrom_device::chr_r)
// give actual VROM content or open bus values.
// For most boards, chr_open_bus remains always zero.
if (m_chr_open_bus)
- return m_open_bus;
+ return get_open_bus();
return m_chr_access[bank][offset & 0x3ff];
}
@@ -441,7 +438,7 @@ READ8_MEMBER(nes_cnrom_device::chr_r)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_cprom_device::write_h)
+void nes_cprom_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("cprom write_h, offset: %04x, data: %02x\n", offset, data));
@@ -462,7 +459,7 @@ WRITE8_MEMBER(nes_cprom_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_gxrom_device::write_h)
+void nes_gxrom_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("gxrom write_h, offset %04x, data: %02x\n", offset, data));
@@ -488,7 +485,7 @@ WRITE8_MEMBER(nes_gxrom_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_uxrom_device::write_h)
+void nes_uxrom_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("uxrom write_h, offset: %04x, data: %02x\n", offset, data));
@@ -514,7 +511,7 @@ WRITE8_MEMBER(nes_uxrom_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_uxrom_cc_device::write_h)
+void nes_uxrom_cc_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("uxrom_cc write_h, offset: %04x, data: %02x\n", offset, data));
@@ -535,7 +532,7 @@ WRITE8_MEMBER(nes_uxrom_cc_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_un1rom_device::write_h)
+void nes_un1rom_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("un1rom write_h, offset: %04x, data: %02x\n", offset, data));
@@ -558,7 +555,7 @@ WRITE8_MEMBER(nes_un1rom_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_nochr_device::chr_w)
+void nes_nochr_device::chr_w(offs_t offset, uint8_t data)
{
int mirr = get_mirroring();
if (mirr == PPU_MIRROR_HIGH)
@@ -569,7 +566,7 @@ WRITE8_MEMBER(nes_nochr_device::chr_w)
m_ciram[offset & 0x7ff] = data; // not sure here, since there is no software to test...
}
-READ8_MEMBER(nes_nochr_device::chr_r)
+uint8_t nes_nochr_device::chr_r(offs_t offset)
{
int mirr = get_mirroring();
if (mirr == PPU_MIRROR_HIGH)
diff --git a/src/devices/bus/nes/nxrom.h b/src/devices/bus/nes/nxrom.h
index 721ed5b5e98..382abf05390 100644
--- a/src/devices/bus/nes/nxrom.h
+++ b/src/devices/bus/nes/nxrom.h
@@ -36,9 +36,9 @@ public:
// construction/destruction
nes_nrom368_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
};
@@ -62,7 +62,7 @@ public:
// construction/destruction
nes_axrom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -80,7 +80,7 @@ public:
// construction/destruction
nes_bxrom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -98,8 +98,8 @@ public:
// construction/destruction
nes_cnrom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(chr_r) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t chr_r(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -122,7 +122,7 @@ public:
// construction/destruction
nes_cprom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -140,7 +140,7 @@ public:
// construction/destruction
nes_gxrom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -158,7 +158,7 @@ public:
// construction/destruction
nes_uxrom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -176,7 +176,7 @@ public:
// construction/destruction
nes_uxrom_cc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -194,7 +194,7 @@ public:
// construction/destruction
nes_un1rom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -213,8 +213,8 @@ public:
nes_nochr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_READ8_MEMBER(chr_r) override;
- virtual DECLARE_WRITE8_MEMBER(chr_w) override;
+ virtual uint8_t chr_r(offs_t offset) override;
+ virtual void chr_w(offs_t offset, uint8_t data) override;
};
diff --git a/src/devices/bus/nes/pirate.cpp b/src/devices/bus/nes/pirate.cpp
index 1d2035a9b91..acda901ecca 100644
--- a/src/devices/bus/nes/pirate.cpp
+++ b/src/devices/bus/nes/pirate.cpp
@@ -423,7 +423,7 @@ void nes_cityfight_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_agci_device::write_h)
+void nes_agci_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("agci write_h, offset: %04x, data: %02x\n", offset, data));
@@ -445,7 +445,7 @@ WRITE8_MEMBER(nes_agci_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_dreamtech_device::write_l)
+void nes_dreamtech_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("dreamtech write_l, offset: %04x, data: %02x\n", offset, data));
offset += 0x100;
@@ -467,7 +467,7 @@ WRITE8_MEMBER(nes_dreamtech_device::write_l)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_fukutake_device::write_l)
+void nes_fukutake_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("fukutake write_l, offset: %04x, data: %02x\n", offset, data));
offset += 0x100;
@@ -483,7 +483,7 @@ WRITE8_MEMBER(nes_fukutake_device::write_l)
m_ram[offset - 0x400] = data;
}
-READ8_MEMBER(nes_fukutake_device::read_l)
+uint8_t nes_fukutake_device::read_l(offs_t offset)
{
LOG_MMC(("fukutake read_l, offset: %04x\n", offset));
offset += 0x100;
@@ -503,13 +503,13 @@ READ8_MEMBER(nes_fukutake_device::read_l)
return 0;
}
-WRITE8_MEMBER(nes_fukutake_device::write_m)
+void nes_fukutake_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("fukutake write_m, offset: %04x, data: %02x\n", offset, data));
m_prgram[((m_latch * 0x2000) + offset) & (m_prgram.size() - 1)] = data;
}
-READ8_MEMBER(nes_fukutake_device::read_m)
+uint8_t nes_fukutake_device::read_m(offs_t offset)
{
LOG_MMC(("fukutake read_m, offset: %04x\n", offset));
return m_prgram[((m_latch * 0x2000) + offset) & (m_prgram.size() - 1)];
@@ -540,7 +540,7 @@ void nes_futuremedia_device::hblank_irq(int scanline, int vblank, int blanked)
}
}
-WRITE8_MEMBER(nes_futuremedia_device::write_h)
+void nes_futuremedia_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("futuremedia write_h, offset: %04x, data: %02x\n", offset, data));
@@ -603,7 +603,7 @@ WRITE8_MEMBER(nes_futuremedia_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_magseries_device::write_h)
+void nes_magseries_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("magseries write_h, offset: %04x, data: %02x\n", offset, data));
@@ -626,7 +626,7 @@ WRITE8_MEMBER(nes_magseries_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_daou306_device::write_h)
+void nes_daou306_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("daou306 write_h, offset: %04x, data: %02x\n", offset, data));
int reg = BIT(offset, 2) ? 8 : 0;
@@ -695,7 +695,7 @@ WRITE8_MEMBER(nes_daou306_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_cc21_device::write_h)
+void nes_cc21_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("cc21 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -718,7 +718,7 @@ WRITE8_MEMBER(nes_cc21_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_xiaozy_device::write_l)
+void nes_xiaozy_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("xiaozy write_l, offset: %04x, data: %02x\n", offset, data));
@@ -739,7 +739,7 @@ WRITE8_MEMBER(nes_xiaozy_device::write_l)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_edu2k_device::write_h)
+void nes_edu2k_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("edu2k write_h, offset: %04x, data: %02x\n", offset, data));
@@ -747,13 +747,13 @@ WRITE8_MEMBER(nes_edu2k_device::write_h)
m_latch = (data & 0xc0) >> 6;
}
-WRITE8_MEMBER(nes_edu2k_device::write_m)
+void nes_edu2k_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("edu2k write_m, offset: %04x, data: %02x\n", offset, data));
m_prgram[((m_latch * 0x2000) + offset) & (m_prgram.size() - 1)] = data;
}
-READ8_MEMBER(nes_edu2k_device::read_m)
+uint8_t nes_edu2k_device::read_m(offs_t offset)
{
LOG_MMC(("edu2k read_m, offset: %04x\n", offset));
return m_prgram[((m_latch * 0x2000) + offset) & (m_prgram.size() - 1)];
@@ -787,7 +787,7 @@ void nes_t230_device::hblank_irq(int scanline, int vblank, int blanked)
}
}
-WRITE8_MEMBER(nes_t230_device::write_h)
+void nes_t230_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("t230 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -869,7 +869,7 @@ void nes_mk2_device::hblank_irq( int scanline, int vblank, int blanked )
m_irq_clear = 0;
}
-WRITE8_MEMBER(nes_mk2_device::write_m)
+void nes_mk2_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("mk2 write_m, offset: %04x, data: %02x\n", offset, data));
@@ -921,7 +921,7 @@ void nes_whero_device::hblank_irq(int scanline, int vblank, int blanked)
}
}
-WRITE8_MEMBER(nes_whero_device::write_h)
+void nes_whero_device::write_h(offs_t offset, uint8_t data)
{
int bank, shift, mask1, mask2;
LOG_MMC(("World Hero write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1005,7 +1005,7 @@ WRITE8_MEMBER(nes_whero_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_43272_device::write_h)
+void nes_43272_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("unl_43272 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1016,7 +1016,7 @@ WRITE8_MEMBER(nes_43272_device::write_h)
}
-READ8_MEMBER(nes_43272_device::read_h)
+uint8_t nes_43272_device::read_h(offs_t offset)
{
uint8_t mask = (m_latch & 0x400) ? 0xfe : 0xff;
LOG_MMC(("unl_43272 read_h, offset: %04x\n", offset));
@@ -1054,7 +1054,7 @@ void nes_tf1201_device::update_prg()
prg8_cd(m_swap ? m_prg : 0xff );
}
-WRITE8_MEMBER(nes_tf1201_device::write_h)
+void nes_tf1201_device::write_h(offs_t offset, uint8_t data)
{
int bank;
LOG_MMC(("unl_tf1201 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1139,7 +1139,7 @@ void nes_cityfight_device::update_prg()
prg8_cd(m_prg_reg);
}
-WRITE8_MEMBER(nes_cityfight_device::write_h)
+void nes_cityfight_device::write_h(offs_t offset, uint8_t data)
{
int bank;
LOG_MMC(("unl_cityfight write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1244,7 +1244,7 @@ void nes_fujiya_device::pcb_reset()
m_latch = 0;
}
-WRITE8_MEMBER(nes_fujiya_device::write_m)
+void nes_fujiya_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("fujiya write_m, offset: %04x, data: %02x\n", offset, data));
offset += 0x6000;
@@ -1253,7 +1253,7 @@ WRITE8_MEMBER(nes_fujiya_device::write_m)
m_latch = (data & 0x40) << 1;
}
-READ8_MEMBER(nes_fujiya_device::read_m)
+uint8_t nes_fujiya_device::read_m(offs_t offset)
{
LOG_MMC(("fujiya read_m, offset: %04x\n", offset));
offset += 0x6000;
@@ -1261,6 +1261,6 @@ READ8_MEMBER(nes_fujiya_device::read_m)
if (offset == 0x7001 || offset == 0x7777)
return m_latch | ((offset >> 8) & 0x7f);
- return m_open_bus; // open bus
+ return get_open_bus(); // open bus
}
#endif
diff --git a/src/devices/bus/nes/pirate.h b/src/devices/bus/nes/pirate.h
index 91424d32e25..e99bd703aec 100644
--- a/src/devices/bus/nes/pirate.h
+++ b/src/devices/bus/nes/pirate.h
@@ -16,7 +16,7 @@ public:
// construction/destruction
nes_agci_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -34,7 +34,7 @@ public:
// construction/destruction
nes_dreamtech_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -52,10 +52,10 @@ public:
// construction/destruction
nes_fukutake_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -77,7 +77,7 @@ public:
// construction/destruction
nes_futuremedia_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void hblank_irq(int scanline, int vblank, int blanked) override;
virtual void pcb_reset() override;
@@ -101,7 +101,7 @@ public:
// construction/destruction
nes_magseries_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -119,7 +119,7 @@ public:
// construction/destruction
nes_daou306_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -140,7 +140,7 @@ public:
// construction/destruction
nes_cc21_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -158,7 +158,7 @@ public:
// construction/destruction
nes_xiaozy_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -176,9 +176,9 @@ public:
// construction/destruction
nes_edu2k_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -199,7 +199,7 @@ public:
// construction/destruction
nes_t230_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void hblank_irq(int scanline, int vblank, int blanked) override;
virtual void pcb_reset() override;
@@ -225,7 +225,7 @@ public:
// construction/destruction
nes_mk2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void hblank_irq(int scanline, int vblank, int blanked) override;
virtual void pcb_reset() override;
@@ -249,7 +249,7 @@ public:
// construction/destruction
nes_whero_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void hblank_irq(int scanline, int vblank, int blanked) override;
virtual void pcb_reset() override;
@@ -276,8 +276,8 @@ public:
// construction/destruction
nes_43272_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -298,7 +298,7 @@ public:
// construction/destruction
nes_tf1201_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void hblank_irq(int scanline, int vblank, int blanked) override;
virtual void pcb_reset() override;
@@ -325,7 +325,7 @@ public:
// construction/destruction
nes_cityfight_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -359,8 +359,8 @@ public:
// construction/destruction
nes_fujiya_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/pt554.cpp b/src/devices/bus/nes/pt554.cpp
index 98524a04bc7..db16ca42e37 100644
--- a/src/devices/bus/nes/pt554.cpp
+++ b/src/devices/bus/nes/pt554.cpp
@@ -59,7 +59,7 @@ nes_bandai_pt554_device::nes_bandai_pt554_device(const machine_config &mconfig,
-------------------------------------------------*/
-WRITE8_MEMBER(nes_bandai_pt554_device::write_m)
+void nes_bandai_pt554_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("Bandai PT-554 Sound write, data: %02x\n", data));
diff --git a/src/devices/bus/nes/pt554.h b/src/devices/bus/nes/pt554.h
index f25281ea4f0..746750c52ed 100644
--- a/src/devices/bus/nes/pt554.h
+++ b/src/devices/bus/nes/pt554.h
@@ -16,7 +16,7 @@ public:
// construction/destruction
nes_bandai_pt554_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
diff --git a/src/devices/bus/nes/racermate.cpp b/src/devices/bus/nes/racermate.cpp
index 5b578da0e09..111cb997dd0 100644
--- a/src/devices/bus/nes/racermate.cpp
+++ b/src/devices/bus/nes/racermate.cpp
@@ -81,7 +81,7 @@ void nes_racermate_device::update_banks()
prg16_89ab(m_latch >> 6);
}
-WRITE8_MEMBER(nes_racermate_device::write_h)
+void nes_racermate_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("racermate write_h, offset: %04x, data: %02x\n", offset, data));
diff --git a/src/devices/bus/nes/racermate.h b/src/devices/bus/nes/racermate.h
index 5366ec1a6ea..cb74a06a6b0 100644
--- a/src/devices/bus/nes/racermate.h
+++ b/src/devices/bus/nes/racermate.h
@@ -16,7 +16,7 @@ public:
// device-level overrides
virtual void device_start() override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/rcm.cpp b/src/devices/bus/nes/rcm.cpp
index 5c861922afb..fdd07830381 100644
--- a/src/devices/bus/nes/rcm.cpp
+++ b/src/devices/bus/nes/rcm.cpp
@@ -161,7 +161,7 @@ void nes_3dblock_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_gs2015_device::write_h)
+void nes_gs2015_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("gs2015 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -169,7 +169,7 @@ WRITE8_MEMBER(nes_gs2015_device::write_h)
chr8(offset >> 1, m_chr_source);
}
-READ8_MEMBER(nes_gs2015_device::read_m)
+uint8_t nes_gs2015_device::read_m(offs_t offset)
{
LOG_MMC(("gs2015 read_m, offset: %04x\n", offset));
return 0; // Videopoker Bonza needs this (sort of protection? or related to inputs?)
@@ -186,7 +186,7 @@ READ8_MEMBER(nes_gs2015_device::read_m)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_gs2004_device::write_h)
+void nes_gs2004_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("gs2004 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -204,7 +204,7 @@ WRITE8_MEMBER(nes_gs2004_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_gs2013_device::write_h)
+void nes_gs2013_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("gs2013 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -232,7 +232,7 @@ WRITE8_MEMBER(nes_gs2013_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_tf9_device::write_h)
+void nes_tf9_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("tetrisfam write_h, offset: %04x, data: %02x\n", offset, data));
@@ -279,7 +279,7 @@ void nes_3dblock_device::hblank_irq(int scanline, int vblank, int blanked)
}
}
-WRITE8_MEMBER(nes_3dblock_device::write_l)
+void nes_3dblock_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("3dblock write_l, offset: %04x, data: %02x\n", offset, data));
offset += 0x100;
diff --git a/src/devices/bus/nes/rcm.h b/src/devices/bus/nes/rcm.h
index f37a6074432..005869fe09c 100644
--- a/src/devices/bus/nes/rcm.h
+++ b/src/devices/bus/nes/rcm.h
@@ -16,9 +16,9 @@ public:
// construction/destruction
nes_gs2015_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_l) override { return read_m(space, offset, mem_mask); }
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_l(offs_t offset) override { return read_m(offset); }
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -36,7 +36,7 @@ public:
// construction/destruction
nes_gs2004_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -54,7 +54,7 @@ public:
// construction/destruction
nes_gs2013_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -72,7 +72,7 @@ public:
// construction/destruction
nes_tf9_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -90,7 +90,7 @@ public:
// construction/destruction
nes_3dblock_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
virtual void hblank_irq(int scanline, int vblank, int blanked) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/rexsoft.cpp b/src/devices/bus/nes/rexsoft.cpp
index 3d868a0c970..c10b88afe01 100644
--- a/src/devices/bus/nes/rexsoft.cpp
+++ b/src/devices/bus/nes/rexsoft.cpp
@@ -112,7 +112,7 @@ void nes_rex_sl1632_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_rex_dbz5_device::write_l)
+void nes_rex_dbz5_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("rex_dbz write_l, offset: %04x, data: %02x\n", offset, data));
@@ -121,7 +121,7 @@ WRITE8_MEMBER(nes_rex_dbz5_device::write_l)
}
/* we would need to use this read handler in 0x6000-0x7fff as well */
-READ8_MEMBER(nes_rex_dbz5_device::read_l)
+uint8_t nes_rex_dbz5_device::read_l(offs_t offset)
{
LOG_MMC(("rex_dbz read_l, offset: %04x\n", offset));
return 0x01;
@@ -208,7 +208,7 @@ void nes_rex_sl1632_device::set_chr(uint8_t chr, int chr_base, int chr_mask)
chr1_x(chr_page ^ 7, chr_base2[7] | (bank[7] & chr_mask), chr);
}
-WRITE8_MEMBER(nes_rex_sl1632_device::write_h)
+void nes_rex_sl1632_device::write_h(offs_t offset, uint8_t data)
{
uint8_t helper1, helper2;
LOG_MMC(("rex_sl1632 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -232,7 +232,7 @@ WRITE8_MEMBER(nes_rex_sl1632_device::write_h)
break;
default:
- txrom_write(space, offset, data, mem_mask);
+ txrom_write(offset, data);
break;
}
}
diff --git a/src/devices/bus/nes/rexsoft.h b/src/devices/bus/nes/rexsoft.h
index 61fe876633a..0c44c73139d 100644
--- a/src/devices/bus/nes/rexsoft.h
+++ b/src/devices/bus/nes/rexsoft.h
@@ -16,10 +16,10 @@ public:
// construction/destruction
nes_rex_dbz5_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_READ8_MEMBER(read_m) override { return read_l(space, offset, mem_mask); }
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual void chr_cb( int start, int bank, int source ) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual uint8_t read_m(offs_t offset) override { return read_l(offset); }
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void chr_cb(int start, int bank, int source) override;
virtual void pcb_reset() override;
@@ -40,7 +40,7 @@ public:
// construction/destruction
nes_rex_sl1632_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/sachen.cpp b/src/devices/bus/nes/sachen.cpp
index 369c4cde885..0622bfec8d4 100644
--- a/src/devices/bus/nes/sachen.cpp
+++ b/src/devices/bus/nes/sachen.cpp
@@ -308,7 +308,7 @@ void nes_sachen_8259d_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_sachen_sa009_device::write_l)
+void nes_sachen_sa009_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("SA009 write_l, offset: %04x, data: %02x\n", offset, data));
@@ -327,7 +327,7 @@ WRITE8_MEMBER(nes_sachen_sa009_device::write_l)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_sachen_sa0036_device::write_h)
+void nes_sachen_sa0036_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("sa0036 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -346,7 +346,7 @@ WRITE8_MEMBER(nes_sachen_sa0036_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_sachen_sa0037_device::write_h)
+void nes_sachen_sa0037_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("sa0037 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -369,7 +369,7 @@ WRITE8_MEMBER(nes_sachen_sa0037_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_sachen_sa72007_device::write_l)
+void nes_sachen_sa72007_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("SA72007 write_l, offset: %04x, data: %02x\n", offset, data));
@@ -390,7 +390,7 @@ WRITE8_MEMBER(nes_sachen_sa72007_device::write_l)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_sachen_sa72008_device::write_l)
+void nes_sachen_sa72008_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("SA72008 write_l, offset: %04x, data: %02x\n", offset, data));
@@ -410,7 +410,7 @@ WRITE8_MEMBER(nes_sachen_sa72008_device::write_l)
-------------------------------------------------*/
-READ8_MEMBER(nes_sachen_tca01_device::read_l)
+uint8_t nes_sachen_tca01_device::read_l(offs_t offset)
{
LOG_MMC(("TCA-01 read_l, offset: %04x\n", offset));
@@ -433,7 +433,7 @@ READ8_MEMBER(nes_sachen_tca01_device::read_l)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_sachen_tcu01_device::write_l)
+void nes_sachen_tcu01_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("TCU-01 write_l, offset: %04x, data: %02x\n", offset, data));
@@ -456,7 +456,7 @@ WRITE8_MEMBER(nes_sachen_tcu01_device::write_l)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_sachen_tcu02_device::write_l)
+void nes_sachen_tcu02_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("TCU-02 write_l, offset: %04x, data: %02x\n", offset, data));
@@ -467,7 +467,7 @@ WRITE8_MEMBER(nes_sachen_tcu02_device::write_l)
}
}
-READ8_MEMBER(nes_sachen_tcu02_device::read_l)
+uint8_t nes_sachen_tcu02_device::read_l(offs_t offset)
{
LOG_MMC(("TCU-02 read_l, offset: %04x\n", offset));
@@ -512,7 +512,7 @@ void nes_sachen_74x374_device::set_mirror(uint8_t nt) // also used by mappers 13
}
-WRITE8_MEMBER(nes_sachen_74x374_device::write_l)
+void nes_sachen_74x374_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("Sachen 74*374 write_l, offset: %04x, data: %02x\n", offset, data));
@@ -551,7 +551,7 @@ WRITE8_MEMBER(nes_sachen_74x374_device::write_l)
}
}
-READ8_MEMBER(nes_sachen_74x374_device::read_l)
+uint8_t nes_sachen_74x374_device::read_l(offs_t offset)
{
LOG_MMC(("Sachen 74*374 read_l, offset: %04x", offset));
@@ -562,7 +562,7 @@ READ8_MEMBER(nes_sachen_74x374_device::read_l)
return 0;
}
-WRITE8_MEMBER(nes_sachen_74x374_alt_device::write_l)
+void nes_sachen_74x374_alt_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("Sachen 74*374 Alt write_l, offset: %04x, data: %02x\n", offset, data));
@@ -626,7 +626,7 @@ void nes_sachen_8259a_device::chr_update()
}
}
-WRITE8_MEMBER(nes_sachen_8259a_device::write_l)
+void nes_sachen_8259a_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("Sachen 8259 write_l, offset: %04x, data: %02x\n", offset, data));
diff --git a/src/devices/bus/nes/sachen.h b/src/devices/bus/nes/sachen.h
index cfec9363bdc..b23599345b3 100644
--- a/src/devices/bus/nes/sachen.h
+++ b/src/devices/bus/nes/sachen.h
@@ -16,7 +16,7 @@ public:
// construction/destruction
nes_sachen_sa009_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -34,7 +34,7 @@ public:
// construction/destruction
nes_sachen_sa0036_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -52,7 +52,7 @@ public:
// construction/destruction
nes_sachen_sa0037_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -70,7 +70,7 @@ public:
// construction/destruction
nes_sachen_sa72007_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -88,7 +88,7 @@ public:
// construction/destruction
nes_sachen_sa72008_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -106,7 +106,7 @@ public:
// construction/destruction
nes_sachen_tca01_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_l) override;
+ virtual uint8_t read_l(offs_t offset) override;
virtual void pcb_reset() override;
@@ -124,9 +124,9 @@ public:
// construction/destruction
nes_sachen_tcu01_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override { write_l(space, (offset + 0x100) & 0xfff, data, mem_mask); }
- virtual DECLARE_WRITE8_MEMBER(write_h) override { write_l(space, (offset + 0x100) & 0xfff, data, mem_mask); }
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_m(offs_t offset, uint8_t data) override { write_l((offset + 0x100) & 0xfff, data); }
+ virtual void write_h(offs_t offset, uint8_t data) override { write_l((offset + 0x100) & 0xfff, data); }
virtual void pcb_reset() override;
@@ -144,8 +144,8 @@ public:
// construction/destruction
nes_sachen_tcu02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -166,8 +166,8 @@ public:
// construction/destruction
nes_sachen_74x374_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -191,8 +191,8 @@ public:
nes_sachen_74x374_alt_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_READ8_MEMBER(read_l) override { return 0xff; } // no read_l here
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
+ virtual uint8_t read_l(offs_t offset) override { return 0xff; } // no read_l here
+ virtual void write_l(offs_t offset, uint8_t data) override;
};
@@ -204,8 +204,8 @@ public:
// construction/destruction
nes_sachen_8259a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override { write_l(space, (offset + 0x100) & 0xfff, data, mem_mask); }
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_m(offs_t offset, uint8_t data) override { write_l((offset + 0x100) & 0xfff, data); }
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/somari.cpp b/src/devices/bus/nes/somari.cpp
index f4a5c2e7f40..c517a4fae16 100644
--- a/src/devices/bus/nes/somari.cpp
+++ b/src/devices/bus/nes/somari.cpp
@@ -157,7 +157,7 @@ void nes_somari_device::pcb_reset()
-------------------------------------------------*/
// MMC1 Mode emulation
-WRITE8_MEMBER(nes_somari_device::mmc1_w)
+void nes_somari_device::mmc1_w(offs_t offset, uint8_t data)
{
assert(m_board_mode == 2);
@@ -191,7 +191,7 @@ WRITE8_MEMBER(nes_somari_device::mmc1_w)
}
// MMC3 Mode emulation
-WRITE8_MEMBER(nes_somari_device::mmc3_w)
+void nes_somari_device::mmc3_w(offs_t offset, uint8_t data)
{
uint8_t mmc_helper, cmd;
@@ -240,7 +240,7 @@ WRITE8_MEMBER(nes_somari_device::mmc3_w)
}
// VRC2 Mode emulation
-WRITE8_MEMBER(nes_somari_device::vrc2_w)
+void nes_somari_device::vrc2_w(offs_t offset, uint8_t data)
{
uint8_t bank, shift;
@@ -381,15 +381,15 @@ void nes_somari_device::update_mirror()
}
-WRITE8_MEMBER(nes_somari_device::write_h)
+void nes_somari_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("somari write_h, mode %d, offset: %04x, data: %02x\n", m_board_mode, offset, data));
switch (m_board_mode)
{
- case SOMARI_VRC2_MODE: vrc2_w(space, offset, data, mem_mask); break;
- case SOMARI_MMC3_MODE: mmc3_w(space, offset, data, mem_mask); break;
- case SOMARI_MMC1_MODE: mmc1_w(space, offset, data, mem_mask); break;
+ case SOMARI_VRC2_MODE: vrc2_w(offset, data); break;
+ case SOMARI_MMC3_MODE: mmc3_w(offset, data); break;
+ case SOMARI_MMC1_MODE: mmc1_w(offset, data); break;
}
}
@@ -409,7 +409,7 @@ void nes_somari_device::bank_update_switchmode()
update_chr();
}
-WRITE8_MEMBER(nes_somari_device::write_m)
+void nes_somari_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("somari write_m, offset: %04x, data: %02x\n", offset, data));
diff --git a/src/devices/bus/nes/somari.h b/src/devices/bus/nes/somari.h
index 7b5d2920923..dda299b3a99 100644
--- a/src/devices/bus/nes/somari.h
+++ b/src/devices/bus/nes/somari.h
@@ -16,12 +16,12 @@ public:
// construction/destruction
nes_somari_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_l) override { write_m(space, offset + 0x100, data, mem_mask); }
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(mmc1_w);
- virtual DECLARE_WRITE8_MEMBER(mmc3_w);
- virtual DECLARE_WRITE8_MEMBER(vrc2_w);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_l(offs_t offset, uint8_t data) override { write_m(offset + 0x100, data); }
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ void mmc1_w(offs_t offset, uint8_t data);
+ void mmc3_w(offs_t offset, uint8_t data);
+ void vrc2_w(offs_t offset, uint8_t data);
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/subor.cpp b/src/devices/bus/nes/subor.cpp
index c15e8761112..0fa25b2b5bb 100644
--- a/src/devices/bus/nes/subor.cpp
+++ b/src/devices/bus/nes/subor.cpp
@@ -183,7 +183,7 @@ void nes_subor2_device::ppu_latch(offs_t offset)
nt
-------------------------------------------------*/
-READ8_MEMBER(nes_subor2_device::nt_r)
+uint8_t nes_subor2_device::nt_r(offs_t offset)
{
int page = ((offset & 0xc00) >> 10);
@@ -234,7 +234,7 @@ void nes_subor2_device::update_banks()
read
-------------------------------------------------*/
-READ8_MEMBER(nes_subor2_device::read_l)
+uint8_t nes_subor2_device::read_l(offs_t offset)
{
LOG_MMC("subor2 read_l, offset: %04x\n", offset);
@@ -242,14 +242,14 @@ READ8_MEMBER(nes_subor2_device::read_l)
{
return 0x8F;
}
- return m_open_bus;
+ return get_open_bus();
}
/*-------------------------------------------------
write
-------------------------------------------------*/
-WRITE8_MEMBER(nes_subor0_device::write_h)
+void nes_subor0_device::write_h(offs_t offset, uint8_t data)
{
uint8_t subor_helper1, subor_helper2;
LOG_MMC("subor0 write_h, offset: %04x, data: %02x\n", offset, data);
@@ -279,7 +279,7 @@ WRITE8_MEMBER(nes_subor0_device::write_h)
prg16_cdef(subor_helper2);
}
-WRITE8_MEMBER(nes_subor1_device::write_h)
+void nes_subor1_device::write_h(offs_t offset, uint8_t data)
{
uint8_t subor_helper1, subor_helper2;
LOG_MMC("subor1 write_h, offset: %04x, data: %02x\n", offset, data);
@@ -309,7 +309,7 @@ WRITE8_MEMBER(nes_subor1_device::write_h)
prg16_cdef(subor_helper2);
}
-WRITE8_MEMBER(nes_subor2_device::write_l)
+void nes_subor2_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC("subor2 write_l, offset: %04x, data: %02x\n", offset, data);
diff --git a/src/devices/bus/nes/subor.h b/src/devices/bus/nes/subor.h
index 93e542cf481..a4ffc13a553 100644
--- a/src/devices/bus/nes/subor.h
+++ b/src/devices/bus/nes/subor.h
@@ -20,7 +20,7 @@ public:
// construction/destruction
nes_subor0_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -41,7 +41,7 @@ public:
// construction/destruction
nes_subor1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -62,9 +62,9 @@ public:
// construction/destruction
nes_subor2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(nt_r) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_READ8_MEMBER(read_l) override;
+ virtual uint8_t nt_r(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual uint8_t read_l(offs_t offset) override;
virtual void ppu_latch(offs_t offset) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/sunsoft.cpp b/src/devices/bus/nes/sunsoft.cpp
index f62fa24e67d..be90e36e535 100644
--- a/src/devices/bus/nes/sunsoft.cpp
+++ b/src/devices/bus/nes/sunsoft.cpp
@@ -209,7 +209,7 @@ void nes_sunsoft_fme7_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_sunsoft_1_device::write_m)
+void nes_sunsoft_1_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("Sunsoft 1 write_m, offset: %04x, data: %02x\n", offset, data));
@@ -235,7 +235,7 @@ WRITE8_MEMBER(nes_sunsoft_1_device::write_m)
// there are two 'variants' depending on hardwired or mapper ctrl mirroring
-WRITE8_MEMBER(nes_sunsoft_2_device::write_h)
+void nes_sunsoft_2_device::write_h(offs_t offset, uint8_t data)
{
uint8_t helper = (data & 0x07) | ((data & 0x80) ? 0x08 : 0x00);
LOG_MMC(("Sunsoft 2 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -282,7 +282,7 @@ void nes_sunsoft_3_device::device_timer(emu_timer &timer, device_timer_id id, in
}
}
-WRITE8_MEMBER(nes_sunsoft_3_device::write_h)
+void nes_sunsoft_3_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("Sunsoft 3 write_h, offset %04x, data: %02x\n", offset, data));
@@ -384,7 +384,7 @@ void nes_sunsoft_4_device::sun4_mirror( int mirror, int mirr0, int mirr1 )
}
}
-WRITE8_MEMBER(nes_sunsoft_4_device::sun4_write)
+void nes_sunsoft_4_device::sun4_write(offs_t offset, uint8_t data)
{
LOG_MMC(("Sunsoft 4 write_h, offset %04x, data: %02x\n", offset, data));
@@ -424,7 +424,7 @@ WRITE8_MEMBER(nes_sunsoft_4_device::sun4_write)
}
}
-WRITE8_MEMBER(nes_sunsoft_4_device::write_m)
+void nes_sunsoft_4_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("Sunsoft 4 write_m, offset: %04x, data: %02x\n", offset, data));
@@ -434,7 +434,7 @@ WRITE8_MEMBER(nes_sunsoft_4_device::write_m)
m_prgram[offset & (m_prgram.size() - 1)] = data;
}
-READ8_MEMBER(nes_sunsoft_4_device::read_m)
+uint8_t nes_sunsoft_4_device::read_m(offs_t offset)
{
LOG_MMC(("Sunsoft 4 read_m, offset: %04x\n", offset));
@@ -443,7 +443,7 @@ READ8_MEMBER(nes_sunsoft_4_device::read_m)
if (!m_prgram.empty() && m_wram_enable)
return m_prgram[offset & (m_prgram.size() - 1)];
- return m_open_bus; // open bus
+ return get_open_bus(); // open bus
}
/*-------------------------------------------------
@@ -475,7 +475,7 @@ void nes_sunsoft_fme7_device::device_timer(emu_timer &timer, device_timer_id id,
}
}
-WRITE8_MEMBER(nes_sunsoft_fme7_device::fme7_write)
+void nes_sunsoft_fme7_device::fme7_write(offs_t offset, uint8_t data)
{
LOG_MMC(("fme7_write, offset %04x, data: %02x\n", offset, data));
@@ -533,7 +533,7 @@ WRITE8_MEMBER(nes_sunsoft_fme7_device::fme7_write)
}
}
-WRITE8_MEMBER(nes_sunsoft_fme7_device::write_m)
+void nes_sunsoft_fme7_device::write_m(offs_t offset, uint8_t data)
{
uint8_t bank = m_wram_bank & 0x3f;
LOG_MMC(("Sunsoft FME7 write_m, offset: %04x, data: %02x\n", offset, data));
@@ -549,7 +549,7 @@ WRITE8_MEMBER(nes_sunsoft_fme7_device::write_m)
}
}
-READ8_MEMBER(nes_sunsoft_fme7_device::read_m)
+uint8_t nes_sunsoft_fme7_device::read_m(offs_t offset)
{
uint8_t bank = m_wram_bank & 0x3f;
LOG_MMC(("Sunsoft FME7 read_m, offset: %04x\n", offset));
@@ -564,7 +564,7 @@ READ8_MEMBER(nes_sunsoft_fme7_device::read_m)
return m_prgram[((bank * 0x2000) + offset) & (m_prgram.size() - 1)];
}
- return m_open_bus; // open bus
+ return get_open_bus(); // open bus
}
@@ -578,20 +578,20 @@ READ8_MEMBER(nes_sunsoft_fme7_device::read_m)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_sunsoft_5_device::write_h)
+void nes_sunsoft_5_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("sunsoft 5 write_h, offset %04x, data: %02x\n", offset, data));
switch (offset & 0x6000)
{
case 0x4000:
- m_ym2149->address_w(space, 0, data & 0x0f);
+ m_ym2149->address_w(data & 0x0f);
break;
case 0x6000:
- m_ym2149->data_w(space, 0, data);
+ m_ym2149->data_w(data);
break;
default:
- fme7_write(space, offset, data, mem_mask);
+ fme7_write(offset, data);
break;
}
}
diff --git a/src/devices/bus/nes/sunsoft.h b/src/devices/bus/nes/sunsoft.h
index b4b035d515d..c02b94647cf 100644
--- a/src/devices/bus/nes/sunsoft.h
+++ b/src/devices/bus/nes/sunsoft.h
@@ -17,7 +17,7 @@ public:
// construction/destruction
nes_sunsoft_1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -35,7 +35,7 @@ public:
// construction/destruction
nes_sunsoft_2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -53,7 +53,7 @@ public:
// construction/destruction
nes_sunsoft_3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -78,10 +78,10 @@ public:
// construction/destruction
nes_sunsoft_4_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(sun4_write);
- virtual DECLARE_WRITE8_MEMBER(write_h) override { sun4_write(space, offset, data, mem_mask); }
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ void sun4_write(offs_t offset, uint8_t data);
+ virtual void write_h(offs_t offset, uint8_t data) override { sun4_write(offset, data); }
virtual void pcb_reset() override;
@@ -104,10 +104,10 @@ public:
// construction/destruction
nes_sunsoft_fme7_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(fme7_write);
- virtual DECLARE_WRITE8_MEMBER(write_h) override { fme7_write(space, offset, data, mem_mask); }
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ void fme7_write(offs_t offset, uint8_t data);
+ virtual void write_h(offs_t offset, uint8_t data) override { fme7_write(offset, data); }
virtual void pcb_reset() override;
@@ -138,7 +138,7 @@ public:
// construction/destruction
nes_sunsoft_5_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
protected:
virtual void device_add_mconfig(machine_config &config) override;
diff --git a/src/devices/bus/nes/sunsoft_dcs.cpp b/src/devices/bus/nes/sunsoft_dcs.cpp
index 5df2c6557d2..23c81894666 100644
--- a/src/devices/bus/nes/sunsoft_dcs.cpp
+++ b/src/devices/bus/nes/sunsoft_dcs.cpp
@@ -68,10 +68,10 @@ void nes_ntb_slot_device::device_start()
m_cart = dynamic_cast<ntb_cart_interface *>(get_card_device());
}
-READ8_MEMBER(nes_ntb_slot_device::read)
+uint8_t nes_ntb_slot_device::read(offs_t offset)
{
if (m_cart)
- return m_cart->read(space, offset, mem_mask);
+ return m_cart->read(offset);
return 0xff;
}
@@ -212,7 +212,7 @@ void nes_sunsoft_dcs_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_sunsoft_dcs_device::write_h)
+void nes_sunsoft_dcs_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("Sunsoft DCS write_h, offset %04x, data: %02x\n", offset, data));
@@ -224,27 +224,27 @@ WRITE8_MEMBER(nes_sunsoft_dcs_device::write_h)
m_wram_enable = BIT(data, 4);
break;
default:
- sun4_write(space, offset, data, mem_mask);
+ sun4_write(offset, data);
break;
}
}
-READ8_MEMBER(nes_sunsoft_dcs_device::read_h)
+uint8_t nes_sunsoft_dcs_device::read_h(offs_t offset)
{
LOG_MMC(("Sunsoft DCS read_h, offset: %04x\n", offset));
if (m_exrom_enable && m_subslot->m_cart && offset < 0x4000)
{
if (m_timer_on)
- return m_subslot->m_cart->read(space, offset, mem_mask);
+ return m_subslot->m_cart->read(offset);
else
- return m_open_bus; // after the timer is off, this returns open bus...
+ return get_open_bus(); // after the timer is off, this returns open bus...
}
else
return hi_access_rom(offset);
}
-WRITE8_MEMBER(nes_sunsoft_dcs_device::write_m)
+void nes_sunsoft_dcs_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("Sunsoft DCS write_m, offset: %04x, data: %02x\n", offset, data));
@@ -260,7 +260,7 @@ WRITE8_MEMBER(nes_sunsoft_dcs_device::write_m)
}
}
-READ8_MEMBER(nes_sunsoft_dcs_device::read_m)
+uint8_t nes_sunsoft_dcs_device::read_m(offs_t offset)
{
LOG_MMC(("Sunsoft DCS read_m, offset: %04x\n", offset));
@@ -269,7 +269,7 @@ READ8_MEMBER(nes_sunsoft_dcs_device::read_m)
if (!m_prgram.empty() && m_wram_enable)
return m_prgram[offset & (m_prgram.size() - 1)];
- return m_open_bus; // open bus
+ return get_open_bus(); // open bus
}
@@ -285,9 +285,10 @@ static void ntb_cart(device_slot_interface &device)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(nes_sunsoft_dcs_device::device_add_mconfig)
- MCFG_NTB_MINICART_ADD("ntb_slot", ntb_cart)
-MACHINE_CONFIG_END
+void nes_sunsoft_dcs_device::device_add_mconfig(machine_config &config)
+{
+ NES_NTB_SLOT(config, m_subslot, ntb_cart);
+}
//-------------------------------------------------
diff --git a/src/devices/bus/nes/sunsoft_dcs.h b/src/devices/bus/nes/sunsoft_dcs.h
index f14d9f9c8c1..51a11b22ae4 100644
--- a/src/devices/bus/nes/sunsoft_dcs.h
+++ b/src/devices/bus/nes/sunsoft_dcs.h
@@ -24,7 +24,7 @@ public:
virtual ~ntb_cart_interface();
// reading and writing
- virtual DECLARE_READ8_MEMBER(read) { return m_rom[offset]; }
+ virtual uint8_t read(offs_t offset) { return m_rom[offset]; }
uint8_t *get_cart_base() { return m_rom; }
@@ -46,6 +46,16 @@ class nes_ntb_slot_device : public device_t,
friend class nes_sunsoft_dcs_device;
public:
// construction/destruction
+ template <typename T>
+ nes_ntb_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts)
+ : nes_ntb_slot_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(nullptr);
+ set_fixed(false);
+ }
+
nes_ntb_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~nes_ntb_slot_device();
@@ -68,7 +78,7 @@ public:
// slot interface overrides
virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
- virtual DECLARE_READ8_MEMBER(read);
+ virtual uint8_t read(offs_t offset);
protected:
ntb_cart_interface* m_cart;
@@ -78,11 +88,6 @@ protected:
DECLARE_DEVICE_TYPE(NES_NTB_SLOT, nes_ntb_slot_device)
-#define MCFG_NTB_MINICART_ADD(_tag, _slot_intf) \
- MCFG_DEVICE_ADD(_tag, NES_NTB_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, nullptr, false)
-
-
//-----------------------------------------------
//
// Nantettate!! Baseball Minicart implementation
@@ -128,10 +133,10 @@ public:
// construction/destruction
nes_sunsoft_dcs_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/taito.cpp b/src/devices/bus/nes/taito.cpp
index 2868bfea1dc..28c37b6109c 100644
--- a/src/devices/bus/nes/taito.cpp
+++ b/src/devices/bus/nes/taito.cpp
@@ -172,7 +172,7 @@ void nes_x1_017_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_tc0190fmc_device::tc0190fmc_write)
+void nes_tc0190fmc_device::tc0190fmc_write(offs_t offset, uint8_t data)
{
LOG_MMC(("tc0190fmc_write, offset: %04x, data: %02x\n", offset, data));
@@ -240,7 +240,7 @@ void nes_tc0190fmc_pal16r4_device::hblank_irq( int scanline, int vblank, int bla
}
}
-WRITE8_MEMBER(nes_tc0190fmc_pal16r4_device::write_h)
+void nes_tc0190fmc_pal16r4_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("tc0190fmc pal16r4 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -256,7 +256,7 @@ WRITE8_MEMBER(nes_tc0190fmc_pal16r4_device::write_h)
case 0x2001:
case 0x2002:
case 0x2003:
- tc0190fmc_write(space, offset, data, mem_mask);
+ tc0190fmc_write(offset, data);
break;
case 0x4000:
m_irq_count_latch = (0x100 - data) & 0xff;
@@ -291,7 +291,7 @@ WRITE8_MEMBER(nes_tc0190fmc_pal16r4_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_x1_005_device::write_m)
+void nes_x1_005_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("x1_005 write_m, offset: %04x, data: %02x\n", offset, data));
@@ -355,14 +355,14 @@ WRITE8_MEMBER(nes_x1_005_device::write_m)
m_x1_005_ram[offset & 0x7f] = data;
}
-READ8_MEMBER(nes_x1_005_device::read_m)
+uint8_t nes_x1_005_device::read_m(offs_t offset)
{
LOG_MMC(("x1_005 read_m, offset: %04x\n", offset));
if (offset >= 0x1f00 && m_latch == 0xa3)
return m_x1_005_ram[offset & 0x7f];
- return m_open_bus; // open bus
+ return get_open_bus(); // open bus
}
/*-------------------------------------------------
@@ -399,7 +399,7 @@ void nes_x1_017_device::set_chr()
chr1_x(7 ^ m_latch, m_mmc_vrom_bank[5], CHRROM);
}
-WRITE8_MEMBER(nes_x1_017_device::write_m)
+void nes_x1_017_device::write_m(offs_t offset, uint8_t data)
{
LOG_MMC(("x1017 write_m, offset: %04x, data: %02x\n", offset, data));
@@ -453,7 +453,7 @@ WRITE8_MEMBER(nes_x1_017_device::write_m)
m_x1_017_ram[0x1000 + (offset & 0x3ff)] = data;
}
-READ8_MEMBER(nes_x1_017_device::read_m)
+uint8_t nes_x1_017_device::read_m(offs_t offset)
{
LOG_MMC(("x1017 read_m, offset: %04x\n", offset));
@@ -465,5 +465,5 @@ READ8_MEMBER(nes_x1_017_device::read_m)
if (offset < 0x1400 && m_reg[2] == 0x84)
return m_x1_017_ram[0x1000 + (offset & 0x3ff)];
- return m_open_bus; // open bus
+ return get_open_bus(); // open bus
}
diff --git a/src/devices/bus/nes/taito.h b/src/devices/bus/nes/taito.h
index 8f3ccb2a8ee..b4efa553c86 100644
--- a/src/devices/bus/nes/taito.h
+++ b/src/devices/bus/nes/taito.h
@@ -16,8 +16,8 @@ public:
// construction/destruction
nes_tc0190fmc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(tc0190fmc_write);
- virtual DECLARE_WRITE8_MEMBER(write_h) override { tc0190fmc_write(space, offset, data, mem_mask); }
+ void tc0190fmc_write(offs_t offset, uint8_t data);
+ virtual void write_h(offs_t offset, uint8_t data) override { tc0190fmc_write(offset, data); }
virtual void pcb_reset() override;
@@ -37,7 +37,7 @@ public:
// construction/destruction
nes_tc0190fmc_pal16r4_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void hblank_irq(int scanline, int vblank, int blanked) override;
virtual void pcb_reset() override;
@@ -60,8 +60,8 @@ public:
// construction/destruction
nes_x1_005_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -84,8 +84,8 @@ public:
// construction/destruction
nes_x1_017_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_m) override;
- virtual DECLARE_WRITE8_MEMBER(write_m) override;
+ virtual uint8_t read_m(offs_t offset) override;
+ virtual void write_m(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/tengen.cpp b/src/devices/bus/nes/tengen.cpp
index 9cef09434a0..f6228685796 100644
--- a/src/devices/bus/nes/tengen.cpp
+++ b/src/devices/bus/nes/tengen.cpp
@@ -126,7 +126,7 @@ void nes_tengen032_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_tengen008_device::write_h)
+void nes_tengen008_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("tengen008 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -240,7 +240,7 @@ void nes_tengen032_device::set_chr()
chr_cb(7 ^ chr_page, m_mmc_vrom_bank[5], CHRROM);
}
-WRITE8_MEMBER(nes_tengen032_device::tengen032_write)
+void nes_tengen032_device::tengen032_write(offs_t offset, uint8_t data)
{
uint8_t helper, cmd;
LOG_MMC(("tengen032_write, offset: %04x, data: %02x\n", offset, data));
@@ -359,7 +359,7 @@ void nes_tengen037_device::chr_cb( int start, int bank, int source )
}
-WRITE8_MEMBER(nes_tengen037_device::write_h)
+void nes_tengen037_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("tengen037 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -369,7 +369,7 @@ WRITE8_MEMBER(nes_tengen037_device::write_h)
break;
default:
- tengen032_write(space, offset, data, mem_mask);
+ tengen032_write(offset, data);
break;
}
}
diff --git a/src/devices/bus/nes/tengen.h b/src/devices/bus/nes/tengen.h
index dce41f4fbb4..6d651339f86 100644
--- a/src/devices/bus/nes/tengen.h
+++ b/src/devices/bus/nes/tengen.h
@@ -14,7 +14,7 @@ public:
// construction/destruction
nes_tengen008_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -32,8 +32,8 @@ public:
// construction/destruction
nes_tengen032_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(tengen032_write);
- virtual DECLARE_WRITE8_MEMBER(write_h) override { tengen032_write(space, offset, data, mem_mask); }
+ void tengen032_write(offs_t offset, uint8_t data);
+ virtual void write_h(offs_t offset, uint8_t data) override { tengen032_write(offset, data); }
virtual void hblank_irq(int scanline, int vblank, int blanked) override;
virtual void pcb_reset() override;
@@ -74,7 +74,7 @@ public:
nes_tengen037_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void chr_cb(int start, int bank, int source) override;
protected:
diff --git a/src/devices/bus/nes/txc.cpp b/src/devices/bus/nes/txc.cpp
index f3ab8efc5f9..4149c6262a3 100644
--- a/src/devices/bus/nes/txc.cpp
+++ b/src/devices/bus/nes/txc.cpp
@@ -139,7 +139,7 @@ void nes_txc_commandos_device::pcb_reset()
-------------------------------------------------*/
-WRITE8_MEMBER(nes_txc_22211_device::write_l)
+void nes_txc_22211_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("TXC 22111 write_l, offset: %04x, data: %02x\n", offset, data));
@@ -147,7 +147,7 @@ WRITE8_MEMBER(nes_txc_22211_device::write_l)
m_reg[offset & 0x03] = data;
}
-READ8_MEMBER(nes_txc_22211_device::read_l)
+uint8_t nes_txc_22211_device::read_l(offs_t offset)
{
LOG_MMC(("TXC 22111 read_l, offset: %04x\n", offset));
@@ -157,7 +157,7 @@ READ8_MEMBER(nes_txc_22211_device::read_l)
return 0x00;
}
-WRITE8_MEMBER(nes_txc_22211_device::write_h)
+void nes_txc_22211_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("TXC 22111 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -180,7 +180,7 @@ WRITE8_MEMBER(nes_txc_22211_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_txc_dumarc_device::write_h)
+void nes_txc_dumarc_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("TXC Du Ma Racing write_h, offset: %04x, data: %02x\n", offset, data));
@@ -203,7 +203,7 @@ WRITE8_MEMBER(nes_txc_dumarc_device::write_h)
-------------------------------------------------*/
-READ8_MEMBER(nes_txc_mjblock_device::read_l)
+uint8_t nes_txc_mjblock_device::read_l(offs_t offset)
{
LOG_MMC(("TXC mjblock read_l, offset: %04x\n", offset));
@@ -226,7 +226,7 @@ READ8_MEMBER(nes_txc_mjblock_device::read_l)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_txc_strikew_device::write_h)
+void nes_txc_strikew_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("TXC Strike Wolf write_h, offset: %04x, data: %02x\n", offset, data));
@@ -256,12 +256,12 @@ WRITE8_MEMBER(nes_txc_strikew_device::write_h)
-------------------------------------------------*/
-READ8_MEMBER(nes_txc_commandos_device::read_l)
+uint8_t nes_txc_commandos_device::read_l(offs_t offset)
{
return 0x50;
}
-WRITE8_MEMBER(nes_txc_commandos_device::write_h)
+void nes_txc_commandos_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("TXC Commandos write_h, offset: %04x, data: %02x\n", offset, data));
diff --git a/src/devices/bus/nes/txc.h b/src/devices/bus/nes/txc.h
index f4b875b51ba..9ad5e2807dc 100644
--- a/src/devices/bus/nes/txc.h
+++ b/src/devices/bus/nes/txc.h
@@ -16,9 +16,9 @@ public:
// construction/destruction
nes_txc_22211_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -41,7 +41,7 @@ public:
nes_txc_dumarc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
};
@@ -54,7 +54,7 @@ public:
nes_txc_mjblock_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_READ8_MEMBER(read_l) override;
+ virtual uint8_t read_l(offs_t offset) override;
};
@@ -66,7 +66,7 @@ public:
// construction/destruction
nes_txc_strikew_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -84,8 +84,8 @@ public:
// construction/destruction
nes_txc_commandos_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/waixing.cpp b/src/devices/bus/nes/waixing.cpp
index 791779f0a76..3706d64b26e 100644
--- a/src/devices/bus/nes/waixing.cpp
+++ b/src/devices/bus/nes/waixing.cpp
@@ -433,7 +433,7 @@ void nes_waixing_a1_device::chr_cb(int start, int bank, int source)
chr1_x(start, bank, chr_src);
}
-WRITE8_MEMBER(nes_waixing_a_device::waixing_write)
+void nes_waixing_a_device::waixing_write(offs_t offset, uint8_t data)
{
LOG_MMC(("waixing_write, offset: %04x, data: %02x\n", offset, data));
@@ -447,12 +447,12 @@ WRITE8_MEMBER(nes_waixing_a_device::waixing_write)
break;
default:
- txrom_write(space, offset, data, mem_mask);
+ txrom_write(offset, data);
break;
}
}
-READ8_MEMBER(nes_waixing_a_device::read_l)
+uint8_t nes_waixing_a_device::read_l(offs_t offset)
{
LOG_MMC(("waixing read_l, offset: %04x\n", offset));
offset += 0x100;
@@ -462,7 +462,7 @@ READ8_MEMBER(nes_waixing_a_device::read_l)
return 0xff;
}
-WRITE8_MEMBER(nes_waixing_a_device::write_l)
+void nes_waixing_a_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("waixing write_l, offset: %04x, data: %02x\n", offset, data));
offset += 0x100;
@@ -597,7 +597,7 @@ void nes_waixing_f_device::set_prg( int prg_base, int prg_mask )
prg_cb(3, m_mmc_prg_bank[3]);
}
-WRITE8_MEMBER(nes_waixing_f_device::write_h)
+void nes_waixing_f_device::write_h(offs_t offset, uint8_t data)
{
uint8_t cmd;
LOG_MMC(("waixing_f write_h, offset: %04x, data: %02x\n", offset, data));
@@ -628,7 +628,7 @@ WRITE8_MEMBER(nes_waixing_f_device::write_h)
break;
default:
- waixing_write(space, offset, data, mem_mask);
+ waixing_write(offset, data);
break;
}
}
@@ -668,7 +668,7 @@ void nes_waixing_g_device::set_chr(uint8_t chr, int chr_base, int chr_mask)
chr_cb(chr_page ^ 7, chr_base | (m_mmc_vrom_bank[5] & chr_mask), chr);
}
-WRITE8_MEMBER(nes_waixing_g_device::write_h)
+void nes_waixing_g_device::write_h(offs_t offset, uint8_t data)
{
uint8_t cmd;
LOG_MMC(("waixing_g write_h, offset: %04x, data: %02x\n", offset, data));
@@ -699,7 +699,7 @@ WRITE8_MEMBER(nes_waixing_g_device::write_h)
break;
default:
- waixing_write(space, offset, data, mem_mask);
+ waixing_write(offset, data);
break;
}
}
@@ -731,7 +731,7 @@ void nes_waixing_h_device::chr_cb(int start, int bank, int source)
chr1_x(start, bank, source);
}
-WRITE8_MEMBER(nes_waixing_h_device::write_h)
+void nes_waixing_h_device::write_h(offs_t offset, uint8_t data)
{
uint8_t cmd;
LOG_MMC(("waixing_h write_h, offset: %04x, data: %02x\n", offset, data));
@@ -767,12 +767,12 @@ WRITE8_MEMBER(nes_waixing_h_device::write_h)
break;
default:
- txrom_write(space, offset, data, mem_mask);
+ txrom_write(offset, data);
break;
}
}
-WRITE8_MEMBER(nes_waixing_h1_device::write_h)
+void nes_waixing_h1_device::write_h(offs_t offset, uint8_t data)
{
uint8_t cmd;
LOG_MMC(("waixing_h1 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -805,7 +805,7 @@ WRITE8_MEMBER(nes_waixing_h1_device::write_h)
break;
default:
- txrom_write(space, offset, data, mem_mask);
+ txrom_write(offset, data);
break;
}
}
@@ -832,7 +832,7 @@ void nes_waixing_j_device::set_prg( int prg_base, int prg_mask )
prg_cb(3, m_reg[3]);
}
-WRITE8_MEMBER(nes_waixing_j_device::write_h)
+void nes_waixing_j_device::write_h(offs_t offset, uint8_t data)
{
uint8_t cmd;
LOG_MMC(("waixing_f write_h, offset: %04x, data: %02x\n", offset, data));
@@ -862,7 +862,7 @@ WRITE8_MEMBER(nes_waixing_j_device::write_h)
// break;
default:
- waixing_write(space, offset, data, mem_mask);
+ waixing_write(offset, data);
break;
}
}
@@ -887,7 +887,7 @@ void nes_waixing_sh2_device::chr_cb(int start, int bank, int source)
chr4_4(m_reg[1], m_reg[1] ? CHRRAM : CHRROM);
}
-READ8_MEMBER(nes_waixing_sh2_device::chr_r)
+uint8_t nes_waixing_sh2_device::chr_r(offs_t offset)
{
int bank = offset >> 10;
uint8_t val = m_chr_access[bank][offset & 0x3ff]; // this would be usual return value
@@ -940,7 +940,7 @@ void nes_waixing_sec_device::chr_cb(int start, int bank, int source)
chr1_x(start, bank, source);
}
-WRITE8_MEMBER(nes_waixing_sec_device::write_l)
+void nes_waixing_sec_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("waixing_sec write_l, offset: %04x, data: %02x\n", offset, data));
offset += 0x100;
@@ -979,7 +979,7 @@ void nes_waixing_sgz_device::hblank_irq(int scanline, int vblank, int blanked)
}
}
-WRITE8_MEMBER(nes_waixing_sgz_device::write_h)
+void nes_waixing_sgz_device::write_h(offs_t offset, uint8_t data)
{
uint8_t helper, bank;
LOG_MMC(("waixing_sgz write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1047,7 +1047,7 @@ WRITE8_MEMBER(nes_waixing_sgz_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_waixing_sgzlz_device::write_l)
+void nes_waixing_sgzlz_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("waixing_sgzlz write_l, offset: %04x, data: %02x\n", offset, data));
if (offset >= 0x700 && offset <= 0xEFF)
@@ -1112,7 +1112,7 @@ WRITE8_MEMBER(nes_waixing_sgzlz_device::write_l)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_waixing_ffv_device::write_l)
+void nes_waixing_ffv_device::write_l(offs_t offset, uint8_t data)
{
uint8_t helper;
LOG_MMC(("waixing_ffv write_l, offset: %04x, data: %02x\n", offset, data));
@@ -1161,7 +1161,7 @@ WRITE8_MEMBER(nes_waixing_ffv_device::write_l)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_waixing_wxzs_device::write_h)
+void nes_waixing_wxzs_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("waixing_zs write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1191,7 +1191,7 @@ WRITE8_MEMBER(nes_waixing_wxzs_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_waixing_dq8_device::write_h)
+void nes_waixing_dq8_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC(("waixing_dq8 write_h, offset: %04x, data: %02x\n", offset, data));
@@ -1212,7 +1212,7 @@ WRITE8_MEMBER(nes_waixing_dq8_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_waixing_wxzs2_device::write_h)
+void nes_waixing_wxzs2_device::write_h(offs_t offset, uint8_t data)
{
uint8_t flip = (data & 0x80) >> 7;
uint8_t helper = (data & 0x7f) << 1;
@@ -1265,7 +1265,7 @@ WRITE8_MEMBER(nes_waixing_wxzs2_device::write_h)
-------------------------------------------------*/
-WRITE8_MEMBER(nes_waixing_fs304_device::write_l)
+void nes_waixing_fs304_device::write_l(offs_t offset, uint8_t data)
{
LOG_MMC(("fs304 write_l, offset: %04x, data: %02x\n", offset, data));
int bank;
diff --git a/src/devices/bus/nes/waixing.h b/src/devices/bus/nes/waixing.h
index 5488973a14c..bb6fcaf831a 100644
--- a/src/devices/bus/nes/waixing.h
+++ b/src/devices/bus/nes/waixing.h
@@ -16,10 +16,10 @@ public:
// construction/destruction
nes_waixing_a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(waixing_write);
- virtual DECLARE_WRITE8_MEMBER(write_h) override { waixing_write(space, offset, data, mem_mask); }
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void waixing_write(offs_t offset, uint8_t data);
+ virtual void write_h(offs_t offset, uint8_t data) override { waixing_write(offset, data); }
virtual void chr_cb(int start, int bank, int source) override;
virtual void pcb_reset() override;
@@ -109,7 +109,7 @@ public:
nes_waixing_f_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void prg_cb(int start, int bank) override;
virtual void chr_cb(int start, int bank, int source) override;
@@ -129,7 +129,7 @@ public:
nes_waixing_g_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void chr_cb(int start, int bank, int source) override;
virtual void pcb_reset() override;
@@ -155,7 +155,7 @@ protected:
nes_waixing_h_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
};
@@ -168,7 +168,7 @@ public:
nes_waixing_h1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
// This variant does not ignore the wram protect!
};
@@ -194,7 +194,7 @@ public:
// construction/destruction
nes_waixing_j_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -217,7 +217,7 @@ public:
// device-level overrides
virtual void device_start() override;
- virtual DECLARE_READ8_MEMBER(chr_r) override;
+ virtual uint8_t chr_r(offs_t offset) override;
virtual void chr_cb(int start, int bank, int source) override;
virtual void pcb_reset() override;
@@ -235,7 +235,7 @@ public:
// construction/destruction
nes_waixing_sec_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
virtual void prg_cb(int start, int bank) override;
virtual void chr_cb(int start, int bank, int source) override;
@@ -257,7 +257,7 @@ public:
// construction/destruction
nes_waixing_sgz_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void hblank_irq(int scanline, int vblank, int blanked) override;
virtual void pcb_reset() override;
@@ -281,7 +281,7 @@ public:
// construction/destruction
nes_waixing_sgzlz_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -301,7 +301,7 @@ public:
// construction/destruction
nes_waixing_ffv_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -321,7 +321,7 @@ public:
// construction/destruction
nes_waixing_wxzs_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -339,7 +339,7 @@ public:
// construction/destruction
nes_waixing_dq8_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -357,7 +357,7 @@ public:
// construction/destruction
nes_waixing_wxzs2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
@@ -375,7 +375,7 @@ public:
// construction/destruction
nes_waixing_fs304_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
diff --git a/src/devices/bus/nes/zemina.cpp b/src/devices/bus/nes/zemina.cpp
index bb4b3b61bc0..22741967572 100644
--- a/src/devices/bus/nes/zemina.cpp
+++ b/src/devices/bus/nes/zemina.cpp
@@ -80,7 +80,7 @@ void nes_zemina_device::pcb_reset()
write
-------------------------------------------------*/
-WRITE8_MEMBER(nes_zemina_device::write_h)
+void nes_zemina_device::write_h(offs_t offset, uint8_t data)
{
LOG_MMC("zemina write_h, offset: %04x, data: %02x\n", offset, data);
diff --git a/src/devices/bus/nes/zemina.h b/src/devices/bus/nes/zemina.h
index 87d170d053d..752c7f1382d 100644
--- a/src/devices/bus/nes/zemina.h
+++ b/src/devices/bus/nes/zemina.h
@@ -20,7 +20,7 @@ public:
// device-level overrides
virtual void device_start() override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
};
diff --git a/src/devices/bus/nes_ctrl/fckeybrd.cpp b/src/devices/bus/nes_ctrl/fckeybrd.cpp
index 9c81fbea67e..5633254c8fb 100644
--- a/src/devices/bus/nes_ctrl/fckeybrd.cpp
+++ b/src/devices/bus/nes_ctrl/fckeybrd.cpp
@@ -123,11 +123,12 @@ ioport_constructor nes_fckeybrd_device::device_input_ports() const
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(nes_fckeybrd_device::device_add_mconfig)
- MCFG_CASSETTE_ADD("tape")
- MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED)
- MCFG_CASSETTE_INTERFACE("fc_cass")
-MACHINE_CONFIG_END
+void nes_fckeybrd_device::device_add_mconfig(machine_config &config)
+{
+ CASSETTE(config, m_cassette);
+ m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED);
+ m_cassette->set_interface("fc_cass");
+}
//**************************************************************************
diff --git a/src/devices/bus/nes_ctrl/miracle.cpp b/src/devices/bus/nes_ctrl/miracle.cpp
index 6f41774f1e0..d9f445f58ef 100644
--- a/src/devices/bus/nes_ctrl/miracle.cpp
+++ b/src/devices/bus/nes_ctrl/miracle.cpp
@@ -22,12 +22,12 @@
DEFINE_DEVICE_TYPE(NES_MIRACLE, nes_miracle_device, "nes_miracle", "NES Miracle Piano Controller")
-MACHINE_CONFIG_START(nes_miracle_device::device_add_mconfig)
- MCFG_MIDI_PORT_ADD("mdin", midiin_slot, "midiin")
- MCFG_MIDI_RX_HANDLER(WRITELINE(*this, nes_miracle_device, rx_w))
+void nes_miracle_device::device_add_mconfig(machine_config &config)
+{
+ MIDI_PORT(config, "mdin", midiin_slot, "midiin").rxd_handler().set(FUNC(nes_miracle_device::rx_w));
- MCFG_MIDI_PORT_ADD("mdout", midiout_slot, "midiout")
-MACHINE_CONFIG_END
+ MIDI_PORT(config, "mdout", midiout_slot, "midiout");
+}
//-------------------------------------------------
diff --git a/src/devices/bus/newbrain/eim.cpp b/src/devices/bus/newbrain/eim.cpp
index 2bafd008eb6..3f0b7a19ee0 100644
--- a/src/devices/bus/newbrain/eim.cpp
+++ b/src/devices/bus/newbrain/eim.cpp
@@ -67,14 +67,15 @@ const tiny_rom_entry *newbrain_eim_device::device_rom_region() const
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(newbrain_eim_device::device_add_mconfig)
+void newbrain_eim_device::device_add_mconfig(machine_config &config)
+{
// devices
Z80CTC(config, m_ctc, XTAL(16'000'000)/8);
m_ctc->zc_callback<0>().set(m_acia, FUNC(acia6850_device::write_rxc));
m_ctc->zc_callback<1>().set(m_acia, FUNC(acia6850_device::write_txc));
m_ctc->zc_callback<2>().set(FUNC(newbrain_eim_device::ctc_z2_w));
- MCFG_TIMER_DRIVER_ADD_PERIODIC("z80ctc_c2", newbrain_eim_device, ctc_c2_tick, attotime::from_hz(XTAL(16'000'000)/4/13))
+ TIMER(config, "z80ctc_c2").configure_periodic(FUNC(newbrain_eim_device::ctc_c2_tick), attotime::from_hz(XTAL(16'000'000)/4/13));
adc0809_device &adc(ADC0809(config, ADC0809_TAG, 500000));
adc.eoc_callback().set(FUNC(newbrain_eim_device::adc_eoc_w));
@@ -92,11 +93,11 @@ MACHINE_CONFIG_START(newbrain_eim_device::device_add_mconfig)
RS232_PORT(config, RS232_TAG, default_rs232_devices, nullptr);
- MCFG_NEWBRAIN_EXPANSION_SLOT_ADD(NEWBRAIN_EXPANSION_SLOT_TAG, XTAL(16'000'000)/8, newbrain_expansion_cards, "fdc")
+ NEWBRAIN_EXPANSION_SLOT(config, m_exp, XTAL(16'000'000)/8, newbrain_expansion_cards, "fdc");
// internal ram
RAM(config, RAM_TAG).set_default_size("96K");
-MACHINE_CONFIG_END
+}
//**************************************************************************
@@ -144,9 +145,9 @@ void newbrain_eim_device::device_reset()
// mreq_r - memory request read
//-------------------------------------------------
-uint8_t newbrain_eim_device::mreq_r(address_space &space, offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh)
+uint8_t newbrain_eim_device::mreq_r(offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh)
{
- return m_exp->mreq_r(space, offset, data, romov, exrm, raminh);
+ return m_exp->mreq_r(offset, data, romov, exrm, raminh);
}
@@ -154,9 +155,9 @@ uint8_t newbrain_eim_device::mreq_r(address_space &space, offs_t offset, uint8_t
// mreq_w - memory request write
//-------------------------------------------------
-void newbrain_eim_device::mreq_w(address_space &space, offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh)
+void newbrain_eim_device::mreq_w(offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh)
{
- m_exp->mreq_w(space, offset, data, romov, exrm, raminh);
+ m_exp->mreq_w(offset, data, romov, exrm, raminh);
}
@@ -164,9 +165,9 @@ void newbrain_eim_device::mreq_w(address_space &space, offs_t offset, uint8_t da
// iorq_r - I/O request read
//-------------------------------------------------
-uint8_t newbrain_eim_device::iorq_r(address_space &space, offs_t offset, uint8_t data, bool &prtov)
+uint8_t newbrain_eim_device::iorq_r(offs_t offset, uint8_t data, bool &prtov)
{
- return m_exp->iorq_r(space, offset, data, prtov);
+ return m_exp->iorq_r(offset, data, prtov);
}
@@ -174,9 +175,9 @@ uint8_t newbrain_eim_device::iorq_r(address_space &space, offs_t offset, uint8_t
// iorq_w - I/O request write
//-------------------------------------------------
-void newbrain_eim_device::iorq_w(address_space &space, offs_t offset, uint8_t data, bool &prtov)
+void newbrain_eim_device::iorq_w(offs_t offset, uint8_t data, bool &prtov)
{
- m_exp->iorq_w(space, offset, data, prtov);
+ m_exp->iorq_w(offset, data, prtov);
}
diff --git a/src/devices/bus/newbrain/eim.h b/src/devices/bus/newbrain/eim.h
index 3e83b22112e..19b456338fd 100644
--- a/src/devices/bus/newbrain/eim.h
+++ b/src/devices/bus/newbrain/eim.h
@@ -48,10 +48,10 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_newbrain_expansion_slot_interface overrides
- virtual uint8_t mreq_r(address_space &space, offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh) override;
- virtual void mreq_w(address_space &space, offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh) override;
- virtual uint8_t iorq_r(address_space &space, offs_t offset, uint8_t data, bool &prtov) override;
- virtual void iorq_w(address_space &space, offs_t offset, uint8_t data, bool &prtov) override;
+ virtual uint8_t mreq_r(offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh) override;
+ virtual void mreq_w(offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh) override;
+ virtual uint8_t iorq_r(offs_t offset, uint8_t data, bool &prtov) override;
+ virtual void iorq_w(offs_t offset, uint8_t data, bool &prtov) override;
private:
DECLARE_WRITE_LINE_MEMBER( acia_interrupt );
diff --git a/src/devices/bus/newbrain/exp.cpp b/src/devices/bus/newbrain/exp.cpp
index b4675c3b89f..a1a9e2210ed 100644
--- a/src/devices/bus/newbrain/exp.cpp
+++ b/src/devices/bus/newbrain/exp.cpp
@@ -77,11 +77,11 @@ void newbrain_expansion_slot_device::device_reset()
// mreq_r - memory request read
//-------------------------------------------------
-uint8_t newbrain_expansion_slot_device::mreq_r(address_space &space, offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh)
+uint8_t newbrain_expansion_slot_device::mreq_r(offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh)
{
if (m_card != nullptr)
{
- data = m_card->mreq_r(space, offset, data, romov, exrm, raminh);
+ data = m_card->mreq_r(offset, data, romov, exrm, raminh);
}
return data;
@@ -92,11 +92,11 @@ uint8_t newbrain_expansion_slot_device::mreq_r(address_space &space, offs_t offs
// mreq_w - memory request write
//-------------------------------------------------
-void newbrain_expansion_slot_device::mreq_w(address_space &space, offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh)
+void newbrain_expansion_slot_device::mreq_w(offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh)
{
if (m_card != nullptr)
{
- m_card->mreq_w(space, offset, data, romov, exrm, raminh);
+ m_card->mreq_w(offset, data, romov, exrm, raminh);
}
}
@@ -105,11 +105,11 @@ void newbrain_expansion_slot_device::mreq_w(address_space &space, offs_t offset,
// iorq_r - I/O request read
//-------------------------------------------------
-uint8_t newbrain_expansion_slot_device::iorq_r(address_space &space, offs_t offset, uint8_t data, bool &prtov)
+uint8_t newbrain_expansion_slot_device::iorq_r(offs_t offset, uint8_t data, bool &prtov)
{
if (m_card != nullptr)
{
- data = m_card->iorq_r(space, offset, data, prtov);
+ data = m_card->iorq_r(offset, data, prtov);
}
return data;
@@ -120,11 +120,11 @@ uint8_t newbrain_expansion_slot_device::iorq_r(address_space &space, offs_t offs
// iorq_w - I/O request write
//-------------------------------------------------
-void newbrain_expansion_slot_device::iorq_w(address_space &space, offs_t offset, uint8_t data, bool &prtov)
+void newbrain_expansion_slot_device::iorq_w(offs_t offset, uint8_t data, bool &prtov)
{
if (m_card != nullptr)
{
- m_card->iorq_w(space, offset, data, prtov);
+ m_card->iorq_w(offset, data, prtov);
}
}
diff --git a/src/devices/bus/newbrain/exp.h b/src/devices/bus/newbrain/exp.h
index e3ab89a35ef..e9e56c1bd66 100644
--- a/src/devices/bus/newbrain/exp.h
+++ b/src/devices/bus/newbrain/exp.h
@@ -49,17 +49,6 @@
#define NEWBRAIN_EXPANSION_SLOT_TAG "exp"
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_NEWBRAIN_EXPANSION_SLOT_ADD(_tag, _clock, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, NEWBRAIN_EXPANSION_SLOT, _clock) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -73,14 +62,24 @@ class newbrain_expansion_slot_device : public device_t,
{
public:
// construction/destruction
+ template <typename T>
+ newbrain_expansion_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock, T &&opts, char const *dflt)
+ : newbrain_expansion_slot_device(mconfig, tag, owner, clock)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
newbrain_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// computer interface
- uint8_t mreq_r(address_space &space, offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh);
- void mreq_w(address_space &space, offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh);
+ uint8_t mreq_r(offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh);
+ void mreq_w(offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh);
- uint8_t iorq_r(address_space &space, offs_t offset, uint8_t data, bool &prtov);
- void iorq_w(address_space &space, offs_t offset, uint8_t data, bool &prtov);
+ uint8_t iorq_r(offs_t offset, uint8_t data, bool &prtov);
+ void iorq_w(offs_t offset, uint8_t data, bool &prtov);
protected:
// device-level overrides
@@ -98,12 +97,12 @@ class device_newbrain_expansion_slot_interface : public device_slot_card_interfa
{
public:
// memory access
- virtual uint8_t mreq_r(address_space &space, offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh) { return data; }
- virtual void mreq_w(address_space &space, offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh) { }
+ virtual uint8_t mreq_r(offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh) { return data; }
+ virtual void mreq_w(offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh) { }
// I/O access
- virtual uint8_t iorq_r(address_space &space, offs_t offset, uint8_t data, bool &prtov) { return data; }
- virtual void iorq_w(address_space &space, offs_t offset, uint8_t data, bool &prtov) { }
+ virtual uint8_t iorq_r(offs_t offset, uint8_t data, bool &prtov) { return data; }
+ virtual void iorq_w(offs_t offset, uint8_t data, bool &prtov) { }
protected:
// construction/destruction
diff --git a/src/devices/bus/newbrain/fdc.cpp b/src/devices/bus/newbrain/fdc.cpp
index 597def0509b..7cadbd0bddd 100644
--- a/src/devices/bus/newbrain/fdc.cpp
+++ b/src/devices/bus/newbrain/fdc.cpp
@@ -104,21 +104,22 @@ static void newbrain_floppies(device_slot_interface &device)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(newbrain_fdc_device::device_add_mconfig)
- MCFG_DEVICE_ADD(Z80_TAG, Z80, XTAL(4'000'000))
- MCFG_DEVICE_PROGRAM_MAP(newbrain_fdc_mem)
- MCFG_DEVICE_IO_MAP(newbrain_fdc_io)
+void newbrain_fdc_device::device_add_mconfig(machine_config &config)
+{
+ Z80(config, m_maincpu, XTAL(4'000'000));
+ m_maincpu->set_addrmap(AS_PROGRAM, &newbrain_fdc_device::newbrain_fdc_mem);
+ m_maincpu->set_addrmap(AS_IO, &newbrain_fdc_device::newbrain_fdc_io);
UPD765A(config, m_fdc, 8'000'000, false, true);
m_fdc->intrq_wr_callback().set(FUNC(newbrain_fdc_device::fdc_int_w));
- MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", newbrain_floppies, "525dd", floppy_image_device::default_floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":1", newbrain_floppies, "525dd", floppy_image_device::default_floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":2", newbrain_floppies, nullptr, floppy_image_device::default_floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":3", newbrain_floppies, nullptr, floppy_image_device::default_floppy_formats)
+ FLOPPY_CONNECTOR(config, UPD765_TAG ":0", newbrain_floppies, "525dd", floppy_image_device::default_floppy_formats);
+ FLOPPY_CONNECTOR(config, UPD765_TAG ":1", newbrain_floppies, "525dd", floppy_image_device::default_floppy_formats);
+ FLOPPY_CONNECTOR(config, UPD765_TAG ":2", newbrain_floppies, nullptr, floppy_image_device::default_floppy_formats);
+ FLOPPY_CONNECTOR(config, UPD765_TAG ":3", newbrain_floppies, nullptr, floppy_image_device::default_floppy_formats);
- MCFG_NEWBRAIN_EXPANSION_SLOT_ADD(NEWBRAIN_EXPANSION_SLOT_TAG, XTAL(16'000'000)/8, newbrain_expansion_cards, nullptr)
-MACHINE_CONFIG_END
+ NEWBRAIN_EXPANSION_SLOT(config, m_exp, XTAL(16'000'000)/8, newbrain_expansion_cards, nullptr);
+}
//**************************************************************************
@@ -176,9 +177,9 @@ void newbrain_fdc_device::device_reset()
// mreq_r - memory request read
//-------------------------------------------------
-uint8_t newbrain_fdc_device::mreq_r(address_space &space, offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh)
+uint8_t newbrain_fdc_device::mreq_r(offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh)
{
- return m_exp->mreq_r(space, offset, data, romov, exrm, raminh);
+ return m_exp->mreq_r(offset, data, romov, exrm, raminh);
}
@@ -186,9 +187,9 @@ uint8_t newbrain_fdc_device::mreq_r(address_space &space, offs_t offset, uint8_t
// mreq_w - memory request write
//-------------------------------------------------
-void newbrain_fdc_device::mreq_w(address_space &space, offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh)
+void newbrain_fdc_device::mreq_w(offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh)
{
- m_exp->mreq_w(space, offset, data, romov, exrm, raminh);
+ m_exp->mreq_w(offset, data, romov, exrm, raminh);
}
@@ -196,9 +197,9 @@ void newbrain_fdc_device::mreq_w(address_space &space, offs_t offset, uint8_t da
// iorq_r - I/O request read
//-------------------------------------------------
-uint8_t newbrain_fdc_device::iorq_r(address_space &space, offs_t offset, uint8_t data, bool &prtov)
+uint8_t newbrain_fdc_device::iorq_r(offs_t offset, uint8_t data, bool &prtov)
{
- return m_exp->iorq_r(space, offset, data, prtov);
+ return m_exp->iorq_r(offset, data, prtov);
}
@@ -206,13 +207,13 @@ uint8_t newbrain_fdc_device::iorq_r(address_space &space, offs_t offset, uint8_t
// iorq_w - I/O request write
//-------------------------------------------------
-void newbrain_fdc_device::iorq_w(address_space &space, offs_t offset, uint8_t data, bool &prtov)
+void newbrain_fdc_device::iorq_w(offs_t offset, uint8_t data, bool &prtov)
{
- m_exp->iorq_w(space, offset, data, prtov);
+ m_exp->iorq_w(offset, data, prtov);
if ((offset & 0x20f) == 0x20f)
{
- io_dec_w(space, 0, data);
+ io_dec_w(data);
}
}
@@ -244,7 +245,7 @@ WRITE_LINE_MEMBER( newbrain_fdc_device::fdc_int_w )
// fdc_auxiliary_w -
//-------------------------------------------------
-WRITE8_MEMBER( newbrain_fdc_device::fdc_auxiliary_w )
+void newbrain_fdc_device::fdc_auxiliary_w(uint8_t data)
{
/*
@@ -278,7 +279,7 @@ WRITE8_MEMBER( newbrain_fdc_device::fdc_auxiliary_w )
// fdc_control_r -
//-------------------------------------------------
-READ8_MEMBER( newbrain_fdc_device::fdc_control_r )
+uint8_t newbrain_fdc_device::fdc_control_r()
{
/*
@@ -303,7 +304,7 @@ READ8_MEMBER( newbrain_fdc_device::fdc_control_r )
// io_dec_w - 0x20f
//-------------------------------------------------
-WRITE8_MEMBER( newbrain_fdc_device::io_dec_w )
+void newbrain_fdc_device::io_dec_w(uint8_t data)
{
/*
diff --git a/src/devices/bus/newbrain/fdc.h b/src/devices/bus/newbrain/fdc.h
index e5a40ae0748..e5d6665a078 100644
--- a/src/devices/bus/newbrain/fdc.h
+++ b/src/devices/bus/newbrain/fdc.h
@@ -40,17 +40,17 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_newbrain_expansion_slot_interface overrides
- virtual uint8_t mreq_r(address_space &space, offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh) override;
- virtual void mreq_w(address_space &space, offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh) override;
- virtual uint8_t iorq_r(address_space &space, offs_t offset, uint8_t data, bool &prtov) override;
- virtual void iorq_w(address_space &space, offs_t offset, uint8_t data, bool &prtov) override;
+ virtual uint8_t mreq_r(offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh) override;
+ virtual void mreq_w(offs_t offset, uint8_t data, bool &romov, int &exrm, bool &raminh) override;
+ virtual uint8_t iorq_r(offs_t offset, uint8_t data, bool &prtov) override;
+ virtual void iorq_w(offs_t offset, uint8_t data, bool &prtov) override;
private:
DECLARE_WRITE_LINE_MEMBER( fdc_int_w );
- DECLARE_WRITE8_MEMBER( fdc_auxiliary_w );
- DECLARE_READ8_MEMBER( fdc_control_r );
- DECLARE_WRITE8_MEMBER( io_dec_w );
+ void fdc_auxiliary_w(uint8_t data);
+ uint8_t fdc_control_r();
+ void io_dec_w(uint8_t data);
void newbrain_fdc_io(address_map &map);
void newbrain_fdc_mem(address_map &map);
diff --git a/src/devices/bus/nubus/nubus.cpp b/src/devices/bus/nubus/nubus.cpp
index b0fc2a4667d..dc7db80a2ef 100644
--- a/src/devices/bus/nubus/nubus.cpp
+++ b/src/devices/bus/nubus/nubus.cpp
@@ -70,23 +70,24 @@ nubus_device::nubus_device(const machine_config &mconfig, const char *tag, devic
nubus_device::nubus_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_maincpu(nullptr),
+ m_space(*this, finder_base::DUMMY_TAG, -1),
m_out_irq9_cb(*this),
m_out_irqa_cb(*this),
m_out_irqb_cb(*this),
m_out_irqc_cb(*this),
m_out_irqd_cb(*this),
- m_out_irqe_cb(*this),
- m_cputag(nullptr)
+ m_out_irqe_cb(*this)
{
}
+
//-------------------------------------------------
-// device_start - device-specific startup
+// device_resolve_objects - resolve objects that
+// may be needed for other devices to set
+// initial conditions at start time
//-------------------------------------------------
-void nubus_device::device_start()
+void nubus_device::device_resolve_objects()
{
- m_maincpu = machine().device<cpu_device>(m_cputag);
// resolve callbacks
m_out_irq9_cb.resolve_safe();
m_out_irqa_cb.resolve_safe();
@@ -97,10 +98,10 @@ void nubus_device::device_start()
}
//-------------------------------------------------
-// device_reset - device-specific reset
+// device_start - device-specific startup
//-------------------------------------------------
-void nubus_device::device_reset()
+void nubus_device::device_start()
{
}
@@ -111,15 +112,14 @@ void nubus_device::add_nubus_card(device_nubus_card_interface *card)
void nubus_device::install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler, uint32_t mask)
{
- m_maincpu = machine().device<cpu_device>(m_cputag);
- int buswidth = m_maincpu->space_config(AS_PROGRAM)->data_width();
+ int buswidth = m_space->data_width();
switch(buswidth)
{
case 32:
- m_maincpu->space(AS_PROGRAM).install_readwrite_handler(start, end, rhandler, whandler, mask);
+ m_space->install_readwrite_handler(start, end, rhandler, whandler, mask);
break;
case 64:
- m_maincpu->space(AS_PROGRAM).install_readwrite_handler(start, end, rhandler, whandler, ((uint64_t)mask<<32)|mask);
+ m_space->install_readwrite_handler(start, end, rhandler, whandler, ((uint64_t)mask<<32)|mask);
break;
default:
fatalerror("NUBUS: Bus width %d not supported\n", buswidth);
@@ -128,15 +128,14 @@ void nubus_device::install_device(offs_t start, offs_t end, read8_delegate rhand
void nubus_device::install_device(offs_t start, offs_t end, read16_delegate rhandler, write16_delegate whandler, uint32_t mask)
{
- m_maincpu = machine().device<cpu_device>(m_cputag);
- int buswidth = m_maincpu->space_config(AS_PROGRAM)->data_width();
+ int buswidth = m_space->data_width();
switch(buswidth)
{
case 32:
- m_maincpu->space(AS_PROGRAM).install_readwrite_handler(start, end, rhandler, whandler, mask);
+ m_space->install_readwrite_handler(start, end, rhandler, whandler, mask);
break;
case 64:
- m_maincpu->space(AS_PROGRAM).install_readwrite_handler(start, end, rhandler, whandler, ((uint64_t)mask<<32)|mask);
+ m_space->install_readwrite_handler(start, end, rhandler, whandler, ((uint64_t)mask<<32)|mask);
break;
default:
fatalerror("NUBUS: Bus width %d not supported\n", buswidth);
@@ -145,15 +144,14 @@ void nubus_device::install_device(offs_t start, offs_t end, read16_delegate rhan
void nubus_device::install_device(offs_t start, offs_t end, read32_delegate rhandler, write32_delegate whandler, uint32_t mask)
{
- m_maincpu = machine().device<cpu_device>(m_cputag);
- int buswidth = m_maincpu->space_config(AS_PROGRAM)->data_width();
+ int buswidth = m_space->data_width();
switch(buswidth)
{
case 32:
- m_maincpu->space(AS_PROGRAM).install_readwrite_handler(start, end, rhandler, whandler, mask);
+ m_space->install_readwrite_handler(start, end, rhandler, whandler, mask);
break;
case 64:
- m_maincpu->space(AS_PROGRAM).install_readwrite_handler(start, end, rhandler, whandler, ((uint64_t)mask<<32)|mask);
+ m_space->install_readwrite_handler(start, end, rhandler, whandler, ((uint64_t)mask<<32)|mask);
break;
default:
fatalerror("NUBUS: Bus width %d not supported\n", buswidth);
@@ -162,15 +160,14 @@ void nubus_device::install_device(offs_t start, offs_t end, read32_delegate rhan
void nubus_device::install_readonly_device(offs_t start, offs_t end, read32_delegate rhandler, uint32_t mask)
{
- m_maincpu = machine().device<cpu_device>(m_cputag);
- int buswidth = m_maincpu->space_config(AS_PROGRAM)->data_width();
+ int buswidth = m_space->data_width();
switch(buswidth)
{
case 32:
- m_maincpu->space(AS_PROGRAM).install_read_handler(start, end, rhandler, mask);
+ m_space->install_read_handler(start, end, rhandler, mask);
break;
case 64:
- m_maincpu->space(AS_PROGRAM).install_read_handler(start, end, rhandler, ((uint64_t)mask<<32)|mask);
+ m_space->install_read_handler(start, end, rhandler, ((uint64_t)mask<<32)|mask);
break;
default:
fatalerror("NUBUS: Bus width %d not supported\n", buswidth);
@@ -179,15 +176,14 @@ void nubus_device::install_readonly_device(offs_t start, offs_t end, read32_dele
void nubus_device::install_writeonly_device(offs_t start, offs_t end, write32_delegate whandler, uint32_t mask)
{
- m_maincpu = machine().device<cpu_device>(m_cputag);
- int buswidth = m_maincpu->space_config(AS_PROGRAM)->data_width();
+ int buswidth = m_space->data_width();
switch(buswidth)
{
case 32:
- m_maincpu->space(AS_PROGRAM).install_write_handler(start, end, whandler, mask);
+ m_space->install_write_handler(start, end, whandler, mask);
break;
case 64:
- m_maincpu->space(AS_PROGRAM).install_write_handler(start, end, whandler, ((uint64_t)mask<<32)|mask);
+ m_space->install_write_handler(start, end, whandler, ((uint64_t)mask<<32)|mask);
break;
default:
fatalerror("NUBUS: Bus width %d not supported\n", buswidth);
@@ -197,9 +193,7 @@ 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)
{
// 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 );
+ m_space->install_readwrite_bank(start, end, 0, tag);
machine().root_device().membank(siblingtag(tag).c_str())->set_base(data);
}
diff --git a/src/devices/bus/nubus/nubus.h b/src/devices/bus/nubus/nubus.h
index 919f989ebfb..a1b9496fcf8 100644
--- a/src/devices/bus/nubus/nubus.h
+++ b/src/devices/bus/nubus/nubus.h
@@ -14,44 +14,6 @@
#pragma once
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_NUBUS_CPU(_cputag) \
- downcast<nubus_device &>(*device).set_cputag(_cputag);
-
-#define MCFG_NUBUS_OUT_IRQ9_CB(_devcb) \
- downcast<nubus_device &>(*device).set_out_irq9_callback(DEVCB_##_devcb);
-
-#define MCFG_NUBUS_OUT_IRQA_CB(_devcb) \
- downcast<nubus_device &>(*device).set_out_irqa_callback(DEVCB_##_devcb);
-
-#define MCFG_NUBUS_OUT_IRQB_CB(_devcb) \
- downcast<nubus_device &>(*device).set_out_irqb_callback(DEVCB_##_devcb);
-
-#define MCFG_NUBUS_OUT_IRQC_CB(_devcb) \
- downcast<nubus_device &>(*device).set_out_irqc_callback(DEVCB_##_devcb);
-
-#define MCFG_NUBUS_OUT_IRQD_CB(_devcb) \
- downcast<nubus_device &>(*device).set_out_irqd_callback(DEVCB_##_devcb);
-
-#define MCFG_NUBUS_OUT_IRQE_CB(_devcb) \
- downcast<nubus_device &>(*device).set_out_irqe_callback(DEVCB_##_devcb);
-
-#define MCFG_NUBUS_SLOT_ADD(_nbtag, _tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, NUBUS_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- downcast<nubus_slot_device &>(*device).set_nubus_slot(_nbtag, _tag);
-#define MCFG_NUBUS_SLOT_REMOVE(_tag) \
- MCFG_DEVICE_REMOVE(_tag)
-
-#define MCFG_NUBUS_ONBOARD_ADD(_nbtag, _tag, _dev_type, _def_inp) \
- MCFG_DEVICE_ADD(_tag, _dev_type, 0) \
- MCFG_DEVICE_INPUT_DEFAULTS(_def_inp) \
- downcast<device_nubus_card_interface &>(*device).set_nubus_tag(_nbtag, _tag);
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -100,13 +62,7 @@ public:
~nubus_device() { m_device_list.detach_all(); }
// inline configuration
- void set_cputag(const char *tag) { m_cputag = tag; }
- template <class Object> devcb_base &set_out_irq9_callback(Object &&cb) { return m_out_irq9_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_irqa_callback(Object &&cb) { return m_out_irqa_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_irqb_callback(Object &&cb) { return m_out_irqb_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_irqc_callback(Object &&cb) { return m_out_irqc_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_irqd_callback(Object &&cb) { return m_out_irqd_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_irqe_callback(Object &&cb) { return m_out_irqe_cb.set_callback(std::forward<Object>(cb)); }
+ template <typename T> void set_space(T &&tag, int spacenum) { m_space.set_tag(std::forward<T>(tag), spacenum); }
auto out_irq9_callback() { return m_out_irq9_cb.bind(); }
auto out_irqa_callback() { return m_out_irqa_cb.bind(); }
auto out_irqb_callback() { return m_out_irqb_cb.bind(); }
@@ -134,11 +90,11 @@ protected:
nubus_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
+ virtual void device_resolve_objects() override;
virtual void device_start() override;
- virtual void device_reset() override;
// internal state
- cpu_device *m_maincpu;
+ required_address_space m_space;
devcb_write_line m_out_irq9_cb;
devcb_write_line m_out_irqa_cb;
@@ -148,7 +104,6 @@ protected:
devcb_write_line m_out_irqe_cb;
simple_list<device_nubus_card_interface> m_device_list;
- const char *m_cputag;
};
diff --git a/src/devices/bus/nubus/nubus_48gc.cpp b/src/devices/bus/nubus/nubus_48gc.cpp
index e089e1986db..86f4fca21ec 100644
--- a/src/devices/bus/nubus/nubus_48gc.cpp
+++ b/src/devices/bus/nubus/nubus_48gc.cpp
@@ -39,15 +39,16 @@ DEFINE_DEVICE_TYPE(NUBUS_824GC, nubus_824gc_device, "nb_824gc", "Apple 8*24 vide
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(jmfb_device::device_add_mconfig)
- MCFG_SCREEN_ADD(GC48_SCREEN_NAME, RASTER)
- MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, jmfb_device, screen_update)
- MCFG_SCREEN_RAW_PARAMS(25175000, 800, 0, 640, 525, 0, 480)
-// MCFG_SCREEN_SIZE(1152, 870)
-// MCFG_SCREEN_VISIBLE_AREA(0, 1152-1, 0, 870-1)
-// MCFG_SCREEN_REFRESH_RATE(75)
-// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(1260))
-MACHINE_CONFIG_END
+void jmfb_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, GC48_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_screen_update(FUNC(jmfb_device::screen_update));
+ screen.set_raw(25175000, 800, 0, 640, 525, 0, 480);
+// screen.set_size(1152, 870);
+// screen.set_visarea(0, 1152-1, 0, 870-1);
+// screen.set_refresh_hz(75);
+// screen.set_vblank_time(ATTOSECONDS_IN_USEC(1260));
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/nubus/nubus_asntmc3b.cpp b/src/devices/bus/nubus/nubus_asntmc3b.cpp
index 46f9d382eb8..f6c0135af5f 100644
--- a/src/devices/bus/nubus/nubus_asntmc3b.cpp
+++ b/src/devices/bus/nubus/nubus_asntmc3b.cpp
@@ -41,12 +41,13 @@ DEFINE_DEVICE_TYPE(NUBUS_APPLEENET, nubus_appleenet_device, "nb_aenet", "Apple N
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(nubus_mac8390_device::device_add_mconfig)
- MCFG_DEVICE_ADD(MAC8390_839X, DP8390D, 0)
- MCFG_DP8390D_IRQ_CB(WRITELINE(*this, nubus_mac8390_device, dp_irq_w))
- MCFG_DP8390D_MEM_READ_CB(READ8(*this, nubus_mac8390_device, dp_mem_read))
- MCFG_DP8390D_MEM_WRITE_CB(WRITE8(*this, nubus_mac8390_device, dp_mem_write))
-MACHINE_CONFIG_END
+void nubus_mac8390_device::device_add_mconfig(machine_config &config)
+{
+ DP8390D(config, m_dp83902, 0);
+ m_dp83902->irq_callback().set(FUNC(nubus_mac8390_device::dp_irq_w));
+ m_dp83902->mem_read_callback().set(FUNC(nubus_mac8390_device::dp_mem_read));
+ m_dp83902->mem_write_callback().set(FUNC(nubus_mac8390_device::dp_mem_write));
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/nubus/nubus_cb264.cpp b/src/devices/bus/nubus/nubus_cb264.cpp
index 9efb5e6d088..01bff0877da 100644
--- a/src/devices/bus/nubus/nubus_cb264.cpp
+++ b/src/devices/bus/nubus/nubus_cb264.cpp
@@ -40,13 +40,14 @@ DEFINE_DEVICE_TYPE(NUBUS_CB264, nubus_cb264_device, "nb_c264", "RasterOps ColorB
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(nubus_cb264_device::device_add_mconfig)
- MCFG_SCREEN_ADD( CB264_SCREEN_NAME, RASTER)
- MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, nubus_cb264_device, screen_update)
- MCFG_SCREEN_RAW_PARAMS(25175000, 800, 0, 640, 525, 0, 480)
- MCFG_SCREEN_SIZE(1024,768)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
-MACHINE_CONFIG_END
+void nubus_cb264_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, CB264_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_screen_update(FUNC(nubus_cb264_device::screen_update));
+ screen.set_raw(25175000, 800, 0, 640, 525, 0, 480);
+ screen.set_size(1024, 768);
+ screen.set_visarea(0, 640-1, 0, 480-1);
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/nubus/nubus_image.cpp b/src/devices/bus/nubus/nubus_image.cpp
index 1618bda4da7..8e2d39fb943 100644
--- a/src/devices/bus/nubus/nubus_image.cpp
+++ b/src/devices/bus/nubus/nubus_image.cpp
@@ -130,9 +130,10 @@ DEFINE_DEVICE_TYPE(NUBUS_IMAGE, nubus_image_device, "nb_image", "NuBus Disk Imag
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(nubus_image_device::device_add_mconfig)
- MCFG_DEVICE_ADD(IMAGE_DISK0_TAG, MESSIMG_DISK, 0)
-MACHINE_CONFIG_END
+void nubus_image_device::device_add_mconfig(machine_config &config)
+{
+ MESSIMG_DISK(config, IMAGE_DISK0_TAG, 0);
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/nubus/nubus_m2hires.cpp b/src/devices/bus/nubus/nubus_m2hires.cpp
index 6ac472eeb5b..c575f7d94b1 100644
--- a/src/devices/bus/nubus/nubus_m2hires.cpp
+++ b/src/devices/bus/nubus/nubus_m2hires.cpp
@@ -36,13 +36,14 @@ DEFINE_DEVICE_TYPE(NUBUS_M2HIRES, nubus_m2hires_device, "nb_m2hr", "Macintosh II
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(nubus_m2hires_device::device_add_mconfig)
- MCFG_SCREEN_ADD( M2HIRES_SCREEN_NAME, RASTER)
- MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, nubus_m2hires_device, screen_update)
- MCFG_SCREEN_RAW_PARAMS(25175000, 800, 0, 640, 525, 0, 480)
- MCFG_SCREEN_SIZE(1024,768)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
-MACHINE_CONFIG_END
+void nubus_m2hires_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, M2HIRES_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_screen_update(FUNC(nubus_m2hires_device::screen_update));
+ screen.set_raw(25175000, 800, 0, 640, 525, 0, 480);
+ screen.set_size(1024, 768);
+ screen.set_visarea(0, 640-1, 0, 480-1);
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/nubus/nubus_m2video.cpp b/src/devices/bus/nubus/nubus_m2video.cpp
index d7eea8cf22e..b16391b640d 100644
--- a/src/devices/bus/nubus/nubus_m2video.cpp
+++ b/src/devices/bus/nubus/nubus_m2video.cpp
@@ -38,13 +38,14 @@ DEFINE_DEVICE_TYPE(NUBUS_M2VIDEO, nubus_m2video_device, "nb_m2vc", "Macintosh II
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(nubus_m2video_device::device_add_mconfig)
- MCFG_SCREEN_ADD(M2VIDEO_SCREEN_NAME, RASTER)
- MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, nubus_m2video_device, screen_update)
- MCFG_SCREEN_RAW_PARAMS(25175000, 800, 0, 640, 525, 0, 480)
- MCFG_SCREEN_SIZE(1024,768)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
-MACHINE_CONFIG_END
+void nubus_m2video_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, M2VIDEO_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_screen_update(FUNC(nubus_m2video_device::screen_update));
+ screen.set_raw(25175000, 800, 0, 640, 525, 0, 480);
+ screen.set_size(1024, 768);
+ screen.set_visarea(0, 640-1, 0, 480-1);
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/nubus/nubus_radiustpd.cpp b/src/devices/bus/nubus/nubus_radiustpd.cpp
index 98a3ab3e514..1ee2e0cb7fb 100644
--- a/src/devices/bus/nubus/nubus_radiustpd.cpp
+++ b/src/devices/bus/nubus/nubus_radiustpd.cpp
@@ -37,13 +37,12 @@ DEFINE_DEVICE_TYPE(NUBUS_RADIUSTPD, nubus_radiustpd_device, "nb_rtpd", "Radius T
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(nubus_radiustpd_device::device_add_mconfig)
- MCFG_SCREEN_ADD( RADIUSTPD_SCREEN_NAME, RASTER)
- MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, nubus_radiustpd_device, screen_update)
- MCFG_SCREEN_SIZE(1280, 960)
- MCFG_SCREEN_REFRESH_RATE(70)
- MCFG_SCREEN_VISIBLE_AREA(0, 1152-1, 0, 880-1)
-MACHINE_CONFIG_END
+void nubus_radiustpd_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, RADIUSTPD_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_screen_update(FUNC(nubus_radiustpd_device::screen_update));
+ screen.set_raw(99.522_MHz_XTAL, 1536, 0, 1152, 900, 0, 880); // 64.79 kHz horizontal, 72 Hz refresh
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/nubus/nubus_spec8.cpp b/src/devices/bus/nubus/nubus_spec8.cpp
index d3d45d9b076..1353d3b9a9d 100644
--- a/src/devices/bus/nubus/nubus_spec8.cpp
+++ b/src/devices/bus/nubus/nubus_spec8.cpp
@@ -40,13 +40,14 @@ DEFINE_DEVICE_TYPE(NUBUS_SPEC8S3, nubus_spec8s3_device, "nb_sp8s3", "SuperMac Sp
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(nubus_spec8s3_device::device_add_mconfig)
- MCFG_SCREEN_ADD( SPEC8S3_SCREEN_NAME, RASTER)
- MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, nubus_spec8s3_device, screen_update)
- MCFG_SCREEN_RAW_PARAMS(25175000, 800, 0, 640, 525, 0, 480)
- MCFG_SCREEN_SIZE(1024,768)
- MCFG_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 768-1)
-MACHINE_CONFIG_END
+void nubus_spec8s3_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, SPEC8S3_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_screen_update(FUNC(nubus_spec8s3_device::screen_update));
+ screen.set_raw(25175000, 800, 0, 640, 525, 0, 480);
+ screen.set_size(1024, 768);
+ screen.set_visarea(0, 1024-1, 0, 768-1);
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/nubus/nubus_specpdq.cpp b/src/devices/bus/nubus/nubus_specpdq.cpp
index d9e463e7fbf..2e09a258bd2 100644
--- a/src/devices/bus/nubus/nubus_specpdq.cpp
+++ b/src/devices/bus/nubus/nubus_specpdq.cpp
@@ -29,6 +29,9 @@
#include "nubus_specpdq.h"
#include "screen.h"
+//#define VERBOSE 1
+#include "logmacro.h"
+
#define SPECPDQ_SCREEN_NAME "specpdq_screen"
#define SPECPDQ_ROM_REGION "specpdq_rom"
@@ -51,15 +54,16 @@ DEFINE_DEVICE_TYPE(NUBUS_SPECPDQ, nubus_specpdq_device, "nb_spdq", "SuperMac Spe
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(nubus_specpdq_device::device_add_mconfig)
- MCFG_SCREEN_ADD( SPECPDQ_SCREEN_NAME, RASTER)
- MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, nubus_specpdq_device, screen_update)
- MCFG_SCREEN_RAW_PARAMS(25175000, 800, 0, 640, 525, 0, 480)
- MCFG_SCREEN_SIZE(1280,1024)
- MCFG_SCREEN_VISIBLE_AREA(0, 1152-1, 0, 844-1)
+void nubus_specpdq_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, SPECPDQ_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_screen_update(FUNC(nubus_specpdq_device::screen_update));
+ screen.set_raw(25175000, 800, 0, 640, 525, 0, 480);
+ screen.set_size(1280, 1024);
+ screen.set_visarea(0, 1152-1, 0, 844-1);
- MCFG_PALETTE_ADD("palette", 256)
-MACHINE_CONFIG_END
+ PALETTE(config, m_palette).set_entries(256);
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
@@ -242,7 +246,7 @@ WRITE32_MEMBER( nubus_specpdq_device::specpdq_w )
switch (offset)
{
case 0xc0054: // mode 1
-// logerror("%x to mode1\n", data);
+ LOG("%x to mode1\n", data);
break;
case 0xc005c: // interrupt control
@@ -261,7 +265,7 @@ WRITE32_MEMBER( nubus_specpdq_device::specpdq_w )
break;
case 0xc007a:
-// logerror("%x to mode2\n", data);
+ LOG("%x to mode2\n", data);
switch (data)
{
@@ -278,11 +282,11 @@ WRITE32_MEMBER( nubus_specpdq_device::specpdq_w )
break;
}
-// logerror("m_mode = %d\n", m_mode);
+ LOG("m_mode = %d\n", m_mode);
break;
case 0x120000: // DAC address
-// logerror("%08x to DAC control %s\n", data,machine().describe_context());
+ LOG("%08x to DAC control %s\n", data,machine().describe_context());
m_clutoffs = ((data>>8)&0xff)^0xff;
break;
@@ -291,7 +295,7 @@ WRITE32_MEMBER( nubus_specpdq_device::specpdq_w )
if (m_count == 3)
{
-// logerror("RAMDAC: color %d = %02x %02x %02x %s\n", m_clutoffs, m_colors[0], m_colors[1], m_colors[2], machine().describe_context());
+ LOG("RAMDAC: color %d = %02x %02x %02x %s\n", m_clutoffs, m_colors[0], m_colors[1], m_colors[2], machine().describe_context());
m_palette->set_pen_color(m_clutoffs, rgb_t(m_colors[0], m_colors[1], m_colors[2]));
m_palette_val[m_clutoffs] = rgb_t(m_colors[0], m_colors[1], m_colors[2]);
m_clutoffs++;
@@ -368,7 +372,10 @@ WRITE32_MEMBER( nubus_specpdq_device::specpdq_w )
case 0x18103d:
case 0x18103e:
case 0x18103f:
-// logerror("Pattern %08x @ %x\n", data ^ 0xffffffff, offset);
+ if(offset == 0x181000) {
+ machine().debug_break();
+ LOG("Pattern %08x @ %x\n", data ^ 0xffffffff, offset);
+ }
m_fillbytes[((offset&0x3f)*4)] = ((data>>24) & 0xff) ^ 0xff;
m_fillbytes[((offset&0x3f)*4)+1] = ((data>>16) & 0xff) ^ 0xff;
m_fillbytes[((offset&0x3f)*4)+2] = ((data>>8) & 0xff) ^ 0xff;
@@ -377,81 +384,107 @@ WRITE32_MEMBER( nubus_specpdq_device::specpdq_w )
// blitter control
case 0x182006:
-// logerror("%08x (%d) to blitter ctrl 1 %s\n", data^0xffffffff, data^0xffffffff, machine().describe_context());
+ LOG("%08x (%d) to blitter ctrl 1 %s rectangle\n", data^0xffffffff, data^0xffffffff, machine().describe_context());
break;
case 0x182008:
-// logerror("%08x (%d) to blitter ctrl 2 %s\n", data^0xffffffff, data^0xffffffff, machine().describe_context());
+ LOG("%08x (%d) to blitter ctrl 2 %s rectangle\n", data^0xffffffff, data^0xffffffff, machine().describe_context());
m_patofsx = (data ^ 0xffffffff) & 7;
m_patofsy = ((data ^ 0xffffffff)>>3) & 7;
break;
case 0x18200e:
-// logerror("%08x (%d) to blitter ctrl 3 %s\n", data^0xffffffff, data^0xffffffff, machine().describe_context());
+ LOG("%08x (%d) to blitter ctrl 3 %s\n", data^0xffffffff, data^0xffffffff, machine().describe_context());
m_width = data ^ 0xffffffff;
break;
case 0x18200b:
-// logerror("%08x (%d) to blitter ctrl 4 %s\n", data^0xffffffff, data^0xffffffff, machine().describe_context());
+ LOG("%08x (%d) to blitter ctrl 4 %s\n", data^0xffffffff, data^0xffffffff, machine().describe_context());
m_height = (data ^ 0xffffffff) & 0xffff;
break;
case 0x18200a:
data ^= 0xffffffff;
-// logerror("%08x to blitter ctrl 5 %s\n", data, machine().describe_context());
+ LOG("%08x to blitter ctrl 5 %s\n", data, machine().describe_context());
m_vram_src = data>>2;
break;
case 0x182009:
data ^= 0xffffffff;
-// logerror("%08x to blitter ctrl 6 %s\n", data, machine().describe_context());
+ LOG("%08x to blitter ctrl 6 %s\n", data, machine().describe_context());
m_vram_addr = data>>2;
break;
case 0x182007:
data ^= 0xffffffff;
-// logerror("%08x to blitter ctrl 7 %s\n", data, machine().describe_context());
+ LOG("%08x to blitter ctrl 7 %s\n", data, machine().describe_context());
// fill rectangle
if (data == 2)
{
int x, y;
- uint8_t *vram = &m_vram[m_vram_addr + m_patofsx]; // m_vram_addr is missing the low 2 bits, we add them back here
+ uint8_t *vram = &m_vram[m_vram_addr & ~3];
-// logerror("Fill rectangle with %02x %02x %02x %02x, width %d height %d\n", m_fillbytes[0], m_fillbytes[1], m_fillbytes[2], m_fillbytes[3], m_width, m_height);
+ int ddx = m_vram_addr & 3;
- for (y = 0; y < m_height; y++)
+ LOG("Fill rectangle with %02x %02x %02x %02x, adr %x (%d, %d) width %d height %d delta %d %d\n", m_fillbytes[0], m_fillbytes[1], m_fillbytes[2], m_fillbytes[3], m_vram_addr, m_vram_addr % 1152, m_vram_addr / 1152, m_width, m_height, m_patofsx, m_patofsy);
+
+ for (y = 0; y <= m_height; y++)
{
- for (x = 0; x < m_width; x++)
+ for (x = 0; x <= m_width; x++)
+ {
+ vram[(y * 1152)+BYTE4_XOR_BE(x + ddx)] = m_fillbytes[((m_patofsx + x) & 0x1f)+(((m_patofsy + y) & 0x7) << 5)];
+ }
+ }
+ }
+ else if (data == 0x100)
+ {
+ int x, y;
+ uint8_t *vram = &m_vram[m_vram_addr & ~3];
+ uint8_t *vramsrc = &m_vram[m_vram_src & ~3];
+
+ int sdx = m_vram_src & 3;
+ int ddx = m_vram_addr & 3;
+
+ LOG("Copy rectangle forwards, width %d height %d dst %x (%d, %d) src %x (%d, %d)\n", m_width, m_height, m_vram_addr, m_vram_addr % 1152, m_vram_addr / 1152, m_vram_src, m_vram_src % 1152, m_vram_src / 1152);
+
+ for (y = 0; y <= m_height; y++)
+ {
+ for (x = 0; x <= m_width; x++)
{
- vram[(y * 1152)+x] = m_fillbytes[((m_patofsx + x) & 0x1f)+(((m_patofsy + y) & 0x7)*32)];
+ vram[(y * 1152)+BYTE4_XOR_BE(x + ddx)] = vramsrc[(y * 1152)+BYTE4_XOR_BE(x + sdx)];
}
}
+ (void)vramsrc; (void)sdx;
}
- else if ((data == 0x101) || (data == 0x100))
+ else if (data == 0x101)
{
int x, y;
- uint8_t *vram = &m_vram[m_vram_addr];
- uint8_t *vramsrc = &m_vram[m_vram_src];
+ uint8_t *vram = &m_vram[m_vram_addr & ~3];
+ uint8_t *vramsrc = &m_vram[m_vram_src & ~3];
+
+ int sdx = m_vram_src & 3;
+ int ddx = m_vram_addr & 3;
-// logerror("Copy rectangle, width %d height %d src %x dst %x\n", m_width, m_height, m_vram_addr, m_vram_src);
+ LOG("Copy rectangle backwards, width %d height %d dst %x (%d, %d) src %x (%d, %d)\n", m_width, m_height, m_vram_addr, m_vram_addr % 1152, m_vram_addr / 1152, m_vram_src, m_vram_src % 1152, m_vram_src / 1152);
for (y = 0; y < m_height; y++)
{
for (x = 0; x < m_width; x++)
{
- vram[(y * 1152)+x] = vramsrc[(y * 1152)+x];
+ vram[(-y * 1152)+BYTE4_XOR_BE(-x + ddx)] = vramsrc[(-y * 1152)+BYTE4_XOR_BE(-x + sdx)];
}
}
+ (void)vramsrc; (void)sdx;
}
else
{
- logerror("Unknown blitter command %08x\n", data);
+ LOG("Unknown blitter command %08x\n", data);
}
break;
default:
-// logerror("specpdq_w: %08x @ %x (mask %08x %s)\n", data^0xffffffff, offset, mem_mask, machine().describe_context());
+ LOG("specpdq_w: %08x @ %x (mask %08x %s)\n", data^0xffffffff, offset, mem_mask, machine().describe_context());
break;
}
}
diff --git a/src/devices/bus/nubus/nubus_vikbw.cpp b/src/devices/bus/nubus/nubus_vikbw.cpp
index 040f452b2d2..ab3af18fe72 100644
--- a/src/devices/bus/nubus/nubus_vikbw.cpp
+++ b/src/devices/bus/nubus/nubus_vikbw.cpp
@@ -36,13 +36,14 @@ DEFINE_DEVICE_TYPE(NUBUS_VIKBW, nubus_vikbw_device, "nb_vikbw", "Moniterm Viking
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(nubus_vikbw_device::device_add_mconfig)
- MCFG_SCREEN_ADD( VIKBW_SCREEN_NAME, RASTER)
- MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, nubus_vikbw_device, screen_update)
- MCFG_SCREEN_SIZE(1024,768)
- MCFG_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 768-1)
- MCFG_SCREEN_REFRESH_RATE(70)
-MACHINE_CONFIG_END
+void nubus_vikbw_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, VIKBW_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_screen_update(FUNC(nubus_vikbw_device::screen_update));
+ screen.set_size(1024, 768);
+ screen.set_visarea(0, 1024-1, 0, 768-1);
+ screen.set_refresh_hz(70);
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/nubus/nubus_wsportrait.cpp b/src/devices/bus/nubus/nubus_wsportrait.cpp
index 19c25347738..12702c052a6 100644
--- a/src/devices/bus/nubus/nubus_wsportrait.cpp
+++ b/src/devices/bus/nubus/nubus_wsportrait.cpp
@@ -39,13 +39,14 @@ DEFINE_DEVICE_TYPE(NUBUS_WSPORTRAIT, nubus_wsportrait_device, "nb_wspt", "Macint
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(nubus_wsportrait_device::device_add_mconfig)
- MCFG_SCREEN_ADD( WSPORTRAIT_SCREEN_NAME, RASTER)
- MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, nubus_wsportrait_device, screen_update)
- MCFG_SCREEN_SIZE(1024,960)
- MCFG_SCREEN_REFRESH_RATE(75.0)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 870-1)
-MACHINE_CONFIG_END
+void nubus_wsportrait_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, WSPORTRAIT_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_screen_update(FUNC(nubus_wsportrait_device::screen_update));
+ screen.set_size(1024, 960);
+ screen.set_refresh_hz(75.0);
+ screen.set_visarea(0, 640-1, 0, 870-1);
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/nubus/pds30_30hr.cpp b/src/devices/bus/nubus/pds30_30hr.cpp
index 8888c50b5fa..190872708f6 100644
--- a/src/devices/bus/nubus/pds30_30hr.cpp
+++ b/src/devices/bus/nubus/pds30_30hr.cpp
@@ -39,13 +39,14 @@ DEFINE_DEVICE_TYPE(PDS030_XCEED30HR, nubus_xceed30hr_device, "pd3_30hr", "Micron
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(nubus_xceed30hr_device::device_add_mconfig)
- MCFG_SCREEN_ADD( XCEED30HR_SCREEN_NAME, RASTER)
- MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, nubus_xceed30hr_device, screen_update)
- MCFG_SCREEN_RAW_PARAMS(25175000, 800, 0, 640, 525, 0, 480)
- MCFG_SCREEN_SIZE(1024,768)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
-MACHINE_CONFIG_END
+void nubus_xceed30hr_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, XCEED30HR_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_screen_update(FUNC(nubus_xceed30hr_device::screen_update));
+ screen.set_raw(25175000, 800, 0, 640, 525, 0, 480);
+ screen.set_size(1024, 768);
+ screen.set_visarea(0, 640-1, 0, 480-1);
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/nubus/pds30_cb264.cpp b/src/devices/bus/nubus/pds30_cb264.cpp
index 6ec398a5257..4d153596fe0 100644
--- a/src/devices/bus/nubus/pds30_cb264.cpp
+++ b/src/devices/bus/nubus/pds30_cb264.cpp
@@ -32,13 +32,14 @@ DEFINE_DEVICE_TYPE(PDS030_CB264SE30, nubus_cb264se30_device, "pd3_c264", "Raster
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(nubus_cb264se30_device::device_add_mconfig)
- MCFG_SCREEN_ADD( CB264SE30_SCREEN_NAME, RASTER)
- MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, nubus_cb264se30_device, screen_update)
- MCFG_SCREEN_RAW_PARAMS(25175000, 800, 0, 640, 525, 0, 480)
- MCFG_SCREEN_SIZE(1024,768)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
-MACHINE_CONFIG_END
+void nubus_cb264se30_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, CB264SE30_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_screen_update(FUNC(nubus_cb264se30_device::screen_update));
+ screen.set_raw(25175000, 800, 0, 640, 525, 0, 480);
+ screen.set_size(1024, 768);
+ screen.set_visarea(0, 640-1, 0, 480-1);
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/nubus/pds30_mc30.cpp b/src/devices/bus/nubus/pds30_mc30.cpp
index a314b7f9981..6770b517deb 100644
--- a/src/devices/bus/nubus/pds30_mc30.cpp
+++ b/src/devices/bus/nubus/pds30_mc30.cpp
@@ -35,13 +35,14 @@ DEFINE_DEVICE_TYPE(PDS030_XCEEDMC30, nubus_xceedmc30_device, "pd3_mclr", "Micron
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(nubus_xceedmc30_device::device_add_mconfig)
- MCFG_SCREEN_ADD( XCEEDMC30_SCREEN_NAME, RASTER)
- MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, nubus_xceedmc30_device, screen_update)
- MCFG_SCREEN_RAW_PARAMS(25175000, 800, 0, 640, 525, 0, 480)
- MCFG_SCREEN_SIZE(1024,768)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
-MACHINE_CONFIG_END
+void nubus_xceedmc30_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, XCEEDMC30_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_screen_update(FUNC(nubus_xceedmc30_device::screen_update));
+ screen.set_raw(25175000, 800, 0, 640, 525, 0, 480);
+ screen.set_size(1024, 768);
+ screen.set_visarea(0, 640-1, 0, 480-1);
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/nubus/pds30_procolor816.cpp b/src/devices/bus/nubus/pds30_procolor816.cpp
index db1c02fea31..440ba6c86d7 100644
--- a/src/devices/bus/nubus/pds30_procolor816.cpp
+++ b/src/devices/bus/nubus/pds30_procolor816.cpp
@@ -38,13 +38,14 @@ DEFINE_DEVICE_TYPE(PDS030_PROCOLOR816, nubus_procolor816_device, "pd3_pc16", "La
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(nubus_procolor816_device::device_add_mconfig)
- MCFG_SCREEN_ADD( PROCOLOR816_SCREEN_NAME, RASTER)
- MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, nubus_procolor816_device, screen_update)
- MCFG_SCREEN_RAW_PARAMS(25175000, 800, 0, 640, 525, 0, 480)
- MCFG_SCREEN_SIZE(1024,768)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
-MACHINE_CONFIG_END
+void nubus_procolor816_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, PROCOLOR816_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_screen_update(FUNC(nubus_procolor816_device::screen_update));
+ screen.set_raw(25175000, 800, 0, 640, 525, 0, 480);
+ screen.set_size(1024, 768);
+ screen.set_visarea(0, 640-1, 0, 480-1);
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/nubus/pds30_sigmalview.cpp b/src/devices/bus/nubus/pds30_sigmalview.cpp
index ea05362d8ea..51f27a03713 100644
--- a/src/devices/bus/nubus/pds30_sigmalview.cpp
+++ b/src/devices/bus/nubus/pds30_sigmalview.cpp
@@ -32,13 +32,14 @@ DEFINE_DEVICE_TYPE(PDS030_LVIEW, nubus_lview_device, "pd3_lviw", "Sigma Designs
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(nubus_lview_device::device_add_mconfig)
- MCFG_SCREEN_ADD( LVIEW_SCREEN_NAME, RASTER)
- MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, nubus_lview_device, screen_update)
- MCFG_SCREEN_SIZE(832,600)
- MCFG_SCREEN_REFRESH_RATE(70)
- MCFG_SCREEN_VISIBLE_AREA(0, 832-1, 0, 600-1)
-MACHINE_CONFIG_END
+void nubus_lview_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, LVIEW_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_screen_update(FUNC(nubus_lview_device::screen_update));
+ screen.set_size(832, 600);
+ screen.set_refresh_hz(70);
+ screen.set_visarea(0, 832-1, 0, 600-1);
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/odyssey2/chess.cpp b/src/devices/bus/odyssey2/chess.cpp
index d2ba5d05f5f..44890a394ce 100644
--- a/src/devices/bus/odyssey2/chess.cpp
+++ b/src/devices/bus/odyssey2/chess.cpp
@@ -45,8 +45,9 @@ void o2_chess_device::chess_io(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(o2_chess_device::device_add_mconfig)
- MCFG_DEVICE_ADD("subcpu", NSC800, XTAL(4'000'000))
- MCFG_DEVICE_PROGRAM_MAP(chess_mem)
- MCFG_DEVICE_IO_MAP(chess_io)
-MACHINE_CONFIG_END
+void o2_chess_device::device_add_mconfig(machine_config &config)
+{
+ NSC800(config, m_cpu, XTAL(4'000'000));
+ m_cpu->set_addrmap(AS_PROGRAM, &o2_chess_device::chess_mem);
+ m_cpu->set_addrmap(AS_IO, &o2_chess_device::chess_io);
+}
diff --git a/src/devices/bus/odyssey2/slot.h b/src/devices/bus/odyssey2/slot.h
index 28192aa3457..bfb10c025bd 100644
--- a/src/devices/bus/odyssey2/slot.h
+++ b/src/devices/bus/odyssey2/slot.h
@@ -65,7 +65,17 @@ class o2_cart_slot_device : public device_t,
{
public:
// construction/destruction
- o2_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ o2_cart_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : o2_cart_slot_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ o2_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
virtual ~o2_cart_slot_device();
// device-level overrides
@@ -114,10 +124,6 @@ DECLARE_DEVICE_TYPE(O2_CART_SLOT, o2_cart_slot_device)
#define O2SLOT_ROM_REGION_TAG ":cart:rom"
-#define MCFG_O2_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_tag, O2_CART_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
void o2_cart(device_slot_interface &device);
#endif // MAME_BUS_ODYSSEY2_SLOT_H
diff --git a/src/devices/bus/odyssey2/voice.cpp b/src/devices/bus/odyssey2/voice.cpp
index 073b4a83173..83c199f7431 100644
--- a/src/devices/bus/odyssey2/voice.cpp
+++ b/src/devices/bus/odyssey2/voice.cpp
@@ -43,7 +43,8 @@ void o2_voice_device::device_start()
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(o2_voice_device::device_add_mconfig)
+void o2_voice_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "mono").front_center();
SP0256(config, m_speech, 3120000);
@@ -51,8 +52,8 @@ MACHINE_CONFIG_START(o2_voice_device::device_add_mconfig)
// The Voice uses a speaker with its own volume control so the relative volumes to use are subjective, these sound good
m_speech->add_route(ALL_OUTPUTS, "mono", 1.00);
- MCFG_O2_CARTRIDGE_ADD("subslot", o2_cart, nullptr)
-MACHINE_CONFIG_END
+ O2_CART_SLOT(config, m_subslot, o2_cart, nullptr);
+}
ROM_START( o2voice )
diff --git a/src/devices/bus/pc1512/mouse.h b/src/devices/bus/pc1512/mouse.h
index db432598a98..9c71eb4d89d 100644
--- a/src/devices/bus/pc1512/mouse.h
+++ b/src/devices/bus/pc1512/mouse.h
@@ -32,23 +32,6 @@
#define PC1512_MOUSE_PORT_TAG "mous"
-#define MCFG_PC1512_MOUSE_PORT_ADD(_tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, PC1512_MOUSE_PORT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-#define MCFG_PC1512_MOUSE_PORT_X_CB(_write) \
- downcast<pc1512_mouse_port_device &>(*device).set_x_wr_callback(DEVCB_##_write);
-
-#define MCFG_PC1512_MOUSE_PORT_Y_CB(_write) \
- downcast<pc1512_mouse_port_device &>(*device).set_y_wr_callback(DEVCB_##_write);
-
-#define MCFG_PC1512_MOUSE_PORT_M1_CB(_write) \
- downcast<pc1512_mouse_port_device &>(*device).set_m1_wr_callback(DEVCB_##_write);
-
-#define MCFG_PC1512_MOUSE_PORT_M2_CB(_write) \
- downcast<pc1512_mouse_port_device &>(*device).set_m2_wr_callback(DEVCB_##_write);
-
-
//**************************************************************************
// TYPE DEFINITIONS
@@ -78,13 +61,23 @@ class pc1512_mouse_port_device : public device_t, public device_slot_interface
{
public:
// construction/destruction
- pc1512_mouse_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ pc1512_mouse_port_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : pc1512_mouse_port_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ pc1512_mouse_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
// static configuration helpers
- template <class Object> devcb_base &set_x_wr_callback(Object &&cb) { return m_write_x.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_y_wr_callback(Object &&cb) { return m_write_y.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_m1_wr_callback(Object &&cb) { return m_write_m1.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_m2_wr_callback(Object &&cb) { return m_write_m2.set_callback(std::forward<Object>(cb)); }
+ auto x_wr_callback() { return m_write_x.bind(); }
+ auto y_wr_callback() { return m_write_y.bind(); }
+ auto m1_wr_callback() { return m_write_m1.bind(); }
+ auto m2_wr_callback() { return m_write_m2.bind(); }
// peripheral interface
void x_w(uint8_t data) { m_write_x(data); }
diff --git a/src/devices/bus/pc_kbd/ec1841.cpp b/src/devices/bus/pc_kbd/ec1841.cpp
index 51822723c7e..2a36345e1fa 100644
--- a/src/devices/bus/pc_kbd/ec1841.cpp
+++ b/src/devices/bus/pc_kbd/ec1841.cpp
@@ -34,17 +34,17 @@
#include "emu.h"
#include "ec1841.h"
-#define VERBOSE_DBG 0 /* general debug messages */
-#define DBG_LOG(N,M,A) \
- do { \
- if(VERBOSE_DBG>=N) \
- { \
- logerror("%11.6f at %s: ",machine().time().as_double(),machine().describe_context()); \
- logerror A; \
- } \
- } while (0)
+//#define LOG_GENERAL (1U << 0) //defined in logmacro.h already
+#define LOG_KEYBOARD (1U << 1)
+#define LOG_DEBUG (1U << 2)
+//#define VERBOSE (LOG_DEBUG)
+//#define LOG_OUTPUT_FUNC printf
+#include "logmacro.h"
+
+#define LOGKBD(...) LOGMASKED(LOG_KEYBOARD, __VA_ARGS__)
+#define LOGDBG(...) LOGMASKED(LOG_DEBUG, __VA_ARGS__)
//**************************************************************************
@@ -54,7 +54,6 @@
#define I8048_TAG "i8048"
-
//**************************************************************************
// DEVICE DEFINITIONS
//**************************************************************************
@@ -327,7 +326,7 @@ void ec_1841_keyboard_device::device_reset()
WRITE_LINE_MEMBER( ec_1841_keyboard_device::clock_write )
{
- DBG_LOG(1,0,( "%s: clock write %d\n", tag(), state));
+ LOG("clock write %d\n", state);
}
@@ -337,7 +336,7 @@ WRITE_LINE_MEMBER( ec_1841_keyboard_device::clock_write )
WRITE_LINE_MEMBER( ec_1841_keyboard_device::data_write )
{
- DBG_LOG(1,0,( "%s: data write %d\n", tag(), state));
+ LOG("data write %d\n", state);
}
@@ -347,7 +346,7 @@ WRITE_LINE_MEMBER( ec_1841_keyboard_device::data_write )
WRITE8_MEMBER( ec_1841_keyboard_device::bus_w )
{
- DBG_LOG(2,0,( "%s: bus_w %02x\n", tag(), data));
+ LOGDBG("bus_w %02x\n", data);
m_bus = data;
}
@@ -379,7 +378,7 @@ READ8_MEMBER( ec_1841_keyboard_device::p1_r )
data |= clock_signal();
data |= data_signal() << 1;
- DBG_LOG(1,0,( "%s: p1_r %02x\n", tag(), data));
+ LOG("p1_r %02x\n", data);
return data;
}
@@ -403,7 +402,7 @@ WRITE8_MEMBER( ec_1841_keyboard_device::p1_w )
6 LED XXX
7 LED XXX
*/
- DBG_LOG(1,0,( "%s: p1_w %02x\n", tag(), data));
+ LOG("p1_w %02x\n", data);
m_p1 = data;
}
@@ -427,7 +426,7 @@ WRITE8_MEMBER( ec_1841_keyboard_device::p2_w )
6 XXX CLOCK out 2?
7 XXX
*/
- DBG_LOG(1,0,( "%s: p2_w %02x\n", tag(), data));
+ LOG("p2_w %02x\n", data);
m_pc_kbdc->data_write_from_kb(BIT(data, 2));
m_pc_kbdc->clock_write_from_kb(BIT(data, 1));
@@ -450,7 +449,7 @@ READ_LINE_MEMBER( ec_1841_keyboard_device::t1_r )
m_q = BIT(sense, (m_bus >> 4) & 7);
}
- DBG_LOG(1,0,( "%s: bus %02X t1_r %d\n", tag(), m_bus, m_q));
+ LOG("bus %02X t1_r %d\n", m_bus, m_q);
return m_q;
}
diff --git a/src/devices/bus/pc_kbd/iskr1030.cpp b/src/devices/bus/pc_kbd/iskr1030.cpp
index e55eabcfc20..3f91451d9ab 100644
--- a/src/devices/bus/pc_kbd/iskr1030.cpp
+++ b/src/devices/bus/pc_kbd/iskr1030.cpp
@@ -9,17 +9,17 @@
#include "emu.h"
#include "iskr1030.h"
-#define VERBOSE_DBG 1 /* general debug messages */
-#define DBG_LOG(N,M,A) \
- do { \
- if(VERBOSE_DBG>=N) \
- { \
- logerror("%11.6f at %s: ",machine().time().as_double(),machine().describe_context()); \
- logerror A; \
- } \
- } while (0)
+//#define LOG_GENERAL (1U << 0) //defined in logmacro.h already
+#define LOG_KEYBOARD (1U << 1)
+#define LOG_DEBUG (1U << 2)
+//#define VERBOSE (LOG_DEBUG)
+//#define LOG_OUTPUT_FUNC printf
+#include "logmacro.h"
+
+#define LOGKBD(...) LOGMASKED(LOG_KEYBOARD, __VA_ARGS__)
+#define LOGDBG(...) LOGMASKED(LOG_DEBUG, __VA_ARGS__)
//**************************************************************************
@@ -29,7 +29,6 @@
#define I8048_TAG "i8048"
-
//**************************************************************************
// DEVICE DEFINITIONS
//**************************************************************************
@@ -320,7 +319,7 @@ void iskr_1030_keyboard_device::device_reset()
WRITE_LINE_MEMBER( iskr_1030_keyboard_device::clock_write )
{
- DBG_LOG(1,0,( "%s: clock write %d\n", tag(), state));
+ LOG("clock write %d\n", state);
m_maincpu->set_input_line(MCS48_INPUT_IRQ, state ? CLEAR_LINE : ASSERT_LINE);
}
@@ -331,7 +330,7 @@ WRITE_LINE_MEMBER( iskr_1030_keyboard_device::clock_write )
WRITE_LINE_MEMBER( iskr_1030_keyboard_device::data_write )
{
- DBG_LOG(1,0,( "%s: data write %d\n", tag(), state));
+ LOG("data write %d\n", state);
}
@@ -345,12 +344,12 @@ READ_LINE_MEMBER( iskr_1030_keyboard_device::t1_r )
uint8_t bias = m_p1 & 15;
if (!BIT(m_p1, 7)) {
- DBG_LOG(2,0,( "%s: t1_r (l) %d\n", tag(), data));
+ LOGDBG("t1_r (l) %d\n", data);
return data;
}
if (bias) {
- DBG_LOG(2,0,( "%s: t1_r (b) %d\n", tag(), bias));
+ LOGDBG("t1_r (b) %d\n", bias);
return 1;
}
@@ -384,7 +383,7 @@ READ_LINE_MEMBER( iskr_1030_keyboard_device::t1_r )
}
data = BIT(data, m_bus&3);
- DBG_LOG(2,0,( "%s: t1_r (k r%d c%d) %d\n", tag(), m_bus&3, m_bus>>2, data));
+ LOGDBG("t1_r (k r%d c%d) %d\n", m_bus&3, m_bus>>2, data);
return data;
}
@@ -395,7 +394,7 @@ READ_LINE_MEMBER( iskr_1030_keyboard_device::t1_r )
WRITE8_MEMBER( iskr_1030_keyboard_device::ram_w )
{
- DBG_LOG(2,0,( "%s: ram_w[%02x] <- %02x\n", tag(), offset, data));
+ LOGDBG("ram_w[%02x] <- %02x\n", offset, data);
m_bus = offset;
m_ram[offset] = data;
@@ -408,7 +407,7 @@ WRITE8_MEMBER( iskr_1030_keyboard_device::ram_w )
READ8_MEMBER( iskr_1030_keyboard_device::ram_r )
{
- DBG_LOG(2,0,( "%s: ram_r[%02x] = %02x\n", tag(), offset, m_ram[offset]));
+ LOGDBG("ram_r[%02x] = %02x\n", offset, m_ram[offset]);
return m_ram[offset];
}
@@ -435,7 +434,7 @@ READ8_MEMBER( iskr_1030_keyboard_device::p1_r )
uint8_t data = 0;
- DBG_LOG(1,0,( "%s: p1_r %02x\n", tag(), data));
+ LOG("p1_r %02x\n", data);
return data;
}
@@ -459,7 +458,7 @@ WRITE8_MEMBER( iskr_1030_keyboard_device::p2_w )
6 LED NLK
7 LED CLK
*/
- DBG_LOG(1,0,( "%s: p2_w %02x\n", tag(), data));
+ LOG("p2_w %02x\n", data);
m_p2 = data;
}
@@ -486,7 +485,7 @@ WRITE8_MEMBER( iskr_1030_keyboard_device::p1_w )
m_p1 = data;
- DBG_LOG(1,0,( "%s: p1_w %02x (c %d d %d bias %d)\n", tag(), data, BIT(data, 4), BIT(data, 5), data&15));
+ LOG("p1_w %02x (c %d d %d bias %d)\n", data, BIT(data, 4), BIT(data, 5), data&15);
m_pc_kbdc->data_write_from_kb(BIT(data, 5));
m_pc_kbdc->clock_write_from_kb(BIT(data, 4));
diff --git a/src/devices/bus/pc_kbd/pc_kbdc.cpp b/src/devices/bus/pc_kbd/pc_kbdc.cpp
index 6d28227bca2..5e99056adbe 100644
--- a/src/devices/bus/pc_kbd/pc_kbdc.cpp
+++ b/src/devices/bus/pc_kbd/pc_kbdc.cpp
@@ -118,9 +118,12 @@ void pc_kbdc_device::update_clock_state()
// We first set our state to prevent possible endless loops
m_clock_state = new_clock_state;
+ // Send state to keyboard interface logic on mainboard
+ m_out_clock_cb(m_clock_state);
+
// Send state to keyboard
if (m_keyboard)
- m_keyboard->clock_write( m_clock_state );
+ m_keyboard->clock_write(m_clock_state);
}
}
@@ -134,6 +137,9 @@ void pc_kbdc_device::update_data_state()
// We first set our state to prevent possible endless loops
m_data_state = new_data_state;
+ // Send state to keyboard interface logic on mainboard
+ m_out_data_cb(m_data_state);
+
// Send state to keyboard
if (m_keyboard)
m_keyboard->data_write(m_data_state);
@@ -157,23 +163,15 @@ WRITE_LINE_MEMBER(pc_kbdc_device::data_write_from_mb)
WRITE_LINE_MEMBER(pc_kbdc_device::clock_write_from_kb)
{
- state = state ? 1 : 0;
- if (state != m_kb_clock_state)
- {
- m_out_clock_cb(m_kb_clock_state = state);
- update_clock_state();
- }
+ m_kb_clock_state = state;
+ update_clock_state();
}
WRITE_LINE_MEMBER(pc_kbdc_device::data_write_from_kb)
{
- state = state ? 1 : 0;
- if (state != m_kb_data_state)
- {
- m_out_data_cb(m_kb_data_state = state);
- update_data_state();
- }
+ m_kb_data_state = state;
+ update_data_state();
}
diff --git a/src/devices/bus/pc_kbd/pc_kbdc.h b/src/devices/bus/pc_kbd/pc_kbdc.h
index dac06daf60f..ff1168c314c 100644
--- a/src/devices/bus/pc_kbd/pc_kbdc.h
+++ b/src/devices/bus/pc_kbd/pc_kbdc.h
@@ -17,21 +17,6 @@ set the data line and then set the clock line.
//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_PC_KBDC_OUT_CLOCK_CB(_devcb) \
- downcast<pc_kbdc_device &>(*device).set_out_clock_callback(DEVCB_##_devcb);
-
-#define MCFG_PC_KBDC_OUT_DATA_CB(_devcb) \
- downcast<pc_kbdc_device &>(*device).set_out_data_callback(DEVCB_##_devcb);
-
-#define MCFG_PC_KBDC_SLOT_ADD(_kbdc_tag, _tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, PC_KBDC_SLOT, 0 ) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- downcast<pc_kbdc_slot_device &>(*device).set_pc_kbdc_slot(subdevice(_kbdc_tag) );
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -76,8 +61,6 @@ public:
// construction/destruction
pc_kbdc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- template <class Object> devcb_base &set_out_clock_callback(Object &&cb) { return m_out_clock_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_data_callback(Object &&cb) { return m_out_data_cb.set_callback(std::forward<Object>(cb)); }
auto out_clock_cb() { return m_out_clock_cb.bind(); }
auto out_data_cb() { return m_out_data_cb.bind(); }
diff --git a/src/devices/bus/pce/pce_slot.h b/src/devices/bus/pce/pce_slot.h
index 658384cb82b..add982a534b 100644
--- a/src/devices/bus/pce/pce_slot.h
+++ b/src/devices/bus/pce/pce_slot.h
@@ -65,6 +65,17 @@ class pce_cart_slot_device : public device_t,
{
public:
// construction/destruction
+ template <typename T>
+ pce_cart_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt, const char *interface)
+ : pce_cart_slot_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ set_intf(interface);
+ }
+
pce_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~pce_cart_slot_device();
@@ -115,15 +126,4 @@ DECLARE_DEVICE_TYPE(PCE_CART_SLOT, pce_cart_slot_device)
#define PCESLOT_ROM_REGION_TAG ":cart:rom"
-#define MCFG_PCE_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_tag, PCE_CART_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- static_cast<pce_cart_slot_device *>(device)->set_intf("pce_cart");
-
-#define MCFG_TG16_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_tag, PCE_CART_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- static_cast<pce_cart_slot_device *>(device)->set_intf("tg16_cart");
-
-
#endif // MAME_BUS_PCE_PCE_SLOT_H
diff --git a/src/devices/bus/pet/2joysnd.cpp b/src/devices/bus/pet/2joysnd.cpp
index b89ca59f7f8..7bc3915a283 100644
--- a/src/devices/bus/pet/2joysnd.cpp
+++ b/src/devices/bus/pet/2joysnd.cpp
@@ -93,12 +93,13 @@ ioport_constructor pet_userport_joystick_and_sound_device::device_input_ports()
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(pet_userport_joystick_and_sound_device::device_add_mconfig)
+void pet_userport_joystick_and_sound_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "speaker").front_center();
- MCFG_DEVICE_ADD("dac", DAC_1BIT, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.99)
- MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
- MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT)
-MACHINE_CONFIG_END
+ DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.99);
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
+ vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
+}
//**************************************************************************
// LIVE DEVICE
diff --git a/src/devices/bus/pet/64k.cpp b/src/devices/bus/pet/64k.cpp
index 34249220f3e..85f91114386 100644
--- a/src/devices/bus/pet/64k.cpp
+++ b/src/devices/bus/pet/64k.cpp
@@ -113,7 +113,7 @@ void pet_64k_expansion_device::device_reset()
// pet_norom_r - NO ROM read
//-------------------------------------------------
-int pet_64k_expansion_device::pet_norom_r(address_space &space, offs_t offset, int sel)
+int pet_64k_expansion_device::pet_norom_r(offs_t offset, int sel)
{
return !BIT(m_ctrl, 7);
}
@@ -123,7 +123,7 @@ int pet_64k_expansion_device::pet_norom_r(address_space &space, offs_t offset, i
// pet_bd_r - buffered data read
//-------------------------------------------------
-uint8_t pet_64k_expansion_device::pet_bd_r(address_space &space, offs_t offset, uint8_t data, int &sel)
+uint8_t pet_64k_expansion_device::pet_bd_r(offs_t offset, uint8_t data, int &sel)
{
if (BIT(m_ctrl, 7))
{
@@ -164,7 +164,7 @@ uint8_t pet_64k_expansion_device::pet_bd_r(address_space &space, offs_t offset,
// pet_bd_w - buffered data write
//-------------------------------------------------
-void pet_64k_expansion_device::pet_bd_w(address_space &space, offs_t offset, uint8_t data, int &sel)
+void pet_64k_expansion_device::pet_bd_w(offs_t offset, uint8_t data, int &sel)
{
if (BIT(m_ctrl, 7))
{
diff --git a/src/devices/bus/pet/64k.h b/src/devices/bus/pet/64k.h
index 82f50cab77a..7cf03cd621b 100644
--- a/src/devices/bus/pet/64k.h
+++ b/src/devices/bus/pet/64k.h
@@ -33,9 +33,9 @@ protected:
virtual void device_reset() override;
// device_pet_expansion_card_interface overrides
- virtual int pet_norom_r(address_space &space, offs_t offset, int sel) override;
- virtual uint8_t pet_bd_r(address_space &space, offs_t offset, uint8_t data, int &sel) override;
- virtual void pet_bd_w(address_space &space, offs_t offset, uint8_t data, int &sel) override;
+ virtual int pet_norom_r(offs_t offset, int sel) override;
+ virtual uint8_t pet_bd_r(offs_t offset, uint8_t data, int &sel) override;
+ virtual void pet_bd_w(offs_t offset, uint8_t data, int &sel) override;
private:
inline uint8_t read_ram(offs_t offset);
diff --git a/src/devices/bus/pet/c2n.cpp b/src/devices/bus/pet/c2n.cpp
index 1212f46c3ca..e7ac6e27c28 100644
--- a/src/devices/bus/pet/c2n.cpp
+++ b/src/devices/bus/pet/c2n.cpp
@@ -24,12 +24,13 @@ DEFINE_DEVICE_TYPE(C1531, c1531_device, "c1531", "Commodore 1531 Datassette")
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c2n_device::device_add_mconfig)
- MCFG_CASSETTE_ADD("cassette" )
- MCFG_CASSETTE_FORMATS(cbm_cassette_formats)
- MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_MUTED)
- MCFG_CASSETTE_INTERFACE("cbm_cass")
-MACHINE_CONFIG_END
+void c2n_device::device_add_mconfig(machine_config &config)
+{
+ CASSETTE(config, m_cassette);
+ m_cassette->set_formats(cbm_cassette_formats);
+ m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_MUTED);
+ m_cassette->set_interface("cbm_cass");
+}
diff --git a/src/devices/bus/pet/cass.h b/src/devices/bus/pet/cass.h
index d5a43fee19c..babfdf2058d 100644
--- a/src/devices/bus/pet/cass.h
+++ b/src/devices/bus/pet/cass.h
@@ -31,18 +31,6 @@
#define PET_DATASSETTE_PORT2_TAG "tape2"
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_PET_DATASSETTE_PORT_ADD(_tag, _slot_intf, _def_slot, _devcb) \
- MCFG_DEVICE_ADD(_tag, PET_DATASSETTE_PORT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- downcast<pet_datassette_port_device &>(*device).set_read_handler(DEVCB_##_devcb);
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -68,7 +56,6 @@ public:
virtual ~pet_datassette_port_device();
// static configuration helpers
- template <class Object> devcb_base &set_read_handler(Object &&cb) { return m_read_handler.set_callback(std::forward<Object>(cb)); }
auto read_handler() { return m_read_handler.bind(); }
// computer interface
diff --git a/src/devices/bus/pet/cb2snd.cpp b/src/devices/bus/pet/cb2snd.cpp
index a9f5ccb480a..fffbb70923e 100644
--- a/src/devices/bus/pet/cb2snd.cpp
+++ b/src/devices/bus/pet/cb2snd.cpp
@@ -26,12 +26,13 @@ DEFINE_DEVICE_TYPE(PET_USERPORT_CB2_SOUND_DEVICE, pet_userport_cb2_sound_device,
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(pet_userport_cb2_sound_device::device_add_mconfig)
+void pet_userport_cb2_sound_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "speaker").front_center();
- MCFG_DEVICE_ADD("dac", DAC_1BIT, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.99)
- MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
- MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT)
-MACHINE_CONFIG_END
+ DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.99);
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
+ vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
+}
//**************************************************************************
// LIVE DEVICE
diff --git a/src/devices/bus/pet/exp.cpp b/src/devices/bus/pet/exp.cpp
index ab7cc9e04dd..07aa7155b93 100644
--- a/src/devices/bus/pet/exp.cpp
+++ b/src/devices/bus/pet/exp.cpp
@@ -115,9 +115,9 @@ void pet_expansion_slot_device::device_reset()
// norom_r - NO ROM read
//-------------------------------------------------
-int pet_expansion_slot_device::norom_r(address_space &space, offs_t offset, int sel)
+int pet_expansion_slot_device::norom_r(offs_t offset, int sel)
{
- return m_card ? m_card->pet_norom_r(space, offset, sel) : 1;
+ return m_card ? m_card->pet_norom_r(offset, sel) : 1;
}
@@ -125,11 +125,11 @@ int pet_expansion_slot_device::norom_r(address_space &space, offs_t offset, int
// read - buffered data read
//-------------------------------------------------
-uint8_t pet_expansion_slot_device::read(address_space &space, offs_t offset, uint8_t data, int &sel)
+uint8_t pet_expansion_slot_device::read(offs_t offset, uint8_t data, int &sel)
{
if (m_card != nullptr)
{
- data = m_card->pet_bd_r(space, offset, data, sel);
+ data = m_card->pet_bd_r(offset, data, sel);
}
return data;
@@ -140,11 +140,11 @@ uint8_t pet_expansion_slot_device::read(address_space &space, offs_t offset, uin
// write - buffered data write
//-------------------------------------------------
-void pet_expansion_slot_device::write(address_space &space, offs_t offset, uint8_t data, int &sel)
+void pet_expansion_slot_device::write(offs_t offset, uint8_t data, int &sel)
{
if (m_card != nullptr)
{
- m_card->pet_bd_w(space, offset, data, sel);
+ m_card->pet_bd_w(offset, data, sel);
}
}
diff --git a/src/devices/bus/pet/exp.h b/src/devices/bus/pet/exp.h
index d44dcea6d19..39309b65f4c 100644
--- a/src/devices/bus/pet/exp.h
+++ b/src/devices/bus/pet/exp.h
@@ -23,21 +23,6 @@
#define PET_EXPANSION_SLOT_TAG "exp"
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_PET_EXPANSION_SLOT_ADD(_tag, _clock, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, PET_EXPANSION_SLOT, _clock) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-
-#define MCFG_PET_EXPANSION_SLOT_DMA_CALLBACKS(_read, _write) \
- downcast<pet_expansion_slot_device *>(device)->set_callbacks(DEVCB_##_read, DEVCB_##_write);
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -63,18 +48,13 @@ public:
pet_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~pet_expansion_slot_device();
- template <class Read, class Write> void set_callbacks(Read &&rd, Write &&wr) {
- m_read_dma.set_callback(std::forward<Read>(rd));
- m_write_dma.set_callback(std::forward<Write>(wr));
- }
-
auto dma_read_callback() { return m_read_dma.bind(); }
auto dma_write_callback() { return m_write_dma.bind(); }
// computer interface
- int norom_r(address_space &space, offs_t offset, int sel);
- uint8_t read(address_space &space, offs_t offset, uint8_t data, int &sel);
- void write(address_space &space, offs_t offset, uint8_t data, int &sel);
+ int norom_r(offs_t offset, int sel);
+ uint8_t read(offs_t offset, uint8_t data, int &sel);
+ void write(offs_t offset, uint8_t data, int &sel);
DECLARE_READ_LINE_MEMBER( diag_r );
DECLARE_WRITE_LINE_MEMBER( irq_w );
@@ -131,9 +111,9 @@ protected:
device_pet_expansion_card_interface(const machine_config &mconfig, device_t &device);
// runtime
- virtual int pet_norom_r(address_space &space, offs_t offset, int sel) { return 1; }
- virtual uint8_t pet_bd_r(address_space &space, offs_t offset, uint8_t data, int &sel) { return data; };
- virtual void pet_bd_w(address_space &space, offs_t offset, uint8_t data, int &sel) { };
+ virtual int pet_norom_r(offs_t offset, int sel) { return 1; }
+ virtual uint8_t pet_bd_r(offs_t offset, uint8_t data, int &sel) { return data; };
+ virtual void pet_bd_w(offs_t offset, uint8_t data, int &sel) { };
virtual int pet_diag_r() { return 1; }
virtual void pet_irq_w(int state) { }
diff --git a/src/devices/bus/pet/hsg.cpp b/src/devices/bus/pet/hsg.cpp
index 5288b632174..7c6e7c657d6 100644
--- a/src/devices/bus/pet/hsg.cpp
+++ b/src/devices/bus/pet/hsg.cpp
@@ -91,37 +91,39 @@ void cbm8000_hsg_b_device::hsg_b_map(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(cbm8000_hsg_a_device::device_add_mconfig)
- MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green())
- MCFG_SCREEN_UPDATE_DEVICE(EF9365_TAG, ef9365_device, screen_update)
- MCFG_SCREEN_SIZE(512, 512)
- MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 512-1)
- MCFG_SCREEN_REFRESH_RATE(25)
+void cbm8000_hsg_a_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER, rgb_t::green()));
+ screen.set_screen_update(EF9365_TAG, FUNC(ef9365_device::screen_update));
+ screen.set_size(512, 512);
+ screen.set_visarea(0, 512-1, 0, 512-1);
+ screen.set_refresh_hz(25);
PALETTE(config, "palette", palette_device::MONOCHROME);
- MCFG_DEVICE_ADD(EF9365_TAG, EF9365, 1750000)
- MCFG_VIDEO_SET_SCREEN(SCREEN_TAG)
- MCFG_DEVICE_ADDRESS_MAP(0, hsg_a_map)
- MCFG_EF936X_PALETTE("palette")
- MCFG_EF936X_BITPLANES_CNT(1);
- MCFG_EF936X_DISPLAYMODE(DISPLAY_MODE_512x512);
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(cbm8000_hsg_b_device::device_add_mconfig)
- MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green())
- MCFG_SCREEN_UPDATE_DEVICE(EF9366_TAG, ef9365_device, screen_update)
- MCFG_SCREEN_SIZE(512, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1)
- MCFG_SCREEN_REFRESH_RATE(50)
+ EF9365(config, m_gdc, 1750000);
+ m_gdc->set_screen(SCREEN_TAG);
+ m_gdc->set_addrmap(0, &cbm8000_hsg_a_device::hsg_a_map);
+ m_gdc->set_palette_tag("palette");
+ m_gdc->set_nb_bitplanes(1);
+ m_gdc->set_display_mode(ef9365_device::DISPLAY_MODE_512x512);
+}
+
+void cbm8000_hsg_b_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER, rgb_t::green()));
+ screen.set_screen_update(EF9366_TAG, FUNC(ef9365_device::screen_update));
+ screen.set_size(512, 256);
+ screen.set_visarea(0, 512-1, 0, 256-1);
+ screen.set_refresh_hz(50);
PALETTE(config, "palette", palette_device::MONOCHROME);
- MCFG_DEVICE_ADD(EF9366_TAG, EF9365, 1750000)
- MCFG_VIDEO_SET_SCREEN(SCREEN_TAG)
- MCFG_DEVICE_ADDRESS_MAP(0, hsg_b_map)
- MCFG_EF936X_PALETTE("palette")
- MCFG_EF936X_BITPLANES_CNT(1);
- MCFG_EF936X_DISPLAYMODE(DISPLAY_MODE_512x256);
-MACHINE_CONFIG_END
+ EF9365(config, m_gdc, 1750000); //EF9366
+ m_gdc->set_screen(SCREEN_TAG);
+ m_gdc->set_addrmap(0, &cbm8000_hsg_b_device::hsg_b_map);
+ m_gdc->set_palette_tag("palette");
+ m_gdc->set_nb_bitplanes(1);
+ m_gdc->set_display_mode(ef9365_device::DISPLAY_MODE_512x256);
+}
@@ -176,7 +178,7 @@ void cbm8000_hsg_device::device_reset()
// pet_norom_r - NO ROM read
//-------------------------------------------------
-int cbm8000_hsg_device::pet_norom_r(address_space &space, offs_t offset, int sel)
+int cbm8000_hsg_device::pet_norom_r(offs_t offset, int sel)
{
return !(offset >= 0x9000 && offset < 0xaf00);
}
@@ -186,7 +188,7 @@ int cbm8000_hsg_device::pet_norom_r(address_space &space, offs_t offset, int sel
// pet_bd_r - buffered data read
//-------------------------------------------------
-uint8_t cbm8000_hsg_device::pet_bd_r(address_space &space, offs_t offset, uint8_t data, int &sel)
+uint8_t cbm8000_hsg_device::pet_bd_r(offs_t offset, uint8_t data, int &sel)
{
switch (sel)
{
@@ -222,7 +224,7 @@ uint8_t cbm8000_hsg_device::pet_bd_r(address_space &space, offs_t offset, uint8_
}
else if (offset >= 0xaf70 && offset < 0xaf80)
{
- data = m_gdc->data_r(space, offset & 0x0f);
+ data = m_gdc->data_r(offset & 0x0f);
}
break;
}
@@ -235,7 +237,7 @@ uint8_t cbm8000_hsg_device::pet_bd_r(address_space &space, offs_t offset, uint8_
// pet_bd_w - buffered data write
//-------------------------------------------------
-void cbm8000_hsg_device::pet_bd_w(address_space &space, offs_t offset, uint8_t data, int &sel)
+void cbm8000_hsg_device::pet_bd_w(offs_t offset, uint8_t data, int &sel)
{
if (offset == 0xaf00)
{
@@ -256,6 +258,6 @@ void cbm8000_hsg_device::pet_bd_w(address_space &space, offs_t offset, uint8_t d
}
else if (offset >= 0xaf70 && offset < 0xaf80)
{
- m_gdc->data_w(space, offset & 0x0f, data);
+ m_gdc->data_w(offset & 0x0f, data);
}
}
diff --git a/src/devices/bus/pet/hsg.h b/src/devices/bus/pet/hsg.h
index 44abebbf9ef..e86cb101ac3 100644
--- a/src/devices/bus/pet/hsg.h
+++ b/src/devices/bus/pet/hsg.h
@@ -36,12 +36,13 @@ protected:
virtual const tiny_rom_entry *device_rom_region() const override;
// device_pet_expansion_card_interface overrides
- virtual int pet_norom_r(address_space &space, offs_t offset, int sel) override;
- virtual uint8_t pet_bd_r(address_space &space, offs_t offset, uint8_t data, int &sel) override;
- virtual void pet_bd_w(address_space &space, offs_t offset, uint8_t data, int &sel) override;
+ virtual int pet_norom_r(offs_t offset, int sel) override;
+ virtual uint8_t pet_bd_r(offs_t offset, uint8_t data, int &sel) override;
+ virtual void pet_bd_w(offs_t offset, uint8_t data, int &sel) override;
-private:
required_device<ef9365_device> m_gdc;
+
+private:
required_memory_region m_9000;
required_memory_region m_a000;
};
diff --git a/src/devices/bus/pet/superpet.cpp b/src/devices/bus/pet/superpet.cpp
index 1aa3ed05014..ab518bec49f 100644
--- a/src/devices/bus/pet/superpet.cpp
+++ b/src/devices/bus/pet/superpet.cpp
@@ -225,7 +225,7 @@ void superpet_device::device_reset()
// pet_norom_r - NO ROM read
//-------------------------------------------------
-int superpet_device::pet_norom_r(address_space &space, offs_t offset, int sel)
+int superpet_device::pet_norom_r(offs_t offset, int sel)
{
return BIT(m_system, 0);
}
@@ -235,9 +235,9 @@ int superpet_device::pet_norom_r(address_space &space, offs_t offset, int sel)
// pet_bd_r - buffered data read
//-------------------------------------------------
-uint8_t superpet_device::pet_bd_r(address_space &space, offs_t offset, uint8_t data, int &sel)
+uint8_t superpet_device::pet_bd_r(offs_t offset, uint8_t data, int &sel)
{
- int norom = pet_norom_r(space, offset, sel);
+ int norom = pet_norom_r(offset, sel);
switch (sel)
{
@@ -277,14 +277,14 @@ uint8_t superpet_device::pet_bd_r(address_space &space, offs_t offset, uint8_t d
case 0xefe1:
case 0xefe2:
case 0xefe3:
- data = m_dongle->read(space, offset & 0x03);
+ data = m_dongle->read(offset & 0x03);
break;
case 0xeff0:
case 0xeff1:
case 0xeff2:
case 0xeff3:
- data = m_acia->read(space, offset & 0x03);
+ data = m_acia->read(offset & 0x03);
break;
}
@@ -296,7 +296,7 @@ uint8_t superpet_device::pet_bd_r(address_space &space, offs_t offset, uint8_t d
// pet_bd_w - buffered data write
//-------------------------------------------------
-void superpet_device::pet_bd_w(address_space &space, offs_t offset, uint8_t data, int &sel)
+void superpet_device::pet_bd_w(offs_t offset, uint8_t data, int &sel)
{
switch (sel)
{
@@ -314,7 +314,7 @@ void superpet_device::pet_bd_w(address_space &space, offs_t offset, uint8_t data
case 0xefe1:
case 0xefe2:
case 0xefe3:
- m_dongle->write(space, offset & 0x03, data);
+ m_dongle->write(offset & 0x03, data);
printf("6702 %u %02x\n", offset & 0x03, data);
break;
@@ -322,7 +322,7 @@ void superpet_device::pet_bd_w(address_space &space, offs_t offset, uint8_t data
case 0xeff1:
case 0xeff2:
case 0xeff3:
- m_acia->write(space, offset & 0x03, data);
+ m_acia->write(offset & 0x03, data);
break;
case 0xeff8:
diff --git a/src/devices/bus/pet/superpet.h b/src/devices/bus/pet/superpet.h
index 35c74af8ab0..6a6dfde0889 100644
--- a/src/devices/bus/pet/superpet.h
+++ b/src/devices/bus/pet/superpet.h
@@ -41,9 +41,9 @@ protected:
virtual ioport_constructor device_input_ports() const override;
// device_pet_expansion_card_interface overrides
- virtual int pet_norom_r(address_space &space, offs_t offset, int sel) override;
- virtual uint8_t pet_bd_r(address_space &space, offs_t offset, uint8_t data, int &sel) override;
- virtual void pet_bd_w(address_space &space, offs_t offset, uint8_t data, int &sel) override;
+ virtual int pet_norom_r(offs_t offset, int sel) override;
+ virtual uint8_t pet_bd_r(offs_t offset, uint8_t data, int &sel) override;
+ virtual void pet_bd_w(offs_t offset, uint8_t data, int &sel) override;
virtual int pet_diag_r() override;
virtual void pet_irq_w(int state) override;
diff --git a/src/devices/bus/plus4/c1551.cpp b/src/devices/bus/plus4/c1551.cpp
index 63cda307f2b..333dea55fb0 100644
--- a/src/devices/bus/plus4/c1551.cpp
+++ b/src/devices/bus/plus4/c1551.cpp
@@ -57,7 +57,7 @@ const tiny_rom_entry *c1551_device::device_rom_region() const
// M6510_INTERFACE( cpu_intf )
//-------------------------------------------------
-READ8_MEMBER( c1551_device::port_r )
+uint8_t c1551_device::port_r()
{
/*
@@ -85,7 +85,7 @@ READ8_MEMBER( c1551_device::port_r )
return data;
}
-WRITE8_MEMBER( c1551_device::port_w )
+void c1551_device::port_w(uint8_t data)
{
/*
@@ -120,7 +120,7 @@ WRITE8_MEMBER( c1551_device::port_w )
// tpi6525_interface tpi0_intf
//-------------------------------------------------
-READ8_MEMBER( c1551_device::tcbm_data_r )
+uint8_t c1551_device::tcbm_data_r()
{
/*
@@ -140,7 +140,7 @@ READ8_MEMBER( c1551_device::tcbm_data_r )
return m_tcbm_data;
}
-WRITE8_MEMBER( c1551_device::tcbm_data_w )
+void c1551_device::tcbm_data_w(uint8_t data)
{
/*
@@ -160,9 +160,9 @@ WRITE8_MEMBER( c1551_device::tcbm_data_w )
m_tcbm_data = data;
}
-READ8_MEMBER( c1551_device::tpi0_r )
+uint8_t c1551_device::tpi0_r(offs_t offset)
{
- uint8_t data = m_tpi0->read(space, offset);
+ uint8_t data = m_tpi0->read(offset);
m_ga->ted_w(0);
m_ga->ted_w(1);
@@ -170,15 +170,15 @@ READ8_MEMBER( c1551_device::tpi0_r )
return data;
}
-WRITE8_MEMBER( c1551_device::tpi0_w )
+void c1551_device::tpi0_w(offs_t offset, uint8_t data)
{
- m_tpi0->write(space, offset, data);
+ m_tpi0->write(offset, data);
m_ga->ted_w(0);
m_ga->ted_w(1);
}
-READ8_MEMBER( c1551_device::tpi0_pc_r )
+uint8_t c1551_device::tpi0_pc_r()
{
/*
@@ -209,7 +209,7 @@ READ8_MEMBER( c1551_device::tpi0_pc_r )
return data;
}
-WRITE8_MEMBER( c1551_device::tpi0_pc_w )
+void c1551_device::tpi0_pc_w(uint8_t data)
{
/*
@@ -243,7 +243,7 @@ WRITE8_MEMBER( c1551_device::tpi0_pc_w )
// tpi6525_interface tpi1_intf
//-------------------------------------------------
-READ8_MEMBER( c1551_device::tpi1_pb_r )
+uint8_t c1551_device::tpi1_pb_r()
{
/*
@@ -263,7 +263,7 @@ READ8_MEMBER( c1551_device::tpi1_pb_r )
return m_status & 0x03;
}
-READ8_MEMBER( c1551_device::tpi1_pc_r )
+uint8_t c1551_device::tpi1_pc_r()
{
/*
@@ -288,7 +288,7 @@ READ8_MEMBER( c1551_device::tpi1_pc_r )
return data;
}
-WRITE8_MEMBER( c1551_device::tpi1_pc_w )
+void c1551_device::tpi1_pc_w(uint8_t data)
{
/*
@@ -524,13 +524,13 @@ bool c1551_device::tpi1_selected(offs_t offset)
// plus4_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t c1551_device::plus4_cd_r(address_space &space, offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h)
+uint8_t c1551_device::plus4_cd_r(offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h)
{
- data = m_exp->cd_r(space, offset, data, ba, cs0, c1l, c2l, cs1, c1h, c2h);
+ data = m_exp->cd_r(offset, data, ba, cs0, c1l, c2l, cs1, c1h, c2h);
if (tpi1_selected(offset))
{
- data = m_tpi1->read(space, offset & 0x07);
+ data = m_tpi1->read(offset & 0x07);
}
return data;
@@ -541,12 +541,12 @@ uint8_t c1551_device::plus4_cd_r(address_space &space, offs_t offset, uint8_t da
// plus4_cd_w - cartridge data write
//-------------------------------------------------
-void c1551_device::plus4_cd_w(address_space &space, offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h)
+void c1551_device::plus4_cd_w(offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h)
{
if (tpi1_selected(offset))
{
- m_tpi1->write(space, offset & 0x07, data);
+ m_tpi1->write(offset & 0x07, data);
}
- m_exp->cd_w(space, offset, data, ba, cs0, c1l, c2l, cs1, c1h, c2h);
+ m_exp->cd_w(offset, data, ba, cs0, c1l, c2l, cs1, c1h, c2h);
}
diff --git a/src/devices/bus/plus4/c1551.h b/src/devices/bus/plus4/c1551.h
index b108fc94ef1..3fce289461c 100644
--- a/src/devices/bus/plus4/c1551.h
+++ b/src/devices/bus/plus4/c1551.h
@@ -44,24 +44,24 @@ protected:
virtual ioport_constructor device_input_ports() const override;
// device_plus4_expansion_card_interface overrides
- virtual uint8_t plus4_cd_r(address_space &space, offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h) override;
- virtual void plus4_cd_w(address_space &space, offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h) override;
+ virtual uint8_t plus4_cd_r(offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h) override;
+ virtual void plus4_cd_w(offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h) override;
private:
- DECLARE_READ8_MEMBER( port_r );
- DECLARE_WRITE8_MEMBER( port_w );
+ uint8_t port_r();
+ void port_w(uint8_t data);
- DECLARE_READ8_MEMBER( tcbm_data_r );
- DECLARE_WRITE8_MEMBER( tcbm_data_w );
- DECLARE_READ8_MEMBER( tpi0_pc_r );
- DECLARE_WRITE8_MEMBER( tpi0_pc_w );
+ uint8_t tcbm_data_r();
+ void tcbm_data_w(uint8_t data);
+ uint8_t tpi0_pc_r();
+ void tpi0_pc_w(uint8_t data);
- DECLARE_READ8_MEMBER( tpi1_pb_r );
- DECLARE_READ8_MEMBER( tpi1_pc_r );
- DECLARE_WRITE8_MEMBER( tpi1_pc_w );
+ uint8_t tpi1_pb_r();
+ uint8_t tpi1_pc_r();
+ void tpi1_pc_w(uint8_t data);
- DECLARE_READ8_MEMBER( tpi0_r );
- DECLARE_WRITE8_MEMBER( tpi0_w );
+ uint8_t tpi0_r(offs_t offset);
+ void tpi0_w(offs_t offset, uint8_t data);
void c1551_mem(address_map &map);
diff --git a/src/devices/bus/plus4/exp.cpp b/src/devices/bus/plus4/exp.cpp
index d9ee8642eba..83e8ad4277a 100644
--- a/src/devices/bus/plus4/exp.cpp
+++ b/src/devices/bus/plus4/exp.cpp
@@ -167,11 +167,11 @@ std::string plus4_expansion_slot_device::get_default_card_software(get_default_c
// cd_r - cartridge data read
//-------------------------------------------------
-uint8_t plus4_expansion_slot_device::cd_r(address_space &space, offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h)
+uint8_t plus4_expansion_slot_device::cd_r(offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h)
{
if (m_card != nullptr)
{
- data = m_card->plus4_cd_r(space, offset, data, ba, cs0, c1l, c1h, cs1, c2l, c2h);
+ data = m_card->plus4_cd_r(offset, data, ba, cs0, c1l, c1h, cs1, c2l, c2h);
}
return data;
@@ -182,11 +182,11 @@ uint8_t plus4_expansion_slot_device::cd_r(address_space &space, offs_t offset, u
// cd_w - cartridge data write
//-------------------------------------------------
-void plus4_expansion_slot_device::cd_w(address_space &space, offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h)
+void plus4_expansion_slot_device::cd_w(offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h)
{
if (m_card != nullptr)
{
- m_card->plus4_cd_w(space, offset, data, ba, cs0, c1l, c1h, cs1, c2l, c2h);
+ m_card->plus4_cd_w(offset, data, ba, cs0, c1l, c1h, cs1, c2l, c2h);
}
}
diff --git a/src/devices/bus/plus4/exp.h b/src/devices/bus/plus4/exp.h
index e61755a497e..9f625442d99 100644
--- a/src/devices/bus/plus4/exp.h
+++ b/src/devices/bus/plus4/exp.h
@@ -49,37 +49,6 @@
#define PLUS4_EXPANSION_SLOT_TAG "exp"
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_PLUS4_EXPANSION_SLOT_ADD(_tag, _clock, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, PLUS4_EXPANSION_SLOT, _clock) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-#define MCFG_PLUS4_PASSTHRU_EXPANSION_SLOT_ADD() \
- MCFG_PLUS4_EXPANSION_SLOT_ADD(PLUS4_EXPANSION_SLOT_TAG, 0, plus4_expansion_cards, nullptr) \
- MCFG_PLUS4_EXPANSION_SLOT_IRQ_CALLBACK(WRITELINE(DEVICE_SELF_OWNER, plus4_expansion_slot_device, irq_w)) \
- MCFG_PLUS4_EXPANSION_SLOT_CD_INPUT_CALLBACK(READ8(DEVICE_SELF_OWNER, plus4_expansion_slot_device, dma_cd_r)) \
- MCFG_PLUS4_EXPANSION_SLOT_CD_OUTPUT_CALLBACK(WRITE8(DEVICE_SELF_OWNER, plus4_expansion_slot_device, dma_cd_w)) \
- MCFG_PLUS4_EXPANSION_SLOT_AEC_CALLBACK(WRITELINE(DEVICE_SELF_OWNER, plus4_expansion_slot_device, aec_w))
-
-
-#define MCFG_PLUS4_EXPANSION_SLOT_IRQ_CALLBACK(_write) \
- downcast<plus4_expansion_slot_device &>(*device).set_irq_wr_callback(DEVCB_##_write);
-
-#define MCFG_PLUS4_EXPANSION_SLOT_CD_INPUT_CALLBACK(_read) \
- downcast<plus4_expansion_slot_device &>(*device).set_cd_rd_callback(DEVCB_##_read);
-
-#define MCFG_PLUS4_EXPANSION_SLOT_CD_OUTPUT_CALLBACK(_write) \
- downcast<plus4_expansion_slot_device &>(*device).set_cd_wr_callback(DEVCB_##_write);
-
-#define MCFG_PLUS4_EXPANSION_SLOT_AEC_CALLBACK(_write) \
- downcast<plus4_expansion_slot_device &>(*device).set_aec_wr_callback(DEVCB_##_write);
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -111,12 +80,12 @@ public:
auto aec_wr_callback() { return m_write_aec.bind(); }
// computer interface
- uint8_t cd_r(address_space &space, offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h);
- void cd_w(address_space &space, offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h);
+ uint8_t cd_r(offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h);
+ void cd_w(offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h);
// cartridge interface
- DECLARE_READ8_MEMBER( dma_cd_r ) { return m_read_dma_cd(offset); }
- DECLARE_WRITE8_MEMBER( dma_cd_w ) { m_write_dma_cd(offset, data); }
+ uint8_t dma_cd_r(offs_t offset) { return m_read_dma_cd(offset); }
+ void dma_cd_w(offs_t offset, uint8_t data) { m_write_dma_cd(offset, data); }
DECLARE_WRITE_LINE_MEMBER( irq_w ) { m_write_irq(state); }
DECLARE_WRITE_LINE_MEMBER( aec_w ) { m_write_aec(state); }
int phi2() { return clock(); }
@@ -164,8 +133,8 @@ public:
virtual ~device_plus4_expansion_card_interface();
// runtime
- virtual uint8_t plus4_cd_r(address_space &space, offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h) { return data; }
- virtual void plus4_cd_w(address_space &space, offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h) { }
+ virtual uint8_t plus4_cd_r(offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h) { return data; }
+ virtual void plus4_cd_w(offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h) { }
protected:
device_plus4_expansion_card_interface(const machine_config &mconfig, device_t &device);
diff --git a/src/devices/bus/plus4/sid.cpp b/src/devices/bus/plus4/sid.cpp
index f97deec6310..1ebfdafd657 100644
--- a/src/devices/bus/plus4/sid.cpp
+++ b/src/devices/bus/plus4/sid.cpp
@@ -64,13 +64,13 @@ const tiny_rom_entry *plus4_sid_cartridge_device::device_rom_region() const
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(plus4_sid_cartridge_device::device_add_mconfig)
+void plus4_sid_cartridge_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "speaker").front_center();
- MCFG_DEVICE_ADD(MOS8580_TAG, MOS8580, XTAL(17'734'470)/20)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.0)
+ MOS8580(config, m_sid, XTAL(17'734'470)/20).add_route(ALL_OUTPUTS, "speaker", 1.0);
- MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, nullptr)
-MACHINE_CONFIG_END
+ VCS_CONTROL_PORT(config, m_joy, vcs_control_port_devices, nullptr);
+}
@@ -114,15 +114,15 @@ void plus4_sid_cartridge_device::device_reset()
// plus4_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t plus4_sid_cartridge_device::plus4_cd_r(address_space &space, offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h)
+uint8_t plus4_sid_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 ((offset >= 0xfe80 && offset < 0xfea0) || (offset >= 0xfd40 && offset < 0xfd60))
{
- data = m_sid->read(space, offset & 0x1f);
+ data = m_sid->read(offset & 0x1f);
}
else if (offset >= 0xfd80 && offset < 0xfd90)
{
- data = m_joy->joy_r(space, 0);
+ data = m_joy->joy_r(machine().dummy_space(), 0);
}
return data;
@@ -133,11 +133,11 @@ uint8_t plus4_sid_cartridge_device::plus4_cd_r(address_space &space, offs_t offs
// plus4_cd_w - cartridge data write
//-------------------------------------------------
-void plus4_sid_cartridge_device::plus4_cd_w(address_space &space, offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h)
+void plus4_sid_cartridge_device::plus4_cd_w(offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h)
{
if ((offset >= 0xfe80 && offset < 0xfea0) || (offset >= 0xfd40 && offset < 0xfd60))
{
- m_sid->write(space, offset & 0x1f, data);
+ m_sid->write(offset & 0x1f, data);
}
}
diff --git a/src/devices/bus/plus4/sid.h b/src/devices/bus/plus4/sid.h
index 90a22fa15c8..1566381e6d2 100644
--- a/src/devices/bus/plus4/sid.h
+++ b/src/devices/bus/plus4/sid.h
@@ -40,8 +40,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_plus4_expansion_card_interface overrides
- virtual uint8_t plus4_cd_r(address_space &space, offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h) override;
- virtual void plus4_cd_w(address_space &space, offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h) override;
+ virtual uint8_t plus4_cd_r(offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h) override;
+ virtual void plus4_cd_w(offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h) override;
virtual void plus4_breset_w(int state);
private:
diff --git a/src/devices/bus/plus4/std.cpp b/src/devices/bus/plus4/std.cpp
index 835ecac7d4a..c8efe4b679f 100644
--- a/src/devices/bus/plus4/std.cpp
+++ b/src/devices/bus/plus4/std.cpp
@@ -47,7 +47,7 @@ void plus4_standard_cartridge_device::device_start()
// plus4_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t plus4_standard_cartridge_device::plus4_cd_r(address_space &space, offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h)
+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())
{
diff --git a/src/devices/bus/plus4/std.h b/src/devices/bus/plus4/std.h
index d154f0bcadc..f1f3ae75328 100644
--- a/src/devices/bus/plus4/std.h
+++ b/src/devices/bus/plus4/std.h
@@ -33,7 +33,7 @@ protected:
virtual void device_start() override;
// device_plus4_expansion_card_interface overrides
- virtual uint8_t plus4_cd_r(address_space &space, offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h) override;
+ virtual uint8_t plus4_cd_r(offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h) override;
};
diff --git a/src/devices/bus/pofo/ccm.h b/src/devices/bus/pofo/ccm.h
index b7deab09c69..42bfcb4356d 100644
--- a/src/devices/bus/pofo/ccm.h
+++ b/src/devices/bus/pofo/ccm.h
@@ -60,17 +60,6 @@
#define PORTFOLIO_MEMORY_CARD_SLOT_B_TAG "ccmb"
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_PORTFOLIO_MEMORY_CARD_SLOT_ADD(_tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, PORTFOLIO_MEMORY_CARD_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -86,8 +75,8 @@ class device_portfolio_memory_card_slot_interface : public device_slot_card_inte
public:
virtual bool cdet() { return 1; }
- virtual uint8_t nrdi_r(address_space &space, offs_t offset) { return 0xff; }
- virtual void nwri_w(address_space &space, offs_t offset, uint8_t data) { }
+ virtual uint8_t nrdi_r(offs_t offset) { return 0xff; }
+ virtual void nwri_w(offs_t offset, uint8_t data) { }
protected:
// construction/destruction
@@ -108,13 +97,23 @@ class portfolio_memory_card_slot_device : public device_t,
{
public:
// construction/destruction
- portfolio_memory_card_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ portfolio_memory_card_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : portfolio_memory_card_slot_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ portfolio_memory_card_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
// computer interface
bool cdet_r() { return (m_card != nullptr) ? m_card->cdet() : 1; }
- DECLARE_READ8_MEMBER( nrdi_r ) { return (m_card != nullptr) ? m_card->nrdi_r(space, offset) : 0xff; }
- DECLARE_WRITE8_MEMBER( nwri_w ) { if (m_card != nullptr) m_card->nwri_w(space, offset, data); }
+ uint8_t nrdi_r(offs_t offset) { return (m_card != nullptr) ? m_card->nrdi_r(offset) : 0xff; }
+ void nwri_w(offs_t offset, uint8_t data) { if (m_card != nullptr) m_card->nwri_w(offset, data); }
protected:
// device-level overrides
diff --git a/src/devices/bus/pofo/exp.h b/src/devices/bus/pofo/exp.h
index ab0685d28ca..2206d5af2fe 100644
--- a/src/devices/bus/pofo/exp.h
+++ b/src/devices/bus/pofo/exp.h
@@ -54,26 +54,6 @@
#define PORTFOLIO_EXPANSION_SLOT_TAG "exp"
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_PORTFOLIO_EXPANSION_SLOT_ADD(_tag, _clock, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, PORTFOLIO_EXPANSION_SLOT, _clock) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-#define MCFG_PORTFOLIO_EXPANSION_SLOT_EINT_CALLBACK(_write) \
- downcast<portfolio_expansion_slot_device &>(*device).set_eint_wr_callback(DEVCB_##_write);
-
-#define MCFG_PORTFOLIO_EXPANSION_SLOT_NMIO_CALLBACK(_write) \
- downcast<portfolio_expansion_slot_device &>(*device).set_nmio_wr_callback(DEVCB_##_write);
-
-#define MCFG_PORTFOLIO_EXPANSION_SLOT_WAKE_CALLBACK(_write) \
- downcast<portfolio_expansion_slot_device &>(*device).set_wake_wr_callback(DEVCB_##_write);
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -92,8 +72,8 @@ public:
virtual uint8_t iack_r() { return 0xff; }
virtual uint8_t eack_r() { return 0xff; }
- virtual uint8_t nrdi_r(address_space &space, offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1) { return data; }
- virtual void nwri_w(address_space &space, offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1) { }
+ virtual uint8_t nrdi_r(offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1) { return data; }
+ virtual void nwri_w(offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1) { }
virtual WRITE_LINE_MEMBER( iint_w ) { }
@@ -115,11 +95,21 @@ class portfolio_expansion_slot_device : public device_t, public device_slot_inte
{
public:
// construction/destruction
+ template <typename T>
+ portfolio_expansion_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock, T &&opts, char const *dflt)
+ : portfolio_expansion_slot_device(mconfig, tag, owner, clock)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
portfolio_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- template <class Object> devcb_base &set_eint_wr_callback(Object &&cb) { return m_write_eint.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_nmio_wr_callback(Object &&cb) { return m_write_nmio.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_wake_wr_callback(Object &&cb) { return m_write_wake.set_callback(std::forward<Object>(cb)); }
+ auto eint_wr_callback() { return m_write_eint.bind(); }
+ auto nmio_wr_callback() { return m_write_nmio.bind(); }
+ auto wake_wr_callback() { return m_write_wake.bind(); }
// computer interface
bool nmd1_r() { return (m_card != nullptr) ? m_card->nmd1() : 1; }
@@ -129,8 +119,8 @@ public:
uint8_t iack_r() { return (m_card != nullptr) ? m_card->iack_r() : 0xff; };
uint8_t eack_r() { return (m_card != nullptr) ? m_card->eack_r() : 0xff; };
- uint8_t nrdi_r(address_space &space, offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1) { return (m_card != nullptr) ? m_card->nrdi_r(space, offset, data, iom, bcom, ncc1) : data; }
- void nwri_w(address_space &space, offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1) { if (m_card != nullptr) m_card->nwri_w(space, offset, data, iom, bcom, ncc1); }
+ uint8_t nrdi_r(offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1) { return (m_card != nullptr) ? m_card->nrdi_r(offset, data, iom, bcom, ncc1) : data; }
+ void nwri_w(offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1) { if (m_card != nullptr) m_card->nwri_w(offset, data, iom, bcom, ncc1); }
WRITE_LINE_MEMBER( iint_w ) { if (m_card != nullptr) m_card->iint_w(state); }
diff --git a/src/devices/bus/pofo/hpc101.cpp b/src/devices/bus/pofo/hpc101.cpp
index 93268e95bb6..d62f1002f7d 100644
--- a/src/devices/bus/pofo/hpc101.cpp
+++ b/src/devices/bus/pofo/hpc101.cpp
@@ -33,28 +33,31 @@ DEFINE_DEVICE_TYPE(POFO_HPC101, pofo_hpc101_device, "pofo_hpc101", "Atari Portfo
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(pofo_hpc101_device::device_add_mconfig)
+void pofo_hpc101_device::device_add_mconfig(machine_config &config)
+{
I8255A(config, m_ppi);
m_ppi->out_pa_callback().set("cent_data_out", FUNC(output_latch_device::bus_w));
m_ppi->out_pb_callback().set("cent_ctrl_out", FUNC(output_latch_device::bus_w));
m_ppi->in_pc_callback().set("cent_status_in", FUNC(input_buffer_device::bus_r));
- MCFG_DEVICE_ADD(CENTRONICS_TAG, CENTRONICS, centronics_devices, "printer")
- MCFG_CENTRONICS_ACK_HANDLER(WRITELINE("cent_status_in", input_buffer_device, write_bit5))
- MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE("cent_status_in", input_buffer_device, write_bit4))
- MCFG_CENTRONICS_FAULT_HANDLER(WRITELINE("cent_status_in", input_buffer_device, write_bit3))
- MCFG_CENTRONICS_SELECT_HANDLER(WRITELINE("cent_status_in", input_buffer_device, write_bit1))
- MCFG_CENTRONICS_PERROR_HANDLER(WRITELINE("cent_status_in", input_buffer_device, write_bit0))
+ centronics_device &centronics(CENTRONICS(config, CENTRONICS_TAG, centronics_devices, "printer"));
+ centronics.ack_handler().set("cent_status_in", FUNC(input_buffer_device::write_bit5));
+ centronics.busy_handler().set("cent_status_in", FUNC(input_buffer_device::write_bit4));
+ centronics.fault_handler().set("cent_status_in", FUNC(input_buffer_device::write_bit3));
+ centronics.select_handler().set("cent_status_in", FUNC(input_buffer_device::write_bit1));
+ centronics.perror_handler().set("cent_status_in", FUNC(input_buffer_device::write_bit0));
+
+ output_latch_device &cent_data_out(OUTPUT_LATCH(config, "cent_data_out"));
+ centronics.set_output_latch(cent_data_out);
- MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
- MCFG_DEVICE_ADD("cent_status_in", INPUT_BUFFER, 0)
+ INPUT_BUFFER(config, "cent_status_in");
- MCFG_DEVICE_ADD("cent_ctrl_out", OUTPUT_LATCH, 0)
- MCFG_OUTPUT_LATCH_BIT0_HANDLER(WRITELINE(CENTRONICS_TAG, centronics_device, write_strobe))
- MCFG_OUTPUT_LATCH_BIT1_HANDLER(WRITELINE(CENTRONICS_TAG, centronics_device, write_autofd))
- MCFG_OUTPUT_LATCH_BIT2_HANDLER(WRITELINE(CENTRONICS_TAG, centronics_device, write_init))
- MCFG_OUTPUT_LATCH_BIT3_HANDLER(WRITELINE(CENTRONICS_TAG, centronics_device, write_select_in))
-MACHINE_CONFIG_END
+ output_latch_device &cent_ctrl_out(OUTPUT_LATCH(config, "cent_ctrl_out"));
+ cent_ctrl_out.bit_handler<0>().set(CENTRONICS_TAG, FUNC(centronics_device::write_strobe));
+ cent_ctrl_out.bit_handler<1>().set(CENTRONICS_TAG, FUNC(centronics_device::write_autofd));
+ cent_ctrl_out.bit_handler<2>().set(CENTRONICS_TAG, FUNC(centronics_device::write_init));
+ cent_ctrl_out.bit_handler<3>().set(CENTRONICS_TAG, FUNC(centronics_device::write_select_in));
+}
//**************************************************************************
@@ -96,7 +99,7 @@ void pofo_hpc101_device::device_reset()
// nrdi_r - read
//-------------------------------------------------
-uint8_t pofo_hpc101_device::nrdi_r(address_space &space, offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1)
+uint8_t pofo_hpc101_device::nrdi_r(offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1)
{
if (!bcom)
{
@@ -119,7 +122,7 @@ uint8_t pofo_hpc101_device::nrdi_r(address_space &space, offs_t offset, uint8_t
// nwri_w - write
//-------------------------------------------------
-void pofo_hpc101_device::nwri_w(address_space &space, offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1)
+void pofo_hpc101_device::nwri_w(offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1)
{
if (!bcom)
{
diff --git a/src/devices/bus/pofo/hpc101.h b/src/devices/bus/pofo/hpc101.h
index 797f95c32d3..fa18b5d6d4d 100644
--- a/src/devices/bus/pofo/hpc101.h
+++ b/src/devices/bus/pofo/hpc101.h
@@ -40,8 +40,8 @@ protected:
// device_portfolio_expansion_slot_interface overrides
bool pdet() override { return 1; }
- virtual uint8_t nrdi_r(address_space &space, offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1) override;
- virtual void nwri_w(address_space &space, offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1) override;
+ virtual uint8_t nrdi_r(offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1) override;
+ virtual void nwri_w(offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1) override;
private:
required_device<i8255_device> m_ppi;
diff --git a/src/devices/bus/pofo/hpc102.cpp b/src/devices/bus/pofo/hpc102.cpp
index 298b36c7cbe..42bc8b550fe 100644
--- a/src/devices/bus/pofo/hpc102.cpp
+++ b/src/devices/bus/pofo/hpc102.cpp
@@ -99,7 +99,7 @@ uint8_t pofo_hpc102_device::eack_r()
// nrdi_r - read
//-------------------------------------------------
-uint8_t pofo_hpc102_device::nrdi_r(address_space &space, offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1)
+uint8_t pofo_hpc102_device::nrdi_r(offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1)
{
if (!bcom)
{
@@ -110,7 +110,7 @@ uint8_t pofo_hpc102_device::nrdi_r(address_space &space, offs_t offset, uint8_t
if (!(offset & 0x08))
{
- data = m_uart->ins8250_r(space, offset & 0x07);
+ data = m_uart->ins8250_r(machine().dummy_space(), offset & 0x07);
}
}
@@ -122,7 +122,7 @@ uint8_t pofo_hpc102_device::nrdi_r(address_space &space, offs_t offset, uint8_t
// nwri_w - write
//-------------------------------------------------
-void pofo_hpc102_device::nwri_w(address_space &space, offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1)
+void pofo_hpc102_device::nwri_w(offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1)
{
if (!bcom)
{
@@ -133,7 +133,7 @@ void pofo_hpc102_device::nwri_w(address_space &space, offs_t offset, uint8_t dat
if (!(offset & 0x08))
{
- m_uart->ins8250_w(space, offset & 0x07, data);
+ m_uart->ins8250_w(machine().dummy_space(), offset & 0x07, data);
}
}
}
diff --git a/src/devices/bus/pofo/hpc102.h b/src/devices/bus/pofo/hpc102.h
index bfe91e9f459..c7168b12787 100644
--- a/src/devices/bus/pofo/hpc102.h
+++ b/src/devices/bus/pofo/hpc102.h
@@ -42,8 +42,8 @@ protected:
virtual uint8_t eack_r() override;
- virtual uint8_t nrdi_r(address_space &space, offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1) override;
- virtual void nwri_w(address_space &space, offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1) override;
+ virtual uint8_t nrdi_r(offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1) override;
+ virtual void nwri_w(offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1) override;
private:
required_device<ins8250_device> m_uart;
diff --git a/src/devices/bus/pofo/hpc104.cpp b/src/devices/bus/pofo/hpc104.cpp
index a6de6852e78..a6e66f13da8 100644
--- a/src/devices/bus/pofo/hpc104.cpp
+++ b/src/devices/bus/pofo/hpc104.cpp
@@ -31,14 +31,15 @@ DEFINE_DEVICE_TYPE(POFO_HPC104_2, pofo_hpc104_2_device, "pofo_hpc104_2", "Atari
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(pofo_hpc104_device::device_add_mconfig)
- MCFG_PORTFOLIO_MEMORY_CARD_SLOT_ADD(PORTFOLIO_MEMORY_CARD_SLOT_B_TAG, portfolio_memory_cards, nullptr)
+void pofo_hpc104_device::device_add_mconfig(machine_config &config)
+{
+ PORTFOLIO_MEMORY_CARD_SLOT(config, m_ccm, portfolio_memory_cards, nullptr);
- MCFG_PORTFOLIO_EXPANSION_SLOT_ADD(PORTFOLIO_EXPANSION_SLOT_TAG, XTAL(4'915'200), portfolio_expansion_cards, nullptr)
- MCFG_PORTFOLIO_EXPANSION_SLOT_EINT_CALLBACK(WRITELINE(DEVICE_SELF_OWNER, portfolio_expansion_slot_device, eint_w))
- MCFG_PORTFOLIO_EXPANSION_SLOT_NMIO_CALLBACK(WRITELINE(DEVICE_SELF_OWNER, portfolio_expansion_slot_device, nmio_w))
- MCFG_PORTFOLIO_EXPANSION_SLOT_WAKE_CALLBACK(WRITELINE(DEVICE_SELF_OWNER, portfolio_expansion_slot_device, wake_w))
-MACHINE_CONFIG_END
+ PORTFOLIO_EXPANSION_SLOT(config, m_exp, XTAL(4'915'200), portfolio_expansion_cards, nullptr);
+ m_exp->eint_wr_callback().set(DEVICE_SELF_OWNER, FUNC(portfolio_expansion_slot_device::eint_w));
+ m_exp->nmio_wr_callback().set(DEVICE_SELF_OWNER, FUNC(portfolio_expansion_slot_device::nmio_w));
+ m_exp->wake_wr_callback().set(DEVICE_SELF_OWNER, FUNC(portfolio_expansion_slot_device::wake_w));
+}
//-------------------------------------------------
@@ -146,15 +147,15 @@ void pofo_hpc104_device::device_reset()
// nrdi_r - read
//-------------------------------------------------
-uint8_t pofo_hpc104_device::nrdi_r(address_space &space, offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1)
+uint8_t pofo_hpc104_device::nrdi_r(offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1)
{
- data = m_exp->nrdi_r(space, offset, data, iom, bcom, m_ncc1_out || ncc1);
+ data = m_exp->nrdi_r(offset, data, iom, bcom, m_ncc1_out || ncc1);
if (!iom)
{
if (!(!m_ncc1_out || ncc1))
{
- data = m_ccm->nrdi_r(space, offset & 0x1ffff);
+ data = m_ccm->nrdi_r(offset & 0x1ffff);
if (LOG) logerror("%s %s CCM1 read %05x:%02x\n", machine().time().as_string(), machine().describe_context(), offset & 0x1ffff, data);
}
@@ -183,9 +184,9 @@ uint8_t pofo_hpc104_device::nrdi_r(address_space &space, offs_t offset, uint8_t
// nwri_w - write
//-------------------------------------------------
-void pofo_hpc104_device::nwri_w(address_space &space, offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1)
+void pofo_hpc104_device::nwri_w(offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1)
{
- m_exp->nwri_w(space, offset, data, iom, bcom, m_ncc1_out || ncc1);
+ m_exp->nwri_w(offset, data, iom, bcom, m_ncc1_out || ncc1);
if (!iom)
{
@@ -193,7 +194,7 @@ void pofo_hpc104_device::nwri_w(address_space &space, offs_t offset, uint8_t dat
{
if (LOG) logerror("%s %s CCM1 write %05x:%02x\n", machine().time().as_string(), machine().describe_context(), offset & 0x1ffff, data);
- m_ccm->nwri_w(space, offset & 0x1ffff, data);
+ m_ccm->nwri_w(offset & 0x1ffff, data);
}
if (m_sw1)
diff --git a/src/devices/bus/pofo/hpc104.h b/src/devices/bus/pofo/hpc104.h
index f863a45f39b..042bece210e 100644
--- a/src/devices/bus/pofo/hpc104.h
+++ b/src/devices/bus/pofo/hpc104.h
@@ -50,8 +50,8 @@ protected:
// device_portfolio_expansion_slot_interface overrides
virtual bool nmd1() override { return m_ccm->cdet_r(); }
- virtual uint8_t nrdi_r(address_space &space, offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1) override;
- virtual void nwri_w(address_space &space, offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1) override;
+ virtual uint8_t nrdi_r(offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1) override;
+ virtual void nwri_w(offs_t offset, uint8_t data, bool iom, bool bcom, bool ncc1) override;
virtual WRITE_LINE_MEMBER( iint_w ) override { m_exp->iint_w(state); }
diff --git a/src/devices/bus/pofo/ram.cpp b/src/devices/bus/pofo/ram.cpp
index 6ef861a0b5d..5498a9b8c32 100644
--- a/src/devices/bus/pofo/ram.cpp
+++ b/src/devices/bus/pofo/ram.cpp
@@ -48,7 +48,7 @@ void portfolio_ram_card_device::device_start()
// nrdi_r - read
//-------------------------------------------------
-uint8_t portfolio_ram_card_device::nrdi_r(address_space &space, offs_t offset)
+uint8_t portfolio_ram_card_device::nrdi_r(offs_t offset)
{
return m_nvram[offset];
}
@@ -58,7 +58,7 @@ uint8_t portfolio_ram_card_device::nrdi_r(address_space &space, offs_t offset)
// nwri_w - write
//-------------------------------------------------
-void portfolio_ram_card_device::nwri_w(address_space &space, offs_t offset, uint8_t data)
+void portfolio_ram_card_device::nwri_w(offs_t offset, uint8_t data)
{
m_nvram[offset] = data;
}
diff --git a/src/devices/bus/pofo/ram.h b/src/devices/bus/pofo/ram.h
index 9d126b51a2c..2c19f807816 100644
--- a/src/devices/bus/pofo/ram.h
+++ b/src/devices/bus/pofo/ram.h
@@ -42,8 +42,8 @@ protected:
// device_portfolio_memory_card_slot_interface overrides
virtual bool cdet() override { return 0; }
- virtual uint8_t nrdi_r(address_space &space, offs_t offset) override;
- virtual void nwri_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t nrdi_r(offs_t offset) override;
+ virtual void nwri_w(offs_t offset, uint8_t data) override;
};
diff --git a/src/devices/bus/pofo/rom.cpp b/src/devices/bus/pofo/rom.cpp
index 8155444783a..ac336eb0b77 100644
--- a/src/devices/bus/pofo/rom.cpp
+++ b/src/devices/bus/pofo/rom.cpp
@@ -46,7 +46,7 @@ void portfolio_rom_card_device::device_start()
// nrdi_r - read
//-------------------------------------------------
-uint8_t portfolio_rom_card_device::nrdi_r(address_space &space, offs_t offset)
+uint8_t portfolio_rom_card_device::nrdi_r(offs_t offset)
{
return m_rom[offset];
}
diff --git a/src/devices/bus/pofo/rom.h b/src/devices/bus/pofo/rom.h
index eab0ff1fde4..6df19402a36 100644
--- a/src/devices/bus/pofo/rom.h
+++ b/src/devices/bus/pofo/rom.h
@@ -35,7 +35,7 @@ protected:
// device_portfolio_memory_card_slot_interface overrides
virtual bool cdet() override { return 0; }
- virtual uint8_t nrdi_r(address_space &space, offs_t offset) override;
+ virtual uint8_t nrdi_r(offs_t offset) override;
};
diff --git a/src/devices/bus/psi_kbd/ergoline.cpp b/src/devices/bus/psi_kbd/ergoline.cpp
index 20c02052221..7b892cf861b 100644
--- a/src/devices/bus/psi_kbd/ergoline.cpp
+++ b/src/devices/bus/psi_kbd/ergoline.cpp
@@ -58,11 +58,12 @@ const tiny_rom_entry *ergoline_keyboard_device::device_rom_region() const
return ROM_NAME(kbd_pcb);
}
-MACHINE_CONFIG_START(ergoline_keyboard_device::device_add_mconfig)
- MCFG_DEVICE_ADD("maincpu", I8031, XTAL(5'529'600))
- MCFG_DEVICE_PROGRAM_MAP(kbd_mem)
- MCFG_DEVICE_IO_MAP(kbd_io)
-MACHINE_CONFIG_END
+void ergoline_keyboard_device::device_add_mconfig(machine_config &config)
+{
+ i8031_device &maincpu(I8031(config, "maincpu", XTAL(5'529'600)));
+ maincpu.set_addrmap(AS_PROGRAM, &ergoline_keyboard_device::kbd_mem);
+ maincpu.set_addrmap(AS_IO, &ergoline_keyboard_device::kbd_io);
+}
//**************************************************************************
diff --git a/src/devices/bus/psi_kbd/psi_kbd.h b/src/devices/bus/psi_kbd/psi_kbd.h
index 8e62b1df17b..39aaa84d9d3 100644
--- a/src/devices/bus/psi_kbd/psi_kbd.h
+++ b/src/devices/bus/psi_kbd/psi_kbd.h
@@ -30,21 +30,8 @@
#pragma once
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_PSI_KEYBOARD_INTERFACE_ADD(_tag, _def_slot) \
- MCFG_DEVICE_ADD(_tag, PSI_KEYBOARD_INTERFACE, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(psi_keyboard_devices, _def_slot, false)
-
-#define MCFG_PSI_KEYBOARD_RX_HANDLER(_devcb) \
- downcast<psi_keyboard_bus_device &>(*device).set_rx_handler(DEVCB_##_devcb);
-
-#define MCFG_PSI_KEYBOARD_KEY_STROBE_HANDLER(_devcb) \
- downcast<psi_keyboard_bus_device &>(*device).set_key_strobe_handler(DEVCB_##_devcb);
-
+// supported devices
+void psi_keyboard_devices(device_slot_interface &device);
//**************************************************************************
// TYPE DEFINITIONS
@@ -58,12 +45,20 @@ class psi_keyboard_bus_device : public device_t, public device_slot_interface
{
public:
// construction/destruction
+ psi_keyboard_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, const char *dflt)
+ : psi_keyboard_bus_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ option_reset();
+ psi_keyboard_devices(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
psi_keyboard_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~psi_keyboard_bus_device();
// callbacks
- template <class Object> devcb_base &set_rx_handler(Object &&cb) { return m_rx_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_key_strobe_handler(Object &&cb) { return m_key_strobe_handler.set_callback(std::forward<Object>(cb)); }
+ auto rx() { return m_rx_handler.bind(); }
+ auto key_strobe() { return m_key_strobe_handler.bind(); }
// called from keyboard
DECLARE_WRITE_LINE_MEMBER( rx_w ) { m_rx_handler(state); }
@@ -104,12 +99,7 @@ protected:
psi_keyboard_bus_device *m_host;
};
-
// device type definition
DECLARE_DEVICE_TYPE(PSI_KEYBOARD_INTERFACE, psi_keyboard_bus_device)
-// supported devices
-void psi_keyboard_devices(device_slot_interface &device);
-
-
#endif // MAME_BUS_PSI_KBD_PSI_KBD_H
diff --git a/src/devices/bus/psx/ctlrport.cpp b/src/devices/bus/psx/ctlrport.cpp
index b3c34f8b2b5..05aae5c5b72 100644
--- a/src/devices/bus/psx/ctlrport.cpp
+++ b/src/devices/bus/psx/ctlrport.cpp
@@ -25,9 +25,10 @@ void psx_controller_port_device::device_config_complete()
m_dev = dynamic_cast<device_psx_controller_interface *>(get_card_device());
}
-MACHINE_CONFIG_START(psx_controller_port_device::device_add_mconfig)
- MCFG_PSXCARD_ADD("card")
-MACHINE_CONFIG_END
+void psx_controller_port_device::device_add_mconfig(machine_config &config)
+{
+ PSXCARD(config, m_card, 0);
+}
void psx_controller_port_device::disable_card(bool state)
{
diff --git a/src/devices/bus/psx/ctlrport.h b/src/devices/bus/psx/ctlrport.h
index 718ac8fb35d..2058cf4868c 100644
--- a/src/devices/bus/psx/ctlrport.h
+++ b/src/devices/bus/psx/ctlrport.h
@@ -77,11 +77,6 @@ private:
required_ioport m_pad1;
};
-#define MCFG_PSX_CONTROLLER_PORTS_DSR_HANDLER(_devcb) \
- downcast<psxcontrollerports_device &>(*device).set_dsr_handler(DEVCB_##_devcb);
-
-#define MCFG_PSX_CONTROLLER_PORTS_RXD_HANDLER(_devcb) \
- downcast<psxcontrollerports_device &>(*device).set_rxd_handler(DEVCB_##_devcb);
class psxcontrollerports_device : public device_t
{
diff --git a/src/devices/bus/psx/gamebooster.cpp b/src/devices/bus/psx/gamebooster.cpp
index 3513f7714e2..309ff1949a3 100644
--- a/src/devices/bus/psx/gamebooster.cpp
+++ b/src/devices/bus/psx/gamebooster.cpp
@@ -82,8 +82,8 @@ READ16_MEMBER(psx_gamebooster_device::exp_r)
offset -= 0x20000;
uint16_t retval = 0;;
- if (mem_mask & 0xff00) retval |= (m_cartslot->read_rom(space, (offset*2)+1))<<8;
- if (mem_mask & 0x00ff) retval |= m_cartslot->read_rom(space, (offset*2)+0);
+ if (mem_mask & 0xff00) retval |= (m_cartslot->read_rom((offset*2)+1))<<8;
+ if (mem_mask & 0x00ff) retval |= m_cartslot->read_rom((offset*2)+0);
return retval;
}
@@ -107,8 +107,8 @@ WRITE16_MEMBER(psx_gamebooster_device::exp_w)
offset -= 0x20000;
logerror("%s: psx_gamebooster_device::exp_w %04x %04x\n", machine().describe_context(), offset*2, data);
- if (mem_mask & 0xff00) m_cartslot->write_bank(space, (offset*2)+1, data>>8);
- if (mem_mask & 0x00ff) m_cartslot->write_bank(space, (offset*2)+0, data); // send this 2nd or it erases the bank with the above
+ if (mem_mask & 0xff00) m_cartslot->write_bank((offset*2)+1, data>>8);
+ if (mem_mask & 0x00ff) m_cartslot->write_bank((offset*2)+0, data); // send this 2nd or it erases the bank with the above
}
else
diff --git a/src/devices/bus/psx/memcard.h b/src/devices/bus/psx/memcard.h
index 51ac4f044ba..e292d89e589 100644
--- a/src/devices/bus/psx/memcard.h
+++ b/src/devices/bus/psx/memcard.h
@@ -8,8 +8,6 @@
class psx_controller_port_device;
-#define MCFG_PSXCARD_ADD(_tag) \
- MCFG_DEVICE_ADD(_tag, PSXCARD, 0)
class psxcard_device : public device_t,
public device_image_interface
diff --git a/src/devices/bus/ql/cst_q_plus4.cpp b/src/devices/bus/ql/cst_q_plus4.cpp
index 52f1602ba5b..96269dc6ef5 100644
--- a/src/devices/bus/ql/cst_q_plus4.cpp
+++ b/src/devices/bus/ql/cst_q_plus4.cpp
@@ -50,21 +50,22 @@ const tiny_rom_entry *cst_q_plus4_device::device_rom_region() const
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(cst_q_plus4_device::device_add_mconfig)
- MCFG_DEVICE_ADD(MC6821_TAG, PIA6821, 0)
+void cst_q_plus4_device::device_add_mconfig(machine_config &config)
+{
+ PIA6821(config, MC6821_TAG, 0);
- MCFG_DEVICE_ADD("exp1", QL_EXPANSION_SLOT, DERIVED_CLOCK(1, 1), ql_expansion_cards, nullptr)
- MCFG_QL_EXPANSION_SLOT_EXTINTL_CALLBACK(WRITELINE(*this, cst_q_plus4_device, exp1_extintl_w))
+ QL_EXPANSION_SLOT(config, m_exp1, DERIVED_CLOCK(1, 1), ql_expansion_cards, nullptr);
+ m_exp1->extintl_wr_callback().set(FUNC(cst_q_plus4_device::exp1_extintl_w));
- MCFG_DEVICE_ADD("exp2", QL_EXPANSION_SLOT, DERIVED_CLOCK(1, 1), ql_expansion_cards, nullptr)
- MCFG_QL_EXPANSION_SLOT_EXTINTL_CALLBACK(WRITELINE(*this, cst_q_plus4_device, exp2_extintl_w))
+ QL_EXPANSION_SLOT(config, m_exp2, DERIVED_CLOCK(1, 1), ql_expansion_cards, nullptr);
+ m_exp2->extintl_wr_callback().set(FUNC(cst_q_plus4_device::exp2_extintl_w));
- MCFG_DEVICE_ADD("exp3", QL_EXPANSION_SLOT, DERIVED_CLOCK(1, 1), ql_expansion_cards, nullptr)
- MCFG_QL_EXPANSION_SLOT_EXTINTL_CALLBACK(WRITELINE(*this, cst_q_plus4_device, exp3_extintl_w))
+ QL_EXPANSION_SLOT(config, m_exp3, DERIVED_CLOCK(1, 1), ql_expansion_cards, nullptr);
+ m_exp3->extintl_wr_callback().set(FUNC(cst_q_plus4_device::exp3_extintl_w));
- MCFG_DEVICE_ADD("exp4", QL_EXPANSION_SLOT, DERIVED_CLOCK(1, 1), ql_expansion_cards, nullptr)
- MCFG_QL_EXPANSION_SLOT_EXTINTL_CALLBACK(WRITELINE(*this, cst_q_plus4_device, exp4_extintl_w))
-MACHINE_CONFIG_END
+ QL_EXPANSION_SLOT(config, m_exp4, DERIVED_CLOCK(1, 1), ql_expansion_cards, nullptr);
+ m_exp4->extintl_wr_callback().set(FUNC(cst_q_plus4_device::exp4_extintl_w));
+}
@@ -105,17 +106,17 @@ void cst_q_plus4_device::device_start()
// read -
//-------------------------------------------------
-uint8_t cst_q_plus4_device::read(address_space &space, offs_t offset, uint8_t data)
+uint8_t cst_q_plus4_device::read(offs_t offset, uint8_t data)
{
if (offset >= 0xc000 && offset < 0xc200)
{
data = m_rom->base()[offset & 0x1fff];
}
- data = m_exp1->read(space, offset, data);
- data = m_exp2->read(space, offset, data);
- data = m_exp3->read(space, offset, data);
- data = m_exp4->read(space, offset, data);
+ data = m_exp1->read(offset, data);
+ data = m_exp2->read(offset, data);
+ data = m_exp3->read(offset, data);
+ data = m_exp4->read(offset, data);
return data;
}
@@ -125,10 +126,10 @@ uint8_t cst_q_plus4_device::read(address_space &space, offs_t offset, uint8_t da
// write -
//-------------------------------------------------
-void cst_q_plus4_device::write(address_space &space, offs_t offset, uint8_t data)
+void cst_q_plus4_device::write(offs_t offset, uint8_t data)
{
- m_exp1->write(space, offset, data);
- m_exp2->write(space, offset, data);
- m_exp3->write(space, offset, data);
- m_exp4->write(space, offset, data);
+ m_exp1->write(offset, data);
+ m_exp2->write(offset, data);
+ m_exp3->write(offset, data);
+ m_exp4->write(offset, data);
}
diff --git a/src/devices/bus/ql/cst_q_plus4.h b/src/devices/bus/ql/cst_q_plus4.h
index 0eff45e3840..4c8ea616f51 100644
--- a/src/devices/bus/ql/cst_q_plus4.h
+++ b/src/devices/bus/ql/cst_q_plus4.h
@@ -37,8 +37,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_ql_expansion_card_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, uint8_t data) override;
- virtual void write(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t read(offs_t offset, uint8_t data) override;
+ virtual void write(offs_t offset, uint8_t data) override;
private:
DECLARE_WRITE_LINE_MEMBER( exp1_extintl_w ) { m_exp1_extinl = state; update_extintl(); }
diff --git a/src/devices/bus/ql/cst_qdisc.cpp b/src/devices/bus/ql/cst_qdisc.cpp
index a3940d41b1a..2fe46dc4f5e 100644
--- a/src/devices/bus/ql/cst_qdisc.cpp
+++ b/src/devices/bus/ql/cst_qdisc.cpp
@@ -71,7 +71,7 @@ void cst_ql_disc_interface_device::device_start()
// read -
//-------------------------------------------------
-uint8_t cst_ql_disc_interface_device::read(address_space &space, offs_t offset, uint8_t data)
+uint8_t cst_ql_disc_interface_device::read(offs_t offset, uint8_t data)
{
return data;
}
@@ -81,6 +81,6 @@ uint8_t cst_ql_disc_interface_device::read(address_space &space, offs_t offset,
// write -
//-------------------------------------------------
-void cst_ql_disc_interface_device::write(address_space &space, offs_t offset, uint8_t data)
+void cst_ql_disc_interface_device::write(offs_t offset, uint8_t data)
{
}
diff --git a/src/devices/bus/ql/cst_qdisc.h b/src/devices/bus/ql/cst_qdisc.h
index 4bbcbd0913f..fdd492f1230 100644
--- a/src/devices/bus/ql/cst_qdisc.h
+++ b/src/devices/bus/ql/cst_qdisc.h
@@ -36,8 +36,8 @@ protected:
virtual void device_start() override;
// device_ql_expansion_card_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, uint8_t data) override;
- virtual void write(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t read(offs_t offset, uint8_t data) override;
+ virtual void write(offs_t offset, uint8_t data) override;
};
diff --git a/src/devices/bus/ql/cumana_fdi.cpp b/src/devices/bus/ql/cumana_fdi.cpp
index a8d1b7c376b..204dea12608 100644
--- a/src/devices/bus/ql/cumana_fdi.cpp
+++ b/src/devices/bus/ql/cumana_fdi.cpp
@@ -71,7 +71,7 @@ void cumana_floppy_disk_interface_device::device_start()
// read -
//-------------------------------------------------
-uint8_t cumana_floppy_disk_interface_device::read(address_space &space, offs_t offset, uint8_t data)
+uint8_t cumana_floppy_disk_interface_device::read(offs_t offset, uint8_t data)
{
return data;
}
@@ -81,6 +81,6 @@ uint8_t cumana_floppy_disk_interface_device::read(address_space &space, offs_t o
// write -
//-------------------------------------------------
-void cumana_floppy_disk_interface_device::write(address_space &space, offs_t offset, uint8_t data)
+void cumana_floppy_disk_interface_device::write(offs_t offset, uint8_t data)
{
}
diff --git a/src/devices/bus/ql/cumana_fdi.h b/src/devices/bus/ql/cumana_fdi.h
index a0da6952cab..2080251fcf3 100644
--- a/src/devices/bus/ql/cumana_fdi.h
+++ b/src/devices/bus/ql/cumana_fdi.h
@@ -35,8 +35,8 @@ protected:
virtual void device_start() override;
// device_ql_expansion_card_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, uint8_t data) override;
- virtual void write(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t read(offs_t offset, uint8_t data) override;
+ virtual void write(offs_t offset, uint8_t data) override;
};
diff --git a/src/devices/bus/ql/exp.h b/src/devices/bus/ql/exp.h
index ed5febc4854..43e8a7b77d5 100644
--- a/src/devices/bus/ql/exp.h
+++ b/src/devices/bus/ql/exp.h
@@ -49,24 +49,6 @@
//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_QL_EXPANSION_SLOT_IPL0L_CALLBACK(_write) \
- downcast<ql_expansion_slot_device &>(*device).set_ipl0l_wr_callback(DEVCB_##_write);
-
-#define MCFG_QL_EXPANSION_SLOT_IPL1L_CALLBACK(_write) \
- downcast<ql_expansion_slot_device &>(*device).set_ipl1l_wr_callback(DEVCB_##_write);
-
-#define MCFG_QL_EXPANSION_SLOT_BERRL_CALLBACK(_write) \
- downcast<ql_expansion_slot_device &>(*device).set_berrl_wr_callback(DEVCB_##_write);
-
-#define MCFG_QL_EXPANSION_SLOT_EXTINTL_CALLBACK(_write) \
- downcast<ql_expansion_slot_device &>(*device).set_extintl_wr_callback(DEVCB_##_write);
-
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -80,8 +62,8 @@ class device_ql_expansion_card_interface : public device_slot_card_interface
public:
virtual void romoeh_w(int state) { m_romoeh = state; }
- virtual uint8_t read(address_space &space, offs_t offset, uint8_t data) { return data; }
- virtual void write(address_space &space, offs_t offset, uint8_t data) { }
+ virtual uint8_t read(offs_t offset, uint8_t data) { return data; }
+ virtual void write(offs_t offset, uint8_t data) { }
protected:
// construction/destruction
@@ -112,14 +94,14 @@ public:
}
ql_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- template <class Object> devcb_base &set_ipl0l_wr_callback(Object &&cb) { return m_write_ipl0l.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_ipl1l_wr_callback(Object &&cb) { return m_write_ipl1l.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_berrl_wr_callback(Object &&cb) { return m_write_berrl.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_extintl_wr_callback(Object &&cb) { return m_write_extintl.set_callback(std::forward<Object>(cb)); }
+ auto ipl0l_wr_callback() { return m_write_ipl0l.bind(); }
+ auto ipl1l_wr_callback() { return m_write_ipl1l.bind(); }
+ auto berrl_wr_callback() { return m_write_berrl.bind(); }
+ auto extintl_wr_callback() { return m_write_extintl.bind(); }
// computer interface
- uint8_t read(address_space &space, offs_t offset, uint8_t data) { if (m_card) data = m_card->read(space, offset, data); return data; }
- void write(address_space &space, offs_t offset, uint8_t data) { if (m_card) m_card->write(space, offset, data); }
+ uint8_t read(offs_t offset, uint8_t data) { if (m_card) data = m_card->read(offset, data); return data; }
+ void write(offs_t offset, uint8_t data) { if (m_card) m_card->write(offset, data); }
DECLARE_WRITE_LINE_MEMBER( romoeh_w ) { if (m_card) m_card->romoeh_w(state); }
// card interface
diff --git a/src/devices/bus/ql/kempston_di.cpp b/src/devices/bus/ql/kempston_di.cpp
index 599e9bebcc7..1535f171ff6 100644
--- a/src/devices/bus/ql/kempston_di.cpp
+++ b/src/devices/bus/ql/kempston_di.cpp
@@ -69,7 +69,7 @@ void kempston_disk_interface_device::device_start()
// read -
//-------------------------------------------------
-uint8_t kempston_disk_interface_device::read(address_space &space, offs_t offset, uint8_t data)
+uint8_t kempston_disk_interface_device::read(offs_t offset, uint8_t data)
{
return data;
}
@@ -79,6 +79,6 @@ uint8_t kempston_disk_interface_device::read(address_space &space, offs_t offset
// write -
//-------------------------------------------------
-void kempston_disk_interface_device::write(address_space &space, offs_t offset, uint8_t data)
+void kempston_disk_interface_device::write(offs_t offset, uint8_t data)
{
}
diff --git a/src/devices/bus/ql/kempston_di.h b/src/devices/bus/ql/kempston_di.h
index e37c3d7f6b7..cc75a5fe0fc 100644
--- a/src/devices/bus/ql/kempston_di.h
+++ b/src/devices/bus/ql/kempston_di.h
@@ -35,8 +35,8 @@ protected:
virtual void device_start() override;
// device_ql_expansion_card_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, uint8_t data) override;
- virtual void write(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t read(offs_t offset, uint8_t data) override;
+ virtual void write(offs_t offset, uint8_t data) override;
};
diff --git a/src/devices/bus/ql/miracle_gold_card.cpp b/src/devices/bus/ql/miracle_gold_card.cpp
index a7acd24e2d7..bf6be7fe136 100644
--- a/src/devices/bus/ql/miracle_gold_card.cpp
+++ b/src/devices/bus/ql/miracle_gold_card.cpp
@@ -71,7 +71,7 @@ void miracle_gold_card_device::device_start()
// read -
//-------------------------------------------------
-uint8_t miracle_gold_card_device::read(address_space &space, offs_t offset, uint8_t data)
+uint8_t miracle_gold_card_device::read(offs_t offset, uint8_t data)
{
return data;
}
@@ -81,6 +81,6 @@ uint8_t miracle_gold_card_device::read(address_space &space, offs_t offset, uint
// write -
//-------------------------------------------------
-void miracle_gold_card_device::write(address_space &space, offs_t offset, uint8_t data)
+void miracle_gold_card_device::write(offs_t offset, uint8_t data)
{
}
diff --git a/src/devices/bus/ql/miracle_gold_card.h b/src/devices/bus/ql/miracle_gold_card.h
index feea55de78c..7ed9d0e2eb8 100644
--- a/src/devices/bus/ql/miracle_gold_card.h
+++ b/src/devices/bus/ql/miracle_gold_card.h
@@ -35,8 +35,8 @@ protected:
virtual void device_start() override;
// device_ql_expansion_card_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, uint8_t data) override;
- virtual void write(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t read(offs_t offset, uint8_t data) override;
+ virtual void write(offs_t offset, uint8_t data) override;
};
diff --git a/src/devices/bus/ql/miracle_hd.cpp b/src/devices/bus/ql/miracle_hd.cpp
index 146945737a2..f2f16715c72 100644
--- a/src/devices/bus/ql/miracle_hd.cpp
+++ b/src/devices/bus/ql/miracle_hd.cpp
@@ -69,7 +69,7 @@ void miracle_hard_disk_device::device_start()
// read -
//-------------------------------------------------
-uint8_t miracle_hard_disk_device::read(address_space &space, offs_t offset, uint8_t data)
+uint8_t miracle_hard_disk_device::read(offs_t offset, uint8_t data)
{
return data;
}
@@ -79,6 +79,6 @@ uint8_t miracle_hard_disk_device::read(address_space &space, offs_t offset, uint
// write -
//-------------------------------------------------
-void miracle_hard_disk_device::write(address_space &space, offs_t offset, uint8_t data)
+void miracle_hard_disk_device::write(offs_t offset, uint8_t data)
{
}
diff --git a/src/devices/bus/ql/miracle_hd.h b/src/devices/bus/ql/miracle_hd.h
index 0bcd260bb87..983dce66f8b 100644
--- a/src/devices/bus/ql/miracle_hd.h
+++ b/src/devices/bus/ql/miracle_hd.h
@@ -36,8 +36,8 @@ protected:
virtual void device_start() override;
// device_ql_rom_cartridge_card_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, uint8_t data) override;
- virtual void write(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t read(offs_t offset, uint8_t data) override;
+ virtual void write(offs_t offset, uint8_t data) override;
};
diff --git a/src/devices/bus/ql/mp_fdi.cpp b/src/devices/bus/ql/mp_fdi.cpp
index 06324a4be67..4e2a90ce52d 100644
--- a/src/devices/bus/ql/mp_fdi.cpp
+++ b/src/devices/bus/ql/mp_fdi.cpp
@@ -69,7 +69,7 @@ void micro_peripherals_floppy_disk_interface_device::device_start()
// read -
//-------------------------------------------------
-uint8_t micro_peripherals_floppy_disk_interface_device::read(address_space &space, offs_t offset, uint8_t data)
+uint8_t micro_peripherals_floppy_disk_interface_device::read(offs_t offset, uint8_t data)
{
return data;
}
@@ -79,6 +79,6 @@ uint8_t micro_peripherals_floppy_disk_interface_device::read(address_space &spac
// write -
//-------------------------------------------------
-void micro_peripherals_floppy_disk_interface_device::write(address_space &space, offs_t offset, uint8_t data)
+void micro_peripherals_floppy_disk_interface_device::write(offs_t offset, uint8_t data)
{
}
diff --git a/src/devices/bus/ql/mp_fdi.h b/src/devices/bus/ql/mp_fdi.h
index 9939e540ba7..3fc9d9d8c83 100644
--- a/src/devices/bus/ql/mp_fdi.h
+++ b/src/devices/bus/ql/mp_fdi.h
@@ -34,8 +34,8 @@ protected:
virtual void device_start() override;
// device_ql_expansion_card_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, uint8_t data) override;
- virtual void write(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t read(offs_t offset, uint8_t data) override;
+ virtual void write(offs_t offset, uint8_t data) override;
};
diff --git a/src/devices/bus/ql/opd_basic_master.cpp b/src/devices/bus/ql/opd_basic_master.cpp
index 015fca91a37..b3b6f18dc19 100644
--- a/src/devices/bus/ql/opd_basic_master.cpp
+++ b/src/devices/bus/ql/opd_basic_master.cpp
@@ -67,7 +67,7 @@ void opd_basic_master_device::device_start()
// read -
//-------------------------------------------------
-uint8_t opd_basic_master_device::read(address_space &space, offs_t offset, uint8_t data)
+uint8_t opd_basic_master_device::read(offs_t offset, uint8_t data)
{
return data;
}
@@ -77,6 +77,6 @@ uint8_t opd_basic_master_device::read(address_space &space, offs_t offset, uint8
// write -
//-------------------------------------------------
-void opd_basic_master_device::write(address_space &space, offs_t offset, uint8_t data)
+void opd_basic_master_device::write(offs_t offset, uint8_t data)
{
}
diff --git a/src/devices/bus/ql/opd_basic_master.h b/src/devices/bus/ql/opd_basic_master.h
index d22b50eff8c..3592823dd2b 100644
--- a/src/devices/bus/ql/opd_basic_master.h
+++ b/src/devices/bus/ql/opd_basic_master.h
@@ -35,8 +35,8 @@ protected:
virtual void device_start() override;
// device_ql_expansion_card_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, uint8_t data) override;
- virtual void write(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t read(offs_t offset, uint8_t data) override;
+ virtual void write(offs_t offset, uint8_t data) override;
};
diff --git a/src/devices/bus/ql/pcml_qdisk.cpp b/src/devices/bus/ql/pcml_qdisk.cpp
index 7b3d7b25e6c..ed92c569509 100644
--- a/src/devices/bus/ql/pcml_qdisk.cpp
+++ b/src/devices/bus/ql/pcml_qdisk.cpp
@@ -69,7 +69,7 @@ void pcml_q_disk_interface_device::device_start()
// read -
//-------------------------------------------------
-uint8_t pcml_q_disk_interface_device::read(address_space &space, offs_t offset, uint8_t data)
+uint8_t pcml_q_disk_interface_device::read(offs_t offset, uint8_t data)
{
return data;
}
@@ -79,6 +79,6 @@ uint8_t pcml_q_disk_interface_device::read(address_space &space, offs_t offset,
// write -
//-------------------------------------------------
-void pcml_q_disk_interface_device::write(address_space &space, offs_t offset, uint8_t data)
+void pcml_q_disk_interface_device::write(offs_t offset, uint8_t data)
{
}
diff --git a/src/devices/bus/ql/pcml_qdisk.h b/src/devices/bus/ql/pcml_qdisk.h
index e9904df6eb0..cedd3f953f7 100644
--- a/src/devices/bus/ql/pcml_qdisk.h
+++ b/src/devices/bus/ql/pcml_qdisk.h
@@ -35,8 +35,8 @@ protected:
virtual void device_start() override;
// device_ql_expansion_card_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, uint8_t data) override;
- virtual void write(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t read(offs_t offset, uint8_t data) override;
+ virtual void write(offs_t offset, uint8_t data) override;
};
diff --git a/src/devices/bus/ql/qubide.cpp b/src/devices/bus/ql/qubide.cpp
index e88493048d9..10583d28023 100644
--- a/src/devices/bus/ql/qubide.cpp
+++ b/src/devices/bus/ql/qubide.cpp
@@ -202,7 +202,7 @@ void qubide_device::device_reset()
// read -
//-------------------------------------------------
-uint8_t qubide_device::read(address_space &space, offs_t offset, uint8_t data)
+uint8_t qubide_device::read(offs_t offset, uint8_t data)
{
if ((offset & 0xfc000) == m_base)
{
@@ -247,7 +247,7 @@ uint8_t qubide_device::read(address_space &space, offs_t offset, uint8_t data)
// write -
//-------------------------------------------------
-void qubide_device::write(address_space &space, offs_t offset, uint8_t data)
+void qubide_device::write(offs_t offset, uint8_t data)
{
if ((offset & 0xfc000) == m_base)
{
diff --git a/src/devices/bus/ql/qubide.h b/src/devices/bus/ql/qubide.h
index 680e5e6b655..5e1ac6d1860 100644
--- a/src/devices/bus/ql/qubide.h
+++ b/src/devices/bus/ql/qubide.h
@@ -39,8 +39,8 @@ protected:
virtual ioport_constructor device_input_ports() const override;
// device_ql_expansion_card_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, uint8_t data) override;
- virtual void write(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t read(offs_t offset, uint8_t data) override;
+ virtual void write(offs_t offset, uint8_t data) override;
private:
required_device<ata_interface_device> m_ata;
diff --git a/src/devices/bus/ql/rom.h b/src/devices/bus/ql/rom.h
index e337fb9f096..0c8ec4a6bca 100644
--- a/src/devices/bus/ql/rom.h
+++ b/src/devices/bus/ql/rom.h
@@ -50,8 +50,8 @@ public:
virtual ~device_ql_rom_cartridge_card_interface();
virtual void romoeh_w(int state) { m_romoeh = state; }
- virtual uint8_t read(address_space &space, offs_t offset, uint8_t data) { return data; }
- virtual void write(address_space &space, offs_t offset, uint8_t data) { }
+ virtual uint8_t read(offs_t offset, uint8_t data) { return data; }
+ virtual void write(offs_t offset, uint8_t data) { }
protected:
device_ql_rom_cartridge_card_interface(const machine_config &mconfig, device_t &device);
@@ -86,8 +86,8 @@ public:
ql_rom_cartridge_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
// computer interface
- uint8_t read(address_space &space, offs_t offset, uint8_t data) { if (m_card) data = m_card->read(space, offset, data); return data; }
- void write(address_space &space, offs_t offset, uint8_t data) { if (m_card) m_card->write(space, offset, data); }
+ uint8_t read(offs_t offset, uint8_t data) { if (m_card) data = m_card->read(offset, data); return data; }
+ void write(offs_t offset, uint8_t data) { if (m_card) m_card->write(offset, data); }
DECLARE_WRITE_LINE_MEMBER( romoeh_w ) { if (m_card) m_card->romoeh_w(state); }
protected:
diff --git a/src/devices/bus/ql/sandy_superdisk.cpp b/src/devices/bus/ql/sandy_superdisk.cpp
index 19ee4ebbc9c..1af96f2de81 100644
--- a/src/devices/bus/ql/sandy_superdisk.cpp
+++ b/src/devices/bus/ql/sandy_superdisk.cpp
@@ -149,7 +149,7 @@ void sandy_super_disk_device::device_reset()
// read -
//-------------------------------------------------
-uint8_t sandy_super_disk_device::read(address_space &space, offs_t offset, uint8_t data)
+uint8_t sandy_super_disk_device::read(offs_t offset, uint8_t data)
{
if ((offset & 0xf0000) == 0xc0000)
{
@@ -195,7 +195,7 @@ uint8_t sandy_super_disk_device::read(address_space &space, offs_t offset, uint8
// write -
//-------------------------------------------------
-void sandy_super_disk_device::write(address_space &space, offs_t offset, uint8_t data)
+void sandy_super_disk_device::write(offs_t offset, uint8_t data)
{
if ((offset & 0xf0000) == 0xc0000)
{
diff --git a/src/devices/bus/ql/sandy_superdisk.h b/src/devices/bus/ql/sandy_superdisk.h
index 1bc7192aad5..5a264272e12 100644
--- a/src/devices/bus/ql/sandy_superdisk.h
+++ b/src/devices/bus/ql/sandy_superdisk.h
@@ -41,8 +41,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_ql_expansion_card_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, uint8_t data) override;
- virtual void write(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t read(offs_t offset, uint8_t data) override;
+ virtual void write(offs_t offset, uint8_t data) override;
private:
WRITE_LINE_MEMBER( busy_w );
diff --git a/src/devices/bus/ql/sandy_superqboard.cpp b/src/devices/bus/ql/sandy_superqboard.cpp
index 05ff550c47d..bc8f4c78478 100644
--- a/src/devices/bus/ql/sandy_superqboard.cpp
+++ b/src/devices/bus/ql/sandy_superqboard.cpp
@@ -285,7 +285,7 @@ void sandy_superqboard_device::device_reset()
// read -
//-------------------------------------------------
-uint8_t sandy_superqboard_device::read(address_space &space, offs_t offset, uint8_t data)
+uint8_t sandy_superqboard_device::read(offs_t offset, uint8_t data)
{
if ((offset & 0xf0000) == 0xc0000)
{
@@ -345,7 +345,7 @@ uint8_t sandy_superqboard_device::read(address_space &space, offs_t offset, uint
// write -
//-------------------------------------------------
-void sandy_superqboard_device::write(address_space &space, offs_t offset, uint8_t data)
+void sandy_superqboard_device::write(offs_t offset, uint8_t data)
{
if ((offset & 0xf0000) == 0xc0000)
{
diff --git a/src/devices/bus/ql/sandy_superqboard.h b/src/devices/bus/ql/sandy_superqboard.h
index 94d2066020b..94bfe0c7dad 100644
--- a/src/devices/bus/ql/sandy_superqboard.h
+++ b/src/devices/bus/ql/sandy_superqboard.h
@@ -46,8 +46,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_ql_expansion_card_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, uint8_t data) override;
- virtual void write(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t read(offs_t offset, uint8_t data) override;
+ virtual void write(offs_t offset, uint8_t data) override;
private:
WRITE_LINE_MEMBER( busy_w );
diff --git a/src/devices/bus/ql/std.cpp b/src/devices/bus/ql/std.cpp
index 5e13a0ff32f..b1171c46336 100644
--- a/src/devices/bus/ql/std.cpp
+++ b/src/devices/bus/ql/std.cpp
@@ -47,7 +47,7 @@ void ql_standard_rom_cartridge_device::device_start()
// read - cartridge data read
//-------------------------------------------------
-uint8_t ql_standard_rom_cartridge_device::read(address_space &space, offs_t offset, uint8_t data)
+uint8_t ql_standard_rom_cartridge_device::read(offs_t offset, uint8_t data)
{
if (m_romoeh && m_rom.bytes())
{
diff --git a/src/devices/bus/ql/std.h b/src/devices/bus/ql/std.h
index b1b4e404c4c..823c3a70008 100644
--- a/src/devices/bus/ql/std.h
+++ b/src/devices/bus/ql/std.h
@@ -32,7 +32,7 @@ protected:
virtual void device_start() override;
// device_ql_rom_cartridge_card_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t read(offs_t offset, uint8_t data) override;
};
diff --git a/src/devices/bus/ql/trumpcard.cpp b/src/devices/bus/ql/trumpcard.cpp
index bc515b7da9c..473fc9bb78e 100644
--- a/src/devices/bus/ql/trumpcard.cpp
+++ b/src/devices/bus/ql/trumpcard.cpp
@@ -167,7 +167,7 @@ void ql_trump_card_device::device_reset()
// read -
//-------------------------------------------------
-uint8_t ql_trump_card_device::read(address_space &space, offs_t offset, uint8_t data)
+uint8_t ql_trump_card_device::read(offs_t offset, uint8_t data)
{
if (offset >= 0xc000 && offset < 0x10000)
{
@@ -220,7 +220,7 @@ uint8_t ql_trump_card_device::read(address_space &space, offs_t offset, uint8_t
// write -
//-------------------------------------------------
-void ql_trump_card_device::write(address_space &space, offs_t offset, uint8_t data)
+void ql_trump_card_device::write(offs_t offset, uint8_t data)
{
if (offset >= 0x1c000 && offset <= 0x1c003)
{
diff --git a/src/devices/bus/ql/trumpcard.h b/src/devices/bus/ql/trumpcard.h
index 4dc18ceccd4..d9926160928 100644
--- a/src/devices/bus/ql/trumpcard.h
+++ b/src/devices/bus/ql/trumpcard.h
@@ -42,8 +42,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_ql_expansion_card_interface overrides
- virtual uint8_t read(address_space &space, offs_t offset, uint8_t data) override;
- virtual void write(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t read(offs_t offset, uint8_t data) override;
+ virtual void write(offs_t offset, uint8_t data) override;
private:
diff --git a/src/devices/bus/rs232/null_modem.cpp b/src/devices/bus/rs232/null_modem.cpp
index def7bd2a315..08366b01df9 100644
--- a/src/devices/bus/rs232/null_modem.cpp
+++ b/src/devices/bus/rs232/null_modem.cpp
@@ -22,9 +22,10 @@ null_modem_device::null_modem_device(const machine_config &mconfig, const char *
{
}
-MACHINE_CONFIG_START(null_modem_device::device_add_mconfig)
- MCFG_DEVICE_ADD("stream", BITBANGER, 0)
-MACHINE_CONFIG_END
+void null_modem_device::device_add_mconfig(machine_config &config)
+{
+ BITBANGER(config, m_stream, 0);
+}
static INPUT_PORTS_START(null_modem)
MCFG_RS232_BAUD("RS232_TXBAUD", RS232_BAUD_9600, "TX Baud", null_modem_device, update_serial)
diff --git a/src/devices/bus/rs232/printer.cpp b/src/devices/bus/rs232/printer.cpp
index b8b1ec87d34..fb87c9ead79 100644
--- a/src/devices/bus/rs232/printer.cpp
+++ b/src/devices/bus/rs232/printer.cpp
@@ -16,10 +16,11 @@ serial_printer_device::serial_printer_device(const machine_config &mconfig, cons
{
}
-MACHINE_CONFIG_START(serial_printer_device::device_add_mconfig)
- MCFG_DEVICE_ADD("printer", PRINTER, 0)
- MCFG_PRINTER_ONLINE_CB(WRITELINE(*this, serial_printer_device, printer_online))
-MACHINE_CONFIG_END
+void serial_printer_device::device_add_mconfig(machine_config &config)
+{
+ PRINTER(config, m_printer, 0);
+ m_printer->online_callback().set(FUNC(serial_printer_device::printer_online));
+}
static INPUT_PORTS_START(serial_printer)
MCFG_RS232_BAUD("RS232_RXBAUD", RS232_BAUD_9600, "RX Baud", serial_printer_device, update_serial)
diff --git a/src/devices/bus/rs232/xvd701.cpp b/src/devices/bus/rs232/xvd701.cpp
index ef9ca09c258..b2635d21c02 100644
--- a/src/devices/bus/rs232/xvd701.cpp
+++ b/src/devices/bus/rs232/xvd701.cpp
@@ -12,8 +12,9 @@ jvc_xvd701_device::jvc_xvd701_device(const machine_config &mconfig, const char *
{
}
-MACHINE_CONFIG_START(jvc_xvd701_device::device_add_mconfig)
-MACHINE_CONFIG_END
+void jvc_xvd701_device::device_add_mconfig(machine_config &config)
+{
+}
static INPUT_PORTS_START(xvd701)
INPUT_PORTS_END
diff --git a/src/devices/bus/s100/dj2db.cpp b/src/devices/bus/s100/dj2db.cpp
index f3cff259db3..7c33182ea5d 100644
--- a/src/devices/bus/s100/dj2db.cpp
+++ b/src/devices/bus/s100/dj2db.cpp
@@ -301,7 +301,7 @@ void s100_dj2db_device::device_reset()
// s100_smemr_r - memory read
//-------------------------------------------------
-uint8_t s100_dj2db_device::s100_smemr_r(address_space &space, offs_t offset)
+uint8_t s100_dj2db_device::s100_smemr_r(offs_t offset)
{
uint8_t data = 0;
@@ -380,7 +380,7 @@ uint8_t s100_dj2db_device::s100_smemr_r(address_space &space, offs_t offset)
// s100_mwrt_w - memory write
//-------------------------------------------------
-void s100_dj2db_device::s100_mwrt_w(address_space &space, offs_t offset, uint8_t data)
+void s100_dj2db_device::s100_mwrt_w(offs_t offset, uint8_t data)
{
// if (!(m_board_enbl & m_phantom)) return;
@@ -473,7 +473,7 @@ void s100_dj2db_device::s100_mwrt_w(address_space &space, offs_t offset, uint8_t
// s100_sinp_r - I/O read
//-------------------------------------------------
-uint8_t s100_dj2db_device::s100_sinp_r(address_space &space, offs_t offset)
+uint8_t s100_dj2db_device::s100_sinp_r(offs_t offset)
{
return 0xff;
}
@@ -483,7 +483,7 @@ uint8_t s100_dj2db_device::s100_sinp_r(address_space &space, offs_t offset)
// s100_sout_w - I/O write
//-------------------------------------------------
-void s100_dj2db_device::s100_sout_w(address_space &space, offs_t offset, uint8_t data)
+void s100_dj2db_device::s100_sout_w(offs_t offset, uint8_t data)
{
if (offset == 0x41)
{
diff --git a/src/devices/bus/s100/dj2db.h b/src/devices/bus/s100/dj2db.h
index e82b4431095..616113bb038 100644
--- a/src/devices/bus/s100/dj2db.h
+++ b/src/devices/bus/s100/dj2db.h
@@ -42,10 +42,10 @@ protected:
virtual ioport_constructor device_input_ports() const override;
// device_s100_card_interface overrides
- virtual uint8_t s100_smemr_r(address_space &space, offs_t offset) override;
- virtual void s100_mwrt_w(address_space &space, offs_t offset, uint8_t data) override;
- virtual uint8_t s100_sinp_r(address_space &space, offs_t offset) override;
- virtual void s100_sout_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t s100_smemr_r(offs_t offset) override;
+ virtual void s100_mwrt_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t s100_sinp_r(offs_t offset) override;
+ virtual void s100_sout_w(offs_t offset, uint8_t data) override;
virtual void s100_phantom_w(int state) override;
private:
diff --git a/src/devices/bus/s100/djdma.cpp b/src/devices/bus/s100/djdma.cpp
index 39522d321b4..0ee7dab0a0c 100644
--- a/src/devices/bus/s100/djdma.cpp
+++ b/src/devices/bus/s100/djdma.cpp
@@ -146,7 +146,7 @@ void s100_djdma_device::device_reset()
// s100_sout_w - I/O write
//-------------------------------------------------
-void s100_djdma_device::s100_sout_w(address_space &space, offs_t offset, uint8_t data)
+void s100_djdma_device::s100_sout_w(offs_t offset, uint8_t data)
{
// O4 = /ATTN (responds to address EF only)
if (!BIT(m_cmdaddr[offset & 0xff], 3))
diff --git a/src/devices/bus/s100/djdma.h b/src/devices/bus/s100/djdma.h
index 29d07c5860f..d9453aef25c 100644
--- a/src/devices/bus/s100/djdma.h
+++ b/src/devices/bus/s100/djdma.h
@@ -34,7 +34,7 @@ protected:
virtual void device_reset() override;
// bus-level overrides;
- virtual void s100_sout_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual void s100_sout_w(offs_t offset, uint8_t data) override;
// optional information overrides
virtual void device_add_mconfig(machine_config &config) override;
diff --git a/src/devices/bus/s100/mm65k16s.cpp b/src/devices/bus/s100/mm65k16s.cpp
index 27cdc021d39..ae098a2e29c 100644
--- a/src/devices/bus/s100/mm65k16s.cpp
+++ b/src/devices/bus/s100/mm65k16s.cpp
@@ -233,7 +233,7 @@ void s100_mm65k16s_device::device_reset()
// s100_smemr_r - memory read
//-------------------------------------------------
-uint8_t s100_mm65k16s_device::s100_smemr_r(address_space &space, offs_t offset)
+uint8_t s100_mm65k16s_device::s100_smemr_r(offs_t offset)
{
uint8_t data = 0xff;
@@ -250,7 +250,7 @@ uint8_t s100_mm65k16s_device::s100_smemr_r(address_space &space, offs_t offset)
// s100_mwrt_w - memory write
//-------------------------------------------------
-void s100_mm65k16s_device::s100_mwrt_w(address_space &space, offs_t offset, uint8_t data)
+void s100_mm65k16s_device::s100_mwrt_w(offs_t offset, uint8_t data)
{
if (offset < 0xf800)
{
diff --git a/src/devices/bus/s100/mm65k16s.h b/src/devices/bus/s100/mm65k16s.h
index e46d13f955e..10fa1daff7a 100644
--- a/src/devices/bus/s100/mm65k16s.h
+++ b/src/devices/bus/s100/mm65k16s.h
@@ -38,8 +38,8 @@ protected:
virtual void device_reset() override;
// device_s100_card_interface overrides
- virtual uint8_t s100_smemr_r(address_space &space, offs_t offset) override;
- virtual void s100_mwrt_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t s100_smemr_r(offs_t offset) override;
+ virtual void s100_mwrt_w(offs_t offset, uint8_t data) override;
virtual void s100_phantom_w(int state) override;
private:
diff --git a/src/devices/bus/s100/nsmdsa.cpp b/src/devices/bus/s100/nsmdsa.cpp
index 8efa1c9f392..90d19b3fcb3 100644
--- a/src/devices/bus/s100/nsmdsa.cpp
+++ b/src/devices/bus/s100/nsmdsa.cpp
@@ -57,10 +57,11 @@ static void mds_a_floppies(device_slot_interface &device)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(s100_mds_a_device::device_add_mconfig)
- MCFG_FLOPPY_DRIVE_ADD("floppy0", mds_a_floppies, "525sd", floppy_image_device::default_floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD("floppy1", mds_a_floppies, "525sd", floppy_image_device::default_floppy_formats)
-MACHINE_CONFIG_END
+void s100_mds_a_device::device_add_mconfig(machine_config &config)
+{
+ for (auto &floppy : m_floppy)
+ FLOPPY_CONNECTOR(config, floppy, mds_a_floppies, "525sd", floppy_image_device::default_floppy_formats);
+}
@@ -75,8 +76,7 @@ MACHINE_CONFIG_END
s100_mds_a_device::s100_mds_a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, S100_MDS_A, tag, owner, clock),
device_s100_card_interface(mconfig, *this),
- m_floppy0(*this, "floppy0"),
- m_floppy1(*this, "floppy1"),
+ m_floppy(*this, "floppy%u", 0U),
m_psel_rom(*this, "psel"),
m_pgm_rom(*this, "pgm")
{
@@ -105,7 +105,7 @@ void s100_mds_a_device::device_reset()
// s100_smemr_r - memory read
//-------------------------------------------------
-uint8_t s100_mds_a_device::s100_smemr_r(address_space &space, offs_t offset)
+uint8_t s100_mds_a_device::s100_smemr_r(offs_t offset)
{
return 0xff;
}
diff --git a/src/devices/bus/s100/nsmdsa.h b/src/devices/bus/s100/nsmdsa.h
index 5bcaf7505c0..a36f39127ec 100644
--- a/src/devices/bus/s100/nsmdsa.h
+++ b/src/devices/bus/s100/nsmdsa.h
@@ -39,11 +39,10 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_s100_card_interface overrides
- virtual uint8_t s100_smemr_r(address_space &space, offs_t offset) override;
+ virtual uint8_t s100_smemr_r(offs_t offset) override;
private:
- required_device<floppy_connector> m_floppy0;
- required_device<floppy_connector> m_floppy1;
+ required_device_array<floppy_connector, 2> m_floppy;
required_memory_region m_psel_rom;
required_memory_region m_pgm_rom;
};
diff --git a/src/devices/bus/s100/nsmdsad.cpp b/src/devices/bus/s100/nsmdsad.cpp
index d13f6a7f748..d1358e85bf0 100644
--- a/src/devices/bus/s100/nsmdsad.cpp
+++ b/src/devices/bus/s100/nsmdsad.cpp
@@ -58,10 +58,11 @@ static void mds_ad_floppies(device_slot_interface &device)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(s100_mds_ad_device::device_add_mconfig)
- MCFG_FLOPPY_DRIVE_ADD("floppy0", mds_ad_floppies, "525dd", floppy_image_device::default_floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD("floppy1", mds_ad_floppies, "525dd", floppy_image_device::default_floppy_formats)
-MACHINE_CONFIG_END
+void s100_mds_ad_device::device_add_mconfig(machine_config &config)
+{
+ for (auto &floppy : m_floppy)
+ FLOPPY_CONNECTOR(config, floppy, mds_ad_floppies, "525dd", floppy_image_device::default_floppy_formats);
+}
@@ -76,8 +77,7 @@ MACHINE_CONFIG_END
s100_mds_ad_device::s100_mds_ad_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, S100_MDS_AD, tag, owner, clock),
device_s100_card_interface(mconfig, *this),
- m_floppy0(*this, "floppy0"),
- m_floppy1(*this, "floppy1"),
+ m_floppy(*this, "floppy%u", 0U),
m_dsel_rom(*this, "dsel"),
m_dpgm_rom(*this, "dpgm"),
m_dwe_rom(*this, "dwe")
@@ -107,7 +107,7 @@ void s100_mds_ad_device::device_reset()
// s100_smemr_r - memory read
//-------------------------------------------------
-uint8_t s100_mds_ad_device::s100_smemr_r(address_space &space, offs_t offset)
+uint8_t s100_mds_ad_device::s100_smemr_r(offs_t offset)
{
return 0xff;
}
diff --git a/src/devices/bus/s100/nsmdsad.h b/src/devices/bus/s100/nsmdsad.h
index f10d3c0af23..ce5a248d553 100644
--- a/src/devices/bus/s100/nsmdsad.h
+++ b/src/devices/bus/s100/nsmdsad.h
@@ -39,11 +39,10 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_s100_card_interface overrides
- virtual uint8_t s100_smemr_r(address_space &space, offs_t offset) override;
+ virtual uint8_t s100_smemr_r(offs_t offset) override;
private:
- required_device<floppy_connector> m_floppy0;
- required_device<floppy_connector> m_floppy1;
+ required_device_array<floppy_connector, 2> m_floppy;
required_memory_region m_dsel_rom;
required_memory_region m_dpgm_rom;
required_memory_region m_dwe_rom;
diff --git a/src/devices/bus/s100/s100.cpp b/src/devices/bus/s100/s100.cpp
index dd28ca385d3..23333ce500f 100644
--- a/src/devices/bus/s100/s100.cpp
+++ b/src/devices/bus/s100/s100.cpp
@@ -135,7 +135,7 @@ void s100_bus_device::add_card(device_s100_card_interface *card)
// smemr_r - memory read
//-------------------------------------------------
-READ8_MEMBER( s100_bus_device::smemr_r )
+uint8_t s100_bus_device::smemr_r(offs_t offset)
{
uint8_t data = 0xff;
@@ -143,7 +143,7 @@ READ8_MEMBER( s100_bus_device::smemr_r )
while (entry)
{
- data &= entry->s100_smemr_r(space, offset);
+ data &= entry->s100_smemr_r(offset);
entry = entry->next();
}
@@ -155,13 +155,13 @@ READ8_MEMBER( s100_bus_device::smemr_r )
// mwrt_w - memory write
//-------------------------------------------------
-WRITE8_MEMBER( s100_bus_device::mwrt_w )
+void s100_bus_device::mwrt_w(offs_t offset, uint8_t data)
{
device_s100_card_interface *entry = m_device_list.first();
while (entry)
{
- entry->s100_mwrt_w(space, offset, data);
+ entry->s100_mwrt_w(offset, data);
entry = entry->next();
}
}
@@ -171,7 +171,7 @@ WRITE8_MEMBER( s100_bus_device::mwrt_w )
// sinp_r - I/O read
//-------------------------------------------------
-READ8_MEMBER( s100_bus_device::sinp_r )
+uint8_t s100_bus_device::sinp_r(offs_t offset)
{
uint8_t data = 0xff;
@@ -179,7 +179,7 @@ READ8_MEMBER( s100_bus_device::sinp_r )
while (entry)
{
- data &= entry->s100_sinp_r(space, offset);
+ data &= entry->s100_sinp_r(offset);
entry = entry->next();
}
@@ -191,13 +191,13 @@ READ8_MEMBER( s100_bus_device::sinp_r )
// sout_w - I/O write
//-------------------------------------------------
-WRITE8_MEMBER( s100_bus_device::sout_w )
+void s100_bus_device::sout_w(offs_t offset, uint8_t data)
{
device_s100_card_interface *entry = m_device_list.first();
while (entry)
{
- entry->s100_sout_w(space, offset, data);
+ entry->s100_sout_w(offset, data);
entry = entry->next();
}
}
diff --git a/src/devices/bus/s100/s100.h b/src/devices/bus/s100/s100.h
index 6336be291e4..f231520f694 100644
--- a/src/devices/bus/s100/s100.h
+++ b/src/devices/bus/s100/s100.h
@@ -68,68 +68,6 @@
//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_S100_SLOT_ADD(_tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, S100_SLOT, DERIVED_CLOCK(1, 1)) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-
-#define MCFG_S100_IRQ_CALLBACK(_write) \
- downcast<s100_bus_device &>(*device).set_irq_wr_callback(DEVCB_##_write);
-
-#define MCFG_S100_NMI_CALLBACK(_write) \
- downcast<s100_bus_device &>(*device).set_nmi_wr_callback(DEVCB_##_write);
-
-#define MCFG_S100_VI0_CALLBACK(_write) \
- downcast<s100_bus_device &>(*device).set_vi0_wr_callback(DEVCB_##_write);
-
-#define MCFG_S100_VI1_CALLBACK(_write) \
- downcast<s100_bus_device &>(*device).set_vi1_wr_callback(DEVCB_##_write);
-
-#define MCFG_S100_VI2_CALLBACK(_write) \
- downcast<s100_bus_device &>(*device).set_vi2_wr_callback(DEVCB_##_write);
-
-#define MCFG_S100_VI3_CALLBACK(_write) \
- downcast<s100_bus_device &>(*device).set_vi3_wr_callback(DEVCB_##_write);
-
-#define MCFG_S100_VI4_CALLBACK(_write) \
- downcast<s100_bus_device &>(*device).set_vi4_wr_callback(DEVCB_##_write);
-
-#define MCFG_S100_VI5_CALLBACK(_write) \
- downcast<s100_bus_device &>(*device).set_vi5_wr_callback(DEVCB_##_write);
-
-#define MCFG_S100_VI6_CALLBACK(_write) \
- downcast<s100_bus_device &>(*device).set_vi6_wr_callback(DEVCB_##_write);
-
-#define MCFG_S100_VI7_CALLBACK(_write) \
- downcast<s100_bus_device &>(*device).set_vi7_wr_callback(DEVCB_##_write);
-
-#define MCFG_S100_DMA0_CALLBACK(_write) \
- downcast<s100_bus_device &>(*device).set_dma0_wr_callback(DEVCB_##_write);
-
-#define MCFG_S100_DMA1_CALLBACK(_write) \
- downcast<s100_bus_device &>(*device).set_dma1_wr_callback(DEVCB_##_write);
-
-#define MCFG_S100_DMA2_CALLBACK(_write) \
- downcast<s100_bus_device &>(*device).set_dma2_wr_callback(DEVCB_##_write);
-
-#define MCFG_S100_DMA3_CALLBACK(_write) \
- downcast<s100_bus_device &>(*device).set_dma3_wr_callback(DEVCB_##_write);
-
-#define MCFG_S100_RDY_CALLBACK(_write) \
- downcast<s100_bus_device &>(*device).set_rdy_wr_callback(DEVCB_##_write);
-
-#define MCFG_S100_HOLD_CALLBACK(_write) \
- downcast<s100_bus_device &>(*device).set_hold_wr_callback(DEVCB_##_write);
-
-#define MCFG_S100_ERROR_CALLBACK(_write) \
- downcast<s100_bus_device &>(*device).set_error_wr_callback(DEVCB_##_write);
-
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -161,12 +99,12 @@ public:
virtual void s100_vi7_w(int state) { }
// memory access
- virtual uint8_t s100_smemr_r(address_space &space, offs_t offset) { return 0xff; }
- virtual void s100_mwrt_w(address_space &space, offs_t offset, uint8_t data) { }
+ virtual uint8_t s100_smemr_r(offs_t offset) { return 0xff; }
+ virtual void s100_mwrt_w(offs_t offset, uint8_t data) { }
// I/O access
- virtual uint8_t s100_sinp_r(address_space &space, offs_t offset) { return 0xff; }
- virtual void s100_sout_w(address_space &space, offs_t offset, uint8_t data) { }
+ virtual uint8_t s100_sinp_r(offs_t offset) { return 0xff; }
+ virtual void s100_sout_w(offs_t offset, uint8_t data) { }
// configuration access
virtual void s100_phlda_w(int state) { }
@@ -201,31 +139,31 @@ public:
s100_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
~s100_bus_device() { m_device_list.detach_all(); }
- template <class Object> devcb_base &set_irq_wr_callback(Object &&cb) { return m_write_irq.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_nmi_wr_callback(Object &&cb) { return m_write_nmi.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_vi0_wr_callback(Object &&cb) { return m_write_vi0.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_vi1_wr_callback(Object &&cb) { return m_write_vi1.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_vi2_wr_callback(Object &&cb) { return m_write_vi2.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_vi3_wr_callback(Object &&cb) { return m_write_vi3.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_vi4_wr_callback(Object &&cb) { return m_write_vi4.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_vi5_wr_callback(Object &&cb) { return m_write_vi5.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_vi6_wr_callback(Object &&cb) { return m_write_vi6.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_vi7_wr_callback(Object &&cb) { return m_write_vi7.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_dma0_wr_callback(Object &&cb) { return m_write_dma0.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_dma1_wr_callback(Object &&cb) { return m_write_dma1.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_dma2_wr_callback(Object &&cb) { return m_write_dma2.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_dma3_wr_callback(Object &&cb) { return m_write_dma3.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_rdy_wr_callback(Object &&cb) { return m_write_rdy.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_hold_wr_callback(Object &&cb) { return m_write_hold.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_error_wr_callback(Object &&cb) { return m_write_error.set_callback(std::forward<Object>(cb)); }
+ auto irq() { return m_write_irq.bind(); }
+ auto nmi() { return m_write_nmi.bind(); }
+ auto vi0() { return m_write_vi0.bind(); }
+ auto vi1() { return m_write_vi1.bind(); }
+ auto vi2() { return m_write_vi2.bind(); }
+ auto vi3() { return m_write_vi3.bind(); }
+ auto vi4() { return m_write_vi4.bind(); }
+ auto vi5() { return m_write_vi5.bind(); }
+ auto vi6() { return m_write_vi6.bind(); }
+ auto vi7() { return m_write_vi7.bind(); }
+ auto dma0() { return m_write_dma0.bind(); }
+ auto dma1() { return m_write_dma1.bind(); }
+ auto dma2() { return m_write_dma2.bind(); }
+ auto dma3() { return m_write_dma3.bind(); }
+ auto rdy() { return m_write_rdy.bind(); }
+ auto hold() { return m_write_hold.bind(); }
+ auto error() { return m_write_error.bind(); }
void add_card(device_s100_card_interface *card);
- DECLARE_READ8_MEMBER( smemr_r );
- DECLARE_WRITE8_MEMBER( mwrt_w );
+ uint8_t smemr_r(offs_t offset);
+ void mwrt_w(offs_t offset, uint8_t data);
- DECLARE_READ8_MEMBER( sinp_r );
- DECLARE_WRITE8_MEMBER( sout_w );
+ uint8_t sinp_r(offs_t offset);
+ void sout_w(offs_t offset, uint8_t data);
DECLARE_WRITE_LINE_MEMBER( irq_w ) { m_write_irq(state); }
DECLARE_WRITE_LINE_MEMBER( nmi_w ) { m_write_nmi(state); }
@@ -279,6 +217,15 @@ class s100_slot_device : public device_t, public device_slot_interface
{
public:
// construction/destruction
+ template <typename T>
+ s100_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : s100_slot_device(mconfig, tag, owner, DERIVED_CLOCK(1, 1))
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
s100_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
diff --git a/src/devices/bus/s100/seals8k.cpp b/src/devices/bus/s100/seals8k.cpp
index 9191f8566df..949c7d6d2c5 100644
--- a/src/devices/bus/s100/seals8k.cpp
+++ b/src/devices/bus/s100/seals8k.cpp
@@ -51,8 +51,8 @@ protected:
virtual void device_start() override;
// S-100 memory access handlers
- virtual u8 s100_smemr_r(address_space &space, offs_t offset) override;
- virtual void s100_mwrt_w(address_space &space, offs_t offset, u8 data) override;
+ virtual u8 s100_smemr_r(offs_t offset) override;
+ virtual void s100_mwrt_w(offs_t offset, u8 data) override;
// internal state
std::unique_ptr<u8[]> m_ram;
@@ -203,7 +203,7 @@ bool s100_8k_sc_device::board_selected(offs_t offset) const
// s100_smemr_r - memory read
//-------------------------------------------------
-u8 s100_8k_sc_device::s100_smemr_r(address_space &space, offs_t offset)
+u8 s100_8k_sc_device::s100_smemr_r(offs_t offset)
{
if (board_selected(offset))
return m_ram[offset & 0x1fff];
@@ -216,7 +216,7 @@ u8 s100_8k_sc_device::s100_smemr_r(address_space &space, offs_t offset)
// s100_mwrt_w - memory write
//-------------------------------------------------
-void s100_8k_sc_device::s100_mwrt_w(address_space &space, offs_t offset, u8 data)
+void s100_8k_sc_device::s100_mwrt_w(offs_t offset, u8 data)
{
if (board_selected(offset))
m_ram[offset & 0x1fff] = data;
diff --git a/src/devices/bus/s100/wunderbus.cpp b/src/devices/bus/s100/wunderbus.cpp
index 9d307d9053b..c7db4417dcb 100644
--- a/src/devices/bus/s100/wunderbus.cpp
+++ b/src/devices/bus/s100/wunderbus.cpp
@@ -300,7 +300,7 @@ void s100_wunderbus_device::s100_vi2_w(int state)
// s100_sinp_r - I/O read
//-------------------------------------------------
-uint8_t s100_wunderbus_device::s100_sinp_r(address_space &space, offs_t offset)
+uint8_t s100_wunderbus_device::s100_sinp_r(offs_t offset)
{
uint8_t address = (m_7c->read() & 0x3e) << 2;
if ((offset & 0xf8) != address) return 0xff;
@@ -388,15 +388,15 @@ uint8_t s100_wunderbus_device::s100_sinp_r(address_space &space, offs_t offset)
break;
case 1:
- data = m_ace1->ins8250_r(space, offset & 0x07);
+ data = m_ace1->ins8250_r(machine().dummy_space(), offset & 0x07);
break;
case 2:
- data = m_ace2->ins8250_r(space, offset & 0x07);
+ data = m_ace2->ins8250_r(machine().dummy_space(), offset & 0x07);
break;
case 3:
- data = m_ace3->ins8250_r(space, offset & 0x07);
+ data = m_ace3->ins8250_r(machine().dummy_space(), offset & 0x07);
break;
}
}
@@ -409,7 +409,7 @@ uint8_t s100_wunderbus_device::s100_sinp_r(address_space &space, offs_t offset)
// s100_sout_w - I/O write
//-------------------------------------------------
-void s100_wunderbus_device::s100_sout_w(address_space &space, offs_t offset, uint8_t data)
+void s100_wunderbus_device::s100_sout_w(offs_t offset, uint8_t data)
{
uint8_t address = (m_7c->read() & 0x3e) << 2;
if ((offset & 0xf8) != address) return;
@@ -511,15 +511,15 @@ void s100_wunderbus_device::s100_sout_w(address_space &space, offs_t offset, uin
break;
case 1:
- m_ace1->ins8250_w(space, offset & 0x07, data);
+ m_ace1->ins8250_w(machine().dummy_space(), offset & 0x07, data);
break;
case 2:
- m_ace2->ins8250_w(space, offset & 0x07, data);
+ m_ace2->ins8250_w(machine().dummy_space(), offset & 0x07, data);
break;
case 3:
- m_ace3->ins8250_w(space, offset & 0x07, data);
+ m_ace3->ins8250_w(machine().dummy_space(), offset & 0x07, data);
break;
}
}
diff --git a/src/devices/bus/s100/wunderbus.h b/src/devices/bus/s100/wunderbus.h
index 540c5cd8b6c..ca9a6d0e641 100644
--- a/src/devices/bus/s100/wunderbus.h
+++ b/src/devices/bus/s100/wunderbus.h
@@ -44,8 +44,8 @@ protected:
virtual void s100_vi0_w(int state) override;
virtual void s100_vi1_w(int state) override;
virtual void s100_vi2_w(int state) override;
- virtual uint8_t s100_sinp_r(address_space &space, offs_t offset) override;
- virtual void s100_sout_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t s100_sinp_r(offs_t offset) override;
+ virtual void s100_sout_w(offs_t offset, uint8_t data) override;
private:
DECLARE_WRITE_LINE_MEMBER( pic_int_w );
diff --git a/src/devices/bus/saturn/sat_slot.h b/src/devices/bus/saturn/sat_slot.h
index 4d94ea472d6..63a9ae0dbca 100644
--- a/src/devices/bus/saturn/sat_slot.h
+++ b/src/devices/bus/saturn/sat_slot.h
@@ -67,7 +67,16 @@ class sat_cart_slot_device : public device_t,
{
public:
// construction/destruction
- sat_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ sat_cart_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : sat_cart_slot_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+ sat_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
virtual ~sat_cart_slot_device();
// image-level overrides
@@ -117,9 +126,4 @@ DECLARE_DEVICE_TYPE(SATURN_CART_SLOT, sat_cart_slot_device)
#define SATSLOT_ROM_REGION_TAG ":cart:rom"
-#define MCFG_SATURN_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_tag, SATURN_CART_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-
#endif // MAME_BUS_SATURN_SAT_SLOT_H
diff --git a/src/devices/bus/sbus/cgthree.cpp b/src/devices/bus/sbus/cgthree.cpp
index 02ddaba688f..091efef3b21 100644
--- a/src/devices/bus/sbus/cgthree.cpp
+++ b/src/devices/bus/sbus/cgthree.cpp
@@ -36,9 +36,7 @@ void sbus_cgthree_device::device_add_mconfig(machine_config &config)
{
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_screen_update(FUNC(sbus_cgthree_device::screen_update));
- m_screen->set_size(1152, 900);
- m_screen->set_visarea(0, 1152-1, 0, 900-1);
- m_screen->set_refresh_hz(72);
+ m_screen->set_raw(92.9405_MHz_XTAL, 1504, 0, 1152, 937, 0, 900);
BT458(config, m_ramdac, 0);
}
diff --git a/src/devices/bus/scsi/omti5100.cpp b/src/devices/bus/scsi/omti5100.cpp
index 415b68bb4ed..519aa723a0b 100644
--- a/src/devices/bus/scsi/omti5100.cpp
+++ b/src/devices/bus/scsi/omti5100.cpp
@@ -176,7 +176,8 @@ void omti5100_device::WriteData( uint8_t *data, int dataLength )
}
}
-MACHINE_CONFIG_START(omti5100_device::device_add_mconfig)
- MCFG_HARDDISK_ADD("image0")
- MCFG_HARDDISK_ADD("image1")
-MACHINE_CONFIG_END
+void omti5100_device::device_add_mconfig(machine_config &config)
+{
+ HARDDISK(config, m_image0);
+ HARDDISK(config, m_image1);
+}
diff --git a/src/devices/bus/scsi/s1410.cpp b/src/devices/bus/scsi/s1410.cpp
index e05cfe73014..5416089fd9d 100644
--- a/src/devices/bus/scsi/s1410.cpp
+++ b/src/devices/bus/scsi/s1410.cpp
@@ -165,14 +165,15 @@ void s1410_device::s1410_io(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(s1410_device::device_add_mconfig)
- MCFG_DEVICE_ADD(Z8400A_TAG, Z80, XTAL(16'000'000)/4)
- MCFG_DEVICE_PROGRAM_MAP(s1410_mem)
- MCFG_DEVICE_IO_MAP(s1410_io)
- MCFG_DEVICE_DISABLE()
-
- MCFG_HARDDISK_ADD("image")
-MACHINE_CONFIG_END
+void s1410_device::device_add_mconfig(machine_config &config)
+{
+ z80_device &z8400a(Z80(config, Z8400A_TAG, XTAL(16'000'000)/4));
+ z8400a.set_addrmap(AS_PROGRAM, &s1410_device::s1410_mem);
+ z8400a.set_addrmap(AS_IO, &s1410_device::s1410_io);
+ z8400a.set_disable();
+
+ HARDDISK(config, "image");
+}
diff --git a/src/devices/bus/scsi/sa1403d.cpp b/src/devices/bus/scsi/sa1403d.cpp
index 902b69f5b63..5ab22288835 100644
--- a/src/devices/bus/scsi/sa1403d.cpp
+++ b/src/devices/bus/scsi/sa1403d.cpp
@@ -57,9 +57,10 @@ const tiny_rom_entry *sa1403d_device::device_rom_region() const
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(sa1403d_device::device_add_mconfig)
- MCFG_HARDDISK_ADD("image")
-MACHINE_CONFIG_END
+void sa1403d_device::device_add_mconfig(machine_config &config)
+{
+ HARDDISK(config, "image");
+}
//-------------------------------------------------
diff --git a/src/devices/bus/scsi/scsi.h b/src/devices/bus/scsi/scsi.h
index e5995f970ab..66ddae370d6 100644
--- a/src/devices/bus/scsi/scsi.h
+++ b/src/devices/bus/scsi/scsi.h
@@ -17,77 +17,6 @@
#define SCSI_PORT_DEVICE6 "6"
#define SCSI_PORT_DEVICE7 "7"
-#define MCFG_SCSI_BSY_HANDLER(_devcb) \
- downcast<scsi_port_device &>(*device).set_bsy_handler(DEVCB_##_devcb);
-
-#define MCFG_SCSI_SEL_HANDLER(_devcb) \
- downcast<scsi_port_device &>(*device).set_sel_handler(DEVCB_##_devcb);
-
-#define MCFG_SCSI_CD_HANDLER(_devcb) \
- downcast<scsi_port_device &>(*device).set_cd_handler(DEVCB_##_devcb);
-
-#define MCFG_SCSI_IO_HANDLER(_devcb) \
- downcast<scsi_port_device &>(*device).set_io_handler(DEVCB_##_devcb);
-
-#define MCFG_SCSI_MSG_HANDLER(_devcb) \
- downcast<scsi_port_device &>(*device).set_msg_handler(DEVCB_##_devcb);
-
-#define MCFG_SCSI_REQ_HANDLER(_devcb) \
- downcast<scsi_port_device &>(*device).set_req_handler(DEVCB_##_devcb);
-
-#define MCFG_SCSI_ACK_HANDLER(_devcb) \
- downcast<scsi_port_device &>(*device).set_ack_handler(DEVCB_##_devcb);
-
-#define MCFG_SCSI_ATN_HANDLER(_devcb) \
- downcast<scsi_port_device &>(*device).set_atn_handler(DEVCB_##_devcb);
-
-#define MCFG_SCSI_RST_HANDLER(_devcb) \
- downcast<scsi_port_device &>(*device).set_rst_handler(DEVCB_##_devcb);
-
-#define MCFG_SCSI_DATA0_HANDLER(_devcb) \
- downcast<scsi_port_device &>(*device).set_data0_handler(DEVCB_##_devcb);
-
-#define MCFG_SCSI_DATA1_HANDLER(_devcb) \
- downcast<scsi_port_device &>(*device).set_data1_handler(DEVCB_##_devcb);
-
-#define MCFG_SCSI_DATA2_HANDLER(_devcb) \
- downcast<scsi_port_device &>(*device).set_data2_handler(DEVCB_##_devcb);
-
-#define MCFG_SCSI_DATA3_HANDLER(_devcb) \
- downcast<scsi_port_device &>(*device).set_data3_handler(DEVCB_##_devcb);
-
-#define MCFG_SCSI_DATA4_HANDLER(_devcb) \
- downcast<scsi_port_device &>(*device).set_data4_handler(DEVCB_##_devcb);
-
-#define MCFG_SCSI_DATA5_HANDLER(_devcb) \
- downcast<scsi_port_device &>(*device).set_data5_handler(DEVCB_##_devcb);
-
-#define MCFG_SCSI_DATA6_HANDLER(_devcb) \
- downcast<scsi_port_device &>(*device).set_data6_handler(DEVCB_##_devcb);
-
-#define MCFG_SCSI_DATA7_HANDLER(_devcb) \
- downcast<scsi_port_device &>(*device).set_data7_handler(DEVCB_##_devcb);
-
-#define MCFG_SCSI_OUTPUT_LATCH_ADD(_tag, scsi_port_tag) \
- MCFG_DEVICE_ADD(_tag, OUTPUT_LATCH, 0) \
- MCFG_OUTPUT_LATCH_BIT0_HANDLER(WRITELINE(scsi_port_tag, scsi_port_device, write_data0)) \
- MCFG_OUTPUT_LATCH_BIT1_HANDLER(WRITELINE(scsi_port_tag, scsi_port_device, write_data1)) \
- MCFG_OUTPUT_LATCH_BIT2_HANDLER(WRITELINE(scsi_port_tag, scsi_port_device, write_data2)) \
- MCFG_OUTPUT_LATCH_BIT3_HANDLER(WRITELINE(scsi_port_tag, scsi_port_device, write_data3)) \
- MCFG_OUTPUT_LATCH_BIT4_HANDLER(WRITELINE(scsi_port_tag, scsi_port_device, write_data4)) \
- MCFG_OUTPUT_LATCH_BIT5_HANDLER(WRITELINE(scsi_port_tag, scsi_port_device, write_data5)) \
- MCFG_OUTPUT_LATCH_BIT6_HANDLER(WRITELINE(scsi_port_tag, scsi_port_device, write_data6)) \
- MCFG_OUTPUT_LATCH_BIT7_HANDLER(WRITELINE(scsi_port_tag, scsi_port_device, write_data7))
-
-#define MCFG_SCSI_DATA_INPUT_BUFFER(_tag) \
- MCFG_SCSI_DATA0_HANDLER(WRITELINE(_tag, input_buffer_device, write_bit0)) \
- MCFG_SCSI_DATA1_HANDLER(WRITELINE(_tag, input_buffer_device, write_bit1)) \
- MCFG_SCSI_DATA2_HANDLER(WRITELINE(_tag, input_buffer_device, write_bit2)) \
- MCFG_SCSI_DATA3_HANDLER(WRITELINE(_tag, input_buffer_device, write_bit3)) \
- MCFG_SCSI_DATA4_HANDLER(WRITELINE(_tag, input_buffer_device, write_bit4)) \
- MCFG_SCSI_DATA5_HANDLER(WRITELINE(_tag, input_buffer_device, write_bit5)) \
- MCFG_SCSI_DATA6_HANDLER(WRITELINE(_tag, input_buffer_device, write_bit6)) \
- MCFG_SCSI_DATA7_HANDLER(WRITELINE(_tag, input_buffer_device, write_bit7))
class scsi_port_slot_device;
class scsi_port_interface;
@@ -100,23 +29,6 @@ public:
// construction/destruction
scsi_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
- template <class Object> devcb_base &set_bsy_handler(Object &&cb) { return m_bsy_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_sel_handler(Object &&cb) { return m_sel_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_cd_handler(Object &&cb) { return m_cd_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_io_handler(Object &&cb) { return m_io_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_msg_handler(Object &&cb) { return m_msg_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_req_handler(Object &&cb) { return m_req_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_ack_handler(Object &&cb) { return m_ack_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_atn_handler(Object &&cb) { return m_atn_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_rst_handler(Object &&cb) { return m_rst_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_data0_handler(Object &&cb) { return m_data0_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_data1_handler(Object &&cb) { return m_data1_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_data2_handler(Object &&cb) { return m_data2_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_data3_handler(Object &&cb) { return m_data3_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_data4_handler(Object &&cb) { return m_data4_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_data5_handler(Object &&cb) { return m_data5_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_data6_handler(Object &&cb) { return m_data6_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_data7_handler(Object &&cb) { return m_data7_handler.set_callback(std::forward<Object>(cb)); }
auto bsy_handler() { return m_bsy_handler.bind(); }
auto sel_handler() { return m_sel_handler.bind(); }
auto cd_handler() { return m_cd_handler.bind(); }
diff --git a/src/devices/bus/scsi/scsicd.cpp b/src/devices/bus/scsi/scsicd.cpp
index 1a5e6f8002d..0f577ea44d3 100644
--- a/src/devices/bus/scsi/scsicd.cpp
+++ b/src/devices/bus/scsi/scsicd.cpp
@@ -30,8 +30,8 @@ void scsicd_device::device_start()
scsihle_device::device_start();
}
-MACHINE_CONFIG_START(scsicd_device::device_add_mconfig)
- MCFG_CDROM_ADD("image")
- MCFG_CDROM_INTERFACE("cdrom")
- MCFG_DEVICE_ADD("cdda", CDDA)
-MACHINE_CONFIG_END
+void scsicd_device::device_add_mconfig(machine_config &config)
+{
+ CDROM(config, "image").set_interface("cdrom");
+ CDDA(config, "cdda");
+}
diff --git a/src/devices/bus/scsi/scsihd.cpp b/src/devices/bus/scsi/scsihd.cpp
index b63bafeb098..4fb01e02130 100644
--- a/src/devices/bus/scsi/scsihd.cpp
+++ b/src/devices/bus/scsi/scsihd.cpp
@@ -29,7 +29,7 @@ void scsihd_device::device_start()
scsihle_device::device_start();
}
-MACHINE_CONFIG_START(scsihd_device::device_add_mconfig)
- MCFG_HARDDISK_ADD("image")
- MCFG_HARDDISK_INTERFACE("scsi_hdd")
-MACHINE_CONFIG_END
+void scsihd_device::device_add_mconfig(machine_config &config)
+{
+ HARDDISK(config, "image", "scsi_hdd");
+}
diff --git a/src/devices/bus/scsi/scsihle.h b/src/devices/bus/scsi/scsihle.h
index bce047ae474..e98e38122e7 100644
--- a/src/devices/bus/scsi/scsihle.h
+++ b/src/devices/bus/scsi/scsihle.h
@@ -84,10 +84,4 @@ extern const input_device_default DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_5)[];
extern const input_device_default DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_6)[];
extern const input_device_default DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_7)[];
-#define MCFG_SCSIDEV_ADD(_tag, _option, _type, _id) \
- MCFG_DEVICE_MODIFY(_tag ) \
- MCFG_SLOT_OPTION_ADD( _option, _type ) \
- MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS( _option, _id ) \
- MCFG_SLOT_DEFAULT_OPTION( _option )
-
#endif // MAME_BUS_SCSI_SCSIHLE_H
diff --git a/src/devices/bus/scv/slot.h b/src/devices/bus/scv/slot.h
index 5dc3ec6e5b7..357c593c404 100644
--- a/src/devices/bus/scv/slot.h
+++ b/src/devices/bus/scv/slot.h
@@ -66,7 +66,17 @@ class scv_cart_slot_device : public device_t,
{
public:
// construction/destruction
- scv_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ scv_cart_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : scv_cart_slot_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ scv_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
virtual ~scv_cart_slot_device();
// image-level overrides
@@ -116,8 +126,4 @@ DECLARE_DEVICE_TYPE(SCV_CART_SLOT, scv_cart_slot_device)
#define SCVSLOT_ROM_REGION_TAG ":cart:rom"
-#define MCFG_SCV_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_tag, SCV_CART_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
#endif // MAME_BUS_SCV_SLOT_H
diff --git a/src/devices/bus/sega8/ccatch.cpp b/src/devices/bus/sega8/ccatch.cpp
index cbe9840bae7..1180e7a793b 100644
--- a/src/devices/bus/sega8/ccatch.cpp
+++ b/src/devices/bus/sega8/ccatch.cpp
@@ -53,6 +53,7 @@ static void sg1000_card(device_slot_interface &device)
device.option_add_internal("rom", SEGA8_ROM_STD);
}
-MACHINE_CONFIG_START(sega8_cardcatch_device::device_add_mconfig)
- MCFG_SG1000_CARD_ADD("cardslot", sg1000_card, nullptr)
-MACHINE_CONFIG_END
+void sega8_cardcatch_device::device_add_mconfig(machine_config &config)
+{
+ SG1000_CARD_SLOT(config, "cardslot", sg1000_card, nullptr);
+}
diff --git a/src/devices/bus/sega8/mgear.cpp b/src/devices/bus/sega8/mgear.cpp
index 977ea1f18e7..46fb6a4ad52 100644
--- a/src/devices/bus/sega8/mgear.cpp
+++ b/src/devices/bus/sega8/mgear.cpp
@@ -38,7 +38,8 @@ void sega8_mgear_device::device_reset()
}
-MACHINE_CONFIG_START(sega8_mgear_device::device_add_mconfig)
- MCFG_SMS_CARTRIDGE_ADD("subslot", sms_cart, nullptr)
- MCFG_SOFTWARE_LIST_ADD("cart_list","sms")
-MACHINE_CONFIG_END
+void sega8_mgear_device::device_add_mconfig(machine_config &config)
+{
+ SMS_CART_SLOT(config, "subslot", sms_cart, nullptr);
+ SOFTWARE_LIST(config, "cart_list").set_original("sms");
+}
diff --git a/src/devices/bus/sega8/rom.cpp b/src/devices/bus/sega8/rom.cpp
index 72017b5c795..1f039361a12 100644
--- a/src/devices/bus/sega8/rom.cpp
+++ b/src/devices/bus/sega8/rom.cpp
@@ -42,6 +42,9 @@ DEFINE_DEVICE_TYPE(SEGA8_ROM_KOREAN, sega8_korean_device, "sega8_kor
DEFINE_DEVICE_TYPE(SEGA8_ROM_KOREAN_NB, sega8_korean_nb_device, "sega8_korean_nb", "SMS Korean No-Bank Mapper Carts")
DEFINE_DEVICE_TYPE(SEGA8_ROM_SEOJIN, sega8_seojin_device, "sega8_seojin", "SMS Seo Jin Multi-cart")
+// Specific SC-3000 cart types
+DEFINE_DEVICE_TYPE(SEGA8_ROM_MULTICART, sega8_multicart_device, "sega8_multicart", "SC-3000 MkII Multicart Cart")
+DEFINE_DEVICE_TYPE(SEGA8_ROM_MEGACART, sega8_megacart_device, "sega8_megacart", "SC-3000 Megacart Cart")
sega8_rom_device::sega8_rom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
@@ -185,6 +188,18 @@ sega8_seojin_device::sega8_seojin_device(const machine_config &mconfig, const ch
}
+sega8_multicart_device::sega8_multicart_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : sega8_rom_device(mconfig, SEGA8_ROM_MULTICART, tag, owner, clock)
+{
+}
+
+
+sega8_megacart_device::sega8_megacart_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : sega8_rom_device(mconfig, SEGA8_ROM_MEGACART, tag, owner, clock)
+{
+}
+
+
void sega8_rom_device::device_start()
{
save_item(NAME(m_rom_bank_base));
@@ -268,6 +283,28 @@ void sega8_zemina_device::device_reset()
}
+void sega8_multicart_device::device_start()
+{
+ save_item(NAME(m_block));
+}
+
+void sega8_multicart_device::device_reset()
+{
+ m_block = 0xff;
+}
+
+
+void sega8_megacart_device::device_start()
+{
+ save_item(NAME(m_block));
+}
+
+void sega8_megacart_device::device_reset()
+{
+ m_block = 0xff;
+}
+
+
// initial bank setup needs to know how many 16K banks are available, so it needs to be called during cart loading...
void sega8_rom_device::late_bank_setup()
@@ -1023,3 +1060,78 @@ READ8_MEMBER(sega8_seojin_device::read_ram)
return m_ram[offset & 0x3fff];
}
+/*-------------------------------------------------
+
+ SC-3000 Survivors MkII Multicart
+
+-------------------------------------------------*/
+
+READ8_MEMBER(sega8_multicart_device::read_cart)
+{
+ // 16K of RAM sits in 0x8000-0xbfff
+ if (offset >= 0x8000)
+ return m_ram[offset & 0x3fff];
+
+ return m_rom[(offset & 0x7fff) | (m_block << 15) % m_rom_size];
+}
+
+WRITE8_MEMBER(sega8_multicart_device::write_cart)
+{
+ // 16K of RAM sits in 0x8000-0xbfff
+ if (offset >= 0x8000)
+ m_ram[offset & 0x3fff] = data;
+}
+
+READ8_MEMBER(sega8_multicart_device::read_ram)
+{
+ return m_ram[0x4000 + (offset & 0x3fff)];
+}
+
+WRITE8_MEMBER(sega8_multicart_device::write_ram)
+{
+ m_ram[0x4000 + (offset & 0x3fff)] = data;
+}
+
+WRITE8_MEMBER(sega8_multicart_device::write_io)
+{
+ if ((offset & 0xe0) == 0xe0)
+ m_block = (data & 0x80) ? ((data & 0x1f) | ((data & 0x40) ? 0x20 : 0x00)) : 0x3f;
+}
+
+/*-------------------------------------------------
+
+ SC-3000 Survivors Megacart
+
+-------------------------------------------------*/
+
+READ8_MEMBER(sega8_megacart_device::read_cart)
+{
+ // 16K of RAM sits in 0x8000-0xbfff
+ if (offset >= 0x8000)
+ return m_ram[offset & 0x3fff];
+
+ return m_rom[(offset & 0x7fff) | (m_block << 15) % m_rom_size];
+}
+
+WRITE8_MEMBER(sega8_megacart_device::write_cart)
+{
+ // 16K of RAM sits in 0x8000-0xbfff
+ if (offset >= 0x8000)
+ m_ram[offset & 0x3fff] = data;
+}
+
+READ8_MEMBER(sega8_megacart_device::read_ram)
+{
+ return m_ram[0x4000 + (offset & 0x3fff)];
+}
+
+WRITE8_MEMBER(sega8_megacart_device::write_ram)
+{
+ m_ram[0x4000 + (offset & 0x3fff)] = data;
+}
+
+WRITE8_MEMBER(sega8_megacart_device::write_io)
+{
+ if ((offset & 0xe0) == 0xe0)
+ m_block = (data & 0x1f) | (data & 0xc0) >> 1;
+}
diff --git a/src/devices/bus/sega8/rom.h b/src/devices/bus/sega8/rom.h
index c299ff261c5..4f9dc80d967 100644
--- a/src/devices/bus/sega8/rom.h
+++ b/src/devices/bus/sega8/rom.h
@@ -397,6 +397,60 @@ protected:
};
+// ======================> sega8_multicart_device
+
+class sega8_multicart_device : public sega8_rom_device
+{
+public:
+ // construction/destruction
+ sega8_multicart_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ // reading and writing
+ virtual DECLARE_READ8_MEMBER(read_cart) override;
+ virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual DECLARE_WRITE8_MEMBER(write_io) override;
+
+ // has internal RAM which overwrites the system one!
+ virtual DECLARE_READ8_MEMBER(read_ram) override;
+ virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+private:
+ uint8_t m_block;
+};
+
+
+// ======================> sega8_megacart_device
+
+class sega8_megacart_device : public sega8_rom_device
+{
+public:
+ // construction/destruction
+ sega8_megacart_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ // reading and writing
+ virtual DECLARE_READ8_MEMBER(read_cart) override;
+ virtual DECLARE_WRITE8_MEMBER(write_cart) override;
+ virtual DECLARE_WRITE8_MEMBER(write_io) override;
+
+ // has internal RAM which overwrites the system one!
+ virtual DECLARE_READ8_MEMBER(read_ram) override;
+ virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+private:
+ uint8_t m_block;
+};
+
+
// device type definition
DECLARE_DEVICE_TYPE(SEGA8_ROM_STD, sega8_rom_device)
DECLARE_DEVICE_TYPE(SEGA8_ROM_OTHELLO, sega8_othello_device)
@@ -416,5 +470,7 @@ DECLARE_DEVICE_TYPE(SEGA8_ROM_HICOM, sega8_hicom_device)
DECLARE_DEVICE_TYPE(SEGA8_ROM_KOREAN, sega8_korean_device)
DECLARE_DEVICE_TYPE(SEGA8_ROM_KOREAN_NB, sega8_korean_nb_device)
DECLARE_DEVICE_TYPE(SEGA8_ROM_SEOJIN, sega8_seojin_device)
+DECLARE_DEVICE_TYPE(SEGA8_ROM_MULTICART, sega8_multicart_device)
+DECLARE_DEVICE_TYPE(SEGA8_ROM_MEGACART, sega8_megacart_device)
#endif // MAME_BUS_SEGA8_ROM_H
diff --git a/src/devices/bus/sega8/sega8_slot.cpp b/src/devices/bus/sega8/sega8_slot.cpp
index 3242654b829..e897f6c53e8 100644
--- a/src/devices/bus/sega8/sega8_slot.cpp
+++ b/src/devices/bus/sega8/sega8_slot.cpp
@@ -40,6 +40,16 @@
DEFINE_DEVICE_TYPE(SEGA8_CART_SLOT, sega8_cart_slot_device, "sega8_cart_slot", "Sega Master System / Game Gear / SG-1000 Cartridge Slot")
DEFINE_DEVICE_TYPE(SEGA8_CARD_SLOT, sega8_card_slot_device, "sega8_card_slot", "Sega Master System / Game Gear / SG-1000 Card Slot")
+DEFINE_DEVICE_TYPE(SG1000_CART_SLOT, sg1000_cart_slot_device, "sg1000_cart_slot", "Sega SG-1000 Cartridge Slot")
+DEFINE_DEVICE_TYPE(OMV_CART_SLOT, omv_cart_slot_device, "omv_cart_slot", "Tsukuda Original Othello Multivision FG-1000 / FG-2000 Cartridge Slot")
+DEFINE_DEVICE_TYPE(SC3000_CART_SLOT, sc3000_cart_slot_device, "sc3000_cart_slot", "Sega SC-3000 Cartridge Slot")
+DEFINE_DEVICE_TYPE(SG1000MK3_CART_SLOT, sg1000mk3_cart_slot_device, "sg1000mk3_cart_slot", "Sega SG-1000 Mark III Cartridge Slot")
+DEFINE_DEVICE_TYPE(SMS_CART_SLOT, sms_cart_slot_device, "sms_cart_slot", "Sega Master System Cartridge Slot")
+DEFINE_DEVICE_TYPE(GAMEGEAR_CART_SLOT, gamegear_cart_slot_device, "gamegear_cart_slot", "Sega Game Gear Cartridge Slot")
+
+DEFINE_DEVICE_TYPE(SMS_CARD_SLOT, sms_card_slot_device, "sms_card_slot", "Sega Master System Card Slot")
+DEFINE_DEVICE_TYPE(SG1000_CARD_SLOT, sg1000_card_slot_device, "sg1000_card_slot", "Sega SG-1000 Card Slot")
+
//**************************************************************************
// SMS cartridges Interface
@@ -112,10 +122,7 @@ sega8_cart_slot_device::sega8_cart_slot_device(const machine_config &mconfig, de
, device_image_interface(mconfig, *this)
, device_slot_interface(mconfig, *this)
, m_type(SEGA8_BASE_ROM)
- , m_must_be_loaded(false)
, m_is_card(is_card)
- , m_interface("sms_cart")
- , m_extensions("bin")
, m_cart(nullptr)
{
}
@@ -125,11 +132,57 @@ sega8_cart_slot_device::sega8_cart_slot_device(const machine_config &mconfig, co
{
}
+sega8_card_slot_device::sega8_card_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : sega8_cart_slot_device(mconfig, type, tag, owner, clock, true)
+{
+}
+
sega8_card_slot_device::sega8_card_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : sega8_cart_slot_device(mconfig, SEGA8_CARD_SLOT, tag, owner, clock, true)
+ : sega8_card_slot_device(mconfig, SEGA8_CARD_SLOT, tag, owner, clock)
+{
+}
+
+
+sg1000_cart_slot_device::sg1000_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : sega8_cart_slot_device(mconfig, SG1000_CART_SLOT, tag, owner, clock)
+{
+}
+
+omv_cart_slot_device::omv_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : sega8_cart_slot_device(mconfig, OMV_CART_SLOT, tag, owner, clock)
+{
+}
+
+sc3000_cart_slot_device::sc3000_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : sega8_cart_slot_device(mconfig, SC3000_CART_SLOT, tag, owner, clock)
+{
+}
+
+sg1000mk3_cart_slot_device::sg1000mk3_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : sega8_cart_slot_device(mconfig, SG1000MK3_CART_SLOT, tag, owner, clock)
+{
+}
+
+sms_cart_slot_device::sms_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : sega8_cart_slot_device(mconfig, SMS_CART_SLOT, tag, owner, clock)
{
}
+gamegear_cart_slot_device::gamegear_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : sega8_cart_slot_device(mconfig, GAMEGEAR_CART_SLOT, tag, owner, clock)
+{
+}
+
+
+sms_card_slot_device::sms_card_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : sega8_card_slot_device(mconfig, SMS_CARD_SLOT, tag, owner, clock)
+{
+}
+
+sg1000_card_slot_device::sg1000_card_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : sega8_card_slot_device(mconfig, SG1000_CARD_SLOT, tag, owner, clock)
+{
+}
//-------------------------------------------------
// sega8_cart_slot_device - destructor
@@ -178,7 +231,9 @@ static const sega8_slot slot_list[] =
{ SEGA8_MUSIC_EDITOR, "music_editor" },
{ SEGA8_DAHJEE_TYPEA, "dahjee_typea" },
{ SEGA8_DAHJEE_TYPEB, "dahjee_typeb" },
- { SEGA8_SEOJIN, "seojin" }
+ { SEGA8_SEOJIN, "seojin" },
+ { SEGA8_MULTICART, "multicart" },
+ { SEGA8_MEGACART, "megacart" }
};
static int sega8_get_pcb_id(const char *slot)
@@ -277,7 +332,7 @@ void sega8_cart_slot_device::setup_ram()
m_cart->ram_alloc(0x800);
m_cart->set_has_battery(false);
}
- else if (m_type == SEGA8_BASIC_L3)
+ else if (m_type == SEGA8_BASIC_L3 || m_type == SEGA8_MULTICART || m_type == SEGA8_MEGACART)
{
m_cart->ram_alloc(0x8000);
m_cart->set_has_battery(false);
@@ -584,6 +639,14 @@ int sega8_cart_slot_device::get_cart_type(const uint8_t *ROM, uint32_t len) cons
type = SEGA8_MUSIC_EDITOR;
}
+ // SC-3000 Survivors Multicart
+ if (len == 0x200000)
+ type = SEGA8_MULTICART;
+
+ // SC-3000 Survivors Megacart
+ if (len == 0x400000)
+ type = SEGA8_MEGACART;
+
return type;
}
@@ -638,6 +701,14 @@ READ8_MEMBER(sega8_cart_slot_device::read_ram)
return 0xff;
}
+READ8_MEMBER(sega8_cart_slot_device::read_io)
+{
+ if (m_cart)
+ return m_cart->read_io(space, offset);
+ else
+ return 0xff;
+}
+
/*-------------------------------------------------
write
@@ -661,6 +732,12 @@ WRITE8_MEMBER(sega8_cart_slot_device::write_ram)
m_cart->write_ram(space, offset, data);
}
+WRITE8_MEMBER(sega8_cart_slot_device::write_io)
+{
+ if (m_cart)
+ m_cart->write_io(space, offset, data);
+}
+
/*-------------------------------------------------
Internal header logging
@@ -817,6 +894,8 @@ void sg1000_cart(device_slot_interface &device)
device.option_add_internal("dahjee_typea", SEGA8_ROM_DAHJEE_TYPEA);
device.option_add_internal("dahjee_typeb", SEGA8_ROM_DAHJEE_TYPEB);
device.option_add_internal("cardcatcher", SEGA8_ROM_CARDCATCH);
+ device.option_add_internal("multicart", SEGA8_ROM_MULTICART);
+ device.option_add_internal("megacart", SEGA8_ROM_MEGACART);
}
void sg1000mk3_cart(device_slot_interface &device)
diff --git a/src/devices/bus/sega8/sega8_slot.h b/src/devices/bus/sega8/sega8_slot.h
index 9b653d4887b..ca3ebdc6172 100644
--- a/src/devices/bus/sega8/sega8_slot.h
+++ b/src/devices/bus/sega8/sega8_slot.h
@@ -32,7 +32,9 @@ enum
SEGA8_MUSIC_EDITOR,
SEGA8_DAHJEE_TYPEA,
SEGA8_DAHJEE_TYPEB,
- SEGA8_SEOJIN
+ SEGA8_SEOJIN,
+ SEGA8_MULTICART,
+ SEGA8_MEGACART
};
@@ -56,6 +58,9 @@ public:
// a few carts (for SG1000) acts as a RAM expansion, taking control of the system RAM in 0xc000-0xffff
virtual DECLARE_READ8_MEMBER(read_ram) { return 0xff; }
virtual DECLARE_WRITE8_MEMBER(write_ram) { }
+ // the SC3000 has I/OR, I/OW lines connected
+ virtual DECLARE_READ8_MEMBER(read_io) { return 0xff; }
+ virtual DECLARE_WRITE8_MEMBER(write_io) { }
void rom_alloc(uint32_t size, const char *tag);
void ram_alloc(uint32_t size);
@@ -126,18 +131,14 @@ public:
void save_ram() { if (m_cart && m_cart->get_ram_size()) m_cart->save_ram(); }
- void set_mandatory(bool val) { m_must_be_loaded = val; }
- void set_intf(const char * interface) { m_interface = interface; }
- void set_ext(const char * extensions) { m_extensions = extensions; }
-
virtual iodevice_t image_type() const override { return IO_CARTSLOT; }
virtual bool is_readable() const override { return 1; }
virtual bool is_writeable() const override { return 0; }
virtual bool is_creatable() const override { return 0; }
- virtual bool must_be_loaded() const override { return m_must_be_loaded; }
virtual bool is_reset_on_load() const override { return 1; }
- virtual const char *image_interface() const override { return m_interface; }
- virtual const char *file_extensions() const override { return m_extensions; }
+ virtual bool must_be_loaded() const override { return false; }
+ virtual const char *image_interface() const override { return "sms_cart"; }
+ virtual const char *file_extensions() const override { return "bin"; }
// slot interface overrides
virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
@@ -148,20 +149,20 @@ public:
virtual DECLARE_WRITE8_MEMBER(write_mapper);
virtual DECLARE_READ8_MEMBER(read_ram);
virtual DECLARE_WRITE8_MEMBER(write_ram);
+ virtual DECLARE_READ8_MEMBER(read_io);
+ virtual DECLARE_WRITE8_MEMBER(write_io);
int get_lphaser_xoffs() { return m_cart ? m_cart->get_lphaser_xoffs() : -1; }
int get_sms_mode() { return m_cart->get_sms_mode(); }
protected:
- sega8_cart_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, bool is_card);
+ sega8_cart_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, bool is_card = false);
// device-level overrides
virtual void device_start() override;
int m_type;
- bool m_must_be_loaded, m_is_card;
- const char *m_interface;
- const char *m_extensions;
+ bool m_is_card;
device_sega8_cart_interface* m_cart;
};
@@ -175,8 +176,188 @@ public:
virtual const char *custom_instance_name() const override { return "card"; }
virtual const char *custom_brief_instance_name() const override { return "card"; }
+
+protected:
+ // construction/destruction
+ sega8_card_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+};
+
+// ======================> sg1000_cart_slot_device
+
+class sg1000_cart_slot_device : public sega8_cart_slot_device
+{
+public:
+ // construction/destruction
+ template <typename T>
+ sg1000_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts, const char *dflt)
+ : sg1000_cart_slot_device(mconfig, tag, owner, u32(0))
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+ sg1000_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ virtual bool must_be_loaded() const override { return true; }
+ virtual const char *image_interface() const override { return "sg1000_cart"; }
+ virtual const char *file_extensions() const override { return "bin,sg"; }
+};
+
+// ======================> omv_cart_slot_device
+
+class omv_cart_slot_device : public sega8_cart_slot_device
+{
+public:
+ // construction/destruction
+ template <typename T>
+ omv_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts, const char *dflt)
+ : omv_cart_slot_device(mconfig, tag, owner, u32(0))
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+ omv_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ virtual bool must_be_loaded() const override { return false; }
+ virtual const char *image_interface() const override { return "sg1000_cart"; }
+ virtual const char *file_extensions() const override { return "bin,sg"; }
+};
+
+// ======================> sc3000_cart_slot_device
+
+class sc3000_cart_slot_device : public sega8_cart_slot_device
+{
+public:
+ // construction/destruction
+ template <typename T>
+ sc3000_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts, const char *dflt)
+ : sc3000_cart_slot_device(mconfig, tag, owner, u32(0))
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+ sc3000_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ virtual bool must_be_loaded() const override { return true; }
+ virtual const char *image_interface() const override { return "sg1000_cart"; }
+ virtual const char *file_extensions() const override { return "bin,sg,sc"; }
+};
+
+// ======================> sg1000mk3_cart_slot_device
+
+class sg1000mk3_cart_slot_device : public sega8_cart_slot_device
+{
+public:
+ // construction/destruction
+ template <typename T>
+ sg1000mk3_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts, const char *dflt)
+ : sg1000mk3_cart_slot_device(mconfig, tag, owner, u32(0))
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+ sg1000mk3_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ virtual bool must_be_loaded() const override { return false; }
+ virtual const char *image_interface() const override { return "sms_cart,sg1000_cart"; }
+ virtual const char *file_extensions() const override { return "bin,sms,sg"; }
};
+// ======================> sms_cart_slot_device
+
+class sms_cart_slot_device : public sega8_cart_slot_device
+{
+public:
+ // construction/destruction
+ template <typename T>
+ sms_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts, const char *dflt)
+ : sms_cart_slot_device(mconfig, tag, owner, u32(0))
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+ sms_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ virtual bool must_be_loaded() const override { return false; }
+ virtual const char *image_interface() const override { return "sms_cart"; }
+ virtual const char *file_extensions() const override { return "bin,sms"; }
+};
+
+// ======================> gamegear_cart_slot_device
+
+class gamegear_cart_slot_device : public sega8_cart_slot_device
+{
+public:
+ // construction/destruction
+ template <typename T>
+ gamegear_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts, const char *dflt)
+ : gamegear_cart_slot_device(mconfig, tag, owner, u32(0))
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+ gamegear_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ virtual bool must_be_loaded() const override { return true; }
+ virtual const char *image_interface() const override { return "gamegear_cart"; }
+ virtual const char *file_extensions() const override { return "bin,gg"; }
+};
+
+
+// ======================> sms_card_slot_device
+
+class sms_card_slot_device : public sega8_card_slot_device
+{
+public:
+ // construction/destruction
+ template <typename T>
+ sms_card_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts, const char *dflt)
+ : sms_card_slot_device(mconfig, tag, owner, u32(0))
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+ sms_card_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ virtual bool must_be_loaded() const override { return false; }
+ virtual const char *image_interface() const override { return "sms_card"; }
+ virtual const char *file_extensions() const override { return "bin"; }
+};
+
+// ======================> sg1000_card_slot_device
+
+class sg1000_card_slot_device : public sega8_card_slot_device
+{
+public:
+ // construction/destruction
+ template <typename T>
+ sg1000_card_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts, const char *dflt)
+ : sg1000_card_slot_device(mconfig, tag, owner, u32(0))
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+ sg1000_card_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ virtual const char *image_interface() const override { return "sg1000_cart"; }
+ virtual const char *file_extensions() const override { return "bin,sg"; }
+};
+
+DECLARE_DEVICE_TYPE(SG1000_CART_SLOT, sg1000_cart_slot_device)
+DECLARE_DEVICE_TYPE(OMV_CART_SLOT, omv_cart_slot_device)
+DECLARE_DEVICE_TYPE(SC3000_CART_SLOT, sc3000_cart_slot_device)
+DECLARE_DEVICE_TYPE(SG1000MK3_CART_SLOT, sg1000mk3_cart_slot_device)
+DECLARE_DEVICE_TYPE(SMS_CART_SLOT, sms_cart_slot_device)
+DECLARE_DEVICE_TYPE(GAMEGEAR_CART_SLOT, gamegear_cart_slot_device)
+DECLARE_DEVICE_TYPE(SMS_CARD_SLOT, sms_card_slot_device)
+DECLARE_DEVICE_TYPE(SG1000_CARD_SLOT, sg1000_card_slot_device)
/***************************************************************************
DEVICE CONFIGURATION MACROS
@@ -185,63 +366,6 @@ public:
#define S8SLOT_ROM_REGION_TAG ":cart:rom"
-#define MCFG_SG1000_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_tag, SEGA8_CART_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- static_cast<sega8_cart_slot_device *>(device)->set_mandatory(true); \
- static_cast<sega8_cart_slot_device *>(device)->set_intf("sg1000_cart"); \
- static_cast<sega8_cart_slot_device *>(device)->set_ext("bin,sg");
-
-#define MCFG_OMV_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_tag, SEGA8_CART_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- static_cast<sega8_cart_slot_device *>(device)->set_mandatory(false); \
- static_cast<sega8_cart_slot_device *>(device)->set_intf("sg1000_cart"); \
- static_cast<sega8_cart_slot_device *>(device)->set_ext("bin,sg");
-
-#define MCFG_SC3000_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_tag, SEGA8_CART_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- static_cast<sega8_cart_slot_device *>(device)->set_mandatory(true); \
- static_cast<sega8_cart_slot_device *>(device)->set_intf("sg1000_cart"); \
- static_cast<sega8_cart_slot_device *>(device)->set_ext("bin,sg,sc");
-
-#define MCFG_SG1000MK3_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_tag, SEGA8_CART_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- static_cast<sega8_cart_slot_device *>(device)->set_mandatory(false); \
- static_cast<sega8_cart_slot_device *>(device)->set_intf("sms_cart,sg1000_cart"); \
- static_cast<sega8_cart_slot_device *>(device)->set_ext("bin,sms,sg");
-
-#define MCFG_SMS_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_tag, SEGA8_CART_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- static_cast<sega8_cart_slot_device *>(device)->set_mandatory(false); \
- static_cast<sega8_cart_slot_device *>(device)->set_intf("sms_cart"); \
- static_cast<sega8_cart_slot_device *>(device)->set_ext("bin,sms");
-
-#define MCFG_GG_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_tag, SEGA8_CART_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- static_cast<sega8_cart_slot_device *>(device)->set_mandatory(true); \
- static_cast<sega8_cart_slot_device *>(device)->set_intf("gamegear_cart"); \
- static_cast<sega8_cart_slot_device *>(device)->set_ext("bin,gg");
-
-
-
-#define MCFG_SMS_CARD_ADD(_tag,_slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_tag, SEGA8_CARD_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- static_cast<sega8_card_slot_device *>(device)->set_mandatory(false); \
- static_cast<sega8_card_slot_device *>(device)->set_intf("sms_card"); \
- static_cast<sega8_card_slot_device *>(device)->set_ext("bin");
-#define MCFG_SG1000_CARD_ADD(_tag,_slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_tag, SEGA8_CARD_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- static_cast<sega8_card_slot_device *>(device)->set_intf("sg1000_cart"); \
- static_cast<sega8_card_slot_device *>(device)->set_ext("bin,sg");
-
-
// slot interfaces
void sg1000_cart(device_slot_interface &device);
void sg1000mk3_cart(device_slot_interface &device);
diff --git a/src/devices/bus/sg1000_exp/fm_unit.cpp b/src/devices/bus/sg1000_exp/fm_unit.cpp
index ab759994f30..a7bdc4bcc5d 100644
--- a/src/devices/bus/sg1000_exp/fm_unit.cpp
+++ b/src/devices/bus/sg1000_exp/fm_unit.cpp
@@ -50,12 +50,13 @@ SMS version is not playing PSG sound on his Mark III with the FM unit.
DEFINE_DEVICE_TYPE(SEGA_FM_UNIT, sega_fm_unit_device, "sega_fm_unit", "SG-1000 FM Sound Unit")
-MACHINE_CONFIG_START(sega_fm_unit_device::device_add_mconfig)
- MCFG_DEVICE_ADD("ym2413", YM2413, XTAL(10'738'635)/3)
+void sega_fm_unit_device::device_add_mconfig(machine_config &config)
+{
+ YM2413(config, m_ym, XTAL(10'738'635)/3);
// if this output gain is changed, the gain set when unmute the output need
// to be changed too, probably along the gain set for SMSJ/SMSKRFM drivers.
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, ":mono", 1.00)
-MACHINE_CONFIG_END
+ m_ym->add_route(ALL_OUTPUTS, ":mono", 1.00);
+}
//**************************************************************************
@@ -122,10 +123,10 @@ WRITE8_MEMBER(sega_fm_unit_device::peripheral_w)
switch (offset)
{
case 0: // register port
- m_ym->write(space, 0, data & 0x3f);
+ m_ym->write(0, data & 0x3f);
break;
case 1: // data port
- m_ym->write(space, 1, data);
+ m_ym->write(1, data);
break;
case 2: // control port
case 3: // mirror
diff --git a/src/devices/bus/sg1000_exp/kblink.cpp b/src/devices/bus/sg1000_exp/kblink.cpp
new file mode 100644
index 00000000000..039c7f91196
--- /dev/null
+++ b/src/devices/bus/sg1000_exp/kblink.cpp
@@ -0,0 +1,179 @@
+// license:BSD-3-Clause
+// copyright-holders:Enik Land
+/**********************************************************************
+
+ Sega SK-1100 keyboard link cable emulation
+
+The cable is used only to link two Mark III's through keyboard, what
+is supported by the game F-16 Fighting Falcon for its 2 players mode.
+
+Keyboard link cable info (originally from http://homepage3.nifty.com/st-2/,
+but taken from http://www.smspower.org/Games/F16FightingFalcon-SMS-Talk):
+
+- Cable is 7-pin DIN.
+- Crossover scheme of the cable to connect pins
+
+ From To
+ 1 1
+ 2 6
+ 3 3
+ 4 5
+ 5 4
+ 6 2
+ 7 7
+
+Pinout of the printer port (from Charles MacDonald's sc3000h-20040729.txt
+document, with the function of pin 6 corrected to /FAULT).
+Numbering in counterclockwise/anticlockwise direction:
+
+ 1 : Unused (not connected to anything)
+ 2 : PPI PC5 (DATA output)
+ 3 : PPI PC7 (/FEED output)
+ 4 : PPI PB6 (BUSY input)
+ 5 : PPI PC6 (/RESET output)
+ 6 : PPI PB5 (/FAULT input)
+ 7 : GND
+
+**********************************************************************/
+
+#include "emu.h"
+#include "kblink.h"
+
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(SK1100_LINK_CABLE, sk1100_link_cable_device, "sk1100_link_cable", "SK-1100 Link Cable")
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// sk1100_link_cable_device - constructor
+//-------------------------------------------------
+
+sk1100_link_cable_device::sk1100_link_cable_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) :
+ device_t(mconfig, SK1100_LINK_CABLE, tag, owner, clock),
+ device_sk1100_printer_port_interface(mconfig, *this),
+ m_stream(*this, "stream"),
+ m_input_count(0),
+ m_input_index(0),
+ m_timer_poll(nullptr),
+ m_timer_send(nullptr),
+ m_timer_read(nullptr),
+ m_update_received_data(true),
+ m_data(0),
+ m_reset(0),
+ m_feed(0),
+ m_busy(0),
+ m_fault(0)
+{
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void sk1100_link_cable_device::device_start()
+{
+ m_timer_poll = timer_alloc(TIMER_POLL);
+ m_timer_send = timer_alloc(TIMER_SEND);
+ m_timer_read = timer_alloc(TIMER_READ);
+
+ /* register for state saving */
+ save_item(NAME(m_data));
+ save_item(NAME(m_reset));
+ save_item(NAME(m_feed));
+ save_item(NAME(m_busy));
+ save_item(NAME(m_fault));
+ save_item(NAME(m_update_received_data));
+ save_item(NAME(m_input_count));
+ save_item(NAME(m_input_index));
+ save_pointer(NAME(m_input_buffer), sizeof(m_input_buffer));
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void sk1100_link_cable_device::device_reset()
+{
+ queue();
+}
+
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void sk1100_link_cable_device::device_add_mconfig(machine_config &config)
+{
+ BITBANGER(config, m_stream, 0);
+}
+
+
+void sk1100_link_cable_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+{
+ switch (id)
+ {
+ case TIMER_POLL:
+ queue();
+ break;
+
+ case TIMER_SEND:
+ m_stream->output(u8(param));
+ break;
+
+ case TIMER_READ:
+ m_update_received_data = true;
+ break;
+
+ default:
+ break;
+ }
+}
+
+void sk1100_link_cable_device::queue()
+{
+ if (m_input_index == m_input_count)
+ {
+ m_input_index = 0;
+ m_input_count = m_stream->input(m_input_buffer, sizeof(m_input_buffer));
+ if (!m_input_count)
+ {
+ m_timer_poll->adjust(attotime::from_hz(XTAL(10'738'635)/3));
+ }
+ }
+}
+
+void sk1100_link_cable_device::set_data_read()
+{
+ // Check if a new byte from the input buffer was read for this timeslice.
+ if (m_update_received_data == true)
+ {
+ if (m_input_count != 0)
+ {
+ u8 byte = m_input_buffer[m_input_index++];
+ // there is no way to read what was sent from peer as feed bit.
+ m_fault = BIT(byte, 0); // sent from peer as data bit
+ m_busy = BIT(byte, 1); // sent from peer as reset bit
+ queue();
+ }
+ // Set to read next byte only after the end of this timeslice.
+ m_update_received_data = false;
+ m_timer_read->adjust(attotime::zero);
+ }
+}
+
+void sk1100_link_cable_device::set_data_transfer()
+{
+ u8 byte = (m_feed << 2) | (m_reset << 1) | m_data;
+ m_timer_send->adjust(attotime::zero, byte);
+}
+
+
diff --git a/src/devices/bus/sg1000_exp/kblink.h b/src/devices/bus/sg1000_exp/kblink.h
new file mode 100644
index 00000000000..65e5782f4a2
--- /dev/null
+++ b/src/devices/bus/sg1000_exp/kblink.h
@@ -0,0 +1,82 @@
+// license:BSD-3-Clause
+// copyright-holders:Enik Land
+/**********************************************************************
+
+ Sega SK-1100 keyboard link cable emulation
+
+The cable is used only to link two Mark III's through keyboard, what
+is supported by the game F-16 Fighting Falcon for its 2 players mode.
+
+**********************************************************************/
+
+#ifndef MAME_BUS_SG1000_EXP_SK1100_KBLINK_H
+#define MAME_BUS_SG1000_EXP_SK1100_KBLINK_H
+
+#pragma once
+
+
+#include "sk1100prn.h"
+#include "imagedev/bitbngr.h"
+
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> sk1100_link_cable_device
+
+class sk1100_link_cable_device : public device_t,
+ public device_sk1100_printer_port_interface
+{
+public:
+ // construction/destruction
+ sk1100_link_cable_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ // device_sk1100_link_cable_interface overrides
+
+ virtual DECLARE_WRITE_LINE_MEMBER( input_data ) override { m_data = state; set_data_transfer(); }
+ virtual DECLARE_WRITE_LINE_MEMBER( input_reset ) override { m_reset = state; set_data_transfer(); }
+ virtual DECLARE_WRITE_LINE_MEMBER( input_feed ) override { m_feed = state; set_data_transfer(); }
+
+ virtual DECLARE_READ_LINE_MEMBER( output_fault ) override { set_data_read(); return m_fault; }
+ virtual DECLARE_READ_LINE_MEMBER( output_busy ) override { set_data_read(); return m_busy; }
+
+private:
+ static constexpr int TIMER_POLL = 1;
+ static constexpr int TIMER_SEND = 2;
+ static constexpr int TIMER_READ = 3;
+
+ void queue();
+ void set_data_transfer();
+ void set_data_read();
+
+ required_device<bitbanger_device> m_stream;
+
+ u8 m_input_buffer[1000];
+ u32 m_input_count;
+ u32 m_input_index;
+ emu_timer *m_timer_poll;
+ emu_timer *m_timer_send;
+ emu_timer *m_timer_read;
+ bool m_update_received_data;
+ int m_data;
+ int m_reset;
+ int m_feed;
+ int m_busy;
+ int m_fault;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(SK1100_LINK_CABLE, sk1100_link_cable_device)
+
+
+#endif // MAME_BUS_SG1000_EXP_SK1100_KBLINK_H
diff --git a/src/devices/bus/sg1000_exp/sg1000exp.h b/src/devices/bus/sg1000_exp/sg1000exp.h
index 9a21c263407..c132b48d9dd 100644
--- a/src/devices/bus/sg1000_exp/sg1000exp.h
+++ b/src/devices/bus/sg1000_exp/sg1000exp.h
@@ -15,20 +15,6 @@
#pragma once
-
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_SG1000_EXPANSION_ADD(_tag, _slot_intf, _def_slot, _fixed) \
- MCFG_DEVICE_ADD(_tag, SG1000_EXPANSION_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _fixed)
-#define MCFG_SG1000_EXPANSION_MODIFY(_tag) \
- MCFG_DEVICE_MODIFY(_tag)
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -41,7 +27,17 @@ class sg1000_expansion_slot_device : public device_t, public device_slot_interfa
{
public:
// construction/destruction
- sg1000_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ sg1000_expansion_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt, bool const fixed)
+ : sg1000_expansion_slot_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(fixed);
+ }
+
+ sg1000_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
virtual ~sg1000_expansion_slot_device();
DECLARE_READ8_MEMBER(read);
diff --git a/src/devices/bus/sg1000_exp/sk1100.cpp b/src/devices/bus/sg1000_exp/sk1100.cpp
index e23fe34caed..1bb0a01adfd 100644
--- a/src/devices/bus/sg1000_exp/sk1100.cpp
+++ b/src/devices/bus/sg1000_exp/sk1100.cpp
@@ -12,7 +12,6 @@ Release data from the Sega Retro project:
TODO:
- SP-400 serial printer
-- Link between two Mark III's through keyboard, supported by F-16 Fighting Falcon
**********************************************************************/
@@ -110,23 +109,23 @@ static INPUT_PORTS_START( sk1100_keys )
PORT_START("PB0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
- PORT_BIT( 0x06, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0e, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("PB1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
- PORT_BIT( 0x06, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0e, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("PB2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0')
- PORT_BIT( 0x06, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0e, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("PB3")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=')
- PORT_BIT( 0x06, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0e, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("PB4")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH2) PORT_CHAR('^')
- PORT_BIT( 0x06, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0e, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("PB5")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("\xc2\xa5") PORT_CODE(KEYCODE_TILDE) PORT_CHAR(0x00a5)
@@ -154,24 +153,25 @@ ioport_constructor sega_sk1100_device::device_input_ports() const
}
-MACHINE_CONFIG_START(sega_sk1100_device::device_add_mconfig)
+void sega_sk1100_device::device_add_mconfig(machine_config &config)
+{
/* devices */
I8255(config, m_ppi);
m_ppi->in_pa_callback().set(FUNC(sega_sk1100_device::ppi_pa_r));
m_ppi->in_pb_callback().set(FUNC(sega_sk1100_device::ppi_pb_r));
m_ppi->out_pc_callback().set(FUNC(sega_sk1100_device::ppi_pc_w));
-// MCFG_PRINTER_ADD("sp400") /* serial printer */
+ CASSETTE(config, m_cassette);
+ m_cassette->set_formats(sc3000_cassette_formats);
+ m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED);
+ m_cassette->set_interface("sc3000_cass");
- MCFG_CASSETTE_ADD("cassette")
- MCFG_CASSETTE_FORMATS(sc3000_cassette_formats)
- MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED)
- MCFG_CASSETTE_INTERFACE("sc3000_cass")
+ SK1100_PRINTER_PORT(config, m_printer_port, sk1100_printer_port_devices, nullptr);
/* software lists */
- MCFG_SOFTWARE_LIST_ADD("sc3k_cart_list","sc3000_cart")
- MCFG_SOFTWARE_LIST_ADD("cass_list","sc3000_cass")
-MACHINE_CONFIG_END
+ SOFTWARE_LIST(config, "sc3k_cart_list").set_original("sc3000_cart");
+ SOFTWARE_LIST(config, "cass_list").set_original("sc3000_cass");
+}
//**************************************************************************
// LIVE DEVICE
@@ -186,6 +186,7 @@ sega_sk1100_device::sega_sk1100_device(const machine_config &mconfig, const char
device_sg1000_expansion_slot_interface(mconfig, *this),
m_cassette(*this, "cassette"),
m_ppi(*this, UPD9255_0_TAG),
+ m_printer_port(*this, "printer"),
m_pa(*this, {"PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7"}),
m_pb(*this, {"PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7"}),
m_keylatch(0)
@@ -262,7 +263,7 @@ READ8_MEMBER( sega_sk1100_device::ppi_pb_r )
PB2 Keyboard input
PB3 Keyboard input
PB4 /CONT input from cartridge terminal B-11
- PB5 FAULT input from printer
+ PB5 /FAULT input from printer
PB6 BUSY input from printer
PB7 Cassette tape input
*/
@@ -273,8 +274,9 @@ READ8_MEMBER( sega_sk1100_device::ppi_pb_r )
/* cartridge contact */
data |= 0x10;
- /* printer */
- data |= 0x60;
+ /* printer port */
+ data |= m_printer_port->fault_r() << 5;
+ data |= m_printer_port->busy_r() << 6;
/* tape input */
if (m_cassette->input() > +0.0) data |= 0x80;
@@ -301,7 +303,10 @@ WRITE8_MEMBER( sega_sk1100_device::ppi_pc_w )
m_keylatch = data & 0x07;
/* cassette */
- m_cassette->output( BIT(data, 4) ? +1.0 : -1.0);
+ m_cassette->output(BIT(data, 4) ? +1.0 : -1.0);
- /* TODO printer */
+ /* printer port */
+ m_printer_port->data_w(BIT(data, 5));
+ m_printer_port->reset_w(BIT(data, 6));
+ m_printer_port->feed_w(BIT(data, 7));
}
diff --git a/src/devices/bus/sg1000_exp/sk1100.h b/src/devices/bus/sg1000_exp/sk1100.h
index 4845fe09e1c..13ff5780f64 100644
--- a/src/devices/bus/sg1000_exp/sk1100.h
+++ b/src/devices/bus/sg1000_exp/sk1100.h
@@ -13,9 +13,9 @@
#include "sg1000exp.h"
+#include "sk1100prn.h"
#include "formats/sc3000_bit.h"
#include "imagedev/cassette.h"
-#include "imagedev/printer.h"
#include "machine/i8255.h"
@@ -55,6 +55,7 @@ private:
required_device<cassette_image_device> m_cassette;
required_device<i8255_device> m_ppi;
+ required_device<sk1100_printer_port_device> m_printer_port;
required_ioport_array<8> m_pa;
required_ioport_array<8> m_pb;
diff --git a/src/devices/bus/sg1000_exp/sk1100prn.cpp b/src/devices/bus/sg1000_exp/sk1100prn.cpp
new file mode 100644
index 00000000000..b902ce3992f
--- /dev/null
+++ b/src/devices/bus/sg1000_exp/sk1100prn.cpp
@@ -0,0 +1,125 @@
+// license:BSD-3-Clause
+// copyright-holders:Enik Land
+/**********************************************************************
+
+ Sega SK-1100 keyboard printer port emulation
+
+**********************************************************************/
+
+#include "emu.h"
+#include "sk1100prn.h"
+// slot devices
+//#include "sp400.h"
+#include "kblink.h"
+
+
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(SK1100_PRINTER_PORT, sk1100_printer_port_device, "sk1100_printer_port", "Sega SK-1100 Printer Port")
+
+
+
+//**************************************************************************
+// CARD INTERFACE
+//**************************************************************************
+
+//-------------------------------------------------
+// device_sk1100_printer_port_interface - constructor
+//-------------------------------------------------
+
+device_sk1100_printer_port_interface::device_sk1100_printer_port_interface(const machine_config &mconfig, device_t &device)
+ : device_slot_card_interface(mconfig,device)
+{
+}
+
+
+//-------------------------------------------------
+// ~device_sk1100_printer_port_interface - destructor
+//-------------------------------------------------
+
+device_sk1100_printer_port_interface::~device_sk1100_printer_port_interface()
+{
+}
+
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// sk1100_printer_port_device - constructor
+//-------------------------------------------------
+
+sk1100_printer_port_device::sk1100_printer_port_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) :
+ device_t(mconfig, SK1100_PRINTER_PORT, tag, owner, clock),
+ device_slot_interface(mconfig, *this),
+ m_device(nullptr)
+{
+}
+
+
+//-------------------------------------------------
+// sk1100_printer_port_device - destructor
+//-------------------------------------------------
+
+sk1100_printer_port_device::~sk1100_printer_port_device()
+{
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void sk1100_printer_port_device::device_start()
+{
+ m_device = dynamic_cast<device_sk1100_printer_port_interface *>(get_card_device());
+}
+
+WRITE_LINE_MEMBER(sk1100_printer_port_device::data_w)
+{
+ if (m_device)
+ m_device->input_data(state);
+}
+
+WRITE_LINE_MEMBER(sk1100_printer_port_device::reset_w)
+{
+ if (m_device)
+ m_device->input_reset(state);
+}
+
+WRITE_LINE_MEMBER(sk1100_printer_port_device::feed_w)
+{
+ if (m_device)
+ m_device->input_feed(state);
+}
+
+READ_LINE_MEMBER(sk1100_printer_port_device::fault_r)
+{
+ if (m_device)
+ return m_device->output_fault();
+ else
+ return 1;
+}
+
+READ_LINE_MEMBER(sk1100_printer_port_device::busy_r)
+{
+ if (m_device)
+ return m_device->output_busy();
+ else
+ return 1;
+}
+
+//-------------------------------------------------
+// SLOT_INTERFACE( sk1100_printer_port_devices )
+//-------------------------------------------------
+
+void sk1100_printer_port_devices(device_slot_interface &device)
+{
+ //device.option_add("sp400", SP400_PRINTER); /* serial printer */
+ device.option_add("kblink", SK1100_LINK_CABLE);
+}
diff --git a/src/devices/bus/sg1000_exp/sk1100prn.h b/src/devices/bus/sg1000_exp/sk1100prn.h
new file mode 100644
index 00000000000..b926f311f29
--- /dev/null
+++ b/src/devices/bus/sg1000_exp/sk1100prn.h
@@ -0,0 +1,88 @@
+// license:BSD-3-Clause
+// copyright-holders:Enik Land
+/**********************************************************************
+
+ Sega SK-1100 keyboard printer port emulation
+
+**********************************************************************
+
+
+**********************************************************************/
+
+#ifndef MAME_BUS_SG1000_EXP_SK1100_PRN_H
+#define MAME_BUS_SG1000_EXP_SK1100_PRN_H
+
+#pragma once
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> sk1100_printer_port_device
+
+class device_sk1100_printer_port_interface;
+
+class sk1100_printer_port_device : public device_t, public device_slot_interface
+{
+public:
+ // construction/destruction
+ template <typename T>
+ sk1100_printer_port_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : sk1100_printer_port_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ sk1100_printer_port_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
+ virtual ~sk1100_printer_port_device();
+
+ DECLARE_READ_LINE_MEMBER(fault_r);
+ DECLARE_READ_LINE_MEMBER(busy_r);
+
+ DECLARE_WRITE_LINE_MEMBER(data_w);
+ DECLARE_WRITE_LINE_MEMBER(reset_w);
+ DECLARE_WRITE_LINE_MEMBER(feed_w);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+
+private:
+ device_sk1100_printer_port_interface *m_device;
+};
+
+
+// ======================> device_sk1100_printer_port_interface
+
+// class representing interface-specific live sk1100_printer_port peripheral
+class device_sk1100_printer_port_interface : public device_slot_card_interface
+{
+ friend class sk1100_printer_port_device;
+public:
+ // construction/destruction
+ virtual ~device_sk1100_printer_port_interface();
+
+protected:
+ device_sk1100_printer_port_interface(const machine_config &mconfig, device_t &device);
+
+ virtual DECLARE_WRITE_LINE_MEMBER( input_data ) { }
+ virtual DECLARE_WRITE_LINE_MEMBER( input_reset ) { }
+ virtual DECLARE_WRITE_LINE_MEMBER( input_feed ) { }
+
+ virtual DECLARE_READ_LINE_MEMBER( output_fault ) { return 1; }
+ virtual DECLARE_READ_LINE_MEMBER( output_busy ) { return 1; }
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(SK1100_PRINTER_PORT, sk1100_printer_port_device)
+
+
+void sk1100_printer_port_devices(device_slot_interface &device);
+
+
+#endif // MAME_BUS_SG1000_EXP_SK1100_PRN_H
diff --git a/src/devices/bus/sms_ctrl/multitap.cpp b/src/devices/bus/sms_ctrl/multitap.cpp
index 56e7144cbd5..88dbe01acf4 100644
--- a/src/devices/bus/sms_ctrl/multitap.cpp
+++ b/src/devices/bus/sms_ctrl/multitap.cpp
@@ -129,15 +129,16 @@ READ32_MEMBER( sms_multitap_device::pixel_r )
}
-MACHINE_CONFIG_START(sms_multitap_device::device_add_mconfig)
+void sms_multitap_device::device_add_mconfig(machine_config &config)
+{
// Controller subports setup, without the TH callback declaration,
// because the circuit scheme shows TH of subports without connection.
- MCFG_SMS_CONTROL_PORT_ADD("ctrl1", sms_control_port_devices, "joypad")
- MCFG_SMS_CONTROL_PORT_PIXEL_HANDLER(READ32(*this, sms_multitap_device, pixel_r))
- MCFG_SMS_CONTROL_PORT_ADD("ctrl2", sms_control_port_devices, "joypad")
- MCFG_SMS_CONTROL_PORT_PIXEL_HANDLER(READ32(*this, sms_multitap_device, pixel_r))
- MCFG_SMS_CONTROL_PORT_ADD("ctrl3", sms_control_port_devices, "joypad")
- MCFG_SMS_CONTROL_PORT_PIXEL_HANDLER(READ32(*this, sms_multitap_device, pixel_r))
- MCFG_SMS_CONTROL_PORT_ADD("ctrl4", sms_control_port_devices, "joypad")
- MCFG_SMS_CONTROL_PORT_PIXEL_HANDLER(READ32(*this, sms_multitap_device, pixel_r))
-MACHINE_CONFIG_END
+ SMS_CONTROL_PORT(config, m_subctrl1_port, sms_control_port_devices, "joypad");
+ m_subctrl1_port->pixel_handler().set(FUNC(sms_multitap_device::pixel_r));
+ SMS_CONTROL_PORT(config, m_subctrl2_port, sms_control_port_devices, "joypad");
+ m_subctrl2_port->pixel_handler().set(FUNC(sms_multitap_device::pixel_r));
+ SMS_CONTROL_PORT(config, m_subctrl3_port, sms_control_port_devices, "joypad");
+ m_subctrl3_port->pixel_handler().set(FUNC(sms_multitap_device::pixel_r));
+ SMS_CONTROL_PORT(config, m_subctrl4_port, sms_control_port_devices, "joypad");
+ m_subctrl4_port->pixel_handler().set(FUNC(sms_multitap_device::pixel_r));
+}
diff --git a/src/devices/bus/sms_ctrl/rfu.cpp b/src/devices/bus/sms_ctrl/rfu.cpp
index 7b51da5983a..36a081abcd1 100644
--- a/src/devices/bus/sms_ctrl/rfu.cpp
+++ b/src/devices/bus/sms_ctrl/rfu.cpp
@@ -138,8 +138,9 @@ READ32_MEMBER( sms_rapid_fire_device::pixel_r )
}
-MACHINE_CONFIG_START(sms_rapid_fire_device::device_add_mconfig)
- MCFG_SMS_CONTROL_PORT_ADD("ctrl", sms_control_port_devices, "joypad")
- MCFG_SMS_CONTROL_PORT_TH_INPUT_HANDLER(WRITELINE(*this, sms_rapid_fire_device, th_pin_w))
- MCFG_SMS_CONTROL_PORT_PIXEL_HANDLER(READ32(*this, sms_rapid_fire_device, pixel_r))
-MACHINE_CONFIG_END
+void sms_rapid_fire_device::device_add_mconfig(machine_config &config)
+{
+ SMS_CONTROL_PORT(config, m_subctrl_port, sms_control_port_devices, "joypad");
+ m_subctrl_port->th_input_handler().set(FUNC(sms_rapid_fire_device::th_pin_w));
+ m_subctrl_port->pixel_handler().set(FUNC(sms_rapid_fire_device::pixel_r));
+}
diff --git a/src/devices/bus/sms_ctrl/smsctrl.h b/src/devices/bus/sms_ctrl/smsctrl.h
index d116f2c769d..3d11b4e60bd 100644
--- a/src/devices/bus/sms_ctrl/smsctrl.h
+++ b/src/devices/bus/sms_ctrl/smsctrl.h
@@ -16,26 +16,6 @@
//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_SMS_CONTROL_PORT_ADD(_tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, SMS_CONTROL_PORT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-#define MCFG_SMS_CONTROL_PORT_MODIFY(_tag) \
- MCFG_DEVICE_MODIFY(_tag)
-
-
-#define MCFG_SMS_CONTROL_PORT_TH_INPUT_HANDLER(_devcb) \
- downcast<sms_control_port_device &>(*device).set_th_input_handler(DEVCB_##_devcb);
-
-
-#define MCFG_SMS_CONTROL_PORT_PIXEL_HANDLER(_devcb) \
- downcast<sms_control_port_device &>(*device).set_pixel_handler(DEVCB_##_devcb);
-
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -48,13 +28,23 @@ class sms_control_port_device : public device_t,
{
public:
// construction/destruction
+ template <typename T>
+ sms_control_port_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : sms_control_port_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
sms_control_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~sms_control_port_device();
// static configuration helpers
- template <class Object> devcb_base &set_th_input_handler(Object &&cb) { return m_th_pin_handler.set_callback(std::forward<Object>(cb)); }
+ auto th_input_handler() { return m_th_pin_handler.bind(); }
- template <class Object> devcb_base &set_pixel_handler(Object &&cb) { return m_pixel_handler.set_callback(std::forward<Object>(cb)); }
+ auto pixel_handler() { return m_pixel_handler.bind(); }
// Physical DE-9 connector interface
diff --git a/src/devices/bus/sms_exp/gender.cpp b/src/devices/bus/sms_exp/gender.cpp
index b6279fb8dff..227aae8a1da 100644
--- a/src/devices/bus/sms_exp/gender.cpp
+++ b/src/devices/bus/sms_exp/gender.cpp
@@ -95,6 +95,7 @@ WRITE8_MEMBER(sms_gender_adapter_device::write_ram)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(sms_gender_adapter_device::device_add_mconfig)
- MCFG_SMS_CARTRIDGE_ADD("subslot", sms_cart, nullptr)
-MACHINE_CONFIG_END
+void sms_gender_adapter_device::device_add_mconfig(machine_config &config)
+{
+ SMS_CART_SLOT(config, "subslot", sms_cart, nullptr);
+}
diff --git a/src/devices/bus/sms_exp/smsexp.h b/src/devices/bus/sms_exp/smsexp.h
index b53027af51e..6933b9a9df8 100644
--- a/src/devices/bus/sms_exp/smsexp.h
+++ b/src/devices/bus/sms_exp/smsexp.h
@@ -15,18 +15,6 @@
#pragma once
-
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_SMS_EXPANSION_ADD(_tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, SMS_EXPANSION_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -61,7 +49,16 @@ class sms_expansion_slot_device : public device_t,
{
public:
// construction/destruction
- sms_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ sms_expansion_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : sms_expansion_slot_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+ sms_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
virtual ~sms_expansion_slot_device();
// reading and writing
diff --git a/src/devices/bus/snes/bsx.cpp b/src/devices/bus/snes/bsx.cpp
index 1f6efc1af6c..6aacaa3ed2c 100644
--- a/src/devices/bus/snes/bsx.cpp
+++ b/src/devices/bus/snes/bsx.cpp
@@ -283,13 +283,13 @@ void sns_rom_bsx_device::access_update()
}
}
-READ8_MEMBER(sns_rom_bsx_device::read_l)
+uint8_t sns_rom_bsx_device::read_l(offs_t offset)
{
if (offset < 0x200000 && access_00_1f)
{
// 0x00-0x1f:0x8000-0xffff -> CART
if (m_slot->m_cart && m_slot->m_cart->get_rom_size())
- return m_slot->m_cart->read_l(space, offset);
+ return m_slot->m_cart->read_l(offset);
}
if (offset >= 0x200000 && offset < 0x400000)
{
@@ -334,13 +334,13 @@ READ8_MEMBER(sns_rom_bsx_device::read_l)
}
-READ8_MEMBER(sns_rom_bsx_device::read_h)
+uint8_t sns_rom_bsx_device::read_h(offs_t offset)
{
if (offset < 0x200000 && access_80_9f)
{
// 0x80-0x9f:0x8000-0xffff -> CART
if (m_slot->m_cart && m_slot->m_cart->get_rom_size())
- return m_slot->m_cart->read_l(space, offset);
+ return m_slot->m_cart->read_l(offset);
}
// if not in any of the cases above...
@@ -358,7 +358,7 @@ READ8_MEMBER(sns_rom_bsx_device::read_h)
//return 0x00;
}
-WRITE8_MEMBER(sns_rom_bsx_device::write_l)
+void sns_rom_bsx_device::write_l(offs_t offset, uint8_t data)
{
if (offset < 0x200000 && access_00_1f)
{
@@ -400,7 +400,7 @@ WRITE8_MEMBER(sns_rom_bsx_device::write_l)
}
-WRITE8_MEMBER(sns_rom_bsx_device::write_h)
+void sns_rom_bsx_device::write_h(offs_t offset, uint8_t data)
{
if (offset < 0x200000 && access_80_9f)
{
@@ -416,7 +416,7 @@ WRITE8_MEMBER(sns_rom_bsx_device::write_h)
}
-READ8_MEMBER(sns_rom_bsx_device::chip_read)
+uint8_t sns_rom_bsx_device::chip_read(offs_t offset)
{
if ((offset & 0xffff) >= 0x2188 && (offset & 0xffff) < 0x21a0)
return m_base_unit->read(offset & 0xffff);
@@ -435,7 +435,7 @@ READ8_MEMBER(sns_rom_bsx_device::chip_read)
return 0x00;
}
-WRITE8_MEMBER(sns_rom_bsx_device::chip_write)
+void sns_rom_bsx_device::chip_write(offs_t offset, uint8_t data)
{
if ((offset & 0xffff) >= 0x2188 && (offset & 0xffff) < 0x21a0)
m_base_unit->write(offset & 0xffff, data);
@@ -457,7 +457,7 @@ WRITE8_MEMBER(sns_rom_bsx_device::chip_write)
// LoROM cart w/BS-X slot
-READ8_MEMBER(sns_rom_bsxlo_device::read_l)
+uint8_t sns_rom_bsxlo_device::read_l(offs_t offset)
{
if (offset < 0x400000)
{
@@ -469,7 +469,7 @@ READ8_MEMBER(sns_rom_bsxlo_device::read_l)
return 0x00;
}
-READ8_MEMBER(sns_rom_bsxlo_device::read_h)
+uint8_t sns_rom_bsxlo_device::read_h(offs_t offset)
{
if (offset < 0x400000)
{
@@ -481,7 +481,7 @@ READ8_MEMBER(sns_rom_bsxlo_device::read_h)
else if (offset < 0x700000)
{
if (m_slot->m_cart && m_slot->m_cart->get_rom_size())
- return m_slot->m_cart->read_h(space, offset);
+ return m_slot->m_cart->read_h(offset);
}
// RAM [70-7f]
return 0x00;
@@ -490,12 +490,12 @@ READ8_MEMBER(sns_rom_bsxlo_device::read_h)
// HiROM cart w/BS-X slot
-READ8_MEMBER(sns_rom_bsxhi_device::read_l)
+uint8_t sns_rom_bsxhi_device::read_l(offs_t offset)
{
- return read_h(space, offset);
+ return read_h(offset);
}
-READ8_MEMBER(sns_rom_bsxhi_device::read_h)
+uint8_t sns_rom_bsxhi_device::read_h(offs_t offset)
{
if (offset < 0x200000 && (offset & 0xffff) >= 0x8000)
{
@@ -505,7 +505,7 @@ READ8_MEMBER(sns_rom_bsxhi_device::read_h)
if (offset >= 0x200000 && offset < 0x400000)
{
if (m_slot->m_cart && m_slot->m_cart->get_rom_size() && (offset & 0xffff) >= 0x8000)
- return m_slot->m_cart->read_h(space, offset);
+ return m_slot->m_cart->read_h(offset);
}
if (offset >= 0x400000 && offset < 0x600000)
{
@@ -516,7 +516,7 @@ READ8_MEMBER(sns_rom_bsxhi_device::read_h)
if (offset >= 0x600000)
{
if (m_slot->m_cart && m_slot->m_cart->get_rom_size())
- return m_slot->m_cart->read_h(space, offset);
+ return m_slot->m_cart->read_h(offset);
}
return 0xff;
}
@@ -530,18 +530,18 @@ READ8_MEMBER(sns_rom_bsxhi_device::read_h)
// Hence, we use low read handler for ROM access in the 0x8000-0xffff range (i.e. mempack mapped as LoROM) and
// hi read handler for ROM access in the 0x0000-0xffff range (i.e. mempack mapped as HiROM)...
-READ8_MEMBER(sns_rom_bsmempak_device::read_l)
+uint8_t sns_rom_bsmempak_device::read_l(offs_t offset)
{
int bank = offset / 0x10000;
return m_rom[rom_bank_map[bank] * 0x8000 + (offset & 0x7fff)];
}
-READ8_MEMBER(sns_rom_bsmempak_device::read_h)
+uint8_t sns_rom_bsmempak_device::read_h(offs_t offset)
{
int bank = offset / 0x8000;
return m_rom[rom_bank_map[bank] * 0x8000 + (offset & 0x7fff)];
}
-WRITE8_MEMBER(sns_rom_bsmempak_device::write_l)
+void sns_rom_bsmempak_device::write_l(offs_t offset, uint8_t data)
{
}
diff --git a/src/devices/bus/snes/bsx.h b/src/devices/bus/snes/bsx.h
index 24ce7b9f691..e144ff118ff 100644
--- a/src/devices/bus/snes/bsx.h
+++ b/src/devices/bus/snes/bsx.h
@@ -18,12 +18,12 @@ public:
sns_rom_bsx_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// additional reading and writing
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
- virtual DECLARE_READ8_MEMBER(chip_read) override;
- virtual DECLARE_WRITE8_MEMBER(chip_write) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
+ virtual uint8_t chip_read(offs_t offset) override;
+ virtual void chip_write(offs_t offset, uint8_t data) override;
protected:
class bsx_base
@@ -84,8 +84,8 @@ public:
sns_rom_bsxlo_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// additional reading and writing
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
protected:
// device-level overrides
@@ -106,8 +106,8 @@ public:
sns_rom_bsxhi_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// additional reading and writing
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
protected:
// device-level overrides
@@ -129,12 +129,12 @@ public:
sns_rom_bsmempak_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// additional reading and writing
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
-// virtual DECLARE_WRITE8_MEMBER(write_h);
-// virtual DECLARE_READ8_MEMBER(chip_read);
-// virtual DECLARE_WRITE8_MEMBER(chip_write);
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+// virtual void write_h(offs_t offset, uint8_t data) override;
+// virtual uint8_t chip_read(offs_t offset) override;
+// virtual void chip_write(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
diff --git a/src/devices/bus/snes/event.cpp b/src/devices/bus/snes/event.cpp
index 7131807edab..3591a2a679a 100644
--- a/src/devices/bus/snes/event.cpp
+++ b/src/devices/bus/snes/event.cpp
@@ -60,7 +60,7 @@ void sns_pfest94_device::device_reset()
mapper specific handlers
-------------------------------------------------*/
-READ8_MEMBER(sns_pfest94_device::read_l)
+uint8_t sns_pfest94_device::read_l(offs_t offset)
{
// menu
if ((offset & 0x208000) == 0x208000)
@@ -77,7 +77,7 @@ READ8_MEMBER(sns_pfest94_device::read_l)
}
}
-READ8_MEMBER(sns_pfest94_device::read_h)
+uint8_t sns_pfest94_device::read_h(offs_t offset)
{
// menu
if ((offset & 0x208000) == 0x208000)
@@ -103,7 +103,7 @@ READ8_MEMBER(sns_pfest94_device::read_h)
// these are used for two diff effects: both to select game from menu and to access the DSP when running SMK!
-READ8_MEMBER( sns_pfest94_device::chip_read )
+uint8_t sns_pfest94_device::chip_read(offs_t offset)
{
if (offset & 0x8000)
{
@@ -119,7 +119,7 @@ READ8_MEMBER( sns_pfest94_device::chip_read )
}
-WRITE8_MEMBER( sns_pfest94_device::chip_write )
+void sns_pfest94_device::chip_write(offs_t offset, uint8_t data)
{
if (offset & 0x8000)
{
@@ -186,12 +186,12 @@ void sns_pfest94_device::speedup_addon_bios_access()
// DSP dump contains prg at offset 0 and data at offset 0x2000
-READ32_MEMBER( sns_pfest94_device::necdsp_prg_r )
+uint32_t sns_pfest94_device::necdsp_prg_r(offs_t offset)
{
return get_prg(&m_bios[0], offset);
}
-READ16_MEMBER( sns_pfest94_device::necdsp_data_r )
+uint16_t sns_pfest94_device::necdsp_data_r(offs_t offset)
{
return get_data(&m_bios[0], offset + 0x2000/2);
}
@@ -221,11 +221,12 @@ void sns_pfest94_device::dsp_data_map_lorom(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(sns_pfest94_device::device_add_mconfig)
- MCFG_DEVICE_ADD("dsp", UPD7725, 8000000)
- MCFG_DEVICE_PROGRAM_MAP(dsp_prg_map_lorom)
- MCFG_DEVICE_DATA_MAP(dsp_data_map_lorom)
-MACHINE_CONFIG_END
+void sns_pfest94_device::device_add_mconfig(machine_config &config)
+{
+ UPD7725(config, m_upd7725, 8000000);
+ m_upd7725->set_addrmap(AS_PROGRAM, &sns_pfest94_device::dsp_prg_map_lorom);
+ m_upd7725->set_addrmap(AS_DATA, &sns_pfest94_device::dsp_data_map_lorom);
+}
//-------------------------------------------------
// Dipswitch
diff --git a/src/devices/bus/snes/event.h b/src/devices/bus/snes/event.h
index 812022b3799..dedd18f921a 100644
--- a/src/devices/bus/snes/event.h
+++ b/src/devices/bus/snes/event.h
@@ -32,13 +32,13 @@ protected:
virtual void speedup_addon_bios_access() override;
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_READ8_MEMBER(chip_read) override;
- virtual DECLARE_WRITE8_MEMBER(chip_write) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual uint8_t chip_read(offs_t offset) override;
+ virtual void chip_write(offs_t offset, uint8_t data) override;
- virtual DECLARE_READ32_MEMBER(necdsp_prg_r);
- virtual DECLARE_READ16_MEMBER(necdsp_data_r);
+ virtual uint32_t necdsp_prg_r(offs_t offset);
+ virtual uint16_t necdsp_data_r(offs_t offset);
private:
required_device<upd7725_device> m_upd7725;
diff --git a/src/devices/bus/snes/rom.cpp b/src/devices/bus/snes/rom.cpp
index bae27f21fad..3308808a008 100644
--- a/src/devices/bus/snes/rom.cpp
+++ b/src/devices/bus/snes/rom.cpp
@@ -174,12 +174,12 @@ void sns_rom_20col_device::device_start()
mapper specific handlers
-------------------------------------------------*/
-READ8_MEMBER(sns_rom_device::read_l)
+uint8_t sns_rom_device::read_l(offs_t offset)
{
- return read_h(space, offset);
+ return read_h(offset);
}
-READ8_MEMBER(sns_rom_device::read_h)
+uint8_t sns_rom_device::read_h(offs_t offset)
{
int bank = offset / 0x10000;
return m_rom[rom_bank_map[bank] * 0x8000 + (offset & 0x7fff)];
@@ -200,7 +200,7 @@ READ8_MEMBER(sns_rom_device::read_h)
***********************************************************************************************************/
-READ8_MEMBER( sns_rom_obc1_device::chip_read )
+uint8_t sns_rom_obc1_device::chip_read(offs_t offset)
{
uint16_t address = offset & 0x1fff;
uint8_t value;
@@ -236,7 +236,7 @@ READ8_MEMBER( sns_rom_obc1_device::chip_read )
}
-WRITE8_MEMBER( sns_rom_obc1_device::chip_write )
+void sns_rom_obc1_device::chip_write(offs_t offset, uint8_t data)
{
uint16_t address = offset & 0x1fff;
uint8_t temp;
@@ -289,12 +289,12 @@ WRITE8_MEMBER( sns_rom_obc1_device::chip_write )
// Pokemon (and many others): a byte is written and a permutation of its bits must be returned.
// Address range for read/write depends on the game (check snes.xml)
-READ8_MEMBER( sns_rom_pokemon_device::chip_read )
+uint8_t sns_rom_pokemon_device::chip_read(offs_t offset)
{
return bitswap<8>(m_latch,0,6,7,1,2,3,4,5);
}
-WRITE8_MEMBER( sns_rom_pokemon_device::chip_write )
+void sns_rom_pokemon_device::chip_write(offs_t offset, uint8_t data)
{
m_latch = data;
}
@@ -340,7 +340,7 @@ void sns_rom_tekken2_device::update_prot(uint32_t offset)
}
}
-READ8_MEMBER( sns_rom_tekken2_device::chip_read )
+uint8_t sns_rom_tekken2_device::chip_read(offs_t offset)
{
update_prot(offset);
@@ -362,10 +362,10 @@ READ8_MEMBER( sns_rom_tekken2_device::chip_read )
}
}
- return 0xff; // should be open_bus
+ return read_open_bus();
}
-WRITE8_MEMBER( sns_rom_tekken2_device::chip_write )
+void sns_rom_tekken2_device::chip_write(offs_t offset, uint8_t data)
{
update_prot(offset);
}
@@ -373,7 +373,7 @@ WRITE8_MEMBER( sns_rom_tekken2_device::chip_write )
// Soul Blade: Adresses $xxx0-$xxx3 in banks $80-$bf always read $55, $0f, $aa, $f0.
// Banks $c0-$ff return open bus.
-READ8_MEMBER( sns_rom_soulblad_device::chip_read )
+uint8_t sns_rom_soulblad_device::chip_read(offs_t offset)
{
uint8_t value;
offset &= 3;
@@ -401,36 +401,36 @@ READ8_MEMBER( sns_rom_soulblad_device::chip_read )
// The actual banks depends on the last 8bits of the address accessed.
// Type 1: bits0-4 of the address are used as base bank (256KB chunks)
-READ8_MEMBER(sns_rom_mcpirate1_device::read_l)
+uint8_t sns_rom_mcpirate1_device::read_l(offs_t offset)
{
- return read_h(space, offset);
+ return read_h(offset);
}
-READ8_MEMBER(sns_rom_mcpirate1_device::read_h)
+uint8_t sns_rom_mcpirate1_device::read_h(offs_t offset)
{
int bank = (offset / 0x10000) + (m_base_bank * 8);
return m_rom[rom_bank_map[bank] * 0x8000 + (offset & 0x7fff)];
}
-WRITE8_MEMBER( sns_rom_mcpirate1_device::chip_write )
+void sns_rom_mcpirate1_device::chip_write(offs_t offset, uint8_t data)
{
m_base_bank = offset & 0x1f;
// printf("offset %X data %X bank %X\n", offset, data, m_base_bank);
}
// Type 2: bits0-3 & bit5 of the address are used as base bank (256KB chunks)
-READ8_MEMBER(sns_rom_mcpirate2_device::read_l)
+uint8_t sns_rom_mcpirate2_device::read_l(offs_t offset)
{
- return read_h(space, offset);
+ return read_h(offset);
}
-READ8_MEMBER(sns_rom_mcpirate2_device::read_h)
+uint8_t sns_rom_mcpirate2_device::read_h(offs_t offset)
{
int bank = (offset / 0x10000) + (m_base_bank * 8);
return m_rom[rom_bank_map[bank] * 0x8000 + (offset & 0x7fff)];
}
-WRITE8_MEMBER( sns_rom_mcpirate2_device::chip_write )
+void sns_rom_mcpirate2_device::chip_write(offs_t offset, uint8_t data)
{
m_base_bank = (offset & 0x0f) | ((offset & 0x20) >> 1);
// printf("offset %X data %X bank %X\n", offset, data, m_base_bank);
@@ -443,19 +443,19 @@ WRITE8_MEMBER( sns_rom_mcpirate2_device::chip_write )
// accesses in [01-3f] don't go to the only 32KB bank)
// - bit 5 is always 0
// it's worth to notice that for FC games size of bank is twice the size of original FC PRG
-READ8_MEMBER(sns_rom_20col_device::read_l)
+uint8_t sns_rom_20col_device::read_l(offs_t offset)
{
- return read_h(space, offset);
+ return read_h(offset);
}
-READ8_MEMBER(sns_rom_20col_device::read_h)
+uint8_t sns_rom_20col_device::read_h(offs_t offset)
{
int prg32k = (!BIT(m_base_bank, 6) && BIT(m_base_bank, 7));
int bank = prg32k ? 0 : (offset / 0x10000);
return m_rom[((m_base_bank & 0x1f) + bank) * 0x8000 + (offset & 0x7fff)];
}
-WRITE8_MEMBER( sns_rom_20col_device::chip_write )
+void sns_rom_20col_device::chip_write(offs_t offset, uint8_t data)
{
// [#] game - written bank value
// [01] spartan x - c6
@@ -486,23 +486,23 @@ WRITE8_MEMBER( sns_rom_20col_device::chip_write )
// Work in progress (probably very wrong)
-READ8_MEMBER( sns_rom_banana_device::chip_read )
+uint8_t sns_rom_banana_device::chip_read(offs_t offset)
{
return bitswap<8>(m_latch[0xf],0,6,7,1,2,3,4,5);
}
-WRITE8_MEMBER( sns_rom_banana_device::chip_write )
+void sns_rom_banana_device::chip_write(offs_t offset, uint8_t data)
{
// printf("write addr %X data %X\n", offset, data);
m_latch[0xf] = data;
}
-READ8_MEMBER( sns_rom_bugs_device::chip_read )
+uint8_t sns_rom_bugs_device::chip_read(offs_t offset)
{
return bitswap<8>(m_latch[offset & 0xff],0,6,7,1,2,3,4,5);
}
-WRITE8_MEMBER( sns_rom_bugs_device::chip_write )
+void sns_rom_bugs_device::chip_write(offs_t offset, uint8_t data)
{
m_latch[offset & 0xff] = data;
}
diff --git a/src/devices/bus/snes/rom.h b/src/devices/bus/snes/rom.h
index 9e95e4b8e00..d2a09b774c1 100644
--- a/src/devices/bus/snes/rom.h
+++ b/src/devices/bus/snes/rom.h
@@ -17,8 +17,8 @@ public:
sns_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
protected:
sns_rom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@@ -36,8 +36,8 @@ public:
sns_rom_obc1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// additional reading and writing
- virtual DECLARE_READ8_MEMBER(chip_read) override;
- virtual DECLARE_WRITE8_MEMBER(chip_write) override;
+ virtual uint8_t chip_read(offs_t offset) override;
+ virtual void chip_write(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
@@ -60,9 +60,9 @@ public:
// construction/destruction
sns_rom_pokemon_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- // reading and writing
- virtual DECLARE_READ8_MEMBER(chip_read) override; // protection device
- virtual DECLARE_WRITE8_MEMBER(chip_write) override; // protection device
+ // reading and writing (protection device)
+ virtual uint8_t chip_read(offs_t offset) override;
+ virtual void chip_write(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
@@ -80,9 +80,9 @@ public:
// construction/destruction
sns_rom_tekken2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- // reading and writing
- virtual DECLARE_READ8_MEMBER(chip_read) override; // protection device
- virtual DECLARE_WRITE8_MEMBER(chip_write) override; // protection device
+ // reading and writing (protection device)
+ virtual uint8_t chip_read(offs_t offset) override;
+ virtual void chip_write(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
@@ -104,8 +104,8 @@ public:
// construction/destruction
sns_rom_soulblad_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- // reading and writing
- virtual DECLARE_READ8_MEMBER(chip_read) override; // protection device
+ // reading and writing (protection device)
+ virtual uint8_t chip_read(offs_t offset) override;
};
// ======================> sns_rom_mcpirate1_device
@@ -117,9 +117,9 @@ public:
sns_rom_mcpirate1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(chip_write) override; // bankswitch device
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void chip_write(offs_t offset, uint8_t data) override; // bankswitch device
protected:
// device-level overrides
@@ -138,9 +138,9 @@ public:
sns_rom_mcpirate2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(chip_write) override; // bankswitch device
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void chip_write(offs_t offset, uint8_t data) override; // bankswitch device
protected:
// device-level overrides
@@ -159,9 +159,9 @@ public:
sns_rom_20col_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(chip_write) override; // bankswitch device
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void chip_write(offs_t offset, uint8_t data) override; // bankswitch device
protected:
// device-level overrides
@@ -178,9 +178,9 @@ public:
// construction/destruction
sns_rom_banana_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- // reading and writing
- virtual DECLARE_READ8_MEMBER(chip_read) override; // protection device
- virtual DECLARE_WRITE8_MEMBER(chip_write) override; // protection device
+ // reading and writing (protection device)
+ virtual uint8_t chip_read(offs_t offset) override;
+ virtual void chip_write(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
@@ -198,9 +198,9 @@ public:
// construction/destruction
sns_rom_bugs_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- // reading and writing
- virtual DECLARE_READ8_MEMBER(chip_read) override; // protection device
- virtual DECLARE_WRITE8_MEMBER(chip_write) override; // protection device
+ // reading and writing (protection device)
+ virtual uint8_t chip_read(offs_t offset) override;
+ virtual void chip_write(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
diff --git a/src/devices/bus/snes/rom21.cpp b/src/devices/bus/snes/rom21.cpp
index 91c61394688..8cc1f6fddb6 100644
--- a/src/devices/bus/snes/rom21.cpp
+++ b/src/devices/bus/snes/rom21.cpp
@@ -66,14 +66,14 @@ void sns_rom21_srtc_device::device_reset()
// low and hi reads are not the same! (different ROM banks are accessed)
-READ8_MEMBER(sns_rom21_device::read_l)
+uint8_t sns_rom21_device::read_l(offs_t offset)
{
// here ROM banks from 128 to 255, mirrored twice
int bank = (offset & 0x3fffff) / 0x8000;
return m_rom[rom_bank_map[bank + 0x80] * 0x8000 + (offset & 0x7fff)];
}
-READ8_MEMBER(sns_rom21_device::read_h)
+uint8_t sns_rom21_device::read_h(offs_t offset)
{
// here ROM banks from 0 to 127, mirrored twice
int bank = (offset & 0x3fffff) / 0x8000;
@@ -173,7 +173,7 @@ uint8_t sns_rom21_srtc_device::srtc_weekday( uint32_t year, uint32_t month, uint
// this gets called only for accesses at 0x2800,
// because for 0x2801 open bus gets returned...
-READ8_MEMBER(sns_rom21_srtc_device::chip_read)
+uint8_t sns_rom21_srtc_device::chip_read(offs_t offset)
{
if (m_mode != RTCM_Read)
return 0x00;
@@ -194,7 +194,7 @@ READ8_MEMBER(sns_rom21_srtc_device::chip_read)
}
// this gets called only for accesses at 0x2801
-WRITE8_MEMBER(sns_rom21_srtc_device::chip_write)
+void sns_rom21_srtc_device::chip_write(offs_t offset, uint8_t data)
{
data &= 0x0f; // Only the low four bits are used
diff --git a/src/devices/bus/snes/rom21.h b/src/devices/bus/snes/rom21.h
index 545e2457ef3..fb9b0b6c65a 100644
--- a/src/devices/bus/snes/rom21.h
+++ b/src/devices/bus/snes/rom21.h
@@ -18,8 +18,8 @@ public:
sns_rom21_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
protected:
sns_rom21_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@@ -38,8 +38,8 @@ public:
sns_rom21_srtc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(chip_read) override;
- virtual DECLARE_WRITE8_MEMBER(chip_write) override;
+ virtual uint8_t chip_read(offs_t offset) override;
+ virtual void chip_write(offs_t offset, uint8_t data) override;
protected:
// S-RTC specific variables
diff --git a/src/devices/bus/snes/sa1.cpp b/src/devices/bus/snes/sa1.cpp
index aaf7024ce5f..487f176fd86 100644
--- a/src/devices/bus/snes/sa1.cpp
+++ b/src/devices/bus/snes/sa1.cpp
@@ -204,7 +204,7 @@ void sns_sa1_device::recalc_irqs()
// handle this separately to avoid accessing recursively the regs?
-uint8_t sns_sa1_device::var_length_read(address_space &space, uint32_t offset)
+uint8_t sns_sa1_device::var_length_read(uint32_t offset)
{
// handle 0xffea/0xffeb/0xffee/0xffef
if ((offset & 0xffffe0) == 0x00ffe0)
@@ -216,13 +216,13 @@ uint8_t sns_sa1_device::var_length_read(address_space &space, uint32_t offset)
}
if ((offset & 0xc08000) == 0x008000) //$00-3f:8000-ffff
- return read_l(space, (offset & 0x7fffff));
+ return read_l(offset & 0x7fffff);
if ((offset & 0xc08000) == 0x808000) //$80-bf:8000-ffff
- return read_h(space, (offset & 0x7fffff));
+ return read_h(offset & 0x7fffff);
if ((offset & 0xc00000) == 0xc00000) //$c0-ff:0000-ffff
- return read_h(space, (offset & 0x7fffff));
+ return read_h(offset & 0x7fffff);
if ((offset & 0x40e000) == 0x006000) //$00-3f|80-bf:6000-7fff
return read_bwram((m_bwram_snes * 0x2000) + (offset & 0x1fff));
@@ -239,7 +239,7 @@ uint8_t sns_sa1_device::var_length_read(address_space &space, uint32_t offset)
return 0;
}
-void sns_sa1_device::dma_transfer(address_space &space)
+void sns_sa1_device::dma_transfer()
{
// printf("DMA src %08x (%d), dst %08x (%d) cnt %d\n", m_src_addr, m_dma_ctrl & 3, m_dst_addr, m_dma_ctrl & 4, m_dma_cnt);
@@ -260,15 +260,15 @@ void sns_sa1_device::dma_transfer(address_space &space)
case 0: // ROM
if ((dma_src & 0x408000) == 0x008000 && (dma_src & 0x800000) == 0x000000)
{
- data = read_l(space, (dma_src & 0x7fffff));
+ data = read_l(dma_src & 0x7fffff);
}
if ((dma_src & 0x408000) == 0x008000 && (dma_src & 0x800000) == 0x800000)
{
- data = read_h(space, (dma_src & 0x7fffff));
+ data = read_h(dma_src & 0x7fffff);
}
if ((dma_src & 0xc00000) == 0xc00000)
{
- data = read_h(space, (dma_src & 0x7fffff));
+ data = read_h(dma_src & 0x7fffff);
}
break;
@@ -311,17 +311,17 @@ void sns_sa1_device::dma_transfer(address_space &space)
recalc_irqs();
}
-void sns_sa1_device::dma_cctype1_transfer(address_space &space)
+void sns_sa1_device::dma_cctype1_transfer()
{
m_scpu_flags |= SCPU_IRQ_CHARCONV;
recalc_irqs();
}
-void sns_sa1_device::dma_cctype2_transfer(address_space &space)
+void sns_sa1_device::dma_cctype2_transfer()
{
}
-uint8_t sns_sa1_device::read_regs(address_space &space, uint32_t offset)
+uint8_t sns_sa1_device::read_regs(uint32_t offset)
{
uint8_t value = 0xff;
offset &= 0x1ff; // $2200 + offset gives the reg value to compare with docs
@@ -383,8 +383,8 @@ uint8_t sns_sa1_device::read_regs(address_space &space, uint32_t offset)
case 0x10c:
// Var-Length Read Port Low
{
- uint32_t data = (var_length_read(space, m_vda + 0) << 0) | (var_length_read(space, m_vda + 1) << 8)
- | (var_length_read(space, m_vda + 2) << 16);
+ uint32_t data = (var_length_read(m_vda + 0) << 0) | (var_length_read(m_vda + 1) << 8)
+ | (var_length_read(m_vda + 2) << 16);
data >>= m_vbit;
value = (data >> 0) & 0xff;
}
@@ -392,8 +392,8 @@ uint8_t sns_sa1_device::read_regs(address_space &space, uint32_t offset)
case 0x10d:
// Var-Length Read Port High
{
- uint32_t data = (var_length_read(space, m_vda + 0) << 0) | (var_length_read(space, m_vda + 1) << 8)
- | (var_length_read(space, m_vda + 2) << 16);
+ uint32_t data = (var_length_read(m_vda + 0) << 0) | (var_length_read(m_vda + 1) << 8)
+ | (var_length_read(m_vda + 2) << 16);
data >>= m_vbit;
if (m_drm == 1)
@@ -417,7 +417,7 @@ uint8_t sns_sa1_device::read_regs(address_space &space, uint32_t offset)
return value;
}
-void sns_sa1_device::write_regs(address_space &space, uint32_t offset, uint8_t data)
+void sns_sa1_device::write_regs(uint32_t offset, uint8_t data)
{
offset &= 0x1ff; // $2200 + offset gives the reg value to compare with docs
@@ -669,14 +669,14 @@ void sns_sa1_device::write_regs(address_space &space, uint32_t offset, uint8_t d
{
if (!(m_dma_ctrl & 0x20) && !(m_dma_ctrl & 0x04)) // Normal DMA to IRAM
{
- dma_transfer(space);
+ dma_transfer();
// printf("SA-1: normal DMA to IRAM\n");
}
if (m_dma_ctrl & 0x20 && m_dma_ctrl & 0x10) // CC DMA Type 1
{
// printf("SA-1: CC DMA type 1\n");
- dma_cctype1_transfer(space);
+ dma_cctype1_transfer();
}
}
break;
@@ -688,7 +688,7 @@ void sns_sa1_device::write_regs(address_space &space, uint32_t offset, uint8_t d
if (!(m_dma_ctrl & 0x20) && m_dma_ctrl & 0x04) // Normal DMA to BWRAM
{
// printf("SA-1: normal DMA to BWRAM\n");
- dma_transfer(space);
+ dma_transfer();
}
}
break;
@@ -729,7 +729,7 @@ void sns_sa1_device::write_regs(address_space &space, uint32_t offset, uint8_t d
if (m_dma_ctrl & 0x20 && !(m_dma_ctrl & 0x10)) // CC DMA Type 2
{
// printf("SA-1: CC DMA type 2\n");
- dma_cctype2_transfer(space);
+ dma_cctype2_transfer();
}
}
break;
@@ -901,7 +901,7 @@ void sns_sa1_device::write_bwram(uint32_t offset, uint8_t data)
-------------------------------------------------*/
-READ8_MEMBER(sns_sa1_device::read_l)
+uint8_t sns_sa1_device::read_l(offs_t offset)
{
int bank;
@@ -936,7 +936,7 @@ READ8_MEMBER(sns_sa1_device::read_l)
return 0; // this should not happen (the driver should only call read_l in the above case)
}
-READ8_MEMBER(sns_sa1_device::read_h)
+uint8_t sns_sa1_device::read_h(offs_t offset)
{
int bank;
@@ -972,20 +972,20 @@ READ8_MEMBER(sns_sa1_device::read_h)
return m_rom[rom_bank_map[(m_bank_f_rom * 0x20) + ((offset - 0x700000) / 0x8000)] * 0x8000 + (offset & 0x7fff)];
}
-WRITE8_MEMBER(sns_sa1_device::write_l)
+void sns_sa1_device::write_l(offs_t offset, uint8_t data)
{
}
-WRITE8_MEMBER(sns_sa1_device::write_h)
+void sns_sa1_device::write_h(offs_t offset, uint8_t data)
{
}
-READ8_MEMBER( sns_sa1_device::chip_read )
+uint8_t sns_sa1_device::chip_read(offs_t offset)
{
uint16_t address = offset & 0xffff;
if (offset < 0x400000 && address >= 0x2200 && address < 0x2400)
- return read_regs(space, address & 0x1ff); // SA-1 Regs
+ return read_regs(address & 0x1ff); // SA-1 Regs
if (offset < 0x400000 && address >= 0x3000 && address < 0x3800)
return read_iram(address & 0x7ff); // Internal SA-1 RAM (2K)
@@ -1000,12 +1000,12 @@ READ8_MEMBER( sns_sa1_device::chip_read )
}
-WRITE8_MEMBER( sns_sa1_device::chip_write )
+void sns_sa1_device::chip_write(offs_t offset, uint8_t data)
{
uint16_t address = offset & 0xffff;
if (offset < 0x400000 && address >= 0x2200 && address < 0x2400)
- write_regs(space, address & 0x1ff, data); // SA-1 Regs
+ write_regs(address & 0x1ff, data); // SA-1 Regs
if (offset < 0x400000 && address >= 0x3000 && address < 0x3800)
write_iram(address & 0x7ff, data); // Internal SA-1 RAM (2K)
@@ -1026,7 +1026,7 @@ WRITE8_MEMBER( sns_sa1_device::chip_write )
// I/O regs or WRAM, and there are a few additional accesses to IRAM (in [00-3f][0000-07ff])
// and to BWRAM (in [60-6f][0000-ffff], so-called bitmap mode)
-READ8_MEMBER( sns_sa1_device::sa1_hi_r )
+uint8_t sns_sa1_device::sa1_hi_r(offs_t offset)
{
uint16_t address = offset & 0xffff;
@@ -1037,22 +1037,22 @@ READ8_MEMBER( sns_sa1_device::sa1_hi_r )
if (address < 0x0800)
return read_iram(offset); // Internal SA-1 RAM (2K)
else if (address >= 0x2200 && address < 0x2400)
- return read_regs(space, offset & 0x1ff); // SA-1 Regs
+ return read_regs(offset & 0x1ff); // SA-1 Regs
else if (address >= 0x3000 && address < 0x3800)
return read_iram(offset); // Internal SA-1 RAM (2K)
}
else if (address < 0x8000)
return read_bwram((m_bwram_sa1 * 0x2000) + (offset & 0x1fff) + (m_bwram_sa1_source * 0x100000)); // SA-1 BWRAM
else
- return read_h(space, offset); // ROM
+ return read_h(offset); // ROM
return 0xff; // maybe open bus? same as the main system one or diff? (currently not accessible from carts anyway...)
}
else
- return read_h(space, offset); // ROM
+ return read_h(offset); // ROM
}
-READ8_MEMBER( sns_sa1_device::sa1_lo_r )
+uint8_t sns_sa1_device::sa1_lo_r(offs_t offset)
{
uint16_t address = offset & 0xffff;
@@ -1063,7 +1063,7 @@ READ8_MEMBER( sns_sa1_device::sa1_lo_r )
if (address < 0x0800)
return read_iram(offset); // Internal SA-1 RAM (2K)
else if (address >= 0x2200 && address < 0x2400)
- return read_regs(space, offset & 0x1ff); // SA-1 Regs
+ return read_regs(offset & 0x1ff); // SA-1 Regs
else if (address >= 0x3000 && address < 0x3800)
return read_iram(offset); // Internal SA-1 RAM (2K)
}
@@ -1094,7 +1094,7 @@ READ8_MEMBER( sns_sa1_device::sa1_lo_r )
return m_sa1_reset>>8;
}
else
- return read_l(space, offset); // ROM
+ return read_l(offset); // ROM
return 0xff; // maybe open bus? same as the main system one or diff? (currently not accessible from carts anyway...)
}
@@ -1106,7 +1106,7 @@ READ8_MEMBER( sns_sa1_device::sa1_lo_r )
return 0xff; // nothing should be mapped here, so maybe open bus?
}
-WRITE8_MEMBER( sns_sa1_device::sa1_hi_w )
+void sns_sa1_device::sa1_hi_w(offs_t offset, uint8_t data)
{
uint16_t address = offset & 0xffff;
if (offset < 0x400000)
@@ -1116,7 +1116,7 @@ WRITE8_MEMBER( sns_sa1_device::sa1_hi_w )
if (address < 0x0800)
write_iram(offset, data); // Internal SA-1 RAM (2K)
else if (address >= 0x2200 && address < 0x2400)
- write_regs(space, offset & 0x1ff, data); // SA-1 Regs
+ write_regs(offset & 0x1ff, data); // SA-1 Regs
else if (address >= 0x3000 && address < 0x3800)
write_iram(offset, data); // Internal SA-1 RAM (2K)
}
@@ -1125,14 +1125,14 @@ WRITE8_MEMBER( sns_sa1_device::sa1_hi_w )
}
}
-WRITE8_MEMBER( sns_sa1_device::sa1_lo_w )
+void sns_sa1_device::sa1_lo_w(offs_t offset, uint8_t data)
{
if (offset >= 0x400000 && offset < 0x500000)
write_bwram(offset & 0xfffff, data); // SA-1 BWRAM (not mirrored above!)
else if (offset >= 0x600000 && offset < 0x700000)
write_bwram((offset & 0xfffff) + 0x100000, data); // SA-1 BWRAM Bitmap mode
else
- sa1_hi_w(space, offset, data);
+ sa1_hi_w(offset, data);
}
void sns_sa1_device::sa1_map(address_map &map)
@@ -1143,7 +1143,8 @@ void sns_sa1_device::sa1_map(address_map &map)
}
-MACHINE_CONFIG_START(sns_sa1_device::device_add_mconfig)
- MCFG_DEVICE_ADD("sa1cpu", G65816, 10000000)
- MCFG_DEVICE_PROGRAM_MAP(sa1_map)
-MACHINE_CONFIG_END
+void sns_sa1_device::device_add_mconfig(machine_config &config)
+{
+ G65816(config, m_sa1, 10000000);
+ m_sa1->set_addrmap(AS_PROGRAM, &sns_sa1_device::sa1_map);
+}
diff --git a/src/devices/bus/snes/sa1.h b/src/devices/bus/snes/sa1.h
index 6ea8ae9b15a..e4fb646385a 100644
--- a/src/devices/bus/snes/sa1.h
+++ b/src/devices/bus/snes/sa1.h
@@ -26,25 +26,25 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
// additional reading and writing
- virtual DECLARE_READ8_MEMBER(chip_read) override;
- virtual DECLARE_WRITE8_MEMBER(chip_write) override;
+ virtual uint8_t chip_read(offs_t offset) override;
+ virtual void chip_write(offs_t offset, uint8_t data) override;
private:
- uint8_t var_length_read(address_space &space, uint32_t offset);
- void dma_transfer(address_space &space);
- void dma_cctype1_transfer(address_space &space);
- void dma_cctype2_transfer(address_space &space);
+ uint8_t var_length_read(uint32_t offset);
+ void dma_transfer();
+ void dma_cctype1_transfer();
+ void dma_cctype2_transfer();
- uint8_t read_regs(address_space &space, uint32_t offset);
+ uint8_t read_regs(uint32_t offset);
uint8_t read_iram(uint32_t offset);
uint8_t read_bwram(uint32_t offset);
- void write_regs(address_space &space, uint32_t offset, uint8_t data);
+ void write_regs(uint32_t offset, uint8_t data);
void write_iram(uint32_t offset, uint8_t data);
void write_bwram(uint32_t offset, uint8_t data);
void recalc_irqs();
@@ -103,10 +103,10 @@ private:
// $2302-$2305
uint16_t m_hcr, m_vcr;
- DECLARE_READ8_MEMBER(sa1_lo_r);
- DECLARE_READ8_MEMBER(sa1_hi_r);
- DECLARE_WRITE8_MEMBER(sa1_lo_w);
- DECLARE_WRITE8_MEMBER(sa1_hi_w);
+ uint8_t sa1_lo_r(offs_t offset);
+ uint8_t sa1_hi_r(offs_t offset);
+ void sa1_lo_w(offs_t offset, uint8_t data);
+ void sa1_hi_w(offs_t offset, uint8_t data);
void sa1_map(address_map &map);
};
diff --git a/src/devices/bus/snes/sdd1.cpp b/src/devices/bus/snes/sdd1.cpp
index 6d13fcd97a8..94374d07681 100644
--- a/src/devices/bus/snes/sdd1.cpp
+++ b/src/devices/bus/snes/sdd1.cpp
@@ -470,7 +470,7 @@ void sns_rom_sdd1_device::device_reset()
mapper specific handlers
-------------------------------------------------*/
-READ8_MEMBER( sns_rom_sdd1_device::chip_read )
+uint8_t sns_rom_sdd1_device::chip_read(offs_t offset)
{
uint16_t addr = offset & 0xffff;
@@ -491,7 +491,7 @@ READ8_MEMBER( sns_rom_sdd1_device::chip_read )
}
-WRITE8_MEMBER( sns_rom_sdd1_device::chip_write )
+void sns_rom_sdd1_device::chip_write(offs_t offset, uint8_t data)
{
uint16_t addr = offset & 0xffff;
@@ -589,7 +589,7 @@ uint8_t sns_rom_sdd1_device::read_helper(uint32_t addr)
return m_rom[m_mmc[(addr >> 20) & 3] + (addr & 0x0fffff)];
}
-READ8_MEMBER(sns_rom_sdd1_device::read_l)
+uint8_t sns_rom_sdd1_device::read_l(offs_t offset)
{
if (offset < 0x400000)
return m_rom[rom_bank_map[offset / 0x10000] * 0x8000 + (offset & 0x7fff)];
@@ -597,21 +597,21 @@ READ8_MEMBER(sns_rom_sdd1_device::read_l)
return m_rom[rom_bank_map[(offset - 0x400000) / 0x8000] * 0x8000 + (offset & 0x7fff)];
}
-READ8_MEMBER(sns_rom_sdd1_device::read_h)
+uint8_t sns_rom_sdd1_device::read_h(offs_t offset)
{
if (offset >= 0x400000)
return read_helper(offset - 0x400000);
else
- return read_l(space, offset);
+ return read_l(offset);
}
-READ8_MEMBER( sns_rom_sdd1_device::read_ram )
+uint8_t sns_rom_sdd1_device::read_ram(offs_t offset)
{
return m_nvram[offset & 0x1fff];
}
-WRITE8_MEMBER( sns_rom_sdd1_device::write_ram )
+void sns_rom_sdd1_device::write_ram(offs_t offset, uint8_t data)
{
m_nvram[offset & 0x1fff] = data;
}
diff --git a/src/devices/bus/snes/sdd1.h b/src/devices/bus/snes/sdd1.h
index 6265e630bdc..5164a169f65 100644
--- a/src/devices/bus/snes/sdd1.h
+++ b/src/devices/bus/snes/sdd1.h
@@ -19,12 +19,12 @@ public:
sns_rom_sdd1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_READ8_MEMBER(read_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
- virtual DECLARE_READ8_MEMBER(chip_read) override;
- virtual DECLARE_WRITE8_MEMBER(chip_write) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual uint8_t read_ram(offs_t offset) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
+ virtual uint8_t chip_read(offs_t offset) override;
+ virtual void chip_write(offs_t offset, uint8_t data) override;
protected:
sns_rom_sdd1_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
diff --git a/src/devices/bus/snes/sfx.cpp b/src/devices/bus/snes/sfx.cpp
index cf9942ada4d..59908b9b06e 100644
--- a/src/devices/bus/snes/sfx.cpp
+++ b/src/devices/bus/snes/sfx.cpp
@@ -40,30 +40,30 @@ void sns_rom_superfx_device::device_reset()
// LoROM + SuperFX (GSU-1,2)
// TODO: mask sfx_ram based on the actual RAM...
-READ8_MEMBER( sns_rom_superfx_device::superfx_r_bank1 )
+uint8_t sns_rom_superfx_device::superfx_r_bank1(offs_t offset)
{
return m_rom[rom_bank_map[offset / 0x10000] * 0x8000 + (offset & 0x7fff)];
}
-READ8_MEMBER( sns_rom_superfx_device::superfx_r_bank2 )
+uint8_t sns_rom_superfx_device::superfx_r_bank2(offs_t offset)
{
return m_rom[rom_bank_map[offset / 0x8000] * 0x8000 + (offset & 0x7fff)];
}
-READ8_MEMBER( sns_rom_superfx_device::superfx_r_bank3 )
+uint8_t sns_rom_superfx_device::superfx_r_bank3(offs_t offset)
{
return sfx_ram[offset & 0xfffff];
}
-WRITE8_MEMBER( sns_rom_superfx_device::superfx_w_bank1 )
+void sns_rom_superfx_device::superfx_w_bank1(offs_t offset, uint8_t data)
{
}
-WRITE8_MEMBER( sns_rom_superfx_device::superfx_w_bank2 )
+void sns_rom_superfx_device::superfx_w_bank2(offs_t offset, uint8_t data)
{
}
-WRITE8_MEMBER( sns_rom_superfx_device::superfx_w_bank3 )
+void sns_rom_superfx_device::superfx_w_bank3(offs_t offset, uint8_t data)
{
sfx_ram[offset & 0xfffff] = data;
}
@@ -92,23 +92,23 @@ void sns_rom_superfx_device::device_add_mconfig(machine_config &config)
m_superfx->irq().set(FUNC(sns_rom_superfx_device::snes_extern_irq_w)); /* IRQ line from cart */
}
-READ8_MEMBER( sns_rom_superfx_device::chip_read )
+uint8_t sns_rom_superfx_device::chip_read(offs_t offset)
{
return m_superfx->mmio_read(offset);
}
-WRITE8_MEMBER( sns_rom_superfx_device::chip_write )
+void sns_rom_superfx_device::chip_write(offs_t offset, uint8_t data)
{
m_superfx->mmio_write(offset, data);
}
-READ8_MEMBER( sns_rom_superfx_device::read_l )
+uint8_t sns_rom_superfx_device::read_l(offs_t offset)
{
- return read_h(space, offset);
+ return read_h(offset);
}
-READ8_MEMBER(sns_rom_superfx_device::read_h)
+uint8_t sns_rom_superfx_device::read_h(offs_t offset)
{
if (offset < 0x400000)
return m_rom[rom_bank_map[offset / 0x10000] * 0x8000 + (offset & 0x7fff)];
@@ -130,14 +130,14 @@ READ8_MEMBER(sns_rom_superfx_device::read_h)
return 0xff; // this handler should never be called for [60-7f]/[e0-ff] ranges
}
-READ8_MEMBER( sns_rom_superfx_device::read_ram )
+uint8_t sns_rom_superfx_device::read_ram(offs_t offset)
{
if (m_superfx->access_ram())
return sfx_ram[offset & 0xfffff];
return 0xff; // should be open bus...
}
-WRITE8_MEMBER( sns_rom_superfx_device::write_ram )
+void sns_rom_superfx_device::write_ram(offs_t offset, uint8_t data)
{
if (m_superfx->access_ram())
sfx_ram[offset & 0xfffff] = data;
diff --git a/src/devices/bus/snes/sfx.h b/src/devices/bus/snes/sfx.h
index 253084be139..7c92e411749 100644
--- a/src/devices/bus/snes/sfx.h
+++ b/src/devices/bus/snes/sfx.h
@@ -26,19 +26,19 @@ protected:
virtual DECLARE_WRITE_LINE_MEMBER(snes_extern_irq_w);
// additional reading and writing
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_READ8_MEMBER(read_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
- virtual DECLARE_READ8_MEMBER(chip_read) override;
- virtual DECLARE_WRITE8_MEMBER(chip_write) override;
-
- virtual DECLARE_READ8_MEMBER(superfx_r_bank1);
- virtual DECLARE_READ8_MEMBER(superfx_r_bank2);
- virtual DECLARE_READ8_MEMBER(superfx_r_bank3);
- virtual DECLARE_WRITE8_MEMBER(superfx_w_bank1);
- virtual DECLARE_WRITE8_MEMBER(superfx_w_bank2);
- virtual DECLARE_WRITE8_MEMBER(superfx_w_bank3);
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual uint8_t read_ram(offs_t offset) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
+ virtual uint8_t chip_read(offs_t offset) override;
+ virtual void chip_write(offs_t offset, uint8_t data) override;
+
+ uint8_t superfx_r_bank1(offs_t offset);
+ uint8_t superfx_r_bank2(offs_t offset);
+ uint8_t superfx_r_bank3(offs_t offset);
+ void superfx_w_bank1(offs_t offset, uint8_t data);
+ void superfx_w_bank2(offs_t offset, uint8_t data);
+ void superfx_w_bank3(offs_t offset, uint8_t data);
private:
required_device<superfx_device> m_superfx;
diff --git a/src/devices/bus/snes/sgb.cpp b/src/devices/bus/snes/sgb.cpp
index 1a50f504f01..6c790a1c773 100644
--- a/src/devices/bus/snes/sgb.cpp
+++ b/src/devices/bus/snes/sgb.cpp
@@ -74,55 +74,55 @@ void sns_rom_sgb_device::device_reset()
// ADDRESS_MAP( supergb_map )
//-------------------------------------------------
-READ8_MEMBER(sns_rom_sgb_device::gb_cart_r)
+uint8_t sns_rom_sgb_device::gb_cart_r(offs_t offset)
{
if (offset < 0x100 && !m_bios_disabled)
{
return m_region_bios->base()[offset];
}
- return m_cartslot->read_rom(space, offset);
+ return m_cartslot->read_rom(offset);
}
-WRITE8_MEMBER(sns_rom_sgb_device::gb_bank_w)
+void sns_rom_sgb_device::gb_bank_w(offs_t offset, uint8_t data)
{
- m_cartslot->write_bank(space, offset, data);
+ m_cartslot->write_bank(offset, data);
}
-READ8_MEMBER(sns_rom_sgb_device::gb_ram_r)
+uint8_t sns_rom_sgb_device::gb_ram_r(offs_t offset)
{
- return m_cartslot->read_ram(space, offset);
+ return m_cartslot->read_ram(offset);
}
-WRITE8_MEMBER(sns_rom_sgb_device::gb_ram_w)
+void sns_rom_sgb_device::gb_ram_w(offs_t offset, uint8_t data)
{
- m_cartslot->write_ram(space, offset, data);
+ m_cartslot->write_ram(offset, data);
}
-READ8_MEMBER(sns_rom_sgb_device::gb_echo_r)
+uint8_t sns_rom_sgb_device::gb_echo_r(offs_t offset)
{
- return space.read_byte(0xc000 + offset);
+ return m_sgb_cpu->space(AS_PROGRAM).read_byte(0xc000 + offset);
}
-WRITE8_MEMBER(sns_rom_sgb_device::gb_echo_w)
+void sns_rom_sgb_device::gb_echo_w(offs_t offset, uint8_t data)
{
- return space.write_byte(0xc000 + offset, data);
+ return m_sgb_cpu->space(AS_PROGRAM).write_byte(0xc000 + offset, data);
}
-READ8_MEMBER(sns_rom_sgb_device::gb_io_r)
+uint8_t sns_rom_sgb_device::gb_io_r(offs_t offset)
{
return 0;
}
-WRITE8_MEMBER(sns_rom_sgb_device::gb_io_w)
+void sns_rom_sgb_device::gb_io_w(offs_t offset, uint8_t data)
{
}
-READ8_MEMBER(sns_rom_sgb_device::gb_ie_r)
+uint8_t sns_rom_sgb_device::gb_ie_r(offs_t offset)
{
return m_sgb_cpu->get_ie();
}
-WRITE8_MEMBER(sns_rom_sgb_device::gb_ie_w)
+void sns_rom_sgb_device::gb_ie_w(offs_t offset, uint8_t data)
{
m_sgb_cpu->set_ie(data);
}
@@ -149,7 +149,7 @@ void sns_rom_sgb_device::supergb_map(address_map &map)
-WRITE8_MEMBER( sns_rom_sgb_device::gb_timer_callback )
+void sns_rom_sgb_device::gb_timer_callback(uint8_t data)
{
}
@@ -220,18 +220,18 @@ const tiny_rom_entry *sns_rom_sgb2_device::device_rom_region() const
-------------------------------------------------*/
-READ8_MEMBER(sns_rom_sgb_device::read_l)
+uint8_t sns_rom_sgb_device::read_l(offs_t offset)
{
- return read_h(space, offset);
+ return read_h(offset);
}
-READ8_MEMBER(sns_rom_sgb_device::read_h)
+uint8_t sns_rom_sgb_device::read_h(offs_t offset)
{
int bank = offset / 0x10000;
return m_rom[rom_bank_map[bank] * 0x8000 + (offset & 0x7fff)];
}
-READ8_MEMBER( sns_rom_sgb_device::chip_read )
+uint8_t sns_rom_sgb_device::chip_read(offs_t offset)
{
uint16_t address = offset & 0xffff;
@@ -299,7 +299,7 @@ void sns_rom_sgb_device::lcd_render(uint32_t *source)
}
}
-WRITE8_MEMBER( sns_rom_sgb_device::chip_write )
+void sns_rom_sgb_device::chip_write(offs_t offset, uint8_t data)
{
uint16_t address = offset & 0xffff;
diff --git a/src/devices/bus/snes/sgb.h b/src/devices/bus/snes/sgb.h
index c49ebaa44e3..db6782ddb98 100644
--- a/src/devices/bus/snes/sgb.h
+++ b/src/devices/bus/snes/sgb.h
@@ -21,8 +21,7 @@
class sns_rom_sgb_device : public sns_rom_device
{
public:
-
- virtual DECLARE_WRITE8_MEMBER(gb_timer_callback);
+ void gb_timer_callback(uint8_t data);
protected:
// construction/destruction
@@ -33,21 +32,21 @@ protected:
virtual void device_reset() override;
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_READ8_MEMBER(chip_read) override;
- virtual DECLARE_WRITE8_MEMBER(chip_write) override;
-
- virtual DECLARE_READ8_MEMBER(gb_cart_r);
- virtual DECLARE_WRITE8_MEMBER(gb_bank_w);
- virtual DECLARE_READ8_MEMBER(gb_ram_r);
- virtual DECLARE_WRITE8_MEMBER(gb_ram_w);
- virtual DECLARE_READ8_MEMBER(gb_echo_r);
- virtual DECLARE_WRITE8_MEMBER(gb_echo_w);
- virtual DECLARE_READ8_MEMBER(gb_io_r);
- virtual DECLARE_WRITE8_MEMBER(gb_io_w);
- virtual DECLARE_READ8_MEMBER(gb_ie_r);
- virtual DECLARE_WRITE8_MEMBER(gb_ie_w);
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual uint8_t chip_read(offs_t offset) override;
+ virtual void chip_write(offs_t offset, uint8_t data) override;
+
+ uint8_t gb_cart_r(offs_t offset);
+ void gb_bank_w(offs_t offset, uint8_t data);
+ uint8_t gb_ram_r(offs_t offset);
+ void gb_ram_w(offs_t offset, uint8_t data);
+ uint8_t gb_echo_r(offs_t offset);
+ void gb_echo_w(offs_t offset, uint8_t data);
+ uint8_t gb_io_r(offs_t offset);
+ void gb_io_w(offs_t offset, uint8_t data);
+ uint8_t gb_ie_r(offs_t offset);
+ void gb_ie_w(offs_t offset, uint8_t data);
void supergb_map(address_map &map);
diff --git a/src/devices/bus/snes/snes_slot.cpp b/src/devices/bus/snes/snes_slot.cpp
index f85f198f257..7af674e9f6d 100644
--- a/src/devices/bus/snes/snes_slot.cpp
+++ b/src/devices/bus/snes/snes_slot.cpp
@@ -177,6 +177,18 @@ WRITE_LINE_MEMBER(device_sns_cart_interface::write_irq)
m_slot->write_irq(state);
}
+//-------------------------------------------------
+// read_open_bus - read from the open bus
+//-------------------------------------------------
+
+uint8_t device_sns_cart_interface::read_open_bus()
+{
+ if (m_slot != nullptr)
+ return m_slot->read_open_bus();
+
+ return 0xff;
+}
+
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
@@ -191,7 +203,8 @@ base_sns_cart_slot_device::base_sns_cart_slot_device(const machine_config &mconf
m_addon(ADDON_NONE),
m_type(SNES_MODE20),
m_cart(nullptr),
- m_irq_callback(*this)
+ m_irq_callback(*this),
+ m_open_bus_callback(*this)
{
}
@@ -225,9 +238,11 @@ base_sns_cart_slot_device::~base_sns_cart_slot_device()
void base_sns_cart_slot_device::device_start()
{
m_cart = dynamic_cast<device_sns_cart_interface *>(get_card_device());
- m_cart->m_slot = this;
+ if (m_cart != nullptr)
+ m_cart->m_slot = this;
m_irq_callback.resolve_safe();
+ m_open_bus_callback.resolve_safe(0xff);
}
@@ -1060,34 +1075,34 @@ std::string base_sns_cart_slot_device::get_default_card_software(get_default_car
read
-------------------------------------------------*/
-READ8_MEMBER(base_sns_cart_slot_device::read_l)
+uint8_t base_sns_cart_slot_device::read_l(offs_t offset)
{
if (m_cart)
- return m_cart->read_l(space, offset);
+ return m_cart->read_l(offset);
else
return 0xff;
}
-READ8_MEMBER(base_sns_cart_slot_device::read_h)
+uint8_t base_sns_cart_slot_device::read_h(offs_t offset)
{
if (m_cart)
- return m_cart->read_h(space, offset);
+ return m_cart->read_h(offset);
else
return 0xff;
}
-READ8_MEMBER(base_sns_cart_slot_device::read_ram)
+uint8_t base_sns_cart_slot_device::read_ram(offs_t offset)
{
if (m_cart)
- return m_cart->read_ram(space, offset);
+ return m_cart->read_ram(offset);
else
return 0xff;
}
-READ8_MEMBER(base_sns_cart_slot_device::chip_read)
+uint8_t base_sns_cart_slot_device::chip_read(offs_t offset)
{
if (m_cart)
- return m_cart->chip_read(space, offset);
+ return m_cart->chip_read(offset);
else
return 0xff;
}
@@ -1096,28 +1111,28 @@ READ8_MEMBER(base_sns_cart_slot_device::chip_read)
write
-------------------------------------------------*/
-WRITE8_MEMBER(base_sns_cart_slot_device::write_l)
+void base_sns_cart_slot_device::write_l(offs_t offset, uint8_t data)
{
if (m_cart)
- m_cart->write_l(space, offset, data);
+ m_cart->write_l(offset, data);
}
-WRITE8_MEMBER(base_sns_cart_slot_device::write_h)
+void base_sns_cart_slot_device::write_h(offs_t offset, uint8_t data)
{
if (m_cart)
- m_cart->write_h(space, offset, data);
+ m_cart->write_h(offset, data);
}
-WRITE8_MEMBER(base_sns_cart_slot_device::write_ram)
+void base_sns_cart_slot_device::write_ram(offs_t offset, uint8_t data)
{
if (m_cart)
- m_cart->write_ram(space, offset, data);
+ m_cart->write_ram(offset, data);
}
-WRITE8_MEMBER(base_sns_cart_slot_device::chip_write)
+void base_sns_cart_slot_device::chip_write(offs_t offset, uint8_t data)
{
if (m_cart)
- m_cart->chip_write(space, offset, data);
+ m_cart->chip_write(offset, data);
}
diff --git a/src/devices/bus/snes/snes_slot.h b/src/devices/bus/snes/snes_slot.h
index 91f61e88f4d..9d63a1ba9c2 100644
--- a/src/devices/bus/snes/snes_slot.h
+++ b/src/devices/bus/snes/snes_slot.h
@@ -111,14 +111,14 @@ public:
virtual ~device_sns_cart_interface();
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_l) { return 0xff; } // ROM access in range [00-7f]
- virtual DECLARE_READ8_MEMBER(read_h) { return 0xff; } // ROM access in range [80-ff]
- virtual DECLARE_READ8_MEMBER(read_ram) { if (!m_nvram.empty()) return m_nvram[offset & (m_nvram.size()-1)]; else return 0xff; } // NVRAM access
- virtual DECLARE_WRITE8_MEMBER(write_l) { } // used by carts with subslots
- virtual DECLARE_WRITE8_MEMBER(write_h) { } // used by carts with subslots
- virtual DECLARE_WRITE8_MEMBER(write_ram) { if (!m_nvram.empty()) m_nvram[offset & (m_nvram.size()-1)] = data; } // NVRAM access
- virtual DECLARE_READ8_MEMBER(chip_read) { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(chip_write) { }
+ virtual uint8_t read_l(offs_t offset) { return 0xff; } // ROM access in range [00-7f]
+ virtual uint8_t read_h(offs_t offset) { return 0xff; } // ROM access in range [80-ff]
+ virtual uint8_t read_ram(offs_t offset) { if (!m_nvram.empty()) return m_nvram[offset & (m_nvram.size()-1)]; else return 0xff; } // NVRAM access
+ virtual void write_l(offs_t offset, uint8_t data) { } // used by carts with subslots
+ virtual void write_h(offs_t offset, uint8_t data) { } // used by carts with subslots
+ virtual void write_ram(offs_t offset, uint8_t data) { if (!m_nvram.empty()) m_nvram[offset & (m_nvram.size()-1)] = data; } // NVRAM access
+ virtual uint8_t chip_read(offs_t offset) { return 0xff; }
+ virtual void chip_write(offs_t offset, uint8_t data) { }
virtual void speedup_addon_bios_access() {}
void rom_alloc(uint32_t size, const char *tag);
@@ -142,6 +142,7 @@ protected:
device_sns_cart_interface(const machine_config &mconfig, device_t &device);
DECLARE_WRITE_LINE_MEMBER(write_irq);
+ uint8_t read_open_bus();
// internal state
uint8_t *m_rom;
@@ -168,6 +169,7 @@ public:
// configuration
auto irq_callback() { return m_irq_callback.bind(); }
+ auto open_bus_callback() { return m_open_bus_callback.bind(); }
// device-level overrides
virtual void device_start() override;
@@ -198,16 +200,17 @@ public:
virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
// reading and writing
- DECLARE_READ8_MEMBER(read_l);
- DECLARE_READ8_MEMBER(read_h);
- DECLARE_READ8_MEMBER(read_ram);
- DECLARE_WRITE8_MEMBER(write_l);
- DECLARE_WRITE8_MEMBER(write_h);
- DECLARE_WRITE8_MEMBER(write_ram);
- DECLARE_READ8_MEMBER(chip_read);
- DECLARE_WRITE8_MEMBER(chip_write);
+ uint8_t read_l(offs_t offset);
+ uint8_t read_h(offs_t offset);
+ uint8_t read_ram(offs_t offset);
+ void write_l(offs_t offset, uint8_t data);
+ void write_h(offs_t offset, uint8_t data);
+ void write_ram(offs_t offset, uint8_t data);
+ uint8_t chip_read(offs_t offset);
+ void chip_write(offs_t offset, uint8_t data);
DECLARE_WRITE_LINE_MEMBER(write_irq) { m_irq_callback(state); }
+ uint8_t read_open_bus() { return m_open_bus_callback(); }
// in order to support legacy dumps + add-on CPU dump appended at the end of the file, we
// check if the required data is present and update bank map accordingly
@@ -230,6 +233,7 @@ protected:
private:
devcb_write_line m_irq_callback;
+ devcb_read8 m_open_bus_callback;
};
// ======================> sns_cart_slot_device
diff --git a/src/devices/bus/snes/spc7110.cpp b/src/devices/bus/snes/spc7110.cpp
index a88c06e9250..20d59dc681a 100644
--- a/src/devices/bus/snes/spc7110.cpp
+++ b/src/devices/bus/snes/spc7110.cpp
@@ -1076,7 +1076,7 @@ void sns_rom_spc7110_device::spc7110_update_time(uint8_t offset)
}
}
-READ8_MEMBER(sns_rom_spc7110_device::chip_read)
+uint8_t sns_rom_spc7110_device::chip_read(offs_t offset)
{
uint8_t *ROM = get_rom_base();
uint32_t len = get_rom_size();
@@ -1262,7 +1262,7 @@ READ8_MEMBER(sns_rom_spc7110_device::chip_read)
return 0xff;
}
-WRITE8_MEMBER(sns_rom_spc7110_device::chip_write)
+void sns_rom_spc7110_device::chip_write(offs_t offset, uint8_t data)
{
uint8_t *ROM = get_rom_base();
uint32_t len = get_rom_size();
@@ -1648,7 +1648,7 @@ WRITE8_MEMBER(sns_rom_spc7110_device::chip_write)
}
}
-READ8_MEMBER(sns_rom_spc7110_device::read_l)
+uint8_t sns_rom_spc7110_device::read_l(offs_t offset)
{
if (offset < 0x400000)
return m_rom[rom_bank_map[offset / 0x8000] * 0x8000 + (offset & 0x7fff)];
@@ -1656,7 +1656,7 @@ READ8_MEMBER(sns_rom_spc7110_device::read_l)
return 0xff;
}
-READ8_MEMBER(sns_rom_spc7110_device::read_h)
+uint8_t sns_rom_spc7110_device::read_h(offs_t offset)
{
uint16_t address = offset & 0xfffff;
@@ -1683,12 +1683,12 @@ READ8_MEMBER(sns_rom_spc7110_device::read_h)
}
-READ8_MEMBER( sns_rom_spc7110_device::read_ram )
+uint8_t sns_rom_spc7110_device::read_ram(offs_t offset)
{
return m_nvram[offset & 0x1fff];
}
-WRITE8_MEMBER( sns_rom_spc7110_device::write_ram )
+void sns_rom_spc7110_device::write_ram(offs_t offset, uint8_t data)
{
m_nvram[offset & 0x1fff] = data;
}
diff --git a/src/devices/bus/snes/spc7110.h b/src/devices/bus/snes/spc7110.h
index 249944c8ae7..a7c798244c1 100644
--- a/src/devices/bus/snes/spc7110.h
+++ b/src/devices/bus/snes/spc7110.h
@@ -18,13 +18,13 @@ public:
sns_rom_spc7110_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_READ8_MEMBER(read_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual uint8_t read_ram(offs_t offset) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
- virtual DECLARE_READ8_MEMBER(chip_read) override;
- virtual DECLARE_WRITE8_MEMBER(chip_write) override;
+ virtual uint8_t chip_read(offs_t offset) override;
+ virtual void chip_write(offs_t offset, uint8_t data) override;
protected:
sns_rom_spc7110_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@@ -199,11 +199,11 @@ public:
// reading and writing
// we just use the spc7110 ones for the moment, pending the split of regs 0x4840-0x4842 (RTC) from the base add-on
-// virtual DECLARE_READ8_MEMBER(read_l);
-// virtual DECLARE_READ8_MEMBER(read_h);
+// virtual uint8_t read_l(offs_t offset);
+// virtual uint8_t read_h(offs_t offset);
-// virtual DECLARE_READ8_MEMBER(chip_read);
-// virtual DECLARE_WRITE8_MEMBER(chip_write);
+// virtual uint8_t chip_read(offs_t offset);
+// virtual void chip_write(offs_t offset, uint8_t data);
protected:
// device-level overrides
diff --git a/src/devices/bus/snes/sufami.cpp b/src/devices/bus/snes/sufami.cpp
index 3e163e150e5..7589fb84fa4 100644
--- a/src/devices/bus/snes/sufami.cpp
+++ b/src/devices/bus/snes/sufami.cpp
@@ -66,12 +66,12 @@ void sns_rom_sufami_device::device_add_mconfig(machine_config &config)
mapper specific handlers
-------------------------------------------------*/
-READ8_MEMBER(sns_rom_sufami_device::read_l)
+uint8_t sns_rom_sufami_device::read_l(offs_t offset)
{
- return read_h(space, offset);
+ return read_h(offset);
}
-READ8_MEMBER(sns_rom_sufami_device::read_h)
+uint8_t sns_rom_sufami_device::read_h(offs_t offset)
{
int bank;
@@ -82,11 +82,11 @@ READ8_MEMBER(sns_rom_sufami_device::read_h)
}
if (offset >= 0x200000 && offset < 0x400000) // SLOT1 STROM
{
- return m_slot1->read_l(space, offset - 0x200000);
+ return m_slot1->read_l(offset - 0x200000);
}
if (offset >= 0x400000 && offset < 0x600000) // SLOT2 STROM
{
- return m_slot2->read_l(space, offset - 0x400000);
+ return m_slot2->read_l(offset - 0x400000);
}
if (offset >= 0x600000 && offset < 0x640000) // SLOT1 RAM
{
@@ -94,7 +94,7 @@ READ8_MEMBER(sns_rom_sufami_device::read_h)
{
offset -= 0x600000;
bank = offset / 0x10000;
- return m_slot1->read_ram(space, bank * 0x8000 + (offset & 0x7fff));
+ return m_slot1->read_ram(bank * 0x8000 + (offset & 0x7fff));
}
}
if (offset >= 0x700000 && offset < 0x740000) // SLOT2 RAM
@@ -103,19 +103,19 @@ READ8_MEMBER(sns_rom_sufami_device::read_h)
{
offset -= 0x700000;
bank = offset / 0x10000;
- return m_slot2->read_ram(space, bank * 0x8000 + (offset & 0x7fff));
+ return m_slot2->read_ram(bank * 0x8000 + (offset & 0x7fff));
}
}
return 0xff;
}
-WRITE8_MEMBER(sns_rom_sufami_device::write_l)
+void sns_rom_sufami_device::write_l(offs_t offset, uint8_t data)
{
- write_h(space, offset, data);
+ write_h(offset, data);
}
-WRITE8_MEMBER(sns_rom_sufami_device::write_h)
+void sns_rom_sufami_device::write_h(offs_t offset, uint8_t data)
{
int bank;
if (offset >= 0x600000 && offset < 0x640000) // SLOT1 RAM
@@ -124,7 +124,7 @@ WRITE8_MEMBER(sns_rom_sufami_device::write_h)
{
offset -= 0x600000;
bank = offset / 0x10000;
- m_slot1->write_ram(space, bank * 0x8000 + (offset & 0x7fff), data);
+ m_slot1->write_ram(bank * 0x8000 + (offset & 0x7fff), data);
}
}
@@ -134,7 +134,7 @@ WRITE8_MEMBER(sns_rom_sufami_device::write_h)
{
offset -= 0x700000;
bank = offset / 0x10000;
- m_slot2->write_ram(space, bank * 0x8000 + (offset & 0x7fff), data);
+ m_slot2->write_ram(bank * 0x8000 + (offset & 0x7fff), data);
}
}
@@ -144,7 +144,7 @@ WRITE8_MEMBER(sns_rom_sufami_device::write_h)
Sufami Turbo 'minicart' emulation
-------------------------------------------------*/
-READ8_MEMBER(sns_rom_strom_device::read_l)
+uint8_t sns_rom_strom_device::read_l(offs_t offset)
{
if (offset < 0x200000)
{
diff --git a/src/devices/bus/snes/sufami.h b/src/devices/bus/snes/sufami.h
index 6b4b3df3bea..1b231131a2b 100644
--- a/src/devices/bus/snes/sufami.h
+++ b/src/devices/bus/snes/sufami.h
@@ -18,10 +18,10 @@ public:
sns_rom_sufami_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// additional reading and writing
- virtual DECLARE_READ8_MEMBER(read_l) override;
- virtual DECLARE_READ8_MEMBER(read_h) override;
- virtual DECLARE_WRITE8_MEMBER(write_l) override;
- virtual DECLARE_WRITE8_MEMBER(write_h) override;
+ virtual uint8_t read_l(offs_t offset) override;
+ virtual uint8_t read_h(offs_t offset) override;
+ virtual void write_l(offs_t offset, uint8_t data) override;
+ virtual void write_h(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
@@ -43,7 +43,7 @@ public:
sns_rom_strom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// additional reading and writing
- virtual DECLARE_READ8_MEMBER(read_l) override;
+ virtual uint8_t read_l(offs_t offset) override;
protected:
// device-level overrides
diff --git a/src/devices/bus/snes/upd.cpp b/src/devices/bus/snes/upd.cpp
index 462ab0faf98..70396938e89 100644
--- a/src/devices/bus/snes/upd.cpp
+++ b/src/devices/bus/snes/upd.cpp
@@ -97,12 +97,12 @@ void sns_rom_setadsp_device::device_start()
// Lo-ROM
// DSP dump contains prg at offset 0 and data at offset 0x2000
-READ32_MEMBER( sns_rom20_necdsp_device::necdsp_prg_r )
+uint32_t sns_rom20_necdsp_device::necdsp_prg_r(offs_t offset)
{
return get_prg(&m_bios[0], offset);
}
-READ16_MEMBER( sns_rom20_necdsp_device::necdsp_data_r )
+uint16_t sns_rom20_necdsp_device::necdsp_data_r(offs_t offset)
{
return get_data(&m_bios[0], offset + 0x2000/2);
}
@@ -132,20 +132,21 @@ void sns_rom20_necdsp_device::dsp_data_map_lorom(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(sns_rom20_necdsp_device::device_add_mconfig)
- MCFG_DEVICE_ADD("dsp", UPD7725, 8000000)
- MCFG_DEVICE_PROGRAM_MAP(dsp_prg_map_lorom)
- MCFG_DEVICE_DATA_MAP(dsp_data_map_lorom)
-MACHINE_CONFIG_END
+void sns_rom20_necdsp_device::device_add_mconfig(machine_config &config)
+{
+ UPD7725(config, m_upd7725, 8000000);
+ m_upd7725->set_addrmap(AS_PROGRAM, &sns_rom20_necdsp_device::dsp_prg_map_lorom);
+ m_upd7725->set_addrmap(AS_DATA, &sns_rom20_necdsp_device::dsp_data_map_lorom);
+}
-READ8_MEMBER( sns_rom20_necdsp_device::chip_read )
+uint8_t sns_rom20_necdsp_device::chip_read(offs_t offset)
{
offset &= 0x7fff;
return m_upd7725->snesdsp_read(offset < 0x4000);
}
-WRITE8_MEMBER( sns_rom20_necdsp_device::chip_write )
+void sns_rom20_necdsp_device::chip_write(offs_t offset, uint8_t data)
{
offset &= 0x7fff;
m_upd7725->snesdsp_write(offset < 0x4000, data);
@@ -155,12 +156,12 @@ WRITE8_MEMBER( sns_rom20_necdsp_device::chip_write )
// Hi-ROM
// DSP dump contains prg at offset 0 and data at offset 0x2000
-READ32_MEMBER( sns_rom21_necdsp_device::necdsp_prg_r )
+uint32_t sns_rom21_necdsp_device::necdsp_prg_r(offs_t offset)
{
return get_prg(&m_bios[0], offset);
}
-READ16_MEMBER( sns_rom21_necdsp_device::necdsp_data_r )
+uint16_t sns_rom21_necdsp_device::necdsp_data_r(offs_t offset)
{
return get_data(&m_bios[0], offset + 0x2000/2);
}
@@ -189,20 +190,21 @@ void sns_rom21_necdsp_device::dsp_data_map_hirom(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(sns_rom21_necdsp_device::device_add_mconfig)
- MCFG_DEVICE_ADD("dsp", UPD7725, 8000000)
- MCFG_DEVICE_PROGRAM_MAP(dsp_prg_map_hirom)
- MCFG_DEVICE_DATA_MAP(dsp_data_map_hirom)
-MACHINE_CONFIG_END
+void sns_rom21_necdsp_device::device_add_mconfig(machine_config &config)
+{
+ UPD7725(config, m_upd7725, 8000000);
+ m_upd7725->set_addrmap(AS_PROGRAM, &sns_rom21_necdsp_device::dsp_prg_map_hirom);
+ m_upd7725->set_addrmap(AS_DATA, &sns_rom21_necdsp_device::dsp_data_map_hirom);
+}
-READ8_MEMBER( sns_rom21_necdsp_device::chip_read )
+uint8_t sns_rom21_necdsp_device::chip_read(offs_t offset)
{
offset &= 0x1fff;
return m_upd7725->snesdsp_read(offset < 0x1000);
}
-WRITE8_MEMBER( sns_rom21_necdsp_device::chip_write )
+void sns_rom21_necdsp_device::chip_write(offs_t offset, uint8_t data)
{
offset &= 0x1fff;
m_upd7725->snesdsp_write(offset < 0x1000, data);
@@ -215,7 +217,7 @@ WRITE8_MEMBER( sns_rom21_necdsp_device::chip_write )
// same as above but additional read/write handling for the add-on chip
-READ8_MEMBER( sns_rom_setadsp_device::chip_read )
+uint8_t sns_rom_setadsp_device::chip_read(offs_t offset)
{
if (offset >= 0x600000 && offset < 0x680000 && (offset & 0xffff) < 0x4000)
m_upd96050->snesdsp_read((offset & 0x01) ? false : true);
@@ -234,7 +236,7 @@ READ8_MEMBER( sns_rom_setadsp_device::chip_read )
}
-WRITE8_MEMBER( sns_rom_setadsp_device::chip_write )
+void sns_rom_setadsp_device::chip_write(offs_t offset, uint8_t data)
{
if (offset >= 0x600000 && offset < 0x680000 && (offset & 0xffff) < 0x4000)
{
@@ -265,12 +267,12 @@ WRITE8_MEMBER( sns_rom_setadsp_device::chip_write )
// DSP dump contains prg at offset 0 and data at offset 0x10000
-READ32_MEMBER( sns_rom_setadsp_device::setadsp_prg_r )
+uint32_t sns_rom_setadsp_device::setadsp_prg_r(offs_t offset)
{
return get_prg(&m_bios[0], offset);
}
-READ16_MEMBER( sns_rom_setadsp_device::setadsp_data_r )
+uint16_t sns_rom_setadsp_device::setadsp_data_r(offs_t offset)
{
return get_data(&m_bios[0], offset + 0x10000/2);
}
@@ -300,18 +302,20 @@ void sns_rom_setadsp_device::st01x_data_map(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(sns_rom_seta10dsp_device::device_add_mconfig)
- MCFG_DEVICE_ADD("dsp", UPD96050, 10000000)
- MCFG_DEVICE_PROGRAM_MAP(st01x_prg_map)
- MCFG_DEVICE_DATA_MAP(st01x_data_map)
-MACHINE_CONFIG_END
+void sns_rom_seta10dsp_device::device_add_mconfig(machine_config &config)
+{
+ UPD96050(config, m_upd96050, 10000000);
+ m_upd96050->set_addrmap(AS_PROGRAM, &sns_rom_seta10dsp_device::st01x_prg_map);
+ m_upd96050->set_addrmap(AS_DATA, &sns_rom_seta10dsp_device::st01x_data_map);
+}
-MACHINE_CONFIG_START(sns_rom_seta11dsp_device::device_add_mconfig)
- MCFG_DEVICE_ADD("dsp", UPD96050, 15000000)
- MCFG_DEVICE_PROGRAM_MAP(st01x_prg_map)
- MCFG_DEVICE_DATA_MAP(st01x_data_map)
-MACHINE_CONFIG_END
+void sns_rom_seta11dsp_device::device_add_mconfig(machine_config &config)
+{
+ UPD96050(config, m_upd96050, 15000000);
+ m_upd96050->set_addrmap(AS_PROGRAM, &sns_rom_seta11dsp_device::st01x_prg_map);
+ m_upd96050->set_addrmap(AS_DATA, &sns_rom_seta11dsp_device::st01x_data_map);
+}
// To make faster DSP access to its internal rom, let's install read banks and map m_bios there with correct byte order
@@ -411,53 +415,61 @@ sns_rom_seta11dsp_legacy_device::sns_rom_seta11dsp_legacy_device(const machine_c
}
-MACHINE_CONFIG_START(sns_rom20_necdsp1_legacy_device::device_add_mconfig)
- MCFG_DEVICE_ADD("dsp", UPD7725, 8000000)
- MCFG_DEVICE_PROGRAM_MAP(dsp_prg_map_lorom)
- MCFG_DEVICE_DATA_MAP(dsp_data_map_lorom)
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(sns_rom20_necdsp1b_legacy_device::device_add_mconfig)
- MCFG_DEVICE_ADD("dsp", UPD7725, 8000000)
- MCFG_DEVICE_PROGRAM_MAP(dsp_prg_map_lorom)
- MCFG_DEVICE_DATA_MAP(dsp_data_map_lorom)
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(sns_rom20_necdsp2_legacy_device::device_add_mconfig)
- MCFG_DEVICE_ADD("dsp", UPD7725, 8000000)
- MCFG_DEVICE_PROGRAM_MAP(dsp_prg_map_lorom)
- MCFG_DEVICE_DATA_MAP(dsp_data_map_lorom)
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(sns_rom20_necdsp3_legacy_device::device_add_mconfig)
- MCFG_DEVICE_ADD("dsp", UPD7725, 8000000)
- MCFG_DEVICE_PROGRAM_MAP(dsp_prg_map_lorom)
- MCFG_DEVICE_DATA_MAP(dsp_data_map_lorom)
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(sns_rom20_necdsp4_legacy_device::device_add_mconfig)
- MCFG_DEVICE_ADD("dsp", UPD7725, 8000000)
- MCFG_DEVICE_PROGRAM_MAP(dsp_prg_map_lorom)
- MCFG_DEVICE_DATA_MAP(dsp_data_map_lorom)
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(sns_rom21_necdsp1_legacy_device::device_add_mconfig)
- MCFG_DEVICE_ADD("dsp", UPD7725, 8000000)
- MCFG_DEVICE_PROGRAM_MAP(dsp_prg_map_hirom)
- MCFG_DEVICE_DATA_MAP(dsp_data_map_hirom)
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(sns_rom_seta10dsp_legacy_device::device_add_mconfig)
- MCFG_DEVICE_ADD("dsp", UPD96050, 10000000)
- MCFG_DEVICE_PROGRAM_MAP(st01x_prg_map)
- MCFG_DEVICE_DATA_MAP(st01x_data_map)
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(sns_rom_seta11dsp_legacy_device::device_add_mconfig)
- MCFG_DEVICE_ADD("dsp", UPD96050, 15000000)
- MCFG_DEVICE_PROGRAM_MAP(st01x_prg_map)
- MCFG_DEVICE_DATA_MAP(st01x_data_map)
-MACHINE_CONFIG_END
+void sns_rom20_necdsp1_legacy_device::device_add_mconfig(machine_config &config)
+{
+ UPD7725(config, m_upd7725, 8000000);
+ m_upd7725->set_addrmap(AS_PROGRAM, &sns_rom20_necdsp1_legacy_device::dsp_prg_map_lorom);
+ m_upd7725->set_addrmap(AS_DATA, &sns_rom20_necdsp1_legacy_device::dsp_data_map_lorom);
+}
+
+void sns_rom20_necdsp1b_legacy_device::device_add_mconfig(machine_config &config)
+{
+ UPD7725(config, m_upd7725, 8000000);
+ m_upd7725->set_addrmap(AS_PROGRAM, &sns_rom20_necdsp1b_legacy_device::dsp_prg_map_lorom);
+ m_upd7725->set_addrmap(AS_DATA, &sns_rom20_necdsp1b_legacy_device::dsp_data_map_lorom);
+}
+
+void sns_rom20_necdsp2_legacy_device::device_add_mconfig(machine_config &config)
+{
+ UPD7725(config, m_upd7725, 8000000);
+ m_upd7725->set_addrmap(AS_PROGRAM, &sns_rom20_necdsp2_legacy_device::dsp_prg_map_lorom);
+ m_upd7725->set_addrmap(AS_DATA, &sns_rom20_necdsp2_legacy_device::dsp_data_map_lorom);
+}
+
+void sns_rom20_necdsp3_legacy_device::device_add_mconfig(machine_config &config)
+{
+ UPD7725(config, m_upd7725, 8000000);
+ m_upd7725->set_addrmap(AS_PROGRAM, &sns_rom20_necdsp3_legacy_device::dsp_prg_map_lorom);
+ m_upd7725->set_addrmap(AS_DATA, &sns_rom20_necdsp3_legacy_device::dsp_data_map_lorom);
+}
+
+void sns_rom20_necdsp4_legacy_device::device_add_mconfig(machine_config &config)
+{
+ UPD7725(config, m_upd7725, 8000000);
+ m_upd7725->set_addrmap(AS_PROGRAM, &sns_rom20_necdsp4_legacy_device::dsp_prg_map_lorom);
+ m_upd7725->set_addrmap(AS_DATA, &sns_rom20_necdsp4_legacy_device::dsp_data_map_lorom);
+}
+
+void sns_rom21_necdsp1_legacy_device::device_add_mconfig(machine_config &config)
+{
+ UPD7725(config, m_upd7725, 8000000);
+ m_upd7725->set_addrmap(AS_PROGRAM, &sns_rom21_necdsp1_legacy_device::dsp_prg_map_hirom);
+ m_upd7725->set_addrmap(AS_DATA, &sns_rom21_necdsp1_legacy_device::dsp_data_map_hirom);
+}
+
+void sns_rom_seta10dsp_legacy_device::device_add_mconfig(machine_config &config)
+{
+ UPD96050(config, m_upd96050, 10000000);
+ m_upd96050->set_addrmap(AS_PROGRAM, &sns_rom_seta10dsp_legacy_device::st01x_prg_map);
+ m_upd96050->set_addrmap(AS_DATA, &sns_rom_seta10dsp_legacy_device::st01x_data_map);
+}
+
+void sns_rom_seta11dsp_legacy_device::device_add_mconfig(machine_config &config)
+{
+ UPD96050(config, m_upd96050, 15000000);
+ m_upd96050->set_addrmap(AS_PROGRAM, &sns_rom_seta11dsp_legacy_device::st01x_prg_map);
+ m_upd96050->set_addrmap(AS_DATA, &sns_rom_seta11dsp_legacy_device::st01x_data_map);
+}
ROM_START( snes_dsp1 )
diff --git a/src/devices/bus/snes/upd.h b/src/devices/bus/snes/upd.h
index dfc55466225..65dd780c725 100644
--- a/src/devices/bus/snes/upd.h
+++ b/src/devices/bus/snes/upd.h
@@ -28,18 +28,18 @@ protected:
virtual void speedup_addon_bios_access() override;
// additional reading and writing
- virtual DECLARE_READ8_MEMBER(chip_read) override;
- virtual DECLARE_WRITE8_MEMBER(chip_write) override;
+ virtual uint8_t chip_read(offs_t offset) override;
+ virtual void chip_write(offs_t offset, uint8_t data) override;
- virtual DECLARE_READ32_MEMBER(necdsp_prg_r);
- virtual DECLARE_READ16_MEMBER(necdsp_data_r);
+ uint32_t necdsp_prg_r(offs_t offset);
+ uint16_t necdsp_data_r(offs_t offset);
void dsp_data_map_lorom(address_map &map);
void dsp_prg_map_lorom(address_map &map);
-private:
required_device<upd7725_device> m_upd7725;
+private:
std::vector<uint32_t> m_dsp_prg;
std::vector<uint16_t> m_dsp_data;
};
@@ -62,18 +62,18 @@ protected:
virtual void speedup_addon_bios_access() override;
// additional reading and writing
- virtual DECLARE_READ8_MEMBER(chip_read) override;
- virtual DECLARE_WRITE8_MEMBER(chip_write) override;
+ virtual uint8_t chip_read(offs_t offset) override;
+ virtual void chip_write(offs_t offset, uint8_t data) override;
- virtual DECLARE_READ32_MEMBER(necdsp_prg_r);
- virtual DECLARE_READ16_MEMBER(necdsp_data_r);
+ uint32_t necdsp_prg_r(offs_t offset);
+ uint16_t necdsp_data_r(offs_t offset);
void dsp_data_map_hirom(address_map &map);
void dsp_prg_map_hirom(address_map &map);
-private:
required_device<upd7725_device> m_upd7725;
+private:
std::vector<uint32_t> m_dsp_prg;
std::vector<uint16_t> m_dsp_data;
};
@@ -93,18 +93,18 @@ protected:
virtual void device_start() override;
// additional reading and writing
- virtual DECLARE_READ8_MEMBER(chip_read) override;
- virtual DECLARE_WRITE8_MEMBER(chip_write) override;
+ virtual uint8_t chip_read(offs_t offset) override;
+ virtual void chip_write(offs_t offset, uint8_t data) override;
- virtual DECLARE_READ32_MEMBER(setadsp_prg_r);
- virtual DECLARE_READ16_MEMBER(setadsp_data_r);
+ virtual uint32_t setadsp_prg_r(offs_t offset);
+ virtual uint16_t setadsp_data_r(offs_t offset);
void st01x_data_map(address_map &map);
void st01x_prg_map(address_map &map);
-private:
required_device<upd96050_device> m_upd96050;
+private:
std::vector<uint32_t> m_dsp_prg;
std::vector<uint16_t> m_dsp_data;
};
diff --git a/src/devices/bus/snes_ctrl/ctrl.h b/src/devices/bus/snes_ctrl/ctrl.h
index 686db2f29e2..37db69537cc 100644
--- a/src/devices/bus/snes_ctrl/ctrl.h
+++ b/src/devices/bus/snes_ctrl/ctrl.h
@@ -51,7 +51,7 @@ public:
// construction/destruction
template <typename T>
snes_control_port_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
- : snes_control_port_device(mconfig, tag, owner, (uint32_t)0)
+ : snes_control_port_device(mconfig, tag, owner, 0)
{
option_reset();
opts(*this);
@@ -61,8 +61,8 @@ public:
snes_control_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
virtual ~snes_control_port_device();
- template <typename Object> void set_onscreen_callback(Object &&cb) { m_onscreen_cb = std::forward<Object>(cb); }
- template <typename Object> void set_gunlatch_callback(Object &&cb) { m_gunlatch_cb = std::forward<Object>(cb); }
+ template <typename... T> void set_onscreen_callback(T &&... args) { m_onscreen_cb = snesctrl_onscreen_delegate(std::forward<T>(args)...); }
+ template <typename... T> void set_gunlatch_callback(T &&... args) { m_gunlatch_cb = snesctrl_gunlatch_delegate(std::forward<T>(args)...); }
uint8_t read_pin4();
uint8_t read_pin5();
@@ -87,22 +87,6 @@ protected:
// device type definition
DECLARE_DEVICE_TYPE(SNES_CONTROL_PORT, snes_control_port_device)
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_SNES_CONTROL_PORT_ADD(_tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, SNES_CONTROL_PORT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-#define MCFG_SNESCTRL_ONSCREEN_CB(_class, _method) \
- downcast<snes_control_port_device &>(*device).set_onscreen_callback(snesctrl_onscreen_delegate(&_class::_method, #_class "::" #_method, this));
-
-#define MCFG_SNESCTRL_GUNLATCH_CB(_class, _method) \
- downcast<snes_control_port_device &>(*device).set_gunlatch_callback(snesctrl_gunlatch_delegate(&_class::_method, #_class "::" #_method, this));
-
-
void snes_control_port_devices(device_slot_interface &device);
diff --git a/src/devices/bus/snes_ctrl/miracle.cpp b/src/devices/bus/snes_ctrl/miracle.cpp
index a20a6743709..a0d9c70874c 100644
--- a/src/devices/bus/snes_ctrl/miracle.cpp
+++ b/src/devices/bus/snes_ctrl/miracle.cpp
@@ -23,12 +23,12 @@
DEFINE_DEVICE_TYPE(SNES_MIRACLE, snes_miracle_device, "snes_miracle", "Miracle Piano SNES Cable")
-MACHINE_CONFIG_START(snes_miracle_device::device_add_mconfig)
- MCFG_MIDI_PORT_ADD("mdin", midiin_slot, "midiin")
- MCFG_MIDI_RX_HANDLER(WRITELINE(*this, snes_miracle_device, rx_w))
+void snes_miracle_device::device_add_mconfig(machine_config &config)
+{
+ MIDI_PORT(config, "mdin", midiin_slot, "midiin").rxd_handler().set(FUNC(snes_miracle_device::rx_w));
- MCFG_MIDI_PORT_ADD("mdout", midiout_slot, "midiout")
-MACHINE_CONFIG_END
+ MIDI_PORT(config, "mdout", midiout_slot, "midiout");
+}
//-------------------------------------------------
diff --git a/src/devices/bus/snes_ctrl/multitap.cpp b/src/devices/bus/snes_ctrl/multitap.cpp
index 262ef56fd26..ef630439276 100644
--- a/src/devices/bus/snes_ctrl/multitap.cpp
+++ b/src/devices/bus/snes_ctrl/multitap.cpp
@@ -47,12 +47,13 @@ static void snes_multitap(device_slot_interface &device)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(snes_multitap_device::device_add_mconfig)
- MCFG_SNES_CONTROL_PORT_ADD("port1", snes_multitap, "joypad")
- MCFG_SNES_CONTROL_PORT_ADD("port2", snes_multitap, "joypad")
- MCFG_SNES_CONTROL_PORT_ADD("port3", snes_multitap, "joypad")
- MCFG_SNES_CONTROL_PORT_ADD("port4", snes_multitap, "joypad")
-MACHINE_CONFIG_END
+void snes_multitap_device::device_add_mconfig(machine_config &config)
+{
+ SNES_CONTROL_PORT(config, m_port1, snes_multitap, "joypad");
+ SNES_CONTROL_PORT(config, m_port2, snes_multitap, "joypad");
+ SNES_CONTROL_PORT(config, m_port3, snes_multitap, "joypad");
+ SNES_CONTROL_PORT(config, m_port4, snes_multitap, "joypad");
+}
//**************************************************************************
diff --git a/src/devices/bus/spc1000/exp.h b/src/devices/bus/spc1000/exp.h
index b281e7a560c..d10fe516401 100644
--- a/src/devices/bus/spc1000/exp.h
+++ b/src/devices/bus/spc1000/exp.h
@@ -28,6 +28,15 @@ class spc1000_exp_device : public device_t, public device_slot_interface
{
public:
// construction/destruction
+ template <typename T>
+ spc1000_exp_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts)
+ : spc1000_exp_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ opts(*this);
+ set_default_option(nullptr);
+ set_fixed(false);
+ }
+
spc1000_exp_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~spc1000_exp_device();
diff --git a/src/devices/bus/spectrum/beta.cpp b/src/devices/bus/spectrum/beta.cpp
new file mode 100644
index 00000000000..e48bed34e52
--- /dev/null
+++ b/src/devices/bus/spectrum/beta.cpp
@@ -0,0 +1,256 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/*********************************************************************
+
+ Technology Research Beta 128 Disk interface
+
+*********************************************************************/
+
+#include "emu.h"
+#include "beta.h"
+
+
+/***************************************************************************
+ DEVICE DEFINITIONS
+***************************************************************************/
+
+DEFINE_DEVICE_TYPE(SPECTRUM_BETA128, spectrum_beta128_device, "spectrum_beta128", "TR Beta 128 Disk Interface")
+
+
+//-------------------------------------------------
+// INPUT_PORTS( beta128 )
+//-------------------------------------------------
+
+INPUT_PORTS_START(beta128)
+ PORT_START("BUTTON")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("Magic Button") PORT_CODE(KEYCODE_F12) PORT_CHANGED_MEMBER(DEVICE_SELF, spectrum_beta128_device, magic_button, nullptr)
+
+ PORT_START("SWITCH")
+ PORT_CONFNAME(0x03, 0x01, "System Switch") //PORT_CHANGED_MEMBER(DEVICE_SELF, spectrum_beta128_device, switch_changed, 0)
+ PORT_CONFSETTING(0x00, "Off (128)")
+ PORT_CONFSETTING(0x01, "Normal (auto-boot)")
+ //PORT_CONFSETTING(0x02, "Reset") // TODO: implement RESET callback
+INPUT_PORTS_END
+
+//-------------------------------------------------
+// input_ports - device-specific input ports
+//-------------------------------------------------
+
+ioport_constructor spectrum_beta128_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME(beta128);
+}
+
+//-------------------------------------------------
+// SLOT_INTERFACE( beta_floppies )
+//-------------------------------------------------
+
+static void beta_floppies(device_slot_interface &device)
+{
+ device.option_add("525qd", FLOPPY_525_QD);
+}
+
+//-------------------------------------------------
+// floppy_format_type floppy_formats
+//-------------------------------------------------
+
+FLOPPY_FORMATS_MEMBER(spectrum_beta128_device::floppy_formats)
+ FLOPPY_TRD_FORMAT
+FLOPPY_FORMATS_END
+
+//-------------------------------------------------
+// ROM( beta )
+//-------------------------------------------------
+
+ROM_START(beta128)
+ ROM_REGION(0x4000, "rom", 0)
+ ROM_DEFAULT_BIOS("trd504")
+ ROM_SYSTEM_BIOS(0, "trd501", "TR-DOS v5.01")
+ ROMX_LOAD("trd501.rom", 0x0000, 0x4000, CRC(3e3cdd4c) SHA1(8303ba0cc79daa6c04cd1e6ce27e8b6886a3f0de), ROM_BIOS(0))
+ ROM_SYSTEM_BIOS(1, "trd503", "TR-DOS v5.03")
+ ROMX_LOAD("trd503.rom", 0x0000, 0x4000, CRC(10751aba) SHA1(21695e3f2a8f796386ce66eea8a246b0ac44810c), ROM_BIOS(1))
+ ROM_SYSTEM_BIOS(2, "trd504", "TR-DOS v5.04")
+ ROMX_LOAD("trd504.rom", 0x0000, 0x4000, CRC(ba310874) SHA1(05e55e37df8eee6c68601ba9cf6c92195852ce3f), ROM_BIOS(2))
+ROM_END
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void spectrum_beta128_device::device_add_mconfig(machine_config &config)
+{
+ FD1793(config, m_fdc, 4_MHz_XTAL / 4);
+ FLOPPY_CONNECTOR(config, "fdc:0", beta_floppies, "525qd", spectrum_beta128_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, "fdc:1", beta_floppies, "525qd", spectrum_beta128_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, "fdc:2", beta_floppies, nullptr, spectrum_beta128_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, "fdc:3", beta_floppies, nullptr, spectrum_beta128_device::floppy_formats).enable_sound(true);
+
+ // passthru
+ SPECTRUM_EXPANSION_SLOT(config, m_exp, spectrum_expansion_devices, nullptr);
+ m_exp->irq_handler().set(DEVICE_SELF_OWNER, FUNC(spectrum_expansion_slot_device::irq_w));
+ m_exp->nmi_handler().set(DEVICE_SELF_OWNER, FUNC(spectrum_expansion_slot_device::nmi_w));
+}
+
+const tiny_rom_entry *spectrum_beta128_device::device_rom_region() const
+{
+ return ROM_NAME(beta128);
+}
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// spectrum_beta128_device - constructor
+//-------------------------------------------------
+
+spectrum_beta128_device::spectrum_beta128_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, SPECTRUM_BETA128, tag, owner, clock)
+ , device_spectrum_expansion_interface(mconfig, *this)
+ , m_rom(*this, "rom")
+ , m_fdc(*this, "fdc")
+ , m_floppy(*this, "fdc:%u", 0)
+ , m_exp(*this, "exp")
+ , m_switch(*this, "SWITCH")
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void spectrum_beta128_device::device_start()
+{
+ save_item(NAME(m_romcs));
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void spectrum_beta128_device::device_reset()
+{
+ // Page in the ROM if auto-boot is selected
+ if (m_switch->read() == 0x01)
+ m_romcs = 1;
+ else
+ m_romcs = 0;
+}
+
+//**************************************************************************
+// IMPLEMENTATION
+//**************************************************************************
+
+READ_LINE_MEMBER(spectrum_beta128_device::romcs)
+{
+ return m_romcs | m_exp->romcs();
+}
+
+
+void spectrum_beta128_device::opcode_fetch(offs_t offset)
+{
+ m_exp->opcode_fetch(offset);
+
+ if (!machine().side_effects_disabled())
+ {
+ if ((offset == 0x0066) || (offset & 0xff00) == 0x3d00)
+ m_romcs = 1;
+ else if (offset >= 0x4000)
+ m_romcs = 0;
+ }
+}
+
+uint8_t spectrum_beta128_device::iorq_r(offs_t offset)
+{
+ uint8_t data = m_exp->iorq_r(offset);
+
+ if (m_romcs)
+ {
+ switch (offset & 0xff)
+ {
+ case 0x1f: case 0x3f: case 0x5f: case 0x7f:
+ data = m_fdc->read((offset >> 5) & 0x03);
+ break;
+
+ case 0xff:
+ data &= 0x3f; // actually open bus
+ data |= m_fdc->drq_r() ? 0x40 : 0;
+ data |= m_fdc->intrq_r() ? 0x80 : 0;
+ break;
+ }
+ }
+ return data;
+}
+
+void spectrum_beta128_device::iorq_w(offs_t offset, uint8_t data)
+{
+ if (m_romcs)
+ {
+ switch (offset & 0xff)
+ {
+ case 0x1f: case 0x3f: case 0x5f: case 0x7f:
+ m_fdc->write((offset >> 5) & 0x03, data);
+ break;
+
+ case 0xff:
+ floppy_image_device* floppy = m_floppy[data & 3]->get_device();
+
+ m_fdc->set_floppy(floppy);
+ if (floppy)
+ floppy->ss_w(BIT(data, 4) ? 0 : 1);
+ m_fdc->dden_w(BIT(data, 6));
+
+ // bit 3 connected to pin 23 "HLT" of FDC and via diode to INDEX
+ //m_fdc->hlt_w(BIT(data, 3)); // not handled in current wd_fdc
+
+ if (BIT(data, 2) == 0) // reset
+ {
+ m_fdc->reset();
+ if (floppy)
+ floppy->mon_w(ASSERT_LINE);
+ }
+ else
+ {
+ // TODO: implement correct motor control, FDD motor and RDY FDC pin controlled by HLD pin of FDC
+ if (floppy)
+ floppy->mon_w(CLEAR_LINE);
+ }
+ break;
+ }
+ }
+ m_exp->iorq_w(offset, data);
+}
+
+uint8_t spectrum_beta128_device::mreq_r(offs_t offset)
+{
+ uint8_t data = 0xff;
+
+ if (m_romcs)
+ {
+ data = m_rom->base()[offset & 0x3fff];
+ }
+
+ if (m_exp->romcs())
+ data &= m_exp->mreq_r(offset);
+
+ return data;
+}
+
+void spectrum_beta128_device::mreq_w(offs_t offset, uint8_t data)
+{
+ if (m_exp->romcs())
+ m_exp->mreq_w(offset, data);
+}
+
+INPUT_CHANGED_MEMBER(spectrum_beta128_device::magic_button)
+{
+ if (newval && !oldval)
+ {
+ m_slot->nmi_w(ASSERT_LINE);
+ }
+ else
+ {
+ m_slot->nmi_w(CLEAR_LINE);
+ }
+}
diff --git a/src/devices/bus/spectrum/beta.h b/src/devices/bus/spectrum/beta.h
new file mode 100644
index 00000000000..b759201d35d
--- /dev/null
+++ b/src/devices/bus/spectrum/beta.h
@@ -0,0 +1,64 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/*********************************************************************
+
+ Technology Research Beta 128 Disk interface
+
+*********************************************************************/
+#ifndef MAME_BUS_SPECTRUM_BETA_H
+#define MAME_BUS_SPECTRUM_BETA_H
+
+#include "exp.h"
+#include "softlist.h"
+#include "imagedev/floppy.h"
+#include "machine/wd_fdc.h"
+#include "formats/trd_dsk.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+class spectrum_beta128_device :
+ public device_t,
+ public device_spectrum_expansion_interface
+
+{
+public:
+ // construction/destruction
+ spectrum_beta128_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ DECLARE_FLOPPY_FORMATS(floppy_formats);
+ DECLARE_INPUT_CHANGED_MEMBER(magic_button);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+ virtual ioport_constructor device_input_ports() const override;
+
+ virtual void opcode_fetch(offs_t offset) override;
+ virtual uint8_t mreq_r(offs_t offset) override;
+ virtual void mreq_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t iorq_r(offs_t offset) override;
+ virtual void iorq_w(offs_t offset, uint8_t data) override;
+ virtual DECLARE_READ_LINE_MEMBER(romcs) override;
+
+ required_memory_region m_rom;
+ required_device<fd1793_device> m_fdc;
+ required_device_array<floppy_connector, 4> m_floppy;
+ required_device<spectrum_expansion_slot_device> m_exp;
+ required_ioport m_switch;
+
+ int m_romcs;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(SPECTRUM_BETA128, spectrum_beta128_device)
+
+
+#endif // MAME_BUS_SPECTRUM_BETA_H
diff --git a/src/devices/bus/spectrum/exp.cpp b/src/devices/bus/spectrum/exp.cpp
index 73e1d4a3a9a..850b9f88384 100644
--- a/src/devices/bus/spectrum/exp.cpp
+++ b/src/devices/bus/spectrum/exp.cpp
@@ -43,7 +43,6 @@ device_spectrum_expansion_interface::device_spectrum_expansion_interface(const m
spectrum_expansion_slot_device::spectrum_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, SPECTRUM_EXPANSION_SLOT, tag, owner, clock),
device_slot_interface(mconfig, *this),
- m_io(nullptr),
m_card(nullptr),
m_irq_handler(*this),
m_nmi_handler(*this)
@@ -87,46 +86,57 @@ void spectrum_expansion_slot_device::device_reset()
}
//-------------------------------------------------
-// set_io_space - set address space we are attached to
+// romcs
+//-------------------------------------------------
+
+READ_LINE_MEMBER(spectrum_expansion_slot_device::romcs)
+{
+ if (m_card)
+ return m_card->romcs();
+ else
+ return 0;
+}
+
+//-------------------------------------------------
+// fetch_r
//-------------------------------------------------
-void spectrum_expansion_slot_device::set_io_space(address_space *io)
+void spectrum_expansion_slot_device::opcode_fetch(offs_t offset)
{
- m_io = io;
+ if (m_card)
+ m_card->opcode_fetch(offset);
}
//-------------------------------------------------
-// port_fe_r
+// iorq_r
//-------------------------------------------------
-READ8_MEMBER(spectrum_expansion_slot_device::port_fe_r)
+uint8_t spectrum_expansion_slot_device::iorq_r(offs_t offset)
{
if (m_card)
- return m_card->port_fe_r(space, offset);
+ return m_card->iorq_r(offset);
else
return 0xff;
}
//-------------------------------------------------
-// romcs
+// iorq_w
//-------------------------------------------------
-READ_LINE_MEMBER(spectrum_expansion_slot_device::romcs)
+void spectrum_expansion_slot_device::iorq_w(offs_t offset, uint8_t data)
{
if (m_card)
- return m_card->romcs();
- else
- return 0;
+ m_card->iorq_w(offset, data);
}
//-------------------------------------------------
// mreq_r
//-------------------------------------------------
-READ8_MEMBER(spectrum_expansion_slot_device::mreq_r)
+uint8_t spectrum_expansion_slot_device::mreq_r(offs_t offset)
{
if (m_card)
- return m_card->mreq_r(space, offset);
+ return m_card->mreq_r(offset);
else
return 0xff;
}
@@ -135,10 +145,10 @@ READ8_MEMBER(spectrum_expansion_slot_device::mreq_r)
// mreq_w
//-------------------------------------------------
-WRITE8_MEMBER(spectrum_expansion_slot_device::mreq_w)
+void spectrum_expansion_slot_device::mreq_w(offs_t offset, uint8_t data)
{
if (m_card)
- m_card->mreq_w(space, offset, data);
+ m_card->mreq_w(offset, data);
}
@@ -148,14 +158,20 @@ WRITE8_MEMBER(spectrum_expansion_slot_device::mreq_w)
// slot devices
+#include "beta.h"
+//#include "disciple.h"
#include "intf1.h"
#include "intf2.h"
#include "fuller.h"
#include "kempjoy.h"
#include "melodik.h"
+#include "mface.h"
#include "mikroplus.h"
+#include "opus.h"
#include "plus2test.h"
+//#include "plusd.h"
#include "protek.h"
+#include "specdrum.h"
#include "uslot.h"
#include "usource.h"
#include "uspeech.h"
@@ -163,13 +179,21 @@ WRITE8_MEMBER(spectrum_expansion_slot_device::mreq_w)
void spectrum_expansion_devices(device_slot_interface &device)
{
+ device.option_add("beta128", SPECTRUM_BETA128);
+ //device.option_add("disciple", SPECTRUM_DISCIPLE);
device.option_add("intf1", SPECTRUM_INTF1);
device.option_add("intf2", SPECTRUM_INTF2);
device.option_add("fuller", SPECTRUM_FULLER);
device.option_add("kempjoy", SPECTRUM_KEMPJOY);
device.option_add("melodik", SPECTRUM_MELODIK);
+ device.option_add("mface1", SPECTRUM_MFACE1);
+ device.option_add("mface128", SPECTRUM_MFACE128);
device.option_add("mikroplus", SPECTRUM_MIKROPLUS);
+ device.option_add("mprint", SPECTRUM_MPRINT);
+ device.option_add("opus", SPECTRUM_OPUS);
+ //device.option_add("plusd", SPECTRUM_PLUSD);
device.option_add("protek", SPECTRUM_PROTEK);
+ device.option_add("specdrum", SPECTRUM_SPECDRUM);
device.option_add("uslot", SPECTRUM_USLOT);
device.option_add("usource", SPECTRUM_USOURCE);
device.option_add("uspeech", SPECTRUM_USPEECH);
@@ -177,15 +201,22 @@ void spectrum_expansion_devices(device_slot_interface &device)
void spec128_expansion_devices(device_slot_interface &device)
{
+ device.option_add("beta128", SPECTRUM_BETA128);
+ //device.option_add("disciple", SPECTRUM_DISCIPLE);
device.option_add("intf1", SPECTRUM_INTF1);
device.option_add("intf2", SPECTRUM_INTF2);
device.option_add("kempjoy", SPECTRUM_KEMPJOY);
+ device.option_add("mface128", SPECTRUM_MFACE128);
device.option_add("mikroplus", SPECTRUM_MIKROPLUS);
+ device.option_add("mprint", SPECTRUM_MPRINT);
+ device.option_add("opus", SPECTRUM_OPUS);
device.option_add("plus2test", SPECTRUM_PLUS2TEST);
device.option_add("protek", SPECTRUM_PROTEK);
+ device.option_add("specdrum", SPECTRUM_SPECDRUM);
}
void specpls3_expansion_devices(device_slot_interface &device)
{
+ device.option_add("mface3", SPECTRUM_MFACE3);
}
diff --git a/src/devices/bus/spectrum/exp.h b/src/devices/bus/spectrum/exp.h
index 1d8eb5f21f2..aee398d1ab4 100644
--- a/src/devices/bus/spectrum/exp.h
+++ b/src/devices/bus/spectrum/exp.h
@@ -69,22 +69,20 @@ public:
spectrum_expansion_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock = 0);
- void set_io_space(address_space *io);
-
// callbacks
auto irq_handler() { return m_irq_handler.bind(); }
auto nmi_handler() { return m_nmi_handler.bind(); }
- DECLARE_READ8_MEMBER( mreq_r );
- DECLARE_WRITE8_MEMBER( mreq_w );
- DECLARE_READ8_MEMBER( port_fe_r );
+ void opcode_fetch(offs_t offset);
+ uint8_t mreq_r(offs_t offset);
+ void mreq_w(offs_t offset, uint8_t data);
+ uint8_t iorq_r(offs_t offset);
+ void iorq_w(offs_t offset, uint8_t data);
DECLARE_READ_LINE_MEMBER( romcs );
DECLARE_WRITE_LINE_MEMBER( irq_w ) { m_irq_handler(state); }
DECLARE_WRITE_LINE_MEMBER( nmi_w ) { m_nmi_handler(state); }
- address_space *m_io;
-
protected:
// device-level overrides
virtual void device_validity_check(validity_checker &valid) const override;
@@ -108,14 +106,14 @@ public:
device_spectrum_expansion_interface(const machine_config &mconfig, device_t &device);
// reading and writing
- virtual DECLARE_READ8_MEMBER(mreq_r) { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(mreq_w) { }
- virtual DECLARE_READ8_MEMBER(port_fe_r) { return 0xff; }
+ virtual void opcode_fetch(offs_t offset) { };
+ virtual uint8_t mreq_r(offs_t offset) { return 0xff; }
+ virtual void mreq_w(offs_t offset, uint8_t data) { }
+ virtual uint8_t iorq_r(offs_t offset) { return 0xff; }
+ virtual void iorq_w(offs_t offset, uint8_t data) { }
virtual DECLARE_READ_LINE_MEMBER(romcs) { return 0; }
protected:
- address_space &io_space() { return *m_slot->m_io; }
-
spectrum_expansion_slot_device *m_slot;
};
diff --git a/src/devices/bus/spectrum/fuller.cpp b/src/devices/bus/spectrum/fuller.cpp
index 36275ccc4cd..636967cbdd6 100644
--- a/src/devices/bus/spectrum/fuller.cpp
+++ b/src/devices/bus/spectrum/fuller.cpp
@@ -84,51 +84,62 @@ void spectrum_fuller_device::device_start()
}
-//-------------------------------------------------
-// device_reset - device-specific reset
-//-------------------------------------------------
-
-void spectrum_fuller_device::device_reset()
-{
- m_exp->set_io_space(&io_space());
-
- io_space().install_write_handler(0x3f, 0x3f, 0, 0xff00, 0, write8_delegate(FUNC(ay8910_device::address_w), m_psg.target()));
- io_space().install_readwrite_handler(0x5f, 0x5f, 0, 0xff00, 0, read8_delegate(FUNC(ay8910_device::data_r), m_psg.target()), write8_delegate(FUNC(ay8910_device::data_w), m_psg.target()));
- io_space().install_read_handler(0x7f, 0x7f, 0, 0xff00, 0, read8_delegate(FUNC(spectrum_fuller_device::joystick_r), this));
-}
-
-
//**************************************************************************
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(spectrum_fuller_device::joystick_r)
-{
- return m_joy->read() | (0xff ^ 0x8f);
-}
-
READ_LINE_MEMBER(spectrum_fuller_device::romcs)
{
return m_exp->romcs();
}
-READ8_MEMBER(spectrum_fuller_device::mreq_r)
+void spectrum_fuller_device::opcode_fetch(offs_t offset)
{
- return m_exp->mreq_r(space, offset);
+ m_exp->opcode_fetch(offset);
}
-WRITE8_MEMBER(spectrum_fuller_device::mreq_w)
+uint8_t spectrum_fuller_device::mreq_r(offs_t offset)
{
+ uint8_t data = 0xff;
+
if (m_exp->romcs())
- m_exp->mreq_w(space, offset, data);
+ data &= m_exp->mreq_r(offset);
+
+ return data;
}
-READ8_MEMBER(spectrum_fuller_device::port_fe_r)
+void spectrum_fuller_device::mreq_w(offs_t offset, uint8_t data)
{
- uint8_t data = 0xff;
-
if (m_exp->romcs())
- data &= m_exp->port_fe_r(space, offset);
+ m_exp->mreq_w(offset, data);
+}
+uint8_t spectrum_fuller_device::iorq_r(offs_t offset)
+{
+ uint8_t data = m_exp->iorq_r(offset);
+
+ switch (offset & 0xff)
+ {
+ case 0x5f:
+ data &= m_psg->data_r();
+ break;
+ case 0x7f:
+ data &= m_joy->read() | (0xff ^ 0x8f);
+ break;
+ }
return data;
}
+
+void spectrum_fuller_device::iorq_w(offs_t offset, uint8_t data)
+{
+ switch (offset & 0xff)
+ {
+ case 0x3f:
+ m_psg->address_w(data);
+ break;
+ case 0x5f:
+ m_psg->data_w(data);
+ break;
+ }
+ m_exp->iorq_w(offset, data);
+}
diff --git a/src/devices/bus/spectrum/fuller.h b/src/devices/bus/spectrum/fuller.h
index b0431121424..12f7805eff0 100644
--- a/src/devices/bus/spectrum/fuller.h
+++ b/src/devices/bus/spectrum/fuller.h
@@ -32,20 +32,19 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
- virtual void device_reset() override;
// optional information overrides
virtual void device_add_mconfig(machine_config &config) override;
virtual ioport_constructor device_input_ports() const override;
- virtual DECLARE_READ8_MEMBER(mreq_r) override;
- virtual DECLARE_WRITE8_MEMBER(mreq_w) override;
- virtual DECLARE_READ8_MEMBER(port_fe_r) override;
+ virtual void opcode_fetch(offs_t offset) override;
+ virtual uint8_t mreq_r(offs_t offset) override;
+ virtual void mreq_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t iorq_r(offs_t offset) override;
+ virtual void iorq_w(offs_t offset, uint8_t data) override;
virtual DECLARE_READ_LINE_MEMBER(romcs) override;
private:
- DECLARE_READ8_MEMBER(joystick_r);
-
required_device<spectrum_expansion_slot_device> m_exp;
required_device<ay8910_device> m_psg;
required_ioport m_joy;
diff --git a/src/devices/bus/spectrum/intf1.cpp b/src/devices/bus/spectrum/intf1.cpp
index d324e931e2c..344aaf61841 100644
--- a/src/devices/bus/spectrum/intf1.cpp
+++ b/src/devices/bus/spectrum/intf1.cpp
@@ -85,6 +85,7 @@ spectrum_intf1_device::spectrum_intf1_device(const machine_config &mconfig, cons
void spectrum_intf1_device::device_start()
{
+ save_item(NAME(m_romcs));
}
//-------------------------------------------------
@@ -93,8 +94,6 @@ void spectrum_intf1_device::device_start()
void spectrum_intf1_device::device_reset()
{
- m_exp->set_io_space(&io_space());
-
m_romcs = 0;
}
@@ -107,45 +106,49 @@ READ_LINE_MEMBER(spectrum_intf1_device::romcs)
return m_romcs | m_exp->romcs();
}
-READ8_MEMBER(spectrum_intf1_device::mreq_r)
+void spectrum_intf1_device::opcode_fetch(offs_t offset)
{
- uint8_t temp;
- uint8_t data = 0xff;
+ m_exp->opcode_fetch(offset);
if (!machine().side_effects_disabled())
{
- if (offset == 0x0008 || offset == 0x1708)
+ switch (offset)
+ {
+ case 0x0008: case 0x1708:
m_romcs = 1;
+ break;
+ case 0x0700:
+ m_romcs = 0;
+ break;
+ }
}
+}
- temp = m_exp->mreq_r(space, offset);
- if (m_exp->romcs())
- data &= temp;
+uint8_t spectrum_intf1_device::mreq_r(offs_t offset)
+{
+ uint8_t data = 0xff;
if (m_romcs)
data &= m_rom->base()[offset & 0x1fff];
- if (!machine().side_effects_disabled())
- {
- if (offset == 0x0700)
- m_romcs = 0;
- }
+ if (m_exp->romcs())
+ data &= m_exp->mreq_r(offset);
return data;
}
-WRITE8_MEMBER(spectrum_intf1_device::mreq_w)
+void spectrum_intf1_device::mreq_w(offs_t offset, uint8_t data)
{
if (m_exp->romcs())
- m_exp->mreq_w(space, offset, data);
+ m_exp->mreq_w(offset, data);
}
-READ8_MEMBER(spectrum_intf1_device::port_fe_r)
+uint8_t spectrum_intf1_device::iorq_r(offs_t offset)
{
- uint8_t data = 0xff;
-
- if (m_exp->romcs())
- data &= m_exp->port_fe_r(space, offset);
+ return m_exp->iorq_r(offset);
+}
- return data;
+void spectrum_intf1_device::iorq_w(offs_t offset, uint8_t data)
+{
+ m_exp->iorq_w(offset, data);
}
diff --git a/src/devices/bus/spectrum/intf1.h b/src/devices/bus/spectrum/intf1.h
index 5a21cd9927d..6b0ddb32804 100644
--- a/src/devices/bus/spectrum/intf1.h
+++ b/src/devices/bus/spectrum/intf1.h
@@ -36,9 +36,11 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
- virtual DECLARE_READ8_MEMBER(mreq_r) override;
- virtual DECLARE_WRITE8_MEMBER(mreq_w) override;
- virtual DECLARE_READ8_MEMBER(port_fe_r) override;
+ virtual void opcode_fetch(offs_t offset) override;
+ virtual uint8_t mreq_r(offs_t offset) override;
+ virtual void mreq_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t iorq_r(offs_t offset) override;
+ virtual void iorq_w(offs_t offset, uint8_t data) override;
virtual DECLARE_READ_LINE_MEMBER(romcs) override;
private:
diff --git a/src/devices/bus/spectrum/intf2.cpp b/src/devices/bus/spectrum/intf2.cpp
index 2700c2787d0..789be29717d 100644
--- a/src/devices/bus/spectrum/intf2.cpp
+++ b/src/devices/bus/spectrum/intf2.cpp
@@ -117,7 +117,7 @@ READ_LINE_MEMBER(spectrum_intf2_device::romcs)
return 0;
}
-READ8_MEMBER(spectrum_intf2_device::mreq_r)
+uint8_t spectrum_intf2_device::mreq_r(offs_t offset)
{
if (m_cart && m_cart->exists())
return m_cart->get_rom_base()[offset & 0x3fff];
@@ -125,17 +125,20 @@ READ8_MEMBER(spectrum_intf2_device::mreq_r)
return 0xff;
}
-READ8_MEMBER(spectrum_intf2_device::port_fe_r)
+uint8_t spectrum_intf2_device::iorq_r(offs_t offset)
{
uint8_t data = 0xff;
- uint8_t lines = offset >> 8;
-
- if ((lines & 8) == 0)
- data = m_exp_line3->read() | (0xff ^ 0x1f);
+ switch (offset & 0xff)
+ {
+ case 0xfe:
+ if (((offset >> 8) & 8) == 0)
+ data = m_exp_line3->read() | (0xff ^ 0x1f);
- if ((lines & 16) == 0)
- data = m_exp_line4->read() | (0xff ^ 0x1f);
+ if (((offset >> 8) & 16) == 0)
+ data = m_exp_line4->read() | (0xff ^ 0x1f);
+ break;
+ }
return data;
}
diff --git a/src/devices/bus/spectrum/intf2.h b/src/devices/bus/spectrum/intf2.h
index 826e4b8fb3e..fd131112a3c 100644
--- a/src/devices/bus/spectrum/intf2.h
+++ b/src/devices/bus/spectrum/intf2.h
@@ -35,8 +35,8 @@ protected:
virtual ioport_constructor device_input_ports() const override;
virtual DECLARE_READ_LINE_MEMBER(romcs) override;
- virtual DECLARE_READ8_MEMBER(mreq_r) override;
- virtual DECLARE_READ8_MEMBER(port_fe_r) override;
+ virtual uint8_t mreq_r(offs_t offset) override;
+ virtual uint8_t iorq_r(offs_t offset) override;
private:
image_init_result load_cart(device_image_interface &image, generic_slot_device *slot);
diff --git a/src/devices/bus/spectrum/kempjoy.cpp b/src/devices/bus/spectrum/kempjoy.cpp
index ac7d5698bd7..a433d615e8c 100644
--- a/src/devices/bus/spectrum/kempjoy.cpp
+++ b/src/devices/bus/spectrum/kempjoy.cpp
@@ -65,21 +65,17 @@ void spectrum_kempjoy_device::device_start()
}
-//-------------------------------------------------
-// device_reset - device-specific reset
-//-------------------------------------------------
-
-void spectrum_kempjoy_device::device_reset()
-{
- io_space().install_read_handler(0x1f, 0x1f, 0, 0xff00, 0, read8_delegate(FUNC(spectrum_kempjoy_device::joystick_r), this));
-}
-
-
//**************************************************************************
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(spectrum_kempjoy_device::joystick_r)
+uint8_t spectrum_kempjoy_device::iorq_r(offs_t offset)
{
- return m_joy->read() & 0x1f;
+ uint8_t data = 0xff;
+
+ if (offset == 0x1f)
+ {
+ data = m_joy->read() & 0x1f;
+ }
+ return data;
}
diff --git a/src/devices/bus/spectrum/kempjoy.h b/src/devices/bus/spectrum/kempjoy.h
index 555fb67643a..466dceb7517 100644
--- a/src/devices/bus/spectrum/kempjoy.h
+++ b/src/devices/bus/spectrum/kempjoy.h
@@ -31,14 +31,13 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
- virtual void device_reset() override;
// optional information overrides
virtual ioport_constructor device_input_ports() const override;
-private:
- DECLARE_READ8_MEMBER(joystick_r);
+ virtual uint8_t iorq_r(offs_t offset) override;
+private:
required_ioport m_joy;
};
diff --git a/src/devices/bus/spectrum/melodik.cpp b/src/devices/bus/spectrum/melodik.cpp
index 8303d4c436c..f6abc0f98d6 100644
--- a/src/devices/bus/spectrum/melodik.cpp
+++ b/src/devices/bus/spectrum/melodik.cpp
@@ -60,18 +60,6 @@ void spectrum_melodik_device::device_start()
}
-//-------------------------------------------------
-// device_reset - device-specific reset
-//-------------------------------------------------
-
-void spectrum_melodik_device::device_reset()
-{
- m_exp->set_io_space(&io_space());
-
- io_space().install_write_handler(0x8000, 0x8000, 0, 0x3ffd, 0, write8_delegate(FUNC(ay8910_device::address_w), m_psg.target()));
- io_space().install_readwrite_handler(0xc000, 0xc000, 0, 0x3ffd, 0, read8_delegate(FUNC(ay8910_device::data_r), m_psg.target()), write8_delegate(FUNC(ay8910_device::data_w), m_psg.target()));
-}
-
//**************************************************************************
// IMPLEMENTATION
//**************************************************************************
@@ -81,23 +69,50 @@ READ_LINE_MEMBER(spectrum_melodik_device::romcs)
return m_exp->romcs();
}
-READ8_MEMBER(spectrum_melodik_device::mreq_r)
+void spectrum_melodik_device::opcode_fetch(offs_t offset)
{
- return m_exp->mreq_r(space, offset);
+ m_exp->opcode_fetch(offset);
}
-WRITE8_MEMBER(spectrum_melodik_device::mreq_w)
+uint8_t spectrum_melodik_device::mreq_r(offs_t offset)
{
+ uint8_t data = 0xff;
+
if (m_exp->romcs())
- m_exp->mreq_w(space, offset, data);
+ data &= m_exp->mreq_r(offset);
+
+ return data;
}
-READ8_MEMBER(spectrum_melodik_device::port_fe_r)
+void spectrum_melodik_device::mreq_w(offs_t offset, uint8_t data)
{
- uint8_t data = 0xff;
-
if (m_exp->romcs())
- data &= m_exp->port_fe_r(space, offset);
+ m_exp->mreq_w(offset, data);
+}
+uint8_t spectrum_melodik_device::iorq_r(offs_t offset)
+{
+ uint8_t data = m_exp->iorq_r(offset);
+
+ switch (offset & 0xc002)
+ {
+ case 0xc000:
+ data &= m_psg->data_r();
+ break;
+ }
return data;
}
+
+void spectrum_melodik_device::iorq_w(offs_t offset, uint8_t data)
+{
+ switch (offset & 0xc002)
+ {
+ case 0x8000:
+ m_psg->address_w(data);
+ break;
+ case 0xc000:
+ m_psg->data_w(data);
+ break;
+ }
+ m_exp->iorq_w(offset, data);
+}
diff --git a/src/devices/bus/spectrum/melodik.h b/src/devices/bus/spectrum/melodik.h
index 2dc3c547836..4300d946cd4 100644
--- a/src/devices/bus/spectrum/melodik.h
+++ b/src/devices/bus/spectrum/melodik.h
@@ -32,14 +32,15 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
- virtual void device_reset() override;
// optional information overrides
virtual void device_add_mconfig(machine_config &config) override;
- virtual DECLARE_READ8_MEMBER(mreq_r) override;
- virtual DECLARE_WRITE8_MEMBER(mreq_w) override;
- virtual DECLARE_READ8_MEMBER(port_fe_r) override;
+ virtual void opcode_fetch(offs_t offset) override;
+ virtual uint8_t mreq_r(offs_t offset) override;
+ virtual void mreq_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t iorq_r(offs_t offset) override;
+ virtual void iorq_w(offs_t offset, uint8_t data) override;
virtual DECLARE_READ_LINE_MEMBER(romcs) override;
private:
diff --git a/src/devices/bus/spectrum/mface.cpp b/src/devices/bus/spectrum/mface.cpp
new file mode 100644
index 00000000000..559dd9ae1e6
--- /dev/null
+++ b/src/devices/bus/spectrum/mface.cpp
@@ -0,0 +1,321 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/*********************************************************************
+
+ Romantic Robot Multiface One/128/3
+
+*********************************************************************/
+
+#include "emu.h"
+#include "mface.h"
+
+
+/***************************************************************************
+ DEVICE DEFINITIONS
+***************************************************************************/
+
+DEFINE_DEVICE_TYPE(SPECTRUM_MFACE1, spectrum_mface1_device, "spectrum_mface1", "Multiface One")
+DEFINE_DEVICE_TYPE(SPECTRUM_MFACE128, spectrum_mface128_device, "spectrum_mface128", "Multiface 128")
+DEFINE_DEVICE_TYPE(SPECTRUM_MFACE3, spectrum_mface3_device, "spectrum_mface3", "Multiface 3")
+DEFINE_DEVICE_TYPE(SPECTRUM_MPRINT, spectrum_mprint_device, "spectrum_mprint", "MultiPrint")
+
+
+//-------------------------------------------------
+// INPUT_PORTS( mface )
+//-------------------------------------------------
+
+INPUT_PORTS_START(mface)
+ PORT_START("BUTTON")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("Multiface") PORT_CODE(KEYCODE_F12) PORT_CHANGED_MEMBER(DEVICE_SELF, spectrum_mface1_device, magic_button, nullptr)
+INPUT_PORTS_END
+
+//-------------------------------------------------
+// input_ports - device-specific input ports
+//-------------------------------------------------
+
+ioport_constructor spectrum_mface1_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME(mface);
+}
+
+//-------------------------------------------------
+// ROM( mface1 )
+//-------------------------------------------------
+
+ROM_START(mface1)
+ ROM_REGION(0x2000, "rom", 0)
+ ROM_DEFAULT_BIOS("mu21e7")
+ ROM_SYSTEM_BIOS(0, "mu20fe", "MU 2.0 FE")
+ ROMX_LOAD("mf1_20_fe.rom", 0x0000, 0x2000, CRC(fa1b8b0d) SHA1(20cd508b0143166558a7238c7a9ccfbe37b90b0d), ROM_BIOS(0))
+ ROM_SYSTEM_BIOS(1, "mu2167", "MU 2.1 67")
+ ROMX_LOAD("mf1_21_67.rom", 0x0000, 0x2000, CRC(d720ec1b) SHA1(91a40d8f503ef825df3e2ed712897dbf4ca3671d), ROM_BIOS(1))
+ ROM_SYSTEM_BIOS(2, "mu21e4", "MU 2.1 E4")
+ ROMX_LOAD("mf1_21_e4.rom", 0x0000, 0x2000, CRC(4b31a971) SHA1(ba28754a3cc31a4ca579829ed4310c313409cf5d), ROM_BIOS(2))
+ ROM_SYSTEM_BIOS(3, "mu21e7", "MU 2.1 E7")
+ ROMX_LOAD("mf1_21_e7.rom", 0x0000, 0x2000, CRC(670f0ec2) SHA1(50fba2d628f3a2e9219f72980e4efd62fc9ec1f8), ROM_BIOS(3))
+ROM_END
+
+ROM_START(mface128)
+ ROM_REGION(0x2000, "rom", 0)
+ ROM_DEFAULT_BIOS("v363c")
+ ROM_SYSTEM_BIOS(0, "v363c", "87.2 V36 3C")
+ ROMX_LOAD("mf128_36_3c.rom", 0x0000, 0x2000, CRC(78ec8cfd) SHA1(8df204ab490b87c389971ce0c7fb5f9cbd281f14), ROM_BIOS(0))
+ROM_END
+
+ROM_START(mface3)
+ ROM_REGION(0x2000, "rom", 0)
+ ROM_DEFAULT_BIOS("v50fe")
+ ROM_SYSTEM_BIOS(0, "v5013", "V50 13")
+ ROMX_LOAD("mf3_50_13.rom", 0x0000, 0x2000, CRC(2d594640) SHA1(5d74d2e2e5a537639da92ff120f8a6d86f474495), ROM_BIOS(0))
+ ROM_SYSTEM_BIOS(1, "v50fe", "V50 FE")
+ ROMX_LOAD("mf3_50_fe.rom", 0x0000, 0x2000, CRC(b5c00f28) SHA1(983699a07665186f498f5827f9b35c442c2178ba), ROM_BIOS(1))
+ROM_END
+
+ROM_START(mprint)
+ ROM_REGION(0x2000, "rom", 0)
+ ROM_DEFAULT_BIOS("mpa8")
+ ROM_SYSTEM_BIOS(0, "mp5a", "MP 5A")
+ ROMX_LOAD("mprint_5a.rom", 0x0000, 0x2000, CRC(3a26e84b) SHA1(4714469bf25f69291f61188f52bfb11fbb8d0b33), ROM_BIOS(0))
+ ROM_SYSTEM_BIOS(1, "mpa8", "MP A8")
+ ROMX_LOAD("mprint_a8.rom", 0x0000, 0x2000, CRC(a5c58022) SHA1(1356bfae3264b952f83a33e25af536c0f13f50e7), ROM_BIOS(1))
+ROM_END
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void spectrum_mface1_device::device_add_mconfig(machine_config &config)
+{
+ /* passthru */
+ SPECTRUM_EXPANSION_SLOT(config, m_exp, spectrum_expansion_devices, nullptr);
+ m_exp->irq_handler().set(DEVICE_SELF_OWNER, FUNC(spectrum_expansion_slot_device::irq_w));
+ m_exp->nmi_handler().set(DEVICE_SELF_OWNER, FUNC(spectrum_expansion_slot_device::nmi_w));
+}
+
+const tiny_rom_entry *spectrum_mface1_device::device_rom_region() const
+{
+ return ROM_NAME(mface1);
+}
+
+const tiny_rom_entry *spectrum_mface128_device::device_rom_region() const
+{
+ return ROM_NAME(mface128);
+}
+
+const tiny_rom_entry *spectrum_mface3_device::device_rom_region() const
+{
+ return ROM_NAME(mface3);
+}
+
+const tiny_rom_entry *spectrum_mprint_device::device_rom_region() const
+{
+ return ROM_NAME(mprint);
+}
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// spectrum_opus_device - constructor
+//-------------------------------------------------
+
+spectrum_mface1_device::spectrum_mface1_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_spectrum_expansion_interface(mconfig, *this)
+ , m_rom(*this, "rom")
+ , m_exp(*this, "exp")
+{
+}
+
+spectrum_mface1_device::spectrum_mface1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : spectrum_mface1_device(mconfig, SPECTRUM_MFACE1, tag, owner, clock)
+{
+}
+
+spectrum_mface128_device::spectrum_mface128_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : spectrum_mface1_device(mconfig, SPECTRUM_MFACE128, tag, owner, clock)
+{
+}
+
+spectrum_mface3_device::spectrum_mface3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : spectrum_mface1_device(mconfig, SPECTRUM_MFACE3, tag, owner, clock)
+{
+}
+
+spectrum_mprint_device::spectrum_mprint_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : spectrum_mface1_device(mconfig, SPECTRUM_MPRINT, tag, owner, clock)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void spectrum_mface1_device::device_start()
+{
+ save_item(NAME(m_romcs));
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void spectrum_mface1_device::device_reset()
+{
+ m_romcs = 0;
+}
+
+
+//**************************************************************************
+// IMPLEMENTATION
+//**************************************************************************
+
+READ_LINE_MEMBER(spectrum_mface1_device::romcs)
+{
+ return m_romcs | m_exp->romcs();
+}
+
+void spectrum_mface1_device::opcode_fetch(offs_t offset)
+{
+ m_exp->opcode_fetch(offset);
+
+ if (!machine().side_effects_disabled())
+ {
+ if (offset == 0x0066)
+ m_romcs = 1;
+ }
+}
+
+uint8_t spectrum_mface1_device::iorq_r(offs_t offset)
+{
+ uint8_t data = m_exp->iorq_r(offset);
+
+ if (!machine().side_effects_disabled())
+ {
+ switch (offset & 0xff)
+ {
+ case 0x1f:
+ m_romcs = 0;
+ break;
+ case 0x9f:
+ m_romcs = 1;
+ break;
+ }
+ }
+ return data;
+}
+
+uint8_t spectrum_mface128_device::iorq_r(offs_t offset)
+{
+ uint8_t data = m_exp->iorq_r(offset);
+
+ if (!machine().side_effects_disabled())
+ {
+ switch (offset & 0xff)
+ {
+ case 0xbf:
+ m_romcs = 1;
+ break;
+ case 0x3f:
+ m_romcs = 0;
+ break;
+ }
+ }
+ return data;
+}
+
+uint8_t spectrum_mface3_device::iorq_r(offs_t offset)
+{
+ uint8_t data = m_exp->iorq_r(offset);
+
+ if (!machine().side_effects_disabled())
+ {
+ switch (offset & 0xff)
+ {
+ case 0x3f:
+ m_romcs = 1;
+ break;
+ case 0xbf:
+ m_romcs = 0;
+ break;
+ }
+ }
+ return data;
+}
+
+uint8_t spectrum_mprint_device::iorq_r(offs_t offset)
+{
+ uint8_t data = m_exp->iorq_r(offset);
+
+ if (!machine().side_effects_disabled())
+ {
+ switch (offset & 0xff)
+ {
+ case 0xbb:
+ m_romcs = 1;
+ break;
+ case 0xbf:
+ m_romcs = 0;
+ break;
+ }
+ }
+ return data;
+}
+
+void spectrum_mface1_device::iorq_w(offs_t offset, uint8_t data)
+{
+ m_exp->iorq_w(offset, data);
+}
+
+uint8_t spectrum_mface1_device::mreq_r(offs_t offset)
+{
+ uint8_t data = 0xff;
+
+ if (m_romcs)
+ {
+ switch (offset & 0xe000)
+ {
+ case 0x0000:
+ data = m_rom->base()[offset & 0x1fff];
+ break;
+ case 0x2000:
+ data = m_ram[offset & 0x1fff];
+ break;
+ }
+ }
+
+ if (m_exp->romcs())
+ data &= m_exp->mreq_r(offset);
+
+ return data;
+}
+
+void spectrum_mface1_device::mreq_w(offs_t offset, uint8_t data)
+{
+ if (m_romcs)
+ {
+ switch (offset & 0xe000)
+ {
+ case 0x2000:
+ m_ram[offset & 0x1fff] = data;
+ break;
+ }
+ }
+
+ if (m_exp->romcs())
+ m_exp->mreq_w(offset, data);
+}
+
+INPUT_CHANGED_MEMBER(spectrum_mface1_device::magic_button)
+{
+ if (newval && !oldval)
+ {
+ m_slot->nmi_w(ASSERT_LINE);
+ }
+ else
+ {
+ m_slot->nmi_w(CLEAR_LINE);
+ }
+}
diff --git a/src/devices/bus/spectrum/mface.h b/src/devices/bus/spectrum/mface.h
new file mode 100644
index 00000000000..bbe8311808c
--- /dev/null
+++ b/src/devices/bus/spectrum/mface.h
@@ -0,0 +1,100 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/*********************************************************************
+
+ Romantic Robot Multiface One/128/3
+
+*********************************************************************/
+#ifndef MAME_BUS_SPECTRUM_MFACE_H
+#define MAME_BUS_SPECTRUM_MFACE_H
+
+#include "exp.h"
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+class spectrum_mface1_device :
+ public device_t,
+ public device_spectrum_expansion_interface
+
+{
+public:
+ // construction/destruction
+ spectrum_mface1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ DECLARE_INPUT_CHANGED_MEMBER(magic_button);
+
+protected:
+ spectrum_mface1_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+ virtual ioport_constructor device_input_ports() const override;
+
+ virtual void opcode_fetch(offs_t offset) override;
+ virtual uint8_t mreq_r(offs_t offset) override;
+ virtual void mreq_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t iorq_r(offs_t offset) override;
+ virtual void iorq_w(offs_t offset, uint8_t data) override;
+ virtual DECLARE_READ_LINE_MEMBER(romcs) override;
+
+ required_memory_region m_rom;
+ required_device<spectrum_expansion_slot_device> m_exp;
+
+ uint8_t m_ram[8 * 1024];
+ int m_romcs;
+};
+
+class spectrum_mface128_device : public spectrum_mface1_device
+{
+public:
+ spectrum_mface128_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // optional information overrides
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+ virtual uint8_t iorq_r(offs_t offset) override;
+};
+
+class spectrum_mface3_device : public spectrum_mface1_device
+{
+public:
+ spectrum_mface3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // optional information overrides
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+ virtual uint8_t iorq_r(offs_t offset) override;
+};
+
+class spectrum_mprint_device : public spectrum_mface1_device
+{
+public:
+ spectrum_mprint_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // optional information overrides
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+ virtual uint8_t iorq_r(offs_t offset) override;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(SPECTRUM_MFACE1, spectrum_mface1_device)
+DECLARE_DEVICE_TYPE(SPECTRUM_MFACE128, spectrum_mface128_device)
+DECLARE_DEVICE_TYPE(SPECTRUM_MFACE3, spectrum_mface3_device)
+DECLARE_DEVICE_TYPE(SPECTRUM_MPRINT, spectrum_mprint_device)
+
+
+
+#endif // MAME_BUS_SPECTRUM_MFACE_H
diff --git a/src/devices/bus/spectrum/mikroplus.cpp b/src/devices/bus/spectrum/mikroplus.cpp
index b0f0676aaee..87552f79bf3 100644
--- a/src/devices/bus/spectrum/mikroplus.cpp
+++ b/src/devices/bus/spectrum/mikroplus.cpp
@@ -85,23 +85,19 @@ void spectrum_mikroplus_device::device_start()
}
-//-------------------------------------------------
-// device_reset - device-specific reset
-//-------------------------------------------------
-
-void spectrum_mikroplus_device::device_reset()
-{
- io_space().install_read_handler(0xdf, 0xdf, 0, 0xff00, 0, read8_delegate(FUNC(spectrum_mikroplus_device::joystick_r), this));
-}
-
-
//**************************************************************************
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(spectrum_mikroplus_device::joystick_r)
+uint8_t spectrum_mikroplus_device::iorq_r(offs_t offset)
{
- return m_joy->read() | (0xff ^ 0x1f);
+ uint8_t data = 0xff;
+
+ if (offset == 0xdf)
+ {
+ data = m_joy->read() | (0xff ^ 0x1f);
+ }
+ return data;
}
READ_LINE_MEMBER(spectrum_mikroplus_device::romcs)
@@ -109,7 +105,7 @@ READ_LINE_MEMBER(spectrum_mikroplus_device::romcs)
return 1;
}
-READ8_MEMBER(spectrum_mikroplus_device::mreq_r)
+uint8_t spectrum_mikroplus_device::mreq_r(offs_t offset)
{
return m_rom->base()[offset & 0x3fff];
}
diff --git a/src/devices/bus/spectrum/mikroplus.h b/src/devices/bus/spectrum/mikroplus.h
index 927cff5f56a..e06cb38bb2c 100644
--- a/src/devices/bus/spectrum/mikroplus.h
+++ b/src/devices/bus/spectrum/mikroplus.h
@@ -31,18 +31,16 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
- virtual void device_reset() override;
// optional information overrides
virtual const tiny_rom_entry *device_rom_region() const override;
virtual ioport_constructor device_input_ports() const override;
virtual DECLARE_READ_LINE_MEMBER(romcs) override;
- virtual DECLARE_READ8_MEMBER(mreq_r) override;
+ virtual uint8_t mreq_r(offs_t offset) override;
+ virtual uint8_t iorq_r(offs_t offset) override;
private:
- DECLARE_READ8_MEMBER(joystick_r);
-
required_memory_region m_rom;
required_ioport m_joy;
};
diff --git a/src/devices/bus/spectrum/opus.cpp b/src/devices/bus/spectrum/opus.cpp
new file mode 100644
index 00000000000..be73ef01e92
--- /dev/null
+++ b/src/devices/bus/spectrum/opus.cpp
@@ -0,0 +1,289 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Opus Discovery disc system
+
+**********************************************************************/
+
+
+#include "emu.h"
+#include "opus.h"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(SPECTRUM_OPUS, spectrum_opus_device, "spectrum_opus", "Opus Discovery")
+
+
+//-------------------------------------------------
+// INPUT_PORTS( opus )
+//-------------------------------------------------
+
+static INPUT_PORTS_START( opus )
+ PORT_START("JOY")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT) PORT_8WAY
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT) PORT_8WAY
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN) PORT_8WAY
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP) PORT_8WAY
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_BUTTON1)
+INPUT_PORTS_END
+
+//-------------------------------------------------
+// input_ports - device-specific input ports
+//-------------------------------------------------
+
+ioport_constructor spectrum_opus_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( opus );
+}
+
+//-------------------------------------------------
+// MACHINE_DRIVER( opus )
+//-------------------------------------------------
+
+FLOPPY_FORMATS_MEMBER( spectrum_opus_device::floppy_formats )
+ FLOPPY_OPD_FORMAT
+FLOPPY_FORMATS_END
+
+static void spectrum_floppies(device_slot_interface &device)
+{
+ device.option_add("35ssdd", FLOPPY_35_SSDD);
+ device.option_add("35dd", FLOPPY_35_DD);
+}
+
+ROM_START(opus)
+ ROM_REGION(0x2000, "rom", 0)
+ ROM_DEFAULT_BIOS("opus22")
+ ROM_SYSTEM_BIOS(0, "opus22", "Opus v2.2")
+ ROMX_LOAD("opus-22.rom", 0x0000, 0x2000, CRC(50f0eae0) SHA1(0eee1c503f71709fce8b7560dadc2d07d15edb80), ROM_BIOS(0))
+ ROM_SYSTEM_BIOS(1, "opus21", "Opus v2.1")
+ ROMX_LOAD("opus-21.rom", 0x0000, 0x2000, CRC(619973f9) SHA1(31999a68901392bba907cf5a15e264b6759f1a29), ROM_BIOS(1))
+ ROM_SYSTEM_BIOS(2, "opus222", "Opus v2.22")
+ ROMX_LOAD("opus-222.rom", 0x0000, 0x2000, CRC(08ce9949) SHA1(71f1c8a8b923f7751d1ff48d30b8e18a15b92591), ROM_BIOS(2))
+ ROM_SYSTEM_BIOS(3, "quickdos", "QuickDOS v2.31") // MegaSoft
+ ROMX_LOAD("quickdos-231.rom", 0x0000, 0x2000, CRC(d042b32a) SHA1(2975f7eb61d44e898cdd6e3196893e95637f17ff), ROM_BIOS(3))
+ ROM_SYSTEM_BIOS(4, "excom", "EXCOM v2.28") // Paul Cheffings
+ ROMX_LOAD("excom-228.rom", 0x0000, 0x2000, CRC(29257418) SHA1(098a812c4707251f647553a2abc1436afa38f43c), ROM_BIOS(4))
+ROM_END
+
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void spectrum_opus_device::device_add_mconfig(machine_config &config)
+{
+ WD1770(config, m_fdc, 16_MHz_XTAL / 2);
+ m_fdc->drq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(spectrum_expansion_slot_device::nmi_w));
+
+ FLOPPY_CONNECTOR(config, "fdc:0", spectrum_floppies, "35dd", spectrum_opus_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, "fdc:1", spectrum_floppies, "35dd", spectrum_opus_device::floppy_formats).enable_sound(true);
+
+ /* parallel printer port */
+ CENTRONICS(config, m_centronics, centronics_devices, "printer");
+ m_centronics->ack_handler().set(m_pia, FUNC(pia6821_device::ca2_w));
+ m_centronics->busy_handler().set(FUNC(spectrum_opus_device::busy_w));
+
+ /* pia */
+ PIA6821(config, m_pia, 0);
+ m_pia->writepa_handler().set(FUNC(spectrum_opus_device::pia_out_a));
+ m_pia->writepb_handler().set(FUNC(spectrum_opus_device::pia_out_b));
+ m_pia->cb2_handler().set("centronics", FUNC(centronics_device::write_strobe));
+
+ /* software list */
+ SOFTWARE_LIST(config, "flop_list").set_original("spectrum_flop_opus");
+
+ /* passthru without NMI */
+ SPECTRUM_EXPANSION_SLOT(config, m_exp, spectrum_expansion_devices, nullptr);
+ m_exp->irq_handler().set(DEVICE_SELF_OWNER, FUNC(spectrum_expansion_slot_device::irq_w));
+}
+
+const tiny_rom_entry *spectrum_opus_device::device_rom_region() const
+{
+ return ROM_NAME( opus );
+}
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// spectrum_opus_device - constructor
+//-------------------------------------------------
+
+spectrum_opus_device::spectrum_opus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, SPECTRUM_OPUS, tag, owner, clock)
+ , device_spectrum_expansion_interface(mconfig, *this)
+ , m_joy(*this, "JOY")
+ , m_rom(*this, "rom")
+ , m_pia(*this, "pia")
+ , m_fdc(*this, "fdc")
+ , m_floppy0(*this, "fdc:0")
+ , m_floppy1(*this, "fdc:1")
+ , m_centronics(*this, "centronics")
+ , m_exp(*this, "exp")
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void spectrum_opus_device::device_start()
+{
+ memset(m_ram, 0, sizeof(m_ram));
+
+ save_item(NAME(m_romcs));
+ save_item(NAME(m_ram));
+ save_item(NAME(m_last_pc));
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void spectrum_opus_device::device_reset()
+{
+ m_romcs = 0;
+ m_last_pc = 0x0000;
+}
+
+
+//**************************************************************************
+// IMPLEMENTATION
+//**************************************************************************
+
+READ_LINE_MEMBER(spectrum_opus_device::romcs)
+{
+ return m_romcs | m_exp->romcs();
+}
+
+void spectrum_opus_device::opcode_fetch(offs_t offset)
+{
+ m_exp->opcode_fetch(offset);
+
+ if (!machine().side_effects_disabled())
+ {
+ switch (m_last_pc)
+ {
+ case 0x0008: case 0x0048: case 0x1708:
+ m_romcs = 1;
+ break;
+ case 0x1748:
+ m_romcs = 0;
+ break;
+ }
+ }
+ m_last_pc = offset;
+}
+
+uint8_t spectrum_opus_device::iorq_r(offs_t offset)
+{
+ uint8_t data = m_exp->iorq_r(offset);
+
+ // PIA bit 7 is enable joystick and selected on A5 only
+ if (!BIT(m_pia->a_output(), 7) && (~offset & 0x20))
+ {
+ data &= m_joy->read() & 0x1f;
+ }
+ return data;
+}
+
+void spectrum_opus_device::iorq_w(offs_t offset, uint8_t data)
+{
+ m_exp->iorq_w(offset, data);
+}
+
+uint8_t spectrum_opus_device::mreq_r(offs_t offset)
+{
+ uint8_t data = 0xff;
+
+ if (m_romcs)
+ {
+ switch (offset & 0xf800)
+ {
+ case 0x0000: case 0x0800: case 0x1000: case 0x1800:
+ data = m_rom->base()[offset & 0x1fff];
+ break;
+ case 0x2000:
+ data = m_ram[offset & 0x7ff];
+ break;
+ case 0x2800:
+ data = m_fdc->read(offset & 0x03);
+ break;
+ case 0x3000:
+ data = m_pia->read(offset & 0x03);
+ break;
+ case 0x3800: // Extra 2K described in QuickDOS manual - not used
+ data = m_ram[offset & 0xfff];
+ break;
+ }
+ }
+
+ if (m_exp->romcs())
+ data &= m_exp->mreq_r(offset);
+
+ return data;
+}
+
+void spectrum_opus_device::mreq_w(offs_t offset, uint8_t data)
+{
+ if (m_romcs)
+ {
+ switch (offset & 0xf800)
+ {
+ case 0x2000:
+ m_ram[offset & 0x7ff] = data;
+ break;
+ case 0x2800:
+ m_fdc->write(offset & 0x03, data);
+ break;
+ case 0x3000:
+ m_pia->write(offset & 0x03, data);
+ break;
+ case 0x3800: // Extra 2K described in QuickDOS manual - not used
+ m_ram[offset & 0xfff] = data;
+ break;
+ }
+ }
+
+ if (m_exp->romcs())
+ m_exp->mreq_w(offset, data);
+}
+
+WRITE8_MEMBER(spectrum_opus_device::pia_out_a)
+{
+ floppy_image_device *floppy = nullptr;
+
+ // bit 0, 1: drive select
+ if (!BIT(data, 0)) floppy = m_floppy1->get_device();
+ if (!BIT(data, 1)) floppy = m_floppy0->get_device();
+ m_fdc->set_floppy(floppy);
+
+ // bit 4: side select
+ if (floppy)
+ floppy->ss_w(BIT(data, 4));
+
+ // bit 5: density
+ m_fdc->dden_w(BIT(data, 5));
+}
+
+WRITE8_MEMBER(spectrum_opus_device::pia_out_b)
+{
+ m_centronics->write_data1(BIT(data, 1));
+ m_centronics->write_data2(BIT(data, 2));
+ m_centronics->write_data3(BIT(data, 3));
+ m_centronics->write_data4(BIT(data, 4));
+ m_centronics->write_data5(BIT(data, 5));
+ m_centronics->write_data6(BIT(data, 6));
+ m_centronics->write_data7(BIT(data, 7));
+}
+
+WRITE_LINE_MEMBER(spectrum_opus_device::busy_w)
+{
+ m_pia->set_a_input(state << 6, 0xbf);
+}
diff --git a/src/devices/bus/spectrum/opus.h b/src/devices/bus/spectrum/opus.h
new file mode 100644
index 00000000000..8d72d8be94b
--- /dev/null
+++ b/src/devices/bus/spectrum/opus.h
@@ -0,0 +1,75 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Opus Discovery disc system
+
+**********************************************************************/
+
+#ifndef MAME_BUS_SPECTRUM_OPUS_H
+#define MAME_BUS_SPECTRUM_OPUS_H
+
+#include "exp.h"
+#include "softlist.h"
+#include "imagedev/floppy.h"
+#include "machine/wd_fdc.h"
+#include "machine/6821pia.h"
+#include "bus/centronics/ctronics.h"
+#include "formats/opd_dsk.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+class spectrum_opus_device:
+ public device_t,
+ public device_spectrum_expansion_interface
+
+{
+public:
+ // construction/destruction
+ spectrum_opus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ DECLARE_FLOPPY_FORMATS(floppy_formats);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual ioport_constructor device_input_ports() const override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+ virtual void opcode_fetch(offs_t offset) override;
+ virtual uint8_t mreq_r(offs_t offset) override;
+ virtual void mreq_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t iorq_r(offs_t offset) override;
+ virtual void iorq_w(offs_t offset, uint8_t data) override;
+ virtual DECLARE_READ_LINE_MEMBER(romcs) override;
+
+private:
+ DECLARE_WRITE8_MEMBER(pia_out_a);
+ DECLARE_WRITE8_MEMBER(pia_out_b);
+ DECLARE_WRITE_LINE_MEMBER(busy_w);
+
+ required_ioport m_joy;
+ required_memory_region m_rom;
+ required_device<pia6821_device> m_pia;
+ required_device<wd_fdc_device_base> m_fdc;
+ required_device<floppy_connector> m_floppy0;
+ required_device<floppy_connector> m_floppy1;
+ required_device<centronics_device> m_centronics;
+ required_device<spectrum_expansion_slot_device> m_exp;
+
+ int m_romcs;
+ uint8_t m_ram[4 * 1024];
+ offs_t m_last_pc;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(SPECTRUM_OPUS, spectrum_opus_device)
+
+#endif // MAME_BUS_SPECTRUM_OPUS_H
diff --git a/src/devices/bus/spectrum/plus2test.cpp b/src/devices/bus/spectrum/plus2test.cpp
index a734a76f775..3d90ed4dee3 100644
--- a/src/devices/bus/spectrum/plus2test.cpp
+++ b/src/devices/bus/spectrum/plus2test.cpp
@@ -68,7 +68,7 @@ READ_LINE_MEMBER(spectrum_plus2test_device::romcs)
return 1;
}
-READ8_MEMBER(spectrum_plus2test_device::mreq_r)
+uint8_t spectrum_plus2test_device::mreq_r(offs_t offset)
{
return m_rom->base()[offset & 0x3fff];
}
diff --git a/src/devices/bus/spectrum/plus2test.h b/src/devices/bus/spectrum/plus2test.h
index 234e82a95f0..f8caad2fa26 100644
--- a/src/devices/bus/spectrum/plus2test.h
+++ b/src/devices/bus/spectrum/plus2test.h
@@ -36,7 +36,7 @@ protected:
virtual const tiny_rom_entry *device_rom_region() const override;
virtual DECLARE_READ_LINE_MEMBER(romcs) override;
- virtual DECLARE_READ8_MEMBER(mreq_r) override;
+ virtual uint8_t mreq_r(offs_t offset) override;
private:
required_memory_region m_rom;
diff --git a/src/devices/bus/spectrum/protek.cpp b/src/devices/bus/spectrum/protek.cpp
index a3f3a1838f8..d1e122d8dbb 100644
--- a/src/devices/bus/spectrum/protek.cpp
+++ b/src/devices/bus/spectrum/protek.cpp
@@ -72,17 +72,20 @@ void spectrum_protek_device::device_start()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER(spectrum_protek_device::port_fe_r)
+uint8_t spectrum_protek_device::iorq_r(offs_t offset)
{
uint8_t data = 0xff;
- uint8_t lines = offset >> 8;
+ switch (offset & 0xff)
+ {
+ case 0xfe:
+ if (((offset >> 8) & 8) == 0)
+ data = m_exp_line3->read() | (0xff ^ 0x10);
- if ((lines & 8) == 0)
- data = m_exp_line3->read() | (0xff ^ 0x10);
-
- if ((lines & 16) == 0)
- data = m_exp_line4->read() | (0xff ^ 0x1d);
+ if (((offset >> 8) & 16) == 0)
+ data = m_exp_line4->read() | (0xff ^ 0x1d);
+ break;
+ }
return data;
}
diff --git a/src/devices/bus/spectrum/protek.h b/src/devices/bus/spectrum/protek.h
index 503a041a0d3..9edd5a82f29 100644
--- a/src/devices/bus/spectrum/protek.h
+++ b/src/devices/bus/spectrum/protek.h
@@ -35,7 +35,7 @@ protected:
// optional information overrides
virtual ioport_constructor device_input_ports() const override;
- virtual DECLARE_READ8_MEMBER(port_fe_r) override;
+ virtual uint8_t iorq_r(offs_t offset) override;
private:
required_ioport m_exp_line3;
diff --git a/src/devices/bus/spectrum/specdrum.cpp b/src/devices/bus/spectrum/specdrum.cpp
new file mode 100644
index 00000000000..9c809a1b36a
--- /dev/null
+++ b/src/devices/bus/spectrum/specdrum.cpp
@@ -0,0 +1,73 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Cheetah Marketing SpecDrum emulation
+
+**********************************************************************/
+
+#include "emu.h"
+#include "specdrum.h"
+#include "sound/volt_reg.h"
+#include "speaker.h"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(SPECTRUM_SPECDRUM, spectrum_specdrum_device, "spectrum_specdrum", "SpecDrum")
+
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void spectrum_specdrum_device::device_add_mconfig(machine_config &config)
+{
+ SPEAKER(config, "speaker").front_center();
+ ZN428E(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.5);
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
+ vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
+ vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
+}
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// spectrum_specdrum_device - constructor
+//-------------------------------------------------
+
+spectrum_specdrum_device::spectrum_specdrum_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, SPECTRUM_SPECDRUM, tag, owner, clock)
+ , device_spectrum_expansion_interface(mconfig, *this)
+ , m_dac(*this, "dac")
+{
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void spectrum_specdrum_device::device_start()
+{
+}
+
+
+//**************************************************************************
+// IMPLEMENTATION
+//**************************************************************************
+
+void spectrum_specdrum_device::iorq_w(offs_t offset, uint8_t data)
+{
+ switch (offset & 0x00ff)
+ {
+ case 0xdf:
+ m_dac->write(data);
+ break;
+ }
+}
diff --git a/src/devices/bus/spectrum/specdrum.h b/src/devices/bus/spectrum/specdrum.h
new file mode 100644
index 00000000000..7412a8509c0
--- /dev/null
+++ b/src/devices/bus/spectrum/specdrum.h
@@ -0,0 +1,51 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Cheetah Marketing SpecDrum emulation
+
+**********************************************************************/
+
+#ifndef MAME_BUS_SPECTRUM_SPECDRUM_H
+#define MAME_BUS_SPECTRUM_SPECDRUM_H
+
+#pragma once
+
+
+#include "exp.h"
+#include "sound/dac.h"
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> spectrum_specdrum_device
+
+class spectrum_specdrum_device :
+ public device_t,
+ public device_spectrum_expansion_interface
+{
+public:
+ // construction/destruction
+ spectrum_specdrum_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ virtual void iorq_w(offs_t offset, uint8_t data) override;
+
+private:
+ required_device<dac_byte_interface> m_dac;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(SPECTRUM_SPECDRUM, spectrum_specdrum_device)
+
+
+#endif // MAME_BUS_SPECTRUM_SPECDRUM_H
diff --git a/src/devices/bus/spectrum/uslot.cpp b/src/devices/bus/spectrum/uslot.cpp
index d2d75d6a72c..d27f1ec572d 100644
--- a/src/devices/bus/spectrum/uslot.cpp
+++ b/src/devices/bus/spectrum/uslot.cpp
@@ -64,8 +64,6 @@ void spectrum_uslot_device::device_start()
void spectrum_uslot_device::device_reset()
{
- m_exp1->set_io_space(&io_space());
- m_exp2->set_io_space(&io_space());
}
@@ -78,41 +76,41 @@ READ_LINE_MEMBER(spectrum_uslot_device::romcs)
return m_exp1->romcs() | m_exp2->romcs();
}
+void spectrum_uslot_device::opcode_fetch(offs_t offset)
+{
+ m_exp1->opcode_fetch(offset);
+ m_exp2->opcode_fetch(offset);
+}
-READ8_MEMBER(spectrum_uslot_device::mreq_r)
+uint8_t spectrum_uslot_device::mreq_r(offs_t offset)
{
- uint8_t temp;
uint8_t data = 0xff;
- temp = m_exp1->mreq_r(space, offset);
if (m_exp1->romcs())
- data &= temp;
+ data &= m_exp1->mreq_r(offset);
- temp = m_exp2->mreq_r(space, offset);
if (m_exp2->romcs())
- data &= temp;
+ data &= m_exp2->mreq_r(offset);
return data;
}
-WRITE8_MEMBER(spectrum_uslot_device::mreq_w)
+void spectrum_uslot_device::mreq_w(offs_t offset, uint8_t data)
{
if (m_exp1->romcs())
- m_exp1->mreq_w(space, offset, data);
+ m_exp1->mreq_w(offset, data);
if (m_exp2->romcs())
- m_exp2->mreq_w(space, offset, data);
+ m_exp2->mreq_w(offset, data);
}
-READ8_MEMBER(spectrum_uslot_device::port_fe_r)
+uint8_t spectrum_uslot_device::iorq_r(offs_t offset)
{
- uint8_t data = 0xff;
-
- if (m_exp1->romcs())
- data &= m_exp1->port_fe_r(space, offset);
-
- if (m_exp2->romcs())
- data &= m_exp2->port_fe_r(space, offset);
+ return m_exp1->iorq_r(offset) & m_exp2->iorq_r(offset);
+}
- return data;
+void spectrum_uslot_device::iorq_w(offs_t offset, uint8_t data)
+{
+ m_exp1->iorq_w(offset, data);
+ m_exp2->iorq_w(offset, data);
}
diff --git a/src/devices/bus/spectrum/uslot.h b/src/devices/bus/spectrum/uslot.h
index 536f7c75bc4..6cfa90c45e9 100644
--- a/src/devices/bus/spectrum/uslot.h
+++ b/src/devices/bus/spectrum/uslot.h
@@ -36,9 +36,11 @@ protected:
// optional information overrides
virtual void device_add_mconfig(machine_config &config) override;
- virtual DECLARE_READ8_MEMBER(mreq_r) override;
- virtual DECLARE_WRITE8_MEMBER(mreq_w) override;
- virtual DECLARE_READ8_MEMBER(port_fe_r) override;
+ virtual void opcode_fetch(offs_t offset) override;
+ virtual uint8_t mreq_r(offs_t offset) override;
+ virtual void mreq_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t iorq_r(offs_t offset) override;
+ virtual void iorq_w(offs_t offset, uint8_t data) override;
virtual DECLARE_READ_LINE_MEMBER(romcs) override;
private:
diff --git a/src/devices/bus/spectrum/usource.cpp b/src/devices/bus/spectrum/usource.cpp
index b4fb9c5797a..13f302b14c5 100644
--- a/src/devices/bus/spectrum/usource.cpp
+++ b/src/devices/bus/spectrum/usource.cpp
@@ -60,6 +60,7 @@ spectrum_usource_device::spectrum_usource_device(const machine_config &mconfig,
void spectrum_usource_device::device_start()
{
+ save_item(NAME(m_romcs));
}
@@ -82,17 +83,15 @@ READ_LINE_MEMBER(spectrum_usource_device::romcs)
return m_romcs;
}
-
-READ8_MEMBER(spectrum_usource_device::mreq_r)
+void spectrum_usource_device::opcode_fetch(offs_t offset)
{
- uint8_t data;
-
if (!machine().side_effects_disabled() && (offset == 0x2bae))
{
m_romcs = !m_romcs;
}
+}
- data = m_rom->base()[offset & 0x1fff];
-
- return data;
+uint8_t spectrum_usource_device::mreq_r(offs_t offset)
+{
+ return m_rom->base()[offset & 0x1fff];
}
diff --git a/src/devices/bus/spectrum/usource.h b/src/devices/bus/spectrum/usource.h
index 607cf0737a6..daf792f076f 100644
--- a/src/devices/bus/spectrum/usource.h
+++ b/src/devices/bus/spectrum/usource.h
@@ -38,8 +38,9 @@ protected:
// optional information overrides
virtual const tiny_rom_entry *device_rom_region() const override;
+ virtual void opcode_fetch(offs_t offset) override;
virtual DECLARE_READ_LINE_MEMBER(romcs) override;
- virtual DECLARE_READ8_MEMBER(mreq_r) override;
+ virtual uint8_t mreq_r(offs_t offset) override;
private:
required_memory_region m_rom;
diff --git a/src/devices/bus/spectrum/uspeech.cpp b/src/devices/bus/spectrum/uspeech.cpp
index 87f66ca0182..60374fd3c2c 100644
--- a/src/devices/bus/spectrum/uspeech.cpp
+++ b/src/devices/bus/spectrum/uspeech.cpp
@@ -76,6 +76,7 @@ spectrum_uspeech_device::spectrum_uspeech_device(const machine_config &mconfig,
void spectrum_uspeech_device::device_start()
{
+ save_item(NAME(m_romcs));
}
@@ -98,46 +99,59 @@ READ_LINE_MEMBER(spectrum_uspeech_device::romcs)
return m_romcs;
}
-
-READ8_MEMBER(spectrum_uspeech_device::mreq_r)
+void spectrum_uspeech_device::opcode_fetch(offs_t offset)
{
- uint8_t data;
+ if (!machine().side_effects_disabled() && (offset == 0x0038))
+ {
+ m_romcs = !m_romcs;
+ }
+}
- if (!machine().side_effects_disabled() && (offset == 0x38))
+uint8_t spectrum_uspeech_device::iorq_r(offs_t offset)
+{
+ if (!machine().side_effects_disabled() && (offset == 0x0038))
{
m_romcs = !m_romcs;
}
- switch (offset)
+ return 0xff;
+}
+
+uint8_t spectrum_uspeech_device::mreq_r(offs_t offset)
+{
+ uint8_t data = 0xff;
+
+ switch (offset & 0xf000)
{
- case 0x1000:
- data = !m_nsp->lrq_r(); // (m_nsp->lrq_r() && (m_nsp->sby_r() != 0)) ? 0x00 : 0x01;
- break;
- default:
+ case 0x0000:
data = m_rom->base()[offset & 0x7ff];
break;
+ case 0x1000:
+ data = !m_nsp->lrq_r();
+ break;
}
return data;
}
-WRITE8_MEMBER(spectrum_uspeech_device::mreq_w)
+void spectrum_uspeech_device::mreq_w(offs_t offset, uint8_t data)
{
- switch (offset)
+ switch (offset & 0xf001)
{
case 0x1000:
+ case 0x1001:
// allophone
m_nsp->ald_w(data & 0x3f);
break;
case 0x3000:
// intonation low
- m_nsp->set_clock(3500000); // CK / 4 ??
+ m_nsp->set_clock(3050000); // oscillator frequency read from hardware
break;
case 0x3001:
// intonation high
- m_nsp->set_clock(3800000); // TODO: the exact frequency is unknown
+ m_nsp->set_clock(3260000); // oscillator frequency read from hardware
break;
}
}
diff --git a/src/devices/bus/spectrum/uspeech.h b/src/devices/bus/spectrum/uspeech.h
index b3209f80331..8013abf9222 100644
--- a/src/devices/bus/spectrum/uspeech.h
+++ b/src/devices/bus/spectrum/uspeech.h
@@ -40,9 +40,11 @@ protected:
virtual const tiny_rom_entry *device_rom_region() const override;
virtual void device_add_mconfig(machine_config &config) override;
+ virtual void opcode_fetch(offs_t offset) override;
virtual DECLARE_READ_LINE_MEMBER(romcs) override;
- virtual DECLARE_READ8_MEMBER(mreq_r) override;
- virtual DECLARE_WRITE8_MEMBER(mreq_w) override;
+ virtual uint8_t mreq_r(offs_t offset) override;
+ virtual void mreq_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t iorq_r(offs_t offset) override;
private:
required_device<sp0256_device> m_nsp;
diff --git a/src/devices/bus/ss50/interface.cpp b/src/devices/bus/ss50/interface.cpp
index b17f54f9c68..a811c790ef9 100644
--- a/src/devices/bus/ss50/interface.cpp
+++ b/src/devices/bus/ss50/interface.cpp
@@ -139,22 +139,22 @@ void ss50_interface_port_device::device_start()
// read - interface read access (pre-decoded)
//-------------------------------------------------
-READ8_MEMBER(ss50_interface_port_device::read)
+u8 ss50_interface_port_device::read(offs_t offset)
{
if (m_card == nullptr)
{
logerror("%s: Read from unspecified interface (RS = %X)\n", machine().describe_context(), offset);
- return space.unmap();
+ return 0xff;
}
- return m_card->register_read(space, offset);
+ return m_card->register_read(offset);
}
//-------------------------------------------------
// write - interface write access (pre-decoded)
//-------------------------------------------------
-WRITE8_MEMBER(ss50_interface_port_device::write)
+void ss50_interface_port_device::write(offs_t offset, u8 data)
{
if (m_card == nullptr)
{
@@ -162,7 +162,7 @@ WRITE8_MEMBER(ss50_interface_port_device::write)
return;
}
- m_card->register_write(space, offset, data);
+ m_card->register_write(offset, data);
}
//-------------------------------------------------
diff --git a/src/devices/bus/ss50/interface.h b/src/devices/bus/ss50/interface.h
index 1865eda6324..0be5f422c98 100644
--- a/src/devices/bus/ss50/interface.h
+++ b/src/devices/bus/ss50/interface.h
@@ -11,19 +11,6 @@
#ifndef MAME_DEVICES_BUS_SS50_INTERFACE_H
#define MAME_DEVICES_BUS_SS50_INTERFACE_H
-//**************************************************************************
-// CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_SS50_INTERFACE_PORT_ADD(_tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, SS50_INTERFACE, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(ss50_##_slot_intf, _def_slot, false)
-
-#define MCFG_SS50_INTERFACE_IRQ_CALLBACK(_devcb) \
- downcast<ss50_interface_port_device &>(*device).set_irq_cb(DEVCB_##_devcb);
-
-#define MCFG_SS50_INTERFACE_FIRQ_CALLBACK(_devcb) \
- downcast<ss50_interface_port_device &>(*device).set_firq_cb(DEVCB_##_devcb);
//**************************************************************************
// TYPE DEFINITIONS
@@ -40,15 +27,25 @@ class ss50_interface_port_device : public device_t, public device_slot_interface
public:
// construction/destruction
- ss50_interface_port_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+ template <typename T>
+ ss50_interface_port_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : ss50_interface_port_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ ss50_interface_port_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
// static configuration
- template<class Object> devcb_base &set_irq_cb(Object &&object) { return m_irq_cb.set_callback(std::forward<Object>(object)); }
- template<class Object> devcb_base &set_firq_cb(Object &&object) { return m_firq_cb.set_callback(std::forward<Object>(object)); }
+ auto irq_cb() { return m_irq_cb.bind(); }
+ auto firq_cb() { return m_firq_cb.bind(); }
// memory accesses
- DECLARE_READ8_MEMBER(read);
- DECLARE_WRITE8_MEMBER(write);
+ u8 read(offs_t offset);
+ void write(offs_t offset, u8 data);
// baud rates
DECLARE_WRITE_LINE_MEMBER(f110_w);
@@ -82,8 +79,8 @@ protected:
ss50_card_interface(const machine_config &mconfig, device_t &device);
// required overrides
- virtual DECLARE_READ8_MEMBER(register_read) = 0;
- virtual DECLARE_WRITE8_MEMBER(register_write) = 0;
+ virtual u8 register_read(offs_t offset) = 0;
+ virtual void register_write(offs_t offset, u8 data) = 0;
// optional overrides
virtual DECLARE_WRITE_LINE_MEMBER(f110_w) { }
diff --git a/src/devices/bus/ss50/mpc.cpp b/src/devices/bus/ss50/mpc.cpp
index eeff1928e92..ba05d80e8e3 100644
--- a/src/devices/bus/ss50/mpc.cpp
+++ b/src/devices/bus/ss50/mpc.cpp
@@ -42,8 +42,8 @@ protected:
virtual void device_start() override;
// interface-specific overrides
- virtual DECLARE_READ8_MEMBER(register_read) override;
- virtual DECLARE_WRITE8_MEMBER(register_write) override;
+ virtual u8 register_read(offs_t offset) override;
+ virtual void register_write(offs_t offset, u8 data) override;
virtual DECLARE_WRITE_LINE_MEMBER(f110_w) override;
virtual DECLARE_WRITE_LINE_MEMBER(f300_w) override;
@@ -100,7 +100,8 @@ DEVICE_INPUT_DEFAULTS_END
// machine configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(ss50_mpc_device::device_add_mconfig)
+void ss50_mpc_device::device_add_mconfig(machine_config &config)
+{
PIA6821(config, m_pia, 0); // actually MC6820
m_pia->writepa_handler().set("outgate", FUNC(input_merger_device::in_w<0>)).bit(0);
m_pia->cb2_handler().set(FUNC(ss50_mpc_device::reader_control_w));
@@ -115,15 +116,13 @@ MACHINE_CONFIG_START(ss50_mpc_device::device_add_mconfig)
rs232.rxd_handler().set(FUNC(ss50_mpc_device::serial_input_w));
rs232.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal));
- MCFG_INPUT_MERGER_ALL_HIGH("outgate")
- MCFG_INPUT_MERGER_OUTPUT_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
+ INPUT_MERGER_ALL_HIGH(config, "outgate").output_handler().set("rs232", FUNC(rs232_port_device::write_txd));
- MCFG_INPUT_MERGER_ANY_HIGH("loopback")
- MCFG_INPUT_MERGER_OUTPUT_HANDLER(WRITELINE("outgate", input_merger_device, in_w<1>))
+ INPUT_MERGER_ANY_HIGH(config, m_loopback).output_handler().set("outgate", FUNC(input_merger_device::in_w<1>));
RIPPLE_COUNTER(config, m_counter); // CD4024AE (IC3)
m_counter->set_stages(7); // only Q5 (÷32) and Q4 (÷16) are actually used
-MACHINE_CONFIG_END
+}
//-------------------------------------------------
@@ -162,18 +161,18 @@ WRITE_LINE_MEMBER(ss50_mpc_device::count_select_w)
// register_read - read from a port register
//-------------------------------------------------
-READ8_MEMBER(ss50_mpc_device::register_read)
+u8 ss50_mpc_device::register_read(offs_t offset)
{
- return m_pia->read(space, offset & 3, 0);
+ return m_pia->read(offset & 3);
}
//-------------------------------------------------
// register_write - write to a port register
//-------------------------------------------------
-WRITE8_MEMBER(ss50_mpc_device::register_write)
+void ss50_mpc_device::register_write(offs_t offset, u8 data)
{
- m_pia->write(space, offset & 3, data);
+ m_pia->write(offset & 3, data);
}
WRITE_LINE_MEMBER(ss50_mpc_device::f110_w)
diff --git a/src/devices/bus/ss50/mps.cpp b/src/devices/bus/ss50/mps.cpp
index dab93db2cd3..d66dd3b767e 100644
--- a/src/devices/bus/ss50/mps.cpp
+++ b/src/devices/bus/ss50/mps.cpp
@@ -38,8 +38,8 @@ protected:
virtual void device_start() override { }
// interface-specific overrides
- virtual DECLARE_READ8_MEMBER(register_read) override;
- virtual DECLARE_WRITE8_MEMBER(register_write) override;
+ virtual u8 register_read(offs_t offset) override;
+ virtual void register_write(offs_t offset, u8 data) override;
virtual DECLARE_WRITE_LINE_MEMBER(f110_w) override;
virtual DECLARE_WRITE_LINE_MEMBER(f150_9600_w) override;
virtual DECLARE_WRITE_LINE_MEMBER(f300_w) override;
@@ -113,18 +113,18 @@ void ss50_mps_device::device_add_mconfig(machine_config &config)
// register_read - read from a port register
//-------------------------------------------------
-READ8_MEMBER(ss50_mps_device::register_read)
+u8 ss50_mps_device::register_read(offs_t offset)
{
- return m_acia->read(space, offset & 1, 0);
+ return m_acia->read(offset & 1);
}
//-------------------------------------------------
// register_write - write to a port register
//-------------------------------------------------
-WRITE8_MEMBER(ss50_mps_device::register_write)
+void ss50_mps_device::register_write(offs_t offset, u8 data)
{
- m_acia->write(space, offset & 1, data);
+ m_acia->write(offset & 1, data);
}
WRITE_LINE_MEMBER(ss50_mps_device::f110_w)
diff --git a/src/devices/bus/sunkbd/hlekbd.cpp b/src/devices/bus/sunkbd/hlekbd.cpp
index 2cb5547947e..21f4de349ed 100644
--- a/src/devices/bus/sunkbd/hlekbd.cpp
+++ b/src/devices/bus/sunkbd/hlekbd.cpp
@@ -789,11 +789,11 @@ WRITE_LINE_MEMBER( hle_device_base::input_txd )
add machine configuration
--------------------------------------------------*/
-MACHINE_CONFIG_START(hle_device_base::device_add_mconfig)
+void hle_device_base::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "bell").front_center();
- MCFG_DEVICE_ADD("beeper", BEEP, ATTOSECONDS_TO_HZ(480 * ATTOSECONDS_PER_MICROSECOND))
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "bell", 1.0)
-MACHINE_CONFIG_END
+ BEEP(config, m_beeper, ATTOSECONDS_TO_HZ(480 * ATTOSECONDS_PER_MICROSECOND)).add_route(ALL_OUTPUTS, "bell", 1.0);
+}
/*--------------------------------------------------
diff --git a/src/devices/bus/svi3x8/expander/expander.cpp b/src/devices/bus/svi3x8/expander/expander.cpp
index 481789516ff..e9653827fcf 100644
--- a/src/devices/bus/svi3x8/expander/expander.cpp
+++ b/src/devices/bus/svi3x8/expander/expander.cpp
@@ -80,38 +80,38 @@ void svi_expander_device::device_reset()
// host to module interface
//-------------------------------------------------
-READ8_MEMBER( svi_expander_device::mreq_r )
+uint8_t svi_expander_device::mreq_r(offs_t offset)
{
romdis_w(1);
ramdis_w(1);
if (m_module)
- return m_module->mreq_r(space, offset);
+ return m_module->mreq_r(offset);
return 0xff;
}
-WRITE8_MEMBER( svi_expander_device::mreq_w )
+void svi_expander_device::mreq_w(offs_t offset, uint8_t data)
{
romdis_w(1);
ramdis_w(1);
if (m_module)
- m_module->mreq_w(space, offset, data);
+ m_module->mreq_w(offset, data);
}
-READ8_MEMBER( svi_expander_device::iorq_r )
+uint8_t svi_expander_device::iorq_r(offs_t offset)
{
if (m_module)
- return m_module->iorq_r(space, offset);
+ return m_module->iorq_r(offset);
return 0xff;
}
-WRITE8_MEMBER( svi_expander_device::iorq_w )
+void svi_expander_device::iorq_w(offs_t offset, uint8_t data)
{
if (m_module)
- m_module->iorq_w(space, offset, data);
+ m_module->iorq_w(offset, data);
}
WRITE_LINE_MEMBER( svi_expander_device::bk21_w )
diff --git a/src/devices/bus/svi3x8/expander/expander.h b/src/devices/bus/svi3x8/expander/expander.h
index 549a17c5970..cc7e75f6332 100644
--- a/src/devices/bus/svi3x8/expander/expander.h
+++ b/src/devices/bus/svi3x8/expander/expander.h
@@ -40,36 +40,6 @@
#pragma once
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_SVI_EXPANDER_BUS_ADD(_tag) \
- MCFG_DEVICE_ADD(_tag, SVI_EXPANDER, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(svi_expander_modules, nullptr, false)
-#define MCFG_SVI_EXPANDER_INT_HANDLER(_devcb) \
- downcast<svi_expander_device &>(*device).set_int_handler(DEVCB_##_devcb);
-
-#define MCFG_SVI_EXPANDER_ROMDIS_HANDLER(_devcb) \
- downcast<svi_expander_device &>(*device).set_romdis_handler(DEVCB_##_devcb);
-
-#define MCFG_SVI_EXPANDER_RAMDIS_HANDLER(_devcb) \
- downcast<svi_expander_device &>(*device).set_ramdis_handler(DEVCB_##_devcb);
-
-#define MCFG_SVI_EXPANDER_CTRL1_HANDLER(_devcb) \
- downcast<svi_expander_device &>(*device).set_ctrl1_handler(DEVCB_##_devcb);
-
-#define MCFG_SVI_EXPANDER_CTRL2_HANDLER(_devcb) \
- downcast<svi_expander_device &>(*device).set_ctrl2_handler(DEVCB_##_devcb);
-
-#define MCFG_SVI_EXPANDER_EXCSR_HANDLER(_devcb) \
- downcast<svi_expander_device &>(*device).set_excsr_handler(DEVCB_##_devcb);
-
-#define MCFG_SVI_EXPANDER_EXCSW_HANDLER(_devcb) \
- downcast<svi_expander_device &>(*device).set_excsw_handler(DEVCB_##_devcb);
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -82,17 +52,27 @@ class svi_expander_device : public device_t, public device_slot_interface
{
public:
// construction/destruction
+ template <typename T>
+ svi_expander_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts)
+ : svi_expander_device(mconfig, tag, owner, uint32_t(0))
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(nullptr);
+ set_fixed(false);
+ }
+
svi_expander_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~svi_expander_device();
// callbacks
- template <class Object> devcb_base &set_int_handler(Object &&cb) { return m_int_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_romdis_handler(Object &&cb) { return m_romdis_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_ramdis_handler(Object &&cb) { return m_ramdis_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_ctrl1_handler(Object &&cb) { return m_ctrl1_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_ctrl2_handler(Object &&cb) { return m_ctrl2_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_excsr_handler(Object &&cb) { return m_excsr_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_excsw_handler(Object &&cb) { return m_excsw_handler.set_callback(std::forward<Object>(cb)); }
+ auto int_handler() { return m_int_handler.bind(); }
+ auto romdis_handler() { return m_romdis_handler.bind(); }
+ auto ramdis_handler() { return m_ramdis_handler.bind(); }
+ auto ctrl1_handler() { return m_ctrl1_handler.bind(); }
+ auto ctrl2_handler() { return m_ctrl2_handler.bind(); }
+ auto excsr_handler() { return m_excsr_handler.bind(); }
+ auto excsw_handler() { return m_excsw_handler.bind(); }
// called from cart device
DECLARE_WRITE_LINE_MEMBER( int_w ) { m_int_handler(state); }
@@ -101,14 +81,14 @@ public:
DECLARE_WRITE_LINE_MEMBER( ctrl1_w ) { m_ctrl1_handler(state); }
DECLARE_WRITE_LINE_MEMBER( ctrl2_w ) { m_ctrl2_handler(state); }
- DECLARE_READ8_MEMBER( excs_r ) { return m_excsr_handler(space, offset); }
- DECLARE_WRITE8_MEMBER( excs_w ) { m_excsw_handler(space, offset, data); }
+ uint8_t excs_r(offs_t offset) { return m_excsr_handler(offset); }
+ void excs_w(offs_t offset, uint8_t data) { m_excsw_handler(offset, data); }
// called from host
- DECLARE_READ8_MEMBER( mreq_r );
- DECLARE_WRITE8_MEMBER( mreq_w );
- DECLARE_READ8_MEMBER( iorq_r );
- DECLARE_WRITE8_MEMBER( iorq_w );
+ uint8_t mreq_r(offs_t offset);
+ void mreq_w(offs_t offset, uint8_t data);
+ uint8_t iorq_r(offs_t offset);
+ void iorq_w(offs_t offset, uint8_t data);
DECLARE_WRITE_LINE_MEMBER( bk21_w );
DECLARE_WRITE_LINE_MEMBER( bk22_w );
@@ -141,10 +121,10 @@ public:
// construction/destruction
virtual ~device_svi_expander_interface();
- virtual DECLARE_READ8_MEMBER( mreq_r ) { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER( mreq_w ) { }
- virtual DECLARE_READ8_MEMBER( iorq_r ) { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER( iorq_w ) { }
+ virtual uint8_t mreq_r(offs_t offset) { return 0xff; }
+ virtual void mreq_w(offs_t offset, uint8_t data) { }
+ virtual uint8_t iorq_r(offs_t offset) { return 0xff; }
+ virtual void iorq_w(offs_t offset, uint8_t data) { }
virtual void bk21_w(int state) { }
virtual void bk22_w(int state) { }
diff --git a/src/devices/bus/svi3x8/expander/sv601.cpp b/src/devices/bus/svi3x8/expander/sv601.cpp
index 51a51241897..aec81c79ae6 100644
--- a/src/devices/bus/svi3x8/expander/sv601.cpp
+++ b/src/devices/bus/svi3x8/expander/sv601.cpp
@@ -20,19 +20,20 @@ DEFINE_DEVICE_TYPE(SV601, sv601_device, "sv601", "SV-601 Super Expander")
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(sv601_device::device_add_mconfig)
- MCFG_SVI_SLOT_BUS_ADD
- MCFG_SVI_SLOT_INT_HANDLER(WRITELINE(*this, sv601_device, int_w))
- MCFG_SVI_SLOT_ROMDIS_HANDLER(WRITELINE(*this, sv601_device, romdis_w))
- MCFG_SVI_SLOT_RAMDIS_HANDLER(WRITELINE(*this, sv601_device, ramdis_w))
- MCFG_SVI_SLOT_ADD("0", svi_slot_cards, nullptr)
- MCFG_SVI_SLOT_ADD("1", svi_slot_cards, nullptr)
- MCFG_SVI_SLOT_ADD("2", svi_slot_cards, nullptr)
- MCFG_SVI_SLOT_ADD("3", svi_slot_cards, nullptr)
- MCFG_SVI_SLOT_ADD("4", svi_slot_cards, nullptr)
- MCFG_SVI_SLOT_ADD("5", svi_slot_cards, nullptr)
- MCFG_SVI_SLOT_ADD("6", svi_slot_cards, nullptr)
-MACHINE_CONFIG_END
+void sv601_device::device_add_mconfig(machine_config &config)
+{
+ SVI_SLOT_BUS(config, m_slotbus, 0);
+ m_slotbus->int_handler().set(FUNC(sv601_device::int_w));
+ m_slotbus->romdis_handler().set(FUNC(sv601_device::romdis_w));
+ m_slotbus->ramdis_handler().set(FUNC(sv601_device::ramdis_w));
+ SVI_SLOT(config, "0", svi_slot_cards, nullptr);
+ SVI_SLOT(config, "1", svi_slot_cards, nullptr);
+ SVI_SLOT(config, "2", svi_slot_cards, nullptr);
+ SVI_SLOT(config, "3", svi_slot_cards, nullptr);
+ SVI_SLOT(config, "4", svi_slot_cards, nullptr);
+ SVI_SLOT(config, "5", svi_slot_cards, nullptr);
+ SVI_SLOT(config, "6", svi_slot_cards, nullptr);
+}
//**************************************************************************
@@ -67,10 +68,10 @@ WRITE_LINE_MEMBER( sv601_device::int_w ) { m_expander->int_w(state); }
WRITE_LINE_MEMBER( sv601_device::romdis_w ) { m_expander->romdis_w(state); }
WRITE_LINE_MEMBER( sv601_device::ramdis_w ) { m_expander->ramdis_w(state); }
-READ8_MEMBER( sv601_device::mreq_r ) { return m_slotbus->mreq_r(space, offset); }
-WRITE8_MEMBER( sv601_device::mreq_w ) { m_slotbus->mreq_w(space, offset, data); }
-READ8_MEMBER( sv601_device::iorq_r ) { return m_slotbus->iorq_r(space, offset); }
-WRITE8_MEMBER( sv601_device::iorq_w ) { m_slotbus->iorq_w(space, offset, data); }
+uint8_t sv601_device::mreq_r(offs_t offset) { return m_slotbus->mreq_r(offset); }
+void sv601_device::mreq_w(offs_t offset, uint8_t data) { m_slotbus->mreq_w(offset, data); }
+uint8_t sv601_device::iorq_r(offs_t offset) { return m_slotbus->iorq_r(offset); }
+void sv601_device::iorq_w(offs_t offset, uint8_t data) { m_slotbus->iorq_w(offset, data); }
void sv601_device::bk21_w(int state) { m_slotbus->bk21_w(state); }
void sv601_device::bk22_w(int state) { m_slotbus->bk22_w(state); }
diff --git a/src/devices/bus/svi3x8/expander/sv601.h b/src/devices/bus/svi3x8/expander/sv601.h
index 7918bc82441..692191a7ea9 100644
--- a/src/devices/bus/svi3x8/expander/sv601.h
+++ b/src/devices/bus/svi3x8/expander/sv601.h
@@ -33,10 +33,10 @@ public:
WRITE_LINE_MEMBER( ramdis_w );
// from host
- virtual DECLARE_READ8_MEMBER( mreq_r ) override;
- virtual DECLARE_WRITE8_MEMBER( mreq_w ) override;
- virtual DECLARE_READ8_MEMBER( iorq_r ) override;
- virtual DECLARE_WRITE8_MEMBER( iorq_w ) override;
+ virtual uint8_t mreq_r(offs_t offset) override;
+ virtual void mreq_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t iorq_r(offs_t offset) override;
+ virtual void iorq_w(offs_t offset, uint8_t data) override;
virtual void bk21_w(int state) override;
virtual void bk22_w(int state) override;
diff --git a/src/devices/bus/svi3x8/expander/sv602.cpp b/src/devices/bus/svi3x8/expander/sv602.cpp
index b7c657bddce..25624a83e9a 100644
--- a/src/devices/bus/svi3x8/expander/sv602.cpp
+++ b/src/devices/bus/svi3x8/expander/sv602.cpp
@@ -20,13 +20,14 @@ DEFINE_DEVICE_TYPE(SV602, sv602_device, "sv602", "SV-602 Single Slot Expander")
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(sv602_device::device_add_mconfig)
- MCFG_SVI_SLOT_BUS_ADD
- MCFG_SVI_SLOT_INT_HANDLER(WRITELINE(*this, sv602_device, int_w))
- MCFG_SVI_SLOT_ROMDIS_HANDLER(WRITELINE(*this, sv602_device, romdis_w))
- MCFG_SVI_SLOT_RAMDIS_HANDLER(WRITELINE(*this, sv602_device, ramdis_w))
- MCFG_SVI_SLOT_ADD("0", sv602_slot_cards, nullptr)
-MACHINE_CONFIG_END
+void sv602_device::device_add_mconfig(machine_config &config)
+{
+ SVI_SLOT_BUS(config, m_slotbus, 0);
+ m_slotbus->int_handler().set(FUNC(sv602_device::int_w));
+ m_slotbus->romdis_handler().set(FUNC(sv602_device::romdis_w));
+ m_slotbus->ramdis_handler().set(FUNC(sv602_device::ramdis_w));
+ SVI_SLOT(config, "0", sv602_slot_cards, nullptr);
+}
//**************************************************************************
@@ -61,10 +62,10 @@ WRITE_LINE_MEMBER( sv602_device::int_w ) { m_expander->int_w(state); }
WRITE_LINE_MEMBER( sv602_device::romdis_w ) { m_expander->romdis_w(state); }
WRITE_LINE_MEMBER( sv602_device::ramdis_w ) { m_expander->ramdis_w(state); }
-READ8_MEMBER( sv602_device::mreq_r ) { return m_slotbus->mreq_r(space, offset); }
-WRITE8_MEMBER( sv602_device::mreq_w ) { m_slotbus->mreq_w(space, offset, data); }
-READ8_MEMBER( sv602_device::iorq_r ) { return m_slotbus->iorq_r(space, offset); }
-WRITE8_MEMBER( sv602_device::iorq_w ) { m_slotbus->iorq_w(space, offset, data); }
+uint8_t sv602_device::mreq_r(offs_t offset) { return m_slotbus->mreq_r(offset); }
+void sv602_device::mreq_w(offs_t offset, uint8_t data) { m_slotbus->mreq_w(offset, data); }
+uint8_t sv602_device::iorq_r(offs_t offset) { return m_slotbus->iorq_r(offset); }
+void sv602_device::iorq_w(offs_t offset, uint8_t data) { m_slotbus->iorq_w(offset, data); }
void sv602_device::bk21_w(int state) { m_slotbus->bk21_w(state); }
void sv602_device::bk22_w(int state) { m_slotbus->bk22_w(state); }
diff --git a/src/devices/bus/svi3x8/expander/sv602.h b/src/devices/bus/svi3x8/expander/sv602.h
index bb59b93c7ee..607d1cf6c17 100644
--- a/src/devices/bus/svi3x8/expander/sv602.h
+++ b/src/devices/bus/svi3x8/expander/sv602.h
@@ -28,10 +28,10 @@ public:
sv602_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// from host
- virtual DECLARE_READ8_MEMBER( mreq_r ) override;
- virtual DECLARE_WRITE8_MEMBER( mreq_w ) override;
- virtual DECLARE_READ8_MEMBER( iorq_r ) override;
- virtual DECLARE_WRITE8_MEMBER( iorq_w ) override;
+ virtual uint8_t mreq_r(offs_t offset) override;
+ virtual void mreq_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t iorq_r(offs_t offset) override;
+ virtual void iorq_w(offs_t offset, uint8_t data) override;
virtual void bk21_w(int state) override;
virtual void bk22_w(int state) override;
diff --git a/src/devices/bus/svi3x8/expander/sv603.cpp b/src/devices/bus/svi3x8/expander/sv603.cpp
index a35b46e3f84..fc8e8c86d96 100644
--- a/src/devices/bus/svi3x8/expander/sv603.cpp
+++ b/src/devices/bus/svi3x8/expander/sv603.cpp
@@ -8,7 +8,6 @@
#include "emu.h"
#include "sv603.h"
-
#include "softlist.h"
#include "speaker.h"
@@ -37,31 +36,20 @@ const tiny_rom_entry *sv603_device::device_rom_region() const
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(sv603_device::device_add_mconfig)
- SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("snd", SN76489A, XTAL(10'738'635) / 3)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
-
- // cartridge slot
- MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "coleco_cart")
- MCFG_GENERIC_EXTENSIONS("bin,rom,col")
- MCFG_GENERIC_LOAD(sv603_device, cartridge)
- MCFG_SOFTWARE_LIST_ADD("cart_list", "coleco")
-MACHINE_CONFIG_END
-
-
-//**************************************************************************
-// CARTRIDGE
-//**************************************************************************
-
-DEVICE_IMAGE_LOAD_MEMBER( sv603_device, cartridge )
+void sv603_device::device_add_mconfig(machine_config &config)
{
- uint32_t size = m_cart_rom->common_get_size("rom");
+ SPEAKER(config, "mono").front_center();
+ SN76489A(config, m_snd, XTAL(10'738'635) / 3).add_route(ALL_OUTPUTS, "mono", 1.00);
- m_cart_rom->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
- m_cart_rom->common_load_rom(m_cart_rom->get_rom_base(), size, "rom");
+ // controller ports
+ COLECOVISION_CONTROL_PORT(config, m_joy[0], colecovision_control_port_devices, "hand");
+ m_joy[0]->irq().set(FUNC(sv603_device::joy_irq_w<0>));
+ COLECOVISION_CONTROL_PORT(config, m_joy[1], colecovision_control_port_devices, nullptr);
+ m_joy[1]->irq().set(FUNC(sv603_device::joy_irq_w<1>));
- return image_init_result::PASS;
+ // cartridge slot
+ COLECOVISION_CARTRIDGE_SLOT(config, m_cart, colecovision_cartridges, nullptr);
+ SOFTWARE_LIST(config, "cart_list").set_original("coleco");
}
@@ -78,7 +66,8 @@ sv603_device::sv603_device(const machine_config &mconfig, const char *tag, devic
device_svi_expander_interface(mconfig, *this),
m_bios(*this, "bios"),
m_snd(*this, "snd"),
- m_cart_rom(*this, "cartslot")
+ m_joy{ {*this, "joy1"}, {*this, "joy2"} },
+ m_cart(*this, COLECOVISION_CARTRIDGE_SLOT_TAG)
{
}
@@ -104,40 +93,84 @@ void sv603_device::device_reset()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER( sv603_device::mreq_r )
+template<int N>
+WRITE_LINE_MEMBER( sv603_device::joy_irq_w )
{
+ m_expander->int_w(state);
+}
+
+uint8_t sv603_device::mreq_r(offs_t offset)
+{
+ uint8_t data = 0xff;
+
+ // ls138 (active low)
+ int ccs1 = ((offset >> 13) == 0) ? 0 : 1;
+ int ccs2 = ((offset >> 13) == 1) ? 0 : 1;
+ int ccs3 = ((offset >> 13) == 2) ? 0 : 1;
+ int ccs4 = ((offset >> 13) == 3) ? 0 : 1;
+ int bios = ((offset >> 13) == 4) ? 0 : 1;
+ // 5, 6, 7: not connected
+
m_expander->romdis_w(0);
+ m_expander->ramdis_w(bios);
- if (offset < 0x8000)
- return m_cart_rom->read_rom(space, offset);
+ data &= m_cart->bd_r(offset, data, ccs1, ccs2, ccs3, ccs4);
- if (offset >= 0x8000 && offset < 0xa000)
- {
- m_expander->ramdis_w(0);
- return m_bios->as_u8(offset & 0x1fff);
- }
+ if (bios == 0)
+ data &= m_bios->as_u8(offset & 0x1fff);
- return 0xff;
+ return data;
}
-WRITE8_MEMBER( sv603_device::mreq_w )
+void sv603_device::mreq_w(offs_t offset, uint8_t data)
{
m_expander->romdis_w(0);
}
-READ8_MEMBER( sv603_device::iorq_r )
+uint8_t sv603_device::iorq_r(offs_t offset)
{
- if (offset >= 0xa0 && offset <= 0xbf)
- return m_expander->excs_r(space, offset);
+ uint8_t data = 0xff;
+
+ switch (offset & 0xe0)
+ {
+ case 0xa0:
+ data = m_expander->excs_r(offset);
+ break;
+
+ case 0xe0:
+ data = m_joy[BIT(offset, 1)]->read();
+ break;
+ }
- return 0xff;
+ return data;
}
-WRITE8_MEMBER( sv603_device::iorq_w )
+void sv603_device::iorq_w(offs_t offset, uint8_t data)
{
- if (offset >= 0xa0 && offset <= 0xbf)
- m_expander->excs_w(space, offset, data);
-
- if (offset >= 0xe0 && offset <= 0xff)
+ switch (offset & 0xe0)
+ {
+ case 0x80:
+ // keypad mode
+ m_joy[0]->common0_w(1);
+ m_joy[0]->common1_w(0);
+ m_joy[1]->common0_w(1);
+ m_joy[1]->common1_w(0);
+ break;
+
+ case 0xa0:
+ m_expander->excs_w(offset, data);
+ break;
+
+ case 0xc0:
+ // joystick mode
+ m_joy[0]->common0_w(0);
+ m_joy[0]->common1_w(1);
+ m_joy[1]->common0_w(0);
+ m_joy[1]->common1_w(1);
+ break;
+
+ case 0xe0:
m_snd->write(data);
+ break;
+ }
}
diff --git a/src/devices/bus/svi3x8/expander/sv603.h b/src/devices/bus/svi3x8/expander/sv603.h
index 57d16521c17..a6b3fde21b8 100644
--- a/src/devices/bus/svi3x8/expander/sv603.h
+++ b/src/devices/bus/svi3x8/expander/sv603.h
@@ -13,8 +13,8 @@
#include "expander.h"
#include "sound/sn76496.h"
-#include "bus/generic/slot.h"
-#include "bus/generic/carts.h"
+#include "bus/coleco/cartridge/exp.h"
+#include "bus/coleco/controller/ctrl.h"
//**************************************************************************
@@ -30,12 +30,12 @@ public:
sv603_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// from host
- virtual DECLARE_READ8_MEMBER( mreq_r ) override;
- virtual DECLARE_WRITE8_MEMBER( mreq_w ) override;
- virtual DECLARE_READ8_MEMBER( iorq_r ) override;
- virtual DECLARE_WRITE8_MEMBER( iorq_w ) override;
+ virtual uint8_t mreq_r(offs_t offset) override;
+ virtual void mreq_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t iorq_r(offs_t offset) override;
+ virtual void iorq_w(offs_t offset, uint8_t data) override;
- DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cartridge);
+ template<int N> DECLARE_WRITE_LINE_MEMBER( joy_irq_w );
protected:
virtual const tiny_rom_entry *device_rom_region() const override;
@@ -46,7 +46,8 @@ protected:
private:
required_memory_region m_bios;
required_device<sn76489a_device> m_snd;
- required_device<generic_slot_device> m_cart_rom;
+ required_device<colecovision_control_port_device> m_joy[2];
+ required_device<colecovision_cartridge_slot_device> m_cart;
};
// device type definition
diff --git a/src/devices/bus/svi3x8/slot/slot.cpp b/src/devices/bus/svi3x8/slot/slot.cpp
index c345d864f4b..eb2137ce629 100644
--- a/src/devices/bus/svi3x8/slot/slot.cpp
+++ b/src/devices/bus/svi3x8/slot/slot.cpp
@@ -20,11 +20,11 @@ DEFINE_DEVICE_TYPE(SVI_SLOT_BUS, svi_slot_bus_device, "svislotbus", "SVI Slot Bu
// svi_slot_bus_device - constructor
//-------------------------------------------------
-svi_slot_bus_device::svi_slot_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- device_t(mconfig, SVI_SLOT_BUS, tag, owner, clock),
- m_int_handler(*this),
- m_romdis_handler(*this),
- m_ramdis_handler(*this)
+svi_slot_bus_device::svi_slot_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, SVI_SLOT_BUS, tag, owner, clock)
+ , m_int_handler(*this)
+ , m_romdis_handler(*this)
+ , m_ramdis_handler(*this)
{
}
@@ -71,14 +71,14 @@ void svi_slot_bus_device::add_card(device_svi_slot_interface *card)
// mreq_r - memory read from slot
//-------------------------------------------------
-READ8_MEMBER( svi_slot_bus_device::mreq_r )
+uint8_t svi_slot_bus_device::mreq_r(offs_t offset)
{
device_svi_slot_interface *entry = m_dev.first();
uint8_t data = 0xff;
while (entry)
{
- data &= entry->mreq_r(space, offset);
+ data &= entry->mreq_r(offset);
entry = entry->next();
}
@@ -89,13 +89,13 @@ READ8_MEMBER( svi_slot_bus_device::mreq_r )
// mreq_w - memory write to slot
//-------------------------------------------------
-WRITE8_MEMBER( svi_slot_bus_device::mreq_w )
+void svi_slot_bus_device::mreq_w(offs_t offset, uint8_t data)
{
device_svi_slot_interface *entry = m_dev.first();
while (entry)
{
- entry->mreq_w(space, offset, data);
+ entry->mreq_w(offset, data);
entry = entry->next();
}
}
@@ -104,14 +104,14 @@ WRITE8_MEMBER( svi_slot_bus_device::mreq_w )
// iorq_r - memory read from slot
//-------------------------------------------------
-READ8_MEMBER( svi_slot_bus_device::iorq_r )
+uint8_t svi_slot_bus_device::iorq_r(offs_t offset)
{
device_svi_slot_interface *entry = m_dev.first();
uint8_t data = 0xff;
while (entry)
{
- data &= entry->iorq_r(space, offset);
+ data &= entry->iorq_r(offset);
entry = entry->next();
}
@@ -122,13 +122,13 @@ READ8_MEMBER( svi_slot_bus_device::iorq_r )
// iorq_w - memory write to slot
//-------------------------------------------------
-WRITE8_MEMBER( svi_slot_bus_device::iorq_w )
+void svi_slot_bus_device::iorq_w(offs_t offset, uint8_t data)
{
device_svi_slot_interface *entry = m_dev.first();
while (entry)
{
- entry->iorq_w(space, offset, data);
+ entry->iorq_w(offset, data);
entry = entry->next();
}
}
@@ -204,10 +204,9 @@ DEFINE_DEVICE_TYPE(SVI_SLOT, svi_slot_device, "svislot", "SVI Slot")
// svi_slot_device - constructor
//-------------------------------------------------
-svi_slot_device::svi_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- device_t(mconfig, SVI_SLOT, tag, owner, clock),
- device_slot_interface(mconfig, *this),
- m_bus_tag(nullptr)
+svi_slot_device::svi_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, SVI_SLOT, tag, owner, clock)
+ , device_slot_interface(mconfig, *this)
{
}
@@ -221,7 +220,7 @@ void svi_slot_device::device_start()
if (dev)
{
- svi_slot_bus_device *bus = downcast<svi_slot_bus_device *>(m_owner->subdevice(m_bus_tag));
+ svi_slot_bus_device *bus = downcast<svi_slot_bus_device *>(owner()->subdevice(SVIBUS_TAG));
bus->add_card(dev);
}
}
diff --git a/src/devices/bus/svi3x8/slot/slot.h b/src/devices/bus/svi3x8/slot/slot.h
index 702c005b770..756f17658fd 100644
--- a/src/devices/bus/svi3x8/slot/slot.h
+++ b/src/devices/bus/svi3x8/slot/slot.h
@@ -40,27 +40,11 @@
#pragma once
-
//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
+// CONSTANTS / MACROS
//**************************************************************************
-#define MCFG_SVI_SLOT_BUS_ADD \
- MCFG_DEVICE_ADD("slotbus", SVI_SLOT_BUS, 0)
-
-#define MCFG_SVI_SLOT_ADD(_tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, SVI_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- downcast<svi_slot_device &>(*device).set_bus(this, "slotbus");
-
-#define MCFG_SVI_SLOT_INT_HANDLER(_devcb) \
- downcast<svi_slot_bus_device &>(*device).set_int_handler(DEVCB_##_devcb);
-
-#define MCFG_SVI_SLOT_ROMDIS_HANDLER(_devcb) \
- downcast<svi_slot_bus_device &>(*device).set_romdis_handler(DEVCB_##_devcb);
-
-#define MCFG_SVI_SLOT_RAMDIS_HANDLER(_devcb) \
- downcast<svi_slot_bus_device &>(*device).set_ramdis_handler(DEVCB_##_devcb);
+#define SVIBUS_TAG "slot_bux"
//**************************************************************************
@@ -79,9 +63,9 @@ public:
virtual ~svi_slot_bus_device();
// callbacks
- template <class Object> devcb_base &set_int_handler(Object &&cb) { return m_int_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_romdis_handler(Object &&cb) { return m_romdis_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_ramdis_handler(Object &&cb) { return m_ramdis_handler.set_callback(std::forward<Object>(cb)); }
+ auto int_handler() { return m_int_handler.bind(); }
+ auto romdis_handler() { return m_romdis_handler.bind(); }
+ auto ramdis_handler() { return m_ramdis_handler.bind(); }
void add_card(device_svi_slot_interface *card);
@@ -91,10 +75,10 @@ public:
DECLARE_WRITE_LINE_MEMBER( ramdis_w ) { m_ramdis_handler(state); };
// from host
- DECLARE_READ8_MEMBER( mreq_r );
- DECLARE_WRITE8_MEMBER( mreq_w );
- DECLARE_READ8_MEMBER( iorq_r );
- DECLARE_WRITE8_MEMBER( iorq_w );
+ uint8_t mreq_r(offs_t offset);
+ void mreq_w(offs_t offset, uint8_t data);
+ uint8_t iorq_r(offs_t offset);
+ void iorq_w(offs_t offset, uint8_t data);
DECLARE_WRITE_LINE_MEMBER( bk21_w );
DECLARE_WRITE_LINE_MEMBER( bk22_w );
@@ -122,10 +106,17 @@ class svi_slot_device : public device_t, public device_slot_interface
{
public:
// construction/destruction
- svi_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ svi_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : svi_slot_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
- // inline configuration
- void set_bus(device_t *owner, const char *bus_tag) { m_owner = owner; m_bus_tag = bus_tag; }
+ svi_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
// device-level overrides
@@ -152,10 +143,10 @@ public:
device_svi_slot_interface *next() const { return m_next; }
- virtual DECLARE_READ8_MEMBER( mreq_r ) { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER( mreq_w ) { }
- virtual DECLARE_READ8_MEMBER( iorq_r ) { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER( iorq_w ) { }
+ virtual uint8_t mreq_r(offs_t offset) { return 0xff; }
+ virtual void mreq_w(offs_t offset, uint8_t data) { }
+ virtual uint8_t iorq_r(offs_t offset) { return 0xff; }
+ virtual void iorq_w(offs_t offset, uint8_t data) { }
virtual DECLARE_WRITE_LINE_MEMBER( bk21_w ) { }
virtual DECLARE_WRITE_LINE_MEMBER( bk22_w ) { }
diff --git a/src/devices/bus/svi3x8/slot/sv801.cpp b/src/devices/bus/svi3x8/slot/sv801.cpp
index 48881ffc9e1..9d73b62aec1 100644
--- a/src/devices/bus/svi3x8/slot/sv801.cpp
+++ b/src/devices/bus/svi3x8/slot/sv801.cpp
@@ -97,7 +97,7 @@ WRITE_LINE_MEMBER( sv801_device::drq_w )
m_drq = state;
}
-WRITE8_MEMBER( sv801_device::motor_w )
+void sv801_device::motor_w(uint8_t data)
{
m_floppy = nullptr;
@@ -112,7 +112,7 @@ WRITE8_MEMBER( sv801_device::motor_w )
m_floppy1->get_device()->mon_w(!BIT(data, 3));
}
-READ8_MEMBER( sv801_device::iorq_r )
+uint8_t sv801_device::iorq_r(offs_t offset)
{
switch (offset)
{
@@ -126,7 +126,7 @@ READ8_MEMBER( sv801_device::iorq_r )
return 0xff;
}
-WRITE8_MEMBER( sv801_device::iorq_w )
+void sv801_device::iorq_w(offs_t offset, uint8_t data)
{
switch (offset)
{
@@ -134,7 +134,7 @@ WRITE8_MEMBER( sv801_device::iorq_w )
case 0x31: m_fdc->track_w(data); break;
case 0x32: m_fdc->sector_w(data); break;
case 0x33: m_fdc->data_w(data); break;
- case 0x34: motor_w(space, 0, data); break;
+ case 0x34: motor_w(data); break;
case 0x38:
m_fdc->dden_w(BIT(data, 0));
if (m_floppy)
diff --git a/src/devices/bus/svi3x8/slot/sv801.h b/src/devices/bus/svi3x8/slot/sv801.h
index 38dea1e55d0..29c2014b872 100644
--- a/src/devices/bus/svi3x8/slot/sv801.h
+++ b/src/devices/bus/svi3x8/slot/sv801.h
@@ -28,8 +28,8 @@ public:
// construction/destruction
sv801_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER( iorq_r ) override;
- virtual DECLARE_WRITE8_MEMBER( iorq_w ) override;
+ virtual uint8_t iorq_r(offs_t offset) override;
+ virtual void iorq_w(offs_t offset, uint8_t data) override;
protected:
virtual void device_add_mconfig(machine_config &config) override;
@@ -37,7 +37,7 @@ protected:
virtual void device_reset() override;
private:
- DECLARE_WRITE8_MEMBER( motor_w );
+ void motor_w(uint8_t data);
DECLARE_WRITE_LINE_MEMBER( intrq_w );
DECLARE_WRITE_LINE_MEMBER( drq_w );
diff --git a/src/devices/bus/svi3x8/slot/sv802.cpp b/src/devices/bus/svi3x8/slot/sv802.cpp
index 2cc905d472c..909ed2fa712 100644
--- a/src/devices/bus/svi3x8/slot/sv802.cpp
+++ b/src/devices/bus/svi3x8/slot/sv802.cpp
@@ -20,12 +20,14 @@ DEFINE_DEVICE_TYPE(SV802, sv802_device, "sv802", "SV-802 Centronics Printer Inte
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(sv802_device::device_add_mconfig)
- MCFG_DEVICE_ADD(m_centronics, CENTRONICS, centronics_devices, "printer")
- MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(*this, sv802_device, busy_w))
+void sv802_device::device_add_mconfig(machine_config &config)
+{
+ CENTRONICS(config, m_centronics, centronics_devices, "printer");
+ m_centronics->busy_handler().set(FUNC(sv802_device::busy_w));
- MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
-MACHINE_CONFIG_END
+ OUTPUT_LATCH(config, m_cent_data_out);
+ m_centronics->set_output_latch(*m_cent_data_out);
+}
//**************************************************************************
@@ -60,7 +62,7 @@ void sv802_device::device_start()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER( sv802_device::iorq_r )
+uint8_t sv802_device::iorq_r(offs_t offset)
{
if (offset == 0x12)
return 0xfe | m_busy;
@@ -68,7 +70,7 @@ READ8_MEMBER( sv802_device::iorq_r )
return 0xff;
}
-WRITE8_MEMBER( sv802_device::iorq_w )
+void sv802_device::iorq_w(offs_t offset, uint8_t data)
{
switch (offset)
{
diff --git a/src/devices/bus/svi3x8/slot/sv802.h b/src/devices/bus/svi3x8/slot/sv802.h
index 2a06329c966..aabea33bbaf 100644
--- a/src/devices/bus/svi3x8/slot/sv802.h
+++ b/src/devices/bus/svi3x8/slot/sv802.h
@@ -28,8 +28,8 @@ public:
// construction/destruction
sv802_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER( iorq_r ) override;
- virtual DECLARE_WRITE8_MEMBER( iorq_w ) override;
+ virtual uint8_t iorq_r(offs_t offset) override;
+ virtual void iorq_w(offs_t offset, uint8_t data) override;
protected:
virtual void device_add_mconfig(machine_config &config) override;
diff --git a/src/devices/bus/svi3x8/slot/sv803.cpp b/src/devices/bus/svi3x8/slot/sv803.cpp
index db79801530c..6adc07fd193 100644
--- a/src/devices/bus/svi3x8/slot/sv803.cpp
+++ b/src/devices/bus/svi3x8/slot/sv803.cpp
@@ -56,7 +56,7 @@ void sv803_device::device_reset()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER( sv803_device::mreq_r )
+uint8_t sv803_device::mreq_r(offs_t offset)
{
if (offset >= 0x8000 && offset <= 0xbfff)
return m_ram[offset - 0x8000];
@@ -64,7 +64,7 @@ READ8_MEMBER( sv803_device::mreq_r )
return 0xff;
}
-WRITE8_MEMBER( sv803_device::mreq_w )
+void sv803_device::mreq_w(offs_t offset, uint8_t data)
{
if (offset >= 0x8000 && offset <= 0xbfff)
m_ram[offset - 0x8000] = data;
diff --git a/src/devices/bus/svi3x8/slot/sv803.h b/src/devices/bus/svi3x8/slot/sv803.h
index 6fd1d2b635a..8cae18acf64 100644
--- a/src/devices/bus/svi3x8/slot/sv803.h
+++ b/src/devices/bus/svi3x8/slot/sv803.h
@@ -26,8 +26,8 @@ public:
// construction/destruction
sv803_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER( mreq_r ) override;
- virtual DECLARE_WRITE8_MEMBER( mreq_w ) override;
+ virtual uint8_t mreq_r(offs_t offset) override;
+ virtual void mreq_w(offs_t offset, uint8_t data) override;
protected:
virtual void device_start() override;
diff --git a/src/devices/bus/svi3x8/slot/sv805.cpp b/src/devices/bus/svi3x8/slot/sv805.cpp
index bc4dc77c19f..cdcaee6f167 100644
--- a/src/devices/bus/svi3x8/slot/sv805.cpp
+++ b/src/devices/bus/svi3x8/slot/sv805.cpp
@@ -65,7 +65,7 @@ void sv805_device::device_start()
// IMPLEMENTATION
//**************************************************************************
-READ8_MEMBER( sv805_device::iorq_r )
+uint8_t sv805_device::iorq_r(offs_t offset)
{
switch (offset)
{
@@ -77,13 +77,13 @@ READ8_MEMBER( sv805_device::iorq_r )
case 0x2d:
case 0x2e:
case 0x2f:
- return m_uart->ins8250_r(space, offset & 0x07);
+ return m_uart->ins8250_r(machine().dummy_space(), offset & 0x07);
}
return 0xff;
}
-WRITE8_MEMBER( sv805_device::iorq_w )
+void sv805_device::iorq_w(offs_t offset, uint8_t data)
{
switch (offset)
{
@@ -95,7 +95,7 @@ WRITE8_MEMBER( sv805_device::iorq_w )
case 0x2d:
case 0x2e:
case 0x2f:
- m_uart->ins8250_w(space, offset & 0x07, data);
+ m_uart->ins8250_w(machine().dummy_space(), offset & 0x07, data);
}
}
diff --git a/src/devices/bus/svi3x8/slot/sv805.h b/src/devices/bus/svi3x8/slot/sv805.h
index 3a6f350a490..892dc23b432 100644
--- a/src/devices/bus/svi3x8/slot/sv805.h
+++ b/src/devices/bus/svi3x8/slot/sv805.h
@@ -28,8 +28,8 @@ public:
// construction/destruction
sv805_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER( iorq_r ) override;
- virtual DECLARE_WRITE8_MEMBER( iorq_w ) override;
+ virtual uint8_t iorq_r(offs_t offset) override;
+ virtual void iorq_w(offs_t offset, uint8_t data) override;
protected:
virtual void device_add_mconfig(machine_config &config) override;
diff --git a/src/devices/bus/svi3x8/slot/sv806.cpp b/src/devices/bus/svi3x8/slot/sv806.cpp
index 5408aa8738c..aed4fb80bda 100644
--- a/src/devices/bus/svi3x8/slot/sv806.cpp
+++ b/src/devices/bus/svi3x8/slot/sv806.cpp
@@ -114,7 +114,7 @@ MC6845_UPDATE_ROW( sv806_device::crtc_update_row )
}
}
-READ8_MEMBER( sv806_device::mreq_r )
+uint8_t sv806_device::mreq_r(offs_t offset)
{
if (offset >= 0xf000 && m_ram_enabled)
{
@@ -125,7 +125,7 @@ READ8_MEMBER( sv806_device::mreq_r )
return 0xff;
}
-WRITE8_MEMBER( sv806_device::mreq_w )
+void sv806_device::mreq_w(offs_t offset, uint8_t data)
{
if (offset >= 0xf000 && m_ram_enabled)
{
@@ -134,20 +134,20 @@ WRITE8_MEMBER( sv806_device::mreq_w )
}
}
-READ8_MEMBER( sv806_device::iorq_r )
+uint8_t sv806_device::iorq_r(offs_t offset)
{
if (offset == 0x51)
- return m_crtc->register_r(space, 0);
+ return m_crtc->register_r();
return 0xff;
}
-WRITE8_MEMBER( sv806_device::iorq_w )
+void sv806_device::iorq_w(offs_t offset, uint8_t data)
{
switch (offset)
{
- case 0x50: m_crtc->address_w(space, 0, data); break;
- case 0x51: m_crtc->register_w(space, 0, data); break;
+ case 0x50: m_crtc->address_w(data); break;
+ case 0x51: m_crtc->register_w(data); break;
case 0x58: m_ram_enabled = data; break;
}
}
diff --git a/src/devices/bus/svi3x8/slot/sv806.h b/src/devices/bus/svi3x8/slot/sv806.h
index 868117b8565..e6af5071c56 100644
--- a/src/devices/bus/svi3x8/slot/sv806.h
+++ b/src/devices/bus/svi3x8/slot/sv806.h
@@ -28,10 +28,10 @@ public:
// construction/destruction
sv806_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual DECLARE_READ8_MEMBER( mreq_r ) override;
- virtual DECLARE_WRITE8_MEMBER( mreq_w ) override;
- virtual DECLARE_READ8_MEMBER( iorq_r ) override;
- virtual DECLARE_WRITE8_MEMBER( iorq_w ) override;
+ virtual uint8_t mreq_r(offs_t offset) override;
+ virtual void mreq_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t iorq_r(offs_t offset) override;
+ virtual void iorq_w(offs_t offset, uint8_t data) override;
protected:
virtual const tiny_rom_entry *device_rom_region() const override;
diff --git a/src/devices/bus/svi3x8/slot/sv807.cpp b/src/devices/bus/svi3x8/slot/sv807.cpp
index 6ea6a77a6bc..281b7845c64 100644
--- a/src/devices/bus/svi3x8/slot/sv807.cpp
+++ b/src/devices/bus/svi3x8/slot/sv807.cpp
@@ -118,7 +118,7 @@ void sv807_device::device_reset()
// test setup: S2 = enabled (22), S3 = enabled (31)
-READ8_MEMBER( sv807_device::mreq_r )
+uint8_t sv807_device::mreq_r(offs_t offset)
{
if ((BK21_ACTIVE || BK31_ACTIVE) && offset < 0x8000)
{
@@ -135,7 +135,7 @@ READ8_MEMBER( sv807_device::mreq_r )
return 0xff;
}
-WRITE8_MEMBER( sv807_device::mreq_w )
+void sv807_device::mreq_w(offs_t offset, uint8_t data)
{
if ((BK21_ACTIVE || BK31_ACTIVE) && offset < 0x8000)
{
diff --git a/src/devices/bus/svi3x8/slot/sv807.h b/src/devices/bus/svi3x8/slot/sv807.h
index e3f12201d37..8d12befff79 100644
--- a/src/devices/bus/svi3x8/slot/sv807.h
+++ b/src/devices/bus/svi3x8/slot/sv807.h
@@ -29,8 +29,8 @@ public:
// optional information overrides
virtual ioport_constructor device_input_ports() const override;
- virtual DECLARE_READ8_MEMBER( mreq_r ) override;
- virtual DECLARE_WRITE8_MEMBER( mreq_w ) override;
+ virtual uint8_t mreq_r(offs_t offset) override;
+ virtual void mreq_w(offs_t offset, uint8_t data) override;
virtual void bk21_w(int state) override;
virtual void bk22_w(int state) override;
diff --git a/src/devices/bus/ti8x/bitsocket.cpp b/src/devices/bus/ti8x/bitsocket.cpp
index e9394788d94..bfe7849aa40 100644
--- a/src/devices/bus/ti8x/bitsocket.cpp
+++ b/src/devices/bus/ti8x/bitsocket.cpp
@@ -25,9 +25,10 @@ bit_socket_device::bit_socket_device(
}
-MACHINE_CONFIG_START(bit_socket_device::device_add_mconfig)
- MCFG_DEVICE_ADD("stream", BITBANGER, 0)
-MACHINE_CONFIG_END
+void bit_socket_device::device_add_mconfig(machine_config &config)
+{
+ BITBANGER(config, m_stream, 0);
+}
void bit_socket_device::device_start()
diff --git a/src/devices/bus/ti8x/teeconn.cpp b/src/devices/bus/ti8x/teeconn.cpp
index a251ee1ca4b..7277d4af93e 100644
--- a/src/devices/bus/ti8x/teeconn.cpp
+++ b/src/devices/bus/ti8x/teeconn.cpp
@@ -61,15 +61,16 @@ WRITE_LINE_MEMBER(tee_connector_device::ring_b_w)
}
-MACHINE_CONFIG_START(tee_connector_device::device_add_mconfig)
- MCFG_DEVICE_ADD(m_port_a, TI8X_LINK_PORT, default_ti8x_link_devices, nullptr)
- MCFG_TI8X_LINK_TIP_HANDLER(WRITELINE(*this, tee_connector_device, tip_a_w))
- MCFG_TI8X_LINK_RING_HANDLER(WRITELINE(*this, tee_connector_device, ring_a_w))
-
- MCFG_DEVICE_ADD(m_port_b, TI8X_LINK_PORT, default_ti8x_link_devices, nullptr)
- MCFG_TI8X_LINK_TIP_HANDLER(WRITELINE(*this, tee_connector_device, tip_b_w))
- MCFG_TI8X_LINK_RING_HANDLER(WRITELINE(*this, tee_connector_device, ring_b_w))
-MACHINE_CONFIG_END
+void tee_connector_device::device_add_mconfig(machine_config &config)
+{
+ TI8X_LINK_PORT(config, m_port_a, default_ti8x_link_devices, nullptr);
+ m_port_a->tip_handler().set(FUNC(tee_connector_device::tip_a_w));
+ m_port_a->ring_handler().set(FUNC(tee_connector_device::ring_a_w));
+
+ TI8X_LINK_PORT(config, m_port_b, default_ti8x_link_devices, nullptr);
+ m_port_b->tip_handler().set(FUNC(tee_connector_device::tip_b_w));
+ m_port_b->ring_handler().set(FUNC(tee_connector_device::ring_b_w));
+}
void tee_connector_device::device_start()
diff --git a/src/devices/bus/ti8x/ti8x.h b/src/devices/bus/ti8x/ti8x.h
index 1a01aeda2e3..e81a4fc5a9e 100644
--- a/src/devices/bus/ti8x/ti8x.h
+++ b/src/devices/bus/ti8x/ti8x.h
@@ -42,13 +42,6 @@
DECLARE_DEVICE_TYPE(TI8X_LINK_PORT, ti8x_link_port_device)
-#define MCFG_TI8X_LINK_TIP_HANDLER(cb) \
- downcast<ti8x_link_port_device &>(*device).set_tip_handler(DEVCB_##cb);
-
-#define MCFG_TI8X_LINK_RING_HANDLER(cb) \
- downcast<ti8x_link_port_device &>(*device).set_ring_handler(DEVCB_##cb);
-
-
class device_ti8x_link_port_interface;
@@ -67,8 +60,8 @@ public:
ti8x_link_port_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0);
// static configuration helpers
- template <class Object> devcb_base &set_tip_handler(Object &&cb) { return m_tip_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_ring_handler(Object &&cb) { return m_ring_handler.set_callback(std::forward<Object>(cb)); }
+ auto tip_handler() { return m_tip_handler.bind(); }
+ auto ring_handler() { return m_ring_handler.bind(); }
DECLARE_WRITE_LINE_MEMBER(tip_w);
DECLARE_WRITE_LINE_MEMBER(ring_w);
diff --git a/src/devices/bus/ti8x/tispeaker.cpp b/src/devices/bus/ti8x/tispeaker.cpp
index 17d81fe10b9..ed9ec36a5ec 100644
--- a/src/devices/bus/ti8x/tispeaker.cpp
+++ b/src/devices/bus/ti8x/tispeaker.cpp
@@ -26,16 +26,15 @@ stereo_speaker_device::stereo_speaker_device(
}
-MACHINE_CONFIG_START(stereo_speaker_device::device_add_mconfig)
+void stereo_speaker_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "outl").front_left();
SPEAKER(config, "outr").front_right();
- MCFG_DEVICE_ADD("lspkr", SPEAKER_SOUND, 0)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "outl", 0.50)
+ SPEAKER_SOUND(config, m_left_speaker, 0).add_route(ALL_OUTPUTS, "outl", 0.50);
- MCFG_DEVICE_ADD("rspkr", SPEAKER_SOUND, 0)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "outr", 0.50)
-MACHINE_CONFIG_END
+ SPEAKER_SOUND(config, m_right_speaker, 0).add_route(ALL_OUTPUTS, "outr", 0.50);
+}
void stereo_speaker_device::device_start()
@@ -70,12 +69,12 @@ mono_speaker_device::mono_speaker_device(
}
-MACHINE_CONFIG_START(mono_speaker_device::device_add_mconfig)
+void mono_speaker_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("spkr", SPEAKER_SOUND, 0)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
-MACHINE_CONFIG_END
+ SPEAKER_SOUND(config, m_speaker, 0).add_route(ALL_OUTPUTS, "mono", 0.50);
+}
void mono_speaker_device::device_start()
diff --git a/src/devices/bus/ti99/gromport/cartridges.cpp b/src/devices/bus/ti99/gromport/cartridges.cpp
index 7e93029f97f..d3f3f75a10a 100644
--- a/src/devices/bus/ti99/gromport/cartridges.cpp
+++ b/src/devices/bus/ti99/gromport/cartridges.cpp
@@ -341,23 +341,23 @@ void ti99_cartridge_device::set_slot(int i)
READ8Z_MEMBER(ti99_cartridge_device::readz)
{
if (m_pcb != nullptr)
- m_pcb->readz(space, offset, value);
+ m_pcb->readz(offset, value);
}
-WRITE8_MEMBER(ti99_cartridge_device::write)
+void ti99_cartridge_device::write(offs_t offset, uint8_t data)
{
if (m_pcb != nullptr)
- m_pcb->write(space, offset, data);
+ m_pcb->write(offset, data);
}
READ8Z_MEMBER(ti99_cartridge_device::crureadz)
{
- if (m_pcb != nullptr) m_pcb->crureadz(space, offset, value);
+ if (m_pcb != nullptr) m_pcb->crureadz(offset, value);
}
-WRITE8_MEMBER(ti99_cartridge_device::cruwrite)
+void ti99_cartridge_device::cruwrite(offs_t offset, uint8_t data)
{
- if (m_pcb != nullptr) m_pcb->cruwrite(space, offset, data);
+ if (m_pcb != nullptr) m_pcb->cruwrite(offset, data);
}
WRITE_LINE_MEMBER( ti99_cartridge_device::ready_line )
@@ -509,7 +509,7 @@ READ8Z_MEMBER(ti99_cartridge_pcb::readz)
}
}
-WRITE8_MEMBER(ti99_cartridge_pcb::write)
+void ti99_cartridge_pcb::write(offs_t offset, uint8_t data)
{
if (m_romspace_selected)
{
@@ -526,7 +526,7 @@ READ8Z_MEMBER(ti99_cartridge_pcb::crureadz)
{
}
-WRITE8_MEMBER(ti99_cartridge_pcb::cruwrite)
+void ti99_cartridge_pcb::cruwrite(offs_t offset, uint8_t data)
{
}
@@ -614,7 +614,7 @@ READ8Z_MEMBER(ti99_paged12k_cartridge::readz)
}
}
-WRITE8_MEMBER(ti99_paged12k_cartridge::write)
+void ti99_paged12k_cartridge::write(offs_t offset, uint8_t data)
{
if (m_romspace_selected)
{
@@ -663,7 +663,7 @@ READ8Z_MEMBER(ti99_paged16k_cartridge::readz)
}
}
-WRITE8_MEMBER(ti99_paged16k_cartridge::write)
+void ti99_paged16k_cartridge::write(offs_t offset, uint8_t data)
{
if (m_romspace_selected)
{
@@ -720,7 +720,7 @@ READ8Z_MEMBER(ti99_minimem_cartridge::readz)
}
/* Write function for the minimem cartridge. */
-WRITE8_MEMBER(ti99_minimem_cartridge::write)
+void ti99_minimem_cartridge::write(offs_t offset, uint8_t data)
{
if (m_romspace_selected)
{
@@ -788,7 +788,7 @@ READ8Z_MEMBER(ti99_super_cartridge::readz)
}
/* Write function for the super cartridge. */
-WRITE8_MEMBER(ti99_super_cartridge::write)
+void ti99_super_cartridge::write(offs_t offset, uint8_t data)
{
if (m_romspace_selected)
{
@@ -826,19 +826,15 @@ READ8Z_MEMBER(ti99_super_cartridge::crureadz)
// SRL R0,1 Restore Bank Number (optional)
// RT
- // Our implementation in MESS always gets 8 bits in one go. Also, the address
- // is twice the bit number. That is, the offset value is always a multiple
- // of 0x10.
-
if ((offset & 0xfff0) == 0x0800)
{
LOGMASKED(LOG_CRU, "CRU accessed at %04x\n", offset);
uint8_t val = 0x02 << (m_ram_page << 1);
- *value = (val >> ((offset - 0x0800)>>1)) & 0xff;
+ *value = BIT(val, (offset & 0x000e) >> 1);
}
}
-WRITE8_MEMBER(ti99_super_cartridge::cruwrite)
+void ti99_super_cartridge::cruwrite(offs_t offset, uint8_t data)
{
if ((offset & 0xfff0) == 0x0800)
{
@@ -923,7 +919,7 @@ READ8Z_MEMBER(ti99_mbx_cartridge::readz)
}
/* Write function for the mbx cartridge. */
-WRITE8_MEMBER(ti99_mbx_cartridge::write)
+void ti99_mbx_cartridge::write(offs_t offset, uint8_t data)
{
if (m_romspace_selected)
{
@@ -999,7 +995,7 @@ READ8Z_MEMBER(ti99_paged7_cartridge::readz)
}
/* Write function for the paged7 cartridge. */
-WRITE8_MEMBER(ti99_paged7_cartridge::write)
+void ti99_paged7_cartridge::write(offs_t offset, uint8_t data)
{
if (m_romspace_selected)
{
@@ -1071,7 +1067,7 @@ READ8Z_MEMBER(ti99_paged379i_cartridge::readz)
}
/* Write function for the paged379i cartridge. Only used to set the bank. */
-WRITE8_MEMBER(ti99_paged379i_cartridge::write)
+void ti99_paged379i_cartridge::write(offs_t offset, uint8_t data)
{
// Bits: 011x xxxx xxxb bbbx
// x = don't care, bbbb = bank
@@ -1122,7 +1118,7 @@ READ8Z_MEMBER(ti99_paged378_cartridge::readz)
}
/* Write function for the paged378 cartridge. Only used to set the bank. */
-WRITE8_MEMBER(ti99_paged378_cartridge::write)
+void ti99_paged378_cartridge::write(offs_t offset, uint8_t data)
{
// Bits: 011x xxxx xbbb bbbx
// x = don't care, bbbb = bank
@@ -1162,7 +1158,7 @@ READ8Z_MEMBER(ti99_paged377_cartridge::readz)
}
/* Write function for the paged377 cartridge. Only used to set the bank. */
-WRITE8_MEMBER(ti99_paged377_cartridge::write)
+void ti99_paged377_cartridge::write(offs_t offset, uint8_t data)
{
// Bits: 011x xxxb bbbb bbbx
// x = don't care, bbbb = bank
@@ -1216,7 +1212,7 @@ READ8Z_MEMBER(ti99_pagedcru_cartridge::readz)
}
/* Write function for the pagedcru cartridge. No effect. */
-WRITE8_MEMBER(ti99_pagedcru_cartridge::write)
+void ti99_pagedcru_cartridge::write(offs_t offset, uint8_t data)
{
return;
}
@@ -1231,11 +1227,11 @@ READ8Z_MEMBER(ti99_pagedcru_cartridge::crureadz)
{
page = page-(bit/2); // 4 page flags per 8 bits
}
- *value = 1 << (page*2+1);
+ *value = (offset & 0x000e) == (page * 4 + 2) ? 1 : 0;
}
}
-WRITE8_MEMBER(ti99_pagedcru_cartridge::cruwrite)
+void ti99_pagedcru_cartridge::cruwrite(offs_t offset, uint8_t data)
{
if ((offset & 0xf800)==0x0800)
{
@@ -1307,7 +1303,7 @@ READ8Z_MEMBER(ti99_gromemu_cartridge::readz)
{
if (m_grom_selected)
{
- if (m_grom_read_mode) gromemureadz(space, offset, value, mem_mask);
+ if (m_grom_read_mode) gromemureadz(offset, value);
}
else
{
@@ -1327,7 +1323,7 @@ READ8Z_MEMBER(ti99_gromemu_cartridge::readz)
}
}
-WRITE8_MEMBER(ti99_gromemu_cartridge::write)
+void ti99_gromemu_cartridge::write(offs_t offset, uint8_t data)
{
if (m_romspace_selected)
{
@@ -1348,7 +1344,7 @@ WRITE8_MEMBER(ti99_gromemu_cartridge::write)
// Will not change anything when not selected (preceding gsq=ASSERT)
if (m_grom_selected)
{
- if (!m_grom_read_mode) gromemuwrite(space, offset, data, mem_mask);
+ if (!m_grom_read_mode) gromemuwrite(offset, data);
}
}
}
@@ -1373,7 +1369,7 @@ READ8Z_MEMBER(ti99_gromemu_cartridge::gromemureadz)
m_waddr_LSB = false;
}
-WRITE8_MEMBER(ti99_gromemu_cartridge::gromemuwrite)
+void ti99_gromemu_cartridge::gromemuwrite(offs_t offset, uint8_t data)
{
// Set GROM address
if (m_grom_address_mode)
diff --git a/src/devices/bus/ti99/gromport/cartridges.h b/src/devices/bus/ti99/gromport/cartridges.h
index b969e65eccf..e2e729f2d59 100644
--- a/src/devices/bus/ti99/gromport/cartridges.h
+++ b/src/devices/bus/ti99/gromport/cartridges.h
@@ -66,9 +66,9 @@ public:
ti99_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_READ8Z_MEMBER(readz);
- DECLARE_WRITE8_MEMBER(write);
+ void write(offs_t offset, uint8_t data);
DECLARE_READ8Z_MEMBER(crureadz);
- DECLARE_WRITE8_MEMBER(cruwrite);
+ void cruwrite(offs_t offset, uint8_t data);
DECLARE_WRITE_LINE_MEMBER(ready_line);
DECLARE_WRITE_LINE_MEMBER(romgq_line);
@@ -213,9 +213,9 @@ public:
protected:
virtual DECLARE_READ8Z_MEMBER(readz);
- virtual DECLARE_WRITE8_MEMBER(write);
+ virtual void write(offs_t offset, uint8_t data);
virtual DECLARE_READ8Z_MEMBER(crureadz);
- virtual DECLARE_WRITE8_MEMBER(cruwrite);
+ virtual void cruwrite(offs_t offset, uint8_t data);
DECLARE_WRITE_LINE_MEMBER(romgq_line);
virtual void set_gromlines(line_state mline, line_state moline, line_state gsq);
@@ -263,7 +263,7 @@ class ti99_paged12k_cartridge : public ti99_cartridge_pcb
{
public:
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
};
/*********** Paged cartridge (others) ********************/
@@ -272,7 +272,7 @@ class ti99_paged16k_cartridge : public ti99_cartridge_pcb
{
public:
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
};
/*********** Paged7 cartridge (late carts) ********************/
@@ -281,7 +281,7 @@ class ti99_paged7_cartridge : public ti99_cartridge_pcb
{
public:
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
};
/********************** Mini Memory ***********************************/
@@ -290,7 +290,7 @@ class ti99_minimem_cartridge : public ti99_cartridge_pcb
{
public:
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
};
/********************* Super Space II *********************************/
@@ -299,9 +299,9 @@ class ti99_super_cartridge : public ti99_cartridge_pcb
{
public:
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
DECLARE_READ8Z_MEMBER(crureadz) override;
- DECLARE_WRITE8_MEMBER(cruwrite) override;
+ void cruwrite(offs_t offset, uint8_t data) override;
};
/************************* MBX ***************************************/
@@ -310,7 +310,7 @@ class ti99_mbx_cartridge : public ti99_cartridge_pcb
{
public:
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
};
/********************** Paged 379i ************************************/
@@ -319,7 +319,7 @@ class ti99_paged379i_cartridge : public ti99_cartridge_pcb
{
public:
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
private:
int get_paged379i_bank(int rompage);
};
@@ -330,7 +330,7 @@ class ti99_paged378_cartridge : public ti99_cartridge_pcb
{
public:
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
};
/********************** Paged 377 ************************************/
@@ -339,7 +339,7 @@ class ti99_paged377_cartridge : public ti99_cartridge_pcb
{
public:
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
};
/********************** Paged CRU ************************************/
@@ -348,9 +348,9 @@ class ti99_pagedcru_cartridge : public ti99_cartridge_pcb
{
public:
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
DECLARE_READ8Z_MEMBER(crureadz) override;
- DECLARE_WRITE8_MEMBER(cruwrite) override;
+ void cruwrite(offs_t offset, uint8_t data) override;
};
/********************** GROM emulation cartridge ************************************/
@@ -361,9 +361,9 @@ public:
ti99_gromemu_cartridge(): m_waddr_LSB(false), m_grom_selected(false), m_grom_read_mode(false), m_grom_address_mode(false)
{ m_grom_address = 0; }
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
DECLARE_READ8Z_MEMBER(gromemureadz);
- DECLARE_WRITE8_MEMBER(gromemuwrite);
+ void gromemuwrite(offs_t offset, uint8_t data);
void set_gromlines(line_state mline, line_state moline, line_state gsq) override;
private:
diff --git a/src/devices/bus/ti99/gromport/gkracker.cpp b/src/devices/bus/ti99/gromport/gkracker.cpp
index d9de20949b2..57ccfbc87e1 100644
--- a/src/devices/bus/ti99/gromport/gkracker.cpp
+++ b/src/devices/bus/ti99/gromport/gkracker.cpp
@@ -227,18 +227,18 @@ READ8Z_MEMBER(ti99_gkracker_device::readz)
uint8_t val1 = *value;
// Read from the guest cartridge.
- m_cartridge->readz(space, offset, value, mem_mask);
+ m_cartridge->readz(offset, value);
if (val1 != *value)
LOGMASKED(LOG_GKRACKER, "Read (from guest) %04x -> %02x\n", offset, *value);
}
}
-WRITE8_MEMBER(ti99_gkracker_device::write)
+void ti99_gkracker_device::write(offs_t offset, uint8_t data)
{
// write to the guest cartridge if present
if (m_cartridge != nullptr)
{
- m_cartridge->write(space, offset, data, mem_mask);
+ m_cartridge->write(offset, data);
}
if (m_grom_selected)
@@ -307,12 +307,12 @@ WRITE8_MEMBER(ti99_gkracker_device::write)
READ8Z_MEMBER( ti99_gkracker_device::crureadz )
{
- if (m_cartridge != nullptr) m_cartridge->crureadz(space, offset, value);
+ if (m_cartridge != nullptr) m_cartridge->crureadz(offset, value);
}
-WRITE8_MEMBER( ti99_gkracker_device::cruwrite )
+void ti99_gkracker_device::cruwrite(offs_t offset, uint8_t data)
{
- if (m_cartridge != nullptr) m_cartridge->cruwrite(space, offset, data);
+ if (m_cartridge != nullptr) m_cartridge->cruwrite(offset, data);
}
INPUT_CHANGED_MEMBER( ti99_gkracker_device::gk_changed )
diff --git a/src/devices/bus/ti99/gromport/gkracker.h b/src/devices/bus/ti99/gromport/gkracker.h
index bb3d278d57a..34b267bf640 100644
--- a/src/devices/bus/ti99/gromport/gkracker.h
+++ b/src/devices/bus/ti99/gromport/gkracker.h
@@ -19,9 +19,9 @@ public:
ti99_gkracker_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
DECLARE_READ8Z_MEMBER(crureadz) override;
- DECLARE_WRITE8_MEMBER(cruwrite) override;
+ void cruwrite(offs_t offset, uint8_t data) override;
DECLARE_WRITE_LINE_MEMBER(romgq_line) override;
void set_gromlines(line_state mline, line_state moline, line_state gsq) override;
diff --git a/src/devices/bus/ti99/gromport/gromport.cpp b/src/devices/bus/ti99/gromport/gromport.cpp
index b6fa23e1111..5f893aa4423 100644
--- a/src/devices/bus/ti99/gromport/gromport.cpp
+++ b/src/devices/bus/ti99/gromport/gromport.cpp
@@ -143,7 +143,7 @@ READ8Z_MEMBER(gromport_device::readz)
{
if (m_connector != nullptr)
{
- m_connector->readz(space, offset & m_mask, value);
+ m_connector->readz(offset & m_mask, value);
if (m_romgq) LOGMASKED(LOG_READ, "Read %04x -> %02x\n", offset | 0x6000, *value);
}
}
@@ -152,25 +152,25 @@ READ8Z_MEMBER(gromport_device::readz)
Writing via the GROM port. Only 13 address lines are passed through
on the TI-99/4A, and 14 lines on the TI-99/8.
*/
-WRITE8_MEMBER(gromport_device::write)
+void gromport_device::write(offs_t offset, uint8_t data)
{
if (m_connector != nullptr)
{
if (m_romgq) LOGMASKED(LOG_WRITE, "Write %04x <- %02x\n", offset | 0x6000, data);
- m_connector->write(space, offset & m_mask, data);
+ m_connector->write(offset & m_mask, data);
}
}
READ8Z_MEMBER(gromport_device::crureadz)
{
if (m_connector != nullptr)
- m_connector->crureadz(space, offset, value);
+ m_connector->crureadz(offset, value);
}
-WRITE8_MEMBER(gromport_device::cruwrite)
+void gromport_device::cruwrite(offs_t offset, uint8_t data)
{
if (m_connector != nullptr)
- m_connector->cruwrite(space, offset, data);
+ m_connector->cruwrite(offset, data);
}
WRITE_LINE_MEMBER(gromport_device::ready_line)
diff --git a/src/devices/bus/ti99/gromport/gromport.h b/src/devices/bus/ti99/gromport/gromport.h
index 8d5c61ce78d..9c04ef5a8b8 100644
--- a/src/devices/bus/ti99/gromport/gromport.h
+++ b/src/devices/bus/ti99/gromport/gromport.h
@@ -39,10 +39,11 @@ public:
}
gromport_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
DECLARE_READ8Z_MEMBER(readz);
- DECLARE_WRITE8_MEMBER(write);
+ void write(offs_t offset, uint8_t data);
DECLARE_READ8Z_MEMBER(crureadz);
- DECLARE_WRITE8_MEMBER(cruwrite);
+ void cruwrite(offs_t offset, uint8_t data);
DECLARE_WRITE_LINE_MEMBER(ready_line);
DECLARE_WRITE_LINE_MEMBER(romgq_line);
void set_gromlines(line_state mline, line_state moline, line_state gsq);
@@ -76,11 +77,11 @@ class cartridge_connector_device : public device_t
{
public:
virtual DECLARE_READ8Z_MEMBER(readz) = 0;
- virtual DECLARE_WRITE8_MEMBER(write) = 0;
+ virtual void write(offs_t offset, uint8_t data) = 0;
virtual DECLARE_SETADDRESS_DBIN_MEMBER( setaddress_dbin ) { }
virtual DECLARE_READ8Z_MEMBER(crureadz) = 0;
- virtual DECLARE_WRITE8_MEMBER(cruwrite) = 0;
+ virtual void cruwrite(offs_t offset, uint8_t data) = 0;
virtual DECLARE_WRITE_LINE_MEMBER(romgq_line) = 0;
virtual void set_gromlines(line_state mline, line_state moline, line_state gsq) =0;
diff --git a/src/devices/bus/ti99/gromport/multiconn.cpp b/src/devices/bus/ti99/gromport/multiconn.cpp
index efaf57d649d..191853f1029 100644
--- a/src/devices/bus/ti99/gromport/multiconn.cpp
+++ b/src/devices/bus/ti99/gromport/multiconn.cpp
@@ -195,7 +195,7 @@ READ8Z_MEMBER(ti99_multi_cart_conn_device::readz)
if (m_cartridge[i] != nullptr)
{
uint8_t newval = *value;
- m_cartridge[i]->readz(space, offset, &newval, 0xff);
+ m_cartridge[i]->readz(offset, &newval);
if (i==slot)
{
*value = newval;
@@ -207,12 +207,12 @@ READ8Z_MEMBER(ti99_multi_cart_conn_device::readz)
{
if (slot < NUMBER_OF_CARTRIDGE_SLOTS && m_cartridge[slot] != nullptr)
{
- m_cartridge[slot]->readz(space, offset, value, 0xff);
+ m_cartridge[slot]->readz(offset, value);
}
}
}
-WRITE8_MEMBER(ti99_multi_cart_conn_device::write)
+void ti99_multi_cart_conn_device::write(offs_t offset, uint8_t data)
{
// Same issue as above (read)
// We don't have GRAM cartridges, anyway, so it's just used for setting the address.
@@ -222,7 +222,7 @@ WRITE8_MEMBER(ti99_multi_cart_conn_device::write)
{
if (elem != nullptr)
{
- elem->write(space, offset, data, 0xff);
+ elem->write(offset, data);
}
}
}
@@ -232,7 +232,7 @@ WRITE8_MEMBER(ti99_multi_cart_conn_device::write)
if (slot < NUMBER_OF_CARTRIDGE_SLOTS && m_cartridge[slot] != nullptr)
{
// logerror("writing %04x (slot %d) <- %02x\n", offset, slot, data);
- m_cartridge[slot]->write(space, offset, data, 0xff);
+ m_cartridge[slot]->write(offset, data);
}
}
}
@@ -246,11 +246,11 @@ READ8Z_MEMBER(ti99_multi_cart_conn_device::crureadz)
if (m_cartridge[slot] != nullptr)
{
- m_cartridge[slot]->crureadz(space, offset, value);
+ m_cartridge[slot]->crureadz(offset, value);
}
}
-WRITE8_MEMBER(ti99_multi_cart_conn_device::cruwrite)
+void ti99_multi_cart_conn_device::cruwrite(offs_t offset, uint8_t data)
{
int slot = get_active_slot(true, offset);
@@ -260,7 +260,7 @@ WRITE8_MEMBER(ti99_multi_cart_conn_device::cruwrite)
if (m_cartridge[slot] != nullptr)
{
- m_cartridge[slot]->cruwrite(space, offset, data);
+ m_cartridge[slot]->cruwrite(offset, data);
}
}
diff --git a/src/devices/bus/ti99/gromport/multiconn.h b/src/devices/bus/ti99/gromport/multiconn.h
index 97b9308eb36..56a5915cfb2 100644
--- a/src/devices/bus/ti99/gromport/multiconn.h
+++ b/src/devices/bus/ti99/gromport/multiconn.h
@@ -24,9 +24,9 @@ public:
ti99_multi_cart_conn_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
DECLARE_READ8Z_MEMBER(crureadz) override;
- DECLARE_WRITE8_MEMBER(cruwrite) override;
+ void cruwrite(offs_t offset, uint8_t data) override;
DECLARE_WRITE_LINE_MEMBER(romgq_line) override;
void set_gromlines(line_state mline, line_state moline, line_state gsq) override;
DECLARE_WRITE_LINE_MEMBER(gclock_in) override;
diff --git a/src/devices/bus/ti99/gromport/singleconn.cpp b/src/devices/bus/ti99/gromport/singleconn.cpp
index c967cf503f2..9a0b905a9e7 100644
--- a/src/devices/bus/ti99/gromport/singleconn.cpp
+++ b/src/devices/bus/ti99/gromport/singleconn.cpp
@@ -22,25 +22,25 @@ ti99_single_cart_conn_device::ti99_single_cart_conn_device(const machine_config
READ8Z_MEMBER(ti99_single_cart_conn_device::readz)
{
// Pass through
- m_cartridge->readz(space, offset, value);
+ m_cartridge->readz(offset, value);
}
-WRITE8_MEMBER(ti99_single_cart_conn_device::write)
+void ti99_single_cart_conn_device::write(offs_t offset, uint8_t data)
{
// Pass through
- m_cartridge->write(space, offset, data);
+ m_cartridge->write(offset, data);
}
READ8Z_MEMBER(ti99_single_cart_conn_device::crureadz)
{
// Pass through
- m_cartridge->crureadz(space, offset, value);
+ m_cartridge->crureadz(offset, value);
}
-WRITE8_MEMBER(ti99_single_cart_conn_device::cruwrite)
+void ti99_single_cart_conn_device::cruwrite(offs_t offset, uint8_t data)
{
// Pass through
- m_cartridge->cruwrite(space, offset, data);
+ m_cartridge->cruwrite(offset, data);
}
WRITE_LINE_MEMBER(ti99_single_cart_conn_device::romgq_line)
diff --git a/src/devices/bus/ti99/gromport/singleconn.h b/src/devices/bus/ti99/gromport/singleconn.h
index 10f1062f223..831d70ffb18 100644
--- a/src/devices/bus/ti99/gromport/singleconn.h
+++ b/src/devices/bus/ti99/gromport/singleconn.h
@@ -20,9 +20,9 @@ public:
ti99_single_cart_conn_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
DECLARE_READ8Z_MEMBER(crureadz) override;
- DECLARE_WRITE8_MEMBER(cruwrite) override;
+ void cruwrite(offs_t offset, uint8_t data) override;
DECLARE_WRITE_LINE_MEMBER(romgq_line) override;
void set_gromlines(line_state mline, line_state moline, line_state gsq) override;
DECLARE_WRITE_LINE_MEMBER(gclock_in) override;
diff --git a/src/devices/bus/ti99/internal/992board.cpp b/src/devices/bus/ti99/internal/992board.cpp
index 330bcee4566..071526016f2 100644
--- a/src/devices/bus/ti99/internal/992board.cpp
+++ b/src/devices/bus/ti99/internal/992board.cpp
@@ -456,15 +456,15 @@ void io992_device::device_start()
m_set_rom_bank.resolve();
}
-READ8_MEMBER(io992_device::cruread)
+uint8_t io992_device::cruread(offs_t offset)
{
- int address = offset << 4;
+ int address = offset << 1;
uint8_t value = 0x7f; // All Hexbus lines high
double inp = 0;
int i;
uint8_t bit = 1;
- switch (address)
+ switch (address & 0xf800)
{
case 0xe000:
// CRU E000-E7fE: Keyboard
@@ -494,10 +494,10 @@ READ8_MEMBER(io992_device::cruread)
LOGMASKED(LOG_CRU, "CRU %04x -> %02x\n", address, value);
- return value;
+ return BIT(value, offset & 7);
}
-WRITE8_MEMBER(io992_device::cruwrite)
+void io992_device::cruwrite(offs_t offset, uint8_t data)
{
int address = (offset << 1) & 0xf80e;
diff --git a/src/devices/bus/ti99/internal/992board.h b/src/devices/bus/ti99/internal/992board.h
index b9946ebe9c4..5b99519f81f 100644
--- a/src/devices/bus/ti99/internal/992board.h
+++ b/src/devices/bus/ti99/internal/992board.h
@@ -107,8 +107,8 @@ class io992_device : public bus::hexbus::hexbus_chained_device
public:
io992_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- DECLARE_READ8_MEMBER( cruread );
- DECLARE_WRITE8_MEMBER( cruwrite );
+ uint8_t cruread(offs_t offset);
+ void cruwrite(offs_t offset, uint8_t data);
void device_start() override;
ioport_constructor device_input_ports() const override;
auto rombank_cb() { return m_set_rom_bank.bind(); }
diff --git a/src/devices/bus/ti99/internal/998board.cpp b/src/devices/bus/ti99/internal/998board.cpp
index b81eeb01c59..96f1c3d07f3 100644
--- a/src/devices/bus/ti99/internal/998board.cpp
+++ b/src/devices/bus/ti99/internal/998board.cpp
@@ -198,7 +198,7 @@ mainboard8_device::mainboard8_device(const machine_config &mconfig, const char *
// Debugger support
// The memory accesses by the debugger are routed around the custom chip logic
-READ8_MEMBER( mainboard8_device::debugger_read )
+uint8_t mainboard8_device::debugger_read(offs_t offset)
{
int logical_address = offset;
bool compat_mode = (m_crus_debug==ASSERT_LINE);
@@ -243,7 +243,7 @@ READ8_MEMBER( mainboard8_device::debugger_read )
if (m_mofetta->hexbus_access_debug()) return m_rom1[(physical_address & 0x1fff) | 0x6000];
if (m_mofetta->intdsr_access_debug()) return m_rom1[(physical_address & 0x1fff) | 0x4000];
m_ioport->memen_in(ASSERT_LINE);
- m_ioport->readz(space, physical_address & 0xffff, &value);
+ m_ioport->readz(physical_address & 0xffff, &value);
m_ioport->memen_in(CLEAR_LINE);
return value;
}
@@ -251,7 +251,7 @@ READ8_MEMBER( mainboard8_device::debugger_read )
{
// Cartridge space lower 8
m_gromport->romgq_line(ASSERT_LINE);
- m_gromport->readz(space, physical_address & 0x1fff, &value);
+ m_gromport->readz(physical_address & 0x1fff, &value);
m_gromport->romgq_line(CLEAR_LINE);
return value;
}
@@ -259,7 +259,7 @@ READ8_MEMBER( mainboard8_device::debugger_read )
{
// Cartridge space upper 8
m_gromport->romgq_line(ASSERT_LINE);
- m_gromport->readz(space, (physical_address & 0x1fff) | 0x2000, &value);
+ m_gromport->readz((physical_address & 0x1fff) | 0x2000, &value);
m_gromport->romgq_line(CLEAR_LINE);
return value;
}
@@ -276,7 +276,7 @@ READ8_MEMBER( mainboard8_device::debugger_read )
return 0;
}
-WRITE8_MEMBER( mainboard8_device::debugger_write )
+void mainboard8_device::debugger_write(offs_t offset, uint8_t data)
{
int logical_address = offset;
bool compat_mode = (m_crus_debug==ASSERT_LINE);
@@ -324,14 +324,14 @@ WRITE8_MEMBER( mainboard8_device::debugger_write )
if (m_mofetta->hexbus_access_debug()) return;
if (m_mofetta->intdsr_access_debug()) return;
m_ioport->memen_in(ASSERT_LINE);
- m_ioport->write(space, physical_address & 0xffff, data & 0xff);
+ m_ioport->write(physical_address & 0xffff, data & 0xff);
m_ioport->memen_in(CLEAR_LINE); return;
}
if ((physical_address & 0x00ffe000)==0x00ff6000)
{
// Cartridge space lower 8
m_gromport->romgq_line(ASSERT_LINE);
- m_gromport->write(space, physical_address & 0x1fff, data & 0xff);
+ m_gromport->write(physical_address & 0x1fff, data & 0xff);
m_gromport->romgq_line(CLEAR_LINE);
return;
}
@@ -339,7 +339,7 @@ WRITE8_MEMBER( mainboard8_device::debugger_write )
{
// Cartridge space upper 8
m_gromport->romgq_line(ASSERT_LINE);
- m_gromport->write(space, (physical_address & 0x1fff) | 0x2000, data & 0xff);
+ m_gromport->write((physical_address & 0x1fff) | 0x2000, data & 0xff);
m_gromport->romgq_line(CLEAR_LINE);
return;
}
@@ -352,16 +352,16 @@ WRITE8_MEMBER( mainboard8_device::debugger_write )
READ8Z_MEMBER(mainboard8_device::crureadz)
{
- m_ioport->crureadz(space, offset, value);
+ m_ioport->crureadz(offset, value);
}
/*
CRU handling. Mofetta is the only chip that bothers to handle it, beside the PEB
*/
-WRITE8_MEMBER(mainboard8_device::cruwrite)
+void mainboard8_device::cruwrite(offs_t offset, uint8_t data)
{
- m_mofetta->cruwrite(space, offset, data);
- m_ioport->cruwrite(space, offset, data);
+ m_mofetta->cruwrite(offset, data);
+ m_ioport->cruwrite(offset, data);
}
// =============== Memory bus access ==================
@@ -371,7 +371,7 @@ WRITE_LINE_MEMBER( mainboard8_device::dbin_in )
m_dbin_level = (line_state)state;
}
-READ8_MEMBER( mainboard8_device::setoffset )
+uint8_t mainboard8_device::setoffset(offs_t offset)
{
LOGMASKED(LOG_ADDRESS, "set %s %04x\n", (m_dbin_level==ASSERT_LINE)? "R" : "W", offset);
@@ -390,7 +390,7 @@ READ8_MEMBER( mainboard8_device::setoffset )
m_A14_set = ((m_logical_address & 2)!=0); // Needed for clock_in
// Check for match in logical space
- m_vaquerro->set_address(space, m_logical_address, m_dbin_level);
+ m_vaquerro->set_address(m_logical_address, m_dbin_level);
// Select GROMs if addressed
select_groms();
@@ -405,7 +405,7 @@ READ8_MEMBER( mainboard8_device::setoffset )
m_mofetta->lascs_in(lasreq);
// Need to set the address in any case so that the lines can be cleared
- m_amigo->set_address(space, m_logical_address);
+ m_amigo->set_address(m_logical_address);
// AMIGO is the one to control the READY line to the CPU
// MOFETTA does not contribute to READY
@@ -539,7 +539,7 @@ WRITE_LINE_MEMBER( mainboard8_device::clock_in )
if (m_mofetta->alccs_out()==ASSERT_LINE)
{
- m_oso->write(*m_space, m_physical_address>>1, m_latched_data);
+ m_oso->write(m_physical_address>>1, m_latched_data);
m_pending_write = false;
LOGMASKED(LOG_MEM, "Write %04x (phys %06x, OSO) <- %02x\n", m_logical_address, m_physical_address, m_latched_data);
}
@@ -547,7 +547,7 @@ WRITE_LINE_MEMBER( mainboard8_device::clock_in )
if (m_mofetta->cmas_out()==ASSERT_LINE)
{
m_gromport->romgq_line(ASSERT_LINE);
- m_gromport->write(*m_space, m_physical_address & 0x3fff, m_latched_data);
+ m_gromport->write(m_physical_address & 0x3fff, m_latched_data);
m_pending_write = false;
LOGMASKED(LOG_MEM, "Write %04x (phys %06x, cartridge) <- %02x\n", m_logical_address, m_physical_address, m_latched_data);
}
@@ -558,7 +558,7 @@ WRITE_LINE_MEMBER( mainboard8_device::clock_in )
if (m_mofetta->dbc_out()==ASSERT_LINE)
{
- m_ioport->write(*m_space, m_physical_address, m_latched_data);
+ m_ioport->write(m_physical_address, m_latched_data);
m_pending_write = false;
LOGMASKED(LOG_MEM, "Write %04x (phys %06x, PEB) <- %02x\n", m_logical_address, m_physical_address, m_latched_data);
}
@@ -635,7 +635,7 @@ void mainboard8_device::select_groms()
m_sgrom1->write(m_latched_data);
m_sgrom2->write(m_latched_data);
LOGMASKED(LOG_MEM, "Write GS <- %02x\n", m_latched_data);
- m_gromport->write(*m_space, 0, m_latched_data);
+ m_gromport->write(0, m_latched_data);
break;
case TSGSEL:
@@ -682,8 +682,8 @@ void mainboard8_device::set_paddress(int address)
m_physical_address = (m_physical_address << 16) | address;
LOGMASKED(LOG_DETAIL, "Setting physical address %06x\n", m_physical_address);
- m_mofetta->set_address(*m_space, address, m_dbin_level);
- m_ioport->setaddress_dbin(*m_space, address, m_dbin_level);
+ m_mofetta->set_address(address, m_dbin_level);
+ m_ioport->setaddress_dbin(address, m_dbin_level);
}
WRITE_LINE_MEMBER( mainboard8_device::msast_in )
@@ -701,14 +701,14 @@ WRITE_LINE_MEMBER( mainboard8_device::msast_in )
}
-READ8_MEMBER( mainboard8_device::read )
+uint8_t mainboard8_device::read(offs_t offset)
{
uint8_t value = 0;
const char* what;
if (machine().side_effects_disabled())
{
- return debugger_read(space, offset);
+ return debugger_read(offset);
}
// =================================================
@@ -716,7 +716,7 @@ READ8_MEMBER( mainboard8_device::read )
// =================================================
if (m_amigo->mapper_accessed())
{
- value = m_amigo->read(space, 0);
+ value = m_amigo->read();
what = "mapper";
goto readdone;
}
@@ -762,7 +762,7 @@ READ8_MEMBER( mainboard8_device::read )
m_sgrom0->readz(&value);
m_sgrom1->readz(&value);
m_sgrom2->readz(&value);
- m_gromport->readz(space, 0, &value);
+ m_gromport->readz(0, &value);
if (!m_A14_set) LOGMASKED(LOG_GROM, "GS>%04x\n", m_sgrom0->debug_get_address()-1);
what = "system GROM";
goto readdone;
@@ -843,7 +843,7 @@ READ8_MEMBER( mainboard8_device::read )
if (m_mofetta->alccs_out()==ASSERT_LINE)
{
- value = m_oso->read(*m_space, m_physical_address>>1);
+ value = m_oso->read(m_physical_address>>1);
what = "OSO";
goto readdonephys;
}
@@ -858,14 +858,14 @@ READ8_MEMBER( mainboard8_device::read )
if (m_mofetta->cmas_out()==ASSERT_LINE)
{
m_gromport->romgq_line(ASSERT_LINE);
- m_gromport->readz(*m_space, m_physical_address & 0x3fff, &value);
+ m_gromport->readz(m_physical_address & 0x3fff, &value);
what = "Cartridge";
goto readdonephys;
}
if (m_mofetta->dbc_out()==ASSERT_LINE)
{
- m_ioport->readz(*m_space, m_physical_address & 0xffff, &value);
+ m_ioport->readz(m_physical_address & 0xffff, &value);
what = "PEB";
goto readdonephys;
}
@@ -905,14 +905,14 @@ void mainboard8_device::cycle_end()
If the READY line is pulled down due to the mapping process, we must
store the data bus value until the physical address is available.
*/
-WRITE8_MEMBER( mainboard8_device::write )
+void mainboard8_device::write(offs_t offset, uint8_t data)
{
m_latched_data = data;
m_pending_write = true;
if (machine().side_effects_disabled())
{
- return debugger_write(space, offset, data);
+ return debugger_write(offset, data);
}
// Some logical space devices can be written immediately
@@ -920,7 +920,7 @@ WRITE8_MEMBER( mainboard8_device::write )
if (m_amigo->mapper_accessed())
{
LOGMASKED(LOG_MEM, "Write %04x (mapper) <- %02x\n", m_logical_address, data);
- m_amigo->write(space, 0, data);
+ m_amigo->write(data);
m_pending_write = false;
}
@@ -1064,10 +1064,6 @@ void mainboard8_device::device_reset()
m_A14_set = false;
// Configure RAM and AMIGO
m_amigo->connect_sram(m_sram->pointer());
-
- // Get the pointer to the address space; we need it outside of the
- // usual memory functions. TODO: Possibly not anymore.
- m_space = &m_maincpu->space(AS_PROGRAM);
}
void mainboard8_device::device_add_mconfig(machine_config &config)
@@ -1735,7 +1731,7 @@ bool mofetta_device::intdsr_access_debug()
return m_txspg;
}
-WRITE8_MEMBER(mofetta_device::cruwrite)
+void mofetta_device::cruwrite(offs_t offset, uint8_t data)
{
if ((offset & 0xff00)==0x2700)
{
@@ -2000,7 +1996,7 @@ WRITE_LINE_MEMBER( amigo_device::lascs_in )
3. Set the physical address bus with the second 16 bits of the physical
address. Clear the MSAST line. Forward any incoming READY=0 to the CPU.
*/
-READ8_MEMBER( amigo_device::set_address )
+uint8_t amigo_device::set_address(offs_t offset)
{
// Check whether the mapper itself is accessed
int mapaddr = (m_crus==ASSERT_LINE)? 0x8810 : 0xf870;
@@ -2053,7 +2049,7 @@ READ8_MEMBER( amigo_device::set_address )
/*
Read the mapper status bits
*/
-READ8_MEMBER( amigo_device::read )
+uint8_t amigo_device::read()
{
// Read the protection status bits and reset them
uint8_t value = m_protflag;
@@ -2064,7 +2060,7 @@ READ8_MEMBER( amigo_device::read )
/*
Configure the mapper. This is the only reason to write to the AMIGO.
*/
-WRITE8_MEMBER( amigo_device::write )
+void amigo_device::write(uint8_t data)
{
// Load or save map file
if ((data & 0xf0)==0x00)
@@ -2295,7 +2291,7 @@ oso_device::oso_device(const machine_config &mconfig, const char *tag, device_t
m_hexbus_outbound = nullptr;
}
-READ8_MEMBER( oso_device::read )
+uint8_t oso_device::read(offs_t offset)
{
int value = 0;
offset &= 0x03;
@@ -2331,7 +2327,7 @@ READ8_MEMBER( oso_device::read )
return value;
}
-WRITE8_MEMBER( oso_device::write )
+void oso_device::write(offs_t offset, uint8_t data)
{
offset &= 0x03;
switch (offset)
diff --git a/src/devices/bus/ti99/internal/998board.h b/src/devices/bus/ti99/internal/998board.h
index c0baf6589df..227a2dc4a7b 100644
--- a/src/devices/bus/ti99/internal/998board.h
+++ b/src/devices/bus/ti99/internal/998board.h
@@ -101,7 +101,6 @@ public:
line_state ready();
void treset();
- DECLARE_READ8_MEMBER( read );
DECLARE_SETADDRESS_DBIN_MEMBER( set_address );
DECLARE_READ_LINE_MEMBER( sprd_out );
@@ -248,7 +247,7 @@ public:
void device_start() override;
void device_reset() override;
- DECLARE_WRITE8_MEMBER( cruwrite );
+ void cruwrite(offs_t offset, uint8_t data);
DECLARE_SETADDRESS_DBIN_MEMBER( set_address );
// Debugger support
@@ -261,7 +260,6 @@ public:
DECLARE_WRITE_LINE_MEMBER( pmemen_in );
DECLARE_WRITE_LINE_MEMBER( skdrcs_in );
- DECLARE_READ8_MEMBER( rom1cs_out );
DECLARE_READ_LINE_MEMBER( gromclk_out );
DECLARE_READ_LINE_MEMBER( alccs_out );
@@ -335,9 +333,9 @@ public:
void device_start() override;
void device_reset() override;
- DECLARE_READ8_MEMBER( read );
- DECLARE_WRITE8_MEMBER( write );
- DECLARE_READ8_MEMBER( set_address );
+ uint8_t read();
+ void write(uint8_t data);
+ uint8_t set_address(offs_t offset);
// Debugger support
int get_physical_address_debug(offs_t offset);
@@ -453,8 +451,8 @@ class oso_device : public bus::hexbus::hexbus_chained_device
{
public:
oso_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- DECLARE_READ8_MEMBER( read );
- DECLARE_WRITE8_MEMBER( write );
+ uint8_t read(offs_t offset);
+ void write(offs_t offset, uint8_t data);
void device_start() override;
void hexbus_value_changed(uint8_t data) override;
@@ -541,17 +539,17 @@ public:
mainboard8_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// Memory space
- DECLARE_READ8_MEMBER( read );
- DECLARE_WRITE8_MEMBER( write );
- DECLARE_READ8_MEMBER( setoffset );
+ uint8_t read(offs_t offset);
+ void write(offs_t offset, uint8_t data);
+ uint8_t setoffset(offs_t offset);
// Memory space for debugger access
- DECLARE_READ8_MEMBER( debugger_read );
- DECLARE_WRITE8_MEMBER( debugger_write );
+ uint8_t debugger_read(offs_t offset);
+ void debugger_write(offs_t offset, uint8_t data);
// I/O space
DECLARE_READ8Z_MEMBER( crureadz );
- DECLARE_WRITE8_MEMBER( cruwrite );
+ void cruwrite(offs_t offset, uint8_t data);
// Control lines
DECLARE_WRITE_LINE_MEMBER( clock_in );
@@ -598,9 +596,6 @@ private:
// Mapped physical address.
int m_physical_address;
- // Hold the address space value so that we can use it in other methods.
- address_space* m_space;
-
// Indicates that a byte is waiting on the data bus (see m_latched_data)
bool m_pending_write;
diff --git a/src/devices/bus/ti99/internal/datamux.cpp b/src/devices/bus/ti99/internal/datamux.cpp
index fa1b4de2dad..f6ba06d99b2 100644
--- a/src/devices/bus/ti99/internal/datamux.cpp
+++ b/src/devices/bus/ti99/internal/datamux.cpp
@@ -97,7 +97,6 @@ datamux_device::datamux_device(const machine_config &mconfig, const char *tag, d
m_ram16b(*owner, TI99_EXPRAM_TAG),
m_padram(*owner, TI99_PADRAM_TAG),
m_cpu(*owner, "maincpu"),
- m_spacep(nullptr),
m_ready(*this),
m_addr_buf(0),
m_dbin(CLEAR_LINE),
@@ -118,7 +117,7 @@ datamux_device::datamux_device(const machine_config &mconfig, const char *tag, d
DEVICE ACCESSOR FUNCTIONS
***************************************************************************/
-void datamux_device::read_all(address_space& space, uint16_t addr, uint8_t *value)
+void datamux_device::read_all(uint16_t addr, uint8_t *value)
{
// Valid access
bool validaccess = ((addr & 0x0400)==0);
@@ -136,7 +135,7 @@ void datamux_device::read_all(address_space& space, uint16_t addr, uint8_t *valu
}
}
// GROMport (GROMs)
- m_gromport->readz(space, addr, value);
+ m_gromport->readz(addr, value);
m_grom_idle = false;
}
@@ -144,20 +143,20 @@ void datamux_device::read_all(address_space& space, uint16_t addr, uint8_t *valu
if ((addr & 0xf801)==0x8800)
{
// Forward to VDP unless we have an EVPC
- if (m_video != nullptr) *value = m_video->read(space, addr>>1); // A14 determines data or register read
+ if (m_video != nullptr) *value = m_video->read(addr>>1); // A14 determines data or register read
}
}
// GROMport (ROMs)
- if ((addr & 0xe000)==0x6000) m_gromport->readz(space, addr, value);
+ if ((addr & 0xe000)==0x6000) m_gromport->readz(addr, value);
// I/O port gets all accesses
- m_ioport->readz(space, addr, value);
+ m_ioport->readz(addr, value);
m_ioport->memen_in(CLEAR_LINE);
m_memen_state = CLEAR_LINE;
}
-void datamux_device::write_all(address_space& space, uint16_t addr, uint8_t value)
+void datamux_device::write_all(uint16_t addr, uint8_t value)
{
// GROM access
if ((addr & 0xf801)==0x9800)
@@ -168,12 +167,12 @@ void datamux_device::write_all(address_space& space, uint16_t addr, uint8_t valu
m_grom[i]->write(value);
}
// GROMport
- m_gromport->write(space, addr, value);
+ m_gromport->write(addr, value);
m_grom_idle = false;
}
// Cartridge port and sound
- if ((addr & 0xe000)==0x6000) m_gromport->write(space, addr, value);
+ if ((addr & 0xe000)==0x6000) m_gromport->write(addr, value);
// Only if the sound chip has not been removed
if ((addr & 0xfc01)==0x8400)
@@ -185,16 +184,16 @@ void datamux_device::write_all(address_space& space, uint16_t addr, uint8_t valu
if ((addr & 0xf801)==0x8800)
{
// Forward to VDP unless we have an EVPC
- if (m_video != nullptr) m_video->write(space, addr>>1, value); // A14 determines data or register write
+ if (m_video != nullptr) m_video->write(addr>>1, value); // A14 determines data or register write
}
// I/O port gets all accesses
- m_ioport->write(space, addr, value);
+ m_ioport->write(addr, value);
m_ioport->memen_in(CLEAR_LINE);
m_memen_state = CLEAR_LINE;
}
-void datamux_device::setaddress_all(address_space& space, uint16_t addr)
+void datamux_device::setaddress_all(uint16_t addr)
{
line_state a14 = ((addr & 2)!=0)? ASSERT_LINE : CLEAR_LINE;
@@ -227,7 +226,7 @@ void datamux_device::setaddress_all(address_space& space, uint16_t addr)
// I/O port gets all accesses
m_memen_state = ASSERT_LINE;
m_ioport->memen_in(m_memen_state);
- m_ioport->setaddress_dbin(space, addr, m_dbin);
+ m_ioport->setaddress_dbin(addr, m_dbin);
}
/*
@@ -236,7 +235,7 @@ void datamux_device::setaddress_all(address_space& space, uint16_t addr)
mapped devices are excluded because their state would be changed
unpredictably by the debugger access.
*/
-uint16_t datamux_device::debugger_read(address_space& space, uint16_t addr)
+uint16_t datamux_device::debugger_read(uint16_t addr)
{
uint16_t addrb = addr << 1;
uint16_t value = 0;
@@ -267,13 +266,13 @@ uint16_t datamux_device::debugger_read(address_space& space, uint16_t addr)
if ((addrb & 0xe000)==0x6000)
{
m_gromport->romgq_line(ASSERT_LINE);
- m_gromport->readz(space, addrb+1, &lval);
- m_gromport->readz(space, addrb, &hval);
+ m_gromport->readz(addrb+1, &lval);
+ m_gromport->readz(addrb, &hval);
m_gromport->romgq_line(m_romgq_state); // reset to previous state
}
m_ioport->memen_in(ASSERT_LINE);
- m_ioport->readz(space, addrb+1, &lval);
- m_ioport->readz(space, addrb, &hval);
+ m_ioport->readz(addrb+1, &lval);
+ m_ioport->readz(addrb, &hval);
m_ioport->memen_in(m_memen_state); // reset to previous state
value = ((hval << 8)&0xff00) | (lval & 0xff);
}
@@ -282,7 +281,7 @@ uint16_t datamux_device::debugger_read(address_space& space, uint16_t addr)
return value;
}
-void datamux_device::debugger_write(address_space& space, uint16_t addr, uint16_t data)
+void datamux_device::debugger_write(uint16_t addr, uint16_t data)
{
uint16_t addrb = addr << 1;
@@ -312,14 +311,14 @@ void datamux_device::debugger_write(address_space& space, uint16_t addr, uint16_
if ((addrb & 0xe000)==0x6000)
{
m_gromport->romgq_line(ASSERT_LINE);
- m_gromport->write(space, addr+1, data & 0xff);
- m_gromport->write(space, addr, (data>>8) & 0xff);
+ m_gromport->write(addr+1, data & 0xff);
+ m_gromport->write(addr, (data>>8) & 0xff);
m_gromport->romgq_line(m_romgq_state); // reset to previous state
}
m_ioport->memen_in(ASSERT_LINE);
- m_ioport->write(space, addr+1, data & 0xff);
- m_ioport->write(space, addr, (data>>8) & 0xff);
+ m_ioport->write(addr+1, data & 0xff);
+ m_ioport->write(addr, (data>>8) & 0xff);
m_ioport->memen_in(m_memen_state); // reset to previous state
}
}
@@ -330,16 +329,16 @@ void datamux_device::debugger_write(address_space& space, uint16_t addr, uint16_
accesses must not occur within the loop. So we have one access on the bus,
a delay, and then the second access.
- mem_mask is always ffff on TMS processors (cannot control bus width)
+ mem_mask is irrelevant for TMS processors (cannot control bus width)
*/
-READ16_MEMBER( datamux_device::read )
+uint16_t datamux_device::read(offs_t offset)
{
uint16_t value = 0;
// Care for debugger
if (machine().side_effects_disabled())
{
- return debugger_read(space, offset);
+ return debugger_read(offset);
}
// Addresses below 0x2000 are ROM (no wait states)
@@ -371,7 +370,7 @@ READ16_MEMBER( datamux_device::read )
// The byte from the odd address has already been read into the latch
// Reading the even address now (addr)
uint8_t hbyte = 0;
- read_all(space, m_addr_buf, &hbyte);
+ read_all(m_addr_buf, &hbyte);
LOGMASKED(LOG_ACCESS, "Read even byte from address %04x -> %02x\n", m_addr_buf, hbyte);
value = (hbyte<<8) | m_latch;
@@ -384,11 +383,11 @@ READ16_MEMBER( datamux_device::read )
/*
Write access.
*/
-WRITE16_MEMBER( datamux_device::write )
+void datamux_device::write(offs_t offset, uint16_t data)
{
if (machine().side_effects_disabled())
{
- debugger_write(space, offset, data);
+ debugger_write(offset, data);
return;
}
@@ -420,7 +419,7 @@ WRITE16_MEMBER( datamux_device::write )
// write odd byte
LOGMASKED(LOG_ACCESS, "Write odd byte to address %04x <- %02x\n", m_addr_buf+1, data & 0xff);
- write_all(space, m_addr_buf+1, data & 0xff);
+ write_all(m_addr_buf+1, data & 0xff);
}
}
@@ -428,7 +427,7 @@ WRITE16_MEMBER( datamux_device::write )
Called when the memory access starts by setting the address bus. From that
point on, we suspend the CPU until all operations are done.
*/
-READ8_MEMBER( datamux_device::setoffset )
+uint8_t datamux_device::setoffset(offs_t offset)
{
m_addr_buf = offset;
m_waitcount = 0;
@@ -464,7 +463,7 @@ READ8_MEMBER( datamux_device::setoffset )
{
// propagate the setaddress operation
// First the odd address
- setaddress_all(space, m_addr_buf+1);
+ setaddress_all(m_addr_buf+1);
m_muxready = CLEAR_LINE;
ready_join();
}
@@ -502,10 +501,10 @@ WRITE_LINE_MEMBER( datamux_device::clock_in )
if (m_waitcount==2)
{
// read odd byte
- read_all(*m_spacep, m_addr_buf+1, &m_latch);
+ read_all(m_addr_buf+1, &m_latch);
LOGMASKED(LOG_ACCESS, "Read odd byte from address %04x -> %02x\n", m_addr_buf+1, m_latch);
// do the setaddress for the even address
- setaddress_all(*m_spacep, m_addr_buf);
+ setaddress_all(m_addr_buf);
}
}
}
@@ -524,10 +523,10 @@ WRITE_LINE_MEMBER( datamux_device::clock_in )
if (m_waitcount==2)
{
// do the setaddress for the even address
- setaddress_all(*m_spacep, m_addr_buf);
+ setaddress_all(m_addr_buf);
// write even byte
LOGMASKED(LOG_ACCESS, "Write even byte to address %04x <- %02x\n", m_addr_buf, m_latch);
- write_all(*m_spacep, m_addr_buf, m_latch);
+ write_all(m_addr_buf, m_latch);
}
}
}
@@ -615,10 +614,6 @@ void datamux_device::device_reset(void)
m_latch = 0;
m_dbin = CLEAR_LINE;
-
- // Get the pointer to the address space already here, because we cannot
- // save that pointer to a savestate, and we need it on restore
- m_spacep = &m_cpu->space(AS_PROGRAM);
}
void datamux_device::device_config_complete()
diff --git a/src/devices/bus/ti99/internal/datamux.h b/src/devices/bus/ti99/internal/datamux.h
index 4ddc39e09e6..6c36c7f8963 100644
--- a/src/devices/bus/ti99/internal/datamux.h
+++ b/src/devices/bus/ti99/internal/datamux.h
@@ -33,9 +33,9 @@ class datamux_device : public device_t
{
public:
datamux_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- DECLARE_READ16_MEMBER( read );
- DECLARE_WRITE16_MEMBER( write );
- DECLARE_READ8_MEMBER( setoffset );
+ uint16_t read(offs_t offset);
+ void write(offs_t offset, uint16_t data);
+ uint8_t setoffset(offs_t offset);
DECLARE_WRITE_LINE_MEMBER( clock_in );
DECLARE_WRITE_LINE_MEMBER( dbin_in );
@@ -75,9 +75,6 @@ private:
// Link to the CPU
required_device<cpu_device> m_cpu;
- // Keeps the address space pointer
- address_space* m_spacep;
-
// Console ROM
uint16_t* m_consolerom;
@@ -85,17 +82,17 @@ private:
tmc0430_device* m_grom[3];
// Common read routine
- void read_all(address_space& space, uint16_t addr, uint8_t *target);
+ void read_all(uint16_t addr, uint8_t *target);
// Common write routine
- void write_all(address_space& space, uint16_t addr, uint8_t value);
+ void write_all(uint16_t addr, uint8_t value);
// Common set address method
- void setaddress_all(address_space& space, uint16_t addr);
+ void setaddress_all(uint16_t addr);
// Debugger access
- uint16_t debugger_read(address_space& space, uint16_t addr);
- void debugger_write(address_space& space, uint16_t addr, uint16_t data);
+ uint16_t debugger_read(uint16_t addr);
+ void debugger_write(uint16_t addr, uint16_t data);
// Join own READY and external READY
void ready_join();
diff --git a/src/devices/bus/ti99/internal/genboard.cpp b/src/devices/bus/ti99/internal/genboard.cpp
index 861e0655200..dd9ab0ee3db 100644
--- a/src/devices/bus/ti99/internal/genboard.cpp
+++ b/src/devices/bus/ti99/internal/genboard.cpp
@@ -329,7 +329,7 @@ INPUT_CHANGED_MEMBER( genmod_mapper_device::setgm_changed )
within the gate array. Unlike with real GROMs, no address wrapping occurs,
and the complete 64K space is available.
*/
-READ8_MEMBER( geneve_mapper_device::read_grom )
+uint8_t geneve_mapper_device::read_grom(offs_t offset)
{
uint8_t reply;
if (offset & 0x0002)
@@ -364,7 +364,7 @@ READ8_MEMBER( geneve_mapper_device::read_grom )
Simulates GROM. The real Geneve does not use GROMs but simulates them
within the gate array.
*/
-WRITE8_MEMBER( geneve_mapper_device::write_grom )
+void geneve_mapper_device::write_grom(offs_t offset, uint8_t data)
{
if (offset & 0x0002)
{
@@ -468,7 +468,7 @@ void geneve_mapper_device::set_extra_waitstates(bool wait)
SETOFFSET method, and we re-use the values stored there to quickly
access the appropriate component.
*/
-READ8_MEMBER( geneve_mapper_device::readm )
+uint8_t geneve_mapper_device::readm(offs_t offset)
{
uint8_t value = 0;
@@ -492,7 +492,7 @@ READ8_MEMBER( geneve_mapper_device::readm )
if (dec->function == MBOX)
{
m_peribox->memen_in(ASSERT_LINE);
- m_peribox->setaddress_dbin(space, dec->physaddr, true);
+ m_peribox->setaddress_dbin(dec->physaddr, true);
}
}
else
@@ -509,7 +509,7 @@ READ8_MEMBER( geneve_mapper_device::readm )
case MLVIDEO:
if (!machine().side_effects_disabled())
{
- value = m_video->read(space, dec->offset>>1);
+ value = m_video->read(dec->offset>>1);
LOGMASKED(LOG_READ, "Read video %04x -> %02x\n", dec->offset, value);
// Video wait states are created *after* the access
// Accordingly, they have no effect when execution is in onchip RAM
@@ -538,7 +538,7 @@ READ8_MEMBER( geneve_mapper_device::readm )
// Needs more investigation. We might as well ignore this,
// as the high nibble is obviously undefined and takes some past
// value floating around.
- value = m_clock->read(space, dec->offset & 0x000f);
+ value = m_clock->read(dec->offset & 0x000f);
if (m_geneve_mode) value |= 0xf0;
else value |= ((dec->offset & 0x000f)==0x000f)? 0x20 : 0x10;
LOGMASKED(LOG_READ, "Read clock %04x -> %02x\n", dec->offset, value);
@@ -548,7 +548,7 @@ READ8_MEMBER( geneve_mapper_device::readm )
// grom simulation
// ++++ ++-- ---- ---+
// 1001 1000 0000 00x0
- if (!machine().side_effects_disabled()) value = read_grom(space, dec->offset, 0xff);
+ if (!machine().side_effects_disabled()) value = read_grom(dec->offset);
LOGMASKED(LOG_READ, "Read GROM %04x -> %02x\n", dec->offset, value);
break;
@@ -571,7 +571,7 @@ READ8_MEMBER( geneve_mapper_device::readm )
case MPEPROM:
// 1 111. ..xx xxxx xxxx xxxx on-board eprom (16K)
// mirrored for f0, f2, f4, ...; f1, f3, f5, ...
- value = boot_rom(space, dec->physaddr, 0xff);
+ value = boot_rom(dec->physaddr);
break;
case MPSRAM:
@@ -593,7 +593,7 @@ READ8_MEMBER( geneve_mapper_device::readm )
// 0x000000-0x07ffff for the stock Geneve (AMC,AMB,AMA,A0 ...,A15)
// 0x000000-0x1fffff for the GenMod.(AME,AMD,AMC,AMB,AMA,A0 ...,A15)
- m_peribox->readz(space, dec->physaddr, &value, 0xff);
+ m_peribox->readz(dec->physaddr, &value);
m_peribox->memen_in(CLEAR_LINE);
LOGMASKED(LOG_READ, "Read P-Box %04x (%06x) -> %02x\n", dec->offset, dec->physaddr, value);
break;
@@ -605,7 +605,7 @@ READ8_MEMBER( geneve_mapper_device::readm )
return value;
}
-WRITE8_MEMBER( geneve_mapper_device::writem )
+void geneve_mapper_device::writem(offs_t offset, uint8_t data)
{
decdata *dec;
decdata debug;
@@ -627,7 +627,7 @@ WRITE8_MEMBER( geneve_mapper_device::writem )
if (dec->function == MBOX)
{
m_peribox->memen_in(ASSERT_LINE);
- m_peribox->setaddress_dbin(space, dec->physaddr, false);
+ m_peribox->setaddress_dbin(dec->physaddr, false);
}
}
else
@@ -650,7 +650,7 @@ WRITE8_MEMBER( geneve_mapper_device::writem )
if (!machine().side_effects_disabled())
{
- m_video->write(space, dec->offset>>1, data);
+ m_video->write(dec->offset>>1, data);
LOGMASKED(LOG_WRITE, "Write video %04x <- %02x\n", offset, data);
// See above
if (m_video_waitstates) set_video_waitcount(15);
@@ -666,7 +666,7 @@ WRITE8_MEMBER( geneve_mapper_device::writem )
case MLCLOCK:
// clock
// ++++ ++++ ++++ ----
- m_clock->write(space, dec->offset & 0x000f, data);
+ m_clock->write(dec->offset & 0x000f, data);
LOGMASKED(LOG_WRITE, "Write clock %04x <- %02x\n", offset, data);
break;
@@ -679,7 +679,7 @@ WRITE8_MEMBER( geneve_mapper_device::writem )
case MLGROM:
// The GROM simulator is only available in TI Mode
- write_grom(space, dec->offset, data, 0xff);
+ write_grom(dec->offset, data);
LOGMASKED(LOG_WRITE, "Write GROM %04x <- %02x\n", offset, data);
break;
@@ -700,7 +700,7 @@ WRITE8_MEMBER( geneve_mapper_device::writem )
// 1 111. ..xx xxxx xxxx xxxx on-board eprom (16K)
// mirrored for f0, f2, f4, ...; f1, f3, f5, ...
// Ignore EPROM write (unless PFM)
- if (m_boot_rom != GENEVE_EPROM) write_to_pfm(space, dec->physaddr, data, 0xff);
+ if (m_boot_rom != GENEVE_EPROM) write_to_pfm(dec->physaddr, data);
else
LOGMASKED(LOG_WARN, "Write EPROM %04x (%06x) <- %02x, ignored\n", offset, dec->physaddr, data);
break;
@@ -720,7 +720,7 @@ WRITE8_MEMBER( geneve_mapper_device::writem )
case MBOX:
// Route everything else to the P-Box
LOGMASKED(LOG_WRITE, "Write P-Box %04x (%06x) <- %02x\n", offset, dec->physaddr, data);
- m_peribox->write(space, dec->physaddr, data, 0xff);
+ m_peribox->write(dec->physaddr, data);
m_peribox->memen_in(CLEAR_LINE);
break;
@@ -854,7 +854,7 @@ void genmod_mapper_device::decode_mod(geneve_mapper_device::decdata* dec)
/*
Boot ROM handling, from EPROM or PFM.
*/
-READ8_MEMBER( geneve_mapper_device::boot_rom )
+uint8_t geneve_mapper_device::boot_rom(offs_t offset)
{
uint8_t value;
int pfmaddress = (offset & 0x01ffff) | (m_pfm_bank<<17);
@@ -866,10 +866,10 @@ READ8_MEMBER( geneve_mapper_device::boot_rom )
LOGMASKED(LOG_READ, "Read EPROM %04x -> %02x\n", offset & 0x003fff, value);
return value;
case GENEVE_PFM512:
- value = m_pfm512->read(space, pfmaddress, mem_mask);
+ value = m_pfm512->read(pfmaddress);
break;
case GENEVE_PFM512A:
- value = m_pfm512a->read(space, pfmaddress, mem_mask);
+ value = m_pfm512a->read(pfmaddress);
break;
default:
LOGMASKED(LOG_WARN, "Illegal mode for reading boot ROM: %d\n", m_boot_rom);
@@ -881,7 +881,7 @@ READ8_MEMBER( geneve_mapper_device::boot_rom )
return value;
}
-WRITE8_MEMBER( geneve_mapper_device::write_to_pfm )
+void geneve_mapper_device::write_to_pfm(offs_t offset, uint8_t data)
{
// Nota bene: The PFM must be write protected on startup, or the RESET
// of the 9995 will attempt to write the return vector into the flash EEPROM
@@ -891,10 +891,10 @@ WRITE8_MEMBER( geneve_mapper_device::write_to_pfm )
switch (m_boot_rom)
{
case GENEVE_PFM512:
- m_pfm512->write(space, address, data, mem_mask);
+ m_pfm512->write(address, data);
break;
case GENEVE_PFM512A:
- m_pfm512a->write(space, address, data, mem_mask);
+ m_pfm512a->write(address, data);
break;
default:
LOGMASKED(LOG_WARN, "Illegal mode for writing to PFM: %d\n", m_boot_rom);
@@ -907,7 +907,7 @@ WRITE8_MEMBER( geneve_mapper_device::write_to_pfm )
This decoding will later be used in the READ/WRITE member functions. Also,
we initiate wait state creation here.
*/
-READ8_MEMBER( geneve_mapper_device::setoffset )
+uint8_t geneve_mapper_device::setoffset(offs_t offset)
{
LOGMASKED(LOG_DETAIL, "setoffset = %04x\n", offset);
m_debug_no_ws = false;
@@ -926,7 +926,7 @@ READ8_MEMBER( geneve_mapper_device::setoffset )
if (m_decoded.function == MBOX)
{
m_peribox->memen_in(ASSERT_LINE);
- m_peribox->setaddress_dbin(space, m_decoded.physaddr, m_read_mode);
+ m_peribox->setaddress_dbin(m_decoded.physaddr, m_read_mode);
}
return 0;
}
diff --git a/src/devices/bus/ti99/internal/genboard.h b/src/devices/bus/ti99/internal/genboard.h
index 875f9f8bd51..baccf7463a9 100644
--- a/src/devices/bus/ti99/internal/genboard.h
+++ b/src/devices/bus/ti99/internal/genboard.h
@@ -121,9 +121,9 @@ public:
void set_video_waitstates(bool wait);
void set_extra_waitstates(bool wait);
- DECLARE_READ8_MEMBER( readm );
- DECLARE_WRITE8_MEMBER( writem );
- DECLARE_READ8_MEMBER( setoffset );
+ uint8_t readm(offs_t offset);
+ void writem(offs_t offset, uint8_t data);
+ uint8_t setoffset(offs_t offset);
DECLARE_INPUT_CHANGED_MEMBER( settings_changed );
@@ -147,8 +147,8 @@ protected:
bool m_gromwaddr_LSB;
bool m_gromraddr_LSB;
int m_grom_address;
- DECLARE_READ8_MEMBER( read_grom );
- DECLARE_WRITE8_MEMBER( write_grom );
+ uint8_t read_grom(offs_t offset);
+ void write_grom(offs_t offset, uint8_t data);
// wait states
void set_wait(int min);
@@ -256,8 +256,8 @@ protected:
virtual void decode_mod(decdata* dec) { };
// PFM mod (0 = none, 1 = AT29C040, 2 = AT29C040A)
- DECLARE_READ8_MEMBER( boot_rom );
- DECLARE_WRITE8_MEMBER( write_to_pfm );
+ uint8_t boot_rom(offs_t offset);
+ void write_to_pfm(offs_t offset, uint8_t data);
int m_boot_rom;
int m_pfm_bank;
bool m_pfm_output_enable;
diff --git a/src/devices/bus/ti99/internal/ioport.cpp b/src/devices/bus/ti99/internal/ioport.cpp
index 3e769086141..a855fd3bf41 100644
--- a/src/devices/bus/ti99/internal/ioport.cpp
+++ b/src/devices/bus/ti99/internal/ioport.cpp
@@ -96,31 +96,31 @@ ioport_device::ioport_device(const machine_config &mconfig, const char *tag, dev
READ8Z_MEMBER(ioport_device::readz)
{
if (m_connected != nullptr)
- m_connected->readz(space, offset, value);
+ m_connected->readz(offset, value);
}
-WRITE8_MEMBER(ioport_device::write)
+void ioport_device::write(offs_t offset, uint8_t data)
{
if (m_connected != nullptr)
- m_connected->write(space, offset, data);
+ m_connected->write(offset, data);
}
SETADDRESS_DBIN_MEMBER(ioport_device::setaddress_dbin)
{
if (m_connected != nullptr)
- m_connected->setaddress_dbin(space, offset, state);
+ m_connected->setaddress_dbin(offset, state);
}
READ8Z_MEMBER(ioport_device::crureadz)
{
if (m_connected != nullptr)
- m_connected->crureadz(space, offset, value);
+ m_connected->crureadz(offset, value);
}
-WRITE8_MEMBER(ioport_device::cruwrite)
+void ioport_device::cruwrite(offs_t offset, uint8_t data)
{
if (m_connected != nullptr)
- m_connected->cruwrite(space, offset, data);
+ m_connected->cruwrite(offset, data);
}
WRITE_LINE_MEMBER(ioport_device::memen_in)
diff --git a/src/devices/bus/ti99/internal/ioport.h b/src/devices/bus/ti99/internal/ioport.h
index aa30c51da77..6b468007eda 100644
--- a/src/devices/bus/ti99/internal/ioport.h
+++ b/src/devices/bus/ti99/internal/ioport.h
@@ -29,14 +29,14 @@ public:
{ }
// Methods called from the console / ioport
- virtual DECLARE_READ8Z_MEMBER( readz ) { };
- virtual DECLARE_WRITE8_MEMBER( write ) { };
- virtual DECLARE_SETADDRESS_DBIN_MEMBER( setaddress_dbin ) { };
- virtual DECLARE_READ8Z_MEMBER( crureadz ) { };
- virtual DECLARE_WRITE8_MEMBER( cruwrite ) { };
- virtual DECLARE_WRITE_LINE_MEMBER( memen_in ) { };
- virtual DECLARE_WRITE_LINE_MEMBER( msast_in ) { };
- virtual DECLARE_WRITE_LINE_MEMBER( clock_in ) { };
+ virtual DECLARE_READ8Z_MEMBER( readz ) { }
+ virtual void write(offs_t offset, uint8_t data) { }
+ virtual DECLARE_SETADDRESS_DBIN_MEMBER( setaddress_dbin ) { }
+ virtual DECLARE_READ8Z_MEMBER( crureadz ) { }
+ virtual void cruwrite(offs_t offset, uint8_t data) { }
+ virtual DECLARE_WRITE_LINE_MEMBER( memen_in ) { }
+ virtual DECLARE_WRITE_LINE_MEMBER( msast_in ) { }
+ virtual DECLARE_WRITE_LINE_MEMBER( clock_in ) { }
void set_ioport(ioport_device* ioport) { m_ioport = ioport; }
@@ -71,10 +71,10 @@ public:
// Methods called from the console
DECLARE_READ8Z_MEMBER( readz );
- DECLARE_WRITE8_MEMBER( write );
+ void write(offs_t offset, uint8_t data);
DECLARE_SETADDRESS_DBIN_MEMBER( setaddress_dbin );
DECLARE_READ8Z_MEMBER( crureadz );
- DECLARE_WRITE8_MEMBER( cruwrite );
+ void cruwrite(offs_t offset, uint8_t data);
DECLARE_WRITE_LINE_MEMBER( memen_in );
DECLARE_WRITE_LINE_MEMBER( msast_in );
DECLARE_WRITE_LINE_MEMBER( clock_in );
diff --git a/src/devices/bus/ti99/joyport/handset.cpp b/src/devices/bus/ti99/joyport/handset.cpp
index 304cdffe239..829b5bca087 100644
--- a/src/devices/bus/ti99/joyport/handset.cpp
+++ b/src/devices/bus/ti99/joyport/handset.cpp
@@ -38,7 +38,6 @@
#include "emu.h"
#include "handset.h"
-#include "machine/tms9901.h"
#define LOG_WARN (1U<<1) // Warnings
#define LOG_CONFIG (1U<<2) // Configuration
diff --git a/src/devices/bus/ti99/peb/bwg.cpp b/src/devices/bus/ti99/peb/bwg.cpp
index c7aa2c903b7..f2a23fea518 100644
--- a/src/devices/bus/ti99/peb/bwg.cpp
+++ b/src/devices/bus/ti99/peb/bwg.cpp
@@ -228,7 +228,7 @@ READ8Z_MEMBER(snug_bwg_device::readz)
if (m_RTCsel)
{
// .... ..11 111x xxx0
- *value = m_clock->read(space, (m_address & 0x001e) >> 1);
+ *value = m_clock->read((m_address & 0x001e) >> 1);
LOGMASKED(LOG_RW, "read RTC: %04x -> %02x\n", m_address & 0xffff, *value);
}
else
@@ -275,7 +275,7 @@ READ8Z_MEMBER(snug_bwg_device::readz)
5c00 - 5fdf: RAM
5fe0 - 5fff: Clock (even addr)
*/
-WRITE8_MEMBER(snug_bwg_device::write)
+void snug_bwg_device::write(offs_t offset, uint8_t data)
{
if (machine().side_effects_disabled())
{
@@ -293,7 +293,7 @@ WRITE8_MEMBER(snug_bwg_device::write)
{
// .... ..11 111x xxx0
LOGMASKED(LOG_RW, "write RTC: %04x <- %02x\n", m_address & 0xffff, data);
- m_clock->write(space, (m_address & 0x001e) >> 1, data);
+ m_clock->write((m_address & 0x001e) >> 1, data);
}
else
{
@@ -338,7 +338,7 @@ READ8Z_MEMBER(snug_bwg_device::crureadz)
if ((offset & 0xff00)==m_cru_base)
{
- if ((offset & 0x00ff)==0)
+ if ((offset & 0x00f0)==0)
{
// Check what drives are not connected
reply = ((m_floppy[0] != nullptr)? 0 : 0x02) // DSK1
@@ -355,7 +355,7 @@ READ8Z_MEMBER(snug_bwg_device::crureadz)
reply |= (m_dip34 << 6);
// Invert all
- *value = ~reply;
+ *value = ~BIT(reply, (offset >> 1) & 7);
}
else
*value = 0;
@@ -363,7 +363,7 @@ READ8Z_MEMBER(snug_bwg_device::crureadz)
}
}
-WRITE8_MEMBER(snug_bwg_device::cruwrite)
+void snug_bwg_device::cruwrite(offs_t offset, uint8_t data)
{
// int drive, drivebit;
diff --git a/src/devices/bus/ti99/peb/bwg.h b/src/devices/bus/ti99/peb/bwg.h
index a25d844a563..2a53f45c75b 100644
--- a/src/devices/bus/ti99/peb/bwg.h
+++ b/src/devices/bus/ti99/peb/bwg.h
@@ -30,11 +30,11 @@ public:
snug_bwg_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
DECLARE_SETADDRESS_DBIN_MEMBER(setaddress_dbin) override;
DECLARE_READ8Z_MEMBER(crureadz) override;
- DECLARE_WRITE8_MEMBER(cruwrite) override;
+ void cruwrite(offs_t offset, uint8_t data) override;
protected:
void device_start() override;
diff --git a/src/devices/bus/ti99/peb/evpc.cpp b/src/devices/bus/ti99/peb/evpc.cpp
index fc5591112d5..6b17d75ef74 100644
--- a/src/devices/bus/ti99/peb/evpc.cpp
+++ b/src/devices/bus/ti99/peb/evpc.cpp
@@ -213,7 +213,7 @@ READ8Z_MEMBER(snug_enhanced_video_device::readz)
if (m_video_accessed)
{
- *value = m_video->read(space, m_address>>1);
+ *value = m_video->read(m_address>>1);
}
}
@@ -223,7 +223,7 @@ READ8Z_MEMBER(snug_enhanced_video_device::readz)
0x5f00 - 0x5fef NOVRAM
0x5ff0 - 0x5fff Palette (5ff8, 5ffa, 5ffc, 5ffe)
*/
-WRITE8_MEMBER(snug_enhanced_video_device::write)
+void snug_enhanced_video_device::write(offs_t offset, uint8_t data)
{
if (m_selected && m_inDsrArea)
{
@@ -296,7 +296,7 @@ WRITE8_MEMBER(snug_enhanced_video_device::write)
if (m_video_accessed)
{
- m_video->write(space, m_address>>1, data);
+ m_video->write(m_address>>1, data);
}
if (m_sound_accessed)
@@ -323,8 +323,9 @@ READ8Z_MEMBER(snug_enhanced_video_device::crureadz)
{
if ((offset & 0x00f0)==0) // offset 0 delivers bits 0-7 (address 00-0f)
{
- *value = ~(ioport("EVPC-SW1")->read() | (ioport("EVPC-SW3")->read()<<2)
+ uint8_t p = ~(ioport("EVPC-SW1")->read() | (ioport("EVPC-SW3")->read()<<2)
| (ioport("EVPC-SW4")->read()<<3) | (ioport("EVPC-SW8")->read()<<7));
+ *value = BIT(p, (offset >> 1) & 7);
}
}
}
@@ -340,7 +341,7 @@ READ8Z_MEMBER(snug_enhanced_video_device::crureadz)
Bit 6: -
Bit 7: -
*/
-WRITE8_MEMBER(snug_enhanced_video_device::cruwrite)
+void snug_enhanced_video_device::cruwrite(offs_t offset, uint8_t data)
{
if ((offset & 0xff00)==EVPC_CRU_BASE)
{
diff --git a/src/devices/bus/ti99/peb/evpc.h b/src/devices/bus/ti99/peb/evpc.h
index a52e73b963c..2e89c2fa405 100644
--- a/src/devices/bus/ti99/peb/evpc.h
+++ b/src/devices/bus/ti99/peb/evpc.h
@@ -32,11 +32,11 @@ class snug_enhanced_video_device : public device_t, public device_ti99_peribox_c
public:
snug_enhanced_video_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
DECLARE_SETADDRESS_DBIN_MEMBER(setaddress_dbin) override;
DECLARE_READ8Z_MEMBER(crureadz) override;
- DECLARE_WRITE8_MEMBER(cruwrite) override;
+ void cruwrite(offs_t offset, uint8_t data) override;
TIMER_DEVICE_CALLBACK_MEMBER( hblank_interrupt );
diff --git a/src/devices/bus/ti99/peb/hfdc.cpp b/src/devices/bus/ti99/peb/hfdc.cpp
index 97ac8d403ab..6a9a89726b2 100644
--- a/src/devices/bus/ti99/peb/hfdc.cpp
+++ b/src/devices/bus/ti99/peb/hfdc.cpp
@@ -223,14 +223,14 @@ READ8Z_MEMBER(myarc_hfdc_device::readz)
if (m_HDCsel)
{
- *value = m_hdc9234->read(space, (m_address>>2)&1, 0xff);
+ *value = m_hdc9234->read((m_address>>2)&1);
LOGMASKED(LOG_COMP, "%04x[HDC] -> %02x\n", m_address & 0xffff, *value);
return;
}
if (m_RTCsel)
{
- *value = m_clock->read(space, (m_address & 0x001e) >> 1);
+ *value = m_clock->read((m_address & 0x001e) >> 1);
LOGMASKED(LOG_COMP, "%04x[CLK] -> %02x\n", m_address & 0xffff, *value);
return;
}
@@ -278,7 +278,7 @@ READ8Z_MEMBER(myarc_hfdc_device::readz)
0x5800 - 0x5bff static RAM page any of 32 pages
0x5c00 - 0x5fff static RAM page any of 32 pages
*/
-WRITE8_MEMBER( myarc_hfdc_device::write )
+void myarc_hfdc_device::write(offs_t offset, uint8_t data)
{
if (machine().side_effects_disabled())
{
@@ -297,14 +297,14 @@ WRITE8_MEMBER( myarc_hfdc_device::write )
if (m_HDCsel)
{
LOGMASKED(LOG_COMP, "%04x[HDC] <- %02x\n", m_address & 0xffff, data);
- m_hdc9234->write(space, (m_address>>2)&1, data, 0xff);
+ m_hdc9234->write((m_address>>2)&1, data);
return;
}
if (m_RTCsel)
{
LOGMASKED(LOG_COMP, "%04x[CLK] <- %02x\n", m_address & 0xffff, data);
- m_clock->write(space, (m_address & 0x001e) >> 1, data);
+ m_clock->write((m_address & 0x001e) >> 1, data);
return;
}
@@ -376,7 +376,7 @@ READ8Z_MEMBER(myarc_hfdc_device::crureadz)
uint8_t reply;
if ((offset & 0xff00)==m_cru_base)
{
- if ((offset & 0x00ff)==0) // CRU bits 0-7
+ if ((offset & 0x00f0)==0) // CRU bits 0-7
{
if (m_see_switches)
{
@@ -390,7 +390,7 @@ READ8Z_MEMBER(myarc_hfdc_device::crureadz)
if (!m_motor_running) reply |= 0x04;
if (m_wait_for_hd1) reply |= 0x08;
}
- *value = reply;
+ *value = BIT(reply, (offset >> 1) & 7);
}
else // CRU bits 8+
{
@@ -425,7 +425,7 @@ READ8Z_MEMBER(myarc_hfdc_device::crureadz)
HFDC manual p. 43
*/
-WRITE8_MEMBER(myarc_hfdc_device::cruwrite)
+void myarc_hfdc_device::cruwrite(offs_t offset, uint8_t data)
{
if ((offset & 0xff00)==m_cru_base)
{
@@ -627,7 +627,7 @@ void myarc_hfdc_device::signal_drive_status()
(1,0) = OUTPUT1
(1,1) = OUTPUT2
*/
-WRITE8_MEMBER( myarc_hfdc_device::auxbus_out )
+void myarc_hfdc_device::auxbus_out(offs_t offset, uint8_t data)
{
int index;
switch (offset)
@@ -848,7 +848,7 @@ WRITE_LINE_MEMBER( myarc_hfdc_device::dip_w )
/*
Read a byte from the onboard SRAM. This is called from the HDC9234.
*/
-READ8_MEMBER( myarc_hfdc_device::read_buffer )
+uint8_t myarc_hfdc_device::read_buffer()
{
LOGMASKED(LOG_DMA, "Read access to onboard SRAM at %04x\n", m_dma_address);
if (m_dma_address > 0x8000) LOGMASKED(LOG_WARN, "Read access beyond RAM size: %06x\n", m_dma_address);
@@ -860,7 +860,7 @@ READ8_MEMBER( myarc_hfdc_device::read_buffer )
/*
Write a byte to the onboard SRAM. This is called from the HDC9234.
*/
-WRITE8_MEMBER( myarc_hfdc_device::write_buffer )
+void myarc_hfdc_device::write_buffer(uint8_t data)
{
LOGMASKED(LOG_DMA, "Write access to onboard SRAM at %04x: %02x\n", m_dma_address, data);
if (m_dma_address > 0x8000) LOGMASKED(LOG_WARN, "Write access beyond RAM size: %06x\n", m_dma_address);
diff --git a/src/devices/bus/ti99/peb/hfdc.h b/src/devices/bus/ti99/peb/hfdc.h
index 1ac9ec925bd..88648105eb5 100644
--- a/src/devices/bus/ti99/peb/hfdc.h
+++ b/src/devices/bus/ti99/peb/hfdc.h
@@ -38,10 +38,10 @@ public:
myarc_hfdc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
DECLARE_SETADDRESS_DBIN_MEMBER(setaddress_dbin) override;
DECLARE_READ8Z_MEMBER(crureadz) override;
- DECLARE_WRITE8_MEMBER(cruwrite) override;
+ void cruwrite(offs_t offset, uint8_t data) override;
protected:
void device_config_complete() override;
@@ -58,9 +58,9 @@ private:
DECLARE_WRITE_LINE_MEMBER( dmarq_w );
DECLARE_WRITE_LINE_MEMBER( intrq_w );
DECLARE_WRITE_LINE_MEMBER( dip_w );
- DECLARE_WRITE8_MEMBER( auxbus_out );
- DECLARE_READ8_MEMBER( read_buffer );
- DECLARE_WRITE8_MEMBER( write_buffer );
+ void auxbus_out(offs_t offset, uint8_t data);
+ uint8_t read_buffer();
+ void write_buffer(uint8_t data);
DECLARE_FLOPPY_FORMATS( floppy_formats );
diff --git a/src/devices/bus/ti99/peb/horizon.cpp b/src/devices/bus/ti99/peb/horizon.cpp
index da5135f70bf..fdf4b5f97c1 100644
--- a/src/devices/bus/ti99/peb/horizon.cpp
+++ b/src/devices/bus/ti99/peb/horizon.cpp
@@ -219,7 +219,7 @@ READ8Z_MEMBER(horizon_ramdisk_device::readz)
}
}
-WRITE8_MEMBER(horizon_ramdisk_device::write)
+void horizon_ramdisk_device::write(offs_t offset, uint8_t data)
{
// 32K expansion
// According to the manual, "this memory is not affected by the HIDE switch"
@@ -303,7 +303,7 @@ void horizon_ramdisk_device::setbit(int& page, int pattern, bool set)
}
}
-WRITE8_MEMBER(horizon_ramdisk_device::cruwrite)
+void horizon_ramdisk_device::cruwrite(offs_t offset, uint8_t data)
{
int size = ioport("HORIZONSIZE")->read();
int split_bit = size + 10;
diff --git a/src/devices/bus/ti99/peb/horizon.h b/src/devices/bus/ti99/peb/horizon.h
index 76895f0c586..f72e9f109fc 100644
--- a/src/devices/bus/ti99/peb/horizon.h
+++ b/src/devices/bus/ti99/peb/horizon.h
@@ -26,10 +26,10 @@ class horizon_ramdisk_device : public device_t, public device_ti99_peribox_card_
public:
horizon_ramdisk_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
DECLARE_READ8Z_MEMBER(crureadz) override;
- DECLARE_WRITE8_MEMBER(cruwrite) override;
+ void cruwrite(offs_t offset, uint8_t data) override;
DECLARE_INPUT_CHANGED_MEMBER( hs_changed );
diff --git a/src/devices/bus/ti99/peb/hsgpl.cpp b/src/devices/bus/ti99/peb/hsgpl.cpp
index f9f631726e2..11f40c4d1c8 100644
--- a/src/devices/bus/ti99/peb/hsgpl.cpp
+++ b/src/devices/bus/ti99/peb/hsgpl.cpp
@@ -191,7 +191,7 @@ READ8Z_MEMBER(snug_high_speed_gpl_device::crureadz)
/*
Write hsgpl CRU interface
*/
-WRITE8_MEMBER(snug_high_speed_gpl_device::cruwrite)
+void snug_high_speed_gpl_device::cruwrite(offs_t offset, uint8_t data)
{
// SuperCart handling - see gromport.c
if (m_supercart_enabled && ((offset & 0xfff0)==SUPERCART_BASE))
@@ -272,46 +272,46 @@ READ8Z_MEMBER(snug_high_speed_gpl_device::readz)
{
if ((offset & 0x7e000)==0x74000)
{
- dsrspace_readz(space, offset & 0xffff, value, mem_mask);
+ dsrspace_readz(offset & 0xffff, value);
}
if ((offset & 0x7e000)==0x76000)
{
- cartspace_readz(space, offset & 0xffff, value, mem_mask);
+ cartspace_readz(offset & 0xffff, value);
}
// 1001 1wbb bbbb bba0
if ((offset & 0x7fc01)==0x79800)
{
- grom_readz(space, offset & 0xffff, value, mem_mask);
+ grom_readz(offset & 0xffff, value);
}
}
/*
Memory write
*/
-WRITE8_MEMBER(snug_high_speed_gpl_device::write)
+void snug_high_speed_gpl_device::write(offs_t offset, uint8_t data)
{
if ((offset & 0x7e000)==0x76000)
{
- cartspace_write(space, offset & 0xffff, data, mem_mask);
+ cartspace_write(offset & 0xffff, data);
}
// 1001 1wbb bbbb bba0
if ((offset & 0x7fc01)==0x79c00)
{
- grom_write(space, offset & 0xffff, data, mem_mask);
+ grom_write(offset & 0xffff, data);
}
}
/*
Specific read access: dsrspace
*/
-void snug_high_speed_gpl_device::dsrspace_readz(address_space& space, offs_t offset, uint8_t* value, uint8_t mem_mask)
+void snug_high_speed_gpl_device::dsrspace_readz(offs_t offset, uint8_t* value)
{
if (m_dsr_enabled)
{
- *value = m_dsr_eeprom->read(space, (offset & 0x1fff) | (m_dsr_page<<13), mem_mask);
+ *value = m_dsr_eeprom->read((offset & 0x1fff) | (m_dsr_page<<13));
LOGMASKED(LOG_READ, "read dsr %04x[%02x] -> %02x\n", offset, m_dsr_page, *value);
}
}
@@ -319,7 +319,7 @@ void snug_high_speed_gpl_device::dsrspace_readz(address_space& space, offs_t off
/*
Specific read access: cartspace
*/
-void snug_high_speed_gpl_device::cartspace_readz(address_space& space, offs_t offset, uint8_t* value, uint8_t mem_mask)
+void snug_high_speed_gpl_device::cartspace_readz(offs_t offset, uint8_t* value)
{
if (!m_card_enabled || m_flash_mode)
{
@@ -329,7 +329,7 @@ void snug_high_speed_gpl_device::cartspace_readz(address_space& space, offs_t of
if (m_module_bank < 16)
{
- *value = m_rom6_eeprom->read(space, (offset & 0x1fff) | (m_current_bank<<13) | (m_current_grom_port<<15), mem_mask);
+ *value = m_rom6_eeprom->read((offset & 0x1fff) | (m_current_bank<<13) | (m_current_grom_port<<15));
LOGMASKED(LOG_READ, "cartridge space read %04x -> %02x\n", offset, *value);
}
else
@@ -351,7 +351,7 @@ void snug_high_speed_gpl_device::cartspace_readz(address_space& space, offs_t of
it here - which is indeed closer to reality, since the real HSGPL also
emulates GROM instead of using proper ones.
*/
-void snug_high_speed_gpl_device::grom_readz(address_space& space, offs_t offset, uint8_t* value, uint8_t mem_mask)
+void snug_high_speed_gpl_device::grom_readz(offs_t offset, uint8_t* value)
{
if (machine().side_effects_disabled()) return;
@@ -397,7 +397,7 @@ void snug_high_speed_gpl_device::grom_readz(address_space& space, offs_t offset,
{
if (!m_flash_mode)
{
- *value = m_grom_a_eeprom->read(space, m_grom_address | (port<<16), mem_mask);
+ *value = m_grom_a_eeprom->read(m_grom_address | (port<<16));
m_module_bank = port;
if (bNew) LOGMASKED(LOG_PORT, "GROM read access at %04x - switch to bank %d\n", offset & 0xffff, m_module_bank);
}
@@ -406,7 +406,7 @@ void snug_high_speed_gpl_device::grom_readz(address_space& space, offs_t offset,
{
if (port < 16)
{
- *value = m_grom_b_eeprom->read(space, m_grom_address | ((port-8)<<16), mem_mask);
+ *value = m_grom_b_eeprom->read(m_grom_address | ((port-8)<<16));
m_module_bank = port;
if (bNew) LOGMASKED(LOG_PORT, "GROM read access at %04x - switch to bank %d\n", offset & 0xffff, m_module_bank);
}
@@ -416,7 +416,7 @@ void snug_high_speed_gpl_device::grom_readz(address_space& space, offs_t offset,
{
// 9840-985c
// DSR banks 0-63 (8 KiB per bank, 8 banks per port)
- *value = m_dsr_eeprom->read(space, m_grom_address | ((port-16)<<16), mem_mask);
+ *value = m_dsr_eeprom->read(m_grom_address | ((port-16)<<16));
// Don't change the module port
if (bNew) LOGMASKED(LOG_DSR, "read access to DSR bank %d-%d (%04x)\n", (port-16)<<3, ((port-16)<<3)+7, offset);
}
@@ -427,7 +427,7 @@ void snug_high_speed_gpl_device::grom_readz(address_space& space, offs_t offset,
// 9860-987c (ports 24-31)
// Each ROM6 is available as 4 (sub)banks (switchable via 6000, 6002, 6004, 6006)
// Accordingly, each port has two complete sets
- *value = m_rom6_eeprom->read(space, m_grom_address | ((port-24)<<16), mem_mask);
+ *value = m_rom6_eeprom->read(m_grom_address | ((port-24)<<16));
if (bNew) LOGMASKED(LOG_PORT, "ROM6 read access for module bank %d-%d (%04x)\n", (port-24)<<1, ((port-24)<<1)+1, offset & 0xffff);
}
else
@@ -469,7 +469,7 @@ void snug_high_speed_gpl_device::grom_readz(address_space& space, offs_t offset,
/*
Specific write access: cartspace
*/
-void snug_high_speed_gpl_device::cartspace_write(address_space& space, offs_t offset, uint8_t data, uint8_t mem_mask)
+void snug_high_speed_gpl_device::cartspace_write(offs_t offset, uint8_t data)
{
if (!m_card_enabled || m_flash_mode)
{
@@ -537,7 +537,7 @@ void snug_high_speed_gpl_device::cartspace_write(address_space& space, offs_t of
/*
Specific write access: grom_write
*/
-void snug_high_speed_gpl_device::grom_write(address_space& space, offs_t offset, uint8_t data, uint8_t mem_mask)
+void snug_high_speed_gpl_device::grom_write(offs_t offset, uint8_t data)
{
if (machine().side_effects_disabled()) return;
@@ -583,7 +583,7 @@ void snug_high_speed_gpl_device::grom_write(address_space& space, offs_t offset,
{
if (port < 8)
{
- m_grom_a_eeprom->write(space, m_grom_address | (port<<16), data, mem_mask);
+ m_grom_a_eeprom->write(m_grom_address | (port<<16), data);
m_module_bank = port;
if (bNew) LOGMASKED(LOG_PORT, "GROM write access at %04x - switch to bank %d\n", offset & 0xffff, port);
}
@@ -591,7 +591,7 @@ void snug_high_speed_gpl_device::grom_write(address_space& space, offs_t offset,
{
if (port < 16)
{
- m_grom_b_eeprom->write(space, m_grom_address | ((port-8)<<16), data, mem_mask);
+ m_grom_b_eeprom->write(m_grom_address | ((port-8)<<16), data);
m_module_bank = port;
if (bNew) LOGMASKED(LOG_PORT, "GROM write access at %04x - switch to bank %d\n", offset & 0xffff, port);
}
@@ -599,14 +599,14 @@ void snug_high_speed_gpl_device::grom_write(address_space& space, offs_t offset,
{
if (port < 24)
{
- m_dsr_eeprom->write(space, m_grom_address | ((port-16)<<16), data, mem_mask);
+ m_dsr_eeprom->write(m_grom_address | ((port-16)<<16), data);
if (bNew) LOGMASKED(LOG_DSR, "write access to DSR bank %d-%d (%04x)\n", (port-16)<<3, ((port-16)<<3)+7, offset);
}
else
{
if (port < 32)
{
- m_rom6_eeprom->write(space, m_grom_address | ((port-24)<<16), data, mem_mask);
+ m_rom6_eeprom->write(m_grom_address | ((port-24)<<16), data);
if (bNew) LOGMASKED(LOG_PORT, "ROM6 write access for module bank %d-%d (%04x)\n", (port-24)<<1, ((port-24)<<1)+1,offset & 0xffff);
}
else
diff --git a/src/devices/bus/ti99/peb/hsgpl.h b/src/devices/bus/ti99/peb/hsgpl.h
index 65cca91a081..7248436963f 100644
--- a/src/devices/bus/ti99/peb/hsgpl.h
+++ b/src/devices/bus/ti99/peb/hsgpl.h
@@ -29,10 +29,10 @@ class snug_high_speed_gpl_device : public device_t, public device_ti99_peribox_c
public:
snug_high_speed_gpl_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
DECLARE_READ8Z_MEMBER(crureadz) override;
- DECLARE_WRITE8_MEMBER(cruwrite) override;
+ void cruwrite(offs_t offset, uint8_t data) override;
protected:
virtual void device_start() override;
@@ -51,12 +51,12 @@ private:
required_device<ram_device> m_ram6_memory;
required_device<ram_device> m_gram_memory;
- void dsrspace_readz(address_space& space, offs_t offset, uint8_t* value, uint8_t mem_mask);
- void cartspace_readz(address_space& space, offs_t offset, uint8_t* value, uint8_t mem_mask);
- void grom_readz(address_space& space, offs_t offset, uint8_t* value, uint8_t mem_mask);
+ void dsrspace_readz(offs_t offset, uint8_t* value);
+ void cartspace_readz(offs_t offset, uint8_t* value);
+ void grom_readz(offs_t offset, uint8_t* value);
- void cartspace_write(address_space& space, offs_t offset, uint8_t data, uint8_t mem_mask);
- void grom_write(address_space& space, offs_t offset, uint8_t data, uint8_t mem_mask);
+ void cartspace_write(offs_t offset, uint8_t data);
+ void grom_write(offs_t offset, uint8_t data);
bool m_dsr_enabled;
bool m_gram_enabled;
diff --git a/src/devices/bus/ti99/peb/memex.cpp b/src/devices/bus/ti99/peb/memex.cpp
index 1d770a9b224..3a3116d262d 100644
--- a/src/devices/bus/ti99/peb/memex.cpp
+++ b/src/devices/bus/ti99/peb/memex.cpp
@@ -101,7 +101,7 @@ READ8Z_MEMBER( geneve_memex_device::readz )
/*
Memory write
*/
-WRITE8_MEMBER( geneve_memex_device::write )
+void geneve_memex_device::write(offs_t offset, uint8_t data)
{
/* If not Genmod, add the upper two address bits 10 */
if (!m_genmod) offset |= 0x100000;
@@ -152,11 +152,12 @@ INPUT_PORTS_START( memex )
PORT_DIPSETTING( MDIP8, "Lock out pages FC-FF")
INPUT_PORTS_END
-MACHINE_CONFIG_START(geneve_memex_device::device_add_mconfig)
+void geneve_memex_device::device_add_mconfig(machine_config &config)
+{
RAM(config, m_ram, 0);
m_ram->set_default_size("2M");
m_ram->set_default_value(0);
-MACHINE_CONFIG_END
+}
ioport_constructor geneve_memex_device::device_input_ports() const
{
diff --git a/src/devices/bus/ti99/peb/memex.h b/src/devices/bus/ti99/peb/memex.h
index 3aa44429dc0..fb7ca27a1ad 100644
--- a/src/devices/bus/ti99/peb/memex.h
+++ b/src/devices/bus/ti99/peb/memex.h
@@ -26,10 +26,10 @@ class geneve_memex_device : public device_t, public device_ti99_peribox_card_int
public:
geneve_memex_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
DECLARE_READ8Z_MEMBER(crureadz) override { }
- DECLARE_WRITE8_MEMBER(cruwrite) override { }
+ void cruwrite(offs_t offset, uint8_t data) override { }
protected:
void device_start() override;
diff --git a/src/devices/bus/ti99/peb/myarcmem.cpp b/src/devices/bus/ti99/peb/myarcmem.cpp
index ccb8f0091cf..79add7a6c72 100644
--- a/src/devices/bus/ti99/peb/myarcmem.cpp
+++ b/src/devices/bus/ti99/peb/myarcmem.cpp
@@ -101,7 +101,7 @@ READ8Z_MEMBER(myarc_memory_expansion_device::readz)
/*
Memory write access. DSRROM does not allow writing.
*/
-WRITE8_MEMBER(myarc_memory_expansion_device::write)
+void myarc_memory_expansion_device::write(offs_t offset, uint8_t data)
{
int base = get_base(offset);
@@ -142,7 +142,7 @@ READ8Z_MEMBER(myarc_memory_expansion_device::crureadz)
1006 = bit 2 of RAM bank value (512K)
1008 = bit 3 of RAM bank value (512K)
*/
-WRITE8_MEMBER(myarc_memory_expansion_device::cruwrite)
+void myarc_memory_expansion_device::cruwrite(offs_t offset, uint8_t data)
{
if (((offset & 0xff00)==MYARCMEM_CRU_BASE1)||((offset & 0xff00)==MYARCMEM_CRU_BASE2))
{
diff --git a/src/devices/bus/ti99/peb/myarcmem.h b/src/devices/bus/ti99/peb/myarcmem.h
index 3ea9d52419a..175b8d60344 100644
--- a/src/devices/bus/ti99/peb/myarcmem.h
+++ b/src/devices/bus/ti99/peb/myarcmem.h
@@ -25,10 +25,10 @@ class myarc_memory_expansion_device : public device_t, public device_ti99_peribo
public:
myarc_memory_expansion_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
DECLARE_READ8Z_MEMBER(crureadz) override;
- DECLARE_WRITE8_MEMBER(cruwrite) override;
+ void cruwrite(offs_t offset, uint8_t data) override;
protected:
void device_start() override;
diff --git a/src/devices/bus/ti99/peb/pcode.cpp b/src/devices/bus/ti99/peb/pcode.cpp
index f0a24ad1646..dbdd7c9f1a9 100644
--- a/src/devices/bus/ti99/peb/pcode.cpp
+++ b/src/devices/bus/ti99/peb/pcode.cpp
@@ -142,7 +142,7 @@ SETADDRESS_DBIN_MEMBER( ti_pcode_card_device::setaddress_dbin )
}
}
-void ti_pcode_card_device::debugger_read(address_space& space, uint16_t offset, uint8_t& value)
+void ti_pcode_card_device::debugger_read(uint16_t offset, uint8_t& value)
{
// The debuger does not call setaddress
if (m_active && ((offset & m_select_mask)==m_select_value))
@@ -160,7 +160,7 @@ READ8Z_MEMBER( ti_pcode_card_device::readz )
// Care for debugger
if (machine().side_effects_disabled())
{
- debugger_read(space, offset, *value);
+ debugger_read(offset, *value);
}
if (m_active && m_inDsrArea && m_selected)
@@ -200,7 +200,7 @@ READ8Z_MEMBER( ti_pcode_card_device::readz )
Write a byte in P-Code ROM space. This is only used for setting the
GROM address.
*/
-WRITE8_MEMBER( ti_pcode_card_device::write )
+void ti_pcode_card_device::write(offs_t offset, uint8_t data)
{
if (machine().side_effects_disabled()) return;
if (m_active && m_isgrom && m_selected)
@@ -253,7 +253,7 @@ READ8Z_MEMBER(ti_pcode_card_device::crureadz)
A8, A13, and A14 so bit 0 is at 0x1f00, but bit 4 is at 0x1f80. Accordingly,
bit 7 would be 0x1f86 but it is not used.
*/
-WRITE8_MEMBER(ti_pcode_card_device::cruwrite)
+void ti_pcode_card_device::cruwrite(offs_t offset, uint8_t data)
{
if ((offset & 0xff00)==CRU_BASE)
m_crulatch->write_bit((offset & 0x80) >> 5 | (offset & 0x06) >> 1, data);
diff --git a/src/devices/bus/ti99/peb/pcode.h b/src/devices/bus/ti99/peb/pcode.h
index 96462dba527..5e7a2cb6ce0 100644
--- a/src/devices/bus/ti99/peb/pcode.h
+++ b/src/devices/bus/ti99/peb/pcode.h
@@ -28,9 +28,9 @@ class ti_pcode_card_device : public device_t, public device_ti99_peribox_card_in
public:
ti_pcode_card_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
DECLARE_READ8Z_MEMBER(crureadz) override;
- DECLARE_WRITE8_MEMBER(cruwrite) override;
+ void cruwrite(offs_t offset, uint8_t data) override;
DECLARE_SETADDRESS_DBIN_MEMBER(setaddress_dbin) override;
DECLARE_WRITE_LINE_MEMBER(clock_in) override;
@@ -51,7 +51,7 @@ private:
DECLARE_WRITE_LINE_MEMBER(pcpage_w);
DECLARE_WRITE_LINE_MEMBER(ekrpg_w);
- void debugger_read(address_space& space, uint16_t addr, uint8_t& value);
+ void debugger_read(uint16_t addr, uint8_t& value);
required_device_array<tmc0430_device, 8> m_groms;
diff --git a/src/devices/bus/ti99/peb/peribox.cpp b/src/devices/bus/ti99/peb/peribox.cpp
index 80da29f6dd4..b75a15a49ed 100644
--- a/src/devices/bus/ti99/peb/peribox.cpp
+++ b/src/devices/bus/ti99/peb/peribox.cpp
@@ -272,15 +272,15 @@ READ8Z_MEMBER(peribox_device::readz)
{
for (int i=2; i <= 8; i++)
{
- if (m_slot[i]!=nullptr) m_slot[i]->readz(space, offset | m_address_prefix, value, mem_mask);
+ if (m_slot[i]!=nullptr) m_slot[i]->readz(offset | m_address_prefix, value);
}
}
-WRITE8_MEMBER(peribox_device::write)
+void peribox_device::write(offs_t offset, uint8_t data)
{
for (int i=2; i <= 8; i++)
{
- if (m_slot[i]!=nullptr) m_slot[i]->write(space, offset | m_address_prefix, data, mem_mask);
+ if (m_slot[i]!=nullptr) m_slot[i]->write(offset | m_address_prefix, data);
}
}
@@ -291,7 +291,7 @@ SETADDRESS_DBIN_MEMBER(peribox_device::setaddress_dbin)
for (int i=2; i <= 8; i++)
{
- if (m_slot[i]!=nullptr) m_slot[i]->setaddress_dbin(space, offset | m_address_prefix, state);
+ if (m_slot[i]!=nullptr) m_slot[i]->setaddress_dbin(offset | m_address_prefix, state);
}
}
@@ -299,15 +299,15 @@ READ8Z_MEMBER(peribox_device::crureadz)
{
for (int i=2; i <= 8; i++)
{
- if (m_slot[i]!=nullptr) m_slot[i]->crureadz(space, offset, value);
+ if (m_slot[i]!=nullptr) m_slot[i]->crureadz(offset, value);
}
}
-WRITE8_MEMBER(peribox_device::cruwrite)
+void peribox_device::cruwrite(offs_t offset, uint8_t data)
{
for (int i=2; i <= 8; i++)
{
- if (m_slot[i]!=nullptr) m_slot[i]->cruwrite(space, offset, data);
+ if (m_slot[i]!=nullptr) m_slot[i]->cruwrite(offset, data);
}
}
@@ -647,27 +647,27 @@ peribox_slot_device::peribox_slot_device(const machine_config &mconfig, const ch
READ8Z_MEMBER(peribox_slot_device::readz)
{
- m_card->readz(space, offset, value, mem_mask);
+ m_card->readz(offset, value);
}
-WRITE8_MEMBER(peribox_slot_device::write)
+void peribox_slot_device::write(offs_t offset, uint8_t data)
{
- m_card->write(space, offset, data, mem_mask);
+ m_card->write(offset, data);
}
SETADDRESS_DBIN_MEMBER(peribox_slot_device::setaddress_dbin)
{
- m_card->setaddress_dbin(space, offset, state);
+ m_card->setaddress_dbin(offset, state);
}
READ8Z_MEMBER(peribox_slot_device::crureadz)
{
- m_card->crureadz(space, offset, value);
+ m_card->crureadz(offset, value);
}
-WRITE8_MEMBER(peribox_slot_device::cruwrite)
+void peribox_slot_device::cruwrite(offs_t offset, uint8_t data)
{
- m_card->cruwrite(space, offset, data);
+ m_card->cruwrite(offset, data);
}
WRITE_LINE_MEMBER( peribox_slot_device::senila )
diff --git a/src/devices/bus/ti99/peb/peribox.h b/src/devices/bus/ti99/peb/peribox.h
index a936a5346ef..405ded3338e 100644
--- a/src/devices/bus/ti99/peb/peribox.h
+++ b/src/devices/bus/ti99/peb/peribox.h
@@ -36,11 +36,11 @@ public:
// Next eight methods are called from the console
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
DECLARE_SETADDRESS_DBIN_MEMBER(setaddress_dbin) override;
DECLARE_READ8Z_MEMBER(crureadz) override;
- DECLARE_WRITE8_MEMBER(cruwrite) override;
+ void cruwrite(offs_t offset, uint8_t data) override;
DECLARE_WRITE_LINE_MEMBER(senila);
DECLARE_WRITE_LINE_MEMBER(senilb);
@@ -176,9 +176,9 @@ class device_ti99_peribox_card_interface : public device_slot_card_interface
public:
virtual DECLARE_READ8Z_MEMBER(readz) = 0;
- virtual DECLARE_WRITE8_MEMBER(write) = 0;
+ virtual void write(offs_t offset, uint8_t data) = 0;
virtual DECLARE_READ8Z_MEMBER(crureadz) = 0;
- virtual DECLARE_WRITE8_MEMBER(cruwrite) = 0;
+ virtual void cruwrite(offs_t offset, uint8_t data) = 0;
virtual DECLARE_SETADDRESS_DBIN_MEMBER(setaddress_dbin) { };
virtual DECLARE_WRITE_LINE_MEMBER(clock_in) { }
@@ -231,7 +231,7 @@ public:
// Called from the box (direction to card)
DECLARE_READ8Z_MEMBER(readz);
- DECLARE_WRITE8_MEMBER(write);
+ void write(offs_t offset, uint8_t data);
DECLARE_SETADDRESS_DBIN_MEMBER(setaddress_dbin);
DECLARE_WRITE_LINE_MEMBER(senila);
@@ -245,7 +245,7 @@ public:
DECLARE_WRITE_LINE_MEMBER( set_ready );
DECLARE_READ8Z_MEMBER(crureadz);
- DECLARE_WRITE8_MEMBER(cruwrite);
+ void cruwrite(offs_t offset, uint8_t data);
// called from the box itself
void set_genmod(bool set);
diff --git a/src/devices/bus/ti99/peb/samsmem.cpp b/src/devices/bus/ti99/peb/samsmem.cpp
index 1bc315fed1f..dff96b57198 100644
--- a/src/devices/bus/ti99/peb/samsmem.cpp
+++ b/src/devices/bus/ti99/peb/samsmem.cpp
@@ -70,7 +70,7 @@ READ8Z_MEMBER(sams_memory_expansion_device::readz)
}
}
-WRITE8_MEMBER(sams_memory_expansion_device::write)
+void sams_memory_expansion_device::write(offs_t offset, uint8_t data)
{
int base;
@@ -104,7 +104,7 @@ READ8Z_MEMBER(sams_memory_expansion_device::crureadz)
/*
CRU write. Turns on the mapper and allows to change it.
*/
-WRITE8_MEMBER(sams_memory_expansion_device::cruwrite)
+void sams_memory_expansion_device::cruwrite(offs_t offset, uint8_t data)
{
if ((offset & 0xff00)==SAMS_CRU_BASE)
m_crulatch->write_bit((offset & 0x000e) >> 1, data);
diff --git a/src/devices/bus/ti99/peb/samsmem.h b/src/devices/bus/ti99/peb/samsmem.h
index c002252d773..da05b58438e 100644
--- a/src/devices/bus/ti99/peb/samsmem.h
+++ b/src/devices/bus/ti99/peb/samsmem.h
@@ -28,10 +28,10 @@ class sams_memory_expansion_device : public device_t, public device_ti99_peribox
public:
sams_memory_expansion_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
DECLARE_READ8Z_MEMBER(crureadz) override;
- DECLARE_WRITE8_MEMBER(cruwrite) override;
+ void cruwrite(offs_t offset, uint8_t data) override;
protected:
void device_start() override;
diff --git a/src/devices/bus/ti99/peb/spchsyn.cpp b/src/devices/bus/ti99/peb/spchsyn.cpp
index 0f10eea1f33..b4bcebf3c94 100644
--- a/src/devices/bus/ti99/peb/spchsyn.cpp
+++ b/src/devices/bus/ti99/peb/spchsyn.cpp
@@ -67,14 +67,14 @@ READ8Z_MEMBER( ti_speech_synthesizer_device::readz )
// lines by setting the address bus to a different value, but the
// Geneve may behave differently. This may not 100% reflect the real
// situation, but it ensures a safe processing.
- m_vsp->combined_rsq_wsq_w(space, 0, ~0);
+ m_vsp->combined_rsq_wsq_w(machine().dummy_space(), 0, ~0);
}
}
/*
Memory write
*/
-WRITE8_MEMBER( ti_speech_synthesizer_device::write )
+void ti_speech_synthesizer_device::write(offs_t offset, uint8_t data)
{
if (machine().side_effects_disabled()) return;
@@ -92,7 +92,6 @@ SETADDRESS_DBIN_MEMBER( ti_speech_synthesizer_device::setaddress_dbin )
// 1001 00xx xxxx xxx0 DBIN=1
// 1001 01xx xxxx xxx0 DBIN=0
// 1111 1000 0000 0001 mask
- m_space = &space;
m_reading = (state==ASSERT_LINE);
bool valid = (((offset & 0x0400)==0) == m_reading);
@@ -107,11 +106,11 @@ SETADDRESS_DBIN_MEMBER( ti_speech_synthesizer_device::setaddress_dbin )
// both RS* and WS* are active, which is illegal.
// Alternatively, we'll use the combined settings method
- m_vsp->combined_rsq_wsq_w(space, 0, m_reading ? ~tms5220_device::RS : ~tms5220_device::WS);
+ m_vsp->combined_rsq_wsq_w(machine().dummy_space(), 0, m_reading ? ~tms5220_device::RS : ~tms5220_device::WS);
}
else
// If other address, turn off RS* and WS* (negative logic!)
- m_vsp->combined_rsq_wsq_w(space, 0, ~0);
+ m_vsp->combined_rsq_wsq_w(machine().dummy_space(), 0, ~0);
}
/****************************************************************************/
@@ -126,13 +125,11 @@ WRITE_LINE_MEMBER( ti_speech_synthesizer_device::speech_ready )
if ((state==0) && !m_reading)
// Clear the lines only when we are done with writing.
- m_vsp->combined_rsq_wsq_w(*m_space, 0, ~0);
+ m_vsp->combined_rsq_wsq_w(machine().dummy_space(), 0, ~0);
}
void ti_speech_synthesizer_device::device_start()
{
- // We don't need to save m_space because the calling method
- // combined_rsq_wsq_w only needs the address space formally.
save_item(NAME(m_reading));
save_item(NAME(m_sbe));
}
diff --git a/src/devices/bus/ti99/peb/spchsyn.h b/src/devices/bus/ti99/peb/spchsyn.h
index 35bf0f680e8..8efee71aed7 100644
--- a/src/devices/bus/ti99/peb/spchsyn.h
+++ b/src/devices/bus/ti99/peb/spchsyn.h
@@ -26,11 +26,11 @@ class ti_speech_synthesizer_device : public device_t, public device_ti99_peribox
public:
ti_speech_synthesizer_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
DECLARE_SETADDRESS_DBIN_MEMBER(setaddress_dbin) override;
DECLARE_READ8Z_MEMBER(crureadz) override { }
- DECLARE_WRITE8_MEMBER(cruwrite) override { }
+ void cruwrite(offs_t offset, uint8_t data) override { }
protected:
virtual void device_start() override;
@@ -41,7 +41,6 @@ protected:
private:
DECLARE_WRITE_LINE_MEMBER( speech_ready );
- address_space* m_space;
required_device<cd2501e_device> m_vsp;
bool m_reading;
bool m_sbe; // Signal "Speech block enable"
diff --git a/src/devices/bus/ti99/peb/ti_32kmem.cpp b/src/devices/bus/ti99/peb/ti_32kmem.cpp
index fce434c70d7..b25c7d65784 100644
--- a/src/devices/bus/ti99/peb/ti_32kmem.cpp
+++ b/src/devices/bus/ti99/peb/ti_32kmem.cpp
@@ -82,7 +82,7 @@ READ8Z_MEMBER(ti_32k_expcard_device::readz)
}
}
-WRITE8_MEMBER(ti_32k_expcard_device::write)
+void ti_32k_expcard_device::write(offs_t offset, uint8_t data)
{
bool select = ((offset & 0xfc000)==0x7c000) | ((offset & 0xf6000)==0x72000); // PAL output pin 14 [1]
@@ -100,10 +100,11 @@ void ti_32k_expcard_device::device_start()
{
}
-MACHINE_CONFIG_START(ti_32k_expcard_device::device_add_mconfig)
+void ti_32k_expcard_device::device_add_mconfig(machine_config &config)
+{
RAM(config, m_ram, 0);
m_ram->set_default_size("32k");
m_ram->set_default_value(0);
-MACHINE_CONFIG_END
+}
} } } // end namespace bus::ti99::peb
diff --git a/src/devices/bus/ti99/peb/ti_32kmem.h b/src/devices/bus/ti99/peb/ti_32kmem.h
index 0ff492ca1c7..5ed0faac87c 100644
--- a/src/devices/bus/ti99/peb/ti_32kmem.h
+++ b/src/devices/bus/ti99/peb/ti_32kmem.h
@@ -26,10 +26,10 @@ class ti_32k_expcard_device : public device_t, public device_ti99_peribox_card_i
public:
ti_32k_expcard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
DECLARE_READ8Z_MEMBER(crureadz) override { }
- DECLARE_WRITE8_MEMBER(cruwrite) override { }
+ void cruwrite(offs_t offset, uint8_t data) override { }
protected:
void device_start() override;
diff --git a/src/devices/bus/ti99/peb/ti_fdc.cpp b/src/devices/bus/ti99/peb/ti_fdc.cpp
index 530dc71d987..79d27cd5460 100644
--- a/src/devices/bus/ti99/peb/ti_fdc.cpp
+++ b/src/devices/bus/ti99/peb/ti_fdc.cpp
@@ -160,7 +160,7 @@ READ8Z_MEMBER(ti_fdc_device::readz)
}
}
-WRITE8_MEMBER(ti_fdc_device::write)
+void ti_fdc_device::write(offs_t offset, uint8_t data)
{
if (machine().side_effects_disabled()) return;
@@ -201,7 +201,7 @@ READ8Z_MEMBER(ti_fdc_device::crureadz)
if ((offset & 0xff00)==m_cru_base)
{
uint8_t reply = 0;
- if ((offset & 0x07) == 0)
+ if ((offset & 0x0070) == 0)
{
// Selected drive
reply |= ((m_DSEL)<<1);
@@ -212,12 +212,12 @@ READ8Z_MEMBER(ti_fdc_device::crureadz)
// Selected side
if (m_SIDSEL==ASSERT_LINE) reply |= 0x80;
}
- *value = reply;
+ *value = BIT(reply, (offset >> 1) & 0x07);
LOGMASKED(LOG_CRU, "Read CRU = %02x\n", *value);
}
}
-WRITE8_MEMBER(ti_fdc_device::cruwrite)
+void ti_fdc_device::cruwrite(offs_t offset, uint8_t data)
{
if ((offset & 0xff00)==m_cru_base)
m_crulatch->write_bit((offset >> 1) & 0x07, BIT(data, 0));
diff --git a/src/devices/bus/ti99/peb/ti_fdc.h b/src/devices/bus/ti99/peb/ti_fdc.h
index f7312661080..4c07bcb142e 100644
--- a/src/devices/bus/ti99/peb/ti_fdc.h
+++ b/src/devices/bus/ti99/peb/ti_fdc.h
@@ -28,11 +28,11 @@ class ti_fdc_device : public device_t, public device_ti99_peribox_card_interface
public:
ti_fdc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
DECLARE_SETADDRESS_DBIN_MEMBER(setaddress_dbin) override;
DECLARE_READ8Z_MEMBER(crureadz) override;
- DECLARE_WRITE8_MEMBER(cruwrite) override;
+ void cruwrite(offs_t offset, uint8_t data) override;
// bool dvena_r();
diff --git a/src/devices/bus/ti99/peb/ti_rs232.cpp b/src/devices/bus/ti99/peb/ti_rs232.cpp
index 8f2ed3f4c45..cbc164bbcb2 100644
--- a/src/devices/bus/ti99/peb/ti_rs232.cpp
+++ b/src/devices/bus/ti99/peb/ti_rs232.cpp
@@ -254,17 +254,17 @@ READ8Z_MEMBER(ti_rs232_pio_device::crureadz)
if ((m_signals[0] & tms9902_device::CTS)!=0) reply |= 0x20;
if ((m_signals[1] & tms9902_device::CTS)!=0) reply |= 0x40;
if (m_led) reply |= 0x80;
- *value = reply;
+ *value = BIT(reply, (offset>>1) & 7);
return;
}
if ((offset & 0x00c0)==0x0040)
{
- *value = m_uart0->cruread(space, offset>>4, 0xff);
+ *value = m_uart0->cruread(offset>>1);
return;
}
if ((offset & 0x00c0)==0x0080)
{
- *value = m_uart1->cruread(space, offset>>4, 0xff);
+ *value = m_uart1->cruread(offset>>1);
return;
}
}
@@ -273,18 +273,18 @@ READ8Z_MEMBER(ti_rs232_pio_device::crureadz)
/*
CRU write
*/
-WRITE8_MEMBER(ti_rs232_pio_device::cruwrite)
+void ti_rs232_pio_device::cruwrite(offs_t offset, uint8_t data)
{
if ((offset & 0xff00)==m_cru_base)
{
if ((offset & 0x00c0)==0x0040)
{
- m_uart0->cruwrite(space, offset>>1, data, 0xff);
+ m_uart0->cruwrite(offset>>1, data);
return;
}
if ((offset & 0x00c0)==0x0080)
{
- m_uart1->cruwrite(space, offset>>1, data, 0xff);
+ m_uart1->cruwrite(offset>>1, data);
return;
}
@@ -403,7 +403,7 @@ READ8Z_MEMBER( ti_rs232_pio_device::readz )
/*
Memory write
*/
-WRITE8_MEMBER( ti_rs232_pio_device::write )
+void ti_rs232_pio_device::write(offs_t offset, uint8_t data)
{
if (((offset & m_select_mask)==m_select_value) && m_selected)
{
@@ -967,12 +967,12 @@ WRITE_LINE_MEMBER( ti_rs232_pio_device::rcv1_callback )
receive_data_or_line_state(1);
}
-WRITE8_MEMBER( ti_rs232_pio_device::xmit0_callback )
+void ti_rs232_pio_device::xmit0_callback(uint8_t data)
{
transmit_data(0, data);
}
-WRITE8_MEMBER( ti_rs232_pio_device::xmit1_callback )
+void ti_rs232_pio_device::xmit1_callback(uint8_t data)
{
transmit_data(1, data);
}
@@ -998,12 +998,12 @@ void ti_rs232_pio_device::ctrl_callback(int uartind, int offset, uint8_t data)
}
}
-WRITE8_MEMBER( ti_rs232_pio_device::ctrl0_callback )
+void ti_rs232_pio_device::ctrl0_callback(offs_t offset, uint8_t data)
{
ctrl_callback(0, offset, data);
}
-WRITE8_MEMBER( ti_rs232_pio_device::ctrl1_callback )
+void ti_rs232_pio_device::ctrl1_callback(offs_t offset, uint8_t data)
{
ctrl_callback(1, offset, data);
}
@@ -1101,7 +1101,8 @@ INPUT_PORTS_START( ti_rs232 )
PORT_CONFSETTING( 0x02, "5-20" )
INPUT_PORTS_END
-MACHINE_CONFIG_START(ti_rs232_pio_device::device_add_mconfig)
+void ti_rs232_pio_device::device_add_mconfig(machine_config &config)
+{
TMS9902(config, m_uart0, 3000000);
m_uart0->int_cb().set(FUNC(ti_rs232_pio_device::int0_callback));
m_uart0->rcv_cb().set(FUNC(ti_rs232_pio_device::rcv0_callback));
@@ -1128,7 +1129,7 @@ MACHINE_CONFIG_START(ti_rs232_pio_device::device_add_mconfig)
m_crulatch->q_out_cb<5>().set(FUNC(ti_rs232_pio_device::cts0_w));
m_crulatch->q_out_cb<6>().set(FUNC(ti_rs232_pio_device::cts1_w));
m_crulatch->q_out_cb<7>().set(FUNC(ti_rs232_pio_device::led_w));
-MACHINE_CONFIG_END
+}
const tiny_rom_entry *ti_rs232_pio_device::device_rom_region() const
{
diff --git a/src/devices/bus/ti99/peb/ti_rs232.h b/src/devices/bus/ti99/peb/ti_rs232.h
index 75e6ff582df..3c3b1e89d4b 100644
--- a/src/devices/bus/ti99/peb/ti_rs232.h
+++ b/src/devices/bus/ti99/peb/ti_rs232.h
@@ -32,10 +32,10 @@ class ti_rs232_pio_device : public device_t, public device_ti99_peribox_card_int
public:
ti_rs232_pio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
DECLARE_READ8Z_MEMBER(crureadz) override;
- DECLARE_WRITE8_MEMBER(cruwrite) override;
+ void cruwrite(offs_t offset, uint8_t data) override;
protected:
void device_start() override;
@@ -50,10 +50,10 @@ private:
DECLARE_WRITE_LINE_MEMBER(int1_callback);
DECLARE_WRITE_LINE_MEMBER(rcv0_callback);
DECLARE_WRITE_LINE_MEMBER(rcv1_callback);
- DECLARE_WRITE8_MEMBER(xmit0_callback);
- DECLARE_WRITE8_MEMBER(xmit1_callback);
- DECLARE_WRITE8_MEMBER(ctrl0_callback);
- DECLARE_WRITE8_MEMBER(ctrl1_callback);
+ void xmit0_callback(uint8_t data);
+ void xmit1_callback(uint8_t data);
+ void ctrl0_callback(offs_t offset, uint8_t data);
+ void ctrl1_callback(offs_t offset, uint8_t data);
DECLARE_WRITE_LINE_MEMBER(selected_w);
DECLARE_WRITE_LINE_MEMBER(pio_direction_in_w);
diff --git a/src/devices/bus/ti99/peb/tn_ide.cpp b/src/devices/bus/ti99/peb/tn_ide.cpp
index 243450fd34f..4654a926791 100644
--- a/src/devices/bus/ti99/peb/tn_ide.cpp
+++ b/src/devices/bus/ti99/peb/tn_ide.cpp
@@ -71,9 +71,7 @@ READ8Z_MEMBER(nouspikel_ide_interface_device::crureadz)
uint8_t reply = 0;
if ((offset & 0xff00)==m_cru_base)
{
- int bit = (offset >> 4) & 7;
-
- if (bit==0)
+ if ((offset & 0x0070) == 0)
{
reply = m_cru_register & 0x30;
reply |= 8; /* IDE bus IORDY always set */
@@ -84,14 +82,14 @@ READ8Z_MEMBER(nouspikel_ide_interface_device::crureadz)
if (!m_ata_irq)
reply |= 1;
}
- *value = reply;
+ *value = BIT(reply, (offset >> 1) & 7);
}
}
/*
CRU write
*/
-WRITE8_MEMBER(nouspikel_ide_interface_device::cruwrite)
+void nouspikel_ide_interface_device::cruwrite(offs_t offset, uint8_t data)
{
if ((offset & 0xff00)==m_cru_base)
{
@@ -146,18 +144,18 @@ READ8Z_MEMBER(nouspikel_ide_interface_device::readz)
case 0: /* RTC RAM */
if (addr & 0x80)
/* RTC RAM page register */
- reply = m_rtc->xram_r(machine().dummy_space(), (addr & 0x1f) | 0x20);
+ reply = m_rtc->xram_r((addr & 0x1f) | 0x20);
else
/* RTC RAM read */
- reply = m_rtc->xram_r(machine().dummy_space(), addr);
+ reply = m_rtc->xram_r(addr);
break;
case 1: /* RTC registers */
if (addr & 0x10)
/* register data */
- reply = m_rtc->rtc_r(machine().dummy_space(), 1);
+ reply = m_rtc->rtc_r(1);
else
/* register select */
- reply = m_rtc->rtc_r(machine().dummy_space(), 0);
+ reply = m_rtc->rtc_r(0);
break;
case 2: /* IDE registers set 1 (CS1Fx) */
if (m_tms9995_mode ? (!(addr & 1)) : (addr & 1))
@@ -197,7 +195,7 @@ READ8Z_MEMBER(nouspikel_ide_interface_device::readz)
/*
Memory write. The controller is 16 bit, so we need to demultiplex again.
*/
-WRITE8_MEMBER(nouspikel_ide_interface_device::write)
+void nouspikel_ide_interface_device::write(offs_t offset, uint8_t data)
{
if (machine().side_effects_disabled()) return;
@@ -217,18 +215,18 @@ WRITE8_MEMBER(nouspikel_ide_interface_device::write)
case 0: /* RTC RAM */
if (addr & 0x80)
/* RTC RAM page register */
- m_rtc->xram_w(machine().dummy_space(), (addr & 0x1f) | 0x20, data);
+ m_rtc->xram_w((addr & 0x1f) | 0x20, data);
else
/* RTC RAM write */
- m_rtc->xram_w(machine().dummy_space(), addr, data);
+ m_rtc->xram_w(addr, data);
break;
case 1: /* RTC registers */
if (addr & 0x10)
/* register data */
- m_rtc->rtc_w(machine().dummy_space(), 1, data);
+ m_rtc->rtc_w(1, data);
else
/* register select */
- m_rtc->rtc_w(machine().dummy_space(), 0, data);
+ m_rtc->rtc_w(0, data);
break;
case 2: /* IDE registers set 1 (CS1Fx) */
/*
diff --git a/src/devices/bus/ti99/peb/tn_ide.h b/src/devices/bus/ti99/peb/tn_ide.h
index b4aa66f2fe3..51d516d5af0 100644
--- a/src/devices/bus/ti99/peb/tn_ide.h
+++ b/src/devices/bus/ti99/peb/tn_ide.h
@@ -28,10 +28,10 @@ class nouspikel_ide_interface_device : public device_t, public device_ti99_perib
public:
nouspikel_ide_interface_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
DECLARE_READ8Z_MEMBER(crureadz) override;
- DECLARE_WRITE8_MEMBER(cruwrite) override;
+ void cruwrite(offs_t offset, uint8_t data) override;
void do_inta(int state);
bool m_ata_irq;
diff --git a/src/devices/bus/ti99/peb/tn_usbsm.cpp b/src/devices/bus/ti99/peb/tn_usbsm.cpp
index 813ced0eb0d..77f933667e9 100644
--- a/src/devices/bus/ti99/peb/tn_usbsm.cpp
+++ b/src/devices/bus/ti99/peb/tn_usbsm.cpp
@@ -93,9 +93,8 @@ READ8Z_MEMBER(nouspikel_usb_smartmedia_device::crureadz)
if ((offset & 0xff00)==m_cru_base)
{
uint8_t reply = 0;
- offset &= 3;
- if (offset == 0)
+ if ((offset & 0x0030) == 0)
{
// bit
// 0 >1x00 0: USB Host controller requests interrupt.
@@ -117,14 +116,14 @@ READ8Z_MEMBER(nouspikel_usb_smartmedia_device::crureadz)
else if (!m_smartmedia->is_protected())
reply |= 0x80;
}
- *value = reply;
+ *value = BIT(reply, (offset >> 1) & 7);
}
}
/*
CRU write
*/
-WRITE8_MEMBER(nouspikel_usb_smartmedia_device::cruwrite)
+void nouspikel_usb_smartmedia_device::cruwrite(offs_t offset, uint8_t data)
{
if ((offset & 0xff00)==m_cru_base)
{
@@ -212,7 +211,7 @@ READ8Z_MEMBER(nouspikel_usb_smartmedia_device::readz)
{
// FEEPROM
if (!m_write_flash)
- m_input_latch = m_flash->read16(space, (offset>>1)&0xffff);
+ m_input_latch = m_flash->read16((offset>>1)&0xffff);
}
}
else
@@ -240,7 +239,7 @@ READ8Z_MEMBER(nouspikel_usb_smartmedia_device::readz)
/*
Memory write. The controller is 16 bit, so we need to demultiplex again.
*/
-WRITE8_MEMBER(nouspikel_usb_smartmedia_device::write)
+void nouspikel_usb_smartmedia_device::write(offs_t offset, uint8_t data)
{
if (machine().side_effects_disabled()) return;
@@ -280,7 +279,7 @@ WRITE8_MEMBER(nouspikel_usb_smartmedia_device::write)
else
{ // FEEPROM
if (m_write_flash)
- m_flash->write16(space, (offset>>1)&0xffff, m_output_latch);
+ m_flash->write16((offset>>1)&0xffff, m_output_latch);
}
}
else
@@ -366,12 +365,13 @@ INPUT_PORTS_START( tn_usbsm )
PORT_DIPSETTING( 0x01, "Geneve mode")
INPUT_PORTS_END
-MACHINE_CONFIG_START(nouspikel_usb_smartmedia_device::device_add_mconfig)
+void nouspikel_usb_smartmedia_device::device_add_mconfig(machine_config &config)
+{
SMARTMEDIA(config, "smartmedia", 0);
STRATAFLASH(config, STRATA_TAG, 0);
RAM(config, RAM1_TAG).set_default_size("512K").set_default_value(0);
RAM(config, RAM2_TAG).set_default_size("512K").set_default_value(0);
-MACHINE_CONFIG_END
+}
ioport_constructor nouspikel_usb_smartmedia_device::device_input_ports() const
{
diff --git a/src/devices/bus/ti99/peb/tn_usbsm.h b/src/devices/bus/ti99/peb/tn_usbsm.h
index a379d67102c..52c2690f3ed 100644
--- a/src/devices/bus/ti99/peb/tn_usbsm.h
+++ b/src/devices/bus/ti99/peb/tn_usbsm.h
@@ -28,10 +28,10 @@ class nouspikel_usb_smartmedia_device : public device_t, public device_ti99_peri
public:
nouspikel_usb_smartmedia_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_READ8Z_MEMBER(readz) override;
- DECLARE_WRITE8_MEMBER(write) override;
+ void write(offs_t offset, uint8_t data) override;
DECLARE_READ8Z_MEMBER(crureadz) override;
- DECLARE_WRITE8_MEMBER(cruwrite) override;
+ void cruwrite(offs_t offset, uint8_t data) override;
protected:
virtual void device_start() override;
diff --git a/src/devices/bus/ti99/ti99defs.h b/src/devices/bus/ti99/ti99defs.h
index 32d7c88ed38..46bb67aaae9 100644
--- a/src/devices/bus/ti99/ti99defs.h
+++ b/src/devices/bus/ti99/ti99defs.h
@@ -52,8 +52,8 @@
devices as in the real machine, and only the active device changes the bus lines.
*/
-#define READ8Z_MEMBER(name) void name(ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED uint8_t *value, ATTR_UNUSED uint8_t mem_mask)
-#define DECLARE_READ8Z_MEMBER(name) void name(ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED uint8_t *value, ATTR_UNUSED uint8_t mem_mask = 0xff)
+#define READ8Z_MEMBER(name) void name(ATTR_UNUSED offs_t offset, ATTR_UNUSED uint8_t *value)
+#define DECLARE_READ8Z_MEMBER(name) void name(ATTR_UNUSED offs_t offset, ATTR_UNUSED uint8_t *value)
/*
For almost all applications of setoffset, we also need the data bus
@@ -61,7 +61,7 @@
that this is a general rule, we use new macros here which contain the
DBIN setting.
*/
-#define SETADDRESS_DBIN_MEMBER(name) void name(ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED int state)
-#define DECLARE_SETADDRESS_DBIN_MEMBER(name) void name(ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED int state)
+#define SETADDRESS_DBIN_MEMBER(name) void name(ATTR_UNUSED offs_t offset, ATTR_UNUSED int state)
+#define DECLARE_SETADDRESS_DBIN_MEMBER(name) void name(ATTR_UNUSED offs_t offset, ATTR_UNUSED int state)
#endif // MAME_BUS_TI99_TI99DEFS_H
diff --git a/src/devices/bus/ti99x/990_dk.cpp b/src/devices/bus/ti99x/990_dk.cpp
index 118804ddb2b..a634bba7a24 100644
--- a/src/devices/bus/ti99x/990_dk.cpp
+++ b/src/devices/bus/ti99x/990_dk.cpp
@@ -709,19 +709,16 @@ READ8_MEMBER( fd800_legacy_device::cru_r )
{
int reply = 0;
- switch (offset)
+ offset &= 31;
+ if (offset < 16)
{
- case 0:
- case 1:
// receive buffer
- reply = m_recv_buf >> (offset*8);
- break;
-
- case 2:
- case 3:
+ reply = BIT(m_recv_buf, offset);
+ }
+ else
+ {
// status register
- reply = m_stat_reg >> ((offset-2)*8);
- break;
+ reply = BIT(m_stat_reg, offset - 16);
}
return reply;
diff --git a/src/devices/bus/ti99x/990_hd.cpp b/src/devices/bus/ti99x/990_hd.cpp
index 9bfef6e075b..c17f63b807e 100644
--- a/src/devices/bus/ti99x/990_hd.cpp
+++ b/src/devices/bus/ti99x/990_hd.cpp
@@ -463,7 +463,7 @@ void ti990_hdc_device::store_registers()
if (! (m_w[1] & w1_transfer_inhibit))
for (i=0; i<real_word_count; i++)
{
- machine().device("maincpu")->memory().space(AS_PROGRAM).write_word(dma_address, buffer[i]);
+ m_memory_space->write_word(dma_address, buffer[i]);
dma_address = (dma_address + 2) & 0x1ffffe;
}
@@ -618,7 +618,7 @@ void ti990_hdc_device::read_data()
if (! (m_w[1] & w1_transfer_inhibit))
for (i=0; i<bytes_read; i+=2)
{
- machine().device("maincpu")->memory().space(AS_PROGRAM).write_word(dma_address, (((int) buffer[i]) << 8) | buffer[i+1]);
+ m_memory_space->write_word(dma_address, (((int) buffer[i]) << 8) | buffer[i+1]);
dma_address = (dma_address + 2) & 0x1ffffe;
}
@@ -714,7 +714,7 @@ void ti990_hdc_device::write_data()
/* DMA */
for (i=0; (i<byte_count) && (i<m_d[dsk_sel].bytes_per_sector); i+=2)
{
- word = machine().device("maincpu")->memory().space(AS_PROGRAM).read_word(dma_address);
+ word = m_memory_space->read_word(dma_address);
buffer[i] = word >> 8;
buffer[i+1] = word & 0xff;
@@ -821,7 +821,7 @@ void ti990_hdc_device::unformatted_read()
if (! (m_w[1] & w1_transfer_inhibit))
for (i=0; i<real_word_count; i++)
{
- machine().device("maincpu")->memory().space(AS_PROGRAM).write_word(dma_address, buffer[i]);
+ m_memory_space->write_word(dma_address, buffer[i]);
dma_address = (dma_address + 2) & 0x1ffffe;
}
@@ -962,7 +962,9 @@ WRITE16_MEMBER(ti990_hdc_device::write)
DEFINE_DEVICE_TYPE(TI990_HDC, ti990_hdc_device, "ti990_hdc", "Generic TI-990 Hard Disk Controller")
ti990_hdc_device::ti990_hdc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, TI990_HDC, tag, owner, clock), m_interrupt_callback(*this)
+ : device_t(mconfig, TI990_HDC, tag, owner, clock)
+ , m_memory_space(*this, finder_base::DUMMY_TAG, -1)
+ , m_interrupt_callback(*this)
{
}
diff --git a/src/devices/bus/ti99x/990_hd.h b/src/devices/bus/ti99x/990_hd.h
index 47fe5d947f6..803e9ca7c79 100644
--- a/src/devices/bus/ti99x/990_hd.h
+++ b/src/devices/bus/ti99x/990_hd.h
@@ -23,6 +23,7 @@ public:
DECLARE_DEVICE_IMAGE_LOAD_MEMBER( ti990_hd );
DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( ti990_hd );
+ template <typename T> void set_memory_space(T &&tag, int spacenum) { m_memory_space.set_tag(std::forward<T>(tag), spacenum); }
auto int_cb() { return m_interrupt_callback.bind(); }
protected:
@@ -72,6 +73,8 @@ private:
uint16_t m_w[8];
+ required_address_space m_memory_space;
+
devcb_write_line m_interrupt_callback;
hd_unit_t m_d[MAX_DISK_UNIT];
diff --git a/src/devices/bus/ti99x/990_tap.cpp b/src/devices/bus/ti99x/990_tap.cpp
index db41dc94c2b..cafefbffda8 100644
--- a/src/devices/bus/ti99x/990_tap.cpp
+++ b/src/devices/bus/ti99x/990_tap.cpp
@@ -257,7 +257,7 @@ void tap_990_device::cmd_read_binary_forward()
/* DMA */
for (i=0; i<bytes_read; i+=2)
{
- machine().device("maincpu")->memory().space(AS_PROGRAM).write_word(dma_address, (((int) buffer[i]) << 8) | buffer[i+1]);
+ m_memory_space->write_word(dma_address, (((int) buffer[i]) << 8) | buffer[i+1]);
dma_address = (dma_address + 2) & 0x1ffffe;
}
@@ -956,14 +956,13 @@ void ti990_tape_image_device::call_unload()
tpc->set_tape(tape_get_id(), this, false, false, true);
}
-#define MCFG_TI990_TAPE_ADD(_tag) \
- MCFG_DEVICE_ADD((_tag), TI990_TAPE, 0)
-
DEFINE_DEVICE_TYPE(TI990_TAPE_CTRL, tap_990_device, "ti990_tap", "Generic TI-900 Tape Controller")
tap_990_device::tap_990_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, TI990_TAPE_CTRL, tag, owner, clock), m_int_line(*this)
+ : device_t(mconfig, TI990_TAPE_CTRL, tag, owner, clock)
+ , m_memory_space(*this, finder_base::DUMMY_TAG, -1)
+ , m_int_line(*this)
{
}
@@ -987,9 +986,10 @@ void tap_990_device::device_start()
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(tap_990_device::device_add_mconfig)
- MCFG_TI990_TAPE_ADD("tape0")
- MCFG_TI990_TAPE_ADD("tape1")
- MCFG_TI990_TAPE_ADD("tape2")
- MCFG_TI990_TAPE_ADD("tape3")
-MACHINE_CONFIG_END
+void tap_990_device::device_add_mconfig(machine_config &config)
+{
+ TI990_TAPE(config, "tape0", 0);
+ TI990_TAPE(config, "tape1", 0);
+ TI990_TAPE(config, "tape2", 0);
+ TI990_TAPE(config, "tape3", 0);
+}
diff --git a/src/devices/bus/ti99x/990_tap.h b/src/devices/bus/ti99x/990_tap.h
index a35a09b26a4..3be370a9f5a 100644
--- a/src/devices/bus/ti99x/990_tap.h
+++ b/src/devices/bus/ti99x/990_tap.h
@@ -26,6 +26,7 @@ public:
m_tape[id].wp = wp;
}
+ template <typename T> void set_memory_space(T &&tag, int spacenum) { m_memory_space.set_tag(std::forward<T>(tag), spacenum); }
auto int_cb() { return m_int_line.bind(); }
protected:
@@ -54,6 +55,8 @@ private:
void read_transport_status();
void execute_command();
+ required_address_space m_memory_space;
+
devcb_write_line m_int_line;
uint16_t m_w[8];
diff --git a/src/devices/bus/tiki100/8088.cpp b/src/devices/bus/tiki100/8088.cpp
index f3a0e5d0dfd..0a940fcbc2c 100644
--- a/src/devices/bus/tiki100/8088.cpp
+++ b/src/devices/bus/tiki100/8088.cpp
@@ -64,14 +64,15 @@ void tiki100_8088_device::i8088_io(address_map &map)
//-------------------------------------------------
-// MACHINE_CONFIG_START( tiki100_8088 )
+// device_add_mconfig()
//-------------------------------------------------
-MACHINE_CONFIG_START(tiki100_8088_device::device_add_mconfig)
- MCFG_DEVICE_ADD(I8088_TAG, I8088, 6000000)
- MCFG_DEVICE_PROGRAM_MAP(i8088_mem)
- MCFG_DEVICE_IO_MAP(i8088_io)
-MACHINE_CONFIG_END
+void tiki100_8088_device::device_add_mconfig(machine_config &config)
+{
+ I8088(config, m_maincpu, 6000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &tiki100_8088_device::i8088_mem);
+ m_maincpu->set_addrmap(AS_IO, &tiki100_8088_device::i8088_io);
+}
@@ -117,7 +118,7 @@ void tiki100_8088_device::device_reset()
// tiki100bus_iorq_r - I/O read
//-------------------------------------------------
-uint8_t tiki100_8088_device::iorq_r(address_space &space, offs_t offset, uint8_t data)
+uint8_t tiki100_8088_device::iorq_r(offs_t offset, uint8_t data)
{
if ((offset & 0xff) == 0x7f)
{
@@ -132,7 +133,7 @@ uint8_t tiki100_8088_device::iorq_r(address_space &space, offs_t offset, uint8_t
// tiki100bus_iorq_w - I/O write
//-------------------------------------------------
-void tiki100_8088_device::iorq_w(address_space &space, offs_t offset, uint8_t data)
+void tiki100_8088_device::iorq_w(offs_t offset, uint8_t data)
{
if ((offset & 0xff) == 0x7f)
{
diff --git a/src/devices/bus/tiki100/8088.h b/src/devices/bus/tiki100/8088.h
index c9fcca86807..2e4e6966172 100644
--- a/src/devices/bus/tiki100/8088.h
+++ b/src/devices/bus/tiki100/8088.h
@@ -37,8 +37,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_tiki100bus_card_interface overrides
- virtual uint8_t iorq_r(address_space &space, offs_t offset, uint8_t data) override;
- virtual void iorq_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t iorq_r(offs_t offset, uint8_t data) override;
+ virtual void iorq_w(offs_t offset, uint8_t data) override;
private:
required_device<i8088_cpu_device> m_maincpu;
diff --git a/src/devices/bus/tiki100/exp.cpp b/src/devices/bus/tiki100/exp.cpp
index 95aff70d106..2d3dfc22031 100644
--- a/src/devices/bus/tiki100/exp.cpp
+++ b/src/devices/bus/tiki100/exp.cpp
@@ -99,13 +99,13 @@ void tiki100_bus_device::add_card(device_tiki100bus_card_interface *card)
// mrq_r - memory read
//-------------------------------------------------
-uint8_t tiki100_bus_device::mrq_r(address_space &space, offs_t offset, uint8_t data, bool &mdis)
+uint8_t tiki100_bus_device::mrq_r(offs_t offset, uint8_t data, bool &mdis)
{
device_tiki100bus_card_interface *entry = m_device_list.first();
while (entry)
{
- data &= entry->mrq_r(space, offset, data, mdis);
+ data &= entry->mrq_r(offset, data, mdis);
entry = entry->next();
}
@@ -117,13 +117,13 @@ uint8_t tiki100_bus_device::mrq_r(address_space &space, offs_t offset, uint8_t d
// mrq_w - memory write
//-------------------------------------------------
-WRITE8_MEMBER( tiki100_bus_device::mrq_w )
+void tiki100_bus_device::mrq_w(offs_t offset, uint8_t data)
{
device_tiki100bus_card_interface *entry = m_device_list.first();
while (entry)
{
- entry->mrq_w(space, offset, data);
+ entry->mrq_w(offset, data);
entry = entry->next();
}
}
@@ -133,13 +133,13 @@ WRITE8_MEMBER( tiki100_bus_device::mrq_w )
// iorq_r - I/O read
//-------------------------------------------------
-uint8_t tiki100_bus_device::iorq_r(address_space &space, offs_t offset, uint8_t data)
+uint8_t tiki100_bus_device::iorq_r(offs_t offset, uint8_t data)
{
device_tiki100bus_card_interface *entry = m_device_list.first();
while (entry)
{
- data &= entry->iorq_r(space, offset, data);
+ data &= entry->iorq_r(offset, data);
entry = entry->next();
}
@@ -151,13 +151,13 @@ uint8_t tiki100_bus_device::iorq_r(address_space &space, offs_t offset, uint8_t
// iorq_w - I/O write
//-------------------------------------------------
-WRITE8_MEMBER( tiki100_bus_device::iorq_w )
+void tiki100_bus_device::iorq_w(offs_t offset, uint8_t data)
{
device_tiki100bus_card_interface *entry = m_device_list.first();
while (entry)
{
- entry->iorq_w(space, offset, data);
+ entry->iorq_w(offset, data);
entry = entry->next();
}
}
diff --git a/src/devices/bus/tiki100/exp.h b/src/devices/bus/tiki100/exp.h
index fb82a62fdce..9b0375daaa9 100644
--- a/src/devices/bus/tiki100/exp.h
+++ b/src/devices/bus/tiki100/exp.h
@@ -25,36 +25,6 @@
#define TIKI100_BUS_TAG "tiki100bus"
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_TIKI100_BUS_ADD() \
- MCFG_DEVICE_ADD(TIKI100_BUS_TAG, TIKI100_BUS, 0)
-
-#define MCFG_TIKI100_BUS_SLOT_ADD(_tag, _def_slot) \
- MCFG_DEVICE_ADD(_tag, TIKI100_BUS_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(tiki100_cards, _def_slot, false)
-
-
-#define MCFG_TIKI100_BUS_IRQ_CALLBACK(_write) \
- downcast<tiki100_bus_device &>(*device).set_irq_wr_callback(DEVCB_##_write);
-
-#define MCFG_TIKI100_BUS_NMI_CALLBACK(_write) \
- downcast<tiki100_bus_device &>(*device).set_nmi_wr_callback(DEVCB_##_write);
-
-#define MCFG_TIKI100_BUS_BUSRQ_CALLBACK(_write) \
- downcast<tiki100_bus_device &>(*device).set_busrq_wr_callback(DEVCB_##_write);
-
-#define MCFG_TIKI100_BUS_IN_MREQ_CALLBACK(_read) \
- downcast<tiki100_bus_device &>(*device).set_mrq_rd_callback(DEVCB_##_read);
-
-#define MCFG_TIKI100_BUS_OUT_MREQ_CALLBACK(_write) \
- downcast<tiki100_bus_device &>(*device).set_mrq_wr_callback(DEVCB_##_write);
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -76,12 +46,12 @@ public:
device_tiki100bus_card_interface *next() const { return m_next; }
// memory access
- virtual uint8_t mrq_r(address_space &space, offs_t offset, uint8_t data, bool &mdis) { mdis = 1; return data; }
- virtual void mrq_w(address_space &space, offs_t offset, uint8_t data) { }
+ virtual uint8_t mrq_r(offs_t offset, uint8_t data, bool &mdis) { mdis = 1; return data; }
+ virtual void mrq_w(offs_t offset, uint8_t data) { }
// I/O access
- virtual uint8_t iorq_r(address_space &space, offs_t offset, uint8_t data) { return data; }
- virtual void iorq_w(address_space &space, offs_t offset, uint8_t data) { }
+ virtual uint8_t iorq_r(offs_t offset, uint8_t data) { return data; }
+ virtual void iorq_w(offs_t offset, uint8_t data) { }
virtual void busak_w(int state) { m_busak = state; }
@@ -111,7 +81,17 @@ class tiki100_bus_slot_device : public device_t,
{
public:
// construction/destruction
- tiki100_bus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ tiki100_bus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts, const char *dflt)
+ : tiki100_bus_slot_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ tiki100_bus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
// device-level overrides
virtual void device_start() override;
@@ -142,20 +122,20 @@ public:
tiki100_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
~tiki100_bus_device() { m_device_list.detach_all(); }
- template <class Object> devcb_base &set_irq_wr_callback(Object &&cb) { return m_irq_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_nmi_wr_callback(Object &&cb) { return m_nmi_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_busrq_wr_callback(Object &&cb) { return m_busrq_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_mrq_rd_callback(Object &&cb) { return m_in_mrq_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_mrq_wr_callback(Object &&cb) { return m_out_mrq_cb.set_callback(std::forward<Object>(cb)); }
+ auto irq_wr_callback() { return m_irq_cb.bind(); }
+ auto nmi_wr_callback() { return m_nmi_cb.bind(); }
+ auto busrq_wr_callback() { return m_busrq_cb.bind(); }
+ auto mrq_rd_callback() { return m_in_mrq_cb.bind(); }
+ auto mrq_wr_callback() { return m_out_mrq_cb.bind(); }
void add_card(device_tiki100bus_card_interface *card);
// computer interface
- uint8_t mrq_r(address_space &space, offs_t offset, uint8_t data, bool &mdis);
- DECLARE_WRITE8_MEMBER( mrq_w );
+ uint8_t mrq_r(offs_t offset, uint8_t data, bool &mdis);
+ void mrq_w(offs_t offset, uint8_t data);
- uint8_t iorq_r(address_space &space, offs_t offset, uint8_t data);
- DECLARE_WRITE8_MEMBER( iorq_w );
+ uint8_t iorq_r(offs_t offset, uint8_t data);
+ void iorq_w(offs_t offset, uint8_t data);
DECLARE_WRITE_LINE_MEMBER( busak_w );
@@ -163,8 +143,8 @@ public:
DECLARE_WRITE_LINE_MEMBER( irq_w ) { m_irq_cb(state); }
DECLARE_WRITE_LINE_MEMBER( nmi_w ) { m_nmi_cb(state); }
DECLARE_WRITE_LINE_MEMBER( busrq_w ) { m_busrq_cb(state); }
- DECLARE_READ8_MEMBER( exin_mrq_r ) { return m_in_mrq_cb(offset); }
- DECLARE_WRITE8_MEMBER( exin_mrq_w ) { m_out_mrq_cb(offset, data); }
+ uint8_t exin_mrq_r(offs_t offset) { return m_in_mrq_cb(offset); }
+ void exin_mrq_w(offs_t offset, uint8_t data) { m_out_mrq_cb(offset, data); }
protected:
// device-level overrides
diff --git a/src/devices/bus/tiki100/hdc.cpp b/src/devices/bus/tiki100/hdc.cpp
index 9a997119935..a351d83daca 100644
--- a/src/devices/bus/tiki100/hdc.cpp
+++ b/src/devices/bus/tiki100/hdc.cpp
@@ -85,11 +85,11 @@ void tiki100_hdc_device::device_reset()
// tiki100bus_iorq_r - I/O read
//-------------------------------------------------
-uint8_t tiki100_hdc_device::iorq_r(address_space &space, offs_t offset, uint8_t data)
+uint8_t tiki100_hdc_device::iorq_r(offs_t offset, uint8_t data)
{
if ((offset & 0xf8) == 0x20)
{
- data = m_hdc->read(space, offset & 0x07);
+ data = m_hdc->read(offset & 0x07);
}
return data;
@@ -100,10 +100,10 @@ uint8_t tiki100_hdc_device::iorq_r(address_space &space, offs_t offset, uint8_t
// tiki100bus_iorq_w - I/O write
//-------------------------------------------------
-void tiki100_hdc_device::iorq_w(address_space &space, offs_t offset, uint8_t data)
+void tiki100_hdc_device::iorq_w(offs_t offset, uint8_t data)
{
if ((offset & 0xf8) == 0x20)
{
- m_hdc->write(space, offset, data);
+ m_hdc->write(offset, data);
}
}
diff --git a/src/devices/bus/tiki100/hdc.h b/src/devices/bus/tiki100/hdc.h
index 1c0447acff5..d38927ff004 100644
--- a/src/devices/bus/tiki100/hdc.h
+++ b/src/devices/bus/tiki100/hdc.h
@@ -36,8 +36,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_tiki100bus_card_interface overrides
- virtual uint8_t iorq_r(address_space &space, offs_t offset, uint8_t data) override;
- virtual void iorq_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t iorq_r(offs_t offset, uint8_t data) override;
+ virtual void iorq_w(offs_t offset, uint8_t data) override;
private:
required_device<wd2010_device> m_hdc;
diff --git a/src/devices/bus/tmc600/euro.h b/src/devices/bus/tmc600/euro.h
index 7fe8c3c0ff6..51a4e435f2f 100644
--- a/src/devices/bus/tmc600/euro.h
+++ b/src/devices/bus/tmc600/euro.h
@@ -56,17 +56,6 @@
#define TMC600_EURO_BUS_TAG "bus"
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_TMC600_EURO_BUS_SLOT_ADD(_tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, TMC600_EURO_BUS_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -96,7 +85,17 @@ class tmc600_euro_bus_slot_t : public device_t,
{
public:
// construction/destruction
- tmc600_euro_bus_slot_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ tmc600_euro_bus_slot_t(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts, const char *dflt)
+ : tmc600_euro_bus_slot_t(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ tmc600_euro_bus_slot_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
protected:
// device-level overrides
diff --git a/src/devices/bus/tvc/tvc.h b/src/devices/bus/tvc/tvc.h
index 584e121f428..09ba7b35ffd 100644
--- a/src/devices/bus/tvc/tvc.h
+++ b/src/devices/bus/tvc/tvc.h
@@ -91,11 +91,21 @@ class tvcexp_slot_device : public device_t,
{
public:
// construction/destruction
- tvcexp_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ tvcexp_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts, const char *dflt)
+ : tvcexp_slot_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ tvcexp_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
virtual ~tvcexp_slot_device();
- template <class Object> devcb_base &set_out_irq_callback(Object &&cb) { return m_out_irq_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_nmi_callback(Object &&cb) { return m_out_nmi_cb.set_callback(std::forward<Object>(cb)); }
+ auto out_irq_callback() { return m_out_irq_cb.bind(); }
+ auto out_nmi_callback() { return m_out_nmi_cb.bind(); }
// reading and writing
virtual uint8_t id_r();
@@ -120,14 +130,4 @@ protected:
DECLARE_DEVICE_TYPE(TVCEXP_SLOT, tvcexp_slot_device)
-/***************************************************************************
- DEVICE CONFIGURATION MACROS
-***************************************************************************/
-
-#define MCFG_TVCEXP_SLOT_OUT_IRQ_CB(_devcb) \
- downcast<tvcexp_slot_device &>(*device).set_out_irq_callback(DEVCB_##_devcb);
-
-#define MCFG_TVCEXP_SLOT_OUT_NMI_CB(_devcb) \
- downcast<tvcexp_slot_device &>(*device).set_out_nmi_callback(DEVCB_##_devcb);
-
#endif // MAME_BUS_TVC_TVC_H
diff --git a/src/devices/bus/uts_kbd/400kbd.cpp b/src/devices/bus/uts_kbd/400kbd.cpp
new file mode 100644
index 00000000000..38d35fda607
--- /dev/null
+++ b/src/devices/bus/uts_kbd/400kbd.cpp
@@ -0,0 +1,275 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ Sperry Univac UTS 400-Format Keyboard
+
+ This was called the "400-Mode Keyboard" in the 1981 UTS 20 Single
+ Station Operator's Guide. The 1983 System Description also describes a
+ Katakana/English Keyboard with a similar but not identical layout.
+
+ Of this keyboard's 113 keys, several have no function on the UTS 20,
+ though all but the modifier keys produce codes. It is totally
+ incompatible with the UTS 10, which fails to properly recognize codes
+ corresponding to the top two rows of the alphanumeric layout.
+
+ The presently dumped unit, a 1984 Keytronic product, was obtained with
+ many extra functions labeled (and some incompletely erased) on the tops
+ and sides of the keys, and also identifies the punctuation keys in a
+ way that disagrees with emulated behavior of the UTS 20. The port names
+ are therefore mostly based on those described in UTS 20 manuals, except
+ for two keys which are apparently normally blank.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "bus/uts_kbd/400kbd.h"
+
+#include "cpu/mcs48/mcs48.h"
+
+
+DEFINE_DEVICE_TYPE(UTS_400_KEYBOARD, uts_400_keyboard_device, "uts_400kbd", "UTS 400-Format Keyboard (F3621-04-000)")
+
+uts_400_keyboard_device::uts_400_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, UTS_400_KEYBOARD, tag, owner, clock)
+ , device_uts_keyboard_interface(mconfig, *this)
+ , m_keys(*this, "KEY%X", 0U)
+ , m_shift_led(*this, "shift_led")
+ , m_p2_output(0xff)
+ , m_input_select(0)
+ , m_ready_line(true)
+ , m_prog_line(true)
+{
+}
+
+void uts_400_keyboard_device::device_start()
+{
+ m_shift_led.resolve();
+
+ save_item(NAME(m_p2_output));
+ save_item(NAME(m_input_select));
+ save_item(NAME(m_ready_line));
+ save_item(NAME(m_prog_line));
+}
+
+WRITE_LINE_MEMBER(uts_400_keyboard_device::ready_w)
+{
+ m_ready_line = bool(state);
+}
+
+u8 uts_400_keyboard_device::bus_r()
+{
+ return m_keys[m_input_select]->read();
+}
+
+void uts_400_keyboard_device::p1_w(u8 data)
+{
+ write_rxd(BIT(data, 1));
+ m_shift_led = BIT(data, 4);
+
+ // P10 = hysteresis control?
+ // P12 = duplicate of P11?
+}
+
+void uts_400_keyboard_device::p2_w(u8 data)
+{
+ // P22 = ? (lowered and strobed with RD after key is transmitted)
+ m_p2_output = data;
+}
+
+READ_LINE_MEMBER(uts_400_keyboard_device::t1_r)
+{
+ return m_ready_line;
+}
+
+WRITE_LINE_MEMBER(uts_400_keyboard_device::prog_w)
+{
+ if (!m_prog_line && state)
+ m_input_select = m_p2_output & 0x0f;
+
+ m_prog_line = bool(state);
+}
+
+static INPUT_PORTS_START(uts_400kbd)
+ PORT_START("KEY0")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right Shift") PORT_CODE(KEYCODE_RSHIFT)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left Shift") PORT_CHAR(UCHAR_SHIFT_1) PORT_CODE(KEYCODE_LSHIFT)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift Lock") PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) PORT_CODE(KEYCODE_CAPSLOCK)
+ PORT_BIT(0x78, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Upper Function") PORT_CHAR(UCHAR_SHIFT_2) PORT_CODE(KEYCODE_LCONTROL)
+
+ PORT_START("KEY1")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Space")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(';') PORT_CHAR('+') PORT_CODE(KEYCODE_COLON)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(':') PORT_CHAR('*') PORT_CODE(KEYCODE_QUOTE)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('o') PORT_CHAR('O') PORT_CODE(KEYCODE_O)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('p') PORT_CHAR('P') PORT_CODE(KEYCODE_P)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('9') PORT_CHAR(')') PORT_CODE(KEYCODE_9)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('0') PORT_CODE(KEYCODE_0)
+
+ PORT_START("KEY2")
+ PORT_BIT(0x03, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(']') PORT_CHAR('}') PORT_CODE(KEYCODE_CLOSEBRACE)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Return") PORT_CHAR(0x0d) PORT_CODE(KEYCODE_ENTER)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('`') PORT_CHAR('@') PORT_CODE(KEYCODE_EQUALS)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('[') PORT_CHAR('{') PORT_CODE(KEYCODE_OPENBRACE)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('-') PORT_CHAR('=') PORT_CODE(KEYCODE_MINUS)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('^') PORT_CHAR('~') PORT_CODE(KEYCODE_TILDE)
+
+ PORT_START("KEY3")
+ PORT_BIT(0x0f, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('_') PORT_CODE(KEYCODE_RCONTROL)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD)) PORT_CODE(KEYCODE_7_PAD)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('\\') PORT_CHAR('|') PORT_CODE(KEYCODE_BACKSLASH)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right Back Space") PORT_CHAR(0x08) PORT_CODE(KEYCODE_BACKSPACE)
+
+ PORT_START("KEY4")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD)) PORT_CODE(KEYCODE_1_PAD)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD)) PORT_CODE(KEYCODE_2_PAD)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD)) PORT_CODE(KEYCODE_4_PAD)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD)) PORT_CODE(KEYCODE_5_PAD)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) PORT_CODE(KEYCODE_8_PAD)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD)) PORT_CODE(KEYCODE_9_PAD)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD)) PORT_CODE(KEYCODE_PLUS_PAD)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) PORT_CODE(KEYCODE_MINUS_PAD)
+
+ PORT_START("KEY5")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD)) PORT_CODE(KEYCODE_3_PAD)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Tab Back") PORT_CODE(KEYCODE_LALT)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD)) PORT_CODE(KEYCODE_6_PAD)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Space Bar") PORT_CHAR(' ') PORT_CODE(KEYCODE_SPACE)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Tab Fwd") PORT_CHAR(0x09) PORT_CODE(KEYCODE_RALT)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD)) PORT_CODE(KEYCODE_0_PAD)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD)) PORT_CODE(KEYCODE_DEL_PAD)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Print")
+
+ PORT_START("KEY6")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Xmit")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keyboard Unlock")
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Control Page") PORT_CODE(KEYCODE_F10)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Xfer")
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Msg Wait FCC Generate") PORT_CODE(KEYCODE_F9)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Status FCC Reenable") PORT_CODE(KEYCODE_F8)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Search FCC Clear") PORT_CODE(KEYCODE_F7)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Rep Adr FCC Locate") PORT_CODE(KEYCODE_F6)
+
+ PORT_START("KEY7")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("(Help)")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F13 F22")
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F11 F20")
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F12 F21")
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F10 F19")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F9 F18")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F8 F17")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F7 F16")
+
+ PORT_START("KEY8")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F6 F15")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F5 F14")
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("(Xchg " UTF8_DOWN " Xchg " UTF8_UP ")")
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Disp 1-2")
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Hang Up")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ws Mode Sys Mode")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Insert in Dis Line Dup")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Delete in Dis Erase Dis")
+
+ PORT_START("KEY9")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("BOB Clr Chg") PORT_CODE(KEYCODE_F5)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("FF F4") PORT_CODE(KEYCODE_F4)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("LF F3") PORT_CODE(KEYCODE_F3)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Tab Set F2") PORT_CODE(KEYCODE_F2)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Erase to EOF F1") PORT_CODE(KEYCODE_F1)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Erase to EOL Erase to EOD")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Insert in Line Insert Line") PORT_CHAR(UCHAR_MAMEKEY(INSERT))
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Delete in Line Delete Line") PORT_CHAR(UCHAR_MAMEKEY(DEL))
+
+ PORT_START("KEYA")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('z') PORT_CHAR('Z') PORT_CODE(KEYCODE_Z)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('x') PORT_CHAR('X') PORT_CODE(KEYCODE_X)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Cursor to Home") PORT_CHAR(UCHAR_MAMEKEY(HOME)) PORT_CODE(KEYCODE_HOME)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('a') PORT_CHAR('A') PORT_CODE(KEYCODE_A)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("(Cursor \xe2\x86\x99)") // ↙
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left Back Space") PORT_CODE(KEYCODE_TAB)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("SOE \xe2\x96\xb6") // ▶
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Erase Char") PORT_CODE(KEYCODE_ESC)
+
+ PORT_START("KEYB")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('c') PORT_CHAR('C') PORT_CODE(KEYCODE_C)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('v') PORT_CHAR('V') PORT_CODE(KEYCODE_V)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('s') PORT_CHAR('S') PORT_CODE(KEYCODE_S)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('d') PORT_CHAR('D') PORT_CODE(KEYCODE_D)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('q') PORT_CHAR('Q') PORT_CODE(KEYCODE_Q)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('w') PORT_CHAR('W') PORT_CODE(KEYCODE_W)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('1') PORT_CHAR('!') PORT_CODE(KEYCODE_1)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('2') PORT_CHAR('"') PORT_CODE(KEYCODE_2)
+
+ PORT_START("KEYC")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('b') PORT_CHAR('B') PORT_CODE(KEYCODE_B)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('n') PORT_CHAR('N') PORT_CODE(KEYCODE_N)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('f') PORT_CHAR('F') PORT_CODE(KEYCODE_F)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('g') PORT_CHAR('G') PORT_CODE(KEYCODE_G)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('e') PORT_CHAR('E') PORT_CODE(KEYCODE_E)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('r') PORT_CHAR('R') PORT_CODE(KEYCODE_R)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('3') PORT_CHAR('#') PORT_CODE(KEYCODE_3)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('4') PORT_CHAR('$') PORT_CODE(KEYCODE_4)
+
+ PORT_START("KEYD")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('m') PORT_CHAR('M') PORT_CODE(KEYCODE_M)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(',') PORT_CHAR('<') PORT_CODE(KEYCODE_COMMA)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('h') PORT_CHAR('H') PORT_CODE(KEYCODE_H)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('j') PORT_CHAR('J') PORT_CODE(KEYCODE_J)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('t') PORT_CHAR('T') PORT_CODE(KEYCODE_T)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('y') PORT_CHAR('Y') PORT_CODE(KEYCODE_Y)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('5') PORT_CHAR('%') PORT_CODE(KEYCODE_5)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('6') PORT_CHAR('&') PORT_CODE(KEYCODE_6)
+
+ PORT_START("KEYE")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('.') PORT_CHAR('>') PORT_CODE(KEYCODE_STOP)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('/') PORT_CHAR('?') PORT_CODE(KEYCODE_SLASH)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('k') PORT_CHAR('K') PORT_CODE(KEYCODE_K)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('l') PORT_CHAR('L') PORT_CODE(KEYCODE_L)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('u') PORT_CHAR('U') PORT_CODE(KEYCODE_U)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('i') PORT_CHAR('I') PORT_CODE(KEYCODE_I)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('7') PORT_CHAR('\'') PORT_CODE(KEYCODE_7)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('8') PORT_CHAR('(') PORT_CODE(KEYCODE_8)
+
+ PORT_START("KEYF")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_CODE(KEYCODE_RIGHT)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_CODE(KEYCODE_LEFT)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_CODE(KEYCODE_DOWN)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(UP)) PORT_CODE(KEYCODE_UP)
+ PORT_BIT(0xf0, IP_ACTIVE_LOW, IPT_UNUSED)
+INPUT_PORTS_END
+
+ioport_constructor uts_400_keyboard_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME(uts_400kbd);
+}
+
+void uts_400_keyboard_device::ext_map(address_map &map)
+{
+ map(0x00, 0xff).noprw(); // read as above; written only at reset time
+}
+
+void uts_400_keyboard_device::device_add_mconfig(machine_config &config)
+{
+ mcs48_cpu_device &kbdc(I8048(config, "kbdc", 4.608_MHz_XTAL)); // SCN8048A
+ // XTAL is marked "4608 / 300-007 / KSS39"
+ kbdc.set_addrmap(AS_IO, &uts_400_keyboard_device::ext_map);
+ kbdc.bus_in_cb().set(FUNC(uts_400_keyboard_device::bus_r));
+ kbdc.p1_out_cb().set(FUNC(uts_400_keyboard_device::p1_w));
+ kbdc.p2_out_cb().set(FUNC(uts_400_keyboard_device::p2_w));
+ kbdc.t1_in_cb().set(FUNC(uts_400_keyboard_device::t1_r));
+ kbdc.prog_out_cb().set(FUNC(uts_400_keyboard_device::prog_w));
+}
+
+ROM_START(uts_400kbd)
+ ROM_REGION(0x400, "kbdc", 0)
+ ROM_LOAD("sperry_20-8048-118.bin", 0x000, 0x400, CRC(ae54503e) SHA1(84081e108aa5801047851b435fd4b043922b2f6e))
+ROM_END
+
+const tiny_rom_entry *uts_400_keyboard_device::device_rom_region() const
+{
+ return ROM_NAME(uts_400kbd);
+}
diff --git a/src/devices/bus/uts_kbd/400kbd.h b/src/devices/bus/uts_kbd/400kbd.h
new file mode 100644
index 00000000000..8e73bc10dbd
--- /dev/null
+++ b/src/devices/bus/uts_kbd/400kbd.h
@@ -0,0 +1,44 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+
+#ifndef MAME_BUS_UTS_KBD_400KBD_H
+#define MAME_BUS_UTS_KBD_400KBD_H
+
+#pragma once
+
+#include "bus/uts_kbd/uts_kbd.h"
+
+class uts_400_keyboard_device : public device_t, public device_uts_keyboard_interface
+{
+public:
+ uts_400_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ virtual DECLARE_WRITE_LINE_MEMBER(ready_w) override;
+
+ virtual ioport_constructor device_input_ports() const override;
+ virtual void device_start() override;
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+private:
+ u8 bus_r();
+ void p1_w(u8 data);
+ void p2_w(u8 data);
+ DECLARE_READ_LINE_MEMBER(t1_r);
+ DECLARE_WRITE_LINE_MEMBER(prog_w);
+
+ void ext_map(address_map &map);
+
+ required_ioport_array<16> m_keys;
+ output_finder<> m_shift_led;
+
+ u8 m_p2_output;
+ u8 m_input_select;
+ bool m_ready_line;
+ bool m_prog_line;
+};
+
+DECLARE_DEVICE_TYPE(UTS_400_KEYBOARD, uts_400_keyboard_device)
+
+#endif // MAME_BUS_UTS_KBD_400KBD_H
diff --git a/src/devices/bus/uts_kbd/extw.cpp b/src/devices/bus/uts_kbd/extw.cpp
new file mode 100644
index 00000000000..950d8b244f2
--- /dev/null
+++ b/src/devices/bus/uts_kbd/extw.cpp
@@ -0,0 +1,290 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ Sperry Univac UTS Expanded Typewriter Keyboard
+
+ This is the default keyboard for the UTS 10 and UTS 20, though the
+ latter's manual claims that "SYS MODE" and "WS MODE" have no function.
+
+ User beware: the - and / keys are swapped from their respective
+ positions on most keyboards.
+
+ The LED is located on the LOCK key, but also responds to either shift
+ key being pressed (which also releases the shift lock).
+
+ The keyboard controller is a custom 48-pin DIP marked:
+
+ P60515
+ L7340660
+ 20-90039-000
+ © INTEL '84
+
+ This is likely a hybrid ASIC integrating a high-speed 8035-like core
+ with at least one of the custom drivers/receivers present in other
+ Keytronic keyboards.
+
+ There seems to be a slight timing error in the transmit routine which
+ causes data bits to be shifted out one 64th of a bit time too quickly.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "bus/uts_kbd/extw.h"
+
+#include "cpu/mcs48/mcs48.h"
+
+
+DEFINE_DEVICE_TYPE(UTS_EXTW_KEYBOARD, uts_extw_keyboard_device, "uts_extw", "UTS Expanded Typewriter Keyboard (F4725-25)")
+
+uts_extw_keyboard_device::uts_extw_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, UTS_EXTW_KEYBOARD, tag, owner, clock)
+ , device_uts_keyboard_interface(mconfig, *this)
+ , m_keys(*this, "KEY%X", 0U)
+ , m_shift_led(*this, "shift_led")
+ , m_p1_output(0xff)
+ , m_p2_output(0xff)
+ , m_shift_register(0xff)
+ , m_ready_line(true)
+ , m_prog_line(true)
+{
+}
+
+void uts_extw_keyboard_device::device_start()
+{
+ m_shift_led.resolve();
+
+ save_item(NAME(m_p1_output));
+ save_item(NAME(m_p2_output));
+ save_item(NAME(m_shift_register));
+ save_item(NAME(m_ready_line));
+ save_item(NAME(m_prog_line));
+}
+
+WRITE_LINE_MEMBER(uts_extw_keyboard_device::ready_w)
+{
+ m_ready_line = bool(state);
+}
+
+u8 uts_extw_keyboard_device::p1_r()
+{
+ return m_ready_line ? 0xf7 : 0xff;
+}
+
+void uts_extw_keyboard_device::p1_w(u8 data)
+{
+ write_rxd(!BIT(data, 2));
+
+ if (!BIT(m_p1_output, 0) && BIT(data, 0))
+ m_shift_register = (m_shift_register >> 1) | (m_shift_register & 0x01) << 7;
+
+ // P11 = hysteresis control?
+
+ m_p1_output = data;
+}
+
+void uts_extw_keyboard_device::p2_w(u8 data)
+{
+ m_shift_led = !BIT(data, 4);
+ m_p2_output = data;
+}
+
+void uts_extw_keyboard_device::t0_clock(u32 clk)
+{
+}
+
+READ_LINE_MEMBER(uts_extw_keyboard_device::t1_r)
+{
+ return BIT(m_shift_register, 7);
+}
+
+WRITE_LINE_MEMBER(uts_extw_keyboard_device::prog_w)
+{
+ if (!m_prog_line && state)
+ {
+ u8 n = m_p2_output & 0x0f;
+ m_shift_register = m_keys[n]->read();
+ }
+
+ m_prog_line = bool(state);
+}
+
+static INPUT_PORTS_START(uts_extw)
+ PORT_START("KEY0")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E F15") PORT_CHAR('e') PORT_CHAR('E') PORT_CHAR(UCHAR_MAMEKEY(F15)) PORT_CODE(KEYCODE_E)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('3') PORT_CHAR('#') PORT_CHAR(UCHAR_MAMEKEY(F3)) PORT_CODE(KEYCODE_3)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('2') PORT_CHAR('"') PORT_CHAR(UCHAR_MAMEKEY(F2)) PORT_CODE(KEYCODE_2)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W F14") PORT_CHAR('w') PORT_CHAR('W') PORT_CHAR(UCHAR_MAMEKEY(F14)) PORT_CODE(KEYCODE_W)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S") PORT_CHAR('s') PORT_CHAR('S') PORT_CODE(KEYCODE_S)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A") PORT_CHAR('a') PORT_CHAR('A') PORT_CODE(KEYCODE_A)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("X") PORT_CHAR('x') PORT_CHAR('X') PORT_CODE(KEYCODE_X)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z") PORT_CHAR('z') PORT_CHAR('Z') PORT_CODE(KEYCODE_Z)
+
+ PORT_START("KEY1")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Tab Back") PORT_CODE(KEYCODE_RCONTROL) // ⇤
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(0x08) PORT_CODE(KEYCODE_BACKSPACE) // doesn't work on uts10?
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('^') PORT_CHAR('~') PORT_CHAR(UCHAR_MAMEKEY(F12)) PORT_CODE(KEYCODE_EQUALS)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("[ { Ws Mode") PORT_CHAR('[') PORT_CHAR('{') PORT_CODE(KEYCODE_CLOSEBRACE)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(']') PORT_CHAR('}') PORT_CODE(KEYCODE_BACKSLASH) // between : and return key
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(':') PORT_CHAR('*') PORT_CODE(KEYCODE_QUOTE)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(0x0d) PORT_CODE(KEYCODE_ENTER) // ↵
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right Shift") PORT_CODE(KEYCODE_RSHIFT)
+
+ PORT_START("KEY2")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("@ \\ Sys Mode") PORT_CHAR('@') PORT_CHAR('\\') PORT_CODE(KEYCODE_OPENBRACE)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('/') PORT_CHAR('?') PORT_CHAR(UCHAR_MAMEKEY(F11)) PORT_CODE(KEYCODE_MINUS)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('0') PORT_CHAR('=') PORT_CHAR(UCHAR_MAMEKEY(F10)) PORT_CODE(KEYCODE_0)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("P F22") PORT_CHAR('p') PORT_CHAR('P') PORT_CODE(KEYCODE_P)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(';') PORT_CHAR('+') PORT_CODE(KEYCODE_COLON)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(", ,") PORT_CHAR(',') PORT_CODE(KEYCODE_COMMA)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('-') PORT_CHAR('_') PORT_CODE(KEYCODE_SLASH)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(". .") PORT_CHAR('.') PORT_CODE(KEYCODE_STOP)
+
+ PORT_START("KEY3")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U F19") PORT_CHAR('u') PORT_CHAR('U') PORT_CHAR(UCHAR_MAMEKEY(F19)) PORT_CODE(KEYCODE_U)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('7') PORT_CHAR('\'') PORT_CHAR(UCHAR_MAMEKEY(F7)) PORT_CODE(KEYCODE_7)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('6') PORT_CHAR('&') PORT_CHAR(UCHAR_MAMEKEY(F6)) PORT_CODE(KEYCODE_6)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y F18") PORT_CHAR('y') PORT_CHAR('Y') PORT_CHAR(UCHAR_MAMEKEY(F18)) PORT_CODE(KEYCODE_Y)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H") PORT_CHAR('h') PORT_CHAR('H') PORT_CODE(KEYCODE_H)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G") PORT_CHAR('g') PORT_CHAR('G') PORT_CODE(KEYCODE_G)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("N") PORT_CHAR('n') PORT_CHAR('N') PORT_CODE(KEYCODE_N)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B") PORT_CHAR('b') PORT_CHAR('B') PORT_CODE(KEYCODE_B)
+
+ PORT_START("KEY4")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("SOE \xe2\x96\xb6 Tab Set") PORT_CODE(KEYCODE_LALT) // ▶
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Insert in Line Insert in Disp") PORT_CHAR(UCHAR_MAMEKEY(INSERT)) PORT_CODE(KEYCODE_INSERT)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Delete in Line Delete in Disp") PORT_CHAR(UCHAR_MAMEKEY(DEL)) PORT_CODE(KEYCODE_DEL)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Cursor to Home") PORT_CHAR(UCHAR_MAMEKEY(HOME)) PORT_CODE(KEYCODE_HOME) // ↖
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(UP)) PORT_CODE(KEYCODE_UP)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_CODE(KEYCODE_LEFT)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_CODE(KEYCODE_RIGHT)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_CODE(KEYCODE_DOWN)
+
+ PORT_START("KEY5")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD)) PORT_CODE(KEYCODE_5_PAD)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD)) PORT_CODE(KEYCODE_4_PAD)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD)) PORT_CODE(KEYCODE_7_PAD)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD)) PORT_CODE(KEYCODE_1_PAD)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD)) PORT_CODE(KEYCODE_2_PAD)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) PORT_CODE(KEYCODE_8_PAD)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD)) PORT_CODE(KEYCODE_0_PAD)
+
+ PORT_START("KEY6")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD)) PORT_CODE(KEYCODE_PLUS_PAD)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD)) PORT_CODE(KEYCODE_6_PAD)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD)) PORT_CODE(KEYCODE_9_PAD)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD)) PORT_CODE(KEYCODE_3_PAD)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) PORT_CODE(KEYCODE_MINUS_PAD)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD)) PORT_CODE(KEYCODE_DEL_PAD)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(TAB_PAD)) PORT_CODE(KEYCODE_ENTER_PAD) // ⇥
+
+ PORT_START("KEY7")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q F13") PORT_CHAR('q') PORT_CHAR('Q') PORT_CHAR(UCHAR_MAMEKEY(F13)) PORT_CODE(KEYCODE_Q)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('1') PORT_CHAR('!') PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_CODE(KEYCODE_1)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('|') PORT_CHAR('`') PORT_CODE(KEYCODE_TILDE)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Tab Forward") PORT_CHAR(0x09) PORT_CODE(KEYCODE_TAB) // ⇥
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Fctn") PORT_CHAR(UCHAR_SHIFT_2) PORT_CODE(KEYCODE_LCONTROL)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Lock") PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) PORT_CODE(KEYCODE_CAPSLOCK)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('<') PORT_CHAR('>') PORT_CODE(KEYCODE_BACKSLASH2)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left Shift") PORT_CHAR(UCHAR_SHIFT_1) PORT_CODE(KEYCODE_LSHIFT)
+
+ PORT_START("KEY8")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("FF Disp 1-2") PORT_CODE(KEYCODE_F3)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Clr Chg") PORT_CODE(KEYCODE_F4)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("FCC Locate") PORT_CODE(KEYCODE_F5)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("LF Hang Up") PORT_CODE(KEYCODE_F2)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Line Dup") PORT_CODE(KEYCODE_F1)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Delete Line Insert Line") PORT_CODE(KEYCODE_ESC)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Erase EOL Erase EOD") PORT_CODE(KEYCODE_END)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Erase to EOF Erase Display") PORT_CODE(KEYCODE_PGDN)
+
+ PORT_START("KEY9")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T F17") PORT_CHAR('t') PORT_CHAR('T') PORT_CHAR(UCHAR_MAMEKEY(F17)) PORT_CODE(KEYCODE_T)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('5') PORT_CHAR('%') PORT_CHAR(UCHAR_MAMEKEY(F5)) PORT_CODE(KEYCODE_5)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('4') PORT_CHAR('$') PORT_CHAR(UCHAR_MAMEKEY(F4)) PORT_CODE(KEYCODE_4)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R F16") PORT_CHAR('r') PORT_CHAR('R') PORT_CHAR(UCHAR_MAMEKEY(F16)) PORT_CODE(KEYCODE_R)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F") PORT_CHAR('f') PORT_CHAR('F') PORT_CODE(KEYCODE_F)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D") PORT_CHAR('d') PORT_CHAR('D') PORT_CODE(KEYCODE_D)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V") PORT_CHAR('v') PORT_CHAR('V') PORT_CODE(KEYCODE_V)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C") PORT_CHAR('c') PORT_CHAR('C') PORT_CODE(KEYCODE_C)
+
+ PORT_START("KEYA")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Msg Wait Unlock") PORT_CODE(KEYCODE_F11)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("FCC Clear") PORT_CODE(KEYCODE_F6)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Xmit") PORT_CODE(KEYCODE_F12)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Print Ctl Page") PORT_CODE(KEYCODE_F10)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("FCC Gen") PORT_CODE(KEYCODE_F8)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("FCC Enable") PORT_CODE(KEYCODE_F7)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Xfer Char Erase") PORT_CODE(KEYCODE_F9)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(' ') PORT_CODE(KEYCODE_SPACE)
+
+ PORT_START("KEYB")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O F21") PORT_CHAR('o') PORT_CHAR('O') PORT_CODE(KEYCODE_O)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('9') PORT_CHAR(')') PORT_CHAR(UCHAR_MAMEKEY(F9)) PORT_CODE(KEYCODE_9)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('8') PORT_CHAR('(') PORT_CHAR(UCHAR_MAMEKEY(F8)) PORT_CODE(KEYCODE_8)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I F20") PORT_CHAR('i') PORT_CHAR('I') PORT_CHAR(UCHAR_MAMEKEY(F20)) PORT_CODE(KEYCODE_I)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("K") PORT_CHAR('k') PORT_CHAR('K') PORT_CODE(KEYCODE_K)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L") PORT_CHAR('l') PORT_CHAR('L') PORT_CODE(KEYCODE_L)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("J") PORT_CHAR('j') PORT_CHAR('J') PORT_CODE(KEYCODE_J)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M") PORT_CHAR('m') PORT_CHAR('M') PORT_CODE(KEYCODE_M)
+
+ PORT_START("KEYC")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("KEYD")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("KEYE")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("KEYF")
+ PORT_DIPNAME(0x0f, 0x0f, "National Layout") // stored as a 4-bit value even though only 7 of the first 8 are valid
+ PORT_DIPSETTING(0x0f, "USA/UK English")
+ PORT_DIPSETTING(0x0d, "German (QWERTZ)")
+ PORT_DIPSETTING(0x0c, "European A")
+ PORT_DIPSETTING(0x0b, "European B") // Swedish/Finnish?
+ PORT_DIPSETTING(0x0a, "European C")
+ PORT_DIPSETTING(0x09, "European D") // Spanish?
+ PORT_DIPSETTING(0x08, "European E")
+ PORT_BIT(0xf0, IP_ACTIVE_LOW, IPT_UNUSED)
+INPUT_PORTS_END
+
+ioport_constructor uts_extw_keyboard_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME(uts_extw);
+}
+
+void uts_extw_keyboard_device::prog_map(address_map &map)
+{
+ map(0x000, 0x7ff).rom().region("kbdc", 0);
+}
+
+void uts_extw_keyboard_device::ext_map(address_map &map)
+{
+ map(0x00, 0xff).nopr(); // read only once, at reset time
+}
+
+void uts_extw_keyboard_device::device_add_mconfig(machine_config &config)
+{
+ mcs48_cpu_device &kbdc(I8035(config, "kbdc", 9.216_MHz_XTAL)); // not a standard 8035; see notes
+ kbdc.set_addrmap(AS_PROGRAM, &uts_extw_keyboard_device::prog_map);
+ kbdc.set_addrmap(AS_IO, &uts_extw_keyboard_device::ext_map);
+ kbdc.p1_in_cb().set(FUNC(uts_extw_keyboard_device::p1_r));
+ kbdc.p1_out_cb().set(FUNC(uts_extw_keyboard_device::p1_w));
+ kbdc.p2_out_cb().set(FUNC(uts_extw_keyboard_device::p2_w));
+ kbdc.set_t0_clk_cb(FUNC(uts_extw_keyboard_device::t0_clock));
+ kbdc.t1_in_cb().set(FUNC(uts_extw_keyboard_device::t1_r));
+ kbdc.prog_out_cb().set(FUNC(uts_extw_keyboard_device::prog_w));
+}
+
+ROM_START(uts_extw)
+ ROM_REGION(0x800, "kbdc", 0)
+ ROM_LOAD("2716264.bin", 0x000, 0x800, CRC(75e188aa) SHA1(a6486576525f7eec617fd7f9db469063f8c357fc)) // "© 1985 Keytronic"
+ROM_END
+
+const tiny_rom_entry *uts_extw_keyboard_device::device_rom_region() const
+{
+ return ROM_NAME(uts_extw);
+}
diff --git a/src/devices/bus/uts_kbd/extw.h b/src/devices/bus/uts_kbd/extw.h
new file mode 100644
index 00000000000..21599139ec1
--- /dev/null
+++ b/src/devices/bus/uts_kbd/extw.h
@@ -0,0 +1,47 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+
+#ifndef MAME_BUS_UTS_KBD_EXTW_H
+#define MAME_BUS_UTS_KBD_EXTW_H
+
+#pragma once
+
+#include "bus/uts_kbd/uts_kbd.h"
+
+class uts_extw_keyboard_device : public device_t, public device_uts_keyboard_interface
+{
+public:
+ uts_extw_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ virtual DECLARE_WRITE_LINE_MEMBER(ready_w) override;
+
+ virtual ioport_constructor device_input_ports() const override;
+ virtual void device_start() override;
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+private:
+ u8 p1_r();
+ void p1_w(u8 data);
+ void p2_w(u8 data);
+ void t0_clock(u32 clk);
+ DECLARE_READ_LINE_MEMBER(t1_r);
+ DECLARE_WRITE_LINE_MEMBER(prog_w);
+
+ void prog_map(address_map &map);
+ void ext_map(address_map &map);
+
+ required_ioport_array<16> m_keys;
+ output_finder<> m_shift_led;
+
+ u8 m_p1_output;
+ u8 m_p2_output;
+ u8 m_shift_register;
+ bool m_ready_line;
+ bool m_prog_line;
+};
+
+DECLARE_DEVICE_TYPE(UTS_EXTW_KEYBOARD, uts_extw_keyboard_device)
+
+#endif // MAME_BUS_UTS_KBD_EXTW_H
diff --git a/src/devices/bus/uts_kbd/uts_kbd.cpp b/src/devices/bus/uts_kbd/uts_kbd.cpp
new file mode 100644
index 00000000000..d652dbfca80
--- /dev/null
+++ b/src/devices/bus/uts_kbd/uts_kbd.cpp
@@ -0,0 +1,89 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ Sperry Univac UTS series keyboard port
+
+ The UTS 20 System Description presents four types of keyboards that
+ may be connected to the terminal as auxiliary input devices:
+ - Typewriter Keyboard
+ - Expanded Typewriter Keyboard
+ - Katakana/English Keyboard
+ - UTS 400-Format Keyboard
+
+ A Magnetic Stripe Reader which can read ABA or IATA data is another
+ device which can be connected to the keyboard input. This apparently
+ includes a pass-through keyboard connector.
+
+ Keyboard input is transmitted serially at 9600 baud, using 8 data bits,
+ 1 stop bit and odd parity. A two-byte sequence is sent for each key,
+ with the (non-ASCII) keycode being contained in the second byte. The
+ only other active line appears to be a ready signal (assumed to be
+ active high), which the terminal drives to synchronize transmissions.
+ This might even be a single line driven bidirectionally. There appear
+ to be at most four wires attached to the DE-9 connector.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "bus/uts_kbd/uts_kbd.h"
+
+#include "bus/uts_kbd/extw.h"
+#include "bus/uts_kbd/400kbd.h"
+
+//**************************************************************************
+// UTS KEYBOARD PORT DEVICE
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(UTS_KEYBOARD, uts_keyboard_port_device, "uts_kbd", "UTS Keyboard Port")
+
+uts_keyboard_port_device::uts_keyboard_port_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, UTS_KEYBOARD, tag, owner, clock)
+ , device_slot_interface(mconfig, *this)
+ , m_rxd_callback(*this)
+ , m_kbd(nullptr)
+{
+}
+
+void uts_keyboard_port_device::device_config_complete()
+{
+ m_kbd = dynamic_cast<device_uts_keyboard_interface *>(get_card_device());
+}
+
+void uts_keyboard_port_device::device_resolve_objects()
+{
+ m_rxd_callback.resolve_safe();
+}
+
+void uts_keyboard_port_device::device_start()
+{
+}
+
+//**************************************************************************
+// UTS KEYBOARD INTERFACE
+//**************************************************************************
+
+device_uts_keyboard_interface::device_uts_keyboard_interface(const machine_config &mconfig, device_t &device)
+ : device_slot_card_interface(mconfig, device)
+ , m_port(device, DEVICE_SELF_OWNER)
+{
+}
+
+device_uts_keyboard_interface::~device_uts_keyboard_interface()
+{
+}
+
+//**************************************************************************
+// KEYBOARD OPTIONS
+//**************************************************************************
+
+void uts10_keyboards(device_slot_interface &slot)
+{
+ slot.option_add("extw", UTS_EXTW_KEYBOARD);
+}
+
+void uts20_keyboards(device_slot_interface &slot)
+{
+ uts10_keyboards(slot);
+ slot.option_add("uts400", UTS_400_KEYBOARD);
+}
diff --git a/src/devices/bus/uts_kbd/uts_kbd.h b/src/devices/bus/uts_kbd/uts_kbd.h
new file mode 100644
index 00000000000..7cfff95c0fe
--- /dev/null
+++ b/src/devices/bus/uts_kbd/uts_kbd.h
@@ -0,0 +1,101 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ Sperry Univac UTS series keyboard port
+
+***************************************************************************/
+
+#ifndef MAME_BUS_UTS_KBD_UTS_KBD_H
+#define MAME_BUS_UTS_KBD_UTS_KBD_H
+
+#pragma once
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// forward declaration
+class device_uts_keyboard_interface;
+
+// ======================> uts_keyboard_port_device
+
+class uts_keyboard_port_device : public device_t, public device_slot_interface
+{
+ friend class device_uts_keyboard_interface;
+
+public:
+ // construction/destruction
+ uts_keyboard_port_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+ template <typename T>
+ uts_keyboard_port_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts, const char *dflt)
+ : uts_keyboard_port_device(mconfig, tag, owner, 0U)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ // configuration
+ auto rxd_callback() { return m_rxd_callback.bind(); }
+
+ // line handler
+ inline DECLARE_WRITE_LINE_MEMBER(ready_w);
+
+protected:
+ // device-level overrides
+ virtual void device_config_complete() override;
+ virtual void device_resolve_objects() override;
+ virtual void device_start() override;
+
+ // called from keyboard
+ DECLARE_WRITE_LINE_MEMBER(write_rxd) { m_rxd_callback(state); }
+
+private:
+ // user callback
+ devcb_write_line m_rxd_callback;
+
+ // selected keyboard
+ device_uts_keyboard_interface *m_kbd;
+};
+
+// ======================> device_uts_keyboard_interface
+
+class device_uts_keyboard_interface : public device_slot_card_interface
+{
+ friend class uts_keyboard_port_device;
+
+protected:
+ // construction/destruction
+ device_uts_keyboard_interface(const machine_config &mconfig, device_t &device);
+ virtual ~device_uts_keyboard_interface();
+
+ DECLARE_WRITE_LINE_MEMBER(write_rxd) { m_port->write_rxd(state); }
+
+ virtual DECLARE_WRITE_LINE_MEMBER(ready_w) = 0;
+
+private:
+ // parent port
+ required_device<uts_keyboard_port_device> m_port;
+};
+
+// type definition
+DECLARE_DEVICE_TYPE(UTS_KEYBOARD, uts_keyboard_port_device)
+
+// standard options
+extern void uts20_keyboards(device_slot_interface &slot);
+extern void uts10_keyboards(device_slot_interface &slot);
+
+//**************************************************************************
+// INLINE FUNCTIONS
+//**************************************************************************
+
+WRITE_LINE_MEMBER(uts_keyboard_port_device::ready_w)
+{
+ if (m_kbd != nullptr)
+ m_kbd->ready_w(state);
+}
+
+#endif // MAME_BUS_UTS_KBD_UTS_KBD_H
diff --git a/src/devices/bus/vboy/slot.h b/src/devices/bus/vboy/slot.h
index a81efa07519..547f09b8523 100644
--- a/src/devices/bus/vboy/slot.h
+++ b/src/devices/bus/vboy/slot.h
@@ -62,7 +62,16 @@ class vboy_cart_slot_device : public device_t,
{
public:
// construction/destruction
- vboy_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ vboy_cart_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : vboy_cart_slot_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+ vboy_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
virtual ~vboy_cart_slot_device();
// image-level overrides
@@ -110,8 +119,4 @@ DECLARE_DEVICE_TYPE(VBOY_CART_SLOT, vboy_cart_slot_device)
#define VBOYSLOT_ROM_REGION_TAG ":cart:rom"
-#define MCFG_VBOY_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_tag, VBOY_CART_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
#endif // MAME_BUS_VBOY_SLOT_H
diff --git a/src/devices/bus/vc4000/rom.cpp b/src/devices/bus/vc4000/rom.cpp
index 0e41b2638ed..ffd9a21ffb5 100644
--- a/src/devices/bus/vc4000/rom.cpp
+++ b/src/devices/bus/vc4000/rom.cpp
@@ -228,7 +228,7 @@ vc4000_chess2_device::vc4000_chess2_device(const machine_config &mconfig, const
mapper specific handlers
-------------------------------------------------*/
-READ8_MEMBER(vc4000_rom_device::read_rom)
+uint8_t vc4000_rom_device::read_rom(offs_t offset)
{
if (offset < m_rom_size)
return m_rom[offset];
@@ -237,18 +237,18 @@ READ8_MEMBER(vc4000_rom_device::read_rom)
}
-READ8_MEMBER(vc4000_ram1k_device::read_ram)
+uint8_t vc4000_ram1k_device::read_ram(offs_t offset)
{
return m_ram[offset & (m_ram.size() - 1)];
}
-WRITE8_MEMBER(vc4000_ram1k_device::write_ram)
+void vc4000_ram1k_device::write_ram(offs_t offset, uint8_t data)
{
m_ram[offset & (m_ram.size() - 1)] = data;
}
-READ8_MEMBER(vc4000_chess2_device::extra_rom)
+uint8_t vc4000_chess2_device::extra_rom(offs_t offset)
{
if (offset < (m_rom_size - 0x2000))
return m_rom[offset + 0x2000];
@@ -256,12 +256,12 @@ READ8_MEMBER(vc4000_chess2_device::extra_rom)
return 0xff;
}
-READ8_MEMBER(vc4000_chess2_device::read_ram)
+uint8_t vc4000_chess2_device::read_ram(offs_t offset)
{
return m_ram[offset & (m_ram.size() - 1)];
}
-WRITE8_MEMBER(vc4000_chess2_device::write_ram)
+void vc4000_chess2_device::write_ram(offs_t offset, uint8_t data)
{
m_ram[offset & (m_ram.size() - 1)] = data;
}
diff --git a/src/devices/bus/vc4000/rom.h b/src/devices/bus/vc4000/rom.h
index a8d524f2989..623e4c248c9 100644
--- a/src/devices/bus/vc4000/rom.h
+++ b/src/devices/bus/vc4000/rom.h
@@ -16,7 +16,7 @@ public:
vc4000_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom) override;
+ virtual uint8_t read_rom(offs_t offset) override;
protected:
vc4000_rom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@@ -44,8 +44,8 @@ public:
vc4000_ram1k_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+ virtual uint8_t read_ram(offs_t offset) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
};
// ======================> vc4000_chess2_device
@@ -57,9 +57,9 @@ public:
vc4000_chess2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(extra_rom) override;
- virtual DECLARE_READ8_MEMBER(read_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
+ virtual uint8_t extra_rom(offs_t offset) override;
+ virtual uint8_t read_ram(offs_t offset) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
};
diff --git a/src/devices/bus/vc4000/slot.cpp b/src/devices/bus/vc4000/slot.cpp
index 68c7ca15f4b..892213c5aef 100644
--- a/src/devices/bus/vc4000/slot.cpp
+++ b/src/devices/bus/vc4000/slot.cpp
@@ -251,10 +251,10 @@ std::string vc4000_cart_slot_device::get_default_card_software(get_default_card_
read
-------------------------------------------------*/
-READ8_MEMBER(vc4000_cart_slot_device::read_rom)
+uint8_t vc4000_cart_slot_device::read_rom(offs_t offset)
{
if (m_cart)
- return m_cart->read_rom(space, offset);
+ return m_cart->read_rom(offset);
else
return 0xff;
}
@@ -263,10 +263,10 @@ READ8_MEMBER(vc4000_cart_slot_device::read_rom)
read
-------------------------------------------------*/
-READ8_MEMBER(vc4000_cart_slot_device::extra_rom)
+uint8_t vc4000_cart_slot_device::extra_rom(offs_t offset)
{
if (m_cart)
- return m_cart->extra_rom(space, offset);
+ return m_cart->extra_rom(offset);
else
return 0xff;
}
@@ -275,10 +275,10 @@ READ8_MEMBER(vc4000_cart_slot_device::extra_rom)
read
-------------------------------------------------*/
-READ8_MEMBER(vc4000_cart_slot_device::read_ram)
+uint8_t vc4000_cart_slot_device::read_ram(offs_t offset)
{
if (m_cart)
- return m_cart->read_ram(space, offset);
+ return m_cart->read_ram(offset);
else
return 0xff;
}
@@ -287,8 +287,8 @@ READ8_MEMBER(vc4000_cart_slot_device::read_ram)
write
-------------------------------------------------*/
-WRITE8_MEMBER(vc4000_cart_slot_device::write_ram)
+void vc4000_cart_slot_device::write_ram(offs_t offset, uint8_t data)
{
if (m_cart)
- m_cart->write_ram(space, offset, data);
+ m_cart->write_ram(offset, data);
}
diff --git a/src/devices/bus/vc4000/slot.h b/src/devices/bus/vc4000/slot.h
index a5015766545..2ad52b2c7e0 100644
--- a/src/devices/bus/vc4000/slot.h
+++ b/src/devices/bus/vc4000/slot.h
@@ -27,10 +27,10 @@ public:
virtual ~device_vc4000_cart_interface();
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom) { return 0xff; }
- virtual DECLARE_READ8_MEMBER(extra_rom) { return 0xff; }
- virtual DECLARE_READ8_MEMBER(read_ram) { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(write_ram) {}
+ virtual uint8_t read_rom(offs_t offset) { return 0xff; }
+ virtual uint8_t extra_rom(offs_t offset) { return 0xff; }
+ virtual uint8_t read_ram(offs_t offset) { return 0xff; }
+ virtual void write_ram(offs_t offset, uint8_t data) {}
void rom_alloc(uint32_t size, const char *tag);
void ram_alloc(uint32_t size);
@@ -93,10 +93,10 @@ public:
virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom);
- virtual DECLARE_READ8_MEMBER(extra_rom);
- virtual DECLARE_READ8_MEMBER(read_ram);
- virtual DECLARE_WRITE8_MEMBER(write_ram);
+ virtual uint8_t read_rom(offs_t offset);
+ virtual uint8_t extra_rom(offs_t offset);
+ virtual uint8_t read_ram(offs_t offset);
+ virtual void write_ram(offs_t offset, uint8_t data);
protected:
// device-level overrides
diff --git a/src/devices/bus/vcs/dpc.cpp b/src/devices/bus/vcs/dpc.cpp
index aa452ba2957..525f9e77085 100644
--- a/src/devices/bus/vcs/dpc.cpp
+++ b/src/devices/bus/vcs/dpc.cpp
@@ -266,9 +266,10 @@ void a26_rom_dpc_device::setup_addon_ptr(uint8_t *ptr)
}
-MACHINE_CONFIG_START(a26_rom_dpc_device::device_add_mconfig)
- MCFG_DEVICE_ADD("dpc", ATARI_DPC, 0)
-MACHINE_CONFIG_END
+void a26_rom_dpc_device::device_add_mconfig(machine_config &config)
+{
+ ATARI_DPC(config, m_dpc, 0);
+}
READ8_MEMBER(a26_rom_dpc_device::read_rom)
{
diff --git a/src/devices/bus/vcs/harmony_melody.cpp b/src/devices/bus/vcs/harmony_melody.cpp
index 38f2b92dd94..a38d0c74fdc 100644
--- a/src/devices/bus/vcs/harmony_melody.cpp
+++ b/src/devices/bus/vcs/harmony_melody.cpp
@@ -82,10 +82,11 @@ void a26_rom_harmony_device::harmony_arm7_map(address_map &map)
{
}
-MACHINE_CONFIG_START(a26_rom_harmony_device::device_add_mconfig)
- MCFG_DEVICE_ADD("arm", LPC2103, 70000000)
- MCFG_DEVICE_PROGRAM_MAP(harmony_arm7_map)
-MACHINE_CONFIG_END
+void a26_rom_harmony_device::device_add_mconfig(machine_config &config)
+{
+ LPC2103(config, m_cpu, 70000000);
+ m_cpu->set_addrmap(AS_PROGRAM, &a26_rom_harmony_device::harmony_arm7_map);
+}
// actually if the ARM code is doing this and providing every opcode to the main CPU based
// on bus activity then we shouldn't be doing and of this here (if the ROM is actually
diff --git a/src/devices/bus/vcs/scharger.cpp b/src/devices/bus/vcs/scharger.cpp
index 36a9ee65acc..7c42fc9003c 100644
--- a/src/devices/bus/vcs/scharger.cpp
+++ b/src/devices/bus/vcs/scharger.cpp
@@ -87,15 +87,15 @@ void a26_rom_ss_device::device_reset()
}
-MACHINE_CONFIG_START(a26_rom_ss_device::device_add_mconfig)
- MCFG_CASSETTE_ADD("cassette")
- MCFG_CASSETTE_FORMATS(a26_cassette_formats)
- MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED)
- MCFG_CASSETTE_INTERFACE("a2600_cass")
-
-// MCFG_SOUND_WAVE_ADD("wave", "cassette")
-// MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
-MACHINE_CONFIG_END
+void a26_rom_ss_device::device_add_mconfig(machine_config &config)
+{
+ CASSETTE(config, m_cassette);
+ m_cassette->set_formats(a26_cassette_formats);
+ m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED);
+ m_cassette->set_interface("a2600_cass");
+
+// WAVE(config, "wave", m_cassette).add_route(ALL_OUTPUTS, "mono", 0.25);
+}
inline uint8_t a26_rom_ss_device::read_byte(uint32_t offset)
{
diff --git a/src/devices/bus/vcs_ctrl/ctrl.h b/src/devices/bus/vcs_ctrl/ctrl.h
index 31f371d2fa8..574a7dc3ae8 100644
--- a/src/devices/bus/vcs_ctrl/ctrl.h
+++ b/src/devices/bus/vcs_ctrl/ctrl.h
@@ -15,22 +15,6 @@
#pragma once
-
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_VCS_CONTROL_PORT_ADD(_tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, VCS_CONTROL_PORT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-
-#define MCFG_VCS_CONTROL_PORT_TRIGGER_CALLBACK(_write) \
- downcast<vcs_control_port_device &>(*device).set_trigger_wr_callback(DEVCB_##_write);
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -79,7 +63,6 @@ public:
vcs_control_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
// static configuration helpers
- template <class Object> devcb_base &set_trigger_wr_callback(Object &&cb) { return m_write_trigger.set_callback(std::forward<Object>(cb)); }
auto trigger_wr_callback() { return m_write_trigger.bind(); }
// computer interface
diff --git a/src/devices/bus/vectrex/slot.h b/src/devices/bus/vectrex/slot.h
index 605e273875f..f779bf5d514 100644
--- a/src/devices/bus/vectrex/slot.h
+++ b/src/devices/bus/vectrex/slot.h
@@ -112,8 +112,4 @@ DECLARE_DEVICE_TYPE(VECTREX_CART_SLOT, vectrex_cart_slot_device)
#define VECSLOT_ROM_REGION_TAG ":cart:rom"
-#define MCFG_VECTREX_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_tag, VECTREX_CART_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
#endif // MAME_BUS_VECTREX_SLOT_H
diff --git a/src/devices/bus/vic10/exp.cpp b/src/devices/bus/vic10/exp.cpp
index e3af1609567..26ad1980448 100644
--- a/src/devices/bus/vic10/exp.cpp
+++ b/src/devices/bus/vic10/exp.cpp
@@ -198,11 +198,11 @@ std::string vic10_expansion_slot_device::get_default_card_software(get_default_c
// cd_r - cartridge data read
//-------------------------------------------------
-uint8_t vic10_expansion_slot_device::cd_r(address_space &space, offs_t offset, uint8_t data, int lorom, int uprom, int exram)
+uint8_t vic10_expansion_slot_device::cd_r(offs_t offset, uint8_t data, int lorom, int uprom, int exram)
{
if (m_card != nullptr)
{
- data = m_card->vic10_cd_r(space, offset, data, lorom, uprom, exram);
+ data = m_card->vic10_cd_r(offset, data, lorom, uprom, exram);
}
return data;
@@ -213,11 +213,11 @@ uint8_t vic10_expansion_slot_device::cd_r(address_space &space, offs_t offset, u
// cd_w - cartridge data write
//-------------------------------------------------
-void vic10_expansion_slot_device::cd_w(address_space &space, offs_t offset, uint8_t data, int lorom, int uprom, int exram)
+void vic10_expansion_slot_device::cd_w(offs_t offset, uint8_t data, int lorom, int uprom, int exram)
{
if (m_card != nullptr)
{
- m_card->vic10_cd_w(space, offset, data, lorom, uprom, exram);
+ m_card->vic10_cd_w(offset, data, lorom, uprom, exram);
}
}
diff --git a/src/devices/bus/vic10/exp.h b/src/devices/bus/vic10/exp.h
index 24da3f392dc..710b25bbd49 100644
--- a/src/devices/bus/vic10/exp.h
+++ b/src/devices/bus/vic10/exp.h
@@ -79,8 +79,8 @@ public:
auto sp_callback() { return m_write_sp.bind(); }
// computer interface
- uint8_t cd_r(address_space &space, offs_t offset, uint8_t data, int lorom, int uprom, int exram);
- void cd_w(address_space &space, offs_t offset, uint8_t data, int lorom, int uprom, int exram);
+ uint8_t cd_r(offs_t offset, uint8_t data, int lorom, int uprom, int exram);
+ void cd_w(offs_t offset, uint8_t data, int lorom, int uprom, int exram);
DECLARE_READ_LINE_MEMBER( p0_r );
DECLARE_WRITE_LINE_MEMBER( p0_w );
@@ -133,8 +133,8 @@ public:
// construction/destruction
virtual ~device_vic10_expansion_card_interface();
- virtual uint8_t vic10_cd_r(address_space &space, offs_t offset, uint8_t data, int lorom, int uprom, int exram) { return data; }
- virtual void vic10_cd_w(address_space &space, offs_t offset, uint8_t data, int lorom, int uprom, int exram) { }
+ virtual uint8_t vic10_cd_r(offs_t offset, uint8_t data, int lorom, int uprom, int exram) { return data; }
+ virtual void vic10_cd_w(offs_t offset, uint8_t data, int lorom, int uprom, int exram) { }
virtual int vic10_p0_r() { return 0; }
virtual void vic10_p0_w(int state) { }
virtual void vic10_sp_w(int state) { }
diff --git a/src/devices/bus/vic10/multimax.cpp b/src/devices/bus/vic10/multimax.cpp
index f103ad0ce59..98f67a48187 100644
--- a/src/devices/bus/vic10/multimax.cpp
+++ b/src/devices/bus/vic10/multimax.cpp
@@ -59,7 +59,7 @@ void vic10_multimax_device::device_reset()
// vic10_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t vic10_multimax_device::vic10_cd_r(address_space &space, offs_t offset, uint8_t data, int lorom, int uprom, int exram)
+uint8_t vic10_multimax_device::vic10_cd_r(offs_t offset, uint8_t data, int lorom, int uprom, int exram)
{
if (!lorom)
{
@@ -85,7 +85,7 @@ uint8_t vic10_multimax_device::vic10_cd_r(address_space &space, offs_t offset, u
// vic10_cd_w - cartridge data write
//-------------------------------------------------
-void vic10_multimax_device::vic10_cd_w(address_space &space, offs_t offset, uint8_t data, int lorom, int uprom, int exram)
+void vic10_multimax_device::vic10_cd_w(offs_t offset, uint8_t data, int lorom, int uprom, int exram)
{
if (!exram)
{
diff --git a/src/devices/bus/vic10/multimax.h b/src/devices/bus/vic10/multimax.h
index 170ed34fb22..51175fc7bd8 100644
--- a/src/devices/bus/vic10/multimax.h
+++ b/src/devices/bus/vic10/multimax.h
@@ -33,8 +33,8 @@ protected:
virtual void device_reset() override;
// device_vic10_expansion_card_interface overrides
- virtual uint8_t vic10_cd_r(address_space &space, offs_t offset, uint8_t data, int lorom, int uprom, int exram) override;
- virtual void vic10_cd_w(address_space &space, offs_t offset, uint8_t data, int lorom, int uprom, int exram) override;
+ virtual uint8_t vic10_cd_r(offs_t offset, uint8_t data, int lorom, int uprom, int exram) override;
+ virtual void vic10_cd_w(offs_t offset, uint8_t data, int lorom, int uprom, int exram) override;
private:
uint8_t m_latch;
diff --git a/src/devices/bus/vic10/std.cpp b/src/devices/bus/vic10/std.cpp
index 0257ea11d98..de4ba6ff8b6 100644
--- a/src/devices/bus/vic10/std.cpp
+++ b/src/devices/bus/vic10/std.cpp
@@ -46,7 +46,7 @@ void vic10_standard_cartridge_device::device_start()
// vic10_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t vic10_standard_cartridge_device::vic10_cd_r(address_space &space, offs_t offset, uint8_t data, int lorom, int uprom, int exram)
+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())
{
@@ -69,7 +69,7 @@ uint8_t vic10_standard_cartridge_device::vic10_cd_r(address_space &space, offs_t
// vic10_cd_w - cartridge data write
//-------------------------------------------------
-void vic10_standard_cartridge_device::vic10_cd_w(address_space &space, offs_t offset, uint8_t data, int lorom, int uprom, int exram)
+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())
{
diff --git a/src/devices/bus/vic10/std.h b/src/devices/bus/vic10/std.h
index 1d1ebf7ae33..3279a58333c 100644
--- a/src/devices/bus/vic10/std.h
+++ b/src/devices/bus/vic10/std.h
@@ -33,8 +33,8 @@ protected:
virtual void device_start() override;
// device_vic10_expansion_card_interface overrides
- virtual uint8_t vic10_cd_r(address_space &space, offs_t offset, uint8_t data, int lorom, int uprom, int exram) override;
- virtual void vic10_cd_w(address_space &space, offs_t offset, uint8_t data, int lorom, int uprom, int exram) override;
+ virtual uint8_t vic10_cd_r(offs_t offset, uint8_t data, int lorom, int uprom, int exram) override;
+ virtual void vic10_cd_w(offs_t offset, uint8_t data, int lorom, int uprom, int exram) override;
};
diff --git a/src/devices/bus/vic20/exp.cpp b/src/devices/bus/vic20/exp.cpp
index 4bc6136553b..c472f7408fd 100644
--- a/src/devices/bus/vic20/exp.cpp
+++ b/src/devices/bus/vic20/exp.cpp
@@ -178,11 +178,11 @@ std::string vic20_expansion_slot_device::get_default_card_software(get_default_c
// cd_r - cartridge data read
//-------------------------------------------------
-uint8_t vic20_expansion_slot_device::cd_r(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3)
+uint8_t vic20_expansion_slot_device::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)
{
if (m_card != nullptr)
{
- data = m_card->vic20_cd_r(space, offset, data, ram1, ram2, ram3, blk1, blk2, blk3, blk5, io2, io3);
+ data = m_card->vic20_cd_r(offset, data, ram1, ram2, ram3, blk1, blk2, blk3, blk5, io2, io3);
}
return data;
@@ -193,11 +193,11 @@ uint8_t vic20_expansion_slot_device::cd_r(address_space &space, offs_t offset, u
// cd_w - cartridge data write
//-------------------------------------------------
-void vic20_expansion_slot_device::cd_w(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3)
+void vic20_expansion_slot_device::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)
{
if (m_card != nullptr)
{
- m_card->vic20_cd_w(space, offset, data, ram1, ram2, ram3, blk1, blk2, blk3, blk5, io2, io3);
+ m_card->vic20_cd_w(offset, data, ram1, ram2, ram3, blk1, blk2, blk3, blk5, io2, io3);
}
}
diff --git a/src/devices/bus/vic20/exp.h b/src/devices/bus/vic20/exp.h
index b6b0dbd1346..f7e51b0ee57 100644
--- a/src/devices/bus/vic20/exp.h
+++ b/src/devices/bus/vic20/exp.h
@@ -79,8 +79,8 @@ public:
auto res_wr_callback() { return m_write_res.bind(); }
// computer interface
- uint8_t cd_r(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3);
- void cd_w(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3);
+ uint8_t 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);
+ void 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);
// cartridge interface
DECLARE_WRITE_LINE_MEMBER( irq_w ) { m_write_irq(state); }
@@ -129,8 +129,8 @@ public:
// construction/destruction
virtual ~device_vic20_expansion_card_interface();
- virtual uint8_t vic20_cd_r(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3) { return data; };
- virtual void vic20_cd_w(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3) { };
+ 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) { return data; };
+ 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) { };
protected:
device_vic20_expansion_card_interface(const machine_config &mconfig, device_t &device);
diff --git a/src/devices/bus/vic20/fe3.cpp b/src/devices/bus/vic20/fe3.cpp
index 57b7df49e91..f008bec3cb8 100644
--- a/src/devices/bus/vic20/fe3.cpp
+++ b/src/devices/bus/vic20/fe3.cpp
@@ -140,7 +140,7 @@ void vic20_final_expansion_3_device::device_reset()
// vic20_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t vic20_final_expansion_3_device::vic20_cd_r(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3)
+uint8_t vic20_final_expansion_3_device::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)
{
switch (m_reg1 & REG1_MODE_MASK)
{
@@ -148,7 +148,7 @@ uint8_t vic20_final_expansion_3_device::vic20_cd_r(address_space &space, offs_t
// read from ROM
if (!blk5)
{
- data = m_flash_rom->read(space, get_address(0, 3, offset));
+ data = m_flash_rom->read(get_address(0, 3, offset));
m_lockbit = 1;
}
@@ -170,19 +170,19 @@ uint8_t vic20_final_expansion_3_device::vic20_cd_r(address_space &space, offs_t
// read from ROM
if (!blk1 && !BLK1_HIDDEN)
{
- data = m_flash_rom->read(space, get_address(REG1_BANK, 0, offset));
+ data = m_flash_rom->read(get_address(REG1_BANK, 0, offset));
}
if (!blk2 && !BLK2_HIDDEN)
{
- data = m_flash_rom->read(space, get_address(REG1_BANK, 1, offset));
+ data = m_flash_rom->read(get_address(REG1_BANK, 1, offset));
}
if (!blk3 && !BLK3_HIDDEN)
{
- data = m_flash_rom->read(space, get_address(REG1_BANK, 2, offset));
+ data = m_flash_rom->read(get_address(REG1_BANK, 2, offset));
}
if (!blk5 && !BLK5_HIDDEN)
{
- data = m_flash_rom->read(space, get_address(REG1_BANK, 3, offset));
+ data = m_flash_rom->read(get_address(REG1_BANK, 3, offset));
}
// read from registers
@@ -298,19 +298,19 @@ uint8_t vic20_final_expansion_3_device::vic20_cd_r(address_space &space, offs_t
// read from ROM bank 0 or RAM bank 1
if (!blk1 && !BLK1_HIDDEN)
{
- data = (m_reg1 & REG1_BLK1) ? m_flash_rom->read(space, get_address(0, 0, offset)) : m_ram[get_address(1, 0, offset)];
+ data = (m_reg1 & REG1_BLK1) ? m_flash_rom->read(get_address(0, 0, offset)) : m_ram[get_address(1, 0, offset)];
}
if (!blk2 && !BLK2_HIDDEN)
{
- data = (m_reg1 & REG1_BLK2) ? m_flash_rom->read(space, get_address(0, 1, offset)) : m_ram[get_address(1, 1, offset)];
+ data = (m_reg1 & REG1_BLK2) ? m_flash_rom->read(get_address(0, 1, offset)) : m_ram[get_address(1, 1, offset)];
}
if (!blk3 && !BLK3_HIDDEN)
{
- data = (m_reg1 & REG1_BLK3) ? m_flash_rom->read(space, get_address(0, 2, offset)) : m_ram[get_address(1, 2, offset)];
+ data = (m_reg1 & REG1_BLK3) ? m_flash_rom->read(get_address(0, 2, offset)) : m_ram[get_address(1, 2, offset)];
}
if (!blk5 && !BLK5_HIDDEN)
{
- data = (m_reg1 & REG1_BLK5) ? m_flash_rom->read(space, get_address(0, 3, offset)) : m_ram[get_address(1, 3, offset)];
+ data = (m_reg1 & REG1_BLK5) ? m_flash_rom->read(get_address(0, 3, offset)) : m_ram[get_address(1, 3, offset)];
}
// read from registers
@@ -330,19 +330,19 @@ uint8_t vic20_final_expansion_3_device::vic20_cd_r(address_space &space, offs_t
// read from ROM
if (!blk1 && !BLK1_HIDDEN)
{
- data = m_flash_rom->read(space, get_address(REG1_BANK, 0, offset));
+ data = m_flash_rom->read(get_address(REG1_BANK, 0, offset));
}
if (!blk2 && !BLK2_HIDDEN)
{
- data = m_flash_rom->read(space, get_address(REG1_BANK, 1, offset));
+ data = m_flash_rom->read(get_address(REG1_BANK, 1, offset));
}
if (!blk3 && !BLK3_HIDDEN)
{
- data = m_flash_rom->read(space, get_address(REG1_BANK, 2, offset));
+ data = m_flash_rom->read(get_address(REG1_BANK, 2, offset));
}
if (!blk5 && !BLK5_HIDDEN)
{
- data = m_flash_rom->read(space, get_address(REG1_BANK, 3, offset));
+ data = m_flash_rom->read(get_address(REG1_BANK, 3, offset));
}
// read from registers
@@ -361,7 +361,7 @@ uint8_t vic20_final_expansion_3_device::vic20_cd_r(address_space &space, offs_t
// vic20_cd_w - cartridge data write
//-------------------------------------------------
-void vic20_final_expansion_3_device::vic20_cd_w(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3)
+void vic20_final_expansion_3_device::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)
{
switch (m_reg1 & REG1_MODE_MASK)
{
@@ -551,19 +551,19 @@ void vic20_final_expansion_3_device::vic20_cd_w(address_space &space, offs_t off
// write to ROM
if (!blk1 && !BLK1_HIDDEN)
{
- m_flash_rom->write(space, get_address(REG1_BANK, 0, offset), data);
+ m_flash_rom->write(get_address(REG1_BANK, 0, offset), data);
}
if (!blk2 && !BLK2_HIDDEN)
{
- m_flash_rom->write(space, get_address(REG1_BANK, 1, offset), data);
+ m_flash_rom->write(get_address(REG1_BANK, 1, offset), data);
}
if (!blk3 && !BLK3_HIDDEN)
{
- m_flash_rom->write(space, get_address(REG1_BANK, 2, offset), data);
+ m_flash_rom->write(get_address(REG1_BANK, 2, offset), data);
}
if (!blk5 && !BLK5_HIDDEN)
{
- m_flash_rom->write(space, get_address(REG1_BANK, 3, offset), data);
+ m_flash_rom->write(get_address(REG1_BANK, 3, offset), data);
}
// write to registers
diff --git a/src/devices/bus/vic20/fe3.h b/src/devices/bus/vic20/fe3.h
index e65a97bfd1f..018ef2617b6 100644
--- a/src/devices/bus/vic20/fe3.h
+++ b/src/devices/bus/vic20/fe3.h
@@ -39,8 +39,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_vic20_expansion_card_interface overrides
- virtual uint8_t vic20_cd_r(address_space &space, 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(address_space &space, 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 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:
enum
diff --git a/src/devices/bus/vic20/megacart.cpp b/src/devices/bus/vic20/megacart.cpp
index fea4153457e..8094adfba2b 100644
--- a/src/devices/bus/vic20/megacart.cpp
+++ b/src/devices/bus/vic20/megacart.cpp
@@ -22,10 +22,9 @@ DEFINE_DEVICE_TYPE(VIC20_MEGACART, vic20_megacart_device, "vic20_megacart", "VIC
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(vic20_megacart_device::device_add_mconfig)
-
-MACHINE_CONFIG_END
-
+void vic20_megacart_device::device_add_mconfig(machine_config &config)
+{
+}
//**************************************************************************
@@ -71,7 +70,7 @@ void vic20_megacart_device::device_reset()
// vic20_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t vic20_megacart_device::vic20_cd_r(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3)
+uint8_t vic20_megacart_device::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)
{
if (!ram1 || !ram2 || !ram3 || !io2 || !io3)
{
@@ -95,7 +94,7 @@ uint8_t vic20_megacart_device::vic20_cd_r(address_space &space, offs_t offset, u
// vic20_cd_w - cartridge data write
//-------------------------------------------------
-void vic20_megacart_device::vic20_cd_w(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3)
+void vic20_megacart_device::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)
{
if (!ram1 || !ram2 || !ram3 || !io2)
{
diff --git a/src/devices/bus/vic20/megacart.h b/src/devices/bus/vic20/megacart.h
index 6e66382b2c7..52f5182fc3c 100644
--- a/src/devices/bus/vic20/megacart.h
+++ b/src/devices/bus/vic20/megacart.h
@@ -43,8 +43,8 @@ protected:
virtual void nvram_write(emu_file &file) override { file.write(m_nvram, m_nvram.bytes()); }
// device_vic20_expansion_card_interface overrides
- virtual uint8_t vic20_cd_r(address_space &space, 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(address_space &space, 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 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:
int m_nvram_en;
diff --git a/src/devices/bus/vic20/speakeasy.cpp b/src/devices/bus/vic20/speakeasy.cpp
index 4a068b2daaf..6128852d540 100644
--- a/src/devices/bus/vic20/speakeasy.cpp
+++ b/src/devices/bus/vic20/speakeasy.cpp
@@ -33,12 +33,12 @@ DEFINE_DEVICE_TYPE(VIC20_SPEAKEASY, vic20_speakeasy_device, "vic20_speakeasy", "
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(vic20_speakeasy_device::device_add_mconfig)
+void vic20_speakeasy_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD(SC01A_TAG, VOTRAX_SC01, 720000)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.85)
-MACHINE_CONFIG_END
+ VOTRAX_SC01(config, m_votrax, 720000).add_route(ALL_OUTPUTS, "mono", 0.85);
+}
@@ -71,7 +71,7 @@ void vic20_speakeasy_device::device_start()
// vic20_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t vic20_speakeasy_device::vic20_cd_r(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3)
+uint8_t vic20_speakeasy_device::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)
{
if (!io2)
{
@@ -86,11 +86,11 @@ uint8_t vic20_speakeasy_device::vic20_cd_r(address_space &space, offs_t offset,
// vic20_cd_w - cartridge data write
//-------------------------------------------------
-void vic20_speakeasy_device::vic20_cd_w(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3)
+void vic20_speakeasy_device::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)
{
if (!io2)
{
- m_votrax->write(space, 0, data & 0x3f);
- m_votrax->inflection_w(space, 0, data >> 6);
+ m_votrax->write(data & 0x3f);
+ m_votrax->inflection_w(data >> 6);
}
}
diff --git a/src/devices/bus/vic20/speakeasy.h b/src/devices/bus/vic20/speakeasy.h
index 823963804be..6df3880d2df 100644
--- a/src/devices/bus/vic20/speakeasy.h
+++ b/src/devices/bus/vic20/speakeasy.h
@@ -38,8 +38,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_vic20_expansion_card_interface overrides
- virtual uint8_t vic20_cd_r(address_space &space, 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(address_space &space, 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 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:
required_device<votrax_sc01_device> m_votrax;
diff --git a/src/devices/bus/vic20/std.cpp b/src/devices/bus/vic20/std.cpp
index 7b4823dfcdf..988540719d8 100644
--- a/src/devices/bus/vic20/std.cpp
+++ b/src/devices/bus/vic20/std.cpp
@@ -46,7 +46,7 @@ void vic20_standard_cartridge_device::device_start()
// vic20_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t vic20_standard_cartridge_device::vic20_cd_r(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3)
+uint8_t vic20_standard_cartridge_device::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)
{
if (!blk1 && (m_blk1 != nullptr))
{
diff --git a/src/devices/bus/vic20/std.h b/src/devices/bus/vic20/std.h
index 2362a9c1c4c..0318f80aa54 100644
--- a/src/devices/bus/vic20/std.h
+++ b/src/devices/bus/vic20/std.h
@@ -33,7 +33,7 @@ protected:
virtual void device_start() override;
// device_vic20_expansion_card_interface overrides
- virtual uint8_t vic20_cd_r(address_space &space, 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 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;
};
diff --git a/src/devices/bus/vic20/vic1010.cpp b/src/devices/bus/vic20/vic1010.cpp
index 3c00365a4bc..651ac37156e 100644
--- a/src/devices/bus/vic20/vic1010.cpp
+++ b/src/devices/bus/vic20/vic1010.cpp
@@ -75,11 +75,11 @@ void vic1010_device::device_reset()
// vic20_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t vic1010_device::vic20_cd_r(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3)
+uint8_t vic1010_device::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)
{
for (auto elem : m_expansion_slot)
{
- uint8_t slot_data = elem->cd_r(space, offset, data, ram1, ram2, ram3, blk1, blk2, blk3, blk5, io2, io3);
+ uint8_t slot_data = elem->cd_r(offset, data, ram1, ram2, ram3, blk1, blk2, blk3, blk5, io2, io3);
if (data != slot_data)
{
@@ -95,10 +95,10 @@ uint8_t vic1010_device::vic20_cd_r(address_space &space, offs_t offset, uint8_t
// vic20_cd_w - cartridge data write
//-------------------------------------------------
-void vic1010_device::vic20_cd_w(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3)
+void vic1010_device::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)
{
for (auto & elem : m_expansion_slot)
{
- elem->cd_w(space, offset, data, ram1, ram2, ram3, blk1, blk2, blk3, blk5, io2, io3);
+ elem->cd_w(offset, data, ram1, ram2, ram3, blk1, blk2, blk3, blk5, io2, io3);
}
}
diff --git a/src/devices/bus/vic20/vic1010.h b/src/devices/bus/vic20/vic1010.h
index f2014041f94..af85f4bfc3c 100644
--- a/src/devices/bus/vic20/vic1010.h
+++ b/src/devices/bus/vic20/vic1010.h
@@ -37,8 +37,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_vic20_expansion_card_interface overrides
- virtual uint8_t vic20_cd_r(address_space &space, 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(address_space &space, 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 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:
static constexpr unsigned MAX_SLOTS = 6;
diff --git a/src/devices/bus/vic20/vic1110.cpp b/src/devices/bus/vic20/vic1110.cpp
index 8edd2179bf9..9b2d0c192d9 100644
--- a/src/devices/bus/vic20/vic1110.cpp
+++ b/src/devices/bus/vic20/vic1110.cpp
@@ -90,7 +90,7 @@ void vic1110_device::device_start()
// vic20_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t vic1110_device::vic20_cd_r(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3)
+uint8_t vic1110_device::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)
{
uint8_t sw = m_sw->read();
@@ -107,7 +107,7 @@ uint8_t vic1110_device::vic20_cd_r(address_space &space, offs_t offset, uint8_t
// vic20_cd_w - cartridge data write
//-------------------------------------------------
-void vic1110_device::vic20_cd_w(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3)
+void vic1110_device::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)
{
uint8_t sw = m_sw->read();
diff --git a/src/devices/bus/vic20/vic1110.h b/src/devices/bus/vic20/vic1110.h
index d1467c995bc..9ec1ea2791a 100644
--- a/src/devices/bus/vic20/vic1110.h
+++ b/src/devices/bus/vic20/vic1110.h
@@ -36,8 +36,8 @@ protected:
virtual void device_start() override;
// device_vic20_expansion_card_interface overrides
- virtual uint8_t vic20_cd_r(address_space &space, 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(address_space &space, 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 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:
optional_shared_ptr<uint8_t> m_ram;
diff --git a/src/devices/bus/vic20/vic1111.cpp b/src/devices/bus/vic20/vic1111.cpp
index ccfbabccd48..1f8fa215078 100644
--- a/src/devices/bus/vic20/vic1111.cpp
+++ b/src/devices/bus/vic20/vic1111.cpp
@@ -50,7 +50,7 @@ void vic1111_device::device_start()
// vic20_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t vic1111_device::vic20_cd_r(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3)
+uint8_t vic1111_device::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)
{
if (!blk1)
{
@@ -69,7 +69,7 @@ uint8_t vic1111_device::vic20_cd_r(address_space &space, offs_t offset, uint8_t
// vic20_cd_w - cartridge data write
//-------------------------------------------------
-void vic1111_device::vic20_cd_w(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3)
+void vic1111_device::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)
{
if (!blk1)
{
diff --git a/src/devices/bus/vic20/vic1111.h b/src/devices/bus/vic20/vic1111.h
index 21f439534e9..eb42db2f149 100644
--- a/src/devices/bus/vic20/vic1111.h
+++ b/src/devices/bus/vic20/vic1111.h
@@ -33,8 +33,8 @@ protected:
virtual void device_start() override;
// device_vic20_expansion_card_interface overrides
- virtual uint8_t vic20_cd_r(address_space &space, 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(address_space &space, 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 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:
optional_shared_ptr<uint8_t> m_ram;
diff --git a/src/devices/bus/vic20/vic1112.cpp b/src/devices/bus/vic20/vic1112.cpp
index e8d55e1e89b..77b421f51d8 100644
--- a/src/devices/bus/vic20/vic1112.cpp
+++ b/src/devices/bus/vic20/vic1112.cpp
@@ -164,7 +164,7 @@ void vic1112_device::device_reset()
// vic20_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t vic1112_device::vic20_cd_r(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3)
+uint8_t vic1112_device::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)
{
if (!io2)
{
@@ -184,7 +184,7 @@ uint8_t vic1112_device::vic20_cd_r(address_space &space, offs_t offset, uint8_t
// vic20_cd_w - cartridge data write
//-------------------------------------------------
-void vic1112_device::vic20_cd_w(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3)
+void vic1112_device::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)
{
if (!io2)
{
diff --git a/src/devices/bus/vic20/vic1112.h b/src/devices/bus/vic20/vic1112.h
index 6108a328ca8..5c4e05446a0 100644
--- a/src/devices/bus/vic20/vic1112.h
+++ b/src/devices/bus/vic20/vic1112.h
@@ -42,8 +42,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_vic20_expansion_card_interface overrides
- virtual uint8_t vic20_cd_r(address_space &space, 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(address_space &space, 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 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:
DECLARE_WRITE_LINE_MEMBER( via0_irq_w );
diff --git a/src/devices/bus/vic20/vic1210.cpp b/src/devices/bus/vic20/vic1210.cpp
index 81e5d75cc1d..6fa2a917254 100644
--- a/src/devices/bus/vic20/vic1210.cpp
+++ b/src/devices/bus/vic20/vic1210.cpp
@@ -51,7 +51,7 @@ void vic1210_device::device_start()
// vic20_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t vic1210_device::vic20_cd_r(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3)
+uint8_t vic1210_device::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)
{
if (!ram1 || !ram2 || !ram3)
{
@@ -70,7 +70,7 @@ uint8_t vic1210_device::vic20_cd_r(address_space &space, offs_t offset, uint8_t
// vic20_cd_w - cartridge data write
//-------------------------------------------------
-void vic1210_device::vic20_cd_w(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3)
+void vic1210_device::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)
{
if (!ram1 || !ram2 || !ram3)
{
diff --git a/src/devices/bus/vic20/vic1210.h b/src/devices/bus/vic20/vic1210.h
index 9fa0ea48a99..f890d5ad61e 100644
--- a/src/devices/bus/vic20/vic1210.h
+++ b/src/devices/bus/vic20/vic1210.h
@@ -34,8 +34,8 @@ protected:
virtual void device_start() override;
// device_vic20_expansion_card_interface overrides
- virtual uint8_t vic20_cd_r(address_space &space, 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(address_space &space, 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 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:
optional_shared_ptr<uint8_t> m_ram;
diff --git a/src/devices/bus/vic20/videopak.cpp b/src/devices/bus/vic20/videopak.cpp
index 841d4265a1b..849f9a00a3b 100644
--- a/src/devices/bus/vic20/videopak.cpp
+++ b/src/devices/bus/vic20/videopak.cpp
@@ -97,14 +97,15 @@ GFXDECODE_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(vic20_video_pak_device::device_add_mconfig)
- MCFG_SCREEN_ADD_MONOCHROME(MC6845_SCREEN_TAG, RASTER, rgb_t::white())
- MCFG_SCREEN_UPDATE_DEVICE(MC6845_TAG, h46505_device, screen_update)
- MCFG_SCREEN_SIZE(80*8, 24*8)
- MCFG_SCREEN_VISIBLE_AREA(0, 80*8-1, 0, 24*8-1)
- MCFG_SCREEN_REFRESH_RATE(50)
-
- MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_vic20_video_pak)
+void vic20_video_pak_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, MC6845_SCREEN_TAG, SCREEN_TYPE_RASTER, rgb_t::white()));
+ screen.set_screen_update(MC6845_TAG, FUNC(h46505_device::screen_update));
+ screen.set_size(80*8, 24*8);
+ screen.set_visarea(0, 80*8-1, 0, 24*8-1);
+ screen.set_refresh_hz(50);
+
+ GFXDECODE(config, "gfxdecode", m_palette, gfx_vic20_video_pak);
PALETTE(config, m_palette, palette_device::MONOCHROME);
H46505(config, m_crtc, XTAL(14'318'181) / 8);
@@ -112,7 +113,7 @@ MACHINE_CONFIG_START(vic20_video_pak_device::device_add_mconfig)
m_crtc->set_show_border_area(true);
m_crtc->set_char_width(8);
m_crtc->set_update_row_callback(FUNC(vic20_video_pak_device::crtc_update_row), this);
-MACHINE_CONFIG_END
+}
@@ -161,7 +162,7 @@ void vic20_video_pak_device::device_reset()
// vic20_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t vic20_video_pak_device::vic20_cd_r(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3)
+uint8_t vic20_video_pak_device::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)
{
if (!m_ram_enable)
{
@@ -220,7 +221,7 @@ uint8_t vic20_video_pak_device::vic20_cd_r(address_space &space, offs_t offset,
{
if (offset == 0x1bf9)
{
- data = m_crtc->register_r(space, 0);
+ data = m_crtc->register_r();
}
}
@@ -232,7 +233,7 @@ uint8_t vic20_video_pak_device::vic20_cd_r(address_space &space, offs_t offset,
// vic20_cd_w - cartridge data write
//-------------------------------------------------
-void vic20_video_pak_device::vic20_cd_w(address_space &space, offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3)
+void vic20_video_pak_device::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)
{
if (!m_ram_enable)
{
@@ -292,11 +293,11 @@ void vic20_video_pak_device::vic20_cd_w(address_space &space, offs_t offset, uin
switch (offset)
{
case 0x1bf8:
- m_crtc->address_w(space, 0, data);
+ m_crtc->address_w(data);
break;
case 0x1bf9:
- m_crtc->register_w(space, 0, data);
+ m_crtc->register_w(data);
break;
case 0x1bfc:
diff --git a/src/devices/bus/vic20/videopak.h b/src/devices/bus/vic20/videopak.h
index def121f2c55..084e57689dc 100644
--- a/src/devices/bus/vic20/videopak.h
+++ b/src/devices/bus/vic20/videopak.h
@@ -42,8 +42,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_vic20_expansion_card_interface overrides
- virtual uint8_t vic20_cd_r(address_space &space, 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(address_space &space, 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 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:
MC6845_UPDATE_ROW( crtc_update_row );
diff --git a/src/devices/bus/vidbrain/exp.cpp b/src/devices/bus/vidbrain/exp.cpp
index c490c0605b2..808907678cc 100644
--- a/src/devices/bus/vidbrain/exp.cpp
+++ b/src/devices/bus/vidbrain/exp.cpp
@@ -153,13 +153,13 @@ std::string videobrain_expansion_slot_device::get_default_card_software(get_defa
// bo_r - cartridge data read
//-------------------------------------------------
-uint8_t videobrain_expansion_slot_device::bo_r(address_space &space, offs_t offset, int cs1, int cs2)
+uint8_t videobrain_expansion_slot_device::bo_r(offs_t offset, int cs1, int cs2)
{
uint8_t data = 0;
if (m_cart != nullptr)
{
- data = m_cart->videobrain_bo_r(space, offset, cs1, cs2);
+ data = m_cart->videobrain_bo_r(offset, cs1, cs2);
}
return data;
@@ -170,11 +170,11 @@ uint8_t videobrain_expansion_slot_device::bo_r(address_space &space, offs_t offs
// bo_w - cartridge data write
//-------------------------------------------------
-void videobrain_expansion_slot_device::bo_w(address_space &space, offs_t offset, uint8_t data, int cs1, int cs2)
+void videobrain_expansion_slot_device::bo_w(offs_t offset, uint8_t data, int cs1, int cs2)
{
if (m_cart != nullptr)
{
- m_cart->videobrain_bo_w(space, offset, data, cs1, cs2);
+ m_cart->videobrain_bo_w(offset, data, cs1, cs2);
}
}
diff --git a/src/devices/bus/vidbrain/exp.h b/src/devices/bus/vidbrain/exp.h
index fdb4b6a6ac7..e841df6c32c 100644
--- a/src/devices/bus/vidbrain/exp.h
+++ b/src/devices/bus/vidbrain/exp.h
@@ -49,21 +49,6 @@
#define VIDEOBRAIN_EXPANSION_SLOT_TAG "exp"
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_VIDEOBRAIN_EXPANSION_SLOT_ADD(_tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, VIDEOBRAIN_EXPANSION_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-
-#define MCFG_VIDEOBRAIN_EXPANSION_SLOT_EXTRES_CALLBACK(_write) \
- downcast<videobrain_expansion_slot_device &>(*device).set_extres_wr_callback(DEVCB_##_write);
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -88,8 +73,8 @@ protected:
virtual uint8_t* videobrain_ram_pointer(running_machine &machine, size_t size);
// runtime
- virtual uint8_t videobrain_bo_r(address_space &space, offs_t offset, int cs1, int cs2) { return 0; }
- virtual void videobrain_bo_w(address_space &space, offs_t offset, uint8_t data, int cs1, int cs2) { }
+ virtual uint8_t videobrain_bo_r(offs_t offset, int cs1, int cs2) { return 0; }
+ virtual void videobrain_bo_w(offs_t offset, uint8_t data, int cs1, int cs2) { }
virtual void videobrain_extres_w() { }
videobrain_expansion_slot_device *m_slot;
@@ -110,20 +95,29 @@ class videobrain_expansion_slot_device : public device_t,
{
public:
// construction/destruction
- videobrain_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
- template <class Object> devcb_base &set_extres_wr_callback(Object &&cb) { return m_write_extres.set_callback(std::forward<Object>(cb)); }
+ template <typename T>
+ videobrain_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts, char const* dflt)
+ : videobrain_expansion_slot_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+ videobrain_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+
+ auto extres_wr_callback() { return m_write_extres.bind(); }
// computer interface
- uint8_t bo_r(address_space &space, offs_t offset, int cs1, int cs2);
- void bo_w(address_space &space, offs_t offset, uint8_t data, int cs1, int cs2);
-
- DECLARE_READ8_MEMBER( cs1_r ) { return bo_r(space, offset + 0x1000, 0, 1); }
- DECLARE_WRITE8_MEMBER( cs1_w ) { bo_w(space, offset + 0x1000, data, 0, 1); }
- DECLARE_READ8_MEMBER( cs2_r ) { return bo_r(space, offset + 0x1800, 1, 0); }
- DECLARE_WRITE8_MEMBER( cs2_w ) { bo_w(space, offset + 0x1800, data, 1, 0); }
- DECLARE_READ8_MEMBER( unmap_r ) { return bo_r(space, offset + 0x3000, 1, 0); }
- DECLARE_WRITE8_MEMBER( unmap_w ) { bo_w(space, offset + 0x3000, data, 1, 0); }
+ uint8_t bo_r(offs_t offset, int cs1, int cs2);
+ void bo_w(offs_t offset, uint8_t data, int cs1, int cs2);
+
+ uint8_t cs1_r(offs_t offset) { return bo_r(offset + 0x1000, 0, 1); }
+ void cs1_w(offs_t offset, uint8_t data) { bo_w(offset + 0x1000, data, 0, 1); }
+ uint8_t cs2_r(offs_t offset) { return bo_r(offset + 0x1800, 1, 0); }
+ void cs2_w(offs_t offset, uint8_t data) { bo_w(offset + 0x1800, data, 1, 0); }
+ uint8_t unmap_r(offs_t offset) { return bo_r(offset + 0x3000, 1, 0); }
+ void unmap_w(offs_t offset, uint8_t data) { bo_w(offset + 0x3000, data, 1, 0); }
// cartridge interface
DECLARE_WRITE_LINE_MEMBER( extres_w ) { m_write_extres(state); }
diff --git a/src/devices/bus/vidbrain/money_minder.cpp b/src/devices/bus/vidbrain/money_minder.cpp
index 81220a499b6..b0f4826ca5d 100644
--- a/src/devices/bus/vidbrain/money_minder.cpp
+++ b/src/devices/bus/vidbrain/money_minder.cpp
@@ -47,7 +47,7 @@ void videobrain_money_minder_cartridge_device::device_start()
// videobrain_cd_r - cartridge data read
//-------------------------------------------------
-uint8_t videobrain_money_minder_cartridge_device::videobrain_bo_r(address_space &space, offs_t offset, int cs1, int cs2)
+uint8_t videobrain_money_minder_cartridge_device::videobrain_bo_r(offs_t offset, int cs1, int cs2)
{
uint8_t data = 0;
@@ -68,7 +68,7 @@ uint8_t videobrain_money_minder_cartridge_device::videobrain_bo_r(address_space
// videobrain_bo_w - cartridge data write
//-------------------------------------------------
-void videobrain_money_minder_cartridge_device::videobrain_bo_w(address_space &space, offs_t offset, uint8_t data, int cs1, int cs2)
+void videobrain_money_minder_cartridge_device::videobrain_bo_w(offs_t offset, uint8_t data, int cs1, int cs2)
{
if (offset >= 0x3800)
{
diff --git a/src/devices/bus/vidbrain/money_minder.h b/src/devices/bus/vidbrain/money_minder.h
index 20ead06960e..23f219c4962 100644
--- a/src/devices/bus/vidbrain/money_minder.h
+++ b/src/devices/bus/vidbrain/money_minder.h
@@ -33,8 +33,8 @@ protected:
virtual void device_start() override;
// device_videobrain_expansion_card_interface overrides
- virtual uint8_t videobrain_bo_r(address_space &space, offs_t offset, int cs1, int cs2) override;
- virtual void videobrain_bo_w(address_space &space, offs_t offset, uint8_t data, int cs1, int cs2) override;
+ virtual uint8_t videobrain_bo_r(offs_t offset, int cs1, int cs2) override;
+ virtual void videobrain_bo_w(offs_t offset, uint8_t data, int cs1, int cs2) override;
};
diff --git a/src/devices/bus/vidbrain/std.cpp b/src/devices/bus/vidbrain/std.cpp
index 82a6fc2761e..55b5c3ce22d 100644
--- a/src/devices/bus/vidbrain/std.cpp
+++ b/src/devices/bus/vidbrain/std.cpp
@@ -47,7 +47,7 @@ void videobrain_standard_cartridge_device::device_start()
// videobrain_bo_r - cartridge data read
//-------------------------------------------------
-uint8_t videobrain_standard_cartridge_device::videobrain_bo_r(address_space &space, offs_t offset, int cs1, int cs2)
+uint8_t videobrain_standard_cartridge_device::videobrain_bo_r(offs_t offset, int cs1, int cs2)
{
uint8_t data = 0;
diff --git a/src/devices/bus/vidbrain/std.h b/src/devices/bus/vidbrain/std.h
index 2dbbde3231f..7939501909f 100644
--- a/src/devices/bus/vidbrain/std.h
+++ b/src/devices/bus/vidbrain/std.h
@@ -33,7 +33,7 @@ protected:
virtual void device_start() override;
// device_videobrain_expansion_card_interface overrides
- virtual uint8_t videobrain_bo_r(address_space &space, offs_t offset, int cs1, int cs2) override;
+ virtual uint8_t videobrain_bo_r(offs_t offset, int cs1, int cs2) override;
};
diff --git a/src/devices/bus/vidbrain/timeshare.cpp b/src/devices/bus/vidbrain/timeshare.cpp
index f4997a55ddc..709f16f5c74 100644
--- a/src/devices/bus/vidbrain/timeshare.cpp
+++ b/src/devices/bus/vidbrain/timeshare.cpp
@@ -47,7 +47,7 @@ void videobrain_timeshare_cartridge_device::device_start()
// videobrain_bo_r - cartridge data read
//-------------------------------------------------
-uint8_t videobrain_timeshare_cartridge_device::videobrain_bo_r(address_space &space, offs_t offset, int cs1, int cs2)
+uint8_t videobrain_timeshare_cartridge_device::videobrain_bo_r(offs_t offset, int cs1, int cs2)
{
uint8_t data = 0;
@@ -67,7 +67,7 @@ uint8_t videobrain_timeshare_cartridge_device::videobrain_bo_r(address_space &sp
// videobrain_bo_w - cartridge data write
//-------------------------------------------------
-void videobrain_timeshare_cartridge_device::videobrain_bo_w(address_space &space, offs_t offset, uint8_t data, int cs1, int cs2)
+void videobrain_timeshare_cartridge_device::videobrain_bo_w(offs_t offset, uint8_t data, int cs1, int cs2)
{
if (!cs2)
{
diff --git a/src/devices/bus/vidbrain/timeshare.h b/src/devices/bus/vidbrain/timeshare.h
index 971c5674320..7885772149d 100644
--- a/src/devices/bus/vidbrain/timeshare.h
+++ b/src/devices/bus/vidbrain/timeshare.h
@@ -33,8 +33,8 @@ protected:
virtual void device_start() override;
// device_videobrain_expansion_card_interface overrides
- virtual uint8_t videobrain_bo_r(address_space &space, offs_t offset, int cs1, int cs2) override;
- virtual void videobrain_bo_w(address_space &space, offs_t offset, uint8_t data, int cs1, int cs2) override;
+ virtual uint8_t videobrain_bo_r(offs_t offset, int cs1, int cs2) override;
+ virtual void videobrain_bo_w(offs_t offset, uint8_t data, int cs1, int cs2) override;
};
diff --git a/src/devices/bus/vip/byteio.h b/src/devices/bus/vip/byteio.h
index d2190214a2d..f2b12ca49f2 100644
--- a/src/devices/bus/vip/byteio.h
+++ b/src/devices/bus/vip/byteio.h
@@ -45,18 +45,6 @@
#define VIP_BYTEIO_PORT_TAG "byteio"
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_VIP_BYTEIO_PORT_ADD(_tag, _slot_intf, _def_slot, _inst) \
- MCFG_DEVICE_ADD(_tag, VIP_BYTEIO_PORT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- downcast<vip_byteio_port_device *>(device)->set_inst_callback(DEVCB_##_inst);
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -70,9 +58,19 @@ class vip_byteio_port_device : public device_t,
{
public:
// construction/destruction
- vip_byteio_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
- template <class Object> void set_inst_callback(Object &&inst) { m_write_inst.set_callback(std::forward<Object>(inst)); }
+ template <typename T>
+ vip_byteio_port_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts, const char *dflt)
+ : vip_byteio_port_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ vip_byteio_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+
+ auto inst_callback() { return m_write_inst.bind(); }
// computer interface
uint8_t in_r();
diff --git a/src/devices/bus/vip/exp.cpp b/src/devices/bus/vip/exp.cpp
index 70467c57839..132a4d753ef 100644
--- a/src/devices/bus/vip/exp.cpp
+++ b/src/devices/bus/vip/exp.cpp
@@ -80,13 +80,13 @@ void vip_expansion_slot_device::device_start()
// program_r - program read
//-------------------------------------------------
-uint8_t vip_expansion_slot_device::program_r(address_space &space, offs_t offset, int cs, int cdef, int *minh)
+uint8_t vip_expansion_slot_device::program_r(offs_t offset, int cs, int cdef, int *minh)
{
uint8_t data = 0;
if (m_card != nullptr)
{
- data = m_card->vip_program_r(space, offset, cs, cdef, minh);
+ data = m_card->vip_program_r(offset, cs, cdef, minh);
}
return data;
@@ -97,11 +97,11 @@ uint8_t vip_expansion_slot_device::program_r(address_space &space, offs_t offset
// program_w - program write
//-------------------------------------------------
-void vip_expansion_slot_device::program_w(address_space &space, offs_t offset, uint8_t data, int cdef, int *minh)
+void vip_expansion_slot_device::program_w(offs_t offset, uint8_t data, int cdef, int *minh)
{
if (m_card != nullptr)
{
- m_card->vip_program_w(space, offset, data, cdef, minh);
+ m_card->vip_program_w(offset, data, cdef, minh);
}
}
@@ -110,13 +110,13 @@ void vip_expansion_slot_device::program_w(address_space &space, offs_t offset, u
// io_r - io read
//-------------------------------------------------
-uint8_t vip_expansion_slot_device::io_r(address_space &space, offs_t offset)
+uint8_t vip_expansion_slot_device::io_r(offs_t offset)
{
uint8_t data = 0;
if (m_card != nullptr)
{
- data = m_card->vip_io_r(space, offset);
+ data = m_card->vip_io_r(offset);
}
return data;
@@ -127,11 +127,11 @@ uint8_t vip_expansion_slot_device::io_r(address_space &space, offs_t offset)
// io_w - io write
//-------------------------------------------------
-void vip_expansion_slot_device::io_w(address_space &space, offs_t offset, uint8_t data)
+void vip_expansion_slot_device::io_w(offs_t offset, uint8_t data)
{
if (m_card != nullptr)
{
- m_card->vip_io_w(space, offset, data);
+ m_card->vip_io_w(offset, data);
}
}
@@ -140,13 +140,13 @@ void vip_expansion_slot_device::io_w(address_space &space, offs_t offset, uint8_
// dma_r - dma read
//-------------------------------------------------
-READ8_MEMBER(vip_expansion_slot_device::dma_r)
+uint8_t vip_expansion_slot_device::dma_r(offs_t offset)
{
uint8_t data = 0;
if (m_card != nullptr)
{
- data = m_card->vip_dma_r(space, offset);
+ data = m_card->vip_dma_r(offset);
}
return data;
@@ -157,11 +157,11 @@ READ8_MEMBER(vip_expansion_slot_device::dma_r)
// dma_w - dma write
//-------------------------------------------------
-WRITE8_MEMBER(vip_expansion_slot_device::dma_w)
+void vip_expansion_slot_device::dma_w(offs_t offset, uint8_t data)
{
if (m_card != nullptr)
{
- m_card->vip_dma_w(space, offset, data);
+ m_card->vip_dma_w(offset, data);
}
}
@@ -206,7 +206,7 @@ READ_LINE_MEMBER(vip_expansion_slot_device::ef4_r)
return state;
}
-WRITE8_MEMBER(vip_expansion_slot_device::sc_w)
+void vip_expansion_slot_device::sc_w(offs_t offset, uint8_t data)
{
if (m_card != nullptr)
m_card->vip_sc_w(offset, data);
diff --git a/src/devices/bus/vip/exp.h b/src/devices/bus/vip/exp.h
index dfca23fc038..9073dafee0d 100644
--- a/src/devices/bus/vip/exp.h
+++ b/src/devices/bus/vip/exp.h
@@ -46,27 +46,6 @@
#define VIP_EXPANSION_SLOT_TAG "exp"
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_VIP_EXPANSION_SLOT_ADD(_tag, _clock, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, VIP_EXPANSION_SLOT, _clock) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-
-#define MCFG_VIP_EXPANSION_SLOT_INT_CALLBACK(_write) \
- downcast<vip_expansion_slot_device &>(*device).set_int_wr_callback(DEVCB_##_write);
-
-#define MCFG_VIP_EXPANSION_SLOT_DMA_OUT_CALLBACK(_write) \
- downcast<vip_expansion_slot_device &>(*device).set_dma_out_wr_callback(DEVCB_##_write);
-
-#define MCFG_VIP_EXPANSION_SLOT_DMA_IN_CALLBACK(_write) \
- downcast<vip_expansion_slot_device &>(*device).set_dma_in_wr_callback(DEVCB_##_write);
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -80,24 +59,33 @@ class vip_expansion_slot_device : public device_t,
{
public:
// construction/destruction
+ template <typename T>
+ vip_expansion_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock, T &&opts, char const *dflt)
+ : vip_expansion_slot_device(mconfig, tag, owner, clock)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
vip_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- template <class Object> devcb_base &set_int_wr_callback(Object &&cb) { return m_write_int.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_dma_out_wr_callback(Object &&cb) { return m_write_dma_out.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_dma_in_wr_callback(Object &&cb) { return m_write_dma_in.set_callback(std::forward<Object>(cb)); }
+ auto int_wr_callback() { return m_write_int.bind(); }
+ auto dma_out_wr_callback() { return m_write_dma_out.bind(); }
+ auto dma_in_wr_callback() { return m_write_dma_in.bind(); }
// computer interface
- uint8_t program_r(address_space &space, offs_t offset, int cs, int cdef, int *minh);
- void program_w(address_space &space, offs_t offset, uint8_t data, int cdef, int *minh);
- uint8_t io_r(address_space &space, offs_t offset);
- void io_w(address_space &space, offs_t offset, uint8_t data);
- DECLARE_READ8_MEMBER(dma_r);
- DECLARE_WRITE8_MEMBER(dma_w);
+ uint8_t program_r(offs_t offset, int cs, int cdef, int *minh);
+ void program_w(offs_t offset, uint8_t data, int cdef, int *minh);
+ uint8_t io_r(offs_t offset);
+ void io_w(offs_t offset, uint8_t data);
+ uint8_t dma_r(offs_t offset);
+ void dma_w(offs_t offset, uint8_t data);
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
DECLARE_READ_LINE_MEMBER(ef1_r);
DECLARE_READ_LINE_MEMBER(ef3_r);
DECLARE_READ_LINE_MEMBER(ef4_r);
- DECLARE_WRITE8_MEMBER(sc_w);
+ void sc_w(offs_t offset, uint8_t data);
DECLARE_WRITE_LINE_MEMBER(q_w);
DECLARE_WRITE_LINE_MEMBER(tpb_w);
DECLARE_WRITE_LINE_MEMBER(run_w);
@@ -130,14 +118,14 @@ protected:
device_vip_expansion_card_interface(const machine_config &mconfig, device_t &device);
// runtime
- virtual uint8_t vip_program_r(address_space &space, offs_t offset, int cs, int cdef, int *minh) { return 0xff; }
- virtual void vip_program_w(address_space &space, offs_t offset, uint8_t data, int cdef, int *minh) { }
+ virtual uint8_t vip_program_r(offs_t offset, int cs, int cdef, int *minh) { return 0xff; }
+ virtual void vip_program_w(offs_t offset, uint8_t data, int cdef, int *minh) { }
- virtual uint8_t vip_io_r(address_space &space, offs_t offset) { return 0xff; }
- virtual void vip_io_w(address_space &space, offs_t offset, uint8_t data) { }
+ virtual uint8_t vip_io_r(offs_t offset) { return 0xff; }
+ virtual void vip_io_w(offs_t offset, uint8_t data) { }
- virtual uint8_t vip_dma_r(address_space &space, offs_t offset) { return 0xff; }
- virtual void vip_dma_w(address_space &space, offs_t offset, uint8_t data) { }
+ virtual uint8_t vip_dma_r(offs_t offset) { return 0xff; }
+ virtual void vip_dma_w(offs_t offset, uint8_t data) { }
virtual uint32_t vip_screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { return 0; }
diff --git a/src/devices/bus/vip/vp550.cpp b/src/devices/bus/vip/vp550.cpp
index a8285c53adc..6d1e36f57d7 100644
--- a/src/devices/bus/vip/vp550.cpp
+++ b/src/devices/bus/vip/vp550.cpp
@@ -47,7 +47,7 @@ DEFINE_DEVICE_TYPE(VP550, vp550_device, "vp550", "VP-550 Super Sound")
//-------------------------------------------------
-// MACHINE_CONFIG_START( vp550 )
+// machine_config( vp550 )
//-------------------------------------------------
void vp550_device::device_add_mconfig(machine_config &config)
@@ -112,7 +112,7 @@ void vp550_device::device_timer(emu_timer &timer, device_timer_id id, int param,
// vip_program_w - program write
//-------------------------------------------------
-void vp550_device::vip_program_w(address_space &space, offs_t offset, uint8_t data, int cdef, int *minh)
+void vp550_device::vip_program_w(offs_t offset, uint8_t data, int cdef, int *minh)
{
if (BIT(offset, 15))
{
@@ -122,14 +122,14 @@ void vp550_device::vip_program_w(address_space &space, offs_t offset, uint8_t da
{
case 1: m_pfg_a->write_str(data); break;
case 2: m_pfg_b->write_str(data); break;
- case 3: octave_w(space, offset, data); break;
+ case 3: octave_w(data); break;
}
switch ((offset >> 4) & 0x03)
{
- case 1: vlmna_w(space, offset, data); break;
- case 2: vlmnb_w(space, offset, data); break;
- case 3: sync_w(space, offset, data); break;
+ case 1: vlmna_w(data); break;
+ case 2: vlmnb_w(data); break;
+ case 3: sync_w(data); break;
}
}
}
@@ -179,7 +179,7 @@ void vp550_device::vip_run_w(int state)
// octave_w - octave select write
//-------------------------------------------------
-WRITE8_MEMBER( vp550_device::octave_w )
+void vp550_device::octave_w(uint8_t data)
{
int channel = (data >> 2) & 0x03;
int clock2 = 0;
@@ -209,7 +209,7 @@ WRITE8_MEMBER( vp550_device::octave_w )
// vlmna_w - channel A amplitude write
//-------------------------------------------------
-WRITE8_MEMBER( vp550_device::vlmna_w )
+void vp550_device::vlmna_w(uint8_t data)
{
if (LOG) logerror("VP550 '%s' A Volume: %u\n", tag(), data & 0x0f);
@@ -223,7 +223,7 @@ WRITE8_MEMBER( vp550_device::vlmna_w )
// vlmnb_w - channel B amplitude write
//-------------------------------------------------
-WRITE8_MEMBER( vp550_device::vlmnb_w )
+void vp550_device::vlmnb_w(uint8_t data)
{
if (LOG) logerror("VP550 '%s' B Volume: %u\n", tag(), data & 0x0f);
@@ -237,7 +237,7 @@ WRITE8_MEMBER( vp550_device::vlmnb_w )
// sync_w - interrupt enable write
//-------------------------------------------------
-WRITE8_MEMBER( vp550_device::sync_w )
+void vp550_device::sync_w(uint8_t data)
{
if (LOG) logerror("VP550 '%s' Interrupt Enable: %u\n", tag(), BIT(data, 0));
diff --git a/src/devices/bus/vip/vp550.h b/src/devices/bus/vip/vp550.h
index 20b2cf8e8de..d881063ba2c 100644
--- a/src/devices/bus/vip/vp550.h
+++ b/src/devices/bus/vip/vp550.h
@@ -36,16 +36,16 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_vip_expansion_card_interface overrides
- virtual void vip_program_w(address_space &space, offs_t offset, uint8_t data, int cdef, int *minh) override;
+ virtual void vip_program_w(offs_t offset, uint8_t data, int cdef, int *minh) override;
virtual void vip_sc_w(int n, int sc) override;
virtual void vip_q_w(int state) override;
virtual void vip_run_w(int state) override;
private:
- DECLARE_WRITE8_MEMBER( octave_w );
- DECLARE_WRITE8_MEMBER( vlmna_w );
- DECLARE_WRITE8_MEMBER( vlmnb_w );
- DECLARE_WRITE8_MEMBER( sync_w );
+ void octave_w(uint8_t data);
+ void vlmna_w(uint8_t data);
+ void vlmnb_w(uint8_t data);
+ void sync_w(uint8_t data);
required_device<cdp1863_device> m_pfg_a;
required_device<cdp1863_device> m_pfg_b;
diff --git a/src/devices/bus/vip/vp570.cpp b/src/devices/bus/vip/vp570.cpp
index e01d427649b..f9473bd2f87 100644
--- a/src/devices/bus/vip/vp570.cpp
+++ b/src/devices/bus/vip/vp570.cpp
@@ -84,7 +84,7 @@ void vp570_device::device_start()
// vip_program_r - program read
//-------------------------------------------------
-uint8_t vp570_device::vip_program_r(address_space &space, offs_t offset, int cs, int cdef, int *minh)
+uint8_t vp570_device::vip_program_r(offs_t offset, int cs, int cdef, int *minh)
{
uint8_t data = 0xff;
@@ -105,7 +105,7 @@ uint8_t vp570_device::vip_program_r(address_space &space, offs_t offset, int cs,
// vip_program_w - program write
//-------------------------------------------------
-void vp570_device::vip_program_w(address_space &space, offs_t offset, uint8_t data, int cdef, int *minh)
+void vp570_device::vip_program_w(offs_t offset, uint8_t data, int cdef, int *minh)
{
offs_t base = m_base->read() << 12;
diff --git a/src/devices/bus/vip/vp570.h b/src/devices/bus/vip/vp570.h
index 004be88a8bf..04ad752d804 100644
--- a/src/devices/bus/vip/vp570.h
+++ b/src/devices/bus/vip/vp570.h
@@ -36,8 +36,8 @@ protected:
virtual void device_start() override;
// device_vip_expansion_card_interface overrides
- virtual uint8_t vip_program_r(address_space &space, offs_t offset, int cs, int cdef, int *minh) override;
- virtual void vip_program_w(address_space &space, offs_t offset, uint8_t data, int cdef, int *minh) override;
+ virtual uint8_t vip_program_r(offs_t offset, int cs, int cdef, int *minh) override;
+ virtual void vip_program_w(offs_t offset, uint8_t data, int cdef, int *minh) override;
private:
optional_shared_ptr<uint8_t> m_ram;
diff --git a/src/devices/bus/vip/vp575.cpp b/src/devices/bus/vip/vp575.cpp
index c69ccc5bade..685c05be7c6 100644
--- a/src/devices/bus/vip/vp575.cpp
+++ b/src/devices/bus/vip/vp575.cpp
@@ -42,35 +42,36 @@ void vp575_device::update_interrupts()
//-------------------------------------------------
-// MACHINE_CONFIG_START( vp575 )
+// machine_config( vp575 )
//-------------------------------------------------
-MACHINE_CONFIG_START(vp575_device::device_add_mconfig)
- MCFG_VIP_EXPANSION_SLOT_ADD("exp1", XTAL(3'521'280)/2, vip_expansion_cards, nullptr)
- MCFG_VIP_EXPANSION_SLOT_INT_CALLBACK(WRITELINE(*this, vp575_device, exp1_int_w))
- MCFG_VIP_EXPANSION_SLOT_DMA_OUT_CALLBACK(WRITELINE(*this, vp575_device, exp1_dma_out_w))
- MCFG_VIP_EXPANSION_SLOT_DMA_IN_CALLBACK(WRITELINE(*this, vp575_device, exp1_dma_in_w))
-
- MCFG_VIP_EXPANSION_SLOT_ADD("exp2", XTAL(3'521'280)/2, vip_expansion_cards, nullptr)
- MCFG_VIP_EXPANSION_SLOT_INT_CALLBACK(WRITELINE(*this, vp575_device, exp2_int_w))
- MCFG_VIP_EXPANSION_SLOT_DMA_OUT_CALLBACK(WRITELINE(*this, vp575_device, exp2_dma_out_w))
- MCFG_VIP_EXPANSION_SLOT_DMA_IN_CALLBACK(WRITELINE(*this, vp575_device, exp2_dma_in_w))
-
- MCFG_VIP_EXPANSION_SLOT_ADD("exp3", XTAL(3'521'280)/2, vip_expansion_cards, nullptr)
- MCFG_VIP_EXPANSION_SLOT_INT_CALLBACK(WRITELINE(*this, vp575_device, exp3_int_w))
- MCFG_VIP_EXPANSION_SLOT_DMA_OUT_CALLBACK(WRITELINE(*this, vp575_device, exp3_dma_out_w))
- MCFG_VIP_EXPANSION_SLOT_DMA_IN_CALLBACK(WRITELINE(*this, vp575_device, exp3_dma_in_w))
-
- MCFG_VIP_EXPANSION_SLOT_ADD("exp4", XTAL(3'521'280)/2, vip_expansion_cards, nullptr)
- MCFG_VIP_EXPANSION_SLOT_INT_CALLBACK(WRITELINE(*this, vp575_device, exp4_int_w))
- MCFG_VIP_EXPANSION_SLOT_DMA_OUT_CALLBACK(WRITELINE(*this, vp575_device, exp4_dma_out_w))
- MCFG_VIP_EXPANSION_SLOT_DMA_IN_CALLBACK(WRITELINE(*this, vp575_device, exp4_dma_in_w))
-
- MCFG_VIP_EXPANSION_SLOT_ADD("exp5", XTAL(3'521'280)/2, vip_expansion_cards, nullptr)
- MCFG_VIP_EXPANSION_SLOT_INT_CALLBACK(WRITELINE(*this, vp575_device, exp5_int_w))
- MCFG_VIP_EXPANSION_SLOT_DMA_OUT_CALLBACK(WRITELINE(*this, vp575_device, exp5_dma_out_w))
- MCFG_VIP_EXPANSION_SLOT_DMA_IN_CALLBACK(WRITELINE(*this, vp575_device, exp5_dma_in_w))
-MACHINE_CONFIG_END
+void vp575_device::device_add_mconfig(machine_config &config)
+{
+ VIP_EXPANSION_SLOT(config, m_expansion_slot[0], XTAL(3'521'280)/2, vip_expansion_cards, nullptr);
+ m_expansion_slot[0]->int_wr_callback().set(FUNC(vp575_device::exp1_int_w));
+ m_expansion_slot[0]->dma_out_wr_callback().set(FUNC(vp575_device::exp1_dma_out_w));
+ m_expansion_slot[0]->dma_in_wr_callback().set(FUNC(vp575_device::exp1_dma_in_w));
+
+ VIP_EXPANSION_SLOT(config, m_expansion_slot[1], XTAL(3'521'280)/2, vip_expansion_cards, nullptr);
+ m_expansion_slot[1]->int_wr_callback().set(FUNC(vp575_device::exp2_int_w));
+ m_expansion_slot[1]->dma_out_wr_callback().set(FUNC(vp575_device::exp2_dma_out_w));
+ m_expansion_slot[1]->dma_in_wr_callback().set(FUNC(vp575_device::exp2_dma_in_w));
+
+ VIP_EXPANSION_SLOT(config, m_expansion_slot[2], XTAL(3'521'280)/2, vip_expansion_cards, nullptr);
+ m_expansion_slot[2]->int_wr_callback().set(FUNC(vp575_device::exp3_int_w));
+ m_expansion_slot[2]->dma_out_wr_callback().set(FUNC(vp575_device::exp3_dma_out_w));
+ m_expansion_slot[2]->dma_in_wr_callback().set(FUNC(vp575_device::exp3_dma_in_w));
+
+ VIP_EXPANSION_SLOT(config, m_expansion_slot[3], XTAL(3'521'280)/2, vip_expansion_cards, nullptr);
+ m_expansion_slot[3]->int_wr_callback().set(FUNC(vp575_device::exp4_int_w));
+ m_expansion_slot[3]->dma_out_wr_callback().set(FUNC(vp575_device::exp4_dma_out_w));
+ m_expansion_slot[3]->dma_in_wr_callback().set(FUNC(vp575_device::exp4_dma_in_w));
+
+ VIP_EXPANSION_SLOT(config, m_expansion_slot[4], XTAL(3'521'280)/2, vip_expansion_cards, nullptr);
+ m_expansion_slot[4]->int_wr_callback().set(FUNC(vp575_device::exp5_int_w));
+ m_expansion_slot[4]->dma_out_wr_callback().set(FUNC(vp575_device::exp5_dma_out_w));
+ m_expansion_slot[4]->dma_in_wr_callback().set(FUNC(vp575_device::exp5_dma_in_w));
+}
@@ -109,13 +110,13 @@ void vp575_device::device_start()
// vip_program_r - program read
//-------------------------------------------------
-uint8_t vp575_device::vip_program_r(address_space &space, offs_t offset, int cs, int cdef, int *minh)
+uint8_t vp575_device::vip_program_r(offs_t offset, int cs, int cdef, int *minh)
{
uint8_t data = 0xff;
for (auto & elem : m_expansion_slot)
{
- data &= elem->program_r(space, offset, cs, cdef, minh);
+ data &= elem->program_r(offset, cs, cdef, minh);
}
return data;
@@ -126,11 +127,11 @@ uint8_t vp575_device::vip_program_r(address_space &space, offs_t offset, int cs,
// vip_program_w - program write
//-------------------------------------------------
-void vp575_device::vip_program_w(address_space &space, offs_t offset, uint8_t data, int cdef, int *minh)
+void vp575_device::vip_program_w(offs_t offset, uint8_t data, int cdef, int *minh)
{
for (auto & elem : m_expansion_slot)
{
- elem->program_w(space, offset, data, cdef, minh);
+ elem->program_w(offset, data, cdef, minh);
}
}
@@ -139,13 +140,13 @@ void vp575_device::vip_program_w(address_space &space, offs_t offset, uint8_t da
// vip_io_r - I/O read
//-------------------------------------------------
-uint8_t vp575_device::vip_io_r(address_space &space, offs_t offset)
+uint8_t vp575_device::vip_io_r(offs_t offset)
{
uint8_t data = 0xff;
for (auto & elem : m_expansion_slot)
{
- data &= elem->io_r(space, offset);
+ data &= elem->io_r(offset);
}
return data;
@@ -156,11 +157,11 @@ uint8_t vp575_device::vip_io_r(address_space &space, offs_t offset)
// vip_io_w - I/O write
//-------------------------------------------------
-void vp575_device::vip_io_w(address_space &space, offs_t offset, uint8_t data)
+void vp575_device::vip_io_w(offs_t offset, uint8_t data)
{
for (auto & elem : m_expansion_slot)
{
- elem->io_w(space, offset, data);
+ elem->io_w(offset, data);
}
}
@@ -169,13 +170,13 @@ void vp575_device::vip_io_w(address_space &space, offs_t offset, uint8_t data)
// vip_dma_r - DMA read
//-------------------------------------------------
-uint8_t vp575_device::vip_dma_r(address_space &space, offs_t offset)
+uint8_t vp575_device::vip_dma_r(offs_t offset)
{
uint8_t data = 0xff;
for (auto & elem : m_expansion_slot)
{
- data &= elem->dma_r(space, offset);
+ data &= elem->dma_r(offset);
}
return data;
@@ -186,11 +187,11 @@ uint8_t vp575_device::vip_dma_r(address_space &space, offs_t offset)
// vip_dma_w - DMA write
//-------------------------------------------------
-void vp575_device::vip_dma_w(address_space &space, offs_t offset, uint8_t data)
+void vp575_device::vip_dma_w(offs_t offset, uint8_t data)
{
for (auto & elem : m_expansion_slot)
{
- elem->dma_w(space, offset, data);
+ elem->dma_w(offset, data);
}
}
@@ -269,10 +270,9 @@ int vp575_device::vip_ef4_r()
void vp575_device::vip_sc_w(int n, int sc)
{
- address_space &space = machine().dummy_space();
for (auto & elem : m_expansion_slot)
{
- elem->sc_w(space, n, sc);
+ elem->sc_w(n, sc);
}
}
diff --git a/src/devices/bus/vip/vp575.h b/src/devices/bus/vip/vp575.h
index 41a18053276..fb5c22f5628 100644
--- a/src/devices/bus/vip/vp575.h
+++ b/src/devices/bus/vip/vp575.h
@@ -34,12 +34,12 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_vip_expansion_card_interface overrides
- virtual uint8_t vip_program_r(address_space &space, offs_t offset, int cs, int cdef, int *minh) override;
- virtual void vip_program_w(address_space &space, offs_t offset, uint8_t data, int cdef, int *minh) override;
- virtual uint8_t vip_io_r(address_space &space, offs_t offset) override;
- virtual void vip_io_w(address_space &space, offs_t offset, uint8_t data) override;
- virtual uint8_t vip_dma_r(address_space &space, offs_t offset) override;
- virtual void vip_dma_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual uint8_t vip_program_r(offs_t offset, int cs, int cdef, int *minh) override;
+ virtual void vip_program_w(offs_t offset, uint8_t data, int cdef, int *minh) override;
+ virtual uint8_t vip_io_r(offs_t offset) override;
+ virtual void vip_io_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t vip_dma_r(offs_t offset) override;
+ virtual void vip_dma_w(offs_t offset, uint8_t data) override;
virtual uint32_t vip_screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) override;
virtual int vip_ef1_r() override;
virtual int vip_ef3_r() override;
diff --git a/src/devices/bus/vip/vp585.cpp b/src/devices/bus/vip/vp585.cpp
index 47a1115097a..2112637ae6b 100644
--- a/src/devices/bus/vip/vp585.cpp
+++ b/src/devices/bus/vip/vp585.cpp
@@ -105,7 +105,7 @@ void vp585_device::device_start()
// vip_io_w - I/O write
//-------------------------------------------------
-void vp585_device::vip_io_w(address_space &space, offs_t offset, uint8_t data)
+void vp585_device::vip_io_w(offs_t offset, uint8_t data)
{
if (offset == 0x02)
{
diff --git a/src/devices/bus/vip/vp585.h b/src/devices/bus/vip/vp585.h
index a3511def5d0..f32bf055e91 100644
--- a/src/devices/bus/vip/vp585.h
+++ b/src/devices/bus/vip/vp585.h
@@ -36,7 +36,7 @@ protected:
virtual void device_start() override;
// device_vip_expansion_card_interface overrides
- virtual void vip_io_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual void vip_io_w(offs_t offset, uint8_t data) override;
virtual int vip_ef3_r() override;
virtual int vip_ef4_r() override;
diff --git a/src/devices/bus/vip/vp590.cpp b/src/devices/bus/vip/vp590.cpp
index 0f7599f6f99..3fd9185c5d1 100644
--- a/src/devices/bus/vip/vp590.cpp
+++ b/src/devices/bus/vip/vp590.cpp
@@ -50,10 +50,11 @@ READ_LINE_MEMBER( vp590_device::gd_r )
//-------------------------------------------------
-// MACHINE_CONFIG_START( vp590 )
+// machine_config( vp590 )
//-------------------------------------------------
-MACHINE_CONFIG_START(vp590_device::device_add_mconfig)
+void vp590_device::device_add_mconfig(machine_config &config)
+{
CDP1862(config, m_cgc, 7.15909_MHz_XTAL);
m_cgc->rdata_cb().set(FUNC(vp590_device::rd_r));
m_cgc->bdata_cb().set(FUNC(vp590_device::bd_r));
@@ -61,7 +62,7 @@ MACHINE_CONFIG_START(vp590_device::device_add_mconfig)
m_cgc->set_luminance(RES_R(510), RES_R(360), RES_K(1), RES_K(1.5)); // R3, R4, R5, R6
m_cgc->set_chrominance(RES_K(3.9), RES_K(10), RES_K(2), RES_K(3.3)); // R7, R8, R9, R10
m_cgc->set_screen(SCREEN_TAG);
-MACHINE_CONFIG_END
+}
//-------------------------------------------------
@@ -158,7 +159,7 @@ void vp590_device::device_start()
// vip_program_w - program write
//-------------------------------------------------
-void vp590_device::vip_program_w(address_space &space, offs_t offset, uint8_t data, int cdef, int *minh)
+void vp590_device::vip_program_w(offs_t offset, uint8_t data, int cdef, int *minh)
{
if (offset >= 0xc000 && offset < 0xe000)
{
@@ -184,7 +185,7 @@ void vp590_device::vip_program_w(address_space &space, offs_t offset, uint8_t da
// vip_io_w - I/O write
//-------------------------------------------------
-void vp590_device::vip_io_w(address_space &space, offs_t offset, uint8_t data)
+void vp590_device::vip_io_w(offs_t offset, uint8_t data)
{
switch (offset)
{
@@ -204,7 +205,7 @@ void vp590_device::vip_io_w(address_space &space, offs_t offset, uint8_t data)
// vip_dma_w - DMA write
//-------------------------------------------------
-void vp590_device::vip_dma_w(address_space &space, offs_t offset, uint8_t data)
+void vp590_device::vip_dma_w(offs_t offset, uint8_t data)
{
uint8_t mask = 0xff;
@@ -216,7 +217,7 @@ void vp590_device::vip_dma_w(address_space &space, offs_t offset, uint8_t data)
m_color = m_color_ram[offset & mask];
- m_cgc->dma_w(space, offset, data);
+ m_cgc->dma_w(data);
}
diff --git a/src/devices/bus/vip/vp590.h b/src/devices/bus/vip/vp590.h
index 2dfdece5ab7..230b7d8d02d 100644
--- a/src/devices/bus/vip/vp590.h
+++ b/src/devices/bus/vip/vp590.h
@@ -37,9 +37,9 @@ protected:
virtual ioport_constructor device_input_ports() const override;
// device_vip_expansion_card_interface overrides
- virtual void vip_program_w(address_space &space, offs_t offset, uint8_t data, int cdef, int *minh) override;
- virtual void vip_io_w(address_space &space, offs_t offset, uint8_t data) override;
- virtual void vip_dma_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual void vip_program_w(offs_t offset, uint8_t data, int cdef, int *minh) override;
+ virtual void vip_io_w(offs_t offset, uint8_t data) override;
+ virtual void vip_dma_w(offs_t offset, uint8_t data) override;
virtual uint32_t vip_screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) override;
virtual int vip_ef3_r() override;
virtual int vip_ef4_r() override;
diff --git a/src/devices/bus/vip/vp595.cpp b/src/devices/bus/vip/vp595.cpp
index 0d8e2306182..1dab7f4a49f 100644
--- a/src/devices/bus/vip/vp595.cpp
+++ b/src/devices/bus/vip/vp595.cpp
@@ -30,7 +30,7 @@ DEFINE_DEVICE_TYPE(VP595, vp595_device, "vp595", "VP-595 Simple Sound")
//-------------------------------------------------
-// MACHINE_CONFIG_START( vp595 )
+// machine_config( vp595 )
//-------------------------------------------------
void vp595_device::device_add_mconfig(machine_config &config)
@@ -73,7 +73,7 @@ void vp595_device::device_start()
// vip_io_w - I/O write
//-------------------------------------------------
-void vp595_device::vip_io_w(address_space &space, offs_t offset, uint8_t data)
+void vp595_device::vip_io_w(offs_t offset, uint8_t data)
{
if (offset == 0x03)
{
diff --git a/src/devices/bus/vip/vp595.h b/src/devices/bus/vip/vp595.h
index 9de9c8a6071..5c98b33fe7c 100644
--- a/src/devices/bus/vip/vp595.h
+++ b/src/devices/bus/vip/vp595.h
@@ -35,7 +35,7 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_vip_expansion_card_interface overrides
- virtual void vip_io_w(address_space &space, offs_t offset, uint8_t data) override;
+ virtual void vip_io_w(offs_t offset, uint8_t data) override;
virtual void vip_q_w(int state) override;
private:
diff --git a/src/devices/bus/vip/vp620.cpp b/src/devices/bus/vip/vp620.cpp
index 643a8856481..ba6a938f660 100644
--- a/src/devices/bus/vip/vp620.cpp
+++ b/src/devices/bus/vip/vp620.cpp
@@ -33,7 +33,7 @@ void vp620_device::kb_w(uint8_t data)
}
//-------------------------------------------------
-// MACHINE_CONFIG_START( vp620 )
+// machine_config( vp620 )
//-------------------------------------------------
void vp620_device::device_add_mconfig(machine_config &config)
diff --git a/src/devices/bus/vip/vp700.cpp b/src/devices/bus/vip/vp700.cpp
index 4b7dbab2839..f64574a23fc 100644
--- a/src/devices/bus/vip/vp700.cpp
+++ b/src/devices/bus/vip/vp700.cpp
@@ -67,7 +67,7 @@ void vp700_device::device_start()
// vip_program_r - program read
//-------------------------------------------------
-uint8_t vp700_device::vip_program_r(address_space &space, offs_t offset, int cs, int cdef, int *minh)
+uint8_t vp700_device::vip_program_r(offs_t offset, int cs, int cdef, int *minh)
{
uint8_t data = 0xff;
diff --git a/src/devices/bus/vip/vp700.h b/src/devices/bus/vip/vp700.h
index 16e7cd2f78e..4927005742e 100644
--- a/src/devices/bus/vip/vp700.h
+++ b/src/devices/bus/vip/vp700.h
@@ -37,7 +37,7 @@ protected:
virtual void device_start() override;
// device_vip_expansion_card_interface overrides
- virtual uint8_t vip_program_r(address_space &space, offs_t offset, int cs, int cdef, int *minh) override;
+ virtual uint8_t vip_program_r(offs_t offset, int cs, int cdef, int *minh) override;
private:
required_memory_region m_rom;
diff --git a/src/devices/bus/vme/vme.cpp b/src/devices/bus/vme/vme.cpp
index f6254e32366..757874abae2 100644
--- a/src/devices/bus/vme/vme.cpp
+++ b/src/devices/bus/vme/vme.cpp
@@ -329,6 +329,36 @@ void vme_device::install_device(vme_amod_t amod, offs_t start, offs_t end, read8
}
}
+void vme_device::install_device(vme_amod_t amod, offs_t start, offs_t end, read8sm_delegate rhandler, write8sm_delegate whandler, uint32_t mask)
+{
+ LOG("%s %s AM%d D%02x\n", tag(), FUNCNAME, amod, m_prgwidth);
+
+ LOG(" - width:%d\n", m_prgwidth);
+
+ // TODO: support address modifiers and buscycles other than single access cycles
+ switch(amod)
+ {
+ case A16_SC: break;
+ case A24_SC: break;
+ case A32_SC: break;
+ default: fatalerror("VME D8: Non supported Address modifier: AM%02x\n", amod);
+ }
+
+ switch(m_prgwidth)
+ {
+ case 16:
+ m_prgspace->install_readwrite_handler(start, end, rhandler, whandler, (uint16_t)(mask & 0x0000ffff));
+ break;
+ case 24:
+ m_prgspace->install_readwrite_handler(start, end, rhandler, whandler, (uint32_t)(mask & 0x00ffffff));
+ break;
+ case 32:
+ m_prgspace->install_readwrite_handler(start, end, rhandler, whandler, mask);
+ break;
+ default: fatalerror("VME D8: Bus width %d not supported\n", m_prgwidth);
+ }
+}
+
// D16 bit devices in A16, A24 and A32
void vme_device::install_device(vme_amod_t amod, offs_t start, offs_t end, read16_delegate rhandler, write16_delegate whandler, uint32_t mask)
{
diff --git a/src/devices/bus/vme/vme.h b/src/devices/bus/vme/vme.h
index a2b2ab944eb..755330f7689 100644
--- a/src/devices/bus/vme/vme.h
+++ b/src/devices/bus/vme/vme.h
@@ -57,10 +57,6 @@
#define VME_BUS_TAG "vme"
-// Callbacks to the board from the VME bus comes through here
-#define MCFG_VME_J1_CB(_devcb) \
- downcast<vme_slot_device &>(*device).set_vme_j1_callback(DEVCB_##_devcb);
-
//void vme_slot1(device_slot_interface &device); // Disabled until we know how to combine a board driver and a slot device.
void vme_slots(device_slot_interface &device);
@@ -89,9 +85,22 @@ public:
};
// construction/destruction
+ template <typename T>
+ vme_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt, uint32_t slot_nbr, char const *bus_tag)
+ : vme_slot_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ set_vme_slot(bus_tag, tag);
+ update_vme_chains(slot_nbr);
+ }
+
vme_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- template <class Object> devcb_base &set_vme_j1_callback(Object &&cb) { return m_vme_j1_callback.set_callback(std::forward<Object>(cb)); }
+ // Callbacks to the board from the VME bus comes through here
+ auto vme_j1_callback() { return m_vme_j1_callback.bind(); }
void set_vme_slot(const char *tag, const char *slottag);
void update_vme_chains(uint32_t slot_nbr);
@@ -116,18 +125,6 @@ protected:
DECLARE_DEVICE_TYPE(VME, vme_device)
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_VME_DEVICE_ADD(_tag) \
- MCFG_DEVICE_ADD(_tag, VME, 0)
-
-#define MCFG_VME_CPU(_cputag) \
- downcast<vme_device &>(*device).set_cputag(_cputag);
-
-#define MCFG_VME_BUS_OWNER_SPACES() \
- downcast<vme_device &>(*device).use_owner_spaces();
class vme_card_interface;
@@ -185,6 +182,7 @@ public:
AMOD_STANDARD_SUPERVIS_BLK = 0x3F
};
void install_device(vme_amod_t amod, offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler, uint32_t mask);
+ void install_device(vme_amod_t amod, offs_t start, offs_t end, read8sm_delegate rhandler, write8sm_delegate whandler, uint32_t mask);
// void install_device(vme_amod_t amod, offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler);
void install_device(vme_amod_t amod, offs_t start, offs_t end, read16_delegate rhandler, write16_delegate whandler, uint32_t mask);
void install_device(vme_amod_t amod, offs_t start, offs_t end, read32_delegate rhandler, write32_delegate whandler, uint32_t mask);
@@ -241,15 +239,4 @@ private:
device_vme_card_interface *m_next;
};
-#define MCFG_VME_SLOT_ADD(_tag, _slotnbr, _slot_intf,_def_slot) \
- { std::string stag = "slot" + std::to_string(_slotnbr); \
- MCFG_DEVICE_ADD(stag.c_str(), VME_SLOT, 0); \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false); \
- downcast<vme_slot_device &>(*device).set_vme_slot(_tag, stag.c_str()); \
- downcast<vme_slot_device &>(*device).update_vme_chains(_slotnbr); \
- }
-
-#define MCFG_VME_SLOT_REMOVE(_tag) \
- MCFG_DEVICE_REMOVE(_tag)
-
#endif // MAME_BUS_VME_VME_H
diff --git a/src/devices/bus/vme/vme_fccpu20.cpp b/src/devices/bus/vme/vme_fccpu20.cpp
index d6e6f075fe8..d6f5ab56d30 100644
--- a/src/devices/bus/vme/vme_fccpu20.cpp
+++ b/src/devices/bus/vme/vme_fccpu20.cpp
@@ -252,11 +252,12 @@ static DEVICE_INPUT_DEFAULTS_START( terminal )
DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_2 )
DEVICE_INPUT_DEFAULTS_END
-MACHINE_CONFIG_START(vme_fccpu20_device::device_add_mconfig)
+void vme_fccpu20_device::device_add_mconfig(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68020, CLOCK50 / 3) /* Crytstal verified from picture HCI */
- MCFG_DEVICE_PROGRAM_MAP (cpu20_mem)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("bim", bim68153_device, iack)
+ M68020(config, m_maincpu, CLOCK50 / 3); /* Crytstal verified from picture HCI */
+ m_maincpu->set_addrmap(AS_PROGRAM, &vme_fccpu20_device::cpu20_mem);
+ m_maincpu->set_irq_acknowledge_callback("bim", FUNC(bim68153_device::iack));
/* PIT Parallel Interface and Timer device, assumed strapped for on board clock */
PIT68230(config, m_pit, CLOCK32 / 4); /* Crystal not verified */
@@ -312,59 +313,60 @@ MACHINE_CONFIG_START(vme_fccpu20_device::device_add_mconfig)
rs232_port_device &rs232p3(RS232_PORT(config, RS232P3_TAG, default_rs232_devices, nullptr));
rs232p3.rxd_handler().set(m_mpcc3, FUNC(mpcc68561_device::write_rx));
rs232p3.cts_handler().set(m_mpcc3, FUNC(mpcc68561_device::cts_w));
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(vme_fccpu20_card_device::device_add_mconfig)
+void vme_fccpu20_card_device::device_add_mconfig(machine_config &config)
+{
vme_fccpu20_device::device_add_mconfig(config);
-MACHINE_CONFIG_END
+}
// SYS68K/CPU-21S Part No.1 01 041 - 68020 CPU board + FPU 68881 at 12.5 MHz, 512 KB RAM
-MACHINE_CONFIG_START(vme_fccpu21s_card_device::device_add_mconfig)
+void vme_fccpu21s_card_device::device_add_mconfig(machine_config &config)
+{
vme_fccpu20_device::device_add_mconfig(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_CLOCK(CLOCK50 / 4)
-MACHINE_CONFIG_END
+ m_maincpu->set_clock(CLOCK50 / 4);
+}
// SYS68K/CPU-21 Part No.1 01 001 - 68020 CPU board (CPU-20) + FPU 68881 at 16.7 MHz, 512 KB RAM
-MACHINE_CONFIG_START(vme_fccpu21_card_device::device_add_mconfig)
+void vme_fccpu21_card_device::device_add_mconfig(machine_config &config)
+{
vme_fccpu20_device::device_add_mconfig(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_CLOCK(CLOCK50 / 3)
-MACHINE_CONFIG_END
+ m_maincpu->set_clock(CLOCK50 / 3);
+}
// SYS68K/CPU-21A Part No.1 01 011 - 68020 CPU board + FPU 68881 at 20 MHz, 512 KB RAM
-MACHINE_CONFIG_START(vme_fccpu21a_card_device::device_add_mconfig)
+void vme_fccpu21a_card_device::device_add_mconfig(machine_config &config)
+{
vme_fccpu20_device::device_add_mconfig(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_CLOCK(CLOCK40 / 2)
-MACHINE_CONFIG_END
+ m_maincpu->set_clock(CLOCK40 / 2);
+}
// SYS68K/CPU-21YA Part No.1 01 061 - 68020 CPU board + FPU 68881 at 20 MHz, 2048 KB RAM
-MACHINE_CONFIG_START(vme_fccpu21ya_card_device::device_add_mconfig)
+void vme_fccpu21ya_card_device::device_add_mconfig(machine_config &config)
+{
vme_fccpu20_device::device_add_mconfig(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_CLOCK(CLOCK40 / 2)
-MACHINE_CONFIG_END
+ m_maincpu->set_clock(CLOCK40 / 2);
+}
// SYS68K/CPU-21B Part No.1 01 021 - 68020 CPU board + FPU 68881 at 25 MHz, 512 KB RAM
-MACHINE_CONFIG_START(vme_fccpu21b_card_device::device_add_mconfig)
+void vme_fccpu21b_card_device::device_add_mconfig(machine_config &config)
+{
vme_fccpu20_device::device_add_mconfig(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_CLOCK(CLOCK50 / 2)
-MACHINE_CONFIG_END
+ m_maincpu->set_clock(CLOCK50 / 2);
+}
// SYS68K/CPU-21YB Part No.1 01 071 - 68020 CPU board + FPU 68881 at 25 MHz, 2048 KB RAM
-MACHINE_CONFIG_START(vme_fccpu21yb_card_device::device_add_mconfig)
+void vme_fccpu21yb_card_device::device_add_mconfig(machine_config &config)
+{
vme_fccpu20_device::device_add_mconfig(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_CLOCK(CLOCK50 / 2)
-MACHINE_CONFIG_END
+ m_maincpu->set_clock(CLOCK50 / 2);
+}
//**************************************************************************
diff --git a/src/devices/bus/vme/vme_fccpu20.h b/src/devices/bus/vme/vme_fccpu20.h
index bab05fd987f..4be52d07477 100644
--- a/src/devices/bus/vme/vme_fccpu20.h
+++ b/src/devices/bus/vme/vme_fccpu20.h
@@ -54,6 +54,8 @@ protected:
emu_timer *m_arbiter_start; // Need a startup delay because it is hooked up to the sense inputs of the PIT
+ required_device<cpu_device> m_maincpu;
+
private:
DECLARE_WRITE_LINE_MEMBER(bim_irq_callback);
@@ -68,7 +70,6 @@ private:
void cpu20_mem(address_map &map);
- required_device<cpu_device> m_maincpu;
required_device<pit68230_device> m_pit;
required_device<bim68153_device> m_bim;
required_device<mpcc68561_device> m_mpcc;
diff --git a/src/devices/bus/vme/vme_hcpu30.h b/src/devices/bus/vme/vme_hcpu30.h
index 98e0691b6fe..b4e387ace22 100644
--- a/src/devices/bus/vme/vme_hcpu30.h
+++ b/src/devices/bus/vme/vme_hcpu30.h
@@ -11,7 +11,7 @@
#include "machine/68230pit.h"
#include "machine/scnxx562.h"
#include "machine/terminal.h"
-#include "machine/wd33c93.h"
+#include "machine/wd33c9x.h"
DECLARE_DEVICE_TYPE(VME_HCPU30, vme_hcpu30_card_device)
diff --git a/src/devices/bus/vme/vme_mvme350.cpp b/src/devices/bus/vme/vme_mvme350.cpp
index f1bb9d5dc46..b433620b6fe 100644
--- a/src/devices/bus/vme/vme_mvme350.cpp
+++ b/src/devices/bus/vme/vme_mvme350.cpp
@@ -189,13 +189,14 @@ ROM_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(vme_mvme350_card_device::device_add_mconfig)
+void vme_mvme350_card_device::device_add_mconfig(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD (MVME350_CPU_TAG, M68010, XTAL(10'000'000))
- MCFG_DEVICE_PROGRAM_MAP (mvme350_mem)
+ m68010_device &cpu(M68010(config, MVME350_CPU_TAG, XTAL(10'000'000)));
+ cpu.set_addrmap(AS_PROGRAM, &vme_mvme350_card_device::mvme350_mem);
/* PIT Parallel Interface and Timer device, assuming strapped for on board clock */
- MCFG_DEVICE_ADD("pit", PIT68230, XTAL(16'000'000) / 2)
-MACHINE_CONFIG_END
+ PIT68230(config, "pit", XTAL(16'000'000) / 2);
+}
const tiny_rom_entry *vme_mvme350_card_device::device_rom_region() const
{
diff --git a/src/devices/bus/vme/vme_mzr8105.cpp b/src/devices/bus/vme/vme_mzr8105.cpp
index 985f6bad905..fe63e92ee28 100644
--- a/src/devices/bus/vme/vme_mzr8105.cpp
+++ b/src/devices/bus/vme/vme_mzr8105.cpp
@@ -36,13 +36,13 @@ DEFINE_DEVICE_TYPE(VME_MZR8105, vme_mzr8105_card_device, "mzr8105", "Mizar 8105
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(vme_mzr8105_card_device::device_add_mconfig)
+void vme_mzr8105_card_device::device_add_mconfig(machine_config &config)
{
- MCFG_DEVICE_ADD ("maincpu", M68000, XTAL(10'000'000))
- MCFG_DEVICE_PROGRAM_MAP (mzr8105_mem)
- MCFG_VME_DEVICE_ADD("vme")
- MCFG_VME_BUS_OWNER_SPACES()
- MCFG_VME_SLOT_ADD ("vme", 1, mzr8105_vme_cards, "mzr8300")
+ M68000(config, m_maincpu, XTAL(10'000'000))
+ m_maincpu->set_addrmap(AS_PROGRAM, &vme_mzr8105_card_device::mzr8105_mem);
+
+ VME(config, "vme", 0).use_owner_spaces();
+ VME_SLOT(config, "slot1", mzr8105_vme_cards, "mzr8300", 1, "vme");
}
vme_mzr8105_card_device::vme_mzr8105_card_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
diff --git a/src/devices/bus/vme/vme_mzr8300.cpp b/src/devices/bus/vme/vme_mzr8300.cpp
index ca00a00a674..362beef2546 100644
--- a/src/devices/bus/vme/vme_mzr8300.cpp
+++ b/src/devices/bus/vme/vme_mzr8300.cpp
@@ -187,8 +187,8 @@ void vme_mzr8300_card_device::device_start()
read8_delegate(FUNC(z80sio_device::ca_r), subdevice<z80sio_device>("sio0")),
write8_delegate(FUNC(z80sio_device::ca_w), subdevice<z80sio_device>("sio0")), 0x00ff);
m_vme->install_device(vme_device::A16_SC, base + 0x10, base + 0x13, // Am9513
- read8_delegate(FUNC(am9513_device::read8), subdevice<am9513_device>("stc")),
- write8_delegate(FUNC(am9513_device::write8), subdevice<am9513_device>("stc")), 0x00ff);
+ read8sm_delegate(FUNC(am9513_device::read8), subdevice<am9513_device>("stc")),
+ write8sm_delegate(FUNC(am9513_device::write8), subdevice<am9513_device>("stc")), 0x00ff);
}
void vme_mzr8300_card_device::device_reset()
diff --git a/src/devices/bus/vsmile/pad.cpp b/src/devices/bus/vsmile/pad.cpp
new file mode 100644
index 00000000000..a301c65b9e2
--- /dev/null
+++ b/src/devices/bus/vsmile/pad.cpp
@@ -0,0 +1,275 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz, Vas Crabb
+
+#include "emu.h"
+#include "pad.h"
+
+#include <algorithm>
+
+//#define VERBOSE 1
+#include "logmacro.h"
+
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(VSMILE_PAD, vsmile_pad_device, "vsmile_pad", "V.Smile Joystick")
+
+
+//**************************************************************************
+// V.Smile control pad
+//**************************************************************************
+
+DECLARE_ENUM_BITWISE_OPERATORS(vsmile_pad_device::stale_inputs)
+ALLOW_SAVE_TYPE(vsmile_pad_device::stale_inputs);
+
+vsmile_pad_device::vsmile_pad_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock)
+ : vsmile_ctrl_device_base(mconfig, VSMILE_PAD, tag, owner, clock)
+ , m_io_joy(*this, "JOY")
+ , m_io_colors(*this, "COLORS")
+ , m_io_buttons(*this, "BUTTONS")
+ , m_idle_timer(nullptr)
+ , m_sent_joy(0x00U)
+ , m_sent_colors(0x00U)
+ , m_sent_buttons(0x00U)
+ , m_stale(STALE_ALL)
+ , m_active(false)
+{
+ std::fill(std::begin(m_ctrl_probe_history), std::end(m_ctrl_probe_history), 0U);
+}
+
+vsmile_pad_device::~vsmile_pad_device()
+{
+}
+
+void vsmile_pad_device::device_start()
+{
+ vsmile_ctrl_device_base::device_start();
+
+ m_idle_timer = machine().scheduler().timer_alloc(
+ timer_expired_delegate(FUNC(vsmile_pad_device::handle_idle), this));
+ m_idle_timer->adjust(attotime::from_seconds(1));
+
+ m_sent_joy = 0x00U;
+ m_sent_colors = 0x00U;
+ m_sent_buttons = 0x00U;
+ m_stale = STALE_ALL;
+ m_active = false;
+
+ save_item(NAME(m_sent_joy));
+ save_item(NAME(m_sent_colors));
+ save_item(NAME(m_sent_buttons));
+ save_item(NAME(m_stale));
+ save_item(NAME(m_active));
+ save_item(NAME(m_ctrl_probe_history));
+}
+
+void vsmile_pad_device::tx_complete()
+{
+ // update joystick
+ if ((m_stale & STALE_JOY) != STALE_NONE)
+ {
+ m_sent_joy = m_io_joy->read();
+ if ((m_stale & STALE_UP_DOWN) != STALE_NONE)
+ {
+ if (BIT(m_sent_joy, 0))
+ uart_tx_fifo_push(0x87); // up
+ else if (BIT(m_sent_joy, 1))
+ uart_tx_fifo_push(0x8f); // down
+ else
+ uart_tx_fifo_push(0x80);
+ }
+ if ((m_stale & STALE_LEFT_RIGHT) != STALE_NONE)
+ {
+ if (BIT(m_sent_joy, 2))
+ uart_tx_fifo_push(0xcf); // left
+ else if (BIT(m_sent_joy, 3))
+ uart_tx_fifo_push(0xc7); // right
+ else
+ uart_tx_fifo_push(0xc0);
+ }
+ }
+
+ // update colors
+ if ((m_stale & STALE_COLORS) != STALE_NONE)
+ {
+ m_sent_colors = m_io_colors->read();
+ uart_tx_fifo_push(0x90 | m_sent_colors);
+ }
+
+ // update buttons
+ if ((m_stale & STALE_BUTTONS) != STALE_NONE)
+ {
+ m_sent_buttons = m_io_buttons->read();
+ if (((m_stale & STALE_OK) != STALE_NONE) && BIT(m_sent_buttons, 0))
+ uart_tx_fifo_push(0xa1);
+ if (((m_stale & STALE_QUIT) != STALE_NONE) && BIT(m_sent_buttons, 1))
+ uart_tx_fifo_push(0xa2);
+ if (((m_stale & STALE_HELP) != STALE_NONE) && BIT(m_sent_buttons, 2))
+ uart_tx_fifo_push(0xa3);
+ if (((m_stale & STALE_ABC) != STALE_NONE) && BIT(m_sent_buttons, 3))
+ uart_tx_fifo_push(0xa4);
+ if (!m_sent_buttons)
+ uart_tx_fifo_push(0xa0);
+ }
+
+ // if nothing happens in the next second we'll queue a keep-alive
+ if (!m_active)
+ LOG("entered active state\n");
+ m_idle_timer->adjust(attotime::from_seconds(1));
+ m_active = true;
+ m_stale = STALE_NONE;
+}
+
+void vsmile_pad_device::tx_timeout()
+{
+ if (m_active)
+ {
+ m_idle_timer->reset();
+ m_active = false;
+ m_stale = STALE_ALL;
+ std::fill(std::begin(m_ctrl_probe_history), std::end(m_ctrl_probe_history), 0U);
+ LOG("left active state\n");
+ }
+ uart_tx_fifo_push(0x55);
+}
+
+void vsmile_pad_device::rx_complete(uint8_t data, bool select)
+{
+ if (select)
+ {
+ if (((data & 0xf0) == 0x70) || ((data & 0xf0) == 0xb0))
+ {
+ m_ctrl_probe_history[0] = ((data & 0xf0) == 0x70) ? 0 : m_ctrl_probe_history[1];
+ m_ctrl_probe_history[1] = data;
+ uint8_t const response = ((m_ctrl_probe_history[0] + m_ctrl_probe_history[1] + 0x0f) & 0x0f) ^ 0x05;
+ LOG(
+ "%s: received probe %02X, %02X, sending response %02X\n",
+ machine().describe_context(),
+ m_ctrl_probe_history[0],
+ m_ctrl_probe_history[1],
+ 0xb0 | response);
+ uart_tx_fifo_push(0xb0 | response);
+ }
+ }
+}
+
+void vsmile_pad_device::uart_tx_fifo_push(uint8_t data)
+{
+ m_idle_timer->reset();
+ queue_tx(data);
+}
+
+TIMER_CALLBACK_MEMBER(vsmile_pad_device::handle_idle)
+{
+ LOG("idle timer expired, sending keep-alive 55\n");
+ queue_tx(0x55);
+}
+
+INPUT_CHANGED_MEMBER(vsmile_pad_device::pad_joy_changed)
+{
+ if (m_active)
+ {
+ if (!is_tx_empty())
+ {
+ LOG("joy changed while transmission in progress, marking stale\n");
+ m_stale |= stale_inputs(uintptr_t(param));
+ }
+ else
+ {
+ uint8_t const joy = m_io_joy->read();
+ if ((joy ^ m_sent_joy) & 0x03)
+ {
+ if (BIT(joy, 0))
+ uart_tx_fifo_push(0x87); // up
+ else if (BIT(joy, 1))
+ uart_tx_fifo_push(0x8f); // down
+ else
+ uart_tx_fifo_push(0x80);
+ }
+ if ((joy ^ m_sent_joy) & 0x0c)
+ {
+ if (BIT(joy, 2))
+ uart_tx_fifo_push(0xcf); // left
+ else if (BIT(joy, 3))
+ uart_tx_fifo_push(0xc7); // right
+ else
+ uart_tx_fifo_push(0xc0);
+ }
+ m_sent_joy = joy;
+ }
+ }
+}
+
+INPUT_CHANGED_MEMBER(vsmile_pad_device::pad_color_changed)
+{
+ if (m_active)
+ {
+ if (!is_tx_empty())
+ {
+ LOG("colors changed while transmission in progress, marking stale\n");
+ m_stale |= STALE_COLORS;
+ }
+ else
+ {
+ m_sent_colors = m_io_colors->read();
+ uart_tx_fifo_push(0x90 | m_sent_colors);
+ }
+ }
+}
+
+INPUT_CHANGED_MEMBER(vsmile_pad_device::pad_button_changed)
+{
+ if (m_active)
+ {
+ if (!is_tx_empty())
+ {
+ LOG("buttons changed while transmission in progress, marking stale\n");
+ m_stale |= stale_inputs(uintptr_t(param));
+ }
+ else
+ {
+ uint8_t const buttons = m_io_buttons->read();
+ if (BIT((m_sent_buttons ^ buttons) & buttons, 0))
+ uart_tx_fifo_push(0xa1);
+ if (BIT((m_sent_buttons ^ buttons) & buttons, 1))
+ uart_tx_fifo_push(0xa2);
+ if (BIT((m_sent_buttons ^ buttons) & buttons, 2))
+ uart_tx_fifo_push(0xa3);
+ if (BIT((m_sent_buttons ^ buttons) & buttons, 3))
+ uart_tx_fifo_push(0xa4);
+ if (!buttons)
+ uart_tx_fifo_push(0xa0);
+ m_sent_buttons = buttons;
+ }
+ }
+}
+
+static INPUT_PORTS_START( vsmile_pad )
+ PORT_START("JOY")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_CHANGED_MEMBER(DEVICE_SELF, vsmile_pad_device, pad_joy_changed, vsmile_pad_device::STALE_UP_DOWN) PORT_NAME("Joypad Up")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_CHANGED_MEMBER(DEVICE_SELF, vsmile_pad_device, pad_joy_changed, vsmile_pad_device::STALE_UP_DOWN) PORT_NAME("Joypad Down")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_MEMBER(DEVICE_SELF, vsmile_pad_device, pad_joy_changed, vsmile_pad_device::STALE_LEFT_RIGHT) PORT_NAME("Joypad Left")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_CHANGED_MEMBER(DEVICE_SELF, vsmile_pad_device, pad_joy_changed, vsmile_pad_device::STALE_LEFT_RIGHT) PORT_NAME("Joypad Right")
+ PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("COLORS")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, vsmile_pad_device, pad_color_changed, vsmile_pad_device::STALE_COLORS) PORT_NAME("Green")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, vsmile_pad_device, pad_color_changed, vsmile_pad_device::STALE_COLORS) PORT_NAME("Blue")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_CHANGED_MEMBER(DEVICE_SELF, vsmile_pad_device, pad_color_changed, vsmile_pad_device::STALE_COLORS) PORT_NAME("Yellow")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_CHANGED_MEMBER(DEVICE_SELF, vsmile_pad_device, pad_color_changed, vsmile_pad_device::STALE_COLORS) PORT_NAME("Red")
+ PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("BUTTONS")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_CHANGED_MEMBER(DEVICE_SELF, vsmile_pad_device, pad_button_changed, vsmile_pad_device::STALE_OK) PORT_NAME("OK")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_CHANGED_MEMBER(DEVICE_SELF, vsmile_pad_device, pad_button_changed, vsmile_pad_device::STALE_QUIT) PORT_NAME("Quit")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_CHANGED_MEMBER(DEVICE_SELF, vsmile_pad_device, pad_button_changed, vsmile_pad_device::STALE_HELP) PORT_NAME("Help")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_CHANGED_MEMBER(DEVICE_SELF, vsmile_pad_device, pad_button_changed, vsmile_pad_device::STALE_ABC) PORT_NAME("ABC")
+ PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
+INPUT_PORTS_END
+
+ioport_constructor vsmile_pad_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( vsmile_pad );
+}
diff --git a/src/devices/bus/vsmile/pad.h b/src/devices/bus/vsmile/pad.h
new file mode 100644
index 00000000000..5e2515c2b58
--- /dev/null
+++ b/src/devices/bus/vsmile/pad.h
@@ -0,0 +1,78 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz, Vas Crabb
+#ifndef MAME_BUS_VSMILE_PAD_H
+#define MAME_BUS_VSMILE_PAD_H
+
+#pragma once
+
+#include "vsmile_ctrl.h"
+
+/***************************************************************************
+ TYPE DEFINITIONS
+ ***************************************************************************/
+
+// ======================> vsmile_pad_device
+
+class vsmile_pad_device : public vsmile_ctrl_device_base
+{
+public:
+ enum stale_inputs : uint8_t
+ {
+ STALE_NONE = 0U,
+ STALE_LEFT_RIGHT = 1U << 0,
+ STALE_UP_DOWN = 1U << 1,
+ STALE_COLORS = 1U << 2,
+ STALE_OK = 1U << 3,
+ STALE_QUIT = 1U << 4,
+ STALE_HELP = 1U << 5,
+ STALE_ABC = 1U << 6,
+
+ STALE_JOY = STALE_LEFT_RIGHT | STALE_UP_DOWN,
+ STALE_BUTTONS = STALE_OK | STALE_QUIT | STALE_HELP | STALE_ABC,
+ STALE_ALL = STALE_JOY | STALE_COLORS | STALE_BUTTONS
+ };
+
+ // construction/destruction
+ vsmile_pad_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock = 0U);
+ virtual ~vsmile_pad_device();
+
+ // input handlers
+ DECLARE_INPUT_CHANGED_MEMBER(pad_joy_changed);
+ DECLARE_INPUT_CHANGED_MEMBER(pad_color_changed);
+ DECLARE_INPUT_CHANGED_MEMBER(pad_button_changed);
+
+protected:
+ // device_t implementation
+ virtual ioport_constructor device_input_ports() const override;
+ virtual void device_start() override;
+
+ // vsmile_ctrl_device_base implementation
+ virtual void tx_complete() override;
+ virtual void tx_timeout() override;
+ virtual void rx_complete(uint8_t data, bool cts) override;
+
+private:
+ void uart_tx_fifo_push(uint8_t data);
+
+ TIMER_CALLBACK_MEMBER(handle_idle);
+
+ required_ioport m_io_joy;
+ required_ioport m_io_colors;
+ required_ioport m_io_buttons;
+
+ emu_timer *m_idle_timer;
+
+ uint8_t m_sent_joy, m_sent_colors, m_sent_buttons;
+ stale_inputs m_stale;
+ bool m_active;
+ uint8_t m_ctrl_probe_history[2];
+};
+
+
+/***************************************************************************
+ DEVICE TYPES
+ ***************************************************************************/
+
+DECLARE_DEVICE_TYPE(VSMILE_PAD, vsmile_pad_device)
+
+#endif // MAME_BUS_VSMILE_PAD_H
diff --git a/src/devices/bus/vsmile/rom.cpp b/src/devices/bus/vsmile/rom.cpp
new file mode 100644
index 00000000000..584a8cfe058
--- /dev/null
+++ b/src/devices/bus/vsmile/rom.cpp
@@ -0,0 +1,86 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+/***********************************************************************************************************
+
+ V.Smile cart emulation
+
+ We support standard carts and one with on-board NVRAM
+
+ ***********************************************************************************************************/
+
+
+#include "emu.h"
+#include "rom.h"
+
+
+//-------------------------------------------------
+// vsmile_rom_device - constructor
+//-------------------------------------------------
+
+DEFINE_DEVICE_TYPE(VSMILE_ROM_STD, vsmile_rom_device, "vsmile_rom", "V.Smile Cart")
+DEFINE_DEVICE_TYPE(VSMILE_ROM_NVRAM, vsmile_rom_nvram_device, "vsmile_rom_nvram", "V.Smile Cart + NVRAM")
+
+
+vsmile_rom_device::vsmile_rom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_vsmile_cart_interface(mconfig, *this)
+{
+}
+
+vsmile_rom_device::vsmile_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : vsmile_rom_device(mconfig, VSMILE_ROM_STD, tag, owner, clock)
+{
+}
+
+vsmile_rom_nvram_device::vsmile_rom_nvram_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : vsmile_rom_device(mconfig, type, tag, owner, clock)
+{
+}
+
+vsmile_rom_nvram_device::vsmile_rom_nvram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : vsmile_rom_nvram_device(mconfig, VSMILE_ROM_NVRAM, tag, owner, clock)
+{
+}
+
+
+//-------------------------------------------------
+// mapper specific start/reset
+//-------------------------------------------------
+
+void vsmile_rom_device::device_start()
+{
+ save_item(NAME(m_bank_offset));
+}
+
+void vsmile_rom_device::device_reset()
+{
+ m_bank_offset = 0;
+}
+
+
+/*-------------------------------------------------
+ Cart with NVRAM
+ -------------------------------------------------*/
+
+READ16_MEMBER(vsmile_rom_nvram_device::bank2_r)
+{
+ if (!m_nvram.empty() && offset < m_nvram.size())
+ return m_nvram[offset];
+ else // this cannot actually happen...
+ return 0;
+}
+
+WRITE16_MEMBER(vsmile_rom_nvram_device::bank2_w)
+{
+ if (!m_nvram.empty() && offset < m_nvram.size())
+ COMBINE_DATA(&m_nvram[offset]);
+}
+
+/*-------------------------------------------------
+ CS2 bankswitching
+ -------------------------------------------------*/
+
+void vsmile_rom_device::set_cs2(bool cs2)
+{
+ m_bank_offset = cs2 ? 0x400000 : 0x000000;
+}
diff --git a/src/devices/bus/vsmile/rom.h b/src/devices/bus/vsmile/rom.h
new file mode 100644
index 00000000000..ec39f1f743e
--- /dev/null
+++ b/src/devices/bus/vsmile/rom.h
@@ -0,0 +1,59 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+#ifndef MAME_BUS_VSMILE_ROM_H
+#define MAME_BUS_VSMILE_ROM_H
+
+#pragma once
+
+#include "vsmile_slot.h"
+
+// ======================> vsmile_rom_device
+
+class vsmile_rom_device : public device_t, public device_vsmile_cart_interface
+{
+public:
+ // construction/destruction
+ vsmile_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(bank0_r) override { return m_rom[m_bank_offset + 0x000000 + offset]; }
+ virtual DECLARE_READ16_MEMBER(bank1_r) override { return m_rom[m_bank_offset + 0x100000 + offset]; }
+ virtual DECLARE_READ16_MEMBER(bank2_r) override { return m_rom[m_bank_offset + 0x200000 + offset]; }
+ virtual DECLARE_READ16_MEMBER(bank3_r) override { return m_rom[m_bank_offset + 0x300000 + offset]; }
+
+ // banking
+ virtual void set_cs2(bool cs2) override;
+
+protected:
+ vsmile_rom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ uint32_t m_bank_offset;
+};
+
+
+// ======================> vsmile_rom_nvram_device
+
+class vsmile_rom_nvram_device : public vsmile_rom_device
+{
+public:
+ // construction/destruction
+ vsmile_rom_nvram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ virtual DECLARE_READ16_MEMBER(bank2_r) override;
+ virtual DECLARE_WRITE16_MEMBER(bank2_w) override;
+
+protected:
+ vsmile_rom_nvram_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(VSMILE_ROM_STD, vsmile_rom_device)
+DECLARE_DEVICE_TYPE(VSMILE_ROM_NVRAM, vsmile_rom_nvram_device)
+
+
+#endif // MAME_BUS_VSMILE_ROM_H
diff --git a/src/devices/bus/vsmile/vsmile_ctrl.cpp b/src/devices/bus/vsmile/vsmile_ctrl.cpp
new file mode 100644
index 00000000000..a8cbf25278b
--- /dev/null
+++ b/src/devices/bus/vsmile/vsmile_ctrl.cpp
@@ -0,0 +1,315 @@
+// license:BSD-3-Clause
+// copyright-holders:Vas Crabb
+
+#include "emu.h"
+#include "vsmile_ctrl.h"
+
+#include <algorithm>
+#include <cassert>
+
+//#define VERBOSE 1
+#include "logmacro.h"
+
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(VSMILE_CTRL_PORT, vsmile_ctrl_port_device, "vsmile_ctrl_port", "V.Smile Controller Port")
+
+
+//**************************************************************************
+// V.Smile controller interface
+//**************************************************************************
+
+device_vsmile_ctrl_interface::device_vsmile_ctrl_interface(const machine_config &mconfig, device_t &device)
+ : device_slot_card_interface(mconfig, device)
+ , m_port(dynamic_cast<vsmile_ctrl_port_device *>(device.owner()))
+{
+}
+
+device_vsmile_ctrl_interface::~device_vsmile_ctrl_interface()
+{
+}
+
+void device_vsmile_ctrl_interface::interface_validity_check(validity_checker &valid) const
+{
+ device_slot_card_interface::interface_validity_check(valid);
+
+ if (device().owner() && !m_port)
+ {
+ osd_printf_error(
+ "Owner device %s (%s) is not a vsmile_ctrl_port_device\n",
+ device().owner()->tag(),
+ device().owner()->name());
+ }
+}
+
+void device_vsmile_ctrl_interface::interface_pre_start()
+{
+ device_slot_card_interface::interface_pre_start();
+
+ if (m_port && !m_port->started())
+ throw device_missing_dependencies();
+}
+
+
+//**************************************************************************
+// V.Smile controller port
+//**************************************************************************
+
+vsmile_ctrl_port_device::vsmile_ctrl_port_device(
+ machine_config const &mconfig,
+ char const *tag,
+ device_t *owner,
+ uint32_t clock)
+ : device_t(mconfig, VSMILE_CTRL_PORT, tag, owner, clock)
+ , device_slot_interface(mconfig, *this)
+ , m_rts_cb(*this)
+ , m_data_cb(*this)
+{
+}
+
+vsmile_ctrl_port_device::~vsmile_ctrl_port_device()
+{
+}
+
+void vsmile_ctrl_port_device::device_validity_check(validity_checker &valid) const
+{
+ device_t *const card(get_card_device());
+ if (card && !dynamic_cast<device_vsmile_ctrl_interface *>(card))
+ {
+ osd_printf_error(
+ "Card device %s (%s) does not implement device_vsmile_ctrl_interface\n",
+ card->tag(),
+ card->name());
+ }
+}
+
+void vsmile_ctrl_port_device::device_resolve_objects()
+{
+ device_vsmile_ctrl_interface *const card(dynamic_cast<device_vsmile_ctrl_interface *>(get_card_device()));
+ if (card)
+ m_device = card;
+
+ m_rts_cb.resolve_safe();
+ m_data_cb.resolve_safe();
+}
+
+void vsmile_ctrl_port_device::device_start()
+{
+ device_t *const card(get_card_device());
+ if (card)
+ {
+ if (!m_device)
+ {
+ throw emu_fatalerror(
+ "vsmile_ctrl_port_device: card device %s (%s) does not implement device_vsmile_ctrl_interface\n",
+ card->tag(),
+ card->name());
+ }
+ else
+ {
+ m_device->select_w(0);
+ }
+ }
+}
+
+
+//**************************************************************************
+// V.Smile controller HLE base
+//**************************************************************************
+
+vsmile_ctrl_device_base::vsmile_ctrl_device_base(
+ machine_config const &mconfig,
+ device_type type,
+ char const *tag,
+ device_t *owner,
+ uint32_t clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_vsmile_ctrl_interface(mconfig, *this)
+ , m_tx_timer(nullptr)
+ , m_rts_timer(nullptr)
+ , m_tx_fifo_head(0U)
+ , m_tx_fifo_tail(0U)
+ , m_tx_fifo_empty(true)
+ , m_tx_active(false)
+ , m_select(false)
+{
+ std::fill(std::begin(m_tx_fifo), std::end(m_tx_fifo), 0);
+}
+
+vsmile_ctrl_device_base::~vsmile_ctrl_device_base()
+{
+}
+
+void vsmile_ctrl_device_base::device_start()
+{
+ // allocate a timer to limit transmit rate to something realistic
+ m_tx_timer = machine().scheduler().timer_alloc(
+ timer_expired_delegate(FUNC(vsmile_ctrl_device_base::tx_timer_expired), this));
+
+ // allocate a timer for RTS timeouts
+ m_rts_timer = machine().scheduler().timer_alloc(
+ timer_expired_delegate(FUNC(vsmile_ctrl_device_base::rts_timer_expired), this));
+
+ // start with transmit queue empty
+ m_tx_fifo_head = m_tx_fifo_tail = 0U;
+ m_tx_fifo_empty = true;
+ m_tx_active = false;
+
+ // register for save states
+ save_item(NAME(m_tx_fifo));
+ save_item(NAME(m_tx_fifo_head));
+ save_item(NAME(m_tx_fifo_tail));
+ save_item(NAME(m_tx_fifo_empty));
+ save_item(NAME(m_select));
+}
+
+bool vsmile_ctrl_device_base::queue_tx(uint8_t data)
+{
+ // return false on overrun and drop byte
+ bool const was_empty(m_tx_fifo_empty);
+ if (!was_empty && (m_tx_fifo_head == m_tx_fifo_tail))
+ {
+ LOG(
+ "%s: discarding byte %02X because FIFO is full (length %u, Tx %sactive)\n",
+ machine().describe_context(),
+ data,
+ ARRAY_LENGTH(m_tx_fifo),
+ m_tx_active ? "" : "in");
+ return false;
+ }
+
+ // queue the byte
+ m_tx_fifo[m_tx_fifo_tail] = data;
+ m_tx_fifo_tail = (m_tx_fifo_tail + 1) % ARRAY_LENGTH(m_tx_fifo);
+ m_tx_fifo_empty = false;
+
+ // assert RTS and start transmitting if necessary
+ if (was_empty)
+ {
+ rts_out(1);
+ if (m_select)
+ {
+ LOG("%s: transmitting byte %02X immediately (Tx was %sactive)\n", machine().describe_context(), data, m_tx_active ? "" : "in");
+ m_tx_active = true;
+ m_tx_timer->adjust(attotime::from_hz(9600 / 10));
+ }
+ else
+ {
+ LOG("%s: asserting RTS to transmit byte %02X\n", machine().describe_context(), data);
+ m_rts_timer->adjust(attotime::from_msec(500));
+ }
+ }
+ else
+ {
+ unsigned const fifo_used((m_tx_fifo_tail + ARRAY_LENGTH(m_tx_fifo) - m_tx_fifo_head) % ARRAY_LENGTH(m_tx_fifo));
+ LOG("%s: queued byte %02X (%u bytes queued, Tx %sactive)\n", machine().describe_context(), data, fifo_used, m_tx_active ? "" : "in");
+ }
+
+ // data was queued
+ return true;
+}
+
+void vsmile_ctrl_device_base::select_w(int state)
+{
+ if (bool(state) != m_select)
+ {
+ if (state && !m_tx_fifo_empty && !m_tx_active)
+ {
+ m_rts_timer->reset();
+ unsigned const fifo_used((m_tx_fifo_tail + ARRAY_LENGTH(m_tx_fifo) - m_tx_fifo_head) % ARRAY_LENGTH(m_tx_fifo));
+ LOG("%s: select asserted, starting transmission (%u bytes queued)\n", machine().describe_context(), fifo_used);
+ m_tx_active = true;
+ m_tx_timer->adjust(attotime::from_hz(9600 / 10));
+ }
+ else
+ {
+ LOG("%s: select %sasserted (Tx %sactive)\n", machine().describe_context(), state ? "" : "de", m_tx_active ? "" : "in");
+ }
+ m_select = bool(state);
+ }
+}
+
+void vsmile_ctrl_device_base::data_w(uint8_t data)
+{
+ LOG(
+ "%s: received byte %02X (select %sasserted, Tx %sactive)\n",
+ machine().describe_context(),
+ data,
+ m_select ? "" : "de",
+ m_tx_active ? "" : "in");
+ rx_complete(data, m_select);
+}
+
+TIMER_CALLBACK_MEMBER(vsmile_ctrl_device_base::tx_timer_expired)
+{
+ assert(!m_tx_fifo_empty);
+ assert(m_tx_active);
+
+ // deliver the byte to the host (bits have shifted out now)
+ uint8_t const data(m_tx_fifo[m_tx_fifo_head]);
+ m_tx_fifo_head = (m_tx_fifo_head + 1) % ARRAY_LENGTH(m_tx_fifo);
+ if (m_tx_fifo_head == m_tx_fifo_tail)
+ m_tx_fifo_empty = true;
+ data_out(data);
+
+ // if queue is drained give implmentation a chance to queue more before dropping RTS
+ if (m_tx_fifo_empty)
+ {
+ LOG("transmitted byte %02X, queue empty (select %sasserted)\n", data, m_select ? "" : "de");
+ tx_complete();
+ }
+ else
+ {
+ unsigned const fifo_used((m_tx_fifo_tail + ARRAY_LENGTH(m_tx_fifo) - m_tx_fifo_head) % ARRAY_LENGTH(m_tx_fifo));
+ LOG("transmitted byte %02X (%u bytes queued, select %sasserted)\n", data, fifo_used, m_select ? "" : "de");
+ }
+
+ // drop RTS if no more data, otherwise keep transmitting if CTS is still high
+ if (m_tx_fifo_empty)
+ {
+ LOG("nothing to transmit, deasserting RTS\n");
+ m_tx_active = false;
+ rts_out(0);
+ }
+ else if (m_select)
+ {
+ LOG("select asserted, transmitting next byte %02X\n", m_tx_fifo[m_tx_fifo_head]);
+ m_tx_timer->adjust(attotime::from_hz(9600 / 10));
+ }
+ else
+ {
+ LOG("select deasserted, waiting to transmit\n");
+ m_tx_active = false;
+ m_rts_timer->adjust(attotime::from_msec(500));
+ }
+}
+
+
+TIMER_CALLBACK_MEMBER(vsmile_ctrl_device_base::rts_timer_expired)
+{
+ assert(!m_tx_fifo_empty);
+ assert(!m_tx_active);
+
+ // clear out anything queued and let the implementation deal with it
+ if (!m_tx_fifo_empty)
+ {
+ unsigned const fifo_used((m_tx_fifo_tail + ARRAY_LENGTH(m_tx_fifo) - m_tx_fifo_head) % ARRAY_LENGTH(m_tx_fifo));
+ LOG("timeout waiting for select after asserting RTS (%u bytes queued)\n", fifo_used);
+ m_tx_fifo_head = m_tx_fifo_tail = 0U;
+ m_tx_fifo_empty = true;
+ tx_timeout();
+ if (m_tx_fifo_empty)
+ rts_out(0);
+ }
+}
+
+
+#include "pad.h"
+
+void vsmile_controllers(device_slot_interface &device)
+{
+ device.option_add("joy", VSMILE_PAD);
+}
diff --git a/src/devices/bus/vsmile/vsmile_ctrl.h b/src/devices/bus/vsmile/vsmile_ctrl.h
new file mode 100644
index 00000000000..66921ce817a
--- /dev/null
+++ b/src/devices/bus/vsmile/vsmile_ctrl.h
@@ -0,0 +1,153 @@
+// license:BSD-3-Clause
+// copyright-holders:Vas Crabb
+#ifndef MAME_BUS_VSMILE_VSMILE_CTRL_H
+#define MAME_BUS_VSMILE_VSMILE_CTRL_H
+
+#pragma once
+
+
+/***************************************************************************
+ FORWARD DECLARATIONS
+ ***************************************************************************/
+
+class vsmile_ctrl_port_device;
+
+
+/***************************************************************************
+ TYPE DEFINITIONS
+ ***************************************************************************/
+
+// ======================> device_vsmile_ctrl_interface
+
+class device_vsmile_ctrl_interface : public device_slot_card_interface
+{
+public:
+ virtual ~device_vsmile_ctrl_interface();
+
+protected:
+ device_vsmile_ctrl_interface(machine_config const &mconfig, device_t &device);
+
+ // device_interface implementation
+ virtual void interface_validity_check(validity_checker &valid) const override ATTR_COLD;
+ virtual void interface_pre_start() override;
+
+ // otuput signals
+ void rts_out(int state);
+ void data_out(uint8_t data);
+
+private:
+ // input signal handlers for implementataions to override
+ virtual void select_w(int state) = 0;
+ virtual void data_w(uint8_t data) = 0;
+
+ vsmile_ctrl_port_device *const m_port;
+
+ friend class vsmile_ctrl_port_device;
+};
+
+
+// ======================> vsmile_ctrl_port_device
+
+class vsmile_ctrl_port_device : public device_t, public device_slot_interface
+{
+public:
+ // configuration
+ auto rts_cb() { return m_rts_cb.bind(); }
+ auto data_cb() { return m_data_cb.bind(); }
+
+ // construction/destruction
+ template <typename T>
+ vsmile_ctrl_port_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : vsmile_ctrl_port_device(mconfig, tag, owner, 0U)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+ vsmile_ctrl_port_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock = 0U);
+ virtual ~vsmile_ctrl_port_device();
+
+ // input signals
+ void select_w(int state) { if (m_device) m_device->select_w(state); }
+ void data_w(uint8_t data) { if (m_device) m_device->data_w(data); }
+
+protected:
+ // device_t implementation
+ virtual void device_validity_check(validity_checker &valid) const override ATTR_COLD;
+ virtual void device_resolve_objects() override;
+ virtual void device_start() override;
+
+private:
+ device_vsmile_ctrl_interface *m_device;
+ devcb_write_line m_rts_cb;
+ devcb_write8 m_data_cb;
+
+ friend class device_vsmile_ctrl_interface;
+};
+
+
+// ======================> vsmile_ctrl_device_base
+
+class vsmile_ctrl_device_base : public device_t, public device_vsmile_ctrl_interface
+{
+public:
+ // destruction
+ virtual ~vsmile_ctrl_device_base();
+
+protected:
+ // construction
+ vsmile_ctrl_device_base(machine_config const &mconfig, device_type type, char const *tag, device_t *owner, uint32_t clock);
+
+ // device_t implementation
+ virtual void device_start() override;
+
+ // UART simulation helpers
+ bool is_tx_empty() const { return m_tx_fifo_empty; }
+ bool queue_tx(uint8_t data);
+
+private:
+ // device_vsmile_ctrl_interfaceA implementation
+ virtual void select_w(int state) override;
+ virtual void data_w(uint8_t data) override;
+
+ // UART simulation handlers
+ virtual void tx_complete() = 0;
+ virtual void tx_timeout() = 0;
+ virtual void rx_complete(uint8_t data, bool select) = 0;
+
+ // internal helpers
+ TIMER_CALLBACK_MEMBER(tx_timer_expired);
+ TIMER_CALLBACK_MEMBER(rts_timer_expired);
+
+ emu_timer *m_tx_timer, *m_rts_timer;
+
+ uint8_t m_tx_fifo[32];
+ uint8_t m_tx_fifo_head, m_tx_fifo_tail;
+ bool m_tx_fifo_empty, m_tx_active;
+ bool m_select;
+};
+
+
+/***************************************************************************
+ INLINE FUNCTIONS
+ ***************************************************************************/
+
+inline void device_vsmile_ctrl_interface::rts_out(int state) { m_port->m_rts_cb(state); }
+inline void device_vsmile_ctrl_interface::data_out(uint8_t data) { m_port->m_data_cb(data); }
+
+
+/***************************************************************************
+ FUNCTIONS
+ ***************************************************************************/
+
+void vsmile_controllers(device_slot_interface &device);
+
+
+/***************************************************************************
+ DEVICE TYPES
+ ***************************************************************************/
+
+DECLARE_DEVICE_TYPE(VSMILE_CTRL_PORT, vsmile_ctrl_port_device)
+
+#endif // MAME_BUS_VSMILE_VSMILE_CTRL_H
diff --git a/src/devices/bus/vsmile/vsmile_slot.cpp b/src/devices/bus/vsmile/vsmile_slot.cpp
new file mode 100644
index 00000000000..61d7873b63f
--- /dev/null
+++ b/src/devices/bus/vsmile/vsmile_slot.cpp
@@ -0,0 +1,254 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+/***********************************************************************************************************
+
+ V.Smile cart emulation
+ (through slot devices)
+
+ ***********************************************************************************************************/
+
+
+#include "emu.h"
+#include "vsmile_slot.h"
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(VSMILE_CART_SLOT, vsmile_cart_slot_device, "vsmile_cart_slot", "V.Smile Cartridge Slot")
+
+//**************************************************************************
+// V.Smile cartridge interface
+//**************************************************************************
+
+//-------------------------------------------------
+// device_vsmile_cart_interface - constructor
+//-------------------------------------------------
+
+device_vsmile_cart_interface::device_vsmile_cart_interface(const machine_config &mconfig, device_t &device)
+ : device_slot_card_interface(mconfig, device)
+ , m_rom(nullptr)
+ , m_rom_size(0)
+{
+}
+
+
+//-------------------------------------------------
+// ~device_vsmile_cart_interface - destructor
+//-------------------------------------------------
+
+device_vsmile_cart_interface::~device_vsmile_cart_interface()
+{
+}
+
+//-------------------------------------------------
+// rom_alloc - alloc the space for the cart
+//-------------------------------------------------
+
+void device_vsmile_cart_interface::rom_alloc(uint32_t size, const char *tag)
+{
+ if (m_rom == nullptr)
+ {
+ // We always alloc 8MB of ROM region
+ m_rom = (uint16_t *)device().machine().memory().region_alloc(std::string(tag).append(VSMILE_SLOT_ROM_REGION_TAG).c_str(), size, 2, ENDIANNESS_BIG)->base();
+ m_rom_size = size;
+ }
+}
+
+
+//-------------------------------------------------
+// nvram_alloc - alloc the space for the nvram
+//-------------------------------------------------
+
+void device_vsmile_cart_interface::nvram_alloc(uint32_t size)
+{
+ m_nvram.resize(size / sizeof(uint16_t));
+}
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// vsmile_cart_slot_device - constructor
+//-------------------------------------------------
+vsmile_cart_slot_device::vsmile_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ device_t(mconfig, VSMILE_CART_SLOT, tag, owner, clock),
+ device_image_interface(mconfig, *this),
+ device_slot_interface(mconfig, *this),
+ m_type(VSMILE_STD),
+ m_cart(nullptr)
+{
+}
+
+
+//-------------------------------------------------
+// vsmile_cart_slot_device - destructor
+//-------------------------------------------------
+
+vsmile_cart_slot_device::~vsmile_cart_slot_device()
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void vsmile_cart_slot_device::device_start()
+{
+ m_cart = dynamic_cast<device_vsmile_cart_interface *>(get_card_device());
+}
+
+
+//-------------------------------------------------
+// V.Smile PCB
+//-------------------------------------------------
+
+struct vsmile_slot
+{
+ int pcb_id;
+ const char *slot_option;
+};
+
+// Here, we take the feature attribute from .xml (i.e. the PCB name) and we assign a unique ID to it
+static const vsmile_slot slot_list[] =
+{
+ { VSMILE_STD, "vsmile_rom" },
+ { VSMILE_NVRAM, "vsmile_nvram" },
+};
+
+static int vsmile_get_pcb_id(const char *slot)
+{
+ for (auto & elem : slot_list)
+ {
+ if (!core_stricmp(elem.slot_option, slot))
+ return elem.pcb_id;
+ }
+
+ return 0;
+}
+
+/*-------------------------------------------------
+ call load
+ -------------------------------------------------*/
+
+image_init_result vsmile_cart_slot_device::call_load()
+{
+ if (m_cart)
+ {
+ uint32_t size = loaded_through_softlist() ? get_software_region_length("rom") : length();
+ if (size > 0x1000000)
+ {
+ seterror(IMAGE_ERROR_UNSPECIFIED, "Attempted loading a cart larger than 16MB");
+ return image_init_result::FAIL;
+ }
+
+ m_cart->rom_alloc(size, tag());
+ uint8_t *rom = (uint8_t *)m_cart->get_rom_base();
+
+ if (!loaded_through_softlist())
+ {
+ fread(rom, size);
+ m_type = VSMILE_STD;
+ }
+ else
+ {
+ const char *pcb_name = get_feature("slot");
+
+ memcpy(rom, get_software_region("rom"), size);
+
+ if (pcb_name)
+ m_type = vsmile_get_pcb_id(pcb_name);
+
+ osd_printf_info("V.Smile: Detected (XML) %s\n", pcb_name ? pcb_name : "NONE");
+ }
+
+ if (m_type == VSMILE_NVRAM)
+ {
+ m_cart->nvram_alloc(0x200000);
+ }
+
+ if (m_cart->get_nvram_size())
+ {
+ battery_load(m_cart->get_nvram_base(), m_cart->get_nvram_size(), 0x00);
+ }
+
+ return image_init_result::PASS;
+ }
+
+ return image_init_result::PASS;
+}
+
+
+/*-------------------------------------------------
+ call_unload
+ -------------------------------------------------*/
+
+void vsmile_cart_slot_device::call_unload()
+{
+ if (m_cart && m_cart->get_nvram_size())
+ {
+ battery_save(m_cart->get_nvram_base(), m_cart->get_nvram_size());
+ }
+}
+
+
+/*-------------------------------------------------
+ get default card software
+ -------------------------------------------------*/
+
+std::string vsmile_cart_slot_device::get_default_card_software(get_default_card_software_hook &hook) const
+{
+ return software_get_default_slot("vsmile_rom");
+}
+
+
+/*-------------------------------------------------
+ cart accessors
+ -------------------------------------------------*/
+
+READ16_MEMBER(vsmile_cart_slot_device::bank0_r)
+{
+ return m_cart->bank0_r(space, offset, mem_mask);
+}
+
+READ16_MEMBER(vsmile_cart_slot_device::bank1_r)
+{
+ return m_cart->bank1_r(space, offset, mem_mask);
+}
+
+READ16_MEMBER(vsmile_cart_slot_device::bank2_r)
+{
+ return m_cart->bank2_r(space, offset, mem_mask);
+}
+
+READ16_MEMBER(vsmile_cart_slot_device::bank3_r)
+{
+ return m_cart->bank3_r(space, offset, mem_mask);
+}
+
+WRITE16_MEMBER(vsmile_cart_slot_device::bank0_w)
+{
+ m_cart->bank0_w(space, offset, data, mem_mask);
+}
+
+WRITE16_MEMBER(vsmile_cart_slot_device::bank1_w)
+{
+ m_cart->bank1_w(space, offset, data, mem_mask);
+}
+
+WRITE16_MEMBER(vsmile_cart_slot_device::bank2_w)
+{
+ m_cart->bank2_w(space, offset, data, mem_mask);
+}
+
+WRITE16_MEMBER(vsmile_cart_slot_device::bank3_w)
+{
+ m_cart->bank3_w(space, offset, data, mem_mask);
+}
+
+void vsmile_cart_slot_device::set_cs2(bool cs2)
+{
+ m_cart->set_cs2(cs2);
+}
diff --git a/src/devices/bus/vsmile/vsmile_slot.h b/src/devices/bus/vsmile/vsmile_slot.h
new file mode 100644
index 00000000000..7d800677214
--- /dev/null
+++ b/src/devices/bus/vsmile/vsmile_slot.h
@@ -0,0 +1,128 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+#ifndef MAME_BUS_VSMILE_VSMILE_SLOT_H
+#define MAME_BUS_VSMILE_VSMILE_SLOT_H
+
+#pragma once
+
+#include "softlist_dev.h"
+
+
+/***************************************************************************
+ TYPE DEFINITIONS
+ ***************************************************************************/
+
+#define VSMILE_SLOT_ROM_REGION_TAG ":cart:rom"
+
+enum
+{
+ VSMILE_STD = 0,
+ VSMILE_NVRAM
+};
+
+// ======================> device_vsmile_cart_interface
+
+class device_vsmile_cart_interface : public device_slot_card_interface
+{
+public:
+ // construction/destruction
+ virtual ~device_vsmile_cart_interface();
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(bank0_r) { return 0; }
+ virtual DECLARE_READ16_MEMBER(bank1_r) { return 0; }
+ virtual DECLARE_READ16_MEMBER(bank2_r) { return 0; }
+ virtual DECLARE_READ16_MEMBER(bank3_r) { return 0; }
+ virtual DECLARE_WRITE16_MEMBER(bank0_w) { }
+ virtual DECLARE_WRITE16_MEMBER(bank1_w) { }
+ virtual DECLARE_WRITE16_MEMBER(bank2_w) { }
+ virtual DECLARE_WRITE16_MEMBER(bank3_w) { }
+
+ // banking
+ virtual void set_cs2(bool cs2) = 0;
+
+ void rom_alloc(uint32_t size, const char *tag);
+ void nvram_alloc(uint32_t size);
+ uint16_t* get_rom_base() { return m_rom; }
+ uint16_t* get_nvram_base() { return &m_nvram[0]; }
+ uint32_t get_rom_size() { return m_rom_size; }
+ uint32_t get_nvram_size() { return m_nvram.size() * sizeof(uint16_t); }
+ void set_rom_size(uint32_t val) { m_rom_size = val; }
+
+ void save_nvram() { device().save_item(NAME(m_nvram)); }
+
+protected:
+ device_vsmile_cart_interface(const machine_config &mconfig, device_t &device);
+
+ // internal state
+ uint16_t *m_rom; // this points to the cart rom region
+ uint32_t m_rom_size; // this is the actual game size, not the rom region size!
+ std::vector<uint16_t> m_nvram;
+};
+
+
+// ======================> vsmile_cart_slot_device
+
+class vsmile_cart_slot_device : public device_t,
+ public device_image_interface,
+ public device_slot_interface
+{
+public:
+ // construction/destruction
+ template <typename T>
+ vsmile_cart_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : vsmile_cart_slot_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+ vsmile_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ virtual ~vsmile_cart_slot_device();
+
+ // device-level overrides
+ virtual void device_start() override;
+
+ // image-level overrides
+ virtual image_init_result call_load() override;
+ virtual void call_unload() override;
+ virtual const software_list_loader &get_software_list_loader() const override { return rom_software_list_loader::instance(); }
+
+ void save_nvram() { if (m_cart && m_cart->get_nvram_size()) m_cart->save_nvram(); }
+ uint32_t get_rom_size() { if (m_cart) return m_cart->get_rom_size(); return 0; }
+
+ virtual iodevice_t image_type() const override { return IO_CARTSLOT; }
+ virtual bool is_readable() const override { return 1; }
+ virtual bool is_writeable() const override { return 0; }
+ virtual bool is_creatable() const override { return 0; }
+ virtual bool must_be_loaded() const override { return 0; }
+ virtual bool is_reset_on_load() const override { return 1; }
+ virtual const char *image_interface() const override { return "vsmile_cart"; }
+ virtual const char *file_extensions() const override { return "u1,u3,bin"; }
+
+ // slot interface overrides
+ virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(bank0_r);
+ virtual DECLARE_READ16_MEMBER(bank1_r);
+ virtual DECLARE_READ16_MEMBER(bank2_r);
+ virtual DECLARE_READ16_MEMBER(bank3_r);
+ virtual DECLARE_WRITE16_MEMBER(bank0_w);
+ virtual DECLARE_WRITE16_MEMBER(bank1_w);
+ virtual DECLARE_WRITE16_MEMBER(bank2_w);
+ virtual DECLARE_WRITE16_MEMBER(bank3_w);
+
+ // banking
+ void set_cs2(bool cs2);
+
+protected:
+ int m_type;
+ device_vsmile_cart_interface* m_cart;
+};
+
+// device type definition
+DECLARE_DEVICE_TYPE(VSMILE_CART_SLOT, vsmile_cart_slot_device)
+
+#endif // MAME_BUS_VSMILE_VSMILE_SLOT_H
diff --git a/src/devices/bus/vtech/ioexp/ioexp.cpp b/src/devices/bus/vtech/ioexp/ioexp.cpp
index c2916a0ba14..897b0dba95b 100644
--- a/src/devices/bus/vtech/ioexp/ioexp.cpp
+++ b/src/devices/bus/vtech/ioexp/ioexp.cpp
@@ -30,7 +30,7 @@ DEFINE_DEVICE_TYPE(VTECH_IOEXP_SLOT, vtech_ioexp_slot_device, "vtech_ioexp_slot"
vtech_ioexp_slot_device::vtech_ioexp_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, VTECH_IOEXP_SLOT, tag, owner, clock),
device_slot_interface(mconfig, *this),
- m_io(nullptr),
+ m_io(*this, finder_base::DUMMY_TAG, -1),
m_cart(nullptr)
{
}
@@ -59,15 +59,6 @@ void vtech_ioexp_slot_device::device_reset()
{
}
-//-------------------------------------------------
-// set_io_space - set address space we are attached to
-//-------------------------------------------------
-
-void vtech_ioexp_slot_device::set_io_space(address_space *io)
-{
- m_io = io;
-}
-
//**************************************************************************
// CARTRIDGE INTERFACE
diff --git a/src/devices/bus/vtech/ioexp/ioexp.h b/src/devices/bus/vtech/ioexp/ioexp.h
index 0c2a3d2d431..9a78f861478 100644
--- a/src/devices/bus/vtech/ioexp/ioexp.h
+++ b/src/devices/bus/vtech/ioexp/ioexp.h
@@ -54,14 +54,14 @@ public:
vtech_ioexp_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~vtech_ioexp_slot_device();
- void set_io_space(address_space *io);
+ template <typename T> void set_io_space(T &&tag, int spacenum) { m_io.set_tag(std::forward<T>(tag), spacenum); }
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
- address_space *m_io;
+ required_address_space m_io;
device_vtech_ioexp_interface *m_cart;
};
diff --git a/src/devices/bus/vtech/ioexp/printer.cpp b/src/devices/bus/vtech/ioexp/printer.cpp
index 66967668703..b927f41d3c4 100644
--- a/src/devices/bus/vtech/ioexp/printer.cpp
+++ b/src/devices/bus/vtech/ioexp/printer.cpp
@@ -23,11 +23,14 @@ DEFINE_DEVICE_TYPE(VTECH_PRINTER_INTERFACE, vtech_printer_interface_device, "vte
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(vtech_printer_interface_device::device_add_mconfig)
- MCFG_DEVICE_ADD(m_centronics, CENTRONICS, centronics_devices, "printer")
- MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(*this, vtech_printer_interface_device, busy_w))
- MCFG_CENTRONICS_OUTPUT_LATCH_ADD("latch", "centronics")
-MACHINE_CONFIG_END
+void vtech_printer_interface_device::device_add_mconfig(machine_config &config)
+{
+ CENTRONICS(config, m_centronics, centronics_devices, "printer");
+ m_centronics->busy_handler().set(FUNC(vtech_printer_interface_device::busy_w));
+
+ OUTPUT_LATCH(config, m_latch);
+ m_centronics->set_output_latch(*m_latch);
+}
//**************************************************************************
diff --git a/src/devices/bus/vtech/memexp/floppy.cpp b/src/devices/bus/vtech/memexp/floppy.cpp
index bf7a3175594..5807588ec27 100644
--- a/src/devices/bus/vtech/memexp/floppy.cpp
+++ b/src/devices/bus/vtech/memexp/floppy.cpp
@@ -107,9 +107,6 @@ void vtech_floppy_controller_device::device_start()
void vtech_floppy_controller_device::device_reset()
{
- m_memexp->set_io_space(&io_space());
- m_memexp->set_program_space(&program_space());
-
program_space().install_rom(0x4000, 0x5fff, memregion("software")->base());
io_space().install_device(0x10, 0x1f, *this, &vtech_floppy_controller_device::map);
diff --git a/src/devices/bus/vtech/memexp/memexp.cpp b/src/devices/bus/vtech/memexp/memexp.cpp
index e7f61e5d048..90f51da7345 100644
--- a/src/devices/bus/vtech/memexp/memexp.cpp
+++ b/src/devices/bus/vtech/memexp/memexp.cpp
@@ -30,8 +30,8 @@ DEFINE_DEVICE_TYPE(VTECH_MEMEXP_SLOT, vtech_memexp_slot_device, "vtech_memexp_sl
vtech_memexp_slot_device::vtech_memexp_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, VTECH_MEMEXP_SLOT, tag, owner, clock),
device_slot_interface(mconfig, *this),
- m_program(nullptr),
- m_io(nullptr),
+ m_program(*this, finder_base::DUMMY_TAG, -1),
+ m_io(*this, finder_base::DUMMY_TAG, -1),
m_cart(nullptr),
m_int_handler(*this),
m_nmi_handler(*this),
@@ -48,6 +48,28 @@ vtech_memexp_slot_device::~vtech_memexp_slot_device()
}
//-------------------------------------------------
+// device_config_complete - perform any
+// operations now that the configuration is
+// complete
+//-------------------------------------------------
+
+void vtech_memexp_slot_device::device_config_complete()
+{
+ // for passthrough connectors, use the parent slot's spaces
+ if (dynamic_cast<device_vtech_memexp_interface *>(owner()) != nullptr)
+ {
+ auto parent = dynamic_cast<vtech_memexp_slot_device *>(owner()->owner());
+ if (parent != nullptr)
+ {
+ if (m_program.finder_tag() == finder_base::DUMMY_TAG)
+ m_program.set_tag(parent->m_program, parent->m_program.spacenum());
+ if (m_io.finder_tag() == finder_base::DUMMY_TAG)
+ m_io.set_tag(parent->m_io, parent->m_io.spacenum());
+ }
+ }
+}
+
+//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -67,24 +89,6 @@ void vtech_memexp_slot_device::device_reset()
{
}
-//-------------------------------------------------
-// set_program_space - set address space we are attached to
-//-------------------------------------------------
-
-void vtech_memexp_slot_device::set_program_space(address_space *program)
-{
- m_program = program;
-}
-
-//-------------------------------------------------
-// set_io_space - set address space we are attached to
-//-------------------------------------------------
-
-void vtech_memexp_slot_device::set_io_space(address_space *io)
-{
- m_io = io;
-}
-
//**************************************************************************
// CARTRIDGE INTERFACE
diff --git a/src/devices/bus/vtech/memexp/memexp.h b/src/devices/bus/vtech/memexp/memexp.h
index 097036bfd92..ca096075e90 100644
--- a/src/devices/bus/vtech/memexp/memexp.h
+++ b/src/devices/bus/vtech/memexp/memexp.h
@@ -61,8 +61,8 @@ public:
vtech_memexp_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~vtech_memexp_slot_device();
- void set_program_space(address_space *program);
- void set_io_space(address_space *io);
+ template <typename T> void set_program_space(T &&tag, int spacenum) { m_program.set_tag(std::forward<T>(tag), spacenum); }
+ template <typename T> void set_io_space(T &&tag, int spacenum) { m_io.set_tag(std::forward<T>(tag), spacenum); }
// callbacks
auto int_handler() { return m_int_handler.bind(); }
@@ -76,11 +76,12 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete() override;
virtual void device_start() override;
virtual void device_reset() override;
- address_space *m_program;
- address_space *m_io;
+ required_address_space m_program;
+ required_address_space m_io;
device_vtech_memexp_interface *m_cart;
diff --git a/src/devices/bus/wangpc/emb.cpp b/src/devices/bus/wangpc/emb.cpp
index 8f555391bea..8a1817d1666 100644
--- a/src/devices/bus/wangpc/emb.cpp
+++ b/src/devices/bus/wangpc/emb.cpp
@@ -85,7 +85,7 @@ void wangpc_emb_device::device_reset()
// wangpcbus_mrdc_r - memory read
//-------------------------------------------------
-uint16_t wangpc_emb_device::wangpcbus_mrdc_r(address_space &space, offs_t offset, uint16_t mem_mask)
+uint16_t wangpc_emb_device::wangpcbus_mrdc_r(offs_t offset, uint16_t mem_mask)
{
uint16_t data = 0xffff;
@@ -105,7 +105,7 @@ uint16_t wangpc_emb_device::wangpcbus_mrdc_r(address_space &space, offs_t offset
// wangpcbus_amwc_w - memory write
//-------------------------------------------------
-void wangpc_emb_device::wangpcbus_amwc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data)
+void wangpc_emb_device::wangpcbus_amwc_w(offs_t offset, uint16_t mem_mask, uint16_t data)
{
for (int bank = 0; bank < 4; bank++)
{
@@ -121,7 +121,7 @@ void wangpc_emb_device::wangpcbus_amwc_w(address_space &space, offs_t offset, ui
// wangpcbus_iorc_r - I/O read
//-------------------------------------------------
-uint16_t wangpc_emb_device::wangpcbus_iorc_r(address_space &space, offs_t offset, uint16_t mem_mask)
+uint16_t wangpc_emb_device::wangpcbus_iorc_r(offs_t offset, uint16_t mem_mask)
{
uint16_t data = 0xffff;
@@ -149,7 +149,7 @@ uint16_t wangpc_emb_device::wangpcbus_iorc_r(address_space &space, offs_t offset
// wangpcbus_aiowc_w - I/O write
//-------------------------------------------------
-void wangpc_emb_device::wangpcbus_aiowc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data)
+void wangpc_emb_device::wangpcbus_aiowc_w(offs_t offset, uint16_t mem_mask, uint16_t data)
{
if (sad(offset))
{
diff --git a/src/devices/bus/wangpc/emb.h b/src/devices/bus/wangpc/emb.h
index bdaa7698b51..1e175ae6867 100644
--- a/src/devices/bus/wangpc/emb.h
+++ b/src/devices/bus/wangpc/emb.h
@@ -34,10 +34,10 @@ protected:
virtual void device_reset() override;
// device_wangpcbus_card_interface overrides
- virtual uint16_t wangpcbus_mrdc_r(address_space &space, offs_t offset, uint16_t mem_mask) override;
- virtual void wangpcbus_amwc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data) override;
- virtual uint16_t wangpcbus_iorc_r(address_space &space, offs_t offset, uint16_t mem_mask) override;
- virtual void wangpcbus_aiowc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data) override;
+ virtual uint16_t wangpcbus_mrdc_r(offs_t offset, uint16_t mem_mask) override;
+ virtual void wangpcbus_amwc_w(offs_t offset, uint16_t mem_mask, uint16_t data) override;
+ virtual uint16_t wangpcbus_iorc_r(offs_t offset, uint16_t mem_mask) override;
+ virtual void wangpcbus_aiowc_w(offs_t offset, uint16_t mem_mask, uint16_t data) override;
private:
optional_shared_ptr<uint16_t> m_ram;
diff --git a/src/devices/bus/wangpc/lic.cpp b/src/devices/bus/wangpc/lic.cpp
index 30694d7d7c8..f56c673fd26 100644
--- a/src/devices/bus/wangpc/lic.cpp
+++ b/src/devices/bus/wangpc/lic.cpp
@@ -50,9 +50,9 @@ const tiny_rom_entry *wangpc_lic_device::device_rom_region() const
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(wangpc_lic_device::device_add_mconfig)
-MACHINE_CONFIG_END
-
+void wangpc_lic_device::device_add_mconfig(machine_config &config)
+{
+}
//**************************************************************************
@@ -92,7 +92,7 @@ void wangpc_lic_device::device_reset()
// wangpcbus_mrdc_r - memory read
//-------------------------------------------------
-uint16_t wangpc_lic_device::wangpcbus_mrdc_r(address_space &space, offs_t offset, uint16_t mem_mask)
+uint16_t wangpc_lic_device::wangpcbus_mrdc_r(offs_t offset, uint16_t mem_mask)
{
uint16_t data = 0xffff;
@@ -104,7 +104,7 @@ uint16_t wangpc_lic_device::wangpcbus_mrdc_r(address_space &space, offs_t offset
// wangpcbus_amwc_w - memory write
//-------------------------------------------------
-void wangpc_lic_device::wangpcbus_amwc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data)
+void wangpc_lic_device::wangpcbus_amwc_w(offs_t offset, uint16_t mem_mask, uint16_t data)
{
}
@@ -113,7 +113,7 @@ void wangpc_lic_device::wangpcbus_amwc_w(address_space &space, offs_t offset, ui
// wangpcbus_iorc_r - I/O read
//-------------------------------------------------
-uint16_t wangpc_lic_device::wangpcbus_iorc_r(address_space &space, offs_t offset, uint16_t mem_mask)
+uint16_t wangpc_lic_device::wangpcbus_iorc_r(offs_t offset, uint16_t mem_mask)
{
uint16_t data = 0xffff;
@@ -135,7 +135,7 @@ uint16_t wangpc_lic_device::wangpcbus_iorc_r(address_space &space, offs_t offset
// wangpcbus_aiowc_w - I/O write
//-------------------------------------------------
-void wangpc_lic_device::wangpcbus_aiowc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data)
+void wangpc_lic_device::wangpcbus_aiowc_w(offs_t offset, uint16_t mem_mask, uint16_t data)
{
if (sad(offset))
{
diff --git a/src/devices/bus/wangpc/lic.h b/src/devices/bus/wangpc/lic.h
index f3a27f0bc77..8ead2c65f0a 100644
--- a/src/devices/bus/wangpc/lic.h
+++ b/src/devices/bus/wangpc/lic.h
@@ -36,10 +36,10 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_wangpcbus_card_interface overrides
- virtual uint16_t wangpcbus_mrdc_r(address_space &space, offs_t offset, uint16_t mem_mask) override;
- virtual void wangpcbus_amwc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data) override;
- virtual uint16_t wangpcbus_iorc_r(address_space &space, offs_t offset, uint16_t mem_mask) override;
- virtual void wangpcbus_aiowc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data) override;
+ virtual uint16_t wangpcbus_mrdc_r(offs_t offset, uint16_t mem_mask) override;
+ virtual void wangpcbus_amwc_w(offs_t offset, uint16_t mem_mask, uint16_t data) override;
+ virtual uint16_t wangpcbus_iorc_r(offs_t offset, uint16_t mem_mask) override;
+ virtual void wangpcbus_aiowc_w(offs_t offset, uint16_t mem_mask, uint16_t data) override;
};
diff --git a/src/devices/bus/wangpc/lvc.cpp b/src/devices/bus/wangpc/lvc.cpp
index f4d05b8827d..0d316e5b15b 100644
--- a/src/devices/bus/wangpc/lvc.cpp
+++ b/src/devices/bus/wangpc/lvc.cpp
@@ -113,16 +113,17 @@ WRITE_LINE_MEMBER( wangpc_lvc_device::vsync_w )
}
//-------------------------------------------------
-// MACHINE_CONFIG_START( wangpc_lvc )
+// machine_config( wangpc_lvc )
//-------------------------------------------------
-MACHINE_CONFIG_START(wangpc_lvc_device::device_add_mconfig)
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
- MCFG_SCREEN_UPDATE_DEVICE(MC6845_TAG, mc6845_device, screen_update)
- MCFG_SCREEN_SIZE(80*8, 25*9)
- MCFG_SCREEN_VISIBLE_AREA(0, 80*8-1, 0, 25*9-1)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
- MCFG_SCREEN_REFRESH_RATE(60)
+void wangpc_lvc_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER));
+ screen.set_screen_update(MC6845_TAG, FUNC(mc6845_device::screen_update));
+ screen.set_size(80*8, 25*9);
+ screen.set_visarea(0, 80*8-1, 0, 25*9-1);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500));
+ screen.set_refresh_hz(60);
MC6845_1(config, m_crtc, XTAL(14'318'181)/16);
m_crtc->set_screen(SCREEN_TAG);
@@ -130,7 +131,7 @@ MACHINE_CONFIG_START(wangpc_lvc_device::device_add_mconfig)
m_crtc->set_char_width(8);
m_crtc->set_update_row_callback(FUNC(wangpc_lvc_device::crtc_update_row), this);
m_crtc->out_vsync_callback().set(FUNC(wangpc_lvc_device::vsync_w));
-MACHINE_CONFIG_END
+}
@@ -202,7 +203,7 @@ void wangpc_lvc_device::device_reset()
// wangpcbus_mrdc_r - memory read
//-------------------------------------------------
-uint16_t wangpc_lvc_device::wangpcbus_mrdc_r(address_space &space, offs_t offset, uint16_t mem_mask)
+uint16_t wangpc_lvc_device::wangpcbus_mrdc_r(offs_t offset, uint16_t mem_mask)
{
uint16_t data = 0xffff;
@@ -221,7 +222,7 @@ uint16_t wangpc_lvc_device::wangpcbus_mrdc_r(address_space &space, offs_t offset
// wangpcbus_amwc_w - memory write
//-------------------------------------------------
-void wangpc_lvc_device::wangpcbus_amwc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data)
+void wangpc_lvc_device::wangpcbus_amwc_w(offs_t offset, uint16_t mem_mask, uint16_t data)
{
if (OPTION_VRAM && (offset >= 0xe0000/2) && (offset < 0xf0000/2))
{
@@ -236,7 +237,7 @@ void wangpc_lvc_device::wangpcbus_amwc_w(address_space &space, offs_t offset, ui
// wangpcbus_iorc_r - I/O read
//-------------------------------------------------
-uint16_t wangpc_lvc_device::wangpcbus_iorc_r(address_space &space, offs_t offset, uint16_t mem_mask)
+uint16_t wangpc_lvc_device::wangpcbus_iorc_r(offs_t offset, uint16_t mem_mask)
{
uint16_t data = 0xffff;
@@ -245,7 +246,7 @@ uint16_t wangpc_lvc_device::wangpcbus_iorc_r(address_space &space, offs_t offset
switch (offset & 0x7f)
{
case 0x02/2:
- data = 0xff00 | m_crtc->register_r(space, 0);
+ data = 0xff00 | m_crtc->register_r();
break;
case 0x30/2:
@@ -269,7 +270,7 @@ uint16_t wangpc_lvc_device::wangpcbus_iorc_r(address_space &space, offs_t offset
// wangpcbus_aiowc_w - I/O write
//-------------------------------------------------
-void wangpc_lvc_device::wangpcbus_aiowc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data)
+void wangpc_lvc_device::wangpcbus_aiowc_w(offs_t offset, uint16_t mem_mask, uint16_t data)
{
if (sad(offset))
{
@@ -278,14 +279,14 @@ void wangpc_lvc_device::wangpcbus_aiowc_w(address_space &space, offs_t offset, u
case 0x00/2:
if (ACCESSING_BITS_0_7)
{
- m_crtc->address_w(space, 0, data & 0xff);
+ m_crtc->address_w(data & 0xff);
}
break;
case 0x02/2:
if (ACCESSING_BITS_0_7)
{
- m_crtc->register_w(space, 0, data & 0xff);
+ m_crtc->register_w(data & 0xff);
}
break;
diff --git a/src/devices/bus/wangpc/lvc.h b/src/devices/bus/wangpc/lvc.h
index 7b4f9203007..3fa858adf1c 100644
--- a/src/devices/bus/wangpc/lvc.h
+++ b/src/devices/bus/wangpc/lvc.h
@@ -36,10 +36,10 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_wangpcbus_card_interface overrides
- virtual uint16_t wangpcbus_mrdc_r(address_space &space, offs_t offset, uint16_t mem_mask) override;
- virtual void wangpcbus_amwc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data) override;
- virtual uint16_t wangpcbus_iorc_r(address_space &space, offs_t offset, uint16_t mem_mask) override;
- virtual void wangpcbus_aiowc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data) override;
+ virtual uint16_t wangpcbus_mrdc_r(offs_t offset, uint16_t mem_mask) override;
+ virtual void wangpcbus_amwc_w(offs_t offset, uint16_t mem_mask, uint16_t data) override;
+ virtual uint16_t wangpcbus_iorc_r(offs_t offset, uint16_t mem_mask) override;
+ virtual void wangpcbus_aiowc_w(offs_t offset, uint16_t mem_mask, uint16_t data) override;
private:
MC6845_UPDATE_ROW( crtc_update_row );
diff --git a/src/devices/bus/wangpc/mcc.cpp b/src/devices/bus/wangpc/mcc.cpp
index d5c8bf4b941..5b029ed38d2 100644
--- a/src/devices/bus/wangpc/mcc.cpp
+++ b/src/devices/bus/wangpc/mcc.cpp
@@ -52,7 +52,7 @@ DEFINE_DEVICE_TYPE(WANGPC_MCC, wangpc_mcc_device, "wangpc_mcc", "Wang PC-PM043 M
//-------------------------------------------------
-// MACHINE_CONFIG_START( wangpc_mcc )
+// machine_config( wangpc_mcc )
//-------------------------------------------------
void wangpc_mcc_device::device_add_mconfig(machine_config &config)
@@ -129,7 +129,7 @@ void wangpc_mcc_device::device_reset()
// wangpcbus_iorc_r - I/O read
//-------------------------------------------------
-uint16_t wangpc_mcc_device::wangpcbus_iorc_r(address_space &space, offs_t offset, uint16_t mem_mask)
+uint16_t wangpc_mcc_device::wangpcbus_iorc_r(offs_t offset, uint16_t mem_mask)
{
uint16_t data = 0xffff;
@@ -143,7 +143,7 @@ uint16_t wangpc_mcc_device::wangpcbus_iorc_r(address_space &space, offs_t offset
case 0x06/2:
if (ACCESSING_BITS_0_7)
{
- data = 0xff00 | m_sio->cd_ba_r(space, offset >> 1);
+ data = 0xff00 | m_sio->cd_ba_r(machine().dummy_space(), offset >> 1);
}
break;
@@ -153,7 +153,7 @@ uint16_t wangpc_mcc_device::wangpcbus_iorc_r(address_space &space, offs_t offset
case 0x0e/2:
if (ACCESSING_BITS_0_7)
{
- data = 0xff00 | m_dart->cd_ba_r(space, offset >> 1);
+ data = 0xff00 | m_dart->cd_ba_r(machine().dummy_space(), offset >> 1);
}
break;
@@ -198,7 +198,7 @@ uint16_t wangpc_mcc_device::wangpcbus_iorc_r(address_space &space, offs_t offset
// wangpcbus_aiowc_w - I/O write
//-------------------------------------------------
-void wangpc_mcc_device::wangpcbus_aiowc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data)
+void wangpc_mcc_device::wangpcbus_aiowc_w(offs_t offset, uint16_t mem_mask, uint16_t data)
{
if (sad(offset) && ACCESSING_BITS_0_7)
{
@@ -208,14 +208,14 @@ void wangpc_mcc_device::wangpcbus_aiowc_w(address_space &space, offs_t offset, u
case 0x02/2:
case 0x04/2:
case 0x06/2:
- m_sio->cd_ba_w(space, offset >> 1, data & 0xff);
+ m_sio->cd_ba_w(machine().dummy_space(), offset >> 1, data & 0xff);
break;
case 0x08/2:
case 0x0a/2:
case 0x0c/2:
case 0x0e/2:
- m_dart->cd_ba_w(space, offset >> 1, data & 0xff);
+ m_dart->cd_ba_w(machine().dummy_space(), offset >> 1, data & 0xff);
break;
case 0x12/2:
diff --git a/src/devices/bus/wangpc/mcc.h b/src/devices/bus/wangpc/mcc.h
index d09f2e23cba..58b8931f5fa 100644
--- a/src/devices/bus/wangpc/mcc.h
+++ b/src/devices/bus/wangpc/mcc.h
@@ -36,8 +36,8 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_wangpcbus_card_interface overrides
- virtual uint16_t wangpcbus_iorc_r(address_space &space, offs_t offset, uint16_t mem_mask) override;
- virtual void wangpcbus_aiowc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data) override;
+ virtual uint16_t wangpcbus_iorc_r(offs_t offset, uint16_t mem_mask) override;
+ virtual void wangpcbus_aiowc_w(offs_t offset, uint16_t mem_mask, uint16_t data) override;
private:
inline void set_irq(int state);
diff --git a/src/devices/bus/wangpc/mvc.cpp b/src/devices/bus/wangpc/mvc.cpp
index 79999d72ade..af78d16cc29 100644
--- a/src/devices/bus/wangpc/mvc.cpp
+++ b/src/devices/bus/wangpc/mvc.cpp
@@ -133,16 +133,17 @@ WRITE_LINE_MEMBER( wangpc_mvc_device::vsync_w )
}
//-------------------------------------------------
-// MACHINE_CONFIG_START( wangpc_mvc )
+// machine_config( wangpc_mvc )
//-------------------------------------------------
-MACHINE_CONFIG_START(wangpc_mvc_device::device_add_mconfig)
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
- MCFG_SCREEN_UPDATE_DEVICE(MC6845_TAG, mc6845_device, screen_update)
- MCFG_SCREEN_SIZE(80*10, 25*12)
- MCFG_SCREEN_VISIBLE_AREA(0, 80*10-1, 0, 25*12-1)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
- MCFG_SCREEN_REFRESH_RATE(60)
+void wangpc_mvc_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER));
+ screen.set_screen_update(MC6845_TAG, FUNC(mc6845_device::screen_update));
+ screen.set_size(80*10, 25*12);
+ screen.set_visarea(0, 80*10-1, 0, 25*12-1);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500));
+ screen.set_refresh_hz(60);
MC6845_1(config, m_crtc, XTAL(14'318'181)/16);
m_crtc->set_screen(SCREEN_TAG);
@@ -150,7 +151,7 @@ MACHINE_CONFIG_START(wangpc_mvc_device::device_add_mconfig)
m_crtc->set_char_width(10);
m_crtc->set_update_row_callback(FUNC(wangpc_mvc_device::crtc_update_row), this);
m_crtc->out_vsync_callback().set(FUNC(wangpc_mvc_device::vsync_w));
-MACHINE_CONFIG_END
+}
@@ -225,7 +226,7 @@ void wangpc_mvc_device::device_reset()
// wangpcbus_mrdc_r - memory read
//-------------------------------------------------
-uint16_t wangpc_mvc_device::wangpcbus_mrdc_r(address_space &space, offs_t offset, uint16_t mem_mask)
+uint16_t wangpc_mvc_device::wangpcbus_mrdc_r(offs_t offset, uint16_t mem_mask)
{
uint16_t data = 0xffff;
@@ -253,7 +254,7 @@ uint16_t wangpc_mvc_device::wangpcbus_mrdc_r(address_space &space, offs_t offset
// wangpcbus_amwc_w - memory write
//-------------------------------------------------
-void wangpc_mvc_device::wangpcbus_amwc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data)
+void wangpc_mvc_device::wangpcbus_amwc_w(offs_t offset, uint16_t mem_mask, uint16_t data)
{
if (OPTION_VRAM)
{
@@ -277,7 +278,7 @@ void wangpc_mvc_device::wangpcbus_amwc_w(address_space &space, offs_t offset, ui
// wangpcbus_iorc_r - I/O read
//-------------------------------------------------
-uint16_t wangpc_mvc_device::wangpcbus_iorc_r(address_space &space, offs_t offset, uint16_t mem_mask)
+uint16_t wangpc_mvc_device::wangpcbus_iorc_r(offs_t offset, uint16_t mem_mask)
{
uint16_t data = 0xffff;
@@ -301,18 +302,18 @@ uint16_t wangpc_mvc_device::wangpcbus_iorc_r(address_space &space, offs_t offset
// wangpcbus_aiowc_w - I/O write
//-------------------------------------------------
-void wangpc_mvc_device::wangpcbus_aiowc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data)
+void wangpc_mvc_device::wangpcbus_aiowc_w(offs_t offset, uint16_t mem_mask, uint16_t data)
{
if (sad(offset) && ACCESSING_BITS_0_7)
{
switch (offset & 0x7f)
{
case 0x00/2:
- m_crtc->address_w(space, 0, data & 0xff);
+ m_crtc->address_w(data & 0xff);
break;
case 0x02/2:
- m_crtc->register_w(space, 0, data & 0xff);
+ m_crtc->register_w(data & 0xff);
break;
case 0x10/2:
diff --git a/src/devices/bus/wangpc/mvc.h b/src/devices/bus/wangpc/mvc.h
index 4620126c04e..aee0cdf51b2 100644
--- a/src/devices/bus/wangpc/mvc.h
+++ b/src/devices/bus/wangpc/mvc.h
@@ -36,10 +36,10 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_wangpcbus_card_interface overrides
- virtual uint16_t wangpcbus_mrdc_r(address_space &space, offs_t offset, uint16_t mem_mask) override;
- virtual void wangpcbus_amwc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data) override;
- virtual uint16_t wangpcbus_iorc_r(address_space &space, offs_t offset, uint16_t mem_mask) override;
- virtual void wangpcbus_aiowc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data) override;
+ virtual uint16_t wangpcbus_mrdc_r(offs_t offset, uint16_t mem_mask) override;
+ virtual void wangpcbus_amwc_w(offs_t offset, uint16_t mem_mask, uint16_t data) override;
+ virtual uint16_t wangpcbus_iorc_r(offs_t offset, uint16_t mem_mask) override;
+ virtual void wangpcbus_aiowc_w(offs_t offset, uint16_t mem_mask, uint16_t data) override;
private:
MC6845_UPDATE_ROW( crtc_update_row );
diff --git a/src/devices/bus/wangpc/rtc.cpp b/src/devices/bus/wangpc/rtc.cpp
index bdf392f9bed..4512939003f 100644
--- a/src/devices/bus/wangpc/rtc.cpp
+++ b/src/devices/bus/wangpc/rtc.cpp
@@ -214,7 +214,7 @@ void wangpc_rtc_device::device_reset()
// wangpcbus_mrdc_r - memory read
//-------------------------------------------------
-uint16_t wangpc_rtc_device::wangpcbus_mrdc_r(address_space &space, offs_t offset, uint16_t mem_mask)
+uint16_t wangpc_rtc_device::wangpcbus_mrdc_r(offs_t offset, uint16_t mem_mask)
{
uint16_t data = 0xffff;
@@ -226,7 +226,7 @@ uint16_t wangpc_rtc_device::wangpcbus_mrdc_r(address_space &space, offs_t offset
// wangpcbus_amwc_w - memory write
//-------------------------------------------------
-void wangpc_rtc_device::wangpcbus_amwc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data)
+void wangpc_rtc_device::wangpcbus_amwc_w(offs_t offset, uint16_t mem_mask, uint16_t data)
{
}
@@ -235,7 +235,7 @@ void wangpc_rtc_device::wangpcbus_amwc_w(address_space &space, offs_t offset, ui
// wangpcbus_iorc_r - I/O read
//-------------------------------------------------
-uint16_t wangpc_rtc_device::wangpcbus_iorc_r(address_space &space, offs_t offset, uint16_t mem_mask)
+uint16_t wangpc_rtc_device::wangpcbus_iorc_r(offs_t offset, uint16_t mem_mask)
{
uint16_t data = 0xffff;
@@ -257,7 +257,7 @@ uint16_t wangpc_rtc_device::wangpcbus_iorc_r(address_space &space, offs_t offset
// wangpcbus_aiowc_w - I/O write
//-------------------------------------------------
-void wangpc_rtc_device::wangpcbus_aiowc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data)
+void wangpc_rtc_device::wangpcbus_aiowc_w(offs_t offset, uint16_t mem_mask, uint16_t data)
{
if (sad(offset))
{
diff --git a/src/devices/bus/wangpc/rtc.h b/src/devices/bus/wangpc/rtc.h
index 4f0b22372f2..9233222a4f9 100644
--- a/src/devices/bus/wangpc/rtc.h
+++ b/src/devices/bus/wangpc/rtc.h
@@ -41,10 +41,10 @@ protected:
virtual ioport_constructor device_input_ports() const override;
// device_wangpcbus_card_interface overrides
- virtual uint16_t wangpcbus_mrdc_r(address_space &space, offs_t offset, uint16_t mem_mask) override;
- virtual void wangpcbus_amwc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data) override;
- virtual uint16_t wangpcbus_iorc_r(address_space &space, offs_t offset, uint16_t mem_mask) override;
- virtual void wangpcbus_aiowc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data) override;
+ virtual uint16_t wangpcbus_mrdc_r(offs_t offset, uint16_t mem_mask) override;
+ virtual void wangpcbus_amwc_w(offs_t offset, uint16_t mem_mask, uint16_t data) override;
+ virtual uint16_t wangpcbus_iorc_r(offs_t offset, uint16_t mem_mask) override;
+ virtual void wangpcbus_aiowc_w(offs_t offset, uint16_t mem_mask, uint16_t data) override;
private:
required_device<z80_device> m_maincpu;
diff --git a/src/devices/bus/wangpc/tig.cpp b/src/devices/bus/wangpc/tig.cpp
index e9170b420cc..f0c00ed3cc3 100644
--- a/src/devices/bus/wangpc/tig.cpp
+++ b/src/devices/bus/wangpc/tig.cpp
@@ -111,29 +111,30 @@ UPD7220_DISPLAY_PIXELS_MEMBER( wangpc_tig_device::hgdc_display_pixels )
//-------------------------------------------------
-// MACHINE_CONFIG_START( wangpc_tig )
+// machine_config( wangpc_tig )
//-------------------------------------------------
-MACHINE_CONFIG_START(wangpc_tig_device::device_add_mconfig)
- MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green())
- MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, wangpc_tig_device, screen_update)
- MCFG_SCREEN_SIZE(80*10, 25*12)
- MCFG_SCREEN_VISIBLE_AREA(0, 80*10-1, 0, 25*12-1)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
- MCFG_SCREEN_REFRESH_RATE(60)
+void wangpc_tig_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER, rgb_t::green()));
+ screen.set_screen_update(FUNC(wangpc_tig_device::screen_update));
+ screen.set_size(80*10, 25*12);
+ screen.set_visarea(0, 80*10-1, 0, 25*12-1);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500));
+ screen.set_refresh_hz(60);
PALETTE(config, m_palette, palette_device::MONOCHROME_HIGHLIGHT);
UPD7220(config, m_hgdc0, XTAL(52'832'000)/28);
m_hgdc0->set_addrmap(0, &wangpc_tig_device::upd7220_0_map);
- m_hgdc0->set_draw_text_callback(FUNC(wangpc_tig_device::hgdc_draw_text), this);
+ m_hgdc0->set_draw_text(FUNC(wangpc_tig_device::hgdc_draw_text));
m_hgdc0->set_screen(SCREEN_TAG);
UPD7220(config, m_hgdc1, XTAL(52'832'000)/28);
m_hgdc1->set_addrmap(0, &wangpc_tig_device::upd7220_1_map);
- m_hgdc1->set_display_pixels_callback(FUNC(wangpc_tig_device::hgdc_display_pixels), this);
+ m_hgdc1->set_display_pixels(FUNC(wangpc_tig_device::hgdc_display_pixels));
m_hgdc1->set_screen(SCREEN_TAG);
-MACHINE_CONFIG_END
+}
//**************************************************************************
@@ -195,7 +196,7 @@ uint32_t wangpc_tig_device::screen_update(screen_device &screen, bitmap_rgb32 &b
// wangpcbus_iorc_r - I/O read
//-------------------------------------------------
-uint16_t wangpc_tig_device::wangpcbus_iorc_r(address_space &space, offs_t offset, uint16_t mem_mask)
+uint16_t wangpc_tig_device::wangpcbus_iorc_r(offs_t offset, uint16_t mem_mask)
{
uint16_t data = 0xffff;
@@ -205,12 +206,12 @@ uint16_t wangpc_tig_device::wangpcbus_iorc_r(address_space &space, offs_t offset
{
case 0x20/2:
case 0x22/2:
- data = m_hgdc0->read(space, offset);
+ data = m_hgdc0->read(offset);
break;
case 0x24/2:
case 0x26/2:
- data = m_hgdc1->read(space, offset);
+ data = m_hgdc1->read(offset);
break;
case 0xfe/2:
@@ -227,7 +228,7 @@ uint16_t wangpc_tig_device::wangpcbus_iorc_r(address_space &space, offs_t offset
// wangpcbus_aiowc_w - I/O write
//-------------------------------------------------
-void wangpc_tig_device::wangpcbus_aiowc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data)
+void wangpc_tig_device::wangpcbus_aiowc_w(offs_t offset, uint16_t mem_mask, uint16_t data)
{
if (sad(offset) && ACCESSING_BITS_0_7)
{
@@ -242,12 +243,12 @@ void wangpc_tig_device::wangpcbus_aiowc_w(address_space &space, offs_t offset, u
case 0x20/2:
case 0x22/2:
- m_hgdc0->write(space, offset, data);
+ m_hgdc0->write(offset, data);
break;
case 0x24/2:
case 0x26/2:
- m_hgdc1->write(space, offset, data);
+ m_hgdc1->write(offset, data);
break;
case 0x28/2:
@@ -274,17 +275,17 @@ void wangpc_tig_device::wangpcbus_aiowc_w(address_space &space, offs_t offset, u
// wangpcbus_dack_r - DMA read
//-------------------------------------------------
-uint8_t wangpc_tig_device::wangpcbus_dack_r(address_space &space, int line)
+uint8_t wangpc_tig_device::wangpcbus_dack_r(int line)
{
uint8_t data;
if (DMA_GRAPHICS)
{
- data = m_hgdc1->dack_r(space, 0);
+ data = m_hgdc1->dack_r();
}
else
{
- data = m_hgdc0->dack_r(space, 0);
+ data = m_hgdc0->dack_r();
}
return data;
@@ -295,15 +296,15 @@ uint8_t wangpc_tig_device::wangpcbus_dack_r(address_space &space, int line)
// wangpcbus_dack_w - DMA write
//-------------------------------------------------
-void wangpc_tig_device::wangpcbus_dack_w(address_space &space, int line, uint8_t data)
+void wangpc_tig_device::wangpcbus_dack_w(int line, uint8_t data)
{
if (DMA_GRAPHICS)
{
- m_hgdc1->dack_w(space, 0, data);
+ m_hgdc1->dack_w(data);
}
else
{
- m_hgdc0->dack_w(space, 0, data);
+ m_hgdc0->dack_w(data);
}
}
diff --git a/src/devices/bus/wangpc/tig.h b/src/devices/bus/wangpc/tig.h
index 4a86f6ecb40..0e95eb42676 100644
--- a/src/devices/bus/wangpc/tig.h
+++ b/src/devices/bus/wangpc/tig.h
@@ -38,10 +38,10 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_wangpcbus_card_interface overrides
- virtual uint16_t wangpcbus_iorc_r(address_space &space, offs_t offset, uint16_t mem_mask) override;
- virtual void wangpcbus_aiowc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data) override;
- virtual uint8_t wangpcbus_dack_r(address_space &space, int line) override;
- virtual void wangpcbus_dack_w(address_space &space, int line, uint8_t data) override;
+ virtual uint16_t wangpcbus_iorc_r(offs_t offset, uint16_t mem_mask) override;
+ virtual void wangpcbus_aiowc_w(offs_t offset, uint16_t mem_mask, uint16_t data) override;
+ virtual uint8_t wangpcbus_dack_r(int line) override;
+ virtual void wangpcbus_dack_w(int line, uint8_t data) override;
virtual bool wangpcbus_have_dack(int line) override;
private:
diff --git a/src/devices/bus/wangpc/wangpc.cpp b/src/devices/bus/wangpc/wangpc.cpp
index 36ed25bfdff..540ed94c1b3 100644
--- a/src/devices/bus/wangpc/wangpc.cpp
+++ b/src/devices/bus/wangpc/wangpc.cpp
@@ -104,7 +104,7 @@ void wangpcbus_device::add_card(device_wangpcbus_card_interface *card, int sid)
// mrdc_r - memory read
//-------------------------------------------------
-READ16_MEMBER( wangpcbus_device::mrdc_r )
+uint16_t wangpcbus_device::mrdc_r(offs_t offset, uint16_t mem_mask)
{
uint16_t data = 0xffff;
@@ -112,7 +112,7 @@ READ16_MEMBER( wangpcbus_device::mrdc_r )
while (entry)
{
- data &= entry->wangpcbus_mrdc_r(space, offset + 0x40000/2, mem_mask);
+ data &= entry->wangpcbus_mrdc_r(offset + 0x40000/2, mem_mask);
entry = entry->next();
}
@@ -124,13 +124,13 @@ READ16_MEMBER( wangpcbus_device::mrdc_r )
// amwc_w - memory write
//-------------------------------------------------
-WRITE16_MEMBER( wangpcbus_device::amwc_w )
+void wangpcbus_device::amwc_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
device_wangpcbus_card_interface *entry = m_device_list.first();
while (entry)
{
- entry->wangpcbus_amwc_w(space, offset + 0x40000/2, mem_mask, data);
+ entry->wangpcbus_amwc_w(offset + 0x40000/2, mem_mask, data);
entry = entry->next();
}
}
@@ -140,7 +140,7 @@ WRITE16_MEMBER( wangpcbus_device::amwc_w )
// sad_r - I/O read
//-------------------------------------------------
-READ16_MEMBER( wangpcbus_device::sad_r )
+uint16_t wangpcbus_device::sad_r(offs_t offset, uint16_t mem_mask)
{
uint16_t data = 0xffff;
@@ -148,7 +148,7 @@ READ16_MEMBER( wangpcbus_device::sad_r )
while (entry)
{
- data &= entry->wangpcbus_iorc_r(space, offset + 0x1100/2, mem_mask);
+ data &= entry->wangpcbus_iorc_r(offset + 0x1100/2, mem_mask);
entry = entry->next();
}
@@ -160,13 +160,13 @@ READ16_MEMBER( wangpcbus_device::sad_r )
// sad_w - I/O write
//-------------------------------------------------
-WRITE16_MEMBER( wangpcbus_device::sad_w )
+void wangpcbus_device::sad_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
device_wangpcbus_card_interface *entry = m_device_list.first();
while (entry)
{
- entry->wangpcbus_aiowc_w(space, offset + 0x1100/2, mem_mask, data);
+ entry->wangpcbus_aiowc_w(offset + 0x1100/2, mem_mask, data);
entry = entry->next();
}
}
@@ -176,7 +176,7 @@ WRITE16_MEMBER( wangpcbus_device::sad_w )
// dack_r - DMA read
//-------------------------------------------------
-uint8_t wangpcbus_device::dack_r(address_space &space, int line)
+uint8_t wangpcbus_device::dack_r(int line)
{
uint8_t retVal = 0xff;
device_wangpcbus_card_interface *entry = m_device_list.first();
@@ -185,7 +185,7 @@ uint8_t wangpcbus_device::dack_r(address_space &space, int line)
{
if (entry->wangpcbus_have_dack(line))
{
- retVal = entry->wangpcbus_dack_r(space, line);
+ retVal = entry->wangpcbus_dack_r(line);
break;
}
@@ -200,7 +200,7 @@ uint8_t wangpcbus_device::dack_r(address_space &space, int line)
// dack_w - DMA write
//-------------------------------------------------
-void wangpcbus_device::dack_w(address_space &space, int line, uint8_t data)
+void wangpcbus_device::dack_w(int line, uint8_t data)
{
device_wangpcbus_card_interface *entry = m_device_list.first();
@@ -208,7 +208,7 @@ void wangpcbus_device::dack_w(address_space &space, int line, uint8_t data)
{
if (entry->wangpcbus_have_dack(line))
{
- entry->wangpcbus_dack_w(space, line, data);
+ entry->wangpcbus_dack_w(line, data);
}
entry = entry->next();
diff --git a/src/devices/bus/wangpc/wangpc.h b/src/devices/bus/wangpc/wangpc.h
index 1f10892f7fc..bb8c7a3c4ac 100644
--- a/src/devices/bus/wangpc/wangpc.h
+++ b/src/devices/bus/wangpc/wangpc.h
@@ -24,51 +24,6 @@
#define WANGPC_BUS_TAG "wangpcbus"
-
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_WANGPC_BUS_ADD() \
- MCFG_DEVICE_ADD(WANGPC_BUS_TAG, WANGPC_BUS, 0)
-
-#define MCFG_WANGPC_BUS_SLOT_ADD(_tag, _sid, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, WANGPC_BUS_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- downcast<wangpcbus_slot_device &>(*device).set_wangpcbus_slot(_sid);
-
-
-#define MCFG_WANGPC_BUS_IRQ2_CALLBACK(_write) \
- downcast<wangpcbus_device &>(*device).set_irq2_wr_callback(DEVCB_##_write);
-
-#define MCFG_WANGPC_BUS_IRQ3_CALLBACK(_write) \
- downcast<wangpcbus_device &>(*device).set_irq3_wr_callback(DEVCB_##_write);
-
-#define MCFG_WANGPC_BUS_IRQ4_CALLBACK(_write) \
- downcast<wangpcbus_device &>(*device).set_irq4_wr_callback(DEVCB_##_write);
-
-#define MCFG_WANGPC_BUS_IRQ5_CALLBACK(_write) \
- downcast<wangpcbus_device &>(*device).set_irq5_wr_callback(DEVCB_##_write);
-
-#define MCFG_WANGPC_BUS_IRQ6_CALLBACK(_write) \
- downcast<wangpcbus_device &>(*device).set_irq6_wr_callback(DEVCB_##_write);
-
-#define MCFG_WANGPC_BUS_IRQ7_CALLBACK(_write) \
- downcast<wangpcbus_device &>(*device).set_irq7_wr_callback(DEVCB_##_write);
-
-#define MCFG_WANGPC_BUS_DRQ1_CALLBACK(_write) \
- downcast<wangpcbus_device &>(*device).set_drq1_wr_callback(DEVCB_##_write);
-
-#define MCFG_WANGPC_BUS_DRQ2_CALLBACK(_write) \
- downcast<wangpcbus_device &>(*device).set_drq2_wr_callback(DEVCB_##_write);
-
-#define MCFG_WANGPC_BUS_DRQ3_CALLBACK(_write) \
- downcast<wangpcbus_device &>(*device).set_drq3_wr_callback(DEVCB_##_write);
-
-#define MCFG_WANGPC_BUS_IOERROR_CALLBACK(_write) \
- downcast<wangpcbus_device &>(*device).set_ioerror_wr_callback(DEVCB_##_write);
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -81,7 +36,17 @@ class wangpcbus_slot_device : public device_t, public device_slot_interface
{
public:
// construction/destruction
- wangpcbus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ wangpcbus_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt, int sid)
+ : wangpcbus_slot_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ set_wangpcbus_slot(sid);
+ }
+ wangpcbus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
// inline configuration
void set_wangpcbus_slot(int sid) { m_sid = sid; }
@@ -113,37 +78,37 @@ public:
wangpcbus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
~wangpcbus_device() { m_device_list.detach_all(); }
- template <class Object> devcb_base &set_irq2_wr_callback(Object &&cb) { return m_write_irq2.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_irq3_wr_callback(Object &&cb) { return m_write_irq3.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_irq4_wr_callback(Object &&cb) { return m_write_irq4.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_irq5_wr_callback(Object &&cb) { return m_write_irq5.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_irq6_wr_callback(Object &&cb) { return m_write_irq6.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_irq7_wr_callback(Object &&cb) { return m_write_irq7.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_drq1_wr_callback(Object &&cb) { return m_write_drq1.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_drq2_wr_callback(Object &&cb) { return m_write_drq2.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_drq3_wr_callback(Object &&cb) { return m_write_drq3.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_ioerror_wr_callback(Object &&cb) { return m_write_ioerror.set_callback(std::forward<Object>(cb)); }
+ auto irq2_wr_callback() { return m_write_irq2.bind(); }
+ auto irq3_wr_callback() { return m_write_irq3.bind(); }
+ auto irq4_wr_callback() { return m_write_irq4.bind(); }
+ auto irq5_wr_callback() { return m_write_irq5.bind(); }
+ auto irq6_wr_callback() { return m_write_irq6.bind(); }
+ auto irq7_wr_callback() { return m_write_irq7.bind(); }
+ auto drq1_wr_callback() { return m_write_drq1.bind(); }
+ auto drq2_wr_callback() { return m_write_drq2.bind(); }
+ auto drq3_wr_callback() { return m_write_drq3.bind(); }
+ auto ioerror_wr_callback() { return m_write_ioerror.bind(); }
void add_card(device_wangpcbus_card_interface *card, int sid);
// computer interface
- DECLARE_READ16_MEMBER( mrdc_r );
- DECLARE_WRITE16_MEMBER( amwc_w );
+ uint16_t mrdc_r(offs_t offset, uint16_t mem_mask = 0xffff);
+ void amwc_w(offs_t offset, uint16_t data, uint16_t mem_mask = 0xffff);
- DECLARE_READ16_MEMBER( sad_r );
- DECLARE_WRITE16_MEMBER( sad_w );
+ uint16_t sad_r(offs_t offset, uint16_t mem_mask = 0xffff);
+ void sad_w(offs_t offset, uint16_t data, uint16_t mem_mask = 0xffff);
- uint8_t dack_r(address_space &space, int line);
- void dack_w(address_space &space, int line, uint8_t data);
+ uint8_t dack_r(int line);
+ void dack_w(int line, uint8_t data);
- DECLARE_READ8_MEMBER( dack0_r ) { return dack_r(space, 0); }
- DECLARE_WRITE8_MEMBER( dack0_w ) { dack_w(space, 0, data); }
- DECLARE_READ8_MEMBER( dack1_r ) { return dack_r(space, 1); }
- DECLARE_WRITE8_MEMBER( dack1_w ) { dack_w(space, 1, data); }
- DECLARE_READ8_MEMBER( dack2_r ) { return dack_r(space, 2); }
- DECLARE_WRITE8_MEMBER( dack2_w ) { dack_w(space, 2, data); }
- DECLARE_READ8_MEMBER( dack3_r ) { return dack_r(space, 3); }
- DECLARE_WRITE8_MEMBER( dack3_w ) { dack_w(space, 3, data); }
+ uint8_t dack0_r() { return dack_r(0); }
+ void dack0_w(uint8_t data) { dack_w(0, data); }
+ uint8_t dack1_r() { return dack_r(1); }
+ void dack1_w(uint8_t data) { dack_w(1, data); }
+ uint8_t dack2_r() { return dack_r(2); }
+ void dack2_w(uint8_t data) { dack_w(2, data); }
+ uint8_t dack3_r() { return dack_r(3); }
+ void dack3_w(uint8_t data) { dack_w(3, data); }
DECLARE_WRITE_LINE_MEMBER( tc_w );
@@ -195,17 +160,17 @@ public:
device_wangpcbus_card_interface *next() const { return m_next; }
// memory access
- virtual uint16_t wangpcbus_mrdc_r(address_space &space, offs_t offset, uint16_t mem_mask) { return 0; }
- virtual void wangpcbus_amwc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data) { }
+ virtual uint16_t wangpcbus_mrdc_r(offs_t offset, uint16_t mem_mask) { return 0; }
+ virtual void wangpcbus_amwc_w(offs_t offset, uint16_t mem_mask, uint16_t data) { }
// I/O access
- virtual uint16_t wangpcbus_iorc_r(address_space &space, offs_t offset, uint16_t mem_mask) { return 0; }
- virtual void wangpcbus_aiowc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data) { }
+ virtual uint16_t wangpcbus_iorc_r(offs_t offset, uint16_t mem_mask) { return 0; }
+ virtual void wangpcbus_aiowc_w(offs_t offset, uint16_t mem_mask, uint16_t data) { }
bool sad(offs_t offset) const { return (offset & 0xf80) == (0x800 | (m_sid << 7)); }
// DMA
- virtual uint8_t wangpcbus_dack_r(address_space &space, int line) { return 0; }
- virtual void wangpcbus_dack_w(address_space &space, int line, uint8_t data) { }
+ virtual uint8_t wangpcbus_dack_r(int line) { return 0; }
+ virtual void wangpcbus_dack_w(int line, uint8_t data) { }
virtual void wangpcbus_tc_w(int state) { }
virtual bool wangpcbus_have_dack(int line) { return false; }
diff --git a/src/devices/bus/wangpc/wdc.cpp b/src/devices/bus/wangpc/wdc.cpp
index 6dd36b7d545..2ad74d8c8fd 100644
--- a/src/devices/bus/wangpc/wdc.cpp
+++ b/src/devices/bus/wangpc/wdc.cpp
@@ -89,7 +89,7 @@ void wangpc_wdc_device::wangpc_wdc_io(address_map &map)
//-------------------------------------------------
-// MACHINE_CONFIG_START( wangpc_wdc )
+// machine_config( wangpc_wdc )
//-------------------------------------------------
void wangpc_wdc_device::device_add_mconfig(machine_config &config)
@@ -173,7 +173,7 @@ void wangpc_wdc_device::device_reset()
// wangpcbus_mrdc_r - memory read
//-------------------------------------------------
-uint16_t wangpc_wdc_device::wangpcbus_mrdc_r(address_space &space, offs_t offset, uint16_t mem_mask)
+uint16_t wangpc_wdc_device::wangpcbus_mrdc_r(offs_t offset, uint16_t mem_mask)
{
uint16_t data = 0xffff;
@@ -185,7 +185,7 @@ uint16_t wangpc_wdc_device::wangpcbus_mrdc_r(address_space &space, offs_t offset
// wangpcbus_amwc_w - memory write
//-------------------------------------------------
-void wangpc_wdc_device::wangpcbus_amwc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data)
+void wangpc_wdc_device::wangpcbus_amwc_w(offs_t offset, uint16_t mem_mask, uint16_t data)
{
}
@@ -194,7 +194,7 @@ void wangpc_wdc_device::wangpcbus_amwc_w(address_space &space, offs_t offset, ui
// wangpcbus_iorc_r - I/O read
//-------------------------------------------------
-uint16_t wangpc_wdc_device::wangpcbus_iorc_r(address_space &space, offs_t offset, uint16_t mem_mask)
+uint16_t wangpc_wdc_device::wangpcbus_iorc_r(offs_t offset, uint16_t mem_mask)
{
uint16_t data = 0xffff;
@@ -228,7 +228,7 @@ uint16_t wangpc_wdc_device::wangpcbus_iorc_r(address_space &space, offs_t offset
// wangpcbus_aiowc_w - I/O write
//-------------------------------------------------
-void wangpc_wdc_device::wangpcbus_aiowc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data)
+void wangpc_wdc_device::wangpcbus_aiowc_w(offs_t offset, uint16_t mem_mask, uint16_t data)
{
if (sad(offset) && ACCESSING_BITS_0_7)
{
@@ -263,7 +263,7 @@ void wangpc_wdc_device::wangpcbus_aiowc_w(address_space &space, offs_t offset, u
// wangpcbus_dack_r - DMA acknowledge read
//-------------------------------------------------
-uint8_t wangpc_wdc_device::wangpcbus_dack_r(address_space &space, int line)
+uint8_t wangpc_wdc_device::wangpcbus_dack_r(int line)
{
return 0;
}
@@ -273,7 +273,7 @@ uint8_t wangpc_wdc_device::wangpcbus_dack_r(address_space &space, int line)
// wangpcbus_dack_r - DMA acknowledge write
//-------------------------------------------------
-void wangpc_wdc_device::wangpcbus_dack_w(address_space &space, int line, uint8_t data)
+void wangpc_wdc_device::wangpcbus_dack_w(int line, uint8_t data)
{
}
@@ -325,11 +325,11 @@ WRITE8_MEMBER( wangpc_wdc_device::status_w )
}
-READ8_MEMBER( wangpc_wdc_device::ctc_ch0_r ) { return m_ctc->read(space, 0); }
-WRITE8_MEMBER( wangpc_wdc_device::ctc_ch0_w ) { m_ctc->write(space, 0, data); }
-READ8_MEMBER( wangpc_wdc_device::ctc_ch1_r ) { return m_ctc->read(space, 1); }
-WRITE8_MEMBER( wangpc_wdc_device::ctc_ch1_w ) { m_ctc->write(space, 1, data); }
-READ8_MEMBER( wangpc_wdc_device::ctc_ch2_r ) { return m_ctc->read(space, 2); }
-WRITE8_MEMBER( wangpc_wdc_device::ctc_ch2_w ) { m_ctc->write(space, 2, data); }
-READ8_MEMBER( wangpc_wdc_device::ctc_ch3_r ) { return m_ctc->read(space, 3); }
-WRITE8_MEMBER( wangpc_wdc_device::ctc_ch3_w ) { m_ctc->write(space, 3, data); }
+READ8_MEMBER( wangpc_wdc_device::ctc_ch0_r ) { return m_ctc->read(machine().dummy_space(), 0); }
+WRITE8_MEMBER( wangpc_wdc_device::ctc_ch0_w ) { m_ctc->write(machine().dummy_space(), 0, data); }
+READ8_MEMBER( wangpc_wdc_device::ctc_ch1_r ) { return m_ctc->read(machine().dummy_space(), 1); }
+WRITE8_MEMBER( wangpc_wdc_device::ctc_ch1_w ) { m_ctc->write(machine().dummy_space(), 1, data); }
+READ8_MEMBER( wangpc_wdc_device::ctc_ch2_r ) { return m_ctc->read(machine().dummy_space(), 2); }
+WRITE8_MEMBER( wangpc_wdc_device::ctc_ch2_w ) { m_ctc->write(machine().dummy_space(), 2, data); }
+READ8_MEMBER( wangpc_wdc_device::ctc_ch3_r ) { return m_ctc->read(machine().dummy_space(), 3); }
+WRITE8_MEMBER( wangpc_wdc_device::ctc_ch3_w ) { m_ctc->write(machine().dummy_space(), 3, data); }
diff --git a/src/devices/bus/wangpc/wdc.h b/src/devices/bus/wangpc/wdc.h
index e270a961750..c945ba6707d 100644
--- a/src/devices/bus/wangpc/wdc.h
+++ b/src/devices/bus/wangpc/wdc.h
@@ -39,12 +39,12 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// device_wangpcbus_card_interface overrides
- virtual uint16_t wangpcbus_mrdc_r(address_space &space, offs_t offset, uint16_t mem_mask) override;
- virtual void wangpcbus_amwc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data) override;
- virtual uint16_t wangpcbus_iorc_r(address_space &space, offs_t offset, uint16_t mem_mask) override;
- virtual void wangpcbus_aiowc_w(address_space &space, offs_t offset, uint16_t mem_mask, uint16_t data) override;
- virtual uint8_t wangpcbus_dack_r(address_space &space, int line) override;
- virtual void wangpcbus_dack_w(address_space &space, int line, uint8_t data) override;
+ virtual uint16_t wangpcbus_mrdc_r(offs_t offset, uint16_t mem_mask) override;
+ virtual void wangpcbus_amwc_w(offs_t offset, uint16_t mem_mask, uint16_t data) override;
+ virtual uint16_t wangpcbus_iorc_r(offs_t offset, uint16_t mem_mask) override;
+ virtual void wangpcbus_aiowc_w(offs_t offset, uint16_t mem_mask, uint16_t data) override;
+ virtual uint8_t wangpcbus_dack_r(int line) override;
+ virtual void wangpcbus_dack_w(int line, uint8_t data) override;
virtual bool wangpcbus_have_dack(int line) override;
private:
diff --git a/src/devices/bus/wswan/rom.cpp b/src/devices/bus/wswan/rom.cpp
index 4ba57a44fe4..c4c991212b6 100644
--- a/src/devices/bus/wswan/rom.cpp
+++ b/src/devices/bus/wswan/rom.cpp
@@ -205,26 +205,26 @@ void ws_rom_device::device_timer(emu_timer &timer, device_timer_id id, int param
mapper specific handlers
-------------------------------------------------*/
-READ8_MEMBER(ws_rom_device::read_rom20)
+uint8_t ws_rom_device::read_rom20(offs_t offset)
{
return m_rom[offset + m_base20];
}
-READ8_MEMBER(ws_rom_device::read_rom30)
+uint8_t ws_rom_device::read_rom30(offs_t offset)
{
return m_rom[offset + m_base30];
}
-READ8_MEMBER(ws_rom_device::read_rom40)
+uint8_t ws_rom_device::read_rom40(offs_t offset)
{
// we still need to mask in some cases, e.g. when game is 512K
return m_rom[(offset + m_base40) & (m_rom_size - 1)];
}
-READ8_MEMBER(ws_rom_device::read_io)
+uint8_t ws_rom_device::read_io(offs_t offset)
{
uint8_t value = m_io_regs[offset];
@@ -254,7 +254,7 @@ READ8_MEMBER(ws_rom_device::read_io)
return value;
}
-WRITE8_MEMBER(ws_rom_device::write_io)
+void ws_rom_device::write_io(offs_t offset, uint8_t data)
{
switch (offset)
{
@@ -344,30 +344,30 @@ WRITE8_MEMBER(ws_rom_device::write_io)
m_io_regs[offset] = data;
}
-READ8_MEMBER(ws_rom_sram_device::read_ram)
+uint8_t ws_rom_sram_device::read_ram(offs_t offset)
{
return m_nvram[m_nvram_base + offset];
}
-WRITE8_MEMBER(ws_rom_sram_device::write_ram)
+void ws_rom_sram_device::write_ram(offs_t offset, uint8_t data)
{
m_nvram[m_nvram_base + offset] = data;
}
-WRITE8_MEMBER(ws_rom_sram_device::write_io)
+void ws_rom_sram_device::write_io(offs_t offset, uint8_t data)
{
switch (offset)
{
case 0x01: // SRAM bank to select
m_nvram_base = (data * 0x10000) & (m_nvram.size() - 1);
default:
- ws_rom_device::write_io(space, offset, data);
+ ws_rom_device::write_io(offset, data);
break;
}
}
-READ8_MEMBER(ws_rom_eeprom_device::read_io)
+uint8_t ws_rom_eeprom_device::read_io(offs_t offset)
{
uint8_t value = m_io_regs[offset];
@@ -381,14 +381,14 @@ READ8_MEMBER(ws_rom_eeprom_device::read_io)
// EEPROM reads, taken from regs
break;
default:
- value = ws_rom_device::read_io(space, offset);
+ value = ws_rom_device::read_io(offset);
break;
}
return value;
}
-WRITE8_MEMBER(ws_rom_eeprom_device::write_io)
+void ws_rom_eeprom_device::write_io(offs_t offset, uint8_t data)
{
switch (offset)
{
@@ -530,7 +530,7 @@ WRITE8_MEMBER(ws_rom_eeprom_device::write_io)
break;
default:
- ws_rom_device::write_io(space, offset, data);
+ ws_rom_device::write_io(offset, data);
break;
}
diff --git a/src/devices/bus/wswan/rom.h b/src/devices/bus/wswan/rom.h
index ae420667c8f..916562ab6e2 100644
--- a/src/devices/bus/wswan/rom.h
+++ b/src/devices/bus/wswan/rom.h
@@ -16,11 +16,11 @@ public:
ws_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom20) override;
- virtual DECLARE_READ8_MEMBER(read_rom30) override;
- virtual DECLARE_READ8_MEMBER(read_rom40) override;
- virtual DECLARE_READ8_MEMBER(read_io) override;
- virtual DECLARE_WRITE8_MEMBER(write_io) override;
+ virtual uint8_t read_rom20(offs_t offset) override;
+ virtual uint8_t read_rom30(offs_t offset) override;
+ virtual uint8_t read_rom40(offs_t offset) override;
+ virtual uint8_t read_io(offs_t offset) override;
+ virtual void write_io(offs_t offset, uint8_t data) override;
protected:
static constexpr device_timer_id TIMER_RTC = 0;
@@ -59,9 +59,9 @@ public:
ws_rom_sram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_ram) override;
- virtual DECLARE_WRITE8_MEMBER(write_io) override;
+ virtual uint8_t read_ram(offs_t offset) override;
+ virtual void write_ram(offs_t offset, uint8_t data) override;
+ virtual void write_io(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
@@ -82,8 +82,8 @@ public:
ws_rom_eeprom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_io) override;
- virtual DECLARE_WRITE8_MEMBER(write_io) override;
+ virtual uint8_t read_io(offs_t offset) override;
+ virtual void write_io(offs_t offset, uint8_t data) override;
protected:
// device-level overrides
diff --git a/src/devices/bus/wswan/slot.cpp b/src/devices/bus/wswan/slot.cpp
index 45df7c195bf..731c0967e1e 100644
--- a/src/devices/bus/wswan/slot.cpp
+++ b/src/devices/bus/wswan/slot.cpp
@@ -312,10 +312,10 @@ std::string ws_cart_slot_device::get_default_card_software(get_default_card_soft
read_rom20
-------------------------------------------------*/
-READ8_MEMBER(ws_cart_slot_device::read_rom20)
+uint8_t ws_cart_slot_device::read_rom20(offs_t offset)
{
if (m_cart)
- return m_cart->read_rom20(space, offset);
+ return m_cart->read_rom20(offset);
else
return 0xff;
}
@@ -324,10 +324,10 @@ READ8_MEMBER(ws_cart_slot_device::read_rom20)
read_rom30
-------------------------------------------------*/
-READ8_MEMBER(ws_cart_slot_device::read_rom30)
+uint8_t ws_cart_slot_device::read_rom30(offs_t offset)
{
if (m_cart)
- return m_cart->read_rom30(space, offset);
+ return m_cart->read_rom30(offset);
else
return 0xff;
}
@@ -336,10 +336,10 @@ READ8_MEMBER(ws_cart_slot_device::read_rom30)
read_rom40
-------------------------------------------------*/
-READ8_MEMBER(ws_cart_slot_device::read_rom40)
+uint8_t ws_cart_slot_device::read_rom40(offs_t offset)
{
if (m_cart)
- return m_cart->read_rom40(space, offset);
+ return m_cart->read_rom40(offset);
else
return 0xff;
}
@@ -348,10 +348,10 @@ READ8_MEMBER(ws_cart_slot_device::read_rom40)
read_ram
-------------------------------------------------*/
-READ8_MEMBER(ws_cart_slot_device::read_ram)
+uint8_t ws_cart_slot_device::read_ram(offs_t offset)
{
if (m_cart)
- return m_cart->read_ram(space, offset);
+ return m_cart->read_ram(offset);
else
return 0xff;
}
@@ -360,20 +360,20 @@ READ8_MEMBER(ws_cart_slot_device::read_ram)
write_ram
-------------------------------------------------*/
-WRITE8_MEMBER(ws_cart_slot_device::write_ram)
+void ws_cart_slot_device::write_ram(offs_t offset, uint8_t data)
{
if (m_cart)
- m_cart->write_ram(space, offset, data);
+ m_cart->write_ram(offset, data);
}
/*-------------------------------------------------
read_io
-------------------------------------------------*/
-READ8_MEMBER(ws_cart_slot_device::read_io)
+uint8_t ws_cart_slot_device::read_io(offs_t offset)
{
if (m_cart)
- return m_cart->read_io(space, offset);
+ return m_cart->read_io(offset);
else
return 0xff;
}
@@ -382,10 +382,10 @@ READ8_MEMBER(ws_cart_slot_device::read_io)
write_io
-------------------------------------------------*/
-WRITE8_MEMBER(ws_cart_slot_device::write_io)
+void ws_cart_slot_device::write_io(offs_t offset, uint8_t data)
{
if (m_cart)
- m_cart->write_io(space, offset, data);
+ m_cart->write_io(offset, data);
}
diff --git a/src/devices/bus/wswan/slot.h b/src/devices/bus/wswan/slot.h
index 1992d858553..219a4bb3fe8 100644
--- a/src/devices/bus/wswan/slot.h
+++ b/src/devices/bus/wswan/slot.h
@@ -31,13 +31,13 @@ public:
virtual ~device_ws_cart_interface();
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom20) { return 0xff; }
- virtual DECLARE_READ8_MEMBER(read_rom30) { return 0xff; }
- virtual DECLARE_READ8_MEMBER(read_rom40) { return 0xff; }
- virtual DECLARE_READ8_MEMBER(read_ram) { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(write_ram) {}
- virtual DECLARE_READ8_MEMBER(read_io) { return 0xff; }
- virtual DECLARE_WRITE8_MEMBER(write_io) { }
+ virtual uint8_t read_rom20(offs_t offset) { return 0xff; }
+ virtual uint8_t read_rom30(offs_t offset) { return 0xff; }
+ virtual uint8_t read_rom40(offs_t offset) { return 0xff; }
+ virtual uint8_t read_ram(offs_t offset) { return 0xff; }
+ virtual void write_ram(offs_t offset, uint8_t data) {}
+ virtual uint8_t read_io(offs_t offset) { return 0xff; }
+ virtual void write_io(offs_t offset, uint8_t data) { }
void rom_alloc(uint32_t size, const char *tag);
void nvram_alloc(uint32_t size);
@@ -109,13 +109,13 @@ public:
virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
// reading and writing
- virtual DECLARE_READ8_MEMBER(read_rom20);
- virtual DECLARE_READ8_MEMBER(read_rom30);
- virtual DECLARE_READ8_MEMBER(read_rom40);
- virtual DECLARE_READ8_MEMBER(read_ram);
- virtual DECLARE_WRITE8_MEMBER(write_ram);
- virtual DECLARE_READ8_MEMBER(read_io);
- virtual DECLARE_WRITE8_MEMBER(write_io);
+ virtual uint8_t read_rom20(offs_t offset);
+ virtual uint8_t read_rom30(offs_t offset);
+ virtual uint8_t read_rom40(offs_t offset);
+ virtual uint8_t read_ram(offs_t offset);
+ virtual void write_ram(offs_t offset, uint8_t data);
+ virtual uint8_t read_io(offs_t offset);
+ virtual void write_io(offs_t offset, uint8_t data);
protected:
// device-level overrides
diff --git a/src/devices/bus/x68k/x68k_midi.cpp b/src/devices/bus/x68k/x68k_midi.cpp
index b4f27554b70..abcc0b34955 100644
--- a/src/devices/bus/x68k/x68k_midi.cpp
+++ b/src/devices/bus/x68k/x68k_midi.cpp
@@ -1,7 +1,7 @@
// license:BSD-3-Clause
// copyright-holders:Barry Rodewald
/*
- * x68k_midi.c
+ * x68k_midi.cpp
*
* X68000 MIDI interface - YM3802
*
@@ -17,16 +17,16 @@
DEFINE_DEVICE_TYPE(X68K_MIDI, x68k_midi_device, "x68k_midi", "X68000 MIDI Interface")
-MACHINE_CONFIG_START(x68k_midi_device::device_add_mconfig)
+void x68k_midi_device::device_add_mconfig(machine_config &config)
+{
YM3802(config, m_midi, XTAL(1'000'000)); // clock is unknown
m_midi->txd_handler().set("mdout", FUNC(midi_port_device::write_txd));
m_midi->irq_handler().set(FUNC(x68k_midi_device::irq_w));
- MCFG_MIDI_PORT_ADD("mdin", midiin_slot, "midiin")
- MCFG_MIDI_PORT_ADD("mdout", midiout_slot, "midiout")
-// MCFG_MIDI_PORT_ADD("mdthru", midiout_slot, "midiout")
+ MIDI_PORT(config, "mdin", midiin_slot, "midiin");
+ MIDI_PORT(config, "mdout", midiout_slot, "midiout");
+// MIDI_PORT(config, "mdthru", midiout_slot, "midiout");
// TODO: Add serial data handlers
-
-MACHINE_CONFIG_END
+}
x68k_midi_device::x68k_midi_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
@@ -39,10 +39,8 @@ x68k_midi_device::x68k_midi_device(const machine_config &mconfig, const char *ta
void x68k_midi_device::device_start()
{
- device_t* cpu = machine().device("maincpu");
- address_space& space = cpu->memory().space(AS_PROGRAM);
m_slot = dynamic_cast<x68k_expansion_slot_device *>(owner());
- space.install_readwrite_handler(0xeafa00,0xeafa0f,read8_delegate(FUNC(x68k_midi_device::x68k_midi_reg_r),this),write8_delegate(FUNC(x68k_midi_device::x68k_midi_reg_w),this),0x00ff00ff);
+ m_slot->space().install_readwrite_handler(0xeafa00,0xeafa0f,read8_delegate(FUNC(x68k_midi_device::x68k_midi_reg_r),this),write8_delegate(FUNC(x68k_midi_device::x68k_midi_reg_w),this),0x00ff00ff);
}
void x68k_midi_device::device_reset()
diff --git a/src/devices/bus/x68k/x68k_neptunex.cpp b/src/devices/bus/x68k/x68k_neptunex.cpp
index 4c77c32061c..7a7b7c3aaab 100644
--- a/src/devices/bus/x68k/x68k_neptunex.cpp
+++ b/src/devices/bus/x68k/x68k_neptunex.cpp
@@ -17,12 +17,13 @@
DEFINE_DEVICE_TYPE(X68K_NEPTUNEX, x68k_neptune_device, "x68k_neptunex", "Neptune-X")
// device machine config
-MACHINE_CONFIG_START(x68k_neptune_device::device_add_mconfig)
- MCFG_DEVICE_ADD("dp8390d", DP8390D, 0)
- MCFG_DP8390D_IRQ_CB(WRITELINE(*this, x68k_neptune_device, x68k_neptune_irq_w))
- MCFG_DP8390D_MEM_READ_CB(READ8(*this, x68k_neptune_device, x68k_neptune_mem_read))
- MCFG_DP8390D_MEM_WRITE_CB(WRITE8(*this, x68k_neptune_device, x68k_neptune_mem_write))
-MACHINE_CONFIG_END
+void x68k_neptune_device::device_add_mconfig(machine_config &config)
+{
+ DP8390D(config, m_dp8390, 0);
+ m_dp8390->irq_callback().set(FUNC(x68k_neptune_device::x68k_neptune_irq_w));
+ m_dp8390->mem_read_callback().set(FUNC(x68k_neptune_device::x68k_neptune_mem_read));
+ m_dp8390->mem_write_callback().set(FUNC(x68k_neptune_device::x68k_neptune_mem_write));
+}
x68k_neptune_device::x68k_neptune_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, X68K_NEPTUNEX, tag, owner, clock)
@@ -38,17 +39,15 @@ x68k_neptune_device::x68k_neptune_device(const machine_config &mconfig, const ch
void x68k_neptune_device::device_start()
{
- device_t* cpu = machine().device("maincpu");
char mac[7];
uint32_t num = machine().rand();
- address_space& space = cpu->memory().space(AS_PROGRAM);
m_slot = dynamic_cast<x68k_expansion_slot_device *>(owner());
memset(m_prom, 0x57, 16);
sprintf(mac+2, "\x1b%c%c%c", (num >> 16) & 0xff, (num >> 8) & 0xff, num & 0xff);
mac[0] = 0; mac[1] = 0; // avoid gcc warning
memcpy(m_prom, mac, 6);
m_dp8390->set_mac(mac);
- space.install_readwrite_handler(0xece000,0xece3ff,read16_delegate(FUNC(x68k_neptune_device::x68k_neptune_port_r),this),write16_delegate(FUNC(x68k_neptune_device::x68k_neptune_port_w),this),0xffffffff);
+ m_slot->space().install_readwrite_handler(0xece000,0xece3ff,read16_delegate(FUNC(x68k_neptune_device::x68k_neptune_port_r),this),write16_delegate(FUNC(x68k_neptune_device::x68k_neptune_port_w),this),0xffffffff);
}
void x68k_neptune_device::device_reset() {
diff --git a/src/devices/bus/x68k/x68k_scsiext.cpp b/src/devices/bus/x68k/x68k_scsiext.cpp
index 557d70d3f36..3cf18f9d2ee 100644
--- a/src/devices/bus/x68k/x68k_scsiext.cpp
+++ b/src/devices/bus/x68k/x68k_scsiext.cpp
@@ -37,7 +37,8 @@ const tiny_rom_entry *x68k_scsiext_device::device_rom_region() const
}
// device machine config
-MACHINE_CONFIG_START(x68k_scsiext_device::device_add_mconfig)
+void x68k_scsiext_device::device_add_mconfig(machine_config &config)
+{
SCSI_PORT(config, m_scsibus);
m_scsibus->set_slot_device(1, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_0));
m_scsibus->set_slot_device(2, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_1));
@@ -48,10 +49,10 @@ MACHINE_CONFIG_START(x68k_scsiext_device::device_add_mconfig)
m_scsibus->set_slot_device(7, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_6));
MB89352A(config, m_spc);
- m_spc->set_scsi_port("scsi");
+ m_spc->set_scsi_port(m_scsibus);
m_spc->irq_cb().set(FUNC(x68k_scsiext_device::irq_w));
m_spc->drq_cb().set(FUNC(x68k_scsiext_device::drq_w));
-MACHINE_CONFIG_END
+}
x68k_scsiext_device::x68k_scsiext_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, X68K_SCSIEXT, tag, owner, clock)
@@ -64,15 +65,14 @@ x68k_scsiext_device::x68k_scsiext_device(const machine_config &mconfig, const ch
void x68k_scsiext_device::device_start()
{
- device_t* cpu = machine().device("maincpu");
- uint8_t* ROM;
- address_space& space = cpu->memory().space(AS_PROGRAM);
m_slot = dynamic_cast<x68k_expansion_slot_device *>(owner());
- space.install_read_bank(0xea0020,0xea1fff,"scsi_ext");
- space.unmap_write(0xea0020,0xea1fff);
- ROM = machine().root_device().memregion(subtag("scsiexrom").c_str())->base();
+ 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);
- space.install_readwrite_handler(0xea0000,0xea001f,read8_delegate(FUNC(x68k_scsiext_device::register_r),this),write8_delegate(FUNC(x68k_scsiext_device::register_w),this),0x00ff00ff);
+
+m_slot->space().install_readwrite_handler(0xea0000,0xea001f,read8_delegate(FUNC(x68k_scsiext_device::register_r),this),write8_delegate(FUNC(x68k_scsiext_device::register_w),this),0x00ff00ff);
}
void x68k_scsiext_device::device_reset()
diff --git a/src/devices/bus/x68k/x68kexp.cpp b/src/devices/bus/x68k/x68kexp.cpp
index 9d9cded5bd8..dc51559d632 100644
--- a/src/devices/bus/x68k/x68kexp.cpp
+++ b/src/devices/bus/x68k/x68kexp.cpp
@@ -36,6 +36,7 @@ device_x68k_expansion_card_interface::~device_x68k_expansion_card_interface()
x68k_expansion_slot_device::x68k_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, X68K_EXPANSION_SLOT, tag, owner, clock),
device_slot_interface(mconfig, *this),
+ m_space(*this, finder_base::DUMMY_TAG, -1),
m_out_irq2_cb(*this),
m_out_irq4_cb(*this),
m_out_nmi_cb(*this),
diff --git a/src/devices/bus/x68k/x68kexp.h b/src/devices/bus/x68k/x68kexp.h
index 56f9feea8a5..26b3ba06ad6 100644
--- a/src/devices/bus/x68k/x68kexp.h
+++ b/src/devices/bus/x68k/x68kexp.h
@@ -73,22 +73,6 @@
#define X68K_EXP_SLOT_TAG "x68kexp"
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_X68K_EXPANSION_SLOT_OUT_IRQ2_CB(_devcb) \
- downcast<x68k_expansion_slot_device &>(*device).set_out_irq2_callback(DEVCB_##_devcb);
-
-#define MCFG_X68K_EXPANSION_SLOT_OUT_IRQ4_CB(_devcb) \
- downcast<x68k_expansion_slot_device &>(*device).set_out_irq4_callback(DEVCB_##_devcb);
-
-#define MCFG_X68K_EXPANSION_SLOT_OUT_NMI_CB(_devcb) \
- downcast<x68k_expansion_slot_device &>(*device).set_out_nmi_callback(DEVCB_##_devcb);
-
-#define MCFG_X68K_EXPANSION_SLOT_OUT_RESET_CB(_devcb) \
- downcast<x68k_expansion_slot_device &>(*device).set_out_reset_callback(DEVCB_##_devcb);
-
//**************************************************************************
// TYPE DEFINITIONS
@@ -123,14 +107,26 @@ class x68k_expansion_slot_device : public device_t, public device_slot_interface
{
public:
// construction/destruction
- x68k_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <typename T>
+ x68k_expansion_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : x68k_expansion_slot_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+ x68k_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
virtual ~x68k_expansion_slot_device();
- template <class Object> devcb_base &set_out_irq2_callback(Object &&cb) { return m_out_irq2_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_irq4_callback(Object &&cb) { return m_out_irq4_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_nmi_callback(Object &&cb) { return m_out_nmi_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_out_reset_callback(Object &&cb) { return m_out_reset_cb.set_callback(std::forward<Object>(cb)); }
+ template <typename T> void set_space(T &&tag, int spacenum) { m_space.set_tag(std::forward<T>(tag), spacenum); }
+ auto out_irq2_callback() { return m_out_irq2_cb.bind(); }
+ auto out_irq4_callback() { return m_out_irq4_cb.bind(); }
+ auto out_nmi_callback() { return m_out_nmi_cb.bind(); }
+ auto out_reset_callback() { return m_out_reset_cb.bind(); }
+
+ address_space &space() { return *m_space; }
DECLARE_WRITE_LINE_MEMBER( irq2_w );
DECLARE_WRITE_LINE_MEMBER( irq4_w );
@@ -144,6 +140,8 @@ protected:
virtual void device_start() override;
virtual void device_reset() override;
+ required_address_space m_space;
+
devcb_write_line m_out_irq2_cb;
devcb_write_line m_out_irq4_cb;
devcb_write_line m_out_nmi_cb;
diff --git a/src/devices/bus/z88/flash.cpp b/src/devices/bus/z88/flash.cpp
index 1fb8f9b6420..ee92f351ec7 100644
--- a/src/devices/bus/z88/flash.cpp
+++ b/src/devices/bus/z88/flash.cpp
@@ -73,7 +73,7 @@ uint8_t* z88_1024k_flash_device::get_cart_base()
READ8_MEMBER(z88_1024k_flash_device::read)
{
- return m_flash->read(space, offset & (get_cart_size() - 1));
+ return m_flash->read(offset & (get_cart_size() - 1));
}
/*-------------------------------------------------
@@ -82,5 +82,5 @@ READ8_MEMBER(z88_1024k_flash_device::read)
WRITE8_MEMBER(z88_1024k_flash_device::write)
{
- m_flash->write(space, offset & (get_cart_size() - 1), data);
+ m_flash->write(offset & (get_cart_size() - 1), data);
}
diff --git a/src/devices/bus/z88/z88.h b/src/devices/bus/z88/z88.h
index de8ecdc883f..444eeb3c111 100644
--- a/src/devices/bus/z88/z88.h
+++ b/src/devices/bus/z88/z88.h
@@ -90,9 +90,18 @@ class z88cart_slot_device : public device_t,
{
public:
// construction/destruction
+ template <typename T>
+ z88cart_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : z88cart_slot_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
z88cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
- template <class Object> devcb_base &set_out_flp_callback(Object &&cb) { return m_out_flp_cb.set_callback(std::forward<Object>(cb)); }
+ auto out_flp_callback() { return m_out_flp_cb.bind(); }
// image-level overrides
virtual image_init_result call_load() override;
@@ -133,12 +142,4 @@ private:
// device type definition
DECLARE_DEVICE_TYPE(Z88CART_SLOT, z88cart_slot_device)
-
-/***************************************************************************
- DEVICE CONFIGURATION MACROS
-***************************************************************************/
-
-#define MCFG_Z88CART_SLOT_OUT_FLP_CB(_devcb) \
- downcast<z88cart_slot_device &>(*device).set_out_flp_callback(DEVCB_##_devcb);
-
#endif // MAME_BUS_Z88_Z88_H